@rzl-zone/utils-js 3.11.1 โ†’ 3.12.1-beta.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 (286) hide show
  1. package/{LICENSE.md โ†’ LICENSE} +3 -3
  2. package/README.md +62 -89
  3. package/dist/.references/index.d.cts +25 -0
  4. package/dist/.references/index.d.ts +25 -0
  5. package/dist/assertIsArray-BChqwPiP.cjs +26 -0
  6. package/dist/assertIsArray-BChqwPiP.cjs.map +1 -0
  7. package/dist/assertIsArray-BfAbIUfa.js +20 -0
  8. package/dist/assertIsArray-BfAbIUfa.js.map +1 -0
  9. package/dist/assertIsBoolean-BlBct0Fc.js +1073 -0
  10. package/dist/assertIsBoolean-BlBct0Fc.js.map +1 -0
  11. package/dist/assertIsBoolean-DozdtbNi.cjs +1283 -0
  12. package/dist/assertIsBoolean-DozdtbNi.cjs.map +1 -0
  13. package/dist/assertIsString-Bvk7bUL7.cjs +26 -0
  14. package/dist/assertIsString-Bvk7bUL7.cjs.map +1 -0
  15. package/dist/assertIsString-DqV9NwbI.js +20 -0
  16. package/dist/assertIsString-DqV9NwbI.js.map +1 -0
  17. package/dist/assertions/index.cjs +37 -40
  18. package/dist/assertions/index.cjs.map +1 -0
  19. package/dist/assertions/index.d.cts +12 -0
  20. package/dist/assertions/index.d.ts +10 -824
  21. package/dist/assertions/index.js +30 -13
  22. package/dist/assertions/index.js.map +1 -0
  23. package/dist/conversions/index.cjs +34 -103
  24. package/dist/conversions/index.d.cts +12 -0
  25. package/dist/conversions/index.d.ts +10 -1791
  26. package/dist/conversions/index.js +14 -24
  27. package/dist/conversions-CBs8-REq.cjs +448 -0
  28. package/dist/conversions-CBs8-REq.cjs.map +1 -0
  29. package/dist/conversions-EMJa3g-D.js +382 -0
  30. package/dist/conversions-EMJa3g-D.js.map +1 -0
  31. package/dist/events/index.cjs +55 -31
  32. package/dist/events/index.cjs.map +1 -0
  33. package/dist/events/index.d.cts +174 -0
  34. package/dist/events/index.d.ts +31 -35
  35. package/dist/events/index.js +50 -12
  36. package/dist/events/index.js.map +1 -0
  37. package/dist/formatEnvPort-DpIXzPAZ.js +159 -0
  38. package/dist/formatEnvPort-DpIXzPAZ.js.map +1 -0
  39. package/dist/formatEnvPort-hHNvOim-.cjs +171 -0
  40. package/dist/formatEnvPort-hHNvOim-.cjs.map +1 -0
  41. package/dist/formatters/index.cjs +21 -61
  42. package/dist/formatters/index.d.cts +12 -0
  43. package/dist/formatters/index.d.ts +10 -2152
  44. package/dist/formatters/index.js +10 -18
  45. package/dist/formatters-QcZO_Cpx.js +367 -0
  46. package/dist/formatters-QcZO_Cpx.js.map +1 -0
  47. package/dist/formatters-lAYgA11L.cjs +427 -0
  48. package/dist/formatters-lAYgA11L.cjs.map +1 -0
  49. package/dist/generators/index.cjs +161 -41
  50. package/dist/generators/index.cjs.map +1 -0
  51. package/dist/generators/index.d.cts +12 -0
  52. package/dist/generators/index.d.ts +10 -338
  53. package/dist/generators/index.js +154 -14
  54. package/dist/generators/index.js.map +1 -0
  55. package/dist/index-26W7ItWx.d.ts +760 -0
  56. package/dist/index-BPPQjAfs.d.cts +2359 -0
  57. package/dist/index-BXjlgBLz.d.cts +2139 -0
  58. package/dist/index-B_Wwo91H.d.ts +2359 -0
  59. package/dist/index-CpufydcI.d.cts +704 -0
  60. package/dist/index-Czc4O526.d.ts +333 -0
  61. package/dist/index-DPs1_p5G.d.cts +760 -0
  62. package/dist/index-DRpOyBSC.d.ts +1703 -0
  63. package/dist/index-DWWvtHUn.d.cts +822 -0
  64. package/dist/index-DnM0LD0n.d.cts +333 -0
  65. package/dist/index-GUZ9fK6T.d.ts +2139 -0
  66. package/dist/index-I4fAzwXV.d.ts +704 -0
  67. package/dist/index-JDrOl_19.d.ts +822 -0
  68. package/dist/index-b66P49Qe.d.cts +1703 -0
  69. package/dist/isBigInt-B1cijjqm.cjs +20 -0
  70. package/dist/isBigInt-B1cijjqm.cjs.map +1 -0
  71. package/dist/isBigInt-C0bN0Rhu.js +14 -0
  72. package/dist/isBigInt-C0bN0Rhu.js.map +1 -0
  73. package/dist/isEmptyObject-DI42NEo0.cjs +37 -0
  74. package/dist/isEmptyObject-DI42NEo0.cjs.map +1 -0
  75. package/dist/isEmptyObject-DeLVIJpl.js +25 -0
  76. package/dist/isEmptyObject-DeLVIJpl.js.map +1 -0
  77. package/dist/isEmptyString-BTUWYTbw.js +15 -0
  78. package/dist/isEmptyString-BTUWYTbw.js.map +1 -0
  79. package/dist/isEmptyString-CCK3bP74.cjs +21 -0
  80. package/dist/isEmptyString-CCK3bP74.cjs.map +1 -0
  81. package/dist/isEmptyValue-DMSMFTU8.cjs +30 -0
  82. package/dist/isEmptyValue-DMSMFTU8.cjs.map +1 -0
  83. package/dist/isEmptyValue-fjnfQnt5.js +24 -0
  84. package/dist/isEmptyValue-fjnfQnt5.js.map +1 -0
  85. package/dist/isEqual-B1fRgEuU.cjs +111 -0
  86. package/dist/isEqual-B1fRgEuU.cjs.map +1 -0
  87. package/dist/isEqual-DhyP8fB_.js +87 -0
  88. package/dist/isEqual-DhyP8fB_.js.map +1 -0
  89. package/dist/isFinite-BYMOo0os.js +15 -0
  90. package/dist/isFinite-BYMOo0os.js.map +1 -0
  91. package/dist/isFinite-sFkps2TY.cjs +21 -0
  92. package/dist/isFinite-sFkps2TY.cjs.map +1 -0
  93. package/dist/isInteger-DS9V7l_f.js +14 -0
  94. package/dist/isInteger-DS9V7l_f.js.map +1 -0
  95. package/dist/isInteger-FTCthMre.cjs +20 -0
  96. package/dist/isInteger-FTCthMre.cjs.map +1 -0
  97. package/dist/isPlainObject-DcFGh3_5.d.ts +530 -0
  98. package/dist/isPlainObject-doTI11Ib.d.cts +530 -0
  99. package/dist/isServer-D1TXfOs3.js +14 -0
  100. package/dist/isServer-D1TXfOs3.js.map +1 -0
  101. package/dist/isServer-q-QLFCqE.cjs +20 -0
  102. package/dist/isServer-q-QLFCqE.cjs.map +1 -0
  103. package/dist/isTypedArray-47R0wdrc.js +31 -0
  104. package/dist/isTypedArray-47R0wdrc.js.map +1 -0
  105. package/dist/isTypedArray-DiCoqffZ.cjs +43 -0
  106. package/dist/isTypedArray-DiCoqffZ.cjs.map +1 -0
  107. package/dist/isURL-CQiowFq2.js +14 -0
  108. package/dist/isURL-CQiowFq2.js.map +1 -0
  109. package/dist/isURL-WZypXsax.cjs +20 -0
  110. package/dist/isURL-WZypXsax.cjs.map +1 -0
  111. package/dist/isValidDomain-BSXshgkC.cjs +1788 -0
  112. package/dist/isValidDomain-BSXshgkC.cjs.map +1 -0
  113. package/dist/isValidDomain-DwA2EN79.js +1782 -0
  114. package/dist/isValidDomain-DwA2EN79.js.map +1 -0
  115. package/dist/next/index.cjs +119 -212
  116. package/dist/next/index.cjs.map +1 -0
  117. package/dist/next/index.d.cts +226 -0
  118. package/dist/next/index.d.ts +26 -31
  119. package/dist/next/index.js +117 -210
  120. package/dist/next/index.js.map +1 -0
  121. package/dist/next/server/index.cjs +25 -40
  122. package/dist/next/server/index.cjs.map +1 -0
  123. package/dist/next/server/index.d.cts +39 -0
  124. package/dist/next/server/index.d.ts +9 -10
  125. package/dist/next/server/index.js +23 -38
  126. package/dist/next/server/index.js.map +1 -0
  127. package/dist/noop-B2mTBhW-.cjs +18 -0
  128. package/dist/noop-B2mTBhW-.cjs.map +1 -0
  129. package/dist/noop-BzktGBVz.js +12 -0
  130. package/dist/noop-BzktGBVz.js.map +1 -0
  131. package/dist/normalizeSpaces-DQHR3Tlr.cjs +29 -0
  132. package/dist/normalizeSpaces-DQHR3Tlr.cjs.map +1 -0
  133. package/dist/normalizeSpaces-WS_iERJk.js +23 -0
  134. package/dist/normalizeSpaces-WS_iERJk.js.map +1 -0
  135. package/dist/normalizeString-2WLth_Gj.js +15 -0
  136. package/dist/normalizeString-2WLth_Gj.js.map +1 -0
  137. package/dist/normalizeString-D8euBcRD.cjs +21 -0
  138. package/dist/normalizeString-D8euBcRD.cjs.map +1 -0
  139. package/dist/operations/index.cjs +65 -32
  140. package/dist/operations/index.cjs.map +1 -0
  141. package/dist/operations/index.d.cts +139 -0
  142. package/dist/operations/index.d.ts +10 -15
  143. package/dist/operations/index.js +61 -17
  144. package/dist/operations/index.js.map +1 -0
  145. package/dist/parsers/index.cjs +12 -19
  146. package/dist/parsers/index.d.cts +239 -0
  147. package/dist/parsers/index.d.ts +71 -72
  148. package/dist/parsers/index.js +10 -12
  149. package/dist/parsers-DXtpsDyj.cjs +649 -0
  150. package/dist/parsers-DXtpsDyj.cjs.map +1 -0
  151. package/dist/parsers-Dpuq-V4u.js +643 -0
  152. package/dist/parsers-Dpuq-V4u.js.map +1 -0
  153. package/dist/parsing-B43x1sxn.js +50 -0
  154. package/dist/parsing-B43x1sxn.js.map +1 -0
  155. package/dist/parsing-lRoxn1Nz.cjs +56 -0
  156. package/dist/parsing-lRoxn1Nz.cjs.map +1 -0
  157. package/dist/predicates/index.cjs +91 -296
  158. package/dist/predicates/index.d.cts +13 -0
  159. package/dist/predicates/index.d.ts +12 -2482
  160. package/dist/predicates/index.js +23 -25
  161. package/dist/predicates-DiaYA7Ps.cjs +413 -0
  162. package/dist/predicates-DiaYA7Ps.cjs.map +1 -0
  163. package/dist/predicates-gNepszvo.js +257 -0
  164. package/dist/predicates-gNepszvo.js.map +1 -0
  165. package/dist/promises/index.cjs +76 -24
  166. package/dist/promises/index.cjs.map +1 -0
  167. package/dist/promises/index.d.cts +123 -0
  168. package/dist/promises/index.d.ts +28 -31
  169. package/dist/promises/index.js +73 -13
  170. package/dist/promises/index.js.map +1 -0
  171. package/dist/punyCode-CTWXVVFo.cjs +185 -0
  172. package/dist/punyCode-CTWXVVFo.cjs.map +1 -0
  173. package/dist/punyCode-hmiFzLWT.js +179 -0
  174. package/dist/punyCode-hmiFzLWT.js.map +1 -0
  175. package/dist/removeSpaces-BE8lfh-4.js +19 -0
  176. package/dist/removeSpaces-BE8lfh-4.js.map +1 -0
  177. package/dist/removeSpaces-DRRxNWlb.cjs +25 -0
  178. package/dist/removeSpaces-DRRxNWlb.cjs.map +1 -0
  179. package/dist/safeJsonParse-BBnQElk8.cjs +208 -0
  180. package/dist/safeJsonParse-BBnQElk8.cjs.map +1 -0
  181. package/dist/safeJsonParse-CXruaP0p.js +184 -0
  182. package/dist/safeJsonParse-CXruaP0p.js.map +1 -0
  183. package/dist/safeStableStringify-BNh3D0K0.js +88 -0
  184. package/dist/safeStableStringify-BNh3D0K0.js.map +1 -0
  185. package/dist/safeStableStringify-Cc62pfRp.cjs +106 -0
  186. package/dist/safeStableStringify-Cc62pfRp.cjs.map +1 -0
  187. package/dist/strings/index.cjs +76 -81
  188. package/dist/strings/index.cjs.map +1 -0
  189. package/dist/strings/index.d.cts +12 -0
  190. package/dist/strings/index.d.ts +10 -775
  191. package/dist/strings/index.js +59 -14
  192. package/dist/strings/index.js.map +1 -0
  193. package/dist/tailwind/index.cjs +19 -47
  194. package/dist/tailwind/index.d.cts +12 -0
  195. package/dist/tailwind/index.d.ts +11 -712
  196. package/dist/tailwind/index.js +10 -12
  197. package/dist/tailwind-DJ4cmLUw.cjs +247 -0
  198. package/dist/tailwind-DJ4cmLUw.cjs.map +1 -0
  199. package/dist/tailwind-IJvOdkZp.js +199 -0
  200. package/dist/tailwind-IJvOdkZp.js.map +1 -0
  201. package/dist/toStringArrayUnRecursive-CFs0jTEg.js +39 -0
  202. package/dist/toStringArrayUnRecursive-CFs0jTEg.js.map +1 -0
  203. package/dist/toStringArrayUnRecursive-xUaU8Ot9.cjs +51 -0
  204. package/dist/toStringArrayUnRecursive-xUaU8Ot9.cjs.map +1 -0
  205. package/dist/urls/index.cjs +129 -57
  206. package/dist/urls/index.cjs.map +1 -0
  207. package/dist/urls/index.d.cts +740 -0
  208. package/dist/urls/index.d.ts +218 -224
  209. package/dist/urls/index.js +121 -26
  210. package/dist/urls/index.js.map +1 -0
  211. package/package.json +203 -194
  212. package/dist/chunk-22V4WP3H.js +0 -53
  213. package/dist/chunk-2XSZ2ANI.js +0 -63
  214. package/dist/chunk-3T6VSWYX.js +0 -21
  215. package/dist/chunk-5WIEDF2J.js +0 -1823
  216. package/dist/chunk-6EDFZJZ5.cjs +0 -598
  217. package/dist/chunk-6LXWT2I5.js +0 -32
  218. package/dist/chunk-6YGBRENU.js +0 -209
  219. package/dist/chunk-7FGNVDEV.cjs +0 -38
  220. package/dist/chunk-AXDYWO67.js +0 -119
  221. package/dist/chunk-B6PMNZ4M.cjs +0 -35
  222. package/dist/chunk-BAV5T2E3.cjs +0 -15
  223. package/dist/chunk-BLF7SD66.js +0 -95
  224. package/dist/chunk-BMZZXZJ2.cjs +0 -30
  225. package/dist/chunk-BOYP3ARU.js +0 -264
  226. package/dist/chunk-BPYW5YL7.js +0 -16
  227. package/dist/chunk-C2PV3VWC.cjs +0 -118
  228. package/dist/chunk-CCJ2MSN7.js +0 -16
  229. package/dist/chunk-DAPAK2W3.cjs +0 -123
  230. package/dist/chunk-DLS3G6WQ.cjs +0 -23
  231. package/dist/chunk-DNMCR5JH.js +0 -370
  232. package/dist/chunk-DVMHRLKP.cjs +0 -16
  233. package/dist/chunk-EBYFYZW4.cjs +0 -26
  234. package/dist/chunk-ENMRZ4BE.js +0 -302
  235. package/dist/chunk-FJ4BQFVO.js +0 -587
  236. package/dist/chunk-GIKL4PUF.cjs +0 -106
  237. package/dist/chunk-GOFINGT6.js +0 -35
  238. package/dist/chunk-GXKQ3LHF.js +0 -101
  239. package/dist/chunk-HNBRGN4R.js +0 -24
  240. package/dist/chunk-HYN6FC5A.cjs +0 -249
  241. package/dist/chunk-IZGVBYFN.js +0 -242
  242. package/dist/chunk-JIE447J5.js +0 -676
  243. package/dist/chunk-JXEIJM5M.cjs +0 -237
  244. package/dist/chunk-K47GZDBH.js +0 -115
  245. package/dist/chunk-K5536YHG.cjs +0 -269
  246. package/dist/chunk-KHO2SBNA.cjs +0 -16
  247. package/dist/chunk-KXJ7X325.cjs +0 -308
  248. package/dist/chunk-L5RDAVVH.js +0 -14
  249. package/dist/chunk-LJHPTLWB.js +0 -109
  250. package/dist/chunk-M7ELWZXM.cjs +0 -1825
  251. package/dist/chunk-MSUW5VHZ.js +0 -1590
  252. package/dist/chunk-MUHRPRR7.cjs +0 -65
  253. package/dist/chunk-MV3TSQSH.cjs +0 -397
  254. package/dist/chunk-NLZLXWAU.cjs +0 -678
  255. package/dist/chunk-NVRZPF5M.cjs +0 -18
  256. package/dist/chunk-ONZFBJVW.js +0 -14
  257. package/dist/chunk-PGNL7JXO.cjs +0 -251
  258. package/dist/chunk-Q4GEQS7X.cjs +0 -564
  259. package/dist/chunk-QNKGP5DY.js +0 -14
  260. package/dist/chunk-QYI2VJLS.cjs +0 -211
  261. package/dist/chunk-RBWZII5I.js +0 -59
  262. package/dist/chunk-RMP7VMPB.cjs +0 -33
  263. package/dist/chunk-RZOGBYIS.js +0 -21
  264. package/dist/chunk-SU3UELUB.cjs +0 -36
  265. package/dist/chunk-SYHPSOUU.cjs +0 -1626
  266. package/dist/chunk-SZUNAEMR.js +0 -246
  267. package/dist/chunk-TER22LO4.cjs +0 -64
  268. package/dist/chunk-TJHGRQ4P.js +0 -33
  269. package/dist/chunk-U23I7JPB.cjs +0 -56
  270. package/dist/chunk-U7HHN47R.js +0 -552
  271. package/dist/chunk-UDA26MCU.cjs +0 -16
  272. package/dist/chunk-UIAWUZ4H.js +0 -31
  273. package/dist/chunk-ULQPCIA2.js +0 -16
  274. package/dist/chunk-VJDDGRIK.cjs +0 -16
  275. package/dist/chunk-WETQI6HM.js +0 -232
  276. package/dist/chunk-WLOQQFDS.cjs +0 -18
  277. package/dist/chunk-WVSPXFTY.js +0 -14
  278. package/dist/chunk-WXFTVXBF.cjs +0 -23
  279. package/dist/chunk-XPVTIGU2.cjs +0 -113
  280. package/dist/chunk-XX6RUGTM.cjs +0 -18
  281. package/dist/chunk-YWHHVDT4.js +0 -13
  282. package/dist/chunk-ZPDMWDGZ.cjs +0 -101
  283. package/dist/chunk-ZVWZEGQP.js +0 -28
  284. package/dist/index.d.ts +0 -24
  285. package/dist/isPlainObject-0p3VveWr.d.ts +0 -534
  286. package/dist/rzl-utils.global.js +0 -10
