@rjsf/utils 6.1.2 → 6.2.4
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 +228 -155
- package/dist/index.cjs.map +4 -4
- package/dist/utils.esm.js +228 -155
- package/dist/utils.esm.js.map +4 -4
- package/dist/utils.umd.js +246 -178
- 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/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 +1 -1
- 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/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('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/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/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.
|
|
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
|
}
|
|
@@ -638,7 +638,7 @@
|
|
|
638
638
|
validator,
|
|
639
639
|
{ [ALL_OF_KEY]: Object.values(matchingProperties) },
|
|
640
640
|
rootSchema,
|
|
641
|
-
|
|
641
|
+
get16(formData, [key]),
|
|
642
642
|
experimental_customMergeAllOf
|
|
643
643
|
);
|
|
644
644
|
set(schema.properties, [key, ADDITIONAL_PROPERTY_FLAG], true);
|
|
@@ -651,7 +651,7 @@
|
|
|
651
651
|
if (REF_KEY in schema.additionalProperties) {
|
|
652
652
|
additionalProperties = retrieveSchema(
|
|
653
653
|
validator,
|
|
654
|
-
{ [REF_KEY]:
|
|
654
|
+
{ [REF_KEY]: get16(schema.additionalProperties, [REF_KEY]) },
|
|
655
655
|
rootSchema,
|
|
656
656
|
formData,
|
|
657
657
|
experimental_customMergeAllOf
|
|
@@ -664,10 +664,10 @@
|
|
|
664
664
|
...schema.additionalProperties
|
|
665
665
|
};
|
|
666
666
|
} else {
|
|
667
|
-
additionalProperties = { type: guessType(
|
|
667
|
+
additionalProperties = { type: guessType(get16(formData, [key])) };
|
|
668
668
|
}
|
|
669
669
|
} else {
|
|
670
|
-
additionalProperties = { type: guessType(
|
|
670
|
+
additionalProperties = { type: guessType(get16(formData, [key])) };
|
|
671
671
|
}
|
|
672
672
|
schema.properties[key] = additionalProperties;
|
|
673
673
|
set(schema.properties, [key, ADDITIONAL_PROPERTY_FLAG], true);
|
|
@@ -751,7 +751,7 @@
|
|
|
751
751
|
validator,
|
|
752
752
|
{ allOf: [schema2.properties[key], ...Object.values(matchingProperties)] },
|
|
753
753
|
rootSchema,
|
|
754
|
-
|
|
754
|
+
get16(rawFormData, [key]),
|
|
755
755
|
experimental_customMergeAllOf
|
|
756
756
|
);
|
|
757
757
|
}
|
|
@@ -823,7 +823,7 @@
|
|
|
823
823
|
function processDependencies(validator, dependencies, resolvedSchema, rootSchema, expandAllBranches, recurseList, formData, experimental_customMergeAllOf) {
|
|
824
824
|
let schemas = [resolvedSchema];
|
|
825
825
|
for (const dependencyKey in dependencies) {
|
|
826
|
-
if (!expandAllBranches &&
|
|
826
|
+
if (!expandAllBranches && get16(formData, [dependencyKey]) === void 0) {
|
|
827
827
|
continue;
|
|
828
828
|
}
|
|
829
829
|
if (resolvedSchema.properties && !(dependencyKey in resolvedSchema.properties)) {
|
|
@@ -954,11 +954,11 @@
|
|
|
954
954
|
const xxxOfs = schema[xxx].map(
|
|
955
955
|
(xxxOf) => retrieveSchema(validator, xxxOf, rootSchema, formData, experimental_customMergeAllOf)
|
|
956
956
|
);
|
|
957
|
-
const data =
|
|
957
|
+
const data = get16(formData, selectorField);
|
|
958
958
|
if (data !== void 0) {
|
|
959
959
|
return xxxOfs.find((xxx2) => {
|
|
960
960
|
return isEqual2(
|
|
961
|
-
|
|
961
|
+
get16(xxx2, [PROPERTIES_KEY, selectorField, DEFAULT_KEY], get16(xxx2, [PROPERTIES_KEY, selectorField, CONST_KEY])),
|
|
962
962
|
data
|
|
963
963
|
);
|
|
964
964
|
});
|
|
@@ -977,7 +977,7 @@
|
|
|
977
977
|
const pathList = Array.isArray(path) ? path : path.split(".");
|
|
978
978
|
const [part, ...nestedPath] = pathList;
|
|
979
979
|
if (part && has5(fieldSchema, part)) {
|
|
980
|
-
fieldSchema =
|
|
980
|
+
fieldSchema = get16(fieldSchema, part);
|
|
981
981
|
return getFromSchemaInternal(
|
|
982
982
|
validator,
|
|
983
983
|
rootSchema,
|
|
@@ -1019,7 +1019,7 @@
|
|
|
1019
1019
|
parentField,
|
|
1020
1020
|
fieldName,
|
|
1021
1021
|
ONE_OF_KEY,
|
|
1022
|
-
|
|
1022
|
+
get16(formData, subPath),
|
|
1023
1023
|
experimental_customMergeAllOf
|
|
1024
1024
|
);
|
|
1025
1025
|
} else if (has5(parentField, ANY_OF_KEY)) {
|
|
@@ -1029,7 +1029,7 @@
|
|
|
1029
1029
|
parentField,
|
|
1030
1030
|
fieldName,
|
|
1031
1031
|
ANY_OF_KEY,
|
|
1032
|
-
|
|
1032
|
+
get16(formData, subPath),
|
|
1033
1033
|
experimental_customMergeAllOf
|
|
1034
1034
|
);
|
|
1035
1035
|
}
|
|
@@ -1097,7 +1097,7 @@
|
|
|
1097
1097
|
totalScore += reduce(
|
|
1098
1098
|
schema.properties,
|
|
1099
1099
|
(score, value, key) => {
|
|
1100
|
-
const formValue =
|
|
1100
|
+
const formValue = get16(formData, key);
|
|
1101
1101
|
if (typeof value === "boolean") {
|
|
1102
1102
|
return score;
|
|
1103
1103
|
}
|
|
@@ -1124,7 +1124,7 @@
|
|
|
1124
1124
|
validator,
|
|
1125
1125
|
rootSchema,
|
|
1126
1126
|
formValue,
|
|
1127
|
-
|
|
1127
|
+
get16(value, key2),
|
|
1128
1128
|
-1,
|
|
1129
1129
|
discriminator,
|
|
1130
1130
|
experimental_customMergeAllOf
|
|
@@ -1226,22 +1226,22 @@
|
|
|
1226
1226
|
if (isObject(formData)) {
|
|
1227
1227
|
const acc = Object.assign({}, defaults);
|
|
1228
1228
|
return Object.keys(formData).reduce((acc2, key) => {
|
|
1229
|
-
const keyValue =
|
|
1229
|
+
const keyValue = get16(formData, key);
|
|
1230
1230
|
const keyExistsInDefaults = isObject(defaults) && key in defaults;
|
|
1231
1231
|
const keyExistsInFormData = key in formData;
|
|
1232
|
-
const keyDefault =
|
|
1232
|
+
const keyDefault = get16(defaults, key) ?? {};
|
|
1233
1233
|
const defaultValueIsNestedObject = keyExistsInDefaults && Object.entries(keyDefault).some(([, v]) => isObject(v));
|
|
1234
|
-
const keyDefaultIsObject = keyExistsInDefaults && isObject(
|
|
1234
|
+
const keyDefaultIsObject = keyExistsInDefaults && isObject(get16(defaults, key));
|
|
1235
1235
|
const keyHasFormDataObject = keyExistsInFormData && isObject(keyValue);
|
|
1236
1236
|
if (keyDefaultIsObject && keyHasFormDataObject && !defaultValueIsNestedObject) {
|
|
1237
1237
|
acc2[key] = {
|
|
1238
|
-
...
|
|
1238
|
+
...get16(defaults, key),
|
|
1239
1239
|
...keyValue
|
|
1240
1240
|
};
|
|
1241
1241
|
return acc2;
|
|
1242
1242
|
}
|
|
1243
1243
|
acc2[key] = mergeDefaultsWithFormData(
|
|
1244
|
-
|
|
1244
|
+
get16(defaults, key),
|
|
1245
1245
|
keyValue,
|
|
1246
1246
|
mergeExtraArrayDefaults,
|
|
1247
1247
|
defaultSupercedesUndefined,
|
|
@@ -1360,8 +1360,8 @@
|
|
|
1360
1360
|
let value;
|
|
1361
1361
|
let label = title;
|
|
1362
1362
|
if (selectorField) {
|
|
1363
|
-
const innerSchema =
|
|
1364
|
-
value =
|
|
1363
|
+
const innerSchema = get16(aSchema, [PROPERTIES_KEY, selectorField], {});
|
|
1364
|
+
value = get16(innerSchema, DEFAULT_KEY, get16(innerSchema, CONST_KEY));
|
|
1365
1365
|
label = label || innerSchema?.title || aSchema.title || String(value);
|
|
1366
1366
|
} else {
|
|
1367
1367
|
value = toConstant(aSchema);
|
|
@@ -1448,7 +1448,7 @@
|
|
|
1448
1448
|
let updatedRecurseList = _recurseList;
|
|
1449
1449
|
if (schema[CONST_KEY] !== void 0 && experimental_defaultFormStateBehavior?.constAsDefaults !== "never" && !constIsAjvDataReference(schema)) {
|
|
1450
1450
|
defaults = schema[CONST_KEY];
|
|
1451
|
-
} 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]) {
|
|
1452
1452
|
defaults = mergeObjects(defaults, schema.default);
|
|
1453
1453
|
} else if (DEFAULT_KEY in schema && !schema[ANY_OF_KEY] && !schema[ONE_OF_KEY] && !schema[REF_KEY]) {
|
|
1454
1454
|
defaults = schema.default;
|
|
@@ -1458,7 +1458,8 @@
|
|
|
1458
1458
|
updatedRecurseList = _recurseList.concat(refName);
|
|
1459
1459
|
schemaToCompute = findSchemaDefinition(refName, rootSchema);
|
|
1460
1460
|
}
|
|
1461
|
-
|
|
1461
|
+
const hasNoExistingData = rawFormData === void 0 || isObject(rawFormData) && isEmpty4(rawFormData);
|
|
1462
|
+
if (schemaToCompute && !defaults && hasNoExistingData) {
|
|
1462
1463
|
defaults = schema.default;
|
|
1463
1464
|
}
|
|
1464
1465
|
if (shouldMergeDefaultsIntoFormData && schemaToCompute && !isObject(rawFormData)) {
|
|
@@ -1602,11 +1603,12 @@
|
|
|
1602
1603
|
{
|
|
1603
1604
|
const formData = isObject(rawFormData) ? rawFormData : {};
|
|
1604
1605
|
const schema = rawSchema;
|
|
1605
|
-
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;
|
|
1606
1608
|
const parentConst = retrievedSchema[CONST_KEY];
|
|
1607
1609
|
const objectDefaults = Object.keys(retrievedSchema.properties || {}).reduce(
|
|
1608
1610
|
(acc, key) => {
|
|
1609
|
-
const propertySchema =
|
|
1611
|
+
const propertySchema = get16(retrievedSchema, [PROPERTIES_KEY, key], {});
|
|
1610
1612
|
const hasParentConst = isObject(parentConst) && parentConst[key] !== void 0;
|
|
1611
1613
|
const hasConst = (isObject(propertySchema) && CONST_KEY in propertySchema || hasParentConst) && experimental_defaultFormStateBehavior?.constAsDefaults !== "never" && !constIsAjvDataReference(propertySchema);
|
|
1612
1614
|
const computedDefault = computeDefaults(validator, propertySchema, {
|
|
@@ -1615,8 +1617,8 @@
|
|
|
1615
1617
|
experimental_defaultFormStateBehavior,
|
|
1616
1618
|
experimental_customMergeAllOf,
|
|
1617
1619
|
includeUndefinedValues: includeUndefinedValues === true,
|
|
1618
|
-
parentDefaults:
|
|
1619
|
-
rawFormData:
|
|
1620
|
+
parentDefaults: get16(defaults, [key]),
|
|
1621
|
+
rawFormData: get16(formData, [key]),
|
|
1620
1622
|
required: retrievedSchema.required?.includes(key),
|
|
1621
1623
|
shouldMergeDefaultsIntoFormData,
|
|
1622
1624
|
initialDefaultsGenerated
|
|
@@ -1654,8 +1656,8 @@
|
|
|
1654
1656
|
experimental_defaultFormStateBehavior,
|
|
1655
1657
|
experimental_customMergeAllOf,
|
|
1656
1658
|
includeUndefinedValues: includeUndefinedValues === true,
|
|
1657
|
-
parentDefaults:
|
|
1658
|
-
rawFormData:
|
|
1659
|
+
parentDefaults: get16(defaults, [key]),
|
|
1660
|
+
rawFormData: get16(formData, [key]),
|
|
1659
1661
|
required: retrievedSchema.required?.includes(key),
|
|
1660
1662
|
shouldMergeDefaultsIntoFormData,
|
|
1661
1663
|
initialDefaultsGenerated
|
|
@@ -1696,12 +1698,14 @@
|
|
|
1696
1698
|
if (Array.isArray(defaults)) {
|
|
1697
1699
|
defaults = defaults.map((item, idx) => {
|
|
1698
1700
|
const schemaItem = getInnerSchemaForArrayItem(schema, 2 /* Fallback */, idx);
|
|
1701
|
+
const itemFormData = Array.isArray(rawFormData) ? rawFormData[idx] : void 0;
|
|
1699
1702
|
return computeDefaults(validator, schemaItem, {
|
|
1700
1703
|
rootSchema,
|
|
1701
1704
|
_recurseList,
|
|
1702
1705
|
experimental_defaultFormStateBehavior,
|
|
1703
1706
|
experimental_customMergeAllOf,
|
|
1704
1707
|
parentDefaults: item,
|
|
1708
|
+
rawFormData: itemFormData,
|
|
1705
1709
|
required,
|
|
1706
1710
|
shouldMergeDefaultsIntoFormData,
|
|
1707
1711
|
initialDefaultsGenerated
|
|
@@ -1720,7 +1724,7 @@
|
|
|
1720
1724
|
experimental_defaultFormStateBehavior,
|
|
1721
1725
|
experimental_customMergeAllOf,
|
|
1722
1726
|
rawFormData: item,
|
|
1723
|
-
parentDefaults:
|
|
1727
|
+
parentDefaults: get16(defaults, [idx]),
|
|
1724
1728
|
required,
|
|
1725
1729
|
shouldMergeDefaultsIntoFormData,
|
|
1726
1730
|
initialDefaultsGenerated
|
|
@@ -1846,7 +1850,7 @@
|
|
|
1846
1850
|
let displayLabel = Boolean(label);
|
|
1847
1851
|
if (displayLabel) {
|
|
1848
1852
|
const schemaType = getSchemaType(schema);
|
|
1849
|
-
const addedByAdditionalProperty =
|
|
1853
|
+
const addedByAdditionalProperty = get16(schema, ADDITIONAL_PROPERTY_FLAG, false);
|
|
1850
1854
|
if (schemaType === "array") {
|
|
1851
1855
|
displayLabel = addedByAdditionalProperty || isMultiSelect(validator, schema, rootSchema, experimental_customMergeAllOf) || isFilesArray(validator, schema, uiSchema, rootSchema, experimental_customMergeAllOf) || isCustomWidget(uiSchema);
|
|
1852
1856
|
}
|
|
@@ -1862,25 +1866,183 @@
|
|
|
1862
1866
|
}
|
|
1863
1867
|
return displayLabel;
|
|
1864
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
|
+
}
|
|
1865
2027
|
var NO_VALUE = Symbol("no Value");
|
|
1866
2028
|
function sanitizeDataForNewSchema(validator, rootSchema, newSchema, oldSchema, data = {}, experimental_customMergeAllOf) {
|
|
1867
2029
|
let newFormData;
|
|
1868
2030
|
if (has5(newSchema, PROPERTIES_KEY)) {
|
|
1869
2031
|
const removeOldSchemaData = {};
|
|
1870
2032
|
if (has5(oldSchema, PROPERTIES_KEY)) {
|
|
1871
|
-
const properties =
|
|
2033
|
+
const properties = get16(oldSchema, PROPERTIES_KEY, {});
|
|
1872
2034
|
Object.keys(properties).forEach((key) => {
|
|
1873
2035
|
if (has5(data, key)) {
|
|
1874
2036
|
removeOldSchemaData[key] = void 0;
|
|
1875
2037
|
}
|
|
1876
2038
|
});
|
|
1877
2039
|
}
|
|
1878
|
-
const keys2 = Object.keys(
|
|
2040
|
+
const keys2 = Object.keys(get16(newSchema, PROPERTIES_KEY, {}));
|
|
1879
2041
|
const nestedData = {};
|
|
1880
2042
|
keys2.forEach((key) => {
|
|
1881
|
-
const formValue =
|
|
1882
|
-
let oldKeyedSchema =
|
|
1883
|
-
let newKeyedSchema =
|
|
2043
|
+
const formValue = get16(data, key);
|
|
2044
|
+
let oldKeyedSchema = get16(oldSchema, [PROPERTIES_KEY, key], {});
|
|
2045
|
+
let newKeyedSchema = get16(newSchema, [PROPERTIES_KEY, key], {});
|
|
1884
2046
|
if (has5(oldKeyedSchema, REF_KEY)) {
|
|
1885
2047
|
oldKeyedSchema = retrieveSchema(
|
|
1886
2048
|
validator,
|
|
@@ -1899,8 +2061,8 @@
|
|
|
1899
2061
|
experimental_customMergeAllOf
|
|
1900
2062
|
);
|
|
1901
2063
|
}
|
|
1902
|
-
const oldSchemaTypeForKey =
|
|
1903
|
-
const newSchemaTypeForKey =
|
|
2064
|
+
const oldSchemaTypeForKey = get16(oldKeyedSchema, "type");
|
|
2065
|
+
const newSchemaTypeForKey = get16(newKeyedSchema, "type");
|
|
1904
2066
|
if (!oldSchemaTypeForKey || oldSchemaTypeForKey === newSchemaTypeForKey) {
|
|
1905
2067
|
if (has5(removeOldSchemaData, key)) {
|
|
1906
2068
|
delete removeOldSchemaData[key];
|
|
@@ -1918,17 +2080,17 @@
|
|
|
1918
2080
|
nestedData[key] = itemData;
|
|
1919
2081
|
}
|
|
1920
2082
|
} else {
|
|
1921
|
-
const newOptionDefault =
|
|
1922
|
-
const oldOptionDefault =
|
|
2083
|
+
const newOptionDefault = get16(newKeyedSchema, "default", NO_VALUE);
|
|
2084
|
+
const oldOptionDefault = get16(oldKeyedSchema, "default", NO_VALUE);
|
|
1923
2085
|
if (newOptionDefault !== NO_VALUE && newOptionDefault !== formValue) {
|
|
1924
2086
|
if (oldOptionDefault === formValue) {
|
|
1925
2087
|
removeOldSchemaData[key] = newOptionDefault;
|
|
1926
|
-
} else if (
|
|
2088
|
+
} else if (get16(newKeyedSchema, "readOnly") === true) {
|
|
1927
2089
|
removeOldSchemaData[key] = void 0;
|
|
1928
2090
|
}
|
|
1929
2091
|
}
|
|
1930
|
-
const newOptionConst =
|
|
1931
|
-
const oldOptionConst =
|
|
2092
|
+
const newOptionConst = get16(newKeyedSchema, "const", NO_VALUE);
|
|
2093
|
+
const oldOptionConst = get16(oldKeyedSchema, "const", NO_VALUE);
|
|
1932
2094
|
if (newOptionConst !== NO_VALUE && newOptionConst !== formValue) {
|
|
1933
2095
|
removeOldSchemaData[key] = oldOptionConst === formValue ? newOptionConst : void 0;
|
|
1934
2096
|
}
|
|
@@ -1940,9 +2102,9 @@
|
|
|
1940
2102
|
...removeOldSchemaData,
|
|
1941
2103
|
...nestedData
|
|
1942
2104
|
};
|
|
1943
|
-
} else if (
|
|
1944
|
-
let oldSchemaItems =
|
|
1945
|
-
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");
|
|
1946
2108
|
if (typeof oldSchemaItems === "object" && typeof newSchemaItems === "object" && !Array.isArray(oldSchemaItems) && !Array.isArray(newSchemaItems)) {
|
|
1947
2109
|
if (has5(oldSchemaItems, REF_KEY)) {
|
|
1948
2110
|
oldSchemaItems = retrieveSchema(
|
|
@@ -1962,10 +2124,10 @@
|
|
|
1962
2124
|
experimental_customMergeAllOf
|
|
1963
2125
|
);
|
|
1964
2126
|
}
|
|
1965
|
-
const oldSchemaType =
|
|
1966
|
-
const newSchemaType =
|
|
2127
|
+
const oldSchemaType = get16(oldSchemaItems, "type");
|
|
2128
|
+
const newSchemaType = get16(newSchemaItems, "type");
|
|
1967
2129
|
if (!oldSchemaType || oldSchemaType === newSchemaType) {
|
|
1968
|
-
const maxItems =
|
|
2130
|
+
const maxItems = get16(newSchema, "maxItems", -1);
|
|
1969
2131
|
if (newSchemaType === "object") {
|
|
1970
2132
|
newFormData = data.reduce((newValue, aValue) => {
|
|
1971
2133
|
const itemValue = sanitizeDataForNewSchema(
|
|
@@ -1991,116 +2153,6 @@
|
|
|
1991
2153
|
}
|
|
1992
2154
|
return newFormData;
|
|
1993
2155
|
}
|
|
1994
|
-
function toPathSchemaInternal(validator, schema, name, rootSchema, formData, _recurseList = [], experimental_customMergeAllOf) {
|
|
1995
|
-
if (REF_KEY in schema || DEPENDENCIES_KEY in schema || ALL_OF_KEY in schema) {
|
|
1996
|
-
const _schema = retrieveSchema(validator, schema, rootSchema, formData, experimental_customMergeAllOf);
|
|
1997
|
-
const sameSchemaIndex = _recurseList.findIndex((item) => deepEquals(item, _schema));
|
|
1998
|
-
if (sameSchemaIndex === -1) {
|
|
1999
|
-
return toPathSchemaInternal(
|
|
2000
|
-
validator,
|
|
2001
|
-
_schema,
|
|
2002
|
-
name,
|
|
2003
|
-
rootSchema,
|
|
2004
|
-
formData,
|
|
2005
|
-
_recurseList.concat(_schema),
|
|
2006
|
-
experimental_customMergeAllOf
|
|
2007
|
-
);
|
|
2008
|
-
}
|
|
2009
|
-
}
|
|
2010
|
-
let pathSchema = {
|
|
2011
|
-
[NAME_KEY]: name.replace(/^\./, "")
|
|
2012
|
-
};
|
|
2013
|
-
if (ONE_OF_KEY in schema || ANY_OF_KEY in schema) {
|
|
2014
|
-
const xxxOf = ONE_OF_KEY in schema ? schema.oneOf : schema.anyOf;
|
|
2015
|
-
const discriminator = getDiscriminatorFieldFromSchema(schema);
|
|
2016
|
-
const index = getClosestMatchingOption(
|
|
2017
|
-
validator,
|
|
2018
|
-
rootSchema,
|
|
2019
|
-
formData,
|
|
2020
|
-
xxxOf,
|
|
2021
|
-
0,
|
|
2022
|
-
discriminator,
|
|
2023
|
-
experimental_customMergeAllOf
|
|
2024
|
-
);
|
|
2025
|
-
const _schema = xxxOf[index];
|
|
2026
|
-
pathSchema = {
|
|
2027
|
-
...pathSchema,
|
|
2028
|
-
...toPathSchemaInternal(
|
|
2029
|
-
validator,
|
|
2030
|
-
_schema,
|
|
2031
|
-
name,
|
|
2032
|
-
rootSchema,
|
|
2033
|
-
formData,
|
|
2034
|
-
_recurseList,
|
|
2035
|
-
experimental_customMergeAllOf
|
|
2036
|
-
)
|
|
2037
|
-
};
|
|
2038
|
-
}
|
|
2039
|
-
if (ADDITIONAL_PROPERTIES_KEY in schema && schema[ADDITIONAL_PROPERTIES_KEY] !== false) {
|
|
2040
|
-
set(pathSchema, RJSF_ADDITIONAL_PROPERTIES_FLAG, true);
|
|
2041
|
-
}
|
|
2042
|
-
if (ITEMS_KEY in schema && Array.isArray(formData)) {
|
|
2043
|
-
const { items: schemaItems, additionalItems: schemaAdditionalItems } = schema;
|
|
2044
|
-
if (Array.isArray(schemaItems)) {
|
|
2045
|
-
formData.forEach((element, i) => {
|
|
2046
|
-
if (schemaItems[i]) {
|
|
2047
|
-
pathSchema[i] = toPathSchemaInternal(
|
|
2048
|
-
validator,
|
|
2049
|
-
schemaItems[i],
|
|
2050
|
-
`${name}.${i}`,
|
|
2051
|
-
rootSchema,
|
|
2052
|
-
element,
|
|
2053
|
-
_recurseList,
|
|
2054
|
-
experimental_customMergeAllOf
|
|
2055
|
-
);
|
|
2056
|
-
} else if (schemaAdditionalItems) {
|
|
2057
|
-
pathSchema[i] = toPathSchemaInternal(
|
|
2058
|
-
validator,
|
|
2059
|
-
schemaAdditionalItems,
|
|
2060
|
-
`${name}.${i}`,
|
|
2061
|
-
rootSchema,
|
|
2062
|
-
element,
|
|
2063
|
-
_recurseList,
|
|
2064
|
-
experimental_customMergeAllOf
|
|
2065
|
-
);
|
|
2066
|
-
} else {
|
|
2067
|
-
console.warn(`Unable to generate path schema for "${name}.${i}". No schema defined for it`);
|
|
2068
|
-
}
|
|
2069
|
-
});
|
|
2070
|
-
} else {
|
|
2071
|
-
formData.forEach((element, i) => {
|
|
2072
|
-
pathSchema[i] = toPathSchemaInternal(
|
|
2073
|
-
validator,
|
|
2074
|
-
schemaItems,
|
|
2075
|
-
`${name}.${i}`,
|
|
2076
|
-
rootSchema,
|
|
2077
|
-
element,
|
|
2078
|
-
_recurseList,
|
|
2079
|
-
experimental_customMergeAllOf
|
|
2080
|
-
);
|
|
2081
|
-
});
|
|
2082
|
-
}
|
|
2083
|
-
} else if (PROPERTIES_KEY in schema) {
|
|
2084
|
-
for (const property in schema.properties) {
|
|
2085
|
-
const field = get14(schema, [PROPERTIES_KEY, property], {});
|
|
2086
|
-
pathSchema[property] = toPathSchemaInternal(
|
|
2087
|
-
validator,
|
|
2088
|
-
field,
|
|
2089
|
-
`${name}.${property}`,
|
|
2090
|
-
rootSchema,
|
|
2091
|
-
// It's possible that formData is not an object -- this can happen if an
|
|
2092
|
-
// array item has just been added, but not populated with data yet
|
|
2093
|
-
get14(formData, [property]),
|
|
2094
|
-
_recurseList,
|
|
2095
|
-
experimental_customMergeAllOf
|
|
2096
|
-
);
|
|
2097
|
-
}
|
|
2098
|
-
}
|
|
2099
|
-
return pathSchema;
|
|
2100
|
-
}
|
|
2101
|
-
function toPathSchema(validator, schema, name = "", rootSchema, formData, experimental_customMergeAllOf) {
|
|
2102
|
-
return toPathSchemaInternal(validator, schema, name, rootSchema, formData, void 0, experimental_customMergeAllOf);
|
|
2103
|
-
}
|
|
2104
2156
|
var SchemaUtils = class {
|
|
2105
2157
|
/** Constructs the `SchemaUtils` instance with the given `validator` and `rootSchema` stored as instance variables
|
|
2106
2158
|
*
|
|
@@ -2111,7 +2163,7 @@
|
|
|
2111
2163
|
*/
|
|
2112
2164
|
constructor(validator, rootSchema, experimental_defaultFormStateBehavior, experimental_customMergeAllOf) {
|
|
2113
2165
|
if (rootSchema && rootSchema[SCHEMA_KEY] === JSON_SCHEMA_DRAFT_2020_12) {
|
|
2114
|
-
this.rootSchema = makeAllReferencesAbsolute(rootSchema,
|
|
2166
|
+
this.rootSchema = makeAllReferencesAbsolute(rootSchema, get16(rootSchema, ID_KEY, "#"));
|
|
2115
2167
|
} else {
|
|
2116
2168
|
this.rootSchema = rootSchema;
|
|
2117
2169
|
}
|
|
@@ -2303,6 +2355,18 @@
|
|
|
2303
2355
|
isSelect(schema) {
|
|
2304
2356
|
return isSelect(this.validator, schema, this.rootSchema, this.experimental_customMergeAllOf);
|
|
2305
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
|
+
}
|
|
2306
2370
|
/** Retrieves an expanded schema that has had all of its conditions, additional properties, references and
|
|
2307
2371
|
* dependencies resolved and merged into the `schema` given a `rawFormData` that is used to do the potentially
|
|
2308
2372
|
* recursive resolution.
|
|
@@ -2545,7 +2609,7 @@
|
|
|
2545
2609
|
*/
|
|
2546
2610
|
getOrCreateErrorBlock(pathOfError) {
|
|
2547
2611
|
const hasPath = Array.isArray(pathOfError) && pathOfError.length > 0 || typeof pathOfError === "string";
|
|
2548
|
-
let errorBlock = hasPath ?
|
|
2612
|
+
let errorBlock = hasPath ? get16(this.errorSchema, pathOfError) : this.errorSchema;
|
|
2549
2613
|
if (!errorBlock && pathOfError) {
|
|
2550
2614
|
errorBlock = {};
|
|
2551
2615
|
setWith(this.errorSchema, pathOfError, errorBlock, Object);
|
|
@@ -2571,7 +2635,7 @@
|
|
|
2571
2635
|
*/
|
|
2572
2636
|
addErrors(errorOrList, pathOfError) {
|
|
2573
2637
|
const errorBlock = this.getOrCreateErrorBlock(pathOfError);
|
|
2574
|
-
let errorsList =
|
|
2638
|
+
let errorsList = get16(errorBlock, ERRORS_KEY);
|
|
2575
2639
|
if (!Array.isArray(errorsList)) {
|
|
2576
2640
|
errorsList = [];
|
|
2577
2641
|
errorBlock[ERRORS_KEY] = errorsList;
|
|
@@ -2621,7 +2685,7 @@
|
|
|
2621
2685
|
} else if (!aIsPlainObject && bIsPlainObject) {
|
|
2622
2686
|
return keys(b);
|
|
2623
2687
|
} else {
|
|
2624
|
-
const unequalFields = keys(pickBy(a, (value, key) => !deepEquals(value,
|
|
2688
|
+
const unequalFields = keys(pickBy(a, (value, key) => !deepEquals(value, get16(b, key))));
|
|
2625
2689
|
const diffFields = difference(keys(b), keys(a));
|
|
2626
2690
|
return [...unequalFields, ...diffFields];
|
|
2627
2691
|
}
|
|
@@ -2734,7 +2798,7 @@
|
|
|
2734
2798
|
);
|
|
2735
2799
|
}
|
|
2736
2800
|
function getTestIds() {
|
|
2737
|
-
if (typeof process === "undefined" ||
|
|
2801
|
+
if (typeof process === "undefined" || get16(process, "env.NODE_ENV") !== "test") {
|
|
2738
2802
|
return {};
|
|
2739
2803
|
}
|
|
2740
2804
|
const ids = /* @__PURE__ */ new Map();
|
|
@@ -2803,7 +2867,7 @@
|
|
|
2803
2867
|
}
|
|
2804
2868
|
};
|
|
2805
2869
|
function mergeWidgetOptions(AWidget) {
|
|
2806
|
-
let MergedWidget =
|
|
2870
|
+
let MergedWidget = get16(AWidget, "MergedWidget");
|
|
2807
2871
|
if (!MergedWidget) {
|
|
2808
2872
|
const defaultOptions = AWidget.defaultProps && AWidget.defaultProps.options || {};
|
|
2809
2873
|
MergedWidget = ({ options, ...props }) => {
|
|
@@ -2933,7 +2997,7 @@
|
|
|
2933
2997
|
if (has5(regOrFc, FORM_CONTEXT_NAME)) {
|
|
2934
2998
|
lookupPath.unshift(FORM_CONTEXT_NAME);
|
|
2935
2999
|
}
|
|
2936
|
-
return
|
|
3000
|
+
return get16(regOrFc, [...lookupPath, toLookup], fallback);
|
|
2937
3001
|
}
|
|
2938
3002
|
|
|
2939
3003
|
// src/orderProperties.ts
|
|
@@ -3423,6 +3487,7 @@
|
|
|
3423
3487
|
TranslatableString2["OptionalObjectEmptyMsg"] = "No data for optional field";
|
|
3424
3488
|
TranslatableString2["Type"] = "Type";
|
|
3425
3489
|
TranslatableString2["Value"] = "Value";
|
|
3490
|
+
TranslatableString2["ClearButton"] = "clear input";
|
|
3426
3491
|
TranslatableString2["UnknownFieldType"] = "Unknown field type %1";
|
|
3427
3492
|
TranslatableString2["OptionPrefix"] = "Option %1";
|
|
3428
3493
|
TranslatableString2["TitleOptionPrefix"] = "%1 option %2";
|
|
@@ -3460,7 +3525,7 @@
|
|
|
3460
3525
|
* @param hash - The hash value at which to map the schema
|
|
3461
3526
|
*/
|
|
3462
3527
|
addSchema(schema, hash) {
|
|
3463
|
-
const key =
|
|
3528
|
+
const key = get16(schema, ID_KEY, hash);
|
|
3464
3529
|
const identifiedSchema = { ...schema, [ID_KEY]: key };
|
|
3465
3530
|
const existing = this.schemaMap[key];
|
|
3466
3531
|
if (!existing) {
|
|
@@ -3620,6 +3685,7 @@
|
|
|
3620
3685
|
exports.getDefaultFormState = getDefaultFormState;
|
|
3621
3686
|
exports.getDiscriminatorFieldFromSchema = getDiscriminatorFieldFromSchema;
|
|
3622
3687
|
exports.getDisplayLabel = getDisplayLabel;
|
|
3688
|
+
exports.getFieldNames = getFieldNames;
|
|
3623
3689
|
exports.getFirstMatchingOption = getFirstMatchingOption;
|
|
3624
3690
|
exports.getFromSchema = getFromSchema;
|
|
3625
3691
|
exports.getInputProps = getInputProps;
|
|
@@ -3629,6 +3695,7 @@
|
|
|
3629
3695
|
exports.getTemplate = getTemplate;
|
|
3630
3696
|
exports.getTestIds = getTestIds;
|
|
3631
3697
|
exports.getUiOptions = getUiOptions;
|
|
3698
|
+
exports.getUsedFormData = getUsedFormData;
|
|
3632
3699
|
exports.getWidget = getWidget;
|
|
3633
3700
|
exports.guessType = guessType;
|
|
3634
3701
|
exports.hasWidget = hasWidget;
|
|
@@ -3651,6 +3718,7 @@
|
|
|
3651
3718
|
exports.mergeDefaultsWithFormData = mergeDefaultsWithFormData;
|
|
3652
3719
|
exports.mergeObjects = mergeObjects;
|
|
3653
3720
|
exports.mergeSchemas = mergeSchemas;
|
|
3721
|
+
exports.omitExtraData = omitExtraData;
|
|
3654
3722
|
exports.optionId = optionId;
|
|
3655
3723
|
exports.optionalControlsId = optionalControlsId;
|
|
3656
3724
|
exports.optionsList = optionsList;
|