@rjsf/utils 6.5.3 → 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 (134) hide show
  1. package/dist/index.cjs +618 -433
  2. package/dist/index.cjs.map +4 -4
  3. package/dist/utils.esm.js +614 -429
  4. package/dist/utils.esm.js.map +4 -4
  5. package/dist/utils.umd.js +623 -438
  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/findSchemaDefinition.js +4 -4
  23. package/lib/findSchemaDefinition.js.map +1 -1
  24. package/lib/getChangedFields.js +3 -3
  25. package/lib/getChangedFields.js.map +1 -1
  26. package/lib/getDiscriminatorFieldFromSchema.js.map +1 -1
  27. package/lib/getOptionMatchingSimpleDiscriminator.js.map +1 -1
  28. package/lib/getTestIds.d.ts +1 -1
  29. package/lib/getTestIds.js +4 -3
  30. package/lib/getTestIds.js.map +1 -1
  31. package/lib/getWidget.js +1 -1
  32. package/lib/getWidget.js.map +1 -1
  33. package/lib/idGenerators.js.map +1 -1
  34. package/lib/index.d.ts +6 -6
  35. package/lib/index.js +6 -6
  36. package/lib/index.js.map +1 -1
  37. package/lib/isFormDataAvailable.js +1 -1
  38. package/lib/isFormDataAvailable.js.map +1 -1
  39. package/lib/isRootSchema.js +1 -1
  40. package/lib/isRootSchema.js.map +1 -1
  41. package/lib/mergeDefaultsWithFormData.js +1 -1
  42. package/lib/mergeDefaultsWithFormData.js.map +1 -1
  43. package/lib/parser/ParserValidator.js +1 -1
  44. package/lib/parser/ParserValidator.js.map +1 -1
  45. package/lib/parser/index.d.ts +1 -1
  46. package/lib/parser/index.js.map +1 -1
  47. package/lib/parser/schemaParser.js +2 -2
  48. package/lib/parser/schemaParser.js.map +1 -1
  49. package/lib/removeOptionalEmptyObjects.d.ts +2 -0
  50. package/lib/removeOptionalEmptyObjects.js +8 -29
  51. package/lib/removeOptionalEmptyObjects.js.map +1 -1
  52. package/lib/schema/findFieldInSchema.js +1 -1
  53. package/lib/schema/findFieldInSchema.js.map +1 -1
  54. package/lib/schema/findSelectedOptionInXxxOf.js +1 -1
  55. package/lib/schema/findSelectedOptionInXxxOf.js.map +1 -1
  56. package/lib/schema/getClosestMatchingOption.js +3 -3
  57. package/lib/schema/getClosestMatchingOption.js.map +1 -1
  58. package/lib/schema/getDefaultFormState.d.ts +4 -4
  59. package/lib/schema/getDefaultFormState.js +17 -22
  60. package/lib/schema/getDefaultFormState.js.map +1 -1
  61. package/lib/schema/getFromSchema.js +1 -1
  62. package/lib/schema/getFromSchema.js.map +1 -1
  63. package/lib/schema/index.d.ts +4 -4
  64. package/lib/schema/index.js +4 -4
  65. package/lib/schema/index.js.map +1 -1
  66. package/lib/schema/isMultiSelect.js.map +1 -1
  67. package/lib/schema/omitExtraData.d.ts +18 -8
  68. package/lib/schema/omitExtraData.js +352 -16
  69. package/lib/schema/omitExtraData.js.map +1 -1
  70. package/lib/schema/retrieveSchema.d.ts +15 -0
  71. package/lib/schema/retrieveSchema.js +36 -13
  72. package/lib/schema/retrieveSchema.js.map +1 -1
  73. package/lib/schema/sanitizeDataForNewSchema.js.map +1 -1
  74. package/lib/schema/shallowAllOfMerge.d.ts +11 -0
  75. package/lib/schema/shallowAllOfMerge.js +18 -0
  76. package/lib/schema/shallowAllOfMerge.js.map +1 -0
  77. package/lib/schema/toPathSchema.d.ts +1 -0
  78. package/lib/schema/toPathSchema.js +2 -1
  79. package/lib/schema/toPathSchema.js.map +1 -1
  80. package/lib/shouldRenderOptionalField.js +1 -1
  81. package/lib/shouldRenderOptionalField.js.map +1 -1
  82. package/lib/toErrorSchema.js.map +1 -1
  83. package/lib/tsconfig.tsbuildinfo +1 -1
  84. package/lib/types.d.ts +4 -1
  85. package/lib/useFileWidgetProps.d.ts +1 -1
  86. package/lib/useFileWidgetProps.js +9 -10
  87. package/lib/useFileWidgetProps.js.map +1 -1
  88. package/lib/withIdRefPrefix.js +1 -1
  89. package/lib/withIdRefPrefix.js.map +1 -1
  90. package/package.json +10 -10
  91. package/src/ErrorSchemaBuilder.ts +1 -1
  92. package/src/canExpand.ts +1 -1
  93. package/src/constIsAjvDataReference.ts +3 -2
  94. package/src/createSchemaUtils.ts +18 -17
  95. package/src/enumOptionSelectedValue.ts +1 -1
  96. package/src/enumOptionValueDecoder.ts +1 -1
  97. package/src/enumOptionsDeselectValue.ts +2 -2
  98. package/src/enumOptionsIndexForValue.ts +1 -1
  99. package/src/enumOptionsIsSelected.ts +1 -1
  100. package/src/enumOptionsSelectValue.ts +3 -2
  101. package/src/enumOptionsValueForIndex.ts +2 -2
  102. package/src/findSchemaDefinition.ts +4 -4
  103. package/src/getChangedFields.ts +4 -3
  104. package/src/getDiscriminatorFieldFromSchema.ts +1 -1
  105. package/src/getOptionMatchingSimpleDiscriminator.ts +1 -0
  106. package/src/getTestIds.ts +4 -3
  107. package/src/getWidget.tsx +2 -2
  108. package/src/idGenerators.ts +1 -1
  109. package/src/index.ts +6 -6
  110. package/src/isFormDataAvailable.ts +1 -1
  111. package/src/isRootSchema.ts +1 -1
  112. package/src/mergeDefaultsWithFormData.ts +2 -2
  113. package/src/parser/ParserValidator.ts +1 -1
  114. package/src/parser/index.ts +1 -1
  115. package/src/parser/schemaParser.ts +3 -3
  116. package/src/removeOptionalEmptyObjects.ts +8 -30
  117. package/src/schema/findFieldInSchema.ts +2 -2
  118. package/src/schema/findSelectedOptionInXxxOf.ts +1 -1
  119. package/src/schema/getClosestMatchingOption.ts +4 -4
  120. package/src/schema/getDefaultFormState.ts +18 -24
  121. package/src/schema/getFromSchema.ts +2 -2
  122. package/src/schema/index.ts +5 -3
  123. package/src/schema/isMultiSelect.ts +0 -1
  124. package/src/schema/omitExtraData.ts +398 -19
  125. package/src/schema/retrieveSchema.ts +41 -15
  126. package/src/schema/sanitizeDataForNewSchema.ts +1 -1
  127. package/src/schema/shallowAllOfMerge.ts +19 -0
  128. package/src/schema/toPathSchema.ts +2 -1
  129. package/src/shouldRenderOptionalField.ts +2 -2
  130. package/src/toErrorSchema.ts +1 -1
  131. package/src/tsconfig.json +0 -1
  132. package/src/types.ts +4 -1
  133. package/src/useFileWidgetProps.ts +9 -10
  134. 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(
@@ -1309,10 +1327,6 @@ function findFieldInSchema(validator, rootSchema, schema, path, formData = {}, e
1309
1327
  return { field, isRequired };
1310
1328
  }
1311
1329
 
1312
- // src/schema/getDefaultFormState.ts
1313
- var import_get12 = __toESM(require("lodash/get"), 1);
1314
- var import_isEmpty4 = __toESM(require("lodash/isEmpty"), 1);
1315
-
1316
1330
  // src/schema/getClosestMatchingOption.ts
1317
1331
  var import_get9 = __toESM(require("lodash/get"), 1);
1318
1332
  var import_has4 = __toESM(require("lodash/has"), 1);
@@ -1437,6 +1451,23 @@ function getClosestMatchingOption(validator, rootSchema, formData, options, sele
1437
1451
  return bestIndex;
1438
1452
  }
1439
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
+
1440
1471
  // src/isFixedItems.ts
1441
1472
  function isFixedItems(schema) {
1442
1473
  return Array.isArray(schema.items) && schema.items.length > 0 && schema.items.every((item) => isObject(item));
@@ -1529,40 +1560,6 @@ function mergeObjects(obj1, obj2, concatArrays = false) {
1529
1560
  );
1530
1561
  }
1531
1562
 
1532
- // src/isConstant.ts
1533
- function isConstant(schema) {
1534
- return Array.isArray(schema.enum) && schema.enum.length === 1 || CONST_KEY in schema;
1535
- }
1536
-
1537
- // src/schema/isSelect.ts
1538
- function isSelect(validator, theSchema, rootSchema = {}, experimental_customMergeAllOf) {
1539
- const schema = retrieveSchema(validator, theSchema, rootSchema, void 0, experimental_customMergeAllOf);
1540
- const altSchemas = schema.oneOf || schema.anyOf;
1541
- if (Array.isArray(schema.enum)) {
1542
- return true;
1543
- }
1544
- if (Array.isArray(altSchemas)) {
1545
- return altSchemas.every((altSchemas2) => typeof altSchemas2 !== "boolean" && isConstant(altSchemas2));
1546
- }
1547
- return false;
1548
- }
1549
-
1550
- // src/schema/isMultiSelect.ts
1551
- function isMultiSelect(validator, schema, rootSchema, experimental_customMergeAllOf) {
1552
- if (!schema.uniqueItems || !schema.items || typeof schema.items === "boolean") {
1553
- return false;
1554
- }
1555
- return isSelect(validator, schema.items, rootSchema, experimental_customMergeAllOf);
1556
- }
1557
-
1558
- // src/constIsAjvDataReference.ts
1559
- var import_isString3 = __toESM(require("lodash/isString"), 1);
1560
- function constIsAjvDataReference(schema) {
1561
- const schemaConst = schema[CONST_KEY];
1562
- const schemaType = getSchemaType(schema);
1563
- return isObject(schemaConst) && (0, import_isString3.default)(schemaConst?.$data) && schemaType !== "object" && schemaType !== "array";
1564
- }
1565
-
1566
1563
  // src/optionsList.ts
1567
1564
  var import_get11 = __toESM(require("lodash/get"), 1);
1568
1565
 
@@ -1643,6 +1640,27 @@ function optionsList(schema, uiSchema) {
1643
1640
  });
