@stryke/helpers 0.9.35 → 0.9.36

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.
Files changed (160) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/arg-identity.cjs +17 -1
  3. package/dist/arg-identity.mjs +16 -1
  4. package/dist/arg-identity.mjs.map +1 -1
  5. package/dist/convert/src/to-string-key.cjs +15 -1
  6. package/dist/convert/src/to-string-key.mjs +14 -1
  7. package/dist/convert/src/to-string-key.mjs.map +1 -1
  8. package/dist/debounce.cjs +62 -1
  9. package/dist/debounce.mjs +61 -1
  10. package/dist/debounce.mjs.map +1 -1
  11. package/dist/deep-clone.cjs +113 -1
  12. package/dist/deep-clone.mjs +113 -1
  13. package/dist/deep-clone.mjs.map +1 -1
  14. package/dist/deep-merge.cjs +60 -1
  15. package/dist/deep-merge.mjs +60 -1
  16. package/dist/deep-merge.mjs.map +1 -1
  17. package/dist/delay.cjs +90 -1
  18. package/dist/delay.mjs +89 -1
  19. package/dist/delay.mjs.map +1 -1
  20. package/dist/errors.cjs +24 -1
  21. package/dist/errors.mjs +22 -1
  22. package/dist/errors.mjs.map +1 -1
  23. package/dist/filter-empty.cjs +7 -1
  24. package/dist/filter-empty.mjs +7 -1
  25. package/dist/filter-empty.mjs.map +1 -1
  26. package/dist/flatten-object.cjs +48 -1
  27. package/dist/flatten-object.mjs +48 -1
  28. package/dist/flatten-object.mjs.map +1 -1
  29. package/dist/get-field.cjs +54 -1
  30. package/dist/get-field.mjs +54 -1
  31. package/dist/get-field.mjs.map +1 -1
  32. package/dist/get-ordered-by.cjs +54 -1
  33. package/dist/get-ordered-by.mjs +53 -1
  34. package/dist/get-ordered-by.mjs.map +1 -1
  35. package/dist/get-unique.cjs +37 -1
  36. package/dist/get-unique.mjs +35 -1
  37. package/dist/get-unique.mjs.map +1 -1
  38. package/dist/identity.cjs +21 -1
  39. package/dist/identity.mjs +20 -1
  40. package/dist/identity.mjs.map +1 -1
  41. package/dist/index.cjs +71 -1
  42. package/dist/index.mjs +33 -1
  43. package/dist/is-equal.cjs +87 -1
  44. package/dist/is-equal.mjs +87 -1
  45. package/dist/is-equal.mjs.map +1 -1
  46. package/dist/lru-cache.cjs +190 -1
  47. package/dist/lru-cache.mjs +189 -1
  48. package/dist/lru-cache.mjs.map +1 -1
  49. package/dist/match-sorter.cjs +264 -1
  50. package/dist/match-sorter.mjs +262 -1
  51. package/dist/match-sorter.mjs.map +1 -1
  52. package/dist/memoize.cjs +20 -1
  53. package/dist/memoize.mjs +19 -1
  54. package/dist/memoize.mjs.map +1 -1
  55. package/dist/mutex.cjs +80 -1
  56. package/dist/mutex.mjs +80 -1
  57. package/dist/mutex.mjs.map +1 -1
  58. package/dist/noop.cjs +24 -1
  59. package/dist/noop.mjs +22 -1
  60. package/dist/noop.mjs.map +1 -1
  61. package/dist/omit.cjs +30 -1
  62. package/dist/omit.mjs +29 -1
  63. package/dist/omit.mjs.map +1 -1
  64. package/dist/once.cjs +27 -1
  65. package/dist/once.mjs +25 -1
  66. package/dist/once.mjs.map +1 -1
  67. package/dist/pick.cjs +30 -1
  68. package/dist/pick.mjs +29 -1
  69. package/dist/pick.mjs.map +1 -1
  70. package/dist/remove-accents.cjs +416 -1
  71. package/dist/remove-accents.mjs +414 -1
  72. package/dist/remove-accents.mjs.map +1 -1
  73. package/dist/remove-empty-items.cjs +12 -1
  74. package/dist/remove-empty-items.mjs +11 -1
  75. package/dist/remove-empty-items.mjs.map +1 -1
  76. package/dist/semaphore.cjs +105 -1
  77. package/dist/semaphore.mjs +104 -1
  78. package/dist/semaphore.mjs.map +1 -1
  79. package/dist/set-field.cjs +30 -1
  80. package/dist/set-field.mjs +30 -1
  81. package/dist/set-field.mjs.map +1 -1
  82. package/dist/throttle.cjs +43 -1
  83. package/dist/throttle.mjs +42 -1
  84. package/dist/throttle.mjs.map +1 -1
  85. package/dist/timeout.cjs +18 -1
  86. package/dist/timeout.mjs +18 -1
  87. package/dist/timeout.mjs.map +1 -1
  88. package/dist/to-deep-key.cjs +54 -1
  89. package/dist/to-deep-key.mjs +53 -1
  90. package/dist/to-deep-key.mjs.map +1 -1
  91. package/dist/to-path.cjs +43 -1
  92. package/dist/to-path.mjs +42 -1
  93. package/dist/to-path.mjs.map +1 -1
  94. package/dist/type-checks/src/get-object-tag.cjs +15 -1
  95. package/dist/type-checks/src/get-object-tag.mjs +14 -1
  96. package/dist/type-checks/src/get-object-tag.mjs.map +1 -1
  97. package/dist/type-checks/src/is-deep-key.cjs +28 -1
  98. package/dist/type-checks/src/is-deep-key.mjs +27 -1
  99. package/dist/type-checks/src/is-deep-key.mjs.map +1 -1
  100. package/dist/type-checks/src/is-empty.cjs +20 -1
  101. package/dist/type-checks/src/is-empty.mjs +20 -1
  102. package/dist/type-checks/src/is-empty.mjs.map +1 -1
  103. package/dist/type-checks/src/is-function.cjs +25 -1
  104. package/dist/type-checks/src/is-function.mjs +25 -1
  105. package/dist/type-checks/src/is-function.mjs.map +1 -1
  106. package/dist/type-checks/src/is-mergeable-object.cjs +14 -1
  107. package/dist/type-checks/src/is-mergeable-object.mjs +14 -1
  108. package/dist/type-checks/src/is-mergeable-object.mjs.map +1 -1
  109. package/dist/type-checks/src/is-non-null-object.cjs +16 -1
  110. package/dist/type-checks/src/is-non-null-object.mjs +16 -1
  111. package/dist/type-checks/src/is-non-null-object.mjs.map +1 -1
  112. package/dist/type-checks/src/is-null.cjs +12 -1
  113. package/dist/type-checks/src/is-null.mjs +11 -1
  114. package/dist/type-checks/src/is-null.mjs.map +1 -1
  115. package/dist/type-checks/src/is-number.cjs +18 -1
  116. package/dist/type-checks/src/is-number.mjs +17 -1
  117. package/dist/type-checks/src/is-number.mjs.map +1 -1
  118. package/dist/type-checks/src/is-object-index.cjs +19 -1
  119. package/dist/type-checks/src/is-object-index.mjs +18 -1
  120. package/dist/type-checks/src/is-object-index.mjs.map +1 -1
  121. package/dist/type-checks/src/is-object.cjs +19 -1
  122. package/dist/type-checks/src/is-object.mjs +19 -1
  123. package/dist/type-checks/src/is-object.mjs.map +1 -1
  124. package/dist/type-checks/src/is-plain-object.cjs +63 -1
  125. package/dist/type-checks/src/is-plain-object.mjs +63 -1
  126. package/dist/type-checks/src/is-plain-object.mjs.map +1 -1
  127. package/dist/type-checks/src/is-primitive.cjs +12 -1
  128. package/dist/type-checks/src/is-primitive.mjs +11 -1
  129. package/dist/type-checks/src/is-primitive.mjs.map +1 -1
  130. package/dist/type-checks/src/is-react-element.cjs +8 -1
  131. package/dist/type-checks/src/is-react-element.mjs +7 -1
  132. package/dist/type-checks/src/is-react-element.mjs.map +1 -1
  133. package/dist/type-checks/src/is-set-string.cjs +20 -1
  134. package/dist/type-checks/src/is-set-string.mjs +20 -1
  135. package/dist/type-checks/src/is-set-string.mjs.map +1 -1
  136. package/dist/type-checks/src/is-set.cjs +19 -1
  137. package/dist/type-checks/src/is-set.mjs +19 -1
  138. package/dist/type-checks/src/is-set.mjs.map +1 -1
  139. package/dist/type-checks/src/is-string.cjs +12 -1
  140. package/dist/type-checks/src/is-string.mjs +11 -1
  141. package/dist/type-checks/src/is-string.mjs.map +1 -1
  142. package/dist/type-checks/src/is-typed-array.cjs +8 -1
  143. package/dist/type-checks/src/is-typed-array.mjs +7 -1
  144. package/dist/type-checks/src/is-typed-array.mjs.map +1 -1
  145. package/dist/type-checks/src/is-undefined.cjs +8 -1
  146. package/dist/type-checks/src/is-undefined.mjs +7 -1
  147. package/dist/type-checks/src/is-undefined.mjs.map +1 -1
  148. package/dist/type-checks/src/property-exists.cjs +30 -1
  149. package/dist/type-checks/src/property-exists.mjs +30 -1
  150. package/dist/type-checks/src/property-exists.mjs.map +1 -1
  151. package/dist/unflatten-object.cjs +38 -1
  152. package/dist/unflatten-object.mjs +38 -1
  153. package/dist/unflatten-object.mjs.map +1 -1
  154. package/dist/union.cjs +28 -1
  155. package/dist/union.mjs +28 -1
  156. package/dist/union.mjs.map +1 -1
  157. package/dist/with-timeout.cjs +28 -1
  158. package/dist/with-timeout.mjs +28 -1
  159. package/dist/with-timeout.mjs.map +1 -1
  160. package/package.json +2 -2
