@herowcode/utils 1.3.5 → 1.5.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 (462) hide show
  1. package/dist/api/index.cjs +12 -0
  2. package/dist/api/index.cjs.map +1 -0
  3. package/dist/api/{client.d.ts → index.d.mts} +19 -8
  4. package/dist/api/index.d.ts +36 -3
  5. package/dist/api/index.js +3 -0
  6. package/dist/api/index.js.map +1 -0
  7. package/dist/array/index.cjs +16 -0
  8. package/dist/array/index.cjs.map +1 -0
  9. package/dist/array/index.d.mts +5 -0
  10. package/dist/array/index.d.ts +5 -3
  11. package/dist/array/index.js +3 -0
  12. package/dist/array/index.js.map +1 -0
  13. package/dist/chunk-2MANLCNG.cjs +23 -0
  14. package/dist/chunk-2MANLCNG.cjs.map +1 -0
  15. package/dist/chunk-2RTW37WD.js +20 -0
  16. package/dist/chunk-2RTW37WD.js.map +1 -0
  17. package/dist/chunk-2Y6M7IOG.js +250 -0
  18. package/dist/chunk-2Y6M7IOG.js.map +1 -0
  19. package/dist/chunk-3JUB2OJL.js +3 -0
  20. package/dist/chunk-3JUB2OJL.js.map +1 -0
  21. package/dist/chunk-53JMVGIG.js +187 -0
  22. package/dist/chunk-53JMVGIG.js.map +1 -0
  23. package/dist/chunk-56NHIM5J.js +151 -0
  24. package/dist/chunk-56NHIM5J.js.map +1 -0
  25. package/dist/chunk-5OLQJUNS.js +66 -0
  26. package/dist/chunk-5OLQJUNS.js.map +1 -0
  27. package/dist/chunk-5YOEKMTJ.cjs +321 -0
  28. package/dist/chunk-5YOEKMTJ.cjs.map +1 -0
  29. package/dist/chunk-6TWPZ6LL.cjs +4 -0
  30. package/dist/chunk-6TWPZ6LL.cjs.map +1 -0
  31. package/dist/chunk-AQZBHMTO.js +96 -0
  32. package/dist/chunk-AQZBHMTO.js.map +1 -0
  33. package/dist/chunk-ATWN4SRX.js +29 -0
  34. package/dist/chunk-ATWN4SRX.js.map +1 -0
  35. package/dist/chunk-GRSF4RY2.cjs +20 -0
  36. package/dist/chunk-GRSF4RY2.cjs.map +1 -0
  37. package/dist/chunk-GX5E5B4L.cjs +70 -0
  38. package/dist/chunk-GX5E5B4L.cjs.map +1 -0
  39. package/dist/chunk-HK727IAV.cjs +201 -0
  40. package/dist/chunk-HK727IAV.cjs.map +1 -0
  41. package/dist/chunk-LJ6KOZD4.cjs +154 -0
  42. package/dist/chunk-LJ6KOZD4.cjs.map +1 -0
  43. package/dist/chunk-N2DRAZ3A.cjs +29 -0
  44. package/dist/chunk-N2DRAZ3A.cjs.map +1 -0
  45. package/dist/chunk-O7SH3E3T.js +18 -0
  46. package/dist/chunk-O7SH3E3T.js.map +1 -0
  47. package/dist/chunk-P5YNRND6.cjs +4 -0
  48. package/dist/chunk-P5YNRND6.cjs.map +1 -0
  49. package/dist/chunk-QAE6Q2SA.js +317 -0
  50. package/dist/chunk-QAE6Q2SA.js.map +1 -0
  51. package/dist/chunk-QRXVUXGJ.js +378 -0
  52. package/dist/chunk-QRXVUXGJ.js.map +1 -0
  53. package/dist/chunk-SLYUARZG.cjs +99 -0
  54. package/dist/chunk-SLYUARZG.cjs.map +1 -0
  55. package/dist/chunk-SWRIT7EE.js +3 -0
  56. package/dist/chunk-SWRIT7EE.js.map +1 -0
  57. package/dist/chunk-UXEUYHBD.cjs +401 -0
  58. package/dist/chunk-UXEUYHBD.cjs.map +1 -0
  59. package/dist/chunk-V6OKXUBQ.js +22 -0
  60. package/dist/chunk-V6OKXUBQ.js.map +1 -0
  61. package/dist/chunk-VAZJXZU5.cjs +31 -0
  62. package/dist/chunk-VAZJXZU5.cjs.map +1 -0
  63. package/dist/chunk-WGSFRFRO.cjs +252 -0
  64. package/dist/chunk-WGSFRFRO.cjs.map +1 -0
  65. package/dist/date/index.cjs +56 -0
  66. package/dist/date/index.cjs.map +1 -0
  67. package/dist/date/index.d.mts +63 -0
  68. package/dist/date/index.d.ts +63 -8
  69. package/dist/date/index.js +3 -0
  70. package/dist/date/index.js.map +1 -0
  71. package/dist/extract-youtube-video-id-HSYMYXIZ.js +3 -0
  72. package/dist/extract-youtube-video-id-HSYMYXIZ.js.map +1 -0
  73. package/dist/extract-youtube-video-id-XVGNPUDX.cjs +12 -0
  74. package/dist/extract-youtube-video-id-XVGNPUDX.cjs.map +1 -0
  75. package/dist/files/index.browser.cjs +21 -0
  76. package/dist/files/index.browser.cjs.map +1 -0
  77. package/dist/files/index.browser.d.mts +14 -0
  78. package/dist/files/index.browser.d.ts +14 -0
  79. package/dist/files/index.browser.js +4 -0
  80. package/dist/files/index.browser.js.map +1 -0
  81. package/dist/files/index.cjs +31 -0
  82. package/dist/files/index.cjs.map +1 -0
  83. package/dist/files/index.d.mts +3 -0
  84. package/dist/files/index.d.ts +3 -6
  85. package/dist/files/index.js +6 -0
  86. package/dist/files/index.js.map +1 -0
  87. package/dist/files/index.node.cjs +21 -0
  88. package/dist/files/index.node.cjs.map +1 -0
  89. package/dist/files/index.node.d.mts +7 -0
  90. package/dist/files/index.node.d.ts +7 -0
  91. package/dist/files/index.node.js +4 -0
  92. package/dist/files/index.node.js.map +1 -0
  93. package/dist/format-bytes-BGjeDnvM.d.mts +3 -0
  94. package/dist/format-bytes-BGjeDnvM.d.ts +3 -0
  95. package/dist/function/index.cjs +20 -0
  96. package/dist/function/index.cjs.map +1 -0
  97. package/dist/function/index.d.mts +22 -0
  98. package/dist/function/index.d.ts +22 -4
  99. package/dist/function/index.js +3 -0
  100. package/dist/function/index.js.map +1 -0
  101. package/dist/index.cjs +188 -0
  102. package/dist/index.cjs.map +1 -0
  103. package/dist/index.d.mts +12 -0
  104. package/dist/index.d.ts +12 -8
  105. package/dist/index.js +15 -0
  106. package/dist/index.js.map +1 -0
  107. package/dist/nextjs/index.browser.cjs +110 -0
  108. package/dist/nextjs/index.browser.cjs.map +1 -0
  109. package/dist/nextjs/index.browser.d.mts +10 -0
  110. package/dist/nextjs/index.browser.d.ts +10 -0
  111. package/dist/nextjs/index.browser.js +103 -0
  112. package/dist/nextjs/index.browser.js.map +1 -0
  113. package/dist/string/index.cjs +60 -0
  114. package/dist/string/index.cjs.map +1 -0
  115. package/dist/string/index.d.mts +28 -0
  116. package/dist/string/index.d.ts +28 -14
  117. package/dist/string/index.js +3 -0
  118. package/dist/string/index.js.map +1 -0
  119. package/dist/{cjs/function/try-catch.d.ts → try-catch-B7WzqcPU.d.mts} +4 -4
  120. package/dist/{function/try-catch.d.ts → try-catch-B7WzqcPU.d.ts} +4 -4
  121. package/dist/youtube/index.browser.cjs +35 -0
  122. package/dist/youtube/index.browser.cjs.map +1 -0
  123. package/dist/youtube/index.browser.d.mts +2 -0
  124. package/dist/youtube/index.browser.d.ts +2 -0
  125. package/dist/youtube/index.browser.js +6 -0
  126. package/dist/youtube/index.browser.js.map +1 -0
  127. package/dist/youtube/index.cjs +36 -0
  128. package/dist/youtube/index.cjs.map +1 -0
  129. package/dist/youtube/index.d.mts +12 -0
  130. package/dist/youtube/index.d.ts +12 -7
  131. package/dist/youtube/index.js +7 -0
  132. package/dist/youtube/index.js.map +1 -0
  133. package/dist/youtube/index.node.cjs +26 -0
  134. package/dist/youtube/index.node.cjs.map +1 -0
  135. package/dist/youtube/index.node.d.mts +49 -0
  136. package/dist/youtube/index.node.d.ts +49 -0
  137. package/dist/youtube/index.node.js +5 -0
  138. package/dist/youtube/index.node.js.map +1 -0
  139. package/package.json +164 -49
  140. package/dist/api/client.d.ts.map +0 -1
  141. package/dist/api/index.d.ts.map +0 -1
  142. package/dist/api/wrapper.d.ts +0 -27
  143. package/dist/api/wrapper.d.ts.map +0 -1
  144. package/dist/array/index.d.ts.map +0 -1
  145. package/dist/array/shuffle.d.ts +0 -2
  146. package/dist/array/shuffle.d.ts.map +0 -1
  147. package/dist/array/unique.d.ts +0 -2
  148. package/dist/array/unique.d.ts.map +0 -1
  149. package/dist/cjs/api/client.d.ts +0 -25
  150. package/dist/cjs/api/client.d.ts.map +0 -1
  151. package/dist/cjs/api/client.js +0 -148
  152. package/dist/cjs/api/client.js.map +0 -1
  153. package/dist/cjs/api/index.d.ts +0 -3
  154. package/dist/cjs/api/index.d.ts.map +0 -1
  155. package/dist/cjs/api/index.js +0 -6
  156. package/dist/cjs/api/index.js.map +0 -1
  157. package/dist/cjs/api/wrapper.d.ts +0 -27
  158. package/dist/cjs/api/wrapper.d.ts.map +0 -1
  159. package/dist/cjs/api/wrapper.js +0 -152
  160. package/dist/cjs/api/wrapper.js.map +0 -1
  161. package/dist/cjs/array/index.d.ts +0 -3
  162. package/dist/cjs/array/index.d.ts.map +0 -1
  163. package/dist/cjs/array/index.js +0 -19
  164. package/dist/cjs/array/index.js.map +0 -1
  165. package/dist/cjs/array/shuffle.d.ts +0 -2
  166. package/dist/cjs/array/shuffle.d.ts.map +0 -1
  167. package/dist/cjs/array/shuffle.js +0 -16
  168. package/dist/cjs/array/shuffle.js.map +0 -1
  169. package/dist/cjs/array/unique.d.ts +0 -2
  170. package/dist/cjs/array/unique.d.ts.map +0 -1
  171. package/dist/cjs/array/unique.js +0 -7
  172. package/dist/cjs/array/unique.js.map +0 -1
  173. package/dist/cjs/array.js +0 -1
  174. package/dist/cjs/date/dayjs.d.ts +0 -20
  175. package/dist/cjs/date/dayjs.d.ts.map +0 -1
  176. package/dist/cjs/date/dayjs.js +0 -123
  177. package/dist/cjs/date/dayjs.js.map +0 -1
  178. package/dist/cjs/date/fix-timezone-offset.d.ts +0 -3
  179. package/dist/cjs/date/fix-timezone-offset.d.ts.map +0 -1
  180. package/dist/cjs/date/fix-timezone-offset.js +0 -9
  181. package/dist/cjs/date/fix-timezone-offset.js.map +0 -1
  182. package/dist/cjs/date/format-date.d.ts +0 -23
  183. package/dist/cjs/date/format-date.d.ts.map +0 -1
  184. package/dist/cjs/date/format-date.js +0 -71
  185. package/dist/cjs/date/format-date.js.map +0 -1
  186. package/dist/cjs/date/get-current-date-in-utc.d.ts +0 -3
  187. package/dist/cjs/date/get-current-date-in-utc.d.ts.map +0 -1
  188. package/dist/cjs/date/get-current-date-in-utc.js +0 -8
  189. package/dist/cjs/date/get-current-date-in-utc.js.map +0 -1
  190. package/dist/cjs/date/get-date-in-utc.d.ts +0 -3
  191. package/dist/cjs/date/get-date-in-utc.d.ts.map +0 -1
  192. package/dist/cjs/date/get-date-in-utc.js +0 -8
  193. package/dist/cjs/date/get-date-in-utc.js.map +0 -1
  194. package/dist/cjs/date/get-relative-time.d.ts +0 -3
  195. package/dist/cjs/date/get-relative-time.d.ts.map +0 -1
  196. package/dist/cjs/date/get-relative-time.js +0 -8
  197. package/dist/cjs/date/get-relative-time.js.map +0 -1
  198. package/dist/cjs/date/index.d.ts +0 -8
  199. package/dist/cjs/date/index.d.ts.map +0 -1
  200. package/dist/cjs/date/index.js +0 -24
  201. package/dist/cjs/date/index.js.map +0 -1
  202. package/dist/cjs/date/parse-time-spent.d.ts +0 -15
  203. package/dist/cjs/date/parse-time-spent.d.ts.map +0 -1
  204. package/dist/cjs/date/parse-time-spent.js +0 -207
  205. package/dist/cjs/date/parse-time-spent.js.map +0 -1
  206. package/dist/cjs/date.js +0 -1
  207. package/dist/cjs/files/compress-image.d.ts +0 -10
  208. package/dist/cjs/files/compress-image.d.ts.map +0 -1
  209. package/dist/cjs/files/compress-image.js +0 -61
  210. package/dist/cjs/files/compress-image.js.map +0 -1
  211. package/dist/cjs/files/download-url.d.ts +0 -2
  212. package/dist/cjs/files/download-url.d.ts.map +0 -1
  213. package/dist/cjs/files/download-url.js +0 -29
  214. package/dist/cjs/files/download-url.js.map +0 -1
  215. package/dist/cjs/files/file-delete.d.ts +0 -2
  216. package/dist/cjs/files/file-delete.d.ts.map +0 -1
  217. package/dist/cjs/files/file-delete.js +0 -20
  218. package/dist/cjs/files/file-delete.js.map +0 -1
  219. package/dist/cjs/files/file-exists.d.ts +0 -2
  220. package/dist/cjs/files/file-exists.d.ts.map +0 -1
  221. package/dist/cjs/files/file-exists.js +0 -18
  222. package/dist/cjs/files/file-exists.js.map +0 -1
  223. package/dist/cjs/files/format-bytes.d.ts +0 -2
  224. package/dist/cjs/files/format-bytes.d.ts.map +0 -1
  225. package/dist/cjs/files/format-bytes.js +0 -17
  226. package/dist/cjs/files/format-bytes.js.map +0 -1
  227. package/dist/cjs/files/index.d.ts +0 -6
  228. package/dist/cjs/files/index.d.ts.map +0 -1
  229. package/dist/cjs/files/index.js +0 -22
  230. package/dist/cjs/files/index.js.map +0 -1
  231. package/dist/cjs/files.js +0 -1
  232. package/dist/cjs/function/debounce.d.ts +0 -11
  233. package/dist/cjs/function/debounce.d.ts.map +0 -1
  234. package/dist/cjs/function/debounce.js +0 -26
  235. package/dist/cjs/function/debounce.js.map +0 -1
  236. package/dist/cjs/function/index.d.ts +0 -4
  237. package/dist/cjs/function/index.d.ts.map +0 -1
  238. package/dist/cjs/function/index.js +0 -20
  239. package/dist/cjs/function/index.js.map +0 -1
  240. package/dist/cjs/function/throttle.d.ts +0 -10
  241. package/dist/cjs/function/throttle.d.ts.map +0 -1
  242. package/dist/cjs/function/throttle.js +0 -36
  243. package/dist/cjs/function/throttle.js.map +0 -1
  244. package/dist/cjs/function/try-catch.d.ts.map +0 -1
  245. package/dist/cjs/function/try-catch.js +0 -39
  246. package/dist/cjs/function/try-catch.js.map +0 -1
  247. package/dist/cjs/function.js +0 -1
  248. package/dist/cjs/index.d.ts +0 -8
  249. package/dist/cjs/index.d.ts.map +0 -1
  250. package/dist/cjs/index.js +0 -24
  251. package/dist/cjs/index.js.map +0 -1
  252. package/dist/cjs/string/camel-case.d.ts +0 -2
  253. package/dist/cjs/string/camel-case.d.ts.map +0 -1
  254. package/dist/cjs/string/camel-case.js +0 -25
  255. package/dist/cjs/string/camel-case.js.map +0 -1
  256. package/dist/cjs/string/capitalize.d.ts +0 -2
  257. package/dist/cjs/string/capitalize.d.ts.map +0 -1
  258. package/dist/cjs/string/capitalize.js +0 -13
  259. package/dist/cjs/string/capitalize.js.map +0 -1
  260. package/dist/cjs/string/format-hms-to-seconds.d.ts +0 -2
  261. package/dist/cjs/string/format-hms-to-seconds.d.ts.map +0 -1
  262. package/dist/cjs/string/format-hms-to-seconds.js +0 -30
  263. package/dist/cjs/string/format-hms-to-seconds.js.map +0 -1
  264. package/dist/cjs/string/format-seconds-to-fragment.d.ts +0 -3
  265. package/dist/cjs/string/format-seconds-to-fragment.d.ts.map +0 -1
  266. package/dist/cjs/string/format-seconds-to-fragment.js +0 -20
  267. package/dist/cjs/string/format-seconds-to-fragment.js.map +0 -1
  268. package/dist/cjs/string/format-seconds-to-hms.d.ts +0 -2
  269. package/dist/cjs/string/format-seconds-to-hms.d.ts.map +0 -1
  270. package/dist/cjs/string/format-seconds-to-hms.js +0 -17
  271. package/dist/cjs/string/format-seconds-to-hms.js.map +0 -1
  272. package/dist/cjs/string/format-string-to-time.d.ts +0 -2
  273. package/dist/cjs/string/format-string-to-time.d.ts.map +0 -1
  274. package/dist/cjs/string/format-string-to-time.js +0 -15
  275. package/dist/cjs/string/format-string-to-time.js.map +0 -1
  276. package/dist/cjs/string/index.d.ts +0 -14
  277. package/dist/cjs/string/index.d.ts.map +0 -1
  278. package/dist/cjs/string/index.js +0 -30
  279. package/dist/cjs/string/index.js.map +0 -1
  280. package/dist/cjs/string/kebab-case.d.ts +0 -2
  281. package/dist/cjs/string/kebab-case.d.ts.map +0 -1
  282. package/dist/cjs/string/kebab-case.js +0 -15
  283. package/dist/cjs/string/kebab-case.js.map +0 -1
  284. package/dist/cjs/string/markdown-to-text.d.ts +0 -2
  285. package/dist/cjs/string/markdown-to-text.d.ts.map +0 -1
  286. package/dist/cjs/string/markdown-to-text.js +0 -70
  287. package/dist/cjs/string/markdown-to-text.js.map +0 -1
  288. package/dist/cjs/string/remove-html-tags.d.ts +0 -2
  289. package/dist/cjs/string/remove-html-tags.d.ts.map +0 -1
  290. package/dist/cjs/string/remove-html-tags.js +0 -18
  291. package/dist/cjs/string/remove-html-tags.js.map +0 -1
  292. package/dist/cjs/string/slugify.d.ts +0 -2
  293. package/dist/cjs/string/slugify.d.ts.map +0 -1
  294. package/dist/cjs/string/slugify.js +0 -13
  295. package/dist/cjs/string/slugify.js.map +0 -1
  296. package/dist/cjs/string/snake-case.d.ts +0 -2
  297. package/dist/cjs/string/snake-case.d.ts.map +0 -1
  298. package/dist/cjs/string/snake-case.js +0 -15
  299. package/dist/cjs/string/snake-case.js.map +0 -1
  300. package/dist/cjs/string/to-sentence-case.d.ts +0 -2
  301. package/dist/cjs/string/to-sentence-case.d.ts.map +0 -1
  302. package/dist/cjs/string/to-sentence-case.js +0 -13
  303. package/dist/cjs/string/to-sentence-case.js.map +0 -1
  304. package/dist/cjs/string/truncate.d.ts +0 -2
  305. package/dist/cjs/string/truncate.d.ts.map +0 -1
  306. package/dist/cjs/string/truncate.js +0 -19
  307. package/dist/cjs/string/truncate.js.map +0 -1
  308. package/dist/cjs/string.js +0 -1
  309. package/dist/cjs/youtube/extract-youtube-video-id.d.ts +0 -2
  310. package/dist/cjs/youtube/extract-youtube-video-id.d.ts.map +0 -1
  311. package/dist/cjs/youtube/extract-youtube-video-id.js +0 -30
  312. package/dist/cjs/youtube/extract-youtube-video-id.js.map +0 -1
  313. package/dist/cjs/youtube/generate-youtube-url.d.ts +0 -20
  314. package/dist/cjs/youtube/generate-youtube-url.d.ts.map +0 -1
  315. package/dist/cjs/youtube/generate-youtube-url.js +0 -86
  316. package/dist/cjs/youtube/generate-youtube-url.js.map +0 -1
  317. package/dist/cjs/youtube/get-video-duration.d.ts +0 -7
  318. package/dist/cjs/youtube/get-video-duration.d.ts.map +0 -1
  319. package/dist/cjs/youtube/get-video-duration.js +0 -150
  320. package/dist/cjs/youtube/get-video-duration.js.map +0 -1
  321. package/dist/cjs/youtube/get-youtube-thumbnail.d.ts +0 -2
  322. package/dist/cjs/youtube/get-youtube-thumbnail.d.ts.map +0 -1
  323. package/dist/cjs/youtube/get-youtube-thumbnail.js +0 -68
  324. package/dist/cjs/youtube/get-youtube-thumbnail.js.map +0 -1
  325. package/dist/cjs/youtube/get-youtube-video-info.d.ts +0 -26
  326. package/dist/cjs/youtube/get-youtube-video-info.d.ts.map +0 -1
  327. package/dist/cjs/youtube/get-youtube-video-info.js +0 -244
  328. package/dist/cjs/youtube/get-youtube-video-info.js.map +0 -1
  329. package/dist/cjs/youtube/index.d.ts +0 -7
  330. package/dist/cjs/youtube/index.d.ts.map +0 -1
  331. package/dist/cjs/youtube/index.js +0 -23
  332. package/dist/cjs/youtube/index.js.map +0 -1
  333. package/dist/cjs/youtube/validate-youtube-link.d.ts +0 -2
  334. package/dist/cjs/youtube/validate-youtube-link.d.ts.map +0 -1
  335. package/dist/cjs/youtube/validate-youtube-link.js +0 -77
  336. package/dist/cjs/youtube/validate-youtube-link.js.map +0 -1
  337. package/dist/cjs/youtube.js +0 -1
  338. package/dist/date/dayjs.d.ts +0 -20
  339. package/dist/date/dayjs.d.ts.map +0 -1
  340. package/dist/date/fix-timezone-offset.d.ts +0 -3
  341. package/dist/date/fix-timezone-offset.d.ts.map +0 -1
  342. package/dist/date/format-date.d.ts +0 -23
  343. package/dist/date/format-date.d.ts.map +0 -1
  344. package/dist/date/get-current-date-in-utc.d.ts +0 -3
  345. package/dist/date/get-current-date-in-utc.d.ts.map +0 -1
  346. package/dist/date/get-date-in-utc.d.ts +0 -3
  347. package/dist/date/get-date-in-utc.d.ts.map +0 -1
  348. package/dist/date/get-relative-time.d.ts +0 -3
  349. package/dist/date/get-relative-time.d.ts.map +0 -1
  350. package/dist/date/index.d.ts.map +0 -1
  351. package/dist/date/parse-time-spent.d.ts +0 -15
  352. package/dist/date/parse-time-spent.d.ts.map +0 -1
  353. package/dist/esm/api/client.js +0 -143
  354. package/dist/esm/api/index.js +0 -1
  355. package/dist/esm/api/wrapper.js +0 -148
  356. package/dist/esm/array/index.js +0 -2
  357. package/dist/esm/array/shuffle.js +0 -12
  358. package/dist/esm/array/unique.js +0 -3
  359. package/dist/esm/array.js +0 -1
  360. package/dist/esm/date/dayjs.js +0 -111
  361. package/dist/esm/date/fix-timezone-offset.js +0 -5
  362. package/dist/esm/date/format-date.js +0 -67
  363. package/dist/esm/date/get-current-date-in-utc.js +0 -4
  364. package/dist/esm/date/get-date-in-utc.js +0 -4
  365. package/dist/esm/date/get-relative-time.js +0 -4
  366. package/dist/esm/date/index.js +0 -7
  367. package/dist/esm/date/parse-time-spent.js +0 -203
  368. package/dist/esm/date.js +0 -1
  369. package/dist/esm/files/compress-image.js +0 -57
  370. package/dist/esm/files/download-url.js +0 -24
  371. package/dist/esm/files/file-delete.js +0 -12
  372. package/dist/esm/files/file-exists.js +0 -10
  373. package/dist/esm/files/format-bytes.js +0 -13
  374. package/dist/esm/files/index.js +0 -5
  375. package/dist/esm/files.js +0 -1
  376. package/dist/esm/function/debounce.js +0 -22
  377. package/dist/esm/function/index.js +0 -3
  378. package/dist/esm/function/throttle.js +0 -32
  379. package/dist/esm/function/try-catch.js +0 -35
  380. package/dist/esm/function.js +0 -1
  381. package/dist/esm/index.js +0 -7
  382. package/dist/esm/string/camel-case.js +0 -21
  383. package/dist/esm/string/capitalize.js +0 -9
  384. package/dist/esm/string/format-hms-to-seconds.js +0 -25
  385. package/dist/esm/string/format-seconds-to-fragment.js +0 -15
  386. package/dist/esm/string/format-seconds-to-hms.js +0 -13
  387. package/dist/esm/string/format-string-to-time.js +0 -10
  388. package/dist/esm/string/index.js +0 -13
  389. package/dist/esm/string/kebab-case.js +0 -11
  390. package/dist/esm/string/markdown-to-text.js +0 -66
  391. package/dist/esm/string/remove-html-tags.js +0 -14
  392. package/dist/esm/string/slugify.js +0 -9
  393. package/dist/esm/string/snake-case.js +0 -11
  394. package/dist/esm/string/to-sentence-case.js +0 -9
  395. package/dist/esm/string/truncate.js +0 -15
  396. package/dist/esm/string.js +0 -1
  397. package/dist/esm/youtube/extract-youtube-video-id.js +0 -26
  398. package/dist/esm/youtube/generate-youtube-url.js +0 -81
  399. package/dist/esm/youtube/get-video-duration.js +0 -146
  400. package/dist/esm/youtube/get-youtube-thumbnail.js +0 -31
  401. package/dist/esm/youtube/get-youtube-video-info.js +0 -207
  402. package/dist/esm/youtube/index.js +0 -6
  403. package/dist/esm/youtube/validate-youtube-link.js +0 -40
  404. package/dist/esm/youtube.js +0 -1
  405. package/dist/files/compress-image.d.ts +0 -10
  406. package/dist/files/compress-image.d.ts.map +0 -1
  407. package/dist/files/download-url.d.ts +0 -2
  408. package/dist/files/download-url.d.ts.map +0 -1
  409. package/dist/files/file-delete.d.ts +0 -2
  410. package/dist/files/file-delete.d.ts.map +0 -1
  411. package/dist/files/file-exists.d.ts +0 -2
  412. package/dist/files/file-exists.d.ts.map +0 -1
  413. package/dist/files/format-bytes.d.ts +0 -2
  414. package/dist/files/format-bytes.d.ts.map +0 -1
  415. package/dist/files/index.d.ts.map +0 -1
  416. package/dist/function/debounce.d.ts +0 -11
  417. package/dist/function/debounce.d.ts.map +0 -1
  418. package/dist/function/index.d.ts.map +0 -1
  419. package/dist/function/throttle.d.ts +0 -10
  420. package/dist/function/throttle.d.ts.map +0 -1
  421. package/dist/function/try-catch.d.ts.map +0 -1
  422. package/dist/index.d.ts.map +0 -1
  423. package/dist/string/camel-case.d.ts +0 -2
  424. package/dist/string/camel-case.d.ts.map +0 -1
  425. package/dist/string/capitalize.d.ts +0 -2
  426. package/dist/string/capitalize.d.ts.map +0 -1
  427. package/dist/string/format-hms-to-seconds.d.ts +0 -2
  428. package/dist/string/format-hms-to-seconds.d.ts.map +0 -1
  429. package/dist/string/format-seconds-to-fragment.d.ts +0 -3
  430. package/dist/string/format-seconds-to-fragment.d.ts.map +0 -1
  431. package/dist/string/format-seconds-to-hms.d.ts +0 -2
  432. package/dist/string/format-seconds-to-hms.d.ts.map +0 -1
  433. package/dist/string/format-string-to-time.d.ts +0 -2
  434. package/dist/string/format-string-to-time.d.ts.map +0 -1
  435. package/dist/string/index.d.ts.map +0 -1
  436. package/dist/string/kebab-case.d.ts +0 -2
  437. package/dist/string/kebab-case.d.ts.map +0 -1
  438. package/dist/string/markdown-to-text.d.ts +0 -2
  439. package/dist/string/markdown-to-text.d.ts.map +0 -1
  440. package/dist/string/remove-html-tags.d.ts +0 -2
  441. package/dist/string/remove-html-tags.d.ts.map +0 -1
  442. package/dist/string/slugify.d.ts +0 -2
  443. package/dist/string/slugify.d.ts.map +0 -1
  444. package/dist/string/snake-case.d.ts +0 -2
  445. package/dist/string/snake-case.d.ts.map +0 -1
  446. package/dist/string/to-sentence-case.d.ts +0 -2
  447. package/dist/string/to-sentence-case.d.ts.map +0 -1
  448. package/dist/string/truncate.d.ts +0 -2
  449. package/dist/string/truncate.d.ts.map +0 -1
  450. package/dist/youtube/extract-youtube-video-id.d.ts +0 -2
  451. package/dist/youtube/extract-youtube-video-id.d.ts.map +0 -1
  452. package/dist/youtube/generate-youtube-url.d.ts +0 -20
  453. package/dist/youtube/generate-youtube-url.d.ts.map +0 -1
  454. package/dist/youtube/get-video-duration.d.ts +0 -7
  455. package/dist/youtube/get-video-duration.d.ts.map +0 -1
  456. package/dist/youtube/get-youtube-thumbnail.d.ts +0 -2
  457. package/dist/youtube/get-youtube-thumbnail.d.ts.map +0 -1
  458. package/dist/youtube/get-youtube-video-info.d.ts +0 -26
  459. package/dist/youtube/get-youtube-video-info.d.ts.map +0 -1
  460. package/dist/youtube/index.d.ts.map +0 -1
  461. package/dist/youtube/validate-youtube-link.d.ts +0 -2
  462. package/dist/youtube/validate-youtube-link.d.ts.map +0 -1
