@slicemachine/adapter-next 0.3.2-dev-next-release.4 → 0.3.2-dev-next-release.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/dist/hooks/project-init.cjs +330 -58
  2. package/dist/hooks/project-init.cjs.map +1 -1
  3. package/dist/hooks/project-init.js +331 -59
  4. package/dist/hooks/project-init.js.map +1 -1
  5. package/dist/hooks/slice-create.cjs +3 -2
  6. package/dist/hooks/slice-create.cjs.map +1 -1
  7. package/dist/hooks/slice-create.js +3 -2
  8. package/dist/hooks/slice-create.js.map +1 -1
  9. package/dist/hooks/sliceSimulator-setup-read.cjs +3 -5
  10. package/dist/hooks/sliceSimulator-setup-read.cjs.map +1 -1
  11. package/dist/hooks/sliceSimulator-setup-read.js +3 -5
  12. package/dist/hooks/sliceSimulator-setup-read.js.map +1 -1
  13. package/dist/lib/checkHasAppRouter.cjs +10 -0
  14. package/dist/lib/checkHasAppRouter.cjs.map +1 -0
  15. package/dist/lib/checkHasAppRouter.d.ts +5 -0
  16. package/dist/lib/checkHasAppRouter.js +10 -0
  17. package/dist/lib/checkHasAppRouter.js.map +1 -0
  18. package/dist/lib/checkHasSrcDirectory.cjs +8 -0
  19. package/dist/lib/checkHasSrcDirectory.cjs.map +1 -0
  20. package/dist/lib/checkHasSrcDirectory.d.ts +5 -0
  21. package/dist/lib/checkHasSrcDirectory.js +8 -0
  22. package/dist/lib/checkHasSrcDirectory.js.map +1 -0
  23. package/dist/lib/getJSFileExtension.cjs +16 -0
  24. package/dist/lib/getJSFileExtension.cjs.map +1 -0
  25. package/dist/lib/getJSFileExtension.d.ts +7 -0
  26. package/dist/lib/getJSFileExtension.js +16 -0
  27. package/dist/lib/getJSFileExtension.js.map +1 -0
  28. package/dist/lib/upsertGlobalContentTypes.cjs +1 -1
  29. package/dist/lib/upsertGlobalContentTypes.cjs.map +1 -1
  30. package/dist/lib/upsertGlobalContentTypes.js +1 -1
  31. package/dist/lib/upsertGlobalContentTypes.js.map +1 -1
  32. package/dist/lib/upsertSliceLibraryIndexFile.cjs +3 -3
  33. package/dist/lib/upsertSliceLibraryIndexFile.cjs.map +1 -1
  34. package/dist/lib/upsertSliceLibraryIndexFile.js +3 -3
  35. package/dist/lib/upsertSliceLibraryIndexFile.js.map +1 -1
  36. package/dist/types.d.ts +40 -0
  37. package/package.json +3 -4
  38. package/src/hooks/project-init.ts +412 -64
  39. package/src/hooks/slice-create.ts +3 -5
  40. package/src/hooks/sliceSimulator-setup-read.ts +3 -5
  41. package/src/lib/checkHasAppRouter.ts +22 -0
  42. package/src/lib/checkHasSrcDirectory.ts +15 -0
  43. package/src/lib/getJSFileExtension.ts +29 -0
  44. package/src/lib/upsertGlobalContentTypes.ts +3 -1
  45. package/src/lib/upsertSliceLibraryIndexFile.ts +3 -4
  46. package/src/types.ts +44 -0
  47. package/dist/lib/getJSOrTSXFileExtension.cjs +0 -18
  48. package/dist/lib/getJSOrTSXFileExtension.cjs.map +0 -1
  49. package/dist/lib/getJSOrTSXFileExtension.d.ts +0 -8
  50. package/dist/lib/getJSOrTSXFileExtension.js +0 -18
  51. package/dist/lib/getJSOrTSXFileExtension.js.map +0 -1
  52. package/src/lib/getJSOrTSXFileExtension.ts +0 -26
@@ -3,10 +3,12 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const fs = require("node:fs/promises");
4
4
  const path = require("node:path");
5
5
  const commonTags = require("common-tags");
6
+ const checkHasAppRouter = require("../lib/checkHasAppRouter.cjs");
7
+ const checkHasSrcDirectory = require("../lib/checkHasSrcDirectory.cjs");
8
+ const checkIsTypeScriptProject = require("../lib/checkIsTypeScriptProject.cjs");
6
9
  const checkPathExists = require("../lib/checkPathExists.cjs");
7
- const getJSOrTSXFileExtension = require("../lib/getJSOrTSXFileExtension.cjs");
10
+ const getJSFileExtension = require("../lib/getJSFileExtension.cjs");
8
11
  const rejectIfNecessary = require("../lib/rejectIfNecessary.cjs");
