@pixpilot/object 1.1.5 → 1.1.10
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/_virtual/rolldown_runtime.cjs +1 -0
- package/dist/deep-merge.cjs +1 -0
- package/dist/deep-merge.d.cts +35 -0
- package/dist/deep-merge.d.ts +35 -0
- package/dist/deep-merge.js +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +6 -0
- package/dist/index.d.ts +6 -4
- package/dist/index.js +1 -1
- package/dist/keys-to-camel-case.cjs +1 -0
- package/dist/keys-to-camel-case.d.cts +6 -0
- package/dist/keys-to-camel-case.d.ts +6 -5
- package/dist/keys-to-camel-case.js +1 -0
- package/dist/keys-to-snake-case.cjs +1 -0
- package/dist/keys-to-snake-case.d.cts +9 -0
- package/dist/keys-to-snake-case.d.ts +6 -5
- package/dist/keys-to-snake-case.js +1 -0
- package/dist/manipulation.cjs +1 -0
- package/dist/manipulation.d.cts +148 -0
- package/dist/manipulation.d.ts +13 -60
- package/dist/manipulation.js +1 -0
- package/dist/type-guards.cjs +1 -0
- package/dist/type-guards.d.cts +49 -0
- package/dist/type-guards.d.ts +6 -3
- package/dist/type-guards.js +1 -0
- package/package.json +8 -8
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,a)=>(a=n==null?{}:e(i(n)),o(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));exports.__toESM=s;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const e=require(`./_virtual/rolldown_runtime.cjs`);let t=require(`@fastify/deepmerge`);t=e.__toESM(t);let n=null;function r(){return n||=(0,t.default)(),n}function i(...e){if(e.length===0)return{};if(e.length===1)return e[0]??{};let t={};for(let n of e)t=r()(t,n);return t}function a(e,t){return r()(e,t)}exports.deepMerge=a,exports.deepMergeMany=i;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
//#region src/deep-merge.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Deep merge multiple objects.
|
|
4
|
+
*
|
|
5
|
+
* Uses @fastify/deepmerge to merge any number of objects into a single result.
|
|
6
|
+
* Objects are merged from left to right, with later objects overriding earlier ones.
|
|
7
|
+
*
|
|
8
|
+
* @param objects - The objects to merge
|
|
9
|
+
* @returns A new merged object
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* const obj1 = { a: 1, b: { c: 2 } };
|
|
14
|
+
* const obj2 = { b: { d: 3 }, e: 4 };
|
|
15
|
+
* const obj3 = { e: 5, f: 6 };
|
|
16
|
+
* deepMergeMany(obj1, obj2, obj3); // { a: 1, b: { c: 2, d: 3 }, e: 5, f: 6 }
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
declare function deepMergeMany<T extends Record<string, unknown>>(...objects: T[]): Record<string, unknown>;
|
|
20
|
+
/**
|
|
21
|
+
* Re-export the configured deepmerge instance from @fastify/deepmerge.
|
|
22
|
+
*
|
|
23
|
+
* This provides direct access to the deepmerge function for advanced use cases,
|
|
24
|
+
* allowing merging of multiple objects and custom options.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```typescript
|
|
28
|
+
* import { deepmerge } from '@pixpilot/object';
|
|
29
|
+
* const result = deepmerge({ a: 1 }, { b: 2 }, { c: 3 });
|
|
30
|
+
* // { a: 1, b: 2, c: 3 }
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
declare function deepMerge<T extends Record<string, unknown>, U extends Record<string, unknown>>(target: T, source: U): T & U;
|
|
34
|
+
//#endregion
|
|
35
|
+
export { deepMerge, deepMergeMany };
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
//#region src/deep-merge.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Deep merge multiple objects.
|
|
4
|
+
*
|
|
5
|
+
* Uses @fastify/deepmerge to merge any number of objects into a single result.
|
|
6
|
+
* Objects are merged from left to right, with later objects overriding earlier ones.
|
|
7
|
+
*
|
|
8
|
+
* @param objects - The objects to merge
|
|
9
|
+
* @returns A new merged object
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* const obj1 = { a: 1, b: { c: 2 } };
|
|
14
|
+
* const obj2 = { b: { d: 3 }, e: 4 };
|
|
15
|
+
* const obj3 = { e: 5, f: 6 };
|
|
16
|
+
* deepMergeMany(obj1, obj2, obj3); // { a: 1, b: { c: 2, d: 3 }, e: 5, f: 6 }
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
declare function deepMergeMany<T extends Record<string, unknown>>(...objects: T[]): Record<string, unknown>;
|
|
20
|
+
/**
|
|
21
|
+
* Re-export the configured deepmerge instance from @fastify/deepmerge.
|
|
22
|
+
*
|
|
23
|
+
* This provides direct access to the deepmerge function for advanced use cases,
|
|
24
|
+
* allowing merging of multiple objects and custom options.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```typescript
|
|
28
|
+
* import { deepmerge } from '@pixpilot/object';
|
|
29
|
+
* const result = deepmerge({ a: 1 }, { b: 2 }, { c: 3 });
|
|
30
|
+
* // { a: 1, b: 2, c: 3 }
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
declare function deepMerge<T extends Record<string, unknown>, U extends Record<string, unknown>>(target: T, source: U): T & U;
|
|
34
|
+
//#endregion
|
|
35
|
+
export { deepMerge, deepMergeMany };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import e from"@fastify/deepmerge";let t=null;function n(){return t||=e(),t}function r(...e){if(e.length===0)return{};if(e.length===1)return e[0]??{};let t={};for(let r of e)t=n()(t,r);return t}function i(e,t){return n()(e,t)}export{i as deepMerge,r as deepMergeMany};
|
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
const e=require(`./deep-merge.cjs`),t=require(`./keys-to-camel-case.cjs`),n=require(`./keys-to-snake-case.cjs`),r=require(`./type-guards.cjs`),i=require(`./manipulation.cjs`);exports.deepClone=i.deepClone,exports.deepEqual=i.deepEqual,exports.deepMerge=e.deepMerge,exports.deepMergeMany=e.deepMergeMany,exports.flatKeys=i.flatKeys,exports.get=i.get,exports.has=i.has,exports.isEmptyObject=r.isEmptyObject,exports.isObject=r.isObject,exports.isPlainObject=r.isPlainObject,exports.keysToCamelCase=t.keysToCamelCase,exports.keysToSnakeCase=n.keysToSnakeCase,exports.mapKeys=i.mapKeys,exports.mapValues=i.mapValues,exports.omit=i.omit,exports.pick=i.pick,exports.set=i.set;
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { deepMerge, deepMergeMany } from "./deep-merge.cjs";
|
|
2
|
+
import { KeysToCamelCase, ToCamelCase, keysToCamelCase } from "./keys-to-camel-case.cjs";
|
|
3
|
+
import { KeysToSnakeCase, ToSnakeCase, keysToSnakeCase } from "./keys-to-snake-case.cjs";
|
|
4
|
+
import { deepClone, deepEqual, flatKeys, get, has, mapKeys, mapValues, omit, pick, set } from "./manipulation.cjs";
|
|
5
|
+
import { isEmptyObject, isObject, isPlainObject } from "./type-guards.cjs";
|
|
6
|
+
export { KeysToCamelCase, KeysToSnakeCase, ToCamelCase, ToSnakeCase, deepClone, deepEqual, deepMerge, deepMergeMany, flatKeys, get, has, isEmptyObject, isObject, isPlainObject, keysToCamelCase, keysToSnakeCase, mapKeys, mapValues, omit, pick, set };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { deepMerge, deepMergeMany } from "./deep-merge.js";
|
|
2
|
+
import { KeysToCamelCase, ToCamelCase, keysToCamelCase } from "./keys-to-camel-case.js";
|
|
3
|
+
import { KeysToSnakeCase, ToSnakeCase, keysToSnakeCase } from "./keys-to-snake-case.js";
|
|
4
|
+
import { deepClone, deepEqual, flatKeys, get, has, mapKeys, mapValues, omit, pick, set } from "./manipulation.js";
|
|
5
|
+
import { isEmptyObject, isObject, isPlainObject } from "./type-guards.js";
|
|
6
|
+
export { KeysToCamelCase, KeysToSnakeCase, ToCamelCase, ToSnakeCase, deepClone, deepEqual, deepMerge, deepMergeMany, flatKeys, get, has, isEmptyObject, isObject, isPlainObject, keysToCamelCase, keysToSnakeCase, mapKeys, mapValues, omit, pick, set };
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
import{deepMerge as e,deepMergeMany as t}from"./deep-merge.js";import{keysToCamelCase as n}from"./keys-to-camel-case.js";import{keysToSnakeCase as r}from"./keys-to-snake-case.js";import{isEmptyObject as i,isObject as a,isPlainObject as o}from"./type-guards.js";import{deepClone as s,deepEqual as c,flatKeys as l,get as u,has as d,mapKeys as f,mapValues as p,omit as m,pick as h,set as g}from"./manipulation.js";export{s as deepClone,c as deepEqual,e as deepMerge,t as deepMergeMany,l as flatKeys,u as get,d as has,i as isEmptyObject,a as isObject,o as isPlainObject,n as keysToCamelCase,r as keysToSnakeCase,f as mapKeys,p as mapValues,m as omit,h as pick,g as set};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const e=require(`./_virtual/rolldown_runtime.cjs`);let t=require(`@pixpilot/string`);t=e.__toESM(t);function n(e){if(Array.isArray(e))return e.map(n);if(typeof e!=`object`||!e)return e;let r={};for(let[i,a]of Object.entries(e)){let e=(0,t.toCamelCase)(i);r[e]=n(a)}return r}exports.keysToCamelCase=n;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
//#region src/keys-to-camel-case.d.ts
|
|
2
|
+
type ToCamelCase<S extends string> = S extends `${infer P1}_${infer P2}${infer P3}` ? `${P1}${Uppercase<P2>}${ToCamelCase<P3>}` : S;
|
|
3
|
+
type KeysToCamelCase<T> = { [K in keyof T as ToCamelCase<string & K>]: T[K] extends Record<string, unknown> ? KeysToCamelCase<T[K]> : T[K] extends readonly (infer U)[] ? U extends Record<string, unknown> ? readonly KeysToCamelCase<U>[] : T[K] : T[K] };
|
|
4
|
+
declare function keysToCamelCase<T>(obj: T): T extends Record<string, unknown> ? KeysToCamelCase<T> : T;
|
|
5
|
+
//#endregion
|
|
6
|
+
export { KeysToCamelCase, ToCamelCase, keysToCamelCase };
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
//#region src/keys-to-camel-case.d.ts
|
|
2
|
+
type ToCamelCase<S extends string> = S extends `${infer P1}_${infer P2}${infer P3}` ? `${P1}${Uppercase<P2>}${ToCamelCase<P3>}` : S;
|
|
3
|
+
type KeysToCamelCase<T> = { [K in keyof T as ToCamelCase<string & K>]: T[K] extends Record<string, unknown> ? KeysToCamelCase<T[K]> : T[K] extends readonly (infer U)[] ? U extends Record<string, unknown> ? readonly KeysToCamelCase<U>[] : T[K] : T[K] };
|
|
4
|
+
declare function keysToCamelCase<T>(obj: T): T extends Record<string, unknown> ? KeysToCamelCase<T> : T;
|
|
5
|
+
//#endregion
|
|
6
|
+
export { KeysToCamelCase, ToCamelCase, keysToCamelCase };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{toCamelCase as e}from"@pixpilot/string";function t(n){if(Array.isArray(n))return n.map(t);if(typeof n!=`object`||!n)return n;let r={};for(let[i,a]of Object.entries(n)){let n=e(i);r[n]=t(a)}return r}export{t as keysToCamelCase};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const e=require(`./_virtual/rolldown_runtime.cjs`);let t=require(`@pixpilot/string`);t=e.__toESM(t);function n(e){if(Array.isArray(e))return e.map(n);if(typeof e!=`object`||!e)return e;let r={};for(let[i,a]of Object.entries(e)){let e=(0,t.toSnakeCase)(i);r[e]=n(a)}return r}exports.keysToSnakeCase=n;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
//#region src/keys-to-snake-case.d.ts
|
|
2
|
+
type ToSnakeCase<S extends string> = S extends `${infer T}${infer U}` ? `${T extends Uppercase<T> ? '_' : ''}${Lowercase<T>}${ToSnakeCase<U>}` : S;
|
|
3
|
+
type KeysToSnakeCase<T$1> = { [K in keyof T$1 as ToSnakeCase<string & K>]: T$1[K] extends Record<string, unknown> ? KeysToSnakeCase<T$1[K]> : T$1[K] extends readonly (infer U)[] ? U extends Record<string, unknown> ? readonly KeysToSnakeCase<U>[] : T$1[K] : T$1[K] };
|
|
4
|
+
/**
|
|
5
|
+
* Converts object keys from camelCase to snake_case recursively
|
|
6
|
+
*/
|
|
7
|
+
declare function keysToSnakeCase<T$1>(obj: T$1): T$1 extends Record<string, unknown> ? KeysToSnakeCase<T$1> : T$1;
|
|
8
|
+
//#endregion
|
|
9
|
+
export { KeysToSnakeCase, ToSnakeCase, keysToSnakeCase };
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
};
|
|
1
|
+
//#region src/keys-to-snake-case.d.ts
|
|
2
|
+
type ToSnakeCase<S extends string> = S extends `${infer T}${infer U}` ? `${T extends Uppercase<T> ? '_' : ''}${Lowercase<T>}${ToSnakeCase<U>}` : S;
|
|
3
|
+
type KeysToSnakeCase<T$1> = { [K in keyof T$1 as ToSnakeCase<string & K>]: T$1[K] extends Record<string, unknown> ? KeysToSnakeCase<T$1[K]> : T$1[K] extends readonly (infer U)[] ? U extends Record<string, unknown> ? readonly KeysToSnakeCase<U>[] : T$1[K] : T$1[K] };
|
|
5
4
|
/**
|
|
6
5
|
* Converts object keys from camelCase to snake_case recursively
|
|
7
6
|
*/
|
|
8
|
-
|
|
7
|
+
declare function keysToSnakeCase<T$1>(obj: T$1): T$1 extends Record<string, unknown> ? KeysToSnakeCase<T$1> : T$1;
|
|
8
|
+
//#endregion
|
|
9
|
+
export { KeysToSnakeCase, ToSnakeCase, keysToSnakeCase };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{toSnakeCase as e}from"@pixpilot/string";function t(n){if(Array.isArray(n))return n.map(t);if(typeof n!=`object`||!n)return n;let r={};for(let[i,a]of Object.entries(n)){let n=e(i);r[n]=t(a)}return r}export{t as keysToSnakeCase};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const e=require(`./type-guards.cjs`);function t(e,t){let n={};for(let r of t)r in e&&(n[r]=e[r]);return n}function n(e,t){let n={...e};for(let e of t)delete n[e];return n}function r(e,t,n){let r=t.split(`.`),i=e;for(let e of r)if(typeof i==`object`&&i&&e in i)i=i[e];else return n;return i}function i(t,n,r){let i=n.split(`.`),a=i.pop();if(a==null||a.length===0)return t;let o=t;for(let t of i)(!(t in o)||!e.isObject(o[t]))&&(o[t]={}),o=o[t];return o[a]=r,t}function a(e,t){let n=t.split(`.`),r=e;for(let e of n)if(typeof r==`object`&&r&&e in r)r=r[e];else return!1;return!0}function o(t,n=``){let r=[];for(let[i,a]of Object.entries(t)){let t=n?`${n}.${i}`:i;e.isObject(a)?r.push(...o(a,t)):r.push(t)}return r}function s(e){if(typeof e!=`object`||!e)return e;if(e instanceof Date)return new Date(e.getTime());if(e instanceof RegExp)return new RegExp(e.source,e.flags);if(Array.isArray(e))return e.map(e=>s(e));let t={};for(let[n,r]of Object.entries(e))t[n]=s(r);return t}function c(e,t){if(e===t)return!0;if(typeof e!=typeof t||e===null||t===null)return!1;if(e instanceof Date&&t instanceof Date)return e.getTime()===t.getTime();if(Array.isArray(e)&&Array.isArray(t))return e.length===t.length?e.every((e,n)=>c(e,t[n])):!1;if(typeof e==`object`&&typeof t==`object`){let n=Object.keys(e),r=Object.keys(t);return n.length===r.length?n.every(n=>c(e[n],t[n])):!1}return!1}function l(e,t){let n={};for(let[r,i]of Object.entries(e))n[r]=t(i,r);return n}function u(e,t){let n={};for(let[r,i]of Object.entries(e)){let e=t(r);n[e]=i}return n}exports.deepClone=s,exports.deepEqual=c,exports.flatKeys=o,exports.get=r,exports.has=a,exports.mapKeys=u,exports.mapValues=l,exports.omit=n,exports.pick=t,exports.set=i;
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
//#region src/manipulation.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Pick specific keys from an object.
|
|
4
|
+
*
|
|
5
|
+
* @param obj - The source object
|
|
6
|
+
* @param keys - The keys to pick
|
|
7
|
+
* @returns A new object with only the specified keys
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* const obj = { a: 1, b: 2, c: 3 };
|
|
12
|
+
* pick(obj, ['a', 'c']); // { a: 1, c: 3 }
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
declare function pick<T extends Record<string, unknown>, K extends keyof T>(obj: T, keys: readonly K[]): Pick<T, K>;
|
|
16
|
+
/**
|
|
17
|
+
* Omit specific keys from an object.
|
|
18
|
+
*
|
|
19
|
+
* @param obj - The source object
|
|
20
|
+
* @param keys - The keys to omit
|
|
21
|
+
* @returns A new object without the specified keys
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```typescript
|
|
25
|
+
* const obj = { a: 1, b: 2, c: 3 };
|
|
26
|
+
* omit(obj, ['b']); // { a: 1, c: 3 }
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
declare function omit<T extends Record<string, unknown>, K extends keyof T>(obj: T, keys: readonly K[]): Omit<T, K>;
|
|
30
|
+
/**
|
|
31
|
+
* Get a nested value from an object using a path string.
|
|
32
|
+
*
|
|
33
|
+
* @param obj - The source object
|
|
34
|
+
* @param path - The path to the value (e.g., 'a.b.c')
|
|
35
|
+
* @param defaultValue - The default value to return if the path doesn't exist
|
|
36
|
+
* @returns The value at the path or the default value
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```typescript
|
|
40
|
+
* const obj = { a: { b: { c: 42 } } };
|
|
41
|
+
* get(obj, 'a.b.c'); // 42
|
|
42
|
+
* get(obj, 'a.b.x', 'default'); // 'default'
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
declare function get<T = unknown>(obj: Record<string, unknown>, path: string, defaultValue?: T): T | undefined;
|
|
46
|
+
/**
|
|
47
|
+
* Set a nested value in an object using a path string.
|
|
48
|
+
*
|
|
49
|
+
* @param obj - The target object
|
|
50
|
+
* @param path - The path to set the value at (e.g., 'a.b.c')
|
|
51
|
+
* @param value - The value to set
|
|
52
|
+
* @returns The modified object
|
|
53
|
+
*
|
|
54
|
+
* @example
|
|
55
|
+
* ```typescript
|
|
56
|
+
* const obj = { a: { b: {} } };
|
|
57
|
+
* set(obj, 'a.b.c', 42); // { a: { b: { c: 42 } } }
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
declare function set<T extends Record<string, unknown>>(obj: T, path: string, value: unknown): T;
|
|
61
|
+
/**
|
|
62
|
+
* Check if an object has a nested property using a path string.
|
|
63
|
+
*
|
|
64
|
+
* @param obj - The source object
|
|
65
|
+
* @param path - The path to check (e.g., 'a.b.c')
|
|
66
|
+
* @returns True if the path exists, false otherwise
|
|
67
|
+
*
|
|
68
|
+
* @example
|
|
69
|
+
* ```typescript
|
|
70
|
+
* const obj = { a: { b: { c: 42 } } };
|
|
71
|
+
* has(obj, 'a.b.c'); // true
|
|
72
|
+
* has(obj, 'a.b.x'); // false
|
|
73
|
+
* ```
|
|
74
|
+
*/
|
|
75
|
+
declare function has(obj: Record<string, unknown>, path: string): boolean;
|
|
76
|
+
/**
|
|
77
|
+
* Get all keys of an object including nested keys.
|
|
78
|
+
*
|
|
79
|
+
* @param obj - The source object
|
|
80
|
+
* @param prefix - The prefix to prepend to keys (used internally for recursion)
|
|
81
|
+
* @returns An array of all keys including nested paths
|
|
82
|
+
*
|
|
83
|
+
* @example
|
|
84
|
+
* ```typescript
|
|
85
|
+
* const obj = { a: 1, b: { c: 2, d: { e: 3 } } };
|
|
86
|
+
* flatKeys(obj); // ['a', 'b.c', 'b.d.e']
|
|
87
|
+
* ```
|
|
88
|
+
*/
|
|
89
|
+
declare function flatKeys(obj: Record<string, unknown>, prefix?: string): string[];
|
|
90
|
+
/**
|
|
91
|
+
* Deep clone an object.
|
|
92
|
+
*
|
|
93
|
+
* @param obj - The object to clone
|
|
94
|
+
* @returns A deep clone of the object
|
|
95
|
+
*
|
|
96
|
+
* @example
|
|
97
|
+
* ```typescript
|
|
98
|
+
* const obj = { a: 1, b: { c: 2 } };
|
|
99
|
+
* const cloned = deepClone(obj);
|
|
100
|
+
* cloned.b.c = 3;
|
|
101
|
+
* console.log(obj.b.c); // 2 (original unchanged)
|
|
102
|
+
* ```
|
|
103
|
+
*/
|
|
104
|
+
declare function deepClone<T>(obj: T): T;
|
|
105
|
+
/**
|
|
106
|
+
* Compare two objects for deep equality.
|
|
107
|
+
*
|
|
108
|
+
* @param obj1 - The first object
|
|
109
|
+
* @param obj2 - The second object
|
|
110
|
+
* @returns True if the objects are deeply equal, false otherwise
|
|
111
|
+
*
|
|
112
|
+
* @example
|
|
113
|
+
* ```typescript
|
|
114
|
+
* deepEqual({ a: 1, b: { c: 2 } }, { a: 1, b: { c: 2 } }); // true
|
|
115
|
+
* deepEqual({ a: 1 }, { a: 2 }); // false
|
|
116
|
+
* ```
|
|
117
|
+
*/
|
|
118
|
+
declare function deepEqual(obj1: unknown, obj2: unknown): boolean;
|
|
119
|
+
/**
|
|
120
|
+
* Map over the values of an object.
|
|
121
|
+
*
|
|
122
|
+
* @param obj - The source object
|
|
123
|
+
* @param fn - The mapping function
|
|
124
|
+
* @returns A new object with mapped values
|
|
125
|
+
*
|
|
126
|
+
* @example
|
|
127
|
+
* ```typescript
|
|
128
|
+
* const obj = { a: 1, b: 2, c: 3 };
|
|
129
|
+
* mapValues(obj, (value) => value * 2); // { a: 2, b: 4, c: 6 }
|
|
130
|
+
* ```
|
|
131
|
+
*/
|
|
132
|
+
declare function mapValues<T extends Record<string, unknown>, U>(obj: T, fn: (value: T[keyof T], key: keyof T) => U): Record<keyof T, U>;
|
|
133
|
+
/**
|
|
134
|
+
* Map over the keys of an object.
|
|
135
|
+
*
|
|
136
|
+
* @param obj - The source object
|
|
137
|
+
* @param fn - The mapping function
|
|
138
|
+
* @returns A new object with mapped keys
|
|
139
|
+
*
|
|
140
|
+
* @example
|
|
141
|
+
* ```typescript
|
|
142
|
+
* const obj = { a: 1, b: 2 };
|
|
143
|
+
* mapKeys(obj, (key) => key.toUpperCase()); // { A: 1, B: 2 }
|
|
144
|
+
* ```
|
|
145
|
+
*/
|
|
146
|
+
declare function mapKeys<T extends Record<string, unknown>>(obj: T, fn: (key: keyof T) => string): Record<string, T[keyof T]>;
|
|
147
|
+
//#endregion
|
|
148
|
+
export { deepClone, deepEqual, flatKeys, get, has, mapKeys, mapValues, omit, pick, set };
|
package/dist/manipulation.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
//#region src/manipulation.d.ts
|
|
2
2
|
/**
|
|
3
3
|
* Pick specific keys from an object.
|
|
4
4
|
*
|
|
@@ -12,7 +12,7 @@ declare const deepMerge: import("@fastify/deepmerge").DeepMergeFn;
|
|
|
12
12
|
* pick(obj, ['a', 'c']); // { a: 1, c: 3 }
|
|
13
13
|
* ```
|
|
14
14
|
*/
|
|
15
|
-
|
|
15
|
+
declare function pick<T extends Record<string, unknown>, K extends keyof T>(obj: T, keys: readonly K[]): Pick<T, K>;
|
|
16
16
|
/**
|
|
17
17
|
* Omit specific keys from an object.
|
|
18
18
|
*
|
|
@@ -26,56 +26,7 @@ export declare function pick<T extends Record<string, unknown>, K extends keyof
|
|
|
26
26
|
* omit(obj, ['b']); // { a: 1, c: 3 }
|
|
27
27
|
* ```
|
|
28
28
|
*/
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* Deep merge two objects.
|
|
32
|
-
*
|
|
33
|
-
* Uses @fastify/deepmerge for efficient and reliable deep merging.
|
|
34
|
-
*
|
|
35
|
-
* @param target - The target object
|
|
36
|
-
* @param source - The source object to merge into the target
|
|
37
|
-
* @returns A new merged object
|
|
38
|
-
*
|
|
39
|
-
* @example
|
|
40
|
-
* ```typescript
|
|
41
|
-
* const obj1 = { a: 1, b: { c: 2 } };
|
|
42
|
-
* const obj2 = { b: { d: 3 }, e: 4 };
|
|
43
|
-
* merge(obj1, obj2); // { a: 1, b: { c: 2, d: 3 }, e: 4 }
|
|
44
|
-
* ```
|
|
45
|
-
*/
|
|
46
|
-
export declare function merge<T extends Record<string, unknown>, U extends Record<string, unknown>>(target: T, source: U): T & U;
|
|
47
|
-
/**
|
|
48
|
-
* Deep merge multiple objects.
|
|
49
|
-
*
|
|
50
|
-
* Uses @fastify/deepmerge to merge any number of objects into a single result.
|
|
51
|
-
* Objects are merged from left to right, with later objects overriding earlier ones.
|
|
52
|
-
*
|
|
53
|
-
* @param objects - The objects to merge
|
|
54
|
-
* @returns A new merged object
|
|
55
|
-
*
|
|
56
|
-
* @example
|
|
57
|
-
* ```typescript
|
|
58
|
-
* const obj1 = { a: 1, b: { c: 2 } };
|
|
59
|
-
* const obj2 = { b: { d: 3 }, e: 4 };
|
|
60
|
-
* const obj3 = { e: 5, f: 6 };
|
|
61
|
-
* mergeAll(obj1, obj2, obj3); // { a: 1, b: { c: 2, d: 3 }, e: 5, f: 6 }
|
|
62
|
-
* ```
|
|
63
|
-
*/
|
|
64
|
-
export declare function mergeAll<T extends Record<string, unknown>>(...objects: T[]): Record<string, unknown>;
|
|
65
|
-
/**
|
|
66
|
-
* Re-export the configured deepmerge instance from @fastify/deepmerge.
|
|
67
|
-
*
|
|
68
|
-
* This provides direct access to the deepmerge function for advanced use cases,
|
|
69
|
-
* allowing merging of multiple objects and custom options.
|
|
70
|
-
*
|
|
71
|
-
* @example
|
|
72
|
-
* ```typescript
|
|
73
|
-
* import { deepmerge } from '@pixpilot/object';
|
|
74
|
-
* const result = deepmerge({ a: 1 }, { b: 2 }, { c: 3 });
|
|
75
|
-
* // { a: 1, b: 2, c: 3 }
|
|
76
|
-
* ```
|
|
77
|
-
*/
|
|
78
|
-
export { deepMerge as deepmerge };
|
|
29
|
+
declare function omit<T extends Record<string, unknown>, K extends keyof T>(obj: T, keys: readonly K[]): Omit<T, K>;
|
|
79
30
|
/**
|
|
80
31
|
* Get a nested value from an object using a path string.
|
|
81
32
|
*
|
|
@@ -91,7 +42,7 @@ export { deepMerge as deepmerge };
|
|
|
91
42
|
* get(obj, 'a.b.x', 'default'); // 'default'
|
|
92
43
|
* ```
|
|
93
44
|
*/
|
|
94
|
-
|
|
45
|
+
declare function get<T = unknown>(obj: Record<string, unknown>, path: string, defaultValue?: T): T | undefined;
|
|
95
46
|
/**
|
|
96
47
|
* Set a nested value in an object using a path string.
|
|
97
48
|
*
|
|
@@ -106,7 +57,7 @@ export declare function get<T = unknown>(obj: Record<string, unknown>, path: str
|
|
|
106
57
|
* set(obj, 'a.b.c', 42); // { a: { b: { c: 42 } } }
|
|
107
58
|
* ```
|
|
108
59
|
*/
|
|
109
|
-
|
|
60
|
+
declare function set<T extends Record<string, unknown>>(obj: T, path: string, value: unknown): T;
|
|
110
61
|
/**
|
|
111
62
|
* Check if an object has a nested property using a path string.
|
|
112
63
|
*
|
|
@@ -121,7 +72,7 @@ export declare function set<T extends Record<string, unknown>>(obj: T, path: str
|
|
|
121
72
|
* has(obj, 'a.b.x'); // false
|
|
122
73
|
* ```
|
|
123
74
|
*/
|
|
124
|
-
|
|
75
|
+
declare function has(obj: Record<string, unknown>, path: string): boolean;
|
|
125
76
|
/**
|
|
126
77
|
* Get all keys of an object including nested keys.
|
|
127
78
|
*
|
|
@@ -135,7 +86,7 @@ export declare function has(obj: Record<string, unknown>, path: string): boolean
|
|
|
135
86
|
* flatKeys(obj); // ['a', 'b.c', 'b.d.e']
|
|
136
87
|
* ```
|
|
137
88
|
*/
|
|
138
|
-
|
|
89
|
+
declare function flatKeys(obj: Record<string, unknown>, prefix?: string): string[];
|
|
139
90
|
/**
|
|
140
91
|
* Deep clone an object.
|
|
141
92
|
*
|
|
@@ -150,7 +101,7 @@ export declare function flatKeys(obj: Record<string, unknown>, prefix?: string):
|
|
|
150
101
|
* console.log(obj.b.c); // 2 (original unchanged)
|
|
151
102
|
* ```
|
|
152
103
|
*/
|
|
153
|
-
|
|
104
|
+
declare function deepClone<T>(obj: T): T;
|
|
154
105
|
/**
|
|
155
106
|
* Compare two objects for deep equality.
|
|
156
107
|
*
|
|
@@ -164,7 +115,7 @@ export declare function deepClone<T>(obj: T): T;
|
|
|
164
115
|
* deepEqual({ a: 1 }, { a: 2 }); // false
|
|
165
116
|
* ```
|
|
166
117
|
*/
|
|
167
|
-
|
|
118
|
+
declare function deepEqual(obj1: unknown, obj2: unknown): boolean;
|
|
168
119
|
/**
|
|
169
120
|
* Map over the values of an object.
|
|
170
121
|
*
|
|
@@ -178,7 +129,7 @@ export declare function deepEqual(obj1: unknown, obj2: unknown): boolean;
|
|
|
178
129
|
* mapValues(obj, (value) => value * 2); // { a: 2, b: 4, c: 6 }
|
|
179
130
|
* ```
|
|
180
131
|
*/
|
|
181
|
-
|
|
132
|
+
declare function mapValues<T extends Record<string, unknown>, U>(obj: T, fn: (value: T[keyof T], key: keyof T) => U): Record<keyof T, U>;
|
|
182
133
|
/**
|
|
183
134
|
* Map over the keys of an object.
|
|
184
135
|
*
|
|
@@ -192,4 +143,6 @@ export declare function mapValues<T extends Record<string, unknown>, U>(obj: T,
|
|
|
192
143
|
* mapKeys(obj, (key) => key.toUpperCase()); // { A: 1, B: 2 }
|
|
193
144
|
* ```
|
|
194
145
|
*/
|
|
195
|
-
|
|
146
|
+
declare function mapKeys<T extends Record<string, unknown>>(obj: T, fn: (key: keyof T) => string): Record<string, T[keyof T]>;
|
|
147
|
+
//#endregion
|
|
148
|
+
export { deepClone, deepEqual, flatKeys, get, has, mapKeys, mapValues, omit, pick, set };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{isObject as e}from"./type-guards.js";function t(e,t){let n={};for(let r of t)r in e&&(n[r]=e[r]);return n}function n(e,t){let n={...e};for(let e of t)delete n[e];return n}function r(e,t,n){let r=t.split(`.`),i=e;for(let e of r)if(typeof i==`object`&&i&&e in i)i=i[e];else return n;return i}function i(t,n,r){let i=n.split(`.`),a=i.pop();if(a==null||a.length===0)return t;let o=t;for(let t of i)(!(t in o)||!e(o[t]))&&(o[t]={}),o=o[t];return o[a]=r,t}function a(e,t){let n=t.split(`.`),r=e;for(let e of n)if(typeof r==`object`&&r&&e in r)r=r[e];else return!1;return!0}function o(t,n=``){let r=[];for(let[i,a]of Object.entries(t)){let t=n?`${n}.${i}`:i;e(a)?r.push(...o(a,t)):r.push(t)}return r}function s(e){if(typeof e!=`object`||!e)return e;if(e instanceof Date)return new Date(e.getTime());if(e instanceof RegExp)return new RegExp(e.source,e.flags);if(Array.isArray(e))return e.map(e=>s(e));let t={};for(let[n,r]of Object.entries(e))t[n]=s(r);return t}function c(e,t){if(e===t)return!0;if(typeof e!=typeof t||e===null||t===null)return!1;if(e instanceof Date&&t instanceof Date)return e.getTime()===t.getTime();if(Array.isArray(e)&&Array.isArray(t))return e.length===t.length?e.every((e,n)=>c(e,t[n])):!1;if(typeof e==`object`&&typeof t==`object`){let n=Object.keys(e),r=Object.keys(t);return n.length===r.length?n.every(n=>c(e[n],t[n])):!1}return!1}function l(e,t){let n={};for(let[r,i]of Object.entries(e))n[r]=t(i,r);return n}function u(e,t){let n={};for(let[r,i]of Object.entries(e)){let e=t(r);n[e]=i}return n}export{s as deepClone,c as deepEqual,o as flatKeys,r as get,a as has,u as mapKeys,l as mapValues,n as omit,t as pick,i as set};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function e(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function t(t){if(!e(t))return!1;let n=Object.getPrototypeOf(t);return n===null||n===Object.prototype}function n(t){return e(t)&&Object.keys(t).length===0}exports.isEmptyObject=n,exports.isObject=e,exports.isPlainObject=t;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
//#region src/type-guards.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Type guard to check if a value is an object (and not null or an array).
|
|
4
|
+
*
|
|
5
|
+
* @param value - The value to check
|
|
6
|
+
* @returns True if the value is an object, false otherwise
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* isObject({}); // true
|
|
11
|
+
* isObject({ key: 'value' }); // true
|
|
12
|
+
* isObject([]); // false
|
|
13
|
+
* isObject(null); // false
|
|
14
|
+
* isObject('string'); // false
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
declare function isObject(value: unknown): value is Record<string, unknown>;
|
|
18
|
+
/**
|
|
19
|
+
* Type guard to check if a value is a plain object
|
|
20
|
+
* (created with {} or new Object(), not a class instance).
|
|
21
|
+
*
|
|
22
|
+
* @param value - The value to check
|
|
23
|
+
* @returns True if the value is a plain object, false otherwise
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```typescript
|
|
27
|
+
* isPlainObject({}); // true
|
|
28
|
+
* isPlainObject({ key: 'value' }); // true
|
|
29
|
+
* isPlainObject(new Date()); // false
|
|
30
|
+
* isPlainObject([]); // false
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
declare function isPlainObject(value: unknown): value is Record<string, unknown>;
|
|
34
|
+
/**
|
|
35
|
+
* Type guard to check if a value is an empty object.
|
|
36
|
+
*
|
|
37
|
+
* @param value - The value to check
|
|
38
|
+
* @returns True if the value is an empty object, false otherwise
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* ```typescript
|
|
42
|
+
* isEmptyObject({}); // true
|
|
43
|
+
* isEmptyObject({ key: 'value' }); // false
|
|
44
|
+
* isEmptyObject([]); // false
|
|
45
|
+
* ```
|
|
46
|
+
*/
|
|
47
|
+
declare function isEmptyObject(value: unknown): boolean;
|
|
48
|
+
//#endregion
|
|
49
|
+
export { isEmptyObject, isObject, isPlainObject };
|
package/dist/type-guards.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
//#region src/type-guards.d.ts
|
|
1
2
|
/**
|
|
2
3
|
* Type guard to check if a value is an object (and not null or an array).
|
|
3
4
|
*
|
|
@@ -13,7 +14,7 @@
|
|
|
13
14
|
* isObject('string'); // false
|
|
14
15
|
* ```
|
|
15
16
|
*/
|
|
16
|
-
|
|
17
|
+
declare function isObject(value: unknown): value is Record<string, unknown>;
|
|
17
18
|
/**
|
|
18
19
|
* Type guard to check if a value is a plain object
|
|
19
20
|
* (created with {} or new Object(), not a class instance).
|
|
@@ -29,7 +30,7 @@ export declare function isObject(value: unknown): value is Record<string, unknow
|
|
|
29
30
|
* isPlainObject([]); // false
|
|
30
31
|
* ```
|
|
31
32
|
*/
|
|
32
|
-
|
|
33
|
+
declare function isPlainObject(value: unknown): value is Record<string, unknown>;
|
|
33
34
|
/**
|
|
34
35
|
* Type guard to check if a value is an empty object.
|
|
35
36
|
*
|
|
@@ -43,4 +44,6 @@ export declare function isPlainObject(value: unknown): value is Record<string, u
|
|
|
43
44
|
* isEmptyObject([]); // false
|
|
44
45
|
* ```
|
|
45
46
|
*/
|
|
46
|
-
|
|
47
|
+
declare function isEmptyObject(value: unknown): boolean;
|
|
48
|
+
//#endregion
|
|
49
|
+
export { isEmptyObject, isObject, isPlainObject };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function e(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function t(t){if(!e(t))return!1;let n=Object.getPrototypeOf(t);return n===null||n===Object.prototype}function n(t){return e(t)&&Object.keys(t).length===0}export{n as isEmptyObject,e as isObject,t as isPlainObject};
|
package/package.json
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pixpilot/object",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "1.1.
|
|
4
|
+
"version": "1.1.10",
|
|
5
|
+
"description": "A collection of utility functions for object manipulation and transformation.",
|
|
5
6
|
"author": "Pixpilot <m.doaie@hotmail.com>",
|
|
6
7
|
"license": "MIT",
|
|
7
8
|
"repository": {
|
|
@@ -25,27 +26,26 @@
|
|
|
25
26
|
},
|
|
26
27
|
"dependencies": {
|
|
27
28
|
"@fastify/deepmerge": "^3.1.0",
|
|
28
|
-
"@pixpilot/string": "2.0
|
|
29
|
+
"@pixpilot/string": "2.3.0"
|
|
29
30
|
},
|
|
30
31
|
"devDependencies": {
|
|
31
32
|
"@manypkg/get-packages": "^3.1.0",
|
|
32
|
-
"@rollup/plugin-alias": "^5.1.1",
|
|
33
|
-
"@rollup/plugin-node-resolve": "^16.0.3",
|
|
34
33
|
"@types/node": "^22.18.10",
|
|
35
34
|
"eslint": "^9.37.0",
|
|
36
|
-
"
|
|
35
|
+
"tsdown": "^0.15.8",
|
|
37
36
|
"typescript": "^5.9.3",
|
|
38
37
|
"@internal/eslint-config": "0.3.0",
|
|
39
38
|
"@internal/prettier-config": "0.0.1",
|
|
40
|
-
"@internal/rollup-config": "0.1.0",
|
|
41
39
|
"@internal/tsconfig": "0.1.0",
|
|
42
|
-
"@internal/vitest-config": "0.1.0"
|
|
40
|
+
"@internal/vitest-config": "0.1.0",
|
|
41
|
+
"@internal/tsdown-config": "0.1.0"
|
|
43
42
|
},
|
|
44
43
|
"prettier": "@internal/prettier-config",
|
|
45
44
|
"scripts": {
|
|
46
45
|
"clean": "git clean -xdf .cache .turbo dist",
|
|
47
46
|
"clean:all": "git clean -xdf .cache .turbo dist node_modules",
|
|
48
|
-
"build": "
|
|
47
|
+
"build": "tsdown",
|
|
48
|
+
"buld:watch": "tsdown --watch",
|
|
49
49
|
"test": "vitest --run --passWithNoTests",
|
|
50
50
|
"test:watch": "vitest --watch",
|
|
51
51
|
"test:ui": "vitest --ui",
|