@revisium/schema-toolkit 0.16.3 → 0.16.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -236,7 +236,8 @@ var SchemaModelImpl = class {
236
236
  _nodeFactory = new NodeFactory();
237
237
  _formulaIndex = new chunkVGB4YCGF_cjs.FormulaDependencyIndex();
238
238
  _formulaParseErrors = [];
239
- constructor(schema) {
239
+ _refSchemas;
240
+ constructor(schema, options) {
240
241
  const parser = new SchemaParser();
241
242
  const rootNode = parser.parse(schema);
242
243
  this._currentTree = chunkVGB4YCGF_cjs.createSchemaTree(rootNode);
@@ -244,11 +245,13 @@ var SchemaModelImpl = class {
244
245
  this._formulaParseErrors = parser.parseErrors;
245
246
  this._buildFormulaIndex();
246
247
  this._baseTree = this._currentTree.clone();
248
+ this._refSchemas = options?.refSchemas;
247
249
  chunkVGB4YCGF_cjs.makeAutoObservable(this, {
248
250
  _patchBuilder: false,
249
251
  _serializer: false,
250
252
  _nodeFactory: false,
251
253
  _formulaIndex: false,
254
+ _refSchemas: false,
252
255
  _currentTree: "observable.ref",
253
256
  _baseTree: "observable.ref",
254
257
  _formulaParseErrors: "observable.ref"
@@ -524,8 +527,14 @@ var SchemaModelImpl = class {
524
527
  get nodeCount() {
525
528
  return this._currentTree.countNodes();
526
529
  }
530
+ get refSchemas() {
531
+ return this._refSchemas;
532
+ }
527
533
  generateDefaultValue(options) {
528
- return generateDefaultValue(this.plainSchema, options);
534
+ return generateDefaultValue(this.plainSchema, {
535
+ ...options,
536
+ refSchemas: this._refSchemas
537
+ });
529
538
  }
530
539
  _buildFormulaIndex() {
531
540
  this._formulaIndex.clear();
@@ -538,8 +547,8 @@ var SchemaModelImpl = class {
538
547
  }
539
548
  }
540
549
  };
541
- function createSchemaModel(schema) {
542
- return new SchemaModelImpl(schema);
550
+ function createSchemaModel(schema, options) {
551
+ return new SchemaModelImpl(schema, options);
543
552
  }
544
553
 
545
554
  // src/model/table/row/RowModelImpl.ts
@@ -1724,12 +1733,14 @@ var TableModelImpl = class {
1724
1733
  _rows;
1725
1734
  _jsonSchema;
1726
1735
  _fkResolver;
1736
+ _refSchemas;
1727
1737
  constructor(options) {
1728
1738
  this._tableId = options.tableId;
1729
1739
  this._baseTableId = options.tableId;
1730
1740
  this._jsonSchema = options.schema;
1731
- this._schema = createSchemaModel(options.schema);
1741
+ this._schema = createSchemaModel(options.schema, { refSchemas: options.refSchemas });
1732
1742
  this._fkResolver = options.fkResolver;
1743
+ this._refSchemas = options.refSchemas;
1733
1744
  this._rows = chunkVGB4YCGF_cjs.observable.array();
1734
1745
  if (options.rows) {
1735
1746
  for (const row of options.rows) {
@@ -1740,7 +1751,8 @@ var TableModelImpl = class {
1740
1751
  _schema: false,
1741
1752
  _rows: false,
1742
1753
  _jsonSchema: false,
1743
- _fkResolver: false
1754
+ _fkResolver: false,
1755
+ _refSchemas: false
1744
1756
  });
1745
1757
  }
1746
1758
  get tableId() {
@@ -1755,6 +1767,9 @@ var TableModelImpl = class {
1755
1767
  get fk() {
1756
1768
  return this._fkResolver;
1757
1769
  }
1770
+ get refSchemas() {
1771
+ return this._refSchemas;
1772
+ }
1758
1773
  get schema() {
1759
1774
  return this._schema;
1760
1775
  }
@@ -1824,9 +1839,10 @@ var TableModelImpl = class {
1824
1839
  }
1825
1840
  createRowModel(rowId, data) {
1826
1841
  const factory = createNodeFactory({
1827
- fkResolver: this._fkResolver
1842
+ fkResolver: this._fkResolver,
1843
+ refSchemas: this._refSchemas
1828
1844
  });
1829
- const rowData = data ?? generateDefaultValue(this._jsonSchema);
1845
+ const rowData = data ?? generateDefaultValue(this._jsonSchema, { refSchemas: this._refSchemas });
1830
1846
  const rootNode = factory.createTree(this._jsonSchema, rowData);
1831
1847
  const valueTree = new ValueTree(rootNode);
1832
1848
  const rowModel = new RowModelImpl(rowId, valueTree);
@@ -2260,5 +2276,5 @@ exports.generateDefaultValue = generateDefaultValue;
2260
2276
  exports.generateNodeId = generateNodeId;
2261
2277
  exports.isForeignKeyValueNode = isForeignKeyValueNode;
2262
2278
  exports.resetNodeIdCounter = resetNodeIdCounter;
2263
- //# sourceMappingURL=chunk-62TO7J76.cjs.map
2264
- //# sourceMappingURL=chunk-62TO7J76.cjs.map
2279
+ //# sourceMappingURL=chunk-MAEGAVK4.cjs.map
2280
+ //# sourceMappingURL=chunk-MAEGAVK4.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/model/schema-model/SchemaParser.ts","../src/model/schema-model/NodeFactory.ts","../src/model/default-value/generateDefaultValue.ts","../src/model/schema-model/SchemaModelImpl.ts","../src/model/table/row/RowModelImpl.ts","../src/model/value-node/BaseValueNode.ts","../src/model/value-node/types.ts","../src/model/value-node/ArrayValueNode.ts","../src/model/value-node/BasePrimitiveValueNode.ts","../src/model/value-node/BooleanValueNode.ts","../src/model/foreign-key-resolver/errors.ts","../src/model/value-node/StringValueNode.ts","../src/model/value-node/ForeignKeyValueNode.ts","../src/model/value-node/NumberValueNode.ts","../src/model/value-node/ObjectValueNode.ts","../src/model/value-node/NodeFactory.ts","../src/core/value-path/ValuePathSegment.ts","../src/core/value-path/ValuePath.ts","../src/core/value-path/ValuePathParser.ts","../src/model/value-tree/ValueTree.ts","../src/model/table/TableModelImpl.ts","../src/model/foreign-key-resolver/ForeignKeyResolverImpl.ts","../src/model/data-model/DataModelImpl.ts"],"names":["ParsedFormula","createRefNode","nanoid","createObjectNode","createArrayNode","createStringNode","createNumberNode","createBooleanNode","PatchBuilder","SchemaSerializer","FormulaDependencyIndex","createSchemaTree","makeAutoObservable","FormulaSerializer","validateSchema","validateFormulas","ValueType","observable","makeObservable","NodeFactory","AbstractBasePath","runInAction"],"mappings":"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","file":"chunk-MAEGAVK4.cjs","sourcesContent":["import { nanoid } from 'nanoid';\nimport type {\n JsonSchema,\n JsonSchemaWithoutRef,\n JsonObjectSchema,\n JsonArraySchema,\n JsonStringSchema,\n JsonNumberSchema,\n JsonBooleanSchema,\n XFormula,\n} from '../../types/index.js';\nimport { JsonSchemaTypeName } from '../../types/index.js';\nimport type { SchemaNode, NodeMetadata } from '../../core/schema-node/index.js';\nimport {\n createObjectNode,\n createArrayNode,\n createStringNode,\n createNumberNode,\n createBooleanNode,\n createRefNode,\n} from '../../core/schema-node/index.js';\nimport type { SchemaTree } from '../../core/schema-tree/index.js';\nimport { ParsedFormula } from '../schema-formula/index.js';\nimport type { TreeFormulaValidationError } from '../../core/validation/index.js';\n\ninterface PendingFormula {\n nodeId: string;\n expression: string;\n}\n\nexport class SchemaParser {\n private pendingFormulas: PendingFormula[] = [];\n private _parseErrors: TreeFormulaValidationError[] = [];\n\n parse(schema: JsonObjectSchema): SchemaNode {\n this.pendingFormulas = [];\n this._parseErrors = [];\n return this.parseNode(schema, 'root');\n }\n\n parseFormulas(tree: SchemaTree): void {\n for (const pending of this.pendingFormulas) {\n const node = tree.nodeById(pending.nodeId);\n if (node.isNull()) {\n continue;\n }\n try {\n const formula = new ParsedFormula(tree, pending.nodeId, pending.expression);\n node.setFormula(formula);\n } catch (error) {\n this._parseErrors.push({\n nodeId: pending.nodeId,\n message: (error as Error).message,\n });\n }\n }\n this.pendingFormulas = [];\n }\n\n get parseErrors(): TreeFormulaValidationError[] {\n return this._parseErrors;\n }\n\n private parseNode(schema: JsonSchema, name: string): SchemaNode {\n if ('$ref' in schema) {\n return createRefNode(nanoid(), name, schema.$ref, this.extractMetadata(schema));\n }\n\n const schemaWithType = schema as JsonSchemaWithoutRef;\n switch (schemaWithType.type) {\n case JsonSchemaTypeName.Object:\n return this.parseObject(schemaWithType, name);\n case JsonSchemaTypeName.Array:\n return this.parseArray(schemaWithType, name);\n case JsonSchemaTypeName.String:\n return this.parseString(schemaWithType, name);\n case JsonSchemaTypeName.Number:\n return this.parseNumber(schemaWithType, name);\n case JsonSchemaTypeName.Boolean:\n return this.parseBoolean(schemaWithType, name);\n default:\n throw new Error(`Unknown schema type: ${(schemaWithType as { type: string }).type}`);\n }\n }\n\n private parseObject(schema: JsonObjectSchema, name: string): SchemaNode {\n const children: SchemaNode[] = [];\n\n for (const propName of Object.keys(schema.properties).sort((a, b) => a.localeCompare(b))) {\n const propSchema = schema.properties[propName];\n if (propSchema) {\n children.push(this.parseNode(propSchema, propName));\n }\n }\n\n return createObjectNode(nanoid(), name, children, this.extractMetadata(schema));\n }\n\n private parseArray(schema: JsonArraySchema, name: string): SchemaNode {\n const items = this.parseNode(schema.items, 'items');\n return createArrayNode(nanoid(), name, items, this.extractMetadata(schema));\n }\n\n private parseString(schema: JsonStringSchema, name: string): SchemaNode {\n const nodeId = nanoid();\n this.collectFormula(nodeId, schema['x-formula']);\n return createStringNode(nodeId, name, {\n defaultValue: schema.default,\n foreignKey: schema.foreignKey,\n metadata: this.extractMetadata(schema),\n });\n }\n\n private parseNumber(schema: JsonNumberSchema, name: string): SchemaNode {\n const nodeId = nanoid();\n this.collectFormula(nodeId, schema['x-formula']);\n return createNumberNode(nodeId, name, {\n defaultValue: schema.default,\n metadata: this.extractMetadata(schema),\n });\n }\n\n private parseBoolean(schema: JsonBooleanSchema, name: string): SchemaNode {\n const nodeId = nanoid();\n this.collectFormula(nodeId, schema['x-formula']);\n return createBooleanNode(nodeId, name, {\n defaultValue: schema.default,\n metadata: this.extractMetadata(schema),\n });\n }\n\n private extractMetadata(schema: JsonSchema): NodeMetadata | undefined {\n const meta: NodeMetadata = {};\n let hasValue = false;\n\n if ('title' in schema && schema.title) {\n (meta as { title: string }).title = schema.title;\n hasValue = true;\n }\n if ('description' in schema && schema.description) {\n (meta as { description: string }).description = schema.description;\n hasValue = true;\n }\n if ('deprecated' in schema && schema.deprecated) {\n (meta as { deprecated: boolean }).deprecated = schema.deprecated;\n hasValue = true;\n }\n\n return hasValue ? meta : undefined;\n }\n\n private collectFormula(nodeId: string, xFormula: XFormula | undefined): void {\n if (xFormula) {\n this.pendingFormulas.push({ nodeId, expression: xFormula.expression });\n }\n }\n}\n","import { nanoid } from 'nanoid';\nimport type { SchemaNode } from '../../core/schema-node/index.js';\nimport {\n createObjectNode,\n createArrayNode,\n createStringNode,\n createNumberNode,\n createBooleanNode,\n} from '../../core/schema-node/index.js';\nimport type { FieldType } from './types.js';\n\nexport class NodeFactory {\n createNode(name: string, type: FieldType): SchemaNode {\n switch (type) {\n case 'string':\n return createStringNode(nanoid(), name, { defaultValue: '' });\n case 'number':\n return createNumberNode(nanoid(), name, { defaultValue: 0 });\n case 'boolean':\n return createBooleanNode(nanoid(), name, { defaultValue: false });\n case 'object':\n return createObjectNode(nanoid(), name, []);\n case 'array':\n return this.createArrayNodeInternal(name);\n default:\n throw new Error(`Unknown field type: ${type}`);\n }\n }\n\n private createArrayNodeInternal(name: string): SchemaNode {\n const items = createStringNode(nanoid(), 'items', { defaultValue: '' });\n return createArrayNode(nanoid(), name, items);\n }\n\n createArrayNodeWithItems(name: string, items: SchemaNode): SchemaNode {\n return createArrayNode(nanoid(), name, items);\n }\n}\n","import {\n JsonSchemaTypeName,\n type JsonArraySchema,\n type JsonObjectSchema,\n type JsonSchema,\n} from '../../types/schema.types.js';\nimport type { GenerateDefaultValueOptions } from './types.js';\n\nconst DEFAULT_STRING = '';\nconst DEFAULT_NUMBER = 0;\nconst DEFAULT_BOOLEAN = false;\n\nfunction isRefSchema(schema: JsonSchema): schema is { $ref: string } {\n return '$ref' in schema;\n}\n\nfunction isObjectSchema(schema: JsonSchema): schema is JsonObjectSchema {\n return 'type' in schema && schema.type === JsonSchemaTypeName.Object;\n}\n\nfunction isArraySchema(schema: JsonSchema): schema is JsonArraySchema {\n return 'type' in schema && schema.type === JsonSchemaTypeName.Array;\n}\n\nfunction hasDefaultValue(schema: JsonSchema): boolean {\n return 'default' in schema && schema.default !== undefined;\n}\n\nfunction generatePrimitiveDefault(schema: JsonSchema): unknown {\n if (!('type' in schema)) {\n return undefined;\n }\n\n switch (schema.type) {\n case JsonSchemaTypeName.String:\n return DEFAULT_STRING;\n case JsonSchemaTypeName.Number:\n return DEFAULT_NUMBER;\n case JsonSchemaTypeName.Boolean:\n return DEFAULT_BOOLEAN;\n default:\n return undefined;\n }\n}\n\nfunction generateObjectDefault(\n schema: JsonObjectSchema,\n options: GenerateDefaultValueOptions,\n): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n\n if (!schema.properties) {\n return result;\n }\n\n for (const [key, propertySchema] of Object.entries(schema.properties)) {\n result[key] = generateDefaultValueInternal(propertySchema, options);\n }\n\n return result;\n}\n\nfunction generateArrayDefault(\n schema: JsonArraySchema,\n options: GenerateDefaultValueOptions,\n): unknown[] {\n const itemCount = options.arrayItemCount ?? 0;\n\n if (itemCount === 0 || !schema.items) {\n return [];\n }\n\n const itemDefault = generateDefaultValueInternal(schema.items, options);\n return Array.from({ length: itemCount }, () => {\n if (typeof itemDefault === 'object' && itemDefault !== null) {\n return generateDefaultValueInternal(schema.items, options);\n }\n return itemDefault;\n });\n}\n\nfunction generateRefDefault(\n schema: { $ref: string },\n options: GenerateDefaultValueOptions,\n): unknown {\n const refSchemas = options.refSchemas;\n\n if (!refSchemas) {\n return {};\n }\n\n const refSchema = refSchemas[schema.$ref];\n\n if (!refSchema) {\n return {};\n }\n\n return generateDefaultValueInternal(refSchema, options);\n}\n\nfunction generateDefaultValueInternal(\n schema: JsonSchema,\n options: GenerateDefaultValueOptions,\n): unknown {\n if (hasDefaultValue(schema)) {\n return (schema as { default: unknown }).default;\n }\n\n if (isRefSchema(schema)) {\n return generateRefDefault(schema, options);\n }\n\n if (isObjectSchema(schema)) {\n return generateObjectDefault(schema, options);\n }\n\n if (isArraySchema(schema)) {\n return generateArrayDefault(schema, options);\n }\n\n return generatePrimitiveDefault(schema);\n}\n\nexport function generateDefaultValue(\n schema: JsonSchema | null | undefined,\n options: GenerateDefaultValueOptions = {},\n): unknown {\n if (!schema) {\n return {};\n }\n\n return generateDefaultValueInternal(schema, options);\n}\n","import type { SchemaNode, NodeMetadata } from '../../core/schema-node/index.js';\nimport type { SchemaTree } from '../../core/schema-tree/index.js';\nimport { createSchemaTree } from '../../core/schema-tree/index.js';\nimport type { Path, PathSegment } from '../../core/path/index.js';\nimport { PatchBuilder, type SchemaPatch, type JsonPatch } from '../../core/schema-patch/index.js';\nimport { SchemaSerializer } from '../../core/schema-serializer/index.js';\nimport type { JsonObjectSchema } from '../../types/index.js';\nimport { makeAutoObservable } from '../../core/reactivity/index.js';\nimport type { SchemaModel, FieldType, ReplaceResult, SchemaModelOptions, RefSchemas } from './types.js';\nimport { SchemaParser } from './SchemaParser.js';\nimport { NodeFactory } from './NodeFactory.js';\nimport { ParsedFormula, FormulaDependencyIndex, FormulaSerializer } from '../schema-formula/index.js';\nimport {\n validateSchema,\n validateFormulas,\n type SchemaValidationError,\n type TreeFormulaValidationError,\n} from '../../core/validation/index.js';\nimport { generateDefaultValue as generateDefaultValueFn } from '../default-value/index.js';\n\nexport class SchemaModelImpl implements SchemaModel {\n private _baseTree: SchemaTree;\n private _currentTree: SchemaTree;\n private readonly _patchBuilder = new PatchBuilder();\n private readonly _serializer = new SchemaSerializer();\n private readonly _nodeFactory = new NodeFactory();\n private readonly _formulaIndex = new FormulaDependencyIndex();\n private _formulaParseErrors: TreeFormulaValidationError[] = [];\n private readonly _refSchemas: RefSchemas | undefined;\n\n constructor(schema: JsonObjectSchema, options?: SchemaModelOptions) {\n const parser = new SchemaParser();\n const rootNode = parser.parse(schema);\n this._currentTree = createSchemaTree(rootNode);\n parser.parseFormulas(this._currentTree);\n this._formulaParseErrors = parser.parseErrors;\n this._buildFormulaIndex();\n this._baseTree = this._currentTree.clone();\n this._refSchemas = options?.refSchemas;\n\n makeAutoObservable(this, {\n _patchBuilder: false,\n _serializer: false,\n _nodeFactory: false,\n _formulaIndex: false,\n _refSchemas: false,\n _currentTree: 'observable.ref',\n _baseTree: 'observable.ref',\n _formulaParseErrors: 'observable.ref',\n });\n }\n\n get root(): SchemaNode {\n return this._currentTree.root();\n }\n\n nodeById(id: string): SchemaNode {\n return this._currentTree.nodeById(id);\n }\n\n pathOf(id: string): Path {\n return this._currentTree.pathOf(id);\n }\n\n addField(parentId: string, name: string, type: FieldType): SchemaNode {\n const node = this._nodeFactory.createNode(name, type);\n this._currentTree.addChildTo(parentId, node);\n return node;\n }\n\n removeField(nodeId: string): boolean {\n const path = this._currentTree.pathOf(nodeId);\n if (path.isEmpty()) {\n return false;\n }\n return this._currentTree.removeNodeAt(path);\n }\n\n renameField(nodeId: string, newName: string): void {\n const node = this._currentTree.nodeById(nodeId);\n if (node.isNull()) {\n return;\n }\n this._currentTree.renameNode(nodeId, newName);\n }\n\n changeFieldType(nodeId: string, newType: FieldType): SchemaNode {\n const node = this._currentTree.nodeById(nodeId);\n if (node.isNull()) {\n return node;\n }\n\n const path = this._currentTree.pathOf(nodeId);\n if (path.isEmpty()) {\n return node;\n }\n\n const newNode = this._nodeFactory.createNode(node.name(), newType);\n this._currentTree.setNodeAt(path, newNode);\n this._currentTree.trackReplacement(nodeId, newNode.id());\n\n return newNode;\n }\n\n updateMetadata(nodeId: string, meta: Partial<NodeMetadata>): void {\n const node = this._currentTree.nodeById(nodeId);\n if (node.isNull()) {\n return;\n }\n\n const currentMeta = node.metadata();\n const newMeta: NodeMetadata = {\n ...currentMeta,\n ...meta,\n };\n\n node.setMetadata(newMeta);\n }\n\n updateFormula(nodeId: string, expression: string | undefined): void {\n const node = this._currentTree.nodeById(nodeId);\n if (node.isNull()) {\n return;\n }\n\n this._formulaParseErrors = this._formulaParseErrors.filter((e) => e.nodeId !== nodeId);\n\n if (expression === undefined) {\n node.setFormula(undefined);\n this._formulaIndex.unregisterFormula(nodeId);\n } else {\n try {\n const formula = new ParsedFormula(this._currentTree, nodeId, expression);\n node.setFormula(formula);\n this._formulaIndex.registerFormula(nodeId, formula);\n } catch (error) {\n this._formulaParseErrors = [\n ...this._formulaParseErrors,\n { nodeId, message: (error as Error).message },\n ];\n }\n }\n }\n\n updateForeignKey(nodeId: string, foreignKey: string | undefined): void {\n const node = this._currentTree.nodeById(nodeId);\n if (node.isNull()) {\n return;\n }\n node.setForeignKey(foreignKey);\n }\n\n updateDefaultValue(nodeId: string, value: unknown): void {\n const node = this._currentTree.nodeById(nodeId);\n if (node.isNull()) {\n return;\n }\n node.setDefaultValue(value);\n }\n\n wrapInArray(nodeId: string): ReplaceResult | null {\n const node = this._currentTree.nodeById(nodeId);\n if (node.isNull() || node.isArray()) {\n return null;\n }\n\n const path = this._currentTree.pathOf(nodeId);\n if (path.isEmpty()) {\n return null;\n }\n\n const name = node.name();\n const arrayNode = this._nodeFactory.createArrayNodeWithItems(name, node);\n this._currentTree.setNodeAt(path, arrayNode);\n node.setName('');\n this._currentTree.trackReplacement(nodeId, arrayNode.id());\n\n return {\n replacedNodeId: nodeId,\n newNodeId: arrayNode.id(),\n };\n }\n\n wrapRootInArray(): ReplaceResult | null {\n const currentRoot = this._currentTree.root();\n if (currentRoot.isArray()) {\n return null;\n }\n\n const oldId = currentRoot.id();\n const name = currentRoot.name();\n currentRoot.setName('');\n const arrayNode = this._nodeFactory.createArrayNodeWithItems(name, currentRoot);\n this._currentTree.replaceRoot(arrayNode);\n this._currentTree.trackReplacement(oldId, arrayNode.id());\n\n return {\n replacedNodeId: oldId,\n newNodeId: arrayNode.id(),\n };\n }\n\n replaceRoot(newType: FieldType): ReplaceResult | null {\n const currentRoot = this._currentTree.root();\n const oldId = currentRoot.id();\n const name = currentRoot.name();\n\n const newRoot = this._nodeFactory.createNode(name, newType);\n this._currentTree.replaceRoot(newRoot);\n this._currentTree.trackReplacement(oldId, newRoot.id());\n this._buildFormulaIndex();\n\n return {\n replacedNodeId: oldId,\n newNodeId: newRoot.id(),\n };\n }\n\n canMoveNode(nodeId: string, targetParentId: string): boolean {\n if (nodeId === targetParentId) {\n return false;\n }\n\n const node = this._currentTree.nodeById(nodeId);\n if (node.isNull()) {\n return false;\n }\n\n const target = this._currentTree.nodeById(targetParentId);\n if (target.isNull()) {\n return false;\n }\n\n if (!target.isObject()) {\n return false;\n }\n\n const nodePath = this._currentTree.pathOf(nodeId);\n if (nodePath.isEmpty()) {\n return false;\n }\n\n const targetPath = this._currentTree.pathOf(targetParentId);\n if (targetPath.equals(nodePath) || targetPath.isChildOf(nodePath)) {\n return false;\n }\n\n const nodeParentPath = nodePath.parent();\n if (targetPath.equals(nodeParentPath)) {\n return false;\n }\n\n if (this.isMovingOutOfArray(nodePath, targetPath)) {\n return false;\n }\n\n return true;\n }\n\n private isMovingOutOfArray(fromPath: Path, toPath: Path): boolean {\n const fromSegments = fromPath.segments();\n const toSegments = toPath.segments();\n\n for (let i = 0; i < fromSegments.length; i++) {\n const fromSeg = fromSegments[i];\n if (fromSeg?.isItems()) {\n if (!toSegments[i]?.isItems()) {\n return true;\n }\n if (this.hasPathPrefixMismatch(fromSegments, toSegments, i)) {\n return true;\n }\n }\n }\n return false;\n }\n\n private hasPathPrefixMismatch(\n fromSegments: readonly PathSegment[],\n toSegments: readonly PathSegment[],\n endIndex: number,\n ): boolean {\n for (let j = 0; j < endIndex; j++) {\n const fromSeg = fromSegments[j];\n const toSeg = toSegments[j];\n if (!fromSeg || !toSeg || !fromSeg.equals(toSeg)) {\n return true;\n }\n }\n return false;\n }\n\n hasValidDropTarget(nodeId: string): boolean {\n const node = this._currentTree.nodeById(nodeId);\n if (node.isNull()) {\n return false;\n }\n\n const nodePath = this._currentTree.pathOf(nodeId);\n if (nodePath.isEmpty()) {\n return false;\n }\n\n for (const candidateId of this._currentTree.nodeIds()) {\n if (this.canMoveNode(nodeId, candidateId)) {\n return true;\n }\n }\n\n return false;\n }\n\n moveNode(nodeId: string, targetParentId: string): void {\n if (!this.canMoveNode(nodeId, targetParentId)) {\n return;\n }\n this._currentTree.moveNode(nodeId, targetParentId);\n }\n\n getFormulaDependents(nodeId: string): readonly string[] {\n return this._formulaIndex.getDependents(nodeId);\n }\n\n hasFormulaDependents(nodeId: string): boolean {\n return this._formulaIndex.hasDependents(nodeId);\n }\n\n serializeFormula(nodeId: string): string {\n const node = this._currentTree.nodeById(nodeId);\n if (node.isNull()) {\n return '';\n }\n const formula = node.formula();\n if (!formula) {\n return '';\n }\n return FormulaSerializer.serializeExpression(\n this._currentTree,\n nodeId,\n formula,\n { strict: false },\n );\n }\n\n get validationErrors(): SchemaValidationError[] {\n return validateSchema(this._currentTree.root());\n }\n\n get formulaErrors(): TreeFormulaValidationError[] {\n return [...this._formulaParseErrors, ...validateFormulas(this._currentTree)];\n }\n\n get isDirty(): boolean {\n return this.patches.length > 0;\n }\n\n get isValid(): boolean {\n return (\n this._currentTree.root().isObject() &&\n this.validationErrors.length === 0 &&\n this.formulaErrors.length === 0\n );\n }\n\n get patches(): SchemaPatch[] {\n return this._patchBuilder.build(this._currentTree, this._baseTree);\n }\n\n get jsonPatches(): JsonPatch[] {\n return this.patches.map((p) => p.patch);\n }\n\n markAsSaved(): void {\n this._baseTree = this._currentTree.clone();\n }\n\n revert(): void {\n this._currentTree = this._baseTree.clone();\n }\n\n get plainSchema(): JsonObjectSchema {\n return this._serializer.serializeTree(this._currentTree);\n }\n\n get nodeCount(): number {\n return this._currentTree.countNodes();\n }\n\n get refSchemas(): RefSchemas | undefined {\n return this._refSchemas;\n }\n\n generateDefaultValue(options?: { arrayItemCount?: number }): unknown {\n return generateDefaultValueFn(this.plainSchema, {\n ...options,\n refSchemas: this._refSchemas,\n });\n }\n\n private _buildFormulaIndex(): void {\n this._formulaIndex.clear();\n for (const nodeId of this._currentTree.nodeIds()) {\n const node = this._currentTree.nodeById(nodeId);\n const formula = node.formula();\n if (formula) {\n this._formulaIndex.registerFormula(nodeId, formula);\n }\n }\n }\n}\n\nexport function createSchemaModel(\n schema: JsonObjectSchema,\n options?: SchemaModelOptions,\n): SchemaModel {\n return new SchemaModelImpl(schema, options);\n}\n","import { makeAutoObservable } from '../../../core/reactivity/index.js';\nimport type { Diagnostic } from '../../../core/validation/types.js';\nimport type { JsonValuePatch } from '../../../types/json-value-patch.types.js';\nimport type { ValueNode } from '../../value-node/types.js';\nimport type { RowModel, TableModelLike, ValueTreeLike } from './types.js';\n\nconst UNSET_INDEX = -1;\n\nexport class RowModelImpl implements RowModel {\n private _tableModel: TableModelLike | null = null;\n\n constructor(\n private readonly _rowId: string,\n private readonly _tree: ValueTreeLike,\n ) {\n makeAutoObservable(this, {\n _rowId: false,\n _tree: false,\n _tableModel: 'observable.ref',\n });\n }\n\n get rowId(): string {\n return this._rowId;\n }\n\n get tableModel(): TableModelLike | null {\n return this._tableModel;\n }\n\n get tree(): ValueTreeLike {\n return this._tree;\n }\n\n get index(): number {\n if (!this._tableModel) {\n return UNSET_INDEX;\n }\n return this._tableModel.getRowIndex(this._rowId);\n }\n\n get prev(): RowModel | null {\n if (!this._tableModel) {\n return null;\n }\n const currentIndex = this.index;\n if (currentIndex <= 0) {\n return null;\n }\n return this._tableModel.getRowAt(currentIndex - 1) ?? null;\n }\n\n get next(): RowModel | null {\n if (!this._tableModel) {\n return null;\n }\n const currentIndex = this.index;\n if (currentIndex === UNSET_INDEX || currentIndex >= this._tableModel.rowCount - 1) {\n return null;\n }\n return this._tableModel.getRowAt(currentIndex + 1) ?? null;\n }\n\n get(path: string): ValueNode | undefined {\n return this._tree.get(path);\n }\n\n getValue(path: string): unknown {\n return this._tree.getValue(path);\n }\n\n setValue(path: string, value: unknown): void {\n this._tree.setValue(path, value);\n }\n\n getPlainValue(): unknown {\n return this._tree.getPlainValue();\n }\n\n get isDirty(): boolean {\n return this._tree.isDirty;\n }\n\n get isValid(): boolean {\n return this._tree.isValid;\n }\n\n get errors(): readonly Diagnostic[] {\n return this._tree.errors;\n }\n\n getPatches(): readonly JsonValuePatch[] {\n return this._tree.getPatches();\n }\n\n commit(): void {\n this._tree.commit();\n }\n\n revert(): void {\n this._tree.revert();\n }\n\n setTableModel(tableModel: TableModelLike | null): void {\n this._tableModel = tableModel;\n }\n}\n","import type { Diagnostic } from '../../core/validation/types.js';\nimport type { JsonSchema } from '../../types/schema.types.js';\nimport type {\n ArrayValueNode,\n ObjectValueNode,\n PrimitiveValueNode,\n ValueNode,\n ValueType,\n} from './types.js';\n\nlet nodeIdCounter = 0;\n\nexport function generateNodeId(): string {\n return `node-${++nodeIdCounter}`;\n}\n\nexport function resetNodeIdCounter(): void {\n nodeIdCounter = 0;\n}\n\nexport abstract class BaseValueNode implements ValueNode {\n readonly id: string;\n abstract readonly type: ValueType;\n readonly schema: JsonSchema;\n\n private _parent: ValueNode | null = null;\n private readonly _name: string;\n\n constructor(id: string | undefined, name: string, schema: JsonSchema) {\n this.id = id ?? generateNodeId();\n this._name = name;\n this.schema = schema;\n }\n\n get parent(): ValueNode | null {\n return this._parent;\n }\n\n set parent(value: ValueNode | null) {\n this._parent = value;\n }\n\n get name(): string {\n return this._name;\n }\n\n abstract get value(): unknown;\n abstract getPlainValue(): unknown;\n\n isObject(): this is ObjectValueNode {\n return false;\n }\n\n isArray(): this is ArrayValueNode {\n return false;\n }\n\n isPrimitive(): this is PrimitiveValueNode {\n return false;\n }\n\n get errors(): readonly Diagnostic[] {\n return [];\n }\n\n get warnings(): readonly Diagnostic[] {\n return [];\n }\n\n get isValid(): boolean {\n return this.errors.length === 0;\n }\n\n get hasWarnings(): boolean {\n return this.warnings.length > 0;\n }\n}\n","import type { Diagnostic } from '../../core/validation/types.js';\nimport type { JsonSchema } from '../../types/schema.types.js';\nimport type { NodeFactory } from './NodeFactory.js';\n\nexport enum ValueType {\n String = 'string',\n Number = 'number',\n Boolean = 'boolean',\n Object = 'object',\n Array = 'array',\n}\n\nexport interface FormulaDefinition {\n readonly expression: string;\n readonly version: number;\n}\n\nexport interface FormulaWarning {\n readonly type:\n | 'nan'\n | 'infinity'\n | 'type-coercion'\n | 'division-by-zero'\n | 'null-reference'\n | 'runtime-error';\n readonly message: string;\n readonly expression: string;\n readonly computedValue: unknown;\n}\n\nexport interface ValueNode {\n readonly id: string;\n readonly type: ValueType;\n readonly schema: JsonSchema;\n\n parent: ValueNode | null;\n readonly name: string;\n\n readonly value: unknown;\n getPlainValue(): unknown;\n\n isObject(): this is ObjectValueNode;\n isArray(): this is ArrayValueNode;\n isPrimitive(): this is PrimitiveValueNode;\n\n readonly errors: readonly Diagnostic[];\n readonly warnings: readonly Diagnostic[];\n readonly isValid: boolean;\n readonly hasWarnings: boolean;\n}\n\nexport interface DirtyTrackable {\n readonly isDirty: boolean;\n commit(): void;\n revert(): void;\n}\n\nexport interface PrimitiveValueNode extends ValueNode, DirtyTrackable {\n value: string | number | boolean;\n readonly baseValue: string | number | boolean;\n readonly defaultValue: unknown;\n readonly formula: FormulaDefinition | undefined;\n readonly formulaWarning: FormulaWarning | null;\n readonly isReadOnly: boolean;\n\n setValue(value: unknown, options?: { internal?: boolean }): void;\n setFormulaWarning(warning: FormulaWarning | null): void;\n}\n\nexport interface ObjectValueNode extends ValueNode, DirtyTrackable {\n readonly value: Record<string, ValueNode>;\n readonly children: readonly ValueNode[];\n\n child(name: string): ValueNode | undefined;\n addChild(node: ValueNode): void;\n removeChild(name: string): void;\n hasChild(name: string): boolean;\n}\n\nexport interface ArrayValueNode extends ValueNode, DirtyTrackable {\n readonly value: readonly ValueNode[];\n readonly length: number;\n\n at(index: number): ValueNode | undefined;\n push(node: ValueNode): void;\n insertAt(index: number, node: ValueNode): void;\n removeAt(index: number): void;\n move(fromIndex: number, toIndex: number): void;\n replaceAt(index: number, node: ValueNode): void;\n clear(): void;\n\n setNodeFactory(factory: NodeFactory): void;\n pushValue(value?: unknown): void;\n insertValueAt(index: number, value?: unknown): void;\n}\n\nexport interface ValueNodeOptions {\n readonly id?: string;\n readonly name: string;\n readonly schema: JsonSchema;\n readonly parent?: ValueNode | null;\n}\n\nexport interface PrimitiveNodeOptions extends ValueNodeOptions {\n readonly value?: unknown;\n}\n\nexport interface ObjectNodeOptions extends ValueNodeOptions {\n readonly children?: ValueNode[];\n}\n\nexport interface ArrayNodeOptions extends ValueNodeOptions {\n readonly items?: ValueNode[];\n}\n\nexport function extractFormulaDefinition(\n schema: JsonSchema,\n): FormulaDefinition | undefined {\n if ('x-formula' in schema && schema['x-formula']) {\n const xFormula = schema['x-formula'];\n return { expression: xFormula.expression, version: xFormula.version };\n }\n return undefined;\n}\n","import { makeObservable, observable } from '../../core/reactivity/index.js';\nimport type { Diagnostic } from '../../core/validation/types.js';\nimport type { JsonArraySchema, JsonSchema } from '../../types/schema.types.js';\nimport { BaseValueNode } from './BaseValueNode.js';\nimport type { NodeFactory } from './NodeFactory.js';\nimport type { ArrayValueNode as IArrayValueNode, ValueNode } from './types.js';\nimport { ValueType } from './types.js';\n\nexport class ArrayValueNode extends BaseValueNode implements IArrayValueNode {\n readonly type = ValueType.Array;\n\n private _items: ValueNode[];\n private _baseItems: ValueNode[];\n private _nodeFactory: NodeFactory | null = null;\n\n constructor(\n id: string | undefined,\n name: string,\n schema: JsonSchema,\n items?: ValueNode[],\n ) {\n super(id, name, schema);\n\n this._items = observable.array<ValueNode>();\n this._baseItems = [];\n\n if (items) {\n for (const item of items) {\n item.parent = this;\n this._items.push(item);\n }\n }\n\n this._baseItems = [...this._items];\n\n makeObservable(this, {\n _items: 'observable',\n _baseItems: 'observable',\n value: 'computed',\n length: 'computed',\n isDirty: 'computed',\n errors: 'computed',\n warnings: 'computed',\n push: 'action',\n insertAt: 'action',\n removeAt: 'action',\n move: 'action',\n replaceAt: 'action',\n clear: 'action',\n commit: 'action',\n revert: 'action',\n pushValue: 'action',\n insertValueAt: 'action',\n });\n }\n\n get value(): readonly ValueNode[] {\n return this._items;\n }\n\n get length(): number {\n return this._items.length;\n }\n\n getPlainValue(): unknown[] {\n return this._items.map((item) => item.getPlainValue());\n }\n\n at(index: number): ValueNode | undefined {\n if (index < 0) {\n return this._items[this._items.length + index];\n }\n return this._items[index];\n }\n\n push(node: ValueNode): void {\n node.parent = this;\n this._items.push(node);\n }\n\n insertAt(index: number, node: ValueNode): void {\n if (index < 0 || index > this._items.length) {\n throw new Error(`Index out of bounds: ${index}`);\n }\n node.parent = this;\n this._items.splice(index, 0, node);\n }\n\n removeAt(index: number): void {\n if (index < 0 || index >= this._items.length) {\n throw new Error(`Index out of bounds: ${index}`);\n }\n const removed = this._items.splice(index, 1)[0];\n if (removed) {\n removed.parent = null;\n }\n }\n\n move(fromIndex: number, toIndex: number): void {\n if (fromIndex < 0 || fromIndex >= this._items.length) {\n throw new Error(`Source index out of bounds: ${fromIndex}`);\n }\n if (toIndex < 0 || toIndex >= this._items.length) {\n throw new Error(`Target index out of bounds: ${toIndex}`);\n }\n if (fromIndex === toIndex) {\n return;\n }\n\n const [item] = this._items.splice(fromIndex, 1);\n if (item) {\n this._items.splice(toIndex, 0, item);\n }\n }\n\n replaceAt(index: number, node: ValueNode): void {\n if (index < 0 || index >= this._items.length) {\n throw new Error(`Index out of bounds: ${index}`);\n }\n const oldNode = this._items[index];\n if (oldNode) {\n oldNode.parent = null;\n }\n node.parent = this;\n this._items[index] = node;\n }\n\n clear(): void {\n for (const item of this._items) {\n item.parent = null;\n }\n this._items.length = 0;\n }\n\n setNodeFactory(factory: NodeFactory): void {\n this._nodeFactory = factory;\n }\n\n pushValue(value?: unknown): void {\n const node = this.createItemNode(this._items.length, value);\n this.push(node);\n }\n\n insertValueAt(index: number, value?: unknown): void {\n const node = this.createItemNode(index, value);\n this.insertAt(index, node);\n }\n\n private createItemNode(index: number, value?: unknown): ValueNode {\n if (!this._nodeFactory) {\n throw new Error('NodeFactory not set');\n }\n\n const arraySchema = this.schema as JsonArraySchema;\n const itemSchema = arraySchema.items;\n if (!itemSchema) {\n throw new Error('No items schema');\n }\n\n const itemValue =\n value === undefined && 'default' in itemSchema\n ? itemSchema.default\n : value;\n const node = this._nodeFactory.create(String(index), itemSchema, itemValue);\n\n this.propagateFactory(node);\n\n return node;\n }\n\n private propagateFactory(node: ValueNode): void {\n if (!this._nodeFactory) {\n return;\n }\n\n if (node.isArray()) {\n node.setNodeFactory(this._nodeFactory);\n for (const item of node.value) {\n this.propagateFactory(item);\n }\n } else if (node.isObject()) {\n for (const child of node.children) {\n this.propagateFactory(child);\n }\n }\n }\n\n get isDirty(): boolean {\n if (this._items.length !== this._baseItems.length) {\n return true;\n }\n\n for (let i = 0; i < this._items.length; i++) {\n if (this._items[i] !== this._baseItems[i]) {\n return true;\n }\n }\n\n for (const item of this._items) {\n if ('isDirty' in item && (item as { isDirty: boolean }).isDirty) {\n return true;\n }\n }\n\n return false;\n }\n\n commit(): void {\n this._baseItems = [...this._items];\n for (const item of this._items) {\n if ('commit' in item && typeof item.commit === 'function') {\n (item as { commit: () => void }).commit();\n }\n }\n }\n\n revert(): void {\n for (const item of this._items) {\n item.parent = null;\n }\n\n this._items = observable.array<ValueNode>();\n for (const baseItem of this._baseItems) {\n this._items.push(baseItem);\n }\n\n for (const item of this._items) {\n item.parent = this;\n if ('revert' in item && typeof item.revert === 'function') {\n (item as { revert: () => void }).revert();\n }\n }\n }\n\n override isArray(): this is IArrayValueNode {\n return true;\n }\n\n override get errors(): readonly Diagnostic[] {\n const errors: Diagnostic[] = [];\n\n for (const item of this._items) {\n errors.push(...item.errors);\n }\n\n return errors;\n }\n\n override get warnings(): readonly Diagnostic[] {\n const warnings: Diagnostic[] = [];\n\n for (const item of this._items) {\n warnings.push(...item.warnings);\n }\n\n return warnings;\n }\n}\n","import { makeObservable } from '../../core/reactivity/index.js';\nimport type { Diagnostic } from '../../core/validation/types.js';\nimport type { JsonSchema } from '../../types/schema.types.js';\nimport { BaseValueNode } from './BaseValueNode.js';\nimport type {\n FormulaDefinition,\n FormulaWarning,\n PrimitiveValueNode,\n} from './types.js';\nimport { extractFormulaDefinition } from './types.js';\n\nexport abstract class BasePrimitiveValueNode<T extends string | number | boolean>\n extends BaseValueNode\n implements PrimitiveValueNode\n{\n protected _value: T;\n protected _baseValue: T;\n protected _formulaWarning: FormulaWarning | null = null;\n\n constructor(\n id: string | undefined,\n name: string,\n schema: JsonSchema,\n value: T | undefined,\n defaultValue: T,\n ) {\n super(id, name, schema);\n const schemaDefault = 'default' in schema ? (schema.default as T) : undefined;\n const initialValue = value ?? schemaDefault ?? defaultValue;\n this._value = initialValue;\n this._baseValue = initialValue;\n }\n\n protected initObservable(): void {\n makeObservable(this, {\n _value: 'observable',\n _baseValue: 'observable',\n _formulaWarning: 'observable',\n value: 'computed',\n baseValue: 'computed',\n isDirty: 'computed',\n errors: 'computed',\n warnings: 'computed',\n setValue: 'action',\n setFormulaWarning: 'action',\n commit: 'action',\n revert: 'action',\n });\n }\n\n get value(): T {\n return this._value;\n }\n\n set value(newValue: T) {\n if (this.isReadOnly) {\n throw new Error(`Cannot set value on read-only field: ${this.name}`);\n }\n this._value = newValue;\n }\n\n get baseValue(): T {\n return this._baseValue;\n }\n\n get isDirty(): boolean {\n return this._value !== this._baseValue;\n }\n\n abstract get defaultValue(): T;\n\n get formula(): FormulaDefinition | undefined {\n return extractFormulaDefinition(this.schema);\n }\n\n get formulaWarning(): FormulaWarning | null {\n return this._formulaWarning;\n }\n\n get isReadOnly(): boolean {\n const readOnly = 'readOnly' in this.schema ? this.schema.readOnly : false;\n return readOnly === true || this.formula !== undefined;\n }\n\n getPlainValue(): T {\n return this._value;\n }\n\n setValue(value: unknown, options?: { internal?: boolean }): void {\n if (this.isReadOnly && !options?.internal) {\n throw new Error(`Cannot set value on read-only field: ${this.name}`);\n }\n this._value = this.coerceValue(value);\n }\n\n protected abstract coerceValue(value: unknown): T;\n\n setFormulaWarning(warning: FormulaWarning | null): void {\n this._formulaWarning = warning;\n }\n\n commit(): void {\n this._baseValue = this._value;\n }\n\n revert(): void {\n this._value = this._baseValue;\n }\n\n override isPrimitive(): this is PrimitiveValueNode {\n return true;\n }\n\n override get errors(): readonly Diagnostic[] {\n return this.computeErrors();\n }\n\n protected computeErrors(): readonly Diagnostic[] {\n return [];\n }\n\n override get warnings(): readonly Diagnostic[] {\n if (!this._formulaWarning) {\n return [];\n }\n\n return [\n {\n severity: 'warning',\n type: this._formulaWarning.type,\n message: this._formulaWarning.message,\n path: this.name,\n params: {\n expression: this._formulaWarning.expression,\n computedValue: this._formulaWarning.computedValue,\n },\n },\n ];\n }\n}\n","import type { JsonSchema } from '../../types/schema.types.js';\nimport { BasePrimitiveValueNode } from './BasePrimitiveValueNode.js';\nimport { ValueType } from './types.js';\n\nexport class BooleanValueNode extends BasePrimitiveValueNode<boolean> {\n readonly type = ValueType.Boolean;\n\n constructor(\n id: string | undefined,\n name: string,\n schema: JsonSchema,\n value?: boolean,\n ) {\n super(id, name, schema, value, false);\n this.initObservable();\n }\n\n get defaultValue(): boolean {\n return 'default' in this.schema ? (this.schema.default as boolean) : false;\n }\n\n protected coerceValue(value: unknown): boolean {\n if (typeof value === 'boolean') {\n return value;\n }\n return Boolean(value);\n }\n}\n","export class ForeignKeyNotFoundError extends Error {\n constructor(\n public readonly tableId: string,\n public readonly rowId?: string,\n ) {\n const message = rowId\n ? `Foreign key row not found: ${tableId}/${rowId}`\n : `Foreign key table not found: ${tableId}`;\n super(message);\n this.name = 'ForeignKeyNotFoundError';\n }\n}\n\nexport class ForeignKeyResolverNotConfiguredError extends Error {\n constructor() {\n super('ForeignKeyResolver is not configured with a loader');\n this.name = 'ForeignKeyResolverNotConfiguredError';\n }\n}\n","import type { Diagnostic } from '../../core/validation/types.js';\nimport type { JsonSchema, JsonStringSchema } from '../../types/schema.types.js';\nimport { BasePrimitiveValueNode } from './BasePrimitiveValueNode.js';\nimport { ValueType } from './types.js';\n\nexport class StringValueNode extends BasePrimitiveValueNode<string> {\n readonly type = ValueType.String;\n\n constructor(\n id: string | undefined,\n name: string,\n schema: JsonSchema,\n value?: string,\n ) {\n super(id, name, schema, value, '');\n this.initObservable();\n }\n\n get defaultValue(): string {\n return 'default' in this.schema ? (this.schema.default as string) : '';\n }\n\n protected coerceValue(value: unknown): string {\n if (typeof value === 'string') {\n return value;\n }\n if (value === null || value === undefined) {\n return '';\n }\n if (typeof value === 'object') {\n return JSON.stringify(value);\n }\n return String(value);\n }\n\n protected override computeErrors(): readonly Diagnostic[] {\n const errors: Diagnostic[] = [];\n\n this.validateRequired(errors);\n this.validateForeignKey(errors);\n this.validateMinLength(errors);\n this.validateMaxLength(errors);\n this.validatePattern(errors);\n this.validateEnum(errors);\n\n return errors;\n }\n\n private validateRequired(errors: Diagnostic[]): void {\n const stringSchema = this.schema as JsonStringSchema;\n if ('required' in stringSchema && stringSchema.required && this._value === '') {\n errors.push({\n severity: 'error',\n type: 'required',\n message: 'Field is required',\n path: this.name,\n });\n }\n }\n\n private validateForeignKey(errors: Diagnostic[]): void {\n const stringSchema = this.schema as JsonStringSchema;\n const foreignKey = stringSchema.foreignKey;\n if (foreignKey && this._value === '') {\n errors.push({\n severity: 'error',\n type: 'foreignKey',\n message: `Reference to ${foreignKey} is required`,\n path: this.name,\n params: { table: foreignKey },\n });\n }\n }\n\n private validateMinLength(errors: Diagnostic[]): void {\n const stringSchema = this.schema as Partial<{ minLength?: number }>;\n const minLength = stringSchema.minLength;\n if (\n minLength !== undefined &&\n this._value.length > 0 &&\n this._value.length < minLength\n ) {\n errors.push({\n severity: 'error',\n type: 'minLength',\n message: `Minimum length is ${minLength}`,\n path: this.name,\n params: { min: minLength, actual: this._value.length },\n });\n }\n }\n\n private validateMaxLength(errors: Diagnostic[]): void {\n const stringSchema = this.schema as Partial<{ maxLength?: number }>;\n const maxLength = stringSchema.maxLength;\n if (maxLength !== undefined && this._value.length > maxLength) {\n errors.push({\n severity: 'error',\n type: 'maxLength',\n message: `Maximum length is ${maxLength}`,\n path: this.name,\n params: { max: maxLength, actual: this._value.length },\n });\n }\n }\n\n private validatePattern(errors: Diagnostic[]): void {\n const stringSchema = this.schema as JsonStringSchema;\n const pattern = stringSchema.pattern;\n if (!pattern || this._value.length === 0) {\n return;\n }\n\n try {\n if (!new RegExp(pattern).test(this._value)) {\n errors.push({\n severity: 'error',\n type: 'pattern',\n message: 'Value does not match pattern',\n path: this.name,\n params: { pattern },\n });\n }\n } catch {\n errors.push({\n severity: 'error',\n type: 'invalidPattern',\n message: 'Invalid regex pattern in schema',\n path: this.name,\n params: { pattern },\n });\n }\n }\n\n private validateEnum(errors: Diagnostic[]): void {\n const stringSchema = this.schema as JsonStringSchema;\n const enumValues = stringSchema.enum;\n if (\n enumValues &&\n enumValues.length > 0 &&\n !enumValues.includes(this._value)\n ) {\n errors.push({\n severity: 'error',\n type: 'enum',\n message: 'Value is not in allowed list',\n path: this.name,\n params: { allowed: enumValues, actual: this._value },\n });\n }\n }\n}\n","import type { JsonObjectSchema, JsonSchema } from '../../types/schema.types.js';\nimport type { ForeignKeyResolver } from '../foreign-key-resolver/ForeignKeyResolver.js';\nimport type { RowData } from '../foreign-key-resolver/types.js';\nimport {\n ForeignKeyNotFoundError,\n ForeignKeyResolverNotConfiguredError,\n} from '../foreign-key-resolver/errors.js';\nimport { StringValueNode } from './StringValueNode.js';\nimport type { ValueNode } from './types.js';\n\nexport interface ForeignKeyValueNode extends ValueNode {\n readonly value: string;\n readonly foreignKey: string;\n\n getRow(): Promise<RowData>;\n getSchema(): Promise<JsonObjectSchema>;\n\n readonly isLoading: boolean;\n}\n\nexport function isForeignKeyValueNode(node: ValueNode): node is ForeignKeyValueNode {\n return (\n node instanceof ForeignKeyValueNodeImpl ||\n ('foreignKey' in node && typeof (node as ForeignKeyValueNode).foreignKey === 'string')\n );\n}\n\nexport class ForeignKeyValueNodeImpl extends StringValueNode implements ForeignKeyValueNode {\n private readonly _foreignKey: string;\n\n constructor(\n id: string | undefined,\n name: string,\n schema: JsonSchema,\n value?: string,\n private readonly fkResolver?: ForeignKeyResolver,\n ) {\n super(id, name, schema, value);\n\n const schemaFk =\n 'foreignKey' in schema && typeof schema.foreignKey === 'string'\n ? schema.foreignKey\n : undefined;\n\n if (!schemaFk) {\n throw new Error('ForeignKeyValueNode requires a schema with foreignKey property');\n }\n\n this._foreignKey = schemaFk;\n }\n\n get foreignKey(): string {\n return this._foreignKey;\n }\n\n get isLoading(): boolean {\n if (!this.fkResolver || !this._value) {\n return false;\n }\n return this.fkResolver.isLoadingRow(this._foreignKey, this._value);\n }\n\n async getRow(): Promise<RowData> {\n if (!this.fkResolver) {\n throw new ForeignKeyResolverNotConfiguredError();\n }\n\n if (!this._value) {\n throw new ForeignKeyNotFoundError(this._foreignKey, this._value);\n }\n\n return this.fkResolver.getRowData(this._foreignKey, this._value);\n }\n\n async getSchema(): Promise<JsonObjectSchema> {\n if (!this.fkResolver) {\n throw new ForeignKeyResolverNotConfiguredError();\n }\n\n return this.fkResolver.getSchema(this._foreignKey);\n }\n}\n","import type { Diagnostic } from '../../core/validation/types.js';\nimport type { JsonSchema } from '../../types/schema.types.js';\nimport { JsonSchemaTypeName } from '../../types/schema.types.js';\nimport { BasePrimitiveValueNode } from './BasePrimitiveValueNode.js';\nimport { ValueType } from './types.js';\n\nexport class NumberValueNode extends BasePrimitiveValueNode<number> {\n readonly type = ValueType.Number;\n\n constructor(\n id: string | undefined,\n name: string,\n schema: JsonSchema,\n value?: number,\n ) {\n super(id, name, schema, value, 0);\n this.initObservable();\n }\n\n get defaultValue(): number {\n return 'default' in this.schema ? (this.schema.default as number) : 0;\n }\n\n protected coerceValue(value: unknown): number {\n if (typeof value === 'number') {\n return value;\n }\n return Number(value) || 0;\n }\n\n protected override computeErrors(): readonly Diagnostic[] {\n const errors: Diagnostic[] = [];\n\n if (!('type' in this.schema) || this.schema.type !== JsonSchemaTypeName.Number) {\n return errors;\n }\n\n const numberSchema = this.schema;\n\n const minimum = numberSchema.minimum;\n if (minimum !== undefined && this._value < minimum) {\n errors.push({\n severity: 'error',\n type: 'min',\n message: `Value must be at least ${minimum}`,\n path: this.name,\n params: { min: minimum, actual: this._value },\n });\n }\n\n const maximum = numberSchema.maximum;\n if (maximum !== undefined && this._value > maximum) {\n errors.push({\n severity: 'error',\n type: 'max',\n message: `Value must be at most ${maximum}`,\n path: this.name,\n params: { max: maximum, actual: this._value },\n });\n }\n\n const enumValues = numberSchema.enum;\n if (\n enumValues &&\n enumValues.length > 0 &&\n !enumValues.includes(this._value)\n ) {\n errors.push({\n severity: 'error',\n type: 'enum',\n message: 'Value is not in allowed list',\n path: this.name,\n params: { allowed: enumValues, actual: this._value },\n });\n }\n\n return errors;\n }\n}\n","import { makeObservable, observable } from '../../core/reactivity/index.js';\nimport type { Diagnostic } from '../../core/validation/types.js';\nimport type { JsonSchema } from '../../types/schema.types.js';\nimport { BaseValueNode } from './BaseValueNode.js';\nimport type { ObjectValueNode as IObjectValueNode, ValueNode } from './types.js';\nimport { ValueType } from './types.js';\n\nexport class ObjectValueNode extends BaseValueNode implements IObjectValueNode {\n readonly type = ValueType.Object;\n\n private _children: Map<string, ValueNode>;\n private _baseChildren: Map<string, ValueNode>;\n\n constructor(\n id: string | undefined,\n name: string,\n schema: JsonSchema,\n children?: ValueNode[],\n ) {\n super(id, name, schema);\n\n this._children = observable.map<string, ValueNode>();\n this._baseChildren = new Map();\n\n if (children) {\n for (const child of children) {\n this._children.set(child.name, child);\n child.parent = this;\n }\n }\n\n this._baseChildren = new Map(this._children);\n\n makeObservable(this, {\n _children: 'observable',\n _baseChildren: 'observable',\n value: 'computed',\n children: 'computed',\n isDirty: 'computed',\n errors: 'computed',\n warnings: 'computed',\n addChild: 'action',\n removeChild: 'action',\n commit: 'action',\n revert: 'action',\n });\n }\n\n get value(): Record<string, ValueNode> {\n return Object.fromEntries(this._children);\n }\n\n get children(): readonly ValueNode[] {\n return Array.from(this._children.values());\n }\n\n getPlainValue(): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n for (const [key, node] of this._children) {\n result[key] = node.getPlainValue();\n }\n return result;\n }\n\n child(name: string): ValueNode | undefined {\n return this._children.get(name);\n }\n\n hasChild(name: string): boolean {\n return this._children.has(name);\n }\n\n addChild(node: ValueNode): void {\n const existing = this._children.get(node.name);\n if (existing) {\n existing.parent = null;\n }\n node.parent = this;\n this._children.set(node.name, node);\n }\n\n removeChild(name: string): void {\n const node = this._children.get(name);\n if (node) {\n node.parent = null;\n this._children.delete(name);\n }\n }\n\n get isDirty(): boolean {\n if (this._children.size !== this._baseChildren.size) {\n return true;\n }\n\n for (const [key, child] of this._children) {\n if (this._baseChildren.get(key) !== child) {\n return true;\n }\n }\n\n for (const child of this._children.values()) {\n if ('isDirty' in child && (child as { isDirty: boolean }).isDirty) {\n return true;\n }\n }\n\n return false;\n }\n\n commit(): void {\n this._baseChildren = new Map(this._children);\n for (const child of this._children.values()) {\n if ('commit' in child && typeof child.commit === 'function') {\n (child as { commit: () => void }).commit();\n }\n }\n }\n\n revert(): void {\n for (const child of this._children.values()) {\n child.parent = null;\n }\n\n this._children = observable.map<string, ValueNode>();\n for (const [key, value] of this._baseChildren) {\n this._children.set(key, value);\n }\n\n for (const child of this._children.values()) {\n child.parent = this;\n if ('revert' in child && typeof child.revert === 'function') {\n (child as { revert: () => void }).revert();\n }\n }\n }\n\n override isObject(): this is IObjectValueNode {\n return true;\n }\n\n override get errors(): readonly Diagnostic[] {\n const errors: Diagnostic[] = [];\n\n for (const child of this._children.values()) {\n errors.push(...child.errors);\n }\n\n return errors;\n }\n\n override get warnings(): readonly Diagnostic[] {\n const warnings: Diagnostic[] = [];\n\n for (const child of this._children.values()) {\n warnings.push(...child.warnings);\n }\n\n return warnings;\n }\n}\n","import type {\n JsonArraySchema,\n JsonObjectSchema,\n JsonRefSchema,\n JsonSchema,\n JsonStringSchema,\n} from '../../types/schema.types.js';\nimport type { ForeignKeyResolver } from '../foreign-key-resolver/ForeignKeyResolver.js';\nimport { ArrayValueNode } from './ArrayValueNode.js';\nimport { BooleanValueNode } from './BooleanValueNode.js';\nimport { ForeignKeyValueNodeImpl } from './ForeignKeyValueNode.js';\nimport { NumberValueNode } from './NumberValueNode.js';\nimport { ObjectValueNode } from './ObjectValueNode.js';\nimport { StringValueNode } from './StringValueNode.js';\nimport type { ValueNode } from './types.js';\n\nexport type NodeFactoryFn = (\n name: string,\n schema: JsonSchema,\n value: unknown,\n id?: string,\n) => ValueNode;\n\nexport class NodeFactoryRegistry {\n private readonly factories = new Map<string, NodeFactoryFn>();\n\n register(schemaType: string, factory: NodeFactoryFn): this {\n this.factories.set(schemaType, factory);\n return this;\n }\n\n get(schemaType: string): NodeFactoryFn | undefined {\n return this.factories.get(schemaType);\n }\n\n has(schemaType: string): boolean {\n return this.factories.has(schemaType);\n }\n}\n\nexport type RefSchemas = Record<string, JsonSchema>;\n\nexport interface NodeFactoryOptions {\n refSchemas?: RefSchemas;\n fkResolver?: ForeignKeyResolver;\n}\n\nexport class NodeFactory {\n private readonly refSchemas: RefSchemas | undefined;\n\n constructor(\n private readonly registry: NodeFactoryRegistry,\n options?: NodeFactoryOptions,\n ) {\n this.refSchemas = options?.refSchemas;\n }\n\n create(\n name: string,\n schema: JsonSchema,\n value: unknown,\n id?: string,\n ): ValueNode {\n const resolvedSchema = this.resolveSchema(schema);\n const schemaType = this.getSchemaType(resolvedSchema);\n const factory = this.registry.get(schemaType);\n\n if (!factory) {\n throw new Error(`Unknown schema type: ${schemaType}`);\n }\n\n return factory(name, resolvedSchema, value, id);\n }\n\n createTree(schema: JsonSchema, value: unknown): ValueNode {\n return this.create('', schema, value);\n }\n\n private getSchemaType(schema: JsonSchema): string {\n if ('type' in schema) {\n return schema.type;\n }\n return 'object';\n }\n\n private resolveSchema(schema: JsonSchema): JsonSchema {\n if (!('$ref' in schema) || !this.refSchemas) {\n return schema;\n }\n\n const refSchema: JsonRefSchema = schema;\n const resolved = this.refSchemas[refSchema.$ref];\n if (!resolved) {\n return schema;\n }\n\n return {\n ...resolved,\n $ref: refSchema.$ref,\n title: refSchema.title ?? ('title' in resolved ? resolved.title : undefined),\n description:\n refSchema.description ??\n ('description' in resolved ? resolved.description : undefined),\n deprecated:\n refSchema.deprecated ??\n ('deprecated' in resolved ? resolved.deprecated : undefined),\n } as JsonSchema;\n }\n}\n\nfunction createStringFactory(fkResolver?: ForeignKeyResolver): NodeFactoryFn {\n return (name, schema, value, id) => {\n const stringSchema = schema as JsonStringSchema;\n if (stringSchema.foreignKey) {\n return new ForeignKeyValueNodeImpl(\n id,\n name,\n schema,\n value as string | undefined,\n fkResolver,\n );\n }\n\n return new StringValueNode(\n id,\n name,\n schema,\n value as string | undefined,\n );\n };\n}\n\nfunction createNumberFactory(): NodeFactoryFn {\n return (name, schema, value, id) => {\n return new NumberValueNode(\n id,\n name,\n schema,\n value as number | undefined,\n );\n };\n}\n\nfunction createBooleanFactory(): NodeFactoryFn {\n return (name, schema, value, id) => {\n return new BooleanValueNode(\n id,\n name,\n schema,\n value as boolean | undefined,\n );\n };\n}\n\nfunction createObjectFactory(nodeFactory: NodeFactory): NodeFactoryFn {\n return (name, schema, value, id) => {\n const objValue = (value ?? {}) as Record<string, unknown>;\n const children: ValueNode[] = [];\n\n const objectSchema = schema as JsonObjectSchema;\n const properties = objectSchema.properties ?? {};\n for (const [propName, propSchema] of Object.entries(properties)) {\n const propValue = objValue[propName];\n const childNode = nodeFactory.create(propName, propSchema, propValue);\n children.push(childNode);\n }\n\n return new ObjectValueNode(id, name, schema, children);\n };\n}\n\nfunction createArrayFactory(nodeFactory: NodeFactory): NodeFactoryFn {\n return (name, schema, value, id) => {\n const arrValue = (value ?? []) as unknown[];\n const arraySchema = schema as JsonArraySchema;\n const itemSchema = arraySchema.items ?? { type: 'string', default: '' };\n const items: ValueNode[] = [];\n\n for (let i = 0; i < arrValue.length; i++) {\n const itemValue = arrValue[i];\n const itemNode = nodeFactory.create(String(i), itemSchema, itemValue);\n items.push(itemNode);\n }\n\n const arrayNode = new ArrayValueNode(id, name, schema, items);\n arrayNode.setNodeFactory(nodeFactory);\n\n return arrayNode;\n };\n}\n\nexport function createDefaultRegistry(fkResolver?: ForeignKeyResolver): NodeFactoryRegistry {\n const registry = new NodeFactoryRegistry();\n\n registry.register('string', createStringFactory(fkResolver));\n registry.register('number', createNumberFactory());\n registry.register('boolean', createBooleanFactory());\n\n return registry;\n}\n\nexport function createNodeFactory(options?: NodeFactoryOptions): NodeFactory {\n const registry = createDefaultRegistry(options?.fkResolver);\n const factory = new NodeFactory(registry, options);\n\n registry.register('object', createObjectFactory(factory));\n registry.register('array', createArrayFactory(factory));\n\n return factory;\n}\n","import type { ValuePathSegment } from './types.js';\n\nexport class PropertySegment implements ValuePathSegment {\n constructor(private readonly name: string) {}\n\n isProperty(): boolean {\n return true;\n }\n\n isIndex(): boolean {\n return false;\n }\n\n propertyName(): string {\n return this.name;\n }\n\n indexValue(): number {\n throw new Error('Property segment has no index value');\n }\n\n equals(other: ValuePathSegment): boolean {\n return other.isProperty() && other.propertyName() === this.name;\n }\n}\n\nexport class IndexSegment implements ValuePathSegment {\n constructor(private readonly index: number) {}\n\n isProperty(): boolean {\n return false;\n }\n\n isIndex(): boolean {\n return true;\n }\n\n propertyName(): string {\n throw new Error('Index segment has no property name');\n }\n\n indexValue(): number {\n return this.index;\n }\n\n equals(other: ValuePathSegment): boolean {\n return other.isIndex() && other.indexValue() === this.index;\n }\n}\n","import { AbstractBasePath } from '../base-path/AbstractBasePath.js';\nimport type { ValuePath, ValuePathSegment } from './types.js';\nimport { PropertySegment, IndexSegment } from './ValuePathSegment.js';\n\nclass ValuePathImpl\n extends AbstractBasePath<ValuePathSegment, ValuePath>\n implements ValuePath\n{\n asString(): string {\n const parts: string[] = [];\n\n for (const seg of this.segs) {\n if (seg.isProperty()) {\n if (parts.length > 0) {\n parts.push('.');\n }\n parts.push(seg.propertyName());\n } else if (seg.isIndex()) {\n parts.push(`[${seg.indexValue()}]`);\n }\n }\n\n return parts.join('');\n }\n\n parent(): ValuePath {\n if (this.segs.length <= 1) {\n return EMPTY_VALUE_PATH;\n }\n return new ValuePathImpl(this.segs.slice(0, -1));\n }\n\n child(name: string): ValuePath {\n return new ValuePathImpl([...this.segs, new PropertySegment(name)]);\n }\n\n childIndex(index: number): ValuePath {\n return new ValuePathImpl([...this.segs, new IndexSegment(index)]);\n }\n}\n\nexport const EMPTY_VALUE_PATH: ValuePath = new ValuePathImpl([]);\n\nexport function createValuePath(segments: readonly ValuePathSegment[]): ValuePath {\n return segments.length === 0 ? EMPTY_VALUE_PATH : new ValuePathImpl(segments);\n}\n","import type { ValuePath, ValuePathSegment } from './types.js';\nimport { createValuePath } from './ValuePath.js';\nimport { PropertySegment, IndexSegment } from './ValuePathSegment.js';\n\nfunction parseIndexSegment(\n path: string,\n startIndex: number,\n): { segment: IndexSegment; nextIndex: number } {\n let i = startIndex;\n let indexStr = '';\n\n while (i < path.length && path[i] !== ']') {\n indexStr += path[i];\n i++;\n }\n\n if (path[i] !== ']') {\n throw new Error(`Invalid path: missing closing bracket in \"${path}\"`);\n }\n\n if (indexStr === '' || !/^\\d+$/.test(indexStr)) {\n throw new Error(\n `Invalid path: index must be a non-negative integer, got \"${indexStr}\" in \"${path}\"`,\n );\n }\n\n return {\n segment: new IndexSegment(Number.parseInt(indexStr, 10)),\n nextIndex: i + 1,\n };\n}\n\nfunction pushPropertyIfNotEmpty(segments: ValuePathSegment[], current: string): void {\n if (current) {\n segments.push(new PropertySegment(current));\n }\n}\n\nexport function parseValuePath(path: string): ValuePathSegment[] {\n if (!path) {\n return [];\n }\n\n const segments: ValuePathSegment[] = [];\n let current = '';\n let i = 0;\n\n while (i < path.length) {\n const char = path[i];\n\n if (char === '.') {\n pushPropertyIfNotEmpty(segments, current);\n current = '';\n i++;\n } else if (char === '[') {\n pushPropertyIfNotEmpty(segments, current);\n current = '';\n const result = parseIndexSegment(path, i + 1);\n segments.push(result.segment);\n i = result.nextIndex;\n } else {\n current += char;\n i++;\n }\n }\n\n pushPropertyIfNotEmpty(segments, current);\n\n return segments;\n}\n\nexport function stringToValuePath(path: string): ValuePath {\n return createValuePath(parseValuePath(path));\n}\n","import { makeAutoObservable } from '../../core/reactivity/index.js';\nimport type { Diagnostic } from '../../core/validation/types.js';\nimport { parseValuePath } from '../../core/value-path/ValuePathParser.js';\nimport type { JsonValuePatch } from '../../types/json-value-patch.types.js';\nimport type { DirtyTrackable, ValueNode } from '../value-node/types.js';\nimport type { ValueTreeLike } from './types.js';\n\nexport class ValueTree implements ValueTreeLike {\n constructor(private readonly _root: ValueNode) {\n makeAutoObservable(this, {\n _root: false,\n });\n }\n\n get root(): ValueNode {\n return this._root;\n }\n\n get(path: string): ValueNode | undefined {\n const segments = parseValuePath(path);\n if (segments.length === 0) {\n return this._root;\n }\n\n let current: ValueNode | undefined = this._root;\n\n for (const segment of segments) {\n if (!current) {\n return undefined;\n }\n\n if (segment.isProperty() && current.isObject()) {\n current = current.child(segment.propertyName());\n } else if (segment.isIndex() && current.isArray()) {\n current = current.at(segment.indexValue());\n } else {\n return undefined;\n }\n }\n\n return current;\n }\n\n getValue(path: string): unknown {\n const node = this.get(path);\n return node?.getPlainValue();\n }\n\n setValue(path: string, value: unknown): void {\n const node = this.get(path);\n if (!node) {\n throw new Error(`Path not found: ${path}`);\n }\n if (!node.isPrimitive()) {\n throw new Error(`Cannot set value on non-primitive node: ${path}`);\n }\n node.setValue(value);\n }\n\n getPlainValue(): unknown {\n return this._root.getPlainValue();\n }\n\n get isDirty(): boolean {\n const root = this._root as unknown as DirtyTrackable;\n if ('isDirty' in root) {\n return root.isDirty;\n }\n return false;\n }\n\n get isValid(): boolean {\n return this.errors.length === 0;\n }\n\n get errors(): readonly Diagnostic[] {\n return this._root.errors;\n }\n\n getPatches(): readonly JsonValuePatch[] {\n return [];\n }\n\n commit(): void {\n const root = this._root as unknown as DirtyTrackable;\n if ('commit' in root && typeof root.commit === 'function') {\n root.commit();\n }\n }\n\n revert(): void {\n const root = this._root as unknown as DirtyTrackable;\n if ('revert' in root && typeof root.revert === 'function') {\n root.revert();\n }\n }\n}\n","import { makeAutoObservable, observable } from '../../core/reactivity/index.js';\nimport type { JsonObjectSchema, JsonSchema } from '../../types/schema.types.js';\nimport { generateDefaultValue } from '../default-value/index.js';\nimport type { ForeignKeyResolver } from '../foreign-key-resolver/ForeignKeyResolver.js';\nimport { createSchemaModel } from '../schema-model/SchemaModelImpl.js';\nimport type { SchemaModel } from '../schema-model/types.js';\nimport { createNodeFactory } from '../value-node/NodeFactory.js';\nimport { ValueTree } from '../value-tree/ValueTree.js';\nimport { RowModelImpl } from './row/RowModelImpl.js';\nimport type { RowModel } from './row/types.js';\nimport type { TableModel, TableModelOptions, RefSchemas } from './types.js';\n\nexport class TableModelImpl implements TableModel {\n private _tableId: string;\n private _baseTableId: string;\n private readonly _schema: SchemaModel;\n private readonly _rows: RowModel[];\n private readonly _jsonSchema: JsonObjectSchema;\n private readonly _fkResolver: ForeignKeyResolver | undefined;\n private readonly _refSchemas: RefSchemas | undefined;\n\n constructor(options: TableModelOptions) {\n this._tableId = options.tableId;\n this._baseTableId = options.tableId;\n this._jsonSchema = options.schema;\n this._schema = createSchemaModel(options.schema, { refSchemas: options.refSchemas });\n this._fkResolver = options.fkResolver;\n this._refSchemas = options.refSchemas;\n this._rows = observable.array<RowModel>();\n\n if (options.rows) {\n for (const row of options.rows) {\n this._rows.push(this.createRowModel(row.rowId, row.data));\n }\n }\n\n makeAutoObservable(this, {\n _schema: false,\n _rows: false,\n _jsonSchema: false,\n _fkResolver: false,\n _refSchemas: false,\n });\n }\n\n get tableId(): string {\n return this._tableId;\n }\n\n get baseTableId(): string {\n return this._baseTableId;\n }\n\n get isRenamed(): boolean {\n return this._tableId !== this._baseTableId;\n }\n\n get fk(): ForeignKeyResolver | undefined {\n return this._fkResolver;\n }\n\n get refSchemas(): RefSchemas | undefined {\n return this._refSchemas;\n }\n\n get schema(): SchemaModel {\n return this._schema;\n }\n\n get rows(): readonly RowModel[] {\n return this._rows;\n }\n\n get rowCount(): number {\n return this._rows.length;\n }\n\n rename(newTableId: string): void {\n this._tableId = newTableId;\n }\n\n addRow(rowId: string, data?: unknown): RowModel {\n if (this.getRow(rowId)) {\n throw new Error(`Row with id already exists: ${rowId}`);\n }\n const rowModel = this.createRowModel(rowId, data);\n this._rows.push(rowModel);\n return rowModel;\n }\n\n removeRow(rowId: string): void {\n const index = this._rows.findIndex((row) => row.rowId === rowId);\n if (index !== -1) {\n const row = this._rows[index];\n if (row instanceof RowModelImpl) {\n row.setTableModel(null);\n }\n this._rows.splice(index, 1);\n }\n }\n\n getRow(rowId: string): RowModel | undefined {\n return this._rows.find((row) => row.rowId === rowId);\n }\n\n getRowIndex(rowId: string): number {\n return this._rows.findIndex((row) => row.rowId === rowId);\n }\n\n getRowAt(index: number): RowModel | undefined {\n return this._rows[index];\n }\n\n get isDirty(): boolean {\n if (this.isRenamed) {\n return true;\n }\n\n if (this._schema.isDirty) {\n return true;\n }\n\n for (const row of this._rows) {\n if (row.isDirty) {\n return true;\n }\n }\n\n return false;\n }\n\n commit(): void {\n this._baseTableId = this._tableId;\n this._schema.markAsSaved();\n\n for (const row of this._rows) {\n row.commit();\n }\n }\n\n revert(): void {\n this._tableId = this._baseTableId;\n this._schema.revert();\n\n for (const row of this._rows) {\n row.revert();\n }\n }\n\n private createRowModel(rowId: string, data?: unknown): RowModel {\n const factory = createNodeFactory({\n fkResolver: this._fkResolver,\n refSchemas: this._refSchemas,\n });\n const rowData =\n data ?? generateDefaultValue(this._jsonSchema, { refSchemas: this._refSchemas });\n const rootNode = factory.createTree(this._jsonSchema as JsonSchema, rowData);\n const valueTree = new ValueTree(rootNode);\n const rowModel = new RowModelImpl(rowId, valueTree);\n rowModel.setTableModel(this);\n return rowModel;\n }\n}\n\nexport function createTableModel(options: TableModelOptions): TableModel {\n return new TableModelImpl(options);\n}\n","import { makeAutoObservable, observable, runInAction } from '../../core/reactivity/index.js';\nimport {\n JsonSchemaTypeName,\n type JsonObjectSchema,\n type JsonSchema,\n} from '../../types/schema.types.js';\nimport {\n ForeignKeyNotFoundError,\n ForeignKeyResolverNotConfiguredError,\n} from './errors.js';\nimport type { ForeignKeyResolver } from './ForeignKeyResolver.js';\nimport type {\n ForeignKeyLoader,\n ForeignKeyResolverOptions,\n ForeignKeyTableCache,\n RowData,\n} from './types.js';\n\nexport class ForeignKeyResolverImpl implements ForeignKeyResolver {\n private readonly _schemaCache: Map<string, JsonObjectSchema>;\n private readonly _tableCache: Map<string, ForeignKeyTableCache>;\n private readonly _loadingTables: Set<string>;\n private readonly _loadingRows: Map<string, Set<string>>;\n private readonly _pendingTableLoads: Map<string, Promise<JsonObjectSchema>>;\n private readonly _pendingRowLoads: Map<string, Map<string, Promise<RowData>>>;\n private _prefetchEnabled: boolean;\n private _disposed = false;\n\n private readonly loader: ForeignKeyLoader | undefined;\n\n constructor(options?: ForeignKeyResolverOptions) {\n this.loader = options?.loader;\n this._prefetchEnabled = options?.prefetch ?? false;\n\n this._schemaCache = observable.map<string, JsonObjectSchema>();\n this._tableCache = observable.map<string, ForeignKeyTableCache>();\n this._loadingTables = new Set();\n this._loadingRows = new Map();\n this._pendingTableLoads = new Map();\n this._pendingRowLoads = new Map();\n\n makeAutoObservable(this, {\n _schemaCache: false,\n _tableCache: false,\n _loadingTables: false,\n _loadingRows: false,\n _pendingTableLoads: false,\n _pendingRowLoads: false,\n _disposed: false,\n loader: false,\n });\n }\n\n get isPrefetchEnabled(): boolean {\n return this._prefetchEnabled;\n }\n\n setPrefetch(enabled: boolean): void {\n this._prefetchEnabled = enabled;\n }\n\n hasSchema(tableId: string): boolean {\n return this._schemaCache.has(tableId) || this._tableCache.has(tableId);\n }\n\n hasTable(tableId: string): boolean {\n return this._tableCache.has(tableId);\n }\n\n hasRow(tableId: string, rowId: string): boolean {\n const table = this._tableCache.get(tableId);\n return table?.rows.has(rowId) ?? false;\n }\n\n isLoading(tableId: string): boolean {\n return this._loadingTables.has(tableId);\n }\n\n isLoadingRow(tableId: string, rowId: string): boolean {\n const rowSet = this._loadingRows.get(tableId);\n return rowSet?.has(rowId) ?? false;\n }\n\n addSchema(tableId: string, schema: JsonObjectSchema): void {\n if (this._disposed) {\n return;\n }\n runInAction(() => {\n this._schemaCache.set(tableId, schema);\n });\n }\n\n addTable(tableId: string, schema: JsonObjectSchema, rows: RowData[]): void {\n if (this._disposed) {\n return;\n }\n\n const rowMap = observable.map<string, RowData>();\n for (const row of rows) {\n rowMap.set(row.rowId, row);\n }\n\n const cache: ForeignKeyTableCache = { schema, rows: rowMap };\n\n runInAction(() => {\n this._tableCache.set(tableId, cache);\n this._schemaCache.set(tableId, schema);\n });\n\n if (this._prefetchEnabled) {\n this.prefetchForeignKeysFromTable(tableId, schema, rows);\n }\n }\n\n addRow(tableId: string, rowId: string, data: unknown): void {\n if (this._disposed) {\n return;\n }\n\n const table = this._tableCache.get(tableId);\n if (table) {\n const rowData: RowData = { rowId, data };\n runInAction(() => {\n table.rows.set(rowId, rowData);\n });\n\n if (this._prefetchEnabled) {\n this.prefetchForeignKeysFromRow(tableId, table.schema, data);\n }\n }\n }\n\n renameTable(oldTableId: string, newTableId: string): void {\n if (this._disposed) {\n return;\n }\n\n const schema = this._schemaCache.get(oldTableId);\n const tableCache = this._tableCache.get(oldTableId);\n\n runInAction(() => {\n if (schema) {\n this._schemaCache.delete(oldTableId);\n this._schemaCache.set(newTableId, schema);\n }\n if (tableCache) {\n this._tableCache.delete(oldTableId);\n this._tableCache.set(newTableId, tableCache);\n }\n });\n }\n\n async getSchema(tableId: string): Promise<JsonObjectSchema> {\n const cachedSchema = this._schemaCache.get(tableId);\n if (cachedSchema) {\n return cachedSchema;\n }\n\n const cachedTable = this._tableCache.get(tableId);\n if (cachedTable) {\n return cachedTable.schema;\n }\n\n if (!this.loader) {\n throw new ForeignKeyNotFoundError(tableId);\n }\n\n const pending = this._pendingTableLoads.get(tableId);\n if (pending) {\n return pending;\n }\n\n const loadPromise = this.loadSchemaInternal(tableId);\n this._pendingTableLoads.set(tableId, loadPromise);\n\n try {\n return await loadPromise;\n } finally {\n this._pendingTableLoads.delete(tableId);\n }\n }\n\n async getRowData(tableId: string, rowId: string): Promise<RowData> {\n const table = this._tableCache.get(tableId);\n if (table) {\n const row = table.rows.get(rowId);\n if (row) {\n return row;\n }\n }\n\n if (!this.loader) {\n throw new ForeignKeyNotFoundError(tableId, rowId);\n }\n\n const tableLoads = this._pendingRowLoads.get(tableId);\n const pending = tableLoads?.get(rowId);\n if (pending) {\n return pending;\n }\n\n const loadPromise = this.loadRowInternal(tableId, rowId);\n this.setPendingRowLoad(tableId, rowId, loadPromise);\n\n try {\n return await loadPromise;\n } finally {\n this.clearPendingRowLoad(tableId, rowId);\n }\n }\n\n dispose(): void {\n this._disposed = true;\n this._schemaCache.clear();\n this._tableCache.clear();\n this._loadingTables.clear();\n this._loadingRows.clear();\n this._pendingTableLoads.clear();\n this._pendingRowLoads.clear();\n }\n\n private async loadSchemaInternal(tableId: string): Promise<JsonObjectSchema> {\n if (!this.loader) {\n throw new ForeignKeyResolverNotConfiguredError();\n }\n\n this._loadingTables.add(tableId);\n\n try {\n const schema = await this.loader.loadSchema(tableId);\n if (!this._disposed) {\n this.addSchema(tableId, schema);\n }\n return schema;\n } finally {\n this._loadingTables.delete(tableId);\n }\n }\n\n private async loadRowInternal(\n tableId: string,\n rowId: string,\n ): Promise<RowData> {\n if (!this.loader) {\n throw new ForeignKeyResolverNotConfiguredError();\n }\n\n this.markRowAsLoading(tableId, rowId);\n\n try {\n const result = await this.loader.loadRow(tableId, rowId);\n if (!this._disposed) {\n this.addSchema(tableId, result.schema);\n this.ensureTableCache(tableId, result.schema);\n this.addRow(tableId, rowId, result.row.data);\n }\n return result.row;\n } finally {\n this.clearRowLoading(tableId, rowId);\n }\n }\n\n private ensureTableCache(tableId: string, schema: JsonObjectSchema): void {\n if (!this._tableCache.has(tableId)) {\n const rowMap = observable.map<string, RowData>();\n const cache: ForeignKeyTableCache = { schema, rows: rowMap };\n\n runInAction(() => {\n this._tableCache.set(tableId, cache);\n });\n }\n }\n\n private markRowAsLoading(tableId: string, rowId: string): void {\n let rowSet = this._loadingRows.get(tableId);\n if (!rowSet) {\n rowSet = new Set();\n this._loadingRows.set(tableId, rowSet);\n }\n rowSet.add(rowId);\n }\n\n private clearRowLoading(tableId: string, rowId: string): void {\n const rowSet = this._loadingRows.get(tableId);\n if (rowSet) {\n rowSet.delete(rowId);\n if (rowSet.size === 0) {\n this._loadingRows.delete(tableId);\n }\n }\n }\n\n private setPendingRowLoad(\n tableId: string,\n rowId: string,\n promise: Promise<RowData>,\n ): void {\n let tableLoads = this._pendingRowLoads.get(tableId);\n if (!tableLoads) {\n tableLoads = new Map();\n this._pendingRowLoads.set(tableId, tableLoads);\n }\n tableLoads.set(rowId, promise);\n }\n\n private clearPendingRowLoad(tableId: string, rowId: string): void {\n const tableLoads = this._pendingRowLoads.get(tableId);\n if (tableLoads) {\n tableLoads.delete(rowId);\n if (tableLoads.size === 0) {\n this._pendingRowLoads.delete(tableId);\n }\n }\n }\n\n private prefetchForeignKeysFromTable(\n sourceTableId: string,\n schema: JsonObjectSchema,\n rows: RowData[],\n ): void {\n for (const row of rows) {\n this.prefetchForeignKeysFromRow(sourceTableId, schema, row.data);\n }\n }\n\n private prefetchForeignKeysFromRow(\n _sourceTableId: string,\n schema: JsonObjectSchema,\n data: unknown,\n ): void {\n const foreignKeys = this.extractForeignKeys(schema);\n if (foreignKeys.length === 0) {\n return;\n }\n\n const dataObj = data as Record<string, unknown>;\n const properties = schema.properties;\n\n for (const [fieldName, fieldSchema] of Object.entries(properties)) {\n const fk = this.getForeignKeyFromSchema(fieldSchema);\n if (!fk) {\n continue;\n }\n\n const fieldValue = dataObj[fieldName];\n if (typeof fieldValue !== 'string' || !fieldValue) {\n continue;\n }\n\n if (!this.hasRow(fk, fieldValue) && !this.isLoadingRow(fk, fieldValue)) {\n this.prefetchRow(fk, fieldValue);\n }\n }\n }\n\n private prefetchRow(tableId: string, rowId: string): void {\n if (!this.loader) {\n return;\n }\n\n const prefetchPromise = this.getRowData(tableId, rowId);\n prefetchPromise.catch(() => {\n // Prefetch errors are silently ignored\n });\n }\n\n private extractForeignKeys(schema: JsonObjectSchema): string[] {\n const foreignKeys: string[] = [];\n for (const fieldSchema of Object.values(schema.properties)) {\n const fk = this.getForeignKeyFromSchema(fieldSchema);\n if (fk) {\n foreignKeys.push(fk);\n }\n }\n return foreignKeys;\n }\n\n private getForeignKeyFromSchema(schema: JsonSchema): string | undefined {\n if ('type' in schema && schema.type === JsonSchemaTypeName.String) {\n return schema.foreignKey;\n }\n return undefined;\n }\n}\n\nexport function createForeignKeyResolver(\n options?: ForeignKeyResolverOptions,\n): ForeignKeyResolver {\n return new ForeignKeyResolverImpl(options);\n}\n","import { makeAutoObservable, observable } from '../../core/reactivity/index.js';\nimport type { JsonObjectSchema } from '../../types/schema.types.js';\nimport type { ForeignKeyResolver } from '../foreign-key-resolver/ForeignKeyResolver.js';\nimport { createForeignKeyResolver } from '../foreign-key-resolver/ForeignKeyResolverImpl.js';\nimport { createTableModel } from '../table/TableModelImpl.js';\nimport type { RowData, TableModel } from '../table/types.js';\nimport type { DataModel } from './DataModel.js';\nimport type { DataModelOptions } from './types.js';\n\nexport class DataModelImpl implements DataModel {\n private readonly _tables: Map<string, TableModel>;\n private readonly _fk: ForeignKeyResolver;\n private readonly _ownsFkResolver: boolean;\n\n constructor(options?: DataModelOptions) {\n this._tables = observable.map<string, TableModel>();\n\n if (options?.fkResolver) {\n this._fk = options.fkResolver;\n this._ownsFkResolver = false;\n } else {\n this._fk = createForeignKeyResolver();\n this._ownsFkResolver = true;\n }\n\n makeAutoObservable(this, {\n _tables: false,\n _fk: false,\n _ownsFkResolver: false,\n });\n }\n\n get fk(): ForeignKeyResolver {\n return this._fk;\n }\n\n get tables(): readonly TableModel[] {\n return Array.from(this._tables.values());\n }\n\n get tableIds(): readonly string[] {\n return Array.from(this._tables.keys());\n }\n\n get isDirty(): boolean {\n for (const table of this._tables.values()) {\n if (table.isDirty) {\n return true;\n }\n }\n return false;\n }\n\n hasTable(tableId: string): boolean {\n return this._tables.has(tableId);\n }\n\n getTable(tableId: string): TableModel | undefined {\n return this._tables.get(tableId);\n }\n\n addTable(tableId: string, schema: JsonObjectSchema, rows?: RowData[]): TableModel {\n const tableModel = createTableModel({\n tableId,\n schema,\n rows,\n fkResolver: this._fk,\n });\n\n this._tables.set(tableId, tableModel);\n\n this._fk.addSchema(tableId, schema);\n if (rows && rows.length > 0) {\n this._fk.addTable(tableId, schema, rows);\n }\n\n return tableModel;\n }\n\n removeTable(tableId: string): void {\n this._tables.delete(tableId);\n }\n\n renameTable(oldTableId: string, newTableId: string): void {\n const table = this._tables.get(oldTableId);\n if (!table) {\n return;\n }\n\n if (this._tables.has(newTableId)) {\n throw new Error(`Table with id '${newTableId}' already exists`);\n }\n\n table.rename(newTableId);\n this._tables.delete(oldTableId);\n this._tables.set(newTableId, table);\n\n this._fk.renameTable(oldTableId, newTableId);\n }\n\n commit(): void {\n for (const table of this._tables.values()) {\n table.commit();\n }\n }\n\n revert(): void {\n for (const table of this._tables.values()) {\n table.revert();\n }\n }\n\n dispose(): void {\n this._tables.clear();\n if (this._ownsFkResolver) {\n this._fk.dispose();\n }\n }\n}\n\nexport function createDataModel(options?: DataModelOptions): DataModel {\n return new DataModelImpl(options);\n}\n"]}
@@ -234,7 +234,8 @@ var SchemaModelImpl = class {
234
234
  _nodeFactory = new NodeFactory();
235
235
  _formulaIndex = new FormulaDependencyIndex();
236
236
  _formulaParseErrors = [];
237
- constructor(schema) {
237
+ _refSchemas;
238
+ constructor(schema, options) {
238
239
  const parser = new SchemaParser();
239
240
  const rootNode = parser.parse(schema);
240
241
  this._currentTree = createSchemaTree(rootNode);
@@ -242,11 +243,13 @@ var SchemaModelImpl = class {
242
243
  this._formulaParseErrors = parser.parseErrors;
243
244
  this._buildFormulaIndex();
244
245
  this._baseTree = this._currentTree.clone();
246
+ this._refSchemas = options?.refSchemas;
245
247
  makeAutoObservable(this, {
246
248
  _patchBuilder: false,
247
249
  _serializer: false,
248
250
  _nodeFactory: false,
249
251
  _formulaIndex: false,
252
+ _refSchemas: false,
250
253
  _currentTree: "observable.ref",
251
254
  _baseTree: "observable.ref",
252
255
  _formulaParseErrors: "observable.ref"
@@ -522,8 +525,14 @@ var SchemaModelImpl = class {
522
525
  get nodeCount() {
523
526
  return this._currentTree.countNodes();
524
527
  }
528
+ get refSchemas() {
529
+ return this._refSchemas;
530
+ }
525
531
  generateDefaultValue(options) {
526
- return generateDefaultValue(this.plainSchema, options);
532
+ return generateDefaultValue(this.plainSchema, {
533
+ ...options,
534
+ refSchemas: this._refSchemas
535
+ });
527
536
  }
528
537
  _buildFormulaIndex() {
529
538
  this._formulaIndex.clear();
@@ -536,8 +545,8 @@ var SchemaModelImpl = class {
536
545
  }
537
546
  }
538
547
  };
539
- function createSchemaModel(schema) {
540
- return new SchemaModelImpl(schema);
548
+ function createSchemaModel(schema, options) {
549
+ return new SchemaModelImpl(schema, options);
541
550
  }
542
551
 
543
552
  // src/model/table/row/RowModelImpl.ts
@@ -1722,12 +1731,14 @@ var TableModelImpl = class {
1722
1731
  _rows;
1723
1732
  _jsonSchema;
1724
1733
  _fkResolver;
1734
+ _refSchemas;
1725
1735
  constructor(options) {
1726
1736
  this._tableId = options.tableId;
1727
1737
  this._baseTableId = options.tableId;
1728
1738
  this._jsonSchema = options.schema;
1729
- this._schema = createSchemaModel(options.schema);
1739
+ this._schema = createSchemaModel(options.schema, { refSchemas: options.refSchemas });
1730
1740
  this._fkResolver = options.fkResolver;
1741
+ this._refSchemas = options.refSchemas;
1731
1742
  this._rows = observable.array();
1732
1743
  if (options.rows) {
1733
1744
  for (const row of options.rows) {
@@ -1738,7 +1749,8 @@ var TableModelImpl = class {
1738
1749
  _schema: false,
1739
1750
  _rows: false,
1740
1751
  _jsonSchema: false,
1741
- _fkResolver: false
1752
+ _fkResolver: false,
1753
+ _refSchemas: false
1742
1754
  });
1743
1755
  }
1744
1756
  get tableId() {
@@ -1753,6 +1765,9 @@ var TableModelImpl = class {
1753
1765
  get fk() {
1754
1766
  return this._fkResolver;
1755
1767
  }
1768
+ get refSchemas() {
1769
+ return this._refSchemas;
1770
+ }
1756
1771
  get schema() {
1757
1772
  return this._schema;
1758
1773
  }
@@ -1822,9 +1837,10 @@ var TableModelImpl = class {
1822
1837
  }
1823
1838
  createRowModel(rowId, data) {
1824
1839
  const factory = createNodeFactory({
1825
- fkResolver: this._fkResolver
1840
+ fkResolver: this._fkResolver,
1841
+ refSchemas: this._refSchemas
1826
1842
  });
1827
- const rowData = data ?? generateDefaultValue(this._jsonSchema);
1843
+ const rowData = data ?? generateDefaultValue(this._jsonSchema, { refSchemas: this._refSchemas });
1828
1844
  const rootNode = factory.createTree(this._jsonSchema, rowData);
1829
1845
  const valueTree = new ValueTree(rootNode);
1830
1846
  const rowModel = new RowModelImpl(rowId, valueTree);
@@ -2229,5 +2245,5 @@ function createDataModel(options) {
2229
2245
  }
2230
2246
 
2231
2247
  export { ArrayValueNode, BasePrimitiveValueNode, BaseValueNode, BooleanValueNode, DataModelImpl, ForeignKeyNotFoundError, ForeignKeyResolverImpl, ForeignKeyResolverNotConfiguredError, ForeignKeyValueNodeImpl, NodeFactory, NodeFactory2, NodeFactoryRegistry, NumberValueNode, ObjectValueNode, RowModelImpl, SchemaParser, StringValueNode, TableModelImpl, ValueType, createDataModel, createDefaultRegistry, createForeignKeyResolver, createNodeFactory, createSchemaModel, createTableModel, extractFormulaDefinition, generateDefaultValue, generateNodeId, isForeignKeyValueNode, resetNodeIdCounter };
2232
- //# sourceMappingURL=chunk-R66AFTGQ.js.map
2233
- //# sourceMappingURL=chunk-R66AFTGQ.js.map
2248
+ //# sourceMappingURL=chunk-YCJJVI3Z.js.map
2249
+ //# sourceMappingURL=chunk-YCJJVI3Z.js.map