@herowcode/utils 1.3.5 → 1.4.8
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.
- package/dist/api/index.cjs +12 -0
- package/dist/api/index.cjs.map +1 -0
- package/dist/api/{client.d.ts → index.d.mts} +19 -8
- package/dist/api/index.d.ts +36 -3
- package/dist/api/index.js +3 -0
- package/dist/api/index.js.map +1 -0
- package/dist/array/index.cjs +16 -0
- package/dist/array/index.cjs.map +1 -0
- package/dist/array/index.d.mts +5 -0
- package/dist/array/index.d.ts +5 -3
- package/dist/array/index.js +3 -0
- package/dist/array/index.js.map +1 -0
- package/dist/chunk-2MANLCNG.cjs +23 -0
- package/dist/chunk-2MANLCNG.cjs.map +1 -0
- package/dist/chunk-2RTW37WD.js +20 -0
- package/dist/chunk-2RTW37WD.js.map +1 -0
- package/dist/chunk-2Y6M7IOG.js +250 -0
- package/dist/chunk-2Y6M7IOG.js.map +1 -0
- package/dist/chunk-3JUB2OJL.js +3 -0
- package/dist/chunk-3JUB2OJL.js.map +1 -0
- package/dist/chunk-53JMVGIG.js +187 -0
- package/dist/chunk-53JMVGIG.js.map +1 -0
- package/dist/chunk-56NHIM5J.js +151 -0
- package/dist/chunk-56NHIM5J.js.map +1 -0
- package/dist/chunk-5OLQJUNS.js +66 -0
- package/dist/chunk-5OLQJUNS.js.map +1 -0
- package/dist/chunk-5YOEKMTJ.cjs +321 -0
- package/dist/chunk-5YOEKMTJ.cjs.map +1 -0
- package/dist/chunk-6TWPZ6LL.cjs +4 -0
- package/dist/chunk-6TWPZ6LL.cjs.map +1 -0
- package/dist/chunk-AQZBHMTO.js +96 -0
- package/dist/chunk-AQZBHMTO.js.map +1 -0
- package/dist/chunk-ATWN4SRX.js +29 -0
- package/dist/chunk-ATWN4SRX.js.map +1 -0
- package/dist/chunk-GRSF4RY2.cjs +20 -0
- package/dist/chunk-GRSF4RY2.cjs.map +1 -0
- package/dist/chunk-GX5E5B4L.cjs +70 -0
- package/dist/chunk-GX5E5B4L.cjs.map +1 -0
- package/dist/chunk-HK727IAV.cjs +201 -0
- package/dist/chunk-HK727IAV.cjs.map +1 -0
- package/dist/chunk-LJ6KOZD4.cjs +154 -0
- package/dist/chunk-LJ6KOZD4.cjs.map +1 -0
- package/dist/chunk-N2DRAZ3A.cjs +29 -0
- package/dist/chunk-N2DRAZ3A.cjs.map +1 -0
- package/dist/chunk-O7SH3E3T.js +18 -0
- package/dist/chunk-O7SH3E3T.js.map +1 -0
- package/dist/chunk-P5YNRND6.cjs +4 -0
- package/dist/chunk-P5YNRND6.cjs.map +1 -0
- package/dist/chunk-QAE6Q2SA.js +317 -0
- package/dist/chunk-QAE6Q2SA.js.map +1 -0
- package/dist/chunk-QRXVUXGJ.js +378 -0
- package/dist/chunk-QRXVUXGJ.js.map +1 -0
- package/dist/chunk-SLYUARZG.cjs +99 -0
- package/dist/chunk-SLYUARZG.cjs.map +1 -0
- package/dist/chunk-SWRIT7EE.js +3 -0
- package/dist/chunk-SWRIT7EE.js.map +1 -0
- package/dist/chunk-UXEUYHBD.cjs +401 -0
- package/dist/chunk-UXEUYHBD.cjs.map +1 -0
- package/dist/chunk-V6OKXUBQ.js +22 -0
- package/dist/chunk-V6OKXUBQ.js.map +1 -0
- package/dist/chunk-VAZJXZU5.cjs +31 -0
- package/dist/chunk-VAZJXZU5.cjs.map +1 -0
- package/dist/chunk-WGSFRFRO.cjs +252 -0
- package/dist/chunk-WGSFRFRO.cjs.map +1 -0
- package/dist/date/index.cjs +56 -0
- package/dist/date/index.cjs.map +1 -0
- package/dist/date/index.d.mts +63 -0
- package/dist/date/index.d.ts +63 -8
- package/dist/date/index.js +3 -0
- package/dist/date/index.js.map +1 -0
- package/dist/extract-youtube-video-id-HSYMYXIZ.js +3 -0
- package/dist/extract-youtube-video-id-HSYMYXIZ.js.map +1 -0
- package/dist/extract-youtube-video-id-XVGNPUDX.cjs +12 -0
- package/dist/extract-youtube-video-id-XVGNPUDX.cjs.map +1 -0
- package/dist/files/index.browser.cjs +21 -0
- package/dist/files/index.browser.cjs.map +1 -0
- package/dist/files/index.browser.d.mts +14 -0
- package/dist/files/index.browser.d.ts +14 -0
- package/dist/files/index.browser.js +4 -0
- package/dist/files/index.browser.js.map +1 -0
- package/dist/files/index.cjs +31 -0
- package/dist/files/index.cjs.map +1 -0
- package/dist/files/index.d.mts +3 -0
- package/dist/files/index.d.ts +3 -6
- package/dist/files/index.js +6 -0
- package/dist/files/index.js.map +1 -0
- package/dist/files/index.node.cjs +21 -0
- package/dist/files/index.node.cjs.map +1 -0
- package/dist/files/index.node.d.mts +7 -0
- package/dist/files/index.node.d.ts +7 -0
- package/dist/files/index.node.js +4 -0
- package/dist/files/index.node.js.map +1 -0
- package/dist/format-bytes-BGjeDnvM.d.mts +3 -0
- package/dist/format-bytes-BGjeDnvM.d.ts +3 -0
- package/dist/function/index.cjs +20 -0
- package/dist/function/index.cjs.map +1 -0
- package/dist/function/index.d.mts +22 -0
- package/dist/function/index.d.ts +22 -4
- package/dist/function/index.js +3 -0
- package/dist/function/index.js.map +1 -0
- package/dist/index.cjs +188 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.mts +12 -0
- package/dist/index.d.ts +12 -8
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/string/index.cjs +60 -0
- package/dist/string/index.cjs.map +1 -0
- package/dist/string/index.d.mts +28 -0
- package/dist/string/index.d.ts +28 -14
- package/dist/string/index.js +3 -0
- package/dist/string/index.js.map +1 -0
- package/dist/{cjs/function/try-catch.d.ts → try-catch-B7WzqcPU.d.mts} +4 -4
- package/dist/{function/try-catch.d.ts → try-catch-B7WzqcPU.d.ts} +4 -4
- package/dist/youtube/index.browser.cjs +35 -0
- package/dist/youtube/index.browser.cjs.map +1 -0
- package/dist/youtube/index.browser.d.mts +2 -0
- package/dist/youtube/index.browser.d.ts +2 -0
- package/dist/youtube/index.browser.js +6 -0
- package/dist/youtube/index.browser.js.map +1 -0
- package/dist/youtube/index.cjs +36 -0
- package/dist/youtube/index.cjs.map +1 -0
- package/dist/youtube/index.d.mts +12 -0
- package/dist/youtube/index.d.ts +12 -7
- package/dist/youtube/index.js +7 -0
- package/dist/youtube/index.js.map +1 -0
- package/dist/youtube/index.node.cjs +26 -0
- package/dist/youtube/index.node.cjs.map +1 -0
- package/dist/youtube/index.node.d.mts +49 -0
- package/dist/youtube/index.node.d.ts +49 -0
- package/dist/youtube/index.node.js +5 -0
- package/dist/youtube/index.node.js.map +1 -0
- package/package.json +134 -47
- package/dist/api/client.d.ts.map +0 -1
- package/dist/api/index.d.ts.map +0 -1
- package/dist/api/wrapper.d.ts +0 -27
- package/dist/api/wrapper.d.ts.map +0 -1
- package/dist/array/index.d.ts.map +0 -1
- package/dist/array/shuffle.d.ts +0 -2
- package/dist/array/shuffle.d.ts.map +0 -1
- package/dist/array/unique.d.ts +0 -2
- package/dist/array/unique.d.ts.map +0 -1
- package/dist/cjs/api/client.d.ts +0 -25
- package/dist/cjs/api/client.d.ts.map +0 -1
- package/dist/cjs/api/client.js +0 -148
- package/dist/cjs/api/client.js.map +0 -1
- package/dist/cjs/api/index.d.ts +0 -3
- package/dist/cjs/api/index.d.ts.map +0 -1
- package/dist/cjs/api/index.js +0 -6
- package/dist/cjs/api/index.js.map +0 -1
- package/dist/cjs/api/wrapper.d.ts +0 -27
- package/dist/cjs/api/wrapper.d.ts.map +0 -1
- package/dist/cjs/api/wrapper.js +0 -152
- package/dist/cjs/api/wrapper.js.map +0 -1
- package/dist/cjs/array/index.d.ts +0 -3
- package/dist/cjs/array/index.d.ts.map +0 -1
- package/dist/cjs/array/index.js +0 -19
- package/dist/cjs/array/index.js.map +0 -1
- package/dist/cjs/array/shuffle.d.ts +0 -2
- package/dist/cjs/array/shuffle.d.ts.map +0 -1
- package/dist/cjs/array/shuffle.js +0 -16
- package/dist/cjs/array/shuffle.js.map +0 -1
- package/dist/cjs/array/unique.d.ts +0 -2
- package/dist/cjs/array/unique.d.ts.map +0 -1
- package/dist/cjs/array/unique.js +0 -7
- package/dist/cjs/array/unique.js.map +0 -1
- package/dist/cjs/array.js +0 -1
- package/dist/cjs/date/dayjs.d.ts +0 -20
- package/dist/cjs/date/dayjs.d.ts.map +0 -1
- package/dist/cjs/date/dayjs.js +0 -123
- package/dist/cjs/date/dayjs.js.map +0 -1
- package/dist/cjs/date/fix-timezone-offset.d.ts +0 -3
- package/dist/cjs/date/fix-timezone-offset.d.ts.map +0 -1
- package/dist/cjs/date/fix-timezone-offset.js +0 -9
- package/dist/cjs/date/fix-timezone-offset.js.map +0 -1
- package/dist/cjs/date/format-date.d.ts +0 -23
- package/dist/cjs/date/format-date.d.ts.map +0 -1
- package/dist/cjs/date/format-date.js +0 -71
- package/dist/cjs/date/format-date.js.map +0 -1
- package/dist/cjs/date/get-current-date-in-utc.d.ts +0 -3
- package/dist/cjs/date/get-current-date-in-utc.d.ts.map +0 -1
- package/dist/cjs/date/get-current-date-in-utc.js +0 -8
- package/dist/cjs/date/get-current-date-in-utc.js.map +0 -1
- package/dist/cjs/date/get-date-in-utc.d.ts +0 -3
- package/dist/cjs/date/get-date-in-utc.d.ts.map +0 -1
- package/dist/cjs/date/get-date-in-utc.js +0 -8
- package/dist/cjs/date/get-date-in-utc.js.map +0 -1
- package/dist/cjs/date/get-relative-time.d.ts +0 -3
- package/dist/cjs/date/get-relative-time.d.ts.map +0 -1
- package/dist/cjs/date/get-relative-time.js +0 -8
- package/dist/cjs/date/get-relative-time.js.map +0 -1
- package/dist/cjs/date/index.d.ts +0 -8
- package/dist/cjs/date/index.d.ts.map +0 -1
- package/dist/cjs/date/index.js +0 -24
- package/dist/cjs/date/index.js.map +0 -1
- package/dist/cjs/date/parse-time-spent.d.ts +0 -15
- package/dist/cjs/date/parse-time-spent.d.ts.map +0 -1
- package/dist/cjs/date/parse-time-spent.js +0 -207
- package/dist/cjs/date/parse-time-spent.js.map +0 -1
- package/dist/cjs/date.js +0 -1
- package/dist/cjs/files/compress-image.d.ts +0 -10
- package/dist/cjs/files/compress-image.d.ts.map +0 -1
- package/dist/cjs/files/compress-image.js +0 -61
- package/dist/cjs/files/compress-image.js.map +0 -1
- package/dist/cjs/files/download-url.d.ts +0 -2
- package/dist/cjs/files/download-url.d.ts.map +0 -1
- package/dist/cjs/files/download-url.js +0 -29
- package/dist/cjs/files/download-url.js.map +0 -1
- package/dist/cjs/files/file-delete.d.ts +0 -2
- package/dist/cjs/files/file-delete.d.ts.map +0 -1
- package/dist/cjs/files/file-delete.js +0 -20
- package/dist/cjs/files/file-delete.js.map +0 -1
- package/dist/cjs/files/file-exists.d.ts +0 -2
- package/dist/cjs/files/file-exists.d.ts.map +0 -1
- package/dist/cjs/files/file-exists.js +0 -18
- package/dist/cjs/files/file-exists.js.map +0 -1
- package/dist/cjs/files/format-bytes.d.ts +0 -2
- package/dist/cjs/files/format-bytes.d.ts.map +0 -1
- package/dist/cjs/files/format-bytes.js +0 -17
- package/dist/cjs/files/format-bytes.js.map +0 -1
- package/dist/cjs/files/index.d.ts +0 -6
- package/dist/cjs/files/index.d.ts.map +0 -1
- package/dist/cjs/files/index.js +0 -22
- package/dist/cjs/files/index.js.map +0 -1
- package/dist/cjs/files.js +0 -1
- package/dist/cjs/function/debounce.d.ts +0 -11
- package/dist/cjs/function/debounce.d.ts.map +0 -1
- package/dist/cjs/function/debounce.js +0 -26
- package/dist/cjs/function/debounce.js.map +0 -1
- package/dist/cjs/function/index.d.ts +0 -4
- package/dist/cjs/function/index.d.ts.map +0 -1
- package/dist/cjs/function/index.js +0 -20
- package/dist/cjs/function/index.js.map +0 -1
- package/dist/cjs/function/throttle.d.ts +0 -10
- package/dist/cjs/function/throttle.d.ts.map +0 -1
- package/dist/cjs/function/throttle.js +0 -36
- package/dist/cjs/function/throttle.js.map +0 -1
- package/dist/cjs/function/try-catch.d.ts.map +0 -1
- package/dist/cjs/function/try-catch.js +0 -39
- package/dist/cjs/function/try-catch.js.map +0 -1
- package/dist/cjs/function.js +0 -1
- package/dist/cjs/index.d.ts +0 -8
- package/dist/cjs/index.d.ts.map +0 -1
- package/dist/cjs/index.js +0 -24
- package/dist/cjs/index.js.map +0 -1
- package/dist/cjs/string/camel-case.d.ts +0 -2
- package/dist/cjs/string/camel-case.d.ts.map +0 -1
- package/dist/cjs/string/camel-case.js +0 -25
- package/dist/cjs/string/camel-case.js.map +0 -1
- package/dist/cjs/string/capitalize.d.ts +0 -2
- package/dist/cjs/string/capitalize.d.ts.map +0 -1
- package/dist/cjs/string/capitalize.js +0 -13
- package/dist/cjs/string/capitalize.js.map +0 -1
- package/dist/cjs/string/format-hms-to-seconds.d.ts +0 -2
- package/dist/cjs/string/format-hms-to-seconds.d.ts.map +0 -1
- package/dist/cjs/string/format-hms-to-seconds.js +0 -30
- package/dist/cjs/string/format-hms-to-seconds.js.map +0 -1
- package/dist/cjs/string/format-seconds-to-fragment.d.ts +0 -3
- package/dist/cjs/string/format-seconds-to-fragment.d.ts.map +0 -1
- package/dist/cjs/string/format-seconds-to-fragment.js +0 -20
- package/dist/cjs/string/format-seconds-to-fragment.js.map +0 -1
- package/dist/cjs/string/format-seconds-to-hms.d.ts +0 -2
- package/dist/cjs/string/format-seconds-to-hms.d.ts.map +0 -1
- package/dist/cjs/string/format-seconds-to-hms.js +0 -17
- package/dist/cjs/string/format-seconds-to-hms.js.map +0 -1
- package/dist/cjs/string/format-string-to-time.d.ts +0 -2
- package/dist/cjs/string/format-string-to-time.d.ts.map +0 -1
- package/dist/cjs/string/format-string-to-time.js +0 -15
- package/dist/cjs/string/format-string-to-time.js.map +0 -1
- package/dist/cjs/string/index.d.ts +0 -14
- package/dist/cjs/string/index.d.ts.map +0 -1
- package/dist/cjs/string/index.js +0 -30
- package/dist/cjs/string/index.js.map +0 -1
- package/dist/cjs/string/kebab-case.d.ts +0 -2
- package/dist/cjs/string/kebab-case.d.ts.map +0 -1
- package/dist/cjs/string/kebab-case.js +0 -15
- package/dist/cjs/string/kebab-case.js.map +0 -1
- package/dist/cjs/string/markdown-to-text.d.ts +0 -2
- package/dist/cjs/string/markdown-to-text.d.ts.map +0 -1
- package/dist/cjs/string/markdown-to-text.js +0 -70
- package/dist/cjs/string/markdown-to-text.js.map +0 -1
- package/dist/cjs/string/remove-html-tags.d.ts +0 -2
- package/dist/cjs/string/remove-html-tags.d.ts.map +0 -1
- package/dist/cjs/string/remove-html-tags.js +0 -18
- package/dist/cjs/string/remove-html-tags.js.map +0 -1
- package/dist/cjs/string/slugify.d.ts +0 -2
- package/dist/cjs/string/slugify.d.ts.map +0 -1
- package/dist/cjs/string/slugify.js +0 -13
- package/dist/cjs/string/slugify.js.map +0 -1
- package/dist/cjs/string/snake-case.d.ts +0 -2
- package/dist/cjs/string/snake-case.d.ts.map +0 -1
- package/dist/cjs/string/snake-case.js +0 -15
- package/dist/cjs/string/snake-case.js.map +0 -1
- package/dist/cjs/string/to-sentence-case.d.ts +0 -2
- package/dist/cjs/string/to-sentence-case.d.ts.map +0 -1
- package/dist/cjs/string/to-sentence-case.js +0 -13
- package/dist/cjs/string/to-sentence-case.js.map +0 -1
- package/dist/cjs/string/truncate.d.ts +0 -2
- package/dist/cjs/string/truncate.d.ts.map +0 -1
- package/dist/cjs/string/truncate.js +0 -19
- package/dist/cjs/string/truncate.js.map +0 -1
- package/dist/cjs/string.js +0 -1
- package/dist/cjs/youtube/extract-youtube-video-id.d.ts +0 -2
- package/dist/cjs/youtube/extract-youtube-video-id.d.ts.map +0 -1
- package/dist/cjs/youtube/extract-youtube-video-id.js +0 -30
- package/dist/cjs/youtube/extract-youtube-video-id.js.map +0 -1
- package/dist/cjs/youtube/generate-youtube-url.d.ts +0 -20
- package/dist/cjs/youtube/generate-youtube-url.d.ts.map +0 -1
- package/dist/cjs/youtube/generate-youtube-url.js +0 -86
- package/dist/cjs/youtube/generate-youtube-url.js.map +0 -1
- package/dist/cjs/youtube/get-video-duration.d.ts +0 -7
- package/dist/cjs/youtube/get-video-duration.d.ts.map +0 -1
- package/dist/cjs/youtube/get-video-duration.js +0 -150
- package/dist/cjs/youtube/get-video-duration.js.map +0 -1
- package/dist/cjs/youtube/get-youtube-thumbnail.d.ts +0 -2
- package/dist/cjs/youtube/get-youtube-thumbnail.d.ts.map +0 -1
- package/dist/cjs/youtube/get-youtube-thumbnail.js +0 -68
- package/dist/cjs/youtube/get-youtube-thumbnail.js.map +0 -1
- package/dist/cjs/youtube/get-youtube-video-info.d.ts +0 -26
- package/dist/cjs/youtube/get-youtube-video-info.d.ts.map +0 -1
- package/dist/cjs/youtube/get-youtube-video-info.js +0 -244
- package/dist/cjs/youtube/get-youtube-video-info.js.map +0 -1
- package/dist/cjs/youtube/index.d.ts +0 -7
- package/dist/cjs/youtube/index.d.ts.map +0 -1
- package/dist/cjs/youtube/index.js +0 -23
- package/dist/cjs/youtube/index.js.map +0 -1
- package/dist/cjs/youtube/validate-youtube-link.d.ts +0 -2
- package/dist/cjs/youtube/validate-youtube-link.d.ts.map +0 -1
- package/dist/cjs/youtube/validate-youtube-link.js +0 -77
- package/dist/cjs/youtube/validate-youtube-link.js.map +0 -1
- package/dist/cjs/youtube.js +0 -1
- package/dist/date/dayjs.d.ts +0 -20
- package/dist/date/dayjs.d.ts.map +0 -1
- package/dist/date/fix-timezone-offset.d.ts +0 -3
- package/dist/date/fix-timezone-offset.d.ts.map +0 -1
- package/dist/date/format-date.d.ts +0 -23
- package/dist/date/format-date.d.ts.map +0 -1
- package/dist/date/get-current-date-in-utc.d.ts +0 -3
- package/dist/date/get-current-date-in-utc.d.ts.map +0 -1
- package/dist/date/get-date-in-utc.d.ts +0 -3
- package/dist/date/get-date-in-utc.d.ts.map +0 -1
- package/dist/date/get-relative-time.d.ts +0 -3
- package/dist/date/get-relative-time.d.ts.map +0 -1
- package/dist/date/index.d.ts.map +0 -1
- package/dist/date/parse-time-spent.d.ts +0 -15
- package/dist/date/parse-time-spent.d.ts.map +0 -1
- package/dist/esm/api/client.js +0 -143
- package/dist/esm/api/index.js +0 -1
- package/dist/esm/api/wrapper.js +0 -148
- package/dist/esm/array/index.js +0 -2
- package/dist/esm/array/shuffle.js +0 -12
- package/dist/esm/array/unique.js +0 -3
- package/dist/esm/array.js +0 -1
- package/dist/esm/date/dayjs.js +0 -111
- package/dist/esm/date/fix-timezone-offset.js +0 -5
- package/dist/esm/date/format-date.js +0 -67
- package/dist/esm/date/get-current-date-in-utc.js +0 -4
- package/dist/esm/date/get-date-in-utc.js +0 -4
- package/dist/esm/date/get-relative-time.js +0 -4
- package/dist/esm/date/index.js +0 -7
- package/dist/esm/date/parse-time-spent.js +0 -203
- package/dist/esm/date.js +0 -1
- package/dist/esm/files/compress-image.js +0 -57
- package/dist/esm/files/download-url.js +0 -24
- package/dist/esm/files/file-delete.js +0 -12
- package/dist/esm/files/file-exists.js +0 -10
- package/dist/esm/files/format-bytes.js +0 -13
- package/dist/esm/files/index.js +0 -5
- package/dist/esm/files.js +0 -1
- package/dist/esm/function/debounce.js +0 -22
- package/dist/esm/function/index.js +0 -3
- package/dist/esm/function/throttle.js +0 -32
- package/dist/esm/function/try-catch.js +0 -35
- package/dist/esm/function.js +0 -1
- package/dist/esm/index.js +0 -7
- package/dist/esm/string/camel-case.js +0 -21
- package/dist/esm/string/capitalize.js +0 -9
- package/dist/esm/string/format-hms-to-seconds.js +0 -25
- package/dist/esm/string/format-seconds-to-fragment.js +0 -15
- package/dist/esm/string/format-seconds-to-hms.js +0 -13
- package/dist/esm/string/format-string-to-time.js +0 -10
- package/dist/esm/string/index.js +0 -13
- package/dist/esm/string/kebab-case.js +0 -11
- package/dist/esm/string/markdown-to-text.js +0 -66
- package/dist/esm/string/remove-html-tags.js +0 -14
- package/dist/esm/string/slugify.js +0 -9
- package/dist/esm/string/snake-case.js +0 -11
- package/dist/esm/string/to-sentence-case.js +0 -9
- package/dist/esm/string/truncate.js +0 -15
- package/dist/esm/string.js +0 -1
- package/dist/esm/youtube/extract-youtube-video-id.js +0 -26
- package/dist/esm/youtube/generate-youtube-url.js +0 -81
- package/dist/esm/youtube/get-video-duration.js +0 -146
- package/dist/esm/youtube/get-youtube-thumbnail.js +0 -31
- package/dist/esm/youtube/get-youtube-video-info.js +0 -207
- package/dist/esm/youtube/index.js +0 -6
- package/dist/esm/youtube/validate-youtube-link.js +0 -40
- package/dist/esm/youtube.js +0 -1
- package/dist/files/compress-image.d.ts +0 -10
- package/dist/files/compress-image.d.ts.map +0 -1
- package/dist/files/download-url.d.ts +0 -2
- package/dist/files/download-url.d.ts.map +0 -1
- package/dist/files/file-delete.d.ts +0 -2
- package/dist/files/file-delete.d.ts.map +0 -1
- package/dist/files/file-exists.d.ts +0 -2
- package/dist/files/file-exists.d.ts.map +0 -1
- package/dist/files/format-bytes.d.ts +0 -2
- package/dist/files/format-bytes.d.ts.map +0 -1
- package/dist/files/index.d.ts.map +0 -1
- package/dist/function/debounce.d.ts +0 -11
- package/dist/function/debounce.d.ts.map +0 -1
- package/dist/function/index.d.ts.map +0 -1
- package/dist/function/throttle.d.ts +0 -10
- package/dist/function/throttle.d.ts.map +0 -1
- package/dist/function/try-catch.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/string/camel-case.d.ts +0 -2
- package/dist/string/camel-case.d.ts.map +0 -1
- package/dist/string/capitalize.d.ts +0 -2
- package/dist/string/capitalize.d.ts.map +0 -1
- package/dist/string/format-hms-to-seconds.d.ts +0 -2
- package/dist/string/format-hms-to-seconds.d.ts.map +0 -1
- package/dist/string/format-seconds-to-fragment.d.ts +0 -3
- package/dist/string/format-seconds-to-fragment.d.ts.map +0 -1
- package/dist/string/format-seconds-to-hms.d.ts +0 -2
- package/dist/string/format-seconds-to-hms.d.ts.map +0 -1
- package/dist/string/format-string-to-time.d.ts +0 -2
- package/dist/string/format-string-to-time.d.ts.map +0 -1
- package/dist/string/index.d.ts.map +0 -1
- package/dist/string/kebab-case.d.ts +0 -2
- package/dist/string/kebab-case.d.ts.map +0 -1
- package/dist/string/markdown-to-text.d.ts +0 -2
- package/dist/string/markdown-to-text.d.ts.map +0 -1
- package/dist/string/remove-html-tags.d.ts +0 -2
- package/dist/string/remove-html-tags.d.ts.map +0 -1
- package/dist/string/slugify.d.ts +0 -2
- package/dist/string/slugify.d.ts.map +0 -1
- package/dist/string/snake-case.d.ts +0 -2
- package/dist/string/snake-case.d.ts.map +0 -1
- package/dist/string/to-sentence-case.d.ts +0 -2
- package/dist/string/to-sentence-case.d.ts.map +0 -1
- package/dist/string/truncate.d.ts +0 -2
- package/dist/string/truncate.d.ts.map +0 -1
- package/dist/youtube/extract-youtube-video-id.d.ts +0 -2
- package/dist/youtube/extract-youtube-video-id.d.ts.map +0 -1
- package/dist/youtube/generate-youtube-url.d.ts +0 -20
- package/dist/youtube/generate-youtube-url.d.ts.map +0 -1
- package/dist/youtube/get-video-duration.d.ts +0 -7
- package/dist/youtube/get-video-duration.d.ts.map +0 -1
- package/dist/youtube/get-youtube-thumbnail.d.ts +0 -2
- package/dist/youtube/get-youtube-thumbnail.d.ts.map +0 -1
- package/dist/youtube/get-youtube-video-info.d.ts +0 -26
- package/dist/youtube/get-youtube-video-info.d.ts.map +0 -1
- package/dist/youtube/index.d.ts.map +0 -1
- package/dist/youtube/validate-youtube-link.d.ts +0 -2
- package/dist/youtube/validate-youtube-link.d.ts.map +0 -1
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
// src/string/camel-case.ts
|
|
4
|
+
function camelCase(str) {
|
|
5
|
+
if (typeof str !== "string") {
|
|
6
|
+
throw new Error("Input must be a string");
|
|
7
|
+
}
|
|
8
|
+
if (str.length === 0) {
|
|
9
|
+
return str;
|
|
10
|
+
}
|
|
11
|
+
const words = str.toLowerCase().replace(/[^a-zA-Z0-9\s\-_]/g, "").split(/[\s\-_]+/).filter((word) => word.length > 0);
|
|
12
|
+
if (words.length === 0) {
|
|
13
|
+
return "";
|
|
14
|
+
}
|
|
15
|
+
return words[0] + words.slice(1).map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join("");
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
// src/string/capitalize.ts
|
|
19
|
+
function capitalize(str) {
|
|
20
|
+
if (typeof str !== "string") {
|
|
21
|
+
throw new Error("Input must be a string");
|
|
22
|
+
}
|
|
23
|
+
if (str.length === 0) {
|
|
24
|
+
return str;
|
|
25
|
+
}
|
|
26
|
+
return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// src/string/format-hms-to-seconds.ts
|
|
30
|
+
var formatHMSToSeconds = (val) => {
|
|
31
|
+
if (val == null || val === "") return null;
|
|
32
|
+
if (typeof val === "number")
|
|
33
|
+
return Number.isFinite(val) ? Math.max(0, Math.floor(val)) : null;
|
|
34
|
+
const s = String(val).trim();
|
|
35
|
+
if (/^\d+$/.test(s)) return Math.max(0, Number.parseInt(s, 10));
|
|
36
|
+
if (/^\d{1,2}(:\d{1,2}){1,2}$/.test(s)) {
|
|
37
|
+
const parts = s.split(":").map((p) => Number.parseInt(p, 10));
|
|
38
|
+
if (parts.some((n) => Number.isNaN(n))) return null;
|
|
39
|
+
let seconds = 0;
|
|
40
|
+
if (parts.length === 3) {
|
|
41
|
+
seconds = parts[0] * 3600 + parts[1] * 60 + parts[2];
|
|
42
|
+
} else {
|
|
43
|
+
seconds = parts[0] * 60 + parts[1];
|
|
44
|
+
}
|
|
45
|
+
return Math.max(0, seconds);
|
|
46
|
+
}
|
|
47
|
+
return null;
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
// src/string/format-seconds-to-fragment.ts
|
|
51
|
+
var formatSecondsToFragment = (secs) => {
|
|
52
|
+
const parsedSecs = Math.max(0, Math.floor(secs));
|
|
53
|
+
const h = Math.floor(parsedSecs / 3600);
|
|
54
|
+
const m = Math.floor(parsedSecs % 3600 / 60);
|
|
55
|
+
const s = parsedSecs % 60;
|
|
56
|
+
let out = "";
|
|
57
|
+
if (h > 0) out += `${h}h`;
|
|
58
|
+
if (m > 0) out += `${m}m`;
|
|
59
|
+
if (s > 0 || out === "") out += `${s}s`;
|
|
60
|
+
return out;
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
// src/string/format-seconds-to-hms.ts
|
|
64
|
+
function formatSecondsToHMS(totalSeconds) {
|
|
65
|
+
const rounded = Math.max(0, Math.round(totalSeconds));
|
|
66
|
+
const hours = Math.floor(rounded / 3600);
|
|
67
|
+
const minutes = Math.floor(rounded % 3600 / 60);
|
|
68
|
+
const seconds = rounded % 60;
|
|
69
|
+
const hh = String(hours).padStart(2, "0");
|
|
70
|
+
const mm = String(minutes).padStart(2, "0");
|
|
71
|
+
const ss = String(seconds).padStart(2, "0");
|
|
72
|
+
if (hours === 0) {
|
|
73
|
+
return `${mm}:${ss}`;
|
|
74
|
+
}
|
|
75
|
+
return `${hh}:${mm}:${ss}`;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// src/string/format-string-to-time.ts
|
|
79
|
+
var formatStringToTime = (str) => {
|
|
80
|
+
const stringCleaned = Number(str.replace(/\D/g, "")).toString();
|
|
81
|
+
if (stringCleaned.length > 4) {
|
|
82
|
+
return stringCleaned.padStart(6, "0").slice(0, 6).replace(/(\d{2})(\d{2})(\d{2})/, "$1:$2:$3");
|
|
83
|
+
}
|
|
84
|
+
return stringCleaned.padStart(4, "0").replace(/(\d{2})(\d{2})/, "$1:$2");
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
// src/string/kebab-case.ts
|
|
88
|
+
function kebabCase(str) {
|
|
89
|
+
if (typeof str !== "string") {
|
|
90
|
+
throw new Error("Input must be a string");
|
|
91
|
+
}
|
|
92
|
+
return str.replace(/([a-z])([A-Z])/g, "$1-$2").replace(/[\s_]+/g, "-").replace(/[^a-zA-Z0-9-]/g, "").toLowerCase().replace(/^-+|-+$/g, "");
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// src/string/markdown-to-text.ts
|
|
96
|
+
function markdownToText(markdown) {
|
|
97
|
+
if (!markdown) return "";
|
|
98
|
+
let text = markdown.replace(/\r\n?/g, "\n");
|
|
99
|
+
text = text.replace(/```[\s\S]*?```/g, (m) => {
|
|
100
|
+
const inner = m.replace(/^```.*\n?/, "").replace(/```$/, "");
|
|
101
|
+
return inner.replace(/^\n+|\n+$/g, "");
|
|
102
|
+
});
|
|
103
|
+
text = text.replace(/`([^`]+)`/g, "$1");
|
|
104
|
+
text = text.replace(/!\[([^\]]*)\]\((?:[^)]+)\)/g, "$1");
|
|
105
|
+
text = text.replace(/\[([^\]]+)\]\((?:[^)]+)\)/g, "$1");
|
|
106
|
+
text = text.replace(/\[([^\]]+)\]\s*\[[^\]]*\]/g, "$1");
|
|
107
|
+
text = text.replace(/\[\^[^\]]+\]/g, "");
|
|
108
|
+
text = text.replace(/^\s*\[[^\]]+\]:\s*.*(?:\r\n?|\n)?/gm, "");
|
|
109
|
+
text = text.replace(/^\s*\[\^[^\]]+\]:\s*.*(?:\r\n?|\n)?/gm, "");
|
|
110
|
+
text = text.replace(/<\/?[^>]+>/g, "");
|
|
111
|
+
text = text.replace(/(\*\*|__)(.*?)\1/g, "$2");
|
|
112
|
+
text = text.replace(/(\*|_)(.*?)\1/g, "$2");
|
|
113
|
+
text = text.replace(/~~(.*?)~~/g, "$1");
|
|
114
|
+
text = text.replace(/^\s{0,3}#{1,6}\s*/gm, "");
|
|
115
|
+
text = text.replace(/^\s{0,3}>\s?/gm, "");
|
|
116
|
+
text = text.replace(/^\s{0,3}([-+*]|\d+\.)\s+/gm, "");
|
|
117
|
+
text = text.replace(/^\s*\|?(?:\s*:?-+:?\s*\|)+\s*(?:\r\n?|\n)?/gm, "");
|
|
118
|
+
text = text.replace(/\|/g, " | ");
|
|
119
|
+
text = text.replace(/^[ \t]+/gm, "");
|
|
120
|
+
text = text.replace(/\|\s{2}(?=\d)/g, "| ");
|
|
121
|
+
text = text.replace(/\[\^[^\]]+\]/g, "");
|
|
122
|
+
text = text.replace(/\^[0-9]+:\s*.*(?:\r\n?|\n)?/g, "");
|
|
123
|
+
const entities = {
|
|
124
|
+
"&": "&",
|
|
125
|
+
"<": "<",
|
|
126
|
+
">": ">",
|
|
127
|
+
""": '"',
|
|
128
|
+
"'": "'"
|
|
129
|
+
};
|
|
130
|
+
text = text.replace(/&[a-zA-Z0-9#]+;/g, (e) => {
|
|
131
|
+
var _a;
|
|
132
|
+
return (_a = entities[e]) != null ? _a : e;
|
|
133
|
+
});
|
|
134
|
+
text = text.replace(/[ \t]+$/gm, "");
|
|
135
|
+
text = text.replace(/\n{3,}/g, "\n\n");
|
|
136
|
+
return text.trim();
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
// src/string/remove-html-tags.ts
|
|
140
|
+
function removeHtmlTags(input) {
|
|
141
|
+
if (!input || typeof input !== "string") {
|
|
142
|
+
return "";
|
|
143
|
+
}
|
|
144
|
+
const maxLength = 1e5;
|
|
145
|
+
let updatedInput = input;
|
|
146
|
+
if (updatedInput.length > maxLength) {
|
|
147
|
+
updatedInput = updatedInput.slice(0, maxLength);
|
|
148
|
+
}
|
|
149
|
+
return updatedInput.replace(/<(?:[^>"']|"[^"]*"|'[^']*')*>/g, "");
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// src/string/slugify.ts
|
|
153
|
+
function slugify(text) {
|
|
154
|
+
return text.normalize("NFD").replace(/[\u0300-\u036f]/g, "").replace(/[^\w\s]/gi, "").trim().replace(/\s+/g, "-").toLowerCase();
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
// src/string/snake-case.ts
|
|
158
|
+
function snakeCase(str) {
|
|
159
|
+
if (typeof str !== "string") {
|
|
160
|
+
throw new Error("Input must be a string");
|
|
161
|
+
}
|
|
162
|
+
return str.replace(/([a-z])([A-Z])/g, "$1_$2").replace(/[\s-]+/g, "_").replace(/[^a-zA-Z0-9_]/g, "").toLowerCase().replace(/^_+|_+$/g, "");
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
// src/string/to-sentence-case.ts
|
|
166
|
+
function toSentenceCase(str) {
|
|
167
|
+
return str.replace(/_/g, " ").replace(/([A-Z])/g, " $1").toLowerCase().replace(/^\w/, (c) => c.toUpperCase()).replace(/\s+/g, " ").trim();
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
// src/string/truncate.ts
|
|
171
|
+
function truncate(str, length, suffix = "...") {
|
|
172
|
+
if (typeof str !== "string") {
|
|
173
|
+
throw new Error("Input must be a string");
|
|
174
|
+
}
|
|
175
|
+
if (typeof length !== "number" || length < 0) {
|
|
176
|
+
throw new Error("Length must be a non-negative number");
|
|
177
|
+
}
|
|
178
|
+
if (str.length <= length) {
|
|
179
|
+
return str;
|
|
180
|
+
}
|
|
181
|
+
if (length === 0) {
|
|
182
|
+
return suffix;
|
|
183
|
+
}
|
|
184
|
+
return str.slice(0, Math.max(0, length - suffix.length)) + suffix;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
exports.camelCase = camelCase;
|
|
188
|
+
exports.capitalize = capitalize;
|
|
189
|
+
exports.formatHMSToSeconds = formatHMSToSeconds;
|
|
190
|
+
exports.formatSecondsToFragment = formatSecondsToFragment;
|
|
191
|
+
exports.formatSecondsToHMS = formatSecondsToHMS;
|
|
192
|
+
exports.formatStringToTime = formatStringToTime;
|
|
193
|
+
exports.kebabCase = kebabCase;
|
|
194
|
+
exports.markdownToText = markdownToText;
|
|
195
|
+
exports.removeHtmlTags = removeHtmlTags;
|
|
196
|
+
exports.slugify = slugify;
|
|
197
|
+
exports.snakeCase = snakeCase;
|
|
198
|
+
exports.toSentenceCase = toSentenceCase;
|
|
199
|
+
exports.truncate = truncate;
|
|
200
|
+
//# sourceMappingURL=chunk-HK727IAV.cjs.map
|
|
201
|
+
//# sourceMappingURL=chunk-HK727IAV.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/string/camel-case.ts","../src/string/capitalize.ts","../src/string/format-hms-to-seconds.ts","../src/string/format-seconds-to-fragment.ts","../src/string/format-seconds-to-hms.ts","../src/string/format-string-to-time.ts","../src/string/kebab-case.ts","../src/string/markdown-to-text.ts","../src/string/remove-html-tags.ts","../src/string/slugify.ts","../src/string/snake-case.ts","../src/string/to-sentence-case.ts","../src/string/truncate.ts"],"names":[],"mappings":";;;AAAO,SAAS,UAAU,GAAA,EAAqB;AAC7C,EAAA,IAAI,OAAO,QAAQ,QAAA,EAAU;AAC3B,IAAA,MAAM,IAAI,MAAM,wBAAwB,CAAA;AAAA,EAC1C;AAEA,EAAA,IAAI,GAAA,CAAI,WAAW,CAAA,EAAG;AACpB,IAAA,OAAO,GAAA;AAAA,EACT;AAEA,EAAA,MAAM,QAAQ,GAAA,CACX,WAAA,EAAY,CACZ,OAAA,CAAQ,sBAAsB,EAAE,CAAA,CAChC,KAAA,CAAM,UAAU,EAChB,MAAA,CAAO,CAAC,IAAA,KAAS,IAAA,CAAK,SAAS,CAAC,CAAA;AAEnC,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,IAAA,OAAO,EAAA;AAAA,EACT;AAEA,EAAA,OACE,KAAA,CAAM,CAAC,CAAA,GACP,KAAA,CACG,MAAM,CAAC,CAAA,CACP,GAAA,CAAI,CAAC,IAAA,KAAS,IAAA,CAAK,OAAO,CAAC,CAAA,CAAE,aAAY,GAAI,IAAA,CAAK,MAAM,CAAC,CAAC,CAAA,CAC1D,IAAA,CAAK,EAAE,CAAA;AAEd;;;AC1BO,SAAS,WAAW,GAAA,EAAqB;AAC9C,EAAA,IAAI,OAAO,QAAQ,QAAA,EAAU;AAC3B,IAAA,MAAM,IAAI,MAAM,wBAAwB,CAAA;AAAA,EAC1C;AAEA,EAAA,IAAI,GAAA,CAAI,WAAW,CAAA,EAAG;AACpB,IAAA,OAAO,GAAA;AAAA,EACT;AAEA,EAAA,OAAO,GAAA,CAAI,MAAA,CAAO,CAAC,CAAA,CAAE,WAAA,KAAgB,GAAA,CAAI,KAAA,CAAM,CAAC,CAAA,CAAE,WAAA,EAAY;AAChE;;;ACVO,IAAM,kBAAA,GAAqB,CAAC,GAAA,KAAyC;AAC1E,EAAA,IAAI,GAAA,IAAO,IAAA,IAAQ,GAAA,KAAQ,EAAA,EAAI,OAAO,IAAA;AACtC,EAAA,IAAI,OAAO,GAAA,KAAQ,QAAA;AACjB,IAAA,OAAO,MAAA,CAAO,QAAA,CAAS,GAAG,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,KAAA,CAAM,GAAG,CAAC,CAAA,GAAI,IAAA;AAC/D,EAAA,MAAM,CAAA,GAAI,MAAA,CAAO,GAAG,CAAA,CAAE,IAAA,EAAK;AAE3B,EAAA,IAAI,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,EAAG,OAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,MAAA,CAAO,QAAA,CAAS,CAAA,EAAG,EAAE,CAAC,CAAA;AAE9D,EAAA,IAAI,0BAAA,CAA2B,IAAA,CAAK,CAAC,CAAA,EAAG;AACtC,IAAA,MAAM,KAAA,GAAQ,CAAA,CAAE,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,MAAA,CAAO,QAAA,CAAS,CAAA,EAAG,EAAE,CAAC,CAAA;AAC5D,IAAA,IAAI,KAAA,CAAM,KAAK,CAAC,CAAA,KAAM,OAAO,KAAA,CAAM,CAAC,CAAC,CAAA,EAAG,OAAO,IAAA;AAC/C,IAAA,IAAI,OAAA,GAAU,CAAA;AACd,IAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,MAAA,OAAA,GAAU,KAAA,CAAM,CAAC,CAAA,GAAI,IAAA,GAAO,MAAM,CAAC,CAAA,GAAI,EAAA,GAAK,KAAA,CAAM,CAAC,CAAA;AAAA,IACrD,CAAA,MAAO;AACL,MAAA,OAAA,GAAU,KAAA,CAAM,CAAC,CAAA,GAAI,EAAA,GAAK,MAAM,CAAC,CAAA;AAAA,IACnC;AACA,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,OAAO,CAAA;AAAA,EAC5B;AACA,EAAA,OAAO,IAAA;AACT;;;ACnBO,IAAM,uBAAA,GAA0B,CAAC,IAAA,KAAyB;AAC/D,EAAA,MAAM,aAAa,IAAA,CAAK,GAAA,CAAI,GAAG,IAAA,CAAK,KAAA,CAAM,IAAI,CAAC,CAAA;AAC/C,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,UAAA,GAAa,IAAI,CAAA;AACtC,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,KAAA,CAAO,UAAA,GAAa,OAAQ,EAAE,CAAA;AAC7C,EAAA,MAAM,IAAI,UAAA,GAAa,EAAA;AACvB,EAAA,IAAI,GAAA,GAAM,EAAA;AACV,EAAA,IAAI,CAAA,GAAI,CAAA,EAAG,GAAA,IAAO,CAAA,EAAG,CAAC,CAAA,CAAA,CAAA;AACtB,EAAA,IAAI,CAAA,GAAI,CAAA,EAAG,GAAA,IAAO,CAAA,EAAG,CAAC,CAAA,CAAA,CAAA;AACtB,EAAA,IAAI,IAAI,CAAA,IAAK,GAAA,KAAQ,EAAA,EAAI,GAAA,IAAO,GAAG,CAAC,CAAA,CAAA,CAAA;AACpC,EAAA,OAAO,GAAA;AACT;;;ACXO,SAAS,mBAAmB,YAAA,EAA8B;AAC/D,EAAA,MAAM,UAAU,IAAA,CAAK,GAAA,CAAI,GAAG,IAAA,CAAK,KAAA,CAAM,YAAY,CAAC,CAAA;AACpD,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,OAAA,GAAU,IAAI,CAAA;AACvC,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAO,OAAA,GAAU,OAAQ,EAAE,CAAA;AAChD,EAAA,MAAM,UAAU,OAAA,GAAU,EAAA;AAC1B,EAAA,MAAM,KAAK,MAAA,CAAO,KAAK,CAAA,CAAE,QAAA,CAAS,GAAG,GAAG,CAAA;AACxC,EAAA,MAAM,KAAK,MAAA,CAAO,OAAO,CAAA,CAAE,QAAA,CAAS,GAAG,GAAG,CAAA;AAC1C,EAAA,MAAM,KAAK,MAAA,CAAO,OAAO,CAAA,CAAE,QAAA,CAAS,GAAG,GAAG,CAAA;AAE1C,EAAA,IAAI,UAAU,CAAA,EAAG;AACf,IAAA,OAAO,CAAA,EAAG,EAAE,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA;AAAA,EACpB;AAEA,EAAA,OAAO,CAAA,EAAG,EAAE,CAAA,CAAA,EAAI,EAAE,IAAI,EAAE,CAAA,CAAA;AAC1B;;;ACdO,IAAM,kBAAA,GAAqB,CAAC,GAAA,KAAgB;AACjD,EAAA,MAAM,aAAA,GAAgB,OAAO,GAAA,CAAI,OAAA,CAAQ,OAAO,EAAE,CAAC,EAAE,QAAA,EAAS;AAC9D,EAAA,IAAI,aAAA,CAAc,SAAS,CAAA,EAAG;AAC5B,IAAA,OAAO,aAAA,CACJ,QAAA,CAAS,CAAA,EAAG,GAAG,CAAA,CACf,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,CACV,OAAA,CAAQ,uBAAA,EAAyB,UAAU,CAAA;AAAA,EAChD;AAEA,EAAA,OAAO,cAAc,QAAA,CAAS,CAAA,EAAG,GAAG,CAAA,CAAE,OAAA,CAAQ,kBAAkB,OAAO,CAAA;AACzE;;;ACVO,SAAS,UAAU,GAAA,EAAqB;AAC7C,EAAA,IAAI,OAAO,QAAQ,QAAA,EAAU;AAC3B,IAAA,MAAM,IAAI,MAAM,wBAAwB,CAAA;AAAA,EAC1C;AAEA,EAAA,OAAO,IACJ,OAAA,CAAQ,iBAAA,EAAmB,OAAO,CAAA,CAClC,QAAQ,SAAA,EAAW,GAAG,CAAA,CACtB,OAAA,CAAQ,kBAAkB,EAAE,CAAA,CAC5B,aAAY,CACZ,OAAA,CAAQ,YAAY,EAAE,CAAA;AAC3B;;;ACXO,SAAS,eAAe,QAAA,EAA0B;AACvD,EAAA,IAAI,CAAC,UAAU,OAAO,EAAA;AAGtB,EAAA,IAAI,IAAA,GAAO,QAAA,CAAS,OAAA,CAAQ,QAAA,EAAU,IAAI,CAAA;AAG1C,EAAA,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,iBAAA,EAAmB,CAAC,CAAA,KAAM;AAC5C,IAAA,MAAM,KAAA,GAAQ,EAAE,OAAA,CAAQ,WAAA,EAAa,EAAE,CAAA,CAAE,OAAA,CAAQ,QAAQ,EAAE,CAAA;AAC3D,IAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,YAAA,EAAc,EAAE,CAAA;AAAA,EACvC,CAAC,CAAA;AAGD,EAAA,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,YAAA,EAAc,IAAI,CAAA;AAGtC,EAAA,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,6BAAA,EAA+B,IAAI,CAAA;AAGvD,EAAA,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,4BAAA,EAA8B,IAAI,CAAA;AAGtD,EAAA,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,4BAAA,EAA8B,IAAI,CAAA;AAGtD,EAAA,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,eAAA,EAAiB,EAAE,CAAA;AAIvC,EAAA,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,qCAAA,EAAuC,EAAE,CAAA;AAC7D,EAAA,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,uCAAA,EAAyC,EAAE,CAAA;AAG/D,EAAA,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,aAAA,EAAe,EAAE,CAAA;AAGrC,EAAA,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,mBAAA,EAAqB,IAAI,CAAA;AAC7C,EAAA,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,gBAAA,EAAkB,IAAI,CAAA;AAC1C,EAAA,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,YAAA,EAAc,IAAI,CAAA;AAGtC,EAAA,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,qBAAA,EAAuB,EAAE,CAAA;AAG7C,EAAA,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,gBAAA,EAAkB,EAAE,CAAA;AAGxC,EAAA,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,4BAAA,EAA8B,EAAE,CAAA;AAKpD,EAAA,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,8CAAA,EAAgD,EAAE,CAAA;AACtE,EAAA,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,KAAA,EAAO,KAAK,CAAA;AAGhC,EAAA,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,WAAA,EAAa,EAAE,CAAA;AAGnC,EAAA,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,gBAAA,EAAkB,IAAI,CAAA;AAG1C,EAAA,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,eAAA,EAAiB,EAAE,CAAA;AAIvC,EAAA,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,8BAAA,EAAgC,EAAE,CAAA;AAGtD,EAAA,MAAM,QAAA,GAAmC;AAAA,IACvC,OAAA,EAAS,GAAA;AAAA,IACT,MAAA,EAAQ,GAAA;AAAA,IACR,MAAA,EAAQ,GAAA;AAAA,IACR,QAAA,EAAU,GAAA;AAAA,IACV,OAAA,EAAS;AAAA,GACX;AACA,EAAA,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,kBAAA,EAAoB,CAAC,CAAA,KAAG;AA5E9C,IAAA,IAAA,EAAA;AA4EiD,IAAA,OAAA,CAAA,EAAA,GAAA,QAAA,CAAS,CAAC,MAAV,IAAA,GAAA,EAAA,GAAe,CAAA;AAAA,EAAA,CAAC,CAAA;AAG/D,EAAA,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,WAAA,EAAa,EAAE,CAAA;AAGnC,EAAA,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,SAAA,EAAW,MAAM,CAAA;AAGrC,EAAA,OAAO,KAAK,IAAA,EAAK;AACnB;;;ACtFO,SAAS,eAAe,KAAA,EAAuB;AAEpD,EAAA,IAAI,CAAC,KAAA,IAAS,OAAO,KAAA,KAAU,QAAA,EAAU;AACvC,IAAA,OAAO,EAAA;AAAA,EACT;AAGA,EAAA,MAAM,SAAA,GAAY,GAAA;AAClB,EAAA,IAAI,YAAA,GAAe,KAAA;AACnB,EAAA,IAAI,YAAA,CAAa,SAAS,SAAA,EAAW;AACnC,IAAA,YAAA,GAAe,YAAA,CAAa,KAAA,CAAM,CAAA,EAAG,SAAS,CAAA;AAAA,EAChD;AAGA,EAAA,OAAO,YAAA,CAAa,OAAA,CAAQ,gCAAA,EAAkC,EAAE,CAAA;AAClE;;;ACfO,SAAS,QAAQ,IAAA,EAAsB;AAC5C,EAAA,OAAO,KACJ,SAAA,CAAU,KAAK,EACf,OAAA,CAAQ,kBAAA,EAAoB,EAAE,CAAA,CAC9B,OAAA,CAAQ,WAAA,EAAa,EAAE,EACvB,IAAA,EAAK,CACL,QAAQ,MAAA,EAAQ,GAAG,EACnB,WAAA,EAAY;AACjB;;;ACRO,SAAS,UAAU,GAAA,EAAqB;AAC7C,EAAA,IAAI,OAAO,QAAQ,QAAA,EAAU;AAC3B,IAAA,MAAM,IAAI,MAAM,wBAAwB,CAAA;AAAA,EAC1C;AAEA,EAAA,OAAO,IACJ,OAAA,CAAQ,iBAAA,EAAmB,OAAO,CAAA,CAClC,QAAQ,SAAA,EAAW,GAAG,CAAA,CACtB,OAAA,CAAQ,kBAAkB,EAAE,CAAA,CAC5B,aAAY,CACZ,OAAA,CAAQ,YAAY,EAAE,CAAA;AAC3B;;;ACXO,SAAS,eAAe,GAAA,EAAa;AAC1C,EAAA,OAAO,GAAA,CACJ,QAAQ,IAAA,EAAM,GAAG,EACjB,OAAA,CAAQ,UAAA,EAAY,KAAK,CAAA,CACzB,WAAA,EAAY,CACZ,QAAQ,KAAA,EAAO,CAAC,CAAA,KAAM,CAAA,CAAE,WAAA,EAAa,EACrC,OAAA,CAAQ,MAAA,EAAQ,GAAG,CAAA,CACnB,IAAA,EAAK;AACV;;;ACRO,SAAS,QAAA,CAAS,GAAA,EAAa,MAAA,EAAgB,MAAA,GAAS,KAAA,EAAe;AAC5E,EAAA,IAAI,OAAO,QAAQ,QAAA,EAAU;AAC3B,IAAA,MAAM,IAAI,MAAM,wBAAwB,CAAA;AAAA,EAC1C;AAEA,EAAA,IAAI,OAAO,MAAA,KAAW,QAAA,IAAY,MAAA,GAAS,CAAA,EAAG;AAC5C,IAAA,MAAM,IAAI,MAAM,sCAAsC,CAAA;AAAA,EACxD;AAEA,EAAA,IAAI,GAAA,CAAI,UAAU,MAAA,EAAQ;AACxB,IAAA,OAAO,GAAA;AAAA,EACT;AAEA,EAAA,IAAI,WAAW,CAAA,EAAG;AAChB,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,OAAO,GAAA,CAAI,KAAA,CAAM,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,GAAG,MAAA,GAAS,MAAA,CAAO,MAAM,CAAC,CAAA,GAAI,MAAA;AAC7D","file":"chunk-HK727IAV.cjs","sourcesContent":["export function camelCase(str: string): string {\n if (typeof str !== \"string\") {\n throw new Error(\"Input must be a string\")\n }\n\n if (str.length === 0) {\n return str\n }\n\n const words = str\n .toLowerCase()\n .replace(/[^a-zA-Z0-9\\s\\-_]/g, \"\")\n .split(/[\\s\\-_]+/)\n .filter((word) => word.length > 0)\n\n if (words.length === 0) {\n return \"\"\n }\n\n return (\n words[0] +\n words\n .slice(1)\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(\"\")\n )\n}\n","export function capitalize(str: string): string {\n if (typeof str !== \"string\") {\n throw new Error(\"Input must be a string\")\n }\n\n if (str.length === 0) {\n return str\n }\n\n return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase()\n}\n","export const formatHMSToSeconds = (val?: number | string): number | null => {\n if (val == null || val === \"\") return null\n if (typeof val === \"number\")\n return Number.isFinite(val) ? Math.max(0, Math.floor(val)) : null\n const s = String(val).trim()\n // purely numeric string\n if (/^\\d+$/.test(s)) return Math.max(0, Number.parseInt(s, 10))\n // hh:mm:ss or mm:ss\n if (/^\\d{1,2}(:\\d{1,2}){1,2}$/.test(s)) {\n const parts = s.split(\":\").map((p) => Number.parseInt(p, 10))\n if (parts.some((n) => Number.isNaN(n))) return null\n let seconds = 0\n if (parts.length === 3) {\n seconds = parts[0] * 3600 + parts[1] * 60 + parts[2]\n } else {\n seconds = parts[0] * 60 + parts[1]\n }\n return Math.max(0, seconds)\n }\n return null\n}\n","/** convert seconds to \"1h2m3s\" or \"42s\" style for fragment */\nexport const formatSecondsToFragment = (secs: number): string => {\n const parsedSecs = Math.max(0, Math.floor(secs))\n const h = Math.floor(parsedSecs / 3600)\n const m = Math.floor((parsedSecs % 3600) / 60)\n const s = parsedSecs % 60\n let out = \"\"\n if (h > 0) out += `${h}h`\n if (m > 0) out += `${m}m`\n if (s > 0 || out === \"\") out += `${s}s`\n return out\n}\n","export function formatSecondsToHMS(totalSeconds: number): string {\n const rounded = Math.max(0, Math.round(totalSeconds))\n const hours = Math.floor(rounded / 3600)\n const minutes = Math.floor((rounded % 3600) / 60)\n const seconds = rounded % 60\n const hh = String(hours).padStart(2, \"0\")\n const mm = String(minutes).padStart(2, \"0\")\n const ss = String(seconds).padStart(2, \"0\")\n\n if (hours === 0) {\n return `${mm}:${ss}`\n }\n\n return `${hh}:${mm}:${ss}`\n}\n","export const formatStringToTime = (str: string) => {\n const stringCleaned = Number(str.replace(/\\D/g, \"\")).toString()\n if (stringCleaned.length > 4) {\n return stringCleaned\n .padStart(6, \"0\")\n .slice(0, 6)\n .replace(/(\\d{2})(\\d{2})(\\d{2})/, \"$1:$2:$3\")\n }\n\n return stringCleaned.padStart(4, \"0\").replace(/(\\d{2})(\\d{2})/, \"$1:$2\")\n}\n","export function kebabCase(str: string): string {\n if (typeof str !== \"string\") {\n throw new Error(\"Input must be a string\")\n }\n\n return str\n .replace(/([a-z])([A-Z])/g, \"$1-$2\")\n .replace(/[\\s_]+/g, \"-\")\n .replace(/[^a-zA-Z0-9-]/g, \"\")\n .toLowerCase()\n .replace(/^-+|-+$/g, \"\")\n}\n","export function markdownToText(markdown: string): string {\n if (!markdown) return \"\"\n\n // normalize newlines\n let text = markdown.replace(/\\r\\n?/g, \"\\n\")\n\n // Remove code fences but keep inner content (trim surrounding newlines to avoid extra blank lines)\n text = text.replace(/```[\\s\\S]*?```/g, (m) => {\n const inner = m.replace(/^```.*\\n?/, \"\").replace(/```$/, \"\")\n return inner.replace(/^\\n+|\\n+$/g, \"\")\n })\n\n // Remove inline code backticks\n text = text.replace(/`([^`]+)`/g, \"$1\")\n\n // Images: keep alt text if present\n text = text.replace(/!\\[([^\\]]*)\\]\\((?:[^)]+)\\)/g, \"$1\")\n\n // Links: keep link text\n text = text.replace(/\\[([^\\]]+)\\]\\((?:[^)]+)\\)/g, \"$1\")\n\n // Reference-style links: [text][id] -> text\n text = text.replace(/\\[([^\\]]+)\\]\\s*\\[[^\\]]*\\]/g, \"$1\")\n\n // Remove footnote markers like [^1] (do this before we mutate surrounding lines)\n text = text.replace(/\\[\\^[^\\]]+\\]/g, \"\")\n\n // Remove reference definitions like: [id]: url (and footnote defs like [^1]: note)\n // Remove the entire definition line including its trailing newline to avoid leaving blank lines\n text = text.replace(/^\\s*\\[[^\\]]+\\]:\\s*.*(?:\\r\\n?|\\n)?/gm, \"\")\n text = text.replace(/^\\s*\\[\\^[^\\]]+\\]:\\s*.*(?:\\r\\n?|\\n)?/gm, \"\")\n\n // Remove HTML tags but keep inner text\n text = text.replace(/<\\/?[^>]+>/g, \"\")\n\n // Remove emphasis markers (bold/italic/strikethrough), preserve text\n text = text.replace(/(\\*\\*|__)(.*?)\\1/g, \"$2\")\n text = text.replace(/(\\*|_)(.*?)\\1/g, \"$2\")\n text = text.replace(/~~(.*?)~~/g, \"$1\")\n\n // Remove headings (#, ##, etc.)\n text = text.replace(/^\\s{0,3}#{1,6}\\s*/gm, \"\")\n\n // Remove blockquote markers\n text = text.replace(/^\\s{0,3}>\\s?/gm, \"\")\n\n // Remove list markers (ordered and unordered)\n text = text.replace(/^\\s{0,3}([-+*]|\\d+\\.)\\s+/gm, \"\")\n\n // Remove table separator lines and keep table cell content by replacing pipes with spaced pipes\n // Match the separator line and any trailing newline so we don't leave an empty line behind\n // Remove separator lines entirely (don't insert an extra newline)\n text = text.replace(/^\\s*\\|?(?:\\s*:?-+:?\\s*\\|)+\\s*(?:\\r\\n?|\\n)?/gm, \"\")\n text = text.replace(/\\|/g, \" | \")\n\n // Trim leading whitespace on each line (fixes leading space introduced by replacing pipes)\n text = text.replace(/^[ \\t]+/gm, \"\")\n\n // 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\n text = text.replace(/\\|\\s{2}(?=\\d)/g, \"| \")\n\n // Remove footnote markers like [^1]\n text = text.replace(/\\[\\^[^\\]]+\\]/g, \"\")\n\n // Remove any leftover footnote-definition fragments that may have been concatenated to the previous line\n // e.g. \"Text^1: note\" -> \"Text\"\n text = text.replace(/\\^[0-9]+:\\s*.*(?:\\r\\n?|\\n)?/g, \"\")\n\n // Decode a few common HTML entities\n const entities: Record<string, string> = {\n \"&\": \"&\",\n \"<\": \"<\",\n \">\": \">\",\n \""\": '\"',\n \"'\": \"'\",\n }\n text = text.replace(/&[a-zA-Z0-9#]+;/g, (e) => entities[e] ?? e)\n\n // Trim trailing whitespace on each line\n text = text.replace(/[ \\t]+$/gm, \"\")\n\n // Collapse excessive blank lines to at most two (preserve paragraph breaks)\n text = text.replace(/\\n{3,}/g, \"\\n\\n\")\n\n // Final trim but preserve leading/trailing single newlines inside content as needed\n return text.trim()\n}\n","export function removeHtmlTags(input: string): string {\n // Input validation\n if (!input || typeof input !== \"string\") {\n return \"\"\n }\n\n // Apply reasonable input length limit for safety\n const maxLength = 100000 // Adjust based on your requirements\n let updatedInput = input\n if (updatedInput.length > maxLength) {\n updatedInput = updatedInput.slice(0, maxLength)\n }\n\n // Use a non-backtracking approach to prevent ReDoS vulnerabilities\n return updatedInput.replace(/<(?:[^>\"']|\"[^\"]*\"|'[^']*')*>/g, \"\")\n}\n","export function slugify(text: string): string {\n return text\n .normalize(\"NFD\")\n .replace(/[\\u0300-\\u036f]/g, \"\")\n .replace(/[^\\w\\s]/gi, \"\")\n .trim()\n .replace(/\\s+/g, \"-\")\n .toLowerCase()\n}\n","export function snakeCase(str: string): string {\n if (typeof str !== \"string\") {\n throw new Error(\"Input must be a string\")\n }\n\n return str\n .replace(/([a-z])([A-Z])/g, \"$1_$2\")\n .replace(/[\\s-]+/g, \"_\")\n .replace(/[^a-zA-Z0-9_]/g, \"\")\n .toLowerCase()\n .replace(/^_+|_+$/g, \"\")\n}\n","export function toSentenceCase(str: string) {\n return str\n .replace(/_/g, \" \")\n .replace(/([A-Z])/g, \" $1\")\n .toLowerCase()\n .replace(/^\\w/, (c) => c.toUpperCase())\n .replace(/\\s+/g, \" \")\n .trim()\n}\n","export function truncate(str: string, length: number, suffix = \"...\"): string {\n if (typeof str !== \"string\") {\n throw new Error(\"Input must be a string\")\n }\n\n if (typeof length !== \"number\" || length < 0) {\n throw new Error(\"Length must be a non-negative number\")\n }\n\n if (str.length <= length) {\n return str\n }\n\n if (length === 0) {\n return suffix\n }\n\n return str.slice(0, Math.max(0, length - suffix.length)) + suffix\n}\n"]}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunk5YOEKMTJ_cjs = require('./chunk-5YOEKMTJ.cjs');
|
|
4
|
+
var chunkHK727IAV_cjs = require('./chunk-HK727IAV.cjs');
|
|
5
|
+
var chunkVAZJXZU5_cjs = require('./chunk-VAZJXZU5.cjs');
|
|
6
|
+
|
|
7
|
+
// src/youtube/get-video-duration.ts
|
|
8
|
+
var YtApiLoading = null;
|
|
9
|
+
function loadYouTubeIFrameAPI() {
|
|
10
|
+
var _a;
|
|
11
|
+
if ((_a = window.YT) == null ? void 0 : _a.Player) return Promise.resolve();
|
|
12
|
+
if (YtApiLoading) return YtApiLoading;
|
|
13
|
+
YtApiLoading = new Promise((resolve) => {
|
|
14
|
+
const existing = document.querySelector(
|
|
15
|
+
'script[src="https://www.youtube.com/iframe_api"]'
|
|
16
|
+
);
|
|
17
|
+
if (existing) {
|
|
18
|
+
const poll = setInterval(() => {
|
|
19
|
+
var _a2;
|
|
20
|
+
if ((_a2 = window.YT) == null ? void 0 : _a2.Player) {
|
|
21
|
+
clearInterval(poll);
|
|
22
|
+
resolve();
|
|
23
|
+
}
|
|
24
|
+
}, 50);
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
const tag = document.createElement("script");
|
|
28
|
+
tag.src = "https://www.youtube.com/iframe_api";
|
|
29
|
+
tag.async = true;
|
|
30
|
+
document.body.appendChild(tag);
|
|
31
|
+
window.onYouTubeIframeAPIReady = () => {
|
|
32
|
+
resolve();
|
|
33
|
+
};
|
|
34
|
+
});
|
|
35
|
+
return YtApiLoading;
|
|
36
|
+
}
|
|
37
|
+
async function getYoutubeVideoDuration(videoUrl) {
|
|
38
|
+
const videoId = chunkVAZJXZU5_cjs.extractYouTubeId(videoUrl);
|
|
39
|
+
if (!videoId) return null;
|
|
40
|
+
const videoIsValid = await chunk5YOEKMTJ_cjs.validateYoutubeLink(videoUrl);
|
|
41
|
+
if (!videoIsValid) return null;
|
|
42
|
+
try {
|
|
43
|
+
await loadYouTubeIFrameAPI();
|
|
44
|
+
} catch (e) {
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
return await new Promise((resolve) => {
|
|
48
|
+
const iframeId = `yt-duration-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;
|
|
49
|
+
const iframe = document.createElement("iframe");
|
|
50
|
+
iframe.id = iframeId;
|
|
51
|
+
iframe.style.position = "fixed";
|
|
52
|
+
iframe.style.left = "-9999px";
|
|
53
|
+
iframe.style.width = "1px";
|
|
54
|
+
iframe.style.height = "1px";
|
|
55
|
+
iframe.style.opacity = "0";
|
|
56
|
+
iframe.style.pointerEvents = "none";
|
|
57
|
+
const origin = window.location.origin;
|
|
58
|
+
iframe.src = `https://www.youtube.com/embed/${encodeURIComponent(videoId)}?enablejsapi=1&origin=${encodeURIComponent(origin)}`;
|
|
59
|
+
let resolved = false;
|
|
60
|
+
let player = null;
|
|
61
|
+
let cleanupTimeout = null;
|
|
62
|
+
function cleanupAndResolve(result) {
|
|
63
|
+
if (resolved) return;
|
|
64
|
+
resolved = true;
|
|
65
|
+
try {
|
|
66
|
+
if (player && typeof player.destroy === "function") player.destroy();
|
|
67
|
+
} catch (e) {
|
|
68
|
+
}
|
|
69
|
+
try {
|
|
70
|
+
if (iframe.parentNode) iframe.parentNode.removeChild(iframe);
|
|
71
|
+
} catch (e) {
|
|
72
|
+
}
|
|
73
|
+
if (cleanupTimeout) window.clearTimeout(cleanupTimeout);
|
|
74
|
+
resolve(result);
|
|
75
|
+
}
|
|
76
|
+
cleanupTimeout = window.setTimeout(() => {
|
|
77
|
+
cleanupAndResolve(null);
|
|
78
|
+
}, 1e4);
|
|
79
|
+
document.body.appendChild(iframe);
|
|
80
|
+
try {
|
|
81
|
+
player = new window.YT.Player(iframeId, {
|
|
82
|
+
events: {
|
|
83
|
+
onReady: (e) => {
|
|
84
|
+
try {
|
|
85
|
+
let duration = e.target.getDuration();
|
|
86
|
+
if (!duration || duration === 0) {
|
|
87
|
+
let attempts = 0;
|
|
88
|
+
const tryInterval = setInterval(() => {
|
|
89
|
+
attempts += 1;
|
|
90
|
+
try {
|
|
91
|
+
duration = e.target.getDuration();
|
|
92
|
+
if (duration && duration > 0) {
|
|
93
|
+
clearInterval(tryInterval);
|
|
94
|
+
cleanupAndResolve(chunkHK727IAV_cjs.formatSecondsToHMS(duration));
|
|
95
|
+
} else if (attempts >= 8) {
|
|
96
|
+
clearInterval(tryInterval);
|
|
97
|
+
cleanupAndResolve(null);
|
|
98
|
+
}
|
|
99
|
+
} catch (e2) {
|
|
100
|
+
if (attempts >= 8) {
|
|
101
|
+
clearInterval(tryInterval);
|
|
102
|
+
cleanupAndResolve(null);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}, 300);
|
|
106
|
+
} else {
|
|
107
|
+
cleanupAndResolve(chunkHK727IAV_cjs.formatSecondsToHMS(duration));
|
|
108
|
+
}
|
|
109
|
+
} catch (e2) {
|
|
110
|
+
cleanupAndResolve(null);
|
|
111
|
+
}
|
|
112
|
+
},
|
|
113
|
+
onError: () => {
|
|
114
|
+
cleanupAndResolve(null);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
} catch (e) {
|
|
119
|
+
cleanupAndResolve(null);
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// src/youtube/get-youtube-thumbnail.ts
|
|
125
|
+
async function getYoutubeThumbnail(videoUrl) {
|
|
126
|
+
const { extractYouTubeId: extractYouTubeId2 } = await import('./extract-youtube-video-id-XVGNPUDX.cjs');
|
|
127
|
+
const videoId = extractYouTubeId2(videoUrl);
|
|
128
|
+
if (!videoId) return null;
|
|
129
|
+
const thumbs = [
|
|
130
|
+
`https://img.youtube.com/vi/${videoId}/maxresdefault.jpg`,
|
|
131
|
+
`https://img.youtube.com/vi/${videoId}/hqdefault.jpg`,
|
|
132
|
+
`https://img.youtube.com/vi/${videoId}/mqdefault.jpg`,
|
|
133
|
+
`https://img.youtube.com/vi/${videoId}/default.jpg`
|
|
134
|
+
];
|
|
135
|
+
const loadImage = (src) => new Promise((resolve) => {
|
|
136
|
+
const img = new Image();
|
|
137
|
+
img.onload = () => resolve(true);
|
|
138
|
+
img.onerror = () => resolve(false);
|
|
139
|
+
img.src = src;
|
|
140
|
+
});
|
|
141
|
+
for (const url of thumbs) {
|
|
142
|
+
try {
|
|
143
|
+
const ok = await loadImage(url);
|
|
144
|
+
if (ok) return url;
|
|
145
|
+
} catch (e) {
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
return null;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
exports.getYoutubeThumbnail = getYoutubeThumbnail;
|
|
152
|
+
exports.getYoutubeVideoDuration = getYoutubeVideoDuration;
|
|
153
|
+
//# sourceMappingURL=chunk-LJ6KOZD4.cjs.map
|
|
154
|
+
//# sourceMappingURL=chunk-LJ6KOZD4.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/youtube/get-video-duration.ts","../src/youtube/get-youtube-thumbnail.ts"],"names":["_a","extractYouTubeId","validateYoutubeLink","formatSecondsToHMS","e"],"mappings":";;;;;;;AAKA,IAAI,YAAA,GAAqC,IAAA;AAEzC,SAAS,oBAAA,GAAsC;AAP/C,EAAA,IAAA,EAAA;AAQE,EAAA,IAAA,CAAK,YAAe,EAAA,KAAf,IAAA,GAAA,MAAA,GAAA,EAAA,CAAmB,MAAA,EAAQ,OAAO,QAAQ,OAAA,EAAQ;AACvD,EAAA,IAAI,cAAc,OAAO,YAAA;AAEzB,EAAA,YAAA,GAAe,IAAI,OAAA,CAAQ,CAAC,OAAA,KAAY;AACtC,IAAA,MAAM,WAAW,QAAA,CAAS,aAAA;AAAA,MACxB;AAAA,KACF;AACA,IAAA,IAAI,QAAA,EAAU;AAEZ,MAAA,MAAM,IAAA,GAAO,YAAY,MAAM;AAjBrC,QAAA,IAAAA,GAAAA;AAkBQ,QAAA,IAAA,CAAKA,GAAAA,GAAA,MAAA,CAAe,EAAA,KAAf,IAAA,GAAA,MAAA,GAAAA,IAAmB,MAAA,EAAQ;AAC9B,UAAA,aAAA,CAAc,IAAI,CAAA;AAClB,UAAA,OAAA,EAAQ;AAAA,QACV;AAAA,MACF,GAAG,EAAE,CAAA;AACL,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,GAAA,GAAM,QAAA,CAAS,aAAA,CAAc,QAAQ,CAAA;AAC3C,IAAA,GAAA,CAAI,GAAA,GAAM,oCAAA;AACV,IAAA,GAAA,CAAI,KAAA,GAAQ,IAAA;AACZ,IAAA,QAAA,CAAS,IAAA,CAAK,YAAY,GAAG,CAAA;AAE5B,IAAC,MAAA,CAAe,0BAA0B,MAAM;AAC/C,MAAA,OAAA,EAAQ;AAAA,IACV,CAAA;AAAA,EACF,CAAC,CAAA;AAED,EAAA,OAAO,YAAA;AACT;AAOA,eAAsB,wBACpB,QAAA,EACwB;AACxB,EAAA,MAAM,OAAA,GAAUC,mCAAiB,QAAQ,CAAA;AACzC,EAAA,IAAI,CAAC,SAAS,OAAO,IAAA;AAErB,EAAA,MAAM,YAAA,GAAe,MAAMC,qCAAA,CAAoB,QAAQ,CAAA;AACvD,EAAA,IAAI,CAAC,cAAc,OAAO,IAAA;AAE1B,EAAA,IAAI;AACF,IAAA,MAAM,oBAAA,EAAqB;AAAA,EAC7B,CAAA,CAAA,OAAQ,CAAA,EAAA;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,OAAO,MAAM,IAAI,OAAA,CAAuB,CAAC,OAAA,KAAY;AACnD,IAAA,MAAM,QAAA,GAAW,CAAA,YAAA,EAAe,IAAA,CAAK,GAAA,EAAK,CAAA,CAAA,EAAI,IAAA,CAAK,MAAA,EAAO,CAAE,SAAS,EAAE,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,CAAA;AACpF,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,aAAA,CAAc,QAAQ,CAAA;AAE9C,IAAA,MAAA,CAAO,EAAA,GAAK,QAAA;AACZ,IAAA,MAAA,CAAO,MAAM,QAAA,GAAW,OAAA;AACxB,IAAA,MAAA,CAAO,MAAM,IAAA,GAAO,SAAA;AACpB,IAAA,MAAA,CAAO,MAAM,KAAA,GAAQ,KAAA;AACrB,IAAA,MAAA,CAAO,MAAM,MAAA,GAAS,KAAA;AACtB,IAAA,MAAA,CAAO,MAAM,OAAA,GAAU,GAAA;AACvB,IAAA,MAAA,CAAO,MAAM,aAAA,GAAgB,MAAA;AAG7B,IAAA,MAAM,MAAA,GAAS,OAAO,QAAA,CAAS,MAAA;AAC/B,IAAA,MAAA,CAAO,GAAA,GAAM,iCAAiC,kBAAA,CAAmB,OAAO,CAAC,CAAA,sBAAA,EAAyB,kBAAA,CAAmB,MAAM,CAAC,CAAA,CAAA;AAE5H,IAAA,IAAI,QAAA,GAAW,KAAA;AACf,IAAA,IAAI,MAAA,GAAc,IAAA;AAClB,IAAA,IAAI,cAAA,GAAgC,IAAA;AAEpC,IAAA,SAAS,kBAAkB,MAAA,EAAuB;AAChD,MAAA,IAAI,QAAA,EAAU;AACd,MAAA,QAAA,GAAW,IAAA;AACX,MAAA,IAAI;AACF,QAAA,IAAI,UAAU,OAAO,MAAA,CAAO,OAAA,KAAY,UAAA,SAAmB,OAAA,EAAQ;AAAA,MACrE,CAAA,CAAA,OAAQ,CAAA,EAAA;AAAA,MAER;AACA,MAAA,IAAI;AACF,QAAA,IAAI,MAAA,CAAO,UAAA,EAAY,MAAA,CAAO,UAAA,CAAW,YAAY,MAAM,CAAA;AAAA,MAC7D,CAAA,CAAA,OAAQ,CAAA,EAAA;AAAA,MAER;AACA,MAAA,IAAI,cAAA,EAAgB,MAAA,CAAO,YAAA,CAAa,cAAc,CAAA;AACtD,MAAA,OAAA,CAAQ,MAAM,CAAA;AAAA,IAChB;AAGA,IAAA,cAAA,GAAiB,MAAA,CAAO,WAAW,MAAM;AACvC,MAAA,iBAAA,CAAkB,IAAI,CAAA;AAAA,IACxB,GAAG,GAAK,CAAA;AAER,IAAA,QAAA,CAAS,IAAA,CAAK,YAAY,MAAM,CAAA;AAGhC,IAAA,IAAI;AACF,MAAA,MAAA,GAAS,IAAK,MAAA,CAAe,EAAA,CAAG,MAAA,CAAO,QAAA,EAAU;AAAA,QAC/C,MAAA,EAAQ;AAAA,UACN,OAAA,EAAS,CAAC,CAAA,KAAW;AACnB,YAAA,IAAI;AACF,cAAA,IAAI,QAAA,GAAW,CAAA,CAAE,MAAA,CAAO,WAAA,EAAY;AACpC,cAAA,IAAI,CAAC,QAAA,IAAY,QAAA,KAAa,CAAA,EAAG;AAE/B,gBAAA,IAAI,QAAA,GAAW,CAAA;AACf,gBAAA,MAAM,WAAA,GAAc,YAAY,MAAM;AACpC,kBAAA,QAAA,IAAY,CAAA;AACZ,kBAAA,IAAI;AACF,oBAAA,QAAA,GAAW,CAAA,CAAE,OAAO,WAAA,EAAY;AAChC,oBAAA,IAAI,QAAA,IAAY,WAAW,CAAA,EAAG;AAC5B,sBAAA,aAAA,CAAc,WAAW,CAAA;AACzB,sBAAA,iBAAA,CAAkBC,oCAAA,CAAmB,QAAQ,CAAC,CAAA;AAAA,oBAChD,CAAA,MAAA,IAAW,YAAY,CAAA,EAAG;AACxB,sBAAA,aAAA,CAAc,WAAW,CAAA;AACzB,sBAAA,iBAAA,CAAkB,IAAI,CAAA;AAAA,oBACxB;AAAA,kBACF,SAAQC,EAAAA,EAAA;AACN,oBAAA,IAAI,YAAY,CAAA,EAAG;AACjB,sBAAA,aAAA,CAAc,WAAW,CAAA;AACzB,sBAAA,iBAAA,CAAkB,IAAI,CAAA;AAAA,oBACxB;AAAA,kBACF;AAAA,gBACF,GAAG,GAAG,CAAA;AAAA,cACR,CAAA,MAAO;AACL,gBAAA,iBAAA,CAAkBD,oCAAA,CAAmB,QAAQ,CAAC,CAAA;AAAA,cAChD;AAAA,YACF,SAAQC,EAAAA,EAAA;AACN,cAAA,iBAAA,CAAkB,IAAI,CAAA;AAAA,YACxB;AAAA,UACF,CAAA;AAAA,UACA,SAAS,MAAM;AACb,YAAA,iBAAA,CAAkB,IAAI,CAAA;AAAA,UACxB;AAAA;AACF,OACD,CAAA;AAAA,IACH,CAAA,CAAA,OAAQ,CAAA,EAAA;AACN,MAAA,iBAAA,CAAkB,IAAI,CAAA;AAAA,IACxB;AAAA,EACF,CAAC,CAAA;AACH;;;ACnJA,eAAsB,oBACpB,QAAA,EACwB;AACxB,EAAA,MAAM,EAAE,gBAAA,EAAAH,iBAAAA,EAAiB,GAAI,MAAM,OAAO,yCAA4B,CAAA;AACtE,EAAA,MAAM,OAAA,GAAUA,kBAAiB,QAAQ,CAAA;AACzC,EAAA,IAAI,CAAC,SAAS,OAAO,IAAA;AAIrB,EAAA,MAAM,MAAA,GAAS;AAAA,IACb,8BAA8B,OAAO,CAAA,kBAAA,CAAA;AAAA,IACrC,8BAA8B,OAAO,CAAA,cAAA,CAAA;AAAA,IACrC,8BAA8B,OAAO,CAAA,cAAA,CAAA;AAAA,IACrC,8BAA8B,OAAO,CAAA,YAAA;AAAA,GACvC;AAEA,EAAA,MAAM,YAAY,CAAC,GAAA,KACjB,IAAI,OAAA,CAAiB,CAAC,OAAA,KAAY;AAChC,IAAA,MAAM,GAAA,GAAM,IAAI,KAAA,EAAM;AACtB,IAAA,GAAA,CAAI,MAAA,GAAS,MAAM,OAAA,CAAQ,IAAI,CAAA;AAC/B,IAAA,GAAA,CAAI,OAAA,GAAU,MAAM,OAAA,CAAQ,KAAK,CAAA;AACjC,IAAA,GAAA,CAAI,GAAA,GAAM,GAAA;AAAA,EACZ,CAAC,CAAA;AAEH,EAAA,KAAA,MAAW,OAAO,MAAA,EAAQ;AACxB,IAAA,IAAI;AACF,MAAA,MAAM,EAAA,GAAK,MAAM,SAAA,CAAU,GAAG,CAAA;AAC9B,MAAA,IAAI,IAAI,OAAO,GAAA;AAAA,IACjB,CAAA,CAAA,OAAQ,CAAA,EAAA;AAAA,IAER;AAAA,EACF;AAEA,EAAA,OAAO,IAAA;AACT","file":"chunk-LJ6KOZD4.cjs","sourcesContent":["/** biome-ignore-all lint/suspicious/noExplicitAny: Window is any */\nimport { formatSecondsToHMS } from \"../string\"\nimport { extractYouTubeId } from \"./extract-youtube-video-id\"\nimport { validateYoutubeLink } from \"./validate-youtube-link\"\n\nlet YtApiLoading: Promise<void> | null = null\n\nfunction loadYouTubeIFrameAPI(): Promise<void> {\n if ((window as any).YT?.Player) return Promise.resolve()\n if (YtApiLoading) return YtApiLoading\n\n YtApiLoading = new Promise((resolve) => {\n const existing = document.querySelector<HTMLScriptElement>(\n 'script[src=\"https://www.youtube.com/iframe_api\"]',\n )\n if (existing) {\n // Poll until the API is ready\n const poll = setInterval(() => {\n if ((window as any).YT?.Player) {\n clearInterval(poll)\n resolve()\n }\n }, 50)\n return\n }\n\n const tag = document.createElement(\"script\")\n tag.src = \"https://www.youtube.com/iframe_api\"\n tag.async = true\n document.body.appendChild(tag)\n\n ;(window as any).onYouTubeIframeAPIReady = () => {\n resolve()\n }\n })\n\n return YtApiLoading\n}\n\n/**\n * getYoutubeVideoDuration\n * Returns a function that accepts a YouTube URL (full or short) and returns a Promise\n * resolving to the video duration formatted as \"HH:MM:SS\" or null on failure.\n */\nexport async function getYoutubeVideoDuration(\n videoUrl: string,\n): Promise<string | null> {\n const videoId = extractYouTubeId(videoUrl)\n if (!videoId) return null\n\n const videoIsValid = await validateYoutubeLink(videoUrl)\n if (!videoIsValid) return null\n\n try {\n await loadYouTubeIFrameAPI()\n } catch {\n return null\n }\n\n return await new Promise<string | null>((resolve) => {\n const iframeId = `yt-duration-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`\n const iframe = document.createElement(\"iframe\")\n // create a minimal offscreen iframe for the player\n iframe.id = iframeId\n iframe.style.position = \"fixed\"\n iframe.style.left = \"-9999px\"\n iframe.style.width = \"1px\"\n iframe.style.height = \"1px\"\n iframe.style.opacity = \"0\"\n iframe.style.pointerEvents = \"none\"\n\n // embed URL with enablejsapi so we can construct YT.Player\n const origin = window.location.origin\n iframe.src = `https://www.youtube.com/embed/${encodeURIComponent(videoId)}?enablejsapi=1&origin=${encodeURIComponent(origin)}`\n\n let resolved = false\n let player: any = null\n let cleanupTimeout: number | null = null\n\n function cleanupAndResolve(result: string | null) {\n if (resolved) return\n resolved = true\n try {\n if (player && typeof player.destroy === \"function\") player.destroy()\n } catch {\n /* ignore */\n }\n try {\n if (iframe.parentNode) iframe.parentNode.removeChild(iframe)\n } catch {\n /* ignore */\n }\n if (cleanupTimeout) window.clearTimeout(cleanupTimeout)\n resolve(result)\n }\n\n // timeout fallback\n cleanupTimeout = window.setTimeout(() => {\n cleanupAndResolve(null)\n }, 10000) // 10s timeout\n\n document.body.appendChild(iframe)\n\n // Construct player\n try {\n player = new (window as any).YT.Player(iframeId, {\n events: {\n onReady: (e: any) => {\n try {\n let duration = e.target.getDuration()\n if (!duration || duration === 0) {\n // Sometimes duration is 0 immediately; try a few short retries\n let attempts = 0\n const tryInterval = setInterval(() => {\n attempts += 1\n try {\n duration = e.target.getDuration()\n if (duration && duration > 0) {\n clearInterval(tryInterval)\n cleanupAndResolve(formatSecondsToHMS(duration))\n } else if (attempts >= 8) {\n clearInterval(tryInterval)\n cleanupAndResolve(null)\n }\n } catch {\n if (attempts >= 8) {\n clearInterval(tryInterval)\n cleanupAndResolve(null)\n }\n }\n }, 300)\n } else {\n cleanupAndResolve(formatSecondsToHMS(duration))\n }\n } catch {\n cleanupAndResolve(null)\n }\n },\n onError: () => {\n cleanupAndResolve(null)\n },\n },\n })\n } catch {\n cleanupAndResolve(null)\n }\n })\n}\n","export async function getYoutubeThumbnail(\n videoUrl: string,\n): Promise<string | null> {\n const { extractYouTubeId } = await import(\"./extract-youtube-video-id\")\n const videoId = extractYouTubeId(videoUrl)\n if (!videoId) return null\n\n // Try loading YouTube thumbnail images — avoids CORS problems because\n // creating an Image and listening for load/error is not blocked by CORS.\n const thumbs = [\n `https://img.youtube.com/vi/${videoId}/maxresdefault.jpg`,\n `https://img.youtube.com/vi/${videoId}/hqdefault.jpg`,\n `https://img.youtube.com/vi/${videoId}/mqdefault.jpg`,\n `https://img.youtube.com/vi/${videoId}/default.jpg`,\n ]\n\n const loadImage = (src: string) =>\n new Promise<boolean>((resolve) => {\n const img = new Image()\n img.onload = () => resolve(true)\n img.onerror = () => resolve(false)\n img.src = src\n })\n\n for (const url of thumbs) {\n try {\n const ok = await loadImage(url)\n if (ok) return url\n } catch {\n // ignore and try next thumbnail\n }\n }\n\n return null\n}\n"]}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var fs = require('fs/promises');
|
|
4
|
+
|
|
5
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
6
|
+
|
|
7
|
+
var fs__default = /*#__PURE__*/_interopDefault(fs);
|
|
8
|
+
|
|
9
|
+
// src/files/file-exists.ts
|
|
10
|
+
var fileExists = async (filePath) => {
|
|
11
|
+
try {
|
|
12
|
+
await fs__default.default.access(filePath);
|
|
13
|
+
return true;
|
|
14
|
+
} catch (e) {
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
var fileDelete = async (filePath) => {
|
|
19
|
+
try {
|
|
20
|
+
if (await fileExists(filePath)) await fs__default.default.rm(filePath);
|
|
21
|
+
} catch (err) {
|
|
22
|
+
console.error(`Error deleting file at ${filePath}:`, err);
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
exports.fileDelete = fileDelete;
|
|
27
|
+
exports.fileExists = fileExists;
|
|
28
|
+
//# sourceMappingURL=chunk-N2DRAZ3A.cjs.map
|
|
29
|
+
//# sourceMappingURL=chunk-N2DRAZ3A.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/files/file-exists.ts","../src/files/file-delete.ts"],"names":["fs"],"mappings":";;;;;;;;;AAEO,IAAM,UAAA,GAAa,OAAO,QAAA,KAAqB;AACpD,EAAA,IAAI;AACF,IAAA,MAAMA,mBAAA,CAAG,OAAO,QAAQ,CAAA;AACxB,IAAA,OAAO,IAAA;AAAA,EACT,CAAA,CAAA,OAAQ,CAAA,EAAA;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF;ACNO,IAAM,UAAA,GAAa,OAAO,QAAA,KAAqB;AACpD,EAAA,IAAI;AACF,IAAA,IAAI,MAAM,UAAA,CAAW,QAAQ,GAAG,MAAMA,mBAAAA,CAAG,GAAG,QAAQ,CAAA;AAAA,EACtD,SAAS,GAAA,EAAK;AAEZ,IAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,uBAAA,EAA0B,QAAQ,CAAA,CAAA,CAAA,EAAK,GAAG,CAAA;AAAA,EAC1D;AACF","file":"chunk-N2DRAZ3A.cjs","sourcesContent":["import fs from \"node:fs/promises\"\n\nexport const fileExists = async (filePath: string) => {\n try {\n await fs.access(filePath)\n return true\n } catch {\n return false\n }\n}\n","import fs from \"node:fs/promises\"\nimport { fileExists } from \"./file-exists\"\n\nexport const fileDelete = async (filePath: string) => {\n try {\n if (await fileExists(filePath)) await fs.rm(filePath)\n } catch (err) {\n // Log but don't throw during cleanup\n console.error(`Error deleting file at ${filePath}:`, err)\n }\n}\n"]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// src/files/format-bytes.ts
|
|
2
|
+
function formatBytes(bytes) {
|
|
3
|
+
if (bytes < 0) {
|
|
4
|
+
throw new Error("Size in bytes cannot be negative");
|
|
5
|
+
}
|
|
6
|
+
const units = ["B", "KB", "MB", "GB", "TB", "PB"];
|
|
7
|
+
let size = bytes;
|
|
8
|
+
let index = 0;
|
|
9
|
+
while (size >= 1024 && index < units.length - 1) {
|
|
10
|
+
size /= 1024;
|
|
11
|
+
index++;
|
|
12
|
+
}
|
|
13
|
+
return `${size.toFixed(2)} ${units[index]}`;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export { formatBytes };
|
|
17
|
+
//# sourceMappingURL=chunk-O7SH3E3T.js.map
|
|
18
|
+
//# sourceMappingURL=chunk-O7SH3E3T.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/files/format-bytes.ts"],"names":[],"mappings":";AAAO,SAAS,YAAY,KAAA,EAAuB;AACjD,EAAA,IAAI,QAAQ,CAAA,EAAG;AACb,IAAA,MAAM,IAAI,MAAM,kCAAkC,CAAA;AAAA,EACpD;AAEA,EAAA,MAAM,QAAQ,CAAC,GAAA,EAAK,MAAM,IAAA,EAAM,IAAA,EAAM,MAAM,IAAI,CAAA;AAChD,EAAA,IAAI,IAAA,GAAO,KAAA;AACX,EAAA,IAAI,KAAA,GAAQ,CAAA;AAEZ,EAAA,OAAO,IAAA,IAAQ,IAAA,IAAQ,KAAA,GAAQ,KAAA,CAAM,SAAS,CAAA,EAAG;AAC/C,IAAA,IAAA,IAAQ,IAAA;AACR,IAAA,KAAA,EAAA;AAAA,EACF;AAEA,EAAA,OAAO,CAAA,EAAG,KAAK,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,EAAI,KAAA,CAAM,KAAK,CAAC,CAAA,CAAA;AAC3C","file":"chunk-O7SH3E3T.js","sourcesContent":["export function formatBytes(bytes: number): string {\n if (bytes < 0) {\n throw new Error(\"Size in bytes cannot be negative\")\n }\n\n const units = [\"B\", \"KB\", \"MB\", \"GB\", \"TB\", \"PB\"]\n let size = bytes\n let index = 0\n\n while (size >= 1024 && index < units.length - 1) {\n size /= 1024\n index++\n }\n\n return `${size.toFixed(2)} ${units[index]}`\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-P5YNRND6.cjs"}
|