bunshin-clone 1.8.1 → 1.8.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
@@ -15,38 +15,10 @@ function clone(value, settings, refs) {
15
15
  return cloneWithDescriptors(value, settings, refs);
16
16
  }
17
17
  if (Array.isArray(value)) {
18
- if (isShallowArray(value)) {
19
- const result2 = value.slice();
20
- refs.set(value, result2);
21
- return result2;
22
- }
23
- const { length } = value;
24
- const result = new Array(length);
25
- refs.set(value, result);
26
- for (let i = 0; i < length; i++) {
27
- result[i] = clone(value[i], settings, refs);
28
- }
29
- return result;
18
+ return cloneArray(value, settings, refs);
30
19
  }
31
20
  if (isPlainObject(value)) {
32
- const result = Object.create(Object.getPrototypeOf(value));
33
- refs.set(value, result);
34
- if (!settings.preserveSymbolKeys) {
35
- for (const key in value) {
36
- if (isUnsafeKey(key) || !Object.hasOwn(value, key)) {
37
- continue;
38
- }
39
- result[key] = clone(value[key], settings, refs);
40
- }
41
- } else {
42
- for (const key of Reflect.ownKeys(value)) {
43
- if (isUnsafeKey(key) || !Object.propertyIsEnumerable.call(value, key)) {
44
- continue;
45
- }
46
- result[key] = clone(value[key], settings, refs);
47
- }
48
- }
49
- return result;
21
+ return clonePlainObject(value, settings, refs);
50
22
  }
