@pawells/typescript-common 1.0.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.
Files changed (311) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +148 -0
  3. package/build/array/array-chunk.d.ts +10 -0
  4. package/build/array/array-chunk.d.ts.map +1 -0
  5. package/build/array/array-chunk.js +19 -0
  6. package/build/array/array-chunk.js.map +1 -0
  7. package/build/array/array-compact.d.ts +18 -0
  8. package/build/array/array-compact.d.ts.map +1 -0
  9. package/build/array/array-compact.js +22 -0
  10. package/build/array/array-compact.js.map +1 -0
  11. package/build/array/array-contains.d.ts +9 -0
  12. package/build/array/array-contains.d.ts.map +1 -0
  13. package/build/array/array-contains.js +13 -0
  14. package/build/array/array-contains.js.map +1 -0
  15. package/build/array/array-count-by.d.ts +21 -0
  16. package/build/array/array-count-by.d.ts.map +1 -0
  17. package/build/array/array-count-by.js +29 -0
  18. package/build/array/array-count-by.js.map +1 -0
  19. package/build/array/array-difference.d.ts +25 -0
  20. package/build/array/array-difference.d.ts.map +1 -0
  21. package/build/array/array-difference.js +34 -0
  22. package/build/array/array-difference.js.map +1 -0
  23. package/build/array/array-element.d.ts +7 -0
  24. package/build/array/array-element.d.ts.map +1 -0
  25. package/build/array/array-element.js +2 -0
  26. package/build/array/array-element.js.map +1 -0
  27. package/build/array/array-filter.d.ts +37 -0
  28. package/build/array/array-filter.d.ts.map +1 -0
  29. package/build/array/array-filter.js +78 -0
  30. package/build/array/array-filter.js.map +1 -0
  31. package/build/array/array-flatten.d.ts +16 -0
  32. package/build/array/array-flatten.d.ts.map +1 -0
  33. package/build/array/array-flatten.js +20 -0
  34. package/build/array/array-flatten.js.map +1 -0
  35. package/build/array/array-group-by.d.ts +13 -0
  36. package/build/array/array-group-by.d.ts.map +1 -0
  37. package/build/array/array-group-by.js +24 -0
  38. package/build/array/array-group-by.js.map +1 -0
  39. package/build/array/array-intersection.d.ts +25 -0
  40. package/build/array/array-intersection.d.ts.map +1 -0
  41. package/build/array/array-intersection.js +39 -0
  42. package/build/array/array-intersection.js.map +1 -0
  43. package/build/array/array-partition.d.ts +19 -0
  44. package/build/array/array-partition.d.ts.map +1 -0
  45. package/build/array/array-partition.js +32 -0
  46. package/build/array/array-partition.js.map +1 -0
  47. package/build/array/array-range.d.ts +18 -0
  48. package/build/array/array-range.d.ts.map +1 -0
  49. package/build/array/array-range.js +30 -0
  50. package/build/array/array-range.js.map +1 -0
  51. package/build/array/array-sample.d.ts +29 -0
  52. package/build/array/array-sample.d.ts.map +1 -0
  53. package/build/array/array-sample.js +19 -0
  54. package/build/array/array-sample.js.map +1 -0
  55. package/build/array/array-shuffle.d.ts +8 -0
  56. package/build/array/array-shuffle.d.ts.map +1 -0
  57. package/build/array/array-shuffle.js +19 -0
  58. package/build/array/array-shuffle.js.map +1 -0
  59. package/build/array/array-sort-by.d.ts +20 -0
  60. package/build/array/array-sort-by.d.ts.map +1 -0
  61. package/build/array/array-sort-by.js +31 -0
  62. package/build/array/array-sort-by.js.map +1 -0
  63. package/build/array/array-zip.d.ts +22 -0
  64. package/build/array/array-zip.d.ts.map +1 -0
  65. package/build/array/array-zip.js +25 -0
  66. package/build/array/array-zip.js.map +1 -0
  67. package/build/array/array.test.d.ts +2 -0
  68. package/build/array/array.test.d.ts.map +1 -0
  69. package/build/array/array.test.js +347 -0
  70. package/build/array/array.test.js.map +1 -0
  71. package/build/array/index.d.ts +27 -0
  72. package/build/array/index.d.ts.map +1 -0
  73. package/build/array/index.js +25 -0
  74. package/build/array/index.js.map +1 -0
  75. package/build/array/types.d.ts +32 -0
  76. package/build/array/types.d.ts.map +1 -0
  77. package/build/array/types.js +2 -0
  78. package/build/array/types.js.map +1 -0
  79. package/build/array/unique.d.ts +8 -0
  80. package/build/array/unique.d.ts.map +1 -0
  81. package/build/array/unique.js +13 -0
  82. package/build/array/unique.js.map +1 -0
  83. package/build/enum/enum-entries.d.ts +11 -0
  84. package/build/enum/enum-entries.d.ts.map +1 -0
  85. package/build/enum/enum-entries.js +14 -0
  86. package/build/enum/enum-entries.js.map +1 -0
  87. package/build/enum/enum-key-by-value.d.ts +13 -0
  88. package/build/enum/enum-key-by-value.d.ts.map +1 -0
  89. package/build/enum/enum-key-by-value.js +21 -0
  90. package/build/enum/enum-key-by-value.js.map +1 -0
  91. package/build/enum/enum-keys.d.ts +10 -0
  92. package/build/enum/enum-keys.d.ts.map +1 -0
  93. package/build/enum/enum-keys.js +14 -0
  94. package/build/enum/enum-keys.js.map +1 -0
  95. package/build/enum/enum-safe-value.d.ts +14 -0
  96. package/build/enum/enum-safe-value.d.ts.map +1 -0
  97. package/build/enum/enum-safe-value.js +16 -0
  98. package/build/enum/enum-safe-value.js.map +1 -0
  99. package/build/enum/enum-values.d.ts +19 -0
  100. package/build/enum/enum-values.d.ts.map +1 -0
  101. package/build/enum/enum-values.js +25 -0
  102. package/build/enum/enum-values.js.map +1 -0
  103. package/build/enum/enum.test.d.ts +2 -0
  104. package/build/enum/enum.test.d.ts.map +1 -0
  105. package/build/enum/enum.test.js +122 -0
  106. package/build/enum/enum.test.js.map +1 -0
  107. package/build/enum/index.d.ts +17 -0
  108. package/build/enum/index.d.ts.map +1 -0
  109. package/build/enum/index.js +17 -0
  110. package/build/enum/index.js.map +1 -0
  111. package/build/enum/types.d.ts +9 -0
  112. package/build/enum/types.d.ts.map +1 -0
  113. package/build/enum/types.js +2 -0
  114. package/build/enum/types.js.map +1 -0
  115. package/build/enum/validate-enum-value.d.ts +13 -0
  116. package/build/enum/validate-enum-value.d.ts.map +1 -0
  117. package/build/enum/validate-enum-value.js +18 -0
  118. package/build/enum/validate-enum-value.js.map +1 -0
  119. package/build/function/compose.d.ts +37 -0
  120. package/build/function/compose.d.ts.map +1 -0
  121. package/build/function/compose.js +7 -0
  122. package/build/function/compose.js.map +1 -0
  123. package/build/function/debounce.d.ts +25 -0
  124. package/build/function/debounce.d.ts.map +1 -0
  125. package/build/function/debounce.js +37 -0
  126. package/build/function/debounce.js.map +1 -0
  127. package/build/function/function.test.d.ts +2 -0
  128. package/build/function/function.test.d.ts.map +1 -0
  129. package/build/function/function.test.js +158 -0
  130. package/build/function/function.test.js.map +1 -0
  131. package/build/function/index.d.ts +17 -0
  132. package/build/function/index.d.ts.map +1 -0
  133. package/build/function/index.js +16 -0
  134. package/build/function/index.js.map +1 -0
  135. package/build/function/memoize.d.ts +23 -0
  136. package/build/function/memoize.d.ts.map +1 -0
  137. package/build/function/memoize.js +34 -0
  138. package/build/function/memoize.js.map +1 -0
  139. package/build/function/once.d.ts +17 -0
  140. package/build/function/once.d.ts.map +1 -0
  141. package/build/function/once.js +27 -0
  142. package/build/function/once.js.map +1 -0
  143. package/build/function/sleep.d.ts +20 -0
  144. package/build/function/sleep.d.ts.map +1 -0
  145. package/build/function/sleep.js +22 -0
  146. package/build/function/sleep.js.map +1 -0
  147. package/build/function/throttle.d.ts +17 -0
  148. package/build/function/throttle.d.ts.map +1 -0
  149. package/build/function/throttle.js +37 -0
  150. package/build/function/throttle.js.map +1 -0
  151. package/build/function/types.d.ts +5 -0
  152. package/build/function/types.d.ts.map +1 -0
  153. package/build/function/types.js +2 -0
  154. package/build/function/types.js.map +1 -0
  155. package/build/index.d.ts +32 -0
  156. package/build/index.d.ts.map +1 -0
  157. package/build/index.js +51 -0
  158. package/build/index.js.map +1 -0
  159. package/build/object/assert-object.d.ts +8 -0
  160. package/build/object/assert-object.d.ts.map +1 -0
  161. package/build/object/assert-object.js +10 -0
  162. package/build/object/assert-object.js.map +1 -0
  163. package/build/object/clone.d.ts +39 -0
  164. package/build/object/clone.d.ts.map +1 -0
  165. package/build/object/clone.js +85 -0
  166. package/build/object/clone.js.map +1 -0
  167. package/build/object/equals.d.ts +44 -0
  168. package/build/object/equals.d.ts.map +1 -0
  169. package/build/object/equals.js +104 -0
  170. package/build/object/equals.js.map +1 -0
  171. package/build/object/filter-cached.d.ts +9 -0
  172. package/build/object/filter-cached.d.ts.map +1 -0
  173. package/build/object/filter-cached.js +108 -0
  174. package/build/object/filter-cached.js.map +1 -0
  175. package/build/object/filter.d.ts +85 -0
  176. package/build/object/filter.d.ts.map +1 -0
  177. package/build/object/filter.js +248 -0
  178. package/build/object/filter.js.map +1 -0
  179. package/build/object/has-circular-reference.d.ts +8 -0
  180. package/build/object/has-circular-reference.d.ts.map +1 -0
  181. package/build/object/has-circular-reference.js +40 -0
  182. package/build/object/has-circular-reference.js.map +1 -0
  183. package/build/object/hash.d.ts +20 -0
  184. package/build/object/hash.d.ts.map +1 -0
  185. package/build/object/hash.js +39 -0
  186. package/build/object/hash.js.map +1 -0
  187. package/build/object/index.d.ts +32 -0
  188. package/build/object/index.d.ts.map +1 -0
  189. package/build/object/index.js +30 -0
  190. package/build/object/index.js.map +1 -0
  191. package/build/object/key-value-pairs.d.ts +21 -0
  192. package/build/object/key-value-pairs.d.ts.map +1 -0
  193. package/build/object/key-value-pairs.js +28 -0
  194. package/build/object/key-value-pairs.js.map +1 -0
  195. package/build/object/map-cached.d.ts +9 -0
  196. package/build/object/map-cached.d.ts.map +1 -0
  197. package/build/object/map-cached.js +97 -0
  198. package/build/object/map-cached.js.map +1 -0
  199. package/build/object/map.d.ts +29 -0
  200. package/build/object/map.d.ts.map +1 -0
  201. package/build/object/map.js +40 -0
  202. package/build/object/map.js.map +1 -0
  203. package/build/object/merge.d.ts +14 -0
  204. package/build/object/merge.d.ts.map +1 -0
  205. package/build/object/merge.js +41 -0
  206. package/build/object/merge.js.map +1 -0
  207. package/build/object/object-diff.d.ts +40 -0
  208. package/build/object/object-diff.d.ts.map +1 -0
  209. package/build/object/object-diff.js +45 -0
  210. package/build/object/object-diff.js.map +1 -0
  211. package/build/object/object-flatten.d.ts +22 -0
  212. package/build/object/object-flatten.d.ts.map +1 -0
  213. package/build/object/object-flatten.js +38 -0
  214. package/build/object/object-flatten.js.map +1 -0
  215. package/build/object/object-invert.d.ts +20 -0
  216. package/build/object/object-invert.d.ts.map +1 -0
  217. package/build/object/object-invert.js +26 -0
  218. package/build/object/object-invert.js.map +1 -0
  219. package/build/object/object.test.d.ts +2 -0
  220. package/build/object/object.test.d.ts.map +1 -0
  221. package/build/object/object.test.js +432 -0
  222. package/build/object/object.test.js.map +1 -0
  223. package/build/object/omit.d.ts +8 -0
  224. package/build/object/omit.d.ts.map +1 -0
  225. package/build/object/omit.js +17 -0
  226. package/build/object/omit.js.map +1 -0
  227. package/build/object/pick.d.ts +50 -0
  228. package/build/object/pick.d.ts.map +1 -0
  229. package/build/object/pick.js +60 -0
  230. package/build/object/pick.js.map +1 -0
  231. package/build/object/property-paths.d.ts +115 -0
  232. package/build/object/property-paths.d.ts.map +1 -0
  233. package/build/object/property-paths.js +170 -0
  234. package/build/object/property-paths.js.map +1 -0
  235. package/build/object/security-utils.d.ts +59 -0
  236. package/build/object/security-utils.d.ts.map +1 -0
  237. package/build/object/security-utils.js +165 -0
  238. package/build/object/security-utils.js.map +1 -0
  239. package/build/object/sort-keys.d.ts +26 -0
  240. package/build/object/sort-keys.d.ts.map +1 -0
  241. package/build/object/sort-keys.js +52 -0
  242. package/build/object/sort-keys.js.map +1 -0
  243. package/build/object/types.d.ts +152 -0
  244. package/build/object/types.d.ts.map +1 -0
  245. package/build/object/types.js +6 -0
  246. package/build/object/types.js.map +1 -0
  247. package/build/string/case-conversion.d.ts +50 -0
  248. package/build/string/case-conversion.d.ts.map +1 -0
  249. package/build/string/case-conversion.js +94 -0
  250. package/build/string/case-conversion.js.map +1 -0
  251. package/build/string/formatting.d.ts +108 -0
  252. package/build/string/formatting.d.ts.map +1 -0
  253. package/build/string/formatting.js +171 -0
  254. package/build/string/formatting.js.map +1 -0
  255. package/build/string/index.d.ts +15 -0
  256. package/build/string/index.d.ts.map +1 -0
  257. package/build/string/index.js +14 -0
  258. package/build/string/index.js.map +1 -0
  259. package/build/string/string.test.d.ts +2 -0
  260. package/build/string/string.test.d.ts.map +1 -0
  261. package/build/string/string.test.js +321 -0
  262. package/build/string/string.test.js.map +1 -0
  263. package/build/string/transformation.d.ts +18 -0
  264. package/build/string/transformation.d.ts.map +1 -0
  265. package/build/string/transformation.js +32 -0
  266. package/build/string/transformation.js.map +1 -0
  267. package/build/string/types.d.ts +44 -0
  268. package/build/string/types.d.ts.map +1 -0
  269. package/build/string/types.js +2 -0
  270. package/build/string/types.js.map +1 -0
  271. package/build/string/validation.d.ts +18 -0
  272. package/build/string/validation.d.ts.map +1 -0
  273. package/build/string/validation.js +26 -0
  274. package/build/string/validation.js.map +1 -0
  275. package/build/time/elapsed-time/constants.d.ts +10 -0
  276. package/build/time/elapsed-time/constants.d.ts.map +1 -0
  277. package/build/time/elapsed-time/constants.js +96 -0
  278. package/build/time/elapsed-time/constants.js.map +1 -0
  279. package/build/time/elapsed-time/elapsed-time.d.ts +412 -0
  280. package/build/time/elapsed-time/elapsed-time.d.ts.map +1 -0
  281. package/build/time/elapsed-time/elapsed-time.js +652 -0
  282. package/build/time/elapsed-time/elapsed-time.js.map +1 -0
  283. package/build/time/elapsed-time/types.d.ts +150 -0
  284. package/build/time/elapsed-time/types.d.ts.map +1 -0
  285. package/build/time/elapsed-time/types.js +2 -0
  286. package/build/time/elapsed-time/types.js.map +1 -0
  287. package/build/time/elapsed-time/utils.d.ts +18 -0
  288. package/build/time/elapsed-time/utils.d.ts.map +1 -0
  289. package/build/time/elapsed-time/utils.js +24 -0
  290. package/build/time/elapsed-time/utils.js.map +1 -0
  291. package/build/time/index.d.ts +18 -0
  292. package/build/time/index.d.ts.map +1 -0
  293. package/build/time/index.js +17 -0
  294. package/build/time/index.js.map +1 -0
  295. package/build/time/stopwatch/entry-types.d.ts +13 -0
  296. package/build/time/stopwatch/entry-types.d.ts.map +1 -0
  297. package/build/time/stopwatch/entry-types.js +2 -0
  298. package/build/time/stopwatch/entry-types.js.map +1 -0
  299. package/build/time/stopwatch/entry.d.ts +80 -0
  300. package/build/time/stopwatch/entry.d.ts.map +1 -0
  301. package/build/time/stopwatch/entry.js +105 -0
  302. package/build/time/stopwatch/entry.js.map +1 -0
  303. package/build/time/stopwatch/stopwatch.d.ts +232 -0
  304. package/build/time/stopwatch/stopwatch.d.ts.map +1 -0
  305. package/build/time/stopwatch/stopwatch.js +315 -0
  306. package/build/time/stopwatch/stopwatch.js.map +1 -0
  307. package/build/time/time.test.d.ts +2 -0
  308. package/build/time/time.test.d.ts.map +1 -0
  309. package/build/time/time.test.js +211 -0
  310. package/build/time/time.test.js.map +1 -0
  311. package/package.json +63 -0