1644
1641
  }
1645
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
+
1646
1664
  // src/schema/getDefaultFormState.ts
1647
1665
  var PRIMITIVE_TYPES = ["string", "number", "integer", "boolean", "null"];
1648
1666
  function getInnerSchemaForArrayItem(schema, additionalItems = 0 /* Ignore */, idx = -1) {
@@ -2002,14 +2020,11 @@ function getArrayDefaults(validator, rawSchema, {
2002
2020
  defaults = mergeDefaultsWithFormData(defaults, itemDefaults, mergeExtraDefaults);
2003
2021
  }
2004
2022
  }
2005
- const hasConst = isObject(schema) && CONST_KEY in schema && experimental_defaultFormStateBehavior?.constAsDefaults !== "never";
2006
- if (hasConst === false) {
2007
- if (neverPopulate) {
2008
- return defaults ?? emptyDefault;
2009
- }
2010
- if (ignoreMinItemsFlagSet && !required) {
2011
- return defaults ? defaults : void 0;
2012
- }
2023
+ if (neverPopulate) {
2024
+ return defaults ?? emptyDefault;
2025
+ }
2026
+ if (ignoreMinItemsFlagSet && !required) {
2027
+ return defaults ? defaults : void 0;
2013
2028
  }
2014
2029
  let arrayDefault;
2015
2030
  const defaultsLength = Array.isArray(defaults) ? defaults.length : 0;
@@ -2139,210 +2154,269 @@ function getDisplayLabel(validator, schema, uiSchema = {}, rootSchema, globalOpt
2139
2154
  }
2140
2155
 
2141
2156
  // src/schema/omitExtraData.ts
2142
- var import_pick = __toESM(require("lodash/pick"), 1);
2143
- var import_isEmpty5 = __toESM(require("lodash/isEmpty"), 1);
2144
- var import_get15 = __toESM(require("lodash/get"), 1);
2145
-
2146
- // src/schema/toPathSchema.ts
2147
2157
  var import_get14 = __toESM(require("lodash/get"), 1);
2148
- var import_isObject11 = __toESM(require("lodash/isObject"), 1);
2149
- var import_set2 = __toESM(require("lodash/set"), 1);
2150
- function toPathSchemaInternal(validator, schema, name, rootSchema, formData, _recurseList = [], experimental_customMergeAllOf) {
2151
- if (REF_KEY in schema || DEPENDENCIES_KEY in schema || ALL_OF_KEY in schema || IF_KEY in schema) {
2152
- const _schema = retrieveSchema(validator, schema, rootSchema, formData, experimental_customMergeAllOf);
2153
- const sameSchemaIndex = _recurseList.findIndex((item) => deepEquals_default(item, _schema));
2154
- if (sameSchemaIndex === -1) {
2155
- return toPathSchemaInternal(
2156
- validator,
2157
- _schema,
2158
- name,
2159
- rootSchema,
2160
- formData,
2161
- _recurseList.concat(_schema),
2162
- experimental_customMergeAllOf
2163
- );
2164
- }
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;
2165
2164
  }
2166
- let pathSchema = {
2167
- [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;
2168
2195
  };
2169
- if (ONE_OF_KEY in schema || ANY_OF_KEY in schema) {
2170
- const xxxOf = ONE_OF_KEY in schema ? schema.oneOf : schema.anyOf;
2171
- const discriminator = getDiscriminatorFieldFromSchema(schema);
2172
- 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(
2173
2325
  validator,
2174
2326
  rootSchema,
2175
- formData,
2176
- xxxOf,
2327
+ source,
2328
+ scoringOptions,
2177
2329
  0,
2178
- discriminator,
2330
+ getDiscriminatorFieldFromSchema(schema2),
2179
2331
  experimental_customMergeAllOf
2180
2332
  );
2181
- const _schema = xxxOf[index];
2182
- pathSchema = {
2183
- ...pathSchema,
2184
- ...toPathSchemaInternal(
2185
- validator,
2186
- _schema,
2187
- name,
2188
- rootSchema,
2189
- formData,
2190
- _recurseList,
2191
- experimental_customMergeAllOf
2192
- )
2193
- };
2194
- }
2195
- if (ADDITIONAL_PROPERTIES_KEY in schema && schema[ADDITIONAL_PROPERTIES_KEY] !== false) {
2196
- (0, import_set2.default)(pathSchema, RJSF_ADDITIONAL_PROPERTIES_FLAG, true);
2197
- const additionalSchema = (0, import_isObject11.default)(schema[ADDITIONAL_PROPERTIES_KEY]) ? schema[ADDITIONAL_PROPERTIES_KEY] : {};
2198
- const definedProperties = (0, import_get14.default)(schema, PROPERTIES_KEY, {});
2199
- for (const key of Object.keys(formData ?? {})) {
2200
- if (!(key in definedProperties)) {
2201
- pathSchema[key] = toPathSchemaInternal(
2202
- validator,
2203
- additionalSchema,
2204
- `${name}.${key}`,
2205
- rootSchema,
2206
- (0, import_get14.default)(formData, [key]),
2207
- _recurseList,
2208
- experimental_customMergeAllOf
2209
- );
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);
2210
2345
  }
2346
+ return target;
2211
2347
  }
2348
+ return handleOneOf(anyOf, schema2, source, target);
2212
2349
  }
2213
- if (ITEMS_KEY in schema && Array.isArray(formData)) {
2214
- const { items: schemaItems, additionalItems: schemaAdditionalItems } = schema;
2215
- if (Array.isArray(schemaItems)) {
2216
- formData.forEach((element, i) => {
2217
- if (schemaItems[i]) {
2218
- pathSchema[i] = toPathSchemaInternal(
2219
- validator,
2220
- schemaItems[i],
2221
- `${name}.${i}`,
2222
- rootSchema,
2223
- element,
2224
- _recurseList,
2225
- experimental_customMergeAllOf
2226
- );
2227
- } else if (schemaAdditionalItems) {
2228
- pathSchema[i] = toPathSchemaInternal(
2229
- validator,
2230
- schemaAdditionalItems,
2231
- `${name}.${i}`,
2232
- rootSchema,
2233
- element,
2234
- _recurseList,
2235
- experimental_customMergeAllOf
2236
- );
2237
- } else {
2238
- console.warn(`Unable to generate path schema for "${name}.${i}". No schema defined for it`);
2239
- }
2240
- });
2241
- } else {
2242
- formData.forEach((element, i) => {
2243
- pathSchema[i] = toPathSchemaInternal(
2244
- validator,
2245
- schemaItems,
2246
- `${name}.${i}`,
2247
- rootSchema,
2248
- element,
2249
- _recurseList,
2250
- experimental_customMergeAllOf
2251
- );
2252
- });
2350
+ function handleDependencies(schema2, source, target) {
2351
+ const { dependencies } = schema2;
2352
+ if (dependencies === void 0 || !isObjectValue(source)) {
2353
+ return target;
2253
2354
  }
2254
- } else if (PROPERTIES_KEY in schema) {
2255
- for (const property in schema.properties) {
2256
- const field = (0, import_get14.default)(schema, [PROPERTIES_KEY, property], {});
2257
- pathSchema[property] = toPathSchemaInternal(
2258
- validator,
2259
- field,
2260
- `${name}.${property}`,
2261
- rootSchema,
2262
- // It's possible that formData is not an object -- this can happen if an
2263
- // array item has just been added, but not populated with data yet
2264
- (0, import_get14.default)(formData, [property]),
2265
- _recurseList,
2266
- experimental_customMergeAllOf
2267
- );
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);
2268
2360
  }
2361
+ return target;
2269
2362
  }
2270
- return pathSchema;
2271
- }
2272
- function toPathSchema(validator, schema, name = "", rootSchema, formData, experimental_customMergeAllOf) {
2273
- return toPathSchemaInternal(validator, schema, name, rootSchema, formData, void 0, experimental_customMergeAllOf);
2274
- }
2275
-
2276
- // src/schema/omitExtraData.ts
2277
- function getUsedFormData(formData, fields) {
2278
- if (fields.length === 0 && typeof formData !== "object") {
2279
- return formData;
2280
- }
2281
- const data = (0, import_pick.default)(formData, fields);
2282
- if (Array.isArray(formData)) {
2283
- return Object.keys(data).map((key) => data[key]);
2284
- }
2285
- return data;
2286
- }
2287
- function getFieldNames(pathSchema, formData) {
2288
- const formValueHasData = (value, isLeaf) => typeof value !== "object" || (0, import_isEmpty5.default)(value) || isLeaf && !(0, import_isEmpty5.default)(value);
2289
- const getAllPaths = (_obj, acc = [], paths = [[]]) => {
2290
- const objKeys = Object.keys(_obj);
2291
- objKeys.forEach((key) => {
2292
- const data = _obj[key];
2293
- if (typeof data === "object") {
2294
- const newPaths = paths.map((path) => [...path, key]);
2295
- if (data[RJSF_ADDITIONAL_PROPERTIES_FLAG] && data[NAME_KEY] !== "") {
2296
- acc.push(data[NAME_KEY]);
2297
- } else {
2298
- getAllPaths(data, acc, newPaths);
2299
- }
2300
- } else if (key === NAME_KEY && data !== "") {
2301
- paths.forEach((path) => {
2302
- const formValue = (0, import_get15.default)(formData, path);
2303
- const isLeaf = objKeys.length === 1;
2304
- if (formValueHasData(formValue, isLeaf) || Array.isArray(formValue) && formValue.every((val) => formValueHasData(val, isLeaf))) {
2305
- acc.push(path);
2306
- }
2307
- });
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;
2308
2383
  }
2309
- });
2310
- return acc;
2311
- };
2312
- return getAllPaths(pathSchema);
2313
- }
2314
- function omitExtraData(validator, schema, rootSchema = {}, formData) {
2315
- const retrievedSchema = retrieveSchema(validator, schema, rootSchema, formData);
2316
- const pathSchema = toPathSchema(validator, retrievedSchema, "", rootSchema, formData);
2317
- const fieldNames = getFieldNames(pathSchema, formData);
2318
- const lodashFieldNames = fieldNames.map(
2319
- (fieldPaths) => Array.isArray(fieldPaths) ? fieldPaths.join(".") : fieldPaths
2320
- );
2321
- 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);
2322
2396
  }
2323
2397
 
2324
2398
  // src/schema/sanitizeDataForNewSchema.ts
2325
- var import_get16 = __toESM(require("lodash/get"), 1);
2399
+ var import_get15 = __toESM(require("lodash/get"), 1);
2326
2400
  var import_has5 = __toESM(require("lodash/has"), 1);
2327
- var NO_VALUE = Symbol("no Value");
2401
+ var NO_VALUE = /* @__PURE__ */ Symbol("no Value");
2328
2402
  function sanitizeDataForNewSchema(validator, rootSchema, newSchema, oldSchema, data = {}, experimental_customMergeAllOf) {
2329
2403
  let newFormData;
2330
2404
  if ((0, import_has5.default)(newSchema, PROPERTIES_KEY)) {
2331
2405
  const removeOldSchemaData = {};
2332
2406
  if ((0, import_has5.default)(oldSchema, PROPERTIES_KEY)) {
2333
- const properties = (0, import_get16.default)(oldSchema, PROPERTIES_KEY, {});
2407
+ const properties = (0, import_get15.default)(oldSchema, PROPERTIES_KEY, {});
2334
2408
  Object.keys(properties).forEach((key) => {
2335
2409
  if ((0, import_has5.default)(data, key)) {
2336
2410
  removeOldSchemaData[key] = void 0;
2337
2411
  }
2338
2412
  });
2339
2413
  }
2340
- const keys2 = Object.keys((0, import_get16.default)(newSchema, PROPERTIES_KEY, {}));
2414
+ const keys2 = Object.keys((0, import_get15.default)(newSchema, PROPERTIES_KEY, {}));
2341
2415
  const nestedData = {};
2342
2416
  keys2.forEach((key) => {
2343
- const formValue = (0, import_get16.default)(data, key);
2344
- let oldKeyedSchema = (0, import_get16.default)(oldSchema, [PROPERTIES_KEY, key], {});
2345
- 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], {});
2346
2420
  if ((0, import_has5.default)(oldKeyedSchema, REF_KEY)) {
2347
2421
  oldKeyedSchema = retrieveSchema(
2348
2422
  validator,
@@ -2361,8 +2435,8 @@ function sanitizeDataForNewSchema(validator, rootSchema, newSchema, oldSchema, d
2361
2435
  experimental_customMergeAllOf
2362
2436
  );
2363
2437
  }
2364
- const oldSchemaTypeForKey = (0, import_get16.default)(oldKeyedSchema, "type");
2365
- 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");
2366
2440
  if (!oldSchemaTypeForKey || oldSchemaTypeForKey === newSchemaTypeForKey) {
2367
2441
  if ((0, import_has5.default)(removeOldSchemaData, key)) {
2368
2442
  delete removeOldSchemaData[key];
@@ -2380,17 +2454,17 @@ function sanitizeDataForNewSchema(validator, rootSchema, newSchema, oldSchema, d
2380
2454
  nestedData[key] = itemData;
2381
2455
  }
2382
2456
  } else {
2383
- const newOptionDefault = (0, import_get16.default)(newKeyedSchema, "default", NO_VALUE);
2384
- 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);
2385
2459
  if (newOptionDefault !== NO_VALUE && newOptionDefault !== formValue) {
2386
2460
  if (oldOptionDefault === formValue) {
2387
2461
  removeOldSchemaData[key] = newOptionDefault;
2388
- } else if ((0, import_get16.default)(newKeyedSchema, "readOnly") === true) {
2462
+ } else if ((0, import_get15.default)(newKeyedSchema, "readOnly") === true) {
2389
2463
  removeOldSchemaData[key] = void 0;
2390
2464
  }
2391
2465
  }
2392
- const newOptionConst = (0, import_get16.default)(newKeyedSchema, "const", NO_VALUE);
2393
- 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);
2394
2468
  if (newOptionConst !== NO_VALUE && newOptionConst !== formValue) {
2395
2469
  removeOldSchemaData[key] = oldOptionConst === formValue ? newOptionConst : void 0;
2396
2470
  }
@@ -2402,9 +2476,9 @@ function sanitizeDataForNewSchema(validator, rootSchema, newSchema, oldSchema, d
2402
2476
  ...removeOldSchemaData,
2403
2477
  ...nestedData
2404
2478
  };
2405
- } else if ((0, import_get16.default)(oldSchema, "type") === "array" && (0, import_get16.default)(newSchema, "type") === "array" && Array.isArray(data)) {
2406
- let oldSchemaItems = (0, import_get16.default)(oldSchema, "items");
2407
- 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");
2408
2482
  if (typeof oldSchemaItems === "object" && typeof newSchemaItems === "object" && !Array.isArray(oldSchemaItems) && !Array.isArray(newSchemaItems)) {
2409
2483
  if ((0, import_has5.default)(oldSchemaItems, REF_KEY)) {
2410
2484
  oldSchemaItems = retrieveSchema(
@@ -2424,10 +2498,10 @@ function sanitizeDataForNewSchema(validator, rootSchema, newSchema, oldSchema, d
2424
2498
  experimental_customMergeAllOf
2425
2499
  );
2426
2500
  }
2427
- const oldSchemaType = (0, import_get16.default)(oldSchemaItems, "type");
2428
- 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");
2429
2503
  if (!oldSchemaType || oldSchemaType === newSchemaType) {
2430
- const maxItems = (0, import_get16.default)(newSchema, "maxItems", -1);
2504
+ const maxItems = (0, import_get15.default)(newSchema, "maxItems", -1);
2431
2505
  if (newSchemaType === "object") {
2432
2506
  newFormData = data.reduce((newValue, aValue) => {
2433
2507
  const itemValue = sanitizeDataForNewSchema(
@@ -2454,8 +2528,137 @@ function sanitizeDataForNewSchema(validator, rootSchema, newSchema, oldSchema, d
2454
2528
  return newFormData;
2455
2529
  }
2456
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
+
2457
2661
  // src/createSchemaUtils.ts
2458
- var import_get17 = __toESM(require("lodash/get"), 1);
2459
2662
  var SchemaUtils = class {
2460
2663
  /** Constructs the `SchemaUtils` instance with the given `validator` and `rootSchema` stored as instance variables
2461
2664
  *
@@ -2795,31 +2998,6 @@ function dateRangeOptions(start, stop) {
2795
2998
  return options;
2796
2999
  }
2797
3000
 
2798
- // src/shallowEquals.ts
2799
- function shallowEquals(a, b) {
2800
- if (Object.is(a, b)) {
2801
- return true;
2802
- }
2803
- if (a == null || b == null) {
2804
- return false;
2805
- }
2806
- if (typeof a !== "object" || typeof b !== "object") {
2807
- return false;
2808
- }
2809
- const keysA = Object.keys(a);
2810
- const keysB = Object.keys(b);
2811
- if (keysA.length !== keysB.length) {
2812
- return false;
2813
- }
2814
- for (let i = 0; i < keysA.length; i++) {
2815
- const key = keysA[i];
2816
- if (!Object.prototype.hasOwnProperty.call(b, key) || !Object.is(a[key], b[key])) {
2817
- return false;
2818
- }
2819
- }
2820
- return true;
2821
- }
2822
-
2823
3001
  // src/replaceStringParameters.ts
2824
3002
  function replaceStringParameters(inputString, params) {
2825
3003
  let output = inputString;
@@ -2836,9 +3014,28 @@ function replaceStringParameters(inputString, params) {
2836
3014
  return output;
2837
3015
  }
2838
3016
 
2839
- // src/englishStringTranslator.ts
2840
- function englishStringTranslator(stringToTranslate, params) {
2841
- 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;
2842
3039
  }
2843
3040
 
2844
3041
  // src/enumOptionsIsSelected.ts
@@ -2871,14 +3068,17 @@ function enumOptionSelectedValue(value, enumOptions, multiple, format = "indexed
2871
3068
  return typeof indexes === "undefined" ? emptyValue : indexes;
2872
3069
  }
2873
3070
 
2874
- // src/enumOptionsValueForIndex.ts
2875
- function enumOptionsValueForIndex(valueIndex, allEnumOptions = [], emptyValue) {
2876
- if (Array.isArray(valueIndex)) {
2877
- 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)));
2878
3080
  }
2879
- const index = valueIndex === "" || valueIndex === null ? -1 : Number(valueIndex);
2880
- const option = allEnumOptions[index];
2881
- return option ? option.value : emptyValue;
3081
+ return selected;
2882
3082
  }
2883
3083
 
2884
3084
  // src/enumOptionValueDecoder.ts
@@ -2907,12 +3107,12 @@ function enumOptionValueDecoder(value, enumOptions, format = "indexed", emptyVal
2907
3107
  }
2908
3108
 
2909
3109
  // src/enumOptionValueEncoder.ts
2910
- var import_isNil2 = __toESM(require("lodash/isNil"), 1);
3110
+ var import_isNil4 = __toESM(require("lodash/isNil"), 1);
2911
3111
  function enumOptionValueEncoder(value, index, format = "indexed") {
2912
3112
  if (format !== "realValue") {
2913
3113
  return String(index);
2914
3114
  }
2915
- if ((0, import_isNil2.default)(value)) {
3115
+ if ((0, import_isNil4.default)(value)) {
2916
3116
  return "";
2917
3117
  }
2918
3118
  if (typeof value === "object") {
@@ -2921,28 +3121,6 @@ function enumOptionValueEncoder(value, index, format = "indexed") {
2921
3121
  return String(value);
2922
3122
  }
2923
3123
 
2924
- // src/enumOptionsDeselectValue.ts
2925
- function enumOptionsDeselectValue(valueIndex, selected, allEnumOptions = []) {
2926
- const value = enumOptionsValueForIndex(valueIndex, allEnumOptions);
2927
- if (Array.isArray(selected)) {
2928
- return selected.filter((v) => !deepEquals_default(v, value));
2929
- }
2930
- return deepEquals_default(value, selected) ? void 0 : selected;
2931
- }
2932
-
2933
- // src/enumOptionsSelectValue.ts
2934
- var import_isNil3 = __toESM(require("lodash/isNil"), 1);
2935
- function enumOptionsSelectValue(valueIndex, selected, allEnumOptions = []) {
2936
- const value = enumOptionsValueForIndex(valueIndex, allEnumOptions);
2937
- if (!(0, import_isNil3.default)(value)) {
2938
- const index = allEnumOptions.findIndex((opt) => value === opt.value);
2939
- const all = allEnumOptions.map(({ value: val }) => val);
2940
- const updated = selected.slice(0, index).concat(value, selected.slice(index));
2941
- return updated.sort((a, b) => Number(all.indexOf(a) > all.indexOf(b)));
2942
- }
2943
- return selected;
2944
- }
2945
-
2946
3124
  // src/ErrorSchemaBuilder.ts
2947
3125
  var import_cloneDeep = __toESM(require("lodash/cloneDeep"), 1);
2948
3126
  var import_get18 = __toESM(require("lodash/get"), 1);
@@ -3041,11 +3219,11 @@ var ErrorSchemaBuilder = class {
3041
3219
  };
3042
3220
 
3043
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);
3044
3225
  var import_keys = __toESM(require("lodash/keys"), 1);
3045
3226
  var import_pickBy = __toESM(require("lodash/pickBy"), 1);
3046
- var import_isPlainObject2 = __toESM(require("lodash/isPlainObject"), 1);
3047
- var import_get19 = __toESM(require("lodash/get"), 1);
3048
- var import_difference = __toESM(require("lodash/difference"), 1);
3049
3227
  function getChangedFields(a, b) {
3050
3228
  const aIsPlainObject = (0, import_isPlainObject2.default)(a);
3051
3229
  const bIsPlainObject = (0, import_isPlainObject2.default)(b);
@@ -3187,7 +3365,7 @@ function getTemplate(name, registry, uiOptions = {}) {
3187
3365
  var import_get20 = __toESM(require("lodash/get"), 1);
3188
3366
  var import_uniqueId = __toESM(require("lodash/uniqueId"), 1);
3189
3367
  function getTestIds() {
3190
- 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") {
3191
3369
  return {};
3192
3370
  }
3193
3371
  const ids = /* @__PURE__ */ new Map();
@@ -3206,9 +3384,9 @@ function getTestIds() {
3206
3384
 
3207
3385
  // src/getWidget.tsx
3208
3386
  var import_react = require("react");
3209
- var import_react_is = __toESM(require("react-is"), 1);
3210
3387
  var import_get21 = __toESM(require("lodash/get"), 1);
3211
3388
  var import_set4 = __toESM(require("lodash/set"), 1);
3389
+ var import_react_is = __toESM(require("react-is"), 1);
3212
3390
  var import_jsx_runtime = require("react/jsx-runtime");
3213
3391
  var widgetMap = {
3214
3392
  boolean: {
@@ -3369,11 +3547,11 @@ function optionalControlsId(id, element) {
3369
3547
  }
3370
3548
 
3371
3549
  // src/isFormDataAvailable.ts
3372
- var import_isNil4 = __toESM(require("lodash/isNil"), 1);
3373
3550
  var import_isEmpty6 = __toESM(require("lodash/isEmpty"), 1);
3374
- 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);
3375
3553
  function isFormDataAvailable(formData) {
3376
- 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));
3377
3555
  }
3378
3556
 
3379
3557
  // src/isRootSchema.ts
@@ -3411,80 +3589,25 @@ function lookupFromFormContext(regOrFc, toLookup, fallback) {
3411
3589
  return (0, import_get22.default)(regOrFc, [...lookupPath, toLookup], fallback);
3412
3590
  }
3413
3591
 
3414
- // src/removeOptionalEmptyObjects.ts
3415
- var import_isNil5 = __toESM(require("lodash/isNil"), 1);
3416
- function isValueEmpty(value) {
3417
- if ((0, import_isNil5.default)(value) || value === "") {
3418
- return true;
3419
- }
3420
- if (Array.isArray(value)) {
3421
- return value.length === 0;
3422
- }
3423
- if (isObject(value)) {
3424
- const obj = value;
3425
- const keys2 = Object.keys(obj);
3426
- return keys2.every((key) => isValueEmpty(obj[key]));
3427
- }
3428
- return false;
3429
- }
3430
- function removeOptionalEmptyObjects(validator, schema, rootSchema, formData) {
3431
- if (!isObject(schema)) {
3432
- return formData;
3433
- }
3434
- const resolvedSchema = retrieveSchema(validator, schema, rootSchema, formData);
3435
- if (Array.isArray(formData)) {
3436
- const itemsSchema = resolvedSchema.items;
3437
- if (!itemsSchema) {
3438
- return formData;
3439
- }
3440
- let hasChanges = false;
3441
- const mapped = formData.map((item, index) => {
3442
- let itemSchema = itemsSchema;
3443
- if (Array.isArray(itemsSchema)) {
3444
- itemSchema = itemsSchema[index] || resolvedSchema.additionalItems || {};
3445
- }
3446
- const cleaned = removeOptionalEmptyObjects(validator, itemSchema, rootSchema, item);
3447
- if (cleaned !== item) {
3448
- hasChanges = true;
3449
- }
3450
- return cleaned === void 0 ? {} : cleaned;
3451
- });
3452
- return hasChanges ? mapped : formData;
3453
- }
3454
- const { properties, required: requiredFields = [] } = resolvedSchema;
3455
- if (!isObject(formData) || !properties) {
3456
- return formData;
3592
+ // src/nameGenerators.ts
3593
+ var bracketNameGenerator = (path, idPrefix, isMultiValue) => {
3594
+ if (!path || path.length === 0) {
3595
+ return idPrefix;
3457
3596
  }
3458
- const result = {};
3459
- const data = formData;
3460
- let hasAnyValue = false;
3461
- for (const key of Object.keys(data)) {
3462
- const value = data[key];
3463
- const propertySchema = properties[key] || {};
3464
- const isRequired = requiredFields.includes(key);
3465
- const isObj = isObject(value);
3466
- const isArr = Array.isArray(value);
3467
- if ((isObj || isArr) && properties[key]) {
3468
- const cleaned = removeOptionalEmptyObjects(validator, propertySchema, rootSchema, value);
3469
- if (!isRequired && isValueEmpty(cleaned)) {
3470
- continue;
3471
- }
3472
- result[key] = cleaned;
3473
- hasAnyValue = true;
3474
- } else if (!isRequired && isValueEmpty(value) && properties[key]) {
3475
- continue;
3476
- } else {
3477
- result[key] = value;
3478
- if (!isValueEmpty(value)) {
3479
- hasAnyValue = true;
3480
- }
3597
+ const baseName = path.reduce((acc, pathUnit, index) => {
3598
+ if (index === 0) {
3599
+ return `${idPrefix}[${String(pathUnit)}]`;
3481
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;
3482
3608
  }
3483
- if (!hasAnyValue && Object.keys(result).length === 0) {
3484
- return void 0;
3485
- }
3486
- return result;
3487
- }
3609
+ return `${idPrefix}.${path.map(String).join(".")}`;
3610
+ };
3488
3611
 
3489
3612
  // src/orderProperties.ts
3490
3613
  function orderProperties(properties, order) {
@@ -3542,6 +3665,64 @@ function parseDateString(dateString, includeTime = true) {
3542
3665
  };
3543
3666
  }
3544
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
+
3545
3726
  // src/resolveUiSchema.ts
3546
3727
  var import_isEmpty7 = __toESM(require("lodash/isEmpty"), 1);
3547
3728
  function resolveUiSchema(schema, localUiSchema, registry) {
@@ -3612,6 +3793,31 @@ function schemaRequiresTrueValue(schema) {
3612
3793
  return false;
3613
3794
  }
3614
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
+
3615
3821
  // src/shouldRender.ts
3616
3822
  function shouldRender(component, nextProps, nextState, updateStrategy = "customDeep") {
3617
3823
  if (updateStrategy === "always") {
@@ -3626,11 +3832,11 @@ function shouldRender(component, nextProps, nextState, updateStrategy = "customD
3626
3832
  }
3627
3833
 
3628
3834
  // src/shouldRenderOptionalField.ts
3629
- var import_isObject14 = __toESM(require("lodash/isObject"), 1);
3835
+ var import_isObject15 = __toESM(require("lodash/isObject"), 1);
3630
3836
  var import_uniq2 = __toESM(require("lodash/uniq"), 1);
3631
3837
  function getSchemaTypesForXxxOf(schemas) {
3632
3838
  const allTypes = (0, import_uniq2.default)(
3633
- 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)
3634
3840
  );
3635
3841
  return allTypes.length === 1 ? allTypes[0] : allTypes;
3636
3842
  }
@@ -3912,15 +4118,14 @@ function useFileWidgetProps(value, onChange, multiple = false) {
3912
4118
  [value]
3913
4119
  );
3914
4120
  const handleChange = (0, import_react4.useCallback)(
3915
- (files) => {
3916
- processFiles(files).then((filesInfoEvent) => {
3917
- const newValue = filesInfoEvent.map((fileInfo) => fileInfo.dataURL || null);
3918
- if (multiple) {
3919
- onChange(values.concat(...newValue));
3920
- } else {
3921
- onChange(newValue[0]);
3922
- }
3923
- });
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
+ }
3924
4129
  },
3925
4130
  [values, multiple, onChange]
3926
4131
  );
@@ -3975,7 +4180,7 @@ function validationDataMerge(validationData, additionalErrorSchema, preventDupli
3975
4180
  }
3976
4181
 
3977
4182
  // src/withIdRefPrefix.ts
3978
- var import_isObject15 = __toESM(require("lodash/isObject"), 1);
4183
+ var import_isObject16 = __toESM(require("lodash/isObject"), 1);
3979
4184
  function withIdRefPrefixObject(node) {
3980
4185
  for (const key in node) {
3981
4186
  const realObj = node;
@@ -3998,32 +4203,12 @@ function withIdRefPrefix(schemaNode) {
3998
4203
  if (Array.isArray(schemaNode)) {
3999
4204
  return withIdRefPrefixArray([...schemaNode]);
4000
4205
  }
4001
- if ((0, import_isObject15.default)(schemaNode)) {
4206
+ if ((0, import_isObject16.default)(schemaNode)) {
4002
4207
  return withIdRefPrefixObject({ ...schemaNode });
4003
4208
  }
4004
4209
  return schemaNode;
4005
4210
  }
4006
4211
 
4007
- // src/nameGenerators.ts
4008
- var bracketNameGenerator = (path, idPrefix, isMultiValue) => {
4009
- if (!path || path.length === 0) {
4010
- return idPrefix;
4011
- }
4012
- const baseName = path.reduce((acc, pathUnit, index) => {
4013
- if (index === 0) {
4014
- return `${idPrefix}[${String(pathUnit)}]`;
4015
- }
4016
- return `${acc}[${String(pathUnit)}]`;
4017
- }, "");
4018
- return isMultiValue ? `${baseName}[]` : baseName;
4019
- };
4020
- var dotNotationNameGenerator = (path, idPrefix, _isMultiValue) => {
4021
- if (!path || path.length === 0) {
4022
- return idPrefix;
4023
- }
4024
- return `${idPrefix}.${path.map(String).join(".")}`;
4025
- };
4026
-
4027
4212
  // src/enums.ts
4028
4213
  var TranslatableString = /* @__PURE__ */ ((TranslatableString2) => {
4029
4214
  TranslatableString2["ArrayItemTitle"] = "Item";