51
23
  if (value instanceof Map) {
52
24
  const result = /* @__PURE__ */ new Map();
@@ -81,28 +53,11 @@ function clone(value, settings, refs) {
81
53
  return result;
82
54
  }
83
55
  if (ArrayBuffer.isView(value)) {
84
- if (value instanceof DataView) {
85
- const { buffer: buffer2, byteOffset: byteOffset2, byteLength } = value;
86
- const result2 = new DataView(
87
- cloneBuffer(buffer2, refs),
88
- byteOffset2,
89
- byteLength
90
- );
91
- refs.set(value, result2);
92
- return result2;
93
- }
94
- const view = value;
95
- if (!settings.preserveBufferSharing) {
96
- const Ctor2 = view.constructor;
97
- const result2 = new Ctor2(view);
98
- refs.set(value, result2);
99
- return result2;
100
- }
101
- const Ctor = view.constructor;
102
- const { buffer, byteOffset, length } = view;
103
- const result = new Ctor(cloneBuffer(buffer, refs), byteOffset, length);
104
- refs.set(value, result);
105
- return result;
56
+ return cloneArrayBufferView(
57
+ value,
58
+ settings,
59
+ refs
60
+ );
106
61
  }
107
62
  if (value instanceof DOMException || value instanceof Error) {
108
63
  return cloneError(value, settings, refs);
@@ -136,6 +91,85 @@ function clone(value, settings, refs) {
136
91
  refs.set(value, value);
137
92
  return value;
138
93
  }
94
+ function cloneWithDescriptors(object, settings, refs) {
95
+ const result = Object.create(Object.getPrototypeOf(object));
96
+ refs.set(object, result);
97
+ const descs = Object.getOwnPropertyDescriptors(object);
98
+ forEachOwnKey(descs, (key) => {
99
+ if (isUnsafeKey(key)) {
100
+ return;
101
+ }
102
+ const desc = { ...descs[key] };
103
+ if ("value" in desc) {
104
+ desc.value = clone(desc.value, settings, refs);
105
+ }
106
+ try {
107
+ Object.defineProperty(result, key, desc);
108
+ } catch (error) {
109
+ if (settings.strictDescriptors) {
110
+ throw error;
111
+ }
112
+ }
113
+ });
114
+ return result;
115
+ }
116
+ function cloneArray(array, settings, refs) {
117
+ if (isShallowArray(array)) {
118
+ const result2 = array.slice();
119
+ refs.set(array, result2);
120
+ return result2;
121
+ }
122
+ const { length } = array;
123
+ const result = new Array(length);
124
+ refs.set(array, result);
125
+ for (let i = 0; i < length; i++) {
126
+ result[i] = clone(array[i], settings, refs);
127
+ }
128
+ return result;
129
+ }
130
+ function clonePlainObject(object, settings, refs) {
131
+ const result = Object.create(Object.getPrototypeOf(object));
132
+ refs.set(object, result);
133
+ if (!settings.preserveSymbolKeys) {
134
+ for (const key in object) {
135
+ if (isUnsafeKey(key) || !Object.hasOwn(object, key)) {
136
+ continue;
137
+ }
138
+ result[key] = clone(object[key], settings, refs);
139
+ }
140
+ } else {
141
+ for (const key of Reflect.ownKeys(object)) {
142
+ if (isUnsafeKey(key) || !Object.propertyIsEnumerable.call(object, key)) {
143
+ continue;
144
+ }
145
+ result[key] = clone(object[key], settings, refs);
146
+ }
147
+ }
148
+ return result;
149
+ }
150
+ function cloneArrayBufferView(view, settings, refs) {
151
+ if (view instanceof DataView) {
152
+ const { buffer: buffer2, byteOffset: byteOffset2, byteLength } = view;
153
+ const result2 = new DataView(
154
+ cloneBuffer(buffer2, refs),
155
+ byteOffset2,
156
+ byteLength
157
+ );
158
+ refs.set(view, result2);
159
+ return result2;
160
+ }
161
+ if (!settings.preserveBufferSharing) {
162
+ const Ctor2 = view.constructor;
163
+ const result2 = new Ctor2(view);
164
+ refs.set(view, result2);
165
+ return result2;
166
+ }
167
+ const Ctor = view.constructor;
168
+ const { buffer, byteOffset, length } = view;
169
+ const result = new Ctor(cloneBuffer(buffer, refs), byteOffset, length);
170
+ refs.set(view, result);
171
+ return result;
172
+ }
139
173
  function cloneBuffer(buffer, refs) {
140
174
  if (refs.has(buffer)) {
141
175
  return refs.get(buffer);
@@ -165,28 +199,6 @@ function cloneError(error, settings, refs) {
165
199
  }
166
200
  return result;
167
201
  }
168
- function cloneWithDescriptors(object, settings, refs) {
169
- const result = Object.create(Object.getPrototypeOf(object));
170
- refs.set(object, result);
171
- const descs = Object.getOwnPropertyDescriptors(object);
172
- forEachOwnKey(descs, (key) => {
173
- if (isUnsafeKey(key)) {
174
- return;
175
- }
176
- const desc = { ...descs[key] };
177
- if ("value" in desc) {
178
- desc.value = clone(desc.value, settings, refs);
179
- }
180
- try {
181
- Object.defineProperty(result, key, desc);
182
- } catch (error) {
183
- if (settings.strictDescriptors) {
184
- throw error;
185
- }
186
- }
187
- });
188
- return result;
189
- }
190
202
  var ERROR_CTORS = {
191
203
  EvalError,
192
204
  RangeError,
package/dist/index.js CHANGED
@@ -13,38 +13,10 @@ function clone(value, settings, refs) {
13
13
  return cloneWithDescriptors(value, settings, refs);
14
14
  }
15
15
  if (Array.isArray(value)) {
16
- if (isShallowArray(value)) {
17
- const result2 = value.slice();
18
- refs.set(value, result2);
19
- return result2;
20
- }
21
- const { length } = value;
22
- const result = new Array(length);
23
- refs.set(value, result);
24
- for (let i = 0; i < length; i++) {
25
- result[i] = clone(value[i], settings, refs);
26
- }
27
- return result;
16
+ return cloneArray(value, settings, refs);
28
17
  }
29
18
  if (isPlainObject(value)) {
30
- const result = Object.create(Object.getPrototypeOf(value));
31
- refs.set(value, result);
32
- if (!settings.preserveSymbolKeys) {
33
- for (const key in value) {
34
- if (isUnsafeKey(key) || !Object.hasOwn(value, key)) {
35
- continue;
36
- }
37
- result[key] = clone(value[key], settings, refs);
38
- }
39
- } else {
40
- for (const key of Reflect.ownKeys(value)) {
41
- if (isUnsafeKey(key) || !Object.propertyIsEnumerable.call(value, key)) {
42
- continue;
43
- }
44
- result[key] = clone(value[key], settings, refs);
45
- }
46
- }
47
- return result;
19
+ return clonePlainObject(value, settings, refs);
48
20
  }
49
21
  if (value instanceof Map) {
50
22
  const result = /* @__PURE__ */ new Map();
@@ -79,28 +51,11 @@ function clone(value, settings, refs) {
79
51
  return result;
80
52
  }
81
53
  if (ArrayBuffer.isView(value)) {
82
- if (value instanceof DataView) {
83
- const { buffer: buffer2, byteOffset: byteOffset2, byteLength } = value;
84
- const result2 = new DataView(
85
- cloneBuffer(buffer2, refs),
86
- byteOffset2,
87
- byteLength
88
- );
89
- refs.set(value, result2);
90
- return result2;
91
- }
92
- const view = value;
93
- if (!settings.preserveBufferSharing) {
94
- const Ctor2 = view.constructor;
95
- const result2 = new Ctor2(view);
96
- refs.set(value, result2);
97
- return result2;
98
- }
99
- const Ctor = view.constructor;
100
- const { buffer, byteOffset, length } = view;
101
- const result = new Ctor(cloneBuffer(buffer, refs), byteOffset, length);
102
- refs.set(value, result);
103
- return result;
54
+ return cloneArrayBufferView(
55
+ value,
56
+ settings,
57
+ refs
58
+ );
104
59
  }
105
60
  if (value instanceof DOMException || value instanceof Error) {
106
61
  return cloneError(value, settings, refs);
@@ -134,6 +89,85 @@ function clone(value, settings, refs) {
134
89
  refs.set(value, value);
135
90
  return value;
136
91
  }
92
+ function cloneWithDescriptors(object, settings, refs) {
93
+ const result = Object.create(Object.getPrototypeOf(object));
94
+ refs.set(object, result);
95
+ const descs = Object.getOwnPropertyDescriptors(object);
96
+ forEachOwnKey(descs, (key) => {
97
+ if (isUnsafeKey(key)) {
98
+ return;
99
+ }
100
+ const desc = { ...descs[key] };
101
+ if ("value" in desc) {
102
+ desc.value = clone(desc.value, settings, refs);
103
+ }
104
+ try {
105
+ Object.defineProperty(result, key, desc);
106
+ } catch (error) {
107
+ if (settings.strictDescriptors) {
108
+ throw error;
109
+ }
110
+ }
111
+ });
112
+ return result;
113
+ }
114
+ function cloneArray(array, settings, refs) {
115
+ if (isShallowArray(array)) {
116
+ const result2 = array.slice();
117
+ refs.set(array, result2);
118
+ return result2;
119
+ }
120
+ const { length } = array;
121
+ const result = new Array(length);
122
+ refs.set(array, result);
123
+ for (let i = 0; i < length; i++) {
124
+ result[i] = clone(array[i], settings, refs);
125
+ }
126
+ return result;
127
+ }
128
+ function clonePlainObject(object, settings, refs) {
129
+ const result = Object.create(Object.getPrototypeOf(object));
130
+ refs.set(object, result);
131
+ if (!settings.preserveSymbolKeys) {
132
+ for (const key in object) {
133
+ if (isUnsafeKey(key) || !Object.hasOwn(object, key)) {
134
+ continue;
135
+ }
136
+ result[key] = clone(object[key], settings, refs);
137
+ }
138
+ } else {
139
+ for (const key of Reflect.ownKeys(object)) {
140
+ if (isUnsafeKey(key) || !Object.propertyIsEnumerable.call(object, key)) {
141
+ continue;
142
+ }
143
+ result[key] = clone(object[key], settings, refs);
144
+ }
145
+ }
146
+ return result;
147
+ }
148
+ function cloneArrayBufferView(view, settings, refs) {
149
+ if (view instanceof DataView) {
150
+ const { buffer: buffer2, byteOffset: byteOffset2, byteLength } = view;
151
+ const result2 = new DataView(
152
+ cloneBuffer(buffer2, refs),
153
+ byteOffset2,
154
+ byteLength
155
+ );
156
+ refs.set(view, result2);
157
+ return result2;
158
+ }
159
+ if (!settings.preserveBufferSharing) {
160
+ const Ctor2 = view.constructor;
161
+ const result2 = new Ctor2(view);
162
+ refs.set(view, result2);
163
+ return result2;
164
+ }
165
+ const Ctor = view.constructor;
166
+ const { buffer, byteOffset, length } = view;
167
+ const result = new Ctor(cloneBuffer(buffer, refs), byteOffset, length);
168
+ refs.set(view, result);
169
+ return result;
170
+ }
137
171
  function cloneBuffer(buffer, refs) {
138
172
  if (refs.has(buffer)) {
139
173
  return refs.get(buffer);
@@ -163,28 +197,6 @@ function cloneError(error, settings, refs) {
163
197
  }
164
198
  return result;
165
199
  }
166
- function cloneWithDescriptors(object, settings, refs) {
167
- const result = Object.create(Object.getPrototypeOf(object));
168
- refs.set(object, result);
169
- const descs = Object.getOwnPropertyDescriptors(object);
170
- forEachOwnKey(descs, (key) => {
171
- if (isUnsafeKey(key)) {
172
- return;
173
- }
174
- const desc = { ...descs[key] };
175
- if ("value" in desc) {
176
- desc.value = clone(desc.value, settings, refs);
177
- }
178
- try {
179
- Object.defineProperty(result, key, desc);
180
- } catch (error) {
181
- if (settings.strictDescriptors) {
182
- throw error;
183
- }
184
- }
185
- });
186
- return result;
187
- }
188
200
  var ERROR_CTORS = {
189
201
  EvalError,
190
202
  RangeError,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bunshin-clone",
3
- "version": "1.8.1",
3
+ "version": "1.8.2",
4
4
  "description": "High-performance deep clone utility with descriptor support",
5
5
  "keywords": [
6
6
  "array",
@@ -73,8 +73,5 @@
73
73
  },
74
74
  "allowScripts": {
75
75
  "esbuild": true
76
- },
77
- "dependencies": {
78
- "bunshin-clone-npm": "npm:bunshin-clone@^1.8.0"
79
76
  }
80
77
  }