@kdtlabs/utils 0.0.4 → 0.0.6

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 (454) hide show
  1. package/SKILL.md +12 -9
  2. package/dist/arrays/comparators.d.ts +8 -0
  3. package/dist/arrays/comparators.d.ts.map +1 -0
  4. package/{arrays → dist/arrays}/index.d.ts +1 -0
  5. package/dist/arrays/index.d.ts.map +1 -0
  6. package/{common → dist/common}/assertions.d.ts +1 -1
  7. package/{common → dist/common}/assertions.d.ts.map +1 -1
  8. package/{common → dist/common}/types.d.ts +1 -1
  9. package/{common → dist/common}/types.d.ts.map +1 -1
  10. package/{functions → dist/functions}/executions.d.ts +1 -1
  11. package/{functions → dist/functions}/executions.d.ts.map +1 -1
  12. package/dist/index.js +14 -0
  13. package/dist/index.js.map +101 -0
  14. package/{objects → dist/objects}/transformations.d.ts +1 -1
  15. package/{objects → dist/objects}/transformations.d.ts.map +1 -1
  16. package/{objects → dist/objects}/types.d.ts +1 -1
  17. package/{objects → dist/objects}/types.d.ts.map +1 -1
  18. package/{promises → dist/promises}/deferred.d.ts +1 -1
  19. package/{promises → dist/promises}/deferred.d.ts.map +1 -1
  20. package/{promises → dist/promises}/timers.d.ts +1 -1
  21. package/{promises → dist/promises}/timers.d.ts.map +1 -1
  22. package/{serializer → dist/serializer}/context.d.ts +1 -1
  23. package/{serializer → dist/serializer}/context.d.ts.map +1 -1
  24. package/{serializer → dist/serializer}/serialize.d.ts +1 -1
  25. package/{serializer → dist/serializer}/serialize.d.ts.map +1 -1
  26. package/{serializer → dist/serializer}/serializers/array.d.ts +1 -1
  27. package/{serializer → dist/serializer}/serializers/array.d.ts.map +1 -1
  28. package/{serializer → dist/serializer}/serializers/binary.d.ts +1 -1
  29. package/dist/serializer/serializers/binary.d.ts.map +1 -0
  30. package/{serializer → dist/serializer}/serializers/blob.d.ts +1 -1
  31. package/dist/serializer/serializers/blob.d.ts.map +1 -0
  32. package/{serializer → dist/serializer}/serializers/collection.d.ts +1 -1
  33. package/{serializer → dist/serializer}/serializers/collection.d.ts.map +1 -1
  34. package/{serializer → dist/serializer}/serializers/compound.d.ts +1 -1
  35. package/{serializer → dist/serializer}/serializers/compound.d.ts.map +1 -1
  36. package/{serializer → dist/serializer}/serializers/error.d.ts +1 -1
  37. package/{serializer → dist/serializer}/serializers/error.d.ts.map +1 -1
  38. package/{serializer → dist/serializer}/serializers/function.d.ts +1 -1
  39. package/{serializer → dist/serializer}/serializers/function.d.ts.map +1 -1
  40. package/{serializer → dist/serializer}/serializers/leaf-object.d.ts +1 -1
  41. package/{serializer → dist/serializer}/serializers/leaf-object.d.ts.map +1 -1
  42. package/{serializer → dist/serializer}/serializers/number.d.ts +1 -1
  43. package/dist/serializer/serializers/number.d.ts.map +1 -0
  44. package/{serializer → dist/serializer}/serializers/object.d.ts +1 -1
  45. package/{serializer → dist/serializer}/serializers/object.d.ts.map +1 -1
  46. package/{serializer → dist/serializer}/serializers/opaque.d.ts +1 -1
  47. package/dist/serializer/serializers/opaque.d.ts.map +1 -0
  48. package/{serializer → dist/serializer}/serializers/primitive.d.ts +1 -1
  49. package/{serializer → dist/serializer}/serializers/primitive.d.ts.map +1 -1
  50. package/{serializer → dist/serializer}/types.d.ts +1 -1
  51. package/{serializer → dist/serializer}/types.d.ts.map +1 -1
  52. package/{serializer → dist/serializer}/utils.d.ts +1 -1
  53. package/{serializer → dist/serializer}/utils.d.ts.map +1 -1
  54. package/{strings → dist/strings}/index.d.ts +1 -0
  55. package/{strings → dist/strings}/index.d.ts.map +1 -1
  56. package/{strings → dist/strings}/manipulations.d.ts +2 -0
  57. package/{strings → dist/strings}/manipulations.d.ts.map +1 -1
  58. package/dist/strings/strip-ansi.d.ts +2 -0
  59. package/dist/strings/strip-ansi.d.ts.map +1 -0
  60. package/{system → dist/system}/fetch.d.ts +2 -2
  61. package/{system → dist/system}/fetch.d.ts.map +1 -1
  62. package/dist/system/types.d.ts +3 -0
  63. package/{system → dist/system}/types.d.ts.map +1 -1
  64. package/{times → dist/times}/conversions.d.ts +1 -1
  65. package/{times → dist/times}/conversions.d.ts.map +1 -1
  66. package/package.json +11 -73
  67. package/src/arrays/accessors.ts +25 -0
  68. package/src/arrays/comparators.ts +53 -0
  69. package/src/arrays/conversions.ts +16 -0
  70. package/src/arrays/factories.ts +13 -0
  71. package/src/arrays/guards.ts +7 -0
  72. package/src/arrays/index.ts +9 -0
  73. package/src/arrays/operations.ts +103 -0
  74. package/src/arrays/set-operations.ts +11 -0
  75. package/src/arrays/types.ts +21 -0
  76. package/src/buffers/conversions.ts +26 -0
  77. package/src/buffers/guards.ts +13 -0
  78. package/src/buffers/index.ts +5 -0
  79. package/src/buffers/operations.ts +44 -0
  80. package/src/buffers/types.ts +1 -0
  81. package/src/collections/fifo-map.ts +33 -0
  82. package/src/collections/fifo-set.ts +29 -0
  83. package/src/collections/guards.ts +11 -0
  84. package/src/collections/index.ts +10 -0
  85. package/src/collections/linked-base.ts +117 -0
  86. package/src/collections/linked-map.ts +82 -0
  87. package/src/collections/linked-set.ts +69 -0
  88. package/src/collections/lru-map.ts +36 -0
  89. package/src/collections/lru-set.ts +25 -0
  90. package/src/collections/types.ts +12 -0
  91. package/src/common/assertions.ts +11 -0
  92. package/src/common/guards.ts +58 -0
  93. package/src/common/index.ts +5 -0
  94. package/src/common/transformations.ts +20 -0
  95. package/src/common/types.ts +3 -0
  96. package/src/core/constants.ts +1 -0
  97. package/src/core/conversions.ts +9 -0
  98. package/src/core/guards.ts +57 -0
  99. package/src/core/index.ts +5 -0
  100. package/src/core/types.ts +15 -0
  101. package/src/errors/base-error.ts +48 -0
  102. package/src/errors/factories.ts +74 -0
  103. package/src/errors/guards.ts +12 -0
  104. package/src/errors/index.ts +7 -0
  105. package/src/errors/operations.ts +15 -0
  106. package/src/errors/stringify.ts +131 -0
  107. package/src/errors/types.ts +11 -0
  108. package/src/events/emitter.ts +117 -0
  109. package/src/events/index.ts +2 -0
  110. package/src/events/types.ts +11 -0
  111. package/src/functions/compositions.ts +17 -0
  112. package/src/functions/debounce.ts +34 -0
  113. package/src/functions/executions.ts +12 -0
  114. package/src/functions/guards.ts +5 -0
  115. package/src/functions/index.ts +11 -0
  116. package/src/functions/memoize.ts +33 -0
  117. package/src/functions/once.ts +33 -0
  118. package/src/functions/pipe.ts +39 -0
  119. package/src/functions/throttle.ts +59 -0
  120. package/src/functions/timer-state.ts +33 -0
  121. package/src/functions/types.ts +8 -0
  122. package/src/index.ts +16 -0
  123. package/src/json-rpc/constants.ts +15 -0
  124. package/src/json-rpc/factories.ts +22 -0
  125. package/src/json-rpc/guards.ts +58 -0
  126. package/src/json-rpc/index.ts +5 -0
  127. package/src/json-rpc/types.ts +48 -0
  128. package/src/numbers/bigint-math.ts +163 -0
  129. package/src/numbers/constants.ts +14 -0
  130. package/src/numbers/conversions.ts +83 -0
  131. package/src/numbers/factories.ts +6 -0
  132. package/src/numbers/formats.ts +52 -0
  133. package/src/numbers/guards.ts +22 -0
  134. package/src/numbers/index.ts +10 -0
  135. package/src/numbers/maths.ts +28 -0
  136. package/src/numbers/ranges.ts +17 -0
  137. package/src/numbers/types.ts +7 -0
  138. package/src/objects/deep-merge.ts +76 -0
  139. package/src/objects/guards.ts +21 -0
  140. package/src/objects/index.ts +5 -0
  141. package/src/objects/transformations.ts +34 -0
  142. package/src/objects/types.ts +33 -0
  143. package/src/promises/abortable.ts +37 -0
  144. package/src/promises/compositions.ts +18 -0
  145. package/src/promises/deferred.ts +131 -0
  146. package/src/promises/guards.ts +8 -0
  147. package/src/promises/index.ts +10 -0
  148. package/src/promises/pipe.ts +39 -0
  149. package/src/promises/poll.ts +92 -0
  150. package/src/promises/retry.ts +138 -0
  151. package/src/promises/timers.ts +16 -0
  152. package/src/promises/types.ts +1 -0
  153. package/src/serializer/constants.ts +5 -0
  154. package/src/serializer/context.ts +24 -0
  155. package/src/serializer/index.ts +8 -0
  156. package/src/serializer/serialize.ts +51 -0
  157. package/src/serializer/serializers/array.ts +17 -0
  158. package/src/serializer/serializers/binary.ts +24 -0
  159. package/src/serializer/serializers/blob.ts +18 -0
  160. package/src/serializer/serializers/collection.ts +25 -0
  161. package/src/serializer/serializers/compound.ts +79 -0
  162. package/src/serializer/serializers/error.ts +75 -0
  163. package/src/serializer/serializers/function.ts +13 -0
  164. package/src/serializer/serializers/index.ts +12 -0
  165. package/src/serializer/serializers/leaf-object.ts +18 -0
  166. package/src/serializer/serializers/number.ts +14 -0
  167. package/src/serializer/serializers/object.ts +62 -0
  168. package/src/serializer/serializers/opaque.ts +36 -0
  169. package/src/serializer/serializers/primitive.ts +32 -0
  170. package/src/serializer/symbol-registry.ts +28 -0
  171. package/src/serializer/types.ts +42 -0
  172. package/src/serializer/utils.ts +15 -0
  173. package/src/strings/constants.ts +1 -0
  174. package/src/strings/factories.ts +9 -0
  175. package/src/strings/guards.ts +51 -0
  176. package/src/strings/index.ts +7 -0
  177. package/src/strings/manipulations.ts +145 -0
  178. package/src/strings/strip-ansi.ts +14 -0
  179. package/src/strings/types.ts +3 -0
  180. package/src/system/env.ts +32 -0
  181. package/src/system/fetch.ts +23 -0
  182. package/src/system/graceful-exit.ts +46 -0
  183. package/src/system/index.ts +6 -0
  184. package/src/system/path.ts +12 -0
  185. package/src/system/types.ts +3 -0
  186. package/src/times/constants.ts +6 -0
  187. package/src/times/conversions.ts +85 -0
  188. package/src/times/factories.ts +3 -0
  189. package/src/times/guards.ts +3 -0
  190. package/src/times/index.ts +5 -0
  191. package/src/times/operations.ts +9 -0
  192. package/CHANGELOG.md +0 -57
  193. package/arrays/index.d.ts.map +0 -1
  194. package/arrays/index.js +0 -4
  195. package/arrays/index.js.map +0 -9
  196. package/buffers/index.js +0 -4
  197. package/buffers/index.js.map +0 -9
  198. package/chunk-25ja9350.js +0 -4
  199. package/chunk-25ja9350.js.map +0 -13
  200. package/chunk-3w6nt7kb.js +0 -4
  201. package/chunk-3w6nt7kb.js.map +0 -12
  202. package/chunk-5txwcr6j.js +0 -4
  203. package/chunk-5txwcr6j.js.map +0 -17
  204. package/chunk-6dxad51h.js +0 -4
  205. package/chunk-6dxad51h.js.map +0 -12
  206. package/chunk-6kdnnxe0.js +0 -4
  207. package/chunk-6kdnnxe0.js.map +0 -17
  208. package/chunk-7cndek91.js +0 -4
  209. package/chunk-7cndek91.js.map +0 -15
  210. package/chunk-bee0nxse.js +0 -6
  211. package/chunk-bee0nxse.js.map +0 -14
  212. package/chunk-bjmntg2y.js +0 -4
  213. package/chunk-bjmntg2y.js.map +0 -18
  214. package/chunk-d0d0d285.js +0 -4
  215. package/chunk-d0d0d285.js.map +0 -26
  216. package/chunk-jny2gdyy.js +0 -4
  217. package/chunk-jny2gdyy.js.map +0 -12
  218. package/chunk-kbzgn0z4.js +0 -4
  219. package/chunk-kbzgn0z4.js.map +0 -10
  220. package/chunk-qmbgp0vr.js +0 -4
  221. package/chunk-qmbgp0vr.js.map +0 -12
  222. package/chunk-qn6n0ff5.js +0 -4
  223. package/chunk-qn6n0ff5.js.map +0 -17
  224. package/chunk-r3maskdb.js +0 -5
  225. package/chunk-r3maskdb.js.map +0 -13
  226. package/chunk-st3dxvqt.js +0 -4
  227. package/chunk-st3dxvqt.js.map +0 -14
  228. package/chunk-xp18wdk6.js +0 -4
  229. package/chunk-xp18wdk6.js.map +0 -12
  230. package/collections/index.js +0 -4
  231. package/collections/index.js.map +0 -9
  232. package/common/index.js +0 -4
  233. package/common/index.js.map +0 -9
  234. package/core/index.js +0 -4
  235. package/core/index.js.map +0 -9
  236. package/errors/index.js +0 -4
  237. package/errors/index.js.map +0 -9
  238. package/events/index.js +0 -4
  239. package/events/index.js.map +0 -9
  240. package/functions/index.js +0 -4
  241. package/functions/index.js.map +0 -9
  242. package/index.js +0 -4
  243. package/index.js.map +0 -9
  244. package/json-rpc/index.js +0 -4
  245. package/json-rpc/index.js.map +0 -9
  246. package/meta.json +0 -2998
  247. package/meta.md +0 -1816
  248. package/numbers/index.js +0 -4
  249. package/numbers/index.js.map +0 -9
  250. package/objects/index.js +0 -4
  251. package/objects/index.js.map +0 -9
  252. package/promises/index.js +0 -4
  253. package/promises/index.js.map +0 -9
  254. package/serializer/index.js +0 -4
  255. package/serializer/index.js.map +0 -9
  256. package/serializer/serializers/binary.d.ts.map +0 -1
  257. package/serializer/serializers/blob.d.ts.map +0 -1
  258. package/serializer/serializers/number.d.ts.map +0 -1
  259. package/serializer/serializers/opaque.d.ts.map +0 -1
  260. package/strings/index.js +0 -4
  261. package/strings/index.js.map +0 -9
  262. package/system/index.js +0 -4
  263. package/system/index.js.map +0 -9
  264. package/system/types.d.ts +0 -3
  265. package/times/index.js +0 -4
  266. package/times/index.js.map +0 -9
  267. /package/{arrays → dist/arrays}/accessors.d.ts +0 -0
  268. /package/{arrays → dist/arrays}/accessors.d.ts.map +0 -0
  269. /package/{arrays → dist/arrays}/conversions.d.ts +0 -0
  270. /package/{arrays → dist/arrays}/conversions.d.ts.map +0 -0
  271. /package/{arrays → dist/arrays}/factories.d.ts +0 -0
  272. /package/{arrays → dist/arrays}/factories.d.ts.map +0 -0
  273. /package/{arrays → dist/arrays}/guards.d.ts +0 -0
  274. /package/{arrays → dist/arrays}/guards.d.ts.map +0 -0
  275. /package/{arrays → dist/arrays}/operations.d.ts +0 -0
  276. /package/{arrays → dist/arrays}/operations.d.ts.map +0 -0
  277. /package/{arrays → dist/arrays}/set-operations.d.ts +0 -0
  278. /package/{arrays → dist/arrays}/set-operations.d.ts.map +0 -0
  279. /package/{arrays → dist/arrays}/types.d.ts +0 -0
  280. /package/{arrays → dist/arrays}/types.d.ts.map +0 -0
  281. /package/{buffers → dist/buffers}/conversions.d.ts +0 -0
  282. /package/{buffers → dist/buffers}/conversions.d.ts.map +0 -0
  283. /package/{buffers → dist/buffers}/guards.d.ts +0 -0
  284. /package/{buffers → dist/buffers}/guards.d.ts.map +0 -0
  285. /package/{buffers → dist/buffers}/index.d.ts +0 -0
  286. /package/{buffers → dist/buffers}/index.d.ts.map +0 -0
  287. /package/{buffers → dist/buffers}/operations.d.ts +0 -0
  288. /package/{buffers → dist/buffers}/operations.d.ts.map +0 -0
  289. /package/{buffers → dist/buffers}/types.d.ts +0 -0
  290. /package/{buffers → dist/buffers}/types.d.ts.map +0 -0
  291. /package/{collections → dist/collections}/fifo-map.d.ts +0 -0
  292. /package/{collections → dist/collections}/fifo-map.d.ts.map +0 -0
  293. /package/{collections → dist/collections}/fifo-set.d.ts +0 -0
  294. /package/{collections → dist/collections}/fifo-set.d.ts.map +0 -0
  295. /package/{collections → dist/collections}/guards.d.ts +0 -0
  296. /package/{collections → dist/collections}/guards.d.ts.map +0 -0
  297. /package/{collections → dist/collections}/index.d.ts +0 -0
  298. /package/{collections → dist/collections}/index.d.ts.map +0 -0
  299. /package/{collections → dist/collections}/linked-base.d.ts +0 -0
  300. /package/{collections → dist/collections}/linked-base.d.ts.map +0 -0
  301. /package/{collections → dist/collections}/linked-map.d.ts +0 -0
  302. /package/{collections → dist/collections}/linked-map.d.ts.map +0 -0
  303. /package/{collections → dist/collections}/linked-set.d.ts +0 -0
  304. /package/{collections → dist/collections}/linked-set.d.ts.map +0 -0
  305. /package/{collections → dist/collections}/lru-map.d.ts +0 -0
  306. /package/{collections → dist/collections}/lru-map.d.ts.map +0 -0
  307. /package/{collections → dist/collections}/lru-set.d.ts +0 -0
  308. /package/{collections → dist/collections}/lru-set.d.ts.map +0 -0
  309. /package/{collections → dist/collections}/types.d.ts +0 -0
  310. /package/{collections → dist/collections}/types.d.ts.map +0 -0
  311. /package/{common → dist/common}/guards.d.ts +0 -0
  312. /package/{common → dist/common}/guards.d.ts.map +0 -0
  313. /package/{common → dist/common}/index.d.ts +0 -0
  314. /package/{common → dist/common}/index.d.ts.map +0 -0
  315. /package/{common → dist/common}/transformations.d.ts +0 -0
  316. /package/{common → dist/common}/transformations.d.ts.map +0 -0
  317. /package/{core → dist/core}/constants.d.ts +0 -0
  318. /package/{core → dist/core}/constants.d.ts.map +0 -0
  319. /package/{core → dist/core}/conversions.d.ts +0 -0
  320. /package/{core → dist/core}/conversions.d.ts.map +0 -0
  321. /package/{core → dist/core}/guards.d.ts +0 -0
  322. /package/{core → dist/core}/guards.d.ts.map +0 -0
  323. /package/{core → dist/core}/index.d.ts +0 -0
  324. /package/{core → dist/core}/index.d.ts.map +0 -0
  325. /package/{core → dist/core}/types.d.ts +0 -0
  326. /package/{core → dist/core}/types.d.ts.map +0 -0
  327. /package/{errors → dist/errors}/base-error.d.ts +0 -0
  328. /package/{errors → dist/errors}/base-error.d.ts.map +0 -0
  329. /package/{errors → dist/errors}/factories.d.ts +0 -0
  330. /package/{errors → dist/errors}/factories.d.ts.map +0 -0
  331. /package/{errors → dist/errors}/guards.d.ts +0 -0
  332. /package/{errors → dist/errors}/guards.d.ts.map +0 -0
  333. /package/{errors → dist/errors}/index.d.ts +0 -0
  334. /package/{errors → dist/errors}/index.d.ts.map +0 -0
  335. /package/{errors → dist/errors}/operations.d.ts +0 -0
  336. /package/{errors → dist/errors}/operations.d.ts.map +0 -0
  337. /package/{errors → dist/errors}/stringify.d.ts +0 -0
  338. /package/{errors → dist/errors}/stringify.d.ts.map +0 -0
  339. /package/{errors → dist/errors}/types.d.ts +0 -0
  340. /package/{errors → dist/errors}/types.d.ts.map +0 -0
  341. /package/{events → dist/events}/emitter.d.ts +0 -0
  342. /package/{events → dist/events}/emitter.d.ts.map +0 -0
  343. /package/{events → dist/events}/index.d.ts +0 -0
  344. /package/{events → dist/events}/index.d.ts.map +0 -0
  345. /package/{events → dist/events}/types.d.ts +0 -0
  346. /package/{events → dist/events}/types.d.ts.map +0 -0
  347. /package/{functions → dist/functions}/compositions.d.ts +0 -0
  348. /package/{functions → dist/functions}/compositions.d.ts.map +0 -0
  349. /package/{functions → dist/functions}/debounce.d.ts +0 -0
  350. /package/{functions → dist/functions}/debounce.d.ts.map +0 -0
  351. /package/{functions → dist/functions}/guards.d.ts +0 -0
  352. /package/{functions → dist/functions}/guards.d.ts.map +0 -0
  353. /package/{functions → dist/functions}/index.d.ts +0 -0
  354. /package/{functions → dist/functions}/index.d.ts.map +0 -0
  355. /package/{functions → dist/functions}/memoize.d.ts +0 -0
  356. /package/{functions → dist/functions}/memoize.d.ts.map +0 -0
  357. /package/{functions → dist/functions}/once.d.ts +0 -0
  358. /package/{functions → dist/functions}/once.d.ts.map +0 -0
  359. /package/{functions → dist/functions}/pipe.d.ts +0 -0
  360. /package/{functions → dist/functions}/pipe.d.ts.map +0 -0
  361. /package/{functions → dist/functions}/throttle.d.ts +0 -0
  362. /package/{functions → dist/functions}/throttle.d.ts.map +0 -0
  363. /package/{functions → dist/functions}/timer-state.d.ts +0 -0
  364. /package/{functions → dist/functions}/timer-state.d.ts.map +0 -0
  365. /package/{functions → dist/functions}/types.d.ts +0 -0
  366. /package/{functions → dist/functions}/types.d.ts.map +0 -0
  367. /package/{index.d.ts → dist/index.d.ts} +0 -0
  368. /package/{index.d.ts.map → dist/index.d.ts.map} +0 -0
  369. /package/{json-rpc → dist/json-rpc}/constants.d.ts +0 -0
  370. /package/{json-rpc → dist/json-rpc}/constants.d.ts.map +0 -0
  371. /package/{json-rpc → dist/json-rpc}/factories.d.ts +0 -0
  372. /package/{json-rpc → dist/json-rpc}/factories.d.ts.map +0 -0
  373. /package/{json-rpc → dist/json-rpc}/guards.d.ts +0 -0
  374. /package/{json-rpc → dist/json-rpc}/guards.d.ts.map +0 -0
  375. /package/{json-rpc → dist/json-rpc}/index.d.ts +0 -0
  376. /package/{json-rpc → dist/json-rpc}/index.d.ts.map +0 -0
  377. /package/{json-rpc → dist/json-rpc}/types.d.ts +0 -0
  378. /package/{json-rpc → dist/json-rpc}/types.d.ts.map +0 -0
  379. /package/{numbers → dist/numbers}/bigint-math.d.ts +0 -0
  380. /package/{numbers → dist/numbers}/bigint-math.d.ts.map +0 -0
  381. /package/{numbers → dist/numbers}/constants.d.ts +0 -0
  382. /package/{numbers → dist/numbers}/constants.d.ts.map +0 -0
  383. /package/{numbers → dist/numbers}/conversions.d.ts +0 -0
  384. /package/{numbers → dist/numbers}/conversions.d.ts.map +0 -0
  385. /package/{numbers → dist/numbers}/factories.d.ts +0 -0
  386. /package/{numbers → dist/numbers}/factories.d.ts.map +0 -0
  387. /package/{numbers → dist/numbers}/formats.d.ts +0 -0
  388. /package/{numbers → dist/numbers}/formats.d.ts.map +0 -0
  389. /package/{numbers → dist/numbers}/guards.d.ts +0 -0
  390. /package/{numbers → dist/numbers}/guards.d.ts.map +0 -0
  391. /package/{numbers → dist/numbers}/index.d.ts +0 -0
  392. /package/{numbers → dist/numbers}/index.d.ts.map +0 -0
  393. /package/{numbers → dist/numbers}/maths.d.ts +0 -0
  394. /package/{numbers → dist/numbers}/maths.d.ts.map +0 -0
  395. /package/{numbers → dist/numbers}/ranges.d.ts +0 -0
  396. /package/{numbers → dist/numbers}/ranges.d.ts.map +0 -0
  397. /package/{numbers → dist/numbers}/types.d.ts +0 -0
  398. /package/{numbers → dist/numbers}/types.d.ts.map +0 -0
  399. /package/{objects → dist/objects}/deep-merge.d.ts +0 -0
  400. /package/{objects → dist/objects}/deep-merge.d.ts.map +0 -0
  401. /package/{objects → dist/objects}/guards.d.ts +0 -0
  402. /package/{objects → dist/objects}/guards.d.ts.map +0 -0
  403. /package/{objects → dist/objects}/index.d.ts +0 -0
  404. /package/{objects → dist/objects}/index.d.ts.map +0 -0
  405. /package/{promises → dist/promises}/abortable.d.ts +0 -0
  406. /package/{promises → dist/promises}/abortable.d.ts.map +0 -0
  407. /package/{promises → dist/promises}/compositions.d.ts +0 -0
  408. /package/{promises → dist/promises}/compositions.d.ts.map +0 -0
  409. /package/{promises → dist/promises}/guards.d.ts +0 -0
  410. /package/{promises → dist/promises}/guards.d.ts.map +0 -0
  411. /package/{promises → dist/promises}/index.d.ts +0 -0
  412. /package/{promises → dist/promises}/index.d.ts.map +0 -0
  413. /package/{promises → dist/promises}/pipe.d.ts +0 -0
  414. /package/{promises → dist/promises}/pipe.d.ts.map +0 -0
  415. /package/{promises → dist/promises}/poll.d.ts +0 -0
  416. /package/{promises → dist/promises}/poll.d.ts.map +0 -0
  417. /package/{promises → dist/promises}/retry.d.ts +0 -0
  418. /package/{promises → dist/promises}/retry.d.ts.map +0 -0
  419. /package/{promises → dist/promises}/types.d.ts +0 -0
  420. /package/{promises → dist/promises}/types.d.ts.map +0 -0
  421. /package/{serializer → dist/serializer}/constants.d.ts +0 -0
  422. /package/{serializer → dist/serializer}/constants.d.ts.map +0 -0
  423. /package/{serializer → dist/serializer}/index.d.ts +0 -0
  424. /package/{serializer → dist/serializer}/index.d.ts.map +0 -0
  425. /package/{serializer → dist/serializer}/serializers/index.d.ts +0 -0
  426. /package/{serializer → dist/serializer}/serializers/index.d.ts.map +0 -0
  427. /package/{serializer → dist/serializer}/symbol-registry.d.ts +0 -0
  428. /package/{serializer → dist/serializer}/symbol-registry.d.ts.map +0 -0
  429. /package/{strings → dist/strings}/constants.d.ts +0 -0
  430. /package/{strings → dist/strings}/constants.d.ts.map +0 -0
  431. /package/{strings → dist/strings}/factories.d.ts +0 -0
  432. /package/{strings → dist/strings}/factories.d.ts.map +0 -0
  433. /package/{strings → dist/strings}/guards.d.ts +0 -0
  434. /package/{strings → dist/strings}/guards.d.ts.map +0 -0
  435. /package/{strings → dist/strings}/types.d.ts +0 -0
  436. /package/{strings → dist/strings}/types.d.ts.map +0 -0
  437. /package/{system → dist/system}/env.d.ts +0 -0
  438. /package/{system → dist/system}/env.d.ts.map +0 -0
  439. /package/{system → dist/system}/graceful-exit.d.ts +0 -0
  440. /package/{system → dist/system}/graceful-exit.d.ts.map +0 -0
  441. /package/{system → dist/system}/index.d.ts +0 -0
  442. /package/{system → dist/system}/index.d.ts.map +0 -0
  443. /package/{system → dist/system}/path.d.ts +0 -0
  444. /package/{system → dist/system}/path.d.ts.map +0 -0
  445. /package/{times → dist/times}/constants.d.ts +0 -0
  446. /package/{times → dist/times}/constants.d.ts.map +0 -0
  447. /package/{times → dist/times}/factories.d.ts +0 -0
  448. /package/{times → dist/times}/factories.d.ts.map +0 -0
  449. /package/{times → dist/times}/guards.d.ts +0 -0
  450. /package/{times → dist/times}/guards.d.ts.map +0 -0
  451. /package/{times → dist/times}/index.d.ts +0 -0
  452. /package/{times → dist/times}/index.d.ts.map +0 -0
  453. /package/{times → dist/times}/operations.d.ts +0 -0
  454. /package/{times → dist/times}/operations.d.ts.map +0 -0
