lifecycleion 0.0.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/LICENSE +22 -0
- package/README.md +125 -0
- package/dist/index.cjs +7 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +2 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/arrays.cjs +95 -0
- package/dist/lib/arrays.cjs.map +1 -0
- package/dist/lib/arrays.d.cts +15 -0
- package/dist/lib/arrays.d.ts +15 -0
- package/dist/lib/arrays.js +63 -0
- package/dist/lib/arrays.js.map +1 -0
- package/dist/lib/ascii-tables/index.cjs +642 -0
- package/dist/lib/ascii-tables/index.cjs.map +1 -0
- package/dist/lib/ascii-tables/index.d.cts +66 -0
- package/dist/lib/ascii-tables/index.d.ts +66 -0
- package/dist/lib/ascii-tables/index.js +603 -0
- package/dist/lib/ascii-tables/index.js.map +1 -0
- package/dist/lib/clamp.cjs +41 -0
- package/dist/lib/clamp.cjs.map +1 -0
- package/dist/lib/clamp.d.cts +26 -0
- package/dist/lib/clamp.d.ts +26 -0
- package/dist/lib/clamp.js +15 -0
- package/dist/lib/clamp.js.map +1 -0
- package/dist/lib/constants.cjs +73 -0
- package/dist/lib/constants.cjs.map +1 -0
- package/dist/lib/constants.d.cts +17 -0
- package/dist/lib/constants.d.ts +17 -0
- package/dist/lib/constants.js +34 -0
- package/dist/lib/constants.js.map +1 -0
- package/dist/lib/curly-brackets.cjs +77 -0
- package/dist/lib/curly-brackets.cjs.map +1 -0
- package/dist/lib/curly-brackets.d.cts +17 -0
- package/dist/lib/curly-brackets.d.ts +17 -0
- package/dist/lib/curly-brackets.js +52 -0
- package/dist/lib/curly-brackets.js.map +1 -0
- package/dist/lib/deep-clone.cjs +87 -0
- package/dist/lib/deep-clone.cjs.map +1 -0
- package/dist/lib/deep-clone.d.cts +19 -0
- package/dist/lib/deep-clone.d.ts +19 -0
- package/dist/lib/deep-clone.js +62 -0
- package/dist/lib/deep-clone.js.map +1 -0
- package/dist/lib/error-to-string.cjs +743 -0
- package/dist/lib/error-to-string.cjs.map +1 -0
- package/dist/lib/error-to-string.d.cts +3 -0
- package/dist/lib/error-to-string.d.ts +3 -0
- package/dist/lib/error-to-string.js +706 -0
- package/dist/lib/error-to-string.js.map +1 -0
- package/dist/lib/event-emitter.cjs +899 -0
- package/dist/lib/event-emitter.cjs.map +1 -0
- package/dist/lib/event-emitter.d.cts +78 -0
- package/dist/lib/event-emitter.d.ts +78 -0
- package/dist/lib/event-emitter.js +861 -0
- package/dist/lib/event-emitter.js.map +1 -0
- package/dist/lib/id-helpers.cjs +205 -0
- package/dist/lib/id-helpers.cjs.map +1 -0
- package/dist/lib/id-helpers.d.cts +198 -0
- package/dist/lib/id-helpers.d.ts +198 -0
- package/dist/lib/id-helpers.js +170 -0
- package/dist/lib/id-helpers.js.map +1 -0
- package/dist/lib/is-boolean.cjs +33 -0
- package/dist/lib/is-boolean.cjs.map +1 -0
- package/dist/lib/is-boolean.d.cts +19 -0
- package/dist/lib/is-boolean.d.ts +19 -0
- package/dist/lib/is-boolean.js +8 -0
- package/dist/lib/is-boolean.js.map +1 -0
- package/dist/lib/is-function.cjs +33 -0
- package/dist/lib/is-function.cjs.map +1 -0
- package/dist/lib/is-function.d.cts +3 -0
- package/dist/lib/is-function.d.ts +3 -0
- package/dist/lib/is-function.js +8 -0
- package/dist/lib/is-function.js.map +1 -0
- package/dist/lib/is-number.cjs +38 -0
- package/dist/lib/is-number.cjs.map +1 -0
- package/dist/lib/is-number.d.cts +38 -0
- package/dist/lib/is-number.d.ts +38 -0
- package/dist/lib/is-number.js +12 -0
- package/dist/lib/is-number.js.map +1 -0
- package/dist/lib/is-plain-object.cjs +33 -0
- package/dist/lib/is-plain-object.cjs.map +1 -0
- package/dist/lib/is-plain-object.d.cts +20 -0
- package/dist/lib/is-plain-object.d.ts +20 -0
- package/dist/lib/is-plain-object.js +8 -0
- package/dist/lib/is-plain-object.js.map +1 -0
- package/dist/lib/is-promise.cjs +34 -0
- package/dist/lib/is-promise.cjs.map +1 -0
- package/dist/lib/is-promise.d.cts +3 -0
- package/dist/lib/is-promise.d.ts +3 -0
- package/dist/lib/is-promise.js +9 -0
- package/dist/lib/is-promise.js.map +1 -0
- package/dist/lib/json-helpers.cjs +49 -0
- package/dist/lib/json-helpers.cjs.map +1 -0
- package/dist/lib/json-helpers.d.cts +10 -0
- package/dist/lib/json-helpers.d.ts +10 -0
- package/dist/lib/json-helpers.js +22 -0
- package/dist/lib/json-helpers.js.map +1 -0
- package/dist/lib/lifecycle-manager/index.cjs +5594 -0
- package/dist/lib/lifecycle-manager/index.cjs.map +1 -0
- package/dist/lib/lifecycle-manager/index.d.cts +2044 -0
- package/dist/lib/lifecycle-manager/index.d.ts +2044 -0
- package/dist/lib/lifecycle-manager/index.js +5543 -0
- package/dist/lib/lifecycle-manager/index.js.map +1 -0
- package/dist/lib/logger/index.cjs +2514 -0
- package/dist/lib/logger/index.cjs.map +1 -0
- package/dist/lib/logger/index.d.cts +630 -0
- package/dist/lib/logger/index.d.ts +630 -0
- package/dist/lib/logger/index.js +2470 -0
- package/dist/lib/logger/index.js.map +1 -0
- package/dist/lib/padding-utils.cjs +77 -0
- package/dist/lib/padding-utils.cjs.map +1 -0
- package/dist/lib/padding-utils.d.cts +44 -0
- package/dist/lib/padding-utils.d.ts +44 -0
- package/dist/lib/padding-utils.js +46 -0
- package/dist/lib/padding-utils.js.map +1 -0
- package/dist/lib/process-signal-manager.cjs +1306 -0
- package/dist/lib/process-signal-manager.cjs.map +1 -0
- package/dist/lib/process-signal-manager.d.cts +305 -0
- package/dist/lib/process-signal-manager.d.ts +305 -0
- package/dist/lib/process-signal-manager.js +1269 -0
- package/dist/lib/process-signal-manager.js.map +1 -0
- package/dist/lib/promise-protected-resolver.cjs +828 -0
- package/dist/lib/promise-protected-resolver.cjs.map +1 -0
- package/dist/lib/promise-protected-resolver.d.cts +17 -0
- package/dist/lib/promise-protected-resolver.d.ts +17 -0
- package/dist/lib/promise-protected-resolver.js +791 -0
- package/dist/lib/promise-protected-resolver.js.map +1 -0
- package/dist/lib/retry-utils/index.cjs +2183 -0
- package/dist/lib/retry-utils/index.cjs.map +1 -0
- package/dist/lib/retry-utils/index.d.cts +321 -0
- package/dist/lib/retry-utils/index.d.ts +321 -0
- package/dist/lib/retry-utils/index.js +2133 -0
- package/dist/lib/retry-utils/index.js.map +1 -0
- package/dist/lib/safe-handle-callback.cjs +818 -0
- package/dist/lib/safe-handle-callback.cjs.map +1 -0
- package/dist/lib/safe-handle-callback.d.cts +43 -0
- package/dist/lib/safe-handle-callback.d.ts +43 -0
- package/dist/lib/safe-handle-callback.js +780 -0
- package/dist/lib/safe-handle-callback.js.map +1 -0
- package/dist/lib/serialize-error/index.cjs +93 -0
- package/dist/lib/serialize-error/index.cjs.map +1 -0
- package/dist/lib/serialize-error/index.d.cts +26 -0
- package/dist/lib/serialize-error/index.d.ts +26 -0
- package/dist/lib/serialize-error/index.js +64 -0
- package/dist/lib/serialize-error/index.js.map +1 -0
- package/dist/lib/single-event-observer.cjs +841 -0
- package/dist/lib/single-event-observer.cjs.map +1 -0
- package/dist/lib/single-event-observer.d.cts +54 -0
- package/dist/lib/single-event-observer.d.ts +54 -0
- package/dist/lib/single-event-observer.js +803 -0
- package/dist/lib/single-event-observer.js.map +1 -0
- package/dist/lib/sleep.cjs +37 -0
- package/dist/lib/sleep.cjs.map +1 -0
- package/dist/lib/sleep.d.cts +11 -0
- package/dist/lib/sleep.d.ts +11 -0
- package/dist/lib/sleep.js +12 -0
- package/dist/lib/sleep.js.map +1 -0
- package/dist/lib/strings.cjs +186 -0
- package/dist/lib/strings.cjs.map +1 -0
- package/dist/lib/strings.d.cts +107 -0
- package/dist/lib/strings.d.ts +107 -0
- package/dist/lib/strings.js +149 -0
- package/dist/lib/strings.js.map +1 -0
- package/dist/lib/tmp-dir.cjs +254 -0
- package/dist/lib/tmp-dir.cjs.map +1 -0
- package/dist/lib/tmp-dir.d.cts +63 -0
- package/dist/lib/tmp-dir.d.ts +63 -0
- package/dist/lib/tmp-dir.js +211 -0
- package/dist/lib/tmp-dir.js.map +1 -0
- package/dist/lib/unix-time-helpers.cjs +53 -0
- package/dist/lib/unix-time-helpers.cjs.map +1 -0
- package/dist/lib/unix-time-helpers.d.cts +56 -0
- package/dist/lib/unix-time-helpers.d.ts +56 -0
- package/dist/lib/unix-time-helpers.js +24 -0
- package/dist/lib/unix-time-helpers.js.map +1 -0
- package/package.json +220 -0
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/lib/deep-clone.ts
|
|
21
|
+
var deep_clone_exports = {};
|
|
22
|
+
__export(deep_clone_exports, {
|
|
23
|
+
deepClone: () => deepClone
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(deep_clone_exports);
|
|
26
|
+
function deepClone(obj) {
|
|
27
|
+
return cloneInternal(obj, /* @__PURE__ */ new WeakMap());
|
|
28
|
+
}
|
|
29
|
+
function cloneInternal(obj, seen) {
|
|
30
|
+
if (obj === null || typeof obj !== "object") {
|
|
31
|
+
return obj;
|
|
32
|
+
}
|
|
33
|
+
if (seen.has(obj)) {
|
|
34
|
+
return seen.get(obj);
|
|
35
|
+
}
|
|
36
|
+
if (obj instanceof Date) {
|
|
37
|
+
return new Date(obj);
|
|
38
|
+
}
|
|
39
|
+
if (obj instanceof RegExp) {
|
|
40
|
+
const flags = obj.flags;
|
|
41
|
+
const cloned2 = new RegExp(obj.source, flags);
|
|
42
|
+
cloned2.lastIndex = obj.lastIndex;
|
|
43
|
+
return cloned2;
|
|
44
|
+
}
|
|
45
|
+
if (obj instanceof Map) {
|
|
46
|
+
const cloned2 = /* @__PURE__ */ new Map();
|
|
47
|
+
seen.set(obj, cloned2);
|
|
48
|
+
for (const [key, value] of obj) {
|
|
49
|
+
cloned2.set(cloneInternal(key, seen), cloneInternal(value, seen));
|
|
50
|
+
}
|
|
51
|
+
return cloned2;
|
|
52
|
+
}
|
|
53
|
+
if (obj instanceof Set) {
|
|
54
|
+
const cloned2 = /* @__PURE__ */ new Set();
|
|
55
|
+
seen.set(obj, cloned2);
|
|
56
|
+
for (const value of obj) {
|
|
57
|
+
cloned2.add(cloneInternal(value, seen));
|
|
58
|
+
}
|
|
59
|
+
return cloned2;
|
|
60
|
+
}
|
|
61
|
+
if (ArrayBuffer.isView(obj) && !(obj instanceof DataView)) {
|
|
62
|
+
const typedArray = obj;
|
|
63
|
+
const cloned2 = typedArray.slice();
|
|
64
|
+
return cloned2;
|
|
65
|
+
}
|
|
66
|
+
if (Array.isArray(obj)) {
|
|
67
|
+
const cloned2 = [];
|
|
68
|
+
seen.set(obj, cloned2);
|
|
69
|
+
for (const item of obj) {
|
|
70
|
+
cloned2.push(cloneInternal(item, seen));
|
|
71
|
+
}
|
|
72
|
+
return cloned2;
|
|
73
|
+
}
|
|
74
|
+
const cloned = {};
|
|
75
|
+
seen.set(obj, cloned);
|
|
76
|
+
for (const key in obj) {
|
|
77
|
+
if (Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
78
|
+
cloned[key] = cloneInternal(obj[key], seen);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return cloned;
|
|
82
|
+
}
|
|
83
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
84
|
+
0 && (module.exports = {
|
|
85
|
+
deepClone
|
|
86
|
+
});
|
|
87
|
+
//# sourceMappingURL=deep-clone.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/lib/deep-clone.ts"],"sourcesContent":["/**\n * Deep clone utility\n *\n * Creates a deep copy of a value, recursively cloning nested structures.\n * Handles most common data types including objects, arrays, dates, regexes,\n * Maps, Sets, and typed arrays.\n *\n * Note: Functions are returned by reference (not cloned). Circular references\n * are detected and handled to prevent infinite recursion.\n */\n\n/**\n * Deep clone an object or value\n *\n * @param obj - The value to clone\n * @returns A deep clone of the input value\n */\nexport function deepClone<T>(obj: T): T {\n return cloneInternal(obj, new WeakMap());\n}\n\nfunction cloneInternal<T>(obj: T, seen: WeakMap<object, unknown>): T {\n // Primitives and null/undefined return as-is\n if (obj === null || typeof obj !== 'object') {\n return obj;\n }\n\n // Check for circular references\n if (seen.has(obj as object)) {\n return seen.get(obj as object) as T;\n }\n\n // Handle Date\n if (obj instanceof Date) {\n return new Date(obj) as T;\n }\n\n // Handle RegExp\n if (obj instanceof RegExp) {\n const flags = obj.flags;\n const cloned = new RegExp(obj.source, flags);\n cloned.lastIndex = obj.lastIndex;\n return cloned as T;\n }\n\n // Handle Map\n if (obj instanceof Map) {\n const cloned = new Map();\n seen.set(obj as object, cloned);\n\n for (const [key, value] of obj) {\n cloned.set(cloneInternal(key, seen), cloneInternal(value, seen));\n }\n\n return cloned as T;\n }\n\n // Handle Set\n if (obj instanceof Set) {\n const cloned = new Set();\n seen.set(obj as object, cloned);\n\n for (const value of obj) {\n cloned.add(cloneInternal(value, seen));\n }\n\n return cloned as T;\n }\n\n // Handle typed arrays\n if (ArrayBuffer.isView(obj) && !(obj instanceof DataView)) {\n const typedArray = obj as unknown as\n | Int8Array\n | Uint8Array\n | Uint8ClampedArray\n | Int16Array\n | Uint16Array\n | Int32Array\n | Uint32Array\n | Float32Array\n | Float64Array\n | BigInt64Array\n | BigUint64Array;\n const cloned = typedArray.slice();\n return cloned as T;\n }\n\n // Handle Array\n if (Array.isArray(obj)) {\n const cloned: unknown[] = [];\n seen.set(obj as object, cloned);\n\n for (const item of obj) {\n cloned.push(cloneInternal(item, seen));\n }\n\n return cloned as T;\n }\n\n // Handle plain objects\n const cloned: Record<string, unknown> = {};\n seen.set(obj as object, cloned);\n\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n cloned[key] = cloneInternal((obj as Record<string, unknown>)[key], seen);\n }\n }\n\n return cloned as T;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAiBO,SAAS,UAAa,KAAW;AACtC,SAAO,cAAc,KAAK,oBAAI,QAAQ,CAAC;AACzC;AAEA,SAAS,cAAiB,KAAQ,MAAmC;AAEnE,MAAI,QAAQ,QAAQ,OAAO,QAAQ,UAAU;AAC3C,WAAO;AAAA,EACT;AAGA,MAAI,KAAK,IAAI,GAAa,GAAG;AAC3B,WAAO,KAAK,IAAI,GAAa;AAAA,EAC/B;AAGA,MAAI,eAAe,MAAM;AACvB,WAAO,IAAI,KAAK,GAAG;AAAA,EACrB;AAGA,MAAI,eAAe,QAAQ;AACzB,UAAM,QAAQ,IAAI;AAClB,UAAMA,UAAS,IAAI,OAAO,IAAI,QAAQ,KAAK;AAC3C,IAAAA,QAAO,YAAY,IAAI;AACvB,WAAOA;AAAA,EACT;AAGA,MAAI,eAAe,KAAK;AACtB,UAAMA,UAAS,oBAAI,IAAI;AACvB,SAAK,IAAI,KAAeA,OAAM;AAE9B,eAAW,CAAC,KAAK,KAAK,KAAK,KAAK;AAC9B,MAAAA,QAAO,IAAI,cAAc,KAAK,IAAI,GAAG,cAAc,OAAO,IAAI,CAAC;AAAA,IACjE;AAEA,WAAOA;AAAA,EACT;AAGA,MAAI,eAAe,KAAK;AACtB,UAAMA,UAAS,oBAAI,IAAI;AACvB,SAAK,IAAI,KAAeA,OAAM;AAE9B,eAAW,SAAS,KAAK;AACvB,MAAAA,QAAO,IAAI,cAAc,OAAO,IAAI,CAAC;AAAA,IACvC;AAEA,WAAOA;AAAA,EACT;AAGA,MAAI,YAAY,OAAO,GAAG,KAAK,EAAE,eAAe,WAAW;AACzD,UAAM,aAAa;AAYnB,UAAMA,UAAS,WAAW,MAAM;AAChC,WAAOA;AAAA,EACT;AAGA,MAAI,MAAM,QAAQ,GAAG,GAAG;AACtB,UAAMA,UAAoB,CAAC;AAC3B,SAAK,IAAI,KAAeA,OAAM;AAE9B,eAAW,QAAQ,KAAK;AACtB,MAAAA,QAAO,KAAK,cAAc,MAAM,IAAI,CAAC;AAAA,IACvC;AAEA,WAAOA;AAAA,EACT;AAGA,QAAM,SAAkC,CAAC;AACzC,OAAK,IAAI,KAAe,MAAM;AAE9B,aAAW,OAAO,KAAK;AACrB,QAAI,OAAO,UAAU,eAAe,KAAK,KAAK,GAAG,GAAG;AAClD,aAAO,GAAG,IAAI,cAAe,IAAgC,GAAG,GAAG,IAAI;AAAA,IACzE;AAAA,EACF;AAEA,SAAO;AACT;","names":["cloned"]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deep clone utility
|
|
3
|
+
*
|
|
4
|
+
* Creates a deep copy of a value, recursively cloning nested structures.
|
|
5
|
+
* Handles most common data types including objects, arrays, dates, regexes,
|
|
6
|
+
* Maps, Sets, and typed arrays.
|
|
7
|
+
*
|
|
8
|
+
* Note: Functions are returned by reference (not cloned). Circular references
|
|
9
|
+
* are detected and handled to prevent infinite recursion.
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Deep clone an object or value
|
|
13
|
+
*
|
|
14
|
+
* @param obj - The value to clone
|
|
15
|
+
* @returns A deep clone of the input value
|
|
16
|
+
*/
|
|
17
|
+
declare function deepClone<T>(obj: T): T;
|
|
18
|
+
|
|
19
|
+
export { deepClone };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deep clone utility
|
|
3
|
+
*
|
|
4
|
+
* Creates a deep copy of a value, recursively cloning nested structures.
|
|
5
|
+
* Handles most common data types including objects, arrays, dates, regexes,
|
|
6
|
+
* Maps, Sets, and typed arrays.
|
|
7
|
+
*
|
|
8
|
+
* Note: Functions are returned by reference (not cloned). Circular references
|
|
9
|
+
* are detected and handled to prevent infinite recursion.
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Deep clone an object or value
|
|
13
|
+
*
|
|
14
|
+
* @param obj - The value to clone
|
|
15
|
+
* @returns A deep clone of the input value
|
|
16
|
+
*/
|
|
17
|
+
declare function deepClone<T>(obj: T): T;
|
|
18
|
+
|
|
19
|
+
export { deepClone };
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
// src/lib/deep-clone.ts
|
|
2
|
+
function deepClone(obj) {
|
|
3
|
+
return cloneInternal(obj, /* @__PURE__ */ new WeakMap());
|
|
4
|
+
}
|
|
5
|
+
function cloneInternal(obj, seen) {
|
|
6
|
+
if (obj === null || typeof obj !== "object") {
|
|
7
|
+
return obj;
|
|
8
|
+
}
|
|
9
|
+
if (seen.has(obj)) {
|
|
10
|
+
return seen.get(obj);
|
|
11
|
+
}
|
|
12
|
+
if (obj instanceof Date) {
|
|
13
|
+
return new Date(obj);
|
|
14
|
+
}
|
|
15
|
+
if (obj instanceof RegExp) {
|
|
16
|
+
const flags = obj.flags;
|
|
17
|
+
const cloned2 = new RegExp(obj.source, flags);
|
|
18
|
+
cloned2.lastIndex = obj.lastIndex;
|
|
19
|
+
return cloned2;
|
|
20
|
+
}
|
|
21
|
+
if (obj instanceof Map) {
|
|
22
|
+
const cloned2 = /* @__PURE__ */ new Map();
|
|
23
|
+
seen.set(obj, cloned2);
|
|
24
|
+
for (const [key, value] of obj) {
|
|
25
|
+
cloned2.set(cloneInternal(key, seen), cloneInternal(value, seen));
|
|
26
|
+
}
|
|
27
|
+
return cloned2;
|
|
28
|
+
}
|
|
29
|
+
if (obj instanceof Set) {
|
|
30
|
+
const cloned2 = /* @__PURE__ */ new Set();
|
|
31
|
+
seen.set(obj, cloned2);
|
|
32
|
+
for (const value of obj) {
|
|
33
|
+
cloned2.add(cloneInternal(value, seen));
|
|
34
|
+
}
|
|
35
|
+
return cloned2;
|
|
36
|
+
}
|
|
37
|
+
if (ArrayBuffer.isView(obj) && !(obj instanceof DataView)) {
|
|
38
|
+
const typedArray = obj;
|
|
39
|
+
const cloned2 = typedArray.slice();
|
|
40
|
+
return cloned2;
|
|
41
|
+
}
|
|
42
|
+
if (Array.isArray(obj)) {
|
|
43
|
+
const cloned2 = [];
|
|
44
|
+
seen.set(obj, cloned2);
|
|
45
|
+
for (const item of obj) {
|
|
46
|
+
cloned2.push(cloneInternal(item, seen));
|
|
47
|
+
}
|
|
48
|
+
return cloned2;
|
|
49
|
+
}
|
|
50
|
+
const cloned = {};
|
|
51
|
+
seen.set(obj, cloned);
|
|
52
|
+
for (const key in obj) {
|
|
53
|
+
if (Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
54
|
+
cloned[key] = cloneInternal(obj[key], seen);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return cloned;
|
|
58
|
+
}
|
|
59
|
+
export {
|
|
60
|
+
deepClone
|
|
61
|
+
};
|
|
62
|
+
//# sourceMappingURL=deep-clone.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/lib/deep-clone.ts"],"sourcesContent":["/**\n * Deep clone utility\n *\n * Creates a deep copy of a value, recursively cloning nested structures.\n * Handles most common data types including objects, arrays, dates, regexes,\n * Maps, Sets, and typed arrays.\n *\n * Note: Functions are returned by reference (not cloned). Circular references\n * are detected and handled to prevent infinite recursion.\n */\n\n/**\n * Deep clone an object or value\n *\n * @param obj - The value to clone\n * @returns A deep clone of the input value\n */\nexport function deepClone<T>(obj: T): T {\n return cloneInternal(obj, new WeakMap());\n}\n\nfunction cloneInternal<T>(obj: T, seen: WeakMap<object, unknown>): T {\n // Primitives and null/undefined return as-is\n if (obj === null || typeof obj !== 'object') {\n return obj;\n }\n\n // Check for circular references\n if (seen.has(obj as object)) {\n return seen.get(obj as object) as T;\n }\n\n // Handle Date\n if (obj instanceof Date) {\n return new Date(obj) as T;\n }\n\n // Handle RegExp\n if (obj instanceof RegExp) {\n const flags = obj.flags;\n const cloned = new RegExp(obj.source, flags);\n cloned.lastIndex = obj.lastIndex;\n return cloned as T;\n }\n\n // Handle Map\n if (obj instanceof Map) {\n const cloned = new Map();\n seen.set(obj as object, cloned);\n\n for (const [key, value] of obj) {\n cloned.set(cloneInternal(key, seen), cloneInternal(value, seen));\n }\n\n return cloned as T;\n }\n\n // Handle Set\n if (obj instanceof Set) {\n const cloned = new Set();\n seen.set(obj as object, cloned);\n\n for (const value of obj) {\n cloned.add(cloneInternal(value, seen));\n }\n\n return cloned as T;\n }\n\n // Handle typed arrays\n if (ArrayBuffer.isView(obj) && !(obj instanceof DataView)) {\n const typedArray = obj as unknown as\n | Int8Array\n | Uint8Array\n | Uint8ClampedArray\n | Int16Array\n | Uint16Array\n | Int32Array\n | Uint32Array\n | Float32Array\n | Float64Array\n | BigInt64Array\n | BigUint64Array;\n const cloned = typedArray.slice();\n return cloned as T;\n }\n\n // Handle Array\n if (Array.isArray(obj)) {\n const cloned: unknown[] = [];\n seen.set(obj as object, cloned);\n\n for (const item of obj) {\n cloned.push(cloneInternal(item, seen));\n }\n\n return cloned as T;\n }\n\n // Handle plain objects\n const cloned: Record<string, unknown> = {};\n seen.set(obj as object, cloned);\n\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n cloned[key] = cloneInternal((obj as Record<string, unknown>)[key], seen);\n }\n }\n\n return cloned as T;\n}\n"],"mappings":";AAiBO,SAAS,UAAa,KAAW;AACtC,SAAO,cAAc,KAAK,oBAAI,QAAQ,CAAC;AACzC;AAEA,SAAS,cAAiB,KAAQ,MAAmC;AAEnE,MAAI,QAAQ,QAAQ,OAAO,QAAQ,UAAU;AAC3C,WAAO;AAAA,EACT;AAGA,MAAI,KAAK,IAAI,GAAa,GAAG;AAC3B,WAAO,KAAK,IAAI,GAAa;AAAA,EAC/B;AAGA,MAAI,eAAe,MAAM;AACvB,WAAO,IAAI,KAAK,GAAG;AAAA,EACrB;AAGA,MAAI,eAAe,QAAQ;AACzB,UAAM,QAAQ,IAAI;AAClB,UAAMA,UAAS,IAAI,OAAO,IAAI,QAAQ,KAAK;AAC3C,IAAAA,QAAO,YAAY,IAAI;AACvB,WAAOA;AAAA,EACT;AAGA,MAAI,eAAe,KAAK;AACtB,UAAMA,UAAS,oBAAI,IAAI;AACvB,SAAK,IAAI,KAAeA,OAAM;AAE9B,eAAW,CAAC,KAAK,KAAK,KAAK,KAAK;AAC9B,MAAAA,QAAO,IAAI,cAAc,KAAK,IAAI,GAAG,cAAc,OAAO,IAAI,CAAC;AAAA,IACjE;AAEA,WAAOA;AAAA,EACT;AAGA,MAAI,eAAe,KAAK;AACtB,UAAMA,UAAS,oBAAI,IAAI;AACvB,SAAK,IAAI,KAAeA,OAAM;AAE9B,eAAW,SAAS,KAAK;AACvB,MAAAA,QAAO,IAAI,cAAc,OAAO,IAAI,CAAC;AAAA,IACvC;AAEA,WAAOA;AAAA,EACT;AAGA,MAAI,YAAY,OAAO,GAAG,KAAK,EAAE,eAAe,WAAW;AACzD,UAAM,aAAa;AAYnB,UAAMA,UAAS,WAAW,MAAM;AAChC,WAAOA;AAAA,EACT;AAGA,MAAI,MAAM,QAAQ,GAAG,GAAG;AACtB,UAAMA,UAAoB,CAAC;AAC3B,SAAK,IAAI,KAAeA,OAAM;AAE9B,eAAW,QAAQ,KAAK;AACtB,MAAAA,QAAO,KAAK,cAAc,MAAM,IAAI,CAAC;AAAA,IACvC;AAEA,WAAOA;AAAA,EACT;AAGA,QAAM,SAAkC,CAAC;AACzC,OAAK,IAAI,KAAe,MAAM;AAE9B,aAAW,OAAO,KAAK;AACrB,QAAI,OAAO,UAAU,eAAe,KAAK,KAAK,GAAG,GAAG;AAClD,aAAO,GAAG,IAAI,cAAe,IAAgC,GAAG,GAAG,IAAI;AAAA,IACzE;AAAA,EACF;AAEA,SAAO;AACT;","names":["cloned"]}
|