jsly 3.0.2 → 3.0.3

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.esm.js CHANGED
@@ -7349,39 +7349,47 @@ function toggleConvertCase(str) {
7349
7349
  }
7350
7350
 
7351
7351
  /**
7352
- * 递归转换对象或数组的键名格式
7353
- *
7354
- * @param {object|array} data - 需要转换的对象或数组
7355
- * @param {'camel'|'snake'} type - 指定目标格式:'camel' 转小驼峰;'snake' 转下划线
7356
- * @returns {object|array} - 转换后的新对象或数组
7352
+ * 转换对象的键名格式(支持可选递归)
7353
+ *
7354
+ * @param {object} obj - 需要转换的对象
7355
+ * @param {'camel'|'snake'} targetType - 目标格式:'camel' 转小驼峰;'snake' 转下划线
7356
+ * @param {boolean} [deep=false] - 是否递归转换(默认 false,仅转换首层)
7357
+ * @returns {object} - 转换后的新对象
7357
7358
  *
7358
7359
  * @example
7359
7360
  * convertKeys({ user_name: 'Tom', user_info: { phone_number: '123' } }, 'camel')
7361
+ * // => { userName: 'Tom', userInfo: { phone_number: '123' } }
7362
+ *
7363
+ * @example
7364
+ * convertKeys({ user_name: 'Tom', user_info: { phone_number: '123' } }, 'camel', true)
7360
7365
  * // => { userName: 'Tom', userInfo: { phoneNumber: '123' } }
7361
7366
  *
7362
7367
  * @example
7363
7368
  * convertKeys({ userName: 'Tom', userInfo: { phoneNumber: '123' } }, 'snake')
7369
+ * // => { user_name: 'Tom', user_info: { phoneNumber: '123' } }
7370
+ *
7371
+ * @example
7372
+ * convertKeys({ userName: 'Tom', userInfo: { phoneNumber: '123' } }, 'snake', true)
7364
7373
  * // => { user_name: 'Tom', user_info: { phone_number: '123' } }
7365
7374
  */
7366
- function convertKeys(data, type = 'camel') {
7367
- if (data === null || typeof data !== 'object') {
7368
- return data; // 原始类型直接返回
7375
+ function convertKeys(obj, targetType = 'camel', deep = false) {
7376
+ if (obj === null || typeof obj !== 'object' || Array.isArray(obj)) {
7377
+ throw new Error('convertKeys 仅支持对象类型');
7369
7378
  }
7370
- if (!['camel', 'snake'].includes(type)) {
7371
- throw new Error("convertKeys type must be 'camel' or 'snake'.");
7379
+ if (!['camel', 'snake'].includes(targetType)) {
7380
+ throw new Error("convertKeys targetType 必须是 'camel' 'snake'");
7372
7381
  }
7382
+ const result = {};
7383
+ for (const [key, value] of Object.entries(obj)) {
7384
+ const newKey = targetType === 'camel' ? snakeToCamel(key) : camelToSnake(key);
7373
7385
 
7374
- // 处理数组
7375
- if (Array.isArray(data)) {
7376
- return data.map(item => convertKeys(item, type));
7386
+ // 如果开启递归并且值是对象,则递归转换
7387
+ if (deep && value && typeof value === 'object' && !Array.isArray(value)) {
7388
+ result[newKey] = convertKeys(value, targetType, deep);
7389
+ } else {
7390
+ result[newKey] = value;
7391
+ }
7377
7392
  }
7378
-
7379
- // 处理对象
7380
- const result = {};
7381
- Object.entries(data).forEach(([key, value]) => {
7382
- const newKey = type === 'camel' ? snakeToCamel(key) : camelToSnake(key);
7383
- result[newKey] = convertKeys(value, type);
7384
- });
7385
7393
  return result;
7386
7394
  }
7387
7395