@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.
- package/dist/clipboard/build.js.map +1 -1
- package/dist/clipboard/clipboard.js.map +1 -1
- package/dist/clipboard/fragment.js.map +1 -1
- package/dist/clipboard/html.js.map +1 -1
- package/dist/clipboard/index.js.map +1 -1
- package/dist/clipboard/references.js.map +1 -1
- package/dist/clipboard/serialize.js.map +1 -1
- package/dist/cms-core/collection-shape.d.ts +43 -0
- package/dist/cms-core/collection-shape.js +129 -0
- package/dist/cms-core/collection-shape.js.map +1 -0
- package/dist/cms-core/collections.d.ts +5 -6
- package/dist/cms-core/collections.js +26 -13
- package/dist/cms-core/collections.js.map +1 -1
- package/dist/cms-core/documents.d.ts +1 -0
- package/dist/cms-core/documents.js +10 -0
- package/dist/cms-core/documents.js.map +1 -1
- package/dist/cms-core/envelopes.js.map +1 -1
- package/dist/cms-core/fields.js.map +1 -1
- package/dist/cms-core/fixtures.js.map +1 -1
- package/dist/cms-core/hierarchy.js.map +1 -1
- package/dist/cms-core/index.d.ts +1 -0
- package/dist/cms-core/index.js +1 -0
- package/dist/cms-core/index.js.map +1 -1
- package/dist/cms-core/infer.js.map +1 -1
- package/dist/cms-core/issues.d.ts +8 -0
- package/dist/cms-core/issues.js +10 -0
- package/dist/cms-core/issues.js.map +1 -1
- package/dist/cms-core/json-schema.js.map +1 -1
- package/dist/cms-core/localization.js.map +1 -1
- package/dist/cms-core/nesting-depth.js.map +1 -1
- package/dist/cms-core/routes.js.map +1 -1
- package/dist/cms-core/self-type.js.map +1 -1
- package/dist/cms-core/url-for-document.js.map +1 -1
- package/dist/cms-core/validate-document.js.map +1 -1
- package/dist/cms-core/versions.d.ts +1 -0
- package/dist/cms-core/versions.js.map +1 -1
- package/dist/collaboration/approval.js.map +1 -1
- package/dist/collaboration/collaboration.js.map +1 -1
- package/dist/collaboration/comments.js.map +1 -1
- package/dist/collaboration/core.js.map +1 -1
- package/dist/collaboration/index.js.map +1 -1
- package/dist/collaboration/presence.js.map +1 -1
- package/dist/collaboration/publishing.js.map +1 -1
- package/dist/collaboration/versions.js.map +1 -1
- package/dist/component-registry/index.js.map +1 -1
- package/dist/component-registry/issues.js.map +1 -1
- package/dist/component-registry/manifest.js.map +1 -1
- package/dist/component-registry/registry.js.map +1 -1
- package/dist/content/__fixtures__/filterable-collections.js.map +1 -1
- package/dist/content/__fixtures__/sample-accessor-types.js.map +1 -1
- package/dist/content/__fixtures__/sample-delivery-types.js.map +1 -1
- package/dist/content/assets.js.map +1 -1
- package/dist/content/binding-sources.js.map +1 -1
- package/dist/content/client.js.map +1 -1
- package/dist/content/codegen.js.map +1 -1
- package/dist/content/context.js.map +1 -1
- package/dist/content/cursor.js.map +1 -1
- package/dist/content/index.js.map +1 -1
- package/dist/content/locale.js.map +1 -1
- package/dist/content/perspective.js.map +1 -1
- package/dist/content/populate.js.map +1 -1
- package/dist/content/query.js.map +1 -1
- package/dist/content/raw.js.map +1 -1
- package/dist/content/resolve.js.map +1 -1
- package/dist/content/serialize.js.map +1 -1
- package/dist/content/tags.js.map +1 -1
- package/dist/data-binding/fixtures.js.map +1 -1
- package/dist/data-binding/index.js.map +1 -1
- package/dist/data-binding/issues.js.map +1 -1
- package/dist/data-binding/resolve.js.map +1 -1
- package/dist/data-binding/sample.js.map +1 -1
- package/dist/data-binding/sources.js.map +1 -1
- package/dist/data-binding/tokens.js.map +1 -1
- package/dist/design-tokens/css.js.map +1 -1
- package/dist/design-tokens/index.js.map +1 -1
- package/dist/design-tokens/style-guide.js.map +1 -1
- package/dist/design-tokens/tokens.js.map +1 -1
- package/dist/export-sync/builder-source.d.ts +1 -0
- package/dist/export-sync/builder-source.js.map +1 -1
- package/dist/export-sync/check.js.map +1 -1
- package/dist/export-sync/cli.js.map +1 -1
- package/dist/export-sync/core.js.map +1 -1
- package/dist/export-sync/eject.js.map +1 -1
- package/dist/export-sync/fixtures.js.map +1 -1
- package/dist/export-sync/generate.js.map +1 -1
- package/dist/export-sync/index.js.map +1 -1
- package/dist/export-sync/init.js.map +1 -1
- package/dist/export-sync/manifest-host.js.map +1 -1
- package/dist/export-sync/node.js.map +1 -1
- package/dist/export-sync/push.js.map +1 -1
- package/dist/export-sync/registry-sync-client.js.map +1 -1
- package/dist/export-sync/sync.js.map +1 -1
- package/dist/export-sync/typegen.js.map +1 -1
- package/dist/export-sync/validate.js.map +1 -1
- package/dist/export-sync/watch.js.map +1 -1
- package/dist/operations/assets.js.map +1 -1
- package/dist/operations/authorization.js.map +1 -1
- package/dist/operations/changesets.js.map +1 -1
- package/dist/operations/client.js.map +1 -1
- package/dist/operations/core.js.map +1 -1
- package/dist/operations/documents.d.ts +21 -0
- package/dist/operations/documents.js.map +1 -1
- package/dist/operations/graph.js.map +1 -1
- package/dist/operations/index.js.map +1 -1
- package/dist/operations/members.js.map +1 -1
- package/dist/operations/publishing.js.map +1 -1
- package/dist/operations/references.js.map +1 -1
- package/dist/operations/schema.d.ts +18 -0
- package/dist/operations/schema.js.map +1 -1
- package/dist/operations/tokens.js.map +1 -1
- package/dist/persistence/adapter.js.map +1 -1
- package/dist/persistence/assets.js.map +1 -1
- package/dist/persistence/backend-validation.js.map +1 -1
- package/dist/persistence/cli-tokens.js.map +1 -1
- package/dist/persistence/cms.d.ts +3 -0
- package/dist/persistence/cms.js.map +1 -1
- package/dist/persistence/contract-scenarios.js.map +1 -1
- package/dist/persistence/core.js.map +1 -1
- package/dist/persistence/graph.js.map +1 -1
- package/dist/persistence/index.js.map +1 -1
- package/dist/persistence/members.js.map +1 -1
- package/dist/persistence/publishing.js.map +1 -1
- package/dist/persistence/reference-extraction.js.map +1 -1
- package/dist/persistence/reference-indexing.js.map +1 -1
- package/dist/persistence/references.js.map +1 -1
- package/dist/persistence/seed.js.map +1 -1
- package/dist/persistence/self-maintaining-adapter.js.map +1 -1
- package/dist/plugins/asset-storage.js.map +1 -1
- package/dist/plugins/component-package.js.map +1 -1
- package/dist/plugins/data-sources.js.map +1 -1
- package/dist/plugins/examples.js.map +1 -1
- package/dist/plugins/export-targets.js.map +1 -1
- package/dist/plugins/field-types.js.map +1 -1
- package/dist/plugins/hooks.js.map +1 -1
- package/dist/plugins/index.js.map +1 -1
- package/dist/plugins/marketplace.js.map +1 -1
- package/dist/plugins/plugin.js.map +1 -1
- package/dist/plugins/templates.js.map +1 -1
- package/dist/project-graph/binding.js.map +1 -1
- package/dist/project-graph/container.js.map +1 -1
- package/dist/project-graph/edit.js.map +1 -1
- package/dist/project-graph/fixtures.js.map +1 -1
- package/dist/project-graph/ids.js.map +1 -1
- package/dist/project-graph/index.js.map +1 -1
- package/dist/project-graph/issues.js.map +1 -1
- package/dist/project-graph/json.js.map +1 -1
- package/dist/project-graph/node.js.map +1 -1
- package/dist/project-graph/normalize.js.map +1 -1
- package/dist/project-graph/serialize.js.map +1 -1
- package/dist/project-graph/structure.js.map +1 -1
- package/dist/project-graph/validate.js.map +1 -1
- package/dist/rich-text/adapter.js.map +1 -1
- package/dist/rich-text/dom-editor.js.map +1 -1
- package/dist/rich-text/embed.js.map +1 -1
- package/dist/rich-text/fixtures.js.map +1 -1
- package/dist/rich-text/html.js.map +1 -1
- package/dist/rich-text/index.js.map +1 -1
- package/dist/rich-text/markdown.js.map +1 -1
- package/dist/rich-text/portable-text.js.map +1 -1
- package/dist/rich-text/registry.js.map +1 -1
- package/dist/rich-text/render.js.map +1 -1
- package/dist/rich-text/schema.js.map +1 -1
- package/dist/rich-text/test-support.js.map +1 -1
- package/dist/runtime-renderer/client.js.map +1 -1
- package/dist/runtime-renderer/condition.js.map +1 -1
- package/dist/runtime-renderer/content-client.js.map +1 -1
- package/dist/runtime-renderer/context.js.map +1 -1
- package/dist/runtime-renderer/fallback.js.map +1 -1
- package/dist/runtime-renderer/index.js.map +1 -1
- package/dist/runtime-renderer/primitives.js.map +1 -1
- package/dist/runtime-renderer/render.js.map +1 -1
- package/dist/runtime-renderer/rich-text.js.map +1 -1
- package/dist/starter-kits/index.js.map +1 -1
- package/dist/starter-kits/instantiate.js.map +1 -1
- package/dist/starter-kits/kit.js.map +1 -1
- package/dist/starter-kits/kits.js.map +1 -1
- package/dist/starter-kits/manifests.js.map +1 -1
- package/dist/starter-kits/upgrade.js.map +1 -1
- package/dist/starter-kits/validate.js.map +1 -1
- package/dist/studio-core/context.js.map +1 -1
- package/dist/studio-core/errors.js.map +1 -1
- package/dist/studio-core/fixtures.js.map +1 -1
- package/dist/studio-core/ids.js.map +1 -1
- package/dist/studio-core/index.js.map +1 -1
- package/dist/studio-core/issues.js.map +1 -1
- package/dist/studio-core/metadata.js.map +1 -1
- package/dist/studio-core/repository.js.map +1 -1
- package/dist/studio-core/sections.d.ts +1 -1
- package/dist/studio-core/sections.js.map +1 -1
- package/dist/studio-core/validate.js.map +1 -1
- package/dist/studio-core/workspace-config.d.ts +4 -0
- package/dist/studio-core/workspace-config.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph.js","sourceRoot":"","sources":["../../src/operations/graph.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"graph.js","sourceRoot":"","sources":["../../src/operations/graph.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod'\nimport { normalizeProjectGraph, projectGraphSchema } from '@elytracms/core/project-graph'\nimport { projectIdSchema } from '@elytracms/core/studio-core'\nimport { bindOperation, defineCommand, defineQuery } from './core'\nimport type { OperationsRuntime } from './core'\n\n/**\n * Graph operations (EC-139, reshaped by EC-187). The project graph is now\n * LAYOUTS-ONLY: pages moved into the `page` collection (their `body` is a\n * composition field value persisted as document data through the CMS document\n * commands). So the node-level page-graph commands (insert/remove/duplicate/\n * move/reorder/prop/condition) are RETIRED — layout edits go through the coarse\n * `graph.save` path (layouts change rarely), and page-body edits go through the\n * CMS document save (the composition field editor lifts its value into the\n * document draft).\n *\n * `graph.save` persists a whole working graph as a new revision, running the\n * pure container normalizer first so the persisted timeline never contains\n * empty or single-child layout containers (EC-161).\n */\n\nexport const saveGraphInputSchema = z.object({\n projectId: projectIdSchema,\n graph: projectGraphSchema,\n label: z.string().min(1).optional(),\n message: z.string().min(1).optional(),\n})\n\nexport const getGraphInputSchema = z.object({\n projectId: projectIdSchema,\n})\n\nexport const getRevisionInputSchema = z.object({\n projectId: projectIdSchema,\n revision: z.number().int().positive(),\n})\n\n// --- definitions ----------------------------------------------------------------\n\nexport const graphOperationDefinitions = {\n save: defineCommand({\n name: 'graph.save',\n domain: 'graph',\n description: 'Persist a full project graph (layouts-only) as a new revision.',\n input: saveGraphInputSchema,\n summarize: (input) =>\n `{\"projectId\":\"${input.projectId}\",\"graphId\":\"${input.graph.id}\",\"layouts\":${input.graph.layouts.length}}`,\n execute: (context, input) =>\n // Full saves normalize too — the persisted timeline never contains\n // empty or single-child layout containers (EC-161).\n context.adapter.graphs.saveGraph(input.projectId, normalizeProjectGraph(input.graph), {\n ...(input.label !== undefined ? { label: input.label } : {}),\n ...(input.message !== undefined ? { message: input.message } : {}),\n }),\n }),\n getLatest: defineQuery({\n name: 'graph.getLatest',\n domain: 'graph',\n description: 'Load the latest graph revision (parsed graph + revision record).',\n input: getGraphInputSchema,\n execute: (context, input) => context.adapter.graphs.getLatest(input.projectId),\n }),\n getRevision: defineQuery({\n name: 'graph.getRevision',\n domain: 'graph',\n description: 'Load a specific graph revision.',\n input: getRevisionInputSchema,\n execute: (context, input) =>\n context.adapter.graphs.getRevision(input.projectId, input.revision),\n }),\n listRevisions: defineQuery({\n name: 'graph.listRevisions',\n domain: 'graph',\n description: 'List all graph revisions for a project, newest first.',\n input: getGraphInputSchema,\n execute: (context, input) => context.adapter.graphs.listRevisions(input.projectId),\n }),\n} as const\n\nexport function createGraphOperations(runtime: OperationsRuntime) {\n return {\n save: bindOperation(runtime, graphOperationDefinitions.save),\n getLatest: bindOperation(runtime, graphOperationDefinitions.getLatest),\n getRevision: bindOperation(runtime, graphOperationDefinitions.getRevision),\n listRevisions: bindOperation(runtime, graphOperationDefinitions.listRevisions),\n }\n}\n\nexport type GraphOperations = ReturnType<typeof createGraphOperations>\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/operations/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,4BAA4B,CAAA;AAEnD,cAAc,QAAQ,CAAA;AACtB,cAAc,UAAU,CAAA;AACxB,cAAc,aAAa,CAAA;AAC3B,cAAc,SAAS,CAAA;AACvB,cAAc,UAAU,CAAA;AACxB,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,cAAc,UAAU,CAAA;AACxB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,UAAU,CAAA;AACxB,cAAc,cAAc,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/operations/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,4BAA4B,CAAA;AAEnD,cAAc,QAAQ,CAAA;AACtB,cAAc,UAAU,CAAA;AACxB,cAAc,aAAa,CAAA;AAC3B,cAAc,SAAS,CAAA;AACvB,cAAc,UAAU,CAAA;AACxB,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,cAAc,UAAU,CAAA;AACxB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,UAAU,CAAA;AACxB,cAAc,cAAc,CAAA","sourcesContent":["/**\n * `@elytracms/core/operations` — the typed command/query spine of the app (EC-139,\n * vision AD-7). Every domain mutation flows through one pipeline:\n * validate (Zod) → authorize (hook) → mutate via `PersistenceAdapter` → emit\n * lifecycle event. Pure TypeScript: no React, no TanStack, no Convex.\n */\nexport const PACKAGE = '@elytracms/core/operations'\n\nexport * from './core'\nexport * from './schema'\nexport * from './documents'\nexport * from './graph'\nexport * from './assets'\nexport * from './publishing'\nexport * from './references'\nexport * from './members'\nexport * from './tokens'\nexport * from './authorization'\nexport * from './client'\nexport * from './changesets'\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"members.js","sourceRoot":"","sources":["../../src/operations/members.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAA;AAC/D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AAGlE;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,SAAS,EAAE,eAAe;IAC1B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,IAAI,EAAE,iBAAiB;CACxB,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,SAAS,EAAE,eAAe;IAC1B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CAC1B,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,SAAS,EAAE,eAAe;CAC3B,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,GAAG,EAAE,aAAa,CAAC;QACjB,IAAI,EAAE,aAAa;QACnB,MAAM,EAAE,SAAS;QACjB,WAAW,EAAE,uEAAuE;QACpF,KAAK,EAAE,oBAAoB;QAC3B,OAAO,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAC1B,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC;KAC/E,CAAC;IACF,MAAM,EAAE,aAAa,CAAC;QACpB,IAAI,EAAE,gBAAgB;QACtB,MAAM,EAAE,SAAS;QACjB,WAAW,EAAE,iCAAiC;QAC9C,KAAK,EAAE,uBAAuB;QAC9B,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;YAChC,MAAM,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;YACzE,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAA;QAC7D,CAAC;KACF,CAAC;IACF,IAAI,EAAE,WAAW,CAAC;QAChB,IAAI,EAAE,cAAc;QACpB,MAAM,EAAE,SAAS;QACjB,WAAW,EAAE,iDAAiD;QAC9D,KAAK,EAAE,sBAAsB;QAC7B,OAAO,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC;KAClF,CAAC;CACM,CAAA;AAEV,MAAM,UAAU,sBAAsB,CAAC,OAA0B;IAC/D,OAAO;QACL,GAAG,EAAE,aAAa,CAAC,OAAO,EAAE,0BAA0B,CAAC,GAAG,CAAC;QAC3D,MAAM,EAAE,aAAa,CAAC,OAAO,EAAE,0BAA0B,CAAC,MAAM,CAAC;QACjE,IAAI,EAAE,aAAa,CAAC,OAAO,EAAE,0BAA0B,CAAC,IAAI,CAAC;KAC9D,CAAA;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"members.js","sourceRoot":"","sources":["../../src/operations/members.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAA;AAC/D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AAGlE;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,SAAS,EAAE,eAAe;IAC1B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,IAAI,EAAE,iBAAiB;CACxB,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,SAAS,EAAE,eAAe;IAC1B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CAC1B,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,SAAS,EAAE,eAAe;CAC3B,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,GAAG,EAAE,aAAa,CAAC;QACjB,IAAI,EAAE,aAAa;QACnB,MAAM,EAAE,SAAS;QACjB,WAAW,EAAE,uEAAuE;QACpF,KAAK,EAAE,oBAAoB;QAC3B,OAAO,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAC1B,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC;KAC/E,CAAC;IACF,MAAM,EAAE,aAAa,CAAC;QACpB,IAAI,EAAE,gBAAgB;QACtB,MAAM,EAAE,SAAS;QACjB,WAAW,EAAE,iCAAiC;QAC9C,KAAK,EAAE,uBAAuB;QAC9B,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;YAChC,MAAM,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;YACzE,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAA;QAC7D,CAAC;KACF,CAAC;IACF,IAAI,EAAE,WAAW,CAAC;QAChB,IAAI,EAAE,cAAc;QACpB,MAAM,EAAE,SAAS;QACjB,WAAW,EAAE,iDAAiD;QAC9D,KAAK,EAAE,sBAAsB;QAC7B,OAAO,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC;KAClF,CAAC;CACM,CAAA;AAEV,MAAM,UAAU,sBAAsB,CAAC,OAA0B;IAC/D,OAAO;QACL,GAAG,EAAE,aAAa,CAAC,OAAO,EAAE,0BAA0B,CAAC,GAAG,CAAC;QAC3D,MAAM,EAAE,aAAa,CAAC,OAAO,EAAE,0BAA0B,CAAC,MAAM,CAAC;QACjE,IAAI,EAAE,aAAa,CAAC,OAAO,EAAE,0BAA0B,CAAC,IAAI,CAAC;KAC9D,CAAA;AACH,CAAC","sourcesContent":["import { z } from 'zod'\nimport { projectIdSchema } from '@elytracms/core/studio-core'\nimport { projectRoleSchema } from '@elytracms/core/persistence'\nimport { bindOperation, defineCommand, defineQuery } from './core'\nimport type { OperationsRuntime } from './core'\n\n/**\n * Project-member management (EC-150, vision AD-7). Membership writes flow\n * through the same chokepoint as every other mutation, so the role hook can\n * enforce that only project `admin`s manage members — editors and viewers get\n * structured denials, never UI-only gating.\n */\n\nexport const setMemberInputSchema = z.object({\n projectId: projectIdSchema,\n userId: z.string().min(1),\n role: projectRoleSchema,\n})\n\nexport const removeMemberInputSchema = z.object({\n projectId: projectIdSchema,\n userId: z.string().min(1),\n})\n\nexport const listMembersInputSchema = z.object({\n projectId: projectIdSchema,\n})\n\nexport const memberOperationDefinitions = {\n set: defineCommand({\n name: 'members.set',\n domain: 'members',\n description: 'Add a member to a project or change their role (admin/editor/viewer).',\n input: setMemberInputSchema,\n execute: (context, input) =>\n context.adapter.members.setMember(input.projectId, input.userId, input.role),\n }),\n remove: defineCommand({\n name: 'members.remove',\n domain: 'members',\n description: 'Remove a member from a project.',\n input: removeMemberInputSchema,\n execute: async (context, input) => {\n await context.adapter.members.removeMember(input.projectId, input.userId)\n return { projectId: input.projectId, userId: input.userId }\n },\n }),\n list: defineQuery({\n name: 'members.list',\n domain: 'members',\n description: 'List the members of a project with their roles.',\n input: listMembersInputSchema,\n execute: (context, input) => context.adapter.members.listMembers(input.projectId),\n }),\n} as const\n\nexport function createMemberOperations(runtime: OperationsRuntime) {\n return {\n set: bindOperation(runtime, memberOperationDefinitions.set),\n remove: bindOperation(runtime, memberOperationDefinitions.remove),\n list: bindOperation(runtime, memberOperationDefinitions.list),\n }\n}\n\nexport type MemberOperations = ReturnType<typeof createMemberOperations>\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publishing.js","sourceRoot":"","sources":["../../src/operations/publishing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAC7D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AAGlE;;;;;;GAMG;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,SAAS,EAAE,eAAe;IAC1B,yEAAyE;IACzE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;CACjD,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,SAAS,EAAE,eAAe;CAC3B,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,8BAA8B,GAAG;IAC5C,OAAO,EAAE,aAAa,CAAC;QACrB,IAAI,EAAE,oBAAoB;QAC1B,MAAM,EAAE,YAAY;QACpB,WAAW,EAAE,iDAAiD;QAC9D,KAAK,EAAE,kBAAkB;QACzB,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;YAChC,MAAM,MAAM,GACV,KAAK,CAAC,QAAQ,KAAK,SAAS;gBAC1B,CAAC,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC;gBAC3E,CAAC,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;YAC7D,OAAO,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE;gBACzD,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE;gBAC9B,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ;aACnC,CAAC,CAAA;QACJ,CAAC;KACF,CAAC;IACF,SAAS,EAAE,aAAa,CAAC;QACvB,IAAI,EAAE,sBAAsB;QAC5B,MAAM,EAAE,YAAY;QACpB,WAAW,EAAE,gDAAgD;QAC7D,KAAK,EAAE,wBAAwB;QAC/B,OAAO,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC;KACnF,CAAC;IACF,QAAQ,EAAE,WAAW,CAAC;QACpB,IAAI,EAAE,qBAAqB;QAC3B,MAAM,EAAE,YAAY;QACpB,WAAW,EAAE,iEAAiE;QAC9E,KAAK,EAAE,wBAAwB;QAC/B,OAAO,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC;KACnF,CAAC;CACM,CAAA;AAEV,MAAM,UAAU,0BAA0B,CAAC,OAA0B;IACnE,OAAO;QACL,OAAO,EAAE,aAAa,CAAC,OAAO,EAAE,8BAA8B,CAAC,OAAO,CAAC;QACvE,SAAS,EAAE,aAAa,CAAC,OAAO,EAAE,8BAA8B,CAAC,SAAS,CAAC;QAC3E,QAAQ,EAAE,aAAa,CAAC,OAAO,EAAE,8BAA8B,CAAC,QAAQ,CAAC;KAC1E,CAAA;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"publishing.js","sourceRoot":"","sources":["../../src/operations/publishing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAC7D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AAGlE;;;;;;GAMG;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,SAAS,EAAE,eAAe;IAC1B,yEAAyE;IACzE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;CACjD,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,SAAS,EAAE,eAAe;CAC3B,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,8BAA8B,GAAG;IAC5C,OAAO,EAAE,aAAa,CAAC;QACrB,IAAI,EAAE,oBAAoB;QAC1B,MAAM,EAAE,YAAY;QACpB,WAAW,EAAE,iDAAiD;QAC9D,KAAK,EAAE,kBAAkB;QACzB,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;YAChC,MAAM,MAAM,GACV,KAAK,CAAC,QAAQ,KAAK,SAAS;gBAC1B,CAAC,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC;gBAC3E,CAAC,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;YAC7D,OAAO,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE;gBACzD,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE;gBAC9B,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ;aACnC,CAAC,CAAA;QACJ,CAAC;KACF,CAAC;IACF,SAAS,EAAE,aAAa,CAAC;QACvB,IAAI,EAAE,sBAAsB;QAC5B,MAAM,EAAE,YAAY;QACpB,WAAW,EAAE,gDAAgD;QAC7D,KAAK,EAAE,wBAAwB;QAC/B,OAAO,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC;KACnF,CAAC;IACF,QAAQ,EAAE,WAAW,CAAC;QACpB,IAAI,EAAE,qBAAqB;QAC3B,MAAM,EAAE,YAAY;QACpB,WAAW,EAAE,iEAAiE;QAC9E,KAAK,EAAE,wBAAwB;QAC/B,OAAO,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC;KACnF,CAAC;CACM,CAAA;AAEV,MAAM,UAAU,0BAA0B,CAAC,OAA0B;IACnE,OAAO;QACL,OAAO,EAAE,aAAa,CAAC,OAAO,EAAE,8BAA8B,CAAC,OAAO,CAAC;QACvE,SAAS,EAAE,aAAa,CAAC,OAAO,EAAE,8BAA8B,CAAC,SAAS,CAAC;QAC3E,QAAQ,EAAE,aAAa,CAAC,OAAO,EAAE,8BAA8B,CAAC,QAAQ,CAAC;KAC1E,CAAA;AACH,CAAC","sourcesContent":["import { z } from 'zod'\nimport { projectIdSchema } from '@elytracms/core/studio-core'\nimport { bindOperation, defineCommand, defineQuery } from './core'\nimport type { OperationsRuntime } from './core'\n\n/**\n * Publishing operations (EC-139). Pins a graph revision live (or reverts it to\n * draft) — the persistent counterpart to the studio's publish flow in the\n * collaboration drawer. Single-environment (EC-179, vision AD-8): a deployment\n * IS one environment, so there is no environment dimension and no promote —\n * see `env-is-deployment-boundary`.\n */\n\nexport const publishInputSchema = z.object({\n projectId: projectIdSchema,\n /** Graph revision number to publish; defaults to the latest revision. */\n revision: z.number().int().positive().optional(),\n})\n\nexport const publishingRefInputSchema = z.object({\n projectId: projectIdSchema,\n})\n\nexport const publishingOperationDefinitions = {\n publish: defineCommand({\n name: 'publishing.publish',\n domain: 'publishing',\n description: 'Publish a graph revision (latest when omitted).',\n input: publishInputSchema,\n execute: async (context, input) => {\n const loaded =\n input.revision !== undefined\n ? await context.adapter.graphs.getRevision(input.projectId, input.revision)\n : await context.adapter.graphs.getLatest(input.projectId)\n return context.adapter.publishing.publish(input.projectId, {\n revisionId: loaded.revision.id,\n revision: loaded.revision.revision,\n })\n },\n }),\n unpublish: defineCommand({\n name: 'publishing.unpublish',\n domain: 'publishing',\n description: 'Revert to draft (must currently be published).',\n input: publishingRefInputSchema,\n execute: (context, input) => context.adapter.publishing.unpublish(input.projectId),\n }),\n getState: defineQuery({\n name: 'publishing.getState',\n domain: 'publishing',\n description: 'Load the publishing state (undefined before the first publish).',\n input: publishingRefInputSchema,\n execute: (context, input) => context.adapter.publishing.findState(input.projectId),\n }),\n} as const\n\nexport function createPublishingOperations(runtime: OperationsRuntime) {\n return {\n publish: bindOperation(runtime, publishingOperationDefinitions.publish),\n unpublish: bindOperation(runtime, publishingOperationDefinitions.unpublish),\n getState: bindOperation(runtime, publishingOperationDefinitions.getState),\n }\n}\n\nexport type PublishingOperations = ReturnType<typeof createPublishingOperations>\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"references.js","sourceRoot":"","sources":["../../src/operations/references.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"references.js","sourceRoot":"","sources":["../../src/operations/references.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod'\nimport {\n backfillReferenceIndex,\n referenceSourceSchema,\n referenceTargetSchema,\n referenceVariantSchema,\n reindexAllDocumentReferences,\n reindexDocumentReferences,\n reindexGraphDraftReferences,\n reindexGraphPublishedReferences,\n} from '@elytracms/core/persistence'\nimport type { PersistenceAdapter } from '@elytracms/core/persistence'\nimport { projectIdSchema } from '@elytracms/core/studio-core'\nimport { bindOperation, defineCommand, defineQuery } from './core'\nimport type { OperationEvent, OperationEventBus, OperationsRuntime } from './core'\n\n/**\n * Reference-index operations (EC-155, vision AD-6/AD-7).\n *\n * Two halves, one file (self-contained by design):\n * 1. The query API — `references.inbound` / `references.outbound` lookups with\n * field/node-path granularity (the substrate for Milestone B deep links),\n * plus the `references.backfill` command that rebuilds a project's index.\n * 2. {@link attachReferenceIndex} — an event-bus subscriber that keeps the\n * index maintained on write: document/graph/publishing command successes\n * trigger a recompute of the affected sources (replace-all-for-source, so\n * edits/deletes/unpublishes can never leave stale entries).\n */\n\n// --- Input schemas ----------------------------------------------------------------\n\nexport const outboundReferencesInputSchema = z.object({\n projectId: projectIdSchema,\n /** The holding entity: a document (`collection:id`), page, or layout. */\n source: referenceSourceSchema,\n /** Restrict to one variant; omit for both (draft + published). */\n variant: referenceVariantSchema.optional(),\n})\n\nexport const inboundReferencesInputSchema = z.object({\n projectId: projectIdSchema,\n /** The referenced entity: a document (`collection:id`), component, or asset. */\n target: referenceTargetSchema,\n /** Restrict to one variant; omit for both (draft + published). */\n variant: referenceVariantSchema.optional(),\n})\n\nexport const backfillReferencesInputSchema = z.object({\n projectId: projectIdSchema,\n})\n\nexport const referenceBuildMarkerInputSchema = z.object({\n projectId: projectIdSchema,\n})\n\n// --- Operation definitions ----------------------------------------------------------\n\nexport const referenceOperationDefinitions = {\n outbound: defineQuery({\n name: 'references.outbound',\n domain: 'references',\n description: 'What does this entity reference? Outbound entries with exact field/node paths.',\n input: outboundReferencesInputSchema,\n execute: (context, input) =>\n context.adapter.references.outbound(\n input.projectId,\n input.source,\n input.variant !== undefined ? { variant: input.variant } : {},\n ),\n }),\n inbound: defineQuery({\n name: 'references.inbound',\n domain: 'references',\n description:\n 'What references this entity? Inbound entries (the \"used by\" / safe-unpublish direction).',\n input: inboundReferencesInputSchema,\n execute: (context, input) =>\n context.adapter.references.inbound(\n input.projectId,\n input.target,\n input.variant !== undefined ? { variant: input.variant } : {},\n ),\n }),\n backfill: defineCommand({\n name: 'references.backfill',\n domain: 'references',\n description:\n 'Rebuild the complete reference index of a project from its current data (idempotent).',\n input: backfillReferencesInputSchema,\n execute: (context, input) => backfillReferenceIndex(context.adapter, input.projectId),\n }),\n buildMarker: defineQuery({\n name: 'references.buildMarker',\n domain: 'references',\n description:\n 'The persisted \"index fully built\" marker, or null if never backfilled (EC-269 read-path gate).',\n input: referenceBuildMarkerInputSchema,\n execute: (context, input) => context.adapter.references.getBuildMarker(input.projectId),\n }),\n} as const\n\nexport function createReferenceOperations(runtime: OperationsRuntime) {\n return {\n outbound: bindOperation(runtime, referenceOperationDefinitions.outbound),\n inbound: bindOperation(runtime, referenceOperationDefinitions.inbound),\n backfill: bindOperation(runtime, referenceOperationDefinitions.backfill),\n buildMarker: bindOperation(runtime, referenceOperationDefinitions.buildMarker),\n }\n}\n\nexport type ReferenceOperations = ReturnType<typeof createReferenceOperations>\n\n// --- Maintained on write: the event-bus subscriber -----------------------------------\n\nexport interface AttachReferenceIndexOptions {\n /**\n * Observes index-update failures. Updates run outside the command pipeline and\n * must never break it (mirrors the event bus's listener isolation), so\n * failures are reported here instead of thrown.\n */\n onError?: (error: unknown, event: OperationEvent) => void\n}\n\nexport interface ReferenceIndexAttachment {\n /** Stop listening (already-queued updates still run). */\n detach: () => void\n /** Await every index update queued so far (updates are async; events are sync). */\n flush: () => Promise<void>\n}\n\n/** Structurally parse a (possibly truncated) deterministic input summary. */\nfunction parseInputSummary(summary: string): Record<string, unknown> | undefined {\n try {\n const parsed: unknown = JSON.parse(summary)\n return typeof parsed === 'object' && parsed !== null && !Array.isArray(parsed)\n ? (parsed as Record<string, unknown>)\n : undefined\n } catch {\n return undefined\n }\n}\n\n/**\n * Recover the projectId from an input summary even when the summary was\n * truncated (summaries cap at 160 chars; `projectId` is the first key of every\n * domain input schema, so it survives truncation).\n */\nfunction projectIdOfSummary(summary: string): string | undefined {\n const parsed = parseInputSummary(summary)\n if (parsed && typeof parsed.projectId === 'string' && parsed.projectId.length > 0) {\n return parsed.projectId\n }\n const match = /\"projectId\"\\s*:\\s*\"([^\"\\\\]+)\"/.exec(summary)\n return match?.[1]\n}\n\nfunction documentRefOf(value: unknown): { collection: string; id: string } | undefined {\n if (typeof value !== 'object' || value === null) return undefined\n const candidate = value as { collection?: unknown; id?: unknown }\n return typeof candidate.collection === 'string' &&\n candidate.collection.length > 0 &&\n typeof candidate.id === 'string' &&\n candidate.id.length > 0\n ? { collection: candidate.collection, id: candidate.id }\n : undefined\n}\n\n/**\n * Subscribe the reference index to the EC-139 lifecycle event bus so it is\n * maintained on every write:\n *\n * - `documents` command success → recompute that document's entries (or all\n * documents when the summary was truncated past the document identity);\n * deletes drop entries because the recompute of a missing document is empty.\n * - `graph` command success → recompute the draft graph entries from the new\n * latest revision.\n * - `publishing` command success → recompute the published graph entries from\n * the currently pinned revisions (unpublish included).\n *\n * Updates run on a serial queue for deterministic ordering; await\n * {@link ReferenceIndexAttachment.flush} to observe a settled index.\n */\nexport function attachReferenceIndex(\n events: OperationEventBus,\n adapter: PersistenceAdapter,\n options: AttachReferenceIndexOptions = {},\n): ReferenceIndexAttachment {\n let pending: Promise<void> = Promise.resolve()\n const schedule = (event: OperationEvent, work: () => Promise<void>): void => {\n pending = pending.then(work).catch((error: unknown) => {\n options.onError?.(error, event)\n })\n }\n\n const listener = (event: OperationEvent): void => {\n if (event.status !== 'succeeded' || event.kind !== 'command') return\n const projectId = projectIdOfSummary(event.inputSummary)\n if (!projectId) return\n\n switch (event.domain) {\n case 'documents': {\n const parsed = parseInputSummary(event.inputSummary)\n const ref = documentRefOf(parsed?.document) ?? documentRefOf(parsed?.ref)\n if (ref) {\n schedule(event, () => reindexDocumentReferences(adapter, projectId, ref))\n } else {\n // Truncated summary (large upsert payload): recompute every document.\n schedule(event, () => reindexAllDocumentReferences(adapter, projectId))\n }\n return\n }\n case 'graph':\n schedule(event, () => reindexGraphDraftReferences(adapter, projectId))\n return\n case 'publishing':\n schedule(event, () => reindexGraphPublishedReferences(adapter, projectId))\n return\n default:\n return\n }\n }\n\n const unsubscribe = events.subscribe(listener)\n return {\n detach: unsubscribe,\n flush: async () => {\n // Drain until no new work was queued while awaiting.\n let current: Promise<void>\n do {\n current = pending\n await current\n } while (current !== pending)\n },\n }\n}\n"]}
|
|
@@ -26,6 +26,7 @@ export declare const saveSchemaInputSchema: z.ZodObject<{
|
|
|
26
26
|
localized: z.ZodOptional<z.ZodBoolean>;
|
|
27
27
|
titleField: z.ZodOptional<z.ZodString>;
|
|
28
28
|
singleton: z.ZodOptional<z.ZodBoolean>;
|
|
29
|
+
aliases: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
29
30
|
}, z.core.$strip>>;
|
|
30
31
|
}, z.core.$strip>;
|
|
31
32
|
export declare const upsertCollectionInputSchema: z.ZodObject<{
|
|
@@ -47,6 +48,7 @@ export declare const upsertCollectionInputSchema: z.ZodObject<{
|
|
|
47
48
|
localized: z.ZodOptional<z.ZodBoolean>;
|
|
48
49
|
titleField: z.ZodOptional<z.ZodString>;
|
|
49
50
|
singleton: z.ZodOptional<z.ZodBoolean>;
|
|
51
|
+
aliases: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
50
52
|
}, z.core.$strip>;
|
|
51
53
|
}, z.core.$strip>;
|
|
52
54
|
export declare const removeCollectionInputSchema: z.ZodObject<{
|
|
@@ -86,6 +88,7 @@ export declare const schemaOperationDefinitions: {
|
|
|
86
88
|
localized: z.ZodOptional<z.ZodBoolean>;
|
|
87
89
|
titleField: z.ZodOptional<z.ZodString>;
|
|
88
90
|
singleton: z.ZodOptional<z.ZodBoolean>;
|
|
91
|
+
aliases: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
89
92
|
}, z.core.$strip>>;
|
|
90
93
|
}, z.core.$strip>, {
|
|
91
94
|
createdAt: string;
|
|
@@ -105,6 +108,7 @@ export declare const schemaOperationDefinitions: {
|
|
|
105
108
|
localized?: boolean | undefined;
|
|
106
109
|
titleField?: string | undefined;
|
|
107
110
|
singleton?: boolean | undefined;
|
|
111
|
+
aliases?: string[] | undefined;
|
|
108
112
|
}[];
|
|
109
113
|
}>;
|
|
110
114
|
readonly upsertCollection: import("./core").OperationDefinition<z.ZodObject<{
|
|
@@ -126,6 +130,7 @@ export declare const schemaOperationDefinitions: {
|
|
|
126
130
|
localized: z.ZodOptional<z.ZodBoolean>;
|
|
127
131
|
titleField: z.ZodOptional<z.ZodString>;
|
|
128
132
|
singleton: z.ZodOptional<z.ZodBoolean>;
|
|
133
|
+
aliases: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
129
134
|
}, z.core.$strip>;
|
|
130
135
|
}, z.core.$strip>, {
|
|
131
136
|
createdAt: string;
|
|
@@ -145,6 +150,7 @@ export declare const schemaOperationDefinitions: {
|
|
|
145
150
|
localized?: boolean | undefined;
|
|
146
151
|
titleField?: string | undefined;
|
|
147
152
|
singleton?: boolean | undefined;
|
|
153
|
+
aliases?: string[] | undefined;
|
|
148
154
|
}[];
|
|
149
155
|
}>;
|
|
150
156
|
readonly removeCollection: import("./core").OperationDefinition<z.ZodObject<{
|
|
@@ -168,6 +174,7 @@ export declare const schemaOperationDefinitions: {
|
|
|
168
174
|
localized?: boolean | undefined;
|
|
169
175
|
titleField?: string | undefined;
|
|
170
176
|
singleton?: boolean | undefined;
|
|
177
|
+
aliases?: string[] | undefined;
|
|
171
178
|
}[];
|
|
172
179
|
}>;
|
|
173
180
|
readonly upsertField: import("./core").OperationDefinition<z.ZodObject<{
|
|
@@ -192,6 +199,7 @@ export declare const schemaOperationDefinitions: {
|
|
|
192
199
|
localized?: boolean | undefined;
|
|
193
200
|
titleField?: string | undefined;
|
|
194
201
|
singleton?: boolean | undefined;
|
|
202
|
+
aliases?: string[] | undefined;
|
|
195
203
|
}[];
|
|
196
204
|
}>;
|
|
197
205
|
readonly removeField: import("./core").OperationDefinition<z.ZodObject<{
|
|
@@ -216,6 +224,7 @@ export declare const schemaOperationDefinitions: {
|
|
|
216
224
|
localized?: boolean | undefined;
|
|
217
225
|
titleField?: string | undefined;
|
|
218
226
|
singleton?: boolean | undefined;
|
|
227
|
+
aliases?: string[] | undefined;
|
|
219
228
|
}[];
|
|
220
229
|
}>;
|
|
221
230
|
readonly get: import("./core").OperationDefinition<z.ZodObject<{
|
|
@@ -238,6 +247,7 @@ export declare const schemaOperationDefinitions: {
|
|
|
238
247
|
localized?: boolean | undefined;
|
|
239
248
|
titleField?: string | undefined;
|
|
240
249
|
singleton?: boolean | undefined;
|
|
250
|
+
aliases?: string[] | undefined;
|
|
241
251
|
}[];
|
|
242
252
|
}>;
|
|
243
253
|
};
|
|
@@ -258,6 +268,7 @@ export declare function createSchemaOperations(runtime: OperationsRuntime): {
|
|
|
258
268
|
localized?: boolean | undefined;
|
|
259
269
|
titleField?: string | undefined;
|
|
260
270
|
singleton?: boolean | undefined;
|
|
271
|
+
aliases?: string[] | undefined;
|
|
261
272
|
}[];
|
|
262
273
|
}) => Promise<import("./core").OperationResult<{
|
|
263
274
|
createdAt: string;
|
|
@@ -277,6 +288,7 @@ export declare function createSchemaOperations(runtime: OperationsRuntime): {
|
|
|
277
288
|
localized?: boolean | undefined;
|
|
278
289
|
titleField?: string | undefined;
|
|
279
290
|
singleton?: boolean | undefined;
|
|
291
|
+
aliases?: string[] | undefined;
|
|
280
292
|
}[];
|
|
281
293
|
}>>;
|
|
282
294
|
upsertCollection: (input: {
|
|
@@ -295,6 +307,7 @@ export declare function createSchemaOperations(runtime: OperationsRuntime): {
|
|
|
295
307
|
localized?: boolean | undefined;
|
|
296
308
|
titleField?: string | undefined;
|
|
297
309
|
singleton?: boolean | undefined;
|
|
310
|
+
aliases?: string[] | undefined;
|
|
298
311
|
};
|
|
299
312
|
}) => Promise<import("./core").OperationResult<{
|
|
300
313
|
createdAt: string;
|
|
@@ -314,6 +327,7 @@ export declare function createSchemaOperations(runtime: OperationsRuntime): {
|
|
|
314
327
|
localized?: boolean | undefined;
|
|
315
328
|
titleField?: string | undefined;
|
|
316
329
|
singleton?: boolean | undefined;
|
|
330
|
+
aliases?: string[] | undefined;
|
|
317
331
|
}[];
|
|
318
332
|
}>>;
|
|
319
333
|
removeCollection: (input: {
|
|
@@ -337,6 +351,7 @@ export declare function createSchemaOperations(runtime: OperationsRuntime): {
|
|
|
337
351
|
localized?: boolean | undefined;
|
|
338
352
|
titleField?: string | undefined;
|
|
339
353
|
singleton?: boolean | undefined;
|
|
354
|
+
aliases?: string[] | undefined;
|
|
340
355
|
}[];
|
|
341
356
|
}>>;
|
|
342
357
|
upsertField: (input: {
|
|
@@ -361,6 +376,7 @@ export declare function createSchemaOperations(runtime: OperationsRuntime): {
|
|
|
361
376
|
localized?: boolean | undefined;
|
|
362
377
|
titleField?: string | undefined;
|
|
363
378
|
singleton?: boolean | undefined;
|
|
379
|
+
aliases?: string[] | undefined;
|
|
364
380
|
}[];
|
|
365
381
|
}>>;
|
|
366
382
|
removeField: (input: {
|
|
@@ -385,6 +401,7 @@ export declare function createSchemaOperations(runtime: OperationsRuntime): {
|
|
|
385
401
|
localized?: boolean | undefined;
|
|
386
402
|
titleField?: string | undefined;
|
|
387
403
|
singleton?: boolean | undefined;
|
|
404
|
+
aliases?: string[] | undefined;
|
|
388
405
|
}[];
|
|
389
406
|
}>>;
|
|
390
407
|
get: (input: {
|
|
@@ -407,6 +424,7 @@ export declare function createSchemaOperations(runtime: OperationsRuntime): {
|
|
|
407
424
|
localized?: boolean | undefined;
|
|
408
425
|
titleField?: string | undefined;
|
|
409
426
|
singleton?: boolean | undefined;
|
|
427
|
+
aliases?: string[] | undefined;
|
|
410
428
|
}[];
|
|
411
429
|
}>>;
|
|
412
430
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/operations/schema.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/operations/schema.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod'\nimport { collectionDefSchema, fieldDefSchema } from '@elytracms/core/cms-core'\nimport type { CollectionDef } from '@elytracms/core/cms-core'\nimport { projectIdSchema } from '@elytracms/core/studio-core'\nimport { OperationFailure, bindOperation, defineCommand, defineQuery, notFoundError } from './core'\nimport type { OperationContext, OperationsRuntime } from './core'\n\n/**\n * CMS schema operations: collections and fields (EC-139). The persistence\n * boundary stores the schema as one record per project (`CmsRepository.saveSchema`),\n * so collection- and field-level commands load, edit, and re-save it — keeping\n * the canonical structural validation (duplicate ids, bad select options) in\n * the repository.\n */\n\nexport const saveSchemaInputSchema = z.object({\n projectId: projectIdSchema,\n collections: z.array(collectionDefSchema),\n})\n\nexport const upsertCollectionInputSchema = z.object({\n projectId: projectIdSchema,\n collection: collectionDefSchema,\n})\n\nexport const removeCollectionInputSchema = z.object({\n projectId: projectIdSchema,\n collectionId: z.string().min(1),\n})\n\nexport const upsertFieldInputSchema = z.object({\n projectId: projectIdSchema,\n collectionId: z.string().min(1),\n field: fieldDefSchema,\n})\n\nexport const removeFieldInputSchema = z.object({\n projectId: projectIdSchema,\n collectionId: z.string().min(1),\n fieldName: z.string().min(1),\n})\n\nexport const getSchemaInputSchema = z.object({\n projectId: projectIdSchema,\n})\n\n/** Load the project's collections, tolerating a not-yet-created schema. */\nasync function loadCollections(\n context: OperationContext,\n projectId: string,\n): Promise<CollectionDef[]> {\n const record = await context.adapter.cms.findSchema(projectId)\n return record ? [...record.collections] : []\n}\n\n/** Load a collection or fail with a structured not-found error. */\nasync function requireCollection(\n context: OperationContext,\n projectId: string,\n collectionId: string,\n): Promise<{ collections: CollectionDef[]; index: number }> {\n const collections = await loadCollections(context, projectId)\n const index = collections.findIndex((c) => c.id === collectionId)\n if (index < 0) {\n throw new OperationFailure(notFoundError('collection', `${projectId}/${collectionId}`))\n }\n return { collections, index }\n}\n\nexport const schemaOperationDefinitions = {\n save: defineCommand({\n name: 'schema.save',\n domain: 'schema',\n description: 'Replace the full CMS collection schema of a project.',\n input: saveSchemaInputSchema,\n execute: (context, input) => context.adapter.cms.saveSchema(input.projectId, input.collections),\n }),\n upsertCollection: defineCommand({\n name: 'schema.upsertCollection',\n domain: 'schema',\n description: 'Add a collection to the project schema, or replace it by id.',\n input: upsertCollectionInputSchema,\n execute: async (context, input) => {\n const collections = await loadCollections(context, input.projectId)\n const index = collections.findIndex((c) => c.id === input.collection.id)\n if (index >= 0) collections[index] = input.collection\n else collections.push(input.collection)\n return context.adapter.cms.saveSchema(input.projectId, collections)\n },\n }),\n removeCollection: defineCommand({\n name: 'schema.removeCollection',\n domain: 'schema',\n description: 'Remove a collection from the project schema.',\n input: removeCollectionInputSchema,\n execute: async (context, input) => {\n const { collections } = await requireCollection(context, input.projectId, input.collectionId)\n return context.adapter.cms.saveSchema(\n input.projectId,\n collections.filter((c) => c.id !== input.collectionId),\n )\n },\n }),\n upsertField: defineCommand({\n name: 'schema.upsertField',\n domain: 'schema',\n description: 'Add a field to a collection, or replace it by name.',\n input: upsertFieldInputSchema,\n execute: async (context, input) => {\n const { collections, index } = await requireCollection(\n context,\n input.projectId,\n input.collectionId,\n )\n const collection = collections[index]!\n const fields = [...collection.fields]\n const fieldIndex = fields.findIndex((f) => f.name === input.field.name)\n if (fieldIndex >= 0) fields[fieldIndex] = input.field\n else fields.push(input.field)\n collections[index] = { ...collection, fields }\n return context.adapter.cms.saveSchema(input.projectId, collections)\n },\n }),\n removeField: defineCommand({\n name: 'schema.removeField',\n domain: 'schema',\n description: 'Remove a field from a collection by name.',\n input: removeFieldInputSchema,\n execute: async (context, input) => {\n const { collections, index } = await requireCollection(\n context,\n input.projectId,\n input.collectionId,\n )\n const collection = collections[index]!\n if (!collection.fields.some((f) => f.name === input.fieldName)) {\n throw new OperationFailure(\n notFoundError('field', `${input.collectionId}/${input.fieldName}`),\n )\n }\n collections[index] = {\n ...collection,\n fields: collection.fields.filter((f) => f.name !== input.fieldName),\n }\n return context.adapter.cms.saveSchema(input.projectId, collections)\n },\n }),\n get: defineQuery({\n name: 'schema.get',\n domain: 'schema',\n description: 'Load the persisted CMS schema of a project.',\n input: getSchemaInputSchema,\n execute: (context, input) => context.adapter.cms.getSchema(input.projectId),\n }),\n} as const\n\nexport function createSchemaOperations(runtime: OperationsRuntime) {\n return {\n save: bindOperation(runtime, schemaOperationDefinitions.save),\n upsertCollection: bindOperation(runtime, schemaOperationDefinitions.upsertCollection),\n removeCollection: bindOperation(runtime, schemaOperationDefinitions.removeCollection),\n upsertField: bindOperation(runtime, schemaOperationDefinitions.upsertField),\n removeField: bindOperation(runtime, schemaOperationDefinitions.removeField),\n get: bindOperation(runtime, schemaOperationDefinitions.get),\n }\n}\n\nexport type SchemaOperations = ReturnType<typeof createSchemaOperations>\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../src/operations/tokens.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../src/operations/tokens.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod'\nimport type { CliTokenRecord, PersistenceAdapter, ProjectRole } from '@elytracms/core/persistence'\nimport { bindOperation, defineCommand, defineQuery } from './core'\nimport type { OperationsRuntime } from './core'\n\n/**\n * Revocable per-project CLI tokens (EC-150; consumed by the EC-147/148 sync\n * CLI, which sends them as `Authorization: Bearer <token>`).\n *\n * Lifecycle:\n * 1. `tokens.issue` (admin-only via the EC-150 role hook) generates the\n * plaintext once, persists only its SHA-256 hash, and returns the plaintext\n * in the result — it is never stored or retrievable again.\n * 2. The CLI presents the plaintext; the builder-side endpoint (EC-156 HTTP\n * wiring) calls {@link verifyCliToken}, which hashes and looks it up.\n * 3. `tokens.revoke` stamps `revokedAt`; revoked tokens never verify again but\n * stay listed for auditability.\n *\n * Token issuance UI is deliberately out of scope for v1 — admins issue tokens\n * via the operations layer (CLI/ops tooling); see the EC-150 task notes.\n */\n\n/** Plaintext token shape: `ect_` + 48 hex chars (24 random bytes). */\nexport const CLI_TOKEN_PREFIX = 'ect_'\n\nconst TOKEN_RANDOM_BYTES = 24\n\n/** Hex SHA-256 via Web Crypto — available in browsers, Node 18+, and Convex. */\nexport async function sha256Hex(value: string): Promise<string> {\n const bytes = new TextEncoder().encode(value)\n const digest = await globalThis.crypto.subtle.digest('SHA-256', bytes)\n return [...new Uint8Array(digest)].map((b) => b.toString(16).padStart(2, '0')).join('')\n}\n\n/** Generate a fresh plaintext token (the only moment it exists outside the caller). */\nexport function generateCliToken(): string {\n const bytes = new Uint8Array(TOKEN_RANDOM_BYTES)\n globalThis.crypto.getRandomValues(bytes)\n return `${CLI_TOKEN_PREFIX}${[...bytes].map((b) => b.toString(16).padStart(2, '0')).join('')}`\n}\n\n/** Safe, listable view of a stored token — never includes the hash. */\nexport interface CliTokenSummary {\n readonly id: string\n readonly label: string\n readonly createdAt: string\n readonly revokedAt?: string\n}\n\nfunction toSummary(record: CliTokenRecord): CliTokenSummary {\n return {\n id: record.id,\n label: record.label,\n createdAt: record.createdAt,\n ...(record.revokedAt ? { revokedAt: record.revokedAt } : {}),\n }\n}\n\nexport const issueTokenInputSchema = z.object({\n label: z.string().min(1).max(80),\n})\n\nexport const revokeTokenInputSchema = z.object({\n tokenId: z.string().min(1),\n})\n\nexport const listTokensInputSchema = z.object({})\n\nexport const tokenOperationDefinitions = {\n issue: defineCommand({\n name: 'tokens.issue',\n domain: 'tokens',\n description:\n 'Issue a revocable CLI sync token for a project. Returns the plaintext exactly once; only its SHA-256 hash is stored.',\n input: issueTokenInputSchema,\n // Never log the (future) plaintext: summarize by label only.\n summarize: (input) => JSON.stringify({ label: input.label }),\n execute: async (context, input) => {\n const token = generateCliToken()\n const record = await context.adapter.cliTokens.createToken({\n label: input.label,\n tokenHash: await sha256Hex(token),\n })\n return { token, summary: toSummary(record) }\n },\n }),\n revoke: defineCommand({\n name: 'tokens.revoke',\n domain: 'tokens',\n description: 'Revoke a CLI token. Revoked tokens never verify again but stay listed.',\n input: revokeTokenInputSchema,\n execute: async (context, input) =>\n toSummary(await context.adapter.cliTokens.revokeToken(input.tokenId)),\n }),\n list: defineQuery({\n name: 'tokens.list',\n domain: 'tokens',\n description:\n 'List the CLI tokens of this deployment (metadata only — hashes are never returned).',\n input: listTokensInputSchema,\n execute: async (context) => (await context.adapter.cliTokens.listTokens()).map(toSummary),\n }),\n} as const\n\nexport function createTokenOperations(runtime: OperationsRuntime) {\n return {\n issue: bindOperation(runtime, tokenOperationDefinitions.issue),\n revoke: bindOperation(runtime, tokenOperationDefinitions.revoke),\n list: bindOperation(runtime, tokenOperationDefinitions.list),\n }\n}\n\nexport type TokenOperations = ReturnType<typeof createTokenOperations>\n\n/** Result of a successful CLI token verification. */\nexport interface VerifiedCliToken {\n /**\n * The capability the token grants. CLI tokens push component manifests and\n * pull project data — `editor`-level content access, never administration.\n */\n readonly role: ProjectRole\n}\n\n/**\n * Server-side verification for the EC-147 Bearer token: hash the presented\n * plaintext, look it up, and reject revoked/unknown tokens. The builder's\n * registry-sync HTTP endpoint (EC-156) calls this before touching any\n * repository.\n */\nexport async function verifyCliToken(\n adapter: PersistenceAdapter,\n token: string,\n): Promise<VerifiedCliToken | null> {\n if (!token || !token.startsWith(CLI_TOKEN_PREFIX)) return null\n const record = await adapter.cliTokens.findByHash(await sha256Hex(token))\n if (!record || record.revokedAt) return null\n return { role: 'editor' }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/persistence/adapter.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/persistence/adapter.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n createSequentialClock,\n type BackendStatus,\n type Clock,\n} from './core'\nimport { InMemoryGraphRepository } from './graph'\nimport type { GraphRepository } from './graph'\nimport { InMemoryCmsRepository } from './cms'\nimport type { CmsRepository } from './cms'\nimport { InMemoryAssetRepository, InMemoryBlobStorage } from './assets'\nimport type { AssetRepository, BlobStorageAdapter } from './assets'\nimport { InMemoryPublishingRepository } from './publishing'\nimport type { PublishingRepository } from './publishing'\nimport { InMemoryReferenceIndexRepository } from './references'\nimport type { ReferenceIndexRepository } from './references'\nimport { InMemoryMembersRepository } from './members'\nimport type { MembersRepository } from './members'\nimport { InMemoryCliTokenRepository } from './cli-tokens'\nimport type { CliTokenRepository } from './cli-tokens'\nimport { validateForPersistence } from './backend-validation'\nimport type { BackendValidationInput, BackendValidationResult } from './backend-validation'\nimport { maintainReferenceIndex } from './self-maintaining-adapter'\n\n/**\n * The aggregate persistence boundary (brief §4.10, §10). Core packages depend on\n * this interface — never on Convex directly. A Convex-backed implementation and\n * the in-memory implementation below both satisfy it, so the Studio, seeds, and\n * tests are provider-agnostic.\n */\nexport interface PersistenceAdapter {\n readonly graphs: GraphRepository\n readonly cms: CmsRepository\n readonly assets: AssetRepository\n readonly publishing: PublishingRepository\n /** Reference index — outbound/inbound reference entries per variant (EC-155, AD-6). */\n readonly references: ReferenceIndexRepository\n /**\n * Whether this adapter keeps the reference index current in its own write path\n * (EC-277, AD-6 \"maintained at the source\"). When `true`, the studio bootstrap\n * does NOT attach the legacy client-side `attachReferenceIndex` subscriber —\n * maintenance lives in the store (in-process via `withMaintainedReferenceIndex`,\n * or server-side in the Convex mutations). Absent/`false` for a bare adapter\n * that still relies on the subscriber.\n */\n readonly maintainsReferenceIndex?: boolean\n /** Per-project membership roles — admin/editor/viewer (EC-150, AD-7). */\n readonly members: MembersRepository\n /** Revocable per-project CLI sync tokens, stored hashed (EC-150). */\n readonly cliTokens: CliTokenRepository\n /** Blob storage boundary for asset bytes. */\n readonly blobs: BlobStorageAdapter\n /** Backend identity + reachability, for degraded-state UI. */\n status(): Promise<BackendStatus>\n /** Server-side validation service (brief §4.11, EC-047). */\n validate(input: BackendValidationInput): BackendValidationResult\n}\n\nexport interface InMemoryPersistenceAdapterOptions {\n /** Shared deterministic clock across all repositories. */\n clock?: Clock\n graphs?: GraphRepository\n cms?: CmsRepository\n assets?: AssetRepository\n publishing?: PublishingRepository\n references?: ReferenceIndexRepository\n members?: MembersRepository\n cliTokens?: CliTokenRepository\n blobs?: BlobStorageAdapter\n /**\n * EC-277: keep the reference index current in the write path (AD-6). When set,\n * each document/graph/publishing write reindexes the affected source in the same\n * call, so the index never relies on a client-side subscriber. Default `false`.\n */\n maintainReferenceIndex?: boolean\n}\n\n/**\n * In-memory implementation of {@link PersistenceAdapter} (brief §10). Backs\n * deterministic fixtures, tests, smoke validation, and browser inspection before\n * (and alongside) Convex.\n */\nexport class InMemoryPersistenceAdapter implements PersistenceAdapter {\n readonly graphs: GraphRepository\n readonly cms: CmsRepository\n readonly assets: AssetRepository\n readonly publishing: PublishingRepository\n readonly references: ReferenceIndexRepository\n readonly members: MembersRepository\n readonly cliTokens: CliTokenRepository\n readonly blobs: BlobStorageAdapter\n readonly maintainsReferenceIndex: boolean = false\n\n constructor(options: InMemoryPersistenceAdapterOptions = {}) {\n const clock = options.clock ?? createSequentialClock()\n this.graphs = options.graphs ?? new InMemoryGraphRepository({ clock })\n this.cms = options.cms ?? new InMemoryCmsRepository({ clock })\n this.assets = options.assets ?? new InMemoryAssetRepository({ clock })\n this.publishing = options.publishing ?? new InMemoryPublishingRepository({ clock })\n this.references = options.references ?? new InMemoryReferenceIndexRepository()\n this.members = options.members ?? new InMemoryMembersRepository({ clock })\n this.cliTokens = options.cliTokens ?? new InMemoryCliTokenRepository({ clock })\n this.blobs = options.blobs ?? new InMemoryBlobStorage()\n // EC-277: opt into write-path index maintenance (AD-6 \"at the source\"). Wrap\n // the write-bearing repos so a raw `cms.upsertDocument` — no operations layer,\n // no subscriber — reindexes in the same call, mirroring the Convex server-side\n // mutations. Off by default so existing callers' behaviour is unchanged.\n if (options.maintainReferenceIndex) {\n const maintained = maintainReferenceIndex(\n { cms: this.cms, graphs: this.graphs, publishing: this.publishing },\n () => this,\n )\n this.cms = maintained.cms\n this.graphs = maintained.graphs\n this.publishing = maintained.publishing\n this.maintainsReferenceIndex = true\n }\n }\n\n async status(): Promise<BackendStatus> {\n return { backend: 'in-memory', available: true }\n }\n\n validate(input: BackendValidationInput): BackendValidationResult {\n return validateForPersistence(input)\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assets.js","sourceRoot":"","sources":["../../src/persistence/assets.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"assets.js","sourceRoot":"","sources":["../../src/persistence/assets.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod'\nimport {\n RecordNotFoundError,\n cloneRecord,\n recordMetaSchema,\n type Clock,\n type IdFactory,\n createSequentialClock,\n createSequentialIdFactory,\n} from './core'\n\n/**\n * Persisted asset metadata (brief §7.4, §8.6, §10). The bytes themselves live in\n * a {@link BlobStorageAdapter}; this record is the queryable metadata that CMS\n * `asset` fields point at by id.\n */\nexport const assetRecordSchema = recordMetaSchema.extend({\n id: z.string().min(1),\n projectId: z.string().min(1),\n filename: z.string().min(1),\n contentType: z.string().min(1),\n byteSize: z.number().int().nonnegative(),\n width: z.number().int().positive().optional(),\n height: z.number().int().positive().optional(),\n alt: z.string().optional(),\n /** Editable display title (EC-152 asset library metadata). */\n title: z.string().optional(),\n /** Opaque key into the blob storage adapter. */\n storageKey: z.string().min(1),\n /**\n * Stable, resolvable serve URL for the stored bytes (EC-151). Delivery-shape\n * asset resolution reads this straight off the metadata record; optional\n * because records created before byte storage existed have no URL yet.\n */\n url: z.string().min(1).optional(),\n /**\n * Image focal point (EC-230): a normalized hotspot `{ x, y }` in 0–1. Threaded\n * to the rendered image's CSS `object-position` so art-directed / cover crops\n * keep the subject in frame. Optional — most assets have none; a migration\n * importer populates it from a source hotspot (e.g. Sanity's `hotspot`).\n */\n focalPoint: z.object({ x: z.number().min(0).max(1), y: z.number().min(0).max(1) }).optional(),\n})\nexport type AssetRecord = z.infer<typeof assetRecordSchema>\n\nexport interface NewAssetInput {\n id?: string\n filename: string\n contentType: string\n byteSize: number\n width?: number\n height?: number\n alt?: string\n /** Editable display title (EC-152 asset library metadata). */\n title?: string\n /** Defaults to a key derived from the asset id. */\n storageKey?: string\n /** Resolvable serve URL for the stored bytes (EC-151). */\n url?: string\n /** Normalized image focal point `{ x, y }` in 0–1 (EC-230). */\n focalPoint?: { x: number; y: number }\n}\n\n/**\n * Storage boundary for asset *bytes* (brief §8.6). Project-owned and swappable\n * (Convex file storage, S3, etc.); the in-memory implementation backs tests and\n * local inspection. Metadata stays in the {@link AssetRepository}.\n */\nexport interface BlobStorageAdapter {\n put(key: string, data: Uint8Array, contentType?: string): Promise<void>\n get(key: string): Promise<Uint8Array | undefined>\n /** A resolvable locator for the blob (e.g. a CDN/file URL). */\n url(key: string): string\n has(key: string): Promise<boolean>\n delete(key: string): Promise<void>\n /**\n * Store bytes under a backend-assigned key and return it (EC-151). Backends\n * like Convex file storage mint their own ids, so callers cannot choose the\n * key up front the way {@link put} assumes. Optional; in-memory implements it\n * deterministically.\n */\n store?(data: Uint8Array, contentType?: string): Promise<string>\n /**\n * Mint a short-lived URL the client can POST bytes to directly (EC-151,\n * Convex `storage.generateUploadUrl()`). Optional — backends without\n * client-direct uploads omit it and callers fall back to {@link store}/{@link put}.\n */\n createUploadUrl?(): Promise<string>\n /**\n * Resolve the serve URL for a stored blob asynchronously (EC-151, Convex\n * `storage.getUrl()`). Returns `undefined` when the blob does not exist.\n * Optional; backends with synchronous stable URLs can rely on {@link url}.\n */\n resolveUrl?(key: string): Promise<string | undefined>\n}\n\nexport class InMemoryBlobStorage implements BlobStorageAdapter {\n private readonly blobs = new Map<string, Uint8Array>()\n /** Deterministic backend-assigned keys (no Date/random). */\n private seq = 0\n\n async put(key: string, data: Uint8Array): Promise<void> {\n this.blobs.set(key, data)\n }\n async get(key: string): Promise<Uint8Array | undefined> {\n return this.blobs.get(key)\n }\n url(key: string): string {\n return `memory://blobs/${key}`\n }\n async has(key: string): Promise<boolean> {\n return this.blobs.has(key)\n }\n async delete(key: string): Promise<void> {\n this.blobs.delete(key)\n }\n async store(data: Uint8Array): Promise<string> {\n this.seq += 1\n const key = `blob-${this.seq}`\n this.blobs.set(key, data)\n return key\n }\n async resolveUrl(key: string): Promise<string | undefined> {\n return this.blobs.has(key) ? this.url(key) : undefined\n }\n}\n\n/** Persists asset metadata records (brief §7.4, §8.6, §10). */\nexport interface AssetRepository {\n upsertAsset(projectId: string, input: NewAssetInput): Promise<AssetRecord>\n getAsset(projectId: string, id: string): Promise<AssetRecord>\n findAsset(projectId: string, id: string): Promise<AssetRecord | undefined>\n listAssets(projectId: string): Promise<AssetRecord[]>\n removeAsset(projectId: string, id: string): Promise<void>\n /** Resolve persisted metadata for the asset ids referenced by CMS fields. */\n resolveMany(projectId: string, ids: readonly string[]): Promise<Map<string, AssetRecord>>\n}\n\nexport interface InMemoryAssetRepositoryOptions {\n clock?: Clock\n idFactory?: IdFactory\n seed?: readonly AssetRecord[]\n}\n\nexport class InMemoryAssetRepository implements AssetRepository {\n /** projectId → (assetId → record). */\n private readonly byProject = new Map<string, Map<string, AssetRecord>>()\n private readonly clock: Clock\n private readonly nextId: IdFactory\n\n constructor(options: InMemoryAssetRepositoryOptions = {}) {\n this.clock = options.clock ?? createSequentialClock()\n this.nextId = options.idFactory ?? createSequentialIdFactory('asset')\n for (const record of options.seed ?? []) {\n const parsed = assetRecordSchema.parse(record)\n this.projectMap(parsed.projectId).set(parsed.id, parsed)\n }\n }\n\n private projectMap(projectId: string): Map<string, AssetRecord> {\n const existing = this.byProject.get(projectId)\n if (existing) return existing\n const created = new Map<string, AssetRecord>()\n this.byProject.set(projectId, created)\n return created\n }\n\n async upsertAsset(projectId: string, input: NewAssetInput): Promise<AssetRecord> {\n const map = this.projectMap(projectId)\n const id = input.id ?? this.nextId()\n const now = this.clock()\n const previous = map.get(id)\n const record = assetRecordSchema.parse({\n id,\n projectId,\n filename: input.filename,\n contentType: input.contentType,\n byteSize: input.byteSize,\n ...(input.width !== undefined ? { width: input.width } : {}),\n ...(input.height !== undefined ? { height: input.height } : {}),\n ...(input.alt !== undefined ? { alt: input.alt } : {}),\n ...(input.title !== undefined ? { title: input.title } : {}),\n ...(input.url !== undefined ? { url: input.url } : {}),\n ...(input.focalPoint !== undefined ? { focalPoint: input.focalPoint } : {}),\n storageKey: input.storageKey ?? `${projectId}/${id}`,\n createdAt: previous?.createdAt ?? now,\n updatedAt: now,\n })\n map.set(id, record)\n return cloneRecord(record)\n }\n\n async getAsset(projectId: string, id: string): Promise<AssetRecord> {\n const record = this.byProject.get(projectId)?.get(id)\n if (!record) throw new RecordNotFoundError('asset', `${projectId}/${id}`)\n return cloneRecord(record)\n }\n\n async findAsset(projectId: string, id: string): Promise<AssetRecord | undefined> {\n const record = this.byProject.get(projectId)?.get(id)\n return record ? cloneRecord(record) : undefined\n }\n\n async listAssets(projectId: string): Promise<AssetRecord[]> {\n return [...(this.byProject.get(projectId)?.values() ?? [])]\n .sort((a, b) => (a.id < b.id ? -1 : a.id > b.id ? 1 : 0))\n .map(cloneRecord)\n }\n\n async removeAsset(projectId: string, id: string): Promise<void> {\n const map = this.byProject.get(projectId)\n if (!map?.has(id)) throw new RecordNotFoundError('asset', `${projectId}/${id}`)\n map.delete(id)\n }\n\n async resolveMany(projectId: string, ids: readonly string[]): Promise<Map<string, AssetRecord>> {\n const map = this.byProject.get(projectId)\n const out = new Map<string, AssetRecord>()\n for (const id of ids) {\n const record = map?.get(id)\n if (record) out.set(id, cloneRecord(record))\n }\n return out\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backend-validation.js","sourceRoot":"","sources":["../../src/persistence/backend-validation.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"backend-validation.js","sourceRoot":"","sources":["../../src/persistence/backend-validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAA;AAEpE,OAAO,EAAE,wBAAwB,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAOjF,OAAO,EAAE,0BAA0B,EAAE,MAAM,QAAQ,CAAA;AAgCnD;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAA6B;IAClE,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK;QAC7B,CAAC,CAAC,oBAAoB,CAAC,KAAK,CAAC,KAAK,EAAE;YAChC,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,cAAc,EAAE,KAAK,CAAC,cAAc;SACrC,CAAC;QACJ,CAAC,CAAC,EAAE,CAAA;IAEN,MAAM,YAAY,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,wBAAwB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IAExG,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM;QAC9B,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,IAAI,EAAE,EAAE;YAChD,aAAa,EAAE,KAAK,CAAC,aAAa;SACnC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE;QACnB,CAAC,CAAC,EAAE,CAAA;IAEN,MAAM,UAAU,GACd,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,MAAM;QACxD,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,MAAM;QACzD,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,MAAM,CAAA;IAE1D,OAAO,EAAE,EAAE,EAAE,UAAU,KAAK,CAAC,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,CAAA;AACrF,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,mBAAmB,CAAC,MAA+B;IACjE,OAAO;QACL,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;QAC/G,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9G,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;KACjH,CAAA;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CAAC,KAA6B;IACrE,MAAM,MAAM,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAA;IAC5C,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,MAAM,WAAW,GAAuB;YACtC,GAAG,MAAM,CAAC,WAAW;iBAClB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC;iBACrC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;YAC5F,GAAG,MAAM,CAAC,YAAY;iBACnB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC;iBACrC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;YAC1F,GAAG,MAAM,CAAC,WAAW;iBAClB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC;iBACrC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;SAC9F,CAAA;QACD,MAAM,IAAI,0BAA0B,CAClC,4CAA4C,MAAM,CAAC,UAAU,aAAa,EAC1E,WAAW,CACZ,CAAA;IACH,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC","sourcesContent":["import { validateProjectGraph } from '@elytracms/core/project-graph'\nimport type { ComponentLookup, ProjectGraph, ValidationIssue } from '@elytracms/core/project-graph'\nimport { createCollectionRegistry, createRouter } from '@elytracms/core/cms-core'\nimport type {\n CmsValidationIssue,\n CollectionDef,\n RedirectRecord,\n RouteRecord,\n} from '@elytracms/core/cms-core'\nimport { PersistenceValidationError } from './core'\nimport type { PersistenceIssue } from './core'\n\n/**\n * Inputs to the backend validation service (brief §4.11, §10). Any subset may be\n * provided; only supplied domains are validated.\n */\nexport interface BackendValidationInput {\n graph?: ProjectGraph\n /** Registry lookup for component/prop/slot checks against the graph. */\n components?: ComponentLookup\n /** Known data-source ids for binding resolution. */\n knownSourceIds?: ReadonlySet<string>\n collections?: readonly CollectionDef[]\n routes?: readonly RouteRecord[]\n redirects?: readonly RedirectRecord[]\n defaultLocale?: string\n}\n\n/** Structured, typed validation results returned to clients (brief §4.11). */\nexport interface BackendValidationResult {\n ok: boolean\n /** Graph + binding + component issues (from `@elytracms/core/project-graph`). */\n graphIssues: ValidationIssue[]\n /** Collection/field schema issues (from `@elytracms/core/cms-core`). */\n schemaIssues: CmsValidationIssue[]\n /** Route conflict + redirect loop issues (from `@elytracms/core/cms-core`). */\n routeIssues: CmsValidationIssue[]\n /** Count of error-severity issues across all domains. */\n errorCount: number\n}\n\n/**\n * Validate project graphs, bindings, schemas, and routes on the server before\n * persisting (brief §4.11, §10, EC-047). Reuses the canonical validators —\n * logic is shared, never duplicated — and returns a structured result.\n */\nexport function validateForPersistence(input: BackendValidationInput): BackendValidationResult {\n const graphIssues = input.graph\n ? validateProjectGraph(input.graph, {\n components: input.components,\n knownSourceIds: input.knownSourceIds,\n })\n : []\n\n const schemaIssues = input.collections ? createCollectionRegistry(input.collections).issues.slice() : []\n\n const routeIssues = input.routes\n ? createRouter(input.routes, input.redirects ?? [], {\n defaultLocale: input.defaultLocale,\n }).issues.slice()\n : []\n\n const errorCount =\n graphIssues.filter((i) => i.severity === 'error').length +\n schemaIssues.filter((i) => i.severity === 'error').length +\n routeIssues.filter((i) => i.severity === 'error').length\n\n return { ok: errorCount === 0, graphIssues, schemaIssues, routeIssues, errorCount }\n}\n\n/** Flatten a {@link BackendValidationResult} into generic persistence issues. */\nexport function toPersistenceIssues(result: BackendValidationResult): PersistenceIssue[] {\n return [\n ...result.graphIssues.map((i) => ({ code: i.code, message: i.message, path: i.path.slice(), domain: 'graph' })),\n ...result.schemaIssues.map((i) => ({ code: i.code, message: i.message, path: i.path.slice(), domain: 'cms' })),\n ...result.routeIssues.map((i) => ({ code: i.code, message: i.message, path: i.path.slice(), domain: 'routes' })),\n ]\n}\n\n/**\n * Validate and throw a {@link PersistenceValidationError} when invalid — the\n * server-side rejection path. Only error-severity issues block.\n */\nexport function assertValidForPersistence(input: BackendValidationInput): BackendValidationResult {\n const result = validateForPersistence(input)\n if (!result.ok) {\n const errorIssues: PersistenceIssue[] = [\n ...result.graphIssues\n .filter((i) => i.severity === 'error')\n .map((i) => ({ code: i.code, message: i.message, path: i.path.slice(), domain: 'graph' })),\n ...result.schemaIssues\n .filter((i) => i.severity === 'error')\n .map((i) => ({ code: i.code, message: i.message, path: i.path.slice(), domain: 'cms' })),\n ...result.routeIssues\n .filter((i) => i.severity === 'error')\n .map((i) => ({ code: i.code, message: i.message, path: i.path.slice(), domain: 'routes' })),\n ]\n throw new PersistenceValidationError(\n `Project state failed backend validation (${result.errorCount} error(s)).`,\n errorIssues,\n )\n }\n return result\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-tokens.js","sourceRoot":"","sources":["../../src/persistence/cli-tokens.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli-tokens.js","sourceRoot":"","sources":["../../src/persistence/cli-tokens.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod'\nimport { cloneRecord, createSequentialClock, createSequentialIdFactory } from './core'\nimport type { Clock, IdFactory } from './core'\nimport { RecordNotFoundError } from './core'\n\n/**\n * Revocable per-project CLI tokens (EC-150). The EC-147 push CLI authenticates\n * with `Authorization: Bearer <token>`; the builder stores only a SHA-256 hash\n * of the token (`tokenHash`) — the plaintext is shown exactly once at issuance\n * and never persisted. Verification (`verifyCliToken` in `@elytracms/core/operations`)\n * hashes the presented token and looks it up here; revoked tokens stay stored\n * (with `revokedAt`) so revocation is auditable and ids stay stable.\n */\n\nexport const cliTokenRecordSchema = z.object({\n /** Stable token id (`tok_*`) — used for revocation, never secret. */\n id: z.string().min(1),\n /** Human label, e.g. \"CI push token\". */\n label: z.string().min(1),\n /** Hex SHA-256 of the plaintext token. */\n tokenHash: z.string().min(1),\n createdAt: z.string().min(1),\n /** Present once revoked; a revoked token never verifies again. */\n revokedAt: z.string().min(1).optional(),\n})\nexport type CliTokenRecord = z.infer<typeof cliTokenRecordSchema>\n\nexport interface NewCliTokenInput {\n label: string\n tokenHash: string\n}\n\n/**\n * Token storage boundary. The in-memory implementation below and the\n * Convex-backed implementation in `apps/builder` both satisfy it.\n */\nexport interface CliTokenRepository {\n /** Persist a freshly issued token (hash only). */\n createToken(input: NewCliTokenInput): Promise<CliTokenRecord>\n /** All tokens of this deployment (revoked included), ordered by id. */\n listTokens(): Promise<CliTokenRecord[]>\n /** Mark a token revoked (idempotent). Throws `RecordNotFoundError` when absent. */\n revokeToken(tokenId: string): Promise<CliTokenRecord>\n /** Look a token up by its hash — the verification path. */\n findByHash(tokenHash: string): Promise<CliTokenRecord | undefined>\n}\n\nexport interface InMemoryCliTokenRepositoryOptions {\n clock?: Clock\n idFactory?: IdFactory\n}\n\nexport class InMemoryCliTokenRepository implements CliTokenRepository {\n private readonly records = new Map<string, CliTokenRecord>()\n private readonly clock: Clock\n private readonly idFactory: IdFactory\n\n constructor(options: InMemoryCliTokenRepositoryOptions = {}) {\n this.clock = options.clock ?? createSequentialClock()\n this.idFactory = options.idFactory ?? createSequentialIdFactory('tok')\n }\n\n async createToken(input: NewCliTokenInput): Promise<CliTokenRecord> {\n const record: CliTokenRecord = {\n id: this.idFactory(),\n label: input.label,\n tokenHash: input.tokenHash,\n createdAt: this.clock(),\n }\n this.records.set(record.id, record)\n return cloneRecord(record)\n }\n\n async listTokens(): Promise<CliTokenRecord[]> {\n return [...this.records.values()]\n .sort((a, b) => (a.id < b.id ? -1 : a.id > b.id ? 1 : 0))\n .map(cloneRecord)\n }\n\n async revokeToken(tokenId: string): Promise<CliTokenRecord> {\n const record = this.records.get(tokenId)\n if (!record) {\n throw new RecordNotFoundError('cli-token', tokenId)\n }\n const revoked: CliTokenRecord = {\n ...record,\n revokedAt: record.revokedAt ?? this.clock(),\n }\n this.records.set(tokenId, revoked)\n return cloneRecord(revoked)\n }\n\n async findByHash(tokenHash: string): Promise<CliTokenRecord | undefined> {\n for (const record of this.records.values()) {\n if (record.tokenHash === tokenHash) return cloneRecord(record)\n }\n return undefined\n }\n}\n"]}
|
|
@@ -23,6 +23,7 @@ export declare const cmsSchemaRecordSchema: z.ZodObject<{
|
|
|
23
23
|
localized: z.ZodOptional<z.ZodBoolean>;
|
|
24
24
|
titleField: z.ZodOptional<z.ZodString>;
|
|
25
25
|
singleton: z.ZodOptional<z.ZodBoolean>;
|
|
26
|
+
aliases: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
26
27
|
}, z.core.$strip>>;
|
|
27
28
|
}, z.core.$strip>;
|
|
28
29
|
export type CmsSchemaRecord = z.infer<typeof cmsSchemaRecordSchema>;
|
|
@@ -40,6 +41,7 @@ export declare const cmsDocumentRecordSchema: z.ZodObject<{
|
|
|
40
41
|
document: z.ZodObject<{
|
|
41
42
|
collection: z.ZodString;
|
|
42
43
|
id: z.ZodString;
|
|
44
|
+
alias: z.ZodOptional<z.ZodString>;
|
|
43
45
|
values: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
44
46
|
localized: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
45
47
|
defaultLocale: z.ZodOptional<z.ZodString>;
|
|
@@ -61,6 +63,7 @@ export declare const documentVersionRecordSchema: z.ZodObject<{
|
|
|
61
63
|
snapshot: z.ZodObject<{
|
|
62
64
|
collection: z.ZodString;
|
|
63
65
|
id: z.ZodString;
|
|
66
|
+
alias: z.ZodOptional<z.ZodString>;
|
|
64
67
|
values: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
65
68
|
localized: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
66
69
|
defaultLocale: z.ZodOptional<z.ZodString>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cms.js","sourceRoot":"","sources":["../../src/persistence/cms.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cms.js","sourceRoot":"","sources":["../../src/persistence/cms.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod'\nimport {\n collectionDefSchema,\n createCollectionRegistry,\n documentKey,\n documentSchema,\n isCmsValid,\n} from '@elytracms/core/cms-core'\nimport type { CmsDocument, CollectionDef, DocumentRef } from '@elytracms/core/cms-core'\nimport {\n PersistenceValidationError,\n RecordNotFoundError,\n cloneRecord,\n recordMetaSchema,\n type Clock,\n createSequentialClock,\n} from './core'\n\n/** The persisted CMS schema for a project: its collection definitions (brief §7.4, §10). */\nexport const cmsSchemaRecordSchema = recordMetaSchema.extend({\n projectId: z.string().min(1),\n collections: z.array(collectionDefSchema),\n})\nexport type CmsSchemaRecord = z.infer<typeof cmsSchemaRecordSchema>\n\n/**\n * A persisted CMS document. The stored `document` is the continuous working\n * **draft** (every edit updates it); `publishedVersion` pins which recorded\n * version is currently live (the Sanity draft/published model, EC-224). Absent\n * `publishedVersion` means the document has never been published / is unpublished.\n * Localized variants ride along on the `CmsDocument` itself.\n */\nexport const cmsDocumentRecordSchema = recordMetaSchema.extend({\n projectId: z.string().min(1),\n document: documentSchema,\n /** The recorded version currently published/live (EC-224); absent = unpublished. */\n publishedVersion: z.number().int().positive().optional(),\n})\nexport type CmsDocumentRecord = z.infer<typeof cmsDocumentRecordSchema>\n\n/**\n * An immutable snapshot of a document at one recorded version (EC-224). Append-only,\n * mirroring {@link GraphRevisionRecord} but document-scoped: one row per version,\n * keyed by (projectId, collection, docId, version). Created on publish (the promoted\n * draft) and by an explicit pre-restore snapshot, never on a plain draft edit.\n */\nexport const documentVersionRecordSchema = z.object({\n projectId: z.string().min(1),\n collection: z.string().min(1),\n docId: z.string().min(1),\n /** 1-based, monotonically increasing per (projectId, collection, docId). */\n version: z.number().int().positive(),\n /** Full document snapshot at this version. */\n snapshot: documentSchema,\n createdAt: z.string().min(1),\n /** Optional label, e.g. \"published\" or an author note. */\n label: z.string().optional(),\n})\nexport type DocumentVersionRecord = z.infer<typeof documentVersionRecordSchema>\n\nexport interface SaveDocumentVersionOptions {\n label?: string\n}\n\n/**\n * Persists CMS collection schemas and documents (brief §7.4, §10). Localized\n * variants and draft/published state ride along on the `CmsDocument` itself.\n */\nexport interface CmsRepository {\n /** Persist (replace) the project's collection schema; validates structural shape. */\n saveSchema(projectId: string, collections: readonly CollectionDef[]): Promise<CmsSchemaRecord>\n getSchema(projectId: string): Promise<CmsSchemaRecord>\n findSchema(projectId: string): Promise<CmsSchemaRecord | undefined>\n /** Insert or update a document (keyed by collection + id). */\n upsertDocument(projectId: string, document: CmsDocument): Promise<CmsDocumentRecord>\n getDocument(projectId: string, ref: DocumentRef): Promise<CmsDocumentRecord>\n findDocument(projectId: string, ref: DocumentRef): Promise<CmsDocumentRecord | undefined>\n /** All documents for a project, optionally filtered to one collection. */\n listDocuments(projectId: string, collection?: string): Promise<CmsDocumentRecord[]>\n deleteDocument(projectId: string, ref: DocumentRef): Promise<void>\n /**\n * Append a snapshot of a document as a new monotonic version (EC-224). Used by\n * publish (the promoted draft) and the pre-restore snapshot so a rollback is\n * itself undoable. The (collection, docId) is derived from the snapshot.\n */\n saveDocumentVersion(\n projectId: string,\n snapshot: CmsDocument,\n options?: SaveDocumentVersionOptions,\n ): Promise<DocumentVersionRecord>\n /** All recorded versions for a document, newest first. Empty when none. */\n listDocumentVersions(projectId: string, ref: DocumentRef): Promise<DocumentVersionRecord[]>\n /**\n * Every recorded version across all documents in a project (EC-224). Backs the\n * delivery feeders, which reconstruct each document's `DocumentHistory` from\n * one bulk fetch rather than a per-document query. Order is deterministic\n * (by document key, then version ascending).\n */\n listAllDocumentVersions(projectId: string): Promise<DocumentVersionRecord[]>\n /** A specific recorded version. Throws `RecordNotFoundError` if absent. */\n getDocumentVersion(\n projectId: string,\n ref: DocumentRef,\n version: number,\n ): Promise<DocumentVersionRecord>\n /**\n * Pin an existing recorded version live (EC-224 publish). Throws\n * `RecordNotFoundError` if the document or the version is unknown.\n */\n publishDocumentVersion(\n projectId: string,\n ref: DocumentRef,\n version: number,\n ): Promise<CmsDocumentRecord>\n /**\n * Clear the live pin (EC-224 unpublish). Throws `PersistenceValidationError`\n * if the document is not currently published.\n */\n unpublishDocument(projectId: string, ref: DocumentRef): Promise<CmsDocumentRecord>\n}\n\nexport interface InMemoryCmsRepositoryOptions {\n clock?: Clock\n seedSchemas?: readonly CmsSchemaRecord[]\n seedDocuments?: readonly CmsDocumentRecord[]\n}\n\nexport class InMemoryCmsRepository implements CmsRepository {\n private readonly schemas = new Map<string, CmsSchemaRecord>()\n /** projectId → (documentKey → record). */\n private readonly documents = new Map<string, Map<string, CmsDocumentRecord>>()\n /** projectId → (documentKey → versions in ascending version order). */\n private readonly versions = new Map<string, Map<string, DocumentVersionRecord[]>>()\n private readonly clock: Clock\n\n constructor(options: InMemoryCmsRepositoryOptions = {}) {\n this.clock = options.clock ?? createSequentialClock()\n for (const schema of options.seedSchemas ?? []) {\n const parsed = cmsSchemaRecordSchema.parse(schema)\n this.schemas.set(parsed.projectId, parsed)\n }\n for (const doc of options.seedDocuments ?? []) {\n const parsed = cmsDocumentRecordSchema.parse(doc)\n this.docMap(parsed.projectId).set(documentKey(parsed.document), parsed)\n }\n }\n\n private docMap(projectId: string): Map<string, CmsDocumentRecord> {\n const existing = this.documents.get(projectId)\n if (existing) return existing\n const created = new Map<string, CmsDocumentRecord>()\n this.documents.set(projectId, created)\n return created\n }\n\n private versionMap(projectId: string): Map<string, DocumentVersionRecord[]> {\n const existing = this.versions.get(projectId)\n if (existing) return existing\n const created = new Map<string, DocumentVersionRecord[]>()\n this.versions.set(projectId, created)\n return created\n }\n\n async saveSchema(\n projectId: string,\n collections: readonly CollectionDef[],\n ): Promise<CmsSchemaRecord> {\n // Reuse the canonical structural validation (duplicate ids, bad select options).\n const registry = createCollectionRegistry(collections)\n if (!isCmsValid(registry.issues)) {\n throw new PersistenceValidationError(\n 'CMS schema is invalid and cannot be persisted.',\n registry.issues\n .filter((i) => i.severity === 'error')\n .map((i) => ({ code: i.code, message: i.message, path: i.path, domain: 'cms' })),\n )\n }\n const now = this.clock()\n const previous = this.schemas.get(projectId)\n const record: CmsSchemaRecord = {\n projectId,\n collections: registry.list(),\n createdAt: previous?.createdAt ?? now,\n updatedAt: now,\n }\n this.schemas.set(projectId, record)\n return cloneRecord(record)\n }\n\n async getSchema(projectId: string): Promise<CmsSchemaRecord> {\n const record = this.schemas.get(projectId)\n if (!record) throw new RecordNotFoundError('cms-schema', projectId)\n return cloneRecord(record)\n }\n\n async findSchema(projectId: string): Promise<CmsSchemaRecord | undefined> {\n const record = this.schemas.get(projectId)\n return record ? cloneRecord(record) : undefined\n }\n\n async upsertDocument(projectId: string, document: CmsDocument): Promise<CmsDocumentRecord> {\n // The persistence layer is a pure document store (EC-183, AD-11): CMS\n // collection schemas are config-owned and collection-membership validation\n // lives in `@elytracms/core/cms-core` `validateDocument` (run by the studio\n // pre-dispatch), not the write path. We still parse the canonical document\n // shape so malformed blobs never reach storage.\n const parsedDoc = documentSchema.parse(document)\n const map = this.docMap(projectId)\n const key = documentKey(parsedDoc)\n const now = this.clock()\n const previous = map.get(key)\n const record: CmsDocumentRecord = {\n projectId,\n document: parsedDoc,\n // A draft edit must NOT clear the live pin (EC-224, the Sanity model:\n // editing the working draft never unpublishes). Convex patches the row\n // (absent keys untouched); the in-memory store must preserve it the same\n // way — only publish/unpublish move the pointer.\n ...(previous?.publishedVersion !== undefined\n ? { publishedVersion: previous.publishedVersion }\n : {}),\n createdAt: previous?.createdAt ?? now,\n updatedAt: now,\n }\n map.set(key, record)\n return cloneRecord(record)\n }\n\n async getDocument(projectId: string, ref: DocumentRef): Promise<CmsDocumentRecord> {\n const record = this.documents.get(projectId)?.get(documentKey(ref))\n if (!record) throw new RecordNotFoundError('cms-document', `${projectId}/${documentKey(ref)}`)\n return cloneRecord(record)\n }\n\n async findDocument(projectId: string, ref: DocumentRef): Promise<CmsDocumentRecord | undefined> {\n const record = this.documents.get(projectId)?.get(documentKey(ref))\n return record ? cloneRecord(record) : undefined\n }\n\n async listDocuments(projectId: string, collection?: string): Promise<CmsDocumentRecord[]> {\n const all = [...(this.documents.get(projectId)?.values() ?? [])]\n const filtered = collection ? all.filter((r) => r.document.collection === collection) : all\n return filtered\n .sort((a, b) => (documentKey(a.document) < documentKey(b.document) ? -1 : 1))\n .map(cloneRecord)\n }\n\n async deleteDocument(projectId: string, ref: DocumentRef): Promise<void> {\n const map = this.documents.get(projectId)\n const key = documentKey(ref)\n if (!map?.has(key)) throw new RecordNotFoundError('cms-document', `${projectId}/${key}`)\n map.delete(key)\n // Cascade the version history (EC-224) — no orphaned snapshots survive a delete.\n this.versions.get(projectId)?.delete(key)\n }\n\n async saveDocumentVersion(\n projectId: string,\n snapshot: CmsDocument,\n options: SaveDocumentVersionOptions = {},\n ): Promise<DocumentVersionRecord> {\n const parsed = documentSchema.parse(snapshot)\n const key = documentKey(parsed)\n const list = this.versionMap(projectId).get(key) ?? []\n const version = (list.at(-1)?.version ?? 0) + 1\n const record: DocumentVersionRecord = {\n projectId,\n collection: parsed.collection,\n docId: parsed.id,\n version,\n snapshot: parsed,\n createdAt: this.clock(),\n ...(options.label ? { label: options.label } : {}),\n }\n list.push(record)\n this.versionMap(projectId).set(key, list)\n return cloneRecord(record)\n }\n\n async listDocumentVersions(\n projectId: string,\n ref: DocumentRef,\n ): Promise<DocumentVersionRecord[]> {\n const list = this.versions.get(projectId)?.get(documentKey(ref)) ?? []\n return [...list].reverse().map(cloneRecord)\n }\n\n async listAllDocumentVersions(projectId: string): Promise<DocumentVersionRecord[]> {\n const all: DocumentVersionRecord[] = []\n for (const list of this.versions.get(projectId)?.values() ?? []) all.push(...list)\n return all\n .sort((a, b) => {\n const ka = documentKey({ collection: a.collection, id: a.docId })\n const kb = documentKey({ collection: b.collection, id: b.docId })\n if (ka !== kb) return ka < kb ? -1 : 1\n return a.version - b.version\n })\n .map(cloneRecord)\n }\n\n async getDocumentVersion(\n projectId: string,\n ref: DocumentRef,\n version: number,\n ): Promise<DocumentVersionRecord> {\n const key = documentKey(ref)\n const found = this.versions\n .get(projectId)\n ?.get(key)\n ?.find((v) => v.version === version)\n if (!found) {\n throw new RecordNotFoundError('cms-document-version', `${projectId}/${key}#${version}`)\n }\n return cloneRecord(found)\n }\n\n async publishDocumentVersion(\n projectId: string,\n ref: DocumentRef,\n version: number,\n ): Promise<CmsDocumentRecord> {\n const existing = await this.getDocument(projectId, ref)\n // The pinned version must exist (throws RecordNotFoundError otherwise).\n await this.getDocumentVersion(projectId, ref, version)\n const updated: CmsDocumentRecord = {\n ...existing,\n publishedVersion: version,\n updatedAt: this.clock(),\n }\n this.docMap(projectId).set(documentKey(ref), updated)\n return cloneRecord(updated)\n }\n\n async unpublishDocument(projectId: string, ref: DocumentRef): Promise<CmsDocumentRecord> {\n const existing = await this.getDocument(projectId, ref)\n if (existing.publishedVersion === undefined) {\n throw new PersistenceValidationError('Document is not currently published.', [\n {\n code: 'invalid-transition',\n message: 'Cannot unpublish: the document has no published version.',\n domain: 'cms',\n },\n ])\n }\n const { publishedVersion: _cleared, ...rest } = existing\n const updated: CmsDocumentRecord = { ...rest, updatedAt: this.clock() }\n this.docMap(projectId).set(documentKey(ref), updated)\n return cloneRecord(updated)\n }\n}\n"]}
|