@phtngyn/cms 0.1.0-beta.1 → 0.1.0-beta.3

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 (143) hide show
  1. package/README.md +212 -12
  2. package/bin/cms.mjs +2 -0
  3. package/package.json +30 -15
  4. package/src/{Configuration-DyKo0sLS.js → Configuration-CDMYfTre.js} +26 -147
  5. package/src/Configuration-CDMYfTre.js.map +1 -0
  6. package/src/Configuration.d.ts +24 -8
  7. package/src/Configuration.js +0 -1
  8. package/src/Configuration.js.map +1 -1
  9. package/src/ContentTransfer-C3Av9sWz.js +53 -0
  10. package/src/ContentTransfer-C3Av9sWz.js.map +1 -0
  11. package/src/{DocumentEngine-DYObwMDY.js → DocumentEngine-J7g-emdf.js} +75 -27
  12. package/src/DocumentEngine-J7g-emdf.js.map +1 -0
  13. package/src/DocumentModel.d.ts +8 -9
  14. package/src/DocumentModel.js +13 -3
  15. package/src/DocumentModel.js.map +1 -1
  16. package/src/Forms-BsJMev5_.d.ts +74 -0
  17. package/src/Forms-CfcI3tPU.js +79 -0
  18. package/src/Forms-CfcI3tPU.js.map +1 -0
  19. package/src/Forms-Dj6NuW66.js +367 -0
  20. package/src/Forms-Dj6NuW66.js.map +1 -0
  21. package/src/Forms.d.ts +51 -0
  22. package/src/Forms.js +13 -0
  23. package/src/Forms.js.map +1 -0
  24. package/src/{HttpPaths-BbS21Jy8.js → HttpPaths-c9nLZ9H2.js} +6 -2
  25. package/src/HttpPaths-c9nLZ9H2.js.map +1 -0
  26. package/src/I18n.d.ts +20 -0
  27. package/src/I18n.js +1 -0
  28. package/src/Module.js +59 -14
  29. package/src/Module.js.map +1 -1
  30. package/src/S3MediaObjects-CpPSzJto.js +2777 -0
  31. package/src/S3MediaObjects-CpPSzJto.js.map +1 -0
  32. package/src/Seo-402YumpT.d.ts +198 -0
  33. package/src/cli/content.js +258 -0
  34. package/src/cli/content.js.map +1 -0
  35. package/src/cli.js +71 -0
  36. package/src/cli.js.map +1 -0
  37. package/src/{connection-CBTY-TzB.js → connection-CBAy2qGy.js} +5 -7
  38. package/src/connection-CBAy2qGy.js.map +1 -0
  39. package/src/{installation-DeuBiFRE.js → installation-CNfIriVm.js} +1007 -2246
  40. package/src/installation-CNfIriVm.js.map +1 -0
  41. package/src/internal/authoring-catalog.js +10 -4
  42. package/src/internal/authoring-catalog.js.map +1 -1
  43. package/src/internal/authoring-compiler.js +0 -1
  44. package/src/internal/authoring-compiler.js.map +1 -1
  45. package/src/internal/authoring-metadata.js +4 -4
  46. package/src/internal/authoring-metadata.js.map +1 -1
  47. package/src/internal/cms-config.js +0 -1
  48. package/src/internal/cms-config.js.map +1 -1
  49. package/src/internal/configuration.js +26 -17
  50. package/src/internal/configuration.js.map +1 -1
  51. package/src/internal/document-model.js +69 -21
  52. package/src/internal/document-model.js.map +1 -1
  53. package/src/internal/form-capabilities.js +12 -0
  54. package/src/internal/form-capabilities.js.map +1 -0
  55. package/src/internal/i18n.js +47 -0
  56. package/src/internal/i18n.js.map +1 -0
  57. package/src/internal/studio-app.js +2 -2
  58. package/src/internal/studio-app.js.map +1 -1
  59. package/src/{location-DtYv2aes.js → location-BTqdfIzX.js} +2 -3
  60. package/src/location-BTqdfIzX.js.map +1 -0
  61. package/src/{metadata-DE1Mc2td.js → metadata-BEZPWh-3.js} +3 -72
  62. package/src/metadata-BEZPWh-3.js.map +1 -0
  63. package/src/{models-C3witQBK.js → models-B4IoTmp7.js} +3 -2
  64. package/src/models-B4IoTmp7.js.map +1 -0
  65. package/src/{models-BkMgeaOL.js → models-Bah5B3bT.js} +205 -51
  66. package/src/models-Bah5B3bT.js.map +1 -0
  67. package/src/runtime/blocks.js +22 -9
  68. package/src/runtime/blocks.js.map +1 -1
  69. package/src/runtime/collaboration.js.map +1 -1
  70. package/src/runtime/delivery/DocumentRenderer.js +7 -4
  71. package/src/runtime/delivery/DocumentRenderer.js.map +1 -1
  72. package/src/runtime/delivery/blocks.js +3 -1
  73. package/src/runtime/delivery/blocks.js.map +1 -1
  74. package/src/runtime/delivery/context.js +1 -1
  75. package/src/runtime/delivery/document-page.js +12 -12
  76. package/src/runtime/delivery/document-page.js.map +1 -1
  77. package/src/runtime/delivery/document.js +4 -2
  78. package/src/runtime/delivery/document.js.map +1 -1
  79. package/src/runtime/delivery/error.js.map +1 -1
  80. package/src/runtime/delivery/plugin.js +28 -2
  81. package/src/runtime/delivery/plugin.js.map +1 -1
  82. package/src/runtime/delivery/types.d.ts +5 -0
  83. package/src/runtime/delivery/useCmsDocumentSeo.d.ts +59 -0
  84. package/src/runtime/delivery/useCmsDocumentSeo.js +101 -0
  85. package/src/runtime/delivery/useCmsDocumentSeo.js.map +1 -0
  86. package/src/runtime/delivery/useDocument.js +2 -2
  87. package/src/runtime/delivery/useDocument.js.map +1 -1
  88. package/src/runtime/delivery/useDocumentQuery.js +2 -2
  89. package/src/runtime/delivery/useDocumentQuery.js.map +1 -1
  90. package/src/runtime/forms/document.js +38 -0
  91. package/src/runtime/forms/document.js.map +1 -0
  92. package/src/runtime/forms/useCmsForm.js +190 -0
  93. package/src/runtime/forms/useCmsForm.js.map +1 -0
  94. package/src/runtime/i18n/translator.js +51 -0
  95. package/src/runtime/i18n/translator.js.map +1 -0
  96. package/src/runtime/i18n/useCmsI18n.d.ts +11 -0
  97. package/src/runtime/i18n/useCmsI18n.js +37 -0
  98. package/src/runtime/i18n/useCmsI18n.js.map +1 -0
  99. package/src/runtime/installation.js +1 -1
  100. package/src/runtime/plugin.js +3 -3
  101. package/src/runtime/plugin.js.map +1 -1
  102. package/src/runtime/preview/comark-document.js +0 -1
  103. package/src/runtime/preview/comark-document.js.map +1 -1
  104. package/src/runtime/preview/connection.js +1 -1
  105. package/src/runtime/preview/controller.js +10 -3
  106. package/src/runtime/preview/controller.js.map +1 -1
  107. package/src/runtime/preview/overlay.js.map +1 -1
  108. package/src/runtime/preview/plugin.client.js +59 -48
  109. package/src/runtime/preview/plugin.client.js.map +1 -1
  110. package/src/runtime/preview/protocol.js.map +1 -1
  111. package/src/runtime/preview/store.js +1 -1
  112. package/src/runtime/preview/targets.js +0 -1
  113. package/src/runtime/preview/targets.js.map +1 -1
  114. package/src/runtime/sitemap-entries.js +17 -0
  115. package/src/runtime/sitemap-entries.js.map +1 -0
  116. package/src/runtime/sitemap.js +24 -0
  117. package/src/runtime/sitemap.js.map +1 -0
  118. package/src/runtime/studio-app.js.map +1 -1
  119. package/src/runtime/studio-entry.js +2 -2
  120. package/src/runtime/studio-entry.js.map +1 -1
  121. package/src/runtime/studio-navigation.js +1 -1
  122. package/src/scalars-B2lgGUnj.js +26 -0
  123. package/src/scalars-B2lgGUnj.js.map +1 -0
  124. package/src/{store-CfFFx9Ua.js → store-b2CSXgMt.js} +12 -7
  125. package/src/store-b2CSXgMt.js.map +1 -0
  126. package/studio/{CreateDocumentDialog--L9lTfx6.js → CreateDocumentDialog-GGey1uBc.js} +44 -44
  127. package/studio/{collaboration-DUuu678R.js → collaboration-DcK2F6v9.js} +7 -6
  128. package/studio/{documentPlanning-BXX04Woe.js → documentPlanning-DRErYmBU.js} +7340 -6469
  129. package/studio/{editor-PexnXkJY.js → editor-Bzlh3zXt.js} +7965 -7955
  130. package/studio/host.css +1 -1
  131. package/studio/host.js +10416 -7981
  132. package/src/Configuration-DyKo0sLS.js.map +0 -1
  133. package/src/DocumentEngine-DYObwMDY.js.map +0 -1
  134. package/src/HttpPaths-BbS21Jy8.js.map +0 -1
  135. package/src/StudioHttp-jR2-bc01.js +0 -718
  136. package/src/StudioHttp-jR2-bc01.js.map +0 -1
  137. package/src/connection-CBTY-TzB.js.map +0 -1
  138. package/src/installation-DeuBiFRE.js.map +0 -1
  139. package/src/location-DtYv2aes.js.map +0 -1
  140. package/src/metadata-DE1Mc2td.js.map +0 -1
  141. package/src/models-BkMgeaOL.js.map +0 -1
  142. package/src/models-C3witQBK.js.map +0 -1
  143. package/src/store-CfFFx9Ua.js.map +0 -1
