@rzl-zone/utils-js 3.12.0 → 3.12.1-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (286) hide show
  1. package/{LICENSE.md → LICENSE} +3 -3
  2. package/README.md +69 -96
  3. package/dist/.references/index.d.cts +25 -0
  4. package/dist/.references/index.d.ts +25 -0
  5. package/dist/assertIsArray-DJXkjHZs.cjs +26 -0
  6. package/dist/assertIsArray-DJXkjHZs.cjs.map +1 -0
  7. package/dist/assertIsArray-bTA3XLjq.js +20 -0
  8. package/dist/assertIsArray-bTA3XLjq.js.map +1 -0
  9. package/dist/assertIsBoolean-C8WEXVr2.cjs +1283 -0
  10. package/dist/assertIsBoolean-C8WEXVr2.cjs.map +1 -0
  11. package/dist/assertIsBoolean-DR1SaXPD.js +1073 -0
  12. package/dist/assertIsBoolean-DR1SaXPD.js.map +1 -0
  13. package/dist/assertIsString-BiHQSrB2.cjs +26 -0
  14. package/dist/assertIsString-BiHQSrB2.cjs.map +1 -0
  15. package/dist/assertIsString-CEB07_83.js +20 -0
  16. package/dist/assertIsString-CEB07_83.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-BNIh_tCH.js +380 -0
  28. package/dist/conversions-BNIh_tCH.js.map +1 -0
  29. package/dist/conversions-D_Kh0a_C.cjs +446 -0
  30. package/dist/conversions-D_Kh0a_C.cjs.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 +176 -0
  34. package/dist/events/index.d.ts +164 -166
  35. package/dist/events/index.js +50 -12
  36. package/dist/events/index.js.map +1 -0
  37. package/dist/formatEnvPort-B3OLxQk9.cjs +171 -0
  38. package/dist/formatEnvPort-B3OLxQk9.cjs.map +1 -0
  39. package/dist/formatEnvPort-ByFVLjSV.js +159 -0
  40. package/dist/formatEnvPort-ByFVLjSV.js.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--1m_vpE8.js +369 -0
  46. package/dist/formatters--1m_vpE8.js.map +1 -0
  47. package/dist/formatters-Cbij0XLU.cjs +429 -0
  48. package/dist/formatters-Cbij0XLU.cjs.map +1 -0
  49. package/dist/generators/index.cjs +165 -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 +158 -14
  54. package/dist/generators/index.js.map +1 -0
  55. package/dist/index-59zbLcPr.d.ts +340 -0
  56. package/dist/index-B6tawc8L.d.cts +1716 -0
  57. package/dist/index-C267akkJ.d.ts +2158 -0
  58. package/dist/index-CeBC2Vvl.d.cts +2361 -0
  59. package/dist/index-CgRDTI6f.d.ts +822 -0
  60. package/dist/index-CoiUBVmr.d.ts +720 -0
  61. package/dist/index-D4fcasfZ.d.cts +720 -0
  62. package/dist/index-DDrSQKIc.d.ts +1716 -0
  63. package/dist/index-DsGxO31H.d.cts +765 -0
  64. package/dist/index-Hg1qJkjl.d.ts +765 -0
  65. package/dist/index-Qm3iFwd0.d.cts +2158 -0
  66. package/dist/index-UPp94Agr.d.ts +2361 -0
  67. package/dist/index-gBA_8SuF.d.cts +340 -0
  68. package/dist/index-jyDqzicx.d.cts +822 -0
  69. package/dist/isBigInt-C4krUeAw.cjs +20 -0
  70. package/dist/isBigInt-C4krUeAw.cjs.map +1 -0
  71. package/dist/isBigInt-DKe0M6hp.js +14 -0
  72. package/dist/isBigInt-DKe0M6hp.js.map +1 -0
  73. package/dist/isEmptyObject-DCipFwxJ.js +25 -0
  74. package/dist/isEmptyObject-DCipFwxJ.js.map +1 -0
  75. package/dist/isEmptyObject-ZkSwRC_D.cjs +37 -0
  76. package/dist/isEmptyObject-ZkSwRC_D.cjs.map +1 -0
  77. package/dist/isEmptyString-BXzKAC2j.js +15 -0
  78. package/dist/isEmptyString-BXzKAC2j.js.map +1 -0
  79. package/dist/isEmptyString-UiiUsSQj.cjs +21 -0
  80. package/dist/isEmptyString-UiiUsSQj.cjs.map +1 -0
  81. package/dist/isEmptyValue-BQzcjVaL.cjs +30 -0
  82. package/dist/isEmptyValue-BQzcjVaL.cjs.map +1 -0
  83. package/dist/isEmptyValue-jqOr7OHD.js +24 -0
  84. package/dist/isEmptyValue-jqOr7OHD.js.map +1 -0
  85. package/dist/isEqual-BX49cF9m.js +87 -0
  86. package/dist/isEqual-BX49cF9m.js.map +1 -0
  87. package/dist/isEqual-BvumA3RA.cjs +111 -0
  88. package/dist/isEqual-BvumA3RA.cjs.map +1 -0
  89. package/dist/isFinite-BCnaDpod.js +15 -0
  90. package/dist/isFinite-BCnaDpod.js.map +1 -0
  91. package/dist/isFinite-D24ZaE6c.cjs +21 -0
  92. package/dist/isFinite-D24ZaE6c.cjs.map +1 -0
  93. package/dist/isInteger-Caeuz0rB.cjs +20 -0
  94. package/dist/isInteger-Caeuz0rB.cjs.map +1 -0
  95. package/dist/isInteger-naMbJsxJ.js +14 -0
  96. package/dist/isInteger-naMbJsxJ.js.map +1 -0
  97. package/dist/isPlainObject-BF-2-phb.d.cts +339 -0
  98. package/dist/isPlainObject-DxNDL8XU.d.ts +339 -0
  99. package/dist/isServer-BJHVnixd.cjs +20 -0
  100. package/dist/isServer-BJHVnixd.cjs.map +1 -0
  101. package/dist/isServer-Da3o3XSs.js +14 -0
  102. package/dist/isServer-Da3o3XSs.js.map +1 -0
  103. package/dist/isTypedArray-DuNA8tK6.js +31 -0
  104. package/dist/isTypedArray-DuNA8tK6.js.map +1 -0
  105. package/dist/isTypedArray-TJptiw2b.cjs +43 -0
  106. package/dist/isTypedArray-TJptiw2b.cjs.map +1 -0
  107. package/dist/isURL-C-kSk6KJ.js +14 -0
  108. package/dist/isURL-C-kSk6KJ.js.map +1 -0
  109. package/dist/isURL-DeUPO_oR.cjs +20 -0
  110. package/dist/isURL-DeUPO_oR.cjs.map +1 -0
  111. package/dist/isValidDomain-BB9IGhJs.cjs +1845 -0
  112. package/dist/isValidDomain-BB9IGhJs.cjs.map +1 -0
  113. package/dist/isValidDomain-DoE98yhJ.js +1827 -0
  114. package/dist/isValidDomain-DoE98yhJ.js.map +1 -0
  115. package/dist/next/index.cjs +119 -214
  116. package/dist/next/index.cjs.map +1 -0
  117. package/dist/next/index.d.cts +220 -0
  118. package/dist/next/index.d.ts +203 -214
  119. package/dist/next/index.js +117 -212
  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 +34 -35
  125. package/dist/next/server/index.js +23 -38
  126. package/dist/next/server/index.js.map +1 -0
  127. package/dist/noop-B13_ii35.cjs +18 -0
  128. package/dist/noop-B13_ii35.cjs.map +1 -0
  129. package/dist/noop-ubqAIbHD.js +12 -0
  130. package/dist/noop-ubqAIbHD.js.map +1 -0
  131. package/dist/normalizeSpaces-Bg2IZW7W.js +23 -0
  132. package/dist/normalizeSpaces-Bg2IZW7W.js.map +1 -0
  133. package/dist/normalizeSpaces-ZXnR4Qzp.cjs +29 -0
  134. package/dist/normalizeSpaces-ZXnR4Qzp.cjs.map +1 -0
  135. package/dist/normalizeString-BDdkaXui.js +15 -0
  136. package/dist/normalizeString-BDdkaXui.js.map +1 -0
  137. package/dist/normalizeString-BE6ELqEb.cjs +21 -0
  138. package/dist/normalizeString-BE6ELqEb.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 +129 -134
  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 +234 -235
  148. package/dist/parsers/index.js +10 -12
  149. package/dist/parsers-BSBPgvsq.js +643 -0
  150. package/dist/parsers-BSBPgvsq.js.map +1 -0
  151. package/dist/parsers-OqDeffqc.cjs +649 -0
  152. package/dist/parsers-OqDeffqc.cjs.map +1 -0
  153. package/dist/parsing-Cao8b358.js +50 -0
  154. package/dist/parsing-Cao8b358.js.map +1 -0
  155. package/dist/parsing-DOGSCH6N.cjs +56 -0
  156. package/dist/parsing-DOGSCH6N.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-Bj6meyXV.js +256 -0
  162. package/dist/predicates-Bj6meyXV.js.map +1 -0
  163. package/dist/predicates-D0ubqgqy.cjs +412 -0
  164. package/dist/predicates-D0ubqgqy.cjs.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 +116 -119
  169. package/dist/promises/index.js +73 -13
  170. package/dist/promises/index.js.map +1 -0
  171. package/dist/punyCode-8SrbMWfM.js +179 -0
  172. package/dist/punyCode-8SrbMWfM.js.map +1 -0
  173. package/dist/punyCode-D-Qu6nj6.cjs +185 -0
  174. package/dist/punyCode-D-Qu6nj6.cjs.map +1 -0
  175. package/dist/removeSpaces-Bmc5DX4F.js +19 -0
  176. package/dist/removeSpaces-Bmc5DX4F.js.map +1 -0
  177. package/dist/removeSpaces-CWIvhZHg.cjs +25 -0
  178. package/dist/removeSpaces-CWIvhZHg.cjs.map +1 -0
  179. package/dist/rzl-utils.global.js +20 -9
  180. package/dist/safeJsonParse-BP38mwlj.js +184 -0
  181. package/dist/safeJsonParse-BP38mwlj.js.map +1 -0
  182. package/dist/safeJsonParse-Sms2CJf4.cjs +208 -0
  183. package/dist/safeJsonParse-Sms2CJf4.cjs.map +1 -0
  184. package/dist/safeStableStringify-CJtP89qn.cjs +106 -0
  185. package/dist/safeStableStringify-CJtP89qn.cjs.map +1 -0
  186. package/dist/safeStableStringify-CXOZ9Ub8.js +88 -0
  187. package/dist/safeStableStringify-CXOZ9Ub8.js.map +1 -0
  188. package/dist/strings/index.cjs +79 -81
  189. package/dist/strings/index.cjs.map +1 -0
  190. package/dist/strings/index.d.cts +12 -0
  191. package/dist/strings/index.d.ts +10 -775
  192. package/dist/strings/index.js +62 -14
  193. package/dist/strings/index.js.map +1 -0
  194. package/dist/tailwind/index.cjs +19 -47
  195. package/dist/tailwind/index.d.cts +12 -0
  196. package/dist/tailwind/index.d.ts +11 -712
  197. package/dist/tailwind/index.js +10 -12
  198. package/dist/tailwind-B2ssevxq.js +199 -0
  199. package/dist/tailwind-B2ssevxq.js.map +1 -0
  200. package/dist/tailwind-CHIx9uxu.cjs +247 -0
  201. package/dist/tailwind-CHIx9uxu.cjs.map +1 -0
  202. package/dist/toStringArrayUnRecursive-C4zYCja7.cjs +51 -0
  203. package/dist/toStringArrayUnRecursive-C4zYCja7.cjs.map +1 -0
  204. package/dist/toStringArrayUnRecursive-DJGtPsFb.js +39 -0
  205. package/dist/toStringArrayUnRecursive-DJGtPsFb.js.map +1 -0
  206. package/dist/urls/index.cjs +130 -57
  207. package/dist/urls/index.cjs.map +1 -0
  208. package/dist/urls/index.d.cts +737 -0
  209. package/dist/urls/index.d.ts +699 -708
  210. package/dist/urls/index.js +122 -26
  211. package/dist/urls/index.js.map +1 -0
  212. package/package.json +203 -194
  213. package/dist/chunk-2AFQ33D3.cjs +0 -64
  214. package/dist/chunk-2CYDJVGM.js +0 -246
  215. package/dist/chunk-2MW4JDQ2.cjs +0 -598
  216. package/dist/chunk-2VTDXC3N.cjs +0 -1825
  217. package/dist/chunk-44XX2P34.js +0 -209
  218. package/dist/chunk-4YLBKLGS.cjs +0 -18
  219. package/dist/chunk-566CXQW7.cjs +0 -560
  220. package/dist/chunk-57EPKYID.cjs +0 -397
  221. package/dist/chunk-5MGEC3YG.js +0 -63
  222. package/dist/chunk-6EF52423.cjs +0 -249
  223. package/dist/chunk-6SCOKU3S.js +0 -109
  224. package/dist/chunk-6VUXD3CF.js +0 -119
  225. package/dist/chunk-7B76BSNK.cjs +0 -118
  226. package/dist/chunk-7Y6I2DSU.cjs +0 -101
  227. package/dist/chunk-A7S7E2EE.cjs +0 -308
  228. package/dist/chunk-AJZ6PMMZ.js +0 -16
  229. package/dist/chunk-AXGBL2IO.cjs +0 -251
  230. package/dist/chunk-B4TC6FBV.cjs +0 -678
  231. package/dist/chunk-BAV5T2E3.cjs +0 -15
  232. package/dist/chunk-BKIJBNIE.js +0 -21
  233. package/dist/chunk-BNIMTFK5.js +0 -59
  234. package/dist/chunk-BXW7YXB7.js +0 -1823
  235. package/dist/chunk-CFYZC4S6.js +0 -53
  236. package/dist/chunk-CSG4SCL3.js +0 -1587
  237. package/dist/chunk-CWQW7AKK.js +0 -676
  238. package/dist/chunk-DVMHRLKP.cjs +0 -16
  239. package/dist/chunk-EN7LVZBZ.js +0 -548
  240. package/dist/chunk-EV4Y7HCY.cjs +0 -26
  241. package/dist/chunk-F66VDYIZ.cjs +0 -18
  242. package/dist/chunk-FLJX37EL.cjs +0 -30
  243. package/dist/chunk-GKC3UDMC.cjs +0 -1623
  244. package/dist/chunk-H65I3GRZ.cjs +0 -106
  245. package/dist/chunk-HHYWB7VZ.js +0 -24
  246. package/dist/chunk-HNGGISFL.cjs +0 -65
  247. package/dist/chunk-HNSQAVSZ.cjs +0 -35
  248. package/dist/chunk-HSP6IWZK.js +0 -17
  249. package/dist/chunk-IDZS7J6T.js +0 -242
  250. package/dist/chunk-JS6R55VL.js +0 -302
  251. package/dist/chunk-JZVT5FK7.js +0 -232
  252. package/dist/chunk-KHO2SBNA.cjs +0 -16
  253. package/dist/chunk-KIDJCMNJ.js +0 -33
  254. package/dist/chunk-KOLEURVT.cjs +0 -38
  255. package/dist/chunk-L4V53MQK.cjs +0 -269
  256. package/dist/chunk-L5RDAVVH.js +0 -14
  257. package/dist/chunk-NODTV4F3.js +0 -16
  258. package/dist/chunk-NYK5K3V2.cjs +0 -211
  259. package/dist/chunk-ODUO3RTL.cjs +0 -113
  260. package/dist/chunk-ONZFBJVW.js +0 -14
  261. package/dist/chunk-PFXCTE37.js +0 -28
  262. package/dist/chunk-PPST7QAQ.js +0 -587
  263. package/dist/chunk-Q5IMYDFL.cjs +0 -33
  264. package/dist/chunk-QFFBIOJ4.js +0 -31
  265. package/dist/chunk-QNKGP5DY.js +0 -14
  266. package/dist/chunk-RRQHMOPE.cjs +0 -19
  267. package/dist/chunk-RU5OSRBU.js +0 -95
  268. package/dist/chunk-SDMPEJ4F.js +0 -35
  269. package/dist/chunk-SYNL5IKP.js +0 -115
  270. package/dist/chunk-TCDOWZQE.js +0 -16
  271. package/dist/chunk-TQPGXGKB.cjs +0 -123
  272. package/dist/chunk-TULOI4GL.js +0 -370
  273. package/dist/chunk-UBHCP4N5.cjs +0 -36
  274. package/dist/chunk-UCHF3M34.cjs +0 -56
  275. package/dist/chunk-UDA26MCU.cjs +0 -16
  276. package/dist/chunk-V3C4FYZL.cjs +0 -18
  277. package/dist/chunk-VAAHZFBF.js +0 -32
  278. package/dist/chunk-VJDDGRIK.cjs +0 -16
  279. package/dist/chunk-WVSPXFTY.js +0 -14
  280. package/dist/chunk-WYP76WXB.js +0 -101
  281. package/dist/chunk-YDE4ZBB7.cjs +0 -237
  282. package/dist/chunk-YKQEOO7C.cjs +0 -23
  283. package/dist/chunk-YSZC56SZ.js +0 -264
  284. package/dist/chunk-YWHHVDT4.js +0 -13
  285. package/dist/index.d.ts +0 -24
  286. package/dist/isPlainObject-DTJVV2Kf.d.ts +0 -536
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parsers-OqDeffqc.cjs","names":["isNonEmptyString","punycodeUtilsJS"],"sources":["../src/parsers/_private/extensions.ts","../src/parsers/extractFileName.ts"],"sourcesContent":["// ==========================\n// Single extensions\n// ==========================\nexport const EXTENSIONS_FILE = new Set([\n // 📄 Text & Document\n \"txt\",\n \"md\",\n \"rtf\",\n \"tex\",\n \"doc\",\n \"docx\",\n \"odt\",\n \"ott\",\n \"pdf\",\n \"djvu\",\n \"epub\",\n \"fb2\",\n \"lit\",\n \"lrf\",\n \"xls\",\n \"xlsx\",\n \"ods\",\n \"csv\",\n \"tsv\",\n \"ppt\",\n \"pptx\",\n \"pps\",\n \"bib\",\n \"cba\",\n \"cbt\",\n \"cbz\",\n \"cbr\",\n \"opds\",\n \"fodt\",\n \"pages\",\n \"rtfd\",\n \"sxc\",\n \"sxw\",\n \"wpd\",\n \"xps\",\n \"dotx\",\n \"dotm\",\n \"xltx\",\n \"xltm\",\n \"sldx\",\n \"sldm\",\n \"fods\",\n \"mdx\",\n \"markdown\",\n \"texi\",\n \"textile\",\n\n // 🖼️ Image\n \"jpg\",\n \"jpeg\",\n \"png\",\n \"gif\",\n \"bmp\",\n \"tif\",\n \"tiff\",\n \"webp\",\n \"svg\",\n \"ico\",\n \"heif\",\n \"heic\",\n \"raw\",\n \"cr2\",\n \"nef\",\n \"orf\",\n \"sr2\",\n \"dng\",\n \"dds\",\n \"psd\",\n \"exr\",\n \"xcf\",\n \"ai\",\n \"eps\",\n \"cdr\",\n \"indd\",\n \"pcx\",\n \"pgm\",\n \"ppm\",\n \"pbm\",\n \"pnm\",\n \"jfif\",\n \"ras\",\n \"tga\",\n \"j2k\",\n \"jp2\",\n \"emf\",\n \"wmf\",\n \"hdp\",\n \"mdi\",\n \"hevc\",\n\n // 🎵 Audio\n \"mp3\",\n \"wav\",\n \"ogg\",\n \"flac\",\n \"aac\",\n \"m4a\",\n \"wma\",\n \"alac\",\n \"aiff\",\n \"aif\",\n \"amr\",\n \"mid\",\n \"midi\",\n \"opus\",\n \"au\",\n \"caf\",\n \"ape\",\n \"mka\",\n \"spx\",\n \"ra\",\n \"ram\",\n \"mpc\",\n \"wv\",\n \"aifc\",\n \"mod\",\n \"it\",\n \"s3m\",\n \"xm\",\n \"kar\",\n \"m4b\",\n \"voc\",\n \"snd\",\n \"a52\",\n \"ac3\",\n \"dts\",\n\n // 🎥 Video\n \"mp4\",\n \"mkv\",\n \"avi\",\n \"mov\",\n \"wmv\",\n \"webm\",\n \"mpeg\",\n \"mpg\",\n \"3gp\",\n \"3g2\",\n \"m4v\",\n \"ts\",\n \"mts\",\n \"asf\",\n \"rm\",\n \"rmvb\",\n \"vob\",\n \"f4v\",\n \"ogv\",\n \"m2ts\",\n \"dav\",\n \"mxf\",\n \"mjpeg\",\n \"flv\",\n \"divx\",\n \"f4a\",\n \"f4p\",\n \"m2v\",\n \"ogm\",\n \"vp8\",\n \"vp9\",\n \"xvid\",\n \"yuv\",\n \"mng\",\n \"dv\",\n \"m1v\",\n \"roq\",\n \"m2t\",\n \"av1\",\n \"hevc\",\n \"m3u\",\n \"m3u8\",\n\n // 🗃️ Archive & Compression\n \"zip\",\n \"rar\",\n \"7z\",\n \"tar\",\n \"gz\",\n \"bz\",\n \"bz2\",\n \"xz\",\n \"tgz\",\n \"tbz2\",\n \"txz\",\n \"lz\",\n \"lzma\",\n \"z\",\n \"cab\",\n \"arj\",\n \"ace\",\n \"rpm\",\n \"deb\",\n \"pkg\",\n \"apk\",\n \"jar\",\n \"war\",\n \"ear\",\n \"sit\",\n \"sitx\",\n \"cpgz\",\n \"tlz\",\n \"tlzma\",\n \"tzo\",\n \"cpio\",\n \"shar\",\n \"bzip\",\n \"gzip\",\n \"7zip\",\n \"rar5\",\n \"tbz\",\n \"txz\",\n\n // 💾 Disk Image\n \"iso\",\n \"img\",\n \"vhd\",\n \"vmdk\",\n \"qcow2\",\n \"vhdx\",\n \"bin\",\n \"cue\",\n \"nrg\",\n \"daa\",\n \"sdi\",\n \"vfd\",\n \"ima\",\n \"dmg\",\n \"vdi\",\n \"toast\",\n \"ccd\",\n \"mdf\",\n \"cdi\",\n \"bif\",\n \"bifc\",\n \"bifd\",\n\n // 🗃️ Database & Data\n \"sql\",\n \"db\",\n \"dbf\",\n \"mdb\",\n \"accdb\",\n \"json\",\n \"toml\",\n \"ini\",\n \"log\",\n \"plist\",\n \"pkl\",\n \"msgpack\",\n \"h5\",\n \"hdf5\",\n \"parquet\",\n \"avro\",\n \"orc\",\n \"ndjson\",\n \"pdb\",\n \"sqlite\",\n \"sqlite3\",\n \"dbx\",\n \"sdf\",\n \"nc\",\n \"netcdf\",\n \"grib\",\n \"geojson\",\n \"gml\",\n \"hjson\",\n \"cdb\",\n \"db3\",\n \"dta\",\n \"sav\",\n \"sas7bdat\",\n \"ldif\",\n \"fdb\",\n \"gdb\",\n \"sqlite2\",\n \"h5ad\",\n \"nc4\",\n \"xmind\",\n \"drawio\",\n \"sdc\",\n \"jsonl\",\n \"yaml\",\n \"yml\",\n \"toml\",\n\n // 💻 Code & Script\n \"js\",\n \"jsx\",\n \"ts\",\n \"tsx\",\n \"c\",\n \"cpp\",\n \"net\",\n \"h\",\n \"hpp\",\n \"java\",\n \"py\",\n \"rb\",\n \"go\",\n \"rs\",\n \"php\",\n \"pl\",\n \"sh\",\n \"bat\",\n \"cmd\",\n \"ps1\",\n \"lua\",\n \"swift\",\n \"kt\",\n \"scala\",\n \"cs\",\n \"vb\",\n \"dart\",\n \"m\",\n \"r\",\n \"jl\",\n \"fs\",\n \"vbproj\",\n \"sln\",\n \"pri\",\n \"gemspec\",\n \"gradle\",\n \"coffee\",\n \"erl\",\n \"ex\",\n \"exs\",\n \"hs\",\n \"lisp\",\n \"clj\",\n \"groovy\",\n \"scm\",\n \"vbs\",\n \"nim\",\n \"rkt\",\n \"ml\",\n \"mli\",\n \"fsx\",\n \"psm1\",\n \"cbl\",\n \"for\",\n \"f90\",\n \"lock\",\n \"tsconfig\",\n \"vue\",\n \"svelte\",\n \"cjs\",\n \"mjs\",\n \"mts\",\n \"cts\",\n \"json5\",\n \"es6\",\n \"module\",\n \"systemjs\",\n\n // 🌐 Web & Config\n \"html\",\n \"htm\",\n \"xhtml\",\n \"css\",\n \"scss\",\n \"sass\",\n \"less\",\n \"xml\",\n \"xlf\",\n \"po\",\n \"pot\",\n \"jsp\",\n \"asp\",\n \"aspx\",\n \"jspf\",\n \"cgi\",\n \"cfm\",\n \"env\",\n \"babelrc\",\n \"cfg\",\n \"config\",\n \"conf\",\n \"editorconfig\",\n \"eslintrc\",\n \"gitconfig\",\n \"gitattributes\",\n \"gitignore\",\n \"prettierrc\",\n \"webmanifest\",\n \"dockerfile\",\n // \".dockerfile\",\n\n // 🔠 Font\n \"ttf\",\n \"otf\",\n \"woff\",\n \"woff2\",\n \"eot\",\n \"dfont\",\n \"pfa\",\n \"pfb\",\n \"fon\",\n \"fnt\",\n \"bdf\",\n \"ps\",\n\n // 🗺️ CAD & GIS\n \"dwg\",\n \"dxf\",\n \"shp\",\n \"kml\",\n \"kmz\",\n \"gpx\",\n \"stl\",\n \"step\",\n \"iges\",\n \"igs\",\n \"3ds\",\n \"3dm\",\n \"fbx\",\n \"obj\",\n \"dae\",\n \"ifc\",\n\n // 🔧 System / Binary / Execution\n \"exe\",\n \"msi\",\n \"run\",\n \"com\",\n \"app\",\n \"elf\",\n \"dll\",\n \"so\",\n \"dylib\",\n \"sys\",\n \"scr\",\n \"bin\",\n \"out\",\n\n // 🔐 Certificates / Crypto\n \"pem\",\n \"crt\",\n \"cer\",\n \"der\",\n \"csr\",\n \"p12\",\n \"pfx\",\n \"jks\",\n \"asc\",\n \"gpg\",\n \"pgp\",\n \"p7b\",\n \"p7c\",\n \"spc\",\n \"key\",\n \"pub\",\n \"cert\",\n \"p7m\",\n\n // 🎮 Games & Projects\n \"nes\",\n \"sfc\",\n \"gba\",\n \"nds\",\n \"rom\",\n \"pak\",\n \"vpk\",\n \"bik\",\n \"cso\",\n \"wad\",\n \"wadx\",\n \"smc\",\n \"gb\",\n \"gbc\",\n\n // 🔬 Bioinformatics\n \"fasta\",\n \"fa\",\n \"fas\",\n \"ffn\",\n \"faa\",\n \"fna\",\n \"frn\",\n \"fastq\",\n \"fq\",\n \"bam\",\n \"bed\",\n \"sam\",\n \"vcf\",\n \"gff\",\n \"gff3\",\n \"gtf\",\n \"fai\",\n \"tbi\",\n \"fast5\",\n \"fqz\",\n \"fq5\"\n]);\n\n// ==========================\n// Double extensions\n// ==========================\nexport const DOUBLE_EXTENSIONS_FILE = new Set([\n \"log.gz\",\n \"tar.gz\",\n \"tar.bz2\",\n \"tar.bz\",\n \"tar.xz\",\n \"tar.lz\",\n \"tar.lzma\",\n \"tar.Z\",\n \"tar.zst\",\n \"tar.lz4\",\n \"log.gz\",\n \"sql.gz\",\n \"csv.gz\",\n \"tsv.gz\",\n \"json.gz\",\n \"ndjson.gz\",\n \"fq.gz\",\n \"sam.gz\",\n \"fasta.gz\",\n \"fa.gz\",\n \"ffn.gz\",\n \"faa.gz\",\n \"fna.gz\",\n \"frn.gz\",\n \"fastq.gz\",\n \"js.map\",\n \"css.map\"\n]);\n\n// ==========================\n// Special filenames\n// ==========================\nexport const SPECIAL_FILENAMES = new Set([\n \"Makefile\",\n \"Dockerfile\",\n \".dockerignore\",\n \".npmrc\",\n \".envrc\",\n \".htgroup\",\n \".eslintignore\",\n \".env.test\",\n \".env.local\",\n \".env.production\",\n \".env.development\",\n \".env.example\",\n \".dockerfile\",\n \".htaccess\",\n \".htpasswd\",\n \".babelrc\",\n \".eslintrc\",\n \".editorconfig\",\n \".prettierignore\",\n \"docker-compose.override.yml\",\n \"docker-compose.yml\",\n \"Vagrantfile\",\n \"Procfile\",\n \"Gemfile\",\n \"Rakefile\",\n \"package.json\",\n \"package-lock.json\",\n \"yarn.lock\",\n \"pnpm-lock.yaml\",\n \"tsconfig.json\",\n \"webpack.config.js\",\n \"vite.config.js\",\n \"vite.config.ts\",\n \"Gruntfile.js\",\n \"gulpfile.js\",\n \"babel.config.js\",\n \"babel.js\",\n \"rollup.js\",\n\n // SPECIAL PRESERVE NAME\n \"CON\",\n \"NUL\",\n \"PRN\",\n \"AUX\",\n \"COM1\",\n \"COM2\",\n \"COM3\",\n \"COM4\",\n \"COM5\",\n \"COM6\",\n \"COM7\",\n \"COM8\",\n \"COM9\",\n \"LPT1\",\n \"LPT2\",\n \"LPT3\",\n \"LPT4\",\n \"LPT5\",\n \"LPT6\",\n \"LPT7\",\n \"LPT8\",\n \"LPT9\"\n]);\n","import { isNonEmptyString } from \"@/predicates/is/isNonEmptyString\";\nimport {\n DOUBLE_EXTENSIONS_FILE,\n EXTENSIONS_FILE,\n SPECIAL_FILENAMES\n} from \"./_private/extensions\";\n\nimport { punycodeUtilsJS } from \"@/urls/utils/punyCode\";\n\nimport { assertIsBoolean } from \"@/assertions/booleans/assertIsBoolean\";\nimport { assertIsPlainObject } from \"@/assertions/objects/assertIsPlainObject\";\n\nexport type ExtractFileNameOptions = {\n /** ----------------------------------------------------------\n * * ***Indicates whether the input should be treated as a potential domain string.***\n * ----------------------------------------------------------\n *\n * - Behavior when `true`:\n * - The `domainName` option is required and must be a string and non-empty string.\n * If `domainName` is `undefined`, `null`, or an empty string, a `TypeError` will be thrown.\n * - The `domainName` is used to determine if the input is a domain-only string.\n * - Returns `null` if the input exactly matches `domainName` or any of its subdomains **and** has no additional path or filename.\n * - If the input does not match `domainName` or its subdomains, it will be processed as a regular file-like name.\n * - Supports **Unicode/IDN domains** (e.g., `tést-ドメイン.com`) and **ASCII filenames**, mixed safely.\n *\n * @default false\n */\n domainAware?: boolean;\n\n /** ----------------------------------------------------------\n * * ***The base domain name used for comparison (e.g., `\"example.com\"`).***\n * ----------------------------------------------------------\n *\n * - Required when `domainAware` is `true`.\n * - Helps differentiate between a domain-only input (ignored) and a standalone file-like string (processed normally).\n * - Must be a string and non-empty string. Invalid values (`undefined`, `null`, or empty string) will trigger a `TypeError`.\n * - Works with both **ASCII domains** and **Unicode/IDN domains**.\n * - Example:\n * ```ts *\n * // ASCII domain + ASCII filename\n * extractFileName(\"resume.com\", {\n * domainAware: true,\n * domainName: \"example.com\"\n * });\n * // ➔ \"resume\"\n * extractFileName(\"example.com\", {\n * domainAware: true,\n * domainName: \"example.com\"\n * });\n * // ➔ null (because input is treated as domain-name)\n *\n * // Unicode domain + ASCII filename\n * extractFileName(\"tést-ドメイン.com/file.txt\", {\n * domainAware: true,\n * domainName: \"ドメイン.com\"\n * });\n * // ➔ \"file\"\n *\n * // Unicode domain + Unicode filename\n * extractFileName(\"tést-ドメイン.com/ファイル名.pdf\", {\n * domainAware: true,\n * domainName: \"ドメイン.com\"\n * });\n * // ➔ \"ファイル名\"\n *\n * // Invalid domainName, will throw TypeError\n * extractFileName(\"resume.com\", {\n * domainAware: true,\n * domainName: \"\"\n * });\n * // ➔ TypeError\n * ```\n *\n * @default undefined\n */\n domainName?: string;\n};\n\n/** ----------------------------------------------------------\n * * ***Utility: `extractFileName`.***\n * ----------------------------------------------------------\n *\n * **Extracts the **clean base filename** from nearly any input string, including URLs, local file paths,\n * UNC paths, and plain filenames.**\n *\n * - It automatically safely handles extracts the **base file name** (without extension) from:\n * - File system paths (Windows, Unix, UNC)\n * - Protocols like http, https, ftp, file, mailto, or custom schemes\n * - Percent-encoded, Unicode, and emoji characters\n * - Dotfiles, reserved OS names, multi-part extensions\n * - Data URIs\n * - Optional domain-aware mode to ignore domain-only inputs\n * - Plain filenames\n *\n * - Full support for:\n * - Unicode, emoji, percent-encoding\n * - Dotfiles (e.g., `.env`, `.gitignore`)\n * - Reserved/OS-protected filenames:\n * `CON`, `PRN`, `AUX`, `NUL`, `COM1`–`COM9`, `LPT1`–`LPT9`\n * - Known multi-part extensions:\n * `.tar.gz`, `.tar.bz2`, `.tar.xz`, `.tar.lz`, `.tar.zst`, `.min.js`, `.js.map`, `.log.gz`, `.sql.gz`,\n * `.backup.tar`, etc.\n * - Data URIs (`data:[mime];base64,...` ➔ payload string)\n * - Domain-aware mode (optional)\n *\n * ----------------------------------------------------------\n * - **Behavior / Features**\n * - Strips **known extensions**, including multi-part and common double/triple extensions.\n * - Leaves unknown/custom extensions intact.\n * - Preserves **dotfiles** as-is (leading dot preserved).\n * - Returns `null` if:\n * - input is `null`, `undefined`, or not a string\n * - input is empty, whitespace-only, or only slashes\n * - input represents a folder path (trailing slash/backslash, drive/folder only)\n * - input is a **domain-only string** in domain-aware mode\n * - Normalizes Windows-style backslashes (`\\`) internally as `/`.\n * - Supports UNC paths, mixed slashes, and Windows drive letters safely.\n * - Handles URLs:\n * - Ignores query strings (`?v=1.2.3`) and hash fragments (`#section`)\n * - Decodes percent-encoded filenames (`my%20file.txt` ➔ `my file.txt`)\n * - Supports protocol-relative URLs (`//cdn.example.com/file.jpg`)\n * - Supports uncommon/custom protocols (`ftp://`, `file://`, `mailto:`, etc.)\n * - Handles **multiple dots**, **trailing dots**, **triple or more extensions**\n * - Supports filenames on mixed Unicode/ASCII domains:\n * - Domain names can include Unicode characters (IDN / punycode)\n * - Filenames may contain ASCII, Unicode, and emoji characters\n * - Works correctly when domain is Unicode and filename is ASCII, or vice versa\n * - Supports extremely long filenames safely (up to OS limits)\n * - Domain-aware mode (`domainAware: true` + `domainName`):\n * - Parameter `domainName` must be a string and non-empty string; otherwise a TypeError is thrown.\n * - Returns `null` if input equals `domainName` or any subdomain with no file path\n * - Extracts filename normally if path/file exists on domain or other domain\n * - Safe in Node.js and browsers\n *\n * ----------------------------------------------------------\n * @param {string | null | undefined} input\n * URL, file path, or plain filename to extract from.\n *\n * @param {ExtractFileNameOptions} [options]\n * Optional configuration:\n * - `domainAware?: boolean` – treat input as a domain string. Requires `domainName` to be a string and non-empty string; otherwise, a TypeError is thrown.\n * - `domainName?: string` – base domain for comparison eg (`example.com`), required when `domainAware` is true.\n *\n * @returns {string | null}\n * - Base filename without known extensions\n * - Original filename if extension unknown\n * - `null` for invalid inputs, folder paths, or domain-only strings\n *\n * ----------------------------------------------------------\n * @example\n * ```ts\n * // Basic files\n * extractFileName(\"document.pdf\"); // ➔ \"document\"\n * extractFileName(\"/files/archive.tar.gz\"); // ➔ \"archive\"\n * extractFileName(\"C:\\\\path\\\\file.txt\"); // ➔ \"file\"\n * extractFileName(\".env\"); // ➔ \".env\"\n * extractFileName(\"folder/\"); // ➔ null\n *\n * // Not a file\n * extractFileName(\"not-file\"); // ➔ null\n * extractFileName(\"not-file/\"); // ➔ null\n * extractFileName(\"/not-file/\"); // ➔ null\n * extractFileName(\"/not-file\"); // ➔ null\n *\n * // URLs with queries, hashes, protocols\n * extractFileName(\"https://example.com/file.txt?ver=1\"); // ➔ \"file\"\n * extractFileName(\"https://example.com/archive.tar.gz#part\"); // ➔ \"archive\"\n * extractFileName(\"//cdn.example.com/image.png\"); // ➔ \"image\"\n *\n *\n * // Special protocol handling\n * extractFileName(\"tel:+6212345678\"); // ➔ \"+6212345678\"\n * extractFileName(\"sms:+6212345678\"); // ➔ \"+6212345678\"\n * extractFileName(\"mailto:user@domain.com\"); // ➔ \"user@domain\"\n * extractFileName(\"data:text/plain;base64,SGVsbG8=\"); // ➔ \"SGVsbG8=\"\n * extractFileName(\"mailto:resume.com\"); // ➔ \"resume\"\n * extractFileName(\"ftp://example.com/image.jpeg\"); // ➔ \"image\"\n * extractFileName(\"ftp://files.example.com/app.min.js\"); // ➔ \"app.min\"\n * extractFileName(\"file:///C:/path/to/document.pdf\"); // ➔ \"document\"\n * extractFileName(\"custom-scheme://example.com/video.mp4\"); // ➔ \"video\"\n *\n * // Unicode & emoji\n * extractFileName(\"emoji-😊.png\"); // ➔ \"emoji-😊\"\n * extractFileName(\"🔥project.tar.gz\"); // ➔ \"🔥project\"\n *\n * // Dotfiles\n * extractFileName(\".gitignore\"); // ➔ \".gitignore\"\n * extractFileName(\"/path/.bashrc\"); // ➔ \".bashrc\"\n *\n * // Mixed Unicode domain and ASCII filename\n * extractFileName(\"https://tést-ドメイン.com/file.txt\"); // ➔ \"file\"\n * extractFileName(\"https://example.com/ファイル名.pdf\"); // ➔ \"ファイル名\"\n * extractFileName(\"https://ドメイン例.com/emoji-🔥.png\"); // ➔ \"emoji-🔥\"\n *\n * // Reserved filenames\n * extractFileName(\"CON\"); // ➔ \"CON\"\n * extractFileName(\"NUL.txt\"); // ➔ \"NUL\"\n *\n * // Domain-aware mode\n * extractFileName(\"example.com\", {\n * domainAware: true,\n * domainName: \"example.com\"\n * });\n * // ➔ null\n * extractFileName(\"cdn.example.com\", {\n * domainAware: true,\n * domainName: \"example.com\"\n * });\n * // ➔ null\n * extractFileName(\"resume.com\", {\n * domainAware: true,\n * domainName: \"example.com\"\n * });\n * // ➔ \"resume\"\n * extractFileName(\"https://example.com/file.txt\", {\n * domainAware: true,\n * domainName: \"example.com\"\n * });\n * // ➔ \"file\"\n *\n * // Windows & UNC paths\n * extractFileName(\"C:\\\\Users\\\\rzl\\\\Documents\\\\file.txt\"); // ➔ \"file\"\n * extractFileName(\"\\\\\\\\SERVER\\\\share\\\\logs\\\\output.log\"); // ➔ \"output\"\n * extractFileName(\"C:/Users\\\\rzl/mix\\\\test.pdf\"); // ➔ \"test\"\n *\n * // Edge / extreme cases\n * extractFileName(\"https://example.com/my%20file%20name.txt\"); // ➔ \"my file name\"\n * extractFileName(\"app.min.js.map\"); // ➔ \"app.min\"\n * extractFileName(\"backup.tar.bak\"); // ➔ \"backup.tar.bak\" (unknown double extension)\n * extractFileName(\"filename.\"); // ➔ \"filename.\"\n * extractFileName(\"a\".repeat(255) + \".txt\"); // ➔ \"a\".repeat(255)\n * ```\n *\n * ----------------------------------------------------------\n * @note\n * - Robust: never throws, handles unusual inputs safely.\n * - Suitable for display, logging, or safe storage.\n * - Normalizes slashes consistently.\n * - Covers nearly all real-world filename, URL, path, data URI, and domain scenarios.\n * - Handles Windows UNC paths, mixed slashes, percent-encoded, Unicode/emoji filenames.\n * - Known multi-part extensions list can be extended without breaking functionality.\n */\nexport const extractFileName = (\n input?: string | null,\n options: ExtractFileNameOptions = {}\n): string | null => {\n if (!isNonEmptyString(input)) return null;\n\n assertIsPlainObject(options, {\n message: ({ currentType, validType }) =>\n `Second parameter (\\`options\\`) must be of type \\`${validType}\\`, but received: \\`${currentType}\\`.`\n });\n\n const { domainName, domainAware = false } = options;\n\n assertIsBoolean(domainAware, {\n message: ({ currentType, validType }) =>\n `Parameter \\`domainAware\\` property of the \\`options\\` (second parameter) must be of type \\`${validType}\\`, but received: \\`${currentType}\\`.`\n });\n\n let pathname = input.trim();\n\n // Normalize Windows backslashes\n pathname = pathname.replace(/\\\\/g, \"/\");\n\n // domain-aware mode\n if (domainAware) {\n if (!isNonEmptyString(domainName)) {\n throw new TypeError(\n \"If parameter `domainAware` is set to `true`, the option parameter `domainName` is required as string, and cant be an empty-string.\"\n );\n }\n\n const cleanDomain = punycodeUtilsJS\n .toASCII(domainName)\n .replace(/^https?:\\/\\//i, \"\")\n .replace(/^www\\./, \"\")\n .replace(/\\/.*$/, \"\")\n .toLowerCase();\n\n const inputDomain = punycodeUtilsJS\n .toASCII(input)\n .replace(/^https?:\\/\\//i, \"\")\n .replace(/^www\\./, \"\")\n .toLowerCase();\n\n const inputHost = inputDomain.split(\"/\")[0]?.split(/[?#]/)[0];\n const matchesDomain =\n inputHost === cleanDomain || inputHost?.endsWith(`.${cleanDomain}`);\n const hasPath = /\\/[^/]+$/.test(inputDomain);\n\n if (matchesDomain && !hasPath) return null;\n }\n\n // handle special protocol-like strings\n const protocolMatch = pathname.match(/^([a-zA-Z][a-zA-Z0-9+.-]*):(.+)$/);\n if (protocolMatch) {\n const scheme = protocolMatch[1]?.toLowerCase() || \"\";\n const rest = protocolMatch[2];\n\n if ([\"tel\", \"sms\"].some((sch) => sch.startsWith(scheme))) {\n const clean = rest?.split(\"?\")[0]?.split(\"#\")[0];\n return clean?.trim() || null;\n } else if (scheme === \"mailto\") {\n const parts = rest?.split(\"/\");\n let last = parts?.[parts.length - 1];\n last = last?.split(\"?\")[0]?.split(\"#\")[0]; // strip query/hash\n const dotIndex = last?.lastIndexOf(\".\");\n if (dotIndex && dotIndex > 0) last = last?.slice(0, dotIndex);\n return last || null;\n } else if (scheme === \"data\") {\n const commaIndex = rest?.indexOf(\",\") || -1;\n if (commaIndex === -1) return null;\n let payload = rest?.slice(commaIndex + 1);\n payload = payload?.split?.(\"?\")[0]?.split(\"#\")[0]; // strip query/hash\n return payload?.trim() || null;\n }\n }\n\n if (/^[a-z][a-z\\d+\\-.]*:\\/{3,}/i.test(pathname)) {\n // eg https:///file.txt (has more than 2 slash after : protocol)\n pathname = pathname.replace(/^[a-z][a-z\\d+\\-.]*:\\/{2,}/i, \"\");\n } else {\n try {\n const isProbablyUrl = /^[a-z][a-z\\d+\\-.]*:(\\/\\/)?/i.test(pathname);\n\n pathname = isProbablyUrl\n ? new URL(pathname).pathname\n : new URL(`http://localhost/${pathname}`).pathname;\n } catch {\n // Fallback for weird URLs like 'https:///file.txt'\n // Remove protocol + any number of slashes\n pathname = pathname.replace(/^[a-z][a-z\\d+\\-.]*:(\\/\\/)?/i, \"\");\n }\n }\n\n // split into non-empty segments\n const segments = pathname.split(\"/\").filter(Boolean);\n\n if (segments.length === 0) return null;\n\n // Take the last segment as candidate filename\n let lastSegment =\n segments[segments.length - 1]?.split(\"?\")[0]?.split(\"#\")[0] || \"\";\n // Strip trailing ? or # that is alone\n lastSegment = lastSegment?.replace(/[?#]+$/, \"\");\n if (!lastSegment) return null;\n\n // Replace encoded slashes and dots\n lastSegment = lastSegment\n .replace(/%2F/gi, \"/\")\n .replace(/%5C/gi, \"\\\\\")\n .replace(/%2E/gi, \".\");\n\n // If replacement introduces new slashes, take the new last segment\n if (lastSegment.includes(\"/\")) {\n const parts = lastSegment.split(\"/\").filter(Boolean);\n lastSegment = parts[parts.length - 1] || \"\";\n }\n\n let filename = decodeURIComponent(lastSegment);\n\n if (!filename) return null;\n\n // Special filenames always returned as-is (even if trailing slash)\n if (SPECIAL_FILENAMES.has(filename)) return filename;\n\n // Dotfiles like \".env\" should be returned as-is (single leading dot, no other dot)\n if (/^\\.[^.\\s][^/]*$/.test(filename)) return filename;\n\n // If the original pathname ends with \"/\" and the last segment doesn't look like a file\n // const originalEndsWithSlash = pathname.endsWith(\"/\");\n if (!filename.includes(\".\")) return null;\n\n // Strip double extensions first\n const sortedDouble = [...DOUBLE_EXTENSIONS_FILE].sort(\n (a, b) => b.length - a.length\n );\n for (const ext of sortedDouble) {\n const dotExt = `.${ext.toLowerCase()}`;\n if (filename.toLowerCase().endsWith(dotExt)) {\n filename = filename.slice(0, filename.length - dotExt.length);\n break;\n }\n }\n\n // Strip single extensions\n const sortedSingle = [...EXTENSIONS_FILE].sort((a, b) => b.length - a.length);\n for (const ext of sortedSingle) {\n const dotExt = `.${ext.toLowerCase()}`;\n if (filename.toLowerCase().endsWith(dotExt)) {\n filename = filename.slice(0, filename.length - dotExt.length);\n break;\n }\n }\n\n return filename || null;\n};\n"],"mappings":";;;;;;;;;;;;;;AAGA,MAAa,kBAAkB,IAAI,IAAI;CAErC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CAGA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CAGA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CAGA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CAGA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CAGA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CAGA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CAGA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CAGA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CAIA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CAGA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CAGA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CAGA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CAGA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CAGA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,CAAC;AAKF,MAAa,yBAAyB,IAAI,IAAI;CAC5C;CACA;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"}
@@ -0,0 +1,50 @@
1
+ /*!
2
+ * ========================================================================
3
+ * @rzl-zone/utils-js
4
+ * ------------------------------------------------------------------------
5
+ * Version: `3.12.1-beta.1`
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 { y as isNonEmptyString } from "./assertIsBoolean-DR1SaXPD.js";
11
+ const parseCurrencyString = (input) => {
12
+ if (!isNonEmptyString(input)) return 0;
13
+ let trimmed = input.trim().replace(/\u00A0/g, "").replace(/\u202F/g, "");
14
+ let isNegative = false;
15
+ if (/^\(.*\)$/.test(trimmed)) {
16
+ isNegative = true;
17
+ trimmed = trimmed.slice(1, -1).trim();
18
+ }
19
+ trimmed = trimmed.replace(/^[-\s]+/, (match) => match.includes("-") ? "-" : "").replace(/[\s.,-]+$/, "");
20
+ isNegative = isNegative || /^-/.test(trimmed) || /^[^\d]*-/.test(trimmed);
21
+ let cleanedNoSpace = trimmed.replace(/[^0-9.,'\s]/g, "").replace(/[\s']/g, "");
22
+ const indianMatches = cleanedNoSpace.match(/,\d{2}/g);
23
+ if (indianMatches && indianMatches.length > 1) cleanedNoSpace = cleanedNoSpace.replace(/,/g, "");
24
+ else {
25
+ const dotCount = (cleanedNoSpace.match(/\./g) || []).length;
26
+ const commaCount = (cleanedNoSpace.match(/,/g) || []).length;
27
+ if (dotCount > 1 && commaCount === 0) cleanedNoSpace = cleanedNoSpace.replace(/\./g, "");
28
+ else if (commaCount > 1 && dotCount === 0) cleanedNoSpace = cleanedNoSpace.replace(/,/g, "");
29
+ else {
30
+ const lastComma = cleanedNoSpace.lastIndexOf(",");
31
+ const lastDot = cleanedNoSpace.lastIndexOf(".");
32
+ if (lastComma > lastDot) cleanedNoSpace = cleanedNoSpace.replace(/\./g, "").replace(",", ".");
33
+ else if (lastDot > lastComma) cleanedNoSpace = cleanedNoSpace.replace(/,/g, "");
34
+ else if (lastComma > lastDot) {
35
+ const beforeDecimal = cleanedNoSpace.slice(0, lastComma).replace(/,/g, "").replace(/\./g, "");
36
+ const afterDecimal = cleanedNoSpace.slice(lastComma + 1);
37
+ cleanedNoSpace = beforeDecimal + "." + afterDecimal;
38
+ } else if (lastDot > lastComma) {
39
+ const beforeDecimal = cleanedNoSpace.slice(0, lastDot).replace(/\./g, "").replace(/,/g, "");
40
+ const afterDecimal = cleanedNoSpace.slice(lastDot + 1);
41
+ cleanedNoSpace = beforeDecimal + "." + afterDecimal;
42
+ } else if (lastComma !== -1) cleanedNoSpace = cleanedNoSpace.replace(/,/g, "");
43
+ else if (lastDot !== -1) cleanedNoSpace = cleanedNoSpace.replace(/\./g, "");
44
+ }
45
+ }
46
+ const num = parseFloat(cleanedNoSpace) || 0;
47
+ return isNegative ? -num : num;
48
+ };
49
+ export { parseCurrencyString as t };
50
+ //# sourceMappingURL=parsing-Cao8b358.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parsing-Cao8b358.js","names":[],"sources":["../src/conversions/currency/parsing.ts"],"sourcesContent":["import { isNonEmptyString } from \"@/predicates/is/isNonEmptyString\";\n\n/** -------------------------------------------------------------\n * * ***Utility: `parseCurrencyString`.***\n * ---------------------------------------------\n * **Parses a human-friendly currency string into a JavaScript number.**\n * - **Supports multi-locale formats:**\n * - ***US:*** `\"15,000.10\"` ➔ `15300.10`.\n * - ***Swiss:*** `\"15'000.10\"` ➔ `15300.10`.\n * - ***French:*** `\"15 000,10\"` ➔ `15300.10`.\n * - ***Indian:*** `\"1,23,456.78\"` ➔ `123456.78`.\n * - ***European:*** `\"151.000,10\"` ➔ `151300.10`.\n * - ***Compact:*** `\"15300000,10\"` ➔ `15300000.10`.\n * - **Features:**\n * - Strips symbols automatically: `\"Rp\"`, `\"$\"`, `\"EUR\"`, `etc`.\n * - Handles bracket negatives: `\"(15.000,10)\"` ➔ `-15300.10`.\n * - Normalizes decimal separator (last dot or comma).\n * - Detects non-breaking spaces (`\\u00A0`, `\\u202F`) often in European data.\n * - Fallback to `0` for empty, invalid, or non-numeric strings.\n * - **How it parses internally:**\n * 1. Removes all characters except digits, `.`, `,`, `'`, `space`,\n * `\\u00A0`, `\\u202F`.\n * 2. Detects bracket (...) as negative.\n * 3. If Indian style (`1,23,456`) detected by multiple ,`\\d{2}`, removes all commas.\n * 4. Otherwise:\n * - If multiple dots & no commas ➔ thousands: removes all `.`.\n * - If multiple commas & no dots ➔ thousands: removes all `,`.\n * - If mixed, treats last `,` or `.` as decimal.\n * 5. Converts final decimal to `.` for JS float.\n * - **Gotchas:**\n * - If both `.` and `,` are present, last occurrence is used as decimal.\n * - For strings like `\"1.121.234,56\"` ➔ decimal is `,`.\n * - For `\"1,121,234.56\"` ➔ decimal is `.`.\n * - For `\"15300000,2121\"` ➔ decimal becomes `.` internally.\n * - **ℹ️ Note:**\n * - You can use this function as a first step to **sanitize currency inputs**\n * before storing into database or doing math.\n * - Always pair this with your formatter for consistent output display.\n * @param {string|null|undefined} input\n * ***Any messy currency string, may contain:***\n * * Currency symbols (`Rp`,`$`, `CHF`, `EUR`).\n * * Thousands separators (`.`, `,`, `'`, `space`, `\\u00A0`, `\\u202F`).\n * * Various decimal formats (`,` or `.`).\n * * Bracket negative: `\"(15.000,10)\"`.\n * @returns {number} JavaScript float representation, will return `0` for invalid, empty, or non-string input.\n * @example\n * ```ts\n * parseCurrencyString(\"Rp 15.300.000,21\");\n * // ➔ 15300000.21\n * parseCurrencyString(\"15 300 000,21\");\n * // ➔ 15300000.21\n * parseCurrencyString(\"CHF 15'300'000.21\");\n * // ➔ 15300000.21\n * parseCurrencyString(\"$15,300,000.21\");\n * // ➔ 15300000.21\n * parseCurrencyString(\"(15.000,10)\");\n * // ➔ -15000.10\n * parseCurrencyString(\"1,23,456.78\");\n * // ➔ 123456.78\n * parseCurrencyString(\"15300000,2121\");\n * // ➔ 15300000.2121\n * parseCurrencyString(\"USD 15 300 000.21\");\n * // ➔ 15300000.21\n * parseCurrencyString(\"\");\n * // ➔ 0\n * parseCurrencyString(\"abc\");\n * // ➔ 0\n * ```\n */\nexport const parseCurrencyString = (\n input: string | null | undefined\n): number => {\n if (!isNonEmptyString(input)) return 0;\n\n let trimmed = input\n .trim()\n .replace(/\\u00A0/g, \"\")\n .replace(/\\u202F/g, \"\");\n\n // detect brackets (accounting style)\n let isNegative = false;\n if (/^\\(.*\\)$/.test(trimmed)) {\n isNegative = true;\n trimmed = trimmed.slice(1, -1).trim();\n }\n\n trimmed = trimmed\n .replace(/^[-\\s]+/, (match) => (match.includes(\"-\") ? \"-\" : \"\"))\n .replace(/[\\s.,-]+$/, \"\");\n\n isNegative = isNegative || /^-/.test(trimmed) || /^[^\\d]*-/.test(trimmed);\n const cleaned = trimmed.replace(/[^0-9.,'\\s]/g, \"\");\n let cleanedNoSpace = cleaned.replace(/[\\s']/g, \"\");\n\n // detect Indian style (like 1,23,456)\n const indianMatches = cleanedNoSpace.match(/,\\d{2}/g);\n const isIndianStyle = indianMatches && indianMatches.length > 1;\n if (isIndianStyle) {\n cleanedNoSpace = cleanedNoSpace.replace(/,/g, \"\");\n } else {\n const dotCount = (cleanedNoSpace.match(/\\./g) || []).length;\n const commaCount = (cleanedNoSpace.match(/,/g) || []).length;\n\n if (dotCount > 1 && commaCount === 0) {\n // e.g. \"1.121.234\"\n cleanedNoSpace = cleanedNoSpace.replace(/\\./g, \"\");\n } else if (commaCount > 1 && dotCount === 0) {\n // e.g. \"1,121,234\"\n cleanedNoSpace = cleanedNoSpace.replace(/,/g, \"\");\n } else {\n // mixed, or single\n const lastComma = cleanedNoSpace.lastIndexOf(\",\");\n const lastDot = cleanedNoSpace.lastIndexOf(\".\");\n\n if (lastComma > lastDot) {\n // comma likely decimal\n cleanedNoSpace = cleanedNoSpace.replace(/\\./g, \"\").replace(\",\", \".\");\n } else if (lastDot > lastComma) {\n // dot likely decimal\n cleanedNoSpace = cleanedNoSpace.replace(/,/g, \"\");\n } else {\n if (lastComma > lastDot) {\n // comma is likely decimal\n const beforeDecimal = cleanedNoSpace\n .slice(0, lastComma)\n .replace(/,/g, \"\")\n .replace(/\\./g, \"\");\n const afterDecimal = cleanedNoSpace.slice(lastComma + 1);\n cleanedNoSpace = beforeDecimal + \".\" + afterDecimal;\n } else if (lastDot > lastComma) {\n // dot is likely decimal\n const beforeDecimal = cleanedNoSpace\n .slice(0, lastDot)\n .replace(/\\./g, \"\")\n .replace(/,/g, \"\");\n const afterDecimal = cleanedNoSpace.slice(lastDot + 1);\n cleanedNoSpace = beforeDecimal + \".\" + afterDecimal;\n } else if (lastComma !== -1) {\n cleanedNoSpace = cleanedNoSpace.replace(/,/g, \"\");\n } else if (lastDot !== -1) {\n cleanedNoSpace = cleanedNoSpace.replace(/\\./g, \"\");\n }\n }\n }\n }\n\n const num = parseFloat(cleanedNoSpace) || 0;\n return isNegative ? -num : num;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqEA,MAAa,uBACX,UACW;CACX,IAAI,CAAC,iBAAiB,MAAM,EAAE,OAAO;CAErC,IAAI,UAAU,MACX,MAAM,CACN,QAAQ,WAAW,GAAG,CACtB,QAAQ,WAAW,GAAG;CAGzB,IAAI,aAAa;CACjB,IAAI,WAAW,KAAK,QAAQ,EAAE;EAC5B,aAAa;EACb,UAAU,QAAQ,MAAM,GAAG,GAAG,CAAC,MAAM;;CAGvC,UAAU,QACP,QAAQ,YAAY,UAAW,MAAM,SAAS,IAAI,GAAG,MAAM,GAAI,CAC/D,QAAQ,aAAa,GAAG;CAE3B,aAAa,cAAc,KAAK,KAAK,QAAQ,IAAI,WAAW,KAAK,QAAQ;CAEzE,IAAI,iBADY,QAAQ,QAAQ,gBAAgB,GACpB,CAAC,QAAQ,UAAU,GAAG;CAGlD,MAAM,gBAAgB,eAAe,MAAM,UAAU;CAErD,IADsB,iBAAiB,cAAc,SAAS,GAE5D,iBAAiB,eAAe,QAAQ,MAAM,GAAG;MAC5C;EACL,MAAM,YAAY,eAAe,MAAM,MAAM,IAAI,EAAE,EAAE;EACrD,MAAM,cAAc,eAAe,MAAM,KAAK,IAAI,EAAE,EAAE;EAEtD,IAAI,WAAW,KAAK,eAAe,GAEjC,iBAAiB,eAAe,QAAQ,OAAO,GAAG;OAC7C,IAAI,aAAa,KAAK,aAAa,GAExC,iBAAiB,eAAe,QAAQ,MAAM,GAAG;OAC5C;GAEL,MAAM,YAAY,eAAe,YAAY,IAAI;GACjD,MAAM,UAAU,eAAe,YAAY,IAAI;GAE/C,IAAI,YAAY,SAEd,iBAAiB,eAAe,QAAQ,OAAO,GAAG,CAAC,QAAQ,KAAK,IAAI;QAC/D,IAAI,UAAU,WAEnB,iBAAiB,eAAe,QAAQ,MAAM,GAAG;QAEjD,IAAI,YAAY,SAAS;IAEvB,MAAM,gBAAgB,eACnB,MAAM,GAAG,UAAU,CACnB,QAAQ,MAAM,GAAG,CACjB,QAAQ,OAAO,GAAG;IACrB,MAAM,eAAe,eAAe,MAAM,YAAY,EAAE;IACxD,iBAAiB,gBAAgB,MAAM;UAClC,IAAI,UAAU,WAAW;IAE9B,MAAM,gBAAgB,eACnB,MAAM,GAAG,QAAQ,CACjB,QAAQ,OAAO,GAAG,CAClB,QAAQ,MAAM,GAAG;IACpB,MAAM,eAAe,eAAe,MAAM,UAAU,EAAE;IACtD,iBAAiB,gBAAgB,MAAM;UAClC,IAAI,cAAc,IACvB,iBAAiB,eAAe,QAAQ,MAAM,GAAG;QAC5C,IAAI,YAAY,IACrB,iBAAiB,eAAe,QAAQ,OAAO,GAAG;;;CAM1D,MAAM,MAAM,WAAW,eAAe,IAAI;CAC1C,OAAO,aAAa,CAAC,MAAM"}
@@ -0,0 +1,56 @@
1
+ /*!
2
+ * ========================================================================
3
+ * @rzl-zone/utils-js
4
+ * ------------------------------------------------------------------------
5
+ * Version: `3.12.1-beta.1`
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-C8WEXVr2.cjs');
12
+ const parseCurrencyString = (input) => {
13
+ if (!require_assertIsBoolean.isNonEmptyString(input)) return 0;
14
+ let trimmed = input.trim().replace(/\u00A0/g, "").replace(/\u202F/g, "");
15
+ let isNegative = false;
16
+ if (/^\(.*\)$/.test(trimmed)) {
17
+ isNegative = true;
18
+ trimmed = trimmed.slice(1, -1).trim();
19
+ }
20
+ trimmed = trimmed.replace(/^[-\s]+/, (match) => match.includes("-") ? "-" : "").replace(/[\s.,-]+$/, "");
21
+ isNegative = isNegative || /^-/.test(trimmed) || /^[^\d]*-/.test(trimmed);
22
+ let cleanedNoSpace = trimmed.replace(/[^0-9.,'\s]/g, "").replace(/[\s']/g, "");
23
+ const indianMatches = cleanedNoSpace.match(/,\d{2}/g);
24
+ if (indianMatches && indianMatches.length > 1) cleanedNoSpace = cleanedNoSpace.replace(/,/g, "");
25
+ else {
26
+ const dotCount = (cleanedNoSpace.match(/\./g) || []).length;
27
+ const commaCount = (cleanedNoSpace.match(/,/g) || []).length;
28
+ if (dotCount > 1 && commaCount === 0) cleanedNoSpace = cleanedNoSpace.replace(/\./g, "");
29
+ else if (commaCount > 1 && dotCount === 0) cleanedNoSpace = cleanedNoSpace.replace(/,/g, "");
30
+ else {
31
+ const lastComma = cleanedNoSpace.lastIndexOf(",");
32
+ const lastDot = cleanedNoSpace.lastIndexOf(".");
33
+ if (lastComma > lastDot) cleanedNoSpace = cleanedNoSpace.replace(/\./g, "").replace(",", ".");
34
+ else if (lastDot > lastComma) cleanedNoSpace = cleanedNoSpace.replace(/,/g, "");
35
+ else if (lastComma > lastDot) {
36
+ const beforeDecimal = cleanedNoSpace.slice(0, lastComma).replace(/,/g, "").replace(/\./g, "");
37
+ const afterDecimal = cleanedNoSpace.slice(lastComma + 1);
38
+ cleanedNoSpace = beforeDecimal + "." + afterDecimal;
39
+ } else if (lastDot > lastComma) {
40
+ const beforeDecimal = cleanedNoSpace.slice(0, lastDot).replace(/\./g, "").replace(/,/g, "");
41
+ const afterDecimal = cleanedNoSpace.slice(lastDot + 1);
42
+ cleanedNoSpace = beforeDecimal + "." + afterDecimal;
43
+ } else if (lastComma !== -1) cleanedNoSpace = cleanedNoSpace.replace(/,/g, "");
44
+ else if (lastDot !== -1) cleanedNoSpace = cleanedNoSpace.replace(/\./g, "");
45
+ }
46
+ }
47
+ const num = parseFloat(cleanedNoSpace) || 0;
48
+ return isNegative ? -num : num;
49
+ };
50
+ Object.defineProperty(exports, 'parseCurrencyString', {
51
+ enumerable: true,
52
+ get: function () {
53
+ return parseCurrencyString;
54
+ }
55
+ });
56
+ //# sourceMappingURL=parsing-DOGSCH6N.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parsing-DOGSCH6N.cjs","names":["isNonEmptyString"],"sources":["../src/conversions/currency/parsing.ts"],"sourcesContent":["import { isNonEmptyString } from \"@/predicates/is/isNonEmptyString\";\n\n/** -------------------------------------------------------------\n * * ***Utility: `parseCurrencyString`.***\n * ---------------------------------------------\n * **Parses a human-friendly currency string into a JavaScript number.**\n * - **Supports multi-locale formats:**\n * - ***US:*** `\"15,000.10\"` ➔ `15300.10`.\n * - ***Swiss:*** `\"15'000.10\"` ➔ `15300.10`.\n * - ***French:*** `\"15 000,10\"` ➔ `15300.10`.\n * - ***Indian:*** `\"1,23,456.78\"` ➔ `123456.78`.\n * - ***European:*** `\"151.000,10\"` ➔ `151300.10`.\n * - ***Compact:*** `\"15300000,10\"` ➔ `15300000.10`.\n * - **Features:**\n * - Strips symbols automatically: `\"Rp\"`, `\"$\"`, `\"EUR\"`, `etc`.\n * - Handles bracket negatives: `\"(15.000,10)\"` ➔ `-15300.10`.\n * - Normalizes decimal separator (last dot or comma).\n * - Detects non-breaking spaces (`\\u00A0`, `\\u202F`) often in European data.\n * - Fallback to `0` for empty, invalid, or non-numeric strings.\n * - **How it parses internally:**\n * 1. Removes all characters except digits, `.`, `,`, `'`, `space`,\n * `\\u00A0`, `\\u202F`.\n * 2. Detects bracket (...) as negative.\n * 3. If Indian style (`1,23,456`) detected by multiple ,`\\d{2}`, removes all commas.\n * 4. Otherwise:\n * - If multiple dots & no commas ➔ thousands: removes all `.`.\n * - If multiple commas & no dots ➔ thousands: removes all `,`.\n * - If mixed, treats last `,` or `.` as decimal.\n * 5. Converts final decimal to `.` for JS float.\n * - **Gotchas:**\n * - If both `.` and `,` are present, last occurrence is used as decimal.\n * - For strings like `\"1.121.234,56\"` ➔ decimal is `,`.\n * - For `\"1,121,234.56\"` ➔ decimal is `.`.\n * - For `\"15300000,2121\"` ➔ decimal becomes `.` internally.\n * - **ℹ️ Note:**\n * - You can use this function as a first step to **sanitize currency inputs**\n * before storing into database or doing math.\n * - Always pair this with your formatter for consistent output display.\n * @param {string|null|undefined} input\n * ***Any messy currency string, may contain:***\n * * Currency symbols (`Rp`,`$`, `CHF`, `EUR`).\n * * Thousands separators (`.`, `,`, `'`, `space`, `\\u00A0`, `\\u202F`).\n * * Various decimal formats (`,` or `.`).\n * * Bracket negative: `\"(15.000,10)\"`.\n * @returns {number} JavaScript float representation, will return `0` for invalid, empty, or non-string input.\n * @example\n * ```ts\n * parseCurrencyString(\"Rp 15.300.000,21\");\n * // ➔ 15300000.21\n * parseCurrencyString(\"15 300 000,21\");\n * // ➔ 15300000.21\n * parseCurrencyString(\"CHF 15'300'000.21\");\n * // ➔ 15300000.21\n * parseCurrencyString(\"$15,300,000.21\");\n * // ➔ 15300000.21\n * parseCurrencyString(\"(15.000,10)\");\n * // ➔ -15000.10\n * parseCurrencyString(\"1,23,456.78\");\n * // ➔ 123456.78\n * parseCurrencyString(\"15300000,2121\");\n * // ➔ 15300000.2121\n * parseCurrencyString(\"USD 15 300 000.21\");\n * // ➔ 15300000.21\n * parseCurrencyString(\"\");\n * // ➔ 0\n * parseCurrencyString(\"abc\");\n * // ➔ 0\n * ```\n */\nexport const parseCurrencyString = (\n input: string | null | undefined\n): number => {\n if (!isNonEmptyString(input)) return 0;\n\n let trimmed = input\n .trim()\n .replace(/\\u00A0/g, \"\")\n .replace(/\\u202F/g, \"\");\n\n // detect brackets (accounting style)\n let isNegative = false;\n if (/^\\(.*\\)$/.test(trimmed)) {\n isNegative = true;\n trimmed = trimmed.slice(1, -1).trim();\n }\n\n trimmed = trimmed\n .replace(/^[-\\s]+/, (match) => (match.includes(\"-\") ? \"-\" : \"\"))\n .replace(/[\\s.,-]+$/, \"\");\n\n isNegative = isNegative || /^-/.test(trimmed) || /^[^\\d]*-/.test(trimmed);\n const cleaned = trimmed.replace(/[^0-9.,'\\s]/g, \"\");\n let cleanedNoSpace = cleaned.replace(/[\\s']/g, \"\");\n\n // detect Indian style (like 1,23,456)\n const indianMatches = cleanedNoSpace.match(/,\\d{2}/g);\n const isIndianStyle = indianMatches && indianMatches.length > 1;\n if (isIndianStyle) {\n cleanedNoSpace = cleanedNoSpace.replace(/,/g, \"\");\n } else {\n const dotCount = (cleanedNoSpace.match(/\\./g) || []).length;\n const commaCount = (cleanedNoSpace.match(/,/g) || []).length;\n\n if (dotCount > 1 && commaCount === 0) {\n // e.g. \"1.121.234\"\n cleanedNoSpace = cleanedNoSpace.replace(/\\./g, \"\");\n } else if (commaCount > 1 && dotCount === 0) {\n // e.g. \"1,121,234\"\n cleanedNoSpace = cleanedNoSpace.replace(/,/g, \"\");\n } else {\n // mixed, or single\n const lastComma = cleanedNoSpace.lastIndexOf(\",\");\n const lastDot = cleanedNoSpace.lastIndexOf(\".\");\n\n if (lastComma > lastDot) {\n // comma likely decimal\n cleanedNoSpace = cleanedNoSpace.replace(/\\./g, \"\").replace(\",\", \".\");\n } else if (lastDot > lastComma) {\n // dot likely decimal\n cleanedNoSpace = cleanedNoSpace.replace(/,/g, \"\");\n } else {\n if (lastComma > lastDot) {\n // comma is likely decimal\n const beforeDecimal = cleanedNoSpace\n .slice(0, lastComma)\n .replace(/,/g, \"\")\n .replace(/\\./g, \"\");\n const afterDecimal = cleanedNoSpace.slice(lastComma + 1);\n cleanedNoSpace = beforeDecimal + \".\" + afterDecimal;\n } else if (lastDot > lastComma) {\n // dot is likely decimal\n const beforeDecimal = cleanedNoSpace\n .slice(0, lastDot)\n .replace(/\\./g, \"\")\n .replace(/,/g, \"\");\n const afterDecimal = cleanedNoSpace.slice(lastDot + 1);\n cleanedNoSpace = beforeDecimal + \".\" + afterDecimal;\n } else if (lastComma !== -1) {\n cleanedNoSpace = cleanedNoSpace.replace(/,/g, \"\");\n } else if (lastDot !== -1) {\n cleanedNoSpace = cleanedNoSpace.replace(/\\./g, \"\");\n }\n }\n }\n }\n\n const num = parseFloat(cleanedNoSpace) || 0;\n return isNegative ? -num : num;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqEA,MAAa,uBACX,UACW;CACX,IAAI,CAACA,yCAAiB,MAAM,EAAE,OAAO;CAErC,IAAI,UAAU,MACX,MAAM,CACN,QAAQ,WAAW,GAAG,CACtB,QAAQ,WAAW,GAAG;CAGzB,IAAI,aAAa;CACjB,IAAI,WAAW,KAAK,QAAQ,EAAE;EAC5B,aAAa;EACb,UAAU,QAAQ,MAAM,GAAG,GAAG,CAAC,MAAM;;CAGvC,UAAU,QACP,QAAQ,YAAY,UAAW,MAAM,SAAS,IAAI,GAAG,MAAM,GAAI,CAC/D,QAAQ,aAAa,GAAG;CAE3B,aAAa,cAAc,KAAK,KAAK,QAAQ,IAAI,WAAW,KAAK,QAAQ;CAEzE,IAAI,iBADY,QAAQ,QAAQ,gBAAgB,GACpB,CAAC,QAAQ,UAAU,GAAG;CAGlD,MAAM,gBAAgB,eAAe,MAAM,UAAU;CAErD,IADsB,iBAAiB,cAAc,SAAS,GAE5D,iBAAiB,eAAe,QAAQ,MAAM,GAAG;MAC5C;EACL,MAAM,YAAY,eAAe,MAAM,MAAM,IAAI,EAAE,EAAE;EACrD,MAAM,cAAc,eAAe,MAAM,KAAK,IAAI,EAAE,EAAE;EAEtD,IAAI,WAAW,KAAK,eAAe,GAEjC,iBAAiB,eAAe,QAAQ,OAAO,GAAG;OAC7C,IAAI,aAAa,KAAK,aAAa,GAExC,iBAAiB,eAAe,QAAQ,MAAM,GAAG;OAC5C;GAEL,MAAM,YAAY,eAAe,YAAY,IAAI;GACjD,MAAM,UAAU,eAAe,YAAY,IAAI;GAE/C,IAAI,YAAY,SAEd,iBAAiB,eAAe,QAAQ,OAAO,GAAG,CAAC,QAAQ,KAAK,IAAI;QAC/D,IAAI,UAAU,WAEnB,iBAAiB,eAAe,QAAQ,MAAM,GAAG;QAEjD,IAAI,YAAY,SAAS;IAEvB,MAAM,gBAAgB,eACnB,MAAM,GAAG,UAAU,CACnB,QAAQ,MAAM,GAAG,CACjB,QAAQ,OAAO,GAAG;IACrB,MAAM,eAAe,eAAe,MAAM,YAAY,EAAE;IACxD,iBAAiB,gBAAgB,MAAM;UAClC,IAAI,UAAU,WAAW;IAE9B,MAAM,gBAAgB,eACnB,MAAM,GAAG,QAAQ,CACjB,QAAQ,OAAO,GAAG,CAClB,QAAQ,MAAM,GAAG;IACpB,MAAM,eAAe,eAAe,MAAM,UAAU,EAAE;IACtD,iBAAiB,gBAAgB,MAAM;UAClC,IAAI,cAAc,IACvB,iBAAiB,eAAe,QAAQ,MAAM,GAAG;QAC5C,IAAI,YAAY,IACrB,iBAAiB,eAAe,QAAQ,OAAO,GAAG;;;CAM1D,MAAM,MAAM,WAAW,eAAe,IAAI;CAC1C,OAAO,aAAa,CAAC,MAAM"}
@@ -1,297 +1,92 @@
1
1
  /*!
2
- * ====================================================
3
- * Rzl Utils-JS.
4
- * ----------------------------------------------------
5
- * Version: 3.12.0.
6
- * Author: Rizalvin Dwiky.
7
- * Repository: https://github.com/rzl-zone/utils-js.
8
- * ====================================================
9
- */
10
- 'use strict';
11
-
12
- var chunk57EPKYID_cjs = require('../chunk-57EPKYID.cjs');
13
- var chunkKHO2SBNA_cjs = require('../chunk-KHO2SBNA.cjs');
14
- var chunkUBHCP4N5_cjs = require('../chunk-UBHCP4N5.cjs');
15
- var chunkQ5IMYDFL_cjs = require('../chunk-Q5IMYDFL.cjs');
16
- var chunkVJDDGRIK_cjs = require('../chunk-VJDDGRIK.cjs');
17
- require('../chunk-HNGGISFL.cjs');
18
- var chunkV3C4FYZL_cjs = require('../chunk-V3C4FYZL.cjs');
19
- var chunkDVMHRLKP_cjs = require('../chunk-DVMHRLKP.cjs');
20
- var chunk2VTDXC3N_cjs = require('../chunk-2VTDXC3N.cjs');
21
- require('../chunk-NYK5K3V2.cjs');
22
- var chunk4YLBKLGS_cjs = require('../chunk-4YLBKLGS.cjs');
23
- require('../chunk-YKQEOO7C.cjs');
24
- var chunkH65I3GRZ_cjs = require('../chunk-H65I3GRZ.cjs');
25
- var chunkKOLEURVT_cjs = require('../chunk-KOLEURVT.cjs');
26
- var chunkTQPGXGKB_cjs = require('../chunk-TQPGXGKB.cjs');
27
- var chunkUDA26MCU_cjs = require('../chunk-UDA26MCU.cjs');
28
- var chunkGKC3UDMC_cjs = require('../chunk-GKC3UDMC.cjs');
29
-
30
- Object.defineProperty(exports, "areArraysEqual", {
31
- enumerable: true,
32
- get: function () { return chunk57EPKYID_cjs.areArraysEqual; }
33
- });
34
- Object.defineProperty(exports, "areObjectsEqual", {
35
- enumerable: true,
36
- get: function () { return chunk57EPKYID_cjs.areObjectsEqual; }
37
- });
38
- Object.defineProperty(exports, "areURLsEqualPath", {
39
- enumerable: true,
40
- get: function () { return chunk57EPKYID_cjs.areURLsEqualPath; }
41
- });
42
- Object.defineProperty(exports, "areURLsIdentical", {
43
- enumerable: true,
44
- get: function () { return chunk57EPKYID_cjs.areURLsIdentical; }
45
- });
46
- Object.defineProperty(exports, "arrayHasAnyMatch", {
47
- enumerable: true,
48
- get: function () { return chunk57EPKYID_cjs.arrayHasAnyMatch; }
49
- });
50
- Object.defineProperty(exports, "doesKeyExist", {
51
- enumerable: true,
52
- get: function () { return chunk57EPKYID_cjs.doesKeyExist; }
53
- });
54
- Object.defineProperty(exports, "isArguments", {
55
- enumerable: true,
56
- get: function () { return chunk57EPKYID_cjs.isArguments; }
57
- });
58
- Object.defineProperty(exports, "isArrayLike", {
59
- enumerable: true,
60
- get: function () { return chunk57EPKYID_cjs.isArrayLike; }
61
- });
62
- Object.defineProperty(exports, "isArrayLikeObject", {
63
- enumerable: true,
64
- get: function () { return chunk57EPKYID_cjs.isArrayLikeObject; }
65
- });
66
- Object.defineProperty(exports, "isCurrencyLike", {
67
- enumerable: true,
68
- get: function () { return chunk57EPKYID_cjs.isCurrencyLike; }
69
- });
70
- Object.defineProperty(exports, "isDeepEqual", {
71
- enumerable: true,
72
- get: function () { return chunk57EPKYID_cjs.isDeepEqual; }
73
- });
74
- Object.defineProperty(exports, "isElement", {
75
- enumerable: true,
76
- get: function () { return chunk57EPKYID_cjs.isElement; }
77
- });
78
- Object.defineProperty(exports, "isEmpty", {
79
- enumerable: true,
80
- get: function () { return chunk57EPKYID_cjs.isEmpty; }
81
- });
82
- Object.defineProperty(exports, "isEmptyDeep", {
83
- enumerable: true,
84
- get: function () { return chunk57EPKYID_cjs.isEmptyDeep; }
85
- });
86
- Object.defineProperty(exports, "isEqualWith", {
87
- enumerable: true,
88
- get: function () { return chunk57EPKYID_cjs.isEqualWith; }
89
- });
90
- Object.defineProperty(exports, "isLength", {
91
- enumerable: true,
92
- get: function () { return chunk57EPKYID_cjs.isLength; }
93
- });
94
- Object.defineProperty(exports, "isMatch", {
95
- enumerable: true,
96
- get: function () { return chunk57EPKYID_cjs.isMatch; }
97
- });
98
- Object.defineProperty(exports, "isMatchWith", {
99
- enumerable: true,
100
- get: function () { return chunk57EPKYID_cjs.isMatchWith; }
101
- });
102
- Object.defineProperty(exports, "isNative", {
103
- enumerable: true,
104
- get: function () { return chunk57EPKYID_cjs.isNative; }
105
- });
106
- Object.defineProperty(exports, "isObjectLoose", {
107
- enumerable: true,
108
- get: function () { return chunk57EPKYID_cjs.isObjectLoose; }
109
- });
110
- Object.defineProperty(exports, "isPropertyKey", {
111
- enumerable: true,
112
- get: function () { return chunk57EPKYID_cjs.isPropertyKey; }
113
- });
114
- Object.defineProperty(exports, "isSafeInteger", {
115
- enumerable: true,
116
- get: function () { return chunk57EPKYID_cjs.isSafeInteger; }
117
- });
118
- Object.defineProperty(exports, "isValidURL", {
119
- enumerable: true,
120
- get: function () { return chunk57EPKYID_cjs.isValidURL; }
121
- });
122
- Object.defineProperty(exports, "isWeakMap", {
123
- enumerable: true,
124
- get: function () { return chunk57EPKYID_cjs.isWeakMap; }
125
- });
126
- Object.defineProperty(exports, "textContainsAll", {
127
- enumerable: true,
128
- get: function () { return chunk57EPKYID_cjs.textContainsAll; }
129
- });
130
- Object.defineProperty(exports, "textContainsAny", {
131
- enumerable: true,
132
- get: function () { return chunk57EPKYID_cjs.textContainsAny; }
133
- });
134
- Object.defineProperty(exports, "isURL", {
135
- enumerable: true,
136
- get: function () { return chunkKHO2SBNA_cjs.isURL; }
137
- });
138
- Object.defineProperty(exports, "isNonEmptyValue", {
139
- enumerable: true,
140
- get: function () { return chunkUBHCP4N5_cjs.isNonEmptyValue; }
141
- });
142
- Object.defineProperty(exports, "isTypedArray", {
143
- enumerable: true,
144
- get: function () { return chunkUBHCP4N5_cjs.isTypedArray; }
145
- });
146
- Object.defineProperty(exports, "isEmptyValue", {
147
- enumerable: true,
148
- get: function () { return chunkQ5IMYDFL_cjs.isEmptyValue; }
149
- });
150
- Object.defineProperty(exports, "isServer", {
151
- enumerable: true,
152
- get: function () { return chunkVJDDGRIK_cjs.isServer; }
153
- });
154
- Object.defineProperty(exports, "isFinite", {
155
- enumerable: true,
156
- get: function () { return chunkV3C4FYZL_cjs.isFinite; }
157
- });
158
- Object.defineProperty(exports, "isInteger", {
159
- enumerable: true,
160
- get: function () { return chunkDVMHRLKP_cjs.isInteger; }
161
- });
162
- Object.defineProperty(exports, "isValidDomain", {
163
- enumerable: true,
164
- get: function () { return chunk2VTDXC3N_cjs.isValidDomain; }
165
- });
166
- Object.defineProperty(exports, "isEmptyString", {
167
- enumerable: true,
168
- get: function () { return chunk4YLBKLGS_cjs.isEmptyString; }
169
- });
170
- Object.defineProperty(exports, "isArrayBuffer", {
171
- enumerable: true,
172
- get: function () { return chunkH65I3GRZ_cjs.isArrayBuffer; }
173
- });
174
- Object.defineProperty(exports, "isEqual", {
175
- enumerable: true,
176
- get: function () { return chunkH65I3GRZ_cjs.isEqual; }
177
- });
178
- Object.defineProperty(exports, "isRegExp", {
179
- enumerable: true,
180
- get: function () { return chunkH65I3GRZ_cjs.isRegExp; }
181
- });
182
- Object.defineProperty(exports, "isEmptyArray", {
183
- enumerable: true,
184
- get: function () { return chunkKOLEURVT_cjs.isEmptyArray; }
185
- });
186
- Object.defineProperty(exports, "isEmptyObject", {
187
- enumerable: true,
188
- get: function () { return chunkKOLEURVT_cjs.isEmptyObject; }
189
- });
190
- Object.defineProperty(exports, "isDate", {
191
- enumerable: true,
192
- get: function () { return chunkTQPGXGKB_cjs.isDate; }
193
- });
194
- Object.defineProperty(exports, "isMap", {
195
- enumerable: true,
196
- get: function () { return chunkTQPGXGKB_cjs.isMap; }
197
- });
198
- Object.defineProperty(exports, "isBigInt", {
199
- enumerable: true,
200
- get: function () { return chunkUDA26MCU_cjs.isBigInt; }
201
- });
202
- Object.defineProperty(exports, "getPreciseType", {
203
- enumerable: true,
204
- get: function () { return chunkGKC3UDMC_cjs.getPreciseType; }
205
- });
206
- Object.defineProperty(exports, "hasOwnProp", {
207
- enumerable: true,
208
- get: function () { return chunkGKC3UDMC_cjs.hasOwnProp; }
209
- });
210
- Object.defineProperty(exports, "isArray", {
211
- enumerable: true,
212
- get: function () { return chunkGKC3UDMC_cjs.isArray; }
213
- });
214
- Object.defineProperty(exports, "isBoolean", {
215
- enumerable: true,
216
- get: function () { return chunkGKC3UDMC_cjs.isBoolean; }
217
- });
218
- Object.defineProperty(exports, "isBooleanObject", {
219
- enumerable: true,
220
- get: function () { return chunkGKC3UDMC_cjs.isBooleanObject; }
221
- });
222
- Object.defineProperty(exports, "isBuffer", {
223
- enumerable: true,
224
- get: function () { return chunkGKC3UDMC_cjs.isBuffer; }
225
- });
226
- Object.defineProperty(exports, "isError", {
227
- enumerable: true,
228
- get: function () { return chunkGKC3UDMC_cjs.isError; }
229
- });
230
- Object.defineProperty(exports, "isFunction", {
231
- enumerable: true,
232
- get: function () { return chunkGKC3UDMC_cjs.isFunction; }
233
- });
234
- Object.defineProperty(exports, "isInfinityNumber", {
235
- enumerable: true,
236
- get: function () { return chunkGKC3UDMC_cjs.isInfinityNumber; }
237
- });
238
- Object.defineProperty(exports, "isNaN", {
239
- enumerable: true,
240
- get: function () { return chunkGKC3UDMC_cjs.isNaN; }
241
- });
242
- Object.defineProperty(exports, "isNil", {
243
- enumerable: true,
244
- get: function () { return chunkGKC3UDMC_cjs.isNil; }
245
- });
246
- Object.defineProperty(exports, "isNonEmptyArray", {
247
- enumerable: true,
248
- get: function () { return chunkGKC3UDMC_cjs.isNonEmptyArray; }
249
- });
250
- Object.defineProperty(exports, "isNonEmptyString", {
251
- enumerable: true,
252
- get: function () { return chunkGKC3UDMC_cjs.isNonEmptyString; }
253
- });
254
- Object.defineProperty(exports, "isNull", {
255
- enumerable: true,
256
- get: function () { return chunkGKC3UDMC_cjs.isNull; }
257
- });
258
- Object.defineProperty(exports, "isNumber", {
259
- enumerable: true,
260
- get: function () { return chunkGKC3UDMC_cjs.isNumber; }
261
- });
262
- Object.defineProperty(exports, "isNumberObject", {
263
- enumerable: true,
264
- get: function () { return chunkGKC3UDMC_cjs.isNumberObject; }
265
- });
266
- Object.defineProperty(exports, "isObject", {
267
- enumerable: true,
268
- get: function () { return chunkGKC3UDMC_cjs.isObject; }
269
- });
270
- Object.defineProperty(exports, "isObjectOrArray", {
271
- enumerable: true,
272
- get: function () { return chunkGKC3UDMC_cjs.isObjectOrArray; }
273
- });
274
- Object.defineProperty(exports, "isPlainObject", {
275
- enumerable: true,
276
- get: function () { return chunkGKC3UDMC_cjs.isPlainObject; }
277
- });
278
- Object.defineProperty(exports, "isSet", {
279
- enumerable: true,
280
- get: function () { return chunkGKC3UDMC_cjs.isSet; }
281
- });
282
- Object.defineProperty(exports, "isString", {
283
- enumerable: true,
284
- get: function () { return chunkGKC3UDMC_cjs.isString; }
285
- });
286
- Object.defineProperty(exports, "isStringObject", {
287
- enumerable: true,
288
- get: function () { return chunkGKC3UDMC_cjs.isStringObject; }
289
- });
290
- Object.defineProperty(exports, "isSymbol", {
291
- enumerable: true,
292
- get: function () { return chunkGKC3UDMC_cjs.isSymbol; }
293
- });
294
- Object.defineProperty(exports, "isUndefined", {
295
- enumerable: true,
296
- get: function () { return chunkGKC3UDMC_cjs.isUndefined; }
297
- });
2
+ * ========================================================================
3
+ * @rzl-zone/utils-js
4
+ * ------------------------------------------------------------------------
5
+ * Version: `3.12.1-beta.1`
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
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
12
+ const require_assertIsBoolean = require('../assertIsBoolean-C8WEXVr2.cjs');
13
+ const require_isBigInt = require('../isBigInt-C4krUeAw.cjs');
14
+ const require_isEmptyObject = require('../isEmptyObject-ZkSwRC_D.cjs');
15
+ const require_isFinite = require('../isFinite-D24ZaE6c.cjs');
16
+ const require_safeStableStringify = require('../safeStableStringify-CJtP89qn.cjs');
17
+ const require_isEqual = require('../isEqual-BvumA3RA.cjs');
18
+ const require_isEmptyString = require('../isEmptyString-UiiUsSQj.cjs');
19
+ const require_isEmptyValue = require('../isEmptyValue-BQzcjVaL.cjs');
20
+ const require_isTypedArray = require('../isTypedArray-TJptiw2b.cjs');
21
+ const require_isServer = require('../isServer-BJHVnixd.cjs');
22
+ const require_isInteger = require('../isInteger-Caeuz0rB.cjs');
23
+ const require_predicates = require('../predicates-D0ubqgqy.cjs');
24
+ const require_isURL = require('../isURL-DeUPO_oR.cjs');
25
+ const require_isValidDomain = require('../isValidDomain-BB9IGhJs.cjs');
26
+ exports.areArraysEqual = require_predicates.areArraysEqual;
27
+ exports.areObjectsEqual = require_predicates.areObjectsEqual;
28
+ exports.areURLsEqualPath = require_predicates.areURLsEqualPath;
29
+ exports.areURLsIdentical = require_predicates.areURLsIdentical;
30
+ exports.arrayHasAnyMatch = require_predicates.arrayHasAnyMatch;
31
+ exports.doesKeyExist = require_predicates.doesKeyExist;
32
+ exports.getPreciseType = require_assertIsBoolean.getPreciseType;
33
+ exports.hasOwnProp = require_assertIsBoolean.hasOwnProp;
34
+ exports.isArguments = require_predicates.isArguments;
35
+ exports.isArray = require_assertIsBoolean.isArray;
36
+ exports.isArrayBuffer = require_isEqual.isArrayBuffer;
37
+ exports.isArrayLike = require_predicates.isArrayLike;
38
+ exports.isArrayLikeObject = require_predicates.isArrayLikeObject;
39
+ exports.isBigInt = require_isBigInt.isBigInt;
40
+ exports.isBoolean = require_assertIsBoolean.isBoolean;
41
+ exports.isBooleanObject = require_assertIsBoolean.isBooleanObject;
42
+ exports.isBuffer = require_assertIsBoolean.isBuffer;
43
+ exports.isCurrencyLike = require_predicates.isCurrencyLike;
44
+ exports.isDate = require_safeStableStringify.isDate;
45
+ exports.isDeepEqual = require_predicates.isDeepEqual;
46
+ exports.isElement = require_predicates.isElement;
47
+ exports.isEmpty = require_predicates.isEmpty;
48
+ exports.isEmptyArray = require_isEmptyObject.isEmptyArray;
49
+ exports.isEmptyDeep = require_predicates.isEmptyDeep;
50
+ exports.isEmptyObject = require_isEmptyObject.isEmptyObject;
51
+ exports.isEmptyString = require_isEmptyString.isEmptyString;
52
+ exports.isEmptyValue = require_isEmptyValue.isEmptyValue;
53
+ exports.isEqual = require_isEqual.isEqual;
54
+ exports.isEqualWith = require_predicates.isEqualWith;
55
+ exports.isError = require_assertIsBoolean.isError;
56
+ exports.isFinite = require_isFinite.isFinite;
57
+ exports.isFunction = require_assertIsBoolean.isFunction;
58
+ exports.isInfinityNumber = require_assertIsBoolean.isInfinityNumber;
59
+ exports.isInteger = require_isInteger.isInteger;
60
+ exports.isLength = require_predicates.isLength;
61
+ exports.isMap = require_safeStableStringify.isMap;
62
+ exports.isMatch = require_predicates.isMatch;
63
+ exports.isMatchWith = require_predicates.isMatchWith;
64
+ exports.isNaN = require_assertIsBoolean.isNaN;
65
+ exports.isNative = require_predicates.isNative;
66
+ exports.isNil = require_assertIsBoolean.isNil;
67
+ exports.isNonEmptyArray = require_assertIsBoolean.isNonEmptyArray;
68
+ exports.isNonEmptyString = require_assertIsBoolean.isNonEmptyString;
69
+ exports.isNonEmptyValue = require_isTypedArray.isNonEmptyValue;
70
+ exports.isNull = require_assertIsBoolean.isNull;
71
+ exports.isNumber = require_assertIsBoolean.isNumber;
72
+ exports.isNumberObject = require_assertIsBoolean.isNumberObject;
73
+ exports.isObject = require_assertIsBoolean.isObject;
74
+ exports.isObjectLoose = require_predicates.isObjectLoose;
75
+ exports.isObjectOrArray = require_assertIsBoolean.isObjectOrArray;
76
+ exports.isPlainObject = require_assertIsBoolean.isPlainObject;
77
+ exports.isPropertyKey = require_predicates.isPropertyKey;
78
+ exports.isRegExp = require_isEqual.isRegExp;
79
+ exports.isSafeInteger = require_predicates.isSafeInteger;
80
+ exports.isServer = require_isServer.isServer;
81
+ exports.isSet = require_assertIsBoolean.isSet;
82
+ exports.isString = require_assertIsBoolean.isString;
83
+ exports.isStringObject = require_assertIsBoolean.isStringObject;
84
+ exports.isSymbol = require_assertIsBoolean.isSymbol;
85
+ exports.isTypedArray = require_isTypedArray.isTypedArray;
86
+ exports.isURL = require_isURL.isURL;
87
+ exports.isUndefined = require_assertIsBoolean.isUndefined;
88
+ exports.isValidDomain = require_isValidDomain.isValidDomain;
89
+ exports.isValidURL = require_predicates.isValidURL;
90
+ exports.isWeakMap = require_predicates.isWeakMap;
91
+ exports.textContainsAll = require_predicates.textContainsAll;
92
+ exports.textContainsAny = require_predicates.textContainsAny;