ts-data-forge 1.0.0 → 1.0.1

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 (292) hide show
  1. package/README.md +1 -1
  2. package/dist/array/array-utils.d.mts +2617 -0
  3. package/dist/array/array-utils.d.mts.map +1 -0
  4. package/dist/array/array-utils.mjs +2915 -0
  5. package/dist/array/array-utils.mjs.map +1 -0
  6. package/dist/array/index.d.mts +3 -0
  7. package/dist/array/index.d.mts.map +1 -0
  8. package/dist/array/index.mjs +3 -0
  9. package/dist/array/index.mjs.map +1 -0
  10. package/dist/array/tuple-utils.d.mts +421 -0
  11. package/dist/array/tuple-utils.d.mts.map +1 -0
  12. package/dist/array/tuple-utils.mjs +391 -0
  13. package/dist/array/tuple-utils.mjs.map +1 -0
  14. package/dist/collections/imap-mapped.d.mts +445 -0
  15. package/dist/collections/imap-mapped.d.mts.map +1 -0
  16. package/dist/collections/imap-mapped.mjs +424 -0
  17. package/dist/collections/imap-mapped.mjs.map +1 -0
  18. package/dist/collections/imap.d.mts +359 -0
  19. package/dist/collections/imap.d.mts.map +1 -0
  20. package/dist/collections/imap.mjs +338 -0
  21. package/dist/collections/imap.mjs.map +1 -0
  22. package/dist/collections/index.d.mts +7 -0
  23. package/dist/collections/index.d.mts.map +1 -0
  24. package/dist/collections/index.mjs +7 -0
  25. package/dist/collections/index.mjs.map +1 -0
  26. package/dist/collections/iset-mapped.d.mts +576 -0
  27. package/dist/collections/iset-mapped.d.mts.map +1 -0
  28. package/dist/collections/iset-mapped.mjs +522 -0
  29. package/dist/collections/iset-mapped.mjs.map +1 -0
  30. package/dist/collections/iset.d.mts +426 -0
  31. package/dist/collections/iset.d.mts.map +1 -0
  32. package/dist/collections/iset.mjs +437 -0
  33. package/dist/collections/iset.mjs.map +1 -0
  34. package/dist/collections/queue.d.mts +190 -0
  35. package/dist/collections/queue.d.mts.map +1 -0
  36. package/dist/collections/queue.mjs +317 -0
  37. package/dist/collections/queue.mjs.map +1 -0
  38. package/dist/collections/stack.d.mts +210 -0
  39. package/dist/collections/stack.d.mts.map +1 -0
  40. package/dist/collections/stack.mjs +353 -0
  41. package/dist/collections/stack.mjs.map +1 -0
  42. package/dist/expect-type.d.mts +199 -0
  43. package/dist/expect-type.d.mts.map +1 -0
  44. package/dist/expect-type.mjs +201 -0
  45. package/dist/expect-type.mjs.map +1 -0
  46. package/dist/functional/index.d.mts +5 -0
  47. package/dist/functional/index.d.mts.map +1 -0
  48. package/dist/functional/index.mjs +5 -0
  49. package/dist/functional/index.mjs.map +1 -0
  50. package/dist/functional/match.d.mts +215 -0
  51. package/dist/functional/match.d.mts.map +1 -0
  52. package/dist/functional/match.mjs +139 -0
  53. package/dist/functional/match.mjs.map +1 -0
  54. package/dist/functional/optional.d.mts +517 -0
  55. package/dist/functional/optional.d.mts.map +1 -0
  56. package/dist/functional/optional.mjs +532 -0
  57. package/dist/functional/optional.mjs.map +1 -0
  58. package/dist/functional/pipe.d.mts +185 -0
  59. package/dist/functional/pipe.d.mts.map +1 -0
  60. package/dist/functional/pipe.mjs +129 -0
  61. package/dist/functional/pipe.mjs.map +1 -0
  62. package/dist/functional/result.d.mts +796 -0
  63. package/dist/functional/result.d.mts.map +1 -0
  64. package/dist/functional/result.mjs +844 -0
  65. package/dist/functional/result.mjs.map +1 -0
  66. package/dist/globals.d.mts +38 -0
  67. package/dist/guard/has-key.d.mts +100 -0
  68. package/dist/guard/has-key.d.mts.map +1 -0
  69. package/dist/guard/has-key.mjs +94 -0
  70. package/dist/guard/has-key.mjs.map +1 -0
  71. package/dist/guard/index.d.mts +8 -0
  72. package/dist/guard/index.d.mts.map +1 -0
  73. package/dist/guard/index.mjs +8 -0
  74. package/dist/guard/index.mjs.map +1 -0
  75. package/dist/guard/is-non-empty-string.d.mts +106 -0
  76. package/dist/guard/is-non-empty-string.d.mts.map +1 -0
  77. package/dist/guard/is-non-empty-string.mjs +108 -0
  78. package/dist/guard/is-non-empty-string.mjs.map +1 -0
  79. package/dist/guard/is-non-null-object.d.mts +105 -0
  80. package/dist/guard/is-non-null-object.d.mts.map +1 -0
  81. package/dist/guard/is-non-null-object.mjs +108 -0
  82. package/dist/guard/is-non-null-object.mjs.map +1 -0
  83. package/dist/guard/is-primitive.d.mts +146 -0
  84. package/dist/guard/is-primitive.d.mts.map +1 -0
  85. package/dist/guard/is-primitive.mjs +161 -0
  86. package/dist/guard/is-primitive.mjs.map +1 -0
  87. package/dist/guard/is-record.d.mts +151 -0
  88. package/dist/guard/is-record.d.mts.map +1 -0
  89. package/dist/guard/is-record.mjs +155 -0
  90. package/dist/guard/is-record.mjs.map +1 -0
  91. package/dist/guard/is-type.d.mts +430 -0
  92. package/dist/guard/is-type.d.mts.map +1 -0
  93. package/dist/guard/is-type.mjs +432 -0
  94. package/dist/guard/is-type.mjs.map +1 -0
  95. package/dist/guard/key-is-in.d.mts +158 -0
  96. package/dist/guard/key-is-in.d.mts.map +1 -0
  97. package/dist/guard/key-is-in.mjs +160 -0
  98. package/dist/guard/key-is-in.mjs.map +1 -0
  99. package/dist/index.d.mts +11 -0
  100. package/dist/index.d.mts.map +1 -0
  101. package/dist/index.mjs +61 -0
  102. package/dist/index.mjs.map +1 -0
  103. package/dist/iterator/index.d.mts +2 -0
  104. package/dist/iterator/index.d.mts.map +1 -0
  105. package/dist/iterator/index.mjs +2 -0
  106. package/dist/iterator/index.mjs.map +1 -0
  107. package/dist/iterator/range.d.mts +97 -0
  108. package/dist/iterator/range.d.mts.map +1 -0
  109. package/dist/iterator/range.mjs +130 -0
  110. package/dist/iterator/range.mjs.map +1 -0
  111. package/dist/json/index.d.mts +2 -0
  112. package/dist/json/index.d.mts.map +1 -0
  113. package/dist/json/index.mjs +2 -0
  114. package/dist/json/index.mjs.map +1 -0
  115. package/dist/json/json.d.mts +597 -0
  116. package/dist/json/json.d.mts.map +1 -0
  117. package/dist/json/json.mjs +687 -0
  118. package/dist/json/json.mjs.map +1 -0
  119. package/dist/number/branded-types/finite-number.d.mts +291 -0
  120. package/dist/number/branded-types/finite-number.d.mts.map +1 -0
  121. package/dist/number/branded-types/finite-number.mjs +296 -0
  122. package/dist/number/branded-types/finite-number.mjs.map +1 -0
  123. package/dist/number/branded-types/index.d.mts +27 -0
  124. package/dist/number/branded-types/index.d.mts.map +1 -0
  125. package/dist/number/branded-types/index.mjs +27 -0
  126. package/dist/number/branded-types/index.mjs.map +1 -0
  127. package/dist/number/branded-types/int.d.mts +242 -0
  128. package/dist/number/branded-types/int.d.mts.map +1 -0
  129. package/dist/number/branded-types/int.mjs +239 -0
  130. package/dist/number/branded-types/int.mjs.map +1 -0
  131. package/dist/number/branded-types/int16.d.mts +162 -0
  132. package/dist/number/branded-types/int16.d.mts.map +1 -0
  133. package/dist/number/branded-types/int16.mjs +141 -0
  134. package/dist/number/branded-types/int16.mjs.map +1 -0
  135. package/dist/number/branded-types/int32.d.mts +155 -0
  136. package/dist/number/branded-types/int32.d.mts.map +1 -0
  137. package/dist/number/branded-types/int32.mjs +142 -0
  138. package/dist/number/branded-types/int32.mjs.map +1 -0
  139. package/dist/number/branded-types/non-negative-finite-number.d.mts +165 -0
  140. package/dist/number/branded-types/non-negative-finite-number.d.mts.map +1 -0
  141. package/dist/number/branded-types/non-negative-finite-number.mjs +160 -0
  142. package/dist/number/branded-types/non-negative-finite-number.mjs.map +1 -0
  143. package/dist/number/branded-types/non-negative-int16.d.mts +160 -0
  144. package/dist/number/branded-types/non-negative-int16.d.mts.map +1 -0
  145. package/dist/number/branded-types/non-negative-int16.mjs +138 -0
  146. package/dist/number/branded-types/non-negative-int16.mjs.map +1 -0
  147. package/dist/number/branded-types/non-negative-int32.d.mts +156 -0
  148. package/dist/number/branded-types/non-negative-int32.d.mts.map +1 -0
  149. package/dist/number/branded-types/non-negative-int32.mjs +138 -0
  150. package/dist/number/branded-types/non-negative-int32.mjs.map +1 -0
  151. package/dist/number/branded-types/non-zero-finite-number.d.mts +154 -0
  152. package/dist/number/branded-types/non-zero-finite-number.d.mts.map +1 -0
  153. package/dist/number/branded-types/non-zero-finite-number.mjs +160 -0
  154. package/dist/number/branded-types/non-zero-finite-number.mjs.map +1 -0
  155. package/dist/number/branded-types/non-zero-int.d.mts +131 -0
  156. package/dist/number/branded-types/non-zero-int.d.mts.map +1 -0
  157. package/dist/number/branded-types/non-zero-int.mjs +128 -0
  158. package/dist/number/branded-types/non-zero-int.mjs.map +1 -0
  159. package/dist/number/branded-types/non-zero-int16.d.mts +166 -0
  160. package/dist/number/branded-types/non-zero-int16.d.mts.map +1 -0
  161. package/dist/number/branded-types/non-zero-int16.mjs +145 -0
  162. package/dist/number/branded-types/non-zero-int16.mjs.map +1 -0
  163. package/dist/number/branded-types/non-zero-int32.d.mts +158 -0
  164. package/dist/number/branded-types/non-zero-int32.d.mts.map +1 -0
  165. package/dist/number/branded-types/non-zero-int32.mjs +145 -0
  166. package/dist/number/branded-types/non-zero-int32.mjs.map +1 -0
  167. package/dist/number/branded-types/non-zero-safe-int.d.mts +148 -0
  168. package/dist/number/branded-types/non-zero-safe-int.d.mts.map +1 -0
  169. package/dist/number/branded-types/non-zero-safe-int.mjs +145 -0
  170. package/dist/number/branded-types/non-zero-safe-int.mjs.map +1 -0
  171. package/dist/number/branded-types/non-zero-uint16.d.mts +160 -0
  172. package/dist/number/branded-types/non-zero-uint16.d.mts.map +1 -0
  173. package/dist/number/branded-types/non-zero-uint16.mjs +140 -0
  174. package/dist/number/branded-types/non-zero-uint16.mjs.map +1 -0
  175. package/dist/number/branded-types/non-zero-uint32.d.mts +156 -0
  176. package/dist/number/branded-types/non-zero-uint32.d.mts.map +1 -0
  177. package/dist/number/branded-types/non-zero-uint32.mjs +140 -0
  178. package/dist/number/branded-types/non-zero-uint32.mjs.map +1 -0
  179. package/dist/number/branded-types/positive-finite-number.d.mts +171 -0
  180. package/dist/number/branded-types/positive-finite-number.d.mts.map +1 -0
  181. package/dist/number/branded-types/positive-finite-number.mjs +165 -0
  182. package/dist/number/branded-types/positive-finite-number.mjs.map +1 -0
  183. package/dist/number/branded-types/positive-int.d.mts +270 -0
  184. package/dist/number/branded-types/positive-int.d.mts.map +1 -0
  185. package/dist/number/branded-types/positive-int.mjs +257 -0
  186. package/dist/number/branded-types/positive-int.mjs.map +1 -0
  187. package/dist/number/branded-types/positive-int16.d.mts +162 -0
  188. package/dist/number/branded-types/positive-int16.d.mts.map +1 -0
  189. package/dist/number/branded-types/positive-int16.mjs +139 -0
  190. package/dist/number/branded-types/positive-int16.mjs.map +1 -0
  191. package/dist/number/branded-types/positive-int32.d.mts +158 -0
  192. package/dist/number/branded-types/positive-int32.d.mts.map +1 -0
  193. package/dist/number/branded-types/positive-int32.mjs +139 -0
  194. package/dist/number/branded-types/positive-int32.mjs.map +1 -0
  195. package/dist/number/branded-types/positive-safe-int.d.mts +152 -0
  196. package/dist/number/branded-types/positive-safe-int.d.mts.map +1 -0
  197. package/dist/number/branded-types/positive-safe-int.mjs +138 -0
  198. package/dist/number/branded-types/positive-safe-int.mjs.map +1 -0
  199. package/dist/number/branded-types/positive-uint16.d.mts +160 -0
  200. package/dist/number/branded-types/positive-uint16.d.mts.map +1 -0
  201. package/dist/number/branded-types/positive-uint16.mjs +139 -0
  202. package/dist/number/branded-types/positive-uint16.mjs.map +1 -0
  203. package/dist/number/branded-types/positive-uint32.d.mts +156 -0
  204. package/dist/number/branded-types/positive-uint32.d.mts.map +1 -0
  205. package/dist/number/branded-types/positive-uint32.mjs +139 -0
  206. package/dist/number/branded-types/positive-uint32.mjs.map +1 -0
  207. package/dist/number/branded-types/safe-int.d.mts +243 -0
  208. package/dist/number/branded-types/safe-int.d.mts.map +1 -0
  209. package/dist/number/branded-types/safe-int.mjs +240 -0
  210. package/dist/number/branded-types/safe-int.mjs.map +1 -0
  211. package/dist/number/branded-types/safe-uint.d.mts +151 -0
  212. package/dist/number/branded-types/safe-uint.d.mts.map +1 -0
  213. package/dist/number/branded-types/safe-uint.mjs +138 -0
  214. package/dist/number/branded-types/safe-uint.mjs.map +1 -0
  215. package/dist/number/branded-types/uint.d.mts +144 -0
  216. package/dist/number/branded-types/uint.d.mts.map +1 -0
  217. package/dist/number/branded-types/uint.mjs +132 -0
  218. package/dist/number/branded-types/uint.mjs.map +1 -0
  219. package/dist/number/branded-types/uint16.d.mts +157 -0
  220. package/dist/number/branded-types/uint16.d.mts.map +1 -0
  221. package/dist/number/branded-types/uint16.mjs +137 -0
  222. package/dist/number/branded-types/uint16.mjs.map +1 -0
  223. package/dist/number/branded-types/uint32.d.mts +185 -0
  224. package/dist/number/branded-types/uint32.d.mts.map +1 -0
  225. package/dist/number/branded-types/uint32.mjs +169 -0
  226. package/dist/number/branded-types/uint32.mjs.map +1 -0
  227. package/dist/number/enum/index.d.mts +3 -0
  228. package/dist/number/enum/index.d.mts.map +1 -0
  229. package/dist/number/enum/index.mjs +3 -0
  230. package/dist/number/enum/index.mjs.map +1 -0
  231. package/dist/number/enum/int8.d.mts +202 -0
  232. package/dist/number/enum/int8.d.mts.map +1 -0
  233. package/dist/number/enum/int8.mjs +296 -0
  234. package/dist/number/enum/int8.mjs.map +1 -0
  235. package/dist/number/enum/uint8.d.mts +128 -0
  236. package/dist/number/enum/uint8.d.mts.map +1 -0
  237. package/dist/number/enum/uint8.mjs +251 -0
  238. package/dist/number/enum/uint8.mjs.map +1 -0
  239. package/dist/number/index.d.mts +5 -0
  240. package/dist/number/index.d.mts.map +1 -0
  241. package/dist/number/index.mjs +31 -0
  242. package/dist/number/index.mjs.map +1 -0
  243. package/dist/number/num.d.mts +515 -0
  244. package/dist/number/num.d.mts.map +1 -0
  245. package/dist/number/num.mjs +513 -0
  246. package/dist/number/num.mjs.map +1 -0
  247. package/dist/number/refined-number-utils.d.mts +191 -0
  248. package/dist/number/refined-number-utils.d.mts.map +1 -0
  249. package/dist/number/refined-number-utils.mjs +179 -0
  250. package/dist/number/refined-number-utils.mjs.map +1 -0
  251. package/dist/object/index.d.mts +2 -0
  252. package/dist/object/index.d.mts.map +1 -0
  253. package/dist/object/index.mjs +2 -0
  254. package/dist/object/index.mjs.map +1 -0
  255. package/dist/object/object.d.mts +296 -0
  256. package/dist/object/object.d.mts.map +1 -0
  257. package/dist/object/object.mjs +295 -0
  258. package/dist/object/object.mjs.map +1 -0
  259. package/dist/others/cast-mutable.d.mts +110 -0
  260. package/dist/others/cast-mutable.d.mts.map +1 -0
  261. package/dist/others/cast-mutable.mjs +114 -0
  262. package/dist/others/cast-mutable.mjs.map +1 -0
  263. package/dist/others/cast-readonly.d.mts +189 -0
  264. package/dist/others/cast-readonly.d.mts.map +1 -0
  265. package/dist/others/cast-readonly.mjs +193 -0
  266. package/dist/others/cast-readonly.mjs.map +1 -0
  267. package/dist/others/if-then.d.mts +98 -0
  268. package/dist/others/if-then.d.mts.map +1 -0
  269. package/dist/others/if-then.mjs +100 -0
  270. package/dist/others/if-then.mjs.map +1 -0
  271. package/dist/others/index.d.mts +8 -0
  272. package/dist/others/index.d.mts.map +1 -0
  273. package/dist/others/index.mjs +8 -0
  274. package/dist/others/index.mjs.map +1 -0
  275. package/dist/others/map-nullable.d.mts +151 -0
  276. package/dist/others/map-nullable.d.mts.map +1 -0
  277. package/dist/others/map-nullable.mjs +159 -0
  278. package/dist/others/map-nullable.mjs.map +1 -0
  279. package/dist/others/memoize-function.d.mts +173 -0
  280. package/dist/others/memoize-function.d.mts.map +1 -0
  281. package/dist/others/memoize-function.mjs +189 -0
  282. package/dist/others/memoize-function.mjs.map +1 -0
  283. package/dist/others/tuple.d.mts +159 -0
  284. package/dist/others/tuple.d.mts.map +1 -0
  285. package/dist/others/tuple.mjs +161 -0
  286. package/dist/others/tuple.mjs.map +1 -0
  287. package/dist/others/unknown-to-string.d.mts +180 -0
  288. package/dist/others/unknown-to-string.d.mts.map +1 -0
  289. package/dist/others/unknown-to-string.mjs +211 -0
  290. package/dist/others/unknown-to-string.mjs.map +1 -0
  291. package/dist/tsconfig.json +1 -0
  292. package/package.json +16 -14
