@pixpilot/object 2.3.0 → 2.4.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/README.md
CHANGED
|
@@ -25,6 +25,10 @@ const obj = { user_name: 'john', user_details: { first_name: 'John' } };
|
|
|
25
25
|
const camelCaseObj = keysToCamelCase(obj);
|
|
26
26
|
// { userName: 'john', userDetails: { firstName: 'John' } }
|
|
27
27
|
|
|
28
|
+
const guidSafeObj = keysToCamelCase(obj, {
|
|
29
|
+
shouldConvert: (key) => key !== 'legacy_key',
|
|
30
|
+
});
|
|
31
|
+
|
|
28
32
|
// Manipulate objects
|
|
29
33
|
const picked = pick({ a: 1, b: 2, c: 3 }, ['a', 'c']); // { a: 1, c: 3 }
|
|
30
34
|
const omitted = omit({ a: 1, b: 2, c: 3 }, ['b']); // { a: 1, c: 3 }
|
|
@@ -48,7 +52,7 @@ if (isObject(value)) {
|
|
|
48
52
|
|
|
49
53
|
### Key Transformation
|
|
50
54
|
|
|
51
|
-
- `keysToCamelCase<T>(obj: T): KeysToCamelCase<T>` - Convert
|
|
55
|
+
- `keysToCamelCase<T>(obj: T, options?: { shouldConvert?: (key: string) => boolean }): KeysToCamelCase<T>` - Convert keys to camelCase, except GUID keys and keys rejected by `shouldConvert`
|
|
52
56
|
- `keysToSnakeCase<T>(obj: T): KeysToSnakeCase<T>` - Convert all keys to snake_case
|
|
53
57
|
|
|
54
58
|
### Object Manipulation
|
package/dist/index.d.cts
CHANGED
|
@@ -3,9 +3,9 @@ import { deepMerge, deepMergeMany } from "./deep-merge.cjs";
|
|
|
3
3
|
import { deleteObjectPropertyByPath as deleteProperty } from "./delete-object-property-by-path.cjs";
|
|
4
4
|
import { getObjectValueByPath as getProperty } from "./get-object-value-by-path.cjs";
|
|
5
5
|
import { hasObjectValueByPath as hasProperty } from "./has-object-value-by-path.cjs";
|
|
6
|
-
import { KeysToCamelCase, ToCamelCase, keysToCamelCase } from "./keys-to-camel-case.cjs";
|
|
6
|
+
import { KeysToCamelCase, KeysToCamelCaseOptions, ToCamelCase, keysToCamelCase } from "./keys-to-camel-case.cjs";
|
|
7
7
|
import { KeysToSnakeCase, ToSnakeCase, keysToSnakeCase } from "./keys-to-snake-case.cjs";
|
|
8
8
|
import { deepClone, deepEqual, deleteProperty as deleteProperty$1, escapePath, flatKeys, getProperty as getProperty$1, hasProperty as hasProperty$1, mapKeys, mapValues, omit, parsePath, pick, setProperty, stringifyPath, unflatten } from "./manipulation.cjs";
|
|
9
9
|
import { setObjectValueByPath } from "./set-object-value-by-path.cjs";
|
|
10
10
|
import { isEmptyObject, isObject, isPlainObject } from "./type-guards.cjs";
|
|
11
|
-
export { CleanOptions, KeysToCamelCase, KeysToSnakeCase, ToCamelCase, ToSnakeCase, cleanObject, deepClone, deepEqual, deepMerge, deepMergeMany, deleteProperty as deleteObjectPropertyByPath, deleteProperty$1 as deleteProperty, escapePath, flatKeys, getProperty as getObjectValueByPath, getProperty$1 as getProperty, hasProperty as hasObjectValueByPath, hasProperty$1 as hasProperty, isEmptyObject, isObject, isPlainObject, keysToCamelCase, keysToSnakeCase, mapKeys, mapValues, omit, parsePath, pick, setObjectValueByPath, setProperty, stringifyPath, unflatten };
|
|
11
|
+
export { CleanOptions, KeysToCamelCase, KeysToCamelCaseOptions, KeysToSnakeCase, ToCamelCase, ToSnakeCase, cleanObject, deepClone, deepEqual, deepMerge, deepMergeMany, deleteProperty as deleteObjectPropertyByPath, deleteProperty$1 as deleteProperty, escapePath, flatKeys, getProperty as getObjectValueByPath, getProperty$1 as getProperty, hasProperty as hasObjectValueByPath, hasProperty$1 as hasProperty, isEmptyObject, isObject, isPlainObject, keysToCamelCase, keysToSnakeCase, mapKeys, mapValues, omit, parsePath, pick, setObjectValueByPath, setProperty, stringifyPath, unflatten };
|
package/dist/index.d.ts
CHANGED
|
@@ -3,9 +3,9 @@ import { deepMerge, deepMergeMany } from "./deep-merge.js";
|
|
|
3
3
|
import { deleteObjectPropertyByPath as deleteProperty } from "./delete-object-property-by-path.js";
|
|
4
4
|
import { getObjectValueByPath as getProperty } from "./get-object-value-by-path.js";
|
|
5
5
|
import { hasObjectValueByPath as hasProperty } from "./has-object-value-by-path.js";
|
|
6
|
-
import { KeysToCamelCase, ToCamelCase, keysToCamelCase } from "./keys-to-camel-case.js";
|
|
6
|
+
import { KeysToCamelCase, KeysToCamelCaseOptions, ToCamelCase, keysToCamelCase } from "./keys-to-camel-case.js";
|
|
7
7
|
import { KeysToSnakeCase, ToSnakeCase, keysToSnakeCase } from "./keys-to-snake-case.js";
|
|
8
8
|
import { deepClone, deepEqual, deleteProperty as deleteProperty$1, escapePath, flatKeys, getProperty as getProperty$1, hasProperty as hasProperty$1, mapKeys, mapValues, omit, parsePath, pick, setProperty, stringifyPath, unflatten } from "./manipulation.js";
|
|
9
9
|
import { setObjectValueByPath } from "./set-object-value-by-path.js";
|
|
10
10
|
import { isEmptyObject, isObject, isPlainObject } from "./type-guards.js";
|
|
11
|
-
export { CleanOptions, KeysToCamelCase, KeysToSnakeCase, ToCamelCase, ToSnakeCase, cleanObject, deepClone, deepEqual, deepMerge, deepMergeMany, deleteProperty as deleteObjectPropertyByPath, deleteProperty$1 as deleteProperty, escapePath, flatKeys, getProperty as getObjectValueByPath, getProperty$1 as getProperty, hasProperty as hasObjectValueByPath, hasProperty$1 as hasProperty, isEmptyObject, isObject, isPlainObject, keysToCamelCase, keysToSnakeCase, mapKeys, mapValues, omit, parsePath, pick, setObjectValueByPath, setProperty, stringifyPath, unflatten };
|
|
11
|
+
export { CleanOptions, KeysToCamelCase, KeysToCamelCaseOptions, KeysToSnakeCase, ToCamelCase, ToSnakeCase, cleanObject, deepClone, deepEqual, deepMerge, deepMergeMany, deleteProperty as deleteObjectPropertyByPath, deleteProperty$1 as deleteProperty, escapePath, flatKeys, getProperty as getObjectValueByPath, getProperty$1 as getProperty, hasProperty as hasObjectValueByPath, hasProperty$1 as hasProperty, isEmptyObject, isObject, isPlainObject, keysToCamelCase, keysToSnakeCase, mapKeys, mapValues, omit, parsePath, pick, setObjectValueByPath, setProperty, stringifyPath, unflatten };
|
|
@@ -1,15 +1,21 @@
|
|
|
1
1
|
const require_rolldown_runtime = require('./_virtual/rolldown_runtime.cjs');
|
|
2
|
+
let __pixpilot_guid = require("@pixpilot/guid");
|
|
3
|
+
__pixpilot_guid = require_rolldown_runtime.__toESM(__pixpilot_guid);
|
|
2
4
|
let __pixpilot_string = require("@pixpilot/string");
|
|
3
5
|
__pixpilot_string = require_rolldown_runtime.__toESM(__pixpilot_string);
|
|
4
6
|
|
|
5
7
|
//#region src/keys-to-camel-case.ts
|
|
6
|
-
function
|
|
7
|
-
if (
|
|
8
|
+
function shouldConvertKey(key, options) {
|
|
9
|
+
if ((0, __pixpilot_guid.isGuidString)(key)) return false;
|
|
10
|
+
return options?.shouldConvert?.(key) !== false;
|
|
11
|
+
}
|
|
12
|
+
function keysToCamelCase(obj, options) {
|
|
13
|
+
if (Array.isArray(obj)) return obj.map((value) => keysToCamelCase(value, options));
|
|
8
14
|
if (obj === null || typeof obj !== "object") return obj;
|
|
9
15
|
const result = {};
|
|
10
16
|
for (const [key, value] of Object.entries(obj)) {
|
|
11
|
-
const camelKey = (0, __pixpilot_string.toCamelCase)(key);
|
|
12
|
-
result[camelKey] = keysToCamelCase(value);
|
|
17
|
+
const camelKey = shouldConvertKey(key, options) ? (0, __pixpilot_string.toCamelCase)(key) : key;
|
|
18
|
+
result[camelKey] = keysToCamelCase(value, options);
|
|
13
19
|
}
|
|
14
20
|
return result;
|
|
15
21
|
}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
//#region src/keys-to-camel-case.d.ts
|
|
2
|
+
interface KeysToCamelCaseOptions {
|
|
3
|
+
shouldConvert?: (key: string) => boolean;
|
|
4
|
+
}
|
|
2
5
|
type CamelizeSegment<S extends string> = S extends '' ? '' : Capitalize<Lowercase<S>>;
|
|
3
6
|
/**
|
|
4
7
|
* Convert snake_case to camelCase at the type level.
|
|
@@ -12,6 +15,6 @@ type ToCamelCase<S extends string, IsFirst extends boolean = true> = S extends `
|
|
|
12
15
|
type Builtin = Date | RegExp | Map<unknown, unknown> | Set<unknown> | WeakMap<object, unknown> | WeakSet<object>;
|
|
13
16
|
type TupleToCamelCase<T extends readonly unknown[]> = { [I in keyof T]: KeysToCamelCase<T[I]> };
|
|
14
17
|
type KeysToCamelCase<T> = T extends Builtin ? T : T extends ((...args: unknown[]) => unknown) ? T : T extends readonly unknown[] ? number extends T['length'] ? KeysToCamelCase<T[number]>[] : TupleToCamelCase<T> : T extends object ? { [K in keyof T as K extends string ? ToCamelCase<K> : K]: KeysToCamelCase<T[K]> } : T;
|
|
15
|
-
declare function keysToCamelCase<T>(obj: T): KeysToCamelCase<T>;
|
|
18
|
+
declare function keysToCamelCase<T>(obj: T, options?: KeysToCamelCaseOptions): KeysToCamelCase<T>;
|
|
16
19
|
//#endregion
|
|
17
|
-
export { KeysToCamelCase, ToCamelCase, keysToCamelCase };
|
|
20
|
+
export { KeysToCamelCase, KeysToCamelCaseOptions, ToCamelCase, keysToCamelCase };
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
//#region src/keys-to-camel-case.d.ts
|
|
2
|
+
interface KeysToCamelCaseOptions {
|
|
3
|
+
shouldConvert?: (key: string) => boolean;
|
|
4
|
+
}
|
|
2
5
|
type CamelizeSegment<S extends string> = S extends '' ? '' : Capitalize<Lowercase<S>>;
|
|
3
6
|
/**
|
|
4
7
|
* Convert snake_case to camelCase at the type level.
|
|
@@ -12,6 +15,6 @@ type ToCamelCase<S extends string, IsFirst extends boolean = true> = S extends `
|
|
|
12
15
|
type Builtin = Date | RegExp | Map<unknown, unknown> | Set<unknown> | WeakMap<object, unknown> | WeakSet<object>;
|
|
13
16
|
type TupleToCamelCase<T extends readonly unknown[]> = { [I in keyof T]: KeysToCamelCase<T[I]> };
|
|
14
17
|
type KeysToCamelCase<T> = T extends Builtin ? T : T extends ((...args: unknown[]) => unknown) ? T : T extends readonly unknown[] ? number extends T['length'] ? KeysToCamelCase<T[number]>[] : TupleToCamelCase<T> : T extends object ? { [K in keyof T as K extends string ? ToCamelCase<K> : K]: KeysToCamelCase<T[K]> } : T;
|
|
15
|
-
declare function keysToCamelCase<T>(obj: T): KeysToCamelCase<T>;
|
|
18
|
+
declare function keysToCamelCase<T>(obj: T, options?: KeysToCamelCaseOptions): KeysToCamelCase<T>;
|
|
16
19
|
//#endregion
|
|
17
|
-
export { KeysToCamelCase, ToCamelCase, keysToCamelCase };
|
|
20
|
+
export { KeysToCamelCase, KeysToCamelCaseOptions, ToCamelCase, keysToCamelCase };
|
|
@@ -1,13 +1,18 @@
|
|
|
1
|
+
import { isGuidString } from "@pixpilot/guid";
|
|
1
2
|
import { toCamelCase } from "@pixpilot/string";
|
|
2
3
|
|
|
3
4
|
//#region src/keys-to-camel-case.ts
|
|
4
|
-
function
|
|
5
|
-
if (
|
|
5
|
+
function shouldConvertKey(key, options) {
|
|
6
|
+
if (isGuidString(key)) return false;
|
|
7
|
+
return options?.shouldConvert?.(key) !== false;
|
|
8
|
+
}
|
|
9
|
+
function keysToCamelCase(obj, options) {
|
|
10
|
+
if (Array.isArray(obj)) return obj.map((value) => keysToCamelCase(value, options));
|
|
6
11
|
if (obj === null || typeof obj !== "object") return obj;
|
|
7
12
|
const result = {};
|
|
8
13
|
for (const [key, value] of Object.entries(obj)) {
|
|
9
|
-
const camelKey = toCamelCase(key);
|
|
10
|
-
result[camelKey] = keysToCamelCase(value);
|
|
14
|
+
const camelKey = shouldConvertKey(key, options) ? toCamelCase(key) : key;
|
|
15
|
+
result[camelKey] = keysToCamelCase(value, options);
|
|
11
16
|
}
|
|
12
17
|
return result;
|
|
13
18
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pixpilot/object",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "2.
|
|
4
|
+
"version": "2.4.1",
|
|
5
5
|
"description": "A collection of utility functions for object manipulation and transformation.",
|
|
6
6
|
"author": "Pixpilot <m.doaie@hotmail.com>",
|
|
7
7
|
"license": "MIT",
|
|
@@ -27,7 +27,8 @@
|
|
|
27
27
|
"dependencies": {
|
|
28
28
|
"@fastify/deepmerge": "^3.1.0",
|
|
29
29
|
"dot-prop": "^10.1.0",
|
|
30
|
-
"@pixpilot/
|
|
30
|
+
"@pixpilot/guid": "0.0.0",
|
|
31
|
+
"@pixpilot/string": "2.5.0"
|
|
31
32
|
},
|
|
32
33
|
"devDependencies": {
|
|
33
34
|
"@manypkg/get-packages": "^3.1.0",
|
|
@@ -35,9 +36,9 @@
|
|
|
35
36
|
"eslint": "^9.37.0",
|
|
36
37
|
"tsdown": "^0.15.8",
|
|
37
38
|
"typescript": "^5.9.3",
|
|
39
|
+
"@internal/eslint-config": "0.3.0",
|
|
38
40
|
"@internal/prettier-config": "0.0.1",
|
|
39
41
|
"@internal/tsconfig": "0.1.0",
|
|
40
|
-
"@internal/eslint-config": "0.3.0",
|
|
41
42
|
"@internal/tsdown-config": "0.1.0",
|
|
42
43
|
"@internal/vitest-config": "0.1.0"
|
|
43
44
|
},
|