9
- const checkIsTypeScriptProject = require("../lib/checkIsTypeScriptProject.cjs");
10
12
  function _interopNamespaceDefault(e) {
11
13
  const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
12
14
  if (e) {
@@ -39,16 +41,126 @@ const createPrismicIOFile = async ({ helpers, options }) => {
39
41
  helpers,
40
42
  options
41
43
  });
42
- const filePath = helpers.joinPathFromRoot(isTypeScriptProject ? "prismicio.ts" : "prismicio.js");
44
+ const hasSrcDirectory = await checkHasSrcDirectory.checkHasSrcDirectory({ helpers });
45
+ const hasAppRouter = await checkHasAppRouter.checkHasAppRouter({ helpers });
46
+ const extension = await getJSFileExtension.getJSFileExtension({ helpers, options });
47
+ const filename = `prismicio.${extension}`;
48
+ const filePath = hasSrcDirectory ? helpers.joinPathFromRoot("src", filename) : helpers.joinPathFromRoot(filename);
43
49
  if (await checkPathExists.checkPathExists(filePath)) {
44
50
  return;
45
51
  }
52
+ let createClientContents;
53
+ if (hasAppRouter) {
54
+ if (isTypeScriptProject) {
55
+ createClientContents = commonTags.source`
56
+ /**
57
+ * Creates a Prismic client for the project's repository. The client is used to
58
+ * query content from the Prismic API.
59
+ *
60
+ * @param config - Configuration for the Prismic client.
61
+ */
62
+ export const createClient = (config: prismicNext.CreateClientConfig = {}) => {
63
+ const client = prismic.createClient(repositoryName, {
64
+ routes,
65
+ fetchOptions:
66
+ process.env.NODE_ENV === 'production'
67
+ ? { next: { tags: ['prismic'] }, cache: 'force-cache' }
68
+ : { next: { revalidate: 5 } },
69
+ ...config,
70
+ });
71
+
72
+ prismicNext.enableAutoPreviews({
73
+ client,
74
+ previewData: config.previewData,
75
+ req: config.req,
76
+ });
77
+
78
+ return client;
79
+ };
80
+ `;
81
+ } else {
82
+ createClientContents = commonTags.source`
83
+ /**
84
+ * Creates a Prismic client for the project's repository. The client is used to
85
+ * query content from the Prismic API.
86
+ *
87
+ * @param {prismicNext.CreateClientConfig} config - Configuration for the Prismic client.
88
+ */
89
+ export const createClient = (config = {}) => {
90
+ const client = prismic.createClient(repositoryName, {
91
+ routes,
92
+ fetchOptions:
93
+ process.env.NODE_ENV === 'production'
94
+ ? { next: { tags: ['prismic'] }, cache: 'force-cache' }
95
+ : { next: { revalidate: 5 } },
96
+ ...config,
97
+ });
98
+
99
+ prismicNext.enableAutoPreviews({
100
+ client,
101
+ previewData: config.previewData,
102
+ req: config.req,
103
+ });
104
+
105
+ return client;
106
+ };
107
+ `;
108
+ }
109
+ } else {
110
+ if (isTypeScriptProject) {
111
+ createClientContents = commonTags.source`
112
+ /**
113
+ * Creates a Prismic client for the project's repository. The client is used to
114
+ * query content from the Prismic API.
115
+ *
116
+ * @param config - Configuration for the Prismic client.
117
+ */
118
+ export const createClient = (config: prismicNext.CreateClientConfig = {}) => {
119
+ const client = prismic.createClient(repositoryName, {
120
+ routes,
121
+ ...config,
122
+ });
123
+
124
+ prismicNext.enableAutoPreviews({
125
+ client,
126
+ previewData: config.previewData,
127
+ req: config.req,
128
+ });
129
+
130
+ return client;
131
+ };
132
+ `;
133
+ } else {
134
+ createClientContents = commonTags.source`
135
+ /**
136
+ * Creates a Prismic client for the project's repository. The client is used to
137
+ * query content from the Prismic API.
138
+ *
139
+ * @param {prismicNext.CreateClientConfig} config - Configuration for the Prismic client.
140
+ */
141
+ export const createClient = (config = {}) => {
142
+ const client = prismic.createClient(repositoryName, {
143
+ routes,
144
+ ...config,
145
+ });
146
+
147
+ prismicNext.enableAutoPreviews({
148
+ client,
149
+ previewData: config.previewData,
150
+ req: config.req,
151
+ });
152
+
153
+ return client;
154
+ };
155
+ `;
156
+ }
157
+ }
46
158
  let contents;
47
159
  if (isTypeScriptProject) {
48
- contents = commonTags.stripIndent`
160
+ contents = commonTags.source`
49
161
  import * as prismic from "@prismicio/client";
50
162
  import * as prismicNext from "@prismicio/next";
51
- import config from "./slicemachine.config.json";
163
+ import config from "${hasSrcDirectory ? ".." : "."}/slicemachine.config.json";
52
164
 
53
165
  /**
54
166
  * The project's Prismic repository name.
@@ -56,8 +168,7 @@ const createPrismicIOFile = async ({ helpers, options }) => {
56
168
  export const repositoryName = config.repositoryName;
57
169
 
58
170
  /**
59
- * A list of Route Resolver objects that define how a document's \`url\` field
60
- * is resolved.
171
+ * A list of Route Resolver objects that define how a document's \`url\` field is resolved.
61
172
  *
62
173
  * {@link https://prismic.io/docs/route-resolver#route-resolver}
63
174
  */
@@ -73,32 +184,13 @@ const createPrismicIOFile = async ({ helpers, options }) => {
73
184
  },
74
185
  ];
75
186
 
76
- /**
77
- * Creates a Prismic client for the project's repository. The client is used to
78
- * query content from the Prismic API.
79
- *
80
- * @param config - Configuration for the Prismic client.
81
- */
82
- export const createClient = (config: prismicNext.CreateClientConfig = {}) => {
83
- const client = prismic.createClient(repositoryName, {
84
- routes,
85
- ...config,
86
- });
87
-
88
- prismicNext.enableAutoPreviews({
89
- client,
90
- previewData: config.previewData,
91
- req: config.req,
92
- });
93
-
94
- return client;
95
- };
187
+ ${createClientContents}
96
188
  `;
97
189
  } else {
98
- contents = commonTags.stripIndent`
190
+ contents = commonTags.source`
99
191
  import * as prismic from "@prismicio/client";
100
192
  import * as prismicNext from "@prismicio/next";
101
- import config from "./slicemachine.config.json";
193
+ import config from "${hasSrcDirectory ? ".." : "."}/slicemachine.config.json";
102
194
 
103
195
  /**
104
196
  * The project's Prismic repository name.
@@ -106,8 +198,7 @@ const createPrismicIOFile = async ({ helpers, options }) => {
106
198
  export const repositoryName = config.repositoryName;
107
199
 
108
200
  /**
109
- * A list of Route Resolver objects that define how a document's \`url\` field
110
- * is resolved.
201
+ * A list of Route Resolver objects that define how a document's \`url\` field is resolved.
111
202
  *
112
203
  * {@link https://prismic.io/docs/route-resolver#route-resolver}
113
204
  *
@@ -125,26 +216,7 @@ const createPrismicIOFile = async ({ helpers, options }) => {
125
216
  },
126
217
  ];
127
218
 
128
- /**
129
- * Creates a Prismic client for the project's repository. The client is used to
130
- * query content from the Prismic API.
131
- *
132
- * @param {prismicNext.CreateClientConfig} config - Configuration for the Prismic client.
133
- */
134
- export const createClient = (config = {}) => {
135
- const client = prismic.createClient(repositoryName, {
136
- routes,
137
- ...config,
138
- });
139
-
140
- prismicNext.enableAutoPreviews({
141
- client,
142
- previewData: config.previewData,
143
- req: config.req,
144
- });
145
-
146
- return client;
147
- };
219
+ ${createClientContents}
148
220
  `;
149
221
  }
