@rjsf/utils 6.6.1 → 6.7.0
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/LICENSE.md +201 -0
- package/dist/index.cjs +534 -376
- package/dist/index.cjs.map +4 -4
- package/dist/utils.esm.js +534 -376
- package/dist/utils.esm.js.map +4 -4
- package/dist/utils.umd.js +561 -400
- package/lib/ErrorSchemaBuilder.d.ts +1 -1
- package/lib/SelectedOptionDescription.d.ts +4 -0
- package/lib/SelectedOptionDescription.js +24 -0
- package/lib/SelectedOptionDescription.js.map +1 -0
- package/lib/allowAdditionalItems.d.ts +1 -1
- package/lib/allowAdditionalItems.js +1 -0
- package/lib/allowAdditionalItems.js.map +1 -1
- package/lib/asNumber.js +2 -0
- package/lib/asNumber.js.map +1 -1
- package/lib/canExpand.d.ts +1 -1
- package/lib/constIsAjvDataReference.d.ts +1 -1
- package/lib/constants.d.ts +8 -5
- package/lib/constants.js +10 -7
- package/lib/constants.js.map +1 -1
- package/lib/createErrorHandler.d.ts +1 -1
- package/lib/createErrorHandler.js +2 -6
- package/lib/createErrorHandler.js.map +1 -1
- package/lib/createSchemaUtils.d.ts +1 -1
- package/lib/createSchemaUtils.js +3 -1
- package/lib/createSchemaUtils.js.map +1 -1
- package/lib/dataURItoBlob.js +3 -3
- package/lib/dataURItoBlob.js.map +1 -1
- package/lib/dateRangeOptions.d.ts +1 -1
- package/lib/dateRangeOptions.js +8 -7
- package/lib/dateRangeOptions.js.map +1 -1
- package/lib/englishStringTranslator.d.ts +1 -1
- package/lib/enumOptionSelectedValue.d.ts +1 -1
- package/lib/enumOptionValueDecoder.d.ts +1 -1
- package/lib/enumOptionValueDecoder.js +1 -1
- package/lib/enumOptionValueDecoder.js.map +1 -1
- package/lib/enumOptionValueEncoder.d.ts +1 -1
- package/lib/enumOptionsDeselectValue.d.ts +1 -1
- package/lib/enumOptionsIndexForValue.d.ts +1 -1
- package/lib/enumOptionsIndexForValue.js.map +1 -1
- package/lib/enumOptionsIsSelected.d.ts +1 -1
- package/lib/enumOptionsSelectValue.d.ts +1 -1
- package/lib/enumOptionsValueForIndex.d.ts +2 -2
- package/lib/enumOptionsValueForIndex.js.map +1 -1
- package/lib/enums.d.ts +4 -0
- package/lib/enums.js +4 -0
- package/lib/enums.js.map +1 -1
- package/lib/findSchemaDefinition.d.ts +1 -1
- package/lib/findSchemaDefinition.js +15 -15
- package/lib/findSchemaDefinition.js.map +1 -1
- package/lib/getChangedFields.js +4 -6
- package/lib/getChangedFields.js.map +1 -1
- package/lib/getDateElementProps.d.ts +3 -3
- package/lib/getDiscriminatorFieldFromSchema.d.ts +1 -1
- package/lib/getDiscriminatorFieldFromSchema.js +1 -0
- package/lib/getDiscriminatorFieldFromSchema.js.map +1 -1
- package/lib/getInputProps.d.ts +1 -1
- package/lib/getOptionMatchingSimpleDiscriminator.d.ts +1 -1
- package/lib/getOptionMatchingSimpleDiscriminator.js +10 -11
- package/lib/getOptionMatchingSimpleDiscriminator.js.map +1 -1
- package/lib/getOptionValueFormat.d.ts +1 -1
- package/lib/getSchemaType.d.ts +1 -1
- package/lib/getSchemaType.js +2 -1
- package/lib/getSchemaType.js.map +1 -1
- package/lib/getSubmitButtonOptions.d.ts +1 -1
- package/lib/getSubmitButtonOptions.js +1 -1
- package/lib/getSubmitButtonOptions.js.map +1 -1
- package/lib/getTemplate.d.ts +1 -1
- package/lib/getTestIds.d.ts +1 -1
- package/lib/getUiOptions.d.ts +1 -1
- package/lib/getUiOptions.js +2 -1
- package/lib/getUiOptions.js.map +1 -1
- package/lib/getWidget.d.ts +1 -1
- package/lib/getWidget.js +4 -4
- package/lib/getWidget.js.map +1 -1
- package/lib/guessType.js +1 -1
- package/lib/guessType.js.map +1 -1
- package/lib/hasWidget.d.ts +1 -1
- package/lib/hashForSchema.d.ts +3 -1
- package/lib/hashForSchema.js +11 -4
- package/lib/hashForSchema.js.map +1 -1
- package/lib/idGenerators.d.ts +1 -1
- package/lib/index.d.ts +14 -7
- package/lib/index.js +5 -2
- package/lib/index.js.map +1 -1
- package/lib/isConstant.d.ts +1 -1
- package/lib/isCustomWidget.d.ts +1 -1
- package/lib/isCustomWidget.js +1 -1
- package/lib/isCustomWidget.js.map +1 -1
- package/lib/isFixedItems.d.ts +3 -3
- package/lib/isFixedItems.js +3 -3
- package/lib/isFixedItems.js.map +1 -1
- package/lib/isRootSchema.d.ts +1 -1
- package/lib/isRootSchema.js +2 -3
- package/lib/isRootSchema.js.map +1 -1
- package/lib/labelValue.d.ts +1 -1
- package/lib/logUnsupportedDefaultForEnum.d.ts +9 -0
- package/lib/logUnsupportedDefaultForEnum.js +18 -0
- package/lib/logUnsupportedDefaultForEnum.js.map +1 -0
- package/lib/lookupFromFormContext.d.ts +1 -1
- package/lib/mergeDefaultsWithFormData.js +6 -5
- package/lib/mergeDefaultsWithFormData.js.map +1 -1
- package/lib/mergeObjects.d.ts +4 -2
- package/lib/mergeObjects.js +1 -1
- package/lib/mergeObjects.js.map +1 -1
- package/lib/mergeSchemas.d.ts +4 -2
- package/lib/mergeSchemas.js +13 -6
- package/lib/mergeSchemas.js.map +1 -1
- package/lib/nameGenerators.d.ts +1 -1
- package/lib/optionsList.d.ts +1 -1
- package/lib/optionsList.js +22 -21
- package/lib/optionsList.js.map +1 -1
- package/lib/orderProperties.js +3 -3
- package/lib/orderProperties.js.map +1 -1
- package/lib/pad.js +1 -1
- package/lib/pad.js.map +1 -1
- package/lib/parseDateString.d.ts +1 -1
- package/lib/parseDateString.js +1 -1
- package/lib/parseDateString.js.map +1 -1
- package/lib/parser/ParserValidator.d.ts +2 -4
- package/lib/parser/ParserValidator.js +2 -0
- package/lib/parser/ParserValidator.js.map +1 -1
- package/lib/parser/index.d.ts +1 -1
- package/lib/parser/schemaParser.d.ts +2 -2
- package/lib/parser/schemaParser.js +7 -7
- package/lib/parser/schemaParser.js.map +1 -1
- package/lib/rangeSpec.d.ts +1 -2
- package/lib/rangeSpec.js.map +1 -1
- package/lib/removeOptionalEmptyObjects.d.ts +1 -1
- package/lib/removeOptionalEmptyObjects.js +6 -8
- package/lib/removeOptionalEmptyObjects.js.map +1 -1
- package/lib/resolveUiSchema.d.ts +1 -1
- package/lib/resolveUiSchema.js +16 -16
- package/lib/resolveUiSchema.js.map +1 -1
- package/lib/schema/findFieldInSchema.d.ts +1 -1
- package/lib/schema/findSelectedOptionInXxxOf.d.ts +1 -1
- package/lib/schema/findSelectedOptionInXxxOf.js +1 -3
- package/lib/schema/findSelectedOptionInXxxOf.js.map +1 -1
- package/lib/schema/getClosestMatchingOption.d.ts +1 -1
- package/lib/schema/getClosestMatchingOption.js +6 -9
- package/lib/schema/getClosestMatchingOption.js.map +1 -1
- package/lib/schema/getDefaultFormState.d.ts +4 -4
- package/lib/schema/getDefaultFormState.js +81 -43
- package/lib/schema/getDefaultFormState.js.map +1 -1
- package/lib/schema/getDisplayLabel.d.ts +1 -1
- package/lib/schema/getDisplayLabel.js +2 -3
- package/lib/schema/getDisplayLabel.js.map +1 -1
- package/lib/schema/getFirstMatchingOption.d.ts +1 -1
- package/lib/schema/getFirstMatchingOption.js +2 -2
- package/lib/schema/getFirstMatchingOption.js.map +1 -1
- package/lib/schema/getFromSchema.d.ts +1 -1
- package/lib/schema/index.js +9 -3
- package/lib/schema/index.js.map +1 -1
- package/lib/schema/isFilesArray.d.ts +1 -1
- package/lib/schema/isMultiSelect.d.ts +1 -1
- package/lib/schema/isMultiSelect.js.map +1 -1
- package/lib/schema/isSelect.d.ts +1 -1
- package/lib/schema/isSelect.js +1 -1
- package/lib/schema/isSelect.js.map +1 -1
- package/lib/schema/omitExtraData.d.ts +1 -1
- package/lib/schema/omitExtraData.js +66 -52
- package/lib/schema/omitExtraData.js.map +1 -1
- package/lib/schema/retrieveSchema.d.ts +7 -3
- package/lib/schema/retrieveSchema.js +83 -56
- package/lib/schema/retrieveSchema.js.map +1 -1
- package/lib/schema/sanitizeDataForNewSchema.d.ts +1 -1
- package/lib/schema/sanitizeDataForNewSchema.js +48 -7
- package/lib/schema/sanitizeDataForNewSchema.js.map +1 -1
- package/lib/schema/toPathSchema.d.ts +1 -1
- package/lib/schema/toPathSchema.js +9 -5
- package/lib/schema/toPathSchema.js.map +1 -1
- package/lib/schemaRequiresTrueValue.d.ts +1 -1
- package/lib/schemaRequiresTrueValue.js +4 -3
- package/lib/schemaRequiresTrueValue.js.map +1 -1
- package/lib/shallowEquals.js +2 -2
- package/lib/shallowEquals.js.map +1 -1
- package/lib/shouldRenderOptionalField.d.ts +1 -1
- package/lib/toConstant.d.ts +1 -1
- package/lib/toDateString.d.ts +1 -1
- package/lib/toErrorList.d.ts +1 -1
- package/lib/toErrorList.js +3 -3
- package/lib/toErrorList.js.map +1 -1
- package/lib/toErrorSchema.d.ts +1 -1
- package/lib/toFieldPathId.d.ts +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/lib/types.d.ts +63 -57
- package/lib/unwrapErrorHandler.d.ts +1 -1
- package/lib/unwrapErrorHandler.js +7 -9
- package/lib/unwrapErrorHandler.js.map +1 -1
- package/lib/useAltDateWidgetProps.d.ts +6 -6
- package/lib/useAltDateWidgetProps.js +3 -3
- package/lib/useAltDateWidgetProps.js.map +1 -1
- package/lib/useFileWidgetProps.d.ts +2 -2
- package/lib/useFileWidgetProps.js +3 -3
- package/lib/useFileWidgetProps.js.map +1 -1
- package/lib/validationDataMerge.d.ts +1 -1
- package/lib/withIdRefPrefix.d.ts +1 -1
- package/lib/withIdRefPrefix.js +12 -12
- package/lib/withIdRefPrefix.js.map +1 -1
- package/package.json +19 -19
- package/src/ErrorSchemaBuilder.ts +1 -1
- package/src/SelectedOptionDescription.tsx +48 -0
- package/src/allowAdditionalItems.ts +2 -1
- package/src/asNumber.ts +2 -0
- package/src/canExpand.ts +1 -1
- package/src/constIsAjvDataReference.ts +2 -2
- package/src/constants.ts +10 -7
- package/src/createErrorHandler.ts +6 -7
- package/src/createSchemaUtils.ts +4 -2
- package/src/dataURItoBlob.ts +3 -3
- package/src/dateRangeOptions.ts +9 -7
- package/src/englishStringTranslator.ts +1 -1
- package/src/enumOptionSelectedValue.ts +1 -1
- package/src/enumOptionValueDecoder.ts +2 -2
- package/src/enumOptionValueEncoder.ts +1 -1
- package/src/enumOptionsDeselectValue.ts +1 -1
- package/src/enumOptionsIndexForValue.ts +2 -2
- package/src/enumOptionsIsSelected.ts +1 -1
- package/src/enumOptionsSelectValue.ts +1 -1
- package/src/enumOptionsValueForIndex.ts +2 -2
- package/src/enums.ts +4 -0
- package/src/findSchemaDefinition.ts +18 -17
- package/src/getChangedFields.ts +5 -5
- package/src/getDateElementProps.ts +3 -3
- package/src/getDiscriminatorFieldFromSchema.ts +2 -1
- package/src/getInputProps.ts +1 -1
- package/src/getOptionMatchingSimpleDiscriminator.ts +11 -15
- package/src/getOptionValueFormat.ts +1 -1
- package/src/getSchemaType.ts +3 -2
- package/src/getSubmitButtonOptions.ts +3 -3
- package/src/getTemplate.ts +1 -1
- package/src/getTestIds.ts +1 -1
- package/src/getUiOptions.ts +10 -2
- package/src/getWidget.tsx +5 -6
- package/src/guessType.ts +1 -1
- package/src/hasWidget.ts +1 -1
- package/src/hashForSchema.ts +12 -5
- package/src/idGenerators.ts +1 -1
- package/src/index.ts +16 -5
- package/src/isConstant.ts +1 -1
- package/src/isCustomWidget.ts +2 -2
- package/src/isFixedItems.ts +4 -4
- package/src/isRootSchema.ts +3 -5
- package/src/labelValue.ts +1 -1
- package/src/logUnsupportedDefaultForEnum.ts +28 -0
- package/src/lookupFromFormContext.ts +1 -1
- package/src/mergeDefaultsWithFormData.ts +8 -7
- package/src/mergeObjects.ts +2 -2
- package/src/mergeSchemas.ts +14 -7
- package/src/nameGenerators.ts +1 -1
- package/src/optionsList.ts +21 -23
- package/src/orderProperties.ts +4 -4
- package/src/pad.ts +1 -1
- package/src/parseDateString.ts +2 -2
- package/src/parser/ParserValidator.ts +4 -4
- package/src/parser/index.ts +1 -1
- package/src/parser/schemaParser.ts +10 -9
- package/src/rangeSpec.ts +1 -2
- package/src/removeOptionalEmptyObjects.ts +8 -11
- package/src/resolveUiSchema.ts +32 -25
- package/src/schema/findFieldInSchema.ts +1 -1
- package/src/schema/findSelectedOptionInXxxOf.ts +17 -7
- package/src/schema/getClosestMatchingOption.ts +17 -11
- package/src/schema/getDefaultFormState.ts +104 -43
- package/src/schema/getDisplayLabel.ts +4 -5
- package/src/schema/getFirstMatchingOption.ts +3 -3
- package/src/schema/getFromSchema.ts +1 -1
- package/src/schema/index.ts +3 -0
- package/src/schema/isFilesArray.ts +1 -1
- package/src/schema/isMultiSelect.ts +7 -1
- package/src/schema/isSelect.ts +8 -2
- package/src/schema/omitExtraData.ts +73 -60
- package/src/schema/retrieveSchema.ts +131 -83
- package/src/schema/sanitizeDataForNewSchema.ts +57 -8
- package/src/schema/toPathSchema.ts +11 -7
- package/src/schemaRequiresTrueValue.ts +4 -4
- package/src/shallowEquals.ts +2 -2
- package/src/shouldRenderOptionalField.ts +1 -1
- package/src/toConstant.ts +1 -1
- package/src/toDateString.ts +1 -1
- package/src/toErrorList.ts +4 -4
- package/src/toErrorSchema.ts +1 -1
- package/src/toFieldPathId.ts +1 -1
- package/src/types.ts +92 -63
- package/src/unwrapErrorHandler.ts +11 -12
- package/src/useAltDateWidgetProps.tsx +10 -8
- package/src/useFileWidgetProps.ts +7 -7
- package/src/validationDataMerge.ts +1 -1
- package/src/withIdRefPrefix.ts +12 -12
package/dist/index.cjs
CHANGED
|
@@ -61,10 +61,13 @@ __export(index_exports, {
|
|
|
61
61
|
REF_KEY: () => REF_KEY,
|
|
62
62
|
REQUIRED_KEY: () => REQUIRED_KEY,
|
|
63
63
|
RJSF_ADDITIONAL_PROPERTIES_FLAG: () => RJSF_ADDITIONAL_PROPERTIES_FLAG,
|
|
64
|
+
RJSF_PREFIX_KEY: () => RJSF_PREFIX_KEY,
|
|
65
|
+
RJSF_REF_CYCLE_KEY: () => RJSF_REF_CYCLE_KEY,
|
|
64
66
|
RJSF_REF_KEY: () => RJSF_REF_KEY,
|
|
65
67
|
ROOT_SCHEMA_PREFIX: () => ROOT_SCHEMA_PREFIX,
|
|
66
68
|
SCHEMA_KEY: () => SCHEMA_KEY,
|
|
67
69
|
SUBMIT_BTN_OPTIONS_KEY: () => SUBMIT_BTN_OPTIONS_KEY,
|
|
70
|
+
SelectedOptionDescription: () => SelectedOptionDescription,
|
|
68
71
|
TranslatableString: () => TranslatableString,
|
|
69
72
|
UI_DEFINITIONS_KEY: () => UI_DEFINITIONS_KEY,
|
|
70
73
|
UI_FIELD_KEY: () => UI_FIELD_KEY,
|
|
@@ -135,6 +138,7 @@ __export(index_exports, {
|
|
|
135
138
|
isValueEmpty: () => isValueEmpty,
|
|
136
139
|
labelValue: () => labelValue,
|
|
137
140
|
localToUTC: () => localToUTC,
|
|
141
|
+
logUnsupportedDefaultForEnum: () => logUnsupportedDefaultForEnum,
|
|
138
142
|
lookupFromFormContext: () => lookupFromFormContext,
|
|
139
143
|
mergeDefaultsWithFormData: () => mergeDefaultsWithFormData,
|
|
140
144
|
mergeObjects: () => mergeObjects,
|
|
@@ -221,7 +225,7 @@ function asNumber(value) {
|
|
|
221
225
|
}
|
|
222
226
|
|
|
223
227
|
// src/constants.ts
|
|
224
|
-
var ADDITIONAL_PROPERTY_FLAG = "__additional_property";
|
|
228
|
+
var ADDITIONAL_PROPERTY_FLAG = /* @__PURE__ */ Symbol("__additional_property");
|
|
225
229
|
var ADDITIONAL_PROPERTIES_KEY = "additionalProperties";
|
|
226
230
|
var ALL_OF_KEY = "allOf";
|
|
227
231
|
var ANY_OF_KEY = "anyOf";
|
|
@@ -243,15 +247,17 @@ var READONLY_KEY = "readonly";
|
|
|
243
247
|
var REQUIRED_KEY = "required";
|
|
244
248
|
var SUBMIT_BTN_OPTIONS_KEY = "submitButtonOptions";
|
|
245
249
|
var REF_KEY = "$ref";
|
|
246
|
-
var RJSF_REF_KEY = "__rjsf_ref";
|
|
250
|
+
var RJSF_REF_KEY = /* @__PURE__ */ Symbol("__rjsf_ref");
|
|
251
|
+
var RJSF_REF_CYCLE_KEY = /* @__PURE__ */ Symbol("__rjsf_ref_cycle");
|
|
247
252
|
var SCHEMA_KEY = "$schema";
|
|
248
253
|
var DEFAULT_ID_PREFIX = "root";
|
|
249
254
|
var DEFAULT_ID_SEPARATOR = "_";
|
|
250
255
|
var DISCRIMINATOR_PATH = ["discriminator", "propertyName"];
|
|
251
256
|
var FORM_CONTEXT_NAME = "formContext";
|
|
252
257
|
var LOOKUP_MAP_NAME = "layoutGridLookupMap";
|
|
253
|
-
var
|
|
254
|
-
var
|
|
258
|
+
var RJSF_PREFIX_KEY = "__rjsf";
|
|
259
|
+
var RJSF_ADDITIONAL_PROPERTIES_FLAG = `${RJSF_PREFIX_KEY}_additionalProperties`;
|
|
260
|
+
var ROOT_SCHEMA_PREFIX = `${RJSF_PREFIX_KEY}_rootSchema`;
|
|
255
261
|
var UI_FIELD_KEY = "ui:field";
|
|
256
262
|
var UI_WIDGET_KEY = "ui:widget";
|
|
257
263
|
var UI_OPTIONS_KEY = "ui:options";
|
|
@@ -265,7 +271,7 @@ function getUiOptions(uiSchema = {}, globalOptions = {}) {
|
|
|
265
271
|
if (!uiSchema) {
|
|
266
272
|
return { ...globalOptions };
|
|
267
273
|
}
|
|
268
|
-
return Object.keys(uiSchema).filter((key) => key.
|
|
274
|
+
return Object.keys(uiSchema).filter((key) => key.startsWith("ui:")).reduce(
|
|
269
275
|
(options, key) => {
|
|
270
276
|
const value = uiSchema[key];
|
|
271
277
|
if (key === UI_WIDGET_KEY && isObject(value)) {
|
|
@@ -309,21 +315,20 @@ function createErrorHandler(formData) {
|
|
|
309
315
|
}
|
|
310
316
|
};
|
|
311
317
|
if (Array.isArray(formData)) {
|
|
312
|
-
return formData.reduce((acc, value, key) => {
|
|
313
|
-
return { ...acc, [key]: createErrorHandler(value) };
|
|
314
|
-
}, handler);
|
|
318
|
+
return formData.reduce((acc, value, key) => ({ ...acc, [key]: createErrorHandler(value) }), handler);
|
|
315
319
|
}
|
|
316
320
|
if ((0, import_isPlainObject.default)(formData)) {
|
|
317
321
|
const formObject = formData;
|
|
318
|
-
return Object.keys(formObject).reduce(
|
|
319
|
-
|
|
320
|
-
|
|
322
|
+
return Object.keys(formObject).reduce(
|
|
323
|
+
(acc, key) => ({ ...acc, [key]: createErrorHandler(formObject[key]) }),
|
|
324
|
+
handler
|
|
325
|
+
);
|
|
321
326
|
}
|
|
322
327
|
return handler;
|
|
323
328
|
}
|
|
324
329
|
|
|
325
330
|
// src/createSchemaUtils.ts
|
|
326
|
-
var
|
|
331
|
+
var import_get16 = __toESM(require("lodash/get"), 1);
|
|
327
332
|
|
|
328
333
|
// src/deepEquals.ts
|
|
329
334
|
var import_fast_equals = require("fast-equals");
|
|
@@ -369,20 +374,21 @@ function findEmbeddedSchemaRecursive(schema, ref) {
|
|
|
369
374
|
}
|
|
370
375
|
function makeAllReferencesAbsolute(schema, baseURI) {
|
|
371
376
|
const currentURI = (0, import_get.default)(schema, ID_KEY, baseURI);
|
|
372
|
-
|
|
373
|
-
|
|
377
|
+
let result = schema;
|
|
378
|
+
if (REF_KEY in result) {
|
|
379
|
+
result = { ...result, [REF_KEY]: import_fast_uri.default.resolve(currentURI, result[REF_KEY]) };
|
|
374
380
|
}
|
|
375
|
-
for (const [key, subSchema] of Object.entries(
|
|
381
|
+
for (const [key, subSchema] of Object.entries(result)) {
|
|
376
382
|
if (Array.isArray(subSchema)) {
|
|
377
|
-
|
|
378
|
-
...
|
|
383
|
+
result = {
|
|
384
|
+
...result,
|
|
379
385
|
[key]: subSchema.map((item) => (0, import_isObject3.default)(item) ? makeAllReferencesAbsolute(item, currentURI) : item)
|
|
380
386
|
};
|
|
381
387
|
} else if ((0, import_isObject3.default)(subSchema)) {
|
|
382
|
-
|
|
388
|
+
result = { ...result, [key]: makeAllReferencesAbsolute(subSchema, currentURI) };
|
|
383
389
|
}
|
|
384
390
|
}
|
|
385
|
-
return
|
|
391
|
+
return result;
|
|
386
392
|
}
|
|
387
393
|
function splitKeyElementFromObject(key, object) {
|
|
388
394
|
const value = object[key];
|
|
@@ -392,22 +398,23 @@ function splitKeyElementFromObject(key, object) {
|
|
|
392
398
|
function findSchemaDefinitionRecursive($ref, rootSchema = {}, recurseList = [], baseURI = (0, import_get.default)(rootSchema, [ID_KEY])) {
|
|
393
399
|
const ref = $ref || "";
|
|
394
400
|
let current = void 0;
|
|
401
|
+
let currentBaseURI = baseURI;
|
|
395
402
|
if (ref.startsWith("#")) {
|
|
396
403
|
const decodedRef = decodeURIComponent(ref.substring(1));
|
|
397
|
-
if (
|
|
404
|
+
if (currentBaseURI === void 0 || ID_KEY in rootSchema && rootSchema[ID_KEY] === currentBaseURI) {
|
|
398
405
|
current = import_jsonpointer.default.get(rootSchema, decodedRef);
|
|
399
406
|
} else if (rootSchema[SCHEMA_KEY] === JSON_SCHEMA_DRAFT_2020_12) {
|
|
400
|
-
current = findEmbeddedSchemaRecursive(rootSchema,
|
|
407
|
+
current = findEmbeddedSchemaRecursive(rootSchema, currentBaseURI.replace(/\/$/, ""));
|
|
401
408
|
if (current !== void 0) {
|
|
402
409
|
current = import_jsonpointer.default.get(current, decodedRef);
|
|
403
410
|
}
|
|
404
411
|
}
|
|
405
412
|
} else if (rootSchema[SCHEMA_KEY] === JSON_SCHEMA_DRAFT_2020_12) {
|
|
406
|
-
const resolvedRef =
|
|
413
|
+
const resolvedRef = currentBaseURI ? import_fast_uri.default.resolve(currentBaseURI, ref) : ref;
|
|
407
414
|
const [refId, ...refAnchor] = resolvedRef.replace(/#\/?$/, "").split("#");
|
|
408
415
|
current = findEmbeddedSchemaRecursive(rootSchema, refId.replace(/\/$/, ""));
|
|
409
416
|
if (current !== void 0) {
|
|
410
|
-
|
|
417
|
+
currentBaseURI = current[ID_KEY];
|
|
411
418
|
if (!(0, import_isEmpty.default)(refAnchor)) {
|
|
412
419
|
current = import_jsonpointer.default.get(current, decodeURIComponent(refAnchor.join("#")));
|
|
413
420
|
}
|
|
@@ -427,13 +434,12 @@ function findSchemaDefinitionRecursive($ref, rootSchema = {}, recurseList = [],
|
|
|
427
434
|
throw new Error(`Definition for ${firstRef} contains a circular reference through ${circularPath}`);
|
|
428
435
|
}
|
|
429
436
|
const [remaining, theRef] = splitKeyElementFromObject(REF_KEY, current);
|
|
430
|
-
const subSchema = findSchemaDefinitionRecursive(theRef, rootSchema, [...recurseList, ref],
|
|
437
|
+
const subSchema = findSchemaDefinitionRecursive(theRef, rootSchema, [...recurseList, ref], currentBaseURI);
|
|
431
438
|
if (Object.keys(remaining).length > 0) {
|
|
432
439
|
if (rootSchema[SCHEMA_KEY] === JSON_SCHEMA_DRAFT_2019_09 || rootSchema[SCHEMA_KEY] === JSON_SCHEMA_DRAFT_2020_12) {
|
|
433
440
|
return { [ALL_OF_KEY]: [remaining, subSchema] };
|
|
434
|
-
} else {
|
|
435
|
-
return { ...remaining, ...subSchema };
|
|
436
441
|
}
|
|
442
|
+
return { ...remaining, ...subSchema };
|
|
437
443
|
}
|
|
438
444
|
return subSchema;
|
|
439
445
|
}
|
|
@@ -489,7 +495,7 @@ function guessType(value) {
|
|
|
489
495
|
if (typeof value === "boolean") {
|
|
490
496
|
return "boolean";
|
|
491
497
|
}
|
|
492
|
-
if (!isNaN(value)) {
|
|
498
|
+
if (typeof value === "number" && !Number.isNaN(value)) {
|
|
493
499
|
return "number";
|
|
494
500
|
}
|
|
495
501
|
if (typeof value === "object") {
|
|
@@ -515,7 +521,7 @@ function getSchemaType(schema) {
|
|
|
515
521
|
}
|
|
516
522
|
if (Array.isArray(type)) {
|
|
517
523
|
if (type.length === 2 && type.includes("null")) {
|
|
518
|
-
type = type.find((
|
|
524
|
+
type = type.find((t) => t !== "null");
|
|
519
525
|
} else {
|
|
520
526
|
type = type[0];
|
|
521
527
|
}
|
|
@@ -525,18 +531,22 @@ function getSchemaType(schema) {
|
|
|
525
531
|
|
|
526
532
|
// src/mergeSchemas.ts
|
|
527
533
|
function mergeSchemas(obj1, obj2) {
|
|
528
|
-
const acc =
|
|
529
|
-
|
|
534
|
+
const acc = { ...obj1 };
|
|
535
|
+
const result = Object.keys(obj2).reduce((accumulator, key) => {
|
|
530
536
|
const left = obj1 ? obj1[key] : {}, right = obj2[key];
|
|
531
537
|
if (obj1 && key in obj1 && isObject(right)) {
|
|
532
|
-
|
|
538
|
+
accumulator[key] = mergeSchemas(left, right);
|
|
533
539
|
} else if (obj1 && obj2 && (getSchemaType(obj1) === "object" || getSchemaType(obj2) === "object") && key === REQUIRED_KEY && Array.isArray(left) && Array.isArray(right)) {
|
|
534
|
-
|
|
540
|
+
accumulator[key] = (0, import_union.default)(left, right);
|
|
535
541
|
} else {
|
|
536
|
-
|
|
542
|
+
accumulator[key] = right;
|
|
537
543
|
}
|
|
538
|
-
return
|
|
544
|
+
return accumulator;
|
|
539
545
|
}, acc);
|
|
546
|
+
for (const sym of Object.getOwnPropertySymbols(obj2)) {
|
|
547
|
+
result[sym] = obj2[sym];
|
|
548
|
+
}
|
|
549
|
+
return result;
|
|
540
550
|
}
|
|
541
551
|
|
|
542
552
|
// src/schema/getFirstMatchingOption.ts
|
|
@@ -550,23 +560,22 @@ function getOptionMatchingSimpleDiscriminator(formData, options, discriminatorFi
|
|
|
550
560
|
if (formData && discriminatorField) {
|
|
551
561
|
const value = (0, import_get3.default)(formData, discriminatorField);
|
|
552
562
|
if (value === void 0) {
|
|
553
|
-
return;
|
|
563
|
+
return void 0;
|
|
554
564
|
}
|
|
555
|
-
for (let i = 0; i < options.length; i
|
|
565
|
+
for (let i = 0; i < options.length; i += 1) {
|
|
556
566
|
const option = options[i];
|
|
557
567
|
const discriminator = (0, import_get3.default)(option, [PROPERTIES_KEY, discriminatorField], {});
|
|
558
|
-
if (discriminator.type
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
return i;
|
|
568
|
+
if (discriminator.type !== "object" && discriminator.type !== "array") {
|
|
569
|
+
if (discriminator.const === value) {
|
|
570
|
+
return i;
|
|
571
|
+
}
|
|
572
|
+
if (discriminator.enum?.includes(value)) {
|
|
573
|
+
return i;
|
|
574
|
+
}
|
|
566
575
|
}
|
|
567
576
|
}
|
|
568
577
|
}
|
|
569
|
-
return;
|
|
578
|
+
return void 0;
|
|
570
579
|
}
|
|
571
580
|
|
|
572
581
|
// src/schema/getFirstMatchingOption.ts
|
|
@@ -578,7 +587,7 @@ function getFirstMatchingOption(validator, formData, options, rootSchema, discri
|
|
|
578
587
|
if ((0, import_isNumber.default)(simpleDiscriminatorMatch)) {
|
|
579
588
|
return simpleDiscriminatorMatch;
|
|
580
589
|
}
|
|
581
|
-
for (let i = 0; i < options.length; i
|
|
590
|
+
for (let i = 0; i < options.length; i += 1) {
|
|
582
591
|
const option = options[i];
|
|
583
592
|
if (discriminatorField && (0, import_has.default)(option, [PROPERTIES_KEY, discriminatorField])) {
|
|
584
593
|
const value = (0, import_get4.default)(formData, discriminatorField);
|
|
@@ -603,7 +612,7 @@ function getFirstMatchingOption(validator, formData, options, rootSchema, discri
|
|
|
603
612
|
shallowClone.allOf.push(requiresAnyOf);
|
|
604
613
|
augmentedSchema = shallowClone;
|
|
605
614
|
} else {
|
|
606
|
-
augmentedSchema =
|
|
615
|
+
augmentedSchema = { ...option, ...requiresAnyOf };
|
|
607
616
|
}
|
|
608
617
|
delete augmentedSchema.required;
|
|
609
618
|
if (validator.isValid(augmentedSchema, formData, rootSchema)) {
|
|
@@ -639,6 +648,12 @@ function retrieveSchema(validator, schema, rootSchema = {}, rawFormData, experim
|
|
|
639
648
|
resolveAnyOfOrOneOfRefs
|
|
640
649
|
)[0];
|
|
641
650
|
}
|
|
651
|
+
function normalizeBooleanSchema(schema) {
|
|
652
|
+
if (typeof schema !== "boolean") {
|
|
653
|
+
return schema;
|
|
654
|
+
}
|
|
655
|
+
return schema ? {} : { not: {} };
|
|
656
|
+
}
|
|
642
657
|
function resolveCondition(validator, schema, rootSchema, expandAllBranches, recurseList, formData, experimental_customMergeAllOf) {
|
|
643
658
|
const { if: expression, then, else: otherwise, ...resolvedSchemaLessConditional } = schema;
|
|
644
659
|
const conditionValue = validator.isValid(expression, formData || {}, rootSchema);
|
|
@@ -646,10 +661,11 @@ function resolveCondition(validator, schema, rootSchema, expandAllBranches, recu
|
|
|
646
661
|
let schemas = [];
|
|
647
662
|
if (expandAllBranches) {
|
|
648
663
|
if (then && typeof then !== "boolean") {
|
|
664
|
+
const thenSchema = then;
|
|
649
665
|
schemas = schemas.concat(
|
|
650
666
|
retrieveSchemaInternal(
|
|
651
667
|
validator,
|
|
652
|
-
|
|
668
|
+
thenSchema,
|
|
653
669
|
rootSchema,
|
|
654
670
|
formData,
|
|
655
671
|
expandAllBranches,
|
|
@@ -659,10 +675,11 @@ function resolveCondition(validator, schema, rootSchema, expandAllBranches, recu
|
|
|
659
675
|
);
|
|
660
676
|
}
|
|
661
677
|
if (otherwise && typeof otherwise !== "boolean") {
|
|
678
|
+
const otherwiseSchema = otherwise;
|
|
662
679
|
schemas = schemas.concat(
|
|
663
680
|
retrieveSchemaInternal(
|
|
664
681
|
validator,
|
|
665
|
-
|
|
682
|
+
otherwiseSchema,
|
|
666
683
|
rootSchema,
|
|
667
684
|
formData,
|
|
668
685
|
expandAllBranches,
|
|
@@ -672,8 +689,9 @@ function resolveCondition(validator, schema, rootSchema, expandAllBranches, recu
|
|
|
672
689
|
);
|
|
673
690
|
}
|
|
674
691
|
} else {
|
|
675
|
-
const
|
|
676
|
-
if (
|
|
692
|
+
const conditionalBranch = conditionValue ? then : otherwise;
|
|
693
|
+
if (conditionalBranch !== void 0) {
|
|
694
|
+
const conditionalSchema = normalizeBooleanSchema(conditionalBranch);
|
|
677
695
|
schemas = schemas.concat(
|
|
678
696
|
retrieveSchemaInternal(
|
|
679
697
|
validator,
|
|
@@ -749,8 +767,8 @@ function resolveSchema(validator, schema, rootSchema, expandAllBranches, recurse
|
|
|
749
767
|
formData,
|
|
750
768
|
experimental_customMergeAllOf
|
|
751
769
|
);
|
|
752
|
-
return resolvedSchemas.flatMap(
|
|
753
|
-
|
|
770
|
+
return resolvedSchemas.flatMap(
|
|
771
|
+
(s) => retrieveSchemaInternal(
|
|
754
772
|
validator,
|
|
755
773
|
s,
|
|
756
774
|
rootSchema,
|
|
@@ -758,8 +776,8 @@ function resolveSchema(validator, schema, rootSchema, expandAllBranches, recurse
|
|
|
758
776
|
expandAllBranches,
|
|
759
777
|
recurseList,
|
|
760
778
|
experimental_customMergeAllOf
|
|
761
|
-
)
|
|
762
|
-
|
|
779
|
+
)
|
|
780
|
+
);
|
|
763
781
|
}
|
|
764
782
|
if (ALL_OF_KEY in schema && Array.isArray(schema[ALL_OF_KEY])) {
|
|
765
783
|
const allOfSchemaElements = schema.allOf.map(
|
|
@@ -797,30 +815,38 @@ function resolveReference(validator, schema, rootSchema, expandAllBranches, recu
|
|
|
797
815
|
}
|
|
798
816
|
return [schema];
|
|
799
817
|
}
|
|
800
|
-
function resolveAllReferences(schema, rootSchema, recurseList, baseURI, resolveAnyOfOrOneOfRefs) {
|
|
818
|
+
function resolveAllReferences(schema, rootSchema, recurseList, baseURI, resolveAnyOfOrOneOfRefs, markCycleOnDetection = false) {
|
|
801
819
|
if (!isObject(schema)) {
|
|
802
820
|
return schema;
|
|
803
821
|
}
|
|
804
822
|
let resolvedSchema = schema;
|
|
823
|
+
let currentBaseURI = baseURI;
|
|
805
824
|
if (REF_KEY in resolvedSchema) {
|
|
806
825
|
const { $ref, ...localSchema } = resolvedSchema;
|
|
807
826
|
if (recurseList.includes($ref)) {
|
|
808
|
-
return resolvedSchema;
|
|
827
|
+
return markCycleOnDetection ? { ...resolvedSchema, [RJSF_REF_CYCLE_KEY]: true } : resolvedSchema;
|
|
809
828
|
}
|
|
810
829
|
recurseList.push($ref);
|
|
811
|
-
const refSchema = findSchemaDefinition($ref, rootSchema,
|
|
830
|
+
const refSchema = findSchemaDefinition($ref, rootSchema, currentBaseURI);
|
|
812
831
|
resolvedSchema = { ...refSchema, ...localSchema, [RJSF_REF_KEY]: $ref };
|
|
813
832
|
if (ID_KEY in resolvedSchema) {
|
|
814
|
-
|
|
833
|
+
currentBaseURI = resolvedSchema[ID_KEY];
|
|
815
834
|
}
|
|
816
835
|
}
|
|
817
836
|
if (PROPERTIES_KEY in resolvedSchema) {
|
|
818
837
|
const childrenLists = [];
|
|
819
838
|
const updatedProps = (0, import_transform.default)(
|
|
820
839
|
resolvedSchema[PROPERTIES_KEY],
|
|
821
|
-
(
|
|
840
|
+
(acc, value, key) => {
|
|
822
841
|
const childList = [...recurseList];
|
|
823
|
-
|
|
842
|
+
acc[key] = resolveAllReferences(
|
|
843
|
+
value,
|
|
844
|
+
rootSchema,
|
|
845
|
+
childList,
|
|
846
|
+
currentBaseURI,
|
|
847
|
+
resolveAnyOfOrOneOfRefs,
|
|
848
|
+
!resolveAnyOfOrOneOfRefs
|
|
849
|
+
);
|
|
824
850
|
childrenLists.push(childList);
|
|
825
851
|
},
|
|
826
852
|
{}
|
|
@@ -831,7 +857,14 @@ function resolveAllReferences(schema, rootSchema, recurseList, baseURI, resolveA
|
|
|
831
857
|
if (ITEMS_KEY in resolvedSchema && !Array.isArray(resolvedSchema.items) && typeof resolvedSchema.items !== "boolean") {
|
|
832
858
|
resolvedSchema = {
|
|
833
859
|
...resolvedSchema,
|
|
834
|
-
|
|
860
|
+
// Array items are only rendered when data exists, so a $ref cycle here does NOT cause an infinite render.
|
|
861
|
+
items: resolveAllReferences(
|
|
862
|
+
resolvedSchema.items,
|
|
863
|
+
rootSchema,
|
|
864
|
+
recurseList,
|
|
865
|
+
currentBaseURI,
|
|
866
|
+
resolveAnyOfOrOneOfRefs
|
|
867
|
+
)
|
|
835
868
|
};
|
|
836
869
|
}
|
|
837
870
|
if (resolveAnyOfOrOneOfRefs) {
|
|
@@ -848,7 +881,7 @@ function resolveAllReferences(schema, rootSchema, recurseList, baseURI, resolveA
|
|
|
848
881
|
resolvedSchema = {
|
|
849
882
|
...resolvedSchema,
|
|
850
883
|
[key]: schemas.map(
|
|
851
|
-
(s) => resolveAllReferences(s, rootSchema, recurseList,
|
|
884
|
+
(s) => resolveAllReferences(s, rootSchema, recurseList, currentBaseURI, resolveAnyOfOrOneOfRefs)
|
|
852
885
|
)
|
|
853
886
|
};
|
|
854
887
|
}
|
|
@@ -875,7 +908,7 @@ function stubExistingAdditionalProperties(validator, theSchema, rootSchema, aFor
|
|
|
875
908
|
(0, import_get5.default)(formData, [key]),
|
|
876
909
|
experimental_customMergeAllOf
|
|
877
910
|
);
|
|
878
|
-
|
|
911
|
+
schema.properties[key][ADDITIONAL_PROPERTY_FLAG] = true;
|
|
879
912
|
return;
|
|
880
913
|
}
|
|
881
914
|
}
|
|
@@ -887,7 +920,7 @@ function stubExistingAdditionalProperties(validator, theSchema, rootSchema, aFor
|
|
|
887
920
|
validator,
|
|
888
921
|
{ [REF_KEY]: (0, import_get5.default)(schema.additionalProperties, [REF_KEY]) },
|
|
889
922
|
rootSchema,
|
|
890
|
-
formData,
|
|
923
|
+
(0, import_get5.default)(formData, [key]),
|
|
891
924
|
experimental_customMergeAllOf
|
|
892
925
|
);
|
|
893
926
|
} else if ("type" in schema.additionalProperties) {
|
|
@@ -904,10 +937,10 @@ function stubExistingAdditionalProperties(validator, theSchema, rootSchema, aFor
|
|
|
904
937
|
additionalProperties = { type: guessType((0, import_get5.default)(formData, [key])) };
|
|
905
938
|
}
|
|
906
939
|
schema.properties[key] = additionalProperties;
|
|
907
|
-
|
|
940
|
+
schema.properties[key][ADDITIONAL_PROPERTY_FLAG] = true;
|
|
908
941
|
} else {
|
|
909
942
|
schema.properties[key] = { type: "null" };
|
|
910
|
-
|
|
943
|
+
schema.properties[key][ADDITIONAL_PROPERTY_FLAG] = true;
|
|
911
944
|
}
|
|
912
945
|
});
|
|
913
946
|
return schema;
|
|
@@ -950,17 +983,26 @@ function retrieveSchemaInternal(validator, schema, rootSchema, rawFormData, expa
|
|
|
950
983
|
try {
|
|
951
984
|
const withContainsSchemas = [];
|
|
952
985
|
const withoutContainsSchemas = [];
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
986
|
+
const allOfSymbols = {};
|
|
987
|
+
resolvedSchema.allOf?.forEach((allOfItem) => {
|
|
988
|
+
if (typeof allOfItem === "object" && allOfItem.contains) {
|
|
989
|
+
withContainsSchemas.push(allOfItem);
|
|
956
990
|
} else {
|
|
957
|
-
withoutContainsSchemas.push(
|
|
991
|
+
withoutContainsSchemas.push(allOfItem);
|
|
992
|
+
for (const sym of Object.getOwnPropertySymbols(allOfItem)) {
|
|
993
|
+
if (!(sym in allOfSymbols)) {
|
|
994
|
+
allOfSymbols[sym] = allOfItem[sym];
|
|
995
|
+
}
|
|
996
|
+
}
|
|
958
997
|
}
|
|
959
998
|
});
|
|
960
999
|
if (withContainsSchemas.length) {
|
|
961
1000
|
resolvedSchema = { ...resolvedSchema, allOf: withoutContainsSchemas };
|
|
962
1001
|
}
|
|
963
1002
|
resolvedSchema = experimental_customMergeAllOf ? experimental_customMergeAllOf(resolvedSchema) : mergeAllOf(resolvedSchema);
|
|
1003
|
+
for (const sym of Object.getOwnPropertySymbols(allOfSymbols)) {
|
|
1004
|
+
resolvedSchema[sym] = allOfSymbols[sym];
|
|
1005
|
+
}
|
|
964
1006
|
if (withContainsSchemas.length) {
|
|
965
1007
|
resolvedSchema.allOf = withContainsSchemas;
|
|
966
1008
|
}
|
|
@@ -972,18 +1014,18 @@ function retrieveSchemaInternal(validator, schema, rootSchema, rawFormData, expa
|
|
|
972
1014
|
}
|
|
973
1015
|
if (PROPERTIES_KEY in resolvedSchema && PATTERN_PROPERTIES_KEY in resolvedSchema) {
|
|
974
1016
|
resolvedSchema = Object.keys(resolvedSchema.properties).reduce(
|
|
975
|
-
(
|
|
976
|
-
const matchingProperties = getMatchingPatternProperties(
|
|
1017
|
+
(acc, key) => {
|
|
1018
|
+
const matchingProperties = getMatchingPatternProperties(acc, key);
|
|
977
1019
|
if (!(0, import_isEmpty2.default)(matchingProperties)) {
|
|
978
|
-
|
|
1020
|
+
acc.properties[key] = retrieveSchema(
|
|
979
1021
|
validator,
|
|
980
|
-
{ allOf: [
|
|
1022
|
+
{ allOf: [acc.properties[key], ...Object.values(matchingProperties)] },
|
|
981
1023
|
rootSchema,
|
|
982
1024
|
(0, import_get5.default)(rawFormData, [key]),
|
|
983
1025
|
experimental_customMergeAllOf
|
|
984
1026
|
);
|
|
985
1027
|
}
|
|
986
|
-
return
|
|
1028
|
+
return acc;
|
|
987
1029
|
},
|
|
988
1030
|
{
|
|
989
1031
|
...resolvedSchema,
|
|
@@ -1015,23 +1057,21 @@ function resolveAnyOrOneOfSchemas(validator, schema, rootSchema, expandAllBranch
|
|
|
1015
1057
|
if (anyOrOneOf) {
|
|
1016
1058
|
const formData = rawFormData === void 0 && expandAllBranches ? {} : rawFormData;
|
|
1017
1059
|
const discriminator = getDiscriminatorFieldFromSchema(schema);
|
|
1018
|
-
anyOrOneOf = anyOrOneOf.map((s) =>
|
|
1019
|
-
return resolveAllReferences(s, rootSchema, []);
|
|
1020
|
-
});
|
|
1060
|
+
anyOrOneOf = anyOrOneOf.map((s) => resolveAllReferences(s, rootSchema, []));
|
|
1021
1061
|
const option = getFirstMatchingOption(validator, formData, anyOrOneOf, rootSchema, discriminator);
|
|
1022
1062
|
if (expandAllBranches) {
|
|
1023
1063
|
const relaxed = relaxOptionsForScoring(anyOrOneOf, false, rootSchema);
|
|
1024
1064
|
getFirstMatchingOption(validator, formData, relaxed, rootSchema, discriminator);
|
|
1025
1065
|
return anyOrOneOf.map((item) => mergeSchemas(remaining, item));
|
|
1026
1066
|
}
|
|
1027
|
-
|
|
1067
|
+
return [mergeSchemas(remaining, anyOrOneOf[option])];
|
|
1028
1068
|
}
|
|
1029
1069
|
return [schema];
|
|
1030
1070
|
}
|
|
1031
1071
|
function relaxOptionsForScoring(options, resolveRefs = false, rootSchema) {
|
|
1032
1072
|
return options.map((d) => {
|
|
1033
1073
|
if (!isObject(d)) {
|
|
1034
|
-
return d
|
|
1074
|
+
return normalizeBooleanSchema(d);
|
|
1035
1075
|
}
|
|
1036
1076
|
const schema = resolveRefs && rootSchema ? resolveAllReferences(d, rootSchema, []) : d;
|
|
1037
1077
|
return schema.additionalProperties === false ? { ...schema, additionalProperties: true } : schema;
|
|
@@ -1062,43 +1102,39 @@ function resolveDependencies(validator, schema, rootSchema, expandAllBranches, r
|
|
|
1062
1102
|
function processDependencies(validator, dependencies, resolvedSchema, rootSchema, expandAllBranches, recurseList, formData, experimental_customMergeAllOf) {
|
|
1063
1103
|
let schemas = [resolvedSchema];
|
|
1064
1104
|
for (const dependencyKey in dependencies) {
|
|
1065
|
-
if (
|
|
1066
|
-
|
|
1067
|
-
}
|
|
1068
|
-
if (resolvedSchema.properties && !(dependencyKey in resolvedSchema.properties)) {
|
|
1069
|
-
continue;
|
|
1070
|
-
}
|
|
1071
|
-
const [remainingDependencies, dependencyValue] = splitKeyElementFromObject(
|
|
1072
|
-
dependencyKey,
|
|
1073
|
-
dependencies
|
|
1074
|
-
);
|
|
1075
|
-
if (Array.isArray(dependencyValue)) {
|
|
1076
|
-
schemas[0] = withDependentProperties(resolvedSchema, dependencyValue);
|
|
1077
|
-
} else if (isObject(dependencyValue)) {
|
|
1078
|
-
schemas = withDependentSchema(
|
|
1079
|
-
validator,
|
|
1080
|
-
resolvedSchema,
|
|
1081
|
-
rootSchema,
|
|
1105
|
+
if ((expandAllBranches || (0, import_get5.default)(formData, [dependencyKey]) !== void 0) && (!resolvedSchema.properties || dependencyKey in resolvedSchema.properties)) {
|
|
1106
|
+
const [remainingDependencies, dependencyValue] = splitKeyElementFromObject(
|
|
1082
1107
|
dependencyKey,
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
|
|
1108
|
+
dependencies
|
|
1109
|
+
);
|
|
1110
|
+
if (Array.isArray(dependencyValue)) {
|
|
1111
|
+
schemas[0] = withDependentProperties(resolvedSchema, dependencyValue);
|
|
1112
|
+
} else if (isObject(dependencyValue)) {
|
|
1113
|
+
schemas = withDependentSchema(
|
|
1114
|
+
validator,
|
|
1115
|
+
resolvedSchema,
|
|
1116
|
+
rootSchema,
|
|
1117
|
+
dependencyKey,
|
|
1118
|
+
dependencyValue,
|
|
1119
|
+
expandAllBranches,
|
|
1120
|
+
recurseList,
|
|
1121
|
+
formData,
|
|
1122
|
+
experimental_customMergeAllOf
|
|
1123
|
+
);
|
|
1124
|
+
}
|
|
1125
|
+
return schemas.flatMap(
|
|
1126
|
+
(schema) => processDependencies(
|
|
1127
|
+
validator,
|
|
1128
|
+
remainingDependencies,
|
|
1129
|
+
schema,
|
|
1130
|
+
rootSchema,
|
|
1131
|
+
expandAllBranches,
|
|
1132
|
+
recurseList,
|
|
1133
|
+
formData,
|
|
1134
|
+
experimental_customMergeAllOf
|
|
1135
|
+
)
|
|
1088
1136
|
);
|
|
1089
1137
|
}
|
|
1090
|
-
return schemas.flatMap(
|
|
1091
|
-
(schema) => processDependencies(
|
|
1092
|
-
validator,
|
|
1093
|
-
remainingDependencies,
|
|
1094
|
-
schema,
|
|
1095
|
-
rootSchema,
|
|
1096
|
-
expandAllBranches,
|
|
1097
|
-
recurseList,
|
|
1098
|
-
formData,
|
|
1099
|
-
experimental_customMergeAllOf
|
|
1100
|
-
)
|
|
1101
|
-
);
|
|
1102
1138
|
}
|
|
1103
1139
|
return schemas;
|
|
1104
1140
|
}
|
|
@@ -1121,9 +1157,9 @@ function withDependentSchema(validator, schema, rootSchema, dependencyKey, depen
|
|
|
1121
1157
|
);
|
|
1122
1158
|
return dependentSchemas.flatMap((dependent) => {
|
|
1123
1159
|
const { oneOf, ...dependentSchema } = dependent;
|
|
1124
|
-
|
|
1160
|
+
const mergedSchema = mergeSchemas(schema, dependentSchema);
|
|
1125
1161
|
if (oneOf === void 0) {
|
|
1126
|
-
return
|
|
1162
|
+
return mergedSchema;
|
|
1127
1163
|
}
|
|
1128
1164
|
const resolvedOneOfs = oneOf.map((subschema) => {
|
|
1129
1165
|
if (typeof subschema === "boolean" || !(REF_KEY in subschema)) {
|
|
@@ -1135,7 +1171,7 @@ function withDependentSchema(validator, schema, rootSchema, dependencyKey, depen
|
|
|
1135
1171
|
return allPermutations.flatMap(
|
|
1136
1172
|
(resolvedOneOf) => withExactlyOneSubschema(
|
|
1137
1173
|
validator,
|
|
1138
|
-
|
|
1174
|
+
mergedSchema,
|
|
1139
1175
|
rootSchema,
|
|
1140
1176
|
dependencyKey,
|
|
1141
1177
|
resolvedOneOf,
|
|
@@ -1149,7 +1185,7 @@ function withDependentSchema(validator, schema, rootSchema, dependencyKey, depen
|
|
|
1149
1185
|
}
|
|
1150
1186
|
function withExactlyOneSubschema(validator, schema, rootSchema, dependencyKey, oneOf, expandAllBranches, recurseList, formData, experimental_customMergeAllOf) {
|
|
1151
1187
|
const validSubschemas = oneOf.filter((subschema) => {
|
|
1152
|
-
if (typeof subschema === "boolean" || !subschema
|
|
1188
|
+
if (typeof subschema === "boolean" || !subschema?.properties) {
|
|
1153
1189
|
return false;
|
|
1154
1190
|
}
|
|
1155
1191
|
const { [dependencyKey]: conditionPropertySchema } = subschema.properties;
|
|
@@ -1181,7 +1217,7 @@ function withExactlyOneSubschema(validator, schema, rootSchema, dependencyKey, o
|
|
|
1181
1217
|
recurseList,
|
|
1182
1218
|
experimental_customMergeAllOf
|
|
1183
1219
|
);
|
|
1184
|
-
return schemas.map((
|
|
1220
|
+
return schemas.map((resolvedSubschema) => mergeSchemas(schema, resolvedSubschema));
|
|
1185
1221
|
});
|
|
1186
1222
|
}
|
|
1187
1223
|
|
|
@@ -1195,12 +1231,16 @@ function findSelectedOptionInXxxOf(validator, rootSchema, schema, fallbackField,
|
|
|
1195
1231
|
);
|
|
1196
1232
|
const data = (0, import_get6.default)(formData, selectorField);
|
|
1197
1233
|
if (data !== void 0) {
|
|
1198
|
-
return xxxOfs.find(
|
|
1199
|
-
|
|
1200
|
-
(0, import_get6.default)(
|
|
1234
|
+
return xxxOfs.find(
|
|
1235
|
+
(xxxOfOption) => deepEquals_default(
|
|
1236
|
+
(0, import_get6.default)(
|
|
1237
|
+
xxxOfOption,
|
|
1238
|
+
[PROPERTIES_KEY, selectorField, DEFAULT_KEY],
|
|
1239
|
+
(0, import_get6.default)(xxxOfOption, [PROPERTIES_KEY, selectorField, CONST_KEY])
|
|
1240
|
+
),
|
|
1201
1241
|
data
|
|
1202
|
-
)
|
|
1203
|
-
|
|
1242
|
+
)
|
|
1243
|
+
);
|
|
1204
1244
|
}
|
|
1205
1245
|
}
|
|
1206
1246
|
return void 0;
|
|
@@ -1372,23 +1412,21 @@ function calculateIndexScore(validator, rootSchema, schema, formData, experiment
|
|
|
1372
1412
|
);
|
|
1373
1413
|
}
|
|
1374
1414
|
if (((0, import_has4.default)(value, ONE_OF_KEY) || (0, import_has4.default)(value, ANY_OF_KEY)) && formValue) {
|
|
1375
|
-
const
|
|
1415
|
+
const xxxOfKey = (0, import_has4.default)(value, ONE_OF_KEY) ? ONE_OF_KEY : ANY_OF_KEY;
|
|
1376
1416
|
const discriminator = getDiscriminatorFieldFromSchema(value);
|
|
1377
1417
|
return score + getClosestMatchingOption(
|
|
1378
1418
|
validator,
|
|
1379
1419
|
rootSchema,
|
|
1380
1420
|
formValue,
|
|
1381
|
-
(0, import_get9.default)(value,
|
|
1421
|
+
(0, import_get9.default)(value, xxxOfKey),
|
|
1382
1422
|
-1,
|
|
1383
1423
|
discriminator,
|
|
1384
1424
|
experimental_customMergeAllOf
|
|
1385
1425
|
);
|
|
1386
1426
|
}
|
|
1387
1427
|
if (value.type === "object") {
|
|
1388
|
-
|
|
1389
|
-
|
|
1390
|
-
}
|
|
1391
|
-
return score + calculateIndexScore(validator, rootSchema, value, formValue, experimental_customMergeAllOf);
|
|
1428
|
+
const structureBoost = (0, import_isObject6.default)(formValue) ? 1 : 0;
|
|
1429
|
+
return score + structureBoost + calculateIndexScore(validator, rootSchema, value, formValue, experimental_customMergeAllOf);
|
|
1392
1430
|
}
|
|
1393
1431
|
if (value.type === guessType(formValue)) {
|
|
1394
1432
|
let newScore = score + 1;
|
|
@@ -1410,9 +1448,7 @@ function calculateIndexScore(validator, rootSchema, schema, formData, experiment
|
|
|
1410
1448
|
return totalScore;
|
|
1411
1449
|
}
|
|
1412
1450
|
function getClosestMatchingOption(validator, rootSchema, formData, options, selectedOption = -1, discriminatorField, experimental_customMergeAllOf) {
|
|
1413
|
-
const resolvedOptions = options.map((option) =>
|
|
1414
|
-
return resolveAllReferences(option, rootSchema, []);
|
|
1415
|
-
});
|
|
1451
|
+
const resolvedOptions = options.map((option) => resolveAllReferences(option, rootSchema, []));
|
|
1416
1452
|
const simpleDiscriminatorMatch = getOptionMatchingSimpleDiscriminator(formData, options, discriminatorField);
|
|
1417
1453
|
if ((0, import_isNumber2.default)(simpleDiscriminatorMatch)) {
|
|
1418
1454
|
return simpleDiscriminatorMatch;
|
|
@@ -1470,7 +1506,7 @@ function isConstant(schema) {
|
|
|
1470
1506
|
|
|
1471
1507
|
// src/isFixedItems.ts
|
|
1472
1508
|
function isFixedItems(schema) {
|
|
1473
|
-
return Array.isArray(schema.items) && schema.items.
|
|
1509
|
+
return Array.isArray(schema.items) && schema.items.every((item) => isObject(item));
|
|
1474
1510
|
}
|
|
1475
1511
|
|
|
1476
1512
|
// src/mergeDefaultsWithFormData.ts
|
|
@@ -1500,7 +1536,7 @@ function mergeDefaultsWithFormData(defaults, formData, mergeExtraArrayDefaults =
|
|
|
1500
1536
|
}
|
|
1501
1537
|
if (isObject(formData)) {
|
|
1502
1538
|
const acc = Object.assign({}, defaults);
|
|
1503
|
-
return Object.keys(formData).reduce((
|
|
1539
|
+
return Object.keys(formData).reduce((accumulator, key) => {
|
|
1504
1540
|
const keyValue = (0, import_get10.default)(formData, key);
|
|
1505
1541
|
const keyExistsInDefaults = isObject(defaults) && key in defaults;
|
|
1506
1542
|
const keyExistsInFormData = key in formData;
|
|
@@ -1509,13 +1545,13 @@ function mergeDefaultsWithFormData(defaults, formData, mergeExtraArrayDefaults =
|
|
|
1509
1545
|
const keyDefaultIsObject = keyExistsInDefaults && isObject((0, import_get10.default)(defaults, key));
|
|
1510
1546
|
const keyHasFormDataObject = keyExistsInFormData && isObject(keyValue);
|
|
1511
1547
|
if (keyDefaultIsObject && keyHasFormDataObject && !defaultValueIsNestedObject) {
|
|
1512
|
-
|
|
1548
|
+
accumulator[key] = {
|
|
1513
1549
|
...(0, import_get10.default)(defaults, key),
|
|
1514
1550
|
...keyValue
|
|
1515
1551
|
};
|
|
1516
|
-
return
|
|
1552
|
+
return accumulator;
|
|
1517
1553
|
}
|
|
1518
|
-
|
|
1554
|
+
accumulator[key] = mergeDefaultsWithFormData(
|
|
1519
1555
|
(0, import_get10.default)(defaults, key),
|
|
1520
1556
|
keyValue,
|
|
1521
1557
|
mergeExtraArrayDefaults,
|
|
@@ -1524,10 +1560,10 @@ function mergeDefaultsWithFormData(defaults, formData, mergeExtraArrayDefaults =
|
|
|
1524
1560
|
// Or if the key value doesn't exist in formData
|
|
1525
1561
|
overrideFormDataWithDefaults && (keyExistsInDefaults || !keyExistsInFormData)
|
|
1526
1562
|
);
|
|
1527
|
-
return
|
|
1563
|
+
return acc;
|
|
1528
1564
|
}, acc);
|
|
1529
1565
|
}
|
|
1530
|
-
if (defaultSupercedesUndefined && (!(defaults === void 0) && (0, import_isNil.default)(formData) || typeof formData === "number" && isNaN(formData)) || overrideFormDataWithDefaults && !(0, import_isNil.default)(formData)) {
|
|
1566
|
+
if (defaultSupercedesUndefined && (!(defaults === void 0) && (0, import_isNil.default)(formData) || typeof formData === "number" && Number.isNaN(formData)) || overrideFormDataWithDefaults && !(0, import_isNil.default)(formData)) {
|
|
1531
1567
|
return defaults;
|
|
1532
1568
|
}
|
|
1533
1569
|
return formData;
|
|
@@ -1556,7 +1592,7 @@ function mergeObjects(obj1, obj2, concatArrays = false) {
|
|
|
1556
1592
|
}
|
|
1557
1593
|
return acc;
|
|
1558
1594
|
},
|
|
1559
|
-
|
|
1595
|
+
{ ...obj1 }
|
|
1560
1596
|
);
|
|
1561
1597
|
}
|
|
1562
1598
|
|
|
@@ -1619,7 +1655,7 @@ function optionsList(schema, uiSchema) {
|
|
|
1619
1655
|
const { optionsSchemaSelector = selectorField } = getUiOptions(uiSchema);
|
|
1620
1656
|
selectorField = optionsSchemaSelector;
|
|
1621
1657
|
}
|
|
1622
|
-
return altSchemas
|
|
1658
|
+
return altSchemas?.map((aSchemaDef, index) => {
|
|
1623
1659
|
const { title } = getUiOptions(altUiSchemas?.[index]);
|
|
1624
1660
|
const aSchema = aSchemaDef;
|
|
1625
1661
|
let value;
|
|
@@ -1627,10 +1663,10 @@ function optionsList(schema, uiSchema) {
|
|
|
1627
1663
|
if (selectorField) {
|
|
1628
1664
|
const innerSchema = (0, import_get11.default)(aSchema, [PROPERTIES_KEY, selectorField], {});
|
|
1629
1665
|
value = (0, import_get11.default)(innerSchema, DEFAULT_KEY, (0, import_get11.default)(innerSchema, CONST_KEY));
|
|
1630
|
-
label = label
|
|
1666
|
+
label = label ?? innerSchema?.title ?? aSchema.title ?? String(value);
|
|
1631
1667
|
} else {
|
|
1632
1668
|
value = toConstant(aSchema);
|
|
1633
|
-
label = label
|
|
1669
|
+
label = label ?? aSchema.title ?? String(value);
|
|
1634
1670
|
}
|
|
1635
1671
|
return {
|
|
1636
1672
|
schema: aSchema,
|
|
@@ -1648,7 +1684,7 @@ function isSelect(validator, theSchema, rootSchema = {}, experimental_customMerg
|
|
|
1648
1684
|
return true;
|
|
1649
1685
|
}
|
|
1650
1686
|
if (Array.isArray(altSchemas)) {
|
|
1651
|
-
return altSchemas.every((
|
|
1687
|
+
return altSchemas.every((altSchema) => typeof altSchema !== "boolean" && isConstant(altSchema));
|
|
1652
1688
|
}
|
|
1653
1689
|
return false;
|
|
1654
1690
|
}
|
|
@@ -1684,23 +1720,23 @@ function computeDefaultBasedOnSchemaTypeAndDefaults(schema, computedDefault) {
|
|
|
1684
1720
|
const shouldReturnNullAsDefault = Array.isArray(type) && type.includes("null") && (0, import_isEmpty4.default)(computedDefault) && schemaDefault === null;
|
|
1685
1721
|
return shouldReturnNullAsDefault ? null : computedDefault;
|
|
1686
1722
|
}
|
|
1687
|
-
function maybeAddDefaultToObject(
|
|
1723
|
+
function maybeAddDefaultToObject(acc, key, computedDefault, includeUndefinedValues, isParentRequired, requiredFields = [], experimental_defaultFormStateBehavior = {}, isConst = false, isNullType = false) {
|
|
1688
1724
|
const { emptyObjectFields = "populateAllDefaults" } = experimental_defaultFormStateBehavior;
|
|
1689
1725
|
if (includeUndefinedValues === true || isConst) {
|
|
1690
|
-
|
|
1726
|
+
acc[key] = computedDefault;
|
|
1691
1727
|
} else if (includeUndefinedValues === "excludeObjectChildren") {
|
|
1692
1728
|
if (isNullType && computedDefault !== void 0 || !isObject(computedDefault) || !(0, import_isEmpty4.default)(computedDefault)) {
|
|
1693
|
-
|
|
1729
|
+
acc[key] = computedDefault;
|
|
1694
1730
|
}
|
|
1695
1731
|
} else if (emptyObjectFields !== "skipDefaults") {
|
|
1696
1732
|
const isSelfOrParentRequired = isParentRequired === void 0 ? requiredFields.includes(key) : isParentRequired;
|
|
1697
1733
|
if (isObject(computedDefault)) {
|
|
1698
1734
|
if (emptyObjectFields === "skipEmptyDefaults") {
|
|
1699
1735
|
if (!(0, import_isEmpty4.default)(computedDefault)) {
|
|
1700
|
-
|
|
1736
|
+
acc[key] = computedDefault;
|
|
1701
1737
|
}
|
|
1702
1738
|
} else if ((!(0, import_isEmpty4.default)(computedDefault) || requiredFields.includes(key)) && (isSelfOrParentRequired || emptyObjectFields !== "populateRequiredDefaults")) {
|
|
1703
|
-
|
|
1739
|
+
acc[key] = computedDefault;
|
|
1704
1740
|
}
|
|
1705
1741
|
} else if (
|
|
1706
1742
|
// Store computedDefault if it's a defined primitive (e.g., true) and satisfies certain conditions
|
|
@@ -1709,7 +1745,7 @@ function maybeAddDefaultToObject(obj, key, computedDefault, includeUndefinedValu
|
|
|
1709
1745
|
// Or if isSelfOrParentRequired is 'true' and the key is a required field
|
|
1710
1746
|
computedDefault !== void 0 && (emptyObjectFields === "populateAllDefaults" || emptyObjectFields === "skipEmptyDefaults" || isSelfOrParentRequired && requiredFields.includes(key))
|
|
1711
1747
|
) {
|
|
1712
|
-
|
|
1748
|
+
acc[key] = computedDefault;
|
|
1713
1749
|
}
|
|
1714
1750
|
}
|
|
1715
1751
|
}
|
|
@@ -1720,8 +1756,8 @@ function computeDefaults(validator, rawSchema, computeDefaultsProps = {}) {
|
|
|
1720
1756
|
rootSchema = {},
|
|
1721
1757
|
includeUndefinedValues = false,
|
|
1722
1758
|
_recurseList = [],
|
|
1723
|
-
experimental_defaultFormStateBehavior
|
|
1724
|
-
experimental_customMergeAllOf
|
|
1759
|
+
experimental_defaultFormStateBehavior,
|
|
1760
|
+
experimental_customMergeAllOf,
|
|
1725
1761
|
required,
|
|
1726
1762
|
shouldMergeDefaultsIntoFormData = false,
|
|
1727
1763
|
initialDefaultsGenerated
|
|
@@ -1729,14 +1765,19 @@ function computeDefaults(validator, rawSchema, computeDefaultsProps = {}) {
|
|
|
1729
1765
|
let formData = isObject(rawFormData) ? rawFormData : {};
|
|
1730
1766
|
const schema = isObject(rawSchema) ? rawSchema : {};
|
|
1731
1767
|
let defaults = parentDefaults;
|
|
1768
|
+
const preferParentDefaults = defaults && experimental_defaultFormStateBehavior?.nestedDefaultsPrecedence === "ancestorWins";
|
|
1732
1769
|
let schemaToCompute = null;
|
|
1733
1770
|
let experimental_dfsb_to_compute = experimental_defaultFormStateBehavior;
|
|
1734
1771
|
let updatedRecurseList = _recurseList;
|
|
1735
1772
|
if (schema[CONST_KEY] !== void 0 && experimental_defaultFormStateBehavior?.constAsDefaults !== "never" && !constIsAjvDataReference(schema)) {
|
|
1736
1773
|
defaults = schema[CONST_KEY];
|
|
1737
1774
|
} else if (isObject(defaults) && isObject(schema.default) && !schema[ANY_OF_KEY] && !schema[ONE_OF_KEY] && !schema[REF_KEY]) {
|
|
1738
|
-
|
|
1739
|
-
|
|
1775
|
+
if (preferParentDefaults) {
|
|
1776
|
+
defaults = mergeObjects(schema.default, defaults);
|
|
1777
|
+
} else {
|
|
1778
|
+
defaults = mergeObjects(defaults, schema.default);
|
|
1779
|
+
}
|
|
1780
|
+
} else if (DEFAULT_KEY in schema && !preferParentDefaults && !schema[ANY_OF_KEY] && !schema[ONE_OF_KEY] && !schema[REF_KEY]) {
|
|
1740
1781
|
defaults = schema.default;
|
|
1741
1782
|
} else if (REF_KEY in schema) {
|
|
1742
1783
|
const refName = schema[REF_KEY];
|
|
@@ -1765,8 +1806,8 @@ function computeDefaults(validator, rawSchema, computeDefaultsProps = {}) {
|
|
|
1765
1806
|
defaultFormData,
|
|
1766
1807
|
experimental_customMergeAllOf
|
|
1767
1808
|
);
|
|
1768
|
-
schemaToCompute = resolvedSchema
|
|
1769
|
-
} else if (isFixedItems(schema)) {
|
|
1809
|
+
[schemaToCompute] = resolvedSchema;
|
|
1810
|
+
} else if (isFixedItems(schema) && !preferParentDefaults) {
|
|
1770
1811
|
defaults = schema.items.map(
|
|
1771
1812
|
(itemSchema, idx) => computeDefaults(validator, itemSchema, {
|
|
1772
1813
|
rootSchema,
|
|
@@ -1862,16 +1903,36 @@ function computeDefaults(validator, rawSchema, computeDefaultsProps = {}) {
|
|
|
1862
1903
|
return defaultsWithFormData;
|
|
1863
1904
|
}
|
|
1864
1905
|
function ensureFormDataMatchingSchema(validator, schema, rootSchema, formData, experimental_defaultFormStateBehavior, experimental_customMergeAllOf) {
|
|
1865
|
-
const
|
|
1906
|
+
const shouldRetrieveAllOf = experimental_defaultFormStateBehavior?.allOf === "populateDefaults" && ALL_OF_KEY in schema;
|
|
1907
|
+
const schemaToMatch = shouldRetrieveAllOf ? retrieveSchema(validator, schema, rootSchema, formData, experimental_customMergeAllOf) : schema;
|
|
1908
|
+
const isSelectField = !isConstant(schemaToMatch) && isSelect(validator, schemaToMatch, rootSchema, experimental_customMergeAllOf);
|
|
1866
1909
|
let validFormData = formData;
|
|
1867
1910
|
if (isSelectField) {
|
|
1868
|
-
const getOptionsList = optionsList(
|
|
1911
|
+
const getOptionsList = optionsList(schemaToMatch);
|
|
1869
1912
|
const isValid = getOptionsList?.some((option) => deepEquals_default(option.value, formData));
|
|
1870
1913
|
validFormData = isValid ? formData : void 0;
|
|
1871
1914
|
}
|
|
1872
|
-
const constTakesPrecedence =
|
|
1915
|
+
const constTakesPrecedence = schemaToMatch[CONST_KEY] && experimental_defaultFormStateBehavior?.constAsDefaults === "always";
|
|
1873
1916
|
if (constTakesPrecedence) {
|
|
1874
|
-
validFormData =
|
|
1917
|
+
validFormData = schemaToMatch.const;
|
|
1918
|
+
} else if (isObject(validFormData) && isObject(schemaToMatch.properties)) {
|
|
1919
|
+
validFormData = Object.keys(schemaToMatch.properties).reduce(
|
|
1920
|
+
(acc, key) => {
|
|
1921
|
+
const propertySchema = (0, import_get12.default)(schemaToMatch, [PROPERTIES_KEY, key], {});
|
|
1922
|
+
if (key in acc && (shouldRetrieveAllOf || isObject(propertySchema) && ALL_OF_KEY in propertySchema)) {
|
|
1923
|
+
acc[key] = ensureFormDataMatchingSchema(
|
|
1924
|
+
validator,
|
|
1925
|
+
propertySchema,
|
|
1926
|
+
rootSchema,
|
|
1927
|
+
(0, import_get12.default)(acc, key),
|
|
1928
|
+
experimental_defaultFormStateBehavior,
|
|
1929
|
+
experimental_customMergeAllOf
|
|
1930
|
+
);
|
|
1931
|
+
}
|
|
1932
|
+
return acc;
|
|
1933
|
+
},
|
|
1934
|
+
{ ...validFormData }
|
|
1935
|
+
);
|
|
1875
1936
|
}
|
|
1876
1937
|
return validFormData;
|
|
1877
1938
|
}
|
|
@@ -1880,8 +1941,8 @@ function getObjectDefaults(validator, rawSchema, {
|
|
|
1880
1941
|
rootSchema = {},
|
|
1881
1942
|
includeUndefinedValues = false,
|
|
1882
1943
|
_recurseList = [],
|
|
1883
|
-
experimental_defaultFormStateBehavior
|
|
1884
|
-
experimental_customMergeAllOf
|
|
1944
|
+
experimental_defaultFormStateBehavior,
|
|
1945
|
+
experimental_customMergeAllOf,
|
|
1885
1946
|
required,
|
|
1886
1947
|
shouldMergeDefaultsIntoFormData,
|
|
1887
1948
|
initialDefaultsGenerated
|
|
@@ -1965,13 +2026,14 @@ function getArrayDefaults(validator, rawSchema, {
|
|
|
1965
2026
|
rawFormData,
|
|
1966
2027
|
rootSchema = {},
|
|
1967
2028
|
_recurseList = [],
|
|
1968
|
-
experimental_defaultFormStateBehavior
|
|
1969
|
-
experimental_customMergeAllOf
|
|
2029
|
+
experimental_defaultFormStateBehavior,
|
|
2030
|
+
experimental_customMergeAllOf,
|
|
1970
2031
|
required,
|
|
1971
2032
|
requiredAsRoot = false,
|
|
1972
2033
|
shouldMergeDefaultsIntoFormData,
|
|
1973
2034
|
initialDefaultsGenerated
|
|
1974
|
-
} = {},
|
|
2035
|
+
} = {}, initialDefaults) {
|
|
2036
|
+
let defaults = initialDefaults;
|
|
1975
2037
|
const schema = rawSchema;
|
|
1976
2038
|
const arrayMinItemsStateBehavior = experimental_defaultFormStateBehavior?.arrayMinItems ?? {};
|
|
1977
2039
|
const { populate: arrayMinItemsPopulate, mergeExtraDefaults: arrayMergeExtraDefaults } = arrayMinItemsStateBehavior;
|
|
@@ -2003,8 +2065,8 @@ function getArrayDefaults(validator, rawSchema, {
|
|
|
2003
2065
|
if (neverPopulate) {
|
|
2004
2066
|
defaults = rawFormData;
|
|
2005
2067
|
} else {
|
|
2006
|
-
const itemDefaults = rawFormData.map(
|
|
2007
|
-
|
|
2068
|
+
const itemDefaults = rawFormData.map(
|
|
2069
|
+
(item, idx) => computeDefaults(validator, schemaItem, {
|
|
2008
2070
|
rootSchema,
|
|
2009
2071
|
_recurseList,
|
|
2010
2072
|
experimental_defaultFormStateBehavior,
|
|
@@ -2014,20 +2076,27 @@ function getArrayDefaults(validator, rawSchema, {
|
|
|
2014
2076
|
required,
|
|
2015
2077
|
shouldMergeDefaultsIntoFormData,
|
|
2016
2078
|
initialDefaultsGenerated
|
|
2017
|
-
})
|
|
2018
|
-
|
|
2079
|
+
})
|
|
2080
|
+
);
|
|
2019
2081
|
const mergeExtraDefaults = (ignoreMinItemsFlagSet && required || isPopulateAll) && arrayMergeExtraDefaults;
|
|
2020
2082
|
defaults = mergeDefaultsWithFormData(defaults, itemDefaults, mergeExtraDefaults);
|
|
2021
2083
|
}
|
|
2022
2084
|
}
|
|
2085
|
+
const defaultsLength = Array.isArray(defaults) ? defaults.length : 0;
|
|
2023
2086
|
if (neverPopulate) {
|
|
2087
|
+
if (shouldMergeDefaultsIntoFormData) {
|
|
2088
|
+
if (schema.minItems && schema.minItems > defaultsLength) {
|
|
2089
|
+
const fillerEntries = Array.from({ length: schema.minItems - defaultsLength }, () => null);
|
|
2090
|
+
return (defaults ?? []).concat(fillerEntries);
|
|
2091
|
+
}
|
|
2092
|
+
return defaults;
|
|
2093
|
+
}
|
|
2024
2094
|
return defaults ?? emptyDefault;
|
|
2025
2095
|
}
|
|
2026
2096
|
if (ignoreMinItemsFlagSet && !required) {
|
|
2027
|
-
return defaults
|
|
2097
|
+
return defaults || void 0;
|
|
2028
2098
|
}
|
|
2029
2099
|
let arrayDefault;
|
|
2030
|
-
const defaultsLength = Array.isArray(defaults) ? defaults.length : 0;
|
|
2031
2100
|
if (!schema.minItems || isMultiSelect(validator, schema, rootSchema, experimental_customMergeAllOf) || computeSkipPopulate(validator, schema, rootSchema) || schema.minItems <= defaultsLength) {
|
|
2032
2101
|
arrayDefault = defaults || !required && !requiredAsRoot ? defaults : emptyDefault;
|
|
2033
2102
|
} else {
|
|
@@ -2059,11 +2128,13 @@ function getDefaultBasedOnSchemaType(validator, rawSchema, computeDefaultsProps
|
|
|
2059
2128
|
case "array": {
|
|
2060
2129
|
return getArrayDefaults(validator, rawSchema, computeDefaultsProps, defaults);
|
|
2061
2130
|
}
|
|
2131
|
+
default:
|
|
2132
|
+
return void 0;
|
|
2062
2133
|
}
|
|
2063
2134
|
}
|
|
2064
2135
|
function getDefaultFormState(validator, theSchema, formData, rootSchema, includeUndefinedValues = false, experimental_defaultFormStateBehavior, experimental_customMergeAllOf, initialDefaultsGenerated) {
|
|
2065
2136
|
if (!isObject(theSchema)) {
|
|
2066
|
-
throw new Error(
|
|
2137
|
+
throw new Error(`Invalid schema: ${theSchema}`);
|
|
2067
2138
|
}
|
|
2068
2139
|
const schema = retrieveSchema(validator, theSchema, rootSchema, formData, experimental_customMergeAllOf);
|
|
2069
2140
|
const defaults = computeDefaults(validator, schema, {
|
|
@@ -2085,9 +2156,17 @@ function getDefaultFormState(validator, theSchema, formData, rootSchema, include
|
|
|
2085
2156
|
if (isObject(formData) || Array.isArray(formData)) {
|
|
2086
2157
|
const { mergeDefaultsIntoFormData } = experimental_defaultFormStateBehavior || {};
|
|
2087
2158
|
const defaultSupercedesUndefined = mergeDefaultsIntoFormData === "useDefaultIfFormDataUndefined";
|
|
2159
|
+
const matchingFormData = ensureFormDataMatchingSchema(
|
|
2160
|
+
validator,
|
|
2161
|
+
schema,
|
|
2162
|
+
rootSchema ?? schema,
|
|
2163
|
+
formData,
|
|
2164
|
+
experimental_defaultFormStateBehavior,
|
|
2165
|
+
experimental_customMergeAllOf
|
|
2166
|
+
);
|
|
2088
2167
|
const result = mergeDefaultsWithFormData(
|
|
2089
2168
|
defaults,
|
|
2090
|
-
|
|
2169
|
+
matchingFormData,
|
|
2091
2170
|
true,
|
|
2092
2171
|
// set to true to add any additional default array entries.
|
|
2093
2172
|
defaultSupercedesUndefined,
|
|
@@ -2099,15 +2178,12 @@ function getDefaultFormState(validator, theSchema, formData, rootSchema, include
|
|
|
2099
2178
|
return defaults;
|
|
2100
2179
|
}
|
|
2101
2180
|
|
|
2102
|
-
// src/schema/getDisplayLabel.ts
|
|
2103
|
-
var import_get13 = __toESM(require("lodash/get"), 1);
|
|
2104
|
-
|
|
2105
2181
|
// src/isCustomWidget.ts
|
|
2106
2182
|
function isCustomWidget(uiSchema = {}) {
|
|
2107
2183
|
return (
|
|
2108
2184
|
// TODO: Remove the `&& uiSchema['ui:widget'] !== 'hidden'` once we support hidden widgets for arrays.
|
|
2109
2185
|
// https://rjsf-team.github.io/react-jsonschema-form/docs/usage/widgets/#hidden-widgets
|
|
2110
|
-
"widget" in getUiOptions(uiSchema) && getUiOptions(uiSchema)
|
|
2186
|
+
"widget" in getUiOptions(uiSchema) && getUiOptions(uiSchema).widget !== "hidden"
|
|
2111
2187
|
);
|
|
2112
2188
|
}
|
|
2113
2189
|
|
|
@@ -2136,7 +2212,7 @@ function getDisplayLabel(validator, schema, uiSchema = {}, rootSchema, globalOpt
|
|
|
2136
2212
|
let displayLabel = Boolean(label);
|
|
2137
2213
|
if (displayLabel) {
|
|
2138
2214
|
const schemaType = getSchemaType(schema);
|
|
2139
|
-
const addedByAdditionalProperty = (
|
|
2215
|
+
const addedByAdditionalProperty = Boolean(schema[ADDITIONAL_PROPERTY_FLAG]);
|
|
2140
2216
|
if (schemaType === "array") {
|
|
2141
2217
|
displayLabel = addedByAdditionalProperty || isMultiSelect(validator, schema, rootSchema, experimental_customMergeAllOf) || isFilesArray(validator, schema, uiSchema, rootSchema, experimental_customMergeAllOf) || isCustomWidget(uiSchema);
|
|
2142
2218
|
}
|
|
@@ -2146,7 +2222,7 @@ function getDisplayLabel(validator, schema, uiSchema = {}, rootSchema, globalOpt
|
|
|
2146
2222
|
if (schemaType === "boolean" && uiSchema && !uiSchema[UI_WIDGET_KEY]) {
|
|
2147
2223
|
displayLabel = false;
|
|
2148
2224
|
}
|
|
2149
|
-
if (uiSchema
|
|
2225
|
+
if (uiSchema?.[UI_FIELD_KEY]) {
|
|
2150
2226
|
displayLabel = false;
|
|
2151
2227
|
}
|
|
2152
2228
|
}
|
|
@@ -2154,7 +2230,7 @@ function getDisplayLabel(validator, schema, uiSchema = {}, rootSchema, globalOpt
|
|
|
2154
2230
|
}
|
|
2155
2231
|
|
|
2156
2232
|
// src/schema/omitExtraData.ts
|
|
2157
|
-
var
|
|
2233
|
+
var import_get13 = __toESM(require("lodash/get"), 1);
|
|
2158
2234
|
var import_isEmpty5 = __toESM(require("lodash/isEmpty"), 1);
|
|
2159
2235
|
var import_isNil2 = __toESM(require("lodash/isNil"), 1);
|
|
2160
2236
|
var import_pick = __toESM(require("lodash/pick"), 1);
|
|
@@ -2183,7 +2259,7 @@ function getFieldNames(pathSchema, formData) {
|
|
|
2183
2259
|
}
|
|
2184
2260
|
} else if (key === NAME_KEY && data !== "") {
|
|
2185
2261
|
paths.forEach((path) => {
|
|
2186
|
-
const formValue = (0,
|
|
2262
|
+
const formValue = (0, import_get13.default)(formData, path);
|
|
2187
2263
|
const isLeaf = objKeys.length === 1;
|
|
2188
2264
|
if (formValueHasData(formValue, isLeaf) || Array.isArray(formValue) && formValue.every((val) => formValueHasData(val, isLeaf))) {
|
|
2189
2265
|
acc.push(path);
|
|
@@ -2217,11 +2293,11 @@ function omitExtraData(validator, schema, rootSchema = {}, formData, experimenta
|
|
|
2217
2293
|
function isSchemaObj(schemaDef) {
|
|
2218
2294
|
return isObject(schemaDef);
|
|
2219
2295
|
}
|
|
2220
|
-
function handleObject(
|
|
2221
|
-
const { properties, additionalProperties, patternProperties, propertyNames } =
|
|
2222
|
-
const requiredSet = new Set(
|
|
2296
|
+
function handleObject(childSchema, source, target) {
|
|
2297
|
+
const { properties, additionalProperties, patternProperties, propertyNames } = childSchema;
|
|
2298
|
+
const requiredSet = new Set(childSchema.required ?? []);
|
|
2223
2299
|
function setProperty(key, schemaDef, value, required = false) {
|
|
2224
|
-
const v =
|
|
2300
|
+
const v = omit2(schemaDef, value, target[key]);
|
|
2225
2301
|
if (!required && isObject(v)) {
|
|
2226
2302
|
let sd = isSchemaObj(schemaDef) ? schemaDef : {};
|
|
2227
2303
|
if (sd.$ref !== void 0) {
|
|
@@ -2253,15 +2329,14 @@ function omitExtraData(validator, schema, rootSchema = {}, formData, experimenta
|
|
|
2253
2329
|
]);
|
|
2254
2330
|
const knownProperties = new Set(Object.keys(properties ?? {}));
|
|
2255
2331
|
for (const [key, value] of Object.entries(source)) {
|
|
2256
|
-
if (knownProperties.has(key)) {
|
|
2257
|
-
|
|
2258
|
-
|
|
2259
|
-
|
|
2260
|
-
|
|
2261
|
-
|
|
2262
|
-
|
|
2332
|
+
if (!knownProperties.has(key)) {
|
|
2333
|
+
const matched = patterns.find(([re]) => re.test(key));
|
|
2334
|
+
if (matched === void 0) {
|
|
2335
|
+
patternPropertiesRest.push(key);
|
|
2336
|
+
} else {
|
|
2337
|
+
setProperty(key, matched[1], value);
|
|
2338
|
+
}
|
|
2263
2339
|
}
|
|
2264
|
-
setProperty(key, matched[1], value);
|
|
2265
2340
|
}
|
|
2266
2341
|
}
|
|
2267
2342
|
if (additionalProperties !== void 0 && additionalProperties !== false) {
|
|
@@ -2273,10 +2348,9 @@ function omitExtraData(validator, schema, rootSchema = {}, formData, experimenta
|
|
|
2273
2348
|
} else {
|
|
2274
2349
|
const knownProperties = new Set(Object.keys(properties ?? {}));
|
|
2275
2350
|
for (const [key, value] of Object.entries(source)) {
|
|
2276
|
-
if (knownProperties.has(key)) {
|
|
2277
|
-
|
|
2351
|
+
if (!knownProperties.has(key)) {
|
|
2352
|
+
setProperty(key, addlSchema, value);
|
|
2278
2353
|
}
|
|
2279
|
-
setProperty(key, addlSchema, value);
|
|
2280
2354
|
}
|
|
2281
2355
|
}
|
|
2282
2356
|
}
|
|
@@ -2287,37 +2361,37 @@ function omitExtraData(validator, schema, rootSchema = {}, formData, experimenta
|
|
|
2287
2361
|
}
|
|
2288
2362
|
return target;
|
|
2289
2363
|
}
|
|
2290
|
-
function handleArray(
|
|
2291
|
-
const { items, additionalItems } =
|
|
2364
|
+
function handleArray(childSchema, source, target) {
|
|
2365
|
+
const { items, additionalItems } = childSchema;
|
|
2292
2366
|
if (items !== void 0) {
|
|
2293
2367
|
if (Array.isArray(items)) {
|
|
2294
|
-
for (let i = 0; i < items.length; i
|
|
2295
|
-
target.push(
|
|
2368
|
+
for (let i = 0; i < items.length; i += 1) {
|
|
2369
|
+
target.push(omit2(items[i], source[i]));
|
|
2296
2370
|
}
|
|
2297
2371
|
} else {
|
|
2298
|
-
for (let i = 0; i < source.length; i
|
|
2299
|
-
target.push(
|
|
2372
|
+
for (let i = 0; i < source.length; i += 1) {
|
|
2373
|
+
target.push(omit2(items, source[i]));
|
|
2300
2374
|
}
|
|
2301
2375
|
}
|
|
2302
2376
|
}
|
|
2303
2377
|
if (additionalItems) {
|
|
2304
|
-
for (let i = target.length; i < source.length; i
|
|
2305
|
-
target.push(
|
|
2378
|
+
for (let i = target.length; i < source.length; i += 1) {
|
|
2379
|
+
target.push(omit2(additionalItems, source[i]));
|
|
2306
2380
|
}
|
|
2307
2381
|
}
|
|
2308
2382
|
return target;
|
|
2309
2383
|
}
|
|
2310
|
-
function handleConditions(
|
|
2311
|
-
const { if: condition, then, else: otherwise } =
|
|
2384
|
+
function handleConditions(childSchema, source, target) {
|
|
2385
|
+
const { if: condition, then, else: otherwise } = childSchema;
|
|
2312
2386
|
if (condition === void 0) {
|
|
2313
2387
|
return target;
|
|
2314
2388
|
}
|
|
2315
2389
|
const isThenBranch = isSchemaObj(condition) ? validator.isValid(condition, source, rootSchema) : condition;
|
|
2316
2390
|
const branch = isThenBranch ? then : otherwise;
|
|
2317
|
-
return branch === void 0 ? target :
|
|
2391
|
+
return branch === void 0 ? target : omit2(branch, source, target);
|
|
2318
2392
|
}
|
|
2319
|
-
function handleOneOf(oneOf,
|
|
2320
|
-
if (!Array.isArray(oneOf) || isSelect(validator,
|
|
2393
|
+
function handleOneOf(oneOf, childSchema, source, target) {
|
|
2394
|
+
if (!Array.isArray(oneOf) || isSelect(validator, childSchema, rootSchema, experimental_customMergeAllOf)) {
|
|
2321
2395
|
return target;
|
|
2322
2396
|
}
|
|
2323
2397
|
const scoringOptions = relaxOptionsForScoring(oneOf, true, rootSchema);
|
|
@@ -2327,96 +2401,130 @@ function omitExtraData(validator, schema, rootSchema = {}, formData, experimenta
|
|
|
2327
2401
|
source,
|
|
2328
2402
|
scoringOptions,
|
|
2329
2403
|
0,
|
|
2330
|
-
getDiscriminatorFieldFromSchema(
|
|
2404
|
+
getDiscriminatorFieldFromSchema(childSchema),
|
|
2331
2405
|
experimental_customMergeAllOf
|
|
2332
2406
|
);
|
|
2333
2407
|
const winning = oneOf[bestIndex];
|
|
2334
2408
|
const resolved = isObject(winning) ? resolveAllReferences(winning, rootSchema, []) : scoringOptions[bestIndex];
|
|
2335
|
-
return
|
|
2409
|
+
return omit2(resolved, source, target);
|
|
2336
2410
|
}
|
|
2337
|
-
function handleAnyOf(
|
|
2338
|
-
const { anyOf } =
|
|
2411
|
+
function handleAnyOf(childSchema, source, target) {
|
|
2412
|
+
const { anyOf } = childSchema;
|
|
2339
2413
|
if (!Array.isArray(anyOf)) {
|
|
2340
2414
|
return target;
|
|
2341
2415
|
}
|
|
2342
2416
|
if (source === void 0 || Array.isArray(source) && source.length === 0 || isObject(source) && Object.keys(source).length === 0) {
|
|
2417
|
+
let result = target;
|
|
2343
2418
|
for (const branch of anyOf) {
|
|
2344
|
-
|
|
2419
|
+
result = omit2(branch, source, result);
|
|
2345
2420
|
}
|
|
2346
|
-
return
|
|
2421
|
+
return result;
|
|
2347
2422
|
}
|
|
2348
|
-
return handleOneOf(anyOf,
|
|
2423
|
+
return handleOneOf(anyOf, childSchema, source, target);
|
|
2349
2424
|
}
|
|
2350
|
-
function handleDependencies(
|
|
2351
|
-
const { dependencies } =
|
|
2425
|
+
function handleDependencies(childSchema, source, target) {
|
|
2426
|
+
const { dependencies } = childSchema;
|
|
2352
2427
|
if (dependencies === void 0 || !isObjectValue(source)) {
|
|
2353
2428
|
return target;
|
|
2354
2429
|
}
|
|
2430
|
+
let result = target;
|
|
2355
2431
|
for (const [key, deps] of Object.entries(dependencies)) {
|
|
2356
|
-
if (
|
|
2357
|
-
|
|
2432
|
+
if (key in source && !Array.isArray(deps)) {
|
|
2433
|
+
result = omit2(deps, source, result);
|
|
2358
2434
|
}
|
|
2359
|
-
target = omit3(deps, source, target);
|
|
2360
2435
|
}
|
|
2361
|
-
return
|
|
2436
|
+
return result;
|
|
2362
2437
|
}
|
|
2363
|
-
function
|
|
2438
|
+
function omit2(schemaDef, source, target) {
|
|
2364
2439
|
if (source === void 0 || schemaDef === false) {
|
|
2365
2440
|
return void 0;
|
|
2366
2441
|
}
|
|
2367
2442
|
if (schemaDef === true || (0, import_isEmpty5.default)(schemaDef)) {
|
|
2368
2443
|
return source;
|
|
2369
2444
|
}
|
|
2370
|
-
let
|
|
2371
|
-
const { $ref: ref, allOf } =
|
|
2445
|
+
let localSchema = schemaDef;
|
|
2446
|
+
const { $ref: ref, allOf } = localSchema;
|
|
2372
2447
|
if (ref !== void 0) {
|
|
2373
|
-
return
|
|
2448
|
+
return omit2(findSchemaDefinition(ref, rootSchema), source, target);
|
|
2374
2449
|
}
|
|
2375
2450
|
if (allOf) {
|
|
2376
|
-
|
|
2451
|
+
localSchema = doMergeAllOf(localSchema, experimental_customMergeAllOf);
|
|
2452
|
+
const remainingAllOf = localSchema.allOf;
|
|
2453
|
+
if (remainingAllOf) {
|
|
2454
|
+
for (let i = 0; i < remainingAllOf.length; i++) {
|
|
2455
|
+
target = omit2(remainingAllOf[i], source, target);
|
|
2456
|
+
}
|
|
2457
|
+
}
|
|
2377
2458
|
}
|
|
2378
|
-
|
|
2379
|
-
const type = getSchemaType(
|
|
2459
|
+
let filtered = handleAnyOf(localSchema, source, handleOneOf(localSchema.oneOf, localSchema, source, target));
|
|
2460
|
+
const type = getSchemaType(localSchema);
|
|
2380
2461
|
if (type === "object") {
|
|
2381
2462
|
if (!isObjectValue(source)) {
|
|
2382
2463
|
return void 0;
|
|
2383
2464
|
}
|
|
2384
|
-
|
|
2465
|
+
filtered = handleObject(localSchema, source, isObjectValue(filtered) ? filtered : {});
|
|
2385
2466
|
} else if (type === "array") {
|
|
2386
2467
|
if (!Array.isArray(source)) {
|
|
2387
2468
|
return void 0;
|
|
2388
2469
|
}
|
|
2389
|
-
|
|
2390
|
-
} else if (
|
|
2391
|
-
|
|
2470
|
+
filtered = handleArray(localSchema, source, Array.isArray(filtered) ? filtered : []);
|
|
2471
|
+
} else if (filtered === void 0) {
|
|
2472
|
+
filtered = source;
|
|
2392
2473
|
}
|
|
2393
|
-
return handleDependencies(
|
|
2474
|
+
return handleDependencies(localSchema, source, handleConditions(localSchema, source, filtered));
|
|
2394
2475
|
}
|
|
2395
|
-
return
|
|
2476
|
+
return omit2(schema, formData);
|
|
2396
2477
|
}
|
|
2397
2478
|
|
|
2398
2479
|
// src/schema/sanitizeDataForNewSchema.ts
|
|
2399
|
-
var
|
|
2480
|
+
var import_get14 = __toESM(require("lodash/get"), 1);
|
|
2400
2481
|
var import_has5 = __toESM(require("lodash/has"), 1);
|
|
2401
2482
|
var NO_VALUE = /* @__PURE__ */ Symbol("no Value");
|
|
2483
|
+
function enumValuesForSchema(schema) {
|
|
2484
|
+
if (Array.isArray(schema.enum)) {
|
|
2485
|
+
return schema.enum;
|
|
2486
|
+
}
|
|
2487
|
+
const options = schema.oneOf || schema.anyOf;
|
|
2488
|
+
if (!Array.isArray(options)) {
|
|
2489
|
+
return void 0;
|
|
2490
|
+
}
|
|
2491
|
+
const values = options.map((option) => {
|
|
2492
|
+
if (CONST_KEY in option) {
|
|
2493
|
+
return option[CONST_KEY];
|
|
2494
|
+
}
|
|
2495
|
+
return Array.isArray(option.enum) && option.enum.length === 1 ? option.enum[0] : NO_VALUE;
|
|
2496
|
+
}).filter((value) => value !== NO_VALUE);
|
|
2497
|
+
return values.length > 0 ? values : void 0;
|
|
2498
|
+
}
|
|
2499
|
+
function replacementForInvalidEnumValue(schema, formValue) {
|
|
2500
|
+
const enumValues = enumValuesForSchema(schema);
|
|
2501
|
+
if (!enumValues || enumValues.some((value) => deepEquals_default(value, formValue))) {
|
|
2502
|
+
return NO_VALUE;
|
|
2503
|
+
}
|
|
2504
|
+
const defaultValue = (0, import_get14.default)(schema, DEFAULT_KEY, NO_VALUE);
|
|
2505
|
+
if (defaultValue !== NO_VALUE && enumValues.some((value) => deepEquals_default(value, defaultValue))) {
|
|
2506
|
+
return defaultValue;
|
|
2507
|
+
}
|
|
2508
|
+
return enumValues.length === 1 ? enumValues[0] : void 0;
|
|
2509
|
+
}
|
|
2402
2510
|
function sanitizeDataForNewSchema(validator, rootSchema, newSchema, oldSchema, data = {}, experimental_customMergeAllOf) {
|
|
2403
2511
|
let newFormData;
|
|
2404
2512
|
if ((0, import_has5.default)(newSchema, PROPERTIES_KEY)) {
|
|
2405
2513
|
const removeOldSchemaData = {};
|
|
2406
2514
|
if ((0, import_has5.default)(oldSchema, PROPERTIES_KEY)) {
|
|
2407
|
-
const properties = (0,
|
|
2515
|
+
const properties = (0, import_get14.default)(oldSchema, PROPERTIES_KEY, {});
|
|
2408
2516
|
Object.keys(properties).forEach((key) => {
|
|
2409
2517
|
if ((0, import_has5.default)(data, key)) {
|
|
2410
2518
|
removeOldSchemaData[key] = void 0;
|
|
2411
2519
|
}
|
|
2412
2520
|
});
|
|
2413
2521
|
}
|
|
2414
|
-
const keys2 = Object.keys((0,
|
|
2522
|
+
const keys2 = Object.keys((0, import_get14.default)(newSchema, PROPERTIES_KEY, {}));
|
|
2415
2523
|
const nestedData = {};
|
|
2416
2524
|
keys2.forEach((key) => {
|
|
2417
|
-
const formValue = (0,
|
|
2418
|
-
let oldKeyedSchema = (0,
|
|
2419
|
-
let newKeyedSchema = (0,
|
|
2525
|
+
const formValue = (0, import_get14.default)(data, key);
|
|
2526
|
+
let oldKeyedSchema = (0, import_get14.default)(oldSchema, [PROPERTIES_KEY, key], {});
|
|
2527
|
+
let newKeyedSchema = (0, import_get14.default)(newSchema, [PROPERTIES_KEY, key], {});
|
|
2420
2528
|
if ((0, import_has5.default)(oldKeyedSchema, REF_KEY)) {
|
|
2421
2529
|
oldKeyedSchema = retrieveSchema(
|
|
2422
2530
|
validator,
|
|
@@ -2435,8 +2543,8 @@ function sanitizeDataForNewSchema(validator, rootSchema, newSchema, oldSchema, d
|
|
|
2435
2543
|
experimental_customMergeAllOf
|
|
2436
2544
|
);
|
|
2437
2545
|
}
|
|
2438
|
-
const oldSchemaTypeForKey = (0,
|
|
2439
|
-
const newSchemaTypeForKey = (0,
|
|
2546
|
+
const oldSchemaTypeForKey = (0, import_get14.default)(oldKeyedSchema, "type");
|
|
2547
|
+
const newSchemaTypeForKey = (0, import_get14.default)(newKeyedSchema, "type");
|
|
2440
2548
|
if (!oldSchemaTypeForKey || oldSchemaTypeForKey === newSchemaTypeForKey) {
|
|
2441
2549
|
if ((0, import_has5.default)(removeOldSchemaData, key)) {
|
|
2442
2550
|
delete removeOldSchemaData[key];
|
|
@@ -2454,31 +2562,37 @@ function sanitizeDataForNewSchema(validator, rootSchema, newSchema, oldSchema, d
|
|
|
2454
2562
|
nestedData[key] = itemData;
|
|
2455
2563
|
}
|
|
2456
2564
|
} else {
|
|
2457
|
-
const newOptionDefault = (0,
|
|
2458
|
-
const oldOptionDefault = (0,
|
|
2565
|
+
const newOptionDefault = (0, import_get14.default)(newKeyedSchema, DEFAULT_KEY, NO_VALUE);
|
|
2566
|
+
const oldOptionDefault = (0, import_get14.default)(oldKeyedSchema, DEFAULT_KEY, NO_VALUE);
|
|
2459
2567
|
if (newOptionDefault !== NO_VALUE && newOptionDefault !== formValue) {
|
|
2460
2568
|
if (oldOptionDefault === formValue) {
|
|
2461
2569
|
removeOldSchemaData[key] = newOptionDefault;
|
|
2462
|
-
} else if ((0,
|
|
2570
|
+
} else if ((0, import_get14.default)(newKeyedSchema, "readOnly") === true) {
|
|
2463
2571
|
removeOldSchemaData[key] = void 0;
|
|
2464
2572
|
}
|
|
2465
2573
|
}
|
|
2466
|
-
const newOptionConst = (0,
|
|
2467
|
-
const oldOptionConst = (0,
|
|
2574
|
+
const newOptionConst = (0, import_get14.default)(newKeyedSchema, CONST_KEY, NO_VALUE);
|
|
2575
|
+
const oldOptionConst = (0, import_get14.default)(oldKeyedSchema, CONST_KEY, NO_VALUE);
|
|
2468
2576
|
if (newOptionConst !== NO_VALUE && newOptionConst !== formValue) {
|
|
2469
2577
|
removeOldSchemaData[key] = oldOptionConst === formValue ? newOptionConst : void 0;
|
|
2470
2578
|
}
|
|
2579
|
+
if ((0, import_has5.default)(data, key)) {
|
|
2580
|
+
const enumReplacement = replacementForInvalidEnumValue(newKeyedSchema, formValue);
|
|
2581
|
+
if (enumReplacement !== NO_VALUE) {
|
|
2582
|
+
removeOldSchemaData[key] = enumReplacement;
|
|
2583
|
+
}
|
|
2584
|
+
}
|
|
2471
2585
|
}
|
|
2472
2586
|
}
|
|
2473
2587
|
});
|
|
2474
2588
|
newFormData = {
|
|
2475
|
-
...typeof data
|
|
2589
|
+
...typeof data === "string" || Array.isArray(data) ? void 0 : data,
|
|
2476
2590
|
...removeOldSchemaData,
|
|
2477
2591
|
...nestedData
|
|
2478
2592
|
};
|
|
2479
|
-
} else if ((0,
|
|
2480
|
-
let oldSchemaItems = (0,
|
|
2481
|
-
let newSchemaItems = (0,
|
|
2593
|
+
} else if ((0, import_get14.default)(oldSchema, "type") === "array" && (0, import_get14.default)(newSchema, "type") === "array" && Array.isArray(data)) {
|
|
2594
|
+
let oldSchemaItems = (0, import_get14.default)(oldSchema, "items");
|
|
2595
|
+
let newSchemaItems = (0, import_get14.default)(newSchema, "items");
|
|
2482
2596
|
if (typeof oldSchemaItems === "object" && typeof newSchemaItems === "object" && !Array.isArray(oldSchemaItems) && !Array.isArray(newSchemaItems)) {
|
|
2483
2597
|
if ((0, import_has5.default)(oldSchemaItems, REF_KEY)) {
|
|
2484
2598
|
oldSchemaItems = retrieveSchema(
|
|
@@ -2498,10 +2612,10 @@ function sanitizeDataForNewSchema(validator, rootSchema, newSchema, oldSchema, d
|
|
|
2498
2612
|
experimental_customMergeAllOf
|
|
2499
2613
|
);
|
|
2500
2614
|
}
|
|
2501
|
-
const oldSchemaType = (0,
|
|
2502
|
-
const newSchemaType = (0,
|
|
2615
|
+
const oldSchemaType = (0, import_get14.default)(oldSchemaItems, "type");
|
|
2616
|
+
const newSchemaType = (0, import_get14.default)(newSchemaItems, "type");
|
|
2503
2617
|
if (!oldSchemaType || oldSchemaType === newSchemaType) {
|
|
2504
|
-
const maxItems = (0,
|
|
2618
|
+
const maxItems = (0, import_get14.default)(newSchema, "maxItems", -1);
|
|
2505
2619
|
if (newSchemaType === "object") {
|
|
2506
2620
|
newFormData = data.reduce((newValue, aValue) => {
|
|
2507
2621
|
const itemValue = sanitizeDataForNewSchema(
|
|
@@ -2518,7 +2632,9 @@ function sanitizeDataForNewSchema(validator, rootSchema, newSchema, oldSchema, d
|
|
|
2518
2632
|
return newValue;
|
|
2519
2633
|
}, []);
|
|
2520
2634
|
} else {
|
|
2521
|
-
|
|
2635
|
+
const newItemEnumValues = enumValuesForSchema(newSchemaItems);
|
|
2636
|
+
const filteredData = newItemEnumValues ? data.filter((item) => newItemEnumValues.some((v) => deepEquals_default(v, item))) : data;
|
|
2637
|
+
newFormData = maxItems > 0 && filteredData.length > maxItems ? filteredData.slice(0, maxItems) : filteredData;
|
|
2522
2638
|
}
|
|
2523
2639
|
}
|
|
2524
2640
|
} else if (typeof oldSchemaItems === "boolean" && typeof newSchemaItems === "boolean" && oldSchemaItems === newSchemaItems) {
|
|
@@ -2529,21 +2645,21 @@ function sanitizeDataForNewSchema(validator, rootSchema, newSchema, oldSchema, d
|
|
|
2529
2645
|
}
|
|
2530
2646
|
|
|
2531
2647
|
// src/schema/toPathSchema.ts
|
|
2532
|
-
var
|
|
2648
|
+
var import_get15 = __toESM(require("lodash/get"), 1);
|
|
2533
2649
|
var import_isObject12 = __toESM(require("lodash/isObject"), 1);
|
|
2534
2650
|
var import_set2 = __toESM(require("lodash/set"), 1);
|
|
2535
2651
|
function toPathSchemaInternal(validator, schema, name, rootSchema, formData, _recurseList = [], experimental_customMergeAllOf) {
|
|
2536
2652
|
if (REF_KEY in schema || DEPENDENCIES_KEY in schema || ALL_OF_KEY in schema || IF_KEY in schema) {
|
|
2537
|
-
const
|
|
2538
|
-
const sameSchemaIndex = _recurseList.findIndex((item) => deepEquals_default(item,
|
|
2653
|
+
const innerSchema = retrieveSchema(validator, schema, rootSchema, formData, experimental_customMergeAllOf);
|
|
2654
|
+
const sameSchemaIndex = _recurseList.findIndex((item) => deepEquals_default(item, innerSchema));
|
|
2539
2655
|
if (sameSchemaIndex === -1) {
|
|
2540
2656
|
return toPathSchemaInternal(
|
|
2541
2657
|
validator,
|
|
2542
|
-
|
|
2658
|
+
innerSchema,
|
|
2543
2659
|
name,
|
|
2544
2660
|
rootSchema,
|
|
2545
2661
|
formData,
|
|
2546
|
-
_recurseList.concat(
|
|
2662
|
+
_recurseList.concat(innerSchema),
|
|
2547
2663
|
experimental_customMergeAllOf
|
|
2548
2664
|
);
|
|
2549
2665
|
}
|
|
@@ -2563,12 +2679,12 @@ function toPathSchemaInternal(validator, schema, name, rootSchema, formData, _re
|
|
|
2563
2679
|
discriminator,
|
|
2564
2680
|
experimental_customMergeAllOf
|
|
2565
2681
|
);
|
|
2566
|
-
const
|
|
2682
|
+
const innerSchema = xxxOf[index];
|
|
2567
2683
|
pathSchema = {
|
|
2568
2684
|
...pathSchema,
|
|
2569
2685
|
...toPathSchemaInternal(
|
|
2570
2686
|
validator,
|
|
2571
|
-
|
|
2687
|
+
innerSchema,
|
|
2572
2688
|
name,
|
|
2573
2689
|
rootSchema,
|
|
2574
2690
|
formData,
|
|
@@ -2580,7 +2696,7 @@ function toPathSchemaInternal(validator, schema, name, rootSchema, formData, _re
|
|
|
2580
2696
|
if (ADDITIONAL_PROPERTIES_KEY in schema && schema[ADDITIONAL_PROPERTIES_KEY] !== false) {
|
|
2581
2697
|
(0, import_set2.default)(pathSchema, RJSF_ADDITIONAL_PROPERTIES_FLAG, true);
|
|
2582
2698
|
const additionalSchema = (0, import_isObject12.default)(schema[ADDITIONAL_PROPERTIES_KEY]) ? schema[ADDITIONAL_PROPERTIES_KEY] : {};
|
|
2583
|
-
const definedProperties = (0,
|
|
2699
|
+
const definedProperties = (0, import_get15.default)(schema, PROPERTIES_KEY, {});
|
|
2584
2700
|
for (const key of Object.keys(formData ?? {})) {
|
|
2585
2701
|
if (!(key in definedProperties)) {
|
|
2586
2702
|
pathSchema[key] = toPathSchemaInternal(
|
|
@@ -2588,7 +2704,7 @@ function toPathSchemaInternal(validator, schema, name, rootSchema, formData, _re
|
|
|
2588
2704
|
additionalSchema,
|
|
2589
2705
|
`${name}.${key}`,
|
|
2590
2706
|
rootSchema,
|
|
2591
|
-
(0,
|
|
2707
|
+
(0, import_get15.default)(formData, [key]),
|
|
2592
2708
|
_recurseList,
|
|
2593
2709
|
experimental_customMergeAllOf
|
|
2594
2710
|
);
|
|
@@ -2638,7 +2754,7 @@ function toPathSchemaInternal(validator, schema, name, rootSchema, formData, _re
|
|
|
2638
2754
|
}
|
|
2639
2755
|
} else if (PROPERTIES_KEY in schema) {
|
|
2640
2756
|
for (const property in schema.properties) {
|
|
2641
|
-
const field = (0,
|
|
2757
|
+
const field = (0, import_get15.default)(schema, [PROPERTIES_KEY, property], {});
|
|
2642
2758
|
pathSchema[property] = toPathSchemaInternal(
|
|
2643
2759
|
validator,
|
|
2644
2760
|
field,
|
|
@@ -2646,7 +2762,7 @@ function toPathSchemaInternal(validator, schema, name, rootSchema, formData, _re
|
|
|
2646
2762
|
rootSchema,
|
|
2647
2763
|
// It's possible that formData is not an object -- this can happen if an
|
|
2648
2764
|
// array item has just been added, but not populated with data yet
|
|
2649
|
-
(0,
|
|
2765
|
+
(0, import_get15.default)(formData, [property]),
|
|
2650
2766
|
_recurseList,
|
|
2651
2767
|
experimental_customMergeAllOf
|
|
2652
2768
|
);
|
|
@@ -2668,8 +2784,8 @@ var SchemaUtils = class {
|
|
|
2668
2784
|
* @param [experimental_customMergeAllOf] - Optional function that allows for custom merging of `allOf` schemas
|
|
2669
2785
|
*/
|
|
2670
2786
|
constructor(validator, rootSchema, experimental_defaultFormStateBehavior, experimental_customMergeAllOf) {
|
|
2671
|
-
if (rootSchema
|
|
2672
|
-
this.rootSchema = makeAllReferencesAbsolute(rootSchema, (0,
|
|
2787
|
+
if (rootSchema?.[SCHEMA_KEY] === JSON_SCHEMA_DRAFT_2020_12) {
|
|
2788
|
+
this.rootSchema = makeAllReferencesAbsolute(rootSchema, (0, import_get16.default)(rootSchema, ID_KEY, "#"));
|
|
2673
2789
|
} else {
|
|
2674
2790
|
this.rootSchema = rootSchema;
|
|
2675
2791
|
}
|
|
@@ -2920,6 +3036,7 @@ var SchemaUtils = class {
|
|
|
2920
3036
|
* @param [formData] - The current formData, if any, onto which to provide any missing defaults
|
|
2921
3037
|
* @returns - The `PathSchema` object for the `schema`
|
|
2922
3038
|
*/
|
|
3039
|
+
// oxlint-disable-next-line typescript/no-deprecated
|
|
2923
3040
|
toPathSchema(schema, name, formData) {
|
|
2924
3041
|
return toPathSchema(
|
|
2925
3042
|
this.validator,
|
|
@@ -2942,7 +3059,7 @@ function createSchemaUtils(validator, rootSchema, experimental_defaultFormStateB
|
|
|
2942
3059
|
|
|
2943
3060
|
// src/dataURItoBlob.ts
|
|
2944
3061
|
function dataURItoBlob(dataURILike) {
|
|
2945
|
-
if (dataURILike.
|
|
3062
|
+
if (!dataURILike.includes("data:")) {
|
|
2946
3063
|
throw new Error("File is invalid: URI must be a dataURI");
|
|
2947
3064
|
}
|
|
2948
3065
|
const dataURI = dataURILike.slice(5);
|
|
@@ -2961,13 +3078,13 @@ function dataURItoBlob(dataURILike) {
|
|
|
2961
3078
|
try {
|
|
2962
3079
|
const binary = atob(base64);
|
|
2963
3080
|
const array = new Array(binary.length);
|
|
2964
|
-
for (let i = 0; i < binary.length; i
|
|
3081
|
+
for (let i = 0; i < binary.length; i += 1) {
|
|
2965
3082
|
array[i] = binary.charCodeAt(i);
|
|
2966
3083
|
}
|
|
2967
3084
|
const blob = new window.Blob([new Uint8Array(array)], { type });
|
|
2968
3085
|
return { blob, name };
|
|
2969
3086
|
} catch (error) {
|
|
2970
|
-
throw new Error(
|
|
3087
|
+
throw new Error(`File is invalid: ${error.message}`);
|
|
2971
3088
|
}
|
|
2972
3089
|
}
|
|
2973
3090
|
|
|
@@ -2975,24 +3092,26 @@ function dataURItoBlob(dataURILike) {
|
|
|
2975
3092
|
function pad(num, width) {
|
|
2976
3093
|
let s = String(num);
|
|
2977
3094
|
while (s.length < width) {
|
|
2978
|
-
s =
|
|
3095
|
+
s = `0${s}`;
|
|
2979
3096
|
}
|
|
2980
3097
|
return s;
|
|
2981
3098
|
}
|
|
2982
3099
|
|
|
2983
3100
|
// src/dateRangeOptions.ts
|
|
2984
3101
|
function dateRangeOptions(start, stop) {
|
|
2985
|
-
|
|
2986
|
-
|
|
2987
|
-
|
|
2988
|
-
} else if (start < 0 || stop < 0) {
|
|
3102
|
+
const bothRelative = start <= 0 && stop <= 0;
|
|
3103
|
+
const eitherNegative = start < 0 || stop < 0;
|
|
3104
|
+
if (!bothRelative && eitherNegative) {
|
|
2989
3105
|
throw new Error(`Both start (${start}) and stop (${stop}) must both be <= 0 or > 0, got one of each`);
|
|
2990
3106
|
}
|
|
2991
|
-
|
|
3107
|
+
const currentYear = (/* @__PURE__ */ new Date()).getFullYear();
|
|
3108
|
+
const resolvedStart = bothRelative ? currentYear + start : start;
|
|
3109
|
+
const resolvedStop = bothRelative ? currentYear + stop : stop;
|
|
3110
|
+
if (resolvedStart > resolvedStop) {
|
|
2992
3111
|
return dateRangeOptions(stop, start).reverse();
|
|
2993
3112
|
}
|
|
2994
3113
|
const options = [];
|
|
2995
|
-
for (let i =
|
|
3114
|
+
for (let i = resolvedStart; i <= resolvedStop; i += 1) {
|
|
2996
3115
|
options.push({ value: i, label: pad(i, 2) });
|
|
2997
3116
|
}
|
|
2998
3117
|
return options;
|
|
@@ -3091,7 +3210,7 @@ function decodeSingle(value, enumOptions, emptyValue) {
|
|
|
3091
3210
|
return match.value;
|
|
3092
3211
|
}
|
|
3093
3212
|
const index = Number(value);
|
|
3094
|
-
if (!isNaN(index) && index >= 0 && index < enumOptions.length) {
|
|
3213
|
+
if (!Number.isNaN(index) && index >= 0 && index < enumOptions.length) {
|
|
3095
3214
|
return enumOptions[index].value;
|
|
3096
3215
|
}
|
|
3097
3216
|
return emptyValue;
|
|
@@ -3123,7 +3242,7 @@ function enumOptionValueEncoder(value, index, format = "indexed") {
|
|
|
3123
3242
|
|
|
3124
3243
|
// src/ErrorSchemaBuilder.ts
|
|
3125
3244
|
var import_cloneDeep = __toESM(require("lodash/cloneDeep"), 1);
|
|
3126
|
-
var
|
|
3245
|
+
var import_get17 = __toESM(require("lodash/get"), 1);
|
|
3127
3246
|
var import_set3 = __toESM(require("lodash/set"), 1);
|
|
3128
3247
|
var import_setWith = __toESM(require("lodash/setWith"), 1);
|
|
3129
3248
|
var ErrorSchemaBuilder = class {
|
|
@@ -3152,7 +3271,7 @@ var ErrorSchemaBuilder = class {
|
|
|
3152
3271
|
*/
|
|
3153
3272
|
getOrCreateErrorBlock(pathOfError) {
|
|
3154
3273
|
const hasPath = Array.isArray(pathOfError) && pathOfError.length > 0 || typeof pathOfError === "string";
|
|
3155
|
-
let errorBlock = hasPath ? (0,
|
|
3274
|
+
let errorBlock = hasPath ? (0, import_get17.default)(this.errorSchema, pathOfError) : this.errorSchema;
|
|
3156
3275
|
if (!errorBlock && pathOfError) {
|
|
3157
3276
|
errorBlock = {};
|
|
3158
3277
|
(0, import_setWith.default)(this.errorSchema, pathOfError, errorBlock, Object);
|
|
@@ -3178,7 +3297,7 @@ var ErrorSchemaBuilder = class {
|
|
|
3178
3297
|
*/
|
|
3179
3298
|
addErrors(errorOrList, pathOfError) {
|
|
3180
3299
|
const errorBlock = this.getOrCreateErrorBlock(pathOfError);
|
|
3181
|
-
let errorsList = (0,
|
|
3300
|
+
let errorsList = (0, import_get17.default)(errorBlock, ERRORS_KEY);
|
|
3182
3301
|
if (!Array.isArray(errorsList)) {
|
|
3183
3302
|
errorsList = [];
|
|
3184
3303
|
errorBlock[ERRORS_KEY] = errorsList;
|
|
@@ -3220,7 +3339,7 @@ var ErrorSchemaBuilder = class {
|
|
|
3220
3339
|
|
|
3221
3340
|
// src/getChangedFields.ts
|
|
3222
3341
|
var import_difference = __toESM(require("lodash/difference"), 1);
|
|
3223
|
-
var
|
|
3342
|
+
var import_get18 = __toESM(require("lodash/get"), 1);
|
|
3224
3343
|
var import_isPlainObject2 = __toESM(require("lodash/isPlainObject"), 1);
|
|
3225
3344
|
var import_keys = __toESM(require("lodash/keys"), 1);
|
|
3226
3345
|
var import_pickBy = __toESM(require("lodash/pickBy"), 1);
|
|
@@ -3232,13 +3351,13 @@ function getChangedFields(a, b) {
|
|
|
3232
3351
|
}
|
|
3233
3352
|
if (aIsPlainObject && !bIsPlainObject) {
|
|
3234
3353
|
return (0, import_keys.default)(a);
|
|
3235
|
-
}
|
|
3354
|
+
}
|
|
3355
|
+
if (!aIsPlainObject && bIsPlainObject) {
|
|
3236
3356
|
return (0, import_keys.default)(b);
|
|
3237
|
-
} else {
|
|
3238
|
-
const unequalFields = (0, import_keys.default)((0, import_pickBy.default)(a, (value, key) => !deepEquals_default(value, (0, import_get19.default)(b, key))));
|
|
3239
|
-
const diffFields = (0, import_difference.default)((0, import_keys.default)(b), (0, import_keys.default)(a));
|
|
3240
|
-
return [...unequalFields, ...diffFields];
|
|
3241
3357
|
}
|
|
3358
|
+
const unequalFields = (0, import_keys.default)((0, import_pickBy.default)(a, (value, key) => !deepEquals_default(value, (0, import_get18.default)(b, key))));
|
|
3359
|
+
const diffFields = (0, import_difference.default)((0, import_keys.default)(b), (0, import_keys.default)(a));
|
|
3360
|
+
return [...unequalFields, ...diffFields];
|
|
3242
3361
|
}
|
|
3243
3362
|
|
|
3244
3363
|
// src/getDateElementProps.ts
|
|
@@ -3337,7 +3456,7 @@ var DEFAULT_OPTIONS = {
|
|
|
3337
3456
|
};
|
|
3338
3457
|
function getSubmitButtonOptions(uiSchema = {}) {
|
|
3339
3458
|
const uiOptions = getUiOptions(uiSchema);
|
|
3340
|
-
if (uiOptions
|
|
3459
|
+
if (uiOptions?.[SUBMIT_BTN_OPTIONS_KEY]) {
|
|
3341
3460
|
const options = uiOptions[SUBMIT_BTN_OPTIONS_KEY];
|
|
3342
3461
|
return { ...DEFAULT_OPTIONS, ...options };
|
|
3343
3462
|
}
|
|
@@ -3362,10 +3481,10 @@ function getTemplate(name, registry, uiOptions = {}) {
|
|
|
3362
3481
|
}
|
|
3363
3482
|
|
|
3364
3483
|
// src/getTestIds.ts
|
|
3365
|
-
var
|
|
3484
|
+
var import_get19 = __toESM(require("lodash/get"), 1);
|
|
3366
3485
|
var import_uniqueId = __toESM(require("lodash/uniqueId"), 1);
|
|
3367
3486
|
function getTestIds() {
|
|
3368
|
-
if ((0,
|
|
3487
|
+
if ((0, import_get19.default)(globalThis, "process.env.NODE_ENV") !== "test") {
|
|
3369
3488
|
return {};
|
|
3370
3489
|
}
|
|
3371
3490
|
const ids = /* @__PURE__ */ new Map();
|
|
@@ -3384,7 +3503,7 @@ function getTestIds() {
|
|
|
3384
3503
|
|
|
3385
3504
|
// src/getWidget.tsx
|
|
3386
3505
|
var import_react = require("react");
|
|
3387
|
-
var
|
|
3506
|
+
var import_get20 = __toESM(require("lodash/get"), 1);
|
|
3388
3507
|
var import_set4 = __toESM(require("lodash/set"), 1);
|
|
3389
3508
|
var import_react_is = __toESM(require("react-is"), 1);
|
|
3390
3509
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
@@ -3441,12 +3560,10 @@ var widgetMap = {
|
|
|
3441
3560
|
}
|
|
3442
3561
|
};
|
|
3443
3562
|
function mergeWidgetOptions(AWidget) {
|
|
3444
|
-
let MergedWidget = (0,
|
|
3563
|
+
let MergedWidget = (0, import_get20.default)(AWidget, "MergedWidget");
|
|
3445
3564
|
if (!MergedWidget) {
|
|
3446
|
-
const defaultOptions = AWidget.defaultProps
|
|
3447
|
-
MergedWidget = ({ options, ...props }) => {
|
|
3448
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(AWidget, { options: { ...defaultOptions, ...options }, ...props });
|
|
3449
|
-
};
|
|
3565
|
+
const defaultOptions = AWidget.defaultProps?.options || {};
|
|
3566
|
+
MergedWidget = ({ options, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(AWidget, { options: { ...defaultOptions, ...options }, ...props });
|
|
3450
3567
|
(0, import_set4.default)(AWidget, "MergedWidget", MergedWidget);
|
|
3451
3568
|
}
|
|
3452
3569
|
return MergedWidget;
|
|
@@ -3478,23 +3595,26 @@ function getWidget(schema, widget, registeredWidgets = {}) {
|
|
|
3478
3595
|
// src/hashForSchema.ts
|
|
3479
3596
|
function hashString(string) {
|
|
3480
3597
|
let hash = 0;
|
|
3481
|
-
for (let i = 0; i < string.length; i
|
|
3598
|
+
for (let i = 0; i < string.length; i++) {
|
|
3482
3599
|
const chr = string.charCodeAt(i);
|
|
3483
3600
|
hash = (hash << 5) - hash + chr;
|
|
3484
|
-
hash
|
|
3601
|
+
hash &= hash;
|
|
3485
3602
|
}
|
|
3486
3603
|
return hash.toString(16);
|
|
3487
3604
|
}
|
|
3488
3605
|
function sortedJSONStringify(object) {
|
|
3489
3606
|
const allKeys = /* @__PURE__ */ new Set();
|
|
3490
|
-
JSON.stringify(object, (key, value) =>
|
|
3607
|
+
JSON.stringify(object, (key, value) => {
|
|
3608
|
+
allKeys.add(key);
|
|
3609
|
+
return value;
|
|
3610
|
+
});
|
|
3491
3611
|
return JSON.stringify(object, Array.from(allKeys).sort());
|
|
3492
3612
|
}
|
|
3493
3613
|
function hashObject(object) {
|
|
3494
3614
|
return hashString(sortedJSONStringify(object));
|
|
3495
3615
|
}
|
|
3496
3616
|
function hashForSchema(schema) {
|
|
3497
|
-
return
|
|
3617
|
+
return hashString(sortedJSONStringify(schema));
|
|
3498
3618
|
}
|
|
3499
3619
|
|
|
3500
3620
|
// src/hasWidget.ts
|
|
@@ -3555,7 +3675,6 @@ function isFormDataAvailable(formData) {
|
|
|
3555
3675
|
}
|
|
3556
3676
|
|
|
3557
3677
|
// src/isRootSchema.ts
|
|
3558
|
-
var import_omit2 = __toESM(require("lodash/omit"), 1);
|
|
3559
3678
|
function isRootSchema(registry, schemaToCompare) {
|
|
3560
3679
|
const { rootSchema, schemaUtils } = registry;
|
|
3561
3680
|
if (deepEquals_default(schemaToCompare, rootSchema)) {
|
|
@@ -3563,7 +3682,7 @@ function isRootSchema(registry, schemaToCompare) {
|
|
|
3563
3682
|
}
|
|
3564
3683
|
if (REF_KEY in rootSchema) {
|
|
3565
3684
|
const resolvedSchema = schemaUtils.retrieveSchema(rootSchema);
|
|
3566
|
-
return deepEquals_default(schemaToCompare,
|
|
3685
|
+
return deepEquals_default(schemaToCompare, resolvedSchema);
|
|
3567
3686
|
}
|
|
3568
3687
|
return false;
|
|
3569
3688
|
}
|
|
@@ -3578,15 +3697,24 @@ function localToUTC(dateString) {
|
|
|
3578
3697
|
return dateString ? new Date(dateString).toJSON() : void 0;
|
|
3579
3698
|
}
|
|
3580
3699
|
|
|
3700
|
+
// src/logUnsupportedDefaultForEnum.ts
|
|
3701
|
+
function logUnsupportedDefaultForEnum(id, schema, enumOptions, multiple = false) {
|
|
3702
|
+
if (!multiple && Array.isArray(enumOptions) && schema.default !== void 0 && enumOptionsIndexForValue(schema.default, enumOptions, multiple) === void 0) {
|
|
3703
|
+
console.error(
|
|
3704
|
+
`The schema default value "${schema.default}" is not one of the values in the enum options for "${id}"`
|
|
3705
|
+
);
|
|
3706
|
+
}
|
|
3707
|
+
}
|
|
3708
|
+
|
|
3581
3709
|
// src/lookupFromFormContext.ts
|
|
3582
|
-
var
|
|
3710
|
+
var import_get21 = __toESM(require("lodash/get"), 1);
|
|
3583
3711
|
var import_has6 = __toESM(require("lodash/has"), 1);
|
|
3584
3712
|
function lookupFromFormContext(regOrFc, toLookup, fallback) {
|
|
3585
3713
|
const lookupPath = [LOOKUP_MAP_NAME];
|
|
3586
3714
|
if ((0, import_has6.default)(regOrFc, FORM_CONTEXT_NAME)) {
|
|
3587
3715
|
lookupPath.unshift(FORM_CONTEXT_NAME);
|
|
3588
3716
|
}
|
|
3589
|
-
return (0,
|
|
3717
|
+
return (0, import_get21.default)(regOrFc, [...lookupPath, toLookup], fallback);
|
|
3590
3718
|
}
|
|
3591
3719
|
|
|
3592
3720
|
// src/nameGenerators.ts
|
|
@@ -3614,9 +3742,9 @@ function orderProperties(properties, order) {
|
|
|
3614
3742
|
if (!Array.isArray(order)) {
|
|
3615
3743
|
return properties;
|
|
3616
3744
|
}
|
|
3617
|
-
const arrayToHash = (arr) => arr.reduce((
|
|
3618
|
-
|
|
3619
|
-
return
|
|
3745
|
+
const arrayToHash = (arr) => arr.reduce((acc, curr) => {
|
|
3746
|
+
acc[curr] = true;
|
|
3747
|
+
return acc;
|
|
3620
3748
|
}, {});
|
|
3621
3749
|
const errorPropList = (arr) => arr.length > 1 ? `properties '${arr.join("', '")}'` : `property '${arr[0]}'`;
|
|
3622
3750
|
const propertyHash = arrayToHash(properties);
|
|
@@ -3652,7 +3780,7 @@ function parseDateString(dateString, includeTime = true) {
|
|
|
3652
3780
|
}
|
|
3653
3781
|
const date = new Date(dateString);
|
|
3654
3782
|
if (Number.isNaN(date.getTime())) {
|
|
3655
|
-
throw new Error(
|
|
3783
|
+
throw new Error(`Unable to parse date ${dateString}`);
|
|
3656
3784
|
}
|
|
3657
3785
|
return {
|
|
3658
3786
|
year: date.getUTCFullYear(),
|
|
@@ -3705,11 +3833,10 @@ function removeOptionalEmptyObjects(validator, schema, rootSchema, formData) {
|
|
|
3705
3833
|
const isArr = Array.isArray(value);
|
|
3706
3834
|
if ((isObj || isArr) && properties[key]) {
|
|
3707
3835
|
const cleaned = removeOptionalEmptyObjects(validator, propertySchema, rootSchema, value);
|
|
3708
|
-
if (
|
|
3709
|
-
|
|
3836
|
+
if (isRequired || !isValueEmpty(cleaned)) {
|
|
3837
|
+
result[key] = cleaned;
|
|
3838
|
+
hasAnyValue = true;
|
|
3710
3839
|
}
|
|
3711
|
-
result[key] = cleaned;
|
|
3712
|
-
hasAnyValue = true;
|
|
3713
3840
|
} else if (isRequired || !isValueEmpty(value) || !properties[key]) {
|
|
3714
3841
|
result[key] = value;
|
|
3715
3842
|
if (!isValueEmpty(value)) {
|
|
@@ -3749,23 +3876,22 @@ function resolveUiSchema(schema, localUiSchema, registry) {
|
|
|
3749
3876
|
}
|
|
3750
3877
|
for (const keyword of [ONE_OF_KEY, ANY_OF_KEY]) {
|
|
3751
3878
|
const schemaOptions = resolvedSchema[keyword];
|
|
3752
|
-
if (
|
|
3753
|
-
|
|
3754
|
-
|
|
3755
|
-
|
|
3756
|
-
|
|
3757
|
-
|
|
3758
|
-
|
|
3759
|
-
|
|
3760
|
-
|
|
3761
|
-
|
|
3762
|
-
|
|
3763
|
-
|
|
3764
|
-
|
|
3879
|
+
if (Array.isArray(schemaOptions) && schemaOptions.length > 0) {
|
|
3880
|
+
const currentUiSchemaArray = result[keyword];
|
|
3881
|
+
const uiSchemaArray = Array.isArray(currentUiSchemaArray) ? [...currentUiSchemaArray] : [];
|
|
3882
|
+
let hasExpanded = false;
|
|
3883
|
+
for (let i = 0; i < schemaOptions.length; i++) {
|
|
3884
|
+
const option = schemaOptions[i];
|
|
3885
|
+
const optionRef = option?.[RJSF_REF_KEY] ?? option?.[REF_KEY];
|
|
3886
|
+
if (optionRef && optionRef in definitions) {
|
|
3887
|
+
const optionUiSchema = uiSchemaArray[i] || {};
|
|
3888
|
+
uiSchemaArray[i] = mergeObjects(definitions[optionRef], optionUiSchema);
|
|
3889
|
+
hasExpanded = true;
|
|
3890
|
+
}
|
|
3891
|
+
}
|
|
3892
|
+
if (hasExpanded) {
|
|
3893
|
+
result[keyword] = uiSchemaArray;
|
|
3765
3894
|
}
|
|
3766
|
-
}
|
|
3767
|
-
if (hasExpanded) {
|
|
3768
|
-
result[keyword] = uiSchemaArray;
|
|
3769
3895
|
}
|
|
3770
3896
|
}
|
|
3771
3897
|
}
|
|
@@ -3777,13 +3903,13 @@ function schemaRequiresTrueValue(schema) {
|
|
|
3777
3903
|
if (schema.const) {
|
|
3778
3904
|
return true;
|
|
3779
3905
|
}
|
|
3780
|
-
if (schema.enum
|
|
3906
|
+
if (schema.enum?.length === 1 && schema.enum[0] === true) {
|
|
3781
3907
|
return true;
|
|
3782
3908
|
}
|
|
3783
|
-
if (schema.anyOf
|
|
3909
|
+
if (schema.anyOf?.length === 1) {
|
|
3784
3910
|
return schemaRequiresTrueValue(schema.anyOf[0]);
|
|
3785
3911
|
}
|
|
3786
|
-
if (schema.oneOf
|
|
3912
|
+
if (schema.oneOf?.length === 1) {
|
|
3787
3913
|
return schemaRequiresTrueValue(schema.oneOf[0]);
|
|
3788
3914
|
}
|
|
3789
3915
|
if (schema.allOf) {
|
|
@@ -3793,6 +3919,38 @@ function schemaRequiresTrueValue(schema) {
|
|
|
3793
3919
|
return false;
|
|
3794
3920
|
}
|
|
3795
3921
|
|
|
3922
|
+
// src/SelectedOptionDescription.tsx
|
|
3923
|
+
var import_jsx_runtime2 = require("react/jsx-runtime");
|
|
3924
|
+
function SelectedOptionDescription({ hideLabel, id, multiple, options, registry, uiSchema, value }) {
|
|
3925
|
+
if (multiple || hideLabel) {
|
|
3926
|
+
return null;
|
|
3927
|
+
}
|
|
3928
|
+
const { label = true } = getUiOptions(uiSchema, registry.globalUiOptions);
|
|
3929
|
+
if (!label) {
|
|
3930
|
+
return null;
|
|
3931
|
+
}
|
|
3932
|
+
const option = options.enumOptions?.find(({ value: enumValue }) => enumOptionsIsSelected(enumValue, value));
|
|
3933
|
+
const description = option?.schema?.description;
|
|
3934
|
+
if (!description) {
|
|
3935
|
+
return null;
|
|
3936
|
+
}
|
|
3937
|
+
const DescriptionFieldTemplate = getTemplate(
|
|
3938
|
+
"DescriptionFieldTemplate",
|
|
3939
|
+
registry,
|
|
3940
|
+
options
|
|
3941
|
+
);
|
|
3942
|
+
return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
|
|
3943
|
+
DescriptionFieldTemplate,
|
|
3944
|
+
{
|
|
3945
|
+
id: descriptionId(id),
|
|
3946
|
+
description,
|
|
3947
|
+
schema: option.schema,
|
|
3948
|
+
uiSchema,
|
|
3949
|
+
registry
|
|
3950
|
+
}
|
|
3951
|
+
);
|
|
3952
|
+
}
|
|
3953
|
+
|
|
3796
3954
|
// src/shallowEquals.ts
|
|
3797
3955
|
function shallowEquals(a, b) {
|
|
3798
3956
|
if (Object.is(a, b)) {
|
|
@@ -3809,9 +3967,9 @@ function shallowEquals(a, b) {
|
|
|
3809
3967
|
if (keysA.length !== keysB.length) {
|
|
3810
3968
|
return false;
|
|
3811
3969
|
}
|
|
3812
|
-
for (let i = 0; i < keysA.length; i
|
|
3970
|
+
for (let i = 0; i < keysA.length; i += 1) {
|
|
3813
3971
|
const key = keysA[i];
|
|
3814
|
-
if (!Object.
|
|
3972
|
+
if (!Object.hasOwn(b, key) || !Object.is(a[key], b[key])) {
|
|
3815
3973
|
return false;
|
|
3816
3974
|
}
|
|
3817
3975
|
}
|
|
@@ -3880,14 +4038,14 @@ function toErrorList(errorSchema, fieldPath = []) {
|
|
|
3880
4038
|
})
|
|
3881
4039
|
);
|
|
3882
4040
|
}
|
|
3883
|
-
return Object.keys(errorSchema).reduce((
|
|
4041
|
+
return Object.keys(errorSchema).reduce((currentList, key) => {
|
|
3884
4042
|
if (key !== ERRORS_KEY) {
|
|
3885
4043
|
const childSchema = errorSchema[key];
|
|
3886
4044
|
if ((0, import_isPlainObject3.default)(childSchema)) {
|
|
3887
|
-
|
|
4045
|
+
return currentList.concat(toErrorList(childSchema, [...fieldPath, key]));
|
|
3888
4046
|
}
|
|
3889
4047
|
}
|
|
3890
|
-
return
|
|
4048
|
+
return currentList;
|
|
3891
4049
|
}, errorList);
|
|
3892
4050
|
}
|
|
3893
4051
|
|
|
@@ -3929,22 +4087,21 @@ function unwrapErrorHandler(errorHandler) {
|
|
|
3929
4087
|
return Object.keys(errorHandler).reduce((acc, key) => {
|
|
3930
4088
|
if (key === "addError") {
|
|
3931
4089
|
return acc;
|
|
3932
|
-
} else {
|
|
3933
|
-
const childSchema = errorHandler[key];
|
|
3934
|
-
if ((0, import_isPlainObject4.default)(childSchema)) {
|
|
3935
|
-
return {
|
|
3936
|
-
...acc,
|
|
3937
|
-
[key]: unwrapErrorHandler(childSchema)
|
|
3938
|
-
};
|
|
3939
|
-
}
|
|
3940
|
-
return { ...acc, [key]: childSchema };
|
|
3941
4090
|
}
|
|
4091
|
+
const childSchema = errorHandler[key];
|
|
4092
|
+
if ((0, import_isPlainObject4.default)(childSchema)) {
|
|
4093
|
+
return {
|
|
4094
|
+
...acc,
|
|
4095
|
+
[key]: unwrapErrorHandler(childSchema)
|
|
4096
|
+
};
|
|
4097
|
+
}
|
|
4098
|
+
return { ...acc, [key]: childSchema };
|
|
3942
4099
|
}, {});
|
|
3943
4100
|
}
|
|
3944
4101
|
|
|
3945
4102
|
// src/useAltDateWidgetProps.tsx
|
|
3946
4103
|
var import_react2 = require("react");
|
|
3947
|
-
var
|
|
4104
|
+
var import_jsx_runtime3 = require("react/jsx-runtime");
|
|
3948
4105
|
function readyForChange(state) {
|
|
3949
4106
|
return Object.values(state).every((value) => value !== -1);
|
|
3950
4107
|
}
|
|
@@ -3966,8 +4123,8 @@ function DateElement(props) {
|
|
|
3966
4123
|
} = props;
|
|
3967
4124
|
const id = `${rootId}_${type}`;
|
|
3968
4125
|
const { SelectWidget } = registry.widgets;
|
|
3969
|
-
const onChange = (0, import_react2.useCallback)((
|
|
3970
|
-
return /* @__PURE__ */ (0,
|
|
4126
|
+
const onChange = (0, import_react2.useCallback)((newValue) => select(type, newValue), [select, type]);
|
|
4127
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
3971
4128
|
SelectWidget,
|
|
3972
4129
|
{
|
|
3973
4130
|
schema: { type: "integer" },
|
|
@@ -3996,10 +4153,10 @@ function useAltDateWidgetProps(props) {
|
|
|
3996
4153
|
setState(parseDateString(value, time));
|
|
3997
4154
|
}, [time, value]);
|
|
3998
4155
|
const handleChange = (0, import_react2.useCallback)(
|
|
3999
|
-
(property,
|
|
4156
|
+
(property, newValue) => {
|
|
4000
4157
|
const nextState = {
|
|
4001
4158
|
...state,
|
|
4002
|
-
[property]: typeof
|
|
4159
|
+
[property]: typeof newValue === "undefined" ? -1 : newValue
|
|
4003
4160
|
};
|
|
4004
4161
|
if (readyForChange(nextState)) {
|
|
4005
4162
|
onChange(toDateString(nextState, time));
|
|
@@ -4057,7 +4214,7 @@ var import_react4 = require("react");
|
|
|
4057
4214
|
function addNameToDataURL(dataURL, name) {
|
|
4058
4215
|
return dataURL.replace(";base64", `;name=${encodeURIComponent(name)};base64`);
|
|
4059
4216
|
}
|
|
4060
|
-
function processFile(file) {
|
|
4217
|
+
async function processFile(file) {
|
|
4061
4218
|
const { name, size, type } = file;
|
|
4062
4219
|
return new Promise((resolve, reject) => {
|
|
4063
4220
|
const reader = new window.FileReader();
|
|
@@ -4082,7 +4239,7 @@ function processFile(file) {
|
|
|
4082
4239
|
reader.readAsDataURL(file);
|
|
4083
4240
|
});
|
|
4084
4241
|
}
|
|
4085
|
-
function processFiles(files) {
|
|
4242
|
+
async function processFiles(files) {
|
|
4086
4243
|
return Promise.all(Array.from(files).map(processFile));
|
|
4087
4244
|
}
|
|
4088
4245
|
function extractFileInfo(dataURLs) {
|
|
@@ -4182,22 +4339,21 @@ function validationDataMerge(validationData, additionalErrorSchema, preventDupli
|
|
|
4182
4339
|
// src/withIdRefPrefix.ts
|
|
4183
4340
|
var import_isObject16 = __toESM(require("lodash/isObject"), 1);
|
|
4184
4341
|
function withIdRefPrefixObject(node) {
|
|
4185
|
-
|
|
4186
|
-
|
|
4187
|
-
|
|
4188
|
-
|
|
4189
|
-
|
|
4190
|
-
|
|
4191
|
-
|
|
4342
|
+
const realObj = node;
|
|
4343
|
+
for (const key in realObj) {
|
|
4344
|
+
if (Object.hasOwn(realObj, key)) {
|
|
4345
|
+
const value = realObj[key];
|
|
4346
|
+
if (key === REF_KEY && typeof value === "string" && value.startsWith("#")) {
|
|
4347
|
+
realObj[key] = ROOT_SCHEMA_PREFIX + value;
|
|
4348
|
+
} else {
|
|
4349
|
+
realObj[key] = withIdRefPrefix(value);
|
|
4350
|
+
}
|
|
4192
4351
|
}
|
|
4193
4352
|
}
|
|
4194
4353
|
return node;
|
|
4195
4354
|
}
|
|
4196
4355
|
function withIdRefPrefixArray(node) {
|
|
4197
|
-
|
|
4198
|
-
node[i] = withIdRefPrefix(node[i]);
|
|
4199
|
-
}
|
|
4200
|
-
return node;
|
|
4356
|
+
return node.map((item) => withIdRefPrefix(item));
|
|
4201
4357
|
}
|
|
4202
4358
|
function withIdRefPrefix(schemaNode) {
|
|
4203
4359
|
if (Array.isArray(schemaNode)) {
|
|
@@ -4222,6 +4378,7 @@ var TranslatableString = /* @__PURE__ */ ((TranslatableString2) => {
|
|
|
4222
4378
|
TranslatableString2["AddButton"] = "Add";
|
|
4223
4379
|
TranslatableString2["AddItemButton"] = "Add Item";
|
|
4224
4380
|
TranslatableString2["CopyButton"] = "Copy";
|
|
4381
|
+
TranslatableString2["ExpandButton"] = "Expand Cycle";
|
|
4225
4382
|
TranslatableString2["MoveDownButton"] = "Move down";
|
|
4226
4383
|
TranslatableString2["MoveUpButton"] = "Move up";
|
|
4227
4384
|
TranslatableString2["RemoveButton"] = "Remove";
|
|
@@ -4242,6 +4399,7 @@ var TranslatableString = /* @__PURE__ */ ((TranslatableString2) => {
|
|
|
4242
4399
|
TranslatableString2["TitleOptionPrefix"] = "%1 option %2";
|
|
4243
4400
|
TranslatableString2["KeyLabel"] = "%1 Key";
|
|
4244
4401
|
TranslatableString2["DeprecatedLabel"] = "%1 (deprecated)";
|
|
4402
|
+
TranslatableString2["CycleDetected"] = 'Circular reference ($ref cycle) detected for field "%1". You may choose to expand to the next cycle break';
|
|
4245
4403
|
TranslatableString2["InvalidObjectField"] = 'Invalid "%1" object field configuration: _%2_.';
|
|
4246
4404
|
TranslatableString2["UnsupportedField"] = "Unsupported field schema.";
|
|
4247
4405
|
TranslatableString2["UnsupportedFieldWithId"] = "Unsupported field schema for field `%1`.";
|
|
@@ -4255,7 +4413,7 @@ var TranslatableString = /* @__PURE__ */ ((TranslatableString2) => {
|
|
|
4255
4413
|
var import_forEach = __toESM(require("lodash/forEach"), 1);
|
|
4256
4414
|
|
|
4257
4415
|
// src/parser/ParserValidator.ts
|
|
4258
|
-
var
|
|
4416
|
+
var import_get22 = __toESM(require("lodash/get"), 1);
|
|
4259
4417
|
var ParserValidator = class {
|
|
4260
4418
|
/** Construct the ParserValidator for the given `rootSchema`. This `rootSchema` will be stashed in the `schemaMap`
|
|
4261
4419
|
* first.
|
|
@@ -4281,7 +4439,7 @@ var ParserValidator = class {
|
|
|
4281
4439
|
* @param hash - The hash value at which to map the schema
|
|
4282
4440
|
*/
|
|
4283
4441
|
addSchema(schema, hash) {
|
|
4284
|
-
const key = (0,
|
|
4442
|
+
const key = (0, import_get22.default)(schema, ID_KEY, hash);
|
|
4285
4443
|
const identifiedSchema = { ...schema, [ID_KEY]: key };
|
|
4286
4444
|
const existing = this.schemaMap[key];
|
|
4287
4445
|
if (!existing) {
|
|
@@ -4347,20 +4505,20 @@ var ParserValidator = class {
|
|
|
4347
4505
|
// src/parser/schemaParser.ts
|
|
4348
4506
|
function parseSchema(validator, recurseList, rootSchema, schema) {
|
|
4349
4507
|
const schemas = retrieveSchemaInternal(validator, schema, rootSchema, void 0, true);
|
|
4350
|
-
schemas.forEach((
|
|
4351
|
-
const sameSchemaIndex = recurseList.findIndex((item) => deepEquals_default(item,
|
|
4508
|
+
schemas.forEach((localSchema) => {
|
|
4509
|
+
const sameSchemaIndex = recurseList.findIndex((item) => deepEquals_default(item, localSchema));
|
|
4352
4510
|
if (sameSchemaIndex === -1) {
|
|
4353
|
-
recurseList.push(
|
|
4354
|
-
const allOptions = resolveAnyOrOneOfSchemas(validator,
|
|
4511
|
+
recurseList.push(localSchema);
|
|
4512
|
+
const allOptions = resolveAnyOrOneOfSchemas(validator, localSchema, rootSchema, true);
|
|
4355
4513
|
allOptions.forEach((s) => {
|
|
4356
4514
|
if (PROPERTIES_KEY in s && s[PROPERTIES_KEY]) {
|
|
4357
|
-
(0, import_forEach.default)(
|
|
4515
|
+
(0, import_forEach.default)(localSchema[PROPERTIES_KEY], (value) => {
|
|
4358
4516
|
parseSchema(validator, recurseList, rootSchema, value);
|
|
4359
4517
|
});
|
|
4360
4518
|
}
|
|
4361
4519
|
});
|
|
4362
|
-
if (ITEMS_KEY in
|
|
4363
|
-
parseSchema(validator, recurseList, rootSchema,
|
|
4520
|
+
if (ITEMS_KEY in localSchema && !Array.isArray(localSchema.items) && typeof localSchema.items !== "boolean") {
|
|
4521
|
+
parseSchema(validator, recurseList, rootSchema, localSchema.items);
|
|
4364
4522
|
}
|
|
4365
4523
|
}
|
|
4366
4524
|
});
|