@@ -0,0 +1,123 @@
1
+ /*!
2
+ * ========================================================================
3
+ * @rzl-zone/utils-js
4
+ * ------------------------------------------------------------------------
5
+ * Version: `3.12.1-beta.0`
6
+ * Author: `Rizalvin Dwiky <rizalvindwiky@gmail.com>`
7
+ * Repository: `https://github.com/rzl-zone/rzl-zone/tree/main/packages/utils-js`
8
+ * ========================================================================
9
+ */
10
+
11
+ import { CustomPromiseType } from "@rzl-zone/ts-types-plus";
12
+ /** -------------------------------------------------------------
13
+ * * ***Utility Class: `CustomPromise`.***
14
+ * -------------------------------------------------------------
15
+ * **A strongly typed extension of the native {@link Promise | **`Promise`**}.**
16
+ * 1. **Behaves exactly like a normal Promise** for `then`/`catch`
17
+ * and `await` semantics.
18
+ * 2. **Stores the final resolution or rejection internally** so
19
+ * it can be retrieved by a custom `finish` handler.
20
+ * 3. **Adds a `finish` method** which runs once after settlement
21
+ * with access to both the fulfilled value *and* the rejection
22
+ * reason (only one will be defined).
23
+ * - **Key Differences from a Native `Promise`:**
24
+ * - Every call to `then`/`catch` returns **`CustomPromise`**
25
+ * again, so the `finish` method remains available on the
26
+ * entire chain.
27
+ * - `finish` provides a tuple-like callback:
28
+ * - `val` โ†’ defined when fulfilled.
29
+ * - `err` โ†’ defined when rejected.
30
+ * @template Success Type of the resolved value.
31
+ * @template Error Type of the rejection reason (default `unknown`).
32
+ * @example
33
+ * ```ts
34
+ * import { CustomPromise, type CustomPromiseType } from "@rzl-zone/utils-js/promises";
35
+ *
36
+ * type User = { id: number; name: string };
37
+ * type ApiError = { message: string };
38
+ *
39
+ * function fetchUser(): CustomPromiseType<User, ApiError> {
40
+ * return new CustomPromise<User, ApiError>((resolve, reject) => {
41
+ * setTimeout(
42
+ * () =>
43
+ * void (Math.random() > 0.5
44
+ * ? resolve({ id: 1, name: "Alice" })
45
+ * : reject({ message: "Random failure" })),
46
+ * 500
47
+ * );
48
+ * });
49
+ * }
50
+ *
51
+ * fetchUser()
52
+ * .then(user => {
53
+ * console.log("SUCCESS:", user);
54
+ * return user;
55
+ * })
56
+ * .catch(err => {
57
+ * console.error("ERROR:", err);
58
+ * throw err;
59
+ * })
60
+ * .finish((val, err) => {
61
+ * // Runs once after settle, regardless of outcome
62
+ * console.log("FINISH:", { val, err });
63
+ * });
64
+ * ```
65
+ * ---
66
+ * - **Implementation Notes:**
67
+ * - Uses `Object.setPrototypeOf` to preserve the prototype chain
68
+ * for environments targeting ES5 or when subclassing Promise.
69
+ * - Internal `_value` and `_error` are updated as soon as the
70
+ * executor resolves or rejects, guaranteeing `finish` receives
71
+ * the final state even when added after settlement.
72
+ */
73
+ declare class CustomPromise<Success, Error = unknown> extends Promise<Success> implements CustomPromiseType<Success, Error> {
74
+ private _value?;
75
+ private _error?;
76
+ private _finish;
77
+ constructor(executor: (resolve: (v: Success) => void, reject: (e: Error) => void) => void);
78
+ then<TResult1 = Success, TResult2 = never>(onfulfilled?: ((value: Success) => TResult1 | PromiseLike<TResult1>) | null, onrejected?: ((reason: Error) => TResult2 | PromiseLike<TResult2>) | null): CustomPromise<TResult1 | TResult2, Error>;
79
+ catch<TResult = never>(onrejected?: ((reason: Error) => TResult | PromiseLike<TResult>) | null): CustomPromise<Success | TResult, Error>;
80
+ /**
81
+ * Registers a callback to be invoked **exactly once** when the
82
+ * promise settles, with access to both the resolved value and
83
+ * the rejection reason.
84
+ *
85
+ * If the promise is already settled when `finish` is called,
86
+ * the callback executes immediately on the same tick.
87
+ *
88
+ * @param cb Callback receiving the final `(value, error)`.
89
+ * @returns `this` for fluent chaining.
90
+ */
91
+ finish(cb: (val?: Success, err?: Error) => void): this;
92
+ }
93
+ /** ------------------------------------------------------------
94
+ * * ***Utility: `delay`.***
95
+ * ------------------------------------------------------------
96
+ * **Creates a Promise-based delay that resolves after a given number
97
+ * of milliseconds, optionally supports cancellation with `AbortSignal`.**
98
+ * - **Behavior:**
99
+ * - Validates `milliSeconds` is a non-zero, non-negative integer.
100
+ * - Validates `signal` is an `AbortSignal` instance when provided.
101
+ * - Cleans up event listeners and timers properly.
102
+ * @param {number} [milliSeconds=1000]
103
+ * The duration of the delay in milliseconds, default is `1000`.
104
+ * @param {AbortSignal} [signal]
105
+ * An optional `AbortSignal` that can cancel the delay.
106
+ * @returns {Promise<void>}
107
+ * A promise that resolves after the specified delay or
108
+ * rejects with an `AbortError` if aborted.
109
+ * @throws **{@link TypeError | `TypeError`}** while validates `milliSeconds` and `signal`:
110
+ * - If `milliSeconds` **is not a valid** an `integer-number`, `NaN`, `negative-number`, or `โ‰ค 0`.
111
+ * - If `signal` **is not a valid** an`AbortSignal`.
112
+ * @throws **{@link DOMException | `DOMException`}** if the delay is aborted using the signal, rejects with `AbortError`.
113
+ * @example
114
+ * // Waits for 2 seconds
115
+ * await delay(2000);
116
+ *
117
+ * // Delay with AbortSignal
118
+ * const controller = new AbortController();
119
+ * delay(5000, controller.signal).catch(err => console.log(err.name)); // "AbortError"
120
+ * controller.abort();
121
+ */
122
+ declare const delay: (milliSeconds?: number, signal?: AbortSignal) => Promise<void>;
123
+ export { CustomPromise, type CustomPromiseType, delay };
@@ -1,15 +1,14 @@
1
1
  /*!
2
- * ====================================================
3
- * Rzl Utils-JS.
4
- * ----------------------------------------------------
5
- * Version: 3.11.1.
6
- * Author: Rizalvin Dwiky.
7
- * Repository: https://github.com/rzl-zone/utils-js.
8
- * ====================================================
9
- */
10
- import { CustomPromiseType } from '@rzl-zone/ts-types-plus';
11
- export { CustomPromiseType } from '@rzl-zone/ts-types-plus';
2
+ * ========================================================================
3
+ * @rzl-zone/utils-js
4
+ * ------------------------------------------------------------------------
5
+ * Version: `3.12.1-beta.0`
6
+ * Author: `Rizalvin Dwiky <rizalvindwiky@gmail.com>`
7
+ * Repository: `https://github.com/rzl-zone/rzl-zone/tree/main/packages/utils-js`
8
+ * ========================================================================
9
+ */
12
10
 
