@rjsf/utils 5.21.1 → 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 +201 -62
- package/dist/index.js.map +3 -3
- package/dist/utils.esm.js +201 -62
- package/dist/utils.esm.js.map +2 -2
- package/dist/utils.umd.js +199 -69
- package/lib/ErrorSchemaBuilder.d.ts +3 -3
- package/lib/ErrorSchemaBuilder.js +2 -1
- package/lib/ErrorSchemaBuilder.js.map +1 -1
- 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 +54 -26
- 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/ErrorSchemaBuilder.ts +6 -5
- 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 +125 -28
- package/src/schema/toIdSchema.ts +32 -7
- package/src/types.ts +20 -2
package/dist/index.js
CHANGED
|
@@ -504,10 +504,18 @@ function mergeSchemas(obj1, obj2) {
|
|
|
504
504
|
}
|
|
505
505
|
|
|
506
506
|
// src/schema/retrieveSchema.ts
|
|
507
|
-
function retrieveSchema(validator, schema, rootSchema = {}, rawFormData) {
|
|
508
|
-
return retrieveSchemaInternal(
|
|
507
|
+
function retrieveSchema(validator, schema, rootSchema = {}, rawFormData, experimental_customMergeAllOf) {
|
|
508
|
+
return retrieveSchemaInternal(
|
|
509
|
+
validator,
|
|
510
|
+
schema,
|
|
511
|
+
rootSchema,
|
|
512
|
+
rawFormData,
|
|
513
|
+
void 0,
|
|
514
|
+
void 0,
|
|
515
|
+
experimental_customMergeAllOf
|
|
516
|
+
)[0];
|
|
509
517
|
}
|
|
510
|
-
function resolveCondition(validator, schema, rootSchema, expandAllBranches, recurseList, formData) {
|
|
518
|
+
function resolveCondition(validator, schema, rootSchema, expandAllBranches, recurseList, formData, experimental_customMergeAllOf) {
|
|
511
519
|
const { if: expression, then, else: otherwise, ...resolvedSchemaLessConditional } = schema;
|
|
512
520
|
const conditionValue = validator.isValid(expression, formData || {}, rootSchema);
|
|
513
521
|
let resolvedSchemas = [resolvedSchemaLessConditional];
|
|
@@ -515,12 +523,28 @@ function resolveCondition(validator, schema, rootSchema, expandAllBranches, recu
|
|
|
515
523
|
if (expandAllBranches) {
|
|
516
524
|
if (then && typeof then !== "boolean") {
|
|
517
525
|
schemas = schemas.concat(
|
|
518
|
-
retrieveSchemaInternal(
|
|
526
|
+
retrieveSchemaInternal(
|
|
527
|
+
validator,
|
|
528
|
+
then,
|
|
529
|
+
rootSchema,
|
|
530
|
+
formData,
|
|
531
|
+
expandAllBranches,
|
|
532
|
+
recurseList,
|
|
533
|
+
experimental_customMergeAllOf
|
|
534
|
+
)
|
|
519
535
|
);
|
|
520
536
|
}
|
|
521
537
|
if (otherwise && typeof otherwise !== "boolean") {
|
|
522
538
|
schemas = schemas.concat(
|
|
523
|
-
retrieveSchemaInternal(
|
|
539
|
+
retrieveSchemaInternal(
|
|
540
|
+
validator,
|
|
541
|
+
otherwise,
|
|
542
|
+
rootSchema,
|
|
543
|
+
formData,
|
|
544
|
+
expandAllBranches,
|
|
545
|
+
recurseList,
|
|
546
|
+
experimental_customMergeAllOf
|
|
547
|
+
)
|
|
524
548
|
);
|
|
525
549
|
}
|
|
526
550
|
} else {
|
|
@@ -533,7 +557,8 @@ function resolveCondition(validator, schema, rootSchema, expandAllBranches, recu
|
|
|
533
557
|
rootSchema,
|
|
534
558
|
formData,
|
|
535
559
|
expandAllBranches,
|
|
536
|
-
recurseList
|
|
560
|
+
recurseList,
|
|
561
|
+
experimental_customMergeAllOf
|
|
537
562
|
)
|
|
538
563
|
);
|
|
539
564
|
}
|
|
@@ -542,7 +567,15 @@ function resolveCondition(validator, schema, rootSchema, expandAllBranches, recu
|
|
|
542
567
|
resolvedSchemas = schemas.map((s) => mergeSchemas(resolvedSchemaLessConditional, s));
|
|
543
568
|
}
|
|
544
569
|
return resolvedSchemas.flatMap(
|
|
545
|
-
(s) => retrieveSchemaInternal(
|
|
570
|
+
(s) => retrieveSchemaInternal(
|
|
571
|
+
validator,
|
|
572
|
+
s,
|
|
573
|
+
rootSchema,
|
|
574
|
+
formData,
|
|
575
|
+
expandAllBranches,
|
|
576
|
+
recurseList,
|
|
577
|
+
experimental_customMergeAllOf
|
|
578
|
+
)
|
|
546
579
|
);
|
|
547
580
|
}
|
|
548
581
|
function getAllPermutationsOfXxxOf(listOfLists) {
|
|
@@ -559,7 +592,7 @@ function getAllPermutationsOfXxxOf(listOfLists) {
|
|
|
559
592
|
);
|
|
560
593
|
return allPermutations;
|
|
561
594
|
}
|
|
562
|
-
function resolveSchema(validator, schema, rootSchema, expandAllBranches, recurseList, formData) {
|
|
595
|
+
function resolveSchema(validator, schema, rootSchema, expandAllBranches, recurseList, formData, experimental_customMergeAllOf) {
|
|
563
596
|
const updatedSchemas = resolveReference(
|
|
564
597
|
validator,
|
|
565
598
|
schema,
|
|
@@ -581,7 +614,15 @@ function resolveSchema(validator, schema, rootSchema, expandAllBranches, recurse
|
|
|
581
614
|
formData
|
|
582
615
|
);
|
|
583
616
|
return resolvedSchemas.flatMap((s) => {
|
|
584
|
-
return retrieveSchemaInternal(
|
|
617
|
+
return retrieveSchemaInternal(
|
|
618
|
+
validator,
|
|
619
|
+
s,
|
|
620
|
+
rootSchema,
|
|
621
|
+
formData,
|
|
622
|
+
expandAllBranches,
|
|
623
|
+
recurseList,
|
|
624
|
+
experimental_customMergeAllOf
|
|
625
|
+
);
|
|
585
626
|
});
|
|
586
627
|
}
|
|
587
628
|
if (ALL_OF_KEY in schema && Array.isArray(schema.allOf)) {
|
|
@@ -592,7 +633,8 @@ function resolveSchema(validator, schema, rootSchema, expandAllBranches, recurse
|
|
|
592
633
|
rootSchema,
|
|
593
634
|
formData,
|
|
594
635
|
expandAllBranches,
|
|
595
|
-
recurseList
|
|
636
|
+
recurseList,
|
|
637
|
+
experimental_customMergeAllOf
|
|
596
638
|
)
|
|
597
639
|
);
|
|
598
640
|
const allPermutations = getAllPermutationsOfXxxOf(allOfSchemaElements);
|
|
@@ -600,7 +642,7 @@ function resolveSchema(validator, schema, rootSchema, expandAllBranches, recurse
|
|
|
600
642
|
}
|
|
601
643
|
return [schema];
|
|
602
644
|
}
|
|
603
|
-
function resolveReference(validator, schema, rootSchema, expandAllBranches, recurseList, formData) {
|
|
645
|
+
function resolveReference(validator, schema, rootSchema, expandAllBranches, recurseList, formData, experimental_customMergeAllOf) {
|
|
604
646
|
const updatedSchema = resolveAllReferences(schema, rootSchema, recurseList);
|
|
605
647
|
if (updatedSchema !== schema) {
|
|
606
648
|
return retrieveSchemaInternal(
|
|
@@ -609,7 +651,8 @@ function resolveReference(validator, schema, rootSchema, expandAllBranches, recu
|
|
|
609
651
|
rootSchema,
|
|
610
652
|
formData,
|
|
611
653
|
expandAllBranches,
|
|
612
|
-
recurseList
|
|
654
|
+
recurseList,
|
|
655
|
+
experimental_customMergeAllOf
|
|
613
656
|
);
|
|
614
657
|
}
|
|
615
658
|
return [schema];
|
|
@@ -687,7 +730,7 @@ function stubExistingAdditionalProperties(validator, theSchema, rootSchema, aFor
|
|
|
687
730
|
});
|
|
688
731
|
return schema;
|
|
689
732
|
}
|
|
690
|
-
function retrieveSchemaInternal(validator, schema, rootSchema, rawFormData, expandAllBranches = false, recurseList = []) {
|
|
733
|
+
function retrieveSchemaInternal(validator, schema, rootSchema, rawFormData, expandAllBranches = false, recurseList = [], experimental_customMergeAllOf) {
|
|
691
734
|
if (!isObject(schema)) {
|
|
692
735
|
return [{}];
|
|
693
736
|
}
|
|
@@ -708,7 +751,8 @@ function retrieveSchemaInternal(validator, schema, rootSchema, rawFormData, expa
|
|
|
708
751
|
rootSchema,
|
|
709
752
|
expandAllBranches,
|
|
710
753
|
recurseList,
|
|
711
|
-
rawFormData
|
|
754
|
+
rawFormData,
|
|
755
|
+
experimental_customMergeAllOf
|
|
712
756
|
);
|
|
713
757
|
}
|
|
714
758
|
if (ALL_OF_KEY in resolvedSchema) {
|
|
@@ -717,9 +761,24 @@ function retrieveSchemaInternal(validator, schema, rootSchema, rawFormData, expa
|
|
|
717
761
|
return [...allOf, restOfSchema];
|
|
718
762
|
}
|
|
719
763
|
try {
|
|
720
|
-
|
|
764
|
+
const withContainsSchemas = [];
|
|
765
|
+
const withoutContainsSchemas = [];
|
|
766
|
+
resolvedSchema.allOf?.forEach((s2) => {
|
|
767
|
+
if (typeof s2 === "object" && s2.contains) {
|
|
768
|
+
withContainsSchemas.push(s2);
|
|
769
|
+
} else {
|
|
770
|
+
withoutContainsSchemas.push(s2);
|
|
771
|
+
}
|
|
772
|
+
});
|
|
773
|
+
if (withContainsSchemas.length) {
|
|
774
|
+
resolvedSchema = { ...resolvedSchema, allOf: withoutContainsSchemas };
|
|
775
|
+
}
|
|
776
|
+
resolvedSchema = experimental_customMergeAllOf ? experimental_customMergeAllOf(resolvedSchema) : (0, import_json_schema_merge_allof.default)(resolvedSchema, {
|
|
721
777
|
deep: false
|
|
722
778
|
});
|
|
779
|
+
if (withContainsSchemas.length) {
|
|
780
|
+
resolvedSchema.allOf = withContainsSchemas;
|
|
781
|
+
}
|
|
723
782
|
} catch (e) {
|
|
724
783
|
console.warn("could not merge subschemas in allOf:\n", e);
|
|
725
784
|
const { allOf, ...resolvedSchemaWithoutAllOf } = resolvedSchema;
|
|
@@ -755,7 +814,7 @@ function resolveAnyOrOneOfSchemas(validator, schema, rootSchema, expandAllBranch
|
|
|
755
814
|
}
|
|
756
815
|
return [schema];
|
|
757
816
|
}
|
|
758
|
-
function resolveDependencies(validator, schema, rootSchema, expandAllBranches, recurseList, formData) {
|
|
817
|
+
function resolveDependencies(validator, schema, rootSchema, expandAllBranches, recurseList, formData, experimental_customMergeAllOf) {
|
|
759
818
|
const { dependencies, ...remainingSchema } = schema;
|
|
760
819
|
const resolvedSchemas = resolveAnyOrOneOfSchemas(
|
|
761
820
|
validator,
|
|
@@ -772,11 +831,12 @@ function resolveDependencies(validator, schema, rootSchema, expandAllBranches, r
|
|
|
772
831
|
rootSchema,
|
|
773
832
|
expandAllBranches,
|
|
774
833
|
recurseList,
|
|
775
|
-
formData
|
|
834
|
+
formData,
|
|
835
|
+
experimental_customMergeAllOf
|
|
776
836
|
)
|
|
777
837
|
);
|
|
778
838
|
}
|
|
779
|
-
function processDependencies(validator, dependencies, resolvedSchema, rootSchema, expandAllBranches, recurseList, formData) {
|
|
839
|
+
function processDependencies(validator, dependencies, resolvedSchema, rootSchema, expandAllBranches, recurseList, formData, experimental_customMergeAllOf) {
|
|
780
840
|
let schemas = [resolvedSchema];
|
|
781
841
|
for (const dependencyKey in dependencies) {
|
|
782
842
|
if (!expandAllBranches && (0, import_get4.default)(formData, [dependencyKey]) === void 0) {
|
|
@@ -800,7 +860,8 @@ function processDependencies(validator, dependencies, resolvedSchema, rootSchema
|
|
|
800
860
|
dependencyValue,
|
|
801
861
|
expandAllBranches,
|
|
802
862
|
recurseList,
|
|
803
|
-
formData
|
|
863
|
+
formData,
|
|
864
|
+
experimental_customMergeAllOf
|
|
804
865
|
);
|
|
805
866
|
}
|
|
806
867
|
return schemas.flatMap(
|
|
@@ -811,7 +872,8 @@ function processDependencies(validator, dependencies, resolvedSchema, rootSchema
|
|
|
811
872
|
rootSchema,
|
|
812
873
|
expandAllBranches,
|
|
813
874
|
recurseList,
|
|
814
|
-
formData
|
|
875
|
+
formData,
|
|
876
|
+
experimental_customMergeAllOf
|
|
815
877
|
)
|
|
816
878
|
);
|
|
817
879
|
}
|
|
@@ -824,14 +886,15 @@ function withDependentProperties(schema, additionallyRequired) {
|
|
|
824
886
|
const required = Array.isArray(schema.required) ? Array.from(/* @__PURE__ */ new Set([...schema.required, ...additionallyRequired])) : additionallyRequired;
|
|
825
887
|
return { ...schema, required };
|
|
826
888
|
}
|
|
827
|
-
function withDependentSchema(validator, schema, rootSchema, dependencyKey, dependencyValue, expandAllBranches, recurseList, formData) {
|
|
889
|
+
function withDependentSchema(validator, schema, rootSchema, dependencyKey, dependencyValue, expandAllBranches, recurseList, formData, experimental_customMergeAllOf) {
|
|
828
890
|
const dependentSchemas = retrieveSchemaInternal(
|
|
829
891
|
validator,
|
|
830
892
|
dependencyValue,
|
|
831
893
|
rootSchema,
|
|
832
894
|
formData,
|
|
833
895
|
expandAllBranches,
|
|
834
|
-
recurseList
|
|
896
|
+
recurseList,
|
|
897
|
+
experimental_customMergeAllOf
|
|
835
898
|
);
|
|
836
899
|
return dependentSchemas.flatMap((dependent) => {
|
|
837
900
|
const { oneOf, ...dependentSchema } = dependent;
|
|
@@ -855,12 +918,13 @@ function withDependentSchema(validator, schema, rootSchema, dependencyKey, depen
|
|
|
855
918
|
resolvedOneOf,
|
|
856
919
|
expandAllBranches,
|
|
857
920
|
recurseList,
|
|
858
|
-
formData
|
|
921
|
+
formData,
|
|
922
|
+
experimental_customMergeAllOf
|
|
859
923
|
)
|
|
860
924
|
);
|
|
861
925
|
});
|
|
862
926
|
}
|
|
863
|
-
function withExactlyOneSubschema(validator, schema, rootSchema, dependencyKey, oneOf, expandAllBranches, recurseList, formData) {
|
|
927
|
+
function withExactlyOneSubschema(validator, schema, rootSchema, dependencyKey, oneOf, expandAllBranches, recurseList, formData, experimental_customMergeAllOf) {
|
|
864
928
|
const validSubschemas = oneOf.filter((subschema) => {
|
|
865
929
|
if (typeof subschema === "boolean" || !subschema || !subschema.properties) {
|
|
866
930
|
return false;
|
|
@@ -891,7 +955,8 @@ function withExactlyOneSubschema(validator, schema, rootSchema, dependencyKey, o
|
|
|
891
955
|
rootSchema,
|
|
892
956
|
formData,
|
|
893
957
|
expandAllBranches,
|
|
894
|
-
recurseList
|
|
958
|
+
recurseList,
|
|
959
|
+
experimental_customMergeAllOf
|
|
895
960
|
);
|
|
896
961
|
return schemas.map((s2) => mergeSchemas(schema, s2));
|
|
897
962
|
});
|
|
@@ -907,7 +972,7 @@ var JUNK_OPTION = {
|
|
|
907
972
|
}
|
|
908
973
|
}
|
|
909
974
|
};
|
|
910
|
-
function calculateIndexScore(validator, rootSchema, schema, formData
|
|
975
|
+
function calculateIndexScore(validator, rootSchema, schema, formData) {
|
|
911
976
|
let totalScore = 0;
|
|
912
977
|
if (schema) {
|
|
913
978
|
if ((0, import_isObject5.default)(schema.properties)) {
|
|
@@ -935,7 +1000,10 @@ function calculateIndexScore(validator, rootSchema, schema, formData = {}) {
|
|
|
935
1000
|
);
|
|
936
1001
|
}
|
|
937
1002
|
if (value.type === "object") {
|
|
938
|
-
|
|
1003
|
+
if ((0, import_isObject5.default)(formValue)) {
|
|
1004
|
+
score += 1;
|
|
1005
|
+
}
|
|
1006
|
+
return score + calculateIndexScore(validator, rootSchema, value, formValue);
|
|
939
1007
|
}
|
|
940
1008
|
if (value.type === guessType(formValue)) {
|
|
941
1009
|
let newScore = score + 1;
|
|
@@ -1005,12 +1073,17 @@ function isFixedItems(schema) {
|
|
|
1005
1073
|
|
|
1006
1074
|
// src/mergeDefaultsWithFormData.ts
|
|
1007
1075
|
var import_get6 = __toESM(require("lodash/get"));
|
|
1008
|
-
function mergeDefaultsWithFormData(defaults, formData, mergeExtraArrayDefaults = false) {
|
|
1076
|
+
function mergeDefaultsWithFormData(defaults, formData, mergeExtraArrayDefaults = false, defaultSupercedesUndefined = false) {
|
|
1009
1077
|
if (Array.isArray(formData)) {
|
|
1010
1078
|
const defaultsArray = Array.isArray(defaults) ? defaults : [];
|
|
1011
1079
|
const mapped = formData.map((value, idx) => {
|
|
1012
1080
|
if (defaultsArray[idx]) {
|
|
1013
|
-
return mergeDefaultsWithFormData(
|
|
1081
|
+
return mergeDefaultsWithFormData(
|
|
1082
|
+
defaultsArray[idx],
|
|
1083
|
+
value,
|
|
1084
|
+
mergeExtraArrayDefaults,
|
|
1085
|
+
defaultSupercedesUndefined
|
|
1086
|
+
);
|
|
1014
1087
|
}
|
|
1015
1088
|
return value;
|
|
1016
1089
|
});
|
|
@@ -1025,11 +1098,15 @@ function mergeDefaultsWithFormData(defaults, formData, mergeExtraArrayDefaults =
|
|
|
1025
1098
|
acc2[key] = mergeDefaultsWithFormData(
|
|
1026
1099
|
defaults ? (0, import_get6.default)(defaults, key) : {},
|
|
1027
1100
|
(0, import_get6.default)(formData, key),
|
|
1028
|
-
mergeExtraArrayDefaults
|
|
1101
|
+
mergeExtraArrayDefaults,
|
|
1102
|
+
defaultSupercedesUndefined
|
|
1029
1103
|
);
|
|
1030
1104
|
return acc2;
|
|
1031
1105
|
}, acc);
|
|
1032
1106
|
}
|
|
1107
|
+
if (defaultSupercedesUndefined && formData === void 0) {
|
|
1108
|
+
return defaults;
|
|
1109
|
+
}
|
|
1033
1110
|
return formData;
|
|
1034
1111
|
}
|
|
1035
1112
|
|
|
@@ -1100,9 +1177,9 @@ function getInnerSchemaForArrayItem(schema, additionalItems = 0 /* Ignore */, id
|
|
|
1100
1177
|
}
|
|
1101
1178
|
return {};
|
|
1102
1179
|
}
|
|
1103
|
-
function maybeAddDefaultToObject(obj, key, computedDefault, includeUndefinedValues, isParentRequired, requiredFields = [], experimental_defaultFormStateBehavior = {}) {
|
|
1180
|
+
function maybeAddDefaultToObject(obj, key, computedDefault, includeUndefinedValues, isParentRequired, requiredFields = [], experimental_defaultFormStateBehavior = {}, isConst = false) {
|
|
1104
1181
|
const { emptyObjectFields = "populateAllDefaults" } = experimental_defaultFormStateBehavior;
|
|
1105
|
-
if (includeUndefinedValues) {
|
|
1182
|
+
if (includeUndefinedValues || isConst) {
|
|
1106
1183
|
obj[key] = computedDefault;
|
|
1107
1184
|
} else if (emptyObjectFields !== "skipDefaults") {
|
|
1108
1185
|
if (isObject(computedDefault)) {
|
|
@@ -1132,6 +1209,7 @@ function computeDefaults(validator, rawSchema, computeDefaultsProps = {}) {
|
|
|
1132
1209
|
includeUndefinedValues = false,
|
|
1133
1210
|
_recurseList = [],
|
|
1134
1211
|
experimental_defaultFormStateBehavior = void 0,
|
|
1212
|
+
experimental_customMergeAllOf = void 0,
|
|
1135
1213
|
required
|
|
1136
1214
|
} = computeDefaultsProps;
|
|
1137
1215
|
const formData = isObject(rawFormData) ? rawFormData : {};
|
|
@@ -1139,7 +1217,9 @@ function computeDefaults(validator, rawSchema, computeDefaultsProps = {}) {
|
|
|
1139
1217
|
let defaults = parentDefaults;
|
|
1140
1218
|
let schemaToCompute = null;
|
|
1141
1219
|
let updatedRecurseList = _recurseList;
|
|
1142
|
-
if (
|
|
1220
|
+
if (isConstant(schema)) {
|
|
1221
|
+
defaults = schema.const;
|
|
1222
|
+
} else if (isObject(defaults) && isObject(schema.default)) {
|
|
1143
1223
|
defaults = mergeObjects(defaults, schema.default);
|
|
1144
1224
|
} else if (DEFAULT_KEY in schema) {
|
|
1145
1225
|
defaults = schema.default;
|
|
@@ -1154,7 +1234,15 @@ function computeDefaults(validator, rawSchema, computeDefaultsProps = {}) {
|
|
|
1154
1234
|
...formData,
|
|
1155
1235
|
...getDefaultBasedOnSchemaType(validator, schema, computeDefaultsProps, defaults)
|
|
1156
1236
|
};
|
|
1157
|
-
const resolvedSchema = resolveDependencies(
|
|
1237
|
+
const resolvedSchema = resolveDependencies(
|
|
1238
|
+
validator,
|
|
1239
|
+
schema,
|
|
1240
|
+
rootSchema,
|
|
1241
|
+
false,
|
|
1242
|
+
[],
|
|
1243
|
+
defaultFormData,
|
|
1244
|
+
experimental_customMergeAllOf
|
|
1245
|
+
);
|
|
1158
1246
|
schemaToCompute = resolvedSchema[0];
|
|
1159
1247
|
} else if (isFixedItems(schema)) {
|
|
1160
1248
|
defaults = schema.items.map(
|
|
@@ -1222,18 +1310,24 @@ function getObjectDefaults(validator, rawSchema, {
|
|
|
1222
1310
|
includeUndefinedValues = false,
|
|
1223
1311
|
_recurseList = [],
|
|
1224
1312
|
experimental_defaultFormStateBehavior = void 0,
|
|
1313
|
+
experimental_customMergeAllOf = void 0,
|
|
1225
1314
|
required
|
|
1226
1315
|
} = {}, defaults) {
|
|
1227
1316
|
{
|
|
1228
1317
|
const formData = isObject(rawFormData) ? rawFormData : {};
|
|
1229
1318
|
const schema = rawSchema;
|
|
1230
|
-
const retrievedSchema = experimental_defaultFormStateBehavior?.allOf === "populateDefaults" && ALL_OF_KEY in schema ? retrieveSchema(validator, schema, rootSchema, formData) : schema;
|
|
1319
|
+
const retrievedSchema = experimental_defaultFormStateBehavior?.allOf === "populateDefaults" && ALL_OF_KEY in schema ? retrieveSchema(validator, schema, rootSchema, formData, experimental_customMergeAllOf) : schema;
|
|
1320
|
+
const parentConst = retrievedSchema[CONST_KEY];
|
|
1231
1321
|
const objectDefaults = Object.keys(retrievedSchema.properties || {}).reduce(
|
|
1232
1322
|
(acc, key) => {
|
|
1233
|
-
const
|
|
1323
|
+
const propertySchema = (0, import_get7.default)(retrievedSchema, [PROPERTIES_KEY, key]);
|
|
1324
|
+
const hasParentConst = isObject(parentConst) && parentConst[key] !== void 0;
|
|
1325
|
+
const hasConst = isObject(propertySchema) && CONST_KEY in propertySchema || hasParentConst;
|
|
1326
|
+
const computedDefault = computeDefaults(validator, propertySchema, {
|
|
1234
1327
|
rootSchema,
|
|
1235
1328
|
_recurseList,
|
|
1236
1329
|
experimental_defaultFormStateBehavior,
|
|
1330
|
+
experimental_customMergeAllOf,
|
|
1237
1331
|
includeUndefinedValues: includeUndefinedValues === true,
|
|
1238
1332
|
parentDefaults: (0, import_get7.default)(defaults, [key]),
|
|
1239
1333
|
rawFormData: (0, import_get7.default)(formData, [key]),
|
|
@@ -1246,7 +1340,8 @@ function getObjectDefaults(validator, rawSchema, {
|
|
|
1246
1340
|
includeUndefinedValues,
|
|
1247
1341
|
required,
|
|
1248
1342
|
retrievedSchema.required,
|
|
1249
|
-
experimental_defaultFormStateBehavior
|
|
1343
|
+
experimental_defaultFormStateBehavior,
|
|
1344
|
+
hasConst
|
|
1250
1345
|
);
|
|
1251
1346
|
return acc;
|
|
1252
1347
|
},
|
|
@@ -1328,11 +1423,14 @@ function getArrayDefaults(validator, rawSchema, {
|
|
|
1328
1423
|
});
|
|
1329
1424
|
}
|
|
1330
1425
|
}
|
|
1331
|
-
|
|
1332
|
-
|
|
1333
|
-
|
|
1334
|
-
|
|
1335
|
-
|
|
1426
|
+
const hasConst = isObject(schema) && CONST_KEY in schema;
|
|
1427
|
+
if (hasConst === false) {
|
|
1428
|
+
if (neverPopulate) {
|
|
1429
|
+
return defaults ?? emptyDefault;
|
|
1430
|
+
}
|
|
1431
|
+
if (ignoreMinItemsFlagSet && !required) {
|
|
1432
|
+
return defaults ? defaults : void 0;
|
|
1433
|
+
}
|
|
1336
1434
|
}
|
|
1337
1435
|
const defaultsLength = Array.isArray(defaults) ? defaults.length : 0;
|
|
1338
1436
|
if (!schema.minItems || isMultiSelect(validator, schema, rootSchema) || computeSkipPopulate(validator, schema, rootSchema) || schema.minItems <= defaultsLength) {
|
|
@@ -1362,26 +1460,29 @@ function getDefaultBasedOnSchemaType(validator, rawSchema, computeDefaultsProps
|
|
|
1362
1460
|
}
|
|
1363
1461
|
}
|
|
1364
1462
|
}
|
|
1365
|
-
function getDefaultFormState(validator, theSchema, formData, rootSchema, includeUndefinedValues = false, experimental_defaultFormStateBehavior) {
|
|
1463
|
+
function getDefaultFormState(validator, theSchema, formData, rootSchema, includeUndefinedValues = false, experimental_defaultFormStateBehavior, experimental_customMergeAllOf) {
|
|
1366
1464
|
if (!isObject(theSchema)) {
|
|
1367
1465
|
throw new Error("Invalid schema: " + theSchema);
|
|
1368
1466
|
}
|
|
1369
|
-
const schema = retrieveSchema(validator, theSchema, rootSchema, formData);
|
|
1467
|
+
const schema = retrieveSchema(validator, theSchema, rootSchema, formData, experimental_customMergeAllOf);
|
|
1370
1468
|
const defaults = computeDefaults(validator, schema, {
|
|
1371
1469
|
rootSchema,
|
|
1372
1470
|
includeUndefinedValues,
|
|
1373
1471
|
experimental_defaultFormStateBehavior,
|
|
1472
|
+
experimental_customMergeAllOf,
|
|
1374
1473
|
rawFormData: formData
|
|
1375
1474
|
});
|
|
1376
1475
|
if (formData === void 0 || formData === null || typeof formData === "number" && isNaN(formData)) {
|
|
1377
1476
|
return defaults;
|
|
1378
1477
|
}
|
|
1379
|
-
const {
|
|
1478
|
+
const { mergeDefaultsIntoFormData, arrayMinItems = {} } = experimental_defaultFormStateBehavior || {};
|
|
1479
|
+
const { mergeExtraDefaults } = arrayMinItems;
|
|
1480
|
+
const defaultSupercedesUndefined = mergeDefaultsIntoFormData === "useDefaultIfFormDataUndefined";
|
|
1380
1481
|
if (isObject(formData)) {
|
|
1381
|
-
return mergeDefaultsWithFormData(defaults, formData, mergeExtraDefaults);
|
|
1482
|
+
return mergeDefaultsWithFormData(defaults, formData, mergeExtraDefaults, defaultSupercedesUndefined);
|
|
1382
1483
|
}
|
|
1383
1484
|
if (Array.isArray(formData)) {
|
|
1384
|
-
return mergeDefaultsWithFormData(defaults, formData, mergeExtraDefaults);
|
|
1485
|
+
return mergeDefaultsWithFormData(defaults, formData, mergeExtraDefaults, defaultSupercedesUndefined);
|
|
1385
1486
|
}
|
|
1386
1487
|
return formData;
|
|
1387
1488
|
}
|
|
@@ -1554,7 +1655,7 @@ function sanitizeDataForNewSchema(validator, rootSchema, newSchema, oldSchema, d
|
|
|
1554
1655
|
// src/schema/toIdSchema.ts
|
|
1555
1656
|
var import_get9 = __toESM(require("lodash/get"));
|
|
1556
1657
|
var import_isEqual2 = __toESM(require("lodash/isEqual"));
|
|
1557
|
-
function toIdSchemaInternal(validator, schema, idPrefix, idSeparator, id, rootSchema, formData, _recurseList = []) {
|
|
1658
|
+
function toIdSchemaInternal(validator, schema, idPrefix, idSeparator, id, rootSchema, formData, _recurseList = [], experimental_customMergeAllOf) {
|
|
1558
1659
|
if (REF_KEY in schema || DEPENDENCIES_KEY in schema || ALL_OF_KEY in schema) {
|
|
1559
1660
|
const _schema = retrieveSchema(validator, schema, rootSchema, formData);
|
|
1560
1661
|
const sameSchemaIndex = _recurseList.findIndex((item) => (0, import_isEqual2.default)(item, _schema));
|
|
@@ -1567,7 +1668,8 @@ function toIdSchemaInternal(validator, schema, idPrefix, idSeparator, id, rootSc
|
|
|
1567
1668
|
id,
|
|
1568
1669
|
rootSchema,
|
|
1569
1670
|
formData,
|
|
1570
|
-
_recurseList.concat(_schema)
|
|
1671
|
+
_recurseList.concat(_schema),
|
|
1672
|
+
experimental_customMergeAllOf
|
|
1571
1673
|
);
|
|
1572
1674
|
}
|
|
1573
1675
|
}
|
|
@@ -1580,7 +1682,8 @@ function toIdSchemaInternal(validator, schema, idPrefix, idSeparator, id, rootSc
|
|
|
1580
1682
|
id,
|
|
1581
1683
|
rootSchema,
|
|
1582
1684
|
formData,
|
|
1583
|
-
_recurseList
|
|
1685
|
+
_recurseList,
|
|
1686
|
+
experimental_customMergeAllOf
|
|
1584
1687
|
);
|
|
1585
1688
|
}
|
|
1586
1689
|
const $id = id || idPrefix;
|
|
@@ -1599,14 +1702,25 @@ function toIdSchemaInternal(validator, schema, idPrefix, idSeparator, id, rootSc
|
|
|
1599
1702
|
// It's possible that formData is not an object -- this can happen if an
|
|
1600
1703
|
// array item has just been added, but not populated with data yet
|
|
1601
1704
|
(0, import_get9.default)(formData, [name]),
|
|
1602
|
-
_recurseList
|
|
1705
|
+
_recurseList,
|
|
1706
|
+
experimental_customMergeAllOf
|
|
1603
1707
|
);
|
|
1604
1708
|
}
|
|
1605
1709
|
}
|
|
1606
1710
|
return idSchema;
|
|
1607
1711
|
}
|
|
1608
|
-
function toIdSchema(validator, schema, id, rootSchema, formData, idPrefix = "root", idSeparator = "_") {
|
|
1609
|
-
return toIdSchemaInternal(
|
|
1712
|
+
function toIdSchema(validator, schema, id, rootSchema, formData, idPrefix = "root", idSeparator = "_", experimental_customMergeAllOf) {
|
|
1713
|
+
return toIdSchemaInternal(
|
|
1714
|
+
validator,
|
|
1715
|
+
schema,
|
|
1716
|
+
idPrefix,
|
|
1717
|
+
idSeparator,
|
|
1718
|
+
id,
|
|
1719
|
+
rootSchema,
|
|
1720
|
+
formData,
|
|
1721
|
+
void 0,
|
|
1722
|
+
experimental_customMergeAllOf
|
|
1723
|
+
);
|
|
1610
1724
|
}
|
|
1611
1725
|
|
|
1612
1726
|
// src/schema/toPathSchema.ts
|
|
@@ -1710,11 +1824,13 @@ var SchemaUtils = class {
|
|
|
1710
1824
|
* @param validator - An implementation of the `ValidatorType` interface that will be forwarded to all the APIs
|
|
1711
1825
|
* @param rootSchema - The root schema that will be forwarded to all the APIs
|
|
1712
1826
|
* @param experimental_defaultFormStateBehavior - Configuration flags to allow users to override default form state behavior
|
|
1827
|
+
* @param [experimental_customMergeAllOf] - Optional function that allows for custom merging of `allOf` schemas
|
|
1713
1828
|
*/
|
|
1714
|
-
constructor(validator, rootSchema, experimental_defaultFormStateBehavior) {
|
|
1829
|
+
constructor(validator, rootSchema, experimental_defaultFormStateBehavior, experimental_customMergeAllOf) {
|
|
1715
1830
|
this.rootSchema = rootSchema;
|
|
1716
1831
|
this.validator = validator;
|
|
1717
1832
|
this.experimental_defaultFormStateBehavior = experimental_defaultFormStateBehavior;
|
|
1833
|
+
this.experimental_customMergeAllOf = experimental_customMergeAllOf;
|
|
1718
1834
|
}
|
|
1719
1835
|
/** Returns the `ValidatorType` in the `SchemaUtilsType`
|
|
1720
1836
|
*
|
|
@@ -1730,13 +1846,14 @@ var SchemaUtils = class {
|
|
|
1730
1846
|
* @param validator - An implementation of the `ValidatorType` interface that will be compared against the current one
|
|
1731
1847
|
* @param rootSchema - The root schema that will be compared against the current one
|
|
1732
1848
|
* @param [experimental_defaultFormStateBehavior] Optional configuration object, if provided, allows users to override default form state behavior
|
|
1849
|
+
* @param [experimental_customMergeAllOf] - Optional function that allows for custom merging of `allOf` schemas
|
|
1733
1850
|
* @returns - True if the `SchemaUtilsType` differs from the given `validator` or `rootSchema`
|
|
1734
1851
|
*/
|
|
1735
|
-
doesSchemaUtilsDiffer(validator, rootSchema, experimental_defaultFormStateBehavior = {}) {
|
|
1852
|
+
doesSchemaUtilsDiffer(validator, rootSchema, experimental_defaultFormStateBehavior = {}, experimental_customMergeAllOf) {
|
|
1736
1853
|
if (!validator || !rootSchema) {
|
|
1737
1854
|
return false;
|
|
1738
1855
|
}
|
|
1739
|
-
return this.validator !== validator || !deepEquals(this.rootSchema, rootSchema) || !deepEquals(this.experimental_defaultFormStateBehavior, experimental_defaultFormStateBehavior);
|
|
1856
|
+
return this.validator !== validator || !deepEquals(this.rootSchema, rootSchema) || !deepEquals(this.experimental_defaultFormStateBehavior, experimental_defaultFormStateBehavior) || this.experimental_customMergeAllOf !== experimental_customMergeAllOf;
|
|
1740
1857
|
}
|
|
1741
1858
|
/** Returns the superset of `formData` that includes the given set updated to include any missing fields that have
|
|
1742
1859
|
* computed to have defaults provided in the `schema`.
|
|
@@ -1755,7 +1872,8 @@ var SchemaUtils = class {
|
|
|
1755
1872
|
formData,
|
|
1756
1873
|
this.rootSchema,
|
|
1757
1874
|
includeUndefinedValues,
|
|
1758
|
-
this.experimental_defaultFormStateBehavior
|
|
1875
|
+
this.experimental_defaultFormStateBehavior,
|
|
1876
|
+
this.experimental_customMergeAllOf
|
|
1759
1877
|
);
|
|
1760
1878
|
}
|
|
1761
1879
|
/** Determines whether the combination of `schema` and `uiSchema` properties indicates that the label for the `schema`
|
|
@@ -1865,7 +1983,13 @@ var SchemaUtils = class {
|
|
|
1865
1983
|
* @returns - The schema having its conditions, additional properties, references and dependencies resolved
|
|
1866
1984
|
*/
|
|
1867
1985
|
retrieveSchema(schema, rawFormData) {
|
|
1868
|
-
return retrieveSchema(
|
|
1986
|
+
return retrieveSchema(
|
|
1987
|
+
this.validator,
|
|
1988
|
+
schema,
|
|
1989
|
+
this.rootSchema,
|
|
1990
|
+
rawFormData,
|
|
1991
|
+
this.experimental_customMergeAllOf
|
|
1992
|
+
);
|
|
1869
1993
|
}
|
|
1870
1994
|
/** Sanitize the `data` associated with the `oldSchema` so it is considered appropriate for the `newSchema`. If the
|
|
1871
1995
|
* new schema does not contain any properties, then `undefined` is returned to clear all the form data. Due to the
|
|
@@ -1891,7 +2015,16 @@ var SchemaUtils = class {
|
|
|
1891
2015
|
* @returns - The `IdSchema` object for the `schema`
|
|
1892
2016
|
*/
|
|
1893
2017
|
toIdSchema(schema, id, formData, idPrefix = "root", idSeparator = "_") {
|
|
1894
|
-
return toIdSchema(
|
|
2018
|
+
return toIdSchema(
|
|
2019
|
+
this.validator,
|
|
2020
|
+
schema,
|
|
2021
|
+
id,
|
|
2022
|
+
this.rootSchema,
|
|
2023
|
+
formData,
|
|
2024
|
+
idPrefix,
|
|
2025
|
+
idSeparator,
|
|
2026
|
+
this.experimental_customMergeAllOf
|
|
2027
|
+
);
|
|
1895
2028
|
}
|
|
1896
2029
|
/** Generates an `PathSchema` object for the `schema`, recursively
|
|
1897
2030
|
*
|
|
@@ -1904,8 +2037,13 @@ var SchemaUtils = class {
|
|
|
1904
2037
|
return toPathSchema(this.validator, schema, name, this.rootSchema, formData);
|
|
1905
2038
|
}
|
|
1906
2039
|
};
|
|
1907
|
-
function createSchemaUtils(validator, rootSchema, experimental_defaultFormStateBehavior = {}) {
|
|
1908
|
-
return new SchemaUtils(
|
|
2040
|
+
function createSchemaUtils(validator, rootSchema, experimental_defaultFormStateBehavior = {}, experimental_customMergeAllOf) {
|
|
2041
|
+
return new SchemaUtils(
|
|
2042
|
+
validator,
|
|
2043
|
+
rootSchema,
|
|
2044
|
+
experimental_defaultFormStateBehavior,
|
|
2045
|
+
experimental_customMergeAllOf
|
|
2046
|
+
);
|
|
1909
2047
|
}
|
|
1910
2048
|
|
|
1911
2049
|
// src/dataURItoBlob.ts
|
|
@@ -2044,6 +2182,7 @@ function enumOptionsSelectValue(valueIndex, selected, allEnumOptions = []) {
|
|
|
2044
2182
|
var import_cloneDeep = __toESM(require("lodash/cloneDeep"));
|
|
2045
2183
|
var import_get11 = __toESM(require("lodash/get"));
|
|
2046
2184
|
var import_set3 = __toESM(require("lodash/set"));
|
|
2185
|
+
var import_setWith = __toESM(require("lodash/setWith"));
|
|
2047
2186
|
var ErrorSchemaBuilder = class {
|
|
2048
2187
|
/** Construct an `ErrorSchemaBuilder` with an optional initial set of errors in an `ErrorSchema`.
|
|
2049
2188
|
*
|
|
@@ -2073,7 +2212,7 @@ var ErrorSchemaBuilder = class {
|
|
|
2073
2212
|
let errorBlock = hasPath ? (0, import_get11.default)(this.errorSchema, pathOfError) : this.errorSchema;
|
|
2074
2213
|
if (!errorBlock && pathOfError) {
|
|
2075
2214
|
errorBlock = {};
|
|
2076
|
-
(0,
|
|
2215
|
+
(0, import_setWith.default)(this.errorSchema, pathOfError, errorBlock, Object);
|
|
2077
2216
|
}
|
|
2078
2217
|
return errorBlock;
|
|
2079
2218
|
}
|