@rjsf/utils 6.0.0-beta.1 → 6.0.0-beta.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/utils.umd.js CHANGED
@@ -1,8 +1,8 @@
1
1
  (function (global, factory) {
2
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('lodash/isPlainObject'), require('lodash/isEqualWith'), require('lodash/get'), require('lodash/has'), require('lodash/isEqual'), require('lodash/set'), require('lodash/times'), require('lodash/transform'), require('lodash/merge'), require('lodash/flattenDeep'), require('lodash/uniq'), require('json-schema-merge-allof'), require('jsonpointer'), require('lodash/omit'), require('lodash/isString'), require('lodash/union'), require('lodash/isNumber'), require('lodash/isEmpty'), require('lodash/isObject'), require('lodash/reduce'), require('lodash/isNil'), require('lodash/cloneDeep'), require('lodash/setWith'), require('nanoid'), require('react'), require('react-is'), require('react/jsx-runtime'), require('lodash/toPath'), require('lodash/keys'), require('lodash/pickBy'), require('lodash/difference'), require('lodash/forEach')) :
3
- typeof define === 'function' && define.amd ? define(['exports', 'lodash/isPlainObject', 'lodash/isEqualWith', 'lodash/get', 'lodash/has', 'lodash/isEqual', 'lodash/set', 'lodash/times', 'lodash/transform', 'lodash/merge', 'lodash/flattenDeep', 'lodash/uniq', 'json-schema-merge-allof', 'jsonpointer', 'lodash/omit', 'lodash/isString', 'lodash/union', 'lodash/isNumber', 'lodash/isEmpty', 'lodash/isObject', 'lodash/reduce', 'lodash/isNil', 'lodash/cloneDeep', 'lodash/setWith', 'nanoid', 'react', 'react-is', 'react/jsx-runtime', 'lodash/toPath', 'lodash/keys', 'lodash/pickBy', 'lodash/difference', 'lodash/forEach'], factory) :
4
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global["@rjsf/utils"] = {}, global.isPlainObject4, global.isEqualWith, global.get12, global.has5, global.isEqual, global.set, global.times, global.transform, global.merge, global.flattenDeep, global.uniq, global.mergeAllOf, global.jsonpointer, global.omit, global.isString, global.union, global.isNumber, global.isEmpty, global.isObject2, global.reduce, global.isNil, global.cloneDeep, global.setWith, global.nanoid, global.react, global.ReactIs, global.jsxRuntime, global.toPath, global.keys, global.pickBy, global.difference, global.forEach));
5
- })(this, (function (exports, isPlainObject4, isEqualWith, get12, has5, isEqual, set, times, transform, merge, flattenDeep, uniq, mergeAllOf, jsonpointer, omit, isString, union, isNumber, isEmpty, isObject2, reduce, isNil, cloneDeep, setWith, nanoid, react, ReactIs, jsxRuntime, toPath, keys, pickBy, difference, forEach) { 'use strict';
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('lodash/isPlainObject'), require('lodash/isEqualWith'), require('lodash/get'), require('lodash/has'), require('lodash/isEqual'), require('lodash/set'), require('lodash/times'), require('lodash/transform'), require('lodash/merge'), require('lodash/flattenDeep'), require('lodash/uniq'), require('json-schema-merge-allof'), require('jsonpointer'), require('lodash/omit'), require('lodash/isObject'), require('lodash/isEmpty'), require('fast-uri'), require('lodash/isString'), require('lodash/union'), require('lodash/isNumber'), require('lodash/reduce'), require('lodash/isNil'), require('lodash/cloneDeep'), require('lodash/setWith'), require('nanoid'), require('react'), require('react-is'), require('react/jsx-runtime'), require('lodash/toPath'), require('lodash/keys'), require('lodash/pickBy'), require('lodash/difference'), require('lodash/forEach')) :
3
+ typeof define === 'function' && define.amd ? define(['exports', 'lodash/isPlainObject', 'lodash/isEqualWith', 'lodash/get', 'lodash/has', 'lodash/isEqual', 'lodash/set', 'lodash/times', 'lodash/transform', 'lodash/merge', 'lodash/flattenDeep', 'lodash/uniq', 'json-schema-merge-allof', 'jsonpointer', 'lodash/omit', 'lodash/isObject', 'lodash/isEmpty', 'fast-uri', 'lodash/isString', 'lodash/union', 'lodash/isNumber', 'lodash/reduce', 'lodash/isNil', 'lodash/cloneDeep', 'lodash/setWith', 'nanoid', 'react', 'react-is', 'react/jsx-runtime', 'lodash/toPath', 'lodash/keys', 'lodash/pickBy', 'lodash/difference', 'lodash/forEach'], factory) :
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global["@rjsf/utils"] = {}, global.isPlainObject4, global.isEqualWith, global.get13, global.has5, global.isEqual, global.set, global.times, global.transform, global.merge, global.flattenDeep, global.uniq, global.mergeAllOf, global.jsonpointer, global.omit, global.isObject3, global.isEmpty2, global.UriResolver, global.isString, global.union, global.isNumber, global.reduce, global.isNil, global.cloneDeep, global.setWith, global.nanoid, global.react, global.ReactIs, global.jsxRuntime, global.toPath, global.keys, global.pickBy, global.difference, global.forEach));
5
+ })(this, (function (exports, isPlainObject4, isEqualWith, get13, has5, isEqual, set, times, transform, merge, flattenDeep, uniq, mergeAllOf, jsonpointer, omit, isObject3, isEmpty2, UriResolver, isString, union, isNumber, reduce, isNil, cloneDeep, setWith, nanoid, react, ReactIs, jsxRuntime, toPath, keys, pickBy, difference, forEach) { 'use strict';
6
6
 
7
7
  // src/isObject.ts
8
8
  function isObject(thing) {
@@ -71,6 +71,7 @@
71
71
  var REQUIRED_KEY = "required";
72
72
  var SUBMIT_BTN_OPTIONS_KEY = "submitButtonOptions";
73
73
  var REF_KEY = "$ref";
74
+ var SCHEMA_KEY = "$schema";
74
75
  var DISCRIMINATOR_PATH = ["discriminator", "propertyName"];
75
76
  var FORM_CONTEXT_NAME = "formContext";
76
77
  var LOOKUP_MAP_NAME = "layoutGridLookupMap";
@@ -80,6 +81,7 @@
80
81
  var UI_WIDGET_KEY = "ui:widget";
81
82
  var UI_OPTIONS_KEY = "ui:options";
82
83
  var UI_GLOBAL_OPTIONS_KEY = "ui:globalOptions";
84
+ var JSON_SCHEMA_DRAFT_2020_12 = "https://json-schema.org/draft/2020-12/schema";
83
85
 
84
86
  // src/getUiOptions.ts
85
87
  function getUiOptions(uiSchema = {}, globalOptions = {}) {
@@ -144,20 +146,49 @@
144
146
  return void 0;
145
147
  });
146
148
  }
149
+ function findEmbeddedSchemaRecursive(schema, ref) {
150
+ if (ID_KEY in schema && UriResolver.equal(schema[ID_KEY], ref)) {
151
+ return schema;
152
+ }
153
+ for (const subSchema of Object.values(schema)) {
154
+ if (isObject3(subSchema)) {
155
+ const result = findEmbeddedSchemaRecursive(subSchema, ref);
156
+ if (result !== void 0) {
157
+ return result;
158
+ }
159
+ }
160
+ }
161
+ return void 0;
162
+ }
147
163
  function splitKeyElementFromObject(key, object) {
148
164
  const value = object[key];
149
165
  const remaining = omit(object, [key]);
150
166
  return [remaining, value];
151
167
  }
152
- function findSchemaDefinitionRecursive($ref, rootSchema = {}, recurseList = []) {
168
+ function findSchemaDefinitionRecursive($ref, rootSchema = {}, recurseList = [], baseURI = get13(rootSchema, [ID_KEY])) {
153
169
  const ref = $ref || "";
154
- let decodedRef;
170
+ let current = void 0;
155
171
  if (ref.startsWith("#")) {
156
- decodedRef = decodeURIComponent(ref.substring(1));
157
- } else {
158
- throw new Error(`Could not find a definition for ${$ref}.`);
172
+ const decodedRef = decodeURIComponent(ref.substring(1));
173
+ if (baseURI === void 0 || ID_KEY in rootSchema && rootSchema[ID_KEY] === baseURI) {
174
+ current = jsonpointer.get(rootSchema, decodedRef);
175
+ } else if (rootSchema[SCHEMA_KEY] === JSON_SCHEMA_DRAFT_2020_12) {
176
+ current = findEmbeddedSchemaRecursive(rootSchema, baseURI.replace(/\/$/, ""));
177
+ if (current !== void 0) {
178
+ current = jsonpointer.get(current, decodedRef);
179
+ }
180
+ }
181
+ } else if (rootSchema[SCHEMA_KEY] === JSON_SCHEMA_DRAFT_2020_12) {
182
+ const resolvedRef = baseURI ? UriResolver.resolve(baseURI, ref) : ref;
183
+ const [refId, ...refAnchor] = resolvedRef.replace(/#\/?$/, "").split("#");
184
+ current = findEmbeddedSchemaRecursive(rootSchema, refId.replace(/\/$/, ""));
185
+ if (current !== void 0) {
186
+ baseURI = current[ID_KEY];
187
+ if (!isEmpty2(refAnchor)) {
188
+ current = jsonpointer.get(current, decodeURIComponent(refAnchor.join("#")));
189
+ }
190
+ }
159
191
  }
160
- const current = jsonpointer.get(rootSchema, decodedRef);
161
192
  if (current === void 0) {
162
193
  throw new Error(`Could not find a definition for ${$ref}.`);
163
194
  }
@@ -172,7 +203,7 @@
172
203
  throw new Error(`Definition for ${firstRef} contains a circular reference through ${circularPath}`);
173
204
  }
174
205
  const [remaining, theRef] = splitKeyElementFromObject(REF_KEY, current);
175
- const subSchema = findSchemaDefinitionRecursive(theRef, rootSchema, [...recurseList, ref]);
206
+ const subSchema = findSchemaDefinitionRecursive(theRef, rootSchema, [...recurseList, ref], baseURI);
176
207
  if (Object.keys(remaining).length > 0) {
177
208
  return { ...remaining, ...subSchema };
178
209
  }
@@ -180,13 +211,13 @@
180
211
  }
181
212
  return current;
182
213
  }
183
- function findSchemaDefinition($ref, rootSchema = {}) {
214
+ function findSchemaDefinition($ref, rootSchema = {}, baseURI = get13(rootSchema, [ID_KEY])) {
184
215
  const recurseList = [];
185
- return findSchemaDefinitionRecursive($ref, rootSchema, recurseList);
216
+ return findSchemaDefinitionRecursive($ref, rootSchema, recurseList, baseURI);
186
217
  }
187
218
  function getDiscriminatorFieldFromSchema(schema) {
188
219
  let discriminator;
189
- const maybeString = get12(schema, DISCRIMINATOR_PATH);
220
+ const maybeString = get13(schema, DISCRIMINATOR_PATH);
190
221
  if (isString(maybeString)) {
191
222
  discriminator = maybeString;
192
223
  } else if (maybeString !== void 0) {
@@ -257,13 +288,13 @@
257
288
  }
258
289
  function getOptionMatchingSimpleDiscriminator(formData, options, discriminatorField) {
259
290
  if (formData && discriminatorField) {
260
- const value = get12(formData, discriminatorField);
291
+ const value = get13(formData, discriminatorField);
261
292
  if (value === void 0) {
262
293
  return;
263
294
  }
264
295
  for (let i = 0; i < options.length; i++) {
265
296
  const option = options[i];
266
- const discriminator = get12(option, [PROPERTIES_KEY, discriminatorField], {});
297
+ const discriminator = get13(option, [PROPERTIES_KEY, discriminatorField], {});
267
298
  if (discriminator.type === "object" || discriminator.type === "array") {
268
299
  continue;
269
300
  }
@@ -290,8 +321,8 @@
290
321
  for (let i = 0; i < options.length; i++) {
291
322
  const option = options[i];
292
323
  if (discriminatorField && has5(option, [PROPERTIES_KEY, discriminatorField])) {
293
- const value = get12(formData, discriminatorField);
294
- const discriminator = get12(option, [PROPERTIES_KEY, discriminatorField], {});
324
+ const value = get13(formData, discriminatorField);
325
+ const discriminator = get13(option, [PROPERTIES_KEY, discriminatorField], {});
295
326
  if (validator.isValid(discriminator, value, rootSchema)) {
296
327
  return i;
297
328
  }
@@ -489,7 +520,7 @@
489
520
  }
490
521
  return [schema];
491
522
  }
492
- function resolveAllReferences(schema, rootSchema, recurseList) {
523
+ function resolveAllReferences(schema, rootSchema, recurseList, baseURI) {
493
524
  if (!isObject(schema)) {
494
525
  return schema;
495
526
  }
@@ -500,8 +531,11 @@
500
531
  return resolvedSchema;
501
532
  }
502
533
  recurseList.push($ref);
503
- const refSchema = findSchemaDefinition($ref, rootSchema);
534
+ const refSchema = findSchemaDefinition($ref, rootSchema, baseURI);
504
535
  resolvedSchema = { ...refSchema, ...localSchema };
536
+ if (ID_KEY in resolvedSchema) {
537
+ baseURI = resolvedSchema[ID_KEY];
538
+ }
505
539
  }
506
540
  if (PROPERTIES_KEY in resolvedSchema) {
507
541
  const childrenLists = [];
@@ -509,7 +543,7 @@
509
543
  resolvedSchema[PROPERTIES_KEY],
510
544
  (result, value, key) => {
511
545
  const childList = [...recurseList];
512
- result[key] = resolveAllReferences(value, rootSchema, childList);
546
+ result[key] = resolveAllReferences(value, rootSchema, childList, baseURI);
513
547
  childrenLists.push(childList);
514
548
  },
515
549
  {}
@@ -520,7 +554,7 @@
520
554
  if (ITEMS_KEY in resolvedSchema && !Array.isArray(resolvedSchema.items) && typeof resolvedSchema.items !== "boolean") {
521
555
  resolvedSchema = {
522
556
  ...resolvedSchema,
523
- items: resolveAllReferences(resolvedSchema.items, rootSchema, recurseList)
557
+ items: resolveAllReferences(resolvedSchema.items, rootSchema, recurseList, baseURI)
524
558
  };
525
559
  }
526
560
  return deepEquals(schema, resolvedSchema) ? schema : resolvedSchema;
@@ -537,12 +571,12 @@
537
571
  }
538
572
  if (PATTERN_PROPERTIES_KEY in schema) {
539
573
  const matchingProperties = getMatchingPatternProperties(schema, key);
540
- if (!isEmpty(matchingProperties)) {
574
+ if (!isEmpty2(matchingProperties)) {
541
575
  schema.properties[key] = retrieveSchema(
542
576
  validator,
543
577
  { allOf: Object.values(matchingProperties) },
544
578
  rootSchema,
545
- formData,
579
+ get13(formData, [key]),
546
580
  experimental_customMergeAllOf
547
581
  );
548
582
  set(schema.properties, [key, ADDITIONAL_PROPERTY_FLAG], true);
@@ -555,7 +589,7 @@
555
589
  if (REF_KEY in schema.additionalProperties) {
556
590
  additionalProperties = retrieveSchema(
557
591
  validator,
558
- { $ref: get12(schema.additionalProperties, [REF_KEY]) },
592
+ { $ref: get13(schema.additionalProperties, [REF_KEY]) },
559
593
  rootSchema,
560
594
  formData,
561
595
  experimental_customMergeAllOf
@@ -568,10 +602,10 @@
568
602
  ...schema.additionalProperties
569
603
  };
570
604
  } else {
571
- additionalProperties = { type: guessType(get12(formData, [key])) };
605
+ additionalProperties = { type: guessType(get13(formData, [key])) };
572
606
  }
573
607
  } else {
574
- additionalProperties = { type: guessType(get12(formData, [key])) };
608
+ additionalProperties = { type: guessType(get13(formData, [key])) };
575
609
  }
576
610
  schema.properties[key] = additionalProperties;
577
611
  set(schema.properties, [key, ADDITIONAL_PROPERTY_FLAG], true);
@@ -627,7 +661,10 @@
627
661
  resolvedSchema = { ...resolvedSchema, allOf: withoutContainsSchemas };
628
662
  }
629
663
  resolvedSchema = experimental_customMergeAllOf ? experimental_customMergeAllOf(resolvedSchema) : mergeAllOf(resolvedSchema, {
630
- deep: false
664
+ deep: false,
665
+ resolvers: {
666
+ $defs: mergeAllOf.options.resolvers.definitions
667
+ }
631
668
  });
632
669
  if (withContainsSchemas.length) {
633
670
  resolvedSchema.allOf = withContainsSchemas;
@@ -642,12 +679,12 @@
642
679
  resolvedSchema = Object.keys(resolvedSchema.properties).reduce(
643
680
  (schema2, key) => {
644
681
  const matchingProperties = getMatchingPatternProperties(schema2, key);
645
- if (!isEmpty(matchingProperties)) {
682
+ if (!isEmpty2(matchingProperties)) {
646
683
  schema2.properties[key] = retrieveSchema(
647
684
  validator,
648
685
  { allOf: [schema2.properties[key], ...Object.values(matchingProperties)] },
649
686
  rootSchema,
650
- rawFormData,
687
+ get13(rawFormData, [key]),
651
688
  experimental_customMergeAllOf
652
689
  );
653
690
  }
@@ -719,7 +756,7 @@
719
756
  function processDependencies(validator, dependencies, resolvedSchema, rootSchema, expandAllBranches, recurseList, formData, experimental_customMergeAllOf) {
720
757
  let schemas = [resolvedSchema];
721
758
  for (const dependencyKey in dependencies) {
722
- if (!expandAllBranches && get12(formData, [dependencyKey]) === void 0) {
759
+ if (!expandAllBranches && get13(formData, [dependencyKey]) === void 0) {
723
760
  continue;
724
761
  }
725
762
  if (resolvedSchema.properties && !(dependencyKey in resolvedSchema.properties)) {
@@ -850,11 +887,11 @@
850
887
  const xxxOfs = schema[xxx].map(
851
888
  (xxxOf) => retrieveSchema(validator, xxxOf, rootSchema, formData, experimental_customMergeAllOf)
852
889
  );
853
- const data = get12(formData, selectorField);
890
+ const data = get13(formData, selectorField);
854
891
  if (data !== void 0) {
855
892
  return xxxOfs.find((xxx2) => {
856
893
  return isEqual(
857
- get12(xxx2, [PROPERTIES_KEY, selectorField, DEFAULT_KEY], get12(xxx2, [PROPERTIES_KEY, selectorField, CONST_KEY])),
894
+ get13(xxx2, [PROPERTIES_KEY, selectorField, DEFAULT_KEY], get13(xxx2, [PROPERTIES_KEY, selectorField, CONST_KEY])),
858
895
  data
859
896
  );
860
897
  });
@@ -867,13 +904,13 @@
867
904
  if (has5(schema, REF_KEY)) {
868
905
  fieldSchema = retrieveSchema(validator, schema, rootSchema, void 0, experimental_customMergeAllOf);
869
906
  }
870
- if (isEmpty(path)) {
907
+ if (isEmpty2(path)) {
871
908
  return fieldSchema;
872
909
  }
873
910
  const pathList = Array.isArray(path) ? path : path.split(".");
874
911
  const [part, ...nestedPath] = pathList;
875
912
  if (part && has5(fieldSchema, part)) {
876
- fieldSchema = get12(fieldSchema, part);
913
+ fieldSchema = get13(fieldSchema, part);
877
914
  return getFromSchemaInternal(
878
915
  validator,
879
916
  rootSchema,
@@ -915,7 +952,7 @@
915
952
  parentField,
916
953
  fieldName,
917
954
  ONE_OF_KEY,
918
- get12(formData, subPath),
955
+ get13(formData, subPath),
919
956
  experimental_customMergeAllOf
920
957
  );
921
958
  } else if (has5(parentField, ANY_OF_KEY)) {
@@ -925,7 +962,7 @@
925
962
  parentField,
926
963
  fieldName,
927
964
  ANY_OF_KEY,
928
- get12(formData, subPath),
965
+ get13(formData, subPath),
929
966
  experimental_customMergeAllOf
930
967
  );
931
968
  }
@@ -989,11 +1026,11 @@
989
1026
  function calculateIndexScore(validator, rootSchema, schema, formData, experimental_customMergeAllOf) {
990
1027
  let totalScore = 0;
991
1028
  if (schema) {
992
- if (isObject2(schema.properties)) {
1029
+ if (isObject3(schema.properties)) {
993
1030
  totalScore += reduce(
994
1031
  schema.properties,
995
1032
  (score, value, key) => {
996
- const formValue = get12(formData, key);
1033
+ const formValue = get13(formData, key);
997
1034
  if (typeof value === "boolean") {
998
1035
  return score;
999
1036
  }
@@ -1020,14 +1057,14 @@
1020
1057
  validator,
1021
1058
  rootSchema,
1022
1059
  formValue,
1023
- get12(value, key2),
1060
+ get13(value, key2),
1024
1061
  -1,
1025
1062
  discriminator,
1026
1063
  experimental_customMergeAllOf
1027
1064
  );
1028
1065
  }
1029
1066
  if (value.type === "object") {
1030
- if (isObject2(formValue)) {
1067
+ if (isObject3(formValue)) {
1031
1068
  score += 1;
1032
1069
  }
1033
1070
  return score + calculateIndexScore(validator, rootSchema, value, formValue, experimental_customMergeAllOf);
@@ -1122,11 +1159,22 @@
1122
1159
  if (isObject(formData)) {
1123
1160
  const acc = Object.assign({}, defaults);
1124
1161
  return Object.keys(formData).reduce((acc2, key) => {
1125
- const keyValue = get12(formData, key);
1162
+ const keyValue = get13(formData, key);
1126
1163
  const keyExistsInDefaults = isObject(defaults) && key in defaults;
1127
1164
  const keyExistsInFormData = key in formData;
1165
+ const keyDefault = get13(defaults, key) ?? {};
1166
+ const defaultValueIsNestedObject = keyExistsInDefaults && Object.entries(keyDefault).some(([, v]) => isObject(v));
1167
+ const keyDefaultIsObject = keyExistsInDefaults && isObject(get13(defaults, key));
1168
+ const keyHasFormDataObject = keyExistsInFormData && isObject(keyValue);
1169
+ if (keyDefaultIsObject && keyHasFormDataObject && !defaultValueIsNestedObject) {
1170
+ acc2[key] = {
1171
+ ...get13(defaults, key),
1172
+ ...keyValue
1173
+ };
1174
+ return acc2;
1175
+ }
1128
1176
  acc2[key] = mergeDefaultsWithFormData(
1129
- defaults ? get12(defaults, key) : {},
1177
+ get13(defaults, key) ?? {},
1130
1178
  keyValue,
1131
1179
  mergeExtraArrayDefaults,
1132
1180
  defaultSupercedesUndefined,
@@ -1245,8 +1293,8 @@
1245
1293
  let value;
1246
1294
  let label = title;
1247
1295
  if (selectorField) {
1248
- const innerSchema = get12(aSchema, [PROPERTIES_KEY, selectorField], {});
1249
- value = get12(innerSchema, DEFAULT_KEY, get12(innerSchema, CONST_KEY));
1296
+ const innerSchema = get13(aSchema, [PROPERTIES_KEY, selectorField], {});
1297
+ value = get13(innerSchema, DEFAULT_KEY, get13(innerSchema, CONST_KEY));
1250
1298
  label = label || innerSchema?.title || aSchema.title || String(value);
1251
1299
  } else {
1252
1300
  value = toConstant(aSchema);
@@ -1286,10 +1334,10 @@
1286
1334
  const isSelfOrParentRequired = isParentRequired === void 0 ? requiredFields.includes(key) : isParentRequired;
1287
1335
  if (isObject(computedDefault)) {
1288
1336
  if (emptyObjectFields === "skipEmptyDefaults") {
1289
- if (!isEmpty(computedDefault)) {
1337
+ if (!isEmpty2(computedDefault)) {
1290
1338
  obj[key] = computedDefault;
1291
1339
  }
1292
- } else if ((!isEmpty(computedDefault) || requiredFields.includes(key)) && (isSelfOrParentRequired || emptyObjectFields !== "populateRequiredDefaults")) {
1340
+ } else if ((!isEmpty2(computedDefault) || requiredFields.includes(key)) && (isSelfOrParentRequired || emptyObjectFields !== "populateRequiredDefaults")) {
1293
1341
  obj[key] = computedDefault;
1294
1342
  }
1295
1343
  } else if (
@@ -1315,17 +1363,17 @@
1315
1363
  required,
1316
1364
  shouldMergeDefaultsIntoFormData = false
1317
1365
  } = computeDefaultsProps;
1318
- const formData = isObject(rawFormData) ? rawFormData : {};
1366
+ let formData = isObject(rawFormData) ? rawFormData : {};
1319
1367
  const schema = isObject(rawSchema) ? rawSchema : {};
1320
1368
  let defaults = parentDefaults;
1321
1369
  let schemaToCompute = null;
1322
1370
  let experimental_dfsb_to_compute = experimental_defaultFormStateBehavior;
1323
1371
  let updatedRecurseList = _recurseList;
1324
- if (schema[CONST_KEY] && experimental_defaultFormStateBehavior?.constAsDefaults !== "never" && !constIsAjvDataReference(schema)) {
1372
+ if (schema[CONST_KEY] !== void 0 && experimental_defaultFormStateBehavior?.constAsDefaults !== "never" && !constIsAjvDataReference(schema)) {
1325
1373
  defaults = schema[CONST_KEY];
1326
1374
  } else if (isObject(defaults) && isObject(schema.default)) {
1327
1375
  defaults = mergeObjects(defaults, schema.default);
1328
- } else if (DEFAULT_KEY in schema && !schema[ANY_OF_KEY] && !schema[ONE_OF_KEY]) {
1376
+ } else if (DEFAULT_KEY in schema && !schema[ANY_OF_KEY] && !schema[ONE_OF_KEY] && !schema[REF_KEY]) {
1329
1377
  defaults = schema.default;
1330
1378
  } else if (REF_KEY in schema) {
1331
1379
  const refName = schema[REF_KEY];
@@ -1333,6 +1381,12 @@
1333
1381
  updatedRecurseList = _recurseList.concat(refName);
1334
1382
  schemaToCompute = findSchemaDefinition(refName, rootSchema);
1335
1383
  }
1384
+ if (schemaToCompute && !defaults) {
1385
+ defaults = schema.default;
1386
+ }
1387
+ if (shouldMergeDefaultsIntoFormData && schemaToCompute && !isObject(rawFormData)) {
1388
+ formData = rawFormData;
1389
+ }
1336
1390
  } else if (DEPENDENCIES_KEY in schema) {
1337
1391
  const defaultFormData = {
1338
1392
  ...getDefaultBasedOnSchemaType(validator, schema, computeDefaultsProps, defaults),
@@ -1410,7 +1464,7 @@
1410
1464
  experimental_defaultFormStateBehavior: experimental_dfsb_to_compute,
1411
1465
  experimental_customMergeAllOf,
1412
1466
  parentDefaults: defaults,
1413
- rawFormData: formData,
1467
+ rawFormData: rawFormData ?? formData,
1414
1468
  required,
1415
1469
  shouldMergeDefaultsIntoFormData
1416
1470
  });
@@ -1473,7 +1527,7 @@
1473
1527
  const parentConst = retrievedSchema[CONST_KEY];
1474
1528
  const objectDefaults = Object.keys(retrievedSchema.properties || {}).reduce(
1475
1529
  (acc, key) => {
1476
- const propertySchema = get12(retrievedSchema, [PROPERTIES_KEY, key], {});
1530
+ const propertySchema = get13(retrievedSchema, [PROPERTIES_KEY, key], {});
1477
1531
  const hasParentConst = isObject(parentConst) && parentConst[key] !== void 0;
1478
1532
  const hasConst = (isObject(propertySchema) && CONST_KEY in propertySchema || hasParentConst) && experimental_defaultFormStateBehavior?.constAsDefaults !== "never" && !constIsAjvDataReference(propertySchema);
1479
1533
  const computedDefault = computeDefaults(validator, propertySchema, {
@@ -1482,8 +1536,8 @@
1482
1536
  experimental_defaultFormStateBehavior,
1483
1537
  experimental_customMergeAllOf,
1484
1538
  includeUndefinedValues: includeUndefinedValues === true,
1485
- parentDefaults: get12(defaults, [key]),
1486
- rawFormData: get12(formData, [key]),
1539
+ parentDefaults: get13(defaults, [key]),
1540
+ rawFormData: get13(formData, [key]),
1487
1541
  required: retrievedSchema.required?.includes(key),
1488
1542
  shouldMergeDefaultsIntoFormData
1489
1543
  });
@@ -1519,8 +1573,8 @@
1519
1573
  experimental_defaultFormStateBehavior,
1520
1574
  experimental_customMergeAllOf,
1521
1575
  includeUndefinedValues: includeUndefinedValues === true,
1522
- parentDefaults: get12(defaults, [key]),
1523
- rawFormData: get12(formData, [key]),
1576
+ parentDefaults: get13(defaults, [key]),
1577
+ rawFormData: get13(formData, [key]),
1524
1578
  required: retrievedSchema.required?.includes(key),
1525
1579
  shouldMergeDefaultsIntoFormData
1526
1580
  });
@@ -1581,7 +1635,7 @@
1581
1635
  experimental_defaultFormStateBehavior,
1582
1636
  experimental_customMergeAllOf,
1583
1637
  rawFormData: item,
1584
- parentDefaults: get12(defaults, [idx]),
1638
+ parentDefaults: get13(defaults, [idx]),
1585
1639
  required,
1586
1640
  shouldMergeDefaultsIntoFormData
1587
1641
  });
@@ -1643,6 +1697,12 @@
1643
1697
  rawFormData: formData,
1644
1698
  shouldMergeDefaultsIntoFormData: true
1645
1699
  });
1700
+ if (schema.type !== "object" && isObject(schema.default)) {
1701
+ return {
1702
+ ...defaults,
1703
+ ...formData
1704
+ };
1705
+ }
1646
1706
  if (isObject(formData) || Array.isArray(formData)) {
1647
1707
  const { mergeDefaultsIntoFormData } = experimental_defaultFormStateBehavior || {};
1648
1708
  const defaultSupercedesUndefined = mergeDefaultsIntoFormData === "useDefaultIfFormDataUndefined";
@@ -1713,19 +1773,19 @@
1713
1773
  if (has5(newSchema, PROPERTIES_KEY)) {
1714
1774
  const removeOldSchemaData = {};
1715
1775
  if (has5(oldSchema, PROPERTIES_KEY)) {
1716
- const properties = get12(oldSchema, PROPERTIES_KEY, {});
1776
+ const properties = get13(oldSchema, PROPERTIES_KEY, {});
1717
1777
  Object.keys(properties).forEach((key) => {
1718
1778
  if (has5(data, key)) {
1719
1779
  removeOldSchemaData[key] = void 0;
1720
1780
  }
1721
1781
  });
1722
1782
  }
1723
- const keys2 = Object.keys(get12(newSchema, PROPERTIES_KEY, {}));
1783
+ const keys2 = Object.keys(get13(newSchema, PROPERTIES_KEY, {}));
1724
1784
  const nestedData = {};
1725
1785
  keys2.forEach((key) => {
1726
- const formValue = get12(data, key);
1727
- let oldKeyedSchema = get12(oldSchema, [PROPERTIES_KEY, key], {});
1728
- let newKeyedSchema = get12(newSchema, [PROPERTIES_KEY, key], {});
1786
+ const formValue = get13(data, key);
1787
+ let oldKeyedSchema = get13(oldSchema, [PROPERTIES_KEY, key], {});
1788
+ let newKeyedSchema = get13(newSchema, [PROPERTIES_KEY, key], {});
1729
1789
  if (has5(oldKeyedSchema, REF_KEY)) {
1730
1790
  oldKeyedSchema = retrieveSchema(
1731
1791
  validator,
@@ -1744,8 +1804,8 @@
1744
1804
  experimental_customMergeAllOf
1745
1805
  );
1746
1806
  }
1747
- const oldSchemaTypeForKey = get12(oldKeyedSchema, "type");
1748
- const newSchemaTypeForKey = get12(newKeyedSchema, "type");
1807
+ const oldSchemaTypeForKey = get13(oldKeyedSchema, "type");
1808
+ const newSchemaTypeForKey = get13(newKeyedSchema, "type");
1749
1809
  if (!oldSchemaTypeForKey || oldSchemaTypeForKey === newSchemaTypeForKey) {
1750
1810
  if (has5(removeOldSchemaData, key)) {
1751
1811
  delete removeOldSchemaData[key];
@@ -1763,17 +1823,17 @@
1763
1823
  nestedData[key] = itemData;
1764
1824
  }
1765
1825
  } else {
1766
- const newOptionDefault = get12(newKeyedSchema, "default", NO_VALUE);
1767
- const oldOptionDefault = get12(oldKeyedSchema, "default", NO_VALUE);
1826
+ const newOptionDefault = get13(newKeyedSchema, "default", NO_VALUE);
1827
+ const oldOptionDefault = get13(oldKeyedSchema, "default", NO_VALUE);
1768
1828
  if (newOptionDefault !== NO_VALUE && newOptionDefault !== formValue) {
1769
1829
  if (oldOptionDefault === formValue) {
1770
1830
  removeOldSchemaData[key] = newOptionDefault;
1771
- } else if (get12(newKeyedSchema, "readOnly") === true) {
1831
+ } else if (get13(newKeyedSchema, "readOnly") === true) {
1772
1832
  removeOldSchemaData[key] = void 0;
1773
1833
  }
1774
1834
  }
1775
- const newOptionConst = get12(newKeyedSchema, "const", NO_VALUE);
1776
- const oldOptionConst = get12(oldKeyedSchema, "const", NO_VALUE);
1835
+ const newOptionConst = get13(newKeyedSchema, "const", NO_VALUE);
1836
+ const oldOptionConst = get13(oldKeyedSchema, "const", NO_VALUE);
1777
1837
  if (newOptionConst !== NO_VALUE && newOptionConst !== formValue) {
1778
1838
  removeOldSchemaData[key] = oldOptionConst === formValue ? newOptionConst : void 0;
1779
1839
  }
@@ -1785,9 +1845,9 @@
1785
1845
  ...removeOldSchemaData,
1786
1846
  ...nestedData
1787
1847
  };
1788
- } else if (get12(oldSchema, "type") === "array" && get12(newSchema, "type") === "array" && Array.isArray(data)) {
1789
- let oldSchemaItems = get12(oldSchema, "items");
1790
- let newSchemaItems = get12(newSchema, "items");
1848
+ } else if (get13(oldSchema, "type") === "array" && get13(newSchema, "type") === "array" && Array.isArray(data)) {
1849
+ let oldSchemaItems = get13(oldSchema, "items");
1850
+ let newSchemaItems = get13(newSchema, "items");
1791
1851
  if (typeof oldSchemaItems === "object" && typeof newSchemaItems === "object" && !Array.isArray(oldSchemaItems) && !Array.isArray(newSchemaItems)) {
1792
1852
  if (has5(oldSchemaItems, REF_KEY)) {
1793
1853
  oldSchemaItems = retrieveSchema(
@@ -1807,10 +1867,10 @@
1807
1867
  experimental_customMergeAllOf
1808
1868
  );
1809
1869
  }
1810
- const oldSchemaType = get12(oldSchemaItems, "type");
1811
- const newSchemaType = get12(newSchemaItems, "type");
1870
+ const oldSchemaType = get13(oldSchemaItems, "type");
1871
+ const newSchemaType = get13(newSchemaItems, "type");
1812
1872
  if (!oldSchemaType || oldSchemaType === newSchemaType) {
1813
- const maxItems = get12(newSchema, "maxItems", -1);
1873
+ const maxItems = get13(newSchema, "maxItems", -1);
1814
1874
  if (newSchemaType === "object") {
1815
1875
  newFormData = data.reduce((newValue, aValue) => {
1816
1876
  const itemValue = sanitizeDataForNewSchema(
@@ -1857,10 +1917,10 @@
1857
1917
  );
1858
1918
  }
1859
1919
  }
1860
- if (ITEMS_KEY in schema && !get12(schema, [ITEMS_KEY, REF_KEY])) {
1920
+ if (ITEMS_KEY in schema && !get13(schema, [ITEMS_KEY, REF_KEY])) {
1861
1921
  return toIdSchemaInternal(
1862
1922
  validator,
1863
- get12(schema, ITEMS_KEY),
1923
+ get13(schema, ITEMS_KEY),
1864
1924
  idPrefix,
1865
1925
  idSeparator,
1866
1926
  id,
@@ -1883,7 +1943,7 @@
1883
1943
  rootSchema,
1884
1944
  // It's possible that formData is not an object -- this can happen if an
1885
1945
  // array item has just been added, but not populated with data yet
1886
- get12(formData, [name]),
1946
+ get13(formData, [name]),
1887
1947
  _recurseList,
1888
1948
  experimental_customMergeAllOf
1889
1949
  );
@@ -1996,7 +2056,7 @@
1996
2056
  }
1997
2057
  } else if (PROPERTIES_KEY in schema) {
1998
2058
  for (const property in schema.properties) {
1999
- const field = get12(schema, [PROPERTIES_KEY, property], {});
2059
+ const field = get13(schema, [PROPERTIES_KEY, property], {});
2000
2060
  pathSchema[property] = toPathSchemaInternal(
2001
2061
  validator,
2002
2062
  field,
@@ -2004,7 +2064,7 @@
2004
2064
  rootSchema,
2005
2065
  // It's possible that formData is not an object -- this can happen if an
2006
2066
  // array item has just been added, but not populated with data yet
2007
- get12(formData, [property]),
2067
+ get13(formData, [property]),
2008
2068
  _recurseList,
2009
2069
  experimental_customMergeAllOf
2010
2070
  );
@@ -2442,7 +2502,7 @@
2442
2502
  */
2443
2503
  getOrCreateErrorBlock(pathOfError) {
2444
2504
  const hasPath = Array.isArray(pathOfError) && pathOfError.length > 0 || typeof pathOfError === "string";
2445
- let errorBlock = hasPath ? get12(this.errorSchema, pathOfError) : this.errorSchema;
2505
+ let errorBlock = hasPath ? get13(this.errorSchema, pathOfError) : this.errorSchema;
2446
2506
  if (!errorBlock && pathOfError) {
2447
2507
  errorBlock = {};
2448
2508
  setWith(this.errorSchema, pathOfError, errorBlock, Object);
@@ -2468,7 +2528,7 @@
2468
2528
  */
2469
2529
  addErrors(errorOrList, pathOfError) {
2470
2530
  const errorBlock = this.getOrCreateErrorBlock(pathOfError);
2471
- let errorsList = get12(errorBlock, ERRORS_KEY);
2531
+ let errorsList = get13(errorBlock, ERRORS_KEY);
2472
2532
  if (!Array.isArray(errorsList)) {
2473
2533
  errorsList = [];
2474
2534
  errorBlock[ERRORS_KEY] = errorsList;
@@ -2615,7 +2675,7 @@
2615
2675
  );
2616
2676
  }
2617
2677
  function getTestIds() {
2618
- if (typeof process === "undefined" || get12(process, "env.NODE_ENV") !== "test") {
2678
+ if (typeof process === "undefined" || get13(process, "env.NODE_ENV") !== "test") {
2619
2679
  return {};
2620
2680
  }
2621
2681
  const ids = /* @__PURE__ */ new Map();
@@ -2684,7 +2744,7 @@
2684
2744
  }
2685
2745
  };
2686
2746
  function mergeWidgetOptions(AWidget) {
2687
- let MergedWidget = get12(AWidget, "MergedWidget");
2747
+ let MergedWidget = get13(AWidget, "MergedWidget");
2688
2748
  if (!MergedWidget) {
2689
2749
  const defaultOptions = AWidget.defaultProps && AWidget.defaultProps.options || {};
2690
2750
  MergedWidget = ({ options, ...props }) => {
@@ -2797,7 +2857,7 @@
2797
2857
  if (has5(regOrFc, FORM_CONTEXT_NAME)) {
2798
2858
  lookupPath.unshift(FORM_CONTEXT_NAME);
2799
2859
  }
2800
- return get12(regOrFc, [...lookupPath, toLookup], fallback);
2860
+ return get13(regOrFc, [...lookupPath, toLookup], fallback);
2801
2861
  }
2802
2862
 
2803
2863
  // src/orderProperties.ts
@@ -2972,7 +3032,7 @@
2972
3032
  const { errors: oldErrors, errorSchema: oldErrorSchema } = validationData;
2973
3033
  let errors = toErrorList(additionalErrorSchema);
2974
3034
  let errorSchema = additionalErrorSchema;
2975
- if (!isEmpty(oldErrorSchema)) {
3035
+ if (!isEmpty2(oldErrorSchema)) {
2976
3036
  errorSchema = mergeObjects(oldErrorSchema, additionalErrorSchema, true);
2977
3037
  errors = [...oldErrors].concat(errors);
2978
3038
  }
@@ -3000,7 +3060,7 @@
3000
3060
  if (Array.isArray(schemaNode)) {
3001
3061
  return withIdRefPrefixArray([...schemaNode]);
3002
3062
  }
3003
- if (isObject2(schemaNode)) {
3063
+ if (isObject3(schemaNode)) {
3004
3064
  return withIdRefPrefixObject({ ...schemaNode });
3005
3065
  }
3006
3066
  return schemaNode;
@@ -3016,7 +3076,7 @@
3016
3076
  } else if (!aIsPlainObject && bIsPlainObject) {
3017
3077
  return keys(b);
3018
3078
  } else {
3019
- const unequalFields = keys(pickBy(a, (value, key) => !deepEquals(value, get12(b, key))));
3079
+ const unequalFields = keys(pickBy(a, (value, key) => !deepEquals(value, get13(b, key))));
3020
3080
  const diffFields = difference(keys(b), keys(a));
3021
3081
  return [...unequalFields, ...diffFields];
3022
3082
  }
@@ -3081,7 +3141,7 @@
3081
3141
  * @param hash - The hash value at which to map the schema
3082
3142
  */
3083
3143
  addSchema(schema, hash) {
3084
- const key = get12(schema, ID_KEY, hash);
3144
+ const key = get13(schema, ID_KEY, hash);
3085
3145
  const identifiedSchema = { ...schema, [ID_KEY]: key };
3086
3146
  const existing = this.schemaMap[key];
3087
3147
  if (!existing) {
@@ -3188,6 +3248,7 @@
3188
3248
  exports.ID_KEY = ID_KEY;
3189
3249
  exports.IF_KEY = IF_KEY;
3190
3250
  exports.ITEMS_KEY = ITEMS_KEY;
3251
+ exports.JSON_SCHEMA_DRAFT_2020_12 = JSON_SCHEMA_DRAFT_2020_12;
3191
3252
  exports.JUNK_OPTION_ID = JUNK_OPTION_ID;
3192
3253
  exports.LOOKUP_MAP_NAME = LOOKUP_MAP_NAME;
3193
3254
  exports.NAME_KEY = NAME_KEY;
@@ -3199,6 +3260,7 @@
3199
3260
  exports.REQUIRED_KEY = REQUIRED_KEY;
3200
3261
  exports.RJSF_ADDITIONAL_PROPERTIES_FLAG = RJSF_ADDITIONAL_PROPERTIES_FLAG;
3201
3262
  exports.ROOT_SCHEMA_PREFIX = ROOT_SCHEMA_PREFIX;
3263
+ exports.SCHEMA_KEY = SCHEMA_KEY;
3202
3264
  exports.SUBMIT_BTN_OPTIONS_KEY = SUBMIT_BTN_OPTIONS_KEY;
3203
3265
  exports.TranslatableString = TranslatableString;
3204
3266
  exports.UI_FIELD_KEY = UI_FIELD_KEY;