@rjsf/utils 6.0.1 → 6.1.0

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.cjs CHANGED
@@ -1629,12 +1629,12 @@ function computeDefaultBasedOnSchemaTypeAndDefaults(schema, computedDefault) {
1629
1629
  const shouldReturnNullAsDefault = Array.isArray(type) && type.includes("null") && (0, import_isEmpty4.default)(computedDefault) && schemaDefault === null;
1630
1630
  return shouldReturnNullAsDefault ? null : computedDefault;
1631
1631
  }
1632
- function maybeAddDefaultToObject(obj, key, computedDefault, includeUndefinedValues, isParentRequired, requiredFields = [], experimental_defaultFormStateBehavior = {}, isConst = false) {
1632
+ function maybeAddDefaultToObject(obj, key, computedDefault, includeUndefinedValues, isParentRequired, requiredFields = [], experimental_defaultFormStateBehavior = {}, isConst = false, isNullType = false) {
1633
1633
  const { emptyObjectFields = "populateAllDefaults" } = experimental_defaultFormStateBehavior;
1634
1634
  if (includeUndefinedValues === true || isConst) {
1635
1635
  obj[key] = computedDefault;
1636
1636
  } else if (includeUndefinedValues === "excludeObjectChildren") {
1637
- if (!isObject(computedDefault) || !(0, import_isEmpty4.default)(computedDefault)) {
1637
+ if (isNullType && computedDefault !== void 0 || !isObject(computedDefault) || !(0, import_isEmpty4.default)(computedDefault)) {
1638
1638
  obj[key] = computedDefault;
1639
1639
  }
1640
1640
  } else if (emptyObjectFields !== "skipDefaults") {
@@ -1860,7 +1860,8 @@ function getObjectDefaults(validator, rawSchema, {
1860
1860
  required,
1861
1861
  retrievedSchema.required,
1862
1862
  experimental_defaultFormStateBehavior,
1863
- hasConst
1863
+ hasConst,
1864
+ propertySchema?.type === "null"
1864
1865
  );
1865
1866
  return acc;
1866
1867
  },
@@ -2042,6 +2043,9 @@ function getDefaultFormState(validator, theSchema, formData, rootSchema, include
2042
2043
  return defaults;
2043
2044
  }
2044
2045
 
2046
+ // src/schema/getDisplayLabel.ts
2047
+ var import_get13 = __toESM(require("lodash/get"), 1);
2048
+
2045
2049
  // src/isCustomWidget.ts
2046
2050
  function isCustomWidget(uiSchema = {}) {
2047
2051
  return (
@@ -2073,25 +2077,28 @@ function isFilesArray(validator, schema, uiSchema = {}, rootSchema, experimental
2073
2077
  function getDisplayLabel(validator, schema, uiSchema = {}, rootSchema, globalOptions, experimental_customMergeAllOf) {
2074
2078
  const uiOptions = getUiOptions(uiSchema, globalOptions);
2075
2079
  const { label = true } = uiOptions;
2076
- let displayLabel = !!label;
2077
- const schemaType = getSchemaType(schema);
2078
- if (schemaType === "array") {
2079
- displayLabel = isMultiSelect(validator, schema, rootSchema, experimental_customMergeAllOf) || isFilesArray(validator, schema, uiSchema, rootSchema, experimental_customMergeAllOf) || isCustomWidget(uiSchema);
2080
- }
2081
- if (schemaType === "object") {
2082
- displayLabel = false;
2083
- }
2084
- if (schemaType === "boolean" && uiSchema && !uiSchema[UI_WIDGET_KEY]) {
2085
- displayLabel = false;
2086
- }
2087
- if (uiSchema && uiSchema[UI_FIELD_KEY]) {
2088
- displayLabel = false;
2080
+ let displayLabel = Boolean(label);
2081
+ if (displayLabel) {
2082
+ const schemaType = getSchemaType(schema);
2083
+ const addedByAdditionalProperty = (0, import_get13.default)(schema, ADDITIONAL_PROPERTY_FLAG, false);
2084
+ if (schemaType === "array") {
2085
+ displayLabel = addedByAdditionalProperty || isMultiSelect(validator, schema, rootSchema, experimental_customMergeAllOf) || isFilesArray(validator, schema, uiSchema, rootSchema, experimental_customMergeAllOf) || isCustomWidget(uiSchema);
2086
+ }
2087
+ if (schemaType === "object") {
2088
+ displayLabel = addedByAdditionalProperty;
2089
+ }
2090
+ if (schemaType === "boolean" && uiSchema && !uiSchema[UI_WIDGET_KEY]) {
2091
+ displayLabel = false;
2092
+ }
2093
+ if (uiSchema && uiSchema[UI_FIELD_KEY]) {
2094
+ displayLabel = false;
2095
+ }
2089
2096
  }
2090
2097
  return displayLabel;
2091
2098
  }
2092
2099
 
2093
2100
  // src/schema/sanitizeDataForNewSchema.ts
2094
- var import_get13 = __toESM(require("lodash/get"), 1);
2101
+ var import_get14 = __toESM(require("lodash/get"), 1);
2095
2102
  var import_has5 = __toESM(require("lodash/has"), 1);
2096
2103
  var NO_VALUE = Symbol("no Value");
2097
2104
  function sanitizeDataForNewSchema(validator, rootSchema, newSchema, oldSchema, data = {}, experimental_customMergeAllOf) {
@@ -2099,19 +2106,19 @@ function sanitizeDataForNewSchema(validator, rootSchema, newSchema, oldSchema, d
2099
2106
  if ((0, import_has5.default)(newSchema, PROPERTIES_KEY)) {
2100
2107
  const removeOldSchemaData = {};
2101
2108
  if ((0, import_has5.default)(oldSchema, PROPERTIES_KEY)) {
2102
- const properties = (0, import_get13.default)(oldSchema, PROPERTIES_KEY, {});
2109
+ const properties = (0, import_get14.default)(oldSchema, PROPERTIES_KEY, {});
2103
2110
  Object.keys(properties).forEach((key) => {
2104
2111
  if ((0, import_has5.default)(data, key)) {
2105
2112
  removeOldSchemaData[key] = void 0;
2106
2113
  }
2107
2114
  });
2108
2115
  }
2109
- const keys2 = Object.keys((0, import_get13.default)(newSchema, PROPERTIES_KEY, {}));
2116
+ const keys2 = Object.keys((0, import_get14.default)(newSchema, PROPERTIES_KEY, {}));
2110
2117
  const nestedData = {};
2111
2118
  keys2.forEach((key) => {
2112
- const formValue = (0, import_get13.default)(data, key);
2113
- let oldKeyedSchema = (0, import_get13.default)(oldSchema, [PROPERTIES_KEY, key], {});
2114
- let newKeyedSchema = (0, import_get13.default)(newSchema, [PROPERTIES_KEY, key], {});
2119
+ const formValue = (0, import_get14.default)(data, key);
2120
+ let oldKeyedSchema = (0, import_get14.default)(oldSchema, [PROPERTIES_KEY, key], {});
2121
+ let newKeyedSchema = (0, import_get14.default)(newSchema, [PROPERTIES_KEY, key], {});
2115
2122
  if ((0, import_has5.default)(oldKeyedSchema, REF_KEY)) {
2116
2123
  oldKeyedSchema = retrieveSchema(
2117
2124
  validator,
@@ -2130,8 +2137,8 @@ function sanitizeDataForNewSchema(validator, rootSchema, newSchema, oldSchema, d
2130
2137
  experimental_customMergeAllOf
2131
2138
  );
2132
2139
  }
2133
- const oldSchemaTypeForKey = (0, import_get13.default)(oldKeyedSchema, "type");
2134
- const newSchemaTypeForKey = (0, import_get13.default)(newKeyedSchema, "type");
2140
+ const oldSchemaTypeForKey = (0, import_get14.default)(oldKeyedSchema, "type");
2141
+ const newSchemaTypeForKey = (0, import_get14.default)(newKeyedSchema, "type");
2135
2142
  if (!oldSchemaTypeForKey || oldSchemaTypeForKey === newSchemaTypeForKey) {
2136
2143
  if ((0, import_has5.default)(removeOldSchemaData, key)) {
2137
2144
  delete removeOldSchemaData[key];
@@ -2149,17 +2156,17 @@ function sanitizeDataForNewSchema(validator, rootSchema, newSchema, oldSchema, d
2149
2156
  nestedData[key] = itemData;
2150
2157
  }
2151
2158
  } else {
2152
- const newOptionDefault = (0, import_get13.default)(newKeyedSchema, "default", NO_VALUE);
2153
- const oldOptionDefault = (0, import_get13.default)(oldKeyedSchema, "default", NO_VALUE);
2159
+ const newOptionDefault = (0, import_get14.default)(newKeyedSchema, "default", NO_VALUE);
2160
+ const oldOptionDefault = (0, import_get14.default)(oldKeyedSchema, "default", NO_VALUE);
2154
2161
  if (newOptionDefault !== NO_VALUE && newOptionDefault !== formValue) {
2155
2162
  if (oldOptionDefault === formValue) {
2156
2163
  removeOldSchemaData[key] = newOptionDefault;
2157
- } else if ((0, import_get13.default)(newKeyedSchema, "readOnly") === true) {
2164
+ } else if ((0, import_get14.default)(newKeyedSchema, "readOnly") === true) {
2158
2165
  removeOldSchemaData[key] = void 0;
2159
2166
  }
2160
2167
  }
2161
- const newOptionConst = (0, import_get13.default)(newKeyedSchema, "const", NO_VALUE);
2162
- const oldOptionConst = (0, import_get13.default)(oldKeyedSchema, "const", NO_VALUE);
2168
+ const newOptionConst = (0, import_get14.default)(newKeyedSchema, "const", NO_VALUE);
2169
+ const oldOptionConst = (0, import_get14.default)(oldKeyedSchema, "const", NO_VALUE);
2163
2170
  if (newOptionConst !== NO_VALUE && newOptionConst !== formValue) {
2164
2171
  removeOldSchemaData[key] = oldOptionConst === formValue ? newOptionConst : void 0;
2165
2172
  }
@@ -2171,9 +2178,9 @@ function sanitizeDataForNewSchema(validator, rootSchema, newSchema, oldSchema, d
2171
2178
  ...removeOldSchemaData,
2172
2179
  ...nestedData
2173
2180
  };
2174
- } else if ((0, import_get13.default)(oldSchema, "type") === "array" && (0, import_get13.default)(newSchema, "type") === "array" && Array.isArray(data)) {
2175
- let oldSchemaItems = (0, import_get13.default)(oldSchema, "items");
2176
- let newSchemaItems = (0, import_get13.default)(newSchema, "items");
2181
+ } else if ((0, import_get14.default)(oldSchema, "type") === "array" && (0, import_get14.default)(newSchema, "type") === "array" && Array.isArray(data)) {
2182
+ let oldSchemaItems = (0, import_get14.default)(oldSchema, "items");
2183
+ let newSchemaItems = (0, import_get14.default)(newSchema, "items");
2177
2184
  if (typeof oldSchemaItems === "object" && typeof newSchemaItems === "object" && !Array.isArray(oldSchemaItems) && !Array.isArray(newSchemaItems)) {
2178
2185
  if ((0, import_has5.default)(oldSchemaItems, REF_KEY)) {
2179
2186
  oldSchemaItems = retrieveSchema(
@@ -2193,10 +2200,10 @@ function sanitizeDataForNewSchema(validator, rootSchema, newSchema, oldSchema, d
2193
2200
  experimental_customMergeAllOf
2194
2201
  );
2195
2202
  }
2196
- const oldSchemaType = (0, import_get13.default)(oldSchemaItems, "type");
2197
- const newSchemaType = (0, import_get13.default)(newSchemaItems, "type");
2203
+ const oldSchemaType = (0, import_get14.default)(oldSchemaItems, "type");
2204
+ const newSchemaType = (0, import_get14.default)(newSchemaItems, "type");
2198
2205
  if (!oldSchemaType || oldSchemaType === newSchemaType) {
2199
- const maxItems = (0, import_get13.default)(newSchema, "maxItems", -1);
2206
+ const maxItems = (0, import_get14.default)(newSchema, "maxItems", -1);
2200
2207
  if (newSchemaType === "object") {
2201
2208
  newFormData = data.reduce((newValue, aValue) => {
2202
2209
  const itemValue = sanitizeDataForNewSchema(
@@ -2224,7 +2231,7 @@ function sanitizeDataForNewSchema(validator, rootSchema, newSchema, oldSchema, d
2224
2231
  }
2225
2232
 
2226
2233
  // src/schema/toPathSchema.ts
2227
- var import_get14 = __toESM(require("lodash/get"), 1);
2234
+ var import_get15 = __toESM(require("lodash/get"), 1);
2228
2235
  var import_set2 = __toESM(require("lodash/set"), 1);
2229
2236
  function toPathSchemaInternal(validator, schema, name, rootSchema, formData, _recurseList = [], experimental_customMergeAllOf) {
2230
2237
  if (REF_KEY in schema || DEPENDENCIES_KEY in schema || ALL_OF_KEY in schema) {
@@ -2317,7 +2324,7 @@ function toPathSchemaInternal(validator, schema, name, rootSchema, formData, _re
2317
2324
  }
2318
2325
  } else if (PROPERTIES_KEY in schema) {
2319
2326
  for (const property in schema.properties) {
2320
- const field = (0, import_get14.default)(schema, [PROPERTIES_KEY, property], {});
2327
+ const field = (0, import_get15.default)(schema, [PROPERTIES_KEY, property], {});
2321
2328
  pathSchema[property] = toPathSchemaInternal(
2322
2329
  validator,
2323
2330
  field,
@@ -2325,7 +2332,7 @@ function toPathSchemaInternal(validator, schema, name, rootSchema, formData, _re
2325
2332
  rootSchema,
2326
2333
  // It's possible that formData is not an object -- this can happen if an
2327
2334
  // array item has just been added, but not populated with data yet
2328
- (0, import_get14.default)(formData, [property]),
2335
+ (0, import_get15.default)(formData, [property]),
2329
2336
  _recurseList,
2330
2337
  experimental_customMergeAllOf
2331
2338
  );
@@ -2338,7 +2345,7 @@ function toPathSchema(validator, schema, name = "", rootSchema, formData, experi
2338
2345
  }
2339
2346
 
2340
2347
  // src/createSchemaUtils.ts
2341
- var import_get15 = __toESM(require("lodash/get"), 1);
2348
+ var import_get16 = __toESM(require("lodash/get"), 1);
2342
2349
  var SchemaUtils = class {
2343
2350
  /** Constructs the `SchemaUtils` instance with the given `validator` and `rootSchema` stored as instance variables
2344
2351
  *
@@ -2349,7 +2356,7 @@ var SchemaUtils = class {
2349
2356
  */
2350
2357
  constructor(validator, rootSchema, experimental_defaultFormStateBehavior, experimental_customMergeAllOf) {
2351
2358
  if (rootSchema && rootSchema[SCHEMA_KEY] === JSON_SCHEMA_DRAFT_2020_12) {
2352
- this.rootSchema = makeAllReferencesAbsolute(rootSchema, (0, import_get15.default)(rootSchema, ID_KEY, "#"));
2359
+ this.rootSchema = makeAllReferencesAbsolute(rootSchema, (0, import_get16.default)(rootSchema, ID_KEY, "#"));
2353
2360
  } else {
2354
2361
  this.rootSchema = rootSchema;
2355
2362
  }
@@ -2763,7 +2770,7 @@ function enumOptionsSelectValue(valueIndex, selected, allEnumOptions = []) {
2763
2770
 
2764
2771
  // src/ErrorSchemaBuilder.ts
2765
2772
  var import_cloneDeep = __toESM(require("lodash/cloneDeep"), 1);
2766
- var import_get16 = __toESM(require("lodash/get"), 1);
2773
+ var import_get17 = __toESM(require("lodash/get"), 1);
2767
2774
  var import_set3 = __toESM(require("lodash/set"), 1);
2768
2775
  var import_setWith = __toESM(require("lodash/setWith"), 1);
2769
2776
  var ErrorSchemaBuilder = class {
@@ -2792,7 +2799,7 @@ var ErrorSchemaBuilder = class {
2792
2799
  */
2793
2800
  getOrCreateErrorBlock(pathOfError) {
2794
2801
  const hasPath = Array.isArray(pathOfError) && pathOfError.length > 0 || typeof pathOfError === "string";
2795
- let errorBlock = hasPath ? (0, import_get16.default)(this.errorSchema, pathOfError) : this.errorSchema;
2802
+ let errorBlock = hasPath ? (0, import_get17.default)(this.errorSchema, pathOfError) : this.errorSchema;
2796
2803
  if (!errorBlock && pathOfError) {
2797
2804
  errorBlock = {};
2798
2805
  (0, import_setWith.default)(this.errorSchema, pathOfError, errorBlock, Object);
@@ -2818,7 +2825,7 @@ var ErrorSchemaBuilder = class {
2818
2825
  */
2819
2826
  addErrors(errorOrList, pathOfError) {
2820
2827
  const errorBlock = this.getOrCreateErrorBlock(pathOfError);
2821
- let errorsList = (0, import_get16.default)(errorBlock, ERRORS_KEY);
2828
+ let errorsList = (0, import_get17.default)(errorBlock, ERRORS_KEY);
2822
2829
  if (!Array.isArray(errorsList)) {
2823
2830
  errorsList = [];
2824
2831
  errorBlock[ERRORS_KEY] = errorsList;
@@ -2862,7 +2869,7 @@ var ErrorSchemaBuilder = class {
2862
2869
  var import_keys = __toESM(require("lodash/keys"), 1);
2863
2870
  var import_pickBy = __toESM(require("lodash/pickBy"), 1);
2864
2871
  var import_isPlainObject2 = __toESM(require("lodash/isPlainObject"), 1);
2865
- var import_get17 = __toESM(require("lodash/get"), 1);
2872
+ var import_get18 = __toESM(require("lodash/get"), 1);
2866
2873
  var import_difference = __toESM(require("lodash/difference"), 1);
2867
2874
  function getChangedFields(a, b) {
2868
2875
  const aIsPlainObject = (0, import_isPlainObject2.default)(a);
@@ -2875,7 +2882,7 @@ function getChangedFields(a, b) {
2875
2882
  } else if (!aIsPlainObject && bIsPlainObject) {
2876
2883
  return (0, import_keys.default)(b);
2877
2884
  } else {
2878
- const unequalFields = (0, import_keys.default)((0, import_pickBy.default)(a, (value, key) => !deepEquals(value, (0, import_get17.default)(b, key))));
2885
+ const unequalFields = (0, import_keys.default)((0, import_pickBy.default)(a, (value, key) => !deepEquals(value, (0, import_get18.default)(b, key))));
2879
2886
  const diffFields = (0, import_difference.default)((0, import_keys.default)(b), (0, import_keys.default)(a));
2880
2887
  return [...unequalFields, ...diffFields];
2881
2888
  }
@@ -2989,10 +2996,10 @@ function getTemplate(name, registry, uiOptions = {}) {
2989
2996
  }
2990
2997
 
2991
2998
  // src/getTestIds.ts
2992
- var import_get18 = __toESM(require("lodash/get"), 1);
2999
+ var import_get19 = __toESM(require("lodash/get"), 1);
2993
3000
  var import_uniqueId = __toESM(require("lodash/uniqueId"), 1);
2994
3001
  function getTestIds() {
2995
- if (typeof process === "undefined" || (0, import_get18.default)(process, "env.NODE_ENV") !== "test") {
3002
+ if (typeof process === "undefined" || (0, import_get19.default)(process, "env.NODE_ENV") !== "test") {
2996
3003
  return {};
2997
3004
  }
2998
3005
  const ids = /* @__PURE__ */ new Map();
@@ -3012,7 +3019,7 @@ function getTestIds() {
3012
3019
  // src/getWidget.tsx
3013
3020
  var import_react = require("react");
3014
3021
  var import_react_is = __toESM(require("react-is"), 1);
3015
- var import_get19 = __toESM(require("lodash/get"), 1);
3022
+ var import_get20 = __toESM(require("lodash/get"), 1);
3016
3023
  var import_set4 = __toESM(require("lodash/set"), 1);
3017
3024
  var import_jsx_runtime = require("react/jsx-runtime");
3018
3025
  var widgetMap = {
@@ -3068,7 +3075,7 @@ var widgetMap = {
3068
3075
  }
3069
3076
  };
3070
3077
  function mergeWidgetOptions(AWidget) {
3071
- let MergedWidget = (0, import_get19.default)(AWidget, "MergedWidget");
3078
+ let MergedWidget = (0, import_get20.default)(AWidget, "MergedWidget");
3072
3079
  if (!MergedWidget) {
3073
3080
  const defaultOptions = AWidget.defaultProps && AWidget.defaultProps.options || {};
3074
3081
  MergedWidget = ({ options, ...props }) => {
@@ -3206,14 +3213,14 @@ function localToUTC(dateString) {
3206
3213
  }
3207
3214
 
3208
3215
  // src/lookupFromFormContext.ts
3209
- var import_get20 = __toESM(require("lodash/get"), 1);
3216
+ var import_get21 = __toESM(require("lodash/get"), 1);
3210
3217
  var import_has6 = __toESM(require("lodash/has"), 1);
3211
3218
  function lookupFromFormContext(regOrFc, toLookup, fallback) {
3212
3219
  const lookupPath = [LOOKUP_MAP_NAME];
3213
3220
  if ((0, import_has6.default)(regOrFc, FORM_CONTEXT_NAME)) {
3214
3221
  lookupPath.unshift(FORM_CONTEXT_NAME);
3215
3222
  }
3216
- return (0, import_get20.default)(regOrFc, [...lookupPath, toLookup], fallback);
3223
+ return (0, import_get21.default)(regOrFc, [...lookupPath, toLookup], fallback);
3217
3224
  }
3218
3225
 
3219
3226
  // src/orderProperties.ts
@@ -3750,7 +3757,7 @@ var TranslatableString = /* @__PURE__ */ ((TranslatableString2) => {
3750
3757
  var import_forEach = __toESM(require("lodash/forEach"), 1);
3751
3758
 
3752
3759
  // src/parser/ParserValidator.ts
3753
- var import_get21 = __toESM(require("lodash/get"), 1);
3760
+ var import_get22 = __toESM(require("lodash/get"), 1);
3754
3761
  var ParserValidator = class {
3755
3762
  /** Construct the ParserValidator for the given `rootSchema`. This `rootSchema` will be stashed in the `schemaMap`
3756
3763
  * first.
@@ -3776,7 +3783,7 @@ var ParserValidator = class {
3776
3783
  * @param hash - The hash value at which to map the schema
3777
3784
  */
3778
3785
  addSchema(schema, hash) {
3779
- const key = (0, import_get21.default)(schema, ID_KEY, hash);
3786
+ const key = (0, import_get22.default)(schema, ID_KEY, hash);
3780
3787
  const identifiedSchema = { ...schema, [ID_KEY]: key };
3781
3788
  const existing = this.schemaMap[key];
3782
3789
  if (!existing) {