@rjsf/utils 5.21.2 → 5.22.1

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/index.js CHANGED
@@ -504,10 +504,18 @@ function mergeSchemas(obj1, obj2) {
504
504
  }
505
505
 
506
506
  // src/schema/retrieveSchema.ts
507
- function retrieveSchema(validator, schema, rootSchema = {}, rawFormData) {
508
- return retrieveSchemaInternal(validator, schema, rootSchema, rawFormData)[0];
507
+ function retrieveSchema(validator, schema, rootSchema = {}, rawFormData, experimental_customMergeAllOf) {
508
+ return retrieveSchemaInternal(
509
+ validator,
510
+ schema,
511
+ rootSchema,
512
+ rawFormData,
513
+ void 0,
514
+ void 0,
515
+ experimental_customMergeAllOf
516
+ )[0];
509
517
  }
510
- function resolveCondition(validator, schema, rootSchema, expandAllBranches, recurseList, formData) {
518
+ function resolveCondition(validator, schema, rootSchema, expandAllBranches, recurseList, formData, experimental_customMergeAllOf) {
511
519
  const { if: expression, then, else: otherwise, ...resolvedSchemaLessConditional } = schema;
512
520
  const conditionValue = validator.isValid(expression, formData || {}, rootSchema);
513
521
  let resolvedSchemas = [resolvedSchemaLessConditional];
@@ -515,12 +523,28 @@ function resolveCondition(validator, schema, rootSchema, expandAllBranches, recu
515
523
  if (expandAllBranches) {
516
524
  if (then && typeof then !== "boolean") {
517
525
  schemas = schemas.concat(
518
- retrieveSchemaInternal(validator, then, rootSchema, formData, expandAllBranches, recurseList)
526
+ retrieveSchemaInternal(
527
+ validator,
528
+ then,
529
+ rootSchema,
530
+ formData,
531
+ expandAllBranches,
532
+ recurseList,
533
+ experimental_customMergeAllOf
534
+ )
519
535
  );
520
536
  }
521
537
  if (otherwise && typeof otherwise !== "boolean") {
522
538
  schemas = schemas.concat(
523
- retrieveSchemaInternal(validator, otherwise, rootSchema, formData, expandAllBranches, recurseList)
539
+ retrieveSchemaInternal(
540
+ validator,
541
+ otherwise,
542
+ rootSchema,
543
+ formData,
544
+ expandAllBranches,
545
+ recurseList,
546
+ experimental_customMergeAllOf
547
+ )
524
548
  );
525
549
  }
526
550
  } else {
@@ -533,7 +557,8 @@ function resolveCondition(validator, schema, rootSchema, expandAllBranches, recu
533
557
  rootSchema,
534
558
  formData,
535
559
  expandAllBranches,
536
- recurseList
560
+ recurseList,
561
+ experimental_customMergeAllOf
537
562
  )
538
563
  );
539
564
  }
@@ -542,7 +567,15 @@ function resolveCondition(validator, schema, rootSchema, expandAllBranches, recu
542
567
  resolvedSchemas = schemas.map((s) => mergeSchemas(resolvedSchemaLessConditional, s));
543
568
  }
544
569
  return resolvedSchemas.flatMap(
545
- (s) => retrieveSchemaInternal(validator, s, rootSchema, formData, expandAllBranches, recurseList)
570
+ (s) => retrieveSchemaInternal(
571
+ validator,
572
+ s,
573
+ rootSchema,
574
+ formData,
575
+ expandAllBranches,
576
+ recurseList,
577
+ experimental_customMergeAllOf
578
+ )
546
579
  );
547
580
  }
548
581
  function getAllPermutationsOfXxxOf(listOfLists) {
@@ -559,7 +592,7 @@ function getAllPermutationsOfXxxOf(listOfLists) {
559
592
  );
560
593
  return allPermutations;
561
594
  }
562
- function resolveSchema(validator, schema, rootSchema, expandAllBranches, recurseList, formData) {
595
+ function resolveSchema(validator, schema, rootSchema, expandAllBranches, recurseList, formData, experimental_customMergeAllOf) {
563
596
  const updatedSchemas = resolveReference(
564
597
  validator,
565
598
  schema,
@@ -581,7 +614,15 @@ function resolveSchema(validator, schema, rootSchema, expandAllBranches, recurse
581
614
  formData
582
615
  );
583
616
  return resolvedSchemas.flatMap((s) => {
584
- return retrieveSchemaInternal(validator, s, rootSchema, formData, expandAllBranches, recurseList);
617
+ return retrieveSchemaInternal(
618
+ validator,
619
+ s,
620
+ rootSchema,
621
+ formData,
622
+ expandAllBranches,
623
+ recurseList,
624
+ experimental_customMergeAllOf
625
+ );
585
626
  });
586
627
  }
587
628
  if (ALL_OF_KEY in schema && Array.isArray(schema.allOf)) {
@@ -592,7 +633,8 @@ function resolveSchema(validator, schema, rootSchema, expandAllBranches, recurse
592
633
  rootSchema,
593
634
  formData,
594
635
  expandAllBranches,
595
- recurseList
636
+ recurseList,
637
+ experimental_customMergeAllOf
596
638
  )
597
639
  );
598
640
  const allPermutations = getAllPermutationsOfXxxOf(allOfSchemaElements);
@@ -600,7 +642,7 @@ function resolveSchema(validator, schema, rootSchema, expandAllBranches, recurse
600
642
  }
601
643
  return [schema];
602
644
  }
603
- function resolveReference(validator, schema, rootSchema, expandAllBranches, recurseList, formData) {
645
+ function resolveReference(validator, schema, rootSchema, expandAllBranches, recurseList, formData, experimental_customMergeAllOf) {
604
646
  const updatedSchema = resolveAllReferences(schema, rootSchema, recurseList);
605
647
  if (updatedSchema !== schema) {
606
648
  return retrieveSchemaInternal(
@@ -609,7 +651,8 @@ function resolveReference(validator, schema, rootSchema, expandAllBranches, recu
609
651
  rootSchema,
610
652
  formData,
611
653
  expandAllBranches,
612
- recurseList
654
+ recurseList,
655
+ experimental_customMergeAllOf
613
656
  );
614
657
  }
615
658
  return [schema];
@@ -687,7 +730,7 @@ function stubExistingAdditionalProperties(validator, theSchema, rootSchema, aFor
687
730
  });
688
731
  return schema;
689
732
  }
690
- function retrieveSchemaInternal(validator, schema, rootSchema, rawFormData, expandAllBranches = false, recurseList = []) {
733
+ function retrieveSchemaInternal(validator, schema, rootSchema, rawFormData, expandAllBranches = false, recurseList = [], experimental_customMergeAllOf) {
691
734
  if (!isObject(schema)) {
692
735
  return [{}];
693
736
  }
@@ -708,7 +751,8 @@ function retrieveSchemaInternal(validator, schema, rootSchema, rawFormData, expa
708
751
  rootSchema,
709
752
  expandAllBranches,
710
753
  recurseList,
711
- rawFormData
754
+ rawFormData,
755
+ experimental_customMergeAllOf
712
756
  );
713
757
  }
714
758
  if (ALL_OF_KEY in resolvedSchema) {
@@ -729,7 +773,7 @@ function retrieveSchemaInternal(validator, schema, rootSchema, rawFormData, expa
729
773
  if (withContainsSchemas.length) {
730
774
  resolvedSchema = { ...resolvedSchema, allOf: withoutContainsSchemas };
731
775
  }
732
- resolvedSchema = (0, import_json_schema_merge_allof.default)(resolvedSchema, {
776
+ resolvedSchema = experimental_customMergeAllOf ? experimental_customMergeAllOf(resolvedSchema) : (0, import_json_schema_merge_allof.default)(resolvedSchema, {
733
777
  deep: false
734
778
  });
735
779
  if (withContainsSchemas.length) {
@@ -770,7 +814,7 @@ function resolveAnyOrOneOfSchemas(validator, schema, rootSchema, expandAllBranch
770
814
  }
771
815
  return [schema];
772
816
  }
773
- function resolveDependencies(validator, schema, rootSchema, expandAllBranches, recurseList, formData) {
817
+ function resolveDependencies(validator, schema, rootSchema, expandAllBranches, recurseList, formData, experimental_customMergeAllOf) {
774
818
  const { dependencies, ...remainingSchema } = schema;
775
819
  const resolvedSchemas = resolveAnyOrOneOfSchemas(
776
820
  validator,
@@ -787,11 +831,12 @@ function resolveDependencies(validator, schema, rootSchema, expandAllBranches, r
787
831
  rootSchema,
788
832
  expandAllBranches,
789
833
  recurseList,
790
- formData
834
+ formData,
835
+ experimental_customMergeAllOf
791
836
  )
792
837
  );
793
838
  }
794
- function processDependencies(validator, dependencies, resolvedSchema, rootSchema, expandAllBranches, recurseList, formData) {
839
+ function processDependencies(validator, dependencies, resolvedSchema, rootSchema, expandAllBranches, recurseList, formData, experimental_customMergeAllOf) {
795
840
  let schemas = [resolvedSchema];
796
841
  for (const dependencyKey in dependencies) {
797
842
  if (!expandAllBranches && (0, import_get4.default)(formData, [dependencyKey]) === void 0) {
@@ -815,7 +860,8 @@ function processDependencies(validator, dependencies, resolvedSchema, rootSchema
815
860
  dependencyValue,
816
861
  expandAllBranches,
817
862
  recurseList,
818
- formData
863
+ formData,
864
+ experimental_customMergeAllOf
819
865
  );
820
866
  }
821
867
  return schemas.flatMap(
@@ -826,7 +872,8 @@ function processDependencies(validator, dependencies, resolvedSchema, rootSchema
826
872
  rootSchema,
827
873
  expandAllBranches,
828
874
  recurseList,
829
- formData
875
+ formData,
876
+ experimental_customMergeAllOf
830
877
  )
831
878
  );
832
879
  }
@@ -839,14 +886,15 @@ function withDependentProperties(schema, additionallyRequired) {
839
886
  const required = Array.isArray(schema.required) ? Array.from(/* @__PURE__ */ new Set([...schema.required, ...additionallyRequired])) : additionallyRequired;
840
887
  return { ...schema, required };
841
888
  }
842
- function withDependentSchema(validator, schema, rootSchema, dependencyKey, dependencyValue, expandAllBranches, recurseList, formData) {
889
+ function withDependentSchema(validator, schema, rootSchema, dependencyKey, dependencyValue, expandAllBranches, recurseList, formData, experimental_customMergeAllOf) {
843
890
  const dependentSchemas = retrieveSchemaInternal(
844
891
  validator,
845
892
  dependencyValue,
846
893
  rootSchema,
847
894
  formData,
848
895
  expandAllBranches,
849
- recurseList
896
+ recurseList,
897
+ experimental_customMergeAllOf
850
898
  );
851
899
  return dependentSchemas.flatMap((dependent) => {
852
900
  const { oneOf, ...dependentSchema } = dependent;
@@ -870,12 +918,13 @@ function withDependentSchema(validator, schema, rootSchema, dependencyKey, depen
870
918
  resolvedOneOf,
871
919
  expandAllBranches,
872
920
  recurseList,
873
- formData
921
+ formData,
922
+ experimental_customMergeAllOf
874
923
  )
875
924
  );
876
925
  });
877
926
  }
878
- function withExactlyOneSubschema(validator, schema, rootSchema, dependencyKey, oneOf, expandAllBranches, recurseList, formData) {
927
+ function withExactlyOneSubschema(validator, schema, rootSchema, dependencyKey, oneOf, expandAllBranches, recurseList, formData, experimental_customMergeAllOf) {
879
928
  const validSubschemas = oneOf.filter((subschema) => {
880
929
  if (typeof subschema === "boolean" || !subschema || !subschema.properties) {
881
930
  return false;
@@ -906,7 +955,8 @@ function withExactlyOneSubschema(validator, schema, rootSchema, dependencyKey, o
906
955
  rootSchema,
907
956
  formData,
908
957
  expandAllBranches,
909
- recurseList
958
+ recurseList,
959
+ experimental_customMergeAllOf
910
960
  );
911
961
  return schemas.map((s2) => mergeSchemas(schema, s2));
912
962
  });
@@ -922,7 +972,7 @@ var JUNK_OPTION = {
922
972
  }
923
973
  }
924
974
  };
925
- function calculateIndexScore(validator, rootSchema, schema, formData = {}) {
975
+ function calculateIndexScore(validator, rootSchema, schema, formData) {
926
976
  let totalScore = 0;
927
977
  if (schema) {
928
978
  if ((0, import_isObject5.default)(schema.properties)) {
@@ -950,7 +1000,10 @@ function calculateIndexScore(validator, rootSchema, schema, formData = {}) {
950
1000
  );
951
1001
  }
952
1002
  if (value.type === "object") {
953
- return score + calculateIndexScore(validator, rootSchema, value, formValue || {});
1003
+ if ((0, import_isObject5.default)(formValue)) {
1004
+ score += 1;
1005
+ }
1006
+ return score + calculateIndexScore(validator, rootSchema, value, formValue);
954
1007
  }
955
1008
  if (value.type === guessType(formValue)) {
956
1009
  let newScore = score + 1;
@@ -1020,12 +1073,17 @@ function isFixedItems(schema) {
1020
1073
 
1021
1074
  // src/mergeDefaultsWithFormData.ts
1022
1075
  var import_get6 = __toESM(require("lodash/get"));
1023
- function mergeDefaultsWithFormData(defaults, formData, mergeExtraArrayDefaults = false) {
1076
+ function mergeDefaultsWithFormData(defaults, formData, mergeExtraArrayDefaults = false, defaultSupercedesUndefined = false) {
1024
1077
  if (Array.isArray(formData)) {
1025
1078
  const defaultsArray = Array.isArray(defaults) ? defaults : [];
1026
1079
  const mapped = formData.map((value, idx) => {
1027
1080
  if (defaultsArray[idx]) {
1028
- return mergeDefaultsWithFormData(defaultsArray[idx], value, mergeExtraArrayDefaults);
1081
+ return mergeDefaultsWithFormData(
1082
+ defaultsArray[idx],
1083
+ value,
1084
+ mergeExtraArrayDefaults,
1085
+ defaultSupercedesUndefined
1086
+ );
1029
1087
  }
1030
1088
  return value;
1031
1089
  });
@@ -1040,11 +1098,15 @@ function mergeDefaultsWithFormData(defaults, formData, mergeExtraArrayDefaults =
1040
1098
  acc2[key] = mergeDefaultsWithFormData(
1041
1099
  defaults ? (0, import_get6.default)(defaults, key) : {},
1042
1100
  (0, import_get6.default)(formData, key),
1043
- mergeExtraArrayDefaults
1101
+ mergeExtraArrayDefaults,
1102
+ defaultSupercedesUndefined
1044
1103
  );
1045
1104
  return acc2;
1046
1105
  }, acc);
1047
1106
  }
1107
+ if (defaultSupercedesUndefined && formData === void 0) {
1108
+ return defaults;
1109
+ }
1048
1110
  return formData;
1049
1111
  }
1050
1112
 
@@ -1115,9 +1177,9 @@ function getInnerSchemaForArrayItem(schema, additionalItems = 0 /* Ignore */, id
1115
1177
  }
1116
1178
  return {};
1117
1179
  }
1118
- function maybeAddDefaultToObject(obj, key, computedDefault, includeUndefinedValues, isParentRequired, requiredFields = [], experimental_defaultFormStateBehavior = {}) {
1180
+ function maybeAddDefaultToObject(obj, key, computedDefault, includeUndefinedValues, isParentRequired, requiredFields = [], experimental_defaultFormStateBehavior = {}, isConst = false) {
1119
1181
  const { emptyObjectFields = "populateAllDefaults" } = experimental_defaultFormStateBehavior;
1120
- if (includeUndefinedValues) {
1182
+ if (includeUndefinedValues || isConst) {
1121
1183
  obj[key] = computedDefault;
1122
1184
  } else if (emptyObjectFields !== "skipDefaults") {
1123
1185
  if (isObject(computedDefault)) {
@@ -1147,6 +1209,7 @@ function computeDefaults(validator, rawSchema, computeDefaultsProps = {}) {
1147
1209
  includeUndefinedValues = false,
1148
1210
  _recurseList = [],
1149
1211
  experimental_defaultFormStateBehavior = void 0,
1212
+ experimental_customMergeAllOf = void 0,
1150
1213
  required
1151
1214
  } = computeDefaultsProps;
1152
1215
  const formData = isObject(rawFormData) ? rawFormData : {};
@@ -1154,7 +1217,9 @@ function computeDefaults(validator, rawSchema, computeDefaultsProps = {}) {
1154
1217
  let defaults = parentDefaults;
1155
1218
  let schemaToCompute = null;
1156
1219
  let updatedRecurseList = _recurseList;
1157
- if (isObject(defaults) && isObject(schema.default)) {
1220
+ if (isConstant(schema)) {
1221
+ defaults = schema.const;
1222
+ } else if (isObject(defaults) && isObject(schema.default)) {
1158
1223
  defaults = mergeObjects(defaults, schema.default);
1159
1224
  } else if (DEFAULT_KEY in schema) {
1160
1225
  defaults = schema.default;
@@ -1169,7 +1234,15 @@ function computeDefaults(validator, rawSchema, computeDefaultsProps = {}) {
1169
1234
  ...formData,
1170
1235
  ...getDefaultBasedOnSchemaType(validator, schema, computeDefaultsProps, defaults)
1171
1236
  };
1172
- const resolvedSchema = resolveDependencies(validator, schema, rootSchema, false, [], defaultFormData);
1237
+ const resolvedSchema = resolveDependencies(
1238
+ validator,
1239
+ schema,
1240
+ rootSchema,
1241
+ false,
1242
+ [],
1243
+ defaultFormData,
1244
+ experimental_customMergeAllOf
1245
+ );
1173
1246
  schemaToCompute = resolvedSchema[0];
1174
1247
  } else if (isFixedItems(schema)) {
1175
1248
  defaults = schema.items.map(
@@ -1237,18 +1310,24 @@ function getObjectDefaults(validator, rawSchema, {
1237
1310
  includeUndefinedValues = false,
1238
1311
  _recurseList = [],
1239
1312
  experimental_defaultFormStateBehavior = void 0,
1313
+ experimental_customMergeAllOf = void 0,
1240
1314
  required
1241
1315
  } = {}, defaults) {
1242
1316
  {
1243
1317
  const formData = isObject(rawFormData) ? rawFormData : {};
1244
1318
  const schema = rawSchema;
1245
- const retrievedSchema = experimental_defaultFormStateBehavior?.allOf === "populateDefaults" && ALL_OF_KEY in schema ? retrieveSchema(validator, schema, rootSchema, formData) : schema;
1319
+ const retrievedSchema = experimental_defaultFormStateBehavior?.allOf === "populateDefaults" && ALL_OF_KEY in schema ? retrieveSchema(validator, schema, rootSchema, formData, experimental_customMergeAllOf) : schema;
1320
+ const parentConst = retrievedSchema[CONST_KEY];
1246
1321
  const objectDefaults = Object.keys(retrievedSchema.properties || {}).reduce(
1247
1322
  (acc, key) => {
1248
- const computedDefault = computeDefaults(validator, (0, import_get7.default)(retrievedSchema, [PROPERTIES_KEY, key]), {
1323
+ const propertySchema = (0, import_get7.default)(retrievedSchema, [PROPERTIES_KEY, key]);
1324
+ const hasParentConst = isObject(parentConst) && parentConst[key] !== void 0;
1325
+ const hasConst = isObject(propertySchema) && CONST_KEY in propertySchema || hasParentConst;
1326
+ const computedDefault = computeDefaults(validator, propertySchema, {
1249
1327
  rootSchema,
1250
1328
  _recurseList,
1251
1329
  experimental_defaultFormStateBehavior,
1330
+ experimental_customMergeAllOf,
1252
1331
  includeUndefinedValues: includeUndefinedValues === true,
1253
1332
  parentDefaults: (0, import_get7.default)(defaults, [key]),
1254
1333
  rawFormData: (0, import_get7.default)(formData, [key]),
@@ -1261,7 +1340,8 @@ function getObjectDefaults(validator, rawSchema, {
1261
1340
  includeUndefinedValues,
1262
1341
  required,
1263
1342
  retrievedSchema.required,
1264
- experimental_defaultFormStateBehavior
1343
+ experimental_defaultFormStateBehavior,
1344
+ hasConst
1265
1345
  );
1266
1346
  return acc;
1267
1347
  },
@@ -1343,11 +1423,14 @@ function getArrayDefaults(validator, rawSchema, {
1343
1423
  });
1344
1424
  }
1345
1425
  }
1346
- if (neverPopulate) {
1347
- return defaults ?? emptyDefault;
1348
- }
1349
- if (ignoreMinItemsFlagSet && !required) {
1350
- return defaults ? defaults : void 0;
1426
+ const hasConst = isObject(schema) && CONST_KEY in schema;
1427
+ if (hasConst === false) {
1428
+ if (neverPopulate) {
1429
+ return defaults ?? emptyDefault;
1430
+ }
1431
+ if (ignoreMinItemsFlagSet && !required) {
1432
+ return defaults ? defaults : void 0;
1433
+ }
1351
1434
  }
1352
1435
  const defaultsLength = Array.isArray(defaults) ? defaults.length : 0;
1353
1436
  if (!schema.minItems || isMultiSelect(validator, schema, rootSchema) || computeSkipPopulate(validator, schema, rootSchema) || schema.minItems <= defaultsLength) {
@@ -1377,26 +1460,29 @@ function getDefaultBasedOnSchemaType(validator, rawSchema, computeDefaultsProps
1377
1460
  }
1378
1461
  }
1379
1462
  }
1380
- function getDefaultFormState(validator, theSchema, formData, rootSchema, includeUndefinedValues = false, experimental_defaultFormStateBehavior) {
1463
+ function getDefaultFormState(validator, theSchema, formData, rootSchema, includeUndefinedValues = false, experimental_defaultFormStateBehavior, experimental_customMergeAllOf) {
1381
1464
  if (!isObject(theSchema)) {
1382
1465
  throw new Error("Invalid schema: " + theSchema);
1383
1466
  }
1384
- const schema = retrieveSchema(validator, theSchema, rootSchema, formData);
1467
+ const schema = retrieveSchema(validator, theSchema, rootSchema, formData, experimental_customMergeAllOf);
1385
1468
  const defaults = computeDefaults(validator, schema, {
1386
1469
  rootSchema,
1387
1470
  includeUndefinedValues,
1388
1471
  experimental_defaultFormStateBehavior,
1472
+ experimental_customMergeAllOf,
1389
1473
  rawFormData: formData
1390
1474
  });
1391
1475
  if (formData === void 0 || formData === null || typeof formData === "number" && isNaN(formData)) {
1392
1476
  return defaults;
1393
1477
  }
1394
- const { mergeExtraDefaults } = experimental_defaultFormStateBehavior?.arrayMinItems || {};
1478
+ const { mergeDefaultsIntoFormData, arrayMinItems = {} } = experimental_defaultFormStateBehavior || {};
1479
+ const { mergeExtraDefaults } = arrayMinItems;
1480
+ const defaultSupercedesUndefined = mergeDefaultsIntoFormData === "useDefaultIfFormDataUndefined";
1395
1481
  if (isObject(formData)) {
1396
- return mergeDefaultsWithFormData(defaults, formData, mergeExtraDefaults);
1482
+ return mergeDefaultsWithFormData(defaults, formData, mergeExtraDefaults, defaultSupercedesUndefined);
1397
1483
  }
1398
1484
  if (Array.isArray(formData)) {
1399
- return mergeDefaultsWithFormData(defaults, formData, mergeExtraDefaults);
1485
+ return mergeDefaultsWithFormData(defaults, formData, mergeExtraDefaults, defaultSupercedesUndefined);
1400
1486
  }
1401
1487
  return formData;
1402
1488
  }
@@ -1569,7 +1655,7 @@ function sanitizeDataForNewSchema(validator, rootSchema, newSchema, oldSchema, d
1569
1655
  // src/schema/toIdSchema.ts
1570
1656
  var import_get9 = __toESM(require("lodash/get"));
1571
1657
  var import_isEqual2 = __toESM(require("lodash/isEqual"));
1572
- function toIdSchemaInternal(validator, schema, idPrefix, idSeparator, id, rootSchema, formData, _recurseList = []) {
1658
+ function toIdSchemaInternal(validator, schema, idPrefix, idSeparator, id, rootSchema, formData, _recurseList = [], experimental_customMergeAllOf) {
1573
1659
  if (REF_KEY in schema || DEPENDENCIES_KEY in schema || ALL_OF_KEY in schema) {
1574
1660
  const _schema = retrieveSchema(validator, schema, rootSchema, formData);
1575
1661
  const sameSchemaIndex = _recurseList.findIndex((item) => (0, import_isEqual2.default)(item, _schema));
@@ -1582,7 +1668,8 @@ function toIdSchemaInternal(validator, schema, idPrefix, idSeparator, id, rootSc
1582
1668
  id,
1583
1669
  rootSchema,
1584
1670
  formData,
1585
- _recurseList.concat(_schema)
1671
+ _recurseList.concat(_schema),
1672
+ experimental_customMergeAllOf
1586
1673
  );
1587
1674
  }
1588
1675
  }
@@ -1595,7 +1682,8 @@ function toIdSchemaInternal(validator, schema, idPrefix, idSeparator, id, rootSc
1595
1682
  id,
1596
1683
  rootSchema,
1597
1684
  formData,
1598
- _recurseList
1685
+ _recurseList,
1686
+ experimental_customMergeAllOf
1599
1687
  );
1600
1688
  }
1601
1689
  const $id = id || idPrefix;
@@ -1614,14 +1702,25 @@ function toIdSchemaInternal(validator, schema, idPrefix, idSeparator, id, rootSc
1614
1702
  // It's possible that formData is not an object -- this can happen if an
1615
1703
  // array item has just been added, but not populated with data yet
1616
1704
  (0, import_get9.default)(formData, [name]),
1617
- _recurseList
1705
+ _recurseList,
1706
+ experimental_customMergeAllOf
1618
1707
  );
1619
1708
  }
1620
1709
  }
1621
1710
  return idSchema;
1622
1711
  }
1623
- function toIdSchema(validator, schema, id, rootSchema, formData, idPrefix = "root", idSeparator = "_") {
1624
- return toIdSchemaInternal(validator, schema, idPrefix, idSeparator, id, rootSchema, formData);
1712
+ function toIdSchema(validator, schema, id, rootSchema, formData, idPrefix = "root", idSeparator = "_", experimental_customMergeAllOf) {
1713
+ return toIdSchemaInternal(
1714
+ validator,
1715
+ schema,
1716
+ idPrefix,
1717
+ idSeparator,
1718
+ id,
1719
+ rootSchema,
1720
+ formData,
1721
+ void 0,
1722
+ experimental_customMergeAllOf
1723
+ );
1625
1724
  }
1626
1725
 
1627
1726
  // src/schema/toPathSchema.ts
@@ -1725,11 +1824,13 @@ var SchemaUtils = class {
1725
1824
  * @param validator - An implementation of the `ValidatorType` interface that will be forwarded to all the APIs
1726
1825
  * @param rootSchema - The root schema that will be forwarded to all the APIs
1727
1826
  * @param experimental_defaultFormStateBehavior - Configuration flags to allow users to override default form state behavior
1827
+ * @param [experimental_customMergeAllOf] - Optional function that allows for custom merging of `allOf` schemas
1728
1828
  */
1729
- constructor(validator, rootSchema, experimental_defaultFormStateBehavior) {
1829
+ constructor(validator, rootSchema, experimental_defaultFormStateBehavior, experimental_customMergeAllOf) {
1730
1830
  this.rootSchema = rootSchema;
1731
1831
  this.validator = validator;
1732
1832
  this.experimental_defaultFormStateBehavior = experimental_defaultFormStateBehavior;
1833
+ this.experimental_customMergeAllOf = experimental_customMergeAllOf;
1733
1834
  }
1734
1835
  /** Returns the `ValidatorType` in the `SchemaUtilsType`
1735
1836
  *
@@ -1745,13 +1846,14 @@ var SchemaUtils = class {
1745
1846
  * @param validator - An implementation of the `ValidatorType` interface that will be compared against the current one
1746
1847
  * @param rootSchema - The root schema that will be compared against the current one
1747
1848
  * @param [experimental_defaultFormStateBehavior] Optional configuration object, if provided, allows users to override default form state behavior
1849
+ * @param [experimental_customMergeAllOf] - Optional function that allows for custom merging of `allOf` schemas
1748
1850
  * @returns - True if the `SchemaUtilsType` differs from the given `validator` or `rootSchema`
1749
1851
  */
1750
- doesSchemaUtilsDiffer(validator, rootSchema, experimental_defaultFormStateBehavior = {}) {
1852
+ doesSchemaUtilsDiffer(validator, rootSchema, experimental_defaultFormStateBehavior = {}, experimental_customMergeAllOf) {
1751
1853
  if (!validator || !rootSchema) {
1752
1854
  return false;
1753
1855
  }
1754
- return this.validator !== validator || !deepEquals(this.rootSchema, rootSchema) || !deepEquals(this.experimental_defaultFormStateBehavior, experimental_defaultFormStateBehavior);
1856
+ return this.validator !== validator || !deepEquals(this.rootSchema, rootSchema) || !deepEquals(this.experimental_defaultFormStateBehavior, experimental_defaultFormStateBehavior) || this.experimental_customMergeAllOf !== experimental_customMergeAllOf;
1755
1857
  }
1756
1858
  /** Returns the superset of `formData` that includes the given set updated to include any missing fields that have
1757
1859
  * computed to have defaults provided in the `schema`.
@@ -1770,7 +1872,8 @@ var SchemaUtils = class {
1770
1872
  formData,
1771
1873
  this.rootSchema,
1772
1874
  includeUndefinedValues,
1773
- this.experimental_defaultFormStateBehavior
1875
+ this.experimental_defaultFormStateBehavior,
1876
+ this.experimental_customMergeAllOf
1774
1877
  );
1775
1878
  }
1776
1879
  /** Determines whether the combination of `schema` and `uiSchema` properties indicates that the label for the `schema`
@@ -1880,7 +1983,13 @@ var SchemaUtils = class {
1880
1983
  * @returns - The schema having its conditions, additional properties, references and dependencies resolved
1881
1984
  */
1882
1985
  retrieveSchema(schema, rawFormData) {
1883
- return retrieveSchema(this.validator, schema, this.rootSchema, rawFormData);
1986
+ return retrieveSchema(
1987
+ this.validator,
1988
+ schema,
1989
+ this.rootSchema,
1990
+ rawFormData,
1991
+ this.experimental_customMergeAllOf
1992
+ );
1884
1993
  }
1885
1994
  /** Sanitize the `data` associated with the `oldSchema` so it is considered appropriate for the `newSchema`. If the
1886
1995
  * new schema does not contain any properties, then `undefined` is returned to clear all the form data. Due to the
@@ -1906,7 +2015,16 @@ var SchemaUtils = class {
1906
2015
  * @returns - The `IdSchema` object for the `schema`
1907
2016
  */
1908
2017
  toIdSchema(schema, id, formData, idPrefix = "root", idSeparator = "_") {
1909
- return toIdSchema(this.validator, schema, id, this.rootSchema, formData, idPrefix, idSeparator);
2018
+ return toIdSchema(
2019
+ this.validator,
2020
+ schema,
2021
+ id,
2022
+ this.rootSchema,
2023
+ formData,
2024
+ idPrefix,
2025
+ idSeparator,
2026
+ this.experimental_customMergeAllOf
2027
+ );
1910
2028
  }
1911
2029
  /** Generates an `PathSchema` object for the `schema`, recursively
1912
2030
  *
@@ -1919,8 +2037,13 @@ var SchemaUtils = class {
1919
2037
  return toPathSchema(this.validator, schema, name, this.rootSchema, formData);
1920
2038
  }
1921
2039
  };
1922
- function createSchemaUtils(validator, rootSchema, experimental_defaultFormStateBehavior = {}) {
1923
- return new SchemaUtils(validator, rootSchema, experimental_defaultFormStateBehavior);
2040
+ function createSchemaUtils(validator, rootSchema, experimental_defaultFormStateBehavior = {}, experimental_customMergeAllOf) {
2041
+ return new SchemaUtils(
2042
+ validator,
2043
+ rootSchema,
2044
+ experimental_defaultFormStateBehavior,
2045
+ experimental_customMergeAllOf
2046
+ );
1924
2047
  }
1925
2048
 
1926
2049
  // src/dataURItoBlob.ts