@oscarpalmer/atoms 0.196.1 → 0.198.0

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.mjs CHANGED
@@ -4,6 +4,7 @@ function getArrayCallback(value) {
4
4
  case "function": return value;
5
5
  case "number":
6
6
  case "string": return typeof value === "string" && value.includes(".") ? void 0 : (obj) => obj[value];
7
+ default: return;
7
8
  }
8
9
  }
9
10
  function getArrayCallbacks(bool, key, value) {
@@ -101,15 +102,17 @@ function filter(array, ...parameters) {
101
102
  return findValues("all", array, parameters).matched;
102
103
  }
103
104
  filter.remove = exclude;
105
+ Object.defineProperty(filter, "remove", { value: exclude });
104
106
  //#endregion
105
107
  //#region src/array/first.ts
106
108
  function first(array, ...parameters) {
107
109
  return findAbsoluteValueOrDefault(array, parameters, void 0, false, false);
108
110
  }
109
- first.default = firstOrDefault;
110
111
  function firstOrDefault(array, defaultValue, ...parameters) {
111
112
  return findAbsoluteValueOrDefault(array, parameters, defaultValue, true, false);
112
113
  }
114
+ first.default = firstOrDefault;
115
+ Object.defineProperty(first, "default", { value: firstOrDefault });
113
116
  //#endregion
114
117
  //#region src/internal/array/group.ts
115
118
  function groupValues(array, key, value, arrays) {
@@ -134,10 +137,11 @@ function groupValues(array, key, value, arrays) {
134
137
  function groupBy(array, first, second) {
135
138
  return groupValues(array, first, second, false);
136
139
  }
137
- groupBy.arrays = groupArraysBy;
138
140
  function groupArraysBy(array, first, second) {
139
141
  return groupValues(array, first, second, true);
140
142
  }
143
+ groupBy.arrays = groupArraysBy;
144
+ Object.defineProperty(groupBy, "arrays", { value: groupArraysBy });
141
145
  //#endregion
142
146
  //#region src/internal/array/chunk.ts
143
147
  /**
@@ -378,10 +382,11 @@ function getArray(value, indiced) {
378
382
  function indexOf(array, ...parameters) {
379
383
  return findValue(FIND_VALUE_INDEX, array, parameters, false);
380
384
  }
381
- indexOf.last = lastIndexOf;
382
385
  function lastIndexOf(array, ...parameters) {
383
386
  return findValue(FIND_VALUE_INDEX, array, parameters, true);
384
387
  }
388
+ indexOf.last = lastIndexOf;
389
+ Object.defineProperty(indexOf, "last", { value: lastIndexOf });
385
390
  //#endregion
386
391
  //#region src/internal/array/match.ts
387
392
  function endsWithArray(haystack, needle, key) {
@@ -532,10 +537,11 @@ function exists(array, ...parameters) {
532
537
  function find(array, ...parameters) {
533
538
  return findValue(FIND_VALUE_ITEM, array, parameters, false);
534
539
  }
535
- find.last = findLast;
536
540
  function findLast(array, ...parameters) {
537
541
  return findValue(FIND_VALUE_ITEM, array, parameters, true);
538
542
  }
543
+ find.last = findLast;
544
+ Object.defineProperty(find, "last", { value: findLast });
539
545
  //#endregion
540
546
  //#region src/array/flatten.ts
541
547
  /**
@@ -782,10 +788,11 @@ function update(array, values, key) {
782
788
  function last(array, ...parameters) {
783
789
  return findAbsoluteValueOrDefault(array, parameters, void 0, false, true);
784
790
  }
785
- last.default = lastOrDefault;
786
791
  function lastOrDefault(array, defaultValue, ...parameters) {
787
792
  return findAbsoluteValueOrDefault(array, parameters, defaultValue, true, true);
788
793
  }
794
+ last.default = lastOrDefault;
795
+ Object.defineProperty(last, "default", { value: lastOrDefault });
789
796
  //#endregion
790
797
  //#region src/internal/array/overlap.ts
791
798
  function arraysOverlap(first, second) {
@@ -830,8 +837,6 @@ function move(array, from, to, key) {
830
837
  else array.splice(next, 0, ...firstArray);
831
838
  return array;
832
839
  }
833
- move.indices = moveIndices;
834
- move.toIndex = moveToIndex;
835
840
  /**
836
841
  * Move an item from one index to another within an array
837
842
  *
@@ -879,6 +884,12 @@ function moveToIndex(array, value, index, key) {
879
884
  else array.splice(next, 0, ...values);
880
885
  return array;
881
886
  }
887
+ move.indices = moveIndices;
888
+ move.toIndex = moveToIndex;
889
+ Object.defineProperties(move, {
890
+ indices: { value: moveIndices },
891
+ toIndex: { value: moveToIndex }
892
+ });
882
893
  //#endregion
883
894
  //#region src/internal/math/aggregate.ts
884
895
  function aggregate(type, array, key, first) {
@@ -1117,14 +1128,6 @@ function compare(first, second) {
1117
1128
  }
1118
1129
  return 0;
1119
1130
  }
1120
- compare.handlers = getCompareHandlers(compare, {
1121
- callback: (first, second, compareStrings) => {
1122
- if (compareStrings) return getString(first).localeCompare(getString(second));
1123
- },
1124
- method: COMPARE_NAME
1125
- });
1126
- compare.deregister = deregisterComparator;
1127
- compare.register = registerComparator;
1128
1131
  function compareNumbers(first, second) {
1129
1132
  if (Object.is(first, second)) return 0;
1130
1133
  if (Number.isNaN(first)) return -1;
@@ -1171,6 +1174,18 @@ const comparators = {
1171
1174
  number: compareNumbers,
1172
1175
  symbol: compareSymbols
1173
1176
  };
1177
+ const compareHandlers = getCompareHandlers(compare, {
1178
+ callback: (first, second, compareStrings) => compareStrings ? getString(first).localeCompare(getString(second)) : void 0,
1179
+ method: COMPARE_NAME
1180
+ });
1181
+ compare.deregister = deregisterComparator;
1182
+ compare.handlers = compareHandlers;
1183
+ compare.register = registerComparator;
1184
+ Object.defineProperties(compare, {
1185
+ deregister: { value: deregisterComparator },
1186
+ handlers: { value: compareHandlers },
1187
+ register: { value: registerComparator }
1188
+ });
1174
1189
  //#endregion
1175
1190
  //#region src/array/sort.ts
1176
1191
  function getComparisonSorter(callback, modifier) {
@@ -1298,9 +1313,6 @@ function sortArray(array, sorters) {
1298
1313
  const { length } = sorters;
1299
1314
  return array.length > 1 ? array.sort((first, second) => getComparisonValue(first, second, sorters, length)) : array;
1300
1315
  }
1301
- sort.getIndex = getSortedIndex;
1302
- sort.initialize = initializeSorter;
1303
- sort.is = isSorted;
1304
1316
  const SORT_PEEK_PERCENTAGE = 10;
1305
1317
  const SORT_THRESHOLD = 100;
1306
1318
  const SORT_DIRECTION_ASCENDING = "ascending";
@@ -1309,6 +1321,14 @@ const modifiers = {
1309
1321
  [SORT_DIRECTION_ASCENDING]: 1,
1310
1322
  [SORT_DIRECTION_DESCENDING]: -1
1311
1323
  };
1324
+ sort.getIndex = getSortedIndex;
1325
+ sort.initialize = initializeSorter;
1326
+ sort.is = isSorted;
1327
+ Object.defineProperties(sort, {
1328
+ getIndex: { value: getSortedIndex },
1329
+ initialize: { value: initializeSorter },
1330
+ is: { value: isSorted }
1331
+ });
1312
1332
  //#endregion
1313
1333
  //#region src/array/swap.ts
1314
1334
  function swap(array, first, second, third) {
@@ -1317,7 +1337,6 @@ function swap(array, first, second, third) {
1317
1337
  if (Array.isArray(first) && Array.isArray(second)) return swapArrays(array, first, second, third);
1318
1338
  return swapValues(array, first, second, third);
1319
1339
  }
1320
- swap.indices = swapIndices;
1321
1340
  function swapArrays(array, from, to, key) {
1322
1341
  if (from.length === 0 || to.length === 0) return array;
1323
1342
  if (from.length === 1 && to.length === 1) return swapValues(array, from[0], to[0], key);
@@ -1366,6 +1385,8 @@ function swapValues(array, from, to, key) {
1366
1385
  if (first === second || first === -1 || second === -1) return array;
1367
1386
  return swapIndices(array, first, second);
1368
1387
  }
1388
+ swap.indices = swapIndices;
1389
+ Object.defineProperty(swap, "indices", { value: swapIndices });
1369
1390
  //#endregion
1370
1391
  //#region src/array/to-map.ts
1371
1392
  function getMapValues(array, first, second, arrays) {
@@ -1388,19 +1409,21 @@ function getMapValues(array, first, second, arrays) {
1388
1409
  function toMap(array, first, second) {
1389
1410
  return getMapValues(array, first, second, false);
1390
1411
  }
1391
- toMap.arrays = toMapArrays;
1392
1412
  function toMapArrays(array, first, second) {
1393
1413
  return getMapValues(array, first, second, true);
1394
1414
  }
1415
+ toMap.arrays = toMapArrays;
1416
+ Object.defineProperty(toMap, "arrays", { value: toMapArrays });
1395
1417
  //#endregion
1396
1418
  //#region src/array/to-record.ts
1397
1419
  function toRecord(array, first, second) {
1398
1420
  return groupValues(array, first, second, false);
1399
1421
  }
1400
- toRecord.arrays = toRecordArrays;
1401
1422
  function toRecordArrays(array, first, second) {
1402
1423
  return groupValues(array, first, second, true);
1403
1424
  }
1425
+ toRecord.arrays = toRecordArrays;
1426
+ Object.defineProperty(toRecord, "arrays", { value: toRecordArrays });
1404
1427
  //#endregion
1405
1428
  //#region src/internal/function/misc.ts
1406
1429
  /**
@@ -1651,10 +1674,11 @@ const MISC_NESTED_MESSAGE_UNSAFE = "Access to this property is not allowed";
1651
1674
  function hasValue(data, path, ignoreCase) {
1652
1675
  return getNestedValue(data, path, ignoreCase === true).ok;
1653
1676
  }
1654
- hasValue.get = hasValueResult;
1655
1677
  function hasValueResult(data, path, ignoreCase) {
1656
1678
  return getNestedValue(data, path, ignoreCase === true);
1657
1679
  }
1680
+ hasValue.get = hasValueResult;
1681
+ Object.defineProperty(hasValue, "get", { value: hasValueResult });
1658
1682
  //#endregion
1659
1683
  //#region src/internal/function/assert.ts
1660
1684
  /**
@@ -1667,11 +1691,6 @@ function hasValueResult(data, path, ignoreCase) {
1667
1691
  function assert(condition, message, error) {
1668
1692
  if (!condition()) throw new (error ?? Error)(message);
1669
1693
  }
1670
- assert.condition = assertCondition;
1671
- assert.defined = assertDefined;
1672
- assert.instanceOf = assertInstanceOf;
1673
- assert.is = assertIs;
1674
- assert.property = assertProperty;
1675
1694
  /**
1676
1695
  * Creates an _Asserter_ that asserts a condition is true, throwing an error if it is not
1677
1696
  *
@@ -1749,6 +1768,18 @@ function assertProperty(path, condition, message, error) {
1749
1768
  };
1750
1769
  }
1751
1770
  const ASSERT_MESSAGE_VALUE_DEFINED = "Expected value to be defined";
1771
+ assert.condition = assertCondition;
1772
+ assert.defined = assertDefined;
1773
+ assert.instanceOf = assertInstanceOf;
1774
+ assert.is = assertIs;
1775
+ assert.property = assertProperty;
1776
+ Object.defineProperties(assert, {
1777
+ condition: { value: assertCondition },
1778
+ defined: { value: assertDefined },
1779
+ instanceOf: { value: assertInstanceOf },
1780
+ is: { value: assertIs },
1781
+ property: { value: assertProperty }
1782
+ });
1752
1783
  //#endregion
1753
1784
  //#region src/function/once.ts
1754
1785
  /**
@@ -2130,11 +2161,12 @@ var SizedMap = class extends Map {
2130
2161
  * @inheritdoc
2131
2162
  */
2132
2163
  get(key) {
2164
+ let value;
2133
2165
  if (super.has(key)) {
2134
- const value = super.get(key);
2166
+ value = super.get(key);
2135
2167
  this.#setValue(key, value, true);
2136
- return value;
2137
2168
  }
2169
+ return value;
2138
2170
  }
2139
2171
  /**
2140
2172
  * @inheritdoc
@@ -2825,10 +2857,11 @@ async function promises(items, options) {
2825
2857
  }));
2826
2858
  });
2827
2859
  }
2828
- promises.result = resultPromises;
2829
2860
  async function resultPromises(items, signal) {
2830
2861
  return promises(items, signal).then(getResultsFromPromises);
2831
2862
  }
2863
+ promises.result = resultPromises;
2864
+ Object.defineProperty(promises, "result", { value: resultPromises });
2832
2865
  //#endregion
2833
2866
  //#region src/result/index.ts
2834
2867
  async function asyncAttempt(value, err) {
@@ -3021,7 +3054,6 @@ function fuzzy(items, configuration) {
3021
3054
  });
3022
3055
  return Object.freeze(instance);
3023
3056
  }
3024
- fuzzy.match = fuzzyMatch;
3025
3057
  /**
3026
3058
  * Does the needle match the haystack in a fuzzy way?
3027
3059
  *
@@ -3128,6 +3160,8 @@ const FUZZY_LENGTH_DIVISOR = 3;
3128
3160
  const FUZZY_MESSAGE_ARRAY = "Fuzzy requires an array of items";
3129
3161
  const FUZZY_MESSAGE_HANDLER = "Fuzzy requires a key or function to stringify items";
3130
3162
  const FUZZY_PROXIMITY_THRESHOLD = 5;
3163
+ fuzzy.match = fuzzyMatch;
3164
+ Object.defineProperty(fuzzy, "match", { value: fuzzyMatch });
3131
3165
  //#endregion
3132
3166
  //#region src/string/index.ts
3133
3167
  function dedent(value, ...values) {
@@ -3273,7 +3307,6 @@ function initializeNormalizer(options) {
3273
3307
  function normalize(value, options) {
3274
3308
  return normalizeString(value, getNormalizeOptions(options));
3275
3309
  }
3276
- normalize.initialize = initializeNormalizer;
3277
3310
  function normalizeString(value, options) {
3278
3311
  if (typeof value !== "string") return "";
3279
3312
  let result = value;
@@ -3325,6 +3358,8 @@ const NORMALIZE_SPECIAL_REPLACEMENT = "";
3325
3358
  const NORMALIZE_WHITESPACE_PATTERN = /\s+/g;
3326
3359
  const NORMALIZE_WHITESPACE_REPLACEMENT = " ";
3327
3360
  let deburrMemoizer;
3361
+ normalize.initialize = initializeNormalizer;
3362
+ Object.defineProperty(normalize, "initialize", { value: initializeNormalizer });
3328
3363
  //#endregion
3329
3364
  //#region src/string/template.ts
3330
3365
  function getRenderer(strings, values) {
@@ -3370,115 +3405,110 @@ function template(value, ...parameters) {
3370
3405
  const { ignoreCase, pattern } = getTemplateOptions(parameters[1]);
3371
3406
  return handleTemplate(value, pattern, ignoreCase, parameters[0]);
3372
3407
  }
3373
- template.initialize = initializeTemplater;
3374
3408
  const TEMPLATE_EXPRESSION_VARIABLE = /{{([\s\S]+?)}}/g;
3409
+ template.initialize = initializeTemplater;
3410
+ Object.defineProperty(template, "initialize", { value: initializeTemplater });
3375
3411
  //#endregion
3376
3412
  //#region src/value/clone.ts
3377
3413
  const CLONE_NAME = "clone";
3378
- function clone(value, flat) {
3379
- return flat === true ? copy(value) : cloneValue(value, 0, /* @__PURE__ */ new WeakMap(), false);
3414
+ function clone(value, options) {
3415
+ return cloneAny(value, { copy: false }, 0, options);
3380
3416
  }
3381
- clone.handlers = getSelfHandlers(clone, {
3382
- callback: tryStructuredClone,
3383
- method: CLONE_NAME
3384
- });
3385
- clone.deregister = deregisterCloner;
3386
- clone.register = registerCloner;
3387
- function cloneArrayBuffer(value, depth, references) {
3388
- if (typeof depth === "number" && depth >= CLONE_MAX_DEPTH) return value;
3417
+ function cloneAny(value, parameters, depth, options) {
3418
+ switch (true) {
3419
+ case value === null || CLONE_PRIMITIVES[typeof value]: return value;
3420
+ case value instanceof Date: return new Date(value.getTime());
3421
+ case typeof value === "function":
3422
+ parameters.options ??= getCloneOptions(options);
3423
+ return parameters.options.copyFunctions ? value : void 0;
3424
+ case typeof value === "symbol":
3425
+ parameters.options ??= getCloneOptions(options);
3426
+ return parameters.options.copySymbols ? value : Symbol(value.description);
3427
+ }
3428
+ parameters.options ??= getCloneOptions(options);
3429
+ parameters.references ??= /* @__PURE__ */ new WeakMap();
3430
+ switch (true) {
3431
+ case parameters.references.has(value): return parameters.references.get(value);
3432
+ case value instanceof ArrayBuffer: return cloneArrayBuffer(value, parameters, depth);
3433
+ case value instanceof DataView: return cloneDataView(value, parameters, depth);
3434
+ case value instanceof RegExp: return cloneRegularExpression(value, parameters, depth);
3435
+ case value instanceof Map: return cloneMap(value, parameters, depth);
3436
+ case typeof Node !== "undefined" && value instanceof Node: return cloneNode(value, parameters, depth);
3437
+ case value instanceof Set: return cloneSet(value, parameters, depth);
3438
+ case isArrayOrPlainObject(value): return cloneObject(value, parameters, depth);
3439
+ case isTypedArray(value): return cloneTypedArray(value, parameters, depth);
3440
+ default: return parameters.copy ? value : clone.handlers.handle(value, parameters, depth);
3441
+ }
3442
+ }
3443
+ function cloneArrayBuffer(value, parameters, depth) {
3444
+ if (parameters.copy || depth >= CLONE_MAX_DEPTH) return value;
3389
3445
  const cloned = new ArrayBuffer(value.byteLength);
3390
3446
  new Uint8Array(cloned).set(new Uint8Array(value));
3391
- references?.set(value, cloned);
3447
+ parameters.references.set(value, cloned);
3392
3448
  return cloned;
3393
3449
  }
3394
- function cloneDataView(value, depth, references) {
3395
- if (depth >= CLONE_MAX_DEPTH) return value;
3396
- const buffer = cloneArrayBuffer(value.buffer);
3450
+ function cloneDataView(value, parameters, depth) {
3451
+ if (parameters.copy || depth >= CLONE_MAX_DEPTH) return value;
3452
+ const buffer = cloneArrayBuffer(value.buffer, parameters, depth);
3397
3453
  const cloned = new DataView(buffer, value.byteOffset, value.byteLength);
3398
- references.set(value, cloned);
3454
+ parameters.references.set(value, cloned);
3399
3455
  return cloned;
3400
3456
  }
3401
- function cloneMap(map, depth, references, flat) {
3457
+ function cloneMap(map, parameters, depth) {
3402
3458
  if (depth >= CLONE_MAX_DEPTH) return map;
3459
+ if (parameters.copy) return new Map(map);
3403
3460
  const cloned = /* @__PURE__ */ new Map();
3404
- const entries = map.entries();
3405
- for (const entry of entries) cloned.set(flat ? entry[0] : cloneValue(entry[0], depth + 1, references, false), flat ? entry[1] : cloneValue(entry[1], depth + 1, references, false));
3406
- references.set(map, cloned);
3461
+ for (const [key, value] of map.entries()) cloned.set(cloneAny(key, parameters, depth + 1), cloneAny(value, parameters, depth + 1));
3462
+ parameters.references.set(map, cloned);
3407
3463
  return cloned;
3408
3464
  }
3409
- function cloneNode(node, depth, references) {
3410
- if (depth >= CLONE_MAX_DEPTH) return node;
3465
+ function cloneNode(node, parameters, depth) {
3466
+ if (parameters.copy || depth >= CLONE_MAX_DEPTH) return node;
3411
3467
  const cloned = node.cloneNode(true);
3412
- references.set(node, cloned);
3468
+ parameters.references.set(node, cloned);
3413
3469
  return cloned;
3414
3470
  }
3415
- function cloneObject(value, depth, references, flat) {
3416
- if (flat || depth >= CLONE_MAX_DEPTH) return Array.isArray(value) ? value.slice() : { ...value };
3417
- const cloned = Array.isArray(value) ? [] : {};
3418
- const keys = [...Object.keys(value), ...Object.getOwnPropertySymbols(value)];
3419
- const { length } = keys;
3471
+ function cloneObject(value, parameters, depth) {
3472
+ if (depth >= CLONE_MAX_DEPTH) return value;
3473
+ const isArray = Array.isArray(value);
3474
+ if (parameters.copy) return isArray ? value.slice() : { ...value };
3475
+ const cloned = isArray ? [] : {};
3476
+ const keys = isArray ? void 0 : Object.keys(value);
3477
+ const { length } = keys ?? value;
3420
3478
  for (let index = 0; index < length; index += 1) {
3421
- const key = keys[index];
3422
- cloned[key] = cloneValue(value[key], depth + 1, references, false);
3479
+ const key = keys?.[index] ?? index;
3480
+ cloned[key] = cloneAny(value[key], parameters, depth + 1);
3423
3481
  }
3424
- references.set(value, cloned);
3482
+ parameters.references.set(value, cloned);
3425
3483
  return cloned;
3426
3484
  }
3427
- function cloneRegularExpression(value, depth, references) {
3428
- if (depth >= CLONE_MAX_DEPTH) return value;
3485
+ function cloneRegularExpression(value, parameters, depth) {
3486
+ if (parameters.copy || depth >= CLONE_MAX_DEPTH) return value;
3429
3487
  const cloned = new RegExp(value.source, value.flags);
3430
3488
  cloned.lastIndex = value.lastIndex;
3431
- references.set(value, cloned);
3489
+ parameters.references.set(value, cloned);
3432
3490
  return cloned;
3433
3491
  }
3434
- function cloneSet(set, depth, references, flat) {
3492
+ function cloneSet(set, parameters, depth) {
3435
3493
  if (depth >= CLONE_MAX_DEPTH) return set;
3494
+ if (parameters.copy) return new Set(set);
3436
3495
  const cloned = /* @__PURE__ */ new Set();
3437
- const values = [...set.values()];
3438
- const { length } = values;
3439
- for (let index = 0; index < length; index += 1) cloned.add(flat ? values[index] : cloneValue(values[index], depth + 1, references, false));
3440
- references.set(set, cloned);
3496
+ for (const value of set.values()) cloned.add(cloneAny(value, parameters, depth + 1));
3497
+ parameters.references.set(set, cloned);
3441
3498
  return cloned;
3442
3499
  }
3443
- function cloneTypedArray(value, depth, references) {
3444
- if (depth >= CLONE_MAX_DEPTH) return value;
3500
+ function cloneTypedArray(value, parameters, depth) {
3501
+ if (parameters.copy || depth >= CLONE_MAX_DEPTH) return value;
3445
3502
  const cloned = new value.constructor(value);
3446
- references.set(value, cloned);
3503
+ parameters.references.set(value, cloned);
3447
3504
  return cloned;
3448
3505
  }
3449
- function cloneValue(value, depth, references, flat) {
3450
- switch (true) {
3451
- case value == null:
3452
- case typeof value === "bigint":
3453
- case typeof value === "boolean":
3454
- case typeof value === "number":
3455
- case typeof value === "string": return value;
3456
- case typeof value === "function": return;
3457
- case typeof value === "symbol": return Symbol(value.description);
3458
- case references.has(value): return references.get(value);
3459
- case value instanceof ArrayBuffer: return cloneArrayBuffer(value, depth, references);
3460
- case value instanceof DataView: return cloneDataView(value, depth, references);
3461
- case value instanceof Date: return new Date(value.getTime());
3462
- case value instanceof RegExp: return cloneRegularExpression(value, depth, references);
3463
- case value instanceof Map: return cloneMap(value, depth, references, flat);
3464
- case typeof Node !== "undefined" && value instanceof Node: return cloneNode(value, depth, references);
3465
- case value instanceof Set: return cloneSet(value, depth, references, flat);
3466
- case isArrayOrPlainObject(value): return cloneObject(value, depth, references, flat);
3467
- case isTypedArray(value): return cloneTypedArray(value, depth, references);
3468
- default: return clone.handlers.handle(value, depth, references);
3469
- }
3470
- }
3471
- /**
3472
- * Copy any kind of value
3473
- *
3474
- * - Clones the value shallowly, without cloning nested values
3475
- * - To copy a value deeply, use `clone` instead
3476
- *
3477
- * @param value Value to copy
3478
- * @returns Copied value
3479
- */
3480
3506
  function copy(value) {
3481
- return cloneValue(value, 0, /* @__PURE__ */ new WeakMap(), true);
3507
+ return cloneAny(value, {
3508
+ copy: true,
3509
+ options: CLONE_COPY_OPTIONS,
3510
+ references: void 0
3511
+ }, 0);
3482
3512
  }
3483
3513
  /**
3484
3514
  * Deregister a clone handler for a specific class
@@ -3490,6 +3520,37 @@ function copy(value) {
3490
3520
  function deregisterCloner(constructor) {
3491
3521
  clone.handlers.deregister(constructor);
3492
3522
  }
3523
+ function getCloneOptions(input) {
3524
+ if (typeof input !== "object" || input === null) return CLONE_DEFAULT_OPTIONS;
3525
+ return {
3526
+ copyFunctions: input.copyFunctions === true,
3527
+ copySymbols: input.copySymbols === true
3528
+ };
3529
+ }
3530
+ /**
3531
+ * Create a cloner with predefined options
3532
+ *
3533
+ * _Available as `initializeCloner` and `clone.initialize`_
3534
+ *
3535
+ * @param options Clone options
3536
+ * @returns Cloner function
3537
+ */
3538
+ function initializeCloner(options) {
3539
+ const opts = getCloneOptions(options);
3540
+ function cloner(value) {
3541
+ return cloneAny(value, {
3542
+ copy: false,
3543
+ options: opts
3544
+ }, 0);
3545
+ }
3546
+ cloner.deregister = deregisterCloner;
3547
+ cloner.register = registerCloner;
3548
+ Object.defineProperties(cloner, {
3549
+ deregister: { value: deregisterCloner },
3550
+ register: { value: registerCloner }
3551
+ });
3552
+ return cloner;
3553
+ }
3493
3554
  /**
3494
3555
  * Register a clone handler for a specific class
3495
3556
  *
@@ -3501,25 +3562,59 @@ function deregisterCloner(constructor) {
3501
3562
  function registerCloner(constructor, handler) {
3502
3563
  clone.handlers.register(constructor, handler);
3503
3564
  }
3504
- function tryStructuredClone(value, depth, references) {
3565
+ function tryStructuredClone(value, parameters, depth) {
3505
3566
  if (depth >= CLONE_MAX_DEPTH) return value;
3506
3567
  try {
3507
3568
  const cloned = structuredClone(value);
3508
- references.set(value, cloned);
3569
+ parameters.references.set(value, cloned);
3509
3570
  return cloned;
3510
3571
  } catch {
3511
- references.set(value, value);
3572
+ parameters.references.set(value, value);
3512
3573
  return value;
3513
3574
  }
3514
3575
  }
3576
+ const CLONE_COPY_OPTIONS = {
3577
+ copyFunctions: true,
3578
+ copySymbols: true
3579
+ };
3580
+ const CLONE_DEFAULT_OPTIONS = {
3581
+ copyFunctions: false,
3582
+ copySymbols: false
3583
+ };
3515
3584
  const CLONE_MAX_DEPTH = 100;
3585
+ const cloneHandlers = getSelfHandlers(clone, {
3586
+ callback: tryStructuredClone,
3587
+ method: CLONE_NAME
3588
+ });
3589
+ const CLONE_PRIMITIVES = {
3590
+ bigint: true,
3591
+ boolean: true,
3592
+ function: false,
3593
+ number: true,
3594
+ object: false,
3595
+ string: true,
3596
+ symbol: false,
3597
+ undefined: true
3598
+ };
3599
+ clone.deregister = deregisterCloner;
3600
+ clone.handlers = cloneHandlers;
3601
+ clone.initialize = initializeCloner;
3602
+ clone.register = registerCloner;
3603
+ Object.defineProperties(clone, {
3604
+ deregister: { value: deregisterCloner },
3605
+ handlers: { value: cloneHandlers },
3606
+ initialize: { value: initializeCloner },
3607
+ register: { value: registerCloner }
3608
+ });
3516
3609
  //#endregion
3517
3610
  //#region src/value/collection.ts
3518
3611
  function inMap(map, value, key) {
3519
3612
  const getKey = key === true;
3520
3613
  if (!(map instanceof Map)) return getKey ? void 0 : false;
3521
3614
  if (!getKey) return inSet(new Set(map.values()), value);
3522
- for (const [key, item] of map) if (equal(item, value)) return key;
3615
+ let found;
3616
+ for (const [key, item] of map) if (equal(item, value)) found = key;
3617
+ return found;
3523
3618
  }
3524
3619
  /**
3525
3620
  * Does the value exist in a _Set_?
@@ -3648,8 +3743,6 @@ function flatFreeze(value) {
3648
3743
  function freeze(value, flat) {
3649
3744
  return freezeValue(value, /* @__PURE__ */ new WeakSet(), flat === true);
3650
3745
  }
3651
- freeze.flat = flatFreeze;
3652
- freeze.is = isFrozen;
3653
3746
  function freezeArray(array, references, flat) {
3654
3747
  if (flat) return Object.freeze(array);
3655
3748
  references.add(array);
@@ -3714,6 +3807,12 @@ function isFrozen(value) {
3714
3807
  return typeof value === "object" && value !== null && Object.isFrozen(value);
3715
3808
  }
3716
3809
  const frozenValues = /* @__PURE__ */ new WeakSet();
3810
+ freeze.flat = flatFreeze;
3811
+ freeze.is = isFrozen;
3812
+ Object.defineProperties(freeze, {
3813
+ flat: { value: flatFreeze },
3814
+ is: { value: isFrozen }
3815
+ });
3717
3816
  //#endregion
3718
3817
  //#region src/internal/value/partial.ts
3719
3818
  function partial(value, providedKeys, omit) {
@@ -3859,7 +3958,6 @@ function assign(to, from, options) {
3859
3958
  actual.assignValues = true;
3860
3959
  return mergeValues([to, ...from], actual);
3861
3960
  }
3862
- assign.initialize = initializeAssigner;
3863
3961
  function getMergeOptions(options) {
3864
3962
  const actual = {
3865
3963
  assignValues: false,
@@ -3913,7 +4011,6 @@ function initializeMerger(options) {
3913
4011
  function merge(values, options) {
3914
4012
  return mergeValues(values, getMergeOptions(options));
3915
4013
  }
3916
- merge.initialize = initializeMerger;
3917
4014
  function mergeObjects(values, options, destination, prefix) {
3918
4015
  const { length } = values;
3919
4016
  const isArray = Array.isArray(destination ?? values[0]);
@@ -3943,6 +4040,10 @@ function mergeValues(values, options, prefix) {
3943
4040
  if (actual.length > 1) return mergeObjects(actual, options, options.assignValues ? actual[0] : void 0, prefix);
3944
4041
  return options.assignValues ? actual[0] : Array.isArray(actual[0]) ? actual[0].slice() : { ...actual[0] };
3945
4042
  }
4043
+ assign.initialize = initializeAssigner;
4044
+ merge.initialize = initializeMerger;
4045
+ Object.defineProperty(assign, "initialize", { value: initializeAssigner });
4046
+ Object.defineProperty(merge, "initialize", { value: initializeMerger });
3946
4047
  //#endregion
3947
4048
  //#region src/value/transform.ts
3948
4049
  function getTransformer(input) {
@@ -3965,7 +4066,6 @@ function initializeTransformer(transform) {
3965
4066
  function transform(value, transform) {
3966
4067
  return transformValue(value, getTransformer(transform));
3967
4068
  }
3968
- transform.initialize = initializeTransformer;
3969
4069
  function transformValue(value, transformer) {
3970
4070
  if (isNonPlainObject(value)) return {};
3971
4071
  if (transformer == null) return value;
@@ -3979,6 +4079,8 @@ function transformValue(value, transformer) {
3979
4079
  }
3980
4080
  return value;
3981
4081
  }
4082
+ transform.initialize = initializeTransformer;
4083
+ Object.defineProperty(transform, "initialize", { value: initializeTransformer });
3982
4084
  //#endregion
3983
4085
  //#region src/internal/subscription.ts
3984
4086
  function addSubscription(subscriptions, subscription, state) {
@@ -6104,7 +6206,6 @@ function keyedQueue(callback, options) {
6104
6206
  function queue(callback, options) {
6105
6207
  return createQueue(callback, options);
6106
6208
  }
6107
- queue.keyed = keyedQueue;
6108
6209
  function removeQueue(state, key, id) {
6109
6210
  if (key == null) {
6110
6211
  handleQueues(state, QUEUE_HANDLE_CLEAR);
@@ -6180,6 +6281,8 @@ const QUEUE_STATUS_ACTIVE = "active";
6180
6281
  const QUEUE_STATUS_EMPTY = "empty";
6181
6282
  const QUEUE_STATUS_FULL = "full";
6182
6283
  const QUEUE_STATUS_PAUSED = "paused";
6284
+ queue.keyed = keyedQueue;
6285
+ Object.defineProperty(queue, "keyed", { value: keyedQueue });
6183
6286
  //#endregion
6184
6287
  //#region src/random.ts
6185
6288
  /**
@@ -6288,14 +6391,13 @@ var SizedSet = class extends Set {
6288
6391
  * @returns Found value if it exists, otherwise `undefined`
6289
6392
  */
6290
6393
  get(value, update) {
6291
- if (super.has(value)) {
6292
- if (update ?? false) {
6293
- super.delete(value);
6294
- this.add(value);
6295
- }
6296
- return value;
6394
+ if (!super.has(value)) return;
6395
+ if (update ?? false) {
6396
+ super.delete(value);
6397
+ this.add(value);
6297
6398
  }
6399
+ return value;
6298
6400
  }
6299
6401
  };
6300
6402
  //#endregion
6301
- export { CancelablePromise, Logger, PromiseTimeoutError, QueueError, RetryError, SORT_DIRECTION_ASCENDING, SORT_DIRECTION_DESCENDING, SizedMap, SizedSet, assert, assertCondition, assertDefined, assertInstanceOf, assertIs, assertProperty, assign, asyncAttempt, asyncDebounce, asyncFlow, asyncMatchResult, asyncOnce, asyncPipe, asyncThrottle, attempt, attemptAsyncFlow, attemptAsyncPipe, attemptFlow, attemptPipe, attemptPromise, average, beacon, between, camelCase, cancelable, capitalize, ceil, chunk, clamp, clone, compact, compare, copy, count, debounce, deburr, dedent, delay, deregisterCloner, deregisterComparator, deregisterEqualizer, diff, difference, drop, endsWith, endsWithArray, equal, error, exclude, exists, filter, find, findLast, first, firstOrDefault, flatFreeze, flatten, floor, flow, freeze, fromQuery, toPromise as fromResult, toPromise, fuzzy, fuzzyMatch, getArray, getArrayComparison, getColor, getForegroundColor, getHexColor, getHexaColor, getHslColor, getHslaColor, getHwbColor, getHwbaColor, getNormalizedHex, getNumber, getRandomBoolean, getRandomCharacters, getRandomColor, getRandomFloatingNumber as getRandomFloat, getRandomHex, getRandomInteger, getRandomItem, getRandomItems, getRgbColor, getRgbaColor, getSortedIndex, getString, getTimedPromise, getUuid, getValue, groupArraysBy, groupBy, handleResult, hasValue, hasValueResult, herald, hexToHsl, hexToHsla, hexToHwb, hexToHwba, hexToRgb, hexToRgba, hslToHex, hslToHwb, hslToHwba, hslToRgb, hslToRgba, hwbToHex, hwbToHsl, hwbToHsla, hwbToRgb, hwbToRgba, ignoreKey, inMap, inSet, includes, includesArray, indexOf, indexOfArray, initializeAssigner, initializeEqualizer, initializeMerger, initializeNormalizer, initializeSorter, initializeTemplater, initializeTransformer, insert, interpolate, intersection, isArrayOrPlainObject, isBeacon, isBeaconSubscription, isColor, isConstructor, isEmpty, isError, isFrozen, isFulfilled, isHerald, isHeraldEvents, isHeraldSubscription, isHexColor, isHslColor, isHslaColor, isHwbColor, isHwbaColor, isInstanceOf, isKey, isKeyedQueue, isLogger, isNonArrayOrPlainObject, isNonConstructor, isNonEmpty, isNonInstanceOf, isNonKey, isNonNullable, isNonNullableOrEmpty, isNonNullableOrWhitespace, isNonNumber, isNonNumerical, isNonObject, isNonPlainObject, isNonPrimitive, isNonTypedArray, isNullable, isNullableOrEmpty, isNullableOrWhitespace, isNumber, isNumerical, isObject, isObservable, isOk, isPlainObject, isPrimitive, isQueue, isQueueInstance, isRejected, isResult, isRgbColor, isRgbaColor, isSorted, isSubscription, isTimedLogger, isTypedArray, join, kebabCase, keyedQueue, last, lastIndexOf, lastOrDefault, lowerCase, matchResult, max, median, memoize, merge, min, move, moveIndices, moveToIndex, noop, normalize, ok, omit, once, parse, partition, pascalCase, pick, pipe, promises, push, queue, range, registerCloner, registerComparator, registerEqualizer, resultPromises, retry, reverse, rgbToHex, rgbToHsl, rgbToHsla, rgbToHwb, rgbToHwba, round, select, setValue, settlePromise, shake, shuffle, single, slice, smush, snakeCase, sort, splice, startsWith, startsWithArray, sum, swap, take, template, throttle, timed, times, titleCase, toMap, toMapArrays, toQuery, toRecord, toRecordArrays, toResult, toSet, toggle, transform, trim, truncate, tryDecode, tryEncode, union, unique, unsmush, unwrap, update, upperCase, words };
6403
+ export { CancelablePromise, Logger, PromiseTimeoutError, QueueError, RetryError, SORT_DIRECTION_ASCENDING, SORT_DIRECTION_DESCENDING, SizedMap, SizedSet, assert, assertCondition, assertDefined, assertInstanceOf, assertIs, assertProperty, assign, asyncAttempt, asyncDebounce, asyncFlow, asyncMatchResult, asyncOnce, asyncPipe, asyncThrottle, attempt, attemptAsyncFlow, attemptAsyncPipe, attemptFlow, attemptPipe, attemptPromise, average, beacon, between, camelCase, cancelable, capitalize, ceil, chunk, clamp, clone, compact, compare, copy, count, debounce, deburr, dedent, delay, deregisterCloner, deregisterComparator, deregisterEqualizer, diff, difference, drop, endsWith, endsWithArray, equal, error, exclude, exists, filter, find, findLast, first, firstOrDefault, flatFreeze, flatten, floor, flow, freeze, fromQuery, toPromise as fromResult, toPromise, fuzzy, fuzzyMatch, getArray, getArrayComparison, getColor, getForegroundColor, getHexColor, getHexaColor, getHslColor, getHslaColor, getHwbColor, getHwbaColor, getNormalizedHex, getNumber, getRandomBoolean, getRandomCharacters, getRandomColor, getRandomFloatingNumber as getRandomFloat, getRandomHex, getRandomInteger, getRandomItem, getRandomItems, getRgbColor, getRgbaColor, getSortedIndex, getString, getTimedPromise, getUuid, getValue, groupArraysBy, groupBy, handleResult, hasValue, hasValueResult, herald, hexToHsl, hexToHsla, hexToHwb, hexToHwba, hexToRgb, hexToRgba, hslToHex, hslToHwb, hslToHwba, hslToRgb, hslToRgba, hwbToHex, hwbToHsl, hwbToHsla, hwbToRgb, hwbToRgba, ignoreKey, inMap, inSet, includes, includesArray, indexOf, indexOfArray, initializeAssigner, initializeCloner, initializeEqualizer, initializeMerger, initializeNormalizer, initializeSorter, initializeTemplater, initializeTransformer, insert, interpolate, intersection, isArrayOrPlainObject, isBeacon, isBeaconSubscription, isColor, isConstructor, isEmpty, isError, isFrozen, isFulfilled, isHerald, isHeraldEvents, isHeraldSubscription, isHexColor, isHslColor, isHslaColor, isHwbColor, isHwbaColor, isInstanceOf, isKey, isKeyedQueue, isLogger, isNonArrayOrPlainObject, isNonConstructor, isNonEmpty, isNonInstanceOf, isNonKey, isNonNullable, isNonNullableOrEmpty, isNonNullableOrWhitespace, isNonNumber, isNonNumerical, isNonObject, isNonPlainObject, isNonPrimitive, isNonTypedArray, isNullable, isNullableOrEmpty, isNullableOrWhitespace, isNumber, isNumerical, isObject, isObservable, isOk, isPlainObject, isPrimitive, isQueue, isQueueInstance, isRejected, isResult, isRgbColor, isRgbaColor, isSorted, isSubscription, isTimedLogger, isTypedArray, join, kebabCase, keyedQueue, last, lastIndexOf, lastOrDefault, lowerCase, matchResult, max, median, memoize, merge, min, move, moveIndices, moveToIndex, noop, normalize, ok, omit, once, parse, partition, pascalCase, pick, pipe, promises, push, queue, range, registerCloner, registerComparator, registerEqualizer, resultPromises, retry, reverse, rgbToHex, rgbToHsl, rgbToHsla, rgbToHwb, rgbToHwba, round, select, setValue, settlePromise, shake, shuffle, single, slice, smush, snakeCase, sort, splice, startsWith, startsWithArray, sum, swap, take, template, throttle, timed, times, titleCase, toMap, toMapArrays, toQuery, toRecord, toRecordArrays, toResult, toSet, toggle, transform, trim, truncate, tryDecode, tryEncode, union, unique, unsmush, unwrap, update, upperCase, words };