@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":"documents.js","sourceRoot":"","sources":["../../src/operations/documents.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"documents.js","sourceRoot":"","sources":["../../src/operations/documents.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod'\nimport {\n createCollectionRegistry,\n documentKey,\n documentRefSchema,\n documentSchema,\n selfTypeDocument,\n validateDocument,\n} from '@elytracms/core/cms-core'\nimport type { CmsDocument, CollectionDef, DocumentRef } from '@elytracms/core/cms-core'\nimport { extractReferences } from '@elytracms/core/persistence'\nimport {\n OperationFailure,\n bindOperation,\n defineCommand,\n defineQuery,\n strictReferenceConflictError,\n validationError,\n} from './core'\nimport { projectIdSchema } from '@elytracms/core/studio-core'\nimport type { ConflictReferrer, OperationContext, OperationsRuntime } from './core'\n\n/**\n * CMS document operations (EC-139). Covers the studio's document mutations —\n * create/save (upsert), delete, and draft/published transitions — plus the\n * import flow, which is upserts in a batch. Document version history (EC-224)\n * adds `snapshot` / `listVersions` / `restore` over the append-only version\n * store; publish/unpublish move to the version pointer in a later step.\n */\n\n/**\n * Enforce the collection's field rules at PUBLISH (EC-168; moved off upsert in\n * EC-225): publishing — not every draft write — is the validation gate, so the\n * continuous draft may be saved while incomplete/invalid (the Sanity model) but\n * a *published* version must satisfy required/min/max/pattern/options\n * constraints. Rejection is a standard validation `OperationError` with per-field\n * issues; the studio surfaces the same issues live. Scope (deliberate):\n *\n * - No saved schema → nothing to validate against; the write proceeds (matches\n * the persistence adapters, which only shape-check in that case).\n * - Collection not declared in config → nothing to validate against; the write\n * proceeds (EC-183, AD-11). CMS collection schemas are config-owned and the\n * backend is a data store; studio **system** collections (routes/views/\n * sources) are not declared in config, and content documents are validated by\n * the studio against the session registry pre-dispatch. The operation enforces\n * field rules only for collections the config declares.\n * - Only `error`-severity issues block. Without the studio's session context\n * there is no document store or locale config here, so relation/asset target\n * existence and per-locale completeness (warnings) stay UI/studio-validation\n * concerns — the operation rejects hard field-rule violations only.\n * - **Composition validity is studio-enforced** (EC-225): this layer has no\n * component registry, so `blocks`/`richText` composition rules (the field\n * `allow` leash) are NOT checked here — only scalar field rules. Every publish\n * path runs the composition-aware studio `validate()` first (detail editor +\n * bulk publish), which is the invariant that keeps invalid compositions\n * unpublished.\n */\n/**\n * Self-type a document's fields through the schema-as-lens before it is persisted\n * (EC-277). Document-level only — relation/asset/object — because the operations\n * layer has no component registry (EC-225); a composition's static props are\n * self-typed by the studio pre-dispatch (which holds the registry). Drift-tolerant:\n * no saved schema or an undeclared collection returns the document unchanged.\n */\nasync function selfTypeForPersist(\n context: OperationContext,\n projectId: string,\n document: CmsDocument,\n): Promise<CmsDocument> {\n const schema = await context.adapter.cms.findSchema(projectId)\n const collection = schema?.collections.find((c) => c.id === document.collection)\n return collection ? selfTypeDocument(document, collection) : document\n}\n\nasync function assertFieldRules(\n context: OperationContext,\n projectId: string,\n document: CmsDocument,\n): Promise<void> {\n const schema = await context.adapter.cms.findSchema(projectId)\n if (!schema) return\n const registry = createCollectionRegistry(schema.collections)\n // Undeclared collection (system/stray) → no config field-rules to enforce here.\n if (!registry.has(document.collection)) return\n const violations = validateDocument(registry, document).filter(\n (issue) => issue.severity === 'error',\n )\n if (violations.length === 0) return\n throw new OperationFailure(\n validationError(\n `Document “${document.collection}:${document.id}” violates its collection schema.`,\n violations.map((issue) => ({\n code: issue.code,\n message: issue.message,\n path: [...issue.path],\n domain: 'cms',\n })),\n ),\n )\n}\n\n// --- Strict referential integrity (EC-173) -----------------------------------------\n//\n// References are weak by default: deleting or unpublishing a referenced\n// document is allowed, and the breakage surfaces as explicit validation\n// issues + delivery fallbacks. A relation field declaring `strict: true`\n// inverts this for its targets: while references through that field exist,\n// `documents.delete` is blocked — and while *published* ones do,\n// `documents.unpublish` is blocked too. The failure is a structured\n// conflict error enumerating every blocking referrer (collection/id/field/\n// path/state) so UIs can deep-link to each one.\n\ntype IntegrityMode = 'delete' | 'unpublish'\n\n/** The owning field name of a reference-index path (`values/...`/`localized/...`). */\nfunction fieldNameOfReferencePath(path: string): string | undefined {\n const tokens = path.split('/')\n if (tokens[0] === 'values') return tokens[1]\n if (tokens[0] === 'localized') return tokens[2]\n return undefined\n}\n\n/** The strict relation field names per collection that target `targetCollection`. */\nfunction strictFieldsByCollection(\n collections: readonly CollectionDef[],\n targetCollection: string,\n): Map<string, Set<string>> {\n const byCollection = new Map<string, Set<string>>()\n for (const collection of collections) {\n for (const field of collection.fields) {\n if (field.type !== 'relation' || field.strict !== true) continue\n if (field.target !== targetCollection) continue\n let names = byCollection.get(collection.id)\n if (!names) {\n names = new Set()\n byCollection.set(collection.id, names)\n }\n names.add(field.name)\n }\n }\n return byCollection\n}\n\n/**\n * Enumerate the documents whose strict relation fields reference `ref`.\n * Computed directly from the live documents (not the EC-155 index, which is\n * maintained asynchronously) so enforcement can never act on a stale view.\n * For `unpublish`, only *published* referrers block — a draft-only reference\n * never serves the published site, so unpublishing stays allowed.\n */\nasync function collectStrictReferrers(\n context: OperationContext,\n projectId: string,\n ref: DocumentRef,\n mode: IntegrityMode,\n): Promise<ConflictReferrer[]> {\n const schema = await context.adapter.cms.findSchema(projectId)\n if (!schema) return []\n const strictFields = strictFieldsByCollection(schema.collections, ref.collection)\n if (strictFields.size === 0) return []\n\n const targetKey = documentKey(ref)\n const referrers: ConflictReferrer[] = []\n for (const record of await context.adapter.cms.listDocuments(projectId)) {\n const doc = record.document\n if (doc.collection === ref.collection && doc.id === ref.id) continue\n const fields = strictFields.get(doc.collection)\n if (!fields) continue\n // EC-224: \"published\" is the version pointer (`publishedVersion`). Unpublish\n // is blocked only by referrers that actually serve the published site; the\n // reported state reflects that effective publish status.\n const referrerPublished = record.publishedVersion !== undefined\n if (mode === 'unpublish' && !referrerPublished) continue\n // EC-277: the stored document self-describes, so extraction is schema-free.\n for (const outbound of extractReferences(doc)) {\n if (outbound.kind !== 'relation-field') continue\n if (outbound.target.type !== 'document' || outbound.target.id !== targetKey) continue\n const field = fieldNameOfReferencePath(outbound.path)\n if (field === undefined || !fields.has(field)) continue\n referrers.push({\n collection: doc.collection,\n id: doc.id,\n field,\n path: outbound.path,\n state: referrerPublished ? 'published' : 'draft',\n })\n }\n }\n return referrers\n}\n\n/** Throw a structured conflict (never a raw error) when strict referrers block. */\nasync function assertNoStrictReferrers(\n context: OperationContext,\n projectId: string,\n ref: DocumentRef,\n mode: IntegrityMode,\n): Promise<void> {\n const referrers = await collectStrictReferrers(context, projectId, ref, mode)\n if (referrers.length === 0) return\n const targetKey = documentKey(ref)\n const named = referrers\n .slice(0, 3)\n .map((r) => `“${r.collection}:${r.id}” (field “${r.field}”)`)\n .join(', ')\n const suffix = referrers.length > 3 ? `, and ${referrers.length - 3} more` : ''\n throw new OperationFailure(\n strictReferenceConflictError(\n targetKey,\n `Cannot ${mode} “${targetKey}”: ${referrers.length} ${\n referrers.length === 1 ? 'document references' : 'documents reference'\n } it through strict relation fields — ${named}${suffix}. Remove these references first.`,\n referrers,\n ),\n )\n}\n\nexport const upsertDocumentInputSchema = z.object({\n projectId: projectIdSchema,\n document: documentSchema,\n})\n\nexport const documentRefInputSchema = z.object({\n projectId: projectIdSchema,\n ref: documentRefSchema,\n})\n\nexport const listDocumentsInputSchema = z.object({\n projectId: projectIdSchema,\n collection: z.string().min(1).optional(),\n})\n\nexport const snapshotDocumentInputSchema = z.object({\n projectId: projectIdSchema,\n ref: documentRefSchema,\n label: z.string().min(1).optional(),\n})\n\nexport const restoreDocumentInputSchema = z.object({\n projectId: projectIdSchema,\n ref: documentRefSchema,\n /** The recorded version to restore as the new working draft. */\n version: z.number().int().positive(),\n})\n\nexport const pinVersionInputSchema = z.object({\n projectId: projectIdSchema,\n ref: documentRefSchema,\n /** The already-recorded version to pin live. */\n version: z.number().int().positive(),\n})\n\nexport const documentOperationDefinitions = {\n upsert: defineCommand({\n name: 'documents.upsert',\n domain: 'documents',\n description: 'Insert or update a CMS document (keyed by collection + id).',\n input: upsertDocumentInputSchema,\n execute: async (context, input) => {\n // EC-277: self-type document fields through the schema-as-lens before persist —\n // the spine every writer crosses, so relation/asset/object values self-describe\n // at rest (composition static props need the registry, self-typed in the studio\n // pre-dispatch). Drift-tolerant: no schema / undeclared collection → pass through.\n const document = await selfTypeForPersist(context, input.projectId, input.document)\n // EC-225: the draft store accepts in-progress (possibly invalid) drafts —\n // field-rule validation is enforced at PUBLISH, not on every write, so\n // autosave never rejects a half-finished edit. The input schema still\n // shape-checks the document; the studio surfaces field issues live.\n return context.adapter.cms.upsertDocument(input.projectId, document)\n },\n }),\n delete: defineCommand({\n name: 'documents.delete',\n domain: 'documents',\n description: 'Delete a CMS document (blocked while strict relation fields reference it).',\n input: documentRefInputSchema,\n execute: async (context, input) => {\n await assertNoStrictReferrers(context, input.projectId, input.ref, 'delete')\n await context.adapter.cms.deleteDocument(input.projectId, input.ref)\n return { ref: input.ref }\n },\n }),\n get: defineQuery({\n name: 'documents.get',\n domain: 'documents',\n description: 'Load a CMS document by collection + id.',\n input: documentRefInputSchema,\n execute: (context, input) => context.adapter.cms.getDocument(input.projectId, input.ref),\n }),\n list: defineQuery({\n name: 'documents.list',\n domain: 'documents',\n description: 'List CMS documents, optionally filtered to one collection.',\n input: listDocumentsInputSchema,\n execute: (context, input) =>\n context.adapter.cms.listDocuments(input.projectId, input.collection),\n }),\n // --- Version history (EC-224) ----------------------------------------------\n snapshot: defineCommand({\n name: 'documents.snapshot',\n domain: 'documents',\n description: 'Record the current draft as a new version without publishing.',\n input: snapshotDocumentInputSchema,\n execute: async (context, input) => {\n const current = await context.adapter.cms.getDocument(input.projectId, input.ref)\n return context.adapter.cms.saveDocumentVersion(\n input.projectId,\n current.document,\n input.label ? { label: input.label } : {},\n )\n },\n }),\n listVersions: defineQuery({\n name: 'documents.listVersions',\n domain: 'documents',\n description: 'List a document’s recorded versions, newest first.',\n input: documentRefInputSchema,\n execute: (context, input) =>\n context.adapter.cms.listDocumentVersions(input.projectId, input.ref),\n }),\n restore: defineCommand({\n name: 'documents.restore',\n domain: 'documents',\n description:\n 'Restore a recorded version as the new working draft (snapshots the current draft first so the rollback is itself undoable).',\n input: restoreDocumentInputSchema,\n execute: async (context, input) => {\n // Fail fast if the target version is unknown (RecordNotFoundError → not-found).\n const target = await context.adapter.cms.getDocumentVersion(\n input.projectId,\n input.ref,\n input.version,\n )\n // Snapshot the current draft first so the restore is itself undoable (EC-224).\n const current = await context.adapter.cms.getDocument(input.projectId, input.ref)\n await context.adapter.cms.saveDocumentVersion(input.projectId, current.document, {\n label: 'pre-restore',\n })\n // Load the recorded snapshot as the new working draft (the live row is\n // always the draft now — EC-224 — so no flag to set).\n return context.adapter.cms.upsertDocument(input.projectId, target.snapshot)\n },\n }),\n // --- Publish lifecycle over the version pointer (EC-224) --------------------\n // The Sanity model: publish snapshots the current draft as a new version and\n // pins it live; unpublish clears the pin (draft + history untouched). These\n // replace `documents.setState` as the studio's publish path.\n publish: defineCommand({\n name: 'documents.publish',\n domain: 'documents',\n description: 'Publish a document: snapshot the current draft as a new version and pin it live.',\n input: documentRefInputSchema,\n execute: async (context, input) => {\n const current = await context.adapter.cms.getDocument(input.projectId, input.ref)\n // EC-225: publish is the validation gate — a published version must satisfy\n // the collection's field rules even though the draft may be saved invalid.\n await assertFieldRules(context, input.projectId, current.document)\n // Record the current draft verbatim as the published version and pin it.\n // The published perspective serves this recorded snapshot through the\n // version pointer (`DocumentHistory.published`) — independent of any flat\n // `state` flag — so the A1a `state:'published'` stamp is gone (EC-224 B-1):\n // every published reader (the host wrap, the in-Convex kit, the Next\n // adapter) now resolves a pinned row identically, by the pointer.\n const version = await context.adapter.cms.saveDocumentVersion(\n input.projectId,\n current.document,\n { label: 'published' },\n )\n return context.adapter.cms.publishDocumentVersion(input.projectId, input.ref, version.version)\n },\n }),\n unpublish: defineCommand({\n name: 'documents.unpublish',\n domain: 'documents',\n description:\n 'Unpublish a document: clear the live version pin (blocked while strict relation fields published-reference it).',\n input: documentRefInputSchema,\n execute: async (context, input) => {\n const existing = await context.adapter.cms.findDocument(input.projectId, input.ref)\n if (existing === undefined) {\n // No record — let the persister raise the canonical not-found.\n return context.adapter.cms.unpublishDocument(input.projectId, input.ref)\n }\n // EC-224: published-ness is the version pointer, full stop. A document is\n // published iff its pin is set.\n if (existing.publishedVersion === undefined) {\n // Already unpublished (no pin): an idempotent no-op.\n return existing\n }\n // Unpublish (EC-173): blocked only while *published* documents hold strict\n // references to this one. Clearing the pin is the whole operation — the\n // live row is already the working draft (no flag to reset).\n await assertNoStrictReferrers(context, input.projectId, input.ref, 'unpublish')\n return context.adapter.cms.unpublishDocument(input.projectId, input.ref)\n },\n }),\n pinVersion: defineCommand({\n name: 'documents.pinVersion',\n domain: 'documents',\n description:\n 'Pin an EXISTING recorded version live without re-snapshotting (EC-224). The exact pointer inverse of unpublish/republish — the primitive changeset revert uses to restore a prior pin without a flat `state` flag.',\n input: pinVersionInputSchema,\n execute: async (context, input) => {\n // Publishing (here, re-pinning) is never blocked — only unpublish is\n // (EC-173). `publishDocumentVersion` validates the version exists\n // (RecordNotFoundError → not-found), so a stale pin target fails cleanly.\n return context.adapter.cms.publishDocumentVersion(input.projectId, input.ref, input.version)\n },\n }),\n} as const\n\nexport function createDocumentOperations(runtime: OperationsRuntime) {\n return {\n upsert: bindOperation(runtime, documentOperationDefinitions.upsert),\n delete: bindOperation(runtime, documentOperationDefinitions.delete),\n get: bindOperation(runtime, documentOperationDefinitions.get),\n list: bindOperation(runtime, documentOperationDefinitions.list),\n snapshot: bindOperation(runtime, documentOperationDefinitions.snapshot),\n listVersions: bindOperation(runtime, documentOperationDefinitions.listVersions),\n restore: bindOperation(runtime, documentOperationDefinitions.restore),\n publish: bindOperation(runtime, documentOperationDefinitions.publish),\n unpublish: bindOperation(runtime, documentOperationDefinitions.unpublish),\n pinVersion: bindOperation(runtime, documentOperationDefinitions.pinVersion),\n }\n}\n\nexport type DocumentOperations = ReturnType<typeof createDocumentOperations>\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"graph.js","sourceRoot":"","sources":["../../src/operations/graph.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"graph.js","sourceRoot":"","sources":["../../src/operations/graph.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod'\nimport { normalizeProjectGraph, projectGraphSchema } from '@elytracms/core/project-graph'\nimport { projectIdSchema } from '@elytracms/core/studio-core'\nimport { bindOperation, defineCommand, defineQuery } from './core'\nimport type { OperationsRuntime } from './core'\n\n/**\n * Graph operations (EC-139, reshaped by EC-187). The project graph is now\n * LAYOUTS-ONLY: pages moved into the `page` collection (their `body` is a\n * composition field value persisted as document data through the CMS document\n * commands). So the node-level page-graph commands (insert/remove/duplicate/\n * move/reorder/prop/condition) are RETIRED — layout edits go through the coarse\n * `graph.save` path (layouts change rarely), and page-body edits go through the\n * CMS document save (the composition field editor lifts its value into the\n * document draft).\n *\n * `graph.save` persists a whole working graph as a new revision, running the\n * pure container normalizer first so the persisted timeline never contains\n * empty or single-child layout containers (EC-161).\n */\n\nexport const saveGraphInputSchema = z.object({\n projectId: projectIdSchema,\n graph: projectGraphSchema,\n label: z.string().min(1).optional(),\n message: z.string().min(1).optional(),\n})\n\nexport const getGraphInputSchema = z.object({\n projectId: projectIdSchema,\n})\n\nexport const getRevisionInputSchema = z.object({\n projectId: projectIdSchema,\n revision: z.number().int().positive(),\n})\n\n// --- definitions ----------------------------------------------------------------\n\nexport const graphOperationDefinitions = {\n save: defineCommand({\n name: 'graph.save',\n domain: 'graph',\n description: 'Persist a full project graph (layouts-only) as a new revision.',\n input: saveGraphInputSchema,\n summarize: (input) =>\n `{\"projectId\":\"${input.projectId}\",\"graphId\":\"${input.graph.id}\",\"layouts\":${input.graph.layouts.length}}`,\n execute: (context, input) =>\n // Full saves normalize too — the persisted timeline never contains\n // empty or single-child layout containers (EC-161).\n context.adapter.graphs.saveGraph(input.projectId, normalizeProjectGraph(input.graph), {\n ...(input.label !== undefined ? { label: input.label } : {}),\n ...(input.message !== undefined ? { message: input.message } : {}),\n }),\n }),\n getLatest: defineQuery({\n name: 'graph.getLatest',\n domain: 'graph',\n description: 'Load the latest graph revision (parsed graph + revision record).',\n input: getGraphInputSchema,\n execute: (context, input) => context.adapter.graphs.getLatest(input.projectId),\n }),\n getRevision: defineQuery({\n name: 'graph.getRevision',\n domain: 'graph',\n description: 'Load a specific graph revision.',\n input: getRevisionInputSchema,\n execute: (context, input) =>\n context.adapter.graphs.getRevision(input.projectId, input.revision),\n }),\n listRevisions: defineQuery({\n name: 'graph.listRevisions',\n domain: 'graph',\n description: 'List all graph revisions for a project, newest first.',\n input: getGraphInputSchema,\n execute: (context, input) => context.adapter.graphs.listRevisions(input.projectId),\n }),\n} as const\n\nexport function createGraphOperations(runtime: OperationsRuntime) {\n return {\n save: bindOperation(runtime, graphOperationDefinitions.save),\n getLatest: bindOperation(runtime, graphOperationDefinitions.getLatest),\n getRevision: bindOperation(runtime, graphOperationDefinitions.getRevision),\n listRevisions: bindOperation(runtime, graphOperationDefinitions.listRevisions),\n }\n}\n\nexport type GraphOperations = ReturnType<typeof createGraphOperations>\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/operations/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,4BAA4B,CAAA;AAEnD,cAAc,QAAQ,CAAA;AACtB,cAAc,UAAU,CAAA;AACxB,cAAc,aAAa,CAAA;AAC3B,cAAc,SAAS,CAAA;AACvB,cAAc,UAAU,CAAA;AACxB,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,cAAc,UAAU,CAAA;AACxB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,UAAU,CAAA;AACxB,cAAc,cAAc,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/operations/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,4BAA4B,CAAA;AAEnD,cAAc,QAAQ,CAAA;AACtB,cAAc,UAAU,CAAA;AACxB,cAAc,aAAa,CAAA;AAC3B,cAAc,SAAS,CAAA;AACvB,cAAc,UAAU,CAAA;AACxB,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,cAAc,UAAU,CAAA;AACxB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,UAAU,CAAA;AACxB,cAAc,cAAc,CAAA","sourcesContent":["/**\n * `@elytracms/core/operations` — the typed command/query spine of the app (EC-139,\n * vision AD-7). Every domain mutation flows through one pipeline:\n * validate (Zod) → authorize (hook) → mutate via `PersistenceAdapter` → emit\n * lifecycle event. Pure TypeScript: no React, no TanStack, no Convex.\n */\nexport const PACKAGE = '@elytracms/core/operations'\n\nexport * from './core'\nexport * from './schema'\nexport * from './documents'\nexport * from './graph'\nexport * from './assets'\nexport * from './publishing'\nexport * from './references'\nexport * from './members'\nexport * from './tokens'\nexport * from './authorization'\nexport * from './client'\nexport * from './changesets'\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"members.js","sourceRoot":"","sources":["../../src/operations/members.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAA;AAC/D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AAGlE;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,SAAS,EAAE,eAAe;IAC1B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,IAAI,EAAE,iBAAiB;CACxB,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,SAAS,EAAE,eAAe;IAC1B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CAC1B,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,SAAS,EAAE,eAAe;CAC3B,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,GAAG,EAAE,aAAa,CAAC;QACjB,IAAI,EAAE,aAAa;QACnB,MAAM,EAAE,SAAS;QACjB,WAAW,EAAE,uEAAuE;QACpF,KAAK,EAAE,oBAAoB;QAC3B,OAAO,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAC1B,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC;KAC/E,CAAC;IACF,MAAM,EAAE,aAAa,CAAC;QACpB,IAAI,EAAE,gBAAgB;QACtB,MAAM,EAAE,SAAS;QACjB,WAAW,EAAE,iCAAiC;QAC9C,KAAK,EAAE,uBAAuB;QAC9B,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;YAChC,MAAM,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;YACzE,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAA;QAC7D,CAAC;KACF,CAAC;IACF,IAAI,EAAE,WAAW,CAAC;QAChB,IAAI,EAAE,cAAc;QACpB,MAAM,EAAE,SAAS;QACjB,WAAW,EAAE,iDAAiD;QAC9D,KAAK,EAAE,sBAAsB;QAC7B,OAAO,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC;KAClF,CAAC;CACM,CAAA;AAEV,MAAM,UAAU,sBAAsB,CAAC,OAA0B;IAC/D,OAAO;QACL,GAAG,EAAE,aAAa,CAAC,OAAO,EAAE,0BAA0B,CAAC,GAAG,CAAC;QAC3D,MAAM,EAAE,aAAa,CAAC,OAAO,EAAE,0BAA0B,CAAC,MAAM,CAAC;QACjE,IAAI,EAAE,aAAa,CAAC,OAAO,EAAE,0BAA0B,CAAC,IAAI,CAAC;KAC9D,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"members.js","sourceRoot":"","sources":["../../src/operations/members.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAA;AAC/D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AAGlE;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,SAAS,EAAE,eAAe;IAC1B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,IAAI,EAAE,iBAAiB;CACxB,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,SAAS,EAAE,eAAe;IAC1B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CAC1B,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,SAAS,EAAE,eAAe;CAC3B,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,GAAG,EAAE,aAAa,CAAC;QACjB,IAAI,EAAE,aAAa;QACnB,MAAM,EAAE,SAAS;QACjB,WAAW,EAAE,uEAAuE;QACpF,KAAK,EAAE,oBAAoB;QAC3B,OAAO,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAC1B,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC;KAC/E,CAAC;IACF,MAAM,EAAE,aAAa,CAAC;QACpB,IAAI,EAAE,gBAAgB;QACtB,MAAM,EAAE,SAAS;QACjB,WAAW,EAAE,iCAAiC;QAC9C,KAAK,EAAE,uBAAuB;QAC9B,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;YAChC,MAAM,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;YACzE,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAA;QAC7D,CAAC;KACF,CAAC;IACF,IAAI,EAAE,WAAW,CAAC;QAChB,IAAI,EAAE,cAAc;QACpB,MAAM,EAAE,SAAS;QACjB,WAAW,EAAE,iDAAiD;QAC9D,KAAK,EAAE,sBAAsB;QAC7B,OAAO,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC;KAClF,CAAC;CACM,CAAA;AAEV,MAAM,UAAU,sBAAsB,CAAC,OAA0B;IAC/D,OAAO;QACL,GAAG,EAAE,aAAa,CAAC,OAAO,EAAE,0BAA0B,CAAC,GAAG,CAAC;QAC3D,MAAM,EAAE,aAAa,CAAC,OAAO,EAAE,0BAA0B,CAAC,MAAM,CAAC;QACjE,IAAI,EAAE,aAAa,CAAC,OAAO,EAAE,0BAA0B,CAAC,IAAI,CAAC;KAC9D,CAAA;AACH,CAAC","sourcesContent":["import { z } from 'zod'\nimport { projectIdSchema } from '@elytracms/core/studio-core'\nimport { projectRoleSchema } from '@elytracms/core/persistence'\nimport { bindOperation, defineCommand, defineQuery } from './core'\nimport type { OperationsRuntime } from './core'\n\n/**\n * Project-member management (EC-150, vision AD-7). Membership writes flow\n * through the same chokepoint as every other mutation, so the role hook can\n * enforce that only project `admin`s manage members — editors and viewers get\n * structured denials, never UI-only gating.\n */\n\nexport const setMemberInputSchema = z.object({\n projectId: projectIdSchema,\n userId: z.string().min(1),\n role: projectRoleSchema,\n})\n\nexport const removeMemberInputSchema = z.object({\n projectId: projectIdSchema,\n userId: z.string().min(1),\n})\n\nexport const listMembersInputSchema = z.object({\n projectId: projectIdSchema,\n})\n\nexport const memberOperationDefinitions = {\n set: defineCommand({\n name: 'members.set',\n domain: 'members',\n description: 'Add a member to a project or change their role (admin/editor/viewer).',\n input: setMemberInputSchema,\n execute: (context, input) =>\n context.adapter.members.setMember(input.projectId, input.userId, input.role),\n }),\n remove: defineCommand({\n name: 'members.remove',\n domain: 'members',\n description: 'Remove a member from a project.',\n input: removeMemberInputSchema,\n execute: async (context, input) => {\n await context.adapter.members.removeMember(input.projectId, input.userId)\n return { projectId: input.projectId, userId: input.userId }\n },\n }),\n list: defineQuery({\n name: 'members.list',\n domain: 'members',\n description: 'List the members of a project with their roles.',\n input: listMembersInputSchema,\n execute: (context, input) => context.adapter.members.listMembers(input.projectId),\n }),\n} as const\n\nexport function createMemberOperations(runtime: OperationsRuntime) {\n return {\n set: bindOperation(runtime, memberOperationDefinitions.set),\n remove: bindOperation(runtime, memberOperationDefinitions.remove),\n list: bindOperation(runtime, memberOperationDefinitions.list),\n }\n}\n\nexport type MemberOperations = ReturnType<typeof createMemberOperations>\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"publishing.js","sourceRoot":"","sources":["../../src/operations/publishing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAC7D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AAGlE;;;;;;GAMG;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,SAAS,EAAE,eAAe;IAC1B,yEAAyE;IACzE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;CACjD,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,SAAS,EAAE,eAAe;CAC3B,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,8BAA8B,GAAG;IAC5C,OAAO,EAAE,aAAa,CAAC;QACrB,IAAI,EAAE,oBAAoB;QAC1B,MAAM,EAAE,YAAY;QACpB,WAAW,EAAE,iDAAiD;QAC9D,KAAK,EAAE,kBAAkB;QACzB,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;YAChC,MAAM,MAAM,GACV,KAAK,CAAC,QAAQ,KAAK,SAAS;gBAC1B,CAAC,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC;gBAC3E,CAAC,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;YAC7D,OAAO,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE;gBACzD,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE;gBAC9B,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ;aACnC,CAAC,CAAA;QACJ,CAAC;KACF,CAAC;IACF,SAAS,EAAE,aAAa,CAAC;QACvB,IAAI,EAAE,sBAAsB;QAC5B,MAAM,EAAE,YAAY;QACpB,WAAW,EAAE,gDAAgD;QAC7D,KAAK,EAAE,wBAAwB;QAC/B,OAAO,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC;KACnF,CAAC;IACF,QAAQ,EAAE,WAAW,CAAC;QACpB,IAAI,EAAE,qBAAqB;QAC3B,MAAM,EAAE,YAAY;QACpB,WAAW,EAAE,iEAAiE;QAC9E,KAAK,EAAE,wBAAwB;QAC/B,OAAO,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC;KACnF,CAAC;CACM,CAAA;AAEV,MAAM,UAAU,0BAA0B,CAAC,OAA0B;IACnE,OAAO;QACL,OAAO,EAAE,aAAa,CAAC,OAAO,EAAE,8BAA8B,CAAC,OAAO,CAAC;QACvE,SAAS,EAAE,aAAa,CAAC,OAAO,EAAE,8BAA8B,CAAC,SAAS,CAAC;QAC3E,QAAQ,EAAE,aAAa,CAAC,OAAO,EAAE,8BAA8B,CAAC,QAAQ,CAAC;KAC1E,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"publishing.js","sourceRoot":"","sources":["../../src/operations/publishing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAC7D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AAGlE;;;;;;GAMG;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,SAAS,EAAE,eAAe;IAC1B,yEAAyE;IACzE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;CACjD,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,SAAS,EAAE,eAAe;CAC3B,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,8BAA8B,GAAG;IAC5C,OAAO,EAAE,aAAa,CAAC;QACrB,IAAI,EAAE,oBAAoB;QAC1B,MAAM,EAAE,YAAY;QACpB,WAAW,EAAE,iDAAiD;QAC9D,KAAK,EAAE,kBAAkB;QACzB,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;YAChC,MAAM,MAAM,GACV,KAAK,CAAC,QAAQ,KAAK,SAAS;gBAC1B,CAAC,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC;gBAC3E,CAAC,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;YAC7D,OAAO,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE;gBACzD,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE;gBAC9B,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ;aACnC,CAAC,CAAA;QACJ,CAAC;KACF,CAAC;IACF,SAAS,EAAE,aAAa,CAAC;QACvB,IAAI,EAAE,sBAAsB;QAC5B,MAAM,EAAE,YAAY;QACpB,WAAW,EAAE,gDAAgD;QAC7D,KAAK,EAAE,wBAAwB;QAC/B,OAAO,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC;KACnF,CAAC;IACF,QAAQ,EAAE,WAAW,CAAC;QACpB,IAAI,EAAE,qBAAqB;QAC3B,MAAM,EAAE,YAAY;QACpB,WAAW,EAAE,iEAAiE;QAC9E,KAAK,EAAE,wBAAwB;QAC/B,OAAO,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC;KACnF,CAAC;CACM,CAAA;AAEV,MAAM,UAAU,0BAA0B,CAAC,OAA0B;IACnE,OAAO;QACL,OAAO,EAAE,aAAa,CAAC,OAAO,EAAE,8BAA8B,CAAC,OAAO,CAAC;QACvE,SAAS,EAAE,aAAa,CAAC,OAAO,EAAE,8BAA8B,CAAC,SAAS,CAAC;QAC3E,QAAQ,EAAE,aAAa,CAAC,OAAO,EAAE,8BAA8B,CAAC,QAAQ,CAAC;KAC1E,CAAA;AACH,CAAC","sourcesContent":["import { z } from 'zod'\nimport { projectIdSchema } from '@elytracms/core/studio-core'\nimport { bindOperation, defineCommand, defineQuery } from './core'\nimport type { OperationsRuntime } from './core'\n\n/**\n * Publishing operations (EC-139). Pins a graph revision live (or reverts it to\n * draft) — the persistent counterpart to the studio's publish flow in the\n * collaboration drawer. Single-environment (EC-179, vision AD-8): a deployment\n * IS one environment, so there is no environment dimension and no promote —\n * see `env-is-deployment-boundary`.\n */\n\nexport const publishInputSchema = z.object({\n projectId: projectIdSchema,\n /** Graph revision number to publish; defaults to the latest revision. */\n revision: z.number().int().positive().optional(),\n})\n\nexport const publishingRefInputSchema = z.object({\n projectId: projectIdSchema,\n})\n\nexport const publishingOperationDefinitions = {\n publish: defineCommand({\n name: 'publishing.publish',\n domain: 'publishing',\n description: 'Publish a graph revision (latest when omitted).',\n input: publishInputSchema,\n execute: async (context, input) => {\n const loaded =\n input.revision !== undefined\n ? await context.adapter.graphs.getRevision(input.projectId, input.revision)\n : await context.adapter.graphs.getLatest(input.projectId)\n return context.adapter.publishing.publish(input.projectId, {\n revisionId: loaded.revision.id,\n revision: loaded.revision.revision,\n })\n },\n }),\n unpublish: defineCommand({\n name: 'publishing.unpublish',\n domain: 'publishing',\n description: 'Revert to draft (must currently be published).',\n input: publishingRefInputSchema,\n execute: (context, input) => context.adapter.publishing.unpublish(input.projectId),\n }),\n getState: defineQuery({\n name: 'publishing.getState',\n domain: 'publishing',\n description: 'Load the publishing state (undefined before the first publish).',\n input: publishingRefInputSchema,\n execute: (context, input) => context.adapter.publishing.findState(input.projectId),\n }),\n} as const\n\nexport function createPublishingOperations(runtime: OperationsRuntime) {\n return {\n publish: bindOperation(runtime, publishingOperationDefinitions.publish),\n unpublish: bindOperation(runtime, publishingOperationDefinitions.unpublish),\n getState: bindOperation(runtime, publishingOperationDefinitions.getState),\n }\n}\n\nexport type PublishingOperations = ReturnType<typeof createPublishingOperations>\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"references.js","sourceRoot":"","sources":["../../src/operations/references.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"references.js","sourceRoot":"","sources":["../../src/operations/references.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod'\nimport {\n backfillReferenceIndex,\n referenceSourceSchema,\n referenceTargetSchema,\n referenceVariantSchema,\n reindexAllDocumentReferences,\n reindexDocumentReferences,\n reindexGraphDraftReferences,\n reindexGraphPublishedReferences,\n} from '@elytracms/core/persistence'\nimport type { PersistenceAdapter } from '@elytracms/core/persistence'\nimport { projectIdSchema } from '@elytracms/core/studio-core'\nimport { bindOperation, defineCommand, defineQuery } from './core'\nimport type { OperationEvent, OperationEventBus, OperationsRuntime } from './core'\n\n/**\n * Reference-index operations (EC-155, vision AD-6/AD-7).\n *\n * Two halves, one file (self-contained by design):\n * 1. The query API — `references.inbound` / `references.outbound` lookups with\n * field/node-path granularity (the substrate for Milestone B deep links),\n * plus the `references.backfill` command that rebuilds a project's index.\n * 2. {@link attachReferenceIndex} — an event-bus subscriber that keeps the\n * index maintained on write: document/graph/publishing command successes\n * trigger a recompute of the affected sources (replace-all-for-source, so\n * edits/deletes/unpublishes can never leave stale entries).\n */\n\n// --- Input schemas ----------------------------------------------------------------\n\nexport const outboundReferencesInputSchema = z.object({\n projectId: projectIdSchema,\n /** The holding entity: a document (`collection:id`), page, or layout. */\n source: referenceSourceSchema,\n /** Restrict to one variant; omit for both (draft + published). */\n variant: referenceVariantSchema.optional(),\n})\n\nexport const inboundReferencesInputSchema = z.object({\n projectId: projectIdSchema,\n /** The referenced entity: a document (`collection:id`), component, or asset. */\n target: referenceTargetSchema,\n /** Restrict to one variant; omit for both (draft + published). */\n variant: referenceVariantSchema.optional(),\n})\n\nexport const backfillReferencesInputSchema = z.object({\n projectId: projectIdSchema,\n})\n\nexport const referenceBuildMarkerInputSchema = z.object({\n projectId: projectIdSchema,\n})\n\n// --- Operation definitions ----------------------------------------------------------\n\nexport const referenceOperationDefinitions = {\n outbound: defineQuery({\n name: 'references.outbound',\n domain: 'references',\n description: 'What does this entity reference? Outbound entries with exact field/node paths.',\n input: outboundReferencesInputSchema,\n execute: (context, input) =>\n context.adapter.references.outbound(\n input.projectId,\n input.source,\n input.variant !== undefined ? { variant: input.variant } : {},\n ),\n }),\n inbound: defineQuery({\n name: 'references.inbound',\n domain: 'references',\n description:\n 'What references this entity? Inbound entries (the \"used by\" / safe-unpublish direction).',\n input: inboundReferencesInputSchema,\n execute: (context, input) =>\n context.adapter.references.inbound(\n input.projectId,\n input.target,\n input.variant !== undefined ? { variant: input.variant } : {},\n ),\n }),\n backfill: defineCommand({\n name: 'references.backfill',\n domain: 'references',\n description:\n 'Rebuild the complete reference index of a project from its current data (idempotent).',\n input: backfillReferencesInputSchema,\n execute: (context, input) => backfillReferenceIndex(context.adapter, input.projectId),\n }),\n buildMarker: defineQuery({\n name: 'references.buildMarker',\n domain: 'references',\n description:\n 'The persisted \"index fully built\" marker, or null if never backfilled (EC-269 read-path gate).',\n input: referenceBuildMarkerInputSchema,\n execute: (context, input) => context.adapter.references.getBuildMarker(input.projectId),\n }),\n} as const\n\nexport function createReferenceOperations(runtime: OperationsRuntime) {\n return {\n outbound: bindOperation(runtime, referenceOperationDefinitions.outbound),\n inbound: bindOperation(runtime, referenceOperationDefinitions.inbound),\n backfill: bindOperation(runtime, referenceOperationDefinitions.backfill),\n buildMarker: bindOperation(runtime, referenceOperationDefinitions.buildMarker),\n }\n}\n\nexport type ReferenceOperations = ReturnType<typeof createReferenceOperations>\n\n// --- Maintained on write: the event-bus subscriber -----------------------------------\n\nexport interface AttachReferenceIndexOptions {\n /**\n * Observes index-update failures. Updates run outside the command pipeline and\n * must never break it (mirrors the event bus's listener isolation), so\n * failures are reported here instead of thrown.\n */\n onError?: (error: unknown, event: OperationEvent) => void\n}\n\nexport interface ReferenceIndexAttachment {\n /** Stop listening (already-queued updates still run). */\n detach: () => void\n /** Await every index update queued so far (updates are async; events are sync). */\n flush: () => Promise<void>\n}\n\n/** Structurally parse a (possibly truncated) deterministic input summary. */\nfunction parseInputSummary(summary: string): Record<string, unknown> | undefined {\n try {\n const parsed: unknown = JSON.parse(summary)\n return typeof parsed === 'object' && parsed !== null && !Array.isArray(parsed)\n ? (parsed as Record<string, unknown>)\n : undefined\n } catch {\n return undefined\n }\n}\n\n/**\n * Recover the projectId from an input summary even when the summary was\n * truncated (summaries cap at 160 chars; `projectId` is the first key of every\n * domain input schema, so it survives truncation).\n */\nfunction projectIdOfSummary(summary: string): string | undefined {\n const parsed = parseInputSummary(summary)\n if (parsed && typeof parsed.projectId === 'string' && parsed.projectId.length > 0) {\n return parsed.projectId\n }\n const match = /\"projectId\"\\s*:\\s*\"([^\"\\\\]+)\"/.exec(summary)\n return match?.[1]\n}\n\nfunction documentRefOf(value: unknown): { collection: string; id: string } | undefined {\n if (typeof value !== 'object' || value === null) return undefined\n const candidate = value as { collection?: unknown; id?: unknown }\n return typeof candidate.collection === 'string' &&\n candidate.collection.length > 0 &&\n typeof candidate.id === 'string' &&\n candidate.id.length > 0\n ? { collection: candidate.collection, id: candidate.id }\n : undefined\n}\n\n/**\n * Subscribe the reference index to the EC-139 lifecycle event bus so it is\n * maintained on every write:\n *\n * - `documents` command success → recompute that document's entries (or all\n * documents when the summary was truncated past the document identity);\n * deletes drop entries because the recompute of a missing document is empty.\n * - `graph` command success → recompute the draft graph entries from the new\n * latest revision.\n * - `publishing` command success → recompute the published graph entries from\n * the currently pinned revisions (unpublish included).\n *\n * Updates run on a serial queue for deterministic ordering; await\n * {@link ReferenceIndexAttachment.flush} to observe a settled index.\n */\nexport function attachReferenceIndex(\n events: OperationEventBus,\n adapter: PersistenceAdapter,\n options: AttachReferenceIndexOptions = {},\n): ReferenceIndexAttachment {\n let pending: Promise<void> = Promise.resolve()\n const schedule = (event: OperationEvent, work: () => Promise<void>): void => {\n pending = pending.then(work).catch((error: unknown) => {\n options.onError?.(error, event)\n })\n }\n\n const listener = (event: OperationEvent): void => {\n if (event.status !== 'succeeded' || event.kind !== 'command') return\n const projectId = projectIdOfSummary(event.inputSummary)\n if (!projectId) return\n\n switch (event.domain) {\n case 'documents': {\n const parsed = parseInputSummary(event.inputSummary)\n const ref = documentRefOf(parsed?.document) ?? documentRefOf(parsed?.ref)\n if (ref) {\n schedule(event, () => reindexDocumentReferences(adapter, projectId, ref))\n } else {\n // Truncated summary (large upsert payload): recompute every document.\n schedule(event, () => reindexAllDocumentReferences(adapter, projectId))\n }\n return\n }\n case 'graph':\n schedule(event, () => reindexGraphDraftReferences(adapter, projectId))\n return\n case 'publishing':\n schedule(event, () => reindexGraphPublishedReferences(adapter, projectId))\n return\n default:\n return\n }\n }\n\n const unsubscribe = events.subscribe(listener)\n return {\n detach: unsubscribe,\n flush: async () => {\n // Drain until no new work was queued while awaiting.\n let current: Promise<void>\n do {\n current = pending\n await current\n } while (current !== pending)\n },\n }\n}\n"]}
@@ -26,6 +26,7 @@ export declare const saveSchemaInputSchema: z.ZodObject<{
26
26
  localized: z.ZodOptional<z.ZodBoolean>;
27
27
  titleField: z.ZodOptional<z.ZodString>;
28
28
  singleton: z.ZodOptional<z.ZodBoolean>;
29
+ aliases: z.ZodOptional<z.ZodArray<z.ZodString>>;
29
30
  }, z.core.$strip>>;
30
31
  }, z.core.$strip>;
31
32
  export declare const upsertCollectionInputSchema: z.ZodObject<{
@@ -47,6 +48,7 @@ export declare const upsertCollectionInputSchema: z.ZodObject<{
47
48
  localized: z.ZodOptional<z.ZodBoolean>;
48
49
  titleField: z.ZodOptional<z.ZodString>;
49
50
  singleton: z.ZodOptional<z.ZodBoolean>;
51
+ aliases: z.ZodOptional<z.ZodArray<z.ZodString>>;
50
52
  }, z.core.$strip>;
51
53
  }, z.core.$strip>;
52
54
  export declare const removeCollectionInputSchema: z.ZodObject<{
@@ -86,6 +88,7 @@ export declare const schemaOperationDefinitions: {
86
88
  localized: z.ZodOptional<z.ZodBoolean>;
87
89
  titleField: z.ZodOptional<z.ZodString>;
88
90
  singleton: z.ZodOptional<z.ZodBoolean>;
91
+ aliases: z.ZodOptional<z.ZodArray<z.ZodString>>;
89
92
  }, z.core.$strip>>;
90
93
  }, z.core.$strip>, {
91
94
  createdAt: string;
@@ -105,6 +108,7 @@ export declare const schemaOperationDefinitions: {
105
108
  localized?: boolean | undefined;
106
109
  titleField?: string | undefined;
107
110
  singleton?: boolean | undefined;
111
+ aliases?: string[] | undefined;
108
112
  }[];
109
113
  }>;
110
114
  readonly upsertCollection: import("./core").OperationDefinition<z.ZodObject<{
@@ -126,6 +130,7 @@ export declare const schemaOperationDefinitions: {
126
130
  localized: z.ZodOptional<z.ZodBoolean>;
127
131
  titleField: z.ZodOptional<z.ZodString>;
128
132
  singleton: z.ZodOptional<z.ZodBoolean>;
133
+ aliases: z.ZodOptional<z.ZodArray<z.ZodString>>;
129
134
  }, z.core.$strip>;
130
135
  }, z.core.$strip>, {
131
136
  createdAt: string;
@@ -145,6 +150,7 @@ export declare const schemaOperationDefinitions: {
145
150
  localized?: boolean | undefined;
146
151
  titleField?: string | undefined;
147
152
  singleton?: boolean | undefined;
153
+ aliases?: string[] | undefined;
148
154
  }[];
149
155
  }>;
150
156
  readonly removeCollection: import("./core").OperationDefinition<z.ZodObject<{
@@ -168,6 +174,7 @@ export declare const schemaOperationDefinitions: {
168
174
  localized?: boolean | undefined;
169
175
  titleField?: string | undefined;
170
176
  singleton?: boolean | undefined;
177
+ aliases?: string[] | undefined;
171
178
  }[];
172
179
  }>;
173
180
  readonly upsertField: import("./core").OperationDefinition<z.ZodObject<{
@@ -192,6 +199,7 @@ export declare const schemaOperationDefinitions: {
192
199
  localized?: boolean | undefined;
193
200
  titleField?: string | undefined;
194
201
  singleton?: boolean | undefined;
202
+ aliases?: string[] | undefined;
195
203
  }[];
196
204
  }>;
197
205
  readonly removeField: import("./core").OperationDefinition<z.ZodObject<{
@@ -216,6 +224,7 @@ export declare const schemaOperationDefinitions: {
216
224
  localized?: boolean | undefined;
217
225
  titleField?: string | undefined;
218
226
  singleton?: boolean | undefined;
227
+ aliases?: string[] | undefined;
219
228
  }[];
220
229
  }>;
221
230
  readonly get: import("./core").OperationDefinition<z.ZodObject<{
@@ -238,6 +247,7 @@ export declare const schemaOperationDefinitions: {
238
247
  localized?: boolean | undefined;
239
248
  titleField?: string | undefined;
240
249
  singleton?: boolean | undefined;
250
+ aliases?: string[] | undefined;
241
251
  }[];
242
252
  }>;
243
253
  };
@@ -258,6 +268,7 @@ export declare function createSchemaOperations(runtime: OperationsRuntime): {
258
268
  localized?: boolean | undefined;
259
269
  titleField?: string | undefined;
260
270
  singleton?: boolean | undefined;
271
+ aliases?: string[] | undefined;
261
272
  }[];
262
273
  }) => Promise<import("./core").OperationResult<{
263
274
  createdAt: string;
@@ -277,6 +288,7 @@ export declare function createSchemaOperations(runtime: OperationsRuntime): {
277
288
  localized?: boolean | undefined;
278
289
  titleField?: string | undefined;
279
290
  singleton?: boolean | undefined;
291
+ aliases?: string[] | undefined;
280
292
  }[];
281
293
  }>>;
282
294
  upsertCollection: (input: {
@@ -295,6 +307,7 @@ export declare function createSchemaOperations(runtime: OperationsRuntime): {
295
307
  localized?: boolean | undefined;
296
308
  titleField?: string | undefined;
297
309
  singleton?: boolean | undefined;
310
+ aliases?: string[] | undefined;
298
311
  };
299
312
  }) => Promise<import("./core").OperationResult<{
300
313
  createdAt: string;
@@ -314,6 +327,7 @@ export declare function createSchemaOperations(runtime: OperationsRuntime): {
314
327
  localized?: boolean | undefined;
315
328
  titleField?: string | undefined;
316
329
  singleton?: boolean | undefined;
330
+ aliases?: string[] | undefined;
317
331
  }[];
318
332
  }>>;
319
333
  removeCollection: (input: {
@@ -337,6 +351,7 @@ export declare function createSchemaOperations(runtime: OperationsRuntime): {
337
351
  localized?: boolean | undefined;
338
352
  titleField?: string | undefined;
339
353
  singleton?: boolean | undefined;
354
+ aliases?: string[] | undefined;
340
355
  }[];
341
356
  }>>;
342
357
  upsertField: (input: {
@@ -361,6 +376,7 @@ export declare function createSchemaOperations(runtime: OperationsRuntime): {
361
376
  localized?: boolean | undefined;
362
377
  titleField?: string | undefined;
363
378
  singleton?: boolean | undefined;
379
+ aliases?: string[] | undefined;
364
380
  }[];
365
381
  }>>;
366
382
  removeField: (input: {
@@ -385,6 +401,7 @@ export declare function createSchemaOperations(runtime: OperationsRuntime): {
385
401
  localized?: boolean | undefined;
386
402
  titleField?: string | undefined;
387
403
  singleton?: boolean | undefined;
404
+ aliases?: string[] | undefined;
388
405
  }[];
389
406
  }>>;
390
407
  get: (input: {
@@ -407,6 +424,7 @@ export declare function createSchemaOperations(runtime: OperationsRuntime): {
407
424
  localized?: boolean | undefined;
408
425
  titleField?: string | undefined;
409
426
  singleton?: boolean | undefined;
427
+ aliases?: string[] | undefined;
410
428
  }[];
411
429
  }>>;
412
430
  };
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/operations/schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/operations/schema.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod'\nimport { collectionDefSchema, fieldDefSchema } from '@elytracms/core/cms-core'\nimport type { CollectionDef } from '@elytracms/core/cms-core'\nimport { projectIdSchema } from '@elytracms/core/studio-core'\nimport { OperationFailure, bindOperation, defineCommand, defineQuery, notFoundError } from './core'\nimport type { OperationContext, OperationsRuntime } from './core'\n\n/**\n * CMS schema operations: collections and fields (EC-139). The persistence\n * boundary stores the schema as one record per project (`CmsRepository.saveSchema`),\n * so collection- and field-level commands load, edit, and re-save it — keeping\n * the canonical structural validation (duplicate ids, bad select options) in\n * the repository.\n */\n\nexport const saveSchemaInputSchema = z.object({\n projectId: projectIdSchema,\n collections: z.array(collectionDefSchema),\n})\n\nexport const upsertCollectionInputSchema = z.object({\n projectId: projectIdSchema,\n collection: collectionDefSchema,\n})\n\nexport const removeCollectionInputSchema = z.object({\n projectId: projectIdSchema,\n collectionId: z.string().min(1),\n})\n\nexport const upsertFieldInputSchema = z.object({\n projectId: projectIdSchema,\n collectionId: z.string().min(1),\n field: fieldDefSchema,\n})\n\nexport const removeFieldInputSchema = z.object({\n projectId: projectIdSchema,\n collectionId: z.string().min(1),\n fieldName: z.string().min(1),\n})\n\nexport const getSchemaInputSchema = z.object({\n projectId: projectIdSchema,\n})\n\n/** Load the project's collections, tolerating a not-yet-created schema. */\nasync function loadCollections(\n context: OperationContext,\n projectId: string,\n): Promise<CollectionDef[]> {\n const record = await context.adapter.cms.findSchema(projectId)\n return record ? [...record.collections] : []\n}\n\n/** Load a collection or fail with a structured not-found error. */\nasync function requireCollection(\n context: OperationContext,\n projectId: string,\n collectionId: string,\n): Promise<{ collections: CollectionDef[]; index: number }> {\n const collections = await loadCollections(context, projectId)\n const index = collections.findIndex((c) => c.id === collectionId)\n if (index < 0) {\n throw new OperationFailure(notFoundError('collection', `${projectId}/${collectionId}`))\n }\n return { collections, index }\n}\n\nexport const schemaOperationDefinitions = {\n save: defineCommand({\n name: 'schema.save',\n domain: 'schema',\n description: 'Replace the full CMS collection schema of a project.',\n input: saveSchemaInputSchema,\n execute: (context, input) => context.adapter.cms.saveSchema(input.projectId, input.collections),\n }),\n upsertCollection: defineCommand({\n name: 'schema.upsertCollection',\n domain: 'schema',\n description: 'Add a collection to the project schema, or replace it by id.',\n input: upsertCollectionInputSchema,\n execute: async (context, input) => {\n const collections = await loadCollections(context, input.projectId)\n const index = collections.findIndex((c) => c.id === input.collection.id)\n if (index >= 0) collections[index] = input.collection\n else collections.push(input.collection)\n return context.adapter.cms.saveSchema(input.projectId, collections)\n },\n }),\n removeCollection: defineCommand({\n name: 'schema.removeCollection',\n domain: 'schema',\n description: 'Remove a collection from the project schema.',\n input: removeCollectionInputSchema,\n execute: async (context, input) => {\n const { collections } = await requireCollection(context, input.projectId, input.collectionId)\n return context.adapter.cms.saveSchema(\n input.projectId,\n collections.filter((c) => c.id !== input.collectionId),\n )\n },\n }),\n upsertField: defineCommand({\n name: 'schema.upsertField',\n domain: 'schema',\n description: 'Add a field to a collection, or replace it by name.',\n input: upsertFieldInputSchema,\n execute: async (context, input) => {\n const { collections, index } = await requireCollection(\n context,\n input.projectId,\n input.collectionId,\n )\n const collection = collections[index]!\n const fields = [...collection.fields]\n const fieldIndex = fields.findIndex((f) => f.name === input.field.name)\n if (fieldIndex >= 0) fields[fieldIndex] = input.field\n else fields.push(input.field)\n collections[index] = { ...collection, fields }\n return context.adapter.cms.saveSchema(input.projectId, collections)\n },\n }),\n removeField: defineCommand({\n name: 'schema.removeField',\n domain: 'schema',\n description: 'Remove a field from a collection by name.',\n input: removeFieldInputSchema,\n execute: async (context, input) => {\n const { collections, index } = await requireCollection(\n context,\n input.projectId,\n input.collectionId,\n )\n const collection = collections[index]!\n if (!collection.fields.some((f) => f.name === input.fieldName)) {\n throw new OperationFailure(\n notFoundError('field', `${input.collectionId}/${input.fieldName}`),\n )\n }\n collections[index] = {\n ...collection,\n fields: collection.fields.filter((f) => f.name !== input.fieldName),\n }\n return context.adapter.cms.saveSchema(input.projectId, collections)\n },\n }),\n get: defineQuery({\n name: 'schema.get',\n domain: 'schema',\n description: 'Load the persisted CMS schema of a project.',\n input: getSchemaInputSchema,\n execute: (context, input) => context.adapter.cms.getSchema(input.projectId),\n }),\n} as const\n\nexport function createSchemaOperations(runtime: OperationsRuntime) {\n return {\n save: bindOperation(runtime, schemaOperationDefinitions.save),\n upsertCollection: bindOperation(runtime, schemaOperationDefinitions.upsertCollection),\n removeCollection: bindOperation(runtime, schemaOperationDefinitions.removeCollection),\n upsertField: bindOperation(runtime, schemaOperationDefinitions.upsertField),\n removeField: bindOperation(runtime, schemaOperationDefinitions.removeField),\n get: bindOperation(runtime, schemaOperationDefinitions.get),\n }\n}\n\nexport type SchemaOperations = ReturnType<typeof createSchemaOperations>\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../src/operations/tokens.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AAGlE;;;;;;;;;;;;;;;GAeG;AAEH,sEAAsE;AACtE,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAA;AAEtC,MAAM,kBAAkB,GAAG,EAAE,CAAA;AAE7B,gFAAgF;AAChF,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,KAAa;IAC3C,MAAM,KAAK,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IAC7C,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;IACtE,OAAO,CAAC,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AACzF,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,gBAAgB;IAC9B,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,kBAAkB,CAAC,CAAA;IAChD,UAAU,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAA;IACxC,OAAO,GAAG,gBAAgB,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAA;AAChG,CAAC;AAUD,SAAS,SAAS,CAAC,MAAsB;IACvC,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC7D,CAAA;AACH,CAAC;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;CACjC,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CAC3B,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;AAEjD,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,KAAK,EAAE,aAAa,CAAC;QACnB,IAAI,EAAE,cAAc;QACpB,MAAM,EAAE,QAAQ;QAChB,WAAW,EACT,sHAAsH;QACxH,KAAK,EAAE,qBAAqB;QAC5B,6DAA6D;QAC7D,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;QAC5D,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;YAChC,MAAM,KAAK,GAAG,gBAAgB,EAAE,CAAA;YAChC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC;gBACzD,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,SAAS,EAAE,MAAM,SAAS,CAAC,KAAK,CAAC;aAClC,CAAC,CAAA;YACF,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,MAAM,CAAC,EAAE,CAAA;QAC9C,CAAC;KACF,CAAC;IACF,MAAM,EAAE,aAAa,CAAC;QACpB,IAAI,EAAE,eAAe;QACrB,MAAM,EAAE,QAAQ;QAChB,WAAW,EAAE,wEAAwE;QACrF,KAAK,EAAE,sBAAsB;QAC7B,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,CAChC,SAAS,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;KACxE,CAAC;IACF,IAAI,EAAE,WAAW,CAAC;QAChB,IAAI,EAAE,aAAa;QACnB,MAAM,EAAE,QAAQ;QAChB,WAAW,EACT,qFAAqF;QACvF,KAAK,EAAE,qBAAqB;QAC5B,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC;KAC1F,CAAC;CACM,CAAA;AAEV,MAAM,UAAU,qBAAqB,CAAC,OAA0B;IAC9D,OAAO;QACL,KAAK,EAAE,aAAa,CAAC,OAAO,EAAE,yBAAyB,CAAC,KAAK,CAAC;QAC9D,MAAM,EAAE,aAAa,CAAC,OAAO,EAAE,yBAAyB,CAAC,MAAM,CAAC;QAChE,IAAI,EAAE,aAAa,CAAC,OAAO,EAAE,yBAAyB,CAAC,IAAI,CAAC;KAC7D,CAAA;AACH,CAAC;AAaD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,OAA2B,EAC3B,KAAa;IAEb,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,gBAAgB,CAAC;QAAE,OAAO,IAAI,CAAA;IAC9D,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,SAAS,CAAC,KAAK,CAAC,CAAC,CAAA;IACzE,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,SAAS;QAAE,OAAO,IAAI,CAAA;IAC5C,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAA;AAC3B,CAAC"}
1
+ {"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../src/operations/tokens.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod'\nimport type { CliTokenRecord, PersistenceAdapter, ProjectRole } from '@elytracms/core/persistence'\nimport { bindOperation, defineCommand, defineQuery } from './core'\nimport type { OperationsRuntime } from './core'\n\n/**\n * Revocable per-project CLI tokens (EC-150; consumed by the EC-147/148 sync\n * CLI, which sends them as `Authorization: Bearer <token>`).\n *\n * Lifecycle:\n * 1. `tokens.issue` (admin-only via the EC-150 role hook) generates the\n * plaintext once, persists only its SHA-256 hash, and returns the plaintext\n * in the result — it is never stored or retrievable again.\n * 2. The CLI presents the plaintext; the builder-side endpoint (EC-156 HTTP\n * wiring) calls {@link verifyCliToken}, which hashes and looks it up.\n * 3. `tokens.revoke` stamps `revokedAt`; revoked tokens never verify again but\n * stay listed for auditability.\n *\n * Token issuance UI is deliberately out of scope for v1 — admins issue tokens\n * via the operations layer (CLI/ops tooling); see the EC-150 task notes.\n */\n\n/** Plaintext token shape: `ect_` + 48 hex chars (24 random bytes). */\nexport const CLI_TOKEN_PREFIX = 'ect_'\n\nconst TOKEN_RANDOM_BYTES = 24\n\n/** Hex SHA-256 via Web Crypto — available in browsers, Node 18+, and Convex. */\nexport async function sha256Hex(value: string): Promise<string> {\n const bytes = new TextEncoder().encode(value)\n const digest = await globalThis.crypto.subtle.digest('SHA-256', bytes)\n return [...new Uint8Array(digest)].map((b) => b.toString(16).padStart(2, '0')).join('')\n}\n\n/** Generate a fresh plaintext token (the only moment it exists outside the caller). */\nexport function generateCliToken(): string {\n const bytes = new Uint8Array(TOKEN_RANDOM_BYTES)\n globalThis.crypto.getRandomValues(bytes)\n return `${CLI_TOKEN_PREFIX}${[...bytes].map((b) => b.toString(16).padStart(2, '0')).join('')}`\n}\n\n/** Safe, listable view of a stored token — never includes the hash. */\nexport interface CliTokenSummary {\n readonly id: string\n readonly label: string\n readonly createdAt: string\n readonly revokedAt?: string\n}\n\nfunction toSummary(record: CliTokenRecord): CliTokenSummary {\n return {\n id: record.id,\n label: record.label,\n createdAt: record.createdAt,\n ...(record.revokedAt ? { revokedAt: record.revokedAt } : {}),\n }\n}\n\nexport const issueTokenInputSchema = z.object({\n label: z.string().min(1).max(80),\n})\n\nexport const revokeTokenInputSchema = z.object({\n tokenId: z.string().min(1),\n})\n\nexport const listTokensInputSchema = z.object({})\n\nexport const tokenOperationDefinitions = {\n issue: defineCommand({\n name: 'tokens.issue',\n domain: 'tokens',\n description:\n 'Issue a revocable CLI sync token for a project. Returns the plaintext exactly once; only its SHA-256 hash is stored.',\n input: issueTokenInputSchema,\n // Never log the (future) plaintext: summarize by label only.\n summarize: (input) => JSON.stringify({ label: input.label }),\n execute: async (context, input) => {\n const token = generateCliToken()\n const record = await context.adapter.cliTokens.createToken({\n label: input.label,\n tokenHash: await sha256Hex(token),\n })\n return { token, summary: toSummary(record) }\n },\n }),\n revoke: defineCommand({\n name: 'tokens.revoke',\n domain: 'tokens',\n description: 'Revoke a CLI token. Revoked tokens never verify again but stay listed.',\n input: revokeTokenInputSchema,\n execute: async (context, input) =>\n toSummary(await context.adapter.cliTokens.revokeToken(input.tokenId)),\n }),\n list: defineQuery({\n name: 'tokens.list',\n domain: 'tokens',\n description:\n 'List the CLI tokens of this deployment (metadata only — hashes are never returned).',\n input: listTokensInputSchema,\n execute: async (context) => (await context.adapter.cliTokens.listTokens()).map(toSummary),\n }),\n} as const\n\nexport function createTokenOperations(runtime: OperationsRuntime) {\n return {\n issue: bindOperation(runtime, tokenOperationDefinitions.issue),\n revoke: bindOperation(runtime, tokenOperationDefinitions.revoke),\n list: bindOperation(runtime, tokenOperationDefinitions.list),\n }\n}\n\nexport type TokenOperations = ReturnType<typeof createTokenOperations>\n\n/** Result of a successful CLI token verification. */\nexport interface VerifiedCliToken {\n /**\n * The capability the token grants. CLI tokens push component manifests and\n * pull project data — `editor`-level content access, never administration.\n */\n readonly role: ProjectRole\n}\n\n/**\n * Server-side verification for the EC-147 Bearer token: hash the presented\n * plaintext, look it up, and reject revoked/unknown tokens. The builder's\n * registry-sync HTTP endpoint (EC-156) calls this before touching any\n * repository.\n */\nexport async function verifyCliToken(\n adapter: PersistenceAdapter,\n token: string,\n): Promise<VerifiedCliToken | null> {\n if (!token || !token.startsWith(CLI_TOKEN_PREFIX)) return null\n const record = await adapter.cliTokens.findByHash(await sha256Hex(token))\n if (!record || record.revokedAt) return null\n return { role: 'editor' }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/persistence/adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/persistence/adapter.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n createSequentialClock,\n type BackendStatus,\n type Clock,\n} from './core'\nimport { InMemoryGraphRepository } from './graph'\nimport type { GraphRepository } from './graph'\nimport { InMemoryCmsRepository } from './cms'\nimport type { CmsRepository } from './cms'\nimport { InMemoryAssetRepository, InMemoryBlobStorage } from './assets'\nimport type { AssetRepository, BlobStorageAdapter } from './assets'\nimport { InMemoryPublishingRepository } from './publishing'\nimport type { PublishingRepository } from './publishing'\nimport { InMemoryReferenceIndexRepository } from './references'\nimport type { ReferenceIndexRepository } from './references'\nimport { InMemoryMembersRepository } from './members'\nimport type { MembersRepository } from './members'\nimport { InMemoryCliTokenRepository } from './cli-tokens'\nimport type { CliTokenRepository } from './cli-tokens'\nimport { validateForPersistence } from './backend-validation'\nimport type { BackendValidationInput, BackendValidationResult } from './backend-validation'\nimport { maintainReferenceIndex } from './self-maintaining-adapter'\n\n/**\n * The aggregate persistence boundary (brief §4.10, §10). Core packages depend on\n * this interface — never on Convex directly. A Convex-backed implementation and\n * the in-memory implementation below both satisfy it, so the Studio, seeds, and\n * tests are provider-agnostic.\n */\nexport interface PersistenceAdapter {\n readonly graphs: GraphRepository\n readonly cms: CmsRepository\n readonly assets: AssetRepository\n readonly publishing: PublishingRepository\n /** Reference index — outbound/inbound reference entries per variant (EC-155, AD-6). */\n readonly references: ReferenceIndexRepository\n /**\n * Whether this adapter keeps the reference index current in its own write path\n * (EC-277, AD-6 \"maintained at the source\"). When `true`, the studio bootstrap\n * does NOT attach the legacy client-side `attachReferenceIndex` subscriber —\n * maintenance lives in the store (in-process via `withMaintainedReferenceIndex`,\n * or server-side in the Convex mutations). Absent/`false` for a bare adapter\n * that still relies on the subscriber.\n */\n readonly maintainsReferenceIndex?: boolean\n /** Per-project membership roles — admin/editor/viewer (EC-150, AD-7). */\n readonly members: MembersRepository\n /** Revocable per-project CLI sync tokens, stored hashed (EC-150). */\n readonly cliTokens: CliTokenRepository\n /** Blob storage boundary for asset bytes. */\n readonly blobs: BlobStorageAdapter\n /** Backend identity + reachability, for degraded-state UI. */\n status(): Promise<BackendStatus>\n /** Server-side validation service (brief §4.11, EC-047). */\n validate(input: BackendValidationInput): BackendValidationResult\n}\n\nexport interface InMemoryPersistenceAdapterOptions {\n /** Shared deterministic clock across all repositories. */\n clock?: Clock\n graphs?: GraphRepository\n cms?: CmsRepository\n assets?: AssetRepository\n publishing?: PublishingRepository\n references?: ReferenceIndexRepository\n members?: MembersRepository\n cliTokens?: CliTokenRepository\n blobs?: BlobStorageAdapter\n /**\n * EC-277: keep the reference index current in the write path (AD-6). When set,\n * each document/graph/publishing write reindexes the affected source in the same\n * call, so the index never relies on a client-side subscriber. Default `false`.\n */\n maintainReferenceIndex?: boolean\n}\n\n/**\n * In-memory implementation of {@link PersistenceAdapter} (brief §10). Backs\n * deterministic fixtures, tests, smoke validation, and browser inspection before\n * (and alongside) Convex.\n */\nexport class InMemoryPersistenceAdapter implements PersistenceAdapter {\n readonly graphs: GraphRepository\n readonly cms: CmsRepository\n readonly assets: AssetRepository\n readonly publishing: PublishingRepository\n readonly references: ReferenceIndexRepository\n readonly members: MembersRepository\n readonly cliTokens: CliTokenRepository\n readonly blobs: BlobStorageAdapter\n readonly maintainsReferenceIndex: boolean = false\n\n constructor(options: InMemoryPersistenceAdapterOptions = {}) {\n const clock = options.clock ?? createSequentialClock()\n this.graphs = options.graphs ?? new InMemoryGraphRepository({ clock })\n this.cms = options.cms ?? new InMemoryCmsRepository({ clock })\n this.assets = options.assets ?? new InMemoryAssetRepository({ clock })\n this.publishing = options.publishing ?? new InMemoryPublishingRepository({ clock })\n this.references = options.references ?? new InMemoryReferenceIndexRepository()\n this.members = options.members ?? new InMemoryMembersRepository({ clock })\n this.cliTokens = options.cliTokens ?? new InMemoryCliTokenRepository({ clock })\n this.blobs = options.blobs ?? new InMemoryBlobStorage()\n // EC-277: opt into write-path index maintenance (AD-6 \"at the source\"). Wrap\n // the write-bearing repos so a raw `cms.upsertDocument` — no operations layer,\n // no subscriber — reindexes in the same call, mirroring the Convex server-side\n // mutations. Off by default so existing callers' behaviour is unchanged.\n if (options.maintainReferenceIndex) {\n const maintained = maintainReferenceIndex(\n { cms: this.cms, graphs: this.graphs, publishing: this.publishing },\n () => this,\n )\n this.cms = maintained.cms\n this.graphs = maintained.graphs\n this.publishing = maintained.publishing\n this.maintainsReferenceIndex = true\n }\n }\n\n async status(): Promise<BackendStatus> {\n return { backend: 'in-memory', available: true }\n }\n\n validate(input: BackendValidationInput): BackendValidationResult {\n return validateForPersistence(input)\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"assets.js","sourceRoot":"","sources":["../../src/persistence/assets.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"assets.js","sourceRoot":"","sources":["../../src/persistence/assets.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod'\nimport {\n RecordNotFoundError,\n cloneRecord,\n recordMetaSchema,\n type Clock,\n type IdFactory,\n createSequentialClock,\n createSequentialIdFactory,\n} from './core'\n\n/**\n * Persisted asset metadata (brief §7.4, §8.6, §10). The bytes themselves live in\n * a {@link BlobStorageAdapter}; this record is the queryable metadata that CMS\n * `asset` fields point at by id.\n */\nexport const assetRecordSchema = recordMetaSchema.extend({\n id: z.string().min(1),\n projectId: z.string().min(1),\n filename: z.string().min(1),\n contentType: z.string().min(1),\n byteSize: z.number().int().nonnegative(),\n width: z.number().int().positive().optional(),\n height: z.number().int().positive().optional(),\n alt: z.string().optional(),\n /** Editable display title (EC-152 asset library metadata). */\n title: z.string().optional(),\n /** Opaque key into the blob storage adapter. */\n storageKey: z.string().min(1),\n /**\n * Stable, resolvable serve URL for the stored bytes (EC-151). Delivery-shape\n * asset resolution reads this straight off the metadata record; optional\n * because records created before byte storage existed have no URL yet.\n */\n url: z.string().min(1).optional(),\n /**\n * Image focal point (EC-230): a normalized hotspot `{ x, y }` in 0–1. Threaded\n * to the rendered image's CSS `object-position` so art-directed / cover crops\n * keep the subject in frame. Optional — most assets have none; a migration\n * importer populates it from a source hotspot (e.g. Sanity's `hotspot`).\n */\n focalPoint: z.object({ x: z.number().min(0).max(1), y: z.number().min(0).max(1) }).optional(),\n})\nexport type AssetRecord = z.infer<typeof assetRecordSchema>\n\nexport interface NewAssetInput {\n id?: string\n filename: string\n contentType: string\n byteSize: number\n width?: number\n height?: number\n alt?: string\n /** Editable display title (EC-152 asset library metadata). */\n title?: string\n /** Defaults to a key derived from the asset id. */\n storageKey?: string\n /** Resolvable serve URL for the stored bytes (EC-151). */\n url?: string\n /** Normalized image focal point `{ x, y }` in 0–1 (EC-230). */\n focalPoint?: { x: number; y: number }\n}\n\n/**\n * Storage boundary for asset *bytes* (brief §8.6). Project-owned and swappable\n * (Convex file storage, S3, etc.); the in-memory implementation backs tests and\n * local inspection. Metadata stays in the {@link AssetRepository}.\n */\nexport interface BlobStorageAdapter {\n put(key: string, data: Uint8Array, contentType?: string): Promise<void>\n get(key: string): Promise<Uint8Array | undefined>\n /** A resolvable locator for the blob (e.g. a CDN/file URL). */\n url(key: string): string\n has(key: string): Promise<boolean>\n delete(key: string): Promise<void>\n /**\n * Store bytes under a backend-assigned key and return it (EC-151). Backends\n * like Convex file storage mint their own ids, so callers cannot choose the\n * key up front the way {@link put} assumes. Optional; in-memory implements it\n * deterministically.\n */\n store?(data: Uint8Array, contentType?: string): Promise<string>\n /**\n * Mint a short-lived URL the client can POST bytes to directly (EC-151,\n * Convex `storage.generateUploadUrl()`). Optional — backends without\n * client-direct uploads omit it and callers fall back to {@link store}/{@link put}.\n */\n createUploadUrl?(): Promise<string>\n /**\n * Resolve the serve URL for a stored blob asynchronously (EC-151, Convex\n * `storage.getUrl()`). Returns `undefined` when the blob does not exist.\n * Optional; backends with synchronous stable URLs can rely on {@link url}.\n */\n resolveUrl?(key: string): Promise<string | undefined>\n}\n\nexport class InMemoryBlobStorage implements BlobStorageAdapter {\n private readonly blobs = new Map<string, Uint8Array>()\n /** Deterministic backend-assigned keys (no Date/random). */\n private seq = 0\n\n async put(key: string, data: Uint8Array): Promise<void> {\n this.blobs.set(key, data)\n }\n async get(key: string): Promise<Uint8Array | undefined> {\n return this.blobs.get(key)\n }\n url(key: string): string {\n return `memory://blobs/${key}`\n }\n async has(key: string): Promise<boolean> {\n return this.blobs.has(key)\n }\n async delete(key: string): Promise<void> {\n this.blobs.delete(key)\n }\n async store(data: Uint8Array): Promise<string> {\n this.seq += 1\n const key = `blob-${this.seq}`\n this.blobs.set(key, data)\n return key\n }\n async resolveUrl(key: string): Promise<string | undefined> {\n return this.blobs.has(key) ? this.url(key) : undefined\n }\n}\n\n/** Persists asset metadata records (brief §7.4, §8.6, §10). */\nexport interface AssetRepository {\n upsertAsset(projectId: string, input: NewAssetInput): Promise<AssetRecord>\n getAsset(projectId: string, id: string): Promise<AssetRecord>\n findAsset(projectId: string, id: string): Promise<AssetRecord | undefined>\n listAssets(projectId: string): Promise<AssetRecord[]>\n removeAsset(projectId: string, id: string): Promise<void>\n /** Resolve persisted metadata for the asset ids referenced by CMS fields. */\n resolveMany(projectId: string, ids: readonly string[]): Promise<Map<string, AssetRecord>>\n}\n\nexport interface InMemoryAssetRepositoryOptions {\n clock?: Clock\n idFactory?: IdFactory\n seed?: readonly AssetRecord[]\n}\n\nexport class InMemoryAssetRepository implements AssetRepository {\n /** projectId → (assetId → record). */\n private readonly byProject = new Map<string, Map<string, AssetRecord>>()\n private readonly clock: Clock\n private readonly nextId: IdFactory\n\n constructor(options: InMemoryAssetRepositoryOptions = {}) {\n this.clock = options.clock ?? createSequentialClock()\n this.nextId = options.idFactory ?? createSequentialIdFactory('asset')\n for (const record of options.seed ?? []) {\n const parsed = assetRecordSchema.parse(record)\n this.projectMap(parsed.projectId).set(parsed.id, parsed)\n }\n }\n\n private projectMap(projectId: string): Map<string, AssetRecord> {\n const existing = this.byProject.get(projectId)\n if (existing) return existing\n const created = new Map<string, AssetRecord>()\n this.byProject.set(projectId, created)\n return created\n }\n\n async upsertAsset(projectId: string, input: NewAssetInput): Promise<AssetRecord> {\n const map = this.projectMap(projectId)\n const id = input.id ?? this.nextId()\n const now = this.clock()\n const previous = map.get(id)\n const record = assetRecordSchema.parse({\n id,\n projectId,\n filename: input.filename,\n contentType: input.contentType,\n byteSize: input.byteSize,\n ...(input.width !== undefined ? { width: input.width } : {}),\n ...(input.height !== undefined ? { height: input.height } : {}),\n ...(input.alt !== undefined ? { alt: input.alt } : {}),\n ...(input.title !== undefined ? { title: input.title } : {}),\n ...(input.url !== undefined ? { url: input.url } : {}),\n ...(input.focalPoint !== undefined ? { focalPoint: input.focalPoint } : {}),\n storageKey: input.storageKey ?? `${projectId}/${id}`,\n createdAt: previous?.createdAt ?? now,\n updatedAt: now,\n })\n map.set(id, record)\n return cloneRecord(record)\n }\n\n async getAsset(projectId: string, id: string): Promise<AssetRecord> {\n const record = this.byProject.get(projectId)?.get(id)\n if (!record) throw new RecordNotFoundError('asset', `${projectId}/${id}`)\n return cloneRecord(record)\n }\n\n async findAsset(projectId: string, id: string): Promise<AssetRecord | undefined> {\n const record = this.byProject.get(projectId)?.get(id)\n return record ? cloneRecord(record) : undefined\n }\n\n async listAssets(projectId: string): Promise<AssetRecord[]> {\n return [...(this.byProject.get(projectId)?.values() ?? [])]\n .sort((a, b) => (a.id < b.id ? -1 : a.id > b.id ? 1 : 0))\n .map(cloneRecord)\n }\n\n async removeAsset(projectId: string, id: string): Promise<void> {\n const map = this.byProject.get(projectId)\n if (!map?.has(id)) throw new RecordNotFoundError('asset', `${projectId}/${id}`)\n map.delete(id)\n }\n\n async resolveMany(projectId: string, ids: readonly string[]): Promise<Map<string, AssetRecord>> {\n const map = this.byProject.get(projectId)\n const out = new Map<string, AssetRecord>()\n for (const id of ids) {\n const record = map?.get(id)\n if (record) out.set(id, cloneRecord(record))\n }\n return out\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"backend-validation.js","sourceRoot":"","sources":["../../src/persistence/backend-validation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"backend-validation.js","sourceRoot":"","sources":["../../src/persistence/backend-validation.ts"],"names":[],"mappings":"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","sourcesContent":["import { validateProjectGraph } from '@elytracms/core/project-graph'\nimport type { ComponentLookup, ProjectGraph, ValidationIssue } from '@elytracms/core/project-graph'\nimport { createCollectionRegistry, createRouter } from '@elytracms/core/cms-core'\nimport type {\n CmsValidationIssue,\n CollectionDef,\n RedirectRecord,\n RouteRecord,\n} from '@elytracms/core/cms-core'\nimport { PersistenceValidationError } from './core'\nimport type { PersistenceIssue } from './core'\n\n/**\n * Inputs to the backend validation service (brief §4.11, §10). Any subset may be\n * provided; only supplied domains are validated.\n */\nexport interface BackendValidationInput {\n graph?: ProjectGraph\n /** Registry lookup for component/prop/slot checks against the graph. */\n components?: ComponentLookup\n /** Known data-source ids for binding resolution. */\n knownSourceIds?: ReadonlySet<string>\n collections?: readonly CollectionDef[]\n routes?: readonly RouteRecord[]\n redirects?: readonly RedirectRecord[]\n defaultLocale?: string\n}\n\n/** Structured, typed validation results returned to clients (brief §4.11). */\nexport interface BackendValidationResult {\n ok: boolean\n /** Graph + binding + component issues (from `@elytracms/core/project-graph`). */\n graphIssues: ValidationIssue[]\n /** Collection/field schema issues (from `@elytracms/core/cms-core`). */\n schemaIssues: CmsValidationIssue[]\n /** Route conflict + redirect loop issues (from `@elytracms/core/cms-core`). */\n routeIssues: CmsValidationIssue[]\n /** Count of error-severity issues across all domains. */\n errorCount: number\n}\n\n/**\n * Validate project graphs, bindings, schemas, and routes on the server before\n * persisting (brief §4.11, §10, EC-047). Reuses the canonical validators —\n * logic is shared, never duplicated — and returns a structured result.\n */\nexport function validateForPersistence(input: BackendValidationInput): BackendValidationResult {\n const graphIssues = input.graph\n ? validateProjectGraph(input.graph, {\n components: input.components,\n knownSourceIds: input.knownSourceIds,\n })\n : []\n\n const schemaIssues = input.collections ? createCollectionRegistry(input.collections).issues.slice() : []\n\n const routeIssues = input.routes\n ? createRouter(input.routes, input.redirects ?? [], {\n defaultLocale: input.defaultLocale,\n }).issues.slice()\n : []\n\n const errorCount =\n graphIssues.filter((i) => i.severity === 'error').length +\n schemaIssues.filter((i) => i.severity === 'error').length +\n routeIssues.filter((i) => i.severity === 'error').length\n\n return { ok: errorCount === 0, graphIssues, schemaIssues, routeIssues, errorCount }\n}\n\n/** Flatten a {@link BackendValidationResult} into generic persistence issues. */\nexport function toPersistenceIssues(result: BackendValidationResult): PersistenceIssue[] {\n return [\n ...result.graphIssues.map((i) => ({ code: i.code, message: i.message, path: i.path.slice(), domain: 'graph' })),\n ...result.schemaIssues.map((i) => ({ code: i.code, message: i.message, path: i.path.slice(), domain: 'cms' })),\n ...result.routeIssues.map((i) => ({ code: i.code, message: i.message, path: i.path.slice(), domain: 'routes' })),\n ]\n}\n\n/**\n * Validate and throw a {@link PersistenceValidationError} when invalid — the\n * server-side rejection path. Only error-severity issues block.\n */\nexport function assertValidForPersistence(input: BackendValidationInput): BackendValidationResult {\n const result = validateForPersistence(input)\n if (!result.ok) {\n const errorIssues: PersistenceIssue[] = [\n ...result.graphIssues\n .filter((i) => i.severity === 'error')\n .map((i) => ({ code: i.code, message: i.message, path: i.path.slice(), domain: 'graph' })),\n ...result.schemaIssues\n .filter((i) => i.severity === 'error')\n .map((i) => ({ code: i.code, message: i.message, path: i.path.slice(), domain: 'cms' })),\n ...result.routeIssues\n .filter((i) => i.severity === 'error')\n .map((i) => ({ code: i.code, message: i.message, path: i.path.slice(), domain: 'routes' })),\n ]\n throw new PersistenceValidationError(\n `Project state failed backend validation (${result.errorCount} error(s)).`,\n errorIssues,\n )\n }\n return result\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"cli-tokens.js","sourceRoot":"","sources":["../../src/persistence/cli-tokens.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli-tokens.js","sourceRoot":"","sources":["../../src/persistence/cli-tokens.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod'\nimport { cloneRecord, createSequentialClock, createSequentialIdFactory } from './core'\nimport type { Clock, IdFactory } from './core'\nimport { RecordNotFoundError } from './core'\n\n/**\n * Revocable per-project CLI tokens (EC-150). The EC-147 push CLI authenticates\n * with `Authorization: Bearer <token>`; the builder stores only a SHA-256 hash\n * of the token (`tokenHash`) — the plaintext is shown exactly once at issuance\n * and never persisted. Verification (`verifyCliToken` in `@elytracms/core/operations`)\n * hashes the presented token and looks it up here; revoked tokens stay stored\n * (with `revokedAt`) so revocation is auditable and ids stay stable.\n */\n\nexport const cliTokenRecordSchema = z.object({\n /** Stable token id (`tok_*`) — used for revocation, never secret. */\n id: z.string().min(1),\n /** Human label, e.g. \"CI push token\". */\n label: z.string().min(1),\n /** Hex SHA-256 of the plaintext token. */\n tokenHash: z.string().min(1),\n createdAt: z.string().min(1),\n /** Present once revoked; a revoked token never verifies again. */\n revokedAt: z.string().min(1).optional(),\n})\nexport type CliTokenRecord = z.infer<typeof cliTokenRecordSchema>\n\nexport interface NewCliTokenInput {\n label: string\n tokenHash: string\n}\n\n/**\n * Token storage boundary. The in-memory implementation below and the\n * Convex-backed implementation in `apps/builder` both satisfy it.\n */\nexport interface CliTokenRepository {\n /** Persist a freshly issued token (hash only). */\n createToken(input: NewCliTokenInput): Promise<CliTokenRecord>\n /** All tokens of this deployment (revoked included), ordered by id. */\n listTokens(): Promise<CliTokenRecord[]>\n /** Mark a token revoked (idempotent). Throws `RecordNotFoundError` when absent. */\n revokeToken(tokenId: string): Promise<CliTokenRecord>\n /** Look a token up by its hash — the verification path. */\n findByHash(tokenHash: string): Promise<CliTokenRecord | undefined>\n}\n\nexport interface InMemoryCliTokenRepositoryOptions {\n clock?: Clock\n idFactory?: IdFactory\n}\n\nexport class InMemoryCliTokenRepository implements CliTokenRepository {\n private readonly records = new Map<string, CliTokenRecord>()\n private readonly clock: Clock\n private readonly idFactory: IdFactory\n\n constructor(options: InMemoryCliTokenRepositoryOptions = {}) {\n this.clock = options.clock ?? createSequentialClock()\n this.idFactory = options.idFactory ?? createSequentialIdFactory('tok')\n }\n\n async createToken(input: NewCliTokenInput): Promise<CliTokenRecord> {\n const record: CliTokenRecord = {\n id: this.idFactory(),\n label: input.label,\n tokenHash: input.tokenHash,\n createdAt: this.clock(),\n }\n this.records.set(record.id, record)\n return cloneRecord(record)\n }\n\n async listTokens(): Promise<CliTokenRecord[]> {\n return [...this.records.values()]\n .sort((a, b) => (a.id < b.id ? -1 : a.id > b.id ? 1 : 0))\n .map(cloneRecord)\n }\n\n async revokeToken(tokenId: string): Promise<CliTokenRecord> {\n const record = this.records.get(tokenId)\n if (!record) {\n throw new RecordNotFoundError('cli-token', tokenId)\n }\n const revoked: CliTokenRecord = {\n ...record,\n revokedAt: record.revokedAt ?? this.clock(),\n }\n this.records.set(tokenId, revoked)\n return cloneRecord(revoked)\n }\n\n async findByHash(tokenHash: string): Promise<CliTokenRecord | undefined> {\n for (const record of this.records.values()) {\n if (record.tokenHash === tokenHash) return cloneRecord(record)\n }\n return undefined\n }\n}\n"]}
@@ -23,6 +23,7 @@ export declare const cmsSchemaRecordSchema: z.ZodObject<{
23
23
  localized: z.ZodOptional<z.ZodBoolean>;
24
24
  titleField: z.ZodOptional<z.ZodString>;
25
25
  singleton: z.ZodOptional<z.ZodBoolean>;
26
+ aliases: z.ZodOptional<z.ZodArray<z.ZodString>>;
26
27
  }, z.core.$strip>>;
27
28
  }, z.core.$strip>;
28
29
  export type CmsSchemaRecord = z.infer<typeof cmsSchemaRecordSchema>;
@@ -40,6 +41,7 @@ export declare const cmsDocumentRecordSchema: z.ZodObject<{
40
41
  document: z.ZodObject<{
41
42
  collection: z.ZodString;
42
43
  id: z.ZodString;
44
+ alias: z.ZodOptional<z.ZodString>;
43
45
  values: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
44
46
  localized: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
45
47
  defaultLocale: z.ZodOptional<z.ZodString>;
@@ -61,6 +63,7 @@ export declare const documentVersionRecordSchema: z.ZodObject<{
61
63
  snapshot: z.ZodObject<{
62
64
  collection: z.ZodString;
63
65
  id: z.ZodString;
66
+ alias: z.ZodOptional<z.ZodString>;
64
67
  values: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
65
68
  localized: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
66
69
  defaultLocale: z.ZodOptional<z.ZodString>;