@rjsf/utils 6.0.0-beta.2 → 6.0.0-beta.20

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 (79) hide show
  1. package/dist/{index.js → index.cjs} +241 -205
  2. package/dist/index.cjs.map +7 -0
  3. package/dist/utils.esm.js +240 -204
  4. package/dist/utils.esm.js.map +4 -4
  5. package/dist/utils.umd.js +235 -200
  6. package/lib/canExpand.d.ts +1 -1
  7. package/lib/constants.d.ts +3 -0
  8. package/lib/constants.js +3 -0
  9. package/lib/constants.js.map +1 -1
  10. package/lib/createSchemaUtils.js +19 -14
  11. package/lib/createSchemaUtils.js.map +1 -1
  12. package/lib/enums.d.ts +3 -3
  13. package/lib/enums.js +3 -3
  14. package/lib/findSchemaDefinition.d.ts +7 -1
  15. package/lib/findSchemaDefinition.js +48 -6
  16. package/lib/findSchemaDefinition.js.map +1 -1
  17. package/lib/getTestIds.js +2 -2
  18. package/lib/getTestIds.js.map +1 -1
  19. package/lib/getUiOptions.js +4 -0
  20. package/lib/getUiOptions.js.map +1 -1
  21. package/lib/getWidget.js +3 -3
  22. package/lib/getWidget.js.map +1 -1
  23. package/lib/idGenerators.d.ts +15 -15
  24. package/lib/idGenerators.js +8 -8
  25. package/lib/idGenerators.js.map +1 -1
  26. package/lib/index.d.ts +4 -1
  27. package/lib/index.js +3 -1
  28. package/lib/index.js.map +1 -1
  29. package/lib/mergeDefaultsWithFormData.js +14 -2
  30. package/lib/mergeDefaultsWithFormData.js.map +1 -1
  31. package/lib/schema/findFieldInSchema.d.ts +1 -1
  32. package/lib/schema/findFieldInSchema.js +1 -1
  33. package/lib/schema/getDefaultFormState.d.ts +11 -2
  34. package/lib/schema/getDefaultFormState.js +59 -22
  35. package/lib/schema/getDefaultFormState.js.map +1 -1
  36. package/lib/schema/getDisplayLabel.js +2 -2
  37. package/lib/schema/getDisplayLabel.js.map +1 -1
  38. package/lib/schema/index.d.ts +1 -2
  39. package/lib/schema/index.js +1 -2
  40. package/lib/schema/index.js.map +1 -1
  41. package/lib/schema/retrieveSchema.d.ts +1 -1
  42. package/lib/schema/retrieveSchema.js +6 -6
  43. package/lib/schema/retrieveSchema.js.map +1 -1
  44. package/lib/shallowEquals.d.ts +8 -0
  45. package/lib/shallowEquals.js +36 -0
  46. package/lib/shallowEquals.js.map +1 -0
  47. package/lib/shouldRender.d.ts +8 -2
  48. package/lib/shouldRender.js +17 -2
  49. package/lib/shouldRender.js.map +1 -1
  50. package/lib/toFieldPathId.d.ts +12 -0
  51. package/lib/toFieldPathId.js +19 -0
  52. package/lib/toFieldPathId.js.map +1 -0
  53. package/lib/tsconfig.tsbuildinfo +1 -1
  54. package/lib/types.d.ts +97 -66
  55. package/package.json +13 -14
  56. package/src/constants.ts +3 -0
  57. package/src/createSchemaUtils.ts +19 -25
  58. package/src/enums.ts +3 -3
  59. package/src/findSchemaDefinition.ts +55 -6
  60. package/src/getTestIds.ts +2 -2
  61. package/src/getUiOptions.ts +4 -0
  62. package/src/getWidget.tsx +3 -3
  63. package/src/idGenerators.ts +25 -25
  64. package/src/index.ts +6 -0
  65. package/src/mergeDefaultsWithFormData.ts +16 -2
  66. package/src/schema/findFieldInSchema.ts +1 -1
  67. package/src/schema/getDefaultFormState.ts +76 -32
  68. package/src/schema/getDisplayLabel.ts +2 -2
  69. package/src/schema/index.ts +0 -2
  70. package/src/schema/retrieveSchema.ts +7 -5
  71. package/src/shallowEquals.ts +41 -0
  72. package/src/shouldRender.ts +27 -2
  73. package/src/toFieldPathId.ts +24 -0
  74. package/src/types.ts +107 -70
  75. package/dist/index.js.map +0 -7
  76. package/lib/schema/toIdSchema.d.ts +0 -14
  77. package/lib/schema/toIdSchema.js +0 -62
  78. package/lib/schema/toIdSchema.js.map +0 -1
  79. package/src/schema/toIdSchema.ts +0 -131
