@elytracms/core 0.0.8 → 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 (193) 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 +1 -0
  22. package/dist/cms-core/index.js +1 -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 +8 -0
  26. package/dist/cms-core/issues.js +10 -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.js.map +1 -1
  31. package/dist/cms-core/routes.js.map +1 -1
  32. package/dist/cms-core/self-type.js.map +1 -1
  33. package/dist/cms-core/url-for-document.js.map +1 -1
  34. package/dist/cms-core/validate-document.js.map +1 -1
  35. package/dist/cms-core/versions.d.ts +1 -0
  36. package/dist/cms-core/versions.js.map +1 -1
  37. package/dist/collaboration/approval.js.map +1 -1
  38. package/dist/collaboration/collaboration.js.map +1 -1
  39. package/dist/collaboration/comments.js.map +1 -1
  40. package/dist/collaboration/core.js.map +1 -1
  41. package/dist/collaboration/index.js.map +1 -1
  42. package/dist/collaboration/presence.js.map +1 -1
  43. package/dist/collaboration/publishing.js.map +1 -1
  44. package/dist/collaboration/versions.js.map +1 -1
  45. package/dist/component-registry/index.js.map +1 -1
  46. package/dist/component-registry/issues.js.map +1 -1
  47. package/dist/component-registry/manifest.js.map +1 -1
  48. package/dist/component-registry/registry.js.map +1 -1
  49. package/dist/content/__fixtures__/filterable-collections.js.map +1 -1
  50. package/dist/content/__fixtures__/sample-accessor-types.js.map +1 -1
  51. package/dist/content/__fixtures__/sample-delivery-types.js.map +1 -1
  52. package/dist/content/assets.js.map +1 -1
  53. package/dist/content/binding-sources.js.map +1 -1
  54. package/dist/content/client.js.map +1 -1
  55. package/dist/content/codegen.js.map +1 -1
  56. package/dist/content/context.js.map +1 -1
  57. package/dist/content/cursor.js.map +1 -1
  58. package/dist/content/index.js.map +1 -1
  59. package/dist/content/locale.js.map +1 -1
  60. package/dist/content/perspective.js.map +1 -1
  61. package/dist/content/populate.js.map +1 -1
  62. package/dist/content/query.js.map +1 -1
  63. package/dist/content/raw.js.map +1 -1
  64. package/dist/content/resolve.js.map +1 -1
  65. package/dist/content/serialize.js.map +1 -1
  66. package/dist/content/tags.js.map +1 -1
  67. package/dist/data-binding/fixtures.js.map +1 -1
  68. package/dist/data-binding/index.js.map +1 -1
  69. package/dist/data-binding/issues.js.map +1 -1
  70. package/dist/data-binding/resolve.js.map +1 -1
  71. package/dist/data-binding/sample.js.map +1 -1
  72. package/dist/data-binding/sources.js.map +1 -1
  73. package/dist/data-binding/tokens.js.map +1 -1
  74. package/dist/design-tokens/css.js.map +1 -1
  75. package/dist/design-tokens/index.js.map +1 -1
  76. package/dist/design-tokens/style-guide.js.map +1 -1
  77. package/dist/design-tokens/tokens.js.map +1 -1
  78. package/dist/export-sync/builder-source.d.ts +1 -0
  79. package/dist/export-sync/builder-source.js.map +1 -1
  80. package/dist/export-sync/check.js.map +1 -1
  81. package/dist/export-sync/cli.js.map +1 -1
  82. package/dist/export-sync/core.js.map +1 -1
  83. package/dist/export-sync/eject.js.map +1 -1
  84. package/dist/export-sync/fixtures.js.map +1 -1
  85. package/dist/export-sync/generate.js.map +1 -1
  86. package/dist/export-sync/index.js.map +1 -1
  87. package/dist/export-sync/init.js.map +1 -1
  88. package/dist/export-sync/manifest-host.js.map +1 -1
  89. package/dist/export-sync/node.js.map +1 -1
  90. package/dist/export-sync/push.js.map +1 -1
  91. package/dist/export-sync/registry-sync-client.js.map +1 -1
  92. package/dist/export-sync/sync.js.map +1 -1
  93. package/dist/export-sync/typegen.js.map +1 -1
  94. package/dist/export-sync/validate.js.map +1 -1
  95. package/dist/export-sync/watch.js.map +1 -1
  96. package/dist/operations/assets.js.map +1 -1
  97. package/dist/operations/authorization.js.map +1 -1
  98. package/dist/operations/changesets.js.map +1 -1
  99. package/dist/operations/client.js.map +1 -1
  100. package/dist/operations/core.js.map +1 -1
  101. package/dist/operations/documents.d.ts +21 -0
  102. package/dist/operations/documents.js.map +1 -1
  103. package/dist/operations/graph.js.map +1 -1
  104. package/dist/operations/index.js.map +1 -1
  105. package/dist/operations/members.js.map +1 -1
  106. package/dist/operations/publishing.js.map +1 -1
  107. package/dist/operations/references.js.map +1 -1
  108. package/dist/operations/schema.d.ts +18 -0
  109. package/dist/operations/schema.js.map +1 -1
  110. package/dist/operations/tokens.js.map +1 -1
  111. package/dist/persistence/adapter.js.map +1 -1
  112. package/dist/persistence/assets.js.map +1 -1
  113. package/dist/persistence/backend-validation.js.map +1 -1
  114. package/dist/persistence/cli-tokens.js.map +1 -1
  115. package/dist/persistence/cms.d.ts +3 -0
  116. package/dist/persistence/cms.js.map +1 -1
  117. package/dist/persistence/contract-scenarios.js.map +1 -1
  118. package/dist/persistence/core.js.map +1 -1
  119. package/dist/persistence/graph.js.map +1 -1
  120. package/dist/persistence/index.js.map +1 -1
  121. package/dist/persistence/members.js.map +1 -1
  122. package/dist/persistence/publishing.js.map +1 -1
  123. package/dist/persistence/reference-extraction.js.map +1 -1
  124. package/dist/persistence/reference-indexing.js.map +1 -1
  125. package/dist/persistence/references.js.map +1 -1
  126. package/dist/persistence/seed.js.map +1 -1
  127. package/dist/persistence/self-maintaining-adapter.js.map +1 -1
  128. package/dist/plugins/asset-storage.js.map +1 -1
  129. package/dist/plugins/component-package.js.map +1 -1
  130. package/dist/plugins/data-sources.js.map +1 -1
  131. package/dist/plugins/examples.js.map +1 -1
  132. package/dist/plugins/export-targets.js.map +1 -1
  133. package/dist/plugins/field-types.js.map +1 -1
  134. package/dist/plugins/hooks.js.map +1 -1
  135. package/dist/plugins/index.js.map +1 -1
  136. package/dist/plugins/marketplace.js.map +1 -1
  137. package/dist/plugins/plugin.js.map +1 -1
  138. package/dist/plugins/templates.js.map +1 -1
  139. package/dist/project-graph/binding.js.map +1 -1
  140. package/dist/project-graph/container.js.map +1 -1
  141. package/dist/project-graph/edit.js.map +1 -1
  142. package/dist/project-graph/fixtures.js.map +1 -1
  143. package/dist/project-graph/ids.js.map +1 -1
  144. package/dist/project-graph/index.js.map +1 -1
  145. package/dist/project-graph/issues.js.map +1 -1
  146. package/dist/project-graph/json.js.map +1 -1
  147. package/dist/project-graph/node.js.map +1 -1
  148. package/dist/project-graph/normalize.js.map +1 -1
  149. package/dist/project-graph/serialize.js.map +1 -1
  150. package/dist/project-graph/structure.js.map +1 -1
  151. package/dist/project-graph/validate.js.map +1 -1
  152. package/dist/rich-text/adapter.js.map +1 -1
  153. package/dist/rich-text/dom-editor.js.map +1 -1
  154. package/dist/rich-text/embed.js.map +1 -1
  155. package/dist/rich-text/fixtures.js.map +1 -1
  156. package/dist/rich-text/html.js.map +1 -1
  157. package/dist/rich-text/index.js.map +1 -1
  158. package/dist/rich-text/markdown.js.map +1 -1
  159. package/dist/rich-text/portable-text.js.map +1 -1
  160. package/dist/rich-text/registry.js.map +1 -1
  161. package/dist/rich-text/render.js.map +1 -1
  162. package/dist/rich-text/schema.js.map +1 -1
  163. package/dist/rich-text/test-support.js.map +1 -1
  164. package/dist/runtime-renderer/client.js.map +1 -1
  165. package/dist/runtime-renderer/condition.js.map +1 -1
  166. package/dist/runtime-renderer/content-client.js.map +1 -1
  167. package/dist/runtime-renderer/context.js.map +1 -1
  168. package/dist/runtime-renderer/fallback.js.map +1 -1
  169. package/dist/runtime-renderer/index.js.map +1 -1
  170. package/dist/runtime-renderer/primitives.js.map +1 -1
  171. package/dist/runtime-renderer/render.js.map +1 -1
  172. package/dist/runtime-renderer/rich-text.js.map +1 -1
  173. package/dist/starter-kits/index.js.map +1 -1
  174. package/dist/starter-kits/instantiate.js.map +1 -1
  175. package/dist/starter-kits/kit.js.map +1 -1
  176. package/dist/starter-kits/kits.js.map +1 -1
  177. package/dist/starter-kits/manifests.js.map +1 -1
  178. package/dist/starter-kits/upgrade.js.map +1 -1
  179. package/dist/starter-kits/validate.js.map +1 -1
  180. package/dist/studio-core/context.js.map +1 -1
  181. package/dist/studio-core/errors.js.map +1 -1
  182. package/dist/studio-core/fixtures.js.map +1 -1
  183. package/dist/studio-core/ids.js.map +1 -1
  184. package/dist/studio-core/index.js.map +1 -1
  185. package/dist/studio-core/issues.js.map +1 -1
  186. package/dist/studio-core/metadata.js.map +1 -1
  187. package/dist/studio-core/repository.js.map +1 -1
  188. package/dist/studio-core/sections.d.ts +1 -1
  189. package/dist/studio-core/sections.js.map +1 -1
  190. package/dist/studio-core/validate.js.map +1 -1
  191. package/dist/studio-core/workspace-config.d.ts +4 -0
  192. package/dist/studio-core/workspace-config.js.map +1 -1
  193. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"contract-scenarios.js","sourceRoot":"","sources":["../../src/persistence/contract-scenarios.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"contract-scenarios.js","sourceRoot":"","sources":["../../src/persistence/contract-scenarios.ts"],"names":[],"mappings":"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","sourcesContent":["import { serializeProjectGraph, validSampleGraph } from '@elytracms/core/project-graph'\nimport { sampleCollections, sampleDocuments } from '@elytracms/core/cms-core'\nimport type { CollectionDef } from '@elytracms/core/cms-core'\nimport { PersistenceValidationError, RecordNotFoundError } from './core'\nimport type { PersistenceAdapter } from './adapter'\nimport { compareReferenceEntries } from './references'\nimport type { ReferenceSource } from './references'\n\n/**\n * EC-153 — the adapter-contract scenario suite, exported as plain reusable\n * functions so **every** {@link PersistenceAdapter} implementation runs the\n * *same* behavioural checks (EC-049 promoted from in-memory-only tests):\n *\n * - `packages/persistence` runs them against `InMemoryPersistenceAdapter`.\n * - `apps/builder` runs them against `ConvexPersistenceAdapter` over the\n * fake-ctx Convex backend (deployment-free, real Convex function handlers).\n *\n * The module is deliberately test-framework-agnostic (no vitest import — it is\n * exported from the package index, which browser code consumes): scenarios\n * throw `ContractAssertionError` on divergence and the host suite turns each\n * scenario into one `it(...)`.\n */\n\n// --- Harness ----------------------------------------------------------------\n\n/** Everything a scenario may assume about the world it runs in. */\nexport interface ContractContext {\n adapter: PersistenceAdapter\n /**\n * An existing project the session user administers. Scenarios write all\n * project-scoped records here.\n */\n projectId: string\n /**\n * A second project the session user administers, guaranteed to hold **no**\n * graph/schema/content — backs the missing-record scenarios (Convex role\n * guards require membership even to learn that nothing exists).\n */\n emptyProjectId: string\n /** The authenticated caller (Convex guards + caller-scoped queries use it). */\n sessionUserId: string\n /**\n * Seed the project's CMS collection schema for the scenario. Adapter-specific\n * (EC-183, AD-11): the in-memory adapter persists it via `saveSchema`; the\n * Convex adapter's schema is config-owned (injected at construction, no\n * `cmsSchemas` table), so this is a no-op there. Scenarios that need a schema\n * present call this instead of `adapter.cms.saveSchema` so both adapters work.\n */\n seedSchema(collections: readonly CollectionDef[]): Promise<void>\n}\n\n/** Builds a *fresh* context per scenario — scenarios never share state. */\nexport type ContractHarness = () => Promise<ContractContext>\n\nexport interface ContractScenario {\n domain:\n | 'graphs'\n | 'cms'\n | 'assets'\n | 'publishing'\n | 'members'\n | 'cli-tokens'\n | 'references'\n | 'round-trip'\n name: string\n /**\n * Asserts isolation between two projects (uses `emptyProjectId`). Not\n * meaningful for single-tenant backends where one deployment IS one project\n * (EC-179) — those harnesses filter these out; multi-project adapters\n * (in-memory) run them all.\n */\n crossProject?: boolean\n run(ctx: ContractContext): Promise<void>\n}\n\n// --- Assertions (framework-agnostic) -----------------------------------------\n\nexport class ContractAssertionError extends Error {\n constructor(message: string) {\n super(message)\n this.name = 'ContractAssertionError'\n }\n}\n\nfunction show(value: unknown): string {\n if (value === undefined) return 'undefined'\n try {\n return JSON.stringify(value)\n } catch {\n return String(value)\n }\n}\n\nexport function ensure(condition: unknown, message: string): asserts condition {\n if (!condition) throw new ContractAssertionError(message)\n}\n\nfunction deepEqual(a: unknown, b: unknown): boolean {\n if (Object.is(a, b)) return true\n if (Array.isArray(a) && Array.isArray(b)) {\n return a.length === b.length && a.every((item, i) => deepEqual(item, b[i]))\n }\n if (typeof a === 'object' && typeof b === 'object' && a !== null && b !== null) {\n const keysA = Object.keys(a).filter((k) => (a as Record<string, unknown>)[k] !== undefined)\n const keysB = Object.keys(b).filter((k) => (b as Record<string, unknown>)[k] !== undefined)\n if (keysA.length !== keysB.length) return false\n return keysA.every((key) =>\n deepEqual((a as Record<string, unknown>)[key], (b as Record<string, unknown>)[key]),\n )\n }\n return false\n}\n\nexport function ensureEqual(actual: unknown, expected: unknown, label: string): void {\n if (!deepEqual(actual, expected)) {\n throw new ContractAssertionError(`${label}: expected ${show(expected)}, got ${show(actual)}`)\n }\n}\n\n/** Awaits `work` and demands it rejects with an instance of `errorClass`. */\nexport async function ensureRejects(\n work: Promise<unknown>,\n errorClass: abstract new (...args: never[]) => Error,\n label: string,\n): Promise<void> {\n try {\n await work\n } catch (error) {\n if (error instanceof errorClass) return\n const detail = error instanceof Error ? `${error.name}: ${error.message}` : show(error)\n throw new ContractAssertionError(\n `${label}: expected rejection with ${errorClass.name}, got ${detail}`,\n )\n }\n throw new ContractAssertionError(`${label}: expected rejection with ${errorClass.name}`)\n}\n\n/** Awaits `work` and demands it rejects (with anything). */\nasync function ensureRejectsAny(work: Promise<unknown>, label: string): Promise<void> {\n try {\n await work\n } catch {\n return\n }\n throw new ContractAssertionError(`${label}: expected a rejection`)\n}\n\n// --- Scenarios ----------------------------------------------------------------\n\nconst graphScenarios: ContractScenario[] = [\n {\n domain: 'graphs',\n name: 'appends revisions and reloads the latest graph losslessly',\n async run({ adapter, projectId }) {\n const r1 = await adapter.graphs.saveGraph(projectId, validSampleGraph, {\n label: 'Initial import',\n })\n ensureEqual(r1.revision, 1, 'first revision number')\n const r2 = await adapter.graphs.saveGraph(projectId, validSampleGraph)\n ensureEqual(r2.revision, 2, 'second revision number')\n\n const latest = await adapter.graphs.getLatest(projectId)\n ensureEqual(latest.revision.revision, 2, 'getLatest() revision')\n ensureEqual(\n serializeProjectGraph(latest.graph),\n serializeProjectGraph(validSampleGraph),\n 'lossless serialize → parse round-trip',\n )\n\n const prior = await adapter.graphs.getRevision(projectId, 1)\n ensureEqual(prior.revision.label, 'Initial import', 'prior revision label')\n ensureEqual(\n (await adapter.graphs.listRevisions(projectId)).map((r) => r.revision),\n [2, 1],\n 'listRevisions() newest first',\n )\n },\n },\n {\n domain: 'graphs',\n name: 'reports missing graphs/revisions as not-found (never crashes)',\n crossProject: true,\n async run({ adapter, projectId, emptyProjectId }) {\n await ensureRejects(\n adapter.graphs.getLatest(emptyProjectId),\n RecordNotFoundError,\n 'getLatest() on a project without a graph',\n )\n await adapter.graphs.saveGraph(projectId, validSampleGraph)\n await ensureRejects(\n adapter.graphs.getRevision(projectId, 99),\n RecordNotFoundError,\n 'getRevision() for an unknown revision',\n )\n ensureEqual(await adapter.graphs.hasGraph(projectId), true, 'hasGraph() with a graph')\n ensureEqual(await adapter.graphs.hasGraph(emptyProjectId), false, 'hasGraph() without')\n },\n },\n {\n domain: 'graphs',\n name: 'rejects a malformed graph with a validation error',\n async run({ adapter, projectId }) {\n await ensureRejects(\n adapter.graphs.saveGraph(projectId, {} as never),\n PersistenceValidationError,\n 'saveGraph() with a malformed graph',\n )\n },\n },\n]\n\nconst cmsScenarios: ContractScenario[] = [\n {\n domain: 'cms',\n name: 'saves a valid schema, rejects duplicates, preserves createdAt on re-save',\n crossProject: true,\n async run({ adapter, projectId, emptyProjectId }) {\n const record = await adapter.cms.saveSchema(projectId, sampleCollections)\n ensureEqual(record.collections.length, sampleCollections.length, 'saved collection count')\n await ensureRejects(\n adapter.cms.saveSchema(projectId, [...sampleCollections, sampleCollections[0]!]),\n PersistenceValidationError,\n 'saveSchema() with a duplicated collection',\n )\n const resaved = await adapter.cms.saveSchema(projectId, sampleCollections)\n ensureEqual(resaved.createdAt, record.createdAt, 'saveSchema() preserves createdAt')\n\n await ensureRejects(\n adapter.cms.getSchema(emptyProjectId),\n RecordNotFoundError,\n 'getSchema() without a schema',\n )\n ensureEqual(\n await adapter.cms.findSchema(emptyProjectId),\n undefined,\n 'findSchema() without a schema',\n )\n },\n },\n {\n domain: 'cms',\n name: 'round-trips documents with localized variants and the publish pointer',\n async run({ adapter, projectId, seedSchema }) {\n await seedSchema(sampleCollections)\n for (const doc of sampleDocuments) await adapter.cms.upsertDocument(projectId, doc)\n\n const localized = sampleDocuments.find((d) => d.localized)!\n const ref = { collection: localized.collection, id: localized.id }\n const reloaded = await adapter.cms.getDocument(projectId, ref)\n ensureEqual(reloaded.document.localized, localized.localized, 'localized variants intact')\n\n // EC-224: publish-ness is the version pointer — record a snapshot, pin it.\n const version = await adapter.cms.saveDocumentVersion(projectId, reloaded.document, {\n label: 'published',\n })\n const published = await adapter.cms.publishDocumentVersion(projectId, ref, version.version)\n ensureEqual(published.publishedVersion, version.version, 'publishDocumentVersion() pins live')\n ensureEqual(\n (await adapter.cms.getDocument(projectId, ref)).publishedVersion,\n version.version,\n 'pin persisted',\n )\n ensureEqual(published.createdAt, reloaded.createdAt, 'pinning preserves createdAt')\n },\n },\n {\n domain: 'cms',\n name: 'stores documents data-only; lists deterministically; deletes with not-found',\n async run({ adapter, projectId, seedSchema }) {\n await seedSchema(sampleCollections)\n // EC-183 (AD-11): the persistence layer is a pure document store — it does\n // NOT reject an undeclared collection (collection-membership validation\n // moved to `@elytracms/core/cms-core` `validateDocument`, run by the studio\n // pre-dispatch and by the operations layer for declared collections). A\n // document in any collection round-trips; shape is still enforced.\n const stored = await adapter.cms.upsertDocument(projectId, {\n collection: 'ghosts',\n id: 'g1',\n values: {},\n })\n ensureEqual(stored.document.collection, 'ghosts', 'stores an undeclared collection')\n await adapter.cms.deleteDocument(projectId, { collection: 'ghosts', id: 'g1' })\n\n for (const doc of sampleDocuments) await adapter.cms.upsertDocument(projectId, doc)\n const posts = await adapter.cms.listDocuments(projectId, 'post')\n ensure(posts.length > 0, 'listDocuments(post) is non-empty')\n ensure(\n posts.every((r) => r.document.collection === 'post'),\n 'listDocuments(post) filters by collection',\n )\n const all = await adapter.cms.listDocuments(projectId)\n const keys = all.map((r) => `${r.document.collection}:${r.document.id}`)\n ensureEqual(keys, [...keys].sort(), 'listDocuments() ordered by document key')\n\n const first = sampleDocuments[0]!\n const ref = { collection: first.collection, id: first.id }\n await adapter.cms.deleteDocument(projectId, ref)\n await ensureRejects(\n adapter.cms.getDocument(projectId, ref),\n RecordNotFoundError,\n 'getDocument() after delete',\n )\n await ensureRejects(\n adapter.cms.deleteDocument(projectId, ref),\n RecordNotFoundError,\n 'deleteDocument() when already gone',\n )\n },\n },\n {\n domain: 'cms',\n name: 'records monotonic versions, pins/unpins the live one, cascades on delete (EC-224)',\n async run({ adapter, projectId, seedSchema }) {\n await seedSchema(sampleCollections)\n const doc = sampleDocuments[0]!\n const ref = { collection: doc.collection, id: doc.id }\n await adapter.cms.upsertDocument(projectId, doc)\n\n // No versions, nothing pinned, before the first snapshot.\n ensureEqual(\n (await adapter.cms.listDocumentVersions(projectId, ref)).length,\n 0,\n 'no versions initially',\n )\n await ensureRejects(\n adapter.cms.getDocumentVersion(projectId, ref, 1),\n RecordNotFoundError,\n 'getDocumentVersion() before any snapshot',\n )\n\n // Append two versions — monotonic numbering, newest-first listing.\n const v1 = await adapter.cms.saveDocumentVersion(projectId, doc, { label: 'published' })\n ensureEqual(v1.version, 1, 'first recorded version is 1')\n const v2 = await adapter.cms.saveDocumentVersion(projectId, doc)\n ensureEqual(v2.version, 2, 'second recorded version is 2')\n ensureEqual(\n (await adapter.cms.listDocumentVersions(projectId, ref)).map((r) => r.version),\n [2, 1],\n 'listDocumentVersions() newest first',\n )\n ensureEqual(\n (await adapter.cms.getDocumentVersion(projectId, ref, 1)).label,\n 'published',\n 'version label round-trips',\n )\n\n // Pin v1 live; pinning an unknown version is not-found.\n const pinned = await adapter.cms.publishDocumentVersion(projectId, ref, 1)\n ensureEqual(pinned.publishedVersion, 1, 'publishDocumentVersion() pins the live version')\n ensureEqual(\n (await adapter.cms.getDocument(projectId, ref)).publishedVersion,\n 1,\n 'published pin persists on the document',\n )\n\n // A draft edit must NOT clear the live pin (the Sanity model: editing the\n // working draft never unpublishes). Cross-adapter parity: Convex patches\n // the row, in-memory preserves `publishedVersion` the same way.\n await adapter.cms.upsertDocument(projectId, doc)\n ensureEqual(\n (await adapter.cms.getDocument(projectId, ref)).publishedVersion,\n 1,\n 'a draft edit (upsert) preserves the published pin',\n )\n\n await ensureRejects(\n adapter.cms.publishDocumentVersion(projectId, ref, 99),\n RecordNotFoundError,\n 'publishDocumentVersion() with an unknown version',\n )\n\n // Unpin; unpublishing a second time is an invalid transition.\n const unpinned = await adapter.cms.unpublishDocument(projectId, ref)\n ensureEqual(unpinned.publishedVersion, undefined, 'unpublishDocument() clears the pin')\n await ensureRejects(\n adapter.cms.unpublishDocument(projectId, ref),\n PersistenceValidationError,\n 'unpublishDocument() when nothing is published',\n )\n\n // Delete cascades the version history; a fresh document renumbers from 1.\n await adapter.cms.publishDocumentVersion(projectId, ref, 2)\n await adapter.cms.deleteDocument(projectId, ref)\n await adapter.cms.upsertDocument(projectId, doc)\n ensureEqual(\n (await adapter.cms.listDocumentVersions(projectId, ref)).length,\n 0,\n 'deleteDocument() cascades the version history',\n )\n ensureEqual(\n (await adapter.cms.getDocument(projectId, ref)).publishedVersion,\n undefined,\n 'a re-created document is unpublished',\n )\n const reborn = await adapter.cms.saveDocumentVersion(projectId, doc)\n ensureEqual(reborn.version, 1, 'version numbering restarts after a cascade delete')\n\n // listAllDocumentVersions aggregates across documents (delivery feeders).\n const other = { collection: doc.collection, id: 'ec224-other', values: {} }\n await adapter.cms.upsertDocument(projectId, other)\n await adapter.cms.saveDocumentVersion(projectId, other)\n const allVersions = await adapter.cms.listAllDocumentVersions(projectId)\n const docKeys = new Set(allVersions.map((r) => `${r.collection}:${r.docId}`))\n ensure(\n docKeys.has(`${doc.collection}:${doc.id}`) &&\n docKeys.has(`${other.collection}:${other.id}`),\n 'listAllDocumentVersions() spans documents',\n )\n },\n },\n]\n\nconst assetScenarios: ContractScenario[] = [\n {\n domain: 'assets',\n name: 'upserts, resolves, lists, and removes asset metadata',\n async run({ adapter, projectId }) {\n const a = await adapter.assets.upsertAsset(projectId, {\n filename: 'cover.jpg',\n contentType: 'image/jpeg',\n byteSize: 1024,\n width: 1200,\n height: 630,\n alt: 'Cover image',\n title: 'Launch cover',\n })\n ensureEqual(a.storageKey, `${projectId}/${a.id}`, 'default storageKey derivation')\n ensureEqual(a.title, 'Launch cover', 'title round-trips (EC-152 metadata)')\n ensureEqual(a.width, 1200, 'width round-trips')\n\n const b = await adapter.assets.upsertAsset(projectId, {\n id: 'asset_logo',\n filename: 'logo.svg',\n contentType: 'image/svg+xml',\n byteSize: 256,\n })\n ensureEqual(b.id, 'asset_logo', 'explicit asset id honored')\n\n const resolved = await adapter.assets.resolveMany(projectId, [a.id, 'missing'])\n ensureEqual(resolved.get(a.id)?.filename, 'cover.jpg', 'resolveMany() hit')\n ensureEqual(resolved.has('missing'), false, 'resolveMany() miss')\n\n const listed = await adapter.assets.listAssets(projectId)\n ensureEqual(\n listed.map((r) => r.id),\n [a.id, b.id].sort(),\n 'listAssets() ordered by id',\n )\n\n await adapter.assets.removeAsset(projectId, a.id)\n await ensureRejects(\n adapter.assets.getAsset(projectId, a.id),\n RecordNotFoundError,\n 'getAsset() after remove',\n )\n await ensureRejects(\n adapter.assets.removeAsset(projectId, a.id),\n RecordNotFoundError,\n 'removeAsset() when already gone',\n )\n ensureEqual(await adapter.assets.findAsset(projectId, a.id), undefined, 'findAsset() miss')\n },\n },\n]\n\nconst publishingScenarios: ContractScenario[] = [\n {\n domain: 'publishing',\n name: 'publishes, reverts to draft, preserves createdAt',\n async run({ adapter, projectId }) {\n const published = await adapter.publishing.publish(projectId, {\n revisionId: 'rev_1',\n revision: 1,\n })\n ensureEqual(published.status, 'published', 'publish() status')\n ensureEqual(published.publishedRevision, 1, 'publish() pinned revision')\n\n const republished = await adapter.publishing.publish(projectId, {\n revisionId: 'rev_2',\n revision: 2,\n })\n ensureEqual(republished.publishedRevision, 2, 'republish() repins')\n ensureEqual(republished.createdAt, published.createdAt, 'republish() preserves createdAt')\n\n const reverted = await adapter.publishing.unpublish(projectId)\n ensureEqual(reverted.status, 'draft', 'unpublish() status')\n ensureEqual(reverted.publishedRevisionId, undefined, 'unpublish() clears the pin')\n ensureEqual(reverted.createdAt, published.createdAt, 'unpublish() preserves createdAt')\n },\n },\n {\n domain: 'publishing',\n name: 'validates transitions and inputs',\n async run({ adapter, projectId }) {\n await ensureRejects(\n adapter.publishing.unpublish(projectId),\n PersistenceValidationError,\n 'unpublish() of a never-published deployment',\n )\n await ensureRejects(\n adapter.publishing.publish(projectId, { revisionId: '', revision: 1 }),\n PersistenceValidationError,\n 'publish() without a revision id',\n )\n await ensureRejects(\n adapter.publishing.publish(projectId, { revisionId: 'rev_1', revision: 0 }),\n PersistenceValidationError,\n 'publish() with a non-positive revision',\n )\n },\n },\n {\n domain: 'publishing',\n name: 'reports the unpublished state as not-found before the first publish',\n async run({ adapter, projectId }) {\n await ensureRejects(\n adapter.publishing.getState(projectId),\n RecordNotFoundError,\n 'getState() before the first publish',\n )\n ensureEqual(\n await adapter.publishing.findState(projectId),\n undefined,\n 'findState() before the first publish',\n )\n },\n },\n]\n\nconst memberScenarios: ContractScenario[] = [\n {\n domain: 'members',\n name: 'sets, updates, lists, and removes memberships',\n async run({ adapter, projectId, sessionUserId }) {\n const blue = await adapter.members.setMember(projectId, 'user_blue', 'editor')\n ensureEqual(blue.role, 'editor', 'setMember() role')\n await adapter.members.setMember(projectId, 'user_zed', 'viewer')\n\n const promoted = await adapter.members.setMember(projectId, 'user_blue', 'admin')\n ensureEqual(promoted.role, 'admin', 'setMember() updates an existing role')\n ensureEqual(promoted.createdAt, blue.createdAt, 'role update preserves createdAt')\n\n ensureEqual(\n (await adapter.members.findMember(projectId, 'user_zed'))?.role,\n 'viewer',\n 'findMember()',\n )\n const expectedUsers = [sessionUserId, 'user_blue', 'user_zed'].sort()\n ensureEqual(\n (await adapter.members.listMembers(projectId)).map((m) => m.userId),\n expectedUsers,\n 'listMembers() ordered by userId',\n )\n\n await adapter.members.removeMember(projectId, 'user_zed')\n ensureEqual(\n await adapter.members.findMember(projectId, 'user_zed'),\n undefined,\n 'findMember() after remove',\n )\n await ensureRejects(\n adapter.members.removeMember(projectId, 'user_zed'),\n RecordNotFoundError,\n 'removeMember() when already gone',\n )\n },\n },\n {\n domain: 'members',\n name: 'lists the session user’s memberships across projects, ordered by project',\n crossProject: true,\n async run({ adapter, projectId, emptyProjectId, sessionUserId }) {\n const memberships = await adapter.members.listMembershipsForUser(sessionUserId)\n const projectIds = memberships.map((m) => m.projectId)\n ensureEqual(projectIds, [...projectIds].sort(), 'memberships ordered by projectId')\n ensure(projectIds.includes(projectId), 'membership on the primary project')\n ensure(projectIds.includes(emptyProjectId), 'membership on the empty project')\n ensure(\n memberships.every((m) => m.userId === sessionUserId),\n 'memberships belong to the session user',\n )\n },\n },\n]\n\nconst cliTokenScenarios: ContractScenario[] = [\n {\n domain: 'cli-tokens',\n name: 'creates, lists, revokes (idempotently), and verifies by hash',\n async run({ adapter }) {\n const t1 = await adapter.cliTokens.createToken({\n label: 'CI push token',\n tokenHash: 'hash_a',\n })\n await adapter.cliTokens.createToken({ label: 'Local sync', tokenHash: 'hash_b' })\n\n const listed = await adapter.cliTokens.listTokens()\n ensureEqual(listed.length, 2, 'listTokens() count')\n ensureEqual(\n listed.map((t) => t.id),\n listed.map((t) => t.id).sort(),\n 'listTokens() ordered by token id',\n )\n\n ensureEqual(\n (await adapter.cliTokens.findByHash('hash_a'))?.id,\n t1.id,\n 'findByHash() resolves the token',\n )\n ensureEqual(await adapter.cliTokens.findByHash('nope'), undefined, 'findByHash() miss')\n\n const revoked = await adapter.cliTokens.revokeToken(t1.id)\n ensure(typeof revoked.revokedAt === 'string', 'revokeToken() stamps revokedAt')\n const again = await adapter.cliTokens.revokeToken(t1.id)\n ensureEqual(again.revokedAt, revoked.revokedAt, 'revokeToken() is idempotent')\n ensureEqual(\n (await adapter.cliTokens.findByHash('hash_a'))?.revokedAt,\n revoked.revokedAt,\n 'revoked tokens stay findable (auditable)',\n )\n await ensureRejects(\n adapter.cliTokens.revokeToken('tok_missing'),\n RecordNotFoundError,\n 'revokeToken() unknown id',\n )\n },\n },\n]\n\nconst DOC_SOURCE: ReferenceSource = { type: 'document', id: 'post:hello' }\n\nconst referenceScenarios: ContractScenario[] = [\n {\n domain: 'references',\n name: 'replaces per source and answers outbound/inbound lookups deterministically',\n async run({ adapter, projectId }) {\n const entries = await adapter.references.replaceForSource(projectId, 'draft', DOC_SOURCE, [\n {\n path: 'values/cover',\n target: { type: 'asset', id: 'asset_cover' },\n kind: 'asset-field',\n },\n {\n path: 'values/author',\n target: { type: 'document', id: 'author:ada' },\n kind: 'relation-field',\n },\n ])\n ensureEqual(entries.length, 2, 'replaceForSource() returns the stored entries')\n ensureEqual(\n entries,\n [...entries].sort(compareReferenceEntries),\n 'entries are canonically ordered',\n )\n\n const outbound = await adapter.references.outbound(projectId, DOC_SOURCE, {\n variant: 'draft',\n })\n ensureEqual(outbound.length, 2, 'outbound() finds both entries')\n const inbound = await adapter.references.inbound(projectId, {\n type: 'asset',\n id: 'asset_cover',\n })\n ensureEqual(inbound.length, 1, 'inbound() finds the asset usage')\n ensureEqual(inbound[0]!.source, DOC_SOURCE, 'inbound() attributes the source')\n\n // Replace-all-for-source: the previous entries vanish.\n await adapter.references.replaceForSource(projectId, 'draft', DOC_SOURCE, [\n {\n path: 'values/author',\n target: { type: 'document', id: 'author:ada' },\n kind: 'relation-field',\n },\n ])\n ensureEqual(\n (await adapter.references.outbound(projectId, DOC_SOURCE)).length,\n 1,\n 'replaceForSource() replaces rather than appends',\n )\n },\n },\n {\n domain: 'references',\n name: 'replaces by source type, removes per source, and clears projects',\n async run({ adapter, projectId }) {\n await adapter.references.replaceForSource(projectId, 'draft', DOC_SOURCE, [\n {\n path: 'values/author',\n target: { type: 'document', id: 'author:ada' },\n kind: 'relation-field',\n },\n ])\n const pageEntries = await adapter.references.replaceForSourceTypes(\n projectId,\n 'draft',\n ['page'],\n [\n {\n source: { type: 'page', id: 'page.home' },\n path: 'root/props/cover',\n target: { type: 'asset', id: 'asset_cover' },\n kind: 'prop-binding',\n },\n ],\n )\n ensureEqual(pageEntries.length, 1, 'replaceForSourceTypes() returns the scoped entries')\n ensureEqual(\n (await adapter.references.listEntries(projectId, 'draft')).length,\n 2,\n 'document entries survive a page-scoped replace',\n )\n\n await adapter.references.removeForSource(projectId, DOC_SOURCE, 'draft')\n ensureEqual(\n (await adapter.references.outbound(projectId, DOC_SOURCE)).length,\n 0,\n 'removeForSource() clears the source',\n )\n\n // EC-269 build marker: absent until set, round-trips, cleared by clearProject.\n ensureEqual(\n await adapter.references.getBuildMarker(projectId),\n null,\n 'build marker is absent until a backfill sets it',\n )\n await adapter.references.setBuildMarker(projectId, { entryCount: 7 })\n ensureEqual(\n (await adapter.references.getBuildMarker(projectId))?.entryCount,\n 7,\n 'setBuildMarker() round-trips the marker',\n )\n\n await adapter.references.clearProject(projectId)\n ensureEqual(\n (await adapter.references.listEntries(projectId)).length,\n 0,\n 'clearProject() empties the index',\n )\n ensureEqual(\n await adapter.references.getBuildMarker(projectId),\n null,\n 'clearProject() also clears the build marker',\n )\n },\n },\n]\n\n/**\n * The acceptance-criterion round-trip (EC-153): edit the graph → a new revision\n * record → publish that revision → the deployment pins it — against whatever\n * adapter the harness provides.\n */\nexport const graphEditPublishRoundTrip: ContractScenario = {\n domain: 'round-trip',\n name: 'graph edit → revision record → publish round-trips',\n async run({ adapter, projectId }) {\n const r1 = await adapter.graphs.saveGraph(projectId, validSampleGraph, {\n label: 'Initial import',\n })\n\n // Edit: rename the project graph (a real content change, deterministic).\n const edited = structuredClone(validSampleGraph)\n edited.metadata = { ...edited.metadata, name: 'Sample Project (edited)' }\n const r2 = await adapter.graphs.saveGraph(projectId, edited, { message: 'Rename project' })\n ensureEqual(r2.revision, r1.revision + 1, 'the edit appends a new revision')\n\n const state = await adapter.publishing.publish(projectId, {\n revisionId: r2.id,\n revision: r2.revision,\n })\n ensureEqual(state.status, 'published', 'publish() succeeds')\n ensureEqual(state.publishedRevisionId, r2.id, 'the edited revision is pinned')\n\n const live = await adapter.graphs.getRevision(projectId, r2.revision)\n ensureEqual(live.graph.metadata?.name, 'Sample Project (edited)', 'published graph content')\n const original = await adapter.graphs.getRevision(projectId, r1.revision)\n ensureEqual(original.graph.metadata?.name, 'Sample Project', 'history stays intact')\n\n const reverted = await adapter.publishing.unpublish(projectId)\n ensureEqual(reverted.status, 'draft', 'unpublish() reverts to draft')\n },\n}\n\nconst stateScenarios: ContractScenario[] = [\n {\n domain: 'round-trip',\n name: 'rejects pinning a version that was never recorded',\n async run({ adapter, projectId, seedSchema }) {\n await seedSchema(sampleCollections)\n const doc = sampleDocuments[0]!\n await adapter.cms.upsertDocument(projectId, doc)\n // EC-224: a pin must reference an EXISTING recorded version — pinning an\n // unknown version is a not-found, never a silent no-op.\n await ensureRejectsAny(\n adapter.cms.publishDocumentVersion(\n projectId,\n { collection: doc.collection, id: doc.id },\n 999,\n ),\n 'publishDocumentVersion() with an unrecorded version',\n )\n },\n },\n]\n\n/**\n * Every behavioural scenario both adapters must pass (EC-049 → EC-153).\n * Hosts iterate this list and run each scenario against a fresh harness.\n */\nexport const PERSISTENCE_CONTRACT_SCENARIOS: readonly ContractScenario[] = [\n ...graphScenarios,\n ...cmsScenarios,\n ...assetScenarios,\n ...publishingScenarios,\n ...memberScenarios,\n ...cliTokenScenarios,\n ...referenceScenarios,\n graphEditPublishRoundTrip,\n ...stateScenarios,\n]\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"core.js","sourceRoot":"","sources":["../../src/persistence/core.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"core.js","sourceRoot":"","sources":["../../src/persistence/core.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod'\n\nexport {\n createSequentialClock,\n createSequentialIdFactory,\n} from '@elytracms/core/studio-core'\nexport type { Clock, IdFactory } from '@elytracms/core/studio-core'\n\n/**\n * Timestamps every persisted record carries (brief §10). Kept as ISO strings so\n * fixtures and seeds stay byte-for-byte deterministic across runs.\n */\nexport const recordMetaSchema = z.object({\n createdAt: z.string().min(1),\n updatedAt: z.string().min(1),\n})\nexport type RecordMeta = z.infer<typeof recordMetaSchema>\n\n/**\n * Defensive deep clone for records handed back from in-memory repositories, so\n * callers can never mutate the persisted store by mutating a returned value.\n * Mirrors the no-aliasing invariant documented in `@elytracms/core/studio-core`'s\n * `InMemoryProjectRepository`. Records are plain JSON-shaped data.\n */\nexport function cloneRecord<T>(value: T): T {\n return structuredClone(value)\n}\n\n/**\n * Which backend a persistence adapter is talking to, and whether it's reachable.\n * Lets the Studio surface degraded/offline states without leaking provider types.\n */\nexport const backendKindSchema = z.enum(['in-memory', 'convex'])\nexport type BackendKind = z.infer<typeof backendKindSchema>\n\nexport interface BackendStatus {\n backend: BackendKind\n available: boolean\n detail?: string\n}\n\n/**\n * A generic structured issue carried by a {@link PersistenceValidationError}.\n * Domain issues (graph/cms/binding) are mapped onto this shape so a single error\n * type can carry any validation failure (brief §4.11).\n */\nexport const persistenceIssueSchema = z.object({\n code: z.string(),\n message: z.string(),\n path: z.array(z.union([z.string(), z.number()])).optional(),\n /** Originating domain, e.g. 'graph' | 'cms' | 'binding' | 'settings'. */\n domain: z.string().optional(),\n})\nexport type PersistenceIssue = z.infer<typeof persistenceIssueSchema>\n\n// --- Error taxonomy (brief §4.10, §7.7) -----------------------------------\n//\n// Provider-neutral, mirrors the project-repository taxonomy in @elytracms/studio-core\n// but is domain-general so every record type shares the same five categories.\n\nexport const persistenceErrorCodeSchema = z.enum([\n 'validation',\n 'not-found',\n 'conflict',\n 'backend-unavailable',\n 'unknown',\n])\nexport type PersistenceErrorCode = z.infer<typeof persistenceErrorCodeSchema>\n\nexport abstract class PersistenceError extends Error {\n abstract readonly code: PersistenceErrorCode\n constructor(message: string, options?: { cause?: unknown }) {\n super(message, options)\n this.name = new.target.name\n }\n}\n\n/** No record of `kind` exists for the given key. */\nexport class RecordNotFoundError extends PersistenceError {\n readonly code = 'not-found' as const\n constructor(\n readonly kind: string,\n readonly key: string,\n ) {\n super(`No ${kind} found for “${key}”.`)\n }\n}\n\n/** A record would collide with an existing one (unique key/identity). */\nexport class RecordConflictError extends PersistenceError {\n readonly code = 'conflict' as const\n constructor(\n readonly kind: string,\n readonly key: string,\n message?: string,\n ) {\n super(message ?? `A ${kind} with key “${key}” already exists.`)\n }\n}\n\n/** A write failed structured validation; carries the issues. */\nexport class PersistenceValidationError extends PersistenceError {\n readonly code = 'validation' as const\n constructor(\n message: string,\n readonly issues: readonly PersistenceIssue[],\n ) {\n super(message)\n }\n}\n\n/** The backing store is unreachable or returned a transport-level failure. */\nexport class BackendUnavailableError extends PersistenceError {\n readonly code = 'backend-unavailable' as const\n constructor(message = 'The persistence backend is unavailable.', options?: { cause?: unknown }) {\n super(message, options)\n }\n}\n\n/** Any failure that does not map onto a more specific category. */\nexport class UnknownPersistenceError extends PersistenceError {\n readonly code = 'unknown' as const\n constructor(message = 'An unknown persistence error occurred.', options?: { cause?: unknown }) {\n super(message, options)\n }\n}\n\nexport function isPersistenceError(value: unknown): value is PersistenceError {\n return value instanceof PersistenceError\n}\n\n/** Normalize any thrown value onto the persistence error taxonomy. */\nexport function asPersistenceError(value: unknown): PersistenceError {\n if (isPersistenceError(value)) return value\n if (value instanceof Error) return new UnknownPersistenceError(value.message, { cause: value })\n return new UnknownPersistenceError(String(value))\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"graph.js","sourceRoot":"","sources":["../../src/persistence/graph.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"graph.js","sourceRoot":"","sources":["../../src/persistence/graph.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod'\nimport {\n PROJECT_GRAPH_SCHEMA_VERSION,\n parseProjectGraph,\n serializeProjectGraph,\n} from '@elytracms/core/project-graph'\nimport type { ProjectGraph } from '@elytracms/core/project-graph'\nimport {\n PersistenceValidationError,\n RecordNotFoundError,\n cloneRecord,\n type Clock,\n type IdFactory,\n createSequentialClock,\n createSequentialIdFactory,\n} from './core'\n\n/**\n * An immutable record of one saved graph state (brief §7.1, §10). Each save\n * appends a revision; the highest revision is the latest. The graph is stored\n * serialized so reload is provably lossless (serialize → parse round-trip).\n */\nexport const graphRevisionRecordSchema = z.object({\n id: z.string().min(1),\n projectId: z.string().min(1),\n /** 1-based, monotonically increasing per project. */\n revision: z.number().int().positive(),\n /** Serialized `ProjectGraph` JSON. */\n serializedGraph: z.string().min(1),\n schemaVersion: z.number().int(),\n createdAt: z.string().min(1),\n /** Optional short label, e.g. \"Initial import\". */\n label: z.string().optional(),\n /** Optional longer message describing the change. */\n message: z.string().optional(),\n})\nexport type GraphRevisionRecord = z.infer<typeof graphRevisionRecordSchema>\n\n/** A revision paired with its parsed graph. */\nexport interface LoadedGraph {\n graph: ProjectGraph\n revision: GraphRevisionRecord\n}\n\nexport interface SaveGraphOptions {\n label?: string\n message?: string\n}\n\n/**\n * Persists project graphs and their revision history (brief §7.1, §10).\n * Provider-neutral: an in-memory and a Convex implementation both satisfy it.\n */\nexport interface GraphRepository {\n /** Append a new revision for the project's graph and return it. */\n saveGraph(projectId: string, graph: ProjectGraph, options?: SaveGraphOptions): Promise<GraphRevisionRecord>\n /** Load the latest graph + revision. Throws `RecordNotFoundError` if none. */\n getLatest(projectId: string): Promise<LoadedGraph>\n /** Load a specific revision. Throws `RecordNotFoundError` if absent. */\n getRevision(projectId: string, revision: number): Promise<LoadedGraph>\n /** All revisions for a project, newest first. */\n listRevisions(projectId: string): Promise<GraphRevisionRecord[]>\n /** Whether any graph revision exists for the project. */\n hasGraph(projectId: string): Promise<boolean>\n}\n\nexport interface InMemoryGraphRepositoryOptions {\n clock?: Clock\n idFactory?: IdFactory\n seed?: readonly GraphRevisionRecord[]\n}\n\nfunction loaded(record: GraphRevisionRecord): LoadedGraph {\n const parsed = parseProjectGraph(record.serializedGraph)\n if (!parsed.ok) {\n // A stored revision should always reparse; if not, the store is corrupt.\n throw new PersistenceValidationError('Stored graph failed to parse.', [\n { code: 'corrupt-graph', message: 'Stored graph revision is not parseable.', domain: 'graph' },\n ])\n }\n return { graph: parsed.graph, revision: cloneRecord(record) }\n}\n\nexport class InMemoryGraphRepository implements GraphRepository {\n /** projectId → revisions in ascending revision order. */\n private readonly byProject = new Map<string, GraphRevisionRecord[]>()\n private readonly clock: Clock\n private readonly nextId: IdFactory\n\n constructor(options: InMemoryGraphRepositoryOptions = {}) {\n this.clock = options.clock ?? createSequentialClock()\n this.nextId = options.idFactory ?? createSequentialIdFactory('rev')\n for (const record of options.seed ?? []) {\n const list = this.byProject.get(record.projectId) ?? []\n list.push(graphRevisionRecordSchema.parse(record))\n list.sort((a, b) => a.revision - b.revision)\n this.byProject.set(record.projectId, list)\n }\n }\n\n async saveGraph(\n projectId: string,\n graph: ProjectGraph,\n options: SaveGraphOptions = {},\n ): Promise<GraphRevisionRecord> {\n let serializedGraph: string\n try {\n serializedGraph = serializeProjectGraph(graph)\n } catch (error) {\n throw new PersistenceValidationError('Graph is not well-formed and cannot be persisted.', [\n {\n code: 'invalid-graph',\n message: error instanceof Error ? error.message : String(error),\n domain: 'graph',\n },\n ])\n }\n const list = this.byProject.get(projectId) ?? []\n const revision = (list.at(-1)?.revision ?? 0) + 1\n const record: GraphRevisionRecord = {\n id: this.nextId(),\n projectId,\n revision,\n serializedGraph,\n schemaVersion: graph.schemaVersion ?? PROJECT_GRAPH_SCHEMA_VERSION,\n createdAt: this.clock(),\n ...(options.label ? { label: options.label } : {}),\n ...(options.message ? { message: options.message } : {}),\n }\n list.push(record)\n this.byProject.set(projectId, list)\n return cloneRecord(record)\n }\n\n async getLatest(projectId: string): Promise<LoadedGraph> {\n const list = this.byProject.get(projectId)\n const latest = list?.at(-1)\n if (!latest) throw new RecordNotFoundError('graph', projectId)\n return loaded(latest)\n }\n\n async getRevision(projectId: string, revision: number): Promise<LoadedGraph> {\n const record = this.byProject.get(projectId)?.find((r) => r.revision === revision)\n if (!record) throw new RecordNotFoundError('graph-revision', `${projectId}#${revision}`)\n return loaded(record)\n }\n\n async listRevisions(projectId: string): Promise<GraphRevisionRecord[]> {\n return [...(this.byProject.get(projectId) ?? [])].reverse().map(cloneRecord)\n }\n\n async hasGraph(projectId: string): Promise<boolean> {\n return (this.byProject.get(projectId)?.length ?? 0) > 0\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/persistence/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,6BAA6B,CAAA;AAEpD,cAAc,QAAQ,CAAA;AACtB,cAAc,SAAS,CAAA;AACvB,cAAc,OAAO,CAAA;AACrB,cAAc,UAAU,CAAA;AACxB,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,cAAc,cAAc,CAAA;AAC5B,cAAc,wBAAwB,CAAA;AACtC,cAAc,sBAAsB,CAAA;AACpC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,sBAAsB,CAAA;AACpC,cAAc,WAAW,CAAA;AACzB,cAAc,QAAQ,CAAA;AACtB,cAAc,sBAAsB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/persistence/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,6BAA6B,CAAA;AAEpD,cAAc,QAAQ,CAAA;AACtB,cAAc,SAAS,CAAA;AACvB,cAAc,OAAO,CAAA;AACrB,cAAc,UAAU,CAAA;AACxB,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,cAAc,cAAc,CAAA;AAC5B,cAAc,wBAAwB,CAAA;AACtC,cAAc,sBAAsB,CAAA;AACpC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,sBAAsB,CAAA;AACpC,cAAc,WAAW,CAAA;AACzB,cAAc,QAAQ,CAAA;AACtB,cAAc,sBAAsB,CAAA","sourcesContent":["/**\n * @elytracms/persistence — provider-neutral persistence contracts + in-memory\n * implementations (brief §4.10, §10). Core packages depend on these interfaces,\n * never on Convex directly; a Convex-backed adapter and the in-memory adapter\n * here both satisfy {@link PersistenceAdapter}.\n */\nexport const PACKAGE = '@elytracms/core/persistence'\n\nexport * from './core'\nexport * from './graph'\nexport * from './cms'\nexport * from './assets'\nexport * from './publishing'\nexport * from './references'\nexport * from './members'\nexport * from './cli-tokens'\nexport * from './reference-extraction'\nexport * from './reference-indexing'\nexport * from './self-maintaining-adapter'\nexport * from './backend-validation'\nexport * from './adapter'\nexport * from './seed'\nexport * from './contract-scenarios'\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"members.js","sourceRoot":"","sources":["../../src/persistence/members.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"members.js","sourceRoot":"","sources":["../../src/persistence/members.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod'\nimport { cloneRecord, createSequentialClock, recordMetaSchema } from './core'\nimport type { Clock } from './core'\nimport { RecordNotFoundError } from './core'\n\n/**\n * Per-project membership records (EC-150, vision AD-7). The role model is\n * deliberately minimal for v1 — three roles, project-scoped, no field-level\n * permissions. Workspace-level grants (who may create projects, default\n * memberships) land with EC-154; everything here stays project-scoped.\n *\n * Roles:\n * - `viewer` — read-only: queries succeed, every command is denied.\n * - `editor` — edits and publishes content, but cannot administer the project\n * (lifecycle, settings, members, CLI tokens).\n * - `admin` — everything within the project.\n *\n * Enforcement lives at the operations chokepoint\n * (`@elytracms/core/operations` `createRoleAuthorization`) and server-side in the\n * Convex functions (`apps/builder/convex/guard.ts`); this module only defines\n * the storage contract.\n */\n\nexport const projectRoleSchema = z.enum(['admin', 'editor', 'viewer'])\nexport type ProjectRole = z.infer<typeof projectRoleSchema>\n\n/** Rank roles so \"at least editor\" checks live in one place. */\nconst ROLE_RANK: Record<ProjectRole, number> = { viewer: 0, editor: 1, admin: 2 }\n\n/** True when `role` grants at least the capabilities of `required`. */\nexport function roleAtLeast(role: ProjectRole, required: ProjectRole): boolean {\n return ROLE_RANK[role] >= ROLE_RANK[required]\n}\n\nexport const projectMemberRecordSchema = z\n .object({\n projectId: z.string().min(1),\n userId: z.string().min(1),\n role: projectRoleSchema,\n })\n .extend(recordMetaSchema.shape)\nexport type ProjectMemberRecord = z.infer<typeof projectMemberRecordSchema>\n\n/**\n * Membership storage boundary. Mirrors the other repository contracts: the\n * in-memory implementation below and the Convex-backed implementation in\n * `apps/builder` both satisfy it.\n */\nexport interface MembersRepository {\n /** Upsert a membership (add a member or change their role). */\n setMember(projectId: string, userId: string, role: ProjectRole): Promise<ProjectMemberRecord>\n /** Look up one membership; `undefined` when the user is not a member. */\n findMember(projectId: string, userId: string): Promise<ProjectMemberRecord | undefined>\n /** All members of a project, ordered by userId for determinism. */\n listMembers(projectId: string): Promise<ProjectMemberRecord[]>\n /** All memberships of a user across projects, ordered by projectId. */\n listMembershipsForUser(userId: string): Promise<ProjectMemberRecord[]>\n /** Remove a membership. Throws `RecordNotFoundError` when absent. */\n removeMember(projectId: string, userId: string): Promise<void>\n}\n\nexport interface InMemoryMembersRepositoryOptions {\n clock?: Clock\n seed?: readonly ProjectMemberRecord[]\n}\n\nexport class InMemoryMembersRepository implements MembersRepository {\n private readonly records = new Map<string, ProjectMemberRecord>()\n private readonly clock: Clock\n\n constructor(options: InMemoryMembersRepositoryOptions = {}) {\n this.clock = options.clock ?? createSequentialClock()\n for (const record of options.seed ?? []) {\n this.records.set(memberKey(record.projectId, record.userId), cloneRecord(record))\n }\n }\n\n async setMember(\n projectId: string,\n userId: string,\n role: ProjectRole,\n ): Promise<ProjectMemberRecord> {\n const key = memberKey(projectId, userId)\n const existing = this.records.get(key)\n const now = this.clock()\n const record: ProjectMemberRecord = {\n projectId,\n userId,\n role,\n createdAt: existing?.createdAt ?? now,\n updatedAt: now,\n }\n this.records.set(key, record)\n return cloneRecord(record)\n }\n\n async findMember(projectId: string, userId: string): Promise<ProjectMemberRecord | undefined> {\n const record = this.records.get(memberKey(projectId, userId))\n return record ? cloneRecord(record) : undefined\n }\n\n async listMembers(projectId: string): Promise<ProjectMemberRecord[]> {\n return [...this.records.values()]\n .filter((r) => r.projectId === projectId)\n .sort((a, b) => (a.userId < b.userId ? -1 : a.userId > b.userId ? 1 : 0))\n .map(cloneRecord)\n }\n\n async listMembershipsForUser(userId: string): Promise<ProjectMemberRecord[]> {\n return [...this.records.values()]\n .filter((r) => r.userId === userId)\n .sort((a, b) => (a.projectId < b.projectId ? -1 : a.projectId > b.projectId ? 1 : 0))\n .map(cloneRecord)\n }\n\n async removeMember(projectId: string, userId: string): Promise<void> {\n const key = memberKey(projectId, userId)\n if (!this.records.has(key)) {\n throw new RecordNotFoundError('project-member', `${projectId}/${userId}`)\n }\n this.records.delete(key)\n }\n}\n\nfunction memberKey(projectId: string, userId: string): string {\n return `${projectId}\u0000${userId}`\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"publishing.js","sourceRoot":"","sources":["../../src/persistence/publishing.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"publishing.js","sourceRoot":"","sources":["../../src/persistence/publishing.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod'\nimport {\n PersistenceValidationError,\n RecordNotFoundError,\n cloneRecord,\n recordMetaSchema,\n type Clock,\n createSequentialClock,\n} from './core'\n\n/** Draft vs published — distinct, queryable publishing states (brief §10). */\nexport const publishingStatusSchema = z.enum(['draft', 'published'])\nexport type PublishingStatus = z.infer<typeof publishingStatusSchema>\n\n/**\n * Publishing state (brief §10). Single-environment (EC-179, vision AD-8): a\n * deployment IS one environment, so there is exactly ONE publishing-state\n * record per project. A `published` record pins the graph revision that is\n * live. Moving a release between environments is a deployment/code-pipeline\n * concern, not an in-deployment dimension — see `env-is-deployment-boundary`.\n */\nexport const publishingStateRecordSchema = recordMetaSchema.extend({\n projectId: z.string().min(1),\n status: publishingStatusSchema,\n /** Graph revision pinned live (when published). */\n publishedRevisionId: z.string().optional(),\n publishedRevision: z.number().int().positive().optional(),\n publishedAt: z.string().optional(),\n})\nexport type PublishingStateRecord = z.infer<typeof publishingStateRecordSchema>\n\nexport interface PublishInput {\n revisionId: string\n revision: number\n}\n\n/**\n * Persists and transitions publishing state (brief §10). Transitions are\n * validated: publishing requires a revision; unpublishing requires a\n * currently-published deployment.\n */\nexport interface PublishingRepository {\n getState(projectId: string): Promise<PublishingStateRecord>\n findState(projectId: string): Promise<PublishingStateRecord | undefined>\n /** Publish a graph revision. */\n publish(projectId: string, input: PublishInput): Promise<PublishingStateRecord>\n /** Revert to draft (must currently be published). */\n unpublish(projectId: string): Promise<PublishingStateRecord>\n}\n\nexport interface InMemoryPublishingRepositoryOptions {\n clock?: Clock\n seed?: readonly PublishingStateRecord[]\n}\n\nexport class InMemoryPublishingRepository implements PublishingRepository {\n /** projectId → record (one per deployment). */\n private readonly byProject = new Map<string, PublishingStateRecord>()\n private readonly clock: Clock\n\n constructor(options: InMemoryPublishingRepositoryOptions = {}) {\n this.clock = options.clock ?? createSequentialClock()\n for (const record of options.seed ?? []) {\n const parsed = publishingStateRecordSchema.parse(record)\n this.byProject.set(parsed.projectId, parsed)\n }\n }\n\n async getState(projectId: string): Promise<PublishingStateRecord> {\n const record = this.byProject.get(projectId)\n if (!record) throw new RecordNotFoundError('publishing-state', projectId)\n return cloneRecord(record)\n }\n\n async findState(projectId: string): Promise<PublishingStateRecord | undefined> {\n const record = this.byProject.get(projectId)\n return record ? cloneRecord(record) : undefined\n }\n\n async publish(projectId: string, input: PublishInput): Promise<PublishingStateRecord> {\n if (!input.revisionId) {\n throw new PersistenceValidationError('Cannot publish without a graph revision.', [\n {\n code: 'missing-revision',\n message: 'A revision id is required to publish.',\n domain: 'publishing',\n },\n ])\n }\n if (!Number.isInteger(input.revision) || input.revision < 1) {\n throw new PersistenceValidationError('Cannot publish an invalid revision number.', [\n {\n code: 'invalid-revision',\n message: `Revision must be a positive integer (got ${input.revision}).`,\n domain: 'publishing',\n },\n ])\n }\n const now = this.clock()\n const previous = this.byProject.get(projectId)\n const record: PublishingStateRecord = {\n projectId,\n status: 'published',\n publishedRevisionId: input.revisionId,\n publishedRevision: input.revision,\n publishedAt: now,\n createdAt: previous?.createdAt ?? now,\n updatedAt: now,\n }\n this.byProject.set(projectId, record)\n return cloneRecord(record)\n }\n\n async unpublish(projectId: string): Promise<PublishingStateRecord> {\n const existing = this.byProject.get(projectId)\n if (!existing || existing.status !== 'published') {\n throw new PersistenceValidationError('Deployment is not currently published.', [\n {\n code: 'invalid-transition',\n message: 'Cannot unpublish: nothing is currently published.',\n domain: 'publishing',\n },\n ])\n }\n const updated: PublishingStateRecord = {\n projectId,\n status: 'draft',\n createdAt: existing.createdAt,\n updatedAt: this.clock(),\n }\n this.byProject.set(projectId, updated)\n return cloneRecord(updated)\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"reference-extraction.js","sourceRoot":"","sources":["../../src/persistence/reference-extraction.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reference-extraction.js","sourceRoot":"","sources":["../../src/persistence/reference-extraction.ts"],"names":[],"mappings":"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","sourcesContent":["import { documentKey, isAssetNode, isReferenceNode } from '@elytracms/core/cms-core'\nimport type { CmsDocument } from '@elytracms/core/cms-core'\nimport type { ComponentNode, ProjectGraph } from '@elytracms/core/project-graph'\nimport type { OutboundReference, ReferenceEntry, ReferenceTarget } from './references'\n\n/**\n * Reference extraction (EC-155, vision AD-6 — reshaped by EC-277/AD-15).\n *\n * Self-describing content makes extraction a **schema-free, manifest-free walk** over\n * the stored value: every reference-bearing node carries an explicit `type`\n * discriminator (`{ type:'reference', … }`, `{ type:'asset', … }`), and composition\n * nodes self-type via `componentId`. So a single pure function reads the value and\n * needs neither the collection schema nor the component manifest — which is exactly\n * what lets the same walk run in the studio, the CLI, or a Convex mutation (AD-6,\n * \"maintained on write, every writer caught by construction\").\n *\n * The `kind` is derived from *walk context*: a reference/asset node in a normal value\n * position → `relation-field`/`asset-field`; inside a rich-text mark → `rich-text-link`;\n * in a rich-text node's attrs → `rich-text-node`; a composition node's `componentId` →\n * `component-usage`. Bindings are out of scope (v1 is static-only; see EC-278): a\n * binding has no self-typed value, so it contributes no reference.\n */\n\n// --- Shared helpers ----------------------------------------------------------------\n\n/** Join `/`-separated path tokens (numbers are array indices). */\nexport function referencePath(...segments: ReadonlyArray<string | number>): string {\n return segments.map(String).join('/')\n}\n\nfunction documentTarget(ref: { collection: string; id: string }): ReferenceTarget {\n return { type: 'document', id: documentKey(ref) }\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | undefined {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : undefined\n}\n\nfunction isPlainRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\n/**\n * The rich-text storage `node.type` for an embedded registry component (EC-189).\n * Defined locally so persistence stays free of an `@elytracms/core/rich-text` import\n * (mirroring the structural rich-text walk) — it matches `COMPONENT_EMBED_NODE_TYPE`\n * in `@elytracms/core/rich-text` by value, guarded by a test.\n */\nconst COMPONENT_EMBED_NODE_TYPE = 'componentEmbed'\n\ninterface RichTextNodeShape {\n type?: unknown\n attrs?: Record<string, unknown>\n content?: unknown\n marks?: unknown\n}\n\n/**\n * Structurally detect a stored rich-text value (`{ version, doc: { type: 'doc' } }`,\n * the EC-025 storage format). Plain strings / HTML / anything else yields nothing.\n */\nfunction asRichTextValue(value: unknown): { doc: RichTextNodeShape } | undefined {\n const record = asRecord(value)\n if (!record) return undefined\n const doc = asRecord(record.doc)\n if (!doc || doc.type !== 'doc') return undefined\n return { doc }\n}\n\n/** Structural test for a stored composition node (id + componentId). */\nfunction isComponentNodeShape(value: unknown): value is ComponentNode {\n return isPlainRecord(value) && typeof value.id === 'string' && typeof value.componentId === 'string'\n}\n\n// --- The self-typed walk -----------------------------------------------------------\n\n/** Emit the target a self-typed reference/asset node points at (or nothing). */\nfunction selfTypedTarget(value: unknown): ReferenceTarget | undefined {\n if (isReferenceNode(value)) return documentTarget(value)\n if (isAssetNode(value)) return { type: 'asset', id: value.id }\n return undefined\n}\n\n/** Walk a composition node: component usage + self-typed static props + slots. */\nfunction walkSelfTypedComponentNode(\n node: ComponentNode,\n basePath: string,\n out: OutboundReference[],\n): void {\n out.push({\n path: referencePath(basePath, 'componentId'),\n target: { type: 'component', id: node.componentId },\n kind: 'component-usage',\n })\n for (const [name, prop] of Object.entries(node.props ?? {})) {\n // Only STATIC props carry self-typed values (EC-190 picked refs); bindings parked.\n if (prop.kind !== 'static') continue\n walkSelfTypedValue(prop.value, referencePath(basePath, 'props', name), out)\n }\n for (const [slot, children] of Object.entries(node.slots ?? {})) {\n children.forEach((child, index) => {\n walkSelfTypedComponentNode(child, referencePath(basePath, 'slots', slot, index), out)\n })\n }\n}\n\n/** Walk a rich-text node (EC-025 storage format): self-typed link/inline refs + embeds. */\nfunction walkSelfTypedRichTextNode(\n node: RichTextNodeShape,\n basePath: string,\n out: OutboundReference[],\n): void {\n // Inline reference / asset-pinned nodes carry the envelope under `attrs.ref`.\n const nodeTarget = selfTypedTarget(asRecord(node.attrs)?.ref)\n if (nodeTarget) out.push({ path: basePath, target: nodeTarget, kind: 'rich-text-node' })\n // Link (and any reference-carrying) marks carry the envelope under `attrs.ref`.\n if (Array.isArray(node.marks)) {\n node.marks.forEach((markValue, markIndex) => {\n const markTarget = selfTypedTarget(asRecord(asRecord(markValue)?.attrs)?.ref)\n if (markTarget) {\n out.push({\n path: referencePath(basePath, 'marks', markIndex),\n target: markTarget,\n kind: 'rich-text-link',\n })\n }\n })\n }\n // EC-189: a `componentEmbed` embeds a single ComponentNode — walked the same way.\n if (node.type === COMPONENT_EMBED_NODE_TYPE) {\n const embedded = asRecord(node.attrs)?.node\n if (isComponentNodeShape(embedded)) {\n walkSelfTypedComponentNode(embedded, referencePath(basePath, 'attrs', 'node'), out)\n }\n }\n if (Array.isArray(node.content)) {\n node.content.forEach((childValue, childIndex) => {\n const child = asRecord(childValue)\n if (child) walkSelfTypedRichTextNode(child, referencePath(basePath, 'content', childIndex), out)\n })\n }\n}\n\n/**\n * Recursively walk any stored value, dispatching on the self-typed shape it carries.\n * Order matters: the richer typed shapes (rich-text region, composition node, typed\n * envelope) are tested before the generic array/object recursion so a node is never\n * double-counted as both an envelope and a plain bag.\n */\nfunction walkSelfTypedValue(value: unknown, basePath: string, out: OutboundReference[]): void {\n if (value === undefined || value === null) return\n // A rich-text region (`{ doc: { type: 'doc' } }`) — walk its node tree.\n const richText = asRichTextValue(value)\n if (richText) {\n walkSelfTypedRichTextNode(richText.doc, referencePath(basePath, 'doc'), out)\n return\n }\n // A composition node (`{ id, componentId }`).\n if (isComponentNodeShape(value)) {\n walkSelfTypedComponentNode(value, basePath, out)\n return\n }\n // A self-typed reference / asset envelope.\n const target = selfTypedTarget(value)\n if (target) {\n out.push({\n path: basePath,\n target,\n kind: target.type === 'asset' ? 'asset-field' : 'relation-field',\n })\n return\n }\n // A list — recurse by index (`<path>/<i>`), preserving the indexed-path taxonomy.\n if (Array.isArray(value)) {\n value.forEach((item, index) => walkSelfTypedValue(item, referencePath(basePath, index), out))\n return\n }\n // A plain object / repeater item — recurse each key (`<path>/<key>`).\n if (isPlainRecord(value)) {\n for (const [key, child] of Object.entries(value)) {\n walkSelfTypedValue(child, referencePath(basePath, key), out)\n }\n }\n}\n\n/**\n * Extract every outbound reference held by one self-describing CMS document — no\n * schema, no manifest, no binding context (EC-277). Walks `values/<field>` and\n * `localized/<locale>/<field>` (just object keys), then descends each value by its\n * self-typed shape. The returned order is walk order; callers that compare must sort\n * (the index repository sorts via `compareReferenceEntries`), so this stays\n * drift-tolerant: a reference in a field the schema no longer declares is still found.\n */\nexport function extractReferences(document: CmsDocument): OutboundReference[] {\n const out: OutboundReference[] = []\n for (const [field, value] of Object.entries(document.values ?? {})) {\n walkSelfTypedValue(value, referencePath('values', field), out)\n }\n for (const locale of Object.keys(document.localized ?? {}).sort()) {\n const localeValues = document.localized?.[locale] ?? {}\n for (const [field, value] of Object.entries(localeValues)) {\n walkSelfTypedValue(value, referencePath('localized', locale, field), out)\n }\n }\n return out\n}\n\n/**\n * Extract every outbound reference held by one self-describing layout root (EC-277).\n * The graph (EC-187) is layouts-only; pages live in the `page` collection's `body`.\n */\nexport function extractLayoutReferences(layout: {\n id: string\n root: ComponentNode\n}): ReferenceEntry[] {\n const refs: OutboundReference[] = []\n walkSelfTypedComponentNode(layout.root, 'root', refs)\n return refs.map((ref) => ({ source: { type: 'layout', id: layout.id }, ...ref }))\n}\n\n/**\n * Schema-free, manifest-free graph extraction (EC-277): component usage + self-typed\n * static props across every layout, in deterministic (id-sorted) order.\n */\nexport function extractSelfTypedGraphReferences(graph: ProjectGraph): ReferenceEntry[] {\n const entries: ReferenceEntry[] = []\n for (const layout of [...graph.layouts].sort((a, b) => (a.id < b.id ? -1 : 1))) {\n entries.push(...extractLayoutReferences(layout))\n }\n return entries\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"reference-indexing.js","sourceRoot":"","sources":["../../src/persistence/reference-indexing.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reference-indexing.js","sourceRoot":"","sources":["../../src/persistence/reference-indexing.ts"],"names":[],"mappings":"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","sourcesContent":["import { documentKey } from '@elytracms/core/cms-core'\nimport type { DocumentRef } from '@elytracms/core/cms-core'\nimport type { PersistenceAdapter } from './adapter'\nimport { extractReferences, extractSelfTypedGraphReferences } from './reference-extraction'\nimport type {\n ReferenceEntry,\n ReferenceEntryRecord,\n ReferenceSource,\n ReferenceVariant,\n} from './references'\n\n/**\n * Reference-index maintenance (EC-155): recompute-on-save routines shared by\n * the operations-layer event subscriber (`@elytracms/core/operations` `references.ts`)\n * and the backfill command. All writes are replace-all-for-source, so they are\n * idempotent and never leave stale entries.\n *\n * Variant semantics:\n * - **Documents** — the editable content *is* the draft variant, so a document\n * always (re)indexes its draft entries; its published entries exist only\n * while its version pointer (`publishedVersion`) is set. A draft-only document referencing a\n * published target is therefore queryable as exactly that (the Sanity\n * \"hidden draft reference\" failure case, vision AD-6).\n * - **Graphs** — draft entries come from the latest revision; published entries\n * from the revisions pinned live by the publishing states (union across\n * environments, deterministic order).\n */\n\n/**\n * Options for the reindex routines. EC-277: extraction is now a schema-free,\n * manifest-free walk over self-describing content, so no binding-source resolver or\n * manifest lookup is threaded — the interface is retained (empty) as a stable seam\n * for future per-reindex options.\n */\nexport type ReferenceIndexingOptions = Record<never, never>\n\n/** The index source entity for a document. */\nexport function documentReferenceSource(ref: DocumentRef): ReferenceSource {\n return { type: 'document', id: documentKey(ref) }\n}\n\n/**\n * Recompute the index entries held by one document (both variants). A missing\n * document (deleted) simply drops all of its entries.\n */\nexport async function reindexDocumentReferences(\n adapter: PersistenceAdapter,\n projectId: string,\n ref: DocumentRef,\n options: ReferenceIndexingOptions = {},\n): Promise<void> {\n const source = documentReferenceSource(ref)\n const record = await adapter.cms.findDocument(projectId, ref)\n if (!record) {\n await adapter.references.removeForSource(projectId, source)\n return\n }\n // EC-277: self-describing content — extraction is a schema-free, manifest-free walk\n // over the stored value (no `findSchema`, no binding/manifest context). Static\n // relation/asset props inside a `blocks` composition self-describe, so they are\n // found without the manifest the old field-type-driven extractor required.\n const references = extractReferences(record.document)\n await adapter.references.replaceForSource(projectId, 'draft', source, references)\n // EC-224: a document is published when its version pointer (`publishedVersion`)\n // is set — mirrors delivery and the EC-173 integrity guard\n // `collectStrictReferrers`. A pointer-published doc keeps its live row as the\n // working draft, so published reference entries are extracted from that live\n // draft (matching the guard's draft-content model), not the pinned snapshot;\n // revisit only if published-reference resolution must mirror the snapshot exactly.\n const referrerPublished = record.publishedVersion !== undefined\n await adapter.references.replaceForSource(\n projectId,\n 'published',\n source,\n referrerPublished ? references : [],\n )\n}\n\n/** Recompute the entries of every document in a project (deterministic order). */\nexport async function reindexAllDocumentReferences(\n adapter: PersistenceAdapter,\n projectId: string,\n options: ReferenceIndexingOptions = {},\n): Promise<void> {\n const records = await adapter.cms.listDocuments(projectId)\n for (const record of records) {\n await reindexDocumentReferences(\n adapter,\n projectId,\n { collection: record.document.collection, id: record.document.id },\n options,\n )\n }\n}\n\n/** Recompute the draft graph entries (pages + layouts) from the latest revision. */\nexport async function reindexGraphDraftReferences(\n adapter: PersistenceAdapter,\n projectId: string,\n options: ReferenceIndexingOptions = {},\n): Promise<void> {\n const hasGraph = await adapter.graphs.hasGraph(projectId)\n const entries: ReferenceEntry[] = hasGraph\n ? extractSelfTypedGraphReferences((await adapter.graphs.getLatest(projectId)).graph)\n : []\n await adapter.references.replaceForSourceTypes(projectId, 'draft', ['page', 'layout'], entries)\n}\n\n/**\n * Recompute the published graph entries from the revision pinned live by the\n * deployment's publishing state (unpublishing drops all published graph\n * entries). Single-environment (EC-179): one deployment pins one revision.\n */\nexport async function reindexGraphPublishedReferences(\n adapter: PersistenceAdapter,\n projectId: string,\n options: ReferenceIndexingOptions = {},\n): Promise<void> {\n const state = await adapter.publishing.findState(projectId)\n const revisions =\n state?.status === 'published' && state.publishedRevision !== undefined\n ? [state.publishedRevision]\n : []\n const entries: ReferenceEntry[] = []\n for (const revision of revisions) {\n const loaded = await adapter.graphs.getRevision(projectId, revision)\n entries.push(...extractSelfTypedGraphReferences(loaded.graph))\n }\n await adapter.references.replaceForSourceTypes(\n projectId,\n 'published',\n ['page', 'layout'],\n entries,\n )\n}\n\n/** Recompute both graph variants (a graph save can move what \"latest\" means). */\nexport async function reindexGraphReferences(\n adapter: PersistenceAdapter,\n projectId: string,\n variant: ReferenceVariant | 'both',\n options: ReferenceIndexingOptions = {},\n): Promise<void> {\n if (variant === 'draft' || variant === 'both') {\n await reindexGraphDraftReferences(adapter, projectId, options)\n }\n if (variant === 'published' || variant === 'both') {\n await reindexGraphPublishedReferences(adapter, projectId, options)\n }\n}\n\n/**\n * Backfill: rebuild the complete reference index of a project from its current\n * data — every document (both variants) and the graph (draft + published).\n * Deterministic and idempotent: running it twice yields identical entries.\n * Returns the full resulting index for inspection/verification.\n */\nexport async function backfillReferenceIndex(\n adapter: PersistenceAdapter,\n projectId: string,\n options: ReferenceIndexingOptions = {},\n): Promise<ReferenceEntryRecord[]> {\n await adapter.references.clearProject(projectId)\n await reindexAllDocumentReferences(adapter, projectId, options)\n await reindexGraphReferences(adapter, projectId, 'both', options)\n const records = await adapter.references.listEntries(projectId)\n // EC-269: record completion so the read path can skip the rebuild next time.\n // `clearProject` above cleared any prior marker, so it is set exactly once the\n // rebuild has fully settled — never present over a partial index.\n await adapter.references.setBuildMarker(projectId, { entryCount: records.length })\n return records\n}\n\n/**\n * Ensure the project's reference index has been backfilled at least once\n * (EC-269). The index is maintained on write, so the (clear + rebuild) backfill\n * is only needed to *seed* a never-built index — a fresh import/seed. A persisted\n * marker records completion; when present this is a single read with **zero\n * mutations**, so opening the References panel no longer rewrites the whole index\n * every session (the normal Convex case — the EC-233 import already backfilled).\n *\n * Pass `force: true` to ignore the marker and rebuild unconditionally (the\n * explicit \"rebuild index\" maintenance path).\n */\nexport async function ensureReferenceIndexBackfilled(\n adapter: PersistenceAdapter,\n projectId: string,\n options: ReferenceIndexingOptions & { force?: boolean } = {},\n): Promise<{ backfilled: boolean }> {\n const { force, ...indexing } = options\n if (!force) {\n const marker = await adapter.references.getBuildMarker(projectId)\n if (marker) return { backfilled: false }\n }\n await backfillReferenceIndex(adapter, projectId, indexing)\n return { backfilled: true }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"references.js","sourceRoot":"","sources":["../../src/persistence/references.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"references.js","sourceRoot":"","sources":["../../src/persistence/references.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod'\nimport { cloneRecord } from './core'\n\n/**\n * Reference-index substrate (EC-155, vision AD-6 / pillar 3.6).\n *\n * On every write the operations layer extracts *outbound* references — relation\n * fields, rich-text link marks and inline refs, page-graph bindings and\n * component usage, asset usages — into this index, for draft and published\n * variants separately. One index powers many features: \"used by\" panels, safe\n * unpublish (the queryable answer to Sanity's hidden-draft-reference failure),\n * component/asset where-used, and broken-link audits (UX lands in Milestone B).\n *\n * Records are **derived data**: they carry no timestamps and are deterministic\n * functions of the indexed content, so backfill is idempotent and two runs over\n * the same data are byte-for-byte identical.\n */\n\n// --- Record shape -----------------------------------------------------------\n\n/** Which content variant an entry was extracted from (the Sanity failure-case axis). */\nexport const referenceVariantSchema = z.enum(['draft', 'published'])\nexport type ReferenceVariant = z.infer<typeof referenceVariantSchema>\n\n/**\n * What kind of entity *holds* the reference. Documents are keyed by their\n * `documentKey` (`collection:id`); pages/layouts by their graph ids.\n */\nexport const referenceSourceTypeSchema = z.enum(['document', 'page', 'layout'])\nexport type ReferenceSourceType = z.infer<typeof referenceSourceTypeSchema>\n\n/** What kind of entity is *referenced*. Document targets use `collection:id` keys. */\nexport const referenceTargetTypeSchema = z.enum(['document', 'component', 'asset'])\nexport type ReferenceTargetType = z.infer<typeof referenceTargetTypeSchema>\n\n/**\n * Which reference-bearing structure produced an entry. A *closed* enum so the\n * extractor registry (see `reference-extraction.ts`) is exhaustive by\n * construction — a new structure kind must be added here, registered, and\n * covered by the checklist test before it can produce entries.\n */\nexport const referenceKindSchema = z.enum([\n 'relation-field',\n 'asset-field',\n 'rich-text-link',\n 'rich-text-node',\n 'component-usage',\n 'prop-binding',\n 'condition-binding',\n])\nexport type ReferenceKind = z.infer<typeof referenceKindSchema>\n\nexport const referenceSourceSchema = z.object({\n type: referenceSourceTypeSchema,\n /** Document sources: `collection:id`. Page/layout sources: the graph node-tree owner id. */\n id: z.string().min(1),\n})\nexport type ReferenceSource = z.infer<typeof referenceSourceSchema>\n\nexport const referenceTargetSchema = z.object({\n type: referenceTargetTypeSchema,\n /** Document targets: `collection:id`. Component targets: the namespaced component id. */\n id: z.string().min(1),\n})\nexport type ReferenceTarget = z.infer<typeof referenceTargetSchema>\n\n/**\n * One outbound reference found *inside* a source, before it is attributed to\n * that source: the exact field/node path, the target, and which structure\n * produced it. `path` is a `/`-joined token path into the stored value, e.g.\n * `values/author`, `localized/en/body/doc/content/0/marks/0`,\n * `root/slots/children/2/props/items/binding`.\n */\nexport const outboundReferenceSchema = z.object({\n path: z.string().min(1),\n target: referenceTargetSchema,\n kind: referenceKindSchema,\n})\nexport type OutboundReference = z.infer<typeof outboundReferenceSchema>\n\n/** An outbound reference attributed to its holding source entity. */\nexport const referenceEntrySchema = outboundReferenceSchema.extend({\n source: referenceSourceSchema,\n})\nexport type ReferenceEntry = z.infer<typeof referenceEntrySchema>\n\n/** The persisted index record: entry + project + variant. Derived, timestamp-free. */\nexport const referenceEntryRecordSchema = referenceEntrySchema.extend({\n projectId: z.string().min(1),\n variant: referenceVariantSchema,\n})\nexport type ReferenceEntryRecord = z.infer<typeof referenceEntryRecordSchema>\n\n// --- Deterministic ordering ---------------------------------------------------\n\nfunction compareStrings(a: string, b: string): number {\n return a < b ? -1 : a > b ? 1 : 0\n}\n\n/**\n * Total, deterministic order over index records:\n * variant → source type → source id → path → target type → target id → kind.\n * Every repository read returns records in this order.\n */\nexport function compareReferenceEntries(a: ReferenceEntryRecord, b: ReferenceEntryRecord): number {\n return (\n compareStrings(a.variant, b.variant) ||\n compareStrings(a.source.type, b.source.type) ||\n compareStrings(a.source.id, b.source.id) ||\n compareStrings(a.path, b.path) ||\n compareStrings(a.target.type, b.target.type) ||\n compareStrings(a.target.id, b.target.id) ||\n compareStrings(a.kind, b.kind)\n )\n}\n\n/** Stable per-project bucket key: one bucket per (variant, source). */\nexport function referenceSourceKey(variant: ReferenceVariant, source: ReferenceSource): string {\n return `${variant}\u0000${source.type}\u0000${source.id}`\n}\n\n/** Identity of an entry within its source bucket (used for deduplication). */\nexport function referenceEntryKey(entry: ReferenceEntry): string {\n return `${entry.path}\u0000${entry.target.type}\u0000${entry.target.id}\u0000${entry.kind}`\n}\n\n/** Dedupe + deterministically sort records (extraction can legitimately repeat a target). */\nexport function normalizeReferenceRecords(\n records: readonly ReferenceEntryRecord[],\n): ReferenceEntryRecord[] {\n const byKey = new Map<string, ReferenceEntryRecord>()\n for (const record of records) {\n byKey.set(\n `${record.variant}\u0000${referenceSourceKey(record.variant, record.source)}\u0000${referenceEntryKey(record)}`,\n record,\n )\n }\n return [...byKey.values()].sort(compareReferenceEntries)\n}\n\n// --- Repository contract ------------------------------------------------------\n\nexport interface ReferenceLookupOptions {\n /** Restrict the lookup to one variant; omit for both (draft + published). */\n variant?: ReferenceVariant\n}\n\n/**\n * Persisted \"the index has been fully built\" marker (EC-269). The index is\n * derived data maintained replace-all-for-source on every write, so the\n * (clear + rebuild) backfill is only needed to *seed* a never-built index. A\n * completed backfill writes this marker; its presence lets the read path\n * (opening the References panel) skip the backfill entirely — a single read,\n * zero mutations — instead of rewriting the whole index every session. Carries\n * the entry count purely as a diagnostic; presence is the only gate.\n */\nexport interface ReferenceIndexBuildMarker {\n /** Number of entries the completing backfill produced (diagnostic only). */\n entryCount: number\n}\n\n/**\n * Persists the reference index (EC-155). Writes are **replace-all-for-source**:\n * saving an entity recomputes every outbound reference it holds and replaces the\n * previous set atomically, so edits/deletes/unpublishes can never leave stale\n * entries behind. Lookups work in both directions with field/node-path\n * granularity and are variant-aware.\n */\nexport interface ReferenceIndexRepository {\n /**\n * Replace all entries held by `source` in `variant` with the given outbound\n * references. An empty list removes the source's entries entirely.\n */\n replaceForSource(\n projectId: string,\n variant: ReferenceVariant,\n source: ReferenceSource,\n references: readonly OutboundReference[],\n ): Promise<ReferenceEntryRecord[]>\n /**\n * Replace all entries held by sources of the given types in `variant` (the\n * graph recompute path: one revision yields entries across many pages/layouts,\n * and pages removed from the graph must drop their entries too).\n */\n replaceForSourceTypes(\n projectId: string,\n variant: ReferenceVariant,\n sourceTypes: readonly ReferenceSourceType[],\n entries: readonly ReferenceEntry[],\n ): Promise<ReferenceEntryRecord[]>\n /** Remove all entries held by `source` (in one variant, or both when omitted). */\n removeForSource(\n projectId: string,\n source: ReferenceSource,\n variant?: ReferenceVariant,\n ): Promise<void>\n /** Outbound: what does `source` reference? */\n outbound(\n projectId: string,\n source: ReferenceSource,\n options?: ReferenceLookupOptions,\n ): Promise<ReferenceEntryRecord[]>\n /** Inbound: what references `target`? (The \"used by\" / safe-unpublish direction.) */\n inbound(\n projectId: string,\n target: ReferenceTarget,\n options?: ReferenceLookupOptions,\n ): Promise<ReferenceEntryRecord[]>\n /** Every entry of a project (optionally one variant), deterministically ordered. */\n listEntries(projectId: string, variant?: ReferenceVariant): Promise<ReferenceEntryRecord[]>\n /**\n * The persisted \"index fully built\" marker (EC-269), or `null` if the project's\n * index has never been backfilled. A present marker means the read path can\n * skip the backfill (maintained-on-write keeps it current thereafter).\n */\n getBuildMarker(projectId: string): Promise<ReferenceIndexBuildMarker | null>\n /** Persist the build marker after a completed backfill. */\n setBuildMarker(projectId: string, marker: ReferenceIndexBuildMarker): Promise<void>\n /**\n * Drop the whole index of a project AND its build marker (backfill starts from\n * a clean slate; the marker is re-set only when the rebuild completes).\n */\n clearProject(projectId: string): Promise<void>\n}\n\n// --- In-memory implementation ---------------------------------------------------\n\nexport interface InMemoryReferenceIndexRepositoryOptions {\n seed?: readonly ReferenceEntryRecord[]\n}\n\nexport class InMemoryReferenceIndexRepository implements ReferenceIndexRepository {\n /** projectId → (sourceKey → entries of that source+variant). */\n private readonly byProject = new Map<string, Map<string, ReferenceEntryRecord[]>>()\n /** projectId → build marker (EC-269); absent until a backfill completes. */\n private readonly markers = new Map<string, ReferenceIndexBuildMarker>()\n\n constructor(options: InMemoryReferenceIndexRepositoryOptions = {}) {\n for (const record of options.seed ?? []) {\n const parsed = referenceEntryRecordSchema.parse(record)\n const bucket = this.bucket(parsed.projectId, parsed.variant, parsed.source)\n bucket.push(parsed)\n }\n }\n\n private projectMap(projectId: string): Map<string, ReferenceEntryRecord[]> {\n const existing = this.byProject.get(projectId)\n if (existing) return existing\n const created = new Map<string, ReferenceEntryRecord[]>()\n this.byProject.set(projectId, created)\n return created\n }\n\n private bucket(\n projectId: string,\n variant: ReferenceVariant,\n source: ReferenceSource,\n ): ReferenceEntryRecord[] {\n const map = this.projectMap(projectId)\n const key = referenceSourceKey(variant, source)\n const existing = map.get(key)\n if (existing) return existing\n const created: ReferenceEntryRecord[] = []\n map.set(key, created)\n return created\n }\n\n async replaceForSource(\n projectId: string,\n variant: ReferenceVariant,\n source: ReferenceSource,\n references: readonly OutboundReference[],\n ): Promise<ReferenceEntryRecord[]> {\n const parsedSource = referenceSourceSchema.parse(source)\n const records = normalizeReferenceRecords(\n references.map((reference) =>\n referenceEntryRecordSchema.parse({\n projectId,\n variant,\n source: parsedSource,\n ...outboundReferenceSchema.parse(reference),\n }),\n ),\n )\n const map = this.projectMap(projectId)\n const key = referenceSourceKey(variant, parsedSource)\n if (records.length === 0) map.delete(key)\n else map.set(key, records)\n return records.map(cloneRecord)\n }\n\n async replaceForSourceTypes(\n projectId: string,\n variant: ReferenceVariant,\n sourceTypes: readonly ReferenceSourceType[],\n entries: readonly ReferenceEntry[],\n ): Promise<ReferenceEntryRecord[]> {\n const types = new Set(sourceTypes.map((t) => referenceSourceTypeSchema.parse(t)))\n const map = this.projectMap(projectId)\n // Drop every existing bucket of the affected types in this variant.\n for (const [key, records] of [...map.entries()]) {\n const first = records[0]\n if (first && first.variant === variant && types.has(first.source.type)) map.delete(key)\n }\n const records = normalizeReferenceRecords(\n entries.map((entry) => {\n const parsed = referenceEntrySchema.parse(entry)\n if (!types.has(parsed.source.type)) {\n throw new Error(\n `Reference entry source type “${parsed.source.type}” is outside the replaced types.`,\n )\n }\n return referenceEntryRecordSchema.parse({ projectId, variant, ...parsed })\n }),\n )\n for (const record of records) {\n this.bucket(projectId, record.variant, record.source).push(record)\n }\n return records.map(cloneRecord)\n }\n\n async removeForSource(\n projectId: string,\n source: ReferenceSource,\n variant?: ReferenceVariant,\n ): Promise<void> {\n const map = this.byProject.get(projectId)\n if (!map) return\n const variants: ReferenceVariant[] = variant ? [variant] : ['draft', 'published']\n for (const v of variants) map.delete(referenceSourceKey(v, source))\n }\n\n private collect(\n projectId: string,\n predicate: (record: ReferenceEntryRecord) => boolean,\n ): ReferenceEntryRecord[] {\n const out: ReferenceEntryRecord[] = []\n for (const records of this.byProject.get(projectId)?.values() ?? []) {\n for (const record of records) if (predicate(record)) out.push(record)\n }\n return out.sort(compareReferenceEntries).map(cloneRecord)\n }\n\n async outbound(\n projectId: string,\n source: ReferenceSource,\n options: ReferenceLookupOptions = {},\n ): Promise<ReferenceEntryRecord[]> {\n return this.collect(\n projectId,\n (r) =>\n r.source.type === source.type &&\n r.source.id === source.id &&\n (options.variant === undefined || r.variant === options.variant),\n )\n }\n\n async inbound(\n projectId: string,\n target: ReferenceTarget,\n options: ReferenceLookupOptions = {},\n ): Promise<ReferenceEntryRecord[]> {\n return this.collect(\n projectId,\n (r) =>\n r.target.type === target.type &&\n r.target.id === target.id &&\n (options.variant === undefined || r.variant === options.variant),\n )\n }\n\n async listEntries(\n projectId: string,\n variant?: ReferenceVariant,\n ): Promise<ReferenceEntryRecord[]> {\n return this.collect(projectId, (r) => variant === undefined || r.variant === variant)\n }\n\n async getBuildMarker(projectId: string): Promise<ReferenceIndexBuildMarker | null> {\n const marker = this.markers.get(projectId)\n return marker ? { ...marker } : null\n }\n\n async setBuildMarker(projectId: string, marker: ReferenceIndexBuildMarker): Promise<void> {\n this.markers.set(projectId, { ...marker })\n }\n\n async clearProject(projectId: string): Promise<void> {\n this.byProject.delete(projectId)\n this.markers.delete(projectId)\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"seed.js","sourceRoot":"","sources":["../../src/persistence/seed.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"seed.js","sourceRoot":"","sources":["../../src/persistence/seed.ts"],"names":[],"mappings":"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","sourcesContent":["import { validSampleGraph } from '@elytracms/core/project-graph'\nimport {\n documentKey,\n sampleDocuments,\n sampleFilterableCollections,\n samplePublishedKeys,\n selfTypeDocument,\n} from '@elytracms/core/cms-core'\nimport { createSequentialClock } from './core'\nimport { InMemoryPersistenceAdapter } from './adapter'\nimport type { PersistenceAdapter } from './adapter'\nimport type { ProjectRole } from './members'\n\n/** The sample project the seed attaches graph/registry/CMS/publishing to. */\nexport const SEED_PROJECT_ID = 'prj_aurora'\n\n/**\n * Deterministic dev users (EC-150). The ids are canonical here so the seeded\n * memberships and the builder's local auth adapter (which maps\n * `admin@example.com` etc. + fixed dev passwords onto these ids) stay aligned.\n * Live Convex deployments use Convex Auth `users` ids instead.\n */\nexport const DEV_USERS = {\n admin: { id: 'user_admin', email: 'admin@example.com', name: 'Ada Admin' },\n editor: { id: 'user_editor', email: 'editor@example.com', name: 'Edi Editor' },\n viewer: { id: 'user_viewer', email: 'viewer@example.com', name: 'Vio Viewer' },\n} as const\n\n/** Role each dev user gets on every sample project. */\nexport const DEV_USER_ROLES: ReadonlyArray<{ userId: string; role: ProjectRole }> = [\n { userId: DEV_USERS.admin.id, role: 'admin' },\n { userId: DEV_USERS.editor.id, role: 'editor' },\n { userId: DEV_USERS.viewer.id, role: 'viewer' },\n]\n\n/** A deterministic sample asset record seeded alongside the CMS content. */\nexport const SEED_ASSET = {\n id: 'asset_cover',\n filename: 'cover.jpg',\n contentType: 'image/jpeg',\n byteSize: 102400,\n width: 1200,\n height: 630,\n alt: 'Cover image',\n} as const\n\n/**\n * Populate an adapter with deterministic seed content (brief §10, EC-046):\n * a graph revision, the CMS schema + documents, a sample asset, and a preview\n * publish. Uses only the public repository API, so it works against any\n * {@link PersistenceAdapter} implementation (in-memory or Convex).\n */\nexport async function seedPersistence(adapter: PersistenceAdapter): Promise<void> {\n // Graph + revision — LAYOUTS-ONLY (EC-187, schemaVersion 2). The home page is\n // no longer a graph page; it is a `page`-collection document seeded below\n // (`samplePageHome` rides in `sampleDocuments`), rendered into `layout.main`.\n const revision = await adapter.graphs.saveGraph(SEED_PROJECT_ID, validSampleGraph, {\n label: 'Initial import',\n })\n\n // CMS schema + documents (localized variants ride along; publish-ness is the\n // version pointer pinned below, EC-224).\n // `sampleDocuments` includes the `page/home` document (EC-187) so a routed\n // page resolves to its body composition. The canonical `filterable`\n // declarations ride on the seeded schema (EC-169 fix-pack) so studio\n // filter/sort pickers and the delivery engine share one declaration set\n // without app-side overlays.\n await adapter.cms.saveSchema(SEED_PROJECT_ID, sampleFilterableCollections)\n // EC-224: the live row is the continuous DRAFT (the Sanity model). A doc in\n // `samplePublishedKeys` is published via the version POINTER — record a version\n // snapshot and pin it — not by a flat `state` flag (B-3c retires the field).\n // Resolution serves published via the pin; the live row stays a draft.\n const published = new Set(samplePublishedKeys)\n const collectionsById = new Map(sampleFilterableCollections.map((c) => [c.id, c]))\n for (const rawDocument of sampleDocuments) {\n // EC-277: seed self-typed content, exactly as the operations write lens does in\n // production (the seed's compositions hold no picked relation/asset props, so no\n // manifest lookup is needed here). The persistence store stays schema-agnostic.\n const collection = collectionsById.get(rawDocument.collection)\n const document = collection ? selfTypeDocument(rawDocument, collection) : rawDocument\n await adapter.cms.upsertDocument(SEED_PROJECT_ID, document)\n if (published.has(documentKey({ collection: document.collection, id: document.id }))) {\n const version = await adapter.cms.saveDocumentVersion(SEED_PROJECT_ID, document, {\n label: 'published',\n })\n await adapter.cms.publishDocumentVersion(\n SEED_PROJECT_ID,\n { collection: document.collection, id: document.id },\n version.version,\n )\n }\n }\n\n // Asset metadata.\n await adapter.assets.upsertAsset(SEED_PROJECT_ID, SEED_ASSET)\n\n // Publish the initial revision (the deployment's one environment).\n await adapter.publishing.publish(SEED_PROJECT_ID, {\n revisionId: revision.id,\n revision: revision.revision,\n })\n\n // Memberships (EC-150): every dev user gets their role on the seeded project,\n // so each role's studio experience is reproducible from fixtures.\n const projectIds = [SEED_PROJECT_ID]\n for (const projectId of projectIds) {\n for (const { userId, role } of DEV_USER_ROLES) {\n await adapter.members.setMember(projectId, userId, role)\n }\n }\n}\n\n/**\n * Build a fully-seeded in-memory adapter (brief §10, §11). The domains are\n * seeded deterministically. Reproducible across runs.\n */\nexport async function createSeededPersistenceAdapter(): Promise<InMemoryPersistenceAdapter> {\n const adapter = new InMemoryPersistenceAdapter({\n clock: createSequentialClock('2026-06-07T00:00:00.000Z'),\n })\n await seedPersistence(adapter)\n return adapter\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"self-maintaining-adapter.js","sourceRoot":"","sources":["../../src/persistence/self-maintaining-adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"self-maintaining-adapter.js","sourceRoot":"","sources":["../../src/persistence/self-maintaining-adapter.ts"],"names":[],"mappings":"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","sourcesContent":["import type { DocumentRef } from '@elytracms/core/cms-core'\nimport type { PersistenceAdapter } from './adapter'\nimport type { CmsRepository } from './cms'\nimport type { GraphRepository } from './graph'\nimport type { PublishingRepository } from './publishing'\nimport {\n reindexDocumentReferences,\n reindexGraphDraftReferences,\n reindexGraphPublishedReferences,\n} from './reference-indexing'\n\n/**\n * Self-maintaining reference index (EC-277, vision AD-6).\n *\n * The reference index is **maintained at the source, in the write path** — not by\n * a client-side event subscriber. Every writer is caught by construction: a write\n * recomputes the affected source's outbound references before it returns, so the\n * index can never drift behind the content, regardless of which code path issued\n * the write.\n *\n * {@link maintainReferenceIndex} wraps an in-process repository set (the in-memory\n * provider) so each document/graph/publishing write reindexes in the same call.\n * The Convex provider achieves the identical guarantee *server-side* — extraction\n * runs inside the mutation handler (`convex/cms.ts`, `convex/graphs.ts`,\n * `convex/publishing.ts`), so a raw `convex run` is caught too — and merely flags\n * {@link PersistenceAdapter.maintainsReferenceIndex} so the studio bootstrap does\n * not double-index via the `attachReferenceIndex` subscriber.\n *\n * Extraction is schema-free and manifest-free (self-describing content, AD-15), so\n * maintenance needs nothing but the stored value — which is exactly what lets it\n * live in the store rather than the client.\n */\n\n/** The write-bearing repositories whose mutations trigger a reindex. */\nexport interface MaintainableRepositories {\n cms: CmsRepository\n graphs: GraphRepository\n publishing: PublishingRepository\n}\n\n/**\n * Forward every method of a repository to `inner` (preserving `this`), overriding\n * only the named write methods. A `Proxy` keeps the non-overridden surface — reads\n * and the repository's own internal state — bound to the real instance.\n */\nfunction forwardRepository<T extends object>(inner: T, overrides: Partial<T>): T {\n const overrideMap = overrides as Record<PropertyKey, unknown>\n return new Proxy(inner, {\n get(target, prop) {\n if (Object.prototype.hasOwnProperty.call(overrideMap, prop)) return overrideMap[prop]\n const value = Reflect.get(target, prop, target)\n return typeof value === 'function'\n ? (value as (...args: unknown[]) => unknown).bind(target)\n : value\n },\n })\n}\n\n/**\n * Wrap a repository set so each write keeps the reference index current in-process.\n * `getAdapter` is read lazily on each write so the reindex routines (which need the\n * full adapter for cross-repository reads) resolve against the live, fully-built\n * adapter — letting the caller construct repositories and adapter in any order.\n * Idempotent reindexing (replace-all-for-source) means a redundant subscriber would\n * still converge, but the owning adapter should advertise\n * {@link PersistenceAdapter.maintainsReferenceIndex} so the subscriber stands down.\n */\nexport function maintainReferenceIndex(\n repos: MaintainableRepositories,\n getAdapter: () => PersistenceAdapter,\n): MaintainableRepositories {\n return {\n cms: forwardRepository(repos.cms, {\n upsertDocument: async (projectId, document) => {\n const record = await repos.cms.upsertDocument(projectId, document)\n await reindexDocumentReferences(getAdapter(), projectId, {\n collection: document.collection,\n id: document.id,\n })\n return record\n },\n deleteDocument: async (projectId, ref) => {\n await repos.cms.deleteDocument(projectId, ref)\n // The recompute of a now-missing document drops all of its entries.\n await reindexDocumentReferences(getAdapter(), projectId, ref)\n },\n publishDocumentVersion: async (projectId: string, ref: DocumentRef, version: number) => {\n const record = await repos.cms.publishDocumentVersion(projectId, ref, version)\n // The published variant now exists — recompute both variants of this doc.\n await reindexDocumentReferences(getAdapter(), projectId, ref)\n return record\n },\n unpublishDocument: async (projectId: string, ref: DocumentRef) => {\n const record = await repos.cms.unpublishDocument(projectId, ref)\n // The live pin is cleared — drop this doc's published entries.\n await reindexDocumentReferences(getAdapter(), projectId, ref)\n return record\n },\n }),\n graphs: forwardRepository(repos.graphs, {\n saveGraph: async (projectId, graph, options) => {\n const record = await repos.graphs.saveGraph(projectId, graph, options)\n await reindexGraphDraftReferences(getAdapter(), projectId)\n return record\n },\n }),\n publishing: forwardRepository(repos.publishing, {\n publish: async (projectId, input) => {\n const record = await repos.publishing.publish(projectId, input)\n await reindexGraphPublishedReferences(getAdapter(), projectId)\n return record\n },\n unpublish: async (projectId: string) => {\n const record = await repos.publishing.unpublish(projectId)\n await reindexGraphPublishedReferences(getAdapter(), projectId)\n return record\n },\n }),\n }\n}\n"]}