@@ -0,0 +1,12 @@
1
+ 'use strict';
2
+
3
+ var chunkWGSFRFRO_cjs = require('../chunk-WGSFRFRO.cjs');
4
+
5
+
6
+
7
+ Object.defineProperty(exports, "apiClient", {
8
+ enumerable: true,
9
+ get: function () { return chunkWGSFRFRO_cjs.apiClient; }
10
+ });
11
+ //# sourceMappingURL=index.cjs.map
12
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.cjs"}
@@ -1,3 +1,14 @@
1
+ import { T as TTryCatchResult } from '../try-catch-B7WzqcPU.mjs';
2
+
3
+ interface IApiError {
4
+ message: string;
5
+ status?: number;
6
+ code?: string;
7
+ details?: unknown;
8
+ path?: string;
9
+ timestamp?: string;
10
+ }
11
+
1
12
  interface ICustomRequestInit extends Omit<RequestInit, "body"> {
2
13
  json?: unknown;
3
14
  params?: Record<string, string | number | boolean | null | undefined>;
@@ -14,12 +25,12 @@ type TApiClientProps = {
14
25
  getAccessToken?: () => Promise<string | null>;
15
26
  getUserIP?: () => Promise<string | undefined>;
16
27
  };
17
- export declare const apiClient: (config?: TApiClientProps) => {
18
- get: <T = unknown>(url: string, options?: ICustomRequestInit) => Promise<import("..").TTryCatchResult<T, import("./wrapper").IApiError, null>>;
19
- post: <T = unknown>(url: string, options?: ICustomRequestInit) => Promise<import("..").TTryCatchResult<T, import("./wrapper").IApiError, null>>;
20
- put: <T = unknown>(url: string, options?: ICustomRequestInit) => Promise<import("..").TTryCatchResult<T, import("./wrapper").IApiError, null>>;
21
- delete: <T = unknown>(url: string, options?: ICustomRequestInit) => Promise<import("..").TTryCatchResult<T, import("./wrapper").IApiError, null>>;
22
- patch: <T = unknown>(url: string, options?: ICustomRequestInit) => Promise<import("..").TTryCatchResult<T, import("./wrapper").IApiError, null>>;
28
+ declare const apiClient: (config?: TApiClientProps) => {
29
+ get: <T = unknown>(url: string, options?: ICustomRequestInit) => Promise<TTryCatchResult<T, IApiError, null>>;
30
+ post: <T = unknown>(url: string, options?: ICustomRequestInit) => Promise<TTryCatchResult<T, IApiError, null>>;
31
+ put: <T = unknown>(url: string, options?: ICustomRequestInit) => Promise<TTryCatchResult<T, IApiError, null>>;
32
+ delete: <T = unknown>(url: string, options?: ICustomRequestInit) => Promise<TTryCatchResult<T, IApiError, null>>;
33
+ patch: <T = unknown>(url: string, options?: ICustomRequestInit) => Promise<TTryCatchResult<T, IApiError, null>>;
23
34
  };
24
- export {};
25
- //# sourceMappingURL=client.d.ts.map
35
+
36
+ export { type IApiError, apiClient };
@@ -1,3 +1,36 @@
1
- export { apiClient } from "./client";
2
- export type { IApiError } from "./wrapper";
3
- //# sourceMappingURL=index.d.ts.map
1
+ import { T as TTryCatchResult } from '../try-catch-B7WzqcPU.js';
2
+
3
+ interface IApiError {
4
+ message: string;
5
+ status?: number;
6
+ code?: string;
7
+ details?: unknown;
8
+ path?: string;
9
+ timestamp?: string;
10
+ }
11
+
12
+ interface ICustomRequestInit extends Omit<RequestInit, "body"> {
13
+ json?: unknown;
14
+ params?: Record<string, string | number | boolean | null | undefined>;
15
+ retry?: {
16
+ limit?: number;
17
+ methods?: string[];
18
+ statusCodes?: number[];
19
+ backoffLimit?: number;
20
+ };
21
+ }
22
+ type TApiClientProps = {
23
+ baseURL?: string;
24
+ onSignoutUnauthorized?: (response?: unknown) => void;
25
+ getAccessToken?: () => Promise<string | null>;
26
+ getUserIP?: () => Promise<string | undefined>;
27
+ };
28
+ declare const apiClient: (config?: TApiClientProps) => {
29
+ get: <T = unknown>(url: string, options?: ICustomRequestInit) => Promise<TTryCatchResult<T, IApiError, null>>;
30
+ post: <T = unknown>(url: string, options?: ICustomRequestInit) => Promise<TTryCatchResult<T, IApiError, null>>;
31
+ put: <T = unknown>(url: string, options?: ICustomRequestInit) => Promise<TTryCatchResult<T, IApiError, null>>;
32
+ delete: <T = unknown>(url: string, options?: ICustomRequestInit) => Promise<TTryCatchResult<T, IApiError, null>>;
33
+ patch: <T = unknown>(url: string, options?: ICustomRequestInit) => Promise<TTryCatchResult<T, IApiError, null>>;
34
+ };
35
+
36
+ export { type IApiError, apiClient };
@@ -0,0 +1,3 @@
1
+ export { apiClient } from '../chunk-2Y6M7IOG.js';
2
+ //# sourceMappingURL=index.js.map
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
@@ -0,0 +1,16 @@
1
+ 'use strict';
2
+
3
+ var chunk2MANLCNG_cjs = require('../chunk-2MANLCNG.cjs');
4
+
5
+
6
+
7
+ Object.defineProperty(exports, "shuffle", {
8
+ enumerable: true,
9
+ get: function () { return chunk2MANLCNG_cjs.shuffle; }
10
+ });
11
+ Object.defineProperty(exports, "unique", {
12
+ enumerable: true,
13
+ get: function () { return chunk2MANLCNG_cjs.unique; }
14
+ });
15
+ //# sourceMappingURL=index.cjs.map
16
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.cjs"}
@@ -0,0 +1,5 @@
1
+ declare function shuffle<T>(array: T[]): T[];
2
+
3
+ declare function unique<T>(array: T[]): T[];
4
+
5
+ export { shuffle, unique };
@@ -1,3 +1,5 @@
1
- export * from "./shuffle";
2
- export * from "./unique";
3
- //# sourceMappingURL=index.d.ts.map
1
+ declare function shuffle<T>(array: T[]): T[];
2
+
3
+ declare function unique<T>(array: T[]): T[];
4
+
5
+ export { shuffle, unique };
@@ -0,0 +1,3 @@
1
+ export { shuffle, unique } from '../chunk-2RTW37WD.js';
2
+ //# sourceMappingURL=index.js.map
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
@@ -0,0 +1,23 @@
1
+ 'use strict';
2
+
3
+ // src/array/shuffle.ts
4
+ function shuffle(array) {
5
+ const shuffled = [...array];
6
+ for (let i = shuffled.length - 1; i > 0; i--) {
7
+ const randomBuffer = new Uint32Array(1);
8
+ crypto.getRandomValues(randomBuffer);
9
+ const j = randomBuffer[0] % (i + 1);
10
+ [shuffled[i], shuffled[j]] = [shuffled[j], shuffled[i]];
11
+ }
12
+ return shuffled;
13
+ }
14
+
15
+ // src/array/unique.ts
16
+ function unique(array) {
17
+ return [...new Set(array)];
18
+ }
19
+
20
+ exports.shuffle = shuffle;
21
+ exports.unique = unique;
22
+ //# sourceMappingURL=chunk-2MANLCNG.cjs.map
23
+ //# sourceMappingURL=chunk-2MANLCNG.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/array/shuffle.ts","../src/array/unique.ts"],"names":[],"mappings":";;;AAAO,SAAS,QAAW,KAAA,EAAiB;AAC1C,EAAA,MAAM,QAAA,GAAW,CAAC,GAAG,KAAK,CAAA;AAC1B,EAAA,KAAA,IAAS,IAAI,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG,CAAA,GAAI,GAAG,CAAA,EAAA,EAAK;AAE5C,IAAA,MAAM,YAAA,GAAe,IAAI,WAAA,CAAY,CAAC,CAAA;AACtC,IAAA,MAAA,CAAO,gBAAgB,YAAY,CAAA;AAGnC,IAAA,MAAM,CAAA,GAAI,YAAA,CAAa,CAAC,CAAA,IAAK,CAAA,GAAI,CAAA,CAAA;AAGhC,IAAA,CAAC,QAAA,CAAS,CAAC,CAAA,EAAG,QAAA,CAAS,CAAC,CAAC,CAAA,GAAI,CAAC,QAAA,CAAS,CAAC,CAAA,EAAG,QAAA,CAAS,CAAC,CAAC,CAAA;AAAA,EACzD;AACA,EAAA,OAAO,QAAA;AACT;;;ACdO,SAAS,OAAU,KAAA,EAAiB;AACzC,EAAA,OAAO,CAAC,GAAG,IAAI,GAAA,CAAI,KAAK,CAAC,CAAA;AAC3B","file":"chunk-2MANLCNG.cjs","sourcesContent":["export function shuffle<T>(array: T[]): T[] {\n const shuffled = [...array]\n for (let i = shuffled.length - 1; i > 0; i--) {\n // Get cryptographically strong random values\n const randomBuffer = new Uint32Array(1)\n crypto.getRandomValues(randomBuffer)\n\n // Use modulo to get a value in our range\n const j = randomBuffer[0] % (i + 1)\n\n // Swap elements\n ;[shuffled[i], shuffled[j]] = [shuffled[j], shuffled[i]]\n }\n return shuffled\n}\n","export function unique<T>(array: T[]): T[] {\n return [...new Set(array)]\n}\n"]}
@@ -0,0 +1,20 @@
1
+ // src/array/shuffle.ts
2
+ function shuffle(array) {
3
+ const shuffled = [...array];
4
+ for (let i = shuffled.length - 1; i > 0; i--) {
5
+ const randomBuffer = new Uint32Array(1);
6
+ crypto.getRandomValues(randomBuffer);
7
+ const j = randomBuffer[0] % (i + 1);
8
+ [shuffled[i], shuffled[j]] = [shuffled[j], shuffled[i]];
9
+ }
10
+ return shuffled;
11
+ }
12
+
13
+ // src/array/unique.ts
14
+ function unique(array) {
15
+ return [...new Set(array)];
16
+ }
17
+
18
+ export { shuffle, unique };
19
+ //# sourceMappingURL=chunk-2RTW37WD.js.map
20
+ //# sourceMappingURL=chunk-2RTW37WD.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/array/shuffle.ts","../src/array/unique.ts"],"names":[],"mappings":";AAAO,SAAS,QAAW,KAAA,EAAiB;AAC1C,EAAA,MAAM,QAAA,GAAW,CAAC,GAAG,KAAK,CAAA;AAC1B,EAAA,KAAA,IAAS,IAAI,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG,CAAA,GAAI,GAAG,CAAA,EAAA,EAAK;AAE5C,IAAA,MAAM,YAAA,GAAe,IAAI,WAAA,CAAY,CAAC,CAAA;AACtC,IAAA,MAAA,CAAO,gBAAgB,YAAY,CAAA;AAGnC,IAAA,MAAM,CAAA,GAAI,YAAA,CAAa,CAAC,CAAA,IAAK,CAAA,GAAI,CAAA,CAAA;AAGhC,IAAA,CAAC,QAAA,CAAS,CAAC,CAAA,EAAG,QAAA,CAAS,CAAC,CAAC,CAAA,GAAI,CAAC,QAAA,CAAS,CAAC,CAAA,EAAG,QAAA,CAAS,CAAC,CAAC,CAAA;AAAA,EACzD;AACA,EAAA,OAAO,QAAA;AACT;;;ACdO,SAAS,OAAU,KAAA,EAAiB;AACzC,EAAA,OAAO,CAAC,GAAG,IAAI,GAAA,CAAI,KAAK,CAAC,CAAA;AAC3B","file":"chunk-2RTW37WD.js","sourcesContent":["export function shuffle<T>(array: T[]): T[] {\n const shuffled = [...array]\n for (let i = shuffled.length - 1; i > 0; i--) {\n // Get cryptographically strong random values\n const randomBuffer = new Uint32Array(1)\n crypto.getRandomValues(randomBuffer)\n\n // Use modulo to get a value in our range\n const j = randomBuffer[0] % (i + 1)\n\n // Swap elements\n ;[shuffled[i], shuffled[j]] = [shuffled[j], shuffled[i]]\n }\n return shuffled\n}\n","export function unique<T>(array: T[]): T[] {\n return [...new Set(array)]\n}\n"]}
@@ -0,0 +1,250 @@
1
+ import { isAxiosError } from 'axios';
2
+
3
+ // src/api/wrapper.ts
4
+ async function extractAxiosErrorDetails(error) {
5
+ var _a, _b, _c;
6
+ const errorObj = {
7
+ message: error.message || "Axios Error",
8
+ status: (_a = error.response) == null ? void 0 : _a.status,
9
+ path: (_b = error.config) == null ? void 0 : _b.url
10
+ };
11
+ if (((_c = error.response) == null ? void 0 : _c.data) && typeof error.response.data === "object") {
12
+ return await enrichErrorWithData(
13
+ errorObj,
14
+ Promise.resolve(error.response.data)
15
+ );
16
+ }
17
+ return errorObj;
18
+ }
19
+ function extractStandardErrorDetails(error) {
20
+ const errorObj = {
21
+ message: error.message
22
+ };
23
+ const extendedError = error;
24
+ if (extendedError.code) errorObj.code = String(extendedError.code);
25
+ if (extendedError.status) errorObj.status = Number(extendedError.status);
26
+ if (extendedError.details) errorObj.details = extendedError.details;
27
+ return errorObj;
28
+ }
29
+ async function extractResponseErrorDetails(response) {
30
+ const errorObj = {
31
+ message: `HTTP Error ${response.status}: ${response.statusText}`,
32
+ status: response.status,
33
+ path: response.url
34
+ };
35
+ try {
36
+ const clonedResponse = response.clone();
37
+ const errorData = await clonedResponse.json();
38
+ if (errorData && typeof errorData === "object") {
39
+ if ("message" in errorData && errorData.message) {
40
+ errorObj.message = String(errorData.message);
41
+ }
42
+ if ("code" in errorData) {
43
+ errorObj.code = String(errorData.code);
44
+ }
45
+ if ("details" in errorData) {
46
+ errorObj.details = errorData.details;
47
+ } else if ("issues" in errorData) {
48
+ errorObj.details = errorData.issues;
49
+ }
50
+ if ("timestamp" in errorData) {
51
+ errorObj.timestamp = String(errorData.timestamp);
52
+ }
53
+ }
54
+ return errorObj;
55
+ } catch (e) {
56
+ return errorObj;
57
+ }
58
+ }
59
+ async function enrichErrorWithData(errorObj, errorData, path) {
60
+ const data = await errorData;
61
+ if (data) {
62
+ if ("message" in data) {
63
+ errorObj.message = String(data.message);
64
+ }
65
+ if ("code" in data) {
66
+ errorObj.code = String(data.code);
67
+ }
68
+ if ("details" in data) {
69
+ errorObj.details = data.details;
70
+ } else if ("issues" in data) {
71
+ errorObj.details = data.issues;
72
+ }
73
+ if ("timestamp" in data) {
74
+ errorObj.timestamp = String(data.timestamp);
75
+ }
76
+ }
77
+ return errorObj;
78
+ }
79
+ async function processError(error) {
80
+ if (error instanceof Response) {
81
+ return extractResponseErrorDetails(error);
82
+ }
83
+ if (isAxiosError(error)) {
84
+ return extractAxiosErrorDetails(error);
85
+ }
86
+ if (error instanceof Error) {
87
+ return extractStandardErrorDetails(error);
88
+ }
89
+ return {
90
+ message: error ? JSON.stringify(error) : "Unknown error"
91
+ };
92
+ }
93
+ async function apiWrapper(apiCall, defaultData) {
94
+ try {
95
+ const data = await apiCall();
96
+ return {
97
+ data,
98
+ error: null
99
+ };
100
+ } catch (error) {
101
+ const errorObj = await processError(error);
102
+ return {
103
+ data: defaultData != null ? defaultData : null,
104
+ error: errorObj
105
+ };
106
+ }
107
+ }
108
+
109
+ // src/api/client.ts
110
+ var defaultRetryConfig = {
111
+ limit: 5,
112
+ methods: ["get"],
113
+ statusCodes: [413],
114
+ backoffLimit: 3e3
115
+ };
116
+ function buildQueryString(params) {
117
+ const searchParams = new URLSearchParams();
118
+ Object.entries(params).forEach(([key, value]) => {
119
+ if (value !== null && value !== void 0) {
120
+ searchParams.append(key, String(value));
121
+ }
122
+ });
123
+ const queryString = searchParams.toString();
124
+ return queryString ? `?${queryString}` : "";
125
+ }
126
+ async function beforeRequestHook(request, getAccessToken, getUserIP) {
127
+ const token = await (getAccessToken == null ? void 0 : getAccessToken());
128
+ const headers = new Headers(request.headers);
129
+ if (token) {
130
+ headers.set("Authorization", `Bearer ${token}`);
131
+ }
132
+ const userIP = await (getUserIP == null ? void 0 : getUserIP());
133
+ if (userIP) {
134
+ headers.set("X-User-IP", userIP);
135
+ }
136
+ let body;
137
+ try {
138
+ const cloned = request.clone();
139
+ const text = await cloned.text();
140
+ body = text === "" ? void 0 : text;
141
+ } catch (_a) {
142
+ body = void 0;
143
+ }
144
+ return new Request(request, { headers, body });
145
+ }
146
+ async function afterResponseHook(request, response, onSignoutUnauthorized) {
147
+ const possibleSignInPaths = ["signin", "sign-in", "login"];
148
+ const isSignInPath = possibleSignInPaths.some(
149
+ (path) => request.url.includes(path)
150
+ );
151
+ const needsBody = response.status === 401 && !isSignInPath;
152
+ let responseBody = null;
153
+ let responseBodyFor401 = null;
154
+ if (needsBody) {
155
+ const clone = response.clone();
156
+ try {
157
+ responseBody = await clone.json();
158
+ responseBodyFor401 = responseBody;
159
+ } catch (e) {
160
+ responseBody = await clone.text();
161
+ }
162
+ }
163
+ if (response.status === 401 && !isSignInPath) {
164
+ return onSignoutUnauthorized == null ? void 0 : onSignoutUnauthorized(responseBodyFor401);
165
+ }
166
+ }
167
+ async function fetchWithRetry(input, init) {
168
+ var _a, _b, _c, _d;
169
+ const retryConfig = (init == null ? void 0 : init.retry) || defaultRetryConfig;
170
+ const method = ((init == null ? void 0 : init.method) || "GET").toLowerCase();
171
+ let attempt = 0;
172
+ while (true) {
173
+ attempt++;
174
+ const response = await fetch(input, init);
175
+ const shouldRetry = ((_a = retryConfig.statusCodes) == null ? void 0 : _a.includes(response.status)) && ((_b = retryConfig.methods) == null ? void 0 : _b.includes(method)) && attempt < ((_c = retryConfig.limit) != null ? _c : 5);
176
+ if (!shouldRetry) return response;
177
+ const backoff = Math.min(
178
+ 2 ** attempt * 100,
179
+ (_d = retryConfig.backoffLimit) != null ? _d : 3e3
180
+ );
181
+ await new Promise((resolve) => setTimeout(resolve, backoff));
182
+ }
183
+ }
184
+ async function api(config, endpoint, options = {}) {
185
+ var _a, _b;
186
+ let url = endpoint.startsWith("http") ? endpoint : `${(_a = config.baseURL) == null ? void 0 : _a.replace(/\/$/, "")}/${endpoint.replace(/^\//, "")}`;
187
+ if (options.params) {
188
+ const queryString = buildQueryString(options.params);
189
+ url += queryString;
190
+ }
191
+ const init = {
192
+ credentials: "include",
193
+ ...options
194
+ };
195
+ let body;
196
+ if (options.json !== void 0 && options.json !== null) {
197
+ body = JSON.stringify(options.json);
198
+ if (body && body !== "null" && body !== "undefined") {
199
+ init.headers = {
200
+ ...init.headers,
201
+ "Content-Type": "application/json"
202
+ };
203
+ }
204
+ }
205
+ if (!body) {
206
+ const headers = new Headers(init.headers);
207
+ if (((_b = headers.get("Content-Type")) == null ? void 0 : _b.toLowerCase()) === "application/json") {
208
+ headers.delete("Content-Type");
209
+ init.headers = headers;
210
+ }
211
+ }
212
+ let request = new Request(url, { ...init, body });
213
+ request = await beforeRequestHook(
214
+ request,
215
+ config.getAccessToken,
216
+ config.getUserIP
217
+ );
218
+ init.headers = new Headers(request.headers);
219
+ const response = await fetchWithRetry(request, init);
220
+ await afterResponseHook(request, response, config.onSignoutUnauthorized);
221
+ if (!response.ok) {
222
+ throw response;
223
+ }
224
+ if (response.status === 204) {
225
+ return null;
226
+ }
227
+ const text = await response.text();
228
+ if (!text) {
229
+ return null;
230
+ }
231
+ return JSON.parse(text);
232
+ }
233
+ var apiClient = (config) => {
234
+ const apiConfig = {
235
+ ...config
236
+ };
237
+ return {
238
+ get: (url, options) => apiWrapper(() => api(apiConfig, url, options)),
239
+ post: (url, options) => apiWrapper(() => api(apiConfig, url, { ...options, method: "POST" })),
240
+ put: (url, options) => apiWrapper(() => api(apiConfig, url, { ...options, method: "PUT" })),
241
+ delete: (url, options) => apiWrapper(
242
+ () => api(apiConfig, url, { ...options, method: "DELETE" })
243
+ ),
244
+ patch: (url, options) => apiWrapper(() => api(apiConfig, url, { ...options, method: "PATCH" }))
245
+ };
246
+ };
247
+
248
+ export { apiClient };
249
+ //# sourceMappingURL=chunk-2Y6M7IOG.js.map
250
+ //# sourceMappingURL=chunk-2Y6M7IOG.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/api/wrapper.ts","../src/api/client.ts"],"names":[],"mappings":"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","file":"chunk-2Y6M7IOG.js","sourcesContent":["import type { AxiosError } from \"axios\"\nimport { isAxiosError } from \"axios\"\nimport type { TTryCatchResult } from \"../function\"\n\n// Define a richer error type to capture more information\nexport interface IApiError {\n message: string\n status?: number\n code?: string\n details?: unknown\n path?: string\n timestamp?: string\n}\n\n/**\n * Extracts error properties from Axios errors\n */\nasync function extractAxiosErrorDetails(error: AxiosError): Promise<IApiError> {\n const errorObj: IApiError = {\n message: error.message || \"Axios Error\",\n status: error.response?.status,\n path: error.config?.url,\n }\n\n if (error.response?.data && typeof error.response.data === \"object\") {\n return await enrichErrorWithData(\n errorObj,\n Promise.resolve(error.response.data as Record<string, unknown>),\n )\n }\n\n return errorObj\n}\n\n/**\n * Define extended error type with potential custom properties\n */\ninterface ExtendedError extends Error {\n code?: string | number\n status?: string | number\n details?: unknown\n}\n\n/**\n * Extracts error properties from standard Error objects\n */\nfunction extractStandardErrorDetails(error: Error): IApiError {\n const errorObj: IApiError = {\n message: error.message,\n }\n\n // Capture any custom properties the error might have\n const extendedError = error as ExtendedError\n if (extendedError.code) errorObj.code = String(extendedError.code)\n if (extendedError.status) errorObj.status = Number(extendedError.status)\n if (extendedError.details) errorObj.details = extendedError.details\n\n return errorObj\n}\n\n/**\n * Extracts error properties from fetch Response objects\n */\nasync function extractResponseErrorDetails(\n response: Response,\n): Promise<IApiError> {\n const errorObj: IApiError = {\n message: `HTTP Error ${response.status}: ${response.statusText}`,\n status: response.status,\n path: response.url,\n }\n\n try {\n // Clone the response to avoid consuming the body stream\n const clonedResponse = response.clone()\n const errorData = await clonedResponse.json()\n\n // Directly enrich the error object with the parsed data\n if (errorData && typeof errorData === \"object\") {\n if (\"message\" in errorData && errorData.message) {\n errorObj.message = String(errorData.message)\n }\n\n if (\"code\" in errorData) {\n errorObj.code = String(errorData.code)\n }\n\n if (\"details\" in errorData) {\n errorObj.details = errorData.details\n } else if (\"issues\" in errorData) {\n errorObj.details = errorData.issues\n }\n\n if (\"timestamp\" in errorData) {\n errorObj.timestamp = String(errorData.timestamp)\n }\n }\n\n return errorObj\n } catch {\n // If JSON parsing fails, return the basic error object\n return errorObj\n }\n}\n\n/**\n * Enriches an error object with additional data from response\n */\nasync function enrichErrorWithData(\n errorObj: IApiError,\n errorData: Promise<Record<string, unknown>>,\n path?: string,\n): Promise<IApiError> {\n const data = await errorData\n\n if (data) {\n if (\"message\" in data) {\n errorObj.message = String(data.message)\n }\n\n if (\"code\" in data) {\n errorObj.code = String(data.code)\n }\n\n if (\"details\" in data) {\n errorObj.details = data.details\n } else if (\"issues\" in data) {\n errorObj.details = data.issues\n }\n\n if (\"timestamp\" in data) {\n errorObj.timestamp = String(data.timestamp)\n }\n\n if (path) {\n errorObj.path = path\n }\n }\n\n return errorObj\n}\n\n/**\n * Determines the type of error and routes to appropriate handler\n */\nasync function processError(error: unknown): Promise<IApiError> {\n if (error instanceof Response) {\n return extractResponseErrorDetails(error)\n }\n\n if (isAxiosError(error)) {\n return extractAxiosErrorDetails(error)\n }\n\n if (error instanceof Error) {\n return extractStandardErrorDetails(error)\n }\n\n // Handle unknown error types\n return {\n message: error ? JSON.stringify(error) : \"Unknown error\",\n }\n}\n\n/**\n * Wraps API calls with standardized error handling\n *\n * @param apiCall - The API call function to execute\n * @param defaultData - Optional default value to return when an error occurs\n * @returns A standardized result object with data or formatted error message\n *\n * @example\n * // Basic usage\n * const result = await apiWrapper(() => fetchUserData(userId));\n *\n * @example\n * // With default data value\n * const result = await apiWrapper(() => fetchPosts(), []);\n * // result.data will be [] instead of null on error\n */\nexport async function apiWrapper<T, D = null>(\n apiCall: () => Promise<T>,\n defaultData?: D,\n): Promise<TTryCatchResult<T, IApiError, D extends null ? null : D>> {\n try {\n const data = await apiCall()\n return {\n data,\n error: null,\n } as { data: T; error: null }\n } catch (error) {\n const errorObj = await processError(error)\n return {\n data: (defaultData ?? null) as D extends null ? null : D,\n error: errorObj,\n }\n }\n}\n","import { apiWrapper } from \"./wrapper\"\n\ninterface ICustomRequestInit extends Omit<RequestInit, \"body\"> {\n json?: unknown\n params?: Record<string, string | number | boolean | null | undefined>\n retry?: {\n limit?: number\n methods?: string[]\n statusCodes?: number[]\n backoffLimit?: number\n }\n}\n\nconst defaultRetryConfig = {\n limit: 5,\n methods: [\"get\"],\n statusCodes: [413],\n backoffLimit: 3000,\n}\n\nfunction buildQueryString(\n params: Record<string, string | number | boolean | null | undefined>,\n): string {\n const searchParams = new URLSearchParams()\n\n Object.entries(params).forEach(([key, value]) => {\n if (value !== null && value !== undefined) {\n searchParams.append(key, String(value))\n }\n })\n\n const queryString = searchParams.toString()\n return queryString ? `?${queryString}` : \"\"\n}\n\nasync function beforeRequestHook(\n request: Request,\n getAccessToken?: () => Promise<string | null>,\n getUserIP?: () => Promise<string | undefined>,\n): Promise<Request> {\n const token = await getAccessToken?.()\n const headers = new Headers(request.headers)\n\n if (token) {\n headers.set(\"Authorization\", `Bearer ${token}`)\n }\n\n const userIP = await getUserIP?.()\n if (userIP) {\n headers.set(\"X-User-IP\", userIP)\n }\n\n let body: string | undefined\n try {\n const cloned = request.clone()\n const text = await cloned.text()\n body = text === \"\" ? undefined : text\n } catch (_a) {\n body = undefined\n }\n\n return new Request(request, { headers, body })\n}\n\nasync function afterResponseHook(\n request: Request,\n response: Response,\n onSignoutUnauthorized?: (response: unknown) => void,\n): Promise<void> {\n const possibleSignInPaths = [\"signin\", \"sign-in\", \"login\"]\n const isSignInPath = possibleSignInPaths.some((path) =>\n request.url.includes(path),\n )\n const needsBody = response.status === 401 && !isSignInPath\n\n let responseBody: unknown = null\n let responseBodyFor401: unknown = null\n\n if (needsBody) {\n const clone = response.clone()\n try {\n responseBody = await clone.json()\n responseBodyFor401 = responseBody\n } catch {\n responseBody = await clone.text()\n }\n }\n\n if (response.status === 401 && !isSignInPath) {\n return onSignoutUnauthorized?.(responseBodyFor401)\n }\n}\n\nasync function fetchWithRetry(\n input: RequestInfo,\n init?: ICustomRequestInit,\n): Promise<Response> {\n const retryConfig = init?.retry || defaultRetryConfig\n const method = (init?.method || \"GET\").toLowerCase()\n let attempt = 0\n\n while (true) {\n attempt++\n const response = await fetch(input, init)\n\n const shouldRetry =\n retryConfig.statusCodes?.includes(response.status) &&\n retryConfig.methods?.includes(method) &&\n attempt < (retryConfig.limit ?? 5)\n\n if (!shouldRetry) return response\n\n const backoff = Math.min(\n 2 ** attempt * 100,\n retryConfig.backoffLimit ?? 3000,\n )\n await new Promise((resolve) => setTimeout(resolve, backoff))\n }\n}\n\ntype TApiClientProps = {\n baseURL?: string\n onSignoutUnauthorized?: (response?: unknown) => void\n getAccessToken?: () => Promise<string | null>\n getUserIP?: () => Promise<string | undefined>\n}\n\nasync function api<T>(\n config: TApiClientProps,\n endpoint: string,\n options: ICustomRequestInit = {},\n): Promise<T> {\n let url = endpoint.startsWith(\"http\")\n ? endpoint\n : `${config.baseURL?.replace(/\\/$/, \"\")}/${endpoint.replace(/^\\//, \"\")}`\n\n // Add query parameters if provided\n if (options.params) {\n const queryString = buildQueryString(options.params)\n url += queryString\n }\n\n // Apply default options\n const init: ICustomRequestInit = {\n credentials: \"include\",\n ...options,\n }\n\n let body: RequestInit[\"body\"]\n if (options.json !== undefined && options.json !== null) {\n body = JSON.stringify(options.json)\n // Only add Content-Type if body is not empty\n if (body && body !== \"null\" && body !== \"undefined\") {\n init.headers = {\n ...init.headers,\n \"Content-Type\": \"application/json\",\n }\n }\n }\n\n // Remove Content-Type application/json if there's no body\n if (!body) {\n const headers = new Headers(init.headers)\n if (headers.get(\"Content-Type\")?.toLowerCase() === \"application/json\") {\n headers.delete(\"Content-Type\")\n init.headers = headers\n }\n }\n\n // Create initial request\n let request = new Request(url, { ...init, body })\n\n // Run pre-request hooks\n request = await beforeRequestHook(\n request,\n config.getAccessToken,\n config.getUserIP,\n )\n\n // Keep init headers in sync with the mutated request so fetch keeps auth headers\n init.headers = new Headers(request.headers)\n\n // Execute request with retry logic\n const response = await fetchWithRetry(request, init)\n\n // Run post-response hooks\n await afterResponseHook(request, response, config.onSignoutUnauthorized)\n\n if (!response.ok) {\n throw response\n }\n\n if (response.status === 204) {\n return null as T\n }\n const text = await response.text()\n if (!text) {\n return null as T\n }\n return JSON.parse(text)\n}\n\nexport const apiClient = (config?: TApiClientProps) => {\n const apiConfig: TApiClientProps = {\n ...config,\n }\n\n return {\n get: <T = unknown>(url: string, options?: ICustomRequestInit) =>\n apiWrapper(() => api<T>(apiConfig, url, options)),\n\n post: <T = unknown>(url: string, options?: ICustomRequestInit) =>\n apiWrapper(() => api<T>(apiConfig, url, { ...options, method: \"POST\" })),\n\n put: <T = unknown>(url: string, options?: ICustomRequestInit) =>\n apiWrapper(() => api<T>(apiConfig, url, { ...options, method: \"PUT\" })),\n\n delete: <T = unknown>(url: string, options?: ICustomRequestInit) =>\n apiWrapper(() =>\n api<T>(apiConfig, url, { ...options, method: \"DELETE\" }),\n ),\n\n patch: <T = unknown>(url: string, options?: ICustomRequestInit) =>\n apiWrapper(() => api<T>(apiConfig, url, { ...options, method: \"PATCH\" })),\n }\n}\n"]}
@@ -0,0 +1,3 @@
1
+
2
+ //# sourceMappingURL=chunk-3JUB2OJL.js.map
3
+ //# sourceMappingURL=chunk-3JUB2OJL.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-3JUB2OJL.js"}