@@ -35,6 +35,8 @@ __export(index_exports, {
35
35
  ALL_OF_KEY: () => ALL_OF_KEY,
36
36
  ANY_OF_KEY: () => ANY_OF_KEY,
37
37
  CONST_KEY: () => CONST_KEY,
38
+ DEFAULT_ID_PREFIX: () => DEFAULT_ID_PREFIX,
39
+ DEFAULT_ID_SEPARATOR: () => DEFAULT_ID_SEPARATOR,
38
40
  DEFAULT_KEY: () => DEFAULT_KEY,
39
41
  DEFINITIONS_KEY: () => DEFINITIONS_KEY,
40
42
  DEPENDENCIES_KEY: () => DEPENDENCIES_KEY,
@@ -46,6 +48,7 @@ __export(index_exports, {
46
48
  ID_KEY: () => ID_KEY,
47
49
  IF_KEY: () => IF_KEY,
48
50
  ITEMS_KEY: () => ITEMS_KEY,
51
+ JSON_SCHEMA_DRAFT_2019_09: () => JSON_SCHEMA_DRAFT_2019_09,
49
52
  JSON_SCHEMA_DRAFT_2020_12: () => JSON_SCHEMA_DRAFT_2020_12,
50
53
  JUNK_OPTION_ID: () => JUNK_OPTION_ID,
51
54
  LOOKUP_MAP_NAME: () => LOOKUP_MAP_NAME,
@@ -133,6 +136,7 @@ __export(index_exports, {
133
136
  sanitizeDataForNewSchema: () => sanitizeDataForNewSchema,
134
137
  schemaParser: () => schemaParser,
135
138
  schemaRequiresTrueValue: () => schemaRequiresTrueValue,
139
+ shallowEquals: () => shallowEquals,
136
140
  shouldRender: () => shouldRender,
137
141
  sortedJSONStringify: () => sortedJSONStringify,
138
142
  titleId: () => titleId,
@@ -140,7 +144,7 @@ __export(index_exports, {
140
144
  toDateString: () => toDateString,
141
145
  toErrorList: () => toErrorList,
142
146
  toErrorSchema: () => toErrorSchema,
143
- toIdSchema: () => toIdSchema,
147
+ toFieldPathId: () => toFieldPathId,
144
148
  toPathSchema: () => toPathSchema,
145
149
  unwrapErrorHandler: () => unwrapErrorHandler,
146
150
  utcToLocal: () => utcToLocal,
@@ -217,6 +221,8 @@ var REQUIRED_KEY = "required";
217
221
  var SUBMIT_BTN_OPTIONS_KEY = "submitButtonOptions";
218
222
  var REF_KEY = "$ref";
219
223
  var SCHEMA_KEY = "$schema";
224
+ var DEFAULT_ID_PREFIX = "root";
225
+ var DEFAULT_ID_SEPARATOR = "_";
220
226
  var DISCRIMINATOR_PATH = ["discriminator", "propertyName"];
221
227
  var FORM_CONTEXT_NAME = "formContext";
222
228
  var LOOKUP_MAP_NAME = "layoutGridLookupMap";
@@ -226,10 +232,14 @@ var UI_FIELD_KEY = "ui:field";
226
232
  var UI_WIDGET_KEY = "ui:widget";
227
233
  var UI_OPTIONS_KEY = "ui:options";
228
234
  var UI_GLOBAL_OPTIONS_KEY = "ui:globalOptions";
235
+ var JSON_SCHEMA_DRAFT_2019_09 = "https://json-schema.org/draft/2019-09/schema";
229
236
  var JSON_SCHEMA_DRAFT_2020_12 = "https://json-schema.org/draft/2020-12/schema";
230
237
 
231
238
  // src/getUiOptions.ts
232
239
  function getUiOptions(uiSchema = {}, globalOptions = {}) {
240
+ if (!uiSchema) {
241
+ return { ...globalOptions };
242
+ }
233
243
  return Object.keys(uiSchema).filter((key) => key.indexOf("ui:") === 0).reduce(
234
244
  (options, key) => {
235
245
  const value = uiSchema[key];
@@ -299,15 +309,15 @@ function deepEquals(a, b) {
299
309
  }
300
310
 
301
311
  // src/schema/findFieldInSchema.ts
302
- var import_get7 = __toESM(require("lodash/get"), 1);
312
+ var import_get8 = __toESM(require("lodash/get"), 1);
303
313
  var import_has3 = __toESM(require("lodash/has"), 1);
304
314
 
305
315
  // src/schema/findSelectedOptionInXxxOf.ts
306
- var import_get5 = __toESM(require("lodash/get"), 1);
316
+ var import_get6 = __toESM(require("lodash/get"), 1);
307
317
  var import_isEqual = __toESM(require("lodash/isEqual"), 1);
308
318
 
309
319
  // src/schema/retrieveSchema.ts
310
- var import_get4 = __toESM(require("lodash/get"), 1);
320
+ var import_get5 = __toESM(require("lodash/get"), 1);
311
321
  var import_set = __toESM(require("lodash/set"), 1);
312
322
  var import_times = __toESM(require("lodash/times"), 1);
313
323
  var import_transform = __toESM(require("lodash/transform"), 1);
@@ -322,12 +332,22 @@ var import_omit = __toESM(require("lodash/omit"), 1);
322
332
  var import_isObject3 = __toESM(require("lodash/isObject"), 1);
323
333
  var import_isEmpty = __toESM(require("lodash/isEmpty"), 1);
324
334
  var import_fast_uri = __toESM(require("fast-uri"), 1);
335
+ var import_get = __toESM(require("lodash/get"), 1);
325
336
  function findEmbeddedSchemaRecursive(schema, ref) {
326
337
  if (ID_KEY in schema && import_fast_uri.default.equal(schema[ID_KEY], ref)) {
327
338
  return schema;
328
339
  }
329
340
  for (const subSchema of Object.values(schema)) {
330
- if ((0, import_isObject3.default)(subSchema)) {
341
+ if (Array.isArray(subSchema)) {
342
+ for (const item of subSchema) {
343
+ if ((0, import_isObject3.default)(item)) {
344
+ const result = findEmbeddedSchemaRecursive(item, ref);
345
+ if (result !== void 0) {
346
+ return result;
347
+ }
348
+ }
349
+ }
350
+ } else if ((0, import_isObject3.default)(subSchema)) {
331
351
  const result = findEmbeddedSchemaRecursive(subSchema, ref);
332
352
  if (result !== void 0) {
333
353
  return result;
@@ -336,12 +356,29 @@ function findEmbeddedSchemaRecursive(schema, ref) {
336
356
  }
337
357
  return void 0;
338
358
  }
359
+ function makeAllReferencesAbsolute(schema, baseURI) {
360
+ const currentURI = (0, import_get.default)(schema, ID_KEY, baseURI);
361
+ if (REF_KEY in schema) {
362
+ schema = { ...schema, [REF_KEY]: import_fast_uri.default.resolve(currentURI, schema[REF_KEY]) };
363
+ }
364
+ for (const [key, subSchema] of Object.entries(schema)) {
365
+ if (Array.isArray(subSchema)) {
366
+ schema = {
367
+ ...schema,
368
+ [key]: subSchema.map((item) => (0, import_isObject3.default)(item) ? makeAllReferencesAbsolute(item, currentURI) : item)
369
+ };
370
+ } else if ((0, import_isObject3.default)(subSchema)) {
371
+ schema = { ...schema, [key]: makeAllReferencesAbsolute(subSchema, currentURI) };
372
+ }
373
+ }
374
+ return schema;
375
+ }
339
376
  function splitKeyElementFromObject(key, object) {
340
377
  const value = object[key];
341
378
  const remaining = (0, import_omit.default)(object, [key]);
342
379
  return [remaining, value];
343
380
  }
344
- function findSchemaDefinitionRecursive($ref, rootSchema = {}, recurseList = [], baseURI = ID_KEY in rootSchema ? rootSchema[ID_KEY] : void 0) {
381
+ function findSchemaDefinitionRecursive($ref, rootSchema = {}, recurseList = [], baseURI = (0, import_get.default)(rootSchema, [ID_KEY])) {
345
382
  const ref = $ref || "";
346
383
  let current = void 0;
347
384
  if (ref.startsWith("#")) {
@@ -381,23 +418,27 @@ function findSchemaDefinitionRecursive($ref, rootSchema = {}, recurseList = [],
381
418
  const [remaining, theRef] = splitKeyElementFromObject(REF_KEY, current);
382
419
  const subSchema = findSchemaDefinitionRecursive(theRef, rootSchema, [...recurseList, ref], baseURI);
383
420
  if (Object.keys(remaining).length > 0) {
384
- return { ...remaining, ...subSchema };
421
+ if (rootSchema[SCHEMA_KEY] === JSON_SCHEMA_DRAFT_2019_09 || rootSchema[SCHEMA_KEY] === JSON_SCHEMA_DRAFT_2020_12) {
422
+ return { [ALL_OF_KEY]: [remaining, subSchema] };
423
+ } else {
424
+ return { ...remaining, ...subSchema };
425
+ }
385
426
  }
386
427
  return subSchema;
387
428
  }
388
429
  return current;
389
430
  }
390
- function findSchemaDefinition($ref, rootSchema = {}, baseURI = ID_KEY in rootSchema ? rootSchema[ID_KEY] : void 0) {
431
+ function findSchemaDefinition($ref, rootSchema = {}, baseURI = (0, import_get.default)(rootSchema, [ID_KEY])) {
391
432
  const recurseList = [];
392
433
  return findSchemaDefinitionRecursive($ref, rootSchema, recurseList, baseURI);
393
434
  }
394
435
 
395
436
  // src/getDiscriminatorFieldFromSchema.ts
396
- var import_get = __toESM(require("lodash/get"), 1);
437
+ var import_get2 = __toESM(require("lodash/get"), 1);
397
438
  var import_isString = __toESM(require("lodash/isString"), 1);
398
439
  function getDiscriminatorFieldFromSchema(schema) {
399
440
  let discriminator;
400
- const maybeString = (0, import_get.default)(schema, DISCRIMINATOR_PATH);
441
+ const maybeString = (0, import_get2.default)(schema, DISCRIMINATOR_PATH);
401
442
  if ((0, import_isString.default)(maybeString)) {
402
443
  discriminator = maybeString;
403
444
  } else if (maybeString !== void 0) {
@@ -471,21 +512,21 @@ function mergeSchemas(obj1, obj2) {
471
512
  }
472
513
 
473
514
  // src/schema/getFirstMatchingOption.ts
474
- var import_get3 = __toESM(require("lodash/get"), 1);
515
+ var import_get4 = __toESM(require("lodash/get"), 1);
475
516
  var import_has = __toESM(require("lodash/has"), 1);
476
517
  var import_isNumber = __toESM(require("lodash/isNumber"), 1);
477
518
 
478
519
  // src/getOptionMatchingSimpleDiscriminator.ts
479
- var import_get2 = __toESM(require("lodash/get"), 1);
520
+ var import_get3 = __toESM(require("lodash/get"), 1);
480
521
  function getOptionMatchingSimpleDiscriminator(formData, options, discriminatorField) {
481
522
  if (formData && discriminatorField) {
482
- const value = (0, import_get2.default)(formData, discriminatorField);
523
+ const value = (0, import_get3.default)(formData, discriminatorField);
483
524
  if (value === void 0) {
484
525
  return;
485
526
  }
486
527
  for (let i = 0; i < options.length; i++) {
487
528
  const option = options[i];
488
- const discriminator = (0, import_get2.default)(option, [PROPERTIES_KEY, discriminatorField], {});
529
+ const discriminator = (0, import_get3.default)(option, [PROPERTIES_KEY, discriminatorField], {});
489
530
  if (discriminator.type === "object" || discriminator.type === "array") {
490
531
  continue;
491
532
  }
@@ -512,8 +553,8 @@ function getFirstMatchingOption(validator, formData, options, rootSchema, discri
512
553
  for (let i = 0; i < options.length; i++) {
513
554
  const option = options[i];
514
555
  if (discriminatorField && (0, import_has.default)(option, [PROPERTIES_KEY, discriminatorField])) {
515
- const value = (0, import_get3.default)(formData, discriminatorField);
516
- const discriminator = (0, import_get3.default)(option, [PROPERTIES_KEY, discriminatorField], {});
556
+ const value = (0, import_get4.default)(formData, discriminatorField);
557
+ const discriminator = (0, import_get4.default)(option, [PROPERTIES_KEY, discriminatorField], {});
517
558
  if (validator.isValid(discriminator, value, rootSchema)) {
518
559
  return i;
519
560
  }
@@ -653,7 +694,8 @@ function resolveSchema(validator, schema, rootSchema, expandAllBranches, recurse
653
694
  rootSchema,
654
695
  expandAllBranches,
655
696
  recurseList,
656
- formData
697
+ formData,
698
+ experimental_customMergeAllOf
657
699
  );
658
700
  if (updatedSchemas.length > 1 || updatedSchemas[0] !== schema) {
659
701
  return updatedSchemas;
@@ -665,7 +707,8 @@ function resolveSchema(validator, schema, rootSchema, expandAllBranches, recurse
665
707
  rootSchema,
666
708
  expandAllBranches,
667
709
  recurseList,
668
- formData
710
+ formData,
711
+ experimental_customMergeAllOf
669
712
  );
670
713
  return resolvedSchemas.flatMap((s) => {
671
714
  return retrieveSchemaInternal(
@@ -768,9 +811,9 @@ function stubExistingAdditionalProperties(validator, theSchema, rootSchema, aFor
768
811
  if (!(0, import_isEmpty2.default)(matchingProperties)) {
769
812
  schema.properties[key] = retrieveSchema(
770
813
  validator,
771
- { allOf: Object.values(matchingProperties) },
814
+ { [ALL_OF_KEY]: Object.values(matchingProperties) },
772
815
  rootSchema,
773
- formData,
816
+ (0, import_get5.default)(formData, [key]),
774
817
  experimental_customMergeAllOf
775
818
  );
776
819
  (0, import_set.default)(schema.properties, [key, ADDITIONAL_PROPERTY_FLAG], true);
@@ -783,7 +826,7 @@ function stubExistingAdditionalProperties(validator, theSchema, rootSchema, aFor
783
826
  if (REF_KEY in schema.additionalProperties) {
784
827
  additionalProperties = retrieveSchema(
785
828
  validator,
786
- { $ref: (0, import_get4.default)(schema.additionalProperties, [REF_KEY]) },
829
+ { [REF_KEY]: (0, import_get5.default)(schema.additionalProperties, [REF_KEY]) },
787
830
  rootSchema,
788
831
  formData,
789
832
  experimental_customMergeAllOf
@@ -796,10 +839,10 @@ function stubExistingAdditionalProperties(validator, theSchema, rootSchema, aFor
796
839
  ...schema.additionalProperties
797
840
  };
798
841
  } else {
799
- additionalProperties = { type: guessType((0, import_get4.default)(formData, [key])) };
842
+ additionalProperties = { type: guessType((0, import_get5.default)(formData, [key])) };
800
843
  }
801
844
  } else {
802
- additionalProperties = { type: guessType((0, import_get4.default)(formData, [key])) };
845
+ additionalProperties = { type: guessType((0, import_get5.default)(formData, [key])) };
803
846
  }
804
847
  schema.properties[key] = additionalProperties;
805
848
  (0, import_set.default)(schema.properties, [key, ADDITIONAL_PROPERTY_FLAG], true);
@@ -878,7 +921,7 @@ function retrieveSchemaInternal(validator, schema, rootSchema, rawFormData, expa
878
921
  validator,
879
922
  { allOf: [schema2.properties[key], ...Object.values(matchingProperties)] },
880
923
  rootSchema,
881
- rawFormData,
924
+ (0, import_get5.default)(rawFormData, [key]),
882
925
  experimental_customMergeAllOf
883
926
  );
884
927
  }
@@ -950,7 +993,7 @@ function resolveDependencies(validator, schema, rootSchema, expandAllBranches, r
950
993
  function processDependencies(validator, dependencies, resolvedSchema, rootSchema, expandAllBranches, recurseList, formData, experimental_customMergeAllOf) {
951
994
  let schemas = [resolvedSchema];
952
995
  for (const dependencyKey in dependencies) {
953
- if (!expandAllBranches && (0, import_get4.default)(formData, [dependencyKey]) === void 0) {
996
+ if (!expandAllBranches && (0, import_get5.default)(formData, [dependencyKey]) === void 0) {
954
997
  continue;
955
998
  }
956
999
  if (resolvedSchema.properties && !(dependencyKey in resolvedSchema.properties)) {
@@ -1081,11 +1124,11 @@ function findSelectedOptionInXxxOf(validator, rootSchema, schema, fallbackField,
1081
1124
  const xxxOfs = schema[xxx].map(
1082
1125
  (xxxOf) => retrieveSchema(validator, xxxOf, rootSchema, formData, experimental_customMergeAllOf)
1083
1126
  );
1084
- const data = (0, import_get5.default)(formData, selectorField);
1127
+ const data = (0, import_get6.default)(formData, selectorField);
1085
1128
  if (data !== void 0) {
1086
1129
  return xxxOfs.find((xxx2) => {
1087
1130
  return (0, import_isEqual.default)(
1088
- (0, import_get5.default)(xxx2, [PROPERTIES_KEY, selectorField, DEFAULT_KEY], (0, import_get5.default)(xxx2, [PROPERTIES_KEY, selectorField, CONST_KEY])),
1131
+ (0, import_get6.default)(xxx2, [PROPERTIES_KEY, selectorField, DEFAULT_KEY], (0, import_get6.default)(xxx2, [PROPERTIES_KEY, selectorField, CONST_KEY])),
1089
1132
  data
1090
1133
  );
1091
1134
  });
@@ -1095,7 +1138,7 @@ function findSelectedOptionInXxxOf(validator, rootSchema, schema, fallbackField,
1095
1138
  }
1096
1139
 
1097
1140
  // src/schema/getFromSchema.ts
1098
- var import_get6 = __toESM(require("lodash/get"), 1);
1141
+ var import_get7 = __toESM(require("lodash/get"), 1);
1099
1142
  var import_has2 = __toESM(require("lodash/has"), 1);
1100
1143
  var import_isEmpty3 = __toESM(require("lodash/isEmpty"), 1);
1101
1144
  function getFromSchemaInternal(validator, rootSchema, schema, path, experimental_customMergeAllOf) {
@@ -1109,7 +1152,7 @@ function getFromSchemaInternal(validator, rootSchema, schema, path, experimental
1109
1152
  const pathList = Array.isArray(path) ? path : path.split(".");
1110
1153
  const [part, ...nestedPath] = pathList;
1111
1154
  if (part && (0, import_has2.default)(fieldSchema, part)) {
1112
- fieldSchema = (0, import_get6.default)(fieldSchema, part);
1155
+ fieldSchema = (0, import_get7.default)(fieldSchema, part);
1113
1156
  return getFromSchemaInternal(
1114
1157
  validator,
1115
1158
  rootSchema,
@@ -1151,7 +1194,7 @@ function findFieldInSchema(validator, rootSchema, schema, path, formData = {}, e
1151
1194
  parentField,
1152
1195
  fieldName,
1153
1196
  ONE_OF_KEY,
1154
- (0, import_get7.default)(formData, subPath),
1197
+ (0, import_get8.default)(formData, subPath),
1155
1198
  experimental_customMergeAllOf
1156
1199
  );
1157
1200
  } else if ((0, import_has3.default)(parentField, ANY_OF_KEY)) {
@@ -1161,7 +1204,7 @@ function findFieldInSchema(validator, rootSchema, schema, path, formData = {}, e
1161
1204
  parentField,
1162
1205
  fieldName,
1163
1206
  ANY_OF_KEY,
1164
- (0, import_get7.default)(formData, subPath),
1207
+ (0, import_get8.default)(formData, subPath),
1165
1208
  experimental_customMergeAllOf
1166
1209
  );
1167
1210
  }
@@ -1215,11 +1258,11 @@ function findFieldInSchema(validator, rootSchema, schema, path, formData = {}, e
1215
1258
  }
1216
1259
 
1217
1260
  // src/schema/getDefaultFormState.ts
1218
- var import_get11 = __toESM(require("lodash/get"), 1);
1261
+ var import_get12 = __toESM(require("lodash/get"), 1);
1219
1262
  var import_isEmpty4 = __toESM(require("lodash/isEmpty"), 1);
1220
1263
 
1221
1264
  // src/schema/getClosestMatchingOption.ts
1222
- var import_get8 = __toESM(require("lodash/get"), 1);
1265
+ var import_get9 = __toESM(require("lodash/get"), 1);
1223
1266
  var import_has4 = __toESM(require("lodash/has"), 1);
1224
1267
  var import_isNumber2 = __toESM(require("lodash/isNumber"), 1);
1225
1268
  var import_isObject6 = __toESM(require("lodash/isObject"), 1);
@@ -1242,7 +1285,7 @@ function calculateIndexScore(validator, rootSchema, schema, formData, experiment
1242
1285
  totalScore += (0, import_reduce.default)(
1243
1286
  schema.properties,
1244
1287
  (score, value, key) => {
1245
- const formValue = (0, import_get8.default)(formData, key);
1288
+ const formValue = (0, import_get9.default)(formData, key);
1246
1289
  if (typeof value === "boolean") {
1247
1290
  return score;
1248
1291
  }
@@ -1269,7 +1312,7 @@ function calculateIndexScore(validator, rootSchema, schema, formData, experiment
1269
1312
  validator,
1270
1313
  rootSchema,
1271
1314
  formValue,
1272
- (0, import_get8.default)(value, key2),
1315
+ (0, import_get9.default)(value, key2),
1273
1316
  -1,
1274
1317
  discriminator,
1275
1318
  experimental_customMergeAllOf
@@ -1348,7 +1391,7 @@ function isFixedItems(schema) {
1348
1391
  }
1349
1392
 
1350
1393
  // src/mergeDefaultsWithFormData.ts
1351
- var import_get9 = __toESM(require("lodash/get"), 1);
1394
+ var import_get10 = __toESM(require("lodash/get"), 1);
1352
1395
  var import_isNil = __toESM(require("lodash/isNil"), 1);
1353
1396
  function mergeDefaultsWithFormData(defaults, formData, mergeExtraArrayDefaults = false, defaultSupercedesUndefined = false, overrideFormDataWithDefaults = false) {
1354
1397
  if (Array.isArray(formData)) {
@@ -1375,11 +1418,22 @@ function mergeDefaultsWithFormData(defaults, formData, mergeExtraArrayDefaults =
1375
1418
  if (isObject(formData)) {
1376
1419
  const acc = Object.assign({}, defaults);
1377
1420
  return Object.keys(formData).reduce((acc2, key) => {
1378
- const keyValue = (0, import_get9.default)(formData, key);
1421
+ const keyValue = (0, import_get10.default)(formData, key);
1379
1422
  const keyExistsInDefaults = isObject(defaults) && key in defaults;
1380
1423
  const keyExistsInFormData = key in formData;
1424
+ const keyDefault = (0, import_get10.default)(defaults, key) ?? {};
1425
+ const defaultValueIsNestedObject = keyExistsInDefaults && Object.entries(keyDefault).some(([, v]) => isObject(v));
1426
+ const keyDefaultIsObject = keyExistsInDefaults && isObject((0, import_get10.default)(defaults, key));
1427
+ const keyHasFormDataObject = keyExistsInFormData && isObject(keyValue);
1428
+ if (keyDefaultIsObject && keyHasFormDataObject && !defaultValueIsNestedObject) {
1429
+ acc2[key] = {
1430
+ ...(0, import_get10.default)(defaults, key),
1431
+ ...keyValue
1432
+ };
1433
+ return acc2;
1434
+ }
1381
1435
  acc2[key] = mergeDefaultsWithFormData(
1382
- defaults ? (0, import_get9.default)(defaults, key) : {},
1436
+ (0, import_get10.default)(defaults, key),
1383
1437
  keyValue,
1384
1438
  mergeExtraArrayDefaults,
1385
1439
  defaultSupercedesUndefined,
@@ -1390,7 +1444,7 @@ function mergeDefaultsWithFormData(defaults, formData, mergeExtraArrayDefaults =
1390
1444
  return acc2;
1391
1445
  }, acc);
1392
1446
  }
1393
- if (defaultSupercedesUndefined && (!(0, import_isNil.default)(defaults) && (0, import_isNil.default)(formData) || typeof formData === "number" && isNaN(formData)) || overrideFormDataWithDefaults && !(0, import_isNil.default)(formData)) {
1447
+ if (defaultSupercedesUndefined && (!(defaults === void 0) && (0, import_isNil.default)(formData) || typeof formData === "number" && isNaN(formData)) || overrideFormDataWithDefaults && !(0, import_isNil.default)(formData)) {
1394
1448
  return defaults;
1395
1449
  }
1396
1450
  return formData;
@@ -1458,7 +1512,7 @@ function constIsAjvDataReference(schema) {
1458
1512
  }
1459
1513
 
1460
1514
  // src/optionsList.ts
1461
- var import_get10 = __toESM(require("lodash/get"), 1);
1515
+ var import_get11 = __toESM(require("lodash/get"), 1);
1462
1516
 
1463
1517
  // src/toConstant.ts
1464
1518
  function toConstant(schema) {
@@ -1504,8 +1558,8 @@ function optionsList(schema, uiSchema) {
1504
1558
  let value;
1505
1559
  let label = title;
1506
1560
  if (selectorField) {
1507
- const innerSchema = (0, import_get10.default)(aSchema, [PROPERTIES_KEY, selectorField], {});
1508
- value = (0, import_get10.default)(innerSchema, DEFAULT_KEY, (0, import_get10.default)(innerSchema, CONST_KEY));
1561
+ const innerSchema = (0, import_get11.default)(aSchema, [PROPERTIES_KEY, selectorField], {});
1562
+ value = (0, import_get11.default)(innerSchema, DEFAULT_KEY, (0, import_get11.default)(innerSchema, CONST_KEY));
1509
1563
  label = label || innerSchema?.title || aSchema.title || String(value);
1510
1564
  } else {
1511
1565
  value = toConstant(aSchema);
@@ -1537,10 +1591,19 @@ function getInnerSchemaForArrayItem(schema, additionalItems = 0 /* Ignore */, id
1537
1591
  }
1538
1592
  return {};
1539
1593
  }
1594
+ function computeDefaultBasedOnSchemaTypeAndDefaults(schema, computedDefault) {
1595
+ const { default: schemaDefault, type } = schema;
1596
+ const shouldReturnNullAsDefault = Array.isArray(type) && type.includes("null") && (0, import_isEmpty4.default)(computedDefault) && schemaDefault === null;
1597
+ return shouldReturnNullAsDefault ? null : computedDefault;
1598
+ }
1540
1599
  function maybeAddDefaultToObject(obj, key, computedDefault, includeUndefinedValues, isParentRequired, requiredFields = [], experimental_defaultFormStateBehavior = {}, isConst = false) {
1541
1600
  const { emptyObjectFields = "populateAllDefaults" } = experimental_defaultFormStateBehavior;
1542
- if (includeUndefinedValues || isConst) {
1601
+ if (includeUndefinedValues === true || isConst) {
1543
1602
  obj[key] = computedDefault;
1603
+ } else if (includeUndefinedValues === "excludeObjectChildren") {
1604
+ if (!isObject(computedDefault) || !(0, import_isEmpty4.default)(computedDefault)) {
1605
+ obj[key] = computedDefault;
1606
+ }
1544
1607
  } else if (emptyObjectFields !== "skipDefaults") {
1545
1608
  const isSelfOrParentRequired = isParentRequired === void 0 ? requiredFields.includes(key) : isParentRequired;
1546
1609
  if (isObject(computedDefault)) {
@@ -1574,13 +1637,13 @@ function computeDefaults(validator, rawSchema, computeDefaultsProps = {}) {
1574
1637
  required,
1575
1638
  shouldMergeDefaultsIntoFormData = false
1576
1639
  } = computeDefaultsProps;
1577
- const formData = isObject(rawFormData) ? rawFormData : {};
1640
+ let formData = isObject(rawFormData) ? rawFormData : {};
1578
1641
  const schema = isObject(rawSchema) ? rawSchema : {};
1579
1642
  let defaults = parentDefaults;
1580
1643
  let schemaToCompute = null;
1581
1644
  let experimental_dfsb_to_compute = experimental_defaultFormStateBehavior;
1582
1645
  let updatedRecurseList = _recurseList;
1583
- if (schema[CONST_KEY] && experimental_defaultFormStateBehavior?.constAsDefaults !== "never" && !constIsAjvDataReference(schema)) {
1646
+ if (schema[CONST_KEY] !== void 0 && experimental_defaultFormStateBehavior?.constAsDefaults !== "never" && !constIsAjvDataReference(schema)) {
1584
1647
  defaults = schema[CONST_KEY];
1585
1648
  } else if (isObject(defaults) && isObject(schema.default)) {
1586
1649
  defaults = mergeObjects(defaults, schema.default);
@@ -1595,6 +1658,9 @@ function computeDefaults(validator, rawSchema, computeDefaultsProps = {}) {
1595
1658
  if (schemaToCompute && !defaults) {
1596
1659
  defaults = schema.default;
1597
1660
  }
1661
+ if (shouldMergeDefaultsIntoFormData && schemaToCompute && !isObject(rawFormData)) {
1662
+ formData = rawFormData;
1663
+ }
1598
1664
  } else if (DEPENDENCIES_KEY in schema) {
1599
1665
  const defaultFormData = {
1600
1666
  ...getDefaultBasedOnSchemaType(validator, schema, computeDefaultsProps, defaults),
@@ -1672,7 +1738,7 @@ function computeDefaults(validator, rawSchema, computeDefaultsProps = {}) {
1672
1738
  experimental_defaultFormStateBehavior: experimental_dfsb_to_compute,
1673
1739
  experimental_customMergeAllOf,
1674
1740
  parentDefaults: defaults,
1675
- rawFormData: formData,
1741
+ rawFormData: rawFormData ?? formData,
1676
1742
  required,
1677
1743
  shouldMergeDefaultsIntoFormData
1678
1744
  });
@@ -1735,7 +1801,7 @@ function getObjectDefaults(validator, rawSchema, {
1735
1801
  const parentConst = retrievedSchema[CONST_KEY];
1736
1802
  const objectDefaults = Object.keys(retrievedSchema.properties || {}).reduce(
1737
1803
  (acc, key) => {
1738
- const propertySchema = (0, import_get11.default)(retrievedSchema, [PROPERTIES_KEY, key], {});
1804
+ const propertySchema = (0, import_get12.default)(retrievedSchema, [PROPERTIES_KEY, key], {});
1739
1805
  const hasParentConst = isObject(parentConst) && parentConst[key] !== void 0;
1740
1806
  const hasConst = (isObject(propertySchema) && CONST_KEY in propertySchema || hasParentConst) && experimental_defaultFormStateBehavior?.constAsDefaults !== "never" && !constIsAjvDataReference(propertySchema);
1741
1807
  const computedDefault = computeDefaults(validator, propertySchema, {
@@ -1744,8 +1810,8 @@ function getObjectDefaults(validator, rawSchema, {
1744
1810
  experimental_defaultFormStateBehavior,
1745
1811
  experimental_customMergeAllOf,
1746
1812
  includeUndefinedValues: includeUndefinedValues === true,
1747
- parentDefaults: (0, import_get11.default)(defaults, [key]),
1748
- rawFormData: (0, import_get11.default)(formData, [key]),
1813
+ parentDefaults: (0, import_get12.default)(defaults, [key]),
1814
+ rawFormData: (0, import_get12.default)(formData, [key]),
1749
1815
  required: retrievedSchema.required?.includes(key),
1750
1816
  shouldMergeDefaultsIntoFormData
1751
1817
  });
@@ -1781,8 +1847,8 @@ function getObjectDefaults(validator, rawSchema, {
1781
1847
  experimental_defaultFormStateBehavior,
1782
1848
  experimental_customMergeAllOf,
1783
1849
  includeUndefinedValues: includeUndefinedValues === true,
1784
- parentDefaults: (0, import_get11.default)(defaults, [key]),
1785
- rawFormData: (0, import_get11.default)(formData, [key]),
1850
+ parentDefaults: (0, import_get12.default)(defaults, [key]),
1851
+ rawFormData: (0, import_get12.default)(formData, [key]),
1786
1852
  required: retrievedSchema.required?.includes(key),
1787
1853
  shouldMergeDefaultsIntoFormData
1788
1854
  });
@@ -1796,7 +1862,7 @@ function getObjectDefaults(validator, rawSchema, {
1796
1862
  );
1797
1863
  });
1798
1864
  }
1799
- return objectDefaults;
1865
+ return computeDefaultBasedOnSchemaTypeAndDefaults(rawSchema, objectDefaults);
1800
1866
  }
1801
1867
  }
1802
1868
  function getArrayDefaults(validator, rawSchema, {
@@ -1843,7 +1909,7 @@ function getArrayDefaults(validator, rawSchema, {
1843
1909
  experimental_defaultFormStateBehavior,
1844
1910
  experimental_customMergeAllOf,
1845
1911
  rawFormData: item,
1846
- parentDefaults: (0, import_get11.default)(defaults, [idx]),
1912
+ parentDefaults: (0, import_get12.default)(defaults, [idx]),
1847
1913
  required,
1848
1914
  shouldMergeDefaultsIntoFormData
1849
1915
  });
@@ -1861,25 +1927,29 @@ function getArrayDefaults(validator, rawSchema, {
1861
1927
  return defaults ? defaults : void 0;
1862
1928
  }
1863
1929
  }
1930
+ let arrayDefault;
1864
1931
  const defaultsLength = Array.isArray(defaults) ? defaults.length : 0;
1865
1932
  if (!schema.minItems || isMultiSelect(validator, schema, rootSchema, experimental_customMergeAllOf) || computeSkipPopulate(validator, schema, rootSchema) || schema.minItems <= defaultsLength) {
1866
- return defaults ? defaults : emptyDefault;
1867
- }
1868
- const defaultEntries = defaults || [];
1869
- const fillerSchema = getInnerSchemaForArrayItem(schema, 1 /* Invert */);
1870
- const fillerDefault = fillerSchema.default;
1871
- const fillerEntries = new Array(schema.minItems - defaultsLength).fill(
1872
- computeDefaults(validator, fillerSchema, {
1873
- parentDefaults: fillerDefault,
1874
- rootSchema,
1875
- _recurseList,
1876
- experimental_defaultFormStateBehavior,
1877
- experimental_customMergeAllOf,
1878
- required,
1879
- shouldMergeDefaultsIntoFormData
1880
- })
1881
- );
1882
- return defaultEntries.concat(fillerEntries);
1933
+ arrayDefault = defaults ? defaults : emptyDefault;
1934
+ } else {
1935
+ const defaultEntries = defaults || [];
1936
+ const fillerSchema = getInnerSchemaForArrayItem(schema, 1 /* Invert */);
1937
+ const fillerDefault = fillerSchema.default;
1938
+ const fillerEntries = Array.from(
1939
+ { length: schema.minItems - defaultsLength },
1940
+ () => computeDefaults(validator, fillerSchema, {
1941
+ parentDefaults: fillerDefault,
1942
+ rootSchema,
1943
+ _recurseList,
1944
+ experimental_defaultFormStateBehavior,
1945
+ experimental_customMergeAllOf,
1946
+ required,
1947
+ shouldMergeDefaultsIntoFormData
1948
+ })
1949
+ );
1950
+ arrayDefault = defaultEntries.concat(fillerEntries);
1951
+ }
1952
+ return computeDefaultBasedOnSchemaTypeAndDefaults(rawSchema, arrayDefault);
1883
1953
  }
1884
1954
  function getDefaultBasedOnSchemaType(validator, rawSchema, computeDefaultsProps = {}, defaults) {
1885
1955
  switch (getSchemaType(rawSchema)) {
@@ -1905,6 +1975,12 @@ function getDefaultFormState(validator, theSchema, formData, rootSchema, include
1905
1975
  rawFormData: formData,
1906
1976
  shouldMergeDefaultsIntoFormData: true
1907
1977
  });
1978
+ if (schema.type !== "object" && isObject(schema.default)) {
1979
+ return {
1980
+ ...defaults,
1981
+ ...formData
1982
+ };
1983
+ }
1908
1984
  if (isObject(formData) || Array.isArray(formData)) {
1909
1985
  const { mergeDefaultsIntoFormData } = experimental_defaultFormStateBehavior || {};
1910
1986
  const defaultSupercedesUndefined = mergeDefaultsIntoFormData === "useDefaultIfFormDataUndefined";
@@ -1961,17 +2037,17 @@ function getDisplayLabel(validator, schema, uiSchema = {}, rootSchema, globalOpt
1961
2037
  if (schemaType === "object") {
1962
2038
  displayLabel = false;
1963
2039
  }
1964
- if (schemaType === "boolean" && !uiSchema[UI_WIDGET_KEY]) {
2040
+ if (schemaType === "boolean" && uiSchema && !uiSchema[UI_WIDGET_KEY]) {
1965
2041
  displayLabel = false;
1966
2042
  }
1967
- if (uiSchema[UI_FIELD_KEY]) {
2043
+ if (uiSchema && uiSchema[UI_FIELD_KEY]) {
1968
2044
  displayLabel = false;
1969
2045
  }
1970
2046
  return displayLabel;
1971
2047
  }
1972
2048
 
1973
2049
  // src/schema/sanitizeDataForNewSchema.ts
1974
- var import_get12 = __toESM(require("lodash/get"), 1);
2050
+ var import_get13 = __toESM(require("lodash/get"), 1);
1975
2051
  var import_has5 = __toESM(require("lodash/has"), 1);
1976
2052
  var NO_VALUE = Symbol("no Value");
1977
2053
  function sanitizeDataForNewSchema(validator, rootSchema, newSchema, oldSchema, data = {}, experimental_customMergeAllOf) {
@@ -1979,19 +2055,19 @@ function sanitizeDataForNewSchema(validator, rootSchema, newSchema, oldSchema, d
1979
2055
  if ((0, import_has5.default)(newSchema, PROPERTIES_KEY)) {
1980
2056
  const removeOldSchemaData = {};
1981
2057
  if ((0, import_has5.default)(oldSchema, PROPERTIES_KEY)) {
1982
- const properties = (0, import_get12.default)(oldSchema, PROPERTIES_KEY, {});
2058
+ const properties = (0, import_get13.default)(oldSchema, PROPERTIES_KEY, {});
1983
2059
  Object.keys(properties).forEach((key) => {
1984
2060
  if ((0, import_has5.default)(data, key)) {
1985
2061
  removeOldSchemaData[key] = void 0;
1986
2062
  }
1987
2063
  });
1988
2064
  }
1989
- const keys2 = Object.keys((0, import_get12.default)(newSchema, PROPERTIES_KEY, {}));
2065
+ const keys2 = Object.keys((0, import_get13.default)(newSchema, PROPERTIES_KEY, {}));
1990
2066
  const nestedData = {};
1991
2067
  keys2.forEach((key) => {
1992
- const formValue = (0, import_get12.default)(data, key);
1993
- let oldKeyedSchema = (0, import_get12.default)(oldSchema, [PROPERTIES_KEY, key], {});
1994
- let newKeyedSchema = (0, import_get12.default)(newSchema, [PROPERTIES_KEY, key], {});
2068
+ const formValue = (0, import_get13.default)(data, key);
2069
+ let oldKeyedSchema = (0, import_get13.default)(oldSchema, [PROPERTIES_KEY, key], {});
2070
+ let newKeyedSchema = (0, import_get13.default)(newSchema, [PROPERTIES_KEY, key], {});
1995
2071
  if ((0, import_has5.default)(oldKeyedSchema, REF_KEY)) {
1996
2072
  oldKeyedSchema = retrieveSchema(
1997
2073
  validator,
@@ -2010,8 +2086,8 @@ function sanitizeDataForNewSchema(validator, rootSchema, newSchema, oldSchema, d
2010
2086
  experimental_customMergeAllOf
2011
2087
  );
2012
2088
  }
2013
- const oldSchemaTypeForKey = (0, import_get12.default)(oldKeyedSchema, "type");
2014
- const newSchemaTypeForKey = (0, import_get12.default)(newKeyedSchema, "type");
2089
+ const oldSchemaTypeForKey = (0, import_get13.default)(oldKeyedSchema, "type");
2090
+ const newSchemaTypeForKey = (0, import_get13.default)(newKeyedSchema, "type");
2015
2091
  if (!oldSchemaTypeForKey || oldSchemaTypeForKey === newSchemaTypeForKey) {
2016
2092
  if ((0, import_has5.default)(removeOldSchemaData, key)) {
2017
2093
  delete removeOldSchemaData[key];
@@ -2029,17 +2105,17 @@ function sanitizeDataForNewSchema(validator, rootSchema, newSchema, oldSchema, d
2029
2105
  nestedData[key] = itemData;
2030
2106
  }
2031
2107
  } else {
2032
- const newOptionDefault = (0, import_get12.default)(newKeyedSchema, "default", NO_VALUE);
2033
- const oldOptionDefault = (0, import_get12.default)(oldKeyedSchema, "default", NO_VALUE);
2108
+ const newOptionDefault = (0, import_get13.default)(newKeyedSchema, "default", NO_VALUE);
2109
+ const oldOptionDefault = (0, import_get13.default)(oldKeyedSchema, "default", NO_VALUE);
2034
2110
  if (newOptionDefault !== NO_VALUE && newOptionDefault !== formValue) {
2035
2111
  if (oldOptionDefault === formValue) {
2036
2112
  removeOldSchemaData[key] = newOptionDefault;
2037
- } else if ((0, import_get12.default)(newKeyedSchema, "readOnly") === true) {
2113
+ } else if ((0, import_get13.default)(newKeyedSchema, "readOnly") === true) {
2038
2114
  removeOldSchemaData[key] = void 0;
2039
2115
  }
2040
2116
  }
2041
- const newOptionConst = (0, import_get12.default)(newKeyedSchema, "const", NO_VALUE);
2042
- const oldOptionConst = (0, import_get12.default)(oldKeyedSchema, "const", NO_VALUE);
2117
+ const newOptionConst = (0, import_get13.default)(newKeyedSchema, "const", NO_VALUE);
2118
+ const oldOptionConst = (0, import_get13.default)(oldKeyedSchema, "const", NO_VALUE);
2043
2119
  if (newOptionConst !== NO_VALUE && newOptionConst !== formValue) {
2044
2120
  removeOldSchemaData[key] = oldOptionConst === formValue ? newOptionConst : void 0;
2045
2121
  }
@@ -2051,9 +2127,9 @@ function sanitizeDataForNewSchema(validator, rootSchema, newSchema, oldSchema, d
2051
2127
  ...removeOldSchemaData,
2052
2128
  ...nestedData
2053
2129
  };
2054
- } else if ((0, import_get12.default)(oldSchema, "type") === "array" && (0, import_get12.default)(newSchema, "type") === "array" && Array.isArray(data)) {
2055
- let oldSchemaItems = (0, import_get12.default)(oldSchema, "items");
2056
- let newSchemaItems = (0, import_get12.default)(newSchema, "items");
2130
+ } else if ((0, import_get13.default)(oldSchema, "type") === "array" && (0, import_get13.default)(newSchema, "type") === "array" && Array.isArray(data)) {
2131
+ let oldSchemaItems = (0, import_get13.default)(oldSchema, "items");
2132
+ let newSchemaItems = (0, import_get13.default)(newSchema, "items");
2057
2133
  if (typeof oldSchemaItems === "object" && typeof newSchemaItems === "object" && !Array.isArray(oldSchemaItems) && !Array.isArray(newSchemaItems)) {
2058
2134
  if ((0, import_has5.default)(oldSchemaItems, REF_KEY)) {
2059
2135
  oldSchemaItems = retrieveSchema(
@@ -2073,10 +2149,10 @@ function sanitizeDataForNewSchema(validator, rootSchema, newSchema, oldSchema, d
2073
2149
  experimental_customMergeAllOf
2074
2150
  );
2075
2151
  }
2076
- const oldSchemaType = (0, import_get12.default)(oldSchemaItems, "type");
2077
- const newSchemaType = (0, import_get12.default)(newSchemaItems, "type");
2152
+ const oldSchemaType = (0, import_get13.default)(oldSchemaItems, "type");
2153
+ const newSchemaType = (0, import_get13.default)(newSchemaItems, "type");
2078
2154
  if (!oldSchemaType || oldSchemaType === newSchemaType) {
2079
- const maxItems = (0, import_get12.default)(newSchema, "maxItems", -1);
2155
+ const maxItems = (0, import_get13.default)(newSchema, "maxItems", -1);
2080
2156
  if (newSchemaType === "object") {
2081
2157
  newFormData = data.reduce((newValue, aValue) => {
2082
2158
  const itemValue = sanitizeDataForNewSchema(
@@ -2103,78 +2179,6 @@ function sanitizeDataForNewSchema(validator, rootSchema, newSchema, oldSchema, d
2103
2179
  return newFormData;
2104
2180
  }
2105
2181
 
2106
- // src/schema/toIdSchema.ts
2107
- var import_get13 = __toESM(require("lodash/get"), 1);
2108
- function toIdSchemaInternal(validator, schema, idPrefix, idSeparator, id, rootSchema, formData, _recurseList = [], experimental_customMergeAllOf) {
2109
- const $id = id || idPrefix;
2110
- const idSchema = { $id };
2111
- if (typeof schema === "object") {
2112
- if (REF_KEY in schema || DEPENDENCIES_KEY in schema || ALL_OF_KEY in schema) {
2113
- const _schema = retrieveSchema(validator, schema, rootSchema, formData, experimental_customMergeAllOf);
2114
- const sameSchemaIndex = _recurseList.findIndex((item) => deepEquals(item, _schema));
2115
- if (sameSchemaIndex === -1) {
2116
- return toIdSchemaInternal(
2117
- validator,
2118
- _schema,
2119
- idPrefix,
2120
- idSeparator,
2121
- id,
2122
- rootSchema,
2123
- formData,
2124
- _recurseList.concat(_schema),
2125
- experimental_customMergeAllOf
2126
- );
2127
- }
2128
- }
2129
- if (ITEMS_KEY in schema && !(0, import_get13.default)(schema, [ITEMS_KEY, REF_KEY])) {
2130
- return toIdSchemaInternal(
2131
- validator,
2132
- (0, import_get13.default)(schema, ITEMS_KEY),
2133
- idPrefix,
2134
- idSeparator,
2135
- id,
2136
- rootSchema,
2137
- formData,
2138
- _recurseList,
2139
- experimental_customMergeAllOf
2140
- );
2141
- }
2142
- if (getSchemaType(schema) === "object" && PROPERTIES_KEY in schema) {
2143
- for (const name in schema.properties) {
2144
- const field = schema[PROPERTIES_KEY][name];
2145
- const fieldId = idSchema[ID_KEY] + idSeparator + name;
2146
- idSchema[name] = toIdSchemaInternal(
2147
- validator,
2148
- field,
2149
- idPrefix,
2150
- idSeparator,
2151
- fieldId,
2152
- rootSchema,
2153
- // It's possible that formData is not an object -- this can happen if an
2154
- // array item has just been added, but not populated with data yet
2155
- (0, import_get13.default)(formData, [name]),
2156
- _recurseList,
2157
- experimental_customMergeAllOf
2158
- );
2159
- }
2160
- }
2161
- }
2162
- return idSchema;
2163
- }
2164
- function toIdSchema(validator, schema, id, rootSchema, formData, idPrefix = "root", idSeparator = "_", experimental_customMergeAllOf) {
2165
- return toIdSchemaInternal(
2166
- validator,
2167
- schema,
2168
- idPrefix,
2169
- idSeparator,
2170
- id,
2171
- rootSchema,
2172
- formData,
2173
- void 0,
2174
- experimental_customMergeAllOf
2175
- );
2176
- }
2177
-
2178
2182
  // src/schema/toPathSchema.ts
2179
2183
  var import_get14 = __toESM(require("lodash/get"), 1);
2180
2184
  var import_set2 = __toESM(require("lodash/set"), 1);
@@ -2290,6 +2294,7 @@ function toPathSchema(validator, schema, name = "", rootSchema, formData, experi
2290
2294
  }
2291
2295
 
2292
2296
  // src/createSchemaUtils.ts
2297
+ var import_get15 = __toESM(require("lodash/get"), 1);
2293
2298
  var SchemaUtils = class {
2294
2299
  /** Constructs the `SchemaUtils` instance with the given `validator` and `rootSchema` stored as instance variables
2295
2300
  *
@@ -2299,11 +2304,22 @@ var SchemaUtils = class {
2299
2304
  * @param [experimental_customMergeAllOf] - Optional function that allows for custom merging of `allOf` schemas
2300
2305
  */
2301
2306
  constructor(validator, rootSchema, experimental_defaultFormStateBehavior, experimental_customMergeAllOf) {
2302
- this.rootSchema = rootSchema;
2307
+ if (rootSchema && rootSchema[SCHEMA_KEY] === JSON_SCHEMA_DRAFT_2020_12) {
2308
+ this.rootSchema = makeAllReferencesAbsolute(rootSchema, (0, import_get15.default)(rootSchema, ID_KEY, "#"));
2309
+ } else {
2310
+ this.rootSchema = rootSchema;
2311
+ }
2303
2312
  this.validator = validator;
2304
2313
  this.experimental_defaultFormStateBehavior = experimental_defaultFormStateBehavior;
2305
2314
  this.experimental_customMergeAllOf = experimental_customMergeAllOf;
2306
2315
  }
2316
+ /** Returns the `rootSchema` in the `SchemaUtilsType`
2317
+ *
2318
+ * @returns - The `rootSchema`
2319
+ */
2320
+ getRootSchema() {
2321
+ return this.rootSchema;
2322
+ }
2307
2323
  /** Returns the `ValidatorType` in the `SchemaUtilsType`
2308
2324
  *
2309
2325
  * @returns - The `ValidatorType`
@@ -2517,27 +2533,6 @@ var SchemaUtils = class {
2517
2533
  this.experimental_customMergeAllOf
2518
2534
  );
2519
2535
  }
2520
- /** Generates an `IdSchema` object for the `schema`, recursively
2521
- *
2522
- * @param schema - The schema for which the display label flag is desired
2523
- * @param [id] - The base id for the schema
2524
- * @param [formData] - The current formData, if any, onto which to provide any missing defaults
2525
- * @param [idPrefix='root'] - The prefix to use for the id
2526
- * @param [idSeparator='_'] - The separator to use for the path segments in the id
2527
- * @returns - The `IdSchema` object for the `schema`
2528
- */
2529
- toIdSchema(schema, id, formData, idPrefix = "root", idSeparator = "_") {
2530
- return toIdSchema(
2531
- this.validator,
2532
- schema,
2533
- id,
2534
- this.rootSchema,
2535
- formData,
2536
- idPrefix,
2537
- idSeparator,
2538
- this.experimental_customMergeAllOf
2539
- );
2540
- }
2541
2536
  /** Generates an `PathSchema` object for the `schema`, recursively
2542
2537
  *
2543
2538
  * @param schema - The schema for which the display label flag is desired
@@ -2623,6 +2618,31 @@ function dateRangeOptions(start, stop) {
2623
2618
  return options;
2624
2619
  }
2625
2620
 
2621
+ // src/shallowEquals.ts
2622
+ function shallowEquals(a, b) {
2623
+ if (Object.is(a, b)) {
2624
+ return true;
2625
+ }
2626
+ if (a == null || b == null) {
2627
+ return false;
2628
+ }
2629
+ if (typeof a !== "object" || typeof b !== "object") {
2630
+ return false;
2631
+ }
2632
+ const keysA = Object.keys(a);
2633
+ const keysB = Object.keys(b);
2634
+ if (keysA.length !== keysB.length) {
2635
+ return false;
2636
+ }
2637
+ for (let i = 0; i < keysA.length; i++) {
2638
+ const key = keysA[i];
2639
+ if (!Object.prototype.hasOwnProperty.call(b, key) || !Object.is(a[key], b[key])) {
2640
+ return false;
2641
+ }
2642
+ }
2643
+ return true;
2644
+ }
2645
+
2626
2646
  // src/replaceStringParameters.ts
2627
2647
  function replaceStringParameters(inputString, params) {
2628
2648
  let output = inputString;
@@ -2695,7 +2715,7 @@ function enumOptionsSelectValue(valueIndex, selected, allEnumOptions = []) {
2695
2715
 
2696
2716
  // src/ErrorSchemaBuilder.ts
2697
2717
  var import_cloneDeep = __toESM(require("lodash/cloneDeep"), 1);
2698
- var import_get15 = __toESM(require("lodash/get"), 1);
2718
+ var import_get16 = __toESM(require("lodash/get"), 1);
2699
2719
  var import_set3 = __toESM(require("lodash/set"), 1);
2700
2720
  var import_setWith = __toESM(require("lodash/setWith"), 1);
2701
2721
  var ErrorSchemaBuilder = class {
@@ -2724,7 +2744,7 @@ var ErrorSchemaBuilder = class {
2724
2744
  */
2725
2745
  getOrCreateErrorBlock(pathOfError) {
2726
2746
  const hasPath = Array.isArray(pathOfError) && pathOfError.length > 0 || typeof pathOfError === "string";
2727
- let errorBlock = hasPath ? (0, import_get15.default)(this.errorSchema, pathOfError) : this.errorSchema;
2747
+ let errorBlock = hasPath ? (0, import_get16.default)(this.errorSchema, pathOfError) : this.errorSchema;
2728
2748
  if (!errorBlock && pathOfError) {
2729
2749
  errorBlock = {};
2730
2750
  (0, import_setWith.default)(this.errorSchema, pathOfError, errorBlock, Object);
@@ -2750,7 +2770,7 @@ var ErrorSchemaBuilder = class {
2750
2770
  */
2751
2771
  addErrors(errorOrList, pathOfError) {
2752
2772
  const errorBlock = this.getOrCreateErrorBlock(pathOfError);
2753
- let errorsList = (0, import_get15.default)(errorBlock, ERRORS_KEY);
2773
+ let errorsList = (0, import_get16.default)(errorBlock, ERRORS_KEY);
2754
2774
  if (!Array.isArray(errorsList)) {
2755
2775
  errorsList = [];
2756
2776
  errorBlock[ERRORS_KEY] = errorsList;
@@ -2898,10 +2918,10 @@ function getTemplate(name, registry, uiOptions = {}) {
2898
2918
  }
2899
2919
 
2900
2920
  // src/getTestIds.ts
2901
- var import_nanoid = require("nanoid");
2902
- var import_get16 = __toESM(require("lodash/get"), 1);
2921
+ var import_get17 = __toESM(require("lodash/get"), 1);
2922
+ var import_uniqueId = __toESM(require("lodash/uniqueId"), 1);
2903
2923
  function getTestIds() {
2904
- if (typeof process === "undefined" || (0, import_get16.default)(process, "env.NODE_ENV") !== "test") {
2924
+ if (typeof process === "undefined" || (0, import_get17.default)(process, "env.NODE_ENV") !== "test") {
2905
2925
  return {};
2906
2926
  }
2907
2927
  const ids = /* @__PURE__ */ new Map();
@@ -2910,7 +2930,7 @@ function getTestIds() {
2910
2930
  {
2911
2931
  get(_obj, prop) {
2912
2932
  if (!ids.has(prop)) {
2913
- ids.set(prop, (0, import_nanoid.nanoid)());
2933
+ ids.set(prop, (0, import_uniqueId.default)("test-id-"));
2914
2934
  }
2915
2935
  return ids.get(prop);
2916
2936
  }
@@ -2921,7 +2941,7 @@ function getTestIds() {
2921
2941
  // src/getWidget.tsx
2922
2942
  var import_react = require("react");
2923
2943
  var import_react_is = __toESM(require("react-is"), 1);
2924
- var import_get17 = __toESM(require("lodash/get"), 1);
2944
+ var import_get18 = __toESM(require("lodash/get"), 1);
2925
2945
  var import_set4 = __toESM(require("lodash/set"), 1);
2926
2946
  var import_jsx_runtime = require("react/jsx-runtime");
2927
2947
  var widgetMap = {
@@ -2977,7 +2997,7 @@ var widgetMap = {
2977
2997
  }
2978
2998
  };
2979
2999
  function mergeWidgetOptions(AWidget) {
2980
- let MergedWidget = (0, import_get17.default)(AWidget, "MergedWidget");
3000
+ let MergedWidget = (0, import_get18.default)(AWidget, "MergedWidget");
2981
3001
  if (!MergedWidget) {
2982
3002
  const defaultOptions = AWidget.defaultProps && AWidget.defaultProps.options || {};
2983
3003
  MergedWidget = ({ options, ...props }) => {
@@ -2993,7 +3013,7 @@ function getWidget(schema, widget, registeredWidgets = {}) {
2993
3013
  return mergeWidgetOptions(widget);
2994
3014
  }
2995
3015
  if (typeof widget !== "string") {
2996
- throw new Error(`Unsupported widget definition: ${typeof widget}`);
3016
+ throw new Error(`Unsupported widget definition: ${typeof widget} in schema: ${JSON.stringify(schema)}`);
2997
3017
  }
2998
3018
  if (widget in registeredWidgets) {
2999
3019
  const registeredWidget = registeredWidgets[widget];
@@ -3001,14 +3021,14 @@ function getWidget(schema, widget, registeredWidgets = {}) {
3001
3021
  }
3002
3022
  if (typeof type === "string") {
3003
3023
  if (!(type in widgetMap)) {
3004
- throw new Error(`No widget for type '${type}'`);
3024
+ throw new Error(`No widget for type '${type}' in schema: ${JSON.stringify(schema)}`);
3005
3025
  }
3006
3026
  if (widget in widgetMap[type]) {
3007
3027
  const registeredWidget = registeredWidgets[widgetMap[type][widget]];
3008
3028
  return getWidget(schema, registeredWidget, registeredWidgets);
3009
3029
  }
3010
3030
  }
3011
- throw new Error(`No widget '${widget}' for type '${type}'`);
3031
+ throw new Error(`No widget '${widget}' for type '${type}' in schema: ${JSON.stringify(schema)}`);
3012
3032
  }
3013
3033
 
3014
3034
  // src/hashForSchema.ts
@@ -3090,14 +3110,14 @@ function localToUTC(dateString) {
3090
3110
  }
3091
3111
 
3092
3112
  // src/lookupFromFormContext.ts
3093
- var import_get18 = __toESM(require("lodash/get"), 1);
3113
+ var import_get19 = __toESM(require("lodash/get"), 1);
3094
3114
  var import_has6 = __toESM(require("lodash/has"), 1);
3095
3115
  function lookupFromFormContext(regOrFc, toLookup, fallback) {
3096
3116
  const lookupPath = [LOOKUP_MAP_NAME];
3097
3117
  if ((0, import_has6.default)(regOrFc, FORM_CONTEXT_NAME)) {
3098
3118
  lookupPath.unshift(FORM_CONTEXT_NAME);
3099
3119
  }
3100
- return (0, import_get18.default)(regOrFc, [...lookupPath, toLookup], fallback);
3120
+ return (0, import_get19.default)(regOrFc, [...lookupPath, toLookup], fallback);
3101
3121
  }
3102
3122
 
3103
3123
  // src/orderProperties.ts
@@ -3178,7 +3198,14 @@ function schemaRequiresTrueValue(schema) {
3178
3198
  }
3179
3199
 
3180
3200
  // src/shouldRender.ts
3181
- function shouldRender(component, nextProps, nextState) {
3201
+ function shouldRender(component, nextProps, nextState, updateStrategy = "customDeep") {
3202
+ if (updateStrategy === "always") {
3203
+ return true;
3204
+ }
3205
+ if (updateStrategy === "shallow") {
3206
+ const { props: props2, state: state2 } = component;
3207
+ return !shallowEquals(props2, nextProps) || !shallowEquals(state2, nextState);
3208
+ }
3182
3209
  const { props, state } = component;
3183
3210
  return !deepEquals(props, nextProps) || !deepEquals(state, nextState);
3184
3211
  }
@@ -3240,6 +3267,15 @@ function toErrorSchema(errors) {
3240
3267
  return builder.ErrorSchema;
3241
3268
  }
3242
3269
 
3270
+ // src/toFieldPathId.ts
3271
+ function toFieldPathId(fieldPath, globalFormOptions, parentPath) {
3272
+ const basePath = Array.isArray(parentPath) ? parentPath : parentPath?.path;
3273
+ const childPath = fieldPath === "" ? [] : [fieldPath];
3274
+ const path = basePath ? basePath.concat(...childPath) : childPath;
3275
+ const id = [globalFormOptions.idPrefix, ...path].join(globalFormOptions.idSeparator);
3276
+ return { path, [ID_KEY]: id };
3277
+ }
3278
+
3243
3279
  // src/unwrapErrorHandler.ts
3244
3280
  var import_isPlainObject3 = __toESM(require("lodash/isPlainObject"), 1);
3245
3281
  function unwrapErrorHandler(errorHandler) {
@@ -3325,7 +3361,7 @@ function withIdRefPrefix(schemaNode) {
3325
3361
  var import_keys = __toESM(require("lodash/keys"), 1);
3326
3362
  var import_pickBy = __toESM(require("lodash/pickBy"), 1);
3327
3363
  var import_isPlainObject4 = __toESM(require("lodash/isPlainObject"), 1);
3328
- var import_get19 = __toESM(require("lodash/get"), 1);
3364
+ var import_get20 = __toESM(require("lodash/get"), 1);
3329
3365
  var import_difference = __toESM(require("lodash/difference"), 1);
3330
3366
  function getChangedFields(a, b) {
3331
3367
  const aIsPlainObject = (0, import_isPlainObject4.default)(a);
@@ -3338,7 +3374,7 @@ function getChangedFields(a, b) {
3338
3374
  } else if (!aIsPlainObject && bIsPlainObject) {
3339
3375
  return (0, import_keys.default)(b);
3340
3376
  } else {
3341
- const unequalFields = (0, import_keys.default)((0, import_pickBy.default)(a, (value, key) => !deepEquals(value, (0, import_get19.default)(b, key))));
3377
+ const unequalFields = (0, import_keys.default)((0, import_pickBy.default)(a, (value, key) => !deepEquals(value, (0, import_get20.default)(b, key))));
3342
3378
  const diffFields = (0, import_difference.default)((0, import_keys.default)(b), (0, import_keys.default)(a));
3343
3379
  return [...unequalFields, ...diffFields];
3344
3380
  }
@@ -3383,7 +3419,7 @@ var TranslatableString = /* @__PURE__ */ ((TranslatableString2) => {
3383
3419
  var import_forEach = __toESM(require("lodash/forEach"), 1);
3384
3420
 
3385
3421
  // src/parser/ParserValidator.ts
3386
- var import_get20 = __toESM(require("lodash/get"), 1);
3422
+ var import_get21 = __toESM(require("lodash/get"), 1);
3387
3423
  var ParserValidator = class {
3388
3424
  /** Construct the ParserValidator for the given `rootSchema`. This `rootSchema` will be stashed in the `schemaMap`
3389
3425
  * first.
@@ -3409,7 +3445,7 @@ var ParserValidator = class {
3409
3445
  * @param hash - The hash value at which to map the schema
3410
3446
  */
3411
3447
  addSchema(schema, hash) {
3412
- const key = (0, import_get20.default)(schema, ID_KEY, hash);
3448
+ const key = (0, import_get21.default)(schema, ID_KEY, hash);
3413
3449
  const identifiedSchema = { ...schema, [ID_KEY]: key };
3414
3450
  const existing = this.schemaMap[key];
3415
3451
  if (!existing) {
@@ -3499,4 +3535,4 @@ function schemaParser(rootSchema) {
3499
3535
  parseSchema(validator, recurseList, rootSchema, rootSchema);
3500
3536
  return validator.getSchemaMap();
3501
3537
  }
3502
- //# sourceMappingURL=index.js.map
3538
+ //# sourceMappingURL=index.cjs.map