Skip to content
Merged
28 changes: 12 additions & 16 deletions src/commands/init.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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 =
Expand Down Expand Up @@ -299,30 +299,16 @@ async function isStarterPackage(starter: NonNullable<Repository["starter"]>): Pr
return Boolean(starterPackageName && packageJson.name === starterPackageName);
}

async function removeStarterDocuments(starter: NonNullable<Repository["starter"]>): Promise<void> {
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<Repository["starter"]>,
config: { repo: string; token: string | undefined; host: string },
): Promise<void> {
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(
Expand Down Expand Up @@ -353,3 +339,13 @@ async function completeStarterHandoff(
await updatePackageJsonName(config.repo);
}
}

async function cleanupStarterProject(starter: NonNullable<Repository["starter"]>): Promise<void> {
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 }),
]);
}
13 changes: 9 additions & 4 deletions test/init.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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");
Expand All @@ -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,
Expand All @@ -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 });
}
Expand Down
Loading