@rjsf/utils 6.0.0-beta.2 → 6.0.0-beta.21
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 → index.cjs} +396 -264
- package/dist/index.cjs.map +7 -0
- package/dist/utils.esm.js +395 -263
- package/dist/utils.esm.js.map +4 -4
- package/dist/utils.umd.js +368 -249
- package/lib/ErrorSchemaBuilder.d.ts +2 -2
- package/lib/canExpand.d.ts +1 -1
- package/lib/constants.d.ts +3 -0
- package/lib/constants.js +3 -0
- package/lib/constants.js.map +1 -1
- package/lib/createSchemaUtils.js +25 -18
- package/lib/createSchemaUtils.js.map +1 -1
- package/lib/enums.d.ts +9 -3
- package/lib/enums.js +9 -3
- package/lib/enums.js.map +1 -1
- package/lib/findSchemaDefinition.d.ts +7 -1
- package/lib/findSchemaDefinition.js +48 -6
- package/lib/findSchemaDefinition.js.map +1 -1
- package/lib/getTestIds.js +2 -2
- package/lib/getTestIds.js.map +1 -1
- package/lib/getUiOptions.js +4 -0
- package/lib/getUiOptions.js.map +1 -1
- package/lib/getWidget.js +3 -3
- package/lib/getWidget.js.map +1 -1
- package/lib/guessType.d.ts +1 -1
- package/lib/idGenerators.d.ts +22 -15
- package/lib/idGenerators.js +17 -8
- package/lib/idGenerators.js.map +1 -1
- package/lib/index.d.ts +10 -4
- package/lib/index.js +9 -4
- package/lib/index.js.map +1 -1
- package/lib/isFormDataAvailable.d.ts +7 -0
- package/lib/isFormDataAvailable.js +13 -0
- package/lib/isFormDataAvailable.js.map +1 -0
- package/lib/isRootSchema.d.ts +13 -0
- package/lib/isRootSchema.js +25 -0
- package/lib/isRootSchema.js.map +1 -0
- package/lib/mergeDefaultsWithFormData.js +14 -2
- package/lib/mergeDefaultsWithFormData.js.map +1 -1
- package/lib/schema/findFieldInSchema.d.ts +1 -1
- package/lib/schema/findFieldInSchema.js +1 -1
- package/lib/schema/getDefaultFormState.d.ts +17 -3
- package/lib/schema/getDefaultFormState.js +73 -27
- package/lib/schema/getDefaultFormState.js.map +1 -1
- package/lib/schema/getDisplayLabel.js +2 -2
- package/lib/schema/getDisplayLabel.js.map +1 -1
- package/lib/schema/index.d.ts +1 -2
- package/lib/schema/index.js +1 -2
- package/lib/schema/index.js.map +1 -1
- package/lib/schema/retrieveSchema.d.ts +11 -6
- package/lib/schema/retrieveSchema.js +42 -19
- 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/shouldRenderOptionalField.d.ts +18 -0
- package/lib/shouldRenderOptionalField.js +47 -0
- package/lib/shouldRenderOptionalField.js.map +1 -0
- package/lib/toFieldPathId.d.ts +12 -0
- package/lib/toFieldPathId.js +19 -0
- package/lib/toFieldPathId.js.map +1 -0
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/lib/types.d.ts +136 -81
- package/lib/validationDataMerge.d.ts +2 -1
- package/lib/validationDataMerge.js +3 -2
- package/lib/validationDataMerge.js.map +1 -1
- package/package.json +13 -14
- package/src/ErrorSchemaBuilder.ts +2 -2
- package/src/constants.ts +3 -0
- package/src/createSchemaUtils.ts +25 -26
- package/src/enums.ts +9 -3
- package/src/findSchemaDefinition.ts +55 -6
- package/src/getTestIds.ts +2 -2
- package/src/getUiOptions.ts +4 -0
- package/src/getWidget.tsx +3 -3
- package/src/idGenerators.ts +35 -25
- package/src/index.ts +16 -2
- package/src/isFormDataAvailable.ts +13 -0
- package/src/isRootSchema.ts +30 -0
- package/src/mergeDefaultsWithFormData.ts +16 -2
- package/src/schema/findFieldInSchema.ts +1 -1
- package/src/schema/getDefaultFormState.ts +95 -33
- package/src/schema/getDisplayLabel.ts +2 -2
- package/src/schema/index.ts +0 -2
- package/src/schema/retrieveSchema.ts +46 -10
- package/src/shallowEquals.ts +41 -0
- package/src/shouldRender.ts +27 -2
- package/src/shouldRenderOptionalField.ts +56 -0
- package/src/toFieldPathId.ts +24 -0
- package/src/types.ts +156 -84
- package/src/validationDataMerge.ts +7 -1
- package/dist/index.js.map +0 -7
- package/lib/schema/toIdSchema.d.ts +0 -14
- package/lib/schema/toIdSchema.js +0 -62
- package/lib/schema/toIdSchema.js.map +0 -1
- package/src/schema/toIdSchema.ts +0 -131
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-allof'), require('jsonpointer'), require('lodash/omit'), require('lodash/isObject'), require('lodash/isEmpty'), 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('
|
|
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-allof', 'jsonpointer', 'lodash/omit', 'lodash/isObject', 'lodash/isEmpty', 'fast-uri', 'lodash/isString', 'lodash/union', 'lodash/isNumber', 'lodash/reduce', 'lodash/isNil', 'lodash/cloneDeep', 'lodash/setWith', '
|
|
4
|
-
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global["@rjsf/utils"] = {}, global.
|
|
5
|
-
})(this, (function (exports,
|
|
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-allof'), require('jsonpointer'), require('lodash/omit'), require('lodash/isObject'), require('lodash/isEmpty'), 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', 'json-schema-merge-allof', 'jsonpointer', 'lodash/omit', 'lodash/isObject', 'lodash/isEmpty', '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.get13, global.has5, global.isEqual2, global.set, global.times, global.transform, global.merge, global.flattenDeep, global.uniq, global.mergeAllOf, global.jsonpointer, global.omit, global.isObject2, global.isEmpty4, global.UriResolver, global.isString, global.union, global.isNumber, global.reduce, global.isNil, 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, get13, has5, isEqual2, set, times, transform, merge, flattenDeep, uniq, mergeAllOf, jsonpointer, omit, isObject2, isEmpty4, UriResolver, isString, union, isNumber, reduce, isNil, 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) {
|
|
@@ -72,6 +72,8 @@
|
|
|
72
72
|
var SUBMIT_BTN_OPTIONS_KEY = "submitButtonOptions";
|
|
73
73
|
var REF_KEY = "$ref";
|
|
74
74
|
var SCHEMA_KEY = "$schema";
|
|
75
|
+
var DEFAULT_ID_PREFIX = "root";
|
|
76
|
+
var DEFAULT_ID_SEPARATOR = "_";
|
|
75
77
|
var DISCRIMINATOR_PATH = ["discriminator", "propertyName"];
|
|
76
78
|
var FORM_CONTEXT_NAME = "formContext";
|
|
77
79
|
var LOOKUP_MAP_NAME = "layoutGridLookupMap";
|
|
@@ -81,10 +83,14 @@
|
|
|
81
83
|
var UI_WIDGET_KEY = "ui:widget";
|
|
82
84
|
var UI_OPTIONS_KEY = "ui:options";
|
|
83
85
|
var UI_GLOBAL_OPTIONS_KEY = "ui:globalOptions";
|
|
86
|
+
var JSON_SCHEMA_DRAFT_2019_09 = "https://json-schema.org/draft/2019-09/schema";
|
|
84
87
|
var JSON_SCHEMA_DRAFT_2020_12 = "https://json-schema.org/draft/2020-12/schema";
|
|
85
88
|
|
|
86
89
|
// src/getUiOptions.ts
|
|
87
90
|
function getUiOptions(uiSchema = {}, globalOptions = {}) {
|
|
91
|
+
if (!uiSchema) {
|
|
92
|
+
return { ...globalOptions };
|
|
93
|
+
}
|
|
88
94
|
return Object.keys(uiSchema).filter((key) => key.indexOf("ui:") === 0).reduce(
|
|
89
95
|
(options, key) => {
|
|
90
96
|
const value = uiSchema[key];
|
|
@@ -130,7 +136,7 @@
|
|
|
130
136
|
return { ...acc, [key]: createErrorHandler(value) };
|
|
131
137
|
}, handler);
|
|
132
138
|
}
|
|
133
|
-
if (
|
|
139
|
+
if (isPlainObject2(formData)) {
|
|
134
140
|
const formObject = formData;
|
|
135
141
|
return Object.keys(formObject).reduce((acc, key) => {
|
|
136
142
|
return { ...acc, [key]: createErrorHandler(formObject[key]) };
|
|
@@ -151,7 +157,16 @@
|
|
|
151
157
|
return schema;
|
|
152
158
|
}
|
|
153
159
|
for (const subSchema of Object.values(schema)) {
|
|
154
|
-
if (
|
|
160
|
+
if (Array.isArray(subSchema)) {
|
|
161
|
+
for (const item of subSchema) {
|
|
162
|
+
if (isObject2(item)) {
|
|
163
|
+
const result = findEmbeddedSchemaRecursive(item, ref);
|
|
164
|
+
if (result !== void 0) {
|
|
165
|
+
return result;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
} else if (isObject2(subSchema)) {
|
|
155
170
|
const result = findEmbeddedSchemaRecursive(subSchema, ref);
|
|
156
171
|
if (result !== void 0) {
|
|
157
172
|
return result;
|
|
@@ -160,12 +175,29 @@
|
|
|
160
175
|
}
|
|
161
176
|
return void 0;
|
|
162
177
|
}
|
|
178
|
+
function makeAllReferencesAbsolute(schema, baseURI) {
|
|
179
|
+
const currentURI = get13(schema, ID_KEY, baseURI);
|
|
180
|
+
if (REF_KEY in schema) {
|
|
181
|
+
schema = { ...schema, [REF_KEY]: UriResolver.resolve(currentURI, schema[REF_KEY]) };
|
|
182
|
+
}
|
|
183
|
+
for (const [key, subSchema] of Object.entries(schema)) {
|
|
184
|
+
if (Array.isArray(subSchema)) {
|
|
185
|
+
schema = {
|
|
186
|
+
...schema,
|
|
187
|
+
[key]: subSchema.map((item) => isObject2(item) ? makeAllReferencesAbsolute(item, currentURI) : item)
|
|
188
|
+
};
|
|
189
|
+
} else if (isObject2(subSchema)) {
|
|
190
|
+
schema = { ...schema, [key]: makeAllReferencesAbsolute(subSchema, currentURI) };
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
return schema;
|
|
194
|
+
}
|
|
163
195
|
function splitKeyElementFromObject(key, object) {
|
|
164
196
|
const value = object[key];
|
|
165
197
|
const remaining = omit(object, [key]);
|
|
166
198
|
return [remaining, value];
|
|
167
199
|
}
|
|
168
|
-
function findSchemaDefinitionRecursive($ref, rootSchema = {}, recurseList = [], baseURI =
|
|
200
|
+
function findSchemaDefinitionRecursive($ref, rootSchema = {}, recurseList = [], baseURI = get13(rootSchema, [ID_KEY])) {
|
|
169
201
|
const ref = $ref || "";
|
|
170
202
|
let current = void 0;
|
|
171
203
|
if (ref.startsWith("#")) {
|
|
@@ -184,7 +216,7 @@
|
|
|
184
216
|
current = findEmbeddedSchemaRecursive(rootSchema, refId.replace(/\/$/, ""));
|
|
185
217
|
if (current !== void 0) {
|
|
186
218
|
baseURI = current[ID_KEY];
|
|
187
|
-
if (!
|
|
219
|
+
if (!isEmpty4(refAnchor)) {
|
|
188
220
|
current = jsonpointer.get(current, decodeURIComponent(refAnchor.join("#")));
|
|
189
221
|
}
|
|
190
222
|
}
|
|
@@ -205,19 +237,23 @@
|
|
|
205
237
|
const [remaining, theRef] = splitKeyElementFromObject(REF_KEY, current);
|
|
206
238
|
const subSchema = findSchemaDefinitionRecursive(theRef, rootSchema, [...recurseList, ref], baseURI);
|
|
207
239
|
if (Object.keys(remaining).length > 0) {
|
|
208
|
-
|
|
240
|
+
if (rootSchema[SCHEMA_KEY] === JSON_SCHEMA_DRAFT_2019_09 || rootSchema[SCHEMA_KEY] === JSON_SCHEMA_DRAFT_2020_12) {
|
|
241
|
+
return { [ALL_OF_KEY]: [remaining, subSchema] };
|
|
242
|
+
} else {
|
|
243
|
+
return { ...remaining, ...subSchema };
|
|
244
|
+
}
|
|
209
245
|
}
|
|
210
246
|
return subSchema;
|
|
211
247
|
}
|
|
212
248
|
return current;
|
|
213
249
|
}
|
|
214
|
-
function findSchemaDefinition($ref, rootSchema = {}, baseURI =
|
|
250
|
+
function findSchemaDefinition($ref, rootSchema = {}, baseURI = get13(rootSchema, [ID_KEY])) {
|
|
215
251
|
const recurseList = [];
|
|
216
252
|
return findSchemaDefinitionRecursive($ref, rootSchema, recurseList, baseURI);
|
|
217
253
|
}
|
|
218
254
|
function getDiscriminatorFieldFromSchema(schema) {
|
|
219
255
|
let discriminator;
|
|
220
|
-
const maybeString =
|
|
256
|
+
const maybeString = get13(schema, DISCRIMINATOR_PATH);
|
|
221
257
|
if (isString(maybeString)) {
|
|
222
258
|
discriminator = maybeString;
|
|
223
259
|
} else if (maybeString !== void 0) {
|
|
@@ -288,13 +324,13 @@
|
|
|
288
324
|
}
|
|
289
325
|
function getOptionMatchingSimpleDiscriminator(formData, options, discriminatorField) {
|
|
290
326
|
if (formData && discriminatorField) {
|
|
291
|
-
const value =
|
|
327
|
+
const value = get13(formData, discriminatorField);
|
|
292
328
|
if (value === void 0) {
|
|
293
329
|
return;
|
|
294
330
|
}
|
|
295
331
|
for (let i = 0; i < options.length; i++) {
|
|
296
332
|
const option = options[i];
|
|
297
|
-
const discriminator =
|
|
333
|
+
const discriminator = get13(option, [PROPERTIES_KEY, discriminatorField], {});
|
|
298
334
|
if (discriminator.type === "object" || discriminator.type === "array") {
|
|
299
335
|
continue;
|
|
300
336
|
}
|
|
@@ -321,8 +357,8 @@
|
|
|
321
357
|
for (let i = 0; i < options.length; i++) {
|
|
322
358
|
const option = options[i];
|
|
323
359
|
if (discriminatorField && has5(option, [PROPERTIES_KEY, discriminatorField])) {
|
|
324
|
-
const value =
|
|
325
|
-
const discriminator =
|
|
360
|
+
const value = get13(formData, discriminatorField);
|
|
361
|
+
const discriminator = get13(option, [PROPERTIES_KEY, discriminatorField], {});
|
|
326
362
|
if (validator.isValid(discriminator, value, rootSchema)) {
|
|
327
363
|
return i;
|
|
328
364
|
}
|
|
@@ -355,7 +391,7 @@
|
|
|
355
391
|
}
|
|
356
392
|
return 0;
|
|
357
393
|
}
|
|
358
|
-
function retrieveSchema(validator, schema, rootSchema = {}, rawFormData, experimental_customMergeAllOf) {
|
|
394
|
+
function retrieveSchema(validator, schema, rootSchema = {}, rawFormData, experimental_customMergeAllOf, resolveAnyOfOrOneOfRefs = false) {
|
|
359
395
|
return retrieveSchemaInternal(
|
|
360
396
|
validator,
|
|
361
397
|
schema,
|
|
@@ -363,7 +399,8 @@
|
|
|
363
399
|
rawFormData,
|
|
364
400
|
void 0,
|
|
365
401
|
void 0,
|
|
366
|
-
experimental_customMergeAllOf
|
|
402
|
+
experimental_customMergeAllOf,
|
|
403
|
+
resolveAnyOfOrOneOfRefs
|
|
367
404
|
)[0];
|
|
368
405
|
}
|
|
369
406
|
function resolveCondition(validator, schema, rootSchema, expandAllBranches, recurseList, formData, experimental_customMergeAllOf) {
|
|
@@ -452,14 +489,16 @@
|
|
|
452
489
|
{}
|
|
453
490
|
);
|
|
454
491
|
}
|
|
455
|
-
function resolveSchema(validator, schema, rootSchema, expandAllBranches, recurseList, formData, experimental_customMergeAllOf) {
|
|
492
|
+
function resolveSchema(validator, schema, rootSchema, expandAllBranches, recurseList, formData, experimental_customMergeAllOf, resolveAnyOfOrOneOfRefs) {
|
|
456
493
|
const updatedSchemas = resolveReference(
|
|
457
494
|
validator,
|
|
458
495
|
schema,
|
|
459
496
|
rootSchema,
|
|
460
497
|
expandAllBranches,
|
|
461
498
|
recurseList,
|
|
462
|
-
formData
|
|
499
|
+
formData,
|
|
500
|
+
experimental_customMergeAllOf,
|
|
501
|
+
resolveAnyOfOrOneOfRefs
|
|
463
502
|
);
|
|
464
503
|
if (updatedSchemas.length > 1 || updatedSchemas[0] !== schema) {
|
|
465
504
|
return updatedSchemas;
|
|
@@ -471,7 +510,8 @@
|
|
|
471
510
|
rootSchema,
|
|
472
511
|
expandAllBranches,
|
|
473
512
|
recurseList,
|
|
474
|
-
formData
|
|
513
|
+
formData,
|
|
514
|
+
experimental_customMergeAllOf
|
|
475
515
|
);
|
|
476
516
|
return resolvedSchemas.flatMap((s) => {
|
|
477
517
|
return retrieveSchemaInternal(
|
|
@@ -485,7 +525,7 @@
|
|
|
485
525
|
);
|
|
486
526
|
});
|
|
487
527
|
}
|
|
488
|
-
if (ALL_OF_KEY in schema && Array.isArray(schema
|
|
528
|
+
if (ALL_OF_KEY in schema && Array.isArray(schema[ALL_OF_KEY])) {
|
|
489
529
|
const allOfSchemaElements = schema.allOf.map(
|
|
490
530
|
(allOfSubschema) => retrieveSchemaInternal(
|
|
491
531
|
validator,
|
|
@@ -505,8 +545,8 @@
|
|
|
505
545
|
}
|
|
506
546
|
return [schema];
|
|
507
547
|
}
|
|
508
|
-
function resolveReference(validator, schema, rootSchema, expandAllBranches, recurseList, formData, experimental_customMergeAllOf) {
|
|
509
|
-
const updatedSchema = resolveAllReferences(schema, rootSchema, recurseList);
|
|
548
|
+
function resolveReference(validator, schema, rootSchema, expandAllBranches, recurseList, formData, experimental_customMergeAllOf, resolveAnyOfOrOneOfRefs) {
|
|
549
|
+
const updatedSchema = resolveAllReferences(schema, rootSchema, recurseList, void 0, resolveAnyOfOrOneOfRefs);
|
|
510
550
|
if (updatedSchema !== schema) {
|
|
511
551
|
return retrieveSchemaInternal(
|
|
512
552
|
validator,
|
|
@@ -515,12 +555,13 @@
|
|
|
515
555
|
formData,
|
|
516
556
|
expandAllBranches,
|
|
517
557
|
recurseList,
|
|
518
|
-
experimental_customMergeAllOf
|
|
558
|
+
experimental_customMergeAllOf,
|
|
559
|
+
resolveAnyOfOrOneOfRefs
|
|
519
560
|
);
|
|
520
561
|
}
|
|
521
562
|
return [schema];
|
|
522
563
|
}
|
|
523
|
-
function resolveAllReferences(schema, rootSchema, recurseList, baseURI) {
|
|
564
|
+
function resolveAllReferences(schema, rootSchema, recurseList, baseURI, resolveAnyOfOrOneOfRefs) {
|
|
524
565
|
if (!isObject(schema)) {
|
|
525
566
|
return schema;
|
|
526
567
|
}
|
|
@@ -543,7 +584,7 @@
|
|
|
543
584
|
resolvedSchema[PROPERTIES_KEY],
|
|
544
585
|
(result, value, key) => {
|
|
545
586
|
const childList = [...recurseList];
|
|
546
|
-
result[key] = resolveAllReferences(value, rootSchema, childList, baseURI);
|
|
587
|
+
result[key] = resolveAllReferences(value, rootSchema, childList, baseURI, resolveAnyOfOrOneOfRefs);
|
|
547
588
|
childrenLists.push(childList);
|
|
548
589
|
},
|
|
549
590
|
{}
|
|
@@ -554,9 +595,28 @@
|
|
|
554
595
|
if (ITEMS_KEY in resolvedSchema && !Array.isArray(resolvedSchema.items) && typeof resolvedSchema.items !== "boolean") {
|
|
555
596
|
resolvedSchema = {
|
|
556
597
|
...resolvedSchema,
|
|
557
|
-
items: resolveAllReferences(resolvedSchema.items, rootSchema, recurseList, baseURI)
|
|
598
|
+
items: resolveAllReferences(resolvedSchema.items, rootSchema, recurseList, baseURI, resolveAnyOfOrOneOfRefs)
|
|
558
599
|
};
|
|
559
600
|
}
|
|
601
|
+
if (resolveAnyOfOrOneOfRefs) {
|
|
602
|
+
let key;
|
|
603
|
+
let schemas;
|
|
604
|
+
if (ANY_OF_KEY in schema && Array.isArray(schema[ANY_OF_KEY])) {
|
|
605
|
+
key = ANY_OF_KEY;
|
|
606
|
+
schemas = resolvedSchema[ANY_OF_KEY];
|
|
607
|
+
} else if (ONE_OF_KEY in schema && Array.isArray(schema[ONE_OF_KEY])) {
|
|
608
|
+
key = ONE_OF_KEY;
|
|
609
|
+
schemas = resolvedSchema[ONE_OF_KEY];
|
|
610
|
+
}
|
|
611
|
+
if (key && schemas) {
|
|
612
|
+
resolvedSchema = {
|
|
613
|
+
...resolvedSchema,
|
|
614
|
+
[key]: schemas.map(
|
|
615
|
+
(s) => resolveAllReferences(s, rootSchema, recurseList, baseURI, resolveAnyOfOrOneOfRefs)
|
|
616
|
+
)
|
|
617
|
+
};
|
|
618
|
+
}
|
|
619
|
+
}
|
|
560
620
|
return deepEquals(schema, resolvedSchema) ? schema : resolvedSchema;
|
|
561
621
|
}
|
|
562
622
|
function stubExistingAdditionalProperties(validator, theSchema, rootSchema, aFormData, experimental_customMergeAllOf) {
|
|
@@ -571,12 +631,12 @@
|
|
|
571
631
|
}
|
|
572
632
|
if (PATTERN_PROPERTIES_KEY in schema) {
|
|
573
633
|
const matchingProperties = getMatchingPatternProperties(schema, key);
|
|
574
|
-
if (!
|
|
634
|
+
if (!isEmpty4(matchingProperties)) {
|
|
575
635
|
schema.properties[key] = retrieveSchema(
|
|
576
636
|
validator,
|
|
577
|
-
{
|
|
637
|
+
{ [ALL_OF_KEY]: Object.values(matchingProperties) },
|
|
578
638
|
rootSchema,
|
|
579
|
-
formData,
|
|
639
|
+
get13(formData, [key]),
|
|
580
640
|
experimental_customMergeAllOf
|
|
581
641
|
);
|
|
582
642
|
set(schema.properties, [key, ADDITIONAL_PROPERTY_FLAG], true);
|
|
@@ -584,12 +644,12 @@
|
|
|
584
644
|
}
|
|
585
645
|
}
|
|
586
646
|
if (ADDITIONAL_PROPERTIES_KEY in schema && schema.additionalProperties !== false) {
|
|
587
|
-
let additionalProperties
|
|
647
|
+
let additionalProperties;
|
|
588
648
|
if (typeof schema.additionalProperties !== "boolean") {
|
|
589
649
|
if (REF_KEY in schema.additionalProperties) {
|
|
590
650
|
additionalProperties = retrieveSchema(
|
|
591
651
|
validator,
|
|
592
|
-
{
|
|
652
|
+
{ [REF_KEY]: get13(schema.additionalProperties, [REF_KEY]) },
|
|
593
653
|
rootSchema,
|
|
594
654
|
formData,
|
|
595
655
|
experimental_customMergeAllOf
|
|
@@ -602,10 +662,10 @@
|
|
|
602
662
|
...schema.additionalProperties
|
|
603
663
|
};
|
|
604
664
|
} else {
|
|
605
|
-
additionalProperties = { type: guessType(
|
|
665
|
+
additionalProperties = { type: guessType(get13(formData, [key])) };
|
|
606
666
|
}
|
|
607
667
|
} else {
|
|
608
|
-
additionalProperties = { type: guessType(
|
|
668
|
+
additionalProperties = { type: guessType(get13(formData, [key])) };
|
|
609
669
|
}
|
|
610
670
|
schema.properties[key] = additionalProperties;
|
|
611
671
|
set(schema.properties, [key, ADDITIONAL_PROPERTY_FLAG], true);
|
|
@@ -616,7 +676,7 @@
|
|
|
616
676
|
});
|
|
617
677
|
return schema;
|
|
618
678
|
}
|
|
619
|
-
function retrieveSchemaInternal(validator, schema, rootSchema, rawFormData, expandAllBranches = false, recurseList = [], experimental_customMergeAllOf) {
|
|
679
|
+
function retrieveSchemaInternal(validator, schema, rootSchema, rawFormData, expandAllBranches = false, recurseList = [], experimental_customMergeAllOf, resolveAnyOfOrOneOfRefs) {
|
|
620
680
|
if (!isObject(schema)) {
|
|
621
681
|
return [{}];
|
|
622
682
|
}
|
|
@@ -627,7 +687,8 @@
|
|
|
627
687
|
expandAllBranches,
|
|
628
688
|
recurseList,
|
|
629
689
|
rawFormData,
|
|
630
|
-
experimental_customMergeAllOf
|
|
690
|
+
experimental_customMergeAllOf,
|
|
691
|
+
resolveAnyOfOrOneOfRefs
|
|
631
692
|
);
|
|
632
693
|
return resolvedSchemas.flatMap((s) => {
|
|
633
694
|
let resolvedSchema = s;
|
|
@@ -679,12 +740,12 @@
|
|
|
679
740
|
resolvedSchema = Object.keys(resolvedSchema.properties).reduce(
|
|
680
741
|
(schema2, key) => {
|
|
681
742
|
const matchingProperties = getMatchingPatternProperties(schema2, key);
|
|
682
|
-
if (!
|
|
743
|
+
if (!isEmpty4(matchingProperties)) {
|
|
683
744
|
schema2.properties[key] = retrieveSchema(
|
|
684
745
|
validator,
|
|
685
746
|
{ allOf: [schema2.properties[key], ...Object.values(matchingProperties)] },
|
|
686
747
|
rootSchema,
|
|
687
|
-
rawFormData,
|
|
748
|
+
get13(rawFormData, [key]),
|
|
688
749
|
experimental_customMergeAllOf
|
|
689
750
|
);
|
|
690
751
|
}
|
|
@@ -756,7 +817,7 @@
|
|
|
756
817
|
function processDependencies(validator, dependencies, resolvedSchema, rootSchema, expandAllBranches, recurseList, formData, experimental_customMergeAllOf) {
|
|
757
818
|
let schemas = [resolvedSchema];
|
|
758
819
|
for (const dependencyKey in dependencies) {
|
|
759
|
-
if (!expandAllBranches &&
|
|
820
|
+
if (!expandAllBranches && get13(formData, [dependencyKey]) === void 0) {
|
|
760
821
|
continue;
|
|
761
822
|
}
|
|
762
823
|
if (resolvedSchema.properties && !(dependencyKey in resolvedSchema.properties)) {
|
|
@@ -887,11 +948,11 @@
|
|
|
887
948
|
const xxxOfs = schema[xxx].map(
|
|
888
949
|
(xxxOf) => retrieveSchema(validator, xxxOf, rootSchema, formData, experimental_customMergeAllOf)
|
|
889
950
|
);
|
|
890
|
-
const data =
|
|
951
|
+
const data = get13(formData, selectorField);
|
|
891
952
|
if (data !== void 0) {
|
|
892
953
|
return xxxOfs.find((xxx2) => {
|
|
893
|
-
return
|
|
894
|
-
|
|
954
|
+
return isEqual2(
|
|
955
|
+
get13(xxx2, [PROPERTIES_KEY, selectorField, DEFAULT_KEY], get13(xxx2, [PROPERTIES_KEY, selectorField, CONST_KEY])),
|
|
895
956
|
data
|
|
896
957
|
);
|
|
897
958
|
});
|
|
@@ -904,13 +965,13 @@
|
|
|
904
965
|
if (has5(schema, REF_KEY)) {
|
|
905
966
|
fieldSchema = retrieveSchema(validator, schema, rootSchema, void 0, experimental_customMergeAllOf);
|
|
906
967
|
}
|
|
907
|
-
if (
|
|
968
|
+
if (isEmpty4(path)) {
|
|
908
969
|
return fieldSchema;
|
|
909
970
|
}
|
|
910
971
|
const pathList = Array.isArray(path) ? path : path.split(".");
|
|
911
972
|
const [part, ...nestedPath] = pathList;
|
|
912
973
|
if (part && has5(fieldSchema, part)) {
|
|
913
|
-
fieldSchema =
|
|
974
|
+
fieldSchema = get13(fieldSchema, part);
|
|
914
975
|
return getFromSchemaInternal(
|
|
915
976
|
validator,
|
|
916
977
|
rootSchema,
|
|
@@ -952,7 +1013,7 @@
|
|
|
952
1013
|
parentField,
|
|
953
1014
|
fieldName,
|
|
954
1015
|
ONE_OF_KEY,
|
|
955
|
-
|
|
1016
|
+
get13(formData, subPath),
|
|
956
1017
|
experimental_customMergeAllOf
|
|
957
1018
|
);
|
|
958
1019
|
} else if (has5(parentField, ANY_OF_KEY)) {
|
|
@@ -962,7 +1023,7 @@
|
|
|
962
1023
|
parentField,
|
|
963
1024
|
fieldName,
|
|
964
1025
|
ANY_OF_KEY,
|
|
965
|
-
|
|
1026
|
+
get13(formData, subPath),
|
|
966
1027
|
experimental_customMergeAllOf
|
|
967
1028
|
);
|
|
968
1029
|
}
|
|
@@ -1026,11 +1087,11 @@
|
|
|
1026
1087
|
function calculateIndexScore(validator, rootSchema, schema, formData, experimental_customMergeAllOf) {
|
|
1027
1088
|
let totalScore = 0;
|
|
1028
1089
|
if (schema) {
|
|
1029
|
-
if (
|
|
1090
|
+
if (isObject2(schema.properties)) {
|
|
1030
1091
|
totalScore += reduce(
|
|
1031
1092
|
schema.properties,
|
|
1032
1093
|
(score, value, key) => {
|
|
1033
|
-
const formValue =
|
|
1094
|
+
const formValue = get13(formData, key);
|
|
1034
1095
|
if (typeof value === "boolean") {
|
|
1035
1096
|
return score;
|
|
1036
1097
|
}
|
|
@@ -1057,14 +1118,14 @@
|
|
|
1057
1118
|
validator,
|
|
1058
1119
|
rootSchema,
|
|
1059
1120
|
formValue,
|
|
1060
|
-
|
|
1121
|
+
get13(value, key2),
|
|
1061
1122
|
-1,
|
|
1062
1123
|
discriminator,
|
|
1063
1124
|
experimental_customMergeAllOf
|
|
1064
1125
|
);
|
|
1065
1126
|
}
|
|
1066
1127
|
if (value.type === "object") {
|
|
1067
|
-
if (
|
|
1128
|
+
if (isObject2(formValue)) {
|
|
1068
1129
|
score += 1;
|
|
1069
1130
|
}
|
|
1070
1131
|
return score + calculateIndexScore(validator, rootSchema, value, formValue, experimental_customMergeAllOf);
|
|
@@ -1159,11 +1220,22 @@
|
|
|
1159
1220
|
if (isObject(formData)) {
|
|
1160
1221
|
const acc = Object.assign({}, defaults);
|
|
1161
1222
|
return Object.keys(formData).reduce((acc2, key) => {
|
|
1162
|
-
const keyValue =
|
|
1223
|
+
const keyValue = get13(formData, key);
|
|
1163
1224
|
const keyExistsInDefaults = isObject(defaults) && key in defaults;
|
|
1164
1225
|
const keyExistsInFormData = key in formData;
|
|
1226
|
+
const keyDefault = get13(defaults, key) ?? {};
|
|
1227
|
+
const defaultValueIsNestedObject = keyExistsInDefaults && Object.entries(keyDefault).some(([, v]) => isObject(v));
|
|
1228
|
+
const keyDefaultIsObject = keyExistsInDefaults && isObject(get13(defaults, key));
|
|
1229
|
+
const keyHasFormDataObject = keyExistsInFormData && isObject(keyValue);
|
|
1230
|
+
if (keyDefaultIsObject && keyHasFormDataObject && !defaultValueIsNestedObject) {
|
|
1231
|
+
acc2[key] = {
|
|
1232
|
+
...get13(defaults, key),
|
|
1233
|
+
...keyValue
|
|
1234
|
+
};
|
|
1235
|
+
return acc2;
|
|
1236
|
+
}
|
|
1165
1237
|
acc2[key] = mergeDefaultsWithFormData(
|
|
1166
|
-
|
|
1238
|
+
get13(defaults, key),
|
|
1167
1239
|
keyValue,
|
|
1168
1240
|
mergeExtraArrayDefaults,
|
|
1169
1241
|
defaultSupercedesUndefined,
|
|
@@ -1174,7 +1246,7 @@
|
|
|
1174
1246
|
return acc2;
|
|
1175
1247
|
}, acc);
|
|
1176
1248
|
}
|
|
1177
|
-
if (defaultSupercedesUndefined && (!
|
|
1249
|
+
if (defaultSupercedesUndefined && (!(defaults === void 0) && isNil(formData) || typeof formData === "number" && isNaN(formData)) || overrideFormDataWithDefaults && !isNil(formData)) {
|
|
1178
1250
|
return defaults;
|
|
1179
1251
|
}
|
|
1180
1252
|
return formData;
|
|
@@ -1282,8 +1354,8 @@
|
|
|
1282
1354
|
let value;
|
|
1283
1355
|
let label = title;
|
|
1284
1356
|
if (selectorField) {
|
|
1285
|
-
const innerSchema =
|
|
1286
|
-
value =
|
|
1357
|
+
const innerSchema = get13(aSchema, [PROPERTIES_KEY, selectorField], {});
|
|
1358
|
+
value = get13(innerSchema, DEFAULT_KEY, get13(innerSchema, CONST_KEY));
|
|
1287
1359
|
label = label || innerSchema?.title || aSchema.title || String(value);
|
|
1288
1360
|
} else {
|
|
1289
1361
|
value = toConstant(aSchema);
|
|
@@ -1315,18 +1387,27 @@
|
|
|
1315
1387
|
}
|
|
1316
1388
|
return {};
|
|
1317
1389
|
}
|
|
1390
|
+
function computeDefaultBasedOnSchemaTypeAndDefaults(schema, computedDefault) {
|
|
1391
|
+
const { default: schemaDefault, type } = schema;
|
|
1392
|
+
const shouldReturnNullAsDefault = Array.isArray(type) && type.includes("null") && isEmpty4(computedDefault) && schemaDefault === null;
|
|
1393
|
+
return shouldReturnNullAsDefault ? null : computedDefault;
|
|
1394
|
+
}
|
|
1318
1395
|
function maybeAddDefaultToObject(obj, key, computedDefault, includeUndefinedValues, isParentRequired, requiredFields = [], experimental_defaultFormStateBehavior = {}, isConst = false) {
|
|
1319
1396
|
const { emptyObjectFields = "populateAllDefaults" } = experimental_defaultFormStateBehavior;
|
|
1320
|
-
if (includeUndefinedValues || isConst) {
|
|
1397
|
+
if (includeUndefinedValues === true || isConst) {
|
|
1321
1398
|
obj[key] = computedDefault;
|
|
1399
|
+
} else if (includeUndefinedValues === "excludeObjectChildren") {
|
|
1400
|
+
if (!isObject(computedDefault) || !isEmpty4(computedDefault)) {
|
|
1401
|
+
obj[key] = computedDefault;
|
|
1402
|
+
}
|
|
1322
1403
|
} else if (emptyObjectFields !== "skipDefaults") {
|
|
1323
1404
|
const isSelfOrParentRequired = isParentRequired === void 0 ? requiredFields.includes(key) : isParentRequired;
|
|
1324
1405
|
if (isObject(computedDefault)) {
|
|
1325
1406
|
if (emptyObjectFields === "skipEmptyDefaults") {
|
|
1326
|
-
if (!
|
|
1407
|
+
if (!isEmpty4(computedDefault)) {
|
|
1327
1408
|
obj[key] = computedDefault;
|
|
1328
1409
|
}
|
|
1329
|
-
} else if ((!
|
|
1410
|
+
} else if ((!isEmpty4(computedDefault) || requiredFields.includes(key)) && (isSelfOrParentRequired || emptyObjectFields !== "populateRequiredDefaults")) {
|
|
1330
1411
|
obj[key] = computedDefault;
|
|
1331
1412
|
}
|
|
1332
1413
|
} else if (
|
|
@@ -1350,15 +1431,16 @@
|
|
|
1350
1431
|
experimental_defaultFormStateBehavior = void 0,
|
|
1351
1432
|
experimental_customMergeAllOf = void 0,
|
|
1352
1433
|
required,
|
|
1353
|
-
shouldMergeDefaultsIntoFormData = false
|
|
1434
|
+
shouldMergeDefaultsIntoFormData = false,
|
|
1435
|
+
initialDefaultsGenerated
|
|
1354
1436
|
} = computeDefaultsProps;
|
|
1355
|
-
|
|
1437
|
+
let formData = isObject(rawFormData) ? rawFormData : {};
|
|
1356
1438
|
const schema = isObject(rawSchema) ? rawSchema : {};
|
|
1357
1439
|
let defaults = parentDefaults;
|
|
1358
1440
|
let schemaToCompute = null;
|
|
1359
1441
|
let experimental_dfsb_to_compute = experimental_defaultFormStateBehavior;
|
|
1360
1442
|
let updatedRecurseList = _recurseList;
|
|
1361
|
-
if (schema[CONST_KEY] && experimental_defaultFormStateBehavior?.constAsDefaults !== "never" && !constIsAjvDataReference(schema)) {
|
|
1443
|
+
if (schema[CONST_KEY] !== void 0 && experimental_defaultFormStateBehavior?.constAsDefaults !== "never" && !constIsAjvDataReference(schema)) {
|
|
1362
1444
|
defaults = schema[CONST_KEY];
|
|
1363
1445
|
} else if (isObject(defaults) && isObject(schema.default)) {
|
|
1364
1446
|
defaults = mergeObjects(defaults, schema.default);
|
|
@@ -1373,6 +1455,9 @@
|
|
|
1373
1455
|
if (schemaToCompute && !defaults) {
|
|
1374
1456
|
defaults = schema.default;
|
|
1375
1457
|
}
|
|
1458
|
+
if (shouldMergeDefaultsIntoFormData && schemaToCompute && !isObject(rawFormData)) {
|
|
1459
|
+
formData = rawFormData;
|
|
1460
|
+
}
|
|
1376
1461
|
} else if (DEPENDENCIES_KEY in schema) {
|
|
1377
1462
|
const defaultFormData = {
|
|
1378
1463
|
...getDefaultBasedOnSchemaType(validator, schema, computeDefaultsProps, defaults),
|
|
@@ -1450,9 +1535,10 @@
|
|
|
1450
1535
|
experimental_defaultFormStateBehavior: experimental_dfsb_to_compute,
|
|
1451
1536
|
experimental_customMergeAllOf,
|
|
1452
1537
|
parentDefaults: defaults,
|
|
1453
|
-
rawFormData: formData,
|
|
1538
|
+
rawFormData: rawFormData ?? formData,
|
|
1454
1539
|
required,
|
|
1455
|
-
shouldMergeDefaultsIntoFormData
|
|
1540
|
+
shouldMergeDefaultsIntoFormData,
|
|
1541
|
+
initialDefaultsGenerated
|
|
1456
1542
|
});
|
|
1457
1543
|
}
|
|
1458
1544
|
if (defaults === void 0) {
|
|
@@ -1504,7 +1590,8 @@
|
|
|
1504
1590
|
experimental_defaultFormStateBehavior = void 0,
|
|
1505
1591
|
experimental_customMergeAllOf = void 0,
|
|
1506
1592
|
required,
|
|
1507
|
-
shouldMergeDefaultsIntoFormData
|
|
1593
|
+
shouldMergeDefaultsIntoFormData,
|
|
1594
|
+
initialDefaultsGenerated
|
|
1508
1595
|
} = {}, defaults) {
|
|
1509
1596
|
{
|
|
1510
1597
|
const formData = isObject(rawFormData) ? rawFormData : {};
|
|
@@ -1513,7 +1600,7 @@
|
|
|
1513
1600
|
const parentConst = retrievedSchema[CONST_KEY];
|
|
1514
1601
|
const objectDefaults = Object.keys(retrievedSchema.properties || {}).reduce(
|
|
1515
1602
|
(acc, key) => {
|
|
1516
|
-
const propertySchema =
|
|
1603
|
+
const propertySchema = get13(retrievedSchema, [PROPERTIES_KEY, key], {});
|
|
1517
1604
|
const hasParentConst = isObject(parentConst) && parentConst[key] !== void 0;
|
|
1518
1605
|
const hasConst = (isObject(propertySchema) && CONST_KEY in propertySchema || hasParentConst) && experimental_defaultFormStateBehavior?.constAsDefaults !== "never" && !constIsAjvDataReference(propertySchema);
|
|
1519
1606
|
const computedDefault = computeDefaults(validator, propertySchema, {
|
|
@@ -1522,10 +1609,11 @@
|
|
|
1522
1609
|
experimental_defaultFormStateBehavior,
|
|
1523
1610
|
experimental_customMergeAllOf,
|
|
1524
1611
|
includeUndefinedValues: includeUndefinedValues === true,
|
|
1525
|
-
parentDefaults:
|
|
1526
|
-
rawFormData:
|
|
1612
|
+
parentDefaults: get13(defaults, [key]),
|
|
1613
|
+
rawFormData: get13(formData, [key]),
|
|
1527
1614
|
required: retrievedSchema.required?.includes(key),
|
|
1528
|
-
shouldMergeDefaultsIntoFormData
|
|
1615
|
+
shouldMergeDefaultsIntoFormData,
|
|
1616
|
+
initialDefaultsGenerated
|
|
1529
1617
|
});
|
|
1530
1618
|
maybeAddDefaultToObject(
|
|
1531
1619
|
acc,
|
|
@@ -1541,7 +1629,7 @@
|
|
|
1541
1629
|
},
|
|
1542
1630
|
{}
|
|
1543
1631
|
);
|
|
1544
|
-
if (retrievedSchema.additionalProperties) {
|
|
1632
|
+
if (retrievedSchema.additionalProperties && !initialDefaultsGenerated) {
|
|
1545
1633
|
const additionalPropertiesSchema = isObject(retrievedSchema.additionalProperties) ? retrievedSchema.additionalProperties : {};
|
|
1546
1634
|
const keys2 = /* @__PURE__ */ new Set();
|
|
1547
1635
|
if (isObject(defaults)) {
|
|
@@ -1559,10 +1647,11 @@
|
|
|
1559
1647
|
experimental_defaultFormStateBehavior,
|
|
1560
1648
|
experimental_customMergeAllOf,
|
|
1561
1649
|
includeUndefinedValues: includeUndefinedValues === true,
|
|
1562
|
-
parentDefaults:
|
|
1563
|
-
rawFormData:
|
|
1650
|
+
parentDefaults: get13(defaults, [key]),
|
|
1651
|
+
rawFormData: get13(formData, [key]),
|
|
1564
1652
|
required: retrievedSchema.required?.includes(key),
|
|
1565
|
-
shouldMergeDefaultsIntoFormData
|
|
1653
|
+
shouldMergeDefaultsIntoFormData,
|
|
1654
|
+
initialDefaultsGenerated
|
|
1566
1655
|
});
|
|
1567
1656
|
maybeAddDefaultToObject(
|
|
1568
1657
|
objectDefaults,
|
|
@@ -1574,7 +1663,7 @@
|
|
|
1574
1663
|
);
|
|
1575
1664
|
});
|
|
1576
1665
|
}
|
|
1577
|
-
return objectDefaults;
|
|
1666
|
+
return computeDefaultBasedOnSchemaTypeAndDefaults(rawSchema, objectDefaults);
|
|
1578
1667
|
}
|
|
1579
1668
|
}
|
|
1580
1669
|
function getArrayDefaults(validator, rawSchema, {
|
|
@@ -1584,7 +1673,9 @@
|
|
|
1584
1673
|
experimental_defaultFormStateBehavior = void 0,
|
|
1585
1674
|
experimental_customMergeAllOf = void 0,
|
|
1586
1675
|
required,
|
|
1587
|
-
|
|
1676
|
+
requiredAsRoot = false,
|
|
1677
|
+
shouldMergeDefaultsIntoFormData,
|
|
1678
|
+
initialDefaultsGenerated
|
|
1588
1679
|
} = {}, defaults) {
|
|
1589
1680
|
const schema = rawSchema;
|
|
1590
1681
|
const arrayMinItemsStateBehavior = experimental_defaultFormStateBehavior?.arrayMinItems ?? {};
|
|
@@ -1605,7 +1696,8 @@
|
|
|
1605
1696
|
experimental_customMergeAllOf,
|
|
1606
1697
|
parentDefaults: item,
|
|
1607
1698
|
required,
|
|
1608
|
-
shouldMergeDefaultsIntoFormData
|
|
1699
|
+
shouldMergeDefaultsIntoFormData,
|
|
1700
|
+
initialDefaultsGenerated
|
|
1609
1701
|
});
|
|
1610
1702
|
});
|
|
1611
1703
|
}
|
|
@@ -1621,9 +1713,10 @@
|
|
|
1621
1713
|
experimental_defaultFormStateBehavior,
|
|
1622
1714
|
experimental_customMergeAllOf,
|
|
1623
1715
|
rawFormData: item,
|
|
1624
|
-
parentDefaults:
|
|
1716
|
+
parentDefaults: get13(defaults, [idx]),
|
|
1625
1717
|
required,
|
|
1626
|
-
shouldMergeDefaultsIntoFormData
|
|
1718
|
+
shouldMergeDefaultsIntoFormData,
|
|
1719
|
+
initialDefaultsGenerated
|
|
1627
1720
|
});
|
|
1628
1721
|
});
|
|
1629
1722
|
const mergeExtraDefaults = (ignoreMinItemsFlagSet && required || isPopulateAll) && arrayMergeExtraDefaults;
|
|
@@ -1639,25 +1732,29 @@
|
|
|
1639
1732
|
return defaults ? defaults : void 0;
|
|
1640
1733
|
}
|
|
1641
1734
|
}
|
|
1735
|
+
let arrayDefault;
|
|
1642
1736
|
const defaultsLength = Array.isArray(defaults) ? defaults.length : 0;
|
|
1643
1737
|
if (!schema.minItems || isMultiSelect(validator, schema, rootSchema, experimental_customMergeAllOf) || computeSkipPopulate(validator, schema, rootSchema) || schema.minItems <= defaultsLength) {
|
|
1644
|
-
|
|
1645
|
-
}
|
|
1646
|
-
|
|
1647
|
-
|
|
1648
|
-
|
|
1649
|
-
|
|
1650
|
-
|
|
1651
|
-
|
|
1652
|
-
|
|
1653
|
-
|
|
1654
|
-
|
|
1655
|
-
|
|
1656
|
-
|
|
1657
|
-
|
|
1658
|
-
|
|
1659
|
-
|
|
1660
|
-
|
|
1738
|
+
arrayDefault = defaults || !required && !requiredAsRoot ? defaults : emptyDefault;
|
|
1739
|
+
} else {
|
|
1740
|
+
const defaultEntries = defaults || [];
|
|
1741
|
+
const fillerSchema = getInnerSchemaForArrayItem(schema, 1 /* Invert */);
|
|
1742
|
+
const fillerDefault = fillerSchema.default;
|
|
1743
|
+
const fillerEntries = Array.from(
|
|
1744
|
+
{ length: schema.minItems - defaultsLength },
|
|
1745
|
+
() => computeDefaults(validator, fillerSchema, {
|
|
1746
|
+
parentDefaults: fillerDefault,
|
|
1747
|
+
rootSchema,
|
|
1748
|
+
_recurseList,
|
|
1749
|
+
experimental_defaultFormStateBehavior,
|
|
1750
|
+
experimental_customMergeAllOf,
|
|
1751
|
+
required,
|
|
1752
|
+
shouldMergeDefaultsIntoFormData
|
|
1753
|
+
})
|
|
1754
|
+
);
|
|
1755
|
+
arrayDefault = defaultEntries.concat(fillerEntries);
|
|
1756
|
+
}
|
|
1757
|
+
return computeDefaultBasedOnSchemaTypeAndDefaults(rawSchema, arrayDefault);
|
|
1661
1758
|
}
|
|
1662
1759
|
function getDefaultBasedOnSchemaType(validator, rawSchema, computeDefaultsProps = {}, defaults) {
|
|
1663
1760
|
switch (getSchemaType(rawSchema)) {
|
|
@@ -1670,7 +1767,7 @@
|
|
|
1670
1767
|
}
|
|
1671
1768
|
}
|
|
1672
1769
|
}
|
|
1673
|
-
function getDefaultFormState(validator, theSchema, formData, rootSchema, includeUndefinedValues = false, experimental_defaultFormStateBehavior, experimental_customMergeAllOf) {
|
|
1770
|
+
function getDefaultFormState(validator, theSchema, formData, rootSchema, includeUndefinedValues = false, experimental_defaultFormStateBehavior, experimental_customMergeAllOf, initialDefaultsGenerated) {
|
|
1674
1771
|
if (!isObject(theSchema)) {
|
|
1675
1772
|
throw new Error("Invalid schema: " + theSchema);
|
|
1676
1773
|
}
|
|
@@ -1681,8 +1778,16 @@
|
|
|
1681
1778
|
experimental_defaultFormStateBehavior,
|
|
1682
1779
|
experimental_customMergeAllOf,
|
|
1683
1780
|
rawFormData: formData,
|
|
1684
|
-
shouldMergeDefaultsIntoFormData: true
|
|
1781
|
+
shouldMergeDefaultsIntoFormData: true,
|
|
1782
|
+
initialDefaultsGenerated,
|
|
1783
|
+
requiredAsRoot: true
|
|
1685
1784
|
});
|
|
1785
|
+
if (schema.type !== "object" && isObject(schema.default)) {
|
|
1786
|
+
return {
|
|
1787
|
+
...defaults,
|
|
1788
|
+
...formData
|
|
1789
|
+
};
|
|
1790
|
+
}
|
|
1686
1791
|
if (isObject(formData) || Array.isArray(formData)) {
|
|
1687
1792
|
const { mergeDefaultsIntoFormData } = experimental_defaultFormStateBehavior || {};
|
|
1688
1793
|
const defaultSupercedesUndefined = mergeDefaultsIntoFormData === "useDefaultIfFormDataUndefined";
|
|
@@ -1739,10 +1844,10 @@
|
|
|
1739
1844
|
if (schemaType === "object") {
|
|
1740
1845
|
displayLabel = false;
|
|
1741
1846
|
}
|
|
1742
|
-
if (schemaType === "boolean" && !uiSchema[UI_WIDGET_KEY]) {
|
|
1847
|
+
if (schemaType === "boolean" && uiSchema && !uiSchema[UI_WIDGET_KEY]) {
|
|
1743
1848
|
displayLabel = false;
|
|
1744
1849
|
}
|
|
1745
|
-
if (uiSchema[UI_FIELD_KEY]) {
|
|
1850
|
+
if (uiSchema && uiSchema[UI_FIELD_KEY]) {
|
|
1746
1851
|
displayLabel = false;
|
|
1747
1852
|
}
|
|
1748
1853
|
return displayLabel;
|
|
@@ -1753,19 +1858,19 @@
|
|
|
1753
1858
|
if (has5(newSchema, PROPERTIES_KEY)) {
|
|
1754
1859
|
const removeOldSchemaData = {};
|
|
1755
1860
|
if (has5(oldSchema, PROPERTIES_KEY)) {
|
|
1756
|
-
const properties =
|
|
1861
|
+
const properties = get13(oldSchema, PROPERTIES_KEY, {});
|
|
1757
1862
|
Object.keys(properties).forEach((key) => {
|
|
1758
1863
|
if (has5(data, key)) {
|
|
1759
1864
|
removeOldSchemaData[key] = void 0;
|
|
1760
1865
|
}
|
|
1761
1866
|
});
|
|
1762
1867
|
}
|
|
1763
|
-
const keys2 = Object.keys(
|
|
1868
|
+
const keys2 = Object.keys(get13(newSchema, PROPERTIES_KEY, {}));
|
|
1764
1869
|
const nestedData = {};
|
|
1765
1870
|
keys2.forEach((key) => {
|
|
1766
|
-
const formValue =
|
|
1767
|
-
let oldKeyedSchema =
|
|
1768
|
-
let newKeyedSchema =
|
|
1871
|
+
const formValue = get13(data, key);
|
|
1872
|
+
let oldKeyedSchema = get13(oldSchema, [PROPERTIES_KEY, key], {});
|
|
1873
|
+
let newKeyedSchema = get13(newSchema, [PROPERTIES_KEY, key], {});
|
|
1769
1874
|
if (has5(oldKeyedSchema, REF_KEY)) {
|
|
1770
1875
|
oldKeyedSchema = retrieveSchema(
|
|
1771
1876
|
validator,
|
|
@@ -1784,8 +1889,8 @@
|
|
|
1784
1889
|
experimental_customMergeAllOf
|
|
1785
1890
|
);
|
|
1786
1891
|
}
|
|
1787
|
-
const oldSchemaTypeForKey =
|
|
1788
|
-
const newSchemaTypeForKey =
|
|
1892
|
+
const oldSchemaTypeForKey = get13(oldKeyedSchema, "type");
|
|
1893
|
+
const newSchemaTypeForKey = get13(newKeyedSchema, "type");
|
|
1789
1894
|
if (!oldSchemaTypeForKey || oldSchemaTypeForKey === newSchemaTypeForKey) {
|
|
1790
1895
|
if (has5(removeOldSchemaData, key)) {
|
|
1791
1896
|
delete removeOldSchemaData[key];
|
|
@@ -1803,17 +1908,17 @@
|
|
|
1803
1908
|
nestedData[key] = itemData;
|
|
1804
1909
|
}
|
|
1805
1910
|
} else {
|
|
1806
|
-
const newOptionDefault =
|
|
1807
|
-
const oldOptionDefault =
|
|
1911
|
+
const newOptionDefault = get13(newKeyedSchema, "default", NO_VALUE);
|
|
1912
|
+
const oldOptionDefault = get13(oldKeyedSchema, "default", NO_VALUE);
|
|
1808
1913
|
if (newOptionDefault !== NO_VALUE && newOptionDefault !== formValue) {
|
|
1809
1914
|
if (oldOptionDefault === formValue) {
|
|
1810
1915
|
removeOldSchemaData[key] = newOptionDefault;
|
|
1811
|
-
} else if (
|
|
1916
|
+
} else if (get13(newKeyedSchema, "readOnly") === true) {
|
|
1812
1917
|
removeOldSchemaData[key] = void 0;
|
|
1813
1918
|
}
|
|
1814
1919
|
}
|
|
1815
|
-
const newOptionConst =
|
|
1816
|
-
const oldOptionConst =
|
|
1920
|
+
const newOptionConst = get13(newKeyedSchema, "const", NO_VALUE);
|
|
1921
|
+
const oldOptionConst = get13(oldKeyedSchema, "const", NO_VALUE);
|
|
1817
1922
|
if (newOptionConst !== NO_VALUE && newOptionConst !== formValue) {
|
|
1818
1923
|
removeOldSchemaData[key] = oldOptionConst === formValue ? newOptionConst : void 0;
|
|
1819
1924
|
}
|
|
@@ -1825,9 +1930,9 @@
|
|
|
1825
1930
|
...removeOldSchemaData,
|
|
1826
1931
|
...nestedData
|
|
1827
1932
|
};
|
|
1828
|
-
} else if (
|
|
1829
|
-
let oldSchemaItems =
|
|
1830
|
-
let newSchemaItems =
|
|
1933
|
+
} else if (get13(oldSchema, "type") === "array" && get13(newSchema, "type") === "array" && Array.isArray(data)) {
|
|
1934
|
+
let oldSchemaItems = get13(oldSchema, "items");
|
|
1935
|
+
let newSchemaItems = get13(newSchema, "items");
|
|
1831
1936
|
if (typeof oldSchemaItems === "object" && typeof newSchemaItems === "object" && !Array.isArray(oldSchemaItems) && !Array.isArray(newSchemaItems)) {
|
|
1832
1937
|
if (has5(oldSchemaItems, REF_KEY)) {
|
|
1833
1938
|
oldSchemaItems = retrieveSchema(
|
|
@@ -1847,10 +1952,10 @@
|
|
|
1847
1952
|
experimental_customMergeAllOf
|
|
1848
1953
|
);
|
|
1849
1954
|
}
|
|
1850
|
-
const oldSchemaType =
|
|
1851
|
-
const newSchemaType =
|
|
1955
|
+
const oldSchemaType = get13(oldSchemaItems, "type");
|
|
1956
|
+
const newSchemaType = get13(newSchemaItems, "type");
|
|
1852
1957
|
if (!oldSchemaType || oldSchemaType === newSchemaType) {
|
|
1853
|
-
const maxItems =
|
|
1958
|
+
const maxItems = get13(newSchema, "maxItems", -1);
|
|
1854
1959
|
if (newSchemaType === "object") {
|
|
1855
1960
|
newFormData = data.reduce((newValue, aValue) => {
|
|
1856
1961
|
const itemValue = sanitizeDataForNewSchema(
|
|
@@ -1876,75 +1981,6 @@
|
|
|
1876
1981
|
}
|
|
1877
1982
|
return newFormData;
|
|
1878
1983
|
}
|
|
1879
|
-
function toIdSchemaInternal(validator, schema, idPrefix, idSeparator, id, rootSchema, formData, _recurseList = [], experimental_customMergeAllOf) {
|
|
1880
|
-
const $id = id || idPrefix;
|
|
1881
|
-
const idSchema = { $id };
|
|
1882
|
-
if (typeof schema === "object") {
|
|
1883
|
-
if (REF_KEY in schema || DEPENDENCIES_KEY in schema || ALL_OF_KEY in schema) {
|
|
1884
|
-
const _schema = retrieveSchema(validator, schema, rootSchema, formData, experimental_customMergeAllOf);
|
|
1885
|
-
const sameSchemaIndex = _recurseList.findIndex((item) => deepEquals(item, _schema));
|
|
1886
|
-
if (sameSchemaIndex === -1) {
|
|
1887
|
-
return toIdSchemaInternal(
|
|
1888
|
-
validator,
|
|
1889
|
-
_schema,
|
|
1890
|
-
idPrefix,
|
|
1891
|
-
idSeparator,
|
|
1892
|
-
id,
|
|
1893
|
-
rootSchema,
|
|
1894
|
-
formData,
|
|
1895
|
-
_recurseList.concat(_schema),
|
|
1896
|
-
experimental_customMergeAllOf
|
|
1897
|
-
);
|
|
1898
|
-
}
|
|
1899
|
-
}
|
|
1900
|
-
if (ITEMS_KEY in schema && !get12(schema, [ITEMS_KEY, REF_KEY])) {
|
|
1901
|
-
return toIdSchemaInternal(
|
|
1902
|
-
validator,
|
|
1903
|
-
get12(schema, ITEMS_KEY),
|
|
1904
|
-
idPrefix,
|
|
1905
|
-
idSeparator,
|
|
1906
|
-
id,
|
|
1907
|
-
rootSchema,
|
|
1908
|
-
formData,
|
|
1909
|
-
_recurseList,
|
|
1910
|
-
experimental_customMergeAllOf
|
|
1911
|
-
);
|
|
1912
|
-
}
|
|
1913
|
-
if (getSchemaType(schema) === "object" && PROPERTIES_KEY in schema) {
|
|
1914
|
-
for (const name in schema.properties) {
|
|
1915
|
-
const field = schema[PROPERTIES_KEY][name];
|
|
1916
|
-
const fieldId = idSchema[ID_KEY] + idSeparator + name;
|
|
1917
|
-
idSchema[name] = toIdSchemaInternal(
|
|
1918
|
-
validator,
|
|
1919
|
-
field,
|
|
1920
|
-
idPrefix,
|
|
1921
|
-
idSeparator,
|
|
1922
|
-
fieldId,
|
|
1923
|
-
rootSchema,
|
|
1924
|
-
// It's possible that formData is not an object -- this can happen if an
|
|
1925
|
-
// array item has just been added, but not populated with data yet
|
|
1926
|
-
get12(formData, [name]),
|
|
1927
|
-
_recurseList,
|
|
1928
|
-
experimental_customMergeAllOf
|
|
1929
|
-
);
|
|
1930
|
-
}
|
|
1931
|
-
}
|
|
1932
|
-
}
|
|
1933
|
-
return idSchema;
|
|
1934
|
-
}
|
|
1935
|
-
function toIdSchema(validator, schema, id, rootSchema, formData, idPrefix = "root", idSeparator = "_", experimental_customMergeAllOf) {
|
|
1936
|
-
return toIdSchemaInternal(
|
|
1937
|
-
validator,
|
|
1938
|
-
schema,
|
|
1939
|
-
idPrefix,
|
|
1940
|
-
idSeparator,
|
|
1941
|
-
id,
|
|
1942
|
-
rootSchema,
|
|
1943
|
-
formData,
|
|
1944
|
-
void 0,
|
|
1945
|
-
experimental_customMergeAllOf
|
|
1946
|
-
);
|
|
1947
|
-
}
|
|
1948
1984
|
function toPathSchemaInternal(validator, schema, name, rootSchema, formData, _recurseList = [], experimental_customMergeAllOf) {
|
|
1949
1985
|
if (REF_KEY in schema || DEPENDENCIES_KEY in schema || ALL_OF_KEY in schema) {
|
|
1950
1986
|
const _schema = retrieveSchema(validator, schema, rootSchema, formData, experimental_customMergeAllOf);
|
|
@@ -2036,7 +2072,7 @@
|
|
|
2036
2072
|
}
|
|
2037
2073
|
} else if (PROPERTIES_KEY in schema) {
|
|
2038
2074
|
for (const property in schema.properties) {
|
|
2039
|
-
const field =
|
|
2075
|
+
const field = get13(schema, [PROPERTIES_KEY, property], {});
|
|
2040
2076
|
pathSchema[property] = toPathSchemaInternal(
|
|
2041
2077
|
validator,
|
|
2042
2078
|
field,
|
|
@@ -2044,7 +2080,7 @@
|
|
|
2044
2080
|
rootSchema,
|
|
2045
2081
|
// It's possible that formData is not an object -- this can happen if an
|
|
2046
2082
|
// array item has just been added, but not populated with data yet
|
|
2047
|
-
|
|
2083
|
+
get13(formData, [property]),
|
|
2048
2084
|
_recurseList,
|
|
2049
2085
|
experimental_customMergeAllOf
|
|
2050
2086
|
);
|
|
@@ -2055,8 +2091,6 @@
|
|
|
2055
2091
|
function toPathSchema(validator, schema, name = "", rootSchema, formData, experimental_customMergeAllOf) {
|
|
2056
2092
|
return toPathSchemaInternal(validator, schema, name, rootSchema, formData, void 0, experimental_customMergeAllOf);
|
|
2057
2093
|
}
|
|
2058
|
-
|
|
2059
|
-
// src/createSchemaUtils.ts
|
|
2060
2094
|
var SchemaUtils = class {
|
|
2061
2095
|
/** Constructs the `SchemaUtils` instance with the given `validator` and `rootSchema` stored as instance variables
|
|
2062
2096
|
*
|
|
@@ -2066,11 +2100,22 @@
|
|
|
2066
2100
|
* @param [experimental_customMergeAllOf] - Optional function that allows for custom merging of `allOf` schemas
|
|
2067
2101
|
*/
|
|
2068
2102
|
constructor(validator, rootSchema, experimental_defaultFormStateBehavior, experimental_customMergeAllOf) {
|
|
2069
|
-
|
|
2103
|
+
if (rootSchema && rootSchema[SCHEMA_KEY] === JSON_SCHEMA_DRAFT_2020_12) {
|
|
2104
|
+
this.rootSchema = makeAllReferencesAbsolute(rootSchema, get13(rootSchema, ID_KEY, "#"));
|
|
2105
|
+
} else {
|
|
2106
|
+
this.rootSchema = rootSchema;
|
|
2107
|
+
}
|
|
2070
2108
|
this.validator = validator;
|
|
2071
2109
|
this.experimental_defaultFormStateBehavior = experimental_defaultFormStateBehavior;
|
|
2072
2110
|
this.experimental_customMergeAllOf = experimental_customMergeAllOf;
|
|
2073
2111
|
}
|
|
2112
|
+
/** Returns the `rootSchema` in the `SchemaUtilsType`
|
|
2113
|
+
*
|
|
2114
|
+
* @returns - The `rootSchema`
|
|
2115
|
+
*/
|
|
2116
|
+
getRootSchema() {
|
|
2117
|
+
return this.rootSchema;
|
|
2118
|
+
}
|
|
2074
2119
|
/** Returns the `ValidatorType` in the `SchemaUtilsType`
|
|
2075
2120
|
*
|
|
2076
2121
|
* @returns - The `ValidatorType`
|
|
@@ -2143,9 +2188,10 @@
|
|
|
2143
2188
|
* @param [includeUndefinedValues=false] - Optional flag, if true, cause undefined values to be added as defaults.
|
|
2144
2189
|
* If "excludeObjectChildren", pass `includeUndefinedValues` as false when computing defaults for any nested
|
|
2145
2190
|
* object properties.
|
|
2191
|
+
* @param initialDefaultsGenerated - Indicates whether or not initial defaults have been generated
|
|
2146
2192
|
* @returns - The resulting `formData` with all the defaults provided
|
|
2147
2193
|
*/
|
|
2148
|
-
getDefaultFormState(schema, formData, includeUndefinedValues = false) {
|
|
2194
|
+
getDefaultFormState(schema, formData, includeUndefinedValues = false, initialDefaultsGenerated) {
|
|
2149
2195
|
return getDefaultFormState(
|
|
2150
2196
|
this.validator,
|
|
2151
2197
|
schema,
|
|
@@ -2153,7 +2199,8 @@
|
|
|
2153
2199
|
this.rootSchema,
|
|
2154
2200
|
includeUndefinedValues,
|
|
2155
2201
|
this.experimental_defaultFormStateBehavior,
|
|
2156
|
-
this.experimental_customMergeAllOf
|
|
2202
|
+
this.experimental_customMergeAllOf,
|
|
2203
|
+
initialDefaultsGenerated
|
|
2157
2204
|
);
|
|
2158
2205
|
}
|
|
2159
2206
|
/** Determines whether the combination of `schema` and `uiSchema` properties indicates that the label for the `schema`
|
|
@@ -2252,15 +2299,17 @@
|
|
|
2252
2299
|
*
|
|
2253
2300
|
* @param schema - The schema for which retrieving a schema is desired
|
|
2254
2301
|
* @param [rawFormData] - The current formData, if any, to assist retrieving a schema
|
|
2302
|
+
* @param [resolveAnyOfOrOneOfRefs] - Optional flag indicating whether to resolved refs in anyOf/oneOf lists
|
|
2255
2303
|
* @returns - The schema having its conditions, additional properties, references and dependencies resolved
|
|
2256
2304
|
*/
|
|
2257
|
-
retrieveSchema(schema, rawFormData) {
|
|
2305
|
+
retrieveSchema(schema, rawFormData, resolveAnyOfOrOneOfRefs) {
|
|
2258
2306
|
return retrieveSchema(
|
|
2259
2307
|
this.validator,
|
|
2260
2308
|
schema,
|
|
2261
2309
|
this.rootSchema,
|
|
2262
2310
|
rawFormData,
|
|
2263
|
-
this.experimental_customMergeAllOf
|
|
2311
|
+
this.experimental_customMergeAllOf,
|
|
2312
|
+
resolveAnyOfOrOneOfRefs
|
|
2264
2313
|
);
|
|
2265
2314
|
}
|
|
2266
2315
|
/** Sanitize the `data` associated with the `oldSchema` so it is considered appropriate for the `newSchema`. If the
|
|
@@ -2284,27 +2333,6 @@
|
|
|
2284
2333
|
this.experimental_customMergeAllOf
|
|
2285
2334
|
);
|
|
2286
2335
|
}
|
|
2287
|
-
/** Generates an `IdSchema` object for the `schema`, recursively
|
|
2288
|
-
*
|
|
2289
|
-
* @param schema - The schema for which the display label flag is desired
|
|
2290
|
-
* @param [id] - The base id for the schema
|
|
2291
|
-
* @param [formData] - The current formData, if any, onto which to provide any missing defaults
|
|
2292
|
-
* @param [idPrefix='root'] - The prefix to use for the id
|
|
2293
|
-
* @param [idSeparator='_'] - The separator to use for the path segments in the id
|
|
2294
|
-
* @returns - The `IdSchema` object for the `schema`
|
|
2295
|
-
*/
|
|
2296
|
-
toIdSchema(schema, id, formData, idPrefix = "root", idSeparator = "_") {
|
|
2297
|
-
return toIdSchema(
|
|
2298
|
-
this.validator,
|
|
2299
|
-
schema,
|
|
2300
|
-
id,
|
|
2301
|
-
this.rootSchema,
|
|
2302
|
-
formData,
|
|
2303
|
-
idPrefix,
|
|
2304
|
-
idSeparator,
|
|
2305
|
-
this.experimental_customMergeAllOf
|
|
2306
|
-
);
|
|
2307
|
-
}
|
|
2308
2336
|
/** Generates an `PathSchema` object for the `schema`, recursively
|
|
2309
2337
|
*
|
|
2310
2338
|
* @param schema - The schema for which the display label flag is desired
|
|
@@ -2390,6 +2418,31 @@
|
|
|
2390
2418
|
return options;
|
|
2391
2419
|
}
|
|
2392
2420
|
|
|
2421
|
+
// src/shallowEquals.ts
|
|
2422
|
+
function shallowEquals(a, b) {
|
|
2423
|
+
if (Object.is(a, b)) {
|
|
2424
|
+
return true;
|
|
2425
|
+
}
|
|
2426
|
+
if (a == null || b == null) {
|
|
2427
|
+
return false;
|
|
2428
|
+
}
|
|
2429
|
+
if (typeof a !== "object" || typeof b !== "object") {
|
|
2430
|
+
return false;
|
|
2431
|
+
}
|
|
2432
|
+
const keysA = Object.keys(a);
|
|
2433
|
+
const keysB = Object.keys(b);
|
|
2434
|
+
if (keysA.length !== keysB.length) {
|
|
2435
|
+
return false;
|
|
2436
|
+
}
|
|
2437
|
+
for (let i = 0; i < keysA.length; i++) {
|
|
2438
|
+
const key = keysA[i];
|
|
2439
|
+
if (!Object.prototype.hasOwnProperty.call(b, key) || !Object.is(a[key], b[key])) {
|
|
2440
|
+
return false;
|
|
2441
|
+
}
|
|
2442
|
+
}
|
|
2443
|
+
return true;
|
|
2444
|
+
}
|
|
2445
|
+
|
|
2393
2446
|
// src/replaceStringParameters.ts
|
|
2394
2447
|
function replaceStringParameters(inputString, params) {
|
|
2395
2448
|
let output = inputString;
|
|
@@ -2482,7 +2535,7 @@
|
|
|
2482
2535
|
*/
|
|
2483
2536
|
getOrCreateErrorBlock(pathOfError) {
|
|
2484
2537
|
const hasPath = Array.isArray(pathOfError) && pathOfError.length > 0 || typeof pathOfError === "string";
|
|
2485
|
-
let errorBlock = hasPath ?
|
|
2538
|
+
let errorBlock = hasPath ? get13(this.errorSchema, pathOfError) : this.errorSchema;
|
|
2486
2539
|
if (!errorBlock && pathOfError) {
|
|
2487
2540
|
errorBlock = {};
|
|
2488
2541
|
setWith(this.errorSchema, pathOfError, errorBlock, Object);
|
|
@@ -2508,7 +2561,7 @@
|
|
|
2508
2561
|
*/
|
|
2509
2562
|
addErrors(errorOrList, pathOfError) {
|
|
2510
2563
|
const errorBlock = this.getOrCreateErrorBlock(pathOfError);
|
|
2511
|
-
let errorsList =
|
|
2564
|
+
let errorsList = get13(errorBlock, ERRORS_KEY);
|
|
2512
2565
|
if (!Array.isArray(errorsList)) {
|
|
2513
2566
|
errorsList = [];
|
|
2514
2567
|
errorBlock[ERRORS_KEY] = errorsList;
|
|
@@ -2547,6 +2600,22 @@
|
|
|
2547
2600
|
return this;
|
|
2548
2601
|
}
|
|
2549
2602
|
};
|
|
2603
|
+
function getChangedFields(a, b) {
|
|
2604
|
+
const aIsPlainObject = isPlainObject2(a);
|
|
2605
|
+
const bIsPlainObject = isPlainObject2(b);
|
|
2606
|
+
if (a === b || !aIsPlainObject && !bIsPlainObject) {
|
|
2607
|
+
return [];
|
|
2608
|
+
}
|
|
2609
|
+
if (aIsPlainObject && !bIsPlainObject) {
|
|
2610
|
+
return keys(a);
|
|
2611
|
+
} else if (!aIsPlainObject && bIsPlainObject) {
|
|
2612
|
+
return keys(b);
|
|
2613
|
+
} else {
|
|
2614
|
+
const unequalFields = keys(pickBy(a, (value, key) => !deepEquals(value, get13(b, key))));
|
|
2615
|
+
const diffFields = difference(keys(b), keys(a));
|
|
2616
|
+
return [...unequalFields, ...diffFields];
|
|
2617
|
+
}
|
|
2618
|
+
}
|
|
2550
2619
|
|
|
2551
2620
|
// src/getDateElementProps.ts
|
|
2552
2621
|
function getDateElementProps(date, time, yearRange = [1900, (/* @__PURE__ */ new Date()).getFullYear() + 2], format = "YMD") {
|
|
@@ -2655,7 +2724,7 @@
|
|
|
2655
2724
|
);
|
|
2656
2725
|
}
|
|
2657
2726
|
function getTestIds() {
|
|
2658
|
-
if (typeof process === "undefined" ||
|
|
2727
|
+
if (typeof process === "undefined" || get13(process, "env.NODE_ENV") !== "test") {
|
|
2659
2728
|
return {};
|
|
2660
2729
|
}
|
|
2661
2730
|
const ids = /* @__PURE__ */ new Map();
|
|
@@ -2664,7 +2733,7 @@
|
|
|
2664
2733
|
{
|
|
2665
2734
|
get(_obj, prop) {
|
|
2666
2735
|
if (!ids.has(prop)) {
|
|
2667
|
-
ids.set(prop,
|
|
2736
|
+
ids.set(prop, uniqueId("test-id-"));
|
|
2668
2737
|
}
|
|
2669
2738
|
return ids.get(prop);
|
|
2670
2739
|
}
|
|
@@ -2724,7 +2793,7 @@
|
|
|
2724
2793
|
}
|
|
2725
2794
|
};
|
|
2726
2795
|
function mergeWidgetOptions(AWidget) {
|
|
2727
|
-
let MergedWidget =
|
|
2796
|
+
let MergedWidget = get13(AWidget, "MergedWidget");
|
|
2728
2797
|
if (!MergedWidget) {
|
|
2729
2798
|
const defaultOptions = AWidget.defaultProps && AWidget.defaultProps.options || {};
|
|
2730
2799
|
MergedWidget = ({ options, ...props }) => {
|
|
@@ -2740,7 +2809,7 @@
|
|
|
2740
2809
|
return mergeWidgetOptions(widget);
|
|
2741
2810
|
}
|
|
2742
2811
|
if (typeof widget !== "string") {
|
|
2743
|
-
throw new Error(`Unsupported widget definition: ${typeof widget}`);
|
|
2812
|
+
throw new Error(`Unsupported widget definition: ${typeof widget} in schema: ${JSON.stringify(schema)}`);
|
|
2744
2813
|
}
|
|
2745
2814
|
if (widget in registeredWidgets) {
|
|
2746
2815
|
const registeredWidget = registeredWidgets[widget];
|
|
@@ -2748,14 +2817,14 @@
|
|
|
2748
2817
|
}
|
|
2749
2818
|
if (typeof type === "string") {
|
|
2750
2819
|
if (!(type in widgetMap)) {
|
|
2751
|
-
throw new Error(`No widget for type '${type}'`);
|
|
2820
|
+
throw new Error(`No widget for type '${type}' in schema: ${JSON.stringify(schema)}`);
|
|
2752
2821
|
}
|
|
2753
2822
|
if (widget in widgetMap[type]) {
|
|
2754
2823
|
const registeredWidget = registeredWidgets[widgetMap[type][widget]];
|
|
2755
2824
|
return getWidget(schema, registeredWidget, registeredWidgets);
|
|
2756
2825
|
}
|
|
2757
2826
|
}
|
|
2758
|
-
throw new Error(`No widget '${widget}' for type '${type}'`);
|
|
2827
|
+
throw new Error(`No widget '${widget}' for type '${type}' in schema: ${JSON.stringify(schema)}`);
|
|
2759
2828
|
}
|
|
2760
2829
|
|
|
2761
2830
|
// src/hashForSchema.ts
|
|
@@ -2822,6 +2891,23 @@
|
|
|
2822
2891
|
function buttonId(id, btn) {
|
|
2823
2892
|
return idGenerator(id, btn);
|
|
2824
2893
|
}
|
|
2894
|
+
function optionalControlsId(id, element) {
|
|
2895
|
+
return idGenerator(id, `optional${element}`);
|
|
2896
|
+
}
|
|
2897
|
+
function isFormDataAvailable(formData) {
|
|
2898
|
+
return !isNil(formData) && (!isObject2(formData) || Array.isArray(formData) || !isEmpty4(formData));
|
|
2899
|
+
}
|
|
2900
|
+
function isRootSchema(registry, schemaToCompare) {
|
|
2901
|
+
const { rootSchema, schemaUtils } = registry;
|
|
2902
|
+
if (isEqual2(schemaToCompare, rootSchema)) {
|
|
2903
|
+
return true;
|
|
2904
|
+
}
|
|
2905
|
+
if (REF_KEY in rootSchema) {
|
|
2906
|
+
const resolvedSchema = schemaUtils.retrieveSchema(rootSchema);
|
|
2907
|
+
return isEqual2(schemaToCompare, resolvedSchema);
|
|
2908
|
+
}
|
|
2909
|
+
return false;
|
|
2910
|
+
}
|
|
2825
2911
|
|
|
2826
2912
|
// src/labelValue.ts
|
|
2827
2913
|
function labelValue(label, hideLabel, fallback) {
|
|
@@ -2837,7 +2923,7 @@
|
|
|
2837
2923
|
if (has5(regOrFc, FORM_CONTEXT_NAME)) {
|
|
2838
2924
|
lookupPath.unshift(FORM_CONTEXT_NAME);
|
|
2839
2925
|
}
|
|
2840
|
-
return
|
|
2926
|
+
return get13(regOrFc, [...lookupPath, toLookup], fallback);
|
|
2841
2927
|
}
|
|
2842
2928
|
|
|
2843
2929
|
// src/orderProperties.ts
|
|
@@ -2918,10 +3004,35 @@
|
|
|
2918
3004
|
}
|
|
2919
3005
|
|
|
2920
3006
|
// src/shouldRender.ts
|
|
2921
|
-
function shouldRender(component, nextProps, nextState) {
|
|
3007
|
+
function shouldRender(component, nextProps, nextState, updateStrategy = "customDeep") {
|
|
3008
|
+
if (updateStrategy === "always") {
|
|
3009
|
+
return true;
|
|
3010
|
+
}
|
|
3011
|
+
if (updateStrategy === "shallow") {
|
|
3012
|
+
const { props: props2, state: state2 } = component;
|
|
3013
|
+
return !shallowEquals(props2, nextProps) || !shallowEquals(state2, nextState);
|
|
3014
|
+
}
|
|
2922
3015
|
const { props, state } = component;
|
|
2923
3016
|
return !deepEquals(props, nextProps) || !deepEquals(state, nextState);
|
|
2924
3017
|
}
|
|
3018
|
+
function getSchemaTypesForXxxOf(schemas) {
|
|
3019
|
+
const allTypes = uniq(
|
|
3020
|
+
schemas.map((s) => isObject2(s) ? getSchemaType(s) : void 0).flat().filter((t) => t !== void 0)
|
|
3021
|
+
);
|
|
3022
|
+
return allTypes.length === 1 ? allTypes[0] : allTypes;
|
|
3023
|
+
}
|
|
3024
|
+
function shouldRenderOptionalField(registry, schema, required, uiSchema) {
|
|
3025
|
+
const { enableOptionalDataFieldForType = [] } = getUiOptions(uiSchema, registry.globalUiOptions);
|
|
3026
|
+
let schemaType;
|
|
3027
|
+
if (ANY_OF_KEY in schema && Array.isArray(schema[ANY_OF_KEY])) {
|
|
3028
|
+
schemaType = getSchemaTypesForXxxOf(schema[ANY_OF_KEY]);
|
|
3029
|
+
} else if (ONE_OF_KEY in schema && Array.isArray(schema[ONE_OF_KEY])) {
|
|
3030
|
+
schemaType = getSchemaTypesForXxxOf(schema[ONE_OF_KEY]);
|
|
3031
|
+
} else {
|
|
3032
|
+
schemaType = getSchemaType(schema);
|
|
3033
|
+
}
|
|
3034
|
+
return !isRootSchema(registry, schema) && !required && !!schemaType && !Array.isArray(schemaType) && !!enableOptionalDataFieldForType.find((val) => val === schemaType);
|
|
3035
|
+
}
|
|
2925
3036
|
|
|
2926
3037
|
// src/toDateString.ts
|
|
2927
3038
|
function toDateString(dateObject, time = true) {
|
|
@@ -2950,7 +3061,7 @@
|
|
|
2950
3061
|
return Object.keys(errorSchema).reduce((acc, key) => {
|
|
2951
3062
|
if (key !== ERRORS_KEY) {
|
|
2952
3063
|
const childSchema = errorSchema[key];
|
|
2953
|
-
if (
|
|
3064
|
+
if (isPlainObject2(childSchema)) {
|
|
2954
3065
|
acc = acc.concat(toErrorList(childSchema, [...fieldPath, key]));
|
|
2955
3066
|
}
|
|
2956
3067
|
}
|
|
@@ -2973,13 +3084,22 @@
|
|
|
2973
3084
|
}
|
|
2974
3085
|
return builder.ErrorSchema;
|
|
2975
3086
|
}
|
|
3087
|
+
|
|
3088
|
+
// src/toFieldPathId.ts
|
|
3089
|
+
function toFieldPathId(fieldPath, globalFormOptions, parentPath) {
|
|
3090
|
+
const basePath = Array.isArray(parentPath) ? parentPath : parentPath?.path;
|
|
3091
|
+
const childPath = fieldPath === "" ? [] : [fieldPath];
|
|
3092
|
+
const path = basePath ? basePath.concat(...childPath) : childPath;
|
|
3093
|
+
const id = [globalFormOptions.idPrefix, ...path].join(globalFormOptions.idSeparator);
|
|
3094
|
+
return { path, [ID_KEY]: id };
|
|
3095
|
+
}
|
|
2976
3096
|
function unwrapErrorHandler(errorHandler) {
|
|
2977
3097
|
return Object.keys(errorHandler).reduce((acc, key) => {
|
|
2978
3098
|
if (key === "addError") {
|
|
2979
3099
|
return acc;
|
|
2980
3100
|
} else {
|
|
2981
3101
|
const childSchema = errorHandler[key];
|
|
2982
|
-
if (
|
|
3102
|
+
if (isPlainObject2(childSchema)) {
|
|
2983
3103
|
return {
|
|
2984
3104
|
...acc,
|
|
2985
3105
|
[key]: unwrapErrorHandler(childSchema)
|
|
@@ -3005,15 +3125,19 @@
|
|
|
3005
3125
|
const SSS = pad(date.getMilliseconds(), 3);
|
|
3006
3126
|
return `${yyyy}-${MM}-${dd}T${hh}:${mm}:${ss}.${SSS}`;
|
|
3007
3127
|
}
|
|
3008
|
-
function validationDataMerge(validationData, additionalErrorSchema) {
|
|
3128
|
+
function validationDataMerge(validationData, additionalErrorSchema, preventDuplicates = false) {
|
|
3009
3129
|
if (!additionalErrorSchema) {
|
|
3010
3130
|
return validationData;
|
|
3011
3131
|
}
|
|
3012
3132
|
const { errors: oldErrors, errorSchema: oldErrorSchema } = validationData;
|
|
3013
3133
|
let errors = toErrorList(additionalErrorSchema);
|
|
3014
3134
|
let errorSchema = additionalErrorSchema;
|
|
3015
|
-
if (!
|
|
3016
|
-
errorSchema = mergeObjects(
|
|
3135
|
+
if (!isEmpty4(oldErrorSchema)) {
|
|
3136
|
+
errorSchema = mergeObjects(
|
|
3137
|
+
oldErrorSchema,
|
|
3138
|
+
additionalErrorSchema,
|
|
3139
|
+
preventDuplicates ? "preventDuplicates" : true
|
|
3140
|
+
);
|
|
3017
3141
|
errors = [...oldErrors].concat(errors);
|
|
3018
3142
|
}
|
|
3019
3143
|
return { errorSchema, errors };
|
|
@@ -3040,27 +3164,11 @@
|
|
|
3040
3164
|
if (Array.isArray(schemaNode)) {
|
|
3041
3165
|
return withIdRefPrefixArray([...schemaNode]);
|
|
3042
3166
|
}
|
|
3043
|
-
if (
|
|
3167
|
+
if (isObject2(schemaNode)) {
|
|
3044
3168
|
return withIdRefPrefixObject({ ...schemaNode });
|
|
3045
3169
|
}
|
|
3046
3170
|
return schemaNode;
|
|
3047
3171
|
}
|
|
3048
|
-
function getChangedFields(a, b) {
|
|
3049
|
-
const aIsPlainObject = isPlainObject4(a);
|
|
3050
|
-
const bIsPlainObject = isPlainObject4(b);
|
|
3051
|
-
if (a === b || !aIsPlainObject && !bIsPlainObject) {
|
|
3052
|
-
return [];
|
|
3053
|
-
}
|
|
3054
|
-
if (aIsPlainObject && !bIsPlainObject) {
|
|
3055
|
-
return keys(a);
|
|
3056
|
-
} else if (!aIsPlainObject && bIsPlainObject) {
|
|
3057
|
-
return keys(b);
|
|
3058
|
-
} else {
|
|
3059
|
-
const unequalFields = keys(pickBy(a, (value, key) => !deepEquals(value, get12(b, key))));
|
|
3060
|
-
const diffFields = difference(keys(b), keys(a));
|
|
3061
|
-
return [...unequalFields, ...diffFields];
|
|
3062
|
-
}
|
|
3063
|
-
}
|
|
3064
3172
|
|
|
3065
3173
|
// src/enums.ts
|
|
3066
3174
|
var TranslatableString = /* @__PURE__ */ ((TranslatableString2) => {
|
|
@@ -3084,6 +3192,9 @@
|
|
|
3084
3192
|
TranslatableString2["PreviewLabel"] = "Preview";
|
|
3085
3193
|
TranslatableString2["DecrementAriaLabel"] = "Decrease value by 1";
|
|
3086
3194
|
TranslatableString2["IncrementAriaLabel"] = "Increase value by 1";
|
|
3195
|
+
TranslatableString2["OptionalObjectAdd"] = "Add data for optional field";
|
|
3196
|
+
TranslatableString2["OptionalObjectRemove"] = "Remove data for optional field";
|
|
3197
|
+
TranslatableString2["OptionalObjectEmptyMsg"] = "No data for optional field";
|
|
3087
3198
|
TranslatableString2["UnknownFieldType"] = "Unknown field type %1";
|
|
3088
3199
|
TranslatableString2["OptionPrefix"] = "Option %1";
|
|
3089
3200
|
TranslatableString2["TitleOptionPrefix"] = "%1 option %2";
|
|
@@ -3121,7 +3232,7 @@
|
|
|
3121
3232
|
* @param hash - The hash value at which to map the schema
|
|
3122
3233
|
*/
|
|
3123
3234
|
addSchema(schema, hash) {
|
|
3124
|
-
const key =
|
|
3235
|
+
const key = get13(schema, ID_KEY, hash);
|
|
3125
3236
|
const identifiedSchema = { ...schema, [ID_KEY]: key };
|
|
3126
3237
|
const existing = this.schemaMap[key];
|
|
3127
3238
|
if (!existing) {
|
|
@@ -3217,6 +3328,8 @@
|
|
|
3217
3328
|
exports.ALL_OF_KEY = ALL_OF_KEY;
|
|
3218
3329
|
exports.ANY_OF_KEY = ANY_OF_KEY;
|
|
3219
3330
|
exports.CONST_KEY = CONST_KEY;
|
|
3331
|
+
exports.DEFAULT_ID_PREFIX = DEFAULT_ID_PREFIX;
|
|
3332
|
+
exports.DEFAULT_ID_SEPARATOR = DEFAULT_ID_SEPARATOR;
|
|
3220
3333
|
exports.DEFAULT_KEY = DEFAULT_KEY;
|
|
3221
3334
|
exports.DEFINITIONS_KEY = DEFINITIONS_KEY;
|
|
3222
3335
|
exports.DEPENDENCIES_KEY = DEPENDENCIES_KEY;
|
|
@@ -3228,6 +3341,7 @@
|
|
|
3228
3341
|
exports.ID_KEY = ID_KEY;
|
|
3229
3342
|
exports.IF_KEY = IF_KEY;
|
|
3230
3343
|
exports.ITEMS_KEY = ITEMS_KEY;
|
|
3344
|
+
exports.JSON_SCHEMA_DRAFT_2019_09 = JSON_SCHEMA_DRAFT_2019_09;
|
|
3231
3345
|
exports.JSON_SCHEMA_DRAFT_2020_12 = JSON_SCHEMA_DRAFT_2020_12;
|
|
3232
3346
|
exports.JUNK_OPTION_ID = JUNK_OPTION_ID;
|
|
3233
3347
|
exports.LOOKUP_MAP_NAME = LOOKUP_MAP_NAME;
|
|
@@ -3295,8 +3409,10 @@
|
|
|
3295
3409
|
exports.isCustomWidget = isCustomWidget;
|
|
3296
3410
|
exports.isFilesArray = isFilesArray;
|
|
3297
3411
|
exports.isFixedItems = isFixedItems;
|
|
3412
|
+
exports.isFormDataAvailable = isFormDataAvailable;
|
|
3298
3413
|
exports.isMultiSelect = isMultiSelect;
|
|
3299
3414
|
exports.isObject = isObject;
|
|
3415
|
+
exports.isRootSchema = isRootSchema;
|
|
3300
3416
|
exports.isSelect = isSelect;
|
|
3301
3417
|
exports.labelValue = labelValue;
|
|
3302
3418
|
exports.localToUTC = localToUTC;
|
|
@@ -3305,6 +3421,7 @@
|
|
|
3305
3421
|
exports.mergeObjects = mergeObjects;
|
|
3306
3422
|
exports.mergeSchemas = mergeSchemas;
|
|
3307
3423
|
exports.optionId = optionId;
|
|
3424
|
+
exports.optionalControlsId = optionalControlsId;
|
|
3308
3425
|
exports.optionsList = optionsList;
|
|
3309
3426
|
exports.orderProperties = orderProperties;
|
|
3310
3427
|
exports.pad = pad;
|
|
@@ -3315,14 +3432,16 @@
|
|
|
3315
3432
|
exports.sanitizeDataForNewSchema = sanitizeDataForNewSchema;
|
|
3316
3433
|
exports.schemaParser = schemaParser;
|
|
3317
3434
|
exports.schemaRequiresTrueValue = schemaRequiresTrueValue;
|
|
3435
|
+
exports.shallowEquals = shallowEquals;
|
|
3318
3436
|
exports.shouldRender = shouldRender;
|
|
3437
|
+
exports.shouldRenderOptionalField = shouldRenderOptionalField;
|
|
3319
3438
|
exports.sortedJSONStringify = sortedJSONStringify;
|
|
3320
3439
|
exports.titleId = titleId;
|
|
3321
3440
|
exports.toConstant = toConstant;
|
|
3322
3441
|
exports.toDateString = toDateString;
|
|
3323
3442
|
exports.toErrorList = toErrorList;
|
|
3324
3443
|
exports.toErrorSchema = toErrorSchema;
|
|
3325
|
-
exports.
|
|
3444
|
+
exports.toFieldPathId = toFieldPathId;
|
|
3326
3445
|
exports.toPathSchema = toPathSchema;
|
|
3327
3446
|
exports.unwrapErrorHandler = unwrapErrorHandler;
|
|
3328
3447
|
exports.utcToLocal = utcToLocal;
|