@elytracms/core 0.0.7 → 0.0.9

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 (199) hide show
  1. package/dist/clipboard/build.js.map +1 -1
  2. package/dist/clipboard/clipboard.js.map +1 -1
  3. package/dist/clipboard/fragment.js.map +1 -1
  4. package/dist/clipboard/html.js.map +1 -1
  5. package/dist/clipboard/index.js.map +1 -1
  6. package/dist/clipboard/references.js.map +1 -1
  7. package/dist/clipboard/serialize.js.map +1 -1
  8. package/dist/cms-core/collection-shape.d.ts +43 -0
  9. package/dist/cms-core/collection-shape.js +129 -0
  10. package/dist/cms-core/collection-shape.js.map +1 -0
  11. package/dist/cms-core/collections.d.ts +5 -6
  12. package/dist/cms-core/collections.js +26 -13
  13. package/dist/cms-core/collections.js.map +1 -1
  14. package/dist/cms-core/documents.d.ts +1 -0
  15. package/dist/cms-core/documents.js +10 -0
  16. package/dist/cms-core/documents.js.map +1 -1
  17. package/dist/cms-core/envelopes.js.map +1 -1
  18. package/dist/cms-core/fields.js.map +1 -1
  19. package/dist/cms-core/fixtures.js.map +1 -1
  20. package/dist/cms-core/hierarchy.js.map +1 -1
  21. package/dist/cms-core/index.d.ts +2 -0
  22. package/dist/cms-core/index.js +2 -0
  23. package/dist/cms-core/index.js.map +1 -1
  24. package/dist/cms-core/infer.js.map +1 -1
  25. package/dist/cms-core/issues.d.ts +10 -0
  26. package/dist/cms-core/issues.js +13 -0
  27. package/dist/cms-core/issues.js.map +1 -1
  28. package/dist/cms-core/json-schema.js.map +1 -1
  29. package/dist/cms-core/localization.js.map +1 -1
  30. package/dist/cms-core/nesting-depth.d.ts +44 -0
  31. package/dist/cms-core/nesting-depth.js +50 -0
  32. package/dist/cms-core/nesting-depth.js.map +1 -0
  33. package/dist/cms-core/routes.js.map +1 -1
  34. package/dist/cms-core/self-type.js.map +1 -1
  35. package/dist/cms-core/url-for-document.js.map +1 -1
  36. package/dist/cms-core/validate-document.d.ts +8 -0
  37. package/dist/cms-core/validate-document.js +35 -0
  38. package/dist/cms-core/validate-document.js.map +1 -1
  39. package/dist/cms-core/versions.d.ts +1 -0
  40. package/dist/cms-core/versions.js.map +1 -1
  41. package/dist/collaboration/approval.js.map +1 -1
  42. package/dist/collaboration/collaboration.js.map +1 -1
  43. package/dist/collaboration/comments.js.map +1 -1
  44. package/dist/collaboration/core.js.map +1 -1
  45. package/dist/collaboration/index.js.map +1 -1
  46. package/dist/collaboration/presence.js.map +1 -1
  47. package/dist/collaboration/publishing.js.map +1 -1
  48. package/dist/collaboration/versions.js.map +1 -1
  49. package/dist/component-registry/index.js.map +1 -1
  50. package/dist/component-registry/issues.js.map +1 -1
  51. package/dist/component-registry/manifest.js.map +1 -1
  52. package/dist/component-registry/registry.js.map +1 -1
  53. package/dist/content/__fixtures__/filterable-collections.js.map +1 -1
  54. package/dist/content/__fixtures__/sample-accessor-types.js.map +1 -1
  55. package/dist/content/__fixtures__/sample-delivery-types.js.map +1 -1
  56. package/dist/content/assets.js.map +1 -1
  57. package/dist/content/binding-sources.js.map +1 -1
  58. package/dist/content/client.js.map +1 -1
  59. package/dist/content/codegen.js.map +1 -1
  60. package/dist/content/context.js.map +1 -1
  61. package/dist/content/cursor.js.map +1 -1
  62. package/dist/content/index.js.map +1 -1
  63. package/dist/content/locale.js.map +1 -1
  64. package/dist/content/perspective.js.map +1 -1
  65. package/dist/content/populate.js.map +1 -1
  66. package/dist/content/query.js.map +1 -1
  67. package/dist/content/raw.js.map +1 -1
  68. package/dist/content/resolve.js.map +1 -1
  69. package/dist/content/serialize.js.map +1 -1
  70. package/dist/content/tags.js.map +1 -1
  71. package/dist/data-binding/fixtures.js.map +1 -1
  72. package/dist/data-binding/index.js.map +1 -1
  73. package/dist/data-binding/issues.js.map +1 -1
  74. package/dist/data-binding/resolve.js.map +1 -1
  75. package/dist/data-binding/sample.js.map +1 -1
  76. package/dist/data-binding/sources.js.map +1 -1
  77. package/dist/data-binding/tokens.js.map +1 -1
  78. package/dist/design-tokens/css.js.map +1 -1
  79. package/dist/design-tokens/index.js.map +1 -1
  80. package/dist/design-tokens/style-guide.js.map +1 -1
  81. package/dist/design-tokens/tokens.js.map +1 -1
  82. package/dist/export-sync/builder-source.d.ts +1 -0
  83. package/dist/export-sync/builder-source.js.map +1 -1
  84. package/dist/export-sync/check.js.map +1 -1
  85. package/dist/export-sync/cli.js.map +1 -1
  86. package/dist/export-sync/core.js.map +1 -1
  87. package/dist/export-sync/eject.js.map +1 -1
  88. package/dist/export-sync/fixtures.js.map +1 -1
  89. package/dist/export-sync/generate.js.map +1 -1
  90. package/dist/export-sync/index.js.map +1 -1
  91. package/dist/export-sync/init.js.map +1 -1
  92. package/dist/export-sync/manifest-host.js.map +1 -1
  93. package/dist/export-sync/node.js.map +1 -1
  94. package/dist/export-sync/push.js.map +1 -1
  95. package/dist/export-sync/registry-sync-client.js.map +1 -1
  96. package/dist/export-sync/sync.js.map +1 -1
  97. package/dist/export-sync/typegen.js.map +1 -1
  98. package/dist/export-sync/validate.js.map +1 -1
  99. package/dist/export-sync/watch.js.map +1 -1
  100. package/dist/operations/assets.js.map +1 -1
  101. package/dist/operations/authorization.js.map +1 -1
  102. package/dist/operations/changesets.js.map +1 -1
  103. package/dist/operations/client.js.map +1 -1
  104. package/dist/operations/core.js.map +1 -1
  105. package/dist/operations/documents.d.ts +21 -0
  106. package/dist/operations/documents.js.map +1 -1
  107. package/dist/operations/graph.js.map +1 -1
  108. package/dist/operations/index.js.map +1 -1
  109. package/dist/operations/members.js.map +1 -1
  110. package/dist/operations/publishing.js.map +1 -1
  111. package/dist/operations/references.js.map +1 -1
  112. package/dist/operations/schema.d.ts +18 -0
  113. package/dist/operations/schema.js.map +1 -1
  114. package/dist/operations/tokens.js.map +1 -1
  115. package/dist/persistence/adapter.js.map +1 -1
  116. package/dist/persistence/assets.js.map +1 -1
  117. package/dist/persistence/backend-validation.js.map +1 -1
  118. package/dist/persistence/cli-tokens.js.map +1 -1
  119. package/dist/persistence/cms.d.ts +3 -0
  120. package/dist/persistence/cms.js.map +1 -1
  121. package/dist/persistence/contract-scenarios.js.map +1 -1
  122. package/dist/persistence/core.js.map +1 -1
  123. package/dist/persistence/graph.js.map +1 -1
  124. package/dist/persistence/index.js.map +1 -1
  125. package/dist/persistence/members.js.map +1 -1
  126. package/dist/persistence/publishing.js.map +1 -1
  127. package/dist/persistence/reference-extraction.js.map +1 -1
  128. package/dist/persistence/reference-indexing.js.map +1 -1
  129. package/dist/persistence/references.js.map +1 -1
  130. package/dist/persistence/seed.js.map +1 -1
  131. package/dist/persistence/self-maintaining-adapter.js.map +1 -1
  132. package/dist/plugins/asset-storage.js.map +1 -1
  133. package/dist/plugins/component-package.js.map +1 -1
  134. package/dist/plugins/data-sources.js.map +1 -1
  135. package/dist/plugins/examples.js.map +1 -1
  136. package/dist/plugins/export-targets.js.map +1 -1
  137. package/dist/plugins/field-types.js.map +1 -1
  138. package/dist/plugins/hooks.js.map +1 -1
  139. package/dist/plugins/index.js.map +1 -1
  140. package/dist/plugins/marketplace.js.map +1 -1
  141. package/dist/plugins/plugin.js.map +1 -1
  142. package/dist/plugins/templates.js.map +1 -1
  143. package/dist/project-graph/binding.js.map +1 -1
  144. package/dist/project-graph/container.js.map +1 -1
  145. package/dist/project-graph/edit.js.map +1 -1
  146. package/dist/project-graph/fixtures.js.map +1 -1
  147. package/dist/project-graph/ids.js.map +1 -1
  148. package/dist/project-graph/index.js.map +1 -1
  149. package/dist/project-graph/issues.js.map +1 -1
  150. package/dist/project-graph/json.js.map +1 -1
  151. package/dist/project-graph/node.js.map +1 -1
  152. package/dist/project-graph/normalize.js.map +1 -1
  153. package/dist/project-graph/serialize.js.map +1 -1
  154. package/dist/project-graph/structure.js.map +1 -1
  155. package/dist/project-graph/validate.js.map +1 -1
  156. package/dist/rich-text/adapter.js.map +1 -1
  157. package/dist/rich-text/dom-editor.js.map +1 -1
  158. package/dist/rich-text/embed.js.map +1 -1
  159. package/dist/rich-text/fixtures.js.map +1 -1
  160. package/dist/rich-text/html.js.map +1 -1
  161. package/dist/rich-text/index.js.map +1 -1
  162. package/dist/rich-text/markdown.js.map +1 -1
  163. package/dist/rich-text/portable-text.js.map +1 -1
  164. package/dist/rich-text/registry.js.map +1 -1
  165. package/dist/rich-text/render.js.map +1 -1
  166. package/dist/rich-text/schema.js.map +1 -1
  167. package/dist/rich-text/test-support.js.map +1 -1
  168. package/dist/runtime-renderer/client.js.map +1 -1
  169. package/dist/runtime-renderer/condition.js.map +1 -1
  170. package/dist/runtime-renderer/content-client.js.map +1 -1
  171. package/dist/runtime-renderer/context.js.map +1 -1
  172. package/dist/runtime-renderer/fallback.js.map +1 -1
  173. package/dist/runtime-renderer/index.js.map +1 -1
  174. package/dist/runtime-renderer/primitives.js.map +1 -1
  175. package/dist/runtime-renderer/render.d.ts +14 -1
  176. package/dist/runtime-renderer/render.js +126 -126
  177. package/dist/runtime-renderer/render.js.map +1 -1
  178. package/dist/runtime-renderer/rich-text.js.map +1 -1
  179. package/dist/starter-kits/index.js.map +1 -1
  180. package/dist/starter-kits/instantiate.js.map +1 -1
  181. package/dist/starter-kits/kit.js.map +1 -1
  182. package/dist/starter-kits/kits.js.map +1 -1
  183. package/dist/starter-kits/manifests.js.map +1 -1
  184. package/dist/starter-kits/upgrade.js.map +1 -1
  185. package/dist/starter-kits/validate.js.map +1 -1
  186. package/dist/studio-core/context.js.map +1 -1
  187. package/dist/studio-core/errors.js.map +1 -1
  188. package/dist/studio-core/fixtures.js.map +1 -1
  189. package/dist/studio-core/ids.js.map +1 -1
  190. package/dist/studio-core/index.js.map +1 -1
  191. package/dist/studio-core/issues.js.map +1 -1
  192. package/dist/studio-core/metadata.js.map +1 -1
  193. package/dist/studio-core/repository.js.map +1 -1
  194. package/dist/studio-core/sections.d.ts +1 -1
  195. package/dist/studio-core/sections.js.map +1 -1
  196. package/dist/studio-core/validate.js.map +1 -1
  197. package/dist/studio-core/workspace-config.d.ts +4 -0
  198. package/dist/studio-core/workspace-config.js.map +1 -1
  199. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"kits.js","sourceRoot":"","sources":["../../src/starter-kits/kits.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"kits.js","sourceRoot":"","sources":["../../src/starter-kits/kits.ts"],"names":[],"mappings":"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","sourcesContent":["import { allSectionsAvailable } from '@elytracms/core/studio-core'\nimport type { ProjectSettings } from '@elytracms/core/studio-core'\nimport { PROJECT_GRAPH_SCHEMA_VERSION } from '@elytracms/core/project-graph'\nimport type { ComponentNode, ProjectGraph, PropValue } from '@elytracms/core/project-graph'\nimport { pageCollection } from '@elytracms/core/cms-core'\nimport type { CmsDocument, CollectionDef, LocaleConfig } from '@elytracms/core/cms-core'\nimport type { TokenOverrides } from '@elytracms/core/design-tokens'\nimport type { StarterKit } from './kit'\nimport { BASE_MANIFESTS, PROJECT_MANIFESTS } from './manifests'\n\n/**\n * The bundled starter kits (EC-114–118). Each is a complete, valid, deterministic project: a page\n * graph (base primitives + seeded project components), CMS schemas + seed content, project\n * settings, and a brand token palette. Used as the seed source for \"start from a kit\".\n */\n\n// --- Node helpers -----------------------------------------------------------\n\nconst s = (value: unknown): PropValue => ({ kind: 'static', value: value as never })\n\nfunction node(id: string, componentId: string, props?: Record<string, PropValue>, slots?: Record<string, ComponentNode[]>): ComponentNode {\n return { id, componentId, ...(props ? { props } : {}), ...(slots ? { slots } : {}) }\n}\n\n// EC-190: Stack/Grid `gap` is now a `select` over spacing-token *names* (strings like '4'),\n// so seed graphs carry the token name, not a legacy number. `columns`/`level` stay numeric.\nconst stack = (id: string, gap: number, children: ComponentNode[]) =>\n node(id, 'base.primitives.Stack', { gap: s(String(gap)) }, { children })\nconst grid = (id: string, columns: number, children: ComponentNode[]) =>\n node(id, 'base.primitives.Grid', { columns: s(columns), gap: s('4') }, { children })\nconst heading = (id: string, text: string, level = 2) =>\n node(id, 'base.primitives.Heading', { text: s(text), level: s(level) })\nconst text = (id: string, value: string) => node(id, 'base.primitives.Text', { value: s(value) })\n\nconst hero = (id: string, props: Record<string, string>) =>\n node(id, 'project.MarketingHero', Object.fromEntries(Object.entries(props).map(([k, v]) => [k, s(v)])))\nconst feature = (id: string, title: string, body: string, tone: 'default' | 'accent' = 'default') =>\n node(id, 'project.FeatureCard', { title: s(title), body: s(body), tone: s(tone) })\n\nconst layoutRoot = (id: string) => node(id, 'base.primitives.Container', undefined, { outlet: [] })\n\nfunction settings(locales: string[]): ProjectSettings {\n return {\n locales,\n defaultLocale: locales[0]!,\n environments: [\n { key: 'production', label: 'Production' },\n { key: 'preview', label: 'Preview' },\n ],\n exportTarget: 'next-app-router',\n sectionAvailability: allSectionsAvailable(),\n }\n}\n\n/** A layouts-only project graph (EC-187). The home page lives in a `page` document. */\nfunction graph(id: string, name: string): ProjectGraph {\n return {\n id,\n schemaVersion: PROJECT_GRAPH_SCHEMA_VERSION,\n metadata: { name },\n layouts: [{ id: 'layout.main', name: 'Main', root: layoutRoot('n-layout-root') }],\n }\n}\n\n/**\n * The kit's home page as a `page`-collection document (EC-187): its `body` is\n * the composition that used to be the graph page root; `layoutId` selects the\n * graph layout that wraps it at delivery.\n */\nfunction pageHome(homeRoot: ComponentNode): CmsDocument {\n return {\n collection: 'page',\n id: 'home',\n values: {\n name: 'Home',\n layoutId: 'layout.main',\n // The kit's home composition (the root's children become the page body).\n body: homeRoot.slots?.['children'] ?? [homeRoot],\n },\n defaultLocale: 'en',\n }\n}\n\n// --- Shared CMS schemas -----------------------------------------------------\n\n/** A self-contained blog `post` collection — no required relations, so seeds validate alone. */\nfunction postCollection(): CollectionDef {\n return {\n id: 'post',\n kind: 'document',\n localized: true,\n titleField: 'title',\n fields: [\n // `filterable` (EC-143) mirrors the canonical sample-model convention:\n // scalar query fields are declared, `title`/rich text stay undeclared.\n { type: 'text', name: 'title', localized: true, validation: { required: true, min: 1, max: 120 } },\n { type: 'text', name: 'slug', filterable: true, validation: { required: true, unique: true, pattern: '^[a-z0-9-]+$' } },\n { type: 'richText', name: 'body', localized: true },\n { type: 'text', name: 'excerpt', localized: true },\n { type: 'date', name: 'publishedAt', filterable: true },\n { type: 'select', name: 'status', filterable: true, options: [{ value: 'draft' }, { value: 'published' }] },\n ],\n form: { label: 'Posts', labelSingular: 'Post' },\n }\n}\n\nfunction post(id: string, slug: string, en: { title: string; excerpt: string }, de: { title: string; excerpt: string }): CmsDocument {\n return {\n collection: 'post',\n id,\n values: { slug, publishedAt: '2026-01-02T00:00:00.000Z', status: 'published' },\n localized: {\n en: { title: en.title, excerpt: en.excerpt, body: `<p>${en.excerpt}</p>` },\n de: { title: de.title, excerpt: de.excerpt, body: `<p>${de.excerpt}</p>` },\n },\n defaultLocale: 'en',\n }\n}\n\nconst en: LocaleConfig = { default: 'en', locales: ['en', 'de'] }\n\n// --- Kit 1: Aurora Marketing ------------------------------------------------\n\nconst marketingHome = stack('n-home', 8, [\n hero('n-hero', {\n eyebrow: 'New',\n heading: 'Build code-first websites',\n subheading: 'One canonical graph powers editing, content, AI and export.',\n ctaLabel: 'Get started',\n align: 'center',\n }),\n grid('n-features', 3, [\n feature('n-f1', 'Code-first', 'Every change is real, diffable code.'),\n feature('n-f2', 'AI-assisted', 'Inspectable, reversible generation.', 'accent'),\n feature('n-f3', 'Native export', 'Ships a real Next.js App Router app.'),\n ]),\n node('n-pricing', 'project.PricingCallout', {\n plan: s('Pro'),\n price: s('$29'),\n period: s('mo'),\n featured: s(true),\n }),\n])\n\nexport const auroraMarketingKit: StarterKit = {\n id: 'kit.aurora-marketing',\n name: 'Aurora Marketing',\n version: '1.0.0',\n description: 'A marketing landing page with a hero, feature grid, pricing, and a blog.',\n category: 'marketing',\n settings: settings(['en', 'de']),\n localeConfig: en,\n graph: graph('proj-aurora-marketing', 'Aurora Marketing'),\n collections: [pageCollection, postCollection()],\n documents: [\n pageHome(marketingHome),\n post('post-hello', 'hello-world', { title: 'Hello World', excerpt: 'Why we built a code-first builder.' }, { title: 'Hallo Welt', excerpt: 'Warum wir einen Code-first-Builder gebaut haben.' }),\n post('post-graph', 'one-canonical-graph', { title: 'One Canonical Graph', excerpt: 'How one model powers everything.' }, { title: 'Ein kanonischer Graph', excerpt: 'Wie ein Modell alles antreibt.' }),\n ],\n manifests: [...BASE_MANIFESTS, ...PROJECT_MANIFESTS],\n tokenOverrides: {},\n}\n\n// --- Kit 2: Northwind Docs (a different palette) ----------------------------\n\nconst docsHome = stack('n-home', 8, [\n heading('n-title', 'Northwind Documentation', 1),\n text('n-intro', 'Guides, references, and tutorials for the Northwind platform.'),\n grid('n-cards', 2, [\n feature('n-d1', 'Getting started', 'Install, configure, and ship in minutes.'),\n feature('n-d2', 'API reference', 'Every endpoint, typed and documented.', 'accent'),\n ]),\n])\n\n/** A teal brand palette override for the docs starter (EC-117). */\nconst tealOverrides: TokenOverrides = {\n primary: { light: 'oklch(0.6 0.12 195)', dark: 'oklch(0.72 0.12 195)' },\n ring: { light: 'oklch(0.6 0.12 195)', dark: 'oklch(0.72 0.12 195)' },\n}\n\nfunction docCollection(): CollectionDef {\n return {\n id: 'doc',\n kind: 'document',\n localized: true,\n titleField: 'title',\n fields: [\n { type: 'text', name: 'title', localized: true, validation: { required: true, min: 1 } },\n { type: 'text', name: 'slug', validation: { required: true, unique: true, pattern: '^[a-z0-9-]+$' } },\n { type: 'richText', name: 'body', localized: true },\n { type: 'select', name: 'category', options: [{ value: 'guide' }, { value: 'reference' }] },\n ],\n form: { label: 'Docs', labelSingular: 'Doc' },\n }\n}\n\nexport const northwindDocsKit: StarterKit = {\n id: 'kit.northwind-docs',\n name: 'Northwind Docs',\n version: '1.0.0',\n description: 'A documentation site with guide and reference collections and a teal palette.',\n category: 'docs',\n settings: settings(['en', 'de']),\n localeConfig: en,\n graph: graph('proj-northwind-docs', 'Northwind Docs'),\n collections: [pageCollection, docCollection()],\n documents: [\n pageHome(docsHome),\n {\n collection: 'doc',\n id: 'doc-start',\n values: { slug: 'getting-started', category: 'guide' },\n localized: { en: { title: 'Getting Started', body: '<p>Install and configure.</p>' }, de: { title: 'Erste Schritte', body: '<p>Installieren und konfigurieren.</p>' } },\n defaultLocale: 'en',\n },\n {\n collection: 'doc',\n id: 'doc-api',\n values: { slug: 'api-reference', category: 'reference' },\n localized: { en: { title: 'API Reference', body: '<p>Every endpoint.</p>' }, de: { title: 'API-Referenz', body: '<p>Jeder Endpunkt.</p>' } },\n defaultLocale: 'en',\n },\n ],\n manifests: [...BASE_MANIFESTS, ...PROJECT_MANIFESTS],\n tokenOverrides: tealOverrides,\n}\n\n/** Every bundled starter kit, in gallery order. */\nexport const STARTER_KITS: StarterKit[] = [auroraMarketingKit, northwindDocsKit]\n\n/** Look up a kit by id. */\nexport function getStarterKit(id: string): StarterKit | undefined {\n return STARTER_KITS.find((k) => k.id === id)\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"manifests.js","sourceRoot":"","sources":["../../src/starter-kits/manifests.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manifests.js","sourceRoot":"","sources":["../../src/starter-kits/manifests.ts"],"names":[],"mappings":"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","sourcesContent":["import { SPACING_TOKEN_NAMES, GRID_MIN_COLUMNS, GRID_MAX_COLUMNS } from '@elytracms/core/project-graph'\nimport { defineComponent } from '@elytracms/core/component-registry'\nimport type { ComponentManifest, PropField } from '@elytracms/core/component-registry'\n\n/**\n * Component manifests a starter kit validates against (EC-116). Base primitives plus the seeded\n * `project.*` components — declared to match the Studio registry's implementations (same ids and\n * prop names), so a kit's graph both validates here and renders in the Builder. Kept React-free:\n * these are manifests (shape), not implementations.\n *\n * EC-190 \"props as fields\": a prop is a `@elytracms/core/cms-core` field-def minus its `name` (the record\n * key is the name). Every prop carries `context: 'prop'`; label/default live on `form`/`default`.\n * These mirror the canonical `@elytracms/core/runtime-renderer` primitive manifests.\n */\n\n// --- Field-def prop helpers -------------------------------------------------\n\n/** A plain-text prop. */\nconst text = (label: string, defaultValue?: string): PropField => ({\n type: 'text',\n context: 'prop',\n ...(defaultValue !== undefined ? { default: defaultValue } : {}),\n form: { label },\n})\n\n/** A required (min length 1) text prop. */\nconst textReq = (label: string, defaultValue?: string): PropField => ({\n type: 'text',\n context: 'prop',\n ...(defaultValue !== undefined ? { default: defaultValue } : {}),\n validation: { required: true, min: 1 },\n form: { label },\n})\n\n/** A bounded numeric prop. */\nconst number = (\n label: string,\n defaultValue: number,\n validation?: { min?: number; max?: number },\n): PropField => ({\n type: 'number',\n context: 'prop',\n default: defaultValue,\n ...(validation ? { validation } : {}),\n form: { label },\n})\n\n/** A boolean prop. */\nconst boolean = (label: string, defaultValue: boolean): PropField => ({\n type: 'boolean',\n context: 'prop',\n default: defaultValue,\n form: { label },\n})\n\n/** A select prop over a fixed set of string options. */\nconst select = (label: string, values: readonly string[], defaultValue: string): PropField => ({\n type: 'select',\n context: 'prop',\n default: defaultValue,\n options: values.map((value) => ({ value, label: value })),\n form: { label },\n})\n\n/** A gap prop: a `select` over the canonical design-token spacing step names (EC-161). */\nconst gap = (defaultValue: string): PropField => select('Gap', SPACING_TOKEN_NAMES, defaultValue)\n\n/** Base primitives the kit graphs use (mirrors `@elytracms/core/runtime-renderer` shapes). */\nexport const BASE_MANIFESTS: ComponentManifest[] = [\n defineComponent({ id: 'base.primitives.Container', namespace: 'base.primitives', title: 'Container', props: {}, slots: [{ name: 'children' }, { name: 'outlet' }] }),\n defineComponent({ id: 'base.primitives.Stack', namespace: 'base.primitives', title: 'Stack', props: { gap: gap('4') }, slots: [{ name: 'children' }] }),\n defineComponent({ id: 'base.primitives.Grid', namespace: 'base.primitives', title: 'Grid', props: { columns: number('Columns', 3, { min: GRID_MIN_COLUMNS, max: GRID_MAX_COLUMNS }), gap: gap('4') }, slots: [{ name: 'children' }] }),\n defineComponent({ id: 'base.primitives.Heading', namespace: 'base.primitives', title: 'Heading', props: { text: text('Text', ''), level: number('Level', 2, { min: 1, max: 6 }) }, slots: [] }),\n defineComponent({ id: 'base.primitives.Text', namespace: 'base.primitives', title: 'Text', props: { value: text('Text', '') }, slots: [] }),\n defineComponent({ id: 'base.primitives.Button', namespace: 'base.primitives', title: 'Button', props: { label: text('Label', 'Button'), href: text('Href', '#') }, slots: [] }),\n defineComponent({ id: 'base.primitives.Image', namespace: 'base.primitives', title: 'Image', props: { src: text('Source', ''), alt: text('Alt', '') }, slots: [] }),\n // EC-190 DD7: a Repeater's `items` is a binding/iteration construct (an array) with no static\n // field-def type; it rides node.props undeclared. No editable static prop — keep iterate + slots.\n defineComponent({ id: 'base.primitives.Repeater', namespace: 'base.primitives', title: 'Repeater', props: {}, slots: [{ name: 'item', required: true }], iterate: { itemsProp: 'items', itemSlot: 'item' } }),\n]\n\n/** Seeded project components (EC-116) — same ids/props the Studio registry implements. */\nexport const PROJECT_MANIFESTS: ComponentManifest[] = [\n defineComponent({\n id: 'project.MarketingHero',\n namespace: 'project',\n title: 'Marketing Hero',\n category: 'marketing',\n props: {\n eyebrow: text('Eyebrow', 'New'),\n heading: textReq('Heading', 'Build code-first websites'),\n subheading: text('Subheading', 'One canonical graph.'),\n ctaLabel: text('CTA label', 'Get started'),\n align: select('Alignment', ['left', 'center'], 'left'),\n },\n slots: [],\n }),\n defineComponent({\n id: 'project.FeatureCard',\n namespace: 'project',\n title: 'Feature Card',\n category: 'content',\n props: {\n title: textReq('Title', 'Validation first'),\n body: text('Body', 'Broken states are explicit.'),\n tone: select('Tone', ['default', 'accent'], 'default'),\n },\n slots: [],\n }),\n defineComponent({\n id: 'project.PricingCallout',\n namespace: 'project',\n title: 'Pricing Callout',\n category: 'commerce',\n props: {\n plan: textReq('Plan', 'Pro'),\n price: text('Price', '$29'),\n period: text('Period', 'mo'),\n featured: boolean('Featured', false),\n },\n slots: [],\n }),\n]\n\n/** All manifests a kit may reference. */\nexport const KIT_MANIFESTS: ComponentManifest[] = [...BASE_MANIFESTS, ...PROJECT_MANIFESTS]\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../src/starter-kits/upgrade.ts"],"names":[],"mappings":"AA2BA,SAAS,KAAK,CAAC,OAAe;IAC5B,MAAM,CAAC,GAAG,uBAAuB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAC/C,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;AAC9D,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,cAAc,CAAC,cAAsB,EAAE,aAAqB;IAC1E,MAAM,CAAC,GAAG,KAAK,CAAC,cAAc,CAAC,CAAA;IAC/B,MAAM,CAAC,GAAG,KAAK,CAAC,aAAa,CAAC,CAAA;IAC9B,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;QAAE,OAAO,SAAS,CAAA;IAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,IAAI,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,CAAC,CAAE;YAAE,OAAO,QAAQ,CAAA;QAClC,IAAI,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,CAAC,CAAE;YAAE,OAAO,OAAO,CAAA;IACnC,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,UAAU,CAAC,UAAyB,EAAE,MAAkB;IACtE,OAAO,UAAU,CAAC,KAAK,KAAK,MAAM,CAAC,EAAE,IAAI,cAAc,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAA;AAC1G,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAC3B,UAAsC,EACtC,WAAmB,EACnB,SAAiB;IAEjB,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;IAC1D,MAAM,IAAI,GAAsB,EAAE,CAAA;IAClC,IAAI,OAAO,GAAG,WAAW,CAAA;IACzB,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAA;IACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAChC,IAAI,OAAO,KAAK,SAAS;YAAE,OAAO,IAAI,CAAA;QACtC,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QAChC,IAAI,CAAC,IAAI;YAAE,OAAO,SAAS,CAAA;QAC3B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACf,OAAO,GAAG,IAAI,CAAC,EAAE,CAAA;IACnB,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,aAAa,CAC3B,IAAgC,EAChC,OAAU;IAEV,IAAI,OAAO,GAAG,OAAO,CAAA;IACrB,MAAM,OAAO,GAAa,EAAE,CAAA;IAC5B,KAAK,MAAM,SAAS,IAAI,IAAI,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QACvC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAA;QACxB,OAAO,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,IAAI,MAAM,SAAS,CAAC,EAAE,KAAK,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,WAAW,EAAE,CAAC,CAAA;IAC5G,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAA;AACtC,CAAC"}
1
+ {"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../src/starter-kits/upgrade.ts"],"names":[],"mappings":"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","sourcesContent":["import type { StarterKit } from './kit'\n\n/**\n * Template upgrade strategy (EC-120). Kits are semver-versioned. A project records the kit id +\n * version it was instantiated from; when a newer kit version ships, an ordered list of\n * {@link KitMigration}s describes how to move a project forward, one version at a time. Migrations\n * are pure and inspectable — they transform a payload and report what changed — so an upgrade is\n * reviewable and reversible, never a silent overwrite of the user's content.\n */\n\n/** A reference to the kit + version a project was instantiated from. */\nexport interface KitProvenance {\n kitId: string\n version: string\n}\n\n/** A single forward migration between two adjacent kit versions. */\nexport interface KitMigration<T = unknown> {\n from: string\n to: string\n description: string\n /** Pure transform of the project payload; also returns a human changelog of what it did. */\n apply: (payload: T) => { payload: T; changes: string[] }\n}\n\nexport type CompareResult = 'behind' | 'current' | 'ahead' | 'unknown'\n\nfunction parse(version: string): [number, number, number] | null {\n const m = /^(\\d+)\\.(\\d+)\\.(\\d+)$/.exec(version)\n return m ? [Number(m[1]), Number(m[2]), Number(m[3])] : null\n}\n\n/** Compare a project's kit version to the latest available kit version. */\nexport function compareVersion(projectVersion: string, latestVersion: string): CompareResult {\n const a = parse(projectVersion)\n const b = parse(latestVersion)\n if (!a || !b) return 'unknown'\n for (let i = 0; i < 3; i++) {\n if (a[i]! < b[i]!) return 'behind'\n if (a[i]! > b[i]!) return 'ahead'\n }\n return 'current'\n}\n\n/** Whether a project instantiated from `provenance` can upgrade to `latest`. */\nexport function canUpgrade(provenance: KitProvenance, latest: StarterKit): boolean {\n return provenance.kitId === latest.id && compareVersion(provenance.version, latest.version) === 'behind'\n}\n\n/**\n * Build the ordered chain of migrations from `fromVersion` to `toVersion`. Migrations must form a\n * contiguous from→to chain; a gap returns `undefined` so the host can surface \"no upgrade path\".\n */\nexport function migrationPath<T>(\n migrations: readonly KitMigration<T>[],\n fromVersion: string,\n toVersion: string,\n): KitMigration<T>[] | undefined {\n const byFrom = new Map(migrations.map((m) => [m.from, m]))\n const path: KitMigration<T>[] = []\n let current = fromVersion\n const guard = migrations.length + 1\n for (let i = 0; i <= guard; i++) {\n if (current === toVersion) return path\n const next = byFrom.get(current)\n if (!next) return undefined\n path.push(next)\n current = next.to\n }\n return undefined\n}\n\n/** Run a migration chain over a payload, accumulating the changelog. Pure. */\nexport function runMigrations<T>(\n path: readonly KitMigration<T>[],\n payload: T,\n): { payload: T; changes: string[] } {\n let current = payload\n const changes: string[] = []\n for (const migration of path) {\n const result = migration.apply(current)\n current = result.payload\n changes.push(`${migration.from} → ${migration.to}: ${result.changes.join('; ') || migration.description}`)\n }\n return { payload: current, changes }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/starter-kits/validate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/starter-kits/validate.ts"],"names":[],"mappings":"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","sourcesContent":["import { ComponentRegistry } from '@elytracms/core/component-registry'\nimport { createCollectionRegistry, createDocumentStore, validateDocuments } from '@elytracms/core/cms-core'\nimport { colorTokens } from '@elytracms/core/design-tokens'\nimport { validateProjectGraph } from '@elytracms/core/project-graph'\nimport { kitMetaSchema } from './kit'\nimport type { StarterKit } from './kit'\n\n/**\n * Validate a starter kit before import (EC-119, EC-116, EC-118). Reuses the canonical validators:\n * the envelope (meta), the component manifests (registry), the page graph (against those\n * manifests), the CMS schemas (collection registry), and the seed documents (against the\n * schemas). Returns structured issues; never throws. A kit with any `error` must not be imported.\n */\n\nexport interface KitIssue {\n code: 'meta' | 'manifest' | 'graph' | 'schema' | 'content' | 'token'\n severity: 'error' | 'warning'\n message: string\n ref?: string\n}\n\nconst TOKEN_NAMES = new Set(colorTokens.map((t) => t.name))\n\nexport function validateKit(kit: StarterKit): KitIssue[] {\n const issues: KitIssue[] = []\n\n // 1. Envelope.\n const meta = kitMetaSchema.safeParse(kit)\n if (!meta.success) {\n for (const issue of meta.error.issues) {\n issues.push({ code: 'meta', severity: 'error', message: `${issue.path.join('.')}: ${issue.message}` })\n }\n }\n\n // 2. Component manifests (duplicate / non-namespaced ids).\n const registry = new ComponentRegistry(kit.manifests)\n for (const issue of registry.issues) {\n issues.push({ code: 'manifest', severity: 'error', message: issue.message, ...(issue.componentId ? { ref: issue.componentId } : {}) })\n }\n\n // 3. Page graph (missing components, invalid props, missing slots).\n for (const issue of validateProjectGraph(kit.graph, { components: registry.lookup })) {\n issues.push({ code: 'graph', severity: issue.severity, message: issue.message, ...(issue.nodeId ? { ref: issue.nodeId } : {}) })\n }\n\n // 4. CMS schemas.\n const collections = createCollectionRegistry(kit.collections)\n for (const issue of collections.issues) {\n issues.push({ code: 'schema', severity: issue.severity === 'error' ? 'error' : 'warning', message: issue.message })\n }\n\n // 5. Seed content against the schemas (EC-118 \"seed content fits the schemas\"). A store over the\n // kit's own documents lets relation/asset references between seeds resolve.\n const store = createDocumentStore(kit.documents)\n for (const issue of validateDocuments(collections, kit.documents, { store, localeConfig: kit.localeConfig })) {\n issues.push({\n code: 'content',\n severity: issue.severity === 'error' ? 'error' : 'warning',\n message: issue.message,\n ...(typeof issue.meta?.documentId === 'string' ? { ref: issue.meta.documentId } : {}),\n })\n }\n\n // 6. Cross-document field uniqueness (the per-document validator can't see siblings). A field\n // declared `unique` must not repeat a (non-localized) value across the collection's seeds.\n for (const collection of kit.collections) {\n const uniqueFields = collection.fields.filter((f) => f.validation?.unique)\n const docs = kit.documents.filter((d) => d.collection === collection.id)\n for (const field of uniqueFields) {\n const seen = new Map<string, number>()\n for (const doc of docs) {\n const value = doc.values[field.name]\n if (value === undefined || value === null) continue\n const key = JSON.stringify(value)\n seen.set(key, (seen.get(key) ?? 0) + 1)\n }\n for (const [key, count] of seen) {\n if (count > 1) {\n issues.push({ code: 'content', severity: 'error', message: `Field \"${collection.id}.${field.name}\" must be unique, but ${count} seed documents share the value ${key}.` })\n }\n }\n }\n }\n\n // 7. Brand token overrides (EC-117) — keys must be real token names; flag typos + half-overrides.\n for (const [name, override] of Object.entries(kit.tokenOverrides)) {\n if (!TOKEN_NAMES.has(name)) {\n issues.push({ code: 'token', severity: 'warning', message: `Token override \"${name}\" is not a known design token and has no effect.`, ref: name })\n } else if (!override.light || !override.dark) {\n issues.push({ code: 'token', severity: 'warning', message: `Token override \"${name}\" sets only ${override.light ? 'light' : 'dark'}; the other mode keeps the canonical value.`, ref: name })\n }\n }\n\n return issues\n}\n\n/** True when a kit has no error-severity issues and is safe to import. */\nexport function isKitValid(issues: KitIssue[]): boolean {\n return !issues.some((i) => i.severity === 'error')\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/studio-core/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,eAAe,EAAE,MAAM,OAAO,CAAA;AAGvC,sEAAsE;AACtE,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAA;AAEpC;;;;GAIG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;IACjD,eAAe,EAAE,eAAe,CAAC,QAAQ,EAAE;IAC3C,gBAAgB,EAAE,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC;CAC3C,CAAC,CAAA;AAGF,MAAM,UAAU,YAAY;IAC1B,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,gBAAgB,EAAE,EAAE,EAAE,CAAA;AACxD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAC7B,OAA6B,EAC7B,SAAoB;IAEpB,MAAM,gBAAgB,GAAG;QACvB,SAAS;QACT,GAAG,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,SAAS,CAAC;KAC7D,CAAC,KAAK,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAA;IAC/B,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAA;AACzD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAC3B,OAA6B,EAC7B,SAAoB;IAEpB,OAAO;QACL,eAAe,EAAE,OAAO,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,eAAe;QACvF,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,SAAS,CAAC;KAC5E,CAAA;AACH,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,sBAAsB,CACpC,OAA6B,EAC7B,QAAgC;IAEhC,OAAO,OAAO,CAAC,eAAe,IAAI,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC;QACrE,CAAC,CAAC,OAAO,CAAC,eAAe;QACzB,CAAC,CAAC,IAAI,CAAA;AACV,CAAC"}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/studio-core/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,eAAe,EAAE,MAAM,OAAO,CAAA;AAGvC,sEAAsE;AACtE,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAA;AAEpC;;;;GAIG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;IACjD,eAAe,EAAE,eAAe,CAAC,QAAQ,EAAE;IAC3C,gBAAgB,EAAE,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC;CAC3C,CAAC,CAAA;AAGF,MAAM,UAAU,YAAY;IAC1B,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,gBAAgB,EAAE,EAAE,EAAE,CAAA;AACxD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAC7B,OAA6B,EAC7B,SAAoB;IAEpB,MAAM,gBAAgB,GAAG;QACvB,SAAS;QACT,GAAG,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,SAAS,CAAC;KAC7D,CAAC,KAAK,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAA;IAC/B,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAA;AACzD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAC3B,OAA6B,EAC7B,SAAoB;IAEpB,OAAO;QACL,eAAe,EAAE,OAAO,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,eAAe;QACvF,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,SAAS,CAAC;KAC5E,CAAA;AACH,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,sBAAsB,CACpC,OAA6B,EAC7B,QAAgC;IAEhC,OAAO,OAAO,CAAC,eAAe,IAAI,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC;QACrE,CAAC,CAAC,OAAO,CAAC,eAAe;QACzB,CAAC,CAAC,IAAI,CAAA;AACV,CAAC","sourcesContent":["import { z } from 'zod'\nimport { projectIdSchema } from './ids'\nimport type { ProjectId } from './ids'\n\n/** Maximum number of recent projects retained (most-recent-first). */\nexport const MAX_RECENT_PROJECTS = 8\n\n/**\n * The active-project context the Studio shell preserves across section\n * navigation (brief §4.3, §8.1). Pure data — reducers below derive new values\n * without mutating.\n */\nexport const activeProjectContextSchema = z.object({\n activeProjectId: projectIdSchema.nullable(),\n recentProjectIds: z.array(projectIdSchema),\n})\nexport type ActiveProjectContext = z.infer<typeof activeProjectContextSchema>\n\nexport function emptyContext(): ActiveProjectContext {\n return { activeProjectId: null, recentProjectIds: [] }\n}\n\n/**\n * Mark a project active and move it to the front of the recents list (MRU),\n * de-duplicating and capping length. Pure.\n */\nexport function activateProject(\n context: ActiveProjectContext,\n projectId: ProjectId,\n): ActiveProjectContext {\n const recentProjectIds = [\n projectId,\n ...context.recentProjectIds.filter((id) => id !== projectId),\n ].slice(0, MAX_RECENT_PROJECTS)\n return { activeProjectId: projectId, recentProjectIds }\n}\n\n/**\n * Forget a project entirely (e.g. after delete): drop it from recents and clear\n * the active pointer if it was active. Pure.\n */\nexport function forgetProject(\n context: ActiveProjectContext,\n projectId: ProjectId,\n): ActiveProjectContext {\n return {\n activeProjectId: context.activeProjectId === projectId ? null : context.activeProjectId,\n recentProjectIds: context.recentProjectIds.filter((id) => id !== projectId),\n }\n}\n\n/** The active id if it still resolves against the known set, else null. */\nexport function resolveActiveProjectId(\n context: ActiveProjectContext,\n knownIds: ReadonlySet<ProjectId>,\n): ProjectId | null {\n return context.activeProjectId && knownIds.has(context.activeProjectId)\n ? context.activeProjectId\n : null\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/studio-core/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB;;;;;GAKG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,IAAI,CAAC;IAC9C,YAAY;IACZ,WAAW;IACX,UAAU;IACV,qBAAqB;IACrB,SAAS;CACV,CAAC,CAAA;AAGF,oDAAoD;AACpD,MAAM,OAAgB,sBAAuB,SAAQ,KAAK;IAExD,YAAY,OAAe,EAAE,OAA6B;QACxD,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QACvB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAA;IAC7B,CAAC;CACF;AAED,0EAA0E;AAC1E,MAAM,OAAO,sBAAuB,SAAQ,sBAAsB;IAIrD;IAHF,IAAI,GAAG,YAAqB,CAAA;IACrC,YACE,OAAe,EACN,MAA8B;QAEvC,KAAK,CAAC,OAAO,CAAC,CAAA;QAFL,WAAM,GAAN,MAAM,CAAwB;IAGzC,CAAC;CACF;AAED,0CAA0C;AAC1C,MAAM,OAAO,oBAAqB,SAAQ,sBAAsB;IAEzC;IADZ,IAAI,GAAG,WAAoB,CAAA;IACpC,YAAqB,SAAiB;QACpC,KAAK,CAAC,6BAA6B,SAAS,IAAI,CAAC,CAAA;QAD9B,cAAS,GAAT,SAAS,CAAQ;IAEtC,CAAC;CACF;AAED,4DAA4D;AAC5D,MAAM,OAAO,oBAAqB,SAAQ,sBAAsB;IAInD;IAHF,IAAI,GAAG,UAAmB,CAAA;IACnC,YACE,OAAe,EACN,eAAuB;QAEhC,KAAK,CAAC,OAAO,CAAC,CAAA;QAFL,oBAAe,GAAf,eAAe,CAAQ;IAGlC,CAAC;CACF;AAED,8EAA8E;AAC9E,MAAM,OAAO,uBAAwB,SAAQ,sBAAsB;IACxD,IAAI,GAAG,qBAA8B,CAAA;IAC9C,YAAY,OAAO,GAAG,+CAA+C,EAAE,OAA6B;QAClG,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IACzB,CAAC;CACF;AAED,mEAAmE;AACnE,MAAM,OAAO,sBAAuB,SAAQ,sBAAsB;IACvD,IAAI,GAAG,SAAkB,CAAA;IAClC,YAAY,OAAO,GAAG,uCAAuC,EAAE,OAA6B;QAC1F,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IACzB,CAAC;CACF;AAED,MAAM,UAAU,wBAAwB,CAAC,KAAc;IACrD,OAAO,KAAK,YAAY,sBAAsB,CAAA;AAChD,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,IAAI,wBAAwB,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAA;IACjD,IAAI,KAAK,YAAY,KAAK;QAAE,OAAO,IAAI,sBAAsB,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;IAC9F,OAAO,IAAI,sBAAsB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;AAClD,CAAC"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/studio-core/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB;;;;;GAKG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,IAAI,CAAC;IAC9C,YAAY;IACZ,WAAW;IACX,UAAU;IACV,qBAAqB;IACrB,SAAS;CACV,CAAC,CAAA;AAGF,oDAAoD;AACpD,MAAM,OAAgB,sBAAuB,SAAQ,KAAK;IAExD,YAAY,OAAe,EAAE,OAA6B;QACxD,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QACvB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAA;IAC7B,CAAC;CACF;AAED,0EAA0E;AAC1E,MAAM,OAAO,sBAAuB,SAAQ,sBAAsB;IAIrD;IAHF,IAAI,GAAG,YAAqB,CAAA;IACrC,YACE,OAAe,EACN,MAA8B;QAEvC,KAAK,CAAC,OAAO,CAAC,CAAA;QAFL,WAAM,GAAN,MAAM,CAAwB;IAGzC,CAAC;CACF;AAED,0CAA0C;AAC1C,MAAM,OAAO,oBAAqB,SAAQ,sBAAsB;IAEzC;IADZ,IAAI,GAAG,WAAoB,CAAA;IACpC,YAAqB,SAAiB;QACpC,KAAK,CAAC,6BAA6B,SAAS,IAAI,CAAC,CAAA;QAD9B,cAAS,GAAT,SAAS,CAAQ;IAEtC,CAAC;CACF;AAED,4DAA4D;AAC5D,MAAM,OAAO,oBAAqB,SAAQ,sBAAsB;IAInD;IAHF,IAAI,GAAG,UAAmB,CAAA;IACnC,YACE,OAAe,EACN,eAAuB;QAEhC,KAAK,CAAC,OAAO,CAAC,CAAA;QAFL,oBAAe,GAAf,eAAe,CAAQ;IAGlC,CAAC;CACF;AAED,8EAA8E;AAC9E,MAAM,OAAO,uBAAwB,SAAQ,sBAAsB;IACxD,IAAI,GAAG,qBAA8B,CAAA;IAC9C,YAAY,OAAO,GAAG,+CAA+C,EAAE,OAA6B;QAClG,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IACzB,CAAC;CACF;AAED,mEAAmE;AACnE,MAAM,OAAO,sBAAuB,SAAQ,sBAAsB;IACvD,IAAI,GAAG,SAAkB,CAAA;IAClC,YAAY,OAAO,GAAG,uCAAuC,EAAE,OAA6B;QAC1F,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IACzB,CAAC;CACF;AAED,MAAM,UAAU,wBAAwB,CAAC,KAAc;IACrD,OAAO,KAAK,YAAY,sBAAsB,CAAA;AAChD,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,IAAI,wBAAwB,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAA;IACjD,IAAI,KAAK,YAAY,KAAK;QAAE,OAAO,IAAI,sBAAsB,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;IAC9F,OAAO,IAAI,sBAAsB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;AAClD,CAAC","sourcesContent":["import { z } from 'zod'\nimport type { StudioIssue } from './issues'\n\n/**\n * Distinct, testable repository error categories (brief §7.7). Every failure\n * mode is a distinct class with a stable `code`, so callers can branch on the\n * category without string-matching messages. Provider-neutral: the Convex\n * adapter (Phase 3) maps its failures onto these same types.\n */\nexport const repositoryErrorCodeSchema = z.enum([\n 'validation',\n 'not-found',\n 'conflict',\n 'backend-unavailable',\n 'unknown',\n])\nexport type RepositoryErrorCode = z.infer<typeof repositoryErrorCodeSchema>\n\n/** Base class for all project-repository errors. */\nexport abstract class ProjectRepositoryError extends Error {\n abstract readonly code: RepositoryErrorCode\n constructor(message: string, options?: { cause?: unknown }) {\n super(message, options)\n this.name = new.target.name\n }\n}\n\n/** Settings/identity validation failed; carries the structured issues. */\nexport class ProjectValidationError extends ProjectRepositoryError {\n readonly code = 'validation' as const\n constructor(\n message: string,\n readonly issues: readonly StudioIssue[],\n ) {\n super(message)\n }\n}\n\n/** No project exists for the given id. */\nexport class ProjectNotFoundError extends ProjectRepositoryError {\n readonly code = 'not-found' as const\n constructor(readonly projectId: string) {\n super(`No project found with id “${projectId}”.`)\n }\n}\n\n/** A slug or identity collides with an existing project. */\nexport class ProjectConflictError extends ProjectRepositoryError {\n readonly code = 'conflict' as const\n constructor(\n message: string,\n readonly conflictingSlug: string,\n ) {\n super(message)\n }\n}\n\n/** The backing store is unreachable or returned a transport-level failure. */\nexport class BackendUnavailableError extends ProjectRepositoryError {\n readonly code = 'backend-unavailable' as const\n constructor(message = 'The project backend is currently unavailable.', options?: { cause?: unknown }) {\n super(message, options)\n }\n}\n\n/** Any failure that does not map onto a more specific category. */\nexport class UnknownRepositoryError extends ProjectRepositoryError {\n readonly code = 'unknown' as const\n constructor(message = 'An unknown repository error occurred.', options?: { cause?: unknown }) {\n super(message, options)\n }\n}\n\nexport function isProjectRepositoryError(value: unknown): value is ProjectRepositoryError {\n return value instanceof ProjectRepositoryError\n}\n\n/** Map any thrown value onto the repository error taxonomy. */\nexport function asRepositoryError(value: unknown): ProjectRepositoryError {\n if (isProjectRepositoryError(value)) return value\n if (value instanceof Error) return new UnknownRepositoryError(value.message, { cause: value })\n return new UnknownRepositoryError(String(value))\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"fixtures.js","sourceRoot":"","sources":["../../src/studio-core/fixtures.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fixtures.js","sourceRoot":"","sources":["../../src/studio-core/fixtures.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Project } from './metadata'\nimport type { SectionAvailabilityMap } from './sections'\nimport { allSectionsAvailable } from './sections'\nimport {\n InMemoryProjectRepository,\n createSequentialClock,\n createSequentialIdFactory,\n} from './repository'\n\n/**\n * Deterministic sample projects (brief §10, §11). Ids and timestamps are\n * hard-coded so every run, test, and browser inspection sees byte-identical\n * state. They deliberately span varied locales and section availability so the\n * Studio shell can demonstrate each.\n */\n\nfunction availability(overrides: Partial<SectionAvailabilityMap>): SectionAvailabilityMap {\n return { ...allSectionsAvailable(), ...overrides }\n}\n\n/** Fully-provisioned, multi-locale marketing site — the \"happy path\" project. */\nexport const auroraMarketing: Project = {\n id: 'prj_aurora',\n name: 'Aurora Marketing',\n slug: 'aurora-marketing',\n createdAt: '2026-01-04T09:00:00.000Z',\n updatedAt: '2026-05-20T16:30:00.000Z',\n settings: {\n locales: ['en', 'de', 'fr'],\n defaultLocale: 'en',\n environments: [\n { key: 'production', label: 'Production' },\n { key: 'staging', label: 'Staging' },\n { key: 'preview', label: 'Preview' },\n ],\n exportTarget: 'next-app-router',\n sectionAvailability: allSectionsAvailable(),\n },\n}\n\n/** Single-locale docs site where the assets surface is still planned. */\nexport const northwindDocs: Project = {\n id: 'prj_northwind',\n name: 'Northwind Docs',\n slug: 'northwind-docs',\n createdAt: '2026-02-11T11:15:00.000Z',\n updatedAt: '2026-05-28T08:05:00.000Z',\n settings: {\n locales: ['en'],\n defaultLocale: 'en',\n environments: [\n { key: 'production', label: 'Production' },\n { key: 'preview', label: 'Preview' },\n ],\n exportTarget: 'next-app-router',\n sectionAvailability: availability({ assets: 'planned' }),\n },\n}\n\n/** Regional storefront with two locales and a components surface still planned. */\nexport const lumenStore: Project = {\n id: 'prj_lumen',\n name: 'Lumen Store',\n slug: 'lumen-store',\n createdAt: '2026-03-02T14:45:00.000Z',\n updatedAt: '2026-06-01T10:00:00.000Z',\n settings: {\n locales: ['en-US', 'es-MX'],\n defaultLocale: 'en-US',\n environments: [\n { key: 'production', label: 'Production' },\n { key: 'preview', label: 'Preview' },\n ],\n exportTarget: 'next-app-router',\n sectionAvailability: availability({ components: 'planned' }),\n },\n}\n\n/** All sample projects in a stable order. */\nexport const sampleProjects: readonly Project[] = [auroraMarketing, northwindDocs, lumenStore]\n\n/** Lookup by id for tests and shell bootstrapping. */\nexport const sampleProjectsById: Readonly<Record<string, Project>> = Object.fromEntries(\n sampleProjects.map((p) => [p.id, p]),\n)\n\n/**\n * Build an in-memory repository seeded with the sample projects. The clock and\n * id factory continue deterministically *after* the seeded ids/timestamps, so\n * subsequent create/update operations are reproducible across runs.\n */\nexport function createFixtureRepository(): InMemoryProjectRepository {\n return new InMemoryProjectRepository({\n seed: sampleProjects,\n clock: createSequentialClock('2026-06-07T00:00:00.000Z'),\n idFactory: createSequentialIdFactory('prj_new'),\n })\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ids.js","sourceRoot":"","sources":["../../src/studio-core/ids.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,sEAAsE;AACtE,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;AAGhD;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,4BAA4B,CAAA;AACxD,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;AAGvE,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,OAAO,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAA;AAC5C,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,oCAAoC,CAAA;AAClE,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAA;AAG5D,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,OAAO,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAA;AAC9C,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,OAAO,CAAC,KAAa;IACnC,OAAO,KAAK;SACT,SAAS,CAAC,MAAM,CAAC;SACjB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;SACrB,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;SACZ,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;AACxB,CAAC"}
1
+ {"version":3,"file":"ids.js","sourceRoot":"","sources":["../../src/studio-core/ids.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,sEAAsE;AACtE,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;AAGhD;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,4BAA4B,CAAA;AACxD,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;AAGvE,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,OAAO,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAA;AAC5C,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,oCAAoC,CAAA;AAClE,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAA;AAG5D,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,OAAO,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAA;AAC9C,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,OAAO,CAAC,KAAa;IACnC,OAAO,KAAK;SACT,SAAS,CAAC,MAAM,CAAC;SACjB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;SACrB,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;SACZ,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;AACxB,CAAC","sourcesContent":["import { z } from 'zod'\n\n/** Stable, non-empty project identifier (opaque; not user-facing). */\nexport const projectIdSchema = z.string().min(1)\nexport type ProjectId = z.infer<typeof projectIdSchema>\n\n/**\n * URL-safe project slug: lowercase alphanumeric segments joined by single hyphens.\n * The slug is user-facing and editable; the id is the stable key.\n */\nexport const SLUG_PATTERN = /^[a-z0-9]+(?:-[a-z0-9]+)*$/\nexport const slugSchema = z.string().min(1).max(63).regex(SLUG_PATTERN)\nexport type Slug = z.infer<typeof slugSchema>\n\nexport function isValidSlug(value: string): boolean {\n return slugSchema.safeParse(value).success\n}\n\n/**\n * Permissive BCP-47-ish locale tag: a primary subtag plus optional script/region\n * subtags, e.g. `en`, `en-US`, `pt-BR`, `zh-Hans`, `zh-Hant-HK`.\n */\nexport const LOCALE_PATTERN = /^[a-z]{2,3}(?:-[A-Za-z0-9]{2,8})*$/\nexport const localeSchema = z.string().regex(LOCALE_PATTERN)\nexport type Locale = z.infer<typeof localeSchema>\n\nexport function isValidLocale(value: string): boolean {\n return localeSchema.safeParse(value).success\n}\n\n/** Derive a slug candidate from a free-form name. Never throws; may yield ''. */\nexport function slugify(input: string): string {\n return input\n .normalize('NFKD')\n .replace(/[̀-ͯ]/g, '')\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-+|-+$/g, '')\n .slice(0, 63)\n .replace(/-+$/g, '')\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/studio-core/index.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,6BAA6B,CAAA;AAEpD,cAAc,OAAO,CAAA;AACrB,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,UAAU,CAAA;AACxB,cAAc,YAAY,CAAA;AAC1B,cAAc,oBAAoB,CAAA;AAClC,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA;AACzB,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/studio-core/index.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,6BAA6B,CAAA;AAEpD,cAAc,OAAO,CAAA;AACrB,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,UAAU,CAAA;AACxB,cAAc,YAAY,CAAA;AAC1B,cAAc,oBAAoB,CAAA;AAClC,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA;AACzB,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA","sourcesContent":["export const PACKAGE = '@elytracms/core/studio-core'\n\nexport * from './ids'\nexport * from './sections'\nexport * from './metadata'\nexport * from './issues'\nexport * from './validate'\nexport * from './workspace-config'\nexport * from './errors'\nexport * from './context'\nexport * from './repository'\nexport * from './fixtures'\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"issues.js","sourceRoot":"","sources":["../../src/studio-core/issues.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB;;;;GAIG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,IAAI,CAAC;IAC1C,cAAc;IACd,cAAc;IACd,eAAe;IACf,kBAAkB;IAClB,gBAAgB;IAChB,+BAA+B;IAC/B,iBAAiB;IACjB,uBAAuB;IACvB,qBAAqB;IACrB,uBAAuB;IACvB,iCAAiC;CAClC,CAAC,CAAA;AAGF,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAA;AAGrE,iEAAiE;AACjE,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,IAAI,EAAE,qBAAqB;IAC3B,QAAQ,EAAE,yBAAyB;IACnC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,qFAAqF;IACrF,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;CACjD,CAAC,CAAA;AAGF,+EAA+E;AAC/E,MAAM,UAAU,eAAe,CAAC,MAA8B;IAC5D,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAA;AAC5D,CAAC"}
1
+ {"version":3,"file":"issues.js","sourceRoot":"","sources":["../../src/studio-core/issues.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB;;;;GAIG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,IAAI,CAAC;IAC1C,cAAc;IACd,cAAc;IACd,eAAe;IACf,kBAAkB;IAClB,gBAAgB;IAChB,+BAA+B;IAC/B,iBAAiB;IACjB,uBAAuB;IACvB,qBAAqB;IACrB,uBAAuB;IACvB,iCAAiC;CAClC,CAAC,CAAA;AAGF,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAA;AAGrE,iEAAiE;AACjE,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,IAAI,EAAE,qBAAqB;IAC3B,QAAQ,EAAE,yBAAyB;IACnC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,qFAAqF;IACrF,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;CACjD,CAAC,CAAA;AAGF,+EAA+E;AAC/E,MAAM,UAAU,eAAe,CAAC,MAA8B;IAC5D,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAA;AAC5D,CAAC","sourcesContent":["import { z } from 'zod'\n\n/**\n * Stable codes for project-settings validation issues (brief §4.11, §7.7).\n * Settings validation is first-class and non-throwing: the editing UI holds a\n * draft and renders these issues rather than crashing.\n */\nexport const studioIssueCodeSchema = z.enum([\n 'invalid-name',\n 'invalid-slug',\n 'empty-locales',\n 'duplicate-locale',\n 'invalid-locale',\n 'default-locale-not-in-locales',\n 'no-environments',\n 'duplicate-environment',\n 'invalid-environment',\n 'missing-export-target',\n 'incomplete-section-availability',\n])\nexport type StudioIssueCode = z.infer<typeof studioIssueCodeSchema>\n\nexport const studioIssueSeveritySchema = z.enum(['error', 'warning'])\nexport type StudioIssueSeverity = z.infer<typeof studioIssueSeveritySchema>\n\n/** A structured project-settings issue carrying a field path. */\nexport const studioIssueSchema = z.object({\n code: studioIssueCodeSchema,\n severity: studioIssueSeveritySchema,\n message: z.string(),\n /** Field path into the settings object, e.g. ['defaultLocale'] or ['locales', 1]. */\n path: z.array(z.union([z.string(), z.number()])),\n})\nexport type StudioIssue = z.infer<typeof studioIssueSchema>\n\n/** True when no error-severity issues are present (warnings are tolerated). */\nexport function isSettingsValid(issues: readonly StudioIssue[]): boolean {\n return !issues.some((issue) => issue.severity === 'error')\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../src/studio-core/metadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AACjE,OAAO,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAA;AAEzD,8EAA8E;AAC9E,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,GAAG,EAAE,UAAU;IACf,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CACzB,CAAC,CAAA;AAGF;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAA;AAG7D;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;AAGhD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC;IAC9B,aAAa,EAAE,YAAY;IAC3B,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC;IACxC,YAAY,EAAE,kBAAkB;IAChC,mBAAmB,EAAE,4BAA4B;CAClD,CAAC,CAAA;AAGF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,EAAE,EAAE,eAAe;IACnB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IAChC,IAAI,EAAE,UAAU;IAChB,SAAS,EAAE,eAAe,CAAC,QAAQ,EAAE;IACrC,SAAS,EAAE,eAAe,CAAC,QAAQ,EAAE;CACtC,CAAC,CAAA;AAGF,qDAAqD;AACrD,MAAM,CAAC,MAAM,aAAa,GAAG,qBAAqB,CAAC,MAAM,CAAC;IACxD,QAAQ,EAAE,qBAAqB;CAChC,CAAC,CAAA;AAGF;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,qBAAqB,CAAC,IAAI,CAAC;IAC7D,EAAE,EAAE,IAAI;IACR,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,SAAS,EAAE,IAAI;CAChB,CAAC,CAAA;AAGF,MAAM,UAAU,SAAS,CAAC,OAAgB;IACxC,OAAO;QACL,EAAE,EAAE,OAAO,CAAC,EAAE;QACd,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,SAAS,EAAE,OAAO,CAAC,SAAS;KAC7B,CAAA;AACH,CAAC;AAED,0DAA0D;AAC1D,MAAM,UAAU,mBAAmB;IACjC,OAAO;QACL,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE;QAC1C,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;KACrC,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../src/studio-core/metadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AACjE,OAAO,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAA;AAEzD,8EAA8E;AAC9E,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,GAAG,EAAE,UAAU;IACf,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CACzB,CAAC,CAAA;AAGF;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAA;AAG7D;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;AAGhD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC;IAC9B,aAAa,EAAE,YAAY;IAC3B,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC;IACxC,YAAY,EAAE,kBAAkB;IAChC,mBAAmB,EAAE,4BAA4B;CAClD,CAAC,CAAA;AAGF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,EAAE,EAAE,eAAe;IACnB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IAChC,IAAI,EAAE,UAAU;IAChB,SAAS,EAAE,eAAe,CAAC,QAAQ,EAAE;IACrC,SAAS,EAAE,eAAe,CAAC,QAAQ,EAAE;CACtC,CAAC,CAAA;AAGF,qDAAqD;AACrD,MAAM,CAAC,MAAM,aAAa,GAAG,qBAAqB,CAAC,MAAM,CAAC;IACxD,QAAQ,EAAE,qBAAqB;CAChC,CAAC,CAAA;AAGF;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,qBAAqB,CAAC,IAAI,CAAC;IAC7D,EAAE,EAAE,IAAI;IACR,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,SAAS,EAAE,IAAI;CAChB,CAAC,CAAA;AAGF,MAAM,UAAU,SAAS,CAAC,OAAgB;IACxC,OAAO;QACL,EAAE,EAAE,OAAO,CAAC,EAAE;QACd,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,SAAS,EAAE,OAAO,CAAC,SAAS;KAC7B,CAAA;AACH,CAAC;AAED,0DAA0D;AAC1D,MAAM,UAAU,mBAAmB;IACjC,OAAO;QACL,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE;QAC1C,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;KACrC,CAAA;AACH,CAAC","sourcesContent":["import { z } from 'zod'\nimport { localeSchema, projectIdSchema, slugSchema } from './ids'\nimport { sectionAvailabilityMapSchema } from './sections'\n\n/** A named deployment environment, e.g. production / preview (brief §7.7). */\nexport const environmentSchema = z.object({\n key: slugSchema,\n label: z.string().min(1),\n})\nexport type Environment = z.infer<typeof environmentSchema>\n\n/**\n * Export target for generated code. Next.js App Router is the initial (and\n * currently only) target (brief §6, §7.7).\n */\nexport const exportTargetSchema = z.enum(['next-app-router'])\nexport type ExportTarget = z.infer<typeof exportTargetSchema>\n\n/**\n * ISO-8601 timestamp string. Kept as a plain string (the repository owns the\n * clock) so fixtures stay byte-for-byte deterministic across runs.\n */\nexport const timestampSchema = z.string().min(1)\nexport type Timestamp = z.infer<typeof timestampSchema>\n\n/**\n * Project settings — configuration that is separate from the canonical project\n * graph (brief §7.7, §8.7). Field shapes are validated here; cross-field rules\n * (e.g. default-locale ∈ locales) live in `validate.ts` so the editing UI can\n * hold a temporarily-invalid draft and surface issues instead of throwing.\n */\nexport const projectSettingsSchema = z.object({\n locales: z.array(localeSchema),\n defaultLocale: localeSchema,\n environments: z.array(environmentSchema),\n exportTarget: exportTargetSchema,\n sectionAvailability: sectionAvailabilityMapSchema,\n})\nexport type ProjectSettings = z.infer<typeof projectSettingsSchema>\n\n/**\n * Project metadata — identity, distinct from settings and from the project graph\n * (brief §7.7). `createdAt`/`updatedAt` are optional: backend-stored projects\n * carry them, but config-derived projects (identity owned by `elytra.config.ts`)\n * have no backend timestamps.\n */\nexport const projectMetadataSchema = z.object({\n id: projectIdSchema,\n name: z.string().min(1).max(120),\n slug: slugSchema,\n createdAt: timestampSchema.optional(),\n updatedAt: timestampSchema.optional(),\n})\nexport type ProjectMetadata = z.infer<typeof projectMetadataSchema>\n\n/** A full project record: metadata plus settings. */\nexport const projectSchema = projectMetadataSchema.extend({\n settings: projectSettingsSchema,\n})\nexport type Project = z.infer<typeof projectSchema>\n\n/**\n * Lightweight projection for list views and the switcher (brief §8.1). Avoids\n * shipping full settings where only identity is needed.\n */\nexport const projectSummarySchema = projectMetadataSchema.pick({\n id: true,\n name: true,\n slug: true,\n updatedAt: true,\n})\nexport type ProjectSummary = z.infer<typeof projectSummarySchema>\n\nexport function toSummary(project: Project): ProjectSummary {\n return {\n id: project.id,\n name: project.name,\n slug: project.slug,\n updatedAt: project.updatedAt,\n }\n}\n\n/** Default environments for a freshly-created project. */\nexport function defaultEnvironments(): Environment[] {\n return [\n { key: 'production', label: 'Production' },\n { key: 'preview', label: 'Preview' },\n ]\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"repository.js","sourceRoot":"","sources":["../../src/studio-core/repository.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"repository.js","sourceRoot":"","sources":["../../src/studio-core/repository.ts"],"names":[],"mappings":"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","sourcesContent":["import { slugify } from './ids'\nimport type { ProjectId, Slug } from './ids'\nimport {\n BackendUnavailableError,\n ProjectConflictError,\n ProjectNotFoundError,\n ProjectValidationError,\n} from './errors'\nimport {\n defaultEnvironments,\n projectSchema,\n toSummary,\n} from './metadata'\nimport type {\n Environment,\n ExportTarget,\n Project,\n ProjectSettings,\n ProjectSummary,\n} from './metadata'\nimport { allSectionsAvailable } from './sections'\nimport type { SectionAvailabilityMap } from './sections'\nimport { validateProjectIdentity, validateProjectSettings } from './validate'\n\nexport interface CreateProjectInput {\n name: string\n /** Derived from `name` when omitted. */\n slug?: string\n settings?: Partial<ProjectSettings>\n}\n\nexport interface UpdateProjectInput {\n name?: string\n slug?: string\n settings?: Partial<ProjectSettings>\n}\n\nexport interface DuplicateProjectInput {\n name?: string\n slug?: string\n}\n\n/**\n * Provider-neutral project repository contract (brief §7.7). Operations are async\n * so a Convex-backed implementation satisfies the same interface. Failures are\n * thrown as the `ProjectRepositoryError` taxonomy. (Project *identity* is owned by\n * `elytra.config.ts`; this repository persists the backend project record used\n * by CLI provisioning and playground.)\n */\nexport interface ProjectRepository {\n list(): Promise<ProjectSummary[]>\n get(id: ProjectId): Promise<Project>\n create(input: CreateProjectInput): Promise<Project>\n update(id: ProjectId, input: UpdateProjectInput): Promise<Project>\n duplicate(id: ProjectId, input?: DuplicateProjectInput): Promise<Project>\n delete(id: ProjectId): Promise<void>\n}\n\n/** Returns an ISO-8601 timestamp; injected so tests stay deterministic. */\nexport type Clock = () => string\n\n/**\n * Deterministic clock for fixtures/tests: starts at `startISO` and advances a\n * fixed step on each call, so repeated runs produce identical timestamps.\n */\nexport function createSequentialClock(\n startISO = '2026-01-01T00:00:00.000Z',\n stepMs = 1000,\n): Clock {\n let current = Date.parse(startISO)\n return () => {\n const iso = new Date(current).toISOString()\n current += stepMs\n return iso\n }\n}\n\n/** Generates stable opaque project ids; injected for determinism. */\nexport type IdFactory = () => ProjectId\n\nexport function createSequentialIdFactory(prefix = 'prj'): IdFactory {\n let n = 0\n return () => {\n n += 1\n return `${prefix}_${String(n).padStart(6, '0')}`\n }\n}\n\nexport interface InMemoryProjectRepositoryOptions {\n clock?: Clock\n idFactory?: IdFactory\n /** Seed projects (cloned defensively on insert). */\n seed?: readonly Project[]\n}\n\nfunction defaultSettings(): ProjectSettings {\n return {\n locales: ['en'],\n defaultLocale: 'en',\n environments: defaultEnvironments(),\n exportTarget: 'next-app-router' satisfies ExportTarget,\n sectionAvailability: allSectionsAvailable(),\n }\n}\n\nfunction mergeSettings(base: ProjectSettings, patch?: Partial<ProjectSettings>): ProjectSettings {\n if (!patch) return base\n return { ...base, ...patch }\n}\n\n/** Deep-ish clone so stored records never share mutable references with callers. */\nfunction cloneProject(project: Project): Project {\n return {\n ...project,\n settings: {\n ...project.settings,\n locales: [...project.settings.locales],\n environments: project.settings.environments.map((e: Environment) => ({ ...e })),\n sectionAvailability: { ...project.settings.sectionAvailability } as SectionAvailabilityMap,\n },\n }\n}\n\n/**\n * In-memory `ProjectRepository` (brief §10). Backs fixtures, tests, and browser\n * inspection before Convex exists. Validates identity + settings on every write\n * and enforces slug uniqueness across non-deleted projects.\n */\nexport class InMemoryProjectRepository implements ProjectRepository {\n private readonly projects = new Map<ProjectId, Project>()\n private readonly order: ProjectId[] = []\n private readonly clock: Clock\n private readonly nextId: IdFactory\n\n constructor(options: InMemoryProjectRepositoryOptions = {}) {\n this.clock = options.clock ?? createSequentialClock()\n this.nextId = options.idFactory ?? createSequentialIdFactory()\n for (const project of options.seed ?? []) {\n const parsed = projectSchemaSafeParse(project)\n this.projects.set(parsed.id, cloneProject(parsed))\n this.order.push(parsed.id)\n }\n }\n\n async list(): Promise<ProjectSummary[]> {\n return this.order\n .map((id) => this.projects.get(id)!)\n .sort((a, b) => {\n const av = a.updatedAt ?? ''\n const bv = b.updatedAt ?? ''\n return av < bv ? 1 : av > bv ? -1 : 0\n })\n .map(toSummary)\n }\n\n async get(id: ProjectId): Promise<Project> {\n const project = this.projects.get(id)\n if (!project) throw new ProjectNotFoundError(id)\n return cloneProject(project)\n }\n\n async create(input: CreateProjectInput): Promise<Project> {\n const slug = (input.slug ?? slugify(input.name)) as Slug\n this.assertIdentity(input.name, slug)\n this.assertSlugAvailable(slug, null)\n\n const settings = mergeSettings(defaultSettings(), input.settings)\n this.assertSettings(settings)\n\n const now = this.clock()\n const project: Project = {\n id: this.nextId(),\n name: input.name.trim(),\n slug,\n createdAt: now,\n updatedAt: now,\n settings,\n }\n this.projects.set(project.id, cloneProject(project))\n this.order.push(project.id)\n return cloneProject(project)\n }\n\n async update(id: ProjectId, input: UpdateProjectInput): Promise<Project> {\n const existing = this.projects.get(id)\n if (!existing) throw new ProjectNotFoundError(id)\n const name = input.name ?? existing.name\n const slug = (input.slug ?? existing.slug) as Slug\n this.assertIdentity(name, slug)\n if (slug !== existing.slug) this.assertSlugAvailable(slug, id)\n\n const settings = mergeSettings(existing.settings, input.settings)\n this.assertSettings(settings)\n\n const updated: Project = {\n ...existing,\n name: name.trim(),\n slug,\n settings,\n updatedAt: this.clock(),\n }\n this.projects.set(id, cloneProject(updated))\n return cloneProject(updated)\n }\n\n async duplicate(id: ProjectId, input: DuplicateProjectInput = {}): Promise<Project> {\n const source = this.projects.get(id)\n if (!source) throw new ProjectNotFoundError(id)\n\n const name = input.name ?? `${source.name} copy`\n const slug = (input.slug ?? this.deriveUniqueSlug(slugify(name) || `${source.slug}-copy`)) as Slug\n this.assertIdentity(name, slug)\n this.assertSlugAvailable(slug, null)\n\n const now = this.clock()\n const copy: Project = {\n ...cloneProject(source),\n id: this.nextId(),\n name: name.trim(),\n slug,\n createdAt: now,\n updatedAt: now,\n }\n this.projects.set(copy.id, cloneProject(copy))\n this.order.push(copy.id)\n return cloneProject(copy)\n }\n\n async delete(id: ProjectId): Promise<void> {\n if (!this.projects.has(id)) throw new ProjectNotFoundError(id)\n this.projects.delete(id)\n const index = this.order.indexOf(id)\n if (index >= 0) this.order.splice(index, 1)\n }\n\n // --- internals -----------------------------------------------------------\n\n private assertIdentity(name: string, slug: string): void {\n const issues = validateProjectIdentity({ name, slug })\n if (issues.length > 0) {\n throw new ProjectValidationError('Project identity is invalid.', issues)\n }\n }\n\n private assertSettings(settings: ProjectSettings): void {\n const issues = validateProjectSettings(settings)\n if (issues.some((i) => i.severity === 'error')) {\n throw new ProjectValidationError('Project settings are invalid.', issues)\n }\n }\n\n private assertSlugAvailable(slug: string, ignoreId: ProjectId | null): void {\n for (const project of this.projects.values()) {\n if (project.id !== ignoreId && project.slug === slug) {\n throw new ProjectConflictError(`A project with slug “${slug}” already exists.`, slug)\n }\n }\n }\n\n private deriveUniqueSlug(base: string): string {\n const taken = new Set([...this.projects.values()].map((p) => p.slug))\n if (!taken.has(base)) return base\n let n = 2\n while (taken.has(`${base}-${n}`)) n += 1\n return `${base}-${n}`\n }\n}\n\n/** Parse-and-throw helper that surfaces a typed validation error for bad seeds. */\nfunction projectSchemaSafeParse(project: Project): Project {\n const result = projectSchema.safeParse(project)\n if (!result.success) {\n throw new ProjectValidationError(\n 'Seed project failed schema validation.',\n result.error.issues.map((i) => ({\n code: 'invalid-name' as const,\n severity: 'error' as const,\n message: i.message,\n path: i.path.map((p) => (typeof p === 'symbol' ? String(p) : p)),\n })),\n )\n }\n return result.data\n}\n\n/** Convenience guard used by callers that prefer a boolean to a thrown error. */\nexport function isBackendUnavailable(error: unknown): error is BackendUnavailableError {\n return error instanceof BackendUnavailableError\n}\n"]}
@@ -60,9 +60,9 @@ export type SectionAvailabilityMap = z.infer<typeof sectionAvailabilityMapSchema
60
60
  */
61
61
  export declare const sectionStateSchema: z.ZodEnum<{
62
62
  error: "error";
63
+ empty: "empty";
63
64
  planned: "planned";
64
65
  unavailable: "unavailable";
65
- empty: "empty";
66
66
  loading: "loading";
67
67
  working: "working";
68
68
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"sections.js","sourceRoot":"","sources":["../../src/studio-core/sections.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,IAAI,CAAC;IACpC,YAAY;IACZ,KAAK;IACL,QAAQ;IACR,YAAY;IACZ,UAAU;CACX,CAAC,CAAA;AAGF,8DAA8D;AAC9D,MAAM,CAAC,MAAM,WAAW,GAAG,eAAe,CAAC,OAAO,CAAA;AASlD,MAAM,CAAC,MAAM,QAAQ,GAAmD;IACtE,UAAU,EAAE;QACV,EAAE,EAAE,YAAY;QAChB,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,2DAA2D;KACzE;IACD,GAAG,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,2CAA2C,EAAE;IAC1F,MAAM,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,qCAAqC,EAAE;IAC7F,UAAU,EAAE;QACV,EAAE,EAAE,YAAY;QAChB,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,gFAAgF;KAC9F;IACD,QAAQ,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,yCAAyC,EAAE;CACxG,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC,CAAA;AAGxF,8CAA8C;AAC9C,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC,MAAM,CAAC,eAAe,EAAE,yBAAyB,CAAC,CAAA;AAGhG;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,IAAI,CAAC;IACvC,OAAO;IACP,SAAS;IACT,OAAO;IACP,aAAa;IACb,SAAS;IACT,SAAS;CACV,CAAC,CAAA;AAGF,6EAA6E;AAC7E,MAAM,UAAU,oBAAoB;IAClC,OAAO,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC,CAA2B,CAAA;AACjG,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,cAAc,CAC5B,GAA2B,EAC3B,EAAa;IAEb,OAAO,GAAG,CAAC,EAAE,CAAC,IAAI,aAAa,CAAA;AACjC,CAAC"}
1
+ {"version":3,"file":"sections.js","sourceRoot":"","sources":["../../src/studio-core/sections.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,IAAI,CAAC;IACpC,YAAY;IACZ,KAAK;IACL,QAAQ;IACR,YAAY;IACZ,UAAU;CACX,CAAC,CAAA;AAGF,8DAA8D;AAC9D,MAAM,CAAC,MAAM,WAAW,GAAG,eAAe,CAAC,OAAO,CAAA;AASlD,MAAM,CAAC,MAAM,QAAQ,GAAmD;IACtE,UAAU,EAAE;QACV,EAAE,EAAE,YAAY;QAChB,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,2DAA2D;KACzE;IACD,GAAG,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,2CAA2C,EAAE;IAC1F,MAAM,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,qCAAqC,EAAE;IAC7F,UAAU,EAAE;QACV,EAAE,EAAE,YAAY;QAChB,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,gFAAgF;KAC9F;IACD,QAAQ,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,yCAAyC,EAAE;CACxG,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC,CAAA;AAGxF,8CAA8C;AAC9C,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC,MAAM,CAAC,eAAe,EAAE,yBAAyB,CAAC,CAAA;AAGhG;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,IAAI,CAAC;IACvC,OAAO;IACP,SAAS;IACT,OAAO;IACP,aAAa;IACb,SAAS;IACT,SAAS;CACV,CAAC,CAAA;AAGF,6EAA6E;AAC7E,MAAM,UAAU,oBAAoB;IAClC,OAAO,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC,CAA2B,CAAA;AACjG,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,cAAc,CAC5B,GAA2B,EAC3B,EAAa;IAEb,OAAO,GAAG,CAAC,EAAE,CAAC,IAAI,aAAa,CAAA;AACjC,CAAC","sourcesContent":["import { z } from 'zod'\n\n/**\n * The top-level Studio surfaces (brief §8.1). The Studio shell preserves the\n * active project while the user moves between these.\n *\n * The former `data` section was retired (EC-167, vision AD-9): external data is\n * a developer concern expressed as typed providers registered in code, surfaced\n * to editors through the CMS Canvas tab — there is no standalone no-code data\n * surface.\n *\n * The former `builder` section was retired (EC-210, vision AD-12): the canvas is\n * no longer a standalone place but a composition-field surface inside the CMS\n * detail editor. The `/builder` route survives only as a redirect.\n */\nexport const sectionIdSchema = z.enum([\n 'components',\n 'cms',\n 'assets',\n 'extensions',\n 'settings',\n])\nexport type SectionId = z.infer<typeof sectionIdSchema>\n\n/** Canonical order in which sections appear in navigation. */\nexport const SECTION_IDS = sectionIdSchema.options\n\nexport interface SectionDescriptor {\n readonly id: SectionId\n readonly label: string\n /** Short description used in tooltips / empty states. */\n readonly description: string\n}\n\nexport const SECTIONS: Readonly<Record<SectionId, SectionDescriptor>> = {\n components: {\n id: 'components',\n label: 'Components',\n description: 'Browse the registry of primitives and project components.',\n },\n cms: { id: 'cms', label: 'CMS', description: 'Model collections, fields, and documents.' },\n assets: { id: 'assets', label: 'Assets', description: 'Manage uploaded media and metadata.' },\n extensions: {\n id: 'extensions',\n label: 'Extensions',\n description: 'Install components, field types, adapters, and templates from the marketplace.',\n },\n settings: { id: 'settings', label: 'Settings', description: 'Configure project metadata and locales.' },\n}\n\n/**\n * Whether a section is usable for a given project. `available` renders the live\n * surface; `planned` is reachable but shows a deterministic placeholder; the\n * section is simply hidden/disabled when `unavailable`.\n */\nexport const sectionAvailabilitySchema = z.enum(['available', 'planned', 'unavailable'])\nexport type SectionAvailability = z.infer<typeof sectionAvailabilitySchema>\n\n/** Availability per section for a project. */\nexport const sectionAvailabilityMapSchema = z.record(sectionIdSchema, sectionAvailabilitySchema)\nexport type SectionAvailabilityMap = z.infer<typeof sectionAvailabilityMapSchema>\n\n/**\n * Deterministic runtime states a section surface can be in (brief §8.1, §11).\n * Distinct from availability: an `available` section may still be `loading` or\n * `error` at runtime.\n */\nexport const sectionStateSchema = z.enum([\n 'empty',\n 'loading',\n 'error',\n 'unavailable',\n 'planned',\n 'working',\n])\nexport type SectionState = z.infer<typeof sectionStateSchema>\n\n/** Every section available — the default for a fully-provisioned project. */\nexport function allSectionsAvailable(): SectionAvailabilityMap {\n return Object.fromEntries(SECTION_IDS.map((id) => [id, 'available'])) as SectionAvailabilityMap\n}\n\n/** Resolve availability for a section, treating an absent entry as `unavailable`. */\nexport function availabilityOf(\n map: SectionAvailabilityMap,\n id: SectionId,\n): SectionAvailability {\n return map[id] ?? 'unavailable'\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/studio-core/validate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/studio-core/validate.ts"],"names":[],"mappings":"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","sourcesContent":["import { isValidLocale, isValidSlug } from './ids'\nimport type { ProjectSettings } from './metadata'\nimport { SECTION_IDS } from './sections'\nimport type { StudioIssue } from './issues'\n\n/**\n * Semantic validation of project settings (brief §7.7, §8.7). Never throws —\n * returns structured issues so the Settings surface can show dirty/invalid\n * states while the user edits. Field *shapes* are checked by\n * `projectSettingsSchema`; this layer checks cross-field and content rules.\n */\nexport function validateProjectSettings(settings: ProjectSettings): StudioIssue[] {\n const issues: StudioIssue[] = []\n\n // Locales -----------------------------------------------------------------\n if (settings.locales.length === 0) {\n issues.push({\n code: 'empty-locales',\n severity: 'error',\n message: 'At least one locale is required.',\n path: ['locales'],\n })\n }\n\n const seenLocales = new Set<string>()\n settings.locales.forEach((locale, index) => {\n if (!isValidLocale(locale)) {\n issues.push({\n code: 'invalid-locale',\n severity: 'error',\n message: `“${locale}” is not a valid locale tag.`,\n path: ['locales', index],\n })\n }\n if (seenLocales.has(locale)) {\n issues.push({\n code: 'duplicate-locale',\n severity: 'error',\n message: `Locale “${locale}” is listed more than once.`,\n path: ['locales', index],\n })\n }\n seenLocales.add(locale)\n })\n\n // Default locale ----------------------------------------------------------\n if (!settings.locales.includes(settings.defaultLocale)) {\n issues.push({\n code: 'default-locale-not-in-locales',\n severity: 'error',\n message: `Default locale “${settings.defaultLocale}” must be one of the configured locales.`,\n path: ['defaultLocale'],\n })\n }\n\n // Environments ------------------------------------------------------------\n if (settings.environments.length === 0) {\n issues.push({\n code: 'no-environments',\n severity: 'error',\n message: 'At least one environment is required.',\n path: ['environments'],\n })\n }\n\n const seenEnvKeys = new Set<string>()\n settings.environments.forEach((env, index) => {\n if (!isValidSlug(env.key)) {\n issues.push({\n code: 'invalid-environment',\n severity: 'error',\n message: `Environment key “${env.key}” must be a valid slug.`,\n path: ['environments', index, 'key'],\n })\n }\n if (env.label.trim().length === 0) {\n issues.push({\n code: 'invalid-environment',\n severity: 'error',\n message: 'Environment label cannot be empty.',\n path: ['environments', index, 'label'],\n })\n }\n if (seenEnvKeys.has(env.key)) {\n issues.push({\n code: 'duplicate-environment',\n severity: 'error',\n message: `Environment key “${env.key}” is used more than once.`,\n path: ['environments', index, 'key'],\n })\n }\n seenEnvKeys.add(env.key)\n })\n\n // Section availability ----------------------------------------------------\n const missing = SECTION_IDS.filter((id) => settings.sectionAvailability[id] === undefined)\n if (missing.length > 0) {\n issues.push({\n code: 'incomplete-section-availability',\n severity: 'warning',\n message: `Section availability is unspecified for: ${missing.join(', ')}.`,\n path: ['sectionAvailability'],\n })\n }\n\n return issues\n}\n\nexport interface ProjectIdentity {\n name: string\n slug: string\n}\n\n/** Validate the identity fields (name + slug) of a project (brief §7.7). */\nexport function validateProjectIdentity(identity: ProjectIdentity): StudioIssue[] {\n const issues: StudioIssue[] = []\n if (identity.name.trim().length === 0) {\n issues.push({\n code: 'invalid-name',\n severity: 'error',\n message: 'Project name cannot be empty.',\n path: ['name'],\n })\n }\n if (!isValidSlug(identity.slug)) {\n issues.push({\n code: 'invalid-slug',\n severity: 'error',\n message: `“${identity.slug}” is not a valid slug (lowercase, hyphen-separated).`,\n path: ['slug'],\n })\n }\n return issues\n}\n"]}
@@ -117,6 +117,7 @@ export declare const workspaceProjectBaseSchema: z.ZodObject<{
117
117
  localized: z.ZodOptional<z.ZodBoolean>;
118
118
  titleField: z.ZodOptional<z.ZodString>;
119
119
  singleton: z.ZodOptional<z.ZodBoolean>;
120
+ aliases: z.ZodOptional<z.ZodArray<z.ZodString>>;
120
121
  }, z.core.$strip>>>;
121
122
  routes: z.ZodOptional<z.ZodUnion<readonly [z.ZodArray<z.ZodObject<{
122
123
  id: z.ZodString;
@@ -188,6 +189,7 @@ export declare const workspaceProjectEntrySchema: z.ZodObject<{
188
189
  localized: z.ZodOptional<z.ZodBoolean>;
189
190
  titleField: z.ZodOptional<z.ZodString>;
190
191
  singleton: z.ZodOptional<z.ZodBoolean>;
192
+ aliases: z.ZodOptional<z.ZodArray<z.ZodString>>;
191
193
  }, z.core.$strip>>>;
192
194
  routes: z.ZodOptional<z.ZodUnion<readonly [z.ZodArray<z.ZodObject<{
193
195
  id: z.ZodString;
@@ -262,6 +264,7 @@ export declare const elytraConfigInputSchema: z.ZodObject<{
262
264
  localized: z.ZodOptional<z.ZodBoolean>;
263
265
  titleField: z.ZodOptional<z.ZodString>;
264
266
  singleton: z.ZodOptional<z.ZodBoolean>;
267
+ aliases: z.ZodOptional<z.ZodArray<z.ZodString>>;
265
268
  }, z.core.$strip>>>;
266
269
  routes: z.ZodOptional<z.ZodUnion<readonly [z.ZodArray<z.ZodObject<{
267
270
  id: z.ZodString;
@@ -331,6 +334,7 @@ export declare const elytraConfigInputSchema: z.ZodObject<{
331
334
  localized: z.ZodOptional<z.ZodBoolean>;
332
335
  titleField: z.ZodOptional<z.ZodString>;
333
336
  singleton: z.ZodOptional<z.ZodBoolean>;
337
+ aliases: z.ZodOptional<z.ZodArray<z.ZodString>>;
334
338
  }, z.core.$strip>>>;
335
339
  routes: z.ZodOptional<z.ZodUnion<readonly [z.ZodArray<z.ZodObject<{
336
340
  id: z.ZodString;
@@ -1 +1 @@
1
- {"version":3,"file":"workspace-config.js","sourceRoot":"","sources":["../../src/studio-core/workspace-config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workspace-config.js","sourceRoot":"","sources":["../../src/studio-core/workspace-config.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod'\nimport { collectionDefSchema, redirectRecordSchema, routeRecordSchema } from '@elytracms/core/cms-core'\nimport type { CollectionDef, RedirectRecord, RouteRecord } from '@elytracms/core/cms-core'\nimport type { ComponentManifest } from '@elytracms/core/component-registry'\nimport { isValidSlug, localeSchema } from './ids'\nimport { environmentSchema, defaultEnvironments, exportTargetSchema } from './metadata'\nimport type { Environment, ExportTarget, Project, ProjectSettings } from './metadata'\nimport { allSectionsAvailable, sectionAvailabilityMapSchema } from './sections'\nimport type { SectionAvailabilityMap } from './sections'\nimport { validateProjectSettings } from './validate'\n\n/**\n * Code-first workspace config — `elytra.config.ts` (EC-154, vision AD-8).\n *\n * A repo declares its projects as code: the config file default-exports\n * `defineElytraConfig({...})` with an array of project configs, optionally\n * composed over a shared `base`. The studio's project switcher and the CLI\n * (`builder init --project <slug>`) both consume the same schema and the same\n * structured validation, so an invalid config fails identically everywhere —\n * never silently.\n *\n * Composition semantics (deliberately simple and deterministic): each project\n * entry is merged over `base` **per field** — a field set on the entry replaces\n * the base field entirely (arrays and objects are not deep-merged). Fields set\n * on neither fall back to documented defaults.\n *\n * Validation follows the EC-028/EC-029 split: Zod checks field *shapes*;\n * cross-field and cross-project rules (duplicate slugs, default locale ∈\n * locales, empty projects) surface as structured, path-located\n * {@link WorkspaceConfigIssue}s — never throws. The settings-shaped parts reuse\n * the EC-028 `validateProjectSettings` rules verbatim.\n */\n\n// --- Shapes (Zod) -------------------------------------------------------------\n\n/** Where a project's collection schema lives: a host-repo module, or managed in the studio. */\nexport const workspaceSchemaRefSchema = z.union([\n z.literal('inline'),\n z.object({ module: z.string().min(1) }),\n])\nexport type WorkspaceSchemaRef = z.infer<typeof workspaceSchemaRefSchema>\n\n/**\n * A project's components, config-as-code (EC-223 mount contract): the live\n * (manifest + implementation) pairs the studio registry and host runtime\n * register. Replaces the old `{ dir }`/`{ package }` string pointer — components\n * are code, injected directly into the config, not located by a path the studio\n * must import through an alias (the `@site` trap). The implementation is opaque to\n * studio-core (a host React component); the serializable projection derives the\n * manifests. Validated opaquely, like the `routes`/`redirects` derive functions.\n */\nexport interface HostComponentEntry {\n manifest: ComponentManifest\n implementation: unknown\n}\nexport const componentsInputSchema = z.custom<readonly HostComponentEntry[]>(\n (value) => Array.isArray(value),\n { message: 'components must be an array of { manifest, implementation } pairs' },\n)\n\n/** Which Convex deployment/dataset backs a project (or one of its environments). */\nexport const workspaceConvexRefSchema = z.object({\n /** Deployment reference (URL or named deployment). */\n deployment: z.string().min(1).optional(),\n /** Dataset/namespace within the deployment, for shared deployments. */\n dataset: z.string().min(1).optional(),\n})\nexport type WorkspaceConvexRef = z.infer<typeof workspaceConvexRefSchema>\n\n/**\n * A deployment environment in config. Extends the backend `{ key, label }` shape\n * with an optional per-environment `convex` ref so a project can target a\n * different deployment/dataset per environment (Sanity project↔dataset style,\n * e.g. prod vs staging). The project-level `convex` ref is the default.\n *\n * `frontendUrl` (EC-215) is the public base URL of the live site for this\n * environment (e.g. `https://staging.acme.com`); the project-level `frontendUrl`\n * is the fallback. The studio uses it to show/link a document's live URL\n * (EC-216) and the host's sitemap uses it as its `baseUrl`.\n */\nexport const workspaceEnvironmentSchema = environmentSchema.extend({\n convex: workspaceConvexRefSchema.optional(),\n frontendUrl: z.string().url().optional(),\n})\nexport type WorkspaceEnvironment = z.infer<typeof workspaceEnvironmentSchema>\n\n/**\n * A `routes` / `redirects` derive function: `(collections) => RouteRecord[]`,\n * modelled on `next.config`'s `redirects()`/`rewrites()` (Oli, 2026-06-16). The\n * resolver runs it once against the project's resolved collections (EC-207). May\n * also be a static `RouteRecord[]` — the function is the general form.\n */\nexport type RoutesDerive = (collections: CollectionDef[]) => RouteRecord[]\nexport type RedirectsDerive = (collections: CollectionDef[]) => RedirectRecord[]\n\nconst routesInputSchema = z.union([\n z.array(routeRecordSchema),\n z.custom<RoutesDerive>((value) => typeof value === 'function', {\n message: 'routes must be a RouteRecord[] or a (collections) => RouteRecord[] function',\n }),\n])\nconst redirectsInputSchema = z.union([\n z.array(redirectRecordSchema),\n z.custom<RedirectsDerive>((value) => typeof value === 'function', {\n message: 'redirects must be a RedirectRecord[] or a (collections) => RedirectRecord[] function',\n }),\n])\n\n/** The shared, overridable fields — usable as `base` and per project. */\nexport const workspaceProjectBaseSchema = z.object({\n schema: workspaceSchemaRefSchema.optional(),\n locales: z.array(localeSchema).optional(),\n defaultLocale: localeSchema.optional(),\n components: componentsInputSchema.optional(),\n convex: workspaceConvexRefSchema.optional(),\n /**\n * Public base URL of the live site (EC-215), e.g. `https://acme.com`. The\n * project-level fallback; an environment may override it with its own\n * `frontendUrl`. Consumed by the studio (a document's live URL, EC-216) and\n * the host's sitemap (`baseUrl`). Connection secrets stay in env; this is a\n * public address, so it lives in config.\n */\n frontendUrl: z.string().url().optional(),\n environments: z.array(workspaceEnvironmentSchema).optional(),\n /**\n * CMS collection schema (AD-11, EC-183): collections are declared in config,\n * not the backend. The studio (CMS table/detail, validation, binding pickers)\n * and the host (delivery shape, depth-1 population) both read them from here;\n * the backend stores documents only. Reuses the canonical `@elytracms/core/cms-core`\n * `CollectionDef` shape — no new format. Defaults to `[]`.\n */\n collections: z.array(collectionDefSchema).optional(),\n /**\n * Routes as code (AD-3/AD-11, EC-207): the URL→document map is declared in\n * config — a `RouteRecord[]` or a `(collections) => RouteRecord[]` derive — not\n * stored in the backend. The resolver materializes it against the resolved\n * collections; the studio renders the result read-only with conflict/loop\n * detection; the host resolves URLs through the config-sourced router.\n */\n routes: routesInputSchema.optional(),\n /** Redirects as code, same shape as {@link routes} (EC-207). */\n redirects: redirectsInputSchema.optional(),\n /** Code-generation target (EC-179 item 5); defaults to `next-app-router`. */\n exportTarget: exportTargetSchema.optional(),\n /** Per-section availability (EC-179 item 5); defaults to all sections available. */\n sectionAvailability: sectionAvailabilityMapSchema.optional(),\n})\nexport type WorkspaceProjectBase = z.infer<typeof workspaceProjectBaseSchema>\n\n/** One project entry: identity is required, everything else may come from `base`. */\nexport const workspaceProjectEntrySchema = workspaceProjectBaseSchema.extend({\n name: z.string().min(1).max(120),\n slug: z.string().min(1),\n})\nexport type WorkspaceProjectEntry = z.infer<typeof workspaceProjectEntrySchema>\n\n/** The full `elytra.config.ts` value: shared base + an array of project configs. */\nexport const elytraConfigInputSchema = z.object({\n base: workspaceProjectBaseSchema.optional(),\n projects: z.array(workspaceProjectEntrySchema),\n})\nexport type ElytraConfigInput = z.infer<typeof elytraConfigInputSchema>\n\n/**\n * Typed identity helper for `elytra.config.ts` — keeps the config file\n * declarative (like Vite's `defineConfig`). Validation happens on load via\n * {@link resolveWorkspaceConfig}, not here, so a config file never throws.\n *\n * @example\n * ```ts\n * // elytra.config.ts\n * import { defineElytraConfig } from '@elytracms/core/export-sync'\n *\n * export default defineElytraConfig({\n * base: {\n * locales: ['en', 'de'],\n * defaultLocale: 'en',\n * components: { package: '@acme/site-components' },\n * schema: { module: './src/schema/collections' },\n * },\n * projects: [\n * { name: 'Acme Marketing', slug: 'acme-marketing' },\n * {\n * name: 'Acme Store',\n * slug: 'acme-store',\n * convex: { deployment: 'https://store.convex.cloud' },\n * locales: ['en'],\n * defaultLocale: 'en',\n * },\n * ],\n * })\n * ```\n */\nexport function defineElytraConfig(config: ElytraConfigInput): ElytraConfigInput {\n return config\n}\n\n// --- Structured issues ----------------------------------------------------------\n\n/** Stable codes for workspace-config validation issues (EC-154). */\nexport const workspaceConfigIssueCodeSchema = z.enum([\n // Shape / loading\n 'invalid-config-shape',\n 'missing-default-export',\n // Cross-project rules\n 'empty-projects',\n 'duplicate-project-slug',\n // Per-project identity\n 'invalid-name',\n 'invalid-slug',\n // Settings-shaped rules (mirrors the EC-028 StudioIssue codes)\n 'empty-locales',\n 'duplicate-locale',\n 'invalid-locale',\n 'default-locale-not-in-locales',\n 'missing-default-locale',\n 'no-environments',\n 'duplicate-environment',\n 'invalid-environment',\n])\nexport type WorkspaceConfigIssueCode = z.infer<typeof workspaceConfigIssueCodeSchema>\n\n/**\n * A structured, file-located workspace-config issue. `path` addresses the\n * config object (e.g. `['projects', 1, 'defaultLocale']`); `file` is attached\n * by the loader when the config came from a file.\n */\nexport interface WorkspaceConfigIssue {\n code: WorkspaceConfigIssueCode\n severity: 'error' | 'warning'\n message: string\n path: ReadonlyArray<string | number>\n /** Source file, when the config was loaded from one (e.g. `elytra.config.ts`). */\n file?: string\n}\n\n// --- Resolution -----------------------------------------------------------------\n\n/** A project config after base + override composition and defaulting. */\nexport interface ResolvedWorkspaceProject {\n name: string\n slug: string\n schema: WorkspaceSchemaRef\n locales: string[]\n defaultLocale: string\n components?: readonly HostComponentEntry[]\n convex?: WorkspaceConvexRef\n /** Public base URL of the live site (EC-215); the project-level fallback an\n * environment's own `frontendUrl` overrides. `undefined` when unconfigured. */\n frontendUrl?: string\n environments: WorkspaceEnvironment[]\n /** CMS collections declared in config (AD-11, EC-183); `[]` when none. */\n collections: CollectionDef[]\n /** Routes materialized from config (EC-207); `[]` when none declared. */\n routes: RouteRecord[]\n /** Redirects materialized from config (EC-207); `[]` when none declared. */\n redirects: RedirectRecord[]\n /** Code-generation target (EC-179 item 5). */\n exportTarget: ExportTarget\n /** Per-section availability (EC-179 item 5). */\n sectionAvailability: SectionAvailabilityMap\n}\n\nexport interface WorkspaceConfigResult {\n /** True when no error-severity issues are present. */\n ok: boolean\n /** Resolved projects in config order. Empty when `ok` is false. */\n projects: ResolvedWorkspaceProject[]\n issues: WorkspaceConfigIssue[]\n}\n\nexport interface ResolveWorkspaceConfigOptions {\n /** Attached to every issue as its `file` (e.g. `elytra.config.ts`). */\n file?: string\n}\n\nfunction shapeIssue(message: string, path: ReadonlyArray<string | number>): WorkspaceConfigIssue {\n return { code: 'invalid-config-shape', severity: 'error', message, path }\n}\n\n/**\n * Materialize a `routes`/`redirects` config value (EC-207): run a derive\n * function against the resolved collections, or copy a static array. `undefined`\n * resolves to `[]`.\n */\nfunction materializeRecords<T>(\n input: readonly T[] | ((collections: CollectionDef[]) => T[]) | undefined,\n collections: CollectionDef[],\n): T[] {\n if (input === undefined) return []\n if (typeof input === 'function') return input(collections)\n return [...input]\n}\n\n/**\n * Per-field base + override composition: an entry field replaces the base\n * field entirely; defaults fill what neither sets. `defaultLocale` defaults to\n * the single configured locale (single-locale projects need no ceremony);\n * multi-locale projects must state it — enforced as a structured issue below.\n */\nfunction composeProject(\n base: WorkspaceProjectBase | undefined,\n entry: WorkspaceProjectEntry,\n): { project: ResolvedWorkspaceProject; missingDefaultLocale: boolean } {\n const locales = entry.locales ?? base?.locales ?? ['en']\n const explicitDefault = entry.defaultLocale ?? base?.defaultLocale\n const defaultLocale = explicitDefault ?? (locales.length === 1 ? locales[0]! : '')\n const components = entry.components ?? base?.components\n const convex = entry.convex ?? base?.convex\n // EC-215: project-level frontend URL (an environment may still override it).\n const frontendUrl = entry.frontendUrl ?? base?.frontendUrl\n // Structure-from-config (AD-11, EC-179 item 5): an entry field replaces the\n // base field entirely; documented defaults fill what neither sets.\n const collections = [...(entry.collections ?? base?.collections ?? [])]\n // EC-207: materialize routes/redirects against the resolved collections — a\n // derive function runs once here; a static array passes through.\n const routes = materializeRecords(entry.routes ?? base?.routes, collections)\n const redirects = materializeRecords(entry.redirects ?? base?.redirects, collections)\n return {\n project: {\n name: entry.name,\n slug: entry.slug,\n schema: entry.schema ?? base?.schema ?? 'inline',\n locales: [...locales],\n defaultLocale,\n ...(components !== undefined ? { components } : {}),\n ...(convex !== undefined ? { convex } : {}),\n ...(frontendUrl !== undefined ? { frontendUrl } : {}),\n environments: (entry.environments ?? base?.environments ?? defaultEnvironments()).map(\n (e) => ({ ...e }),\n ),\n collections,\n routes,\n redirects,\n exportTarget: entry.exportTarget ?? base?.exportTarget ?? 'next-app-router',\n sectionAvailability:\n entry.sectionAvailability ?? base?.sectionAvailability ?? allSectionsAvailable(),\n },\n missingDefaultLocale: explicitDefault === undefined && locales.length !== 1,\n }\n}\n\n/**\n * Resolve a project's public site URL for a given environment (EC-215): the\n * environment's own `frontendUrl` when it declares one, else the project-level\n * fallback. `undefined` when neither is configured. The trailing slash (if any)\n * is preserved as authored — callers that build paths should normalize.\n */\nexport function frontendUrlForEnvironment(\n project: ResolvedWorkspaceProject,\n environmentKey?: string,\n): string | undefined {\n const env =\n environmentKey !== undefined\n ? project.environments.find((e) => e.key === environmentKey)\n : undefined\n return env?.frontendUrl ?? project.frontendUrl\n}\n\n/**\n * Build the studio's `Project` from a resolved config entry (vision AD-8). The\n * slug is the canonical id; identity is config-owned, so there are no backend\n * timestamps. This is how the studio sources project identity at runtime.\n */\nexport function configProject(project: ResolvedWorkspaceProject): Project {\n return {\n id: project.slug,\n name: project.name,\n slug: project.slug,\n settings: toProjectSettings(project),\n }\n}\n\n/** Map a resolved project onto the EC-028 settings shape (export target + sections defaulted). */\nexport function toProjectSettings(project: ResolvedWorkspaceProject): ProjectSettings {\n return {\n locales: [...project.locales],\n defaultLocale: project.defaultLocale,\n // Settings carry only the backend `{ key, label }` shape — the per-environment\n // `convex` ref is config wiring, not project settings.\n environments: project.environments.map((e) => ({ key: e.key, label: e.label })),\n // EC-183: export target + section availability are config-owned (no longer\n // hardcoded defaults) — the resolver applied the defaults in `composeProject`.\n exportTarget: project.exportTarget,\n sectionAvailability: project.sectionAvailability,\n }\n}\n\n// --- Serializable projection + the RSC-boundary convention (EC-223 mount contract) ---\n\n/**\n * **The RSC-boundary convention.** A code-first config is config-AS-CODE: it holds\n * live code — component `implementation`s (host React components) and `routes`/\n * `redirects` derive functions — none of it serializable. That live config is\n * **server/build-only**. It may be *referenced* server-side (rendered to HTML in an\n * RSC, or held in an in-process registry that the client bundle also imports as a\n * normal ESM module) — a shared module import is not a wire boundary. But it must\n * NEVER be passed across a true server→client serialization boundary:\n *\n * - a React Server Component → Client Component (`'use client'`) props boundary\n * (the `@elytracms/next` delivery runtime),\n * - a TanStack Start SSR → client-hydration boundary (a router `loader`/`context`\n * that dehydrates, `useLoaderData`),\n * - any `JSON.stringify` channel (`unstable_cache` values, the\n * `VITE_ELYTRA_WORKSPACE` env channel, fixtures, codegen output).\n *\n * Only DERIVED DATA crosses: {@link toSerializableSchema} (this module) for the full\n * structural schema, or {@link configProject} for the studio's data-only `Project`\n * shape — both strip every implementation/function. Passing the live config (or a\n * {@link ResolvedWorkspaceProject} still carrying `components`) across such a boundary\n * would throw “Functions cannot be passed to Client Components” under RSC, or silently\n * drop the implementations under SSR hydration. Audited 2026-06-20 (EC-223): every\n * boundary in the studio, the delivery runtime, and codegen honours this — live\n * implementations stay in-process; what crosses is always a data projection.\n */\n\n/**\n * One project's structure as a **serializable projection** — the data subset of a\n * resolved config project with all CODE stripped out. Every field is\n * JSON-serializable: no live React component, no derive function, nothing that\n * cannot survive `JSON.stringify` or a server→client RSC props boundary.\n *\n * Mirrors {@link ResolvedWorkspaceProject} with exactly one substitution:\n * `components` drops from the live `HostComponentEntry[]` ({@link HostComponentEntry})\n * to the serializable `ComponentManifest[]` — the implementations are removed, the\n * manifests kept (this is the derivation the `HostComponentEntry` doc names). The\n * `routes`/`redirects` derive functions are already materialized to data by the\n * resolver, and `collections` is the canonical cms-core `CollectionDef` data shape.\n */\nexport interface SerializableProject {\n name: string\n slug: string\n schema: WorkspaceSchemaRef\n locales: string[]\n defaultLocale: string\n /** Component MANIFESTS only — the live implementations are dropped (code). `[]` when none. */\n components: ComponentManifest[]\n convex?: WorkspaceConvexRef\n frontendUrl?: string\n environments: WorkspaceEnvironment[]\n collections: CollectionDef[]\n routes: RouteRecord[]\n redirects: RedirectRecord[]\n exportTarget: ExportTarget\n sectionAvailability: SectionAvailabilityMap\n}\n\n/**\n * The serializable schema for a whole workspace: the {@link WorkspaceConfigResult}\n * shape with every project projected to its code-free {@link SerializableProject}.\n * `ok`/`issues` pass through unchanged so portable validation keeps the structured\n * boot-error story; `projects` is empty when `ok` is false (resolution failed).\n */\nexport interface SerializableSchema {\n ok: boolean\n projects: SerializableProject[]\n issues: WorkspaceConfigIssue[]\n}\n\n/**\n * Project one resolved config project to its serializable form (EC-223 mount\n * contract). The single code→data step is `components`: each live\n * `{ manifest, implementation }` collapses to its `manifest`, dropping the opaque\n * host React component. Arrays are copied so the projection is an owned snapshot;\n * deterministic — the same resolved project always yields the same value.\n */\nexport function toSerializableProject(project: ResolvedWorkspaceProject): SerializableProject {\n return {\n name: project.name,\n slug: project.slug,\n schema: project.schema,\n locales: [...project.locales],\n defaultLocale: project.defaultLocale,\n // CODE → DATA: drop each component's live implementation, keep its manifest.\n // This is the derivation `HostComponentEntry` names (\"the serializable\n // projection derives the manifests\"); the only non-serializable field there is.\n components: (project.components ?? []).map((entry) => entry.manifest),\n ...(project.convex !== undefined ? { convex: project.convex } : {}),\n ...(project.frontendUrl !== undefined ? { frontendUrl: project.frontendUrl } : {}),\n environments: project.environments.map((e) => ({ ...e })),\n collections: [...project.collections],\n routes: [...project.routes],\n redirects: [...project.redirects],\n exportTarget: project.exportTarget,\n sectionAvailability: project.sectionAvailability,\n }\n}\n\n/**\n * **`toSerializableSchema(config)`** — the EC-223 serializable-schema projection.\n * Resolve a code-first config (running base+override composition and the\n * `routes`/`redirects` derives), then strip code from every project. The result\n * is a pure-data snapshot of the workspace's structure — the portable-validation\n * artifact, the AI/CLI codegen target (EC-209), the fixtures source, and the only\n * thing that may cross a server→client RSC boundary (never the live config).\n *\n * Never throws: an invalid config returns `{ ok: false, projects: [], issues }`,\n * exactly as {@link resolveWorkspaceConfig} reports it. Deterministic.\n */\nexport function toSerializableSchema(\n config: ElytraConfigInput,\n options: ResolveWorkspaceConfigOptions = {},\n): SerializableSchema {\n const result = resolveWorkspaceConfig(config, options)\n return {\n ok: result.ok,\n projects: result.projects.map(toSerializableProject),\n issues: result.issues,\n }\n}\n\n/**\n * Validate + resolve a raw config value (the default export of\n * `elytra.config.ts`, or env-injected JSON). Never throws: every failure mode\n * is a structured, path-located {@link WorkspaceConfigIssue}. Deterministic —\n * the same input always yields byte-identical results.\n */\nexport function resolveWorkspaceConfig(\n value: unknown,\n options: ResolveWorkspaceConfigOptions = {},\n): WorkspaceConfigResult {\n const issues: WorkspaceConfigIssue[] = []\n\n // 1. Shape (Zod). Shape failures are terminal — nothing to resolve.\n const parsed = elytraConfigInputSchema.safeParse(value)\n if (!parsed.success) {\n for (const issue of parsed.error.issues) {\n issues.push(\n shapeIssue(\n issue.message,\n issue.path.map((p) => (typeof p === 'symbol' ? String(p) : p)),\n ),\n )\n }\n return finalize([], issues, options)\n }\n const config = parsed.data\n\n // 2. Cross-project rules.\n if (config.projects.length === 0) {\n issues.push({\n code: 'empty-projects',\n severity: 'error',\n message: 'The workspace config declares no projects. Add at least one project entry.',\n path: ['projects'],\n })\n }\n\n const seenSlugs = new Map<string, number>()\n const projects: ResolvedWorkspaceProject[] = []\n\n config.projects.forEach((entry, index) => {\n const at = (...rest: Array<string | number>) => ['projects', index, ...rest]\n\n // Identity (mirrors EC-028 validateProjectIdentity).\n if (entry.name.trim().length === 0) {\n issues.push({\n code: 'invalid-name',\n severity: 'error',\n message: 'Project name cannot be empty.',\n path: at('name'),\n })\n }\n if (!isValidSlug(entry.slug)) {\n issues.push({\n code: 'invalid-slug',\n severity: 'error',\n message: `“${entry.slug}” is not a valid slug (lowercase, hyphen-separated).`,\n path: at('slug'),\n })\n }\n const firstIndex = seenSlugs.get(entry.slug)\n if (firstIndex !== undefined) {\n issues.push({\n code: 'duplicate-project-slug',\n severity: 'error',\n message: `Project slug “${entry.slug}” is also used by projects[${firstIndex}]. Slugs must be unique across the workspace.`,\n path: at('slug'),\n })\n } else {\n seenSlugs.set(entry.slug, index)\n }\n\n // Composition + settings-shaped rules (reuses EC-028 validateProjectSettings).\n const { project, missingDefaultLocale } = composeProject(config.base, entry)\n if (missingDefaultLocale) {\n issues.push({\n code: 'missing-default-locale',\n severity: 'error',\n message: `Project “${entry.slug}” configures ${project.locales.length === 0 ? 'no' : 'multiple'} locales but no defaultLocale. State which locale is the default.`,\n path: at('defaultLocale'),\n })\n }\n // Guard: validateProjectSettings would also flag '' ∉ locales; skip the\n // redundant report when the default is missing entirely.\n const settingsIssues = validateProjectSettings(toProjectSettings(project)).filter(\n (issue) =>\n !(missingDefaultLocale && issue.code === 'default-locale-not-in-locales') &&\n issue.code !== 'incomplete-section-availability',\n )\n for (const issue of settingsIssues) {\n issues.push({\n code: issue.code as WorkspaceConfigIssueCode,\n severity: issue.severity,\n message: issue.message,\n path: at(...issue.path),\n })\n }\n\n projects.push(project)\n })\n\n return finalize(projects, issues, options)\n}\n\nfunction finalize(\n projects: ResolvedWorkspaceProject[],\n issues: WorkspaceConfigIssue[],\n options: ResolveWorkspaceConfigOptions,\n): WorkspaceConfigResult {\n const located = options.file ? issues.map((issue) => ({ ...issue, file: options.file! })) : issues\n const ok = !located.some((issue) => issue.severity === 'error')\n return { ok, projects: ok ? projects : [], issues: located }\n}\n\n// --- Module extraction ------------------------------------------------------------\n\n/** Conventional config file name (the CLI also accepts compiled variants). */\nexport const WORKSPACE_CONFIG_FILE = 'elytra.config.ts'\n\n/** File names the loaders probe for, in priority order. */\nexport const WORKSPACE_CONFIG_FILES = [\n 'elytra.config.ts',\n 'elytra.config.mts',\n 'elytra.config.js',\n 'elytra.config.mjs',\n] as const\n\n/**\n * Pull the config value out of a loaded module namespace. The convention is a\n * default export (`export default defineElytraConfig({...})`); a missing one\n * is a structured issue, not a throw.\n */\nexport function extractWorkspaceConfigExport(\n moduleExports: unknown,\n file?: string,\n): { value: unknown } | { issue: WorkspaceConfigIssue } {\n if (typeof moduleExports === 'object' && moduleExports !== null && 'default' in moduleExports) {\n return { value: (moduleExports as { default: unknown }).default }\n }\n return {\n issue: {\n code: 'missing-default-export',\n severity: 'error',\n message:\n 'The workspace config module has no default export. Export the config with `export default defineElytraConfig({...})`.',\n path: [],\n ...(file !== undefined ? { file } : {}),\n },\n }\n}\n"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@elytracms/core",
3
3
  "author": "finaldream <hi@finaldream.de>",
4
- "version": "0.0.7",
4
+ "version": "0.0.9",
5
5
  "license": "MIT",
6
6
  "private": false,
7
7
  "type": "module",