@revisium/schema-toolkit 0.2.2 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-3E7UGCRR.js → chunk-APNEVIBC.js} +197 -17
- package/dist/chunk-APNEVIBC.js.map +1 -0
- package/dist/{chunk-2GCG6HJO.cjs → chunk-HS345SIP.cjs} +202 -16
- package/dist/chunk-HS345SIP.cjs.map +1 -0
- package/dist/index.cjs +50 -26
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/lib/index.cjs +50 -26
- package/dist/lib/index.d.cts +8 -1
- package/dist/lib/index.d.ts +8 -1
- package/dist/lib/index.js +1 -1
- package/package.json +2 -2
- package/dist/chunk-2GCG6HJO.cjs.map +0 -1
- package/dist/chunk-3E7UGCRR.js.map +0 -1
|
@@ -371,12 +371,205 @@ var getInvalidFieldNamesInSchema = (schema, refs = {}) => {
|
|
|
371
371
|
return invalidFields;
|
|
372
372
|
};
|
|
373
373
|
|
|
374
|
+
// src/lib/json-path-utils.ts
|
|
375
|
+
function parsePathSegments(path) {
|
|
376
|
+
const segments = [];
|
|
377
|
+
const regex = /([^.[\]]+)|\[(\d+)]/g;
|
|
378
|
+
let match;
|
|
379
|
+
while (match = regex.exec(path)) {
|
|
380
|
+
if (match[1] !== void 0) {
|
|
381
|
+
segments.push(match[1]);
|
|
382
|
+
} else if (match[2] !== void 0) {
|
|
383
|
+
segments.push(Number(match[2]));
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
return segments;
|
|
387
|
+
}
|
|
388
|
+
function parsePath(path) {
|
|
389
|
+
if (!path) {
|
|
390
|
+
return [];
|
|
391
|
+
}
|
|
392
|
+
return parsePathSegments(path);
|
|
393
|
+
}
|
|
394
|
+
function getValueByPath(obj, path) {
|
|
395
|
+
if (!path) {
|
|
396
|
+
return obj;
|
|
397
|
+
}
|
|
398
|
+
const segments = parsePath(path);
|
|
399
|
+
let current = obj;
|
|
400
|
+
for (const segment of segments) {
|
|
401
|
+
if (current == null) {
|
|
402
|
+
return void 0;
|
|
403
|
+
}
|
|
404
|
+
if (typeof segment === "number") {
|
|
405
|
+
if (!Array.isArray(current)) {
|
|
406
|
+
return void 0;
|
|
407
|
+
}
|
|
408
|
+
current = current[segment];
|
|
409
|
+
} else {
|
|
410
|
+
if (typeof current !== "object") {
|
|
411
|
+
return void 0;
|
|
412
|
+
}
|
|
413
|
+
current = current[segment];
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
return current;
|
|
417
|
+
}
|
|
418
|
+
function setValueByPath(obj, path, value) {
|
|
419
|
+
if (!path) {
|
|
420
|
+
throw new Error("Cannot set root value");
|
|
421
|
+
}
|
|
422
|
+
const segments = parsePath(path);
|
|
423
|
+
let current = obj;
|
|
424
|
+
for (let i = 0; i < segments.length - 1; i++) {
|
|
425
|
+
const segment = segments[i];
|
|
426
|
+
const nextSegment = segments[i + 1];
|
|
427
|
+
if (typeof segment === "number") {
|
|
428
|
+
if (!Array.isArray(current)) {
|
|
429
|
+
throw new TypeError(
|
|
430
|
+
`Cannot set array index on non-array at segment ${i}`
|
|
431
|
+
);
|
|
432
|
+
}
|
|
433
|
+
const arr = current;
|
|
434
|
+
if (segment > arr.length) {
|
|
435
|
+
throw new Error(
|
|
436
|
+
`Cannot create sparse array: index ${segment} is out of bounds (array length: ${arr.length}) at segment ${i}`
|
|
437
|
+
);
|
|
438
|
+
}
|
|
439
|
+
if (arr[segment] == null) {
|
|
440
|
+
arr[segment] = typeof nextSegment === "number" ? [] : {};
|
|
441
|
+
}
|
|
442
|
+
current = arr[segment];
|
|
443
|
+
} else if (typeof segment === "string") {
|
|
444
|
+
if (current == null || typeof current !== "object" || Array.isArray(current)) {
|
|
445
|
+
throw new Error(`Cannot set property on non-object at segment ${i}`);
|
|
446
|
+
}
|
|
447
|
+
const obj2 = current;
|
|
448
|
+
if (obj2[segment] == null) {
|
|
449
|
+
obj2[segment] = typeof nextSegment === "number" ? [] : {};
|
|
450
|
+
}
|
|
451
|
+
current = obj2[segment];
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
const lastSegment = segments[segments.length - 1];
|
|
455
|
+
if (typeof lastSegment === "number") {
|
|
456
|
+
if (!Array.isArray(current)) {
|
|
457
|
+
throw new TypeError(
|
|
458
|
+
`Cannot set array index on non-array at segment ${segments.length - 1}`
|
|
459
|
+
);
|
|
460
|
+
}
|
|
461
|
+
const arr = current;
|
|
462
|
+
if (lastSegment > arr.length) {
|
|
463
|
+
throw new Error(
|
|
464
|
+
`Cannot create sparse array: index ${lastSegment} is out of bounds (array length: ${arr.length})`
|
|
465
|
+
);
|
|
466
|
+
}
|
|
467
|
+
arr[lastSegment] = value;
|
|
468
|
+
} else if (typeof lastSegment === "string") {
|
|
469
|
+
if (current == null || typeof current !== "object" || Array.isArray(current)) {
|
|
470
|
+
throw new Error(
|
|
471
|
+
`Cannot set property on non-object at segment ${segments.length - 1}`
|
|
472
|
+
);
|
|
473
|
+
}
|
|
474
|
+
current[lastSegment] = value;
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
function hasPath(obj, path) {
|
|
478
|
+
const value = getValueByPath(obj, path);
|
|
479
|
+
return value !== void 0;
|
|
480
|
+
}
|
|
481
|
+
function deepEqual(a, b) {
|
|
482
|
+
if (a === b) {
|
|
483
|
+
return true;
|
|
484
|
+
}
|
|
485
|
+
if (a === null && b === null) {
|
|
486
|
+
return true;
|
|
487
|
+
}
|
|
488
|
+
if (a === void 0 && b === void 0) {
|
|
489
|
+
return true;
|
|
490
|
+
}
|
|
491
|
+
if (a == null || b == null) {
|
|
492
|
+
return false;
|
|
493
|
+
}
|
|
494
|
+
if (typeof a !== typeof b) {
|
|
495
|
+
return false;
|
|
496
|
+
}
|
|
497
|
+
if (typeof a !== "object") {
|
|
498
|
+
return false;
|
|
499
|
+
}
|
|
500
|
+
if (Array.isArray(a) && Array.isArray(b)) {
|
|
501
|
+
const arrA = a;
|
|
502
|
+
const arrB = b;
|
|
503
|
+
if (arrA.length !== arrB.length) {
|
|
504
|
+
return false;
|
|
505
|
+
}
|
|
506
|
+
for (let i = 0; i < arrA.length; i++) {
|
|
507
|
+
const itemA = arrA[i];
|
|
508
|
+
const itemB = arrB[i];
|
|
509
|
+
if (itemA !== void 0 && itemB !== void 0) {
|
|
510
|
+
if (itemA === null && itemB === null) {
|
|
511
|
+
continue;
|
|
512
|
+
}
|
|
513
|
+
if (!deepEqual(itemA, itemB)) {
|
|
514
|
+
return false;
|
|
515
|
+
}
|
|
516
|
+
} else if (itemA !== itemB) {
|
|
517
|
+
return false;
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
return true;
|
|
521
|
+
}
|
|
522
|
+
if (Array.isArray(a) || Array.isArray(b)) {
|
|
523
|
+
return false;
|
|
524
|
+
}
|
|
525
|
+
const objA = a;
|
|
526
|
+
const objB = b;
|
|
527
|
+
const keysA = Object.keys(objA);
|
|
528
|
+
const keysB = Object.keys(objB);
|
|
529
|
+
if (keysA.length !== keysB.length) {
|
|
530
|
+
return false;
|
|
531
|
+
}
|
|
532
|
+
for (const key of keysA) {
|
|
533
|
+
if (!keysB.includes(key)) {
|
|
534
|
+
return false;
|
|
535
|
+
}
|
|
536
|
+
const valA = objA[key];
|
|
537
|
+
const valB = objB[key];
|
|
538
|
+
if (valA !== void 0 && valB !== void 0) {
|
|
539
|
+
if (valA === null && valB === null) {
|
|
540
|
+
continue;
|
|
541
|
+
}
|
|
542
|
+
if (!deepEqual(valA, valB)) {
|
|
543
|
+
return false;
|
|
544
|
+
}
|
|
545
|
+
} else if (valA !== valB) {
|
|
546
|
+
return false;
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
return true;
|
|
550
|
+
}
|
|
551
|
+
function convertJsonPathToSchemaPath(jsonPath) {
|
|
552
|
+
if (jsonPath === "") {
|
|
553
|
+
return "";
|
|
554
|
+
}
|
|
555
|
+
const segments = parsePathSegments(jsonPath);
|
|
556
|
+
let schemaPath = "";
|
|
557
|
+
for (const segment of segments) {
|
|
558
|
+
if (typeof segment === "number") {
|
|
559
|
+
schemaPath += "/items";
|
|
560
|
+
} else {
|
|
561
|
+
schemaPath += `/properties/${segment}`;
|
|
562
|
+
}
|
|
563
|
+
}
|
|
564
|
+
return schemaPath;
|
|
565
|
+
}
|
|
566
|
+
|
|
374
567
|
// src/lib/getJsonValueByPath.ts
|
|
375
568
|
var getJsonValueStoreByPath = (root, path) => {
|
|
376
569
|
if (!path) {
|
|
377
570
|
return root;
|
|
378
571
|
}
|
|
379
|
-
const segments =
|
|
572
|
+
const segments = parsePath(path);
|
|
380
573
|
let current = root;
|
|
381
574
|
for (const seg of segments) {
|
|
382
575
|
if (current instanceof JsonObjectValueStore) {
|
|
@@ -400,19 +593,6 @@ var getJsonValueStoreByPath = (root, path) => {
|
|
|
400
593
|
}
|
|
401
594
|
return current;
|
|
402
595
|
};
|
|
403
|
-
var regex = /([^.[\]]+)|\[(\d+)]/g;
|
|
404
|
-
var getSegments = (path) => {
|
|
405
|
-
const segments = [];
|
|
406
|
-
let match;
|
|
407
|
-
while (match = regex.exec(path)) {
|
|
408
|
-
if (match[1] !== void 0) {
|
|
409
|
-
segments.push(match[1]);
|
|
410
|
-
} else if (match[2] !== void 0) {
|
|
411
|
-
segments.push(Number(match[2]));
|
|
412
|
-
}
|
|
413
|
-
}
|
|
414
|
-
return segments;
|
|
415
|
-
};
|
|
416
596
|
|
|
417
597
|
// src/lib/replaceForeignKeyValue.ts
|
|
418
598
|
var replaceForeignKeyValue = (options) => {
|
|
@@ -514,6 +694,6 @@ var SchemaTable = class {
|
|
|
514
694
|
}
|
|
515
695
|
};
|
|
516
696
|
|
|
517
|
-
export { SchemaTable, VALIDATE_JSON_FIELD_NAME_ERROR_MESSAGE, applyAddPatch, applyMovePatch, applyRemovePatch, applyReplacePatch, createJsonObjectSchemaStore, createJsonSchemaStore, createPrimitiveStoreBySchema, getDBJsonPathByJsonSchemaStore, getForeignKeyPatchesFromSchema, getForeignKeysFromSchema, getForeignKeysFromValue, getInvalidFieldNamesInSchema, getJsonSchemaStoreByPath, getJsonValueStoreByPath, getParentForPath, getPathByStore, pluginRefs, replaceForeignKeyValue, resolveRefs, saveSharedFields, traverseStore, traverseValue, validateJsonFieldName };
|
|
518
|
-
//# sourceMappingURL=chunk-
|
|
519
|
-
//# sourceMappingURL=chunk-
|
|
697
|
+
export { SchemaTable, VALIDATE_JSON_FIELD_NAME_ERROR_MESSAGE, applyAddPatch, applyMovePatch, applyRemovePatch, applyReplacePatch, convertJsonPathToSchemaPath, createJsonObjectSchemaStore, createJsonSchemaStore, createPrimitiveStoreBySchema, deepEqual, getDBJsonPathByJsonSchemaStore, getForeignKeyPatchesFromSchema, getForeignKeysFromSchema, getForeignKeysFromValue, getInvalidFieldNamesInSchema, getJsonSchemaStoreByPath, getJsonValueStoreByPath, getParentForPath, getPathByStore, getValueByPath, hasPath, parsePath, pluginRefs, replaceForeignKeyValue, resolveRefs, saveSharedFields, setValueByPath, traverseStore, traverseValue, validateJsonFieldName };
|
|
698
|
+
//# sourceMappingURL=chunk-APNEVIBC.js.map
|
|
699
|
+
//# sourceMappingURL=chunk-APNEVIBC.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/lib/createJsonSchemaStore.ts","../src/lib/getJsonSchemaStoreByPath.ts","../src/lib/getParentForPath.ts","../src/lib/validateJsonFieldName.ts","../src/lib/applyPatches.ts","../src/lib/getDBJsonPathByJsonSchemaStore.ts","../src/lib/getPathByStore.ts","../src/lib/traverseStore.ts","../src/lib/getForeignKeyPatchesFromSchema.ts","../src/lib/getForeignKeysFromSchema.ts","../src/lib/traverseValue.ts","../src/lib/getForeignKeysFromValue.ts","../src/lib/getInvalidFieldNamesInSchema.ts","../src/lib/json-path-utils.ts","../src/lib/getJsonValueByPath.ts","../src/lib/replaceForeignKeyValue.ts","../src/lib/resolveRefs.ts","../src/lib/schema-table.ts"],"names":["obj"],"mappings":"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","file":"chunk-APNEVIBC.js","sourcesContent":["import {\n JsonObjectSchema,\n JsonSchema,\n JsonSchemaPrimitives,\n JsonSchemaTypeName,\n} from '../types/schema.types.js';\nimport { JsonArrayStore } from '../model/schema/json-array.store.js';\nimport { JsonBooleanStore } from '../model/schema/json-boolean.store.js';\nimport { JsonNumberStore } from '../model/schema/json-number.store.js';\nimport { JsonStringStore } from '../model/schema/json-string.store.js';\nimport { JsonObjectStore } from '../model/schema/json-object.store.js';\nimport {\n JsonSchemaStore,\n JsonSchemaStorePrimitives,\n} from '../model/schema/json-schema.store.js';\n\nexport type RefsType = Record<string, JsonSchema>;\n\nexport const createJsonSchemaStore = (\n schema: JsonSchema,\n refs: RefsType = {},\n): JsonSchemaStore => {\n if ('$ref' in schema) {\n const refSchema: JsonSchema | undefined = refs[schema.$ref];\n\n if (!refSchema) {\n throw new Error(`Not found schema for $ref=\"${schema.$ref}\"`);\n }\n\n const refStore = createJsonSchemaStore(refSchema, refs);\n saveSharedFields(refStore, schema);\n refStore.$ref = schema.$ref;\n return refStore;\n } else if (schema.type === JsonSchemaTypeName.Object) {\n const objectStore = createJsonObjectSchemaStore(schema, refs);\n saveSharedFields(objectStore, schema);\n\n return objectStore;\n } else if (schema.type === JsonSchemaTypeName.Array) {\n const itemsStore = createJsonSchemaStore(schema.items, refs);\n const arrayStore = new JsonArrayStore(itemsStore);\n saveSharedFields(arrayStore, schema);\n\n return arrayStore;\n } else {\n const primitivesStore = createPrimitiveStoreBySchema(schema);\n saveSharedFields(primitivesStore, schema);\n primitivesStore.readOnly = schema.readOnly;\n\n return primitivesStore;\n }\n};\n\nexport const createJsonObjectSchemaStore = (\n value: JsonObjectSchema,\n refs: RefsType,\n): JsonObjectStore => {\n const store = new JsonObjectStore();\n\n for (const requiredField of value.required) {\n if (!value.properties[requiredField]) {\n throw new Error(\n `Not found required field \"${requiredField}\" in \"properties\"`,\n );\n }\n }\n\n Object.entries(value.properties).forEach(([name, item]) => {\n store.addPropertyWithStore(name, createJsonSchemaStore(item, refs));\n });\n\n return store;\n};\n\nexport const createPrimitiveStoreBySchema = (\n schema: JsonSchemaPrimitives,\n): JsonSchemaStorePrimitives => {\n if (schema.type === JsonSchemaTypeName.String) {\n const stringStore = new JsonStringStore();\n stringStore.foreignKey = schema.foreignKey;\n stringStore.format = schema.format;\n stringStore.enum = schema.enum;\n stringStore.contentMediaType = schema.contentMediaType;\n stringStore.pattern = schema.pattern;\n return stringStore;\n } else if (schema.type === JsonSchemaTypeName.Number) {\n return new JsonNumberStore();\n } else if (schema.type === JsonSchemaTypeName.Boolean) {\n return new JsonBooleanStore();\n } else {\n throw new Error('this type is not allowed');\n }\n};\n\nexport const saveSharedFields = (\n store: JsonSchemaStore,\n schema: JsonSchema,\n) => {\n store.title = schema.title;\n store.description = schema.description;\n store.deprecated = schema.deprecated;\n};\n","import { JsonSchemaTypeName } from '../types/schema.types.js';\nimport { JsonSchemaStore } from '../model/schema/json-schema.store.js';\n\nexport const getJsonSchemaStoreByPath = (\n store: JsonSchemaStore,\n path: string,\n): JsonSchemaStore => {\n if (path === '') {\n return store;\n }\n\n if (path === '/') {\n throw new Error(\n 'invalid root path, need to use path=\"\" instead of path=\"/\"',\n );\n }\n\n const tokens = path.split('/');\n tokens.shift();\n\n let currentStore = store;\n\n let currentToken = tokens.shift();\n let currentPath = '';\n\n while (currentToken) {\n if (currentStore.type === JsonSchemaTypeName.Object) {\n if (currentToken !== 'properties') {\n throw new Error(\n `Expected \"${currentPath}/properties/*\" instead of ${currentPath}/${currentToken}/*`,\n );\n }\n\n currentPath = `${currentPath}/${currentToken}`;\n\n currentToken = tokens.shift();\n\n if (!currentToken) {\n throw new Error(`Expected property name after \"${currentPath}\"`);\n }\n\n const foundCurrentStore = currentStore.getProperty(currentToken);\n\n if (!foundCurrentStore) {\n throw new Error(`Not found \"${currentToken}\" in \"${currentPath}\"`);\n }\n\n currentStore = foundCurrentStore;\n currentPath = `${currentPath}/${currentToken}`;\n\n currentToken = tokens.shift();\n } else if (currentStore.type === JsonSchemaTypeName.Array) {\n if (currentToken !== 'items') {\n throw new Error(\n `Expected \"${currentPath}/items/*\" instead of ${currentPath}/${currentToken}/*`,\n );\n }\n\n currentPath = `${currentPath}/${currentToken}`;\n\n currentStore = currentStore.items;\n\n currentToken = tokens.shift();\n } else {\n throw new Error(`Unexpected \"${currentToken}\" in \"${currentPath}\"`);\n }\n }\n\n return currentStore;\n};\n","export const getParentForPath = (\n path: string,\n): { parentPath: string; field: string } => {\n if (path === '' || path === '/') {\n throw new Error('Invalid path');\n }\n\n const tokens = path.split('/');\n tokens.shift();\n\n let currentToken = tokens.shift();\n\n let parentPath = '';\n let field = '';\n\n while (currentToken) {\n if (currentToken === 'properties') {\n currentToken = tokens.shift();\n\n if (!currentToken) {\n throw new Error('Invalid path');\n }\n\n field = currentToken;\n\n currentToken = tokens.shift();\n\n if (currentToken) {\n parentPath = `${parentPath}/properties/${field}`;\n }\n } else if (currentToken === 'items') {\n field = currentToken;\n\n currentToken = tokens.shift();\n\n if (currentToken && !['items', 'properties'].includes(currentToken)) {\n throw new Error('Invalid path');\n } else if (currentToken) {\n parentPath = `${parentPath}/items`;\n }\n } else {\n throw new Error('Invalid path');\n }\n }\n\n return {\n parentPath: parentPath,\n field,\n };\n};\n","const maxLength = 64;\n\nexport const VALIDATE_JSON_FIELD_NAME_ERROR_MESSAGE = `It must contain between 1 and ${maxLength} characters, start with a letter or underscore (_), cannot start with two underscores (__), and can only include letters (a-z, A-Z), numbers (0-9), hyphens (-), and underscores (_).`;\n\nconst validPattern = /^(?!__)[a-zA-Z_][a-zA-Z0-9-_]*$/;\n\nexport const validateJsonFieldName = (id: string) => {\n const isInvalid =\n id.length < 1 || id.length > maxLength || !validPattern.test(id);\n\n return !isInvalid;\n};\n","import { JsonSchema, JsonSchemaTypeName } from '../types/schema.types.js';\nimport {\n JsonPatchAdd,\n JsonPatchMove,\n JsonPatchRemove,\n JsonPatchReplace,\n} from '../types/json-patch.types.js';\nimport { JsonSchemaStore } from '../model/schema/json-schema.store.js';\nimport { createJsonSchemaStore } from './createJsonSchemaStore.js';\nimport { getJsonSchemaStoreByPath } from './getJsonSchemaStoreByPath.js';\nimport { getParentForPath } from './getParentForPath.js';\nimport {\n VALIDATE_JSON_FIELD_NAME_ERROR_MESSAGE,\n validateJsonFieldName,\n} from './validateJsonFieldName.js';\n\nexport const applyReplacePatch = (\n store: JsonSchemaStore,\n patch: JsonPatchReplace,\n refs: Record<string, JsonSchema> = {},\n): JsonSchemaStore => {\n const patchStore = createJsonSchemaStore(patch.value, refs);\n const foundStore = getJsonSchemaStoreByPath(store, patch.path);\n\n const parent = foundStore.parent;\n\n if (!parent) {\n return patchStore;\n }\n\n if (parent.type === JsonSchemaTypeName.Object) {\n parent.migratePropertyWithStore(foundStore.name, patchStore);\n } else if (parent.type === JsonSchemaTypeName.Array) {\n parent.migrateItems(patchStore);\n } else {\n throw new Error('Invalid parent');\n }\n\n return store;\n};\n\nexport const applyRemovePatch = (\n rootStore: JsonSchemaStore,\n patch: JsonPatchRemove,\n): void => {\n const foundStore = getJsonSchemaStoreByPath(rootStore, patch.path);\n const parent = foundStore.parent;\n\n if (!parent) {\n throw new Error('Parent does not exist');\n }\n\n if (parent.type !== JsonSchemaTypeName.Object) {\n throw new Error('Cannot remove from non-object');\n }\n\n parent.removeProperty(foundStore.name);\n};\n\nexport const applyAddPatch = (\n rootStore: JsonSchemaStore,\n patch: JsonPatchAdd,\n refs: Record<string, JsonSchema> = {},\n): void => {\n const patchStore = createJsonSchemaStore(patch.value, refs);\n\n const { parentPath, field } = getParentForPath(patch.path);\n const foundParent = getJsonSchemaStoreByPath(rootStore, parentPath);\n\n if (!foundParent) {\n throw new Error('Parent does not exist');\n }\n\n if (foundParent.type !== JsonSchemaTypeName.Object) {\n throw new Error('Cannot add to non-object');\n }\n\n if (foundParent.getProperty(field)) {\n throw new Error(`Field \"${field}\" already exists in parent`);\n }\n\n foundParent.addPropertyWithStore(field, patchStore);\n};\n\nexport const applyMovePatch = (\n store: JsonSchemaStore,\n patch: JsonPatchMove,\n): void => {\n const { parentPath: fromParentPath, field: fromField } = getParentForPath(\n patch.from,\n );\n const { parentPath: toParentPath, field: toField } = getParentForPath(\n patch.path,\n );\n\n const foundFromParent = getJsonSchemaStoreByPath(store, fromParentPath);\n const foundToParent = getJsonSchemaStoreByPath(store, toParentPath);\n\n const isValidToField = validateJsonFieldName(toField);\n\n if (!isValidToField) {\n throw new Error(\n `Invalid name: ${toField}. ${VALIDATE_JSON_FIELD_NAME_ERROR_MESSAGE}`,\n );\n }\n\n if (!foundFromParent || !foundToParent) {\n throw new Error('Cannot move from or to non-existent parent');\n }\n\n if (foundFromParent.type !== JsonSchemaTypeName.Object) {\n throw new Error('Cannot move from non-object parent');\n }\n\n const foundFromField = getJsonSchemaStoreByPath(store, patch.from);\n\n const isMovedPropertyInSameParentPatch =\n foundFromParent === foundToParent &&\n foundFromParent.type === JsonSchemaTypeName.Object &&\n foundFromParent.getProperty(fromField);\n\n if (isMovedPropertyInSameParentPatch) {\n return foundFromParent.changeName(fromField, toField);\n }\n\n if (foundToParent.type === JsonSchemaTypeName.Object) {\n if (foundToParent.getProperty(toField)) {\n foundToParent.removeProperty(toField);\n }\n foundToParent.addPropertyWithStore(toField, foundFromField);\n foundFromParent.removeProperty(fromField);\n return;\n }\n\n if (foundToParent.type === JsonSchemaTypeName.Array) {\n foundFromParent.removeProperty(fromField);\n foundToParent.replaceItems(foundFromField);\n\n return;\n }\n throw new Error('Invalid type of \"to\" parent');\n};\n","import { JsonSchemaTypeName } from '../types/schema.types.js';\nimport { JsonSchemaStore } from '../model/schema/json-schema.store.js';\n\nexport const getDBJsonPathByJsonSchemaStore = (\n store: JsonSchemaStore,\n): string => {\n let node = store;\n\n let path = '';\n\n while (node.parent) {\n if (node.parent.type === JsonSchemaTypeName.Object) {\n path = `.${node.name}${path}`;\n } else if (node.parent.type === JsonSchemaTypeName.Array) {\n path = `[*]${path}`;\n }\n\n node = node.parent;\n }\n\n if (!path) {\n return '$';\n }\n\n return `$${path}`;\n};\n","import { JsonSchemaTypeName } from '../types/schema.types.js';\nimport { JsonSchemaStore } from '../model/schema/json-schema.store.js';\n\nexport const getPathByStore = (store: JsonSchemaStore): string => {\n let node = store;\n\n let path = '';\n\n while (node.parent) {\n if (node.parent.type === JsonSchemaTypeName.Object) {\n path = `/properties/${node.name}${path}`;\n } else if (node.parent.type === JsonSchemaTypeName.Array) {\n path = `/items${path}`;\n }\n\n node = node.parent;\n }\n\n if (!path) {\n return '/';\n }\n\n return `${path}`;\n};\n","import { JsonSchemaTypeName } from '../types/schema.types.js';\nimport { JsonSchemaStore } from '../model/schema/json-schema.store.js';\n\nexport const traverseStore = (\n store: JsonSchemaStore,\n callback: (node: JsonSchemaStore) => void,\n) => {\n callback(store);\n\n if (store.type === JsonSchemaTypeName.Object) {\n Object.values(store.properties).forEach((item) => {\n traverseStore(item, callback);\n });\n } else if (store.type === JsonSchemaTypeName.Array) {\n traverseStore(store.items, callback);\n }\n};\n","import { JsonSchemaTypeName } from '../types/schema.types.js';\nimport { JsonPatch, JsonPatchReplace } from '../types/json-patch.types.js';\nimport { JsonSchemaStore } from '../model/schema/json-schema.store.js';\nimport { getPathByStore } from './getPathByStore.js';\nimport { traverseStore } from './traverseStore.js';\n\nexport const getForeignKeyPatchesFromSchema = (\n store: JsonSchemaStore,\n options: { tableId: string; nextTableId: string },\n) => {\n const stores: JsonPatch[] = [];\n\n traverseStore(store, (item) => {\n if (\n item.type === JsonSchemaTypeName.String &&\n item.foreignKey === options.tableId\n ) {\n item.foreignKey = options.nextTableId;\n\n const patch: JsonPatchReplace = {\n op: 'replace',\n path: getPathByStore(item),\n value: item.getPlainSchema(),\n };\n\n stores.push(patch);\n }\n });\n\n return stores;\n};\n","import { JsonSchemaTypeName } from '../types/schema.types.js';\nimport { JsonSchemaStore } from '../model/schema/json-schema.store.js';\nimport { traverseStore } from './traverseStore.js';\n\nexport const getForeignKeysFromSchema = (store: JsonSchemaStore): string[] => {\n const foreignKeys = new Set<string>();\n\n traverseStore(store, (item) => {\n if (item.type === JsonSchemaTypeName.String && item.foreignKey) {\n foreignKeys.add(item.foreignKey);\n }\n });\n\n return [...foreignKeys].sort((a, b) => a.localeCompare(b));\n};\n","import { JsonSchemaTypeName } from '../types/schema.types.js';\nimport { JsonValueStore } from '../model/value/json-value.store.js';\n\nexport const traverseValue = (\n store: JsonValueStore,\n callback: (node: JsonValueStore) => void,\n) => {\n callback(store);\n\n if (store.type === JsonSchemaTypeName.Object) {\n Object.values(store.value).forEach((item) => {\n traverseValue(item, callback);\n });\n } else if (store.type === JsonSchemaTypeName.Array) {\n store.value.forEach((itemValue) => {\n traverseValue(itemValue, callback);\n });\n }\n};\n","import { JsonSchemaTypeName } from '../types/schema.types.js';\nimport { JsonValueStore } from '../model/value/json-value.store.js';\nimport { traverseValue } from './traverseValue.js';\n\nexport type GetForeignKeysFromValueType = {\n tableId: string;\n rowIds: string[];\n};\n\nexport const getForeignKeysFromValue = (\n value: JsonValueStore,\n): GetForeignKeysFromValueType[] => {\n const foreignKeys = new Map<string, Set<string>>();\n\n traverseValue(value, (item) => {\n if (item.type === JsonSchemaTypeName.String && item.foreignKey) {\n let tableForeignKey = foreignKeys.get(item.foreignKey);\n\n if (!tableForeignKey) {\n tableForeignKey = new Set<string>();\n foreignKeys.set(item.foreignKey, tableForeignKey);\n }\n\n tableForeignKey.add(item.getPlainValue());\n }\n });\n\n return [...foreignKeys].map(([tableId, rowIds]) => ({\n tableId,\n rowIds: [...rowIds].sort((a, b) => a.localeCompare(b)),\n }));\n};\n","import { JsonSchema, JsonSchemaTypeName } from '../types/schema.types.js';\nimport { JsonSchemaStore } from '../model/schema/json-schema.store.js';\nimport { createJsonSchemaStore } from './createJsonSchemaStore.js';\nimport { traverseStore } from './traverseStore.js';\nimport { validateJsonFieldName } from './validateJsonFieldName.js';\n\nexport const getInvalidFieldNamesInSchema = (\n schema: JsonSchema,\n refs: Record<string, JsonSchema> = {},\n) => {\n const schemaStore = createJsonSchemaStore(schema, refs);\n\n const invalidFields: JsonSchemaStore[] = [];\n\n traverseStore(schemaStore, (item) => {\n if (item.parent?.type === JsonSchemaTypeName.Object) {\n if (!validateJsonFieldName(item.name)) {\n invalidFields.push(item);\n }\n }\n });\n\n return invalidFields;\n};\n","import { JsonArray, JsonObject, JsonValue } from '../types';\n\nfunction parsePathSegments(path: string): (string | number)[] {\n const segments: (string | number)[] = [];\n const regex = /([^.[\\]]+)|\\[(\\d+)]/g;\n let match: RegExpExecArray | null;\n\n while ((match = regex.exec(path))) {\n if (match[1] !== undefined) {\n segments.push(match[1]);\n } else if (match[2] !== undefined) {\n segments.push(Number(match[2]));\n }\n }\n\n return segments;\n}\n\n/**\n * Parse path string into segments\n *\n * @param path - Path string (e.g., \"title\", \"address.city\", \"tags[0]\", \"users[0].name\")\n * @returns Array of segments (strings and numbers)\n *\n * @example\n * parsePath(\"title\") // [\"title\"]\n * parsePath(\"address.city\") // [\"address\", \"city\"]\n * parsePath(\"tags[0]\") // [\"tags\", 0]\n * parsePath(\"users[0].name\") // [\"users\", 0, \"name\"]\n * parsePath(\"matrix[0][1]\") // [\"matrix\", 0, 1]\n */\nexport function parsePath(path: string): (string | number)[] {\n if (!path) {\n return [];\n }\n\n return parsePathSegments(path);\n}\n\n/**\n * Get value by path from plain JavaScript object\n *\n * @param obj - Object to navigate\n * @param path - Path string (e.g., \"address.city\", \"tags[0]\")\n * @returns Value at path, or undefined if path doesn't exist\n *\n * @example\n * const obj = { address: { city: \"Moscow\" }, tags: [\"a\", \"b\"] };\n * getValueByPath(obj, \"address.city\") // \"Moscow\"\n * getValueByPath(obj, \"tags[1]\") // \"b\"\n * getValueByPath(obj, \"nonexistent\") // undefined\n */\nexport function getValueByPath(\n obj: JsonValue | undefined,\n path: string,\n): JsonValue | undefined {\n if (!path) {\n return obj;\n }\n\n const segments = parsePath(path);\n let current: JsonValue | undefined = obj;\n\n for (const segment of segments) {\n if (current == null) {\n return undefined;\n }\n\n if (typeof segment === 'number') {\n if (!Array.isArray(current)) {\n return undefined;\n }\n current = current[segment];\n } else {\n if (typeof current !== 'object') {\n return undefined;\n }\n current = (current as JsonObject)[segment];\n }\n }\n\n return current;\n}\n\n/**\n * Set value by path in plain JavaScript object\n * Creates intermediate objects/arrays as needed\n *\n * @param obj - Object to modify\n * @param path - Path string (e.g., \"address.city\", \"tags[0]\")\n * @param value - Value to set\n *\n * @example\n * const obj = {};\n * setValueByPath(obj, \"address.city\", \"London\");\n * // obj is now { address: { city: \"London\" } }\n *\n * setValueByPath(obj, \"tags[0]\", \"first\");\n * // obj is now { address: { city: \"London\" }, tags: [\"first\"] }\n */\nexport function setValueByPath(\n obj: JsonValue,\n path: string,\n value: JsonValue,\n): void {\n if (!path) {\n throw new Error('Cannot set root value');\n }\n\n const segments = parsePath(path);\n let current: JsonValue | undefined = obj;\n\n for (let i = 0; i < segments.length - 1; i++) {\n const segment = segments[i] as string | number;\n const nextSegment = segments[i + 1];\n\n if (typeof segment === 'number') {\n if (!Array.isArray(current)) {\n throw new TypeError(\n `Cannot set array index on non-array at segment ${i}`,\n );\n }\n\n const arr: JsonArray = current;\n\n if (segment > arr.length) {\n throw new Error(\n `Cannot create sparse array: index ${segment} is out of bounds (array length: ${arr.length}) at segment ${i}`,\n );\n }\n\n if (arr[segment] == null) {\n arr[segment] = typeof nextSegment === 'number' ? [] : {};\n }\n\n current = arr[segment];\n } else if (typeof segment === 'string') {\n if (\n current == null ||\n typeof current !== 'object' ||\n Array.isArray(current)\n ) {\n throw new Error(`Cannot set property on non-object at segment ${i}`);\n }\n\n const obj: JsonObject = current;\n if (obj[segment] == null) {\n obj[segment] = typeof nextSegment === 'number' ? [] : {};\n }\n\n current = obj[segment];\n }\n }\n\n const lastSegment = segments[segments.length - 1] as string | number;\n\n if (typeof lastSegment === 'number') {\n if (!Array.isArray(current)) {\n throw new TypeError(\n `Cannot set array index on non-array at segment ${segments.length - 1}`,\n );\n }\n\n const arr: JsonArray = current;\n\n if (lastSegment > arr.length) {\n throw new Error(\n `Cannot create sparse array: index ${lastSegment} is out of bounds (array length: ${arr.length})`,\n );\n }\n\n arr[lastSegment] = value;\n } else if (typeof lastSegment === 'string') {\n if (\n current == null ||\n typeof current !== 'object' ||\n Array.isArray(current)\n ) {\n throw new Error(\n `Cannot set property on non-object at segment ${segments.length - 1}`,\n );\n }\n (current as JsonObject)[lastSegment] = value;\n }\n}\n\n/**\n * Check if path exists in object\n *\n * @param obj - Object to check\n * @param path - Path string (e.g., \"address.city\", \"tags[0]\")\n * @returns true if path exists and value is not undefined\n *\n * @example\n * const obj = { address: { city: \"Moscow\" } };\n * hasPath(obj, \"address.city\") // true\n * hasPath(obj, \"address.country\") // false\n */\nexport function hasPath(obj: JsonValue, path: string): boolean {\n const value = getValueByPath(obj, path);\n return value !== undefined;\n}\n\n/**\n * Deep equality comparison for plain JavaScript values\n * Handles objects, arrays, primitives, null, undefined\n *\n * @param a - First value\n * @param b - Second value\n * @returns true if values are deeply equal\n *\n * @example\n * deepEqual({ a: 1, b: 2 }, { a: 1, b: 2 }) // true\n * deepEqual([1, 2, 3], [1, 2, 3]) // true\n * deepEqual({ a: 1 }, { a: 2 }) // false\n * deepEqual(null, null) // true\n * deepEqual(undefined, undefined) // true\n */\nexport function deepEqual(a: unknown, b: unknown): boolean {\n if (a === b) {\n return true;\n }\n\n if (a === null && b === null) {\n return true;\n }\n\n if (a === undefined && b === undefined) {\n return true;\n }\n\n if (a == null || b == null) {\n return false;\n }\n\n if (typeof a !== typeof b) {\n return false;\n }\n\n if (typeof a !== 'object') {\n return false;\n }\n\n if (Array.isArray(a) && Array.isArray(b)) {\n const arrA = a as JsonArray;\n const arrB = b as JsonArray;\n if (arrA.length !== arrB.length) {\n return false;\n }\n for (let i = 0; i < arrA.length; i++) {\n const itemA = arrA[i];\n const itemB = arrB[i];\n\n if (itemA !== undefined && itemB !== undefined) {\n if (itemA === null && itemB === null) {\n continue;\n }\n if (!deepEqual(itemA, itemB)) {\n return false;\n }\n } else if (itemA !== itemB) {\n return false;\n }\n }\n return true;\n }\n\n if (Array.isArray(a) || Array.isArray(b)) {\n return false;\n }\n\n const objA = a as JsonObject;\n const objB = b as JsonObject;\n const keysA = Object.keys(objA);\n const keysB = Object.keys(objB);\n\n if (keysA.length !== keysB.length) {\n return false;\n }\n\n for (const key of keysA) {\n if (!keysB.includes(key)) {\n return false;\n }\n const valA = objA[key];\n const valB = objB[key];\n\n if (valA !== undefined && valB !== undefined) {\n if (valA === null && valB === null) {\n continue;\n }\n if (!deepEqual(valA, valB)) {\n return false;\n }\n } else if (valA !== valB) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Convert simplified JSON path to JSON Schema path\n *\n * @param jsonPath - JSON path string (e.g., \"title\", \"address.city\", \"tags[0]\", \"users[0].name\")\n * @returns JSON Schema path string\n *\n * @example\n * convertJsonPathToSchemaPath(\"title\") // \"/properties/title\"\n * convertJsonPathToSchemaPath(\"address.city\") // \"/properties/address/properties/city\"\n * convertJsonPathToSchemaPath(\"tags[0]\") // \"/properties/tags/items\"\n * convertJsonPathToSchemaPath(\"users[0].name\") // \"/properties/users/items/properties/name\"\n * convertJsonPathToSchemaPath(\"\") // \"\"\n */\nexport function convertJsonPathToSchemaPath(jsonPath: string): string {\n if (jsonPath === '') {\n return '';\n }\n\n const segments = parsePathSegments(jsonPath);\n\n let schemaPath = '';\n for (const segment of segments) {\n if (typeof segment === 'number') {\n schemaPath += '/items';\n } else {\n schemaPath += `/properties/${segment}`;\n }\n }\n\n return schemaPath;\n}\n","import { JsonArrayValueStore } from '../model/value/json-array-value.store.js';\nimport { JsonObjectValueStore } from '../model/value/json-object-value.store.js';\nimport { JsonValueStore } from '../model/value/json-value.store.js';\nimport { parsePath } from './json-path-utils.js';\n\nexport const getJsonValueStoreByPath = (\n root: JsonValueStore,\n path: string,\n): JsonValueStore => {\n if (!path) {\n return root;\n }\n\n const segments = parsePath(path);\n\n let current: JsonValueStore = root;\n\n for (const seg of segments) {\n if (current instanceof JsonObjectValueStore) {\n const next = current.value[String(seg)];\n if (!next) {\n throw new Error(`Path not found at segment \"${seg}\"`);\n }\n current = next;\n } else if (current instanceof JsonArrayValueStore) {\n if (typeof seg !== 'number') {\n throw new Error(`Invalid array index \"${seg}\"`);\n }\n const next = current.value[seg];\n if (!next) {\n throw new Error(`Path not found at segment \"${seg}\"`);\n }\n current = next;\n } else {\n throw new Error(`Cannot navigate into primitive at segment \"${seg}\"`);\n }\n }\n\n return current;\n};\n\n","import { JsonSchemaTypeName } from '../types/schema.types.js';\nimport { JsonValueStore } from '../model/value/json-value.store.js';\nimport { traverseValue } from './traverseValue.js';\n\nexport type ReplaceForeignKeyValueOptions = {\n valueStore: JsonValueStore;\n foreignKey: string;\n value: string;\n nextValue: string;\n};\n\nexport const replaceForeignKeyValue = (\n options: ReplaceForeignKeyValueOptions,\n) => {\n let wasUpdated = false;\n\n traverseValue(options.valueStore, (item) => {\n if (\n item.type === JsonSchemaTypeName.String &&\n item.foreignKey === options.foreignKey &&\n item.value === options.value\n ) {\n item.value = options.nextValue;\n wasUpdated = true;\n }\n });\n\n return wasUpdated;\n};\n","import { SystemSchemaIds } from '../consts/system-schema-ids.js';\nimport { createJsonSchemaStore } from './createJsonSchemaStore.js';\nimport {\n fileSchema,\n rowCreatedAtSchema,\n rowCreatedIdSchema,\n rowHashSchema,\n rowPublishedAtSchema,\n rowSchemaHashSchema,\n rowUpdatedAtSchema,\n rowVersionIdSchema,\n rowIdSchema,\n} from '../plugins/index.js';\nimport { JsonSchema } from '../types/schema.types.js';\n\nexport const pluginRefs: Readonly<Record<string, JsonSchema>> = {\n [SystemSchemaIds.RowId]: rowIdSchema,\n [SystemSchemaIds.RowVersionId]: rowVersionIdSchema,\n [SystemSchemaIds.RowCreatedId]: rowCreatedIdSchema,\n [SystemSchemaIds.RowCreatedAt]: rowCreatedAtSchema,\n [SystemSchemaIds.RowPublishedAt]: rowPublishedAtSchema,\n [SystemSchemaIds.RowUpdatedAt]: rowUpdatedAtSchema,\n [SystemSchemaIds.RowHash]: rowHashSchema,\n [SystemSchemaIds.RowSchemaHash]: rowSchemaHashSchema,\n [SystemSchemaIds.File]: fileSchema,\n};\n\nexport const resolveRefs = (schema: JsonSchema) => {\n const store = createJsonSchemaStore(schema, pluginRefs);\n return store.getPlainSchema({ skip$Ref: true });\n};\n","import { JsonSchema } from '../types/schema.types.js';\nimport { JsonValue } from '../types/json.types.js';\nimport { JsonPatch } from '../types/json-patch.types.js';\nimport { JsonSchemaStore } from '../model/schema/json-schema.store.js';\nimport { JsonValueStore } from '../model/value/json-value.store.js';\nimport { getTransformation } from '../model/value/value-transformation.js';\nimport { createJsonSchemaStore } from './createJsonSchemaStore.js';\nimport { createJsonValueStore } from './createJsonValueStore.js';\nimport {\n applyAddPatch,\n applyMovePatch,\n applyRemovePatch,\n applyReplacePatch,\n} from './applyPatches.js';\n\nexport class SchemaTable {\n private readonly rows = new Map<string, JsonValueStore>();\n private store: JsonSchemaStore;\n\n constructor(\n schema: JsonSchema,\n private readonly refs: Record<string, JsonSchema> = {},\n ) {\n this.store = createJsonSchemaStore(schema, refs);\n }\n\n public applyPatches(patches: JsonPatch[]): void {\n patches.forEach((patch) => {\n switch (patch.op) {\n case 'replace': {\n const nextStore = applyReplacePatch(this.store, patch, this.refs);\n if (nextStore !== this.store) {\n this.migrateRows(nextStore);\n }\n break;\n }\n case 'remove': {\n applyRemovePatch(this.store, patch);\n break;\n }\n case 'add': {\n applyAddPatch(this.store, patch, this.refs);\n break;\n }\n case 'move': {\n applyMovePatch(this.store, patch);\n break;\n }\n default:\n throw new Error(`Unsupported patch operation`);\n }\n });\n }\n\n public getSchema(): JsonSchema {\n return this.store.getPlainSchema();\n }\n\n public addRow(rowId: string, data: JsonValue) {\n const row = createJsonValueStore(this.store, rowId, data);\n\n this.rows.set(rowId, row);\n }\n\n public getRow(id: string): JsonValue {\n const row = this.rows.get(id);\n\n if (!row) {\n throw new Error('Invalid id');\n }\n\n return row.getPlainValue();\n }\n\n public getRows(): { id: string; data: JsonValue }[] {\n return [...this.rows].map(([id, data]) => ({\n id,\n data: data.getPlainValue(),\n }));\n }\n\n private migrateRows(nextStore: JsonSchemaStore): void {\n const transformation = getTransformation(this.store, nextStore);\n\n if (transformation) {\n for (const [rowId, row] of this.rows) {\n const rawNextValue = transformation(\n row.getPlainValue(),\n nextStore.default,\n ) as JsonValue;\n\n const nextRow = createJsonValueStore(nextStore, rowId, rawNextValue);\n this.rows.set(rowId, nextRow);\n }\n }\n\n this.store = nextStore;\n }\n}\n"]}
|
|
@@ -373,12 +373,205 @@ var getInvalidFieldNamesInSchema = (schema, refs = {}) => {
|
|
|
373
373
|
return invalidFields;
|
|
374
374
|
};
|
|
375
375
|
|
|
376
|
+
// src/lib/json-path-utils.ts
|
|
377
|
+
function parsePathSegments(path) {
|
|
378
|
+
const segments = [];
|
|
379
|
+
const regex = /([^.[\]]+)|\[(\d+)]/g;
|
|
380
|
+
let match;
|
|
381
|
+
while (match = regex.exec(path)) {
|
|
382
|
+
if (match[1] !== void 0) {
|
|
383
|
+
segments.push(match[1]);
|
|
384
|
+
} else if (match[2] !== void 0) {
|
|
385
|
+
segments.push(Number(match[2]));
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
return segments;
|
|
389
|
+
}
|
|
390
|
+
function parsePath(path) {
|
|
391
|
+
if (!path) {
|
|
392
|
+
return [];
|
|
393
|
+
}
|
|
394
|
+
return parsePathSegments(path);
|
|
395
|
+
}
|
|
396
|
+
function getValueByPath(obj, path) {
|
|
397
|
+
if (!path) {
|
|
398
|
+
return obj;
|
|
399
|
+
}
|
|
400
|
+
const segments = parsePath(path);
|
|
401
|
+
let current = obj;
|
|
402
|
+
for (const segment of segments) {
|
|
403
|
+
if (current == null) {
|
|
404
|
+
return void 0;
|
|
405
|
+
}
|
|
406
|
+
if (typeof segment === "number") {
|
|
407
|
+
if (!Array.isArray(current)) {
|
|
408
|
+
return void 0;
|
|
409
|
+
}
|
|
410
|
+
current = current[segment];
|
|
411
|
+
} else {
|
|
412
|
+
if (typeof current !== "object") {
|
|
413
|
+
return void 0;
|
|
414
|
+
}
|
|
415
|
+
current = current[segment];
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
return current;
|
|
419
|
+
}
|
|
420
|
+
function setValueByPath(obj, path, value) {
|
|
421
|
+
if (!path) {
|
|
422
|
+
throw new Error("Cannot set root value");
|
|
423
|
+
}
|
|
424
|
+
const segments = parsePath(path);
|
|
425
|
+
let current = obj;
|
|
426
|
+
for (let i = 0; i < segments.length - 1; i++) {
|
|
427
|
+
const segment = segments[i];
|
|
428
|
+
const nextSegment = segments[i + 1];
|
|
429
|
+
if (typeof segment === "number") {
|
|
430
|
+
if (!Array.isArray(current)) {
|
|
431
|
+
throw new TypeError(
|
|
432
|
+
`Cannot set array index on non-array at segment ${i}`
|
|
433
|
+
);
|
|
434
|
+
}
|
|
435
|
+
const arr = current;
|
|
436
|
+
if (segment > arr.length) {
|
|
437
|
+
throw new Error(
|
|
438
|
+
`Cannot create sparse array: index ${segment} is out of bounds (array length: ${arr.length}) at segment ${i}`
|
|
439
|
+
);
|
|
440
|
+
}
|
|
441
|
+
if (arr[segment] == null) {
|
|
442
|
+
arr[segment] = typeof nextSegment === "number" ? [] : {};
|
|
443
|
+
}
|
|
444
|
+
current = arr[segment];
|
|
445
|
+
} else if (typeof segment === "string") {
|
|
446
|
+
if (current == null || typeof current !== "object" || Array.isArray(current)) {
|
|
447
|
+
throw new Error(`Cannot set property on non-object at segment ${i}`);
|
|
448
|
+
}
|
|
449
|
+
const obj2 = current;
|
|
450
|
+
if (obj2[segment] == null) {
|
|
451
|
+
obj2[segment] = typeof nextSegment === "number" ? [] : {};
|
|
452
|
+
}
|
|
453
|
+
current = obj2[segment];
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
const lastSegment = segments[segments.length - 1];
|
|
457
|
+
if (typeof lastSegment === "number") {
|
|
458
|
+
if (!Array.isArray(current)) {
|
|
459
|
+
throw new TypeError(
|
|
460
|
+
`Cannot set array index on non-array at segment ${segments.length - 1}`
|
|
461
|
+
);
|
|
462
|
+
}
|
|
463
|
+
const arr = current;
|
|
464
|
+
if (lastSegment > arr.length) {
|
|
465
|
+
throw new Error(
|
|
466
|
+
`Cannot create sparse array: index ${lastSegment} is out of bounds (array length: ${arr.length})`
|
|
467
|
+
);
|
|
468
|
+
}
|
|
469
|
+
arr[lastSegment] = value;
|
|
470
|
+
} else if (typeof lastSegment === "string") {
|
|
471
|
+
if (current == null || typeof current !== "object" || Array.isArray(current)) {
|
|
472
|
+
throw new Error(
|
|
473
|
+
`Cannot set property on non-object at segment ${segments.length - 1}`
|
|
474
|
+
);
|
|
475
|
+
}
|
|
476
|
+
current[lastSegment] = value;
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
function hasPath(obj, path) {
|
|
480
|
+
const value = getValueByPath(obj, path);
|
|
481
|
+
return value !== void 0;
|
|
482
|
+
}
|
|
483
|
+
function deepEqual(a, b) {
|
|
484
|
+
if (a === b) {
|
|
485
|
+
return true;
|
|
486
|
+
}
|
|
487
|
+
if (a === null && b === null) {
|
|
488
|
+
return true;
|
|
489
|
+
}
|
|
490
|
+
if (a === void 0 && b === void 0) {
|
|
491
|
+
return true;
|
|
492
|
+
}
|
|
493
|
+
if (a == null || b == null) {
|
|
494
|
+
return false;
|
|
495
|
+
}
|
|
496
|
+
if (typeof a !== typeof b) {
|
|
497
|
+
return false;
|
|
498
|
+
}
|
|
499
|
+
if (typeof a !== "object") {
|
|
500
|
+
return false;
|
|
501
|
+
}
|
|
502
|
+
if (Array.isArray(a) && Array.isArray(b)) {
|
|
503
|
+
const arrA = a;
|
|
504
|
+
const arrB = b;
|
|
505
|
+
if (arrA.length !== arrB.length) {
|
|
506
|
+
return false;
|
|
507
|
+
}
|
|
508
|
+
for (let i = 0; i < arrA.length; i++) {
|
|
509
|
+
const itemA = arrA[i];
|
|
510
|
+
const itemB = arrB[i];
|
|
511
|
+
if (itemA !== void 0 && itemB !== void 0) {
|
|
512
|
+
if (itemA === null && itemB === null) {
|
|
513
|
+
continue;
|
|
514
|
+
}
|
|
515
|
+
if (!deepEqual(itemA, itemB)) {
|
|
516
|
+
return false;
|
|
517
|
+
}
|
|
518
|
+
} else if (itemA !== itemB) {
|
|
519
|
+
return false;
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
return true;
|
|
523
|
+
}
|
|
524
|
+
if (Array.isArray(a) || Array.isArray(b)) {
|
|
525
|
+
return false;
|
|
526
|
+
}
|
|
527
|
+
const objA = a;
|
|
528
|
+
const objB = b;
|
|
529
|
+
const keysA = Object.keys(objA);
|
|
530
|
+
const keysB = Object.keys(objB);
|
|
531
|
+
if (keysA.length !== keysB.length) {
|
|
532
|
+
return false;
|
|
533
|
+
}
|
|
534
|
+
for (const key of keysA) {
|
|
535
|
+
if (!keysB.includes(key)) {
|
|
536
|
+
return false;
|
|
537
|
+
}
|
|
538
|
+
const valA = objA[key];
|
|
539
|
+
const valB = objB[key];
|
|
540
|
+
if (valA !== void 0 && valB !== void 0) {
|
|
541
|
+
if (valA === null && valB === null) {
|
|
542
|
+
continue;
|
|
543
|
+
}
|
|
544
|
+
if (!deepEqual(valA, valB)) {
|
|
545
|
+
return false;
|
|
546
|
+
}
|
|
547
|
+
} else if (valA !== valB) {
|
|
548
|
+
return false;
|
|
549
|
+
}
|
|
550
|
+
}
|
|
551
|
+
return true;
|
|
552
|
+
}
|
|
553
|
+
function convertJsonPathToSchemaPath(jsonPath) {
|
|
554
|
+
if (jsonPath === "") {
|
|
555
|
+
return "";
|
|
556
|
+
}
|
|
557
|
+
const segments = parsePathSegments(jsonPath);
|
|
558
|
+
let schemaPath = "";
|
|
559
|
+
for (const segment of segments) {
|
|
560
|
+
if (typeof segment === "number") {
|
|
561
|
+
schemaPath += "/items";
|
|
562
|
+
} else {
|
|
563
|
+
schemaPath += `/properties/${segment}`;
|
|
564
|
+
}
|
|
565
|
+
}
|
|
566
|
+
return schemaPath;
|
|
567
|
+
}
|
|
568
|
+
|
|
376
569
|
// src/lib/getJsonValueByPath.ts
|
|
377
570
|
var getJsonValueStoreByPath = (root, path) => {
|
|
378
571
|
if (!path) {
|
|
379
572
|
return root;
|
|
380
573
|
}
|
|
381
|
-
const segments =
|
|
574
|
+
const segments = parsePath(path);
|
|
382
575
|
let current = root;
|
|
383
576
|
for (const seg of segments) {
|
|
384
577
|
if (current instanceof chunkJLIZ7QT2_cjs.JsonObjectValueStore) {
|
|
@@ -402,19 +595,6 @@ var getJsonValueStoreByPath = (root, path) => {
|
|
|
402
595
|
}
|
|
403
596
|
return current;
|
|
404
597
|
};
|
|
405
|
-
var regex = /([^.[\]]+)|\[(\d+)]/g;
|
|
406
|
-
var getSegments = (path) => {
|
|
407
|
-
const segments = [];
|
|
408
|
-
let match;
|
|
409
|
-
while (match = regex.exec(path)) {
|
|
410
|
-
if (match[1] !== void 0) {
|
|
411
|
-
segments.push(match[1]);
|
|
412
|
-
} else if (match[2] !== void 0) {
|
|
413
|
-
segments.push(Number(match[2]));
|
|
414
|
-
}
|
|
415
|
-
}
|
|
416
|
-
return segments;
|
|
417
|
-
};
|
|
418
598
|
|
|
419
599
|
// src/lib/replaceForeignKeyValue.ts
|
|
420
600
|
var replaceForeignKeyValue = (options) => {
|
|
@@ -522,9 +702,11 @@ exports.applyAddPatch = applyAddPatch;
|
|
|
522
702
|
exports.applyMovePatch = applyMovePatch;
|
|
523
703
|
exports.applyRemovePatch = applyRemovePatch;
|
|
524
704
|
exports.applyReplacePatch = applyReplacePatch;
|
|
705
|
+
exports.convertJsonPathToSchemaPath = convertJsonPathToSchemaPath;
|
|
525
706
|
exports.createJsonObjectSchemaStore = createJsonObjectSchemaStore;
|
|
526
707
|
exports.createJsonSchemaStore = createJsonSchemaStore;
|
|
527
708
|
exports.createPrimitiveStoreBySchema = createPrimitiveStoreBySchema;
|
|
709
|
+
exports.deepEqual = deepEqual;
|
|
528
710
|
exports.getDBJsonPathByJsonSchemaStore = getDBJsonPathByJsonSchemaStore;
|
|
529
711
|
exports.getForeignKeyPatchesFromSchema = getForeignKeyPatchesFromSchema;
|
|
530
712
|
exports.getForeignKeysFromSchema = getForeignKeysFromSchema;
|
|
@@ -534,12 +716,16 @@ exports.getJsonSchemaStoreByPath = getJsonSchemaStoreByPath;
|
|
|
534
716
|
exports.getJsonValueStoreByPath = getJsonValueStoreByPath;
|
|
535
717
|
exports.getParentForPath = getParentForPath;
|
|
536
718
|
exports.getPathByStore = getPathByStore;
|
|
719
|
+
exports.getValueByPath = getValueByPath;
|
|
720
|
+
exports.hasPath = hasPath;
|
|
721
|
+
exports.parsePath = parsePath;
|
|
537
722
|
exports.pluginRefs = pluginRefs;
|
|
538
723
|
exports.replaceForeignKeyValue = replaceForeignKeyValue;
|
|
539
724
|
exports.resolveRefs = resolveRefs;
|
|
540
725
|
exports.saveSharedFields = saveSharedFields;
|
|
726
|
+
exports.setValueByPath = setValueByPath;
|
|
541
727
|
exports.traverseStore = traverseStore;
|
|
542
728
|
exports.traverseValue = traverseValue;
|
|
543
729
|
exports.validateJsonFieldName = validateJsonFieldName;
|
|
544
|
-
//# sourceMappingURL=chunk-
|
|
545
|
-
//# sourceMappingURL=chunk-
|
|
730
|
+
//# sourceMappingURL=chunk-HS345SIP.cjs.map
|
|
731
|
+
//# sourceMappingURL=chunk-HS345SIP.cjs.map
|