@@ -1,2 +1,61 @@
1
- import{isFunction as e}from"./type-checks/src/is-function.mjs";import{isMergeableObject as t}from"./type-checks/src/is-mergeable-object.mjs";import{propertyUnsafe as n}from"./type-checks/src/property-exists.mjs";const r=e=>Array.isArray(e)?[]:{},i=(e,t)=>t.clone!==!1&&t.isMergeableObject(e)?l(r(e),e,t):e,a=(e,t,n)=>[...e,...t].map(e=>i(e,n)),o=(t,n)=>{if(!n.customMerge)return l;let r=n.customMerge(t);return e(r)?r:l},s=e=>[...Object.keys(e),...Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(e).filter(t=>Object.propertyIsEnumerable.call(e,t)):[]],c=(e,t,r)=>{let a={};if(r.isMergeableObject(e))for(let t of s(e))a[t]=i(e[t],r);for(let c of s(t))a[c]=n(e,c)&&r.isMergeableObject(t[c])?o(c,r)(e[c],t[c],r):i(t[c],r);return a};function l(e,n,r){if(!e||!n)return e||n;let o=r??{};o.arrayMerge??=a,o.isMergeableObject??=t,o.cloneUnlessOtherwiseSpecified??=i;let s=Array.isArray(n);return s===Array.isArray(e)?s?o.arrayMerge(e,n,o):c(e,n,o):i(n,o)}l.all=function(e,t){if(!Array.isArray(e))throw TypeError(`first argument should be an array`);return e.reduce((e,n)=>l(e,n,t),{})};export{l as deepMerge};
1
+ import { isFunction } from "./type-checks/src/is-function.mjs";
2
+ import { isMergeableObject } from "./type-checks/src/is-mergeable-object.mjs";
3
+ import { propertyUnsafe } from "./type-checks/src/property-exists.mjs";
4
+
5
+ //#region src/deep-merge.ts
6
+ const emptyTarget = (val) => {
7
+ return Array.isArray(val) ? [] : {};
8
+ };
9
+ const cloneUnlessOtherwiseSpecified = (value, options) => {
10
+ return options.clone !== false && options.isMergeableObject(value) ? deepMerge(emptyTarget(value), value, options) : value;
11
+ };
12
+ const defaultArrayMerge = (target, source, options) => {
13
+ return [...target, ...source].map((element) => {
14
+ return cloneUnlessOtherwiseSpecified(element, options);
15
+ });
16
+ };
17
+ const getMergeFunction = (key, options) => {
18
+ if (!options.customMerge) return deepMerge;
19
+ const customMerge = options.customMerge(key);
20
+ return isFunction(customMerge) ? customMerge : deepMerge;
21
+ };
22
+ const getKeys = (target) => {
23
+ return [...Object.keys(target), ...Object.getOwnPropertySymbols ? Object.getOwnPropertySymbols(target).filter((symbol) => {
24
+ return Object.propertyIsEnumerable.call(target, symbol);
25
+ }) : []];
26
+ };
27
+ const mergeObject = (target, source, options) => {
28
+ const destination = {};
29
+ if (options.isMergeableObject(target)) for (const key of getKeys(target)) destination[key] = cloneUnlessOtherwiseSpecified(target[key], options);
30
+ for (const key of getKeys(source)) destination[key] = propertyUnsafe(target, key) && options.isMergeableObject(source[key]) ? getMergeFunction(key, options)(target[key], source[key], options) : cloneUnlessOtherwiseSpecified(source[key], options);
31
+ return destination;
32
+ };
33
+ /**
34
+ * Deep merge two objects
35
+ *
36
+ * @param target - The target object
37
+ * @param source - The source object
38
+ * @param options - The options object
39
+ * @returns The merged object
40
+ */
41
+ function deepMerge(target, source, options) {
42
+ if (!target || !source) return target || source;
43
+ const opts = options ?? {};
44
+ opts.arrayMerge ??= defaultArrayMerge;
45
+ opts.isMergeableObject ??= isMergeableObject;
46
+ opts.cloneUnlessOtherwiseSpecified ??= cloneUnlessOtherwiseSpecified;
47
+ const sourceIsArray = Array.isArray(source);
48
+ if (!(sourceIsArray === Array.isArray(target))) return cloneUnlessOtherwiseSpecified(source, opts);
49
+ if (sourceIsArray) return opts.arrayMerge(target, source, opts);
50
+ return mergeObject(target, source, opts);
51
+ }
52
+ deepMerge.all = function deepMergeAll(array, options) {
53
+ if (!Array.isArray(array)) throw new TypeError("first argument should be an array");
54
+ return array.reduce((prev, next) => {
55
+ return deepMerge(prev, next, options);
56
+ }, {});
57
+ };
58
+
59
+ //#endregion
60
+ export { deepMerge };
2
61
  //# sourceMappingURL=deep-merge.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"deep-merge.mjs","names":["destination: Record<string, any>"],"sources":["../src/deep-merge.ts"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Stryke\n\n This code was released as part of the Stryke project. Stryke\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/stryke.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/stryke\n Documentation: https://docs.stormsoftware.com/projects/stryke\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport { isFunction } from \"@stryke/type-checks/is-function\";\nimport { isMergeableObject } from \"@stryke/type-checks/is-mergeable-object\";\nimport { propertyUnsafe } from \"@stryke/type-checks/property-exists\";\n\nconst emptyTarget = (val: any) => {\n return Array.isArray(val) ? [] : {};\n};\n\nconst cloneUnlessOtherwiseSpecified = (\n value: any,\n options: {\n clone?: boolean;\n isMergeableObject: (value: any) => boolean;\n }\n) => {\n return options.clone !== false && options.isMergeableObject(value)\n ? deepMerge(emptyTarget(value), value, options)\n : value;\n};\n\nconst defaultArrayMerge = (target: any[], source: any[], options?: any) => {\n return [...target, ...source].map(element => {\n return cloneUnlessOtherwiseSpecified(element, options);\n });\n};\n\nconst getMergeFunction = (\n key: string,\n options: {\n customMerge?: (key: string) => any;\n }\n) => {\n if (!options.customMerge) {\n return deepMerge;\n }\n const customMerge = options.customMerge(key);\n\n return isFunction(customMerge) ? customMerge : deepMerge;\n};\n\nconst getKeys = (target: Record<string, any>) => {\n return [\n ...Object.keys(target),\n ...((Object.getOwnPropertySymbols\n ? Object.getOwnPropertySymbols(target).filter(symbol => {\n return Object.propertyIsEnumerable.call(target, symbol);\n })\n : []) as unknown as string[])\n ];\n};\n\nconst mergeObject = (\n target: Record<string, any>,\n source: Record<string, any>,\n options: {\n clone?: boolean;\n customMerge?: (key: string) => any;\n isMergeableObject: (value: any) => boolean;\n cloneUnlessOtherwiseSpecified?: (\n value: any,\n options: {\n clone: boolean;\n isMergeableObject: (value: any) => boolean;\n }\n ) => any;\n }\n) => {\n const destination: Record<string, any> = {};\n if (options.isMergeableObject(target)) {\n for (const key of getKeys(target)) {\n destination[key] = cloneUnlessOtherwiseSpecified(target[key], options);\n }\n }\n for (const key of getKeys(source)) {\n destination[key] =\n propertyUnsafe(target, key) && options.isMergeableObject(source[key])\n ? getMergeFunction(key, options)(target[key], source[key], options)\n : cloneUnlessOtherwiseSpecified(source[key], options);\n }\n return destination;\n};\n\nexport interface DeepMergeOptions {\n clone?: boolean;\n customMerge?: (key: string) => any;\n isMergeableObject: (value: any) => boolean;\n cloneUnlessOtherwiseSpecified: (\n value: any,\n options: {\n clone?: boolean;\n isMergeableObject: (value: any) => boolean;\n }\n ) => any;\n arrayMerge: (target: any[], source: any[], options: any) => any;\n}\n\n/**\n * Deep merge two objects\n *\n * @param target - The target object\n * @param source - The source object\n * @param options - The options object\n * @returns The merged object\n */\nexport function deepMerge<X = any | any[], Y = any | any[], Z = X & Y>(\n target: X,\n source: Y,\n options?: Partial<DeepMergeOptions>\n): Z {\n if (!target || !source) {\n return (target || source) as Z;\n }\n\n const opts = (options ?? {}) as DeepMergeOptions;\n opts.arrayMerge ??= defaultArrayMerge;\n opts.isMergeableObject ??= isMergeableObject;\n // cloneUnlessOtherwiseSpecified is added to `options` so that custom arrayMerge()\n // implementations can use it. The caller may not replace it.\n opts.cloneUnlessOtherwiseSpecified ??= cloneUnlessOtherwiseSpecified;\n\n const sourceIsArray = Array.isArray(source);\n const targetIsArray = Array.isArray(target);\n const sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;\n\n if (!sourceAndTargetTypesMatch) {\n return cloneUnlessOtherwiseSpecified(source, opts);\n }\n if (sourceIsArray) {\n return opts.arrayMerge(target as any[], source, opts);\n }\n return mergeObject(target, source, opts) as Z;\n}\n\ndeepMerge.all = function deepMergeAll(array: any[], options?: any) {\n if (!Array.isArray(array)) {\n throw new TypeError(\"first argument should be an array\");\n }\n\n return array.reduce((prev, next) => {\n return deepMerge(prev, next, options);\n }, {});\n};\n"],"mappings":"oNAsBA,MAAM,EAAe,GACZ,MAAM,QAAQ,EAAI,CAAG,EAAE,CAAG,EAAE,CAG/B,GACJ,EACA,IAKO,EAAQ,QAAU,IAAS,EAAQ,kBAAkB,EAAM,CAC9D,EAAU,EAAY,EAAM,CAAE,EAAO,EAAQ,CAC7C,EAGA,GAAqB,EAAe,EAAe,IAChD,CAAC,GAAG,EAAQ,GAAG,EAAO,CAAC,IAAI,GACzB,EAA8B,EAAS,EAAQ,CACtD,CAGE,GACJ,EACA,IAGG,CACH,GAAI,CAAC,EAAQ,YACX,OAAO,EAET,IAAM,EAAc,EAAQ,YAAY,EAAI,CAE5C,OAAO,EAAW,EAAY,CAAG,EAAc,GAG3C,EAAW,GACR,CACL,GAAG,OAAO,KAAK,EAAO,CACtB,GAAK,OAAO,sBACR,OAAO,sBAAsB,EAAO,CAAC,OAAO,GACnC,OAAO,qBAAqB,KAAK,EAAQ,EAAO,CACvD,CACF,EAAE,CACP,CAGG,GACJ,EACA,EACA,IAYG,CACH,IAAMA,EAAmC,EAAE,CAC3C,GAAI,EAAQ,kBAAkB,EAAO,CACnC,IAAK,IAAM,KAAO,EAAQ,EAAO,CAC/B,EAAY,GAAO,EAA8B,EAAO,GAAM,EAAQ,CAG1E,IAAK,IAAM,KAAO,EAAQ,EAAO,CAC/B,EAAY,GACV,EAAe,EAAQ,EAAI,EAAI,EAAQ,kBAAkB,EAAO,GAAK,CACjE,EAAiB,EAAK,EAAQ,CAAC,EAAO,GAAM,EAAO,GAAM,EAAQ,CACjE,EAA8B,EAAO,GAAM,EAAQ,CAE3D,OAAO,GAyBT,SAAgB,EACd,EACA,EACA,EACG,CACH,GAAI,CAAC,GAAU,CAAC,EACd,OAAQ,GAAU,EAGpB,IAAM,EAAQ,GAAW,EAAE,CAC3B,EAAK,aAAe,EACpB,EAAK,oBAAsB,EAG3B,EAAK,gCAAkC,EAEvC,IAAM,EAAgB,MAAM,QAAQ,EAAO,CAU3C,OARkC,IADZ,MAAM,QAAQ,EAAO,CAMvC,EACK,EAAK,WAAW,EAAiB,EAAQ,EAAK,CAEhD,EAAY,EAAQ,EAAQ,EAAK,CAL/B,EAA8B,EAAQ,EAAK,CAQtD,EAAU,IAAM,SAAsB,EAAc,EAAe,CACjE,GAAI,CAAC,MAAM,QAAQ,EAAM,CACvB,MAAU,UAAU,oCAAoC,CAG1D,OAAO,EAAM,QAAQ,EAAM,IAClB,EAAU,EAAM,EAAM,EAAQ,CACpC,EAAE,CAAC"}
