@rjsf/utils 6.0.0-beta.12 → 6.0.0-beta.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +95 -21
- package/dist/index.js.map +4 -4
- package/dist/utils.esm.js +95 -21
- package/dist/utils.esm.js.map +4 -4
- package/dist/utils.umd.js +93 -22
- package/lib/constants.d.ts +1 -0
- package/lib/constants.js +1 -0
- package/lib/constants.js.map +1 -1
- package/lib/createSchemaUtils.js +9 -1
- package/lib/createSchemaUtils.js.map +1 -1
- package/lib/findSchemaDefinition.d.ts +6 -0
- package/lib/findSchemaDefinition.js +44 -3
- package/lib/findSchemaDefinition.js.map +1 -1
- package/lib/index.d.ts +3 -1
- package/lib/index.js +2 -1
- package/lib/index.js.map +1 -1
- package/lib/mergeDefaultsWithFormData.js +2 -2
- package/lib/mergeDefaultsWithFormData.js.map +1 -1
- package/lib/schema/getDefaultFormState.js +10 -2
- package/lib/schema/getDefaultFormState.js.map +1 -1
- package/lib/schema/retrieveSchema.js +2 -2
- package/lib/schema/retrieveSchema.js.map +1 -1
- package/lib/shallowEquals.d.ts +8 -0
- package/lib/shallowEquals.js +36 -0
- package/lib/shallowEquals.js.map +1 -0
- package/lib/shouldRender.d.ts +8 -2
- package/lib/shouldRender.js +17 -2
- package/lib/shouldRender.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/lib/types.d.ts +2 -0
- package/package.json +1 -1
- package/src/constants.ts +1 -0
- package/src/createSchemaUtils.ts +8 -1
- package/src/findSchemaDefinition.ts +51 -3
- package/src/index.ts +4 -0
- package/src/mergeDefaultsWithFormData.ts +1 -1
- package/src/schema/getDefaultFormState.ts +12 -2
- package/src/schema/retrieveSchema.ts +2 -2
- package/src/shallowEquals.ts +41 -0
- package/src/shouldRender.ts +27 -2
- package/src/types.ts +2 -0
package/dist/index.js
CHANGED
|
@@ -46,6 +46,7 @@ __export(index_exports, {
|
|
|
46
46
|
ID_KEY: () => ID_KEY,
|
|
47
47
|
IF_KEY: () => IF_KEY,
|
|
48
48
|
ITEMS_KEY: () => ITEMS_KEY,
|
|
49
|
+
JSON_SCHEMA_DRAFT_2019_09: () => JSON_SCHEMA_DRAFT_2019_09,
|
|
49
50
|
JSON_SCHEMA_DRAFT_2020_12: () => JSON_SCHEMA_DRAFT_2020_12,
|
|
50
51
|
JUNK_OPTION_ID: () => JUNK_OPTION_ID,
|
|
51
52
|
LOOKUP_MAP_NAME: () => LOOKUP_MAP_NAME,
|
|
@@ -133,6 +134,7 @@ __export(index_exports, {
|
|
|
133
134
|
sanitizeDataForNewSchema: () => sanitizeDataForNewSchema,
|
|
134
135
|
schemaParser: () => schemaParser,
|
|
135
136
|
schemaRequiresTrueValue: () => schemaRequiresTrueValue,
|
|
137
|
+
shallowEquals: () => shallowEquals,
|
|
136
138
|
shouldRender: () => shouldRender,
|
|
137
139
|
sortedJSONStringify: () => sortedJSONStringify,
|
|
138
140
|
titleId: () => titleId,
|
|
@@ -226,6 +228,7 @@ var UI_FIELD_KEY = "ui:field";
|
|
|
226
228
|
var UI_WIDGET_KEY = "ui:widget";
|
|
227
229
|
var UI_OPTIONS_KEY = "ui:options";
|
|
228
230
|
var UI_GLOBAL_OPTIONS_KEY = "ui:globalOptions";
|
|
231
|
+
var JSON_SCHEMA_DRAFT_2019_09 = "https://json-schema.org/draft/2019-09/schema";
|
|
229
232
|
var JSON_SCHEMA_DRAFT_2020_12 = "https://json-schema.org/draft/2020-12/schema";
|
|
230
233
|
|
|
231
234
|
// src/getUiOptions.ts
|
|
@@ -328,7 +331,16 @@ function findEmbeddedSchemaRecursive(schema, ref) {
|
|
|
328
331
|
return schema;
|
|
329
332
|
}
|
|
330
333
|
for (const subSchema of Object.values(schema)) {
|
|
331
|
-
if (
|
|
334
|
+
if (Array.isArray(subSchema)) {
|
|
335
|
+
for (const item of subSchema) {
|
|
336
|
+
if ((0, import_isObject3.default)(item)) {
|
|
337
|
+
const result = findEmbeddedSchemaRecursive(item, ref);
|
|
338
|
+
if (result !== void 0) {
|
|
339
|
+
return result;
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
} else if ((0, import_isObject3.default)(subSchema)) {
|
|
332
344
|
const result = findEmbeddedSchemaRecursive(subSchema, ref);
|
|
333
345
|
if (result !== void 0) {
|
|
334
346
|
return result;
|
|
@@ -337,6 +349,23 @@ function findEmbeddedSchemaRecursive(schema, ref) {
|
|
|
337
349
|
}
|
|
338
350
|
return void 0;
|
|
339
351
|
}
|
|
352
|
+
function makeAllReferencesAbsolute(schema, baseURI) {
|
|
353
|
+
const currentURI = (0, import_get.default)(schema, ID_KEY, baseURI);
|
|
354
|
+
if (REF_KEY in schema) {
|
|
355
|
+
schema = { ...schema, [REF_KEY]: import_fast_uri.default.resolve(currentURI, schema[REF_KEY]) };
|
|
356
|
+
}
|
|
357
|
+
for (const [key, subSchema] of Object.entries(schema)) {
|
|
358
|
+
if (Array.isArray(subSchema)) {
|
|
359
|
+
schema = {
|
|
360
|
+
...schema,
|
|
361
|
+
[key]: subSchema.map((item) => (0, import_isObject3.default)(item) ? makeAllReferencesAbsolute(item, currentURI) : item)
|
|
362
|
+
};
|
|
363
|
+
} else if ((0, import_isObject3.default)(subSchema)) {
|
|
364
|
+
schema = { ...schema, [key]: makeAllReferencesAbsolute(subSchema, currentURI) };
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
return schema;
|
|
368
|
+
}
|
|
340
369
|
function splitKeyElementFromObject(key, object) {
|
|
341
370
|
const value = object[key];
|
|
342
371
|
const remaining = (0, import_omit.default)(object, [key]);
|
|
@@ -382,7 +411,11 @@ function findSchemaDefinitionRecursive($ref, rootSchema = {}, recurseList = [],
|
|
|
382
411
|
const [remaining, theRef] = splitKeyElementFromObject(REF_KEY, current);
|
|
383
412
|
const subSchema = findSchemaDefinitionRecursive(theRef, rootSchema, [...recurseList, ref], baseURI);
|
|
384
413
|
if (Object.keys(remaining).length > 0) {
|
|
385
|
-
|
|
414
|
+
if (rootSchema[SCHEMA_KEY] === JSON_SCHEMA_DRAFT_2019_09 || rootSchema[SCHEMA_KEY] === JSON_SCHEMA_DRAFT_2020_12) {
|
|
415
|
+
return { [ALL_OF_KEY]: [remaining, subSchema] };
|
|
416
|
+
} else {
|
|
417
|
+
return { ...remaining, ...subSchema };
|
|
418
|
+
}
|
|
386
419
|
}
|
|
387
420
|
return subSchema;
|
|
388
421
|
}
|
|
@@ -769,7 +802,7 @@ function stubExistingAdditionalProperties(validator, theSchema, rootSchema, aFor
|
|
|
769
802
|
if (!(0, import_isEmpty2.default)(matchingProperties)) {
|
|
770
803
|
schema.properties[key] = retrieveSchema(
|
|
771
804
|
validator,
|
|
772
|
-
{
|
|
805
|
+
{ [ALL_OF_KEY]: Object.values(matchingProperties) },
|
|
773
806
|
rootSchema,
|
|
774
807
|
(0, import_get5.default)(formData, [key]),
|
|
775
808
|
experimental_customMergeAllOf
|
|
@@ -784,7 +817,7 @@ function stubExistingAdditionalProperties(validator, theSchema, rootSchema, aFor
|
|
|
784
817
|
if (REF_KEY in schema.additionalProperties) {
|
|
785
818
|
additionalProperties = retrieveSchema(
|
|
786
819
|
validator,
|
|
787
|
-
{
|
|
820
|
+
{ [REF_KEY]: (0, import_get5.default)(schema.additionalProperties, [REF_KEY]) },
|
|
788
821
|
rootSchema,
|
|
789
822
|
formData,
|
|
790
823
|
experimental_customMergeAllOf
|
|
@@ -1391,7 +1424,7 @@ function mergeDefaultsWithFormData(defaults, formData, mergeExtraArrayDefaults =
|
|
|
1391
1424
|
return acc2;
|
|
1392
1425
|
}
|
|
1393
1426
|
acc2[key] = mergeDefaultsWithFormData(
|
|
1394
|
-
(0, import_get10.default)(defaults, key)
|
|
1427
|
+
(0, import_get10.default)(defaults, key),
|
|
1395
1428
|
keyValue,
|
|
1396
1429
|
mergeExtraArrayDefaults,
|
|
1397
1430
|
defaultSupercedesUndefined,
|
|
@@ -1551,8 +1584,12 @@ function getInnerSchemaForArrayItem(schema, additionalItems = 0 /* Ignore */, id
|
|
|
1551
1584
|
}
|
|
1552
1585
|
function maybeAddDefaultToObject(obj, key, computedDefault, includeUndefinedValues, isParentRequired, requiredFields = [], experimental_defaultFormStateBehavior = {}, isConst = false) {
|
|
1553
1586
|
const { emptyObjectFields = "populateAllDefaults" } = experimental_defaultFormStateBehavior;
|
|
1554
|
-
if (includeUndefinedValues || isConst) {
|
|
1587
|
+
if (includeUndefinedValues === true || isConst) {
|
|
1555
1588
|
obj[key] = computedDefault;
|
|
1589
|
+
} else if (includeUndefinedValues === "excludeObjectChildren") {
|
|
1590
|
+
if (!isObject(computedDefault) || !(0, import_isEmpty4.default)(computedDefault)) {
|
|
1591
|
+
obj[key] = computedDefault;
|
|
1592
|
+
}
|
|
1556
1593
|
} else if (emptyObjectFields !== "skipDefaults") {
|
|
1557
1594
|
const isSelfOrParentRequired = isParentRequired === void 0 ? requiredFields.includes(key) : isParentRequired;
|
|
1558
1595
|
if (isObject(computedDefault)) {
|
|
@@ -2311,6 +2348,7 @@ function toPathSchema(validator, schema, name = "", rootSchema, formData, experi
|
|
|
2311
2348
|
}
|
|
2312
2349
|
|
|
2313
2350
|
// src/createSchemaUtils.ts
|
|
2351
|
+
var import_get16 = __toESM(require("lodash/get"), 1);
|
|
2314
2352
|
var SchemaUtils = class {
|
|
2315
2353
|
/** Constructs the `SchemaUtils` instance with the given `validator` and `rootSchema` stored as instance variables
|
|
2316
2354
|
*
|
|
@@ -2320,7 +2358,11 @@ var SchemaUtils = class {
|
|
|
2320
2358
|
* @param [experimental_customMergeAllOf] - Optional function that allows for custom merging of `allOf` schemas
|
|
2321
2359
|
*/
|
|
2322
2360
|
constructor(validator, rootSchema, experimental_defaultFormStateBehavior, experimental_customMergeAllOf) {
|
|
2323
|
-
|
|
2361
|
+
if (rootSchema[SCHEMA_KEY] === JSON_SCHEMA_DRAFT_2020_12) {
|
|
2362
|
+
this.rootSchema = makeAllReferencesAbsolute(rootSchema, (0, import_get16.default)(rootSchema, ID_KEY, "#"));
|
|
2363
|
+
} else {
|
|
2364
|
+
this.rootSchema = rootSchema;
|
|
2365
|
+
}
|
|
2324
2366
|
this.validator = validator;
|
|
2325
2367
|
this.experimental_defaultFormStateBehavior = experimental_defaultFormStateBehavior;
|
|
2326
2368
|
this.experimental_customMergeAllOf = experimental_customMergeAllOf;
|
|
@@ -2651,6 +2693,31 @@ function dateRangeOptions(start, stop) {
|
|
|
2651
2693
|
return options;
|
|
2652
2694
|
}
|
|
2653
2695
|
|
|
2696
|
+
// src/shallowEquals.ts
|
|
2697
|
+
function shallowEquals(a, b) {
|
|
2698
|
+
if (Object.is(a, b)) {
|
|
2699
|
+
return true;
|
|
2700
|
+
}
|
|
2701
|
+
if (a == null || b == null) {
|
|
2702
|
+
return false;
|
|
2703
|
+
}
|
|
2704
|
+
if (typeof a !== "object" || typeof b !== "object") {
|
|
2705
|
+
return false;
|
|
2706
|
+
}
|
|
2707
|
+
const keysA = Object.keys(a);
|
|
2708
|
+
const keysB = Object.keys(b);
|
|
2709
|
+
if (keysA.length !== keysB.length) {
|
|
2710
|
+
return false;
|
|
2711
|
+
}
|
|
2712
|
+
for (let i = 0; i < keysA.length; i++) {
|
|
2713
|
+
const key = keysA[i];
|
|
2714
|
+
if (!Object.prototype.hasOwnProperty.call(b, key) || !Object.is(a[key], b[key])) {
|
|
2715
|
+
return false;
|
|
2716
|
+
}
|
|
2717
|
+
}
|
|
2718
|
+
return true;
|
|
2719
|
+
}
|
|
2720
|
+
|
|
2654
2721
|
// src/replaceStringParameters.ts
|
|
2655
2722
|
function replaceStringParameters(inputString, params) {
|
|
2656
2723
|
let output = inputString;
|
|
@@ -2723,7 +2790,7 @@ function enumOptionsSelectValue(valueIndex, selected, allEnumOptions = []) {
|
|
|
2723
2790
|
|
|
2724
2791
|
// src/ErrorSchemaBuilder.ts
|
|
2725
2792
|
var import_cloneDeep = __toESM(require("lodash/cloneDeep"), 1);
|
|
2726
|
-
var
|
|
2793
|
+
var import_get17 = __toESM(require("lodash/get"), 1);
|
|
2727
2794
|
var import_set3 = __toESM(require("lodash/set"), 1);
|
|
2728
2795
|
var import_setWith = __toESM(require("lodash/setWith"), 1);
|
|
2729
2796
|
var ErrorSchemaBuilder = class {
|
|
@@ -2752,7 +2819,7 @@ var ErrorSchemaBuilder = class {
|
|
|
2752
2819
|
*/
|
|
2753
2820
|
getOrCreateErrorBlock(pathOfError) {
|
|
2754
2821
|
const hasPath = Array.isArray(pathOfError) && pathOfError.length > 0 || typeof pathOfError === "string";
|
|
2755
|
-
let errorBlock = hasPath ? (0,
|
|
2822
|
+
let errorBlock = hasPath ? (0, import_get17.default)(this.errorSchema, pathOfError) : this.errorSchema;
|
|
2756
2823
|
if (!errorBlock && pathOfError) {
|
|
2757
2824
|
errorBlock = {};
|
|
2758
2825
|
(0, import_setWith.default)(this.errorSchema, pathOfError, errorBlock, Object);
|
|
@@ -2778,7 +2845,7 @@ var ErrorSchemaBuilder = class {
|
|
|
2778
2845
|
*/
|
|
2779
2846
|
addErrors(errorOrList, pathOfError) {
|
|
2780
2847
|
const errorBlock = this.getOrCreateErrorBlock(pathOfError);
|
|
2781
|
-
let errorsList = (0,
|
|
2848
|
+
let errorsList = (0, import_get17.default)(errorBlock, ERRORS_KEY);
|
|
2782
2849
|
if (!Array.isArray(errorsList)) {
|
|
2783
2850
|
errorsList = [];
|
|
2784
2851
|
errorBlock[ERRORS_KEY] = errorsList;
|
|
@@ -2927,9 +2994,9 @@ function getTemplate(name, registry, uiOptions = {}) {
|
|
|
2927
2994
|
|
|
2928
2995
|
// src/getTestIds.ts
|
|
2929
2996
|
var import_nanoid = require("nanoid");
|
|
2930
|
-
var
|
|
2997
|
+
var import_get18 = __toESM(require("lodash/get"), 1);
|
|
2931
2998
|
function getTestIds() {
|
|
2932
|
-
if (typeof process === "undefined" || (0,
|
|
2999
|
+
if (typeof process === "undefined" || (0, import_get18.default)(process, "env.NODE_ENV") !== "test") {
|
|
2933
3000
|
return {};
|
|
2934
3001
|
}
|
|
2935
3002
|
const ids = /* @__PURE__ */ new Map();
|
|
@@ -2949,7 +3016,7 @@ function getTestIds() {
|
|
|
2949
3016
|
// src/getWidget.tsx
|
|
2950
3017
|
var import_react = require("react");
|
|
2951
3018
|
var import_react_is = __toESM(require("react-is"), 1);
|
|
2952
|
-
var
|
|
3019
|
+
var import_get19 = __toESM(require("lodash/get"), 1);
|
|
2953
3020
|
var import_set4 = __toESM(require("lodash/set"), 1);
|
|
2954
3021
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
2955
3022
|
var widgetMap = {
|
|
@@ -3005,7 +3072,7 @@ var widgetMap = {
|
|
|
3005
3072
|
}
|
|
3006
3073
|
};
|
|
3007
3074
|
function mergeWidgetOptions(AWidget) {
|
|
3008
|
-
let MergedWidget = (0,
|
|
3075
|
+
let MergedWidget = (0, import_get19.default)(AWidget, "MergedWidget");
|
|
3009
3076
|
if (!MergedWidget) {
|
|
3010
3077
|
const defaultOptions = AWidget.defaultProps && AWidget.defaultProps.options || {};
|
|
3011
3078
|
MergedWidget = ({ options, ...props }) => {
|
|
@@ -3118,14 +3185,14 @@ function localToUTC(dateString) {
|
|
|
3118
3185
|
}
|
|
3119
3186
|
|
|
3120
3187
|
// src/lookupFromFormContext.ts
|
|
3121
|
-
var
|
|
3188
|
+
var import_get20 = __toESM(require("lodash/get"), 1);
|
|
3122
3189
|
var import_has6 = __toESM(require("lodash/has"), 1);
|
|
3123
3190
|
function lookupFromFormContext(regOrFc, toLookup, fallback) {
|
|
3124
3191
|
const lookupPath = [LOOKUP_MAP_NAME];
|
|
3125
3192
|
if ((0, import_has6.default)(regOrFc, FORM_CONTEXT_NAME)) {
|
|
3126
3193
|
lookupPath.unshift(FORM_CONTEXT_NAME);
|
|
3127
3194
|
}
|
|
3128
|
-
return (0,
|
|
3195
|
+
return (0, import_get20.default)(regOrFc, [...lookupPath, toLookup], fallback);
|
|
3129
3196
|
}
|
|
3130
3197
|
|
|
3131
3198
|
// src/orderProperties.ts
|
|
@@ -3206,7 +3273,14 @@ function schemaRequiresTrueValue(schema) {
|
|
|
3206
3273
|
}
|
|
3207
3274
|
|
|
3208
3275
|
// src/shouldRender.ts
|
|
3209
|
-
function shouldRender(component, nextProps, nextState) {
|
|
3276
|
+
function shouldRender(component, nextProps, nextState, updateStrategy = "customDeep") {
|
|
3277
|
+
if (updateStrategy === "always") {
|
|
3278
|
+
return true;
|
|
3279
|
+
}
|
|
3280
|
+
if (updateStrategy === "shallow") {
|
|
3281
|
+
const { props: props2, state: state2 } = component;
|
|
3282
|
+
return !shallowEquals(props2, nextProps) || !shallowEquals(state2, nextState);
|
|
3283
|
+
}
|
|
3210
3284
|
const { props, state } = component;
|
|
3211
3285
|
return !deepEquals(props, nextProps) || !deepEquals(state, nextState);
|
|
3212
3286
|
}
|
|
@@ -3353,7 +3427,7 @@ function withIdRefPrefix(schemaNode) {
|
|
|
3353
3427
|
var import_keys = __toESM(require("lodash/keys"), 1);
|
|
3354
3428
|
var import_pickBy = __toESM(require("lodash/pickBy"), 1);
|
|
3355
3429
|
var import_isPlainObject4 = __toESM(require("lodash/isPlainObject"), 1);
|
|
3356
|
-
var
|
|
3430
|
+
var import_get21 = __toESM(require("lodash/get"), 1);
|
|
3357
3431
|
var import_difference = __toESM(require("lodash/difference"), 1);
|
|
3358
3432
|
function getChangedFields(a, b) {
|
|
3359
3433
|
const aIsPlainObject = (0, import_isPlainObject4.default)(a);
|
|
@@ -3366,7 +3440,7 @@ function getChangedFields(a, b) {
|
|
|
3366
3440
|
} else if (!aIsPlainObject && bIsPlainObject) {
|
|
3367
3441
|
return (0, import_keys.default)(b);
|
|
3368
3442
|
} else {
|
|
3369
|
-
const unequalFields = (0, import_keys.default)((0, import_pickBy.default)(a, (value, key) => !deepEquals(value, (0,
|
|
3443
|
+
const unequalFields = (0, import_keys.default)((0, import_pickBy.default)(a, (value, key) => !deepEquals(value, (0, import_get21.default)(b, key))));
|
|
3370
3444
|
const diffFields = (0, import_difference.default)((0, import_keys.default)(b), (0, import_keys.default)(a));
|
|
3371
3445
|
return [...unequalFields, ...diffFields];
|
|
3372
3446
|
}
|
|
@@ -3411,7 +3485,7 @@ var TranslatableString = /* @__PURE__ */ ((TranslatableString2) => {
|
|
|
3411
3485
|
var import_forEach = __toESM(require("lodash/forEach"), 1);
|
|
3412
3486
|
|
|
3413
3487
|
// src/parser/ParserValidator.ts
|
|
3414
|
-
var
|
|
3488
|
+
var import_get22 = __toESM(require("lodash/get"), 1);
|
|
3415
3489
|
var ParserValidator = class {
|
|
3416
3490
|
/** Construct the ParserValidator for the given `rootSchema`. This `rootSchema` will be stashed in the `schemaMap`
|
|
3417
3491
|
* first.
|
|
@@ -3437,7 +3511,7 @@ var ParserValidator = class {
|
|
|
3437
3511
|
* @param hash - The hash value at which to map the schema
|
|
3438
3512
|
*/
|
|
3439
3513
|
addSchema(schema, hash) {
|
|
3440
|
-
const key = (0,
|
|
3514
|
+
const key = (0, import_get22.default)(schema, ID_KEY, hash);
|
|
3441
3515
|
const identifiedSchema = { ...schema, [ID_KEY]: key };
|
|
3442
3516
|
const existing = this.schemaMap[key];
|
|
3443
3517
|
if (!existing) {
|