@rjsf/utils 5.21.2 → 5.22.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/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/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) {
|
|
@@ -729,7 +773,7 @@ function retrieveSchemaInternal(validator, schema, rootSchema, rawFormData, expa
|
|
|
729
773
|
if (withContainsSchemas.length) {
|
|
730
774
|
resolvedSchema = { ...resolvedSchema, allOf: withoutContainsSchemas };
|
|
731
775
|
}
|
|
732
|
-
resolvedSchema = (0, import_json_schema_merge_allof.default)(resolvedSchema, {
|
|
776
|
+
resolvedSchema = experimental_customMergeAllOf ? experimental_customMergeAllOf(resolvedSchema) : (0, import_json_schema_merge_allof.default)(resolvedSchema, {
|
|
733
777
|
deep: false
|
|
734
778
|
});
|
|
735
779
|
if (withContainsSchemas.length) {
|
|
@@ -770,7 +814,7 @@ function resolveAnyOrOneOfSchemas(validator, schema, rootSchema, expandAllBranch
|
|
|
770
814
|
}
|
|
771
815
|
return [schema];
|
|
772
816
|
}
|
|
773
|
-
function resolveDependencies(validator, schema, rootSchema, expandAllBranches, recurseList, formData) {
|
|
817
|
+
function resolveDependencies(validator, schema, rootSchema, expandAllBranches, recurseList, formData, experimental_customMergeAllOf) {
|
|
774
818
|
const { dependencies, ...remainingSchema } = schema;
|
|
775
819
|
const resolvedSchemas = resolveAnyOrOneOfSchemas(
|
|
776
820
|
validator,
|
|
@@ -787,11 +831,12 @@ function resolveDependencies(validator, schema, rootSchema, expandAllBranches, r
|
|
|
787
831
|
rootSchema,
|
|
788
832
|
expandAllBranches,
|
|
789
833
|
recurseList,
|
|
790
|
-
formData
|
|
834
|
+
formData,
|
|
835
|
+
experimental_customMergeAllOf
|
|
791
836
|
)
|
|
792
837
|
);
|
|
793
838
|
}
|
|
794
|
-
function processDependencies(validator, dependencies, resolvedSchema, rootSchema, expandAllBranches, recurseList, formData) {
|
|
839
|
+
function processDependencies(validator, dependencies, resolvedSchema, rootSchema, expandAllBranches, recurseList, formData, experimental_customMergeAllOf) {
|
|
795
840
|
let schemas = [resolvedSchema];
|
|
796
841
|
for (const dependencyKey in dependencies) {
|
|
797
842
|
if (!expandAllBranches && (0, import_get4.default)(formData, [dependencyKey]) === void 0) {
|
|
@@ -815,7 +860,8 @@ function processDependencies(validator, dependencies, resolvedSchema, rootSchema
|
|
|
815
860
|
dependencyValue,
|
|
816
861
|
expandAllBranches,
|
|
817
862
|
recurseList,
|
|
818
|
-
formData
|
|
863
|
+
formData,
|
|
864
|
+
experimental_customMergeAllOf
|
|
819
865
|
);
|
|
820
866
|
}
|
|
821
867
|
return schemas.flatMap(
|
|
@@ -826,7 +872,8 @@ function processDependencies(validator, dependencies, resolvedSchema, rootSchema
|
|
|
826
872
|
rootSchema,
|
|
827
873
|
expandAllBranches,
|
|
828
874
|
recurseList,
|
|
829
|
-
formData
|
|
875
|
+
formData,
|
|
876
|
+
experimental_customMergeAllOf
|
|
830
877
|
)
|
|
831
878
|
);
|
|
832
879
|
}
|
|
@@ -839,14 +886,15 @@ function withDependentProperties(schema, additionallyRequired) {
|
|
|
839
886
|
const required = Array.isArray(schema.required) ? Array.from(/* @__PURE__ */ new Set([...schema.required, ...additionallyRequired])) : additionallyRequired;
|
|
840
887
|
return { ...schema, required };
|
|
841
888
|
}
|
|
842
|
-
function withDependentSchema(validator, schema, rootSchema, dependencyKey, dependencyValue, expandAllBranches, recurseList, formData) {
|
|
889
|
+
function withDependentSchema(validator, schema, rootSchema, dependencyKey, dependencyValue, expandAllBranches, recurseList, formData, experimental_customMergeAllOf) {
|
|
843
890
|
const dependentSchemas = retrieveSchemaInternal(
|
|
844
891
|
validator,
|
|
845
892
|
dependencyValue,
|
|
846
893
|
rootSchema,
|
|
847
894
|
formData,
|
|
848
895
|
expandAllBranches,
|
|
849
|
-
recurseList
|
|
896
|
+
recurseList,
|
|
897
|
+
experimental_customMergeAllOf
|
|
850
898
|
);
|
|
851
899
|
return dependentSchemas.flatMap((dependent) => {
|
|
852
900
|
const { oneOf, ...dependentSchema } = dependent;
|
|
@@ -870,12 +918,13 @@ function withDependentSchema(validator, schema, rootSchema, dependencyKey, depen
|
|
|
870
918
|
resolvedOneOf,
|
|
871
919
|
expandAllBranches,
|
|
872
920
|
recurseList,
|
|
873
|
-
formData
|
|
921
|
+
formData,
|
|
922
|
+
experimental_customMergeAllOf
|
|
874
923
|
)
|
|
875
924
|
);
|
|
876
925
|
});
|
|
877
926
|
}
|
|
878
|
-
function withExactlyOneSubschema(validator, schema, rootSchema, dependencyKey, oneOf, expandAllBranches, recurseList, formData) {
|
|
927
|
+
function withExactlyOneSubschema(validator, schema, rootSchema, dependencyKey, oneOf, expandAllBranches, recurseList, formData, experimental_customMergeAllOf) {
|
|
879
928
|
const validSubschemas = oneOf.filter((subschema) => {
|
|
880
929
|
if (typeof subschema === "boolean" || !subschema || !subschema.properties) {
|
|
881
930
|
return false;
|
|
@@ -906,7 +955,8 @@ function withExactlyOneSubschema(validator, schema, rootSchema, dependencyKey, o
|
|
|
906
955
|
rootSchema,
|
|
907
956
|
formData,
|
|
908
957
|
expandAllBranches,
|
|
909
|
-
recurseList
|
|
958
|
+
recurseList,
|
|
959
|
+
experimental_customMergeAllOf
|
|
910
960
|
);
|
|
911
961
|
return schemas.map((s2) => mergeSchemas(schema, s2));
|
|
912
962
|
});
|
|
@@ -922,7 +972,7 @@ var JUNK_OPTION = {
|
|
|
922
972
|
}
|
|
923
973
|
}
|
|
924
974
|
};
|
|
925
|
-
function calculateIndexScore(validator, rootSchema, schema, formData
|
|
975
|
+
function calculateIndexScore(validator, rootSchema, schema, formData) {
|
|
926
976
|
let totalScore = 0;
|
|
927
977
|
if (schema) {
|
|
928
978
|
if ((0, import_isObject5.default)(schema.properties)) {
|
|
@@ -950,7 +1000,10 @@ function calculateIndexScore(validator, rootSchema, schema, formData = {}) {
|
|
|
950
1000
|
);
|
|
951
1001
|
}
|
|
952
1002
|
if (value.type === "object") {
|
|
953
|
-
|
|
1003
|
+
if ((0, import_isObject5.default)(formValue)) {
|
|
1004
|
+
score += 1;
|
|
1005
|
+
}
|
|
1006
|
+
return score + calculateIndexScore(validator, rootSchema, value, formValue);
|
|
954
1007
|
}
|
|
955
1008
|
if (value.type === guessType(formValue)) {
|
|
956
1009
|
let newScore = score + 1;
|
|
@@ -1020,12 +1073,17 @@ function isFixedItems(schema) {
|
|
|
1020
1073
|
|
|
1021
1074
|
// src/mergeDefaultsWithFormData.ts
|
|
1022
1075
|
var import_get6 = __toESM(require("lodash/get"));
|
|
1023
|
-
function mergeDefaultsWithFormData(defaults, formData, mergeExtraArrayDefaults = false) {
|
|
1076
|
+
function mergeDefaultsWithFormData(defaults, formData, mergeExtraArrayDefaults = false, defaultSupercedesUndefined = false) {
|
|
1024
1077
|
if (Array.isArray(formData)) {
|
|
1025
1078
|
const defaultsArray = Array.isArray(defaults) ? defaults : [];
|
|
1026
1079
|
const mapped = formData.map((value, idx) => {
|
|
1027
1080
|
if (defaultsArray[idx]) {
|
|
1028
|
-
return mergeDefaultsWithFormData(
|
|
1081
|
+
return mergeDefaultsWithFormData(
|
|
1082
|
+
defaultsArray[idx],
|
|
1083
|
+
value,
|
|
1084
|
+
mergeExtraArrayDefaults,
|
|
1085
|
+
defaultSupercedesUndefined
|
|
1086
|
+
);
|
|
1029
1087
|
}
|
|
1030
1088
|
return value;
|
|
1031
1089
|
});
|
|
@@ -1040,11 +1098,15 @@ function mergeDefaultsWithFormData(defaults, formData, mergeExtraArrayDefaults =
|
|
|
1040
1098
|
acc2[key] = mergeDefaultsWithFormData(
|
|
1041
1099
|
defaults ? (0, import_get6.default)(defaults, key) : {},
|
|
1042
1100
|
(0, import_get6.default)(formData, key),
|
|
1043
|
-
mergeExtraArrayDefaults
|
|
1101
|
+
mergeExtraArrayDefaults,
|
|
1102
|
+
defaultSupercedesUndefined
|
|
1044
1103
|
);
|
|
1045
1104
|
return acc2;
|
|
1046
1105
|
}, acc);
|
|
1047
1106
|
}
|
|
1107
|
+
if (defaultSupercedesUndefined && formData === void 0) {
|
|
1108
|
+
return defaults;
|
|
1109
|
+
}
|
|
1048
1110
|
return formData;
|
|
1049
1111
|
}
|
|
1050
1112
|
|
|
@@ -1115,9 +1177,9 @@ function getInnerSchemaForArrayItem(schema, additionalItems = 0 /* Ignore */, id
|
|
|
1115
1177
|
}
|
|
1116
1178
|
return {};
|
|
1117
1179
|
}
|
|
1118
|
-
function maybeAddDefaultToObject(obj, key, computedDefault, includeUndefinedValues, isParentRequired, requiredFields = [], experimental_defaultFormStateBehavior = {}) {
|
|
1180
|
+
function maybeAddDefaultToObject(obj, key, computedDefault, includeUndefinedValues, isParentRequired, requiredFields = [], experimental_defaultFormStateBehavior = {}, isConst = false) {
|
|
1119
1181
|
const { emptyObjectFields = "populateAllDefaults" } = experimental_defaultFormStateBehavior;
|
|
1120
|
-
if (includeUndefinedValues) {
|
|
1182
|
+
if (includeUndefinedValues || isConst) {
|
|
1121
1183
|
obj[key] = computedDefault;
|
|
1122
1184
|
} else if (emptyObjectFields !== "skipDefaults") {
|
|
1123
1185
|
if (isObject(computedDefault)) {
|
|
@@ -1147,6 +1209,7 @@ function computeDefaults(validator, rawSchema, computeDefaultsProps = {}) {
|
|
|
1147
1209
|
includeUndefinedValues = false,
|
|
1148
1210
|
_recurseList = [],
|
|
1149
1211
|
experimental_defaultFormStateBehavior = void 0,
|
|
1212
|
+
experimental_customMergeAllOf = void 0,
|
|
1150
1213
|
required
|
|
1151
1214
|
} = computeDefaultsProps;
|
|
1152
1215
|
const formData = isObject(rawFormData) ? rawFormData : {};
|
|
@@ -1154,7 +1217,9 @@ function computeDefaults(validator, rawSchema, computeDefaultsProps = {}) {
|
|
|
1154
1217
|
let defaults = parentDefaults;
|
|
1155
1218
|
let schemaToCompute = null;
|
|
1156
1219
|
let updatedRecurseList = _recurseList;
|
|
1157
|
-
if (
|
|
1220
|
+
if (isConstant(schema)) {
|
|
1221
|
+
defaults = schema.const;
|
|
1222
|
+
} else if (isObject(defaults) && isObject(schema.default)) {
|
|
1158
1223
|
defaults = mergeObjects(defaults, schema.default);
|
|
1159
1224
|
} else if (DEFAULT_KEY in schema) {
|
|
1160
1225
|
defaults = schema.default;
|
|
@@ -1169,7 +1234,15 @@ function computeDefaults(validator, rawSchema, computeDefaultsProps = {}) {
|
|
|
1169
1234
|
...formData,
|
|
1170
1235
|
...getDefaultBasedOnSchemaType(validator, schema, computeDefaultsProps, defaults)
|
|
1171
1236
|
};
|
|
1172
|
-
const resolvedSchema = resolveDependencies(
|
|
1237
|
+
const resolvedSchema = resolveDependencies(
|
|
1238
|
+
validator,
|
|
1239
|
+
schema,
|
|
1240
|
+
rootSchema,
|
|
1241
|
+
false,
|
|
1242
|
+
[],
|
|
1243
|
+
defaultFormData,
|
|
1244
|
+
experimental_customMergeAllOf
|
|
1245
|
+
);
|
|
1173
1246
|
schemaToCompute = resolvedSchema[0];
|
|
1174
1247
|
} else if (isFixedItems(schema)) {
|
|
1175
1248
|
defaults = schema.items.map(
|
|
@@ -1237,18 +1310,24 @@ function getObjectDefaults(validator, rawSchema, {
|
|
|
1237
1310
|
includeUndefinedValues = false,
|
|
1238
1311
|
_recurseList = [],
|
|
1239
1312
|
experimental_defaultFormStateBehavior = void 0,
|
|
1313
|
+
experimental_customMergeAllOf = void 0,
|
|
1240
1314
|
required
|
|
1241
1315
|
} = {}, defaults) {
|
|
1242
1316
|
{
|
|
1243
1317
|
const formData = isObject(rawFormData) ? rawFormData : {};
|
|
1244
1318
|
const schema = rawSchema;
|
|
1245
|
-
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];
|
|
1246
1321
|
const objectDefaults = Object.keys(retrievedSchema.properties || {}).reduce(
|
|
1247
1322
|
(acc, key) => {
|
|
1248
|
-
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, {
|
|
1249
1327
|
rootSchema,
|
|
1250
1328
|
_recurseList,
|
|
1251
1329
|
experimental_defaultFormStateBehavior,
|
|
1330
|
+
experimental_customMergeAllOf,
|
|
1252
1331
|
includeUndefinedValues: includeUndefinedValues === true,
|
|
1253
1332
|
parentDefaults: (0, import_get7.default)(defaults, [key]),
|
|
1254
1333
|
rawFormData: (0, import_get7.default)(formData, [key]),
|
|
@@ -1261,7 +1340,8 @@ function getObjectDefaults(validator, rawSchema, {
|
|
|
1261
1340
|
includeUndefinedValues,
|
|
1262
1341
|
required,
|
|
1263
1342
|
retrievedSchema.required,
|
|
1264
|
-
experimental_defaultFormStateBehavior
|
|
1343
|
+
experimental_defaultFormStateBehavior,
|
|
1344
|
+
hasConst
|
|
1265
1345
|
);
|
|
1266
1346
|
return acc;
|
|
1267
1347
|
},
|
|
@@ -1343,11 +1423,14 @@ function getArrayDefaults(validator, rawSchema, {
|
|
|
1343
1423
|
});
|
|
1344
1424
|
}
|
|
1345
1425
|
}
|
|
1346
|
-
|
|
1347
|
-
|
|
1348
|
-
|
|
1349
|
-
|
|
1350
|
-
|
|
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
|
+
}
|
|
1351
1434
|
}
|
|
1352
1435
|
const defaultsLength = Array.isArray(defaults) ? defaults.length : 0;
|
|
1353
1436
|
if (!schema.minItems || isMultiSelect(validator, schema, rootSchema) || computeSkipPopulate(validator, schema, rootSchema) || schema.minItems <= defaultsLength) {
|
|
@@ -1377,26 +1460,29 @@ function getDefaultBasedOnSchemaType(validator, rawSchema, computeDefaultsProps
|
|
|
1377
1460
|
}
|
|
1378
1461
|
}
|
|
1379
1462
|
}
|
|
1380
|
-
function getDefaultFormState(validator, theSchema, formData, rootSchema, includeUndefinedValues = false, experimental_defaultFormStateBehavior) {
|
|
1463
|
+
function getDefaultFormState(validator, theSchema, formData, rootSchema, includeUndefinedValues = false, experimental_defaultFormStateBehavior, experimental_customMergeAllOf) {
|
|
1381
1464
|
if (!isObject(theSchema)) {
|
|
1382
1465
|
throw new Error("Invalid schema: " + theSchema);
|
|
1383
1466
|
}
|
|
1384
|
-
const schema = retrieveSchema(validator, theSchema, rootSchema, formData);
|
|
1467
|
+
const schema = retrieveSchema(validator, theSchema, rootSchema, formData, experimental_customMergeAllOf);
|
|
1385
1468
|
const defaults = computeDefaults(validator, schema, {
|
|
1386
1469
|
rootSchema,
|
|
1387
1470
|
includeUndefinedValues,
|
|
1388
1471
|
experimental_defaultFormStateBehavior,
|
|
1472
|
+
experimental_customMergeAllOf,
|
|
1389
1473
|
rawFormData: formData
|
|
1390
1474
|
});
|
|
1391
1475
|
if (formData === void 0 || formData === null || typeof formData === "number" && isNaN(formData)) {
|
|
1392
1476
|
return defaults;
|
|
1393
1477
|
}
|
|
1394
|
-
const {
|
|
1478
|
+
const { mergeDefaultsIntoFormData, arrayMinItems = {} } = experimental_defaultFormStateBehavior || {};
|
|
1479
|
+
const { mergeExtraDefaults } = arrayMinItems;
|
|
1480
|
+
const defaultSupercedesUndefined = mergeDefaultsIntoFormData === "useDefaultIfFormDataUndefined";
|
|
1395
1481
|
if (isObject(formData)) {
|
|
1396
|
-
return mergeDefaultsWithFormData(defaults, formData, mergeExtraDefaults);
|
|
1482
|
+
return mergeDefaultsWithFormData(defaults, formData, mergeExtraDefaults, defaultSupercedesUndefined);
|
|
1397
1483
|
}
|
|
1398
1484
|
if (Array.isArray(formData)) {
|
|
1399
|
-
return mergeDefaultsWithFormData(defaults, formData, mergeExtraDefaults);
|
|
1485
|
+
return mergeDefaultsWithFormData(defaults, formData, mergeExtraDefaults, defaultSupercedesUndefined);
|
|
1400
1486
|
}
|
|
1401
1487
|
return formData;
|
|
1402
1488
|
}
|
|
@@ -1569,7 +1655,7 @@ function sanitizeDataForNewSchema(validator, rootSchema, newSchema, oldSchema, d
|
|
|
1569
1655
|
// src/schema/toIdSchema.ts
|
|
1570
1656
|
var import_get9 = __toESM(require("lodash/get"));
|
|
1571
1657
|
var import_isEqual2 = __toESM(require("lodash/isEqual"));
|
|
1572
|
-
function toIdSchemaInternal(validator, schema, idPrefix, idSeparator, id, rootSchema, formData, _recurseList = []) {
|
|
1658
|
+
function toIdSchemaInternal(validator, schema, idPrefix, idSeparator, id, rootSchema, formData, _recurseList = [], experimental_customMergeAllOf) {
|
|
1573
1659
|
if (REF_KEY in schema || DEPENDENCIES_KEY in schema || ALL_OF_KEY in schema) {
|
|
1574
1660
|
const _schema = retrieveSchema(validator, schema, rootSchema, formData);
|
|
1575
1661
|
const sameSchemaIndex = _recurseList.findIndex((item) => (0, import_isEqual2.default)(item, _schema));
|
|
@@ -1582,7 +1668,8 @@ function toIdSchemaInternal(validator, schema, idPrefix, idSeparator, id, rootSc
|
|
|
1582
1668
|
id,
|
|
1583
1669
|
rootSchema,
|
|
1584
1670
|
formData,
|
|
1585
|
-
_recurseList.concat(_schema)
|
|
1671
|
+
_recurseList.concat(_schema),
|
|
1672
|
+
experimental_customMergeAllOf
|
|
1586
1673
|
);
|
|
1587
1674
|
}
|
|
1588
1675
|
}
|
|
@@ -1595,7 +1682,8 @@ function toIdSchemaInternal(validator, schema, idPrefix, idSeparator, id, rootSc
|
|
|
1595
1682
|
id,
|
|
1596
1683
|
rootSchema,
|
|
1597
1684
|
formData,
|
|
1598
|
-
_recurseList
|
|
1685
|
+
_recurseList,
|
|
1686
|
+
experimental_customMergeAllOf
|
|
1599
1687
|
);
|
|
1600
1688
|
}
|
|
1601
1689
|
const $id = id || idPrefix;
|
|
@@ -1614,14 +1702,25 @@ function toIdSchemaInternal(validator, schema, idPrefix, idSeparator, id, rootSc
|
|
|
1614
1702
|
// It's possible that formData is not an object -- this can happen if an
|
|
1615
1703
|
// array item has just been added, but not populated with data yet
|
|
1616
1704
|
(0, import_get9.default)(formData, [name]),
|
|
1617
|
-
_recurseList
|
|
1705
|
+
_recurseList,
|
|
1706
|
+
experimental_customMergeAllOf
|
|
1618
1707
|
);
|
|
1619
1708
|
}
|
|
1620
1709
|
}
|
|
1621
1710
|
return idSchema;
|
|
1622
1711
|
}
|
|
1623
|
-
function toIdSchema(validator, schema, id, rootSchema, formData, idPrefix = "root", idSeparator = "_") {
|
|
1624
|
-
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
|
+
);
|
|
1625
1724
|
}
|
|
1626
1725
|
|
|
1627
1726
|
// src/schema/toPathSchema.ts
|
|
@@ -1725,11 +1824,13 @@ var SchemaUtils = class {
|
|
|
1725
1824
|
* @param validator - An implementation of the `ValidatorType` interface that will be forwarded to all the APIs
|
|
1726
1825
|
* @param rootSchema - The root schema that will be forwarded to all the APIs
|
|
1727
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
|
|
1728
1828
|
*/
|
|
1729
|
-
constructor(validator, rootSchema, experimental_defaultFormStateBehavior) {
|
|
1829
|
+
constructor(validator, rootSchema, experimental_defaultFormStateBehavior, experimental_customMergeAllOf) {
|
|
1730
1830
|
this.rootSchema = rootSchema;
|
|
1731
1831
|
this.validator = validator;
|
|
1732
1832
|
this.experimental_defaultFormStateBehavior = experimental_defaultFormStateBehavior;
|
|
1833
|
+
this.experimental_customMergeAllOf = experimental_customMergeAllOf;
|
|
1733
1834
|
}
|
|
1734
1835
|
/** Returns the `ValidatorType` in the `SchemaUtilsType`
|
|
1735
1836
|
*
|
|
@@ -1745,13 +1846,14 @@ var SchemaUtils = class {
|
|
|
1745
1846
|
* @param validator - An implementation of the `ValidatorType` interface that will be compared against the current one
|
|
1746
1847
|
* @param rootSchema - The root schema that will be compared against the current one
|
|
1747
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
|
|
1748
1850
|
* @returns - True if the `SchemaUtilsType` differs from the given `validator` or `rootSchema`
|
|
1749
1851
|
*/
|
|
1750
|
-
doesSchemaUtilsDiffer(validator, rootSchema, experimental_defaultFormStateBehavior = {}) {
|
|
1852
|
+
doesSchemaUtilsDiffer(validator, rootSchema, experimental_defaultFormStateBehavior = {}, experimental_customMergeAllOf) {
|
|
1751
1853
|
if (!validator || !rootSchema) {
|
|
1752
1854
|
return false;
|
|
1753
1855
|
}
|
|
1754
|
-
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;
|
|
1755
1857
|
}
|
|
1756
1858
|
/** Returns the superset of `formData` that includes the given set updated to include any missing fields that have
|
|
1757
1859
|
* computed to have defaults provided in the `schema`.
|
|
@@ -1770,7 +1872,8 @@ var SchemaUtils = class {
|
|
|
1770
1872
|
formData,
|
|
1771
1873
|
this.rootSchema,
|
|
1772
1874
|
includeUndefinedValues,
|
|
1773
|
-
this.experimental_defaultFormStateBehavior
|
|
1875
|
+
this.experimental_defaultFormStateBehavior,
|
|
1876
|
+
this.experimental_customMergeAllOf
|
|
1774
1877
|
);
|
|
1775
1878
|
}
|
|
1776
1879
|
/** Determines whether the combination of `schema` and `uiSchema` properties indicates that the label for the `schema`
|
|
@@ -1880,7 +1983,13 @@ var SchemaUtils = class {
|
|
|
1880
1983
|
* @returns - The schema having its conditions, additional properties, references and dependencies resolved
|
|
1881
1984
|
*/
|
|
1882
1985
|
retrieveSchema(schema, rawFormData) {
|
|
1883
|
-
return retrieveSchema(
|
|
1986
|
+
return retrieveSchema(
|
|
1987
|
+
this.validator,
|
|
1988
|
+
schema,
|
|
1989
|
+
this.rootSchema,
|
|
1990
|
+
rawFormData,
|
|
1991
|
+
this.experimental_customMergeAllOf
|
|
1992
|
+
);
|
|
1884
1993
|
}
|
|
1885
1994
|
/** Sanitize the `data` associated with the `oldSchema` so it is considered appropriate for the `newSchema`. If the
|
|
1886
1995
|
* new schema does not contain any properties, then `undefined` is returned to clear all the form data. Due to the
|
|
@@ -1906,7 +2015,16 @@ var SchemaUtils = class {
|
|
|
1906
2015
|
* @returns - The `IdSchema` object for the `schema`
|
|
1907
2016
|
*/
|
|
1908
2017
|
toIdSchema(schema, id, formData, idPrefix = "root", idSeparator = "_") {
|
|
1909
|
-
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
|
+
);
|
|
1910
2028
|
}
|
|
1911
2029
|
/** Generates an `PathSchema` object for the `schema`, recursively
|
|
1912
2030
|
*
|
|
@@ -1919,8 +2037,13 @@ var SchemaUtils = class {
|
|
|
1919
2037
|
return toPathSchema(this.validator, schema, name, this.rootSchema, formData);
|
|
1920
2038
|
}
|
|
1921
2039
|
};
|
|
1922
|
-
function createSchemaUtils(validator, rootSchema, experimental_defaultFormStateBehavior = {}) {
|
|
1923
|
-
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
|
+
);
|
|
1924
2047
|
}
|
|
1925
2048
|
|
|
1926
2049
|
// src/dataURItoBlob.ts
|