@revisium/schema-toolkit 0.16.0 → 0.16.1

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.
@@ -1,4 +1,4 @@
1
- import { b as SchemaNode, S as SchemaValidationError, c as SchemaTree, F as FormulaValidationError } from './types-Cnfj5nLO.js';
1
+ import { b as SchemaNode, S as SchemaValidationError, c as SchemaTree, F as FormulaValidationError } from './types-DmsYGLDX.js';
2
2
 
3
3
  declare function validateSchema(root: SchemaNode): SchemaValidationError[];
4
4
 
@@ -1,4 +1,4 @@
1
- import { b as SchemaNode, S as SchemaValidationError, c as SchemaTree, F as FormulaValidationError } from './types-DMzUCve0.cjs';
1
+ import { b as SchemaNode, S as SchemaValidationError, c as SchemaTree, F as FormulaValidationError } from './types-BWeurwlH.cjs';
2
2
 
3
3
  declare function validateSchema(root: SchemaNode): SchemaValidationError[];
4
4
 
@@ -253,9 +253,13 @@ var SchemaModelImpl = class {
253
253
  _baseTree: "observable.ref",
254
254
  root: "computed",
255
255
  isDirty: "computed",
256
- getPatches: "computed",
257
- getJsonPatches: "computed",
258
- getPlainSchema: "computed",
256
+ isValid: "computed",
257
+ patches: "computed",
258
+ jsonPatches: "computed",
259
+ plainSchema: "computed",
260
+ validationErrors: "computed",
261
+ formulaErrors: "computed",
262
+ nodeCount: "computed",
259
263
  addField: "action",
260
264
  removeField: "action",
261
265
  renameField: "action",
@@ -272,7 +276,7 @@ var SchemaModelImpl = class {
272
276
  });
273
277
  }
274
278
  }
