bunshin-clone 1.4.1 → 1.4.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.cjs CHANGED
@@ -6,137 +6,137 @@ var { hasOwnProperty: HAS_OWN } = Object.prototype;
6
6
  function bunshinClone(source, options = EMPTY_OPTIONS, refs = /* @__PURE__ */ new WeakMap()) {
7
7
  return clone(source, options, refs);
8
8
  }
9
- function clone(node, options, refs) {
10
- if (!isObject(node)) {
11
- return node;
9
+ function clone(source, options, refs) {
10
+ if (!isObject(source)) {
11
+ return source;
12
12
  }
13
- const ref = refs.get(node);
13
+ const ref = refs.get(source);
14
14
  if (ref !== void 0) {
15
15
  return ref;
16
16
  }
17
17
  const settings = resolveOptions(options);
18
- if (settings.preserveDescriptors && isPlainObject(node)) {
19
- return cloneWithDescriptors(node, settings, refs);
18
+ if (settings.preserveDescriptors && isPlainObject(source)) {
19
+ return cloneWithDescriptors(source, settings, refs);
20
20
  }
21
- if (Array.isArray(node)) {
21
+ if (Array.isArray(source)) {
22
22
  const result = [];
23
- refs.set(node, result);
24
- for (let i = 0, l = node.length; i < l; i++) {
25
- result[i] = clone(node[i], settings, refs);
23
+ refs.set(source, result);
24
+ for (let i = 0, l = source.length; i < l; i++) {
25
+ result[i] = clone(source[i], settings, refs);
26
26
  }
27
27
  return result;
28
28
  }
29
- if (isPlainObject(node)) {
30
- const result = Object.create(Object.getPrototypeOf(node));
31
- refs.set(node, result);
32
- for (const key in node) {
33
- if (!HAS_OWN.call(node, key) || isUnsafeKey(key)) {
34
- continue;
29
+ if (isPlainObject(source)) {
30
+ const result = Object.create(Object.getPrototypeOf(source));
31
+ refs.set(source, result);
32
+ for (const key in source) {
33
+ if (HAS_OWN.call(source, key) && !isUnsafeKey(key)) {
34
+ result[key] = clone(source[key], settings, refs);
35
35
  }
36
- result[key] = clone(node[key], settings, refs);
37
36
  }
38
37
  return result;
39
38
  }
40
- if (node instanceof Map) {
39
+ if (source instanceof Map) {
41
40
  const result = /* @__PURE__ */ new Map();
42
- refs.set(node, result);
43
- for (const [key, value] of node) {
41
+ refs.set(source, result);
42
+ for (const [key, value] of source) {
44
43
  result.set(clone(key, settings, refs), clone(value, settings, refs));
45
44
  }
46
45
  return result;
47
46
  }
48
- if (node instanceof Set) {
47
+ if (source instanceof Set) {
49
48
  const result = /* @__PURE__ */ new Set();
50
- refs.set(node, result);
51
- for (const item of node) {
49
+ refs.set(source, result);
50
+ for (const item of source) {
52
51
  result.add(clone(item, settings, refs));
53
52
  }
54
53
  return result;
55
54
  }
56
- if (node instanceof Date) {
57
- const result = new Date(node.getTime());
58
- refs.set(node, result);
55
+ if (source instanceof Date) {
56
+ const result = new Date(source.getTime());
57
+ refs.set(source, result);
59
58
  return result;
60
59
  }
61
- if (node instanceof RegExp) {
62
- const result = new RegExp(node.source, node.flags);
63
- refs.set(node, result);
64
- result.lastIndex = node.lastIndex;
60
+ if (source instanceof RegExp) {
61
+ const result = new RegExp(source.source, source.flags);
62
+ refs.set(source, result);
63
+ result.lastIndex = source.lastIndex;
65
64
  return result;
66
65
  }
67
- if (node instanceof ArrayBuffer) {
68
- const result = node.slice(0);
69
- refs.set(node, result);
66
+ if (source instanceof ArrayBuffer) {
67
+ const result = source.slice(0);
68
+ refs.set(source, result);
70
69
  return result;
71
70
  }
72
- if (ArrayBuffer.isView(node)) {
73
- const { buffer, byteOffset, byteLength } = node;
74
- if (node instanceof DataView) {
71
+ if (ArrayBuffer.isView(source)) {
72
+ const { buffer, byteOffset, byteLength } = source;
73
+ if (source instanceof DataView) {
75
74
  const result2 = new DataView(buffer.slice(0), byteOffset, byteLength);
76
- refs.set(node, result2);
75
+ refs.set(source, result2);
77
76
  return result2;
78
77
  }
79
- const Ctor = node.constructor;
78
+ const Ctor = source.constructor;
80
79
  const result = new Ctor(buffer.slice(byteOffset, byteOffset + byteLength));
81
- refs.set(node, result);
80
+ refs.set(source, result);
82
81
  return result;
83
82
  }
84
- if (node instanceof DOMException || node instanceof Error) {
85
- return cloneError(node, settings, refs);
83
+ if (source instanceof DOMException || source instanceof Error) {
84
+ return cloneError(source, settings, refs);
86
85
  }
87
- if (node instanceof Blob) {
88
- const result = node.slice(0, node.size, node.type);
89
- refs.set(node, result);
86
+ if (source instanceof Blob) {
87
+ const result = source.slice(0, source.size, source.type);
88
+ refs.set(source, result);
90
89
  return result;
91
90
  }
92
- if (typeof ImageData !== "undefined" && node instanceof ImageData) {
93
- const { data, width, height, colorSpace } = node;
91
+ if (typeof ImageData !== "undefined" && source instanceof ImageData) {
92
+ const { data, width, height, colorSpace } = source;
94
93
  const result = new ImageData(new Uint8ClampedArray(data), width, height, {
95
94
  colorSpace
96
95
  });
97
- refs.set(node, result);
96
+ refs.set(source, result);
98
97
  return result;
99
98
  }
100
- if (node instanceof URL) {
101
- const result = new URL(node.href);
102
- refs.set(node, result);
99
+ if (source instanceof URL) {
100
+ const result = new URL(source.href);
101
+ refs.set(source, result);
103
102
  return result;
104
103
  }
105
- if (node instanceof URLSearchParams) {
104
+ if (source instanceof URLSearchParams) {
106
105
  const result = new URLSearchParams();
107
- refs.set(node, result);
108
- for (const [key, value] of node) {
106
+ refs.set(source, result);
107
+ for (const [key, value] of source) {
109
108
  result.append(key, value);
110
109
  }
111
110
  return result;
112
111
  }
113
- refs.set(node, node);
114
- return node;
112
+ refs.set(source, source);
113
+ return source;
115
114
  }
116
- function cloneError(value, settings, refs) {
117
- const result = createErrorInstance(value, settings, refs);
118
- refs.set(value, result);
119
- if (value instanceof DOMException) {
115
+ function cloneError(source, settings, refs) {
116
+ const result = createErrorInstance(source, settings, refs);
117
+ refs.set(source, result);
118
+ if (source instanceof DOMException) {
120
119
  return result;
121
120
  }
122
- if (value.stack) {
121
+ const { stack, cause } = source;
122
+ if (stack) {
123
123
  try {
124
- result.stack = value.stack;
124
+ result.stack = stack;
125
125
  } catch {
126
126
  }
127
127
  }
128
- if ("cause" in value && value.cause !== void 0) {
129
- result.cause = clone(value.cause, settings, refs);
128
+ if ("cause" in source && cause !== void 0) {
129
+ result.cause = clone(cause, settings, refs);
130
130
  }
131
- for (const key of Object.keys(value)) {
132
- Reflect.set(result, key, clone(Reflect.get(value, key), settings, refs));
131
+ for (const key of Object.keys(source)) {
132
+ Reflect.set(result, key, clone(Reflect.get(source, key), settings, refs));
133
133
  }
134
134
  return result;
135
135
  }
136
- function cloneWithDescriptors(node, settings, refs) {
137
- const result = Object.create(Object.getPrototypeOf(node));
138
- refs.set(node, result);
139
- const descs = Object.getOwnPropertyDescriptors(node);
136
+ function cloneWithDescriptors(source, settings, refs) {
137
+ const result = Object.create(Object.getPrototypeOf(source));
138
+ refs.set(source, result);
139
+ const descs = Object.getOwnPropertyDescriptors(source);
140
140
  forEachOwnKey(descs, (key) => {
141
141
  if (isUnsafeKey(key)) {
142
142
  return;
@@ -163,14 +163,14 @@ var ERROR_CTORS = {
163
163
  TypeError,
164
164
  URIError
165
165
  };
166
- function createErrorInstance(value, settings, refs) {
167
- const { message, name } = value;
168
- if (value instanceof DOMException) {
166
+ function createErrorInstance(source, settings, refs) {
167
+ const { message, name } = source;
168
+ if (source instanceof DOMException) {
169
169
  return new DOMException(message, name);
170
170
  }
171
- if (value instanceof AggregateError) {
171
+ if (source instanceof AggregateError) {
172
172
  return new AggregateError(
173
- value.errors.map((e) => clone(e, settings, refs)),
173
+ source.errors.map((e) => clone(e, settings, refs)),
174
174
  message
175
175
  );
176
176
  }
package/dist/index.js CHANGED
@@ -4,137 +4,137 @@ var { hasOwnProperty: HAS_OWN } = Object.prototype;
4
4
  function bunshinClone(source, options = EMPTY_OPTIONS, refs = /* @__PURE__ */ new WeakMap()) {
5
5
  return clone(source, options, refs);
6
6
  }
7
- function clone(node, options, refs) {
8
- if (!isObject(node)) {
9
- return node;
7
+ function clone(source, options, refs) {
8
+ if (!isObject(source)) {
9
+ return source;
10
10
  }
11
- const ref = refs.get(node);
11
+ const ref = refs.get(source);
12
12
  if (ref !== void 0) {
13
13
  return ref;
14
14
  }
15
15
  const settings = resolveOptions(options);
16
- if (settings.preserveDescriptors && isPlainObject(node)) {
17
- return cloneWithDescriptors(node, settings, refs);
16
+ if (settings.preserveDescriptors && isPlainObject(source)) {
17
+ return cloneWithDescriptors(source, settings, refs);
18
18
  }
19
- if (Array.isArray(node)) {
19
+ if (Array.isArray(source)) {
20
20
  const result = [];
21
- refs.set(node, result);
22
- for (let i = 0, l = node.length; i < l; i++) {
23
- result[i] = clone(node[i], settings, refs);
21
+ refs.set(source, result);
22
+ for (let i = 0, l = source.length; i < l; i++) {
23
+ result[i] = clone(source[i], settings, refs);
24
24
  }
25
25
  return result;
26
26
  }
27
- if (isPlainObject(node)) {
28
- const result = Object.create(Object.getPrototypeOf(node));
29
- refs.set(node, result);
30
- for (const key in node) {
31
- if (!HAS_OWN.call(node, key) || isUnsafeKey(key)) {
32
- continue;
27
+ if (isPlainObject(source)) {
28
+ const result = Object.create(Object.getPrototypeOf(source));
29
+ refs.set(source, result);
30
+ for (const key in source) {
31
+ if (HAS_OWN.call(source, key) && !isUnsafeKey(key)) {
32
+ result[key] = clone(source[key], settings, refs);
33
33
  }
34
- result[key] = clone(node[key], settings, refs);
35
34
  }
36
35
  return result;
37
36
  }
38
- if (node instanceof Map) {
37
+ if (source instanceof Map) {
39
38
  const result = /* @__PURE__ */ new Map();
40
- refs.set(node, result);
41
- for (const [key, value] of node) {
39
+ refs.set(source, result);
40
+ for (const [key, value] of source) {
42
41
  result.set(clone(key, settings, refs), clone(value, settings, refs));
43
42
  }
44
43
  return result;
45
44
  }
46
- if (node instanceof Set) {
45
+ if (source instanceof Set) {
47
46
  const result = /* @__PURE__ */ new Set();
48
- refs.set(node, result);
49
- for (const item of node) {
47
+ refs.set(source, result);
48
+ for (const item of source) {
50
49
  result.add(clone(item, settings, refs));
51
50
  }
52
51
  return result;
53
52
  }
54
- if (node instanceof Date) {
55
- const result = new Date(node.getTime());
56
- refs.set(node, result);
53
+ if (source instanceof Date) {
54
+ const result = new Date(source.getTime());
55
+ refs.set(source, result);
57
56
  return result;
58
57
  }
59
- if (node instanceof RegExp) {
60
- const result = new RegExp(node.source, node.flags);
61
- refs.set(node, result);
62
- result.lastIndex = node.lastIndex;
58
+ if (source instanceof RegExp) {
59
+ const result = new RegExp(source.source, source.flags);
60
+ refs.set(source, result);
61
+ result.lastIndex = source.lastIndex;
63
62
  return result;
64
63
  }
65
- if (node instanceof ArrayBuffer) {
66
- const result = node.slice(0);
67
- refs.set(node, result);
64
+ if (source instanceof ArrayBuffer) {
65
+ const result = source.slice(0);
66
+ refs.set(source, result);
68
67
  return result;
69
68
  }
70
- if (ArrayBuffer.isView(node)) {
71
- const { buffer, byteOffset, byteLength } = node;
72
- if (node instanceof DataView) {
69
+ if (ArrayBuffer.isView(source)) {
70
+ const { buffer, byteOffset, byteLength } = source;
71
+ if (source instanceof DataView) {
73
72
  const result2 = new DataView(buffer.slice(0), byteOffset, byteLength);
74
- refs.set(node, result2);
73
+ refs.set(source, result2);
75
74
  return result2;
76
75
  }
77
- const Ctor = node.constructor;
76
+ const Ctor = source.constructor;
78
77
  const result = new Ctor(buffer.slice(byteOffset, byteOffset + byteLength));
79
- refs.set(node, result);
78
+ refs.set(source, result);
80
79
  return result;
81
80
  }
82
- if (node instanceof DOMException || node instanceof Error) {
83
- return cloneError(node, settings, refs);
81
+ if (source instanceof DOMException || source instanceof Error) {
82
+ return cloneError(source, settings, refs);
84
83
  }
85
- if (node instanceof Blob) {
86
- const result = node.slice(0, node.size, node.type);
87
- refs.set(node, result);
84
+ if (source instanceof Blob) {
85
+ const result = source.slice(0, source.size, source.type);
86
+ refs.set(source, result);
88
87
  return result;
89
88
  }
90
- if (typeof ImageData !== "undefined" && node instanceof ImageData) {
91
- const { data, width, height, colorSpace } = node;
89
+ if (typeof ImageData !== "undefined" && source instanceof ImageData) {
90
+ const { data, width, height, colorSpace } = source;
92
91
  const result = new ImageData(new Uint8ClampedArray(data), width, height, {
93
92
  colorSpace
94
93
  });
95
- refs.set(node, result);
94
+ refs.set(source, result);
96
95
  return result;
97
96
  }
98
- if (node instanceof URL) {
99
- const result = new URL(node.href);
100
- refs.set(node, result);
97
+ if (source instanceof URL) {
98
+ const result = new URL(source.href);
99
+ refs.set(source, result);
101
100
  return result;
102
101
  }
103
- if (node instanceof URLSearchParams) {
102
+ if (source instanceof URLSearchParams) {
104
103
  const result = new URLSearchParams();
105
- refs.set(node, result);
106
- for (const [key, value] of node) {
104
+ refs.set(source, result);
105
+ for (const [key, value] of source) {
107
106
  result.append(key, value);
108
107
  }
109
108
  return result;
110
109
  }
111
- refs.set(node, node);
112
- return node;
110
+ refs.set(source, source);
111
+ return source;
113
112
  }
114
- function cloneError(value, settings, refs) {
115
- const result = createErrorInstance(value, settings, refs);
116
- refs.set(value, result);
117
- if (value instanceof DOMException) {
113
+ function cloneError(source, settings, refs) {
114
+ const result = createErrorInstance(source, settings, refs);
115
+ refs.set(source, result);
116
+ if (source instanceof DOMException) {
118
117
  return result;
119
118
  }
120
- if (value.stack) {
119
+ const { stack, cause } = source;
120
+ if (stack) {
121
121
  try {
122
- result.stack = value.stack;
122
+ result.stack = stack;
123
123
  } catch {
124
124
  }
125
125
  }
126
- if ("cause" in value && value.cause !== void 0) {
127
- result.cause = clone(value.cause, settings, refs);
126
+ if ("cause" in source && cause !== void 0) {
127
+ result.cause = clone(cause, settings, refs);
128
128
  }
129
- for (const key of Object.keys(value)) {
130
- Reflect.set(result, key, clone(Reflect.get(value, key), settings, refs));
129
+ for (const key of Object.keys(source)) {
130
+ Reflect.set(result, key, clone(Reflect.get(source, key), settings, refs));
131
131
  }
132
132
  return result;
133
133
  }
134
- function cloneWithDescriptors(node, settings, refs) {
135
- const result = Object.create(Object.getPrototypeOf(node));
136
- refs.set(node, result);
137
- const descs = Object.getOwnPropertyDescriptors(node);
134
+ function cloneWithDescriptors(source, settings, refs) {
135
+ const result = Object.create(Object.getPrototypeOf(source));
136
+ refs.set(source, result);
137
+ const descs = Object.getOwnPropertyDescriptors(source);
138
138
  forEachOwnKey(descs, (key) => {
139
139
  if (isUnsafeKey(key)) {
140
140
  return;
@@ -161,14 +161,14 @@ var ERROR_CTORS = {
161
161
  TypeError,
162
162
  URIError
163
163
  };
164
- function createErrorInstance(value, settings, refs) {
165
- const { message, name } = value;
166
- if (value instanceof DOMException) {
164
+ function createErrorInstance(source, settings, refs) {
165
+ const { message, name } = source;
166
+ if (source instanceof DOMException) {
167
167
  return new DOMException(message, name);
168
168
  }
169
- if (value instanceof AggregateError) {
169
+ if (source instanceof AggregateError) {
170
170
  return new AggregateError(
171
- value.errors.map((e) => clone(e, settings, refs)),
171
+ source.errors.map((e) => clone(e, settings, refs)),
172
172
  message
173
173
  );
174
174
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bunshin-clone",
3
- "version": "1.4.1",
3
+ "version": "1.4.3",
4
4
  "description": "High-performance deep clone utility with descriptor support",
5
5
  "keywords": [
6
6
  "array",