@revisium/schema-toolkit 0.17.0 → 0.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-RTBMPBPC.js → chunk-5FFJ2R3L.js} +24 -2
- package/dist/chunk-5FFJ2R3L.js.map +1 -0
- package/dist/{chunk-YRKXZTRZ.cjs → chunk-DGWSDEVQ.cjs} +71 -59
- package/dist/chunk-DGWSDEVQ.cjs.map +1 -0
- package/dist/{chunk-ZG7QX4I3.cjs → chunk-UQ63QBOS.cjs} +24 -2
- package/dist/chunk-UQ63QBOS.cjs.map +1 -0
- package/dist/{chunk-6EAIJMZV.js → chunk-YMJ262MJ.js} +15 -3
- package/dist/chunk-YMJ262MJ.js.map +1 -0
- package/dist/core/index.cjs +57 -57
- package/dist/core/index.d.cts +2 -2
- package/dist/core/index.d.ts +2 -2
- package/dist/core/index.js +1 -1
- package/dist/index.cjs +102 -102
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2 -2
- package/dist/model/index.cjs +46 -46
- package/dist/model/index.d.cts +3 -2
- package/dist/model/index.d.ts +3 -2
- package/dist/model/index.js +2 -2
- package/dist/{types-6S07rMdY.d.ts → types-BJyVALqI.d.ts} +2 -0
- package/dist/{types-DHlnrQKG.d.cts → types-DZ-vVxf7.d.cts} +2 -0
- package/package.json +1 -1
- package/dist/chunk-6EAIJMZV.js.map +0 -1
- package/dist/chunk-RTBMPBPC.js.map +0 -1
- package/dist/chunk-YRKXZTRZ.cjs.map +0 -1
- package/dist/chunk-ZG7QX4I3.cjs.map +0 -1
|
@@ -68,6 +68,8 @@ var NullNodeImpl = class {
|
|
|
68
68
|
}
|
|
69
69
|
addChild(_node) {
|
|
70
70
|
}
|
|
71
|
+
insertChild(_index, _node) {
|
|
72
|
+
}
|
|
71
73
|
removeChild(_name) {
|
|
72
74
|
return false;
|
|
73
75
|
}
|
|
@@ -258,6 +260,8 @@ var BaseNode = class {
|
|
|
258
260
|
}
|
|
259
261
|
addChild(_node) {
|
|
260
262
|
}
|
|
263
|
+
insertChild(_index, _node) {
|
|
264
|
+
}
|
|
261
265
|
removeChild(_name) {
|
|
262
266
|
return false;
|
|
263
267
|
}
|
|
@@ -301,6 +305,7 @@ var ObjectNode = class _ObjectNode extends BaseNode {
|
|
|
301
305
|
makeObservable(this, {
|
|
302
306
|
_children: "observable.shallow",
|
|
303
307
|
addChild: "action",
|
|
308
|
+
insertChild: "action",
|
|
304
309
|
removeChild: "action",
|
|
305
310
|
replaceChild: "action"
|
|
306
311
|
});
|
|
@@ -336,6 +341,12 @@ var ObjectNode = class _ObjectNode extends BaseNode {
|
|
|
336
341
|
addChild(node) {
|
|
337
342
|
this._children.push(node);
|
|
338
343
|
}
|
|
344
|
+
insertChild(index, node) {
|
|
345
|
+
if (index < 0 || index > this._children.length) {
|
|
346
|
+
throw new Error(`Index out of bounds: ${index}`);
|
|
347
|
+
}
|
|
348
|
+
this._children.splice(index, 0, node);
|
|
349
|
+
}
|
|
339
350
|
removeChild(name) {
|
|
340
351
|
const index = this._children.findIndex((child) => child.name() === name);
|
|
341
352
|
if (index === -1) {
|
|
@@ -851,6 +862,17 @@ var SchemaTreeImpl = class _SchemaTreeImpl {
|
|
|
851
862
|
parent.addChild(node);
|
|
852
863
|
this.rebuildIndex();
|
|
853
864
|
}
|
|
865
|
+
insertChildAt(parentId, index, node) {
|
|
866
|
+
const parent = this.nodeById(parentId);
|
|
867
|
+
if (parent.isNull()) {
|
|
868
|
+
return;
|
|
869
|
+
}
|
|
870
|
+
if (parent.isArray()) {
|
|
871
|
+
throw new Error("Cannot add child to array node. Use setItems instead.");
|
|
872
|
+
}
|
|
873
|
+
parent.insertChild(index, node);
|
|
874
|
+
this.rebuildIndex();
|
|
875
|
+
}
|
|
854
876
|
removeNodeAt(path) {
|
|
855
877
|
if (path.isEmpty()) {
|
|
856
878
|
return false;
|
|
@@ -2933,5 +2955,5 @@ function buildArrayItemsPath(parentPath) {
|
|
|
2933
2955
|
}
|
|
2934
2956
|
|
|
2935
2957
|
export { AbstractBasePath, ChangeCoalescer, ChangeCollector, CompositeRule, EMPTY_METADATA, EMPTY_PATH, EnumValidator, FIELD_NAME_ERROR_MESSAGE, ForeignKeyValidator, FormulaChangeDetector, FormulaDependencyIndex, FormulaPath, FormulaPathBuilder, FormulaSerializer, ItemsSegment, MaxLengthValidator, MaximumValidator, MinLengthValidator, MinimumValidator, NULL_NODE, NodePathIndex, ParsedFormula, 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 };
|
|
2936
|
-
//# sourceMappingURL=chunk-
|
|
2937
|
-
//# sourceMappingURL=chunk-
|
|
2958
|
+
//# sourceMappingURL=chunk-5FFJ2R3L.js.map
|
|
2959
|
+
//# sourceMappingURL=chunk-5FFJ2R3L.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/model/schema-formula/serialization/FormulaPathBuilder.ts","../src/model/schema-formula/core/FormulaError.ts","../src/model/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/model/schema-formula/core/FormulaDependency.ts","../src/model/schema-formula/parsing/FormulaPath.ts","../src/model/schema-formula/parsing/ParsedFormula.ts","../src/model/schema-formula/store/FormulaDependencyIndex.ts","../src/model/schema-formula/changes/FormulaChangeDetector.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":["parseFormula"],"mappings":"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","file":"chunk-5FFJ2R3L.js","sourcesContent":["import type { Formula as ParsedFormula } from '../../model/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 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 '../../../core/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 '../../../core/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 '../../model/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 return currentExpr === baseExpr;\n}\n\nfunction getSerializedExpression(\n formula: Formula,\n tree: SchemaTree,\n nodeId: string,\n): string {\n return FormulaSerializer.serializeExpression(tree, nodeId, formula, { strict: false });\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 (other.type === 'modified') {\n if (!this.isTypeChangeReplacement(other)) {\n continue;\n }\n }\n\n if (change.type === 'moved' && other.type === 'added') {\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 isTypeChangeReplacement(change: ModifiedChange): boolean {\n return change.baseNode.nodeType() !== change.currentNode.nodeType();\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 { parseFormula, type ASTNode } from '@revisium/formula';\nimport type { Path } from '../../../core/path/index.js';\nimport { EMPTY_PATH } from '../../../core/path/index.js';\n\nconst ARRAY_NOTATION_REGEX = /^([^[]+)\\[(?:\\d+|\\*)?\\]$/;\n\nexport class FormulaPath {\n constructor(\n private readonly basePath: Path,\n private readonly relativePath: string,\n ) {}\n\n resolve(): Path | null {\n let ast: ASTNode;\n try {\n const parseResult = parseFormula(this.relativePath);\n ast = parseResult.ast;\n } catch {\n return null;\n }\n\n return this.astToPath(ast, this.basePath);\n }\n\n private astToPath(ast: ASTNode, base: Path): Path | null {\n switch (ast.type) {\n case 'Identifier':\n return base.child(ast.name);\n\n case 'MemberExpression': {\n const objectPath = this.astToPath(ast.object, base);\n if (!objectPath) {\n return null;\n }\n return objectPath.child(ast.property);\n }\n\n case 'IndexExpression':\n case 'WildcardExpression': {\n const objectPath = this.astToPath(ast.object, base);\n if (!objectPath) {\n return null;\n }\n return objectPath.childItems();\n }\n\n case 'RelativePath':\n return this.resolveRelativePathString(base, ast.path);\n\n case 'RootPath':\n return this.resolveRootPath(ast.path);\n\n default:\n return null;\n }\n }\n\n private resolveRelativePathString(base: Path, path: string): Path | null {\n const parts = path.split('/');\n let result = base;\n\n for (const part of parts) {\n if (part === '..') {\n if (result.isEmpty()) {\n return null;\n }\n result = result.parent();\n } else if (part === '.') {\n continue;\n } else if (part) {\n result = result.child(part);\n }\n }\n\n return result;\n }\n\n private resolveRootPath(rootPath: string): Path | null {\n const path = rootPath.startsWith('/') ? rootPath.slice(1) : rootPath;\n if (!path) {\n return EMPTY_PATH;\n }\n\n try {\n return this.parseFormulaPath(path);\n } catch {\n return null;\n }\n }\n\n private parseFormulaPath(formulaPath: string): Path {\n const parts = formulaPath.split('.');\n let result: Path = EMPTY_PATH;\n\n for (const part of parts) {\n if (!part) {\n throw new Error(`Invalid path: empty segment`);\n }\n\n const match = ARRAY_NOTATION_REGEX.exec(part);\n if (match?.[1]) {\n result = result.child(match[1]).childItems();\n } else {\n result = result.child(part);\n }\n }\n\n return result;\n }\n}\n","import { parseFormula, type ASTNode } from '@revisium/formula';\nimport type { Path } from '../../../core/path/index.js';\nimport type { SchemaTree } from '../../../core/schema-tree/index.js';\nimport type { Formula } from '../core/Formula.js';\nimport type { FormulaDependency } from '../core/FormulaDependency.js';\nimport { ResolvedDependency } from '../core/FormulaDependency.js';\nimport { FormulaError } from '../core/FormulaError.js';\nimport { FormulaPath } from './FormulaPath.js';\n\nexport class ParsedFormula implements Formula {\n private readonly _expression: string;\n private readonly astNode: ASTNode;\n private readonly deps: readonly FormulaDependency[];\n private readonly astPathToNodeId: ReadonlyMap<string, string>;\n\n constructor(tree: SchemaTree, formulaNodeId: string, expression: string) {\n this._expression = expression;\n const parseResult = parseFormula(expression);\n this.astNode = parseResult.ast;\n\n const formulaPath = tree.pathOf(formulaNodeId);\n if (formulaPath.isEmpty() && tree.root().id() !== formulaNodeId) {\n throw new FormulaError('Formula node not found in tree', formulaNodeId);\n }\n\n const deps: FormulaDependency[] = [];\n const astPathToNodeId = new Map<string, string>();\n\n for (const depPath of parseResult.dependencies) {\n const targetNodeId = this.resolveDependencyPath(\n tree,\n formulaPath,\n depPath,\n );\n if (!targetNodeId) {\n throw new FormulaError(\n `Cannot resolve formula dependency: ${depPath}`,\n formulaNodeId,\n 'Path not found in schema',\n );\n }\n if (targetNodeId === formulaNodeId) {\n throw new FormulaError(\n 'Formula cannot reference itself',\n formulaNodeId,\n 'Self-reference detected',\n );\n }\n deps.push(new ResolvedDependency(targetNodeId));\n astPathToNodeId.set(depPath, targetNodeId);\n }\n\n this.deps = deps;\n this.astPathToNodeId = astPathToNodeId;\n }\n\n version(): number {\n return 1;\n }\n\n expression(): string {\n return this._expression;\n }\n\n ast(): ASTNode {\n return this.astNode;\n }\n\n dependencies(): readonly FormulaDependency[] {\n return this.deps;\n }\n\n getNodeIdForAstPath(astPath: string): string | null {\n return this.astPathToNodeId.get(astPath) ?? null;\n }\n\n astPaths(): readonly string[] {\n return Array.from(this.astPathToNodeId.keys());\n }\n\n private resolveDependencyPath(\n tree: SchemaTree,\n formulaNodePath: Path,\n depPath: string,\n ): string | null {\n const basePath = this.getFormulaBasePath(formulaNodePath);\n const depFormulaPath = new FormulaPath(basePath, depPath);\n const targetPath = depFormulaPath.resolve();\n\n if (!targetPath) {\n return null;\n }\n\n const targetNode = tree.nodeAt(targetPath);\n if (targetNode.isNull()) {\n return null;\n }\n\n return targetNode.id();\n }\n\n private getFormulaBasePath(formulaPath: Path): Path {\n let basePath = formulaPath;\n\n while (!basePath.isEmpty()) {\n const segs = basePath.segments();\n const lastSeg = segs[segs.length - 1];\n basePath = basePath.parent();\n if (!lastSeg?.isItems()) {\n break;\n }\n }\n\n return basePath;\n }\n}\n","import type { Formula } from '../core/Formula.js';\n\nexport class FormulaDependencyIndex {\n private readonly dependentsMap = new Map<string, Set<string>>();\n private readonly formulasByNodeId = new Map<string, Formula>();\n\n registerFormula(formulaNodeId: string, formula: Formula): void {\n this.unregisterFormula(formulaNodeId);\n\n this.formulasByNodeId.set(formulaNodeId, formula);\n\n for (const dep of formula.dependencies()) {\n const targetId = dep.targetNodeId();\n let dependents = this.dependentsMap.get(targetId);\n if (!dependents) {\n dependents = new Set<string>();\n this.dependentsMap.set(targetId, dependents);\n }\n dependents.add(formulaNodeId);\n }\n }\n\n unregisterFormula(formulaNodeId: string): void {\n this.formulasByNodeId.delete(formulaNodeId);\n\n for (const [targetId, dependents] of this.dependentsMap) {\n dependents.delete(formulaNodeId);\n if (dependents.size === 0) {\n this.dependentsMap.delete(targetId);\n }\n }\n }\n\n getDependents(nodeId: string): readonly string[] {\n const dependents = this.dependentsMap.get(nodeId);\n return dependents ? Array.from(dependents) : [];\n }\n\n hasDependents(nodeId: string): boolean {\n const dependents = this.dependentsMap.get(nodeId);\n return dependents !== undefined && dependents.size > 0;\n }\n\n getFormula(nodeId: string): Formula | null {\n return this.formulasByNodeId.get(nodeId) ?? null;\n }\n\n hasFormula(nodeId: string): boolean {\n return this.formulasByNodeId.has(nodeId);\n }\n\n clear(): void {\n this.dependentsMap.clear();\n this.formulasByNodeId.clear();\n }\n\n forEachFormula(callback: (nodeId: string, formula: Formula) => void): void {\n for (const [nodeId, formula] of this.formulasByNodeId) {\n callback(nodeId, formula);\n }\n }\n\n size(): number {\n return this.formulasByNodeId.size;\n }\n}\n","import type { SchemaTree } from '../../../core/schema-tree/index.js';\nimport type { FormulaDependencyIndex } from '../store/FormulaDependencyIndex.js';\nimport type { Formula } from '../core/Formula.js';\nimport { FormulaSerializer } from '../serialization/FormulaSerializer.js';\n\nexport interface IndirectFormulaChange {\n readonly nodeId: string;\n readonly fromExpression: string;\n readonly toExpression: string;\n}\n\nexport class FormulaChangeDetector {\n constructor(\n private readonly index: FormulaDependencyIndex,\n private readonly currentTree: SchemaTree,\n private readonly baseTree: SchemaTree,\n ) {}\n\n detectIndirectChanges(changedNodeIds: Set<string>): IndirectFormulaChange[] {\n const result: IndirectFormulaChange[] = [];\n const visited = new Set<string>();\n\n for (const changedId of changedNodeIds) {\n this.collectDependentChanges(changedId, result, visited, changedNodeIds);\n }\n\n return result;\n }\n\n private collectDependentChanges(\n nodeId: string,\n result: IndirectFormulaChange[],\n visited: Set<string>,\n directlyChanged: Set<string>,\n ): void {\n const dependents = this.index.getDependents(nodeId);\n\n for (const dependentId of dependents) {\n if (visited.has(dependentId)) {\n continue;\n }\n visited.add(dependentId);\n\n if (directlyChanged.has(dependentId)) {\n continue;\n }\n\n const change = this.detectFormulaChange(dependentId);\n if (change) {\n result.push(change);\n }\n\n this.collectDependentChanges(dependentId, result, visited, directlyChanged);\n }\n }\n\n private detectFormulaChange(nodeId: string): IndirectFormulaChange | null {\n const currentNode = this.currentTree.nodeById(nodeId);\n const baseNode = this.baseTree.nodeById(nodeId);\n\n if (currentNode.isNull() || baseNode.isNull()) {\n return null;\n }\n\n const currentFormula = currentNode.formula();\n const baseFormula = baseNode.formula();\n\n if (!currentFormula || !baseFormula) {\n return null;\n }\n\n const fromExpression = this.getSerializedExpression(baseFormula, this.baseTree, nodeId);\n const toExpression = this.getSerializedExpression(currentFormula, this.currentTree, nodeId);\n\n if (fromExpression === null || toExpression === null) {\n return null;\n }\n\n if (fromExpression === toExpression) {\n return null;\n }\n\n return {\n nodeId,\n fromExpression,\n toExpression,\n };\n }\n\n private getSerializedExpression(\n formula: Formula,\n tree: SchemaTree,\n nodeId: string,\n ): string | null {\n try {\n const xFormula = FormulaSerializer.toXFormula(tree, nodeId, formula);\n return xFormula.expression;\n } catch {\n return null;\n }\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 '../../model/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 return FormulaSerializer.toXFormula(this.tree, node.id(), formula);\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 patches: JsonPatch[] = [];\n\n for (const change of moved) {\n const basePath = this.baseTree.pathOf(change.baseNode.id());\n const currentPath = this.currentTree.pathOf(change.currentNode.id());\n\n patches.push({\n op: 'move',\n from: basePath.asJsonPointer(),\n path: currentPath.asJsonPointer(),\n });\n\n const modifyPatch = this.generateModifyAfterMove(\n change.baseNode,\n change.currentNode,\n currentPath.asJsonPointer(),\n );\n if (modifyPatch) {\n patches.push(modifyPatch);\n }\n }\n\n return patches;\n }\n\n private generateModifyAfterMove(\n baseNode: SchemaNode,\n currentNode: SchemaNode,\n currentPath: string,\n ): JsonPatch | null {\n if (areNodesContentEqual(currentNode, baseNode, this.context)) {\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 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, Formula } 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 '../../model/schema-formula/serialization/FormulaSerializer.js';\nimport type { JsonPatchMove } from '../../types/index.js';\nimport type { DefaultValueType, JsonPatch, MetadataChangeType, SchemaPatch } from './types.js';\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 constructor(\n private readonly currentTree: SchemaTree,\n private readonly baseTree: SchemaTree,\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, metadataChanges: [] };\n }\n\n const metadata = this.computeAddMetadata(currentNode);\n return {\n patch,\n fieldName,\n metadataChanges: this.computeMetadataChanges(metadata),\n ...metadata,\n };\n }\n\n private enrichRemovePatch(patch: JsonPatch, fieldName: string): SchemaPatch {\n return { patch, fieldName, metadataChanges: [] };\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 formulaChange = this.computeFormulaChange(baseNode, currentNode);\n const metadataChanges: MetadataChangeType[] = [];\n if (formulaChange) {\n metadataChanges.push('formula');\n }\n\n return {\n patch,\n fieldName,\n metadataChanges,\n isRename: isRename || undefined,\n movesIntoArray: movesIntoArray || undefined,\n formulaChange,\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 formulaChange = this.computeFormulaChange(baseNode, currentNode);\n const defaultChange = isArrayMetadataPatch\n ? undefined\n : this.computeDefaultChange(baseNode, currentNode);\n const descriptionChange = this.computeDescriptionChange(baseNode, currentNode);\n const deprecatedChange = this.computeDeprecatedChange(baseNode, currentNode);\n const foreignKeyChange = this.computeForeignKeyChange(baseNode, currentNode);\n const contentMediaTypeChange = this.computeContentMediaTypeChange(baseNode, currentNode);\n\n const metadataChanges = this.computeMetadataChanges({\n formulaChange,\n defaultChange,\n descriptionChange,\n deprecatedChange,\n foreignKeyChange,\n contentMediaTypeChange,\n });\n\n return {\n patch,\n fieldName,\n metadataChanges,\n typeChange: this.computeTypeChange(baseNode, currentNode, isArrayMetadataPatch),\n formulaChange,\n defaultChange,\n descriptionChange,\n deprecatedChange,\n foreignKeyChange,\n contentMediaTypeChange,\n };\n }\n\n private computeAddMetadata(\n node: SchemaNode,\n ): Partial<SchemaPatch> {\n const result: Partial<SchemaPatch> = {};\n\n const formula = node.formula();\n if (formula) {\n result.formulaChange = {\n fromFormula: undefined,\n toFormula: this.getFormulaExpression(formula, this.currentTree, node.id()),\n fromVersion: undefined,\n toVersion: formula.version(),\n };\n }\n\n const defaultValue = node.defaultValue();\n if (defaultValue !== undefined && isPrimitiveDefault(defaultValue)) {\n result.defaultChange = {\n fromDefault: undefined,\n toDefault: defaultValue,\n };\n }\n\n const meta = node.metadata();\n if (meta.description) {\n result.descriptionChange = {\n fromDescription: undefined,\n toDescription: meta.description,\n };\n }\n\n if (meta.deprecated) {\n result.deprecatedChange = {\n fromDeprecated: undefined,\n toDeprecated: meta.deprecated,\n };\n }\n\n const foreignKey = node.foreignKey();\n if (foreignKey) {\n result.foreignKeyChange = {\n fromForeignKey: undefined,\n toForeignKey: foreignKey,\n };\n }\n\n const contentMediaType = node.contentMediaType();\n if (contentMediaType) {\n result.contentMediaTypeChange = {\n fromContentMediaType: undefined,\n toContentMediaType: contentMediaType,\n };\n }\n\n return result;\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 computeFormulaChange(\n baseNode: SchemaNode | null,\n currentNode: SchemaNode | null,\n ): SchemaPatch['formulaChange'] {\n const baseFormula = baseNode?.formula();\n const currentFormula = currentNode?.formula();\n\n const baseExpr = baseFormula && baseNode\n ? this.getFormulaExpression(baseFormula, this.baseTree, baseNode.id())\n : undefined;\n const currentExpr = currentFormula && currentNode\n ? this.getFormulaExpression(currentFormula, this.currentTree, currentNode.id())\n : undefined;\n const baseVersion = baseFormula?.version();\n const currentVersion = currentFormula?.version();\n\n if (baseExpr !== currentExpr || baseVersion !== currentVersion) {\n return {\n fromFormula: baseExpr,\n toFormula: currentExpr,\n fromVersion: baseVersion,\n toVersion: currentVersion,\n };\n }\n\n return undefined;\n }\n\n private getFormulaExpression(\n formula: Formula,\n tree: SchemaTree,\n nodeId: string,\n ): string {\n return FormulaSerializer.serializeExpression(tree, nodeId, formula, { strict: false });\n }\n\n private computeDefaultChange(\n baseNode: SchemaNode | null,\n currentNode: SchemaNode | null,\n ): SchemaPatch['defaultChange'] {\n const baseDefault = baseNode?.defaultValue();\n const currentDefault = currentNode?.defaultValue();\n\n const safeBaseDefault: DefaultValueType = isPrimitiveDefault(baseDefault)\n ? baseDefault\n : undefined;\n const safeCurrentDefault: DefaultValueType = isPrimitiveDefault(\n currentDefault,\n )\n ? currentDefault\n : undefined;\n\n if (safeBaseDefault !== safeCurrentDefault) {\n return {\n fromDefault: safeBaseDefault,\n toDefault: safeCurrentDefault,\n };\n }\n\n return undefined;\n }\n\n private computeDescriptionChange(\n baseNode: SchemaNode | null,\n currentNode: SchemaNode | null,\n ): SchemaPatch['descriptionChange'] {\n const baseDesc = baseNode?.metadata().description;\n const currentDesc = currentNode?.metadata().description;\n\n if (baseDesc !== currentDesc) {\n return { fromDescription: baseDesc, toDescription: currentDesc };\n }\n\n return undefined;\n }\n\n private computeDeprecatedChange(\n baseNode: SchemaNode | null,\n currentNode: SchemaNode | null,\n ): SchemaPatch['deprecatedChange'] {\n const baseDeprecated = baseNode?.metadata().deprecated;\n const currentDeprecated = currentNode?.metadata().deprecated;\n\n if (baseDeprecated !== currentDeprecated) {\n return { fromDeprecated: baseDeprecated, toDeprecated: currentDeprecated };\n }\n\n return undefined;\n }\n\n private computeForeignKeyChange(\n baseNode: SchemaNode | null,\n currentNode: SchemaNode | null,\n ): SchemaPatch['foreignKeyChange'] {\n const baseFk = baseNode?.foreignKey();\n const currentFk = currentNode?.foreignKey();\n\n if (baseFk !== currentFk) {\n return { fromForeignKey: baseFk, toForeignKey: currentFk };\n }\n\n return undefined;\n }\n\n private computeContentMediaTypeChange(\n baseNode: SchemaNode | null,\n currentNode: SchemaNode | null,\n ): SchemaPatch['contentMediaTypeChange'] {\n const baseMediaType = baseNode?.contentMediaType();\n const currentMediaType = currentNode?.contentMediaType();\n\n if (baseMediaType !== currentMediaType) {\n return {\n fromContentMediaType: baseMediaType,\n toContentMediaType: currentMediaType,\n };\n }\n\n return undefined;\n }\n\n private computeMetadataChanges(changes: Partial<SchemaPatch>): MetadataChangeType[] {\n const result: MetadataChangeType[] = [];\n\n if (changes.formulaChange) {\n result.push('formula');\n }\n if (changes.defaultChange) {\n result.push('default');\n }\n if (changes.descriptionChange) {\n result.push('description');\n }\n if (changes.deprecatedChange) {\n result.push('deprecated');\n }\n if (changes.foreignKeyChange) {\n result.push('foreignKey');\n }\n if (changes.contentMediaTypeChange) {\n result.push('contentMediaType');\n }\n\n return result;\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 type { SchemaTree } from '../../schema-tree/index.js';\nimport type { SchemaNode } from '../../schema-node/index.js';\nimport type { TreeFormulaValidationError } from './types.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 if (node.isNull()) {\n return;\n }\n\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 }\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"]}
|