@rjsf/utils 6.5.2 → 6.6.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.
Files changed (146) hide show
  1. package/dist/index.cjs +628 -441
  2. package/dist/index.cjs.map +4 -4
  3. package/dist/utils.esm.js +624 -437
  4. package/dist/utils.esm.js.map +4 -4
  5. package/dist/utils.umd.js +632 -445
  6. package/lib/ErrorSchemaBuilder.js.map +1 -1
  7. package/lib/canExpand.js.map +1 -1
  8. package/lib/constIsAjvDataReference.js +1 -1
  9. package/lib/constIsAjvDataReference.js.map +1 -1
  10. package/lib/createSchemaUtils.js +3 -3
  11. package/lib/createSchemaUtils.js.map +1 -1
  12. package/lib/enumOptionSelectedValue.js.map +1 -1
  13. package/lib/enumOptionValueDecoder.js.map +1 -1
  14. package/lib/enumOptionsDeselectValue.js +1 -1
  15. package/lib/enumOptionsDeselectValue.js.map +1 -1
  16. package/lib/enumOptionsIndexForValue.js.map +1 -1
  17. package/lib/enumOptionsIsSelected.js.map +1 -1
  18. package/lib/enumOptionsSelectValue.js +1 -1
  19. package/lib/enumOptionsSelectValue.js.map +1 -1
  20. package/lib/enumOptionsValueForIndex.js +2 -2
  21. package/lib/enumOptionsValueForIndex.js.map +1 -1
  22. package/lib/enums.d.ts +2 -0
  23. package/lib/enums.js +2 -0
  24. package/lib/enums.js.map +1 -1
  25. package/lib/findSchemaDefinition.js +4 -4
  26. package/lib/findSchemaDefinition.js.map +1 -1
  27. package/lib/getChangedFields.js +3 -3
  28. package/lib/getChangedFields.js.map +1 -1
  29. package/lib/getDiscriminatorFieldFromSchema.js.map +1 -1
  30. package/lib/getOptionMatchingSimpleDiscriminator.js.map +1 -1
  31. package/lib/getTestIds.d.ts +1 -1
  32. package/lib/getTestIds.js +4 -3
  33. package/lib/getTestIds.js.map +1 -1
  34. package/lib/getWidget.js +1 -1
  35. package/lib/getWidget.js.map +1 -1
  36. package/lib/idGenerators.js.map +1 -1
  37. package/lib/index.d.ts +6 -6
  38. package/lib/index.js +6 -6
  39. package/lib/index.js.map +1 -1
  40. package/lib/isFormDataAvailable.js +1 -1
  41. package/lib/isFormDataAvailable.js.map +1 -1
  42. package/lib/isRootSchema.js +1 -1
  43. package/lib/isRootSchema.js.map +1 -1
  44. package/lib/jsonSchemaAugmentation.d.ts +19 -0
  45. package/lib/jsonSchemaAugmentation.js +2 -0
  46. package/lib/jsonSchemaAugmentation.js.map +1 -0
  47. package/lib/mergeDefaultsWithFormData.js +2 -2
  48. package/lib/mergeDefaultsWithFormData.js.map +1 -1
  49. package/lib/parser/ParserValidator.js +1 -1
  50. package/lib/parser/ParserValidator.js.map +1 -1
  51. package/lib/parser/index.d.ts +1 -1
  52. package/lib/parser/index.js.map +1 -1
  53. package/lib/parser/schemaParser.js +2 -2
  54. package/lib/parser/schemaParser.js.map +1 -1
  55. package/lib/removeOptionalEmptyObjects.d.ts +2 -0
  56. package/lib/removeOptionalEmptyObjects.js +8 -29
  57. package/lib/removeOptionalEmptyObjects.js.map +1 -1
  58. package/lib/schema/findFieldInSchema.d.ts +2 -2
  59. package/lib/schema/findFieldInSchema.js +7 -6
  60. package/lib/schema/findFieldInSchema.js.map +1 -1
  61. package/lib/schema/findSelectedOptionInXxxOf.js +1 -1
  62. package/lib/schema/findSelectedOptionInXxxOf.js.map +1 -1
  63. package/lib/schema/getClosestMatchingOption.js +3 -3
  64. package/lib/schema/getClosestMatchingOption.js.map +1 -1
  65. package/lib/schema/getDefaultFormState.d.ts +4 -4
  66. package/lib/schema/getDefaultFormState.js +17 -22
  67. package/lib/schema/getDefaultFormState.js.map +1 -1
  68. package/lib/schema/getFromSchema.d.ts +3 -3
  69. package/lib/schema/getFromSchema.js +3 -3
  70. package/lib/schema/getFromSchema.js.map +1 -1
  71. package/lib/schema/index.d.ts +4 -4
  72. package/lib/schema/index.js +4 -4
  73. package/lib/schema/index.js.map +1 -1
  74. package/lib/schema/isMultiSelect.js.map +1 -1
  75. package/lib/schema/omitExtraData.d.ts +18 -8
  76. package/lib/schema/omitExtraData.js +352 -16
  77. package/lib/schema/omitExtraData.js.map +1 -1
  78. package/lib/schema/retrieveSchema.d.ts +15 -0
  79. package/lib/schema/retrieveSchema.js +36 -13
  80. package/lib/schema/retrieveSchema.js.map +1 -1
  81. package/lib/schema/sanitizeDataForNewSchema.js.map +1 -1
  82. package/lib/schema/shallowAllOfMerge.d.ts +11 -0
  83. package/lib/schema/shallowAllOfMerge.js +18 -0
  84. package/lib/schema/shallowAllOfMerge.js.map +1 -0
  85. package/lib/schema/toPathSchema.d.ts +1 -0
  86. package/lib/schema/toPathSchema.js +2 -1
  87. package/lib/schema/toPathSchema.js.map +1 -1
  88. package/lib/shouldRenderOptionalField.js +1 -1
  89. package/lib/shouldRenderOptionalField.js.map +1 -1
  90. package/lib/toErrorSchema.js.map +1 -1
  91. package/lib/tsconfig.tsbuildinfo +1 -1
  92. package/lib/types.d.ts +17 -5
  93. package/lib/types.js +1 -1
  94. package/lib/types.js.map +1 -1
  95. package/lib/useFileWidgetProps.d.ts +1 -1
  96. package/lib/useFileWidgetProps.js +9 -10
  97. package/lib/useFileWidgetProps.js.map +1 -1
  98. package/lib/withIdRefPrefix.js +1 -1
  99. package/lib/withIdRefPrefix.js.map +1 -1
  100. package/package.json +11 -11
  101. package/src/ErrorSchemaBuilder.ts +1 -1
  102. package/src/canExpand.ts +1 -1
  103. package/src/constIsAjvDataReference.ts +3 -2
  104. package/src/createSchemaUtils.ts +22 -20
  105. package/src/enumOptionSelectedValue.ts +1 -1
  106. package/src/enumOptionValueDecoder.ts +1 -1
  107. package/src/enumOptionsDeselectValue.ts +2 -2
  108. package/src/enumOptionsIndexForValue.ts +1 -1
  109. package/src/enumOptionsIsSelected.ts +1 -1
  110. package/src/enumOptionsSelectValue.ts +3 -2
  111. package/src/enumOptionsValueForIndex.ts +2 -2
  112. package/src/enums.ts +2 -0
  113. package/src/findSchemaDefinition.ts +4 -4
  114. package/src/getChangedFields.ts +4 -3
  115. package/src/getDiscriminatorFieldFromSchema.ts +1 -1
  116. package/src/getOptionMatchingSimpleDiscriminator.ts +1 -0
  117. package/src/getTestIds.ts +4 -3
  118. package/src/getWidget.tsx +2 -2
  119. package/src/idGenerators.ts +1 -1
  120. package/src/index.ts +6 -6
  121. package/src/isFormDataAvailable.ts +1 -1
  122. package/src/isRootSchema.ts +1 -1
  123. package/src/jsonSchemaAugmentation.ts +21 -0
  124. package/src/mergeDefaultsWithFormData.ts +4 -3
  125. package/src/parser/ParserValidator.ts +1 -1
  126. package/src/parser/index.ts +1 -1
  127. package/src/parser/schemaParser.ts +3 -3
  128. package/src/removeOptionalEmptyObjects.ts +8 -30
  129. package/src/schema/findFieldInSchema.ts +10 -8
  130. package/src/schema/findSelectedOptionInXxxOf.ts +1 -1
  131. package/src/schema/getClosestMatchingOption.ts +4 -4
  132. package/src/schema/getDefaultFormState.ts +18 -24
  133. package/src/schema/getFromSchema.ts +15 -8
  134. package/src/schema/index.ts +5 -3
  135. package/src/schema/isMultiSelect.ts +0 -1
  136. package/src/schema/omitExtraData.ts +398 -19
  137. package/src/schema/retrieveSchema.ts +41 -15
  138. package/src/schema/sanitizeDataForNewSchema.ts +1 -1
  139. package/src/schema/shallowAllOfMerge.ts +19 -0
  140. package/src/schema/toPathSchema.ts +2 -1
  141. package/src/shouldRenderOptionalField.ts +2 -2
  142. package/src/toErrorSchema.ts +1 -1
  143. package/src/tsconfig.json +0 -1
  144. package/src/types.ts +18 -5
  145. package/src/useFileWidgetProps.ts +9 -10
  146. package/src/withIdRefPrefix.ts +2 -1
