diff --git a/src/commands/init.ts b/src/commands/init.ts index d02e31c..4cb7ad3 100644 --- a/src/commands/init.ts +++ b/src/commands/init.ts @@ -241,7 +241,7 @@ export default createCommand(config, async ({ values }) => { `Repository "${repo}" has no starter models. Use a repository created from the starter in the Prismic dashboard.`, ); } - await removeStarterDocuments(connectedRepository.starter); + await cleanupStarterProject(connectedRepository.starter); } const hasStarterModelChanges = @@ -299,30 +299,16 @@ async function isStarterPackage(starter: NonNullable): Pr return Boolean(starterPackageName && packageJson.name === starterPackageName); } -async function removeStarterDocuments(starter: NonNullable): Promise { - if (!(await isStarterPackage(starter))) { - console.warn( - "Starter seed documents were not removed because the local package does not match the repository starter.", - ); - return; - } - - const projectRoot = await findProjectRoot(); - await rm(new URL("documents/", projectRoot), { recursive: true, force: true }); -} - async function completeStarterHandoff( adapter: Adapter, starter: NonNullable, config: { repo: string; token: string | undefined; host: string }, ): Promise { try { - const hostedPreviewURL = new URL(adapter.localPreviewConfig.resolverPath, starter.deploymentUrl) - .href; const previews = await getPreviews(config); await Promise.all( previews - .filter((preview) => preview.url === hostedPreviewURL) + .filter((preview) => preview.label === "Starter Preview") .map((preview) => removePreview(preview.id, config)), ); const hasDevelopmentPreview = previews.some( @@ -353,3 +339,13 @@ async function completeStarterHandoff( await updatePackageJsonName(config.repo); } } + +async function cleanupStarterProject(starter: NonNullable): Promise { + if (!(await isStarterPackage(starter))) return; + + const projectRoot = await findProjectRoot(); + await Promise.all([ + rm(new URL(".deployment", projectRoot), { recursive: true, force: true }), + rm(new URL("documents", projectRoot), { recursive: true, force: true }), + ]); +} diff --git a/test/init.test.ts b/test/init.test.ts index 4895327..ffda37c 100644 --- a/test/init.test.ts +++ b/test/init.test.ts @@ -315,6 +315,8 @@ it("completes the handoff for a starter project", async ({ ); await mkdir(new URL("documents/", project), { recursive: true }); await writeFile(new URL("documents/homepage.json", project), "{}"); + await mkdir(new URL(".deployment/foo/", project), { recursive: true }); + await writeFile(new URL(".deployment/foo/bar", project), "test"); const { stderr, exitCode } = await prismic("init", ["--repo", repo, "--no-setup"]); expect(exitCode, stderr).toBe(0); @@ -325,14 +327,15 @@ it("completes the handoff for a starter project", async ({ const packageJson = JSON.parse(await readFile(new URL("package.json", project), "utf-8")); expect(packageJson.name).toBe(repo); - // Seed documents are removed. + // Starter artifacts are removed. await expect(access(new URL("documents/", project))).rejects.toThrow(); + await expect(access(new URL(".deployment/", project))).rejects.toThrow(); // The hosted preview is replaced by the local Development preview. const previews = await getPreviews({ repo, token, host }); const previewLabels = previews.map((preview) => preview.label); expect(previewLabels).toContain("Development"); - expect(previewLabels).not.toContain("Production"); + expect(previewLabels).not.toContain("Starter Preview"); const repository = await getRepository({ repo, token, host }); expect(repository.simulatorUrl).toBe("http://localhost:3000/slice-simulator"); @@ -344,7 +347,7 @@ it("completes the handoff for a starter project", async ({ } }, 120_000); -it("keeps seed documents when the local package does not match the starter", async ({ +it("keeps starter artifacts when the local package does not match the starter", async ({ expect, project, prismic, @@ -357,12 +360,14 @@ it("keeps seed documents when the local package does not match the starter", asy // The fixture package.json has no name, so it cannot match the starter. await mkdir(new URL("documents/", project), { recursive: true }); await writeFile(new URL("documents/homepage.json", project), "{}"); + await mkdir(new URL(".deployment/foo/", project), { recursive: true }); + await writeFile(new URL(".deployment/foo/bar", project), "test"); const { stderr, exitCode } = await prismic("init", ["--repo", repo, "--no-setup"]); expect(exitCode, stderr).toBe(0); - expect(stderr).toContain("Starter seed documents were not removed"); await expect(access(new URL("documents/", project))).resolves.toBeUndefined(); + await expect(access(new URL(".deployment/", project))).resolves.toBeUndefined(); } finally { await deleteRepository(repo, { token, password, host }); }