@rjsf/utils 5.20.1 → 5.21.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/utils.esm.js CHANGED
@@ -987,15 +987,16 @@ function maybeAddDefaultToObject(obj, key, computedDefault, includeUndefinedValu
987
987
  }
988
988
  }
989
989
  }
990
- function computeDefaults(validator, rawSchema, {
991
- parentDefaults,
992
- rawFormData,
993
- rootSchema = {},
994
- includeUndefinedValues = false,
995
- _recurseList = [],
996
- experimental_defaultFormStateBehavior = void 0,
997
- required
998
- } = {}) {
990
+ function computeDefaults(validator, rawSchema, computeDefaultsProps = {}) {
991
+ const {
992
+ parentDefaults,
993
+ rawFormData,
994
+ rootSchema = {},
995
+ includeUndefinedValues = false,
996
+ _recurseList = [],
997
+ experimental_defaultFormStateBehavior = void 0,
998
+ required
999
+ } = computeDefaultsProps;
999
1000
  const formData = isObject(rawFormData) ? rawFormData : {};
1000
1001
  const schema = isObject(rawSchema) ? rawSchema : {};
1001
1002
  let defaults = parentDefaults;
@@ -1012,7 +1013,11 @@ function computeDefaults(validator, rawSchema, {
1012
1013
  schemaToCompute = findSchemaDefinition(refName, rootSchema);
1013
1014
  }
1014
1015
  } else if (DEPENDENCIES_KEY in schema) {
1015
- const resolvedSchema = resolveDependencies(validator, schema, rootSchema, false, [], formData);
1016
+ const defaultFormData = {
1017
+ ...formData,
1018
+ ...getDefaultBasedOnSchemaType(validator, schema, computeDefaultsProps, defaults)
1019
+ };
1020
+ const resolvedSchema = resolveDependencies(validator, schema, rootSchema, false, [], defaultFormData);
1016
1021
  schemaToCompute = resolvedSchema[0];
1017
1022
  } else if (isFixedItems(schema)) {
1018
1023
  defaults = schema.items.map(
@@ -1071,127 +1076,154 @@ function computeDefaults(validator, rawSchema, {
1071
1076
  if (defaults === void 0) {
1072
1077
  defaults = schema.default;
1073
1078
  }
1074
- switch (getSchemaType(schema)) {
1075
- case "object": {
1076
- const retrievedSchema = experimental_defaultFormStateBehavior?.allOf === "populateDefaults" && ALL_OF_KEY in schema ? retrieveSchema(validator, schema, rootSchema, formData) : schema;
1077
- const objectDefaults = Object.keys(retrievedSchema.properties || {}).reduce(
1078
- (acc, key) => {
1079
- const computedDefault = computeDefaults(validator, get7(retrievedSchema, [PROPERTIES_KEY, key]), {
1080
- rootSchema,
1081
- _recurseList,
1082
- experimental_defaultFormStateBehavior,
1083
- includeUndefinedValues: includeUndefinedValues === true,
1084
- parentDefaults: get7(defaults, [key]),
1085
- rawFormData: get7(formData, [key]),
1086
- required: retrievedSchema.required?.includes(key)
1087
- });
1088
- maybeAddDefaultToObject(
1089
- acc,
1090
- key,
1091
- computedDefault,
1092
- includeUndefinedValues,
1093
- required,
1094
- retrievedSchema.required,
1095
- experimental_defaultFormStateBehavior
1096
- );
1097
- return acc;
1098
- },
1099
- {}
1100
- );
1101
- if (retrievedSchema.additionalProperties) {
1102
- const additionalPropertiesSchema = isObject(retrievedSchema.additionalProperties) ? retrievedSchema.additionalProperties : {};
1103
- const keys = /* @__PURE__ */ new Set();
1104
- if (isObject(defaults)) {
1105
- Object.keys(defaults).filter((key) => !retrievedSchema.properties || !retrievedSchema.properties[key]).forEach((key) => keys.add(key));
1106
- }
1107
- const formDataRequired = [];
1108
- Object.keys(formData).filter((key) => !retrievedSchema.properties || !retrievedSchema.properties[key]).forEach((key) => {
1109
- keys.add(key);
1110
- formDataRequired.push(key);
1111
- });
1112
- keys.forEach((key) => {
1113
- const computedDefault = computeDefaults(validator, additionalPropertiesSchema, {
1114
- rootSchema,
1115
- _recurseList,
1116
- experimental_defaultFormStateBehavior,
1117
- includeUndefinedValues: includeUndefinedValues === true,
1118
- parentDefaults: get7(defaults, [key]),
1119
- rawFormData: get7(formData, [key]),
1120
- required: retrievedSchema.required?.includes(key)
1121
- });
1122
- maybeAddDefaultToObject(
1123
- objectDefaults,
1124
- key,
1125
- computedDefault,
1126
- includeUndefinedValues,
1127
- required,
1128
- formDataRequired
1129
- );
1079
+ const defaultBasedOnSchemaType = getDefaultBasedOnSchemaType(validator, schema, computeDefaultsProps, defaults);
1080
+ return defaultBasedOnSchemaType ?? defaults;
1081
+ }
1082
+ function getObjectDefaults(validator, rawSchema, {
1083
+ rawFormData,
1084
+ rootSchema = {},
1085
+ includeUndefinedValues = false,
1086
+ _recurseList = [],
1087
+ experimental_defaultFormStateBehavior = void 0,
1088
+ required
1089
+ } = {}, defaults) {
1090
+ {
1091
+ const formData = isObject(rawFormData) ? rawFormData : {};
1092
+ const schema = rawSchema;
1093
+ const retrievedSchema = experimental_defaultFormStateBehavior?.allOf === "populateDefaults" && ALL_OF_KEY in schema ? retrieveSchema(validator, schema, rootSchema, formData) : schema;
1094
+ const objectDefaults = Object.keys(retrievedSchema.properties || {}).reduce(
1095
+ (acc, key) => {
1096
+ const computedDefault = computeDefaults(validator, get7(retrievedSchema, [PROPERTIES_KEY, key]), {
1097
+ rootSchema,
1098
+ _recurseList,
1099
+ experimental_defaultFormStateBehavior,
1100
+ includeUndefinedValues: includeUndefinedValues === true,
1101
+ parentDefaults: get7(defaults, [key]),
1102
+ rawFormData: get7(formData, [key]),
1103
+ required: retrievedSchema.required?.includes(key)
1130
1104
  });
1105
+ maybeAddDefaultToObject(
1106
+ acc,
1107
+ key,
1108
+ computedDefault,
1109
+ includeUndefinedValues,
1110
+ required,
1111
+ retrievedSchema.required,
1112
+ experimental_defaultFormStateBehavior
1113
+ );
1114
+ return acc;
1115
+ },
1116
+ {}
1117
+ );
1118
+ if (retrievedSchema.additionalProperties) {
1119
+ const additionalPropertiesSchema = isObject(retrievedSchema.additionalProperties) ? retrievedSchema.additionalProperties : {};
1120
+ const keys = /* @__PURE__ */ new Set();
1121
+ if (isObject(defaults)) {
1122
+ Object.keys(defaults).filter((key) => !retrievedSchema.properties || !retrievedSchema.properties[key]).forEach((key) => keys.add(key));
1131
1123
  }
1132
- return objectDefaults;
1133
- }
1134
- case "array": {
1135
- const neverPopulate = experimental_defaultFormStateBehavior?.arrayMinItems?.populate === "never";
1136
- const ignoreMinItemsFlagSet = experimental_defaultFormStateBehavior?.arrayMinItems?.populate === "requiredOnly";
1137
- const isSkipEmptyDefaults = experimental_defaultFormStateBehavior?.emptyObjectFields === "skipEmptyDefaults";
1138
- const computeSkipPopulate = experimental_defaultFormStateBehavior?.arrayMinItems?.computeSkipPopulate ?? (() => false);
1139
- const emptyDefault = isSkipEmptyDefaults ? void 0 : [];
1140
- if (Array.isArray(defaults)) {
1141
- defaults = defaults.map((item, idx) => {
1142
- const schemaItem = getInnerSchemaForArrayItem(schema, 2 /* Fallback */, idx);
1143
- return computeDefaults(validator, schemaItem, {
1144
- rootSchema,
1145
- _recurseList,
1146
- experimental_defaultFormStateBehavior,
1147
- parentDefaults: item,
1148
- required
1149
- });
1124
+ const formDataRequired = [];
1125
+ Object.keys(formData).filter((key) => !retrievedSchema.properties || !retrievedSchema.properties[key]).forEach((key) => {
1126
+ keys.add(key);
1127
+ formDataRequired.push(key);
1128
+ });
1129
+ keys.forEach((key) => {
1130
+ const computedDefault = computeDefaults(validator, additionalPropertiesSchema, {
1131
+ rootSchema,
1132
+ _recurseList,
1133
+ experimental_defaultFormStateBehavior,
1134
+ includeUndefinedValues: includeUndefinedValues === true,
1135
+ parentDefaults: get7(defaults, [key]),
1136
+ rawFormData: get7(formData, [key]),
1137
+ required: retrievedSchema.required?.includes(key)
1150
1138
  });
1151
- }
1152
- if (Array.isArray(rawFormData)) {
1153
- const schemaItem = getInnerSchemaForArrayItem(schema);
1154
- if (neverPopulate) {
1155
- defaults = rawFormData;
1156
- } else {
1157
- defaults = rawFormData.map((item, idx) => {
1158
- return computeDefaults(validator, schemaItem, {
1159
- rootSchema,
1160
- _recurseList,
1161
- experimental_defaultFormStateBehavior,
1162
- rawFormData: item,
1163
- parentDefaults: get7(defaults, [idx]),
1164
- required
1165
- });
1166
- });
1167
- }
1168
- }
1169
- if (neverPopulate) {
1170
- return defaults ?? emptyDefault;
1171
- }
1172
- if (ignoreMinItemsFlagSet && !required) {
1173
- return defaults ? defaults : void 0;
1174
- }
1175
- const defaultsLength = Array.isArray(defaults) ? defaults.length : 0;
1176
- if (!schema.minItems || isMultiSelect(validator, schema, rootSchema) || computeSkipPopulate(validator, schema, rootSchema) || schema.minItems <= defaultsLength) {
1177
- return defaults ? defaults : emptyDefault;
1178
- }
1179
- const defaultEntries = defaults || [];
1180
- const fillerSchema = getInnerSchemaForArrayItem(schema, 1 /* Invert */);
1181
- const fillerDefault = fillerSchema.default;
1182
- const fillerEntries = new Array(schema.minItems - defaultsLength).fill(
1183
- computeDefaults(validator, fillerSchema, {
1184
- parentDefaults: fillerDefault,
1139
+ maybeAddDefaultToObject(
1140
+ objectDefaults,
1141
+ key,
1142
+ computedDefault,
1143
+ includeUndefinedValues,
1144
+ required,
1145
+ formDataRequired
1146
+ );
1147
+ });
1148
+ }
1149
+ return objectDefaults;
1150
+ }
1151
+ }
1152
+ function getArrayDefaults(validator, rawSchema, {
1153
+ rawFormData,
1154
+ rootSchema = {},
1155
+ _recurseList = [],
1156
+ experimental_defaultFormStateBehavior = void 0,
1157
+ required
1158
+ } = {}, defaults) {
1159
+ const schema = rawSchema;
1160
+ const neverPopulate = experimental_defaultFormStateBehavior?.arrayMinItems?.populate === "never";
1161
+ const ignoreMinItemsFlagSet = experimental_defaultFormStateBehavior?.arrayMinItems?.populate === "requiredOnly";
1162
+ const isSkipEmptyDefaults = experimental_defaultFormStateBehavior?.emptyObjectFields === "skipEmptyDefaults";
1163
+ const computeSkipPopulate = experimental_defaultFormStateBehavior?.arrayMinItems?.computeSkipPopulate ?? (() => false);
1164
+ const emptyDefault = isSkipEmptyDefaults ? void 0 : [];
1165
+ if (Array.isArray(defaults)) {
1166
+ defaults = defaults.map((item, idx) => {
1167
+ const schemaItem = getInnerSchemaForArrayItem(schema, 2 /* Fallback */, idx);
1168
+ return computeDefaults(validator, schemaItem, {
1169
+ rootSchema,
1170
+ _recurseList,
1171
+ experimental_defaultFormStateBehavior,
1172
+ parentDefaults: item,
1173
+ required
1174
+ });
1175
+ });
1176
+ }
1177
+ if (Array.isArray(rawFormData)) {
1178
+ const schemaItem = getInnerSchemaForArrayItem(schema);
1179
+ if (neverPopulate) {
1180
+ defaults = rawFormData;
1181
+ } else {
1182
+ defaults = rawFormData.map((item, idx) => {
1183
+ return computeDefaults(validator, schemaItem, {
1185
1184
  rootSchema,
1186
1185
  _recurseList,
1187
1186
  experimental_defaultFormStateBehavior,
1187
+ rawFormData: item,
1188
+ parentDefaults: get7(defaults, [idx]),
1188
1189
  required
1189
- })
1190
- );
1191
- return defaultEntries.concat(fillerEntries);
1190
+ });
1191
+ });
1192
+ }
1193
+ }
1194
+ if (neverPopulate) {
1195
+ return defaults ?? emptyDefault;
1196
+ }
1197
+ if (ignoreMinItemsFlagSet && !required) {
1198
+ return defaults ? defaults : void 0;
1199
+ }
1200
+ const defaultsLength = Array.isArray(defaults) ? defaults.length : 0;
1201
+ if (!schema.minItems || isMultiSelect(validator, schema, rootSchema) || computeSkipPopulate(validator, schema, rootSchema) || schema.minItems <= defaultsLength) {
1202
+ return defaults ? defaults : emptyDefault;
1203
+ }
1204
+ const defaultEntries = defaults || [];
1205
+ const fillerSchema = getInnerSchemaForArrayItem(schema, 1 /* Invert */);
1206
+ const fillerDefault = fillerSchema.default;
1207
+ const fillerEntries = new Array(schema.minItems - defaultsLength).fill(
1208
+ computeDefaults(validator, fillerSchema, {
1209
+ parentDefaults: fillerDefault,
1210
+ rootSchema,
1211
+ _recurseList,
1212
+ experimental_defaultFormStateBehavior,
1213
+ required
1214
+ })
1215
+ );
1216
+ return defaultEntries.concat(fillerEntries);
1217
+ }
1218
+ function getDefaultBasedOnSchemaType(validator, rawSchema, computeDefaultsProps = {}, defaults) {
1219
+ switch (getSchemaType(rawSchema)) {
1220
+ case "object": {
1221
+ return getObjectDefaults(validator, rawSchema, computeDefaultsProps, defaults);
1222
+ }
1223
+ case "array": {
1224
+ return getArrayDefaults(validator, rawSchema, computeDefaultsProps, defaults);
1192
1225
  }
1193
1226
  }
1194
- return defaults;
1195
1227
  }
1196
1228
  function getDefaultFormState(validator, theSchema, formData, rootSchema, includeUndefinedValues = false, experimental_defaultFormStateBehavior) {
1197
1229
  if (!isObject(theSchema)) {