@rzl-zone/utils-js 3.13.1 → 3.14.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -6
- package/dist/.references/index.d.cts +2 -1
- package/dist/.references/index.d.ts +2 -1
- package/dist/AbortError-DK6kpzbu.cjs +26 -0
- package/dist/AbortError-DK6kpzbu.cjs.map +1 -0
- package/dist/AbortError-DVT8lAKn.js +20 -0
- package/dist/AbortError-DVT8lAKn.js.map +1 -0
- package/dist/{assertIsArray-HgzPQIAM.js → assertIsArray-CG7L7vlt.js} +3 -3
- package/dist/assertIsArray-CG7L7vlt.js.map +1 -0
- package/dist/{assertIsArray-CeXL4xv5.cjs → assertIsArray-CtCRD-_G.cjs} +5 -5
- package/dist/assertIsArray-CtCRD-_G.cjs.map +1 -0
- package/dist/assertIsPlainObject-DPZLj-Ho.cjs +26 -0
- package/dist/assertIsPlainObject-DPZLj-Ho.cjs.map +1 -0
- package/dist/assertIsPlainObject-j9bDqNLo.js +20 -0
- package/dist/assertIsPlainObject-j9bDqNLo.js.map +1 -0
- package/dist/{assertIsString-CY_WkCLr.js → assertIsString-CHIwE12y.js} +4 -4
- package/dist/assertIsString-CHIwE12y.js.map +1 -0
- package/dist/{assertIsString-DUrVt82d.cjs → assertIsString-CjE9kbQ_.cjs} +6 -6
- package/dist/assertIsString-CjE9kbQ_.cjs.map +1 -0
- package/dist/assertions/index.cjs +14 -12
- package/dist/assertions/index.cjs.map +1 -1
- package/dist/assertions/index.d.cts +2 -2
- package/dist/assertions/index.d.ts +2 -2
- package/dist/assertions/index.js +10 -8
- package/dist/assertions/index.js.map +1 -1
- package/dist/conversions/index.cjs +6 -6
- package/dist/conversions/index.d.cts +2 -2
- package/dist/conversions/index.d.ts +2 -2
- package/dist/conversions/index.js +6 -6
- package/dist/conversions-BFz6MKaV.cjs +449 -0
- package/dist/conversions-BFz6MKaV.cjs.map +1 -0
- package/dist/{conversions-1s7xMBe_.js → conversions-Ben5p5Ts.js} +43 -40
- package/dist/conversions-Ben5p5Ts.js.map +1 -0
- package/dist/errors/index.cjs +13 -0
- package/dist/errors/index.d.cts +180 -0
- package/dist/errors/index.d.ts +180 -0
- package/dist/errors/index.js +11 -0
- package/dist/events/index.cjs +10 -9
- package/dist/events/index.cjs.map +1 -1
- package/dist/events/index.d.cts +185 -100
- package/dist/events/index.d.ts +185 -100
- package/dist/events/index.js +9 -8
- package/dist/events/index.js.map +1 -1
- package/dist/formatter-ekJQF_bA-BepnCBkQ.cjs +67 -0
- package/dist/formatter-ekJQF_bA-BepnCBkQ.cjs.map +1 -0
- package/dist/formatter-ekJQF_bA-xLD9mGk4.js +55 -0
- package/dist/formatter-ekJQF_bA-xLD9mGk4.js.map +1 -0
- package/dist/formatters/index.cjs +2 -2
- package/dist/formatters/index.d.cts +2 -2
- package/dist/formatters/index.d.ts +2 -2
- package/dist/formatters/index.js +2 -2
- package/dist/{formatters-C6cVZBbG.js → formatters-BAbGsnYA.js} +78 -71
- package/dist/formatters-BAbGsnYA.js.map +1 -0
- package/dist/formatters-zd0Gs4Cs.cjs +436 -0
- package/dist/formatters-zd0Gs4Cs.cjs.map +1 -0
- package/dist/generators/index.cjs +37 -31
- package/dist/generators/index.cjs.map +1 -1
- package/dist/generators/index.d.cts +2 -2
- package/dist/generators/index.d.ts +2 -2
- package/dist/generators/index.js +29 -23
- package/dist/generators/index.js.map +1 -1
- package/dist/hasOwnProp-CVIhlD1i.js +47 -0
- package/dist/hasOwnProp-CVIhlD1i.js.map +1 -0
- package/dist/hasOwnProp-D9Tpgokd.cjs +53 -0
- package/dist/hasOwnProp-D9Tpgokd.cjs.map +1 -0
- package/dist/{index-RNQBTK8A.d.cts → index-9JsU_wMu.d.ts} +1375 -937
- package/dist/{index-ORbo-7zA.d.cts → index-BP3sUrAx.d.ts} +242 -133
- package/dist/{index-BG8wdusZ.d.cts → index-BVovC-yK.d.cts} +229 -200
- package/dist/index-C1X6ha9s.d.cts +1041 -0
- package/dist/index-CcPQZ41G.d.cts +1103 -0
- package/dist/index-CjpbuJF4.d.ts +2424 -0
- package/dist/index-CssrQyHh.d.cts +2424 -0
- package/dist/index-DZHiYYR7.d.cts +2179 -0
- package/dist/index-DZHiYYR7.d.ts +2179 -0
- package/dist/index-DlyDmXUo.d.ts +1103 -0
- package/dist/index-Dm4a___O.d.ts +1041 -0
- package/dist/{index-CRz9rSZL.d.ts → index-Dwduk7ez.d.cts} +1375 -937
- package/dist/{index-DPJ-e2JZ.d.ts → index-I5V6RbZM.d.cts} +1592 -790
- package/dist/{index-B5EBAgmC.d.cts → index-hOqBIL7F.d.ts} +1592 -790
- package/dist/{index-B1VQ6USF.d.ts → index-jyuOZMX7.d.ts} +229 -200
- package/dist/{index-ORbo-7zA.d.ts → index-lI0b7iUz.d.cts} +242 -133
- package/dist/{isBigInt-y7s3rsKc.js → isBigInt-Cez32M69.js} +2 -2
- package/dist/isBigInt-Cez32M69.js.map +1 -0
- package/dist/{isBigInt-BVj0M5pq.cjs → isBigInt-YgpNKTbA.cjs} +2 -2
- package/dist/isBigInt-YgpNKTbA.cjs.map +1 -0
- package/dist/{isEmptyString-BYMz_wt9.js → isEmptyString-C9QLWjx2.js} +4 -4
- package/dist/isEmptyString-C9QLWjx2.js.map +1 -0
- package/dist/{isEmptyString-C8PYNPgw.cjs → isEmptyString-O4TFe1Ao.cjs} +5 -5
- package/dist/isEmptyString-O4TFe1Ao.cjs.map +1 -0
- package/dist/isEmptyValue-CFExALXZ.cjs +54 -0
- package/dist/isEmptyValue-CFExALXZ.cjs.map +1 -0
- package/dist/isEmptyValue-kCjnLjbN.js +36 -0
- package/dist/isEmptyValue-kCjnLjbN.js.map +1 -0
- package/dist/{isFinite-DeDaBDr2.cjs → isFinite-B_hHbDpa.cjs} +6 -6
- package/dist/isFinite-B_hHbDpa.cjs.map +1 -0
- package/dist/{isFinite-BEJFOv6B.js → isFinite-ZvNhyHlF.js} +5 -5
- package/dist/isFinite-ZvNhyHlF.js.map +1 -0
- package/dist/{isInteger-DEDbBGez.js → isInteger-aZgzTTZG.js} +4 -4
- package/dist/isInteger-aZgzTTZG.js.map +1 -0
- package/dist/{isInteger-CQLThJOR.cjs → isInteger-dnc6W63Z.cjs} +4 -4
- package/dist/isInteger-dnc6W63Z.cjs.map +1 -0
- package/dist/isNumber-BCWD4dW0.js +20 -0
- package/dist/isNumber-BCWD4dW0.js.map +1 -0
- package/dist/isNumber-BkzwAe50.cjs +26 -0
- package/dist/isNumber-BkzwAe50.cjs.map +1 -0
- package/dist/isPlainObject-CAe_ElKO.d.cts +331 -0
- package/dist/isPlainObject-CJvRG4Je.d.ts +331 -0
- package/dist/{isServer-q3o6cSwD.js → isServer-CQzrX5e0.js} +2 -2
- package/dist/isServer-CQzrX5e0.js.map +1 -0
- package/dist/{isServer-DmycqWsF.cjs → isServer-DhFaedeT.cjs} +2 -2
- package/dist/isServer-DhFaedeT.cjs.map +1 -0
- package/dist/{isEqual-DaPDxMyw.cjs → isTypedArray-DjADSu8q.cjs} +45 -13
- package/dist/isTypedArray-DjADSu8q.cjs.map +1 -0
- package/dist/{isEqual-DM4S_kWh.js → isTypedArray-DxsPKrLh.js} +29 -9
- package/dist/isTypedArray-DxsPKrLh.js.map +1 -0
- package/dist/{isValidDomain-B8Nukgw0.js → isValidDomain-CDtNOhMc.js} +13 -54
- package/dist/isValidDomain-CDtNOhMc.js.map +1 -0
- package/dist/{isValidDomain-ZbyeGOO9.cjs → isValidDomain-D_x7uNIu.cjs} +16 -69
- package/dist/isValidDomain-D_x7uNIu.cjs.map +1 -0
- package/dist/{assertIsBoolean-CWUs-I5l.js → logger-CLWnKRKE.js} +657 -587
- package/dist/logger-CLWnKRKE.js.map +1 -0
- package/dist/{assertIsBoolean-D41HrTB_.cjs → logger-CUacYy3D.cjs} +658 -612
- package/dist/logger-CUacYy3D.cjs.map +1 -0
- package/dist/{noop-BY43WaoU.cjs → noop-CjEbNsJL.cjs} +2 -2
- package/dist/noop-CjEbNsJL.cjs.map +1 -0
- package/dist/{noop-CjY8xVHv.js → noop-qxrcogt5.js} +2 -2
- package/dist/noop-qxrcogt5.js.map +1 -0
- package/dist/{normalizeSpaces-BhZp0U_6.cjs → normalizeSpaces-D0_Z4qnO.cjs} +6 -9
- package/dist/normalizeSpaces-D0_Z4qnO.cjs.map +1 -0
- package/dist/{normalizeSpaces-BoUDtq5P.js → normalizeSpaces-DAsxzBEQ.js} +4 -7
- package/dist/normalizeSpaces-DAsxzBEQ.js.map +1 -0
- package/dist/operations/index.cjs +152 -22
- package/dist/operations/index.cjs.map +1 -1
- package/dist/operations/index.d.cts +257 -35
- package/dist/operations/index.d.ts +257 -35
- package/dist/operations/index.js +142 -13
- package/dist/operations/index.js.map +1 -1
- package/dist/parsers/index.cjs +2 -2
- package/dist/parsers/index.d.cts +238 -180
- package/dist/parsers/index.d.ts +238 -180
- package/dist/parsers/index.js +2 -2
- package/dist/{parsers-B8KYXIjE.js → parsers-BBAE_xVM.js} +9 -8
- package/dist/parsers-BBAE_xVM.js.map +1 -0
- package/dist/{parsers-B_FPX35n.cjs → parsers-i8WEeMJl.cjs} +10 -9
- package/dist/parsers-i8WEeMJl.cjs.map +1 -0
- package/dist/{parsing-Bfaw85Hd.js → parsing-D9tbKQ0v.js} +3 -3
- package/dist/parsing-D9tbKQ0v.js.map +1 -0
- package/dist/{parsing-BCZGco7n.cjs → parsing-DGjB8cwr.cjs} +4 -4
- package/dist/parsing-DGjB8cwr.cjs.map +1 -0
- package/dist/predicates/index.cjs +43 -43
- package/dist/predicates/index.d.cts +3 -3
- package/dist/predicates/index.d.ts +3 -3
- package/dist/predicates/index.js +14 -14
- package/dist/{predicates-KlyOvBSC.js → predicates-C0dova7l.js} +45 -40
- package/dist/predicates-C0dova7l.js.map +1 -0
- package/dist/{predicates-8y28VrbT.cjs → predicates-Dd7To7B4.cjs} +89 -84
- package/dist/predicates-Dd7To7B4.cjs.map +1 -0
- package/dist/promises/index.cjs +27 -26
- package/dist/promises/index.cjs.map +1 -1
- package/dist/promises/index.d.cts +227 -75
- package/dist/promises/index.d.ts +227 -75
- package/dist/promises/index.js +27 -26
- package/dist/promises/index.js.map +1 -1
- package/dist/{punyCode-DnKi0qjS.cjs → punyCode-DHTLhGdD.cjs} +12 -12
- package/dist/punyCode-DHTLhGdD.cjs.map +1 -0
- package/dist/{punyCode-Dwto1RpA.js → punyCode-Deb1Mrkc.js} +12 -12
- package/dist/punyCode-Deb1Mrkc.js.map +1 -0
- package/dist/{removeSpaces--8NW-HSx.js → removeSpaces-BPnsdRN0.js} +4 -4
- package/dist/removeSpaces-BPnsdRN0.js.map +1 -0
- package/dist/{removeSpaces-CmrrkeXz.cjs → removeSpaces-CN3pxBz_.cjs} +7 -7
- package/dist/removeSpaces-CN3pxBz_.cjs.map +1 -0
- package/dist/rzl-utils.global.js +13 -13
- package/dist/safeJsonParse-D1FLVTEM.cjs +209 -0
- package/dist/safeJsonParse-D1FLVTEM.cjs.map +1 -0
- package/dist/{safeJsonParse-OnUwG2El.js → safeJsonParse-DEVKNDSn.js} +29 -28
- package/dist/safeJsonParse-DEVKNDSn.js.map +1 -0
- package/dist/safeStableStringify-C5HHKUdn.cjs +125 -0
- package/dist/safeStableStringify-C5HHKUdn.cjs.map +1 -0
- package/dist/{safeStableStringify-B2KTTS3r.js → safeStableStringify-DfwxmiWn.js} +20 -13
- package/dist/safeStableStringify-DfwxmiWn.js.map +1 -0
- package/dist/strings/index.cjs +26 -30
- package/dist/strings/index.cjs.map +1 -1
- package/dist/strings/index.d.cts +2 -2
- package/dist/strings/index.d.ts +2 -2
- package/dist/strings/index.js +13 -17
- package/dist/strings/index.js.map +1 -1
- package/dist/tailwind/index.cjs +3 -3
- package/dist/tailwind/index.d.cts +3 -3
- package/dist/tailwind/index.d.ts +3 -3
- package/dist/tailwind/index.js +3 -3
- package/dist/{tailwind-DUuboq52.cjs → tailwind-BG7B0cDs.cjs} +59 -53
- package/dist/tailwind-BG7B0cDs.cjs.map +1 -0
- package/dist/{tailwind-CUdmv-oO.js → tailwind-tJNnFPsF.js} +38 -32
- package/dist/tailwind-tJNnFPsF.js.map +1 -0
- package/dist/{toStringArrayUnRecursive-OOHGazks.js → toStringArrayUnRecursive-D0WbLIRz.js} +9 -9
- package/dist/toStringArrayUnRecursive-D0WbLIRz.js.map +1 -0
- package/dist/toStringArrayUnRecursive-QLoaNX_-.cjs +51 -0
- package/dist/toStringArrayUnRecursive-QLoaNX_-.cjs.map +1 -0
- package/dist/urls/index.cjs +3 -3
- package/dist/urls/index.d.cts +635 -443
- package/dist/urls/index.d.ts +635 -443
- package/dist/urls/index.js +3 -3
- package/dist/{urls-BXT4Krsq.js → urls-EoWslGgg.js} +50 -41
- package/dist/urls-EoWslGgg.js.map +1 -0
- package/dist/urls-NCzPepe2.cjs +308 -0
- package/dist/urls-NCzPepe2.cjs.map +1 -0
- package/package.json +6 -6
- package/dist/assertIsArray-CeXL4xv5.cjs.map +0 -1
- package/dist/assertIsArray-HgzPQIAM.js.map +0 -1
- package/dist/assertIsBoolean-CWUs-I5l.js.map +0 -1
- package/dist/assertIsBoolean-D41HrTB_.cjs.map +0 -1
- package/dist/assertIsString-CY_WkCLr.js.map +0 -1
- package/dist/assertIsString-DUrVt82d.cjs.map +0 -1
- package/dist/conversions-1s7xMBe_.js.map +0 -1
- package/dist/conversions-B3Rf8uId.cjs +0 -446
- package/dist/conversions-B3Rf8uId.cjs.map +0 -1
- package/dist/formatters-C6cVZBbG.js.map +0 -1
- package/dist/formatters-aEAAuzjx.cjs +0 -429
- package/dist/formatters-aEAAuzjx.cjs.map +0 -1
- package/dist/index-CPCt6_Wq.d.cts +0 -765
- package/dist/index-CPCt6_Wq.d.ts +0 -765
- package/dist/index-DBwNa1iO.d.ts +0 -947
- package/dist/index-DPTYOQkn.d.cts +0 -947
- package/dist/index-Dig1fIhZ.d.cts +0 -1716
- package/dist/index-Dig1fIhZ.d.ts +0 -1716
- package/dist/isBigInt-BVj0M5pq.cjs.map +0 -1
- package/dist/isBigInt-y7s3rsKc.js.map +0 -1
- package/dist/isEmptyObject-BsHngDz4.cjs +0 -37
- package/dist/isEmptyObject-BsHngDz4.cjs.map +0 -1
- package/dist/isEmptyObject-DPGR9iPj.js +0 -25
- package/dist/isEmptyObject-DPGR9iPj.js.map +0 -1
- package/dist/isEmptyString-BYMz_wt9.js.map +0 -1
- package/dist/isEmptyString-C8PYNPgw.cjs.map +0 -1
- package/dist/isEmptyValue-BXf7f1jz.cjs +0 -30
- package/dist/isEmptyValue-BXf7f1jz.cjs.map +0 -1
- package/dist/isEmptyValue-D4OHTB3u.js +0 -24
- package/dist/isEmptyValue-D4OHTB3u.js.map +0 -1
- package/dist/isEqual-DM4S_kWh.js.map +0 -1
- package/dist/isEqual-DaPDxMyw.cjs.map +0 -1
- package/dist/isFinite-BEJFOv6B.js.map +0 -1
- package/dist/isFinite-DeDaBDr2.cjs.map +0 -1
- package/dist/isInteger-CQLThJOR.cjs.map +0 -1
- package/dist/isInteger-DEDbBGez.js.map +0 -1
- package/dist/isPlainObject-BwTkj3G0.d.cts +0 -339
- package/dist/isPlainObject-BwTkj3G0.d.ts +0 -339
- package/dist/isServer-DmycqWsF.cjs.map +0 -1
- package/dist/isServer-q3o6cSwD.js.map +0 -1
- package/dist/isTypedArray-BQLbLXsU.cjs +0 -43
- package/dist/isTypedArray-BQLbLXsU.cjs.map +0 -1
- package/dist/isTypedArray-XiBnifLN.js +0 -31
- package/dist/isTypedArray-XiBnifLN.js.map +0 -1
- package/dist/isValidDomain-B8Nukgw0.js.map +0 -1
- package/dist/isValidDomain-ZbyeGOO9.cjs.map +0 -1
- package/dist/noop-BY43WaoU.cjs.map +0 -1
- package/dist/noop-CjY8xVHv.js.map +0 -1
- package/dist/normalizeSpaces-BhZp0U_6.cjs.map +0 -1
- package/dist/normalizeSpaces-BoUDtq5P.js.map +0 -1
- package/dist/parsers-B8KYXIjE.js.map +0 -1
- package/dist/parsers-B_FPX35n.cjs.map +0 -1
- package/dist/parsing-BCZGco7n.cjs.map +0 -1
- package/dist/parsing-Bfaw85Hd.js.map +0 -1
- package/dist/predicates-8y28VrbT.cjs.map +0 -1
- package/dist/predicates-KlyOvBSC.js.map +0 -1
- package/dist/punyCode-DnKi0qjS.cjs.map +0 -1
- package/dist/punyCode-Dwto1RpA.js.map +0 -1
- package/dist/removeSpaces--8NW-HSx.js.map +0 -1
- package/dist/removeSpaces-CmrrkeXz.cjs.map +0 -1
- package/dist/safeJsonParse-OnUwG2El.js.map +0 -1
- package/dist/safeJsonParse-sFqVXf-e.cjs +0 -208
- package/dist/safeJsonParse-sFqVXf-e.cjs.map +0 -1
- package/dist/safeStableStringify-B2KTTS3r.js.map +0 -1
- package/dist/safeStableStringify-Cmi6GyWj.cjs +0 -106
- package/dist/safeStableStringify-Cmi6GyWj.cjs.map +0 -1
- package/dist/tailwind-CUdmv-oO.js.map +0 -1
- package/dist/tailwind-DUuboq52.cjs.map +0 -1
- package/dist/toStringArrayUnRecursive-OOHGazks.js.map +0 -1
- package/dist/toStringArrayUnRecursive-pfk2oP8C.cjs +0 -51
- package/dist/toStringArrayUnRecursive-pfk2oP8C.cjs.map +0 -1
- package/dist/urls-BL9C_yU3.cjs +0 -299
- package/dist/urls-BL9C_yU3.cjs.map +0 -1
- package/dist/urls-BXT4Krsq.js.map +0 -1
package/dist/parsers/index.d.cts
CHANGED
|
@@ -2,231 +2,289 @@
|
|
|
2
2
|
* ========================================================================
|
|
3
3
|
* @rzl-zone/utils-js
|
|
4
4
|
* ------------------------------------------------------------------------
|
|
5
|
-
* Version: `3.
|
|
5
|
+
* Version: `3.14.0-beta.0`
|
|
6
6
|
* Author: `Rizalvin Dwiky <rizalvindwiky@gmail.com>`
|
|
7
7
|
* Repository: `https://github.com/rzl-zone/rzl-zone/tree/main/packages/utils-js`
|
|
8
8
|
* ========================================================================
|
|
9
9
|
*/
|
|
10
10
|
type ExtractFileNameOptions = {
|
|
11
|
-
/**
|
|
11
|
+
/** ------------------------------------------------------------------------------------
|
|
12
12
|
* * ***Indicates whether the input should be treated as a potential domain string.***
|
|
13
|
-
*
|
|
13
|
+
* -------------------------------------------------------------------------------------
|
|
14
14
|
*
|
|
15
15
|
* - Behavior when `true`:
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
16
|
+
* - The `domainName` option is required and must be a string and non-empty string.
|
|
17
|
+
* If `domainName` is `undefined`, `null`, or an empty string, a `TypeError` will be thrown.
|
|
18
|
+
* - The `domainName` is used to determine if the input is a domain-only string.
|
|
19
|
+
* - Returns `null` if the input exactly matches `domainName` or any of its subdomains **and** has no additional path or filename.
|
|
20
|
+
* - If the input does not match `domainName` or its subdomains, it will be processed as a regular file-like name.
|
|
21
|
+
* - Supports **Unicode/IDN domains** (e.g., `tést-ドメイン.com`) and **ASCII filenames**, mixed safely.
|
|
22
22
|
*
|
|
23
|
+
* ---
|
|
23
24
|
* @default false
|
|
24
25
|
*/
|
|
25
26
|
domainAware?: boolean;
|
|
26
|
-
/**
|
|
27
|
+
/** ------------------------------------------------------------------------------------
|
|
27
28
|
* * ***The base domain name used for comparison (e.g., `"example.com"`).***
|
|
28
|
-
*
|
|
29
|
+
* -------------------------------------------------------------------------------------
|
|
29
30
|
*
|
|
30
31
|
* - Required when `domainAware` is `true`.
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
*
|
|
32
|
+
* - Helps differentiate between a domain-only input (ignored) and a standalone file-like string (processed normally).
|
|
33
|
+
* - Must be a string and non-empty string. Invalid values (`undefined`, `null`, or empty string) will trigger a `TypeError`.
|
|
34
|
+
* - Works with both **ASCII domains** and **Unicode/IDN domains**.
|
|
35
|
+
* - Example:
|
|
36
|
+
* ```ts
|
|
37
|
+
* // ASCII domain + ASCII filename
|
|
38
|
+
* extractFileName("resume.com", {
|
|
39
|
+
* domainAware: true,
|
|
40
|
+
* domainName: "example.com"
|
|
41
|
+
* });
|
|
42
|
+
* // ➔ "resume"
|
|
43
|
+
* extractFileName("example.com", {
|
|
44
|
+
* domainAware: true,
|
|
45
|
+
* domainName: "example.com"
|
|
46
|
+
* });
|
|
47
|
+
* // ➔ null (because input is treated as domain-name)
|
|
47
48
|
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
*
|
|
53
|
-
*
|
|
49
|
+
* // Unicode domain + ASCII filename
|
|
50
|
+
* extractFileName("tést-ドメイン.com/file.txt", {
|
|
51
|
+
* domainAware: true,
|
|
52
|
+
* domainName: "ドメイン.com"
|
|
53
|
+
* });
|
|
54
|
+
* // ➔ "file"
|
|
54
55
|
*
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
*
|
|
59
|
-
*
|
|
60
|
-
*
|
|
56
|
+
* // Unicode domain + Unicode filename
|
|
57
|
+
* extractFileName("tést-ドメイン.com/ファイル名.pdf", {
|
|
58
|
+
* domainAware: true,
|
|
59
|
+
* domainName: "ドメイン.com"
|
|
60
|
+
* });
|
|
61
|
+
* // ➔ "ファイル名"
|
|
61
62
|
*
|
|
62
|
-
*
|
|
63
|
-
*
|
|
64
|
-
*
|
|
65
|
-
*
|
|
66
|
-
*
|
|
67
|
-
*
|
|
68
|
-
*
|
|
63
|
+
* // Invalid domainName, will throw TypeError
|
|
64
|
+
* extractFileName("resume.com", {
|
|
65
|
+
* domainAware: true,
|
|
66
|
+
* domainName: ""
|
|
67
|
+
* });
|
|
68
|
+
* // ➔ TypeError
|
|
69
|
+
* ```
|
|
69
70
|
*
|
|
71
|
+
* ---
|
|
70
72
|
* @default undefined
|
|
71
73
|
*/
|
|
72
74
|
domainName?: string;
|
|
73
75
|
};
|
|
74
|
-
/**
|
|
76
|
+
/** ------------------------------------------------------------------------------------
|
|
75
77
|
* * ***Utility: `extractFileName`.***
|
|
76
|
-
*
|
|
77
|
-
*
|
|
78
|
+
* -------------------------------------------------------------------------------------
|
|
78
79
|
* **Extracts the **clean base filename** from nearly any input string, including URLs, local file paths,
|
|
79
80
|
* UNC paths, and plain filenames.**
|
|
80
81
|
*
|
|
82
|
+
* ---
|
|
81
83
|
* - It automatically safely handles extracts the **base file name** (without extension) from:
|
|
82
|
-
*
|
|
83
|
-
*
|
|
84
|
-
*
|
|
85
|
-
*
|
|
86
|
-
*
|
|
87
|
-
*
|
|
88
|
-
*
|
|
84
|
+
* - File system paths (Windows, Unix, UNC).
|
|
85
|
+
* - Protocols like http, https, ftp, file, mailto, or custom schemes.
|
|
86
|
+
* - Percent-encoded, Unicode, and emoji characters.
|
|
87
|
+
* - Dotfiles, reserved OS names, multi-part extensions.
|
|
88
|
+
* - Data URIs.
|
|
89
|
+
* - Optional domain-aware mode to ignore domain-only inputs.
|
|
90
|
+
* - Plain filenames.
|
|
89
91
|
*
|
|
92
|
+
* ---
|
|
90
93
|
* - Full support for:
|
|
91
|
-
*
|
|
92
|
-
*
|
|
93
|
-
*
|
|
94
|
-
*
|
|
95
|
-
*
|
|
96
|
-
*
|
|
97
|
-
*
|
|
98
|
-
*
|
|
99
|
-
*
|
|
94
|
+
* - Unicode, emoji, percent-encoding.
|
|
95
|
+
* - Dotfiles (e.g., `.env`, `.gitignore`).
|
|
96
|
+
* - Reserved/OS-protected filenames:
|
|
97
|
+
* `CON`, `PRN`, `AUX`, `NUL`, `COM1`~`COM9`, `LPT1`~`LPT9`.
|
|
98
|
+
* - Known multi-part extensions:
|
|
99
|
+
* `.tar.gz`, `.tar.bz2`, `.tar.xz`, `.tar.lz`, `.tar.zst`, `.min.js`, `.js.map`, `.log.gz`, `.sql.gz`,
|
|
100
|
+
* `.backup.tar`, etc.
|
|
101
|
+
* - Data URIs (`data:[mime];base64,...` ➔ payload string).
|
|
102
|
+
* - Domain-aware mode (optional).
|
|
100
103
|
*
|
|
101
|
-
*
|
|
104
|
+
* ---
|
|
102
105
|
* - **Behavior / Features**
|
|
103
|
-
*
|
|
104
|
-
*
|
|
105
|
-
*
|
|
106
|
-
*
|
|
107
|
-
*
|
|
108
|
-
*
|
|
109
|
-
*
|
|
110
|
-
*
|
|
111
|
-
*
|
|
112
|
-
*
|
|
113
|
-
*
|
|
114
|
-
*
|
|
115
|
-
*
|
|
116
|
-
*
|
|
117
|
-
*
|
|
118
|
-
*
|
|
119
|
-
*
|
|
120
|
-
*
|
|
121
|
-
*
|
|
122
|
-
*
|
|
123
|
-
*
|
|
124
|
-
*
|
|
125
|
-
*
|
|
126
|
-
*
|
|
127
|
-
*
|
|
128
|
-
*
|
|
106
|
+
* - Strips **known extensions**, including multi-part and common double/triple extensions.
|
|
107
|
+
* - Leaves unknown/custom extensions intact.
|
|
108
|
+
* - Preserves **dotfiles** as-is (leading dot preserved).
|
|
109
|
+
* - Returns `null` if:
|
|
110
|
+
* - input is `null`, `undefined`, or not a string.
|
|
111
|
+
* - input is empty, whitespace-only, or only slashes.
|
|
112
|
+
* - input represents a folder path (trailing slash/backslash, drive/folder only).
|
|
113
|
+
* - input is a **domain-only string** in domain-aware mode.
|
|
114
|
+
* - Normalizes Windows-style backslashes (`\`) internally as `/`.
|
|
115
|
+
* - Supports UNC paths, mixed slashes, and Windows drive letters safely.
|
|
116
|
+
* - Handles URLs:
|
|
117
|
+
* - Ignores query strings (`?v=1.2.3`) and hash fragments (`#section`).
|
|
118
|
+
* - Decodes percent-encoded filenames (`my%20file.txt` ➔ `my file.txt`).
|
|
119
|
+
* - Supports protocol-relative URLs (`//cdn.example.com/file.jpg`).
|
|
120
|
+
* - Supports uncommon/custom protocols (`ftp://`, `file://`, `mailto:`, etc.).
|
|
121
|
+
* - Handles **multiple dots**, **trailing dots**, **triple or more extensions**.
|
|
122
|
+
* - Supports filenames on mixed Unicode/ASCII domains:
|
|
123
|
+
* - Domain names can include Unicode characters (IDN / punycode).
|
|
124
|
+
* - Filenames may contain ASCII, Unicode, and emoji characters.
|
|
125
|
+
* - Works correctly when domain is Unicode and filename is ASCII, or vice versa.
|
|
126
|
+
* - Supports extremely long filenames safely (up to OS limits).
|
|
127
|
+
* - Domain-aware mode (`domainAware: true` + `domainName`):
|
|
128
|
+
* - Parameter `domainName` must be a string and non-empty string; otherwise a TypeError is thrown.
|
|
129
|
+
* - Returns `null` if input equals `domainName` or any subdomain with no file path.
|
|
130
|
+
* - Extracts filename normally if path/file exists on domain or other domain.
|
|
131
|
+
* - Safe in Node.js and browsers.
|
|
129
132
|
*
|
|
130
|
-
*
|
|
133
|
+
* ---
|
|
131
134
|
* @param {string | null | undefined} input
|
|
132
135
|
* URL, file path, or plain filename to extract from.
|
|
133
136
|
*
|
|
134
137
|
* @param {ExtractFileNameOptions} [options]
|
|
135
138
|
* Optional configuration:
|
|
136
|
-
* - `domainAware?: boolean` –
|
|
137
|
-
* - `domainName?: string` –
|
|
139
|
+
* - `domainAware?: boolean` – Treat input as a domain string. Requires `domainName` to be a string and non-empty string; otherwise, a TypeError is thrown.
|
|
140
|
+
* - `domainName?: string` – Base domain for comparison eg (`example.com`), required when `domainAware` is true.
|
|
138
141
|
*
|
|
142
|
+
* ---
|
|
139
143
|
* @returns {string | null}
|
|
140
144
|
* - Base filename without known extensions
|
|
141
145
|
* - Original filename if extension unknown
|
|
142
146
|
* - `null` for invalid inputs, folder paths, or domain-only strings
|
|
143
147
|
*
|
|
144
|
-
*
|
|
148
|
+
* ---
|
|
145
149
|
* @example
|
|
146
|
-
*
|
|
147
|
-
*
|
|
148
|
-
*
|
|
149
|
-
*
|
|
150
|
-
*
|
|
151
|
-
*
|
|
152
|
-
*
|
|
153
|
-
*
|
|
154
|
-
*
|
|
155
|
-
*
|
|
156
|
-
*
|
|
157
|
-
*
|
|
158
|
-
*
|
|
159
|
-
*
|
|
160
|
-
*
|
|
161
|
-
*
|
|
162
|
-
*
|
|
163
|
-
*
|
|
164
|
-
*
|
|
165
|
-
*
|
|
166
|
-
*
|
|
167
|
-
*
|
|
168
|
-
*
|
|
169
|
-
*
|
|
170
|
-
*
|
|
171
|
-
*
|
|
172
|
-
*
|
|
173
|
-
*
|
|
174
|
-
*
|
|
175
|
-
*
|
|
176
|
-
*
|
|
177
|
-
*
|
|
178
|
-
*
|
|
179
|
-
*
|
|
180
|
-
*
|
|
181
|
-
*
|
|
182
|
-
*
|
|
183
|
-
*
|
|
184
|
-
*
|
|
185
|
-
*
|
|
186
|
-
*
|
|
187
|
-
*
|
|
188
|
-
*
|
|
189
|
-
*
|
|
190
|
-
*
|
|
191
|
-
*
|
|
192
|
-
*
|
|
193
|
-
*
|
|
194
|
-
*
|
|
195
|
-
*
|
|
196
|
-
*
|
|
197
|
-
*
|
|
198
|
-
*
|
|
199
|
-
*
|
|
200
|
-
*
|
|
201
|
-
*
|
|
202
|
-
*
|
|
203
|
-
*
|
|
204
|
-
*
|
|
205
|
-
*
|
|
206
|
-
*
|
|
207
|
-
*
|
|
208
|
-
*
|
|
209
|
-
*
|
|
210
|
-
*
|
|
211
|
-
*
|
|
212
|
-
*
|
|
213
|
-
*
|
|
214
|
-
*
|
|
215
|
-
*
|
|
216
|
-
*
|
|
217
|
-
*
|
|
218
|
-
*
|
|
219
|
-
*
|
|
220
|
-
*
|
|
221
|
-
*
|
|
222
|
-
*
|
|
223
|
-
*
|
|
224
|
-
*
|
|
225
|
-
*
|
|
226
|
-
*
|
|
227
|
-
*
|
|
228
|
-
*
|
|
229
|
-
*
|
|
150
|
+
* 1. #### Basic files:
|
|
151
|
+
* ```ts
|
|
152
|
+
* extractFileName("document.pdf");
|
|
153
|
+
* // ➔ "document"
|
|
154
|
+
* extractFileName("/files/archive.tar.gz");
|
|
155
|
+
* // ➔ "archive"
|
|
156
|
+
* extractFileName("C:\\path\\file.txt");
|
|
157
|
+
* // ➔ "file"
|
|
158
|
+
* extractFileName(".env");
|
|
159
|
+
* // ➔ ".env"
|
|
160
|
+
* extractFileName("folder/");
|
|
161
|
+
* // ➔ null
|
|
162
|
+
* ```
|
|
163
|
+
* ---
|
|
164
|
+
* 2. #### Not a file:
|
|
165
|
+
* ```ts
|
|
166
|
+
* extractFileName("not-file");
|
|
167
|
+
* // ➔ null
|
|
168
|
+
* extractFileName("not-file/");
|
|
169
|
+
* // ➔ null
|
|
170
|
+
* extractFileName("/not-file/");
|
|
171
|
+
* // ➔ null
|
|
172
|
+
* extractFileName("/not-file");
|
|
173
|
+
* // ➔ null
|
|
174
|
+
* ```
|
|
175
|
+
* ---
|
|
176
|
+
* 3. #### URLs with `queries`, `hashes`, `protocols`:
|
|
177
|
+
* ```ts
|
|
178
|
+
* extractFileName("https://example.com/file.txt?ver=1");
|
|
179
|
+
* // ➔ "file"
|
|
180
|
+
* extractFileName("https://example.com/archive.tar.gz#part");
|
|
181
|
+
* // ➔ "archive"
|
|
182
|
+
* extractFileName("//cdn.example.com/image.png");
|
|
183
|
+
* // ➔ "image"
|
|
184
|
+
* ```
|
|
185
|
+
* ---
|
|
186
|
+
* 4. #### Special protocol handling:
|
|
187
|
+
* ```ts
|
|
188
|
+
* extractFileName("tel:+6212345678");
|
|
189
|
+
* // ➔ "+6212345678"
|
|
190
|
+
* extractFileName("sms:+6212345678");
|
|
191
|
+
* // ➔ "+6212345678"
|
|
192
|
+
* extractFileName("mailto:user@domain.com");
|
|
193
|
+
* // ➔ "user@domain"
|
|
194
|
+
* extractFileName("data:text/plain;base64,SGVsbG8=");
|
|
195
|
+
* // ➔ "SGVsbG8="
|
|
196
|
+
* extractFileName("mailto:resume.com");
|
|
197
|
+
* // ➔ "resume"
|
|
198
|
+
* extractFileName("ftp://example.com/image.jpeg");
|
|
199
|
+
* // ➔ "image"
|
|
200
|
+
* extractFileName("ftp://files.example.com/app.min.js");
|
|
201
|
+
* // ➔ "app.min"
|
|
202
|
+
* extractFileName("file:///C:/path/to/document.pdf");
|
|
203
|
+
* // ➔ "document"
|
|
204
|
+
* extractFileName("custom-scheme://example.com/video.mp4");
|
|
205
|
+
* // ➔ "video"
|
|
206
|
+
* ```
|
|
207
|
+
* ---
|
|
208
|
+
* 5. #### Unicode & emoji:
|
|
209
|
+
* ```ts
|
|
210
|
+
* extractFileName("emoji-😊.png");
|
|
211
|
+
* // ➔ "emoji-😊"
|
|
212
|
+
* extractFileName("🔥project.tar.gz");
|
|
213
|
+
* // ➔ "🔥project"
|
|
214
|
+
* ```
|
|
215
|
+
* 6. #### Dotfiles:
|
|
216
|
+
* ```ts
|
|
217
|
+
* extractFileName(".gitignore");
|
|
218
|
+
* // ➔ ".gitignore"
|
|
219
|
+
* extractFileName("/path/.bashrc");
|
|
220
|
+
* // ➔ ".bashrc"
|
|
221
|
+
* ```
|
|
222
|
+
* ---
|
|
223
|
+
* 7. #### Mixed Unicode domain and ASCII filename:
|
|
224
|
+
* ```ts
|
|
225
|
+
* extractFileName("https://tést-ドメイン.com/file.txt");
|
|
226
|
+
* // ➔ "file"
|
|
227
|
+
* extractFileName("https://example.com/ファイル名.pdf");
|
|
228
|
+
* // ➔ "ファイル名"
|
|
229
|
+
* extractFileName("https://ドメイン例.com/emoji-🔥.png");
|
|
230
|
+
* // ➔ "emoji-🔥"
|
|
231
|
+
* ```
|
|
232
|
+
* 8. #### Reserved filenames:
|
|
233
|
+
* ```ts
|
|
234
|
+
* extractFileName("CON");
|
|
235
|
+
* // ➔ "CON"
|
|
236
|
+
* extractFileName("NUL.txt");
|
|
237
|
+
* // ➔ "NUL"
|
|
238
|
+
* ```
|
|
239
|
+
* ---
|
|
240
|
+
* 9. #### Domain-aware mode:
|
|
241
|
+
* ```ts
|
|
242
|
+
* extractFileName("example.com", {
|
|
243
|
+
* domainAware: true,
|
|
244
|
+
* domainName: "example.com"
|
|
245
|
+
* });
|
|
246
|
+
* // ➔ null
|
|
247
|
+
* extractFileName("cdn.example.com", {
|
|
248
|
+
* domainAware: true,
|
|
249
|
+
* domainName: "example.com"
|
|
250
|
+
* });
|
|
251
|
+
* // ➔ null
|
|
252
|
+
* extractFileName("resume.com", {
|
|
253
|
+
* domainAware: true,
|
|
254
|
+
* domainName: "example.com"
|
|
255
|
+
* });
|
|
256
|
+
* // ➔ "resume"
|
|
257
|
+
* extractFileName("https://example.com/file.txt", {
|
|
258
|
+
* domainAware: true,
|
|
259
|
+
* domainName: "example.com"
|
|
260
|
+
* });
|
|
261
|
+
* // ➔ "file"
|
|
262
|
+
* ```
|
|
263
|
+
* ---
|
|
264
|
+
* 10. #### Windows & UNC paths:
|
|
265
|
+
* ```ts
|
|
266
|
+
* extractFileName("C:\\Users\\rzl\\Documents\\file.txt");
|
|
267
|
+
* // ➔ "file"
|
|
268
|
+
* extractFileName("\\\\SERVER\\share\\logs\\output.log");
|
|
269
|
+
* // ➔ "output"
|
|
270
|
+
* extractFileName("C:/Users\\rzl/mix\\test.pdf");
|
|
271
|
+
* // ➔ "test"
|
|
272
|
+
* ```
|
|
273
|
+
* ---
|
|
274
|
+
* 11. #### Edge / extreme cases:
|
|
275
|
+
* ```ts
|
|
276
|
+
* extractFileName("https://example.com/my%20file%20name.txt");
|
|
277
|
+
* // ➔ "my file name"
|
|
278
|
+
* extractFileName("app.min.js.map");
|
|
279
|
+
* // ➔ "app.min"
|
|
280
|
+
* extractFileName("backup.tar.bak");
|
|
281
|
+
* // ➔ "backup.tar.bak" (unknown double extension)
|
|
282
|
+
* extractFileName("filename.");
|
|
283
|
+
* // ➔ "filename."
|
|
284
|
+
* extractFileName("a".repeat(255) + ".txt");
|
|
285
|
+
* // ➔ "a".repeat(255)
|
|
286
|
+
* ```
|
|
287
|
+
* ---
|
|
230
288
|
* @note
|
|
231
289
|
* - Robust: never throws, handles unusual inputs safely.
|
|
232
290
|
* - Suitable for display, logging, or safe storage.
|