@elytracms/core 0.0.8 → 0.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (193) hide show
  1. package/dist/clipboard/build.js.map +1 -1
  2. package/dist/clipboard/clipboard.js.map +1 -1
  3. package/dist/clipboard/fragment.js.map +1 -1
  4. package/dist/clipboard/html.js.map +1 -1
  5. package/dist/clipboard/index.js.map +1 -1
  6. package/dist/clipboard/references.js.map +1 -1
  7. package/dist/clipboard/serialize.js.map +1 -1
  8. package/dist/cms-core/collection-shape.d.ts +43 -0
  9. package/dist/cms-core/collection-shape.js +129 -0
  10. package/dist/cms-core/collection-shape.js.map +1 -0
  11. package/dist/cms-core/collections.d.ts +5 -6
  12. package/dist/cms-core/collections.js +26 -13
  13. package/dist/cms-core/collections.js.map +1 -1
  14. package/dist/cms-core/documents.d.ts +1 -0
  15. package/dist/cms-core/documents.js +10 -0
  16. package/dist/cms-core/documents.js.map +1 -1
  17. package/dist/cms-core/envelopes.js.map +1 -1
  18. package/dist/cms-core/fields.js.map +1 -1
  19. package/dist/cms-core/fixtures.js.map +1 -1
  20. package/dist/cms-core/hierarchy.js.map +1 -1
  21. package/dist/cms-core/index.d.ts +1 -0
  22. package/dist/cms-core/index.js +1 -0
  23. package/dist/cms-core/index.js.map +1 -1
  24. package/dist/cms-core/infer.js.map +1 -1
  25. package/dist/cms-core/issues.d.ts +8 -0
  26. package/dist/cms-core/issues.js +10 -0
  27. package/dist/cms-core/issues.js.map +1 -1
  28. package/dist/cms-core/json-schema.js.map +1 -1
  29. package/dist/cms-core/localization.js.map +1 -1
  30. package/dist/cms-core/nesting-depth.js.map +1 -1
  31. package/dist/cms-core/routes.js.map +1 -1
  32. package/dist/cms-core/self-type.js.map +1 -1
  33. package/dist/cms-core/url-for-document.js.map +1 -1
  34. package/dist/cms-core/validate-document.js.map +1 -1
  35. package/dist/cms-core/versions.d.ts +1 -0
  36. package/dist/cms-core/versions.js.map +1 -1
  37. package/dist/collaboration/approval.js.map +1 -1
  38. package/dist/collaboration/collaboration.js.map +1 -1
  39. package/dist/collaboration/comments.js.map +1 -1
  40. package/dist/collaboration/core.js.map +1 -1
  41. package/dist/collaboration/index.js.map +1 -1
  42. package/dist/collaboration/presence.js.map +1 -1
  43. package/dist/collaboration/publishing.js.map +1 -1
  44. package/dist/collaboration/versions.js.map +1 -1
  45. package/dist/component-registry/index.js.map +1 -1
  46. package/dist/component-registry/issues.js.map +1 -1
  47. package/dist/component-registry/manifest.js.map +1 -1
  48. package/dist/component-registry/registry.js.map +1 -1
  49. package/dist/content/__fixtures__/filterable-collections.js.map +1 -1
  50. package/dist/content/__fixtures__/sample-accessor-types.js.map +1 -1
  51. package/dist/content/__fixtures__/sample-delivery-types.js.map +1 -1
  52. package/dist/content/assets.js.map +1 -1
  53. package/dist/content/binding-sources.js.map +1 -1
  54. package/dist/content/client.js.map +1 -1
  55. package/dist/content/codegen.js.map +1 -1
  56. package/dist/content/context.js.map +1 -1
  57. package/dist/content/cursor.js.map +1 -1
  58. package/dist/content/index.js.map +1 -1
  59. package/dist/content/locale.js.map +1 -1
  60. package/dist/content/perspective.js.map +1 -1
  61. package/dist/content/populate.js.map +1 -1
  62. package/dist/content/query.js.map +1 -1
  63. package/dist/content/raw.js.map +1 -1
  64. package/dist/content/resolve.js.map +1 -1
  65. package/dist/content/serialize.js.map +1 -1
  66. package/dist/content/tags.js.map +1 -1
  67. package/dist/data-binding/fixtures.js.map +1 -1
  68. package/dist/data-binding/index.js.map +1 -1
  69. package/dist/data-binding/issues.js.map +1 -1
  70. package/dist/data-binding/resolve.js.map +1 -1
  71. package/dist/data-binding/sample.js.map +1 -1
  72. package/dist/data-binding/sources.js.map +1 -1
  73. package/dist/data-binding/tokens.js.map +1 -1
  74. package/dist/design-tokens/css.js.map +1 -1
  75. package/dist/design-tokens/index.js.map +1 -1
  76. package/dist/design-tokens/style-guide.js.map +1 -1
  77. package/dist/design-tokens/tokens.js.map +1 -1
  78. package/dist/export-sync/builder-source.d.ts +1 -0
  79. package/dist/export-sync/builder-source.js.map +1 -1
  80. package/dist/export-sync/check.js.map +1 -1
  81. package/dist/export-sync/cli.js.map +1 -1
  82. package/dist/export-sync/core.js.map +1 -1
  83. package/dist/export-sync/eject.js.map +1 -1
  84. package/dist/export-sync/fixtures.js.map +1 -1
  85. package/dist/export-sync/generate.js.map +1 -1
  86. package/dist/export-sync/index.js.map +1 -1
  87. package/dist/export-sync/init.js.map +1 -1
  88. package/dist/export-sync/manifest-host.js.map +1 -1
  89. package/dist/export-sync/node.js.map +1 -1
  90. package/dist/export-sync/push.js.map +1 -1
  91. package/dist/export-sync/registry-sync-client.js.map +1 -1
  92. package/dist/export-sync/sync.js.map +1 -1
  93. package/dist/export-sync/typegen.js.map +1 -1
  94. package/dist/export-sync/validate.js.map +1 -1
  95. package/dist/export-sync/watch.js.map +1 -1
  96. package/dist/operations/assets.js.map +1 -1
  97. package/dist/operations/authorization.js.map +1 -1
  98. package/dist/operations/changesets.js.map +1 -1
  99. package/dist/operations/client.js.map +1 -1
  100. package/dist/operations/core.js.map +1 -1
  101. package/dist/operations/documents.d.ts +21 -0
  102. package/dist/operations/documents.js.map +1 -1
  103. package/dist/operations/graph.js.map +1 -1
  104. package/dist/operations/index.js.map +1 -1
  105. package/dist/operations/members.js.map +1 -1
  106. package/dist/operations/publishing.js.map +1 -1
  107. package/dist/operations/references.js.map +1 -1
  108. package/dist/operations/schema.d.ts +18 -0
  109. package/dist/operations/schema.js.map +1 -1
  110. package/dist/operations/tokens.js.map +1 -1
  111. package/dist/persistence/adapter.js.map +1 -1
  112. package/dist/persistence/assets.js.map +1 -1
  113. package/dist/persistence/backend-validation.js.map +1 -1
  114. package/dist/persistence/cli-tokens.js.map +1 -1
  115. package/dist/persistence/cms.d.ts +3 -0
  116. package/dist/persistence/cms.js.map +1 -1
  117. package/dist/persistence/contract-scenarios.js.map +1 -1
  118. package/dist/persistence/core.js.map +1 -1
  119. package/dist/persistence/graph.js.map +1 -1
  120. package/dist/persistence/index.js.map +1 -1
  121. package/dist/persistence/members.js.map +1 -1
  122. package/dist/persistence/publishing.js.map +1 -1
  123. package/dist/persistence/reference-extraction.js.map +1 -1
  124. package/dist/persistence/reference-indexing.js.map +1 -1
  125. package/dist/persistence/references.js.map +1 -1
  126. package/dist/persistence/seed.js.map +1 -1
  127. package/dist/persistence/self-maintaining-adapter.js.map +1 -1
  128. package/dist/plugins/asset-storage.js.map +1 -1
  129. package/dist/plugins/component-package.js.map +1 -1
  130. package/dist/plugins/data-sources.js.map +1 -1
  131. package/dist/plugins/examples.js.map +1 -1
  132. package/dist/plugins/export-targets.js.map +1 -1
  133. package/dist/plugins/field-types.js.map +1 -1
  134. package/dist/plugins/hooks.js.map +1 -1
  135. package/dist/plugins/index.js.map +1 -1
  136. package/dist/plugins/marketplace.js.map +1 -1
  137. package/dist/plugins/plugin.js.map +1 -1
  138. package/dist/plugins/templates.js.map +1 -1
  139. package/dist/project-graph/binding.js.map +1 -1
  140. package/dist/project-graph/container.js.map +1 -1
  141. package/dist/project-graph/edit.js.map +1 -1
  142. package/dist/project-graph/fixtures.js.map +1 -1
  143. package/dist/project-graph/ids.js.map +1 -1
  144. package/dist/project-graph/index.js.map +1 -1
  145. package/dist/project-graph/issues.js.map +1 -1
  146. package/dist/project-graph/json.js.map +1 -1
  147. package/dist/project-graph/node.js.map +1 -1
  148. package/dist/project-graph/normalize.js.map +1 -1
  149. package/dist/project-graph/serialize.js.map +1 -1
  150. package/dist/project-graph/structure.js.map +1 -1
  151. package/dist/project-graph/validate.js.map +1 -1
  152. package/dist/rich-text/adapter.js.map +1 -1
  153. package/dist/rich-text/dom-editor.js.map +1 -1
  154. package/dist/rich-text/embed.js.map +1 -1
  155. package/dist/rich-text/fixtures.js.map +1 -1
  156. package/dist/rich-text/html.js.map +1 -1
  157. package/dist/rich-text/index.js.map +1 -1
  158. package/dist/rich-text/markdown.js.map +1 -1
  159. package/dist/rich-text/portable-text.js.map +1 -1
  160. package/dist/rich-text/registry.js.map +1 -1
  161. package/dist/rich-text/render.js.map +1 -1
  162. package/dist/rich-text/schema.js.map +1 -1
  163. package/dist/rich-text/test-support.js.map +1 -1
  164. package/dist/runtime-renderer/client.js.map +1 -1
  165. package/dist/runtime-renderer/condition.js.map +1 -1
  166. package/dist/runtime-renderer/content-client.js.map +1 -1
  167. package/dist/runtime-renderer/context.js.map +1 -1
  168. package/dist/runtime-renderer/fallback.js.map +1 -1
  169. package/dist/runtime-renderer/index.js.map +1 -1
  170. package/dist/runtime-renderer/primitives.js.map +1 -1
  171. package/dist/runtime-renderer/render.js.map +1 -1
  172. package/dist/runtime-renderer/rich-text.js.map +1 -1
  173. package/dist/starter-kits/index.js.map +1 -1
  174. package/dist/starter-kits/instantiate.js.map +1 -1
  175. package/dist/starter-kits/kit.js.map +1 -1
  176. package/dist/starter-kits/kits.js.map +1 -1
  177. package/dist/starter-kits/manifests.js.map +1 -1
  178. package/dist/starter-kits/upgrade.js.map +1 -1
  179. package/dist/starter-kits/validate.js.map +1 -1
  180. package/dist/studio-core/context.js.map +1 -1
  181. package/dist/studio-core/errors.js.map +1 -1
  182. package/dist/studio-core/fixtures.js.map +1 -1
  183. package/dist/studio-core/ids.js.map +1 -1
  184. package/dist/studio-core/index.js.map +1 -1
  185. package/dist/studio-core/issues.js.map +1 -1
  186. package/dist/studio-core/metadata.js.map +1 -1
  187. package/dist/studio-core/repository.js.map +1 -1
  188. package/dist/studio-core/sections.d.ts +1 -1
  189. package/dist/studio-core/sections.js.map +1 -1
  190. package/dist/studio-core/validate.js.map +1 -1
  191. package/dist/studio-core/workspace-config.d.ts +4 -0
  192. package/dist/studio-core/workspace-config.js.map +1 -1
  193. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/component-registry/manifest.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/component-registry/manifest.ts"],"names":[],"mappings":"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","sourcesContent":["import type { FieldDef } from '@elytracms/core/cms-core'\nimport { fieldValueValidator } from '@elytracms/core/cms-core'\nimport type { JsonValue, ManifestView } from '@elytracms/core/project-graph'\n\n/** Distributive `Omit` that preserves a discriminated union (one variant per member). */\ntype DistributiveOmit<T, K extends PropertyKey> = T extends unknown ? Omit<T, K> : never\n\n/**\n * A component prop is a **field-def** (EC-190 \"props as fields\", AD-12): the SAME\n * vocabulary the CMS uses for document fields (`@elytracms/core/cms-core` `FieldDef`) —\n * text/number/boolean/select/date/relation/asset/richText/blocks — minus the\n * `name` (the record key on `ComponentManifest.props` IS the prop name). One\n * schema vocabulary, one inspector/form engine, recursively: a prop of type\n * `blocks` carries a nested composition. Authoring metadata (label, default,\n * inline-editing, control hint) lives on the field-def's `form` and `default`.\n * Use `context: 'prop'` (or `'both'`); document-only attributes (`filterable`,\n * `unique`) are flagged by cms-core's `assertPropFieldDef`, never silently honoured.\n */\nexport type PropField = DistributiveOmit<FieldDef, 'name'>\n\n/** A named child insertion point. */\nexport interface SlotSpec {\n name: string\n label?: string\n required?: boolean\n /** Restrict which component ids may be inserted (omit to allow any). */\n allow?: string[]\n}\n\n/** A deterministic preview fixture for a component state. */\nexport interface ComponentFixture {\n name: string\n props?: Record<string, JsonValue>\n /** Named slots rendered with literal child component ids for preview. */\n slotChildren?: Record<string, string[]>\n}\n\n/** Declares that a component iterates a list prop over an item slot (e.g. Repeater). */\nexport interface IterateSpec {\n itemsProp: string\n itemSlot: string\n}\n\n/**\n * Declares that a component renders a composition FIELD VALUE (EC-188, AD-12): the\n * `valueProp` carries a stored composition (one `ComponentNode` root or an ordered\n * list — a `blocks` field's value), which the renderer renders as the component's\n * children via `renderComposition`, with the live `RenderContext`. The mirror of\n * `IterateSpec`: a manifest opts a host component into rendering a composition tree\n * wherever it is placed (e.g. a post template's body), so the same renderer/export\n * pipeline that renders pages renders block fields too.\n */\nexport interface CompositionSpec {\n valueProp: string\n}\n\n/**\n * Declares that a component renders a LISTING — a live, query-resolved set of\n * documents (EC-255, un-parks AD-9 \"this section repeats over a collection,\n * filtered, sorted\"). The `prop` receives the matching documents (delivery-shaped),\n * injected by the host exactly like a composition's children — NOT a static\n * relation pick the editor maintains by hand. The filter binds the listed\n * collection's `field` to the ref a SIBLING authored prop (`fromProp`) carries:\n * a ProductGrid picks one `category`, and the listing lists `product` where its\n * `categories` (a `many` relation) contains that pick. `sort`/`limit` are the\n * closed AD-3 query envelope. The mirror of {@link CompositionSpec} for a\n * query-resolved prop — so the same renderer/export pipeline that renders pages\n * renders dynamic grids, and adding/removing a member re-renders them.\n */\nexport interface ListingSpec {\n /** Prop the resolved documents are injected as (read by the implementation). */\n prop: string\n /** Collection to list (e.g. `product`). */\n collection: string\n /**\n * The membership filter: the listed collection's `field` must contain the ref\n * the sibling authored prop `fromProp` holds (a relation pick, reduced to its\n * target id). Closed to a single equality/contains term — the AD-3 vocabulary.\n */\n filter: { field: string; fromProp: string }\n /** Optional single-field sort (ties break by id, like every list — EC-143). */\n sort?: { field: string; direction?: 'asc' | 'desc' }\n /** Optional page-size cap. */\n limit?: number\n}\n\n/** The typed manifest each editable component declares (brief §7.2). */\nexport interface ComponentManifest {\n /** Namespaced id, e.g. `base.primitives.Stack` or `project.MarketingHero`. */\n id: string\n /** Source namespace: `base.primitives` for platform primitives, `project` for project code. */\n namespace: string\n title?: string\n description?: string\n category?: string\n /** Editable props as field-defs (EC-190), keyed by prop name. */\n props: Record<string, PropField>\n slots: SlotSpec[]\n /** Design-token usage hints (e.g. `['color.surface', 'space.gap']`). */\n designTokens?: string[]\n fixtures?: ComponentFixture[]\n iterate?: IterateSpec\n /** Marks the component as a composition host: `valueProp` holds a block-field tree (EC-188). */\n composition?: CompositionSpec\n /** Marks the component as a listing host: `prop` receives a live query's documents (EC-255). */\n listing?: ListingSpec\n /**\n * Canvas-eligibility (EC-191). Editors place components on a **client-rendered**\n * canvas, so a placeable component must be client-renderable (isomorphic React).\n * Defaults to eligible; set `clientRenderable: false` for a server-only / RSC\n * component — it stays usable in dev frames (`page.tsx` / `layout.tsx`) but the\n * blocks panel won't offer it and a composition that contains it is invalid.\n */\n clientRenderable?: boolean\n}\n\n/** Identity helper that infers nothing but documents intent at call sites. */\nexport function defineComponent(manifest: ComponentManifest): ComponentManifest {\n return manifest\n}\n\n/** Names of props flagged `form.inlineEditable`, in manifest declaration order. */\nexport function inlineEditablePropNames(manifest: ComponentManifest): string[] {\n return Object.entries(manifest.props)\n .filter(([, field]) => field.form?.inlineEditable === true)\n .map(([name]) => name)\n}\n\n/**\n * Return a copy of `manifest` with the named props flagged inline-editable\n * (EC-158, now `form.inlineEditable`). Names that don't exist on the manifest are\n * ignored. Used by hosts that assemble a registry from manifests they don't author\n * (e.g. the studio opting in platform-primitive content props).\n */\nexport function withInlineEditableProps(\n manifest: ComponentManifest,\n propNames: readonly string[],\n): ComponentManifest {\n const props: Record<string, PropField> = {}\n for (const [name, field] of Object.entries(manifest.props)) {\n props[name] = propNames.includes(name)\n ? ({ ...field, form: { ...field.form, inlineEditable: true } } as PropField)\n : field\n }\n return { ...manifest, props }\n}\n\n/**\n * Present a manifest's props as a `FieldDef[]` (EC-190) — the prop name injected\n * from the record key — so the shared inspector/form engine renders component\n * props with the exact control set, validation, and layout it renders document\n * fields. Declaration order is preserved.\n */\nexport function manifestPropFields(manifest: ComponentManifest): FieldDef[] {\n return Object.entries(manifest.props).map(([name, field]) => ({ ...field, name }) as FieldDef)\n}\n\n/** One manifest prop as a full `FieldDef` (name injected from the key), or undefined. */\nexport function manifestPropField(manifest: ComponentManifest, name: string): FieldDef | undefined {\n const field = manifest.props[name]\n return field ? ({ ...field, name }) as FieldDef : undefined\n}\n\n/**\n * The effective named child-region slots of a component (EC-190 \"slots are blocks\n * props\"). A `blocks`-type prop IS a slot: a named child region with an `allow`\n * leash, edited as a composition. So the manifest's declared `slots` are merged\n * with every `blocks` prop (carrying its `allow`/`required`/`label`) — EXCEPT a\n * `composition.valueProp`, which is a blocks VALUE passed to the host as a prop\n * (a delivery field value, stored in `node.props`), not a canvas child region\n * (stored in `node.slots`). Per DD3 the child trees stay in `node.slots`; the\n * field-def vocabulary just expresses the declaration + leash. For a manifest with\n * no `blocks` props this returns `manifest.slots` unchanged.\n */\nexport function manifestSlots(manifest: ComponentManifest): SlotSpec[] {\n const compositionValueProp = manifest.composition?.valueProp\n const fromBlocksProps: SlotSpec[] = []\n for (const [name, field] of Object.entries(manifest.props)) {\n if (field.type !== 'blocks') continue\n if (name === compositionValueProp) continue\n fromBlocksProps.push({\n name,\n ...(field.form?.label ? { label: field.form.label } : {}),\n ...(field.validation?.required ? { required: true } : {}),\n ...(field.allow ? { allow: field.allow } : {}),\n })\n }\n return fromBlocksProps.length === 0 ? manifest.slots : [...manifest.slots, ...fromBlocksProps]\n}\n\n/**\n * The value-validator for one manifest prop (EC-190): the SAME field-def value\n * check the CMS applies to a document field. The renderer uses it for the\n * invalid-static-prop → default fallback (EC-015) without importing cms-core.\n * Returns undefined when the prop is not declared (an unknown prop passes through).\n */\nexport function propValueValidator(\n manifest: ComponentManifest,\n name: string,\n): ((value: unknown) => boolean) | undefined {\n const field = manifestPropField(manifest, name)\n return field ? fieldValueValidator(field) : undefined\n}\n\n/** Namespace of a component id (the segment before the first dot-group). */\nexport function namespaceOf(id: string): string {\n if (id.startsWith('base.primitives.')) return 'base.primitives'\n const first = id.split('.')[0]\n return first ?? ''\n}\n\nexport function isPrimitive(id: string): boolean {\n return id.startsWith('base.primitives.')\n}\n\n/**\n * Canvas-eligibility (EC-191): true when an editor may place this component on the\n * client-rendered canvas. Eligible by default; `clientRenderable: false` (a\n * server-only / RSC component) opts out — the blocks panel hides it and a\n * composition that contains it fails `validateCompositionValue`.\n */\nexport function isCanvasEligible(manifest: ComponentManifest): boolean {\n return manifest.clientRenderable !== false\n}\n\n/** Bridge a manifest to the structural `ManifestView` the graph validator consumes. */\nexport function toManifestView(manifest: ComponentManifest): ManifestView {\n const props: NonNullable<ManifestView['props']> = {}\n for (const [name, field] of Object.entries(manifest.props)) {\n props[name] = {\n // EC-190: props are static; the binding path retires in slice 5. Until then\n // every prop reports bindable so the graph validator's binding branch stays\n // inert (no false `binding-not-allowed`). `validate` is the field-def value\n // validator — the SAME check the CMS uses for a document field value.\n bindable: true,\n validate: fieldValueValidator({ ...field, name } as FieldDef),\n }\n }\n return {\n id: manifest.id,\n props,\n // EC-191: carry canvas-eligibility so `validateCompositionValue` can reject a\n // server-only component placed in a composition.\n ...(manifest.clientRenderable === false ? { clientRenderable: false } : {}),\n // EC-186: carry the slot's placement vocabulary (`allow`) through to the\n // graph validator so it can enforce `forbidden-component` — previously\n // dropped here, leaving slot `allow` declared-but-unenforced. EC-190:\n // `manifestSlots` folds in `blocks`-type props as slots, so a blocks prop's\n // `allow` leash is enforced through the same path.\n slots: manifestSlots(manifest).map((s) => ({\n name: s.name,\n required: s.required,\n ...(s.allow ? { allow: s.allow } : {}),\n })),\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/component-registry/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/component-registry/registry.ts"],"names":[],"mappings":"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","sourcesContent":["import { isValidComponentId } from '@elytracms/core/project-graph'\nimport type { ComponentLookup, ManifestView } from '@elytracms/core/project-graph'\nimport type { ComponentIssue } from './issues'\nimport type { ComponentManifest } from './manifest'\nimport { isPrimitive, namespaceOf, toManifestView } from './manifest'\n\nexport interface ListFilter {\n namespace?: string\n category?: string\n /** Case-insensitive substring match over id / title / category. */\n query?: string\n}\n\n/**\n * The component registry serves the Builder, renderer, AI tools, export pipeline, and\n * CLI. It distinguishes platform primitives from project components, supports lookup,\n * filtering, required lookups, and reports duplicate ids as structured issues.\n */\nexport class ComponentRegistry {\n private readonly byId = new Map<string, ComponentManifest>()\n private readonly viewCache = new Map<string, ManifestView>()\n readonly issues: ComponentIssue[] = []\n\n constructor(manifests: Iterable<ComponentManifest> = []) {\n for (const manifest of manifests) this.register(manifest)\n }\n\n register(manifest: ComponentManifest): void {\n if (!isValidComponentId(manifest.id)) {\n this.issues.push({\n code: 'invalid-id',\n componentId: manifest.id,\n message: `Component id \"${manifest.id}\" is not namespaced under base.primitives.* or project.*.`,\n })\n }\n if (this.byId.has(manifest.id)) {\n this.issues.push({\n code: 'duplicate-id',\n componentId: manifest.id,\n message: `Duplicate component id \"${manifest.id}\" — keeping the first registration.`,\n })\n return\n }\n this.byId.set(manifest.id, manifest)\n }\n\n has(id: string): boolean {\n return this.byId.has(id)\n }\n\n getManifest(id: string): ComponentManifest | undefined {\n return this.byId.get(id)\n }\n\n /** Required lookup — throws when the component is not registered. */\n require(id: string): ComponentManifest {\n const manifest = this.byId.get(id)\n if (!manifest) throw new Error(`Unknown component \"${id}\".`)\n return manifest\n }\n\n list(filter: ListFilter = {}): ComponentManifest[] {\n const q = filter.query?.toLowerCase()\n return [...this.byId.values()].filter((m) => {\n if (filter.namespace && namespaceOf(m.id) !== filter.namespace) return false\n if (filter.category && m.category !== filter.category) return false\n if (q) {\n const hay = `${m.id} ${m.title ?? ''} ${m.category ?? ''}`.toLowerCase()\n if (!hay.includes(q)) return false\n }\n return true\n })\n }\n\n /** Platform primitives (`base.primitives.*`). */\n primitives(): ComponentManifest[] {\n return this.list().filter((m) => isPrimitive(m.id))\n }\n\n /** Project-level components (everything not under `base.primitives.*`). */\n projectComponents(): ComponentManifest[] {\n return this.list().filter((m) => !isPrimitive(m.id))\n }\n\n get size(): number {\n return this.byId.size\n }\n\n /** A `ComponentLookup` view for the project-graph validator. */\n get lookup(): ComponentLookup {\n return {\n has: (id) => this.byId.has(id),\n get: (id) => {\n if (!this.byId.has(id)) return undefined\n let view = this.viewCache.get(id)\n if (!view) {\n view = toManifestView(this.byId.get(id)!)\n this.viewCache.set(id, view)\n }\n return view\n },\n }\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"filterable-collections.js","sourceRoot":"","sources":["../../../src/content/__fixtures__/filterable-collections.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAA;AAGtE;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAoB,2BAA2B,CAAA"}
1
+ {"version":3,"file":"filterable-collections.js","sourceRoot":"","sources":["../../../src/content/__fixtures__/filterable-collections.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAA;AAGtE;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAoB,2BAA2B,CAAA","sourcesContent":["import { sampleFilterableCollections } from '@elytracms/core/cms-core'\nimport type { CollectionDef } from '@elytracms/core/cms-core'\n\n/**\n * The cms-core sample collections with the EC-143 `filterable` declarations —\n * the deterministic input for the accessor-type codegen snapshot\n * (`sample-accessor-types.ts`) and for the accessor runtime tests.\n *\n * Since the EC-169 fix-pack the declaration set itself is canonical in\n * `@elytracms/core/cms-core` (`sampleFilterableCollections`) and shared with the\n * persistence seed; this module is a re-export kept for the existing test\n * imports. Deliberately *not* filterable there: `title` (so tests can prove\n * that filtering a real-but-undeclared field fails at both type level and\n * runtime) and the whole `asset` collection (no filterable fields).\n */\nexport const filterableCollections: CollectionDef[] = sampleFilterableCollections\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"sample-accessor-types.js","sourceRoot":"","sources":["../../../src/content/__fixtures__/sample-accessor-types.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,gEAAgE;AAChE,sEAAsE"}
1
+ {"version":3,"file":"sample-accessor-types.js","sourceRoot":"","sources":["../../../src/content/__fixtures__/sample-accessor-types.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,gEAAgE;AAChE,sEAAsE","sourcesContent":["// Generated by @elytracms/content accessor-type codegen (EC-143).\n// Do not edit by hand — regenerate from the collection schemas.\n// Deterministic: identical schema input yields byte-identical output.\n\n/**\n * The closed filter vocabulary (vision AD-3): equality, `in`, comparisons,\n * AND-only — multiple fields and multiple operators all AND together.\n * A bare scalar is shorthand for `{ eq: value }`.\n */\nexport interface WhereCondition<T> {\n eq?: T\n gt?: T\n gte?: T\n in?: readonly T[]\n lt?: T\n lte?: T\n}\n\n/** The list-query envelope every generated per-collection query reuses. */\nexport interface GeneratedListQuery<TWhere, TSortField extends string> {\n where?: TWhere\n sort?: { field: TSortField; direction?: 'asc' | 'desc' }\n limit?: number\n cursor?: string\n}\n\n/** Filter input for \"asset\" — only fields declared `filterable`. */\nexport type AssetWhere = Record<string, never>\n\n/** Sortable fields of \"asset\" (the filterable set). */\nexport type AssetSortField = never\n\n/** `listDocuments` query for \"asset\". */\nexport type AssetListQuery = GeneratedListQuery<AssetWhere, AssetSortField>\n\n/** Filter input for \"author\" — only fields declared `filterable`. */\nexport type AuthorWhere = {\n name?: string | WhereCondition<string>\n}\n\n/** Sortable fields of \"author\" (the filterable set). */\nexport type AuthorSortField = 'name'\n\n/** `listDocuments` query for \"author\". */\nexport type AuthorListQuery = GeneratedListQuery<AuthorWhere, AuthorSortField>\n\n/** Filter input for \"page\" — only fields declared `filterable`. */\nexport type PageWhere = Record<string, never>\n\n/** Sortable fields of \"page\" (the filterable set). */\nexport type PageSortField = never\n\n/** `listDocuments` query for \"page\". */\nexport type PageListQuery = GeneratedListQuery<PageWhere, PageSortField>\n\n/** Filter input for \"post\" — only fields declared `filterable`. */\nexport type PostWhere = {\n slug?: string | WhereCondition<string>\n views?: number | WhereCondition<number>\n featured?: boolean | WhereCondition<boolean>\n publishedAt?: string | number | WhereCondition<string | number>\n status?: 'news' | 'guide' | WhereCondition<'news' | 'guide'>\n author?: string | WhereCondition<string>\n}\n\n/** Sortable fields of \"post\" (the filterable set). */\nexport type PostSortField = 'slug' | 'views' | 'featured' | 'publishedAt' | 'status' | 'author'\n\n/** `listDocuments` query for \"post\". */\nexport type PostListQuery = GeneratedListQuery<PostWhere, PostSortField>\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"sample-delivery-types.js","sourceRoot":"","sources":["../../../src/content/__fixtures__/sample-delivery-types.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,gEAAgE;AAChE,sEAAsE"}
1
+ {"version":3,"file":"sample-delivery-types.js","sourceRoot":"","sources":["../../../src/content/__fixtures__/sample-delivery-types.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,gEAAgE;AAChE,sEAAsE","sourcesContent":["// Generated by @elytracms/content delivery-type codegen (EC-142).\n// Do not edit by hand — regenerate from the collection schemas.\n// Deterministic: identical schema input yields byte-identical output.\n\n/**\n * Reference stub for an unpopulated relation: `populate: false` opt-outs,\n * unknown/missing targets, and relations nested inside a populated document\n * (population never recurses past depth-1). Never a bare id string.\n */\nexport interface DocumentStub<TCollection extends string = string> {\n id: string\n collection: TCollection\n}\n\n/** Delivery shape of a resolved asset; absent metadata is `null`. */\nexport interface ResolvedAsset {\n id: string\n url: string\n width: number | null\n height: number | null\n alt: string | null\n mimeType: string\n focalPoint: { x: number; y: number } | null\n}\n\n/**\n * One node of a composition (`blocks`) field tree (EC-188), delivered verbatim.\n * Opaque and recursive — render it with `renderComposition` rather than reading\n * into it; `props`/`slots` are intentionally loose.\n */\nexport interface CompositionBlock {\n id: string\n componentId: string\n props?: Record<string, unknown>\n slots?: Record<string, CompositionBlock[]>\n condition?: unknown\n}\n\n/** Delivery shape for documents in the \"asset\" collection. */\nexport interface Asset {\n id: string\n collection: 'asset'\n filename: string\n alt?: string\n url: string\n}\n\n/** Depth-1 populated reference to the \"asset\" collection. */\nexport interface AssetRef {\n id: string\n collection: 'asset'\n filename: string\n alt?: string\n url: string\n}\n\n/** Delivery shape for documents in the \"author\" collection. */\nexport interface Author {\n id: string\n collection: 'author'\n name: string\n bio?: string\n}\n\n/** Depth-1 populated reference to the \"author\" collection. */\nexport interface AuthorRef {\n id: string\n collection: 'author'\n name: string\n bio?: string\n}\n\n/** Delivery shape for documents in the \"page\" collection. */\nexport interface Page {\n id: string\n collection: 'page'\n name: string\n body?: CompositionBlock[]\n layoutId?: string\n seoTitle?: string\n seoDescription?: string\n seoCanonical?: string\n seoOgTitle?: string\n seoOgImage?: string\n seoNoindex?: boolean\n}\n\n/** Depth-1 populated reference to the \"page\" collection. */\nexport interface PageRef {\n id: string\n collection: 'page'\n name: string\n body?: CompositionBlock[]\n layoutId?: string\n seoTitle?: string\n seoDescription?: string\n seoCanonical?: string\n seoOgTitle?: string\n seoOgImage?: string\n seoNoindex?: boolean\n}\n\n/** Delivery shape for documents in the \"post\" collection. */\nexport interface Post {\n id: string\n collection: 'post'\n title: string\n slug: string\n body?: string\n views?: number\n featured?: boolean\n publishedAt?: string | number\n status?: 'news' | 'guide'\n author: AuthorRef\n related?: PostRef[]\n cover?: ResolvedAsset | null\n}\n\n/** Depth-1 populated reference to the \"post\" collection. */\nexport interface PostRef {\n id: string\n collection: 'post'\n title: string\n slug: string\n body?: string\n views?: number\n featured?: boolean\n publishedAt?: string | number\n status?: 'news' | 'guide'\n author: DocumentStub<'author'>\n related?: DocumentStub<'post'>[]\n cover?: ResolvedAsset | null\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"assets.js","sourceRoot":"","sources":["../../src/content/assets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AAoCnD,2EAA2E;AAC3E,MAAM,UAAU,aAAa,CAAC,MAAmB,EAAE,GAAW;IAC5D,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,GAAG;QACH,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,IAAI;QAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,IAAI;QAC7B,GAAG,EAAE,MAAM,CAAC,GAAG,IAAI,IAAI;QACvB,QAAQ,EAAE,MAAM,CAAC,WAAW;QAC5B,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,IAAI;KACtC,CAAA;AACH,CAAC;AAcD;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAC/B,MAAmB,EACnB,OAAe,EACf,QAAiC;IAEjC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IACpC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO;YACL,KAAK,EAAE,IAAI;YACX,MAAM,EAAE;gBACN,QAAQ,CAAC;oBACP,IAAI,EAAE,eAAe;oBACrB,OAAO,EAAE,UAAU,OAAO,0BAA0B;oBACpD,IAAI,EAAE,QAAQ,CAAC,IAAI;oBACnB,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACzE,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACnE,IAAI,EAAE,EAAE,OAAO,EAAE;iBAClB,CAAC;aACH;SACF,CAAA;IACH,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAA;AAC9E,CAAC"}
1
+ {"version":3,"file":"assets.js","sourceRoot":"","sources":["../../src/content/assets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AAoCnD,2EAA2E;AAC3E,MAAM,UAAU,aAAa,CAAC,MAAmB,EAAE,GAAW;IAC5D,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,GAAG;QACH,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,IAAI;QAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,IAAI;QAC7B,GAAG,EAAE,MAAM,CAAC,GAAG,IAAI,IAAI;QACvB,QAAQ,EAAE,MAAM,CAAC,WAAW;QAC5B,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,IAAI;KACtC,CAAA;AACH,CAAC;AAcD;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAC/B,MAAmB,EACnB,OAAe,EACf,QAAiC;IAEjC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IACpC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO;YACL,KAAK,EAAE,IAAI;YACX,MAAM,EAAE;gBACN,QAAQ,CAAC;oBACP,IAAI,EAAE,eAAe;oBACrB,OAAO,EAAE,UAAU,OAAO,0BAA0B;oBACpD,IAAI,EAAE,QAAQ,CAAC,IAAI;oBACnB,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACzE,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACnE,IAAI,EAAE,EAAE,OAAO,EAAE;iBAClB,CAAC;aACH;SACF,CAAA;IACH,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAA;AAC9E,CAAC","sourcesContent":["import { cmsIssue } from '@elytracms/core/cms-core'\nimport type { CmsPath, CmsValidationIssue } from '@elytracms/core/cms-core'\nimport type { AssetRecord } from '@elytracms/core/persistence'\n\n/**\n * The delivery shape of an asset (vision AD-4): a directly usable object, not\n * an id. Optional metadata that the stored record lacks is `null` (never\n * `undefined`) so resolved documents stay JSON-stable.\n */\nexport interface ResolvedAsset {\n /** The asset id the field stored (kept for cache keys and re-lookup). */\n id: string\n /** Resolvable URL for the asset bytes (EC-044 blob storage locator). */\n url: string\n width: number | null\n height: number | null\n alt: string | null\n mimeType: string\n /**\n * Normalized image focal point `{ x, y }` in 0–1 (EC-230), or `null`. Threaded\n * to the image primitive's CSS `object-position` so a migrated hotspot keeps\n * the subject in frame when a layout crops the image (`object-fit: cover`).\n */\n focalPoint: { x: number; y: number } | null\n}\n\n/**\n * Pure lookup boundary for asset metadata (EC-044). The caller pre-fetches;\n * resolution only reads. `assetUrl` turns a metadata record into a resolvable\n * URL (e.g. via the blob storage adapter's `url(storageKey)`).\n */\nexport interface AssetLookup {\n asset(id: string): AssetRecord | undefined\n assetUrl(asset: AssetRecord): string\n}\n\n/** Map a persisted asset record (+ resolved URL) to its delivery shape. */\nexport function resolvedAsset(record: AssetRecord, url: string): ResolvedAsset {\n return {\n id: record.id,\n url,\n width: record.width ?? null,\n height: record.height ?? null,\n alt: record.alt ?? null,\n mimeType: record.contentType,\n focalPoint: record.focalPoint ?? null,\n }\n}\n\nexport interface AssetResolution {\n /** The delivery-shaped asset, or `null` when the asset is missing. */\n asset: ResolvedAsset | null\n issues: CmsValidationIssue[]\n}\n\nexport interface AssetResolutionLocation {\n path: CmsPath\n collectionId?: string\n documentId?: string\n}\n\n/**\n * Resolve one stored asset id to its delivery shape. A missing asset is a\n * structured `unknown-asset` issue plus a `null` value — never a crash\n * (EC-142 acceptance).\n */\nexport function resolveAssetValue(\n lookup: AssetLookup,\n assetId: string,\n location: AssetResolutionLocation,\n): AssetResolution {\n const record = lookup.asset(assetId)\n if (!record) {\n return {\n asset: null,\n issues: [\n cmsIssue({\n code: 'unknown-asset',\n message: `Asset \"${assetId}\" could not be resolved.`,\n path: location.path,\n ...(location.collectionId ? { collectionId: location.collectionId } : {}),\n ...(location.documentId ? { documentId: location.documentId } : {}),\n meta: { assetId },\n }),\n ],\n }\n }\n return { asset: resolvedAsset(record, lookup.assetUrl(record)), issues: [] }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"binding-sources.js","sourceRoot":"","sources":["../../src/content/binding-sources.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;GAiBG;AAEH,MAAM,CAAC,MAAM,qBAAqB,GAAG,cAAc,CAAA;AAEnD,kEAAkE;AAClE,MAAM,UAAU,eAAe,CAAC,MAAc;IAC5C,OAAO,GAAG,qBAAqB,GAAG,MAAM,EAAE,CAAA;AAC5C,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,QAAgB;IAChD,OAAO,QAAQ,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAA;AACnD,CAAC;AAkBD,MAAM,aAAa,GAAG,CAAC,KAAc,EAAoC,EAAE,CACzE,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AAEtE;;;;;;;GAOG;AACH,MAAM,UAAU,yBAAyB,CAAC,KAAc;IACtD,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAA;IAC3C,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,CAAA;IACvC,IAAI,OAAO,YAAY,KAAK,QAAQ,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAA;IAEnF,MAAM,MAAM,GAAyB,EAAE,YAAY,EAAE,CAAA;IACrD,IAAI,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ;QAAE,MAAM,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAA;IAC9E,IAAI,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC;QAAE,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,MAAoB,CAAA;IAC3E,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;QAAE,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAA;IAE/D,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAA;IACvB,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAA;QAChC,MAAM,CAAC,IAAI,GAAG;YACZ,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,GAAG,CAAC,SAAS,KAAK,KAAK,IAAI,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACtE,CAAA;IACH,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAA4B;IAC/D,OAAO;QACL,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC;YACtE,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE;YAC1B,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,GAAG,CAAC,MAAM,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC/D,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"binding-sources.js","sourceRoot":"","sources":["../../src/content/binding-sources.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;GAiBG;AAEH,MAAM,CAAC,MAAM,qBAAqB,GAAG,cAAc,CAAA;AAEnD,kEAAkE;AAClE,MAAM,UAAU,eAAe,CAAC,MAAc;IAC5C,OAAO,GAAG,qBAAqB,GAAG,MAAM,EAAE,CAAA;AAC5C,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,QAAgB;IAChD,OAAO,QAAQ,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAA;AACnD,CAAC;AAkBD,MAAM,aAAa,GAAG,CAAC,KAAc,EAAoC,EAAE,CACzE,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AAEtE;;;;;;;GAOG;AACH,MAAM,UAAU,yBAAyB,CAAC,KAAc;IACtD,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAA;IAC3C,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,CAAA;IACvC,IAAI,OAAO,YAAY,KAAK,QAAQ,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAA;IAEnF,MAAM,MAAM,GAAyB,EAAE,YAAY,EAAE,CAAA;IACrD,IAAI,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ;QAAE,MAAM,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAA;IAC9E,IAAI,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC;QAAE,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,MAAoB,CAAA;IAC3E,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;QAAE,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAA;IAE/D,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAA;IACvB,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAA;QAChC,MAAM,CAAC,IAAI,GAAG;YACZ,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,GAAG,CAAC,SAAS,KAAK,KAAK,IAAI,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACtE,CAAA;IACH,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAA4B;IAC/D,OAAO;QACL,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC;YACtE,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE;YAC1B,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,GAAG,CAAC,MAAM,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC/D,CAAA;AACH,CAAC","sourcesContent":["import type { ListDocumentsQuery, SortInput, WhereInput } from './query'\n\n/**\n * Binding-source identities & stored-query replay (EC-166 delivery half).\n *\n * The builder models collection-driven layouts as per-scope CMS sources. A\n * repeating section is a per-section list source `cms.section.<nodeId>` whose\n * config carries the closed AD-3 query (where/sort/limit).\n *\n * This prefix is a delivery contract: when a published graph renders in the\n * embedded runtime, the host materializes each section source by replaying the\n * stored query through `listDocuments` (published perspective, ambient locale).\n * The constant lives here — the delivery side — so the builder and every host\n * speak the same identity scheme.\n *\n * EC-187: the `cms.template.<pageId>` \"current document\" source is RETIRED.\n * Pages are `page`-collection documents (no template page), and a collection\n * detail route binds its document directly via the route's `document` ref —\n * the dev route component reads it, no per-page source indirection.\n */\n\nexport const SECTION_SOURCE_PREFIX = 'cms.section.'\n\n/** The per-section list source id of a repeating section node. */\nexport function sectionSourceId(nodeId: string): string {\n return `${SECTION_SOURCE_PREFIX}${nodeId}`\n}\n\nexport function isSectionSourceId(sourceId: string): boolean {\n return sourceId.startsWith(SECTION_SOURCE_PREFIX)\n}\n\n/**\n * The stored config of a CMS query source, as the builder persists it\n * (`@elytracms/core/data-binding`'s cms config): the AD-3 `where` shape stored\n * verbatim in `filter`, plus optional `sort` and `limit`. Structural — this\n * package does not depend on the builder-side source schemas.\n */\nexport interface CmsSourceQueryConfig {\n collectionId: string\n /** Set on single-document sources (template pages); list sources omit it. */\n documentId?: string\n /** AD-3 `where` input (eq/in/lt/lte/gt/gte, AND-only), stored verbatim. */\n filter?: WhereInput\n sort?: SortInput\n limit?: number\n}\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value)\n\n/**\n * Read a stored source config back into its structural shape. Total and\n * lenient by design: only the envelope is checked here — `where`/`sort`/\n * `limit` *contents* are validated by `listDocuments` itself, which answers\n * invalid queries as structured errors (never a throw). A malformed envelope\n * yields `undefined`, so the caller degrades to an unresolved binding (the\n * renderer's visible fallback), never a crash.\n */\nexport function parseCmsSourceQueryConfig(value: unknown): CmsSourceQueryConfig | undefined {\n if (!isPlainObject(value)) return undefined\n const collectionId = value.collectionId\n if (typeof collectionId !== 'string' || collectionId.length === 0) return undefined\n\n const config: CmsSourceQueryConfig = { collectionId }\n if (typeof value.documentId === 'string') config.documentId = value.documentId\n if (isPlainObject(value.filter)) config.filter = value.filter as WhereInput\n if (typeof value.limit === 'number') config.limit = value.limit\n\n const sort = value.sort\n if (isPlainObject(sort) && typeof sort.field === 'string') {\n const direction = sort.direction\n config.sort = {\n field: sort.field,\n ...(direction === 'asc' || direction === 'desc' ? { direction } : {}),\n }\n }\n\n return config\n}\n\n/**\n * The `listDocuments` query a stored section config replays at delivery —\n * exactly the where/sort/limit the editor picked in the builder (the canonical\n * validators run inside `listDocuments`; nothing is widened here).\n */\nexport function listQueryOfCmsConfig(config: CmsSourceQueryConfig): ListDocumentsQuery {\n return {\n ...(config.filter !== undefined && Object.keys(config.filter).length > 0\n ? { where: config.filter }\n : {}),\n ...(config.sort !== undefined ? { sort: config.sort } : {}),\n ...(config.limit !== undefined ? { limit: config.limit } : {}),\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/content/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/content/client.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n cmsIssue,\n createRouter,\n hierarchyMount,\n isHierarchical,\n isHierarchyTemplate,\n resolveByPath,\n resolveField,\n splitPath,\n} from '@elytracms/core/cms-core'\nimport type {\n CmsDocument,\n CmsValidationIssue,\n CollectionDef,\n DocumentRef,\n HierarchyMount,\n Locale,\n RedirectRecord,\n ResolveStatus,\n RouteRecord,\n} from '@elytracms/core/cms-core'\nimport type { ContentContext } from './context'\nimport { decodeListCursor, encodeListCursor } from './cursor'\nimport { selectPerspective } from './perspective'\nimport type { ContentDocumentSource } from './perspective'\nimport {\n compareListEntries,\n filterScalarOf,\n matchesFieldValue,\n normalizeWhere,\n queryError,\n validateLimit,\n validateSort,\n validateWhere,\n} from './query'\nimport type {\n ContentQueryError,\n FilterScalar,\n ListDocumentsQuery,\n SortDirection,\n WhereInput,\n} from './query'\nimport { populateRelationRef, resolveDocument } from './resolve'\nimport type { ContentLookup, DeliveryDocument, ResolutionInfo, ResolvedDocument } from './resolve'\nimport { resolveLocaleValues } from './locale'\nimport { cacheTags, documentCacheKeys } from './tags'\nimport type { CacheTags } from './tags'\n\n/**\n * The closed-form v1 query surface (EC-143, vision AD-3): `resolvePage`,\n * `getDocument`, `listDocuments` — no query language. Every result is\n * delivery-shaped (EC-142) and carries deterministic `CacheTags` for EC-146.\n *\n * Pure and synchronous like the rest of the package: the client reads through\n * a `ContentLookup`; EC-144/EC-145 bind it to Convex/Next later. The ambient\n * `{ locale, perspective }` context is taken once at creation — never per-call\n * ceremony (per-call `locale` overrides exist for route-level needs only).\n */\n\n// ---------------------------------------------------------------------------\n// Result shapes\n// ---------------------------------------------------------------------------\n\nexport interface ResolvePageResult {\n /** Route resolution status (EC-019 parity): ok | redirect | notFound. */\n status: ResolveStatus\n /** The matched route record, when status is `ok`. */\n route: RouteRecord | null\n /** Extracted dynamic params, e.g. `{ slug: 'hello-world' }`. */\n dynamicParams: Record<string, string>\n /** True when route matching fell back to the default locale (EC-018). */\n localeFallback: boolean\n /** Terminal redirect target + permanence, when status is `redirect`. */\n redirect: { target: string; permanent: boolean } | null\n /**\n * The document this URL resolves to, delivery-shaped (EC-142, EC-187). A\n * `page`-collection document (its `body` composition renders into a layout)\n * or a content-collection document (rendered by a dev route component). SEO\n * for a page is read from this document's flat `seo*` fields — there is no\n * separate page-graph `seo` block anymore.\n */\n document: ResolvedDocument | null\n issues: CmsValidationIssue[]\n tags: CacheTags\n}\n\nexport interface GetDocumentResult<TDoc extends DeliveryDocument = ResolvedDocument> {\n /**\n * The delivery-shaped document, or `null` when not found / not visible in\n * the context perspective (correct behavior, not an error — see EC-142).\n */\n document: TDoc | null\n info: ResolutionInfo | null\n issues: CmsValidationIssue[]\n tags: CacheTags\n}\n\nexport type ListDocumentsResult<TDoc extends DeliveryDocument = ResolvedDocument> =\n | {\n ok: true\n documents: TDoc[]\n /** Cursor for the next page, `null` when this page exhausts the list. */\n nextCursor: string | null\n issues: CmsValidationIssue[]\n tags: CacheTags\n }\n | {\n /** The query itself was invalid (never thrown — structured errors). */\n ok: false\n errors: ContentQueryError[]\n tags: CacheTags\n }\n\nexport interface ContentClient {\n readonly context: ContentContext\n /** Structural route issues from construction (conflicts, redirect loops). */\n readonly routerIssues: readonly CmsValidationIssue[]\n resolvePage(url: string, locale?: Locale): ResolvePageResult\n getDocument<TDoc extends DeliveryDocument = ResolvedDocument>(\n collection: string,\n idOrSlug: string,\n locale?: Locale,\n ): GetDocumentResult<TDoc>\n listDocuments<\n TDoc extends DeliveryDocument = ResolvedDocument,\n TWhere extends WhereInput = WhereInput,\n >(\n collection: string,\n query?: ListDocumentsQuery<TWhere>,\n ): ListDocumentsResult<TDoc>\n /**\n * Populate a relation reference to depth-1 delivery shape (EC-254), or `null`\n * when the target is missing or not visible in the active perspective. A\n * renderer host wires this as `RenderContext.resolveRelation` to populate the\n * COMPOSITION-NODE relation props of the nodes inside a page's `blocks` field\n * (e.g. a ProductGrid block's picked `product`s) — which `resolvePage` leaves\n * raw, since document resolution does not descend into a composition value.\n */\n resolveRelation(ref: DocumentRef): ResolvedDocument | null\n}\n\nexport interface ContentClientInit {\n lookup: ContentLookup\n context: ContentContext\n /** Route records for `resolvePage` (EC-019). */\n routes?: readonly RouteRecord[]\n /** Redirect records for `resolvePage` (EC-019/020). */\n redirects?: readonly RedirectRecord[]\n}\n\n// ---------------------------------------------------------------------------\n// Implementation\n// ---------------------------------------------------------------------------\n\nfunction withLocale(context: ContentContext, locale: Locale | undefined): ContentContext {\n return locale === undefined || locale === context.locale ? context : { ...context, locale }\n}\n\nfunction normalizePath(url: string): string {\n return '/' + splitPath(url).join('/')\n}\n\n/** Internal row used for list ordering before delivery resolution. */\ninterface ListEntry {\n source: ContentDocumentSource\n id: string\n sortValue: FilterScalar | null\n}\n\n/**\n * Template routes (EC-166): a route-bound document ref may be parameterized —\n * `document: { collection: 'post', id: ':slug' }` — so one route record serves\n * *every* document of a collection through its dynamic pattern. The `:name`\n * placeholder names a dynamic param of the pattern; resolution substitutes the\n * matched URL value, which may be a document id or a slug (the bound-document\n * lookup accepts either).\n */\nfunction materializeRouteDocumentRef(\n ref: { collection: string; id: string },\n params: Record<string, string>,\n): { ok: true; ref: { collection: string; id: string } } | { ok: false; missingParam: string } {\n if (!ref.id.startsWith(':')) return { ok: true, ref }\n const param = ref.id.slice(1)\n const value = params[param]\n if (value === undefined || value.length === 0) return { ok: false, missingParam: param }\n return { ok: true, ref: { collection: ref.collection, id: value } }\n}\n\n/** The catch-all param name of a hierarchy mount template (`/docs/:path*` → `path`). */\nfunction mountParamName(route: RouteRecord): string {\n const last = splitPath(route.pattern).at(-1) ?? ''\n return last.replace(/^:/, '').replace(/\\*$/, '')\n}\n\n/** Create the typed accessor client (vision AD-3 ladder, rungs 1–3). */\nexport function createContentClient(init: ContentClientInit): ContentClient {\n const { lookup, context } = init\n const allRoutes = init.routes ?? []\n // EC-218: a hierarchy mount (`{ pattern: '/:path*', document: { collection } }`)\n // serves a collection's documents by their COMPOSED nested path. Mounts are\n // pulled out of the router and resolved per-request (below) so the URL→document\n // mapping stays perspective-aware (draft vs published) and the path stays\n // derived from the parent chain, never stored. Ordinary routes are unaffected.\n const mounts = allRoutes\n .map((route) => {\n const mount = hierarchyMount(route)\n return mount ? { mount, route } : undefined\n })\n .filter((m): m is { mount: HierarchyMount; route: RouteRecord } => m !== undefined)\n const router = createRouter(\n allRoutes.filter((route) => !isHierarchyTemplate(route)),\n init.redirects ?? [],\n { defaultLocale: context.locales.default },\n )\n\n const resolveBoundDocument = (\n ctx: ContentContext,\n ref: { collection: string; id: string },\n issues: CmsValidationIssue[],\n docKeys: string[],\n collections: string[],\n ): ResolvedDocument | null => {\n collections.push(ref.collection)\n const collection = lookup.collection(ref.collection)\n // Template routes substitute a URL param into the ref id; the value may be\n // a slug rather than an id, so fall back to the deterministic slug lookup.\n const source =\n lookup.document(ref) ?? (collection ? findBySlug(ctx, collection, ref.id) : undefined)\n if (!source) {\n issues.push(\n cmsIssue({\n code: 'unknown-route-target',\n message: `Route-bound document \"${ref.collection}:${ref.id}\" was not found.`,\n path: ['document'],\n collectionId: ref.collection,\n documentId: ref.id,\n }),\n )\n return null\n }\n const result = resolveDocument(ctx, lookup, source)\n issues.push(...result.issues)\n if (result.document && collection) {\n docKeys.push(...documentCacheKeys(collection, result.document))\n }\n return result.document\n }\n\n const resolvePage = (url: string, locale?: Locale): ResolvePageResult => {\n const ctx = withLocale(context, locale)\n const path = normalizePath(url)\n const resolution = router.resolveUrl(path, ctx.locale)\n\n const issues: CmsValidationIssue[] = []\n const docKeys: string[] = []\n const collections: string[] = []\n const routePaths: string[] = [path]\n\n if (resolution.status === 'redirect') {\n // Tag every hop: editing any redirect in the chain changes this result.\n const chain = router.followRedirects(path)\n routePaths.push(...chain.chain)\n return {\n status: 'redirect',\n route: null,\n dynamicParams: {},\n localeFallback: false,\n redirect: {\n target: resolution.redirectTarget ?? chain.target,\n permanent: resolution.permanent ?? chain.permanent,\n },\n document: null,\n issues,\n tags: cacheTags({ routes: routePaths, locale: ctx.locale }),\n }\n }\n\n if (resolution.status === 'notFound') {\n // EC-218: a router miss falls through to the hierarchy mounts — resolve the\n // URL against a collection's composed page tree. Explicit/static routes and\n // templates already had precedence (they would not have missed). The first\n // mount whose prefix matches and that resolves a page wins.\n const urlSegments = splitPath(path)\n for (const { mount, route } of mounts) {\n if (mount.locale !== undefined && mount.locale !== ctx.locale) continue\n if (urlSegments.length <= mount.prefix.length) continue\n if (!mount.prefix.every((seg, i) => urlSegments[i] === seg)) continue\n const collection = lookup.collection(mount.collection)\n if (!collection || !isHierarchical(collection)) continue\n const rest = urlSegments.slice(mount.prefix.length)\n const source = findByComposedPath(ctx, mount.collection, rest)\n if (!source) continue\n collections.push(mount.collection)\n const result = resolveDocument(ctx, lookup, source)\n issues.push(...result.issues)\n if (!result.document) continue\n docKeys.push(...documentCacheKeys(collection, result.document))\n return {\n status: 'ok',\n route,\n dynamicParams: { [mountParamName(route)]: rest.join('/') },\n localeFallback: false,\n redirect: null,\n document: result.document,\n issues,\n tags: cacheTags({ docs: docKeys, collections, routes: routePaths, locale: ctx.locale }),\n }\n }\n return {\n status: 'notFound',\n route: null,\n dynamicParams: {},\n localeFallback: resolution.fallback,\n redirect: null,\n document: null,\n issues,\n tags: cacheTags({ routes: routePaths, locale: ctx.locale }),\n }\n }\n\n const route = resolution.route ?? null\n\n let document: ResolvedDocument | null = null\n let documentMissing = false\n if (resolution.documentRef) {\n const materialized = materializeRouteDocumentRef(\n resolution.documentRef,\n resolution.dynamicParams,\n )\n if (materialized.ok) {\n document = resolveBoundDocument(ctx, materialized.ref, issues, docKeys, collections)\n documentMissing = document === null\n } else {\n documentMissing = true\n // Parameterized document ref whose param the pattern never captures —\n // a structured issue, never a silent null (EC-166).\n collections.push(resolution.documentRef.collection)\n issues.push(\n cmsIssue({\n code: 'unknown-route-target',\n message: `Route \"${route?.id ?? path}\" binds its document to URL parameter \":${materialized.missingParam}\", which pattern \"${route?.pattern ?? path}\" does not capture.`,\n path: ['routes', route?.id ?? path, 'document'],\n collectionId: resolution.documentRef.collection,\n meta: { param: materialized.missingParam, pattern: route?.pattern },\n }),\n )\n }\n }\n\n // A document-bound route whose document does not resolve in this\n // perspective is NOT a page (EC-177 gap 6): the URL of an unpublished\n // document must be a notFound result — the host's 404 — never a bare\n // contentless template served as 200. The draft perspective still\n // resolves the draft row, so preview keeps seeing the page. The\n // structured issues and the doc/collection cache tags are carried so the\n // cached 404 revalidates the moment the document (re)publishes.\n if (documentMissing) {\n return {\n status: 'notFound',\n route: null,\n dynamicParams: resolution.dynamicParams,\n localeFallback: resolution.fallback,\n redirect: null,\n document: null,\n issues,\n tags: cacheTags({ docs: docKeys, collections, routes: routePaths, locale: ctx.locale }),\n }\n }\n\n return {\n status: 'ok',\n route,\n dynamicParams: resolution.dynamicParams,\n localeFallback: resolution.fallback,\n redirect: null,\n document,\n issues,\n tags: cacheTags({ docs: docKeys, collections, routes: routePaths, locale: ctx.locale }),\n }\n }\n\n /** Deterministic slug fallback: visible rows whose `slug` resolves to the value, lowest id wins. */\n const findBySlug = (\n ctx: ContentContext,\n collection: CollectionDef,\n slug: string,\n ): ContentDocumentSource | undefined => {\n if (!lookup.documents) return undefined\n if (!collection.fields.some((f) => f.name === 'slug')) return undefined\n const matches: { id: string; source: ContentDocumentSource }[] = []\n for (const source of lookup.documents(collection.id)) {\n const row = selectPerspective(ctx, source)\n if (!row) continue\n const value = resolveField(collection, row, 'slug', ctx.locale, ctx.locales).value\n if (value === slug) matches.push({ id: row.id, source })\n }\n matches.sort((a, b) => (a.id < b.id ? -1 : a.id > b.id ? 1 : 0))\n return matches[0]?.source\n }\n\n /**\n * EC-218: resolve a composed nested path (prefix already stripped) to the page\n * document whose parent chain of slugs matches it. Matches against the rows\n * visible in the active perspective, so an unpublished page simply does not\n * resolve on the published site (correct, not an issue) while preview still\n * sees the draft. Returns the source so the normal `resolveDocument` path runs.\n */\n const findByComposedPath = (\n ctx: ContentContext,\n collectionId: string,\n segments: string[],\n ): ContentDocumentSource | undefined => {\n if (!lookup.documents) return undefined\n const rows: CmsDocument[] = []\n const sourceById = new Map<string, ContentDocumentSource>()\n for (const source of lookup.documents(collectionId)) {\n const row = selectPerspective(ctx, source)\n if (!row) continue\n rows.push(row)\n sourceById.set(row.id, source)\n }\n const matched = resolveByPath(segments, rows)\n return matched ? sourceById.get(matched.id) : undefined\n }\n\n const getDocument = <TDoc extends DeliveryDocument = ResolvedDocument>(\n collectionId: string,\n idOrSlug: string,\n locale?: Locale,\n ): GetDocumentResult<TDoc> => {\n const ctx = withLocale(context, locale)\n const baseTags = { collections: [collectionId], locale: ctx.locale }\n\n const collection = lookup.collection(collectionId)\n if (!collection) {\n return {\n document: null,\n info: null,\n issues: [\n cmsIssue({\n code: 'unknown-collection',\n message: `Collection \"${collectionId}\" is not defined.`,\n path: ['collection'],\n collectionId,\n }),\n ],\n tags: cacheTags(baseTags),\n }\n }\n\n const source =\n lookup.document({ collection: collectionId, id: idOrSlug }) ??\n findBySlug(ctx, collection, idOrSlug)\n if (!source) {\n return { document: null, info: null, issues: [], tags: cacheTags(baseTags) }\n }\n\n const result = resolveDocument(ctx, lookup, source)\n const docKeys = result.document ? documentCacheKeys(collection, result.document) : []\n return {\n // The generated per-collection delivery type (EC-142 codegen) is the\n // static face of what resolveDocument produces for this collection.\n document: result.document as TDoc | null,\n info: result.info,\n issues: result.issues,\n tags: cacheTags({ ...baseTags, docs: docKeys }),\n }\n }\n\n const listDocuments = <\n TDoc extends DeliveryDocument = ResolvedDocument,\n TWhere extends WhereInput = WhereInput,\n >(\n collectionId: string,\n query: ListDocumentsQuery<TWhere> = {},\n ): ListDocumentsResult<TDoc> => {\n const ctx = context\n const errorTags = cacheTags({ collections: [collectionId], locale: ctx.locale })\n const errors: ContentQueryError[] = []\n\n const collection = lookup.collection(collectionId)\n if (!collection) {\n errors.push(\n queryError('unknown-collection', `Collection \"${collectionId}\" is not defined.`, [\n 'collection',\n ]),\n )\n return { ok: false, errors, tags: errorTags }\n }\n if (!lookup.documents) {\n errors.push(\n queryError(\n 'list-not-supported',\n 'This content lookup does not provide a `documents` capability.',\n [],\n ),\n )\n return { ok: false, errors, tags: errorTags }\n }\n\n if (query.where) errors.push(...validateWhere(collection, query.where))\n if (query.sort) errors.push(...validateSort(collection, query.sort))\n if (query.limit !== undefined) errors.push(...validateLimit(query.limit))\n\n const sortField = query.sort?.field ?? null\n const direction: SortDirection = query.sort?.direction ?? 'asc'\n\n let after: { sortValue: FilterScalar | null; id: string } | null = null\n if (query.cursor !== undefined) {\n const decoded = decodeListCursor(query.cursor)\n if (!decoded || decoded.sortField !== sortField || decoded.direction !== direction) {\n errors.push(\n queryError(\n 'invalid-cursor',\n decoded\n ? 'Cursor was minted under a different sort and cannot be reused.'\n : 'Cursor is malformed.',\n ['cursor'],\n ),\n )\n } else {\n after = { sortValue: decoded.sortValue, id: decoded.id }\n }\n }\n\n if (errors.length > 0) return { ok: false, errors, tags: errorTags }\n\n const where = normalizeWhere(query.where ?? {})\n\n // Filter + order over locale-resolved raw values (EC-018 fallback applies\n // to filtering too); delivery resolution runs only on the returned page.\n const entries: ListEntry[] = []\n for (const source of lookup.documents(collectionId)) {\n const row = selectPerspective(ctx, source)\n if (!row || row.collection !== collectionId) continue\n const values = resolveLocaleValues(ctx, collection, row).values\n const matches = where.every((entry) =>\n matchesFieldValue(values[entry.field], entry.condition),\n )\n if (!matches) continue\n entries.push({\n source,\n id: row.id,\n sortValue: sortField === null ? row.id : filterScalarOf(values[sortField]),\n })\n }\n entries.sort((a, b) =>\n compareListEntries(\n { id: a.id, sortValue: a.sortValue },\n { id: b.id, sortValue: b.sortValue },\n direction,\n ),\n )\n\n const afterPosition = after\n const fromIndex = afterPosition\n ? entries.findIndex(\n (entry) =>\n compareListEntries(\n { id: entry.id, sortValue: entry.sortValue },\n afterPosition,\n direction,\n ) > 0,\n )\n : 0\n const start = fromIndex === -1 ? entries.length : fromIndex\n const end = query.limit !== undefined ? start + query.limit : entries.length\n const pageEntries = entries.slice(start, end)\n const hasMore = end < entries.length\n\n const documents: ResolvedDocument[] = []\n const issues: CmsValidationIssue[] = []\n const docKeys: string[] = []\n for (const entry of pageEntries) {\n const result = resolveDocument(ctx, lookup, entry.source)\n issues.push(...result.issues)\n if (result.document) {\n documents.push(result.document)\n docKeys.push(...documentCacheKeys(collection, result.document))\n }\n }\n\n const last = pageEntries[pageEntries.length - 1]\n const nextCursor =\n hasMore && last\n ? encodeListCursor({ sortField, direction, sortValue: last.sortValue, id: last.id })\n : null\n\n return {\n ok: true,\n // The generated per-collection delivery type (EC-142 codegen) is the\n // static face of what resolveDocument produces for this collection.\n documents: documents as TDoc[],\n nextCursor,\n issues,\n tags: cacheTags({\n docs: docKeys,\n collections: [collectionId],\n locale: ctx.locale,\n }),\n }\n }\n\n const resolveRelation = (ref: DocumentRef): ResolvedDocument | null =>\n populateRelationRef(context, lookup, ref).document\n\n return {\n context,\n routerIssues: router.issues,\n resolvePage,\n getDocument,\n listDocuments,\n resolveRelation,\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"codegen.js","sourceRoot":"","sources":["../../src/content/codegen.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"codegen.js","sourceRoot":"","sources":["../../src/content/codegen.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CollectionDef, FieldDef } from '@elytracms/core/cms-core'\n\n/**\n * Per-collection delivery-type codegen (EC-142, vision AD-4). Emits TypeScript\n * source describing the *delivery shape* of each collection — the shape\n * `resolveDocument` produces — so `article.author.name` just typechecks.\n *\n * Deterministic by construction: collections are emitted sorted by id, fields\n * in declared order, with no timestamps or environment data — the same schema\n * input yields byte-identical output. Consumed by EC-143/EC-145/EC-148.\n *\n * Typing stance: the generated types describe the *valid* delivery shape.\n * Degraded states are always accompanied by structured issues at runtime —\n * a missing relation target yields a `{ id, collection }` stub plus an\n * `unknown-relation-target` issue; a missing asset yields `null` plus an\n * `unknown-asset` issue (which is why asset fields carry `| null`).\n */\n\n/** The generated TypeScript type name for a collection's delivery shape. */\nexport function deliveryTypeName(collectionId: string): string {\n const name = collectionId\n .split(/[^A-Za-z0-9]+/u)\n .filter((part) => part.length > 0)\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join('')\n const safe = name.length > 0 ? name : 'Collection'\n return /^[0-9]/u.test(safe) ? `_${safe}` : safe\n}\n\n/** The generated type name for a collection's depth-1 populated reference. */\nexport function deliveryRefTypeName(collectionId: string): string {\n return `${deliveryTypeName(collectionId)}Ref`\n}\n\n/** The generated `where` type name for a collection's list accessor (EC-143). */\nexport function whereTypeName(collectionId: string): string {\n return `${deliveryTypeName(collectionId)}Where`\n}\n\n/** The generated sort-field union type name for a collection (EC-143). */\nexport function sortFieldTypeName(collectionId: string): string {\n return `${deliveryTypeName(collectionId)}SortField`\n}\n\n/** The generated list-query type name for a collection (EC-143). */\nexport function listQueryTypeName(collectionId: string): string {\n return `${deliveryTypeName(collectionId)}ListQuery`\n}\n\nconst IDENTIFIER = /^[A-Za-z_$][A-Za-z0-9_$]*$/u\n\nfunction propertyKey(name: string): string {\n return IDENTIFIER.test(name) ? name : singleQuoted(name)\n}\n\nfunction singleQuoted(value: string): string {\n return `'${value.replace(/\\\\/gu, '\\\\\\\\').replace(/'/gu, \"\\\\'\")}'`\n}\n\nfunction selectUnion(field: Extract<FieldDef, { type: 'select' }>): string {\n const union = field.options.map((option) => singleQuoted(option.value)).join(' | ')\n return field.multiple ? `(${union})[]` : union\n}\n\nfunction relationType(\n field: Extract<FieldDef, { type: 'relation' }>,\n nested: boolean,\n knownCollections: ReadonlySet<string>,\n): string {\n const known = knownCollections.has(field.target)\n const stub = known ? `DocumentStub<${singleQuoted(field.target)}>` : 'DocumentStub'\n const populated = !nested && field.populate !== false && known\n const one = populated ? deliveryRefTypeName(field.target) : stub\n return field.cardinality === 'many' ? `${one}[]` : one\n}\n\n/**\n * The delivery-shape TS type expression for one field. `nested` marks fields\n * inside a depth-1 populated reference, where relations stay stubs (population\n * never recurses) while assets still resolve to objects.\n */\nfunction deliveryFieldType(\n field: FieldDef,\n nested: boolean,\n knownCollections: ReadonlySet<string>,\n): string {\n switch (field.type) {\n case 'text':\n case 'richText':\n return 'string'\n case 'number':\n return 'number'\n case 'boolean':\n return 'boolean'\n case 'date':\n return 'string | number'\n case 'select':\n return selectUnion(field)\n case 'relation':\n return relationType(field, nested, knownCollections)\n case 'asset':\n return field.cardinality === 'many' ? 'ResolvedAsset[]' : 'ResolvedAsset | null'\n case 'blocks':\n // EC-188: a composition (block) field's value is a ComponentNode tree,\n // delivered verbatim. Typed as the self-contained `CompositionBlock`.\n return field.cardinality === 'one' ? 'CompositionBlock' : 'CompositionBlock[]'\n case 'object': {\n // EC-253: a nested object of the subfields' delivery types, `Array<...>` for\n // a repeater. Subfields follow the same `nested` rule — a relation inside a\n // top-level object populates to depth-1; inside a populated ref it stays a\n // stub. Recurses for nested objects.\n const shape = field.fields\n .map((sub) => {\n const optional = sub.validation?.required === true ? '' : '?'\n return `${propertyKey(sub.name)}${optional}: ${deliveryFieldType(sub, nested, knownCollections)}`\n })\n .join('; ')\n const objectType = field.fields.length > 0 ? `{ ${shape} }` : 'Record<string, unknown>'\n return field.cardinality === 'many' ? `Array<${objectType}>` : objectType\n }\n default: {\n // Exhaustiveness: a new field type must add a case above (EC-253).\n const _exhaustive: never = field\n void _exhaustive\n return 'unknown'\n }\n }\n}\n\nfunction interfaceLines(\n name: string,\n doc: string,\n collection: CollectionDef,\n nested: boolean,\n knownCollections: ReadonlySet<string>,\n): string[] {\n const lines: string[] = []\n lines.push(`/** ${doc} */`)\n lines.push(`export interface ${name} {`)\n lines.push(' id: string')\n lines.push(` collection: ${singleQuoted(collection.id)}`)\n for (const field of collection.fields) {\n const optional = field.validation?.required === true ? '' : '?'\n const type = deliveryFieldType(field, nested, knownCollections)\n lines.push(` ${propertyKey(field.name)}${optional}: ${type}`)\n }\n lines.push('}')\n return lines\n}\n\nconst HEADER = [\n '// Generated by @elytracms/content delivery-type codegen (EC-142).',\n '// Do not edit by hand — regenerate from the collection schemas.',\n '// Deterministic: identical schema input yields byte-identical output.',\n]\n\nconst PRELUDE = [\n '/**',\n ' * Reference stub for an unpopulated relation: `populate: false` opt-outs,',\n ' * unknown/missing targets, and relations nested inside a populated document',\n ' * (population never recurses past depth-1). Never a bare id string.',\n ' */',\n 'export interface DocumentStub<TCollection extends string = string> {',\n ' id: string',\n ' collection: TCollection',\n '}',\n '',\n '/** Delivery shape of a resolved asset; absent metadata is `null`. */',\n 'export interface ResolvedAsset {',\n ' id: string',\n ' url: string',\n ' width: number | null',\n ' height: number | null',\n ' alt: string | null',\n ' mimeType: string',\n ' focalPoint: { x: number; y: number } | null',\n '}',\n]\n\n/**\n * EC-188: emitted only when a schema declares a `blocks` (composition) field. A\n * self-contained, recursive ComponentNode shape — render it with\n * `renderComposition`, don't read into it. Conditional so schemas without\n * composition fields keep byte-identical output.\n */\nconst COMPOSITION_PRELUDE = [\n '/**',\n ' * One node of a composition (`blocks`) field tree (EC-188), delivered verbatim.',\n ' * Opaque and recursive — render it with `renderComposition` rather than reading',\n ' * into it; `props`/`slots` are intentionally loose.',\n ' */',\n 'export interface CompositionBlock {',\n ' id: string',\n ' componentId: string',\n ' props?: Record<string, unknown>',\n ' slots?: Record<string, CompositionBlock[]>',\n ' condition?: unknown',\n '}',\n]\n\n/**\n * Generate the per-collection delivery types as a TypeScript module source\n * string. For each collection two interfaces are emitted:\n *\n * - `Name` — the top-level delivery shape (relations populated to depth-1\n * unless declared `populate: false`),\n * - `NameRef` — the depth-1 populated reference shape used by relation fields\n * on *other* collections (its own relations are stubs).\n *\n * Output is deterministic: collections sorted by id, fields in declared\n * order, fixed banner, no timestamps.\n */\nexport function generateDeliveryTypes(collections: readonly CollectionDef[]): string {\n const sorted = [...collections].sort((a, b) => (a.id < b.id ? -1 : a.id > b.id ? 1 : 0))\n const knownCollections: ReadonlySet<string> = new Set(sorted.map((c) => c.id))\n\n const sections: string[] = [HEADER.join('\\n'), PRELUDE.join('\\n')]\n // Composition types ride along only when a `blocks` field exists (EC-188), so\n // schemas without one keep byte-identical output.\n const hasComposition = sorted.some((c) => c.fields.some((f) => f.type === 'blocks'))\n if (hasComposition) sections.push(COMPOSITION_PRELUDE.join('\\n'))\n for (const collection of sorted) {\n sections.push(\n interfaceLines(\n deliveryTypeName(collection.id),\n `Delivery shape for documents in the \"${collection.id}\" collection.`,\n collection,\n false,\n knownCollections,\n ).join('\\n'),\n )\n sections.push(\n interfaceLines(\n deliveryRefTypeName(collection.id),\n `Depth-1 populated reference to the \"${collection.id}\" collection.`,\n collection,\n true,\n knownCollections,\n ).join('\\n'),\n )\n }\n return `${sections.join('\\n\\n')}\\n`\n}\n\n// ---------------------------------------------------------------------------\n// Accessor-type codegen (EC-143)\n// ---------------------------------------------------------------------------\n\n/**\n * The TS type a filter compares against for one field — the scalar side of\n * the value (relations and assets filter by target/asset id).\n */\nfunction filterValueType(field: FieldDef): string {\n switch (field.type) {\n case 'text':\n case 'richText':\n return 'string'\n case 'number':\n return 'number'\n case 'boolean':\n return 'boolean'\n case 'date':\n return 'string | number'\n case 'select':\n return field.options.map((option) => singleQuoted(option.value)).join(' | ')\n case 'relation':\n case 'asset':\n return 'string'\n case 'blocks':\n case 'object':\n // Composition (EC-188) and object / repeater (EC-253) are not filter\n // primitives — they can never be declared `filterable`, so no `where` clause\n // is ever generated for them.\n return 'never'\n default: {\n // Exhaustiveness: a new field type must add a case above (EC-253).\n const _exhaustive: never = field\n void _exhaustive\n return 'never'\n }\n }\n}\n\nconst ACCESSOR_HEADER = [\n '// Generated by @elytracms/content accessor-type codegen (EC-143).',\n '// Do not edit by hand — regenerate from the collection schemas.',\n '// Deterministic: identical schema input yields byte-identical output.',\n]\n\nconst ACCESSOR_PRELUDE = [\n '/**',\n ' * The closed filter vocabulary (vision AD-3): equality, `in`, comparisons,',\n ' * AND-only — multiple fields and multiple operators all AND together.',\n ' * A bare scalar is shorthand for `{ eq: value }`.',\n ' */',\n 'export interface WhereCondition<T> {',\n ' eq?: T',\n ' gt?: T',\n ' gte?: T',\n ' in?: readonly T[]',\n ' lt?: T',\n ' lte?: T',\n '}',\n '',\n '/** The list-query envelope every generated per-collection query reuses. */',\n 'export interface GeneratedListQuery<TWhere, TSortField extends string> {',\n ' where?: TWhere',\n \" sort?: { field: TSortField; direction?: 'asc' | 'desc' }\",\n ' limit?: number',\n ' cursor?: string',\n '}',\n]\n\n/**\n * Generate the per-collection accessor types as a TypeScript module source\n * string (EC-143). For each collection three aliases are emitted:\n *\n * - `NameWhere` — `where` keys narrowed to the fields declared `filterable`\n * in the schema; filtering on anything else is a compile error,\n * - `NameSortField` — the sortable field union (the same filterable set),\n * - `NameListQuery` — the full `listDocuments` query for the collection.\n *\n * Collections with no filterable fields get `Record<string, never>` / `never`,\n * so no filter or sort can be expressed at all. Output is deterministic:\n * collections sorted by id, fields in declared order, fixed banner, no\n * timestamps — same schema input, byte-identical output.\n */\nexport function generateAccessorTypes(collections: readonly CollectionDef[]): string {\n const sorted = [...collections].sort((a, b) => (a.id < b.id ? -1 : a.id > b.id ? 1 : 0))\n const sections: string[] = [ACCESSOR_HEADER.join('\\n'), ACCESSOR_PRELUDE.join('\\n')]\n\n for (const collection of sorted) {\n const filterable = collection.fields.filter((field) => field.filterable === true)\n const lines: string[] = []\n\n lines.push(`/** Filter input for \"${collection.id}\" — only fields declared \\`filterable\\`. */`)\n if (filterable.length === 0) {\n lines.push(`export type ${whereTypeName(collection.id)} = Record<string, never>`)\n } else {\n lines.push(`export type ${whereTypeName(collection.id)} = {`)\n for (const field of filterable) {\n const value = filterValueType(field)\n lines.push(` ${propertyKey(field.name)}?: ${value} | WhereCondition<${value}>`)\n }\n lines.push('}')\n }\n lines.push('')\n lines.push(`/** Sortable fields of \"${collection.id}\" (the filterable set). */`)\n lines.push(\n `export type ${sortFieldTypeName(collection.id)} = ${\n filterable.length === 0\n ? 'never'\n : filterable.map((field) => singleQuoted(field.name)).join(' | ')\n }`,\n )\n lines.push('')\n lines.push(`/** \\`listDocuments\\` query for \"${collection.id}\". */`)\n lines.push(\n `export type ${listQueryTypeName(collection.id)} = GeneratedListQuery<${whereTypeName(\n collection.id,\n )}, ${sortFieldTypeName(collection.id)}>`,\n )\n sections.push(lines.join('\\n'))\n }\n return `${sections.join('\\n\\n')}\\n`\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/content/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAA;AAwB/D;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAwB;IAC3D,OAAO;QACL,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,OAAO,EAAE,IAAI,CAAC,OAAO;KACtB,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/content/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAA;AAwB/D;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAwB;IAC3D,OAAO;QACL,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,OAAO,EAAE,IAAI,CAAC,OAAO;KACtB,CAAA;AACH,CAAC","sourcesContent":["import { z } from 'zod'\nimport type { Locale, LocaleConfig } from '@elytracms/core/cms-core'\n\n/**\n * Which side of the draft/published split a delivery request reads from\n * (EC-021, vision AD-4). `published` never exposes draft content; `draft` is\n * the editor/preview view.\n */\nexport const perspectiveSchema = z.enum(['draft', 'published'])\nexport type Perspective = z.infer<typeof perspectiveSchema>\n\n/**\n * Ambient request context (vision AD-4): locale and perspective are set once\n * per request and threaded through every resolution function — never per-call\n * ceremony. The locale config travels along so EC-018 fallback needs no extra\n * arguments either.\n */\nexport interface ContentContext {\n /** The locale requested for this delivery (EC-018 fallback applies). */\n readonly locale: Locale\n /** Draft or published perspective (EC-021). */\n readonly perspective: Perspective\n /** The project's locale configuration (default + supported set). */\n readonly locales: LocaleConfig\n}\n\nexport interface ContentContextInit {\n locale: Locale\n perspective: Perspective\n locales: LocaleConfig\n}\n\n/**\n * Create the ambient `{ locale, perspective }` context for a delivery request.\n * Construction never throws — an unknown locale is surfaced as a structured\n * `unknown-locale` issue by `resolveDocument`, while resolution still proceeds\n * with default-locale fallback.\n */\nexport function createContentContext(init: ContentContextInit): ContentContext {\n return {\n locale: init.locale,\n perspective: init.perspective,\n locales: init.locales,\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../src/content/cursor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../src/content/cursor.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod'\nimport type { FilterScalar, SortDirection } from './query'\n\n/**\n * Deterministic cursor pagination for `listDocuments` (EC-143).\n *\n * Format: `ec1.<base64url(JSON payload)>` where the payload is\n * `{\"v\":1,\"f\":<sort field|null>,\"d\":\"asc\"|\"desc\",\"s\":<sort value|null>,\"i\":<doc id>}`\n * — the sort position (`f`/`d`/`s`) plus the id (`i`) of the last document\n * returned, with keys always written in that order. The next page is every\n * entry strictly after that position in the canonical list order\n * (`compareListEntries`). Encoding the sort spec into the cursor lets decode\n * reject a cursor reused with a different sort as `invalid-cursor` instead of\n * silently misordering.\n *\n * Encoding is byte-stable: same position in, same cursor string out.\n */\n\nexport const LIST_CURSOR_PREFIX = 'ec1.'\n\nconst cursorPayloadSchema = z.object({\n v: z.literal(1),\n f: z.string().nullable(),\n d: z.enum(['asc', 'desc']),\n s: z.union([z.string(), z.number(), z.boolean(), z.null()]),\n i: z.string().min(1),\n})\n\nexport interface ListCursor {\n /** Sort field the cursor was minted under (`null` = id order). */\n sortField: string | null\n direction: SortDirection\n /** Sort value of the last returned document (`null` when missing). */\n sortValue: FilterScalar | null\n /** Id of the last returned document (the unconditional tiebreak). */\n id: string\n}\n\nconst BASE64URL = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'\n\n/** Unpadded base64url over raw bytes — environment-independent (no Buffer). */\nfunction toBase64Url(bytes: Uint8Array): string {\n let out = ''\n for (let i = 0; i < bytes.length; i += 3) {\n const a = bytes[i] ?? 0\n const b = bytes[i + 1]\n const c = bytes[i + 2]\n out += BASE64URL[a >> 2]\n out += BASE64URL[((a & 0b11) << 4) | ((b ?? 0) >> 4)]\n if (b !== undefined) out += BASE64URL[((b & 0b1111) << 2) | ((c ?? 0) >> 6)]\n if (c !== undefined) out += BASE64URL[c & 0b111111]\n }\n return out\n}\n\nfunction fromBase64Url(text: string): Uint8Array | null {\n const values: number[] = []\n for (const char of text) {\n const value = BASE64URL.indexOf(char)\n if (value === -1) return null\n values.push(value)\n }\n if (values.length % 4 === 1) return null\n const bytes: number[] = []\n for (let i = 0; i < values.length; i += 4) {\n const [a, b, c, d] = [values[i], values[i + 1], values[i + 2], values[i + 3]]\n if (a === undefined || b === undefined) break\n bytes.push((a << 2) | (b >> 4))\n if (c !== undefined) bytes.push(((b & 0b1111) << 4) | (c >> 2))\n if (d !== undefined) bytes.push((((c ?? 0) & 0b11) << 6) | d)\n }\n return new Uint8Array(bytes)\n}\n\n/** Encode a list position into an opaque, URL-safe cursor string. */\nexport function encodeListCursor(cursor: ListCursor): string {\n // Key order is fixed by construction (v, f, d, s, i) — byte-stable output.\n const payload = JSON.stringify({\n v: 1,\n f: cursor.sortField,\n d: cursor.direction,\n s: cursor.sortValue,\n i: cursor.id,\n })\n return LIST_CURSOR_PREFIX + toBase64Url(new TextEncoder().encode(payload))\n}\n\n/**\n * Decode a cursor string. Returns `null` for anything malformed — wrong\n * prefix, bad base64, bad JSON, wrong shape. Never throws; the caller maps\n * `null` to a structured `invalid-cursor` error.\n */\nexport function decodeListCursor(text: string): ListCursor | null {\n if (!text.startsWith(LIST_CURSOR_PREFIX)) return null\n const bytes = fromBase64Url(text.slice(LIST_CURSOR_PREFIX.length))\n if (!bytes) return null\n let parsed: unknown\n try {\n parsed = JSON.parse(new TextDecoder().decode(bytes))\n } catch {\n return null\n }\n const payload = cursorPayloadSchema.safeParse(parsed)\n if (!payload.success) return null\n return {\n sortField: payload.data.f,\n direction: payload.data.d,\n sortValue: payload.data.s,\n id: payload.data.i,\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/content/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,yBAAyB,CAAA;AAEhD,cAAc,WAAW,CAAA;AACzB,cAAc,eAAe,CAAA;AAC7B,cAAc,UAAU,CAAA;AACxB,cAAc,YAAY,CAAA;AAC1B,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA;AACzB,cAAc,OAAO,CAAA;AACrB,cAAc,WAAW,CAAA;AACzB,cAAc,SAAS,CAAA;AACvB,cAAc,aAAa,CAAA;AAC3B,cAAc,UAAU,CAAA;AACxB,cAAc,QAAQ,CAAA;AACtB,cAAc,UAAU,CAAA;AACxB,cAAc,mBAAmB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/content/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,yBAAyB,CAAA;AAEhD,cAAc,WAAW,CAAA;AACzB,cAAc,eAAe,CAAA;AAC7B,cAAc,UAAU,CAAA;AACxB,cAAc,YAAY,CAAA;AAC1B,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA;AACzB,cAAc,OAAO,CAAA;AACrB,cAAc,WAAW,CAAA;AACzB,cAAc,SAAS,CAAA;AACvB,cAAc,aAAa,CAAA;AAC3B,cAAc,UAAU,CAAA;AACxB,cAAc,QAAQ,CAAA;AACtB,cAAc,UAAU,CAAA;AACxB,cAAc,mBAAmB,CAAA","sourcesContent":["/**\n * @elytracms/content — delivery-shape resolution, the closed-form typed accessor\n * surface, & per-collection type codegen (EC-142/EC-143, vision AD-3/AD-4).\n *\n * The unit of delivery is the resolved document, not the stored row: locale\n * fallback applied (EC-018), draft/published perspective applied (EC-021),\n * relations populated to depth-1 as declared in schema, assets resolved to\n * usable objects. The entire v1 query surface is the accessor ladder —\n * `resolvePage`, `getDocument`, `listDocuments` — no query language; every\n * result carries deterministic cache-tag metadata (EC-146). Everything here is\n * pure functions over `@elytracms/core/cms-core` models — no fetching, no Convex, no\n * React — and invalid states surface as structured issues, never crashes.\n */\nexport const PACKAGE = '@elytracms/core/content'\n\nexport * from './context'\nexport * from './perspective'\nexport * from './locale'\nexport * from './populate'\nexport * from './assets'\nexport * from './resolve'\nexport * from './raw'\nexport * from './codegen'\nexport * from './query'\nexport * from './serialize'\nexport * from './cursor'\nexport * from './tags'\nexport * from './client'\nexport * from './binding-sources'\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"locale.js","sourceRoot":"","sources":["../../src/content/locale.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AA4BvD;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CACjC,OAAuB,EACvB,UAAyB,EACzB,GAAgB,EAChB,WAAoB,EAAE;IAEtB,MAAM,MAAM,GAAgB,EAAE,CAAA;IAC9B,MAAM,SAAS,GAA0B,EAAE,CAAA;IAE3C,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;QACtC,MAAM,QAAQ,GAAG,YAAY,CAAC,UAAU,EAAE,GAAG,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;QAC3F,IAAI,QAAQ,CAAC,KAAK,KAAK,SAAS;YAAE,SAAQ;QAC1C,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAA;QACnC,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACtB,SAAS,CAAC,IAAI,CAAC;gBACb,IAAI,EAAE,CAAC,GAAG,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC;gBAC/B,KAAK,EAAE,KAAK,CAAC,IAAI;gBACjB,eAAe,EAAE,OAAO,CAAC,MAAM;gBAC/B,YAAY,EAAE,QAAQ,CAAC,YAAY;aACpC,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAA;AAC9B,CAAC"}
1
+ {"version":3,"file":"locale.js","sourceRoot":"","sources":["../../src/content/locale.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AA4BvD;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CACjC,OAAuB,EACvB,UAAyB,EACzB,GAAgB,EAChB,WAAoB,EAAE;IAEtB,MAAM,MAAM,GAAgB,EAAE,CAAA;IAC9B,MAAM,SAAS,GAA0B,EAAE,CAAA;IAE3C,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;QACtC,MAAM,QAAQ,GAAG,YAAY,CAAC,UAAU,EAAE,GAAG,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;QAC3F,IAAI,QAAQ,CAAC,KAAK,KAAK,SAAS;YAAE,SAAQ;QAC1C,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAA;QACnC,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACtB,SAAS,CAAC,IAAI,CAAC;gBACb,IAAI,EAAE,CAAC,GAAG,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC;gBAC/B,KAAK,EAAE,KAAK,CAAC,IAAI;gBACjB,eAAe,EAAE,OAAO,CAAC,MAAM;gBAC/B,YAAY,EAAE,QAAQ,CAAC,YAAY;aACpC,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAA;AAC9B,CAAC","sourcesContent":["import { resolveField } from '@elytracms/core/cms-core'\nimport type { CmsDocument, CmsPath, CollectionDef, FieldValues, Locale } from '@elytracms/core/cms-core'\nimport type { ContentContext } from './context'\n\n/**\n * A report entry for one field whose value was served from a different locale\n * than the one requested (EC-018 default-locale fallback). Paths are rooted at\n * the resolved document, e.g. `['title']` or `['author', 'bio']` for a field\n * inside a populated relation.\n */\nexport interface FieldLocaleFallback {\n path: CmsPath\n /** The field name (last path segment, repeated for convenience). */\n field: string\n /** The locale the request asked for. */\n requestedLocale: Locale\n /** The locale the value was actually read from. */\n sourceLocale: Locale\n}\n\nexport interface LocaleResolution {\n /** Flat field values for the requested locale, fallback applied. Fields with\n * no value anywhere are omitted (never `undefined` entries). */\n values: FieldValues\n /** Which fields used fallback, and from where (EC-018 reporting). */\n fallbacks: FieldLocaleFallback[]\n}\n\n/**\n * Resolve a stored row's field values for the context locale with EC-018\n * default-locale fallback, reporting every field that actually fell back.\n * Pure: reads only the given document; never throws.\n */\nexport function resolveLocaleValues(\n context: ContentContext,\n collection: CollectionDef,\n doc: CmsDocument,\n basePath: CmsPath = [],\n): LocaleResolution {\n const values: FieldValues = {}\n const fallbacks: FieldLocaleFallback[] = []\n\n for (const field of collection.fields) {\n const resolved = resolveField(collection, doc, field.name, context.locale, context.locales)\n if (resolved.value === undefined) continue\n values[field.name] = resolved.value\n if (resolved.fellBack) {\n fallbacks.push({\n path: [...basePath, field.name],\n field: field.name,\n requestedLocale: context.locale,\n sourceLocale: resolved.sourceLocale,\n })\n }\n }\n\n return { values, fallbacks }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"perspective.js","sourceRoot":"","sources":["../../src/content/perspective.ts"],"names":[],"mappings":"AAYA,8EAA8E;AAC9E,MAAM,UAAU,iBAAiB,CAAC,MAA6B;IAC7D,OAAO,OAAO,IAAI,MAAM,IAAI,UAAU,IAAI,MAAM,CAAA;AAClD,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,iBAAiB,CAC/B,OAAuB,EACvB,MAA6B;IAE7B,IAAI,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9B,IAAI,OAAO,CAAC,WAAW,KAAK,OAAO;YAAE,OAAO,MAAM,CAAC,KAAK,CAAA;QACxD,OAAO,MAAM,CAAC,SAAS,IAAI,IAAI,CAAA;IACjC,CAAC;IACD,IAAI,OAAO,CAAC,WAAW,KAAK,OAAO;QAAE,OAAO,MAAM,CAAA;IAClD,OAAO,IAAI,CAAA;AACb,CAAC"}
1
+ {"version":3,"file":"perspective.js","sourceRoot":"","sources":["../../src/content/perspective.ts"],"names":[],"mappings":"AAYA,8EAA8E;AAC9E,MAAM,UAAU,iBAAiB,CAAC,MAA6B;IAC7D,OAAO,OAAO,IAAI,MAAM,IAAI,UAAU,IAAI,MAAM,CAAA;AAClD,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,iBAAiB,CAC/B,OAAuB,EACvB,MAA6B;IAE7B,IAAI,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9B,IAAI,OAAO,CAAC,WAAW,KAAK,OAAO;YAAE,OAAO,MAAM,CAAC,KAAK,CAAA;QACxD,OAAO,MAAM,CAAC,SAAS,IAAI,IAAI,CAAA;IACjC,CAAC;IACD,IAAI,OAAO,CAAC,WAAW,KAAK,OAAO;QAAE,OAAO,MAAM,CAAA;IAClD,OAAO,IAAI,CAAA;AACb,CAAC","sourcesContent":["import type { CmsDocument, DocumentHistory } from '@elytracms/core/cms-core'\nimport type { ContentContext } from './context'\n\n/**\n * What delivery resolution accepts as a document source: either a bare stored\n * row (`CmsDocument`, always a working draft — EC-224 retired the `state` flag)\n * or the full draft/published history (`DocumentHistory`, EC-021) whose\n * `published` field carries the pinned snapshot. Lookups hand these in;\n * resolution stays pure — no fetching at this layer.\n */\nexport type ContentDocumentSource = CmsDocument | DocumentHistory\n\n/** Narrow a source to a `DocumentHistory` (draft/published split, EC-021). */\nexport function isDocumentHistory(source: ContentDocumentSource): source is DocumentHistory {\n return 'draft' in source && 'versions' in source\n}\n\n/**\n * Select the stored row visible under the context's perspective (EC-021):\n *\n * - For a `DocumentHistory`: `draft` returns the working draft, `published`\n * returns the last published snapshot — or `null` if the document has never\n * been published. Draft content is never leaked into `published`.\n * - For a bare `CmsDocument`: `draft` sees the row as-is; `published` returns\n * `null`. A bare row carries no publish signal (EC-224 retired `state`), so\n * it is treated as never-published here — fail-closed. Published content\n * reaches this layer ONLY as a `DocumentHistory` whose `published` field the\n * feeder set (the live host wraps each published snapshot; the adapter path\n * wraps a pinned record), never as a bare row.\n *\n * Returning `null` means \"not visible in this perspective\" — that is correct\n * delivery behavior for unpublished content, not a validation issue.\n */\nexport function selectPerspective(\n context: ContentContext,\n source: ContentDocumentSource,\n): CmsDocument | null {\n if (isDocumentHistory(source)) {\n if (context.perspective === 'draft') return source.draft\n return source.published ?? null\n }\n if (context.perspective === 'draft') return source\n return null\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"populate.js","sourceRoot":"","sources":["../../src/content/populate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAc1D;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAuB;IACzD,OAAO,KAAK,CAAC,QAAQ,KAAK,KAAK,CAAA;AACjC,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,YAAY,CAAC,GAAgB;IAC3C,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,CAAA;AACnD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,OAAO,eAAe,CAAC,KAAK,CAAC,CAAA;AAC/B,CAAC"}
1
+ {"version":3,"file":"populate.js","sourceRoot":"","sources":["../../src/content/populate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAc1D;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAuB;IACzD,OAAO,KAAK,CAAC,QAAQ,KAAK,KAAK,CAAA;AACjC,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,YAAY,CAAC,GAAgB;IAC3C,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,CAAA;AACnD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,OAAO,eAAe,CAAC,KAAK,CAAC,CAAA;AAC/B,CAAC","sourcesContent":["import { readDocumentRef } from '@elytracms/core/cms-core'\nimport type { DocumentRef, RelationFieldDef } from '@elytracms/core/cms-core'\n\n/**\n * The unpopulated form of a relation in delivery shape (vision AD-4): always a\n * `{ id, collection }` object, never a bare id string. Returned when a field\n * declares `populate: false`, and for relations *inside* a populated document\n * (population never recurses past depth-1).\n */\nexport interface DocumentStub {\n id: string\n collection: string\n}\n\n/**\n * Whether delivery resolution populates this relation to depth-1 (EC-142).\n * Population is the default; `populate: false` is the schema-level opt-out.\n */\nexport function isPopulatedRelation(field: RelationFieldDef): boolean {\n return field.populate !== false\n}\n\n/** Build the reference stub for a relation target. */\nexport function relationStub(ref: DocumentRef): DocumentStub {\n return { id: ref.id, collection: ref.collection }\n}\n\n/**\n * Parse a stored relation value into a `DocumentRef`, tolerating malformed data:\n * anything not relation-shaped yields `undefined` so the caller can surface a\n * structured issue instead of crashing. Accepts the EC-277 self-typed envelope\n * (`{ type:'reference', collection, id }`) and legacy bare `{ collection, id }`.\n */\nexport function parseRelationRef(value: unknown): DocumentRef | undefined {\n return readDocumentRef(value)\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/content/query.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/content/query.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CmsPath, CollectionDef, FieldDef } from '@elytracms/core/cms-core'\n\n/**\n * The closed v1 filter vocabulary (vision AD-3): equality, `in`, comparisons\n * (lt/lte/gt/gte), AND-only composition. Multiple `where` keys AND together;\n * multiple operators inside one condition AND together. There is no OR, no\n * nesting, no anything else — by design, so every query is enumerable,\n * cache-taggable, and honest about backend indexes.\n */\nexport const FILTER_OPERATORS = ['eq', 'gt', 'gte', 'in', 'lt', 'lte'] as const\nexport type FilterOperator = (typeof FILTER_OPERATORS)[number]\n\n/** A scalar a filter can compare against (relation/asset filters use the id). */\nexport type FilterScalar = string | number | boolean\n\n/** One field's filter: every present operator must hold (AND). */\nexport interface FilterCondition {\n eq?: FilterScalar\n gt?: FilterScalar\n gte?: FilterScalar\n in?: readonly FilterScalar[]\n lt?: FilterScalar\n lte?: FilterScalar\n}\n\n/**\n * The `where` input: field name → condition. A bare scalar is shorthand for\n * `{ eq: value }`. Generated per-collection types (`PostWhere`) narrow the\n * keys to the fields declared `filterable` in the schema.\n */\nexport type WhereInput = Readonly<Record<string, FilterScalar | FilterCondition | undefined>>\n\nexport type SortDirection = 'asc' | 'desc'\n\n/** Single-field sort; ties always break by document id ascending. */\nexport interface SortInput {\n field: string\n direction?: SortDirection\n}\n\n/** The full `listDocuments` query envelope (vision AD-3, rung 3). */\nexport interface ListDocumentsQuery<TWhere extends WhereInput = WhereInput> {\n where?: TWhere\n sort?: SortInput\n limit?: number\n cursor?: string\n}\n\n// ---------------------------------------------------------------------------\n// Structured query errors\n// ---------------------------------------------------------------------------\n\n/**\n * Codes for structured accessor query errors (EC-143). These describe *caller*\n * mistakes (bad filter, bad cursor), as opposed to `CmsValidationIssue`s which\n * describe content/schema problems. Accessors never throw — invalid queries\n * come back as an error result carrying these.\n */\nexport type ContentQueryErrorCode =\n | 'unknown-collection'\n | 'list-not-supported'\n | 'non-filterable-field'\n | 'invalid-filter'\n | 'invalid-sort'\n | 'invalid-limit'\n | 'invalid-cursor'\n\nexport interface ContentQueryError {\n code: ContentQueryErrorCode\n message: string\n /** Path into the query input, e.g. ['where', 'title'] or ['sort', 'field']. */\n path: CmsPath\n meta?: Record<string, unknown>\n}\n\nexport function queryError(\n code: ContentQueryErrorCode,\n message: string,\n path: CmsPath,\n meta?: Record<string, unknown>,\n): ContentQueryError {\n return { code, message, path, ...(meta ? { meta } : {}) }\n}\n\n// ---------------------------------------------------------------------------\n// Normalization\n// ---------------------------------------------------------------------------\n\n/** A condition with the `eq` shorthand expanded, operators in stable order. */\nexport type NormalizedCondition = Partial<\n Record<FilterOperator, FilterScalar | readonly FilterScalar[]>\n>\n\nexport interface NormalizedWhereEntry {\n field: string\n condition: NormalizedCondition\n}\n\nfunction isFilterScalar(value: unknown): value is FilterScalar {\n return typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean'\n}\n\nfunction isOperator(key: string): key is FilterOperator {\n return (FILTER_OPERATORS as readonly string[]).includes(key)\n}\n\n/**\n * Normalize a `where` input into entries sorted by field name, with the bare\n * scalar shorthand expanded to `{ eq: value }` and operators in the stable\n * `FILTER_OPERATORS` order. Both serialization and execution run on this\n * normal form, so `{ slug: 'x' }` and `{ slug: { eq: 'x' } }` are the same\n * query (and produce the same cache key).\n */\nexport function normalizeWhere(where: WhereInput): NormalizedWhereEntry[] {\n const entries: NormalizedWhereEntry[] = []\n for (const field of Object.keys(where).sort()) {\n const raw = where[field]\n if (raw === undefined) continue\n if (isFilterScalar(raw)) {\n entries.push({ field, condition: { eq: raw } })\n continue\n }\n const condition: NormalizedCondition = {}\n for (const op of FILTER_OPERATORS) {\n const value = (raw as Record<string, unknown>)[op]\n if (value === undefined) continue\n condition[op] = value as FilterScalar | readonly FilterScalar[]\n }\n entries.push({ field, condition })\n }\n return entries\n}\n\n// ---------------------------------------------------------------------------\n// Validation (filterable-field enforcement, EC-143)\n// ---------------------------------------------------------------------------\n\nfunction fieldByName(collection: CollectionDef, name: string): FieldDef | undefined {\n return collection.fields.find((f) => f.name === name)\n}\n\n/** The fields of a collection declared `filterable` (EC-143 schema flag). */\nexport function filterableFields(collection: CollectionDef): FieldDef[] {\n return collection.fields.filter((f) => f.filterable === true)\n}\n\n/**\n * Validate a `where` input against a collection schema. Filters are permitted\n * **only** on fields declared `filterable` — anything else is a structured\n * `non-filterable-field` error. Unknown operators and malformed operator\n * values are `invalid-filter` errors. All errors are collected (sorted by\n * field, deterministic), never thrown.\n */\nexport function validateWhere(collection: CollectionDef, where: WhereInput): ContentQueryError[] {\n const errors: ContentQueryError[] = []\n for (const field of Object.keys(where).sort()) {\n const raw = where[field]\n if (raw === undefined) continue\n const path: CmsPath = ['where', field]\n\n const def = fieldByName(collection, field)\n if (!def || def.filterable !== true) {\n errors.push(\n queryError(\n 'non-filterable-field',\n def\n ? `Field \"${field}\" on \"${collection.id}\" is not declared filterable.`\n : `Field \"${field}\" does not exist on \"${collection.id}\".`,\n path,\n { collection: collection.id, field },\n ),\n )\n continue\n }\n\n if (isFilterScalar(raw)) continue\n if (raw === null || typeof raw !== 'object' || Array.isArray(raw)) {\n errors.push(\n queryError(\n 'invalid-filter',\n `Filter for \"${field}\" must be a scalar or an operator object.`,\n path,\n ),\n )\n continue\n }\n\n const keys = Object.keys(raw).sort()\n if (keys.length === 0) {\n errors.push(queryError('invalid-filter', `Filter for \"${field}\" has no operators.`, path))\n continue\n }\n for (const key of keys) {\n const value = (raw as Record<string, unknown>)[key]\n if (value === undefined) continue\n const opPath: CmsPath = ['where', field, key]\n if (!isOperator(key)) {\n errors.push(\n queryError(\n 'invalid-filter',\n `Unknown filter operator \"${key}\" on \"${field}\" — the vocabulary is exactly ${FILTER_OPERATORS.join(', ')}.`,\n opPath,\n { operator: key },\n ),\n )\n continue\n }\n if (key === 'in') {\n if (!Array.isArray(value) || !value.every(isFilterScalar)) {\n errors.push(\n queryError(\n 'invalid-filter',\n `Operator \"in\" on \"${field}\" requires an array of scalars.`,\n opPath,\n ),\n )\n }\n continue\n }\n if (!isFilterScalar(value)) {\n errors.push(\n queryError(\n 'invalid-filter',\n `Operator \"${key}\" on \"${field}\" requires a scalar value.`,\n opPath,\n ),\n )\n }\n }\n }\n return errors\n}\n\n/**\n * Validate a sort input. Sorting uses the same `filterable` declaration as\n * filtering (same rationale: backend indexes stay honest).\n */\nexport function validateSort(collection: CollectionDef, sort: SortInput): ContentQueryError[] {\n const def = fieldByName(collection, sort.field)\n if (!def || def.filterable !== true) {\n return [\n queryError(\n 'invalid-sort',\n def\n ? `Sort field \"${sort.field}\" on \"${collection.id}\" is not declared filterable.`\n : `Sort field \"${sort.field}\" does not exist on \"${collection.id}\".`,\n ['sort', 'field'],\n { collection: collection.id, field: sort.field },\n ),\n ]\n }\n if (sort.direction !== undefined && sort.direction !== 'asc' && sort.direction !== 'desc') {\n return [\n queryError('invalid-sort', `Sort direction must be \"asc\" or \"desc\".`, ['sort', 'direction']),\n ]\n }\n return []\n}\n\n/** Validate a limit: a positive integer (or absent = no pagination). */\nexport function validateLimit(limit: number): ContentQueryError[] {\n if (!Number.isInteger(limit) || limit < 1) {\n return [queryError('invalid-limit', 'Limit must be a positive integer.', ['limit'])]\n }\n return []\n}\n\n// ---------------------------------------------------------------------------\n// Matching & ordering (pure, deterministic)\n// ---------------------------------------------------------------------------\n\n/**\n * Reduce a stored field value to the scalar filters compare against: scalars\n * pass through, relation refs compare by target id, anything else (arrays,\n * rich objects, missing) is `null` and never matches a condition.\n */\nexport function filterScalarOf(value: unknown): FilterScalar | null {\n if (isFilterScalar(value)) return value\n if (\n value !== null &&\n typeof value === 'object' &&\n !Array.isArray(value) &&\n typeof (value as { id?: unknown }).id === 'string'\n ) {\n return (value as { id: string }).id\n }\n return null\n}\n\n/**\n * Three-way compare, or `null` when the values are uncomparable: an UNSET field\n * (`value === null`) or a type mismatch. Callers treat `null` as \"does not\n * match\", so an unset field is EXCLUDED from every comparison operator — unset\n * never satisfies a value comparison (EC-205). Pinned by query.test.ts.\n */\nfunction compares(value: FilterScalar | null, bound: FilterScalar): number | null {\n if (value === null) return null\n if (typeof value === 'number' && typeof bound === 'number') {\n return value < bound ? -1 : value > bound ? 1 : 0\n }\n if (typeof value === 'string' && typeof bound === 'string') {\n // Code-unit comparison: deterministic across environments (no locale tables).\n return value < bound ? -1 : value > bound ? 1 : 0\n }\n return null\n}\n\n/**\n * Does a stored field value satisfy one normalized condition? Scalars and single\n * relation/asset refs reduce via {@link filterScalarOf} and match directly. An\n * ARRAY field — a `many` relation/asset (EC-255) — matches with **contains**\n * semantics: the condition holds if ANY element satisfies it, so\n * `where: { categories: catId }` lists products whose `categories` array\n * contains `catId`. An empty array matches nothing. Scalar fields keep their\n * exact prior behavior (the non-array branch is the original reduce-then-match).\n */\nexport function matchesFieldValue(value: unknown, condition: NormalizedCondition): boolean {\n if (Array.isArray(value)) {\n return value.some((element) => matchesCondition(filterScalarOf(element), condition))\n }\n return matchesCondition(filterScalarOf(value), condition)\n}\n\n/** Does a (scalar-reduced) value satisfy one normalized condition? AND-only. */\nexport function matchesCondition(\n value: FilterScalar | null,\n condition: NormalizedCondition,\n): boolean {\n for (const op of FILTER_OPERATORS) {\n const bound = condition[op]\n if (bound === undefined) continue\n switch (op) {\n case 'eq':\n if (value !== bound) return false\n break\n case 'in':\n if (value === null || !(bound as readonly FilterScalar[]).includes(value)) return false\n break\n case 'lt':\n case 'lte':\n case 'gt':\n case 'gte': {\n const cmp = compares(value, bound as FilterScalar)\n if (cmp === null) return false\n if (op === 'lt' && !(cmp < 0)) return false\n if (op === 'lte' && !(cmp <= 0)) return false\n if (op === 'gt' && !(cmp > 0)) return false\n if (op === 'gte' && !(cmp >= 0)) return false\n break\n }\n }\n }\n return true\n}\n\n/**\n * Total, deterministic order over sort values: numbers first (numeric order),\n * then strings (code-unit order), then booleans (false < true), then missing\n * values (`null`). `desc` flips this entire order; the id tiebreak stays\n * ascending either way (see `compareListEntries`).\n */\nexport function compareSortValues(a: FilterScalar | null, b: FilterScalar | null): number {\n const rank = (v: FilterScalar | null): number =>\n typeof v === 'number' ? 0 : typeof v === 'string' ? 1 : typeof v === 'boolean' ? 2 : 3\n const ra = rank(a)\n const rb = rank(b)\n if (ra !== rb) return ra - rb\n if (typeof a === 'number' && typeof b === 'number') return a < b ? -1 : a > b ? 1 : 0\n if (typeof a === 'string' && typeof b === 'string') return a < b ? -1 : a > b ? 1 : 0\n if (typeof a === 'boolean' && typeof b === 'boolean') return a === b ? 0 : a ? 1 : -1\n return 0\n}\n\n/** One row in list ordering: its id plus its (scalar-reduced) sort value. */\nexport interface ListPosition {\n id: string\n sortValue: FilterScalar | null\n}\n\n/**\n * The canonical list order (and cursor position order): sort value in the\n * requested direction, then id ascending as the unconditional tiebreak — so\n * pagination is total, stable, and reproducible from fixtures.\n */\nexport function compareListEntries(\n a: ListPosition,\n b: ListPosition,\n direction: SortDirection,\n): number {\n const byValue = compareSortValues(a.sortValue, b.sortValue)\n const directed = direction === 'desc' ? -byValue : byValue\n if (directed !== 0) return directed\n return a.id < b.id ? -1 : a.id > b.id ? 1 : 0\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"raw.js","sourceRoot":"","sources":["../../src/content/raw.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAGjD;;;;;;;;GAQG;AACH,MAAM,UAAU,WAAW,CACzB,OAAuB,EACvB,MAA6B;IAE7B,OAAO,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;AAC3C,CAAC"}
1
+ {"version":3,"file":"raw.js","sourceRoot":"","sources":["../../src/content/raw.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAGjD;;;;;;;;GAQG;AACH,MAAM,UAAU,WAAW,CACzB,OAAuB,EACvB,MAA6B;IAE7B,OAAO,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;AAC3C,CAAC","sourcesContent":["import type { CmsDocument } from '@elytracms/core/cms-core'\nimport type { ContentContext } from './context'\nimport { selectPerspective } from './perspective'\nimport type { ContentDocumentSource } from './perspective'\n\n/**\n * Escape hatch (vision AD-4, `content.raw`): the stored row, untouched — no\n * locale fallback, no relation population, no asset resolution. Relations stay\n * `DocumentRef`s, assets stay ids, localized values stay per-locale bags.\n *\n * Perspective still applies: even raw access never leaks draft content into\n * the published perspective. Returns `null` when the document is not visible\n * under the context perspective.\n */\nexport function rawDocument(\n context: ContentContext,\n source: ContentDocumentSource,\n): CmsDocument | null {\n return selectPerspective(context, source)\n}\n"]}