@slicemachine/adapter-next 0.3.10 → 0.3.11-dev-next-release.2

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 (209) hide show
  1. package/dist/hooks/documentation-read.cjs +7 -6
  2. package/dist/hooks/documentation-read.cjs.map +1 -1
  3. package/dist/hooks/documentation-read.js +7 -6
  4. package/dist/hooks/documentation-read.js.map +1 -1
  5. package/dist/hooks/project-init.cjs +51 -58
  6. package/dist/hooks/project-init.cjs.map +1 -1
  7. package/dist/hooks/project-init.js +51 -57
  8. package/dist/hooks/project-init.js.map +1 -1
  9. package/dist/hooks/slice-create.cjs +29 -44
  10. package/dist/hooks/slice-create.cjs.map +1 -1
  11. package/dist/hooks/slice-create.js +29 -26
  12. package/dist/hooks/slice-create.js.map +1 -1
  13. package/dist/lib/checkHasAppRouter.cjs +23 -2
  14. package/dist/lib/checkHasAppRouter.cjs.map +1 -1
  15. package/dist/lib/checkHasAppRouter.js +6 -2
  16. package/dist/lib/checkHasAppRouter.js.map +1 -1
  17. package/dist/lib/checkHasSrcDirectory.cjs +5 -2
  18. package/dist/lib/checkHasSrcDirectory.cjs.map +1 -1
  19. package/dist/lib/checkHasSrcDirectory.js +5 -2
  20. package/dist/lib/checkHasSrcDirectory.js.map +1 -1
  21. package/dist/lib/checkIsTypeScriptProject.cjs +2 -3
  22. package/dist/lib/checkIsTypeScriptProject.cjs.map +1 -1
  23. package/dist/lib/checkIsTypeScriptProject.js +2 -3
  24. package/dist/lib/checkIsTypeScriptProject.js.map +1 -1
  25. package/dist/lib/upsertSliceLibraryIndexFile.cjs +29 -21
  26. package/dist/lib/upsertSliceLibraryIndexFile.cjs.map +1 -1
  27. package/dist/lib/upsertSliceLibraryIndexFile.js +29 -20
  28. package/dist/lib/upsertSliceLibraryIndexFile.js.map +1 -1
  29. package/dist/plugin.cjs +178 -36
  30. package/dist/plugin.cjs.map +1 -1
  31. package/dist/plugin.js +178 -36
  32. package/dist/plugin.js.map +1 -1
  33. package/package.json +5 -7
  34. package/src/hooks/documentation-read.ts +9 -7
  35. package/src/hooks/project-init.ts +58 -69
  36. package/src/hooks/slice-create.ts +39 -31
  37. package/src/lib/checkHasAppRouter.ts +6 -6
  38. package/src/lib/checkHasSrcDirectory.ts +5 -2
  39. package/src/lib/checkIsTypeScriptProject.ts +5 -4
  40. package/src/lib/upsertSliceLibraryIndexFile.ts +53 -33
  41. package/src/plugin.ts +245 -37
  42. package/dist/hooks/customType-asset-delete.cjs +0 -31
  43. package/dist/hooks/customType-asset-delete.cjs.map +0 -1
  44. package/dist/hooks/customType-asset-delete.d.ts +0 -3
  45. package/dist/hooks/customType-asset-delete.js +0 -14
  46. package/dist/hooks/customType-asset-delete.js.map +0 -1
  47. package/dist/hooks/customType-asset-read.cjs +0 -34
  48. package/dist/hooks/customType-asset-read.cjs.map +0 -1
  49. package/dist/hooks/customType-asset-read.d.ts +0 -3
  50. package/dist/hooks/customType-asset-read.js +0 -17
  51. package/dist/hooks/customType-asset-read.js.map +0 -1
  52. package/dist/hooks/customType-asset-update.cjs +0 -34
  53. package/dist/hooks/customType-asset-update.cjs.map +0 -1
  54. package/dist/hooks/customType-asset-update.d.ts +0 -3
  55. package/dist/hooks/customType-asset-update.js +0 -16
  56. package/dist/hooks/customType-asset-update.js.map +0 -1
  57. package/dist/hooks/customType-create.cjs +0 -43
  58. package/dist/hooks/customType-create.cjs.map +0 -1
  59. package/dist/hooks/customType-create.d.ts +0 -3
  60. package/dist/hooks/customType-create.js +0 -25
  61. package/dist/hooks/customType-create.js.map +0 -1
  62. package/dist/hooks/customType-delete.cjs +0 -32
  63. package/dist/hooks/customType-delete.cjs.map +0 -1
  64. package/dist/hooks/customType-delete.d.ts +0 -3
  65. package/dist/hooks/customType-delete.js +0 -15
  66. package/dist/hooks/customType-delete.js.map +0 -1
  67. package/dist/hooks/customType-read.cjs +0 -31
  68. package/dist/hooks/customType-read.cjs.map +0 -1
  69. package/dist/hooks/customType-read.d.ts +0 -3
  70. package/dist/hooks/customType-read.js +0 -14
  71. package/dist/hooks/customType-read.js.map +0 -1
  72. package/dist/hooks/customType-rename.cjs +0 -6
  73. package/dist/hooks/customType-rename.cjs.map +0 -1
  74. package/dist/hooks/customType-rename.d.ts +0 -1
  75. package/dist/hooks/customType-rename.js +0 -6
  76. package/dist/hooks/customType-rename.js.map +0 -1
  77. package/dist/hooks/customType-update.cjs +0 -6
  78. package/dist/hooks/customType-update.cjs.map +0 -1
  79. package/dist/hooks/customType-update.d.ts +0 -1
  80. package/dist/hooks/customType-update.js +0 -6
  81. package/dist/hooks/customType-update.js.map +0 -1
  82. package/dist/hooks/customTypeLibrary-read.cjs +0 -55
  83. package/dist/hooks/customTypeLibrary-read.cjs.map +0 -1
  84. package/dist/hooks/customTypeLibrary-read.d.ts +0 -3
  85. package/dist/hooks/customTypeLibrary-read.js +0 -37
  86. package/dist/hooks/customTypeLibrary-read.js.map +0 -1
  87. package/dist/hooks/slice-asset-delete.cjs +0 -33
  88. package/dist/hooks/slice-asset-delete.cjs.map +0 -1
  89. package/dist/hooks/slice-asset-delete.d.ts +0 -3
  90. package/dist/hooks/slice-asset-delete.js +0 -16
  91. package/dist/hooks/slice-asset-delete.js.map +0 -1
  92. package/dist/hooks/slice-asset-read.cjs +0 -36
  93. package/dist/hooks/slice-asset-read.cjs.map +0 -1
  94. package/dist/hooks/slice-asset-read.d.ts +0 -3
  95. package/dist/hooks/slice-asset-read.js +0 -19
  96. package/dist/hooks/slice-asset-read.js.map +0 -1
  97. package/dist/hooks/slice-asset-update.cjs +0 -36
  98. package/dist/hooks/slice-asset-update.cjs.map +0 -1
  99. package/dist/hooks/slice-asset-update.d.ts +0 -3
  100. package/dist/hooks/slice-asset-update.js +0 -18
  101. package/dist/hooks/slice-asset-update.js.map +0 -1
  102. package/dist/hooks/slice-delete.cjs +0 -41
  103. package/dist/hooks/slice-delete.cjs.map +0 -1
  104. package/dist/hooks/slice-delete.d.ts +0 -3
  105. package/dist/hooks/slice-delete.js +0 -24
  106. package/dist/hooks/slice-delete.js.map +0 -1
  107. package/dist/hooks/slice-read.cjs +0 -62
  108. package/dist/hooks/slice-read.cjs.map +0 -1
  109. package/dist/hooks/slice-read.d.ts +0 -3
  110. package/dist/hooks/slice-read.js +0 -44
  111. package/dist/hooks/slice-read.js.map +0 -1
  112. package/dist/hooks/slice-rename.cjs +0 -51
  113. package/dist/hooks/slice-rename.cjs.map +0 -1
  114. package/dist/hooks/slice-rename.d.ts +0 -3
  115. package/dist/hooks/slice-rename.js +0 -34
  116. package/dist/hooks/slice-rename.js.map +0 -1
  117. package/dist/hooks/slice-update.cjs +0 -14
  118. package/dist/hooks/slice-update.cjs.map +0 -1
  119. package/dist/hooks/slice-update.d.ts +0 -3
  120. package/dist/hooks/slice-update.js +0 -14
  121. package/dist/hooks/slice-update.js.map +0 -1
  122. package/dist/hooks/sliceLibrary-read.cjs +0 -52
  123. package/dist/hooks/sliceLibrary-read.cjs.map +0 -1
  124. package/dist/hooks/sliceLibrary-read.d.ts +0 -3
  125. package/dist/hooks/sliceLibrary-read.js +0 -34
  126. package/dist/hooks/sliceLibrary-read.js.map +0 -1
  127. package/dist/lib/buildCustomTypeAssetPath.cjs +0 -29
  128. package/dist/lib/buildCustomTypeAssetPath.cjs.map +0 -1
  129. package/dist/lib/buildCustomTypeAssetPath.d.ts +0 -9
  130. package/dist/lib/buildCustomTypeAssetPath.js +0 -12
  131. package/dist/lib/buildCustomTypeAssetPath.js.map +0 -1
  132. package/dist/lib/buildCustomTypeDirectoryPath.cjs +0 -26
  133. package/dist/lib/buildCustomTypeDirectoryPath.cjs.map +0 -1
  134. package/dist/lib/buildCustomTypeDirectoryPath.d.ts +0 -8
  135. package/dist/lib/buildCustomTypeDirectoryPath.js +0 -9
  136. package/dist/lib/buildCustomTypeDirectoryPath.js.map +0 -1
  137. package/dist/lib/buildCustomTypeLibraryDirectoryPath.cjs +0 -7
  138. package/dist/lib/buildCustomTypeLibraryDirectoryPath.cjs.map +0 -1
  139. package/dist/lib/buildCustomTypeLibraryDirectoryPath.d.ts +0 -7
  140. package/dist/lib/buildCustomTypeLibraryDirectoryPath.js +0 -7
  141. package/dist/lib/buildCustomTypeLibraryDirectoryPath.js.map +0 -1
  142. package/dist/lib/buildSliceAssetPath.cjs +0 -34
  143. package/dist/lib/buildSliceAssetPath.cjs.map +0 -1
  144. package/dist/lib/buildSliceAssetPath.d.ts +0 -11
  145. package/dist/lib/buildSliceAssetPath.js +0 -17
  146. package/dist/lib/buildSliceAssetPath.js.map +0 -1
  147. package/dist/lib/buildSliceDirectoryPath.cjs +0 -30
  148. package/dist/lib/buildSliceDirectoryPath.cjs.map +0 -1
  149. package/dist/lib/buildSliceDirectoryPath.d.ts +0 -10
  150. package/dist/lib/buildSliceDirectoryPath.js +0 -13
  151. package/dist/lib/buildSliceDirectoryPath.js.map +0 -1
  152. package/dist/lib/buildSliceLibraryDirectoryPath.cjs +0 -7
  153. package/dist/lib/buildSliceLibraryDirectoryPath.cjs.map +0 -1
  154. package/dist/lib/buildSliceLibraryDirectoryPath.d.ts +0 -8
  155. package/dist/lib/buildSliceLibraryDirectoryPath.js +0 -7
  156. package/dist/lib/buildSliceLibraryDirectoryPath.js.map +0 -1
  157. package/dist/lib/checkPathExists.cjs +0 -30
  158. package/dist/lib/checkPathExists.cjs.map +0 -1
  159. package/dist/lib/checkPathExists.d.ts +0 -2
  160. package/dist/lib/checkPathExists.js +0 -13
  161. package/dist/lib/checkPathExists.js.map +0 -1
  162. package/dist/lib/isSharedSliceModel.cjs +0 -7
  163. package/dist/lib/isSharedSliceModel.cjs.map +0 -1
  164. package/dist/lib/isSharedSliceModel.d.ts +0 -335
  165. package/dist/lib/isSharedSliceModel.js +0 -7
  166. package/dist/lib/isSharedSliceModel.js.map +0 -1
  167. package/dist/lib/readJSONFile.cjs +0 -26
  168. package/dist/lib/readJSONFile.cjs.map +0 -1
  169. package/dist/lib/readJSONFile.d.ts +0 -1
  170. package/dist/lib/readJSONFile.js +0 -9
  171. package/dist/lib/readJSONFile.js.map +0 -1
  172. package/dist/lib/updateSliceModelFile.cjs +0 -33
  173. package/dist/lib/updateSliceModelFile.cjs.map +0 -1
  174. package/dist/lib/updateSliceModelFile.d.ts +0 -9
  175. package/dist/lib/updateSliceModelFile.js +0 -15
  176. package/dist/lib/updateSliceModelFile.js.map +0 -1
  177. package/dist/lib/upsertGlobalContentTypes.cjs +0 -56
  178. package/dist/lib/upsertGlobalContentTypes.cjs.map +0 -1
  179. package/dist/lib/upsertGlobalContentTypes.d.ts +0 -12
  180. package/dist/lib/upsertGlobalContentTypes.js +0 -38
  181. package/dist/lib/upsertGlobalContentTypes.js.map +0 -1
  182. package/src/hooks/customType-asset-delete.ts +0 -18
  183. package/src/hooks/customType-asset-read.ts +0 -22
  184. package/src/hooks/customType-asset-update.ts +0 -20
  185. package/src/hooks/customType-create.ts +0 -45
  186. package/src/hooks/customType-delete.ts +0 -21
  187. package/src/hooks/customType-read.ts +0 -24
  188. package/src/hooks/customType-rename.ts +0 -3
  189. package/src/hooks/customType-update.ts +0 -3
  190. package/src/hooks/customTypeLibrary-read.ts +0 -58
  191. package/src/hooks/slice-asset-delete.ts +0 -21
  192. package/src/hooks/slice-asset-read.ts +0 -25
  193. package/src/hooks/slice-asset-update.ts +0 -23
  194. package/src/hooks/slice-delete.ts +0 -41
  195. package/src/hooks/slice-read.ts +0 -69
  196. package/src/hooks/slice-rename.ts +0 -46
  197. package/src/hooks/slice-update.ts +0 -19
  198. package/src/hooks/sliceLibrary-read.ts +0 -48
  199. package/src/lib/buildCustomTypeAssetPath.ts +0 -24
  200. package/src/lib/buildCustomTypeDirectoryPath.ts +0 -20
  201. package/src/lib/buildCustomTypeLibraryDirectoryPath.ts +0 -13
  202. package/src/lib/buildSliceAssetPath.ts +0 -32
  203. package/src/lib/buildSliceDirectoryPath.ts +0 -26
  204. package/src/lib/buildSliceLibraryDirectoryPath.ts +0 -14
  205. package/src/lib/checkPathExists.ts +0 -12
  206. package/src/lib/isSharedSliceModel.ts +0 -14
  207. package/src/lib/readJSONFile.ts +0 -7
  208. package/src/lib/updateSliceModelFile.ts +0 -33
  209. package/src/lib/upsertGlobalContentTypes.ts +0 -63