11
+ import { CustomPromiseType } from "@rzl-zone/ts-types-plus";
13
12
  /** -------------------------------------------------------------
14
13
  * * ***Utility Class: `CustomPromise`.***
15
14
  * -------------------------------------------------------------
@@ -72,26 +71,25 @@ export { CustomPromiseType } from '@rzl-zone/ts-types-plus';
72
71
  * the final state even when added after settlement.
73
72
  */
74
73
  declare class CustomPromise<Success, Error = unknown> extends Promise<Success> implements CustomPromiseType<Success, Error> {
75
- private _value?;
76
- private _error?;
77
- private _finish;
78
- constructor(executor: (resolve: (v: Success) => void, reject: (e: Error) => void) => void);
79
- then<TResult1 = Success, TResult2 = never>(onfulfilled?: ((value: Success) => TResult1 | PromiseLike<TResult1>) | null, onrejected?: ((reason: Error) => TResult2 | PromiseLike<TResult2>) | null): CustomPromise<TResult1 | TResult2, Error>;
80
- catch<TResult = never>(onrejected?: ((reason: Error) => TResult | PromiseLike<TResult>) | null): CustomPromise<Success | TResult, Error>;
81
- /**
82
- * Registers a callback to be invoked **exactly once** when the
83
- * promise settles, with access to both the resolved value and
84
- * the rejection reason.
85
- *
86
- * If the promise is already settled when `finish` is called,
87
- * the callback executes immediately on the same tick.
88
- *
89
- * @param cb Callback receiving the final `(value, error)`.
90
- * @returns `this` for fluent chaining.
91
- */
92
- finish(cb: (val?: Success, err?: Error) => void): this;
74
+ private _value?;
75
+ private _error?;
76
+ private _finish;
77
+ constructor(executor: (resolve: (v: Success) => void, reject: (e: Error) => void) => void);
78
+ then<TResult1 = Success, TResult2 = never>(onfulfilled?: ((value: Success) => TResult1 | PromiseLike<TResult1>) | null, onrejected?: ((reason: Error) => TResult2 | PromiseLike<TResult2>) | null): CustomPromise<TResult1 | TResult2, Error>;
79
+ catch<TResult = never>(onrejected?: ((reason: Error) => TResult | PromiseLike<TResult>) | null): CustomPromise<Success | TResult, Error>;
80
+ /**
81
+ * Registers a callback to be invoked **exactly once** when the
82
+ * promise settles, with access to both the resolved value and
83
+ * the rejection reason.
84
+ *
85
+ * If the promise is already settled when `finish` is called,
86
+ * the callback executes immediately on the same tick.
87
+ *
88
+ * @param cb Callback receiving the final `(value, error)`.
89
+ * @returns `this` for fluent chaining.
90
+ */
91
+ finish(cb: (val?: Success, err?: Error) => void): this;
93
92
  }