@@ -0,0 +1,185 @@
1
+ import { Optional } from './optional.mjs';
2
+ /**
3
+ * @internal
4
+ * Utility type to merge intersection types into a single object type.
5
+ * This helps with TypeScript's display of complex intersection types.
6
+ * @template T The intersection type to merge.
7
+ */
8
+ type MergeIntersection<T> = {
9
+ [K in keyof T]: T[K];
10
+ };
11
+ /**
12
+ * Creates a new pipe object that allows for chaining operations on a value.
13
+ *
14
+ * This function provides a fluent interface for applying transformations to values,
15
+ * with intelligent method selection based on the input type:
16
+ * - For `Optional` values: Provides `mapOptional` for safe Optional transformations
17
+ * - For other values: Provides `mapNullable` for null-safe transformations
18
+ * - All types get the basic `map` method for general transformations
19
+ *
20
+ * The pipe maintains type safety throughout the chain, automatically selecting
21
+ * the appropriate overload based on the current value type.
22
+ *
23
+ * @template A The type of the initial value to wrap in a pipe.
24
+ * @param a The initial value to wrap in a pipe.
25
+ * @returns A pipe object with chaining methods appropriate for the value type.
26
+ *
27
+ * @example
28
+ * Basic value transformation chaining:
29
+ * ```typescript
30
+ * // Simple sequential transformations
31
+ * const result = pipe(10)
32
+ * .map(x => x * 2) // 20
33
+ * .map(x => x + 5) // 25
34
+ * .map(x => x.toString()) // '25'
35
+ * .value;
36
+ *
37
+ * // String processing pipeline
38
+ * const processed = pipe(" Hello World ")
39
+ * .map(s => s.trim()) // "Hello World"
40
+ * .map(s => s.toLowerCase()) // "hello world"
41
+ * .map(s => s.split(' ')) // ["hello", "world"]
42
+ * .map(arr => arr.join('-')) // "hello-world"
43
+ * .value;
44
+ * ```
45
+ *
46
+ * @example
47
+ * Nullable value handling with automatic null checking:
48
+ * ```typescript
49
+ * // Safe operations on potentially null values
50
+ * const maybeNumber: number | null = getNumberFromAPI();
51
+ * const result = pipe(maybeNumber)
52
+ * .mapNullable(x => x * 2) // Only applies if not null
53
+ * .mapNullable(x => `Result: ${x}`) // Only applies if previous step succeeded
54
+ * .value; // 'Result: 20' or undefined
55
+ *
56
+ * // Handling undefined values
57
+ * const maybeUser: User | undefined = findUser(id);
58
+ * const userName = pipe(maybeUser)
59
+ * .mapNullable(user => user.name)
60
+ * .mapNullable(name => name.toUpperCase())
61
+ * .value; // string or undefined
62
+ * ```
63
+ *
64
+ * @example
65
+ * Optional value handling with monadic operations:
66
+ * ```typescript
67
+ * // Working with Optional types
68
+ * const optional = Optional.some(42);
69
+ * const result = pipe(optional)
70
+ * .mapOptional(x => x / 2) // Optional.some(21)
71
+ * .mapOptional(x => Math.sqrt(x)) // Optional.some(~4.58)
72
+ * .value; // Optional.some(4.58...)
73
+ *
74
+ * // Optional chains that can become None
75
+ * const parseAndProcess = (input: string) =>
76
+ * pipe(Optional.fromNullable(input))
77
+ * .mapOptional(s => s.trim())
78
+ * .mapOptional(s => s.length > 0 ? s : null) // Could become None
79
+ * .mapOptional(s => parseInt(s, 10))
80
+ * .mapOptional(n => isNaN(n) ? null : n)
81
+ * .value; // Optional<number>
82
+ * ```
83
+ *
84
+ * @example
85
+ * Mixed type transformations:
86
+ * ```typescript
87
+ * // Starting with a string, transforming through different types
88
+ * const complex = pipe('hello')
89
+ * .map(s => s.length) // number: 5
90
+ * .map(n => n > 3 ? n : null) // number | null: 5
91
+ * .mapNullable(n => n * 10) // number: 50 (or undefined if null)
92
+ * .value; // 50 or undefined
93
+ *
94
+ * // API response processing
95
+ * const processApiResponse = (response: ApiResponse) =>
96
+ * pipe(response)
97
+ * .map(r => r.data) // Extract data
98
+ * .mapNullable(data => data.user) // Safe user access
99
+ * .mapNullable(user => user.profile) // Safe profile access
100
+ * .mapNullable(profile => profile.avatar) // Safe avatar access
101
+ * .value; // string | undefined
102
+ * ```
103
+ *
104
+ * @example
105
+ * Error-safe computation chains:
106
+ * ```typescript
107
+ * // Building complex computations safely
108
+ * const safeCalculation = (input: unknown) =>
109
+ * pipe(input)
110
+ * .map(val => typeof val === 'number' ? val : null)
111
+ * .mapNullable(n => n > 0 ? n : null) // Positive numbers only
112
+ * .mapNullable(n => Math.sqrt(n)) // Safe square root
113
+ * .mapNullable(n => n < 100 ? n : null) // Limit result
114
+ * .mapNullable(n => Math.round(n * 100) / 100) // Round to 2 decimals
115
+ * .value; // number | undefined
116
+ * ```
117
+ */
118
+ export declare const pipe: PipeFnOverload;
119
+ /**
120
+ * @internal
121
+ * Overloaded function type for the pipe function.
122
+ * Automatically selects the appropriate pipe type based on input:
123
+ * - Optional types get PipeWithMapOptional
124
+ * - All other types get PipeWithMapNullable
125
+ * @template A The type of value being piped.
126
+ */
127
+ type PipeFnOverload = {
128
+ /** Creates a pipe for Optional values with mapOptional support. */
129
+ <const A extends Optional.Base>(a: A): PipeWithMapOptional<A>;
130
+ /** Creates a pipe for any other value type with mapNullable support. */
131
+ <const A>(a: A): PipeWithMapNullable<A>;
132
+ };
133
+ /**
134
+ * @internal
135
+ * Base pipe interface providing core functionality.
136
+ * All pipe types extend this interface.
137
+ * @template A The type of the current value in the pipe.
138
+ */
139
+ type PipeBase<A> = Readonly<{
140
+ /** The current value being piped. */
141
+ value: A;
142
+ /**
143
+ * Maps the current value to a new value using the provided function.
144
+ * @template B The type of the new value.
145
+ * @param fn Function to transform the current value.
146
+ * @returns A new pipe containing the transformed value.
147
+ */
148
+ map: <B>(fn: (a: A) => B) => PipeBase<B>;
149
+ }>;
150
+ /**
151
+ * @internal
152
+ * Pipe interface for non-Optional values, providing null-safe mapping.
153
+ * Extends PipeBase with mapNullable functionality.
154
+ * @template A The type of the current value in the pipe.
155
+ */
156
+ type PipeWithMapNullable<A> = MergeIntersection<PipeBase<A> & Readonly<{
157
+ /**
158
+ * Maps the current value only if it's not null or undefined.
159
+ * If the current value is null/undefined, the transformation is skipped
160
+ * and undefined is propagated through the pipe.
161
+ * @template B The type of the transformed value.
162
+ * @param fn Function to transform the non-null value.
163
+ * @returns A new pipe containing the transformed value or undefined.
164
+ */
165
+ mapNullable: <B>(fn: (a: NonNullable<A>) => B) => PipeBase<B | undefined>;
166
+ }>>;
167
+ /**
168
+ * @internal
169
+ * Pipe interface for Optional values, providing Optional-aware mapping.
170
+ * Extends PipeBase with mapOptional functionality for monadic operations.
171
+ * @template A The Optional type currently in the pipe.
172
+ */
173
+ type PipeWithMapOptional<A extends Optional.Base> = MergeIntersection<PipeBase<A> & Readonly<{
174
+ /**
175
+ * Maps the value inside an Optional using Optional.map semantics.
176
+ * If the Optional is None, the transformation is skipped and None is propagated.
177
+ * If the Optional is Some, the transformation is applied to the inner value.
178
+ * @template B The type of the transformed inner value.
179
+ * @param fn Function to transform the inner value of the Optional.
180
+ * @returns A new pipe containing an Optional with the transformed value.
181
+ */
182
+ mapOptional: <B>(fn: (a: Optional.Unwrap<A>) => B) => PipeBase<Optional<B>>;
183
+ }>>;
184
+ export {};
185
+ //# sourceMappingURL=pipe.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipe.d.mts","sourceRoot":"","sources":["../../src/functional/pipe.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C;;;;;GAKG;AACH,KAAK,iBAAiB,CAAC,CAAC,IAAI;KACzB,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CACrB,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0GG;AAEH,eAAO,MAAM,IAAI,EAAE,cAcC,CAAC;AAErB;;;;;;;GAOG;AACH,KAAK,cAAc,GAAG;IACpB,mEAAmE;IACnE,CAAC,KAAK,CAAC,CAAC,SAAS,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC;IAC9D,wEAAwE;IACxE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC;CACzC,CAAC;AAEF;;;;;GAKG;AACH,KAAK,QAAQ,CAAC,CAAC,IAAI,QAAQ,CAAC;IAC1B,qCAAqC;IACrC,KAAK,EAAE,CAAC,CAAC;IACT;;;;;OAKG;IACH,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC;CAC1C,CAAC,CAAC;AAEH;;;;;GAKG;AACH,KAAK,mBAAmB,CAAC,CAAC,IAAI,iBAAiB,CAC7C,QAAQ,CAAC,CAAC,CAAC,GACT,QAAQ,CAAC;IACP;;;;;;;OAOG;IACH,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,QAAQ,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;CAC3E,CAAC,CACL,CAAC;AAEF;;;;;GAKG;AACH,KAAK,mBAAmB,CAAC,CAAC,SAAS,QAAQ,CAAC,IAAI,IAAI,iBAAiB,CACnE,QAAQ,CAAC,CAAC,CAAC,GACT,QAAQ,CAAC;IACP;;;;;;;OAOG;IACH,WAAW,EAAE,CAAC,CAAC,EACb,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAC7B,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;CAC5B,CAAC,CACL,CAAC"}
@@ -0,0 +1,129 @@
1
+ import { Optional } from './optional.mjs';
2
+
3
+ /**
4
+ * Creates a new pipe object that allows for chaining operations on a value.
5
+ *
6
+ * This function provides a fluent interface for applying transformations to values,
7
+ * with intelligent method selection based on the input type:
8
+ * - For `Optional` values: Provides `mapOptional` for safe Optional transformations
9
+ * - For other values: Provides `mapNullable` for null-safe transformations
10
+ * - All types get the basic `map` method for general transformations
11
+ *
12
+ * The pipe maintains type safety throughout the chain, automatically selecting
13
+ * the appropriate overload based on the current value type.
14
+ *
15
+ * @template A The type of the initial value to wrap in a pipe.
16
+ * @param a The initial value to wrap in a pipe.
17
+ * @returns A pipe object with chaining methods appropriate for the value type.
18
+ *
19
+ * @example
20
+ * Basic value transformation chaining:
21
+ * ```typescript
22
+ * // Simple sequential transformations
23
+ * const result = pipe(10)
24
+ * .map(x => x * 2) // 20
25
+ * .map(x => x + 5) // 25
26
+ * .map(x => x.toString()) // '25'
27
+ * .value;
28
+ *
29
+ * // String processing pipeline
30
+ * const processed = pipe(" Hello World ")
31
+ * .map(s => s.trim()) // "Hello World"
32
+ * .map(s => s.toLowerCase()) // "hello world"
33
+ * .map(s => s.split(' ')) // ["hello", "world"]
34
+ * .map(arr => arr.join('-')) // "hello-world"
35
+ * .value;
36
+ * ```
37
+ *
38
+ * @example
39
+ * Nullable value handling with automatic null checking:
40
+ * ```typescript
41
+ * // Safe operations on potentially null values
42
+ * const maybeNumber: number | null = getNumberFromAPI();
43
+ * const result = pipe(maybeNumber)
44
+ * .mapNullable(x => x * 2) // Only applies if not null
45
+ * .mapNullable(x => `Result: ${x}`) // Only applies if previous step succeeded
46
+ * .value; // 'Result: 20' or undefined
47
+ *
48
+ * // Handling undefined values
49
+ * const maybeUser: User | undefined = findUser(id);
50
+ * const userName = pipe(maybeUser)
51
+ * .mapNullable(user => user.name)
52
+ * .mapNullable(name => name.toUpperCase())
53
+ * .value; // string or undefined
54
+ * ```
55
+ *
56
+ * @example
57
+ * Optional value handling with monadic operations:
58
+ * ```typescript
59
+ * // Working with Optional types
60
+ * const optional = Optional.some(42);
61
+ * const result = pipe(optional)
62
+ * .mapOptional(x => x / 2) // Optional.some(21)
63
+ * .mapOptional(x => Math.sqrt(x)) // Optional.some(~4.58)
64
+ * .value; // Optional.some(4.58...)
65
+ *
66
+ * // Optional chains that can become None
67
+ * const parseAndProcess = (input: string) =>
68
+ * pipe(Optional.fromNullable(input))
69
+ * .mapOptional(s => s.trim())
70
+ * .mapOptional(s => s.length > 0 ? s : null) // Could become None
71
+ * .mapOptional(s => parseInt(s, 10))
72
+ * .mapOptional(n => isNaN(n) ? null : n)
73
+ * .value; // Optional<number>
74
+ * ```
75
+ *
76
+ * @example
77
+ * Mixed type transformations:
78
+ * ```typescript
79
+ * // Starting with a string, transforming through different types
80
+ * const complex = pipe('hello')
81
+ * .map(s => s.length) // number: 5
82
+ * .map(n => n > 3 ? n : null) // number | null: 5
83
+ * .mapNullable(n => n * 10) // number: 50 (or undefined if null)
84
+ * .value; // 50 or undefined
85
+ *
86
+ * // API response processing
87
+ * const processApiResponse = (response: ApiResponse) =>
88
+ * pipe(response)
89
+ * .map(r => r.data) // Extract data
90
+ * .mapNullable(data => data.user) // Safe user access
91
+ * .mapNullable(user => user.profile) // Safe profile access
92
+ * .mapNullable(profile => profile.avatar) // Safe avatar access
93
+ * .value; // string | undefined
94
+ * ```
95
+ *
96
+ * @example
97
+ * Error-safe computation chains:
98
+ * ```typescript
99
+ * // Building complex computations safely
100
+ * const safeCalculation = (input: unknown) =>
101
+ * pipe(input)
102
+ * .map(val => typeof val === 'number' ? val : null)
103
+ * .mapNullable(n => n > 0 ? n : null) // Positive numbers only
104
+ * .mapNullable(n => Math.sqrt(n)) // Safe square root
105
+ * .mapNullable(n => n < 100 ? n : null) // Limit result
106
+ * .mapNullable(n => Math.round(n * 100) / 100) // Round to 2 decimals
107
+ * .value; // number | undefined
108
+ * ```
109
+ */
110
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
111
+ const pipe = ((a) => {
112
+ if (Optional.isOptional(a)) {
113
+ return {
114
+ value: a,
115
+ map: (fn) => pipe(fn(a)),
116
+ mapOptional: (fn) => pipe(Optional.map(a, fn)),
117
+ };
118
+ }
119
+ else {
120
+ return {
121
+ value: a,
122
+ map: (fn) => pipe(fn(a)),
123
+ mapNullable: (fn) => pipe(a == null ? undefined : fn(a)),
124
+ };
125
+ }
126
+ });
127
+
128
+ export { pipe };
129
+ //# sourceMappingURL=pipe.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipe.mjs","sources":["../../src/functional/pipe.mts"],"sourcesContent":[null],"names":[],"mappings":";;AAYA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0GG;AACH;MACa,IAAI,IAAoB,CAAW,CAAI,KAAI;AACtD,IAAA,IAAI,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;QAC1B,OAAO;AACL,YAAA,KAAK,EAAE,CAAC;AACR,YAAA,GAAG,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACxB,YAAA,WAAW,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;SACF;;SACzC;QACL,OAAO;AACL,YAAA,KAAK,EAAE,CAAC;AACR,YAAA,GAAG,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACxB,WAAW,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC,IAAI,IAAI,GAAG,SAAS,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;SACxB;;AAEtC,CAAC;;;;"}