package/dist/index.cjs CHANGED
@@ -132,6 +132,7 @@ __export(index_exports, {
132
132
  isObject: () => isObject,
133
133
  isRootSchema: () => isRootSchema,
134
134
  isSelect: () => isSelect,
135
+ isValueEmpty: () => isValueEmpty,
135
136
  labelValue: () => labelValue,
136
137
  localToUTC: () => localToUTC,
137
138
  lookupFromFormContext: () => lookupFromFormContext,
@@ -146,6 +147,7 @@ __export(index_exports, {
146
147
  pad: () => pad,
147
148
  parseDateString: () => parseDateString,
148
149
  rangeSpec: () => rangeSpec,
150
+ relaxOptionsForScoring: () => relaxOptionsForScoring,
149
151
  removeOptionalEmptyObjects: () => removeOptionalEmptyObjects,
150
152
  replaceStringParameters: () => replaceStringParameters,
151
153
  resolveUiSchema: () => resolveUiSchema,
@@ -320,6 +322,9 @@ function createErrorHandler(formData) {
320
322
  return handler;
321
323
  }
322
324
 
325
+ // src/createSchemaUtils.ts
326
+ var import_get17 = __toESM(require("lodash/get"), 1);
327
+
323
328
  // src/deepEquals.ts
324
329
  var import_fast_equals = require("fast-equals");
325
330
  var deepEquals = (0, import_fast_equals.createCustomEqual)({
@@ -332,32 +337,13 @@ var deepEquals = (0, import_fast_equals.createCustomEqual)({
332
337
  });
333
338
  var deepEquals_default = deepEquals;
334
339
 
335
- // src/schema/findFieldInSchema.ts
336
- var import_get8 = __toESM(require("lodash/get"), 1);
337
- var import_has3 = __toESM(require("lodash/has"), 1);
338
-
339
- // src/schema/findSelectedOptionInXxxOf.ts
340
- var import_get6 = __toESM(require("lodash/get"), 1);
341
-
342
- // src/schema/retrieveSchema.ts
343
- var import_get5 = __toESM(require("lodash/get"), 1);
344
- var import_set = __toESM(require("lodash/set"), 1);
345
- var import_times = __toESM(require("lodash/times"), 1);
346
- var import_transform = __toESM(require("lodash/transform"), 1);
347
- var import_merge = __toESM(require("lodash/merge"), 1);
348
- var import_flattenDeep = __toESM(require("lodash/flattenDeep"), 1);
349
- var import_uniq = __toESM(require("lodash/uniq"), 1);
350
- var import_isEmpty2 = __toESM(require("lodash/isEmpty"), 1);
351
- var import_json_schema_merge = require("@x0k/json-schema-merge");
352
- var import_array = require("@x0k/json-schema-merge/lib/array");
353
-
354
340
  // src/findSchemaDefinition.ts
355
- var import_jsonpointer = __toESM(require("jsonpointer"), 1);
356
- var import_omit = __toESM(require("lodash/omit"), 1);
357
- var import_isObject3 = __toESM(require("lodash/isObject"), 1);
358
- var import_isEmpty = __toESM(require("lodash/isEmpty"), 1);
359
341
  var import_fast_uri = __toESM(require("fast-uri"), 1);
342
+ var import_jsonpointer = __toESM(require("jsonpointer"), 1);
360
343
  var import_get = __toESM(require("lodash/get"), 1);
344
+ var import_isEmpty = __toESM(require("lodash/isEmpty"), 1);
345
+ var import_isObject3 = __toESM(require("lodash/isObject"), 1);
346
+ var import_omit = __toESM(require("lodash/omit"), 1);
361
347
  function findEmbeddedSchemaRecursive(schema, ref) {
362
348
  if (ID_KEY in schema && import_fast_uri.default.equal(schema[ID_KEY], ref)) {
363
349
  return schema;
@@ -458,6 +444,13 @@ function findSchemaDefinition($ref, rootSchema = {}, baseURI = (0, import_get.de
458
444
  return findSchemaDefinitionRecursive($ref, rootSchema, recurseList, baseURI);
459
445
  }
460
446
 
447
+ // src/schema/findFieldInSchema.ts
448
+ var import_get8 = __toESM(require("lodash/get"), 1);
449
+ var import_has3 = __toESM(require("lodash/has"), 1);
450
+
451
+ // src/schema/findSelectedOptionInXxxOf.ts
452
+ var import_get6 = __toESM(require("lodash/get"), 1);
453
+
461
454
  // src/getDiscriminatorFieldFromSchema.ts
462
455
  var import_get2 = __toESM(require("lodash/get"), 1);
463
456
  var import_isString = __toESM(require("lodash/isString"), 1);
@@ -472,6 +465,16 @@ function getDiscriminatorFieldFromSchema(schema) {
472
465
  return discriminator;
473
466
  }
474
467
 
468
+ // src/schema/retrieveSchema.ts
469
+ var import_flattenDeep = __toESM(require("lodash/flattenDeep"), 1);
470
+ var import_get5 = __toESM(require("lodash/get"), 1);
471
+ var import_isEmpty2 = __toESM(require("lodash/isEmpty"), 1);
472
+ var import_merge = __toESM(require("lodash/merge"), 1);
473
+ var import_set = __toESM(require("lodash/set"), 1);
474
+ var import_times = __toESM(require("lodash/times"), 1);
475
+ var import_transform = __toESM(require("lodash/transform"), 1);
476
+ var import_uniq = __toESM(require("lodash/uniq"), 1);
477
+
475
478
  // src/guessType.ts
476
479
  function guessType(value) {
477
480
  if (Array.isArray(value)) {
@@ -613,6 +616,16 @@ function getFirstMatchingOption(validator, formData, options, rootSchema, discri
613
616
  return 0;
614
617
  }
615
618
 
619
+ // src/schema/shallowAllOfMerge.ts
620
+ var import_json_schema_merge = require("@x0k/json-schema-merge");
621
+ var import_array = require("@x0k/json-schema-merge/lib/array");
622
+ var { compareSchemaDefinitions, compareSchemaValues } = (0, import_json_schema_merge.createComparator)();
623
+ var { mergeArrayOfSchemaDefinitions } = (0, import_json_schema_merge.createMerger)({
624
+ intersectJson: (0, import_array.createIntersector)(compareSchemaValues),
625
+ deduplicateJsonSchemaDef: (0, import_array.createDeduplicator)(compareSchemaDefinitions)
626
+ });
627
+ var shallowAllOfMerge_default = (0, import_json_schema_merge.createShallowAllOfMerge)(mergeArrayOfSchemaDefinitions);
628
+
616
629
  // src/schema/retrieveSchema.ts
617
630
  function retrieveSchema(validator, schema, rootSchema = {}, rawFormData, experimental_customMergeAllOf, resolveAnyOfOrOneOfRefs = false) {
618
631
  return retrieveSchemaInternal(
@@ -899,14 +912,8 @@ function stubExistingAdditionalProperties(validator, theSchema, rootSchema, aFor
899
912
  });
900
913
  return schema;
901
914
  }
902
- var { compareSchemaDefinitions, compareSchemaValues } = (0, import_json_schema_merge.createComparator)();
903
- var { mergeArrayOfSchemaDefinitions } = (0, import_json_schema_merge.createMerger)({
904
- intersectJson: (0, import_array.createIntersector)(compareSchemaValues),
905
- deduplicateJsonSchemaDef: (0, import_array.createDeduplicator)(compareSchemaDefinitions)
906
- });
907
- var shallowAllOfMerge = (0, import_json_schema_merge.createShallowAllOfMerge)(mergeArrayOfSchemaDefinitions);
908
915
  function mergeAllOf(schema) {
909
- return shallowAllOfMerge(schema);
916
+ return shallowAllOfMerge_default(schema);
910
917
  }
911
918
  function retrieveSchemaInternal(validator, schema, rootSchema, rawFormData, expandAllBranches = false, recurseList = [], experimental_customMergeAllOf, resolveAnyOfOrOneOfRefs) {
912
919
  if (!isObject(schema)) {
@@ -1013,12 +1020,23 @@ function resolveAnyOrOneOfSchemas(validator, schema, rootSchema, expandAllBranch
1013
1020
  });
1014
1021
  const option = getFirstMatchingOption(validator, formData, anyOrOneOf, rootSchema, discriminator);
1015
1022
  if (expandAllBranches) {
1023
+ const relaxed = relaxOptionsForScoring(anyOrOneOf, false, rootSchema);
1024
+ getFirstMatchingOption(validator, formData, relaxed, rootSchema, discriminator);
1016
1025
  return anyOrOneOf.map((item) => mergeSchemas(remaining, item));
1017
1026
  }
1018
1027
  schema = mergeSchemas(remaining, anyOrOneOf[option]);
1019
1028
  }
1020
1029
  return [schema];
1021
1030
  }
1031
+ function relaxOptionsForScoring(options, resolveRefs = false, rootSchema) {
1032
+ return options.map((d) => {
1033
+ if (!isObject(d)) {
1034
+ return d ? {} : { not: {} };
1035
+ }
1036
+ const schema = resolveRefs && rootSchema ? resolveAllReferences(d, rootSchema, []) : d;
1037
+ return schema.additionalProperties === false ? { ...schema, additionalProperties: true } : schema;
1038
+ });
1039
+ }
1022
1040
  function resolveDependencies(validator, schema, rootSchema, expandAllBranches, recurseList, formData, experimental_customMergeAllOf) {
1023
1041
  const { dependencies, ...remainingSchema } = schema;
1024
1042
  const resolvedSchemas = resolveAnyOrOneOfSchemas(
@@ -1200,9 +1218,9 @@ function getFromSchemaInternal(validator, rootSchema, schema, path, experimental
1200
1218
  if ((0, import_isEmpty3.default)(path)) {
1201
1219
  return fieldSchema;
1202
1220
  }
1203
- const pathList = Array.isArray(path) ? path : path.split(".");
1221
+ const pathList = Array.isArray(path) ? [...path] : path.split(".");
1204
1222
  const [part, ...nestedPath] = pathList;
1205
- if (part && (0, import_has2.default)(fieldSchema, part)) {
1223
+ if (part !== void 0 && part !== "" && (0, import_has2.default)(fieldSchema, part)) {
1206
1224
  fieldSchema = (0, import_get7.default)(fieldSchema, part);
1207
1225
  return getFromSchemaInternal(
1208
1226
  validator,
@@ -1228,6 +1246,7 @@ function findFieldInSchema(validator, rootSchema, schema, path, formData = {}, e
1228
1246
  const pathList = Array.isArray(path) ? [...path] : path.split(".");
1229
1247
  let parentField = schema;
1230
1248
  const fieldName = pathList.pop();
1249
+ const fieldNameKey = String(fieldName);
1231
1250
  if (pathList.length) {
1232
1251
  pathList.forEach((subPath) => {
1233
1252
  parentField = getFromSchema(
@@ -1243,7 +1262,7 @@ function findFieldInSchema(validator, rootSchema, schema, path, formData = {}, e
1243
1262
  validator,
1244
1263
  rootSchema,
1245
1264
  parentField,
1246
- fieldName,
1265
+ fieldNameKey,
1247
1266
  ONE_OF_KEY,
1248
1267
  (0, import_get8.default)(formData, subPath),
1249
1268
  experimental_customMergeAllOf
@@ -1253,7 +1272,7 @@ function findFieldInSchema(validator, rootSchema, schema, path, formData = {}, e
1253
1272
  validator,
1254
1273
  rootSchema,
1255
1274
  parentField,
1256
- fieldName,
1275
+ fieldNameKey,
1257
1276
  ANY_OF_KEY,
1258
1277
  (0, import_get8.default)(formData, subPath),
1259
1278
  experimental_customMergeAllOf
@@ -1266,7 +1285,7 @@ function findFieldInSchema(validator, rootSchema, schema, path, formData = {}, e
1266
1285
  validator,
1267
1286
  rootSchema,
1268
1287
  parentField,
1269
- fieldName,
1288
+ fieldNameKey,
1270
1289
  ONE_OF_KEY,
1271
1290
  formData,
1272
1291
  experimental_customMergeAllOf
@@ -1276,7 +1295,7 @@ function findFieldInSchema(validator, rootSchema, schema, path, formData = {}, e
1276
1295
  validator,
1277
1296
  rootSchema,
1278
1297
  parentField,
1279
- fieldName,
1298
+ fieldNameKey,
1280
1299
  ANY_OF_KEY,
1281
1300
  formData,
1282
1301
  experimental_customMergeAllOf
@@ -1303,15 +1322,11 @@ function findFieldInSchema(validator, rootSchema, schema, path, formData = {}, e
1303
1322
  );
1304
1323
  let isRequired;
1305
1324
  if (field && Array.isArray(requiredArray)) {
1306
- isRequired = requiredArray.includes(fieldName);
1325
+ isRequired = requiredArray.includes(fieldNameKey);
1307
1326
  }
1308
1327
  return { field, isRequired };
1309
1328
  }
1310
1329
 
1311
- // src/schema/getDefaultFormState.ts
1312
- var import_get12 = __toESM(require("lodash/get"), 1);
1313
- var import_isEmpty4 = __toESM(require("lodash/isEmpty"), 1);
1314
-
1315
1330
  // src/schema/getClosestMatchingOption.ts
1316
1331
  var import_get9 = __toESM(require("lodash/get"), 1);
1317
1332
  var import_has4 = __toESM(require("lodash/has"), 1);
@@ -1436,6 +1451,23 @@ function getClosestMatchingOption(validator, rootSchema, formData, options, sele
1436
1451
  return bestIndex;
1437
1452
  }
1438
1453
 
1454
+ // src/schema/getDefaultFormState.ts
1455
+ var import_get12 = __toESM(require("lodash/get"), 1);
1456
+ var import_isEmpty4 = __toESM(require("lodash/isEmpty"), 1);
1457
+
1458
+ // src/constIsAjvDataReference.ts
1459
+ var import_isString3 = __toESM(require("lodash/isString"), 1);
1460
+ function constIsAjvDataReference(schema) {
1461
+ const schemaConst = schema[CONST_KEY];
1462
+ const schemaType = getSchemaType(schema);
1463
+ return isObject(schemaConst) && (0, import_isString3.default)(schemaConst?.$data) && schemaType !== "object" && schemaType !== "array";
1464
+ }
1465
+
1466
+ // src/isConstant.ts
1467
+ function isConstant(schema) {
1468
+ return Array.isArray(schema.enum) && schema.enum.length === 1 || CONST_KEY in schema;
1469
+ }
1470
+
1439
1471
  // src/isFixedItems.ts
1440
1472
  function isFixedItems(schema) {
1441
1473
  return Array.isArray(schema.items) && schema.items.length > 0 && schema.items.every((item) => isObject(item));
@@ -1473,7 +1505,7 @@ function mergeDefaultsWithFormData(defaults, formData, mergeExtraArrayDefaults =
1473
1505
  const keyExistsInDefaults = isObject(defaults) && key in defaults;
1474
1506
  const keyExistsInFormData = key in formData;
1475
1507
  const keyDefault = (0, import_get10.default)(defaults, key) ?? {};
1476
- const defaultValueIsNestedObject = keyExistsInDefaults && Object.entries(keyDefault).some(([, v]) => isObject(v));
1508
+ const defaultValueIsNestedObject = keyExistsInDefaults && isObject(keyDefault) && Object.values(keyDefault).some((v) => isObject(v));
1477
1509
  const keyDefaultIsObject = keyExistsInDefaults && isObject((0, import_get10.default)(defaults, key));
1478
1510
  const keyHasFormDataObject = keyExistsInFormData && isObject(keyValue);
1479
1511
  if (keyDefaultIsObject && keyHasFormDataObject && !defaultValueIsNestedObject) {
@@ -1528,40 +1560,6 @@ function mergeObjects(obj1, obj2, concatArrays = false) {
1528
1560
  );
1529
1561
  }
1530
1562
 
1531
- // src/isConstant.ts
1532
- function isConstant(schema) {
1533
- return Array.isArray(schema.enum) && schema.enum.length === 1 || CONST_KEY in schema;
1534
- }
1535
-
1536
- // src/schema/isSelect.ts
1537
- function isSelect(validator, theSchema, rootSchema = {}, experimental_customMergeAllOf) {
1538
- const schema = retrieveSchema(validator, theSchema, rootSchema, void 0, experimental_customMergeAllOf);
1539
- const altSchemas = schema.oneOf || schema.anyOf;
1540
- if (Array.isArray(schema.enum)) {
1541
- return true;
1542
- }
1543
- if (Array.isArray(altSchemas)) {
1544
- return altSchemas.every((altSchemas2) => typeof altSchemas2 !== "boolean" && isConstant(altSchemas2));
1545
- }
1546
- return false;
1547
- }
1548
-
1549
- // src/schema/isMultiSelect.ts
1550
- function isMultiSelect(validator, schema, rootSchema, experimental_customMergeAllOf) {
1551
- if (!schema.uniqueItems || !schema.items || typeof schema.items === "boolean") {
1552
- return false;
1553
- }
1554
- return isSelect(validator, schema.items, rootSchema, experimental_customMergeAllOf);
1555
- }
1556
-
1557
- // src/constIsAjvDataReference.ts
1558
- var import_isString3 = __toESM(require("lodash/isString"), 1);
1559
- function constIsAjvDataReference(schema) {
1560
- const schemaConst = schema[CONST_KEY];
1561
- const schemaType = getSchemaType(schema);
1562
- return isObject(schemaConst) && (0, import_isString3.default)(schemaConst?.$data) && schemaType !== "object" && schemaType !== "array";
1563
- }
1564
-
1565
1563
  // src/optionsList.ts
1566
1564
  var import_get11 = __toESM(require("lodash/get"), 1);
1567
1565
 
@@ -1642,6 +1640,27 @@ function optionsList(schema, uiSchema) {
1642
1640
  });
1643
1641
  }
1644
1642
 
1643
+ // src/schema/isSelect.ts
1644
+ function isSelect(validator, theSchema, rootSchema = {}, experimental_customMergeAllOf) {
1645
+ const schema = retrieveSchema(validator, theSchema, rootSchema, void 0, experimental_customMergeAllOf);
1646
+ const altSchemas = schema.oneOf || schema.anyOf;
1647
+ if (Array.isArray(schema.enum)) {
1648
+ return true;
1649
+ }
1650
+ if (Array.isArray(altSchemas)) {
1651
+ return altSchemas.every((altSchemas2) => typeof altSchemas2 !== "boolean" && isConstant(altSchemas2));
1652
+ }
1653
+ return false;
1654
+ }
1655
+
1656
+ // src/schema/isMultiSelect.ts
1657
+ function isMultiSelect(validator, schema, rootSchema, experimental_customMergeAllOf) {
1658
+ if (!schema.uniqueItems || !schema.items || typeof schema.items === "boolean") {
1659
+ return false;
1660
+ }
1661
+ return isSelect(validator, schema.items, rootSchema, experimental_customMergeAllOf);
1662
+ }
1663
+
1645
1664
  // src/schema/getDefaultFormState.ts
1646
1665
  var PRIMITIVE_TYPES = ["string", "number", "integer", "boolean", "null"];
1647
1666
  function getInnerSchemaForArrayItem(schema, additionalItems = 0 /* Ignore */, idx = -1) {
@@ -2001,14 +2020,11 @@ function getArrayDefaults(validator, rawSchema, {
2001
2020
  defaults = mergeDefaultsWithFormData(defaults, itemDefaults, mergeExtraDefaults);
2002
2021
  }
2003
2022
  }
2004
- const hasConst = isObject(schema) && CONST_KEY in schema && experimental_defaultFormStateBehavior?.constAsDefaults !== "never";
2005
- if (hasConst === false) {
2006
- if (neverPopulate) {
2007
- return defaults ?? emptyDefault;
2008
- }
2009
- if (ignoreMinItemsFlagSet && !required) {
2010
- return defaults ? defaults : void 0;
2011
- }
2023
+ if (neverPopulate) {
2024
+ return defaults ?? emptyDefault;
2025
+ }
2026
+ if (ignoreMinItemsFlagSet && !required) {
2027
+ return defaults ? defaults : void 0;
2012
2028
  }
2013
2029
  let arrayDefault;
2014
2030
  const defaultsLength = Array.isArray(defaults) ? defaults.length : 0;
@@ -2138,210 +2154,269 @@ function getDisplayLabel(validator, schema, uiSchema = {}, rootSchema, globalOpt
2138
2154
  }
2139
2155
 
2140
2156
  // src/schema/omitExtraData.ts
2141
- var import_pick = __toESM(require("lodash/pick"), 1);
2142
- var import_isEmpty5 = __toESM(require("lodash/isEmpty"), 1);
2143
- var import_get15 = __toESM(require("lodash/get"), 1);
2144
-
2145
- // src/schema/toPathSchema.ts
2146
2157
  var import_get14 = __toESM(require("lodash/get"), 1);
2147
- var import_isObject11 = __toESM(require("lodash/isObject"), 1);
2148
- var import_set2 = __toESM(require("lodash/set"), 1);
2149
- function toPathSchemaInternal(validator, schema, name, rootSchema, formData, _recurseList = [], experimental_customMergeAllOf) {
2150
- if (REF_KEY in schema || DEPENDENCIES_KEY in schema || ALL_OF_KEY in schema || IF_KEY in schema) {
2151
- const _schema = retrieveSchema(validator, schema, rootSchema, formData, experimental_customMergeAllOf);
2152
- const sameSchemaIndex = _recurseList.findIndex((item) => deepEquals_default(item, _schema));
2153
- if (sameSchemaIndex === -1) {
2154
- return toPathSchemaInternal(
2155
- validator,
2156
- _schema,
2157
- name,
2158
- rootSchema,
2159
- formData,
2160
- _recurseList.concat(_schema),
2161
- experimental_customMergeAllOf
2162
- );
2163
- }
2158
+ var import_isEmpty5 = __toESM(require("lodash/isEmpty"), 1);
2159
+ var import_isNil2 = __toESM(require("lodash/isNil"), 1);
2160
+ var import_pick = __toESM(require("lodash/pick"), 1);
2161
+ function getUsedFormData(formData, fields) {
2162
+ if (fields.length === 0 && typeof formData !== "object") {
2163
+ return formData;
2164
2164
  }
2165
- let pathSchema = {
2166
- [NAME_KEY]: name.replace(/^\./, "")
2165
+ const data = (0, import_pick.default)(formData, fields);
2166
+ if (Array.isArray(formData)) {
2167
+ return Object.keys(data).map((key) => data[key]);
2168
+ }
2169
+ return data;
2170
+ }
2171
+ function getFieldNames(pathSchema, formData) {
2172
+ const formValueHasData = (value, isLeaf) => typeof value !== "object" || (0, import_isEmpty5.default)(value) || isLeaf && !(0, import_isEmpty5.default)(value);
2173
+ const getAllPaths = (_obj, acc = [], paths = [[]]) => {
2174
+ const objKeys = Object.keys(_obj);
2175
+ objKeys.forEach((key) => {
2176
+ const data = _obj[key];
2177
+ if (typeof data === "object") {
2178
+ const newPaths = paths.map((path) => [...path, key]);
2179
+ if (data[RJSF_ADDITIONAL_PROPERTIES_FLAG] && data[NAME_KEY] !== "") {
2180
+ acc.push(data[NAME_KEY]);
2181
+ } else {
2182
+ getAllPaths(data, acc, newPaths);
2183
+ }
2184
+ } else if (key === NAME_KEY && data !== "") {
2185
+ paths.forEach((path) => {
2186
+ const formValue = (0, import_get14.default)(formData, path);
2187
+ const isLeaf = objKeys.length === 1;
2188
+ if (formValueHasData(formValue, isLeaf) || Array.isArray(formValue) && formValue.every((val) => formValueHasData(val, isLeaf))) {
2189
+ acc.push(path);
2190
+ }
2191
+ });
2192
+ }
2193
+ });
2194
+ return acc;
2167
2195
  };
2168
- if (ONE_OF_KEY in schema || ANY_OF_KEY in schema) {
2169
- const xxxOf = ONE_OF_KEY in schema ? schema.oneOf : schema.anyOf;
2170
- const discriminator = getDiscriminatorFieldFromSchema(schema);
2171
- const index = getClosestMatchingOption(
2196
+ return getAllPaths(pathSchema);
2197
+ }
2198
+ function isValueEmpty(value) {
2199
+ if ((0, import_isNil2.default)(value) || value === "") {
2200
+ return true;
2201
+ }
2202
+ if (Array.isArray(value)) {
2203
+ return value.length === 0;
2204
+ }
2205
+ if (isObject(value)) {
2206
+ return Object.values(value).every(isValueEmpty);
2207
+ }
2208
+ return false;
2209
+ }
2210
+ function doMergeAllOf(schema, experimental_customMergeAllOf) {
2211
+ return experimental_customMergeAllOf ? experimental_customMergeAllOf(schema) : shallowAllOfMerge_default(schema);
2212
+ }
2213
+ function omitExtraData(validator, schema, rootSchema = {}, formData, experimental_customMergeAllOf) {
2214
+ function isObjectValue(value) {
2215
+ return isObject(value);
2216
+ }
2217
+ function isSchemaObj(schemaDef) {
2218
+ return isObject(schemaDef);
2219
+ }
2220
+ function handleObject(schema2, source, target) {
2221
+ const { properties, additionalProperties, patternProperties, propertyNames } = schema2;
2222
+ const requiredSet = new Set(schema2.required ?? []);
2223
+ function setProperty(key, schemaDef, value, required = false) {
2224
+ const v = omit3(schemaDef, value, target[key]);
2225
+ if (!required && isObject(v)) {
2226
+ let sd = isSchemaObj(schemaDef) ? schemaDef : {};
2227
+ if (sd.$ref !== void 0) {
2228
+ sd = findSchemaDefinition(sd.$ref, rootSchema);
2229
+ }
2230
+ const innerRequired = new Set(sd.required ?? []);
2231
+ const shouldDrop = Object.entries(v).every(
2232
+ ([k, val]) => !innerRequired.has(k) && isValueEmpty(val)
2233
+ );
2234
+ if (shouldDrop) {
2235
+ return;
2236
+ }
2237
+ }
2238
+ if (v !== void 0) {
2239
+ target[key] = v;
2240
+ }
2241
+ }
2242
+ if (properties !== void 0) {
2243
+ for (const [key, schemaDef] of Object.entries(properties)) {
2244
+ setProperty(key, schemaDef, source[key], requiredSet.has(key));
2245
+ }
2246
+ }
2247
+ let patternPropertiesRest;
2248
+ if (patternProperties !== void 0) {
2249
+ patternPropertiesRest = [];
2250
+ const patterns = Object.entries(patternProperties).map(([pattern, schemaDef]) => [
2251
+ new RegExp(pattern),
2252
+ schemaDef
2253
+ ]);
2254
+ const knownProperties = new Set(Object.keys(properties ?? {}));
2255
+ for (const [key, value] of Object.entries(source)) {
2256
+ if (knownProperties.has(key)) {
2257
+ continue;
2258
+ }
2259
+ const matched = patterns.find(([re]) => re.test(key));
2260
+ if (matched === void 0) {
2261
+ patternPropertiesRest.push(key);
2262
+ continue;
2263
+ }
2264
+ setProperty(key, matched[1], value);
2265
+ }
2266
+ }
2267
+ if (additionalProperties !== void 0 && additionalProperties !== false) {
2268
+ const addlSchema = additionalProperties;
2269
+ if (patternPropertiesRest !== void 0) {
2270
+ for (const key of patternPropertiesRest) {
2271
+ setProperty(key, addlSchema, source[key]);
2272
+ }
2273
+ } else {
2274
+ const knownProperties = new Set(Object.keys(properties ?? {}));
2275
+ for (const [key, value] of Object.entries(source)) {
2276
+ if (knownProperties.has(key)) {
2277
+ continue;
2278
+ }
2279
+ setProperty(key, addlSchema, value);
2280
+ }
2281
+ }
2282
+ }
2283
+ if (propertyNames !== void 0) {
2284
+ for (const [key, value] of Object.entries(source)) {
2285
+ target[key] = value;
2286
+ }
2287
+ }
2288
+ return target;
2289
+ }
2290
+ function handleArray(schema2, source, target) {
2291
+ const { items, additionalItems } = schema2;
2292
+ if (items !== void 0) {
2293
+ if (Array.isArray(items)) {
2294
+ for (let i = 0; i < items.length; i++) {
2295
+ target.push(omit3(items[i], source[i]));
2296
+ }
2297
+ } else {
2298
+ for (let i = 0; i < source.length; i++) {
2299
+ target.push(omit3(items, source[i]));
2300
+ }
2301
+ }
2302
+ }
2303
+ if (additionalItems) {
2304
+ for (let i = target.length; i < source.length; i++) {
2305
+ target.push(omit3(additionalItems, source[i]));
2306
+ }
2307
+ }
2308
+ return target;
2309
+ }
2310
+ function handleConditions(schema2, source, target) {
2311
+ const { if: condition, then, else: otherwise } = schema2;
2312
+ if (condition === void 0) {
2313
+ return target;
2314
+ }
2315
+ const isThenBranch = isSchemaObj(condition) ? validator.isValid(condition, source, rootSchema) : condition;
2316
+ const branch = isThenBranch ? then : otherwise;
2317
+ return branch === void 0 ? target : omit3(branch, source, target);
2318
+ }
2319
+ function handleOneOf(oneOf, schema2, source, target) {
2320
+ if (!Array.isArray(oneOf) || isSelect(validator, schema2, rootSchema, experimental_customMergeAllOf)) {
2321
+ return target;
2322
+ }
2323
+ const scoringOptions = relaxOptionsForScoring(oneOf, true, rootSchema);
2324
+ const bestIndex = getClosestMatchingOption(
2172
2325
  validator,
2173
2326
  rootSchema,
2174
- formData,
2175
- xxxOf,
2327
+ source,
2328
+ scoringOptions,
2176
2329
  0,
2177
- discriminator,
2330
+ getDiscriminatorFieldFromSchema(schema2),
2178
2331
  experimental_customMergeAllOf
2179
2332
  );
2180
- const _schema = xxxOf[index];
2181
- pathSchema = {
2182
- ...pathSchema,
2183
- ...toPathSchemaInternal(
2184
- validator,
2185
- _schema,
2186
- name,
2187
- rootSchema,
2188
- formData,
2189
- _recurseList,
2190
- experimental_customMergeAllOf
2191
- )
2192
- };
2193
- }
2194
- if (ADDITIONAL_PROPERTIES_KEY in schema && schema[ADDITIONAL_PROPERTIES_KEY] !== false) {
2195
- (0, import_set2.default)(pathSchema, RJSF_ADDITIONAL_PROPERTIES_FLAG, true);
2196
- const additionalSchema = (0, import_isObject11.default)(schema[ADDITIONAL_PROPERTIES_KEY]) ? schema[ADDITIONAL_PROPERTIES_KEY] : {};
2197
- const definedProperties = (0, import_get14.default)(schema, PROPERTIES_KEY, {});
2198
- for (const key of Object.keys(formData ?? {})) {
2199
- if (!(key in definedProperties)) {
2200
- pathSchema[key] = toPathSchemaInternal(
2201
- validator,
2202
- additionalSchema,
2203
- `${name}.${key}`,
2204
- rootSchema,
2205
- (0, import_get14.default)(formData, [key]),
2206
- _recurseList,
2207
- experimental_customMergeAllOf
2208
- );
2333
+ const winning = oneOf[bestIndex];
2334
+ const resolved = isObject(winning) ? resolveAllReferences(winning, rootSchema, []) : scoringOptions[bestIndex];
2335
+ return omit3(resolved, source, target);
2336
+ }
2337
+ function handleAnyOf(schema2, source, target) {
2338
+ const { anyOf } = schema2;
2339
+ if (!Array.isArray(anyOf)) {
2340
+ return target;
2341
+ }
2342
+ if (source === void 0 || Array.isArray(source) && source.length === 0 || isObject(source) && Object.keys(source).length === 0) {
2343
+ for (const branch of anyOf) {
2344
+ target = omit3(branch, source, target);
2209
2345
  }
2346
+ return target;
2210
2347
  }
2348
+ return handleOneOf(anyOf, schema2, source, target);
2211
2349
  }
2212
- if (ITEMS_KEY in schema && Array.isArray(formData)) {
2213
- const { items: schemaItems, additionalItems: schemaAdditionalItems } = schema;
2214
- if (Array.isArray(schemaItems)) {
2215
- formData.forEach((element, i) => {
2216
- if (schemaItems[i]) {
2217
- pathSchema[i] = toPathSchemaInternal(
2218
- validator,
2219
- schemaItems[i],
2220
- `${name}.${i}`,
2221
- rootSchema,
2222
- element,
2223
- _recurseList,
2224
- experimental_customMergeAllOf
2225
- );
2226
- } else if (schemaAdditionalItems) {
2227
- pathSchema[i] = toPathSchemaInternal(
2228
- validator,
2229
- schemaAdditionalItems,
2230
- `${name}.${i}`,
2231
- rootSchema,
2232
- element,
2233
- _recurseList,
2234
- experimental_customMergeAllOf
2235
- );
2236
- } else {
2237
- console.warn(`Unable to generate path schema for "${name}.${i}". No schema defined for it`);
2238
- }
2239
- });
2240
- } else {
2241
- formData.forEach((element, i) => {
2242
- pathSchema[i] = toPathSchemaInternal(
2243
- validator,
2244
- schemaItems,
2245
- `${name}.${i}`,
2246
- rootSchema,
2247
- element,
2248
- _recurseList,
2249
- experimental_customMergeAllOf
2250
- );
2251
- });
2350
+ function handleDependencies(schema2, source, target) {
2351
+ const { dependencies } = schema2;
2352
+ if (dependencies === void 0 || !isObjectValue(source)) {
2353
+ return target;
2252
2354
  }
2253
- } else if (PROPERTIES_KEY in schema) {
2254
- for (const property in schema.properties) {
2255
- const field = (0, import_get14.default)(schema, [PROPERTIES_KEY, property], {});
2256
- pathSchema[property] = toPathSchemaInternal(
2257
- validator,
2258
- field,
2259
- `${name}.${property}`,
2260
- rootSchema,
2261
- // It's possible that formData is not an object -- this can happen if an
2262
- // array item has just been added, but not populated with data yet
2263
- (0, import_get14.default)(formData, [property]),
2264
- _recurseList,
2265
- experimental_customMergeAllOf
2266
- );
2355
+ for (const [key, deps] of Object.entries(dependencies)) {
2356
+ if (!(key in source) || Array.isArray(deps)) {
2357
+ continue;
2358
+ }
2359
+ target = omit3(deps, source, target);
2267
2360
  }
2361
+ return target;
2268
2362
  }
2269
- return pathSchema;
2270
- }
2271
- function toPathSchema(validator, schema, name = "", rootSchema, formData, experimental_customMergeAllOf) {
2272
- return toPathSchemaInternal(validator, schema, name, rootSchema, formData, void 0, experimental_customMergeAllOf);
2273
- }
2274
-
2275
- // src/schema/omitExtraData.ts
2276
- function getUsedFormData(formData, fields) {
2277
- if (fields.length === 0 && typeof formData !== "object") {
2278
- return formData;
2279
- }
2280
- const data = (0, import_pick.default)(formData, fields);
2281
- if (Array.isArray(formData)) {
2282
- return Object.keys(data).map((key) => data[key]);
2283
- }
2284
- return data;
2285
- }
2286
- function getFieldNames(pathSchema, formData) {
2287
- const formValueHasData = (value, isLeaf) => typeof value !== "object" || (0, import_isEmpty5.default)(value) || isLeaf && !(0, import_isEmpty5.default)(value);
2288
- const getAllPaths = (_obj, acc = [], paths = [[]]) => {
2289
- const objKeys = Object.keys(_obj);
2290
- objKeys.forEach((key) => {
2291
- const data = _obj[key];
2292
- if (typeof data === "object") {
2293
- const newPaths = paths.map((path) => [...path, key]);
2294
- if (data[RJSF_ADDITIONAL_PROPERTIES_FLAG] && data[NAME_KEY] !== "") {
2295
- acc.push(data[NAME_KEY]);
2296
- } else {
2297
- getAllPaths(data, acc, newPaths);
2298
- }
2299
- } else if (key === NAME_KEY && data !== "") {
2300
- paths.forEach((path) => {
2301
- const formValue = (0, import_get15.default)(formData, path);
2302
- const isLeaf = objKeys.length === 1;
2303
- if (formValueHasData(formValue, isLeaf) || Array.isArray(formValue) && formValue.every((val) => formValueHasData(val, isLeaf))) {
2304
- acc.push(path);
2305
- }
2306
- });
2363
+ function omit3(schemaDef, source, target) {
2364
+ if (source === void 0 || schemaDef === false) {
2365
+ return void 0;
2366
+ }
2367
+ if (schemaDef === true || (0, import_isEmpty5.default)(schemaDef)) {
2368
+ return source;
2369
+ }
2370
+ let schema2 = schemaDef;
2371
+ const { $ref: ref, allOf } = schema2;
2372
+ if (ref !== void 0) {
2373
+ return omit3(findSchemaDefinition(ref, rootSchema), source, target);
2374
+ }
2375
+ if (allOf) {
2376
+ schema2 = doMergeAllOf(schema2, experimental_customMergeAllOf);
2377
+ }
2378
+ target = handleAnyOf(schema2, source, handleOneOf(schema2.oneOf, schema2, source, target));
2379
+ const type = getSchemaType(schema2);
2380
+ if (type === "object") {
2381
+ if (!isObjectValue(source)) {
2382
+ return void 0;
2307
2383
  }
2308
- });
2309
- return acc;
2310
- };
2311
- return getAllPaths(pathSchema);
2312
- }
2313
- function omitExtraData(validator, schema, rootSchema = {}, formData) {
2314
- const retrievedSchema = retrieveSchema(validator, schema, rootSchema, formData);
2315
- const pathSchema = toPathSchema(validator, retrievedSchema, "", rootSchema, formData);
2316
- const fieldNames = getFieldNames(pathSchema, formData);
2317
- const lodashFieldNames = fieldNames.map(
2318
- (fieldPaths) => Array.isArray(fieldPaths) ? fieldPaths.join(".") : fieldPaths
2319
- );
2320
- return getUsedFormData(formData, lodashFieldNames);
2384
+ target = handleObject(schema2, source, isObjectValue(target) ? target : {});
2385
+ } else if (type === "array") {
2386
+ if (!Array.isArray(source)) {
2387
+ return void 0;
2388
+ }
2389
+ target = handleArray(schema2, source, Array.isArray(target) ? target : []);
2390
+ } else if (target === void 0) {
2391
+ target = source;
2392
+ }
2393
+ return handleDependencies(schema2, source, handleConditions(schema2, source, target));
2394
+ }
2395
+ return omit3(schema, formData);
2321
2396
  }
2322
2397
 
2323
2398
  // src/schema/sanitizeDataForNewSchema.ts
2324
- var import_get16 = __toESM(require("lodash/get"), 1);
2399
+ var import_get15 = __toESM(require("lodash/get"), 1);
2325
2400
  var import_has5 = __toESM(require("lodash/has"), 1);
2326
- var NO_VALUE = Symbol("no Value");
2401
+ var NO_VALUE = /* @__PURE__ */ Symbol("no Value");
2327
2402
  function sanitizeDataForNewSchema(validator, rootSchema, newSchema, oldSchema, data = {}, experimental_customMergeAllOf) {
2328
2403
  let newFormData;
2329
2404
  if ((0, import_has5.default)(newSchema, PROPERTIES_KEY)) {
2330
2405
  const removeOldSchemaData = {};
2331
2406
  if ((0, import_has5.default)(oldSchema, PROPERTIES_KEY)) {
2332
- const properties = (0, import_get16.default)(oldSchema, PROPERTIES_KEY, {});
2407
+ const properties = (0, import_get15.default)(oldSchema, PROPERTIES_KEY, {});
2333
2408
  Object.keys(properties).forEach((key) => {
2334
2409
  if ((0, import_has5.default)(data, key)) {
2335
2410
  removeOldSchemaData[key] = void 0;
2336
2411
  }
2337
2412
  });
2338
2413
  }
2339
- const keys2 = Object.keys((0, import_get16.default)(newSchema, PROPERTIES_KEY, {}));
2414
+ const keys2 = Object.keys((0, import_get15.default)(newSchema, PROPERTIES_KEY, {}));
2340
2415
  const nestedData = {};
2341
2416
  keys2.forEach((key) => {
2342
- const formValue = (0, import_get16.default)(data, key);
2343
- let oldKeyedSchema = (0, import_get16.default)(oldSchema, [PROPERTIES_KEY, key], {});
2344
- let newKeyedSchema = (0, import_get16.default)(newSchema, [PROPERTIES_KEY, key], {});
2417
+ const formValue = (0, import_get15.default)(data, key);
2418
+ let oldKeyedSchema = (0, import_get15.default)(oldSchema, [PROPERTIES_KEY, key], {});
2419
+ let newKeyedSchema = (0, import_get15.default)(newSchema, [PROPERTIES_KEY, key], {});
2345
2420
  if ((0, import_has5.default)(oldKeyedSchema, REF_KEY)) {
2346
2421
  oldKeyedSchema = retrieveSchema(
2347
2422
  validator,
@@ -2360,8 +2435,8 @@ function sanitizeDataForNewSchema(validator, rootSchema, newSchema, oldSchema, d
2360
2435
  experimental_customMergeAllOf
2361
2436
  );
2362
2437
  }
2363
- const oldSchemaTypeForKey = (0, import_get16.default)(oldKeyedSchema, "type");
2364
- const newSchemaTypeForKey = (0, import_get16.default)(newKeyedSchema, "type");
2438
+ const oldSchemaTypeForKey = (0, import_get15.default)(oldKeyedSchema, "type");
2439
+ const newSchemaTypeForKey = (0, import_get15.default)(newKeyedSchema, "type");
2365
2440
  if (!oldSchemaTypeForKey || oldSchemaTypeForKey === newSchemaTypeForKey) {
2366
2441
  if ((0, import_has5.default)(removeOldSchemaData, key)) {
2367
2442
  delete removeOldSchemaData[key];
@@ -2379,17 +2454,17 @@ function sanitizeDataForNewSchema(validator, rootSchema, newSchema, oldSchema, d
2379
2454
  nestedData[key] = itemData;
2380
2455
  }
2381
2456
  } else {
2382
- const newOptionDefault = (0, import_get16.default)(newKeyedSchema, "default", NO_VALUE);
2383
- const oldOptionDefault = (0, import_get16.default)(oldKeyedSchema, "default", NO_VALUE);
2457
+ const newOptionDefault = (0, import_get15.default)(newKeyedSchema, "default", NO_VALUE);
2458
+ const oldOptionDefault = (0, import_get15.default)(oldKeyedSchema, "default", NO_VALUE);
2384
2459
  if (newOptionDefault !== NO_VALUE && newOptionDefault !== formValue) {
2385
2460
  if (oldOptionDefault === formValue) {
2386
2461
  removeOldSchemaData[key] = newOptionDefault;
2387
- } else if ((0, import_get16.default)(newKeyedSchema, "readOnly") === true) {
2462
+ } else if ((0, import_get15.default)(newKeyedSchema, "readOnly") === true) {
2388
2463
  removeOldSchemaData[key] = void 0;
2389
2464
  }
2390
2465
  }
2391
- const newOptionConst = (0, import_get16.default)(newKeyedSchema, "const", NO_VALUE);
2392
- const oldOptionConst = (0, import_get16.default)(oldKeyedSchema, "const", NO_VALUE);
2466
+ const newOptionConst = (0, import_get15.default)(newKeyedSchema, "const", NO_VALUE);
2467
+ const oldOptionConst = (0, import_get15.default)(oldKeyedSchema, "const", NO_VALUE);
2393
2468
  if (newOptionConst !== NO_VALUE && newOptionConst !== formValue) {
2394
2469
  removeOldSchemaData[key] = oldOptionConst === formValue ? newOptionConst : void 0;
2395
2470
  }
@@ -2401,9 +2476,9 @@ function sanitizeDataForNewSchema(validator, rootSchema, newSchema, oldSchema, d
2401
2476
  ...removeOldSchemaData,
2402
2477
  ...nestedData
2403
2478
  };
2404
- } else if ((0, import_get16.default)(oldSchema, "type") === "array" && (0, import_get16.default)(newSchema, "type") === "array" && Array.isArray(data)) {
2405
- let oldSchemaItems = (0, import_get16.default)(oldSchema, "items");
2406
- let newSchemaItems = (0, import_get16.default)(newSchema, "items");
2479
+ } else if ((0, import_get15.default)(oldSchema, "type") === "array" && (0, import_get15.default)(newSchema, "type") === "array" && Array.isArray(data)) {
2480
+ let oldSchemaItems = (0, import_get15.default)(oldSchema, "items");
2481
+ let newSchemaItems = (0, import_get15.default)(newSchema, "items");
2407
2482
  if (typeof oldSchemaItems === "object" && typeof newSchemaItems === "object" && !Array.isArray(oldSchemaItems) && !Array.isArray(newSchemaItems)) {
2408
2483
  if ((0, import_has5.default)(oldSchemaItems, REF_KEY)) {
2409
2484
  oldSchemaItems = retrieveSchema(
@@ -2423,10 +2498,10 @@ function sanitizeDataForNewSchema(validator, rootSchema, newSchema, oldSchema, d
2423
2498
  experimental_customMergeAllOf
2424
2499
  );
2425
2500
  }
2426
- const oldSchemaType = (0, import_get16.default)(oldSchemaItems, "type");
2427
- const newSchemaType = (0, import_get16.default)(newSchemaItems, "type");
2501
+ const oldSchemaType = (0, import_get15.default)(oldSchemaItems, "type");
2502
+ const newSchemaType = (0, import_get15.default)(newSchemaItems, "type");
2428
2503
  if (!oldSchemaType || oldSchemaType === newSchemaType) {
2429
- const maxItems = (0, import_get16.default)(newSchema, "maxItems", -1);
2504
+ const maxItems = (0, import_get15.default)(newSchema, "maxItems", -1);
2430
2505
  if (newSchemaType === "object") {
2431
2506
  newFormData = data.reduce((newValue, aValue) => {
2432
2507
  const itemValue = sanitizeDataForNewSchema(
@@ -2453,8 +2528,137 @@ function sanitizeDataForNewSchema(validator, rootSchema, newSchema, oldSchema, d
2453
2528
  return newFormData;
2454
2529
  }
2455
2530
 
2531
+ // src/schema/toPathSchema.ts
2532
+ var import_get16 = __toESM(require("lodash/get"), 1);
2533
+ var import_isObject12 = __toESM(require("lodash/isObject"), 1);
2534
+ var import_set2 = __toESM(require("lodash/set"), 1);
2535
+ function toPathSchemaInternal(validator, schema, name, rootSchema, formData, _recurseList = [], experimental_customMergeAllOf) {
2536
+ if (REF_KEY in schema || DEPENDENCIES_KEY in schema || ALL_OF_KEY in schema || IF_KEY in schema) {
2537
+ const _schema = retrieveSchema(validator, schema, rootSchema, formData, experimental_customMergeAllOf);
2538
+ const sameSchemaIndex = _recurseList.findIndex((item) => deepEquals_default(item, _schema));
2539
+ if (sameSchemaIndex === -1) {
2540
+ return toPathSchemaInternal(
2541
+ validator,
2542
+ _schema,
2543
+ name,
2544
+ rootSchema,
2545
+ formData,
2546
+ _recurseList.concat(_schema),
2547
+ experimental_customMergeAllOf
2548
+ );
2549
+ }
2550
+ }
2551
+ let pathSchema = {
2552
+ [NAME_KEY]: name.replace(/^\./, "")
2553
+ };
2554
+ if (ONE_OF_KEY in schema || ANY_OF_KEY in schema) {
2555
+ const xxxOf = ONE_OF_KEY in schema ? schema.oneOf : schema.anyOf;
2556
+ const discriminator = getDiscriminatorFieldFromSchema(schema);
2557
+ const index = getClosestMatchingOption(
2558
+ validator,
2559
+ rootSchema,
2560
+ formData,
2561
+ xxxOf,
2562
+ 0,
2563
+ discriminator,
2564
+ experimental_customMergeAllOf
2565
+ );
2566
+ const _schema = xxxOf[index];
2567
+ pathSchema = {
2568
+ ...pathSchema,
2569
+ ...toPathSchemaInternal(
2570
+ validator,
2571
+ _schema,
2572
+ name,
2573
+ rootSchema,
2574
+ formData,
2575
+ _recurseList,
2576
+ experimental_customMergeAllOf
2577
+ )
2578
+ };
2579
+ }
2580
+ if (ADDITIONAL_PROPERTIES_KEY in schema && schema[ADDITIONAL_PROPERTIES_KEY] !== false) {
2581
+ (0, import_set2.default)(pathSchema, RJSF_ADDITIONAL_PROPERTIES_FLAG, true);
2582
+ const additionalSchema = (0, import_isObject12.default)(schema[ADDITIONAL_PROPERTIES_KEY]) ? schema[ADDITIONAL_PROPERTIES_KEY] : {};
2583
+ const definedProperties = (0, import_get16.default)(schema, PROPERTIES_KEY, {});
2584
+ for (const key of Object.keys(formData ?? {})) {
2585
+ if (!(key in definedProperties)) {
2586
+ pathSchema[key] = toPathSchemaInternal(
2587
+ validator,
2588
+ additionalSchema,
2589
+ `${name}.${key}`,
2590
+ rootSchema,
2591
+ (0, import_get16.default)(formData, [key]),
2592
+ _recurseList,
2593
+ experimental_customMergeAllOf
2594
+ );
2595
+ }
2596
+ }
2597
+ }
2598
+ if (ITEMS_KEY in schema && Array.isArray(formData)) {
2599
+ const { items: schemaItems, additionalItems: schemaAdditionalItems } = schema;
2600
+ if (Array.isArray(schemaItems)) {
2601
+ formData.forEach((element, i) => {
2602
+ if (schemaItems[i]) {
2603
+ pathSchema[i] = toPathSchemaInternal(
2604
+ validator,
2605
+ schemaItems[i],
2606
+ `${name}.${i}`,
2607
+ rootSchema,
2608
+ element,
2609
+ _recurseList,
2610
+ experimental_customMergeAllOf
2611
+ );
2612
+ } else if (schemaAdditionalItems) {
2613
+ pathSchema[i] = toPathSchemaInternal(
2614
+ validator,
2615
+ schemaAdditionalItems,
2616
+ `${name}.${i}`,
2617
+ rootSchema,
2618
+ element,
2619
+ _recurseList,
2620
+ experimental_customMergeAllOf
2621
+ );
2622
+ } else {
2623
+ console.warn(`Unable to generate path schema for "${name}.${i}". No schema defined for it`);
2624
+ }
2625
+ });
2626
+ } else {
2627
+ formData.forEach((element, i) => {
2628
+ pathSchema[i] = toPathSchemaInternal(
2629
+ validator,
2630
+ schemaItems,
2631
+ `${name}.${i}`,
2632
+ rootSchema,
2633
+ element,
2634
+ _recurseList,
2635
+ experimental_customMergeAllOf
2636
+ );
2637
+ });
2638
+ }
2639
+ } else if (PROPERTIES_KEY in schema) {
2640
+ for (const property in schema.properties) {
2641
+ const field = (0, import_get16.default)(schema, [PROPERTIES_KEY, property], {});
2642
+ pathSchema[property] = toPathSchemaInternal(
2643
+ validator,
2644
+ field,
2645
+ `${name}.${property}`,
2646
+ rootSchema,
2647
+ // It's possible that formData is not an object -- this can happen if an
2648
+ // array item has just been added, but not populated with data yet
2649
+ (0, import_get16.default)(formData, [property]),
2650
+ _recurseList,
2651
+ experimental_customMergeAllOf
2652
+ );
2653
+ }
2654
+ }
2655
+ return pathSchema;
2656
+ }
2657
+ function toPathSchema(validator, schema, name = "", rootSchema, formData, experimental_customMergeAllOf) {
2658
+ return toPathSchemaInternal(validator, schema, name, rootSchema, formData, void 0, experimental_customMergeAllOf);
2659
+ }
2660
+
2456
2661
  // src/createSchemaUtils.ts
2457
- var import_get17 = __toESM(require("lodash/get"), 1);
2458
2662
  var SchemaUtils = class {
2459
2663
  /** Constructs the `SchemaUtils` instance with the given `validator` and `rootSchema` stored as instance variables
2460
2664
  *
@@ -2794,31 +2998,6 @@ function dateRangeOptions(start, stop) {
2794
2998
  return options;
2795
2999
  }
2796
3000
 
2797
- // src/shallowEquals.ts
2798
- function shallowEquals(a, b) {
2799
- if (Object.is(a, b)) {
2800
- return true;
2801
- }
2802
- if (a == null || b == null) {
2803
- return false;
2804
- }
2805
- if (typeof a !== "object" || typeof b !== "object") {
2806
- return false;
2807
- }
2808
- const keysA = Object.keys(a);
2809
- const keysB = Object.keys(b);
2810
- if (keysA.length !== keysB.length) {
2811
- return false;
2812
- }
2813
- for (let i = 0; i < keysA.length; i++) {
2814
- const key = keysA[i];
2815
- if (!Object.prototype.hasOwnProperty.call(b, key) || !Object.is(a[key], b[key])) {
2816
- return false;
2817
- }
2818
- }
2819
- return true;
2820
- }
2821
-
2822
3001
  // src/replaceStringParameters.ts
2823
3002
  function replaceStringParameters(inputString, params) {
2824
3003
  let output = inputString;
@@ -2835,9 +3014,28 @@ function replaceStringParameters(inputString, params) {
2835
3014
  return output;
2836
3015
  }
2837
3016
 
2838
- // src/englishStringTranslator.ts
2839
- function englishStringTranslator(stringToTranslate, params) {
2840
- return replaceStringParameters(stringToTranslate, params);
3017
+ // src/englishStringTranslator.ts
3018
+ function englishStringTranslator(stringToTranslate, params) {
3019
+ return replaceStringParameters(stringToTranslate, params);
3020
+ }
3021
+
3022
+ // src/enumOptionsValueForIndex.ts
3023
+ function enumOptionsValueForIndex(valueIndex, allEnumOptions = [], emptyValue) {
3024
+ if (Array.isArray(valueIndex)) {
3025
+ return valueIndex.map((index2) => enumOptionsValueForIndex(index2, allEnumOptions)).filter((val) => val !== void 0);
3026
+ }
3027
+ const index = valueIndex === "" || valueIndex === null ? -1 : Number(valueIndex);
3028
+ const option = allEnumOptions[index];
3029
+ return option ? option.value : emptyValue;
3030
+ }
3031
+
3032
+ // src/enumOptionsDeselectValue.ts
3033
+ function enumOptionsDeselectValue(valueIndex, selected, allEnumOptions = []) {
3034
+ const value = enumOptionsValueForIndex(valueIndex, allEnumOptions);
3035
+ if (Array.isArray(selected)) {
3036
+ return selected.filter((v) => !deepEquals_default(v, value));
3037
+ }
3038
+ return deepEquals_default(value, selected) ? void 0 : selected;
2841
3039
  }
2842
3040
 
2843
3041
  // src/enumOptionsIsSelected.ts
@@ -2870,14 +3068,17 @@ function enumOptionSelectedValue(value, enumOptions, multiple, format = "indexed
2870
3068
  return typeof indexes === "undefined" ? emptyValue : indexes;
2871
3069
  }
2872
3070
 
2873
- // src/enumOptionsValueForIndex.ts
2874
- function enumOptionsValueForIndex(valueIndex, allEnumOptions = [], emptyValue) {
2875
- if (Array.isArray(valueIndex)) {
2876
- return valueIndex.map((index2) => enumOptionsValueForIndex(index2, allEnumOptions)).filter((val) => val !== emptyValue);
3071
+ // src/enumOptionsSelectValue.ts
3072
+ var import_isNil3 = __toESM(require("lodash/isNil"), 1);
3073
+ function enumOptionsSelectValue(valueIndex, selected, allEnumOptions = []) {
3074
+ const value = enumOptionsValueForIndex(valueIndex, allEnumOptions);
3075
+ if (!(0, import_isNil3.default)(value)) {
3076
+ const index = allEnumOptions.findIndex((opt) => value === opt.value);
3077
+ const all = allEnumOptions.map(({ value: val }) => val);
3078
+ const updated = selected.slice(0, index).concat(value, selected.slice(index));
3079
+ return updated.sort((a, b) => Number(all.indexOf(a) > all.indexOf(b)));
2877
3080
  }
2878
- const index = valueIndex === "" || valueIndex === null ? -1 : Number(valueIndex);
2879
- const option = allEnumOptions[index];
2880
- return option ? option.value : emptyValue;
3081
+ return selected;
2881
3082
  }
2882
3083
 
2883
3084
  // src/enumOptionValueDecoder.ts
@@ -2906,12 +3107,12 @@ function enumOptionValueDecoder(value, enumOptions, format = "indexed", emptyVal
2906
3107
  }
2907
3108
 
2908
3109
  // src/enumOptionValueEncoder.ts
2909
- var import_isNil2 = __toESM(require("lodash/isNil"), 1);
3110
+ var import_isNil4 = __toESM(require("lodash/isNil"), 1);
2910
3111
  function enumOptionValueEncoder(value, index, format = "indexed") {
2911
3112
  if (format !== "realValue") {
2912
3113
  return String(index);
2913
3114
  }
2914
- if ((0, import_isNil2.default)(value)) {
3115
+ if ((0, import_isNil4.default)(value)) {
2915
3116
  return "";
2916
3117
  }
2917
3118
  if (typeof value === "object") {
@@ -2920,28 +3121,6 @@ function enumOptionValueEncoder(value, index, format = "indexed") {
2920
3121
  return String(value);
2921
3122
  }
2922
3123
 
2923
- // src/enumOptionsDeselectValue.ts
2924
- function enumOptionsDeselectValue(valueIndex, selected, allEnumOptions = []) {
2925
- const value = enumOptionsValueForIndex(valueIndex, allEnumOptions);
2926
- if (Array.isArray(selected)) {
2927
- return selected.filter((v) => !deepEquals_default(v, value));
2928
- }
2929
- return deepEquals_default(value, selected) ? void 0 : selected;
2930
- }
2931
-
2932
- // src/enumOptionsSelectValue.ts
2933
- var import_isNil3 = __toESM(require("lodash/isNil"), 1);
2934
- function enumOptionsSelectValue(valueIndex, selected, allEnumOptions = []) {
2935
- const value = enumOptionsValueForIndex(valueIndex, allEnumOptions);
2936
- if (!(0, import_isNil3.default)(value)) {
2937
- const index = allEnumOptions.findIndex((opt) => value === opt.value);
2938
- const all = allEnumOptions.map(({ value: val }) => val);
2939
- const updated = selected.slice(0, index).concat(value, selected.slice(index));
2940
- return updated.sort((a, b) => Number(all.indexOf(a) > all.indexOf(b)));
2941
- }
2942
- return selected;
2943
- }
2944
-
2945
3124
  // src/ErrorSchemaBuilder.ts
2946
3125
  var import_cloneDeep = __toESM(require("lodash/cloneDeep"), 1);
2947
3126
  var import_get18 = __toESM(require("lodash/get"), 1);
@@ -3040,11 +3219,11 @@ var ErrorSchemaBuilder = class {
3040
3219
  };
3041
3220
 
3042
3221
  // src/getChangedFields.ts
3222
+ var import_difference = __toESM(require("lodash/difference"), 1);
3223
+ var import_get19 = __toESM(require("lodash/get"), 1);
3224
+ var import_isPlainObject2 = __toESM(require("lodash/isPlainObject"), 1);
3043
3225
  var import_keys = __toESM(require("lodash/keys"), 1);
3044
3226
  var import_pickBy = __toESM(require("lodash/pickBy"), 1);
3045
- var import_isPlainObject2 = __toESM(require("lodash/isPlainObject"), 1);
3046
- var import_get19 = __toESM(require("lodash/get"), 1);
3047
- var import_difference = __toESM(require("lodash/difference"), 1);
3048
3227
  function getChangedFields(a, b) {
3049
3228
  const aIsPlainObject = (0, import_isPlainObject2.default)(a);
3050
3229
  const bIsPlainObject = (0, import_isPlainObject2.default)(b);
@@ -3186,7 +3365,7 @@ function getTemplate(name, registry, uiOptions = {}) {
3186
3365
  var import_get20 = __toESM(require("lodash/get"), 1);
3187
3366
  var import_uniqueId = __toESM(require("lodash/uniqueId"), 1);
3188
3367
  function getTestIds() {
3189
- if (typeof process === "undefined" || (0, import_get20.default)(process, "env.NODE_ENV") !== "test") {
3368
+ if ((0, import_get20.default)(globalThis, "process.env.NODE_ENV") !== "test") {
3190
3369
  return {};
3191
3370
  }
3192
3371
  const ids = /* @__PURE__ */ new Map();
@@ -3205,9 +3384,9 @@ function getTestIds() {
3205
3384
 
3206
3385
  // src/getWidget.tsx
3207
3386
  var import_react = require("react");
3208
- var import_react_is = __toESM(require("react-is"), 1);
3209
3387
  var import_get21 = __toESM(require("lodash/get"), 1);
3210
3388
  var import_set4 = __toESM(require("lodash/set"), 1);
3389
+ var import_react_is = __toESM(require("react-is"), 1);
3211
3390
  var import_jsx_runtime = require("react/jsx-runtime");
3212
3391
  var widgetMap = {
3213
3392
  boolean: {
@@ -3368,11 +3547,11 @@ function optionalControlsId(id, element) {
3368
3547
  }
3369
3548
 
3370
3549
  // src/isFormDataAvailable.ts
3371
- var import_isNil4 = __toESM(require("lodash/isNil"), 1);
3372
3550
  var import_isEmpty6 = __toESM(require("lodash/isEmpty"), 1);
3373
- var import_isObject12 = __toESM(require("lodash/isObject"), 1);
3551
+ var import_isNil5 = __toESM(require("lodash/isNil"), 1);
3552
+ var import_isObject13 = __toESM(require("lodash/isObject"), 1);
3374
3553
  function isFormDataAvailable(formData) {
3375
- return !(0, import_isNil4.default)(formData) && (!(0, import_isObject12.default)(formData) || Array.isArray(formData) || !(0, import_isEmpty6.default)(formData));
3554
+ return !(0, import_isNil5.default)(formData) && (!(0, import_isObject13.default)(formData) || Array.isArray(formData) || !(0, import_isEmpty6.default)(formData));
3376
3555
  }
3377
3556
 
3378
3557
  // src/isRootSchema.ts
@@ -3410,80 +3589,25 @@ function lookupFromFormContext(regOrFc, toLookup, fallback) {
3410
3589
  return (0, import_get22.default)(regOrFc, [...lookupPath, toLookup], fallback);
3411
3590
  }
3412
3591
 
3413
- // src/removeOptionalEmptyObjects.ts
3414
- var import_isNil5 = __toESM(require("lodash/isNil"), 1);
3415
- function isValueEmpty(value) {
3416
- if ((0, import_isNil5.default)(value) || value === "") {
3417
- return true;
3418
- }
3419
- if (Array.isArray(value)) {
3420
- return value.length === 0;
3421
- }
3422
- if (isObject(value)) {
3423
- const obj = value;
3424
- const keys2 = Object.keys(obj);
3425
- return keys2.every((key) => isValueEmpty(obj[key]));
3426
- }
3427
- return false;
3428
- }
3429
- function removeOptionalEmptyObjects(validator, schema, rootSchema, formData) {
3430
- if (!isObject(schema)) {
3431
- return formData;
3432
- }
3433
- const resolvedSchema = retrieveSchema(validator, schema, rootSchema, formData);
3434
- if (Array.isArray(formData)) {
3435
- const itemsSchema = resolvedSchema.items;
3436
- if (!itemsSchema) {
3437
- return formData;
3438
- }
3439
- let hasChanges = false;
3440
- const mapped = formData.map((item, index) => {
3441
- let itemSchema = itemsSchema;
3442
- if (Array.isArray(itemsSchema)) {
3443
- itemSchema = itemsSchema[index] || resolvedSchema.additionalItems || {};
3444
- }
3445
- const cleaned = removeOptionalEmptyObjects(validator, itemSchema, rootSchema, item);
3446
- if (cleaned !== item) {
3447
- hasChanges = true;
3448
- }
3449
- return cleaned === void 0 ? {} : cleaned;
3450
- });
3451
- return hasChanges ? mapped : formData;
3452
- }
3453
- const { properties, required: requiredFields = [] } = resolvedSchema;
3454
- if (!isObject(formData) || !properties) {
3455
- return formData;
3592
+ // src/nameGenerators.ts
3593
+ var bracketNameGenerator = (path, idPrefix, isMultiValue) => {
3594
+ if (!path || path.length === 0) {
3595
+ return idPrefix;
3456
3596
  }
3457
- const result = {};
3458
- const data = formData;
3459
- let hasAnyValue = false;
3460
- for (const key of Object.keys(data)) {
3461
- const value = data[key];
3462
- const propertySchema = properties[key] || {};
3463
- const isRequired = requiredFields.includes(key);
3464
- const isObj = isObject(value);
3465
- const isArr = Array.isArray(value);
3466
- if ((isObj || isArr) && properties[key]) {
3467
- const cleaned = removeOptionalEmptyObjects(validator, propertySchema, rootSchema, value);
3468
- if (!isRequired && isValueEmpty(cleaned)) {
3469
- continue;
3470
- }
3471
- result[key] = cleaned;
3472
- hasAnyValue = true;
3473
- } else if (!isRequired && isValueEmpty(value) && properties[key]) {
3474
- continue;
3475
- } else {
3476
- result[key] = value;
3477
- if (!isValueEmpty(value)) {
3478
- hasAnyValue = true;
3479
- }
3597
+ const baseName = path.reduce((acc, pathUnit, index) => {
3598
+ if (index === 0) {
3599
+ return `${idPrefix}[${String(pathUnit)}]`;
3480
3600
  }
3601
+ return `${acc}[${String(pathUnit)}]`;
3602
+ }, "");
3603
+ return isMultiValue ? `${baseName}[]` : baseName;
3604
+ };
3605
+ var dotNotationNameGenerator = (path, idPrefix, _isMultiValue) => {
3606
+ if (!path || path.length === 0) {
3607
+ return idPrefix;
3481
3608
  }
3482
- if (!hasAnyValue && Object.keys(result).length === 0) {
3483
- return void 0;
3484
- }
3485
- return result;
3486
- }
3609
+ return `${idPrefix}.${path.map(String).join(".")}`;
3610
+ };
3487
3611
 
3488
3612
  // src/orderProperties.ts
3489
3613
  function orderProperties(properties, order) {
@@ -3541,6 +3665,64 @@ function parseDateString(dateString, includeTime = true) {
3541
3665
  };
3542
3666
  }
3543
3667
 
3668
+ // src/removeOptionalEmptyObjects.ts
3669
+ function removeOptionalEmptyObjects(validator, schema, rootSchema, formData) {
3670
+ if (!isObject(schema)) {
3671
+ return formData;
3672
+ }
3673
+ const resolvedSchema = retrieveSchema(validator, schema, rootSchema, formData);
3674
+ if (Array.isArray(formData)) {
3675
+ const itemsSchema = resolvedSchema.items;
3676
+ if (!itemsSchema) {
3677
+ return formData;
3678
+ }
3679
+ let hasChanges = false;
3680
+ const mapped = formData.map((item, index) => {
3681
+ let itemSchema = itemsSchema;
3682
+ if (Array.isArray(itemsSchema)) {
3683
+ itemSchema = itemsSchema[index] || resolvedSchema.additionalItems || {};
3684
+ }
3685
+ const cleaned = removeOptionalEmptyObjects(validator, itemSchema, rootSchema, item);
3686
+ if (cleaned !== item) {
3687
+ hasChanges = true;
3688
+ }
3689
+ return cleaned === void 0 ? {} : cleaned;
3690
+ });
3691
+ return hasChanges ? mapped : formData;
3692
+ }
3693
+ const { properties, required: requiredFields = [] } = resolvedSchema;
3694
+ if (!isObject(formData) || !properties) {
3695
+ return formData;
3696
+ }
3697
+ const result = {};
3698
+ const data = formData;
3699
+ let hasAnyValue = false;
3700
+ for (const key of Object.keys(data)) {
3701
+ const value = data[key];
3702
+ const propertySchema = properties[key] || {};
3703
+ const isRequired = requiredFields.includes(key);
3704
+ const isObj = isObject(value);
3705
+ const isArr = Array.isArray(value);
3706
+ if ((isObj || isArr) && properties[key]) {
3707
+ const cleaned = removeOptionalEmptyObjects(validator, propertySchema, rootSchema, value);
3708
+ if (!isRequired && isValueEmpty(cleaned)) {
3709
+ continue;
3710
+ }
3711
+ result[key] = cleaned;
3712
+ hasAnyValue = true;
3713
+ } else if (isRequired || !isValueEmpty(value) || !properties[key]) {
3714
+ result[key] = value;
3715
+ if (!isValueEmpty(value)) {
3716
+ hasAnyValue = true;
3717
+ }
3718
+ }
3719
+ }
3720
+ if (!hasAnyValue && Object.keys(result).length === 0) {
3721
+ return void 0;
3722
+ }
3723
+ return result;
3724
+ }
3725
+
3544
3726
  // src/resolveUiSchema.ts
3545
3727
  var import_isEmpty7 = __toESM(require("lodash/isEmpty"), 1);
3546
3728
  function resolveUiSchema(schema, localUiSchema, registry) {
@@ -3611,6 +3793,31 @@ function schemaRequiresTrueValue(schema) {
3611
3793
  return false;
3612
3794
  }
3613
3795
 
3796
+ // src/shallowEquals.ts
3797
+ function shallowEquals(a, b) {
3798
+ if (Object.is(a, b)) {
3799
+ return true;
3800
+ }
3801
+ if (a == null || b == null) {
3802
+ return false;
3803
+ }
3804
+ if (typeof a !== "object" || typeof b !== "object") {
3805
+ return false;
3806
+ }
3807
+ const keysA = Object.keys(a);
3808
+ const keysB = Object.keys(b);
3809
+ if (keysA.length !== keysB.length) {
3810
+ return false;
3811
+ }
3812
+ for (let i = 0; i < keysA.length; i++) {
3813
+ const key = keysA[i];
3814
+ if (!Object.prototype.hasOwnProperty.call(b, key) || !Object.is(a[key], b[key])) {
3815
+ return false;
3816
+ }
3817
+ }
3818
+ return true;
3819
+ }
3820
+
3614
3821
  // src/shouldRender.ts
3615
3822
  function shouldRender(component, nextProps, nextState, updateStrategy = "customDeep") {
3616
3823
  if (updateStrategy === "always") {
@@ -3625,11 +3832,11 @@ function shouldRender(component, nextProps, nextState, updateStrategy = "customD
3625
3832
  }
3626
3833
 
3627
3834
  // src/shouldRenderOptionalField.ts
3628
- var import_isObject14 = __toESM(require("lodash/isObject"), 1);
3835
+ var import_isObject15 = __toESM(require("lodash/isObject"), 1);
3629
3836
  var import_uniq2 = __toESM(require("lodash/uniq"), 1);
3630
3837
  function getSchemaTypesForXxxOf(schemas) {
3631
3838
  const allTypes = (0, import_uniq2.default)(
3632
- schemas.map((s) => (0, import_isObject14.default)(s) ? getSchemaType(s) : void 0).flat().filter((t) => t !== void 0)
3839
+ schemas.map((s) => (0, import_isObject15.default)(s) ? getSchemaType(s) : void 0).flat().filter((t) => t !== void 0)
3633
3840
  );
3634
3841
  return allTypes.length === 1 ? allTypes[0] : allTypes;
3635
3842
  }
@@ -3911,15 +4118,14 @@ function useFileWidgetProps(value, onChange, multiple = false) {
3911
4118
  [value]
3912
4119
  );
3913
4120
  const handleChange = (0, import_react4.useCallback)(
3914
- (files) => {
3915
- processFiles(files).then((filesInfoEvent) => {
3916
- const newValue = filesInfoEvent.map((fileInfo) => fileInfo.dataURL || null);
3917
- if (multiple) {
3918
- onChange(values.concat(...newValue));
3919
- } else {
3920
- onChange(newValue[0]);
3921
- }
3922
- });
4121
+ async (files) => {
4122
+ const filesInfoEvent = await processFiles(files);
4123
+ const newValue = filesInfoEvent.map((fileInfo) => fileInfo.dataURL || null);
4124
+ if (multiple) {
4125
+ onChange(values.concat(...newValue));
4126
+ } else {
4127
+ onChange(newValue[0]);
4128
+ }
3923
4129
  },
3924
4130
  [values, multiple, onChange]
3925
4131
  );
@@ -3974,7 +4180,7 @@ function validationDataMerge(validationData, additionalErrorSchema, preventDupli
3974
4180
  }
3975
4181
 
3976
4182
  // src/withIdRefPrefix.ts
3977
- var import_isObject15 = __toESM(require("lodash/isObject"), 1);
4183
+ var import_isObject16 = __toESM(require("lodash/isObject"), 1);
3978
4184
  function withIdRefPrefixObject(node) {
3979
4185
  for (const key in node) {
3980
4186
  const realObj = node;
@@ -3997,32 +4203,12 @@ function withIdRefPrefix(schemaNode) {
3997
4203
  if (Array.isArray(schemaNode)) {
3998
4204
  return withIdRefPrefixArray([...schemaNode]);
3999
4205
  }
4000
- if ((0, import_isObject15.default)(schemaNode)) {
4206
+ if ((0, import_isObject16.default)(schemaNode)) {
4001
4207
  return withIdRefPrefixObject({ ...schemaNode });
4002
4208
  }
4003
4209
  return schemaNode;
4004
4210
  }
4005
4211
 
4006
- // src/nameGenerators.ts
4007
- var bracketNameGenerator = (path, idPrefix, isMultiValue) => {
4008
- if (!path || path.length === 0) {
4009
- return idPrefix;
4010
- }
4011
- const baseName = path.reduce((acc, pathUnit, index) => {
4012
- if (index === 0) {
4013
- return `${idPrefix}[${String(pathUnit)}]`;
4014
- }
4015
- return `${acc}[${String(pathUnit)}]`;
4016
- }, "");
4017
- return isMultiValue ? `${baseName}[]` : baseName;
4018
- };
4019
- var dotNotationNameGenerator = (path, idPrefix, _isMultiValue) => {
4020
- if (!path || path.length === 0) {
4021
- return idPrefix;
4022
- }
4023
- return `${idPrefix}.${path.map(String).join(".")}`;
4024
- };
4025
-
4026
4212
  // src/enums.ts
4027
4213
  var TranslatableString = /* @__PURE__ */ ((TranslatableString2) => {
4028
4214
  TranslatableString2["ArrayItemTitle"] = "Item";
@@ -4055,6 +4241,7 @@ var TranslatableString = /* @__PURE__ */ ((TranslatableString2) => {
4055
4241
  TranslatableString2["OptionPrefix"] = "Option %1";
4056
4242
  TranslatableString2["TitleOptionPrefix"] = "%1 option %2";
4057
4243
  TranslatableString2["KeyLabel"] = "%1 Key";
4244
+ TranslatableString2["DeprecatedLabel"] = "%1 (deprecated)";
4058
4245
  TranslatableString2["InvalidObjectField"] = 'Invalid "%1" object field configuration: _%2_.';
4059
4246
  TranslatableString2["UnsupportedField"] = "Unsupported field schema.";
4060
4247
  TranslatableString2["UnsupportedFieldWithId"] = "Unsupported field schema for field `%1`.";