@revisium/schema-toolkit 0.19.2 → 0.19.4

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.
@@ -97,6 +97,7 @@ interface SchemaTree {
97
97
  clone(): SchemaTree;
98
98
  trackReplacement(oldNodeId: string, newNodeId: string): void;
99
99
  replacements(): IterableIterator<[string, string]>;
100
+ clearReplacements(): void;
100
101
  addChildTo(parentId: string, node: SchemaNode): void;
101
102
  insertChildAt(parentId: string, index: number, node: SchemaNode): void;
102
103
  removeNodeAt(path: Path): boolean;
@@ -97,6 +97,7 @@ interface SchemaTree {
97
97
  clone(): SchemaTree;
98
98
  trackReplacement(oldNodeId: string, newNodeId: string): void;
99
99
  replacements(): IterableIterator<[string, string]>;
100
+ clearReplacements(): void;
100
101
  addChildTo(parentId: string, node: SchemaNode): void;
101
102
  insertChildAt(parentId: string, index: number, node: SchemaNode): void;
102
103
  removeNodeAt(path: Path): boolean;
@@ -851,6 +851,9 @@ var SchemaTreeImpl = class _SchemaTreeImpl {
851
851
  replacements() {
852
852
  return this._replacements.entries();
853
853
  }
854
+ clearReplacements() {
855
+ this._replacements.clear();
856
+ }
854
857
  addChildTo(parentId, node) {
855
858
  const parent = this.nodeById(parentId);
856
859
  if (parent.isNull()) {
@@ -1242,10 +1245,17 @@ function areFormulasEqual(currentFormula, baseFormula, currentNodeId, baseNodeId
1242
1245
  context.baseTree,
1243
1246
  baseNodeId
1244
1247
  );
1248
+ if (currentExpr === null || baseExpr === null) {
1249
+ return false;
1250
+ }
1245
1251
  return currentExpr === baseExpr;
1246
1252
  }
1247
1253
  function getSerializedExpression(formula, tree, nodeId) {
1248
- return FormulaSerializer.serializeExpression(tree, nodeId, formula, { strict: false });
1254
+ try {
1255
+ return FormulaSerializer.serializeExpression(tree, nodeId, formula, { strict: false });
1256
+ } catch {
1257
+ return null;
1258
+ }
1249
1259
  }
1250
1260
  function areObjectsEqual(current, base, context) {
1251
1261
  const propsCurrent = current.properties();
@@ -2095,7 +2105,11 @@ var PatchEnricher = class {
2095
2105
  if (!formula || !node) {
2096
2106
  return void 0;
2097
2107
  }
2098
- return FormulaSerializer.serializeExpression(tree, node.id(), formula, { strict: false });
2108
+ try {
2109
+ return FormulaSerializer.serializeExpression(tree, node.id(), formula, { strict: false });
2110
+ } catch {
2111
+ return void 0;
2112
+ }
2099
2113
  },
2100
2114
  compare: (from, to) => from === to
2101
2115
  },
@@ -2665,5 +2679,5 @@ function buildArrayItemsPath(parentPath) {
2665
2679
  }
2666
2680
 
2667
2681
  export { AbstractBasePath, ChangeCoalescer, ChangeCollector, CompositeRule, EMPTY_METADATA, EMPTY_PATH, EnumValidator, FIELD_NAME_ERROR_MESSAGE, ForeignKeyValidator, FormulaError, FormulaPathBuilder, FormulaSerializer, ItemsSegment, MaxLengthValidator, MaximumValidator, MinLengthValidator, MinimumValidator, NULL_NODE, NodePathIndex, PatchBuilder, PatchEnricher, PatchGenerator, PatternValidator, PropertySegment, RequiredValidator, ResolvedDependency, SchemaDiff, SchemaPropertyRule, SchemaSerializer, SchemaTruthyRule, ValidationEngine, ValidatorRegistry, ValidatorResolver, areNodesContentEqual, areNodesEqual, coalesceChanges, collectChanges, createArrayNode, createBooleanNode, createDefaultValidatorRegistry, createMobxProvider, createNumberNode, createObjectNode, createPath, createRefNode, createSchemaTree, createStringNode, createValidationEngine, isValidFieldName, jsonPointerToPath, jsonPointerToSegments, jsonPointerToSimplePath, makeAutoObservable, makeObservable, observable, reaction, resetReactivityProvider, runInAction, setReactivityProvider, validateFormulas, validateSchema };
2668
- //# sourceMappingURL=chunk-XL4R6PSM.js.map
2669
- //# sourceMappingURL=chunk-XL4R6PSM.js.map
2682
+ //# sourceMappingURL=chunk-3JZKQWQH.js.map
2683
+ //# sourceMappingURL=chunk-3JZKQWQH.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/schema-node/types.ts","../src/core/schema-node/NullNode.ts","../src/core/reactivity/provider.ts","../src/core/reactivity/api.ts","../src/core/reactivity/mobx-provider.ts","../src/core/schema-node/BaseNode.ts","../src/core/schema-node/utils.ts","../src/core/schema-node/ObjectNode.ts","../src/core/schema-node/ArrayNode.ts","../src/core/schema-node/PrimitiveNode.ts","../src/core/schema-node/StringNode.ts","../src/core/schema-node/NumberNode.ts","../src/core/schema-node/BooleanNode.ts","../src/core/schema-node/RefNode.ts","../src/core/path/PathSegment.ts","../src/core/base-path/AbstractBasePath.ts","../src/core/path/Path.ts","../src/core/path/PathParser.ts","../src/core/schema-tree/TreeNodeIndex.ts","../src/core/schema-tree/SchemaTreeImpl.ts","../src/core/schema-diff/NodePathIndex.ts","../src/core/schema-formula/serialization/FormulaPathBuilder.ts","../src/core/schema-formula/core/FormulaError.ts","../src/core/schema-formula/serialization/FormulaSerializer.ts","../src/core/schema-diff/SchemaComparator.ts","../src/core/schema-diff/ChangeCollector.ts","../src/core/schema-diff/ChangeCoalescer.ts","../src/core/schema-diff/SchemaDiff.ts","../src/core/schema-formula/core/FormulaDependency.ts","../src/core/schema-serializer/SchemaSerializer.ts","../src/core/schema-patch/PatchGenerator.ts","../src/core/schema-patch/PatchEnricher.ts","../src/core/schema-patch/PatchBuilder.ts","../src/core/validation/ValidatorRegistry.ts","../src/core/validation/ValidatorResolver.ts","../src/core/validation/ValidationEngine.ts","../src/core/validation/rules/SchemaBasedRule.ts","../src/core/validation/validators/RequiredValidator.ts","../src/core/validation/validators/PatternValidator.ts","../src/core/validation/validators/MinLengthValidator.ts","../src/core/validation/validators/MaxLengthValidator.ts","../src/core/validation/validators/MinimumValidator.ts","../src/core/validation/validators/MaximumValidator.ts","../src/core/validation/validators/EnumValidator.ts","../src/core/validation/validators/ForeignKeyValidator.ts","../src/core/validation/createValidationEngine.ts","../src/core/validation/schema/FieldNameValidator.ts","../src/core/validation/schema/SchemaValidator.ts","../src/core/validation/formula/FormulaValidator.ts"],"names":[],"mappings":"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","file":"chunk-3JZKQWQH.js","sourcesContent":["import type { Formula as ParsedFormula } from '../schema-formula/core/Formula.js';\n\nexport type NodeType =\n | 'object'\n | 'array'\n | 'string'\n | 'number'\n | 'boolean'\n | 'ref'\n | 'null';\n\nexport interface NodeMetadata {\n readonly title?: string;\n readonly description?: string;\n readonly deprecated?: boolean;\n}\n\nexport const EMPTY_METADATA: NodeMetadata = Object.freeze({});\n\nexport type Formula = ParsedFormula;\n\nexport interface SchemaNode {\n id(): string;\n name(): string;\n nodeType(): NodeType;\n metadata(): NodeMetadata;\n\n isObject(): boolean;\n isArray(): boolean;\n isPrimitive(): boolean;\n isRef(): boolean;\n isNull(): boolean;\n\n property(name: string): SchemaNode;\n properties(): readonly SchemaNode[];\n items(): SchemaNode;\n\n ref(): string | undefined;\n formula(): Formula | undefined;\n hasFormula(): boolean;\n defaultValue(): unknown;\n foreignKey(): string | undefined;\n contentMediaType(): string | undefined;\n\n clone(): SchemaNode;\n cloneWithId(newId: string): SchemaNode;\n\n setName(name: string): void;\n setMetadata(metadata: NodeMetadata): void;\n addChild(node: SchemaNode): void;\n insertChild(index: number, node: SchemaNode): void;\n removeChild(name: string): boolean;\n replaceChild(name: string, node: SchemaNode): boolean;\n setItems(node: SchemaNode): void;\n setDefaultValue(value: unknown): void;\n setFormula(formula: Formula | undefined): void;\n setForeignKey(key: string | undefined): void;\n setContentMediaType(mediaType: string | undefined): void;\n}\n","import type { SchemaNode, NodeType, NodeMetadata, Formula } from './types.js';\nimport { EMPTY_METADATA } from './types.js';\n\nclass NullNodeImpl implements SchemaNode {\n id(): string {\n return '';\n }\n\n name(): string {\n return '';\n }\n\n nodeType(): NodeType {\n return 'null';\n }\n\n metadata(): NodeMetadata {\n return EMPTY_METADATA;\n }\n\n isObject(): boolean {\n return false;\n }\n\n isArray(): boolean {\n return false;\n }\n\n isPrimitive(): boolean {\n return false;\n }\n\n isRef(): boolean {\n return false;\n }\n\n isNull(): boolean {\n return true;\n }\n\n property(): SchemaNode {\n return this;\n }\n\n properties(): readonly SchemaNode[] {\n return [];\n }\n\n items(): SchemaNode {\n return this;\n }\n\n ref(): string | undefined {\n return undefined;\n }\n\n formula(): Formula | undefined {\n return undefined;\n }\n\n hasFormula(): boolean {\n return false;\n }\n\n defaultValue(): unknown {\n return undefined;\n }\n\n foreignKey(): string | undefined {\n return undefined;\n }\n\n clone(): SchemaNode {\n return this;\n }\n\n cloneWithId(_newId: string): SchemaNode {\n return this;\n }\n\n setName(_name: string): void {\n // No-op for null\n }\n\n setMetadata(_metadata: NodeMetadata): void {\n // No-op for null\n }\n\n addChild(_node: SchemaNode): void {\n // No-op for null\n }\n\n insertChild(_index: number, _node: SchemaNode): void {\n // No-op for null\n }\n\n removeChild(_name: string): boolean {\n return false;\n }\n\n replaceChild(_name: string, _node: SchemaNode): boolean {\n return false;\n }\n\n setItems(_node: SchemaNode): void {\n // No-op for null\n }\n\n setDefaultValue(_value: unknown): void {\n // No-op for null\n }\n\n setFormula(_formula: Formula | undefined): void {\n // No-op for null\n }\n\n setForeignKey(_key: string | undefined): void {\n // No-op for null\n }\n\n contentMediaType(): string | undefined {\n return undefined;\n }\n\n setContentMediaType(_mediaType: string | undefined): void {\n // No-op for null\n }\n}\n\nexport const NULL_NODE: SchemaNode = new NullNodeImpl();\n","// Reactivity provider - allows switching between MobX and noop implementations\n\nexport interface ObservableFactory {\n map<K, V>(): Map<K, V>;\n array<T>(): T[];\n}\n\nexport interface ReactivityProvider {\n makeObservable<T extends object>(\n target: T,\n annotations: Record<string, unknown>,\n ): T;\n makeAutoObservable<T extends object>(\n target: T,\n overrides?: Record<string, unknown>,\n ): T;\n isObservable(target: object): boolean;\n observable: ObservableFactory;\n runInAction<T>(fn: () => T): T;\n reaction<T>(\n expression: () => T,\n effect: (value: T) => void,\n ): () => void;\n}\n\n// Noop implementation - default for backend\nconst noopProvider: ReactivityProvider = {\n makeObservable: <T extends object>(target: T) => target,\n makeAutoObservable: <T extends object>(target: T) => target,\n isObservable: () => false,\n observable: {\n map: <K, V>() => new Map<K, V>(),\n array: <T>() => [] as T[],\n },\n runInAction: <T>(fn: () => T) => fn(),\n reaction: () => () => {},\n};\n\nlet currentProvider: ReactivityProvider = noopProvider;\n\nexport function setReactivityProvider(provider: ReactivityProvider): void {\n currentProvider = provider;\n}\n\nexport function getReactivityProvider(): ReactivityProvider {\n return currentProvider;\n}\n\nexport function resetReactivityProvider(): void {\n currentProvider = noopProvider;\n}\n","// MobX-compatible API that delegates to the current provider\n\nimport { getReactivityProvider } from './provider.js';\n\nexport function makeObservable<T extends object>(\n target: T,\n annotations: Record<string, unknown>,\n): T {\n return getReactivityProvider().makeObservable(target, annotations);\n}\n\nexport function makeAutoObservable<T extends object>(\n target: T,\n overrides?: Record<string, unknown>,\n): T {\n return getReactivityProvider().makeAutoObservable(target, overrides ?? {});\n}\n\nexport function isObservable(target: object): boolean {\n return getReactivityProvider().isObservable(target);\n}\n\nexport const observable = {\n map<K, V>(): Map<K, V> {\n return getReactivityProvider().observable.map<K, V>();\n },\n array<T>(): T[] {\n return getReactivityProvider().observable.array<T>();\n },\n};\n\nexport function runInAction<T>(fn: () => T): T {\n return getReactivityProvider().runInAction(fn);\n}\n\nexport function reaction<T>(\n expression: () => T,\n effect: (value: T) => void,\n): () => void {\n return getReactivityProvider().reaction(expression, effect);\n}\n","// MobX provider factory - creates ReactivityProvider from MobX instance\n// This file is used by consumers to configure real MobX reactivity\n\nimport type { ReactivityProvider } from './provider.js';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype AnyFunction = (...args: any[]) => any;\n\ninterface MobXObservable {\n map<K, V>(): Map<K, V>;\n array<T>(): T[];\n ref: unknown;\n shallow: unknown;\n}\n\ninterface MobXModule {\n makeObservable: AnyFunction;\n makeAutoObservable: AnyFunction;\n isObservable: (target: object) => boolean;\n observable: MobXObservable;\n action: unknown;\n computed: unknown;\n runInAction: <T>(fn: () => T) => T;\n reaction: <T>(\n expression: () => T,\n effect: (value: T) => void,\n ) => () => void;\n}\n\nfunction convertAnnotations(\n mobx: MobXModule,\n annotations: Record<string, unknown>,\n): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(annotations)) {\n if (typeof value === 'string') {\n switch (value) {\n case 'observable':\n result[key] = mobx.observable;\n break;\n case 'observable.ref':\n result[key] = mobx.observable.ref;\n break;\n case 'observable.shallow':\n result[key] = mobx.observable.shallow;\n break;\n case 'action':\n result[key] = mobx.action;\n break;\n case 'computed':\n result[key] = mobx.computed;\n break;\n default:\n result[key] = value;\n }\n } else {\n result[key] = value;\n }\n }\n return result;\n}\n\nexport function createMobxProvider(mobx: MobXModule): ReactivityProvider {\n return {\n makeObservable: <T extends object>(\n target: T,\n annotations: Record<string, unknown>,\n ) => mobx.makeObservable(target, convertAnnotations(mobx, annotations)),\n makeAutoObservable: <T extends object>(\n target: T,\n overrides?: Record<string, unknown>,\n ) => mobx.makeAutoObservable(target, overrides ? convertAnnotations(mobx, overrides) : {}),\n isObservable: mobx.isObservable,\n observable: {\n map: <K, V>() => mobx.observable.map<K, V>(),\n array: <T>() => mobx.observable.array<T>(),\n },\n runInAction: mobx.runInAction,\n reaction: mobx.reaction,\n };\n}\n","import type { SchemaNode, NodeType, NodeMetadata, Formula } from './types.js';\nimport { EMPTY_METADATA } from './types.js';\nimport { NULL_NODE } from './NullNode.js';\nimport { makeObservable } from '../reactivity/index.js';\n\nexport abstract class BaseNode implements SchemaNode {\n protected _name: string;\n protected _metadata: NodeMetadata;\n protected _ref: string | undefined;\n\n constructor(\n private readonly _id: string,\n name: string,\n metadata: NodeMetadata = EMPTY_METADATA,\n ref?: string,\n ) {\n this._name = name;\n this._metadata = metadata;\n this._ref = ref;\n }\n\n protected initBaseObservable(): void {\n makeObservable(this, {\n _name: 'observable',\n _metadata: 'observable.ref',\n setName: 'action',\n setMetadata: 'action',\n });\n }\n\n id(): string {\n return this._id;\n }\n\n name(): string {\n return this._name;\n }\n\n abstract nodeType(): NodeType;\n\n metadata(): NodeMetadata {\n return this._metadata;\n }\n\n isObject(): boolean {\n return false;\n }\n\n isArray(): boolean {\n return false;\n }\n\n isPrimitive(): boolean {\n return false;\n }\n\n isRef(): boolean {\n return this._ref !== undefined;\n }\n\n isNull(): boolean {\n return false;\n }\n\n property(_name: string): SchemaNode {\n return NULL_NODE;\n }\n\n properties(): readonly SchemaNode[] {\n return [];\n }\n\n items(): SchemaNode {\n return NULL_NODE;\n }\n\n ref(): string | undefined {\n return this._ref;\n }\n\n formula(): Formula | undefined {\n return undefined;\n }\n\n hasFormula(): boolean {\n return false;\n }\n\n defaultValue(): unknown {\n return undefined;\n }\n\n foreignKey(): string | undefined {\n return undefined;\n }\n\n contentMediaType(): string | undefined {\n return undefined;\n }\n\n abstract clone(): SchemaNode;\n abstract cloneWithId(newId: string): SchemaNode;\n\n setName(name: string): void {\n this._name = name;\n }\n\n setMetadata(metadata: NodeMetadata): void {\n this._metadata = metadata;\n }\n\n addChild(_node: SchemaNode): void {\n // No-op by default\n }\n\n insertChild(_index: number, _node: SchemaNode): void {\n // No-op by default\n }\n\n removeChild(_name: string): boolean {\n return false;\n }\n\n replaceChild(_name: string, _node: SchemaNode): boolean {\n return false;\n }\n\n setItems(_node: SchemaNode): void {\n // No-op by default\n }\n\n setDefaultValue(_value: unknown): void {\n // No-op by default\n }\n\n setFormula(_formula: Formula | undefined): void {\n // No-op by default\n }\n\n setForeignKey(_key: string | undefined): void {\n // No-op by default\n }\n\n setContentMediaType(_mediaType: string | undefined): void {\n // No-op by default\n }\n}\n","import type { NodeMetadata } from './types.js';\n\nexport interface NodeOptionsWithMetadata {\n metadata?: NodeMetadata;\n ref?: string;\n}\n\nexport function isNodeMetadata(\n value: NodeOptionsWithMetadata | NodeMetadata,\n): value is NodeMetadata {\n if ('ref' in value || 'metadata' in value) {\n return false;\n }\n return 'title' in value || 'description' in value || 'deprecated' in value;\n}\n\nexport function normalizeNodeOptions<T extends NodeOptionsWithMetadata>(\n options: T | NodeMetadata,\n): T {\n if (isNodeMetadata(options)) {\n return { metadata: options } as T;\n }\n return options;\n}\n","import type { SchemaNode, NodeType, NodeMetadata } from './types.js';\nimport { EMPTY_METADATA } from './types.js';\nimport { BaseNode } from './BaseNode.js';\nimport { NULL_NODE } from './NullNode.js';\nimport { makeObservable } from '../reactivity/index.js';\nimport { normalizeNodeOptions } from './utils.js';\n\nexport interface ObjectNodeOptions {\n metadata?: NodeMetadata;\n ref?: string;\n}\n\nexport class ObjectNode extends BaseNode {\n private _children: SchemaNode[];\n\n constructor(\n id: string,\n name: string,\n children: readonly SchemaNode[] = [],\n optionsOrMetadata: ObjectNodeOptions | NodeMetadata = {},\n ) {\n const options = normalizeNodeOptions(optionsOrMetadata);\n super(id, name, options.metadata ?? EMPTY_METADATA, options.ref);\n this._children = [...children];\n this.initBaseObservable();\n makeObservable(this, {\n _children: 'observable.shallow',\n addChild: 'action',\n insertChild: 'action',\n removeChild: 'action',\n replaceChild: 'action',\n });\n }\n\n nodeType(): NodeType {\n return 'object';\n }\n\n isObject(): boolean {\n return true;\n }\n\n property(name: string): SchemaNode {\n return this._children.find((child) => child.name() === name) ?? NULL_NODE;\n }\n\n properties(): readonly SchemaNode[] {\n return this._children;\n }\n\n clone(): SchemaNode {\n return new ObjectNode(\n this.id(),\n this.name(),\n this._children.map((child) => child.clone()),\n { metadata: this.metadata(), ref: this._ref },\n );\n }\n\n cloneWithId(newId: string): SchemaNode {\n return new ObjectNode(\n newId,\n this.name(),\n this._children.map((child) => child.clone()),\n { metadata: this.metadata(), ref: this._ref },\n );\n }\n\n addChild(node: SchemaNode): void {\n this._children.push(node);\n }\n\n insertChild(index: number, node: SchemaNode): void {\n if (index < 0 || index > this._children.length) {\n throw new Error(`Index out of bounds: ${index}`);\n }\n this._children.splice(index, 0, node);\n }\n\n removeChild(name: string): boolean {\n const index = this._children.findIndex((child) => child.name() === name);\n if (index === -1) {\n return false;\n }\n this._children.splice(index, 1);\n return true;\n }\n\n replaceChild(name: string, node: SchemaNode): boolean {\n const index = this._children.findIndex((child) => child.name() === name);\n if (index === -1) {\n return false;\n }\n this._children[index] = node;\n return true;\n }\n}\n\nexport function createObjectNode(\n id: string,\n name: string,\n children: readonly SchemaNode[] = [],\n options: ObjectNodeOptions | NodeMetadata = {},\n): SchemaNode {\n return new ObjectNode(id, name, children, options);\n}\n","import type { SchemaNode, NodeType, NodeMetadata } from './types.js';\nimport { EMPTY_METADATA } from './types.js';\nimport { BaseNode } from './BaseNode.js';\nimport { makeObservable } from '../reactivity/index.js';\nimport { normalizeNodeOptions } from './utils.js';\n\nexport interface ArrayNodeOptions {\n metadata?: NodeMetadata;\n ref?: string;\n}\n\nexport class ArrayNode extends BaseNode {\n private _items: SchemaNode;\n\n constructor(\n id: string,\n name: string,\n items: SchemaNode,\n optionsOrMetadata: ArrayNodeOptions | NodeMetadata = {},\n ) {\n const options = normalizeNodeOptions(optionsOrMetadata);\n super(id, name, options.metadata ?? EMPTY_METADATA, options.ref);\n this._items = items;\n this.initBaseObservable();\n makeObservable(this, {\n _items: 'observable.ref',\n setItems: 'action',\n });\n }\n\n nodeType(): NodeType {\n return 'array';\n }\n\n isArray(): boolean {\n return true;\n }\n\n properties(): readonly SchemaNode[] {\n return [this._items];\n }\n\n items(): SchemaNode {\n return this._items;\n }\n\n clone(): SchemaNode {\n return new ArrayNode(this.id(), this.name(), this._items.clone(), {\n metadata: this.metadata(),\n ref: this._ref,\n });\n }\n\n cloneWithId(newId: string): SchemaNode {\n return new ArrayNode(newId, this.name(), this._items.clone(), {\n metadata: this.metadata(),\n ref: this._ref,\n });\n }\n\n setItems(node: SchemaNode): void {\n this._items = node;\n }\n}\n\nexport function createArrayNode(\n id: string,\n name: string,\n items: SchemaNode,\n options: ArrayNodeOptions | NodeMetadata = {},\n): SchemaNode {\n return new ArrayNode(id, name, items, options);\n}\n","import type { SchemaNode, NodeType, NodeMetadata, Formula } from './types.js';\nimport { EMPTY_METADATA } from './types.js';\nimport { BaseNode } from './BaseNode.js';\nimport { makeObservable } from '../reactivity/index.js';\n\nexport interface PrimitiveNodeOptions {\n readonly defaultValue?: unknown;\n readonly foreignKey?: string;\n readonly formula?: Formula;\n readonly metadata?: NodeMetadata;\n readonly ref?: string;\n}\n\nexport abstract class PrimitiveNode extends BaseNode {\n protected _defaultValue: unknown;\n protected _foreignKey: string | undefined;\n protected _formula: Formula | undefined;\n\n constructor(\n id: string,\n name: string,\n options: PrimitiveNodeOptions = {},\n ) {\n super(id, name, options.metadata ?? EMPTY_METADATA, options.ref);\n this._defaultValue = options.defaultValue;\n this._foreignKey = options.foreignKey;\n this._formula = options.formula;\n }\n\n protected initPrimitiveObservable(): void {\n makeObservable(this, {\n _name: 'observable',\n _metadata: 'observable.ref',\n _formula: 'observable.ref',\n _defaultValue: 'observable',\n _foreignKey: 'observable',\n setName: 'action',\n setMetadata: 'action',\n setFormula: 'action',\n setDefaultValue: 'action',\n setForeignKey: 'action',\n });\n }\n\n abstract nodeType(): NodeType;\n\n isPrimitive(): boolean {\n return true;\n }\n\n formula(): Formula | undefined {\n return this._formula;\n }\n\n hasFormula(): boolean {\n return this._formula !== undefined;\n }\n\n defaultValue(): unknown {\n return this._defaultValue;\n }\n\n foreignKey(): string | undefined {\n return this._foreignKey;\n }\n\n abstract clone(): SchemaNode;\n\n setDefaultValue(value: unknown): void {\n this._defaultValue = value;\n }\n\n setFormula(formula: Formula | undefined): void {\n this._formula = formula;\n }\n\n setForeignKey(key: string | undefined): void {\n this._foreignKey = key;\n }\n}\n","import type { SchemaNode, NodeType, NodeMetadata, Formula } from './types.js';\nimport type { ContentMediaType } from '../../types/index.js';\nimport { PrimitiveNode } from './PrimitiveNode.js';\nimport { makeObservable } from '../reactivity/index.js';\n\nexport interface StringNodeOptions {\n readonly defaultValue?: string;\n readonly foreignKey?: string;\n readonly formula?: Formula;\n readonly metadata?: NodeMetadata;\n readonly contentMediaType?: ContentMediaType;\n readonly ref?: string;\n}\n\nexport class StringNode extends PrimitiveNode {\n private _contentMediaType: ContentMediaType | undefined;\n\n constructor(\n id: string,\n name: string,\n options: StringNodeOptions = {},\n ) {\n super(id, name, options);\n this._contentMediaType = options.contentMediaType;\n this.initPrimitiveObservable();\n makeObservable(this, {\n _contentMediaType: 'observable',\n setContentMediaType: 'action',\n });\n }\n\n nodeType(): NodeType {\n return 'string';\n }\n\n contentMediaType(): ContentMediaType | undefined {\n return this._contentMediaType;\n }\n\n setContentMediaType(mediaType: ContentMediaType | undefined): void {\n this._contentMediaType = mediaType;\n }\n\n clone(): SchemaNode {\n return new StringNode(this.id(), this.name(), this.cloneOptions());\n }\n\n cloneWithId(newId: string): SchemaNode {\n return new StringNode(newId, this.name(), this.cloneOptions());\n }\n\n private cloneOptions(): StringNodeOptions {\n return {\n defaultValue: this._defaultValue as string | undefined,\n foreignKey: this._foreignKey,\n formula: this._formula,\n metadata: this._metadata,\n contentMediaType: this._contentMediaType,\n ref: this._ref,\n };\n }\n}\n\nexport function createStringNode(\n id: string,\n name: string,\n options: StringNodeOptions = {},\n): SchemaNode {\n return new StringNode(id, name, options);\n}\n","import type { SchemaNode, NodeType, NodeMetadata, Formula } from './types.js';\nimport { PrimitiveNode } from './PrimitiveNode.js';\n\nexport interface NumberNodeOptions {\n readonly defaultValue?: number;\n readonly formula?: Formula;\n readonly metadata?: NodeMetadata;\n readonly ref?: string;\n}\n\nexport class NumberNode extends PrimitiveNode {\n constructor(\n id: string,\n name: string,\n options: NumberNodeOptions = {},\n ) {\n super(id, name, options);\n this.initPrimitiveObservable();\n }\n\n nodeType(): NodeType {\n return 'number';\n }\n\n clone(): SchemaNode {\n return new NumberNode(this.id(), this.name(), this.cloneOptions());\n }\n\n cloneWithId(newId: string): SchemaNode {\n return new NumberNode(newId, this.name(), this.cloneOptions());\n }\n\n private cloneOptions(): NumberNodeOptions {\n return {\n defaultValue: this._defaultValue as number | undefined,\n formula: this._formula,\n metadata: this._metadata,\n ref: this._ref,\n };\n }\n}\n\nexport function createNumberNode(\n id: string,\n name: string,\n options: NumberNodeOptions = {},\n): SchemaNode {\n return new NumberNode(id, name, options);\n}\n","import type { SchemaNode, NodeType, NodeMetadata, Formula } from './types.js';\nimport { PrimitiveNode } from './PrimitiveNode.js';\n\nexport interface BooleanNodeOptions {\n readonly defaultValue?: boolean;\n readonly formula?: Formula;\n readonly metadata?: NodeMetadata;\n readonly ref?: string;\n}\n\nexport class BooleanNode extends PrimitiveNode {\n constructor(\n id: string,\n name: string,\n options: BooleanNodeOptions = {},\n ) {\n super(id, name, options);\n this.initPrimitiveObservable();\n }\n\n nodeType(): NodeType {\n return 'boolean';\n }\n\n clone(): SchemaNode {\n return new BooleanNode(this.id(), this.name(), this.cloneOptions());\n }\n\n cloneWithId(newId: string): SchemaNode {\n return new BooleanNode(newId, this.name(), this.cloneOptions());\n }\n\n private cloneOptions(): BooleanNodeOptions {\n return {\n defaultValue: this._defaultValue as boolean | undefined,\n formula: this._formula,\n metadata: this._metadata,\n ref: this._ref,\n };\n }\n}\n\nexport function createBooleanNode(\n id: string,\n name: string,\n options: BooleanNodeOptions = {},\n): SchemaNode {\n return new BooleanNode(id, name, options);\n}\n","import type { SchemaNode, NodeType, NodeMetadata } from './types.js';\nimport { EMPTY_METADATA } from './types.js';\nimport { BaseNode } from './BaseNode.js';\n\nexport class RefNode extends BaseNode {\n constructor(\n id: string,\n name: string,\n ref: string,\n metadata: NodeMetadata = EMPTY_METADATA,\n ) {\n super(id, name, metadata, ref);\n if (!ref) {\n throw new Error('RefNode requires a non-empty ref');\n }\n this.initBaseObservable();\n }\n\n nodeType(): NodeType {\n return 'ref';\n }\n\n clone(): SchemaNode {\n const ref = this.ref();\n if (!ref) {\n throw new Error('RefNode must have a ref value');\n }\n return new RefNode(this.id(), this.name(), ref, this.metadata());\n }\n\n cloneWithId(newId: string): SchemaNode {\n const ref = this.ref();\n if (!ref) {\n throw new Error('RefNode must have a ref value');\n }\n return new RefNode(newId, this.name(), ref, this.metadata());\n }\n}\n\nexport function createRefNode(\n id: string,\n name: string,\n ref: string,\n metadata: NodeMetadata = EMPTY_METADATA,\n): SchemaNode {\n return new RefNode(id, name, ref, metadata);\n}\n","import type { PathSegment } from './types.js';\n\nexport class PropertySegment implements PathSegment {\n constructor(private readonly name: string) {}\n\n isProperty(): boolean {\n return true;\n }\n\n isItems(): boolean {\n return false;\n }\n\n propertyName(): string {\n return this.name;\n }\n\n equals(other: PathSegment): boolean {\n return other.isProperty() && other.propertyName() === this.name;\n }\n}\n\nexport class ItemsSegment implements PathSegment {\n isProperty(): boolean {\n return false;\n }\n\n isItems(): boolean {\n return true;\n }\n\n propertyName(): string {\n throw new Error('Items segment has no property name');\n }\n\n equals(other: PathSegment): boolean {\n return other.isItems();\n }\n}\n","import type { BasePath, BasePathSegment } from './types.js';\n\nexport abstract class AbstractBasePath<\n TSegment extends BasePathSegment,\n TSelf extends BasePath<TSegment, TSelf>,\n> implements BasePath<TSegment, TSelf>\n{\n constructor(protected readonly segs: readonly TSegment[]) {}\n\n segments(): readonly TSegment[] {\n return this.segs;\n }\n\n abstract parent(): TSelf;\n\n equals(other: TSelf): boolean {\n const otherSegs = other.segments();\n if (this.segs.length !== otherSegs.length) {\n return false;\n }\n for (let i = 0; i < this.segs.length; i++) {\n const a = this.segs[i];\n const b = otherSegs[i];\n if (!a || !b || !a.equals(b)) {\n return false;\n }\n }\n return true;\n }\n\n isEmpty(): boolean {\n return this.segs.length === 0;\n }\n\n length(): number {\n return this.segs.length;\n }\n\n isChildOf(parent: TSelf): boolean {\n const parentSegs = parent.segments();\n if (this.segs.length <= parentSegs.length) {\n return false;\n }\n for (let i = 0; i < parentSegs.length; i++) {\n const a = this.segs[i];\n const b = parentSegs[i];\n if (!a || !b || !a.equals(b)) {\n return false;\n }\n }\n return true;\n }\n}\n","import { AbstractBasePath } from '../base-path/AbstractBasePath.js';\nimport type { Path, PathSegment } from './types.js';\nimport { PropertySegment, ItemsSegment } from './PathSegment.js';\n\nclass PathImpl extends AbstractBasePath<PathSegment, Path> implements Path {\n asJsonPointer(): string {\n return this.segs\n .map((seg) =>\n seg.isProperty() ? `/properties/${seg.propertyName()}` : '/items',\n )\n .join('');\n }\n\n asSimple(): string {\n const parts: string[] = [];\n\n for (const seg of this.segs) {\n if (seg.isProperty()) {\n parts.push(seg.propertyName());\n } else if (seg.isItems()) {\n if (parts.length > 0) {\n const lastIndex = parts.length - 1;\n const lastPart = parts[lastIndex];\n if (lastPart !== undefined) {\n parts[lastIndex] = lastPart + '[*]';\n }\n } else {\n parts.push('[*]');\n }\n }\n }\n\n return parts.join('.');\n }\n\n parent(): Path {\n if (this.segs.length <= 1) {\n return EMPTY_PATH;\n }\n return new PathImpl(this.segs.slice(0, -1));\n }\n\n child(name: string): Path {\n return new PathImpl([...this.segs, new PropertySegment(name)]);\n }\n\n childItems(): Path {\n return new PathImpl([...this.segs, new ItemsSegment()]);\n }\n}\n\nexport const EMPTY_PATH: Path = new PathImpl([]);\n\nexport function createPath(segments: readonly PathSegment[]): Path {\n return segments.length === 0 ? EMPTY_PATH : new PathImpl(segments);\n}\n","import type { Path, PathSegment } from './types.js';\nimport { createPath } from './Path.js';\nimport { PropertySegment, ItemsSegment } from './PathSegment.js';\n\nexport function jsonPointerToSegments(pointer: string): PathSegment[] {\n if (pointer === '' || pointer === '/') {\n return [];\n }\n\n const parts = pointer.startsWith('/') ? pointer.slice(1).split('/') : pointer.split('/');\n const segments: PathSegment[] = [];\n\n let i = 0;\n while (i < parts.length) {\n const part = parts[i];\n if (part === 'properties') {\n const hasNextPart = i + 1 < parts.length;\n if (hasNextPart) {\n const name = parts[i + 1] ?? '';\n segments.push(new PropertySegment(name));\n i += 2;\n } else {\n i += 1;\n }\n } else if (part === 'items') {\n segments.push(new ItemsSegment());\n i += 1;\n } else if (part === '') {\n i += 1;\n } else {\n throw new Error(`Invalid path segment: ${part} in path ${pointer}`);\n }\n }\n\n return segments;\n}\n\nexport function jsonPointerToPath(pointer: string): Path {\n return createPath(jsonPointerToSegments(pointer));\n}\n\nexport function jsonPointerToSimplePath(pointer: string): string {\n return jsonPointerToPath(pointer).asSimple();\n}\n","import type { SchemaNode } from '../schema-node/index.js';\nimport { NULL_NODE } from '../schema-node/index.js';\nimport type { Path } from '../path/index.js';\nimport { EMPTY_PATH } from '../path/index.js';\nimport { observable, makeAutoObservable } from '../reactivity/index.js';\n\nexport class TreeNodeIndex {\n private readonly nodeIndex: Map<string, SchemaNode> = observable.map();\n private readonly pathIndex: Map<string, Path> = observable.map();\n\n constructor() {\n makeAutoObservable(this, {\n nodeIndex: false,\n pathIndex: false,\n });\n }\n\n rebuild(rootNode: SchemaNode): void {\n this.nodeIndex.clear();\n this.pathIndex.clear();\n this.collectNodes(rootNode, EMPTY_PATH);\n }\n\n getNode(id: string): SchemaNode {\n return this.nodeIndex.get(id) ?? NULL_NODE;\n }\n\n getPath(id: string): Path {\n return this.pathIndex.get(id) ?? EMPTY_PATH;\n }\n\n get nodeCount(): number {\n return this.nodeIndex.size;\n }\n\n nodeIds(): IterableIterator<string> {\n return this.nodeIndex.keys();\n }\n\n private collectNodes(node: SchemaNode, path: Path): void {\n this.nodeIndex.set(node.id(), node);\n this.pathIndex.set(node.id(), path);\n\n if (node.isObject()) {\n for (const child of node.properties()) {\n this.collectNodes(child, path.child(child.name()));\n }\n } else if (node.isArray()) {\n this.collectNodes(node.items(), path.childItems());\n }\n }\n}\n","import type { SchemaNode } from '../schema-node/index.js';\nimport { NULL_NODE } from '../schema-node/index.js';\nimport type { Path } from '../path/index.js';\nimport type { SchemaTree } from './types.js';\nimport { TreeNodeIndex } from './TreeNodeIndex.js';\nimport { makeAutoObservable } from '../reactivity/index.js';\n\nexport class SchemaTreeImpl implements SchemaTree {\n private readonly index = new TreeNodeIndex();\n private readonly _replacements = new Map<string, string>();\n private _rootNode: SchemaNode;\n\n constructor(rootNode: SchemaNode) {\n this._rootNode = rootNode;\n this.index.rebuild(rootNode);\n\n makeAutoObservable(this, {\n index: false,\n _replacements: false,\n _rootNode: 'observable.ref',\n });\n }\n\n root(): SchemaNode {\n return this._rootNode;\n }\n\n nodeById(id: string): SchemaNode {\n return this.index.getNode(id);\n }\n\n pathOf(id: string): Path {\n return this.index.getPath(id);\n }\n\n nodeAt(path: Path): SchemaNode {\n if (path.isEmpty()) {\n return this._rootNode;\n }\n\n let current: SchemaNode = this._rootNode;\n\n for (const segment of path.segments()) {\n if (current.isNull()) {\n return NULL_NODE;\n }\n\n if (segment.isItems()) {\n current = current.items();\n } else {\n current = current.property(segment.propertyName());\n }\n }\n\n return current;\n }\n\n nodeIds(): IterableIterator<string> {\n return this.index.nodeIds();\n }\n\n countNodes(): number {\n return this.index.nodeCount;\n }\n\n clone(): SchemaTree {\n const clonedRoot = this._rootNode.clone();\n const cloned = new SchemaTreeImpl(clonedRoot);\n for (const [oldId, newId] of this._replacements) {\n cloned._replacements.set(oldId, newId);\n }\n return cloned;\n }\n\n trackReplacement(oldNodeId: string, newNodeId: string): void {\n this._replacements.set(oldNodeId, newNodeId);\n }\n\n replacements(): IterableIterator<[string, string]> {\n return this._replacements.entries();\n }\n\n clearReplacements(): void {\n this._replacements.clear();\n }\n\n addChildTo(parentId: string, node: SchemaNode): void {\n const parent = this.nodeById(parentId);\n if (parent.isNull()) {\n return;\n }\n\n if (parent.isArray()) {\n throw new Error('Cannot add child to array node. Use setItems instead.');\n }\n\n parent.addChild(node);\n this.rebuildIndex();\n }\n\n insertChildAt(parentId: string, index: number, node: SchemaNode): void {\n const parent = this.nodeById(parentId);\n if (parent.isNull()) {\n return;\n }\n\n if (parent.isArray()) {\n throw new Error('Cannot add child to array node. Use setItems instead.');\n }\n\n parent.insertChild(index, node);\n this.rebuildIndex();\n }\n\n removeNodeAt(path: Path): boolean {\n if (path.isEmpty()) {\n return false;\n }\n\n const parentPath = path.parent();\n const parent = this.nodeAt(parentPath);\n\n if (parent.isNull()) {\n return false;\n }\n\n const lastSegment = path.segments().at(-1);\n\n if (!lastSegment || lastSegment.isItems()) {\n return false;\n }\n\n const removed = parent.removeChild(lastSegment.propertyName());\n if (removed) {\n this.rebuildIndex();\n }\n return removed;\n }\n\n renameNode(nodeId: string, newName: string): void {\n const node = this.nodeById(nodeId);\n if (node.isNull()) {\n return;\n }\n\n node.setName(newName);\n this.rebuildIndex();\n }\n\n moveNode(nodeId: string, newParentId: string): void {\n const node = this.nodeById(nodeId);\n if (node.isNull()) {\n return;\n }\n\n const currentPath = this.pathOf(nodeId);\n if (currentPath.isEmpty()) {\n return;\n }\n\n const currentParentPath = currentPath.parent();\n const currentParent = this.nodeAt(currentParentPath);\n\n if (currentParent.isNull()) {\n return;\n }\n\n if (currentParent.isArray()) {\n throw new Error('Cannot move node from array. Array items cannot be moved.');\n }\n\n const newParent = this.nodeById(newParentId);\n if (newParent.isNull()) {\n return;\n }\n\n if (newParent.isArray()) {\n throw new Error('Cannot move node into array. Use setItems instead.');\n }\n\n const newParentPath = this.pathOf(newParentId);\n if (\n newParentPath.equals(currentPath) ||\n newParentPath.isChildOf(currentPath)\n ) {\n return;\n }\n\n currentParent.removeChild(node.name());\n newParent.addChild(node);\n this.rebuildIndex();\n }\n\n setNodeAt(path: Path, node: SchemaNode): void {\n if (path.isEmpty()) {\n return;\n }\n\n const parentPath = path.parent();\n const parent = this.nodeAt(parentPath);\n\n if (parent.isNull()) {\n return;\n }\n\n const lastSegment = path.segments().at(-1);\n\n if (!lastSegment) {\n return;\n }\n\n if (lastSegment.isItems()) {\n parent.setItems(node);\n } else {\n const propertyName = lastSegment.propertyName();\n node.setName(propertyName);\n parent.replaceChild(propertyName, node);\n }\n\n this.rebuildIndex();\n }\n\n replaceRoot(newRoot: SchemaNode): void {\n this._rootNode = newRoot;\n this.rebuildIndex();\n }\n\n private rebuildIndex(): void {\n this.index.rebuild(this._rootNode);\n }\n}\n\nexport function createSchemaTree(root: SchemaNode): SchemaTree {\n return new SchemaTreeImpl(root);\n}\n","import type { SchemaTree } from '../schema-tree/index.js';\nimport type { Path } from '../path/index.js';\n\nexport class NodePathIndex {\n private readonly _basePaths = new Map<string, Path>();\n private readonly _replacements = new Map<string, string>();\n\n constructor(baseTree: SchemaTree) {\n for (const nodeId of baseTree.nodeIds()) {\n this._basePaths.set(nodeId, baseTree.pathOf(nodeId));\n }\n }\n\n hasBasePath(nodeId: string): boolean {\n return this._basePaths.has(nodeId);\n }\n\n getBasePath(nodeId: string): Path | undefined {\n return this._basePaths.get(nodeId);\n }\n\n trackReplacement(oldNodeId: string, newNodeId: string): void {\n this._replacements.set(oldNodeId, newNodeId);\n }\n\n getReplacementNodeId(oldNodeId: string): string | undefined {\n return this._replacements.get(oldNodeId);\n }\n\n getOriginalNodeId(newNodeId: string): string | undefined {\n for (const [oldId, newId] of this._replacements) {\n if (newId === newNodeId) {\n return oldId;\n }\n }\n return undefined;\n }\n\n isReplacement(nodeId: string): boolean {\n for (const newId of this._replacements.values()) {\n if (newId === nodeId) {\n return true;\n }\n }\n return false;\n }\n\n get replacements(): ReadonlyMap<string, string> {\n return this._replacements;\n }\n}\n","import type { Path, PathSegment } from '../../path/index.js';\n\nexport class FormulaPathBuilder {\n buildWithArrayNotation(fromPath: Path, toPath: Path): string {\n const fromSegments = fromPath.parent().segments();\n const toSegments = toPath.segments();\n\n const commonLength = this.findCommonPrefixLength(fromSegments, toSegments);\n const upCount = fromSegments.length - commonLength;\n\n const parts = this.buildPartsWithArrayNotation(\n upCount,\n toSegments,\n commonLength,\n );\n\n return this.formatPartsWithArrayNotation(parts, toSegments);\n }\n\n private findCommonPrefixLength(\n fromSegments: readonly PathSegment[],\n toSegments: readonly PathSegment[],\n ): number {\n const minLen = Math.min(fromSegments.length, toSegments.length);\n let commonPrefixLen = 0;\n\n for (let i = 0; i < minLen; i++) {\n const fromSeg = fromSegments[i];\n const toSeg = toSegments[i];\n\n if (!fromSeg || !toSeg) {\n break;\n }\n\n if (fromSeg.isItems() && toSeg.isItems()) {\n commonPrefixLen++;\n } else if (\n fromSeg.isProperty() &&\n toSeg.isProperty() &&\n fromSeg.propertyName() === toSeg.propertyName()\n ) {\n commonPrefixLen++;\n } else {\n break;\n }\n }\n\n return commonPrefixLen;\n }\n\n private buildPartsWithArrayNotation(\n upCount: number,\n toSegments: readonly PathSegment[],\n startIndex: number,\n ): string[] {\n const parts: string[] = [];\n\n for (let i = 0; i < upCount; i++) {\n parts.push('..');\n }\n\n for (let i = startIndex; i < toSegments.length; i++) {\n const seg = toSegments[i];\n if (seg) {\n if (seg.isProperty()) {\n parts.push(seg.propertyName());\n } else if (seg.isItems() && parts.length > 0) {\n const lastPart = parts.at(-1);\n if (lastPart && lastPart !== '..') {\n parts[parts.length - 1] = lastPart + '[*]';\n }\n }\n }\n }\n\n return parts;\n }\n\n private formatPartsWithArrayNotation(\n parts: string[],\n toSegments: readonly PathSegment[],\n ): string {\n if (parts.length === 0) {\n const lastSeg = toSegments.at(-1);\n if (lastSeg?.isProperty()) {\n return lastSeg.propertyName();\n }\n return '';\n }\n\n if (parts[0] === '..') {\n return parts.join('/');\n }\n\n return parts.join('.');\n }\n}\n","export class FormulaError extends Error {\n constructor(\n message: string,\n public readonly nodeId: string,\n public readonly details?: string,\n ) {\n super(message);\n this.name = 'FormulaError';\n }\n}\n","import { serializeAst, replaceDependencies } from '@revisium/formula';\nimport type { SchemaTree } from '../../schema-tree/index.js';\nimport type { XFormula } from '../../../types/index.js';\nimport type { Formula } from '../core/Formula.js';\nimport { FormulaError } from '../core/FormulaError.js';\nimport { FormulaPathBuilder } from './FormulaPathBuilder.js';\n\nexport interface SerializeOptions {\n readonly strict?: boolean;\n}\n\nexport class FormulaSerializer {\n private readonly pathBuilder = new FormulaPathBuilder();\n\n constructor(\n private readonly tree: SchemaTree,\n private readonly formulaNodeId: string,\n private readonly formula: Formula,\n ) {}\n\n static toXFormula(\n tree: SchemaTree,\n formulaNodeId: string,\n formula: Formula,\n ): XFormula {\n const serializer = new FormulaSerializer(tree, formulaNodeId, formula);\n return {\n version: 1,\n expression: serializer.serialize(),\n };\n }\n\n static serializeExpression(\n tree: SchemaTree,\n formulaNodeId: string,\n formula: Formula,\n options: SerializeOptions = {},\n ): string {\n const serializer = new FormulaSerializer(tree, formulaNodeId, formula);\n return serializer.serialize(options);\n }\n\n serialize(options: SerializeOptions = {}): string {\n const replacements = this.buildPathReplacements(options);\n const updatedAst = replaceDependencies(this.formula.ast(), replacements);\n return serializeAst(updatedAst);\n }\n\n private buildPathReplacements(options: SerializeOptions): Record<string, string> {\n const replacements: Record<string, string> = {};\n const formulaPath = this.tree.pathOf(this.formulaNodeId);\n const strict = options.strict ?? true;\n\n for (const astPath of this.formula.astPaths()) {\n const nodeId = this.formula.getNodeIdForAstPath(astPath);\n if (!nodeId) {\n continue;\n }\n\n const targetNode = this.tree.nodeById(nodeId);\n if (targetNode.isNull()) {\n if (strict) {\n throw new FormulaError(\n `Cannot serialize formula: target node not found`,\n this.formulaNodeId,\n `Target nodeId: ${nodeId}`,\n );\n }\n continue;\n }\n\n const targetPath = this.tree.pathOf(nodeId);\n const newPath = this.pathBuilder.buildWithArrayNotation(\n formulaPath,\n targetPath,\n );\n\n if (this.needsReplacement(astPath, newPath)) {\n replacements[astPath] = newPath;\n }\n }\n\n return replacements;\n }\n\n private needsReplacement(astPath: string, newPath: string): boolean {\n if (astPath === newPath) {\n return false;\n }\n\n const normalizedAstPath = this.normalizeArrayNotation(astPath);\n const normalizedNewPath = this.normalizeArrayNotation(newPath);\n\n return normalizedAstPath !== normalizedNewPath;\n }\n\n private normalizeArrayNotation(path: string): string {\n return path.replaceAll(/\\[\\d+\\]/g, '[*]');\n }\n}\n","import type { SchemaNode, Formula } from '../schema-node/index.js';\nimport type { SchemaTree } from '../schema-tree/index.js';\nimport { FormulaSerializer } from '../schema-formula/serialization/FormulaSerializer.js';\n\nexport interface ComparatorContext {\n currentTree: SchemaTree;\n baseTree: SchemaTree;\n}\n\nexport function areNodesEqual(\n current: SchemaNode,\n base: SchemaNode,\n context: ComparatorContext,\n): boolean {\n if (current.nodeType() !== base.nodeType()) {\n return false;\n }\n\n if (current.name() !== base.name()) {\n return false;\n }\n\n if (!areMetadataEqual(current, base)) {\n return false;\n }\n\n if (current.isPrimitive()) {\n return arePrimitivesEqual(current, base, context);\n }\n\n if (current.isObject()) {\n return areObjectsEqual(current, base, context);\n }\n\n if (current.isArray()) {\n return areArraysEqual(current, base, context);\n }\n\n if (current.isRef()) {\n return current.ref() === base.ref();\n }\n\n return current.isNull() && base.isNull();\n}\n\nexport function areNodesContentEqual(\n current: SchemaNode,\n base: SchemaNode,\n context: ComparatorContext,\n): boolean {\n if (current.nodeType() !== base.nodeType()) {\n return false;\n }\n\n if (!areMetadataEqual(current, base)) {\n return false;\n }\n\n if (current.isPrimitive()) {\n return arePrimitivesEqual(current, base, context);\n }\n\n if (current.isObject()) {\n return areObjectsEqual(current, base, context);\n }\n\n if (current.isArray()) {\n return areArraysEqual(current, base, context);\n }\n\n if (current.isRef()) {\n return current.ref() === base.ref();\n }\n\n return current.isNull() && base.isNull();\n}\n\nfunction areMetadataEqual(current: SchemaNode, base: SchemaNode): boolean {\n const metaCurrent = current.metadata();\n const metaBase = base.metadata();\n\n return (\n metaCurrent.title === metaBase.title &&\n metaCurrent.description === metaBase.description &&\n metaCurrent.deprecated === metaBase.deprecated\n );\n}\n\nfunction arePrimitivesEqual(\n current: SchemaNode,\n base: SchemaNode,\n context: ComparatorContext,\n): boolean {\n if (current.defaultValue() !== base.defaultValue()) {\n return false;\n }\n\n if (current.foreignKey() !== base.foreignKey()) {\n return false;\n }\n\n const currentFormula = current.formula();\n const baseFormula = base.formula();\n\n if (currentFormula === undefined && baseFormula === undefined) {\n return true;\n }\n\n if (currentFormula === undefined || baseFormula === undefined) {\n return false;\n }\n\n return areFormulasEqual(\n currentFormula,\n baseFormula,\n current.id(),\n base.id(),\n context,\n );\n}\n\nfunction areFormulasEqual(\n currentFormula: Formula,\n baseFormula: Formula,\n currentNodeId: string,\n baseNodeId: string,\n context: ComparatorContext,\n): boolean {\n if (currentFormula.version() !== baseFormula.version()) {\n return false;\n }\n\n const currentExpr = getSerializedExpression(\n currentFormula,\n context.currentTree,\n currentNodeId,\n );\n const baseExpr = getSerializedExpression(\n baseFormula,\n context.baseTree,\n baseNodeId,\n );\n\n if (currentExpr === null || baseExpr === null) {\n return false;\n }\n\n return currentExpr === baseExpr;\n}\n\nfunction getSerializedExpression(\n formula: Formula,\n tree: SchemaTree,\n nodeId: string,\n): string | null {\n try {\n return FormulaSerializer.serializeExpression(tree, nodeId, formula, { strict: false });\n } catch {\n return null;\n }\n}\n\nfunction areObjectsEqual(\n current: SchemaNode,\n base: SchemaNode,\n context: ComparatorContext,\n): boolean {\n const propsCurrent = current.properties();\n const propsBase = base.properties();\n\n if (propsCurrent.length !== propsBase.length) {\n return false;\n }\n\n for (const propCurrent of propsCurrent) {\n const propBase = propsBase.find((p) => p.name() === propCurrent.name());\n if (!propBase || !areNodesEqual(propCurrent, propBase, context)) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction areArraysEqual(\n current: SchemaNode,\n base: SchemaNode,\n context: ComparatorContext,\n): boolean {\n if (current.defaultValue() !== base.defaultValue()) {\n return false;\n }\n return areNodesEqual(current.items(), base.items(), context);\n}\n","import type { SchemaNode } from '../schema-node/index.js';\nimport type { SchemaTree } from '../schema-tree/index.js';\nimport type { RawChange } from './types.js';\nimport { NodePathIndex } from './NodePathIndex.js';\nimport {\n areNodesEqual,\n areNodesContentEqual,\n type ComparatorContext,\n} from './SchemaComparator.js';\n\nexport class ChangeCollector {\n private readonly context: ComparatorContext;\n\n constructor(\n private readonly baseTree: SchemaTree,\n private readonly currentTree: SchemaTree,\n private readonly index: NodePathIndex,\n ) {\n this.context = { currentTree, baseTree };\n }\n\n collect(): RawChange[] {\n const changes: RawChange[] = [];\n\n this.collectFromCurrentTree(changes);\n this.collectRemovedNodes(changes);\n\n return changes;\n }\n\n private collectFromCurrentTree(changes: RawChange[]): void {\n for (const nodeId of this.currentTree.nodeIds()) {\n const currentNode = this.currentTree.nodeById(nodeId);\n this.collectNodeChange(changes, nodeId, currentNode);\n }\n }\n\n private collectNodeChange(\n changes: RawChange[],\n nodeId: string,\n currentNode: SchemaNode,\n ): void {\n if (this.index.isReplacement(nodeId)) {\n this.collectReplacementChange(changes, nodeId, currentNode);\n return;\n }\n\n const basePath = this.index.getBasePath(nodeId);\n if (!basePath) {\n changes.push({ type: 'added', baseNode: null, currentNode });\n return;\n }\n\n const currentPath = this.currentTree.pathOf(nodeId);\n const baseNode = this.baseTree.nodeById(nodeId);\n\n if (!basePath.equals(currentPath)) {\n this.collectMovedChange(changes, baseNode, currentNode);\n } else if (!areNodesEqual(currentNode, baseNode, this.context)) {\n changes.push({ type: 'modified', baseNode, currentNode });\n }\n }\n\n private collectReplacementChange(\n changes: RawChange[],\n nodeId: string,\n currentNode: SchemaNode,\n ): void {\n const originalId = this.index.getOriginalNodeId(nodeId);\n if (!originalId) {\n return;\n }\n\n const baseNode = this.baseTree.nodeById(originalId);\n if (baseNode.isNull()) {\n changes.push({ type: 'added', baseNode: null, currentNode });\n } else {\n changes.push({ type: 'modified', baseNode, currentNode });\n }\n }\n\n private collectMovedChange(\n changes: RawChange[],\n baseNode: SchemaNode,\n currentNode: SchemaNode,\n ): void {\n changes.push({ type: 'moved', baseNode, currentNode });\n\n if (!areNodesContentEqual(currentNode, baseNode, this.context)) {\n changes.push({ type: 'modified', baseNode, currentNode });\n }\n }\n\n private collectRemovedNodes(changes: RawChange[]): void {\n for (const nodeId of this.baseTree.nodeIds()) {\n if (this.index.getReplacementNodeId(nodeId)) {\n continue;\n }\n\n const currentNode = this.currentTree.nodeById(nodeId);\n if (currentNode.isNull()) {\n const baseNode = this.baseTree.nodeById(nodeId);\n changes.push({ type: 'removed', baseNode, currentNode: null });\n }\n }\n }\n}\n\nexport function collectChanges(\n baseTree: SchemaTree,\n currentTree: SchemaTree,\n index: NodePathIndex,\n): RawChange[] {\n return new ChangeCollector(baseTree, currentTree, index).collect();\n}\n","import type { SchemaTree } from '../schema-tree/index.js';\nimport type { Path } from '../path/index.js';\nimport type {\n RawChange,\n CoalescedChanges,\n MovedChange,\n AddedChange,\n RemovedChange,\n ModifiedChange,\n} from './types.js';\nimport { NodePathIndex } from './NodePathIndex.js';\n\nexport class ChangeCoalescer {\n constructor(\n private readonly currentTree: SchemaTree,\n private readonly index: NodePathIndex,\n ) {}\n\n coalesce(changes: readonly RawChange[]): CoalescedChanges {\n const moved: MovedChange[] = [];\n const added: AddedChange[] = [];\n const removed: RemovedChange[] = [];\n const modified: ModifiedChange[] = [];\n\n const movedPaths = this.getMovedPaths(changes);\n\n for (const change of changes) {\n if (this.isNestedChange(change, changes, movedPaths)) {\n continue;\n }\n\n switch (change.type) {\n case 'moved':\n moved.push(change);\n break;\n case 'added':\n added.push(change);\n break;\n case 'removed':\n removed.push(change);\n break;\n case 'modified':\n modified.push(change);\n break;\n }\n }\n\n return { moved, added, removed, modified };\n }\n\n private getMovedPaths(changes: readonly RawChange[]): Set<string> {\n const paths = new Set<string>();\n\n for (const change of changes) {\n if (change.type === 'moved') {\n const basePath = this.index.getBasePath(change.baseNode.id());\n if (basePath) {\n paths.add(basePath.asJsonPointer());\n }\n }\n }\n\n return paths;\n }\n\n private isNestedChange(\n change: RawChange,\n allChanges: readonly RawChange[],\n movedPaths: Set<string>,\n ): boolean {\n const path = this.getChangePath(change);\n\n if (this.hasParentChange(change, allChanges, path)) {\n return true;\n }\n\n if (this.isAffectedByMove(change, movedPaths)) {\n return true;\n }\n\n return false;\n }\n\n private getChangePath(change: RawChange): Path {\n if (change.type === 'removed') {\n const basePath = this.index.getBasePath(change.baseNode.id());\n if (!basePath) {\n throw new Error(\n `Base path not found for removed node: ${change.baseNode.id()}`,\n );\n }\n return basePath;\n }\n return this.currentTree.pathOf(change.currentNode.id());\n }\n\n private hasParentChange(\n change: RawChange,\n allChanges: readonly RawChange[],\n path: Path,\n ): boolean {\n for (const other of allChanges) {\n if (other === change) continue;\n\n if (this.shouldSkipParentCandidate(change, other)) {\n continue;\n }\n\n const otherPath = this.getChangePath(other);\n\n if (path.isChildOf(otherPath)) {\n return true;\n }\n }\n\n return false;\n }\n\n private shouldSkipParentCandidate(\n change: RawChange,\n other: RawChange,\n ): boolean {\n if (other.type === 'modified' && !this.isTypeChangeReplacement(other)) {\n return true;\n }\n\n if (change.type === 'moved' && other.type === 'added') {\n return true;\n }\n\n if (change.type === 'moved' && other.type === 'moved') {\n return this.hasIndependentRename(change);\n }\n\n return false;\n }\n\n private isTypeChangeReplacement(change: ModifiedChange): boolean {\n return change.baseNode.nodeType() !== change.currentNode.nodeType();\n }\n\n private hasIndependentRename(change: MovedChange): boolean {\n return change.baseNode.name() !== change.currentNode.name();\n }\n\n private isAffectedByMove(\n change: RawChange,\n movedPaths: Set<string>,\n ): boolean {\n if (change.type !== 'modified') {\n return false;\n }\n\n const basePath = this.index.getBasePath(change.baseNode.id());\n if (!basePath) {\n return false;\n }\n\n for (const movedPath of movedPaths) {\n if (\n basePath.asJsonPointer().startsWith(movedPath + '/') &&\n basePath.asJsonPointer() !== movedPath\n ) {\n return true;\n }\n }\n\n return false;\n }\n}\n\nexport function coalesceChanges(\n changes: readonly RawChange[],\n currentTree: SchemaTree,\n index: NodePathIndex,\n): CoalescedChanges {\n return new ChangeCoalescer(currentTree, index).coalesce(changes);\n}\n","import type { SchemaTree } from '../schema-tree/index.js';\nimport type { RawChange, CoalescedChanges } from './types.js';\nimport { NodePathIndex } from './NodePathIndex.js';\nimport { collectChanges } from './ChangeCollector.js';\nimport { coalesceChanges } from './ChangeCoalescer.js';\n\nexport class SchemaDiff {\n private _baseTree: SchemaTree;\n private readonly _currentTree: SchemaTree;\n private _index: NodePathIndex;\n\n constructor(currentTree: SchemaTree) {\n this._currentTree = currentTree;\n this._baseTree = currentTree.clone();\n this._index = new NodePathIndex(this._baseTree);\n }\n\n get baseTree(): SchemaTree {\n return this._baseTree;\n }\n\n get currentTree(): SchemaTree {\n return this._currentTree;\n }\n\n get index(): NodePathIndex {\n return this._index;\n }\n\n isDirty(): boolean {\n const changes = this.collectChanges();\n return changes.length > 0;\n }\n\n collectChanges(): RawChange[] {\n return collectChanges(this._baseTree, this._currentTree, this._index);\n }\n\n coalesceChanges(changes?: readonly RawChange[]): CoalescedChanges {\n const rawChanges = changes ?? this.collectChanges();\n return coalesceChanges(rawChanges, this._currentTree, this._index);\n }\n\n trackReplacement(oldNodeId: string, newNodeId: string): void {\n this._index.trackReplacement(oldNodeId, newNodeId);\n }\n\n markAsSaved(): void {\n this._baseTree = this._currentTree.clone();\n this._index = new NodePathIndex(this._baseTree);\n }\n}\n","export interface FormulaDependency {\n targetNodeId(): string;\n}\n\nexport class ResolvedDependency implements FormulaDependency {\n constructor(private readonly nodeId: string) {\n if (!nodeId) {\n throw new Error('ResolvedDependency requires a non-empty nodeId');\n }\n }\n\n targetNodeId(): string {\n return this.nodeId;\n }\n}\n","import type { SchemaNode, Formula } from '../schema-node/index.js';\nimport type { SchemaTree } from '../schema-tree/index.js';\nimport type { SerializeOptions } from './types.js';\nimport type {\n JsonSchema,\n JsonObjectSchema,\n JsonArraySchema,\n JsonStringSchema,\n JsonNumberSchema,\n JsonBooleanSchema,\n JsonRefSchema,\n XFormula,\n} from '../../types/index.js';\nimport { JsonSchemaTypeName } from '../../types/index.js';\nimport { FormulaSerializer } from '../schema-formula/index.js';\n\nexport class SchemaSerializer {\n private tree: SchemaTree | null = null;\n private excludeNodeIds: Set<string> = new Set();\n\n serializeNode(\n node: SchemaNode,\n tree: SchemaTree,\n options?: SerializeOptions,\n ): JsonSchema {\n this.tree = tree;\n this.excludeNodeIds = options?.excludeNodeIds ?? new Set();\n try {\n return this.serialize(node);\n } finally {\n this.tree = null;\n this.excludeNodeIds = new Set();\n }\n }\n\n serializeTree(tree: SchemaTree): JsonObjectSchema {\n return this.serializeNode(tree.root(), tree) as JsonObjectSchema;\n }\n\n private serialize(node: SchemaNode): JsonSchema {\n if (node.isNull()) {\n throw new Error('Cannot serialize null node');\n }\n\n const ref = node.ref();\n if (ref) {\n return this.serializeRef(node, ref);\n }\n\n if (node.isObject()) {\n return this.serializeObject(node);\n }\n\n if (node.isArray()) {\n return this.serializeArray(node);\n }\n\n return this.serializePrimitive(node);\n }\n\n private serializeObject(node: SchemaNode): JsonObjectSchema {\n const properties: Record<string, JsonSchema> = {};\n const required: string[] = [];\n\n for (const child of node.properties()) {\n if (this.shouldExclude(child)) {\n continue;\n }\n properties[child.name()] = this.serialize(child);\n required.push(child.name());\n }\n\n const result: JsonObjectSchema = {\n type: JsonSchemaTypeName.Object,\n properties,\n additionalProperties: false,\n required,\n };\n\n return this.addMetadata(result, node);\n }\n\n private serializeArray(node: SchemaNode): JsonArraySchema {\n const items = node.items();\n if (items.isNull()) {\n throw new Error('Array node must have items');\n }\n\n const result: JsonArraySchema = {\n type: JsonSchemaTypeName.Array,\n items: this.serialize(items),\n };\n\n return this.addMetadata(result, node);\n }\n\n private serializeRef(node: SchemaNode, ref: string): JsonRefSchema {\n const result: JsonRefSchema = {\n $ref: ref,\n };\n\n return this.addMetadata(result, node);\n }\n\n private serializePrimitive(node: SchemaNode): JsonSchema {\n const nodeType = node.nodeType();\n\n switch (nodeType) {\n case 'string':\n return this.serializeString(node);\n case 'number':\n return this.serializeNumber(node);\n case 'boolean':\n return this.serializeBoolean(node);\n default:\n throw new Error(`Unknown primitive type: ${nodeType}`);\n }\n }\n\n private serializeString(node: SchemaNode): JsonStringSchema {\n const result: JsonStringSchema = {\n type: JsonSchemaTypeName.String,\n default: (node.defaultValue() as string) ?? '',\n };\n\n const foreignKey = node.foreignKey();\n if (foreignKey) {\n result.foreignKey = foreignKey;\n }\n\n const contentMediaType = node.contentMediaType();\n if (contentMediaType && this.isValidContentMediaType(contentMediaType)) {\n result.contentMediaType = contentMediaType;\n }\n\n const formula = node.formula();\n if (formula) {\n result.readOnly = true;\n result['x-formula'] = this.serializeFormula(node, formula);\n }\n\n return this.addMetadata(result, node);\n }\n\n private serializeNumber(node: SchemaNode): JsonNumberSchema {\n const result: JsonNumberSchema = {\n type: JsonSchemaTypeName.Number,\n default: (node.defaultValue() as number) ?? 0,\n };\n\n const formula = node.formula();\n if (formula) {\n result.readOnly = true;\n result['x-formula'] = this.serializeFormula(node, formula);\n }\n\n return this.addMetadata(result, node);\n }\n\n private serializeBoolean(node: SchemaNode): JsonBooleanSchema {\n const result: JsonBooleanSchema = {\n type: JsonSchemaTypeName.Boolean,\n default: (node.defaultValue() as boolean) ?? false,\n };\n\n const formula = node.formula();\n if (formula) {\n result.readOnly = true;\n result['x-formula'] = this.serializeFormula(node, formula);\n }\n\n return this.addMetadata(result, node);\n }\n\n private serializeFormula(node: SchemaNode, formula: Formula): XFormula {\n if (!this.tree) {\n throw new Error(\n 'Cannot serialize formula without tree context. Use serializeNode with tree.',\n );\n }\n\n try {\n return FormulaSerializer.toXFormula(this.tree, node.id(), formula);\n } catch {\n return { version: 1, expression: '' };\n }\n }\n\n private addMetadata<T extends JsonSchema>(schema: T, node: SchemaNode): T {\n const meta = node.metadata();\n\n if (meta.title) {\n (schema as JsonSchema & { title?: string }).title = meta.title;\n }\n if (meta.description) {\n (schema as JsonSchema & { description?: string }).description =\n meta.description;\n }\n if (meta.deprecated) {\n (schema as JsonSchema & { deprecated?: boolean }).deprecated =\n meta.deprecated;\n }\n\n return schema;\n }\n\n private shouldExclude(node: SchemaNode): boolean {\n return this.excludeNodeIds.has(node.id());\n }\n\n private isValidContentMediaType(\n value: string,\n ): value is NonNullable<JsonStringSchema['contentMediaType']> {\n const validTypes = [\n 'text/plain',\n 'text/markdown',\n 'text/html',\n 'application/json',\n 'application/schema+json',\n 'application/yaml',\n ];\n return validTypes.includes(value);\n }\n}\n","import type { SchemaNode } from '../schema-node/index.js';\nimport type { SchemaTree } from '../schema-tree/index.js';\nimport type { Path } from '../path/index.js';\nimport { jsonPointerToPath } from '../path/index.js';\nimport { SchemaSerializer } from '../schema-serializer/index.js';\nimport {\n areNodesContentEqual,\n type ComparatorContext,\n} from '../schema-diff/index.js';\nimport type {\n CoalescedChanges,\n MovedChange,\n AddedChange,\n RemovedChange,\n ModifiedChange,\n} from '../schema-diff/index.js';\nimport type { JsonPatchMove } from '../../types/index.js';\nimport type { JsonPatch } from './types.js';\n\nexport class PatchGenerator {\n private readonly serializer = new SchemaSerializer();\n private readonly context: ComparatorContext;\n\n constructor(\n private readonly currentTree: SchemaTree,\n private readonly baseTree: SchemaTree,\n ) {\n this.context = { currentTree, baseTree };\n }\n\n generate(coalesced: CoalescedChanges): JsonPatch[] {\n const movedNodeIds = this.collectMovedNodeIds(coalesced.moved);\n const movePatches = this.generateMovePatches(coalesced.moved);\n const addPatches = this.generateAddPatches(coalesced.added, movedNodeIds);\n const removePatches = this.generateRemovePatches(coalesced.removed);\n\n const { prerequisiteAdds, regularAdds } = this.partitionAddPatches(\n addPatches,\n movePatches,\n );\n\n const childChangePaths = new Set([\n ...addPatches.map((p) => p.path),\n ...removePatches.map((p) => p.path),\n ...movePatches.flatMap((p) => [p.path, (p as JsonPatchMove).from]).filter(Boolean),\n ]);\n\n const replacePatches = this.generateReplacePatches(\n coalesced.modified,\n childChangePaths,\n movedNodeIds,\n );\n\n return [\n ...prerequisiteAdds,\n ...movePatches,\n ...replacePatches,\n ...regularAdds,\n ...removePatches,\n ];\n }\n\n private collectMovedNodeIds(moved: readonly MovedChange[]): Set<string> {\n const nodeIds = new Set<string>();\n for (const change of moved) {\n nodeIds.add(change.currentNode.id());\n }\n return nodeIds;\n }\n\n private partitionAddPatches(\n addPatches: JsonPatch[],\n movePatches: JsonPatch[],\n ): { prerequisiteAdds: JsonPatch[]; regularAdds: JsonPatch[] } {\n const moveDestinations = movePatches.map((p) => jsonPointerToPath(p.path));\n\n const prerequisiteAdds: JsonPatch[] = [];\n const regularAdds: JsonPatch[] = [];\n\n for (const addPatch of addPatches) {\n const addPath = jsonPointerToPath(addPatch.path);\n const isPrerequisite = moveDestinations.some((moveDest) =>\n moveDest.isChildOf(addPath),\n );\n\n if (isPrerequisite) {\n prerequisiteAdds.push(addPatch);\n } else {\n regularAdds.push(addPatch);\n }\n }\n\n return { prerequisiteAdds, regularAdds };\n }\n\n private generateMovePatches(moved: readonly MovedChange[]): JsonPatch[] {\n const movedNodeIds = this.collectMovedNodeIds(moved);\n const sorted = this.sortMovesParentFirst(moved);\n const patches: JsonPatch[] = [];\n const appliedMoves: Array<{ from: string; to: string }> = [];\n\n for (const change of sorted) {\n const basePath = this.baseTree.pathOf(change.baseNode.id());\n const currentPath = this.currentTree.pathOf(change.currentNode.id());\n const adjustedFrom = this.adjustFromPath(\n basePath.asJsonPointer(),\n appliedMoves,\n );\n\n patches.push({\n op: 'move',\n from: adjustedFrom,\n path: currentPath.asJsonPointer(),\n });\n\n appliedMoves.push({\n from: adjustedFrom,\n to: currentPath.asJsonPointer(),\n });\n\n const modifyPatch = this.generateModifyAfterMove(\n change.baseNode,\n change.currentNode,\n currentPath.asJsonPointer(),\n movedNodeIds,\n );\n if (modifyPatch) {\n patches.push(modifyPatch);\n }\n }\n\n return patches;\n }\n\n private sortMovesParentFirst(\n moved: readonly MovedChange[],\n ): readonly MovedChange[] {\n return [...moved].sort((a, b) => {\n const pathA = this.baseTree.pathOf(a.baseNode.id()).asJsonPointer();\n const pathB = this.baseTree.pathOf(b.baseNode.id()).asJsonPointer();\n return pathA.length - pathB.length;\n });\n }\n\n private adjustFromPath(\n fromPath: string,\n appliedMoves: ReadonlyArray<{ from: string; to: string }>,\n ): string {\n let adjusted = fromPath;\n for (const move of appliedMoves) {\n if (adjusted.startsWith(move.from + '/')) {\n adjusted = move.to + adjusted.slice(move.from.length);\n }\n }\n return adjusted;\n }\n\n private generateModifyAfterMove(\n baseNode: SchemaNode,\n currentNode: SchemaNode,\n currentPath: string,\n siblingMovedIds: Set<string>,\n ): JsonPatch | null {\n if (areNodesContentEqual(currentNode, baseNode, this.context)) {\n return null;\n }\n\n if (this.isDifferenceExplainedByMoves(currentNode, baseNode, siblingMovedIds)) {\n return null;\n }\n\n const currentSchema = this.serializer.serializeNode(\n currentNode,\n this.currentTree,\n );\n\n return {\n op: 'replace',\n path: currentPath,\n value: currentSchema,\n };\n }\n\n private isDifferenceExplainedByMoves(\n currentNode: SchemaNode,\n baseNode: SchemaNode,\n movedIds: Set<string>,\n ): boolean {\n if (!currentNode.isObject() || !baseNode.isObject()) {\n return false;\n }\n\n const currentProps = currentNode.properties();\n const baseProps = baseNode.properties();\n\n if (currentProps.length !== baseProps.length) {\n return false;\n }\n\n for (const prop of currentProps) {\n const matchByName = baseProps.find((b) => b.name() === prop.name());\n if (matchByName) {\n if (!this.areNodesEqualAccountingMoves(prop, matchByName, movedIds)) {\n return false;\n }\n continue;\n }\n\n if (!movedIds.has(prop.id())) {\n return false;\n }\n\n const matchById = baseProps.find((b) => b.id() === prop.id());\n if (!matchById) {\n return false;\n }\n\n if (!this.areNodesEqualAccountingMoves(prop, matchById, movedIds)) {\n return false;\n }\n }\n\n return true;\n }\n\n private areNodesEqualAccountingMoves(\n currentNode: SchemaNode,\n baseNode: SchemaNode,\n movedIds: Set<string>,\n ): boolean {\n if (areNodesContentEqual(currentNode, baseNode, this.context)) {\n return true;\n }\n\n return this.isDifferenceExplainedByMoves(currentNode, baseNode, movedIds);\n }\n\n private generateAddPatches(\n added: readonly AddedChange[],\n movedNodeIds: Set<string>,\n ): JsonPatch[] {\n const patches: JsonPatch[] = [];\n\n for (const change of added) {\n const currentPath = this.currentTree.pathOf(change.currentNode.id());\n const schema = this.serializer.serializeNode(\n change.currentNode,\n this.currentTree,\n { excludeNodeIds: movedNodeIds },\n );\n patches.push({\n op: 'add',\n path: currentPath.asJsonPointer(),\n value: schema,\n });\n }\n\n return patches;\n }\n\n private generateRemovePatches(removed: readonly RemovedChange[]): JsonPatch[] {\n const patches: JsonPatch[] = [];\n\n for (const change of removed) {\n const basePath = this.baseTree.pathOf(change.baseNode.id());\n patches.push({\n op: 'remove',\n path: basePath.asJsonPointer(),\n });\n }\n\n return patches;\n }\n\n private generateReplacePatches(\n modified: readonly ModifiedChange[],\n childChangePaths: Set<string>,\n movedNodeIds: Set<string>,\n ): JsonPatch[] {\n const patches: JsonPatch[] = [];\n const replacedPaths: Path[] = [];\n const childChangePathObjects = [...childChangePaths].map(jsonPointerToPath);\n\n for (const change of modified) {\n if (movedNodeIds.has(change.currentNode.id())) {\n continue;\n }\n\n const currentPath = this.currentTree.pathOf(change.currentNode.id());\n\n if (this.isChildOfAny(currentPath, replacedPaths)) {\n continue;\n }\n\n if (this.hasChildIn(currentPath, childChangePathObjects)) {\n continue;\n }\n\n if (!this.isActuallyModified(change)) {\n continue;\n }\n\n if (change.currentNode.isArray()) {\n const arrayPatches = this.generateArrayReplacePatches(\n change.currentNode,\n change.baseNode,\n currentPath,\n );\n patches.push(...arrayPatches);\n replacedPaths.push(currentPath);\n continue;\n }\n\n const schema = this.serializer.serializeNode(\n change.currentNode,\n this.currentTree,\n );\n patches.push({\n op: 'replace',\n path: currentPath.asJsonPointer(),\n value: schema,\n });\n replacedPaths.push(currentPath);\n }\n\n return patches;\n }\n\n private generateArrayReplacePatches(\n currentNode: SchemaNode,\n baseNode: SchemaNode,\n currentPath: Path,\n ): JsonPatch[] {\n if (!baseNode.isArray()) {\n const schema = this.serializer.serializeNode(\n currentNode,\n this.currentTree,\n );\n return [\n {\n op: 'replace',\n path: currentPath.asJsonPointer(),\n value: schema,\n },\n ];\n }\n\n const patches: JsonPatch[] = [];\n const metadataChanged = this.hasMetadataChanged(currentNode, baseNode);\n const itemsChanged = this.hasItemsChanged(currentNode, baseNode);\n\n if (metadataChanged) {\n const schema = this.serializer.serializeNode(\n currentNode,\n this.currentTree,\n );\n patches.push({\n op: 'replace',\n path: currentPath.asJsonPointer(),\n value: schema,\n });\n }\n\n if (itemsChanged) {\n const items = currentNode.items();\n const itemsPath = currentPath.childItems();\n const itemsSchema = this.serializer.serializeNode(\n items,\n this.currentTree,\n );\n patches.push({\n op: 'replace',\n path: itemsPath.asJsonPointer(),\n value: itemsSchema,\n });\n }\n\n return patches;\n }\n\n private hasItemsChanged(\n currentNode: SchemaNode,\n baseNode: SchemaNode,\n ): boolean {\n const items = currentNode.items();\n const baseItems = baseNode.items();\n\n const currentItemsSchema = this.serializer.serializeNode(\n items,\n this.currentTree,\n );\n const baseItemsSchema = this.serializer.serializeNode(\n baseItems,\n this.baseTree,\n );\n\n return JSON.stringify(currentItemsSchema) !== JSON.stringify(baseItemsSchema);\n }\n\n private isChildOfAny(path: Path, parents: Path[]): boolean {\n return parents.some((parent) => path.isChildOf(parent));\n }\n\n private hasChildIn(path: Path, candidates: Path[]): boolean {\n return candidates.some((candidate) => candidate.isChildOf(path));\n }\n\n private isActuallyModified(change: ModifiedChange): boolean {\n const currentSchema = this.serializer.serializeNode(\n change.currentNode,\n this.currentTree,\n );\n const baseSchema = this.serializer.serializeNode(\n change.baseNode,\n this.baseTree,\n );\n\n if (JSON.stringify(currentSchema) === JSON.stringify(baseSchema)) {\n return false;\n }\n\n if (\n change.currentNode.isObject() &&\n this.hasOnlyChildChanges(change.currentNode, change.baseNode)\n ) {\n return false;\n }\n\n if (\n change.currentNode.isArray() &&\n this.hasOnlyItemsChanges(change.currentNode, change.baseNode)\n ) {\n return false;\n }\n\n return true;\n }\n\n private hasOnlyChildChanges(\n currentNode: SchemaNode,\n baseNode: SchemaNode,\n ): boolean {\n if (!baseNode.isObject()) {\n return false;\n }\n\n if (this.hasMetadataChanged(currentNode, baseNode)) {\n return false;\n }\n\n return true;\n }\n\n private hasMetadataChanged(\n currentNode: SchemaNode,\n baseNode: SchemaNode,\n ): boolean {\n const currentMeta = currentNode.metadata();\n const baseMeta = baseNode.metadata();\n\n return (\n currentMeta.title !== baseMeta.title ||\n currentMeta.description !== baseMeta.description ||\n currentMeta.deprecated !== baseMeta.deprecated\n );\n }\n\n private hasOnlyItemsChanges(\n currentNode: SchemaNode,\n baseNode: SchemaNode,\n ): boolean {\n if (!baseNode.isArray()) {\n return false;\n }\n\n if (this.hasMetadataChanged(currentNode, baseNode)) {\n return false;\n }\n\n const items = currentNode.items();\n const baseItems = baseNode.items();\n\n return items.id() === baseItems.id();\n }\n\n}\n","import type { SchemaNode } from '../schema-node/index.js';\nimport type { SchemaTree } from '../schema-tree/index.js';\nimport type { Path } from '../path/index.js';\nimport { jsonPointerToPath } from '../path/index.js';\nimport { FormulaSerializer } from '../schema-formula/serialization/FormulaSerializer.js';\nimport type { JsonPatchMove } from '../../types/index.js';\nimport type { DefaultValueType, JsonPatch, PropertyChange, PropertyName, SchemaPatch } from './types.js';\n\ninterface PropertyExtractor {\n property: PropertyName;\n extract: (node: SchemaNode | null, tree: SchemaTree) => unknown;\n compare?: (from: unknown, to: unknown) => boolean;\n}\n\nfunction isPrimitiveDefault(value: unknown): value is string | number | boolean {\n const type = typeof value;\n return type === 'string' || type === 'number' || type === 'boolean';\n}\n\nexport class PatchEnricher {\n private readonly extractors: PropertyExtractor[];\n\n constructor(\n private readonly currentTree: SchemaTree,\n private readonly baseTree: SchemaTree,\n ) {\n this.extractors = this.buildExtractors();\n }\n\n enrich(patch: JsonPatch): SchemaPatch {\n const fieldName = this.getFieldNameFromPath(patch.path);\n\n if (patch.op === 'add') {\n return this.enrichAddPatch(patch, fieldName);\n }\n\n if (patch.op === 'remove') {\n return this.enrichRemovePatch(patch, fieldName);\n }\n\n if (patch.op === 'move') {\n return this.enrichMovePatch(patch, fieldName);\n }\n\n return this.enrichReplacePatch(patch, fieldName);\n }\n\n private enrichAddPatch(patch: JsonPatch, fieldName: string): SchemaPatch {\n const currentNode = this.getNodeAtPath(this.currentTree, patch.path);\n\n if (!currentNode) {\n return { patch, fieldName, propertyChanges: [] };\n }\n\n const propertyChanges = this.computeAddPropertyChanges(currentNode);\n return { patch, fieldName, propertyChanges };\n }\n\n private enrichRemovePatch(patch: JsonPatch, fieldName: string): SchemaPatch {\n return { patch, fieldName, propertyChanges: [] };\n }\n\n private enrichMovePatch(patch: JsonPatchMove, fieldName: string): SchemaPatch {\n const fromPath = patch.from;\n const isRename = this.isRenameMove(fromPath, patch.path);\n const movesIntoArray = this.movesIntoArrayBoundary(fromPath, patch.path);\n\n const baseNode = this.getNodeAtPath(this.baseTree, fromPath);\n const currentNode = this.getNodeAtPath(this.currentTree, patch.path);\n\n const propertyChanges = this.computePropertyChanges(baseNode, currentNode);\n\n return {\n patch,\n fieldName,\n propertyChanges,\n isRename: isRename || undefined,\n movesIntoArray: movesIntoArray || undefined,\n };\n }\n\n private enrichReplacePatch(patch: JsonPatch, fieldName: string): SchemaPatch {\n const baseNode = this.getNodeAtPath(this.baseTree, patch.path);\n const currentNode = this.getNodeAtPath(this.currentTree, patch.path);\n\n const isArrayMetadataPatch = baseNode?.isArray() && currentNode?.isArray();\n\n const skipProperties: PropertyName[] = isArrayMetadataPatch ? ['default'] : [];\n\n const propertyChanges = this.computePropertyChanges(\n baseNode,\n currentNode,\n { skipProperties },\n );\n\n return {\n patch,\n fieldName,\n propertyChanges,\n typeChange: this.computeTypeChange(baseNode, currentNode, isArrayMetadataPatch),\n };\n }\n\n private buildExtractors(): PropertyExtractor[] {\n return [\n {\n property: 'formula',\n extract: (node, tree) => {\n const formula = node?.formula();\n if (!formula || !node) {\n return undefined;\n }\n try {\n return FormulaSerializer.serializeExpression(tree, node.id(), formula, { strict: false });\n } catch {\n return undefined;\n }\n },\n compare: (from, to) => from === to,\n },\n {\n property: 'default',\n extract: (node) => {\n const value = node?.defaultValue();\n return isPrimitiveDefault(value) ? value as DefaultValueType : undefined;\n },\n },\n {\n property: 'description',\n extract: (node) => node?.metadata().description,\n },\n {\n property: 'deprecated',\n extract: (node) => node?.metadata().deprecated,\n },\n {\n property: 'foreignKey',\n extract: (node) => node?.foreignKey(),\n },\n {\n property: 'contentMediaType',\n extract: (node) => node?.contentMediaType(),\n },\n {\n property: 'ref',\n extract: (node) => node?.ref(),\n },\n {\n property: 'title',\n extract: (node) => node?.metadata().title,\n },\n ];\n }\n\n private computePropertyChanges(\n baseNode: SchemaNode | null,\n currentNode: SchemaNode | null,\n options?: { skipProperties?: PropertyName[] },\n ): PropertyChange[] {\n const skipSet = options?.skipProperties;\n const result: PropertyChange[] = [];\n\n for (const extractor of this.extractors) {\n if (skipSet?.includes(extractor.property)) {\n continue;\n }\n\n const from = extractor.extract(baseNode, this.baseTree);\n const to = extractor.extract(currentNode, this.currentTree);\n\n const areEqual = extractor.compare\n ? extractor.compare(from, to)\n : from === to;\n\n if (!areEqual) {\n result.push({ property: extractor.property, from, to });\n }\n }\n\n return result;\n }\n\n private computeAddPropertyChanges(node: SchemaNode): PropertyChange[] {\n const allChanges = this.computePropertyChanges(null, node);\n return allChanges.filter((change) => change.to !== undefined);\n }\n\n private computeTypeChange(\n baseNode: SchemaNode | null,\n currentNode: SchemaNode | null,\n ignoreItems?: boolean,\n ): SchemaPatch['typeChange'] {\n if (!baseNode || !currentNode) {\n return undefined;\n }\n\n const baseType = this.getNodeType(baseNode);\n const currentType = this.getNodeType(currentNode);\n\n if (ignoreItems) {\n const baseBaseType = baseNode.nodeType();\n const currentBaseType = currentNode.nodeType();\n if (baseBaseType === currentBaseType) {\n return undefined;\n }\n }\n\n if (baseType !== currentType) {\n return { fromType: baseType, toType: currentType };\n }\n\n return undefined;\n }\n\n private getNodeType(node: SchemaNode): string {\n if (node.isArray()) {\n const items = node.items();\n return `array<${this.getNodeType(items)}>`;\n }\n return node.nodeType();\n }\n\n private getFieldNameFromPath(jsonPointer: string): string {\n try {\n return jsonPointerToPath(jsonPointer).asSimple();\n } catch {\n return '';\n }\n }\n\n private isRenameMove(fromPointer: string, toPointer: string): boolean {\n try {\n const fromParent = jsonPointerToPath(fromPointer).parent();\n const toParent = jsonPointerToPath(toPointer).parent();\n return fromParent.equals(toParent);\n } catch {\n return false;\n }\n }\n\n private movesIntoArrayBoundary(\n fromPointer: string,\n toPointer: string,\n ): boolean {\n try {\n const fromPath = jsonPointerToPath(fromPointer);\n const toPath = jsonPointerToPath(toPointer);\n const fromArrayDepth = this.countArrayDepth(fromPath);\n const toArrayDepth = this.countArrayDepth(toPath);\n return toArrayDepth > fromArrayDepth;\n } catch {\n return false;\n }\n }\n\n private countArrayDepth(path: Path): number {\n return path.segments().filter((seg) => seg.isItems()).length;\n }\n\n private getNodeAtPath(\n tree: SchemaTree,\n jsonPointer: string,\n ): SchemaNode | null {\n try {\n const path = jsonPointerToPath(jsonPointer);\n const node = tree.nodeAt(path);\n return node.isNull() ? null : node;\n } catch {\n return null;\n }\n }\n}\n","import type { SchemaTree } from '../schema-tree/index.js';\nimport {\n NodePathIndex,\n collectChanges,\n coalesceChanges,\n} from '../schema-diff/index.js';\nimport { PatchGenerator } from './PatchGenerator.js';\nimport { PatchEnricher } from './PatchEnricher.js';\nimport type { SchemaPatch } from './types.js';\n\nexport class PatchBuilder {\n build(currentTree: SchemaTree, baseTree: SchemaTree): SchemaPatch[] {\n const index = new NodePathIndex(baseTree);\n this.syncReplacements(currentTree, index);\n\n const rawChanges = collectChanges(baseTree, currentTree, index);\n const coalesced = coalesceChanges(rawChanges, currentTree, index);\n\n const generator = new PatchGenerator(currentTree, baseTree);\n const patches = generator.generate(coalesced);\n\n const enricher = new PatchEnricher(currentTree, baseTree);\n return patches.map((patch) => enricher.enrich(patch));\n }\n\n private syncReplacements(tree: SchemaTree, index: NodePathIndex): void {\n for (const [oldId, newId] of tree.replacements()) {\n index.trackReplacement(oldId, newId);\n }\n }\n}\n","import type { Validator, ValidatorFactoryFn, ValidatorRule } from './types.js';\n\nexport class ValidatorRegistry {\n private readonly validators = new Map<string, ValidatorFactoryFn>();\n private readonly rules: ValidatorRule[] = [];\n\n register(type: string, factory: ValidatorFactoryFn): this {\n this.validators.set(type, factory);\n return this;\n }\n\n addRule(rule: ValidatorRule): this {\n this.rules.push(rule);\n return this;\n }\n\n get(type: string): Validator | undefined {\n const factory = this.validators.get(type);\n return factory ? factory() : undefined;\n }\n\n has(type: string): boolean {\n return this.validators.has(type);\n }\n\n getRules(): readonly ValidatorRule[] {\n return this.rules;\n }\n\n getValidatorTypes(): string[] {\n return Array.from(this.validators.keys());\n }\n}\n","import type { Validator, ValidationContext } from './types.js';\nimport type { ValidatorRegistry } from './ValidatorRegistry.js';\n\nexport class ValidatorResolver {\n constructor(private readonly registry: ValidatorRegistry) {}\n\n resolve(context: ValidationContext): Validator[] {\n const validators: Validator[] = [];\n const rules = this.registry.getRules();\n\n for (const rule of rules) {\n if (rule.shouldApply(context)) {\n const validator = this.registry.get(rule.validatorType);\n if (validator) {\n validators.push(validator);\n }\n }\n }\n\n return validators;\n }\n}\n","import type { Diagnostic, ValidationContext } from './types.js';\nimport type { ValidatorResolver } from './ValidatorResolver.js';\n\nexport class ValidationEngine {\n constructor(private readonly resolver: ValidatorResolver) {}\n\n validate(context: ValidationContext): readonly Diagnostic[] {\n const validators = this.resolver.resolve(context);\n const diagnostics: Diagnostic[] = [];\n\n for (const validator of validators) {\n const diagnostic = validator.validate(context);\n if (diagnostic) {\n diagnostics.push(diagnostic);\n }\n }\n\n return diagnostics;\n }\n}\n","import type { ValidatorRule, ValidationContext, SchemaLike } from '../types.js';\n\nexport class SchemaPropertyRule implements ValidatorRule {\n constructor(\n readonly validatorType: string,\n private readonly propertyName: keyof SchemaLike,\n ) {}\n\n shouldApply(context: ValidationContext): boolean {\n const value = context.schema[this.propertyName];\n return value !== undefined && value !== null;\n }\n}\n\nexport class SchemaTruthyRule implements ValidatorRule {\n constructor(\n readonly validatorType: string,\n private readonly propertyName: keyof SchemaLike,\n ) {}\n\n shouldApply(context: ValidationContext): boolean {\n return context.schema[this.propertyName] === true;\n }\n}\n\nexport class CompositeRule implements ValidatorRule {\n constructor(\n readonly validatorType: string,\n private readonly conditions: Array<(context: ValidationContext) => boolean>,\n ) {}\n\n shouldApply(context: ValidationContext): boolean {\n return this.conditions.every((condition) => condition(context));\n }\n}\n","import type { Diagnostic, Validator, ValidationContext } from '../types.js';\n\nexport class RequiredValidator implements Validator {\n readonly type = 'required';\n\n validate(context: ValidationContext): Diagnostic | null {\n const { value, nodeName } = context;\n\n if (value === '' || value === null || value === undefined) {\n return {\n severity: 'error',\n type: this.type,\n message: 'Field is required',\n path: nodeName,\n };\n }\n\n return null;\n }\n}\n","import type { Diagnostic, Validator, ValidationContext } from '../types.js';\n\nexport class PatternValidator implements Validator {\n readonly type = 'pattern';\n\n validate(context: ValidationContext): Diagnostic | null {\n const { value, schema, nodeName } = context;\n const pattern = schema.pattern;\n\n if (!pattern) {\n return null;\n }\n\n if (typeof value !== 'string') {\n return null;\n }\n\n if (value.length === 0) {\n return null;\n }\n\n try {\n if (!new RegExp(pattern).test(value)) {\n return {\n severity: 'error',\n type: this.type,\n message: 'Value does not match pattern',\n path: nodeName,\n params: { pattern },\n };\n }\n } catch {\n return {\n severity: 'error',\n type: 'invalidPattern',\n message: 'Invalid regex pattern in schema',\n path: nodeName,\n params: { pattern },\n };\n }\n\n return null;\n }\n}\n","import type { Diagnostic, Validator, ValidationContext } from '../types.js';\n\nexport class MinLengthValidator implements Validator {\n readonly type = 'minLength';\n\n validate(context: ValidationContext): Diagnostic | null {\n const { value, schema, nodeName } = context;\n const minLength = schema.minLength;\n\n if (minLength === undefined) {\n return null;\n }\n\n if (typeof value !== 'string') {\n return null;\n }\n\n if (value.length < minLength) {\n return {\n severity: 'error',\n type: this.type,\n message: `Value must be at least ${minLength} characters`,\n path: nodeName,\n params: { min: minLength, actual: value.length },\n };\n }\n\n return null;\n }\n}\n","import type { Diagnostic, Validator, ValidationContext } from '../types.js';\n\nexport class MaxLengthValidator implements Validator {\n readonly type = 'maxLength';\n\n validate(context: ValidationContext): Diagnostic | null {\n const { value, schema, nodeName } = context;\n const maxLength = schema.maxLength;\n\n if (maxLength === undefined) {\n return null;\n }\n\n if (typeof value !== 'string') {\n return null;\n }\n\n if (value.length > maxLength) {\n return {\n severity: 'error',\n type: this.type,\n message: `Value must be at most ${maxLength} characters`,\n path: nodeName,\n params: { max: maxLength, actual: value.length },\n };\n }\n\n return null;\n }\n}\n","import type { Diagnostic, Validator, ValidationContext } from '../types.js';\n\nexport class MinimumValidator implements Validator {\n readonly type = 'minimum';\n\n validate(context: ValidationContext): Diagnostic | null {\n const { value, schema, nodeName } = context;\n const minimum = schema.minimum;\n\n if (minimum === undefined) {\n return null;\n }\n\n if (typeof value !== 'number') {\n return null;\n }\n\n if (value < minimum) {\n return {\n severity: 'error',\n type: this.type,\n message: `Value must be at least ${minimum}`,\n path: nodeName,\n params: { min: minimum, actual: value },\n };\n }\n\n return null;\n }\n}\n","import type { Diagnostic, Validator, ValidationContext } from '../types.js';\n\nexport class MaximumValidator implements Validator {\n readonly type = 'maximum';\n\n validate(context: ValidationContext): Diagnostic | null {\n const { value, schema, nodeName } = context;\n const maximum = schema.maximum;\n\n if (maximum === undefined) {\n return null;\n }\n\n if (typeof value !== 'number') {\n return null;\n }\n\n if (value > maximum) {\n return {\n severity: 'error',\n type: this.type,\n message: `Value must be at most ${maximum}`,\n path: nodeName,\n params: { max: maximum, actual: value },\n };\n }\n\n return null;\n }\n}\n","import type { Diagnostic, Validator, ValidationContext } from '../types.js';\n\nexport class EnumValidator implements Validator {\n readonly type = 'enum';\n\n validate(context: ValidationContext): Diagnostic | null {\n const { value, schema, nodeName } = context;\n const enumValues = schema.enum;\n\n if (!enumValues || enumValues.length === 0) {\n return null;\n }\n\n if (!(enumValues as readonly unknown[]).includes(value)) {\n return {\n severity: 'error',\n type: this.type,\n message: 'Value must be one of the allowed values',\n path: nodeName,\n params: { allowed: [...enumValues], actual: value },\n };\n }\n\n return null;\n }\n}\n","import type { Diagnostic, Validator, ValidationContext } from '../types.js';\n\nexport class ForeignKeyValidator implements Validator {\n readonly type = 'foreignKey';\n\n validate(context: ValidationContext): Diagnostic | null {\n const { value, schema, nodeName } = context;\n const foreignKey = schema.foreignKey;\n\n if (!foreignKey) {\n return null;\n }\n\n if (value === '' || value === null || value === undefined) {\n return {\n severity: 'error',\n type: this.type,\n message: 'Foreign key reference is required',\n path: nodeName,\n params: { table: foreignKey },\n };\n }\n\n return null;\n }\n}\n","import { ValidatorRegistry } from './ValidatorRegistry.js';\nimport { ValidatorResolver } from './ValidatorResolver.js';\nimport { ValidationEngine } from './ValidationEngine.js';\nimport { SchemaPropertyRule, SchemaTruthyRule } from './rules/index.js';\nimport {\n RequiredValidator,\n PatternValidator,\n MinLengthValidator,\n MaxLengthValidator,\n MinimumValidator,\n MaximumValidator,\n EnumValidator,\n ForeignKeyValidator,\n} from './validators/index.js';\n\nexport function createDefaultValidatorRegistry(): ValidatorRegistry {\n const registry = new ValidatorRegistry();\n\n registry\n .register('required', () => new RequiredValidator())\n .register('pattern', () => new PatternValidator())\n .register('minLength', () => new MinLengthValidator())\n .register('maxLength', () => new MaxLengthValidator())\n .register('minimum', () => new MinimumValidator())\n .register('maximum', () => new MaximumValidator())\n .register('enum', () => new EnumValidator())\n .register('foreignKey', () => new ForeignKeyValidator());\n\n registry\n .addRule(new SchemaTruthyRule('required', 'required'))\n .addRule(new SchemaPropertyRule('pattern', 'pattern'))\n .addRule(new SchemaPropertyRule('minLength', 'minLength'))\n .addRule(new SchemaPropertyRule('maxLength', 'maxLength'))\n .addRule(new SchemaPropertyRule('minimum', 'minimum'))\n .addRule(new SchemaPropertyRule('maximum', 'maximum'))\n .addRule(new SchemaPropertyRule('enum', 'enum'))\n .addRule(new SchemaPropertyRule('foreignKey', 'foreignKey'));\n\n return registry;\n}\n\nexport function createValidationEngine(\n registry?: ValidatorRegistry,\n): ValidationEngine {\n const validatorRegistry = registry ?? createDefaultValidatorRegistry();\n const resolver = new ValidatorResolver(validatorRegistry);\n return new ValidationEngine(resolver);\n}\n","const FIELD_NAME_PATTERN = /^(?!__)[a-zA-Z_][a-zA-Z0-9-_]*$/;\nconst FIELD_NAME_MAX_LENGTH = 64;\n\nexport const FIELD_NAME_ERROR_MESSAGE =\n 'Must start with a letter or underscore, cannot start with __, and can only include letters, numbers, hyphens, and underscores (max 64 chars)';\n\nexport function isValidFieldName(name: string): boolean {\n if (name.length === 0 || name.length > FIELD_NAME_MAX_LENGTH) {\n return false;\n }\n return FIELD_NAME_PATTERN.test(name);\n}\n","import type { SchemaNode } from '../../schema-node/index.js';\nimport type { SchemaValidationError, SchemaValidationErrorType } from './types.js';\nimport { isValidFieldName, FIELD_NAME_ERROR_MESSAGE } from './FieldNameValidator.js';\n\nexport function validateSchema(root: SchemaNode): SchemaValidationError[] {\n const errors: SchemaValidationError[] = [];\n collectValidationErrors(root, errors);\n return errors;\n}\n\nfunction collectValidationErrors(\n node: SchemaNode,\n errors: SchemaValidationError[],\n): void {\n if (node.isNull()) {\n return;\n }\n\n const foreignKey = node.foreignKey();\n if (foreignKey === '') {\n errors.push(\n createError(node.id(), 'empty-foreign-key', 'Foreign key table reference cannot be empty'),\n );\n }\n\n if (node.isObject()) {\n const children = node.properties();\n const nameSet = new Set<string>();\n\n for (const child of children) {\n const childName = child.name();\n\n if (childName === '') {\n errors.push(createError(child.id(), 'empty-name', 'Field name cannot be empty'));\n } else if (nameSet.has(childName)) {\n errors.push(\n createError(child.id(), 'duplicate-name', `Duplicate field name: ${childName}`),\n );\n } else if (!isValidFieldName(childName)) {\n errors.push(createError(child.id(), 'invalid-name', FIELD_NAME_ERROR_MESSAGE));\n }\n\n nameSet.add(childName);\n collectValidationErrors(child, errors);\n }\n } else if (node.isArray()) {\n collectValidationErrors(node.items(), errors);\n }\n}\n\nfunction createError(\n nodeId: string,\n type: SchemaValidationErrorType,\n message: string,\n): SchemaValidationError {\n return { nodeId, type, message };\n}\n","import { validateFormulaSyntax } from '@revisium/formula';\nimport type { SchemaTree } from '../../schema-tree/index.js';\nimport type { SchemaNode } from '../../schema-node/index.js';\nimport type { TreeFormulaValidationError } from './types.js';\nimport { FormulaSerializer } from '../../schema-formula/serialization/FormulaSerializer.js';\n\nexport function validateFormulas(tree: SchemaTree): TreeFormulaValidationError[] {\n const errors: TreeFormulaValidationError[] = [];\n collectFormulaErrors(tree.root(), tree, errors, '');\n return errors;\n}\n\nfunction collectFormulaErrors(\n node: SchemaNode,\n tree: SchemaTree,\n errors: TreeFormulaValidationError[],\n fieldPath: string,\n): void {\n validateNodeFormula(node, tree, errors, fieldPath);\n collectChildErrors(node, tree, errors, fieldPath);\n}\n\nfunction validateNodeFormula(\n node: SchemaNode,\n tree: SchemaTree,\n errors: TreeFormulaValidationError[],\n fieldPath: string,\n): void {\n if (!node.isPrimitive() || !node.hasFormula()) {\n return;\n }\n\n const formula = node.formula();\n if (!formula) {\n return;\n }\n\n for (const dep of formula.dependencies()) {\n const targetNode = tree.nodeById(dep.targetNodeId());\n if (targetNode.isNull()) {\n errors.push({\n nodeId: node.id(),\n message: 'Cannot resolve formula dependency: target node not found',\n fieldPath: fieldPath || node.name(),\n });\n return;\n }\n }\n\n try {\n const expression = FormulaSerializer.serializeExpression(\n tree,\n node.id(),\n formula,\n { strict: false },\n );\n const result = validateFormulaSyntax(expression);\n if (!result.isValid) {\n errors.push({\n nodeId: node.id(),\n message: `Invalid formula: ${result.error}`,\n fieldPath: fieldPath || node.name(),\n });\n }\n } catch {\n errors.push({\n nodeId: node.id(),\n message: 'Invalid formula expression',\n fieldPath: fieldPath || node.name(),\n });\n }\n}\n\nfunction collectChildErrors(\n node: SchemaNode,\n tree: SchemaTree,\n errors: TreeFormulaValidationError[],\n fieldPath: string,\n): void {\n if (node.isObject()) {\n for (const child of node.properties()) {\n const childPath = buildChildPath(fieldPath, child.name());\n collectFormulaErrors(child, tree, errors, childPath);\n }\n } else if (node.isArray()) {\n const itemsPath = buildArrayItemsPath(fieldPath);\n collectFormulaErrors(node.items(), tree, errors, itemsPath);\n }\n}\n\nfunction buildChildPath(parentPath: string, childName: string): string {\n return parentPath ? `${parentPath}.${childName}` : childName;\n}\n\nfunction buildArrayItemsPath(parentPath: string): string {\n return parentPath ? `${parentPath}[*]` : '[*]';\n}\n"]}
@@ -853,6 +853,9 @@ var SchemaTreeImpl = class _SchemaTreeImpl {
853
853
  replacements() {
854
854
  return this._replacements.entries();
855
855
  }
856
+ clearReplacements() {
857
+ this._replacements.clear();
858
+ }
856
859
  addChildTo(parentId, node) {
857
860
  const parent = this.nodeById(parentId);
858
861
  if (parent.isNull()) {
@@ -1244,10 +1247,17 @@ function areFormulasEqual(currentFormula, baseFormula, currentNodeId, baseNodeId
1244
1247
  context.baseTree,
1245
1248
  baseNodeId
1246
1249
  );
1250
+ if (currentExpr === null || baseExpr === null) {
1251
+ return false;
1252
+ }
1247
1253
  return currentExpr === baseExpr;
1248
1254
  }
1249
1255
  function getSerializedExpression(formula, tree, nodeId) {
1250
- return FormulaSerializer.serializeExpression(tree, nodeId, formula, { strict: false });
1256
+ try {
1257
+ return FormulaSerializer.serializeExpression(tree, nodeId, formula, { strict: false });
1258
+ } catch {
1259
+ return null;
1260
+ }
1251
1261
  }
1252
1262
  function areObjectsEqual(current, base, context) {
1253
1263
  const propsCurrent = current.properties();
@@ -2097,7 +2107,11 @@ var PatchEnricher = class {
2097
2107
  if (!formula || !node) {
2098
2108
  return void 0;
2099
2109
  }
2100
- return FormulaSerializer.serializeExpression(tree, node.id(), formula, { strict: false });
2110
+ try {
2111
+ return FormulaSerializer.serializeExpression(tree, node.id(), formula, { strict: false });
2112
+ } catch {
2113
+ return void 0;
2114
+ }
2101
2115
  },
2102
2116
  compare: (from, to) => from === to
2103
2117
  },
@@ -2727,5 +2741,5 @@ exports.runInAction = runInAction;
2727
2741
  exports.setReactivityProvider = setReactivityProvider;
2728
2742
  exports.validateFormulas = validateFormulas;
2729
2743
  exports.validateSchema = validateSchema;
2730
- //# sourceMappingURL=chunk-HDZCCAWA.cjs.map
2731
- //# sourceMappingURL=chunk-HDZCCAWA.cjs.map
2744
+ //# sourceMappingURL=chunk-46ME2TAU.cjs.map
2745
+ //# sourceMappingURL=chunk-46ME2TAU.cjs.map