@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/index.js CHANGED
@@ -1124,15 +1124,16 @@ function maybeAddDefaultToObject(obj, key, computedDefault, includeUndefinedValu
1124
1124
  }
1125
1125
  }
1126
1126
  }
1127
- function computeDefaults(validator, rawSchema, {
1128
- parentDefaults,
1129
- rawFormData,
1130
- rootSchema = {},
1131
- includeUndefinedValues = false,
1132
- _recurseList = [],
1133
- experimental_defaultFormStateBehavior = void 0,
1134
- required
1135
- } = {}) {
1127
+ function computeDefaults(validator, rawSchema, computeDefaultsProps = {}) {
1128
+ const {
1129
+ parentDefaults,
1130
+ rawFormData,
1131
+ rootSchema = {},
1132
+ includeUndefinedValues = false,
1133
+ _recurseList = [],
1134
+ experimental_defaultFormStateBehavior = void 0,
1135
+ required
1136
+ } = computeDefaultsProps;
1136
1137
  const formData = isObject(rawFormData) ? rawFormData : {};
1137
1138
  const schema = isObject(rawSchema) ? rawSchema : {};
1138
1139
  let defaults = parentDefaults;
@@ -1149,7 +1150,11 @@ function computeDefaults(validator, rawSchema, {
1149
1150
  schemaToCompute = findSchemaDefinition(refName, rootSchema);
1150
1151
  }
1151
1152
  } else if (DEPENDENCIES_KEY in schema) {
1152
- const resolvedSchema = resolveDependencies(validator, schema, rootSchema, false, [], formData);
1153
+ const defaultFormData = {
1154
+ ...formData,
1155
+ ...getDefaultBasedOnSchemaType(validator, schema, computeDefaultsProps, defaults)
1156
+ };
1157
+ const resolvedSchema = resolveDependencies(validator, schema, rootSchema, false, [], defaultFormData);
1153
1158
  schemaToCompute = resolvedSchema[0];
1154
1159
  } else if (isFixedItems(schema)) {
1155
1160
  defaults = schema.items.map(
@@ -1208,127 +1213,154 @@ function computeDefaults(validator, rawSchema, {
1208
1213
  if (defaults === void 0) {
1209
1214
  defaults = schema.default;
1210
1215
  }
1211
- switch (getSchemaType(schema)) {
1212
- case "object": {
1213
- const retrievedSchema = experimental_defaultFormStateBehavior?.allOf === "populateDefaults" && ALL_OF_KEY in schema ? retrieveSchema(validator, schema, rootSchema, formData) : schema;
1214
- const objectDefaults = Object.keys(retrievedSchema.properties || {}).reduce(
1215
- (acc, key) => {
1216
- const computedDefault = computeDefaults(validator, (0, import_get7.default)(retrievedSchema, [PROPERTIES_KEY, key]), {
1217
- rootSchema,
1218
- _recurseList,
1219
- experimental_defaultFormStateBehavior,
1220
- includeUndefinedValues: includeUndefinedValues === true,
1221
- parentDefaults: (0, import_get7.default)(defaults, [key]),
1222
- rawFormData: (0, import_get7.default)(formData, [key]),
1223
- required: retrievedSchema.required?.includes(key)
1224
- });
1225
- maybeAddDefaultToObject(
1226
- acc,
1227
- key,
1228
- computedDefault,
1229
- includeUndefinedValues,
1230
- required,
1231
- retrievedSchema.required,
1232
- experimental_defaultFormStateBehavior
1233
- );
1234
- return acc;
1235
- },
1236
- {}
1237
- );
1238
- if (retrievedSchema.additionalProperties) {
1239
- const additionalPropertiesSchema = isObject(retrievedSchema.additionalProperties) ? retrievedSchema.additionalProperties : {};
1240
- const keys = /* @__PURE__ */ new Set();
1241
- if (isObject(defaults)) {
1242
- Object.keys(defaults).filter((key) => !retrievedSchema.properties || !retrievedSchema.properties[key]).forEach((key) => keys.add(key));
1243
- }
1244
- const formDataRequired = [];
1245
- Object.keys(formData).filter((key) => !retrievedSchema.properties || !retrievedSchema.properties[key]).forEach((key) => {
1246
- keys.add(key);
1247
- formDataRequired.push(key);
1248
- });
1249
- keys.forEach((key) => {
1250
- const computedDefault = computeDefaults(validator, additionalPropertiesSchema, {
1251
- rootSchema,
1252
- _recurseList,
1253
- experimental_defaultFormStateBehavior,
1254
- includeUndefinedValues: includeUndefinedValues === true,
1255
- parentDefaults: (0, import_get7.default)(defaults, [key]),
1256
- rawFormData: (0, import_get7.default)(formData, [key]),
1257
- required: retrievedSchema.required?.includes(key)
1258
- });
1259
- maybeAddDefaultToObject(
1260
- objectDefaults,
1261
- key,
1262
- computedDefault,
1263
- includeUndefinedValues,
1264
- required,
1265
- formDataRequired
1266
- );
1216
+ const defaultBasedOnSchemaType = getDefaultBasedOnSchemaType(validator, schema, computeDefaultsProps, defaults);
1217
+ return defaultBasedOnSchemaType ?? defaults;
1218
+ }
1219
+ function getObjectDefaults(validator, rawSchema, {
1220
+ rawFormData,
1221
+ rootSchema = {},
1222
+ includeUndefinedValues = false,
1223
+ _recurseList = [],
1224
+ experimental_defaultFormStateBehavior = void 0,
1225
+ required
1226
+ } = {}, defaults) {
1227
+ {
1228
+ const formData = isObject(rawFormData) ? rawFormData : {};
1229
+ const schema = rawSchema;
1230
+ const retrievedSchema = experimental_defaultFormStateBehavior?.allOf === "populateDefaults" && ALL_OF_KEY in schema ? retrieveSchema(validator, schema, rootSchema, formData) : schema;
1231
+ const objectDefaults = Object.keys(retrievedSchema.properties || {}).reduce(
1232
+ (acc, key) => {
1233
+ const computedDefault = computeDefaults(validator, (0, import_get7.default)(retrievedSchema, [PROPERTIES_KEY, key]), {
1234
+ rootSchema,
1235
+ _recurseList,
1236
+ experimental_defaultFormStateBehavior,
1237
+ includeUndefinedValues: includeUndefinedValues === true,
1238
+ parentDefaults: (0, import_get7.default)(defaults, [key]),
1239
+ rawFormData: (0, import_get7.default)(formData, [key]),
1240
+ required: retrievedSchema.required?.includes(key)
1267
1241
  });
1242
+ maybeAddDefaultToObject(
1243
+ acc,
1244
+ key,
1245
+ computedDefault,
1246
+ includeUndefinedValues,
1247
+ required,
1248
+ retrievedSchema.required,
1249
+ experimental_defaultFormStateBehavior
1250
+ );
1251
+ return acc;
1252
+ },
1253
+ {}
1254
+ );
1255
+ if (retrievedSchema.additionalProperties) {
1256
+ const additionalPropertiesSchema = isObject(retrievedSchema.additionalProperties) ? retrievedSchema.additionalProperties : {};
1257
+ const keys = /* @__PURE__ */ new Set();
1258
+ if (isObject(defaults)) {
1259
+ Object.keys(defaults).filter((key) => !retrievedSchema.properties || !retrievedSchema.properties[key]).forEach((key) => keys.add(key));
1268
1260
  }
1269
- return objectDefaults;
1270
- }
1271
- case "array": {
1272
- const neverPopulate = experimental_defaultFormStateBehavior?.arrayMinItems?.populate === "never";
1273
- const ignoreMinItemsFlagSet = experimental_defaultFormStateBehavior?.arrayMinItems?.populate === "requiredOnly";
1274
- const isSkipEmptyDefaults = experimental_defaultFormStateBehavior?.emptyObjectFields === "skipEmptyDefaults";
1275
- const computeSkipPopulate = experimental_defaultFormStateBehavior?.arrayMinItems?.computeSkipPopulate ?? (() => false);
1276
- const emptyDefault = isSkipEmptyDefaults ? void 0 : [];
1277
- if (Array.isArray(defaults)) {
1278
- defaults = defaults.map((item, idx) => {
1279
- const schemaItem = getInnerSchemaForArrayItem(schema, 2 /* Fallback */, idx);
1280
- return computeDefaults(validator, schemaItem, {
1281
- rootSchema,
1282
- _recurseList,
1283
- experimental_defaultFormStateBehavior,
1284
- parentDefaults: item,
1285
- required
1286
- });
1261
+ const formDataRequired = [];
1262
+ Object.keys(formData).filter((key) => !retrievedSchema.properties || !retrievedSchema.properties[key]).forEach((key) => {
1263
+ keys.add(key);
1264
+ formDataRequired.push(key);
1265
+ });
1266
+ keys.forEach((key) => {
1267
+ const computedDefault = computeDefaults(validator, additionalPropertiesSchema, {
1268
+ rootSchema,
1269
+ _recurseList,
1270
+ experimental_defaultFormStateBehavior,
1271
+ includeUndefinedValues: includeUndefinedValues === true,
1272
+ parentDefaults: (0, import_get7.default)(defaults, [key]),
1273
+ rawFormData: (0, import_get7.default)(formData, [key]),
1274
+ required: retrievedSchema.required?.includes(key)
1287
1275
  });
1288
- }
1289
- if (Array.isArray(rawFormData)) {
1290
- const schemaItem = getInnerSchemaForArrayItem(schema);
1291
- if (neverPopulate) {
1292
- defaults = rawFormData;
1293
- } else {
1294
- defaults = rawFormData.map((item, idx) => {
1295
- return computeDefaults(validator, schemaItem, {
1296
- rootSchema,
1297
- _recurseList,
1298
- experimental_defaultFormStateBehavior,
1299
- rawFormData: item,
1300
- parentDefaults: (0, import_get7.default)(defaults, [idx]),
1301
- required
1302
- });
1303
- });
1304
- }
1305
- }
1306
- if (neverPopulate) {
1307
- return defaults ?? emptyDefault;
1308
- }
1309
- if (ignoreMinItemsFlagSet && !required) {
1310
- return defaults ? defaults : void 0;
1311
- }
1312
- const defaultsLength = Array.isArray(defaults) ? defaults.length : 0;
1313
- if (!schema.minItems || isMultiSelect(validator, schema, rootSchema) || computeSkipPopulate(validator, schema, rootSchema) || schema.minItems <= defaultsLength) {
1314
- return defaults ? defaults : emptyDefault;
1315
- }
1316
- const defaultEntries = defaults || [];
1317
- const fillerSchema = getInnerSchemaForArrayItem(schema, 1 /* Invert */);
1318
- const fillerDefault = fillerSchema.default;
1319
- const fillerEntries = new Array(schema.minItems - defaultsLength).fill(
1320
- computeDefaults(validator, fillerSchema, {
1321
- parentDefaults: fillerDefault,
1276
+ maybeAddDefaultToObject(
1277
+ objectDefaults,
1278
+ key,
1279
+ computedDefault,
1280
+ includeUndefinedValues,
1281
+ required,
1282
+ formDataRequired
1283
+ );
1284
+ });
1285
+ }
1286
+ return objectDefaults;
1287
+ }
1288
+ }
1289
+ function getArrayDefaults(validator, rawSchema, {
1290
+ rawFormData,
1291
+ rootSchema = {},
1292
+ _recurseList = [],
1293
+ experimental_defaultFormStateBehavior = void 0,
1294
+ required
1295
+ } = {}, defaults) {
1296
+ const schema = rawSchema;
1297
+ const neverPopulate = experimental_defaultFormStateBehavior?.arrayMinItems?.populate === "never";
1298
+ const ignoreMinItemsFlagSet = experimental_defaultFormStateBehavior?.arrayMinItems?.populate === "requiredOnly";
1299
+ const isSkipEmptyDefaults = experimental_defaultFormStateBehavior?.emptyObjectFields === "skipEmptyDefaults";
1300
+ const computeSkipPopulate = experimental_defaultFormStateBehavior?.arrayMinItems?.computeSkipPopulate ?? (() => false);
1301
+ const emptyDefault = isSkipEmptyDefaults ? void 0 : [];
1302
+ if (Array.isArray(defaults)) {
1303
+ defaults = defaults.map((item, idx) => {
1304
+ const schemaItem = getInnerSchemaForArrayItem(schema, 2 /* Fallback */, idx);
1305
+ return computeDefaults(validator, schemaItem, {
1306
+ rootSchema,
1307
+ _recurseList,
1308
+ experimental_defaultFormStateBehavior,
1309
+ parentDefaults: item,
1310
+ required
1311
+ });
1312
+ });
1313
+ }
1314
+ if (Array.isArray(rawFormData)) {
1315
+ const schemaItem = getInnerSchemaForArrayItem(schema);
1316
+ if (neverPopulate) {
1317
+ defaults = rawFormData;
1318
+ } else {
1319
+ defaults = rawFormData.map((item, idx) => {
1320
+ return computeDefaults(validator, schemaItem, {
1322
1321
  rootSchema,
1323
1322
  _recurseList,
1324
1323
  experimental_defaultFormStateBehavior,
1324
+ rawFormData: item,
1325
+ parentDefaults: (0, import_get7.default)(defaults, [idx]),
1325
1326
  required
1326
- })
1327
- );
1328
- return defaultEntries.concat(fillerEntries);
1327
+ });
1328
+ });
1329
+ }
1330
+ }
1331
+ if (neverPopulate) {
1332
+ return defaults ?? emptyDefault;
1333
+ }
1334
+ if (ignoreMinItemsFlagSet && !required) {
1335
+ return defaults ? defaults : void 0;
1336
+ }
1337
+ const defaultsLength = Array.isArray(defaults) ? defaults.length : 0;
1338
+ if (!schema.minItems || isMultiSelect(validator, schema, rootSchema) || computeSkipPopulate(validator, schema, rootSchema) || schema.minItems <= defaultsLength) {
1339
+ return defaults ? defaults : emptyDefault;
1340
+ }
1341
+ const defaultEntries = defaults || [];
1342
+ const fillerSchema = getInnerSchemaForArrayItem(schema, 1 /* Invert */);
1343
+ const fillerDefault = fillerSchema.default;
1344
+ const fillerEntries = new Array(schema.minItems - defaultsLength).fill(
1345
+ computeDefaults(validator, fillerSchema, {
1346
+ parentDefaults: fillerDefault,
1347
+ rootSchema,
1348
+ _recurseList,
1349
+ experimental_defaultFormStateBehavior,
1350
+ required
1351
+ })
1352
+ );
1353
+ return defaultEntries.concat(fillerEntries);
1354
+ }
1355
+ function getDefaultBasedOnSchemaType(validator, rawSchema, computeDefaultsProps = {}, defaults) {
1356
+ switch (getSchemaType(rawSchema)) {
1357
+ case "object": {
1358
+ return getObjectDefaults(validator, rawSchema, computeDefaultsProps, defaults);
1359
+ }
1360
+ case "array": {
1361
+ return getArrayDefaults(validator, rawSchema, computeDefaultsProps, defaults);
1329
1362
  }
1330
1363
  }
1331
- return defaults;
1332
1364
  }
1333
1365
  function getDefaultFormState(validator, theSchema, formData, rootSchema, includeUndefinedValues = false, experimental_defaultFormStateBehavior) {
1334
1366
  if (!isObject(theSchema)) {