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 +86 -74
- package/dist/index.js +86 -74
- package/package.json +1 -4
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
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.
|
|
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
|
}
|