typetify 2.0.0 → 2.2.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 (185) hide show
  1. package/CHANGELOG.md +70 -0
  2. package/README.md +108 -0
  3. package/dist/async/index.js +1 -49
  4. package/dist/async/index.mjs +1 -4
  5. package/dist/chunk-272Z3AXV.js +1 -0
  6. package/dist/chunk-4HQERWI6.mjs +1 -0
  7. package/dist/chunk-4JG7CFRK.js +1 -0
  8. package/dist/chunk-5FBZYPQM.mjs +1 -0
  9. package/dist/chunk-5LWNMYHB.js +1 -0
  10. package/dist/chunk-5XQRYI2Q.mjs +1 -0
  11. package/dist/chunk-6HA2SN23.js +1 -0
  12. package/dist/chunk-6NWIIOHH.js +1 -0
  13. package/dist/chunk-7LBL6CYT.js +1 -0
  14. package/dist/chunk-7V3EDYJD.mjs +1 -0
  15. package/dist/chunk-B3R73UK5.mjs +1 -0
  16. package/dist/chunk-EAHFED6V.mjs +1 -0
  17. package/dist/chunk-EKSHS4DL.mjs +1 -0
  18. package/dist/chunk-FYQNKDT3.mjs +1 -0
  19. package/dist/chunk-GKOA3XGQ.js +1 -0
  20. package/dist/chunk-I4YSQ4HB.js +1 -0
  21. package/dist/chunk-JZXLCA2E.mjs +1 -0
  22. package/dist/chunk-M5OMYDI7.mjs +1 -0
  23. package/dist/chunk-MPY3WRLG.mjs +1 -0
  24. package/dist/chunk-MSOFO6QN.js +1 -0
  25. package/dist/chunk-NENRAPOL.mjs +1 -0
  26. package/dist/chunk-NOW4Q26G.mjs +1 -0
  27. package/dist/chunk-P4UNM7SF.js +1 -0
  28. package/dist/chunk-P5E2JDCX.mjs +1 -0
  29. package/dist/chunk-Q7SUL7MD.js +1 -0
  30. package/dist/chunk-QKNZICUO.mjs +1 -0
  31. package/dist/chunk-RHMANSTA.mjs +1 -0
  32. package/dist/chunk-SF64HETW.js +1 -0
  33. package/dist/chunk-T66YO63J.js +1 -0
  34. package/dist/chunk-TNK6EVQK.mjs +1 -0
  35. package/dist/chunk-TSJFKV3R.js +1 -0
  36. package/dist/chunk-TVCWWECJ.mjs +1 -0
  37. package/dist/chunk-W5I352FJ.js +1 -0
  38. package/dist/chunk-WAT4QJB2.js +1 -0
  39. package/dist/chunk-WCG5ODRX.mjs +1 -0
  40. package/dist/chunk-WDFIRO2J.js +1 -0
  41. package/dist/chunk-WOT6VMZA.js +1 -0
  42. package/dist/chunk-WQPSXQT5.js +1 -0
  43. package/dist/chunk-WS743BFA.js +1 -0
  44. package/dist/chunk-XPY5CWKZ.mjs +1 -0
  45. package/dist/collection/index.js +1 -125
  46. package/dist/collection/index.mjs +1 -4
  47. package/dist/core/index.js +1 -41
  48. package/dist/core/index.mjs +1 -4
  49. package/dist/decorator/index.js +1 -57
  50. package/dist/decorator/index.mjs +1 -4
  51. package/dist/dx/index.js +1 -53
  52. package/dist/dx/index.mjs +1 -4
  53. package/dist/flow/index.js +1 -50
  54. package/dist/flow/index.mjs +1 -5
  55. package/dist/fn/index.js +1 -37
  56. package/dist/fn/index.mjs +1 -4
  57. package/dist/guards/index.js +1 -233
  58. package/dist/guards/index.mjs +1 -4
  59. package/dist/index.d.mts +143 -24
  60. package/dist/index.d.ts +143 -24
  61. package/dist/index.js +3 -2498
  62. package/dist/index.mjs +3 -1537
  63. package/dist/input/index.js +1 -74
  64. package/dist/input/index.mjs +1 -5
  65. package/dist/iterator/index.js +1 -522
  66. package/dist/iterator/index.mjs +1 -502
  67. package/dist/logic/index.js +1 -416
  68. package/dist/logic/index.mjs +1 -367
  69. package/dist/math/index.js +1 -45
  70. package/dist/math/index.mjs +1 -4
  71. package/dist/narrowing/index.js +1 -220
  72. package/dist/narrowing/index.mjs +1 -186
  73. package/dist/object/index.js +1 -113
  74. package/dist/object/index.mjs +1 -4
  75. package/dist/result/index.js +1 -86
  76. package/dist/result/index.mjs +1 -5
  77. package/dist/schema/index.js +1 -410
  78. package/dist/schema/index.mjs +1 -384
  79. package/dist/string/index.js +1 -49
  80. package/dist/string/index.mjs +1 -4
  81. package/dist/typed/index.js +1 -193
  82. package/dist/typed/index.mjs +1 -4
  83. package/package.json +8 -3
  84. package/dist/async/index.js.map +0 -1
  85. package/dist/async/index.mjs.map +0 -1
  86. package/dist/chunk-2LJ6NZ6K.js +0 -108
  87. package/dist/chunk-2LJ6NZ6K.js.map +0 -1
  88. package/dist/chunk-4NXETABV.mjs +0 -116
  89. package/dist/chunk-4NXETABV.mjs.map +0 -1
  90. package/dist/chunk-6ZBTL74K.js +0 -129
  91. package/dist/chunk-6ZBTL74K.js.map +0 -1
  92. package/dist/chunk-CN3GYRJN.mjs +0 -137
  93. package/dist/chunk-CN3GYRJN.mjs.map +0 -1
  94. package/dist/chunk-CNTE6ZVH.js +0 -359
  95. package/dist/chunk-CNTE6ZVH.js.map +0 -1
  96. package/dist/chunk-DBENOSTA.js +0 -156
  97. package/dist/chunk-DBENOSTA.js.map +0 -1
  98. package/dist/chunk-DWIG5GF2.js +0 -135
  99. package/dist/chunk-DWIG5GF2.js.map +0 -1
  100. package/dist/chunk-EAUTTWTQ.mjs +0 -231
  101. package/dist/chunk-EAUTTWTQ.mjs.map +0 -1
  102. package/dist/chunk-FXWYPHA3.mjs +0 -13
  103. package/dist/chunk-FXWYPHA3.mjs.map +0 -1
  104. package/dist/chunk-GS3PP67B.js +0 -200
  105. package/dist/chunk-GS3PP67B.js.map +0 -1
  106. package/dist/chunk-IGA3VEZM.mjs +0 -503
  107. package/dist/chunk-IGA3VEZM.mjs.map +0 -1
  108. package/dist/chunk-J5LGTIGS.mjs +0 -9
  109. package/dist/chunk-J5LGTIGS.mjs.map +0 -1
  110. package/dist/chunk-JAOGY4JO.mjs +0 -1007
  111. package/dist/chunk-JAOGY4JO.mjs.map +0 -1
  112. package/dist/chunk-JB6UXRKD.mjs +0 -97
  113. package/dist/chunk-JB6UXRKD.mjs.map +0 -1
  114. package/dist/chunk-JQAQV75V.js +0 -561
  115. package/dist/chunk-JQAQV75V.js.map +0 -1
  116. package/dist/chunk-JQHUBZ4M.js +0 -88
  117. package/dist/chunk-JQHUBZ4M.js.map +0 -1
  118. package/dist/chunk-LT7JK7RJ.js +0 -87
  119. package/dist/chunk-LT7JK7RJ.js.map +0 -1
  120. package/dist/chunk-OEJK37LO.mjs +0 -328
  121. package/dist/chunk-OEJK37LO.mjs.map +0 -1
  122. package/dist/chunk-OPVES6W2.js +0 -16
  123. package/dist/chunk-OPVES6W2.js.map +0 -1
  124. package/dist/chunk-OWNUKWXV.js +0 -291
  125. package/dist/chunk-OWNUKWXV.js.map +0 -1
  126. package/dist/chunk-PQTXSQ4P.js +0 -369
  127. package/dist/chunk-PQTXSQ4P.js.map +0 -1
  128. package/dist/chunk-PZ5AY32C.js +0 -11
  129. package/dist/chunk-PZ5AY32C.js.map +0 -1
  130. package/dist/chunk-QFR7DVAJ.mjs +0 -63
  131. package/dist/chunk-QFR7DVAJ.mjs.map +0 -1
  132. package/dist/chunk-SGQNLTRK.js +0 -73
  133. package/dist/chunk-SGQNLTRK.js.map +0 -1
  134. package/dist/chunk-SIA5BSVY.js +0 -1054
  135. package/dist/chunk-SIA5BSVY.js.map +0 -1
  136. package/dist/chunk-SRDWUHDY.mjs +0 -188
  137. package/dist/chunk-SRDWUHDY.mjs.map +0 -1
  138. package/dist/chunk-TXU7NTT4.js +0 -249
  139. package/dist/chunk-TXU7NTT4.js.map +0 -1
  140. package/dist/chunk-TZEWREAC.mjs +0 -277
  141. package/dist/chunk-TZEWREAC.mjs.map +0 -1
  142. package/dist/chunk-V6CWFDIJ.mjs +0 -123
  143. package/dist/chunk-V6CWFDIJ.mjs.map +0 -1
  144. package/dist/chunk-YBJC5WMX.mjs +0 -341
  145. package/dist/chunk-YBJC5WMX.mjs.map +0 -1
  146. package/dist/chunk-YOPAXITF.mjs +0 -75
  147. package/dist/chunk-YOPAXITF.mjs.map +0 -1
  148. package/dist/chunk-ZE4FDBRI.mjs +0 -79
  149. package/dist/chunk-ZE4FDBRI.mjs.map +0 -1
  150. package/dist/collection/index.js.map +0 -1
  151. package/dist/collection/index.mjs.map +0 -1
  152. package/dist/core/index.js.map +0 -1
  153. package/dist/core/index.mjs.map +0 -1
  154. package/dist/decorator/index.js.map +0 -1
  155. package/dist/decorator/index.mjs.map +0 -1
  156. package/dist/dx/index.js.map +0 -1
  157. package/dist/dx/index.mjs.map +0 -1
  158. package/dist/flow/index.js.map +0 -1
  159. package/dist/flow/index.mjs.map +0 -1
  160. package/dist/fn/index.js.map +0 -1
  161. package/dist/fn/index.mjs.map +0 -1
  162. package/dist/guards/index.js.map +0 -1
  163. package/dist/guards/index.mjs.map +0 -1
  164. package/dist/index.js.map +0 -1
  165. package/dist/index.mjs.map +0 -1
  166. package/dist/input/index.js.map +0 -1
  167. package/dist/input/index.mjs.map +0 -1
  168. package/dist/iterator/index.js.map +0 -1
  169. package/dist/iterator/index.mjs.map +0 -1
  170. package/dist/logic/index.js.map +0 -1
  171. package/dist/logic/index.mjs.map +0 -1
  172. package/dist/math/index.js.map +0 -1
  173. package/dist/math/index.mjs.map +0 -1
  174. package/dist/narrowing/index.js.map +0 -1
  175. package/dist/narrowing/index.mjs.map +0 -1
  176. package/dist/object/index.js.map +0 -1
  177. package/dist/object/index.mjs.map +0 -1
  178. package/dist/result/index.js.map +0 -1
  179. package/dist/result/index.mjs.map +0 -1
  180. package/dist/schema/index.js.map +0 -1
  181. package/dist/schema/index.mjs.map +0 -1
  182. package/dist/string/index.js.map +0 -1
  183. package/dist/string/index.mjs.map +0 -1
  184. package/dist/typed/index.js.map +0 -1
  185. package/dist/typed/index.mjs.map +0 -1
