@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,12 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkWGSFRFRO_cjs = require('../chunk-WGSFRFRO.cjs');
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
Object.defineProperty(exports, "apiClient", {
|
|
8
|
+
enumerable: true,
|
|
9
|
+
get: function () { return chunkWGSFRFRO_cjs.apiClient; }
|
|
10
|
+
});
|
|
11
|
+
//# sourceMappingURL=index.cjs.map
|
|
12
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.cjs"}
|
|
@@ -1,3 +1,14 @@
|
|
|
1
|
+
import { T as TTryCatchResult } from '../try-catch-B7WzqcPU.mjs';
|
|
2
|
+
|
|
3
|
+
interface IApiError {
|
|
4
|
+
message: string;
|
|
5
|
+
status?: number;
|
|
6
|
+
code?: string;
|
|
7
|
+
details?: unknown;
|
|
8
|
+
path?: string;
|
|
9
|
+
timestamp?: string;
|
|
10
|
+
}
|
|
11
|
+
|
|
1
12
|
interface ICustomRequestInit extends Omit<RequestInit, "body"> {
|
|
2
13
|
json?: unknown;
|
|
3
14
|
params?: Record<string, string | number | boolean | null | undefined>;
|
|
@@ -14,12 +25,12 @@ type TApiClientProps = {
|
|
|
14
25
|
getAccessToken?: () => Promise<string | null>;
|
|
15
26
|
getUserIP?: () => Promise<string | undefined>;
|
|
16
27
|
};
|
|
17
|
-
|
|
18
|
-
get: <T = unknown>(url: string, options?: ICustomRequestInit) => Promise<
|
|
19
|
-
post: <T = unknown>(url: string, options?: ICustomRequestInit) => Promise<
|
|
20
|
-
put: <T = unknown>(url: string, options?: ICustomRequestInit) => Promise<
|
|
21
|
-
delete: <T = unknown>(url: string, options?: ICustomRequestInit) => Promise<
|
|
22
|
-
patch: <T = unknown>(url: string, options?: ICustomRequestInit) => Promise<
|
|
28
|
+
declare const apiClient: (config?: TApiClientProps) => {
|
|
29
|
+
get: <T = unknown>(url: string, options?: ICustomRequestInit) => Promise<TTryCatchResult<T, IApiError, null>>;
|
|
30
|
+
post: <T = unknown>(url: string, options?: ICustomRequestInit) => Promise<TTryCatchResult<T, IApiError, null>>;
|
|
31
|
+
put: <T = unknown>(url: string, options?: ICustomRequestInit) => Promise<TTryCatchResult<T, IApiError, null>>;
|
|
32
|
+
delete: <T = unknown>(url: string, options?: ICustomRequestInit) => Promise<TTryCatchResult<T, IApiError, null>>;
|
|
33
|
+
patch: <T = unknown>(url: string, options?: ICustomRequestInit) => Promise<TTryCatchResult<T, IApiError, null>>;
|
|
23
34
|
};
|
|
24
|
-
|
|
25
|
-
|
|
35
|
+
|
|
36
|
+
export { type IApiError, apiClient };
|
package/dist/api/index.d.ts
CHANGED
|
@@ -1,3 +1,36 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import { T as TTryCatchResult } from '../try-catch-B7WzqcPU.js';
|
|
2
|
+
|
|
3
|
+
interface IApiError {
|
|
4
|
+
message: string;
|
|
5
|
+
status?: number;
|
|
6
|
+
code?: string;
|
|
7
|
+
details?: unknown;
|
|
8
|
+
path?: string;
|
|
9
|
+
timestamp?: string;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
interface ICustomRequestInit extends Omit<RequestInit, "body"> {
|
|
13
|
+
json?: unknown;
|
|
14
|
+
params?: Record<string, string | number | boolean | null | undefined>;
|
|
15
|
+
retry?: {
|
|
16
|
+
limit?: number;
|
|
17
|
+
methods?: string[];
|
|
18
|
+
statusCodes?: number[];
|
|
19
|
+
backoffLimit?: number;
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
type TApiClientProps = {
|
|
23
|
+
baseURL?: string;
|
|
24
|
+
onSignoutUnauthorized?: (response?: unknown) => void;
|
|
25
|
+
getAccessToken?: () => Promise<string | null>;
|
|
26
|
+
getUserIP?: () => Promise<string | undefined>;
|
|
27
|
+
};
|
|
28
|
+
declare const apiClient: (config?: TApiClientProps) => {
|
|
29
|
+
get: <T = unknown>(url: string, options?: ICustomRequestInit) => Promise<TTryCatchResult<T, IApiError, null>>;
|
|
30
|
+
post: <T = unknown>(url: string, options?: ICustomRequestInit) => Promise<TTryCatchResult<T, IApiError, null>>;
|
|
31
|
+
put: <T = unknown>(url: string, options?: ICustomRequestInit) => Promise<TTryCatchResult<T, IApiError, null>>;
|
|
32
|
+
delete: <T = unknown>(url: string, options?: ICustomRequestInit) => Promise<TTryCatchResult<T, IApiError, null>>;
|
|
33
|
+
patch: <T = unknown>(url: string, options?: ICustomRequestInit) => Promise<TTryCatchResult<T, IApiError, null>>;
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
export { type IApiError, apiClient };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunk2MANLCNG_cjs = require('../chunk-2MANLCNG.cjs');
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
Object.defineProperty(exports, "shuffle", {
|
|
8
|
+
enumerable: true,
|
|
9
|
+
get: function () { return chunk2MANLCNG_cjs.shuffle; }
|
|
10
|
+
});
|
|
11
|
+
Object.defineProperty(exports, "unique", {
|
|
12
|
+
enumerable: true,
|
|
13
|
+
get: function () { return chunk2MANLCNG_cjs.unique; }
|
|
14
|
+
});
|
|
15
|
+
//# sourceMappingURL=index.cjs.map
|
|
16
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.cjs"}
|
package/dist/array/index.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
// src/array/shuffle.ts
|
|
4
|
+
function shuffle(array) {
|
|
5
|
+
const shuffled = [...array];
|
|
6
|
+
for (let i = shuffled.length - 1; i > 0; i--) {
|
|
7
|
+
const randomBuffer = new Uint32Array(1);
|
|
8
|
+
crypto.getRandomValues(randomBuffer);
|
|
9
|
+
const j = randomBuffer[0] % (i + 1);
|
|
10
|
+
[shuffled[i], shuffled[j]] = [shuffled[j], shuffled[i]];
|
|
11
|
+
}
|
|
12
|
+
return shuffled;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
// src/array/unique.ts
|
|
16
|
+
function unique(array) {
|
|
17
|
+
return [...new Set(array)];
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
exports.shuffle = shuffle;
|
|
21
|
+
exports.unique = unique;
|
|
22
|
+
//# sourceMappingURL=chunk-2MANLCNG.cjs.map
|
|
23
|
+
//# sourceMappingURL=chunk-2MANLCNG.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/array/shuffle.ts","../src/array/unique.ts"],"names":[],"mappings":";;;AAAO,SAAS,QAAW,KAAA,EAAiB;AAC1C,EAAA,MAAM,QAAA,GAAW,CAAC,GAAG,KAAK,CAAA;AAC1B,EAAA,KAAA,IAAS,IAAI,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG,CAAA,GAAI,GAAG,CAAA,EAAA,EAAK;AAE5C,IAAA,MAAM,YAAA,GAAe,IAAI,WAAA,CAAY,CAAC,CAAA;AACtC,IAAA,MAAA,CAAO,gBAAgB,YAAY,CAAA;AAGnC,IAAA,MAAM,CAAA,GAAI,YAAA,CAAa,CAAC,CAAA,IAAK,CAAA,GAAI,CAAA,CAAA;AAGhC,IAAA,CAAC,QAAA,CAAS,CAAC,CAAA,EAAG,QAAA,CAAS,CAAC,CAAC,CAAA,GAAI,CAAC,QAAA,CAAS,CAAC,CAAA,EAAG,QAAA,CAAS,CAAC,CAAC,CAAA;AAAA,EACzD;AACA,EAAA,OAAO,QAAA;AACT;;;ACdO,SAAS,OAAU,KAAA,EAAiB;AACzC,EAAA,OAAO,CAAC,GAAG,IAAI,GAAA,CAAI,KAAK,CAAC,CAAA;AAC3B","file":"chunk-2MANLCNG.cjs","sourcesContent":["export function shuffle<T>(array: T[]): T[] {\n const shuffled = [...array]\n for (let i = shuffled.length - 1; i > 0; i--) {\n // Get cryptographically strong random values\n const randomBuffer = new Uint32Array(1)\n crypto.getRandomValues(randomBuffer)\n\n // Use modulo to get a value in our range\n const j = randomBuffer[0] % (i + 1)\n\n // Swap elements\n ;[shuffled[i], shuffled[j]] = [shuffled[j], shuffled[i]]\n }\n return shuffled\n}\n","export function unique<T>(array: T[]): T[] {\n return [...new Set(array)]\n}\n"]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// src/array/shuffle.ts
|
|
2
|
+
function shuffle(array) {
|
|
3
|
+
const shuffled = [...array];
|
|
4
|
+
for (let i = shuffled.length - 1; i > 0; i--) {
|
|
5
|
+
const randomBuffer = new Uint32Array(1);
|
|
6
|
+
crypto.getRandomValues(randomBuffer);
|
|
7
|
+
const j = randomBuffer[0] % (i + 1);
|
|
8
|
+
[shuffled[i], shuffled[j]] = [shuffled[j], shuffled[i]];
|
|
9
|
+
}
|
|
10
|
+
return shuffled;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
// src/array/unique.ts
|
|
14
|
+
function unique(array) {
|
|
15
|
+
return [...new Set(array)];
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export { shuffle, unique };
|
|
19
|
+
//# sourceMappingURL=chunk-2RTW37WD.js.map
|
|
20
|
+
//# sourceMappingURL=chunk-2RTW37WD.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/array/shuffle.ts","../src/array/unique.ts"],"names":[],"mappings":";AAAO,SAAS,QAAW,KAAA,EAAiB;AAC1C,EAAA,MAAM,QAAA,GAAW,CAAC,GAAG,KAAK,CAAA;AAC1B,EAAA,KAAA,IAAS,IAAI,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG,CAAA,GAAI,GAAG,CAAA,EAAA,EAAK;AAE5C,IAAA,MAAM,YAAA,GAAe,IAAI,WAAA,CAAY,CAAC,CAAA;AACtC,IAAA,MAAA,CAAO,gBAAgB,YAAY,CAAA;AAGnC,IAAA,MAAM,CAAA,GAAI,YAAA,CAAa,CAAC,CAAA,IAAK,CAAA,GAAI,CAAA,CAAA;AAGhC,IAAA,CAAC,QAAA,CAAS,CAAC,CAAA,EAAG,QAAA,CAAS,CAAC,CAAC,CAAA,GAAI,CAAC,QAAA,CAAS,CAAC,CAAA,EAAG,QAAA,CAAS,CAAC,CAAC,CAAA;AAAA,EACzD;AACA,EAAA,OAAO,QAAA;AACT;;;ACdO,SAAS,OAAU,KAAA,EAAiB;AACzC,EAAA,OAAO,CAAC,GAAG,IAAI,GAAA,CAAI,KAAK,CAAC,CAAA;AAC3B","file":"chunk-2RTW37WD.js","sourcesContent":["export function shuffle<T>(array: T[]): T[] {\n const shuffled = [...array]\n for (let i = shuffled.length - 1; i > 0; i--) {\n // Get cryptographically strong random values\n const randomBuffer = new Uint32Array(1)\n crypto.getRandomValues(randomBuffer)\n\n // Use modulo to get a value in our range\n const j = randomBuffer[0] % (i + 1)\n\n // Swap elements\n ;[shuffled[i], shuffled[j]] = [shuffled[j], shuffled[i]]\n }\n return shuffled\n}\n","export function unique<T>(array: T[]): T[] {\n return [...new Set(array)]\n}\n"]}
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
import { isAxiosError } from 'axios';
|
|
2
|
+
|
|
3
|
+
// src/api/wrapper.ts
|
|
4
|
+
async function extractAxiosErrorDetails(error) {
|
|
5
|
+
var _a, _b, _c;
|
|
6
|
+
const errorObj = {
|
|
7
|
+
message: error.message || "Axios Error",
|
|
8
|
+
status: (_a = error.response) == null ? void 0 : _a.status,
|
|
9
|
+
path: (_b = error.config) == null ? void 0 : _b.url
|
|
10
|
+
};
|
|
11
|
+
if (((_c = error.response) == null ? void 0 : _c.data) && typeof error.response.data === "object") {
|
|
12
|
+
return await enrichErrorWithData(
|
|
13
|
+
errorObj,
|
|
14
|
+
Promise.resolve(error.response.data)
|
|
15
|
+
);
|
|
16
|
+
}
|
|
17
|
+
return errorObj;
|
|
18
|
+
}
|
|
19
|
+
function extractStandardErrorDetails(error) {
|
|
20
|
+
const errorObj = {
|
|
21
|
+
message: error.message
|
|
22
|
+
};
|
|
23
|
+
const extendedError = error;
|
|
24
|
+
if (extendedError.code) errorObj.code = String(extendedError.code);
|
|
25
|
+
if (extendedError.status) errorObj.status = Number(extendedError.status);
|
|
26
|
+
if (extendedError.details) errorObj.details = extendedError.details;
|
|
27
|
+
return errorObj;
|
|
28
|
+
}
|
|
29
|
+
async function extractResponseErrorDetails(response) {
|
|
30
|
+
const errorObj = {
|
|
31
|
+
message: `HTTP Error ${response.status}: ${response.statusText}`,
|
|
32
|
+
status: response.status,
|
|
33
|
+
path: response.url
|
|
34
|
+
};
|
|
35
|
+
try {
|
|
36
|
+
const clonedResponse = response.clone();
|
|
37
|
+
const errorData = await clonedResponse.json();
|
|
38
|
+
if (errorData && typeof errorData === "object") {
|
|
39
|
+
if ("message" in errorData && errorData.message) {
|
|
40
|
+
errorObj.message = String(errorData.message);
|
|
41
|
+
}
|
|
42
|
+
if ("code" in errorData) {
|
|
43
|
+
errorObj.code = String(errorData.code);
|
|
44
|
+
}
|
|
45
|
+
if ("details" in errorData) {
|
|
46
|
+
errorObj.details = errorData.details;
|
|
47
|
+
} else if ("issues" in errorData) {
|
|
48
|
+
errorObj.details = errorData.issues;
|
|
49
|
+
}
|
|
50
|
+
if ("timestamp" in errorData) {
|
|
51
|
+
errorObj.timestamp = String(errorData.timestamp);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return errorObj;
|
|
55
|
+
} catch (e) {
|
|
56
|
+
return errorObj;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
async function enrichErrorWithData(errorObj, errorData, path) {
|
|
60
|
+
const data = await errorData;
|
|
61
|
+
if (data) {
|
|
62
|
+
if ("message" in data) {
|
|
63
|
+
errorObj.message = String(data.message);
|
|
64
|
+
}
|
|
65
|
+
if ("code" in data) {
|
|
66
|
+
errorObj.code = String(data.code);
|
|
67
|
+
}
|
|
68
|
+
if ("details" in data) {
|
|
69
|
+
errorObj.details = data.details;
|
|
70
|
+
} else if ("issues" in data) {
|
|
71
|
+
errorObj.details = data.issues;
|
|
72
|
+
}
|
|
73
|
+
if ("timestamp" in data) {
|
|
74
|
+
errorObj.timestamp = String(data.timestamp);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return errorObj;
|
|
78
|
+
}
|
|
79
|
+
async function processError(error) {
|
|
80
|
+
if (error instanceof Response) {
|
|
81
|
+
return extractResponseErrorDetails(error);
|
|
82
|
+
}
|
|
83
|
+
if (isAxiosError(error)) {
|
|
84
|
+
return extractAxiosErrorDetails(error);
|
|
85
|
+
}
|
|
86
|
+
if (error instanceof Error) {
|
|
87
|
+
return extractStandardErrorDetails(error);
|
|
88
|
+
}
|
|
89
|
+
return {
|
|
90
|
+
message: error ? JSON.stringify(error) : "Unknown error"
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
async function apiWrapper(apiCall, defaultData) {
|
|
94
|
+
try {
|
|
95
|
+
const data = await apiCall();
|
|
96
|
+
return {
|
|
97
|
+
data,
|
|
98
|
+
error: null
|
|
99
|
+
};
|
|
100
|
+
} catch (error) {
|
|
101
|
+
const errorObj = await processError(error);
|
|
102
|
+
return {
|
|
103
|
+
data: defaultData != null ? defaultData : null,
|
|
104
|
+
error: errorObj
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// src/api/client.ts
|
|
110
|
+
var defaultRetryConfig = {
|
|
111
|
+
limit: 5,
|
|
112
|
+
methods: ["get"],
|
|
113
|
+
statusCodes: [413],
|
|
114
|
+
backoffLimit: 3e3
|
|
115
|
+
};
|
|
116
|
+
function buildQueryString(params) {
|
|
117
|
+
const searchParams = new URLSearchParams();
|
|
118
|
+
Object.entries(params).forEach(([key, value]) => {
|
|
119
|
+
if (value !== null && value !== void 0) {
|
|
120
|
+
searchParams.append(key, String(value));
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
const queryString = searchParams.toString();
|
|
124
|
+
return queryString ? `?${queryString}` : "";
|
|
125
|
+
}
|
|
126
|
+
async function beforeRequestHook(request, getAccessToken, getUserIP) {
|
|
127
|
+
const token = await (getAccessToken == null ? void 0 : getAccessToken());
|
|
128
|
+
const headers = new Headers(request.headers);
|
|
129
|
+
if (token) {
|
|
130
|
+
headers.set("Authorization", `Bearer ${token}`);
|
|
131
|
+
}
|
|
132
|
+
const userIP = await (getUserIP == null ? void 0 : getUserIP());
|
|
133
|
+
if (userIP) {
|
|
134
|
+
headers.set("X-User-IP", userIP);
|
|
135
|
+
}
|
|
136
|
+
let body;
|
|
137
|
+
try {
|
|
138
|
+
const cloned = request.clone();
|
|
139
|
+
const text = await cloned.text();
|
|
140
|
+
body = text === "" ? void 0 : text;
|
|
141
|
+
} catch (_a) {
|
|
142
|
+
body = void 0;
|
|
143
|
+
}
|
|
144
|
+
return new Request(request, { headers, body });
|
|
145
|
+
}
|
|
146
|
+
async function afterResponseHook(request, response, onSignoutUnauthorized) {
|
|
147
|
+
const possibleSignInPaths = ["signin", "sign-in", "login"];
|
|
148
|
+
const isSignInPath = possibleSignInPaths.some(
|
|
149
|
+
(path) => request.url.includes(path)
|
|
150
|
+
);
|
|
151
|
+
const needsBody = response.status === 401 && !isSignInPath;
|
|
152
|
+
let responseBody = null;
|
|
153
|
+
let responseBodyFor401 = null;
|
|
154
|
+
if (needsBody) {
|
|
155
|
+
const clone = response.clone();
|
|
156
|
+
try {
|
|
157
|
+
responseBody = await clone.json();
|
|
158
|
+
responseBodyFor401 = responseBody;
|
|
159
|
+
} catch (e) {
|
|
160
|
+
responseBody = await clone.text();
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
if (response.status === 401 && !isSignInPath) {
|
|
164
|
+
return onSignoutUnauthorized == null ? void 0 : onSignoutUnauthorized(responseBodyFor401);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
async function fetchWithRetry(input, init) {
|
|
168
|
+
var _a, _b, _c, _d;
|
|
169
|
+
const retryConfig = (init == null ? void 0 : init.retry) || defaultRetryConfig;
|
|
170
|
+
const method = ((init == null ? void 0 : init.method) || "GET").toLowerCase();
|
|
171
|
+
let attempt = 0;
|
|
172
|
+
while (true) {
|
|
173
|
+
attempt++;
|
|
174
|
+
const response = await fetch(input, init);
|
|
175
|
+
const shouldRetry = ((_a = retryConfig.statusCodes) == null ? void 0 : _a.includes(response.status)) && ((_b = retryConfig.methods) == null ? void 0 : _b.includes(method)) && attempt < ((_c = retryConfig.limit) != null ? _c : 5);
|
|
176
|
+
if (!shouldRetry) return response;
|
|
177
|
+
const backoff = Math.min(
|
|
178
|
+
2 ** attempt * 100,
|
|
179
|
+
(_d = retryConfig.backoffLimit) != null ? _d : 3e3
|
|
180
|
+
);
|
|
181
|
+
await new Promise((resolve) => setTimeout(resolve, backoff));
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
async function api(config, endpoint, options = {}) {
|
|
185
|
+
var _a, _b;
|
|
186
|
+
let url = endpoint.startsWith("http") ? endpoint : `${(_a = config.baseURL) == null ? void 0 : _a.replace(/\/$/, "")}/${endpoint.replace(/^\//, "")}`;
|
|
187
|
+
if (options.params) {
|
|
188
|
+
const queryString = buildQueryString(options.params);
|
|
189
|
+
url += queryString;
|
|
190
|
+
}
|
|
191
|
+
const init = {
|
|
192
|
+
credentials: "include",
|
|
193
|
+
...options
|
|
194
|
+
};
|
|
195
|
+
let body;
|
|
196
|
+
if (options.json !== void 0 && options.json !== null) {
|
|
197
|
+
body = JSON.stringify(options.json);
|
|
198
|
+
if (body && body !== "null" && body !== "undefined") {
|
|
199
|
+
init.headers = {
|
|
200
|
+
...init.headers,
|
|
201
|
+
"Content-Type": "application/json"
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
if (!body) {
|
|
206
|
+
const headers = new Headers(init.headers);
|
|
207
|
+
if (((_b = headers.get("Content-Type")) == null ? void 0 : _b.toLowerCase()) === "application/json") {
|
|
208
|
+
headers.delete("Content-Type");
|
|
209
|
+
init.headers = headers;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
let request = new Request(url, { ...init, body });
|
|
213
|
+
request = await beforeRequestHook(
|
|
214
|
+
request,
|
|
215
|
+
config.getAccessToken,
|
|
216
|
+
config.getUserIP
|
|
217
|
+
);
|
|
218
|
+
init.headers = new Headers(request.headers);
|
|
219
|
+
const response = await fetchWithRetry(request, init);
|
|
220
|
+
await afterResponseHook(request, response, config.onSignoutUnauthorized);
|
|
221
|
+
if (!response.ok) {
|
|
222
|
+
throw response;
|
|
223
|
+
}
|
|
224
|
+
if (response.status === 204) {
|
|
225
|
+
return null;
|
|
226
|
+
}
|
|
227
|
+
const text = await response.text();
|
|
228
|
+
if (!text) {
|
|
229
|
+
return null;
|
|
230
|
+
}
|
|
231
|
+
return JSON.parse(text);
|
|
232
|
+
}
|
|
233
|
+
var apiClient = (config) => {
|
|
234
|
+
const apiConfig = {
|
|
235
|
+
...config
|
|
236
|
+
};
|
|
237
|
+
return {
|
|
238
|
+
get: (url, options) => apiWrapper(() => api(apiConfig, url, options)),
|
|
239
|
+
post: (url, options) => apiWrapper(() => api(apiConfig, url, { ...options, method: "POST" })),
|
|
240
|
+
put: (url, options) => apiWrapper(() => api(apiConfig, url, { ...options, method: "PUT" })),
|
|
241
|
+
delete: (url, options) => apiWrapper(
|
|
242
|
+
() => api(apiConfig, url, { ...options, method: "DELETE" })
|
|
243
|
+
),
|
|
244
|
+
patch: (url, options) => apiWrapper(() => api(apiConfig, url, { ...options, method: "PATCH" }))
|
|
245
|
+
};
|
|
246
|
+
};
|
|
247
|
+
|
|
248
|
+
export { apiClient };
|
|
249
|
+
//# sourceMappingURL=chunk-2Y6M7IOG.js.map
|
|
250
|
+
//# sourceMappingURL=chunk-2Y6M7IOG.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/api/wrapper.ts","../src/api/client.ts"],"names":[],"mappings":"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","file":"chunk-2Y6M7IOG.js","sourcesContent":["import type { AxiosError } from \"axios\"\nimport { isAxiosError } from \"axios\"\nimport type { TTryCatchResult } from \"../function\"\n\n// Define a richer error type to capture more information\nexport interface IApiError {\n message: string\n status?: number\n code?: string\n details?: unknown\n path?: string\n timestamp?: string\n}\n\n/**\n * Extracts error properties from Axios errors\n */\nasync function extractAxiosErrorDetails(error: AxiosError): Promise<IApiError> {\n const errorObj: IApiError = {\n message: error.message || \"Axios Error\",\n status: error.response?.status,\n path: error.config?.url,\n }\n\n if (error.response?.data && typeof error.response.data === \"object\") {\n return await enrichErrorWithData(\n errorObj,\n Promise.resolve(error.response.data as Record<string, unknown>),\n )\n }\n\n return errorObj\n}\n\n/**\n * Define extended error type with potential custom properties\n */\ninterface ExtendedError extends Error {\n code?: string | number\n status?: string | number\n details?: unknown\n}\n\n/**\n * Extracts error properties from standard Error objects\n */\nfunction extractStandardErrorDetails(error: Error): IApiError {\n const errorObj: IApiError = {\n message: error.message,\n }\n\n // Capture any custom properties the error might have\n const extendedError = error as ExtendedError\n if (extendedError.code) errorObj.code = String(extendedError.code)\n if (extendedError.status) errorObj.status = Number(extendedError.status)\n if (extendedError.details) errorObj.details = extendedError.details\n\n return errorObj\n}\n\n/**\n * Extracts error properties from fetch Response objects\n */\nasync function extractResponseErrorDetails(\n response: Response,\n): Promise<IApiError> {\n const errorObj: IApiError = {\n message: `HTTP Error ${response.status}: ${response.statusText}`,\n status: response.status,\n path: response.url,\n }\n\n try {\n // Clone the response to avoid consuming the body stream\n const clonedResponse = response.clone()\n const errorData = await clonedResponse.json()\n\n // Directly enrich the error object with the parsed data\n if (errorData && typeof errorData === \"object\") {\n if (\"message\" in errorData && errorData.message) {\n errorObj.message = String(errorData.message)\n }\n\n if (\"code\" in errorData) {\n errorObj.code = String(errorData.code)\n }\n\n if (\"details\" in errorData) {\n errorObj.details = errorData.details\n } else if (\"issues\" in errorData) {\n errorObj.details = errorData.issues\n }\n\n if (\"timestamp\" in errorData) {\n errorObj.timestamp = String(errorData.timestamp)\n }\n }\n\n return errorObj\n } catch {\n // If JSON parsing fails, return the basic error object\n return errorObj\n }\n}\n\n/**\n * Enriches an error object with additional data from response\n */\nasync function enrichErrorWithData(\n errorObj: IApiError,\n errorData: Promise<Record<string, unknown>>,\n path?: string,\n): Promise<IApiError> {\n const data = await errorData\n\n if (data) {\n if (\"message\" in data) {\n errorObj.message = String(data.message)\n }\n\n if (\"code\" in data) {\n errorObj.code = String(data.code)\n }\n\n if (\"details\" in data) {\n errorObj.details = data.details\n } else if (\"issues\" in data) {\n errorObj.details = data.issues\n }\n\n if (\"timestamp\" in data) {\n errorObj.timestamp = String(data.timestamp)\n }\n\n if (path) {\n errorObj.path = path\n }\n }\n\n return errorObj\n}\n\n/**\n * Determines the type of error and routes to appropriate handler\n */\nasync function processError(error: unknown): Promise<IApiError> {\n if (error instanceof Response) {\n return extractResponseErrorDetails(error)\n }\n\n if (isAxiosError(error)) {\n return extractAxiosErrorDetails(error)\n }\n\n if (error instanceof Error) {\n return extractStandardErrorDetails(error)\n }\n\n // Handle unknown error types\n return {\n message: error ? JSON.stringify(error) : \"Unknown error\",\n }\n}\n\n/**\n * Wraps API calls with standardized error handling\n *\n * @param apiCall - The API call function to execute\n * @param defaultData - Optional default value to return when an error occurs\n * @returns A standardized result object with data or formatted error message\n *\n * @example\n * // Basic usage\n * const result = await apiWrapper(() => fetchUserData(userId));\n *\n * @example\n * // With default data value\n * const result = await apiWrapper(() => fetchPosts(), []);\n * // result.data will be [] instead of null on error\n */\nexport async function apiWrapper<T, D = null>(\n apiCall: () => Promise<T>,\n defaultData?: D,\n): Promise<TTryCatchResult<T, IApiError, D extends null ? null : D>> {\n try {\n const data = await apiCall()\n return {\n data,\n error: null,\n } as { data: T; error: null }\n } catch (error) {\n const errorObj = await processError(error)\n return {\n data: (defaultData ?? null) as D extends null ? null : D,\n error: errorObj,\n }\n }\n}\n","import { apiWrapper } from \"./wrapper\"\n\ninterface ICustomRequestInit extends Omit<RequestInit, \"body\"> {\n json?: unknown\n params?: Record<string, string | number | boolean | null | undefined>\n retry?: {\n limit?: number\n methods?: string[]\n statusCodes?: number[]\n backoffLimit?: number\n }\n}\n\nconst defaultRetryConfig = {\n limit: 5,\n methods: [\"get\"],\n statusCodes: [413],\n backoffLimit: 3000,\n}\n\nfunction buildQueryString(\n params: Record<string, string | number | boolean | null | undefined>,\n): string {\n const searchParams = new URLSearchParams()\n\n Object.entries(params).forEach(([key, value]) => {\n if (value !== null && value !== undefined) {\n searchParams.append(key, String(value))\n }\n })\n\n const queryString = searchParams.toString()\n return queryString ? `?${queryString}` : \"\"\n}\n\nasync function beforeRequestHook(\n request: Request,\n getAccessToken?: () => Promise<string | null>,\n getUserIP?: () => Promise<string | undefined>,\n): Promise<Request> {\n const token = await getAccessToken?.()\n const headers = new Headers(request.headers)\n\n if (token) {\n headers.set(\"Authorization\", `Bearer ${token}`)\n }\n\n const userIP = await getUserIP?.()\n if (userIP) {\n headers.set(\"X-User-IP\", userIP)\n }\n\n let body: string | undefined\n try {\n const cloned = request.clone()\n const text = await cloned.text()\n body = text === \"\" ? undefined : text\n } catch (_a) {\n body = undefined\n }\n\n return new Request(request, { headers, body })\n}\n\nasync function afterResponseHook(\n request: Request,\n response: Response,\n onSignoutUnauthorized?: (response: unknown) => void,\n): Promise<void> {\n const possibleSignInPaths = [\"signin\", \"sign-in\", \"login\"]\n const isSignInPath = possibleSignInPaths.some((path) =>\n request.url.includes(path),\n )\n const needsBody = response.status === 401 && !isSignInPath\n\n let responseBody: unknown = null\n let responseBodyFor401: unknown = null\n\n if (needsBody) {\n const clone = response.clone()\n try {\n responseBody = await clone.json()\n responseBodyFor401 = responseBody\n } catch {\n responseBody = await clone.text()\n }\n }\n\n if (response.status === 401 && !isSignInPath) {\n return onSignoutUnauthorized?.(responseBodyFor401)\n }\n}\n\nasync function fetchWithRetry(\n input: RequestInfo,\n init?: ICustomRequestInit,\n): Promise<Response> {\n const retryConfig = init?.retry || defaultRetryConfig\n const method = (init?.method || \"GET\").toLowerCase()\n let attempt = 0\n\n while (true) {\n attempt++\n const response = await fetch(input, init)\n\n const shouldRetry =\n retryConfig.statusCodes?.includes(response.status) &&\n retryConfig.methods?.includes(method) &&\n attempt < (retryConfig.limit ?? 5)\n\n if (!shouldRetry) return response\n\n const backoff = Math.min(\n 2 ** attempt * 100,\n retryConfig.backoffLimit ?? 3000,\n )\n await new Promise((resolve) => setTimeout(resolve, backoff))\n }\n}\n\ntype TApiClientProps = {\n baseURL?: string\n onSignoutUnauthorized?: (response?: unknown) => void\n getAccessToken?: () => Promise<string | null>\n getUserIP?: () => Promise<string | undefined>\n}\n\nasync function api<T>(\n config: TApiClientProps,\n endpoint: string,\n options: ICustomRequestInit = {},\n): Promise<T> {\n let url = endpoint.startsWith(\"http\")\n ? endpoint\n : `${config.baseURL?.replace(/\\/$/, \"\")}/${endpoint.replace(/^\\//, \"\")}`\n\n // Add query parameters if provided\n if (options.params) {\n const queryString = buildQueryString(options.params)\n url += queryString\n }\n\n // Apply default options\n const init: ICustomRequestInit = {\n credentials: \"include\",\n ...options,\n }\n\n let body: RequestInit[\"body\"]\n if (options.json !== undefined && options.json !== null) {\n body = JSON.stringify(options.json)\n // Only add Content-Type if body is not empty\n if (body && body !== \"null\" && body !== \"undefined\") {\n init.headers = {\n ...init.headers,\n \"Content-Type\": \"application/json\",\n }\n }\n }\n\n // Remove Content-Type application/json if there's no body\n if (!body) {\n const headers = new Headers(init.headers)\n if (headers.get(\"Content-Type\")?.toLowerCase() === \"application/json\") {\n headers.delete(\"Content-Type\")\n init.headers = headers\n }\n }\n\n // Create initial request\n let request = new Request(url, { ...init, body })\n\n // Run pre-request hooks\n request = await beforeRequestHook(\n request,\n config.getAccessToken,\n config.getUserIP,\n )\n\n // Keep init headers in sync with the mutated request so fetch keeps auth headers\n init.headers = new Headers(request.headers)\n\n // Execute request with retry logic\n const response = await fetchWithRetry(request, init)\n\n // Run post-response hooks\n await afterResponseHook(request, response, config.onSignoutUnauthorized)\n\n if (!response.ok) {\n throw response\n }\n\n if (response.status === 204) {\n return null as T\n }\n const text = await response.text()\n if (!text) {\n return null as T\n }\n return JSON.parse(text)\n}\n\nexport const apiClient = (config?: TApiClientProps) => {\n const apiConfig: TApiClientProps = {\n ...config,\n }\n\n return {\n get: <T = unknown>(url: string, options?: ICustomRequestInit) =>\n apiWrapper(() => api<T>(apiConfig, url, options)),\n\n post: <T = unknown>(url: string, options?: ICustomRequestInit) =>\n apiWrapper(() => api<T>(apiConfig, url, { ...options, method: \"POST\" })),\n\n put: <T = unknown>(url: string, options?: ICustomRequestInit) =>\n apiWrapper(() => api<T>(apiConfig, url, { ...options, method: \"PUT\" })),\n\n delete: <T = unknown>(url: string, options?: ICustomRequestInit) =>\n apiWrapper(() =>\n api<T>(apiConfig, url, { ...options, method: \"DELETE\" }),\n ),\n\n patch: <T = unknown>(url: string, options?: ICustomRequestInit) =>\n apiWrapper(() => api<T>(apiConfig, url, { ...options, method: \"PATCH\" })),\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-3JUB2OJL.js"}
|