@rjsf/utils 6.6.1 → 6.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (289) hide show
  1. package/LICENSE.md +201 -0
  2. package/dist/index.cjs +534 -376
  3. package/dist/index.cjs.map +4 -4
  4. package/dist/utils.esm.js +534 -376
  5. package/dist/utils.esm.js.map +4 -4
  6. package/dist/utils.umd.js +561 -400
  7. package/lib/ErrorSchemaBuilder.d.ts +1 -1
  8. package/lib/SelectedOptionDescription.d.ts +4 -0
  9. package/lib/SelectedOptionDescription.js +24 -0
  10. package/lib/SelectedOptionDescription.js.map +1 -0
  11. package/lib/allowAdditionalItems.d.ts +1 -1
  12. package/lib/allowAdditionalItems.js +1 -0
  13. package/lib/allowAdditionalItems.js.map +1 -1
  14. package/lib/asNumber.js +2 -0
  15. package/lib/asNumber.js.map +1 -1
  16. package/lib/canExpand.d.ts +1 -1
  17. package/lib/constIsAjvDataReference.d.ts +1 -1
  18. package/lib/constants.d.ts +8 -5
  19. package/lib/constants.js +10 -7
  20. package/lib/constants.js.map +1 -1
  21. package/lib/createErrorHandler.d.ts +1 -1
  22. package/lib/createErrorHandler.js +2 -6
  23. package/lib/createErrorHandler.js.map +1 -1
  24. package/lib/createSchemaUtils.d.ts +1 -1
  25. package/lib/createSchemaUtils.js +3 -1
  26. package/lib/createSchemaUtils.js.map +1 -1
  27. package/lib/dataURItoBlob.js +3 -3
  28. package/lib/dataURItoBlob.js.map +1 -1
  29. package/lib/dateRangeOptions.d.ts +1 -1
  30. package/lib/dateRangeOptions.js +8 -7
  31. package/lib/dateRangeOptions.js.map +1 -1
  32. package/lib/englishStringTranslator.d.ts +1 -1
  33. package/lib/enumOptionSelectedValue.d.ts +1 -1
  34. package/lib/enumOptionValueDecoder.d.ts +1 -1
  35. package/lib/enumOptionValueDecoder.js +1 -1
  36. package/lib/enumOptionValueDecoder.js.map +1 -1
  37. package/lib/enumOptionValueEncoder.d.ts +1 -1
  38. package/lib/enumOptionsDeselectValue.d.ts +1 -1
  39. package/lib/enumOptionsIndexForValue.d.ts +1 -1
  40. package/lib/enumOptionsIndexForValue.js.map +1 -1
  41. package/lib/enumOptionsIsSelected.d.ts +1 -1
  42. package/lib/enumOptionsSelectValue.d.ts +1 -1
  43. package/lib/enumOptionsValueForIndex.d.ts +2 -2
  44. package/lib/enumOptionsValueForIndex.js.map +1 -1
  45. package/lib/enums.d.ts +4 -0
  46. package/lib/enums.js +4 -0
  47. package/lib/enums.js.map +1 -1
  48. package/lib/findSchemaDefinition.d.ts +1 -1
  49. package/lib/findSchemaDefinition.js +15 -15
  50. package/lib/findSchemaDefinition.js.map +1 -1
  51. package/lib/getChangedFields.js +4 -6
  52. package/lib/getChangedFields.js.map +1 -1
  53. package/lib/getDateElementProps.d.ts +3 -3
  54. package/lib/getDiscriminatorFieldFromSchema.d.ts +1 -1
  55. package/lib/getDiscriminatorFieldFromSchema.js +1 -0
  56. package/lib/getDiscriminatorFieldFromSchema.js.map +1 -1
  57. package/lib/getInputProps.d.ts +1 -1
  58. package/lib/getOptionMatchingSimpleDiscriminator.d.ts +1 -1
  59. package/lib/getOptionMatchingSimpleDiscriminator.js +10 -11
  60. package/lib/getOptionMatchingSimpleDiscriminator.js.map +1 -1
  61. package/lib/getOptionValueFormat.d.ts +1 -1
  62. package/lib/getSchemaType.d.ts +1 -1
  63. package/lib/getSchemaType.js +2 -1
  64. package/lib/getSchemaType.js.map +1 -1
  65. package/lib/getSubmitButtonOptions.d.ts +1 -1
  66. package/lib/getSubmitButtonOptions.js +1 -1
  67. package/lib/getSubmitButtonOptions.js.map +1 -1
  68. package/lib/getTemplate.d.ts +1 -1
  69. package/lib/getTestIds.d.ts +1 -1
  70. package/lib/getUiOptions.d.ts +1 -1
  71. package/lib/getUiOptions.js +2 -1
  72. package/lib/getUiOptions.js.map +1 -1
  73. package/lib/getWidget.d.ts +1 -1
  74. package/lib/getWidget.js +4 -4
  75. package/lib/getWidget.js.map +1 -1
  76. package/lib/guessType.js +1 -1
  77. package/lib/guessType.js.map +1 -1
  78. package/lib/hasWidget.d.ts +1 -1
  79. package/lib/hashForSchema.d.ts +3 -1
  80. package/lib/hashForSchema.js +11 -4
  81. package/lib/hashForSchema.js.map +1 -1
  82. package/lib/idGenerators.d.ts +1 -1
  83. package/lib/index.d.ts +14 -7
  84. package/lib/index.js +5 -2
  85. package/lib/index.js.map +1 -1
  86. package/lib/isConstant.d.ts +1 -1
  87. package/lib/isCustomWidget.d.ts +1 -1
  88. package/lib/isCustomWidget.js +1 -1
  89. package/lib/isCustomWidget.js.map +1 -1
  90. package/lib/isFixedItems.d.ts +3 -3
  91. package/lib/isFixedItems.js +3 -3
  92. package/lib/isFixedItems.js.map +1 -1
  93. package/lib/isRootSchema.d.ts +1 -1
  94. package/lib/isRootSchema.js +2 -3
  95. package/lib/isRootSchema.js.map +1 -1
  96. package/lib/labelValue.d.ts +1 -1
  97. package/lib/logUnsupportedDefaultForEnum.d.ts +9 -0
  98. package/lib/logUnsupportedDefaultForEnum.js +18 -0
  99. package/lib/logUnsupportedDefaultForEnum.js.map +1 -0
  100. package/lib/lookupFromFormContext.d.ts +1 -1
  101. package/lib/mergeDefaultsWithFormData.js +6 -5
  102. package/lib/mergeDefaultsWithFormData.js.map +1 -1
  103. package/lib/mergeObjects.d.ts +4 -2
  104. package/lib/mergeObjects.js +1 -1
  105. package/lib/mergeObjects.js.map +1 -1
  106. package/lib/mergeSchemas.d.ts +4 -2
  107. package/lib/mergeSchemas.js +13 -6
  108. package/lib/mergeSchemas.js.map +1 -1
  109. package/lib/nameGenerators.d.ts +1 -1
  110. package/lib/optionsList.d.ts +1 -1
  111. package/lib/optionsList.js +22 -21
  112. package/lib/optionsList.js.map +1 -1
  113. package/lib/orderProperties.js +3 -3
  114. package/lib/orderProperties.js.map +1 -1
  115. package/lib/pad.js +1 -1
  116. package/lib/pad.js.map +1 -1
  117. package/lib/parseDateString.d.ts +1 -1
  118. package/lib/parseDateString.js +1 -1
  119. package/lib/parseDateString.js.map +1 -1
  120. package/lib/parser/ParserValidator.d.ts +2 -4
  121. package/lib/parser/ParserValidator.js +2 -0
  122. package/lib/parser/ParserValidator.js.map +1 -1
  123. package/lib/parser/index.d.ts +1 -1
  124. package/lib/parser/schemaParser.d.ts +2 -2
  125. package/lib/parser/schemaParser.js +7 -7
  126. package/lib/parser/schemaParser.js.map +1 -1
  127. package/lib/rangeSpec.d.ts +1 -2
  128. package/lib/rangeSpec.js.map +1 -1
  129. package/lib/removeOptionalEmptyObjects.d.ts +1 -1
  130. package/lib/removeOptionalEmptyObjects.js +6 -8
  131. package/lib/removeOptionalEmptyObjects.js.map +1 -1
  132. package/lib/resolveUiSchema.d.ts +1 -1
  133. package/lib/resolveUiSchema.js +16 -16
  134. package/lib/resolveUiSchema.js.map +1 -1
  135. package/lib/schema/findFieldInSchema.d.ts +1 -1
  136. package/lib/schema/findSelectedOptionInXxxOf.d.ts +1 -1
  137. package/lib/schema/findSelectedOptionInXxxOf.js +1 -3
  138. package/lib/schema/findSelectedOptionInXxxOf.js.map +1 -1
  139. package/lib/schema/getClosestMatchingOption.d.ts +1 -1
  140. package/lib/schema/getClosestMatchingOption.js +6 -9
  141. package/lib/schema/getClosestMatchingOption.js.map +1 -1
  142. package/lib/schema/getDefaultFormState.d.ts +4 -4
  143. package/lib/schema/getDefaultFormState.js +81 -43
  144. package/lib/schema/getDefaultFormState.js.map +1 -1
  145. package/lib/schema/getDisplayLabel.d.ts +1 -1
  146. package/lib/schema/getDisplayLabel.js +2 -3
  147. package/lib/schema/getDisplayLabel.js.map +1 -1
  148. package/lib/schema/getFirstMatchingOption.d.ts +1 -1
  149. package/lib/schema/getFirstMatchingOption.js +2 -2
  150. package/lib/schema/getFirstMatchingOption.js.map +1 -1
  151. package/lib/schema/getFromSchema.d.ts +1 -1
  152. package/lib/schema/index.js +9 -3
  153. package/lib/schema/index.js.map +1 -1
  154. package/lib/schema/isFilesArray.d.ts +1 -1
  155. package/lib/schema/isMultiSelect.d.ts +1 -1
  156. package/lib/schema/isMultiSelect.js.map +1 -1
  157. package/lib/schema/isSelect.d.ts +1 -1
  158. package/lib/schema/isSelect.js +1 -1
  159. package/lib/schema/isSelect.js.map +1 -1
  160. package/lib/schema/omitExtraData.d.ts +1 -1
  161. package/lib/schema/omitExtraData.js +66 -52
  162. package/lib/schema/omitExtraData.js.map +1 -1
  163. package/lib/schema/retrieveSchema.d.ts +7 -3
  164. package/lib/schema/retrieveSchema.js +83 -56
  165. package/lib/schema/retrieveSchema.js.map +1 -1
  166. package/lib/schema/sanitizeDataForNewSchema.d.ts +1 -1
  167. package/lib/schema/sanitizeDataForNewSchema.js +48 -7
  168. package/lib/schema/sanitizeDataForNewSchema.js.map +1 -1
  169. package/lib/schema/toPathSchema.d.ts +1 -1
  170. package/lib/schema/toPathSchema.js +9 -5
  171. package/lib/schema/toPathSchema.js.map +1 -1
  172. package/lib/schemaRequiresTrueValue.d.ts +1 -1
  173. package/lib/schemaRequiresTrueValue.js +4 -3
  174. package/lib/schemaRequiresTrueValue.js.map +1 -1
  175. package/lib/shallowEquals.js +2 -2
  176. package/lib/shallowEquals.js.map +1 -1
  177. package/lib/shouldRenderOptionalField.d.ts +1 -1
  178. package/lib/toConstant.d.ts +1 -1
  179. package/lib/toDateString.d.ts +1 -1
  180. package/lib/toErrorList.d.ts +1 -1
  181. package/lib/toErrorList.js +3 -3
  182. package/lib/toErrorList.js.map +1 -1
  183. package/lib/toErrorSchema.d.ts +1 -1
  184. package/lib/toFieldPathId.d.ts +1 -1
  185. package/lib/tsconfig.tsbuildinfo +1 -1
  186. package/lib/types.d.ts +63 -57
  187. package/lib/unwrapErrorHandler.d.ts +1 -1
  188. package/lib/unwrapErrorHandler.js +7 -9
  189. package/lib/unwrapErrorHandler.js.map +1 -1
  190. package/lib/useAltDateWidgetProps.d.ts +6 -6
  191. package/lib/useAltDateWidgetProps.js +3 -3
  192. package/lib/useAltDateWidgetProps.js.map +1 -1
  193. package/lib/useFileWidgetProps.d.ts +2 -2
  194. package/lib/useFileWidgetProps.js +3 -3
  195. package/lib/useFileWidgetProps.js.map +1 -1
  196. package/lib/validationDataMerge.d.ts +1 -1
  197. package/lib/withIdRefPrefix.d.ts +1 -1
  198. package/lib/withIdRefPrefix.js +12 -12
  199. package/lib/withIdRefPrefix.js.map +1 -1
  200. package/package.json +19 -19
  201. package/src/ErrorSchemaBuilder.ts +1 -1
  202. package/src/SelectedOptionDescription.tsx +48 -0
  203. package/src/allowAdditionalItems.ts +2 -1
  204. package/src/asNumber.ts +2 -0
  205. package/src/canExpand.ts +1 -1
  206. package/src/constIsAjvDataReference.ts +2 -2
  207. package/src/constants.ts +10 -7
  208. package/src/createErrorHandler.ts +6 -7
  209. package/src/createSchemaUtils.ts +4 -2
  210. package/src/dataURItoBlob.ts +3 -3
  211. package/src/dateRangeOptions.ts +9 -7
  212. package/src/englishStringTranslator.ts +1 -1
  213. package/src/enumOptionSelectedValue.ts +1 -1
  214. package/src/enumOptionValueDecoder.ts +2 -2
  215. package/src/enumOptionValueEncoder.ts +1 -1
  216. package/src/enumOptionsDeselectValue.ts +1 -1
  217. package/src/enumOptionsIndexForValue.ts +2 -2
  218. package/src/enumOptionsIsSelected.ts +1 -1
  219. package/src/enumOptionsSelectValue.ts +1 -1
  220. package/src/enumOptionsValueForIndex.ts +2 -2
  221. package/src/enums.ts +4 -0
  222. package/src/findSchemaDefinition.ts +18 -17
  223. package/src/getChangedFields.ts +5 -5
  224. package/src/getDateElementProps.ts +3 -3
  225. package/src/getDiscriminatorFieldFromSchema.ts +2 -1
  226. package/src/getInputProps.ts +1 -1
  227. package/src/getOptionMatchingSimpleDiscriminator.ts +11 -15
  228. package/src/getOptionValueFormat.ts +1 -1
  229. package/src/getSchemaType.ts +3 -2
  230. package/src/getSubmitButtonOptions.ts +3 -3
  231. package/src/getTemplate.ts +1 -1
  232. package/src/getTestIds.ts +1 -1
  233. package/src/getUiOptions.ts +10 -2
  234. package/src/getWidget.tsx +5 -6
  235. package/src/guessType.ts +1 -1
  236. package/src/hasWidget.ts +1 -1
  237. package/src/hashForSchema.ts +12 -5
  238. package/src/idGenerators.ts +1 -1
  239. package/src/index.ts +16 -5
  240. package/src/isConstant.ts +1 -1
  241. package/src/isCustomWidget.ts +2 -2
  242. package/src/isFixedItems.ts +4 -4
  243. package/src/isRootSchema.ts +3 -5
  244. package/src/labelValue.ts +1 -1
  245. package/src/logUnsupportedDefaultForEnum.ts +28 -0
  246. package/src/lookupFromFormContext.ts +1 -1
  247. package/src/mergeDefaultsWithFormData.ts +8 -7
  248. package/src/mergeObjects.ts +2 -2
  249. package/src/mergeSchemas.ts +14 -7
  250. package/src/nameGenerators.ts +1 -1
  251. package/src/optionsList.ts +21 -23
  252. package/src/orderProperties.ts +4 -4
  253. package/src/pad.ts +1 -1
  254. package/src/parseDateString.ts +2 -2
  255. package/src/parser/ParserValidator.ts +4 -4
  256. package/src/parser/index.ts +1 -1
  257. package/src/parser/schemaParser.ts +10 -9
  258. package/src/rangeSpec.ts +1 -2
  259. package/src/removeOptionalEmptyObjects.ts +8 -11
  260. package/src/resolveUiSchema.ts +32 -25
  261. package/src/schema/findFieldInSchema.ts +1 -1
  262. package/src/schema/findSelectedOptionInXxxOf.ts +17 -7
  263. package/src/schema/getClosestMatchingOption.ts +17 -11
  264. package/src/schema/getDefaultFormState.ts +104 -43
  265. package/src/schema/getDisplayLabel.ts +4 -5
  266. package/src/schema/getFirstMatchingOption.ts +3 -3
  267. package/src/schema/getFromSchema.ts +1 -1
  268. package/src/schema/index.ts +3 -0
  269. package/src/schema/isFilesArray.ts +1 -1
  270. package/src/schema/isMultiSelect.ts +7 -1
  271. package/src/schema/isSelect.ts +8 -2
  272. package/src/schema/omitExtraData.ts +73 -60
  273. package/src/schema/retrieveSchema.ts +131 -83
  274. package/src/schema/sanitizeDataForNewSchema.ts +57 -8
  275. package/src/schema/toPathSchema.ts +11 -7
  276. package/src/schemaRequiresTrueValue.ts +4 -4
  277. package/src/shallowEquals.ts +2 -2
  278. package/src/shouldRenderOptionalField.ts +1 -1
  279. package/src/toConstant.ts +1 -1
  280. package/src/toDateString.ts +1 -1
  281. package/src/toErrorList.ts +4 -4
  282. package/src/toErrorSchema.ts +1 -1
  283. package/src/toFieldPathId.ts +1 -1
  284. package/src/types.ts +92 -63
  285. package/src/unwrapErrorHandler.ts +11 -12
  286. package/src/useAltDateWidgetProps.tsx +10 -8
  287. package/src/useFileWidgetProps.ts +7 -7
  288. package/src/validationDataMerge.ts +1 -1
  289. package/src/withIdRefPrefix.ts +12 -12
