@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
@@ -1,12 +0,0 @@
1
- import fs from "node:fs/promises";
2
- import { fileExists } from "./file-exists.js";
3
- export const fileDelete = async (filePath) => {
4
- try {
5
- if (await fileExists(filePath))
6
- await fs.rm(filePath);
7
- }
8
- catch (err) {
9
- // Log but don't throw during cleanup
10
- console.error(`Error deleting file at ${filePath}:`, err);
11
- }
12
- };
@@ -1,10 +0,0 @@
1
- import fs from "node:fs/promises";
2
- export const fileExists = async (filePath) => {
3
- try {
4
- await fs.access(filePath);
5
- return true;
6
- }
7
- catch (_a) {
8
- return false;
9
- }
10
- };
@@ -1,13 +0,0 @@
1
- export function formatBytes(bytes) {
2
- if (bytes < 0) {
3
- throw new Error("Size in bytes cannot be negative");
4
- }
5
- const units = ["B", "KB", "MB", "GB", "TB", "PB"];
6
- let size = bytes;
7
- let index = 0;
8
- while (size >= 1024 && index < units.length - 1) {
9
- size /= 1024;
10
- index++;
11
- }
12
- return `${size.toFixed(2)} ${units[index]}`;
13
- }
@@ -1,5 +0,0 @@
1
- export * from "./compress-image.js";
2
- export * from "./download-url.js";
3
- export * from "./file-delete.js";
4
- export * from "./file-exists.js";
5
- export * from "./format-bytes.js";
package/dist/esm/files.js DELETED
@@ -1 +0,0 @@
1
- export * from './files/index.js'
@@ -1,22 +0,0 @@
1
- /**
2
- * Creates a debounced function that delays invoking func until after delay milliseconds
3
- * have elapsed since the last time the debounced function was invoked
4
- * @param fn - The function to debounce
5
- * @param delay - The number of milliseconds to delay
6
- * @returns The debounced function
7
- */
8
- export function debounce(fn, delay) {
9
- if (typeof fn !== "function") {
10
- throw new Error("First argument must be a function");
11
- }
12
- if (typeof delay !== "number" || delay < 0) {
13
- throw new Error("Delay must be a non-negative number");
14
- }
15
- let timeoutId;
16
- return function (...args) {
17
- if (timeoutId) {
18
- clearTimeout(timeoutId);
19
- }
20
- timeoutId = setTimeout(() => fn.apply(this, args), delay);
21
- };
22
- }
@@ -1,3 +0,0 @@
1
- export * from "./debounce.js";
2
- export * from "./throttle.js";
3
- export * from "./try-catch.js";
@@ -1,32 +0,0 @@
1
- /**
2
- * Creates a throttled function that only invokes func at most once per every delay milliseconds
3
- * @param fn - The function to throttle
4
- * @param delay - The number of milliseconds to throttle invocations to
5
- * @returns The throttled function
6
- */
7
- export function throttle(fn, delay) {
8
- if (typeof fn !== "function") {
9
- throw new Error("First argument must be a function");
10
- }
11
- if (typeof delay !== "number" || delay < 0) {
12
- throw new Error("Delay must be a non-negative number");
13
- }
14
- let lastCall = 0;
15
- let timeoutId;
16
- return function (...args) {
17
- const now = Date.now();
18
- if (now - lastCall >= delay) {
19
- lastCall = now;
20
- fn.apply(this, args);
21
- }
22
- else {
23
- if (timeoutId) {
24
- clearTimeout(timeoutId);
25
- }
26
- timeoutId = setTimeout(() => {
27
- lastCall = Date.now();
28
- fn.apply(this, args);
29
- }, delay - (now - lastCall));
30
- }
31
- };
32
- }
@@ -1,35 +0,0 @@
1
- /**
2
- * Enhanced try-catch utility that handles async operations and provides typed results
3
- *
4
- * @param fn - The promise or function returning a promise to execute
5
- * @param defaultData - Optional default value to use for data when an error occurs (instead of null)
6
- * @returns A consistent result object containing either data or error
7
- *
8
- * @example
9
- * // With a promise
10
- * const result = await tryCatch(fetchUserData(userId));
11
- *
12
- * @example
13
- * // With a function that returns a promise
14
- * const result = await tryCatch(() => fetchUserData(userId));
15
- *
16
- * @example
17
- * // With custom default data
18
- * const result = await tryCatch(fetchItems(), []);
19
- * // result.data will be an empty array instead of null when error occurs
20
- */
21
- export async function tryCatch(fn, defaultData) {
22
- try {
23
- const data = await (typeof fn === "function" ? fn() : fn);
24
- return {
25
- data,
26
- error: null,
27
- };
28
- }
29
- catch (error) {
30
- return {
31
- data: (defaultData !== null && defaultData !== void 0 ? defaultData : null),
32
- error: error,
33
- };
34
- }
35
- }
@@ -1 +0,0 @@
1
- export * from './function/index.js'
package/dist/esm/index.js DELETED
@@ -1,7 +0,0 @@
1
- export * from "./api/index.js"; // API utilities
2
- export * from "./array/index.js"; // Array utilities
3
- export * from "./date/index.js"; // Date utilities
4
- export * from "./files/index.js"; // Files utilities
5
- export * from "./function/index.js"; // Function utilities
6
- export * from "./string/index.js"; // String utilities
7
- export * from "./youtube/index.js"; // YouTube utilities
@@ -1,21 +0,0 @@
1
- export function camelCase(str) {
2
- if (typeof str !== "string") {
3
- throw new Error("Input must be a string");
4
- }
5
- if (str.length === 0) {
6
- return str;
7
- }
8
- const words = str
9
- .toLowerCase()
10
- .replace(/[^a-zA-Z0-9\s\-_]/g, "")
11
- .split(/[\s\-_]+/)
12
- .filter((word) => word.length > 0);
13
- if (words.length === 0) {
14
- return "";
15
- }
16
- return (words[0] +
17
- words
18
- .slice(1)
19
- .map((word) => word.charAt(0).toUpperCase() + word.slice(1))
20
- .join(""));
21
- }
@@ -1,9 +0,0 @@
1
- export function capitalize(str) {
2
- if (typeof str !== "string") {
3
- throw new Error("Input must be a string");
4
- }
5
- if (str.length === 0) {
6
- return str;
7
- }
8
- return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();
9
- }
@@ -1,25 +0,0 @@
1
- export const formatHMSToSeconds = (val) => {
2
- if (val == null || val === "")
3
- return null;
4
- if (typeof val === "number")
5
- return Number.isFinite(val) ? Math.max(0, Math.floor(val)) : null;
6
- const s = String(val).trim();
7
- // purely numeric string
8
- if (/^\d+$/.test(s))
9
- return Math.max(0, Number.parseInt(s, 10));
10
- // hh:mm:ss or mm:ss
11
- if (/^\d{1,2}(:\d{1,2}){1,2}$/.test(s)) {
12
- const parts = s.split(":").map((p) => Number.parseInt(p, 10));
13
- if (parts.some((n) => Number.isNaN(n)))
14
- return null;
15
- let seconds = 0;
16
- if (parts.length === 3) {
17
- seconds = parts[0] * 3600 + parts[1] * 60 + parts[2];
18
- }
19
- else {
20
- seconds = parts[0] * 60 + parts[1];
21
- }
22
- return Math.max(0, seconds);
23
- }
24
- return null;
25
- };
@@ -1,15 +0,0 @@
1
- /** convert seconds to "1h2m3s" or "42s" style for fragment */
2
- export const formatSecondsToFragment = (secs) => {
3
- const parsedSecs = Math.max(0, Math.floor(secs));
4
- const h = Math.floor(parsedSecs / 3600);
5
- const m = Math.floor((parsedSecs % 3600) / 60);
6
- const s = parsedSecs % 60;
7
- let out = "";
8
- if (h > 0)
9
- out += `${h}h`;
10
- if (m > 0)
11
- out += `${m}m`;
12
- if (s > 0 || out === "")
13
- out += `${s}s`;
14
- return out;
15
- };
@@ -1,13 +0,0 @@
1
- export function formatSecondsToHMS(totalSeconds) {
2
- const rounded = Math.max(0, Math.round(totalSeconds));
3
- const hours = Math.floor(rounded / 3600);
4
- const minutes = Math.floor((rounded % 3600) / 60);
5
- const seconds = rounded % 60;
6
- const hh = String(hours).padStart(2, "0");
7
- const mm = String(minutes).padStart(2, "0");
8
- const ss = String(seconds).padStart(2, "0");
9
- if (hours === 0) {
10
- return `${mm}:${ss}`;
11
- }
12
- return `${hh}:${mm}:${ss}`;
13
- }
@@ -1,10 +0,0 @@
1
- export const formatStringToTime = (str) => {
2
- const stringCleaned = Number(str.replace(/\D/g, "")).toString();
3
- if (stringCleaned.length > 4) {
4
- return stringCleaned
5
- .padStart(6, "0")
6
- .slice(0, 6)
7
- .replace(/(\d{2})(\d{2})(\d{2})/, "$1:$2:$3");
8
- }
9
- return stringCleaned.padStart(4, "0").replace(/(\d{2})(\d{2})/, "$1:$2");
10
- };
@@ -1,13 +0,0 @@
1
- export * from "./camel-case.js";
2
- export * from "./capitalize.js";
3
- export * from "./format-hms-to-seconds.js";
4
- export * from "./format-seconds-to-fragment.js";
5
- export * from "./format-seconds-to-hms.js";
6
- export * from "./format-string-to-time.js";
7
- export * from "./kebab-case.js";
8
- export * from "./markdown-to-text.js";
9
- export * from "./remove-html-tags.js";
10
- export * from "./slugify.js";
11
- export * from "./snake-case.js";
12
- export * from "./to-sentence-case.js";
13
- export * from "./truncate.js";
@@ -1,11 +0,0 @@
1
- export function kebabCase(str) {
2
- if (typeof str !== "string") {
3
- throw new Error("Input must be a string");
4
- }
5
- return str
6
- .replace(/([a-z])([A-Z])/g, "$1-$2")
7
- .replace(/[\s_]+/g, "-")
8
- .replace(/[^a-zA-Z0-9-]/g, "")
9
- .toLowerCase()
10
- .replace(/^-+|-+$/g, "");
11
- }
@@ -1,66 +0,0 @@
1
- export function markdownToText(markdown) {
2
- if (!markdown)
3
- return "";
4
- // normalize newlines
5
- let text = markdown.replace(/\r\n?/g, "\n");
6
- // Remove code fences but keep inner content (trim surrounding newlines to avoid extra blank lines)
7
- text = text.replace(/```[\s\S]*?```/g, (m) => {
8
- const inner = m.replace(/^```.*\n?/, "").replace(/```$/, "");
9
- return inner.replace(/^\n+|\n+$/g, "");
10
- });
11
- // Remove inline code backticks
12
- text = text.replace(/`([^`]+)`/g, "$1");
13
- // Images: keep alt text if present
14
- text = text.replace(/!\[([^\]]*)\]\((?:[^)]+)\)/g, "$1");
15
- // Links: keep link text
16
- text = text.replace(/\[([^\]]+)\]\((?:[^)]+)\)/g, "$1");
17
- // Reference-style links: [text][id] -> text
18
- text = text.replace(/\[([^\]]+)\]\s*\[[^\]]*\]/g, "$1");
19
- // Remove footnote markers like [^1] (do this before we mutate surrounding lines)
20
- text = text.replace(/\[\^[^\]]+\]/g, "");
21
- // Remove reference definitions like: [id]: url (and footnote defs like [^1]: note)
22
- // Remove the entire definition line including its trailing newline to avoid leaving blank lines
23
- text = text.replace(/^\s*\[[^\]]+\]:\s*.*(?:\r\n?|\n)?/gm, "");
24
- text = text.replace(/^\s*\[\^[^\]]+\]:\s*.*(?:\r\n?|\n)?/gm, "");
25
- // Remove HTML tags but keep inner text
26
- text = text.replace(/<\/?[^>]+>/g, "");
27
- // Remove emphasis markers (bold/italic/strikethrough), preserve text
28
- text = text.replace(/(\*\*|__)(.*?)\1/g, "$2");
29
- text = text.replace(/(\*|_)(.*?)\1/g, "$2");
30
- text = text.replace(/~~(.*?)~~/g, "$1");
31
- // Remove headings (#, ##, etc.)
32
- text = text.replace(/^\s{0,3}#{1,6}\s*/gm, "");
33
- // Remove blockquote markers
34
- text = text.replace(/^\s{0,3}>\s?/gm, "");
35
- // Remove list markers (ordered and unordered)
36
- text = text.replace(/^\s{0,3}([-+*]|\d+\.)\s+/gm, "");
37
- // Remove table separator lines and keep table cell content by replacing pipes with spaced pipes
38
- // Match the separator line and any trailing newline so we don't leave an empty line behind
39
- // Remove separator lines entirely (don't insert an extra newline)
40
- text = text.replace(/^\s*\|?(?:\s*:?-+:?\s*\|)+\s*(?:\r\n?|\n)?/gm, "");
41
- text = text.replace(/\|/g, " | ");
42
- // Trim leading whitespace on each line (fixes leading space introduced by replacing pipes)
43
- text = text.replace(/^[ \t]+/gm, "");
44
- // Fix table spacing edge-case: when a cell starts with two spaces before a digit (caused by adding spaces around pipes), collapse to a single space
45
- text = text.replace(/\|\s{2}(?=\d)/g, "| ");
46
- // Remove footnote markers like [^1]
47
- text = text.replace(/\[\^[^\]]+\]/g, "");
48
- // Remove any leftover footnote-definition fragments that may have been concatenated to the previous line
49
- // e.g. "Text^1: note" -> "Text"
50
- text = text.replace(/\^[0-9]+:\s*.*(?:\r\n?|\n)?/g, "");
51
- // Decode a few common HTML entities
52
- const entities = {
53
- "&amp;": "&",
54
- "&lt;": "<",
55
- "&gt;": ">",
56
- "&quot;": '"',
57
- "&#39;": "'",
58
- };
59
- text = text.replace(/&[a-zA-Z0-9#]+;/g, (e) => { var _a; return (_a = entities[e]) !== null && _a !== void 0 ? _a : e; });
60
- // Trim trailing whitespace on each line
61
- text = text.replace(/[ \t]+$/gm, "");
62
- // Collapse excessive blank lines to at most two (preserve paragraph breaks)
63
- text = text.replace(/\n{3,}/g, "\n\n");
64
- // Final trim but preserve leading/trailing single newlines inside content as needed
65
- return text.trim();
66
- }
@@ -1,14 +0,0 @@
1
- export function removeHtmlTags(input) {
2
- // Input validation
3
- if (!input || typeof input !== "string") {
4
- return "";
5
- }
6
- // Apply reasonable input length limit for safety
7
- const maxLength = 100000; // Adjust based on your requirements
8
- let updatedInput = input;
9
- if (updatedInput.length > maxLength) {
10
- updatedInput = updatedInput.slice(0, maxLength);
11
- }
12
- // Use a non-backtracking approach to prevent ReDoS vulnerabilities
13
- return updatedInput.replace(/<(?:[^>"']|"[^"]*"|'[^']*')*>/g, "");
14
- }
@@ -1,9 +0,0 @@
1
- export function slugify(text) {
2
- return text
3
- .normalize("NFD")
4
- .replace(/[\u0300-\u036f]/g, "")
5
- .replace(/[^\w\s]/gi, "")
6
- .trim()
7
- .replace(/\s+/g, "-")
8
- .toLowerCase();
9
- }
@@ -1,11 +0,0 @@
1
- export function snakeCase(str) {
2
- if (typeof str !== "string") {
3
- throw new Error("Input must be a string");
4
- }
5
- return str
6
- .replace(/([a-z])([A-Z])/g, "$1_$2")
7
- .replace(/[\s-]+/g, "_")
8
- .replace(/[^a-zA-Z0-9_]/g, "")
9
- .toLowerCase()
10
- .replace(/^_+|_+$/g, "");
11
- }
@@ -1,9 +0,0 @@
1
- export function toSentenceCase(str) {
2
- return str
3
- .replace(/_/g, " ")
4
- .replace(/([A-Z])/g, " $1")
5
- .toLowerCase()
6
- .replace(/^\w/, (c) => c.toUpperCase())
7
- .replace(/\s+/g, " ")
8
- .trim();
9
- }
@@ -1,15 +0,0 @@
1
- export function truncate(str, length, suffix = "...") {
2
- if (typeof str !== "string") {
3
- throw new Error("Input must be a string");
4
- }
5
- if (typeof length !== "number" || length < 0) {
6
- throw new Error("Length must be a non-negative number");
7
- }
8
- if (str.length <= length) {
9
- return str;
10
- }
11
- if (length === 0) {
12
- return suffix;
13
- }
14
- return str.slice(0, Math.max(0, length - suffix.length)) + suffix;
15
- }
@@ -1 +0,0 @@
1
- export * from './string/index.js'
@@ -1,26 +0,0 @@
1
- export function extractYouTubeId(urlString) {
2
- if (!urlString)
3
- return null;
4
- try {
5
- const url = new URL(urlString);
6
- const hostname = url.hostname.toLowerCase();
7
- const pathname = url.pathname;
8
- if (hostname.includes("youtu.be")) {
9
- const id = pathname.replace(/^\/+/, "").split(/[?&#]/)[0];
10
- return id || null;
11
- }
12
- if (hostname.includes("youtube.com")) {
13
- if (url.searchParams.has("v")) {
14
- return url.searchParams.get("v");
15
- }
16
- const parts = pathname.split("/").filter(Boolean);
17
- const last = parts[parts.length - 1];
18
- if (last)
19
- return last.split(/[?&#]/)[0] || null;
20
- }
21
- }
22
- catch (_a) { }
23
- const regex = /(?:v=|\/embed\/|\/shorts\/|youtu\.be\/)([0-9A-Za-z_-]{6,})/i;
24
- const match = urlString.match(regex);
25
- return match ? match[1] : null;
26
- }
@@ -1,81 +0,0 @@
1
- import { formatHMSToSeconds, formatSecondsToFragment } from "../string.js";
2
- import { extractYouTubeId } from "./extract-youtube-video-id.js";
3
- export const generateYoutubeURL = (opts) => {
4
- const { videoURL, start, end, embed = false, short = false, useFragment = false, autoplay, controls, rel, loop, mute, modestbranding, origin, playlist, params = {}, } = opts;
5
- const videoId = extractYouTubeId(videoURL);
6
- if (!videoId)
7
- return null;
8
- const startSec = formatHMSToSeconds(start);
9
- const endSec = formatHMSToSeconds(end);
10
- // base url
11
- const base = embed
12
- ? `https://www.youtube.com/embed/${videoId}`
13
- : short
14
- ? `https://youtu.be/${videoId}`
15
- : "https://www.youtube.com/watch";
16
- const search = new URLSearchParams();
17
- // Add video ID for watch URLs
18
- if (!embed && !short) {
19
- search.set("v", videoId);
20
- }
21
- // Standard param names for watch/embed
22
- if (!useFragment) {
23
- if (startSec != null) {
24
- // youtu.be historically uses "t" as a query param, but "start" is widely supported.
25
- // Use "t" for short links, otherwise "start".
26
- search.set(short ? "t" : "start", String(startSec));
27
- }
28
- if (endSec != null) {
29
- search.set("end", String(endSec));
30
- }
31
- }
32
- // embed / player related params
33
- if (typeof autoplay !== "undefined")
34
- search.set("autoplay", autoplay ? "1" : "0");
35
- if (typeof controls !== "undefined")
36
- search.set("controls", String(controls));
37
- if (typeof rel !== "undefined")
38
- search.set("rel", String(rel));
39
- if (typeof modestbranding !== "undefined")
40
- search.set("modestbranding", String(modestbranding));
41
- if (typeof origin !== "undefined")
42
- search.set("origin", origin);
43
- if (typeof mute !== "undefined")
44
- search.set("mute", mute ? "1" : "0");
45
- // loop requires playlist param when embedding a single video
46
- if (loop) {
47
- search.set("loop", "1");
48
- if (playlist) {
49
- search.set("playlist", playlist);
50
- }
51
- else if (embed) {
52
- // for embed+loop, YouTube expects &playlist=VIDEO_ID
53
- search.set("playlist", videoId);
54
- }
55
- }
56
- else if (playlist) {
57
- search.set("playlist", playlist);
58
- }
59
- // merge custom params (allow overriding)
60
- Object.entries(params).forEach(([k, v]) => {
61
- if (v === false)
62
- search.set(k, "0");
63
- else if (v === true)
64
- search.set(k, "1");
65
- else
66
- search.set(k, String(v));
67
- });
68
- const qs = search.toString() ? `?${search.toString()}` : "";
69
- // fragment handling (e.g. #t=1m2s)
70
- let fragment = "";
71
- if (useFragment && startSec != null) {
72
- fragment = `#t=${formatSecondsToFragment(startSec)}`;
73
- }
74
- // For short links, people often prefer the short host and start as query or fragment.
75
- if (short) {
76
- // prefer fragment if requested, otherwise use search params (t)
77
- return `${base}${qs}${fragment}`;
78
- }
79
- // watch/embed links
80
- return `${base}${qs}${fragment}`;
81
- };