@@ -1,10 +1,9 @@
1
- import * as fs from "node:fs/promises";
2
1
  import * as path from "node:path";
2
+ import { checkHasProjectFile, writeProjectFile } from "@slicemachine/plugin-kit/fs";
3
3
  import { source } from "common-tags";
4
4
  import { checkHasAppRouter } from "../lib/checkHasAppRouter.js";
5
5
  import { checkHasSrcDirectory } from "../lib/checkHasSrcDirectory.js";
6
6
  import { checkIsTypeScriptProject } from "../lib/checkIsTypeScriptProject.js";
7
- import { checkPathExists } from "../lib/checkPathExists.js";
8
7
  import { getJSFileExtension } from "../lib/getJSFileExtension.js";
9
8
  import { rejectIfNecessary } from "../lib/rejectIfNecessary.js";
10
9
  const installDependencies = async ({ installDependencies: installDependencies2 }) => {
@@ -24,9 +23,8 @@ const createPrismicIOFile = async ({ helpers, options }) => {
24
23
  const hasSrcDirectory = await checkHasSrcDirectory({ helpers });
25
24
  const hasAppRouter = await checkHasAppRouter({ helpers });
26
25
  const extension = await getJSFileExtension({ helpers, options });
27
- const filename = `prismicio.${extension}`;
28
- const filePath = hasSrcDirectory ? helpers.joinPathFromRoot("src", filename) : helpers.joinPathFromRoot(filename);
29
- if (await checkPathExists(filePath)) {
26
+ const filename = path.join(...[hasSrcDirectory ? "src" : void 0, `prismicio.${extension}`].filter((segment) => Boolean(segment)));
27
+ if (await checkHasProjectFile({ filename, helpers })) {
30
28
  return;
31
29
  }
32
30
  let createClientContents;
@@ -199,24 +197,25 @@ const createPrismicIOFile = async ({ helpers, options }) => {
199
197
  ${createClientContents}
200
198
  `;
201
199
  }
202
- if (options.format) {
203
- contents = await helpers.format(contents, filePath);
204
- }
205
- await fs.writeFile(filePath, contents);
200
+ await writeProjectFile({
201
+ filename,
202
+ contents,
203
+ format: options.format,
204
+ helpers
205
+ });
206
206
  };
207
207
  const createSliceSimulatorPage = async ({ helpers, options }) => {
208
208
  const hasSrcDirectory = await checkHasSrcDirectory({ helpers });
209
209
  const hasAppRouter = await checkHasAppRouter({ helpers });
210
210
  const extension = await getJSFileExtension({ helpers, options, jsx: true });
211
- const filePath = helpers.joinPathFromRoot(...[
211
+ const filename = path.join(...[
212
212
  hasSrcDirectory ? "src" : void 0,
213
213
  hasAppRouter ? `app/slice-simulator/page.${extension}` : `pages/slice-simulator.${extension}`
214
214
  ].filter((segment) => Boolean(segment)));
215
- if (await checkPathExists(filePath)) {
215
+ if (await checkHasProjectFile({ filename, helpers })) {
216
216
  return;
217
217
  }
218
- await fs.mkdir(path.dirname(filePath), { recursive: true });
219
- let contents = source`
218
+ const contents = source`
220
219
  "use client"
221
220
 
222
221
  import { SliceSimulator } from "@slicemachine/adapter-next/simulator";
@@ -232,10 +231,12 @@ const createSliceSimulatorPage = async ({ helpers, options }) => {
232
231
  );
233
232
  }
234
233
  `;
235
- if (options.format) {
236
- contents = await helpers.format(contents, filePath);
237
- }
238
- await fs.writeFile(filePath, contents);
234
+ await writeProjectFile({
235
+ filename,
236
+ contents,
237
+ format: options.format,
238
+ helpers
239
+ });
239
240
  };
240
241
  const createPreviewRoute = async ({ helpers, options }) => {
241
242
  const hasSrcDirectory = await checkHasSrcDirectory({ helpers });
@@ -245,11 +246,11 @@ const createPreviewRoute = async ({ helpers, options }) => {
245
246
  options
246
247
  });
247
248
  const extension = await getJSFileExtension({ helpers, options });
248
- const filePath = helpers.joinPathFromRoot(...[
249
+ const filename = path.join(...[
249
250
  hasSrcDirectory ? "src" : void 0,
250
251
  hasAppRouter ? `app/api/preview/route.${extension}` : `pages/api/preview.${extension}`
251
252
  ].filter((segment) => Boolean(segment)));
252
- if (await checkPathExists(filePath)) {
253
+ if (await checkHasProjectFile({ filename, helpers })) {
253
254
  return;
254
255
  }
255
256
  let contents;
@@ -257,7 +258,6 @@ const createPreviewRoute = async ({ helpers, options }) => {
257
258
  if (isTypeScriptProject) {
258
259
  contents = source`
259
260
  import { NextRequest } from "next/server";
260
- import { draftMode } from "next/headers";
261
261
  import { redirectToPreviewURL } from "@prismicio/next";
262
262
 
263
263
  import { createClient } from "../../../prismicio";
@@ -265,14 +265,11 @@ const createPreviewRoute = async ({ helpers, options }) => {
265
265
  export async function GET(request: NextRequest) {
266
266
  const client = createClient();
267
267
 
268
- draftMode().enable();
269
-
270
268
  await redirectToPreviewURL({ client, request });
271
269
  }
272
270
  `;
273
271
  } else {
274
272
  contents = source`
275
- import { draftMode } from "next/headers";
276
273
  import { redirectToPreviewURL } from "@prismicio/next";
277
274
 
278
275
  import { createClient } from "../../../prismicio";
@@ -280,8 +277,6 @@ const createPreviewRoute = async ({ helpers, options }) => {
280
277
  export async function GET(request) {
281
278
  const client = createClient();
282
279
 
283
- draftMode().enable();
284
-
285
280
  await redirectToPreviewURL({ client, request });
286
281
  }
287
282
  `;
@@ -318,11 +313,12 @@ const createPreviewRoute = async ({ helpers, options }) => {
318
313
  `;
319
314
  }
320
315
  }
321
- if (options.format) {
322
- contents = await helpers.format(contents, filePath);
323
- }
324
- await fs.mkdir(path.dirname(filePath), { recursive: true });
325
- await fs.writeFile(filePath, contents);
316
+ await writeProjectFile({
317
+ filename,
318
+ contents,
319
+ format: options.format,
320
+ helpers
321
+ });
326
322
  };
327
323
  const createExitPreviewRoute = async ({ helpers, options }) => {
328
324
  const hasSrcDirectory = await checkHasSrcDirectory({ helpers });
@@ -332,16 +328,16 @@ const createExitPreviewRoute = async ({ helpers, options }) => {
332
328
  options
333
329
  });
334
330
  const extension = await getJSFileExtension({ helpers, options });
335
- const filePath = helpers.joinPathFromRoot(...[
331
+ const filename = path.join(...[
336
332
  hasSrcDirectory ? "src" : void 0,
337
333
  hasAppRouter ? `app/api/exit-preview/route.${extension}` : `pages/api/exit-preview.${extension}`
338
334
  ].filter((segment) => Boolean(segment)));
339
- if (await checkPathExists(filePath)) {
335
+ if (await checkHasProjectFile({ filename, helpers })) {
340
336
  return;
341
337
  }
342
338
  let contents;
343
339
  if (hasAppRouter) {
344
- contents = `
340
+ contents = source`
345
341
  import { exitPreview } from "@prismicio/next";
346
342
 
347
343
  export async function GET() {
@@ -368,27 +364,24 @@ const createExitPreviewRoute = async ({ helpers, options }) => {
368
364
  `;
369
365
  }
370
366
  }
371
- if (options.format) {
372
- contents = await helpers.format(contents, filePath);
373
- }
374
- await fs.mkdir(path.dirname(filePath), { recursive: true });
375
- await fs.writeFile(filePath, contents);
367
+ await writeProjectFile({
368
+ filename,
369
+ contents,
370
+ format: options.format,
371
+ helpers
372
+ });
376
373
  };
377
- const modifySliceMachineConfig = async ({ helpers, options }) => {
374
+ const modifySliceMachineConfig = async ({ helpers, options, actions }) => {
378
375
  var _a;
379
376
  const hasSrcDirectory = await checkHasSrcDirectory({ helpers });
380
377
  const project = await helpers.getProject();
381
378
  (_a = project.config).localSliceSimulatorURL || (_a.localSliceSimulatorURL = "http://localhost:3000/slice-simulator");
382
- if (hasSrcDirectory && JSON.stringify(project.config.libraries) === JSON.stringify(["./slices"])) {
383
- try {
384
- const entries = await fs.readdir(helpers.joinPathFromRoot("slices"));
385
- if (!entries.map((entry) => path.parse(entry).name).includes("index")) {
386
- project.config.libraries = ["./src/slices"];
387
- }
388
- } catch (error) {
389
- if (error instanceof Error && "code" in error && error.code === "ENOENT") {
390
- project.config.libraries = ["./src/slices"];
391
- }
379
+ if (hasSrcDirectory && project.config.libraries && JSON.stringify(project.config.libraries) === JSON.stringify(["./slices"])) {
380
+ const sliceLibrary = await actions.readSliceLibrary({
381
+ libraryID: project.config.libraries[0]
382
+ });
383
+ if (sliceLibrary.sliceIDs.length < 1) {
384
+ project.config.libraries = ["./src/slices"];
392
385
  }
393
386
  }
394
387
  await helpers.updateSliceMachineConfig(project.config, {
@@ -402,14 +395,14 @@ const createRevalidateRoute = async ({ helpers, options }) => {
402
395
  }
403
396
  const hasSrcDirectory = await checkHasSrcDirectory({ helpers });
404
397
  const extension = await getJSFileExtension({ helpers, options });
405
- const filePath = helpers.joinPathFromRoot(...[
398
+ const filename = path.join(...[
406
399
  hasSrcDirectory ? "src" : void 0,
407
400
  `app/api/revalidate/route.${extension}`
408
401
  ].filter((segment) => Boolean(segment)));
409
- if (await checkPathExists(filePath)) {
402
+ if (await checkHasProjectFile({ filename, helpers })) {
410
403
  return;
411
404
  }
412
- let contents = source`
405
+ const contents = source`
413
406
  import { NextResponse } from "next/server";
414
407
  import { revalidateTag } from "next/cache";
415
408
 
@@ -419,11 +412,12 @@ const createRevalidateRoute = async ({ helpers, options }) => {
419
412
  return NextResponse.json({ revalidated: true, now: Date.now() });
420
413
  }
421
414
  `;
422
- if (options.format) {
423
- contents = await helpers.format(contents, filePath);
424
- }
425
- await fs.mkdir(path.dirname(filePath), { recursive: true });
426
- await fs.writeFile(filePath, contents);
415
+ await writeProjectFile({
416
+ filename,
417
+ contents,
418
+ format: options.format,
419
+ helpers
420
+ });
427
421
  };
428
422
  const projectInit = async ({ installDependencies: _installDependencies }, context) => {
429
423
  rejectIfNecessary(await Promise.allSettled([
@@ -1 +1 @@
1
- {"version":3,"file":"project-init.js","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\t\"use client\"\n\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\tawait helpers.updateSliceMachineConfig(project.config, {\n\t\tformat: options.format,\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"],"mappings":"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"}
1
+ {"version":3,"file":"project-init.js","sources":["../../../src/hooks/project-init.ts"],"sourcesContent":["import * as path from \"node:path\";\nimport type {\n\tProjectInitHook,\n\tProjectInitHookData,\n\tSliceMachineContext,\n} from \"@slicemachine/plugin-kit\";\nimport {\n\tcheckHasProjectFile,\n\twriteProjectFile,\n} from \"@slicemachine/plugin-kit/fs\";\nimport { source } from \"common-tags\";\n\nimport { checkHasAppRouter } from \"../lib/checkHasAppRouter\";\nimport { checkHasSrcDirectory } from \"../lib/checkHasSrcDirectory\";\nimport { checkIsTypeScriptProject } from \"../lib/checkIsTypeScriptProject\";\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 = path.join(\n\t\t...[hasSrcDirectory ? \"src\" : undefined, `prismicio.${extension}`].filter(\n\t\t\t(segment): segment is NonNullable<typeof segment> => Boolean(segment),\n\t\t),\n\t);\n\n\tif (await checkHasProjectFile({ filename, helpers })) {\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\tawait writeProjectFile({\n\t\tfilename,\n\t\tcontents,\n\t\tformat: options.format,\n\t\thelpers,\n\t});\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 filename = path.join(\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 checkHasProjectFile({ filename, helpers })) {\n\t\treturn;\n\t}\n\n\tconst contents = source`\n\t\t\"use client\"\n\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\tawait writeProjectFile({\n\t\tfilename,\n\t\tcontents,\n\t\tformat: options.format,\n\t\thelpers,\n\t});\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 filename = path.join(\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 checkHasProjectFile({ filename, helpers })) {\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 { 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\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 { 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\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\tawait writeProjectFile({\n\t\tfilename,\n\t\tcontents,\n\t\tformat: options.format,\n\t\thelpers,\n\t});\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 filename = path.join(\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 checkHasProjectFile({ filename, helpers })) {\n\t\treturn;\n\t}\n\n\tlet contents: string;\n\n\tif (hasAppRouter) {\n\t\tcontents = source`\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\tawait writeProjectFile({\n\t\tfilename,\n\t\tcontents,\n\t\tformat: options.format,\n\t\thelpers,\n\t});\n};\n\nconst modifySliceMachineConfig = async ({\n\thelpers,\n\toptions,\n\tactions,\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\tproject.config.libraries &&\n\t\tJSON.stringify(project.config.libraries) === JSON.stringify([\"./slices\"])\n\t) {\n\t\tconst sliceLibrary = await actions.readSliceLibrary({\n\t\t\tlibraryID: project.config.libraries[0],\n\t\t});\n\n\t\tif (sliceLibrary.sliceIDs.length < 1) {\n\t\t\tproject.config.libraries = [\"./src/slices\"];\n\t\t}\n\t}\n\n\tawait helpers.updateSliceMachineConfig(project.config, {\n\t\tformat: options.format,\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 filename = path.join(\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 checkHasProjectFile({ filename, helpers })) {\n\t\treturn;\n\t}\n\n\tconst 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\tawait writeProjectFile({\n\t\tfilename,\n\t\tcontents,\n\t\tformat: options.format,\n\t\thelpers,\n\t});\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"],"mappings":";;;;;;;;AAwBA,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,MAAM,yBAAyB;AAAA,IAC1D;AAAA,IACA;AAAA,EAAA,CACA;AACD,QAAM,kBAAkB,MAAM,qBAAqB,EAAE,QAAS,CAAA;AAC9D,QAAM,eAAe,MAAM,kBAAkB,EAAE,QAAS,CAAA;AAExD,QAAM,YAAY,MAAM,mBAAmB,EAAE,SAAS,QAAS,CAAA;AAC/D,QAAM,WAAW,KAAK,KACrB,GAAG,CAAC,kBAAkB,QAAQ,QAAW,aAAa,WAAW,EAAE,OAClE,CAAC,YAAoD,QAAQ,OAAO,CAAC,CACrE;AAGF,MAAI,MAAM,oBAAoB,EAAE,UAAU,QAAS,CAAA,GAAG;AACrD;AAAA,EACA;AAEG,MAAA;AAEJ,MAAI,cAAc;AACjB,QAAI,qBAAqB;AACD,6BAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA,OA0BjB;AACiB,6BAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IA0BvB;AAAA,EAAA,OACK;AACN,QAAI,qBAAqB;AACD,6BAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA,OAsBjB;AACiB,6BAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAsBvB;AAAA,EACD;AAEG,MAAA;AAEJ,MAAI,qBAAqB;AACb,eAAA;AAAA;AAAA;AAAA,yBAGY,kBAAkB,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAwB7C;AAAA;AAAA,EAAA,OAEG;AACK,eAAA;AAAA;AAAA;AAAA,yBAGY,kBAAkB,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KA0B7C;AAAA;AAAA,EAEH;AAED,QAAM,iBAAiB;AAAA,IACtB;AAAA,IACA;AAAA,IACA,QAAQ,QAAQ;AAAA,IAChB;AAAA,EAAA,CACA;AACF;AAIA,MAAM,2BAA2B,OAAO,EACvC,SACA,cACkC;AAClC,QAAM,kBAAkB,MAAM,qBAAqB,EAAE,QAAS,CAAA;AAC9D,QAAM,eAAe,MAAM,kBAAkB,EAAE,QAAS,CAAA;AAElD,QAAA,YAAY,MAAM,mBAAmB,EAAE,SAAS,SAAS,KAAK,MAAM;AACpE,QAAA,WAAW,KAAK,KACrB,GAAG;AAAA,IACF,kBAAkB,QAAQ;AAAA,IAC1B,eACG,4BAA4B,cAC5B,yBAAyB;AAAA,EAAA,EAC3B,OAAO,CAAC,YACT,QAAQ,OAAO,CAAC,CAChB;AAGF,MAAI,MAAM,oBAAoB,EAAE,UAAU,QAAS,CAAA,GAAG;AACrD;AAAA,EACA;AAED,QAAM,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCAMc,eAAe,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWxD,QAAM,iBAAiB;AAAA,IACtB;AAAA,IACA;AAAA,IACA,QAAQ,QAAQ;AAAA,IAChB;AAAA,EAAA,CACA;AACF;AAEA,MAAM,qBAAqB,OAAO,EACjC,SACA,cACwC;AACxC,QAAM,kBAAkB,MAAM,qBAAqB,EAAE,QAAS,CAAA;AAC9D,QAAM,eAAe,MAAM,kBAAkB,EAAE,QAAS,CAAA;AAClD,QAAA,sBAAsB,MAAM,yBAAyB;AAAA,IAC1D;AAAA,IACA;AAAA,EAAA,CACA;AAED,QAAM,YAAY,MAAM,mBAAmB,EAAE,SAAS,QAAS,CAAA;AACzD,QAAA,WAAW,KAAK,KACrB,GAAG;AAAA,IACF,kBAAkB,QAAQ;AAAA,IAC1B,eACG,yBAAyB,cACzB,qBAAqB;AAAA,EAAA,EACvB,OAAO,CAAC,YACT,QAAQ,OAAO,CAAC,CAChB;AAGF,MAAI,MAAM,oBAAoB,EAAE,UAAU,QAAS,CAAA,GAAG;AACrD;AAAA,EACA;AAEG,MAAA;AAEJ,MAAI,cAAc;AACjB,QAAI,qBAAqB;AACb,iBAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA,OAYL;AACK,iBAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAWX;AAAA,EAAA,OACK;AACN,QAAI,qBAAqB;AACb,iBAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA,OAcL;AACK,iBAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAaX;AAAA,EACD;AAED,QAAM,iBAAiB;AAAA,IACtB;AAAA,IACA;AAAA,IACA,QAAQ,QAAQ;AAAA,IAChB;AAAA,EAAA,CACA;AACF;AAEA,MAAM,yBAAyB,OAAO,EACrC,SACA,cACwC;AACxC,QAAM,kBAAkB,MAAM,qBAAqB,EAAE,QAAS,CAAA;AAC9D,QAAM,eAAe,MAAM,kBAAkB,EAAE,QAAS,CAAA;AAClD,QAAA,sBAAsB,MAAM,yBAAyB;AAAA,IAC1D;AAAA,IACA;AAAA,EAAA,CACA;AAED,QAAM,YAAY,MAAM,mBAAmB,EAAE,SAAS,QAAS,CAAA;AACzD,QAAA,WAAW,KAAK,KACrB,GAAG;AAAA,IACF,kBAAkB,QAAQ;AAAA,IAC1B,eACG,8BAA8B,cAC9B,0BAA0B;AAAA,EAAA,EAC5B,OAAO,CAAC,YACT,QAAQ,OAAO,CAAC,CAChB;AAGF,MAAI,MAAM,oBAAoB,EAAE,UAAU,QAAS,CAAA,GAAG;AACrD;AAAA,EACA;AAEG,MAAA;AAEJ,MAAI,cAAc;AACN,eAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA,OAOL;AACN,QAAI,qBAAqB;AACb,iBAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA,OAQL;AACK,iBAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOX;AAAA,EACD;AAED,QAAM,iBAAiB;AAAA,IACtB;AAAA,IACA;AAAA,IACA,QAAQ,QAAQ;AAAA,IAChB;AAAA,EAAA,CACA;AACF;AAEA,MAAM,2BAA2B,OAAO,EACvC,SACA,SACA,cACwC;;AACxC,QAAM,kBAAkB,MAAM,qBAAqB,EAAE,QAAS,CAAA;AACxD,QAAA,UAAU,MAAM,QAAQ;AAG9B,gBAAQ,QAAO,2BAAf,GAAe,yBACd;AAID,MACC,mBACA,QAAQ,OAAO,aACf,KAAK,UAAU,QAAQ,OAAO,SAAS,MAAM,KAAK,UAAU,CAAC,UAAU,CAAC,GACvE;AACK,UAAA,eAAe,MAAM,QAAQ,iBAAiB;AAAA,MACnD,WAAW,QAAQ,OAAO,UAAU,CAAC;AAAA,IAAA,CACrC;AAEG,QAAA,aAAa,SAAS,SAAS,GAAG;AAC7B,cAAA,OAAO,YAAY,CAAC,cAAc;AAAA,IAC1C;AAAA,EACD;AAEK,QAAA,QAAQ,yBAAyB,QAAQ,QAAQ;AAAA,IACtD,QAAQ,QAAQ;AAAA,EAAA,CAChB;AACF;AAEA,MAAM,wBAAwB,OAAO,EACpC,SACA,cACwC;AACxC,QAAM,eAAe,MAAM,kBAAkB,EAAE,QAAS,CAAA;AAExD,MAAI,CAAC,cAAc;AAClB;AAAA,EACA;AAED,QAAM,kBAAkB,MAAM,qBAAqB,EAAE,QAAS,CAAA;AAE9D,QAAM,YAAY,MAAM,mBAAmB,EAAE,SAAS,QAAS,CAAA;AACzD,QAAA,WAAW,KAAK,KACrB,GAAG;AAAA,IACF,kBAAkB,QAAQ;AAAA,IAC1B,4BAA4B;AAAA,EAAA,EAC3B,OAAO,CAAC,YACT,QAAQ,OAAO,CAAC,CAChB;AAGF,MAAI,MAAM,oBAAoB,EAAE,UAAU,QAAS,CAAA,GAAG;AACrD;AAAA,EACA;AAED,QAAM,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWjB,QAAM,iBAAiB;AAAA,IACtB;AAAA,IACA;AAAA,IACA,QAAQ,QAAQ;AAAA,IAChB;AAAA,EAAA,CACA;AACF;AAEO,MAAM,cAA8C,OAC1D,EAAE,qBAAqB,qBAAA,GACvB,YACG;AAEF,oBAAA,MAAM,QAAQ,WAAW;AAAA,IACxB,oBAAoB,EAAE,qBAAqB,sBAAsB;AAAA,IACjE,yBAAyB,OAAO;AAAA,IAChC,oBAAoB,OAAO;AAAA,IAC3B,yBAAyB,OAAO;AAAA,IAChC,mBAAmB,OAAO;AAAA,IAC1B,uBAAuB,OAAO;AAAA,IAC9B,sBAAsB,OAAO;AAAA,EAC7B,CAAA,CAAC;AAEJ;"}
@@ -1,39 +1,16 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const fs = require("@slicemachine/plugin-kit/fs");
3
4
  const commonTags = require("common-tags");
4
- const fs = require("node:fs/promises");
5
- const path = require("node:path");
6
- const buildSliceDirectoryPath = require("../lib/buildSliceDirectoryPath.cjs");
7
5
  const checkIsTypeScriptProject = require("../lib/checkIsTypeScriptProject.cjs");
8
6
  const getJSFileExtension = require("../lib/getJSFileExtension.cjs");
9
7
  const pascalCase = require("../lib/pascalCase.cjs");
10
8
  const rejectIfNecessary = require("../lib/rejectIfNecessary.cjs");
11
- const updateSliceModelFile = require("../lib/updateSliceModelFile.cjs");
12
- const upsertGlobalContentTypes = require("../lib/upsertGlobalContentTypes.cjs");
13
9
  const upsertSliceLibraryIndexFile = require("../lib/upsertSliceLibraryIndexFile.cjs");
14
- function _interopNamespaceDefault(e) {
15
- const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
16
- if (e) {
17
- for (const k in e) {
18
- if (k !== "default") {
19
- const d = Object.getOwnPropertyDescriptor(e, k);
20
- Object.defineProperty(n, k, d.get ? d : {
21
- enumerable: true,
22
- get: () => e[k]
23
- });
24
- }
25
- }
26
- }
27
- n.default = e;
28
- return Object.freeze(n);
29
- }
30
- const fs__namespace = /* @__PURE__ */ _interopNamespaceDefault(fs);
31
- const path__namespace = /* @__PURE__ */ _interopNamespaceDefault(path);
32
- const createComponentFile = async ({ dir, data, helpers, options }) => {
10
+ const createComponentFile = async ({ data, helpers, actions, options }) => {
33
11
  const extension = await getJSFileExtension.getJSFileExtension({ helpers, options, jsx: true });
34
- const filePath = path__namespace.join(dir, `index.${extension}`);
35
- const model = data.model;
36
- const pascalName = pascalCase.pascalCase(model.name);
12
+ const filename = `index.${extension}`;
13
+ const pascalName = pascalCase.pascalCase(data.model.name);
37
14
  let contents;
38
15
  const isTypeScriptProject = await checkIsTypeScriptProject.checkIsTypeScriptProject({
39
16
  helpers,
@@ -50,7 +27,7 @@ const createComponentFile = async ({ dir, data, helpers, options }) => {
50
27
  export type ${pascalName}Props = SliceComponentProps<Content.${pascalName}Slice>;
51
28
 
52
29
  /**
53
- * Component for "${model.name}" Slices.
30
+ * Component for "${data.model.name}" Slices.
54
31
  */
55
32
  const ${pascalName} = ({ slice }: ${pascalName}Props): JSX.Element => {
56
33
  return (
@@ -58,7 +35,7 @@ const createComponentFile = async ({ dir, data, helpers, options }) => {
58
35
  data-slice-type={slice.slice_type}
59
36
  data-slice-variation={slice.variation}
60
37
  >
61
- Placeholder component for ${model.id} (variation: {slice.variation}) Slices
38
+ Placeholder component for ${data.model.id} (variation: {slice.variation}) Slices
62
39
  </section>
63
40
  );
64
41
  };
@@ -78,7 +55,7 @@ const createComponentFile = async ({ dir, data, helpers, options }) => {
78
55
  data-slice-type={slice.slice_type}
79
56
  data-slice-variation={slice.variation}
80
57
  >
81
- Placeholder component for ${model.id} (variation: {slice.variation}) Slices
58
+ Placeholder component for ${data.model.id} (variation: {slice.variation}) Slices
82
59
  </section>
83
60
  );
84
61
  };
@@ -86,29 +63,37 @@ const createComponentFile = async ({ dir, data, helpers, options }) => {
86
63
  export default ${pascalName};
87
64
  `;
88
65
  }
89
- if (options.format) {
90
- contents = await helpers.format(contents, filePath);
91
- }
92
- await fs__namespace.writeFile(filePath, contents);
93
- };
94
- const sliceCreate = async (data, context) => {
95
- const dir = buildSliceDirectoryPath.buildSliceDirectoryPath({
66
+ await fs.writeSliceFile({
96
67
  libraryID: data.libraryID,
97
68
  model: data.model,
98
- helpers: context.helpers
69
+ filename,
70
+ contents,
71
+ format: options.format,
72
+ actions,
73
+ helpers
99
74
  });
100
- await fs__namespace.mkdir(dir, { recursive: true });
75
+ };
76
+ const sliceCreate = async (data, context) => {
101
77
  rejectIfNecessary.rejectIfNecessary(await Promise.allSettled([
102
- updateSliceModelFile.updateSliceModelFile({
78
+ fs.writeSliceModel({
103
79
  libraryID: data.libraryID,
104
80
  model: data.model,
105
- ...context
81
+ format: context.options.format,
82
+ helpers: context.helpers
106
83
  }),
107
- createComponentFile({ dir, data, ...context })
84
+ createComponentFile({ data, ...context })
108
85
  ]));
109
86
  rejectIfNecessary.rejectIfNecessary(await Promise.allSettled([
110
- upsertGlobalContentTypes.upsertGlobalContentTypes(context),
111
- upsertSliceLibraryIndexFile.upsertSliceLibraryIndexFile({ libraryID: data.libraryID, ...context })
87
+ upsertSliceLibraryIndexFile.upsertSliceLibraryIndexFile({
88
+ libraryID: data.libraryID,
89
+ ...context
90
+ }),
91
+ fs.upsertGlobalTypeScriptTypes({
92
+ filename: context.options.generatedTypesFilePath,
93
+ format: context.options.format,
94
+ helpers: context.helpers,
95
+ actions: context.actions
96
+ })
112
97
  ]));
113
98
  };
114
99
  exports.sliceCreate = sliceCreate;
@@ -1 +1 @@
1
- {"version":3,"file":"slice-create.cjs","sources":["../../../src/hooks/slice-create.ts"],"sourcesContent":["import type {\n\tSliceCreateHook,\n\tSliceCreateHookData,\n\tSliceMachineContext,\n} from \"@slicemachine/plugin-kit\";\nimport { stripIndent } from \"common-tags\";\nimport * as fs from \"node:fs/promises\";\nimport * as path from \"node:path\";\n\nimport { buildSliceDirectoryPath } from \"../lib/buildSliceDirectoryPath\";\nimport { checkIsTypeScriptProject } from \"../lib/checkIsTypeScriptProject\";\nimport { getJSFileExtension } from \"../lib/getJSFileExtension\";\nimport { pascalCase } from \"../lib/pascalCase\";\nimport { rejectIfNecessary } from \"../lib/rejectIfNecessary\";\nimport { updateSliceModelFile } from \"../lib/updateSliceModelFile\";\nimport { upsertGlobalContentTypes } from \"../lib/upsertGlobalContentTypes\";\nimport { upsertSliceLibraryIndexFile } from \"../lib/upsertSliceLibraryIndexFile\";\n\nimport type { PluginOptions } from \"../types\";\n\ntype Args = {\n\tdir: string;\n\tdata: SliceCreateHookData;\n} & SliceMachineContext<PluginOptions>;\n\nconst createComponentFile = async ({ dir, data, helpers, options }: Args) => {\n\tconst extension = await getJSFileExtension({ helpers, options, jsx: true });\n\tconst filePath = path.join(dir, `index.${extension}`);\n\tconst model = data.model;\n\tconst pascalName = pascalCase(model.name);\n\n\tlet contents: string;\n\n\tconst isTypeScriptProject = await checkIsTypeScriptProject({\n\t\thelpers,\n\t\toptions,\n\t});\n\n\tif (isTypeScriptProject) {\n\t\tcontents = stripIndent`\n\t\t\timport { Content } from \"@prismicio/client\";\n\t\t\timport { SliceComponentProps } from \"@prismicio/react\";\n\n\t\t\t/**\n\t\t\t * Props for \\`${pascalName}\\`.\n\t\t\t */\n\t\t\texport type ${pascalName}Props = SliceComponentProps<Content.${pascalName}Slice>;\n\n\t\t\t/**\n\t\t\t * Component for \"${model.name}\" Slices.\n\t\t\t */\n\t\t\tconst ${pascalName} = ({ slice }: ${pascalName}Props): JSX.Element => {\n\t\t\t\treturn (\n\t\t\t\t\t<section\n\t\t\t\t\t\tdata-slice-type={slice.slice_type}\n\t\t\t\t\t\tdata-slice-variation={slice.variation}\n\t\t\t\t\t>\n\t\t\t\t\t\tPlaceholder component for ${model.id} (variation: {slice.variation}) Slices\n\t\t\t\t\t</section>\n\t\t\t\t);\n\t\t\t};\n\n\t\t\texport default ${pascalName}\n\t\t`;\n\t} else {\n\t\tcontents = stripIndent`\n\t\t\t/**\n\t\t\t * @typedef {import(\"@prismicio/client\").Content.${pascalName}Slice} ${pascalName}Slice\n\t\t\t * @typedef {import(\"@prismicio/react\").SliceComponentProps<${pascalName}Slice>} ${pascalName}Props\n\t\t\t * @param {${pascalName}Props}\n\t\t\t */\n\t\t\tconst ${pascalName} = ({ slice }) => {\n\t\t\t\treturn (\n\t\t\t\t\t<section\n\t\t\t\t\t\tdata-slice-type={slice.slice_type}\n\t\t\t\t\t\tdata-slice-variation={slice.variation}\n\t\t\t\t\t>\n\t\t\t\t\t\tPlaceholder component for ${model.id} (variation: {slice.variation}) Slices\n\t\t\t\t\t</section>\n\t\t\t\t);\n\t\t\t};\n\n\t\t\texport default ${pascalName};\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 sliceCreate: SliceCreateHook<PluginOptions> = async (\n\tdata,\n\tcontext,\n) => {\n\tconst dir = buildSliceDirectoryPath({\n\t\tlibraryID: data.libraryID,\n\t\tmodel: data.model,\n\t\thelpers: context.helpers,\n\t});\n\n\tawait fs.mkdir(dir, { recursive: true });\n\n\trejectIfNecessary(\n\t\tawait Promise.allSettled([\n\t\t\tupdateSliceModelFile({\n\t\t\t\tlibraryID: data.libraryID,\n\t\t\t\tmodel: data.model,\n\t\t\t\t...context,\n\t\t\t}),\n\t\t\tcreateComponentFile({ dir, data, ...context }),\n\t\t]),\n\t);\n\n\trejectIfNecessary(\n\t\tawait Promise.allSettled([\n\t\t\tupsertGlobalContentTypes(context),\n\t\t\tupsertSliceLibraryIndexFile({ libraryID: data.libraryID, ...context }),\n\t\t]),\n\t);\n};\n"],"names":["getJSFileExtension","path","pascalCase","checkIsTypeScriptProject","stripIndent","fs","buildSliceDirectoryPath","rejectIfNecessary","updateSliceModelFile","upsertGlobalContentTypes","upsertSliceLibraryIndexFile"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyBA,MAAM,sBAAsB,OAAO,EAAE,KAAK,MAAM,SAAS,cAAmB;AACrE,QAAA,YAAY,MAAMA,mBAAAA,mBAAmB,EAAE,SAAS,SAAS,KAAK,MAAM;AAC1E,QAAM,WAAWC,gBAAK,KAAK,KAAK,SAAS,WAAW;AACpD,QAAM,QAAQ,KAAK;AACb,QAAA,aAAaC,WAAAA,WAAW,MAAM,IAAI;AAEpC,MAAA;AAEE,QAAA,sBAAsB,MAAMC,kDAAyB;AAAA,IAC1D;AAAA,IACA;AAAA,EAAA,CACA;AAED,MAAI,qBAAqB;AACb,eAAAC,WAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA,oBAKO;AAAA;AAAA,iBAEH,iDAAiD;AAAA;AAAA;AAAA,uBAG3C,MAAM;AAAA;AAAA,WAElB,4BAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kCAML,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA,oBAKpB;AAAA;AAAA,EAAA,OAEZ;AACK,eAAAA,WAAAA;AAAAA;AAAAA,sDAEyC,oBAAoB;AAAA,iEACT,qBAAqB;AAAA,gBACtE;AAAA;AAAA,WAEL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kCAMuB,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA,oBAKpB;AAAA;AAAA,EAElB;AAED,MAAI,QAAQ,QAAQ;AACnB,eAAW,MAAM,QAAQ,OAAO,UAAU,QAAQ;AAAA,EAClD;AAEK,QAAAC,cAAG,UAAU,UAAU,QAAQ;AACtC;AAEa,MAAA,cAA8C,OAC1D,MACA,YACG;AACH,QAAM,MAAMC,wBAAAA,wBAAwB;AAAA,IACnC,WAAW,KAAK;AAAA,IAChB,OAAO,KAAK;AAAA,IACZ,SAAS,QAAQ;AAAA,EAAA,CACjB;AAED,QAAMD,cAAG,MAAM,KAAK,EAAE,WAAW,MAAM;AAGtCE,sCAAA,MAAM,QAAQ,WAAW;AAAA,IACxBC,0CAAqB;AAAA,MACpB,WAAW,KAAK;AAAA,MAChB,OAAO,KAAK;AAAA,MACZ,GAAG;AAAA,IAAA,CACH;AAAA,IACD,oBAAoB,EAAE,KAAK,MAAM,GAAG,SAAS;AAAA,EAC7C,CAAA,CAAC;AAIFD,sCAAA,MAAM,QAAQ,WAAW;AAAA,IACxBE,yBAAAA,yBAAyB,OAAO;AAAA,IAChCC,wDAA4B,EAAE,WAAW,KAAK,WAAW,GAAG,SAAS;AAAA,EACrE,CAAA,CAAC;AAEJ;;"}
1
+ {"version":3,"file":"slice-create.cjs","sources":["../../../src/hooks/slice-create.ts"],"sourcesContent":["import type {\n\tSliceCreateHook,\n\tSliceCreateHookData,\n\tSliceMachineContext,\n} from \"@slicemachine/plugin-kit\";\nimport {\n\tupsertGlobalTypeScriptTypes,\n\twriteSliceFile,\n\twriteSliceModel,\n} from \"@slicemachine/plugin-kit/fs\";\nimport { stripIndent } from \"common-tags\";\n\nimport { checkIsTypeScriptProject } from \"../lib/checkIsTypeScriptProject\";\nimport { getJSFileExtension } from \"../lib/getJSFileExtension\";\nimport { pascalCase } from \"../lib/pascalCase\";\nimport { rejectIfNecessary } from \"../lib/rejectIfNecessary\";\nimport { upsertSliceLibraryIndexFile } from \"../lib/upsertSliceLibraryIndexFile\";\n\nimport type { PluginOptions } from \"../types\";\n\ntype Args = {\n\tdata: SliceCreateHookData;\n} & SliceMachineContext<PluginOptions>;\n\nconst createComponentFile = async ({\n\tdata,\n\thelpers,\n\tactions,\n\toptions,\n}: Args) => {\n\tconst extension = await getJSFileExtension({ helpers, options, jsx: true });\n\tconst filename = `index.${extension}`;\n\tconst pascalName = pascalCase(data.model.name);\n\n\tlet contents: string;\n\n\tconst isTypeScriptProject = await checkIsTypeScriptProject({\n\t\thelpers,\n\t\toptions,\n\t});\n\n\tif (isTypeScriptProject) {\n\t\tcontents = stripIndent`\n\t\t\timport { Content } from \"@prismicio/client\";\n\t\t\timport { SliceComponentProps } from \"@prismicio/react\";\n\n\t\t\t/**\n\t\t\t * Props for \\`${pascalName}\\`.\n\t\t\t */\n\t\t\texport type ${pascalName}Props = SliceComponentProps<Content.${pascalName}Slice>;\n\n\t\t\t/**\n\t\t\t * Component for \"${data.model.name}\" Slices.\n\t\t\t */\n\t\t\tconst ${pascalName} = ({ slice }: ${pascalName}Props): JSX.Element => {\n\t\t\t\treturn (\n\t\t\t\t\t<section\n\t\t\t\t\t\tdata-slice-type={slice.slice_type}\n\t\t\t\t\t\tdata-slice-variation={slice.variation}\n\t\t\t\t\t>\n\t\t\t\t\t\tPlaceholder component for ${data.model.id} (variation: {slice.variation}) Slices\n\t\t\t\t\t</section>\n\t\t\t\t);\n\t\t\t};\n\n\t\t\texport default ${pascalName}\n\t\t`;\n\t} else {\n\t\tcontents = stripIndent`\n\t\t\t/**\n\t\t\t * @typedef {import(\"@prismicio/client\").Content.${pascalName}Slice} ${pascalName}Slice\n\t\t\t * @typedef {import(\"@prismicio/react\").SliceComponentProps<${pascalName}Slice>} ${pascalName}Props\n\t\t\t * @param {${pascalName}Props}\n\t\t\t */\n\t\t\tconst ${pascalName} = ({ slice }) => {\n\t\t\t\treturn (\n\t\t\t\t\t<section\n\t\t\t\t\t\tdata-slice-type={slice.slice_type}\n\t\t\t\t\t\tdata-slice-variation={slice.variation}\n\t\t\t\t\t>\n\t\t\t\t\t\tPlaceholder component for ${data.model.id} (variation: {slice.variation}) Slices\n\t\t\t\t\t</section>\n\t\t\t\t);\n\t\t\t};\n\n\t\t\texport default ${pascalName};\n\t\t`;\n\t}\n\n\tawait writeSliceFile({\n\t\tlibraryID: data.libraryID,\n\t\tmodel: data.model,\n\t\tfilename,\n\t\tcontents,\n\t\tformat: options.format,\n\t\tactions,\n\t\thelpers,\n\t});\n};\n\nexport const sliceCreate: SliceCreateHook<PluginOptions> = async (\n\tdata,\n\tcontext,\n) => {\n\trejectIfNecessary(\n\t\tawait Promise.allSettled([\n\t\t\twriteSliceModel({\n\t\t\t\tlibraryID: data.libraryID,\n\t\t\t\tmodel: data.model,\n\t\t\t\tformat: context.options.format,\n\t\t\t\thelpers: context.helpers,\n\t\t\t}),\n\t\t\tcreateComponentFile({ data, ...context }),\n\t\t]),\n\t);\n\n\trejectIfNecessary(\n\t\tawait Promise.allSettled([\n\t\t\tupsertSliceLibraryIndexFile({\n\t\t\t\tlibraryID: data.libraryID,\n\t\t\t\t...context,\n\t\t\t}),\n\t\t\tupsertGlobalTypeScriptTypes({\n\t\t\t\tfilename: context.options.generatedTypesFilePath,\n\t\t\t\tformat: context.options.format,\n\t\t\t\thelpers: context.helpers,\n\t\t\t\tactions: context.actions,\n\t\t\t}),\n\t\t]),\n\t);\n};\n"],"names":["getJSFileExtension","pascalCase","checkIsTypeScriptProject","stripIndent","writeSliceFile","rejectIfNecessary","writeSliceModel","upsertSliceLibraryIndexFile","upsertGlobalTypeScriptTypes"],"mappings":";;;;;;;;;AAwBA,MAAM,sBAAsB,OAAO,EAClC,MACA,SACA,SACA,cACU;AACJ,QAAA,YAAY,MAAMA,mBAAAA,mBAAmB,EAAE,SAAS,SAAS,KAAK,MAAM;AAC1E,QAAM,WAAW,SAAS;AAC1B,QAAM,aAAaC,WAAA,WAAW,KAAK,MAAM,IAAI;AAEzC,MAAA;AAEE,QAAA,sBAAsB,MAAMC,kDAAyB;AAAA,IAC1D;AAAA,IACA;AAAA,EAAA,CACA;AAED,MAAI,qBAAqB;AACb,eAAAC,WAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA,oBAKO;AAAA;AAAA,iBAEH,iDAAiD;AAAA;AAAA;AAAA,uBAG3C,KAAK,MAAM;AAAA;AAAA,WAEvB,4BAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kCAML,KAAK,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA,oBAKzB;AAAA;AAAA,EAAA,OAEZ;AACK,eAAAA,WAAAA;AAAAA;AAAAA,sDAEyC,oBAAoB;AAAA,iEACT,qBAAqB;AAAA,gBACtE;AAAA;AAAA,WAEL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kCAMuB,KAAK,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA,oBAKzB;AAAA;AAAA,EAElB;AAED,QAAMC,kBAAe;AAAA,IACpB,WAAW,KAAK;AAAA,IAChB,OAAO,KAAK;AAAA,IACZ;AAAA,IACA;AAAA,IACA,QAAQ,QAAQ;AAAA,IAChB;AAAA,IACA;AAAA,EAAA,CACA;AACF;AAEa,MAAA,cAA8C,OAC1D,MACA,YACG;AAEFC,sCAAA,MAAM,QAAQ,WAAW;AAAA,IACxBC,mBAAgB;AAAA,MACf,WAAW,KAAK;AAAA,MAChB,OAAO,KAAK;AAAA,MACZ,QAAQ,QAAQ,QAAQ;AAAA,MACxB,SAAS,QAAQ;AAAA,IAAA,CACjB;AAAA,IACD,oBAAoB,EAAE,MAAM,GAAG,SAAS;AAAA,EACxC,CAAA,CAAC;AAIFD,sCAAA,MAAM,QAAQ,WAAW;AAAA,IACxBE,wDAA4B;AAAA,MAC3B,WAAW,KAAK;AAAA,MAChB,GAAG;AAAA,IAAA,CACH;AAAA,IACDC,+BAA4B;AAAA,MAC3B,UAAU,QAAQ,QAAQ;AAAA,MAC1B,QAAQ,QAAQ,QAAQ;AAAA,MACxB,SAAS,QAAQ;AAAA,MACjB,SAAS,QAAQ;AAAA,IAAA,CACjB;AAAA,EACD,CAAA,CAAC;AAEJ;;"}
@@ -1,19 +1,14 @@
1
+ import { writeSliceModel, upsertGlobalTypeScriptTypes, writeSliceFile } from "@slicemachine/plugin-kit/fs";
1
2
  import { stripIndent } from "common-tags";
2
- import * as fs from "node:fs/promises";
3
- import * as path from "node:path";
4
- import { buildSliceDirectoryPath } from "../lib/buildSliceDirectoryPath.js";
5
3
  import { checkIsTypeScriptProject } from "../lib/checkIsTypeScriptProject.js";
6
4
  import { getJSFileExtension } from "../lib/getJSFileExtension.js";
7
5
  import { pascalCase } from "../lib/pascalCase.js";
8
6
  import { rejectIfNecessary } from "../lib/rejectIfNecessary.js";
9
- import { updateSliceModelFile } from "../lib/updateSliceModelFile.js";
10
- import { upsertGlobalContentTypes } from "../lib/upsertGlobalContentTypes.js";
11
7
  import { upsertSliceLibraryIndexFile } from "../lib/upsertSliceLibraryIndexFile.js";
12
- const createComponentFile = async ({ dir, data, helpers, options }) => {
8
+ const createComponentFile = async ({ data, helpers, actions, options }) => {
13
9
  const extension = await getJSFileExtension({ helpers, options, jsx: true });
14
- const filePath = path.join(dir, `index.${extension}`);
15
- const model = data.model;
16
- const pascalName = pascalCase(model.name);
10
+ const filename = `index.${extension}`;
11
+ const pascalName = pascalCase(data.model.name);
17
12
  let contents;
18
13
  const isTypeScriptProject = await checkIsTypeScriptProject({
19
14
  helpers,
@@ -30,7 +25,7 @@ const createComponentFile = async ({ dir, data, helpers, options }) => {
30
25
  export type ${pascalName}Props = SliceComponentProps<Content.${pascalName}Slice>;
31
26
 
32
27
  /**
33
- * Component for "${model.name}" Slices.
28
+ * Component for "${data.model.name}" Slices.
34
29
  */
35
30
  const ${pascalName} = ({ slice }: ${pascalName}Props): JSX.Element => {
36
31
  return (
@@ -38,7 +33,7 @@ const createComponentFile = async ({ dir, data, helpers, options }) => {
38
33
  data-slice-type={slice.slice_type}
39
34
  data-slice-variation={slice.variation}
40
35
  >
41
- Placeholder component for ${model.id} (variation: {slice.variation}) Slices
36
+ Placeholder component for ${data.model.id} (variation: {slice.variation}) Slices
42
37
  </section>
43
38
  );
44
39
  };
@@ -58,7 +53,7 @@ const createComponentFile = async ({ dir, data, helpers, options }) => {
58
53
  data-slice-type={slice.slice_type}
59
54
  data-slice-variation={slice.variation}
60
55
  >
61
- Placeholder component for ${model.id} (variation: {slice.variation}) Slices
56
+ Placeholder component for ${data.model.id} (variation: {slice.variation}) Slices
62
57
  </section>
63
58
  );
64
59
  };
@@ -66,29 +61,37 @@ const createComponentFile = async ({ dir, data, helpers, options }) => {
66
61
  export default ${pascalName};
67
62
  `;
68
63
  }
69
- if (options.format) {
70
- contents = await helpers.format(contents, filePath);
71
- }
72
- await fs.writeFile(filePath, contents);
73
- };
74
- const sliceCreate = async (data, context) => {
75
- const dir = buildSliceDirectoryPath({
64
+ await writeSliceFile({
76
65
  libraryID: data.libraryID,
77
66
  model: data.model,
78
- helpers: context.helpers
67
+ filename,
68
+ contents,
69
+ format: options.format,
70
+ actions,
71
+ helpers
79
72
  });
80
- await fs.mkdir(dir, { recursive: true });
73
+ };
74
+ const sliceCreate = async (data, context) => {
81
75
  rejectIfNecessary(await Promise.allSettled([
82
- updateSliceModelFile({
76
+ writeSliceModel({
83
77
  libraryID: data.libraryID,
84
78
  model: data.model,
85
- ...context
79
+ format: context.options.format,
80
+ helpers: context.helpers
86
81
  }),
87
- createComponentFile({ dir, data, ...context })
82
+ createComponentFile({ data, ...context })
88
83
  ]));
89
84
  rejectIfNecessary(await Promise.allSettled([
90
- upsertGlobalContentTypes(context),
91
- upsertSliceLibraryIndexFile({ libraryID: data.libraryID, ...context })
85
+ upsertSliceLibraryIndexFile({
86
+ libraryID: data.libraryID,
87
+ ...context
88
+ }),
89
+ upsertGlobalTypeScriptTypes({
90
+ filename: context.options.generatedTypesFilePath,
91
+ format: context.options.format,
92
+ helpers: context.helpers,
93
+ actions: context.actions
94
+ })
92
95
  ]));
93
96
  };
94
97
  export {
@@ -1 +1 @@
1
- {"version":3,"file":"slice-create.js","sources":["../../../src/hooks/slice-create.ts"],"sourcesContent":["import type {\n\tSliceCreateHook,\n\tSliceCreateHookData,\n\tSliceMachineContext,\n} from \"@slicemachine/plugin-kit\";\nimport { stripIndent } from \"common-tags\";\nimport * as fs from \"node:fs/promises\";\nimport * as path from \"node:path\";\n\nimport { buildSliceDirectoryPath } from \"../lib/buildSliceDirectoryPath\";\nimport { checkIsTypeScriptProject } from \"../lib/checkIsTypeScriptProject\";\nimport { getJSFileExtension } from \"../lib/getJSFileExtension\";\nimport { pascalCase } from \"../lib/pascalCase\";\nimport { rejectIfNecessary } from \"../lib/rejectIfNecessary\";\nimport { updateSliceModelFile } from \"../lib/updateSliceModelFile\";\nimport { upsertGlobalContentTypes } from \"../lib/upsertGlobalContentTypes\";\nimport { upsertSliceLibraryIndexFile } from \"../lib/upsertSliceLibraryIndexFile\";\n\nimport type { PluginOptions } from \"../types\";\n\ntype Args = {\n\tdir: string;\n\tdata: SliceCreateHookData;\n} & SliceMachineContext<PluginOptions>;\n\nconst createComponentFile = async ({ dir, data, helpers, options }: Args) => {\n\tconst extension = await getJSFileExtension({ helpers, options, jsx: true });\n\tconst filePath = path.join(dir, `index.${extension}`);\n\tconst model = data.model;\n\tconst pascalName = pascalCase(model.name);\n\n\tlet contents: string;\n\n\tconst isTypeScriptProject = await checkIsTypeScriptProject({\n\t\thelpers,\n\t\toptions,\n\t});\n\n\tif (isTypeScriptProject) {\n\t\tcontents = stripIndent`\n\t\t\timport { Content } from \"@prismicio/client\";\n\t\t\timport { SliceComponentProps } from \"@prismicio/react\";\n\n\t\t\t/**\n\t\t\t * Props for \\`${pascalName}\\`.\n\t\t\t */\n\t\t\texport type ${pascalName}Props = SliceComponentProps<Content.${pascalName}Slice>;\n\n\t\t\t/**\n\t\t\t * Component for \"${model.name}\" Slices.\n\t\t\t */\n\t\t\tconst ${pascalName} = ({ slice }: ${pascalName}Props): JSX.Element => {\n\t\t\t\treturn (\n\t\t\t\t\t<section\n\t\t\t\t\t\tdata-slice-type={slice.slice_type}\n\t\t\t\t\t\tdata-slice-variation={slice.variation}\n\t\t\t\t\t>\n\t\t\t\t\t\tPlaceholder component for ${model.id} (variation: {slice.variation}) Slices\n\t\t\t\t\t</section>\n\t\t\t\t);\n\t\t\t};\n\n\t\t\texport default ${pascalName}\n\t\t`;\n\t} else {\n\t\tcontents = stripIndent`\n\t\t\t/**\n\t\t\t * @typedef {import(\"@prismicio/client\").Content.${pascalName}Slice} ${pascalName}Slice\n\t\t\t * @typedef {import(\"@prismicio/react\").SliceComponentProps<${pascalName}Slice>} ${pascalName}Props\n\t\t\t * @param {${pascalName}Props}\n\t\t\t */\n\t\t\tconst ${pascalName} = ({ slice }) => {\n\t\t\t\treturn (\n\t\t\t\t\t<section\n\t\t\t\t\t\tdata-slice-type={slice.slice_type}\n\t\t\t\t\t\tdata-slice-variation={slice.variation}\n\t\t\t\t\t>\n\t\t\t\t\t\tPlaceholder component for ${model.id} (variation: {slice.variation}) Slices\n\t\t\t\t\t</section>\n\t\t\t\t);\n\t\t\t};\n\n\t\t\texport default ${pascalName};\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 sliceCreate: SliceCreateHook<PluginOptions> = async (\n\tdata,\n\tcontext,\n) => {\n\tconst dir = buildSliceDirectoryPath({\n\t\tlibraryID: data.libraryID,\n\t\tmodel: data.model,\n\t\thelpers: context.helpers,\n\t});\n\n\tawait fs.mkdir(dir, { recursive: true });\n\n\trejectIfNecessary(\n\t\tawait Promise.allSettled([\n\t\t\tupdateSliceModelFile({\n\t\t\t\tlibraryID: data.libraryID,\n\t\t\t\tmodel: data.model,\n\t\t\t\t...context,\n\t\t\t}),\n\t\t\tcreateComponentFile({ dir, data, ...context }),\n\t\t]),\n\t);\n\n\trejectIfNecessary(\n\t\tawait Promise.allSettled([\n\t\t\tupsertGlobalContentTypes(context),\n\t\t\tupsertSliceLibraryIndexFile({ libraryID: data.libraryID, ...context }),\n\t\t]),\n\t);\n};\n"],"names":[],"mappings":";;;;;;;;;;;AAyBA,MAAM,sBAAsB,OAAO,EAAE,KAAK,MAAM,SAAS,cAAmB;AACrE,QAAA,YAAY,MAAM,mBAAmB,EAAE,SAAS,SAAS,KAAK,MAAM;AAC1E,QAAM,WAAW,KAAK,KAAK,KAAK,SAAS,WAAW;AACpD,QAAM,QAAQ,KAAK;AACb,QAAA,aAAa,WAAW,MAAM,IAAI;AAEpC,MAAA;AAEE,QAAA,sBAAsB,MAAM,yBAAyB;AAAA,IAC1D;AAAA,IACA;AAAA,EAAA,CACA;AAED,MAAI,qBAAqB;AACb,eAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAKO;AAAA;AAAA,iBAEH,iDAAiD;AAAA;AAAA;AAAA,uBAG3C,MAAM;AAAA;AAAA,WAElB,4BAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kCAML,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA,oBAKpB;AAAA;AAAA,EAAA,OAEZ;AACK,eAAA;AAAA;AAAA,sDAEyC,oBAAoB;AAAA,iEACT,qBAAqB;AAAA,gBACtE;AAAA;AAAA,WAEL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kCAMuB,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA,oBAKpB;AAAA;AAAA,EAElB;AAED,MAAI,QAAQ,QAAQ;AACnB,eAAW,MAAM,QAAQ,OAAO,UAAU,QAAQ;AAAA,EAClD;AAEK,QAAA,GAAG,UAAU,UAAU,QAAQ;AACtC;AAEa,MAAA,cAA8C,OAC1D,MACA,YACG;AACH,QAAM,MAAM,wBAAwB;AAAA,IACnC,WAAW,KAAK;AAAA,IAChB,OAAO,KAAK;AAAA,IACZ,SAAS,QAAQ;AAAA,EAAA,CACjB;AAED,QAAM,GAAG,MAAM,KAAK,EAAE,WAAW,MAAM;AAGtC,oBAAA,MAAM,QAAQ,WAAW;AAAA,IACxB,qBAAqB;AAAA,MACpB,WAAW,KAAK;AAAA,MAChB,OAAO,KAAK;AAAA,MACZ,GAAG;AAAA,IAAA,CACH;AAAA,IACD,oBAAoB,EAAE,KAAK,MAAM,GAAG,SAAS;AAAA,EAC7C,CAAA,CAAC;AAIF,oBAAA,MAAM,QAAQ,WAAW;AAAA,IACxB,yBAAyB,OAAO;AAAA,IAChC,4BAA4B,EAAE,WAAW,KAAK,WAAW,GAAG,SAAS;AAAA,EACrE,CAAA,CAAC;AAEJ;"}
1
+ {"version":3,"file":"slice-create.js","sources":["../../../src/hooks/slice-create.ts"],"sourcesContent":["import type {\n\tSliceCreateHook,\n\tSliceCreateHookData,\n\tSliceMachineContext,\n} from \"@slicemachine/plugin-kit\";\nimport {\n\tupsertGlobalTypeScriptTypes,\n\twriteSliceFile,\n\twriteSliceModel,\n} from \"@slicemachine/plugin-kit/fs\";\nimport { stripIndent } from \"common-tags\";\n\nimport { checkIsTypeScriptProject } from \"../lib/checkIsTypeScriptProject\";\nimport { getJSFileExtension } from \"../lib/getJSFileExtension\";\nimport { pascalCase } from \"../lib/pascalCase\";\nimport { rejectIfNecessary } from \"../lib/rejectIfNecessary\";\nimport { upsertSliceLibraryIndexFile } from \"../lib/upsertSliceLibraryIndexFile\";\n\nimport type { PluginOptions } from \"../types\";\n\ntype Args = {\n\tdata: SliceCreateHookData;\n} & SliceMachineContext<PluginOptions>;\n\nconst createComponentFile = async ({\n\tdata,\n\thelpers,\n\tactions,\n\toptions,\n}: Args) => {\n\tconst extension = await getJSFileExtension({ helpers, options, jsx: true });\n\tconst filename = `index.${extension}`;\n\tconst pascalName = pascalCase(data.model.name);\n\n\tlet contents: string;\n\n\tconst isTypeScriptProject = await checkIsTypeScriptProject({\n\t\thelpers,\n\t\toptions,\n\t});\n\n\tif (isTypeScriptProject) {\n\t\tcontents = stripIndent`\n\t\t\timport { Content } from \"@prismicio/client\";\n\t\t\timport { SliceComponentProps } from \"@prismicio/react\";\n\n\t\t\t/**\n\t\t\t * Props for \\`${pascalName}\\`.\n\t\t\t */\n\t\t\texport type ${pascalName}Props = SliceComponentProps<Content.${pascalName}Slice>;\n\n\t\t\t/**\n\t\t\t * Component for \"${data.model.name}\" Slices.\n\t\t\t */\n\t\t\tconst ${pascalName} = ({ slice }: ${pascalName}Props): JSX.Element => {\n\t\t\t\treturn (\n\t\t\t\t\t<section\n\t\t\t\t\t\tdata-slice-type={slice.slice_type}\n\t\t\t\t\t\tdata-slice-variation={slice.variation}\n\t\t\t\t\t>\n\t\t\t\t\t\tPlaceholder component for ${data.model.id} (variation: {slice.variation}) Slices\n\t\t\t\t\t</section>\n\t\t\t\t);\n\t\t\t};\n\n\t\t\texport default ${pascalName}\n\t\t`;\n\t} else {\n\t\tcontents = stripIndent`\n\t\t\t/**\n\t\t\t * @typedef {import(\"@prismicio/client\").Content.${pascalName}Slice} ${pascalName}Slice\n\t\t\t * @typedef {import(\"@prismicio/react\").SliceComponentProps<${pascalName}Slice>} ${pascalName}Props\n\t\t\t * @param {${pascalName}Props}\n\t\t\t */\n\t\t\tconst ${pascalName} = ({ slice }) => {\n\t\t\t\treturn (\n\t\t\t\t\t<section\n\t\t\t\t\t\tdata-slice-type={slice.slice_type}\n\t\t\t\t\t\tdata-slice-variation={slice.variation}\n\t\t\t\t\t>\n\t\t\t\t\t\tPlaceholder component for ${data.model.id} (variation: {slice.variation}) Slices\n\t\t\t\t\t</section>\n\t\t\t\t);\n\t\t\t};\n\n\t\t\texport default ${pascalName};\n\t\t`;\n\t}\n\n\tawait writeSliceFile({\n\t\tlibraryID: data.libraryID,\n\t\tmodel: data.model,\n\t\tfilename,\n\t\tcontents,\n\t\tformat: options.format,\n\t\tactions,\n\t\thelpers,\n\t});\n};\n\nexport const sliceCreate: SliceCreateHook<PluginOptions> = async (\n\tdata,\n\tcontext,\n) => {\n\trejectIfNecessary(\n\t\tawait Promise.allSettled([\n\t\t\twriteSliceModel({\n\t\t\t\tlibraryID: data.libraryID,\n\t\t\t\tmodel: data.model,\n\t\t\t\tformat: context.options.format,\n\t\t\t\thelpers: context.helpers,\n\t\t\t}),\n\t\t\tcreateComponentFile({ data, ...context }),\n\t\t]),\n\t);\n\n\trejectIfNecessary(\n\t\tawait Promise.allSettled([\n\t\t\tupsertSliceLibraryIndexFile({\n\t\t\t\tlibraryID: data.libraryID,\n\t\t\t\t...context,\n\t\t\t}),\n\t\t\tupsertGlobalTypeScriptTypes({\n\t\t\t\tfilename: context.options.generatedTypesFilePath,\n\t\t\t\tformat: context.options.format,\n\t\t\t\thelpers: context.helpers,\n\t\t\t\tactions: context.actions,\n\t\t\t}),\n\t\t]),\n\t);\n};\n"],"names":[],"mappings":";;;;;;;AAwBA,MAAM,sBAAsB,OAAO,EAClC,MACA,SACA,SACA,cACU;AACJ,QAAA,YAAY,MAAM,mBAAmB,EAAE,SAAS,SAAS,KAAK,MAAM;AAC1E,QAAM,WAAW,SAAS;AAC1B,QAAM,aAAa,WAAW,KAAK,MAAM,IAAI;AAEzC,MAAA;AAEE,QAAA,sBAAsB,MAAM,yBAAyB;AAAA,IAC1D;AAAA,IACA;AAAA,EAAA,CACA;AAED,MAAI,qBAAqB;AACb,eAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAKO;AAAA;AAAA,iBAEH,iDAAiD;AAAA;AAAA;AAAA,uBAG3C,KAAK,MAAM;AAAA;AAAA,WAEvB,4BAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kCAML,KAAK,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA,oBAKzB;AAAA;AAAA,EAAA,OAEZ;AACK,eAAA;AAAA;AAAA,sDAEyC,oBAAoB;AAAA,iEACT,qBAAqB;AAAA,gBACtE;AAAA;AAAA,WAEL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kCAMuB,KAAK,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA,oBAKzB;AAAA;AAAA,EAElB;AAED,QAAM,eAAe;AAAA,IACpB,WAAW,KAAK;AAAA,IAChB,OAAO,KAAK;AAAA,IACZ;AAAA,IACA;AAAA,IACA,QAAQ,QAAQ;AAAA,IAChB;AAAA,IACA;AAAA,EAAA,CACA;AACF;AAEa,MAAA,cAA8C,OAC1D,MACA,YACG;AAEF,oBAAA,MAAM,QAAQ,WAAW;AAAA,IACxB,gBAAgB;AAAA,MACf,WAAW,KAAK;AAAA,MAChB,OAAO,KAAK;AAAA,MACZ,QAAQ,QAAQ,QAAQ;AAAA,MACxB,SAAS,QAAQ;AAAA,IAAA,CACjB;AAAA,IACD,oBAAoB,EAAE,MAAM,GAAG,SAAS;AAAA,EACxC,CAAA,CAAC;AAIF,oBAAA,MAAM,QAAQ,WAAW;AAAA,IACxB,4BAA4B;AAAA,MAC3B,WAAW,KAAK;AAAA,MAChB,GAAG;AAAA,IAAA,CACH;AAAA,IACD,4BAA4B;AAAA,MAC3B,UAAU,QAAQ,QAAQ;AAAA,MAC1B,QAAQ,QAAQ,QAAQ;AAAA,MACxB,SAAS,QAAQ;AAAA,MACjB,SAAS,QAAQ;AAAA,IAAA,CACjB;AAAA,EACD,CAAA,CAAC;AAEJ;"}