@slicemachine/adapter-nuxt2 0.3.39-beta.4 → 0.3.39-beta.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.
@@ -36,7 +36,7 @@ const installDependencies = async ({ installDependencies: installDependencies2 }
36
36
  dev: true
37
37
  });
38
38
  };
39
- const configurePrismicModule = async ({ helpers, project }) => {
39
+ const configurePrismicModule = async ({ helpers, options, project }) => {
40
40
  let nuxtConfigFilename = "nuxt.config.js";
41
41
  if (!await fs.checkHasProjectFile({ filename: nuxtConfigFilename, helpers })) {
42
42
  nuxtConfigFilename = "nuxt.config.ts";
@@ -82,17 +82,35 @@ const configurePrismicModule = async ({ helpers, project }) => {
82
82
  config.buildModules || (config.buildModules = []);
83
83
  config.buildModules.push(NUXT_PRISMIC);
84
84
  }
85
+ const ENDPOINT_REPLACE_KEY = "___prismicEndpoint___";
86
+ const ENDPOINT_REPLACE_VALUE = "apiEndpoint || repositoryName";
85
87
  if (!hasInlinedConfiguration) {
88
+ mod.imports.$add({
89
+ from: "./slicemachine.config.json",
90
+ imported: "apiEndpoint"
91
+ });
92
+ mod.imports.$add({
93
+ from: "./slicemachine.config.json",
94
+ imported: "repositoryName"
95
+ });
86
96
  if (config.prismic) {
87
- config.prismic.endpoint = endpoint;
97
+ config.prismic.endpoint = magicast.builders.raw(ENDPOINT_REPLACE_KEY);
88
98
  } else {
89
99
  config.prismic = {
90
- endpoint,
100
+ endpoint: magicast.builders.raw(ENDPOINT_REPLACE_KEY),
91
101
  modern: true
92
102
  };
93
103
  }
94
104
  }
95
- await magicast.writeFile(mod, nuxtConfigPath);
105
+ const ast = "$ast" in mod ? mod.$ast : mod;
106
+ let { code } = magicast.generateCode(ast);
107
+ code = code.replace(ENDPOINT_REPLACE_KEY, ENDPOINT_REPLACE_VALUE);
108
+ await fs.writeProjectFile({
109
+ filename: nuxtConfigFilename,
110
+ contents: code,
111
+ format: options.format,
112
+ helpers
113
+ });
96
114
  };
97
115
  const createSliceSimulatorPage = async ({ helpers, options }) => {
98
116
  const srcPagesDirectoryExists = await fs.checkHasProjectFile({
@@ -1 +1 @@
1
- {"version":3,"file":"project-init.cjs","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 { stripIndent } from \"common-tags\";\nimport { loadFile, writeFile, type ASTNode } from \"magicast\";\n\nimport { rejectIfNecessary } from \"../lib/rejectIfNecessary\";\nimport { checkHasSrcDirectory } from \"../lib/checkHasSrcDirectory\";\n\nimport type { PluginOptions } from \"../types\";\n\nconst NUXT_PRISMIC = \"@nuxtjs/prismic\";\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[NUXT_PRISMIC]: \"^1.4.2\",\n\t\t},\n\t\tdev: true,\n\t});\n};\n\ntype ConfigurePrismicModuleArgs = SliceMachineContext<PluginOptions>;\n\nconst configurePrismicModule = async ({\n\thelpers,\n\tproject,\n}: ConfigurePrismicModuleArgs) => {\n\tlet nuxtConfigFilename = \"nuxt.config.js\";\n\n\tif (!(await checkHasProjectFile({ filename: nuxtConfigFilename, helpers }))) {\n\t\tnuxtConfigFilename = \"nuxt.config.ts\";\n\n\t\t// nuxt.config.* not found\n\t\tif (\n\t\t\t!(await checkHasProjectFile({ filename: nuxtConfigFilename, helpers }))\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t}\n\n\tconst nuxtConfigPath = helpers.joinPathFromRoot(nuxtConfigFilename);\n\n\tconst mod = await loadFile(nuxtConfigPath);\n\n\tconst endpoint =\n\t\tproject.config.apiEndpoint ||\n\t\t`https://${project.config.repositoryName}.cdn.prismic.io/api/v2`;\n\n\tlet config;\n\ttry {\n\t\tconfig =\n\t\t\tmod.exports.default.$type === \"function-call\"\n\t\t\t\t? mod.exports.default.$args[0]\n\t\t\t\t: mod.exports.default;\n\t} catch {\n\t\tconst errorMessage = `Failed to update ${path.basename(nuxtConfigPath)}`;\n\t\tconsole.error(errorMessage);\n\t\tconsole.warn(\n\t\t\t`Ensure that the following has been added to ${path.basename(\n\t\t\t\tnuxtConfigPath,\n\t\t\t)}.`,\n\t\t);\n\t\tconsole.warn(stripIndent`\n\t\t\t{\n\t\t\t\tbuildModules: [\"@nuxtjs/prismic\"],\n\t\t\t\tprismic: {\n\t\t\t\t\tendpoint: \"${endpoint}\",\n\t\t\t\t\tmodern: true\n\t\t\t\t}\n\t\t\t}\n\t\t`);\n\n\t\tthrow errorMessage;\n\t}\n\n\t// Register Prismic module\n\tlet hasInlinedConfiguration = false;\n\tconst hasPrismicModuleRegistered = !![\n\t\t...(config.modules || []),\n\t\t...(config.buildModules || []),\n\t].find((registration: string | [string, unknown]) => {\n\t\tif (typeof registration === \"string\") {\n\t\t\treturn registration === NUXT_PRISMIC;\n\t\t} else if (Array.isArray(registration)) {\n\t\t\thasInlinedConfiguration = !!registration[1];\n\n\t\t\treturn registration[0] === NUXT_PRISMIC;\n\t\t}\n\n\t\treturn false;\n\t});\n\n\tif (!hasPrismicModuleRegistered) {\n\t\tconfig.buildModules ||= [];\n\t\tconfig.buildModules.push(NUXT_PRISMIC);\n\t}\n\n\tif (!hasInlinedConfiguration) {\n\t\tif (config.prismic) {\n\t\t\tconfig.prismic.endpoint = endpoint;\n\t\t} else {\n\t\t\tconfig.prismic = {\n\t\t\t\tendpoint,\n\t\t\t\tmodern: true,\n\t\t\t};\n\t\t}\n\t}\n\n\tawait writeFile(mod as unknown as ASTNode, nuxtConfigPath);\n};\n\ntype CreateSliceSimulatorPageArgs = SliceMachineContext<PluginOptions>;\n\nconst createSliceSimulatorPage = async ({\n\thelpers,\n\toptions,\n}: CreateSliceSimulatorPageArgs) => {\n\tconst srcPagesDirectoryExists = await checkHasProjectFile({\n\t\tfilename: \"src/pages\",\n\t\thelpers,\n\t});\n\n\tconst filename = path.join(\n\t\tsrcPagesDirectoryExists ? \"src/pages\" : \"pages\",\n\t\t\"slice-simulator.vue\",\n\t);\n\n\tif (await checkHasProjectFile({ filename, helpers })) {\n\t\treturn;\n\t}\n\n\tconst contents = stripIndent`\n\t\t<template>\n\t\t\t<SliceSimulator v-slot=\"{ slices }\">\n\t\t\t\t<SliceZone :slices=\"slices\" :components=\"components\" />\n\t\t\t</SliceSimulator>\n\t\t</template>\n\n\t\t<script>\n\t\timport { SliceSimulator } from \"@slicemachine/adapter-nuxt2/dist/simulator.cjs\";\n\t\timport { components } from \"~/slices\";\n\n\t\texport default {\n\t\t\tcomponents: {\n\t\t\t\tSliceSimulator,\n\t\t\t},\n\t\t\tdata () {\n\t\t\t\treturn { components };\n\t\t\t},\n\t\t};\n\t\t</script>\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\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\tconfigurePrismicModule(context),\n\t\t\tcreateSliceSimulatorPage(context),\n\t\t\tmodifySliceMachineConfig(context),\n\t\t]),\n\t);\n};\n"],"names":["installDependencies","checkHasProjectFile","loadFile","path","stripIndent","writeFile","writeProjectFile","checkHasSrcDirectory","_a","rejectIfNecessary"],"mappings":"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"}
1
+ {"version":3,"file":"project-init.cjs","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 { stripIndent } from \"common-tags\";\nimport { builders, generateCode, loadFile } from \"magicast\";\n\nimport { rejectIfNecessary } from \"../lib/rejectIfNecessary\";\nimport { checkHasSrcDirectory } from \"../lib/checkHasSrcDirectory\";\n\nimport type { PluginOptions } from \"../types\";\n\nconst NUXT_PRISMIC = \"@nuxtjs/prismic\";\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[NUXT_PRISMIC]: \"^1.4.2\",\n\t\t},\n\t\tdev: true,\n\t});\n};\n\ntype ConfigurePrismicModuleArgs = SliceMachineContext<PluginOptions>;\n\nconst configurePrismicModule = async ({\n\thelpers,\n\toptions,\n\tproject,\n}: ConfigurePrismicModuleArgs) => {\n\tlet nuxtConfigFilename = \"nuxt.config.js\";\n\n\tif (!(await checkHasProjectFile({ filename: nuxtConfigFilename, helpers }))) {\n\t\tnuxtConfigFilename = \"nuxt.config.ts\";\n\n\t\t// nuxt.config.* not found\n\t\tif (\n\t\t\t!(await checkHasProjectFile({ filename: nuxtConfigFilename, helpers }))\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t}\n\n\tconst nuxtConfigPath = helpers.joinPathFromRoot(nuxtConfigFilename);\n\n\tconst mod = await loadFile(nuxtConfigPath);\n\n\tconst endpoint =\n\t\tproject.config.apiEndpoint ||\n\t\t`https://${project.config.repositoryName}.cdn.prismic.io/api/v2`;\n\n\tlet config;\n\ttry {\n\t\tconfig =\n\t\t\tmod.exports.default.$type === \"function-call\"\n\t\t\t\t? mod.exports.default.$args[0]\n\t\t\t\t: mod.exports.default;\n\t} catch {\n\t\tconst errorMessage = `Failed to update ${path.basename(nuxtConfigPath)}`;\n\t\tconsole.error(errorMessage);\n\t\tconsole.warn(\n\t\t\t`Ensure that the following has been added to ${path.basename(\n\t\t\t\tnuxtConfigPath,\n\t\t\t)}.`,\n\t\t);\n\t\tconsole.warn(stripIndent`\n\t\t\t{\n\t\t\t\tbuildModules: [\"@nuxtjs/prismic\"],\n\t\t\t\tprismic: {\n\t\t\t\t\tendpoint: \"${endpoint}\",\n\t\t\t\t\tmodern: true\n\t\t\t\t}\n\t\t\t}\n\t\t`);\n\n\t\tthrow errorMessage;\n\t}\n\n\t// Register Prismic module\n\tlet hasInlinedConfiguration = false;\n\tconst hasPrismicModuleRegistered = !![\n\t\t...(config.modules || []),\n\t\t...(config.buildModules || []),\n\t].find((registration: string | [string, unknown]) => {\n\t\tif (typeof registration === \"string\") {\n\t\t\treturn registration === NUXT_PRISMIC;\n\t\t} else if (Array.isArray(registration)) {\n\t\t\thasInlinedConfiguration = !!registration[1];\n\n\t\t\treturn registration[0] === NUXT_PRISMIC;\n\t\t}\n\n\t\treturn false;\n\t});\n\n\tif (!hasPrismicModuleRegistered) {\n\t\tconfig.buildModules ||= [];\n\t\tconfig.buildModules.push(NUXT_PRISMIC);\n\t}\n\n\t// Append Prismic module configuration\n\tconst ENDPOINT_REPLACE_KEY = \"___prismicEndpoint___\";\n\tconst ENDPOINT_REPLACE_VALUE = \"apiEndpoint || repositoryName\";\n\tif (!hasInlinedConfiguration) {\n\t\t// Import Slice Machine configuration\n\t\tmod.imports.$add({\n\t\t\tfrom: \"./slicemachine.config.json\",\n\t\t\timported: \"apiEndpoint\",\n\t\t});\n\t\tmod.imports.$add({\n\t\t\tfrom: \"./slicemachine.config.json\",\n\t\t\timported: \"repositoryName\",\n\t\t});\n\n\t\t// Add inline configuration\n\t\tif (config.prismic) {\n\t\t\tconfig.prismic.endpoint = builders.raw(ENDPOINT_REPLACE_KEY);\n\t\t} else {\n\t\t\tconfig.prismic = {\n\t\t\t\tendpoint: builders.raw(ENDPOINT_REPLACE_KEY),\n\t\t\t\tmodern: true,\n\t\t\t};\n\t\t}\n\t}\n\n\tconst ast = \"$ast\" in mod ? mod.$ast : mod;\n\tlet { code } = generateCode(ast);\n\t// This is a workaround to magicast not supporting \"LogicalExpression\" node type\n\tcode = code.replace(ENDPOINT_REPLACE_KEY, ENDPOINT_REPLACE_VALUE);\n\tawait writeProjectFile({\n\t\tfilename: nuxtConfigFilename,\n\t\tcontents: code,\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 srcPagesDirectoryExists = await checkHasProjectFile({\n\t\tfilename: \"src/pages\",\n\t\thelpers,\n\t});\n\n\tconst filename = path.join(\n\t\tsrcPagesDirectoryExists ? \"src/pages\" : \"pages\",\n\t\t\"slice-simulator.vue\",\n\t);\n\n\tif (await checkHasProjectFile({ filename, helpers })) {\n\t\treturn;\n\t}\n\n\tconst contents = stripIndent`\n\t\t<template>\n\t\t\t<SliceSimulator v-slot=\"{ slices }\">\n\t\t\t\t<SliceZone :slices=\"slices\" :components=\"components\" />\n\t\t\t</SliceSimulator>\n\t\t</template>\n\n\t\t<script>\n\t\timport { SliceSimulator } from \"@slicemachine/adapter-nuxt2/dist/simulator.cjs\";\n\t\timport { components } from \"~/slices\";\n\n\t\texport default {\n\t\t\tcomponents: {\n\t\t\t\tSliceSimulator,\n\t\t\t},\n\t\t\tdata () {\n\t\t\t\treturn { components };\n\t\t\t},\n\t\t};\n\t\t</script>\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\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\tconfigurePrismicModule(context),\n\t\t\tcreateSliceSimulatorPage(context),\n\t\t\tmodifySliceMachineConfig(context),\n\t\t]),\n\t);\n};\n"],"names":["installDependencies","checkHasProjectFile","loadFile","path","stripIndent","builders","generateCode","writeProjectFile","checkHasSrcDirectory","_a","rejectIfNecessary"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import * as path from "node:path";
2
2
  import { checkHasProjectFile, writeProjectFile } from "@slicemachine/plugin-kit/fs";
3
3
  import { stripIndent } from "common-tags";
4
- import { loadFile, writeFile } from "magicast";
4
+ import { loadFile, builders, generateCode } from "magicast";
5
5
  import { rejectIfNecessary } from "../lib/rejectIfNecessary.js";
6
6
  import { checkHasSrcDirectory } from "../lib/checkHasSrcDirectory.js";
7
7
  var __freeze = Object.freeze;
@@ -17,7 +17,7 @@ const installDependencies = async ({ installDependencies: installDependencies2 }
17
17
  dev: true
18
18
  });
19
19
  };
20
- const configurePrismicModule = async ({ helpers, project }) => {
20
+ const configurePrismicModule = async ({ helpers, options, project }) => {
21
21
  let nuxtConfigFilename = "nuxt.config.js";
22
22
  if (!await checkHasProjectFile({ filename: nuxtConfigFilename, helpers })) {
23
23
  nuxtConfigFilename = "nuxt.config.ts";
@@ -63,17 +63,35 @@ const configurePrismicModule = async ({ helpers, project }) => {
63
63
  config.buildModules || (config.buildModules = []);
64
64
  config.buildModules.push(NUXT_PRISMIC);
65
65
  }
66
+ const ENDPOINT_REPLACE_KEY = "___prismicEndpoint___";
67
+ const ENDPOINT_REPLACE_VALUE = "apiEndpoint || repositoryName";
66
68
  if (!hasInlinedConfiguration) {
69
+ mod.imports.$add({
70
+ from: "./slicemachine.config.json",
71
+ imported: "apiEndpoint"
72
+ });
73
+ mod.imports.$add({
74
+ from: "./slicemachine.config.json",
75
+ imported: "repositoryName"
76
+ });
67
77
  if (config.prismic) {
68
- config.prismic.endpoint = endpoint;
78
+ config.prismic.endpoint = builders.raw(ENDPOINT_REPLACE_KEY);
69
79
  } else {
70
80
  config.prismic = {
71
- endpoint,
81
+ endpoint: builders.raw(ENDPOINT_REPLACE_KEY),
72
82
  modern: true
73
83
  };
74
84
  }
75
85
  }
76
- await writeFile(mod, nuxtConfigPath);
86
+ const ast = "$ast" in mod ? mod.$ast : mod;
87
+ let { code } = generateCode(ast);
88
+ code = code.replace(ENDPOINT_REPLACE_KEY, ENDPOINT_REPLACE_VALUE);
89
+ await writeProjectFile({
90
+ filename: nuxtConfigFilename,
91
+ contents: code,
92
+ format: options.format,
93
+ helpers
94
+ });
77
95
  };
78
96
  const createSliceSimulatorPage = async ({ helpers, options }) => {
79
97
  const srcPagesDirectoryExists = await checkHasProjectFile({
@@ -1 +1 @@
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 { stripIndent } from \"common-tags\";\nimport { loadFile, writeFile, type ASTNode } from \"magicast\";\n\nimport { rejectIfNecessary } from \"../lib/rejectIfNecessary\";\nimport { checkHasSrcDirectory } from \"../lib/checkHasSrcDirectory\";\n\nimport type { PluginOptions } from \"../types\";\n\nconst NUXT_PRISMIC = \"@nuxtjs/prismic\";\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[NUXT_PRISMIC]: \"^1.4.2\",\n\t\t},\n\t\tdev: true,\n\t});\n};\n\ntype ConfigurePrismicModuleArgs = SliceMachineContext<PluginOptions>;\n\nconst configurePrismicModule = async ({\n\thelpers,\n\tproject,\n}: ConfigurePrismicModuleArgs) => {\n\tlet nuxtConfigFilename = \"nuxt.config.js\";\n\n\tif (!(await checkHasProjectFile({ filename: nuxtConfigFilename, helpers }))) {\n\t\tnuxtConfigFilename = \"nuxt.config.ts\";\n\n\t\t// nuxt.config.* not found\n\t\tif (\n\t\t\t!(await checkHasProjectFile({ filename: nuxtConfigFilename, helpers }))\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t}\n\n\tconst nuxtConfigPath = helpers.joinPathFromRoot(nuxtConfigFilename);\n\n\tconst mod = await loadFile(nuxtConfigPath);\n\n\tconst endpoint =\n\t\tproject.config.apiEndpoint ||\n\t\t`https://${project.config.repositoryName}.cdn.prismic.io/api/v2`;\n\n\tlet config;\n\ttry {\n\t\tconfig =\n\t\t\tmod.exports.default.$type === \"function-call\"\n\t\t\t\t? mod.exports.default.$args[0]\n\t\t\t\t: mod.exports.default;\n\t} catch {\n\t\tconst errorMessage = `Failed to update ${path.basename(nuxtConfigPath)}`;\n\t\tconsole.error(errorMessage);\n\t\tconsole.warn(\n\t\t\t`Ensure that the following has been added to ${path.basename(\n\t\t\t\tnuxtConfigPath,\n\t\t\t)}.`,\n\t\t);\n\t\tconsole.warn(stripIndent`\n\t\t\t{\n\t\t\t\tbuildModules: [\"@nuxtjs/prismic\"],\n\t\t\t\tprismic: {\n\t\t\t\t\tendpoint: \"${endpoint}\",\n\t\t\t\t\tmodern: true\n\t\t\t\t}\n\t\t\t}\n\t\t`);\n\n\t\tthrow errorMessage;\n\t}\n\n\t// Register Prismic module\n\tlet hasInlinedConfiguration = false;\n\tconst hasPrismicModuleRegistered = !![\n\t\t...(config.modules || []),\n\t\t...(config.buildModules || []),\n\t].find((registration: string | [string, unknown]) => {\n\t\tif (typeof registration === \"string\") {\n\t\t\treturn registration === NUXT_PRISMIC;\n\t\t} else if (Array.isArray(registration)) {\n\t\t\thasInlinedConfiguration = !!registration[1];\n\n\t\t\treturn registration[0] === NUXT_PRISMIC;\n\t\t}\n\n\t\treturn false;\n\t});\n\n\tif (!hasPrismicModuleRegistered) {\n\t\tconfig.buildModules ||= [];\n\t\tconfig.buildModules.push(NUXT_PRISMIC);\n\t}\n\n\tif (!hasInlinedConfiguration) {\n\t\tif (config.prismic) {\n\t\t\tconfig.prismic.endpoint = endpoint;\n\t\t} else {\n\t\t\tconfig.prismic = {\n\t\t\t\tendpoint,\n\t\t\t\tmodern: true,\n\t\t\t};\n\t\t}\n\t}\n\n\tawait writeFile(mod as unknown as ASTNode, nuxtConfigPath);\n};\n\ntype CreateSliceSimulatorPageArgs = SliceMachineContext<PluginOptions>;\n\nconst createSliceSimulatorPage = async ({\n\thelpers,\n\toptions,\n}: CreateSliceSimulatorPageArgs) => {\n\tconst srcPagesDirectoryExists = await checkHasProjectFile({\n\t\tfilename: \"src/pages\",\n\t\thelpers,\n\t});\n\n\tconst filename = path.join(\n\t\tsrcPagesDirectoryExists ? \"src/pages\" : \"pages\",\n\t\t\"slice-simulator.vue\",\n\t);\n\n\tif (await checkHasProjectFile({ filename, helpers })) {\n\t\treturn;\n\t}\n\n\tconst contents = stripIndent`\n\t\t<template>\n\t\t\t<SliceSimulator v-slot=\"{ slices }\">\n\t\t\t\t<SliceZone :slices=\"slices\" :components=\"components\" />\n\t\t\t</SliceSimulator>\n\t\t</template>\n\n\t\t<script>\n\t\timport { SliceSimulator } from \"@slicemachine/adapter-nuxt2/dist/simulator.cjs\";\n\t\timport { components } from \"~/slices\";\n\n\t\texport default {\n\t\t\tcomponents: {\n\t\t\t\tSliceSimulator,\n\t\t\t},\n\t\t\tdata () {\n\t\t\t\treturn { components };\n\t\t\t},\n\t\t};\n\t\t</script>\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\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\tconfigurePrismicModule(context),\n\t\t\tcreateSliceSimulatorPage(context),\n\t\t\tmodifySliceMachineConfig(context),\n\t\t]),\n\t);\n};\n"],"names":["installDependencies","_a"],"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 { stripIndent } from \"common-tags\";\nimport { builders, generateCode, loadFile } from \"magicast\";\n\nimport { rejectIfNecessary } from \"../lib/rejectIfNecessary\";\nimport { checkHasSrcDirectory } from \"../lib/checkHasSrcDirectory\";\n\nimport type { PluginOptions } from \"../types\";\n\nconst NUXT_PRISMIC = \"@nuxtjs/prismic\";\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[NUXT_PRISMIC]: \"^1.4.2\",\n\t\t},\n\t\tdev: true,\n\t});\n};\n\ntype ConfigurePrismicModuleArgs = SliceMachineContext<PluginOptions>;\n\nconst configurePrismicModule = async ({\n\thelpers,\n\toptions,\n\tproject,\n}: ConfigurePrismicModuleArgs) => {\n\tlet nuxtConfigFilename = \"nuxt.config.js\";\n\n\tif (!(await checkHasProjectFile({ filename: nuxtConfigFilename, helpers }))) {\n\t\tnuxtConfigFilename = \"nuxt.config.ts\";\n\n\t\t// nuxt.config.* not found\n\t\tif (\n\t\t\t!(await checkHasProjectFile({ filename: nuxtConfigFilename, helpers }))\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t}\n\n\tconst nuxtConfigPath = helpers.joinPathFromRoot(nuxtConfigFilename);\n\n\tconst mod = await loadFile(nuxtConfigPath);\n\n\tconst endpoint =\n\t\tproject.config.apiEndpoint ||\n\t\t`https://${project.config.repositoryName}.cdn.prismic.io/api/v2`;\n\n\tlet config;\n\ttry {\n\t\tconfig =\n\t\t\tmod.exports.default.$type === \"function-call\"\n\t\t\t\t? mod.exports.default.$args[0]\n\t\t\t\t: mod.exports.default;\n\t} catch {\n\t\tconst errorMessage = `Failed to update ${path.basename(nuxtConfigPath)}`;\n\t\tconsole.error(errorMessage);\n\t\tconsole.warn(\n\t\t\t`Ensure that the following has been added to ${path.basename(\n\t\t\t\tnuxtConfigPath,\n\t\t\t)}.`,\n\t\t);\n\t\tconsole.warn(stripIndent`\n\t\t\t{\n\t\t\t\tbuildModules: [\"@nuxtjs/prismic\"],\n\t\t\t\tprismic: {\n\t\t\t\t\tendpoint: \"${endpoint}\",\n\t\t\t\t\tmodern: true\n\t\t\t\t}\n\t\t\t}\n\t\t`);\n\n\t\tthrow errorMessage;\n\t}\n\n\t// Register Prismic module\n\tlet hasInlinedConfiguration = false;\n\tconst hasPrismicModuleRegistered = !![\n\t\t...(config.modules || []),\n\t\t...(config.buildModules || []),\n\t].find((registration: string | [string, unknown]) => {\n\t\tif (typeof registration === \"string\") {\n\t\t\treturn registration === NUXT_PRISMIC;\n\t\t} else if (Array.isArray(registration)) {\n\t\t\thasInlinedConfiguration = !!registration[1];\n\n\t\t\treturn registration[0] === NUXT_PRISMIC;\n\t\t}\n\n\t\treturn false;\n\t});\n\n\tif (!hasPrismicModuleRegistered) {\n\t\tconfig.buildModules ||= [];\n\t\tconfig.buildModules.push(NUXT_PRISMIC);\n\t}\n\n\t// Append Prismic module configuration\n\tconst ENDPOINT_REPLACE_KEY = \"___prismicEndpoint___\";\n\tconst ENDPOINT_REPLACE_VALUE = \"apiEndpoint || repositoryName\";\n\tif (!hasInlinedConfiguration) {\n\t\t// Import Slice Machine configuration\n\t\tmod.imports.$add({\n\t\t\tfrom: \"./slicemachine.config.json\",\n\t\t\timported: \"apiEndpoint\",\n\t\t});\n\t\tmod.imports.$add({\n\t\t\tfrom: \"./slicemachine.config.json\",\n\t\t\timported: \"repositoryName\",\n\t\t});\n\n\t\t// Add inline configuration\n\t\tif (config.prismic) {\n\t\t\tconfig.prismic.endpoint = builders.raw(ENDPOINT_REPLACE_KEY);\n\t\t} else {\n\t\t\tconfig.prismic = {\n\t\t\t\tendpoint: builders.raw(ENDPOINT_REPLACE_KEY),\n\t\t\t\tmodern: true,\n\t\t\t};\n\t\t}\n\t}\n\n\tconst ast = \"$ast\" in mod ? mod.$ast : mod;\n\tlet { code } = generateCode(ast);\n\t// This is a workaround to magicast not supporting \"LogicalExpression\" node type\n\tcode = code.replace(ENDPOINT_REPLACE_KEY, ENDPOINT_REPLACE_VALUE);\n\tawait writeProjectFile({\n\t\tfilename: nuxtConfigFilename,\n\t\tcontents: code,\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 srcPagesDirectoryExists = await checkHasProjectFile({\n\t\tfilename: \"src/pages\",\n\t\thelpers,\n\t});\n\n\tconst filename = path.join(\n\t\tsrcPagesDirectoryExists ? \"src/pages\" : \"pages\",\n\t\t\"slice-simulator.vue\",\n\t);\n\n\tif (await checkHasProjectFile({ filename, helpers })) {\n\t\treturn;\n\t}\n\n\tconst contents = stripIndent`\n\t\t<template>\n\t\t\t<SliceSimulator v-slot=\"{ slices }\">\n\t\t\t\t<SliceZone :slices=\"slices\" :components=\"components\" />\n\t\t\t</SliceSimulator>\n\t\t</template>\n\n\t\t<script>\n\t\timport { SliceSimulator } from \"@slicemachine/adapter-nuxt2/dist/simulator.cjs\";\n\t\timport { components } from \"~/slices\";\n\n\t\texport default {\n\t\t\tcomponents: {\n\t\t\t\tSliceSimulator,\n\t\t\t},\n\t\t\tdata () {\n\t\t\t\treturn { components };\n\t\t\t},\n\t\t};\n\t\t</script>\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\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\tconfigurePrismicModule(context),\n\t\t\tcreateSliceSimulatorPage(context),\n\t\t\tmodifySliceMachineConfig(context),\n\t\t]),\n\t);\n};\n"],"names":["installDependencies","_a"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@slicemachine/adapter-nuxt2",
3
- "version": "0.3.39-beta.4",
3
+ "version": "0.3.39-beta.6",
4
4
  "description": "Slice Machine adapter for Nuxt 2.",
5
5
  "keywords": [
6
6
  "typescript",
@@ -61,12 +61,12 @@
61
61
  "dependencies": {
62
62
  "@prismicio/simulator": "^0.1.4",
63
63
  "@prismicio/types-internal": "^2.2.0",
64
- "@slicemachine/plugin-kit": "0.4.39-beta.4",
64
+ "@slicemachine/plugin-kit": "0.4.39-beta.6",
65
65
  "common-tags": "^1.8.2",
66
66
  "fp-ts": "^2.13.1",
67
67
  "io-ts": "^2.2.20",
68
68
  "io-ts-types": "^0.5.19",
69
- "magicast": "^0.2.1",
69
+ "magicast": "^0.3.3",
70
70
  "monocle-ts": "^2.3.13",
71
71
  "newtype-ts": "^0.3.5",
72
72
  "pascal-case": "^3.1.2",
@@ -9,7 +9,7 @@ import {
9
9
  writeProjectFile,
10
10
  } from "@slicemachine/plugin-kit/fs";
11
11
  import { stripIndent } from "common-tags";
12
- import { loadFile, writeFile, type ASTNode } from "magicast";
12
+ import { builders, generateCode, loadFile } from "magicast";
13
13
 
14
14
  import { rejectIfNecessary } from "../lib/rejectIfNecessary";
15
15
  import { checkHasSrcDirectory } from "../lib/checkHasSrcDirectory";
@@ -37,6 +37,7 @@ type ConfigurePrismicModuleArgs = SliceMachineContext<PluginOptions>;
37
37
 
38
38
  const configurePrismicModule = async ({
39
39
  helpers,
40
+ options,
40
41
  project,
41
42
  }: ConfigurePrismicModuleArgs) => {
42
43
  let nuxtConfigFilename = "nuxt.config.js";
@@ -109,18 +110,41 @@ const configurePrismicModule = async ({
109
110
  config.buildModules.push(NUXT_PRISMIC);
110
111
  }
111
112
 
113
+ // Append Prismic module configuration
114
+ const ENDPOINT_REPLACE_KEY = "___prismicEndpoint___";
115
+ const ENDPOINT_REPLACE_VALUE = "apiEndpoint || repositoryName";
112
116
  if (!hasInlinedConfiguration) {
117
+ // Import Slice Machine configuration
118
+ mod.imports.$add({
119
+ from: "./slicemachine.config.json",
120
+ imported: "apiEndpoint",
121
+ });
122
+ mod.imports.$add({
123
+ from: "./slicemachine.config.json",
124
+ imported: "repositoryName",
125
+ });
126
+
127
+ // Add inline configuration
113
128
  if (config.prismic) {
114
- config.prismic.endpoint = endpoint;
129
+ config.prismic.endpoint = builders.raw(ENDPOINT_REPLACE_KEY);
115
130
  } else {
116
131
  config.prismic = {
117
- endpoint,
132
+ endpoint: builders.raw(ENDPOINT_REPLACE_KEY),
118
133
  modern: true,
119
134
  };
120
135
  }
121
136
  }
122
137
 
123
- await writeFile(mod as unknown as ASTNode, nuxtConfigPath);
138
+ const ast = "$ast" in mod ? mod.$ast : mod;
139
+ let { code } = generateCode(ast);
140
+ // This is a workaround to magicast not supporting "LogicalExpression" node type
141
+ code = code.replace(ENDPOINT_REPLACE_KEY, ENDPOINT_REPLACE_VALUE);
142
+ await writeProjectFile({
143
+ filename: nuxtConfigFilename,
144
+ contents: code,
145
+ format: options.format,
146
+ helpers,
147
+ });
124
148
  };
125
149
 
126
150
  type CreateSliceSimulatorPageArgs = SliceMachineContext<PluginOptions>;