@@ -0,0 +1,12 @@
1
+ import type { Nullish } from '../core'
2
+ import type { Fn } from './types'
3
+
4
+ export const noop = () => void 0
5
+
6
+ export const invoke = <T>(fn: () => T) => fn()
7
+
8
+ export function invokes(functions: Array<Nullish<Fn>>) {
9
+ for (const fn of functions) {
10
+ fn?.()
11
+ }
12
+ }
@@ -0,0 +1,5 @@
1
+ import type { Fn } from './types'
2
+
3
+ export const isFunction = <T extends Fn>(value: unknown): value is T => (
4
+ typeof value === 'function'
5
+ )
@@ -0,0 +1,11 @@
1
+ export * from './compositions'
2
+ export * from './debounce'
3
+ export * from './executions'
4
+ export * from './guards'
5
+ export * from './memoize'
6
+ export * from './once'
7
+ export * from './pipe'
8
+ export * from './throttle'
9
+ export * from './timer-state'
10
+
11
+ export type * from './types'
@@ -0,0 +1,33 @@
1
+ import type { Args, Fn } from './types'
2
+
3
+ export interface MemoizeCache<V = unknown> {
4
+ delete(key: unknown): boolean
5
+ get(key: unknown): V | undefined
6
+ has(key: unknown): boolean
7
+ set(key: unknown, value: V): void
8
+ }
9
+
10
+ export interface MemoizeOptions<T extends Fn> {
11
+ cache?: MemoizeCache<ReturnType<T>>
12
+ resolver?: (...args: Args<T>) => unknown
13
+ }
14
+
15
+ export function memoize<T extends Fn>(fn: T, { cache = new Map(), resolver }: MemoizeOptions<T> = {}) {
16
+ const memoized = function (this: unknown, ...args: Args<T>) {
17
+ const key = resolver ? resolver(...args) : args[0]
18
+
19
+ if (cache.has(key)) {
20
+ return cache.get(key)
21
+ }
22
+
23
+ const result = fn.apply(this, args)
24
+
25
+ cache.set(key, result)
26
+
27
+ return result
28
+ } as T & { cache: MemoizeCache<ReturnType<T>> }
29
+
30
+ memoized.cache = cache
31
+
32
+ return memoized
33
+ }
@@ -0,0 +1,33 @@
1
+ import type { Args, Fn } from './types'
2
+ import { normalizeError } from '../errors'
3
+
4
+ export function once<T extends Fn>(fn: T) {
5
+ let called = false
6
+ let result: ReturnType<T>
7
+ let error: unknown
8
+
9
+ const cb = (...args: Args<T>): ReturnType<T> => {
10
+ if (called) {
11
+ if (error) {
12
+ throw normalizeError(error)
13
+ }
14
+
15
+ return result
16
+ }
17
+
18
+ called = true
19
+
20
+ try {
21
+ return (result = fn(...args))
22
+ } catch (error_) {
23
+ throw error = normalizeError(error_)
24
+ }
25
+ }
26
+
27
+ cb.reset = () => {
28
+ called = false
29
+ error = undefined
30
+ }
31
+
32
+ return cb
33
+ }
@@ -0,0 +1,39 @@
1
+ import type { Fn } from './types'
2
+ import { isNonEmptyArray } from '../arrays'
3
+
4
+ export function pipe(): void
5
+ export function pipe<T>(fn: () => T): T
6
+ export function pipe<T1, T2>(fn1: () => T1, fn2: (arg: T1) => T2): T2
7
+ export function pipe<T1, T2, T3>(fn1: () => T1, fn2: (arg: T1) => T2, fn3: (arg: T2) => T3): T3
8
+ export function pipe<T1, T2, T3, T4>(fn1: () => T1, fn2: (arg: T1) => T2, fn3: (arg: T2) => T3, fn4: (arg: T3) => T4): T4
9
+ export function pipe<T1, T2, T3, T4, T5>(fn1: () => T1, fn2: (arg: T1) => T2, fn3: (arg: T2) => T3, fn4: (arg: T3) => T4, fn5: (arg: T4) => T5): T5
10
+ export function pipe<T1, T2, T3, T4, T5, T6>(fn1: () => T1, fn2: (arg: T1) => T2, fn3: (arg: T2) => T3, fn4: (arg: T3) => T4, fn5: (arg: T4) => T5, fn6: (arg: T5) => T6): T6
11
+ export function pipe<T1, T2, T3, T4, T5, T6, T7>(fn1: () => T1, fn2: (arg: T1) => T2, fn3: (arg: T2) => T3, fn4: (arg: T3) => T4, fn5: (arg: T4) => T5, fn6: (arg: T5) => T6, fn7: (arg: T6) => T7): T7
12
+ export function pipe<T1, T2, T3, T4, T5, T6, T7, T8>(fn1: () => T1, fn2: (arg: T1) => T2, fn3: (arg: T2) => T3, fn4: (arg: T3) => T4, fn5: (arg: T4) => T5, fn6: (arg: T5) => T6, fn7: (arg: T6) => T7, fn8: (arg: T7) => T8): T8
13
+ export function pipe<T1, T2, T3, T4, T5, T6, T7, T8, T9>(fn1: () => T1, fn2: (arg: T1) => T2, fn3: (arg: T2) => T3, fn4: (arg: T3) => T4, fn5: (arg: T4) => T5, fn6: (arg: T5) => T6, fn7: (arg: T6) => T7, fn8: (arg: T7) => T8, fn9: (arg: T8) => T9): T9
14
+ export function pipe<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(fn1: () => T1, fn2: (arg: T1) => T2, fn3: (arg: T2) => T3, fn4: (arg: T3) => T4, fn5: (arg: T4) => T5, fn6: (arg: T5) => T6, fn7: (arg: T6) => T7, fn8: (arg: T7) => T8, fn9: (arg: T8) => T9, fn10: (arg: T9) => T10): T10
15
+ export function pipe<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>(fn1: () => T1, fn2: (arg: T1) => T2, fn3: (arg: T2) => T3, fn4: (arg: T3) => T4, fn5: (arg: T4) => T5, fn6: (arg: T5) => T6, fn7: (arg: T6) => T7, fn8: (arg: T7) => T8, fn9: (arg: T8) => T9, fn10: (arg: T9) => T10, fn11: (arg: T10) => T11): T11
16
+ export function pipe<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>(fn1: () => T1, fn2: (arg: T1) => T2, fn3: (arg: T2) => T3, fn4: (arg: T3) => T4, fn5: (arg: T4) => T5, fn6: (arg: T5) => T6, fn7: (arg: T6) => T7, fn8: (arg: T7) => T8, fn9: (arg: T8) => T9, fn10: (arg: T9) => T10, fn11: (arg: T10) => T11, fn12: (arg: T11) => T12): T12
17
+ export function pipe<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>(fn1: () => T1, fn2: (arg: T1) => T2, fn3: (arg: T2) => T3, fn4: (arg: T3) => T4, fn5: (arg: T4) => T5, fn6: (arg: T5) => T6, fn7: (arg: T6) => T7, fn8: (arg: T7) => T8, fn9: (arg: T8) => T9, fn10: (arg: T9) => T10, fn11: (arg: T10) => T11, fn12: (arg: T11) => T12, fn13: (arg: T12) => T13): T13
18
+ export function pipe<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>(fn1: () => T1, fn2: (arg: T1) => T2, fn3: (arg: T2) => T3, fn4: (arg: T3) => T4, fn5: (arg: T4) => T5, fn6: (arg: T5) => T6, fn7: (arg: T6) => T7, fn8: (arg: T7) => T8, fn9: (arg: T8) => T9, fn10: (arg: T9) => T10, fn11: (arg: T10) => T11, fn12: (arg: T11) => T12, fn13: (arg: T12) => T13, fn14: (arg: T13) => T14): T14
19
+ export function pipe<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>(fn1: () => T1, fn2: (arg: T1) => T2, fn3: (arg: T2) => T3, fn4: (arg: T3) => T4, fn5: (arg: T4) => T5, fn6: (arg: T5) => T6, fn7: (arg: T6) => T7, fn8: (arg: T7) => T8, fn9: (arg: T8) => T9, fn10: (arg: T9) => T10, fn11: (arg: T10) => T11, fn12: (arg: T11) => T12, fn13: (arg: T12) => T13, fn14: (arg: T13) => T14, fn15: (arg: T14) => T15): T15
20
+ export function pipe<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>(fn1: () => T1, fn2: (arg: T1) => T2, fn3: (arg: T2) => T3, fn4: (arg: T3) => T4, fn5: (arg: T4) => T5, fn6: (arg: T5) => T6, fn7: (arg: T6) => T7, fn8: (arg: T7) => T8, fn9: (arg: T8) => T9, fn10: (arg: T9) => T10, fn11: (arg: T10) => T11, fn12: (arg: T11) => T12, fn13: (arg: T12) => T13, fn14: (arg: T13) => T14, fn15: (arg: T14) => T15, fn16: (arg: T15) => T16): T16
21
+ export function pipe<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17>(fn1: () => T1, fn2: (arg: T1) => T2, fn3: (arg: T2) => T3, fn4: (arg: T3) => T4, fn5: (arg: T4) => T5, fn6: (arg: T5) => T6, fn7: (arg: T6) => T7, fn8: (arg: T7) => T8, fn9: (arg: T8) => T9, fn10: (arg: T9) => T10, fn11: (arg: T10) => T11, fn12: (arg: T11) => T12, fn13: (arg: T12) => T13, fn14: (arg: T13) => T14, fn15: (arg: T14) => T15, fn16: (arg: T15) => T16, fn17: (arg: T16) => T17): T17
22
+ export function pipe<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18>(fn1: () => T1, fn2: (arg: T1) => T2, fn3: (arg: T2) => T3, fn4: (arg: T3) => T4, fn5: (arg: T4) => T5, fn6: (arg: T5) => T6, fn7: (arg: T6) => T7, fn8: (arg: T7) => T8, fn9: (arg: T8) => T9, fn10: (arg: T9) => T10, fn11: (arg: T10) => T11, fn12: (arg: T11) => T12, fn13: (arg: T12) => T13, fn14: (arg: T13) => T14, fn15: (arg: T14) => T15, fn16: (arg: T15) => T16, fn17: (arg: T16) => T17, fn18: (arg: T17) => T18): T18
23
+ export function pipe<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19>(fn1: () => T1, fn2: (arg: T1) => T2, fn3: (arg: T2) => T3, fn4: (arg: T3) => T4, fn5: (arg: T4) => T5, fn6: (arg: T5) => T6, fn7: (arg: T6) => T7, fn8: (arg: T7) => T8, fn9: (arg: T8) => T9, fn10: (arg: T9) => T10, fn11: (arg: T10) => T11, fn12: (arg: T11) => T12, fn13: (arg: T12) => T13, fn14: (arg: T13) => T14, fn15: (arg: T14) => T15, fn16: (arg: T15) => T16, fn17: (arg: T16) => T17, fn18: (arg: T17) => T18, fn19: (arg: T18) => T19): T19
24
+ export function pipe<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20>(fn1: () => T1, fn2: (arg: T1) => T2, fn3: (arg: T2) => T3, fn4: (arg: T3) => T4, fn5: (arg: T4) => T5, fn6: (arg: T5) => T6, fn7: (arg: T6) => T7, fn8: (arg: T7) => T8, fn9: (arg: T8) => T9, fn10: (arg: T9) => T10, fn11: (arg: T10) => T11, fn12: (arg: T11) => T12, fn13: (arg: T12) => T13, fn14: (arg: T13) => T14, fn15: (arg: T14) => T15, fn16: (arg: T15) => T16, fn17: (arg: T16) => T17, fn18: (arg: T17) => T18, fn19: (arg: T18) => T19, fn20: (arg: T19) => T20): T20
25
+ export function pipe(...fns: Fn[]): unknown
26
+
27
+ export function pipe(...fns: Fn[]) {
28
+ if (!isNonEmptyArray(fns)) {
29
+ return
30
+ }
31
+
32
+ let result = fns[0]()
33
+
34
+ for (let i = 1; i < fns.length; i++) {
35
+ result = fns[i]!(result)
36
+ }
37
+
38
+ return result
39
+ }
@@ -0,0 +1,59 @@
1
+ import type { Args, Fn, TimingControlled } from './types'
2
+ import { createTimerState, flushTimer, invokeTimer } from './timer-state'
3
+
4
+ export type Throttled<T extends Fn> = TimingControlled<T>
5
+
6
+ export function throttle<T extends Fn>(fn: T, wait: number): Throttled<T> {
7
+ const state = createTimerState<T>()
8
+
9
+ let lastCallTime: number | undefined
10
+
11
+ const invoke = () => {
12
+ lastCallTime = Date.now()
13
+ invokeTimer(state, fn)
14
+ }
15
+
16
+ const throttled: Throttled<T> = function (this: unknown, ...args: Args<T>) {
17
+ const now = Date.now()
18
+
19
+ state.lastArgs = args
20
+ state.lastThis = this
21
+
22
+ if (lastCallTime === undefined) {
23
+ lastCallTime = now
24
+ state.lastResult = fn.apply(this, args)
25
+
26
+ return
27
+ }
28
+
29
+ const remaining = wait - (now - lastCallTime)
30
+
31
+ if (remaining <= 0) {
32
+ if (state.timeoutId !== undefined) {
33
+ clearTimeout(state.timeoutId)
34
+ state.timeoutId = undefined
35
+ }
36
+
37
+ lastCallTime = now
38
+ state.lastResult = fn.apply(this, args)
39
+ } else {
40
+ state.timeoutId ??= setTimeout(invoke, remaining)
41
+ }
42
+ }
43
+
44
+ throttled.cancel = () => {
45
+ if (state.timeoutId !== undefined) {
46
+ clearTimeout(state.timeoutId)
47
+ state.timeoutId = undefined
48
+ }
49
+
50
+ state.lastArgs = undefined
51
+ lastCallTime = undefined
52
+ }
53
+
54
+ throttled.flush = () => {
55
+ return flushTimer(state, invoke)
56
+ }
57
+
58
+ return throttled
59
+ }
@@ -0,0 +1,33 @@
1
+ import type { Args, Fn } from './types'
2
+
3
+ export interface TimerState<T extends Fn> {
4
+ lastArgs: Args<T> | undefined
5
+ lastResult: ReturnType<T> | undefined
6
+ lastThis: unknown
7
+ timeoutId: ReturnType<typeof setTimeout> | undefined
8
+ }
9
+
10
+ export const createTimerState = <T extends Fn>(): TimerState<T> => ({
11
+ lastArgs: undefined,
12
+ lastResult: undefined,
13
+ lastThis: undefined,
14
+ timeoutId: undefined,
15
+ })
16
+
17
+ export function invokeTimer<T extends Fn>(state: TimerState<T>, fn: T) {
18
+ const args = state.lastArgs!
19
+ const thisArg = state.lastThis
20
+
21
+ state.timeoutId = undefined
22
+ state.lastArgs = undefined
23
+ state.lastResult = fn.apply(thisArg, args)
24
+ }
25
+
26
+ export function flushTimer<T extends Fn>(state: TimerState<T>, invoke: () => void) {
27
+ if (state.timeoutId !== undefined) {
28
+ clearTimeout(state.timeoutId)
29
+ invoke()
30
+ }
31
+
32
+ return state.lastResult
33
+ }
@@ -0,0 +1,8 @@
1
+ export type Fn = (...args: any[]) => any
2
+
3
+ export type Args<F extends Fn> = F extends (...args: infer A) => any ? A : never
4
+
5
+ export type TimingControlled<T extends Fn> = ((...args: Args<T>) => void) & {
6
+ cancel: () => void
7
+ flush: () => ReturnType<T> | undefined
8
+ }
package/src/index.ts ADDED
@@ -0,0 +1,16 @@
1
+ export * from './arrays'
2
+ export * from './buffers'
3
+ export * from './collections'
4
+ export * from './common'
5
+ export * from './core'
6
+ export * from './errors'
7
+ export * from './events'
8
+ export * from './functions'
9
+ export * from './json-rpc'
10
+ export * from './numbers'
11
+ export * from './objects'
12
+ export * from './promises'
13
+ export * from './serializer'
14
+ export * from './strings'
15
+ export * from './system'
16
+ export * from './times'
@@ -0,0 +1,15 @@
1
+ export enum JsonRpcErrorCode {
2
+ ParseError = -32_700,
3
+ InternalError = -32_603,
4
+ InvalidParams = -32_602,
5
+ MethodNotFound = -32_601,
6
+ InvalidRequest = -32_600,
7
+ }
8
+
9
+ export const JSON_RPC_ERROR_MESSAGES: Record<JsonRpcErrorCode, string> = {
10
+ [JsonRpcErrorCode.InternalError]: 'Internal error',
11
+ [JsonRpcErrorCode.InvalidParams]: 'Invalid params',
12
+ [JsonRpcErrorCode.InvalidRequest]: 'Invalid request',
13
+ [JsonRpcErrorCode.MethodNotFound]: 'Method not found',
14
+ [JsonRpcErrorCode.ParseError]: 'Parse error',
15
+ }
@@ -0,0 +1,22 @@
1
+ import type { JsonRpcErrorObject, JsonRpcErrorResponseMessage, JsonRpcNotifyMessage, JsonRpcRequestMessage, JsonRpcResponseId, JsonRpcSuccessResponseMessage } from './types'
2
+ import { notUndefined } from '../core'
3
+
4
+ export const createJsonRpcNotifyMessage = <TParams>(method: string, params?: TParams): JsonRpcNotifyMessage<TParams> => ({
5
+ jsonrpc: '2.0', method, ...(notUndefined(params) ? { params } : {}),
6
+ })
7
+
8
+ export const createJsonRpcRequestMessage = <TParams>(id: number | string, method: string, params?: TParams): JsonRpcRequestMessage<TParams> => ({
9
+ id, jsonrpc: '2.0', method, ...(notUndefined(params) ? { params } : {}),
10
+ })
11
+
12
+ export const createJsonRpcSuccessResponseMessage = <TResult = any>(id: JsonRpcResponseId, result: TResult): JsonRpcSuccessResponseMessage<TResult> => ({
13
+ id, jsonrpc: '2.0', result,
14
+ })
15
+
16
+ export const createJsonRpcErrorObject = <TData>(code: number, message: string, data?: TData): JsonRpcErrorObject<TData> => ({
17
+ code, message, ...(notUndefined(data) ? { data } : {}),
18
+ })
19
+
20
+ export const createJsonRpcErrorResponseMessage = <TData>(id: JsonRpcResponseId, error: JsonRpcErrorObject<TData>): JsonRpcErrorResponseMessage<TData> => ({
21
+ error, id, jsonrpc: '2.0',
22
+ })
@@ -0,0 +1,58 @@
1
+ import type { JsonRpcBatchRequest, JsonRpcBatchResponse, JsonRpcErrorObject, JsonRpcErrorResponseMessage, JsonRpcMessage, JsonRpcNotifyMessage, JsonRpcRequestMessage, JsonRpcResponseId, JsonRpcResponseMessage, JsonRpcResponseMessageWithNonNullId, JsonRpcSuccessResponseMessage } from './types'
2
+ import { isArray } from '../arrays'
3
+ import { isNull, isNumber, isString, notNullish } from '../core'
4
+ import { isKeysOf, isObject } from '../objects'
5
+
6
+ export const isJsonRpcMessage = <TParams = any, TResult = any, TErrorData = any>(message: unknown): message is JsonRpcMessage<TParams, TResult, TErrorData> => (
7
+ isObject(message) && message.jsonrpc === '2.0'
8
+ )
9
+
10
+ export const isValidJsonRpcId = (id: unknown): id is JsonRpcResponseId => isString(id) || isNumber(id) || isNull(id)
11
+
12
+ export const isJsonRpcRequestMessage = <TParams = any>(message: JsonRpcMessage): message is JsonRpcRequestMessage<TParams> => (
13
+ isKeysOf(message, 'id', 'method') && isValidJsonRpcId(message.id) && isString(message.method)
14
+ )
15
+
16
+ export const isJsonRpcNotifyMessage = <TParams = any>(message: JsonRpcMessage): message is JsonRpcNotifyMessage<TParams> => (
17
+ isKeysOf(message, 'method') && isString(message.method) && !isKeysOf(message, 'id')
18
+ )
19
+
20
+ export const isJsonRpcResponseMessage = <TResult = any, TErrorData = any>(message: JsonRpcMessage): message is JsonRpcResponseMessage<TResult, TErrorData> => (
21
+ isKeysOf(message, 'id') && isValidJsonRpcId(message.id) && !isKeysOf(message, 'method')
22
+ )
23
+
24
+ export const isJsonRpcError = <TData = any>(message: unknown): message is JsonRpcErrorObject<TData> => (
25
+ isObject(message) && isKeysOf(message, 'code', 'message')
26
+ )
27
+
28
+ export const isJsonRpcErrorResponseMessage = <TData = any>(message: JsonRpcMessage): message is JsonRpcErrorResponseMessage<TData> => (
29
+ isKeysOf(message, 'error') && isJsonRpcError(message.error)
30
+ )
31
+
32
+ export const isJsonRpcSuccessResponseMessage = <TResult = any>(message: JsonRpcMessage): message is JsonRpcSuccessResponseMessage<TResult> => (
33
+ isKeysOf(message, 'result') && !isKeysOf(message, 'error')
34
+ )
35
+
36
+ export const isJsonRpcResponseHasNonNullableId = <TResult = any, TErrorData = any>(response: JsonRpcResponseMessage): response is JsonRpcResponseMessageWithNonNullId<TResult, TErrorData> => (
37
+ notNullish(response.id)
38
+ )
39
+
40
+ export const isJsonRpcBatchRequest = <TParams = any>(value: unknown): value is JsonRpcBatchRequest<TParams> => (
41
+ isArray(value) && value.length > 0 && value.every((item) => {
42
+ if (!isJsonRpcMessage(item)) {
43
+ return false
44
+ }
45
+
46
+ return isJsonRpcRequestMessage(item) || isJsonRpcNotifyMessage(item)
47
+ })
48
+ )
49
+
50
+ export const isJsonRpcBatchResponse = <TResult = any, TErrorData = any>(value: unknown): value is JsonRpcBatchResponse<TResult, TErrorData> => (
51
+ isArray(value) && value.length > 0 && value.every((item) => {
52
+ if (!isJsonRpcMessage(item)) {
53
+ return false
54
+ }
55
+
56
+ return isJsonRpcResponseMessage(item)
57
+ })
58
+ )
@@ -0,0 +1,5 @@
1
+ export * from './constants'
2
+ export * from './factories'
3
+ export * from './guards'
4
+
5
+ export type * from './types'
@@ -0,0 +1,48 @@
1
+ export interface BaseJsonRpcMessage {
2
+ jsonrpc: '2.0'
3
+ }
4
+
5
+ export interface JsonRpcRequestMessage<TParams = any> extends BaseJsonRpcMessage {
6
+ id: number | string
7
+ method: string
8
+ params?: TParams
9
+ }
10
+
11
+ export interface JsonRpcNotifyMessage<TParams = any> extends BaseJsonRpcMessage {
12
+ method: string
13
+ params?: TParams
14
+ }
15
+
16
+ export interface JsonRpcErrorObject<TData = any> {
17
+ code: number
18
+ data?: TData
19
+ message: string
20
+ }
21
+
22
+ export type JsonRpcResponseId = number | string | null
23
+
24
+ export interface BaseJsonRpcResponseMessage extends BaseJsonRpcMessage {
25
+ id: JsonRpcResponseId
26
+ }
27
+
28
+ export interface JsonRpcSuccessResponseMessage<TResult = any> extends BaseJsonRpcResponseMessage {
29
+ result: TResult
30
+ }
31
+
32
+ export interface JsonRpcErrorResponseMessage<TData = any> extends BaseJsonRpcResponseMessage {
33
+ error: JsonRpcErrorObject<TData>
34
+ }
35
+
36
+ export type JsonRpcResponseMessage<TResult = any, TErrorData = any> = JsonRpcErrorResponseMessage<TErrorData> | JsonRpcSuccessResponseMessage<TResult>
37
+
38
+ export type JsonRpcResponseBodyWithoutId<TResult = any, TErrorData = any> = Omit<JsonRpcErrorResponseMessage<TErrorData>, 'id'> | Omit<JsonRpcSuccessResponseMessage<TResult>, 'id'>
39
+
40
+ export type JsonRpcResponseMessageWithNonNullId<TResult = any, TErrorData = any> = JsonRpcResponseBodyWithoutId<TResult, TErrorData> & {
41
+ id: NonNullable<JsonRpcResponseId>
42
+ }
43
+
44
+ export type JsonRpcMessage<TParams = any, TResult = any, TErrorData = any> = JsonRpcNotifyMessage<TParams> | JsonRpcRequestMessage<TParams> | JsonRpcResponseMessage<TResult, TErrorData>
45
+
46
+ export type JsonRpcBatchRequest<TParams = any> = Array<JsonRpcNotifyMessage<TParams> | JsonRpcRequestMessage<TParams>>
47
+
48
+ export type JsonRpcBatchResponse<TResult = any, TErrorData = any> = Array<JsonRpcResponseMessage<TResult, TErrorData>>
@@ -0,0 +1,163 @@
1
+ export const BigIntMath = {
2
+ isEven(a: bigint) {
3
+ return a % 2n === 0n
4
+ },
5
+
6
+ isOdd(a: bigint) {
7
+ return a % 2n !== 0n
8
+ },
9
+
10
+ divMod(a: bigint, b: bigint): [quotient: bigint, remainder: bigint] {
11
+ if (b === 0n) {
12
+ throw new RangeError('Division by zero')
13
+ }
14
+
15
+ return [a / b, a % b]
16
+ },
17
+
18
+ abs(a: bigint) {
19
+ return a < 0n ? -a : a
20
+ },
21
+
22
+ max(a: bigint, b: bigint) {
23
+ return a > b ? a : b
24
+ },
25
+
26
+ min(a: bigint, b: bigint) {
27
+ return a < b ? a : b
28
+ },
29
+
30
+ pow(a: bigint, b: bigint) {
31
+ return a ** b
32
+ },
33
+
34
+ sign(a: bigint) {
35
+ return a === 0n ? 0n : (a < 0n ? -1n : 1n)
36
+ },
37
+
38
+ mod(a: bigint, b: bigint) {
39
+ return ((a % b) + b) % b
40
+ },
41
+
42
+ modPow(base: bigint, exponent: bigint, modulus: bigint) {
43
+ if (exponent < 0n) {
44
+ throw new RangeError('Exponent must be non-negative')
45
+ }
46
+
47
+ if (modulus === 1n) {
48
+ return 0n
49
+ }
50
+
51
+ let result = 1n
52
+
53
+ base = BigIntMath.mod(base, modulus)
54
+
55
+ while (exponent > 0n) {
56
+ if (exponent % 2n === 1n) {
57
+ result = BigIntMath.mod(result * base, modulus)
58
+ }
59
+
60
+ exponent >>= 1n
61
+ base = BigIntMath.mod(base * base, modulus)
62
+ }
63
+
64
+ return result
65
+ },
66
+
67
+ gcd(a: bigint, b: bigint) {
68
+ a = BigIntMath.abs(a)
69
+ b = BigIntMath.abs(b)
70
+
71
+ while (b !== 0n) {
72
+ [a, b] = [b, a % b]
73
+ }
74
+
75
+ return a
76
+ },
77
+
78
+ lcm(a: bigint, b: bigint) {
79
+ return (a / BigIntMath.gcd(a, b)) * b
80
+ },
81
+
82
+ clamp(value: bigint, min: bigint, max: bigint) {
83
+ return BigIntMath.min(BigIntMath.max(value, min), max)
84
+ },
85
+
86
+ sqrt(n: bigint) {
87
+ if (n < 0n) {
88
+ throw new RangeError('Square root of negative bigint is undefined')
89
+ }
90
+
91
+ if (n < 2n) {
92
+ return n
93
+ }
94
+
95
+ let x = n
96
+ let y = (x + 1n) / 2n
97
+
98
+ while (y < x) {
99
+ x = y
100
+ y = (x + n / x) / 2n
101
+ }
102
+
103
+ return x
104
+ },
105
+
106
+ factorial(n: bigint) {
107
+ if (n < 0n) {
108
+ throw new RangeError('Factorial of negative bigint is undefined')
109
+ }
110
+
111
+ if (n === 0n) {
112
+ return 1n
113
+ }
114
+
115
+ let result = 1n
116
+
117
+ for (let i = 1n; i <= n; i++) {
118
+ result *= i
119
+ }
120
+
121
+ return result
122
+ },
123
+
124
+ sum(array: bigint[]) {
125
+ return array.reduce((a, b) => a + b, 0n)
126
+ },
127
+
128
+ avg(array: bigint[]) {
129
+ if (array.length === 0) {
130
+ return 0n
131
+ }
132
+
133
+ return BigIntMath.sum(array) / BigInt(array.length)
134
+ },
135
+
136
+ isPrime(n: bigint) {
137
+ if (n < 2n) {
138
+ return false
139
+ }
140
+
141
+ if (n < 4n) {
142
+ return true
143
+ }
144
+
145
+ if (n % 2n === 0n || n % 3n === 0n) {
146
+ return false
147
+ }
148
+
149
+ const limit = BigIntMath.sqrt(n)
150
+
151
+ for (let i = 5n; i <= limit; i += 6n) {
152
+ if (n % i === 0n || n % (i + 2n) === 0n) {
153
+ return false
154
+ }
155
+ }
156
+
157
+ return true
158
+ },
159
+
160
+ compare(a: bigint, b: bigint) {
161
+ return a === b ? 0 : (a < b ? -1 : 1)
162
+ },
163
+ }
@@ -0,0 +1,14 @@
1
+ export const SPECIAL_NUMBER_STRINGS = new Set(['+Infinity', '-Infinity', 'Infinity', 'NaN'])
2
+
3
+ export const SUBSCRIPT_CHARS: Record<string, string> = {
4
+ 0: '\u2080',
5
+ 1: '\u2081',
6
+ 2: '\u2082',
7
+ 3: '\u2083',
8
+ 4: '\u2084',
9
+ 5: '\u2085',
10
+ 6: '\u2086',
11
+ 7: '\u2087',
12
+ 8: '\u2088',
13
+ 9: '\u2089',
14
+ }