package/src/Module.js CHANGED
@@ -1,18 +1,25 @@
1
- import { c as STUDIO_API_PATH, d as STUDIO_COLLABORATION_PATH, f as STUDIO_HEALTH_PATH, l as STUDIO_APP_PATH, t as CMS_AUTHENTICATION_PATH, u as STUDIO_BASE_PATH } from "./HttpPaths-BbS21Jy8.js";
1
+ import { d as STUDIO_APP_PATH, f as STUDIO_BASE_PATH, m as STUDIO_HEALTH_PATH, p as STUDIO_COLLABORATION_PATH, t as CMS_AUTHENTICATION_PATH, u as STUDIO_API_PATH } from "./HttpPaths-c9nLZ9H2.js";
2
2
  import { registerStudioApp } from "./internal/studio-app.js";
3
3
  import { cmsAuthoringPlugin } from "./internal/authoring-compiler.js";
4
4
  import { registerAuthoringCatalog } from "./internal/authoring-catalog.js";
5
5
  import { loadCmsConfiguration } from "./internal/cms-config.js";
6
6
  import { compileCmsConfiguration } from "./internal/configuration.js";
7
- import { addComponent, addImports, addPlugin, addServerHandler, addServerPlugin, addServerTemplate, addVitePlugin, createResolver, defineNuxtModule, extendPages } from "@nuxt/kit";
8
7
  import { Effect, Layer } from "effect";
