bunshin-clone 1.4.1 → 1.4.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/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)) {
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
34
  continue;
35
35
  }
36
- result[key] = clone(node[key], settings, refs);
36
+ result[key] = clone(source[key], settings, refs);
37
37
  }
38
38
  return result;
39
39
  }
40
- if (node instanceof Map) {
40
+ if (source instanceof Map) {
41
41
  const result = /* @__PURE__ */ new Map();
42
- refs.set(node, result);
43
- for (const [key, value] of node) {
42
+ refs.set(source, result);
43
+ for (const [key, value] of source) {
44
44
  result.set(clone(key, settings, refs), clone(value, settings, refs));
45
45
  }
46
46
  return result;
47
47
  }
48
- if (node instanceof Set) {
48
+ if (source instanceof Set) {
49
49
  const result = /* @__PURE__ */ new Set();
50
- refs.set(node, result);
51
- for (const item of node) {
50
+ refs.set(source, result);
51
+ for (const item of source) {
52
52
  result.add(clone(item, settings, refs));
53
53
  }
54
54
  return result;
55
55
  }
56
- if (node instanceof Date) {
57
- const result = new Date(node.getTime());
58
- refs.set(node, result);
56
+ if (source instanceof Date) {
57
+ const result = new Date(source.getTime());
58
+ refs.set(source, result);
59
59
  return result;
60
60
  }
61
- if (node instanceof RegExp) {
62
- const result = new RegExp(node.source, node.flags);
63
- refs.set(node, result);
64
- result.lastIndex = node.lastIndex;
61
+ if (source instanceof RegExp) {
62
+ const result = new RegExp(source.source, source.flags);
63
+ refs.set(source, result);
64
+ result.lastIndex = source.lastIndex;
65
65
  return result;
66
66
  }
67
- if (node instanceof ArrayBuffer) {
68
- const result = node.slice(0);
69
- refs.set(node, result);
67
+ if (source instanceof ArrayBuffer) {
68
+ const result = source.slice(0);
69
+ refs.set(source, result);
70
70
  return result;
71
71
  }
72
- if (ArrayBuffer.isView(node)) {
73
- const { buffer, byteOffset, byteLength } = node;
74
- if (node instanceof DataView) {
72
+ if (ArrayBuffer.isView(source)) {
73
+ const { buffer, byteOffset, byteLength } = source;
74
+ if (source instanceof DataView) {
75
75
  const result2 = new DataView(buffer.slice(0), byteOffset, byteLength);
76
- refs.set(node, result2);
76
+ refs.set(source, result2);
77
77
  return result2;
78
78
  }
79
- const Ctor = node.constructor;
79
+ const Ctor = source.constructor;
80
80
  const result = new Ctor(buffer.slice(byteOffset, byteOffset + byteLength));
81
- refs.set(node, result);
81
+ refs.set(source, result);
82
82
  return result;
83
83
  }
84
- if (node instanceof DOMException || node instanceof Error) {
85
- return cloneError(node, settings, refs);
84
+ if (source instanceof DOMException || source instanceof Error) {
85
+ return cloneError(source, settings, refs);
86
86
  }
87
- if (node instanceof Blob) {
88
- const result = node.slice(0, node.size, node.type);
89
- refs.set(node, result);
87
+ if (source instanceof Blob) {
88
+ const result = source.slice(0, source.size, source.type);
89
+ refs.set(source, result);
90
90
  return result;
91
91
  }
92
- if (typeof ImageData !== "undefined" && node instanceof ImageData) {
93
- const { data, width, height, colorSpace } = node;
92
+ if (typeof ImageData !== "undefined" && source instanceof ImageData) {
93
+ const { data, width, height, colorSpace } = source;
94
94
  const result = new ImageData(new Uint8ClampedArray(data), width, height, {
95
95
  colorSpace
96
96
  });
97
- refs.set(node, result);
97
+ refs.set(source, result);
98
98
  return result;
99
99
  }
100
- if (node instanceof URL) {
101
- const result = new URL(node.href);
102
- refs.set(node, result);
100
+ if (source instanceof URL) {
101
+ const result = new URL(source.href);
102
+ refs.set(source, result);
103
103
  return result;
104
104
  }
105
- if (node instanceof URLSearchParams) {
105
+ if (source instanceof URLSearchParams) {
106
106
  const result = new URLSearchParams();
107
- refs.set(node, result);
108
- for (const [key, value] of node) {
107
+ refs.set(source, result);
108
+ for (const [key, value] of source) {
109
109
  result.append(key, value);
110
110
  }
111
111
  return result;
112
112
  }
113
- refs.set(node, node);
114
- return node;
113
+ refs.set(source, source);
114
+ return source;
115
115
  }
116
- function cloneError(value, settings, refs) {
117
- const result = createErrorInstance(value, settings, refs);
118
- refs.set(value, result);
119
- if (value instanceof DOMException) {
116
+ function cloneError(source, settings, refs) {
117
+ const result = createErrorInstance(source, settings, refs);
118
+ refs.set(source, result);
119
+ if (source instanceof DOMException) {
120
120
  return result;
121
121
  }
122
- if (value.stack) {
122
+ if (source.stack) {
123
123
  try {
124
- result.stack = value.stack;
124
+ result.stack = source.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 && source.cause !== void 0) {
129
+ result.cause = clone(source.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)) {
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
32
  continue;
33
33
  }
34
- result[key] = clone(node[key], settings, refs);
34
+ result[key] = clone(source[key], settings, refs);
35
35
  }
36
36
  return result;
37
37
  }
38
- if (node instanceof Map) {
38
+ if (source instanceof Map) {
39
39
  const result = /* @__PURE__ */ new Map();
40
- refs.set(node, result);
41
- for (const [key, value] of node) {
40
+ refs.set(source, result);
41
+ for (const [key, value] of source) {
42
42
  result.set(clone(key, settings, refs), clone(value, settings, refs));
43
43
  }
44
44
  return result;
45
45
  }
46
- if (node instanceof Set) {
46
+ if (source instanceof Set) {
47
47
  const result = /* @__PURE__ */ new Set();
48
- refs.set(node, result);
49
- for (const item of node) {
48
+ refs.set(source, result);
49
+ for (const item of source) {
50
50
  result.add(clone(item, settings, refs));
51
51
  }
52
52
  return result;
53
53
  }
54
- if (node instanceof Date) {
55
- const result = new Date(node.getTime());
56
- refs.set(node, result);
54
+ if (source instanceof Date) {
55
+ const result = new Date(source.getTime());
56
+ refs.set(source, result);
57
57
  return result;
58
58
  }
59
- if (node instanceof RegExp) {
60
- const result = new RegExp(node.source, node.flags);
61
- refs.set(node, result);
62
- result.lastIndex = node.lastIndex;
59
+ if (source instanceof RegExp) {
60
+ const result = new RegExp(source.source, source.flags);
61
+ refs.set(source, result);
62
+ result.lastIndex = source.lastIndex;
63
63
  return result;
64
64
  }
65
- if (node instanceof ArrayBuffer) {
66
- const result = node.slice(0);
67
- refs.set(node, result);
65
+ if (source instanceof ArrayBuffer) {
66
+ const result = source.slice(0);
67
+ refs.set(source, result);
68
68
  return result;
69
69
  }
70
- if (ArrayBuffer.isView(node)) {
71
- const { buffer, byteOffset, byteLength } = node;
72
- if (node instanceof DataView) {
70
+ if (ArrayBuffer.isView(source)) {
71
+ const { buffer, byteOffset, byteLength } = source;
72
+ if (source instanceof DataView) {
73
73
  const result2 = new DataView(buffer.slice(0), byteOffset, byteLength);
74
- refs.set(node, result2);
74
+ refs.set(source, result2);
75
75
  return result2;
76
76
  }
77
- const Ctor = node.constructor;
77
+ const Ctor = source.constructor;
78
78
  const result = new Ctor(buffer.slice(byteOffset, byteOffset + byteLength));
79
- refs.set(node, result);
79
+ refs.set(source, result);
80
80
  return result;
81
81
  }
82
- if (node instanceof DOMException || node instanceof Error) {
83
- return cloneError(node, settings, refs);
82
+ if (source instanceof DOMException || source instanceof Error) {
83
+ return cloneError(source, settings, refs);
84
84
  }
85
- if (node instanceof Blob) {
86
- const result = node.slice(0, node.size, node.type);
87
- refs.set(node, result);
85
+ if (source instanceof Blob) {
86
+ const result = source.slice(0, source.size, source.type);
87
+ refs.set(source, result);
88
88
  return result;
89
89
  }
90
- if (typeof ImageData !== "undefined" && node instanceof ImageData) {
91
- const { data, width, height, colorSpace } = node;
90
+ if (typeof ImageData !== "undefined" && source instanceof ImageData) {
91
+ const { data, width, height, colorSpace } = source;
92
92
  const result = new ImageData(new Uint8ClampedArray(data), width, height, {
93
93
  colorSpace
94
94
  });
95
- refs.set(node, result);
95
+ refs.set(source, result);
96
96
  return result;
97
97
  }
98
- if (node instanceof URL) {
99
- const result = new URL(node.href);
100
- refs.set(node, result);
98
+ if (source instanceof URL) {
99
+ const result = new URL(source.href);
100
+ refs.set(source, result);
101
101
  return result;
102
102
  }
103
- if (node instanceof URLSearchParams) {
103
+ if (source instanceof URLSearchParams) {
104
104
  const result = new URLSearchParams();
105
- refs.set(node, result);
106
- for (const [key, value] of node) {
105
+ refs.set(source, result);
106
+ for (const [key, value] of source) {
107
107
  result.append(key, value);
108
108
  }
109
109
  return result;
110
110
  }
111
- refs.set(node, node);
112
- return node;
111
+ refs.set(source, source);
112
+ return source;
113
113
  }
114
- function cloneError(value, settings, refs) {
115
- const result = createErrorInstance(value, settings, refs);
116
- refs.set(value, result);
117
- if (value instanceof DOMException) {
114
+ function cloneError(source, settings, refs) {
115
+ const result = createErrorInstance(source, settings, refs);
116
+ refs.set(source, result);
117
+ if (source instanceof DOMException) {
118
118
  return result;
119
119
  }
120
- if (value.stack) {
120
+ if (source.stack) {
121
121
  try {
122
- result.stack = value.stack;
122
+ result.stack = source.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 && source.cause !== void 0) {
127
+ result.cause = clone(source.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.2",
4
4
  "description": "High-performance deep clone utility with descriptor support",
5
5
  "keywords": [
6
6
  "array",