94
-
95
93
  /** ------------------------------------------------------------
96
94
  * * ***Utility: `delay`.***
97
95
  * ------------------------------------------------------------
@@ -122,5 +120,4 @@ declare class CustomPromise<Success, Error = unknown> extends Promise<Success> i
122
120
  * controller.abort();
123
121
  */
124
122
  declare const delay: (milliSeconds?: number, signal?: AbortSignal) => Promise<void>;
125
-
126
- export { CustomPromise, delay };
123
+ export { CustomPromise, type CustomPromiseType, delay };
@@ -1,14 +1,74 @@
1
1
  /*!
2
- * ====================================================
3
- * Rzl Utils-JS.
4
- * ----------------------------------------------------
5
- * Version: 3.11.1.
6
- * Author: Rizalvin Dwiky.
7
- * Repository: https://github.com/rzl-zone/utils-js.
8
- * ====================================================
9
- */
10
- export { CustomPromise, delay } from '../chunk-K47GZDBH.js';
11
- import '../chunk-WVSPXFTY.js';
12
- import '../chunk-AXDYWO67.js';
13
- import '../chunk-QNKGP5DY.js';
14
- import '../chunk-MSUW5VHZ.js';
2
+ * ========================================================================
3
+ * @rzl-zone/utils-js
4
+ * ------------------------------------------------------------------------
5
+ * Version: `3.12.1-beta.0`
6
+ * Author: `Rizalvin Dwiky <rizalvindwiky@gmail.com>`
7
+ * Repository: `https://github.com/rzl-zone/rzl-zone/tree/main/packages/utils-js`
8
+ * ========================================================================
9
+ */
10
+ import { E as isNull, r as getPreciseType } from "../assertIsBoolean-BlBct0Fc.js";
11
+ import { t as safeStableStringify } from "../safeStableStringify-BNh3D0K0.js";
12
+ import { t as isInteger } from "../isInteger-DS9V7l_f.js";
13
+ var CustomPromise = class extends Promise {
14
+ _value;
15
+ _error;
16
+ _finish = [];
17
+ constructor(executor) {
18
+ let resolveOuter;
19
+ let rejectOuter;
20
+ super((resolve, reject) => {
21
+ resolveOuter = resolve;
22
+ rejectOuter = reject;
23
+ });
24
+ executor((v) => {
25
+ this._value = v;
26
+ resolveOuter(v);
27
+ this._finish.forEach((f) => f(v, void 0));
28
+ }, (e) => {
29
+ this._error = e;
30
+ rejectOuter(e);
31
+ this._finish.forEach((f) => f(void 0, e));
32
+ });
33
+ Object.setPrototypeOf(this, new.target.prototype);
34
+ }
35
+ then(onfulfilled, onrejected) {
36
+ return super.then(onfulfilled, onrejected);
37
+ }
38
+ catch(onrejected) {
39
+ return super.catch(onrejected);
40
+ }
41
+ finish(cb) {
42
+ if (this._value !== void 0 || this._error !== void 0) cb(this._value, this._error);
43
+ else this._finish.push(cb);
44
+ return this;
45
+ }
46
+ };
47
+ var AbortError = class extends Error {
48
+ constructor(message = "The operation was aborted", name = "AbortError") {
49
+ super(message);
50
+ this.name = name;
51
+ }
52
+ };
53
+ const delay = (milliSeconds = 1e3, signal) => {
54
+ if (!isInteger(milliSeconds) || milliSeconds <= 0) throw new TypeError(`First parameter (\`milliSeconds\`) must be of type \`number\` and value must be a \`non-zero\`, \`non-NaN\`, \`non-negative\`, and \`integer-number\`, but received: \`${getPreciseType(milliSeconds)}\`, with value: \`${safeStableStringify(milliSeconds, { keepUndefined: true })}\`.`);
55
+ if (isNull(signal) || signal && !(signal instanceof AbortSignal)) throw new TypeError("Second parameter (`signal`) must be an `instance of AbortSignal` if provided.");
56
+ return new Promise((resolve, reject) => {
57
+ const timer = setTimeout(() => {
58
+ cleanup();
59
+ resolve();
60
+ }, milliSeconds);
61
+ const cleanup = () => {
62
+ clearTimeout(timer);
63
+ if (signal) signal.removeEventListener("abort", onAbort);
64
+ };
65
+ const onAbort = () => {
66
+ cleanup();
67
+ reject(new AbortError("Function `delay` from `@rzl-zone/utils-js` was aborted.", "AbortError"));
68
+ };
69
+ if (signal) if (signal.aborted) onAbort();
70
+ else signal.addEventListener("abort", onAbort, { once: true });
71
+ });
72
+ };
73
+ export { CustomPromise, delay };
74
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/promises/CustomPromise.ts","../../src/promises/delay.ts"],"sourcesContent":["import type { CustomPromiseType } from \"@rzl-zone/ts-types-plus\";\n\nexport type { CustomPromiseType };\n\n/** -------------------------------------------------------------\n * * ***Utility Class: `CustomPromise`.***\n * -------------------------------------------------------------\n * **A strongly typed extension of the native {@link Promise | **`Promise`**}.**\n * 1. **Behaves exactly like a normal Promise** for `then`/`catch`\n * and `await` semantics.\n * 2. **Stores the final resolution or rejection internally** so\n * it can be retrieved by a custom `finish` handler.\n * 3. **Adds a `finish` method** which runs once after settlement\n * with access to both the fulfilled value *and* the rejection\n * reason (only one will be defined).\n * - **Key Differences from a Native `Promise`:**\n * - Every call to `then`/`catch` returns **`CustomPromise`**\n * again, so the `finish` method remains available on the\n * entire chain.\n * - `finish` provides a tuple-like callback:\n * - `val` โ†’ defined when fulfilled.\n * - `err` โ†’ defined when rejected.\n * @template Success Type of the resolved value.\n * @template Error Type of the rejection reason (default `unknown`).\n * @example\n * ```ts\n * import { CustomPromise, type CustomPromiseType } from \"@rzl-zone/utils-js/promises\";\n *\n * type User = { id: number; name: string };\n * type ApiError = { message: string };\n *\n * function fetchUser(): CustomPromiseType<User, ApiError> {\n * return new CustomPromise<User, ApiError>((resolve, reject) => {\n * setTimeout(\n * () =>\n * void (Math.random() > 0.5\n * ? resolve({ id: 1, name: \"Alice\" })\n * : reject({ message: \"Random failure\" })),\n * 500\n * );\n * });\n * }\n *\n * fetchUser()\n * .then(user => {\n * console.log(\"SUCCESS:\", user);\n * return user;\n * })\n * .catch(err => {\n * console.error(\"ERROR:\", err);\n * throw err;\n * })\n * .finish((val, err) => {\n * // Runs once after settle, regardless of outcome\n * console.log(\"FINISH:\", { val, err });\n * });\n * ```\n * ---\n * - **Implementation Notes:**\n * - Uses `Object.setPrototypeOf` to preserve the prototype chain\n * for environments targeting ES5 or when subclassing Promise.\n * - Internal `_value` and `_error` are updated as soon as the\n * executor resolves or rejects, guaranteeing `finish` receives\n * the final state even when added after settlement.\n */\nexport class CustomPromise<Success, Error = unknown>\n extends Promise<Success>\n implements CustomPromiseType<Success, Error>\n{\n private _value?: Success;\n private _error?: Error;\n private _finish: Array<(v?: Success, e?: Error) => void> = [];\n\n constructor(\n executor: (\n resolve: (v: Success) => void,\n reject: (e: Error) => void\n ) => void\n ) {\n let resolveOuter!: (v: Success) => void;\n let rejectOuter!: (e: Error) => void;\n\n super((resolve, reject) => {\n resolveOuter = resolve;\n rejectOuter = reject;\n });\n\n executor(\n (v) => {\n this._value = v;\n resolveOuter(v);\n this._finish.forEach((f) => f(v, undefined));\n },\n (e) => {\n this._error = e;\n rejectOuter(e);\n this._finish.forEach((f) => f(undefined, e));\n }\n );\n\n Object.setPrototypeOf(this, new.target.prototype);\n }\n\n override then<TResult1 = Success, TResult2 = never>(\n onfulfilled?: ((value: Success) => TResult1 | PromiseLike<TResult1>) | null,\n onrejected?: ((reason: Error) => TResult2 | PromiseLike<TResult2>) | null\n ): CustomPromise<TResult1 | TResult2, Error> {\n return super.then(onfulfilled, onrejected) as unknown as CustomPromise<\n TResult1 | TResult2,\n Error\n >;\n }\n\n override catch<TResult = never>(\n onrejected?: ((reason: Error) => TResult | PromiseLike<TResult>) | null\n ): CustomPromise<Success | TResult, Error> {\n return super.catch(onrejected) as unknown as CustomPromise<\n Success | TResult,\n Error\n >;\n }\n\n /**\n * Registers a callback to be invoked **exactly once** when the\n * promise settles, with access to both the resolved value and\n * the rejection reason.\n *\n * If the promise is already settled when `finish` is called,\n * the callback executes immediately on the same tick.\n *\n * @param cb Callback receiving the final `(value, error)`.\n * @returns `this` for fluent chaining.\n */\n finish(cb: (val?: Success, err?: Error) => void): this {\n if (this._value !== undefined || this._error !== undefined) {\n cb(this._value, this._error);\n } else {\n this._finish.push(cb);\n }\n return this;\n }\n}\n","import { isNull } from \"@/predicates/is/isNull\";\nimport { isInteger } from \"@/predicates/is/isInteger\";\nimport { getPreciseType } from \"@/predicates/type/getPreciseType\";\nimport { safeStableStringify } from \"@/conversions/stringify/safeStableStringify\";\n\n/** -------------------------------------------------------------------\n * * ***Custom `AbortError` for cross-runtime delay cancellation.***\n * -------------------------------------------------------------------\n */\nclass AbortError extends Error {\n constructor(\n message: string = \"The operation was aborted\",\n name: string = \"AbortError\"\n ) {\n super(message);\n this.name = name;\n }\n}\n\n/** ------------------------------------------------------------\n * * ***Utility: `delay`.***\n * ------------------------------------------------------------\n * **Creates a Promise-based delay that resolves after a given number\n * of milliseconds, optionally supports cancellation with `AbortSignal`.**\n * - **Behavior:**\n * - Validates `milliSeconds` is a non-zero, non-negative integer.\n * - Validates `signal` is an `AbortSignal` instance when provided.\n * - Cleans up event listeners and timers properly.\n * @param {number} [milliSeconds=1000]\n * The duration of the delay in milliseconds, default is `1000`.\n * @param {AbortSignal} [signal]\n * An optional `AbortSignal` that can cancel the delay.\n * @returns {Promise<void>}\n * A promise that resolves after the specified delay or\n * rejects with an `AbortError` if aborted.\n * @throws **{@link TypeError | `TypeError`}** while validates `milliSeconds` and `signal`:\n * - If `milliSeconds` **is not a valid** an `integer-number`, `NaN`, `negative-number`, or `โ‰ค 0`.\n * - If `signal` **is not a valid** an`AbortSignal`.\n * @throws **{@link DOMException | `DOMException`}** if the delay is aborted using the signal, rejects with `AbortError`.\n * @example\n * // Waits for 2 seconds\n * await delay(2000);\n *\n * // Delay with AbortSignal\n * const controller = new AbortController();\n * delay(5000, controller.signal).catch(err => console.log(err.name)); // \"AbortError\"\n * controller.abort();\n */\nexport const delay = (\n milliSeconds: number = 1000,\n signal?: AbortSignal\n): Promise<void> => {\n if (!isInteger(milliSeconds) || milliSeconds <= 0) {\n throw new TypeError(\n `First parameter (\\`milliSeconds\\`) must be of type \\`number\\` and value must be a \\`non-zero\\`, \\`non-NaN\\`, \\`non-negative\\`, and \\`integer-number\\`, but received: \\`${getPreciseType(\n milliSeconds\n )}\\`, with value: \\`${safeStableStringify(milliSeconds, {\n keepUndefined: true\n })}\\`.`\n );\n }\n\n if (isNull(signal) || (signal && !(signal instanceof AbortSignal))) {\n throw new TypeError(\n \"Second parameter (`signal`) must be an `instance of AbortSignal` if provided.\"\n );\n }\n\n return new Promise<void>((resolve, reject) => {\n const timer = setTimeout(() => {\n cleanup();\n resolve();\n }, milliSeconds);\n\n const cleanup = () => {\n clearTimeout(timer);\n if (signal) signal.removeEventListener(\"abort\", onAbort);\n };\n\n const onAbort = () => {\n cleanup();\n reject(\n new AbortError(\n \"Function `delay` from `@rzl-zone/utils-js` was aborted.\",\n \"AbortError\"\n )\n );\n };\n\n if (signal) {\n if (signal.aborted) {\n onAbort();\n } else {\n signal.addEventListener(\"abort\", onAbort, { once: true });\n }\n }\n });\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiEA,IAAa,gBAAb,cACU,QAEV;CACE,AAAQ;CACR,AAAQ;CACR,AAAQ,UAAmD,EAAE;CAE7D,YACE,UAIA;EACA,IAAI;EACJ,IAAI;EAEJ,OAAO,SAAS,WAAW;GACzB,eAAe;GACf,cAAc;IACd;EAEF,UACG,MAAM;GACL,KAAK,SAAS;GACd,aAAa,EAAE;GACf,KAAK,QAAQ,SAAS,MAAM,EAAE,GAAG,OAAU,CAAC;MAE7C,MAAM;GACL,KAAK,SAAS;GACd,YAAY,EAAE;GACd,KAAK,QAAQ,SAAS,MAAM,EAAE,QAAW,EAAE,CAAC;IAE/C;EAED,OAAO,eAAe,MAAM,IAAI,OAAO,UAAU;;CAGnD,AAAS,KACP,aACA,YAC2C;EAC3C,OAAO,MAAM,KAAK,aAAa,WAAW;;CAM5C,AAAS,MACP,YACyC;EACzC,OAAO,MAAM,MAAM,WAAW;;;;;;;;;;;;;CAiBhC,OAAO,IAAgD;EACrD,IAAI,KAAK,WAAW,UAAa,KAAK,WAAW,QAC/C,GAAG,KAAK,QAAQ,KAAK,OAAO;OAE5B,KAAK,QAAQ,KAAK,GAAG;EAEvB,OAAO;;;;;;;;;;AClIX,IAAM,aAAN,cAAyB,MAAM;CAC7B,YACE,UAAkB,6BAClB,OAAe,cACf;EACA,MAAM,QAAQ;EACd,KAAK,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiChB,MAAa,SACX,eAAuB,KACvB,WACkB;CAClB,IAAI,CAAC,UAAU,aAAa,IAAI,gBAAgB,GAC9C,MAAM,IAAI,UACR,0KAA0K,eACxK,aACD,CAAC,oBAAoB,oBAAoB,cAAc,EACtD,eAAe,MAChB,CAAC,CAAC,KACJ;CAGH,IAAI,OAAO,OAAO,IAAK,UAAU,EAAE,kBAAkB,cACnD,MAAM,IAAI,UACR,gFACD;CAGH,OAAO,IAAI,SAAe,SAAS,WAAW;EAC5C,MAAM,QAAQ,iBAAiB;GAC7B,SAAS;GACT,SAAS;KACR,aAAa;EAEhB,MAAM,gBAAgB;GACpB,aAAa,MAAM;GACnB,IAAI,QAAQ,OAAO,oBAAoB,SAAS,QAAQ;;EAG1D,MAAM,gBAAgB;GACpB,SAAS;GACT,OACE,IAAI,WACF,2DACA,aACD,CACF;;EAGH,IAAI,QACF,IAAI,OAAO,SACT,SAAS;OAET,OAAO,iBAAiB,SAAS,SAAS,EAAE,MAAM,MAAM,CAAC;GAG7D"}
@@ -0,0 +1,185 @@
1
+ /*!
2
+ * ========================================================================
3
+ * @rzl-zone/utils-js
4
+ * ------------------------------------------------------------------------
5
+ * Version: `3.12.1-beta.0`
6
+ * Author: `Rizalvin Dwiky <rizalvindwiky@gmail.com>`
7
+ * Repository: `https://github.com/rzl-zone/rzl-zone/tree/main/packages/utils-js`
8
+ * ========================================================================
9
+ */
10
+ "use strict";
11
+ const require_assertIsBoolean = require('./assertIsBoolean-DozdtbNi.cjs');
12
+ const require_assertIsString = require('./assertIsString-Bvk7bUL7.cjs');
13
+ const maxInt = 2147483647;
14
+ const base = 36, tMin = 1, tMax = 26, skew = 38, damp = 700;
15
+ const initialBias = 72, initialN = 128, delimiter = "-";
16
+ const regexPunycode = /^xn--/;
17
+ const regexNonASCII = /[^\0-\x7F]/;
18
+ const regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g;
19
+ const errors = {
20
+ overflow: "Overflow: input needs wider integers to process",
21
+ "not-basic": "Illegal input >= 0x80 (not a basic code point)",
22
+ "invalid-input": "Invalid input"
23
+ };
24
+ const floor = Math.floor;
25
+ const stringFromCharCode = String.fromCharCode;
26
+ function error(type) {
27
+ throw new RangeError(errors[type]);
28
+ }
29
+ function map(array, fn) {
30
+ const result = [];
31
+ let length = array.length;
32
+ while (length--) result[length] = fn(array[length]);
33
+ return result;
34
+ }
35
+ function mapDomain(domain, fn) {
36
+ const parts = domain.split("@");
37
+ let result = "";
38
+ if (parts.length > 1) {
39
+ result = parts[0] + "@";
40
+ domain = parts[1];
41
+ }
42
+ domain = domain.replace(regexSeparators, ".");
43
+ const labels = domain.split(".");
44
+ return result + map(labels, fn).join(".");
45
+ }
46
+ function ucs2decode(input) {
47
+ require_assertIsString.assertIsString(input, { message: ({ currentType, validType }) => `Utils \`punycodeUtilsJS.ucs2.decode\`, parameter \`input\` must be of type \`${validType}\`, but received: \`${currentType}\`.` });
48
+ const output = [];
49
+ let counter = 0;
50
+ const length = input.length;
51
+ while (counter < length) {
52
+ const value = input.charCodeAt(counter++);
53
+ if (value >= 55296 && value <= 56319 && counter < length) {
54
+ const extra = input.charCodeAt(counter++);
55
+ if ((extra & 64512) === 56320) output.push(((value & 1023) << 10) + (extra & 1023) + 65536);
56
+ else {
57
+ output.push(value);
58
+ counter--;
59
+ }
60
+ } else output.push(value);
61
+ }
62
+ return output;
63
+ }
64
+ const ucs2encode = (points) => {
65
+ if (!Array.isArray(points) || !points.every((p) => typeof p === "number" && Number.isFinite(p))) throw new TypeError(`Utils \`punycodeUtilsJS.ucs2.encode\`, parameter \`points\` must be an array of numbers, but received: \`${require_assertIsBoolean.getPreciseType(points)}\`.`);
66
+ return String.fromCodePoint(...points);
67
+ };
68
+ function basicToDigit(codePoint) {
69
+ if (codePoint >= 48 && codePoint < 58) return 26 + (codePoint - 48);
70
+ if (codePoint >= 65 && codePoint < 91) return codePoint - 65;
71
+ if (codePoint >= 97 && codePoint < 123) return codePoint - 97;
72
+ return base;
73
+ }
74
+ function digitToBasic(digit, flag) {
75
+ return digit + 22 + 75 * (digit < 26 ? 1 : 0) - Number(flag !== 0) * 32;
76
+ }
77
+ function adapt(delta, numPoints, firstTime) {
78
+ let k = 0;
79
+ delta = firstTime ? floor(delta / damp) : delta >> 1;
80
+ delta += floor(delta / numPoints);
81
+ while (delta > (base - tMin) * tMax >> 1) {
82
+ delta = floor(delta / (base - tMin));
83
+ k += base;
84
+ }
85
+ return floor(k + (base - tMin + 1) * delta / (delta + skew));
86
+ }
87
+ function decode(input) {
88
+ require_assertIsString.assertIsString(input, { message: ({ currentType, validType }) => `Utils \`punycodeUtilsJS.decode\`, parameter \`input\` must be of type \`${validType}\`, but received: \`${currentType}\`.` });
89
+ const output = [];
90
+ const inputLength = input.length;
91
+ let i = 0, n = initialN, bias = initialBias;
92
+ let basic = input.lastIndexOf(delimiter);
93
+ if (basic < 0) basic = 0;
94
+ for (let j = 0; j < basic; j++) {
95
+ if (input.charCodeAt(j) >= 128) error("not-basic");
96
+ output.push(input.charCodeAt(j));
97
+ }
98
+ for (let index = basic > 0 ? basic + 1 : 0; index < inputLength;) {
99
+ const oldi = i;
100
+ let w = 1;
101
+ for (let k = base;; k += base) {
102
+ if (index >= inputLength) error("invalid-input");
103
+ const digit = basicToDigit(input.charCodeAt(index++));
104
+ if (digit >= base) error("invalid-input");
105
+ if (digit > floor((maxInt - i) / w)) error("overflow");
106
+ i += digit * w;
107
+ const t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias;
108
+ if (digit < t) break;
109
+ const baseMinusT = base - t;
110
+ if (w > floor(maxInt / baseMinusT)) error("overflow");
111
+ w *= baseMinusT;
112
+ }
113
+ const out = output.length + 1;
114
+ bias = adapt(i - oldi, out, oldi === 0);
115
+ if (floor(i / out) > maxInt - n) error("overflow");
116
+ n += floor(i / out);
117
+ i %= out;
118
+ output.splice(i++, 0, n);
119
+ }
120
+ return String.fromCodePoint(...output);
121
+ }
122
+ function encode(input) {
123
+ require_assertIsString.assertIsString(input, { message: ({ currentType, validType }) => `Utils \`punycodeUtilsJS.encode\`, parameter \`input\` must be of type \`${validType}\`, but received: \`${currentType}\`.` });
124
+ const output = [];
125
+ const points = ucs2decode(input);
126
+ const inputLength = points.length;
127
+ let n = initialN, delta = 0, bias = initialBias;
128
+ for (const cp of points) if (cp < 128) output.push(stringFromCharCode(cp));
129
+ const basicLength = output.length;
130
+ let handledCPCount = basicLength;
131
+ if (basicLength) output.push(delimiter);
132
+ while (handledCPCount < inputLength) {
133
+ let m = maxInt;
134
+ for (const cp of points) if (cp >= n && cp < m) m = cp;
135
+ const handledCPCountPlusOne = handledCPCount + 1;
136
+ if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) error("overflow");
137
+ delta += (m - n) * handledCPCountPlusOne;
138
+ n = m;
139
+ for (const cp of points) {
140
+ if (cp < n) delta++;
141
+ if (cp === n) {
142
+ let q = delta;
143
+ for (let k = base;; k += base) {
144
+ const t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias;
145
+ if (q < t) break;
146
+ output.push(stringFromCharCode(digitToBasic(t + (q - t) % (base - t), 0)));
147
+ q = floor((q - t) / (base - t));
148
+ }
149
+ output.push(stringFromCharCode(digitToBasic(q, 0)));
150
+ bias = adapt(delta, handledCPCountPlusOne, handledCPCount === basicLength);
151
+ delta = 0;
152
+ handledCPCount++;
153
+ }
154
+ }
155
+ delta++;
156
+ n++;
157
+ }
158
+ return output.join("");
159
+ }
160
+ function toUnicode(input) {
161
+ require_assertIsString.assertIsString(input, { message: ({ currentType, validType }) => `Utils \`punycodeUtilsJS.toUnicode\`, parameter \`input\` must be of type \`${validType}\`, but received: \`${currentType}\`.` });
162
+ return mapDomain(input, (str) => regexPunycode.test(str) ? decode(str.slice(4).toLowerCase()) : str);
163
+ }
164
+ function toASCII(input) {
165
+ require_assertIsString.assertIsString(input, { message: ({ currentType, validType }) => `Utils \`punycodeUtilsJS.toASCII\`, parameter \`input\` must be of type \`${validType}\`, but received: \`${currentType}\`.` });
166
+ return mapDomain(input, (str) => regexNonASCII.test(str) ? "xn--" + encode(str) : str);
167
+ }
168
+ const punycodeUtilsJS = {
169
+ version: "1.0.0",
170
+ ucs2: {
171
+ decode: ucs2decode,
172
+ encode: ucs2encode
173
+ },
174
+ decode,
175
+ encode,
176
+ toASCII,
177
+ toUnicode
178
+ };
179
+ Object.defineProperty(exports, 'punycodeUtilsJS', {
180
+ enumerable: true,
181
+ get: function () {
182
+ return punycodeUtilsJS;
183
+ }
184
+ });
185
+ //# sourceMappingURL=punyCode-CTWXVVFo.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"punyCode-CTWXVVFo.cjs","names":["getPreciseType"],"sources":["../src/urls/utils/punyCode.ts"],"sourcesContent":["/** ---------------------------------------------------------\n * * ***Constants for `Punycode-UtilsJS` algorithm.***\n * ---------------------------------------------------------\n * These constants are used internally for encoding and decoding.\n *\n * Unicode domain names to ASCII (`Punycode-UtilsJS`) and vice versa.\n */\n\nimport { getPreciseType } from \"@/predicates/type/getPreciseType\";\nimport { assertIsString } from \"@/assertions/strings/assertIsString\";\n\n/** Constant `maxInt` for validate. */\nconst maxInt = 2147483647;\n\n/** Bootstring parameters for `Punycode-UtilsJS`. */\nconst base = 36,\n tMin = 1,\n tMax = 26,\n skew = 38,\n damp = 700;\n\n/** Initial bias and code point. */\nconst initialBias = 72,\n initialN = 128,\n delimiter = \"-\";\n\n/** Regular expressions used internally.\n * Matches `Punycode-UtilsJS` prefix.\n */\nconst regexPunycode = /^xn--/;\n/** Regular expressions used internally.\n * Matches non-ASCII chars.\n */\nconst regexNonASCII = /[^\\0-\\x7F]/;\n/** Regular expressions used internally.\n * Matches domain label separators.\n */\nconst regexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g;\n\n/** Error messages used internally */\nconst errors: Record<string, string> = {\n overflow: \"Overflow: input needs wider integers to process\",\n \"not-basic\": \"Illegal input >= 0x80 (not a basic code point)\",\n \"invalid-input\": \"Invalid input\"\n};\n\n/** Aliases of `Math.floor`. */\nconst floor = Math.floor;\n/** Aliases of `String.fromCharCode`. */\nconst stringFromCharCode = String.fromCharCode;\n\n/** ---------------------------------------------------------\n * * ***Throws a RangeError with a predefined error message.***\n * ---------------------------------------------------------\n * @param type - Key of the error type to throw.\n */\nfunction error(type: keyof typeof errors): never {\n throw new RangeError(errors[type]);\n}\n\n/** ---------------------------------------------------------\n * * ***Maps an array using a callback function.***\n * ---------------------------------------------------------\n * @param array - Array to transform.\n * @param fn - Function to apply to each element.\n * @returns Transformed array.\n */\nfunction map<T, U>(array: T[], fn: (v: T) => U): U[] {\n const result: U[] = [];\n let length = array.length;\n while (length--) result[length] = fn(array[length]);\n return result;\n}\n\n/** ---------------------------------------------------------\n * * ***Maps a domain name using a callback on each label.***\n * ---------------------------------------------------------\n * Handles email-like domains (local@domain).\n * @param domain - Domain string to process.\n * @param fn - Function applied to each domain label.\n * @returns Transformed domain string.\n */\nfunction mapDomain(domain: string, fn: (v: string) => string): string {\n const parts = domain.split(\"@\");\n let result = \"\";\n if (parts.length > 1) {\n result = parts[0] + \"@\";\n domain = parts[1];\n }\n domain = domain.replace(regexSeparators, \"\\x2E\");\n const labels = domain.split(\".\");\n return result + map(labels, fn).join(\".\");\n}\n\n/** ---------------------------------------------------------\n * * ***Converts a UCS-2 encoded string to an array of Unicode code points.***\n * ---------------------------------------------------------\n * @param input - String to decode.\n * @returns Array of Unicode code points.\n */\nfunction ucs2decode(input: string): number[] {\n assertIsString(input, {\n message: ({ currentType, validType }) =>\n `Utils \\`punycodeUtilsJS.ucs2.decode\\`, parameter \\`input\\` must be of type \\`${validType}\\`, but received: \\`${currentType}\\`.`\n });\n\n const output: number[] = [];\n let counter = 0;\n const length = input.length;\n while (counter < length) {\n const value = input.charCodeAt(counter++);\n if (value >= 0xd800 && value <= 0xdbff && counter < length) {\n const extra = input.charCodeAt(counter++);\n if ((extra & 0xfc00) === 0xdc00)\n output.push(((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000);\n else {\n output.push(value);\n counter--;\n }\n } else output.push(value);\n }\n return output;\n}\n\n/** ---------------------------------------------------------\n * * ***Encodes an array of Unicode code points to a string.***\n * ---------------------------------------------------------\n * @param points - Array of Unicode code points.\n * @returns Encoded string.\n */\nconst ucs2encode = (points: number[]): string => {\n if (\n !Array.isArray(points) ||\n !points.every((p) => typeof p === \"number\" && Number.isFinite(p))\n ) {\n throw new TypeError(\n `Utils \\`punycodeUtilsJS.ucs2.encode\\`, parameter \\`points\\` must be an array of numbers, but received: \\`${getPreciseType(\n points\n )}\\`.`\n );\n }\n\n return String.fromCodePoint(...points);\n};\n\n/** ---------------------------------------------------------\n * * ***Converts a basic code point to its digit value for `Punycode-UtilsJS`.***\n * ---------------------------------------------------------\n * @param codePoint - Unicode code point.\n * @returns Digit value.\n */\nfunction basicToDigit(codePoint: number): number {\n if (codePoint >= 0x30 && codePoint < 0x3a) return 26 + (codePoint - 0x30);\n if (codePoint >= 0x41 && codePoint < 0x5b) return codePoint - 0x41;\n if (codePoint >= 0x61 && codePoint < 0x7b) return codePoint - 0x61;\n return base;\n}\n\n/** ---------------------------------------------------------\n * * ***Converts a digit to a basic code point for `Punycode-UtilsJS`.***\n * ---------------------------------------------------------\n * @param digit - Numeric value.\n * @param flag - Bias flag (0 or 1).\n * @returns Code point.\n */\nfunction digitToBasic(digit: number, flag: number): number {\n return digit + 22 + 75 * (digit < 26 ? 1 : 0) - Number(flag !== 0) * 32;\n}\n\n/** ---------------------------------------------------------\n * * ***Bias adaptation function for `Punycode-UtilsJS` encoding/decoding.***\n * ---------------------------------------------------------\n * @param delta - Delta value.\n * @param numPoints - Number of code points.\n * @param firstTime - Indicates first adaptation.\n * @returns Adapted bias.\n */\nfunction adapt(delta: number, numPoints: number, firstTime: boolean): number {\n let k = 0;\n delta = firstTime ? floor(delta / damp) : delta >> 1;\n delta += floor(delta / numPoints);\n while (delta > ((base - tMin) * tMax) >> 1) {\n delta = floor(delta / (base - tMin));\n k += base;\n }\n return floor(k + ((base - tMin + 1) * delta) / (delta + skew));\n}\n\n/** ---------------------------------------------------------\n * * ***Decodes a `Punycode-UtilsJS` string to Unicode.***\n * ---------------------------------------------------------\n * @param input - `Punycode-UtilsJS` string.\n * @returns Decoded Unicode string.\n */\nfunction decode(input: string): string {\n assertIsString(input, {\n message: ({ currentType, validType }) =>\n `Utils \\`punycodeUtilsJS.decode\\`, parameter \\`input\\` must be of type \\`${validType}\\`, but received: \\`${currentType}\\`.`\n });\n\n const output: number[] = [];\n const inputLength = input.length;\n let i = 0,\n n = initialN,\n bias = initialBias;\n\n let basic = input.lastIndexOf(delimiter);\n if (basic < 0) basic = 0;\n\n for (let j = 0; j < basic; j++) {\n if (input.charCodeAt(j) >= 0x80) error(\"not-basic\");\n output.push(input.charCodeAt(j));\n }\n\n for (let index = basic > 0 ? basic + 1 : 0; index < inputLength; ) {\n const oldi = i;\n let w = 1;\n for (let k = base; ; k += base) {\n if (index >= inputLength) error(\"invalid-input\");\n const digit = basicToDigit(input.charCodeAt(index++));\n if (digit >= base) error(\"invalid-input\");\n if (digit > floor((maxInt - i) / w)) error(\"overflow\");\n i += digit * w;\n const t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias;\n if (digit < t) break;\n const baseMinusT = base - t;\n if (w > floor(maxInt / baseMinusT)) error(\"overflow\");\n w *= baseMinusT;\n }\n const out = output.length + 1;\n bias = adapt(i - oldi, out, oldi === 0);\n if (floor(i / out) > maxInt - n) error(\"overflow\");\n n += floor(i / out);\n i %= out;\n output.splice(i++, 0, n);\n }\n return String.fromCodePoint(...output);\n}\n\n/** ---------------------------------------------------------\n * * ***Encodes a Unicode string to `Punycode-UtilsJS`.***\n * ---------------------------------------------------------\n * @param input - Unicode string.\n * @returns `Punycode-UtilsJS` string.\n */\nfunction encode(input: string): string {\n assertIsString(input, {\n message: ({ currentType, validType }) =>\n `Utils \\`punycodeUtilsJS.encode\\`, parameter \\`input\\` must be of type \\`${validType}\\`, but received: \\`${currentType}\\`.`\n });\n\n const output: string[] = [];\n const points = ucs2decode(input);\n const inputLength = points.length;\n let n = initialN,\n delta = 0,\n bias = initialBias;\n\n for (const cp of points) if (cp < 0x80) output.push(stringFromCharCode(cp));\n const basicLength = output.length;\n let handledCPCount = basicLength;\n if (basicLength) output.push(delimiter);\n\n while (handledCPCount < inputLength) {\n let m = maxInt;\n for (const cp of points) if (cp >= n && cp < m) m = cp;\n\n const handledCPCountPlusOne = handledCPCount + 1;\n if (m - n > floor((maxInt - delta) / handledCPCountPlusOne))\n error(\"overflow\");\n delta += (m - n) * handledCPCountPlusOne;\n n = m;\n\n for (const cp of points) {\n if (cp < n) delta++;\n if (cp === n) {\n let q = delta;\n for (let k = base; ; k += base) {\n const t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias;\n if (q < t) break;\n output.push(\n stringFromCharCode(digitToBasic(t + ((q - t) % (base - t)), 0))\n );\n q = floor((q - t) / (base - t));\n }\n output.push(stringFromCharCode(digitToBasic(q, 0)));\n bias = adapt(\n delta,\n handledCPCountPlusOne,\n handledCPCount === basicLength\n );\n delta = 0;\n handledCPCount++;\n }\n }\n delta++;\n n++;\n }\n\n return output.join(\"\");\n}\n\n/** ---------------------------------------------------------\n * * ***Converts `Punycode-UtilsJS` to Unicode for domain names.***\n * ---------------------------------------------------------\n * @param input - Domain or label.\n * @returns Unicode string.\n */\nfunction toUnicode(input: string): string {\n assertIsString(input, {\n message: ({ currentType, validType }) =>\n `Utils \\`punycodeUtilsJS.toUnicode\\`, parameter \\`input\\` must be of type \\`${validType}\\`, but received: \\`${currentType}\\`.`\n });\n\n return mapDomain(input, (str) =>\n regexPunycode.test(str) ? decode(str.slice(4).toLowerCase()) : str\n );\n}\n\n/** ---------------------------------------------------------\n * * ***Converts Unicode to ASCII (`Punycode-UtilsJS`) for domain names.***\n * ---------------------------------------------------------\n * @param input - Domain or label.\n * @returns ASCII string.\n */\nfunction toASCII(input: string): string {\n assertIsString(input, {\n message: ({ currentType, validType }) =>\n `Utils \\`punycodeUtilsJS.toASCII\\`, parameter \\`input\\` must be of type \\`${validType}\\`, but received: \\`${currentType}\\`.`\n });\n\n return mapDomain(input, (str) =>\n regexNonASCII.test(str) ? \"xn--\" + encode(str) : str\n );\n}\n\ntype PunycodeUtilsJS = {\n /** ---------------------------------------------------------\n * * ***Version of the `Punycode-UtilsJS` implementation.***\n * ---------------------------------------------------------\n *\n * @example\n * console.log(punycodeUtilsJS.version); // \"1.0.0\"\n */\n version: string;\n /** ---------------------------------------------------------\n * * ***UCS-2 utility functions.***\n * ---------------------------------------------------------\n */\n ucs2: {\n /** ---------------------------------------------------------\n * * ***Decodes a UCS-2 encoded string to an array of Unicode code points.***\n * ---------------------------------------------------------\n *\n * @param input - The UCS-2 string to decode.\n * @returns Array of Unicode code points.\n * @example\n * punycodeUtilsJS.ucs2.decode(\"๐ˆ\");\n * // โž” [66376]\n */\n decode: (input: string) => number[];\n /** ---------------------------------------------------------\n * * ***Encodes an array of Unicode code points to a UCS-2 string.***\n * ---------------------------------------------------------\n *\n * @param points - Array of Unicode code points.\n * @returns Encoded string.\n * @example\n * punycodeUtilsJS.ucs2.encode([66376]);\n * // โž” \"๐ˆ\"\n */\n encode: (points: number[]) => string;\n };\n /** ---------------------------------------------------------\n * * ***Decodes a `Punycode-UtilsJS` string to a Unicode string.***\n * ---------------------------------------------------------\n *\n * @param input - The `Punycode-UtilsJS` string to decode.\n * @returns Decoded Unicode string.\n * @example\n * punycodeUtilsJS.decode(\"xn--fsq\");\n * // โž” \"รผ\"\n */\n decode: (input: string) => string;\n /** ---------------------------------------------------------\n * * ***Encodes a Unicode string to `Punycode-UtilsJS`.***\n * ---------------------------------------------------------\n *\n * @param input - Unicode string to encode.\n * @returns `Punycode-UtilsJS` string.\n * @example\n * punycodeUtilsJS.encode(\"รผ\");\n * // โž” \"xn--fsq\"\n */\n encode: (input: string) => string;\n /** ---------------------------------------------------------\n * * ***Converts a Unicode domain or label to ASCII (`Punycode-UtilsJS`).***\n * ---------------------------------------------------------\n *\n * @param input - Domain or label string.\n * @returns ASCII string suitable for DNS.\n * @example\n * punycodeUtilsJS.toASCII(\"ะฟั€ะธะผะตั€.ั€ั„\");\n * // โž” \"xn--e1afmkfd.xn--p1ai\"\n */\n toASCII: (input: string) => string;\n /** ---------------------------------------------------------\n * * ***Converts an ASCII (`Punycode-UtilsJS`) domain or label to Unicode.***\n * ---------------------------------------------------------\n *\n * @param input - ASCII string (with xn-- prefix if needed).\n * @returns Unicode string.\n * @example\n * punycodeUtilsJS.toUnicode(\"xn--e1afmkfd.xn--p1ai\");\n * // โž” \"ะฟั€ะธะผะตั€.ั€ั„\"\n */\n toUnicode: (input: string) => string;\n};\n\n/** ---------------------------------------------------------\n * * ***`Punycode-UtilsJS` object exposing all API functions and version.***\n * ---------------------------------------------------------\n * Provides encoding and decoding of Unicode domain names to ASCII (`Punycode-UtilsJS`)\n * and vice versa.\n *\n * - Useful for IDN (Internationalized Domain Names) support.\n */\nconst punycodeUtilsJS: PunycodeUtilsJS = {\n version: \"1.0.0\",\n ucs2: {\n decode: ucs2decode,\n encode: ucs2encode\n },\n decode: decode,\n encode: encode,\n toASCII: toASCII,\n toUnicode: toUnicode\n};\n\n/** Export individual functions */\nexport { punycodeUtilsJS };\n"],"mappings":"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"}