@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":"self-type.js","sourceRoot":"","sources":["../../src/cms-core/self-type.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"self-type.js","sourceRoot":"","sources":["../../src/cms-core/self-type.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ComponentNode, JsonValue, PropValue } from '@elytracms/core/project-graph'\nimport type { CollectionDef } from './collections'\nimport type { CmsDocument, FieldValues } from './documents'\nimport { assetNode, isAssetNode, isReferenceNode, referenceNode } from './envelopes'\nimport type { FieldDef } from './fields'\n\n/**\n * Self-typing on write (EC-277, vision AD-14/AD-15): the *write-time lens*.\n *\n * The schema is a lens, not a mirror — it shapes the editing UI and, on write,\n * wraps bare field values into their self-describing envelope so the stored value\n * carries its own `type` discriminator. This is the only place the schema (and, for\n * a composition's static props, the component manifest) touches the value on the way\n * IN; from then on derivation (the reference walk) reads the envelope and needs\n * neither. It is also the exact transform the lazy migration applies to legacy bare\n * content (the migration IS this lens, applied once).\n *\n * \"Schema leads, component adopts\": the field-def (and the manifest's prop field-defs)\n * lead the write-time wrapping; the component adopts the self-typed value on read.\n * Using the manifest HERE (write) is what keeps extraction schema-free THERE (read).\n *\n * Idempotent: an already-self-typed value passes through unchanged, so running it\n * over partially-migrated content is safe.\n */\n\n/**\n * Resolves a component id to its prop field-defs (the manifest's `props`, name → def).\n * Manifests are code (AD-11); cms-core stays free of `@elytracms/core/component-registry`\n * by accepting this structural lookup, threaded from the layer that owns the registry\n * (operations / the studio form engine). Omit → composition static props are not\n * self-typed (component usage still self-describes via `componentId`).\n */\nexport type PropFieldLookup = (componentId: string) => Record<string, FieldDef> | undefined\n\nexport interface SelfTypeOptions {\n lookupManifest?: PropFieldLookup\n}\n\n// --- Rich-text internal-link conventions (the conversion/migration home) -----------\n\n/**\n * The legacy fuzzy href prefixes (EC-025) self-typing REPLACES. Internal links used\n * to encode their target in the `href` string; EC-277 carries it as a structured\n * `attrs.ref` envelope instead, leaving `href` for external URLs only. These\n * constants live here because this lens is the one place that still READS them — to\n * migrate them away.\n */\nconst RICH_TEXT_DOCUMENT_HREF_PREFIX = 'elytra:document/'\nconst RICH_TEXT_ASSET_HREF_PREFIX = 'elytra:asset/'\n\nfunction isPlainRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nfunction selfTypeRelationValue(value: unknown): unknown {\n if (isReferenceNode(value)) return value\n if (\n isPlainRecord(value) &&\n typeof value.collection === 'string' &&\n typeof value.id === 'string'\n ) {\n return referenceNode({ collection: value.collection, id: value.id })\n }\n return value\n}\n\nfunction selfTypeAssetValue(value: unknown): unknown {\n if (isAssetNode(value)) return value\n if (typeof value === 'string' && value.length > 0) return assetNode(value)\n return value\n}\n\n// --- Composition (blocks) -----------------------------------------------------------\n\n/** Self-type one composition node's static props (via the manifest) + recurse slots. */\nfunction selfTypeComponentNode(node: ComponentNode, options: SelfTypeOptions): ComponentNode {\n const next: ComponentNode = { ...node }\n const propDefs = options.lookupManifest?.(node.componentId)\n if (node.props && propDefs) {\n const props: Record<string, PropValue> = {}\n for (const [name, prop] of Object.entries(node.props)) {\n const def = propDefs[name]\n // Only STATIC props carry self-typed values; bindings are parked (EC-187).\n props[name] =\n prop.kind === 'static' && def\n ? { kind: 'static', value: selfTypeFieldValue(def, prop.value, options) as JsonValue }\n : prop\n }\n next.props = props\n }\n if (node.slots) {\n next.slots = Object.fromEntries(\n Object.entries(node.slots).map(([slot, children]) => [\n slot,\n children.map((child) => selfTypeComponentNode(child, options)),\n ]),\n )\n }\n return next\n}\n\nfunction selfTypeBlocksValue(value: unknown, options: SelfTypeOptions): unknown {\n if (Array.isArray(value)) return value.map((root) => selfTypeBlocksValue(root, options))\n if (isComponentNodeShape(value)) return selfTypeComponentNode(value, options)\n return value\n}\n\nfunction isComponentNodeShape(value: unknown): value is ComponentNode {\n return isPlainRecord(value) && typeof value.id === 'string' && typeof value.componentId === 'string'\n}\n\n// --- Rich text ----------------------------------------------------------------------\n\n/** Convert a legacy internal `elytra:` href to a self-typed `ref` envelope (or undefined). */\nfunction refFromLegacyHref(href: string): unknown {\n if (href.startsWith(RICH_TEXT_DOCUMENT_HREF_PREFIX)) {\n const [collection, id] = href.slice(RICH_TEXT_DOCUMENT_HREF_PREFIX.length).split('/')\n if (collection && id) return referenceNode({ collection, id })\n } else if (href.startsWith(RICH_TEXT_ASSET_HREF_PREFIX)) {\n const id = href.slice(RICH_TEXT_ASSET_HREF_PREFIX.length)\n if (id) return assetNode(id)\n }\n return undefined\n}\n\n/** Self-type a rich-text attrs bag: legacy href / docRef / assetId → structured `ref`. */\nfunction selfTypeRichTextAttrs(attrs: Record<string, unknown>): Record<string, unknown> {\n if (isReferenceNode(attrs.ref) || isAssetNode(attrs.ref)) return attrs // already self-typed\n const next = { ...attrs }\n if (typeof attrs.href === 'string') {\n const ref = refFromLegacyHref(attrs.href)\n if (ref) {\n next.ref = ref\n delete next.href // internal link: target now lives in `ref`, not the href string\n }\n }\n if (isPlainRecord(attrs.docRef) && typeof attrs.docRef.collection === 'string' && typeof attrs.docRef.id === 'string') {\n next.ref = referenceNode({ collection: attrs.docRef.collection, id: attrs.docRef.id })\n delete next.docRef\n } else if (typeof attrs.assetId === 'string' && attrs.assetId.length > 0) {\n next.ref = assetNode(attrs.assetId)\n delete next.assetId\n }\n return next\n}\n\nfunction selfTypeRichTextNode(node: unknown, options: SelfTypeOptions): unknown {\n if (!isPlainRecord(node)) return node\n const next = { ...node }\n if (isPlainRecord(node.attrs)) {\n let attrs = selfTypeRichTextAttrs(node.attrs)\n // EC-189: a `componentEmbed` node nests a ComponentNode under `attrs.node`.\n if (isComponentNodeShape(attrs.node)) {\n attrs = { ...attrs, node: selfTypeComponentNode(attrs.node, options) }\n }\n next.attrs = attrs\n }\n if (Array.isArray(node.marks)) {\n next.marks = node.marks.map((mark) =>\n isPlainRecord(mark) && isPlainRecord(mark.attrs)\n ? { ...mark, attrs: selfTypeRichTextAttrs(mark.attrs) }\n : mark,\n )\n }\n if (Array.isArray(node.content)) {\n next.content = node.content.map((child) => selfTypeRichTextNode(child, options))\n }\n return next\n}\n\nfunction selfTypeRichTextValue(value: unknown, options: SelfTypeOptions): unknown {\n if (!isPlainRecord(value) || !isPlainRecord(value.doc) || value.doc.type !== 'doc') return value\n return { ...value, doc: selfTypeRichTextNode(value.doc, options) }\n}\n\n// --- Field / document entry points --------------------------------------------------\n\n/** Self-type one field value through the lens of its field-def. Idempotent. */\nexport function selfTypeFieldValue(\n field: FieldDef,\n value: unknown,\n options: SelfTypeOptions = {},\n): unknown {\n if (value === undefined || value === null) return value\n switch (field.type) {\n case 'relation':\n return Array.isArray(value) ? value.map(selfTypeRelationValue) : selfTypeRelationValue(value)\n case 'asset':\n return Array.isArray(value) ? value.map(selfTypeAssetValue) : selfTypeAssetValue(value)\n case 'blocks':\n return selfTypeBlocksValue(value, options)\n case 'richText':\n return selfTypeRichTextValue(value, options)\n case 'object': {\n const one = (item: unknown): unknown => {\n if (!isPlainRecord(item)) return item\n const next: Record<string, unknown> = { ...item }\n for (const sub of field.fields) {\n if (sub.name in next) next[sub.name] = selfTypeFieldValue(sub, next[sub.name], options)\n }\n return next\n }\n return field.cardinality === 'many' && Array.isArray(value) ? value.map(one) : one(value)\n }\n default:\n // text/number/boolean/date/select carry no references.\n return value\n }\n}\n\n/** Self-type a bag of field values through a collection's field-defs. */\nfunction selfTypeValues(\n fields: readonly FieldDef[],\n values: FieldValues,\n options: SelfTypeOptions,\n): FieldValues {\n const next: FieldValues = { ...values }\n for (const field of fields) {\n if (field.name in next) next[field.name] = selfTypeFieldValue(field, next[field.name], options)\n }\n return next\n}\n\n/**\n * Self-type a whole document (its `values` and every `localized` locale) through the\n * collection schema. Returns a new document; the input is not mutated. A document\n * whose collection is absent from the schema is returned unchanged (drift-tolerant —\n * AD-14: the store never blocks on schema divergence).\n */\nexport function selfTypeDocument(\n document: CmsDocument,\n collection: CollectionDef,\n options: SelfTypeOptions = {},\n): CmsDocument {\n const next: CmsDocument = {\n ...document,\n values: selfTypeValues(collection.fields, document.values ?? {}, options),\n }\n if (document.localized) {\n next.localized = Object.fromEntries(\n Object.entries(document.localized).map(([locale, values]) => [\n locale,\n selfTypeValues(collection.fields, values, options),\n ]),\n )\n }\n return next\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"url-for-document.js","sourceRoot":"","sources":["../../src/cms-core/url-for-document.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"url-for-document.js","sourceRoot":"","sources":["../../src/cms-core/url-for-document.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CollectionDef } from './collections'\nimport type { CmsDocument } from './documents'\nimport { resolveField } from './localization'\nimport type { LocaleConfig } from './localization'\nimport { composePath, hierarchyMount, isHierarchyTemplate } from './hierarchy'\nimport type { HierarchyConfig } from './hierarchy'\nimport { splitPath } from './routes'\nimport type { RouteRecord } from './routes'\n\n/**\n * Documents know their URL (EC-216). The inverse of route resolution: given a\n * document and the project's config-sourced routes (EC-207), DERIVE its public\n * URL — never store it (AD-11). This mirrors delivery's forward resolution\n * (`@elytracms/core/content`) exactly so the URL a document advertises is the one the\n * live site serves:\n *\n * - A literal-id route (`/about` → `page:about`) addresses only its one document.\n * - A template route (`/blog/:slug` → `post::slug`) is filled from the document's\n * `slug` field, falling back to its id — the inverse of delivery's\n * `lookup.document(id) ?? findBySlug(slug)`.\n * - A hierarchy mount (`/:path*`, EC-218) composes the full nested path from the\n * parent chain, so renaming a parent re-derives every descendant's URL.\n *\n * The locale prefix follows the host's own convention (`splitLocalePath` in\n * `@elytracms/next`): the default locale serves at the root, other locales are\n * `/{locale}`-prefixed. Patterns are locale-agnostic; the prefix is applied here.\n *\n * Perspective: the URL is derived from the documents you pass in. In the studio\n * those are the DRAFT rows, so a published document whose `slug` (or a parent's)\n * was edited but not yet re-published advertises its *pending* URL — the one that\n * goes live on the next publish. For the common case (slug unchanged since\n * publish) this equals the live URL; the studio publish-gates the \"open live\"\n * action so an unpublished document never links anywhere.\n */\n\nconst SLUG_FIELD = 'slug'\n\nexport interface DocumentUrlConfig {\n /** The project's route records (config-sourced, EC-207). */\n routes: readonly RouteRecord[]\n /** Public base URL (EC-215). When set, the result carries an absolute `href`. */\n frontendUrl?: string\n /** Locale config — enables locale prefixing + localized slug resolution. */\n localeConfig?: LocaleConfig\n /** Hierarchy field names (EC-218); defaults to `parent`/`slug`. */\n hierarchy?: HierarchyConfig\n}\n\nexport interface DocumentUrl {\n /** The resolved path, always starting with `/` (locale prefix applied). */\n path: string\n /** Absolute URL — present only when `frontendUrl` was provided. */\n href?: string\n /** The route record that addresses the document. */\n route: RouteRecord\n}\n\nexport interface UrlForDocumentContext {\n /**\n * Sibling documents in the same collection — required to compose a nested\n * (hierarchy-mount) path from the parent chain. Defaults to `[doc]`.\n */\n siblings?: readonly CmsDocument[]\n /** Locale to build the URL for; defaults to `localeConfig.default`. */\n locale?: string\n}\n\n/** The document's `slug` field value (locale-resolved when possible), or undefined. */\nfunction readSlugValue(\n doc: CmsDocument,\n collection: CollectionDef,\n locale: string | undefined,\n localeConfig: LocaleConfig | undefined,\n): string | undefined {\n if (!collection.fields.some((f) => f.name === SLUG_FIELD)) return undefined\n const raw =\n localeConfig && locale !== undefined\n ? resolveField(collection, doc, SLUG_FIELD, locale, localeConfig).value\n : doc.values[SLUG_FIELD]\n return typeof raw === 'string' && raw.length > 0 ? raw : undefined\n}\n\n/** Build the (locale-agnostic) path a single route would serve for `doc`, or undefined. */\nfunction pathForRoute(\n route: RouteRecord,\n doc: CmsDocument,\n collection: CollectionDef,\n locale: string | undefined,\n localeConfig: LocaleConfig | undefined,\n getById: (id: string) => CmsDocument | undefined,\n hierarchy: HierarchyConfig | undefined,\n): string | undefined {\n const target = route.document\n if (!target || target.collection !== collection.id) return undefined\n\n // Hierarchy mount (EC-218): the path is the composed nested chain.\n if (isHierarchyTemplate(route)) {\n const mount = hierarchyMount(route)\n if (!mount) return undefined\n const composed = composePath(doc, getById, hierarchy)\n if (!composed.ok) return undefined\n return '/' + [...mount.prefix, ...composed.segments].join('/')\n }\n\n const idParam = target.id.startsWith(':') ? target.id.slice(1) : null\n // A literal-id route addresses only its one bound document.\n if (idParam === null && target.id !== doc.id) return undefined\n\n // The doc-id param resolves to the slug field, else the id. Delivery is\n // id-FIRST (`lookup.document(id) ?? findBySlug(slug)`), so if this document's\n // slug equals a DIFFERENT sibling's id, emitting the slug would round-trip to\n // that other document — fall back to this doc's id to stay correct. (Detectable\n // only when siblings are supplied; the bare-helper default cannot see them.)\n const slugValue = readSlugValue(doc, collection, locale, localeConfig)\n const collides =\n slugValue !== undefined && slugValue !== doc.id && getById(slugValue) !== undefined\n const identValue = slugValue !== undefined && !collides ? slugValue : doc.id\n\n const segments: string[] = []\n for (const seg of splitPath(route.pattern)) {\n if (!seg.startsWith(':')) {\n segments.push(seg)\n continue\n }\n const name = seg.replace(/[*+?]$/, '').slice(1)\n if (idParam !== null && name === idParam) {\n segments.push(encodeURIComponent(identValue))\n continue\n }\n // Any other pattern param is filled from the document's same-named field.\n const value = doc.values[name]\n if (typeof value !== 'string' || value.length === 0) return undefined\n segments.push(encodeURIComponent(value))\n }\n return '/' + segments.join('/')\n}\n\n/**\n * Rank addressing routes so the most specific wins, mirroring the router's\n * precedence: an exact locale match, then an explicit route over the catch-all\n * mount, then more static segments / fewer params.\n */\nfunction routeRank(route: RouteRecord, locale: string | undefined): number {\n let score = 0\n if (route.locale !== undefined && route.locale === locale) score += 1000\n if (!isHierarchyTemplate(route)) score += 100\n const segs = splitPath(route.pattern)\n const statics = segs.filter((s) => !s.startsWith(':')).length\n score += statics * 10 - (segs.length - statics)\n return score\n}\n\n/** Apply the host's locale-prefix convention: default at root, others `/{locale}`. */\nfunction applyLocalePrefix(\n path: string,\n locale: string | undefined,\n config: LocaleConfig | undefined,\n): string {\n if (!config || locale === undefined || locale === config.default) return path\n return path === '/' ? `/${locale}` : `/${locale}${path}`\n}\n\n/**\n * Derive a document's public URL from the project's routes (EC-216), or\n * `undefined` when no route addresses it (a non-routable collection, or a\n * hierarchy page with no slug / a broken parent chain). Pure: the URL is always\n * derived, never read from a stored field.\n */\nexport function urlForDocument(\n config: DocumentUrlConfig,\n collection: CollectionDef,\n doc: CmsDocument,\n context: UrlForDocumentContext = {},\n): DocumentUrl | undefined {\n const locale = context.locale ?? config.localeConfig?.default\n const byId = new Map((context.siblings ?? [doc]).map((d) => [d.id, d]))\n byId.set(doc.id, doc) // the document itself is always resolvable\n const getById = (id: string): CmsDocument | undefined => byId.get(id)\n\n let best: { route: RouteRecord; path: string; rank: number } | undefined\n for (const route of config.routes) {\n // A locale-specific route serving a different locale cannot address this URL.\n if (route.locale !== undefined && locale !== undefined && route.locale !== locale) continue\n const path = pathForRoute(route, doc, collection, locale, config.localeConfig, getById, config.hierarchy)\n if (path === undefined) continue\n const rank = routeRank(route, locale)\n // Deterministic tie-break on equal rank: the lower route id wins.\n if (!best || rank > best.rank || (rank === best.rank && route.id < best.route.id)) {\n best = { route, path, rank }\n }\n }\n if (!best) return undefined\n\n const path = applyLocalePrefix(best.path, locale, config.localeConfig)\n const href =\n config.frontendUrl !== undefined ? config.frontendUrl.replace(/\\/+$/, '') + path : undefined\n return { path, ...(href !== undefined ? { href } : {}), route: best.route }\n}\n"]}
|
|
@@ -62,6 +62,14 @@ export interface ValidateDocumentOptions {
|
|
|
62
62
|
* that model assets as documents). With neither, asset existence is not checked.
|
|
63
63
|
*/
|
|
64
64
|
assetExists?: (id: string) => boolean;
|
|
65
|
+
/**
|
|
66
|
+
* Max document-blob nesting depth before the EC-260 guard fires (defaults to
|
|
67
|
+
* {@link CONVEX_MAX_NESTING_DEPTH}, the Convex ceiling). At/over it the document
|
|
68
|
+
* earns an ERROR (the write would fail), within {@link NESTING_DEPTH_WARN_MARGIN}
|
|
69
|
+
* of it a WARNING. A backend with a different ceiling passes its own value; pass
|
|
70
|
+
* `0` (or any non-positive number) to disable the check entirely.
|
|
71
|
+
*/
|
|
72
|
+
nestingDepthLimit?: number;
|
|
65
73
|
}
|
|
66
74
|
/**
|
|
67
75
|
* Validate a document against its collection (EC-016/017/018). Returns structured
|
|
@@ -3,6 +3,7 @@ import { readAssetId, readDocumentRef } from './envelopes';
|
|
|
3
3
|
import { isFieldLocalized, resolveField } from './localization';
|
|
4
4
|
import { hasParentCycle, parentRelationField } from './hierarchy';
|
|
5
5
|
import { cmsIssue } from './issues';
|
|
6
|
+
import { CONVEX_MAX_NESTING_DEPTH, NESTING_DEPTH_WARN_MARGIN, measureMaxDepth } from './nesting-depth';
|
|
6
7
|
/** Build a `DocumentStore` from a flat list of documents. */
|
|
7
8
|
export function createDocumentStore(docs) {
|
|
8
9
|
const byKey = new Map();
|
|
@@ -562,6 +563,40 @@ export function validateDocument(registry, doc, options = {}) {
|
|
|
562
563
|
}));
|
|
563
564
|
}
|
|
564
565
|
}
|
|
566
|
+
// EC-260: the document is stored as one `cmsDocuments.document` blob, so its
|
|
567
|
+
// nesting depth counts toward Convex's hard 16-level ceiling. Beyond it the
|
|
568
|
+
// write FAILS, today only as a Convex log WARN the studio never shows — a
|
|
569
|
+
// silent footgun that becomes a hard crash on the deeper sites. Measure the
|
|
570
|
+
// blob's depth pre-write and surface it as an explicit, path-named issue (an
|
|
571
|
+
// ERROR at/over the ceiling — caught before dispatch instead of a backend
|
|
572
|
+
// failure; a WARNING as it approaches, so an author has head-room to restructure
|
|
573
|
+
// before an edit tips it over). Disabled by passing a non-positive limit.
|
|
574
|
+
const depthLimit = options.nestingDepthLimit ?? CONVEX_MAX_NESTING_DEPTH;
|
|
575
|
+
if (depthLimit > 0) {
|
|
576
|
+
const { depth, path } = measureMaxDepth(doc, basePath);
|
|
577
|
+
if (depth >= depthLimit) {
|
|
578
|
+
issues.push(cmsIssue({
|
|
579
|
+
code: 'document-nesting-depth',
|
|
580
|
+
severity: 'error',
|
|
581
|
+
message: `Document "${doc.id}" nests ${depth} levels deep, at or beyond the backend's ${depthLimit}-level limit — the write would fail. Flatten the deepest path (e.g. extract a nested block into a reusable element or split the document).`,
|
|
582
|
+
path,
|
|
583
|
+
collectionId: collection.id,
|
|
584
|
+
documentId: doc.id,
|
|
585
|
+
meta: { depth, limit: depthLimit },
|
|
586
|
+
}));
|
|
587
|
+
}
|
|
588
|
+
else if (depth >= depthLimit - NESTING_DEPTH_WARN_MARGIN) {
|
|
589
|
+
issues.push(cmsIssue({
|
|
590
|
+
code: 'document-nesting-depth',
|
|
591
|
+
severity: 'warning',
|
|
592
|
+
message: `Document "${doc.id}" nests ${depth} levels deep, approaching the backend's ${depthLimit}-level limit. Consider flattening the deepest path before it grows further.`,
|
|
593
|
+
path,
|
|
594
|
+
collectionId: collection.id,
|
|
595
|
+
documentId: doc.id,
|
|
596
|
+
meta: { depth, limit: depthLimit },
|
|
597
|
+
}));
|
|
598
|
+
}
|
|
599
|
+
}
|
|
565
600
|
return issues;
|
|
566
601
|
}
|
|
567
602
|
/** Validate every document in a list against the registry. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate-document.js","sourceRoot":"","sources":["../../src/cms-core/validate-document.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"validate-document.js","sourceRoot":"","sources":["../../src/cms-core/validate-document.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAE1D,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC/D,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAEnC,OAAO,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAQtG,6DAA6D;AAC7D,MAAM,UAAU,mBAAmB,CAAC,IAA4B;IAI9D,MAAM,KAAK,GAAG,IAAI,GAAG,EAAuB,CAAA;IAC5C,MAAM,MAAM,GAAyB,EAAE,CAAA;IACvC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC,CAAA;QAC5B,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACnB,MAAM,CAAC,IAAI,CACT,QAAQ,CAAC;gBACP,IAAI,EAAE,oBAAoB;gBAC1B,OAAO,EAAE,uBAAuB,GAAG,CAAC,EAAE,oBAAoB,GAAG,CAAC,UAAU,IAAI;gBAC5E,IAAI,EAAE,CAAC,WAAW,EAAE,GAAG,CAAC;gBACxB,YAAY,EAAE,GAAG,CAAC,UAAU;gBAC5B,UAAU,EAAE,GAAG,CAAC,EAAE;aACnB,CAAC,CACH,CAAA;YACD,SAAQ;QACV,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;IACrB,CAAC;IACD,OAAO;QACL,MAAM;QACN,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACzC,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACzC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;KAChC,CAAA;AACH,CAAC;AAED,SAAS,OAAO,CAAC,KAAc;IAC7B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAA;IACtD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,CAAA;IACxD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,CAAA;IACnD,8EAA8E;IAC9E,6EAA6E;IAC7E,+EAA+E;IAC/E,IAAI,aAAa,CAAC,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAA;IAChE,OAAO,KAAK,CAAA;AACd,CAAC;AAED,uFAAuF;AACvF,SAAS,aAAa,CAAC,KAAc;IACnC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AAC7E,CAAC;AAED;;;;;GAKG;AACH,SAAS,oBAAoB,CAAC,KAAe,EAAE,KAAc;IAC3D,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,aAAa,CAAC,KAAK,CAAC,CAAA;AACxD,CAAC;AAED,mFAAmF;AACnF,sFAAsF;AACtF,MAAM,SAAS,GAAG,eAAe,CAAA;AAsBjC,SAAS,kBAAkB,CAAC,GAAa,EAAE,MAA4B;IACrE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,GAAG,CAAA;IAC1D,MAAM,GAAG,GAAG,CAAC,MAAc,EAAE,EAAE,CAC7B,MAAM,CAAC,IAAI,CACT,QAAQ,CAAC;QACP,IAAI,EAAE,qBAAqB;QAC3B,OAAO,EAAE,UAAU,KAAK,CAAC,IAAI,KAAK,MAAM,GAAG;QAC3C,IAAI;QACJ,YAAY,EAAE,UAAU,CAAC,EAAE;QAC3B,UAAU;QACV,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE;KAC9C,CAAC,CACH,CAAA;IAEH,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,MAAM;YACT,IAAI,OAAO,KAAK,KAAK,QAAQ;gBAAE,GAAG,CAAC,kBAAkB,CAAC,CAAA;YACtD,MAAK;QACP,KAAK,UAAU;YACb,wEAAwE;YACxE,wEAAwE;YACxE,yEAAyE;YACzE,4EAA4E;YAC5E,6CAA6C;YAC7C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC,EAAE,CAAC;gBAChF,GAAG,CAAC,2DAA2D,CAAC,CAAA;YAClE,CAAC;YACD,MAAK;QACP,KAAK,QAAQ;YACX,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;gBAAE,GAAG,CAAC,kBAAkB,CAAC,CAAA;YAC7E,MAAK;QACP,KAAK,SAAS;YACZ,IAAI,OAAO,KAAK,KAAK,SAAS;gBAAE,GAAG,CAAC,mBAAmB,CAAC,CAAA;YACxD,MAAK;QACP,KAAK,MAAM;YACT,yEAAyE;YACzE,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC9B,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;oBAAE,GAAG,CAAC,6BAA6B,CAAC,CAAA;YACzE,CAAC;iBAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBACrC,GAAG,CAAC,6CAA6C,CAAC,CAAA;YACpD,CAAC;YACD,MAAK;QACP,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAA;YAC1D,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;YAClF,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;gBACvB,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC7C,GAAG,CAAC,cAAc,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAA;gBACvD,CAAC;YACH,CAAC;YACD,MAAK;QACP,CAAC;QACD,KAAK,QAAQ;YACX,4EAA4E;YAC5E,4EAA4E;YAC5E,uEAAuE;YACvE,IAAI,KAAK,CAAC,WAAW,KAAK,MAAM,EAAE,CAAC;gBACjC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;oBACxE,GAAG,CAAC,2BAA2B,CAAC,CAAA;gBAClC,CAAC;YACH,CAAC;iBAAM,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;gBACjC,GAAG,CAAC,mBAAmB,CAAC,CAAA;YAC1B,CAAC;YACD,MAAK;QACP,KAAK,UAAU,CAAC;QAChB,KAAK,OAAO,CAAC;QACb,KAAK,QAAQ;YACX,4EAA4E;YAC5E,MAAK;QACP,OAAO,CAAC,CAAC,CAAC;YACR,mEAAmE;YACnE,MAAM,WAAW,GAAU,KAAK,CAAA;YAChC,KAAK,WAAW,CAAA;QAClB,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,cAAc,CACrB,GAAa,EACb,MAA4B,EAC5B,mBAAmE;IAEnE,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,mBAAmB;QAAE,OAAM;IAC/D,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,GAAG,CAAA;IAC1D,KAAK,MAAM,OAAO,IAAI,mBAAmB,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC;QACxD,MAAM,CAAC,IAAI,CACT,QAAQ,CAAC;YACP,IAAI,EAAE,qBAAqB;YAC3B,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,OAAO;YACrC,OAAO,EAAE,UAAU,KAAK,CAAC,IAAI,MAAM,OAAO,CAAC,OAAO,EAAE;YACpD,IAAI;YACJ,YAAY,EAAE,UAAU,CAAC,EAAE;YAC3B,UAAU;YACV,IAAI,EAAE;gBACJ,KAAK,EAAE,KAAK,CAAC,IAAI;gBACjB,IAAI,EAAE,QAAQ;gBACd,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC5D;SACF,CAAC,CACH,CAAA;IACH,CAAC;AACH,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,sBAAsB,CAC7B,GAAa,EACb,MAA4B,EAC5B,gBAAmE;IAEnE,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,gBAAgB;QAAE,OAAM;IAC9D,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,GAAG,CAAA;IAC1D,KAAK,MAAM,OAAO,IAAI,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC;QACrD,MAAM,CAAC,IAAI,CACT,QAAQ,CAAC;YACP,IAAI,EAAE,qBAAqB;YAC3B,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,OAAO;YACrC,OAAO,EAAE,UAAU,KAAK,CAAC,IAAI,MAAM,OAAO,CAAC,OAAO,EAAE;YACpD,IAAI;YACJ,YAAY,EAAE,UAAU,CAAC,EAAE;YAC3B,UAAU;YACV,IAAI,EAAE;gBACJ,KAAK,EAAE,KAAK,CAAC,IAAI;gBACjB,IAAI,EAAE,UAAU;gBAChB,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC5D;SACF,CAAC,CACH,CAAA;IACH,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,GAAa,EAAE,MAA4B;IACtE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,GAAG,CAAA;IAC1D,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,CAAA;IAC9B,IAAI,CAAC,KAAK;QAAE,OAAM;IAClB,MAAM,IAAI,GAAG,CAAC,MAAc,EAAE,EAAE,CAC9B,MAAM,CAAC,IAAI,CACT,QAAQ,CAAC;QACP,IAAI,EAAE,qBAAqB;QAC3B,OAAO,EAAE,UAAU,KAAK,CAAC,IAAI,KAAK,MAAM,GAAG;QAC3C,IAAI;QACJ,YAAY,EAAE,UAAU,CAAC,EAAE;QAC3B,UAAU;QACV,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE;KAC5B,CAAC,CACH,CAAA;IAEH,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG;YAAE,IAAI,CAAC,8BAA8B,KAAK,CAAC,GAAG,EAAE,CAAC,CAAA;QACxG,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG;YAAE,IAAI,CAAC,6BAA6B,KAAK,CAAC,GAAG,EAAE,CAAC,CAAA;QACvG,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAChC,IAAI,EAAsB,CAAA;YAC1B,IAAI,CAAC;gBACH,EAAE,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;YAChC,CAAC;YAAC,MAAM,CAAC;gBACP,EAAE,GAAG,SAAS,CAAA;YAChB,CAAC;YACD,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;gBAAE,IAAI,CAAC,0BAA0B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;QAC5E,CAAC;IACH,CAAC;SAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACrC,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,IAAI,KAAK,GAAG,KAAK,CAAC,GAAG;YAAE,IAAI,CAAC,oBAAoB,KAAK,CAAC,GAAG,EAAE,CAAC,CAAA;QACvF,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,IAAI,KAAK,GAAG,KAAK,CAAC,GAAG;YAAE,IAAI,CAAC,uBAAuB,KAAK,CAAC,GAAG,EAAE,CAAC,CAAA;IAC5F,CAAC;SAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAChC,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG;YAAE,IAAI,CAAC,kBAAkB,KAAK,CAAC,GAAG,QAAQ,CAAC,CAAA;QAClG,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG;YAAE,IAAI,CAAC,iBAAiB,KAAK,CAAC,GAAG,QAAQ,CAAC,CAAA;IACnG,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAa,EAAE,MAA4B;IACnE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,GAAG,CAAA;IAC3E,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU;QAAE,OAAM;IAErC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QAChC,MAAM,CAAC,IAAI,CACT,QAAQ,CAAC;YACP,IAAI,EAAE,yBAAyB;YAC/B,OAAO,EAAE,mBAAmB,KAAK,CAAC,IAAI,iCAAiC,KAAK,CAAC,MAAM,IAAI;YACvF,IAAI;YACJ,YAAY,EAAE,UAAU,CAAC,EAAE;YAC3B,UAAU;YACV,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE;SAClD,CAAC,CACH,CAAA;QACD,OAAM;IACR,CAAC;IAED,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;IAEhG,IAAI,KAAK,CAAC,WAAW,KAAK,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5E,MAAM,CAAC,IAAI,CACT,QAAQ,CAAC;YACP,IAAI,EAAE,uBAAuB;YAC7B,OAAO,EAAE,mBAAmB,KAAK,CAAC,IAAI,8BAA8B,KAAK,CAAC,MAAM,WAAW;YAC3F,IAAI;YACJ,YAAY,EAAE,UAAU,CAAC,EAAE;YAC3B,UAAU;YACV,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE;SAChD,CAAC,CACH,CAAA;IACH,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;QACtB,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,CAAA;QAC1B,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,CAAC,IAAI,CACT,QAAQ,CAAC;gBACP,IAAI,EAAE,qBAAqB;gBAC3B,OAAO,EAAE,mBAAmB,KAAK,CAAC,IAAI,mDAAmD;gBACzF,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;gBAClB,YAAY,EAAE,UAAU,CAAC,EAAE;gBAC3B,UAAU;gBACV,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE;aAC5B,CAAC,CACH,CAAA;YACD,OAAM;QACR,CAAC;QACD,IAAI,GAAG,CAAC,UAAU,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;YACpC,MAAM,CAAC,IAAI,CACT,QAAQ,CAAC;gBACP,IAAI,EAAE,yBAAyB;gBAC/B,OAAO,EAAE,mBAAmB,KAAK,CAAC,IAAI,2BAA2B,GAAG,CAAC,UAAU,kBAAkB,KAAK,CAAC,MAAM,IAAI;gBACjH,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;gBAClB,YAAY,EAAE,UAAU,CAAC,EAAE;gBAC3B,UAAU;gBACV,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,UAAU,EAAE;aACvE,CAAC,CACH,CAAA;YACD,OAAM;QACR,CAAC;QACD,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YAC7B,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,CAAC,IAAI,CACT,QAAQ,CAAC;oBACP,IAAI,EAAE,yBAAyB;oBAC/B,OAAO,EAAE,mBAAmB,KAAK,CAAC,IAAI,kCAAkC,GAAG,CAAC,EAAE,SAAS,GAAG,CAAC,UAAU,IAAI;oBACzG,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;oBAClB,YAAY,EAAE,UAAU,CAAC,EAAE;oBAC3B,UAAU;oBACV,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE;iBAChE,CAAC,CACH,CAAA;YACH,CAAC;iBAAM,IAAI,GAAG,CAAC,iBAAiB,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC1D,mEAAmE;gBACnE,oEAAoE;gBACpE,qEAAqE;gBACrE,oEAAoE;gBACpE,8CAA8C;gBAC9C,MAAM,CAAC,IAAI,CACT,QAAQ,CAAC;oBACP,IAAI,EAAE,6BAA6B;oBACnC,QAAQ,EAAE,SAAS;oBACnB,OAAO,EAAE,mBAAmB,KAAK,CAAC,IAAI,sCAAsC,GAAG,CAAC,EAAE,SAAS,GAAG,CAAC,UAAU,gDAAgD;oBACzJ,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;oBAClB,YAAY,EAAE,UAAU,CAAC,EAAE;oBAC3B,UAAU;oBACV,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE;iBAChE,CAAC,CACH,CAAA;YACH,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,GAAa,EAAE,MAA4B;IAChE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,GAAG,CAAA;IAC3E,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO;QAAE,OAAM;IAElC,MAAM,gBAAgB,GAAG,QAAQ,CAAC,gBAAgB,EAAE,CAAA;IACpD,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClC,MAAM,CAAC,IAAI,CACT,QAAQ,CAAC;YACP,IAAI,EAAE,sBAAsB;YAC5B,OAAO,EAAE,gBAAgB,KAAK,CAAC,IAAI,yDAAyD;YAC5F,IAAI;YACJ,YAAY,EAAE,UAAU,CAAC,EAAE;YAC3B,UAAU;YACV,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE;SAC5B,CAAC,CACH,CAAA;QACD,OAAM;IACR,CAAC;IAED,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;IAC/F,IAAI,KAAK,CAAC,WAAW,KAAK,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5E,MAAM,CAAC,IAAI,CACT,QAAQ,CAAC;YACP,IAAI,EAAE,uBAAuB;YAC7B,OAAO,EAAE,gBAAgB,KAAK,CAAC,IAAI,8BAA8B,KAAK,CAAC,MAAM,WAAW;YACxF,IAAI;YACJ,YAAY,EAAE,UAAU,CAAC,EAAE;YAC3B,UAAU;YACV,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE;SAChD,CAAC,CACH,CAAA;IACH,CAAC;IAED,GAAG,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE;QAC1B,+EAA+E;QAC/E,oEAAoE;QACpE,MAAM,GAAG,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAA;QACjC,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,MAAM,CAAC,IAAI,CACT,QAAQ,CAAC;gBACP,IAAI,EAAE,qBAAqB;gBAC3B,OAAO,EAAE,gBAAgB,KAAK,CAAC,IAAI,wBAAwB;gBAC3D,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;gBAClB,YAAY,EAAE,UAAU,CAAC,EAAE;gBAC3B,UAAU;gBACV,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE;aAC5B,CAAC,CACH,CAAA;YACD,OAAM;QACR,CAAC;QACD,uEAAuE;QACvE,sEAAsE;QACtE,yEAAyE;QACzE,2EAA2E;QAC3E,qEAAqE;QACrE,MAAM,MAAM,GAAG,GAAG,CAAC,WAAW;YAC5B,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC;YACtB,CAAC,CAAC,KAAK;gBACL,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;gBACxE,CAAC,CAAC,SAAS,CAAA;QACf,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;YACrB,MAAM,CAAC,IAAI,CACT,QAAQ,CAAC;gBACP,IAAI,EAAE,eAAe;gBACrB,OAAO,EAAE,gBAAgB,KAAK,CAAC,IAAI,+BAA+B,GAAG,IAAI;gBACzE,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;gBAClB,YAAY,EAAE,UAAU,CAAC,EAAE;gBAC3B,UAAU;gBACV,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE;aACxC,CAAC,CACH,CAAA;QACH,CAAC;IACH,CAAC,CAAC,CAAA;AACJ,CAAC;AAQD;;;;;;;GAOG;AACH,SAAS,cAAc,CACrB,GAAa,EACb,MAA4B,EAC5B,CAAkB;IAElB,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,CAAA;IACrB,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAM;IACnC,MAAM,KAAK,GACT,KAAK,CAAC,WAAW,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;IAC1F,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAC5B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;YAAE,OAAM;QAChC,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAA;QAC/E,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YAC/B,MAAM,OAAO,GAAG,CAAC,GAAG,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,CAAA;YACvC,IAAI,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACtB,IAAI,GAAG,CAAC,UAAU,EAAE,QAAQ,EAAE,CAAC;oBAC7B,MAAM,CAAC,IAAI,CACT,QAAQ,CAAC;wBACP,IAAI,EAAE,wBAAwB;wBAC9B,OAAO,EAAE,mBAAmB,GAAG,CAAC,IAAI,eAAe;wBACnD,IAAI,EAAE,OAAO;wBACb,YAAY,EAAE,GAAG,CAAC,UAAU,CAAC,EAAE;wBAC/B,UAAU,EAAE,GAAG,CAAC,UAAU;wBAC1B,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE;qBAC1B,CAAC,CACH,CAAA;oBACD,SAAQ;gBACV,CAAC;gBACD,2EAA2E;gBAC3E,2EAA2E;gBAC3E,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,QAAQ,CAAC;oBAAE,SAAQ;YACpD,CAAC;YACD,kBAAkB,CAAC,EAAE,GAAG,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAA;QACvF,CAAC;IACH,CAAC,CAAC,CAAA;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAS,kBAAkB,CACzB,GAAa,EACb,MAA4B,EAC5B,CAAkB;IAElB,kBAAkB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;IAC/B,mBAAmB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;IAChC,gBAAgB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;IAC7B,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;IAC1B,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC,mBAAmB,CAAC,CAAA;IAClD,sBAAsB,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC,gBAAgB,CAAC,CAAA;IACvD,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC,CAAA;AAChC,CAAC;AAiED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAC9B,QAA4B,EAC5B,GAAgB,EAChB,UAAmC,EAAE;IAErC,MAAM,MAAM,GAAyB,EAAE,CAAA;IACvC,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;IAC/C,MAAM,QAAQ,GAAmC,CAAC,WAAW,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAA;IAEhF,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,CAAC,IAAI,CACT,QAAQ,CAAC;YACP,IAAI,EAAE,oBAAoB;YAC1B,OAAO,EAAE,aAAa,GAAG,CAAC,EAAE,oCAAoC,GAAG,CAAC,UAAU,IAAI;YAClF,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,GAAG,CAAC,EAAE;YAClB,IAAI,EAAE,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE;SACrC,CAAC,CACH,CAAA;QACD,OAAO,MAAM,CAAA;IACf,CAAC;IAED,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,GAAG,OAAO,CAAA;IAC5D,MAAM,gBAAgB,GAAG,OAAO,CAAC,sBAAsB,CAAA;IACvD,8EAA8E;IAC9E,+EAA+E;IAC/E,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAA;IACxD,MAAM,iBAAiB,GAAG,WAAW,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAA;IAEjF,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;QACtC,MAAM,SAAS,GAAG,CAAC,GAAG,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;QACrD,MAAM,SAAS,GAAG,gBAAgB,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;QAE1D,mEAAmE;QACnE,MAAM,OAAO,GACX,SAAS,IAAI,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,OAAO,IAAI,GAAG,CAAC,CAAA;QAEnF,MAAM,aAAa,GAAG,YAAY;YAChC,CAAC,CAAC,GAAG,CAAC,aAAa,IAAI,YAAY,CAAC,OAAO;YAC3C,CAAC,CAAC,SAAS,CAAA;QAEb,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,8EAA8E;YAC9E,+EAA+E;YAC/E,oFAAoF;YACpF,MAAM,QAAQ,GAAG,SAAS;gBACxB,CAAC,CAAC,YAAY;oBACZ,CAAC,CAAC,YAAY,CAAC,UAAU,EAAE,GAAG,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,KAAK;oBACvE,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;gBACzC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YAC1B,MAAM,cAAc,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAA;YAEnF,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;YAEnF,kBAAkB;YAClB,IAAI,KAAK,CAAC,UAAU,EAAE,QAAQ,EAAE,CAAC;gBAC/B,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,IAAI,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;wBACtB,MAAM,CAAC,IAAI,CACT,QAAQ,CAAC;4BACP,IAAI,EAAE,wBAAwB;4BAC9B,OAAO,EAAE,mBAAmB,KAAK,CAAC,IAAI,eAAe;4BACrD,IAAI;4BACJ,YAAY,EAAE,UAAU,CAAC,EAAE;4BAC3B,UAAU,EAAE,GAAG,CAAC,EAAE;4BAClB,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE;yBAC5B,CAAC,CACH,CAAA;wBACD,SAAQ;oBACV,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,MAAM,SAAS,GAAG,MAAM,KAAK,aAAa,CAAA;oBAC1C,IAAI,SAAS,IAAI,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;wBACzC,uEAAuE;wBACvE,uEAAuE;wBACvE,qCAAqC;wBACrC,MAAM,CAAC,IAAI,CACT,QAAQ,CAAC;4BACP,IAAI,EAAE,yBAAyB;4BAC/B,OAAO,EAAE,6BAA6B,KAAK,CAAC,IAAI,wCAAwC,MAAM,IAAI;4BAClG,IAAI;4BACJ,YAAY,EAAE,UAAU,CAAC,EAAE;4BAC3B,UAAU,EAAE,GAAG,CAAC,EAAE;4BAClB,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE;yBACpC,CAAC,CACH,CAAA;oBACH,CAAC;yBAAM,IAAI,CAAC,SAAS,IAAI,OAAO,CAAC,cAAc,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;wBACtE,8DAA8D;wBAC9D,MAAM,CAAC,IAAI,CACT,QAAQ,CAAC;4BACP,IAAI,EAAE,yBAAyB;4BAC/B,QAAQ,EAAE,SAAS;4BACnB,OAAO,EAAE,oBAAoB,KAAK,CAAC,IAAI,8BAA8B,MAAM,oBAAoB;4BAC/F,IAAI;4BACJ,YAAY,EAAE,UAAU,CAAC,EAAE;4BAC3B,UAAU,EAAE,GAAG,CAAC,EAAE;4BAClB,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE;yBACpC,CAAC,CACH,CAAA;oBACH,CAAC;oBACD,IAAI,OAAO,CAAC,QAAQ,CAAC;wBAAE,SAAQ;gBACjC,CAAC;YACH,CAAC;YACD,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,QAAQ,CAAC;gBAAE,SAAQ;YAEzE,MAAM,KAAK,GAAG,QAAQ,CAAA;YACtB,MAAM,GAAG,GAAa;gBACpB,UAAU;gBACV,KAAK;gBACL,KAAK;gBACL,IAAI;gBACJ,QAAQ;gBACR,KAAK;gBACL,UAAU,EAAE,GAAG,CAAC,EAAE;gBAClB,iBAAiB;gBACjB,WAAW;gBACX,WAAW,EAAE,OAAO,CAAC,WAAW;aACjC,CAAA;YACD,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,CAAC,CAAA;QAC5E,CAAC;IACH,CAAC;IAED,6EAA6E;IAC7E,yEAAyE;IACzE,+EAA+E;IAC/E,yCAAyC;IACzC,IAAI,KAAK,IAAI,mBAAmB,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7C,IAAI,cAAc,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC;YAC9E,MAAM,CAAC,IAAI,CACT,QAAQ,CAAC;gBACP,IAAI,EAAE,iBAAiB;gBACvB,OAAO,EAAE,aAAa,GAAG,CAAC,EAAE,yDAAyD;gBACrF,IAAI,EAAE,CAAC,GAAG,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC;gBACvC,YAAY,EAAE,UAAU,CAAC,EAAE;gBAC3B,UAAU,EAAE,GAAG,CAAC,EAAE;gBAClB,IAAI,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE;aAC1B,CAAC,CACH,CAAA;QACH,CAAC;IACH,CAAC;IAED,6EAA6E;IAC7E,4EAA4E;IAC5E,0EAA0E;IAC1E,4EAA4E;IAC5E,6EAA6E;IAC7E,0EAA0E;IAC1E,iFAAiF;IACjF,0EAA0E;IAC1E,MAAM,UAAU,GAAG,OAAO,CAAC,iBAAiB,IAAI,wBAAwB,CAAA;IACxE,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;QACnB,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,eAAe,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;QACtD,IAAI,KAAK,IAAI,UAAU,EAAE,CAAC;YACxB,MAAM,CAAC,IAAI,CACT,QAAQ,CAAC;gBACP,IAAI,EAAE,wBAAwB;gBAC9B,QAAQ,EAAE,OAAO;gBACjB,OAAO,EAAE,aAAa,GAAG,CAAC,EAAE,WAAW,KAAK,4CAA4C,UAAU,4IAA4I;gBAC9O,IAAI;gBACJ,YAAY,EAAE,UAAU,CAAC,EAAE;gBAC3B,UAAU,EAAE,GAAG,CAAC,EAAE;gBAClB,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE;aACnC,CAAC,CACH,CAAA;QACH,CAAC;aAAM,IAAI,KAAK,IAAI,UAAU,GAAG,yBAAyB,EAAE,CAAC;YAC3D,MAAM,CAAC,IAAI,CACT,QAAQ,CAAC;gBACP,IAAI,EAAE,wBAAwB;gBAC9B,QAAQ,EAAE,SAAS;gBACnB,OAAO,EAAE,aAAa,GAAG,CAAC,EAAE,WAAW,KAAK,2CAA2C,UAAU,6EAA6E;gBAC9K,IAAI;gBACJ,YAAY,EAAE,UAAU,CAAC,EAAE;gBAC3B,UAAU,EAAE,GAAG,CAAC,EAAE;gBAClB,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE;aACnC,CAAC,CACH,CAAA;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,iBAAiB,CAC/B,QAA4B,EAC5B,IAA4B,EAC5B,UAAmC,EAAE;IAErC,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAA;AACpE,CAAC;AAED,gFAAgF;AAChF,+EAA+E;AAC/E,2EAA2E;AAC3E,gFAAgF;AAChF,2EAA2E;AAC3E,wCAAwC;AAExC;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,KAAe,EAAE,KAAc;IAC7D,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,MAAM;YACT,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,kBAAkB,CAAA;QAC9D,KAAK,UAAU;YACb,wEAAwE;YACxE,2EAA2E;YAC3E,0EAA0E;YAC1E,0EAA0E;YAC1E,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC;gBAC/E,CAAC,CAAC,IAAI;gBACN,CAAC,CAAC,2DAA2D,CAAA;QACjE,KAAK,QAAQ;YACX,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,kBAAkB,CAAA;QACtF,KAAK,SAAS;YACZ,OAAO,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,mBAAmB,CAAA;QAChE,KAAK,MAAM;YACT,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC9B,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,IAAI,CAAA;YAC/E,CAAC;YACD,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,6CAA6C,CAAA;QACzF,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAA;YAC1D,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;YAClF,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;gBACvB,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC7C,OAAO,cAAc,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAA;gBACzD,CAAC;YACH,CAAC;YACD,OAAO,IAAI,CAAA;QACb,CAAC;QACD,KAAK,QAAQ;YACX,kEAAkE;YAClE,uEAAuE;YACvE,IAAI,KAAK,CAAC,WAAW,KAAK,MAAM,EAAE,CAAC;gBACjC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;oBACvE,CAAC,CAAC,IAAI;oBACN,CAAC,CAAC,2BAA2B,CAAA;YACjC,CAAC;YACD,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,mBAAmB,CAAA;QAC1D,KAAK,UAAU,CAAC;QAChB,KAAK,OAAO,CAAC;QACb,KAAK,QAAQ;YACX,wEAAwE;YACxE,OAAO,IAAI,CAAA;QACb,OAAO,CAAC,CAAC,CAAC;YACR,mEAAmE;YACnE,MAAM,WAAW,GAAU,KAAK,CAAA;YAChC,KAAK,WAAW,CAAA;YAChB,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAe,EAAE,KAAc;IAC9D,MAAM,GAAG,GAAa,EAAE,CAAA;IACxB,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,CAAA;IAC9B,IAAI,CAAC,KAAK;QAAE,OAAO,GAAG,CAAA;IACtB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG;YAAE,GAAG,CAAC,IAAI,CAAC,8BAA8B,KAAK,CAAC,GAAG,EAAE,CAAC,CAAA;QAC5G,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG;YAAE,GAAG,CAAC,IAAI,CAAC,6BAA6B,KAAK,CAAC,GAAG,EAAE,CAAC,CAAA;QAC3G,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAChC,IAAI,EAAsB,CAAA;YAC1B,IAAI,CAAC;gBACH,EAAE,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;YAChC,CAAC;YAAC,MAAM,CAAC;gBACP,EAAE,GAAG,SAAS,CAAA;YAChB,CAAC;YACD,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;gBAAE,GAAG,CAAC,IAAI,CAAC,0BAA0B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;QAChF,CAAC;IACH,CAAC;SAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACrC,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,IAAI,KAAK,GAAG,KAAK,CAAC,GAAG;YAAE,GAAG,CAAC,IAAI,CAAC,oBAAoB,KAAK,CAAC,GAAG,EAAE,CAAC,CAAA;QAC3F,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,IAAI,KAAK,GAAG,KAAK,CAAC,GAAG;YAAE,GAAG,CAAC,IAAI,CAAC,uBAAuB,KAAK,CAAC,GAAG,EAAE,CAAC,CAAA;IAChG,CAAC;SAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAChC,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG;YAAE,GAAG,CAAC,IAAI,CAAC,kBAAkB,KAAK,CAAC,GAAG,QAAQ,CAAC,CAAA;QACtG,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG;YAAE,GAAG,CAAC,IAAI,CAAC,iBAAiB,KAAK,CAAC,GAAG,QAAQ,CAAC,CAAA;IACvG,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAuB,EAAE,KAAc;IACrE,MAAM,GAAG,GAAa,EAAE,CAAA;IACxB,IAAI,KAAK,CAAC,WAAW,KAAK,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5E,GAAG,CAAC,IAAI,CAAC,4BAA4B,KAAK,CAAC,MAAM,UAAU,CAAC,CAAA;IAC9D,CAAC;IACD,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;IACnD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,CAAA;QAC1B,IAAI,CAAC,GAAG;YAAE,GAAG,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAA;aAC/D,IAAI,GAAG,CAAC,UAAU,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;YACzC,GAAG,CAAC,IAAI,CAAC,yBAAyB,GAAG,CAAC,UAAU,kBAAkB,KAAK,CAAC,MAAM,GAAG,CAAC,CAAA;QACpF,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAoB,EAAE,KAAc;IAC/D,MAAM,GAAG,GAAa,EAAE,CAAA;IACxB,IAAI,KAAK,CAAC,WAAW,KAAK,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5E,GAAG,CAAC,IAAI,CAAC,4BAA4B,KAAK,CAAC,MAAM,UAAU,CAAC,CAAA;IAC9D,CAAC;IACD,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;IAClD,KAAK,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;QACtB,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,GAAG,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAA;IACrE,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAe;IACjD,OAAO,CAAC,KAAK,EAAE,EAAE;QACf,IAAI,OAAO,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAA;QAC/B,OAAO,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,IAAI,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAA;IAC9F,CAAC,CAAA;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAe;IAChD,MAAM,MAAM,GAAyB,EAAE,CAAA;IACvC,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;QACrB,MAAM,CAAC,IAAI,CACT,QAAQ,CAAC;YACP,IAAI,EAAE,sBAAsB;YAC5B,OAAO,EAAE,mBAAmB,KAAK,CAAC,IAAI,iEAAiE;YACvG,IAAI,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC;YAC3B,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE;SAC5B,CAAC,CACH,CAAA;IACH,CAAC;IACD,IAAI,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;QAC7B,MAAM,CAAC,IAAI,CACT,QAAQ,CAAC;YACP,IAAI,EAAE,sBAAsB;YAC5B,OAAO,EAAE,mBAAmB,KAAK,CAAC,IAAI,0EAA0E;YAChH,IAAI,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC;YAC3B,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE;SAC5B,CAAC,CACH,CAAA;IACH,CAAC;IACD,iFAAiF;IACjF,mFAAmF;IACnF,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC5B,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,MAAM;YAAE,MAAM,CAAC,IAAI,CAAC,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAA;IACzE,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAeD;;;;;;;;;GASG;AACH;;;;;;GAMG;AACH,SAAS,sBAAsB,CAC7B,KAAe,EACf,KAAc,EACd,IAAa,EACb,OAAsC,EACtC,MAA4B;IAE5B,MAAM,IAAI,GAAG,CAAC,MAAc,EAAE,OAAmC,qBAAqB,EAAE,EAAE,CACxF,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,KAAK,CAAC,IAAI,KAAK,MAAM,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAA;IAEhH,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACnB,IAAI,KAAK,CAAC,UAAU,EAAE,QAAQ,EAAE,CAAC;YAC/B,MAAM,CAAC,IAAI,CACT,QAAQ,CAAC;gBACP,IAAI,EAAE,wBAAwB;gBAC9B,OAAO,EAAE,kBAAkB,KAAK,CAAC,IAAI,eAAe;gBACpD,IAAI;gBACJ,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE;aAC5B,CAAC,CACH,CAAA;YACD,OAAM;QACR,CAAC;QACD,6EAA6E;QAC7E,iFAAiF;QACjF,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,KAAK,CAAC;YAAE,OAAM;IACjD,CAAC;IAED,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;IAC7C,IAAI,OAAO;QAAE,IAAI,CAAC,OAAO,CAAC,CAAA;IAC1B,KAAK,MAAM,MAAM,IAAI,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,CAAC,MAAM,CAAC,CAAA;IAEjE,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC9B,KAAK,MAAM,MAAM,IAAI,sBAAsB,CAAC,KAAK,EAAE,KAAK,CAAC;YAAE,IAAI,CAAC,MAAM,CAAC,CAAA;IACzE,CAAC;SAAM,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAClC,KAAK,MAAM,MAAM,IAAI,mBAAmB,CAAC,KAAK,EAAE,KAAK,CAAC;YAAE,IAAI,CAAC,MAAM,CAAC,CAAA;IACtE,CAAC;SAAM,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC;QAClE,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,mBAAmB,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC;YAChE,MAAM,CAAC,IAAI,CACT,QAAQ,CAAC;gBACP,IAAI,EAAE,qBAAqB;gBAC3B,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,OAAO;gBACrC,OAAO,EAAE,SAAS,KAAK,CAAC,IAAI,MAAM,OAAO,CAAC,OAAO,EAAE;gBACnD,IAAI;gBACJ,IAAI,EAAE;oBACJ,KAAK,EAAE,KAAK,CAAC,IAAI;oBACjB,IAAI,EAAE,QAAQ;oBACd,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC5D;aACF,CAAC,CACH,CAAA;QACH,CAAC;IACH,CAAC;SAAM,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,OAAO,CAAC,sBAAsB,EAAE,CAAC;QACvE,2EAA2E;QAC3E,wEAAwE;QACxE,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,sBAAsB,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC;YACnE,MAAM,CAAC,IAAI,CACT,QAAQ,CAAC;gBACP,IAAI,EAAE,qBAAqB;gBAC3B,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,OAAO;gBACrC,OAAO,EAAE,SAAS,KAAK,CAAC,IAAI,MAAM,OAAO,CAAC,OAAO,EAAE;gBACnD,IAAI;gBACJ,IAAI,EAAE;oBACJ,KAAK,EAAE,KAAK,CAAC,IAAI;oBACjB,IAAI,EAAE,UAAU;oBAChB,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC5D;aACF,CAAC,CACH,CAAA;QACH,CAAC;IACH,CAAC;SAAM,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACnC,2EAA2E;QAC3E,MAAM,KAAK,GACT,KAAK,CAAC,WAAW,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;QAC9E,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;YAC5B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;gBAAE,OAAM;YAChC,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;YACvE,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBAC/B,sBAAsB,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;YACvF,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,SAA8B,EAC9B,KAA8B,EAC9B,UAAyC,EAAE;IAE3C,MAAM,MAAM,GAAyB,EAAE,CAAA;IACvC,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAA;QACzC,sBAAsB,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;IAC1F,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,eAAe,CAC7B,KAAoB,EACpB,KAAc;IAEd,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;IAChG,MAAM,GAAG,GAAkB,EAAE,CAAA;IAC7B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,CAAA;QAC1B,IAAI,CAAC,GAAG;YAAE,SAAQ;QAClB,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAC1B,IAAI,GAAG;YAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACxB,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,WAAW,CAAC,GAAgB;IAC1C,OAAO,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,CAAA;AAC1B,CAAC","sourcesContent":["import type { CollectionRegistry } from './collections'\nimport type { CollectionDef } from './collections'\nimport type {\n AssetFieldDef,\n BlocksFieldDef,\n FieldDef,\n RelationFieldDef,\n RichTextFieldDef,\n} from './fields'\nimport type { CmsDocument, DocumentRef, FieldValues } from './documents'\nimport { documentKey } from './documents'\nimport { readAssetId, readDocumentRef } from './envelopes'\nimport type { LocaleConfig } from './localization'\nimport { isFieldLocalized, resolveField } from './localization'\nimport { hasParentCycle, parentRelationField } from './hierarchy'\nimport { cmsIssue } from './issues'\nimport type { CmsPath, CmsValidationIssue } from './issues'\nimport { CONVEX_MAX_NESTING_DEPTH, NESTING_DEPTH_WARN_MARGIN, measureMaxDepth } from './nesting-depth'\n\n/** Index of documents by identity, used to validate relation/asset targets. */\nexport interface DocumentStore {\n has(ref: DocumentRef): boolean\n get(ref: DocumentRef): CmsDocument | undefined\n}\n\n/** Build a `DocumentStore` from a flat list of documents. */\nexport function createDocumentStore(docs: readonly CmsDocument[]): DocumentStore & {\n list(): CmsDocument[]\n issues: readonly CmsValidationIssue[]\n} {\n const byKey = new Map<string, CmsDocument>()\n const issues: CmsValidationIssue[] = []\n for (const doc of docs) {\n const key = documentKey(doc)\n if (byKey.has(key)) {\n issues.push(\n cmsIssue({\n code: 'duplicate-document',\n message: `Duplicate document \"${doc.id}\" in collection \"${doc.collection}\".`,\n path: ['documents', key],\n collectionId: doc.collection,\n documentId: doc.id,\n }),\n )\n continue\n }\n byKey.set(key, doc)\n }\n return {\n issues,\n has: (ref) => byKey.has(documentKey(ref)),\n get: (ref) => byKey.get(documentKey(ref)),\n list: () => [...byKey.values()],\n }\n}\n\nfunction isEmpty(value: unknown): boolean {\n if (value === undefined || value === null) return true\n if (typeof value === 'string') return value.length === 0\n if (Array.isArray(value)) return value.length === 0\n // EC-253: a plain object with no keys is empty — so a required `object` field\n // whose value is `{}` is flagged missing. Object-shaped values that DO carry\n // keys (relation refs `{collection,id}`, rich-text envelopes) are never empty.\n if (isPlainObject(value)) return Object.keys(value).length === 0\n return false\n}\n\n/** A non-null, non-array object — the shape an `object` field value takes (EC-253). */\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\n/**\n * Whether a value must still be validated even though {@link isEmpty} is true\n * (EC-253). A PRESENT plain object of an `object` field is validated even with no\n * keys, so its required subfields surface (`{}` is not the same as absent); every\n * other empty/absent value has nothing to validate — `required` owns presence.\n */\nfunction isPresentObjectValue(field: FieldDef, value: unknown): boolean {\n return field.type === 'object' && isPlainObject(value)\n}\n\n// EC-277: relation values are self-typed (`{ type:'reference', collection, id }`);\n// `readDocumentRef` unwraps that AND legacy bare `{ collection, id }` (lazy-on-read).\nconst coerceRef = readDocumentRef\n\ninterface FieldCtx {\n collection: CollectionDef\n field: FieldDef\n value: unknown\n path: ReadonlyArray<string | number>\n registry: CollectionRegistry\n store: DocumentStore | undefined\n documentId: string\n /**\n * Whether the document being validated is published (EC-173/EC-224). Sourced\n * from the version POINTER via the injected {@link ValidateDocumentOptions.isPublished}\n * predicate — never a flat `state` flag.\n */\n isSourcePublished: boolean\n /** Is a referenced target published? (the same pointer predicate). */\n isPublished: (ref: DocumentRef) => boolean\n /** Asset-existence oracle (assets live in their own repository, not the doc store). */\n assetExists: ((id: string) => boolean) | undefined\n}\n\nfunction validateScalarType(ctx: FieldCtx, issues: CmsValidationIssue[]): void {\n const { field, value, path, collection, documentId } = ctx\n const bad = (detail: string) =>\n issues.push(\n cmsIssue({\n code: 'invalid-field-value',\n message: `Field \"${field.name}\" ${detail}.`,\n path,\n collectionId: collection.id,\n documentId,\n meta: { field: field.name, type: field.type },\n }),\n )\n\n switch (field.type) {\n case 'text':\n if (typeof value !== 'string') bad('expects a string')\n break\n case 'richText':\n // A rich-text value is either a plain string (CMS markdown/HTML) or the\n // structured @elytracms/rich-text storage envelope (an object) carrying\n // formatting + composition embeds (EC-159/EC-189). Mirrors the prop-side\n // `checkScalarType`; deep validation is delegated (the renderer parse guard\n // + the injected rich-text-embed validator).\n if (typeof value !== 'string' && !(typeof value === 'object' && value !== null)) {\n bad('expects rich-text content (a string or a rich-text value)')\n }\n break\n case 'number':\n if (typeof value !== 'number' || Number.isNaN(value)) bad('expects a number')\n break\n case 'boolean':\n if (typeof value !== 'boolean') bad('expects a boolean')\n break\n case 'date':\n // Accept ISO date strings or epoch numbers; reject anything unparseable.\n if (typeof value === 'string') {\n if (Number.isNaN(Date.parse(value))) bad('expects a valid date string')\n } else if (typeof value !== 'number') {\n bad('expects a date (ISO string or epoch number)')\n }\n break\n case 'select': {\n const allowed = new Set(field.options.map((o) => o.value))\n const values = field.multiple ? (Array.isArray(value) ? value : [value]) : [value]\n for (const v of values) {\n if (typeof v !== 'string' || !allowed.has(v)) {\n bad(`has value \"${String(v)}\" not among its options`)\n }\n }\n break\n }\n case 'object':\n // EC-253: only the TOP-LEVEL shape is checked here (an array of objects for\n // `many`, a single object for `one`); recursion into the subfields lives in\n // `validateObject`, which skips malformed items this already reported.\n if (field.cardinality === 'many') {\n if (!Array.isArray(value) || value.some((item) => !isPlainObject(item))) {\n bad('expects a list of objects')\n }\n } else if (!isPlainObject(value)) {\n bad('expects an object')\n }\n break\n case 'relation':\n case 'asset':\n case 'blocks':\n // Validated structurally elsewhere (targets / composition), not as scalars.\n break\n default: {\n // Exhaustiveness: a new field type must add a case above (EC-253).\n const _exhaustive: never = field\n void _exhaustive\n }\n }\n}\n\n/**\n * Validate a `blocks` composition field value via the injected callback (EC-188).\n * The composition tree is validated against the field's `allow` vocabulary + the\n * component registry by the studio-supplied `validateComposition`; each finding is\n * wrapped into a field-keyed issue so it surfaces inline like any other field\n * error. A no-op when the field is not a `blocks` field or no validator is wired\n * (e.g. headless contexts without a registry).\n */\nfunction validateBlocks(\n ctx: FieldCtx,\n issues: CmsValidationIssue[],\n validateComposition: ValidateDocumentOptions['validateComposition'],\n): void {\n if (ctx.field.type !== 'blocks' || !validateComposition) return\n const { field, value, path, collection, documentId } = ctx\n for (const finding of validateComposition(value, field)) {\n issues.push(\n cmsIssue({\n code: 'invalid-field-value',\n severity: finding.severity ?? 'error',\n message: `Field \"${field.name}\": ${finding.message}`,\n path,\n collectionId: collection.id,\n documentId,\n meta: {\n field: field.name,\n type: 'blocks',\n ...(finding.nodePath ? { nodePath: finding.nodePath } : {}),\n },\n }),\n )\n }\n}\n\n/**\n * Validate the composition embeds inside a `richText` field value via the injected\n * callback (EC-189). A rich-text value may carry `componentEmbed` nodes, each\n * holding a single `ComponentNode` constrained by the field's `allow` vocabulary —\n * the SAME leash a `blocks` field uses, applied to prose embeds. The studio-supplied\n * `validateRichTextEmbeds` walks the embeds and validates each via\n * `validateCompositionValue`; each finding is wrapped into a field-keyed issue,\n * carrying the rich-text node path. A no-op when the field is not `richText` or no\n * validator is wired (e.g. headless contexts without a registry).\n */\nfunction validateRichTextEmbeds(\n ctx: FieldCtx,\n issues: CmsValidationIssue[],\n validateRichText: ValidateDocumentOptions['validateRichTextEmbeds'],\n): void {\n if (ctx.field.type !== 'richText' || !validateRichText) return\n const { field, value, path, collection, documentId } = ctx\n for (const finding of validateRichText(value, field)) {\n issues.push(\n cmsIssue({\n code: 'invalid-field-value',\n severity: finding.severity ?? 'error',\n message: `Field \"${field.name}\": ${finding.message}`,\n path,\n collectionId: collection.id,\n documentId,\n meta: {\n field: field.name,\n type: 'richText',\n ...(finding.nodePath ? { nodePath: finding.nodePath } : {}),\n },\n }),\n )\n }\n}\n\nfunction validateConstraints(ctx: FieldCtx, issues: CmsValidationIssue[]): void {\n const { field, value, path, collection, documentId } = ctx\n const rules = field.validation\n if (!rules) return\n const push = (detail: string) =>\n issues.push(\n cmsIssue({\n code: 'invalid-field-value',\n message: `Field \"${field.name}\" ${detail}.`,\n path,\n collectionId: collection.id,\n documentId,\n meta: { field: field.name },\n }),\n )\n\n if (typeof value === 'string') {\n if (rules.min !== undefined && value.length < rules.min) push(`is shorter than min length ${rules.min}`)\n if (rules.max !== undefined && value.length > rules.max) push(`is longer than max length ${rules.max}`)\n if (rules.pattern !== undefined) {\n let re: RegExp | undefined\n try {\n re = new RegExp(rules.pattern)\n } catch {\n re = undefined\n }\n if (re && !re.test(value)) push(`does not match pattern ${rules.pattern}`)\n }\n } else if (typeof value === 'number') {\n if (rules.min !== undefined && value < rules.min) push(`is less than min ${rules.min}`)\n if (rules.max !== undefined && value > rules.max) push(`is greater than max ${rules.max}`)\n } else if (Array.isArray(value)) {\n if (rules.min !== undefined && value.length < rules.min) push(`has fewer than ${rules.min} items`)\n if (rules.max !== undefined && value.length > rules.max) push(`has more than ${rules.max} items`)\n }\n}\n\nfunction validateRelation(ctx: FieldCtx, issues: CmsValidationIssue[]): void {\n const { field, value, path, collection, registry, store, documentId } = ctx\n if (field.type !== 'relation') return\n\n if (!registry.has(field.target)) {\n issues.push(\n cmsIssue({\n code: 'unknown-relation-target',\n message: `Relation field \"${field.name}\" targets unknown collection \"${field.target}\".`,\n path,\n collectionId: collection.id,\n documentId,\n meta: { field: field.name, target: field.target },\n }),\n )\n return\n }\n\n const refs = Array.isArray(value) ? value : value === undefined || value === null ? [] : [value]\n\n if (field.cardinality === 'one' && Array.isArray(value) && value.length > 1) {\n issues.push(\n cmsIssue({\n code: 'cardinality-violation',\n message: `Relation field \"${field.name}\" is single-valued but has ${value.length} targets.`,\n path,\n collectionId: collection.id,\n documentId,\n meta: { field: field.name, cardinality: 'one' },\n }),\n )\n }\n\n refs.forEach((raw, i) => {\n const ref = coerceRef(raw)\n if (!ref) {\n issues.push(\n cmsIssue({\n code: 'invalid-field-value',\n message: `Relation field \"${field.name}\" holds a value that is not a document reference.`,\n path: [...path, i],\n collectionId: collection.id,\n documentId,\n meta: { field: field.name },\n }),\n )\n return\n }\n if (ref.collection !== field.target) {\n issues.push(\n cmsIssue({\n code: 'unknown-relation-target',\n message: `Relation field \"${field.name}\" points at collection \"${ref.collection}\" but targets \"${field.target}\".`,\n path: [...path, i],\n collectionId: collection.id,\n documentId,\n meta: { field: field.name, target: field.target, got: ref.collection },\n }),\n )\n return\n }\n if (store) {\n const target = store.get(ref)\n if (!target) {\n issues.push(\n cmsIssue({\n code: 'unknown-relation-target',\n message: `Relation field \"${field.name}\" references missing document \"${ref.id}\" in \"${ref.collection}\".`,\n path: [...path, i],\n collectionId: collection.id,\n documentId,\n meta: { field: field.name, target: ref.collection, id: ref.id },\n }),\n )\n } else if (ctx.isSourcePublished && !ctx.isPublished(ref)) {\n // EC-173 weak-reference aftermath: the source is published but the\n // target is not, so published delivery serves the declared fallback\n // for this reference. Explicit and visible — but a warning, never an\n // error: weak references must not block saving or re-publishing the\n // source. Re-publishing the target clears it.\n issues.push(\n cmsIssue({\n code: 'unpublished-relation-target',\n severity: 'warning',\n message: `Relation field \"${field.name}\" references unpublished document \"${ref.id}\" in \"${ref.collection}\" — the published site shows a fallback there.`,\n path: [...path, i],\n collectionId: collection.id,\n documentId,\n meta: { field: field.name, target: ref.collection, id: ref.id },\n }),\n )\n }\n }\n })\n}\n\nfunction validateAsset(ctx: FieldCtx, issues: CmsValidationIssue[]): void {\n const { field, value, path, collection, registry, store, documentId } = ctx\n if (field.type !== 'asset') return\n\n const assetCollections = registry.assetCollections()\n if (assetCollections.length === 0) {\n issues.push(\n cmsIssue({\n code: 'invalid-field-config',\n message: `Asset field \"${field.name}\" requires an asset collection, but none is registered.`,\n path,\n collectionId: collection.id,\n documentId,\n meta: { field: field.name },\n }),\n )\n return\n }\n\n const ids = Array.isArray(value) ? value : value === undefined || value === null ? [] : [value]\n if (field.cardinality === 'one' && Array.isArray(value) && value.length > 1) {\n issues.push(\n cmsIssue({\n code: 'cardinality-violation',\n message: `Asset field \"${field.name}\" is single-valued but has ${value.length} targets.`,\n path,\n collectionId: collection.id,\n documentId,\n meta: { field: field.name, cardinality: 'one' },\n }),\n )\n }\n\n ids.forEach((rawValue, i) => {\n // An asset value is the id of a document in some asset collection — self-typed\n // (`{ type:'asset', id }`) or legacy bare id (EC-277 lazy-on-read).\n const raw = readAssetId(rawValue)\n if (raw === undefined) {\n issues.push(\n cmsIssue({\n code: 'invalid-field-value',\n message: `Asset field \"${field.name}\" expects an asset id.`,\n path: [...path, i],\n collectionId: collection.id,\n documentId,\n meta: { field: field.name },\n }),\n )\n return\n }\n // Asset existence is checked against the asset library when the caller\n // supplies an oracle (assets live in their own repository, not as CMS\n // documents — EC-212 follow-up); otherwise it falls back to the document\n // store (fixtures that model assets as documents). With neither, existence\n // is simply not checked (`undefined` → skip), never wrongly flagged.\n const exists = ctx.assetExists\n ? ctx.assetExists(raw)\n : store\n ? assetCollections.some((c) => store.has({ collection: c.id, id: raw }))\n : undefined\n if (exists === false) {\n issues.push(\n cmsIssue({\n code: 'unknown-asset',\n message: `Asset field \"${field.name}\" references unknown asset \"${raw}\".`,\n path: [...path, i],\n collectionId: collection.id,\n documentId,\n meta: { field: field.name, asset: raw },\n }),\n )\n }\n })\n}\n\n/** The injected composition/rich-text validators, threaded through the recursion. */\ninterface FieldValidators {\n validateComposition: ValidateDocumentOptions['validateComposition']\n validateRichText: ValidateDocumentOptions['validateRichTextEmbeds']\n}\n\n/**\n * Validate an `object` / repeater field value (EC-253) by recursing into each\n * item's subfields. `cardinality: 'many'` is an array of objects (each item keyed\n * by index in the path); `'one'` is a single object. Malformed items (already\n * reported by {@link validateScalarType}) are skipped. The same {@link FieldCtx}\n * (registry/store/asset oracle) is threaded so nested relation/asset subfields get\n * the same target-existence checks they would at the top level.\n */\nfunction validateObject(\n ctx: FieldCtx,\n issues: CmsValidationIssue[],\n v: FieldValidators,\n): void {\n const { field } = ctx\n if (field.type !== 'object') return\n const items =\n field.cardinality === 'many' ? (Array.isArray(ctx.value) ? ctx.value : []) : [ctx.value]\n items.forEach((item, index) => {\n if (!isPlainObject(item)) return\n const itemPath = field.cardinality === 'many' ? [...ctx.path, index] : ctx.path\n for (const sub of field.fields) {\n const subValue = item[sub.name]\n const subPath = [...itemPath, sub.name]\n if (isEmpty(subValue)) {\n if (sub.validation?.required) {\n issues.push(\n cmsIssue({\n code: 'missing-required-field',\n message: `Required field \"${sub.name}\" is missing.`,\n path: subPath,\n collectionId: ctx.collection.id,\n documentId: ctx.documentId,\n meta: { field: sub.name },\n }),\n )\n continue\n }\n // EC-253 (C1): an optional but PRESENT nested object still recurses so its\n // own required subfields surface; any other empty/absent value is skipped.\n if (!isPresentObjectValue(sub, subValue)) continue\n }\n validateFieldValue({ ...ctx, field: sub, value: subValue, path: subPath }, issues, v)\n }\n })\n}\n\n/**\n * Run every per-field validator for one field/value/path. The single dispatch\n * point shared by the document loop and the {@link validateObject} recursion, so\n * a subfield is validated exactly as a top-level field would be (EC-253).\n */\nfunction validateFieldValue(\n ctx: FieldCtx,\n issues: CmsValidationIssue[],\n v: FieldValidators,\n): void {\n validateScalarType(ctx, issues)\n validateConstraints(ctx, issues)\n validateRelation(ctx, issues)\n validateAsset(ctx, issues)\n validateBlocks(ctx, issues, v.validateComposition)\n validateRichTextEmbeds(ctx, issues, v.validateRichText)\n validateObject(ctx, issues, v)\n}\n\n/**\n * A composition-validation finding, returned by the injected `validateComposition`\n * callback (EC-188). cms-core stays free of `@elytracms/core/project-graph`: the studio\n * wires the callback to `validateCompositionValue` + the component registry and\n * returns these plain findings, which cms-core wraps into `CmsValidationIssue`s\n * keyed on the field (so they surface inline like every other field issue).\n */\nexport interface CompositionIssue {\n message: string\n severity?: 'error' | 'warning'\n /** Slash-joined node path within the composition tree, for richer surfacing. */\n nodePath?: string\n}\n\nexport interface ValidateDocumentOptions {\n /** When provided, relation/asset targets are checked for existence (EC-017). */\n store?: DocumentStore\n /** When provided, localized required fields are checked across all locales (EC-018). */\n localeConfig?: LocaleConfig\n /**\n * When provided, `blocks` composition field values are validated (EC-188).\n * Injected so cms-core does not depend on `@elytracms/core/project-graph`; the studio\n * binds it to `validateCompositionValue(value, { allow, components })`.\n */\n validateComposition?: (value: unknown, field: BlocksFieldDef) => readonly CompositionIssue[]\n /**\n * When provided, the composition embeds inside a `richText` field value are\n * validated (EC-189). Injected so cms-core depends on neither\n * `@elytracms/core/project-graph` nor `@elytracms/core/rich-text`; the studio binds it to walk\n * the value's `componentEmbed` nodes and validate each embedded `ComponentNode`\n * via `validateCompositionValue(node, { allow, components })` against the field's\n * `allow` vocabulary. Findings carry the rich-text node path.\n */\n validateRichTextEmbeds?: (\n value: unknown,\n field: RichTextFieldDef,\n ) => readonly CompositionIssue[]\n /**\n * Published-ness oracle for the EC-173 weak-reference warning (EC-224): does a\n * given document ref serve the published site? Sourced from the version\n * pointer by the caller (the studio passes `cms.isPublished`). Absent → treated\n * as \"nothing is published\", so the warning simply does not fire — the flat\n * `state` flag is never consulted.\n */\n isPublished?: (ref: DocumentRef) => boolean\n /**\n * Asset-existence oracle (EC-212 follow-up): assets live in their own\n * repository, not as CMS documents, so the studio passes a predicate over the\n * real asset library. When provided, it is the source of truth for asset-field\n * existence; otherwise existence falls back to the document `store` (fixtures\n * that model assets as documents). With neither, asset existence is not checked.\n */\n assetExists?: (id: string) => boolean\n /**\n * Max document-blob nesting depth before the EC-260 guard fires (defaults to\n * {@link CONVEX_MAX_NESTING_DEPTH}, the Convex ceiling). At/over it the document\n * earns an ERROR (the write would fail), within {@link NESTING_DEPTH_WARN_MARGIN}\n * of it a WARNING. A backend with a different ceiling passes its own value; pass\n * `0` (or any non-positive number) to disable the check entirely.\n */\n nestingDepthLimit?: number\n}\n\n/**\n * Validate a document against its collection (EC-016/017/018). Returns structured\n * issues; never throws. Checks unknown collection, missing required fields,\n * scalar type correctness, declared constraints, relation targets, asset\n * references, and required localized values across configured locales.\n */\nexport function validateDocument(\n registry: CollectionRegistry,\n doc: CmsDocument,\n options: ValidateDocumentOptions = {},\n): CmsValidationIssue[] {\n const issues: CmsValidationIssue[] = []\n const collection = registry.get(doc.collection)\n const basePath: ReadonlyArray<string | number> = ['documents', documentKey(doc)]\n\n if (!collection) {\n issues.push(\n cmsIssue({\n code: 'unknown-collection',\n message: `Document \"${doc.id}\" references unknown collection \"${doc.collection}\".`,\n path: basePath,\n documentId: doc.id,\n meta: { collection: doc.collection },\n }),\n )\n return issues\n }\n\n const { store, localeConfig, validateComposition } = options\n const validateRichText = options.validateRichTextEmbeds\n // EC-224: published-ness is the version pointer, supplied by the caller. With\n // no predicate, nothing is treated as published (the EC-173 warning is inert).\n const isPublished = options.isPublished ?? (() => false)\n const isSourcePublished = isPublished({ collection: doc.collection, id: doc.id })\n\n for (const field of collection.fields) {\n const fieldPath = [...basePath, 'values', field.name]\n const localized = isFieldLocalized(collection, field.name)\n\n // Determine the locales over which we validate this field's value.\n const locales =\n localized && localeConfig ? localeConfig.locales : [localeConfig?.default ?? '*']\n\n const defaultLocale = localeConfig\n ? doc.defaultLocale ?? localeConfig.default\n : undefined\n\n for (const locale of locales) {\n // The fallback-resolved value (what would render) is used for type/constraint\n // checks; the *raw* per-locale value drives the localized-required check so we\n // can distinguish \"genuinely missing\" from \"satisfied via default-locale fallback\".\n const resolved = localized\n ? localeConfig\n ? resolveField(collection, doc, field.name, locale, localeConfig).value\n : doc.localized?.[locale]?.[field.name]\n : doc.values[field.name]\n const rawLocaleValue = localized ? doc.localized?.[locale]?.[field.name] : resolved\n\n const path = localized ? [...basePath, 'localized', locale, field.name] : fieldPath\n\n // Required check.\n if (field.validation?.required) {\n if (!localized) {\n if (isEmpty(resolved)) {\n issues.push(\n cmsIssue({\n code: 'missing-required-field',\n message: `Required field \"${field.name}\" is missing.`,\n path,\n collectionId: collection.id,\n documentId: doc.id,\n meta: { field: field.name },\n }),\n )\n continue\n }\n } else {\n const isDefault = locale === defaultLocale\n if (isDefault && isEmpty(rawLocaleValue)) {\n // A required localized field MUST have a value in the default locale —\n // it is the fallback source for every other locale. Missing here is an\n // error (no fallback can rescue it).\n issues.push(\n cmsIssue({\n code: 'missing-localized-value',\n message: `Required localized field \"${field.name}\" is missing for the default locale \"${locale}\".`,\n path,\n collectionId: collection.id,\n documentId: doc.id,\n meta: { field: field.name, locale },\n }),\n )\n } else if (!isDefault && isEmpty(rawLocaleValue) && isEmpty(resolved)) {\n // Non-default locale missing AND no fallback value available.\n issues.push(\n cmsIssue({\n code: 'missing-localized-value',\n severity: 'warning',\n message: `Localized field \"${field.name}\" has no value for locale \"${locale}\" and no fallback.`,\n path,\n collectionId: collection.id,\n documentId: doc.id,\n meta: { field: field.name, locale },\n }),\n )\n }\n if (isEmpty(resolved)) continue\n }\n }\n if (isEmpty(resolved) && !isPresentObjectValue(field, resolved)) continue\n\n const value = resolved\n const ctx: FieldCtx = {\n collection,\n field,\n value,\n path,\n registry,\n store,\n documentId: doc.id,\n isSourcePublished,\n isPublished,\n assetExists: options.assetExists,\n }\n validateFieldValue(ctx, issues, { validateComposition, validateRichText })\n }\n }\n\n // EC-218: a `parent` self-relation must not form a cycle. Needs the store to\n // walk the chain (other documents); the walk is cycle-safe, so this only\n // reports — it never loops. Only checked when the collection declares a parent\n // self-relation and a store is supplied.\n if (store && parentRelationField(collection)) {\n if (hasParentCycle(doc, (id) => store.get({ collection: collection.id, id }))) {\n issues.push(\n cmsIssue({\n code: 'hierarchy-cycle',\n message: `Document \"${doc.id}\" is its own ancestor — the parent chain forms a cycle.`,\n path: [...basePath, 'values', 'parent'],\n collectionId: collection.id,\n documentId: doc.id,\n meta: { field: 'parent' },\n }),\n )\n }\n }\n\n // EC-260: the document is stored as one `cmsDocuments.document` blob, so its\n // nesting depth counts toward Convex's hard 16-level ceiling. Beyond it the\n // write FAILS, today only as a Convex log WARN the studio never shows — a\n // silent footgun that becomes a hard crash on the deeper sites. Measure the\n // blob's depth pre-write and surface it as an explicit, path-named issue (an\n // ERROR at/over the ceiling — caught before dispatch instead of a backend\n // failure; a WARNING as it approaches, so an author has head-room to restructure\n // before an edit tips it over). Disabled by passing a non-positive limit.\n const depthLimit = options.nestingDepthLimit ?? CONVEX_MAX_NESTING_DEPTH\n if (depthLimit > 0) {\n const { depth, path } = measureMaxDepth(doc, basePath)\n if (depth >= depthLimit) {\n issues.push(\n cmsIssue({\n code: 'document-nesting-depth',\n severity: 'error',\n message: `Document \"${doc.id}\" nests ${depth} levels deep, at or beyond the backend's ${depthLimit}-level limit — the write would fail. Flatten the deepest path (e.g. extract a nested block into a reusable element or split the document).`,\n path,\n collectionId: collection.id,\n documentId: doc.id,\n meta: { depth, limit: depthLimit },\n }),\n )\n } else if (depth >= depthLimit - NESTING_DEPTH_WARN_MARGIN) {\n issues.push(\n cmsIssue({\n code: 'document-nesting-depth',\n severity: 'warning',\n message: `Document \"${doc.id}\" nests ${depth} levels deep, approaching the backend's ${depthLimit}-level limit. Consider flattening the deepest path before it grows further.`,\n path,\n collectionId: collection.id,\n documentId: doc.id,\n meta: { depth, limit: depthLimit },\n }),\n )\n }\n }\n\n return issues\n}\n\n/** Validate every document in a list against the registry. */\nexport function validateDocuments(\n registry: CollectionRegistry,\n docs: readonly CmsDocument[],\n options: ValidateDocumentOptions = {},\n): CmsValidationIssue[] {\n return docs.flatMap((d) => validateDocument(registry, d, options))\n}\n\n// --- EC-190: props as fields -------------------------------------------------\n// Component props are field-defs (the same vocabulary as document fields). The\n// helpers below are the prop-side mirror of the document validators: pure,\n// store-free type/constraint checks plus a prop-keyed `validateComponentProps`.\n// They share field-type semantics with the document path; `fields.test.ts`\n// guards against drift between the two.\n\n/**\n * Pure scalar/structural type check for a field value (EC-190). Returns a human\n * detail string when the value is the wrong shape for the field type, or null\n * when it is acceptable. Existence checks (relation/asset targets) are NOT done\n * here — they need a document store. Assumes a present value (the `required`\n * check owns presence).\n */\nexport function checkScalarType(field: FieldDef, value: unknown): string | null {\n switch (field.type) {\n case 'text':\n return typeof value === 'string' ? null : 'expects a string'\n case 'richText':\n // A rich-text value is either a plain string (CMS markdown/HTML) or the\n // structured @elytracms/rich-text storage envelope (an object) used by the\n // canvas RichText component. Deep validation is delegated (the renderer's\n // parse guard / a future injected rich-text validator, mirroring blocks).\n return typeof value === 'string' || (typeof value === 'object' && value !== null)\n ? null\n : 'expects rich-text content (a string or a rich-text value)'\n case 'number':\n return typeof value === 'number' && !Number.isNaN(value) ? null : 'expects a number'\n case 'boolean':\n return typeof value === 'boolean' ? null : 'expects a boolean'\n case 'date':\n if (typeof value === 'string') {\n return Number.isNaN(Date.parse(value)) ? 'expects a valid date string' : null\n }\n return typeof value === 'number' ? null : 'expects a date (ISO string or epoch number)'\n case 'select': {\n const allowed = new Set(field.options.map((o) => o.value))\n const values = field.multiple ? (Array.isArray(value) ? value : [value]) : [value]\n for (const v of values) {\n if (typeof v !== 'string' || !allowed.has(v)) {\n return `has value \"${String(v)}\" not among its options`\n }\n }\n return null\n }\n case 'object':\n // EC-253: top-level shape only (deep subfield validation lives in\n // `validateComponentProps`, which needs the same per-field machinery).\n if (field.cardinality === 'many') {\n return Array.isArray(value) && value.every((item) => isPlainObject(item))\n ? null\n : 'expects a list of objects'\n }\n return isPlainObject(value) ? null : 'expects an object'\n case 'relation':\n case 'asset':\n case 'blocks':\n // relation / asset / blocks are validated structurally, not as scalars.\n return null\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 null\n }\n }\n}\n\n/**\n * Pure declarative-constraint check (min/max/pattern) for a field value (EC-190).\n * Returns the list of human detail strings for each violation (empty = valid).\n * Mirrors `validateConstraints` without the issue-construction coupling.\n */\nexport function checkConstraints(field: FieldDef, value: unknown): string[] {\n const out: string[] = []\n const rules = field.validation\n if (!rules) return out\n if (typeof value === 'string') {\n if (rules.min !== undefined && value.length < rules.min) out.push(`is shorter than min length ${rules.min}`)\n if (rules.max !== undefined && value.length > rules.max) out.push(`is longer than max length ${rules.max}`)\n if (rules.pattern !== undefined) {\n let re: RegExp | undefined\n try {\n re = new RegExp(rules.pattern)\n } catch {\n re = undefined\n }\n if (re && !re.test(value)) out.push(`does not match pattern ${rules.pattern}`)\n }\n } else if (typeof value === 'number') {\n if (rules.min !== undefined && value < rules.min) out.push(`is less than min ${rules.min}`)\n if (rules.max !== undefined && value > rules.max) out.push(`is greater than max ${rules.max}`)\n } else if (Array.isArray(value)) {\n if (rules.min !== undefined && value.length < rules.min) out.push(`has fewer than ${rules.min} items`)\n if (rules.max !== undefined && value.length > rules.max) out.push(`has more than ${rules.max} items`)\n }\n return out\n}\n\nfunction checkRelationStructure(field: RelationFieldDef, value: unknown): string[] {\n const out: string[] = []\n if (field.cardinality === 'one' && Array.isArray(value) && value.length > 1) {\n out.push(`is single-valued but has ${value.length} targets`)\n }\n const refs = Array.isArray(value) ? value : [value]\n for (const raw of refs) {\n const ref = coerceRef(raw)\n if (!ref) out.push('holds a value that is not a document reference')\n else if (ref.collection !== field.target) {\n out.push(`points at collection \"${ref.collection}\" but targets \"${field.target}\"`)\n }\n }\n return out\n}\n\nfunction checkAssetStructure(field: AssetFieldDef, value: unknown): string[] {\n const out: string[] = []\n if (field.cardinality === 'one' && Array.isArray(value) && value.length > 1) {\n out.push(`is single-valued but has ${value.length} targets`)\n }\n const ids = Array.isArray(value) ? value : [value]\n for (const raw of ids) {\n if (typeof raw !== 'string') out.push('expects an asset id string')\n }\n return out\n}\n\n/**\n * Build a pure, store-free validator for a single field-def's value (EC-190).\n * Used by the renderer (invalid static prop → EC-015 visible fallback) and the\n * inspector. Returns true when the value is structurally acceptable for the field\n * type; absent values (undefined/null/'') are acceptable — the `required` check\n * owns presence. Relation/asset existence and composition depth are validated\n * elsewhere (they need a store / registry).\n */\nexport function fieldValueValidator(field: FieldDef): (value: unknown) => boolean {\n return (value) => {\n if (isEmpty(value)) return true\n return checkScalarType(field, value) === null && checkConstraints(field, value).length === 0\n }\n}\n\n/**\n * Lint a field-def used as a component prop (EC-190): document-only attributes\n * (`filterable`, `validation.unique`) make no sense on a prop and surface as\n * structured issues, never silently ignored. Returns [] for a valid prop\n * field-def.\n */\nexport function assertPropFieldDef(field: FieldDef): CmsValidationIssue[] {\n const issues: CmsValidationIssue[] = []\n if (field.filterable) {\n issues.push(\n cmsIssue({\n code: 'invalid-field-config',\n message: `Component prop \"${field.name}\" declares \"filterable\", which only applies to document fields.`,\n path: ['props', field.name],\n meta: { field: field.name },\n }),\n )\n }\n if (field.validation?.unique) {\n issues.push(\n cmsIssue({\n code: 'invalid-field-config',\n message: `Component prop \"${field.name}\" declares \"unique\", which only applies across a collection's documents.`,\n path: ['props', field.name],\n meta: { field: field.name },\n }),\n )\n }\n // EC-253: a nested object prop's subfields are props too — lint them as well, so\n // a `filterable`/`unique` buried inside a repeater is surfaced, not silently kept.\n if (field.type === 'object') {\n for (const sub of field.fields) issues.push(...assertPropFieldDef(sub))\n }\n return issues\n}\n\nexport interface ValidateComponentPropsOptions {\n /**\n * When provided, `blocks` prop values are validated (EC-188 callback wired to\n * `validateCompositionValue` + the component registry by the studio).\n */\n validateComposition?: ValidateDocumentOptions['validateComposition']\n /**\n * When provided, the composition embeds inside a `richText` prop value are\n * validated (EC-189) — the prop-side mirror of the document callback.\n */\n validateRichTextEmbeds?: ValidateDocumentOptions['validateRichTextEmbeds']\n}\n\n/**\n * Validate a component's static prop values against its prop field-defs (EC-190).\n * The prop-side mirror of `validateDocument`: the same per-field type / constraint\n * / relation-structure / asset-structure / blocks checks, keyed by prop name,\n * MINUS collection-scoped concerns (uniqueness, filterability, localization) and\n * store-backed existence (relation/asset target *existence* is a where-used /\n * reference-integrity concern handled in EC-190 slice 6). Returns structured\n * issues; never throws. The inspector surfaces these inline exactly like document\n * field issues.\n */\n/**\n * Validate one prop value against its field-def, recursing into `object` subfields\n * (EC-253). The prop-side mirror of {@link validateFieldValue}: pure type +\n * constraint + relation/asset-structure + composition checks, keyed by `path`.\n * Shared by the top-level loop and the object recursion so a repeater item's\n * subfields are validated exactly as a top-level prop would be.\n */\nfunction validatePropFieldValue(\n field: FieldDef,\n value: unknown,\n path: CmsPath,\n options: ValidateComponentPropsOptions,\n issues: CmsValidationIssue[],\n): void {\n const push = (detail: string, code: CmsValidationIssue['code'] = 'invalid-field-value') =>\n issues.push(cmsIssue({ code, message: `Prop \"${field.name}\" ${detail}.`, path, meta: { field: field.name } }))\n\n if (isEmpty(value)) {\n if (field.validation?.required) {\n issues.push(\n cmsIssue({\n code: 'missing-required-field',\n message: `Required prop \"${field.name}\" is missing.`,\n path,\n meta: { field: field.name },\n }),\n )\n return\n }\n // EC-253 (C1): an optional but PRESENT object prop still recurses so its own\n // required subfields surface; any other empty/absent value has nothing to check.\n if (!isPresentObjectValue(field, value)) return\n }\n\n const typeErr = checkScalarType(field, value)\n if (typeErr) push(typeErr)\n for (const detail of checkConstraints(field, value)) push(detail)\n\n if (field.type === 'relation') {\n for (const detail of checkRelationStructure(field, value)) push(detail)\n } else if (field.type === 'asset') {\n for (const detail of checkAssetStructure(field, value)) push(detail)\n } else if (field.type === 'blocks' && options.validateComposition) {\n for (const finding of options.validateComposition(value, field)) {\n issues.push(\n cmsIssue({\n code: 'invalid-field-value',\n severity: finding.severity ?? 'error',\n message: `Prop \"${field.name}\": ${finding.message}`,\n path,\n meta: {\n field: field.name,\n type: 'blocks',\n ...(finding.nodePath ? { nodePath: finding.nodePath } : {}),\n },\n }),\n )\n }\n } else if (field.type === 'richText' && options.validateRichTextEmbeds) {\n // EC-189: validate the composition embeds carried by a richText prop value\n // (e.g. the RichText primitive's `content`) against the prop's `allow`.\n for (const finding of options.validateRichTextEmbeds(value, field)) {\n issues.push(\n cmsIssue({\n code: 'invalid-field-value',\n severity: finding.severity ?? 'error',\n message: `Prop \"${field.name}\": ${finding.message}`,\n path,\n meta: {\n field: field.name,\n type: 'richText',\n ...(finding.nodePath ? { nodePath: finding.nodePath } : {}),\n },\n }),\n )\n }\n } else if (field.type === 'object') {\n // EC-253: recurse into each item's subfields, mirroring the document path.\n const items =\n field.cardinality === 'many' ? (Array.isArray(value) ? value : []) : [value]\n items.forEach((item, index) => {\n if (!isPlainObject(item)) return\n const itemPath = field.cardinality === 'many' ? [...path, index] : path\n for (const sub of field.fields) {\n validatePropFieldValue(sub, item[sub.name], [...itemPath, sub.name], options, issues)\n }\n })\n }\n}\n\nexport function validateComponentProps(\n fieldDefs: readonly FieldDef[],\n props: Record<string, unknown>,\n options: ValidateComponentPropsOptions = {},\n): CmsValidationIssue[] {\n const issues: CmsValidationIssue[] = []\n for (const field of fieldDefs) {\n issues.push(...assertPropFieldDef(field))\n validatePropFieldValue(field, props[field.name], ['props', field.name], options, issues)\n }\n return issues\n}\n\n/** Resolve a relation value into the referenced documents (EC-017). */\nexport function resolveRelation(\n store: DocumentStore,\n value: unknown,\n): CmsDocument[] {\n const raws = Array.isArray(value) ? value : value === undefined || value === null ? [] : [value]\n const out: CmsDocument[] = []\n for (const raw of raws) {\n const ref = coerceRef(raw)\n if (!ref) continue\n const doc = store.get(ref)\n if (doc) out.push(doc)\n }\n return out\n}\n\n/** Build a flat values bag (non-localized only) — convenience for tests/consumers. */\nexport function plainValues(doc: CmsDocument): FieldValues {\n return { ...doc.values }\n}\n"]}
|
|
@@ -11,6 +11,7 @@ export declare const documentVersionSchema: z.ZodObject<{
|
|
|
11
11
|
snapshot: z.ZodObject<{
|
|
12
12
|
collection: z.ZodString;
|
|
13
13
|
id: z.ZodString;
|
|
14
|
+
alias: z.ZodOptional<z.ZodString>;
|
|
14
15
|
values: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
15
16
|
localized: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
16
17
|
defaultLocale: z.ZodOptional<z.ZodString>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"versions.js","sourceRoot":"","sources":["../../src/cms-core/versions.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"versions.js","sourceRoot":"","sources":["../../src/cms-core/versions.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod'\nimport { documentSchema } from './documents'\nimport type { CmsDocument } from './documents'\nimport { cmsIssue } from './issues'\nimport type { CmsValidationIssue } from './issues'\n\n/**\n * A snapshot of a document at a point in time (EC-021 version history). Stores a\n * full copy of the document's stored state plus bookkeeping. Snapshots are\n * immutable records of prior states.\n */\nexport const documentVersionSchema = z.object({\n /** Monotonic version number, starting at 1. */\n version: z.number().int().positive(),\n /** Full document snapshot at this version. */\n snapshot: documentSchema,\n /** When the snapshot was recorded (epoch ms). */\n createdAt: z.number().int().nonnegative(),\n /** Optional label, e.g. \"published\" or an author note. */\n label: z.string().optional(),\n})\nexport type DocumentVersion = z.infer<typeof documentVersionSchema>\n\n/**\n * Draft/published primitives + version history for a single document (EC-021).\n *\n * Holds the live `draft` state, the last `published` state (if any), and an\n * ordered history of recorded versions. All mutations return new states or\n * append history; nothing is silently dropped, and retrieving an unknown\n * version yields a structured issue rather than throwing.\n */\nexport interface DocumentHistory {\n /** The current working draft. */\n readonly draft: CmsDocument\n /** The last published snapshot, if the document has ever been published. */\n readonly published: CmsDocument | undefined\n /** Recorded versions, oldest first. */\n readonly versions: readonly DocumentVersion[]\n}\n\nfunction clone(doc: CmsDocument): CmsDocument {\n // Parse re-applies defaults and produces a detached, JSON-safe copy.\n return documentSchema.parse(structuredClone(doc))\n}\n\n/** Create a fresh history seeded with an initial draft (EC-021). */\nexport function createHistory(initial: CmsDocument): DocumentHistory {\n return {\n draft: clone(initial),\n published: undefined,\n versions: [],\n }\n}\n\n/** Replace the working draft (does not record a version). */\nexport function updateDraft(history: DocumentHistory, draft: CmsDocument): DocumentHistory {\n return { ...history, draft: clone(draft) }\n}\n\nexport interface PublishOptions {\n /** Timestamp for the recorded version (epoch ms); defaults to `Date.now()`. */\n now?: number\n label?: string\n}\n\n/**\n * Publish the current draft (EC-021): records it as a new version and promotes\n * it to `published`. The presence of `published` IS the published signal now\n * (EC-224 retired the flat `state` flag); the live `draft` is a detached copy.\n */\nexport function publish(history: DocumentHistory, options: PublishOptions = {}): DocumentHistory {\n const now = options.now ?? Date.now()\n const versions = [...history.versions]\n\n const promoted: CmsDocument = clone(history.draft)\n const nextVersion = (versions[versions.length - 1]?.version ?? 0) + 1\n versions.push({\n version: nextVersion,\n snapshot: clone(promoted),\n createdAt: now,\n ...(options.label ? { label: options.label } : { label: 'published' }),\n })\n\n return {\n draft: clone(promoted),\n published: promoted,\n versions,\n }\n}\n\n/** Snapshot the current draft into history without publishing (EC-021). */\nexport function snapshotDraft(\n history: DocumentHistory,\n options: PublishOptions = {},\n): DocumentHistory {\n const now = options.now ?? Date.now()\n const versions = [...history.versions]\n const nextVersion = (versions[versions.length - 1]?.version ?? 0) + 1\n versions.push({\n version: nextVersion,\n snapshot: clone(history.draft),\n createdAt: now,\n ...(options.label ? { label: options.label } : {}),\n })\n return { ...history, versions }\n}\n\nexport type VersionLookup =\n | { ok: true; version: DocumentVersion }\n | { ok: false; issue: CmsValidationIssue }\n\n/** Retrieve a prior version by number (EC-021). Unknown version → structured issue. */\nexport function getVersion(history: DocumentHistory, version: number): VersionLookup {\n const found = history.versions.find((v) => v.version === version)\n if (found) return { ok: true, version: found }\n return {\n ok: false,\n issue: cmsIssue({\n code: 'unknown-version',\n message: `No version ${version} recorded for document \"${history.draft.id}\".`,\n path: ['versions', version],\n documentId: history.draft.id,\n meta: { requested: version, available: history.versions.map((v) => v.version) },\n }),\n }\n}\n\n/**\n * Restore a prior version as the new working draft (EC-021). The current draft is\n * NOT lost — callers can snapshot it first if desired. Returns the updated\n * history, or a structured issue if the version is unknown.\n */\nexport function restoreVersion(\n history: DocumentHistory,\n version: number,\n): { ok: true; history: DocumentHistory } | { ok: false; issue: CmsValidationIssue } {\n const lookup = getVersion(history, version)\n if (!lookup.ok) return { ok: false, issue: lookup.issue }\n return { ok: true, history: updateDraft(history, lookup.version.snapshot) }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"approval.js","sourceRoot":"","sources":["../../src/collaboration/approval.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"approval.js","sourceRoot":"","sources":["../../src/collaboration/approval.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,QAAQ,CAAA;AAanE,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACxB,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;IAChD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAClC,CAAC,CAAA;AAGF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC/C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;CACf,CAAC,CAAA;AASF,MAAM,OAAO,aAAa;IACP,QAAQ,GAAG,IAAI,GAAG,EAA2B,CAAA;IAC7C,KAAK,GAAiB,EAAE,CAAA;IACxB,KAAK,CAAO;IACZ,GAAG,CAAO;IAE3B,YAAY,UAAwB,EAAE;QACpC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,qBAAqB,EAAE,CAAA;QACrD,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,mBAAmB,EAAE,CAAA;IACjD,CAAC;IAEO,KAAK,CAAC,SAAiB;QAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QAC7C,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAA;QAC7B,MAAM,OAAO,GAAoB,EAAE,CAAA;QACnC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;QACrC,OAAO,OAAO,CAAA;IAChB,CAAC;IAEO,GAAG,CAAC,SAAiB,EAAE,MAAmB,EAAE,KAAc,EAAE,IAAa;QAC/E,IAAI,CAAC,KAAK,CAAC,IAAI,CACb,gBAAgB,CAAC,KAAK,CAAC;YACrB,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;YACnB,SAAS;YACT,MAAM;YACN,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzC,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvC,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE;SACjB,CAAC,CACH,CAAA;IACH,CAAC;IAED,6CAA6C;IAC7C,MAAM,CAAC,SAAiB,EAAE,KAAkB;QAC1C,MAAM,OAAO,GAAkB,mBAAmB,CAAC,KAAK,CAAC;YACvD,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;YACnB,SAAS;YACT,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,MAAM,EAAE,MAAM;YACd,GAAG,CAAC,KAAK,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5D,WAAW,EAAE,IAAI,CAAC,KAAK,EAAE;SAC1B,CAAC,CAAA;QACF,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACnC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,CAAA;QACxC,OAAO,OAAO,CAAA;IAChB,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,SAAiB,EAAE,SAAiB,EAAE,QAA8B,EAAE,EAAW,EAAE,IAAa;QACrG,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;QAClC,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,CAAA;QACvD,IAAI,KAAK,GAAG,CAAC;YAAE,OAAO,SAAS,CAAA;QAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAE,CAAA;QAC5B,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM;YAAE,OAAO,SAAS,CAAA;QAC/C,MAAM,OAAO,GAAkB;YAC7B,GAAG,OAAO;YACV,MAAM,EAAE,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU;YACxD,GAAG,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/C,UAAU,EAAE,IAAI,CAAC,KAAK,EAAE;YACxB,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACpD,CAAA;QACD,IAAI,CAAC,KAAK,CAAC,GAAG,OAAO,CAAA;QACrB,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,CAAC,CAAA;QACvC,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,0DAA0D;IAC1D,IAAI,CAAC,SAAiB;QACpB,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,EAAE,CAAA;IAC7C,CAAC;IAED,GAAG,CAAC,SAAiB,EAAE,SAAiB;QACtC,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,CAAA;IAC9D,CAAC;IAED,4FAA4F;IAC5F,UAAU,CAAC,SAAkB;QAC3B,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,KAAK,SAAS,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAA;IACvF,CAAC;IAED,uFAAuF;IACvF,mBAAmB,CAAC,SAAiB,EAAE,SAAiB;QACtD,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAC/B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,UAAU,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS,CAC5D,CAAA;IACH,CAAC;CACF","sourcesContent":["import { z } from 'zod'\nimport { createSequentialClock, createSequentialIds } from './core'\nimport type { Clock, IdGen, StoreOptions } from './core'\n\n/**\n * Approval workflow (EC-128). A change is submitted for review against a target version; a\n * reviewer approves or rejects; publishing is gated on an approved request for the version. Every\n * transition appends to an append-only audit trail. Single-environment (EC-179): a deployment IS\n * one environment, so approval is keyed by version alone, not by environment.\n */\n\nexport type ApprovalStatus = 'open' | 'approved' | 'rejected'\nexport type AuditAction = 'submit' | 'approve' | 'reject'\n\nexport const changeRequestSchema = z.object({\n id: z.string(),\n projectId: z.string().min(1),\n versionId: z.string().min(1),\n title: z.string().min(1),\n status: z.enum(['open', 'approved', 'rejected']),\n submittedBy: z.string().optional(),\n submittedAt: z.string(),\n reviewedBy: z.string().optional(),\n reviewedAt: z.string().optional(),\n reviewNote: z.string().optional(),\n})\nexport type ChangeRequest = z.infer<typeof changeRequestSchema>\n\nexport const auditEntrySchema = z.object({\n id: z.string(),\n requestId: z.string(),\n action: z.enum(['submit', 'approve', 'reject']),\n actor: z.string().optional(),\n note: z.string().optional(),\n at: z.string(),\n})\nexport type AuditEntry = z.infer<typeof auditEntrySchema>\n\nexport interface SubmitInput {\n versionId: string\n title: string\n by?: string\n}\n\nexport class ApprovalStore {\n private readonly requests = new Map<string, ChangeRequest[]>()\n private readonly audit: AuditEntry[] = []\n private readonly clock: Clock\n private readonly ids: IdGen\n\n constructor(options: StoreOptions = {}) {\n this.clock = options.clock ?? createSequentialClock()\n this.ids = options.ids ?? createSequentialIds()\n }\n\n private list_(projectId: string): ChangeRequest[] {\n const existing = this.requests.get(projectId)\n if (existing) return existing\n const created: ChangeRequest[] = []\n this.requests.set(projectId, created)\n return created\n }\n\n private log(requestId: string, action: AuditAction, actor?: string, note?: string): void {\n this.audit.push(\n auditEntrySchema.parse({\n id: this.ids('aud'),\n requestId,\n action,\n ...(actor !== undefined ? { actor } : {}),\n ...(note !== undefined ? { note } : {}),\n at: this.clock(),\n }),\n )\n }\n\n /** Submit a change for approval (EC-128). */\n submit(projectId: string, input: SubmitInput): ChangeRequest {\n const request: ChangeRequest = changeRequestSchema.parse({\n id: this.ids('req'),\n projectId,\n versionId: input.versionId,\n title: input.title,\n status: 'open',\n ...(input.by !== undefined ? { submittedBy: input.by } : {}),\n submittedAt: this.clock(),\n })\n this.list_(projectId).push(request)\n this.log(request.id, 'submit', input.by)\n return request\n }\n\n /**\n * Review a request: approve or reject. Returns the updated request, or `undefined` if it is\n * unknown or already decided (open is the only reviewable state).\n */\n review(projectId: string, requestId: string, decision: 'approve' | 'reject', by?: string, note?: string): ChangeRequest | undefined {\n const list = this.list_(projectId)\n const index = list.findIndex((r) => r.id === requestId)\n if (index < 0) return undefined\n const request = list[index]!\n if (request.status !== 'open') return undefined\n const updated: ChangeRequest = {\n ...request,\n status: decision === 'approve' ? 'approved' : 'rejected',\n ...(by !== undefined ? { reviewedBy: by } : {}),\n reviewedAt: this.clock(),\n ...(note !== undefined ? { reviewNote: note } : {}),\n }\n list[index] = updated\n this.log(requestId, decision, by, note)\n return updated\n }\n\n /** All change requests for a project, newest → oldest. */\n list(projectId: string): ChangeRequest[] {\n return [...this.list_(projectId)].reverse()\n }\n\n get(projectId: string, requestId: string): ChangeRequest | undefined {\n return this.list_(projectId).find((r) => r.id === requestId)\n }\n\n /** The audit trail for a request (or all, when `requestId` is omitted), oldest → newest. */\n auditTrail(requestId?: string): AuditEntry[] {\n return this.audit.filter((e) => requestId === undefined || e.requestId === requestId)\n }\n\n /** Whether an approved request exists for this version — gates publishing (EC-128). */\n isApprovedToPublish(projectId: string, versionId: string): boolean {\n return this.list_(projectId).some(\n (r) => r.status === 'approved' && r.versionId === versionId,\n )\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collaboration.js","sourceRoot":"","sources":["../../src/collaboration/collaboration.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,QAAQ,CAAA;AAEnE,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAEzC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAE9C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAuB1C,MAAM,OAAO,aAAa;IACf,QAAQ,CAAc;IACtB,UAAU,CAAiB;IAC3B,QAAQ,CAAe;IACvB,QAAQ,CAAc;IACtB,QAAQ,CAAe;IAEhC,YAAY,UAAwB,EAAE;QACpC,MAAM,MAAM,GAA2B;YACrC,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,qBAAqB,EAAE;YAC/C,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,mBAAmB,EAAE;SAC1C,CAAA;QACD,IAAI,CAAC,QAAQ,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,CAAA;QACxC,IAAI,CAAC,UAAU,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,CAAA;QAC7C,IAAI,CAAC,QAAQ,GAAG,IAAI,aAAa,CAAC,MAAM,CAAC,CAAA;QACzC,IAAI,CAAC,QAAQ,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,CAAA;QACxC,IAAI,CAAC,QAAQ,GAAG,IAAI,aAAa,CAAC,MAAM,CAAC,CAAA;IAC3C,CAAC;IAED;;;OAGG;IACH,cAAc,CAAC,SAAiB,EAAE,SAAiB,EAAE,UAA0B,EAAE;QAC/E,IAAI,OAAO,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC;YACxF,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAA;QACjD,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;QAC3E,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAA;IAC5B,CAAC;IAED;;;;OAIG;IACH,UAAU,CAAC,SAAiB,EAAE,WAAmB,EAAE,MAAe;QAChE,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,EAAE,WAAW,EAAE,MAAM,CAAC,CAAA;QACtE,IAAI,CAAC,OAAO;YAAE,OAAO,SAAS,CAAA;QAC9B,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA;QACvD,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,oGAAoG;IACpG,gBAAgB,CAAC,SAAiB,EAAE,IAAiB;QACnD,OAAO,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAA;IAC7F,CAAC;CACF;AAED,+BAA+B;AAC/B,MAAM,UAAU,mBAAmB,CAAC,UAAwB,EAAE;IAC5D,OAAO,IAAI,aAAa,CAAC,OAAO,CAAC,CAAA;AACnC,CAAC"}
|
|
1
|
+
{"version":3,"file":"collaboration.js","sourceRoot":"","sources":["../../src/collaboration/collaboration.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,QAAQ,CAAA;AAEnE,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAEzC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAE9C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAuB1C,MAAM,OAAO,aAAa;IACf,QAAQ,CAAc;IACtB,UAAU,CAAiB;IAC3B,QAAQ,CAAe;IACvB,QAAQ,CAAc;IACtB,QAAQ,CAAe;IAEhC,YAAY,UAAwB,EAAE;QACpC,MAAM,MAAM,GAA2B;YACrC,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,qBAAqB,EAAE;YAC/C,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,mBAAmB,EAAE;SAC1C,CAAA;QACD,IAAI,CAAC,QAAQ,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,CAAA;QACxC,IAAI,CAAC,UAAU,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,CAAA;QAC7C,IAAI,CAAC,QAAQ,GAAG,IAAI,aAAa,CAAC,MAAM,CAAC,CAAA;QACzC,IAAI,CAAC,QAAQ,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,CAAA;QACxC,IAAI,CAAC,QAAQ,GAAG,IAAI,aAAa,CAAC,MAAM,CAAC,CAAA;IAC3C,CAAC;IAED;;;OAGG;IACH,cAAc,CAAC,SAAiB,EAAE,SAAiB,EAAE,UAA0B,EAAE;QAC/E,IAAI,OAAO,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC;YACxF,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAA;QACjD,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;QAC3E,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAA;IAC5B,CAAC;IAED;;;;OAIG;IACH,UAAU,CAAC,SAAiB,EAAE,WAAmB,EAAE,MAAe;QAChE,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,EAAE,WAAW,EAAE,MAAM,CAAC,CAAA;QACtE,IAAI,CAAC,OAAO;YAAE,OAAO,SAAS,CAAA;QAC9B,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA;QACvD,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,oGAAoG;IACpG,gBAAgB,CAAC,SAAiB,EAAE,IAAiB;QACnD,OAAO,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAA;IAC7F,CAAC;CACF;AAED,+BAA+B;AAC/B,MAAM,UAAU,mBAAmB,CAAC,UAAwB,EAAE;IAC5D,OAAO,IAAI,aAAa,CAAC,OAAO,CAAC,CAAA;AACnC,CAAC","sourcesContent":["import { createSequentialClock, createSequentialIds } from './core'\nimport type { StoreOptions } from './core'\nimport { VersionStore } from './versions'\nimport type { VersionRecord } from './versions'\nimport { PublishingStore } from './publishing'\nimport type { PublishState, PreviewMode } from './publishing'\nimport { ApprovalStore } from './approval'\nimport { CommentStore } from './comments'\nimport { PresenceStore } from './presence'\n\n/**\n * The collaboration facade (Phase 10). Composes the version, publishing, approval, comment and\n * presence stores over ONE deterministic clock + id generator, and adds the cross-cutting flows:\n * approval-gated publishing (EC-128), rollback-as-publish (EC-125/124), and preview resolution\n * (EC-123). The Studio mounts one of these per session; a Convex backend implements the same shape.\n */\n\n/** The result of a gated publish attempt. */\nexport interface PublishResult {\n ok: boolean\n /** Set when the publish was blocked because approval is required and missing. */\n blocked?: 'needs-approval'\n state?: PublishState\n}\n\nexport interface PublishOptions {\n author?: string\n /** When true, the target version must have an approved change request (EC-128). */\n requireApproval?: boolean\n}\n\nexport class Collaboration {\n readonly versions: VersionStore\n readonly publishing: PublishingStore\n readonly approval: ApprovalStore\n readonly comments: CommentStore\n readonly presence: PresenceStore\n\n constructor(options: StoreOptions = {}) {\n const shared: Required<StoreOptions> = {\n clock: options.clock ?? createSequentialClock(),\n ids: options.ids ?? createSequentialIds(),\n }\n this.versions = new VersionStore(shared)\n this.publishing = new PublishingStore(shared)\n this.approval = new ApprovalStore(shared)\n this.comments = new CommentStore(shared)\n this.presence = new PresenceStore(shared)\n }\n\n /**\n * Publish a version, gated on approval when required (EC-128/129). Returns a `needs-approval`\n * block instead of publishing when the gate is not satisfied.\n */\n publishVersion(projectId: string, versionId: string, options: PublishOptions = {}): PublishResult {\n if (options.requireApproval && !this.approval.isApprovedToPublish(projectId, versionId)) {\n return { ok: false, blocked: 'needs-approval' }\n }\n const state = this.publishing.publish(projectId, versionId, options.author)\n return { ok: true, state }\n }\n\n /**\n * Roll back to a prior version (EC-125): append a rollback version carrying the target's\n * snapshot, then publish it (recorded as a rollback in history). Returns the new rollback\n * version, or `undefined` if the target version is unknown.\n */\n rollbackTo(projectId: string, toVersionId: string, author?: string): VersionRecord | undefined {\n const version = this.versions.rollback(projectId, toVersionId, author)\n if (!version) return undefined\n this.publishing.rollback(projectId, version.id, author)\n return version\n }\n\n /** The version id a preview should render for `mode` (EC-123). Draft → latest; published → live. */\n previewVersionId(projectId: string, mode: PreviewMode): string | undefined {\n return this.publishing.resolveVersion(projectId, mode, this.versions.latest(projectId)?.id)\n }\n}\n\n/** Convenience constructor. */\nexport function createCollaboration(options: StoreOptions = {}): Collaboration {\n return new Collaboration(options)\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"comments.js","sourceRoot":"","sources":["../../src/collaboration/comments.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"comments.js","sourceRoot":"","sources":["../../src/collaboration/comments.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from 'zod'\nimport { createSequentialClock, createSequentialIds } from './core'\nimport type { Clock, IdGen, StoreOptions } from './core'\n\n/**\n * Comment threads (EC-127). A thread anchors to a target — a graph node id or a CMS document ref —\n * and holds an ordered list of messages. Threads can be resolved and reopened; state persists in\n * the store. A notification hook fires on every change so a host can surface alerts.\n */\n\n/** What a thread is attached to. */\nexport const commentAnchorSchema = z.object({\n kind: z.enum(['node', 'document']),\n /** Node id (kind=node) or `${collection}/${id}` (kind=document). */\n ref: z.string().min(1),\n})\nexport type CommentAnchor = z.infer<typeof commentAnchorSchema>\n\nexport const commentMessageSchema = z.object({\n id: z.string(),\n author: z.string().optional(),\n body: z.string().min(1),\n at: z.string(),\n})\nexport type CommentMessage = z.infer<typeof commentMessageSchema>\n\nexport const commentThreadSchema = z.object({\n id: z.string(),\n projectId: z.string().min(1),\n anchor: commentAnchorSchema,\n resolved: z.boolean(),\n messages: z.array(commentMessageSchema),\n createdAt: z.string(),\n updatedAt: z.string(),\n})\nexport type CommentThread = z.infer<typeof commentThreadSchema>\n\n/** A change notification a host can subscribe to (EC-127 \"notification hook points\"). */\nexport interface CommentNotification {\n type: 'created' | 'replied' | 'resolved' | 'reopened'\n thread: CommentThread\n}\n\nexport class CommentStore {\n private readonly byProject = new Map<string, CommentThread[]>()\n private readonly clock: Clock\n private readonly ids: IdGen\n private readonly listeners = new Set<(n: CommentNotification) => void>()\n\n constructor(options: StoreOptions = {}) {\n this.clock = options.clock ?? createSequentialClock()\n this.ids = options.ids ?? createSequentialIds()\n }\n\n /** Subscribe to comment changes; returns an unsubscribe function. */\n onChange(listener: (n: CommentNotification) => void): () => void {\n this.listeners.add(listener)\n return () => this.listeners.delete(listener)\n }\n\n private notify(type: CommentNotification['type'], thread: CommentThread): void {\n for (const listener of this.listeners) listener({ type, thread })\n }\n\n private list_(projectId: string): CommentThread[] {\n const existing = this.byProject.get(projectId)\n if (existing) return existing\n const created: CommentThread[] = []\n this.byProject.set(projectId, created)\n return created\n }\n\n private find(projectId: string, threadId: string): { list: CommentThread[]; index: number } | undefined {\n const list = this.list_(projectId)\n const index = list.findIndex((t) => t.id === threadId)\n return index < 0 ? undefined : { list, index }\n }\n\n /** Start a thread on an anchor with its first message. */\n start(projectId: string, anchor: CommentAnchor, body: string, author?: string): CommentThread {\n const now = this.clock()\n const thread: CommentThread = commentThreadSchema.parse({\n id: this.ids('thr'),\n projectId,\n anchor,\n resolved: false,\n messages: [{ id: this.ids('msg'), ...(author !== undefined ? { author } : {}), body, at: now }],\n createdAt: now,\n updatedAt: now,\n })\n this.list_(projectId).push(thread)\n this.notify('created', thread)\n return thread\n }\n\n /** Reply to a thread. Returns the updated thread, or `undefined` if unknown. */\n reply(projectId: string, threadId: string, body: string, author?: string): CommentThread | undefined {\n const found = this.find(projectId, threadId)\n if (!found) return undefined\n const now = this.clock()\n const message = commentMessageSchema.parse({ id: this.ids('msg'), ...(author !== undefined ? { author } : {}), body, at: now })\n const updated: CommentThread = { ...found.list[found.index]!, messages: [...found.list[found.index]!.messages, message], updatedAt: now }\n found.list[found.index] = updated\n this.notify('replied', updated)\n return updated\n }\n\n private setResolved(projectId: string, threadId: string, resolved: boolean): CommentThread | undefined {\n const found = this.find(projectId, threadId)\n if (!found) return undefined\n const current = found.list[found.index]!\n if (current.resolved === resolved) return current\n const updated: CommentThread = { ...current, resolved, updatedAt: this.clock() }\n found.list[found.index] = updated\n this.notify(resolved ? 'resolved' : 'reopened', updated)\n return updated\n }\n\n resolve(projectId: string, threadId: string): CommentThread | undefined {\n return this.setResolved(projectId, threadId, true)\n }\n\n reopen(projectId: string, threadId: string): CommentThread | undefined {\n return this.setResolved(projectId, threadId, false)\n }\n\n /** All threads for a project (optionally filtered by anchor), newest → oldest. */\n list(projectId: string, anchor?: CommentAnchor): CommentThread[] {\n const all = [...this.list_(projectId)].reverse()\n if (!anchor) return all\n return all.filter((t) => t.anchor.kind === anchor.kind && t.anchor.ref === anchor.ref)\n }\n\n /** Count of open (unresolved) threads — for badges. */\n openCount(projectId: string): number {\n return this.list_(projectId).filter((t) => !t.resolved).length\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.js","sourceRoot":"","sources":["../../src/collaboration/core.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAQH,6EAA6E;AAC7E,MAAM,UAAU,qBAAqB,CAAC,QAAQ,GAAG,0BAA0B,EAAE,MAAM,GAAG,IAAI;IACxF,IAAI,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;IAClC,OAAO,GAAG,EAAE;QACV,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAA;QAC3C,OAAO,IAAI,MAAM,CAAA;QACjB,OAAO,GAAG,CAAA;IACZ,CAAC,CAAA;AACH,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,mBAAmB;IACjC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAA;IAC1C,OAAO,CAAC,IAAY,EAAE,EAAE;QACtB,MAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAA;QAC1C,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QACxB,OAAO,GAAG,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAA;IACnD,CAAC,CAAA;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"core.js","sourceRoot":"","sources":["../../src/collaboration/core.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAQH,6EAA6E;AAC7E,MAAM,UAAU,qBAAqB,CAAC,QAAQ,GAAG,0BAA0B,EAAE,MAAM,GAAG,IAAI;IACxF,IAAI,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;IAClC,OAAO,GAAG,EAAE;QACV,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAA;QAC3C,OAAO,IAAI,MAAM,CAAA;QACjB,OAAO,GAAG,CAAA;IACZ,CAAC,CAAA;AACH,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,mBAAmB;IACjC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAA;IAC1C,OAAO,CAAC,IAAY,EAAE,EAAE;QACtB,MAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAA;QAC1C,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QACxB,OAAO,GAAG,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAA;IACnD,CAAC,CAAA;AACH,CAAC","sourcesContent":["/**\n * @elytracms/collaboration core (brief §10, Phase 10). Versioning + collaboration is modelled as\n * pure, in-memory stores over deterministic primitives (an injected clock + id counter), so every\n * flow — versions, publish history, rollback, presence, comments, approval, environments — is\n * reproducible from fixtures and never throws (validation is data, brief §4.11). A Convex backend\n * sits behind the same store interfaces in production.\n */\n\n/** Returns an ISO-8601 timestamp; injected so tests stay deterministic. */\nexport type Clock = () => string\n\n/** A monotonic id generator; injected for determinism. */\nexport type IdGen = (kind: string) => string\n\n/** Deterministic clock: starts at `startISO`, advances `stepMs` per call. */\nexport function createSequentialClock(startISO = '2026-01-01T00:00:00.000Z', stepMs = 1000): Clock {\n let current = Date.parse(startISO)\n return () => {\n const iso = new Date(current).toISOString()\n current += stepMs\n return iso\n }\n}\n\n/** Deterministic id generator: `${kind}_000001`, monotonic per-kind. */\nexport function createSequentialIds(): IdGen {\n const counters = new Map<string, number>()\n return (kind: string) => {\n const next = (counters.get(kind) ?? 0) + 1\n counters.set(kind, next)\n return `${kind}_${String(next).padStart(6, '0')}`\n }\n}\n\n/** A participant in a collaboration session (presence, authorship, comments). */\nexport interface Actor {\n id: string\n name: string\n}\n\n/** Options shared by every store — injected clock + id generator for determinism. */\nexport interface StoreOptions {\n clock?: Clock\n ids?: IdGen\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/collaboration/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,+BAA+B,CAAA;AAEtD,cAAc,QAAQ,CAAA;AACtB,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,iBAAiB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/collaboration/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,+BAA+B,CAAA;AAEtD,cAAc,QAAQ,CAAA;AACtB,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,iBAAiB,CAAA","sourcesContent":["/**\n * @elytracms/collaboration — versioning + collaboration over the canonical project (brief §10,\n * Phase 10, EC-122–129). Project versions, draft/published preview, per-environment publish\n * history, rollbacks, presence + soft locks + optimistic-concurrency conflicts, comment threads,\n * and an approval-gated publishing workflow — all as pure, deterministic, never-throwing stores.\n */\nexport const PACKAGE = '@elytracms/core/collaboration'\n\nexport * from './core'\nexport * from './versions'\nexport * from './publishing'\nexport * from './approval'\nexport * from './comments'\nexport * from './presence'\nexport * from './collaboration'\n"]}
|