@rjsf/utils 5.21.2 → 5.22.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/index.js +184 -61
- package/dist/index.js.map +2 -2
- package/dist/utils.esm.js +184 -61
- package/dist/utils.esm.js.map +2 -2
- package/dist/utils.umd.js +179 -64
- package/lib/createSchemaUtils.d.ts +3 -2
- package/lib/createSchemaUtils.js +17 -11
- package/lib/createSchemaUtils.js.map +1 -1
- package/lib/mergeDefaultsWithFormData.d.ts +4 -2
- package/lib/mergeDefaultsWithFormData.js +9 -4
- package/lib/mergeDefaultsWithFormData.js.map +1 -1
- package/lib/schema/getClosestMatchingOption.js +6 -2
- package/lib/schema/getClosestMatchingOption.js.map +1 -1
- package/lib/schema/getDefaultFormState.d.ts +6 -3
- package/lib/schema/getDefaultFormState.js +43 -22
- package/lib/schema/getDefaultFormState.js.map +1 -1
- package/lib/schema/retrieveSchema.d.ts +19 -10
- package/lib/schema/retrieveSchema.js +38 -27
- package/lib/schema/retrieveSchema.js.map +1 -1
- package/lib/schema/toIdSchema.d.ts +3 -2
- package/lib/schema/toIdSchema.js +8 -6
- package/lib/schema/toIdSchema.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/lib/types.d.ts +19 -3
- package/package.json +2 -2
- package/src/createSchemaUtils.ts +43 -11
- package/src/mergeDefaultsWithFormData.ts +16 -4
- package/src/schema/getClosestMatchingOption.ts +6 -2
- package/src/schema/getDefaultFormState.ts +58 -19
- package/src/schema/retrieveSchema.ts +110 -28
- package/src/schema/toIdSchema.ts +32 -7
- package/src/types.ts +20 -2
package/dist/utils.esm.js
CHANGED
|
@@ -367,10 +367,18 @@ function mergeSchemas(obj1, obj2) {
|
|
|
367
367
|
}
|
|
368
368
|
|
|
369
369
|
// src/schema/retrieveSchema.ts
|
|
370
|
-
function retrieveSchema(validator, schema, rootSchema = {}, rawFormData) {
|
|
371
|
-
return retrieveSchemaInternal(
|
|
370
|
+
function retrieveSchema(validator, schema, rootSchema = {}, rawFormData, experimental_customMergeAllOf) {
|
|
371
|
+
return retrieveSchemaInternal(
|
|
372
|
+
validator,
|
|
373
|
+
schema,
|
|
374
|
+
rootSchema,
|
|
375
|
+
rawFormData,
|
|
376
|
+
void 0,
|
|
377
|
+
void 0,
|
|
378
|
+
experimental_customMergeAllOf
|
|
379
|
+
)[0];
|
|
372
380
|
}
|
|
373
|
-
function resolveCondition(validator, schema, rootSchema, expandAllBranches, recurseList, formData) {
|
|
381
|
+
function resolveCondition(validator, schema, rootSchema, expandAllBranches, recurseList, formData, experimental_customMergeAllOf) {
|
|
374
382
|
const { if: expression, then, else: otherwise, ...resolvedSchemaLessConditional } = schema;
|
|
375
383
|
const conditionValue = validator.isValid(expression, formData || {}, rootSchema);
|
|
376
384
|
let resolvedSchemas = [resolvedSchemaLessConditional];
|
|
@@ -378,12 +386,28 @@ function resolveCondition(validator, schema, rootSchema, expandAllBranches, recu
|
|
|
378
386
|
if (expandAllBranches) {
|
|
379
387
|
if (then && typeof then !== "boolean") {
|
|
380
388
|
schemas = schemas.concat(
|
|
381
|
-
retrieveSchemaInternal(
|
|
389
|
+
retrieveSchemaInternal(
|
|
390
|
+
validator,
|
|
391
|
+
then,
|
|
392
|
+
rootSchema,
|
|
393
|
+
formData,
|
|
394
|
+
expandAllBranches,
|
|
395
|
+
recurseList,
|
|
396
|
+
experimental_customMergeAllOf
|
|
397
|
+
)
|
|
382
398
|
);
|
|
383
399
|
}
|
|
384
400
|
if (otherwise && typeof otherwise !== "boolean") {
|
|
385
401
|
schemas = schemas.concat(
|
|
386
|
-
retrieveSchemaInternal(
|
|
402
|
+
retrieveSchemaInternal(
|
|
403
|
+
validator,
|
|
404
|
+
otherwise,
|
|
405
|
+
rootSchema,
|
|
406
|
+
formData,
|
|
407
|
+
expandAllBranches,
|
|
408
|
+
recurseList,
|
|
409
|
+
experimental_customMergeAllOf
|
|
410
|
+
)
|
|
387
411
|
);
|
|
388
412
|
}
|
|
389
413
|
} else {
|
|
@@ -396,7 +420,8 @@ function resolveCondition(validator, schema, rootSchema, expandAllBranches, recu
|
|
|
396
420
|
rootSchema,
|
|
397
421
|
formData,
|
|
398
422
|
expandAllBranches,
|
|
399
|
-
recurseList
|
|
423
|
+
recurseList,
|
|
424
|
+
experimental_customMergeAllOf
|
|
400
425
|
)
|
|
401
426
|
);
|
|
402
427
|
}
|
|
@@ -405,7 +430,15 @@ function resolveCondition(validator, schema, rootSchema, expandAllBranches, recu
|
|
|
405
430
|
resolvedSchemas = schemas.map((s) => mergeSchemas(resolvedSchemaLessConditional, s));
|
|
406
431
|
}
|
|
407
432
|
return resolvedSchemas.flatMap(
|
|
408
|
-
(s) => retrieveSchemaInternal(
|
|
433
|
+
(s) => retrieveSchemaInternal(
|
|
434
|
+
validator,
|
|
435
|
+
s,
|
|
436
|
+
rootSchema,
|
|
437
|
+
formData,
|
|
438
|
+
expandAllBranches,
|
|
439
|
+
recurseList,
|
|
440
|
+
experimental_customMergeAllOf
|
|
441
|
+
)
|
|
409
442
|
);
|
|
410
443
|
}
|
|
411
444
|
function getAllPermutationsOfXxxOf(listOfLists) {
|
|
@@ -422,7 +455,7 @@ function getAllPermutationsOfXxxOf(listOfLists) {
|
|
|
422
455
|
);
|
|
423
456
|
return allPermutations;
|
|
424
457
|
}
|
|
425
|
-
function resolveSchema(validator, schema, rootSchema, expandAllBranches, recurseList, formData) {
|
|
458
|
+
function resolveSchema(validator, schema, rootSchema, expandAllBranches, recurseList, formData, experimental_customMergeAllOf) {
|
|
426
459
|
const updatedSchemas = resolveReference(
|
|
427
460
|
validator,
|
|
428
461
|
schema,
|
|
@@ -444,7 +477,15 @@ function resolveSchema(validator, schema, rootSchema, expandAllBranches, recurse
|
|
|
444
477
|
formData
|
|
445
478
|
);
|
|
446
479
|
return resolvedSchemas.flatMap((s) => {
|
|
447
|
-
return retrieveSchemaInternal(
|
|
480
|
+
return retrieveSchemaInternal(
|
|
481
|
+
validator,
|
|
482
|
+
s,
|
|
483
|
+
rootSchema,
|
|
484
|
+
formData,
|
|
485
|
+
expandAllBranches,
|
|
486
|
+
recurseList,
|
|
487
|
+
experimental_customMergeAllOf
|
|
488
|
+
);
|
|
448
489
|
});
|
|
449
490
|
}
|
|
450
491
|
if (ALL_OF_KEY in schema && Array.isArray(schema.allOf)) {
|
|
@@ -455,7 +496,8 @@ function resolveSchema(validator, schema, rootSchema, expandAllBranches, recurse
|
|
|
455
496
|
rootSchema,
|
|
456
497
|
formData,
|
|
457
498
|
expandAllBranches,
|
|
458
|
-
recurseList
|
|
499
|
+
recurseList,
|
|
500
|
+
experimental_customMergeAllOf
|
|
459
501
|
)
|
|
460
502
|
);
|
|
461
503
|
const allPermutations = getAllPermutationsOfXxxOf(allOfSchemaElements);
|
|
@@ -463,7 +505,7 @@ function resolveSchema(validator, schema, rootSchema, expandAllBranches, recurse
|
|
|
463
505
|
}
|
|
464
506
|
return [schema];
|
|
465
507
|
}
|
|
466
|
-
function resolveReference(validator, schema, rootSchema, expandAllBranches, recurseList, formData) {
|
|
508
|
+
function resolveReference(validator, schema, rootSchema, expandAllBranches, recurseList, formData, experimental_customMergeAllOf) {
|
|
467
509
|
const updatedSchema = resolveAllReferences(schema, rootSchema, recurseList);
|
|
468
510
|
if (updatedSchema !== schema) {
|
|
469
511
|
return retrieveSchemaInternal(
|
|
@@ -472,7 +514,8 @@ function resolveReference(validator, schema, rootSchema, expandAllBranches, recu
|
|
|
472
514
|
rootSchema,
|
|
473
515
|
formData,
|
|
474
516
|
expandAllBranches,
|
|
475
|
-
recurseList
|
|
517
|
+
recurseList,
|
|
518
|
+
experimental_customMergeAllOf
|
|
476
519
|
);
|
|
477
520
|
}
|
|
478
521
|
return [schema];
|
|
@@ -550,7 +593,7 @@ function stubExistingAdditionalProperties(validator, theSchema, rootSchema, aFor
|
|
|
550
593
|
});
|
|
551
594
|
return schema;
|
|
552
595
|
}
|
|
553
|
-
function retrieveSchemaInternal(validator, schema, rootSchema, rawFormData, expandAllBranches = false, recurseList = []) {
|
|
596
|
+
function retrieveSchemaInternal(validator, schema, rootSchema, rawFormData, expandAllBranches = false, recurseList = [], experimental_customMergeAllOf) {
|
|
554
597
|
if (!isObject(schema)) {
|
|
555
598
|
return [{}];
|
|
556
599
|
}
|
|
@@ -571,7 +614,8 @@ function retrieveSchemaInternal(validator, schema, rootSchema, rawFormData, expa
|
|
|
571
614
|
rootSchema,
|
|
572
615
|
expandAllBranches,
|
|
573
616
|
recurseList,
|
|
574
|
-
rawFormData
|
|
617
|
+
rawFormData,
|
|
618
|
+
experimental_customMergeAllOf
|
|
575
619
|
);
|
|
576
620
|
}
|
|
577
621
|
if (ALL_OF_KEY in resolvedSchema) {
|
|
@@ -592,7 +636,7 @@ function retrieveSchemaInternal(validator, schema, rootSchema, rawFormData, expa
|
|
|
592
636
|
if (withContainsSchemas.length) {
|
|
593
637
|
resolvedSchema = { ...resolvedSchema, allOf: withoutContainsSchemas };
|
|
594
638
|
}
|
|
595
|
-
resolvedSchema = mergeAllOf(resolvedSchema, {
|
|
639
|
+
resolvedSchema = experimental_customMergeAllOf ? experimental_customMergeAllOf(resolvedSchema) : mergeAllOf(resolvedSchema, {
|
|
596
640
|
deep: false
|
|
597
641
|
});
|
|
598
642
|
if (withContainsSchemas.length) {
|
|
@@ -633,7 +677,7 @@ function resolveAnyOrOneOfSchemas(validator, schema, rootSchema, expandAllBranch
|
|
|
633
677
|
}
|
|
634
678
|
return [schema];
|
|
635
679
|
}
|
|
636
|
-
function resolveDependencies(validator, schema, rootSchema, expandAllBranches, recurseList, formData) {
|
|
680
|
+
function resolveDependencies(validator, schema, rootSchema, expandAllBranches, recurseList, formData, experimental_customMergeAllOf) {
|
|
637
681
|
const { dependencies, ...remainingSchema } = schema;
|
|
638
682
|
const resolvedSchemas = resolveAnyOrOneOfSchemas(
|
|
639
683
|
validator,
|
|
@@ -650,11 +694,12 @@ function resolveDependencies(validator, schema, rootSchema, expandAllBranches, r
|
|
|
650
694
|
rootSchema,
|
|
651
695
|
expandAllBranches,
|
|
652
696
|
recurseList,
|
|
653
|
-
formData
|
|
697
|
+
formData,
|
|
698
|
+
experimental_customMergeAllOf
|
|
654
699
|
)
|
|
655
700
|
);
|
|
656
701
|
}
|
|
657
|
-
function processDependencies(validator, dependencies, resolvedSchema, rootSchema, expandAllBranches, recurseList, formData) {
|
|
702
|
+
function processDependencies(validator, dependencies, resolvedSchema, rootSchema, expandAllBranches, recurseList, formData, experimental_customMergeAllOf) {
|
|
658
703
|
let schemas = [resolvedSchema];
|
|
659
704
|
for (const dependencyKey in dependencies) {
|
|
660
705
|
if (!expandAllBranches && get4(formData, [dependencyKey]) === void 0) {
|
|
@@ -678,7 +723,8 @@ function processDependencies(validator, dependencies, resolvedSchema, rootSchema
|
|
|
678
723
|
dependencyValue,
|
|
679
724
|
expandAllBranches,
|
|
680
725
|
recurseList,
|
|
681
|
-
formData
|
|
726
|
+
formData,
|
|
727
|
+
experimental_customMergeAllOf
|
|
682
728
|
);
|
|
683
729
|
}
|
|
684
730
|
return schemas.flatMap(
|
|
@@ -689,7 +735,8 @@ function processDependencies(validator, dependencies, resolvedSchema, rootSchema
|
|
|
689
735
|
rootSchema,
|
|
690
736
|
expandAllBranches,
|
|
691
737
|
recurseList,
|
|
692
|
-
formData
|
|
738
|
+
formData,
|
|
739
|
+
experimental_customMergeAllOf
|
|
693
740
|
)
|
|
694
741
|
);
|
|
695
742
|
}
|
|
@@ -702,14 +749,15 @@ function withDependentProperties(schema, additionallyRequired) {
|
|
|
702
749
|
const required = Array.isArray(schema.required) ? Array.from(/* @__PURE__ */ new Set([...schema.required, ...additionallyRequired])) : additionallyRequired;
|
|
703
750
|
return { ...schema, required };
|
|
704
751
|
}
|
|
705
|
-
function withDependentSchema(validator, schema, rootSchema, dependencyKey, dependencyValue, expandAllBranches, recurseList, formData) {
|
|
752
|
+
function withDependentSchema(validator, schema, rootSchema, dependencyKey, dependencyValue, expandAllBranches, recurseList, formData, experimental_customMergeAllOf) {
|
|
706
753
|
const dependentSchemas = retrieveSchemaInternal(
|
|
707
754
|
validator,
|
|
708
755
|
dependencyValue,
|
|
709
756
|
rootSchema,
|
|
710
757
|
formData,
|
|
711
758
|
expandAllBranches,
|
|
712
|
-
recurseList
|
|
759
|
+
recurseList,
|
|
760
|
+
experimental_customMergeAllOf
|
|
713
761
|
);
|
|
714
762
|
return dependentSchemas.flatMap((dependent) => {
|
|
715
763
|
const { oneOf, ...dependentSchema } = dependent;
|
|
@@ -733,12 +781,13 @@ function withDependentSchema(validator, schema, rootSchema, dependencyKey, depen
|
|
|
733
781
|
resolvedOneOf,
|
|
734
782
|
expandAllBranches,
|
|
735
783
|
recurseList,
|
|
736
|
-
formData
|
|
784
|
+
formData,
|
|
785
|
+
experimental_customMergeAllOf
|
|
737
786
|
)
|
|
738
787
|
);
|
|
739
788
|
});
|
|
740
789
|
}
|
|
741
|
-
function withExactlyOneSubschema(validator, schema, rootSchema, dependencyKey, oneOf, expandAllBranches, recurseList, formData) {
|
|
790
|
+
function withExactlyOneSubschema(validator, schema, rootSchema, dependencyKey, oneOf, expandAllBranches, recurseList, formData, experimental_customMergeAllOf) {
|
|
742
791
|
const validSubschemas = oneOf.filter((subschema) => {
|
|
743
792
|
if (typeof subschema === "boolean" || !subschema || !subschema.properties) {
|
|
744
793
|
return false;
|
|
@@ -769,7 +818,8 @@ function withExactlyOneSubschema(validator, schema, rootSchema, dependencyKey, o
|
|
|
769
818
|
rootSchema,
|
|
770
819
|
formData,
|
|
771
820
|
expandAllBranches,
|
|
772
|
-
recurseList
|
|
821
|
+
recurseList,
|
|
822
|
+
experimental_customMergeAllOf
|
|
773
823
|
);
|
|
774
824
|
return schemas.map((s2) => mergeSchemas(schema, s2));
|
|
775
825
|
});
|
|
@@ -785,7 +835,7 @@ var JUNK_OPTION = {
|
|
|
785
835
|
}
|
|
786
836
|
}
|
|
787
837
|
};
|
|
788
|
-
function calculateIndexScore(validator, rootSchema, schema, formData
|
|
838
|
+
function calculateIndexScore(validator, rootSchema, schema, formData) {
|
|
789
839
|
let totalScore = 0;
|
|
790
840
|
if (schema) {
|
|
791
841
|
if (isObject2(schema.properties)) {
|
|
@@ -813,7 +863,10 @@ function calculateIndexScore(validator, rootSchema, schema, formData = {}) {
|
|
|
813
863
|
);
|
|
814
864
|
}
|
|
815
865
|
if (value.type === "object") {
|
|
816
|
-
|
|
866
|
+
if (isObject2(formValue)) {
|
|
867
|
+
score += 1;
|
|
868
|
+
}
|
|
869
|
+
return score + calculateIndexScore(validator, rootSchema, value, formValue);
|
|
817
870
|
}
|
|
818
871
|
if (value.type === guessType(formValue)) {
|
|
819
872
|
let newScore = score + 1;
|
|
@@ -883,12 +936,17 @@ function isFixedItems(schema) {
|
|
|
883
936
|
|
|
884
937
|
// src/mergeDefaultsWithFormData.ts
|
|
885
938
|
import get6 from "lodash/get";
|
|
886
|
-
function mergeDefaultsWithFormData(defaults, formData, mergeExtraArrayDefaults = false) {
|
|
939
|
+
function mergeDefaultsWithFormData(defaults, formData, mergeExtraArrayDefaults = false, defaultSupercedesUndefined = false) {
|
|
887
940
|
if (Array.isArray(formData)) {
|
|
888
941
|
const defaultsArray = Array.isArray(defaults) ? defaults : [];
|
|
889
942
|
const mapped = formData.map((value, idx) => {
|
|
890
943
|
if (defaultsArray[idx]) {
|
|
891
|
-
return mergeDefaultsWithFormData(
|
|
944
|
+
return mergeDefaultsWithFormData(
|
|
945
|
+
defaultsArray[idx],
|
|
946
|
+
value,
|
|
947
|
+
mergeExtraArrayDefaults,
|
|
948
|
+
defaultSupercedesUndefined
|
|
949
|
+
);
|
|
892
950
|
}
|
|
893
951
|
return value;
|
|
894
952
|
});
|
|
@@ -903,11 +961,15 @@ function mergeDefaultsWithFormData(defaults, formData, mergeExtraArrayDefaults =
|
|
|
903
961
|
acc2[key] = mergeDefaultsWithFormData(
|
|
904
962
|
defaults ? get6(defaults, key) : {},
|
|
905
963
|
get6(formData, key),
|
|
906
|
-
mergeExtraArrayDefaults
|
|
964
|
+
mergeExtraArrayDefaults,
|
|
965
|
+
defaultSupercedesUndefined
|
|
907
966
|
);
|
|
908
967
|
return acc2;
|
|
909
968
|
}, acc);
|
|
910
969
|
}
|
|
970
|
+
if (defaultSupercedesUndefined && formData === void 0) {
|
|
971
|
+
return defaults;
|
|
972
|
+
}
|
|
911
973
|
return formData;
|
|
912
974
|
}
|
|
913
975
|
|
|
@@ -978,9 +1040,9 @@ function getInnerSchemaForArrayItem(schema, additionalItems = 0 /* Ignore */, id
|
|
|
978
1040
|
}
|
|
979
1041
|
return {};
|
|
980
1042
|
}
|
|
981
|
-
function maybeAddDefaultToObject(obj, key, computedDefault, includeUndefinedValues, isParentRequired, requiredFields = [], experimental_defaultFormStateBehavior = {}) {
|
|
1043
|
+
function maybeAddDefaultToObject(obj, key, computedDefault, includeUndefinedValues, isParentRequired, requiredFields = [], experimental_defaultFormStateBehavior = {}, isConst = false) {
|
|
982
1044
|
const { emptyObjectFields = "populateAllDefaults" } = experimental_defaultFormStateBehavior;
|
|
983
|
-
if (includeUndefinedValues) {
|
|
1045
|
+
if (includeUndefinedValues || isConst) {
|
|
984
1046
|
obj[key] = computedDefault;
|
|
985
1047
|
} else if (emptyObjectFields !== "skipDefaults") {
|
|
986
1048
|
if (isObject(computedDefault)) {
|
|
@@ -1010,6 +1072,7 @@ function computeDefaults(validator, rawSchema, computeDefaultsProps = {}) {
|
|
|
1010
1072
|
includeUndefinedValues = false,
|
|
1011
1073
|
_recurseList = [],
|
|
1012
1074
|
experimental_defaultFormStateBehavior = void 0,
|
|
1075
|
+
experimental_customMergeAllOf = void 0,
|
|
1013
1076
|
required
|
|
1014
1077
|
} = computeDefaultsProps;
|
|
1015
1078
|
const formData = isObject(rawFormData) ? rawFormData : {};
|
|
@@ -1017,7 +1080,9 @@ function computeDefaults(validator, rawSchema, computeDefaultsProps = {}) {
|
|
|
1017
1080
|
let defaults = parentDefaults;
|
|
1018
1081
|
let schemaToCompute = null;
|
|
1019
1082
|
let updatedRecurseList = _recurseList;
|
|
1020
|
-
if (
|
|
1083
|
+
if (isConstant(schema)) {
|
|
1084
|
+
defaults = schema.const;
|
|
1085
|
+
} else if (isObject(defaults) && isObject(schema.default)) {
|
|
1021
1086
|
defaults = mergeObjects(defaults, schema.default);
|
|
1022
1087
|
} else if (DEFAULT_KEY in schema) {
|
|
1023
1088
|
defaults = schema.default;
|
|
@@ -1032,7 +1097,15 @@ function computeDefaults(validator, rawSchema, computeDefaultsProps = {}) {
|
|
|
1032
1097
|
...formData,
|
|
1033
1098
|
...getDefaultBasedOnSchemaType(validator, schema, computeDefaultsProps, defaults)
|
|
1034
1099
|
};
|
|
1035
|
-
const resolvedSchema = resolveDependencies(
|
|
1100
|
+
const resolvedSchema = resolveDependencies(
|
|
1101
|
+
validator,
|
|
1102
|
+
schema,
|
|
1103
|
+
rootSchema,
|
|
1104
|
+
false,
|
|
1105
|
+
[],
|
|
1106
|
+
defaultFormData,
|
|
1107
|
+
experimental_customMergeAllOf
|
|
1108
|
+
);
|
|
1036
1109
|
schemaToCompute = resolvedSchema[0];
|
|
1037
1110
|
} else if (isFixedItems(schema)) {
|
|
1038
1111
|
defaults = schema.items.map(
|
|
@@ -1100,18 +1173,24 @@ function getObjectDefaults(validator, rawSchema, {
|
|
|
1100
1173
|
includeUndefinedValues = false,
|
|
1101
1174
|
_recurseList = [],
|
|
1102
1175
|
experimental_defaultFormStateBehavior = void 0,
|
|
1176
|
+
experimental_customMergeAllOf = void 0,
|
|
1103
1177
|
required
|
|
1104
1178
|
} = {}, defaults) {
|
|
1105
1179
|
{
|
|
1106
1180
|
const formData = isObject(rawFormData) ? rawFormData : {};
|
|
1107
1181
|
const schema = rawSchema;
|
|
1108
|
-
const retrievedSchema = experimental_defaultFormStateBehavior?.allOf === "populateDefaults" && ALL_OF_KEY in schema ? retrieveSchema(validator, schema, rootSchema, formData) : schema;
|
|
1182
|
+
const retrievedSchema = experimental_defaultFormStateBehavior?.allOf === "populateDefaults" && ALL_OF_KEY in schema ? retrieveSchema(validator, schema, rootSchema, formData, experimental_customMergeAllOf) : schema;
|
|
1183
|
+
const parentConst = retrievedSchema[CONST_KEY];
|
|
1109
1184
|
const objectDefaults = Object.keys(retrievedSchema.properties || {}).reduce(
|
|
1110
1185
|
(acc, key) => {
|
|
1111
|
-
const
|
|
1186
|
+
const propertySchema = get7(retrievedSchema, [PROPERTIES_KEY, key]);
|
|
1187
|
+
const hasParentConst = isObject(parentConst) && parentConst[key] !== void 0;
|
|
1188
|
+
const hasConst = isObject(propertySchema) && CONST_KEY in propertySchema || hasParentConst;
|
|
1189
|
+
const computedDefault = computeDefaults(validator, propertySchema, {
|
|
1112
1190
|
rootSchema,
|
|
1113
1191
|
_recurseList,
|
|
1114
1192
|
experimental_defaultFormStateBehavior,
|
|
1193
|
+
experimental_customMergeAllOf,
|
|
1115
1194
|
includeUndefinedValues: includeUndefinedValues === true,
|
|
1116
1195
|
parentDefaults: get7(defaults, [key]),
|
|
1117
1196
|
rawFormData: get7(formData, [key]),
|
|
@@ -1124,7 +1203,8 @@ function getObjectDefaults(validator, rawSchema, {
|
|
|
1124
1203
|
includeUndefinedValues,
|
|
1125
1204
|
required,
|
|
1126
1205
|
retrievedSchema.required,
|
|
1127
|
-
experimental_defaultFormStateBehavior
|
|
1206
|
+
experimental_defaultFormStateBehavior,
|
|
1207
|
+
hasConst
|
|
1128
1208
|
);
|
|
1129
1209
|
return acc;
|
|
1130
1210
|
},
|
|
@@ -1206,11 +1286,14 @@ function getArrayDefaults(validator, rawSchema, {
|
|
|
1206
1286
|
});
|
|
1207
1287
|
}
|
|
1208
1288
|
}
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
1289
|
+
const hasConst = isObject(schema) && CONST_KEY in schema;
|
|
1290
|
+
if (hasConst === false) {
|
|
1291
|
+
if (neverPopulate) {
|
|
1292
|
+
return defaults ?? emptyDefault;
|
|
1293
|
+
}
|
|
1294
|
+
if (ignoreMinItemsFlagSet && !required) {
|
|
1295
|
+
return defaults ? defaults : void 0;
|
|
1296
|
+
}
|
|
1214
1297
|
}
|
|
1215
1298
|
const defaultsLength = Array.isArray(defaults) ? defaults.length : 0;
|
|
1216
1299
|
if (!schema.minItems || isMultiSelect(validator, schema, rootSchema) || computeSkipPopulate(validator, schema, rootSchema) || schema.minItems <= defaultsLength) {
|
|
@@ -1240,26 +1323,29 @@ function getDefaultBasedOnSchemaType(validator, rawSchema, computeDefaultsProps
|
|
|
1240
1323
|
}
|
|
1241
1324
|
}
|
|
1242
1325
|
}
|
|
1243
|
-
function getDefaultFormState(validator, theSchema, formData, rootSchema, includeUndefinedValues = false, experimental_defaultFormStateBehavior) {
|
|
1326
|
+
function getDefaultFormState(validator, theSchema, formData, rootSchema, includeUndefinedValues = false, experimental_defaultFormStateBehavior, experimental_customMergeAllOf) {
|
|
1244
1327
|
if (!isObject(theSchema)) {
|
|
1245
1328
|
throw new Error("Invalid schema: " + theSchema);
|
|
1246
1329
|
}
|
|
1247
|
-
const schema = retrieveSchema(validator, theSchema, rootSchema, formData);
|
|
1330
|
+
const schema = retrieveSchema(validator, theSchema, rootSchema, formData, experimental_customMergeAllOf);
|
|
1248
1331
|
const defaults = computeDefaults(validator, schema, {
|
|
1249
1332
|
rootSchema,
|
|
1250
1333
|
includeUndefinedValues,
|
|
1251
1334
|
experimental_defaultFormStateBehavior,
|
|
1335
|
+
experimental_customMergeAllOf,
|
|
1252
1336
|
rawFormData: formData
|
|
1253
1337
|
});
|
|
1254
1338
|
if (formData === void 0 || formData === null || typeof formData === "number" && isNaN(formData)) {
|
|
1255
1339
|
return defaults;
|
|
1256
1340
|
}
|
|
1257
|
-
const {
|
|
1341
|
+
const { mergeDefaultsIntoFormData, arrayMinItems = {} } = experimental_defaultFormStateBehavior || {};
|
|
1342
|
+
const { mergeExtraDefaults } = arrayMinItems;
|
|
1343
|
+
const defaultSupercedesUndefined = mergeDefaultsIntoFormData === "useDefaultIfFormDataUndefined";
|
|
1258
1344
|
if (isObject(formData)) {
|
|
1259
|
-
return mergeDefaultsWithFormData(defaults, formData, mergeExtraDefaults);
|
|
1345
|
+
return mergeDefaultsWithFormData(defaults, formData, mergeExtraDefaults, defaultSupercedesUndefined);
|
|
1260
1346
|
}
|
|
1261
1347
|
if (Array.isArray(formData)) {
|
|
1262
|
-
return mergeDefaultsWithFormData(defaults, formData, mergeExtraDefaults);
|
|
1348
|
+
return mergeDefaultsWithFormData(defaults, formData, mergeExtraDefaults, defaultSupercedesUndefined);
|
|
1263
1349
|
}
|
|
1264
1350
|
return formData;
|
|
1265
1351
|
}
|
|
@@ -1432,7 +1518,7 @@ function sanitizeDataForNewSchema(validator, rootSchema, newSchema, oldSchema, d
|
|
|
1432
1518
|
// src/schema/toIdSchema.ts
|
|
1433
1519
|
import get9 from "lodash/get";
|
|
1434
1520
|
import isEqual2 from "lodash/isEqual";
|
|
1435
|
-
function toIdSchemaInternal(validator, schema, idPrefix, idSeparator, id, rootSchema, formData, _recurseList = []) {
|
|
1521
|
+
function toIdSchemaInternal(validator, schema, idPrefix, idSeparator, id, rootSchema, formData, _recurseList = [], experimental_customMergeAllOf) {
|
|
1436
1522
|
if (REF_KEY in schema || DEPENDENCIES_KEY in schema || ALL_OF_KEY in schema) {
|
|
1437
1523
|
const _schema = retrieveSchema(validator, schema, rootSchema, formData);
|
|
1438
1524
|
const sameSchemaIndex = _recurseList.findIndex((item) => isEqual2(item, _schema));
|
|
@@ -1445,7 +1531,8 @@ function toIdSchemaInternal(validator, schema, idPrefix, idSeparator, id, rootSc
|
|
|
1445
1531
|
id,
|
|
1446
1532
|
rootSchema,
|
|
1447
1533
|
formData,
|
|
1448
|
-
_recurseList.concat(_schema)
|
|
1534
|
+
_recurseList.concat(_schema),
|
|
1535
|
+
experimental_customMergeAllOf
|
|
1449
1536
|
);
|
|
1450
1537
|
}
|
|
1451
1538
|
}
|
|
@@ -1458,7 +1545,8 @@ function toIdSchemaInternal(validator, schema, idPrefix, idSeparator, id, rootSc
|
|
|
1458
1545
|
id,
|
|
1459
1546
|
rootSchema,
|
|
1460
1547
|
formData,
|
|
1461
|
-
_recurseList
|
|
1548
|
+
_recurseList,
|
|
1549
|
+
experimental_customMergeAllOf
|
|
1462
1550
|
);
|
|
1463
1551
|
}
|
|
1464
1552
|
const $id = id || idPrefix;
|
|
@@ -1477,14 +1565,25 @@ function toIdSchemaInternal(validator, schema, idPrefix, idSeparator, id, rootSc
|
|
|
1477
1565
|
// It's possible that formData is not an object -- this can happen if an
|
|
1478
1566
|
// array item has just been added, but not populated with data yet
|
|
1479
1567
|
get9(formData, [name]),
|
|
1480
|
-
_recurseList
|
|
1568
|
+
_recurseList,
|
|
1569
|
+
experimental_customMergeAllOf
|
|
1481
1570
|
);
|
|
1482
1571
|
}
|
|
1483
1572
|
}
|
|
1484
1573
|
return idSchema;
|
|
1485
1574
|
}
|
|
1486
|
-
function toIdSchema(validator, schema, id, rootSchema, formData, idPrefix = "root", idSeparator = "_") {
|
|
1487
|
-
return toIdSchemaInternal(
|
|
1575
|
+
function toIdSchema(validator, schema, id, rootSchema, formData, idPrefix = "root", idSeparator = "_", experimental_customMergeAllOf) {
|
|
1576
|
+
return toIdSchemaInternal(
|
|
1577
|
+
validator,
|
|
1578
|
+
schema,
|
|
1579
|
+
idPrefix,
|
|
1580
|
+
idSeparator,
|
|
1581
|
+
id,
|
|
1582
|
+
rootSchema,
|
|
1583
|
+
formData,
|
|
1584
|
+
void 0,
|
|
1585
|
+
experimental_customMergeAllOf
|
|
1586
|
+
);
|
|
1488
1587
|
}
|
|
1489
1588
|
|
|
1490
1589
|
// src/schema/toPathSchema.ts
|
|
@@ -1588,11 +1687,13 @@ var SchemaUtils = class {
|
|
|
1588
1687
|
* @param validator - An implementation of the `ValidatorType` interface that will be forwarded to all the APIs
|
|
1589
1688
|
* @param rootSchema - The root schema that will be forwarded to all the APIs
|
|
1590
1689
|
* @param experimental_defaultFormStateBehavior - Configuration flags to allow users to override default form state behavior
|
|
1690
|
+
* @param [experimental_customMergeAllOf] - Optional function that allows for custom merging of `allOf` schemas
|
|
1591
1691
|
*/
|
|
1592
|
-
constructor(validator, rootSchema, experimental_defaultFormStateBehavior) {
|
|
1692
|
+
constructor(validator, rootSchema, experimental_defaultFormStateBehavior, experimental_customMergeAllOf) {
|
|
1593
1693
|
this.rootSchema = rootSchema;
|
|
1594
1694
|
this.validator = validator;
|
|
1595
1695
|
this.experimental_defaultFormStateBehavior = experimental_defaultFormStateBehavior;
|
|
1696
|
+
this.experimental_customMergeAllOf = experimental_customMergeAllOf;
|
|
1596
1697
|
}
|
|
1597
1698
|
/** Returns the `ValidatorType` in the `SchemaUtilsType`
|
|
1598
1699
|
*
|
|
@@ -1608,13 +1709,14 @@ var SchemaUtils = class {
|
|
|
1608
1709
|
* @param validator - An implementation of the `ValidatorType` interface that will be compared against the current one
|
|
1609
1710
|
* @param rootSchema - The root schema that will be compared against the current one
|
|
1610
1711
|
* @param [experimental_defaultFormStateBehavior] Optional configuration object, if provided, allows users to override default form state behavior
|
|
1712
|
+
* @param [experimental_customMergeAllOf] - Optional function that allows for custom merging of `allOf` schemas
|
|
1611
1713
|
* @returns - True if the `SchemaUtilsType` differs from the given `validator` or `rootSchema`
|
|
1612
1714
|
*/
|
|
1613
|
-
doesSchemaUtilsDiffer(validator, rootSchema, experimental_defaultFormStateBehavior = {}) {
|
|
1715
|
+
doesSchemaUtilsDiffer(validator, rootSchema, experimental_defaultFormStateBehavior = {}, experimental_customMergeAllOf) {
|
|
1614
1716
|
if (!validator || !rootSchema) {
|
|
1615
1717
|
return false;
|
|
1616
1718
|
}
|
|
1617
|
-
return this.validator !== validator || !deepEquals(this.rootSchema, rootSchema) || !deepEquals(this.experimental_defaultFormStateBehavior, experimental_defaultFormStateBehavior);
|
|
1719
|
+
return this.validator !== validator || !deepEquals(this.rootSchema, rootSchema) || !deepEquals(this.experimental_defaultFormStateBehavior, experimental_defaultFormStateBehavior) || this.experimental_customMergeAllOf !== experimental_customMergeAllOf;
|
|
1618
1720
|
}
|
|
1619
1721
|
/** Returns the superset of `formData` that includes the given set updated to include any missing fields that have
|
|
1620
1722
|
* computed to have defaults provided in the `schema`.
|
|
@@ -1633,7 +1735,8 @@ var SchemaUtils = class {
|
|
|
1633
1735
|
formData,
|
|
1634
1736
|
this.rootSchema,
|
|
1635
1737
|
includeUndefinedValues,
|
|
1636
|
-
this.experimental_defaultFormStateBehavior
|
|
1738
|
+
this.experimental_defaultFormStateBehavior,
|
|
1739
|
+
this.experimental_customMergeAllOf
|
|
1637
1740
|
);
|
|
1638
1741
|
}
|
|
1639
1742
|
/** Determines whether the combination of `schema` and `uiSchema` properties indicates that the label for the `schema`
|
|
@@ -1743,7 +1846,13 @@ var SchemaUtils = class {
|
|
|
1743
1846
|
* @returns - The schema having its conditions, additional properties, references and dependencies resolved
|
|
1744
1847
|
*/
|
|
1745
1848
|
retrieveSchema(schema, rawFormData) {
|
|
1746
|
-
return retrieveSchema(
|
|
1849
|
+
return retrieveSchema(
|
|
1850
|
+
this.validator,
|
|
1851
|
+
schema,
|
|
1852
|
+
this.rootSchema,
|
|
1853
|
+
rawFormData,
|
|
1854
|
+
this.experimental_customMergeAllOf
|
|
1855
|
+
);
|
|
1747
1856
|
}
|
|
1748
1857
|
/** Sanitize the `data` associated with the `oldSchema` so it is considered appropriate for the `newSchema`. If the
|
|
1749
1858
|
* new schema does not contain any properties, then `undefined` is returned to clear all the form data. Due to the
|
|
@@ -1769,7 +1878,16 @@ var SchemaUtils = class {
|
|
|
1769
1878
|
* @returns - The `IdSchema` object for the `schema`
|
|
1770
1879
|
*/
|
|
1771
1880
|
toIdSchema(schema, id, formData, idPrefix = "root", idSeparator = "_") {
|
|
1772
|
-
return toIdSchema(
|
|
1881
|
+
return toIdSchema(
|
|
1882
|
+
this.validator,
|
|
1883
|
+
schema,
|
|
1884
|
+
id,
|
|
1885
|
+
this.rootSchema,
|
|
1886
|
+
formData,
|
|
1887
|
+
idPrefix,
|
|
1888
|
+
idSeparator,
|
|
1889
|
+
this.experimental_customMergeAllOf
|
|
1890
|
+
);
|
|
1773
1891
|
}
|
|
1774
1892
|
/** Generates an `PathSchema` object for the `schema`, recursively
|
|
1775
1893
|
*
|
|
@@ -1782,8 +1900,13 @@ var SchemaUtils = class {
|
|
|
1782
1900
|
return toPathSchema(this.validator, schema, name, this.rootSchema, formData);
|
|
1783
1901
|
}
|
|
1784
1902
|
};
|
|
1785
|
-
function createSchemaUtils(validator, rootSchema, experimental_defaultFormStateBehavior = {}) {
|
|
1786
|
-
return new SchemaUtils(
|
|
1903
|
+
function createSchemaUtils(validator, rootSchema, experimental_defaultFormStateBehavior = {}, experimental_customMergeAllOf) {
|
|
1904
|
+
return new SchemaUtils(
|
|
1905
|
+
validator,
|
|
1906
|
+
rootSchema,
|
|
1907
|
+
experimental_defaultFormStateBehavior,
|
|
1908
|
+
experimental_customMergeAllOf
|
|
1909
|
+
);
|
|
1787
1910
|
}
|
|
1788
1911
|
|
|
1789
1912
|
// src/dataURItoBlob.ts
|