@elytracms/core 0.0.7 → 0.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/clipboard/build.js.map +1 -1
- package/dist/clipboard/clipboard.js.map +1 -1
- package/dist/clipboard/fragment.js.map +1 -1
- package/dist/clipboard/html.js.map +1 -1
- package/dist/clipboard/index.js.map +1 -1
- package/dist/clipboard/references.js.map +1 -1
- package/dist/clipboard/serialize.js.map +1 -1
- package/dist/cms-core/collection-shape.d.ts +43 -0
- package/dist/cms-core/collection-shape.js +129 -0
- package/dist/cms-core/collection-shape.js.map +1 -0
- package/dist/cms-core/collections.d.ts +5 -6
- package/dist/cms-core/collections.js +26 -13
- package/dist/cms-core/collections.js.map +1 -1
- package/dist/cms-core/documents.d.ts +1 -0
- package/dist/cms-core/documents.js +10 -0
- package/dist/cms-core/documents.js.map +1 -1
- package/dist/cms-core/envelopes.js.map +1 -1
- package/dist/cms-core/fields.js.map +1 -1
- package/dist/cms-core/fixtures.js.map +1 -1
- package/dist/cms-core/hierarchy.js.map +1 -1
- package/dist/cms-core/index.d.ts +2 -0
- package/dist/cms-core/index.js +2 -0
- package/dist/cms-core/index.js.map +1 -1
- package/dist/cms-core/infer.js.map +1 -1
- package/dist/cms-core/issues.d.ts +10 -0
- package/dist/cms-core/issues.js +13 -0
- package/dist/cms-core/issues.js.map +1 -1
- package/dist/cms-core/json-schema.js.map +1 -1
- package/dist/cms-core/localization.js.map +1 -1
- package/dist/cms-core/nesting-depth.d.ts +44 -0
- package/dist/cms-core/nesting-depth.js +50 -0
- package/dist/cms-core/nesting-depth.js.map +1 -0
- package/dist/cms-core/routes.js.map +1 -1
- package/dist/cms-core/self-type.js.map +1 -1
- package/dist/cms-core/url-for-document.js.map +1 -1
- package/dist/cms-core/validate-document.d.ts +8 -0
- package/dist/cms-core/validate-document.js +35 -0
- package/dist/cms-core/validate-document.js.map +1 -1
- package/dist/cms-core/versions.d.ts +1 -0
- package/dist/cms-core/versions.js.map +1 -1
- package/dist/collaboration/approval.js.map +1 -1
- package/dist/collaboration/collaboration.js.map +1 -1
- package/dist/collaboration/comments.js.map +1 -1
- package/dist/collaboration/core.js.map +1 -1
- package/dist/collaboration/index.js.map +1 -1
- package/dist/collaboration/presence.js.map +1 -1
- package/dist/collaboration/publishing.js.map +1 -1
- package/dist/collaboration/versions.js.map +1 -1
- package/dist/component-registry/index.js.map +1 -1
- package/dist/component-registry/issues.js.map +1 -1
- package/dist/component-registry/manifest.js.map +1 -1
- package/dist/component-registry/registry.js.map +1 -1
- package/dist/content/__fixtures__/filterable-collections.js.map +1 -1
- package/dist/content/__fixtures__/sample-accessor-types.js.map +1 -1
- package/dist/content/__fixtures__/sample-delivery-types.js.map +1 -1
- package/dist/content/assets.js.map +1 -1
- package/dist/content/binding-sources.js.map +1 -1
- package/dist/content/client.js.map +1 -1
- package/dist/content/codegen.js.map +1 -1
- package/dist/content/context.js.map +1 -1
- package/dist/content/cursor.js.map +1 -1
- package/dist/content/index.js.map +1 -1
- package/dist/content/locale.js.map +1 -1
- package/dist/content/perspective.js.map +1 -1
- package/dist/content/populate.js.map +1 -1
- package/dist/content/query.js.map +1 -1
- package/dist/content/raw.js.map +1 -1
- package/dist/content/resolve.js.map +1 -1
- package/dist/content/serialize.js.map +1 -1
- package/dist/content/tags.js.map +1 -1
- package/dist/data-binding/fixtures.js.map +1 -1
- package/dist/data-binding/index.js.map +1 -1
- package/dist/data-binding/issues.js.map +1 -1
- package/dist/data-binding/resolve.js.map +1 -1
- package/dist/data-binding/sample.js.map +1 -1
- package/dist/data-binding/sources.js.map +1 -1
- package/dist/data-binding/tokens.js.map +1 -1
- package/dist/design-tokens/css.js.map +1 -1
- package/dist/design-tokens/index.js.map +1 -1
- package/dist/design-tokens/style-guide.js.map +1 -1
- package/dist/design-tokens/tokens.js.map +1 -1
- package/dist/export-sync/builder-source.d.ts +1 -0
- package/dist/export-sync/builder-source.js.map +1 -1
- package/dist/export-sync/check.js.map +1 -1
- package/dist/export-sync/cli.js.map +1 -1
- package/dist/export-sync/core.js.map +1 -1
- package/dist/export-sync/eject.js.map +1 -1
- package/dist/export-sync/fixtures.js.map +1 -1
- package/dist/export-sync/generate.js.map +1 -1
- package/dist/export-sync/index.js.map +1 -1
- package/dist/export-sync/init.js.map +1 -1
- package/dist/export-sync/manifest-host.js.map +1 -1
- package/dist/export-sync/node.js.map +1 -1
- package/dist/export-sync/push.js.map +1 -1
- package/dist/export-sync/registry-sync-client.js.map +1 -1
- package/dist/export-sync/sync.js.map +1 -1
- package/dist/export-sync/typegen.js.map +1 -1
- package/dist/export-sync/validate.js.map +1 -1
- package/dist/export-sync/watch.js.map +1 -1
- package/dist/operations/assets.js.map +1 -1
- package/dist/operations/authorization.js.map +1 -1
- package/dist/operations/changesets.js.map +1 -1
- package/dist/operations/client.js.map +1 -1
- package/dist/operations/core.js.map +1 -1
- package/dist/operations/documents.d.ts +21 -0
- package/dist/operations/documents.js.map +1 -1
- package/dist/operations/graph.js.map +1 -1
- package/dist/operations/index.js.map +1 -1
- package/dist/operations/members.js.map +1 -1
- package/dist/operations/publishing.js.map +1 -1
- package/dist/operations/references.js.map +1 -1
- package/dist/operations/schema.d.ts +18 -0
- package/dist/operations/schema.js.map +1 -1
- package/dist/operations/tokens.js.map +1 -1
- package/dist/persistence/adapter.js.map +1 -1
- package/dist/persistence/assets.js.map +1 -1
- package/dist/persistence/backend-validation.js.map +1 -1
- package/dist/persistence/cli-tokens.js.map +1 -1
- package/dist/persistence/cms.d.ts +3 -0
- package/dist/persistence/cms.js.map +1 -1
- package/dist/persistence/contract-scenarios.js.map +1 -1
- package/dist/persistence/core.js.map +1 -1
- package/dist/persistence/graph.js.map +1 -1
- package/dist/persistence/index.js.map +1 -1
- package/dist/persistence/members.js.map +1 -1
- package/dist/persistence/publishing.js.map +1 -1
- package/dist/persistence/reference-extraction.js.map +1 -1
- package/dist/persistence/reference-indexing.js.map +1 -1
- package/dist/persistence/references.js.map +1 -1
- package/dist/persistence/seed.js.map +1 -1
- package/dist/persistence/self-maintaining-adapter.js.map +1 -1
- package/dist/plugins/asset-storage.js.map +1 -1
- package/dist/plugins/component-package.js.map +1 -1
- package/dist/plugins/data-sources.js.map +1 -1
- package/dist/plugins/examples.js.map +1 -1
- package/dist/plugins/export-targets.js.map +1 -1
- package/dist/plugins/field-types.js.map +1 -1
- package/dist/plugins/hooks.js.map +1 -1
- package/dist/plugins/index.js.map +1 -1
- package/dist/plugins/marketplace.js.map +1 -1
- package/dist/plugins/plugin.js.map +1 -1
- package/dist/plugins/templates.js.map +1 -1
- package/dist/project-graph/binding.js.map +1 -1
- package/dist/project-graph/container.js.map +1 -1
- package/dist/project-graph/edit.js.map +1 -1
- package/dist/project-graph/fixtures.js.map +1 -1
- package/dist/project-graph/ids.js.map +1 -1
- package/dist/project-graph/index.js.map +1 -1
- package/dist/project-graph/issues.js.map +1 -1
- package/dist/project-graph/json.js.map +1 -1
- package/dist/project-graph/node.js.map +1 -1
- package/dist/project-graph/normalize.js.map +1 -1
- package/dist/project-graph/serialize.js.map +1 -1
- package/dist/project-graph/structure.js.map +1 -1
- package/dist/project-graph/validate.js.map +1 -1
- package/dist/rich-text/adapter.js.map +1 -1
- package/dist/rich-text/dom-editor.js.map +1 -1
- package/dist/rich-text/embed.js.map +1 -1
- package/dist/rich-text/fixtures.js.map +1 -1
- package/dist/rich-text/html.js.map +1 -1
- package/dist/rich-text/index.js.map +1 -1
- package/dist/rich-text/markdown.js.map +1 -1
- package/dist/rich-text/portable-text.js.map +1 -1
- package/dist/rich-text/registry.js.map +1 -1
- package/dist/rich-text/render.js.map +1 -1
- package/dist/rich-text/schema.js.map +1 -1
- package/dist/rich-text/test-support.js.map +1 -1
- package/dist/runtime-renderer/client.js.map +1 -1
- package/dist/runtime-renderer/condition.js.map +1 -1
- package/dist/runtime-renderer/content-client.js.map +1 -1
- package/dist/runtime-renderer/context.js.map +1 -1
- package/dist/runtime-renderer/fallback.js.map +1 -1
- package/dist/runtime-renderer/index.js.map +1 -1
- package/dist/runtime-renderer/primitives.js.map +1 -1
- package/dist/runtime-renderer/render.d.ts +14 -1
- package/dist/runtime-renderer/render.js +126 -126
- package/dist/runtime-renderer/render.js.map +1 -1
- package/dist/runtime-renderer/rich-text.js.map +1 -1
- package/dist/starter-kits/index.js.map +1 -1
- package/dist/starter-kits/instantiate.js.map +1 -1
- package/dist/starter-kits/kit.js.map +1 -1
- package/dist/starter-kits/kits.js.map +1 -1
- package/dist/starter-kits/manifests.js.map +1 -1
- package/dist/starter-kits/upgrade.js.map +1 -1
- package/dist/starter-kits/validate.js.map +1 -1
- package/dist/studio-core/context.js.map +1 -1
- package/dist/studio-core/errors.js.map +1 -1
- package/dist/studio-core/fixtures.js.map +1 -1
- package/dist/studio-core/ids.js.map +1 -1
- package/dist/studio-core/index.js.map +1 -1
- package/dist/studio-core/issues.js.map +1 -1
- package/dist/studio-core/metadata.js.map +1 -1
- package/dist/studio-core/repository.js.map +1 -1
- package/dist/studio-core/sections.d.ts +1 -1
- package/dist/studio-core/sections.js.map +1 -1
- package/dist/studio-core/validate.js.map +1 -1
- package/dist/studio-core/workspace-config.d.ts +4 -0
- package/dist/studio-core/workspace-config.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fields.js","sourceRoot":"","sources":["../../src/cms-core/fields.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fields.js","sourceRoot":"","sources":["../../src/cms-core/fields.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod'\n\n/**\n * Provider-neutral field type catalogue (brief §7.4). Relation and asset are\n * first-class field types but carry extra config (target collection, cardinality),\n * so they're modelled as discriminated variants below rather than bare strings.\n */\nexport const fieldTypeSchema = z.enum([\n 'text',\n 'number',\n 'boolean',\n 'date',\n 'select',\n 'richText',\n 'relation',\n 'asset',\n // Composition field (EC-186, AD-12): the value is a constrained tree of\n // registry components (a canvas), not a scalar. The vocabulary is code.\n 'blocks',\n // Object / repeater field (EC-253): a nested group of field-defs — a single\n // object (`cardinality: 'one'`) or an ordered array of them (`'many'`). The\n // missing array-of-objects primitive real sites lean on (menus, forms, galleries).\n 'object',\n])\nexport type FieldType = z.infer<typeof fieldTypeSchema>\n\n/** How many related documents a relation field points at. */\nexport const cardinalitySchema = z.enum(['one', 'many'])\nexport type Cardinality = z.infer<typeof cardinalitySchema>\n\n/**\n * Where a field-def is valid (EC-190 \"props as fields\"): a CMS document field, a\n * component prop, or both. The same field-def vocabulary drives documents AND\n * component props through one inspector/form engine — `context` only gates which\n * document-only attributes apply, never the stored value or emitted JSON Schema.\n */\nexport const fieldContextSchema = z.enum(['document', 'prop', 'both'])\nexport type FieldContext = z.infer<typeof fieldContextSchema>\n\n/**\n * Preferred input control when a field type maps to several presentation forms\n * (e.g. a `text` field rendered as a single input, a textarea, a colour picker, or\n * a JSON editor). Presentation only — never affects validation or stored values.\n */\nexport const fieldControlSchema = z.enum(['input', 'textarea', 'color', 'json'])\nexport type FieldControl = z.infer<typeof fieldControlSchema>\n\n/**\n * Form/authoring metadata for a field (brief §7.4: groups/tabs/labels/order).\n * Pure presentation hints — never affects validation or stored values.\n */\nexport const fieldFormMetaSchema = z.object({\n /** Human label shown in the editor; falls back to the field name when omitted. */\n label: z.string().optional(),\n /** Helper/description text shown under the field. */\n description: z.string().optional(),\n /** Placeholder for text-like inputs. */\n placeholder: z.string().optional(),\n /** Grouping section the field belongs to (a fieldset). */\n group: z.string().optional(),\n /** Tab the field belongs to (for tabbed editors). */\n tab: z.string().optional(),\n /** Sort order within its group/tab; lower comes first. */\n order: z.number().optional(),\n /** When true the editor renders the field read-only. */\n readOnly: z.boolean().optional(),\n /** When true the editor hides the field (still validated/stored). */\n hidden: z.boolean().optional(),\n /** Preferred input control when the field type maps to several (EC-190). */\n control: fieldControlSchema.optional(),\n /**\n * When true the editor edits this value inline on the canvas (EC-158) rather\n * than as a form row — used for text-like component props rendered as visible\n * content. The single home for inline-editing across documents and props.\n */\n inlineEditable: z.boolean().optional(),\n})\nexport type FieldFormMeta = z.infer<typeof fieldFormMetaSchema>\n\n/**\n * Declarative validation metadata for a field (brief §7.4). These constraints\n * are provider-neutral and drive both runtime validation (`validateDocument`)\n * and JSON Schema output. They never throw — violations surface as structured\n * issues.\n */\nexport const fieldValidationSchema = z.object({\n /** When true a value must be present (and non-empty for strings/arrays). */\n required: z.boolean().optional(),\n /** Minimum string length / array length / numeric value (type-dependent). */\n min: z.number().optional(),\n /** Maximum string length / array length / numeric value (type-dependent). */\n max: z.number().optional(),\n /** RegExp source string a text value must match. */\n pattern: z.string().optional(),\n /** Value must be unique across the collection's documents. */\n unique: z.boolean().optional(),\n})\nexport type FieldValidation = z.infer<typeof fieldValidationSchema>\n\n/** A single allowed option for a `select` field. */\nexport const selectOptionSchema = z.object({\n value: z.string(),\n label: z.string().optional(),\n})\nexport type SelectOption = z.infer<typeof selectOptionSchema>\n\nconst baseFieldShape = {\n /** Stable field name (the key in a document's values; survives label changes). */\n name: z.string().min(1),\n /** When true the field stores a separate value per locale (EC-018). */\n localized: z.boolean().optional(),\n /**\n * Marks the field as filterable/sortable for the closed-form list accessors\n * (EC-143, vision AD-3). `listDocuments` filters and sorts are permitted only\n * on declared fields — this keeps backend indexes honest and stops filter\n * vocabulary creep. Never affects stored values or validation.\n */\n filterable: z.boolean().optional(),\n /**\n * Where this field-def is valid (EC-190): a CMS document field, a component\n * prop, or both. Defaults to `document` when omitted (back-compat — every\n * existing collection field-def stays a document field). Document-only\n * attributes (`filterable`, `validation.unique`) declared on a `context:'prop'`\n * field are a structured issue (`assertPropFieldDef`), never silent.\n */\n context: fieldContextSchema.optional(),\n /**\n * Default value applied when none is set (EC-190). On a component prop this is\n * the renderer's static fallback (EC-015); on a document field it seeds new\n * documents — the per-field starter-content mechanism (no template entity\n * needed). Never affects whether a value is *stored*, only what fills a gap.\n */\n default: z.unknown().optional(),\n form: fieldFormMetaSchema.optional(),\n validation: fieldValidationSchema.optional(),\n}\n\n/** A schema of just the shared base attributes — the source for {@link BaseFieldDef}. */\nconst baseFieldObjectSchema = z.object(baseFieldShape)\n/** Attributes every field-def carries, derived from {@link baseFieldShape}. */\ntype BaseFieldDef = z.infer<typeof baseFieldObjectSchema>\n\n/**\n * A field definition (the shape {@link fieldDefSchema} parses to). Written\n * explicitly rather than via `z.infer` because the `object` variant is recursive\n * — its `fields` reference `FieldDef` itself — and TypeScript cannot infer a\n * self-referential `z.infer`. The schema below is annotated with this type and the\n * two are kept in lock-step (`object-field.test.ts` round-trips against drift).\n *\n * A discriminated union on `type` so relation/asset/select/object carry exactly\n * the extra config they need and nothing more.\n */\nexport type FieldDef =\n | (BaseFieldDef & { type: 'text' })\n | (BaseFieldDef & { type: 'number' })\n | (BaseFieldDef & { type: 'boolean' })\n | (BaseFieldDef & { type: 'date' })\n | (BaseFieldDef & { type: 'select'; options: SelectOption[]; multiple?: boolean })\n | (BaseFieldDef & { type: 'richText'; allow?: string[] })\n | (BaseFieldDef & {\n type: 'relation'\n target: string\n cardinality: Cardinality\n populate?: boolean\n strict?: boolean\n })\n | (BaseFieldDef & { type: 'asset'; cardinality: Cardinality; accept?: string[] })\n | (BaseFieldDef & { type: 'blocks'; allow?: string[]; cardinality: Cardinality })\n // EC-253: object / repeater — recursive (a subfield may itself be `object`).\n | (BaseFieldDef & { type: 'object'; fields: FieldDef[]; cardinality: Cardinality })\n\n/**\n * The Zod schema mirroring {@link FieldDef}. The `object` member's `fields` is\n * wrapped in `z.lazy` so the schema can reference itself, while the discriminator\n * stays a static `z.literal('object')` so `discriminatedUnion` can still read it\n * at construction time. The explicit `z.ZodType<FieldDef>` annotation breaks the\n * self-referential inference cycle; the cast reconciles the parsed output (where\n * defaulted `cardinality` is always present) with the union's optional-input type.\n */\nexport const fieldDefSchema: z.ZodType<FieldDef> = z.discriminatedUnion('type', [\n z.object({ ...baseFieldShape, type: z.literal('text') }),\n z.object({ ...baseFieldShape, type: z.literal('number') }),\n z.object({ ...baseFieldShape, type: z.literal('boolean') }),\n z.object({ ...baseFieldShape, type: z.literal('date') }),\n z.object({\n ...baseFieldShape,\n type: z.literal('select'),\n options: z.array(selectOptionSchema).min(1),\n /** Allow selecting multiple options (stored as an array). */\n multiple: z.boolean().optional(),\n }),\n z.object({\n ...baseFieldShape,\n type: z.literal('richText'),\n /**\n * Embeddable composition vocabulary (EC-189, AD-12): component ids editors\n * may embed as `componentEmbed` blocks inside the prose — the SAME `allow`\n * mechanism a `blocks` field uses, applied to rich-text embeds. Each embed\n * holds a single `ComponentNode` validated against this list by\n * `validateCompositionValue` (`@elytracms/core/project-graph`). Omit to allow any\n * registered component; deeper nesting is governed by each component's slot\n * `allow`. The leash is code.\n */\n allow: z.array(z.string().min(1)).optional(),\n }),\n z.object({\n ...baseFieldShape,\n type: z.literal('relation'),\n /** Id of the collection this relation points at. */\n target: z.string().min(1),\n cardinality: cardinalitySchema,\n /**\n * Delivery-shape population declaration (EC-142). Defaults to populated:\n * delivery resolution expands the relation to a depth-1 populated reference.\n * Set to `false` to opt out and receive reference stubs\n * (`{ id, collection }`) instead. Never affects stored values.\n */\n populate: z.boolean().optional(),\n /**\n * Strict referential integrity (EC-173). References are **weak by\n * default**: unpublishing/deleting a referenced target is allowed and the\n * reference degrades to an explicit validation issue plus a delivery\n * fallback. `strict: true` is the deliberate opt-in that inverts this for\n * one field: while any document references a target through this field,\n * deleting the target is blocked — and while a *published* document does,\n * unpublishing it is blocked too (enforced in `@elytracms/core/operations`).\n */\n strict: z.boolean().optional(),\n }),\n z.object({\n ...baseFieldShape,\n type: z.literal('asset'),\n cardinality: cardinalitySchema.default('one'),\n /** Restrict to specific asset kinds (e.g. 'image', 'file'); empty = any. */\n accept: z.array(z.string()).optional(),\n }),\n z.object({\n ...baseFieldShape,\n type: z.literal('blocks'),\n /**\n * The composition vocabulary (EC-186, AD-12): allowed component ids editors\n * may place as TOP-LEVEL blocks. Omit to allow any registered component;\n * deeper nesting is governed by each component's slot `allow`. The value\n * (a `ComponentNode` tree) is validated against this by\n * `validateCompositionValue` (`@elytracms/core/project-graph`). The leash is code.\n */\n allow: z.array(z.string().min(1)).optional(),\n /** `one` = a single root component; `many` = an ordered list (default). */\n cardinality: cardinalitySchema.default('many'),\n }),\n z.object({\n ...baseFieldShape,\n type: z.literal('object'),\n /**\n * The nested field-defs. Recursive via `z.lazy` (a subfield may itself be an\n * `object`), so Konditorei's nested menu, the form builder's groups→fields,\n * and multi-entry settings model faithfully. Subfields carry their own `name`\n * (they are object keys), so this is the full `FieldDef`, not the prop shape.\n */\n fields: z.lazy(() => z.array(fieldDefSchema)),\n /** `one` = a single nested object; `many` = an ordered array (the repeater). */\n cardinality: cardinalitySchema.default('one'),\n }),\n]) as z.ZodType<FieldDef>\n\n/** A relation field, narrowed. */\nexport type RelationFieldDef = Extract<FieldDef, { type: 'relation' }>\n/** An asset field, narrowed. */\nexport type AssetFieldDef = Extract<FieldDef, { type: 'asset' }>\n/** A select field, narrowed. */\nexport type SelectFieldDef = Extract<FieldDef, { type: 'select' }>\n/** A composition (blocks) field, narrowed (EC-186). */\nexport type BlocksFieldDef = Extract<FieldDef, { type: 'blocks' }>\n/** A rich-text field, narrowed (EC-159/EC-189: carries the embed `allow` list). */\nexport type RichTextFieldDef = Extract<FieldDef, { type: 'richText' }>\n/** An object / repeater field, narrowed (EC-253). */\nexport type ObjectFieldDef = Extract<FieldDef, { type: 'object' }>\n\n/** Narrowing helpers. */\nexport function isRelationField(field: FieldDef): field is RelationFieldDef {\n return field.type === 'relation'\n}\nexport function isAssetField(field: FieldDef): field is AssetFieldDef {\n return field.type === 'asset'\n}\nexport function isSelectField(field: FieldDef): field is SelectFieldDef {\n return field.type === 'select'\n}\nexport function isBlocksField(field: FieldDef): field is BlocksFieldDef {\n return field.type === 'blocks'\n}\nexport function isRichTextField(field: FieldDef): field is RichTextFieldDef {\n return field.type === 'richText'\n}\nexport function isObjectField(field: FieldDef): field is ObjectFieldDef {\n return field.type === 'object'\n}\n\n/** Resolve a field-def's context, defaulting to `document` (EC-190). */\nexport function fieldContext(field: FieldDef): FieldContext {\n return field.context ?? 'document'\n}\n\n/** True if the field-def may be used as a component prop (EC-190). */\nexport function isPropContext(field: FieldDef): boolean {\n const c = fieldContext(field)\n return c === 'prop' || c === 'both'\n}\n\n/** True if the field-def may be used as a CMS document field (EC-190). */\nexport function isDocumentContext(field: FieldDef): boolean {\n const c = fieldContext(field)\n return c === 'document' || c === 'both'\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fixtures.js","sourceRoot":"","sources":["../../src/cms-core/fixtures.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fixtures.js","sourceRoot":"","sources":["../../src/cms-core/fixtures.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CollectionDef } from './collections'\nimport type { CmsDocument } from './documents'\nimport { documentKey, refOf } from './documents'\nimport type { LocaleConfig } from './localization'\nimport type { RedirectRecord, RouteRecord } from './routes'\n\n/**\n * Sample CMS model used across tests and as a worked example (mirrors the role of\n * `validSampleGraph` in `@elytracms/core/project-graph`). Provider-neutral, deterministic.\n */\n\nexport const sampleLocaleConfig: LocaleConfig = {\n default: 'en',\n locales: ['en', 'de'],\n}\n\n/** An asset collection (EC-017). */\nexport const assetCollection: CollectionDef = {\n id: 'asset',\n kind: 'asset',\n titleField: 'filename',\n fields: [\n { name: 'filename', type: 'text', validation: { required: true } },\n { name: 'alt', type: 'text', localized: true },\n { name: 'url', type: 'text', validation: { required: true } },\n ],\n}\n\n/** An author collection used as a relation target. */\nexport const authorCollection: CollectionDef = {\n id: 'author',\n kind: 'document',\n titleField: 'name',\n fields: [\n { name: 'name', type: 'text', validation: { required: true } },\n { name: 'bio', type: 'richText' },\n ],\n}\n\n/** A localized blog-post collection exercising every field type. */\nexport const postCollection: CollectionDef = {\n id: 'post',\n kind: 'document',\n localized: true,\n titleField: 'title',\n form: {\n label: 'Posts',\n labelSingular: 'Post',\n groups: ['content', 'meta'],\n tabs: ['main', 'seo'],\n },\n fields: [\n {\n name: 'title',\n type: 'text',\n localized: true,\n validation: { required: true, min: 1, max: 120 },\n form: { label: 'Title', group: 'content', tab: 'main', order: 1 },\n },\n {\n name: 'slug',\n type: 'text',\n validation: { required: true, pattern: '^[a-z0-9-]+$', unique: true },\n form: { label: 'Slug', group: 'content', tab: 'main', order: 2 },\n },\n {\n name: 'body',\n type: 'richText',\n localized: true,\n form: { label: 'Body', group: 'content', tab: 'main', order: 3 },\n },\n {\n name: 'views',\n type: 'number',\n validation: { min: 0 },\n form: { label: 'Views', group: 'meta', tab: 'main' },\n },\n {\n name: 'featured',\n type: 'boolean',\n form: { label: 'Featured', group: 'meta', tab: 'main' },\n },\n {\n name: 'publishedAt',\n type: 'date',\n form: { label: 'Published at', group: 'meta', tab: 'main' },\n },\n {\n name: 'status',\n type: 'select',\n options: [\n { value: 'news', label: 'News' },\n { value: 'guide', label: 'Guide' },\n ],\n form: { label: 'Status', group: 'meta', tab: 'main' },\n },\n {\n name: 'author',\n type: 'relation',\n target: 'author',\n cardinality: 'one',\n validation: { required: true },\n form: { label: 'Author', group: 'meta', tab: 'main' },\n },\n {\n name: 'related',\n type: 'relation',\n target: 'post',\n cardinality: 'many',\n form: { label: 'Related posts', group: 'meta', tab: 'main' },\n },\n {\n name: 'cover',\n type: 'asset',\n cardinality: 'one',\n accept: ['image'],\n form: { label: 'Cover image', group: 'content', tab: 'main' },\n },\n ],\n}\n\n/**\n * EC-187: the `page` collection — a document collection whose body IS a\n * composition (`blocks`) field, surfaced on its own \"Canvas\" fieldset tab\n * (EC-188). This is the config-owned model a routed page document is authored\n * against: `name` (title), the `body` canvas, structured SEO, and a `layoutId`\n * selecting which graph layout wraps the rendered composition at delivery.\n *\n * ADDITIVE + INERT (EC-187 slices 1–3): the collection exists in config so the\n * studio can author page documents and the reference index walks their `body`\n * tree, but NOTHING routes to it yet — the OLD `graph.pages` delivery path stays\n * canonical until the breaking cutover wires routes/host/seed to `page`.\n *\n * The `body` field mirrors the post `content` blocks field EXACTLY (same `allow`\n * code-leashed vocabulary, same `cardinality: 'many'`) so both composition\n * surfaces deliver and index through one identical code path.\n */\nexport const pageCollection: CollectionDef = {\n id: 'page',\n kind: 'document',\n titleField: 'name',\n form: {\n label: 'Pages',\n labelSingular: 'Page',\n tabs: ['main', 'canvas', 'seo'],\n },\n fields: [\n {\n name: 'name',\n type: 'text',\n validation: { required: true },\n form: { tab: 'main' },\n },\n {\n name: 'body',\n type: 'blocks',\n allow: [\n 'base.primitives.Heading',\n 'base.primitives.Text',\n 'base.primitives.Image',\n 'base.primitives.Button',\n 'base.primitives.Stack',\n 'project.MarketingHero',\n 'project.FeatureCard',\n 'project.PricingCallout',\n ],\n cardinality: 'many',\n form: { label: 'Canvas', tab: 'canvas' },\n },\n { name: 'layoutId', type: 'text', form: { tab: 'main' } },\n { name: 'seoTitle', type: 'text', form: { tab: 'seo' } },\n { name: 'seoDescription', type: 'text', form: { tab: 'seo' } },\n { name: 'seoCanonical', type: 'text', form: { tab: 'seo' } },\n { name: 'seoOgTitle', type: 'text', form: { tab: 'seo' } },\n { name: 'seoOgImage', type: 'text', form: { tab: 'seo' } },\n { name: 'seoNoindex', type: 'boolean', form: { tab: 'seo' } },\n ],\n}\n\nexport const sampleCollections: CollectionDef[] = [\n assetCollection,\n authorCollection,\n postCollection,\n pageCollection,\n]\n\n/**\n * The canonical EC-143 `filterable` declarations for the sample model — the\n * single set the seeded schema (`@elytracms/core/persistence`), the accessor\n * fixtures (`@elytracms/core/content`), and the studio sessions share, so the\n * filter/sort pickers and the delivery engine agree on exactly one\n * declaration set (EC-169 fix-pack).\n *\n * Deliberately *not* filterable: `title` (tests prove that filtering a\n * real-but-undeclared field fails as a structured error) and the whole\n * `asset` collection (a collection with no filterable fields).\n */\nexport const sampleFilterableFields: Record<string, readonly string[]> = {\n author: ['name'],\n post: ['slug', 'views', 'featured', 'publishedAt', 'status', 'author'],\n}\n\nfunction withSampleFilterable(collection: CollectionDef): CollectionDef {\n const filterable = new Set(sampleFilterableFields[collection.id] ?? [])\n if (filterable.size === 0) return collection\n return {\n ...collection,\n fields: collection.fields.map((field) =>\n filterable.has(field.name) ? { ...field, filterable: true } : field,\n ),\n }\n}\n\n/**\n * `sampleCollections` with the canonical `filterable` declarations applied —\n * same ids, same field shapes. `sampleCollections` itself stays undeclared on\n * purpose (fixtures proving \"no declarations → nothing offered\" rely on it);\n * schema-bearing surfaces (the persistence seed, accessor fixtures) use this\n * variant.\n */\nexport const sampleFilterableCollections: CollectionDef[] =\n sampleCollections.map(withSampleFilterable)\n\n// ---- Sample documents ----\n\nexport const coverAsset: CmsDocument = {\n collection: 'asset',\n id: 'asset-cover',\n values: { filename: 'cover.png', url: 'https://cdn/cover.png' },\n localized: { en: { alt: 'A cover' }, de: { alt: 'Ein Titelbild' } },\n defaultLocale: 'en',\n}\n\n/**\n * The CMS counterpart of the seeded asset-library record (`@elytracms/core/persistence`\n * `SEED_ASSET`, id `asset_cover` — the EC-152 library). Sharing the library's\n * id means picking that real library asset validates clean against the asset\n * collection (EC-168/EC-172 fix-pack: the seeded post's `cover` previously had\n * no library-matching asset document, so a re-pick failed validation).\n * `coverAsset` above ('asset-cover') intentionally has NO library record — it\n * remains the \"missing asset record\" delivery demo.\n */\nexport const libraryCoverAsset: CmsDocument = {\n collection: 'asset',\n id: 'asset_cover',\n values: { filename: 'cover.jpg', url: 'https://cdn/cover.jpg' },\n localized: { en: { alt: 'Cover image' }, de: { alt: 'Titelbild' } },\n defaultLocale: 'en',\n}\n\nexport const authorAda: CmsDocument = {\n collection: 'author',\n id: 'author-ada',\n values: { name: 'Ada Lovelace', bio: 'Pioneer.' },\n}\n\n/** A valid, localized post that resolves all of its relations/assets. */\nexport const validPost: CmsDocument = {\n collection: 'post',\n id: 'post-hello',\n values: {\n slug: 'hello-world',\n views: 10,\n featured: true,\n publishedAt: '2026-01-02T00:00:00.000Z',\n status: 'news',\n author: { collection: 'author', id: 'author-ada' },\n related: [],\n cover: 'asset-cover',\n },\n localized: {\n en: { title: 'Hello World', body: '<p>Hi</p>' },\n de: { title: 'Hallo Welt', body: '<p>Hallo</p>' },\n },\n defaultLocale: 'en',\n}\n\n/** A post localized only in the default locale (exercises fallback, EC-018). */\nexport const partiallyLocalizedPost: CmsDocument = {\n collection: 'post',\n id: 'post-fallback',\n values: {\n slug: 'fallback',\n author: { collection: 'author', id: 'author-ada' },\n },\n localized: {\n en: { title: 'Only English', body: '<p>en</p>' },\n // no `de` variant — `de` requests must fall back to `en`\n },\n defaultLocale: 'en',\n}\n\n/**\n * The home page as a `page`-collection document (EC-187): `name`, a static\n * `body` composition (no bindings — v1 static props), a `layoutId` selecting the\n * graph layout, and flat `seo*` fields. This is what a routed page resolves to;\n * the catch-all renders `body` into `layoutId` via `renderCompositionInLayout`.\n */\nexport const samplePageHome: CmsDocument = {\n collection: 'page',\n id: 'home',\n values: {\n name: 'Home',\n layoutId: 'layout.main',\n seoTitle: 'Welcome to Elytra',\n seoDescription: 'A code-first website builder.',\n body: [\n {\n id: 'p-home-heading',\n componentId: 'base.primitives.Heading',\n props: {\n level: { kind: 'static', value: 1 },\n text: { kind: 'static', value: 'Welcome to Elytra' },\n },\n },\n {\n id: 'p-home-intro',\n componentId: 'base.primitives.Text',\n props: { value: { kind: 'static', value: 'A code-first website builder.' } },\n },\n ],\n },\n defaultLocale: 'en',\n}\n\nexport const samplePageDocuments: CmsDocument[] = [samplePageHome]\n\nexport const sampleDocuments: CmsDocument[] = [\n coverAsset,\n authorAda,\n validPost,\n partiallyLocalizedPost,\n libraryCoverAsset,\n samplePageHome,\n]\n\n/**\n * The sample documents that are PUBLISHED (EC-224), as an explicit\n * version-POINTER set — computed from each doc's identity, never a flat `state`\n * flag, so it survives the field's removal (B-3c-4). Seeds pin exactly these;\n * the playground/preview treat exactly these as live. (Every current sample doc\n * is published; a future draft sample would be omitted here.)\n */\nexport const samplePublishedKeys: readonly string[] = sampleDocuments.map((doc) =>\n documentKey(refOf(doc)),\n)\n\n// ---- Sample routes & redirects ----\n\nexport const sampleRoutes: RouteRecord[] = [\n { id: 'r-home', pattern: '/', locale: 'en', document: { collection: 'page', id: 'home' } },\n { id: 'r-home-de', pattern: '/', locale: 'de', document: { collection: 'page', id: 'home' } },\n {\n id: 'r-post',\n pattern: '/blog/:slug',\n locale: 'en',\n document: { collection: 'post', id: ':slug' },\n },\n {\n id: 'r-about',\n pattern: '/about',\n locale: 'en',\n document: { collection: 'post', id: 'post-hello' },\n },\n]\n\nexport const sampleRedirects: RedirectRecord[] = [\n { id: 'rd-1', from: '/old', to: '/about', permanent: true },\n { id: 'rd-chain-1', from: '/a', to: '/b', permanent: true },\n { id: 'rd-chain-2', from: '/b', to: '/c', permanent: true },\n { id: 'rd-chain-3', from: '/c', to: '/about', permanent: false },\n]\n\n/** Two routes that match the exact same concrete URLs (EC-020 conflict). */\nexport const conflictingRoutes: RouteRecord[] = [\n {\n id: 'r-a',\n pattern: '/blog/:slug',\n locale: 'en',\n document: { collection: 'post', id: ':slug' },\n },\n { id: 'r-b', pattern: '/blog/:id', locale: 'en', document: { collection: 'post', id: ':id' } },\n]\n\n/** A redirect loop (EC-020). */\nexport const loopingRedirects: RedirectRecord[] = [\n { id: 'l1', from: '/x', to: '/y', permanent: true },\n { id: 'l2', from: '/y', to: '/x', permanent: true },\n]\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hierarchy.js","sourceRoot":"","sources":["../../src/cms-core/hierarchy.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"hierarchy.js","sourceRoot":"","sources":["../../src/cms-core/hierarchy.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAyBpC,MAAM,oBAAoB,GAAG,QAAQ,CAAA;AACrC,MAAM,kBAAkB,GAAG,MAAM,CAAA;AAEjC,qEAAqE;AACrE,MAAM,UAAU,eAAe,CAAC,SAA0B,EAAE;IAI1D,OAAO;QACL,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,oBAAoB;QACvD,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,kBAAkB;KAClD,CAAA;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CACjC,UAAyB,EACzB,SAA0B,EAAE;IAE5B,MAAM,EAAE,WAAW,EAAE,GAAG,eAAe,CAAC,MAAM,CAAC,CAAA;IAC/C,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAA;IACnE,IACE,KAAK;QACL,KAAK,CAAC,IAAI,KAAK,UAAU;QACzB,KAAK,CAAC,MAAM,KAAK,UAAU,CAAC,EAAE;QAC9B,KAAK,CAAC,WAAW,KAAK,KAAK,EAC3B,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,cAAc,CAAC,UAAyB,EAAE,SAA0B,EAAE;IACpF,OAAO,mBAAmB,CAAC,UAAU,EAAE,MAAM,CAAC,KAAK,SAAS,CAAA;AAC9D,CAAC;AAED,4FAA4F;AAC5F,SAAS,YAAY,CAAC,GAAgB,EAAE,WAAmB;IACzD,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;IACrC,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,SAAS,CAAA;IACnC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAA;IAC1E,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,IAAI,IAAI,KAAK,EAAE,CAAC;QAC/C,MAAM,EAAE,GAAI,KAA0B,CAAC,EAAE,CAAA;QACzC,OAAO,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;IACjE,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,2EAA2E;AAC3E,SAAS,QAAQ,CAAC,GAAgB,EAAE,SAAiB;IACnD,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;IACnC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAA;AAC1E,CAAC;AAeD;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CACzB,GAAgB,EAChB,OAAgD,EAChD,SAA0B,EAAE;IAE5B,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,eAAe,CAAC,MAAM,CAAC,CAAA;IAC1D,MAAM,QAAQ,GAAa,EAAE,CAAA;IAC7B,MAAM,IAAI,GAAG,IAAI,GAAG,CAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;IACtC,IAAI,KAAK,GAAG,KAAK,CAAA;IACjB,IAAI,WAAW,GAAG,KAAK,CAAA;IACvB,IAAI,cAAc,GAAG,KAAK,CAAA;IAC1B,IAAI,OAAO,GAA4B,GAAG,CAAA;IAC1C,OAAO,OAAO,EAAE,CAAC;QACf,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;QACzC,IAAI,IAAI,KAAK,SAAS;YAAE,WAAW,GAAG,IAAI,CAAA;;YACrC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QAC3B,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,EAAE,WAAW,CAAC,CAAA;QACnD,IAAI,QAAQ,KAAK,SAAS;YAAE,MAAK;QACjC,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;QAChC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,cAAc,GAAG,IAAI,CAAA;YACrB,MAAK;QACP,CAAC;QACD,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;YACxB,KAAK,GAAG,IAAI,CAAA;YACZ,MAAK;QACP,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QACnB,OAAO,GAAG,MAAM,CAAA;IAClB,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC,WAAW,IAAI,CAAC,cAAc,EAAE,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,CAAA;AACxG,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,cAAc,CAC5B,GAAgB,EAChB,OAAgD,EAChD,SAA0B,EAAE;IAE5B,OAAO,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,KAAK,CAAA;AAChD,CAAC;AAUD;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CACjC,IAA4B,EAC5B,SAA0B,EAAE;IAE5B,MAAM,EAAE,WAAW,EAAE,GAAG,eAAe,CAAC,MAAM,CAAC,CAAA;IAC/C,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;IAChD,uEAAuE;IACvE,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAgC,CAAA;IACxD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,EAAE,WAAW,CAAC,CAAA;QAC/C,MAAM,GAAG,GAAG,QAAQ,IAAI,IAAI,IAAI,QAAQ,KAAK,GAAG,CAAC,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAA;QAC3F,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAChC,IAAI,MAAM;YAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;;YACvB,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;IAC/B,CAAC;IACD,MAAM,IAAI,GAAmB,EAAE,CAAA;IAC/B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAA;IACjC,MAAM,IAAI,GAAG,CAAC,SAAwB,EAAE,KAAa,EAAQ,EAAE;QAC7D,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC;YAChD,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAAE,SAAQ;YACjC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YACnB,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YAC/E,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,GAAG,CAAC,CAAC,CAAA;QACzB,CAAC;IACH,CAAC,CAAA;IACD,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;IACb,6EAA6E;IAC7E,0EAA0E;IAC1E,mFAAmF;IACnF,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YACnB,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACpF,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAC3B,MAAc,EACd,IAA4B,EAC5B,SAA0B,EAAE;IAE5B,MAAM,EAAE,WAAW,EAAE,GAAG,eAAe,CAAC,MAAM,CAAC,CAAA;IAC/C,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAyB,CAAA;IACjD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,EAAE,WAAW,CAAC,CAAA;QAC/C,IAAI,QAAQ,IAAI,IAAI;YAAE,SAAQ;QAC9B,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QACrC,IAAI,MAAM;YAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;;YACvB,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;IACpC,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAA;IAC7B,MAAM,KAAK,GAAa,CAAC,MAAM,CAAC,CAAA;IAChC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,EAAE,GAAG,KAAK,CAAC,GAAG,EAAG,CAAA;QACvB,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;YAC3C,IAAI,KAAK,CAAC,EAAE,KAAK,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC9C,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;gBACjB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;YACtB,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAkB;IACpD,IAAI,CAAC,KAAK,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAA;IACjC,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IACzC,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAC1C,OAAO,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;AACzE,CAAC;AAWD;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,KAAkB;IAC/C,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAA;IACpE,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IACpD,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QAAE,OAAO,SAAS,CAAA;IACvE,OAAO;QACL,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,UAAU;QACrC,MAAM;QACN,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAClD,CAAA;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAC3B,QAA2B,EAC3B,IAA4B,EAC5B,SAA0B,EAAE;IAE5B,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAA;IAC3C,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;IAChD,MAAM,OAAO,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IAC5C,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACjC,IAAI,KAA8B,CAAA;IAClC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;QAClD,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,SAAQ;QAC1B,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,MAAM,IAAI,CAAC,CAAC,KAAK,IAAI,GAAG,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;YAC5E,KAAK,GAAG,GAAG,CAAA;QACb,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC","sourcesContent":["import type { CollectionDef } from './collections'\nimport type { CmsDocument } from './documents'\nimport type { RelationFieldDef } from './fields'\nimport type { RouteRecord } from './routes'\nimport { splitPath } from './routes'\n\n/**\n * Page hierarchy (EC-218, vision §3.4 / AD-6).\n *\n * A routable collection models nesting with a **`parent` self-relation** + a\n * local **`slug`** — never a stored full path. The full nested URL is *composed*\n * by walking the parent chain (the Payload nested-docs / Sanity page-tree\n * pattern), so moving or renaming a parent re-derives every descendant's URL\n * with no denormalized bulk rewrite. Every walk here is cycle-safe by\n * construction: a parent chain that loops stops at the repeat and is surfaced as\n * a structured issue, never an infinite loop or a crash.\n *\n * The slug is read non-localized (one segment per document, per the EC-218\n * decision); locale-specific routes are still expressed by the route record's\n * own `locale`.\n */\n\nexport interface HierarchyConfig {\n /** Self-relation field naming a document's parent (default `parent`). */\n parentField?: string\n /** Text field holding the local URL segment (default `slug`). */\n slugField?: string\n}\n\nconst DEFAULT_PARENT_FIELD = 'parent'\nconst DEFAULT_SLUG_FIELD = 'slug'\n\n/** Resolve a {@link HierarchyConfig} to its concrete field names. */\nexport function hierarchyFields(config: HierarchyConfig = {}): {\n parentField: string\n slugField: string\n} {\n return {\n parentField: config.parentField ?? DEFAULT_PARENT_FIELD,\n slugField: config.slugField ?? DEFAULT_SLUG_FIELD,\n }\n}\n\n/**\n * The self-relation field that names a document's parent, if this collection\n * declares one: a single-valued `relation` field, named per the config, whose\n * target is the collection itself.\n */\nexport function parentRelationField(\n collection: CollectionDef,\n config: HierarchyConfig = {},\n): RelationFieldDef | undefined {\n const { parentField } = hierarchyFields(config)\n const field = collection.fields.find((f) => f.name === parentField)\n if (\n field &&\n field.type === 'relation' &&\n field.target === collection.id &&\n field.cardinality === 'one'\n ) {\n return field\n }\n return undefined\n}\n\n/** Does this collection model a parent/child hierarchy (a `parent` self-relation)? */\nexport function isHierarchical(collection: CollectionDef, config: HierarchyConfig = {}): boolean {\n return parentRelationField(collection, config) !== undefined\n}\n\n/** The parent document id from a `one` self-relation value (a `DocumentRef` or bare id). */\nfunction readParentId(doc: CmsDocument, parentField: string): string | undefined {\n const value = doc.values[parentField]\n if (value == null) return undefined\n if (typeof value === 'string') return value.length > 0 ? value : undefined\n if (typeof value === 'object' && 'id' in value) {\n const id = (value as { id?: unknown }).id\n return typeof id === 'string' && id.length > 0 ? id : undefined\n }\n return undefined\n}\n\n/** The local slug segment of a document, or undefined when unset/empty. */\nfunction readSlug(doc: CmsDocument, slugField: string): string | undefined {\n const value = doc.values[slugField]\n return typeof value === 'string' && value.length > 0 ? value : undefined\n}\n\nexport interface ComposedPath {\n /** Slug segments from root to leaf. */\n segments: string[]\n /** True iff the path is clean: no cycle, no missing slug, no dangling parent. */\n ok: boolean\n /** The parent chain loops. */\n cycle: boolean\n /** A document in the chain (this one or an ancestor) has no slug. */\n missingSlug: boolean\n /** A parent ref pointed at a document that is not present. */\n danglingParent: boolean\n}\n\n/**\n * Compose a document's full path segments by walking its parent chain from the\n * leaf up, then ordering root → leaf. Cycle-safe: revisiting a document stops\n * the walk and flags `cycle`. `getById` looks documents up *within the same\n * collection* (a self-relation never crosses collections).\n */\nexport function composePath(\n doc: CmsDocument,\n getById: (id: string) => CmsDocument | undefined,\n config: HierarchyConfig = {},\n): ComposedPath {\n const { parentField, slugField } = hierarchyFields(config)\n const segments: string[] = []\n const seen = new Set<string>([doc.id])\n let cycle = false\n let missingSlug = false\n let danglingParent = false\n let current: CmsDocument | undefined = doc\n while (current) {\n const slug = readSlug(current, slugField)\n if (slug === undefined) missingSlug = true\n else segments.unshift(slug)\n const parentId = readParentId(current, parentField)\n if (parentId === undefined) break\n const parent = getById(parentId)\n if (!parent) {\n danglingParent = true\n break\n }\n if (seen.has(parent.id)) {\n cycle = true\n break\n }\n seen.add(parent.id)\n current = parent\n }\n return { segments, ok: !cycle && !missingSlug && !danglingParent, cycle, missingSlug, danglingParent }\n}\n\n/** Does a document's parent chain loop? (cycle-safe; uses {@link composePath}). */\nexport function hasParentCycle(\n doc: CmsDocument,\n getById: (id: string) => CmsDocument | undefined,\n config: HierarchyConfig = {},\n): boolean {\n return composePath(doc, getById, config).cycle\n}\n\nexport interface HierarchyRow {\n doc: CmsDocument\n /** Nesting depth: 0 for roots, 1 for their children, … */\n depth: number\n /** Whether this document has at least one child. */\n hasChildren: boolean\n}\n\n/**\n * Order documents as a depth-first hierarchy (parents immediately before their\n * children, siblings in input order), annotating each with its depth. Roots are\n * documents with no parent, or whose parent is absent (orphans surface at the\n * root). Cycle-safe: documents trapped in a parent cycle are never lost — they\n * are appended at depth 0 rather than recursed into. The read-side of the\n * hierarchical list view (EC-218).\n */\nexport function orderHierarchically(\n docs: readonly CmsDocument[],\n config: HierarchyConfig = {},\n): HierarchyRow[] {\n const { parentField } = hierarchyFields(config)\n const byId = new Map(docs.map((d) => [d.id, d]))\n // Bucket each document under its effective parent key (null = a root).\n const children = new Map<string | null, CmsDocument[]>()\n for (const doc of docs) {\n const parentId = readParentId(doc, parentField)\n const key = parentId != null && parentId !== doc.id && byId.has(parentId) ? parentId : null\n const bucket = children.get(key)\n if (bucket) bucket.push(doc)\n else children.set(key, [doc])\n }\n const rows: HierarchyRow[] = []\n const visited = new Set<string>()\n const walk = (parentKey: string | null, depth: number): void => {\n for (const doc of children.get(parentKey) ?? []) {\n if (visited.has(doc.id)) continue\n visited.add(doc.id)\n rows.push({ doc, depth, hasChildren: (children.get(doc.id)?.length ?? 0) > 0 })\n walk(doc.id, depth + 1)\n }\n }\n walk(null, 0)\n // Any document not reached from a root is trapped in a cycle — surface it at\n // the root so the list never silently drops a document. It may still have\n // (cycle-trapped) children, so report hasChildren the same way the main walk does.\n for (const doc of docs) {\n if (!visited.has(doc.id)) {\n visited.add(doc.id)\n rows.push({ doc, depth: 0, hasChildren: (children.get(doc.id)?.length ?? 0) > 0 })\n }\n }\n return rows\n}\n\n/**\n * The ids of every descendant of `rootId` (children, grandchildren, …). Used to\n * keep a `parent` picker from offering a document its own subtree — which would\n * create a cycle. Excludes `rootId` itself; cycle-safe.\n */\nexport function descendantIds(\n rootId: string,\n docs: readonly CmsDocument[],\n config: HierarchyConfig = {},\n): Set<string> {\n const { parentField } = hierarchyFields(config)\n const children = new Map<string, CmsDocument[]>()\n for (const doc of docs) {\n const parentId = readParentId(doc, parentField)\n if (parentId == null) continue\n const bucket = children.get(parentId)\n if (bucket) bucket.push(doc)\n else children.set(parentId, [doc])\n }\n const out = new Set<string>()\n const stack: string[] = [rootId]\n while (stack.length > 0) {\n const id = stack.pop()!\n for (const child of children.get(id) ?? []) {\n if (child.id !== rootId && !out.has(child.id)) {\n out.add(child.id)\n stack.push(child.id)\n }\n }\n }\n return out\n}\n\n/**\n * Is this route a hierarchy mount? — its pattern ends with a catch-all param\n * segment (`:name*`), declaring \"this collection's documents are served by their\n * composed nested paths under this prefix\" (EC-218). The host pulls these out of\n * the router and resolves them per-request with {@link resolveByPath}, so the\n * URL→document mapping stays perspective-aware (draft vs published) and the path\n * stays derived, never stored.\n */\nexport function isHierarchyTemplate(route: RouteRecord): boolean {\n if (!route.document) return false\n const segments = splitPath(route.pattern)\n const last = segments[segments.length - 1]\n return last !== undefined && last.startsWith(':') && last.endsWith('*')\n}\n\nexport interface HierarchyMount {\n /** The collection whose documents are served by composed path. */\n collection: string\n /** Static URL segments before the catch-all (empty = mounted at the root). */\n prefix: string[]\n /** Locale this mount serves, if the template declared one. */\n locale?: string\n}\n\n/**\n * Parse a hierarchy mount from a catch-all template route (EC-218), or undefined\n * when the route is not a valid mount (not a catch-all, or its prefix contains a\n * dynamic segment, which a composed-path mount does not support).\n */\nexport function hierarchyMount(route: RouteRecord): HierarchyMount | undefined {\n if (!isHierarchyTemplate(route) || !route.document) return undefined\n const prefix = splitPath(route.pattern).slice(0, -1)\n if (prefix.some((segment) => segment.startsWith(':'))) return undefined\n return {\n collection: route.document.collection,\n prefix,\n ...(route.locale ? { locale: route.locale } : {}),\n }\n}\n\n/**\n * Resolve a path (its slug segments, prefix already stripped) to the one document\n * whose composed nested path matches (EC-218). The caller supplies the documents\n * already selected for the active perspective (draft/published), so resolution is\n * perspective-aware. Documents with a broken or cyclic chain never match.\n * Deterministic on the rare duplicate composed path: the lowest id wins (the same\n * tie-break the single-slug fallback uses).\n */\nexport function resolveByPath(\n segments: readonly string[],\n docs: readonly CmsDocument[],\n config: HierarchyConfig = {},\n): CmsDocument | undefined {\n if (segments.length === 0) return undefined\n const byId = new Map(docs.map((d) => [d.id, d]))\n const getById = (id: string) => byId.get(id)\n const target = segments.join('/')\n let match: CmsDocument | undefined\n for (const doc of docs) {\n const composed = composePath(doc, getById, config)\n if (!composed.ok) continue\n if (composed.segments.join('/') === target && (!match || doc.id < match.id)) {\n match = doc\n }\n }\n return match\n}\n"]}
|
package/dist/cms-core/index.d.ts
CHANGED
|
@@ -9,8 +9,10 @@
|
|
|
9
9
|
*/
|
|
10
10
|
export declare const PACKAGE = "@elytracms/core/cms-core";
|
|
11
11
|
export * from './issues';
|
|
12
|
+
export * from './nesting-depth';
|
|
12
13
|
export * from './fields';
|
|
13
14
|
export * from './collections';
|
|
15
|
+
export * from './collection-shape';
|
|
14
16
|
export * from './documents';
|
|
15
17
|
export * from './envelopes';
|
|
16
18
|
export * from './self-type';
|
package/dist/cms-core/index.js
CHANGED
|
@@ -9,8 +9,10 @@
|
|
|
9
9
|
*/
|
|
10
10
|
export const PACKAGE = '@elytracms/core/cms-core';
|
|
11
11
|
export * from './issues';
|
|
12
|
+
export * from './nesting-depth';
|
|
12
13
|
export * from './fields';
|
|
13
14
|
export * from './collections';
|
|
15
|
+
export * from './collection-shape';
|
|
14
16
|
export * from './documents';
|
|
15
17
|
export * from './envelopes';
|
|
16
18
|
export * from './self-type';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cms-core/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,0BAA0B,CAAA;AAEjD,cAAc,UAAU,CAAA;AACxB,cAAc,UAAU,CAAA;AACxB,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,qBAAqB,CAAA;AACnC,cAAc,SAAS,CAAA;AACvB,cAAc,eAAe,CAAA;AAC7B,cAAc,UAAU,CAAA;AACxB,cAAc,aAAa,CAAA;AAC3B,cAAc,oBAAoB,CAAA;AAClC,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cms-core/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,0BAA0B,CAAA;AAEjD,cAAc,UAAU,CAAA;AACxB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,UAAU,CAAA;AACxB,cAAc,eAAe,CAAA;AAC7B,cAAc,oBAAoB,CAAA;AAClC,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,qBAAqB,CAAA;AACnC,cAAc,SAAS,CAAA;AACvB,cAAc,eAAe,CAAA;AAC7B,cAAc,UAAU,CAAA;AACxB,cAAc,aAAa,CAAA;AAC3B,cAAc,oBAAoB,CAAA;AAClC,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA","sourcesContent":["/**\n * @elytracms/cms-core — provider-neutral, schema-driven CMS primitives (brief §7.4).\n *\n * Collections & fields, relations & assets, localization, route/redirect\n * resolution, conflict & loop detection, and draft/published + version history.\n * Reuses canonical types from `@elytracms/core/project-graph` and mirrors its\n * structured-issue conventions (brief §4.11): invalid states are explicit\n * `CmsValidationIssue`s, never silent failures or crashes.\n */\nexport const PACKAGE = '@elytracms/core/cms-core'\n\nexport * from './issues'\nexport * from './nesting-depth'\nexport * from './fields'\nexport * from './collections'\nexport * from './collection-shape'\nexport * from './documents'\nexport * from './envelopes'\nexport * from './self-type'\nexport * from './localization'\nexport * from './validate-document'\nexport * from './infer'\nexport * from './json-schema'\nexport * from './routes'\nexport * from './hierarchy'\nexport * from './url-for-document'\nexport * from './versions'\nexport * from './fixtures'\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"infer.js","sourceRoot":"","sources":["../../src/cms-core/infer.ts"],"names":[],"mappings":"AA0GA,SAAS,WAAW,CAAC,KAA4C;IAC/D,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAC3E,OAAO,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAA;AAChD,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,iBAAiB,CAAC,KAAe;IAC/C,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,EAAE,QAAQ,KAAK,IAAI,CAAA;IACpD,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,KAAK,IAAI,CAAA;IAC1C,MAAM,IAAI,GAAG,GAAW,EAAE;QACxB,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,MAAM,CAAC;YACZ,KAAK,UAAU;gBACb,OAAO,QAAQ,CAAA;YACjB,KAAK,QAAQ;gBACX,OAAO,QAAQ,CAAA;YACjB,KAAK,SAAS;gBACZ,OAAO,SAAS,CAAA;YAClB,KAAK,MAAM;gBACT,OAAO,iBAAiB,CAAA;YAC1B,KAAK,QAAQ;gBACX,OAAO,WAAW,CAAC,KAAK,CAAC,CAAA;YAC3B,KAAK,UAAU;gBACb,OAAO,KAAK,CAAC,WAAW,KAAK,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,aAAa,CAAA;YACvE,KAAK,OAAO;gBACV,OAAO,KAAK,CAAC,WAAW,KAAK,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAA;YAC7D,KAAK,QAAQ;gBACX,yEAAyE;gBACzE,uEAAuE;gBACvE,kEAAkE;gBAClE,OAAO,KAAK,CAAC,WAAW,KAAK,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAA;YAC/D,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,uEAAuE;gBACvE,gEAAgE;gBAChE,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM;qBACvB,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;oBACX,MAAM,EAAE,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAA;oBACjC,OAAO,GAAG,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,CAAA;gBAC7D,CAAC,CAAC;qBACD,IAAI,CAAC,IAAI,CAAC,CAAA;gBACb,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,yBAAyB,CAAA;gBACvF,OAAO,KAAK,CAAC,WAAW,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,UAAU,GAAG,CAAC,CAAC,CAAC,UAAU,CAAA;YAC3E,CAAC;YACD,OAAO,CAAC,CAAC,CAAC;gBACR,mEAAmE;gBACnE,MAAM,WAAW,GAAU,KAAK,CAAA;gBAChC,KAAK,WAAW,CAAA;gBAChB,OAAO,SAAS,CAAA;YAClB,CAAC;QACH,CAAC;IACH,CAAC,CAAA;IACD,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAA;AAClE,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,oBAAoB,CAAC,UAAyB;IAC5D,OAAO,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAA;AACjD,CAAC"}
|
|
1
|
+
{"version":3,"file":"infer.js","sourceRoot":"","sources":["../../src/cms-core/infer.ts"],"names":[],"mappings":"AA0GA,SAAS,WAAW,CAAC,KAA4C;IAC/D,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAC3E,OAAO,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAA;AAChD,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,iBAAiB,CAAC,KAAe;IAC/C,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,EAAE,QAAQ,KAAK,IAAI,CAAA;IACpD,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,KAAK,IAAI,CAAA;IAC1C,MAAM,IAAI,GAAG,GAAW,EAAE;QACxB,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,MAAM,CAAC;YACZ,KAAK,UAAU;gBACb,OAAO,QAAQ,CAAA;YACjB,KAAK,QAAQ;gBACX,OAAO,QAAQ,CAAA;YACjB,KAAK,SAAS;gBACZ,OAAO,SAAS,CAAA;YAClB,KAAK,MAAM;gBACT,OAAO,iBAAiB,CAAA;YAC1B,KAAK,QAAQ;gBACX,OAAO,WAAW,CAAC,KAAK,CAAC,CAAA;YAC3B,KAAK,UAAU;gBACb,OAAO,KAAK,CAAC,WAAW,KAAK,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,aAAa,CAAA;YACvE,KAAK,OAAO;gBACV,OAAO,KAAK,CAAC,WAAW,KAAK,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAA;YAC7D,KAAK,QAAQ;gBACX,yEAAyE;gBACzE,uEAAuE;gBACvE,kEAAkE;gBAClE,OAAO,KAAK,CAAC,WAAW,KAAK,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAA;YAC/D,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,uEAAuE;gBACvE,gEAAgE;gBAChE,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM;qBACvB,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;oBACX,MAAM,EAAE,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAA;oBACjC,OAAO,GAAG,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,CAAA;gBAC7D,CAAC,CAAC;qBACD,IAAI,CAAC,IAAI,CAAC,CAAA;gBACb,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,yBAAyB,CAAA;gBACvF,OAAO,KAAK,CAAC,WAAW,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,UAAU,GAAG,CAAC,CAAC,CAAC,UAAU,CAAA;YAC3E,CAAC;YACD,OAAO,CAAC,CAAC,CAAC;gBACR,mEAAmE;gBACnE,MAAM,WAAW,GAAU,KAAK,CAAA;gBAChC,KAAK,WAAW,CAAA;gBAChB,OAAO,SAAS,CAAA;YAClB,CAAC;QACH,CAAC;IACH,CAAC,CAAA;IACD,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAA;AAClE,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,oBAAoB,CAAC,UAAyB;IAC5D,OAAO,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAA;AACjD,CAAC","sourcesContent":["import type { CollectionDef } from './collections'\nimport type { DocumentRef } from './documents'\nimport type { FieldDef } from './fields'\n\n/**\n * Map a single field definition to its inferred runtime TS type. Relations\n * resolve to `DocumentRef`(s), assets to asset-id string(s), select to its\n * option-value union, etc. (EC-016: \"inferred TS types\").\n *\n * This is a *type-level* mapping consumed via `InferDocument<C>`. Cardinality\n * (`one` vs `many`) widens to an array.\n */\nexport type InferFieldValue<F extends FieldDef> = F extends { type: 'text' }\n ? string\n : F extends { type: 'richText' }\n ? string\n : F extends { type: 'number' }\n ? number\n : F extends { type: 'boolean' }\n ? boolean\n : F extends { type: 'date' }\n ? string | number\n : F extends { type: 'select'; options: infer O; multiple: infer M }\n ? O extends ReadonlyArray<{ value: infer V }>\n ? M extends true\n ? V[]\n : V\n : string\n : F extends { type: 'relation'; cardinality: infer C }\n ? C extends 'many'\n ? DocumentRef[]\n : DocumentRef\n : F extends { type: 'asset'; cardinality: infer AC }\n ? AC extends 'many'\n ? string[]\n : string\n : F extends { type: 'object'; cardinality: infer OC }\n ? // EC-253: the value is a nested object (or array of them). Kept\n // loose at the type level (`Record<string, unknown>`) — precise\n // nested inference is a deliberate follow-up to avoid deep\n // recursive instantiation; the runtime descriptor IS precise.\n OC extends 'many'\n ? Record<string, unknown>[]\n : Record<string, unknown>\n : unknown\n\n/** The union of all field definitions in a collection literal. */\ntype FieldUnion<C extends { fields: readonly FieldDef[] }> = C['fields'][number]\n\n/** Names of all fields. */\ntype FieldNames<C extends { fields: readonly FieldDef[] }> = FieldUnion<C> extends {\n name: infer N extends string\n}\n ? N\n : never\n\n/** Names of required fields (validation.required === true). */\ntype RequiredFieldNames<C extends { fields: readonly FieldDef[] }> = Extract<\n FieldUnion<C>,\n { validation: { required: true } }\n> extends { name: infer N extends string }\n ? N\n : never\n\n/** Names of optional fields (everything that isn't required). */\ntype OptionalFieldNames<C extends { fields: readonly FieldDef[] }> = Exclude<\n FieldNames<C>,\n RequiredFieldNames<C>\n>\n\n/** The inferred value type of the field named `N` in collection `C`. */\ntype ValueOfField<C extends { fields: readonly FieldDef[] }, N extends string> = InferFieldValue<\n Extract<FieldUnion<C>, { name: N }>\n>\n\n/**\n * Infer the TS shape of a document for a collection literal (EC-016). Use with\n * `as const` collection definitions to get a precise type:\n *\n * ```ts\n * const post = { id: 'post', kind: 'document', fields: [...] } as const\n * type Post = InferDocument<typeof post>\n * ```\n *\n * Required fields are required; the rest are optional. The value of each field\n * is correlated to that field by name (not positionally), so per-field types are\n * preserved precisely.\n */\nexport type InferDocument<C extends { fields: readonly FieldDef[] }> = {\n [N in RequiredFieldNames<C>]: ValueOfField<C, N>\n} & {\n [N in OptionalFieldNames<C>]?: ValueOfField<C, N>\n}\n\n/**\n * A runtime descriptor of a field's inferred type — useful for codegen and\n * tooling that can't consume the type-level `InferDocument` (EC-016).\n */\nexport interface InferredFieldType {\n name: string\n /** TS type expression, e.g. `string`, `DocumentRef[]`, `'a' | 'b'`. */\n tsType: string\n optional: boolean\n localized: boolean\n}\n\nfunction selectUnion(field: Extract<FieldDef, { type: 'select' }>): string {\n const union = field.options.map((o) => JSON.stringify(o.value)).join(' | ')\n return field.multiple ? `(${union})[]` : union\n}\n\n/** Produce a runtime descriptor of a field's inferred TS type. */\nexport function inferredFieldType(field: FieldDef): InferredFieldType {\n const optional = field.validation?.required !== true\n const localized = field.localized === true\n const base = (): 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 field.cardinality === 'many' ? 'DocumentRef[]' : 'DocumentRef'\n case 'asset':\n return field.cardinality === 'many' ? 'string[]' : 'string'\n case 'blocks':\n // Composition value (EC-186): an opaque tree to delivery consumers — the\n // host renders it through the canvas engine. EC-187/188 refine this to\n // the composition value type once compositions live in documents.\n return field.cardinality === 'many' ? 'unknown[]' : 'unknown'\n case 'object': {\n // EC-253: a precise nested object type expression (the repeater's item\n // shape), `Array<...>` for `many`. Recurses for nested objects.\n const shape = field.fields\n .map((sub) => {\n const st = inferredFieldType(sub)\n return `${sub.name}${st.optional ? '?' : ''}: ${st.tsType}`\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 return { name: field.name, tsType: base(), optional, localized }\n}\n\n/** Runtime descriptors for every field in a collection (EC-016). */\nexport function inferCollectionTypes(collection: CollectionDef): InferredFieldType[] {\n return collection.fields.map(inferredFieldType)\n}\n"]}
|
|
@@ -27,6 +27,11 @@ export declare const cmsIssueCodeSchema: z.ZodEnum<{
|
|
|
27
27
|
"redirect-loop": "redirect-loop";
|
|
28
28
|
"unknown-route-target": "unknown-route-target";
|
|
29
29
|
"hierarchy-cycle": "hierarchy-cycle";
|
|
30
|
+
"document-nesting-depth": "document-nesting-depth";
|
|
31
|
+
"singleton-document-drift": "singleton-document-drift";
|
|
32
|
+
"duplicate-alias": "duplicate-alias";
|
|
33
|
+
"unknown-alias": "unknown-alias";
|
|
34
|
+
"unfilled-slot": "unfilled-slot";
|
|
30
35
|
"unknown-version": "unknown-version";
|
|
31
36
|
}>;
|
|
32
37
|
export type CmsIssueCode = z.infer<typeof cmsIssueCodeSchema>;
|
|
@@ -63,6 +68,11 @@ export declare const cmsValidationIssueSchema: z.ZodObject<{
|
|
|
63
68
|
"redirect-loop": "redirect-loop";
|
|
64
69
|
"unknown-route-target": "unknown-route-target";
|
|
65
70
|
"hierarchy-cycle": "hierarchy-cycle";
|
|
71
|
+
"document-nesting-depth": "document-nesting-depth";
|
|
72
|
+
"singleton-document-drift": "singleton-document-drift";
|
|
73
|
+
"duplicate-alias": "duplicate-alias";
|
|
74
|
+
"unknown-alias": "unknown-alias";
|
|
75
|
+
"unfilled-slot": "unfilled-slot";
|
|
66
76
|
"unknown-version": "unknown-version";
|
|
67
77
|
}>;
|
|
68
78
|
severity: z.ZodEnum<{
|
package/dist/cms-core/issues.js
CHANGED
|
@@ -34,6 +34,19 @@ export const cmsIssueCodeSchema = z.enum([
|
|
|
34
34
|
'unknown-route-target',
|
|
35
35
|
// page hierarchy (EC-218): a parent chain that loops
|
|
36
36
|
'hierarchy-cycle',
|
|
37
|
+
// storage limits (EC-260): a document blob nests too deeply for the backend
|
|
38
|
+
// (Convex's 16-level ceiling) — surfaced pre-write instead of a silent WARN
|
|
39
|
+
'document-nesting-depth',
|
|
40
|
+
// singleton drift (EC-274): a singleton collection holds more than one document
|
|
41
|
+
// — the studio shows the list with the outliers in a "for review" lane instead
|
|
42
|
+
// of skipping, so an editor resolves it without a developer
|
|
43
|
+
'singleton-document-drift',
|
|
44
|
+
// alias / slot drift (EC-284): a collection addresses documents by named slots;
|
|
45
|
+
// two documents claim the same slot, a document's alias isn't a declared slot,
|
|
46
|
+
// or a declared slot has no document. Surfaced in the same "for review" lane.
|
|
47
|
+
'duplicate-alias',
|
|
48
|
+
'unknown-alias',
|
|
49
|
+
'unfilled-slot',
|
|
37
50
|
// versions (EC-021)
|
|
38
51
|
'unknown-version',
|
|
39
52
|
]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"issues.js","sourceRoot":"","sources":["../../src/cms-core/issues.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,IAAI,CAAC;IACvC,gCAAgC;IAChC,sBAAsB;IACtB,iBAAiB;IACjB,oBAAoB;IACpB,2BAA2B;IAC3B,sBAAsB;IACtB,gFAAgF;IAChF,qBAAqB;IACrB,wBAAwB;IACxB,qBAAqB;IACrB,8BAA8B;IAC9B,yBAAyB;IACzB,8DAA8D;IAC9D,6BAA6B;IAC7B,uBAAuB;IACvB,eAAe;IACf,oBAAoB;IACpB,wBAAwB;IACxB,gBAAgB;IAChB,yBAAyB;IACzB,mDAAmD;IACnD,gBAAgB;IAChB,eAAe;IACf,sBAAsB;IACtB,qDAAqD;IACrD,iBAAiB;IACjB,oBAAoB;IACpB,iBAAiB;CAClB,CAAC,CAAA;AAGF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAA;AAMlE;;;;GAIG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,IAAI,EAAE,kBAAkB;IACxB,QAAQ,EAAE,sBAAsB;IAChC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,gFAAgF;IAChF,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAChD,oDAAoD;IACpD,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC,kDAAkD;IAClD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;CACnD,CAAC,CAAA;AAeF,wEAAwE;AACxE,MAAM,UAAU,QAAQ,CAAC,IAAkB;IACzC,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,OAAO;QAClC,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;QACpB,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjE,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC1C,CAAA;AACH,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,UAAU,CAAC,MAAqC;IAC9D,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAA;AACpD,CAAC"}
|
|
1
|
+
{"version":3,"file":"issues.js","sourceRoot":"","sources":["../../src/cms-core/issues.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,IAAI,CAAC;IACvC,gCAAgC;IAChC,sBAAsB;IACtB,iBAAiB;IACjB,oBAAoB;IACpB,2BAA2B;IAC3B,sBAAsB;IACtB,gFAAgF;IAChF,qBAAqB;IACrB,wBAAwB;IACxB,qBAAqB;IACrB,8BAA8B;IAC9B,yBAAyB;IACzB,8DAA8D;IAC9D,6BAA6B;IAC7B,uBAAuB;IACvB,eAAe;IACf,oBAAoB;IACpB,wBAAwB;IACxB,gBAAgB;IAChB,yBAAyB;IACzB,mDAAmD;IACnD,gBAAgB;IAChB,eAAe;IACf,sBAAsB;IACtB,qDAAqD;IACrD,iBAAiB;IACjB,4EAA4E;IAC5E,4EAA4E;IAC5E,wBAAwB;IACxB,gFAAgF;IAChF,+EAA+E;IAC/E,4DAA4D;IAC5D,0BAA0B;IAC1B,gFAAgF;IAChF,+EAA+E;IAC/E,8EAA8E;IAC9E,iBAAiB;IACjB,eAAe;IACf,eAAe;IACf,oBAAoB;IACpB,iBAAiB;CAClB,CAAC,CAAA;AAGF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAA;AAMlE;;;;GAIG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,IAAI,EAAE,kBAAkB;IACxB,QAAQ,EAAE,sBAAsB;IAChC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,gFAAgF;IAChF,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAChD,oDAAoD;IACpD,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC,kDAAkD;IAClD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;CACnD,CAAC,CAAA;AAeF,wEAAwE;AACxE,MAAM,UAAU,QAAQ,CAAC,IAAkB;IACzC,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,OAAO;QAClC,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;QACpB,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjE,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC1C,CAAA;AACH,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,UAAU,CAAC,MAAqC;IAC9D,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAA;AACpD,CAAC","sourcesContent":["import { z } from 'zod'\n\n/**\n * Stable codes for structured CMS validation issues (brief §4.11, §7.4).\n *\n * We mirror the conventions of `@elytracms/core/project-graph`'s `ValidationIssue`\n * (a structured object with `code`/`severity`/`message`/`path`, never a thrown\n * error) so callers can treat graph and CMS issues uniformly. The code set here\n * is CMS-specific; the shape is shared.\n */\nexport const cmsIssueCodeSchema = z.enum([\n // collections & fields (EC-016)\n 'duplicate-collection',\n 'duplicate-field',\n 'unknown-collection',\n 'invalid-collection-config',\n 'invalid-field-config',\n // self-describing data (EC-277): a field name collides with a reserved node key\n 'reserved-field-name',\n 'missing-required-field',\n 'invalid-field-value',\n // relations & assets (EC-017)\n 'unknown-relation-target',\n // broken published references after a weak unpublish (EC-173)\n 'unpublished-relation-target',\n 'cardinality-violation',\n 'unknown-asset',\n 'duplicate-document',\n // localization (EC-018)\n 'unknown-locale',\n 'missing-localized-value',\n // routes / redirects / resolution (EC-019, EC-020)\n 'route-conflict',\n 'redirect-loop',\n 'unknown-route-target',\n // page hierarchy (EC-218): a parent chain that loops\n 'hierarchy-cycle',\n // storage limits (EC-260): a document blob nests too deeply for the backend\n // (Convex's 16-level ceiling) — surfaced pre-write instead of a silent WARN\n 'document-nesting-depth',\n // singleton drift (EC-274): a singleton collection holds more than one document\n // — the studio shows the list with the outliers in a \"for review\" lane instead\n // of skipping, so an editor resolves it without a developer\n 'singleton-document-drift',\n // alias / slot drift (EC-284): a collection addresses documents by named slots;\n // two documents claim the same slot, a document's alias isn't a declared slot,\n // or a declared slot has no document. Surfaced in the same \"for review\" lane.\n 'duplicate-alias',\n 'unknown-alias',\n 'unfilled-slot',\n // versions (EC-021)\n 'unknown-version',\n])\nexport type CmsIssueCode = z.infer<typeof cmsIssueCodeSchema>\n\nexport const cmsIssueSeveritySchema = z.enum(['error', 'warning'])\nexport type CmsIssueSeverity = z.infer<typeof cmsIssueSeveritySchema>\n\n/** A JSON-serializable scalar carried in issue metadata. */\nexport type CmsIssueMetaValue = string | number | boolean | null | readonly (string | number)[]\n\n/**\n * A structured CMS validation issue. Same conventions as\n * `@elytracms/core/project-graph`'s `ValidationIssue`: a path locating the offending\n * data, optional document/collection identity, and free-form metadata.\n */\nexport const cmsValidationIssueSchema = z.object({\n code: cmsIssueCodeSchema,\n severity: cmsIssueSeveritySchema,\n message: z.string(),\n /** Path into the CMS data, e.g. ['collections', 'post', 'fields', 'author']. */\n path: z.array(z.union([z.string(), z.number()])),\n /** The offending collection id, when applicable. */\n collectionId: z.string().optional(),\n /** The offending document id, when applicable. */\n documentId: z.string().optional(),\n meta: z.record(z.string(), z.unknown()).optional(),\n})\nexport type CmsValidationIssue = z.infer<typeof cmsValidationIssueSchema>\n\nexport type CmsPath = ReadonlyArray<string | number>\n\nexport interface CmsIssueInit {\n code: CmsIssueCode\n severity?: CmsIssueSeverity\n message: string\n path: CmsPath\n collectionId?: string\n documentId?: string\n meta?: Record<string, unknown>\n}\n\n/** Construct a structured CMS issue. `severity` defaults to `error`. */\nexport function cmsIssue(init: CmsIssueInit): CmsValidationIssue {\n return {\n code: init.code,\n severity: init.severity ?? 'error',\n message: init.message,\n path: [...init.path],\n ...(init.collectionId ? { collectionId: init.collectionId } : {}),\n ...(init.documentId ? { documentId: init.documentId } : {}),\n ...(init.meta ? { meta: init.meta } : {}),\n }\n}\n\n/** True if a set of CMS issues contains no error-severity entries. */\nexport function isCmsValid(issues: readonly CmsValidationIssue[]): boolean {\n return !issues.some((i) => i.severity === 'error')\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json-schema.js","sourceRoot":"","sources":["../../src/cms-core/json-schema.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"json-schema.js","sourceRoot":"","sources":["../../src/cms-core/json-schema.ts"],"names":[],"mappings":"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","sourcesContent":["import type { JsonValue } from '@elytracms/core/project-graph'\nimport type { CollectionDef } from './collections'\nimport type { FieldDef } from './fields'\n\n/**\n * A JSON Schema document (draft 2020-12 subset) represented with the canonical\n * `JsonValue` type from `@elytracms/core/project-graph` so it stays serialization-safe.\n */\nexport type JsonSchema = { [key: string]: JsonValue }\n\nfunction fieldSchema(field: FieldDef): JsonSchema {\n switch (field.type) {\n case 'text':\n case 'richText': {\n const schema: JsonSchema = { type: 'string' }\n if (field.validation?.min !== undefined) schema.minLength = field.validation.min\n if (field.validation?.max !== undefined) schema.maxLength = field.validation.max\n if (field.validation?.pattern !== undefined) schema.pattern = field.validation.pattern\n return schema\n }\n case 'number': {\n const schema: JsonSchema = { type: 'number' }\n if (field.validation?.min !== undefined) schema.minimum = field.validation.min\n if (field.validation?.max !== undefined) schema.maximum = field.validation.max\n return schema\n }\n case 'boolean':\n return { type: 'boolean' }\n case 'date':\n // ISO string or epoch number.\n return { type: ['string', 'number'], format: 'date-time' }\n case 'select': {\n const values: JsonValue[] = field.options.map((o) => o.value)\n const item: JsonSchema = { type: 'string', enum: values }\n return field.multiple ? { type: 'array', items: item } : item\n }\n case 'relation': {\n const ref: JsonSchema = {\n type: 'object',\n properties: {\n collection: { type: 'string', const: field.target },\n id: { type: 'string' },\n },\n required: ['collection', 'id'],\n additionalProperties: false,\n }\n return field.cardinality === 'many' ? { type: 'array', items: ref } : ref\n }\n case 'asset': {\n const id: JsonSchema = { type: 'string' }\n return field.cardinality === 'many' ? { type: 'array', items: id } : id\n }\n case 'blocks':\n // A composition value (EC-186): a ComponentNode tree the host renders via\n // the canvas engine. Opaque to JSON Schema consumers — `many` is an\n // ordered list, `one` a single tree.\n return field.cardinality === 'many' ? { type: 'array' } : { type: 'object' }\n case 'object': {\n // EC-253: a nested object of the subfield schemas; `many` wraps it in an\n // array (the repeater). Recurses for nested objects.\n const properties: { [key: string]: JsonValue } = {}\n const required: string[] = []\n for (const sub of field.fields) {\n properties[sub.name] = fieldSchema(sub)\n if (sub.validation?.required) required.push(sub.name)\n }\n const objectSchema: JsonSchema = { type: 'object', properties, additionalProperties: false }\n if (required.length > 0) objectSchema.required = required\n return field.cardinality === 'many'\n ? { type: 'array', items: objectSchema }\n : objectSchema\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 {}\n }\n }\n}\n\nexport interface JsonSchemaOptions {\n /**\n * For localized fields, emit `{ [locale]: <value-schema> }` objects when a\n * locale set is supplied; otherwise localized fields are emitted as their bare\n * value schema (the document's default-locale value).\n */\n locales?: readonly string[]\n /** $id for the schema; defaults to a urn derived from the collection id. */\n $id?: string\n}\n\n/**\n * Produce a JSON Schema for a collection's document shape (EC-016). Required\n * fields populate `required`; declared validation metadata maps to standard\n * JSON Schema keywords. Localized fields can be wrapped in a per-locale object.\n */\nexport function collectionJsonSchema(\n collection: CollectionDef,\n options: JsonSchemaOptions = {},\n): JsonSchema {\n const properties: { [key: string]: JsonValue } = {}\n const required: string[] = []\n\n for (const field of collection.fields) {\n let schema = fieldSchema(field)\n if (field.localized && options.locales && options.locales.length > 0) {\n const localeProps: { [key: string]: JsonValue } = {}\n for (const locale of options.locales) localeProps[locale] = schema\n schema = { type: 'object', properties: localeProps }\n }\n properties[field.name] = schema\n if (field.validation?.required) required.push(field.name)\n }\n\n const out: JsonSchema = {\n $schema: 'https://json-schema.org/draft/2020-12/schema',\n $id: options.$id ?? `urn:elytra:collection:${collection.id}`,\n title: collection.form?.labelSingular ?? collection.form?.label ?? collection.id,\n type: 'object',\n properties,\n additionalProperties: false,\n }\n if (required.length > 0) out.required = required\n return out\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"localization.js","sourceRoot":"","sources":["../../src/cms-core/localization.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAEvC,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAGnC;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;CAC3C,CAAC,CAAA;AAGF,iFAAiF;AACjF,MAAM,UAAU,kBAAkB,CAAC,IAGlC;IACC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;QACjD,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;QACnB,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,CAAA;IACnC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,CAAA;AAC3C,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,aAAa,CAAC,MAAoB,EAAE,MAAc;IAChE,OAAO,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;AACxC,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,gBAAgB,CAAC,UAAyB,EAAE,SAAiB;IAC3E,OAAO,OAAO,CAAC,UAAU,EAAE,SAAS,CAAC,EAAE,SAAS,KAAK,IAAI,CAAA;AAC3D,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,qBAAqB,CAAC,GAAgB,EAAE,MAAoB;IAC1E,OAAO,GAAG,CAAC,aAAa,IAAI,MAAM,CAAC,OAAO,CAAA;AAC5C,CAAC;AAUD;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAC1B,UAAyB,EACzB,GAAgB,EAChB,SAAiB,EACjB,MAAc,EACd,MAAoB;IAEpB,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,SAAS,CAAC,EAAE,CAAC;QAC7C,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAA;IAChF,CAAC;IAED,MAAM,SAAS,GAAG,GAAG,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,CAAA;IACzC,IAAI,SAAS,IAAI,SAAS,IAAI,SAAS,EAAE,CAAC;QACxC,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,SAAS,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAA;IAC/E,CAAC;IAED,MAAM,cAAc,GAAG,qBAAqB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;IACzD,IAAI,cAAc,KAAK,MAAM,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAG,GAAG,CAAC,SAAS,EAAE,CAAC,cAAc,CAAC,CAAA;QAChD,IAAI,QAAQ,IAAI,SAAS,IAAI,QAAQ,EAAE,CAAC;YACtC,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,YAAY,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;QACrF,CAAC;IACH,CAAC;IAED,0EAA0E;IAC1E,sEAAsE;IACtE,IAAI,SAAS,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QAC5B,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,YAAY,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;IACvF,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,cAAc,EAAE,QAAQ,EAAE,cAAc,KAAK,MAAM,EAAE,CAAA;AAChG,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CACtC,UAAyB,EACzB,GAAgB,EAChB,MAAc,EACd,MAAoB;IAEpB,MAAM,GAAG,GAAgB,EAAE,CAAA;IAC3B,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;QACtC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,UAAU,EAAE,GAAG,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,KAAK,CAAA;IACnF,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAC5B,MAAoB,EACpB,MAAc,EACd,OAAuC,CAAC,QAAQ,CAAC;IAEjD,IAAI,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC;QAAE,OAAO,EAAE,CAAA;IAC5C,OAAO;QACL,QAAQ,CAAC;YACP,IAAI,EAAE,gBAAgB;YACtB,OAAO,EAAE,WAAW,MAAM,wCAAwC;YAClE,IAAI;YACJ,IAAI,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,OAAO,EAAE;SAC7C,CAAC;KACH,CAAA;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"localization.js","sourceRoot":"","sources":["../../src/cms-core/localization.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod'\nimport type { CollectionDef } from './collections'\nimport { fieldOf } from './collections'\nimport type { CmsDocument, FieldValues, Locale } from './documents'\nimport { cmsIssue } from './issues'\nimport type { CmsValidationIssue } from './issues'\n\n/**\n * Locale configuration for a project (EC-018): the set of supported locales and\n * the default used for fallback. Provider-neutral.\n */\nexport const localeConfigSchema = z.object({\n default: z.string().min(1),\n locales: z.array(z.string().min(1)).min(1),\n})\nexport type LocaleConfig = z.infer<typeof localeConfigSchema>\n\n/** Build a locale config, ensuring the default is included in the locale set. */\nexport function createLocaleConfig(init: {\n default: Locale\n locales: readonly Locale[]\n}): LocaleConfig {\n const locales = init.locales.includes(init.default)\n ? [...init.locales]\n : [init.default, ...init.locales]\n return { default: init.default, locales }\n}\n\n/** True if a locale is part of the configured set. */\nexport function isKnownLocale(config: LocaleConfig, locale: Locale): boolean {\n return config.locales.includes(locale)\n}\n\n/** Whether a given field stores per-locale values. */\nexport function isFieldLocalized(collection: CollectionDef, fieldName: string): boolean {\n return fieldOf(collection, fieldName)?.localized === true\n}\n\n/** The document's authoring/default locale, falling back to the project default. */\nexport function documentDefaultLocale(doc: CmsDocument, config: LocaleConfig): Locale {\n return doc.defaultLocale ?? config.default\n}\n\nexport interface ResolvedField {\n value: unknown\n /** The locale the value was actually read from (may differ from requested). */\n sourceLocale: Locale\n /** True when the requested locale had no value and fallback was used. */\n fellBack: boolean\n}\n\n/**\n * Resolve a single field's value for a requested locale with default-locale\n * fallback (EC-018):\n * - Non-localized fields always read from `doc.values`.\n * - Localized fields read `doc.localized[locale]`; if absent, fall back to the\n * document's default locale, then to `doc.values` as a last resort.\n */\nexport function resolveField(\n collection: CollectionDef,\n doc: CmsDocument,\n fieldName: string,\n locale: Locale,\n config: LocaleConfig,\n): ResolvedField {\n if (!isFieldLocalized(collection, fieldName)) {\n return { value: doc.values[fieldName], sourceLocale: locale, fellBack: false }\n }\n\n const requested = doc.localized?.[locale]\n if (requested && fieldName in requested) {\n return { value: requested[fieldName], sourceLocale: locale, fellBack: false }\n }\n\n const fallbackLocale = documentDefaultLocale(doc, config)\n if (fallbackLocale !== locale) {\n const fallback = doc.localized?.[fallbackLocale]\n if (fallback && fieldName in fallback) {\n return { value: fallback[fieldName], sourceLocale: fallbackLocale, fellBack: true }\n }\n }\n\n // Last resort: a value stored on the shared bag (e.g. authored before the\n // field was localized). Reported as a fallback to the default locale.\n if (fieldName in doc.values) {\n return { value: doc.values[fieldName], sourceLocale: fallbackLocale, fellBack: true }\n }\n\n return { value: undefined, sourceLocale: fallbackLocale, fellBack: fallbackLocale !== locale }\n}\n\n/**\n * Resolve the full field-values view of a document for a locale, applying\n * default-locale fallback per field (EC-018). The returned bag is flat:\n * `{ [field]: value }`, suitable for rendering or relation resolution.\n */\nexport function resolveDocumentForLocale(\n collection: CollectionDef,\n doc: CmsDocument,\n locale: Locale,\n config: LocaleConfig,\n): FieldValues {\n const out: FieldValues = {}\n for (const field of collection.fields) {\n out[field.name] = resolveField(collection, doc, field.name, locale, config).value\n }\n return out\n}\n\n/**\n * Validate that requesting `locale` is well-formed against the project config\n * (EC-018): emits `unknown-locale` for unsupported locales. Resolution itself\n * never throws; this surfaces an explicit structured issue.\n */\nexport function validateLocale(\n config: LocaleConfig,\n locale: Locale,\n path: ReadonlyArray<string | number> = ['locale'],\n): CmsValidationIssue[] {\n if (isKnownLocale(config, locale)) return []\n return [\n cmsIssue({\n code: 'unknown-locale',\n message: `Locale \"${locale}\" is not in the configured locale set.`,\n path,\n meta: { locale, configured: config.locales },\n }),\n ]\n}\n"]}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { CmsPath } from './issues';
|
|
2
|
+
/**
|
|
3
|
+
* Convex's hard limit on how deeply a single stored value may nest (objects +
|
|
4
|
+
* arrays). Writing a document blob deeper than this **fails the mutation** — and
|
|
5
|
+
* today it surfaces only as a Convex `WARN` ("deeply nested document written")
|
|
6
|
+
* the studio never shows, i.e. a silent footgun that turns into a hard backend
|
|
7
|
+
* crash on the deeper sites (EC-260). The CMS document is stored as one
|
|
8
|
+
* `cmsDocuments.document: v.any()` blob, so the whole `CmsDocument` value's depth
|
|
9
|
+
* counts toward this ceiling.
|
|
10
|
+
*/
|
|
11
|
+
export declare const CONVEX_MAX_NESTING_DEPTH = 16;
|
|
12
|
+
/**
|
|
13
|
+
* How far below the ceiling a measured depth still earns a **warning** (vs a
|
|
14
|
+
* silent pass): a heads-up that a document is approaching the limit before an
|
|
15
|
+
* edit tips it over into a hard failure. The window is deliberately wide — block
|
|
16
|
+
* compositions grow a few levels at a time (a nested object field, one more
|
|
17
|
+
* repeater item), so a couple of levels of head-room is the actionable signal.
|
|
18
|
+
*/
|
|
19
|
+
export declare const NESTING_DEPTH_WARN_MARGIN = 3;
|
|
20
|
+
/** The deepest point found in a value: its container-nesting depth + the path to it. */
|
|
21
|
+
export interface DepthMeasurement {
|
|
22
|
+
/**
|
|
23
|
+
* The maximum container-nesting depth — the number of nested objects/arrays
|
|
24
|
+
* traversed to reach the deepest leaf. A scalar (or `null`) is depth `0`; a
|
|
25
|
+
* flat `{ a: 1 }` is depth `1`; `{ a: { b: 1 } }` is depth `2`. An empty
|
|
26
|
+
* object/array counts as one level (it is still a container at rest).
|
|
27
|
+
*/
|
|
28
|
+
depth: number;
|
|
29
|
+
/** The path to the deepest leaf — the offending location to name in an issue. */
|
|
30
|
+
path: CmsPath;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Measure the deepest container-nesting in an arbitrary JSON value and report
|
|
34
|
+
* the path to it (EC-260). Pure and total: recurses objects and arrays, treats
|
|
35
|
+
* every scalar (including `null`) as a leaf, and returns the single deepest path
|
|
36
|
+
* (ties resolve to the first-encountered branch — deterministic for a given
|
|
37
|
+
* value). The returned `path` is rooted at `basePath`, so a caller passes the
|
|
38
|
+
* document's base path (`['documents', key]`) and gets a directly-actionable
|
|
39
|
+
* location like `…/values/pageBuilder/0/props/buttons/0/link/page`.
|
|
40
|
+
*
|
|
41
|
+
* Counting matches how Convex counts nesting toward {@link CONVEX_MAX_NESTING_DEPTH}:
|
|
42
|
+
* each object/array is one level; the leaves themselves add nothing.
|
|
43
|
+
*/
|
|
44
|
+
export declare function measureMaxDepth(value: unknown, basePath?: CmsPath): DepthMeasurement;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Convex's hard limit on how deeply a single stored value may nest (objects +
|
|
3
|
+
* arrays). Writing a document blob deeper than this **fails the mutation** — and
|
|
4
|
+
* today it surfaces only as a Convex `WARN` ("deeply nested document written")
|
|
5
|
+
* the studio never shows, i.e. a silent footgun that turns into a hard backend
|
|
6
|
+
* crash on the deeper sites (EC-260). The CMS document is stored as one
|
|
7
|
+
* `cmsDocuments.document: v.any()` blob, so the whole `CmsDocument` value's depth
|
|
8
|
+
* counts toward this ceiling.
|
|
9
|
+
*/
|
|
10
|
+
export const CONVEX_MAX_NESTING_DEPTH = 16;
|
|
11
|
+
/**
|
|
12
|
+
* How far below the ceiling a measured depth still earns a **warning** (vs a
|
|
13
|
+
* silent pass): a heads-up that a document is approaching the limit before an
|
|
14
|
+
* edit tips it over into a hard failure. The window is deliberately wide — block
|
|
15
|
+
* compositions grow a few levels at a time (a nested object field, one more
|
|
16
|
+
* repeater item), so a couple of levels of head-room is the actionable signal.
|
|
17
|
+
*/
|
|
18
|
+
export const NESTING_DEPTH_WARN_MARGIN = 3;
|
|
19
|
+
/**
|
|
20
|
+
* Measure the deepest container-nesting in an arbitrary JSON value and report
|
|
21
|
+
* the path to it (EC-260). Pure and total: recurses objects and arrays, treats
|
|
22
|
+
* every scalar (including `null`) as a leaf, and returns the single deepest path
|
|
23
|
+
* (ties resolve to the first-encountered branch — deterministic for a given
|
|
24
|
+
* value). The returned `path` is rooted at `basePath`, so a caller passes the
|
|
25
|
+
* document's base path (`['documents', key]`) and gets a directly-actionable
|
|
26
|
+
* location like `…/values/pageBuilder/0/props/buttons/0/link/page`.
|
|
27
|
+
*
|
|
28
|
+
* Counting matches how Convex counts nesting toward {@link CONVEX_MAX_NESTING_DEPTH}:
|
|
29
|
+
* each object/array is one level; the leaves themselves add nothing.
|
|
30
|
+
*/
|
|
31
|
+
export function measureMaxDepth(value, basePath = []) {
|
|
32
|
+
if (value === null || typeof value !== 'object')
|
|
33
|
+
return { depth: 0, path: basePath };
|
|
34
|
+
const entries = Array.isArray(value)
|
|
35
|
+
? value.map((item, index) => [index, item])
|
|
36
|
+
: Object.entries(value);
|
|
37
|
+
// An empty container is still one level of nesting at rest, with no deeper path.
|
|
38
|
+
if (entries.length === 0)
|
|
39
|
+
return { depth: 1, path: basePath };
|
|
40
|
+
// Seed below zero so the FIRST child (even a depth-0 leaf) wins — otherwise the
|
|
41
|
+
// reported path would stop at the deepest container, not reach the actual leaf.
|
|
42
|
+
let deepest = { depth: -1, path: basePath };
|
|
43
|
+
for (const [key, child] of entries) {
|
|
44
|
+
const measured = measureMaxDepth(child, [...basePath, key]);
|
|
45
|
+
if (measured.depth > deepest.depth)
|
|
46
|
+
deepest = measured;
|
|
47
|
+
}
|
|
48
|
+
return { depth: deepest.depth + 1, path: deepest.path };
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=nesting-depth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nesting-depth.js","sourceRoot":"","sources":["../../src/cms-core/nesting-depth.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,EAAE,CAAA;AAE1C;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAA;AAe1C;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,eAAe,CAAC,KAAc,EAAE,WAAoB,EAAE;IACpE,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAA;IAEpF,MAAM,OAAO,GAA8C,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAC7E,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC3C,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC,CAAA;IAEpD,iFAAiF;IACjF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAA;IAE7D,gFAAgF;IAChF,gFAAgF;IAChF,IAAI,OAAO,GAAqB,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAA;IAC7D,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,OAAO,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,EAAE,CAAC,GAAG,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAA;QAC3D,IAAI,QAAQ,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK;YAAE,OAAO,GAAG,QAAQ,CAAA;IACxD,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAA;AACzD,CAAC","sourcesContent":["import type { CmsPath } from './issues'\n\n/**\n * Convex's hard limit on how deeply a single stored value may nest (objects +\n * arrays). Writing a document blob deeper than this **fails the mutation** — and\n * today it surfaces only as a Convex `WARN` (\"deeply nested document written\")\n * the studio never shows, i.e. a silent footgun that turns into a hard backend\n * crash on the deeper sites (EC-260). The CMS document is stored as one\n * `cmsDocuments.document: v.any()` blob, so the whole `CmsDocument` value's depth\n * counts toward this ceiling.\n */\nexport const CONVEX_MAX_NESTING_DEPTH = 16\n\n/**\n * How far below the ceiling a measured depth still earns a **warning** (vs a\n * silent pass): a heads-up that a document is approaching the limit before an\n * edit tips it over into a hard failure. The window is deliberately wide — block\n * compositions grow a few levels at a time (a nested object field, one more\n * repeater item), so a couple of levels of head-room is the actionable signal.\n */\nexport const NESTING_DEPTH_WARN_MARGIN = 3\n\n/** The deepest point found in a value: its container-nesting depth + the path to it. */\nexport interface DepthMeasurement {\n /**\n * The maximum container-nesting depth — the number of nested objects/arrays\n * traversed to reach the deepest leaf. A scalar (or `null`) is depth `0`; a\n * flat `{ a: 1 }` is depth `1`; `{ a: { b: 1 } }` is depth `2`. An empty\n * object/array counts as one level (it is still a container at rest).\n */\n depth: number\n /** The path to the deepest leaf — the offending location to name in an issue. */\n path: CmsPath\n}\n\n/**\n * Measure the deepest container-nesting in an arbitrary JSON value and report\n * the path to it (EC-260). Pure and total: recurses objects and arrays, treats\n * every scalar (including `null`) as a leaf, and returns the single deepest path\n * (ties resolve to the first-encountered branch — deterministic for a given\n * value). The returned `path` is rooted at `basePath`, so a caller passes the\n * document's base path (`['documents', key]`) and gets a directly-actionable\n * location like `…/values/pageBuilder/0/props/buttons/0/link/page`.\n *\n * Counting matches how Convex counts nesting toward {@link CONVEX_MAX_NESTING_DEPTH}:\n * each object/array is one level; the leaves themselves add nothing.\n */\nexport function measureMaxDepth(value: unknown, basePath: CmsPath = []): DepthMeasurement {\n if (value === null || typeof value !== 'object') return { depth: 0, path: basePath }\n\n const entries: ReadonlyArray<[string | number, unknown]> = Array.isArray(value)\n ? value.map((item, index) => [index, item])\n : Object.entries(value as Record<string, unknown>)\n\n // An empty container is still one level of nesting at rest, with no deeper path.\n if (entries.length === 0) return { depth: 1, path: basePath }\n\n // Seed below zero so the FIRST child (even a depth-0 leaf) wins — otherwise the\n // reported path would stop at the deepest container, not reach the actual leaf.\n let deepest: DepthMeasurement = { depth: -1, path: basePath }\n for (const [key, child] of entries) {\n const measured = measureMaxDepth(child, [...basePath, key])\n if (measured.depth > deepest.depth) deepest = measured\n }\n return { depth: deepest.depth + 1, path: deepest.path }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/cms-core/routes.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/cms-core/routes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE1C,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAGnC;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACrB,oEAAoE;IACpE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,oEAAoE;IACpE,MAAM,EAAE,YAAY,CAAC,QAAQ,EAAE;IAC/B;;;;;OAKG;IACH,QAAQ,EAAE,CAAC;SACR,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;SAChE,QAAQ,EAAE;CACd,CAAC,CAAA;AAGF,sCAAsC;AACtC,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACrB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACrB,gDAAgD;IAChD,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;CACrC,CAAC,CAAA;AA+BF,uEAAuE;AACvE,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACxC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC;SACpB,KAAK,CAAC,GAAG,CAAC;SACV,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;AAChC,CAAC;AAED,SAAS,cAAc,CAAC,OAAe;IACrC,OAAO,SAAS,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CACpC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC;QACjB,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;QACvC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,CACnC,CAAA;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,aAAa,CACpB,QAA0B,EAC1B,WAAqB;IAErB,IAAI,QAAQ,CAAC,MAAM,KAAK,WAAW,CAAC,MAAM;QAAE,OAAO,SAAS,CAAA;IAC5D,MAAM,MAAM,GAA2B,EAAE,CAAA;IACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;QACvB,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA;QAC5B,IAAI,GAAG,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,SAAS,CAAA;QAC9D,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC1B,IAAI,GAAG,CAAC,KAAK,KAAK,KAAK;gBAAE,OAAO,SAAS,CAAA;QAC3C,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAA;QAC9C,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAED;;;;GAIG;AACH,SAAS,WAAW,CAAC,QAA0B;IAC7C,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AACxE,CAAC;AA8BD,SAAS,aAAa,CAAC,IAAY;IACjC,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACxC,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAA;IACtC,OAAO,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAC7B,CAAC;AAED,oDAAoD;AACpD,MAAM,UAAU,YAAY,CAC1B,MAA8B,EAC9B,YAAuC,EAAE,EACzC,UAAyB,EAAE;IAE3B,MAAM,MAAM,GAAyB,EAAE,CAAA;IAEvC,MAAM,QAAQ,GAAoB,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACvD,KAAK;QACL,QAAQ,EAAE,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC;KACxC,CAAC,CAAC,CAAA;IAEH,4CAA4C;IAC5C,4EAA4E;IAC5E,4EAA4E;IAC5E,0CAA0C;IAC1C,MAAM,WAAW,GAAG,CAAC,CAAgB,EAAU,EAAE;QAC/C,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,IAAI,GAAG,CAAA;QACpC,MAAM,GAAG,GAAG,CAAC,CAAC,QAAQ;aACnB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;aACxD,IAAI,CAAC,GAAG,CAAC,CAAA;QACZ,OAAO,GAAG,MAAM,IAAI,GAAG,EAAE,CAAA;IAC3B,CAAC,CAAA;IACD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAyB,CAAA;IAC9C,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA;QAC1B,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAC/B,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CACT,QAAQ,CAAC;gBACP,IAAI,EAAE,gBAAgB;gBACtB,OAAO,EAAE,WAAW,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,CAAC,KAAK,CAAC,EAAE,wCAAwC,CAAC,CAAC,KAAK,CAAC,OAAO,KAAK;gBACrH,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC5B,IAAI,EAAE,EAAE,aAAa,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE;aACrE,CAAC,CACH,CAAA;QACH,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;QACnB,CAAC;IACH,CAAC;IAED,iDAAiD;IACjD,MAAM,WAAW,GAAG,IAAI,GAAG,EAA0B,CAAA;IACrD,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC1B,WAAW,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;IAC3C,CAAC;IAED,MAAM,eAAe,GAAG,CAAC,IAAY,EAAsB,EAAE;QAC3D,MAAM,KAAK,GAAa,EAAE,CAAA;QAC1B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;QAC9B,IAAI,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,CAAA;QACjC,IAAI,SAAS,GAAG,IAAI,CAAA;QACpB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACnB,+EAA+E;QAC/E,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;YACpC,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAA;YAC3D,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,SAAS;gBAAE,SAAS,GAAG,KAAK,CAAA;YACrC,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YAClC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;gBACvC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBAChB,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAAA;YACvD,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;YACjB,OAAO,GAAG,IAAI,CAAA;YACd,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACrB,CAAC;IACH,CAAC,CAAA;IAED,+DAA+D;IAC/D,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAA;IACtC,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC1B,MAAM,GAAG,GAAG,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;QACnC,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAC9C,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;YAC5B,MAAM,CAAC,IAAI,CACT,QAAQ,CAAC;gBACP,IAAI,EAAE,eAAe;gBACrB,OAAO,EAAE,+BAA+B,CAAC,CAAC,IAAI,aAAa,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI;gBAC/F,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC;gBACzB,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE;aAC3B,CAAC,CACH,CAAA;QACH,CAAC;IACH,CAAC;IAED,MAAM,cAAc,GAAG,CACrB,WAAqB,EACrB,MAA0B,EACqC,EAAE;QACjE,MAAM,OAAO,GAAkE,EAAE,CAAA;QACjF,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;YACzB,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBACtF,SAAQ;YACV,CAAC;YACD,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAA;YACrD,IAAI,MAAM;gBAAE,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,CAAA;QACnD,CAAC;QACD,oDAAoD;QACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;QAC7G,OAAO,OAAO,CAAA;IAChB,CAAC,CAAA;IAED,MAAM,UAAU,GAAG,CAAC,GAAW,EAAE,MAAe,EAAiB,EAAE;QACjE,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,CAAA;QAE/B,sDAAsD;QACtD,IAAI,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,MAAM,GAAG,GAAG,eAAe,CAAC,IAAI,CAAC,CAAA;YACjC,OAAO;gBACL,MAAM,EAAE,UAAU;gBAClB,cAAc,EAAE,GAAG,CAAC,MAAM;gBAC1B,SAAS,EAAE,GAAG,CAAC,SAAS;gBACxB,aAAa,EAAE,EAAE;gBACjB,QAAQ,EAAE,KAAK;aAChB,CAAA;QACH,CAAC;QAED,MAAM,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,CAAA;QAEnC,4CAA4C;QAC5C,IAAI,QAAQ,GAAG,KAAK,CAAA;QACpB,IAAI,OAAO,GAAG,cAAc,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;QAEjD,qDAAqD;QACrD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,IAAI,OAAO,CAAC,aAAa,IAAI,MAAM,KAAK,OAAO,CAAC,aAAa,EAAE,CAAC;YAChG,MAAM,eAAe,GAAG,cAAc,CAAC,WAAW,EAAE,OAAO,CAAC,aAAa,CAAC,CAAA;YAC1E,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC/B,OAAO,GAAG,eAAe,CAAA;gBACzB,QAAQ,GAAG,IAAI,CAAA;YACjB,CAAC;QACH,CAAC;QACD,iFAAiF;QACjF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACjD,OAAO,GAAG,cAAc,CAAC,WAAW,EAAE,SAAS,CAAC,CAAA;QAClD,CAAC;QAED,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;QACvB,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAA;QAC5D,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAA;QACjC,OAAO;YACL,MAAM,EAAE,IAAI;YACZ,KAAK;YACL,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1D,aAAa,EAAE,IAAI,CAAC,MAAM;YAC1B,QAAQ;SACT,CAAA;IACH,CAAC,CAAA;IAED,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,eAAe,EAAE,CAAA;AAChD,CAAC","sourcesContent":["import { z } from 'zod'\nimport { localeSchema } from './documents'\nimport type { DocumentRef } from './documents'\nimport { cmsIssue } from './issues'\nimport type { CmsValidationIssue } from './issues'\n\n/**\n * A route record (EC-019, reshaped by EC-187). A path pattern may contain\n * dynamic segments written `:name` (e.g. `/blog/:slug`). A route maps a concrete\n * URL to a **render target = a collection + document** via its `document` ref\n * — `/` → `{ collection: 'page', id: 'home' }`, `/blog/:slug` →\n * `{ collection: 'post', id: ':slug' }`. The catch-all dispatches on the\n * resolved document's collection. There is no `templateId`/`pageId` anymore:\n * page content is a `page`-collection document, not a graph page.\n */\nexport const routeRecordSchema = z.object({\n id: z.string().min(1),\n /** Path pattern, leading slash, with optional `:param` segments. */\n pattern: z.string().min(1),\n /** Locale this route serves (EC-018). Omitted = locale-agnostic. */\n locale: localeSchema.optional(),\n /**\n * The document this route resolves to: a `page`-collection document (whose\n * `body` composition renders into a layout), or a content-collection document\n * (rendered by a dev route component). The `id` may be a `:param` placeholder\n * materialized from the matched URL (EC-166).\n */\n document: z\n .object({ collection: z.string().min(1), id: z.string().min(1) })\n .optional(),\n})\nexport type RouteRecord = z.infer<typeof routeRecordSchema>\n\n/** A redirect record (EC-019/020). */\nexport const redirectRecordSchema = z.object({\n id: z.string().min(1),\n from: z.string().min(1),\n to: z.string().min(1),\n /** 301 permanent (default) or 302 temporary. */\n permanent: z.boolean().default(true),\n})\nexport type RedirectRecord = z.infer<typeof redirectRecordSchema>\n\n/** Result of `resolveUrl` (EC-019). */\nexport type ResolveStatus = 'ok' | 'redirect' | 'notFound'\n\nexport interface ResolveResult {\n status: ResolveStatus\n /** The matched route, when status is `ok`. */\n route?: RouteRecord\n /** The document the URL resolves to, when known. */\n documentRef?: DocumentRef\n /** The terminal redirect target, when status is `redirect`. */\n redirectTarget?: string\n /** Extracted dynamic params, e.g. `{ slug: 'hello' }`. */\n dynamicParams: Record<string, string>\n /** True when resolution fell back to a default-locale route (EC-018). */\n fallback: boolean\n /** Whether the matched redirect is permanent (301) vs temporary (302). */\n permanent?: boolean\n}\n\ninterface CompiledRoute {\n route: RouteRecord\n segments: PatternSegment[]\n}\n\ntype PatternSegment =\n | { kind: 'static'; value: string }\n | { kind: 'param'; name: string }\n\n/** Split a path into non-empty segments, ignoring a trailing slash. */\nexport function splitPath(path: string): string[] {\n const [pathname] = path.split(/[?#]/, 1)\n return (pathname ?? '')\n .split('/')\n .filter((s) => s.length > 0)\n}\n\nfunction compilePattern(pattern: string): PatternSegment[] {\n return splitPath(pattern).map((seg) =>\n seg.startsWith(':')\n ? { kind: 'param', name: seg.slice(1) }\n : { kind: 'static', value: seg },\n )\n}\n\n/**\n * Match a concrete URL path against a compiled pattern. Returns extracted params\n * or `undefined` if it doesn't match. Segment counts must be equal.\n */\nfunction matchSegments(\n segments: PatternSegment[],\n urlSegments: string[],\n): Record<string, string> | undefined {\n if (segments.length !== urlSegments.length) return undefined\n const params: Record<string, string> = {}\n for (let i = 0; i < segments.length; i++) {\n const seg = segments[i]\n const value = urlSegments[i]\n if (seg === undefined || value === undefined) return undefined\n if (seg.kind === 'static') {\n if (seg.value !== value) return undefined\n } else {\n params[seg.name] = decodeURIComponent(value)\n }\n }\n return params\n}\n\n/**\n * A \"specificity key\": more static segments and fewer params win when two routes\n * could match. Used to choose deterministically and to detect *true* conflicts\n * (two patterns with identical specificity matching the same concrete URL).\n */\nfunction specificity(segments: PatternSegment[]): string {\n return segments.map((s) => (s.kind === 'static' ? 'S' : 'P')).join('')\n}\n\n/**\n * The router (EC-019/020). Compiles routes + redirects once, then answers\n * `resolveUrl`. Construction surfaces structural issues (route conflicts,\n * redirect loops) as structured issues — it never throws or loops.\n */\nexport interface Router {\n readonly issues: readonly CmsValidationIssue[]\n resolveUrl(url: string, locale?: string): ResolveResult\n /** Resolve a redirect chain from `from` to its terminus (EC-020). */\n followRedirects(from: string): RedirectResolution\n}\n\nexport interface RouterOptions {\n /** Default locale used for locale fallback during resolution (EC-018). */\n defaultLocale?: string\n}\n\nexport interface RedirectResolution {\n /** Final URL after following all hops. */\n target: string\n /** Ordered list of intermediate URLs visited (including `from` and `target`). */\n chain: string[]\n /** True if a loop was detected; `target` is then the loop entry point. */\n loop: boolean\n /** Whether every hop was permanent. */\n permanent: boolean\n}\n\nfunction normalizePath(path: string): string {\n const [pathname] = path.split(/[?#]/, 1)\n const segs = splitPath(pathname ?? '')\n return '/' + segs.join('/')\n}\n\n/** Build a router from route + redirect records. */\nexport function createRouter(\n routes: readonly RouteRecord[],\n redirects: readonly RedirectRecord[] = [],\n options: RouterOptions = {},\n): Router {\n const issues: CmsValidationIssue[] = []\n\n const compiled: CompiledRoute[] = routes.map((route) => ({\n route,\n segments: compilePattern(route.pattern),\n }))\n\n // --- Route conflict detection (EC-020) ---\n // Two routes conflict when, for the same locale, they would match the exact\n // same set of concrete URLs: identical specificity signature AND the static\n // segments line up at the same positions.\n const conflictKey = (c: CompiledRoute): string => {\n const locale = c.route.locale ?? '*'\n const sig = c.segments\n .map((s) => (s.kind === 'static' ? `s:${s.value}` : 'p'))\n .join('/')\n return `${locale}|${sig}`\n }\n const byKey = new Map<string, CompiledRoute>()\n for (const c of compiled) {\n const key = conflictKey(c)\n const existing = byKey.get(key)\n if (existing) {\n issues.push(\n cmsIssue({\n code: 'route-conflict',\n message: `Routes \"${existing.route.id}\" and \"${c.route.id}\" both match the same URLs (pattern \"${c.route.pattern}\").`,\n path: ['routes', c.route.id],\n meta: { conflictsWith: existing.route.id, pattern: c.route.pattern },\n }),\n )\n } else {\n byKey.set(key, c)\n }\n }\n\n // --- Redirect map + loop detection (EC-020) ---\n const redirectMap = new Map<string, RedirectRecord>()\n for (const r of redirects) {\n redirectMap.set(normalizePath(r.from), r)\n }\n\n const followRedirects = (from: string): RedirectResolution => {\n const chain: string[] = []\n const seen = new Set<string>()\n let current = normalizePath(from)\n let permanent = true\n chain.push(current)\n // Bounded by the number of redirects; the `seen` guard makes loops impossible.\n while (true) {\n const hop = redirectMap.get(current)\n if (!hop) {\n return { target: current, chain, loop: false, permanent }\n }\n if (!hop.permanent) permanent = false\n const next = normalizePath(hop.to)\n if (seen.has(next) || next === current) {\n chain.push(next)\n return { target: next, chain, loop: true, permanent }\n }\n seen.add(current)\n current = next\n chain.push(current)\n }\n }\n\n // Eagerly report redirect loops as structured issues (EC-020).\n const loopReported = new Set<string>()\n for (const r of redirects) {\n const res = followRedirects(r.from)\n if (res.loop && !loopReported.has(res.target)) {\n loopReported.add(res.target)\n issues.push(\n cmsIssue({\n code: 'redirect-loop',\n message: `Redirect chain starting at \"${r.from}\" loops (…${res.chain.slice(-3).join(' -> ')}).`,\n path: ['redirects', r.id],\n meta: { chain: res.chain },\n }),\n )\n }\n }\n\n const orderedMatches = (\n urlSegments: string[],\n locale: string | undefined,\n ): { compiled: CompiledRoute; params: Record<string, string> }[] => {\n const matches: { compiled: CompiledRoute; params: Record<string, string> }[] = []\n for (const c of compiled) {\n if (locale !== undefined && c.route.locale !== undefined && c.route.locale !== locale) {\n continue\n }\n const params = matchSegments(c.segments, urlSegments)\n if (params) matches.push({ compiled: c, params })\n }\n // Most specific first (fewest params, more static).\n matches.sort((a, b) => specificity(a.compiled.segments).localeCompare(specificity(b.compiled.segments)) * -1)\n return matches\n }\n\n const resolveUrl = (url: string, locale?: string): ResolveResult => {\n const path = normalizePath(url)\n\n // 1. Redirects take precedence (resolve to terminus).\n if (redirectMap.has(path)) {\n const res = followRedirects(path)\n return {\n status: 'redirect',\n redirectTarget: res.target,\n permanent: res.permanent,\n dynamicParams: {},\n fallback: false,\n }\n }\n\n const urlSegments = splitPath(path)\n\n // 2. Match routes for the requested locale.\n let fallback = false\n let matches = orderedMatches(urlSegments, locale)\n\n // 3. Locale fallback to the default locale (EC-018).\n if (matches.length === 0 && locale && options.defaultLocale && locale !== options.defaultLocale) {\n const fallbackMatches = orderedMatches(urlSegments, options.defaultLocale)\n if (fallbackMatches.length > 0) {\n matches = fallbackMatches\n fallback = true\n }\n }\n // 3b. As a last resort try locale-agnostic routes (no locale on requested pass).\n if (matches.length === 0 && locale === undefined) {\n matches = orderedMatches(urlSegments, undefined)\n }\n\n const best = matches[0]\n if (!best) {\n return { status: 'notFound', dynamicParams: {}, fallback }\n }\n\n const route = best.compiled.route\n return {\n status: 'ok',\n route,\n ...(route.document ? { documentRef: route.document } : {}),\n dynamicParams: best.params,\n fallback,\n }\n }\n\n return { issues, resolveUrl, followRedirects }\n}\n"]}
|