275
- root() {
279
+ get root() {
276
280
  return this._currentTree.root();
277
281
  }
278
282
  nodeById(id) {
@@ -453,23 +457,23 @@ var SchemaModelImpl = class {
453
457
  hasFormulaDependents(nodeId) {
454
458
  return this._formulaIndex.hasDependents(nodeId);
455
459
  }
456
- getValidationErrors() {
460
+ get validationErrors() {
457
461
  return chunkIWRV6QAD_cjs.validateSchema(this._currentTree.root());
458
462
  }
459
- getFormulaErrors() {
463
+ get formulaErrors() {
460
464
  return chunkIWRV6QAD_cjs.validateFormulas(this._currentTree);
461
465
  }
462
- isDirty() {
463
- return this.getPatches().length > 0;
466
+ get isDirty() {
467
+ return this.patches.length > 0;
464
468
  }
465
- isValid() {
466
- return this._currentTree.root().isObject() && this.getValidationErrors().length === 0 && this.getFormulaErrors().length === 0;
469
+ get isValid() {
470
+ return this._currentTree.root().isObject() && this.validationErrors.length === 0 && this.formulaErrors.length === 0;
467
471
  }
468
- getPatches() {
472
+ get patches() {
469
473
  return this._patchBuilder.build(this._currentTree, this._baseTree);
470
474
  }
471
- getJsonPatches() {
472
- return this.getPatches().map((p) => p.patch);
475
+ get jsonPatches() {
476
+ return this.patches.map((p) => p.patch);
473
477
  }
474
478
  markAsSaved() {
475
479
  this._baseTree = this._currentTree.clone();
@@ -477,11 +481,14 @@ var SchemaModelImpl = class {
477
481
  revert() {
478
482
  this._currentTree = this._baseTree.clone();
479
483
  }
480
- getPlainSchema() {
484
+ get plainSchema() {
481
485
  return this._serializer.serializeTree(this._currentTree);
482
486
  }
487
+ get nodeCount() {
488
+ return this._currentTree.countNodes();
489
+ }
483
490
  generateDefaultValue(options) {
484
- return generateDefaultValue(this.getPlainSchema(), options);
491
+ return generateDefaultValue(this.plainSchema, options);
485
492
  }
486
493
  _buildFormulaIndex() {
487
494
  this._formulaIndex.clear();
@@ -1806,7 +1813,7 @@ var TableModelImpl = class {
1806
1813
  if (this.isRenamed) {
1807
1814
  return true;
1808
1815
  }
1809
- if (this._schema.isDirty()) {
1816
+ if (this._schema.isDirty) {
1810
1817
  return true;
1811
1818
  }
1812
1819
  for (const row of this._rows) {
@@ -2316,5 +2323,5 @@ exports.generateDefaultValue = generateDefaultValue;
2316
2323
  exports.generateNodeId = generateNodeId;
2317
2324
  exports.isForeignKeyValueNode = isForeignKeyValueNode;
2318
2325
  exports.resetNodeIdCounter = resetNodeIdCounter;
2319
- //# sourceMappingURL=chunk-OR2I3XOQ.cjs.map
2320
- //# sourceMappingURL=chunk-OR2I3XOQ.cjs.map
2326
+ //# sourceMappingURL=chunk-KQWWRWGB.cjs.map
2327
+ //# sourceMappingURL=chunk-KQWWRWGB.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","validateSchema","validateFormulas","ValueType","NodeFactory","AbstractBasePath"],"mappings":"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","file":"chunk-KQWWRWGB.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';\n\ninterface PendingFormula {\n nodeId: string;\n expression: string;\n}\n\nexport class SchemaParser {\n private pendingFormulas: PendingFormula[] = [];\n\n parse(schema: JsonObjectSchema): SchemaNode {\n this.pendingFormulas = [];\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 const formula = new ParsedFormula(tree, pending.nodeId, pending.expression);\n node.setFormula(formula);\n }\n this.pendingFormulas = [];\n }\n\n private parseNode(schema: JsonSchema, name: string): SchemaNode {\n if ('$ref' in schema) {\n return createRefNode(\n nanoid(),\n name,\n schema.$ref,\n this.extractMetadata(schema),\n );\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(\n nanoid(),\n name,\n children,\n this.extractMetadata(schema),\n );\n }\n\n private parseArray(schema: JsonArraySchema, name: string): SchemaNode {\n const items = this.parseNode(schema.items, 'items');\n return createArrayNode(\n nanoid(),\n name,\n items,\n this.extractMetadata(schema),\n );\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.createArrayNode(name);\n default:\n throw new Error(`Unknown field type: ${type}`);\n }\n }\n\n private createArrayNode(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 } 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 type { ReactivityAdapter } from '../../core/reactivity/index.js';\nimport type { AnnotationsMap } from '../../core/types/index.js';\nimport type { SchemaModel, ReactivityOptions, FieldType, ReplaceResult } from './types.js';\nimport { SchemaParser } from './SchemaParser.js';\nimport { NodeFactory } from './NodeFactory.js';\nimport { ParsedFormula, FormulaDependencyIndex } from '../schema-formula/index.js';\nimport {\n validateSchema,\n validateFormulas,\n type SchemaValidationError,\n type FormulaValidationError,\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 _reactivity: ReactivityAdapter | undefined;\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\n constructor(schema: JsonObjectSchema, options?: ReactivityOptions) {\n const parser = new SchemaParser();\n const rootNode = parser.parse(schema);\n this._currentTree = createSchemaTree(rootNode);\n parser.parseFormulas(this._currentTree);\n this._buildFormulaIndex();\n this._baseTree = this._currentTree.clone();\n this._reactivity = options?.reactivity;\n\n if (this._reactivity) {\n this._reactivity.makeObservable(this, {\n _currentTree: 'observable.ref',\n _baseTree: 'observable.ref',\n root: 'computed',\n isDirty: 'computed',\n isValid: 'computed',\n patches: 'computed',\n jsonPatches: 'computed',\n plainSchema: 'computed',\n validationErrors: 'computed',\n formulaErrors: 'computed',\n nodeCount: 'computed',\n addField: 'action',\n removeField: 'action',\n renameField: 'action',\n changeFieldType: 'action',\n updateMetadata: 'action',\n updateFormula: 'action',\n updateForeignKey: 'action',\n updateDefaultValue: 'action',\n wrapInArray: 'action',\n wrapRootInArray: 'action',\n replaceRoot: 'action',\n markAsSaved: 'action',\n revert: 'action',\n } as AnnotationsMap<this>);\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 if (expression === undefined) {\n node.setFormula(undefined);\n this._formulaIndex.unregisterFormula(nodeId);\n } else {\n const formula = new ParsedFormula(this._currentTree, nodeId, expression);\n node.setFormula(formula);\n this._formulaIndex.registerFormula(nodeId, formula);\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 return true;\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 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 get validationErrors(): SchemaValidationError[] {\n return validateSchema(this._currentTree.root());\n }\n\n get formulaErrors(): FormulaValidationError[] {\n return 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 generateDefaultValue(options?: { arrayItemCount?: number }): unknown {\n return generateDefaultValueFn(this.plainSchema, options);\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?: ReactivityOptions,\n): SchemaModel {\n return new SchemaModelImpl(schema, options);\n}\n","import type { ReactivityAdapter } from '../../../core/reactivity/types.js';\nimport type { AnnotationsMap } from '../../../core/types/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 private readonly _reactivity?: ReactivityAdapter,\n ) {\n this.initObservable();\n }\n\n private initObservable(): void {\n this._reactivity?.makeObservable(this, {\n _tableModel: 'observable.ref',\n index: 'computed',\n prev: 'computed',\n next: 'computed',\n isDirty: 'computed',\n isValid: 'computed',\n errors: 'computed',\n } as AnnotationsMap<this>);\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 type { ReactivityAdapter } from '../../core/reactivity/types.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 private readonly reactivity?: ReactivityAdapter,\n ) {\n super(id, name, schema);\n\n this._items = reactivity?.observableArray<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 this.initObservable();\n }\n\n private initObservable(): void {\n if (!this.reactivity) {\n return;\n }\n\n this.reactivity.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 } as Record<string, 'observable' | 'computed' | 'action'>);\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 = this.reactivity?.observableArray<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 type { ReactivityAdapter } from '../../core/reactivity/types.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 protected readonly reactivity?: ReactivityAdapter,\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 if (!this.reactivity) {\n return;\n }\n\n this.reactivity.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 } as Record<string, 'observable' | 'computed' | 'action'>);\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 { ReactivityAdapter } from '../../core/reactivity/types.js';\nimport 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 reactivity?: ReactivityAdapter,\n ) {\n super(id, name, schema, value, false, reactivity);\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 { ReactivityAdapter } from '../../core/reactivity/types.js';\nimport 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 reactivity?: ReactivityAdapter,\n ) {\n super(id, name, schema, value, '', reactivity);\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 { ReactivityAdapter } from '../../core/reactivity/types.js';\nimport 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 reactivity?: ReactivityAdapter,\n private readonly fkResolver?: ForeignKeyResolver,\n ) {\n super(id, name, schema, value, reactivity);\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 { ReactivityAdapter } from '../../core/reactivity/types.js';\nimport 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 reactivity?: ReactivityAdapter,\n ) {\n super(id, name, schema, value, 0, reactivity);\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 type { ReactivityAdapter } from '../../core/reactivity/types.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 private readonly reactivity?: ReactivityAdapter,\n ) {\n super(id, name, schema);\n\n this._children = reactivity?.observableMap<string, ValueNode>() ?? new Map();\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 this.initObservable();\n }\n\n private initObservable(): void {\n if (!this.reactivity) {\n return;\n }\n\n this.reactivity.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 } as Record<string, 'observable' | 'computed' | 'action'>);\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 = this.reactivity?.observableMap<string, ValueNode>() ?? new Map();\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 { ReactivityAdapter } from '../../core/reactivity/types.js';\nimport 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 reactivity?: ReactivityAdapter;\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(\n reactivity?: ReactivityAdapter,\n fkResolver?: ForeignKeyResolver,\n): 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 reactivity,\n fkResolver,\n );\n }\n\n return new StringValueNode(\n id,\n name,\n schema,\n value as string | undefined,\n reactivity,\n );\n };\n}\n\nfunction createNumberFactory(reactivity?: ReactivityAdapter): NodeFactoryFn {\n return (name, schema, value, id) => {\n return new NumberValueNode(\n id,\n name,\n schema,\n value as number | undefined,\n reactivity,\n );\n };\n}\n\nfunction createBooleanFactory(reactivity?: ReactivityAdapter): NodeFactoryFn {\n return (name, schema, value, id) => {\n return new BooleanValueNode(\n id,\n name,\n schema,\n value as boolean | undefined,\n reactivity,\n );\n };\n}\n\nfunction createObjectFactory(\n nodeFactory: NodeFactory,\n reactivity?: ReactivityAdapter,\n): 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, reactivity);\n };\n}\n\nfunction createArrayFactory(\n nodeFactory: NodeFactory,\n reactivity?: ReactivityAdapter,\n): 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, reactivity);\n arrayNode.setNodeFactory(nodeFactory);\n\n return arrayNode;\n };\n}\n\nexport function createDefaultRegistry(\n reactivity?: ReactivityAdapter,\n fkResolver?: ForeignKeyResolver,\n): NodeFactoryRegistry {\n const registry = new NodeFactoryRegistry();\n\n registry.register('string', createStringFactory(reactivity, fkResolver));\n registry.register('number', createNumberFactory(reactivity));\n registry.register('boolean', createBooleanFactory(reactivity));\n\n return registry;\n}\n\nexport function createNodeFactory(options?: NodeFactoryOptions): NodeFactory {\n const registry = createDefaultRegistry(options?.reactivity, options?.fkResolver);\n const factory = new NodeFactory(registry, options);\n\n registry.register('object', createObjectFactory(factory, options?.reactivity));\n registry.register('array', createArrayFactory(factory, options?.reactivity));\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 type { ReactivityAdapter } from '../../core/reactivity/types.js';\nimport type { AnnotationsMap } from '../../core/types/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(\n private readonly _root: ValueNode,\n private readonly _reactivity?: ReactivityAdapter,\n ) {\n this.initObservable();\n }\n\n private initObservable(): void {\n this._reactivity?.makeObservable(this, {\n isDirty: 'computed',\n isValid: 'computed',\n errors: 'computed',\n commit: 'action',\n revert: 'action',\n } as AnnotationsMap<this>);\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 type { ReactivityAdapter } from '../../core/reactivity/types.js';\nimport type { AnnotationsMap } from '../../core/types/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 } 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 _reactivity: ReactivityAdapter | undefined;\n private readonly _fkResolver: ForeignKeyResolver | undefined;\n\n constructor(options: TableModelOptions, reactivity?: ReactivityAdapter) {\n this._tableId = options.tableId;\n this._baseTableId = options.tableId;\n this._jsonSchema = options.schema;\n this._schema = createSchemaModel(options.schema, { reactivity });\n this._reactivity = reactivity;\n this._fkResolver = options.fkResolver;\n this._rows = reactivity?.observableArray() ?? [];\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 this.initObservable();\n }\n\n private initObservable(): void {\n this._reactivity?.makeObservable(this, {\n _tableId: 'observable',\n _baseTableId: 'observable',\n tableId: 'computed',\n baseTableId: 'computed',\n isRenamed: 'computed',\n rows: 'computed',\n rowCount: 'computed',\n isDirty: 'computed',\n rename: 'action',\n addRow: 'action',\n removeRow: 'action',\n commit: 'action',\n revert: 'action',\n } as AnnotationsMap<this>);\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 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 reactivity: this._reactivity,\n fkResolver: this._fkResolver,\n });\n const rowData = data ?? generateDefaultValue(this._jsonSchema);\n const rootNode = factory.createTree(this._jsonSchema as JsonSchema, rowData);\n const valueTree = new ValueTree(rootNode, this._reactivity);\n const rowModel = new RowModelImpl(rowId, valueTree, this._reactivity);\n rowModel.setTableModel(this);\n return rowModel;\n }\n}\n\nexport function createTableModel(\n options: TableModelOptions,\n reactivity?: ReactivityAdapter,\n): TableModel {\n return new TableModelImpl(options, reactivity);\n}\n","import type { ReactivityAdapter } from '../../core/reactivity/types.js';\nimport type { AnnotationsMap } from '../../core/types/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 private readonly reactivity: ReactivityAdapter | undefined;\n\n constructor(options?: ForeignKeyResolverOptions) {\n this.loader = options?.loader;\n this.reactivity = options?.reactivity;\n this._prefetchEnabled = options?.prefetch ?? false;\n\n this._schemaCache = this.reactivity?.observableMap() ?? new Map();\n this._tableCache = this.reactivity?.observableMap() ?? new Map();\n this._loadingTables = new Set();\n this._loadingRows = new Map();\n this._pendingTableLoads = new Map();\n this._pendingRowLoads = new Map();\n\n this.initObservable();\n }\n\n private initObservable(): void {\n this.reactivity?.makeObservable(this, {\n _schemaCache: 'observable',\n _tableCache: 'observable',\n _prefetchEnabled: 'observable',\n isPrefetchEnabled: 'computed',\n addSchema: 'action',\n addTable: 'action',\n addRow: 'action',\n setPrefetch: 'action',\n } as AnnotationsMap<this>);\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 if (this.reactivity) {\n this.reactivity.runInAction(() => {\n this._schemaCache.set(tableId, schema);\n });\n } else {\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: Map<string, RowData> =\n this.reactivity?.observableMap() ?? new Map();\n for (const row of rows) {\n rowMap.set(row.rowId, row);\n }\n\n const cache: ForeignKeyTableCache = { schema, rows: rowMap };\n\n if (this.reactivity) {\n this.reactivity.runInAction(() => {\n this._tableCache.set(tableId, cache);\n this._schemaCache.set(tableId, schema);\n });\n } else {\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 if (this.reactivity) {\n this.reactivity.runInAction(() => {\n table.rows.set(rowId, rowData);\n });\n } else {\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 if (this.reactivity) {\n this.reactivity.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 } else {\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: Map<string, RowData> =\n this.reactivity?.observableMap() ?? new Map();\n const cache: ForeignKeyTableCache = { schema, rows: rowMap };\n\n if (this.reactivity) {\n this.reactivity.runInAction(() => {\n this._tableCache.set(tableId, cache);\n });\n } else {\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 type { ReactivityAdapter } from '../../core/reactivity/types.js';\nimport type { AnnotationsMap } from '../../core/types/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 private readonly _reactivity: ReactivityAdapter | undefined;\n\n constructor(options?: DataModelOptions) {\n this._reactivity = options?.reactivity;\n this._tables = this._reactivity?.observableMap() ?? new Map();\n\n if (options?.fkResolver) {\n this._fk = options.fkResolver;\n this._ownsFkResolver = false;\n } else {\n this._fk = createForeignKeyResolver({ reactivity: this._reactivity });\n this._ownsFkResolver = true;\n }\n\n this.initObservable();\n }\n\n private initObservable(): void {\n this._reactivity?.makeObservable(this, {\n _tables: 'observable',\n tables: 'computed',\n tableIds: 'computed',\n isDirty: 'computed',\n addTable: 'action',\n removeTable: 'action',\n renameTable: 'action',\n commit: 'action',\n revert: 'action',\n } as AnnotationsMap<this>);\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 {\n tableId,\n schema,\n rows,\n fkResolver: this._fk,\n },\n this._reactivity,\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"]}
@@ -251,9 +251,13 @@ var SchemaModelImpl = class {
251
251
  _baseTree: "observable.ref",
252
252
  root: "computed",
253
253
  isDirty: "computed",
254
- getPatches: "computed",
255
- getJsonPatches: "computed",
256
- getPlainSchema: "computed",
254
+ isValid: "computed",
255
+ patches: "computed",
256
+ jsonPatches: "computed",
257
+ plainSchema: "computed",
258
+ validationErrors: "computed",
259
+ formulaErrors: "computed",
260
+ nodeCount: "computed",
257
261
  addField: "action",
258
262
  removeField: "action",
259
263
  renameField: "action",
@@ -270,7 +274,7 @@ var SchemaModelImpl = class {
270
274
  });
271
275
  }
272
276
  }
273
- root() {
277
+ get root() {
274
278
  return this._currentTree.root();
275
279
  }
276
280
  nodeById(id) {
@@ -451,23 +455,23 @@ var SchemaModelImpl = class {
451
455
  hasFormulaDependents(nodeId) {
452
456
  return this._formulaIndex.hasDependents(nodeId);
453
457
  }
454
- getValidationErrors() {
458
+ get validationErrors() {
455
459
  return validateSchema(this._currentTree.root());
456
460
  }
457
- getFormulaErrors() {
461
+ get formulaErrors() {
458
462
  return validateFormulas(this._currentTree);
459
463
  }
460
- isDirty() {
461
- return this.getPatches().length > 0;
464
+ get isDirty() {
465
+ return this.patches.length > 0;
462
466
  }
463
- isValid() {
464
- return this._currentTree.root().isObject() && this.getValidationErrors().length === 0 && this.getFormulaErrors().length === 0;
467
+ get isValid() {
468
+ return this._currentTree.root().isObject() && this.validationErrors.length === 0 && this.formulaErrors.length === 0;
465
469
  }
466
- getPatches() {
470
+ get patches() {
467
471
  return this._patchBuilder.build(this._currentTree, this._baseTree);
468
472
  }
469
- getJsonPatches() {
470
- return this.getPatches().map((p) => p.patch);
473
+ get jsonPatches() {
474
+ return this.patches.map((p) => p.patch);
471
475
  }
472
476
  markAsSaved() {
473
477
  this._baseTree = this._currentTree.clone();
@@ -475,11 +479,14 @@ var SchemaModelImpl = class {
475
479
  revert() {
476
480
  this._currentTree = this._baseTree.clone();
477
481
  }
478
- getPlainSchema() {
482
+ get plainSchema() {
479
483
  return this._serializer.serializeTree(this._currentTree);
480
484
  }
485
+ get nodeCount() {
486
+ return this._currentTree.countNodes();
487
+ }
481
488
  generateDefaultValue(options) {
482
- return generateDefaultValue(this.getPlainSchema(), options);
489
+ return generateDefaultValue(this.plainSchema, options);
483
490
  }
484
491
  _buildFormulaIndex() {
485
492
  this._formulaIndex.clear();
@@ -1804,7 +1811,7 @@ var TableModelImpl = class {
1804
1811
  if (this.isRenamed) {
1805
1812
  return true;
1806
1813
  }
1807
- if (this._schema.isDirty()) {
1814
+ if (this._schema.isDirty) {
1808
1815
  return true;
1809
1816
  }
1810
1817
  for (const row of this._rows) {
@@ -2285,5 +2292,5 @@ function createDataModel(options) {
2285
2292
  }
2286
2293
 
2287
2294
  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 };
2288
- //# sourceMappingURL=chunk-LF6CGXRQ.js.map
2289
- //# sourceMappingURL=chunk-LF6CGXRQ.js.map
2295
+ //# sourceMappingURL=chunk-KTCH6INZ.js.map
2296
+ //# sourceMappingURL=chunk-KTCH6INZ.js.map