@rjsf/utils 5.8.2 → 5.10.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.d.ts +35 -6
- package/dist/utils.cjs.development.js +83 -43
- package/dist/utils.cjs.development.js.map +1 -1
- package/dist/utils.cjs.production.min.js +1 -1
- package/dist/utils.cjs.production.min.js.map +1 -1
- package/dist/utils.esm.js +83 -43
- package/dist/utils.esm.js.map +1 -1
- package/dist/utils.umd.development.js +83 -43
- package/dist/utils.umd.development.js.map +1 -1
- package/dist/utils.umd.production.min.js +1 -1
- package/dist/utils.umd.production.min.js.map +1 -1
- package/package.json +9 -9
|
@@ -528,11 +528,12 @@
|
|
|
528
528
|
}, acc);
|
|
529
529
|
}
|
|
530
530
|
|
|
531
|
-
var _excluded$
|
|
532
|
-
_excluded2 = ["$ref"],
|
|
531
|
+
var _excluded$2 = ["if", "then", "else"],
|
|
532
|
+
_excluded2$1 = ["$ref"],
|
|
533
533
|
_excluded3 = ["allOf"],
|
|
534
|
-
_excluded4 = ["
|
|
535
|
-
_excluded5 = ["
|
|
534
|
+
_excluded4 = ["oneOf", "anyOf"],
|
|
535
|
+
_excluded5 = ["dependencies"],
|
|
536
|
+
_excluded6 = ["oneOf"];
|
|
536
537
|
/** Retrieves an expanded schema that has had all of its conditions, additional properties, references and dependencies
|
|
537
538
|
* resolved and merged into the `schema` given a `validator`, `rootSchema` and `rawFormData` that is used to do the
|
|
538
539
|
* potentially recursive resolution.
|
|
@@ -565,7 +566,7 @@
|
|
|
565
566
|
var expression = schema["if"],
|
|
566
567
|
then = schema.then,
|
|
567
568
|
otherwise = schema["else"],
|
|
568
|
-
resolvedSchemaLessConditional = _objectWithoutPropertiesLoose(schema, _excluded$
|
|
569
|
+
resolvedSchemaLessConditional = _objectWithoutPropertiesLoose(schema, _excluded$2);
|
|
569
570
|
var conditionValue = validator.isValid(expression, formData || {}, rootSchema);
|
|
570
571
|
var resolvedSchemas = [resolvedSchemaLessConditional];
|
|
571
572
|
var schemas = [];
|
|
@@ -675,7 +676,7 @@
|
|
|
675
676
|
function resolveReference(validator, schema, rootSchema, expandAllBranches, formData) {
|
|
676
677
|
// Drop the $ref property of the source schema.
|
|
677
678
|
var $ref = schema.$ref,
|
|
678
|
-
localSchema = _objectWithoutPropertiesLoose(schema, _excluded2);
|
|
679
|
+
localSchema = _objectWithoutPropertiesLoose(schema, _excluded2$1);
|
|
679
680
|
// Retrieve the referenced schema definition.
|
|
680
681
|
var refSchema = findSchemaDefinition($ref, rootSchema);
|
|
681
682
|
// Update referenced schema definition with local schema properties.
|
|
@@ -757,9 +758,9 @@
|
|
|
757
758
|
if (IF_KEY in resolvedSchema) {
|
|
758
759
|
return resolveCondition(validator, resolvedSchema, rootSchema, expandAllBranches, rawFormData);
|
|
759
760
|
}
|
|
760
|
-
if (ALL_OF_KEY in
|
|
761
|
+
if (ALL_OF_KEY in resolvedSchema) {
|
|
761
762
|
try {
|
|
762
|
-
resolvedSchema = mergeAllOf__default["default"](
|
|
763
|
+
resolvedSchema = mergeAllOf__default["default"](resolvedSchema, {
|
|
763
764
|
deep: false
|
|
764
765
|
});
|
|
765
766
|
} catch (e) {
|
|
@@ -794,10 +795,14 @@
|
|
|
794
795
|
*/
|
|
795
796
|
function resolveAnyOrOneOfSchemas(validator, schema, rootSchema, expandAllBranches, rawFormData) {
|
|
796
797
|
var anyOrOneOf;
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
798
|
+
var _schema = schema,
|
|
799
|
+
oneOf = _schema.oneOf,
|
|
800
|
+
anyOf = _schema.anyOf,
|
|
801
|
+
remaining = _objectWithoutPropertiesLoose(_schema, _excluded4);
|
|
802
|
+
if (Array.isArray(oneOf)) {
|
|
803
|
+
anyOrOneOf = oneOf;
|
|
804
|
+
} else if (Array.isArray(anyOf)) {
|
|
805
|
+
anyOrOneOf = anyOf;
|
|
801
806
|
}
|
|
802
807
|
if (anyOrOneOf) {
|
|
803
808
|
// Ensure that during expand all branches we pass an object rather than undefined so that all options are interrogated
|
|
@@ -813,9 +818,11 @@
|
|
|
813
818
|
// Call this to trigger the set of isValid() calls that the schema parser will need
|
|
814
819
|
var option = getFirstMatchingOption(validator, formData, anyOrOneOf, rootSchema, discriminator);
|
|
815
820
|
if (expandAllBranches) {
|
|
816
|
-
return anyOrOneOf
|
|
821
|
+
return anyOrOneOf.map(function (item) {
|
|
822
|
+
return _extends({}, remaining, item);
|
|
823
|
+
});
|
|
817
824
|
}
|
|
818
|
-
schema = anyOrOneOf[option];
|
|
825
|
+
schema = _extends({}, remaining, anyOrOneOf[option]);
|
|
819
826
|
}
|
|
820
827
|
return [schema];
|
|
821
828
|
}
|
|
@@ -833,7 +840,7 @@
|
|
|
833
840
|
function resolveDependencies(validator, schema, rootSchema, expandAllBranches, formData) {
|
|
834
841
|
// Drop the dependencies from the source schema.
|
|
835
842
|
var dependencies = schema.dependencies,
|
|
836
|
-
remainingSchema = _objectWithoutPropertiesLoose(schema,
|
|
843
|
+
remainingSchema = _objectWithoutPropertiesLoose(schema, _excluded5);
|
|
837
844
|
var resolvedSchemas = resolveAnyOrOneOfSchemas(validator, remainingSchema, rootSchema, expandAllBranches, formData);
|
|
838
845
|
return resolvedSchemas.flatMap(function (resolvedSchema) {
|
|
839
846
|
return processDependencies(validator, dependencies, resolvedSchema, rootSchema, expandAllBranches, formData);
|
|
@@ -916,7 +923,7 @@
|
|
|
916
923
|
var dependentSchemas = retrieveSchemaInternal(validator, dependencyValue, rootSchema, formData, expandAllBranches);
|
|
917
924
|
return dependentSchemas.flatMap(function (dependent) {
|
|
918
925
|
var oneOf = dependent.oneOf,
|
|
919
|
-
dependentSchema = _objectWithoutPropertiesLoose(dependent,
|
|
926
|
+
dependentSchema = _objectWithoutPropertiesLoose(dependent, _excluded6);
|
|
920
927
|
schema = mergeSchemas(schema, dependentSchema);
|
|
921
928
|
// Since it does not contain oneOf, we return the original schema.
|
|
922
929
|
if (oneOf === undefined) {
|
|
@@ -1031,8 +1038,10 @@
|
|
|
1031
1038
|
var newSchema = retrieveSchema(validator, value, rootSchema, formValue);
|
|
1032
1039
|
return score + calculateIndexScore(validator, rootSchema, newSchema, formValue || {});
|
|
1033
1040
|
}
|
|
1034
|
-
if (has__default["default"](value, ONE_OF_KEY) && formValue) {
|
|
1035
|
-
|
|
1041
|
+
if ((has__default["default"](value, ONE_OF_KEY) || has__default["default"](value, ANY_OF_KEY)) && formValue) {
|
|
1042
|
+
var _key = has__default["default"](value, ONE_OF_KEY) ? ONE_OF_KEY : ANY_OF_KEY;
|
|
1043
|
+
var discriminator = getDiscriminatorFieldFromSchema(value);
|
|
1044
|
+
return score + getClosestMatchingOption(validator, rootSchema, formValue, get__default["default"](value, _key), -1, discriminator);
|
|
1036
1045
|
}
|
|
1037
1046
|
if (value.type === 'object') {
|
|
1038
1047
|
return score + calculateIndexScore(validator, rootSchema, value, formValue || {});
|
|
@@ -1086,8 +1095,15 @@
|
|
|
1086
1095
|
if (selectedOption === void 0) {
|
|
1087
1096
|
selectedOption = -1;
|
|
1088
1097
|
}
|
|
1098
|
+
// First resolve any refs in the options
|
|
1099
|
+
var resolvedOptions = options.map(function (option) {
|
|
1100
|
+
if (has__default["default"](option, REF_KEY)) {
|
|
1101
|
+
return retrieveSchema(validator, option, rootSchema, formData);
|
|
1102
|
+
}
|
|
1103
|
+
return option;
|
|
1104
|
+
});
|
|
1089
1105
|
// Reduce the array of options down to a list of the indexes that are considered matching options
|
|
1090
|
-
var allValidIndexes =
|
|
1106
|
+
var allValidIndexes = resolvedOptions.reduce(function (validList, option, index) {
|
|
1091
1107
|
var testOptions = [JUNK_OPTION, option];
|
|
1092
1108
|
var match = getFirstMatchingOption(validator, formData, testOptions, rootSchema, discriminatorField);
|
|
1093
1109
|
// The match is the real option, so add its index to list of valid indexes
|
|
@@ -1102,7 +1118,7 @@
|
|
|
1102
1118
|
}
|
|
1103
1119
|
if (!allValidIndexes.length) {
|
|
1104
1120
|
// No indexes were valid, so we'll score all the options, add all the indexes
|
|
1105
|
-
times__default["default"](
|
|
1121
|
+
times__default["default"](resolvedOptions.length, function (i) {
|
|
1106
1122
|
return allValidIndexes.push(i);
|
|
1107
1123
|
});
|
|
1108
1124
|
}
|
|
@@ -1110,10 +1126,7 @@
|
|
|
1110
1126
|
// Score all the options in the list of valid indexes and return the index with the best score
|
|
1111
1127
|
var _allValidIndexes$redu = allValidIndexes.reduce(function (scoreData, index) {
|
|
1112
1128
|
var bestScore = scoreData.bestScore;
|
|
1113
|
-
var option =
|
|
1114
|
-
if (has__default["default"](option, REF_KEY)) {
|
|
1115
|
-
option = retrieveSchema(validator, option, rootSchema, formData);
|
|
1116
|
-
}
|
|
1129
|
+
var option = resolvedOptions[index];
|
|
1117
1130
|
var score = calculateIndexScore(validator, rootSchema, option, formData);
|
|
1118
1131
|
scoreCount.add(score);
|
|
1119
1132
|
if (score > bestScore) {
|
|
@@ -1153,29 +1166,38 @@
|
|
|
1153
1166
|
* - objects are deeply merged
|
|
1154
1167
|
* - arrays are merged in such a way that:
|
|
1155
1168
|
* - when the array is set in form data, only array entries set in form data
|
|
1156
|
-
* are deeply merged; additional entries from the defaults are ignored
|
|
1169
|
+
* are deeply merged; additional entries from the defaults are ignored unless `mergeExtraArrayDefaults` is true, in
|
|
1170
|
+
* which case the extras are appended onto the end of the form data
|
|
1157
1171
|
* - when the array is not set in form data, the default is copied over
|
|
1158
1172
|
* - scalars are overwritten/set by form data
|
|
1159
1173
|
*
|
|
1160
1174
|
* @param [defaults] - The defaults to merge
|
|
1161
1175
|
* @param [formData] - The form data into which the defaults will be merged
|
|
1176
|
+
* @param [mergeExtraArrayDefaults=false] - If true, any additional default array entries are appended onto the formData
|
|
1162
1177
|
* @returns - The resulting merged form data with defaults
|
|
1163
1178
|
*/
|
|
1164
|
-
function mergeDefaultsWithFormData(defaults, formData) {
|
|
1179
|
+
function mergeDefaultsWithFormData(defaults, formData, mergeExtraArrayDefaults) {
|
|
1180
|
+
if (mergeExtraArrayDefaults === void 0) {
|
|
1181
|
+
mergeExtraArrayDefaults = false;
|
|
1182
|
+
}
|
|
1165
1183
|
if (Array.isArray(formData)) {
|
|
1166
1184
|
var defaultsArray = Array.isArray(defaults) ? defaults : [];
|
|
1167
1185
|
var mapped = formData.map(function (value, idx) {
|
|
1168
1186
|
if (defaultsArray[idx]) {
|
|
1169
|
-
return mergeDefaultsWithFormData(defaultsArray[idx], value);
|
|
1187
|
+
return mergeDefaultsWithFormData(defaultsArray[idx], value, mergeExtraArrayDefaults);
|
|
1170
1188
|
}
|
|
1171
1189
|
return value;
|
|
1172
1190
|
});
|
|
1191
|
+
// Merge any extra defaults when mergeExtraArrayDefaults is true
|
|
1192
|
+
if (mergeExtraArrayDefaults && mapped.length < defaultsArray.length) {
|
|
1193
|
+
mapped.push.apply(mapped, defaultsArray.slice(mapped.length));
|
|
1194
|
+
}
|
|
1173
1195
|
return mapped;
|
|
1174
1196
|
}
|
|
1175
1197
|
if (isObject(formData)) {
|
|
1176
1198
|
var acc = Object.assign({}, defaults); // Prevent mutation of source object.
|
|
1177
1199
|
return Object.keys(formData).reduce(function (acc, key) {
|
|
1178
|
-
acc[key] = mergeDefaultsWithFormData(defaults ? get__default["default"](defaults, key) : {}, get__default["default"](formData, key));
|
|
1200
|
+
acc[key] = mergeDefaultsWithFormData(defaults ? get__default["default"](defaults, key) : {}, get__default["default"](formData, key), mergeExtraArrayDefaults);
|
|
1179
1201
|
return acc;
|
|
1180
1202
|
}, acc);
|
|
1181
1203
|
}
|
|
@@ -1266,6 +1288,8 @@
|
|
|
1266
1288
|
return isSelect(validator, schema.items, rootSchema);
|
|
1267
1289
|
}
|
|
1268
1290
|
|
|
1291
|
+
var _excluded$1 = ["oneOf"],
|
|
1292
|
+
_excluded2 = ["anyOf"];
|
|
1269
1293
|
/** Enum that indicates how `schema.additionalItems` should be handled by the `getInnerSchemaForArrayItem()` function.
|
|
1270
1294
|
*/
|
|
1271
1295
|
var AdditionalItemsHandling;
|
|
@@ -1344,10 +1368,13 @@
|
|
|
1344
1368
|
obj[key] = computedDefault;
|
|
1345
1369
|
} else if (emptyObjectFields !== 'skipDefaults') {
|
|
1346
1370
|
if (isObject(computedDefault)) {
|
|
1371
|
+
// If isParentRequired is undefined, then we are at the root level of the schema so defer to the requiredness of
|
|
1372
|
+
// the field key itself in the `requiredField` list
|
|
1373
|
+
var isSelfOrParentRequired = isParentRequired === undefined ? requiredFields.includes(key) : isParentRequired;
|
|
1347
1374
|
// Store computedDefault if it's a non-empty object(e.g. not {}) and satisfies certain conditions
|
|
1348
1375
|
// Condition 1: If computedDefault is not empty or if the key is a required field
|
|
1349
1376
|
// Condition 2: If the parent object is required or emptyObjectFields is not 'populateRequiredDefaults'
|
|
1350
|
-
if ((!isEmpty__default["default"](computedDefault) || requiredFields.includes(key)) && (
|
|
1377
|
+
if ((!isEmpty__default["default"](computedDefault) || requiredFields.includes(key)) && (isSelfOrParentRequired || emptyObjectFields !== 'populateRequiredDefaults')) {
|
|
1351
1378
|
obj[key] = computedDefault;
|
|
1352
1379
|
}
|
|
1353
1380
|
} else if (
|
|
@@ -1388,8 +1415,7 @@
|
|
|
1388
1415
|
_recurseList = _ref$_recurseList === void 0 ? [] : _ref$_recurseList,
|
|
1389
1416
|
_ref$experimental_def = _ref.experimental_defaultFormStateBehavior,
|
|
1390
1417
|
experimental_defaultFormStateBehavior = _ref$experimental_def === void 0 ? undefined : _ref$experimental_def,
|
|
1391
|
-
|
|
1392
|
-
required = _ref$required === void 0 ? false : _ref$required;
|
|
1418
|
+
required = _ref.required;
|
|
1393
1419
|
var formData = isObject(rawFormData) ? rawFormData : {};
|
|
1394
1420
|
var schema = isObject(rawSchema) ? rawSchema : {};
|
|
1395
1421
|
// Compute the defaults recursively: give highest priority to deepest nodes.
|
|
@@ -1421,21 +1447,28 @@
|
|
|
1421
1447
|
_recurseList: _recurseList,
|
|
1422
1448
|
experimental_defaultFormStateBehavior: experimental_defaultFormStateBehavior,
|
|
1423
1449
|
parentDefaults: Array.isArray(parentDefaults) ? parentDefaults[idx] : undefined,
|
|
1424
|
-
rawFormData: formData
|
|
1450
|
+
rawFormData: formData,
|
|
1451
|
+
required: required
|
|
1425
1452
|
});
|
|
1426
1453
|
});
|
|
1427
1454
|
} else if (ONE_OF_KEY in schema) {
|
|
1428
|
-
|
|
1455
|
+
var oneOf = schema.oneOf,
|
|
1456
|
+
remaining = _objectWithoutPropertiesLoose(schema, _excluded$1);
|
|
1457
|
+
if (oneOf.length === 0) {
|
|
1429
1458
|
return undefined;
|
|
1430
1459
|
}
|
|
1431
1460
|
var discriminator = getDiscriminatorFieldFromSchema(schema);
|
|
1432
|
-
schemaToCompute =
|
|
1461
|
+
schemaToCompute = oneOf[getClosestMatchingOption(validator, rootSchema, isEmpty__default["default"](formData) ? undefined : formData, oneOf, 0, discriminator)];
|
|
1462
|
+
schemaToCompute = _extends({}, remaining, schemaToCompute);
|
|
1433
1463
|
} else if (ANY_OF_KEY in schema) {
|
|
1434
|
-
|
|
1464
|
+
var anyOf = schema.anyOf,
|
|
1465
|
+
_remaining = _objectWithoutPropertiesLoose(schema, _excluded2);
|
|
1466
|
+
if (anyOf.length === 0) {
|
|
1435
1467
|
return undefined;
|
|
1436
1468
|
}
|
|
1437
1469
|
var _discriminator = getDiscriminatorFieldFromSchema(schema);
|
|
1438
|
-
schemaToCompute =
|
|
1470
|
+
schemaToCompute = anyOf[getClosestMatchingOption(validator, rootSchema, isEmpty__default["default"](formData) ? undefined : formData, anyOf, 0, _discriminator)];
|
|
1471
|
+
schemaToCompute = _extends({}, _remaining, schemaToCompute);
|
|
1439
1472
|
}
|
|
1440
1473
|
if (schemaToCompute) {
|
|
1441
1474
|
return computeDefaults(validator, schemaToCompute, {
|
|
@@ -1444,7 +1477,8 @@
|
|
|
1444
1477
|
_recurseList: updatedRecurseList,
|
|
1445
1478
|
experimental_defaultFormStateBehavior: experimental_defaultFormStateBehavior,
|
|
1446
1479
|
parentDefaults: defaults,
|
|
1447
|
-
rawFormData: formData
|
|
1480
|
+
rawFormData: formData,
|
|
1481
|
+
required: required
|
|
1448
1482
|
});
|
|
1449
1483
|
}
|
|
1450
1484
|
// No defaults defined for this node, fallback to generic typed ones.
|
|
@@ -1511,6 +1545,7 @@
|
|
|
1511
1545
|
}
|
|
1512
1546
|
case 'array':
|
|
1513
1547
|
{
|
|
1548
|
+
var _experimental_default3;
|
|
1514
1549
|
// Inject defaults into existing array defaults
|
|
1515
1550
|
if (Array.isArray(defaults)) {
|
|
1516
1551
|
defaults = defaults.map(function (item, idx) {
|
|
@@ -1519,7 +1554,8 @@
|
|
|
1519
1554
|
rootSchema: rootSchema,
|
|
1520
1555
|
_recurseList: _recurseList,
|
|
1521
1556
|
experimental_defaultFormStateBehavior: experimental_defaultFormStateBehavior,
|
|
1522
|
-
parentDefaults: item
|
|
1557
|
+
parentDefaults: item,
|
|
1558
|
+
required: required
|
|
1523
1559
|
});
|
|
1524
1560
|
});
|
|
1525
1561
|
}
|
|
@@ -1532,11 +1568,12 @@
|
|
|
1532
1568
|
_recurseList: _recurseList,
|
|
1533
1569
|
experimental_defaultFormStateBehavior: experimental_defaultFormStateBehavior,
|
|
1534
1570
|
rawFormData: item,
|
|
1535
|
-
parentDefaults: get__default["default"](defaults, [idx])
|
|
1571
|
+
parentDefaults: get__default["default"](defaults, [idx]),
|
|
1572
|
+
required: required
|
|
1536
1573
|
});
|
|
1537
1574
|
});
|
|
1538
1575
|
}
|
|
1539
|
-
var ignoreMinItemsFlagSet = (experimental_defaultFormStateBehavior === null || experimental_defaultFormStateBehavior === void 0 ? void 0 : experimental_defaultFormStateBehavior.arrayMinItems) === 'requiredOnly';
|
|
1576
|
+
var ignoreMinItemsFlagSet = (experimental_defaultFormStateBehavior === null || experimental_defaultFormStateBehavior === void 0 ? void 0 : (_experimental_default3 = experimental_defaultFormStateBehavior.arrayMinItems) === null || _experimental_default3 === void 0 ? void 0 : _experimental_default3.populate) === 'requiredOnly';
|
|
1540
1577
|
if (ignoreMinItemsFlagSet && !required) {
|
|
1541
1578
|
// If no form data exists or defaults are set leave the field empty/non-existent, otherwise
|
|
1542
1579
|
// return form data/defaults
|
|
@@ -1554,7 +1591,8 @@
|
|
|
1554
1591
|
parentDefaults: fillerDefault,
|
|
1555
1592
|
rootSchema: rootSchema,
|
|
1556
1593
|
_recurseList: _recurseList,
|
|
1557
|
-
experimental_defaultFormStateBehavior: experimental_defaultFormStateBehavior
|
|
1594
|
+
experimental_defaultFormStateBehavior: experimental_defaultFormStateBehavior,
|
|
1595
|
+
required: required
|
|
1558
1596
|
}));
|
|
1559
1597
|
// then fill up the rest with either the item default or empty, up to minItems
|
|
1560
1598
|
return defaultEntries.concat(fillerEntries);
|
|
@@ -1593,11 +1631,13 @@
|
|
|
1593
1631
|
// No form data? Use schema defaults.
|
|
1594
1632
|
return defaults;
|
|
1595
1633
|
}
|
|
1634
|
+
var _ref2 = (experimental_defaultFormStateBehavior === null || experimental_defaultFormStateBehavior === void 0 ? void 0 : experimental_defaultFormStateBehavior.arrayMinItems) || {},
|
|
1635
|
+
mergeExtraDefaults = _ref2.mergeExtraDefaults;
|
|
1596
1636
|
if (isObject(formData)) {
|
|
1597
|
-
return mergeDefaultsWithFormData(defaults, formData);
|
|
1637
|
+
return mergeDefaultsWithFormData(defaults, formData, mergeExtraDefaults);
|
|
1598
1638
|
}
|
|
1599
1639
|
if (Array.isArray(formData)) {
|
|
1600
|
-
return mergeDefaultsWithFormData(defaults, formData);
|
|
1640
|
+
return mergeDefaultsWithFormData(defaults, formData, mergeExtraDefaults);
|
|
1601
1641
|
}
|
|
1602
1642
|
return formData;
|
|
1603
1643
|
}
|