150
222
  if (options.format) {
@@ -153,17 +225,22 @@ const createPrismicIOFile = async ({ helpers, options }) => {
153
225
  await fs__namespace.writeFile(filePath, contents);
154
226
  };
155
227
  const createSliceSimulatorPage = async ({ helpers, options }) => {
156
- const srcDirectoryExists = await checkPathExists.checkPathExists(helpers.joinPathFromRoot("src"));
157
- const filePath = helpers.joinPathFromRoot(srcDirectoryExists ? "src/pages" : "pages", `slice-simulator.${await getJSOrTSXFileExtension.getJSOrTSXFileExtension({ helpers, options })}`);
228
+ const hasSrcDirectory = await checkHasSrcDirectory.checkHasSrcDirectory({ helpers });
229
+ const hasAppRouter = await checkHasAppRouter.checkHasAppRouter({ helpers });
230
+ const extension = await getJSFileExtension.getJSFileExtension({ helpers, options, jsx: true });
231
+ const filePath = helpers.joinPathFromRoot(...[
232
+ hasSrcDirectory ? "src" : void 0,
233
+ hasAppRouter ? `app/slice-simulator/page.${extension}` : `pages/slice-simulator.${extension}`
234
+ ].filter((segment) => Boolean(segment)));
158
235
  if (await checkPathExists.checkPathExists(filePath)) {
159
236
  return;
160
237
  }
161
238
  await fs__namespace.mkdir(path__namespace.dirname(filePath), { recursive: true });
162
- let contents = commonTags.stripIndent`
239
+ let contents = commonTags.source`
163
240
  import { SliceSimulator } from "@slicemachine/adapter-next/simulator";
164
241
  import { SliceZone } from "@prismicio/react";
165
242
 
166
- import { components } from "../slices";
243
+ import { components } from "${hasAppRouter ? "../.." : ".."}/slices";
167
244
 
168
245
  export default function SliceSimulatorPage() {
169
246
  return (
@@ -178,11 +255,206 @@ const createSliceSimulatorPage = async ({ helpers, options }) => {
178
255
  }
179
256
  await fs__namespace.writeFile(filePath, contents);
180
257
  };
258
+ const createPreviewRoute = async ({ helpers, options }) => {
259
+ const hasSrcDirectory = await checkHasSrcDirectory.checkHasSrcDirectory({ helpers });
260
+ const hasAppRouter = await checkHasAppRouter.checkHasAppRouter({ helpers });
261
+ const isTypeScriptProject = await checkIsTypeScriptProject.checkIsTypeScriptProject({
262
+ helpers,
263
+ options
264
+ });
265
+ const extension = await getJSFileExtension.getJSFileExtension({ helpers, options });
266
+ const filePath = helpers.joinPathFromRoot(...[
267
+ hasSrcDirectory ? "src" : void 0,
268
+ hasAppRouter ? `app/api/preview/route.${extension}` : `pages/api/preview.${extension}`
269
+ ].filter((segment) => Boolean(segment)));
270
+ if (await checkPathExists.checkPathExists(filePath)) {
271
+ return;
272
+ }
273
+ let contents;
274
+ if (hasAppRouter) {
275
+ if (isTypeScriptProject) {
276
+ contents = commonTags.source`
277
+ import { NextRequest } from "next/server";
278
+ import { draftMode } from "next/headers";
279
+ import { redirectToPreviewURL } from "@prismicio/next";
280
+
281
+ import { createClient } from "../../../prismicio";
282
+
283
+ export async function GET(request: NextRequest) {
284
+ const client = createClient();
285
+
286
+ draftMode().enable();
287
+
288
+ await redirectToPreviewURL({ client, request });
289
+ }
290
+ `;
291
+ } else {
292
+ contents = commonTags.source`
293
+ import { draftMode } from "next/headers";
294
+ import { redirectToPreviewURL } from "@prismicio/next";
295
+
296
+ import { createClient } from "../../../prismicio";
297
+
298
+ export async function GET(request) {
299
+ const client = createClient();
300
+
301
+ draftMode().enable();
302
+
303
+ await redirectToPreviewURL({ client, request });
304
+ }
305
+ `;
306
+ }
307
+ } else {
308
+ if (isTypeScriptProject) {
309
+ contents = commonTags.source`
310
+ import { NextApiRequest, NextApiResponse } from "next";
311
+ import { setPreviewData, redirectToPreviewURL } from "@prismicio/next";
312
+
313
+ import { createClient } from "../../prismicio";
314
+
315
+ export default async (req: NextApiRequest, res: NextApiResponse) => {
316
+ const client = createClient({ req });
317
+
318
+ await setPreviewData({ req, res });
319
+
320
+ await redirectToPreviewURL({ req, res, client });
321
+ };
322
+ `;
323
+ } else {
324
+ contents = commonTags.source`
325
+ import { setPreviewData, redirectToPreviewURL } from "@prismicio/next";
326
+
327
+ import { createClient } from "../../prismicio";
328
+
329
+ export default async (req, res) => {
330
+ const client = createClient({ req });
331
+
332
+ await setPreviewData({ req, res });
333
+
334
+ await redirectToPreviewURL({ req, res, client });
335
+ };
336
+ `;
337
+ }
338
+ }
339
+ if (options.format) {
340
+ contents = await helpers.format(contents, filePath);
341
+ }
342
+ await fs__namespace.mkdir(path__namespace.dirname(filePath), { recursive: true });
343
+ await fs__namespace.writeFile(filePath, contents);
344
+ };
345
+ const createExitPreviewRoute = async ({ helpers, options }) => {
346
+ const hasSrcDirectory = await checkHasSrcDirectory.checkHasSrcDirectory({ helpers });
347
+ const hasAppRouter = await checkHasAppRouter.checkHasAppRouter({ helpers });
348
+ const isTypeScriptProject = await checkIsTypeScriptProject.checkIsTypeScriptProject({
349
+ helpers,
350
+ options
351
+ });
352
+ const extension = await getJSFileExtension.getJSFileExtension({ helpers, options });
353
+ const filePath = helpers.joinPathFromRoot(...[
354
+ hasSrcDirectory ? "src" : void 0,
355
+ hasAppRouter ? `app/api/exit-preview/route.${extension}` : `pages/api/exit-preview.${extension}`
356
+ ].filter((segment) => Boolean(segment)));
357
+ if (await checkPathExists.checkPathExists(filePath)) {
358
+ return;
359
+ }
360
+ let contents;
361
+ if (hasAppRouter) {
362
+ contents = `
363
+ import { exitPreview } from "@prismicio/next";
364
+
365
+ export async function GET() {
366
+ return await exitPreview();
367
+ }
368
+ `;
369
+ } else {
370
+ if (isTypeScriptProject) {
371
+ contents = commonTags.source`
372
+ import { NextApiRequest, NextApiResponse } from "next";
373
+ import { exitPreview } from "@prismicio/next";
374
+
375
+ export async function handler(req: NextApiRequest, res: NextApiResponse) {
376
+ return await exitPreview({ req, res });
377
+ }
378
+ `;
379
+ } else {
380
+ contents = commonTags.source`
381
+ import { exitPreview } from "@prismicio/next";
382
+
383
+ export async function handler(req, res) {
384
+ return await exitPreview({ req, res });
385
+ }
386
+ `;
387
+ }
388
+ }
389
+ if (options.format) {
390
+ contents = await helpers.format(contents, filePath);
391
+ }
392
+ await fs__namespace.mkdir(path__namespace.dirname(filePath), { recursive: true });
393
+ await fs__namespace.writeFile(filePath, contents);
394
+ };
395
+ const modifySliceMachineConfig = async ({ helpers, options }) => {
396
+ var _a;
397
+ const hasSrcDirectory = await checkHasSrcDirectory.checkHasSrcDirectory({ helpers });
398
+ const project = await helpers.getProject();
399
+ (_a = project.config).localSliceSimulatorURL || (_a.localSliceSimulatorURL = "http://localhost:3000/slice-simulator");
400
+ if (hasSrcDirectory && JSON.stringify(project.config.libraries) === JSON.stringify(["./slices"])) {
401
+ try {
402
+ const entries = await fs__namespace.readdir(helpers.joinPathFromRoot("slices"));
403
+ if (!entries.map((entry) => path__namespace.parse(entry).name).includes("index")) {
404
+ project.config.libraries = ["./src/slices"];
405
+ }
406
+ } catch (error) {
407
+ if (error instanceof Error && "code" in error && error.code === "ENOENT") {
408
+ project.config.libraries = ["./src/slices"];
409
+ }
410
+ }
411
+ }
412
+ const filePath = helpers.joinPathFromRoot("slicemachine.config.json");
413
+ let contents = JSON.stringify(project.config);
414
+ if (options.format) {
415
+ contents = await helpers.format(contents, filePath);
416
+ }
417
+ await fs__namespace.writeFile(helpers.joinPathFromRoot("slicemachine.config.json"), contents);
418
+ };
419
+ const createRevalidateRoute = async ({ helpers, options }) => {
420
+ const hasAppRouter = await checkHasAppRouter.checkHasAppRouter({ helpers });
421
+ if (!hasAppRouter) {
422
+ return;
423
+ }
424
+ const hasSrcDirectory = await checkHasSrcDirectory.checkHasSrcDirectory({ helpers });
425
+ const extension = await getJSFileExtension.getJSFileExtension({ helpers, options });
426
+ const filePath = helpers.joinPathFromRoot(...[
427
+ hasSrcDirectory ? "src" : void 0,
428
+ `app/api/revalidate/route.${extension}`
429
+ ].filter((segment) => Boolean(segment)));
430
+ if (await checkPathExists.checkPathExists(filePath)) {
431
+ return;
432
+ }
433
+ let contents = commonTags.source`
434
+ import { NextResponse } from "next/server";
435
+ import { revalidateTag } from "next/cache";
436
+
437
+ export async function POST() {
438
+ revalidateTag("prismic");
439
+
440
+ return NextResponse.json({ revalidated: true, now: Date.now() });
441
+ }
442
+ `;
443
+ if (options.format) {
444
+ contents = await helpers.format(contents, filePath);
445
+ }
446
+ await fs__namespace.mkdir(path__namespace.dirname(filePath), { recursive: true });
447
+ await fs__namespace.writeFile(filePath, contents);
448
+ };
181
449
  const projectInit = async ({ installDependencies: _installDependencies }, context) => {
182
450
  rejectIfNecessary.rejectIfNecessary(await Promise.allSettled([
183
- await installDependencies({ installDependencies: _installDependencies }),
184
- await createPrismicIOFile(context),
185
- await createSliceSimulatorPage(context)
451
+ installDependencies({ installDependencies: _installDependencies }),
452
+ modifySliceMachineConfig(context),
453
+ createPrismicIOFile(context),
454
+ createSliceSimulatorPage(context),
455
+ createPreviewRoute(context),
456
+ createExitPreviewRoute(context),
457
+ createRevalidateRoute(context)
186
458
  ]));
187
459
  };
188
460
  exports.projectInit = projectInit;
@@ -1 +1 @@
1
- {"version":3,"file":"project-init.cjs","sources":["../../../src/hooks/project-init.ts"],"sourcesContent":["import * as fs from \"node:fs/promises\";\nimport * as path from \"node:path\";\nimport type {\n\tProjectInitHook,\n\tProjectInitHookData,\n\tSliceMachineContext,\n} from \"@slicemachine/plugin-kit\";\nimport { stripIndent } from \"common-tags\";\n\nimport { checkPathExists } from \"../lib/checkPathExists\";\nimport { getJSOrTSXFileExtension } from \"../lib/getJSOrTSXFileExtension\";\nimport { rejectIfNecessary } from \"../lib/rejectIfNecessary\";\n\nimport type { PluginOptions } from \"../types\";\nimport { checkIsTypeScriptProject } from \"../lib/checkIsTypeScriptProject\";\n\ntype InstallDependenciesArgs = {\n\tinstallDependencies: ProjectInitHookData[\"installDependencies\"];\n};\n\nconst installDependencies = async ({\n\tinstallDependencies,\n}: InstallDependenciesArgs) => {\n\tawait installDependencies({\n\t\tdependencies: {\n\t\t\t\"@prismicio/client\": \"latest\",\n\t\t\t\"@prismicio/react\": \"latest\",\n\t\t\t\"@prismicio/next\": \"latest\",\n\t\t},\n\t});\n};\n\ntype CreatePrismicIOFileArgs = SliceMachineContext<PluginOptions>;\n\nconst createPrismicIOFile = async ({\n\thelpers,\n\toptions,\n}: CreatePrismicIOFileArgs) => {\n\tconst isTypeScriptProject = await checkIsTypeScriptProject({\n\t\thelpers,\n\t\toptions,\n\t});\n\n\tconst filePath = helpers.joinPathFromRoot(\n\t\tisTypeScriptProject ? \"prismicio.ts\" : \"prismicio.js\",\n\t);\n\n\tif (await checkPathExists(filePath)) {\n\t\treturn;\n\t}\n\n\tlet contents: string;\n\n\tif (isTypeScriptProject) {\n\t\tcontents = stripIndent`\n\t\t\timport * as prismic from \"@prismicio/client\";\n\t\t\timport * as prismicNext from \"@prismicio/next\";\n\t\t\timport config from \"./slicemachine.config.json\";\n\n\t\t\t/**\n\t\t\t * The project's Prismic repository name.\n\t\t\t */\n\t\t\texport const repositoryName = config.repositoryName;\n\n\t\t\t/**\n\t\t\t * A list of Route Resolver objects that define how a document's \\`url\\` field\n\t\t\t * is resolved.\n\t\t\t *\n\t\t\t * {@link https://prismic.io/docs/route-resolver#route-resolver}\n\t\t\t */\n\t\t\t// TODO: Update the routes array to match your project's route structure.\n\t\t\tconst routes: prismic.ClientConfig[\"routes\"] = [\n\t\t\t\t{\n\t\t\t\t\ttype: \"homepage\",\n\t\t\t\t\tpath: \"/\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttype: \"page\",\n\t\t\t\t\tpath: \"/:uid\",\n\t\t\t\t},\n\t\t\t];\n\n\t\t\t/**\n\t\t\t * Creates a Prismic client for the project's repository. The client is used to\n\t\t\t * query content from the Prismic API.\n\t\t\t *\n\t\t\t * @param config - Configuration for the Prismic client.\n\t\t\t */\n\t\t\texport const createClient = (config: prismicNext.CreateClientConfig = {}) => {\n\t\t\t\tconst client = prismic.createClient(repositoryName, {\n\t\t\t\t\troutes,\n\t\t\t\t\t...config,\n\t\t\t\t});\n\n\t\t\t\tprismicNext.enableAutoPreviews({\n\t\t\t\t\tclient,\n\t\t\t\t\tpreviewData: config.previewData,\n\t\t\t\t\treq: config.req,\n\t\t\t\t});\n\n\t\t\t\treturn client;\n\t\t\t};\n\t\t`;\n\t} else {\n\t\tcontents = stripIndent`\n\t\t\timport * as prismic from \"@prismicio/client\";\n\t\t\timport * as prismicNext from \"@prismicio/next\";\n\t\t\timport config from \"./slicemachine.config.json\";\n\n\t\t\t/**\n\t\t\t * The project's Prismic repository name.\n\t\t\t */\n\t\t\texport const repositoryName = config.repositoryName;\n\n\t\t\t/**\n\t\t\t * A list of Route Resolver objects that define how a document's \\`url\\` field\n\t\t\t * is resolved.\n\t\t\t *\n\t\t\t * {@link https://prismic.io/docs/route-resolver#route-resolver}\n\t\t\t *\n\t\t\t * @type {prismic.ClientConfig[\"routes\"]}\n\t\t\t */\n\t\t\t// TODO: Update the routes array to match your project's route structure.\n\t\t\tconst routes = [\n\t\t\t\t{\n\t\t\t\t\ttype: \"homepage\",\n\t\t\t\t\tpath: \"/\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttype: \"page\",\n\t\t\t\t\tpath: \"/:uid\",\n\t\t\t\t},\n\t\t\t];\n\n\t\t\t/**\n\t\t\t * Creates a Prismic client for the project's repository. The client is used to\n\t\t\t * query content from the Prismic API.\n\t\t\t *\n\t\t\t * @param {prismicNext.CreateClientConfig} config - Configuration for the Prismic client.\n\t\t\t */\n\t\t\texport const createClient = (config = {}) => {\n\t\t\t\tconst client = prismic.createClient(repositoryName, {\n\t\t\t\t\troutes,\n\t\t\t\t\t...config,\n\t\t\t\t});\n\n\t\t\t\tprismicNext.enableAutoPreviews({\n\t\t\t\t\tclient,\n\t\t\t\t\tpreviewData: config.previewData,\n\t\t\t\t\treq: config.req,\n\t\t\t\t});\n\n\t\t\t\treturn client;\n\t\t\t};\n\t\t`;\n\t}\n\n\tif (options.format) {\n\t\tcontents = await helpers.format(contents, filePath);\n\t}\n\n\tawait fs.writeFile(filePath, contents);\n};\n\ntype CreateSliceSimulatorPageArgs = SliceMachineContext<PluginOptions>;\n\nconst createSliceSimulatorPage = async ({\n\thelpers,\n\toptions,\n}: CreateSliceSimulatorPageArgs) => {\n\tconst srcDirectoryExists = await checkPathExists(\n\t\thelpers.joinPathFromRoot(\"src\"),\n\t);\n\n\tconst filePath = helpers.joinPathFromRoot(\n\t\tsrcDirectoryExists ? \"src/pages\" : \"pages\",\n\t\t`slice-simulator.${await getJSOrTSXFileExtension({ helpers, options })}`,\n\t);\n\n\tif (await checkPathExists(filePath)) {\n\t\treturn;\n\t}\n\n\tawait fs.mkdir(path.dirname(filePath), { recursive: true });\n\n\tlet contents = stripIndent`\n\t\timport { SliceSimulator } from \"@slicemachine/adapter-next/simulator\";\n\t\timport { SliceZone } from \"@prismicio/react\";\n\n\t\timport { components } from \"../slices\";\n\n\t\texport default function SliceSimulatorPage() {\n\t\t\treturn (\n\t\t\t\t<SliceSimulator\n\t\t\t\t\tsliceZone={(props) => <SliceZone {...props} components={components} />}\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\t`;\n\n\tif (options.format) {\n\t\tcontents = await helpers.format(contents, filePath);\n\t}\n\n\tawait fs.writeFile(filePath, contents);\n};\n\nexport const projectInit: ProjectInitHook<PluginOptions> = async (\n\t{ installDependencies: _installDependencies },\n\tcontext,\n) => {\n\trejectIfNecessary(\n\t\tawait Promise.allSettled([\n\t\t\tawait installDependencies({ installDependencies: _installDependencies }),\n\t\t\tawait createPrismicIOFile(context),\n\t\t\tawait createSliceSimulatorPage(context),\n\t\t]),\n\t);\n};\n"],"names":["installDependencies","checkIsTypeScriptProject","checkPathExists","stripIndent","fs","getJSOrTSXFileExtension","path","rejectIfNecessary"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAoBA,MAAM,sBAAsB,OAAO,EAClC,qBAAAA,2BAC6B;AAC7B,QAAMA,qBAAoB;AAAA,IACzB,cAAc;AAAA,MACb,qBAAqB;AAAA,MACrB,oBAAoB;AAAA,MACpB,mBAAmB;AAAA,IACnB;AAAA,EAAA,CACD;AACF;AAIA,MAAM,sBAAsB,OAAO,EAClC,SACA,cAC6B;AACvB,QAAA,sBAAsB,MAAMC,kDAAyB;AAAA,IAC1D;AAAA,IACA;AAAA,EAAA,CACA;AAED,QAAM,WAAW,QAAQ,iBACxB,sBAAsB,iBAAiB,cAAc;AAGlD,MAAA,MAAMC,gBAAAA,gBAAgB,QAAQ,GAAG;AACpC;AAAA,EACA;AAEG,MAAA;AAEJ,MAAI,qBAAqB;AACb,eAAAC,WAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA,EAAA,OAiDL;AACK,eAAAA,WAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA,EAmDX;AAED,MAAI,QAAQ,QAAQ;AACnB,eAAW,MAAM,QAAQ,OAAO,UAAU,QAAQ;AAAA,EAClD;AAEK,QAAAC,cAAG,UAAU,UAAU,QAAQ;AACtC;AAIA,MAAM,2BAA2B,OAAO,EACvC,SACA,cACkC;AAClC,QAAM,qBAAqB,MAAMF,gBAAA,gBAChC,QAAQ,iBAAiB,KAAK,CAAC;AAGhC,QAAM,WAAW,QAAQ,iBACxB,qBAAqB,cAAc,SACnC,mBAAmB,MAAMG,wBAAAA,wBAAwB,EAAE,SAAS,QAAA,CAAS,GAAG;AAGrE,MAAA,MAAMH,gBAAAA,gBAAgB,QAAQ,GAAG;AACpC;AAAA,EACA;AAEK,QAAAE,cAAG,MAAME,gBAAK,QAAQ,QAAQ,GAAG,EAAE,WAAW,KAAA,CAAM;AAE1D,MAAI,WAAWH,WAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAef,MAAI,QAAQ,QAAQ;AACnB,eAAW,MAAM,QAAQ,OAAO,UAAU,QAAQ;AAAA,EAClD;AAEK,QAAAC,cAAG,UAAU,UAAU,QAAQ;AACtC;AAEO,MAAM,cAA8C,OAC1D,EAAE,qBAAqB,qBAAA,GACvB,YACG;AAEFG,sCAAA,MAAM,QAAQ,WAAW;AAAA,IACxB,MAAM,oBAAoB,EAAE,qBAAqB,sBAAsB;AAAA,IACvE,MAAM,oBAAoB,OAAO;AAAA,IACjC,MAAM,yBAAyB,OAAO;AAAA,EACtC,CAAA,CAAC;AAEJ;;"}
1
+ {"version":3,"file":"project-init.cjs","sources":["../../../src/hooks/project-init.ts"],"sourcesContent":["import * as fs from \"node:fs/promises\";\nimport * as path from \"node:path\";\nimport type {\n\tProjectInitHook,\n\tProjectInitHookData,\n\tSliceMachineContext,\n} from \"@slicemachine/plugin-kit\";\nimport { source } from \"common-tags\";\n\nimport { checkHasAppRouter } from \"../lib/checkHasAppRouter\";\nimport { checkHasSrcDirectory } from \"../lib/checkHasSrcDirectory\";\nimport { checkIsTypeScriptProject } from \"../lib/checkIsTypeScriptProject\";\nimport { checkPathExists } from \"../lib/checkPathExists\";\nimport { getJSFileExtension } from \"../lib/getJSFileExtension\";\nimport { rejectIfNecessary } from \"../lib/rejectIfNecessary\";\n\nimport type { PluginOptions } from \"../types\";\n\ntype InstallDependenciesArgs = {\n\tinstallDependencies: ProjectInitHookData[\"installDependencies\"];\n};\n\nconst installDependencies = async ({\n\tinstallDependencies,\n}: InstallDependenciesArgs) => {\n\tawait installDependencies({\n\t\tdependencies: {\n\t\t\t\"@prismicio/client\": \"latest\",\n\t\t\t\"@prismicio/react\": \"latest\",\n\t\t\t\"@prismicio/next\": \"latest\",\n\t\t},\n\t});\n};\n\ntype CreatePrismicIOFileArgs = SliceMachineContext<PluginOptions>;\n\nconst createPrismicIOFile = async ({\n\thelpers,\n\toptions,\n}: CreatePrismicIOFileArgs) => {\n\tconst isTypeScriptProject = await checkIsTypeScriptProject({\n\t\thelpers,\n\t\toptions,\n\t});\n\tconst hasSrcDirectory = await checkHasSrcDirectory({ helpers });\n\tconst hasAppRouter = await checkHasAppRouter({ helpers });\n\n\tconst extension = await getJSFileExtension({ helpers, options });\n\tconst filename = `prismicio.${extension}`;\n\tconst filePath = hasSrcDirectory\n\t\t? helpers.joinPathFromRoot(\"src\", filename)\n\t\t: helpers.joinPathFromRoot(filename);\n\n\tif (await checkPathExists(filePath)) {\n\t\treturn;\n\t}\n\n\tlet createClientContents: string;\n\n\tif (hasAppRouter) {\n\t\tif (isTypeScriptProject) {\n\t\t\tcreateClientContents = source`\n\t\t\t\t/**\n\t\t\t\t * Creates a Prismic client for the project's repository. The client is used to\n\t\t\t\t * query content from the Prismic API.\n\t\t\t\t *\n\t\t\t\t * @param config - Configuration for the Prismic client.\n\t\t\t\t */\n\t\t\t\texport const createClient = (config: prismicNext.CreateClientConfig = {}) => {\n\t\t\t\t\tconst client = prismic.createClient(repositoryName, {\n\t\t\t\t\t\troutes,\n\t\t\t\t\t\tfetchOptions:\n\t\t\t\t\t\t\tprocess.env.NODE_ENV === 'production'\n\t\t\t\t\t\t\t\t? { next: { tags: ['prismic'] }, cache: 'force-cache' }\n\t\t\t\t\t\t\t\t: { next: { revalidate: 5 } },\n\t\t\t\t\t\t...config,\n\t\t\t\t\t});\n\n\t\t\t\t\tprismicNext.enableAutoPreviews({\n\t\t\t\t\t\tclient,\n\t\t\t\t\t\tpreviewData: config.previewData,\n\t\t\t\t\t\treq: config.req,\n\t\t\t\t\t});\n\n\t\t\t\t\treturn client;\n\t\t\t\t};\n\t\t\t`;\n\t\t} else {\n\t\t\tcreateClientContents = source`\n\t\t\t\t/**\n\t\t\t\t * Creates a Prismic client for the project's repository. The client is used to\n\t\t\t\t * query content from the Prismic API.\n\t\t\t\t *\n\t\t\t\t * @param {prismicNext.CreateClientConfig} config - Configuration for the Prismic client.\n\t\t\t\t */\n\t\t\t\texport const createClient = (config = {}) => {\n\t\t\t\t\tconst client = prismic.createClient(repositoryName, {\n\t\t\t\t\t\troutes,\n\t\t\t\t\t\tfetchOptions:\n\t\t\t\t\t\t\tprocess.env.NODE_ENV === 'production'\n\t\t\t\t\t\t\t\t? { next: { tags: ['prismic'] }, cache: 'force-cache' }\n\t\t\t\t\t\t\t\t: { next: { revalidate: 5 } },\n\t\t\t\t\t\t...config,\n\t\t\t\t\t});\n\n\t\t\t\t\tprismicNext.enableAutoPreviews({\n\t\t\t\t\t\tclient,\n\t\t\t\t\t\tpreviewData: config.previewData,\n\t\t\t\t\t\treq: config.req,\n\t\t\t\t\t});\n\n\t\t\t\t\treturn client;\n\t\t\t\t};\n\t\t\t`;\n\t\t}\n\t} else {\n\t\tif (isTypeScriptProject) {\n\t\t\tcreateClientContents = source`\n\t\t\t\t/**\n\t\t\t\t * Creates a Prismic client for the project's repository. The client is used to\n\t\t\t\t * query content from the Prismic API.\n\t\t\t\t *\n\t\t\t\t * @param config - Configuration for the Prismic client.\n\t\t\t\t */\n\t\t\t\texport const createClient = (config: prismicNext.CreateClientConfig = {}) => {\n\t\t\t\t\tconst client = prismic.createClient(repositoryName, {\n\t\t\t\t\t\troutes,\n\t\t\t\t\t\t...config,\n\t\t\t\t\t});\n\n\t\t\t\t\tprismicNext.enableAutoPreviews({\n\t\t\t\t\t\tclient,\n\t\t\t\t\t\tpreviewData: config.previewData,\n\t\t\t\t\t\treq: config.req,\n\t\t\t\t\t});\n\n\t\t\t\t\treturn client;\n\t\t\t\t};\n\t\t\t`;\n\t\t} else {\n\t\t\tcreateClientContents = source`\n\t\t\t\t/**\n\t\t\t\t * Creates a Prismic client for the project's repository. The client is used to\n\t\t\t\t * query content from the Prismic API.\n\t\t\t\t *\n\t\t\t\t * @param {prismicNext.CreateClientConfig} config - Configuration for the Prismic client.\n\t\t\t\t */\n\t\t\t\texport const createClient = (config = {}) => {\n\t\t\t\t\tconst client = prismic.createClient(repositoryName, {\n\t\t\t\t\t\troutes,\n\t\t\t\t\t\t...config,\n\t\t\t\t\t});\n\n\t\t\t\t\tprismicNext.enableAutoPreviews({\n\t\t\t\t\t\tclient,\n\t\t\t\t\t\tpreviewData: config.previewData,\n\t\t\t\t\t\treq: config.req,\n\t\t\t\t\t});\n\n\t\t\t\t\treturn client;\n\t\t\t\t};\n\t\t\t`;\n\t\t}\n\t}\n\n\tlet contents: string;\n\n\tif (isTypeScriptProject) {\n\t\tcontents = source`\n\t\t\timport * as prismic from \"@prismicio/client\";\n\t\t\timport * as prismicNext from \"@prismicio/next\";\n\t\t\timport config from \"${hasSrcDirectory ? \"..\" : \".\"}/slicemachine.config.json\";\n\n\t\t\t/**\n\t\t\t * The project's Prismic repository name.\n\t\t\t */\n\t\t\texport const repositoryName = config.repositoryName;\n\n\t\t\t/**\n\t\t\t * A list of Route Resolver objects that define how a document's \\`url\\` field is resolved.\n\t\t\t *\n\t\t\t * {@link https://prismic.io/docs/route-resolver#route-resolver}\n\t\t\t */\n\t\t\t// TODO: Update the routes array to match your project's route structure.\n\t\t\tconst routes: prismic.ClientConfig[\"routes\"] = [\n\t\t\t\t{\n\t\t\t\t\ttype: \"homepage\",\n\t\t\t\t\tpath: \"/\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttype: \"page\",\n\t\t\t\t\tpath: \"/:uid\",\n\t\t\t\t},\n\t\t\t];\n\n\t\t\t${createClientContents}\n\t\t`;\n\t} else {\n\t\tcontents = source`\n\t\t\timport * as prismic from \"@prismicio/client\";\n\t\t\timport * as prismicNext from \"@prismicio/next\";\n\t\t\timport config from \"${hasSrcDirectory ? \"..\" : \".\"}/slicemachine.config.json\";\n\n\t\t\t/**\n\t\t\t * The project's Prismic repository name.\n\t\t\t */\n\t\t\texport const repositoryName = config.repositoryName;\n\n\t\t\t/**\n\t\t\t * A list of Route Resolver objects that define how a document's \\`url\\` field is resolved.\n\t\t\t *\n\t\t\t * {@link https://prismic.io/docs/route-resolver#route-resolver}\n\t\t\t *\n\t\t\t * @type {prismic.ClientConfig[\"routes\"]}\n\t\t\t */\n\t\t\t// TODO: Update the routes array to match your project's route structure.\n\t\t\tconst routes = [\n\t\t\t\t{\n\t\t\t\t\ttype: \"homepage\",\n\t\t\t\t\tpath: \"/\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttype: \"page\",\n\t\t\t\t\tpath: \"/:uid\",\n\t\t\t\t},\n\t\t\t];\n\n\t\t\t${createClientContents}\n\t\t`;\n\t}\n\n\tif (options.format) {\n\t\tcontents = await helpers.format(contents, filePath);\n\t}\n\n\tawait fs.writeFile(filePath, contents);\n};\n\ntype CreateSliceSimulatorPageArgs = SliceMachineContext<PluginOptions>;\n\nconst createSliceSimulatorPage = async ({\n\thelpers,\n\toptions,\n}: CreateSliceSimulatorPageArgs) => {\n\tconst hasSrcDirectory = await checkHasSrcDirectory({ helpers });\n\tconst hasAppRouter = await checkHasAppRouter({ helpers });\n\n\tconst extension = await getJSFileExtension({ helpers, options, jsx: true });\n\tconst filePath = helpers.joinPathFromRoot(\n\t\t...[\n\t\t\thasSrcDirectory ? \"src\" : undefined,\n\t\t\thasAppRouter\n\t\t\t\t? `app/slice-simulator/page.${extension}`\n\t\t\t\t: `pages/slice-simulator.${extension}`,\n\t\t].filter((segment): segment is NonNullable<typeof segment> =>\n\t\t\tBoolean(segment),\n\t\t),\n\t);\n\n\tif (await checkPathExists(filePath)) {\n\t\treturn;\n\t}\n\n\tawait fs.mkdir(path.dirname(filePath), { recursive: true });\n\n\tlet contents = source`\n\t\timport { SliceSimulator } from \"@slicemachine/adapter-next/simulator\";\n\t\timport { SliceZone } from \"@prismicio/react\";\n\n\t\timport { components } from \"${hasAppRouter ? \"../..\" : \"..\"}/slices\";\n\n\t\texport default function SliceSimulatorPage() {\n\t\t\treturn (\n\t\t\t\t<SliceSimulator\n\t\t\t\t\tsliceZone={(props) => <SliceZone {...props} components={components} />}\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\t`;\n\n\tif (options.format) {\n\t\tcontents = await helpers.format(contents, filePath);\n\t}\n\n\tawait fs.writeFile(filePath, contents);\n};\n\nconst createPreviewRoute = async ({\n\thelpers,\n\toptions,\n}: SliceMachineContext<PluginOptions>) => {\n\tconst hasSrcDirectory = await checkHasSrcDirectory({ helpers });\n\tconst hasAppRouter = await checkHasAppRouter({ helpers });\n\tconst isTypeScriptProject = await checkIsTypeScriptProject({\n\t\thelpers,\n\t\toptions,\n\t});\n\n\tconst extension = await getJSFileExtension({ helpers, options });\n\tconst filePath = helpers.joinPathFromRoot(\n\t\t...[\n\t\t\thasSrcDirectory ? \"src\" : undefined,\n\t\t\thasAppRouter\n\t\t\t\t? `app/api/preview/route.${extension}`\n\t\t\t\t: `pages/api/preview.${extension}`,\n\t\t].filter((segment): segment is NonNullable<typeof segment> =>\n\t\t\tBoolean(segment),\n\t\t),\n\t);\n\n\tif (await checkPathExists(filePath)) {\n\t\treturn;\n\t}\n\n\tlet contents: string;\n\n\tif (hasAppRouter) {\n\t\tif (isTypeScriptProject) {\n\t\t\tcontents = source`\n\t\t\t\timport { NextRequest } from \"next/server\";\n\t\t\t\timport { draftMode } from \"next/headers\";\n\t\t\t\timport { redirectToPreviewURL } from \"@prismicio/next\";\n\n\t\t\t\timport { createClient } from \"../../../prismicio\";\n\n\t\t\t\texport async function GET(request: NextRequest) {\n\t\t\t\t\tconst client = createClient();\n\n\t\t\t\t\tdraftMode().enable();\n\n\t\t\t\t\tawait redirectToPreviewURL({ client, request });\n\t\t\t\t}\n\t\t\t`;\n\t\t} else {\n\t\t\tcontents = source`\n\t\t\t\timport { draftMode } from \"next/headers\";\n\t\t\t\timport { redirectToPreviewURL } from \"@prismicio/next\";\n\n\t\t\t\timport { createClient } from \"../../../prismicio\";\n\n\t\t\t\texport async function GET(request) {\n\t\t\t\t\tconst client = createClient();\n\n\t\t\t\t\tdraftMode().enable();\n\n\t\t\t\t\tawait redirectToPreviewURL({ client, request });\n\t\t\t\t}\n\t\t\t`;\n\t\t}\n\t} else {\n\t\tif (isTypeScriptProject) {\n\t\t\tcontents = source`\n\t\t\t\timport { NextApiRequest, NextApiResponse } from \"next\";\n\t\t\t\timport { setPreviewData, redirectToPreviewURL } from \"@prismicio/next\";\n\n\t\t\t\timport { createClient } from \"../../prismicio\";\n\n\t\t\t\texport default async (req: NextApiRequest, res: NextApiResponse) => {\n\t\t\t\t\tconst client = createClient({ req });\n\n\t\t\t\t\tawait setPreviewData({ req, res });\n\n\t\t\t\t\tawait redirectToPreviewURL({ req, res, client });\n\t\t\t\t};\n\t\t\t`;\n\t\t} else {\n\t\t\tcontents = source`\n\t\t\t\timport { setPreviewData, redirectToPreviewURL } from \"@prismicio/next\";\n\n\t\t\t\timport { createClient } from \"../../prismicio\";\n\n\t\t\t\texport default async (req, res) => {\n\t\t\t\t\tconst client = createClient({ req });\n\n\t\t\t\t\tawait setPreviewData({ req, res });\n\n\t\t\t\t\tawait redirectToPreviewURL({ req, res, client });\n\t\t\t\t};\n\t\t\t`;\n\t\t}\n\t}\n\n\tif (options.format) {\n\t\tcontents = await helpers.format(contents, filePath);\n\t}\n\n\tawait fs.mkdir(path.dirname(filePath), { recursive: true });\n\tawait fs.writeFile(filePath, contents);\n};\n\nconst createExitPreviewRoute = async ({\n\thelpers,\n\toptions,\n}: SliceMachineContext<PluginOptions>) => {\n\tconst hasSrcDirectory = await checkHasSrcDirectory({ helpers });\n\tconst hasAppRouter = await checkHasAppRouter({ helpers });\n\tconst isTypeScriptProject = await checkIsTypeScriptProject({\n\t\thelpers,\n\t\toptions,\n\t});\n\n\tconst extension = await getJSFileExtension({ helpers, options });\n\tconst filePath = helpers.joinPathFromRoot(\n\t\t...[\n\t\t\thasSrcDirectory ? \"src\" : undefined,\n\t\t\thasAppRouter\n\t\t\t\t? `app/api/exit-preview/route.${extension}`\n\t\t\t\t: `pages/api/exit-preview.${extension}`,\n\t\t].filter((segment): segment is NonNullable<typeof segment> =>\n\t\t\tBoolean(segment),\n\t\t),\n\t);\n\n\tif (await checkPathExists(filePath)) {\n\t\treturn;\n\t}\n\n\tlet contents: string;\n\n\tif (hasAppRouter) {\n\t\tcontents = `\n\t\t\timport { exitPreview } from \"@prismicio/next\";\n\n\t\t\texport async function GET() {\n\t\t\t\treturn await exitPreview();\n\t\t\t}\n\t\t`;\n\t} else {\n\t\tif (isTypeScriptProject) {\n\t\t\tcontents = source`\n\t\t\t\timport { NextApiRequest, NextApiResponse } from \"next\";\n\t\t\t\timport { exitPreview } from \"@prismicio/next\";\n\n\t\t\t\texport async function handler(req: NextApiRequest, res: NextApiResponse) {\n\t\t\t\t\treturn await exitPreview({ req, res });\n\t\t\t\t}\n\t\t\t`;\n\t\t} else {\n\t\t\tcontents = source`\n\t\t\t\timport { exitPreview } from \"@prismicio/next\";\n\n\t\t\t\texport async function handler(req, res) {\n\t\t\t\t\treturn await exitPreview({ req, res });\n\t\t\t\t}\n\t\t\t`;\n\t\t}\n\t}\n\n\tif (options.format) {\n\t\tcontents = await helpers.format(contents, filePath);\n\t}\n\n\tawait fs.mkdir(path.dirname(filePath), { recursive: true });\n\tawait fs.writeFile(filePath, contents);\n};\n\nconst modifySliceMachineConfig = async ({\n\thelpers,\n\toptions,\n}: SliceMachineContext<PluginOptions>) => {\n\tconst hasSrcDirectory = await checkHasSrcDirectory({ helpers });\n\tconst project = await helpers.getProject();\n\n\t// Add Slice Simulator URL.\n\tproject.config.localSliceSimulatorURL ||=\n\t\t\"http://localhost:3000/slice-simulator\";\n\n\t// Nest the default Slice Library in the src directory if it exists and\n\t// is empty.\n\tif (\n\t\thasSrcDirectory &&\n\t\tJSON.stringify(project.config.libraries) === JSON.stringify([\"./slices\"])\n\t) {\n\t\ttry {\n\t\t\tconst entries = await fs.readdir(helpers.joinPathFromRoot(\"slices\"));\n\n\t\t\tif (!entries.map((entry) => path.parse(entry).name).includes(\"index\")) {\n\t\t\t\tproject.config.libraries = [\"./src/slices\"];\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (\n\t\t\t\terror instanceof Error &&\n\t\t\t\t\"code\" in error &&\n\t\t\t\terror.code === \"ENOENT\"\n\t\t\t) {\n\t\t\t\t// The directory does not exist, which means we\n\t\t\t\t// can safely nest the library.\n\t\t\t\tproject.config.libraries = [\"./src/slices\"];\n\t\t\t}\n\t\t}\n\t}\n\n\tconst filePath = helpers.joinPathFromRoot(\"slicemachine.config.json\");\n\n\tlet contents = JSON.stringify(project.config);\n\n\tif (options.format) {\n\t\tcontents = await helpers.format(contents, filePath);\n\t}\n\n\tawait fs.writeFile(\n\t\thelpers.joinPathFromRoot(\"slicemachine.config.json\"),\n\t\tcontents,\n\t);\n};\n\nconst createRevalidateRoute = async ({\n\thelpers,\n\toptions,\n}: SliceMachineContext<PluginOptions>) => {\n\tconst hasAppRouter = await checkHasAppRouter({ helpers });\n\n\tif (!hasAppRouter) {\n\t\treturn;\n\t}\n\n\tconst hasSrcDirectory = await checkHasSrcDirectory({ helpers });\n\n\tconst extension = await getJSFileExtension({ helpers, options });\n\tconst filePath = helpers.joinPathFromRoot(\n\t\t...[\n\t\t\thasSrcDirectory ? \"src\" : undefined,\n\t\t\t`app/api/revalidate/route.${extension}`,\n\t\t].filter((segment): segment is NonNullable<typeof segment> =>\n\t\t\tBoolean(segment),\n\t\t),\n\t);\n\n\tif (await checkPathExists(filePath)) {\n\t\treturn;\n\t}\n\n\tlet contents = source`\n\t\timport { NextResponse } from \"next/server\";\n\t\timport { revalidateTag } from \"next/cache\";\n\n\t\texport async function POST() {\n\t\t\trevalidateTag(\"prismic\");\n\n\t\t\treturn NextResponse.json({ revalidated: true, now: Date.now() });\n\t\t}\n\t`;\n\n\tif (options.format) {\n\t\tcontents = await helpers.format(contents, filePath);\n\t}\n\n\tawait fs.mkdir(path.dirname(filePath), { recursive: true });\n\tawait fs.writeFile(filePath, contents);\n};\n\nexport const projectInit: ProjectInitHook<PluginOptions> = async (\n\t{ installDependencies: _installDependencies },\n\tcontext,\n) => {\n\trejectIfNecessary(\n\t\tawait Promise.allSettled([\n\t\t\tinstallDependencies({ installDependencies: _installDependencies }),\n\t\t\tmodifySliceMachineConfig(context),\n\t\t\tcreatePrismicIOFile(context),\n\t\t\tcreateSliceSimulatorPage(context),\n\t\t\tcreatePreviewRoute(context),\n\t\t\tcreateExitPreviewRoute(context),\n\t\t\tcreateRevalidateRoute(context),\n\t\t]),\n\t);\n};\n"],"names":["installDependencies","checkIsTypeScriptProject","checkHasSrcDirectory","checkHasAppRouter","getJSFileExtension","checkPathExists","source","fs","path","rejectIfNecessary"],"mappings":"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"}