@@ -0,0 +1,14 @@
1
+ import { TEnumType, TEnumValue } from './types.js';
2
+ /**
3
+ * Gets an enum value safely with a fallback if the value is invalid
4
+ * @param e The enum object
5
+ * @param value The value to check against the enum
6
+ * @param fallback The fallback value to return if the provided value is invalid
7
+ * @returns The original value if valid in the enum, otherwise the fallback value
8
+ * @example
9
+ * enum Direction { Up = 'UP', Down = 'DOWN' }
10
+ * EnumSafeValue(Direction, 'UP', 'DOWN'); // 'UP'
11
+ * EnumSafeValue(Direction, 'INVALID', 'DOWN'); // 'DOWN'
12
+ */
13
+ export declare function EnumSafeValue<T extends TEnumType = TEnumType>(e: T, value: TEnumValue, fallback: TEnumValue): TEnumValue;
14
+ //# sourceMappingURL=enum-safe-value.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enum-safe-value.d.ts","sourceRoot":"","sources":["../../src/enum/enum-safe-value.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAGnD;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,GAAG,UAAU,CAExH"}
@@ -0,0 +1,16 @@
1
+ import { ValidateEnumValue } from './validate-enum-value.js';
2
+ /**
3
+ * Gets an enum value safely with a fallback if the value is invalid
4
+ * @param e The enum object
5
+ * @param value The value to check against the enum
6
+ * @param fallback The fallback value to return if the provided value is invalid
7
+ * @returns The original value if valid in the enum, otherwise the fallback value
8
+ * @example
9
+ * enum Direction { Up = 'UP', Down = 'DOWN' }
10
+ * EnumSafeValue(Direction, 'UP', 'DOWN'); // 'UP'
11
+ * EnumSafeValue(Direction, 'INVALID', 'DOWN'); // 'DOWN'
12
+ */
13
+ export function EnumSafeValue(e, value, fallback) {
14
+ return ValidateEnumValue(e, value) ? value : fallback;
15
+ }
16
+ //# sourceMappingURL=enum-safe-value.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enum-safe-value.js","sourceRoot":"","sources":["../../src/enum/enum-safe-value.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D;;;;;;;;;;GAUG;AACH,MAAM,UAAU,aAAa,CAAkC,CAAI,EAAE,KAAiB,EAAE,QAAoB;IAC3G,OAAO,iBAAiB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;AACvD,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Returns an array of all values in an enum
3
+ * Filters out reverse mappings for numeric enums
4
+ *
5
+ * @template TEnum - The enum type
6
+ * @param enumObj - The enum object
7
+ * @returns Array of enum values
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * enum Color { Red = 0, Green = 1, Blue = 2 }
12
+ * EnumValues(Color); // [0, 1, 2]
13
+ *
14
+ * enum Status { Active = 'ACTIVE', Inactive = 'INACTIVE' }
15
+ * EnumValues(Status); // ['ACTIVE', 'INACTIVE']
16
+ * ```
17
+ */
18
+ export declare function EnumValues<TEnum extends Record<string, string | number>>(enumObj: TEnum): Array<TEnum[keyof TEnum]>;
19
+ //# sourceMappingURL=enum-values.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enum-values.d.ts","sourceRoot":"","sources":["../../src/enum/enum-values.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,UAAU,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,EACvE,OAAO,EAAE,KAAK,GACZ,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAM3B"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Returns an array of all values in an enum
3
+ * Filters out reverse mappings for numeric enums
4
+ *
5
+ * @template TEnum - The enum type
6
+ * @param enumObj - The enum object
7
+ * @returns Array of enum values
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * enum Color { Red = 0, Green = 1, Blue = 2 }
12
+ * EnumValues(Color); // [0, 1, 2]
13
+ *
14
+ * enum Status { Active = 'ACTIVE', Inactive = 'INACTIVE' }
15
+ * EnumValues(Status); // ['ACTIVE', 'INACTIVE']
16
+ * ```
17
+ */
18
+ export function EnumValues(enumObj) {
19
+ if (!enumObj)
20
+ return [];
21
+ return Object.keys(enumObj)
22
+ .filter(key => Number.isNaN(Number(key))) // Filter out reverse mappings
23
+ .map(key => enumObj[key]);
24
+ }
25
+ //# sourceMappingURL=enum-values.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enum-values.js","sourceRoot":"","sources":["../../src/enum/enum-values.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,UAAU,CACzB,OAAc;IAEd,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IAExB,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;SACzB,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,8BAA8B;SACvE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAA8B,CAAC;AACzD,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=enum.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enum.test.d.ts","sourceRoot":"","sources":["../../src/enum/enum.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,122 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { EnumEntries } from './enum-entries.js';
3
+ import { EnumKeyByValue } from './enum-key-by-value.js';
4
+ import { EnumKeys } from './enum-keys.js';
5
+ import { EnumSafeValue } from './enum-safe-value.js';
6
+ import { EnumValues } from './enum-values.js';
7
+ import { ValidateEnumValue } from './validate-enum-value.js';
8
+ var Direction;
9
+ (function (Direction) {
10
+ Direction["Up"] = "UP";
11
+ Direction["Down"] = "DOWN";
12
+ Direction["Left"] = "LEFT";
13
+ Direction["Right"] = "RIGHT";
14
+ })(Direction || (Direction = {}));
15
+ var Status;
16
+ (function (Status) {
17
+ Status[Status["Active"] = 1] = "Active";
18
+ Status[Status["Inactive"] = 2] = "Inactive";
19
+ Status[Status["Pending"] = 3] = "Pending";
20
+ })(Status || (Status = {}));
21
+ describe('EnumEntries', () => {
22
+ it('returns key-value pairs for a string enum', () => {
23
+ const entries = EnumEntries(Direction);
24
+ expect(entries).toEqual([
25
+ ['Up', 'UP'],
26
+ ['Down', 'DOWN'],
27
+ ['Left', 'LEFT'],
28
+ ['Right', 'RIGHT'],
29
+ ]);
30
+ });
31
+ it('filters out numeric reverse-mapping keys', () => {
32
+ const entries = EnumEntries(Status);
33
+ // Numeric enums have reverse mappings like { 1: 'Active', Active: 1 }
34
+ // EnumEntries should return only the non-numeric ones
35
+ entries.forEach(([key]) => {
36
+ expect(Number.isNaN(Number(key))).toBe(true);
37
+ });
38
+ expect(entries).toHaveLength(3);
39
+ });
40
+ it('returns empty array for null/undefined input', () => {
41
+ expect(EnumEntries(null)).toEqual([]);
42
+ });
43
+ });
44
+ describe('EnumKeys', () => {
45
+ it('returns keys for a string enum', () => {
46
+ expect(EnumKeys(Direction)).toEqual(['Up', 'Down', 'Left', 'Right']);
47
+ });
48
+ it('returns only non-numeric keys for a numeric enum', () => {
49
+ const keys = EnumKeys(Status);
50
+ expect(keys).toEqual(['Active', 'Inactive', 'Pending']);
51
+ });
52
+ it('returns empty array for null input', () => {
53
+ expect(EnumKeys(null)).toEqual([]);
54
+ });
55
+ });
56
+ describe('EnumValues', () => {
57
+ it('returns values for a string enum', () => {
58
+ expect(EnumValues(Direction)).toEqual(['UP', 'DOWN', 'LEFT', 'RIGHT']);
59
+ });
60
+ it('returns numeric values for a numeric enum', () => {
61
+ expect(EnumValues(Status)).toEqual([1, 2, 3]);
62
+ });
63
+ it('returns empty array for null input', () => {
64
+ expect(EnumValues(null)).toEqual([]);
65
+ });
66
+ });
67
+ describe('ValidateEnumValue', () => {
68
+ it('returns true for a valid string enum value', () => {
69
+ expect(ValidateEnumValue(Direction, 'UP')).toBe(true);
70
+ });
71
+ it('returns false for an invalid value', () => {
72
+ expect(ValidateEnumValue(Direction, 'DIAGONAL')).toBe(false);
73
+ });
74
+ it('returns true for a valid numeric enum value', () => {
75
+ expect(ValidateEnumValue(Status, 1)).toBe(true);
76
+ });
77
+ it('returns false for an invalid numeric value', () => {
78
+ expect(ValidateEnumValue(Status, 99)).toBe(false);
79
+ });
80
+ it('returns false for null/undefined value', () => {
81
+ expect(ValidateEnumValue(Direction, null)).toBe(false);
82
+ expect(ValidateEnumValue(Direction, undefined)).toBe(false);
83
+ });
84
+ it('returns false for null enum', () => {
85
+ expect(ValidateEnumValue(null, 'UP')).toBe(false);
86
+ });
87
+ });
88
+ describe('EnumKeyByValue', () => {
89
+ it('returns key for a valid value', () => {
90
+ expect(EnumKeyByValue(Direction, 'UP')).toBe('Up');
91
+ expect(EnumKeyByValue(Direction, 'DOWN')).toBe('Down');
92
+ });
93
+ it('returns undefined for an unknown value', () => {
94
+ expect(EnumKeyByValue(Direction, 'DIAGONAL')).toBeUndefined();
95
+ });
96
+ it('returns undefined for null/undefined value', () => {
97
+ expect(EnumKeyByValue(Direction, null)).toBeUndefined();
98
+ expect(EnumKeyByValue(Direction, undefined)).toBeUndefined();
99
+ });
100
+ it('returns undefined for null enum', () => {
101
+ expect(EnumKeyByValue(null, 'UP')).toBeUndefined();
102
+ });
103
+ it('works with numeric enum', () => {
104
+ expect(EnumKeyByValue(Status, 1)).toBe('Active');
105
+ });
106
+ });
107
+ describe('EnumSafeValue', () => {
108
+ it('returns the original value when valid', () => {
109
+ expect(EnumSafeValue(Direction, 'UP', 'DOWN')).toBe('UP');
110
+ });
111
+ it('returns the fallback when value is invalid', () => {
112
+ expect(EnumSafeValue(Direction, 'DIAGONAL', 'DOWN')).toBe('DOWN');
113
+ });
114
+ it('returns the fallback for null value', () => {
115
+ expect(EnumSafeValue(Direction, null, 'UP')).toBe('UP');
116
+ });
117
+ it('works with numeric enums', () => {
118
+ expect(EnumSafeValue(Status, 1, 2)).toBe(1);
119
+ expect(EnumSafeValue(Status, 99, 2)).toBe(2);
120
+ });
121
+ });
122
+ //# sourceMappingURL=enum.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enum.test.js","sourceRoot":"","sources":["../../src/enum/enum.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ export * from './types.js';
2
+ /**
3
+ * Enum utility functions.
4
+ *
5
+ * Provides type-safe helpers for querying TypeScript enum keys, values, and
6
+ * entries; looking up enum keys by value; and safely coercing unknown values
7
+ * into valid enum members with a fallback.
8
+ *
9
+ * @module enum
10
+ */
11
+ export * from './enum-keys.js';
12
+ export * from './enum-values.js';
13
+ export * from './enum-entries.js';
14
+ export * from './validate-enum-value.js';
15
+ export * from './enum-key-by-value.js';
16
+ export * from './enum-safe-value.js';
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/enum/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B;;;;;;;;GAQG;AAEH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC"}
@@ -0,0 +1,17 @@
1
+ export * from './types.js';
2
+ /**
3
+ * Enum utility functions.
4
+ *
5
+ * Provides type-safe helpers for querying TypeScript enum keys, values, and
6
+ * entries; looking up enum keys by value; and safely coercing unknown values
7
+ * into valid enum members with a fallback.
8
+ *
9
+ * @module enum
10
+ */
11
+ export * from './enum-keys.js';
12
+ export * from './enum-values.js';
13
+ export * from './enum-entries.js';
14
+ export * from './validate-enum-value.js';
15
+ export * from './enum-key-by-value.js';
16
+ export * from './enum-safe-value.js';
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/enum/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B;;;;;;;;GAQG;AAEH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Represents a value in an enum, either a string or number.
3
+ */
4
+ export type TEnumValue = string | number;
5
+ /**
6
+ * Represents an enum as a record mapping string keys to enum values.
7
+ */
8
+ export type TEnumType = Record<string, TEnumValue>;
9
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/enum/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC;AAEzC;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/enum/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,13 @@
1
+ import { TEnumType, TEnumValue } from './types.js';
2
+ /**
3
+ * Checks if a value is a valid value in the given enum
4
+ * @param e The enum object
5
+ * @param value The value to check
6
+ * @returns True if the value is valid in the enum
7
+ * @example
8
+ * enum Direction { Up = 'UP', Down = 'DOWN' }
9
+ * ValidateEnumValue(Direction, 'UP'); // true
10
+ * ValidateEnumValue(Direction, 'INVALID'); // false
11
+ */
12
+ export declare function ValidateEnumValue<T extends TEnumType = TEnumType>(e: T, value: TEnumValue): boolean;
13
+ //# sourceMappingURL=validate-enum-value.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-enum-value.d.ts","sourceRoot":"","sources":["../../src/enum/validate-enum-value.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAGnD;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAKnG"}
@@ -0,0 +1,18 @@
1
+ import { EnumValues } from './enum-values.js';
2
+ /**
3
+ * Checks if a value is a valid value in the given enum
4
+ * @param e The enum object
5
+ * @param value The value to check
6
+ * @returns True if the value is valid in the enum
7
+ * @example
8
+ * enum Direction { Up = 'UP', Down = 'DOWN' }
9
+ * ValidateEnumValue(Direction, 'UP'); // true
10
+ * ValidateEnumValue(Direction, 'INVALID'); // false
11
+ */
12
+ export function ValidateEnumValue(e, value) {
13
+ if (value === null || typeof value === 'undefined' || !e)
14
+ return false;
15
+ const possibleValues = EnumValues(e);
16
+ return possibleValues.includes(value);
17
+ }
18
+ //# sourceMappingURL=validate-enum-value.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-enum-value.js","sourceRoot":"","sources":["../../src/enum/validate-enum-value.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C;;;;;;;;;GASG;AACH,MAAM,UAAU,iBAAiB,CAAkC,CAAI,EAAE,KAAiB;IACzF,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,WAAW,IAAI,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAEvE,MAAM,cAAc,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IACrC,OAAQ,cAA+B,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACzD,CAAC"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Composes functions **right-to-left** — the rightmost function is applied first.
3
+ *
4
+ * Overloads are provided for up to five functions with distinct types.
5
+ * For same-type pipelines of any length, use the variadic form.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * const process = Compose(trim, toLowerCase, removeSpaces);
10
+ * process(' Hello World '); // removeSpaces(toLowerCase(trim(' Hello World ')))
11
+ * ```
12
+ */
13
+ export declare function Compose<A, B>(f1: (a: A) => B): (a: A) => B;
14
+ export declare function Compose<A, B, C>(f1: (b: B) => C, f2: (a: A) => B): (a: A) => C;
15
+ export declare function Compose<A, B, C, D>(f1: (c: C) => D, f2: (b: B) => C, f3: (a: A) => B): (a: A) => D;
16
+ export declare function Compose<A, B, C, D, E>(f1: (d: D) => E, f2: (c: C) => D, f3: (b: B) => C, f4: (a: A) => B): (a: A) => E;
17
+ export declare function Compose<A, B, C, D, E, F>(f1: (e: E) => F, f2: (d: D) => E, f3: (c: C) => D, f4: (b: B) => C, f5: (a: A) => B): (a: A) => F;
18
+ export declare function Compose(...fns: Array<(arg: any) => any>): (arg: any) => any;
19
+ /**
20
+ * Pipes functions **left-to-right** — the leftmost function is applied first.
21
+ *
22
+ * Overloads are provided for up to five functions with distinct types.
23
+ * For same-type pipelines of any length, use the variadic form.
24
+ *
25
+ * @example
26
+ * ```typescript
27
+ * const process = Pipe(trim, toLowerCase, removeSpaces);
28
+ * process(' Hello World '); // removeSpaces(toLowerCase(trim(' Hello World ')))
29
+ * ```
30
+ */
31
+ export declare function Pipe<A, B>(f1: (a: A) => B): (a: A) => B;
32
+ export declare function Pipe<A, B, C>(f1: (a: A) => B, f2: (b: B) => C): (a: A) => C;
33
+ export declare function Pipe<A, B, C, D>(f1: (a: A) => B, f2: (b: B) => C, f3: (c: C) => D): (a: A) => D;
34
+ export declare function Pipe<A, B, C, D, E>(f1: (a: A) => B, f2: (b: B) => C, f3: (c: C) => D, f4: (d: D) => E): (a: A) => E;
35
+ export declare function Pipe<A, B, C, D, E, F>(f1: (a: A) => B, f2: (b: B) => C, f3: (c: C) => D, f4: (d: D) => E, f5: (e: E) => F): (a: A) => F;
36
+ export declare function Pipe(...fns: Array<(arg: any) => any>): (arg: any) => any;
37
+ //# sourceMappingURL=compose.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compose.d.ts","sourceRoot":"","sources":["../../src/function/compose.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AAC5D,wBAAgB,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AAChF,wBAAgB,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AACpG,wBAAgB,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AACxH,wBAAgB,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AAC5I,wBAAgB,OAAO,CAAC,GAAG,GAAG,EAAE,KAAK,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC;AAM7E;;;;;;;;;;;GAWG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AACzD,wBAAgB,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AAC7E,wBAAgB,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AACjG,wBAAgB,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AACrH,wBAAgB,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AACzI,wBAAgB,IAAI,CAAC,GAAG,GAAG,EAAE,KAAK,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC"}
@@ -0,0 +1,7 @@
1
+ export function Compose(...fns) {
2
+ return (arg) => fns.reduceRight((v, fn) => fn(v), arg);
3
+ }
4
+ export function Pipe(...fns) {
5
+ return (arg) => fns.reduce((v, fn) => fn(v), arg);
6
+ }
7
+ //# sourceMappingURL=compose.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compose.js","sourceRoot":"","sources":["../../src/function/compose.ts"],"names":[],"mappings":"AAmBA,MAAM,UAAU,OAAO,CAAC,GAAG,GAA6B;IACvD,OAAO,CAAC,GAAQ,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAC7D,CAAC;AAqBD,MAAM,UAAU,IAAI,CAAC,GAAG,GAA6B;IACpD,OAAO,CAAC,GAAQ,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACxD,CAAC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Creates a debounced version of `fn` that delays execution until after `ms`
3
+ * milliseconds have elapsed since the last invocation.
4
+ *
5
+ * The returned function also exposes a `.cancel()` method to discard any
6
+ * pending invocation.
7
+ *
8
+ * @template T - The wrapped function type
9
+ * @param fn - The function to debounce
10
+ * @param ms - Delay in milliseconds
11
+ * @returns A debounced function with a `.cancel()` method
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * const save = Debounce((value: string) => api.save(value), 300);
16
+ * input.addEventListener('input', (e) => save(e.target.value));
17
+ *
18
+ * // Cancel a pending call:
19
+ * save.cancel();
20
+ * ```
21
+ */
22
+ export declare function Debounce<T extends (...args: any[]) => any>(fn: T, ms: number): ((...args: Parameters<T>) => void) & {
23
+ cancel: () => void;
24
+ };
25
+ //# sourceMappingURL=debounce.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debounce.d.ts","sourceRoot":"","sources":["../../src/function/debounce.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EACzD,EAAE,EAAE,CAAC,EACL,EAAE,EAAE,MAAM,GACR,CAAC,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG;IAAE,MAAM,EAAE,MAAM,IAAI,CAAA;CAAE,CAiB7D"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Creates a debounced version of `fn` that delays execution until after `ms`
3
+ * milliseconds have elapsed since the last invocation.
4
+ *
5
+ * The returned function also exposes a `.cancel()` method to discard any
6
+ * pending invocation.
7
+ *
8
+ * @template T - The wrapped function type
9
+ * @param fn - The function to debounce
10
+ * @param ms - Delay in milliseconds
11
+ * @returns A debounced function with a `.cancel()` method
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * const save = Debounce((value: string) => api.save(value), 300);
16
+ * input.addEventListener('input', (e) => save(e.target.value));
17
+ *
18
+ * // Cancel a pending call:
19
+ * save.cancel();
20
+ * ```
21
+ */
22
+ export function Debounce(fn, ms) {
23
+ let timer;
24
+ function debounced(...args) {
25
+ clearTimeout(timer);
26
+ timer = setTimeout(() => {
27
+ timer = undefined;
28
+ fn(...args);
29
+ }, ms);
30
+ }
31
+ debounced.cancel = () => {
32
+ clearTimeout(timer);
33
+ timer = undefined;
34
+ };
35
+ return debounced;
36
+ }
37
+ //# sourceMappingURL=debounce.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debounce.js","sourceRoot":"","sources":["../../src/function/debounce.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,QAAQ,CACvB,EAAK,EACL,EAAU;IAEV,IAAI,KAAgD,CAAC;IAErD,SAAS,SAAS,CAAC,GAAG,IAAmB;QACxC,YAAY,CAAC,KAAK,CAAC,CAAC;QACpB,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YACvB,KAAK,GAAG,SAAS,CAAC;YAClB,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QACb,CAAC,EAAE,EAAE,CAAC,CAAC;IACR,CAAC;IAED,SAAS,CAAC,MAAM,GAAG,GAAS,EAAE;QAC7B,YAAY,CAAC,KAAK,CAAC,CAAC;QACpB,KAAK,GAAG,SAAS,CAAC;IACnB,CAAC,CAAC;IAEF,OAAO,SAAS,CAAC;AAClB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=function.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"function.test.d.ts","sourceRoot":"","sources":["../../src/function/function.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,158 @@
1
+ import { describe, it, expect, vi } from 'vitest';
2
+ import { Debounce } from './debounce.js';
3
+ import { Throttle } from './throttle.js';
4
+ import { Memoize } from './memoize.js';
5
+ import { Once } from './once.js';
6
+ import { Compose, Pipe } from './compose.js';
7
+ import { Sleep } from './sleep.js';
8
+ describe('Debounce', () => {
9
+ it('delays invocation', async () => {
10
+ const fn = vi.fn();
11
+ const debounced = Debounce(fn, 50);
12
+ debounced();
13
+ debounced();
14
+ debounced();
15
+ expect(fn).not.toHaveBeenCalled();
16
+ await Sleep(80);
17
+ expect(fn).toHaveBeenCalledTimes(1);
18
+ });
19
+ it('calls with the latest arguments', async () => {
20
+ const fn = vi.fn();
21
+ const debounced = Debounce(fn, 50);
22
+ debounced('a');
23
+ debounced('b');
24
+ debounced('c');
25
+ await Sleep(80);
26
+ expect(fn).toHaveBeenCalledWith('c');
27
+ });
28
+ it('cancel prevents the pending call', async () => {
29
+ const fn = vi.fn();
30
+ const debounced = Debounce(fn, 50);
31
+ debounced();
32
+ debounced.cancel();
33
+ await Sleep(80);
34
+ expect(fn).not.toHaveBeenCalled();
35
+ });
36
+ it('allows a fresh call after cancel', async () => {
37
+ const fn = vi.fn();
38
+ const debounced = Debounce(fn, 50);
39
+ debounced();
40
+ debounced.cancel();
41
+ debounced();
42
+ await Sleep(80);
43
+ expect(fn).toHaveBeenCalledTimes(1);
44
+ });
45
+ });
46
+ describe('Throttle', () => {
47
+ it('calls the function immediately on first invocation', () => {
48
+ const fn = vi.fn();
49
+ const throttled = Throttle(fn, 100);
50
+ throttled();
51
+ expect(fn).toHaveBeenCalledTimes(1);
52
+ });
53
+ it('does not call again within the interval', () => {
54
+ const fn = vi.fn();
55
+ const throttled = Throttle(fn, 100);
56
+ throttled();
57
+ throttled();
58
+ throttled();
59
+ expect(fn).toHaveBeenCalledTimes(1);
60
+ });
61
+ it('calls again after the interval has elapsed', async () => {
62
+ const fn = vi.fn();
63
+ const throttled = Throttle(fn, 50);
64
+ throttled();
65
+ await Sleep(80);
66
+ throttled();
67
+ expect(fn).toHaveBeenCalledTimes(2);
68
+ });
69
+ });
70
+ describe('Memoize', () => {
71
+ it('returns cached result on repeated calls', () => {
72
+ const fn = vi.fn((n) => n * n);
73
+ const memo = Memoize(fn);
74
+ expect(memo(4)).toBe(16);
75
+ expect(memo(4)).toBe(16);
76
+ expect(fn).toHaveBeenCalledTimes(1);
77
+ });
78
+ it('computes separately for different arguments', () => {
79
+ const fn = vi.fn((n) => n * 2);
80
+ const memo = Memoize(fn);
81
+ expect(memo(3)).toBe(6);
82
+ expect(memo(5)).toBe(10);
83
+ expect(fn).toHaveBeenCalledTimes(2);
84
+ });
85
+ it('uses a custom key function', () => {
86
+ const fn = vi.fn((obj) => obj.id * 10);
87
+ const memo = Memoize(fn, (obj) => String(obj.id));
88
+ expect(memo({ id: 1 })).toBe(10);
89
+ expect(memo({ id: 1 })).toBe(10);
90
+ expect(fn).toHaveBeenCalledTimes(1);
91
+ });
92
+ });
93
+ describe('Once', () => {
94
+ it('calls the function only once', () => {
95
+ const fn = vi.fn(() => 42);
96
+ const once = Once(fn);
97
+ expect(once()).toBe(42);
98
+ expect(once()).toBe(42);
99
+ expect(fn).toHaveBeenCalledTimes(1);
100
+ });
101
+ it('always returns the result of the first call', () => {
102
+ let counter = 0;
103
+ const once = Once(() => ++counter);
104
+ expect(once()).toBe(1);
105
+ expect(once()).toBe(1);
106
+ expect(once()).toBe(1);
107
+ });
108
+ });
109
+ describe('Compose', () => {
110
+ it('applies functions right-to-left', () => {
111
+ const addOne = (n) => n + 1;
112
+ const double = (n) => n * 2;
113
+ const square = (n) => n * n;
114
+ // square first, then double, then addOne
115
+ const fn = Compose(addOne, double, square);
116
+ expect(fn(3)).toBe(addOne(double(square(3)))); // (3²=9, *2=18, +1=19)
117
+ expect(fn(3)).toBe(19);
118
+ });
119
+ it('handles a single function', () => {
120
+ const fn = Compose((n) => n + 10);
121
+ expect(fn(5)).toBe(15);
122
+ });
123
+ it('returns the value unchanged when no functions provided', () => {
124
+ const fn = Compose();
125
+ expect(fn(42)).toBe(42);
126
+ });
127
+ });
128
+ describe('Pipe', () => {
129
+ it('applies functions left-to-right', () => {
130
+ const addOne = (n) => n + 1;
131
+ const double = (n) => n * 2;
132
+ const square = (n) => n * n;
133
+ // addOne first, then double, then square
134
+ const fn = Pipe(addOne, double, square);
135
+ expect(fn(3)).toBe(square(double(addOne(3)))); // (3+1=4, *2=8, 8²=64)
136
+ expect(fn(3)).toBe(64);
137
+ });
138
+ it('handles a single function', () => {
139
+ const fn = Pipe((s) => s.toUpperCase());
140
+ expect(fn('hello')).toBe('HELLO');
141
+ });
142
+ it('is the reverse of Compose', () => {
143
+ const inc = (n) => n + 1;
144
+ const dbl = (n) => n * 2;
145
+ expect(Pipe(inc, dbl)(5)).toBe(Compose(dbl, inc)(5));
146
+ });
147
+ });
148
+ describe('Sleep', () => {
149
+ it('resolves after the specified delay', async () => {
150
+ const start = Date.now();
151
+ await Sleep(50);
152
+ expect(Date.now() - start).toBeGreaterThanOrEqual(40);
153
+ });
154
+ it('returns a Promise', () => {
155
+ expect(Sleep(0)).toBeInstanceOf(Promise);
156
+ });
157
+ });
158
+ //# sourceMappingURL=function.test.js.map