1
+ {"version":3,"file":"deep-merge.mjs","names":["destination: Record<string, any>"],"sources":["../src/deep-merge.ts"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Stryke\n\n This code was released as part of the Stryke project. Stryke\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/stryke.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/stryke\n Documentation: https://docs.stormsoftware.com/projects/stryke\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport { isFunction } from \"@stryke/type-checks/is-function\";\nimport { isMergeableObject } from \"@stryke/type-checks/is-mergeable-object\";\nimport { propertyUnsafe } from \"@stryke/type-checks/property-exists\";\n\nconst emptyTarget = (val: any) => {\n return Array.isArray(val) ? [] : {};\n};\n\nconst cloneUnlessOtherwiseSpecified = (\n value: any,\n options: {\n clone?: boolean;\n isMergeableObject: (value: any) => boolean;\n }\n) => {\n return options.clone !== false && options.isMergeableObject(value)\n ? deepMerge(emptyTarget(value), value, options)\n : value;\n};\n\nconst defaultArrayMerge = (target: any[], source: any[], options?: any) => {\n return [...target, ...source].map(element => {\n return cloneUnlessOtherwiseSpecified(element, options);\n });\n};\n\nconst getMergeFunction = (\n key: string,\n options: {\n customMerge?: (key: string) => any;\n }\n) => {\n if (!options.customMerge) {\n return deepMerge;\n }\n const customMerge = options.customMerge(key);\n\n return isFunction(customMerge) ? customMerge : deepMerge;\n};\n\nconst getKeys = (target: Record<string, any>) => {\n return [\n ...Object.keys(target),\n ...((Object.getOwnPropertySymbols\n ? Object.getOwnPropertySymbols(target).filter(symbol => {\n return Object.propertyIsEnumerable.call(target, symbol);\n })\n : []) as unknown as string[])\n ];\n};\n\nconst mergeObject = (\n target: Record<string, any>,\n source: Record<string, any>,\n options: {\n clone?: boolean;\n customMerge?: (key: string) => any;\n isMergeableObject: (value: any) => boolean;\n cloneUnlessOtherwiseSpecified?: (\n value: any,\n options: {\n clone: boolean;\n isMergeableObject: (value: any) => boolean;\n }\n ) => any;\n }\n) => {\n const destination: Record<string, any> = {};\n if (options.isMergeableObject(target)) {\n for (const key of getKeys(target)) {\n destination[key] = cloneUnlessOtherwiseSpecified(target[key], options);\n }\n }\n for (const key of getKeys(source)) {\n destination[key] =\n propertyUnsafe(target, key) && options.isMergeableObject(source[key])\n ? getMergeFunction(key, options)(target[key], source[key], options)\n : cloneUnlessOtherwiseSpecified(source[key], options);\n }\n return destination;\n};\n\nexport interface DeepMergeOptions {\n clone?: boolean;\n customMerge?: (key: string) => any;\n isMergeableObject: (value: any) => boolean;\n cloneUnlessOtherwiseSpecified: (\n value: any,\n options: {\n clone?: boolean;\n isMergeableObject: (value: any) => boolean;\n }\n ) => any;\n arrayMerge: (target: any[], source: any[], options: any) => any;\n}\n\n/**\n * Deep merge two objects\n *\n * @param target - The target object\n * @param source - The source object\n * @param options - The options object\n * @returns The merged object\n */\nexport function deepMerge<X = any | any[], Y = any | any[], Z = X & Y>(\n target: X,\n source: Y,\n options?: Partial<DeepMergeOptions>\n): Z {\n if (!target || !source) {\n return (target || source) as Z;\n }\n\n const opts = (options ?? {}) as DeepMergeOptions;\n opts.arrayMerge ??= defaultArrayMerge;\n opts.isMergeableObject ??= isMergeableObject;\n // cloneUnlessOtherwiseSpecified is added to `options` so that custom arrayMerge()\n // implementations can use it. The caller may not replace it.\n opts.cloneUnlessOtherwiseSpecified ??= cloneUnlessOtherwiseSpecified;\n\n const sourceIsArray = Array.isArray(source);\n const targetIsArray = Array.isArray(target);\n const sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;\n\n if (!sourceAndTargetTypesMatch) {\n return cloneUnlessOtherwiseSpecified(source, opts);\n }\n if (sourceIsArray) {\n return opts.arrayMerge(target as any[], source, opts);\n }\n return mergeObject(target, source, opts) as Z;\n}\n\ndeepMerge.all = function deepMergeAll(array: any[], options?: any) {\n if (!Array.isArray(array)) {\n throw new TypeError(\"first argument should be an array\");\n }\n\n return array.reduce((prev, next) => {\n return deepMerge(prev, next, options);\n }, {});\n};\n"],"mappings":";;;;;AAsBA,MAAM,eAAe,QAAa;AAChC,QAAO,MAAM,QAAQ,IAAI,GAAG,EAAE,GAAG,EAAE;;AAGrC,MAAM,iCACJ,OACA,YAIG;AACH,QAAO,QAAQ,UAAU,SAAS,QAAQ,kBAAkB,MAAM,GAC9D,UAAU,YAAY,MAAM,EAAE,OAAO,QAAQ,GAC7C;;AAGN,MAAM,qBAAqB,QAAe,QAAe,YAAkB;AACzE,QAAO,CAAC,GAAG,QAAQ,GAAG,OAAO,CAAC,KAAI,YAAW;AAC3C,SAAO,8BAA8B,SAAS,QAAQ;GACtD;;AAGJ,MAAM,oBACJ,KACA,YAGG;AACH,KAAI,CAAC,QAAQ,YACX,QAAO;CAET,MAAM,cAAc,QAAQ,YAAY,IAAI;AAE5C,QAAO,WAAW,YAAY,GAAG,cAAc;;AAGjD,MAAM,WAAW,WAAgC;AAC/C,QAAO,CACL,GAAG,OAAO,KAAK,OAAO,EACtB,GAAK,OAAO,wBACR,OAAO,sBAAsB,OAAO,CAAC,QAAO,WAAU;AACpD,SAAO,OAAO,qBAAqB,KAAK,QAAQ,OAAO;GACvD,GACF,EAAE,CACP;;AAGH,MAAM,eACJ,QACA,QACA,YAYG;CACH,MAAMA,cAAmC,EAAE;AAC3C,KAAI,QAAQ,kBAAkB,OAAO,CACnC,MAAK,MAAM,OAAO,QAAQ,OAAO,CAC/B,aAAY,OAAO,8BAA8B,OAAO,MAAM,QAAQ;AAG1E,MAAK,MAAM,OAAO,QAAQ,OAAO,CAC/B,aAAY,OACV,eAAe,QAAQ,IAAI,IAAI,QAAQ,kBAAkB,OAAO,KAAK,GACjE,iBAAiB,KAAK,QAAQ,CAAC,OAAO,MAAM,OAAO,MAAM,QAAQ,GACjE,8BAA8B,OAAO,MAAM,QAAQ;AAE3D,QAAO;;;;;;;;;;AAyBT,SAAgB,UACd,QACA,QACA,SACG;AACH,KAAI,CAAC,UAAU,CAAC,OACd,QAAQ,UAAU;CAGpB,MAAM,OAAQ,WAAW,EAAE;AAC3B,MAAK,eAAe;AACpB,MAAK,sBAAsB;AAG3B,MAAK,kCAAkC;CAEvC,MAAM,gBAAgB,MAAM,QAAQ,OAAO;AAI3C,KAAI,EAF8B,kBADZ,MAAM,QAAQ,OAAO,EAIzC,QAAO,8BAA8B,QAAQ,KAAK;AAEpD,KAAI,cACF,QAAO,KAAK,WAAW,QAAiB,QAAQ,KAAK;AAEvD,QAAO,YAAY,QAAQ,QAAQ,KAAK;;AAG1C,UAAU,MAAM,SAAS,aAAa,OAAc,SAAe;AACjE,KAAI,CAAC,MAAM,QAAQ,MAAM,CACvB,OAAM,IAAI,UAAU,oCAAoC;AAG1D,QAAO,MAAM,QAAQ,MAAM,SAAS;AAClC,SAAO,UAAU,MAAM,MAAM,QAAQ;IACpC,EAAE,CAAC"}
package/dist/delay.cjs CHANGED
@@ -1 +1,90 @@
1
- const e=require(`./errors.cjs`);async function t(t,{signal:n}={}){return new Promise((r,i)=>{let a=()=>{i(new e.AbortError)},o=()=>{clearTimeout(s),a()};if(n?.aborted)return a();let s=setTimeout(r,t);n?.addEventListener(`abort`,o,{once:!0})})}async function n(e,n){return t(e,n)}exports.delay=t,exports.sleep=n;
1
+ const require_errors = require('./errors.cjs');
2
+
3
+ //#region src/delay.ts
4
+ /**
5
+ * Delays the execution of code for a specified number of milliseconds.
6
+ *
7
+ * This function returns a Promise that resolves after the specified delay, allowing you to use it
8
+ * with async/await to pause execution.
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * async function foo() {
13
+ * console.log('Start');
14
+ * await delay(1000); // Delays execution for 1 second
15
+ * console.log('End');
16
+ * }
17
+ *
18
+ * foo();
19
+ *
20
+ * // With AbortSignal
21
+ * const controller = new AbortController();
22
+ * const { signal } = controller;
23
+ *
24
+ * setTimeout(() => controller.abort(), 50); // Will cancel the delay after 50ms
25
+ * try {
26
+ * await delay(100, { signal });
27
+ * } catch (error) {
28
+ * console.error(error); // Will log 'AbortError'
29
+ * }
30
+ * }
31
+ * ```
32
+ *
33
+ * @param ms - The number of milliseconds to delay.
34
+ * @param options - The options object.
35
+ * @returns A Promise that resolves after the specified delay.
36
+ */
37
+ async function delay(ms, { signal } = {}) {
38
+ return new Promise((resolve, reject) => {
39
+ const abortError = () => {
40
+ reject(new require_errors.AbortError());
41
+ };
42
+ const abortHandler = () => {
43
+ clearTimeout(timeoutId);
44
+ abortError();
45
+ };
46
+ if (signal?.aborted) return abortError();
47
+ const timeoutId = setTimeout(resolve, ms);
48
+ signal?.addEventListener("abort", abortHandler, { once: true });
49
+ });
50
+ }
51
+ /**
52
+ * Delays the execution of code for a specified number of milliseconds.
53
+ *
54
+ * This function returns a Promise that resolves after the specified delay, allowing you to use it
55
+ * with async/await to pause execution.
56
+ *
57
+ * @example
58
+ * ```typescript
59
+ * async function foo() {
60
+ * console.log('Start');
61
+ * await sleep(1000); // Delays execution for 1 second
62
+ * console.log('End');
63
+ * }
64
+ *
65
+ * foo();
66
+ *
67
+ * // With AbortSignal
68
+ * const controller = new AbortController();
69
+ * const { signal } = controller;
70
+ *
71
+ * setTimeout(() => controller.abort(), 50); // Will cancel the delay after 50ms
72
+ * try {
73
+ * await sleep(100, { signal });
74
+ * } catch (error) {
75
+ * console.error(error); // Will log 'AbortError'
76
+ * }
77
+ * }
78
+ * ```
79
+ *
80
+ * @param ms - The number of milliseconds to sleep.
81
+ * @param options - The options object.
82
+ * @returns A Promise that resolves after the specified sleep.
83
+ */
84
+ async function sleep(ms, options) {
85
+ return delay(ms, options);
86
+ }
87
+
88
+ //#endregion
89
+ exports.delay = delay;
90
+ exports.sleep = sleep;
package/dist/delay.mjs CHANGED
@@ -1,2 +1,90 @@
1
- import{AbortError as e}from"./errors.mjs";async function t(t,{signal:n}={}){return new Promise((r,i)=>{let a=()=>{i(new e)},o=()=>{clearTimeout(s),a()};if(n?.aborted)return a();let s=setTimeout(r,t);n?.addEventListener(`abort`,o,{once:!0})})}async function n(e,n){return t(e,n)}export{t as delay,n as sleep};
1
+ import { AbortError } from "./errors.mjs";
2
+
3
+ //#region src/delay.ts
4
+ /**
5
+ * Delays the execution of code for a specified number of milliseconds.
6
+ *
7
+ * This function returns a Promise that resolves after the specified delay, allowing you to use it
8
+ * with async/await to pause execution.
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * async function foo() {
13
+ * console.log('Start');
14
+ * await delay(1000); // Delays execution for 1 second
15
+ * console.log('End');
16
+ * }
17
+ *
18
+ * foo();
19
+ *
20
+ * // With AbortSignal
21
+ * const controller = new AbortController();
22
+ * const { signal } = controller;
23
+ *
24
+ * setTimeout(() => controller.abort(), 50); // Will cancel the delay after 50ms
25
+ * try {
26
+ * await delay(100, { signal });
27
+ * } catch (error) {
28
+ * console.error(error); // Will log 'AbortError'
29
+ * }
30
+ * }
31
+ * ```
32
+ *
33
+ * @param ms - The number of milliseconds to delay.
34
+ * @param options - The options object.
35
+ * @returns A Promise that resolves after the specified delay.
36
+ */
37
+ async function delay(ms, { signal } = {}) {
38
+ return new Promise((resolve, reject) => {
39
+ const abortError = () => {
40
+ reject(new AbortError());
41
+ };
42
+ const abortHandler = () => {
43
+ clearTimeout(timeoutId);
44
+ abortError();
45
+ };
46
+ if (signal?.aborted) return abortError();
47
+ const timeoutId = setTimeout(resolve, ms);
48
+ signal?.addEventListener("abort", abortHandler, { once: true });
49
+ });
50
+ }
51
+ /**
52
+ * Delays the execution of code for a specified number of milliseconds.
53
+ *
54
+ * This function returns a Promise that resolves after the specified delay, allowing you to use it
55
+ * with async/await to pause execution.
56
+ *
57
+ * @example
58
+ * ```typescript
59
+ * async function foo() {
60
+ * console.log('Start');
61
+ * await sleep(1000); // Delays execution for 1 second
62
+ * console.log('End');
63
+ * }
64
+ *
65
+ * foo();
66
+ *
67
+ * // With AbortSignal
68
+ * const controller = new AbortController();
69
+ * const { signal } = controller;
70
+ *
71
+ * setTimeout(() => controller.abort(), 50); // Will cancel the delay after 50ms
72
+ * try {
73
+ * await sleep(100, { signal });
74
+ * } catch (error) {
75
+ * console.error(error); // Will log 'AbortError'
76
+ * }
77
+ * }
78
+ * ```
79
+ *
80
+ * @param ms - The number of milliseconds to sleep.
81
+ * @param options - The options object.
82
+ * @returns A Promise that resolves after the specified sleep.
83
+ */
84
+ async function sleep(ms, options) {
85
+ return delay(ms, options);
86
+ }
87
+
88
+ //#endregion
89
+ export { delay, sleep };
2
90
  //# sourceMappingURL=delay.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"delay.mjs","names":[],"sources":["../src/delay.ts"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Stryke\n\n This code was released as part of the Stryke project. Stryke\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/stryke.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/stryke\n Documentation: https://docs.stormsoftware.com/projects/stryke\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport { AbortError } from \"./errors\";\n\ninterface DelayOptions {\n signal?: AbortSignal;\n}\n\n/**\n * Delays the execution of code for a specified number of milliseconds.\n *\n * This function returns a Promise that resolves after the specified delay, allowing you to use it\n * with async/await to pause execution.\n *\n * @example\n * ```typescript\n * async function foo() {\n * console.log('Start');\n * await delay(1000); // Delays execution for 1 second\n * console.log('End');\n * }\n *\n * foo();\n *\n * // With AbortSignal\n * const controller = new AbortController();\n * const { signal } = controller;\n *\n * setTimeout(() => controller.abort(), 50); // Will cancel the delay after 50ms\n * try {\n * await delay(100, { signal });\n * } catch (error) {\n * console.error(error); // Will log 'AbortError'\n * }\n * }\n * ```\n *\n * @param ms - The number of milliseconds to delay.\n * @param options - The options object.\n * @returns A Promise that resolves after the specified delay.\n */\nexport async function delay(\n ms: number,\n { signal }: DelayOptions = {}\n): Promise<void> {\n return new Promise((resolve, reject) => {\n const abortError = () => {\n reject(new AbortError());\n };\n\n const abortHandler = () => {\n // eslint-disable-next-line ts/no-use-before-define\n clearTimeout(timeoutId);\n abortError();\n };\n\n if (signal?.aborted) {\n // eslint-disable-next-line no-promise-executor-return\n return abortError();\n }\n\n const timeoutId = setTimeout(resolve, ms);\n\n signal?.addEventListener(\"abort\", abortHandler, { once: true });\n });\n}\n\n/**\n * Delays the execution of code for a specified number of milliseconds.\n *\n * This function returns a Promise that resolves after the specified delay, allowing you to use it\n * with async/await to pause execution.\n *\n * @example\n * ```typescript\n * async function foo() {\n * console.log('Start');\n * await sleep(1000); // Delays execution for 1 second\n * console.log('End');\n * }\n *\n * foo();\n *\n * // With AbortSignal\n * const controller = new AbortController();\n * const { signal } = controller;\n *\n * setTimeout(() => controller.abort(), 50); // Will cancel the delay after 50ms\n * try {\n * await sleep(100, { signal });\n * } catch (error) {\n * console.error(error); // Will log 'AbortError'\n * }\n * }\n * ```\n *\n * @param ms - The number of milliseconds to sleep.\n * @param options - The options object.\n * @returns A Promise that resolves after the specified sleep.\n */\nexport async function sleep(ms: number, options?: DelayOptions): Promise<void> {\n return delay(ms, options);\n}\n"],"mappings":"0CAyDA,eAAsB,EACpB,EACA,CAAE,UAAyB,EAAE,CACd,CACf,OAAO,IAAI,SAAS,EAAS,IAAW,CACtC,IAAM,MAAmB,CACvB,EAAO,IAAI,EAAa,EAGpB,MAAqB,CAEzB,aAAa,EAAU,CACvB,GAAY,EAGd,GAAI,GAAQ,QAEV,OAAO,GAAY,CAGrB,IAAM,EAAY,WAAW,EAAS,EAAG,CAEzC,GAAQ,iBAAiB,QAAS,EAAc,CAAE,KAAM,GAAM,CAAC,EAC/D,CAoCJ,eAAsB,EAAM,EAAY,EAAuC,CAC7E,OAAO,EAAM,EAAI,EAAQ"}
1
+ {"version":3,"file":"delay.mjs","names":[],"sources":["../src/delay.ts"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Stryke\n\n This code was released as part of the Stryke project. Stryke\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/stryke.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/stryke\n Documentation: https://docs.stormsoftware.com/projects/stryke\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\nimport { AbortError } from \"./errors\";\n\ninterface DelayOptions {\n signal?: AbortSignal;\n}\n\n/**\n * Delays the execution of code for a specified number of milliseconds.\n *\n * This function returns a Promise that resolves after the specified delay, allowing you to use it\n * with async/await to pause execution.\n *\n * @example\n * ```typescript\n * async function foo() {\n * console.log('Start');\n * await delay(1000); // Delays execution for 1 second\n * console.log('End');\n * }\n *\n * foo();\n *\n * // With AbortSignal\n * const controller = new AbortController();\n * const { signal } = controller;\n *\n * setTimeout(() => controller.abort(), 50); // Will cancel the delay after 50ms\n * try {\n * await delay(100, { signal });\n * } catch (error) {\n * console.error(error); // Will log 'AbortError'\n * }\n * }\n * ```\n *\n * @param ms - The number of milliseconds to delay.\n * @param options - The options object.\n * @returns A Promise that resolves after the specified delay.\n */\nexport async function delay(\n ms: number,\n { signal }: DelayOptions = {}\n): Promise<void> {\n return new Promise((resolve, reject) => {\n const abortError = () => {\n reject(new AbortError());\n };\n\n const abortHandler = () => {\n // eslint-disable-next-line ts/no-use-before-define\n clearTimeout(timeoutId);\n abortError();\n };\n\n if (signal?.aborted) {\n // eslint-disable-next-line no-promise-executor-return\n return abortError();\n }\n\n const timeoutId = setTimeout(resolve, ms);\n\n signal?.addEventListener(\"abort\", abortHandler, { once: true });\n });\n}\n\n/**\n * Delays the execution of code for a specified number of milliseconds.\n *\n * This function returns a Promise that resolves after the specified delay, allowing you to use it\n * with async/await to pause execution.\n *\n * @example\n * ```typescript\n * async function foo() {\n * console.log('Start');\n * await sleep(1000); // Delays execution for 1 second\n * console.log('End');\n * }\n *\n * foo();\n *\n * // With AbortSignal\n * const controller = new AbortController();\n * const { signal } = controller;\n *\n * setTimeout(() => controller.abort(), 50); // Will cancel the delay after 50ms\n * try {\n * await sleep(100, { signal });\n * } catch (error) {\n * console.error(error); // Will log 'AbortError'\n * }\n * }\n * ```\n *\n * @param ms - The number of milliseconds to sleep.\n * @param options - The options object.\n * @returns A Promise that resolves after the specified sleep.\n */\nexport async function sleep(ms: number, options?: DelayOptions): Promise<void> {\n return delay(ms, options);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyDA,eAAsB,MACpB,IACA,EAAE,WAAyB,EAAE,EACd;AACf,QAAO,IAAI,SAAS,SAAS,WAAW;EACtC,MAAM,mBAAmB;AACvB,UAAO,IAAI,YAAY,CAAC;;EAG1B,MAAM,qBAAqB;AAEzB,gBAAa,UAAU;AACvB,eAAY;;AAGd,MAAI,QAAQ,QAEV,QAAO,YAAY;EAGrB,MAAM,YAAY,WAAW,SAAS,GAAG;AAEzC,UAAQ,iBAAiB,SAAS,cAAc,EAAE,MAAM,MAAM,CAAC;GAC/D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoCJ,eAAsB,MAAM,IAAY,SAAuC;AAC7E,QAAO,MAAM,IAAI,QAAQ"}
package/dist/errors.cjs CHANGED
@@ -1 +1,24 @@
1
- var e=class extends Error{constructor(e=`The operation was aborted`){super(e),this.name=`AbortError`}},t=class extends Error{constructor(e=`The operation was timed out`){super(e),this.name=`TimeoutError`}};exports.AbortError=e,exports.TimeoutError=t;
1
+
2
+ //#region src/errors.ts
3
+ /**
4
+ * An error class representing an aborted operation.
5
+ */
6
+ var AbortError = class extends Error {
7
+ constructor(message = "The operation was aborted") {
8
+ super(message);
9
+ this.name = "AbortError";
10
+ }
11
+ };
12
+ /**
13
+ * An error class representing an timeout operation.
14
+ */
15
+ var TimeoutError = class extends Error {
16
+ constructor(message = "The operation was timed out") {
17
+ super(message);
18
+ this.name = "TimeoutError";
19
+ }
20
+ };
21
+
22
+ //#endregion
23
+ exports.AbortError = AbortError;
24
+ exports.TimeoutError = TimeoutError;
package/dist/errors.mjs CHANGED
@@ -1,2 +1,23 @@
1
- var e=class extends Error{constructor(e=`The operation was aborted`){super(e),this.name=`AbortError`}},t=class extends Error{constructor(e=`The operation was timed out`){super(e),this.name=`TimeoutError`}};export{e as AbortError,t as TimeoutError};
1
+ //#region src/errors.ts
2
+ /**
3
+ * An error class representing an aborted operation.
4
+ */
5
+ var AbortError = class extends Error {
6
+ constructor(message = "The operation was aborted") {
7
+ super(message);
8
+ this.name = "AbortError";
9
+ }
10
+ };
11
+ /**
12
+ * An error class representing an timeout operation.
13
+ */
14
+ var TimeoutError = class extends Error {
15
+ constructor(message = "The operation was timed out") {
16
+ super(message);
17
+ this.name = "TimeoutError";
18
+ }
19
+ };
20
+
21
+ //#endregion
22
+ export { AbortError, TimeoutError };
2
23
  //# sourceMappingURL=errors.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.mjs","names":[],"sources":["../src/errors.ts"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Stryke\n\n This code was released as part of the Stryke project. Stryke\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/stryke.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/stryke\n Documentation: https://docs.stormsoftware.com/projects/stryke\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\n/**\n * An error class representing an aborted operation.\n */\nexport class AbortError extends Error {\n constructor(message = \"The operation was aborted\") {\n super(message);\n this.name = \"AbortError\";\n }\n}\n\n/**\n * An error class representing an timeout operation.\n */\nexport class TimeoutError extends Error {\n constructor(message = \"The operation was timed out\") {\n super(message);\n this.name = \"TimeoutError\";\n }\n}\n"],"mappings":"AAqBA,IAAa,EAAb,cAAgC,KAAM,CACpC,YAAY,EAAU,4BAA6B,CACjD,MAAM,EAAQ,CACd,KAAK,KAAO,eAOH,EAAb,cAAkC,KAAM,CACtC,YAAY,EAAU,8BAA+B,CACnD,MAAM,EAAQ,CACd,KAAK,KAAO"}
1
+ {"version":3,"file":"errors.mjs","names":[],"sources":["../src/errors.ts"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Stryke\n\n This code was released as part of the Stryke project. Stryke\n is maintained by Storm Software under the Apache-2.0 license, and is\n free for commercial and private use. For more information, please visit\n our licensing page at https://stormsoftware.com/licenses/projects/stryke.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/stryke\n Documentation: https://docs.stormsoftware.com/projects/stryke\n Contact: https://stormsoftware.com/contact\n\n SPDX-License-Identifier: Apache-2.0\n\n ------------------------------------------------------------------- */\n\n/**\n * An error class representing an aborted operation.\n */\nexport class AbortError extends Error {\n constructor(message = \"The operation was aborted\") {\n super(message);\n this.name = \"AbortError\";\n }\n}\n\n/**\n * An error class representing an timeout operation.\n */\nexport class TimeoutError extends Error {\n constructor(message = \"The operation was timed out\") {\n super(message);\n this.name = \"TimeoutError\";\n }\n}\n"],"mappings":";;;;AAqBA,IAAa,aAAb,cAAgC,MAAM;CACpC,YAAY,UAAU,6BAA6B;AACjD,QAAM,QAAQ;AACd,OAAK,OAAO;;;;;;AAOhB,IAAa,eAAb,cAAkC,MAAM;CACtC,YAAY,UAAU,+BAA+B;AACnD,QAAM,QAAQ;AACd,OAAK,OAAO"}
@@ -1 +1,7 @@
1
- const e=require(`./type-checks/src/is-empty.cjs`),t=(t=[])=>t.filter(t=>!e.isEmpty(t));exports.filterEmpty=t;
1
+ const require_is_empty = require('./type-checks/src/is-empty.cjs');
2
+
3
+ //#region src/filter-empty.ts
4
+ const filterEmpty = (values = []) => values.filter((value) => !require_is_empty.isEmpty(value));
5
+
6
+ //#endregion
7
+ exports.filterEmpty = filterEmpty;
@@ -1,2 +1,8 @@
1
- import{isEmpty as e}from"./type-checks/src/is-empty.mjs";const t=(t=[])=>t.filter(t=>!e(t));export{t as filterEmpty};
1
+ import { isEmpty } from "./type-checks/src/is-empty.mjs";
2
+
3
+ //#region src/filter-empty.ts
4
+ const filterEmpty = (values = []) => values.filter((value) => !isEmpty(value));
5
+
6
+ //#endregion
7
+ export { filterEmpty };
2
8
  //# sourceMappingURL=filter-empty.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"filter-empty.mjs","names":[],"sources":["../src/filter-empty.ts"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Stryke\n\n This code was released as part of the Stryke project. Stryke\n is maintained by Storm Software under the Apache-2.0 License, and is\n free for commercial and private use. For more information, please visit\n our licensing page.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/stryke\n Documentation: https://stormsoftware.com/projects/stryke/docs\n Contact: https://stormsoftware.com/contact\n License: https://stormsoftware.com/projects/stryke/license\n\n ------------------------------------------------------------------- */\n\nimport { isEmpty } from \"@stryke/type-checks/is-empty\";\n\nexport const filterEmpty = <T>(values: (T | null | undefined)[] = []): T[] =>\n values.filter(value => !isEmpty(value)) as T[];\n"],"mappings":"yDAmBA,MAAa,GAAkB,EAAmC,EAAE,GAClE,EAAO,OAAO,GAAS,CAAC,EAAQ,EAAM,CAAC"}
1
+ {"version":3,"file":"filter-empty.mjs","names":[],"sources":["../src/filter-empty.ts"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Stryke\n\n This code was released as part of the Stryke project. Stryke\n is maintained by Storm Software under the Apache-2.0 License, and is\n free for commercial and private use. For more information, please visit\n our licensing page.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/stryke\n Documentation: https://stormsoftware.com/projects/stryke/docs\n Contact: https://stormsoftware.com/contact\n License: https://stormsoftware.com/projects/stryke/license\n\n ------------------------------------------------------------------- */\n\nimport { isEmpty } from \"@stryke/type-checks/is-empty\";\n\nexport const filterEmpty = <T>(values: (T | null | undefined)[] = []): T[] =>\n values.filter(value => !isEmpty(value)) as T[];\n"],"mappings":";;;AAmBA,MAAa,eAAkB,SAAmC,EAAE,KAClE,OAAO,QAAO,UAAS,CAAC,QAAQ,MAAM,CAAC"}
@@ -1 +1,48 @@
1
- const e=require(`./type-checks/src/is-plain-object.cjs`);function t(e){return n(e)}function n(t,r=``){let i={},a=Object.keys(t);for(let o of a){let a=t[o],s=r?`${r}.${o}`:o;if(e.isPlainObject(a)&&Object.keys(a).length>0)Object.assign(i,n(a,s));else if(Array.isArray(a))for(let[e,t]of a.entries())i[`${s}.${e}`]=t;else i[s]=a}return i}exports.flattenObject=t;
1
+ const require_is_plain_object = require('./type-checks/src/is-plain-object.cjs');
2
+
3
+ //#region src/flatten-object.ts
4
+ /**
5
+ * Flattens a nested object into a single level object with dot-separated keys.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * const nestedObject = {
10
+ * a: {
11
+ * b: {
12
+ * c: 1
13
+ * }
14
+ * },
15
+ * d: [2, 3]
16
+ * };
17
+ *
18
+ * const flattened = flattenObject(nestedObject);
19
+ * console.log(flattened);
20
+ * // Output:
21
+ * // {
22
+ * // 'a.b.c': 1,
23
+ * // 'd.0': 2,
24
+ * // 'd.1': 3
25
+ * // }
26
+ * ```
27
+ *
28
+ * @param object - The object to flatten.
29
+ * @returns - The flattened object.
30
+ */
31
+ function flattenObject(object) {
32
+ return flattenObjectImpl(object);
33
+ }
34
+ function flattenObjectImpl(object, prefix = "") {
35
+ const result = {};
36
+ const keys = Object.keys(object);
37
+ for (const key of keys) {
38
+ const value = object[key];
39
+ const prefixedKey = prefix ? `${prefix}.${key}` : key;
40
+ if (require_is_plain_object.isPlainObject(value) && Object.keys(value).length > 0) Object.assign(result, flattenObjectImpl(value, prefixedKey));
41
+ else if (Array.isArray(value)) for (const [index, element_] of value.entries()) result[`${prefixedKey}.${index}`] = element_;
42
+ else result[prefixedKey] = value;
43
+ }
44
+ return result;
45
+ }
46
+
47
+ //#endregion
48
+ exports.flattenObject = flattenObject;
@@ -1,2 +1,49 @@
1
- import{isPlainObject as e}from"./type-checks/src/is-plain-object.mjs";function t(e){return n(e)}function n(t,r=``){let i={},a=Object.keys(t);for(let o of a){let a=t[o],s=r?`${r}.${o}`:o;if(e(a)&&Object.keys(a).length>0)Object.assign(i,n(a,s));else if(Array.isArray(a))for(let[e,t]of a.entries())i[`${s}.${e}`]=t;else i[s]=a}return i}export{t as flattenObject};
1
+ import { isPlainObject } from "./type-checks/src/is-plain-object.mjs";
2
+
3
+ //#region src/flatten-object.ts
4
+ /**
5
+ * Flattens a nested object into a single level object with dot-separated keys.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * const nestedObject = {
10
+ * a: {
11
+ * b: {
12
+ * c: 1
13
+ * }
14
+ * },
15
+ * d: [2, 3]
16
+ * };
17
+ *
18
+ * const flattened = flattenObject(nestedObject);
19
+ * console.log(flattened);
20
+ * // Output:
21
+ * // {
22
+ * // 'a.b.c': 1,
23
+ * // 'd.0': 2,
24
+ * // 'd.1': 3
25
+ * // }
26
+ * ```
27
+ *
28
+ * @param object - The object to flatten.
29
+ * @returns - The flattened object.
30
+ */
31
+ function flattenObject(object) {
32
+ return flattenObjectImpl(object);
33
+ }
34
+ function flattenObjectImpl(object, prefix = "") {
35
+ const result = {};
36
+ const keys = Object.keys(object);
37
+ for (const key of keys) {
38
+ const value = object[key];
39
+ const prefixedKey = prefix ? `${prefix}.${key}` : key;
40
+ if (isPlainObject(value) && Object.keys(value).length > 0) Object.assign(result, flattenObjectImpl(value, prefixedKey));
41
+ else if (Array.isArray(value)) for (const [index, element_] of value.entries()) result[`${prefixedKey}.${index}`] = element_;
42
+ else result[prefixedKey] = value;
43
+ }
44
+ return result;
45
+ }
46
+
47
+ //#endregion
48
+ export { flattenObject };
2
49
  //# sourceMappingURL=flatten-object.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"flatten-object.mjs","names":[],"sources":["../src/flatten-object.ts"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Stryke\n\n This code was released as part of the Stryke project. Stryke\n is maintained by Storm Software under the Apache-2.0 License, and is\n free for commercial and private use. For more information, please visit\n our licensing page.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/stryke\n Documentation: https://stormsoftware.com/projects/stryke/docs\n Contact: https://stormsoftware.com/contact\n License: https://stormsoftware.com/projects/stryke/license\n\n ------------------------------------------------------------------- */\n\nimport { isPlainObject } from \"@stryke/type-checks/is-plain-object\";\nimport type { DeepKey, DeepValue } from \"@stryke/types/object\";\n\n/**\n * Flattens a nested object into a single level object with dot-separated keys.\n *\n * @example\n * ```typescript\n * const nestedObject = {\n * a: {\n * b: {\n * c: 1\n * }\n * },\n * d: [2, 3]\n * };\n *\n * const flattened = flattenObject(nestedObject);\n * console.log(flattened);\n * // Output:\n * // {\n * // 'a.b.c': 1,\n * // 'd.0': 2,\n * // 'd.1': 3\n * // }\n * ```\n *\n * @param object - The object to flatten.\n * @returns - The flattened object.\n */\nexport function flattenObject<\n TObject extends Record<string, any> = Record<string, any>,\n TDeepKeyObject extends {\n [TKey in DeepKey<TObject>]: DeepValue<TObject, TKey>;\n } = { [TKey in DeepKey<TObject>]: DeepValue<TObject, TKey> }\n>(object: TObject): TDeepKeyObject {\n return flattenObjectImpl<TObject, TDeepKeyObject>(object);\n}\n\nfunction flattenObjectImpl<\n TObject extends Record<string, any> = Record<string, any>,\n TDeepKeyObject extends {\n [TKey in DeepKey<TObject>]: DeepValue<TObject, TKey>;\n } = { [TKey in DeepKey<TObject>]: DeepValue<TObject, TKey> }\n>(object: TObject, prefix = \"\"): TDeepKeyObject {\n const result = {} as TDeepKeyObject;\n const keys = Object.keys(object);\n\n for (const key of keys) {\n const value = (object as any)[key];\n\n const prefixedKey = prefix ? `${prefix}.${key}` : key;\n\n if (isPlainObject(value) && Object.keys(value).length > 0) {\n Object.assign(\n result,\n flattenObjectImpl<typeof value>(value, prefixedKey)\n );\n } else if (Array.isArray(value)) {\n for (const [index, element_] of value.entries()) {\n (result as any)[`${prefixedKey}.${index}` as DeepKey<TObject>] =\n element_;\n }\n } else {\n (result as any)[prefixedKey as DeepKey<TObject>] = value;\n }\n }\n\n return result;\n}\n"],"mappings":"sEA+CA,SAAgB,EAKd,EAAiC,CACjC,OAAO,EAA2C,EAAO,CAG3D,SAAS,EAKP,EAAiB,EAAS,GAAoB,CAC9C,IAAM,EAAS,EAAE,CACX,EAAO,OAAO,KAAK,EAAO,CAEhC,IAAK,IAAM,KAAO,EAAM,CACtB,IAAM,EAAS,EAAe,GAExB,EAAc,EAAS,GAAG,EAAO,GAAG,IAAQ,EAElD,GAAI,EAAc,EAAM,EAAI,OAAO,KAAK,EAAM,CAAC,OAAS,EACtD,OAAO,OACL,EACA,EAAgC,EAAO,EAAY,CACpD,SACQ,MAAM,QAAQ,EAAM,CAC7B,IAAK,GAAM,CAAC,EAAO,KAAa,EAAM,SAAS,CAC5C,EAAe,GAAG,EAAY,GAAG,KAChC,OAGH,EAAe,GAAmC,EAIvD,OAAO"}
1
+ {"version":3,"file":"flatten-object.mjs","names":[],"sources":["../src/flatten-object.ts"],"sourcesContent":["/* -------------------------------------------------------------------\n\n ⚡ Storm Software - Stryke\n\n This code was released as part of the Stryke project. Stryke\n is maintained by Storm Software under the Apache-2.0 License, and is\n free for commercial and private use. For more information, please visit\n our licensing page.\n\n Website: https://stormsoftware.com\n Repository: https://github.com/storm-software/stryke\n Documentation: https://stormsoftware.com/projects/stryke/docs\n Contact: https://stormsoftware.com/contact\n License: https://stormsoftware.com/projects/stryke/license\n\n ------------------------------------------------------------------- */\n\nimport { isPlainObject } from \"@stryke/type-checks/is-plain-object\";\nimport type { DeepKey, DeepValue } from \"@stryke/types/object\";\n\n/**\n * Flattens a nested object into a single level object with dot-separated keys.\n *\n * @example\n * ```typescript\n * const nestedObject = {\n * a: {\n * b: {\n * c: 1\n * }\n * },\n * d: [2, 3]\n * };\n *\n * const flattened = flattenObject(nestedObject);\n * console.log(flattened);\n * // Output:\n * // {\n * // 'a.b.c': 1,\n * // 'd.0': 2,\n * // 'd.1': 3\n * // }\n * ```\n *\n * @param object - The object to flatten.\n * @returns - The flattened object.\n */\nexport function flattenObject<\n TObject extends Record<string, any> = Record<string, any>,\n TDeepKeyObject extends {\n [TKey in DeepKey<TObject>]: DeepValue<TObject, TKey>;\n } = { [TKey in DeepKey<TObject>]: DeepValue<TObject, TKey> }\n>(object: TObject): TDeepKeyObject {\n return flattenObjectImpl<TObject, TDeepKeyObject>(object);\n}\n\nfunction flattenObjectImpl<\n TObject extends Record<string, any> = Record<string, any>,\n TDeepKeyObject extends {\n [TKey in DeepKey<TObject>]: DeepValue<TObject, TKey>;\n } = { [TKey in DeepKey<TObject>]: DeepValue<TObject, TKey> }\n>(object: TObject, prefix = \"\"): TDeepKeyObject {\n const result = {} as TDeepKeyObject;\n const keys = Object.keys(object);\n\n for (const key of keys) {\n const value = (object as any)[key];\n\n const prefixedKey = prefix ? `${prefix}.${key}` : key;\n\n if (isPlainObject(value) && Object.keys(value).length > 0) {\n Object.assign(\n result,\n flattenObjectImpl<typeof value>(value, prefixedKey)\n );\n } else if (Array.isArray(value)) {\n for (const [index, element_] of value.entries()) {\n (result as any)[`${prefixedKey}.${index}` as DeepKey<TObject>] =\n element_;\n }\n } else {\n (result as any)[prefixedKey as DeepKey<TObject>] = value;\n }\n }\n\n return result;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+CA,SAAgB,cAKd,QAAiC;AACjC,QAAO,kBAA2C,OAAO;;AAG3D,SAAS,kBAKP,QAAiB,SAAS,IAAoB;CAC9C,MAAM,SAAS,EAAE;CACjB,MAAM,OAAO,OAAO,KAAK,OAAO;AAEhC,MAAK,MAAM,OAAO,MAAM;EACtB,MAAM,QAAS,OAAe;EAE9B,MAAM,cAAc,SAAS,GAAG,OAAO,GAAG,QAAQ;AAElD,MAAI,cAAc,MAAM,IAAI,OAAO,KAAK,MAAM,CAAC,SAAS,EACtD,QAAO,OACL,QACA,kBAAgC,OAAO,YAAY,CACpD;WACQ,MAAM,QAAQ,MAAM,CAC7B,MAAK,MAAM,CAAC,OAAO,aAAa,MAAM,SAAS,CAC7C,CAAC,OAAe,GAAG,YAAY,GAAG,WAChC;MAGJ,CAAC,OAAe,eAAmC;;AAIvD,QAAO"}
@@ -1 +1,54 @@
1
- const e=require(`./type-checks/src/is-number.cjs`),t=require(`./convert/src/to-string-key.cjs`),n=require(`./type-checks/src/is-deep-key.cjs`),r=require(`./to-path.cjs`);function i(o,s,c){if(o===null)return c;switch(typeof s){case`string`:{let e=o[s];return e===void 0?n.isDeepKey(s)?i(o,r.toPath(s),c):c:e}case`number`:case`symbol`:{e.isNumber(s)&&(s=t.toStringKey(s));let n=Array.isArray(s)?void 0:o[s];return n===void 0?c:n}default:{if(Array.isArray(s))return a(o,s,c);s=Object.is(s?.valueOf(),-0)?`-0`:String(s);let e=o[s];return e===void 0?c:e}}}function a(e,t,n){if(t.length===0)return n;let r=e;for(let e of t){if(r===null)return n;r=r[e]}return r===void 0?n:r}exports.getField=i;
1
+ const require_is_number = require('./type-checks/src/is-number.cjs');
2
+ const require_to_string_key = require('./convert/src/to-string-key.cjs');
3
+ const require_is_deep_key = require('./type-checks/src/is-deep-key.cjs');
4
+ const require_to_path = require('./to-path.cjs');
5
+
6
+ //#region src/get-field.ts
7
+ /**
8
+ * Retrieves the value at a given path from an object. If the resolved value is undefined, the defaultValue is returned instead.
9
+ *
10
+ * @param {unknown} object - The object to query.
11
+ * @param {PropertyKey | readonly PropertyKey[]} path - The path of the property to get.
12
+ * @param {unknown} [defaultValue] - The value returned if the resolved value is undefined.
13
+ * @returns {any} - Returns the resolved value.
14
+ */
15
+ function getField(object, path, defaultValue) {
16
+ if (object === null) return defaultValue;
17
+ switch (typeof path) {
18
+ case "string": {
19
+ const result = object[path];
20
+ if (result === void 0) {
21
+ if (require_is_deep_key.isDeepKey(path)) return getField(object, require_to_path.toPath(path), defaultValue);
22
+ return defaultValue;
23
+ }
24
+ return result;
25
+ }
26
+ case "number":
27
+ case "symbol": {
28
+ if (require_is_number.isNumber(path)) path = require_to_string_key.toStringKey(path);
29
+ const result = Array.isArray(path) ? void 0 : object[path];
30
+ if (result === void 0) return defaultValue;
31
+ return result;
32
+ }
33
+ default: {
34
+ if (Array.isArray(path)) return getWithPath(object, path, defaultValue);
35
+ path = Object.is(path?.valueOf(), -0) ? "-0" : String(path);
36
+ const result = object[path];
37
+ if (result === void 0) return defaultValue;
38
+ return result;
39
+ }
40
+ }
41
+ }
42
+ function getWithPath(object, path, defaultValue) {
43
+ if (path.length === 0) return defaultValue;
44
+ let current = object;
45
+ for (const element_ of path) {
46
+ if (current === null) return defaultValue;
47
+ current = current[element_];
48
+ }
49
+ if (current === void 0) return defaultValue;
50
+ return current;
51
+ }
52
+
53
+ //#endregion
54
+ exports.getField = getField;
@@ -1,2 +1,55 @@
1
- import{isNumber as e}from"./type-checks/src/is-number.mjs";import{toStringKey as t}from"./convert/src/to-string-key.mjs";import{isDeepKey as n}from"./type-checks/src/is-deep-key.mjs";import{toPath as r}from"./to-path.mjs";function i(o,s,c){if(o===null)return c;switch(typeof s){case`string`:{let e=o[s];return e===void 0?n(s)?i(o,r(s),c):c:e}case`number`:case`symbol`:{e(s)&&(s=t(s));let n=Array.isArray(s)?void 0:o[s];return n===void 0?c:n}default:{if(Array.isArray(s))return a(o,s,c);s=Object.is(s?.valueOf(),-0)?`-0`:String(s);let e=o[s];return e===void 0?c:e}}}function a(e,t,n){if(t.length===0)return n;let r=e;for(let e of t){if(r===null)return n;r=r[e]}return r===void 0?n:r}export{i as getField};
1
+ import { isNumber } from "./type-checks/src/is-number.mjs";
2
+ import { toStringKey } from "./convert/src/to-string-key.mjs";
3
+ import { isDeepKey } from "./type-checks/src/is-deep-key.mjs";
4
+ import { toPath } from "./to-path.mjs";
5
+
6
+ //#region src/get-field.ts
7
+ /**
8
+ * Retrieves the value at a given path from an object. If the resolved value is undefined, the defaultValue is returned instead.
9
+ *
10
+ * @param {unknown} object - The object to query.
11
+ * @param {PropertyKey | readonly PropertyKey[]} path - The path of the property to get.
12
+ * @param {unknown} [defaultValue] - The value returned if the resolved value is undefined.
13
+ * @returns {any} - Returns the resolved value.
14
+ */
15
+ function getField(object, path, defaultValue) {
16
+ if (object === null) return defaultValue;
17
+ switch (typeof path) {
18
+ case "string": {
19
+ const result = object[path];
20
+ if (result === void 0) {
21
+ if (isDeepKey(path)) return getField(object, toPath(path), defaultValue);
22
+ return defaultValue;
23
+ }
24
+ return result;
25
+ }
26
+ case "number":
27
+ case "symbol": {
28
+ if (isNumber(path)) path = toStringKey(path);
29
+ const result = Array.isArray(path) ? void 0 : object[path];
30
+ if (result === void 0) return defaultValue;
31
+ return result;
32
+ }
33
+ default: {
34
+ if (Array.isArray(path)) return getWithPath(object, path, defaultValue);
35
+ path = Object.is(path?.valueOf(), -0) ? "-0" : String(path);
36
+ const result = object[path];
37
+ if (result === void 0) return defaultValue;
38
+ return result;
39
+ }
40
+ }
41
+ }
42
+ function getWithPath(object, path, defaultValue) {
43
+ if (path.length === 0) return defaultValue;
44
+ let current = object;
45
+ for (const element_ of path) {
46
+ if (current === null) return defaultValue;
47
+ current = current[element_];
48
+ }
49
+ if (current === void 0) return defaultValue;
50
+ return current;
51
+ }
52
+
53
+ //#endregion
54
+ export { getField };
2
55
  //# sourceMappingURL=get-field.mjs.map