@@ -1,135 +0,0 @@
1
- 'use strict';
2
-
3
- var chunkOPVES6W2_js = require('./chunk-OPVES6W2.js');
4
- var chunkPZ5AY32C_js = require('./chunk-PZ5AY32C.js');
5
-
6
- // src/flow/index.ts
7
- var flow_exports = {};
8
- chunkPZ5AY32C_js.__export(flow_exports, {
9
- compose: () => compose,
10
- constant: () => constant,
11
- ifElse: () => ifElse,
12
- match: () => match,
13
- pipe: () => pipe,
14
- tap: () => tap,
15
- tryCatch: () => tryCatch,
16
- tryCatchAsync: () => tryCatchAsync,
17
- unless: () => unless,
18
- when: () => when
19
- });
20
-
21
- // src/flow/pipe.ts
22
- function pipe(value, ...fns) {
23
- return fns.reduce((acc, fn) => fn(acc), value);
24
- }
25
-
26
- // src/flow/compose.ts
27
- function compose(...fns) {
28
- return (arg) => fns.reduceRight((acc, fn) => fn(acc), arg);
29
- }
30
-
31
- // src/flow/tap.ts
32
- function tap(fn) {
33
- return (value) => {
34
- fn(value);
35
- return value;
36
- };
37
- }
38
-
39
- // src/flow/when.ts
40
- function when(predicate, transform) {
41
- return (value) => {
42
- if (predicate(value)) {
43
- return transform(value);
44
- }
45
- return value;
46
- };
47
- }
48
-
49
- // src/flow/unless.ts
50
- function unless(predicate, transform) {
51
- return (value) => {
52
- if (!predicate(value)) {
53
- return transform(value);
54
- }
55
- return value;
56
- };
57
- }
58
-
59
- // src/flow/match.ts
60
- function match() {
61
- const cases = [];
62
- const builder = {
63
- with(predicate, handler) {
64
- cases.push({ when: predicate, then: handler });
65
- return builder;
66
- },
67
- otherwise(handler) {
68
- return (value) => {
69
- for (const c of cases) {
70
- if (c.when(value)) {
71
- return c.then(value);
72
- }
73
- }
74
- return handler(value);
75
- };
76
- },
77
- run(value) {
78
- for (const c of cases) {
79
- if (c.when(value)) {
80
- return c.then(value);
81
- }
82
- }
83
- return void 0;
84
- }
85
- };
86
- return builder;
87
- }
88
-
89
- // src/flow/tryCatch.ts
90
- function tryCatch(fn) {
91
- try {
92
- return chunkOPVES6W2_js.ok(fn());
93
- } catch (error) {
94
- return chunkOPVES6W2_js.err(error instanceof Error ? error : new Error(String(error)));
95
- }
96
- }
97
-
98
- // src/flow/tryCatchAsync.ts
99
- async function tryCatchAsync(fn) {
100
- try {
101
- const value = await fn();
102
- return chunkOPVES6W2_js.ok(value);
103
- } catch (error) {
104
- return chunkOPVES6W2_js.err(error instanceof Error ? error : new Error(String(error)));
105
- }
106
- }
107
-
108
- // src/flow/ifElse.ts
109
- function ifElse(predicate, onTrue, onFalse) {
110
- return (value) => {
111
- if (predicate(value)) {
112
- return onTrue(value);
113
- }
114
- return onFalse(value);
115
- };
116
- }
117
-
118
- // src/flow/constant.ts
119
- function constant(value) {
120
- return () => value;
121
- }
122
-
123
- exports.compose = compose;
124
- exports.constant = constant;
125
- exports.flow_exports = flow_exports;
126
- exports.ifElse = ifElse;
127
- exports.match = match;
128
- exports.pipe = pipe;
129
- exports.tap = tap;
130
- exports.tryCatch = tryCatch;
131
- exports.tryCatchAsync = tryCatchAsync;
132
- exports.unless = unless;
133
- exports.when = when;
134
- //# sourceMappingURL=chunk-DWIG5GF2.js.map
135
- //# sourceMappingURL=chunk-DWIG5GF2.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/flow/index.ts","../src/flow/pipe.ts","../src/flow/compose.ts","../src/flow/tap.ts","../src/flow/when.ts","../src/flow/unless.ts","../src/flow/match.ts","../src/flow/tryCatch.ts","../src/flow/tryCatchAsync.ts","../src/flow/ifElse.ts","../src/flow/constant.ts"],"names":["__export","ok","err"],"mappings":"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","file":"chunk-DWIG5GF2.js","sourcesContent":["export { pipe } from './pipe'\nexport { compose } from './compose'\nexport { tap } from './tap'\nexport { when } from './when'\nexport { unless } from './unless'\nexport { match } from './match'\nexport { tryCatch } from './tryCatch'\nexport type { TryCatchResult } from './tryCatch'\nexport { tryCatchAsync } from './tryCatchAsync'\nexport type { TryCatchAsyncResult } from './tryCatchAsync'\nexport { ifElse } from './ifElse'\nexport { constant } from './constant'\n","/**\n * Pipes a value through a series of functions.\n * Each function receives the result of the previous one.\n *\n * @example\n * const result = pipe(\n * 5,\n * (n) => n * 2,\n * (n) => n + 1,\n * (n) => `Result: ${n}`\n * )\n * // 'Result: 11'\n */\nexport function pipe<A>(value: A): A\nexport function pipe<A, B>(value: A, fn1: (a: A) => B): B\nexport function pipe<A, B, C>(value: A, fn1: (a: A) => B, fn2: (b: B) => C): C\nexport function pipe<A, B, C, D>(\n value: A,\n fn1: (a: A) => B,\n fn2: (b: B) => C,\n fn3: (c: C) => D\n): D\nexport function pipe<A, B, C, D, E>(\n value: A,\n fn1: (a: A) => B,\n fn2: (b: B) => C,\n fn3: (c: C) => D,\n fn4: (d: D) => E\n): E\nexport function pipe<A, B, C, D, E, F>(\n value: A,\n fn1: (a: A) => B,\n fn2: (b: B) => C,\n fn3: (c: C) => D,\n fn4: (d: D) => E,\n fn5: (e: E) => F\n): F\nexport function pipe<A, B, C, D, E, F, G>(\n value: A,\n fn1: (a: A) => B,\n fn2: (b: B) => C,\n fn3: (c: C) => D,\n fn4: (d: D) => E,\n fn5: (e: E) => F,\n fn6: (f: F) => G\n): G\nexport function pipe<A, B, C, D, E, F, G, H>(\n value: A,\n fn1: (a: A) => B,\n fn2: (b: B) => C,\n fn3: (c: C) => D,\n fn4: (d: D) => E,\n fn5: (e: E) => F,\n fn6: (f: F) => G,\n fn7: (g: G) => H\n): H\nexport function pipe<A, B, C, D, E, F, G, H, I>(\n value: A,\n fn1: (a: A) => B,\n fn2: (b: B) => C,\n fn3: (c: C) => D,\n fn4: (d: D) => E,\n fn5: (e: E) => F,\n fn6: (f: F) => G,\n fn7: (g: G) => H,\n fn8: (h: H) => I\n): I\nexport function pipe(\n value: unknown,\n ...fns: ((arg: unknown) => unknown)[]\n): unknown {\n return fns.reduce((acc, fn) => fn(acc), value)\n}\n","/**\n * Composes functions from right to left.\n * The last function can take multiple arguments.\n *\n * @example\n * const addOne = (n: number) => n + 1\n * const double = (n: number) => n * 2\n * const addOneThenDouble = compose(double, addOne)\n * addOneThenDouble(5) // 12\n */\nexport function compose<A, B>(fn1: (a: A) => B): (a: A) => B\nexport function compose<A, B, C>(\n fn2: (b: B) => C,\n fn1: (a: A) => B\n): (a: A) => C\nexport function compose<A, B, C, D>(\n fn3: (c: C) => D,\n fn2: (b: B) => C,\n fn1: (a: A) => B\n): (a: A) => D\nexport function compose<A, B, C, D, E>(\n fn4: (d: D) => E,\n fn3: (c: C) => D,\n fn2: (b: B) => C,\n fn1: (a: A) => B\n): (a: A) => E\nexport function compose<A, B, C, D, E, F>(\n fn5: (e: E) => F,\n fn4: (d: D) => E,\n fn3: (c: C) => D,\n fn2: (b: B) => C,\n fn1: (a: A) => B\n): (a: A) => F\nexport function compose(\n ...fns: ((arg: unknown) => unknown)[]\n): (arg: unknown) => unknown {\n return (arg: unknown) => fns.reduceRight((acc, fn) => fn(acc), arg)\n}\n","/**\n * Executes a side effect and returns the original value.\n * Useful for debugging in a pipe chain.\n *\n * @example\n * pipe(\n * data,\n * tap(console.log), // logs data\n * transform,\n * tap(console.log), // logs transformed data\n * )\n */\nexport function tap<T>(fn: (value: T) => void): (value: T) => T {\n return (value: T): T => {\n fn(value)\n return value\n }\n}\n","/**\n * Conditionally applies a transformation.\n * If the predicate is true, applies the transform. Otherwise returns the value unchanged.\n *\n * @example\n * const maybeDouble = when(\n * (n: number) => n > 10,\n * (n) => n * 2\n * )\n * maybeDouble(5) // 5\n * maybeDouble(15) // 30\n */\nexport function when<T>(\n predicate: (value: T) => boolean,\n transform: (value: T) => T\n): (value: T) => T {\n return (value: T): T => {\n if (predicate(value)) {\n return transform(value)\n }\n return value\n }\n}\n","/**\n * Conditionally applies a transformation.\n * If the predicate is false, applies the transform. Otherwise returns the value unchanged.\n *\n * @example\n * const ensurePositive = unless(\n * (n: number) => n > 0,\n * () => 0\n * )\n * ensurePositive(-5) // 0\n * ensurePositive(5) // 5\n */\nexport function unless<T>(\n predicate: (value: T) => boolean,\n transform: (value: T) => T\n): (value: T) => T {\n return (value: T): T => {\n if (!predicate(value)) {\n return transform(value)\n }\n return value\n }\n}\n","type MatchCase<T, R> = {\n when: (value: T) => boolean\n then: (value: T) => R\n}\n\ntype MatchBuilder<T, R> = {\n with: (\n predicate: (value: T) => boolean,\n handler: (value: T) => R\n ) => MatchBuilder<T, R>\n otherwise: (handler: (value: T) => R) => (value: T) => R\n run: (value: T) => R | undefined\n}\n\n/**\n * Pattern matching helper. Chain .with() for cases and .otherwise() for default.\n *\n * @example\n * const getDiscount = match<number, string>()\n * .with(n => n >= 100, () => '20% off')\n * .with(n => n >= 50, () => '10% off')\n * .otherwise(() => 'No discount')\n *\n * getDiscount(150) // '20% off'\n * getDiscount(75) // '10% off'\n * getDiscount(25) // 'No discount'\n */\nexport function match<T, R = T>(): MatchBuilder<T, R> {\n const cases: MatchCase<T, R>[] = []\n\n const builder: MatchBuilder<T, R> = {\n with(predicate, handler) {\n cases.push({ when: predicate, then: handler })\n return builder\n },\n\n otherwise(handler) {\n return (value: T): R => {\n for (const c of cases) {\n if (c.when(value)) {\n return c.then(value)\n }\n }\n return handler(value)\n }\n },\n\n run(value: T): R | undefined {\n for (const c of cases) {\n if (c.when(value)) {\n return c.then(value)\n }\n }\n return undefined\n },\n }\n\n return builder\n}\n","import type { Result } from '../result/types'\nimport { ok } from '../result/ok'\nimport { err } from '../result/err'\n\n/**\n * @deprecated Use Result<T> instead\n */\nexport type TryCatchResult<T> = Result<T, Error>\n\n/**\n * Wraps a function call in a try/catch and returns a Result.\n *\n * @example\n * const result = tryCatch(() => JSON.parse(input))\n * if (result.ok) {\n * console.log(result.value)\n * } else {\n * console.error(result.error)\n * }\n */\nexport function tryCatch<T>(fn: () => T): Result<T, Error> {\n try {\n return ok(fn())\n } catch (error) {\n return err(error instanceof Error ? error : new Error(String(error)))\n }\n}\n","import type { Result } from '../result/types'\nimport { ok } from '../result/ok'\nimport { err } from '../result/err'\n\n/**\n * @deprecated Use Result<T> instead\n */\nexport type TryCatchAsyncResult<T> = Result<T, Error>\n\n/**\n * Wraps an async function call in a try/catch and returns a Result.\n *\n * @example\n * const result = await tryCatchAsync(() => fetchUser(id))\n * if (result.ok) {\n * console.log(result.value)\n * } else {\n * console.error(result.error)\n * }\n */\nexport async function tryCatchAsync<T>(\n fn: () => Promise<T>\n): Promise<Result<T, Error>> {\n try {\n const value = await fn()\n return ok(value)\n } catch (error) {\n return err(error instanceof Error ? error : new Error(String(error)))\n }\n}\n","/**\n * Functional if/else. Returns a function that applies one of two transformations\n * based on a predicate.\n *\n * @example\n * const formatPrice = ifElse(\n * (n: number) => n === 0,\n * () => 'Free',\n * (n) => `$${n.toFixed(2)}`\n * )\n * formatPrice(0) // 'Free'\n * formatPrice(9.99) // '$9.99'\n */\nexport function ifElse<T, R>(\n predicate: (value: T) => boolean,\n onTrue: (value: T) => R,\n onFalse: (value: T) => R\n): (value: T) => R {\n return (value: T): R => {\n if (predicate(value)) {\n return onTrue(value)\n }\n return onFalse(value)\n }\n}\n","/**\n * Returns a function that always returns the same value.\n *\n * @example\n * const alwaysTrue = constant(true)\n * alwaysTrue() // true\n * alwaysTrue() // true\n *\n * [1, 2, 3].map(constant('x')) // ['x', 'x', 'x']\n */\nexport function constant<T>(value: T): () => T {\n return () => value\n}\n"]}
@@ -1,231 +0,0 @@
1
- import { ok, err } from './chunk-FXWYPHA3.mjs';
2
- import { __export } from './chunk-J5LGTIGS.mjs';
3
-
4
- // src/input/index.ts
5
- var input_exports = {};
6
- __export(input_exports, {
7
- clamp: () => clamp,
8
- coerceArray: () => coerceArray,
9
- coerceString: () => coerceString,
10
- defaults: () => defaults,
11
- isEmail: () => isEmail,
12
- isIpAddress: () => isIpAddress,
13
- isUrl: () => isUrl,
14
- isUuid: () => isUuid,
15
- parseBoolean: () => parseBoolean,
16
- parseDate: () => parseDate,
17
- parseInteger: () => parseInteger,
18
- parseNumber: () => parseNumber,
19
- parseUrl: () => parseUrl,
20
- safeJsonParse: () => safeJsonParse,
21
- safeJsonStringify: () => safeJsonStringify,
22
- trimAll: () => trimAll
23
- });
24
-
25
- // src/input/safeJsonParse.ts
26
- function safeJsonParse(json) {
27
- try {
28
- const data = JSON.parse(json);
29
- return ok(data);
30
- } catch (error) {
31
- return err(error instanceof Error ? error : new Error(String(error)));
32
- }
33
- }
34
-
35
- // src/input/safeJsonStringify.ts
36
- function safeJsonStringify(value, replacer, space) {
37
- try {
38
- const data = JSON.stringify(value, replacer, space);
39
- return ok(data);
40
- } catch (error) {
41
- return err(error instanceof Error ? error : new Error(String(error)));
42
- }
43
- }
44
-
45
- // src/input/parseNumber.ts
46
- function parseNumber(value) {
47
- if (value === null || value === void 0) {
48
- return void 0;
49
- }
50
- if (typeof value === "number") {
51
- return Number.isNaN(value) ? void 0 : value;
52
- }
53
- if (typeof value === "string") {
54
- const trimmed = value.trim();
55
- if (trimmed === "") {
56
- return void 0;
57
- }
58
- const parsed = Number(trimmed);
59
- return Number.isNaN(parsed) ? void 0 : parsed;
60
- }
61
- return void 0;
62
- }
63
-
64
- // src/input/parseInteger.ts
65
- function parseInteger(value) {
66
- if (value === null || value === void 0) {
67
- return void 0;
68
- }
69
- if (typeof value === "number") {
70
- return Number.isNaN(value) ? void 0 : Math.trunc(value);
71
- }
72
- if (typeof value === "string") {
73
- const trimmed = value.trim();
74
- if (trimmed === "") {
75
- return void 0;
76
- }
77
- const parsed = parseInt(trimmed, 10);
78
- return Number.isNaN(parsed) ? void 0 : parsed;
79
- }
80
- return void 0;
81
- }
82
-
83
- // src/input/parseBoolean.ts
84
- function parseBoolean(value) {
85
- if (value === null || value === void 0) {
86
- return void 0;
87
- }
88
- if (typeof value === "boolean") {
89
- return value;
90
- }
91
- if (typeof value === "number") {
92
- if (value === 1) return true;
93
- if (value === 0) return false;
94
- return void 0;
95
- }
96
- if (typeof value === "string") {
97
- const lower = value.toLowerCase().trim();
98
- if (["true", "1", "yes", "on"].includes(lower)) {
99
- return true;
100
- }
101
- if (["false", "0", "no", "off"].includes(lower)) {
102
- return false;
103
- }
104
- }
105
- return void 0;
106
- }
107
-
108
- // src/input/parseDate.ts
109
- function parseDate(value) {
110
- if (value === null || value === void 0) {
111
- return void 0;
112
- }
113
- if (value instanceof Date) {
114
- return Number.isNaN(value.getTime()) ? void 0 : value;
115
- }
116
- if (typeof value === "number") {
117
- const date = new Date(value);
118
- return Number.isNaN(date.getTime()) ? void 0 : date;
119
- }
120
- if (typeof value === "string") {
121
- const trimmed = value.trim();
122
- if (trimmed === "") {
123
- return void 0;
124
- }
125
- const date = new Date(trimmed);
126
- return Number.isNaN(date.getTime()) ? void 0 : date;
127
- }
128
- return void 0;
129
- }
130
-
131
- // src/input/coerceString.ts
132
- function coerceString(value) {
133
- if (value === null || value === void 0) {
134
- return "";
135
- }
136
- if (typeof value === "string") {
137
- return value;
138
- }
139
- return String(value);
140
- }
141
-
142
- // src/input/coerceArray.ts
143
- function coerceArray(value) {
144
- if (value === null || value === void 0) {
145
- return [];
146
- }
147
- if (Array.isArray(value)) {
148
- return [...value];
149
- }
150
- return [value];
151
- }
152
-
153
- // src/input/trimAll.ts
154
- function trimAll(obj) {
155
- const result = { ...obj };
156
- for (const key of Object.keys(result)) {
157
- const value = result[key];
158
- if (typeof value === "string") {
159
- result[key] = value.trim();
160
- }
161
- }
162
- return result;
163
- }
164
-
165
- // src/input/defaults.ts
166
- function defaults(value, defaultValue, options = {}) {
167
- const { treatEmptyStringAsNull = true } = options;
168
- if (value === null || value === void 0) {
169
- return defaultValue;
170
- }
171
- if (treatEmptyStringAsNull && value === "") {
172
- return defaultValue;
173
- }
174
- return value;
175
- }
176
-
177
- // src/input/clamp.ts
178
- function clamp(value, min, max) {
179
- if (min > max) {
180
- throw new Error("min must be less than or equal to max");
181
- }
182
- return Math.min(Math.max(value, min), max);
183
- }
184
-
185
- // src/input/isEmail.ts
186
- function isEmail(str) {
187
- const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
188
- return emailRegex.test(str);
189
- }
190
-
191
- // src/input/isUrl.ts
192
- function isUrl(str) {
193
- try {
194
- new URL(str);
195
- return true;
196
- } catch {
197
- return false;
198
- }
199
- }
200
-
201
- // src/input/isUuid.ts
202
- function isUuid(str) {
203
- const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
204
- return uuidRegex.test(str);
205
- }
206
-
207
- // src/input/isIpAddress.ts
208
- function isIpAddress(str) {
209
- return isIpv4(str) || isIpv6(str);
210
- }
211
- function isIpv4(str) {
212
- const ipv4Regex = /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;
213
- return ipv4Regex.test(str);
214
- }
215
- function isIpv6(str) {
216
- const ipv6Regex = /^(?:[0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$|^::(?:[0-9a-fA-F]{1,4}:){0,6}[0-9a-fA-F]{1,4}$|^(?:[0-9a-fA-F]{1,4}:){1,7}:$|^(?:[0-9a-fA-F]{1,4}:){0,6}::(?:[0-9a-fA-F]{1,4}:){0,5}[0-9a-fA-F]{1,4}$/;
217
- return ipv6Regex.test(str);
218
- }
219
-
220
- // src/input/parseUrl.ts
221
- function parseUrl(str) {
222
- try {
223
- return new URL(str);
224
- } catch {
225
- return void 0;
226
- }
227
- }
228
-
229
- export { clamp, coerceArray, coerceString, defaults, input_exports, isEmail, isIpAddress, isUrl, isUuid, parseBoolean, parseDate, parseInteger, parseNumber, parseUrl, safeJsonParse, safeJsonStringify, trimAll };
230
- //# sourceMappingURL=chunk-EAUTTWTQ.mjs.map
231
- //# sourceMappingURL=chunk-EAUTTWTQ.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/input/index.ts","../src/input/safeJsonParse.ts","../src/input/safeJsonStringify.ts","../src/input/parseNumber.ts","../src/input/parseInteger.ts","../src/input/parseBoolean.ts","../src/input/parseDate.ts","../src/input/coerceString.ts","../src/input/coerceArray.ts","../src/input/trimAll.ts","../src/input/defaults.ts","../src/input/clamp.ts","../src/input/isEmail.ts","../src/input/isUrl.ts","../src/input/isUuid.ts","../src/input/isIpAddress.ts","../src/input/parseUrl.ts"],"names":[],"mappings":"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","file":"chunk-EAUTTWTQ.mjs","sourcesContent":["export { safeJsonParse } from './safeJsonParse'\nexport type { JsonParseResult } from './safeJsonParse'\nexport { safeJsonStringify } from './safeJsonStringify'\nexport type { JsonStringifyResult } from './safeJsonStringify'\nexport { parseNumber } from './parseNumber'\nexport { parseInteger } from './parseInteger'\nexport { parseBoolean } from './parseBoolean'\nexport { parseDate } from './parseDate'\nexport { coerceString } from './coerceString'\nexport { coerceArray } from './coerceArray'\nexport { trimAll } from './trimAll'\nexport { defaults } from './defaults'\nexport { clamp } from './clamp'\nexport { isEmail } from './isEmail'\nexport { isUrl } from './isUrl'\nexport { isUuid } from './isUuid'\nexport { isIpAddress } from './isIpAddress'\nexport { parseUrl } from './parseUrl'\n","import type { Result } from '../result/types'\nimport { ok } from '../result/ok'\nimport { err } from '../result/err'\n\n/**\n * @deprecated Use Result<T> instead\n */\nexport type JsonParseResult<T> = Result<T, Error>\n\n/**\n * Safely parses a JSON string. Returns a Result instead of throwing.\n *\n * @example\n * const result = safeJsonParse<User>('{\"name\": \"John\"}')\n * if (result.ok) {\n * console.log(result.value.name)\n * } else {\n * console.error(result.error)\n * }\n */\nexport function safeJsonParse<T = unknown>(json: string): Result<T, Error> {\n try {\n const data = JSON.parse(json) as T\n return ok(data)\n } catch (error) {\n return err(error instanceof Error ? error : new Error(String(error)))\n }\n}\n","import type { Result } from '../result/types'\nimport { ok } from '../result/ok'\nimport { err } from '../result/err'\n\n/**\n * @deprecated Use Result<string> instead\n */\nexport type JsonStringifyResult = Result<string, Error>\n\n/**\n * Safely stringifies a value to JSON. Returns a Result instead of throwing.\n * Handles circular references gracefully.\n *\n * @example\n * const result = safeJsonStringify({ name: 'John' })\n * if (result.ok) {\n * console.log(result.value)\n * }\n */\nexport function safeJsonStringify(\n value: unknown,\n replacer?: (key: string, value: unknown) => unknown,\n space?: string | number\n): Result<string, Error> {\n try {\n const data = JSON.stringify(value, replacer, space)\n return ok(data)\n } catch (error) {\n return err(error instanceof Error ? error : new Error(String(error)))\n }\n}\n","/**\n * Parses a value to a number. Returns undefined if parsing fails.\n * Handles strings, numbers, and null/undefined.\n *\n * @example\n * parseNumber('42') // 42\n * parseNumber('3.14') // 3.14\n * parseNumber('abc') // undefined\n * parseNumber(null) // undefined\n */\nexport function parseNumber(value: unknown): number | undefined {\n if (value === null || value === undefined) {\n return undefined\n }\n\n if (typeof value === 'number') {\n return Number.isNaN(value) ? undefined : value\n }\n\n if (typeof value === 'string') {\n const trimmed = value.trim()\n if (trimmed === '') {\n return undefined\n }\n\n const parsed = Number(trimmed)\n return Number.isNaN(parsed) ? undefined : parsed\n }\n\n return undefined\n}\n","/**\n * Parses a value to an integer. Returns undefined if parsing fails.\n *\n * @example\n * parseInteger('42') // 42\n * parseInteger('3.14') // 3\n * parseInteger('abc') // undefined\n */\nexport function parseInteger(value: unknown): number | undefined {\n if (value === null || value === undefined) {\n return undefined\n }\n\n if (typeof value === 'number') {\n return Number.isNaN(value) ? undefined : Math.trunc(value)\n }\n\n if (typeof value === 'string') {\n const trimmed = value.trim()\n if (trimmed === '') {\n return undefined\n }\n\n const parsed = parseInt(trimmed, 10)\n return Number.isNaN(parsed) ? undefined : parsed\n }\n\n return undefined\n}\n","/**\n * Parses a value to a boolean. Returns undefined if parsing fails.\n * Recognizes: true/false, 'true'/'false', '1'/'0', 1/0, 'yes'/'no', 'on'/'off'\n *\n * @example\n * parseBoolean('true') // true\n * parseBoolean('false') // false\n * parseBoolean(1) // true\n * parseBoolean('yes') // true\n * parseBoolean('maybe') // undefined\n */\nexport function parseBoolean(value: unknown): boolean | undefined {\n if (value === null || value === undefined) {\n return undefined\n }\n\n if (typeof value === 'boolean') {\n return value\n }\n\n if (typeof value === 'number') {\n if (value === 1) return true\n if (value === 0) return false\n return undefined\n }\n\n if (typeof value === 'string') {\n const lower = value.toLowerCase().trim()\n\n if (['true', '1', 'yes', 'on'].includes(lower)) {\n return true\n }\n\n if (['false', '0', 'no', 'off'].includes(lower)) {\n return false\n }\n }\n\n return undefined\n}\n","/**\n * Parses a value to a Date. Returns undefined if parsing fails or date is invalid.\n *\n * @example\n * parseDate('2024-01-15') // Date object\n * parseDate(1705276800000) // Date object\n * parseDate('invalid') // undefined\n */\nexport function parseDate(value: unknown): Date | undefined {\n if (value === null || value === undefined) {\n return undefined\n }\n\n if (value instanceof Date) {\n return Number.isNaN(value.getTime()) ? undefined : value\n }\n\n if (typeof value === 'number') {\n const date = new Date(value)\n return Number.isNaN(date.getTime()) ? undefined : date\n }\n\n if (typeof value === 'string') {\n const trimmed = value.trim()\n if (trimmed === '') {\n return undefined\n }\n\n const date = new Date(trimmed)\n return Number.isNaN(date.getTime()) ? undefined : date\n }\n\n return undefined\n}\n","/**\n * Coerces a value to a string. Returns empty string for null/undefined.\n *\n * @example\n * coerceString('hello') // 'hello'\n * coerceString(42) // '42'\n * coerceString(null) // ''\n * coerceString(undefined) // ''\n */\nexport function coerceString(value: unknown): string {\n if (value === null || value === undefined) {\n return ''\n }\n\n if (typeof value === 'string') {\n return value\n }\n\n return String(value)\n}\n","/**\n * Coerces a value to an array.\n * - Arrays are returned as-is\n * - null/undefined returns empty array\n * - Other values are wrapped in an array\n *\n * @example\n * coerceArray([1, 2, 3]) // [1, 2, 3]\n * coerceArray('hello') // ['hello']\n * coerceArray(null) // []\n */\nexport function coerceArray<T>(value: T | readonly T[] | null | undefined): T[] {\n if (value === null || value === undefined) {\n return []\n }\n\n if (Array.isArray(value)) {\n return [...value]\n }\n\n return [value as T]\n}\n","/**\n * Trims all string values in an object (shallow).\n *\n * @example\n * trimAll({ name: ' John ', age: 30 })\n * // { name: 'John', age: 30 }\n */\nexport function trimAll<T extends Record<string, unknown>>(obj: T): T {\n const result = { ...obj }\n\n for (const key of Object.keys(result)) {\n const value = result[key]\n if (typeof value === 'string') {\n ;(result as Record<string, unknown>)[key] = value.trim()\n }\n }\n\n return result\n}\n","/**\n * Returns the value if defined, otherwise returns the default value.\n * Unlike the ?? operator, this also handles empty strings.\n *\n * @example\n * defaults(null, 'default') // 'default'\n * defaults(undefined, 'default') // 'default'\n * defaults('', 'default') // 'default'\n * defaults('value', 'default') // 'value'\n * defaults(0, 10) // 0 (0 is a valid value)\n */\nexport function defaults<T>(\n value: T | null | undefined,\n defaultValue: T,\n options: { treatEmptyStringAsNull?: boolean } = {}\n): T {\n const { treatEmptyStringAsNull = true } = options\n\n if (value === null || value === undefined) {\n return defaultValue\n }\n\n if (treatEmptyStringAsNull && value === '') {\n return defaultValue\n }\n\n return value\n}\n","/**\n * Clamps a number between a minimum and maximum value.\n *\n * @example\n * clamp(5, 0, 10) // 5\n * clamp(-5, 0, 10) // 0\n * clamp(15, 0, 10) // 10\n */\nexport function clamp(value: number, min: number, max: number): number {\n if (min > max) {\n throw new Error('min must be less than or equal to max')\n }\n\n return Math.min(Math.max(value, min), max)\n}\n","/**\n * Checks if a string is a valid email address.\n *\n * @example\n * isEmail('user@example.com') // true\n * isEmail('invalid-email') // false\n */\nexport function isEmail(str: string): boolean {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/\n return emailRegex.test(str)\n}\n","/**\n * Checks if a string is a valid URL.\n *\n * @example\n * isUrl('https://example.com') // true\n * isUrl('not-a-url') // false\n */\nexport function isUrl(str: string): boolean {\n try {\n new URL(str)\n return true\n } catch {\n return false\n }\n}\n","/**\n * Checks if a string is a valid UUID (v1-v5).\n *\n * @example\n * isUuid('550e8400-e29b-41d4-a716-446655440000') // true\n * isUuid('not-a-uuid') // false\n */\nexport function isUuid(str: string): boolean {\n const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i\n return uuidRegex.test(str)\n}\n","/**\n * Checks if a string is a valid IPv4 or IPv6 address.\n *\n * @example\n * isIpAddress('192.168.1.1') // true\n * isIpAddress('::1') // true\n * isIpAddress('not-an-ip') // false\n */\nexport function isIpAddress(str: string): boolean {\n return isIpv4(str) || isIpv6(str)\n}\n\nfunction isIpv4(str: string): boolean {\n const ipv4Regex = /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/\n return ipv4Regex.test(str)\n}\n\nfunction isIpv6(str: string): boolean {\n const ipv6Regex = /^(?:[0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$|^::(?:[0-9a-fA-F]{1,4}:){0,6}[0-9a-fA-F]{1,4}$|^(?:[0-9a-fA-F]{1,4}:){1,7}:$|^(?:[0-9a-fA-F]{1,4}:){0,6}::(?:[0-9a-fA-F]{1,4}:){0,5}[0-9a-fA-F]{1,4}$/\n return ipv6Regex.test(str)\n}\n","/**\n * Parses a URL string and returns a URL object, or undefined if invalid.\n *\n * @example\n * parseUrl('https://example.com/path') // URL object\n * parseUrl('not-a-url') // undefined\n */\nexport function parseUrl(str: string): URL | undefined {\n try {\n return new URL(str)\n } catch {\n return undefined\n }\n}\n"]}
@@ -1,13 +0,0 @@
1
- // src/result/ok.ts
2
- function ok(value) {
3
- return { ok: true, value };
4
- }
5
-
6
- // src/result/err.ts
7
- function err(error) {
8
- return { ok: false, error };
9
- }
10
-
11
- export { err, ok };
12
- //# sourceMappingURL=chunk-FXWYPHA3.mjs.map
13
- //# sourceMappingURL=chunk-FXWYPHA3.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/result/ok.ts","../src/result/err.ts"],"names":[],"mappings":";AAUO,SAAS,GAAM,KAAA,EAAiB;AACrC,EAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,KAAA,EAAM;AAC3B;;;ACFO,SAAS,IAAO,KAAA,EAAkB;AACvC,EAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAM;AAC5B","file":"chunk-FXWYPHA3.mjs","sourcesContent":["import type { Ok } from './types'\n\n/**\n * Creates an Ok result containing a success value.\n *\n * @example\n * const result = ok(42)\n * result.ok // true\n * result.value // 42\n */\nexport function ok<T>(value: T): Ok<T> {\n return { ok: true, value }\n}\n","import type { Err } from './types'\n\n/**\n * Creates an Err result containing an error value.\n *\n * @example\n * const result = err(new Error('failed'))\n * result.ok // false\n * result.error // Error: failed\n */\nexport function err<E>(error: E): Err<E> {\n return { ok: false, error }\n}\n"]}
@@ -1,200 +0,0 @@
1
- 'use strict';
2
-
3
- var chunkPZ5AY32C_js = require('./chunk-PZ5AY32C.js');
4
-
5
- // src/async/index.ts
6
- var async_exports = {};
7
- chunkPZ5AY32C_js.__export(async_exports, {
8
- awaitTo: () => awaitTo,
9
- debounce: () => debounce,
10
- defer: () => defer,
11
- once: () => once,
12
- onceAsync: () => onceAsync,
13
- parallel: () => parallel,
14
- retry: () => retry,
15
- sleep: () => sleep,
16
- throttle: () => throttle,
17
- withTimeout: () => withTimeout
18
- });
19
-
20
- // src/async/awaitTo.ts
21
- async function awaitTo(promise) {
22
- try {
23
- const result = await promise;
24
- return [null, result];
25
- } catch (error) {
26
- return [error, null];
27
- }
28
- }
29
-
30
- // src/async/sleep.ts
31
- function sleep(ms) {
32
- return new Promise((resolve) => setTimeout(resolve, ms));
33
- }
34
-
35
- // src/async/withTimeout.ts
36
- async function withTimeout(promise, ms, message = "Operation timed out") {
37
- let timeoutId;
38
- const timeoutPromise = new Promise((_, reject) => {
39
- timeoutId = setTimeout(() => {
40
- reject(new Error(message));
41
- }, ms);
42
- });
43
- try {
44
- const result = await Promise.race([promise, timeoutPromise]);
45
- return result;
46
- } finally {
47
- if (timeoutId !== void 0) {
48
- clearTimeout(timeoutId);
49
- }
50
- }
51
- }
52
-
53
- // src/async/retry.ts
54
- async function retry(fn, options = {}) {
55
- const { attempts = 3, delay = 1e3, backoff = 1, onRetry } = options;
56
- let lastError;
57
- let currentDelay = delay;
58
- for (let attempt = 1; attempt <= attempts; attempt++) {
59
- try {
60
- return await fn();
61
- } catch (error) {
62
- lastError = error instanceof Error ? error : new Error(String(error));
63
- if (attempt < attempts) {
64
- onRetry?.(lastError, attempt);
65
- await new Promise((resolve) => setTimeout(resolve, currentDelay));
66
- currentDelay *= backoff;
67
- }
68
- }
69
- }
70
- throw lastError;
71
- }
72
-
73
- // src/async/debounce.ts
74
- function debounce(fn, delay) {
75
- let timeoutId;
76
- const debounced = (...args) => {
77
- if (timeoutId !== void 0) {
78
- clearTimeout(timeoutId);
79
- }
80
- timeoutId = setTimeout(() => {
81
- fn(...args);
82
- timeoutId = void 0;
83
- }, delay);
84
- };
85
- debounced.cancel = () => {
86
- if (timeoutId !== void 0) {
87
- clearTimeout(timeoutId);
88
- timeoutId = void 0;
89
- }
90
- };
91
- return debounced;
92
- }
93
-
94
- // src/async/throttle.ts
95
- function throttle(fn, interval) {
96
- let lastCall = 0;
97
- let timeoutId;
98
- const throttled = (...args) => {
99
- const now = Date.now();
100
- const remaining = interval - (now - lastCall);
101
- if (remaining <= 0) {
102
- if (timeoutId !== void 0) {
103
- clearTimeout(timeoutId);
104
- timeoutId = void 0;
105
- }
106
- lastCall = now;
107
- fn(...args);
108
- } else if (timeoutId === void 0) {
109
- timeoutId = setTimeout(() => {
110
- lastCall = Date.now();
111
- timeoutId = void 0;
112
- fn(...args);
113
- }, remaining);
114
- }
115
- };
116
- throttled.cancel = () => {
117
- if (timeoutId !== void 0) {
118
- clearTimeout(timeoutId);
119
- timeoutId = void 0;
120
- }
121
- };
122
- return throttled;
123
- }
124
-
125
- // src/async/once.ts
126
- function once(fn) {
127
- let called = false;
128
- let result;
129
- return ((...args) => {
130
- if (!called) {
131
- called = true;
132
- result = fn(...args);
133
- }
134
- return result;
135
- });
136
- }
137
-
138
- // src/async/onceAsync.ts
139
- function onceAsync(fn) {
140
- let promise;
141
- return () => {
142
- if (promise === void 0) {
143
- promise = fn();
144
- }
145
- return promise;
146
- };
147
- }
148
-
149
- // src/async/defer.ts
150
- function defer() {
151
- let resolve;
152
- let reject;
153
- const promise = new Promise((res, rej) => {
154
- resolve = res;
155
- reject = rej;
156
- });
157
- return { promise, resolve, reject };
158
- }
159
-
160
- // src/async/parallel.ts
161
- async function parallel(tasks, options = {}) {
162
- const { concurrency = Infinity } = options;
163
- if (tasks.length === 0) {
164
- return [];
165
- }
166
- if (concurrency === Infinity || concurrency >= tasks.length) {
167
- return Promise.all(tasks.map((task) => task()));
168
- }
169
- const results = new Array(tasks.length);
170
- let currentIndex = 0;
171
- async function runNext() {
172
- while (currentIndex < tasks.length) {
173
- const index = currentIndex++;
174
- const task = tasks[index];
175
- if (task) {
176
- results[index] = await task();
177
- }
178
- }
179
- }
180
- const workers = Array.from(
181
- { length: Math.min(concurrency, tasks.length) },
182
- () => runNext()
183
- );
184
- await Promise.all(workers);
185
- return results;
186
- }
187
-
188
- exports.async_exports = async_exports;
189
- exports.awaitTo = awaitTo;
190
- exports.debounce = debounce;
191
- exports.defer = defer;
192
- exports.once = once;
193
- exports.onceAsync = onceAsync;
194
- exports.parallel = parallel;
195
- exports.retry = retry;
196
- exports.sleep = sleep;
197
- exports.throttle = throttle;
198
- exports.withTimeout = withTimeout;
199
- //# sourceMappingURL=chunk-GS3PP67B.js.map
200
- //# sourceMappingURL=chunk-GS3PP67B.js.map