package/dist/utils.umd.js CHANGED
@@ -1,8 +1,8 @@
1
1
  (function (global, factory) {
2
2
  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('lodash/isPlainObject'), require('lodash/get'), require('fast-equals'), require('fast-uri'), require('jsonpointer'), require('lodash/isEmpty'), require('lodash/isObject'), require('lodash/omit'), require('lodash/has'), require('lodash/isString'), require('lodash/flattenDeep'), require('lodash/merge'), require('lodash/set'), require('lodash/times'), require('lodash/transform'), require('lodash/uniq'), require('lodash/union'), require('lodash/isNumber'), require('@x0k/json-schema-merge'), require('@x0k/json-schema-merge/lib/array'), require('lodash/reduce'), require('lodash/isNil'), require('lodash/pick'), require('lodash/cloneDeep'), require('lodash/setWith'), require('lodash/difference'), require('lodash/keys'), require('lodash/pickBy'), require('lodash/uniqueId'), require('react'), require('react-is'), require('react/jsx-runtime'), require('lodash/toPath'), require('lodash/forEach')) :
3
3
  typeof define === 'function' && define.amd ? define(['exports', 'lodash/isPlainObject', 'lodash/get', 'fast-equals', 'fast-uri', 'jsonpointer', 'lodash/isEmpty', 'lodash/isObject', 'lodash/omit', 'lodash/has', 'lodash/isString', 'lodash/flattenDeep', 'lodash/merge', 'lodash/set', 'lodash/times', 'lodash/transform', 'lodash/uniq', 'lodash/union', 'lodash/isNumber', '@x0k/json-schema-merge', '@x0k/json-schema-merge/lib/array', 'lodash/reduce', 'lodash/isNil', 'lodash/pick', 'lodash/cloneDeep', 'lodash/setWith', 'lodash/difference', 'lodash/keys', 'lodash/pickBy', 'lodash/uniqueId', 'react', 'react-is', 'react/jsx-runtime', 'lodash/toPath', 'lodash/forEach'], factory) :
4
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global["@rjsf/utils"] = {}, global.isPlainObject2, global.get15, global.fastEquals, global.UriResolver, global.jsonpointer, global.isEmpty4, global.isObject2, global.omit, global.has5, global.isString, global.flattenDeep, global.merge, global.set, global.times, global.transform, global.uniq, global.union, global.isNumber, global.jsonSchemaMerge, global.array, global.reduce, global.isNil, global.pick, global.cloneDeep, global.setWith, global.difference, global.keys, global.pickBy, global.uniqueId, global.react, global.ReactIs, global.jsxRuntime, global.toPath, global.forEach));
5
- })(this, (function (exports, isPlainObject2, get15, fastEquals, UriResolver, jsonpointer, isEmpty4, isObject2, omit, has5, isString, flattenDeep, merge, set, times, transform, uniq, union, isNumber, jsonSchemaMerge, array, reduce, isNil, pick, cloneDeep, setWith, difference, keys, pickBy, uniqueId, react, ReactIs, jsxRuntime, toPath, forEach) { 'use strict';
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global["@rjsf/utils"] = {}, global.isPlainObject2, global.get14, global.fastEquals, global.UriResolver, global.jsonpointer, global.isEmpty4, global.isObject2, global.omit, global.has5, global.isString, global.flattenDeep, global.merge, global.set3, global.times, global.transform, global.uniq, global.union, global.isNumber, global.jsonSchemaMerge, global.array, global.reduce, global.isNil, global.pick, global.cloneDeep, global.setWith, global.difference, global.keys, global.pickBy, global.uniqueId, global.react, global.ReactIs, global.jsxRuntime, global.toPath, global.forEach));
5
+ })(this, (function (exports, isPlainObject2, get14, fastEquals, UriResolver, jsonpointer, isEmpty4, isObject2, omit, has5, isString, flattenDeep, merge, set3, times, transform, uniq, union, isNumber, jsonSchemaMerge, array, reduce, isNil, pick, cloneDeep, setWith, difference, keys, pickBy, uniqueId, react, ReactIs, jsxRuntime, toPath, forEach) { 'use strict';
6
6
 
7
7
  // src/isObject.ts
8
8
  function isObject(thing) {
@@ -49,7 +49,7 @@
49
49
  }
50
50
 
51
51
  // src/constants.ts
52
- var ADDITIONAL_PROPERTY_FLAG = "__additional_property";
52
+ var ADDITIONAL_PROPERTY_FLAG = /* @__PURE__ */ Symbol("__additional_property");
53
53
  var ADDITIONAL_PROPERTIES_KEY = "additionalProperties";
54
54
  var ALL_OF_KEY = "allOf";
55
55
  var ANY_OF_KEY = "anyOf";
@@ -71,15 +71,17 @@
71
71
  var REQUIRED_KEY = "required";
72
72
  var SUBMIT_BTN_OPTIONS_KEY = "submitButtonOptions";
73
73
  var REF_KEY = "$ref";
74
- var RJSF_REF_KEY = "__rjsf_ref";
74
+ var RJSF_REF_KEY = /* @__PURE__ */ Symbol("__rjsf_ref");
75
+ var RJSF_REF_CYCLE_KEY = /* @__PURE__ */ Symbol("__rjsf_ref_cycle");
75
76
  var SCHEMA_KEY = "$schema";
76
77
  var DEFAULT_ID_PREFIX = "root";
77
78
  var DEFAULT_ID_SEPARATOR = "_";
78
79
  var DISCRIMINATOR_PATH = ["discriminator", "propertyName"];
79
80
  var FORM_CONTEXT_NAME = "formContext";
80
81
  var LOOKUP_MAP_NAME = "layoutGridLookupMap";
81
- var RJSF_ADDITIONAL_PROPERTIES_FLAG = "__rjsf_additionalProperties";
82
- var ROOT_SCHEMA_PREFIX = "__rjsf_rootSchema";
82
+ var RJSF_PREFIX_KEY = "__rjsf";
83
+ var RJSF_ADDITIONAL_PROPERTIES_FLAG = `${RJSF_PREFIX_KEY}_additionalProperties`;
84
+ var ROOT_SCHEMA_PREFIX = `${RJSF_PREFIX_KEY}_rootSchema`;
83
85
  var UI_FIELD_KEY = "ui:field";
84
86
  var UI_WIDGET_KEY = "ui:widget";
85
87
  var UI_OPTIONS_KEY = "ui:options";
@@ -93,7 +95,7 @@
93
95
  if (!uiSchema) {
94
96
  return { ...globalOptions };
95
97
  }
96
- return Object.keys(uiSchema).filter((key) => key.indexOf("ui:") === 0).reduce(
98
+ return Object.keys(uiSchema).filter((key) => key.startsWith("ui:")).reduce(
97
99
  (options, key) => {
98
100
  const value = uiSchema[key];
99
101
  if (key === UI_WIDGET_KEY && isObject(value)) {
@@ -134,15 +136,14 @@
134
136
  }
135
137
  };
136
138
  if (Array.isArray(formData)) {
137
- return formData.reduce((acc, value, key) => {
138
- return { ...acc, [key]: createErrorHandler(value) };
139
- }, handler);
139
+ return formData.reduce((acc, value, key) => ({ ...acc, [key]: createErrorHandler(value) }), handler);
140
140
  }
141
141
  if (isPlainObject2(formData)) {
142
142
  const formObject = formData;
143
- return Object.keys(formObject).reduce((acc, key) => {
144
- return { ...acc, [key]: createErrorHandler(formObject[key]) };
145
- }, handler);
143
+ return Object.keys(formObject).reduce(
144
+ (acc, key) => ({ ...acc, [key]: createErrorHandler(formObject[key]) }),
145
+ handler
146
+ );
146
147
  }
147
148
  return handler;
148
149
  }
@@ -179,46 +180,48 @@
179
180
  return void 0;
180
181
  }
181
182
  function makeAllReferencesAbsolute(schema, baseURI) {
182
- const currentURI = get15(schema, ID_KEY, baseURI);
183
- if (REF_KEY in schema) {
184
- schema = { ...schema, [REF_KEY]: UriResolver.resolve(currentURI, schema[REF_KEY]) };
183
+ const currentURI = get14(schema, ID_KEY, baseURI);
184
+ let result = schema;
185
+ if (REF_KEY in result) {
186
+ result = { ...result, [REF_KEY]: UriResolver.resolve(currentURI, result[REF_KEY]) };
185
187
  }
186
- for (const [key, subSchema] of Object.entries(schema)) {
188
+ for (const [key, subSchema] of Object.entries(result)) {
187
189
  if (Array.isArray(subSchema)) {
188
- schema = {
189
- ...schema,
190
+ result = {
191
+ ...result,
190
192
  [key]: subSchema.map((item) => isObject2(item) ? makeAllReferencesAbsolute(item, currentURI) : item)
191
193
  };
192
194
  } else if (isObject2(subSchema)) {
193
- schema = { ...schema, [key]: makeAllReferencesAbsolute(subSchema, currentURI) };
195
+ result = { ...result, [key]: makeAllReferencesAbsolute(subSchema, currentURI) };
194
196
  }
195
197
  }
196
- return schema;
198
+ return result;
197
199
  }
198
200
  function splitKeyElementFromObject(key, object) {
199
201
  const value = object[key];
200
202
  const remaining = omit(object, [key]);
201
203
  return [remaining, value];
202
204
  }
203
- function findSchemaDefinitionRecursive($ref, rootSchema = {}, recurseList = [], baseURI = get15(rootSchema, [ID_KEY])) {
205
+ function findSchemaDefinitionRecursive($ref, rootSchema = {}, recurseList = [], baseURI = get14(rootSchema, [ID_KEY])) {
204
206
  const ref = $ref || "";
205
207
  let current = void 0;
208
+ let currentBaseURI = baseURI;
206
209
  if (ref.startsWith("#")) {
207
210
  const decodedRef = decodeURIComponent(ref.substring(1));
208
- if (baseURI === void 0 || ID_KEY in rootSchema && rootSchema[ID_KEY] === baseURI) {
211
+ if (currentBaseURI === void 0 || ID_KEY in rootSchema && rootSchema[ID_KEY] === currentBaseURI) {
209
212
  current = jsonpointer.get(rootSchema, decodedRef);
210
213
  } else if (rootSchema[SCHEMA_KEY] === JSON_SCHEMA_DRAFT_2020_12) {
211
- current = findEmbeddedSchemaRecursive(rootSchema, baseURI.replace(/\/$/, ""));
214
+ current = findEmbeddedSchemaRecursive(rootSchema, currentBaseURI.replace(/\/$/, ""));
212
215
  if (current !== void 0) {
213
216
  current = jsonpointer.get(current, decodedRef);
214
217
  }
215
218
  }
216
219
  } else if (rootSchema[SCHEMA_KEY] === JSON_SCHEMA_DRAFT_2020_12) {
217
- const resolvedRef = baseURI ? UriResolver.resolve(baseURI, ref) : ref;
220
+ const resolvedRef = currentBaseURI ? UriResolver.resolve(currentBaseURI, ref) : ref;
218
221
  const [refId, ...refAnchor] = resolvedRef.replace(/#\/?$/, "").split("#");
219
222
  current = findEmbeddedSchemaRecursive(rootSchema, refId.replace(/\/$/, ""));
220
223
  if (current !== void 0) {
221
- baseURI = current[ID_KEY];
224
+ currentBaseURI = current[ID_KEY];
222
225
  if (!isEmpty4(refAnchor)) {
223
226
  current = jsonpointer.get(current, decodeURIComponent(refAnchor.join("#")));
224
227
  }
@@ -238,25 +241,24 @@
238
241
  throw new Error(`Definition for ${firstRef} contains a circular reference through ${circularPath}`);
239
242
  }
240
243
  const [remaining, theRef] = splitKeyElementFromObject(REF_KEY, current);
241
- const subSchema = findSchemaDefinitionRecursive(theRef, rootSchema, [...recurseList, ref], baseURI);
244
+ const subSchema = findSchemaDefinitionRecursive(theRef, rootSchema, [...recurseList, ref], currentBaseURI);
242
245
  if (Object.keys(remaining).length > 0) {
243
246
  if (rootSchema[SCHEMA_KEY] === JSON_SCHEMA_DRAFT_2019_09 || rootSchema[SCHEMA_KEY] === JSON_SCHEMA_DRAFT_2020_12) {
244
247
  return { [ALL_OF_KEY]: [remaining, subSchema] };
245
- } else {
246
- return { ...remaining, ...subSchema };
247
248
  }
249
+ return { ...remaining, ...subSchema };
248
250
  }
249
251
  return subSchema;
250
252
  }
251
253
  return current;
252
254
  }
253
- function findSchemaDefinition($ref, rootSchema = {}, baseURI = get15(rootSchema, [ID_KEY])) {
255
+ function findSchemaDefinition($ref, rootSchema = {}, baseURI = get14(rootSchema, [ID_KEY])) {
254
256
  const recurseList = [];
255
257
  return findSchemaDefinitionRecursive($ref, rootSchema, recurseList, baseURI);
256
258
  }
257
259
  function getDiscriminatorFieldFromSchema(schema) {
258
260
  let discriminator;
259
- const maybeString = get15(schema, DISCRIMINATOR_PATH);
261
+ const maybeString = get14(schema, DISCRIMINATOR_PATH);
260
262
  if (isString(maybeString)) {
261
263
  discriminator = maybeString;
262
264
  } else if (maybeString !== void 0) {
@@ -279,7 +281,7 @@
279
281
  if (typeof value === "boolean") {
280
282
  return "boolean";
281
283
  }
282
- if (!isNaN(value)) {
284
+ if (typeof value === "number" && !Number.isNaN(value)) {
283
285
  return "number";
284
286
  }
285
287
  if (typeof value === "object") {
@@ -302,7 +304,7 @@
302
304
  }
303
305
  if (Array.isArray(type)) {
304
306
  if (type.length === 2 && type.includes("null")) {
305
- type = type.find((type2) => type2 !== "null");
307
+ type = type.find((t) => t !== "null");
306
308
  } else {
307
309
  type = type[0];
308
310
  }
@@ -312,40 +314,43 @@
312
314
 
313
315
  // src/mergeSchemas.ts
314
316
  function mergeSchemas(obj1, obj2) {
315
- const acc = Object.assign({}, obj1);
316
- return Object.keys(obj2).reduce((acc2, key) => {
317
+ const acc = { ...obj1 };
318
+ const result = Object.keys(obj2).reduce((accumulator, key) => {
317
319
  const left = obj1 ? obj1[key] : {}, right = obj2[key];
318
320
  if (obj1 && key in obj1 && isObject(right)) {
319
- acc2[key] = mergeSchemas(left, right);
321
+ accumulator[key] = mergeSchemas(left, right);
320
322
  } else if (obj1 && obj2 && (getSchemaType(obj1) === "object" || getSchemaType(obj2) === "object") && key === REQUIRED_KEY && Array.isArray(left) && Array.isArray(right)) {
321
- acc2[key] = union(left, right);
323
+ accumulator[key] = union(left, right);
322
324
  } else {
323
- acc2[key] = right;
325
+ accumulator[key] = right;
324
326
  }
325
- return acc2;
327
+ return accumulator;
326
328
  }, acc);
329
+ for (const sym of Object.getOwnPropertySymbols(obj2)) {
330
+ result[sym] = obj2[sym];
331
+ }
332
+ return result;
327
333
  }
328
334
  function getOptionMatchingSimpleDiscriminator(formData, options, discriminatorField) {
329
335
  if (formData && discriminatorField) {
330
- const value = get15(formData, discriminatorField);
336
+ const value = get14(formData, discriminatorField);
331
337
  if (value === void 0) {
332
- return;
338
+ return void 0;
333
339
  }
334
- for (let i = 0; i < options.length; i++) {
340
+ for (let i = 0; i < options.length; i += 1) {
335
341
  const option = options[i];
336
- const discriminator = get15(option, [PROPERTIES_KEY, discriminatorField], {});
337
- if (discriminator.type === "object" || discriminator.type === "array") {
338
- continue;
339
- }
340
- if (discriminator.const === value) {
341
- return i;
342
- }
343
- if (discriminator.enum?.includes(value)) {
344
- return i;
342
+ const discriminator = get14(option, [PROPERTIES_KEY, discriminatorField], {});
343
+ if (discriminator.type !== "object" && discriminator.type !== "array") {
344
+ if (discriminator.const === value) {
345
+ return i;
346
+ }
347
+ if (discriminator.enum?.includes(value)) {
348
+ return i;
349
+ }
345
350
  }
346
351
  }
347
352
  }
348
- return;
353
+ return void 0;
349
354
  }
350
355
 
351
356
  // src/schema/getFirstMatchingOption.ts
@@ -357,11 +362,11 @@
357
362
  if (isNumber(simpleDiscriminatorMatch)) {
358
363
  return simpleDiscriminatorMatch;
359
364
  }
360
- for (let i = 0; i < options.length; i++) {
365
+ for (let i = 0; i < options.length; i += 1) {
361
366
  const option = options[i];
362
367
  if (discriminatorField && has5(option, [PROPERTIES_KEY, discriminatorField])) {
363
- const value = get15(formData, discriminatorField);
364
- const discriminator = get15(option, [PROPERTIES_KEY, discriminatorField], {});
368
+ const value = get14(formData, discriminatorField);
369
+ const discriminator = get14(option, [PROPERTIES_KEY, discriminatorField], {});
365
370
  if (validator.isValid(discriminator, value, rootSchema)) {
366
371
  return i;
367
372
  }
@@ -382,7 +387,7 @@
382
387
  shallowClone.allOf.push(requiresAnyOf);
383
388
  augmentedSchema = shallowClone;
384
389
  } else {
385
- augmentedSchema = Object.assign({}, option, requiresAnyOf);
390
+ augmentedSchema = { ...option, ...requiresAnyOf };
386
391
  }
387
392
  delete augmentedSchema.required;
388
393
  if (validator.isValid(augmentedSchema, formData, rootSchema)) {
@@ -414,6 +419,12 @@
414
419
  resolveAnyOfOrOneOfRefs
415
420
  )[0];
416
421
  }
422
+ function normalizeBooleanSchema(schema) {
423
+ if (typeof schema !== "boolean") {
424
+ return schema;
425
+ }
426
+ return schema ? {} : { not: {} };
427
+ }
417
428
  function resolveCondition(validator, schema, rootSchema, expandAllBranches, recurseList, formData, experimental_customMergeAllOf) {
418
429
  const { if: expression, then, else: otherwise, ...resolvedSchemaLessConditional } = schema;
419
430
  const conditionValue = validator.isValid(expression, formData || {}, rootSchema);
@@ -421,10 +432,11 @@
421
432
  let schemas = [];
422
433
  if (expandAllBranches) {
423
434
  if (then && typeof then !== "boolean") {
435
+ const thenSchema = then;
424
436
  schemas = schemas.concat(
425
437
  retrieveSchemaInternal(
426
438
  validator,
427
- then,
439
+ thenSchema,
428
440
  rootSchema,
429
441
  formData,
430
442
  expandAllBranches,
@@ -434,10 +446,11 @@
434
446
  );
435
447
  }
436
448
  if (otherwise && typeof otherwise !== "boolean") {
449
+ const otherwiseSchema = otherwise;
437
450
  schemas = schemas.concat(
438
451
  retrieveSchemaInternal(
439
452
  validator,
440
- otherwise,
453
+ otherwiseSchema,
441
454
  rootSchema,
442
455
  formData,
443
456
  expandAllBranches,
@@ -447,8 +460,9 @@
447
460
  );
448
461
  }
449
462
  } else {
450
- const conditionalSchema = conditionValue ? then : otherwise;
451
- if (conditionalSchema && typeof conditionalSchema !== "boolean") {
463
+ const conditionalBranch = conditionValue ? then : otherwise;
464
+ if (conditionalBranch !== void 0) {
465
+ const conditionalSchema = normalizeBooleanSchema(conditionalBranch);
452
466
  schemas = schemas.concat(
453
467
  retrieveSchemaInternal(
454
468
  validator,
@@ -494,7 +508,7 @@
494
508
  function getMatchingPatternProperties(schema, key) {
495
509
  return Object.keys(schema.patternProperties).filter((pattern) => RegExp(pattern).test(key)).reduce(
496
510
  (obj, pattern) => {
497
- set(obj, [pattern], schema.patternProperties[pattern]);
511
+ set3(obj, [pattern], schema.patternProperties[pattern]);
498
512
  return obj;
499
513
  },
500
514
  {}
@@ -524,8 +538,8 @@
524
538
  formData,
525
539
  experimental_customMergeAllOf
526
540
  );
527
- return resolvedSchemas.flatMap((s) => {
528
- return retrieveSchemaInternal(
541
+ return resolvedSchemas.flatMap(
542
+ (s) => retrieveSchemaInternal(
529
543
  validator,
530
544
  s,
531
545
  rootSchema,
@@ -533,8 +547,8 @@
533
547
  expandAllBranches,
534
548
  recurseList,
535
549
  experimental_customMergeAllOf
536
- );
537
- });
550
+ )
551
+ );
538
552
  }
539
553
  if (ALL_OF_KEY in schema && Array.isArray(schema[ALL_OF_KEY])) {
540
554
  const allOfSchemaElements = schema.allOf.map(
@@ -572,30 +586,38 @@
572
586
  }
573
587
  return [schema];
574
588
  }
575
- function resolveAllReferences(schema, rootSchema, recurseList, baseURI, resolveAnyOfOrOneOfRefs) {
589
+ function resolveAllReferences(schema, rootSchema, recurseList, baseURI, resolveAnyOfOrOneOfRefs, markCycleOnDetection = false) {
576
590
  if (!isObject(schema)) {
577
591
  return schema;
578
592
  }
579
593
  let resolvedSchema = schema;
594
+ let currentBaseURI = baseURI;
580
595
  if (REF_KEY in resolvedSchema) {
581
596
  const { $ref, ...localSchema } = resolvedSchema;
582
597
  if (recurseList.includes($ref)) {
583
- return resolvedSchema;
598
+ return markCycleOnDetection ? { ...resolvedSchema, [RJSF_REF_CYCLE_KEY]: true } : resolvedSchema;
584
599
  }
585
600
  recurseList.push($ref);
586
- const refSchema = findSchemaDefinition($ref, rootSchema, baseURI);
601
+ const refSchema = findSchemaDefinition($ref, rootSchema, currentBaseURI);
587
602
  resolvedSchema = { ...refSchema, ...localSchema, [RJSF_REF_KEY]: $ref };
588
603
  if (ID_KEY in resolvedSchema) {
589
- baseURI = resolvedSchema[ID_KEY];
604
+ currentBaseURI = resolvedSchema[ID_KEY];
590
605
  }
591
606
  }
592
607
  if (PROPERTIES_KEY in resolvedSchema) {
593
608
  const childrenLists = [];
594
609
  const updatedProps = transform(
595
610
  resolvedSchema[PROPERTIES_KEY],
596
- (result, value, key) => {
611
+ (acc, value, key) => {
597
612
  const childList = [...recurseList];
598
- result[key] = resolveAllReferences(value, rootSchema, childList, baseURI, resolveAnyOfOrOneOfRefs);
613
+ acc[key] = resolveAllReferences(
614
+ value,
615
+ rootSchema,
616
+ childList,
617
+ currentBaseURI,
618
+ resolveAnyOfOrOneOfRefs,
619
+ !resolveAnyOfOrOneOfRefs
620
+ );
599
621
  childrenLists.push(childList);
600
622
  },
601
623
  {}
@@ -606,7 +628,14 @@
606
628
  if (ITEMS_KEY in resolvedSchema && !Array.isArray(resolvedSchema.items) && typeof resolvedSchema.items !== "boolean") {
607
629
  resolvedSchema = {
608
630
  ...resolvedSchema,
609
- items: resolveAllReferences(resolvedSchema.items, rootSchema, recurseList, baseURI, resolveAnyOfOrOneOfRefs)
631
+ // Array items are only rendered when data exists, so a $ref cycle here does NOT cause an infinite render.
632
+ items: resolveAllReferences(
633
+ resolvedSchema.items,
634
+ rootSchema,
635
+ recurseList,
636
+ currentBaseURI,
637
+ resolveAnyOfOrOneOfRefs
638
+ )
610
639
  };
611
640
  }
612
641
  if (resolveAnyOfOrOneOfRefs) {
@@ -623,7 +652,7 @@
623
652
  resolvedSchema = {
624
653
  ...resolvedSchema,
625
654
  [key]: schemas.map(
626
- (s) => resolveAllReferences(s, rootSchema, recurseList, baseURI, resolveAnyOfOrOneOfRefs)
655
+ (s) => resolveAllReferences(s, rootSchema, recurseList, currentBaseURI, resolveAnyOfOrOneOfRefs)
627
656
  )
628
657
  };
629
658
  }
@@ -647,10 +676,10 @@
647
676
  validator,
648
677
  { [ALL_OF_KEY]: Object.values(matchingProperties) },
649
678
  rootSchema,
650
- get15(formData, [key]),
679
+ get14(formData, [key]),
651
680
  experimental_customMergeAllOf
652
681
  );
653
- set(schema.properties, [key, ADDITIONAL_PROPERTY_FLAG], true);
682
+ schema.properties[key][ADDITIONAL_PROPERTY_FLAG] = true;
654
683
  return;
655
684
  }
656
685
  }
@@ -660,9 +689,9 @@
660
689
  if (REF_KEY in schema.additionalProperties) {
661
690
  additionalProperties = retrieveSchema(
662
691
  validator,
663
- { [REF_KEY]: get15(schema.additionalProperties, [REF_KEY]) },
692
+ { [REF_KEY]: get14(schema.additionalProperties, [REF_KEY]) },
664
693
  rootSchema,
665
- formData,
694
+ get14(formData, [key]),
666
695
  experimental_customMergeAllOf
667
696
  );
668
697
  } else if ("type" in schema.additionalProperties) {
@@ -673,16 +702,16 @@
673
702
  ...schema.additionalProperties
674
703
  };
675
704
  } else {
676
- additionalProperties = { type: guessType(get15(formData, [key])) };
705
+ additionalProperties = { type: guessType(get14(formData, [key])) };
677
706
  }
678
707
  } else {
679
- additionalProperties = { type: guessType(get15(formData, [key])) };
708
+ additionalProperties = { type: guessType(get14(formData, [key])) };
680
709
  }
681
710
  schema.properties[key] = additionalProperties;
682
- set(schema.properties, [key, ADDITIONAL_PROPERTY_FLAG], true);
711
+ schema.properties[key][ADDITIONAL_PROPERTY_FLAG] = true;
683
712
  } else {
684
713
  schema.properties[key] = { type: "null" };
685
- set(schema.properties, [key, ADDITIONAL_PROPERTY_FLAG], true);
714
+ schema.properties[key][ADDITIONAL_PROPERTY_FLAG] = true;
686
715
  }
687
716
  });
688
717
  return schema;
@@ -725,17 +754,26 @@
725
754
  try {
726
755
  const withContainsSchemas = [];
727
756
  const withoutContainsSchemas = [];
728
- resolvedSchema.allOf?.forEach((s2) => {
729
- if (typeof s2 === "object" && s2.contains) {
730
- withContainsSchemas.push(s2);
757
+ const allOfSymbols = {};
758
+ resolvedSchema.allOf?.forEach((allOfItem) => {
759
+ if (typeof allOfItem === "object" && allOfItem.contains) {
760
+ withContainsSchemas.push(allOfItem);
731
761
  } else {
732
- withoutContainsSchemas.push(s2);
762
+ withoutContainsSchemas.push(allOfItem);
763
+ for (const sym of Object.getOwnPropertySymbols(allOfItem)) {
764
+ if (!(sym in allOfSymbols)) {
765
+ allOfSymbols[sym] = allOfItem[sym];
766
+ }
767
+ }
733
768
  }
734
769
  });
735
770
  if (withContainsSchemas.length) {
736
771
  resolvedSchema = { ...resolvedSchema, allOf: withoutContainsSchemas };
737
772
  }
738
773
  resolvedSchema = experimental_customMergeAllOf ? experimental_customMergeAllOf(resolvedSchema) : mergeAllOf(resolvedSchema);
774
+ for (const sym of Object.getOwnPropertySymbols(allOfSymbols)) {
775
+ resolvedSchema[sym] = allOfSymbols[sym];
776
+ }
739
777
  if (withContainsSchemas.length) {
740
778
  resolvedSchema.allOf = withContainsSchemas;
741
779
  }
@@ -747,18 +785,18 @@
747
785
  }
748
786
  if (PROPERTIES_KEY in resolvedSchema && PATTERN_PROPERTIES_KEY in resolvedSchema) {
749
787
  resolvedSchema = Object.keys(resolvedSchema.properties).reduce(
750
- (schema2, key) => {
751
- const matchingProperties = getMatchingPatternProperties(schema2, key);
788
+ (acc, key) => {
789
+ const matchingProperties = getMatchingPatternProperties(acc, key);
752
790
  if (!isEmpty4(matchingProperties)) {
753
- schema2.properties[key] = retrieveSchema(
791
+ acc.properties[key] = retrieveSchema(
754
792
  validator,
755
- { allOf: [schema2.properties[key], ...Object.values(matchingProperties)] },
793
+ { allOf: [acc.properties[key], ...Object.values(matchingProperties)] },
756
794
  rootSchema,
757
- get15(rawFormData, [key]),
795
+ get14(rawFormData, [key]),
758
796
  experimental_customMergeAllOf
759
797
  );
760
798
  }
761
- return schema2;
799
+ return acc;
762
800
  },
763
801
  {
764
802
  ...resolvedSchema,
@@ -790,23 +828,21 @@
790
828
  if (anyOrOneOf) {
791
829
  const formData = rawFormData === void 0 && expandAllBranches ? {} : rawFormData;
792
830
  const discriminator = getDiscriminatorFieldFromSchema(schema);
793
- anyOrOneOf = anyOrOneOf.map((s) => {
794
- return resolveAllReferences(s, rootSchema, []);
795
- });
831
+ anyOrOneOf = anyOrOneOf.map((s) => resolveAllReferences(s, rootSchema, []));
796
832
  const option = getFirstMatchingOption(validator, formData, anyOrOneOf, rootSchema, discriminator);
797
833
  if (expandAllBranches) {
798
834
  const relaxed = relaxOptionsForScoring(anyOrOneOf, false, rootSchema);
799
835
  getFirstMatchingOption(validator, formData, relaxed, rootSchema, discriminator);
800
836
  return anyOrOneOf.map((item) => mergeSchemas(remaining, item));
801
837
  }
802
- schema = mergeSchemas(remaining, anyOrOneOf[option]);
838
+ return [mergeSchemas(remaining, anyOrOneOf[option])];
803
839
  }
804
840
  return [schema];
805
841
  }
806
842
  function relaxOptionsForScoring(options, resolveRefs = false, rootSchema) {
807
843
  return options.map((d) => {
808
844
  if (!isObject(d)) {
809
- return d ? {} : { not: {} };
845
+ return normalizeBooleanSchema(d);
810
846
  }
811
847
  const schema = resolveRefs && rootSchema ? resolveAllReferences(d, rootSchema, []) : d;
812
848
  return schema.additionalProperties === false ? { ...schema, additionalProperties: true } : schema;
@@ -837,43 +873,39 @@
837
873
  function processDependencies(validator, dependencies, resolvedSchema, rootSchema, expandAllBranches, recurseList, formData, experimental_customMergeAllOf) {
838
874
  let schemas = [resolvedSchema];
839
875
  for (const dependencyKey in dependencies) {
840
- if (!expandAllBranches && get15(formData, [dependencyKey]) === void 0) {
841
- continue;
842
- }
843
- if (resolvedSchema.properties && !(dependencyKey in resolvedSchema.properties)) {
844
- continue;
845
- }
846
- const [remainingDependencies, dependencyValue] = splitKeyElementFromObject(
847
- dependencyKey,
848
- dependencies
849
- );
850
- if (Array.isArray(dependencyValue)) {
851
- schemas[0] = withDependentProperties(resolvedSchema, dependencyValue);
852
- } else if (isObject(dependencyValue)) {
853
- schemas = withDependentSchema(
854
- validator,
855
- resolvedSchema,
856
- rootSchema,
876
+ if ((expandAllBranches || get14(formData, [dependencyKey]) !== void 0) && (!resolvedSchema.properties || dependencyKey in resolvedSchema.properties)) {
877
+ const [remainingDependencies, dependencyValue] = splitKeyElementFromObject(
857
878
  dependencyKey,
858
- dependencyValue,
859
- expandAllBranches,
860
- recurseList,
861
- formData,
862
- experimental_customMergeAllOf
879
+ dependencies
880
+ );
881
+ if (Array.isArray(dependencyValue)) {
882
+ schemas[0] = withDependentProperties(resolvedSchema, dependencyValue);
883
+ } else if (isObject(dependencyValue)) {
884
+ schemas = withDependentSchema(
885
+ validator,
886
+ resolvedSchema,
887
+ rootSchema,
888
+ dependencyKey,
889
+ dependencyValue,
890
+ expandAllBranches,
891
+ recurseList,
892
+ formData,
893
+ experimental_customMergeAllOf
894
+ );
895
+ }
896
+ return schemas.flatMap(
897
+ (schema) => processDependencies(
898
+ validator,
899
+ remainingDependencies,
900
+ schema,
901
+ rootSchema,
902
+ expandAllBranches,
903
+ recurseList,
904
+ formData,
905
+ experimental_customMergeAllOf
906
+ )
863
907
  );
864
908
  }
865
- return schemas.flatMap(
866
- (schema) => processDependencies(
867
- validator,
868
- remainingDependencies,
869
- schema,
870
- rootSchema,
871
- expandAllBranches,
872
- recurseList,
873
- formData,
874
- experimental_customMergeAllOf
875
- )
876
- );
877
909
  }
878
910
  return schemas;
879
911
  }
@@ -896,9 +928,9 @@
896
928
  );
897
929
  return dependentSchemas.flatMap((dependent) => {
898
930
  const { oneOf, ...dependentSchema } = dependent;
899
- schema = mergeSchemas(schema, dependentSchema);
931
+ const mergedSchema = mergeSchemas(schema, dependentSchema);
900
932
  if (oneOf === void 0) {
901
- return schema;
933
+ return mergedSchema;
902
934
  }
903
935
  const resolvedOneOfs = oneOf.map((subschema) => {
904
936
  if (typeof subschema === "boolean" || !(REF_KEY in subschema)) {
@@ -910,7 +942,7 @@
910
942
  return allPermutations.flatMap(
911
943
  (resolvedOneOf) => withExactlyOneSubschema(
912
944
  validator,
913
- schema,
945
+ mergedSchema,
914
946
  rootSchema,
915
947
  dependencyKey,
916
948
  resolvedOneOf,
@@ -924,7 +956,7 @@
924
956
  }
925
957
  function withExactlyOneSubschema(validator, schema, rootSchema, dependencyKey, oneOf, expandAllBranches, recurseList, formData, experimental_customMergeAllOf) {
926
958
  const validSubschemas = oneOf.filter((subschema) => {
927
- if (typeof subschema === "boolean" || !subschema || !subschema.properties) {
959
+ if (typeof subschema === "boolean" || !subschema?.properties) {
928
960
  return false;
929
961
  }
930
962
  const { [dependencyKey]: conditionPropertySchema } = subschema.properties;
@@ -956,7 +988,7 @@
956
988
  recurseList,
957
989
  experimental_customMergeAllOf
958
990
  );
959
- return schemas.map((s2) => mergeSchemas(schema, s2));
991
+ return schemas.map((resolvedSubschema) => mergeSchemas(schema, resolvedSubschema));
960
992
  });
961
993
  }
962
994
 
@@ -968,14 +1000,18 @@
968
1000
  const xxxOfs = schema[xxx].map(
969
1001
  (xxxOf) => retrieveSchema(validator, xxxOf, rootSchema, formData, experimental_customMergeAllOf)
970
1002
  );
971
- const data = get15(formData, selectorField);
1003
+ const data = get14(formData, selectorField);
972
1004
  if (data !== void 0) {
973
- return xxxOfs.find((xxx2) => {
974
- return deepEquals_default(
975
- get15(xxx2, [PROPERTIES_KEY, selectorField, DEFAULT_KEY], get15(xxx2, [PROPERTIES_KEY, selectorField, CONST_KEY])),
1005
+ return xxxOfs.find(
1006
+ (xxxOfOption) => deepEquals_default(
1007
+ get14(
1008
+ xxxOfOption,
1009
+ [PROPERTIES_KEY, selectorField, DEFAULT_KEY],
1010
+ get14(xxxOfOption, [PROPERTIES_KEY, selectorField, CONST_KEY])
1011
+ ),
976
1012
  data
977
- );
978
- });
1013
+ )
1014
+ );
979
1015
  }
980
1016
  }
981
1017
  return void 0;
@@ -991,7 +1027,7 @@
991
1027
  const pathList = Array.isArray(path) ? [...path] : path.split(".");
992
1028
  const [part, ...nestedPath] = pathList;
993
1029
  if (part !== void 0 && part !== "" && has5(fieldSchema, part)) {
994
- fieldSchema = get15(fieldSchema, part);
1030
+ fieldSchema = get14(fieldSchema, part);
995
1031
  return getFromSchemaInternal(
996
1032
  validator,
997
1033
  rootSchema,
@@ -1034,7 +1070,7 @@
1034
1070
  parentField,
1035
1071
  fieldNameKey,
1036
1072
  ONE_OF_KEY,
1037
- get15(formData, subPath),
1073
+ get14(formData, subPath),
1038
1074
  experimental_customMergeAllOf
1039
1075
  );
1040
1076
  } else if (has5(parentField, ANY_OF_KEY)) {
@@ -1044,7 +1080,7 @@
1044
1080
  parentField,
1045
1081
  fieldNameKey,
1046
1082
  ANY_OF_KEY,
1047
- get15(formData, subPath),
1083
+ get14(formData, subPath),
1048
1084
  experimental_customMergeAllOf
1049
1085
  );
1050
1086
  }
@@ -1112,7 +1148,7 @@
1112
1148
  totalScore += reduce(
1113
1149
  schema.properties,
1114
1150
  (score, value, key) => {
1115
- const formValue = get15(formData, key);
1151
+ const formValue = get14(formData, key);
1116
1152
  if (typeof value === "boolean") {
1117
1153
  return score;
1118
1154
  }
@@ -1133,23 +1169,21 @@
1133
1169
  );
1134
1170
  }
1135
1171
  if ((has5(value, ONE_OF_KEY) || has5(value, ANY_OF_KEY)) && formValue) {
1136
- const key2 = has5(value, ONE_OF_KEY) ? ONE_OF_KEY : ANY_OF_KEY;
1172
+ const xxxOfKey = has5(value, ONE_OF_KEY) ? ONE_OF_KEY : ANY_OF_KEY;
1137
1173
  const discriminator = getDiscriminatorFieldFromSchema(value);
1138
1174
  return score + getClosestMatchingOption(
1139
1175
  validator,
1140
1176
  rootSchema,
1141
1177
  formValue,
1142
- get15(value, key2),
1178
+ get14(value, xxxOfKey),
1143
1179
  -1,
1144
1180
  discriminator,
1145
1181
  experimental_customMergeAllOf
1146
1182
  );
1147
1183
  }
1148
1184
  if (value.type === "object") {
1149
- if (isObject2(formValue)) {
1150
- score += 1;
1151
- }
1152
- return score + calculateIndexScore(validator, rootSchema, value, formValue, experimental_customMergeAllOf);
1185
+ const structureBoost = isObject2(formValue) ? 1 : 0;
1186
+ return score + structureBoost + calculateIndexScore(validator, rootSchema, value, formValue, experimental_customMergeAllOf);
1153
1187
  }
1154
1188
  if (value.type === guessType(formValue)) {
1155
1189
  let newScore = score + 1;
@@ -1171,9 +1205,7 @@
1171
1205
  return totalScore;
1172
1206
  }
1173
1207
  function getClosestMatchingOption(validator, rootSchema, formData, options, selectedOption = -1, discriminatorField, experimental_customMergeAllOf) {
1174
- const resolvedOptions = options.map((option) => {
1175
- return resolveAllReferences(option, rootSchema, []);
1176
- });
1208
+ const resolvedOptions = options.map((option) => resolveAllReferences(option, rootSchema, []));
1177
1209
  const simpleDiscriminatorMatch = getOptionMatchingSimpleDiscriminator(formData, options, discriminatorField);
1178
1210
  if (isNumber(simpleDiscriminatorMatch)) {
1179
1211
  return simpleDiscriminatorMatch;
@@ -1224,7 +1256,7 @@
1224
1256
 
1225
1257
  // src/isFixedItems.ts
1226
1258
  function isFixedItems(schema) {
1227
- return Array.isArray(schema.items) && schema.items.length > 0 && schema.items.every((item) => isObject(item));
1259
+ return Array.isArray(schema.items) && schema.items.every((item) => isObject(item));
1228
1260
  }
1229
1261
  function mergeDefaultsWithFormData(defaults, formData, mergeExtraArrayDefaults = false, defaultSupercedesUndefined = false, overrideFormDataWithDefaults = false) {
1230
1262
  if (Array.isArray(formData)) {
@@ -1250,23 +1282,23 @@
1250
1282
  }
1251
1283
  if (isObject(formData)) {
1252
1284
  const acc = Object.assign({}, defaults);
1253
- return Object.keys(formData).reduce((acc2, key) => {
1254
- const keyValue = get15(formData, key);
1285
+ return Object.keys(formData).reduce((accumulator, key) => {
1286
+ const keyValue = get14(formData, key);
1255
1287
  const keyExistsInDefaults = isObject(defaults) && key in defaults;
1256
1288
  const keyExistsInFormData = key in formData;
1257
- const keyDefault = get15(defaults, key) ?? {};
1289
+ const keyDefault = get14(defaults, key) ?? {};
1258
1290
  const defaultValueIsNestedObject = keyExistsInDefaults && isObject(keyDefault) && Object.values(keyDefault).some((v) => isObject(v));
1259
- const keyDefaultIsObject = keyExistsInDefaults && isObject(get15(defaults, key));
1291
+ const keyDefaultIsObject = keyExistsInDefaults && isObject(get14(defaults, key));
1260
1292
  const keyHasFormDataObject = keyExistsInFormData && isObject(keyValue);
1261
1293
  if (keyDefaultIsObject && keyHasFormDataObject && !defaultValueIsNestedObject) {
1262
- acc2[key] = {
1263
- ...get15(defaults, key),
1294
+ accumulator[key] = {
1295
+ ...get14(defaults, key),
1264
1296
  ...keyValue
1265
1297
  };
1266
- return acc2;
1298
+ return accumulator;
1267
1299
  }
1268
- acc2[key] = mergeDefaultsWithFormData(
1269
- get15(defaults, key),
1300
+ accumulator[key] = mergeDefaultsWithFormData(
1301
+ get14(defaults, key),
1270
1302
  keyValue,
1271
1303
  mergeExtraArrayDefaults,
1272
1304
  defaultSupercedesUndefined,
@@ -1274,10 +1306,10 @@
1274
1306
  // Or if the key value doesn't exist in formData
1275
1307
  overrideFormDataWithDefaults && (keyExistsInDefaults || !keyExistsInFormData)
1276
1308
  );
1277
- return acc2;
1309
+ return acc;
1278
1310
  }, acc);
1279
1311
  }
1280
- if (defaultSupercedesUndefined && (!(defaults === void 0) && isNil(formData) || typeof formData === "number" && isNaN(formData)) || overrideFormDataWithDefaults && !isNil(formData)) {
1312
+ if (defaultSupercedesUndefined && (!(defaults === void 0) && isNil(formData) || typeof formData === "number" && Number.isNaN(formData)) || overrideFormDataWithDefaults && !isNil(formData)) {
1281
1313
  return defaults;
1282
1314
  }
1283
1315
  return formData;
@@ -1306,7 +1338,7 @@
1306
1338
  }
1307
1339
  return acc;
1308
1340
  },
1309
- Object.assign({}, obj1)
1341
+ { ...obj1 }
1310
1342
  );
1311
1343
  }
1312
1344
 
@@ -1366,18 +1398,18 @@
1366
1398
  const { optionsSchemaSelector = selectorField } = getUiOptions(uiSchema);
1367
1399
  selectorField = optionsSchemaSelector;
1368
1400
  }
1369
- return altSchemas && altSchemas.map((aSchemaDef, index) => {
1401
+ return altSchemas?.map((aSchemaDef, index) => {
1370
1402
  const { title } = getUiOptions(altUiSchemas?.[index]);
1371
1403
  const aSchema = aSchemaDef;
1372
1404
  let value;
1373
1405
  let label = title;
1374
1406
  if (selectorField) {
1375
- const innerSchema = get15(aSchema, [PROPERTIES_KEY, selectorField], {});
1376
- value = get15(innerSchema, DEFAULT_KEY, get15(innerSchema, CONST_KEY));
1377
- label = label || innerSchema?.title || aSchema.title || String(value);
1407
+ const innerSchema = get14(aSchema, [PROPERTIES_KEY, selectorField], {});
1408
+ value = get14(innerSchema, DEFAULT_KEY, get14(innerSchema, CONST_KEY));
1409
+ label = label ?? innerSchema?.title ?? aSchema.title ?? String(value);
1378
1410
  } else {
1379
1411
  value = toConstant(aSchema);
1380
- label = label || aSchema.title || String(value);
1412
+ label = label ?? aSchema.title ?? String(value);
1381
1413
  }
1382
1414
  return {
1383
1415
  schema: aSchema,
@@ -1395,7 +1427,7 @@
1395
1427
  return true;
1396
1428
  }
1397
1429
  if (Array.isArray(altSchemas)) {
1398
- return altSchemas.every((altSchemas2) => typeof altSchemas2 !== "boolean" && isConstant(altSchemas2));
1430
+ return altSchemas.every((altSchema) => typeof altSchema !== "boolean" && isConstant(altSchema));
1399
1431
  }
1400
1432
  return false;
1401
1433
  }
@@ -1431,23 +1463,23 @@
1431
1463
  const shouldReturnNullAsDefault = Array.isArray(type) && type.includes("null") && isEmpty4(computedDefault) && schemaDefault === null;
1432
1464
  return shouldReturnNullAsDefault ? null : computedDefault;
1433
1465
  }
1434
- function maybeAddDefaultToObject(obj, key, computedDefault, includeUndefinedValues, isParentRequired, requiredFields = [], experimental_defaultFormStateBehavior = {}, isConst = false, isNullType = false) {
1466
+ function maybeAddDefaultToObject(acc, key, computedDefault, includeUndefinedValues, isParentRequired, requiredFields = [], experimental_defaultFormStateBehavior = {}, isConst = false, isNullType = false) {
1435
1467
  const { emptyObjectFields = "populateAllDefaults" } = experimental_defaultFormStateBehavior;
1436
1468
  if (includeUndefinedValues === true || isConst) {
1437
- obj[key] = computedDefault;
1469
+ acc[key] = computedDefault;
1438
1470
  } else if (includeUndefinedValues === "excludeObjectChildren") {
1439
1471
  if (isNullType && computedDefault !== void 0 || !isObject(computedDefault) || !isEmpty4(computedDefault)) {
1440
- obj[key] = computedDefault;
1472
+ acc[key] = computedDefault;
1441
1473
  }
1442
1474
  } else if (emptyObjectFields !== "skipDefaults") {
1443
1475
  const isSelfOrParentRequired = isParentRequired === void 0 ? requiredFields.includes(key) : isParentRequired;
1444
1476
  if (isObject(computedDefault)) {
1445
1477
  if (emptyObjectFields === "skipEmptyDefaults") {
1446
1478
  if (!isEmpty4(computedDefault)) {
1447
- obj[key] = computedDefault;
1479
+ acc[key] = computedDefault;
1448
1480
  }
1449
1481
  } else if ((!isEmpty4(computedDefault) || requiredFields.includes(key)) && (isSelfOrParentRequired || emptyObjectFields !== "populateRequiredDefaults")) {
1450
- obj[key] = computedDefault;
1482
+ acc[key] = computedDefault;
1451
1483
  }
1452
1484
  } else if (
1453
1485
  // Store computedDefault if it's a defined primitive (e.g., true) and satisfies certain conditions
@@ -1456,7 +1488,7 @@
1456
1488
  // Or if isSelfOrParentRequired is 'true' and the key is a required field
1457
1489
  computedDefault !== void 0 && (emptyObjectFields === "populateAllDefaults" || emptyObjectFields === "skipEmptyDefaults" || isSelfOrParentRequired && requiredFields.includes(key))
1458
1490
  ) {
1459
- obj[key] = computedDefault;
1491
+ acc[key] = computedDefault;
1460
1492
  }
1461
1493
  }
1462
1494
  }
@@ -1467,8 +1499,8 @@
1467
1499
  rootSchema = {},
1468
1500
  includeUndefinedValues = false,
1469
1501
  _recurseList = [],
1470
- experimental_defaultFormStateBehavior = void 0,
1471
- experimental_customMergeAllOf = void 0,
1502
+ experimental_defaultFormStateBehavior,
1503
+ experimental_customMergeAllOf,
1472
1504
  required,
1473
1505
  shouldMergeDefaultsIntoFormData = false,
1474
1506
  initialDefaultsGenerated
@@ -1476,14 +1508,19 @@
1476
1508
  let formData = isObject(rawFormData) ? rawFormData : {};
1477
1509
  const schema = isObject(rawSchema) ? rawSchema : {};
1478
1510
  let defaults = parentDefaults;
1511
+ const preferParentDefaults = defaults && experimental_defaultFormStateBehavior?.nestedDefaultsPrecedence === "ancestorWins";
1479
1512
  let schemaToCompute = null;
1480
1513
  let experimental_dfsb_to_compute = experimental_defaultFormStateBehavior;
1481
1514
  let updatedRecurseList = _recurseList;
1482
1515
  if (schema[CONST_KEY] !== void 0 && experimental_defaultFormStateBehavior?.constAsDefaults !== "never" && !constIsAjvDataReference(schema)) {
1483
1516
  defaults = schema[CONST_KEY];
1484
1517
  } else if (isObject(defaults) && isObject(schema.default) && !schema[ANY_OF_KEY] && !schema[ONE_OF_KEY] && !schema[REF_KEY]) {
1485
- defaults = mergeObjects(defaults, schema.default);
1486
- } else if (DEFAULT_KEY in schema && !schema[ANY_OF_KEY] && !schema[ONE_OF_KEY] && !schema[REF_KEY]) {
1518
+ if (preferParentDefaults) {
1519
+ defaults = mergeObjects(schema.default, defaults);
1520
+ } else {
1521
+ defaults = mergeObjects(defaults, schema.default);
1522
+ }
1523
+ } else if (DEFAULT_KEY in schema && !preferParentDefaults && !schema[ANY_OF_KEY] && !schema[ONE_OF_KEY] && !schema[REF_KEY]) {
1487
1524
  defaults = schema.default;
1488
1525
  } else if (REF_KEY in schema) {
1489
1526
  const refName = schema[REF_KEY];
@@ -1512,8 +1549,8 @@
1512
1549
  defaultFormData,
1513
1550
  experimental_customMergeAllOf
1514
1551
  );
1515
- schemaToCompute = resolvedSchema[0];
1516
- } else if (isFixedItems(schema)) {
1552
+ [schemaToCompute] = resolvedSchema;
1553
+ } else if (isFixedItems(schema) && !preferParentDefaults) {
1517
1554
  defaults = schema.items.map(
1518
1555
  (itemSchema, idx) => computeDefaults(validator, itemSchema, {
1519
1556
  rootSchema,
@@ -1609,16 +1646,36 @@
1609
1646
  return defaultsWithFormData;
1610
1647
  }
1611
1648
  function ensureFormDataMatchingSchema(validator, schema, rootSchema, formData, experimental_defaultFormStateBehavior, experimental_customMergeAllOf) {
1612
- const isSelectField = !isConstant(schema) && isSelect(validator, schema, rootSchema, experimental_customMergeAllOf);
1649
+ const shouldRetrieveAllOf = experimental_defaultFormStateBehavior?.allOf === "populateDefaults" && ALL_OF_KEY in schema;
1650
+ const schemaToMatch = shouldRetrieveAllOf ? retrieveSchema(validator, schema, rootSchema, formData, experimental_customMergeAllOf) : schema;
1651
+ const isSelectField = !isConstant(schemaToMatch) && isSelect(validator, schemaToMatch, rootSchema, experimental_customMergeAllOf);
1613
1652
  let validFormData = formData;
1614
1653
  if (isSelectField) {
1615
- const getOptionsList = optionsList(schema);
1654
+ const getOptionsList = optionsList(schemaToMatch);
1616
1655
  const isValid = getOptionsList?.some((option) => deepEquals_default(option.value, formData));
1617
1656
  validFormData = isValid ? formData : void 0;
1618
1657
  }
1619
- const constTakesPrecedence = schema[CONST_KEY] && experimental_defaultFormStateBehavior?.constAsDefaults === "always";
1658
+ const constTakesPrecedence = schemaToMatch[CONST_KEY] && experimental_defaultFormStateBehavior?.constAsDefaults === "always";
1620
1659
  if (constTakesPrecedence) {
1621
- validFormData = schema.const;
1660
+ validFormData = schemaToMatch.const;
1661
+ } else if (isObject(validFormData) && isObject(schemaToMatch.properties)) {
1662
+ validFormData = Object.keys(schemaToMatch.properties).reduce(
1663
+ (acc, key) => {
1664
+ const propertySchema = get14(schemaToMatch, [PROPERTIES_KEY, key], {});
1665
+ if (key in acc && (shouldRetrieveAllOf || isObject(propertySchema) && ALL_OF_KEY in propertySchema)) {
1666
+ acc[key] = ensureFormDataMatchingSchema(
1667
+ validator,
1668
+ propertySchema,
1669
+ rootSchema,
1670
+ get14(acc, key),
1671
+ experimental_defaultFormStateBehavior,
1672
+ experimental_customMergeAllOf
1673
+ );
1674
+ }
1675
+ return acc;
1676
+ },
1677
+ { ...validFormData }
1678
+ );
1622
1679
  }
1623
1680
  return validFormData;
1624
1681
  }
@@ -1627,8 +1684,8 @@
1627
1684
  rootSchema = {},
1628
1685
  includeUndefinedValues = false,
1629
1686
  _recurseList = [],
1630
- experimental_defaultFormStateBehavior = void 0,
1631
- experimental_customMergeAllOf = void 0,
1687
+ experimental_defaultFormStateBehavior,
1688
+ experimental_customMergeAllOf,
1632
1689
  required,
1633
1690
  shouldMergeDefaultsIntoFormData,
1634
1691
  initialDefaultsGenerated
@@ -1641,7 +1698,7 @@
1641
1698
  const parentConst = retrievedSchema[CONST_KEY];
1642
1699
  const objectDefaults = Object.keys(retrievedSchema.properties || {}).reduce(
1643
1700
  (acc, key) => {
1644
- const propertySchema = get15(retrievedSchema, [PROPERTIES_KEY, key], {});
1701
+ const propertySchema = get14(retrievedSchema, [PROPERTIES_KEY, key], {});
1645
1702
  const hasParentConst = isObject(parentConst) && parentConst[key] !== void 0;
1646
1703
  const hasConst = (isObject(propertySchema) && CONST_KEY in propertySchema || hasParentConst) && experimental_defaultFormStateBehavior?.constAsDefaults !== "never" && !constIsAjvDataReference(propertySchema);
1647
1704
  const computedDefault = computeDefaults(validator, propertySchema, {
@@ -1650,8 +1707,8 @@
1650
1707
  experimental_defaultFormStateBehavior,
1651
1708
  experimental_customMergeAllOf,
1652
1709
  includeUndefinedValues: includeUndefinedValues === true,
1653
- parentDefaults: get15(defaults, [key]),
1654
- rawFormData: get15(formData, [key]),
1710
+ parentDefaults: get14(defaults, [key]),
1711
+ rawFormData: get14(formData, [key]),
1655
1712
  required: retrievedSchema.required?.includes(key),
1656
1713
  shouldMergeDefaultsIntoFormData,
1657
1714
  initialDefaultsGenerated
@@ -1689,8 +1746,8 @@
1689
1746
  experimental_defaultFormStateBehavior,
1690
1747
  experimental_customMergeAllOf,
1691
1748
  includeUndefinedValues: includeUndefinedValues === true,
1692
- parentDefaults: get15(defaults, [key]),
1693
- rawFormData: get15(formData, [key]),
1749
+ parentDefaults: get14(defaults, [key]),
1750
+ rawFormData: get14(formData, [key]),
1694
1751
  required: retrievedSchema.required?.includes(key),
1695
1752
  shouldMergeDefaultsIntoFormData,
1696
1753
  initialDefaultsGenerated
@@ -1712,13 +1769,14 @@
1712
1769
  rawFormData,
1713
1770
  rootSchema = {},
1714
1771
  _recurseList = [],
1715
- experimental_defaultFormStateBehavior = void 0,
1716
- experimental_customMergeAllOf = void 0,
1772
+ experimental_defaultFormStateBehavior,
1773
+ experimental_customMergeAllOf,
1717
1774
  required,
1718
1775
  requiredAsRoot = false,
1719
1776
  shouldMergeDefaultsIntoFormData,
1720
1777
  initialDefaultsGenerated
1721
- } = {}, defaults) {
1778
+ } = {}, initialDefaults) {
1779
+ let defaults = initialDefaults;
1722
1780
  const schema = rawSchema;
1723
1781
  const arrayMinItemsStateBehavior = experimental_defaultFormStateBehavior?.arrayMinItems ?? {};
1724
1782
  const { populate: arrayMinItemsPopulate, mergeExtraDefaults: arrayMergeExtraDefaults } = arrayMinItemsStateBehavior;
@@ -1750,31 +1808,38 @@
1750
1808
  if (neverPopulate) {
1751
1809
  defaults = rawFormData;
1752
1810
  } else {
1753
- const itemDefaults = rawFormData.map((item, idx) => {
1754
- return computeDefaults(validator, schemaItem, {
1811
+ const itemDefaults = rawFormData.map(
1812
+ (item, idx) => computeDefaults(validator, schemaItem, {
1755
1813
  rootSchema,
1756
1814
  _recurseList,
1757
1815
  experimental_defaultFormStateBehavior,
1758
1816
  experimental_customMergeAllOf,
1759
1817
  rawFormData: item,
1760
- parentDefaults: get15(defaults, [idx]),
1818
+ parentDefaults: get14(defaults, [idx]),
1761
1819
  required,
1762
1820
  shouldMergeDefaultsIntoFormData,
1763
1821
  initialDefaultsGenerated
1764
- });
1765
- });
1822
+ })
1823
+ );
1766
1824
  const mergeExtraDefaults = (ignoreMinItemsFlagSet && required || isPopulateAll) && arrayMergeExtraDefaults;
1767
1825
  defaults = mergeDefaultsWithFormData(defaults, itemDefaults, mergeExtraDefaults);
1768
1826
  }
1769
1827
  }
1828
+ const defaultsLength = Array.isArray(defaults) ? defaults.length : 0;
1770
1829
  if (neverPopulate) {
1830
+ if (shouldMergeDefaultsIntoFormData) {
1831
+ if (schema.minItems && schema.minItems > defaultsLength) {
1832
+ const fillerEntries = Array.from({ length: schema.minItems - defaultsLength }, () => null);
1833
+ return (defaults ?? []).concat(fillerEntries);
1834
+ }
1835
+ return defaults;
1836
+ }
1771
1837
  return defaults ?? emptyDefault;
1772
1838
  }
1773
1839
  if (ignoreMinItemsFlagSet && !required) {
1774
- return defaults ? defaults : void 0;
1840
+ return defaults || void 0;
1775
1841
  }
1776
1842
  let arrayDefault;
1777
- const defaultsLength = Array.isArray(defaults) ? defaults.length : 0;
1778
1843
  if (!schema.minItems || isMultiSelect(validator, schema, rootSchema, experimental_customMergeAllOf) || computeSkipPopulate(validator, schema, rootSchema) || schema.minItems <= defaultsLength) {
1779
1844
  arrayDefault = defaults || !required && !requiredAsRoot ? defaults : emptyDefault;
1780
1845
  } else {
@@ -1806,11 +1871,13 @@
1806
1871
  case "array": {
1807
1872
  return getArrayDefaults(validator, rawSchema, computeDefaultsProps, defaults);
1808
1873
  }
1874
+ default:
1875
+ return void 0;
1809
1876
  }
1810
1877
  }
1811
1878
  function getDefaultFormState(validator, theSchema, formData, rootSchema, includeUndefinedValues = false, experimental_defaultFormStateBehavior, experimental_customMergeAllOf, initialDefaultsGenerated) {
1812
1879
  if (!isObject(theSchema)) {
1813
- throw new Error("Invalid schema: " + theSchema);
1880
+ throw new Error(`Invalid schema: ${theSchema}`);
1814
1881
  }
1815
1882
  const schema = retrieveSchema(validator, theSchema, rootSchema, formData, experimental_customMergeAllOf);
1816
1883
  const defaults = computeDefaults(validator, schema, {
@@ -1832,9 +1899,17 @@
1832
1899
  if (isObject(formData) || Array.isArray(formData)) {
1833
1900
  const { mergeDefaultsIntoFormData } = experimental_defaultFormStateBehavior || {};
1834
1901
  const defaultSupercedesUndefined = mergeDefaultsIntoFormData === "useDefaultIfFormDataUndefined";
1902
+ const matchingFormData = ensureFormDataMatchingSchema(
1903
+ validator,
1904
+ schema,
1905
+ rootSchema ?? schema,
1906
+ formData,
1907
+ experimental_defaultFormStateBehavior,
1908
+ experimental_customMergeAllOf
1909
+ );
1835
1910
  const result = mergeDefaultsWithFormData(
1836
1911
  defaults,
1837
- formData,
1912
+ matchingFormData,
1838
1913
  true,
1839
1914
  // set to true to add any additional default array entries.
1840
1915
  defaultSupercedesUndefined,
@@ -1851,7 +1926,7 @@
1851
1926
  return (
1852
1927
  // TODO: Remove the `&& uiSchema['ui:widget'] !== 'hidden'` once we support hidden widgets for arrays.
1853
1928
  // https://rjsf-team.github.io/react-jsonschema-form/docs/usage/widgets/#hidden-widgets
1854
- "widget" in getUiOptions(uiSchema) && getUiOptions(uiSchema)["widget"] !== "hidden"
1929
+ "widget" in getUiOptions(uiSchema) && getUiOptions(uiSchema).widget !== "hidden"
1855
1930
  );
1856
1931
  }
1857
1932
 
@@ -1880,7 +1955,7 @@
1880
1955
  let displayLabel = Boolean(label);
1881
1956
  if (displayLabel) {
1882
1957
  const schemaType = getSchemaType(schema);
1883
- const addedByAdditionalProperty = get15(schema, ADDITIONAL_PROPERTY_FLAG, false);
1958
+ const addedByAdditionalProperty = Boolean(schema[ADDITIONAL_PROPERTY_FLAG]);
1884
1959
  if (schemaType === "array") {
1885
1960
  displayLabel = addedByAdditionalProperty || isMultiSelect(validator, schema, rootSchema, experimental_customMergeAllOf) || isFilesArray(validator, schema, uiSchema, rootSchema, experimental_customMergeAllOf) || isCustomWidget(uiSchema);
1886
1961
  }
@@ -1890,7 +1965,7 @@
1890
1965
  if (schemaType === "boolean" && uiSchema && !uiSchema[UI_WIDGET_KEY]) {
1891
1966
  displayLabel = false;
1892
1967
  }
1893
- if (uiSchema && uiSchema[UI_FIELD_KEY]) {
1968
+ if (uiSchema?.[UI_FIELD_KEY]) {
1894
1969
  displayLabel = false;
1895
1970
  }
1896
1971
  }
@@ -1921,7 +1996,7 @@
1921
1996
  }
1922
1997
  } else if (key === NAME_KEY && data !== "") {
1923
1998
  paths.forEach((path) => {
1924
- const formValue = get15(formData, path);
1999
+ const formValue = get14(formData, path);
1925
2000
  const isLeaf = objKeys.length === 1;
1926
2001
  if (formValueHasData(formValue, isLeaf) || Array.isArray(formValue) && formValue.every((val) => formValueHasData(val, isLeaf))) {
1927
2002
  acc.push(path);
@@ -1955,11 +2030,11 @@
1955
2030
  function isSchemaObj(schemaDef) {
1956
2031
  return isObject(schemaDef);
1957
2032
  }
1958
- function handleObject(schema2, source, target) {
1959
- const { properties, additionalProperties, patternProperties, propertyNames } = schema2;
1960
- const requiredSet = new Set(schema2.required ?? []);
2033
+ function handleObject(childSchema, source, target) {
2034
+ const { properties, additionalProperties, patternProperties, propertyNames } = childSchema;
2035
+ const requiredSet = new Set(childSchema.required ?? []);
1961
2036
  function setProperty(key, schemaDef, value, required = false) {
1962
- const v = omit3(schemaDef, value, target[key]);
2037
+ const v = omit2(schemaDef, value, target[key]);
1963
2038
  if (!required && isObject(v)) {
1964
2039
  let sd = isSchemaObj(schemaDef) ? schemaDef : {};
1965
2040
  if (sd.$ref !== void 0) {
@@ -1991,15 +2066,14 @@
1991
2066
  ]);
1992
2067
  const knownProperties = new Set(Object.keys(properties ?? {}));
1993
2068
  for (const [key, value] of Object.entries(source)) {
1994
- if (knownProperties.has(key)) {
1995
- continue;
1996
- }
1997
- const matched = patterns.find(([re]) => re.test(key));
1998
- if (matched === void 0) {
1999
- patternPropertiesRest.push(key);
2000
- continue;
2069
+ if (!knownProperties.has(key)) {
2070
+ const matched = patterns.find(([re]) => re.test(key));
2071
+ if (matched === void 0) {
2072
+ patternPropertiesRest.push(key);
2073
+ } else {
2074
+ setProperty(key, matched[1], value);
2075
+ }
2001
2076
  }
2002
- setProperty(key, matched[1], value);
2003
2077
  }
2004
2078
  }
2005
2079
  if (additionalProperties !== void 0 && additionalProperties !== false) {
@@ -2011,10 +2085,9 @@
2011
2085
  } else {
2012
2086
  const knownProperties = new Set(Object.keys(properties ?? {}));
2013
2087
  for (const [key, value] of Object.entries(source)) {
2014
- if (knownProperties.has(key)) {
2015
- continue;
2088
+ if (!knownProperties.has(key)) {
2089
+ setProperty(key, addlSchema, value);
2016
2090
  }
2017
- setProperty(key, addlSchema, value);
2018
2091
  }
2019
2092
  }
2020
2093
  }
@@ -2025,37 +2098,37 @@
2025
2098
  }
2026
2099
  return target;
2027
2100
  }
2028
- function handleArray(schema2, source, target) {
2029
- const { items, additionalItems } = schema2;
2101
+ function handleArray(childSchema, source, target) {
2102
+ const { items, additionalItems } = childSchema;
2030
2103
  if (items !== void 0) {
2031
2104
  if (Array.isArray(items)) {
2032
- for (let i = 0; i < items.length; i++) {
2033
- target.push(omit3(items[i], source[i]));
2105
+ for (let i = 0; i < items.length; i += 1) {
2106
+ target.push(omit2(items[i], source[i]));
2034
2107
  }
2035
2108
  } else {
2036
- for (let i = 0; i < source.length; i++) {
2037
- target.push(omit3(items, source[i]));
2109
+ for (let i = 0; i < source.length; i += 1) {
2110
+ target.push(omit2(items, source[i]));
2038
2111
  }
2039
2112
  }
2040
2113
  }
2041
2114
  if (additionalItems) {
2042
- for (let i = target.length; i < source.length; i++) {
2043
- target.push(omit3(additionalItems, source[i]));
2115
+ for (let i = target.length; i < source.length; i += 1) {
2116
+ target.push(omit2(additionalItems, source[i]));
2044
2117
  }
2045
2118
  }
2046
2119
  return target;
2047
2120
  }
2048
- function handleConditions(schema2, source, target) {
2049
- const { if: condition, then, else: otherwise } = schema2;
2121
+ function handleConditions(childSchema, source, target) {
2122
+ const { if: condition, then, else: otherwise } = childSchema;
2050
2123
  if (condition === void 0) {
2051
2124
  return target;
2052
2125
  }
2053
2126
  const isThenBranch = isSchemaObj(condition) ? validator.isValid(condition, source, rootSchema) : condition;
2054
2127
  const branch = isThenBranch ? then : otherwise;
2055
- return branch === void 0 ? target : omit3(branch, source, target);
2128
+ return branch === void 0 ? target : omit2(branch, source, target);
2056
2129
  }
2057
- function handleOneOf(oneOf, schema2, source, target) {
2058
- if (!Array.isArray(oneOf) || isSelect(validator, schema2, rootSchema, experimental_customMergeAllOf)) {
2130
+ function handleOneOf(oneOf, childSchema, source, target) {
2131
+ if (!Array.isArray(oneOf) || isSelect(validator, childSchema, rootSchema, experimental_customMergeAllOf)) {
2059
2132
  return target;
2060
2133
  }
2061
2134
  const scoringOptions = relaxOptionsForScoring(oneOf, true, rootSchema);
@@ -2065,92 +2138,126 @@
2065
2138
  source,
2066
2139
  scoringOptions,
2067
2140
  0,
2068
- getDiscriminatorFieldFromSchema(schema2),
2141
+ getDiscriminatorFieldFromSchema(childSchema),
2069
2142
  experimental_customMergeAllOf
2070
2143
  );
2071
2144
  const winning = oneOf[bestIndex];
2072
2145
  const resolved = isObject(winning) ? resolveAllReferences(winning, rootSchema, []) : scoringOptions[bestIndex];
2073
- return omit3(resolved, source, target);
2146
+ return omit2(resolved, source, target);
2074
2147
  }
2075
- function handleAnyOf(schema2, source, target) {
2076
- const { anyOf } = schema2;
2148
+ function handleAnyOf(childSchema, source, target) {
2149
+ const { anyOf } = childSchema;
2077
2150
  if (!Array.isArray(anyOf)) {
2078
2151
  return target;
2079
2152
  }
2080
2153
  if (source === void 0 || Array.isArray(source) && source.length === 0 || isObject(source) && Object.keys(source).length === 0) {
2154
+ let result = target;
2081
2155
  for (const branch of anyOf) {
2082
- target = omit3(branch, source, target);
2156
+ result = omit2(branch, source, result);
2083
2157
  }
2084
- return target;
2158
+ return result;
2085
2159
  }
2086
- return handleOneOf(anyOf, schema2, source, target);
2160
+ return handleOneOf(anyOf, childSchema, source, target);
2087
2161
  }
2088
- function handleDependencies(schema2, source, target) {
2089
- const { dependencies } = schema2;
2162
+ function handleDependencies(childSchema, source, target) {
2163
+ const { dependencies } = childSchema;
2090
2164
  if (dependencies === void 0 || !isObjectValue(source)) {
2091
2165
  return target;
2092
2166
  }
2167
+ let result = target;
2093
2168
  for (const [key, deps] of Object.entries(dependencies)) {
2094
- if (!(key in source) || Array.isArray(deps)) {
2095
- continue;
2169
+ if (key in source && !Array.isArray(deps)) {
2170
+ result = omit2(deps, source, result);
2096
2171
  }
2097
- target = omit3(deps, source, target);
2098
2172
  }
2099
- return target;
2173
+ return result;
2100
2174
  }
2101
- function omit3(schemaDef, source, target) {
2175
+ function omit2(schemaDef, source, target) {
2102
2176
  if (source === void 0 || schemaDef === false) {
2103
2177
  return void 0;
2104
2178
  }
2105
2179
  if (schemaDef === true || isEmpty4(schemaDef)) {
2106
2180
  return source;
2107
2181
  }
2108
- let schema2 = schemaDef;
2109
- const { $ref: ref, allOf } = schema2;
2182
+ let localSchema = schemaDef;
2183
+ const { $ref: ref, allOf } = localSchema;
2110
2184
  if (ref !== void 0) {
2111
- return omit3(findSchemaDefinition(ref, rootSchema), source, target);
2185
+ return omit2(findSchemaDefinition(ref, rootSchema), source, target);
2112
2186
  }
2113
2187
  if (allOf) {
2114
- schema2 = doMergeAllOf(schema2, experimental_customMergeAllOf);
2188
+ localSchema = doMergeAllOf(localSchema, experimental_customMergeAllOf);
2189
+ const remainingAllOf = localSchema.allOf;
2190
+ if (remainingAllOf) {
2191
+ for (let i = 0; i < remainingAllOf.length; i++) {
2192
+ target = omit2(remainingAllOf[i], source, target);
2193
+ }
2194
+ }
2115
2195
  }
2116
- target = handleAnyOf(schema2, source, handleOneOf(schema2.oneOf, schema2, source, target));
2117
- const type = getSchemaType(schema2);
2196
+ let filtered = handleAnyOf(localSchema, source, handleOneOf(localSchema.oneOf, localSchema, source, target));
2197
+ const type = getSchemaType(localSchema);
2118
2198
  if (type === "object") {
2119
2199
  if (!isObjectValue(source)) {
2120
2200
  return void 0;
2121
2201
  }
2122
- target = handleObject(schema2, source, isObjectValue(target) ? target : {});
2202
+ filtered = handleObject(localSchema, source, isObjectValue(filtered) ? filtered : {});
2123
2203
  } else if (type === "array") {
2124
2204
  if (!Array.isArray(source)) {
2125
2205
  return void 0;
2126
2206
  }
2127
- target = handleArray(schema2, source, Array.isArray(target) ? target : []);
2128
- } else if (target === void 0) {
2129
- target = source;
2207
+ filtered = handleArray(localSchema, source, Array.isArray(filtered) ? filtered : []);
2208
+ } else if (filtered === void 0) {
2209
+ filtered = source;
2130
2210
  }
2131
- return handleDependencies(schema2, source, handleConditions(schema2, source, target));
2211
+ return handleDependencies(localSchema, source, handleConditions(localSchema, source, filtered));
2132
2212
  }
2133
- return omit3(schema, formData);
2213
+ return omit2(schema, formData);
2134
2214
  }
2135
2215
  var NO_VALUE = /* @__PURE__ */ Symbol("no Value");
2216
+ function enumValuesForSchema(schema) {
2217
+ if (Array.isArray(schema.enum)) {
2218
+ return schema.enum;
2219
+ }
2220
+ const options = schema.oneOf || schema.anyOf;
2221
+ if (!Array.isArray(options)) {
2222
+ return void 0;
2223
+ }
2224
+ const values = options.map((option) => {
2225
+ if (CONST_KEY in option) {
2226
+ return option[CONST_KEY];
2227
+ }
2228
+ return Array.isArray(option.enum) && option.enum.length === 1 ? option.enum[0] : NO_VALUE;
2229
+ }).filter((value) => value !== NO_VALUE);
2230
+ return values.length > 0 ? values : void 0;
2231
+ }
2232
+ function replacementForInvalidEnumValue(schema, formValue) {
2233
+ const enumValues = enumValuesForSchema(schema);
2234
+ if (!enumValues || enumValues.some((value) => deepEquals_default(value, formValue))) {
2235
+ return NO_VALUE;
2236
+ }
2237
+ const defaultValue = get14(schema, DEFAULT_KEY, NO_VALUE);
2238
+ if (defaultValue !== NO_VALUE && enumValues.some((value) => deepEquals_default(value, defaultValue))) {
2239
+ return defaultValue;
2240
+ }
2241
+ return enumValues.length === 1 ? enumValues[0] : void 0;
2242
+ }
2136
2243
  function sanitizeDataForNewSchema(validator, rootSchema, newSchema, oldSchema, data = {}, experimental_customMergeAllOf) {
2137
2244
  let newFormData;
2138
2245
  if (has5(newSchema, PROPERTIES_KEY)) {
2139
2246
  const removeOldSchemaData = {};
2140
2247
  if (has5(oldSchema, PROPERTIES_KEY)) {
2141
- const properties = get15(oldSchema, PROPERTIES_KEY, {});
2248
+ const properties = get14(oldSchema, PROPERTIES_KEY, {});
2142
2249
  Object.keys(properties).forEach((key) => {
2143
2250
  if (has5(data, key)) {
2144
2251
  removeOldSchemaData[key] = void 0;
2145
2252
  }
2146
2253
  });
2147
2254
  }
2148
- const keys2 = Object.keys(get15(newSchema, PROPERTIES_KEY, {}));
2255
+ const keys2 = Object.keys(get14(newSchema, PROPERTIES_KEY, {}));
2149
2256
  const nestedData = {};
2150
2257
  keys2.forEach((key) => {
2151
- const formValue = get15(data, key);
2152
- let oldKeyedSchema = get15(oldSchema, [PROPERTIES_KEY, key], {});
2153
- let newKeyedSchema = get15(newSchema, [PROPERTIES_KEY, key], {});
2258
+ const formValue = get14(data, key);
2259
+ let oldKeyedSchema = get14(oldSchema, [PROPERTIES_KEY, key], {});
2260
+ let newKeyedSchema = get14(newSchema, [PROPERTIES_KEY, key], {});
2154
2261
  if (has5(oldKeyedSchema, REF_KEY)) {
2155
2262
  oldKeyedSchema = retrieveSchema(
2156
2263
  validator,
@@ -2169,8 +2276,8 @@
2169
2276
  experimental_customMergeAllOf
2170
2277
  );
2171
2278
  }
2172
- const oldSchemaTypeForKey = get15(oldKeyedSchema, "type");
2173
- const newSchemaTypeForKey = get15(newKeyedSchema, "type");
2279
+ const oldSchemaTypeForKey = get14(oldKeyedSchema, "type");
2280
+ const newSchemaTypeForKey = get14(newKeyedSchema, "type");
2174
2281
  if (!oldSchemaTypeForKey || oldSchemaTypeForKey === newSchemaTypeForKey) {
2175
2282
  if (has5(removeOldSchemaData, key)) {
2176
2283
  delete removeOldSchemaData[key];
@@ -2188,31 +2295,37 @@
2188
2295
  nestedData[key] = itemData;
2189
2296
  }
2190
2297
  } else {
2191
- const newOptionDefault = get15(newKeyedSchema, "default", NO_VALUE);
2192
- const oldOptionDefault = get15(oldKeyedSchema, "default", NO_VALUE);
2298
+ const newOptionDefault = get14(newKeyedSchema, DEFAULT_KEY, NO_VALUE);
2299
+ const oldOptionDefault = get14(oldKeyedSchema, DEFAULT_KEY, NO_VALUE);
2193
2300
  if (newOptionDefault !== NO_VALUE && newOptionDefault !== formValue) {
2194
2301
  if (oldOptionDefault === formValue) {
2195
2302
  removeOldSchemaData[key] = newOptionDefault;
2196
- } else if (get15(newKeyedSchema, "readOnly") === true) {
2303
+ } else if (get14(newKeyedSchema, "readOnly") === true) {
2197
2304
  removeOldSchemaData[key] = void 0;
2198
2305
  }
2199
2306
  }
2200
- const newOptionConst = get15(newKeyedSchema, "const", NO_VALUE);
2201
- const oldOptionConst = get15(oldKeyedSchema, "const", NO_VALUE);
2307
+ const newOptionConst = get14(newKeyedSchema, CONST_KEY, NO_VALUE);
2308
+ const oldOptionConst = get14(oldKeyedSchema, CONST_KEY, NO_VALUE);
2202
2309
  if (newOptionConst !== NO_VALUE && newOptionConst !== formValue) {
2203
2310
  removeOldSchemaData[key] = oldOptionConst === formValue ? newOptionConst : void 0;
2204
2311
  }
2312
+ if (has5(data, key)) {
2313
+ const enumReplacement = replacementForInvalidEnumValue(newKeyedSchema, formValue);
2314
+ if (enumReplacement !== NO_VALUE) {
2315
+ removeOldSchemaData[key] = enumReplacement;
2316
+ }
2317
+ }
2205
2318
  }
2206
2319
  }
2207
2320
  });
2208
2321
  newFormData = {
2209
- ...typeof data == "string" || Array.isArray(data) ? void 0 : data,
2322
+ ...typeof data === "string" || Array.isArray(data) ? void 0 : data,
2210
2323
  ...removeOldSchemaData,
2211
2324
  ...nestedData
2212
2325
  };
2213
- } else if (get15(oldSchema, "type") === "array" && get15(newSchema, "type") === "array" && Array.isArray(data)) {
2214
- let oldSchemaItems = get15(oldSchema, "items");
2215
- let newSchemaItems = get15(newSchema, "items");
2326
+ } else if (get14(oldSchema, "type") === "array" && get14(newSchema, "type") === "array" && Array.isArray(data)) {
2327
+ let oldSchemaItems = get14(oldSchema, "items");
2328
+ let newSchemaItems = get14(newSchema, "items");
2216
2329
  if (typeof oldSchemaItems === "object" && typeof newSchemaItems === "object" && !Array.isArray(oldSchemaItems) && !Array.isArray(newSchemaItems)) {
2217
2330
  if (has5(oldSchemaItems, REF_KEY)) {
2218
2331
  oldSchemaItems = retrieveSchema(
@@ -2232,10 +2345,10 @@
2232
2345
  experimental_customMergeAllOf
2233
2346
  );
2234
2347
  }
2235
- const oldSchemaType = get15(oldSchemaItems, "type");
2236
- const newSchemaType = get15(newSchemaItems, "type");
2348
+ const oldSchemaType = get14(oldSchemaItems, "type");
2349
+ const newSchemaType = get14(newSchemaItems, "type");
2237
2350
  if (!oldSchemaType || oldSchemaType === newSchemaType) {
2238
- const maxItems = get15(newSchema, "maxItems", -1);
2351
+ const maxItems = get14(newSchema, "maxItems", -1);
2239
2352
  if (newSchemaType === "object") {
2240
2353
  newFormData = data.reduce((newValue, aValue) => {
2241
2354
  const itemValue = sanitizeDataForNewSchema(
@@ -2252,7 +2365,9 @@
2252
2365
  return newValue;
2253
2366
  }, []);
2254
2367
  } else {
2255
- newFormData = maxItems > 0 && data.length > maxItems ? data.slice(0, maxItems) : data;
2368
+ const newItemEnumValues = enumValuesForSchema(newSchemaItems);
2369
+ const filteredData = newItemEnumValues ? data.filter((item) => newItemEnumValues.some((v) => deepEquals_default(v, item))) : data;
2370
+ newFormData = maxItems > 0 && filteredData.length > maxItems ? filteredData.slice(0, maxItems) : filteredData;
2256
2371
  }
2257
2372
  }
2258
2373
  } else if (typeof oldSchemaItems === "boolean" && typeof newSchemaItems === "boolean" && oldSchemaItems === newSchemaItems) {
@@ -2263,16 +2378,16 @@
2263
2378
  }
2264
2379
  function toPathSchemaInternal(validator, schema, name, rootSchema, formData, _recurseList = [], experimental_customMergeAllOf) {
2265
2380
  if (REF_KEY in schema || DEPENDENCIES_KEY in schema || ALL_OF_KEY in schema || IF_KEY in schema) {
2266
- const _schema = retrieveSchema(validator, schema, rootSchema, formData, experimental_customMergeAllOf);
2267
- const sameSchemaIndex = _recurseList.findIndex((item) => deepEquals_default(item, _schema));
2381
+ const innerSchema = retrieveSchema(validator, schema, rootSchema, formData, experimental_customMergeAllOf);
2382
+ const sameSchemaIndex = _recurseList.findIndex((item) => deepEquals_default(item, innerSchema));
2268
2383
  if (sameSchemaIndex === -1) {
2269
2384
  return toPathSchemaInternal(
2270
2385
  validator,
2271
- _schema,
2386
+ innerSchema,
2272
2387
  name,
2273
2388
  rootSchema,
2274
2389
  formData,
2275
- _recurseList.concat(_schema),
2390
+ _recurseList.concat(innerSchema),
2276
2391
  experimental_customMergeAllOf
2277
2392
  );
2278
2393
  }
@@ -2292,12 +2407,12 @@
2292
2407
  discriminator,
2293
2408
  experimental_customMergeAllOf
2294
2409
  );
2295
- const _schema = xxxOf[index];
2410
+ const innerSchema = xxxOf[index];
2296
2411
  pathSchema = {
2297
2412
  ...pathSchema,
2298
2413
  ...toPathSchemaInternal(
2299
2414
  validator,
2300
- _schema,
2415
+ innerSchema,
2301
2416
  name,
2302
2417
  rootSchema,
2303
2418
  formData,
@@ -2307,9 +2422,9 @@
2307
2422
  };
2308
2423
  }
2309
2424
  if (ADDITIONAL_PROPERTIES_KEY in schema && schema[ADDITIONAL_PROPERTIES_KEY] !== false) {
2310
- set(pathSchema, RJSF_ADDITIONAL_PROPERTIES_FLAG, true);
2425
+ set3(pathSchema, RJSF_ADDITIONAL_PROPERTIES_FLAG, true);
2311
2426
  const additionalSchema = isObject2(schema[ADDITIONAL_PROPERTIES_KEY]) ? schema[ADDITIONAL_PROPERTIES_KEY] : {};
2312
- const definedProperties = get15(schema, PROPERTIES_KEY, {});
2427
+ const definedProperties = get14(schema, PROPERTIES_KEY, {});
2313
2428
  for (const key of Object.keys(formData ?? {})) {
2314
2429
  if (!(key in definedProperties)) {
2315
2430
  pathSchema[key] = toPathSchemaInternal(
@@ -2317,7 +2432,7 @@
2317
2432
  additionalSchema,
2318
2433
  `${name}.${key}`,
2319
2434
  rootSchema,
2320
- get15(formData, [key]),
2435
+ get14(formData, [key]),
2321
2436
  _recurseList,
2322
2437
  experimental_customMergeAllOf
2323
2438
  );
@@ -2367,7 +2482,7 @@
2367
2482
  }
2368
2483
  } else if (PROPERTIES_KEY in schema) {
2369
2484
  for (const property in schema.properties) {
2370
- const field = get15(schema, [PROPERTIES_KEY, property], {});
2485
+ const field = get14(schema, [PROPERTIES_KEY, property], {});
2371
2486
  pathSchema[property] = toPathSchemaInternal(
2372
2487
  validator,
2373
2488
  field,
@@ -2375,7 +2490,7 @@
2375
2490
  rootSchema,
2376
2491
  // It's possible that formData is not an object -- this can happen if an
2377
2492
  // array item has just been added, but not populated with data yet
2378
- get15(formData, [property]),
2493
+ get14(formData, [property]),
2379
2494
  _recurseList,
2380
2495
  experimental_customMergeAllOf
2381
2496
  );
@@ -2397,8 +2512,8 @@
2397
2512
  * @param [experimental_customMergeAllOf] - Optional function that allows for custom merging of `allOf` schemas
2398
2513
  */
2399
2514
  constructor(validator, rootSchema, experimental_defaultFormStateBehavior, experimental_customMergeAllOf) {
2400
- if (rootSchema && rootSchema[SCHEMA_KEY] === JSON_SCHEMA_DRAFT_2020_12) {
2401
- this.rootSchema = makeAllReferencesAbsolute(rootSchema, get15(rootSchema, ID_KEY, "#"));
2515
+ if (rootSchema?.[SCHEMA_KEY] === JSON_SCHEMA_DRAFT_2020_12) {
2516
+ this.rootSchema = makeAllReferencesAbsolute(rootSchema, get14(rootSchema, ID_KEY, "#"));
2402
2517
  } else {
2403
2518
  this.rootSchema = rootSchema;
2404
2519
  }
@@ -2649,6 +2764,7 @@
2649
2764
  * @param [formData] - The current formData, if any, onto which to provide any missing defaults
2650
2765
  * @returns - The `PathSchema` object for the `schema`
2651
2766
  */
2767
+ // oxlint-disable-next-line typescript/no-deprecated
2652
2768
  toPathSchema(schema, name, formData) {
2653
2769
  return toPathSchema(
2654
2770
  this.validator,
@@ -2671,7 +2787,7 @@
2671
2787
 
2672
2788
  // src/dataURItoBlob.ts
2673
2789
  function dataURItoBlob(dataURILike) {
2674
- if (dataURILike.indexOf("data:") === -1) {
2790
+ if (!dataURILike.includes("data:")) {
2675
2791
  throw new Error("File is invalid: URI must be a dataURI");
2676
2792
  }
2677
2793
  const dataURI = dataURILike.slice(5);
@@ -2690,13 +2806,13 @@
2690
2806
  try {
2691
2807
  const binary = atob(base64);
2692
2808
  const array = new Array(binary.length);
2693
- for (let i = 0; i < binary.length; i++) {
2809
+ for (let i = 0; i < binary.length; i += 1) {
2694
2810
  array[i] = binary.charCodeAt(i);
2695
2811
  }
2696
2812
  const blob = new window.Blob([new Uint8Array(array)], { type });
2697
2813
  return { blob, name };
2698
2814
  } catch (error) {
2699
- throw new Error("File is invalid: " + error.message);
2815
+ throw new Error(`File is invalid: ${error.message}`);
2700
2816
  }
2701
2817
  }
2702
2818
 
@@ -2704,24 +2820,26 @@
2704
2820
  function pad(num, width) {
2705
2821
  let s = String(num);
2706
2822
  while (s.length < width) {
2707
- s = "0" + s;
2823
+ s = `0${s}`;
2708
2824
  }
2709
2825
  return s;
2710
2826
  }
2711
2827
 
2712
2828
  // src/dateRangeOptions.ts
2713
2829
  function dateRangeOptions(start, stop) {
2714
- if (start <= 0 && stop <= 0) {
2715
- start = (/* @__PURE__ */ new Date()).getFullYear() + start;
2716
- stop = (/* @__PURE__ */ new Date()).getFullYear() + stop;
2717
- } else if (start < 0 || stop < 0) {
2830
+ const bothRelative = start <= 0 && stop <= 0;
2831
+ const eitherNegative = start < 0 || stop < 0;
2832
+ if (!bothRelative && eitherNegative) {
2718
2833
  throw new Error(`Both start (${start}) and stop (${stop}) must both be <= 0 or > 0, got one of each`);
2719
2834
  }
2720
- if (start > stop) {
2835
+ const currentYear = (/* @__PURE__ */ new Date()).getFullYear();
2836
+ const resolvedStart = bothRelative ? currentYear + start : start;
2837
+ const resolvedStop = bothRelative ? currentYear + stop : stop;
2838
+ if (resolvedStart > resolvedStop) {
2721
2839
  return dateRangeOptions(stop, start).reverse();
2722
2840
  }
2723
2841
  const options = [];
2724
- for (let i = start; i <= stop; i++) {
2842
+ for (let i = resolvedStart; i <= resolvedStop; i += 1) {
2725
2843
  options.push({ value: i, label: pad(i, 2) });
2726
2844
  }
2727
2845
  return options;
@@ -2817,7 +2935,7 @@
2817
2935
  return match.value;
2818
2936
  }
2819
2937
  const index = Number(value);
2820
- if (!isNaN(index) && index >= 0 && index < enumOptions.length) {
2938
+ if (!Number.isNaN(index) && index >= 0 && index < enumOptions.length) {
2821
2939
  return enumOptions[index].value;
2822
2940
  }
2823
2941
  return emptyValue;
@@ -2869,7 +2987,7 @@
2869
2987
  */
2870
2988
  getOrCreateErrorBlock(pathOfError) {
2871
2989
  const hasPath = Array.isArray(pathOfError) && pathOfError.length > 0 || typeof pathOfError === "string";
2872
- let errorBlock = hasPath ? get15(this.errorSchema, pathOfError) : this.errorSchema;
2990
+ let errorBlock = hasPath ? get14(this.errorSchema, pathOfError) : this.errorSchema;
2873
2991
  if (!errorBlock && pathOfError) {
2874
2992
  errorBlock = {};
2875
2993
  setWith(this.errorSchema, pathOfError, errorBlock, Object);
@@ -2895,15 +3013,15 @@
2895
3013
  */
2896
3014
  addErrors(errorOrList, pathOfError) {
2897
3015
  const errorBlock = this.getOrCreateErrorBlock(pathOfError);
2898
- let errorsList = get15(errorBlock, ERRORS_KEY);
3016
+ let errorsList = get14(errorBlock, ERRORS_KEY);
2899
3017
  if (!Array.isArray(errorsList)) {
2900
3018
  errorsList = [];
2901
3019
  errorBlock[ERRORS_KEY] = errorsList;
2902
3020
  }
2903
3021
  if (Array.isArray(errorOrList)) {
2904
- set(errorBlock, ERRORS_KEY, [.../* @__PURE__ */ new Set([...errorsList, ...errorOrList])]);
3022
+ set3(errorBlock, ERRORS_KEY, [.../* @__PURE__ */ new Set([...errorsList, ...errorOrList])]);
2905
3023
  } else {
2906
- set(errorBlock, ERRORS_KEY, [.../* @__PURE__ */ new Set([...errorsList, errorOrList])]);
3024
+ set3(errorBlock, ERRORS_KEY, [.../* @__PURE__ */ new Set([...errorsList, errorOrList])]);
2907
3025
  }
2908
3026
  return this;
2909
3027
  }
@@ -2918,7 +3036,7 @@
2918
3036
  setErrors(errorOrList, pathOfError) {
2919
3037
  const errorBlock = this.getOrCreateErrorBlock(pathOfError);
2920
3038
  const listToAdd = Array.isArray(errorOrList) ? [.../* @__PURE__ */ new Set([...errorOrList])] : [errorOrList];
2921
- set(errorBlock, ERRORS_KEY, listToAdd);
3039
+ set3(errorBlock, ERRORS_KEY, listToAdd);
2922
3040
  return this;
2923
3041
  }
2924
3042
  /** Clears the error(s) in the `ErrorSchema` at either the root level or the location within the schema described by
@@ -2930,7 +3048,7 @@
2930
3048
  */
2931
3049
  clearErrors(pathOfError) {
2932
3050
  const errorBlock = this.getOrCreateErrorBlock(pathOfError);
2933
- set(errorBlock, ERRORS_KEY, []);
3051
+ set3(errorBlock, ERRORS_KEY, []);
2934
3052
  return this;
2935
3053
  }
2936
3054
  };
@@ -2942,13 +3060,13 @@
2942
3060
  }
2943
3061
  if (aIsPlainObject && !bIsPlainObject) {
2944
3062
  return keys(a);
2945
- } else if (!aIsPlainObject && bIsPlainObject) {
3063
+ }
3064
+ if (!aIsPlainObject && bIsPlainObject) {
2946
3065
  return keys(b);
2947
- } else {
2948
- const unequalFields = keys(pickBy(a, (value, key) => !deepEquals_default(value, get15(b, key))));
2949
- const diffFields = difference(keys(b), keys(a));
2950
- return [...unequalFields, ...diffFields];
2951
3066
  }
3067
+ const unequalFields = keys(pickBy(a, (value, key) => !deepEquals_default(value, get14(b, key))));
3068
+ const diffFields = difference(keys(b), keys(a));
3069
+ return [...unequalFields, ...diffFields];
2952
3070
  }
2953
3071
 
2954
3072
  // src/getDateElementProps.ts
@@ -3047,7 +3165,7 @@
3047
3165
  };
3048
3166
  function getSubmitButtonOptions(uiSchema = {}) {
3049
3167
  const uiOptions = getUiOptions(uiSchema);
3050
- if (uiOptions && uiOptions[SUBMIT_BTN_OPTIONS_KEY]) {
3168
+ if (uiOptions?.[SUBMIT_BTN_OPTIONS_KEY]) {
3051
3169
  const options = uiOptions[SUBMIT_BTN_OPTIONS_KEY];
3052
3170
  return { ...DEFAULT_OPTIONS, ...options };
3053
3171
  }
@@ -3071,7 +3189,7 @@
3071
3189
  );
3072
3190
  }
3073
3191
  function getTestIds() {
3074
- if (get15(globalThis, "process.env.NODE_ENV") !== "test") {
3192
+ if (get14(globalThis, "process.env.NODE_ENV") !== "test") {
3075
3193
  return {};
3076
3194
  }
3077
3195
  const ids = /* @__PURE__ */ new Map();
@@ -3140,13 +3258,11 @@
3140
3258
  }
3141
3259
  };
3142
3260
  function mergeWidgetOptions(AWidget) {
3143
- let MergedWidget = get15(AWidget, "MergedWidget");
3261
+ let MergedWidget = get14(AWidget, "MergedWidget");
3144
3262
  if (!MergedWidget) {
3145
- const defaultOptions = AWidget.defaultProps && AWidget.defaultProps.options || {};
3146
- MergedWidget = ({ options, ...props }) => {
3147
- return /* @__PURE__ */ jsxRuntime.jsx(AWidget, { options: { ...defaultOptions, ...options }, ...props });
3148
- };
3149
- set(AWidget, "MergedWidget", MergedWidget);
3263
+ const defaultOptions = AWidget.defaultProps?.options || {};
3264
+ MergedWidget = ({ options, ...props }) => /* @__PURE__ */ jsxRuntime.jsx(AWidget, { options: { ...defaultOptions, ...options }, ...props });
3265
+ set3(AWidget, "MergedWidget", MergedWidget);
3150
3266
  }
3151
3267
  return MergedWidget;
3152
3268
  }
@@ -3177,23 +3293,26 @@
3177
3293
  // src/hashForSchema.ts
3178
3294
  function hashString(string) {
3179
3295
  let hash = 0;
3180
- for (let i = 0; i < string.length; i += 1) {
3296
+ for (let i = 0; i < string.length; i++) {
3181
3297
  const chr = string.charCodeAt(i);
3182
3298
  hash = (hash << 5) - hash + chr;
3183
- hash = hash & hash;
3299
+ hash &= hash;
3184
3300
  }
3185
3301
  return hash.toString(16);
3186
3302
  }
3187
3303
  function sortedJSONStringify(object) {
3188
3304
  const allKeys = /* @__PURE__ */ new Set();
3189
- JSON.stringify(object, (key, value) => (allKeys.add(key), value));
3305
+ JSON.stringify(object, (key, value) => {
3306
+ allKeys.add(key);
3307
+ return value;
3308
+ });
3190
3309
  return JSON.stringify(object, Array.from(allKeys).sort());
3191
3310
  }
3192
3311
  function hashObject(object) {
3193
3312
  return hashString(sortedJSONStringify(object));
3194
3313
  }
3195
3314
  function hashForSchema(schema) {
3196
- return hashObject(schema);
3315
+ return hashString(sortedJSONStringify(schema));
3197
3316
  }
3198
3317
 
3199
3318
  // src/hasWidget.ts
@@ -3244,6 +3363,8 @@
3244
3363
  function isFormDataAvailable(formData) {
3245
3364
  return !isNil(formData) && (!isObject2(formData) || Array.isArray(formData) || !isEmpty4(formData));
3246
3365
  }
3366
+
3367
+ // src/isRootSchema.ts
3247
3368
  function isRootSchema(registry, schemaToCompare) {
3248
3369
  const { rootSchema, schemaUtils } = registry;
3249
3370
  if (deepEquals_default(schemaToCompare, rootSchema)) {
@@ -3251,7 +3372,7 @@
3251
3372
  }
3252
3373
  if (REF_KEY in rootSchema) {
3253
3374
  const resolvedSchema = schemaUtils.retrieveSchema(rootSchema);
3254
- return deepEquals_default(schemaToCompare, omit(resolvedSchema, RJSF_REF_KEY));
3375
+ return deepEquals_default(schemaToCompare, resolvedSchema);
3255
3376
  }
3256
3377
  return false;
3257
3378
  }
@@ -3265,12 +3386,21 @@
3265
3386
  function localToUTC(dateString) {
3266
3387
  return dateString ? new Date(dateString).toJSON() : void 0;
3267
3388
  }
3389
+
3390
+ // src/logUnsupportedDefaultForEnum.ts
3391
+ function logUnsupportedDefaultForEnum(id, schema, enumOptions, multiple = false) {
3392
+ if (!multiple && Array.isArray(enumOptions) && schema.default !== void 0 && enumOptionsIndexForValue(schema.default, enumOptions, multiple) === void 0) {
3393
+ console.error(
3394
+ `The schema default value "${schema.default}" is not one of the values in the enum options for "${id}"`
3395
+ );
3396
+ }
3397
+ }
3268
3398
  function lookupFromFormContext(regOrFc, toLookup, fallback) {
3269
3399
  const lookupPath = [LOOKUP_MAP_NAME];
3270
3400
  if (has5(regOrFc, FORM_CONTEXT_NAME)) {
3271
3401
  lookupPath.unshift(FORM_CONTEXT_NAME);
3272
3402
  }
3273
- return get15(regOrFc, [...lookupPath, toLookup], fallback);
3403
+ return get14(regOrFc, [...lookupPath, toLookup], fallback);
3274
3404
  }
3275
3405
 
3276
3406
  // src/nameGenerators.ts
@@ -3298,9 +3428,9 @@
3298
3428
  if (!Array.isArray(order)) {
3299
3429
  return properties;
3300
3430
  }
3301
- const arrayToHash = (arr) => arr.reduce((prev, curr) => {
3302
- prev[curr] = true;
3303
- return prev;
3431
+ const arrayToHash = (arr) => arr.reduce((acc, curr) => {
3432
+ acc[curr] = true;
3433
+ return acc;
3304
3434
  }, {});
3305
3435
  const errorPropList = (arr) => arr.length > 1 ? `properties '${arr.join("', '")}'` : `property '${arr[0]}'`;
3306
3436
  const propertyHash = arrayToHash(properties);
@@ -3336,7 +3466,7 @@
3336
3466
  }
3337
3467
  const date = new Date(dateString);
3338
3468
  if (Number.isNaN(date.getTime())) {
3339
- throw new Error("Unable to parse date " + dateString);
3469
+ throw new Error(`Unable to parse date ${dateString}`);
3340
3470
  }
3341
3471
  return {
3342
3472
  year: date.getUTCFullYear(),
@@ -3389,11 +3519,10 @@
3389
3519
  const isArr = Array.isArray(value);
3390
3520
  if ((isObj || isArr) && properties[key]) {
3391
3521
  const cleaned = removeOptionalEmptyObjects(validator, propertySchema, rootSchema, value);
3392
- if (!isRequired && isValueEmpty(cleaned)) {
3393
- continue;
3522
+ if (isRequired || !isValueEmpty(cleaned)) {
3523
+ result[key] = cleaned;
3524
+ hasAnyValue = true;
3394
3525
  }
3395
- result[key] = cleaned;
3396
- hasAnyValue = true;
3397
3526
  } else if (isRequired || !isValueEmpty(value) || !properties[key]) {
3398
3527
  result[key] = value;
3399
3528
  if (!isValueEmpty(value)) {
@@ -3430,23 +3559,22 @@
3430
3559
  }
3431
3560
  for (const keyword of [ONE_OF_KEY, ANY_OF_KEY]) {
3432
3561
  const schemaOptions = resolvedSchema[keyword];
3433
- if (!Array.isArray(schemaOptions) || schemaOptions.length === 0) {
3434
- continue;
3435
- }
3436
- const currentUiSchemaArray = result[keyword];
3437
- const uiSchemaArray = Array.isArray(currentUiSchemaArray) ? [...currentUiSchemaArray] : [];
3438
- let hasExpanded = false;
3439
- for (let i = 0; i < schemaOptions.length; i++) {
3440
- const option = schemaOptions[i];
3441
- const optionRef = option?.[RJSF_REF_KEY] ?? option?.[REF_KEY];
3442
- if (optionRef && optionRef in definitions) {
3443
- const optionUiSchema = uiSchemaArray[i] || {};
3444
- uiSchemaArray[i] = mergeObjects(definitions[optionRef], optionUiSchema);
3445
- hasExpanded = true;
3562
+ if (Array.isArray(schemaOptions) && schemaOptions.length > 0) {
3563
+ const currentUiSchemaArray = result[keyword];
3564
+ const uiSchemaArray = Array.isArray(currentUiSchemaArray) ? [...currentUiSchemaArray] : [];
3565
+ let hasExpanded = false;
3566
+ for (let i = 0; i < schemaOptions.length; i++) {
3567
+ const option = schemaOptions[i];
3568
+ const optionRef = option?.[RJSF_REF_KEY] ?? option?.[REF_KEY];
3569
+ if (optionRef && optionRef in definitions) {
3570
+ const optionUiSchema = uiSchemaArray[i] || {};
3571
+ uiSchemaArray[i] = mergeObjects(definitions[optionRef], optionUiSchema);
3572
+ hasExpanded = true;
3573
+ }
3574
+ }
3575
+ if (hasExpanded) {
3576
+ result[keyword] = uiSchemaArray;
3446
3577
  }
3447
- }
3448
- if (hasExpanded) {
3449
- result[keyword] = uiSchemaArray;
3450
3578
  }
3451
3579
  }
3452
3580
  }
@@ -3458,13 +3586,13 @@
3458
3586
  if (schema.const) {
3459
3587
  return true;
3460
3588
  }
3461
- if (schema.enum && schema.enum.length === 1 && schema.enum[0] === true) {
3589
+ if (schema.enum?.length === 1 && schema.enum[0] === true) {
3462
3590
  return true;
3463
3591
  }
3464
- if (schema.anyOf && schema.anyOf.length === 1) {
3592
+ if (schema.anyOf?.length === 1) {
3465
3593
  return schemaRequiresTrueValue(schema.anyOf[0]);
3466
3594
  }
3467
- if (schema.oneOf && schema.oneOf.length === 1) {
3595
+ if (schema.oneOf?.length === 1) {
3468
3596
  return schemaRequiresTrueValue(schema.oneOf[0]);
3469
3597
  }
3470
3598
  if (schema.allOf) {
@@ -3473,6 +3601,35 @@
3473
3601
  }
3474
3602
  return false;
3475
3603
  }
3604
+ function SelectedOptionDescription({ hideLabel, id, multiple, options, registry, uiSchema, value }) {
3605
+ if (multiple || hideLabel) {
3606
+ return null;
3607
+ }
3608
+ const { label = true } = getUiOptions(uiSchema, registry.globalUiOptions);
3609
+ if (!label) {
3610
+ return null;
3611
+ }
3612
+ const option = options.enumOptions?.find(({ value: enumValue }) => enumOptionsIsSelected(enumValue, value));
3613
+ const description = option?.schema?.description;
3614
+ if (!description) {
3615
+ return null;
3616
+ }
3617
+ const DescriptionFieldTemplate = getTemplate(
3618
+ "DescriptionFieldTemplate",
3619
+ registry,
3620
+ options
3621
+ );
3622
+ return /* @__PURE__ */ jsxRuntime.jsx(
3623
+ DescriptionFieldTemplate,
3624
+ {
3625
+ id: descriptionId(id),
3626
+ description,
3627
+ schema: option.schema,
3628
+ uiSchema,
3629
+ registry
3630
+ }
3631
+ );
3632
+ }
3476
3633
 
3477
3634
  // src/shallowEquals.ts
3478
3635
  function shallowEquals(a, b) {
@@ -3490,9 +3647,9 @@
3490
3647
  if (keysA.length !== keysB.length) {
3491
3648
  return false;
3492
3649
  }
3493
- for (let i = 0; i < keysA.length; i++) {
3650
+ for (let i = 0; i < keysA.length; i += 1) {
3494
3651
  const key = keysA[i];
3495
- if (!Object.prototype.hasOwnProperty.call(b, key) || !Object.is(a[key], b[key])) {
3652
+ if (!Object.hasOwn(b, key) || !Object.is(a[key], b[key])) {
3496
3653
  return false;
3497
3654
  }
3498
3655
  }
@@ -3554,14 +3711,14 @@
3554
3711
  })
3555
3712
  );
3556
3713
  }
3557
- return Object.keys(errorSchema).reduce((acc, key) => {
3714
+ return Object.keys(errorSchema).reduce((currentList, key) => {
3558
3715
  if (key !== ERRORS_KEY) {
3559
3716
  const childSchema = errorSchema[key];
3560
3717
  if (isPlainObject2(childSchema)) {
3561
- acc = acc.concat(toErrorList(childSchema, [...fieldPath, key]));
3718
+ return currentList.concat(toErrorList(childSchema, [...fieldPath, key]));
3562
3719
  }
3563
3720
  }
3564
- return acc;
3721
+ return currentList;
3565
3722
  }, errorList);
3566
3723
  }
3567
3724
  function toErrorSchema(errors) {
@@ -3597,16 +3754,15 @@
3597
3754
  return Object.keys(errorHandler).reduce((acc, key) => {
3598
3755
  if (key === "addError") {
3599
3756
  return acc;
3600
- } else {
3601
- const childSchema = errorHandler[key];
3602
- if (isPlainObject2(childSchema)) {
3603
- return {
3604
- ...acc,
3605
- [key]: unwrapErrorHandler(childSchema)
3606
- };
3607
- }
3608
- return { ...acc, [key]: childSchema };
3609
3757
  }
3758
+ const childSchema = errorHandler[key];
3759
+ if (isPlainObject2(childSchema)) {
3760
+ return {
3761
+ ...acc,
3762
+ [key]: unwrapErrorHandler(childSchema)
3763
+ };
3764
+ }
3765
+ return { ...acc, [key]: childSchema };
3610
3766
  }, {});
3611
3767
  }
3612
3768
  function readyForChange(state) {
@@ -3630,7 +3786,7 @@
3630
3786
  } = props;
3631
3787
  const id = `${rootId}_${type}`;
3632
3788
  const { SelectWidget } = registry.widgets;
3633
- const onChange = react.useCallback((value2) => select(type, value2), [select, type]);
3789
+ const onChange = react.useCallback((newValue) => select(type, newValue), [select, type]);
3634
3790
  return /* @__PURE__ */ jsxRuntime.jsx(
3635
3791
  SelectWidget,
3636
3792
  {
@@ -3660,10 +3816,10 @@
3660
3816
  setState(parseDateString(value, time));
3661
3817
  }, [time, value]);
3662
3818
  const handleChange = react.useCallback(
3663
- (property, value2) => {
3819
+ (property, newValue) => {
3664
3820
  const nextState = {
3665
3821
  ...state,
3666
- [property]: typeof value2 === "undefined" ? -1 : value2
3822
+ [property]: typeof newValue === "undefined" ? -1 : newValue
3667
3823
  };
3668
3824
  if (readyForChange(nextState)) {
3669
3825
  onChange(toDateString(nextState, time));
@@ -3715,7 +3871,7 @@
3715
3871
  function addNameToDataURL(dataURL, name) {
3716
3872
  return dataURL.replace(";base64", `;name=${encodeURIComponent(name)};base64`);
3717
3873
  }
3718
- function processFile(file) {
3874
+ async function processFile(file) {
3719
3875
  const { name, size, type } = file;
3720
3876
  return new Promise((resolve, reject) => {
3721
3877
  const reader = new window.FileReader();
@@ -3740,7 +3896,7 @@
3740
3896
  reader.readAsDataURL(file);
3741
3897
  });
3742
3898
  }
3743
- function processFiles(files) {
3899
+ async function processFiles(files) {
3744
3900
  return Promise.all(Array.from(files).map(processFile));
3745
3901
  }
3746
3902
  function extractFileInfo(dataURLs) {
@@ -3834,22 +3990,21 @@
3834
3990
  return { errorSchema, errors };
3835
3991
  }
3836
3992
  function withIdRefPrefixObject(node) {
3837
- for (const key in node) {
3838
- const realObj = node;
3839
- const value = realObj[key];
3840
- if (key === REF_KEY && typeof value === "string" && value.startsWith("#")) {
3841
- realObj[key] = ROOT_SCHEMA_PREFIX + value;
3842
- } else {
3843
- realObj[key] = withIdRefPrefix(value);
3993
+ const realObj = node;
3994
+ for (const key in realObj) {
3995
+ if (Object.hasOwn(realObj, key)) {
3996
+ const value = realObj[key];
3997
+ if (key === REF_KEY && typeof value === "string" && value.startsWith("#")) {
3998
+ realObj[key] = ROOT_SCHEMA_PREFIX + value;
3999
+ } else {
4000
+ realObj[key] = withIdRefPrefix(value);
4001
+ }
3844
4002
  }
3845
4003
  }
3846
4004
  return node;
3847
4005
  }
3848
4006
  function withIdRefPrefixArray(node) {
3849
- for (let i = 0; i < node.length; i++) {
3850
- node[i] = withIdRefPrefix(node[i]);
3851
- }
3852
- return node;
4007
+ return node.map((item) => withIdRefPrefix(item));
3853
4008
  }
3854
4009
  function withIdRefPrefix(schemaNode) {
3855
4010
  if (Array.isArray(schemaNode)) {
@@ -3874,6 +4029,7 @@
3874
4029
  TranslatableString2["AddButton"] = "Add";
3875
4030
  TranslatableString2["AddItemButton"] = "Add Item";
3876
4031
  TranslatableString2["CopyButton"] = "Copy";
4032
+ TranslatableString2["ExpandButton"] = "Expand Cycle";
3877
4033
  TranslatableString2["MoveDownButton"] = "Move down";
3878
4034
  TranslatableString2["MoveUpButton"] = "Move up";
3879
4035
  TranslatableString2["RemoveButton"] = "Remove";
@@ -3894,6 +4050,7 @@
3894
4050
  TranslatableString2["TitleOptionPrefix"] = "%1 option %2";
3895
4051
  TranslatableString2["KeyLabel"] = "%1 Key";
3896
4052
  TranslatableString2["DeprecatedLabel"] = "%1 (deprecated)";
4053
+ TranslatableString2["CycleDetected"] = 'Circular reference ($ref cycle) detected for field "%1". You may choose to expand to the next cycle break';
3897
4054
  TranslatableString2["InvalidObjectField"] = 'Invalid "%1" object field configuration: _%2_.';
3898
4055
  TranslatableString2["UnsupportedField"] = "Unsupported field schema.";
3899
4056
  TranslatableString2["UnsupportedFieldWithId"] = "Unsupported field schema for field `%1`.";
@@ -3927,7 +4084,7 @@
3927
4084
  * @param hash - The hash value at which to map the schema
3928
4085
  */
3929
4086
  addSchema(schema, hash) {
3930
- const key = get15(schema, ID_KEY, hash);
4087
+ const key = get14(schema, ID_KEY, hash);
3931
4088
  const identifiedSchema = { ...schema, [ID_KEY]: key };
3932
4089
  const existing = this.schemaMap[key];
3933
4090
  if (!existing) {
@@ -3993,20 +4150,20 @@
3993
4150
  // src/parser/schemaParser.ts
3994
4151
  function parseSchema(validator, recurseList, rootSchema, schema) {
3995
4152
  const schemas = retrieveSchemaInternal(validator, schema, rootSchema, void 0, true);
3996
- schemas.forEach((schema2) => {
3997
- const sameSchemaIndex = recurseList.findIndex((item) => deepEquals_default(item, schema2));
4153
+ schemas.forEach((localSchema) => {
4154
+ const sameSchemaIndex = recurseList.findIndex((item) => deepEquals_default(item, localSchema));
3998
4155
  if (sameSchemaIndex === -1) {
3999
- recurseList.push(schema2);
4000
- const allOptions = resolveAnyOrOneOfSchemas(validator, schema2, rootSchema, true);
4156
+ recurseList.push(localSchema);
4157
+ const allOptions = resolveAnyOrOneOfSchemas(validator, localSchema, rootSchema, true);
4001
4158
  allOptions.forEach((s) => {
4002
4159
  if (PROPERTIES_KEY in s && s[PROPERTIES_KEY]) {
4003
- forEach(schema2[PROPERTIES_KEY], (value) => {
4160
+ forEach(localSchema[PROPERTIES_KEY], (value) => {
4004
4161
  parseSchema(validator, recurseList, rootSchema, value);
4005
4162
  });
4006
4163
  }
4007
4164
  });
4008
- if (ITEMS_KEY in schema2 && !Array.isArray(schema2.items) && typeof schema2.items !== "boolean") {
4009
- parseSchema(validator, recurseList, rootSchema, schema2.items);
4165
+ if (ITEMS_KEY in localSchema && !Array.isArray(localSchema.items) && typeof localSchema.items !== "boolean") {
4166
+ parseSchema(validator, recurseList, rootSchema, localSchema.items);
4010
4167
  }
4011
4168
  }
4012
4169
  });
@@ -4049,10 +4206,13 @@
4049
4206
  exports.REF_KEY = REF_KEY;
4050
4207
  exports.REQUIRED_KEY = REQUIRED_KEY;
4051
4208
  exports.RJSF_ADDITIONAL_PROPERTIES_FLAG = RJSF_ADDITIONAL_PROPERTIES_FLAG;
4209
+ exports.RJSF_PREFIX_KEY = RJSF_PREFIX_KEY;
4210
+ exports.RJSF_REF_CYCLE_KEY = RJSF_REF_CYCLE_KEY;
4052
4211
  exports.RJSF_REF_KEY = RJSF_REF_KEY;
4053
4212
  exports.ROOT_SCHEMA_PREFIX = ROOT_SCHEMA_PREFIX;
4054
4213
  exports.SCHEMA_KEY = SCHEMA_KEY;
4055
4214
  exports.SUBMIT_BTN_OPTIONS_KEY = SUBMIT_BTN_OPTIONS_KEY;
4215
+ exports.SelectedOptionDescription = SelectedOptionDescription;
4056
4216
  exports.TranslatableString = TranslatableString;
4057
4217
  exports.UI_DEFINITIONS_KEY = UI_DEFINITIONS_KEY;
4058
4218
  exports.UI_FIELD_KEY = UI_FIELD_KEY;
@@ -4123,6 +4283,7 @@
4123
4283
  exports.isValueEmpty = isValueEmpty;
4124
4284
  exports.labelValue = labelValue;
4125
4285
  exports.localToUTC = localToUTC;
4286
+ exports.logUnsupportedDefaultForEnum = logUnsupportedDefaultForEnum;
4126
4287
  exports.lookupFromFormContext = lookupFromFormContext;
4127
4288
  exports.mergeDefaultsWithFormData = mergeDefaultsWithFormData;
4128
4289
  exports.mergeObjects = mergeObjects;