@rjsf/utils 6.1.1 → 6.2.3
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.cjs +241 -163
- package/dist/index.cjs.map +4 -4
- package/dist/utils.esm.js +241 -163
- package/dist/utils.esm.js.map +4 -4
- package/dist/utils.umd.js +258 -184
- package/lib/createSchemaUtils.js +13 -1
- package/lib/createSchemaUtils.js.map +1 -1
- package/lib/enums.d.ts +2 -0
- package/lib/enums.js +2 -0
- package/lib/enums.js.map +1 -1
- package/lib/schema/getDefaultFormState.js +21 -8
- package/lib/schema/getDefaultFormState.js.map +1 -1
- package/lib/schema/index.d.ts +4 -1
- package/lib/schema/index.js +4 -1
- package/lib/schema/index.js.map +1 -1
- package/lib/schema/omitExtraData.d.ts +26 -0
- package/lib/schema/omitExtraData.js +79 -0
- package/lib/schema/omitExtraData.js.map +1 -0
- package/lib/schema/retrieveSchema.js +19 -8
- package/lib/schema/retrieveSchema.js.map +1 -1
- package/lib/schema/toPathSchema.js +2 -2
- package/lib/schema/toPathSchema.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/lib/types.d.ts +19 -2
- package/package.json +2 -3
- package/src/createSchemaUtils.ts +13 -0
- package/src/enums.ts +2 -0
- package/src/schema/getDefaultFormState.ts +26 -10
- package/src/schema/index.ts +4 -0
- package/src/schema/omitExtraData.ts +93 -0
- package/src/schema/retrieveSchema.ts +22 -8
- package/src/schema/toPathSchema.ts +2 -1
- package/src/types.ts +19 -1
package/dist/utils.umd.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
(function (global, factory) {
|
|
2
|
-
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('lodash/isPlainObject'), require('lodash/isEqualWith'), require('lodash/get'), require('lodash/has'), require('lodash/isEqual'), require('lodash/set'), require('lodash/times'), require('lodash/transform'), require('lodash/merge'), require('lodash/flattenDeep'), require('lodash/uniq'), require('json-schema-merge
|
|
3
|
-
typeof define === 'function' && define.amd ? define(['exports', 'lodash/isPlainObject', 'lodash/isEqualWith', 'lodash/get', 'lodash/has', 'lodash/isEqual', 'lodash/set', 'lodash/times', 'lodash/transform', 'lodash/merge', 'lodash/flattenDeep', 'lodash/uniq', 'json-schema-merge-
|
|
4
|
-
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global["@rjsf/utils"] = {}, global.isPlainObject2, global.isEqualWith, global.
|
|
5
|
-
})(this, (function (exports, isPlainObject2, isEqualWith,
|
|
2
|
+
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('lodash/isPlainObject'), require('lodash/isEqualWith'), require('lodash/get'), require('lodash/has'), require('lodash/isEqual'), require('lodash/set'), require('lodash/times'), require('lodash/transform'), require('lodash/merge'), require('lodash/flattenDeep'), require('lodash/uniq'), require('lodash/isEmpty'), require('@x0k/json-schema-merge'), require('@x0k/json-schema-merge/lib/array'), require('jsonpointer'), require('lodash/omit'), require('lodash/isObject'), require('fast-uri'), require('lodash/isString'), require('lodash/union'), require('lodash/isNumber'), require('lodash/reduce'), require('lodash/isNil'), require('lodash/pick'), require('lodash/cloneDeep'), require('lodash/setWith'), require('lodash/keys'), require('lodash/pickBy'), require('lodash/difference'), require('lodash/uniqueId'), require('react'), require('react-is'), require('react/jsx-runtime'), require('lodash/toPath'), require('lodash/forEach')) :
|
|
3
|
+
typeof define === 'function' && define.amd ? define(['exports', 'lodash/isPlainObject', 'lodash/isEqualWith', 'lodash/get', 'lodash/has', 'lodash/isEqual', 'lodash/set', 'lodash/times', 'lodash/transform', 'lodash/merge', 'lodash/flattenDeep', 'lodash/uniq', 'lodash/isEmpty', '@x0k/json-schema-merge', '@x0k/json-schema-merge/lib/array', 'jsonpointer', 'lodash/omit', 'lodash/isObject', 'fast-uri', 'lodash/isString', 'lodash/union', 'lodash/isNumber', 'lodash/reduce', 'lodash/isNil', 'lodash/pick', 'lodash/cloneDeep', 'lodash/setWith', 'lodash/keys', 'lodash/pickBy', 'lodash/difference', 'lodash/uniqueId', 'react', 'react-is', 'react/jsx-runtime', 'lodash/toPath', 'lodash/forEach'], factory) :
|
|
4
|
+
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global["@rjsf/utils"] = {}, global.isPlainObject2, global.isEqualWith, global.get16, global.has5, global.isEqual2, global.set, global.times, global.transform, global.merge, global.flattenDeep, global.uniq, global.isEmpty4, global.jsonSchemaMerge, global.array, global.jsonpointer, global.omit, global.isObject2, global.UriResolver, global.isString, global.union, global.isNumber, global.reduce, global.isNil, global.pick, global.cloneDeep, global.setWith, global.keys, global.pickBy, global.difference, global.uniqueId, global.react, global.ReactIs, global.jsxRuntime, global.toPath, global.forEach));
|
|
5
|
+
})(this, (function (exports, isPlainObject2, isEqualWith, get16, has5, isEqual2, set, times, transform, merge, flattenDeep, uniq, isEmpty4, jsonSchemaMerge, array, jsonpointer, omit, isObject2, UriResolver, isString, union, isNumber, reduce, isNil, pick, cloneDeep, setWith, keys, pickBy, difference, uniqueId, react, ReactIs, jsxRuntime, toPath, forEach) { 'use strict';
|
|
6
6
|
|
|
7
7
|
// src/isObject.ts
|
|
8
8
|
function isObject(thing) {
|
|
@@ -176,7 +176,7 @@
|
|
|
176
176
|
return void 0;
|
|
177
177
|
}
|
|
178
178
|
function makeAllReferencesAbsolute(schema, baseURI) {
|
|
179
|
-
const currentURI =
|
|
179
|
+
const currentURI = get16(schema, ID_KEY, baseURI);
|
|
180
180
|
if (REF_KEY in schema) {
|
|
181
181
|
schema = { ...schema, [REF_KEY]: UriResolver.resolve(currentURI, schema[REF_KEY]) };
|
|
182
182
|
}
|
|
@@ -197,7 +197,7 @@
|
|
|
197
197
|
const remaining = omit(object, [key]);
|
|
198
198
|
return [remaining, value];
|
|
199
199
|
}
|
|
200
|
-
function findSchemaDefinitionRecursive($ref, rootSchema = {}, recurseList = [], baseURI =
|
|
200
|
+
function findSchemaDefinitionRecursive($ref, rootSchema = {}, recurseList = [], baseURI = get16(rootSchema, [ID_KEY])) {
|
|
201
201
|
const ref = $ref || "";
|
|
202
202
|
let current = void 0;
|
|
203
203
|
if (ref.startsWith("#")) {
|
|
@@ -247,13 +247,13 @@
|
|
|
247
247
|
}
|
|
248
248
|
return current;
|
|
249
249
|
}
|
|
250
|
-
function findSchemaDefinition($ref, rootSchema = {}, baseURI =
|
|
250
|
+
function findSchemaDefinition($ref, rootSchema = {}, baseURI = get16(rootSchema, [ID_KEY])) {
|
|
251
251
|
const recurseList = [];
|
|
252
252
|
return findSchemaDefinitionRecursive($ref, rootSchema, recurseList, baseURI);
|
|
253
253
|
}
|
|
254
254
|
function getDiscriminatorFieldFromSchema(schema) {
|
|
255
255
|
let discriminator;
|
|
256
|
-
const maybeString =
|
|
256
|
+
const maybeString = get16(schema, DISCRIMINATOR_PATH);
|
|
257
257
|
if (isString(maybeString)) {
|
|
258
258
|
discriminator = maybeString;
|
|
259
259
|
} else if (maybeString !== void 0) {
|
|
@@ -324,13 +324,13 @@
|
|
|
324
324
|
}
|
|
325
325
|
function getOptionMatchingSimpleDiscriminator(formData, options, discriminatorField) {
|
|
326
326
|
if (formData && discriminatorField) {
|
|
327
|
-
const value =
|
|
327
|
+
const value = get16(formData, discriminatorField);
|
|
328
328
|
if (value === void 0) {
|
|
329
329
|
return;
|
|
330
330
|
}
|
|
331
331
|
for (let i = 0; i < options.length; i++) {
|
|
332
332
|
const option = options[i];
|
|
333
|
-
const discriminator =
|
|
333
|
+
const discriminator = get16(option, [PROPERTIES_KEY, discriminatorField], {});
|
|
334
334
|
if (discriminator.type === "object" || discriminator.type === "array") {
|
|
335
335
|
continue;
|
|
336
336
|
}
|
|
@@ -357,8 +357,8 @@
|
|
|
357
357
|
for (let i = 0; i < options.length; i++) {
|
|
358
358
|
const option = options[i];
|
|
359
359
|
if (discriminatorField && has5(option, [PROPERTIES_KEY, discriminatorField])) {
|
|
360
|
-
const value =
|
|
361
|
-
const discriminator =
|
|
360
|
+
const value = get16(formData, discriminatorField);
|
|
361
|
+
const discriminator = get16(option, [PROPERTIES_KEY, discriminatorField], {});
|
|
362
362
|
if (validator.isValid(discriminator, value, rootSchema)) {
|
|
363
363
|
return i;
|
|
364
364
|
}
|
|
@@ -391,6 +391,8 @@
|
|
|
391
391
|
}
|
|
392
392
|
return 0;
|
|
393
393
|
}
|
|
394
|
+
|
|
395
|
+
// src/schema/retrieveSchema.ts
|
|
394
396
|
function retrieveSchema(validator, schema, rootSchema = {}, rawFormData, experimental_customMergeAllOf, resolveAnyOfOrOneOfRefs = false) {
|
|
395
397
|
return retrieveSchemaInternal(
|
|
396
398
|
validator,
|
|
@@ -636,7 +638,7 @@
|
|
|
636
638
|
validator,
|
|
637
639
|
{ [ALL_OF_KEY]: Object.values(matchingProperties) },
|
|
638
640
|
rootSchema,
|
|
639
|
-
|
|
641
|
+
get16(formData, [key]),
|
|
640
642
|
experimental_customMergeAllOf
|
|
641
643
|
);
|
|
642
644
|
set(schema.properties, [key, ADDITIONAL_PROPERTY_FLAG], true);
|
|
@@ -649,7 +651,7 @@
|
|
|
649
651
|
if (REF_KEY in schema.additionalProperties) {
|
|
650
652
|
additionalProperties = retrieveSchema(
|
|
651
653
|
validator,
|
|
652
|
-
{ [REF_KEY]:
|
|
654
|
+
{ [REF_KEY]: get16(schema.additionalProperties, [REF_KEY]) },
|
|
653
655
|
rootSchema,
|
|
654
656
|
formData,
|
|
655
657
|
experimental_customMergeAllOf
|
|
@@ -662,10 +664,10 @@
|
|
|
662
664
|
...schema.additionalProperties
|
|
663
665
|
};
|
|
664
666
|
} else {
|
|
665
|
-
additionalProperties = { type: guessType(
|
|
667
|
+
additionalProperties = { type: guessType(get16(formData, [key])) };
|
|
666
668
|
}
|
|
667
669
|
} else {
|
|
668
|
-
additionalProperties = { type: guessType(
|
|
670
|
+
additionalProperties = { type: guessType(get16(formData, [key])) };
|
|
669
671
|
}
|
|
670
672
|
schema.properties[key] = additionalProperties;
|
|
671
673
|
set(schema.properties, [key, ADDITIONAL_PROPERTY_FLAG], true);
|
|
@@ -676,6 +678,15 @@
|
|
|
676
678
|
});
|
|
677
679
|
return schema;
|
|
678
680
|
}
|
|
681
|
+
var { compareSchemaDefinitions, compareSchemaValues } = jsonSchemaMerge.createComparator();
|
|
682
|
+
var { mergeArrayOfSchemaDefinitions } = jsonSchemaMerge.createMerger({
|
|
683
|
+
intersectJson: array.createIntersector(compareSchemaValues),
|
|
684
|
+
deduplicateJsonSchemaDef: array.createDeduplicator(compareSchemaDefinitions)
|
|
685
|
+
});
|
|
686
|
+
var shallowAllOfMerge = jsonSchemaMerge.createShallowAllOfMerge(mergeArrayOfSchemaDefinitions);
|
|
687
|
+
function mergeAllOf(schema) {
|
|
688
|
+
return shallowAllOfMerge(schema);
|
|
689
|
+
}
|
|
679
690
|
function retrieveSchemaInternal(validator, schema, rootSchema, rawFormData, expandAllBranches = false, recurseList = [], experimental_customMergeAllOf, resolveAnyOfOrOneOfRefs) {
|
|
680
691
|
if (!isObject(schema)) {
|
|
681
692
|
return [{}];
|
|
@@ -721,12 +732,7 @@
|
|
|
721
732
|
if (withContainsSchemas.length) {
|
|
722
733
|
resolvedSchema = { ...resolvedSchema, allOf: withoutContainsSchemas };
|
|
723
734
|
}
|
|
724
|
-
resolvedSchema = experimental_customMergeAllOf ? experimental_customMergeAllOf(resolvedSchema) : mergeAllOf(resolvedSchema
|
|
725
|
-
deep: false,
|
|
726
|
-
resolvers: {
|
|
727
|
-
$defs: mergeAllOf.options.resolvers.definitions
|
|
728
|
-
}
|
|
729
|
-
});
|
|
735
|
+
resolvedSchema = experimental_customMergeAllOf ? experimental_customMergeAllOf(resolvedSchema) : mergeAllOf(resolvedSchema);
|
|
730
736
|
if (withContainsSchemas.length) {
|
|
731
737
|
resolvedSchema.allOf = withContainsSchemas;
|
|
732
738
|
}
|
|
@@ -745,7 +751,7 @@
|
|
|
745
751
|
validator,
|
|
746
752
|
{ allOf: [schema2.properties[key], ...Object.values(matchingProperties)] },
|
|
747
753
|
rootSchema,
|
|
748
|
-
|
|
754
|
+
get16(rawFormData, [key]),
|
|
749
755
|
experimental_customMergeAllOf
|
|
750
756
|
);
|
|
751
757
|
}
|
|
@@ -817,7 +823,7 @@
|
|
|
817
823
|
function processDependencies(validator, dependencies, resolvedSchema, rootSchema, expandAllBranches, recurseList, formData, experimental_customMergeAllOf) {
|
|
818
824
|
let schemas = [resolvedSchema];
|
|
819
825
|
for (const dependencyKey in dependencies) {
|
|
820
|
-
if (!expandAllBranches &&
|
|
826
|
+
if (!expandAllBranches && get16(formData, [dependencyKey]) === void 0) {
|
|
821
827
|
continue;
|
|
822
828
|
}
|
|
823
829
|
if (resolvedSchema.properties && !(dependencyKey in resolvedSchema.properties)) {
|
|
@@ -948,11 +954,11 @@
|
|
|
948
954
|
const xxxOfs = schema[xxx].map(
|
|
949
955
|
(xxxOf) => retrieveSchema(validator, xxxOf, rootSchema, formData, experimental_customMergeAllOf)
|
|
950
956
|
);
|
|
951
|
-
const data =
|
|
957
|
+
const data = get16(formData, selectorField);
|
|
952
958
|
if (data !== void 0) {
|
|
953
959
|
return xxxOfs.find((xxx2) => {
|
|
954
960
|
return isEqual2(
|
|
955
|
-
|
|
961
|
+
get16(xxx2, [PROPERTIES_KEY, selectorField, DEFAULT_KEY], get16(xxx2, [PROPERTIES_KEY, selectorField, CONST_KEY])),
|
|
956
962
|
data
|
|
957
963
|
);
|
|
958
964
|
});
|
|
@@ -971,7 +977,7 @@
|
|
|
971
977
|
const pathList = Array.isArray(path) ? path : path.split(".");
|
|
972
978
|
const [part, ...nestedPath] = pathList;
|
|
973
979
|
if (part && has5(fieldSchema, part)) {
|
|
974
|
-
fieldSchema =
|
|
980
|
+
fieldSchema = get16(fieldSchema, part);
|
|
975
981
|
return getFromSchemaInternal(
|
|
976
982
|
validator,
|
|
977
983
|
rootSchema,
|
|
@@ -1013,7 +1019,7 @@
|
|
|
1013
1019
|
parentField,
|
|
1014
1020
|
fieldName,
|
|
1015
1021
|
ONE_OF_KEY,
|
|
1016
|
-
|
|
1022
|
+
get16(formData, subPath),
|
|
1017
1023
|
experimental_customMergeAllOf
|
|
1018
1024
|
);
|
|
1019
1025
|
} else if (has5(parentField, ANY_OF_KEY)) {
|
|
@@ -1023,7 +1029,7 @@
|
|
|
1023
1029
|
parentField,
|
|
1024
1030
|
fieldName,
|
|
1025
1031
|
ANY_OF_KEY,
|
|
1026
|
-
|
|
1032
|
+
get16(formData, subPath),
|
|
1027
1033
|
experimental_customMergeAllOf
|
|
1028
1034
|
);
|
|
1029
1035
|
}
|
|
@@ -1091,7 +1097,7 @@
|
|
|
1091
1097
|
totalScore += reduce(
|
|
1092
1098
|
schema.properties,
|
|
1093
1099
|
(score, value, key) => {
|
|
1094
|
-
const formValue =
|
|
1100
|
+
const formValue = get16(formData, key);
|
|
1095
1101
|
if (typeof value === "boolean") {
|
|
1096
1102
|
return score;
|
|
1097
1103
|
}
|
|
@@ -1118,7 +1124,7 @@
|
|
|
1118
1124
|
validator,
|
|
1119
1125
|
rootSchema,
|
|
1120
1126
|
formValue,
|
|
1121
|
-
|
|
1127
|
+
get16(value, key2),
|
|
1122
1128
|
-1,
|
|
1123
1129
|
discriminator,
|
|
1124
1130
|
experimental_customMergeAllOf
|
|
@@ -1220,22 +1226,22 @@
|
|
|
1220
1226
|
if (isObject(formData)) {
|
|
1221
1227
|
const acc = Object.assign({}, defaults);
|
|
1222
1228
|
return Object.keys(formData).reduce((acc2, key) => {
|
|
1223
|
-
const keyValue =
|
|
1229
|
+
const keyValue = get16(formData, key);
|
|
1224
1230
|
const keyExistsInDefaults = isObject(defaults) && key in defaults;
|
|
1225
1231
|
const keyExistsInFormData = key in formData;
|
|
1226
|
-
const keyDefault =
|
|
1232
|
+
const keyDefault = get16(defaults, key) ?? {};
|
|
1227
1233
|
const defaultValueIsNestedObject = keyExistsInDefaults && Object.entries(keyDefault).some(([, v]) => isObject(v));
|
|
1228
|
-
const keyDefaultIsObject = keyExistsInDefaults && isObject(
|
|
1234
|
+
const keyDefaultIsObject = keyExistsInDefaults && isObject(get16(defaults, key));
|
|
1229
1235
|
const keyHasFormDataObject = keyExistsInFormData && isObject(keyValue);
|
|
1230
1236
|
if (keyDefaultIsObject && keyHasFormDataObject && !defaultValueIsNestedObject) {
|
|
1231
1237
|
acc2[key] = {
|
|
1232
|
-
...
|
|
1238
|
+
...get16(defaults, key),
|
|
1233
1239
|
...keyValue
|
|
1234
1240
|
};
|
|
1235
1241
|
return acc2;
|
|
1236
1242
|
}
|
|
1237
1243
|
acc2[key] = mergeDefaultsWithFormData(
|
|
1238
|
-
|
|
1244
|
+
get16(defaults, key),
|
|
1239
1245
|
keyValue,
|
|
1240
1246
|
mergeExtraArrayDefaults,
|
|
1241
1247
|
defaultSupercedesUndefined,
|
|
@@ -1354,8 +1360,8 @@
|
|
|
1354
1360
|
let value;
|
|
1355
1361
|
let label = title;
|
|
1356
1362
|
if (selectorField) {
|
|
1357
|
-
const innerSchema =
|
|
1358
|
-
value =
|
|
1363
|
+
const innerSchema = get16(aSchema, [PROPERTIES_KEY, selectorField], {});
|
|
1364
|
+
value = get16(innerSchema, DEFAULT_KEY, get16(innerSchema, CONST_KEY));
|
|
1359
1365
|
label = label || innerSchema?.title || aSchema.title || String(value);
|
|
1360
1366
|
} else {
|
|
1361
1367
|
value = toConstant(aSchema);
|
|
@@ -1442,7 +1448,7 @@
|
|
|
1442
1448
|
let updatedRecurseList = _recurseList;
|
|
1443
1449
|
if (schema[CONST_KEY] !== void 0 && experimental_defaultFormStateBehavior?.constAsDefaults !== "never" && !constIsAjvDataReference(schema)) {
|
|
1444
1450
|
defaults = schema[CONST_KEY];
|
|
1445
|
-
} else if (isObject(defaults) && isObject(schema.default)) {
|
|
1451
|
+
} else if (isObject(defaults) && isObject(schema.default) && !schema[ANY_OF_KEY] && !schema[ONE_OF_KEY] && !schema[REF_KEY]) {
|
|
1446
1452
|
defaults = mergeObjects(defaults, schema.default);
|
|
1447
1453
|
} else if (DEFAULT_KEY in schema && !schema[ANY_OF_KEY] && !schema[ONE_OF_KEY] && !schema[REF_KEY]) {
|
|
1448
1454
|
defaults = schema.default;
|
|
@@ -1452,7 +1458,8 @@
|
|
|
1452
1458
|
updatedRecurseList = _recurseList.concat(refName);
|
|
1453
1459
|
schemaToCompute = findSchemaDefinition(refName, rootSchema);
|
|
1454
1460
|
}
|
|
1455
|
-
|
|
1461
|
+
const hasNoExistingData = rawFormData === void 0 || isObject(rawFormData) && isEmpty4(rawFormData);
|
|
1462
|
+
if (schemaToCompute && !defaults && hasNoExistingData) {
|
|
1456
1463
|
defaults = schema.default;
|
|
1457
1464
|
}
|
|
1458
1465
|
if (shouldMergeDefaultsIntoFormData && schemaToCompute && !isObject(rawFormData)) {
|
|
@@ -1596,11 +1603,12 @@
|
|
|
1596
1603
|
{
|
|
1597
1604
|
const formData = isObject(rawFormData) ? rawFormData : {};
|
|
1598
1605
|
const schema = rawSchema;
|
|
1599
|
-
const
|
|
1606
|
+
const shouldRetrieveSchema = experimental_defaultFormStateBehavior?.allOf === "populateDefaults" && ALL_OF_KEY in schema || experimental_defaultFormStateBehavior?.emptyObjectFields !== "skipEmptyDefaults" && IF_KEY in schema;
|
|
1607
|
+
const retrievedSchema = shouldRetrieveSchema ? retrieveSchema(validator, schema, rootSchema, formData, experimental_customMergeAllOf) : schema;
|
|
1600
1608
|
const parentConst = retrievedSchema[CONST_KEY];
|
|
1601
1609
|
const objectDefaults = Object.keys(retrievedSchema.properties || {}).reduce(
|
|
1602
1610
|
(acc, key) => {
|
|
1603
|
-
const propertySchema =
|
|
1611
|
+
const propertySchema = get16(retrievedSchema, [PROPERTIES_KEY, key], {});
|
|
1604
1612
|
const hasParentConst = isObject(parentConst) && parentConst[key] !== void 0;
|
|
1605
1613
|
const hasConst = (isObject(propertySchema) && CONST_KEY in propertySchema || hasParentConst) && experimental_defaultFormStateBehavior?.constAsDefaults !== "never" && !constIsAjvDataReference(propertySchema);
|
|
1606
1614
|
const computedDefault = computeDefaults(validator, propertySchema, {
|
|
@@ -1609,8 +1617,8 @@
|
|
|
1609
1617
|
experimental_defaultFormStateBehavior,
|
|
1610
1618
|
experimental_customMergeAllOf,
|
|
1611
1619
|
includeUndefinedValues: includeUndefinedValues === true,
|
|
1612
|
-
parentDefaults:
|
|
1613
|
-
rawFormData:
|
|
1620
|
+
parentDefaults: get16(defaults, [key]),
|
|
1621
|
+
rawFormData: get16(formData, [key]),
|
|
1614
1622
|
required: retrievedSchema.required?.includes(key),
|
|
1615
1623
|
shouldMergeDefaultsIntoFormData,
|
|
1616
1624
|
initialDefaultsGenerated
|
|
@@ -1648,8 +1656,8 @@
|
|
|
1648
1656
|
experimental_defaultFormStateBehavior,
|
|
1649
1657
|
experimental_customMergeAllOf,
|
|
1650
1658
|
includeUndefinedValues: includeUndefinedValues === true,
|
|
1651
|
-
parentDefaults:
|
|
1652
|
-
rawFormData:
|
|
1659
|
+
parentDefaults: get16(defaults, [key]),
|
|
1660
|
+
rawFormData: get16(formData, [key]),
|
|
1653
1661
|
required: retrievedSchema.required?.includes(key),
|
|
1654
1662
|
shouldMergeDefaultsIntoFormData,
|
|
1655
1663
|
initialDefaultsGenerated
|
|
@@ -1690,12 +1698,14 @@
|
|
|
1690
1698
|
if (Array.isArray(defaults)) {
|
|
1691
1699
|
defaults = defaults.map((item, idx) => {
|
|
1692
1700
|
const schemaItem = getInnerSchemaForArrayItem(schema, 2 /* Fallback */, idx);
|
|
1701
|
+
const itemFormData = Array.isArray(rawFormData) ? rawFormData[idx] : void 0;
|
|
1693
1702
|
return computeDefaults(validator, schemaItem, {
|
|
1694
1703
|
rootSchema,
|
|
1695
1704
|
_recurseList,
|
|
1696
1705
|
experimental_defaultFormStateBehavior,
|
|
1697
1706
|
experimental_customMergeAllOf,
|
|
1698
1707
|
parentDefaults: item,
|
|
1708
|
+
rawFormData: itemFormData,
|
|
1699
1709
|
required,
|
|
1700
1710
|
shouldMergeDefaultsIntoFormData,
|
|
1701
1711
|
initialDefaultsGenerated
|
|
@@ -1714,7 +1724,7 @@
|
|
|
1714
1724
|
experimental_defaultFormStateBehavior,
|
|
1715
1725
|
experimental_customMergeAllOf,
|
|
1716
1726
|
rawFormData: item,
|
|
1717
|
-
parentDefaults:
|
|
1727
|
+
parentDefaults: get16(defaults, [idx]),
|
|
1718
1728
|
required,
|
|
1719
1729
|
shouldMergeDefaultsIntoFormData,
|
|
1720
1730
|
initialDefaultsGenerated
|
|
@@ -1840,7 +1850,7 @@
|
|
|
1840
1850
|
let displayLabel = Boolean(label);
|
|
1841
1851
|
if (displayLabel) {
|
|
1842
1852
|
const schemaType = getSchemaType(schema);
|
|
1843
|
-
const addedByAdditionalProperty =
|
|
1853
|
+
const addedByAdditionalProperty = get16(schema, ADDITIONAL_PROPERTY_FLAG, false);
|
|
1844
1854
|
if (schemaType === "array") {
|
|
1845
1855
|
displayLabel = addedByAdditionalProperty || isMultiSelect(validator, schema, rootSchema, experimental_customMergeAllOf) || isFilesArray(validator, schema, uiSchema, rootSchema, experimental_customMergeAllOf) || isCustomWidget(uiSchema);
|
|
1846
1856
|
}
|
|
@@ -1856,25 +1866,183 @@
|
|
|
1856
1866
|
}
|
|
1857
1867
|
return displayLabel;
|
|
1858
1868
|
}
|
|
1869
|
+
function toPathSchemaInternal(validator, schema, name, rootSchema, formData, _recurseList = [], experimental_customMergeAllOf) {
|
|
1870
|
+
if (REF_KEY in schema || DEPENDENCIES_KEY in schema || ALL_OF_KEY in schema || IF_KEY in schema) {
|
|
1871
|
+
const _schema = retrieveSchema(validator, schema, rootSchema, formData, experimental_customMergeAllOf);
|
|
1872
|
+
const sameSchemaIndex = _recurseList.findIndex((item) => deepEquals(item, _schema));
|
|
1873
|
+
if (sameSchemaIndex === -1) {
|
|
1874
|
+
return toPathSchemaInternal(
|
|
1875
|
+
validator,
|
|
1876
|
+
_schema,
|
|
1877
|
+
name,
|
|
1878
|
+
rootSchema,
|
|
1879
|
+
formData,
|
|
1880
|
+
_recurseList.concat(_schema),
|
|
1881
|
+
experimental_customMergeAllOf
|
|
1882
|
+
);
|
|
1883
|
+
}
|
|
1884
|
+
}
|
|
1885
|
+
let pathSchema = {
|
|
1886
|
+
[NAME_KEY]: name.replace(/^\./, "")
|
|
1887
|
+
};
|
|
1888
|
+
if (ONE_OF_KEY in schema || ANY_OF_KEY in schema) {
|
|
1889
|
+
const xxxOf = ONE_OF_KEY in schema ? schema.oneOf : schema.anyOf;
|
|
1890
|
+
const discriminator = getDiscriminatorFieldFromSchema(schema);
|
|
1891
|
+
const index = getClosestMatchingOption(
|
|
1892
|
+
validator,
|
|
1893
|
+
rootSchema,
|
|
1894
|
+
formData,
|
|
1895
|
+
xxxOf,
|
|
1896
|
+
0,
|
|
1897
|
+
discriminator,
|
|
1898
|
+
experimental_customMergeAllOf
|
|
1899
|
+
);
|
|
1900
|
+
const _schema = xxxOf[index];
|
|
1901
|
+
pathSchema = {
|
|
1902
|
+
...pathSchema,
|
|
1903
|
+
...toPathSchemaInternal(
|
|
1904
|
+
validator,
|
|
1905
|
+
_schema,
|
|
1906
|
+
name,
|
|
1907
|
+
rootSchema,
|
|
1908
|
+
formData,
|
|
1909
|
+
_recurseList,
|
|
1910
|
+
experimental_customMergeAllOf
|
|
1911
|
+
)
|
|
1912
|
+
};
|
|
1913
|
+
}
|
|
1914
|
+
if (ADDITIONAL_PROPERTIES_KEY in schema && schema[ADDITIONAL_PROPERTIES_KEY] !== false) {
|
|
1915
|
+
set(pathSchema, RJSF_ADDITIONAL_PROPERTIES_FLAG, true);
|
|
1916
|
+
}
|
|
1917
|
+
if (ITEMS_KEY in schema && Array.isArray(formData)) {
|
|
1918
|
+
const { items: schemaItems, additionalItems: schemaAdditionalItems } = schema;
|
|
1919
|
+
if (Array.isArray(schemaItems)) {
|
|
1920
|
+
formData.forEach((element, i) => {
|
|
1921
|
+
if (schemaItems[i]) {
|
|
1922
|
+
pathSchema[i] = toPathSchemaInternal(
|
|
1923
|
+
validator,
|
|
1924
|
+
schemaItems[i],
|
|
1925
|
+
`${name}.${i}`,
|
|
1926
|
+
rootSchema,
|
|
1927
|
+
element,
|
|
1928
|
+
_recurseList,
|
|
1929
|
+
experimental_customMergeAllOf
|
|
1930
|
+
);
|
|
1931
|
+
} else if (schemaAdditionalItems) {
|
|
1932
|
+
pathSchema[i] = toPathSchemaInternal(
|
|
1933
|
+
validator,
|
|
1934
|
+
schemaAdditionalItems,
|
|
1935
|
+
`${name}.${i}`,
|
|
1936
|
+
rootSchema,
|
|
1937
|
+
element,
|
|
1938
|
+
_recurseList,
|
|
1939
|
+
experimental_customMergeAllOf
|
|
1940
|
+
);
|
|
1941
|
+
} else {
|
|
1942
|
+
console.warn(`Unable to generate path schema for "${name}.${i}". No schema defined for it`);
|
|
1943
|
+
}
|
|
1944
|
+
});
|
|
1945
|
+
} else {
|
|
1946
|
+
formData.forEach((element, i) => {
|
|
1947
|
+
pathSchema[i] = toPathSchemaInternal(
|
|
1948
|
+
validator,
|
|
1949
|
+
schemaItems,
|
|
1950
|
+
`${name}.${i}`,
|
|
1951
|
+
rootSchema,
|
|
1952
|
+
element,
|
|
1953
|
+
_recurseList,
|
|
1954
|
+
experimental_customMergeAllOf
|
|
1955
|
+
);
|
|
1956
|
+
});
|
|
1957
|
+
}
|
|
1958
|
+
} else if (PROPERTIES_KEY in schema) {
|
|
1959
|
+
for (const property in schema.properties) {
|
|
1960
|
+
const field = get16(schema, [PROPERTIES_KEY, property], {});
|
|
1961
|
+
pathSchema[property] = toPathSchemaInternal(
|
|
1962
|
+
validator,
|
|
1963
|
+
field,
|
|
1964
|
+
`${name}.${property}`,
|
|
1965
|
+
rootSchema,
|
|
1966
|
+
// It's possible that formData is not an object -- this can happen if an
|
|
1967
|
+
// array item has just been added, but not populated with data yet
|
|
1968
|
+
get16(formData, [property]),
|
|
1969
|
+
_recurseList,
|
|
1970
|
+
experimental_customMergeAllOf
|
|
1971
|
+
);
|
|
1972
|
+
}
|
|
1973
|
+
}
|
|
1974
|
+
return pathSchema;
|
|
1975
|
+
}
|
|
1976
|
+
function toPathSchema(validator, schema, name = "", rootSchema, formData, experimental_customMergeAllOf) {
|
|
1977
|
+
return toPathSchemaInternal(validator, schema, name, rootSchema, formData, void 0, experimental_customMergeAllOf);
|
|
1978
|
+
}
|
|
1979
|
+
|
|
1980
|
+
// src/schema/omitExtraData.ts
|
|
1981
|
+
function getUsedFormData(formData, fields) {
|
|
1982
|
+
if (fields.length === 0 && typeof formData !== "object") {
|
|
1983
|
+
return formData;
|
|
1984
|
+
}
|
|
1985
|
+
const data = pick(formData, fields);
|
|
1986
|
+
if (Array.isArray(formData)) {
|
|
1987
|
+
return Object.keys(data).map((key) => data[key]);
|
|
1988
|
+
}
|
|
1989
|
+
return data;
|
|
1990
|
+
}
|
|
1991
|
+
function getFieldNames(pathSchema, formData) {
|
|
1992
|
+
const formValueHasData = (value, isLeaf) => typeof value !== "object" || isEmpty4(value) || isLeaf && !isEmpty4(value);
|
|
1993
|
+
const getAllPaths = (_obj, acc = [], paths = [[]]) => {
|
|
1994
|
+
const objKeys = Object.keys(_obj);
|
|
1995
|
+
objKeys.forEach((key) => {
|
|
1996
|
+
const data = _obj[key];
|
|
1997
|
+
if (typeof data === "object") {
|
|
1998
|
+
const newPaths = paths.map((path) => [...path, key]);
|
|
1999
|
+
if (data[RJSF_ADDITIONAL_PROPERTIES_FLAG] && data[NAME_KEY] !== "") {
|
|
2000
|
+
acc.push(data[NAME_KEY]);
|
|
2001
|
+
} else {
|
|
2002
|
+
getAllPaths(data, acc, newPaths);
|
|
2003
|
+
}
|
|
2004
|
+
} else if (key === NAME_KEY && data !== "") {
|
|
2005
|
+
paths.forEach((path) => {
|
|
2006
|
+
const formValue = get16(formData, path);
|
|
2007
|
+
const isLeaf = objKeys.length === 1;
|
|
2008
|
+
if (formValueHasData(formValue, isLeaf) || Array.isArray(formValue) && formValue.every((val) => formValueHasData(val, isLeaf))) {
|
|
2009
|
+
acc.push(path);
|
|
2010
|
+
}
|
|
2011
|
+
});
|
|
2012
|
+
}
|
|
2013
|
+
});
|
|
2014
|
+
return acc;
|
|
2015
|
+
};
|
|
2016
|
+
return getAllPaths(pathSchema);
|
|
2017
|
+
}
|
|
2018
|
+
function omitExtraData(validator, schema, rootSchema = {}, formData) {
|
|
2019
|
+
const retrievedSchema = retrieveSchema(validator, schema, rootSchema, formData);
|
|
2020
|
+
const pathSchema = toPathSchema(validator, retrievedSchema, "", rootSchema, formData);
|
|
2021
|
+
const fieldNames = getFieldNames(pathSchema, formData);
|
|
2022
|
+
const lodashFieldNames = fieldNames.map(
|
|
2023
|
+
(fieldPaths) => Array.isArray(fieldPaths) ? fieldPaths.join(".") : fieldPaths
|
|
2024
|
+
);
|
|
2025
|
+
return getUsedFormData(formData, lodashFieldNames);
|
|
2026
|
+
}
|
|
1859
2027
|
var NO_VALUE = Symbol("no Value");
|
|
1860
2028
|
function sanitizeDataForNewSchema(validator, rootSchema, newSchema, oldSchema, data = {}, experimental_customMergeAllOf) {
|
|
1861
2029
|
let newFormData;
|
|
1862
2030
|
if (has5(newSchema, PROPERTIES_KEY)) {
|
|
1863
2031
|
const removeOldSchemaData = {};
|
|
1864
2032
|
if (has5(oldSchema, PROPERTIES_KEY)) {
|
|
1865
|
-
const properties =
|
|
2033
|
+
const properties = get16(oldSchema, PROPERTIES_KEY, {});
|
|
1866
2034
|
Object.keys(properties).forEach((key) => {
|
|
1867
2035
|
if (has5(data, key)) {
|
|
1868
2036
|
removeOldSchemaData[key] = void 0;
|
|
1869
2037
|
}
|
|
1870
2038
|
});
|
|
1871
2039
|
}
|
|
1872
|
-
const keys2 = Object.keys(
|
|
2040
|
+
const keys2 = Object.keys(get16(newSchema, PROPERTIES_KEY, {}));
|
|
1873
2041
|
const nestedData = {};
|
|
1874
2042
|
keys2.forEach((key) => {
|
|
1875
|
-
const formValue =
|
|
1876
|
-
let oldKeyedSchema =
|
|
1877
|
-
let newKeyedSchema =
|
|
2043
|
+
const formValue = get16(data, key);
|
|
2044
|
+
let oldKeyedSchema = get16(oldSchema, [PROPERTIES_KEY, key], {});
|
|
2045
|
+
let newKeyedSchema = get16(newSchema, [PROPERTIES_KEY, key], {});
|
|
1878
2046
|
if (has5(oldKeyedSchema, REF_KEY)) {
|
|
1879
2047
|
oldKeyedSchema = retrieveSchema(
|
|
1880
2048
|
validator,
|
|
@@ -1893,8 +2061,8 @@
|
|
|
1893
2061
|
experimental_customMergeAllOf
|
|
1894
2062
|
);
|
|
1895
2063
|
}
|
|
1896
|
-
const oldSchemaTypeForKey =
|
|
1897
|
-
const newSchemaTypeForKey =
|
|
2064
|
+
const oldSchemaTypeForKey = get16(oldKeyedSchema, "type");
|
|
2065
|
+
const newSchemaTypeForKey = get16(newKeyedSchema, "type");
|
|
1898
2066
|
if (!oldSchemaTypeForKey || oldSchemaTypeForKey === newSchemaTypeForKey) {
|
|
1899
2067
|
if (has5(removeOldSchemaData, key)) {
|
|
1900
2068
|
delete removeOldSchemaData[key];
|
|
@@ -1912,17 +2080,17 @@
|
|
|
1912
2080
|
nestedData[key] = itemData;
|
|
1913
2081
|
}
|
|
1914
2082
|
} else {
|
|
1915
|
-
const newOptionDefault =
|
|
1916
|
-
const oldOptionDefault =
|
|
2083
|
+
const newOptionDefault = get16(newKeyedSchema, "default", NO_VALUE);
|
|
2084
|
+
const oldOptionDefault = get16(oldKeyedSchema, "default", NO_VALUE);
|
|
1917
2085
|
if (newOptionDefault !== NO_VALUE && newOptionDefault !== formValue) {
|
|
1918
2086
|
if (oldOptionDefault === formValue) {
|
|
1919
2087
|
removeOldSchemaData[key] = newOptionDefault;
|
|
1920
|
-
} else if (
|
|
2088
|
+
} else if (get16(newKeyedSchema, "readOnly") === true) {
|
|
1921
2089
|
removeOldSchemaData[key] = void 0;
|
|
1922
2090
|
}
|
|
1923
2091
|
}
|
|
1924
|
-
const newOptionConst =
|
|
1925
|
-
const oldOptionConst =
|
|
2092
|
+
const newOptionConst = get16(newKeyedSchema, "const", NO_VALUE);
|
|
2093
|
+
const oldOptionConst = get16(oldKeyedSchema, "const", NO_VALUE);
|
|
1926
2094
|
if (newOptionConst !== NO_VALUE && newOptionConst !== formValue) {
|
|
1927
2095
|
removeOldSchemaData[key] = oldOptionConst === formValue ? newOptionConst : void 0;
|
|
1928
2096
|
}
|
|
@@ -1934,9 +2102,9 @@
|
|
|
1934
2102
|
...removeOldSchemaData,
|
|
1935
2103
|
...nestedData
|
|
1936
2104
|
};
|
|
1937
|
-
} else if (
|
|
1938
|
-
let oldSchemaItems =
|
|
1939
|
-
let newSchemaItems =
|
|
2105
|
+
} else if (get16(oldSchema, "type") === "array" && get16(newSchema, "type") === "array" && Array.isArray(data)) {
|
|
2106
|
+
let oldSchemaItems = get16(oldSchema, "items");
|
|
2107
|
+
let newSchemaItems = get16(newSchema, "items");
|
|
1940
2108
|
if (typeof oldSchemaItems === "object" && typeof newSchemaItems === "object" && !Array.isArray(oldSchemaItems) && !Array.isArray(newSchemaItems)) {
|
|
1941
2109
|
if (has5(oldSchemaItems, REF_KEY)) {
|
|
1942
2110
|
oldSchemaItems = retrieveSchema(
|
|
@@ -1956,10 +2124,10 @@
|
|
|
1956
2124
|
experimental_customMergeAllOf
|
|
1957
2125
|
);
|
|
1958
2126
|
}
|
|
1959
|
-
const oldSchemaType =
|
|
1960
|
-
const newSchemaType =
|
|
2127
|
+
const oldSchemaType = get16(oldSchemaItems, "type");
|
|
2128
|
+
const newSchemaType = get16(newSchemaItems, "type");
|
|
1961
2129
|
if (!oldSchemaType || oldSchemaType === newSchemaType) {
|
|
1962
|
-
const maxItems =
|
|
2130
|
+
const maxItems = get16(newSchema, "maxItems", -1);
|
|
1963
2131
|
if (newSchemaType === "object") {
|
|
1964
2132
|
newFormData = data.reduce((newValue, aValue) => {
|
|
1965
2133
|
const itemValue = sanitizeDataForNewSchema(
|
|
@@ -1985,116 +2153,6 @@
|
|
|
1985
2153
|
}
|
|
1986
2154
|
return newFormData;
|
|
1987
2155
|
}
|
|
1988
|
-
function toPathSchemaInternal(validator, schema, name, rootSchema, formData, _recurseList = [], experimental_customMergeAllOf) {
|
|
1989
|
-
if (REF_KEY in schema || DEPENDENCIES_KEY in schema || ALL_OF_KEY in schema) {
|
|
1990
|
-
const _schema = retrieveSchema(validator, schema, rootSchema, formData, experimental_customMergeAllOf);
|
|
1991
|
-
const sameSchemaIndex = _recurseList.findIndex((item) => deepEquals(item, _schema));
|
|
1992
|
-
if (sameSchemaIndex === -1) {
|
|
1993
|
-
return toPathSchemaInternal(
|
|
1994
|
-
validator,
|
|
1995
|
-
_schema,
|
|
1996
|
-
name,
|
|
1997
|
-
rootSchema,
|
|
1998
|
-
formData,
|
|
1999
|
-
_recurseList.concat(_schema),
|
|
2000
|
-
experimental_customMergeAllOf
|
|
2001
|
-
);
|
|
2002
|
-
}
|
|
2003
|
-
}
|
|
2004
|
-
let pathSchema = {
|
|
2005
|
-
[NAME_KEY]: name.replace(/^\./, "")
|
|
2006
|
-
};
|
|
2007
|
-
if (ONE_OF_KEY in schema || ANY_OF_KEY in schema) {
|
|
2008
|
-
const xxxOf = ONE_OF_KEY in schema ? schema.oneOf : schema.anyOf;
|
|
2009
|
-
const discriminator = getDiscriminatorFieldFromSchema(schema);
|
|
2010
|
-
const index = getClosestMatchingOption(
|
|
2011
|
-
validator,
|
|
2012
|
-
rootSchema,
|
|
2013
|
-
formData,
|
|
2014
|
-
xxxOf,
|
|
2015
|
-
0,
|
|
2016
|
-
discriminator,
|
|
2017
|
-
experimental_customMergeAllOf
|
|
2018
|
-
);
|
|
2019
|
-
const _schema = xxxOf[index];
|
|
2020
|
-
pathSchema = {
|
|
2021
|
-
...pathSchema,
|
|
2022
|
-
...toPathSchemaInternal(
|
|
2023
|
-
validator,
|
|
2024
|
-
_schema,
|
|
2025
|
-
name,
|
|
2026
|
-
rootSchema,
|
|
2027
|
-
formData,
|
|
2028
|
-
_recurseList,
|
|
2029
|
-
experimental_customMergeAllOf
|
|
2030
|
-
)
|
|
2031
|
-
};
|
|
2032
|
-
}
|
|
2033
|
-
if (ADDITIONAL_PROPERTIES_KEY in schema && schema[ADDITIONAL_PROPERTIES_KEY] !== false) {
|
|
2034
|
-
set(pathSchema, RJSF_ADDITIONAL_PROPERTIES_FLAG, true);
|
|
2035
|
-
}
|
|
2036
|
-
if (ITEMS_KEY in schema && Array.isArray(formData)) {
|
|
2037
|
-
const { items: schemaItems, additionalItems: schemaAdditionalItems } = schema;
|
|
2038
|
-
if (Array.isArray(schemaItems)) {
|
|
2039
|
-
formData.forEach((element, i) => {
|
|
2040
|
-
if (schemaItems[i]) {
|
|
2041
|
-
pathSchema[i] = toPathSchemaInternal(
|
|
2042
|
-
validator,
|
|
2043
|
-
schemaItems[i],
|
|
2044
|
-
`${name}.${i}`,
|
|
2045
|
-
rootSchema,
|
|
2046
|
-
element,
|
|
2047
|
-
_recurseList,
|
|
2048
|
-
experimental_customMergeAllOf
|
|
2049
|
-
);
|
|
2050
|
-
} else if (schemaAdditionalItems) {
|
|
2051
|
-
pathSchema[i] = toPathSchemaInternal(
|
|
2052
|
-
validator,
|
|
2053
|
-
schemaAdditionalItems,
|
|
2054
|
-
`${name}.${i}`,
|
|
2055
|
-
rootSchema,
|
|
2056
|
-
element,
|
|
2057
|
-
_recurseList,
|
|
2058
|
-
experimental_customMergeAllOf
|
|
2059
|
-
);
|
|
2060
|
-
} else {
|
|
2061
|
-
console.warn(`Unable to generate path schema for "${name}.${i}". No schema defined for it`);
|
|
2062
|
-
}
|
|
2063
|
-
});
|
|
2064
|
-
} else {
|
|
2065
|
-
formData.forEach((element, i) => {
|
|
2066
|
-
pathSchema[i] = toPathSchemaInternal(
|
|
2067
|
-
validator,
|
|
2068
|
-
schemaItems,
|
|
2069
|
-
`${name}.${i}`,
|
|
2070
|
-
rootSchema,
|
|
2071
|
-
element,
|
|
2072
|
-
_recurseList,
|
|
2073
|
-
experimental_customMergeAllOf
|
|
2074
|
-
);
|
|
2075
|
-
});
|
|
2076
|
-
}
|
|
2077
|
-
} else if (PROPERTIES_KEY in schema) {
|
|
2078
|
-
for (const property in schema.properties) {
|
|
2079
|
-
const field = get14(schema, [PROPERTIES_KEY, property], {});
|
|
2080
|
-
pathSchema[property] = toPathSchemaInternal(
|
|
2081
|
-
validator,
|
|
2082
|
-
field,
|
|
2083
|
-
`${name}.${property}`,
|
|
2084
|
-
rootSchema,
|
|
2085
|
-
// It's possible that formData is not an object -- this can happen if an
|
|
2086
|
-
// array item has just been added, but not populated with data yet
|
|
2087
|
-
get14(formData, [property]),
|
|
2088
|
-
_recurseList,
|
|
2089
|
-
experimental_customMergeAllOf
|
|
2090
|
-
);
|
|
2091
|
-
}
|
|
2092
|
-
}
|
|
2093
|
-
return pathSchema;
|
|
2094
|
-
}
|
|
2095
|
-
function toPathSchema(validator, schema, name = "", rootSchema, formData, experimental_customMergeAllOf) {
|
|
2096
|
-
return toPathSchemaInternal(validator, schema, name, rootSchema, formData, void 0, experimental_customMergeAllOf);
|
|
2097
|
-
}
|
|
2098
2156
|
var SchemaUtils = class {
|
|
2099
2157
|
/** Constructs the `SchemaUtils` instance with the given `validator` and `rootSchema` stored as instance variables
|
|
2100
2158
|
*
|
|
@@ -2105,7 +2163,7 @@
|
|
|
2105
2163
|
*/
|
|
2106
2164
|
constructor(validator, rootSchema, experimental_defaultFormStateBehavior, experimental_customMergeAllOf) {
|
|
2107
2165
|
if (rootSchema && rootSchema[SCHEMA_KEY] === JSON_SCHEMA_DRAFT_2020_12) {
|
|
2108
|
-
this.rootSchema = makeAllReferencesAbsolute(rootSchema,
|
|
2166
|
+
this.rootSchema = makeAllReferencesAbsolute(rootSchema, get16(rootSchema, ID_KEY, "#"));
|
|
2109
2167
|
} else {
|
|
2110
2168
|
this.rootSchema = rootSchema;
|
|
2111
2169
|
}
|
|
@@ -2297,6 +2355,18 @@
|
|
|
2297
2355
|
isSelect(schema) {
|
|
2298
2356
|
return isSelect(this.validator, schema, this.rootSchema, this.experimental_customMergeAllOf);
|
|
2299
2357
|
}
|
|
2358
|
+
/**
|
|
2359
|
+
* The function takes a `schema` and `formData` and returns a copy of the formData with any fields not defined in the schema removed.
|
|
2360
|
+
* This is useful for ensuring that only data that is relevant to the schema is preserved. Objects with `additionalProperties`
|
|
2361
|
+
* keyword set to `true` will not have their extra fields removed.
|
|
2362
|
+
*
|
|
2363
|
+
* @param schema - The schema to use for filtering the `formData`
|
|
2364
|
+
* @param [formData] - The formData to filter
|
|
2365
|
+
* @returns The new form data, with any fields not defined in the schema removed
|
|
2366
|
+
*/
|
|
2367
|
+
omitExtraData(schema, formData) {
|
|
2368
|
+
return omitExtraData(this.validator, schema, this.rootSchema, formData);
|
|
2369
|
+
}
|
|
2300
2370
|
/** Retrieves an expanded schema that has had all of its conditions, additional properties, references and
|
|
2301
2371
|
* dependencies resolved and merged into the `schema` given a `rawFormData` that is used to do the potentially
|
|
2302
2372
|
* recursive resolution.
|
|
@@ -2539,7 +2609,7 @@
|
|
|
2539
2609
|
*/
|
|
2540
2610
|
getOrCreateErrorBlock(pathOfError) {
|
|
2541
2611
|
const hasPath = Array.isArray(pathOfError) && pathOfError.length > 0 || typeof pathOfError === "string";
|
|
2542
|
-
let errorBlock = hasPath ?
|
|
2612
|
+
let errorBlock = hasPath ? get16(this.errorSchema, pathOfError) : this.errorSchema;
|
|
2543
2613
|
if (!errorBlock && pathOfError) {
|
|
2544
2614
|
errorBlock = {};
|
|
2545
2615
|
setWith(this.errorSchema, pathOfError, errorBlock, Object);
|
|
@@ -2565,7 +2635,7 @@
|
|
|
2565
2635
|
*/
|
|
2566
2636
|
addErrors(errorOrList, pathOfError) {
|
|
2567
2637
|
const errorBlock = this.getOrCreateErrorBlock(pathOfError);
|
|
2568
|
-
let errorsList =
|
|
2638
|
+
let errorsList = get16(errorBlock, ERRORS_KEY);
|
|
2569
2639
|
if (!Array.isArray(errorsList)) {
|
|
2570
2640
|
errorsList = [];
|
|
2571
2641
|
errorBlock[ERRORS_KEY] = errorsList;
|
|
@@ -2615,7 +2685,7 @@
|
|
|
2615
2685
|
} else if (!aIsPlainObject && bIsPlainObject) {
|
|
2616
2686
|
return keys(b);
|
|
2617
2687
|
} else {
|
|
2618
|
-
const unequalFields = keys(pickBy(a, (value, key) => !deepEquals(value,
|
|
2688
|
+
const unequalFields = keys(pickBy(a, (value, key) => !deepEquals(value, get16(b, key))));
|
|
2619
2689
|
const diffFields = difference(keys(b), keys(a));
|
|
2620
2690
|
return [...unequalFields, ...diffFields];
|
|
2621
2691
|
}
|
|
@@ -2728,7 +2798,7 @@
|
|
|
2728
2798
|
);
|
|
2729
2799
|
}
|
|
2730
2800
|
function getTestIds() {
|
|
2731
|
-
if (typeof process === "undefined" ||
|
|
2801
|
+
if (typeof process === "undefined" || get16(process, "env.NODE_ENV") !== "test") {
|
|
2732
2802
|
return {};
|
|
2733
2803
|
}
|
|
2734
2804
|
const ids = /* @__PURE__ */ new Map();
|
|
@@ -2797,7 +2867,7 @@
|
|
|
2797
2867
|
}
|
|
2798
2868
|
};
|
|
2799
2869
|
function mergeWidgetOptions(AWidget) {
|
|
2800
|
-
let MergedWidget =
|
|
2870
|
+
let MergedWidget = get16(AWidget, "MergedWidget");
|
|
2801
2871
|
if (!MergedWidget) {
|
|
2802
2872
|
const defaultOptions = AWidget.defaultProps && AWidget.defaultProps.options || {};
|
|
2803
2873
|
MergedWidget = ({ options, ...props }) => {
|
|
@@ -2927,7 +2997,7 @@
|
|
|
2927
2997
|
if (has5(regOrFc, FORM_CONTEXT_NAME)) {
|
|
2928
2998
|
lookupPath.unshift(FORM_CONTEXT_NAME);
|
|
2929
2999
|
}
|
|
2930
|
-
return
|
|
3000
|
+
return get16(regOrFc, [...lookupPath, toLookup], fallback);
|
|
2931
3001
|
}
|
|
2932
3002
|
|
|
2933
3003
|
// src/orderProperties.ts
|
|
@@ -3417,6 +3487,7 @@
|
|
|
3417
3487
|
TranslatableString2["OptionalObjectEmptyMsg"] = "No data for optional field";
|
|
3418
3488
|
TranslatableString2["Type"] = "Type";
|
|
3419
3489
|
TranslatableString2["Value"] = "Value";
|
|
3490
|
+
TranslatableString2["ClearButton"] = "clear input";
|
|
3420
3491
|
TranslatableString2["UnknownFieldType"] = "Unknown field type %1";
|
|
3421
3492
|
TranslatableString2["OptionPrefix"] = "Option %1";
|
|
3422
3493
|
TranslatableString2["TitleOptionPrefix"] = "%1 option %2";
|
|
@@ -3454,7 +3525,7 @@
|
|
|
3454
3525
|
* @param hash - The hash value at which to map the schema
|
|
3455
3526
|
*/
|
|
3456
3527
|
addSchema(schema, hash) {
|
|
3457
|
-
const key =
|
|
3528
|
+
const key = get16(schema, ID_KEY, hash);
|
|
3458
3529
|
const identifiedSchema = { ...schema, [ID_KEY]: key };
|
|
3459
3530
|
const existing = this.schemaMap[key];
|
|
3460
3531
|
if (!existing) {
|
|
@@ -3614,6 +3685,7 @@
|
|
|
3614
3685
|
exports.getDefaultFormState = getDefaultFormState;
|
|
3615
3686
|
exports.getDiscriminatorFieldFromSchema = getDiscriminatorFieldFromSchema;
|
|
3616
3687
|
exports.getDisplayLabel = getDisplayLabel;
|
|
3688
|
+
exports.getFieldNames = getFieldNames;
|
|
3617
3689
|
exports.getFirstMatchingOption = getFirstMatchingOption;
|
|
3618
3690
|
exports.getFromSchema = getFromSchema;
|
|
3619
3691
|
exports.getInputProps = getInputProps;
|
|
@@ -3623,6 +3695,7 @@
|
|
|
3623
3695
|
exports.getTemplate = getTemplate;
|
|
3624
3696
|
exports.getTestIds = getTestIds;
|
|
3625
3697
|
exports.getUiOptions = getUiOptions;
|
|
3698
|
+
exports.getUsedFormData = getUsedFormData;
|
|
3626
3699
|
exports.getWidget = getWidget;
|
|
3627
3700
|
exports.guessType = guessType;
|
|
3628
3701
|
exports.hasWidget = hasWidget;
|
|
@@ -3645,6 +3718,7 @@
|
|
|
3645
3718
|
exports.mergeDefaultsWithFormData = mergeDefaultsWithFormData;
|
|
3646
3719
|
exports.mergeObjects = mergeObjects;
|
|
3647
3720
|
exports.mergeSchemas = mergeSchemas;
|
|
3721
|
+
exports.omitExtraData = omitExtraData;
|
|
3648
3722
|
exports.optionId = optionId;
|
|
3649
3723
|
exports.optionalControlsId = optionalControlsId;
|
|
3650
3724
|
exports.optionsList = optionsList;
|