@helpers4/object 2.0.0-alpha.1 → 2.0.0-alpha.2

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
@@ -12,11 +12,11 @@ A set of helpers for working with URLs.
12
12
  [https://helpers4.js.org/object](https://helpers4.js.org/object)
13
13
 
14
14
  <!-- AUTOMATIC-METHODS -->
15
- - deepMerge
16
15
  - get
17
- - deepClone
18
16
  - set
17
+ - deepMerge
19
18
  - removeUndefinedNull
19
+ - deepClone
20
20
  <!-- /AUTOMATIC-METHODS -->
21
21
 
22
22
  ## See
package/lib/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- export * from './deepMerge';
2
- export * from './get';
3
- export * from './deepClone';
4
- export * from './set';
5
- export * from './removeUndefinedNull';
1
+ export declare function get<T = any>(obj: any, path: string, defaultValue?: T): T | undefined;
2
+ export declare function set(obj: Record<string, any>, path: string, value: any): Record<string, any>;
3
+ export declare function deepMerge<T extends Record<string, any>>(target: T, ...sources: Record<string, any>[]): T;
4
+ export declare function removeUndefinedNull<T extends Record<string, string | boolean | number>>(obj: T): T; /** * Remove null and undefined values from an object. * * @param obj a null object * @returns null */ export function removeUndefinedNull<T extends Record<string, string | boolean | number>>(obj: null): null; /** * Remove null and undefined values from an object. * * @param obj an undefined object * @returns undefined */ export function removeUndefinedNull<T extends Record<string, string | boolean | number>>(obj: undefined): undefined; /** * Remove null and undefined values from an object. * * @param obj an object * @returns A shallow copy of the object without null or undefined values */ export function removeUndefinedNull<T extends Record<string, string | boolean | number>>(obj: T | null | undefined): T | null | undefined;
5
+ export declare function deepClone<T>(obj: T): T;
package/lib/index.js CHANGED
@@ -1,6 +1,78 @@
1
- // helpers/object/index.ts
2
- export * from "./deepMerge";
3
- export * from "./get";
4
- export * from "./deepClone";
5
- export * from "./set";
6
- export * from "./removeUndefinedNull";
1
+ // helpers/object/get.ts
2
+ function get(obj, path, defaultValue) {
3
+ const keys = path.split(".");
4
+ let result = obj;
5
+ for (const key of keys) {
6
+ if (result == null || typeof result !== "object") {
7
+ return defaultValue;
8
+ }
9
+ result = result[key];
10
+ }
11
+ return result !== undefined ? result : defaultValue;
12
+ }
13
+ // helpers/object/set.ts
14
+ function set(obj, path, value) {
15
+ const keys = path.split(".");
16
+ let current = obj;
17
+ for (let i = 0;i < keys.length - 1; i++) {
18
+ const key = keys[i];
19
+ if (!(key in current) || typeof current[key] !== "object" || current[key] === null) {
20
+ current[key] = {};
21
+ }
22
+ current = current[key];
23
+ }
24
+ current[keys[keys.length - 1]] = value;
25
+ return obj;
26
+ }
27
+ // helpers/object/deepMerge.ts
28
+ function deepMerge(target, ...sources) {
29
+ if (!sources.length)
30
+ return target;
31
+ const source = sources.shift();
32
+ if (!source)
33
+ return deepMerge(target, ...sources);
34
+ for (const key in source) {
35
+ const targetValue = target[key];
36
+ const sourceValue = source[key];
37
+ if (isObject(targetValue) && isObject(sourceValue)) {
38
+ target[key] = deepMerge(targetValue, sourceValue);
39
+ } else if (sourceValue !== undefined) {
40
+ target[key] = sourceValue;
41
+ }
42
+ }
43
+ return deepMerge(target, ...sources);
44
+ }
45
+ function isObject(item) {
46
+ return item && typeof item === "object" && !Array.isArray(item);
47
+ }
48
+ // helpers/object/removeUndefinedNull.ts
49
+ import { isNullish } from "radashi";
50
+ function removeUndefinedNull(obj) {
51
+ return obj ? Object.entries(obj).filter(([_, v]) => !isNullish(v)).reduce((acc, [k, v]) => ({ ...acc, [k]: v }), {}) : obj;
52
+ }
53
+ // helpers/object/deepClone.ts
54
+ function deepClone(obj) {
55
+ if (obj === null || typeof obj !== "object") {
56
+ return obj;
57
+ }
58
+ if (obj instanceof Date) {
59
+ return new Date(obj.getTime());
60
+ }
61
+ if (Array.isArray(obj)) {
62
+ return obj.map((item) => deepClone(item));
63
+ }
64
+ const cloned = {};
65
+ for (const key in obj) {
66
+ if (obj.hasOwnProperty(key)) {
67
+ cloned[key] = deepClone(obj[key]);
68
+ }
69
+ }
70
+ return cloned;
71
+ }
72
+ export {
73
+ set,
74
+ removeUndefinedNull,
75
+ get,
76
+ deepMerge,
77
+ deepClone
78
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@helpers4/object",
3
- "version": "2.0.0-alpha.1",
3
+ "version": "2.0.0-alpha.2",
4
4
  "description": "A set of helpers in TS/JS, compatible with tree-shaking, for object.",
5
5
  "author": "baxyz <baxy@etik.com>",
6
6
  "license": "AGPL-3.0",
@@ -20,11 +20,11 @@
20
20
  "keywords": [
21
21
  "helpers",
22
22
  "object",
23
- "deepMerge",
24
23
  "get",
25
- "deepClone",
26
24
  "set",
27
- "removeUndefinedNull"
25
+ "deepMerge",
26
+ "removeUndefinedNull",
27
+ "deepClone"
28
28
  ],
29
29
  "files": [
30
30
  "lib/index.js",