bunshin-clone 1.8.13 → 1.8.15

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/README.md CHANGED
@@ -47,7 +47,7 @@ If `true`, preserves shared backing buffers between TypedArray and DataView inst
47
47
 
48
48
  ### `preserveDescriptors`
49
49
 
50
- If `true`, preserves property descriptors (getters/setters, etc.).
50
+ If `true`, preserves property descriptors, including non-enumerable properties.
51
51
 
52
52
  ### `preserveSymbolKeys`
53
53
 
package/dist/index.cjs CHANGED
@@ -81,15 +81,18 @@ function clone(value, settings, refs) {
81
81
  refs.set(value, value);
82
82
  return value;
83
83
  }
84
- var IS_ENUMERABLE = Object.prototype.propertyIsEnumerable;
85
84
  var OWN_DESCS = Object.getOwnPropertyDescriptors;
86
- var OWN_NAMES = Object.getOwnPropertyNames;
87
- var OWN_SYMBOLS = Object.getOwnPropertySymbols;
85
+ var OWN_ENUM_STRING_KEYS = Object.keys;
86
+ var OWN_ENUM_SYMBOL_KEYS = (object) => OWN_SYMBOL_KEYS(object).filter(
87
+ (k) => Object.prototype.propertyIsEnumerable.call(object, k)
88
+ );
89
+ var OWN_STRING_KEYS = Object.getOwnPropertyNames;
90
+ var OWN_SYMBOL_KEYS = Object.getOwnPropertySymbols;
88
91
  function cloneWithDescriptors(object, settings, refs) {
89
92
  const result = Object.create(Object.getPrototypeOf(object));
90
93
  refs.set(object, result);
91
94
  const descs = OWN_DESCS(object);
92
- for (const key of OWN_NAMES(object)) {
95
+ for (const key of OWN_STRING_KEYS(object)) {
93
96
  if (isUnsafeKey(key)) {
94
97
  continue;
95
98
  }
@@ -106,13 +109,13 @@ function cloneWithDescriptors(object, settings, refs) {
106
109
  }
107
110
  }
108
111
  if (settings.preserveSymbolKeys) {
109
- for (const symbol of OWN_SYMBOLS(object)) {
110
- const desc = { ...descs[symbol] };
112
+ for (const key of OWN_SYMBOL_KEYS(object)) {
113
+ const desc = { ...descs[key] };
111
114
  if ("value" in desc) {
112
115
  desc.value = clone(desc.value, settings, refs);
113
116
  }
114
117
  try {
115
- Object.defineProperty(result, symbol, desc);
118
+ Object.defineProperty(result, key, desc);
116
119
  } catch (error) {
117
120
  if (settings.strictDescriptors) {
118
121
  throw error;
@@ -130,16 +133,14 @@ function cloneArray(array, settings, refs) {
130
133
  function clonePlainObject(object, settings, refs) {
131
134
  const result = Object.create(Object.getPrototypeOf(object));
132
135
  refs.set(object, result);
133
- for (const key of Object.keys(object)) {
136
+ for (const key of OWN_ENUM_STRING_KEYS(object)) {
134
137
  if (!isUnsafeKey(key)) {
135
138
  result[key] = clone(object[key], settings, refs);
136
139
  }
137
140
  }
138
141
  if (settings.preserveSymbolKeys) {
139
- for (const symbol of OWN_SYMBOLS(object)) {
140
- if (IS_ENUMERABLE.call(object, symbol)) {
141
- result[symbol] = clone(object[symbol], settings, refs);
142
- }
142
+ for (const key of OWN_ENUM_SYMBOL_KEYS(object)) {
143
+ result[key] = clone(object[key], settings, refs);
143
144
  }
144
145
  }
145
146
  return result;
@@ -212,7 +213,7 @@ function cloneError(error, settings, refs) {
212
213
  if ("cause" in error && cause !== void 0) {
213
214
  result.cause = clone(cause, settings, refs);
214
215
  }
215
- for (const key of Object.keys(error)) {
216
+ for (const key of OWN_ENUM_STRING_KEYS(error)) {
216
217
  Reflect.set(result, key, clone(Reflect.get(error, key), settings, refs));
217
218
  }
218
219
  return result;
package/dist/index.js CHANGED
@@ -79,15 +79,18 @@ function clone(value, settings, refs) {
79
79
  refs.set(value, value);
80
80
  return value;
81
81
  }
82
- var IS_ENUMERABLE = Object.prototype.propertyIsEnumerable;
83
82
  var OWN_DESCS = Object.getOwnPropertyDescriptors;
84
- var OWN_NAMES = Object.getOwnPropertyNames;
85
- var OWN_SYMBOLS = Object.getOwnPropertySymbols;
83
+ var OWN_ENUM_STRING_KEYS = Object.keys;
84
+ var OWN_ENUM_SYMBOL_KEYS = (object) => OWN_SYMBOL_KEYS(object).filter(
85
+ (k) => Object.prototype.propertyIsEnumerable.call(object, k)
86
+ );
87
+ var OWN_STRING_KEYS = Object.getOwnPropertyNames;
88
+ var OWN_SYMBOL_KEYS = Object.getOwnPropertySymbols;
86
89
  function cloneWithDescriptors(object, settings, refs) {
87
90
  const result = Object.create(Object.getPrototypeOf(object));
88
91
  refs.set(object, result);
89
92
  const descs = OWN_DESCS(object);
90
- for (const key of OWN_NAMES(object)) {
93
+ for (const key of OWN_STRING_KEYS(object)) {
91
94
  if (isUnsafeKey(key)) {
92
95
  continue;
93
96
  }
@@ -104,13 +107,13 @@ function cloneWithDescriptors(object, settings, refs) {
104
107
  }
105
108
  }
106
109
  if (settings.preserveSymbolKeys) {
107
- for (const symbol of OWN_SYMBOLS(object)) {
108
- const desc = { ...descs[symbol] };
110
+ for (const key of OWN_SYMBOL_KEYS(object)) {
111
+ const desc = { ...descs[key] };
109
112
  if ("value" in desc) {
110
113
  desc.value = clone(desc.value, settings, refs);
111
114
  }
112
115
  try {
113
- Object.defineProperty(result, symbol, desc);
116
+ Object.defineProperty(result, key, desc);
114
117
  } catch (error) {
115
118
  if (settings.strictDescriptors) {
116
119
  throw error;
@@ -128,16 +131,14 @@ function cloneArray(array, settings, refs) {
128
131
  function clonePlainObject(object, settings, refs) {
129
132
  const result = Object.create(Object.getPrototypeOf(object));
130
133
  refs.set(object, result);
131
- for (const key of Object.keys(object)) {
134
+ for (const key of OWN_ENUM_STRING_KEYS(object)) {
132
135
  if (!isUnsafeKey(key)) {
133
136
  result[key] = clone(object[key], settings, refs);
134
137
  }
135
138
  }
136
139
  if (settings.preserveSymbolKeys) {
137
- for (const symbol of OWN_SYMBOLS(object)) {
138
- if (IS_ENUMERABLE.call(object, symbol)) {
139
- result[symbol] = clone(object[symbol], settings, refs);
140
- }
140
+ for (const key of OWN_ENUM_SYMBOL_KEYS(object)) {
141
+ result[key] = clone(object[key], settings, refs);
141
142
  }
142
143
  }
143
144
  return result;
@@ -210,7 +211,7 @@ function cloneError(error, settings, refs) {
210
211
  if ("cause" in error && cause !== void 0) {
211
212
  result.cause = clone(cause, settings, refs);
212
213
  }
213
- for (const key of Object.keys(error)) {
214
+ for (const key of OWN_ENUM_STRING_KEYS(error)) {
214
215
  Reflect.set(result, key, clone(Reflect.get(error, key), settings, refs));
215
216
  }
216
217
  return result;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bunshin-clone",
3
- "version": "1.8.13",
3
+ "version": "1.8.15",
4
4
  "description": "High-performance deep clone utility with descriptor support",
5
5
  "keywords": [
6
6
  "array",