@rjsf/utils 6.0.0-beta.11 → 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 +102 -21
- package/dist/index.js.map +4 -4
- package/dist/utils.esm.js +102 -21
- package/dist/utils.esm.js.map +4 -4
- package/dist/utils.umd.js +100 -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 +16 -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 +7 -0
- package/package.json +1 -1
- package/src/constants.ts +1 -0
- package/src/createSchemaUtils.ts +16 -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 +7 -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,11 +2358,22 @@ 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;
|
|
2327
2369
|
}
|
|
2370
|
+
/** Returns the `rootSchema` in the `SchemaUtilsType`
|
|
2371
|
+
*
|
|
2372
|
+
* @returns - The `rootSchema`
|
|
2373
|
+
*/
|
|
2374
|
+
getRootSchema() {
|
|
2375
|
+
return this.rootSchema;
|
|
2376
|
+
}
|
|
2328
2377
|
/** Returns the `ValidatorType` in the `SchemaUtilsType`
|
|
2329
2378
|
*
|
|
2330
2379
|
* @returns - The `ValidatorType`
|
|
@@ -2644,6 +2693,31 @@ function dateRangeOptions(start, stop) {
|
|
|
2644
2693
|
return options;
|
|
2645
2694
|
}
|
|
2646
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
|
+
|
|
2647
2721
|
// src/replaceStringParameters.ts
|
|
2648
2722
|
function replaceStringParameters(inputString, params) {
|
|
2649
2723
|
let output = inputString;
|
|
@@ -2716,7 +2790,7 @@ function enumOptionsSelectValue(valueIndex, selected, allEnumOptions = []) {
|
|
|
2716
2790
|
|
|
2717
2791
|
// src/ErrorSchemaBuilder.ts
|
|
2718
2792
|
var import_cloneDeep = __toESM(require("lodash/cloneDeep"), 1);
|
|
2719
|
-
var
|
|
2793
|
+
var import_get17 = __toESM(require("lodash/get"), 1);
|
|
2720
2794
|
var import_set3 = __toESM(require("lodash/set"), 1);
|
|
2721
2795
|
var import_setWith = __toESM(require("lodash/setWith"), 1);
|
|
2722
2796
|
var ErrorSchemaBuilder = class {
|
|
@@ -2745,7 +2819,7 @@ var ErrorSchemaBuilder = class {
|
|
|
2745
2819
|
*/
|
|
2746
2820
|
getOrCreateErrorBlock(pathOfError) {
|
|
2747
2821
|
const hasPath = Array.isArray(pathOfError) && pathOfError.length > 0 || typeof pathOfError === "string";
|
|
2748
|
-
let errorBlock = hasPath ? (0,
|
|
2822
|
+
let errorBlock = hasPath ? (0, import_get17.default)(this.errorSchema, pathOfError) : this.errorSchema;
|
|
2749
2823
|
if (!errorBlock && pathOfError) {
|
|
2750
2824
|
errorBlock = {};
|
|
2751
2825
|
(0, import_setWith.default)(this.errorSchema, pathOfError, errorBlock, Object);
|
|
@@ -2771,7 +2845,7 @@ var ErrorSchemaBuilder = class {
|
|
|
2771
2845
|
*/
|
|
2772
2846
|
addErrors(errorOrList, pathOfError) {
|
|
2773
2847
|
const errorBlock = this.getOrCreateErrorBlock(pathOfError);
|
|
2774
|
-
let errorsList = (0,
|
|
2848
|
+
let errorsList = (0, import_get17.default)(errorBlock, ERRORS_KEY);
|
|
2775
2849
|
if (!Array.isArray(errorsList)) {
|
|
2776
2850
|
errorsList = [];
|
|
2777
2851
|
errorBlock[ERRORS_KEY] = errorsList;
|
|
@@ -2920,9 +2994,9 @@ function getTemplate(name, registry, uiOptions = {}) {
|
|
|
2920
2994
|
|
|
2921
2995
|
// src/getTestIds.ts
|
|
2922
2996
|
var import_nanoid = require("nanoid");
|
|
2923
|
-
var
|
|
2997
|
+
var import_get18 = __toESM(require("lodash/get"), 1);
|
|
2924
2998
|
function getTestIds() {
|
|
2925
|
-
if (typeof process === "undefined" || (0,
|
|
2999
|
+
if (typeof process === "undefined" || (0, import_get18.default)(process, "env.NODE_ENV") !== "test") {
|
|
2926
3000
|
return {};
|
|
2927
3001
|
}
|
|
2928
3002
|
const ids = /* @__PURE__ */ new Map();
|
|
@@ -2942,7 +3016,7 @@ function getTestIds() {
|
|
|
2942
3016
|
// src/getWidget.tsx
|
|
2943
3017
|
var import_react = require("react");
|
|
2944
3018
|
var import_react_is = __toESM(require("react-is"), 1);
|
|
2945
|
-
var
|
|
3019
|
+
var import_get19 = __toESM(require("lodash/get"), 1);
|
|
2946
3020
|
var import_set4 = __toESM(require("lodash/set"), 1);
|
|
2947
3021
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
2948
3022
|
var widgetMap = {
|
|
@@ -2998,7 +3072,7 @@ var widgetMap = {
|
|
|
2998
3072
|
}
|
|
2999
3073
|
};
|
|
3000
3074
|
function mergeWidgetOptions(AWidget) {
|
|
3001
|
-
let MergedWidget = (0,
|
|
3075
|
+
let MergedWidget = (0, import_get19.default)(AWidget, "MergedWidget");
|
|
3002
3076
|
if (!MergedWidget) {
|
|
3003
3077
|
const defaultOptions = AWidget.defaultProps && AWidget.defaultProps.options || {};
|
|
3004
3078
|
MergedWidget = ({ options, ...props }) => {
|
|
@@ -3111,14 +3185,14 @@ function localToUTC(dateString) {
|
|
|
3111
3185
|
}
|
|
3112
3186
|
|
|
3113
3187
|
// src/lookupFromFormContext.ts
|
|
3114
|
-
var
|
|
3188
|
+
var import_get20 = __toESM(require("lodash/get"), 1);
|
|
3115
3189
|
var import_has6 = __toESM(require("lodash/has"), 1);
|
|
3116
3190
|
function lookupFromFormContext(regOrFc, toLookup, fallback) {
|
|
3117
3191
|
const lookupPath = [LOOKUP_MAP_NAME];
|
|
3118
3192
|
if ((0, import_has6.default)(regOrFc, FORM_CONTEXT_NAME)) {
|
|
3119
3193
|
lookupPath.unshift(FORM_CONTEXT_NAME);
|
|
3120
3194
|
}
|
|
3121
|
-
return (0,
|
|
3195
|
+
return (0, import_get20.default)(regOrFc, [...lookupPath, toLookup], fallback);
|
|
3122
3196
|
}
|
|
3123
3197
|
|
|
3124
3198
|
// src/orderProperties.ts
|
|
@@ -3199,7 +3273,14 @@ function schemaRequiresTrueValue(schema) {
|
|
|
3199
3273
|
}
|
|
3200
3274
|
|
|
3201
3275
|
// src/shouldRender.ts
|
|
3202
|
-
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
|
+
}
|
|
3203
3284
|
const { props, state } = component;
|
|
3204
3285
|
return !deepEquals(props, nextProps) || !deepEquals(state, nextState);
|
|
3205
3286
|
}
|
|
@@ -3346,7 +3427,7 @@ function withIdRefPrefix(schemaNode) {
|
|
|
3346
3427
|
var import_keys = __toESM(require("lodash/keys"), 1);
|
|
3347
3428
|
var import_pickBy = __toESM(require("lodash/pickBy"), 1);
|
|
3348
3429
|
var import_isPlainObject4 = __toESM(require("lodash/isPlainObject"), 1);
|
|
3349
|
-
var
|
|
3430
|
+
var import_get21 = __toESM(require("lodash/get"), 1);
|
|
3350
3431
|
var import_difference = __toESM(require("lodash/difference"), 1);
|
|
3351
3432
|
function getChangedFields(a, b) {
|
|
3352
3433
|
const aIsPlainObject = (0, import_isPlainObject4.default)(a);
|
|
@@ -3359,7 +3440,7 @@ function getChangedFields(a, b) {
|
|
|
3359
3440
|
} else if (!aIsPlainObject && bIsPlainObject) {
|
|
3360
3441
|
return (0, import_keys.default)(b);
|
|
3361
3442
|
} else {
|
|
3362
|
-
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))));
|
|
3363
3444
|
const diffFields = (0, import_difference.default)((0, import_keys.default)(b), (0, import_keys.default)(a));
|
|
3364
3445
|
return [...unequalFields, ...diffFields];
|
|
3365
3446
|
}
|
|
@@ -3404,7 +3485,7 @@ var TranslatableString = /* @__PURE__ */ ((TranslatableString2) => {
|
|
|
3404
3485
|
var import_forEach = __toESM(require("lodash/forEach"), 1);
|
|
3405
3486
|
|
|
3406
3487
|
// src/parser/ParserValidator.ts
|
|
3407
|
-
var
|
|
3488
|
+
var import_get22 = __toESM(require("lodash/get"), 1);
|
|
3408
3489
|
var ParserValidator = class {
|
|
3409
3490
|
/** Construct the ParserValidator for the given `rootSchema`. This `rootSchema` will be stashed in the `schemaMap`
|
|
3410
3491
|
* first.
|
|
@@ -3430,7 +3511,7 @@ var ParserValidator = class {
|
|
|
3430
3511
|
* @param hash - The hash value at which to map the schema
|
|
3431
3512
|
*/
|
|
3432
3513
|
addSchema(schema, hash) {
|
|
3433
|
-
const key = (0,
|
|
3514
|
+
const key = (0, import_get22.default)(schema, ID_KEY, hash);
|
|
3434
3515
|
const identifiedSchema = { ...schema, [ID_KEY]: key };
|
|
3435
3516
|
const existing = this.schemaMap[key];
|
|
3436
3517
|
if (!existing) {
|