8
+ import { addComponent, addImports, addPlugin, addServerHandler, addServerPlugin, addServerTemplate, addTemplate, addTypeTemplate, addVitePlugin, createResolver, defineNuxtModule, extendPages } from "@nuxt/kit";
9
9
  import { NodeCrypto, NodeFileSystem, NodePath } from "@effect/platform-node-shared";
10
10
 
11
11
  //#region src/Module.ts
12
+ const CMS_SITEMAP_SOURCE_PATH = `${STUDIO_BASE_PATH}/sitemap`;
12
13
  const resolver = createResolver(import.meta.url);
13
14
  const nodeLayer = Layer.merge(NodeCrypto.layer, Layer.merge(NodeFileSystem.layer, NodePath.layer));
14
15
  const cmsNuxtModule = defineNuxtModule({
15
- moduleDependencies: { "@comark/nuxt": {} },
16
+ moduleDependencies: {
17
+ "@nuxtjs/robots": {},
18
+ "@nuxtjs/sitemap": {},
19
+ "@comark/nuxt": {},
20
+ "nuxt-schema-org": {},
21
+ "nuxt-seo-utils": {}
22
+ },
16
23
  meta: {
17
24
  compatibility: { nuxt: ">=4.5.0 <5.0.0" },
18
25
  name: "@phtngyn/cms"
@@ -24,10 +31,22 @@ const cmsNuxtModule = defineNuxtModule({
24
31
  const setupModule = Effect.fn("CmsNuxtModule.setup")(function* (nuxt) {
25
32
  addVitePlugin(cmsAuthoringPlugin());
26
33
  const authored = yield* loadCmsConfiguration(nuxt.options.rootDir);
27
- const initialSources = yield* Effect.promise(() => Promise.resolve(authored.configuration.initialSources?.() ?? []));
28
- const compiled = compileCmsConfiguration(authored.configuration, initialSources);
34
+ const compiled = compileCmsConfiguration(authored.configuration);
35
+ const i18n = compiled.i18n;
36
+ configureSitemap(nuxt.options);
37
+ const i18nTemplate = addTemplate({
38
+ filename: "cms/i18n.mjs",
39
+ write: true,
40
+ getContents: () => `export default JSON.parse(${JSON.stringify(JSON.stringify(i18n))})`
41
+ });
42
+ nuxt.options.alias["#cms/i18n"] = i18nTemplate.dst;
43
+ const messageKeys = [...new Set(Object.values(i18n.locales).flatMap((locale) => Object.keys(locale.messages)))];
44
+ addTypeTemplate({
45
+ filename: "types/cms-i18n.d.ts",
46
+ getContents: () => `import '@phtngyn/cms/I18n'\ndeclare module '@phtngyn/cms/I18n' { interface CmsI18nRegistry { messageKey: ${messageKeys.map((key) => JSON.stringify(key)).join(" | ") || "string"} } }`
47
+ });
29
48
  nuxt.options.watch.push(authored.path);
30
- const authoring = yield* registerAuthoringCatalog(nuxt, compiled.documents);
49
+ const authoring = yield* registerAuthoringCatalog(nuxt, compiled.documents, Object.fromEntries(Object.entries(authored.configuration.forms ?? {}).map(([name, form]) => [name, form.definition])));
31
50
  const installationPluginId = resolver.resolve("./runtime/plugin.virtual.mjs");
32
51
  const installationPluginTemplate = addServerTemplate({
33
52
  filename: installationPluginId,
@@ -35,13 +54,17 @@ const setupModule = Effect.fn("CmsNuxtModule.setup")(function* (nuxt) {
35
54
  `import { createInstallationPlugin } from ${JSON.stringify(resolver.resolve("./runtime/plugin"))}`,
36
55
  `import cmsConfiguration from ${JSON.stringify(authored.path)}`,
37
56
  `import authoring from ${JSON.stringify(authoring.dst)}`,
38
- `export default createInstallationPlugin(cmsConfiguration, authoring, ${JSON.stringify(compiled.initialSources)})`
57
+ `export default createInstallationPlugin(cmsConfiguration, authoring)`
39
58
  ].join("\n")
40
59
  });
41
60
  addServerHandler({
42
61
  handler: resolver.resolve("./runtime/api"),
43
62
  route: `${STUDIO_HEALTH_PATH}/**:path`
44
63
  });
64
+ addServerHandler({
65
+ handler: resolver.resolve("./runtime/sitemap"),
66
+ route: CMS_SITEMAP_SOURCE_PATH
67
+ });
45
68
  registerDeliveryUi(nuxt);
46
69
  yield* registerStudioApp(nuxt, resolver);
47
70
  configureNitro(nuxt);
@@ -59,6 +82,13 @@ const setupModule = Effect.fn("CmsNuxtModule.setup")(function* (nuxt) {
59
82
  route: `${STUDIO_API_PATH}/**:path`
60
83
  });
61
84
  });
85
+ function configureSitemap(options) {
86
+ if (options.sitemap === false) return;
87
+ const sitemap = options.sitemap ?? {};
88
+ const sources = sitemap.sources ?? [];
89
+ if (!sources.includes(CMS_SITEMAP_SOURCE_PATH)) sitemap.sources = [...sources, CMS_SITEMAP_SOURCE_PATH];
90
+ options.sitemap = sitemap;
91
+ }
62
92
  function registerDeliveryUi(nuxt) {
63
93
  addPlugin(resolver.resolve("./runtime/blocks"));
64
94
  nuxt.options.css.push(resolver.resolve("./runtime/preview/preview.css"));
@@ -80,13 +110,28 @@ function registerDeliveryUi(nuxt) {
80
110
  });
81
111
  addPlugin(resolver.resolve("./runtime/delivery/plugin"));
82
112
  addPlugin(resolver.resolve("./runtime/preview/plugin.client"));
83
- addImports([{
84
- name: "useDocument",
85
- from: resolver.resolve("./runtime/delivery/useDocument")
86
- }, {
87
- name: "useDocumentQuery",
88
- from: resolver.resolve("./runtime/delivery/useDocumentQuery")
89
- }]);
113
+ addImports([
114
+ {
115
+ name: "useCmsI18n",
116
+ from: resolver.resolve("./runtime/i18n/useCmsI18n")
117
+ },
118
+ {
119
+ name: "useCmsForm",
120
+ from: resolver.resolve("./runtime/forms/useCmsForm")
121
+ },
122
+ {
123
+ name: "useCmsDocumentSeo",
124
+ from: resolver.resolve("./runtime/delivery/useCmsDocumentSeo")
125
+ },
126
+ {
127
+ name: "useDocument",
128
+ from: resolver.resolve("./runtime/delivery/useDocument")
129
+ },
130
+ {
131
+ name: "useDocumentQuery",
132
+ from: resolver.resolve("./runtime/delivery/useDocumentQuery")
133
+ }
134
+ ]);
90
135
  extendPages((pages) => {
91
136
  pages.push({
92
137
  file: resolver.resolve("./runtime/delivery/document"),
package/src/Module.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Module.js","names":[],"sources":["../../../src/Module.ts"],"sourcesContent":["import type { HookResult, Nuxt } from '@nuxt/schema'\nimport type { NitroConfig } from 'nitropack/types'\nimport { registerStudioApp } from './internal/studio-app'\nimport { registerAuthoringCatalog } from './internal/authoring-catalog'\nimport { NodeCrypto, NodeFileSystem, NodePath } from '@effect/platform-node-shared'\nimport {\n CMS_AUTHENTICATION_PATH,\n STUDIO_APP_PATH,\n STUDIO_BASE_PATH,\n STUDIO_API_PATH,\n STUDIO_HEALTH_PATH,\n STUDIO_COLLABORATION_PATH,\n} from '@internal/protocol/HttpPaths'\nimport {\n addComponent,\n addImports,\n addPlugin,\n addServerHandler,\n addServerPlugin,\n addServerTemplate,\n addVitePlugin,\n createResolver,\n defineNuxtModule,\n extendPages,\n} from '@nuxt/kit'\nimport { Effect, Layer } from 'effect'\nimport { loadCmsConfiguration } from './internal/cms-config'\nimport { compileCmsConfiguration } from './internal/configuration'\nimport { cmsAuthoringPlugin } from './internal/authoring-compiler'\n\ndeclare module '@nuxt/schema' {\n interface NuxtHooks {\n 'nitro:config': (nitroConfig: NitroConfig) => HookResult\n }\n}\n\nconst resolver = createResolver(import.meta.url)\nconst nodeLayer = Layer.merge(NodeCrypto.layer, Layer.merge(NodeFileSystem.layer, NodePath.layer))\n\nconst cmsNuxtModule = defineNuxtModule({\n moduleDependencies: {\n '@comark/nuxt': {},\n },\n meta: {\n compatibility: { nuxt: '>=4.5.0 <5.0.0' },\n name: '@phtngyn/cms',\n },\n setup(_options, nuxt) {\n return Effect.runPromise(setupModule(nuxt).pipe(Effect.provide(nodeLayer)))\n },\n})\n\nexport default cmsNuxtModule\n\nconst setupModule = Effect.fn('CmsNuxtModule.setup')(function* (nuxt: Nuxt) {\n addVitePlugin(cmsAuthoringPlugin())\n const authored = yield* loadCmsConfiguration(nuxt.options.rootDir)\n const initialSources = yield* Effect.promise(() => Promise.resolve(authored.configuration.initialSources?.() ?? []))\n const compiled = compileCmsConfiguration(authored.configuration, initialSources)\n nuxt.options.watch.push(authored.path)\n const authoring = yield* registerAuthoringCatalog(nuxt, compiled.documents)\n const installationPluginId = resolver.resolve('./runtime/plugin.virtual.mjs')\n const installationPluginTemplate = addServerTemplate({\n filename: installationPluginId,\n getContents: () =>\n [\n `import { createInstallationPlugin } from ${JSON.stringify(resolver.resolve('./runtime/plugin'))}`,\n `import cmsConfiguration from ${JSON.stringify(authored.path)}`,\n `import authoring from ${JSON.stringify(authoring.dst)}`,\n `export default createInstallationPlugin(cmsConfiguration, authoring, ${JSON.stringify(compiled.initialSources)})`,\n ].join('\\n'),\n })\n addServerHandler({ handler: resolver.resolve('./runtime/api'), route: `${STUDIO_HEALTH_PATH}/**:path` })\n registerDeliveryUi(nuxt)\n yield* registerStudioApp(nuxt, resolver)\n configureNitro(nuxt)\n addServerPlugin(installationPluginTemplate.filename)\n addServerHandler({\n handler: resolver.resolve('./runtime/api'),\n route: `${CMS_AUTHENTICATION_PATH}/**:path`,\n })\n addServerHandler({\n handler: resolver.resolve('./runtime/collaboration'),\n route: STUDIO_COLLABORATION_PATH,\n })\n addServerHandler({\n handler: resolver.resolve('./runtime/api'),\n route: `${STUDIO_API_PATH}/**:path`,\n })\n})\n\nfunction registerDeliveryUi(nuxt: Nuxt): void {\n addPlugin(resolver.resolve('./runtime/blocks'))\n nuxt.options.css.push(resolver.resolve('./runtime/preview/preview.css'))\n addComponent({ name: 'DocumentField', filePath: resolver.resolve('./runtime/delivery/DocumentField') })\n addComponent({ name: 'DocumentRenderer', filePath: resolver.resolve('./runtime/delivery/DocumentRenderer') })\n addComponent({ name: 'DocumentScope', filePath: resolver.resolve('./runtime/delivery/DocumentScope') })\n addComponent({\n name: 'CmsStudioPreviewMarker',\n filePath: resolver.resolve('./runtime/preview/CmsStudioPreviewMarker'),\n })\n addPlugin(resolver.resolve('./runtime/delivery/plugin'))\n addPlugin(resolver.resolve('./runtime/preview/plugin.client'))\n addImports([\n { name: 'useDocument', from: resolver.resolve('./runtime/delivery/useDocument') },\n { name: 'useDocumentQuery', from: resolver.resolve('./runtime/delivery/useDocumentQuery') },\n ])\n extendPages((pages) => {\n pages.push({\n file: resolver.resolve('./runtime/delivery/document'),\n name: 'cms-document-page',\n path: '/:contentPath(.*)*',\n })\n })\n}\n\nfunction configureNitro(nuxt: Nuxt): void {\n nuxt.hook('nitro:config', (config: NitroConfig) => {\n config.experimental ||= {}\n config.experimental.websocket = true\n config.routeRules ||= {}\n const studioRules = { ssr: false, headers: { 'cache-control': 'no-store' } }\n config.routeRules[`${STUDIO_APP_PATH}/**`] = studioRules\n config.routeRules[STUDIO_APP_PATH] = studioRules\n\n config.routeRules[STUDIO_BASE_PATH] = { redirect: { statusCode: 302, to: STUDIO_APP_PATH } }\n })\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"Module.js","names":[],"sources":["../../../src/Module.ts"],"sourcesContent":["import type { HookResult, Nuxt } from '@nuxt/schema'\nimport type { NitroConfig } from 'nitropack/types'\nimport { registerStudioApp } from './internal/studio-app'\nimport { registerAuthoringCatalog } from './internal/authoring-catalog'\nimport { NodeCrypto, NodeFileSystem, NodePath } from '@effect/platform-node-shared'\nimport {\n CMS_AUTHENTICATION_PATH,\n STUDIO_APP_PATH,\n STUDIO_BASE_PATH,\n STUDIO_API_PATH,\n STUDIO_HEALTH_PATH,\n STUDIO_COLLABORATION_PATH,\n} from '@internal/protocol/HttpPaths'\nimport {\n addTemplate,\n addTypeTemplate,\n addComponent,\n addImports,\n addPlugin,\n addServerHandler,\n addServerPlugin,\n addServerTemplate,\n addVitePlugin,\n createResolver,\n defineNuxtModule,\n extendPages,\n} from '@nuxt/kit'\nimport { Effect, Layer } from 'effect'\nimport { loadCmsConfiguration } from './internal/cms-config'\nimport { compileCmsConfiguration } from './internal/configuration'\nimport { cmsAuthoringPlugin } from './internal/authoring-compiler'\n\nconst CMS_SITEMAP_SOURCE_PATH = `${STUDIO_BASE_PATH}/sitemap`\n\ndeclare module '@nuxt/schema' {\n interface NuxtHooks {\n 'nitro:config': (nitroConfig: NitroConfig) => HookResult\n }\n}\n\nconst resolver = createResolver(import.meta.url)\n\nconst nodeLayer = Layer.merge(NodeCrypto.layer, Layer.merge(NodeFileSystem.layer, NodePath.layer))\n\nconst cmsNuxtModule = defineNuxtModule({\n moduleDependencies: {\n '@nuxtjs/robots': {},\n '@nuxtjs/sitemap': {},\n '@comark/nuxt': {},\n 'nuxt-schema-org': {},\n 'nuxt-seo-utils': {},\n },\n meta: {\n compatibility: { nuxt: '>=4.5.0 <5.0.0' },\n name: '@phtngyn/cms',\n },\n setup(_options, nuxt) {\n return Effect.runPromise(setupModule(nuxt).pipe(Effect.provide(nodeLayer)))\n },\n})\n\nexport default cmsNuxtModule\n\nconst setupModule = Effect.fn('CmsNuxtModule.setup')(function* (nuxt: Nuxt) {\n addVitePlugin(cmsAuthoringPlugin())\n const authored = yield* loadCmsConfiguration(nuxt.options.rootDir)\n const compiled = compileCmsConfiguration(authored.configuration)\n const i18n = compiled.i18n\n\n configureSitemap(nuxt.options)\n\n const i18nTemplate = addTemplate({\n filename: 'cms/i18n.mjs',\n write: true,\n getContents: () => `export default JSON.parse(${JSON.stringify(JSON.stringify(i18n))})`,\n })\n\n nuxt.options.alias['#cms/i18n'] = i18nTemplate.dst\n const messageKeys = [...new Set(Object.values(i18n.locales).flatMap((locale) => Object.keys(locale.messages)))]\n addTypeTemplate({\n filename: 'types/cms-i18n.d.ts',\n getContents: () =>\n `import '@phtngyn/cms/I18n'\\ndeclare module '@phtngyn/cms/I18n' { interface CmsI18nRegistry { messageKey: ${messageKeys.map((key) => JSON.stringify(key)).join(' | ') || 'string'} } }`,\n })\n nuxt.options.watch.push(authored.path)\n\n const authoring = yield* registerAuthoringCatalog(\n nuxt,\n compiled.documents,\n Object.fromEntries(\n Object.entries(authored.configuration.forms ?? {}).map(([name, form]) => [name, form.definition]),\n ),\n )\n\n const installationPluginId = resolver.resolve('./runtime/plugin.virtual.mjs')\n\n const installationPluginTemplate = addServerTemplate({\n filename: installationPluginId,\n getContents: () =>\n [\n `import { createInstallationPlugin } from ${JSON.stringify(resolver.resolve('./runtime/plugin'))}`,\n `import cmsConfiguration from ${JSON.stringify(authored.path)}`,\n `import authoring from ${JSON.stringify(authoring.dst)}`,\n `export default createInstallationPlugin(cmsConfiguration, authoring)`,\n ].join('\\n'),\n })\n\n addServerHandler({ handler: resolver.resolve('./runtime/api'), route: `${STUDIO_HEALTH_PATH}/**:path` })\n addServerHandler({ handler: resolver.resolve('./runtime/sitemap'), route: CMS_SITEMAP_SOURCE_PATH })\n registerDeliveryUi(nuxt)\n yield* registerStudioApp(nuxt, resolver)\n configureNitro(nuxt)\n addServerPlugin(installationPluginTemplate.filename)\n addServerHandler({\n handler: resolver.resolve('./runtime/api'),\n route: `${CMS_AUTHENTICATION_PATH}/**:path`,\n })\n addServerHandler({\n handler: resolver.resolve('./runtime/collaboration'),\n route: STUDIO_COLLABORATION_PATH,\n })\n addServerHandler({\n handler: resolver.resolve('./runtime/api'),\n route: `${STUDIO_API_PATH}/**:path`,\n })\n})\n\ninterface CmsSitemapConfiguration {\n sources?: Array<unknown>\n}\n\ninterface CmsNuxtSitemapOptions {\n readonly modules?: unknown\n sitemap?: false | CmsSitemapConfiguration\n}\n\nfunction configureSitemap(options: CmsNuxtSitemapOptions): void {\n if (options.sitemap === false) return\n\n const sitemap = options.sitemap ?? {}\n const sources = sitemap.sources ?? []\n\n if (!sources.includes(CMS_SITEMAP_SOURCE_PATH)) sitemap.sources = [...sources, CMS_SITEMAP_SOURCE_PATH]\n\n options.sitemap = sitemap\n}\n\nfunction registerDeliveryUi(nuxt: Nuxt): void {\n addPlugin(resolver.resolve('./runtime/blocks'))\n nuxt.options.css.push(resolver.resolve('./runtime/preview/preview.css'))\n addComponent({ name: 'DocumentField', filePath: resolver.resolve('./runtime/delivery/DocumentField') })\n addComponent({ name: 'DocumentRenderer', filePath: resolver.resolve('./runtime/delivery/DocumentRenderer') })\n addComponent({ name: 'DocumentScope', filePath: resolver.resolve('./runtime/delivery/DocumentScope') })\n addComponent({\n name: 'CmsStudioPreviewMarker',\n filePath: resolver.resolve('./runtime/preview/CmsStudioPreviewMarker'),\n })\n addPlugin(resolver.resolve('./runtime/delivery/plugin'))\n addPlugin(resolver.resolve('./runtime/preview/plugin.client'))\n addImports([\n { name: 'useCmsI18n', from: resolver.resolve('./runtime/i18n/useCmsI18n') },\n { name: 'useCmsForm', from: resolver.resolve('./runtime/forms/useCmsForm') },\n { name: 'useCmsDocumentSeo', from: resolver.resolve('./runtime/delivery/useCmsDocumentSeo') },\n { name: 'useDocument', from: resolver.resolve('./runtime/delivery/useDocument') },\n { name: 'useDocumentQuery', from: resolver.resolve('./runtime/delivery/useDocumentQuery') },\n ])\n extendPages((pages) => {\n pages.push({\n file: resolver.resolve('./runtime/delivery/document'),\n name: 'cms-document-page',\n path: '/:contentPath(.*)*',\n })\n })\n}\n\nfunction configureNitro(nuxt: Nuxt): void {\n nuxt.hook('nitro:config', (config: NitroConfig) => {\n config.experimental ||= {}\n config.experimental.websocket = true\n config.routeRules ||= {}\n const studioRules = { ssr: false, headers: { 'cache-control': 'no-store' } }\n config.routeRules[`${STUDIO_APP_PATH}/**`] = studioRules\n config.routeRules[STUDIO_APP_PATH] = studioRules\n\n config.routeRules[STUDIO_BASE_PATH] = { redirect: { statusCode: 302, to: STUDIO_APP_PATH } }\n })\n}\n"],"mappings":"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"}