@revisium/schema-toolkit 0.19.4 → 0.20.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.
- package/dist/{FormulaPathBuilder--okalwdl.d.cts → FormulaPathBuilder-D9LkBcSv.d.cts} +1 -1
- package/dist/{FormulaPathBuilder-rW6PJd-r.d.ts → FormulaPathBuilder-DwlKOvVB.d.ts} +1 -1
- package/dist/{chunk-O4QRUV7I.cjs → chunk-FZ2MS4Q5.cjs} +848 -73
- package/dist/chunk-FZ2MS4Q5.cjs.map +1 -0
- package/dist/{chunk-5BBFBSGI.js → chunk-U5YDA3LA.js} +850 -76
- package/dist/chunk-U5YDA3LA.js.map +1 -0
- package/dist/core/index.d.cts +2 -2
- package/dist/core/index.d.ts +2 -2
- package/dist/index.cjs +46 -42
- package/dist/index.d.cts +5 -5
- package/dist/index.d.ts +5 -5
- package/dist/index.js +1 -1
- package/dist/{json-string.store-DRmQFKrp.d.ts → json-string.store-C58zbl31.d.ts} +1 -1
- package/dist/{json-string.store-DOZn38CI.d.cts → json-string.store-DuI--IL2.d.cts} +1 -1
- package/dist/{json-value-patch.types-U2y_ugm1.d.ts → json-value-patch.types-CgiEpchp.d.ts} +1 -1
- package/dist/{json-value-patch.types-CjBpq5VF.d.cts → json-value-patch.types-LEJxcIWR.d.cts} +1 -1
- package/dist/{json.types-46Cq-WxU.d.cts → json.types-PrMmLhba.d.cts} +1 -1
- package/dist/{json.types-46Cq-WxU.d.ts → json.types-PrMmLhba.d.ts} +1 -1
- package/dist/lib/index.d.cts +2 -2
- package/dist/lib/index.d.ts +2 -2
- package/dist/model/index.cjs +46 -42
- package/dist/model/index.d.cts +130 -99
- package/dist/model/index.d.ts +130 -99
- package/dist/model/index.js +1 -1
- package/dist/types/index.d.cts +2 -2
- package/dist/types/index.d.ts +2 -2
- package/package.json +1 -1
- package/dist/chunk-5BBFBSGI.js.map +0 -1
- package/dist/chunk-O4QRUV7I.cjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/model/schema-formula/parsing/FormulaPath.ts","../src/model/schema-formula/parsing/ParsedFormula.ts","../src/model/schema-formula/store/FormulaDependencyIndex.ts","../src/model/schema-formula/changes/FormulaChangeDetector.ts","../src/model/schema-model/SchemaParser.ts","../src/model/schema-model/NodeFactory.ts","../src/model/default-value/generateDefaultValue.ts","../src/model/type-transformer/transformers/PrimitiveToArrayTransformer.ts","../src/model/type-transformer/transformers/ObjectToArrayTransformer.ts","../src/model/type-transformer/transformers/ArrayToItemsTypeTransformer.ts","../src/model/type-transformer/transformers/RefTransformer.ts","../src/model/type-transformer/transformers/DefaultTransformer.ts","../src/model/type-transformer/TypeTransformChain.ts","../src/model/schema-model/SchemaModelImpl.ts","../src/model/value-formula/FormulaCollector.ts","../src/model/value-formula/DependencyGraph.ts","../src/model/value-formula/FormulaEvaluator.ts","../src/model/value-formula/FormulaEngine.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/ChangeTracker.ts","../src/model/value-tree/TreeIndex.ts","../src/model/value-tree/ValueTree.ts","../src/model/table/row/RowModelImpl.ts","../src/model/table/TableModelImpl.ts","../src/model/foreign-key-resolver/ForeignKeyResolverImpl.ts","../src/model/data-model/DataModelImpl.ts"],"names":["parseFormula","ref","nanoid","ValueType","NodeFactory","row"],"mappings":"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","file":"chunk-U5YDA3LA.js","sourcesContent":["import { parseFormula, type ASTNode } from '@revisium/formula';\nimport type { Path } from '../../../core/path/index.js';\nimport { EMPTY_PATH } from '../../../core/path/index.js';\n\nconst ARRAY_NOTATION_REGEX = /^([^[]+)\\[(?:\\d+|\\*)?\\]$/;\n\nexport class FormulaPath {\n constructor(\n private readonly basePath: Path,\n private readonly relativePath: string,\n ) {}\n\n resolve(): Path | null {\n let ast: ASTNode;\n try {\n const parseResult = parseFormula(this.relativePath);\n ast = parseResult.ast;\n } catch {\n return null;\n }\n\n return this.astToPath(ast, this.basePath);\n }\n\n private astToPath(ast: ASTNode, base: Path): Path | null {\n switch (ast.type) {\n case 'Identifier':\n return base.child(ast.name);\n\n case 'MemberExpression': {\n const objectPath = this.astToPath(ast.object, base);\n if (!objectPath) {\n return null;\n }\n return objectPath.child(ast.property);\n }\n\n case 'IndexExpression':\n case 'WildcardExpression': {\n const objectPath = this.astToPath(ast.object, base);\n if (!objectPath) {\n return null;\n }\n return objectPath.childItems();\n }\n\n case 'RelativePath':\n return this.resolveRelativePathString(base, ast.path);\n\n case 'RootPath':\n return this.resolveRootPath(ast.path);\n\n default:\n return null;\n }\n }\n\n private resolveRelativePathString(base: Path, path: string): Path | null {\n const parts = path.split('/');\n let result = base;\n\n for (const part of parts) {\n if (part === '..') {\n if (result.isEmpty()) {\n return null;\n }\n result = result.parent();\n } else if (part === '.') {\n continue;\n } else if (part) {\n result = result.child(part);\n }\n }\n\n return result;\n }\n\n private resolveRootPath(rootPath: string): Path | null {\n const path = rootPath.startsWith('/') ? rootPath.slice(1) : rootPath;\n if (!path) {\n return EMPTY_PATH;\n }\n\n try {\n return this.parseFormulaPath(path);\n } catch {\n return null;\n }\n }\n\n private parseFormulaPath(formulaPath: string): Path {\n const parts = formulaPath.split('.');\n let result: Path = EMPTY_PATH;\n\n for (const part of parts) {\n if (!part) {\n throw new Error(`Invalid path: empty segment`);\n }\n\n const match = ARRAY_NOTATION_REGEX.exec(part);\n if (match?.[1]) {\n result = result.child(match[1]).childItems();\n } else {\n result = result.child(part);\n }\n }\n\n return result;\n }\n}\n","import { parseFormula, type ASTNode } from '@revisium/formula';\nimport type { Path } from '../../../core/path/index.js';\nimport type { SchemaTree } from '../../../core/schema-tree/index.js';\nimport type { Formula } from '../../../core/schema-formula/core/Formula.js';\nimport type { FormulaDependency } from '../../../core/schema-formula/core/FormulaDependency.js';\nimport { ResolvedDependency } from '../../../core/schema-formula/core/FormulaDependency.js';\nimport { FormulaError } from '../../../core/schema-formula/core/FormulaError.js';\nimport { FormulaPath } from './FormulaPath.js';\n\nexport class ParsedFormula implements Formula {\n private readonly _expression: string;\n private readonly astNode: ASTNode;\n private readonly deps: readonly FormulaDependency[];\n private readonly astPathToNodeId: ReadonlyMap<string, string>;\n\n constructor(tree: SchemaTree, formulaNodeId: string, expression: string) {\n this._expression = expression;\n const parseResult = parseFormula(expression);\n this.astNode = parseResult.ast;\n\n const formulaPath = tree.pathOf(formulaNodeId);\n if (formulaPath.isEmpty() && tree.root().id() !== formulaNodeId) {\n throw new FormulaError('Formula node not found in tree', formulaNodeId);\n }\n\n const deps: FormulaDependency[] = [];\n const astPathToNodeId = new Map<string, string>();\n\n for (const depPath of parseResult.dependencies) {\n const targetNodeId = this.resolveDependencyPath(\n tree,\n formulaPath,\n depPath,\n );\n if (!targetNodeId) {\n throw new FormulaError(\n `Cannot resolve formula dependency: ${depPath}`,\n formulaNodeId,\n 'Path not found in schema',\n );\n }\n if (targetNodeId === formulaNodeId) {\n throw new FormulaError(\n 'Formula cannot reference itself',\n formulaNodeId,\n 'Self-reference detected',\n );\n }\n deps.push(new ResolvedDependency(targetNodeId));\n astPathToNodeId.set(depPath, targetNodeId);\n }\n\n this.deps = deps;\n this.astPathToNodeId = astPathToNodeId;\n }\n\n version(): number {\n return 1;\n }\n\n expression(): string {\n return this._expression;\n }\n\n ast(): ASTNode {\n return this.astNode;\n }\n\n dependencies(): readonly FormulaDependency[] {\n return this.deps;\n }\n\n getNodeIdForAstPath(astPath: string): string | null {\n return this.astPathToNodeId.get(astPath) ?? null;\n }\n\n astPaths(): readonly string[] {\n return Array.from(this.astPathToNodeId.keys());\n }\n\n private resolveDependencyPath(\n tree: SchemaTree,\n formulaNodePath: Path,\n depPath: string,\n ): string | null {\n const basePath = this.getFormulaBasePath(formulaNodePath);\n const depFormulaPath = new FormulaPath(basePath, depPath);\n const targetPath = depFormulaPath.resolve();\n\n if (!targetPath) {\n return null;\n }\n\n const targetNode = tree.nodeAt(targetPath);\n if (targetNode.isNull()) {\n return null;\n }\n\n return targetNode.id();\n }\n\n private getFormulaBasePath(formulaPath: Path): Path {\n let basePath = formulaPath;\n\n while (!basePath.isEmpty()) {\n const segs = basePath.segments();\n const lastSeg = segs[segs.length - 1];\n basePath = basePath.parent();\n if (!lastSeg?.isItems()) {\n break;\n }\n }\n\n return basePath;\n }\n}\n","import type { Formula } from '../../../core/schema-formula/core/Formula.js';\n\nexport class FormulaDependencyIndex {\n private readonly dependentsMap = new Map<string, Set<string>>();\n private readonly formulasByNodeId = new Map<string, Formula>();\n\n registerFormula(formulaNodeId: string, formula: Formula): void {\n this.unregisterFormula(formulaNodeId);\n\n this.formulasByNodeId.set(formulaNodeId, formula);\n\n for (const dep of formula.dependencies()) {\n const targetId = dep.targetNodeId();\n let dependents = this.dependentsMap.get(targetId);\n if (!dependents) {\n dependents = new Set<string>();\n this.dependentsMap.set(targetId, dependents);\n }\n dependents.add(formulaNodeId);\n }\n }\n\n unregisterFormula(formulaNodeId: string): void {\n this.formulasByNodeId.delete(formulaNodeId);\n\n for (const [targetId, dependents] of this.dependentsMap) {\n dependents.delete(formulaNodeId);\n if (dependents.size === 0) {\n this.dependentsMap.delete(targetId);\n }\n }\n }\n\n getDependents(nodeId: string): readonly string[] {\n const dependents = this.dependentsMap.get(nodeId);\n return dependents ? Array.from(dependents) : [];\n }\n\n hasDependents(nodeId: string): boolean {\n const dependents = this.dependentsMap.get(nodeId);\n return dependents !== undefined && dependents.size > 0;\n }\n\n getFormula(nodeId: string): Formula | null {\n return this.formulasByNodeId.get(nodeId) ?? null;\n }\n\n hasFormula(nodeId: string): boolean {\n return this.formulasByNodeId.has(nodeId);\n }\n\n clear(): void {\n this.dependentsMap.clear();\n this.formulasByNodeId.clear();\n }\n\n forEachFormula(callback: (nodeId: string, formula: Formula) => void): void {\n for (const [nodeId, formula] of this.formulasByNodeId) {\n callback(nodeId, formula);\n }\n }\n\n size(): number {\n return this.formulasByNodeId.size;\n }\n}\n","import type { SchemaTree } from '../../../core/schema-tree/index.js';\nimport type { FormulaDependencyIndex } from '../store/FormulaDependencyIndex.js';\nimport type { Formula } from '../../../core/schema-formula/core/Formula.js';\nimport { FormulaSerializer } from '../../../core/schema-formula/serialization/FormulaSerializer.js';\n\nexport interface IndirectFormulaChange {\n readonly nodeId: string;\n readonly fromExpression: string;\n readonly toExpression: string;\n}\n\nexport class FormulaChangeDetector {\n constructor(\n private readonly index: FormulaDependencyIndex,\n private readonly currentTree: SchemaTree,\n private readonly baseTree: SchemaTree,\n ) {}\n\n detectIndirectChanges(changedNodeIds: Set<string>): IndirectFormulaChange[] {\n const result: IndirectFormulaChange[] = [];\n const visited = new Set<string>();\n\n for (const changedId of changedNodeIds) {\n this.collectDependentChanges(changedId, result, visited, changedNodeIds);\n }\n\n return result;\n }\n\n private collectDependentChanges(\n nodeId: string,\n result: IndirectFormulaChange[],\n visited: Set<string>,\n directlyChanged: Set<string>,\n ): void {\n const dependents = this.index.getDependents(nodeId);\n\n for (const dependentId of dependents) {\n if (visited.has(dependentId)) {\n continue;\n }\n visited.add(dependentId);\n\n if (directlyChanged.has(dependentId)) {\n continue;\n }\n\n const change = this.detectFormulaChange(dependentId);\n if (change) {\n result.push(change);\n }\n\n this.collectDependentChanges(dependentId, result, visited, directlyChanged);\n }\n }\n\n private detectFormulaChange(nodeId: string): IndirectFormulaChange | null {\n const currentNode = this.currentTree.nodeById(nodeId);\n const baseNode = this.baseTree.nodeById(nodeId);\n\n if (currentNode.isNull() || baseNode.isNull()) {\n return null;\n }\n\n const currentFormula = currentNode.formula();\n const baseFormula = baseNode.formula();\n\n if (!currentFormula || !baseFormula) {\n return null;\n }\n\n const fromExpression = this.getSerializedExpression(baseFormula, this.baseTree, nodeId);\n const toExpression = this.getSerializedExpression(currentFormula, this.currentTree, nodeId);\n\n if (fromExpression === null || toExpression === null) {\n return null;\n }\n\n if (fromExpression === toExpression) {\n return null;\n }\n\n return {\n nodeId,\n fromExpression,\n toExpression,\n };\n }\n\n private getSerializedExpression(\n formula: Formula,\n tree: SchemaTree,\n nodeId: string,\n ): string | null {\n try {\n const xFormula = FormulaSerializer.toXFormula(tree, nodeId, formula);\n return xFormula.expression;\n } catch {\n return null;\n }\n }\n}\n","import { 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';\nimport type { RefSchemas } from './types.js';\n\ninterface PendingFormula {\n nodeId: string;\n expression: string;\n}\n\nexport class SchemaParser {\n private pendingFormulas: PendingFormula[] = [];\n private _parseErrors: TreeFormulaValidationError[] = [];\n private _refSchemas: RefSchemas = {};\n\n parse(schema: JsonObjectSchema, refSchemas?: RefSchemas): SchemaNode {\n this.pendingFormulas = [];\n this._parseErrors = [];\n this._refSchemas = refSchemas ?? {};\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, parentRef?: string): SchemaNode {\n if ('$ref' in schema) {\n const refValue = schema.$ref;\n const resolvedSchema = this._refSchemas[refValue];\n\n if (resolvedSchema) {\n return this.parseNode(resolvedSchema, name, refValue);\n }\n\n return createRefNode(nanoid(), name, refValue, 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, parentRef);\n case JsonSchemaTypeName.Array:\n return this.parseArray(schemaWithType, name, parentRef);\n case JsonSchemaTypeName.String:\n return this.parseString(schemaWithType, name, parentRef);\n case JsonSchemaTypeName.Number:\n return this.parseNumber(schemaWithType, name, parentRef);\n case JsonSchemaTypeName.Boolean:\n return this.parseBoolean(schemaWithType, name, parentRef);\n default:\n throw new Error(`Unknown schema type: ${(schemaWithType as { type: string }).type}`);\n }\n }\n\n private parseObject(schema: JsonObjectSchema, name: string, ref?: 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, {\n metadata: this.extractMetadata(schema),\n ref,\n });\n }\n\n private parseArray(schema: JsonArraySchema, name: string, ref?: string): SchemaNode {\n const items = this.parseNode(schema.items, 'items');\n return createArrayNode(nanoid(), name, items, {\n metadata: this.extractMetadata(schema),\n ref,\n });\n }\n\n private parseString(schema: JsonStringSchema, name: string, ref?: 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 ref,\n });\n }\n\n private parseNumber(schema: JsonNumberSchema, name: string, ref?: 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 ref,\n });\n }\n\n private parseBoolean(schema: JsonBooleanSchema, name: string, ref?: 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 ref,\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 { nanoid } from 'nanoid';\nimport { createArrayNode } from '../../../core/schema-node/index.js';\nimport type { TypeTransformer, TransformContext, TransformResult } from '../types.js';\n\nexport class PrimitiveToArrayTransformer implements TypeTransformer {\n canTransform(ctx: TransformContext): boolean {\n const { sourceNode, targetSpec } = ctx;\n return sourceNode.isPrimitive() && targetSpec.type === 'array';\n }\n\n transform(ctx: TransformContext): TransformResult {\n const { sourceNode } = ctx;\n const itemsNode = sourceNode.cloneWithId(nanoid());\n itemsNode.setName('items');\n const arrayNode = createArrayNode(sourceNode.id(), sourceNode.name(), itemsNode);\n return { node: arrayNode };\n }\n}\n","import { nanoid } from 'nanoid';\nimport { createArrayNode } from '../../../core/schema-node/index.js';\nimport type { TypeTransformer, TransformContext, TransformResult } from '../types.js';\n\nexport class ObjectToArrayTransformer implements TypeTransformer {\n canTransform(ctx: TransformContext): boolean {\n const { sourceNode, targetSpec } = ctx;\n return sourceNode.isObject() && targetSpec.type === 'array';\n }\n\n transform(ctx: TransformContext): TransformResult {\n const { sourceNode } = ctx;\n const itemsNode = sourceNode.cloneWithId(nanoid());\n itemsNode.setName('items');\n const arrayNode = createArrayNode(sourceNode.id(), sourceNode.name(), itemsNode);\n return { node: arrayNode };\n }\n}\n","import type { TypeTransformer, TransformContext, TransformResult, PrimitiveTypeName } from '../types.js';\n\nexport class ArrayToItemsTypeTransformer implements TypeTransformer {\n canTransform(ctx: TransformContext): boolean {\n const { sourceNode, targetSpec } = ctx;\n if (!sourceNode.isArray()) {\n return false;\n }\n const targetType = targetSpec.type;\n if (!targetType || !this.isPrimitiveType(targetType)) {\n return false;\n }\n const items = sourceNode.items();\n return items.nodeType() === targetType;\n }\n\n transform(ctx: TransformContext): TransformResult {\n const { sourceNode } = ctx;\n const items = sourceNode.items();\n const newNode = items.cloneWithId(sourceNode.id());\n newNode.setName(sourceNode.name());\n return { node: newNode };\n }\n\n private isPrimitiveType(type: string): type is PrimitiveTypeName {\n return type === 'string' || type === 'number' || type === 'boolean';\n }\n}\n","import { createRefNode } from '../../../core/schema-node/index.js';\nimport { obj, ref } from '../../../mocks/schema.mocks.js';\nimport type { TypeTransformer, TransformContext, TransformResult } from '../types.js';\nimport { SchemaParser } from '../../schema-model/SchemaParser.js';\n\nexport class RefTransformer implements TypeTransformer {\n canTransform(ctx: TransformContext): boolean {\n return ctx.targetSpec.$ref !== undefined;\n }\n\n transform(ctx: TransformContext): TransformResult {\n const { sourceNode, targetSpec, refSchemas } = ctx;\n const refUri = targetSpec.$ref!;\n\n const resolvedSchema = refSchemas?.[refUri];\n if (resolvedSchema) {\n const parser = new SchemaParser();\n const wrapperSchema = obj({ temp: ref(refUri) });\n const resolvedNode = parser.parse(wrapperSchema, refSchemas);\n const tempNode = resolvedNode.property('temp');\n const newNode = tempNode.cloneWithId(sourceNode.id());\n newNode.setName(sourceNode.name());\n return { node: newNode };\n }\n\n const metadata = this.extractMetadata(targetSpec);\n const node = createRefNode(sourceNode.id(), sourceNode.name(), refUri, metadata);\n return { node };\n }\n\n private extractMetadata(spec: TransformContext['targetSpec']): { title?: string; description?: string; deprecated?: boolean } | undefined {\n const meta: { title?: string; description?: string; deprecated?: boolean } = {};\n let hasValue = false;\n\n if (spec.title) {\n meta.title = spec.title;\n hasValue = true;\n }\n if (spec.description) {\n meta.description = spec.description;\n hasValue = true;\n }\n if (spec.deprecated) {\n meta.deprecated = spec.deprecated;\n hasValue = true;\n }\n\n return hasValue ? meta : undefined;\n }\n}\n","import { nanoid } from 'nanoid';\nimport {\n createObjectNode,\n createArrayNode,\n createStringNode,\n createNumberNode,\n createBooleanNode,\n} from '../../../core/schema-node/index.js';\nimport type { SchemaNode, NodeMetadata } from '../../../core/schema-node/index.js';\nimport type { TypeTransformer, TransformContext, TransformResult, SimpleFieldType } from '../types.js';\n\nexport class DefaultTransformer implements TypeTransformer {\n canTransform(ctx: TransformContext): boolean {\n return ctx.targetSpec.type !== undefined;\n }\n\n transform(ctx: TransformContext): TransformResult {\n const { sourceNode, targetSpec } = ctx;\n const type = targetSpec.type!;\n const metadata = this.extractMetadata(targetSpec);\n const node = this.createNode(sourceNode.id(), sourceNode.name(), type, targetSpec, metadata);\n return { node };\n }\n\n private createNode(\n id: string,\n name: string,\n type: SimpleFieldType,\n spec: TransformContext['targetSpec'],\n metadata?: NodeMetadata,\n ): SchemaNode {\n switch (type) {\n case 'string':\n return createStringNode(id, name, {\n defaultValue: spec.default as string ?? '',\n foreignKey: spec.foreignKey,\n metadata,\n });\n case 'number':\n return createNumberNode(id, name, {\n defaultValue: spec.default as number ?? 0,\n metadata,\n });\n case 'boolean':\n return createBooleanNode(id, name, {\n defaultValue: spec.default as boolean ?? false,\n metadata,\n });\n case 'object':\n return createObjectNode(id, name, [], { metadata });\n case 'array':\n return this.createArrayNode(id, name, metadata);\n default:\n throw new Error(`Unknown field type: ${type}`);\n }\n }\n\n private createArrayNode(id: string, name: string, metadata?: NodeMetadata): SchemaNode {\n const items = createStringNode(nanoid(), 'items', { defaultValue: '' });\n return createArrayNode(id, name, items, { metadata });\n }\n\n private extractMetadata(spec: TransformContext['targetSpec']): NodeMetadata | undefined {\n const meta: { title?: string; description?: string; deprecated?: boolean } = {};\n let hasValue = false;\n\n if (spec.title) {\n meta.title = spec.title;\n hasValue = true;\n }\n if (spec.description) {\n meta.description = spec.description;\n hasValue = true;\n }\n if (spec.deprecated) {\n meta.deprecated = spec.deprecated;\n hasValue = true;\n }\n\n return hasValue ? meta : undefined;\n }\n}\n","import type { SchemaNode } from '../../core/schema-node/index.js';\nimport type {\n TypeTransformer,\n TransformContext,\n TransformResult,\n FieldTypeSpec,\n FieldSchemaSpec,\n SimpleFieldType,\n} from './types.js';\nimport type { RefSchemas } from '../schema-model/types.js';\nimport {\n PrimitiveToArrayTransformer,\n ObjectToArrayTransformer,\n ArrayToItemsTypeTransformer,\n RefTransformer,\n DefaultTransformer,\n} from './transformers/index.js';\n\nexport interface TypeTransformChainOptions {\n refSchemas?: RefSchemas;\n customTransformers?: TypeTransformer[];\n}\n\nexport class TypeTransformChain {\n private readonly _transformers: TypeTransformer[];\n private readonly _refSchemas: RefSchemas | undefined;\n\n constructor(options: TypeTransformChainOptions = {}) {\n this._refSchemas = options.refSchemas;\n this._transformers = [\n ...(options.customTransformers ?? []),\n new PrimitiveToArrayTransformer(),\n new ObjectToArrayTransformer(),\n new ArrayToItemsTypeTransformer(),\n new RefTransformer(),\n new DefaultTransformer(),\n ];\n }\n\n transform(sourceNode: SchemaNode, spec: FieldTypeSpec): TransformResult {\n const normalizedSpec = this.normalizeSpec(spec);\n const ctx: TransformContext = {\n sourceNode,\n targetSpec: normalizedSpec,\n refSchemas: this._refSchemas,\n };\n\n const transformer = this._transformers.find((t) => t.canTransform(ctx));\n if (!transformer) {\n throw new Error(`No transformer found for spec: ${JSON.stringify(spec)}`);\n }\n\n return transformer.transform(ctx);\n }\n\n private normalizeSpec(spec: FieldTypeSpec): FieldSchemaSpec {\n if (typeof spec === 'string') {\n return { type: spec as SimpleFieldType };\n }\n return spec;\n }\n}\n\nexport function createTypeTransformChain(options?: TypeTransformChainOptions): TypeTransformChain {\n return new TypeTransformChain(options);\n}\n","import type { SchemaNode, NodeMetadata } from '../../core/schema-node/index.js';\nimport { NULL_NODE } 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, FieldTypeSpec, 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';\nimport { TypeTransformChain } from '../type-transformer/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 readonly _transformChain: TypeTransformChain;\n private _formulaParseErrors: TreeFormulaValidationError[] = [];\n private readonly _refSchemas: RefSchemas | undefined;\n\n constructor(schema: JsonObjectSchema, options?: SchemaModelOptions) {\n this._refSchemas = options?.refSchemas;\n this._transformChain = new TypeTransformChain({\n refSchemas: this._refSchemas,\n customTransformers: options?.customTransformers,\n });\n const parser = new SchemaParser();\n const rootNode = parser.parse(schema, this._refSchemas);\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\n makeAutoObservable(this, {\n _patchBuilder: false,\n _serializer: false,\n _nodeFactory: false,\n _formulaIndex: false,\n _transformChain: 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 insertFieldAt(parentId: string, index: number, name: string, type: FieldType): SchemaNode {\n const parent = this._currentTree.nodeById(parentId);\n if (parent.isNull() || !parent.isObject()) {\n return NULL_NODE;\n }\n if (index < 0 || index > parent.properties().length) {\n return NULL_NODE;\n }\n const node = this._nodeFactory.createNode(name, type);\n this._currentTree.insertChildAt(parentId, index, 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: FieldTypeSpec): 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 result = this._transformChain.transform(node, newType);\n this._currentTree.setNodeAt(path, result.node);\n\n return result.node;\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 try {\n return FormulaSerializer.serializeExpression(\n this._currentTree,\n nodeId,\n formula,\n { strict: false },\n );\n } catch {\n return '';\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().isNull() &&\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 this._currentTree.clearReplacements();\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 { parseExpression } from '@revisium/formula';\nimport type {\n ValueNode,\n PrimitiveValueNode,\n ObjectValueNodeInterface,\n} from '../value-node/index.js';\nimport type { FormulaField, FormulaArrayLevel } from './types.js';\n\ninterface TraverseContext {\n parent: ObjectValueNodeInterface | null;\n arrayLevels: FormulaArrayLevel[];\n}\n\ntype PathSegment =\n | { type: 'property'; name: string }\n | { type: 'index'; index: number };\n\nconst INDEX_REGEX = /^\\[(-?\\d+)\\]/;\nconst PROP_REGEX = /^\\.?([a-zA-Z_]\\w*)/;\n\nexport class FormulaCollector {\n private root: ValueNode | null = null;\n\n collect(root: ValueNode): FormulaField[] {\n this.root = root;\n const formulas: FormulaField[] = [];\n this.traverse(root, { parent: null, arrayLevels: [] }, formulas);\n return formulas;\n }\n\n private traverse(\n node: ValueNode,\n context: TraverseContext,\n formulas: FormulaField[],\n ): void {\n if (node.isPrimitive()) {\n this.collectPrimitive(node, context, formulas);\n } else if (node.isObject()) {\n for (const child of node.children) {\n this.traverse(child, { ...context, parent: node }, formulas);\n }\n } else if (node.isArray()) {\n for (let i = 0; i < node.length; i++) {\n const item = node.at(i);\n if (item) {\n this.traverse(\n item,\n {\n ...context,\n arrayLevels: [...context.arrayLevels, { array: node, index: i }],\n },\n formulas,\n );\n }\n }\n }\n }\n\n private collectPrimitive(\n node: PrimitiveValueNode,\n context: TraverseContext,\n formulas: FormulaField[],\n ): void {\n const formula = node.formula;\n if (!formula) {\n return;\n }\n\n const rawDependencies = this.extractDependencies(formula.expression);\n const dependencyNodes = this.resolveDependencies(\n rawDependencies,\n node,\n context,\n );\n\n formulas.push({\n node,\n expression: formula.expression,\n parent: context.parent,\n dependencyNodes,\n arrayLevels: context.arrayLevels,\n });\n }\n\n private extractDependencies(expression: string): readonly string[] {\n try {\n const parsed = parseExpression(expression);\n return parsed.dependencies;\n } catch {\n return [];\n }\n }\n\n private resolveDependencies(\n rawDeps: readonly string[],\n formulaNode: PrimitiveValueNode,\n context: TraverseContext,\n ): PrimitiveValueNode[] {\n const nodes: PrimitiveValueNode[] = [];\n\n for (const dep of rawDeps) {\n const node = this.resolveOneDependency(dep, formulaNode, context);\n if (node) {\n this.collectPrimitiveNodes(node, nodes);\n }\n }\n\n return nodes;\n }\n\n private collectPrimitiveNodes(\n node: ValueNode,\n result: PrimitiveValueNode[],\n ): void {\n if (node.isPrimitive()) {\n result.push(node);\n } else if (node.isArray()) {\n for (let i = 0; i < node.length; i++) {\n const item = node.at(i);\n if (item) {\n this.collectPrimitiveNodes(item, result);\n }\n }\n } else if (node.isObject()) {\n for (const child of node.children) {\n this.collectPrimitiveNodes(child, result);\n }\n }\n }\n\n private resolveOneDependency(\n dep: string,\n _formulaNode: PrimitiveValueNode,\n context: TraverseContext,\n ): ValueNode | null {\n if (dep.startsWith('/')) {\n return this.resolveFromRoot(dep.slice(1));\n }\n\n if (dep.startsWith('../')) {\n return this.resolveRelative(dep, context);\n }\n\n if (context.parent) {\n return this.resolveFromNode(context.parent, dep);\n }\n\n return this.resolveFromRoot(dep);\n }\n\n private resolveFromRoot(pathStr: string): ValueNode | null {\n if (!this.root) {\n return null;\n }\n return this.resolveFromNode(this.root, pathStr);\n }\n\n private resolveFromNode(\n startNode: ValueNode,\n pathStr: string,\n ): ValueNode | null {\n const segments = this.parsePathSegments(pathStr);\n let current: ValueNode | null = startNode;\n\n for (const segment of segments) {\n if (!current) {\n return null;\n }\n\n if (segment.type === 'property') {\n if (current.isObject()) {\n current =\n current.children.find((c) => c.name === segment.name) ?? null;\n } else {\n return null;\n }\n } else if (segment.type === 'index') {\n if (current.isArray()) {\n current = current.at(segment.index) ?? null;\n } else {\n return null;\n }\n }\n }\n\n return current;\n }\n\n private resolveRelative(\n dep: string,\n context: TraverseContext,\n ): ValueNode | null {\n let upLevels = 0;\n let remaining = dep;\n\n while (remaining.startsWith('../')) {\n upLevels++;\n remaining = remaining.slice(3);\n }\n\n let current: ValueNode | null = context.parent;\n\n for (let i = 0; i < upLevels && current; i++) {\n current = this.findParent(current);\n if (current?.isArray()) {\n current = this.findParent(current);\n }\n }\n\n if (!current) {\n return null;\n }\n\n if (remaining) {\n return this.resolveFromNode(current, remaining);\n }\n\n return current;\n }\n\n private findParent(node: ValueNode): ValueNode | null {\n if (!this.root || node === this.root) {\n return null;\n }\n\n return this.findParentRecursive(this.root, node);\n }\n\n private findParentRecursive(\n current: ValueNode,\n target: ValueNode,\n ): ValueNode | null {\n const children = this.getChildNodes(current);\n\n for (const child of children) {\n if (child === target) {\n return current;\n }\n const found = this.findParentRecursive(child, target);\n if (found) {\n return found;\n }\n }\n\n return null;\n }\n\n private getChildNodes(node: ValueNode): ValueNode[] {\n if (node.isObject()) {\n return [...node.children];\n }\n if (node.isArray()) {\n const items: ValueNode[] = [];\n for (let i = 0; i < node.length; i++) {\n const item = node.at(i);\n if (item) {\n items.push(item);\n }\n }\n return items;\n }\n return [];\n }\n\n private parsePathSegments(pathStr: string): PathSegment[] {\n const segments: PathSegment[] = [];\n let current = pathStr;\n\n while (current.length > 0) {\n const indexMatch = INDEX_REGEX.exec(current);\n if (indexMatch?.[1]) {\n segments.push({\n type: 'index',\n index: Number.parseInt(indexMatch[1], 10),\n });\n current = current.slice(indexMatch[0].length);\n continue;\n }\n\n const propMatch = PROP_REGEX.exec(current);\n if (propMatch?.[1]) {\n segments.push({ type: 'property', name: propMatch[1] });\n current = current.slice(propMatch[0].length);\n continue;\n }\n\n break;\n }\n\n return segments;\n }\n}\n","import type { PrimitiveValueNode } from '../value-node/index.js';\nimport type { FormulaField, DependencyMap } from './types.js';\n\nexport class DependencyGraph {\n buildDependencyMap(formulas: readonly FormulaField[]): DependencyMap {\n const map: DependencyMap = new Map();\n\n for (const field of formulas) {\n for (const depNode of field.dependencyNodes) {\n let depSet = map.get(depNode);\n if (!depSet) {\n depSet = new Set();\n map.set(depNode, depSet);\n }\n depSet.add(field);\n }\n }\n\n return map;\n }\n\n buildEvaluationOrder(\n formulas: readonly FormulaField[],\n ): readonly FormulaField[] {\n const formulaNodes = new Set(formulas.map((f) => f.node));\n const visited = new Set<PrimitiveValueNode>();\n const order: FormulaField[] = [];\n\n const formulaByNode = new Map<PrimitiveValueNode, FormulaField>();\n for (const field of formulas) {\n formulaByNode.set(field.node, field);\n }\n\n const visit = (\n field: FormulaField,\n stack: Set<PrimitiveValueNode>,\n ): void => {\n if (visited.has(field.node)) {\n return;\n }\n\n if (stack.has(field.node)) {\n return;\n }\n\n stack.add(field.node);\n\n for (const depNode of field.dependencyNodes) {\n if (formulaNodes.has(depNode)) {\n const depFormula = formulaByNode.get(depNode);\n if (depFormula) {\n visit(depFormula, stack);\n }\n }\n }\n\n stack.delete(field.node);\n visited.add(field.node);\n order.push(field);\n };\n\n for (const field of formulas) {\n visit(field, new Set());\n }\n\n return order;\n }\n\n getAffectedFormulas(\n changedNode: PrimitiveValueNode,\n dependencyMap: DependencyMap,\n evaluationOrder: readonly FormulaField[],\n ): readonly FormulaField[] {\n const affected = new Set<FormulaField>();\n const queue: PrimitiveValueNode[] = [changedNode];\n\n while (queue.length > 0) {\n const current = queue.shift();\n if (!current) {\n continue;\n }\n const dependents = dependencyMap.get(current);\n\n if (dependents) {\n for (const field of dependents) {\n if (!affected.has(field)) {\n affected.add(field);\n queue.push(field.node);\n }\n }\n }\n }\n\n return evaluationOrder.filter((field) => affected.has(field));\n }\n}\n","import { evaluateWithContext } from '@revisium/formula';\nimport type {\n ValueNode,\n ObjectValueNodeInterface,\n} from '../value-node/index.js';\nimport type { FormulaField, ValueTreeRoot, FormulaEngineOptions } from './types.js';\n\nexport class FormulaEvaluator {\n constructor(\n private readonly tree: ValueTreeRoot,\n private readonly options: FormulaEngineOptions = {},\n ) {}\n\n evaluate(field: FormulaField): void {\n try {\n const context = this.buildContext(field);\n const result = evaluateWithContext(field.expression, context);\n\n this.setNodeValue(field, result);\n this.checkForWarnings(field, result);\n } catch (error) {\n this.handleError(field, error as Error);\n }\n }\n\n evaluateAll(fields: Iterable<FormulaField>): void {\n for (const field of fields) {\n this.evaluate(field);\n }\n }\n\n private buildContext(field: FormulaField) {\n const rootData = this.tree.getPlainValue() as Record<string, unknown>;\n\n const context: {\n rootData: Record<string, unknown>;\n itemData?: Record<string, unknown>;\n currentPath?: string;\n arrayContext?: {\n levels: Array<{\n index: number;\n length: number;\n prev: unknown;\n next: unknown;\n }>;\n };\n } = { rootData };\n\n if (field.parent) {\n const itemData = this.getPlainObjectValue(field.parent);\n if (itemData) {\n context.itemData = itemData;\n }\n }\n\n if (field.arrayLevels.length > 0) {\n context.arrayContext = { levels: this.buildArrayLevels(field) };\n }\n\n return context;\n }\n\n private buildArrayLevels(field: FormulaField) {\n const levels: Array<{\n index: number;\n length: number;\n prev: unknown;\n next: unknown;\n }> = [];\n\n for (let i = field.arrayLevels.length - 1; i >= 0; i--) {\n const level = field.arrayLevels[i];\n if (!level) {\n continue;\n }\n const { array, index } = level;\n\n levels.push({\n index,\n length: array.length,\n prev: this.getPrevItemValue(array, index),\n next: this.getNextItemValue(array, index),\n });\n }\n\n return levels;\n }\n\n private getPrevItemValue(\n array: { at(i: number): ValueNode | undefined; length: number },\n index: number,\n ): unknown {\n if (index <= 0) {\n return null;\n }\n const prevItem = array.at(index - 1);\n return prevItem ? this.getPlainNodeValue(prevItem) : null;\n }\n\n private getNextItemValue(\n array: { at(i: number): ValueNode | undefined; length: number },\n index: number,\n ): unknown {\n if (index >= array.length - 1) {\n return null;\n }\n const nextItem = array.at(index + 1);\n return nextItem ? this.getPlainNodeValue(nextItem) : null;\n }\n\n private getPlainObjectValue(\n node: ObjectValueNodeInterface,\n ): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n for (const child of node.children) {\n result[child.name] = this.getPlainNodeValue(child);\n }\n return result;\n }\n\n private getPlainNodeValue(node: ValueNode): unknown {\n if (node.isPrimitive()) {\n return node.value;\n }\n if (node.isObject()) {\n return this.getPlainObjectValue(node);\n }\n if (node.isArray()) {\n const result: unknown[] = [];\n for (let i = 0; i < node.length; i++) {\n const item = node.at(i);\n if (item) {\n result.push(this.getPlainNodeValue(item));\n }\n }\n return result;\n }\n return null;\n }\n\n private setNodeValue(field: FormulaField, result: unknown): void {\n const { node } = field;\n const defaultValue = node.defaultValue;\n\n if (result === null || result === undefined) {\n node.setValue(defaultValue, { internal: true });\n return;\n }\n\n if (\n typeof result === 'number' &&\n (Number.isNaN(result) || !Number.isFinite(result))\n ) {\n node.setValue(defaultValue, { internal: true });\n return;\n }\n\n node.setValue(result, { internal: true });\n }\n\n private checkForWarnings(field: FormulaField, result: unknown): void {\n const { node } = field;\n\n if (typeof result === 'number') {\n if (Number.isNaN(result)) {\n node.setFormulaWarning({\n type: 'nan',\n message: 'Formula result is NaN',\n expression: field.expression,\n computedValue: result,\n });\n return;\n }\n\n if (!Number.isFinite(result)) {\n node.setFormulaWarning({\n type: 'infinity',\n message: 'Formula result is Infinity',\n expression: field.expression,\n computedValue: result,\n });\n return;\n }\n }\n\n node.setFormulaWarning(null);\n }\n\n private handleError(field: FormulaField, error: Error): void {\n const { node } = field;\n\n node.setValue(node.defaultValue, { internal: true });\n\n node.setFormulaWarning({\n type: 'runtime-error',\n message: error.message,\n expression: field.expression,\n computedValue: undefined,\n });\n\n if (this.options.onError) {\n this.options.onError(node, error);\n }\n }\n}\n","import { runInAction, reaction } from '../../core/reactivity/index.js';\nimport type { ValueNode, PrimitiveValueNode } from '../value-node/index.js';\nimport type {\n FormulaField,\n DependencyMap,\n FormulaEngineOptions,\n ValueTreeRoot,\n} from './types.js';\nimport { FormulaCollector } from './FormulaCollector.js';\nimport { DependencyGraph } from './DependencyGraph.js';\nimport { FormulaEvaluator } from './FormulaEvaluator.js';\n\ntype ReactionDisposer = () => void;\n\nexport class FormulaEngine {\n private readonly collector: FormulaCollector;\n private readonly graph: DependencyGraph;\n private readonly evaluator: FormulaEvaluator;\n\n private formulas: FormulaField[] = [];\n private dependencyMap: DependencyMap = new Map();\n private evaluationOrder: readonly FormulaField[] = [];\n private disposers: ReactionDisposer[] = [];\n\n constructor(\n private readonly tree: ValueTreeRoot,\n options: FormulaEngineOptions = {},\n ) {\n this.collector = new FormulaCollector();\n this.graph = new DependencyGraph();\n this.evaluator = new FormulaEvaluator(tree, options);\n\n this.initialize();\n }\n\n reinitialize(): void {\n this.disposeReactions();\n this.initialize();\n }\n\n dispose(): void {\n this.disposeReactions();\n this.formulas = [];\n this.dependencyMap = new Map();\n this.evaluationOrder = [];\n }\n\n getFormulas(): readonly FormulaField[] {\n return this.formulas;\n }\n\n getEvaluationOrder(): readonly FormulaField[] {\n return this.evaluationOrder;\n }\n\n private initialize(): void {\n this.formulas = this.collector.collect(this.tree.root);\n\n this.dependencyMap = this.graph.buildDependencyMap(this.formulas);\n this.evaluationOrder = this.graph.buildEvaluationOrder(this.formulas);\n\n this.evaluateAll();\n\n this.setupReactions();\n }\n\n private evaluateAll(): void {\n runInAction(() => {\n for (const field of this.evaluationOrder) {\n this.evaluator.evaluate(field);\n }\n });\n }\n\n private setupReactions(): void {\n const watchedNodes = new Set<PrimitiveValueNode>();\n\n for (const [depNode] of this.dependencyMap) {\n if (watchedNodes.has(depNode)) {\n continue;\n }\n watchedNodes.add(depNode);\n\n const disposer = reaction(\n () => depNode.value,\n () => this.handleDependencyChange(depNode),\n );\n this.disposers.push(disposer);\n }\n\n this.setupArrayReactions(this.tree.root);\n }\n\n private setupArrayReactions(node: ValueNode): void {\n if (node.isArray()) {\n const disposer = reaction(\n () => node.length,\n () => this.handleStructureChange(),\n );\n this.disposers.push(disposer);\n\n for (const item of node.value) {\n this.setupArrayReactions(item);\n }\n } else if (node.isObject()) {\n for (const child of node.children) {\n this.setupArrayReactions(child);\n }\n }\n }\n\n private handleDependencyChange(changedNode: PrimitiveValueNode): void {\n const affected = this.graph.getAffectedFormulas(\n changedNode,\n this.dependencyMap,\n this.evaluationOrder,\n );\n\n runInAction(() => {\n for (const field of affected) {\n this.evaluator.evaluate(field);\n }\n });\n }\n\n private handleStructureChange(): void {\n this.reinitialize();\n }\n\n private disposeReactions(): void {\n for (const disposer of this.disposers) {\n disposer();\n }\n this.disposers = [];\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 asJsonPointer(): string {\n if (this.segs.length === 0) {\n return '';\n }\n\n const parts: string[] = [];\n for (const seg of this.segs) {\n if (seg.isProperty()) {\n parts.push(seg.propertyName());\n } else if (seg.isIndex()) {\n parts.push(String(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 { JsonValuePatch } from '../../types/json-value-patch.types.js';\nimport type { Change } from './types.js';\n\nexport class ChangeTracker {\n private _changes: Change[] = [];\n\n get changes(): readonly Change[] {\n return this._changes;\n }\n\n get hasChanges(): boolean {\n return this._changes.length > 0;\n }\n\n track(change: Change): void {\n this._changes.push(change);\n }\n\n clear(): void {\n this._changes = [];\n }\n\n toPatches(): readonly JsonValuePatch[] {\n const patches: JsonValuePatch[] = [];\n\n for (const change of this._changes) {\n const converted = this.changeToPatch(change);\n patches.push(...converted);\n }\n\n return patches;\n }\n\n private changeToPatch(change: Change): JsonValuePatch[] {\n const path = change.path.asJsonPointer();\n\n switch (change.type) {\n case 'setValue':\n return [{ op: 'replace', path, value: change.value }];\n\n case 'addProperty':\n return [{ op: 'add', path, value: change.value }];\n\n case 'removeProperty':\n return [{ op: 'remove', path }];\n\n case 'arrayPush':\n return [{ op: 'add', path: `${path}/-`, value: change.value }];\n\n case 'arrayInsert':\n return [\n { op: 'add', path: `${path}/${change.index}`, value: change.value },\n ];\n\n case 'arrayRemove':\n return [{ op: 'remove', path: `${path}/${change.index}` }];\n\n case 'arrayMove':\n return [\n {\n op: 'move',\n from: `${path}/${change.fromIndex}`,\n path: `${path}/${change.toIndex}`,\n },\n ];\n\n case 'arrayReplace':\n return [\n {\n op: 'replace',\n path: `${path}/${change.index}`,\n value: change.value,\n },\n ];\n\n case 'arrayClear':\n return [{ op: 'replace', path, value: [] }];\n }\n }\n}\n","import type { ValuePath } from '../../core/value-path/types.js';\nimport {\n createValuePath,\n EMPTY_VALUE_PATH,\n} from '../../core/value-path/ValuePath.js';\nimport {\n PropertySegment,\n IndexSegment,\n} from '../../core/value-path/ValuePathSegment.js';\nimport type { ValueNode } from '../value-node/types.js';\n\nexport class TreeIndex {\n private readonly nodesById = new Map<string, ValueNode>();\n private readonly pathCache = new Map<string, ValuePath>();\n\n constructor(private readonly root: ValueNode) {\n this.rebuild();\n }\n\n nodeById(id: string): ValueNode | undefined {\n const node = this.nodesById.get(id);\n if (node) {\n return node;\n }\n\n this.rebuild();\n return this.nodesById.get(id);\n }\n\n pathOf(node: ValueNode): ValuePath {\n if (this.isInsideArray(node)) {\n return this.computePath(node);\n }\n\n const cached = this.pathCache.get(node.id);\n if (cached) {\n return cached;\n }\n\n const path = this.computePath(node);\n this.pathCache.set(node.id, path);\n return path;\n }\n\n rebuild(): void {\n this.nodesById.clear();\n this.pathCache.clear();\n this.indexNode(this.root);\n }\n\n registerNode(node: ValueNode): void {\n this.indexNode(node);\n }\n\n invalidatePathsUnder(node: ValueNode): void {\n this.pathCache.delete(node.id);\n this.invalidateChildPaths(node);\n }\n\n private isInsideArray(node: ValueNode): boolean {\n let current: ValueNode | null = node.parent;\n while (current) {\n if (current.isArray()) {\n return true;\n }\n current = current.parent;\n }\n return false;\n }\n\n private indexNode(node: ValueNode): void {\n this.nodesById.set(node.id, node);\n\n if (node.isObject()) {\n for (const child of node.children) {\n this.indexNode(child);\n }\n } else if (node.isArray()) {\n for (const item of node.value) {\n this.indexNode(item);\n }\n }\n }\n\n private computePath(node: ValueNode): ValuePath {\n const segments: Array<PropertySegment | IndexSegment> = [];\n let current: ValueNode | null = node;\n\n while (current?.parent) {\n const parent: ValueNode = current.parent;\n\n if (parent.isObject()) {\n segments.unshift(new PropertySegment(current.name));\n } else if (parent.isArray()) {\n const index = parent.value.indexOf(current);\n if (index >= 0) {\n segments.unshift(new IndexSegment(index));\n }\n }\n\n current = parent;\n }\n\n if (segments.length === 0) {\n return EMPTY_VALUE_PATH;\n }\n\n return createValuePath(segments);\n }\n\n private invalidateChildPaths(node: ValueNode): void {\n if (node.isObject()) {\n for (const child of node.children) {\n this.pathCache.delete(child.id);\n this.invalidateChildPaths(child);\n }\n } else if (node.isArray()) {\n for (const item of node.value) {\n this.pathCache.delete(item.id);\n this.invalidateChildPaths(item);\n }\n }\n }\n}\n","import { makeAutoObservable } from '../../core/reactivity/index.js';\nimport type { Diagnostic } from '../../core/validation/types.js';\nimport type { ValuePath } from '../../core/value-path/types.js';\nimport { EMPTY_VALUE_PATH } from '../../core/value-path/ValuePath.js';\nimport { parseValuePath } from '../../core/value-path/ValuePathParser.js';\nimport type { JsonValue } from '../../types/json.types.js';\nimport type { JsonValuePatch } from '../../types/json-value-patch.types.js';\nimport type { DirtyTrackable, ValueNode } from '../value-node/types.js';\nimport type { FormulaEngine } from '../value-formula/FormulaEngine.js';\nimport { ChangeTracker } from './ChangeTracker.js';\nimport { TreeIndex } from './TreeIndex.js';\nimport type { Change, ValueTreeLike } from './types.js';\n\nexport class ValueTree implements ValueTreeLike {\n private readonly index: TreeIndex;\n private readonly changeTracker: ChangeTracker;\n private _formulaEngine: FormulaEngine | null = null;\n\n constructor(private readonly _root: ValueNode) {\n this.index = new TreeIndex(_root);\n this.changeTracker = new ChangeTracker();\n\n makeAutoObservable(this, {\n _root: false,\n index: false,\n changeTracker: false,\n _formulaEngine: false,\n });\n }\n\n get root(): ValueNode {\n return this._root;\n }\n\n nodeById(id: string): ValueNode | undefined {\n return this.index.nodeById(id);\n }\n\n pathOf(nodeOrId: ValueNode | string): ValuePath {\n const node =\n typeof nodeOrId === 'string' ? this.index.nodeById(nodeOrId) : nodeOrId;\n if (!node) {\n return EMPTY_VALUE_PATH;\n }\n return this.index.pathOf(node);\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\n const oldValue = node.value as JsonValue;\n node.setValue(value);\n\n this.changeTracker.track({\n type: 'setValue',\n path: this.index.pathOf(node),\n value: value as JsonValue,\n oldValue,\n });\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 this.changeTracker.toPatches();\n }\n\n trackChange(change: Change): void {\n this.changeTracker.track(change);\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 this.changeTracker.clear();\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 this.changeTracker.clear();\n }\n\n rebuildIndex(): void {\n this.index.rebuild();\n }\n\n registerNode(node: ValueNode): void {\n this.index.registerNode(node);\n }\n\n invalidatePathsUnder(node: ValueNode): void {\n this.index.invalidatePathsUnder(node);\n }\n\n setFormulaEngine(engine: FormulaEngine): void {\n this._formulaEngine = engine;\n }\n\n get formulaEngine(): FormulaEngine | null {\n return this._formulaEngine;\n }\n\n dispose(): void {\n this._formulaEngine?.dispose();\n this._formulaEngine = null;\n }\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 { generateDefaultValue } from '../../default-value/index.js';\nimport { FormulaEngine } from '../../value-formula/FormulaEngine.js';\nimport { createNodeFactory } from '../../value-node/NodeFactory.js';\nimport type { ValueNode } from '../../value-node/types.js';\nimport { ValueTree } from '../../value-tree/ValueTree.js';\nimport type { RowModel, RowModelOptions, 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 nodeById(id: string): ValueNode | undefined {\n return this._tree.nodeById(id);\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 dispose(): void {\n this._tree.dispose();\n }\n\n setTableModel(tableModel: TableModelLike | null): void {\n this._tableModel = tableModel;\n }\n}\n\nexport function createRowModel(options: RowModelOptions): RowModel {\n const factory = createNodeFactory({\n fkResolver: options.fkResolver,\n refSchemas: options.refSchemas,\n });\n const rowData =\n options.data ?? generateDefaultValue(options.schema, { refSchemas: options.refSchemas });\n const rootNode = factory.createTree(options.schema, rowData);\n const valueTree = new ValueTree(rootNode);\n\n const formulaEngine = new FormulaEngine(valueTree);\n valueTree.setFormulaEngine(formulaEngine);\n\n return new RowModelImpl(options.rowId, valueTree);\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 { createSchemaModel } from '../schema-model/SchemaModelImpl.js';\nimport type { SchemaModel } from '../schema-model/types.js';\nimport { createRowModel, 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.createRow(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.createRow(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 return;\n }\n const row = this._rows[index];\n if (!row) {\n return;\n }\n row.dispose();\n if (row instanceof RowModelImpl) {\n row.setTableModel(null);\n }\n this._rows.splice(index, 1);\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 dispose(): void {\n for (const row of this._rows) {\n row.dispose();\n }\n this._rows.splice(0);\n }\n\n private createRow(rowId: string, data?: unknown): RowModel {\n const rowModel = createRowModel({\n rowId,\n schema: this._jsonSchema,\n data,\n fkResolver: this._fkResolver,\n refSchemas: this._refSchemas,\n });\n (rowModel as RowModelImpl).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"]}
|
package/dist/core/index.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { l as SchemaNode, j as NodeMetadata, k as Formula, P as Path, c as PathSegment, m as SchemaTree, n as SchemaPatch, g as ValidatorFactoryFn, f as ValidatorRule, e as Validator, V as ValidationContext, D as Diagnostic, S as SchemaLike, h as SchemaValidationError, T as TreeFormulaValidationError } from '../FormulaPathBuilder
|
|
2
|
-
export { o as DefaultValueType, d as DiagnosticSeverity, E as EMPTY_METADATA, F as FormulaDependency, b as FormulaPathBuilder, a as FormulaSerializer, N as NodeType, p as PropertyChange, q as PropertyName, R as ResolvedDependency, i as SchemaValidationErrorType } from '../FormulaPathBuilder
|
|
1
|
+
import { l as SchemaNode, j as NodeMetadata, k as Formula, P as Path, c as PathSegment, m as SchemaTree, n as SchemaPatch, g as ValidatorFactoryFn, f as ValidatorRule, e as Validator, V as ValidationContext, D as Diagnostic, S as SchemaLike, h as SchemaValidationError, T as TreeFormulaValidationError } from '../FormulaPathBuilder-D9LkBcSv.cjs';
|
|
2
|
+
export { o as DefaultValueType, d as DiagnosticSeverity, E as EMPTY_METADATA, F as FormulaDependency, b as FormulaPathBuilder, a as FormulaSerializer, N as NodeType, p as PropertyChange, q as PropertyName, R as ResolvedDependency, i as SchemaValidationErrorType } from '../FormulaPathBuilder-D9LkBcSv.cjs';
|
|
3
3
|
import { C as ContentMediaType, i as JsonSchema, f as JsonObjectSchema } from '../schema.types-B5OgKLpV.cjs';
|
|
4
4
|
export { a as FieldChange, F as FieldChangeType } from '../types-C_GxaUve.cjs';
|
|
5
5
|
export { c as computeValueDiff } from '../computeValueDiff-CNT84rwK.cjs';
|