@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 +154 -122
- package/dist/index.js.map +2 -2
- package/dist/utils.esm.js +154 -122
- package/dist/utils.esm.js.map +2 -2
- package/dist/utils.umd.js +154 -122
- package/lib/schema/getDefaultFormState.d.ts +39 -11
- package/lib/schema/getDefaultFormState.js +160 -125
- package/lib/schema/getDefaultFormState.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/src/schema/getDefaultFormState.ts +237 -156
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
|
-
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
|
|
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
|
|
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
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
1214
|
-
|
|
1215
|
-
|
|
1216
|
-
|
|
1217
|
-
|
|
1218
|
-
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
|
|
1222
|
-
|
|
1223
|
-
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
-
|
|
1229
|
-
|
|
1230
|
-
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
)
|
|
1234
|
-
|
|
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
|
-
|
|
1270
|
-
|
|
1271
|
-
|
|
1272
|
-
|
|
1273
|
-
|
|
1274
|
-
|
|
1275
|
-
|
|
1276
|
-
|
|
1277
|
-
|
|
1278
|
-
|
|
1279
|
-
|
|
1280
|
-
|
|
1281
|
-
|
|
1282
|
-
|
|
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
|
-
|
|
1290
|
-
|
|
1291
|
-
|
|
1292
|
-
|
|
1293
|
-
|
|
1294
|
-
|
|
1295
|
-
|
|
1296
|
-
|
|
1297
|
-
|
|
1298
|
-
|
|
1299
|
-
|
|
1300
|
-
|
|
1301
|
-
|
|
1302
|
-
|
|
1303
|
-
|
|
1304
|
-
|
|
1305
|
-
|
|
1306
|
-
|
|
1307
|
-
|
|
1308
|
-
|
|
1309
|
-
|
|
1310
|
-
|
|
1311
|
-
|
|
1312
|
-
|
|
1313
|
-
|
|
1314
|
-
|
|
1315
|
-
|
|
1316
|
-
const
|
|
1317
|
-
|
|
1318
|
-
|
|
1319
|
-
|
|
1320
|
-
|
|
1321
|
-
|
|
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
|
-
|
|
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)) {
|