@rzl-zone/utils-js 3.8.0 → 3.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. package/README.md +5 -1
  2. package/dist/assertions/index.cjs +11 -11
  3. package/dist/assertions/index.d.ts +168 -57
  4. package/dist/assertions/index.js +5 -5
  5. package/dist/{chunk-EK7FSI7F.cjs → chunk-2XGQQZ6A.cjs} +3 -3
  6. package/dist/{chunk-YS27V6LS.js → chunk-3LE6NX57.js} +5 -176
  7. package/dist/{chunk-PZQC3FZY.js → chunk-44X74C26.js} +4 -4
  8. package/dist/{chunk-4ACKNPL5.js → chunk-5KDVIEVO.js} +2 -2
  9. package/dist/{chunk-JY4HLZ4W.js → chunk-5O66AUEC.js} +2 -2
  10. package/dist/{chunk-SLP24LUV.js → chunk-5Y6JL47L.js} +3 -3
  11. package/dist/{chunk-ZW3VYES4.cjs → chunk-62FS7WMB.cjs} +31 -31
  12. package/dist/{chunk-VJVCXEH7.cjs → chunk-6AMDHVS2.cjs} +9 -181
  13. package/dist/{chunk-5IKZ3JDV.js → chunk-6WVOUVWD.js} +9 -9
  14. package/dist/{chunk-BYUT376O.cjs → chunk-76ATVDCR.cjs} +3 -3
  15. package/dist/{chunk-F3WBQKRI.cjs → chunk-7C7TQC5J.cjs} +29 -7
  16. package/dist/{chunk-I3IXLEEG.js → chunk-7EIFPHV3.js} +8 -8
  17. package/dist/{chunk-6RFNZ2ZZ.cjs → chunk-7NXFGJJE.cjs} +14 -14
  18. package/dist/{chunk-TFDXRT6D.cjs → chunk-ALRISPTL.cjs} +3 -3
  19. package/dist/chunk-BAV5T2E3.cjs +1 -1
  20. package/dist/{chunk-4ZOXSUXB.js → chunk-C7GC2PFX.js} +3 -3
  21. package/dist/chunk-DVMHRLKP.cjs +1 -1
  22. package/dist/{chunk-KVZ3HL2B.js → chunk-DXPM4NOU.js} +4 -4
  23. package/dist/{chunk-DPLL67OT.js → chunk-EJV5AF4L.js} +2 -2
  24. package/dist/{chunk-NREACG6M.cjs → chunk-FWWPEL7J.cjs} +3 -3
  25. package/dist/{chunk-LEX4TQW2.js → chunk-GHU356XQ.js} +4 -6
  26. package/dist/chunk-GKDSBOYE.js +209 -0
  27. package/dist/{chunk-YC7AK3KX.cjs → chunk-H44QVAZL.cjs} +31 -31
  28. package/dist/{chunk-AKKM6MOX.cjs → chunk-I33PB44Q.cjs} +15 -15
  29. package/dist/{chunk-LIU4S3JA.cjs → chunk-IX6PF5ZP.cjs} +4 -4
  30. package/dist/{chunk-3KTD3QDI.js → chunk-J4TT33ZX.js} +29 -7
  31. package/dist/{chunk-SZJ7OI4S.js → chunk-J6VLFVIL.js} +3 -3
  32. package/dist/{chunk-3JD53UUH.cjs → chunk-JI57K7D4.cjs} +161 -161
  33. package/dist/{chunk-OFBFGFVH.js → chunk-JYOCB6OV.js} +2 -2
  34. package/dist/chunk-KHO2SBNA.cjs +1 -1
  35. package/dist/{chunk-6NORJBI6.cjs → chunk-KUVRZ2JW.cjs} +50 -50
  36. package/dist/chunk-L5RDAVVH.js +1 -1
  37. package/dist/{chunk-VCVND6CH.js → chunk-M5QB2GM5.js} +2 -2
  38. package/dist/{chunk-RRJIRXHS.js → chunk-MBFVTGYS.js} +4 -4
  39. package/dist/{chunk-UKAUXY2U.cjs → chunk-MMRHKYT6.cjs} +12 -12
  40. package/dist/{chunk-U5VR4TJN.js → chunk-MS2KSKD7.js} +9 -9
  41. package/dist/{chunk-7ZNEUWYP.js → chunk-MZ3T6L7Z.js} +2 -2
  42. package/dist/{chunk-ATLFMKAF.cjs → chunk-NAOVH4OH.cjs} +7 -7
  43. package/dist/{chunk-HKJZ7K2K.cjs → chunk-NJ24M6ZH.cjs} +37 -37
  44. package/dist/chunk-OCTHWEZK.cjs +249 -0
  45. package/dist/chunk-ONZFBJVW.js +1 -1
  46. package/dist/{chunk-FI76UZRF.js → chunk-OSSFLQDD.js} +3 -4
  47. package/dist/{chunk-7WBMA2VE.cjs → chunk-OYFUBKEG.cjs} +4 -5
  48. package/dist/{chunk-B4SDEBN7.cjs → chunk-PWKOFPAH.cjs} +3 -3
  49. package/dist/{chunk-RJYWBVGD.cjs → chunk-QGTFQ7RO.cjs} +6 -6
  50. package/dist/chunk-QNKGP5DY.js +1 -1
  51. package/dist/chunk-QXTJVDWE.js +676 -0
  52. package/dist/{chunk-B6UIKBHR.cjs → chunk-QZI5PVCI.cjs} +4 -4
  53. package/dist/{chunk-PW2VMJLT.js → chunk-R2DR7SPJ.js} +99 -25
  54. package/dist/{chunk-TDYGYHSH.js → chunk-SN5HAK3Y.js} +4 -4
  55. package/dist/{chunk-P3ST4UZA.js → chunk-SRWL4YCP.js} +7 -7
  56. package/dist/{chunk-7QQV66RX.cjs → chunk-TJ5OY6MC.cjs} +10 -10
  57. package/dist/{chunk-6WMB5AJR.js → chunk-TXOVQZPU.js} +3 -4
  58. package/dist/chunk-UDA26MCU.cjs +1 -1
  59. package/dist/{chunk-LVFTN6DK.cjs → chunk-UFYMRRJH.cjs} +61 -61
  60. package/dist/{chunk-5NN4ZDE2.cjs → chunk-UV5BKAYW.cjs} +6 -8
  61. package/dist/{chunk-GAJBF6DR.js → chunk-UXT4XSUK.js} +2 -2
  62. package/dist/{chunk-6VA4F6VR.js → chunk-VBSLIIDB.js} +10 -10
  63. package/dist/chunk-VCYXNIZ2.cjs +678 -0
  64. package/dist/chunk-VJDDGRIK.cjs +1 -1
  65. package/dist/{chunk-JIROTDOU.js → chunk-WB3FT62A.js} +3 -3
  66. package/dist/{chunk-K63WO3XA.cjs → chunk-WKM6UVMG.cjs} +4 -5
  67. package/dist/{chunk-5PF7KRCP.cjs → chunk-WLEZ2KSG.cjs} +126 -126
  68. package/dist/{chunk-ZN53RM3R.js → chunk-WRGN6UBK.js} +2 -2
  69. package/dist/chunk-WVSPXFTY.js +1 -1
  70. package/dist/{chunk-2VO2CBTU.js → chunk-X6ULJZ3X.js} +2 -2
  71. package/dist/{chunk-CKUEZF4R.cjs → chunk-XYWC4EQ3.cjs} +71 -71
  72. package/dist/{chunk-A3YI6Y2P.js → chunk-YHFRCVTN.js} +3 -3
  73. package/dist/{chunk-A4H7474O.cjs → chunk-YQHJB7KR.cjs} +26 -26
  74. package/dist/{chunk-YGB2BQPB.cjs → chunk-YVRUY4EW.cjs} +8 -8
  75. package/dist/chunk-YWHHVDT4.js +1 -1
  76. package/dist/chunk-ZTHJQJ5F.cjs +211 -0
  77. package/dist/conversions/index.cjs +34 -34
  78. package/dist/conversions/index.d.ts +1 -1
  79. package/dist/conversions/index.js +15 -15
  80. package/dist/events/index.cjs +8 -8
  81. package/dist/events/index.d.ts +1 -1
  82. package/dist/events/index.js +4 -4
  83. package/dist/formatters/index.cjs +19 -19
  84. package/dist/formatters/index.d.ts +1 -1
  85. package/dist/formatters/index.js +9 -9
  86. package/dist/generators/index.cjs +9 -9
  87. package/dist/generators/index.d.ts +1 -1
  88. package/dist/generators/index.js +4 -4
  89. package/dist/index.d.ts +1 -1
  90. package/dist/isPlainObject-BTPjv6zB.d.ts +1 -1
  91. package/dist/next/index.cjs +37 -36
  92. package/dist/next/index.d.ts +1 -1
  93. package/dist/next/index.js +9 -8
  94. package/dist/next/server/index.cjs +4 -4
  95. package/dist/next/server/index.d.ts +1 -1
  96. package/dist/next/server/index.js +2 -2
  97. package/dist/operations/index.cjs +11 -11
  98. package/dist/operations/index.d.ts +1 -1
  99. package/dist/operations/index.js +8 -8
  100. package/dist/parsers/index.cjs +6 -4
  101. package/dist/parsers/index.d.ts +224 -32
  102. package/dist/parsers/index.js +5 -3
  103. package/dist/predicates/index.cjs +77 -76
  104. package/dist/predicates/index.d.ts +1 -1
  105. package/dist/predicates/index.js +14 -13
  106. package/dist/promises/index.cjs +6 -6
  107. package/dist/promises/index.d.ts +2 -3
  108. package/dist/promises/index.js +4 -4
  109. package/dist/rzl-utils.global.js +2 -2
  110. package/dist/strings/index.cjs +23 -23
  111. package/dist/strings/index.d.ts +1 -1
  112. package/dist/strings/index.js +7 -7
  113. package/dist/tailwind/index.cjs +13 -13
  114. package/dist/tailwind/index.d.ts +1 -1
  115. package/dist/tailwind/index.js +5 -5
  116. package/dist/urls/index.cjs +23 -21
  117. package/dist/urls/index.d.ts +182 -114
  118. package/dist/urls/index.js +16 -14
  119. package/package.json +1 -1
  120. package/dist/chunk-KPCDDYTZ.js +0 -417
  121. package/dist/chunk-QAPYHLHC.cjs +0 -419
  122. package/dist/chunk-SGCN4ED4.cjs +0 -175
@@ -2,44 +2,236 @@
2
2
  * ====================================================
3
3
  * Rzl Utils-JS.
4
4
  * ----------------------------------------------------
5
- * Version: 3.8.0.
5
+ * Version: 3.9.0.
6
6
  * Author: Rizalvin Dwiky.
7
7
  * Repository: https://github.com/rzl-zone/utils-js.
8
8
  * ====================================================
9
9
  */
10
+ type ExtractFileNameOptions={
11
+ /** ----------------------------------------------------------
12
+ * * ***Indicates whether the input should be treated as a potential domain string.***
13
+ * ----------------------------------------------------------
14
+ *
15
+ * - Behavior when `true`:
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
+ *
23
+ * @default false
24
+ */
25
+ domainAware?:boolean;
26
+ /** ----------------------------------------------------------
27
+ * * ***The base domain name used for comparison (e.g., `"example.com"`).***
28
+ * ----------------------------------------------------------
29
+ *
30
+ * - Required when `domainAware` is `true`.
31
+ * - Helps differentiate between a domain-only input (ignored) and a standalone file-like string (processed normally).
32
+ * - Must be a string and non-empty string. Invalid values (`undefined`, `null`, or empty string) will trigger a `TypeError`.
33
+ * - Works with both **ASCII domains** and **Unicode/IDN domains**.
34
+ * - Example:
35
+ * ```ts *
36
+ * // ASCII domain + ASCII filename
37
+ * extractFileName("resume.com", {
38
+ * domainAware: true,
39
+ * domainName: "example.com"
40
+ * });
41
+ * // ➔ "resume"
42
+ * extractFileName("example.com", {
43
+ * domainAware: true,
44
+ * domainName: "example.com"
45
+ * });
46
+ * // ➔ null (because input is treated as domain-name)
47
+ *
48
+ * // Unicode domain + ASCII filename
49
+ * extractFileName("tést-ドメイン.com/file.txt", {
50
+ * domainAware: true,
51
+ * domainName: "ドメイン.com"
52
+ * });
53
+ * // ➔ "file"
54
+ *
55
+ * // Unicode domain + Unicode filename
56
+ * extractFileName("tést-ドメイン.com/ファイル名.pdf", {
57
+ * domainAware: true,
58
+ * domainName: "ドメイン.com"
59
+ * });
60
+ * // ➔ "ファイル名"
61
+ *
62
+ * // Invalid domainName, will throw TypeError
63
+ * extractFileName("resume.com", {
64
+ * domainAware: true,
65
+ * domainName: ""
66
+ * });
67
+ * // ➔ TypeError
68
+ * ```
69
+ *
70
+ * @default undefined
71
+ */
72
+ domainName?:string;};
10
73
  /** ----------------------------------------------------------
11
74
  * * ***Utility: `extractFileName`.***
12
75
  * ----------------------------------------------------------
13
- * **Extracts the base file name (without extension) from a given URL, file path, or file name.**
14
- * - **Behavior:**
15
- * - Strips known extensions (including multi-part extensions such as `.tar.gz`, `.tar.bz2`, etc.).
16
- * - Handles plain file names, local file paths, and full URLs seamlessly.
17
- * - If the path ends with a `/`, returns an empty string `""` (represents a directory or empty segment).
18
- * - If the input is empty, whitespace, or not a string, returns `undefined`.
19
- * - Leaves unknown or unrecognized extensions intact (does not attempt to strip unknown file extensions).
20
- * - **Summary:**
21
- * - `extractFileName("https://example.com/file.txt")` `"file"`.
22
- * - `extractFileName("/local/path/image.jpeg")` ➔ `"image"`.
23
- * - `extractFileName("backup.archive.tar.gz")` `"backup.archive"`.
24
- * - `extractFileName("folder/")` ➔ `""`.
25
- * - `extractFileName("")` ➔ `undefined`.
26
- * - `extractFileName("unknownfile.weirdext")` `"unknownfile.weirdext"`
27
- * ***(keeps unknown extension)***.
28
- * @description
29
- * This is particularly useful for displaying or logging file names
30
- * without cluttering them with redundant extensions, while being careful
31
- * not to accidentally truncate unfamiliar formats.
32
- * @param {string | null | undefined} url - The URL, file system path, or plain file name to process.
33
- * @returns {string | undefined} The file name without its extension(s),
34
- * or `undefined` if input is invalid,
35
- * or an empty string `""` if the path ends with `/`.
76
+ *
77
+ * **Extracts the **clean base filename** from nearly any input string, including URLs, local file paths,
78
+ * UNC paths, and plain filenames.**
79
+ *
80
+ * - It automatically safely handles extracts the **base file name** (without extension) from:
81
+ * - File system paths (Windows, Unix, UNC)
82
+ * - Protocols like http, https, ftp, file, mailto, or custom schemes
83
+ * - Percent-encoded, Unicode, and emoji characters
84
+ * - Dotfiles, reserved OS names, multi-part extensions
85
+ * - Data URIs
86
+ * - Optional domain-aware mode to ignore domain-only inputs
87
+ * - Plain filenames
88
+ *
89
+ * - Full support for:
90
+ * - Unicode, emoji, percent-encoding
91
+ * - Dotfiles (e.g., `.env`, `.gitignore`)
92
+ * - Reserved/OS-protected filenames:
93
+ * `CON`, `PRN`, `AUX`, `NUL`, `COM1`–`COM9`, `LPT1`–`LPT9`
94
+ * - Known multi-part extensions:
95
+ * `.tar.gz`, `.tar.bz2`, `.tar.xz`, `.tar.lz`, `.tar.zst`, `.min.js`, `.js.map`, `.log.gz`, `.sql.gz`,
96
+ * `.backup.tar`, etc.
97
+ * - Data URIs (`data:[mime];base64,...` payload string)
98
+ * - Domain-aware mode (optional)
99
+ *
100
+ * ----------------------------------------------------------
101
+ * - **Behavior / Features**
102
+ * - Strips **known extensions**, including multi-part and common double/triple extensions.
103
+ * - Leaves unknown/custom extensions intact.
104
+ * - Preserves **dotfiles** as-is (leading dot preserved).
105
+ * - Returns `null` if:
106
+ * - input is `null`, `undefined`, or not a string
107
+ * - input is empty, whitespace-only, or only slashes
108
+ * - input represents a folder path (trailing slash/backslash, drive/folder only)
109
+ * - input is a **domain-only string** in domain-aware mode
110
+ * - Normalizes Windows-style backslashes (`\`) internally as `/`.
111
+ * - Supports UNC paths, mixed slashes, and Windows drive letters safely.
112
+ * - Handles URLs:
113
+ * - Ignores query strings (`?v=1.2.3`) and hash fragments (`#section`)
114
+ * - Decodes percent-encoded filenames (`my%20file.txt` ➔ `my file.txt`)
115
+ * - Supports protocol-relative URLs (`//cdn.example.com/file.jpg`)
116
+ * - Supports uncommon/custom protocols (`ftp://`, `file://`, `mailto:`, etc.)
117
+ * - Handles **multiple dots**, **trailing dots**, **triple or more extensions**
118
+ * - Supports filenames on mixed Unicode/ASCII domains:
119
+ * - Domain names can include Unicode characters (IDN / punycode)
120
+ * - Filenames may contain ASCII, Unicode, and emoji characters
121
+ * - Works correctly when domain is Unicode and filename is ASCII, or vice versa
122
+ * - Supports extremely long filenames safely (up to OS limits)
123
+ * - Domain-aware mode (`domainAware: true` + `domainName`):
124
+ * - Parameter `domainName` must be a string and non-empty string; otherwise a TypeError is thrown.
125
+ * - Returns `null` if input equals `domainName` or any subdomain with no file path
126
+ * - Extracts filename normally if path/file exists on domain or other domain
127
+ * - Safe in Node.js and browsers
128
+ *
129
+ * ----------------------------------------------------------
130
+ * @param {string | null | undefined} input
131
+ * URL, file path, or plain filename to extract from.
132
+ *
133
+ * @param {ExtractFileNameOptions} [options]
134
+ * Optional configuration:
135
+ * - `domainAware?: boolean` – treat input as a domain string. Requires `domainName` to be a string and non-empty string; otherwise, a TypeError is thrown.
136
+ * - `domainName?: string` – base domain for comparison eg (`example.com`), required when `domainAware` is true.
137
+ *
138
+ * @returns {string | null}
139
+ * - Base filename without known extensions
140
+ * - Original filename if extension unknown
141
+ * - `null` for invalid inputs, folder paths, or domain-only strings
142
+ *
143
+ * ----------------------------------------------------------
36
144
  * @example
37
- * extractFileName("document.pdf"); // ➔ "document"
38
- * extractFileName("/files/archive.tar.gz"); // "archive"
39
- * extractFileName("https://cdn.site.com/video.mp4"); // ➔ "video"
40
- * extractFileName("folder/"); // ➔ ""
41
- * extractFileName("strangefile.unknownext"); // ➔ "strangefile.unknownext"
42
- * extractFileName(""); // ➔ undefined
43
- * extractFileName(123); // ➔ undefined
145
+ * ```ts
146
+ * // Basic files
147
+ * extractFileName("document.pdf"); // ➔ "document"
148
+ * extractFileName("/files/archive.tar.gz"); // ➔ "archive"
149
+ * extractFileName("C:\\path\\file.txt"); // ➔ "file"
150
+ * extractFileName(".env"); // ➔ ".env"
151
+ * extractFileName("folder/"); // ➔ null
152
+ *
153
+ * // Not a file
154
+ * extractFileName("not-file"); // ➔ null
155
+ * extractFileName("not-file/"); // ➔ null
156
+ * extractFileName("/not-file/"); // ➔ null
157
+ * extractFileName("/not-file"); // ➔ null
158
+ *
159
+ * // URLs with queries, hashes, protocols
160
+ * extractFileName("https://example.com/file.txt?ver=1"); // ➔ "file"
161
+ * extractFileName("https://example.com/archive.tar.gz#part"); // ➔ "archive"
162
+ * extractFileName("//cdn.example.com/image.png"); // ➔ "image"
163
+ *
164
+ *
165
+ * // Special protocol handling
166
+ * extractFileName("tel:+6212345678"); // ➔ "+6212345678"
167
+ * extractFileName("sms:+6212345678"); // ➔ "+6212345678"
168
+ * extractFileName("mailto:user@domain.com"); // ➔ "user@domain"
169
+ * extractFileName("data:text/plain;base64,SGVsbG8="); // ➔ "SGVsbG8="
170
+ * extractFileName("mailto:resume.com"); // ➔ "resume"
171
+ * extractFileName("ftp://example.com/image.jpeg"); // ➔ "image"
172
+ * extractFileName("ftp://files.example.com/app.min.js"); // ➔ "app.min"
173
+ * extractFileName("file:///C:/path/to/document.pdf"); // ➔ "document"
174
+ * extractFileName("custom-scheme://example.com/video.mp4"); // ➔ "video"
175
+ *
176
+ * // Unicode & emoji
177
+ * extractFileName("emoji-😊.png"); // ➔ "emoji-😊"
178
+ * extractFileName("🔥project.tar.gz"); // ➔ "🔥project"
179
+ *
180
+ * // Dotfiles
181
+ * extractFileName(".gitignore"); // ➔ ".gitignore"
182
+ * extractFileName("/path/.bashrc"); // ➔ ".bashrc"
183
+ *
184
+ * // Mixed Unicode domain and ASCII filename
185
+ * extractFileName("https://tést-ドメイン.com/file.txt"); // ➔ "file"
186
+ * extractFileName("https://example.com/ファイル名.pdf"); // ➔ "ファイル名"
187
+ * extractFileName("https://ドメイン例.com/emoji-🔥.png"); // ➔ "emoji-🔥"
188
+ *
189
+ * // Reserved filenames
190
+ * extractFileName("CON"); // ➔ "CON"
191
+ * extractFileName("NUL.txt"); // ➔ "NUL"
192
+ *
193
+ * // Domain-aware mode
194
+ * extractFileName("example.com", {
195
+ * domainAware: true,
196
+ * domainName: "example.com"
197
+ * });
198
+ * // ➔ null
199
+ * extractFileName("cdn.example.com", {
200
+ * domainAware: true,
201
+ * domainName: "example.com"
202
+ * });
203
+ * // ➔ null
204
+ * extractFileName("resume.com", {
205
+ * domainAware: true,
206
+ * domainName: "example.com"
207
+ * });
208
+ * // ➔ "resume"
209
+ * extractFileName("https://example.com/file.txt", {
210
+ * domainAware: true,
211
+ * domainName: "example.com"
212
+ * });
213
+ * // ➔ "file"
214
+ *
215
+ * // Windows & UNC paths
216
+ * extractFileName("C:\\Users\\rzl\\Documents\\file.txt"); // ➔ "file"
217
+ * extractFileName("\\\\SERVER\\share\\logs\\output.log"); // ➔ "output"
218
+ * extractFileName("C:/Users\\rzl/mix\\test.pdf"); // ➔ "test"
219
+ *
220
+ * // Edge / extreme cases
221
+ * extractFileName("https://example.com/my%20file%20name.txt"); // ➔ "my file name"
222
+ * extractFileName("app.min.js.map"); // ➔ "app.min"
223
+ * extractFileName("backup.tar.bak"); // ➔ "backup.tar.bak" (unknown double extension)
224
+ * extractFileName("filename."); // ➔ "filename."
225
+ * extractFileName("a".repeat(255) + ".txt"); // ➔ "a".repeat(255)
226
+ * ```
227
+ *
228
+ * ----------------------------------------------------------
229
+ * @note
230
+ * - Robust: never throws, handles unusual inputs safely.
231
+ * - Suitable for display, logging, or safe storage.
232
+ * - Normalizes slashes consistently.
233
+ * - Covers nearly all real-world filename, URL, path, data URI, and domain scenarios.
234
+ * - Handles Windows UNC paths, mixed slashes, percent-encoded, Unicode/emoji filenames.
235
+ * - Known multi-part extensions list can be extended without breaking functionality.
44
236
  */
45
- declare const extractFileName:(url:string|null|undefined)=>string|undefined;export{extractFileName};
237
+ declare const extractFileName:(input?:string|null,options?:ExtractFileNameOptions)=>string|null;export{type ExtractFileNameOptions,extractFileName};
@@ -2,10 +2,12 @@
2
2
  * ====================================================
3
3
  * Rzl Utils-JS.
4
4
  * ----------------------------------------------------
5
- * Version: 3.8.0.
5
+ * Version: 3.9.0.
6
6
  * Author: Rizalvin Dwiky.
7
7
  * Repository: https://github.com/rzl-zone/utils-js.
8
8
  * ====================================================
9
9
  */
10
- export { extractFileName } from '../chunk-KPCDDYTZ.js';
11
- import '../chunk-3KTD3QDI.js';
10
+ export { extractFileName } from '../chunk-QXTJVDWE.js';
11
+ import '../chunk-GKDSBOYE.js';
12
+ import '../chunk-OSSFLQDD.js';
13
+ import '../chunk-J4TT33ZX.js';
@@ -2,133 +2,134 @@
2
2
  * ====================================================
3
3
  * Rzl Utils-JS.
4
4
  * ----------------------------------------------------
5
- * Version: 3.8.0.
5
+ * Version: 3.9.0.
6
6
  * Author: Rizalvin Dwiky.
7
7
  * Repository: https://github.com/rzl-zone/utils-js.
8
8
  * ====================================================
9
9
  */
10
10
  'use strict';
11
11
 
12
- var chunkCKUEZF4R_cjs = require('../chunk-CKUEZF4R.cjs');
12
+ var chunkXYWC4EQ3_cjs = require('../chunk-XYWC4EQ3.cjs');
13
13
  var chunkKHO2SBNA_cjs = require('../chunk-KHO2SBNA.cjs');
14
- var chunkTFDXRT6D_cjs = require('../chunk-TFDXRT6D.cjs');
15
- var chunkUKAUXY2U_cjs = require('../chunk-UKAUXY2U.cjs');
14
+ var chunkALRISPTL_cjs = require('../chunk-ALRISPTL.cjs');
15
+ var chunkMMRHKYT6_cjs = require('../chunk-MMRHKYT6.cjs');
16
16
  var chunkVJDDGRIK_cjs = require('../chunk-VJDDGRIK.cjs');
17
- require('../chunk-EK7FSI7F.cjs');
18
- var chunkB4SDEBN7_cjs = require('../chunk-B4SDEBN7.cjs');
17
+ require('../chunk-2XGQQZ6A.cjs');
18
+ var chunkPWKOFPAH_cjs = require('../chunk-PWKOFPAH.cjs');
19
19
  var chunkDVMHRLKP_cjs = require('../chunk-DVMHRLKP.cjs');
20
- var chunkVJVCXEH7_cjs = require('../chunk-VJVCXEH7.cjs');
21
- var chunkNREACG6M_cjs = require('../chunk-NREACG6M.cjs');
22
- require('../chunk-K63WO3XA.cjs');
23
- var chunk7QQV66RX_cjs = require('../chunk-7QQV66RX.cjs');
24
- var chunkATLFMKAF_cjs = require('../chunk-ATLFMKAF.cjs');
25
- var chunkYC7AK3KX_cjs = require('../chunk-YC7AK3KX.cjs');
20
+ var chunk6AMDHVS2_cjs = require('../chunk-6AMDHVS2.cjs');
21
+ require('../chunk-ZTHJQJ5F.cjs');
22
+ var chunkFWWPEL7J_cjs = require('../chunk-FWWPEL7J.cjs');
23
+ require('../chunk-WKM6UVMG.cjs');
24
+ var chunkTJ5OY6MC_cjs = require('../chunk-TJ5OY6MC.cjs');
25
+ var chunkNAOVH4OH_cjs = require('../chunk-NAOVH4OH.cjs');
26
+ var chunkH44QVAZL_cjs = require('../chunk-H44QVAZL.cjs');
26
27
  var chunkUDA26MCU_cjs = require('../chunk-UDA26MCU.cjs');
27
- var chunkF3WBQKRI_cjs = require('../chunk-F3WBQKRI.cjs');
28
+ var chunk7C7TQC5J_cjs = require('../chunk-7C7TQC5J.cjs');
28
29
 
29
30
  Object.defineProperty(exports, "areArraysEqual", {
30
31
  enumerable: true,
31
- get: function () { return chunkCKUEZF4R_cjs.areArraysEqual; }
32
+ get: function () { return chunkXYWC4EQ3_cjs.areArraysEqual; }
32
33
  });
33
34
  Object.defineProperty(exports, "areObjectsEqual", {
34
35
  enumerable: true,
35
- get: function () { return chunkCKUEZF4R_cjs.areObjectsEqual; }
36
+ get: function () { return chunkXYWC4EQ3_cjs.areObjectsEqual; }
36
37
  });
37
38
  Object.defineProperty(exports, "areURLsEqualPath", {
38
39
  enumerable: true,
39
- get: function () { return chunkCKUEZF4R_cjs.areURLsEqualPath; }
40
+ get: function () { return chunkXYWC4EQ3_cjs.areURLsEqualPath; }
40
41
  });
41
42
  Object.defineProperty(exports, "areURLsIdentical", {
42
43
  enumerable: true,
43
- get: function () { return chunkCKUEZF4R_cjs.areURLsIdentical; }
44
+ get: function () { return chunkXYWC4EQ3_cjs.areURLsIdentical; }
44
45
  });
45
46
  Object.defineProperty(exports, "arrayHasAnyMatch", {
46
47
  enumerable: true,
47
- get: function () { return chunkCKUEZF4R_cjs.arrayHasAnyMatch; }
48
+ get: function () { return chunkXYWC4EQ3_cjs.arrayHasAnyMatch; }
48
49
  });
49
50
  Object.defineProperty(exports, "doesKeyExist", {
50
51
  enumerable: true,
51
- get: function () { return chunkCKUEZF4R_cjs.doesKeyExist; }
52
+ get: function () { return chunkXYWC4EQ3_cjs.doesKeyExist; }
52
53
  });
53
54
  Object.defineProperty(exports, "isArguments", {
54
55
  enumerable: true,
55
- get: function () { return chunkCKUEZF4R_cjs.isArguments; }
56
+ get: function () { return chunkXYWC4EQ3_cjs.isArguments; }
56
57
  });
57
58
  Object.defineProperty(exports, "isArrayLike", {
58
59
  enumerable: true,
59
- get: function () { return chunkCKUEZF4R_cjs.isArrayLike; }
60
+ get: function () { return chunkXYWC4EQ3_cjs.isArrayLike; }
60
61
  });
61
62
  Object.defineProperty(exports, "isArrayLikeObject", {
62
63
  enumerable: true,
63
- get: function () { return chunkCKUEZF4R_cjs.isArrayLikeObject; }
64
+ get: function () { return chunkXYWC4EQ3_cjs.isArrayLikeObject; }
64
65
  });
65
66
  Object.defineProperty(exports, "isCurrencyLike", {
66
67
  enumerable: true,
67
- get: function () { return chunkCKUEZF4R_cjs.isCurrencyLike; }
68
+ get: function () { return chunkXYWC4EQ3_cjs.isCurrencyLike; }
68
69
  });
69
70
  Object.defineProperty(exports, "isDeepEqual", {
70
71
  enumerable: true,
71
- get: function () { return chunkCKUEZF4R_cjs.isDeepEqual; }
72
+ get: function () { return chunkXYWC4EQ3_cjs.isDeepEqual; }
72
73
  });
73
74
  Object.defineProperty(exports, "isElement", {
74
75
  enumerable: true,
75
- get: function () { return chunkCKUEZF4R_cjs.isElement; }
76
+ get: function () { return chunkXYWC4EQ3_cjs.isElement; }
76
77
  });
77
78
  Object.defineProperty(exports, "isEmpty", {
78
79
  enumerable: true,
79
- get: function () { return chunkCKUEZF4R_cjs.isEmpty; }
80
+ get: function () { return chunkXYWC4EQ3_cjs.isEmpty; }
80
81
  });
81
82
  Object.defineProperty(exports, "isEmptyDeep", {
82
83
  enumerable: true,
83
- get: function () { return chunkCKUEZF4R_cjs.isEmptyDeep; }
84
+ get: function () { return chunkXYWC4EQ3_cjs.isEmptyDeep; }
84
85
  });
85
86
  Object.defineProperty(exports, "isEqualWith", {
86
87
  enumerable: true,
87
- get: function () { return chunkCKUEZF4R_cjs.isEqualWith; }
88
+ get: function () { return chunkXYWC4EQ3_cjs.isEqualWith; }
88
89
  });
89
90
  Object.defineProperty(exports, "isLength", {
90
91
  enumerable: true,
91
- get: function () { return chunkCKUEZF4R_cjs.isLength; }
92
+ get: function () { return chunkXYWC4EQ3_cjs.isLength; }
92
93
  });
93
94
  Object.defineProperty(exports, "isMatch", {
94
95
  enumerable: true,
95
- get: function () { return chunkCKUEZF4R_cjs.isMatch; }
96
+ get: function () { return chunkXYWC4EQ3_cjs.isMatch; }
96
97
  });
97
98
  Object.defineProperty(exports, "isMatchWith", {
98
99
  enumerable: true,
99
- get: function () { return chunkCKUEZF4R_cjs.isMatchWith; }
100
+ get: function () { return chunkXYWC4EQ3_cjs.isMatchWith; }
100
101
  });
101
102
  Object.defineProperty(exports, "isNative", {
102
103
  enumerable: true,
103
- get: function () { return chunkCKUEZF4R_cjs.isNative; }
104
+ get: function () { return chunkXYWC4EQ3_cjs.isNative; }
104
105
  });
105
106
  Object.defineProperty(exports, "isObjectLoose", {
106
107
  enumerable: true,
107
- get: function () { return chunkCKUEZF4R_cjs.isObjectLoose; }
108
+ get: function () { return chunkXYWC4EQ3_cjs.isObjectLoose; }
108
109
  });
109
110
  Object.defineProperty(exports, "isPropertyKey", {
110
111
  enumerable: true,
111
- get: function () { return chunkCKUEZF4R_cjs.isPropertyKey; }
112
+ get: function () { return chunkXYWC4EQ3_cjs.isPropertyKey; }
112
113
  });
113
114
  Object.defineProperty(exports, "isSafeInteger", {
114
115
  enumerable: true,
115
- get: function () { return chunkCKUEZF4R_cjs.isSafeInteger; }
116
+ get: function () { return chunkXYWC4EQ3_cjs.isSafeInteger; }
116
117
  });
117
118
  Object.defineProperty(exports, "isValidURL", {
118
119
  enumerable: true,
119
- get: function () { return chunkCKUEZF4R_cjs.isValidURL; }
120
+ get: function () { return chunkXYWC4EQ3_cjs.isValidURL; }
120
121
  });
121
122
  Object.defineProperty(exports, "isWeakMap", {
122
123
  enumerable: true,
123
- get: function () { return chunkCKUEZF4R_cjs.isWeakMap; }
124
+ get: function () { return chunkXYWC4EQ3_cjs.isWeakMap; }
124
125
  });
125
126
  Object.defineProperty(exports, "textContainsAll", {
126
127
  enumerable: true,
127
- get: function () { return chunkCKUEZF4R_cjs.textContainsAll; }
128
+ get: function () { return chunkXYWC4EQ3_cjs.textContainsAll; }
128
129
  });
129
130
  Object.defineProperty(exports, "textContainsAny", {
130
131
  enumerable: true,
131
- get: function () { return chunkCKUEZF4R_cjs.textContainsAny; }
132
+ get: function () { return chunkXYWC4EQ3_cjs.textContainsAny; }
132
133
  });
133
134
  Object.defineProperty(exports, "isURL", {
134
135
  enumerable: true,
@@ -136,15 +137,15 @@ Object.defineProperty(exports, "isURL", {
136
137
  });
137
138
  Object.defineProperty(exports, "isNonEmptyValue", {
138
139
  enumerable: true,
139
- get: function () { return chunkTFDXRT6D_cjs.isNonEmptyValue; }
140
+ get: function () { return chunkALRISPTL_cjs.isNonEmptyValue; }
140
141
  });
141
142
  Object.defineProperty(exports, "isTypedArray", {
142
143
  enumerable: true,
143
- get: function () { return chunkTFDXRT6D_cjs.isTypedArray; }
144
+ get: function () { return chunkALRISPTL_cjs.isTypedArray; }
144
145
  });
145
146
  Object.defineProperty(exports, "isEmptyValue", {
146
147
  enumerable: true,
147
- get: function () { return chunkUKAUXY2U_cjs.isEmptyValue; }
148
+ get: function () { return chunkMMRHKYT6_cjs.isEmptyValue; }
148
149
  });
149
150
  Object.defineProperty(exports, "isServer", {
150
151
  enumerable: true,
@@ -152,7 +153,7 @@ Object.defineProperty(exports, "isServer", {
152
153
  });
153
154
  Object.defineProperty(exports, "isFinite", {
154
155
  enumerable: true,
155
- get: function () { return chunkB4SDEBN7_cjs.isFinite; }
156
+ get: function () { return chunkPWKOFPAH_cjs.isFinite; }
156
157
  });
157
158
  Object.defineProperty(exports, "isInteger", {
158
159
  enumerable: true,
@@ -160,39 +161,39 @@ Object.defineProperty(exports, "isInteger", {
160
161
  });
161
162
  Object.defineProperty(exports, "isValidDomain", {
162
163
  enumerable: true,
163
- get: function () { return chunkVJVCXEH7_cjs.isValidDomain; }
164
+ get: function () { return chunk6AMDHVS2_cjs.isValidDomain; }
164
165
  });
165
166
  Object.defineProperty(exports, "isEmptyString", {
166
167
  enumerable: true,
167
- get: function () { return chunkNREACG6M_cjs.isEmptyString; }
168
+ get: function () { return chunkFWWPEL7J_cjs.isEmptyString; }
168
169
  });
169
170
  Object.defineProperty(exports, "isArrayBuffer", {
170
171
  enumerable: true,
171
- get: function () { return chunk7QQV66RX_cjs.isArrayBuffer; }
172
+ get: function () { return chunkTJ5OY6MC_cjs.isArrayBuffer; }
172
173
  });
173
174
  Object.defineProperty(exports, "isEqual", {
174
175
  enumerable: true,
175
- get: function () { return chunk7QQV66RX_cjs.isEqual; }
176
+ get: function () { return chunkTJ5OY6MC_cjs.isEqual; }
176
177
  });
177
178
  Object.defineProperty(exports, "isRegExp", {
178
179
  enumerable: true,
179
- get: function () { return chunk7QQV66RX_cjs.isRegExp; }
180
+ get: function () { return chunkTJ5OY6MC_cjs.isRegExp; }
180
181
  });
181
182
  Object.defineProperty(exports, "isEmptyArray", {
182
183
  enumerable: true,
183
- get: function () { return chunkATLFMKAF_cjs.isEmptyArray; }
184
+ get: function () { return chunkNAOVH4OH_cjs.isEmptyArray; }
184
185
  });
185
186
  Object.defineProperty(exports, "isEmptyObject", {
186
187
  enumerable: true,
187
- get: function () { return chunkATLFMKAF_cjs.isEmptyObject; }
188
+ get: function () { return chunkNAOVH4OH_cjs.isEmptyObject; }
188
189
  });
189
190
  Object.defineProperty(exports, "isDate", {
190
191
  enumerable: true,
191
- get: function () { return chunkYC7AK3KX_cjs.isDate; }
192
+ get: function () { return chunkH44QVAZL_cjs.isDate; }
192
193
  });
193
194
  Object.defineProperty(exports, "isMap", {
194
195
  enumerable: true,
195
- get: function () { return chunkYC7AK3KX_cjs.isMap; }
196
+ get: function () { return chunkH44QVAZL_cjs.isMap; }
196
197
  });
197
198
  Object.defineProperty(exports, "isBigInt", {
198
199
  enumerable: true,
@@ -200,97 +201,97 @@ Object.defineProperty(exports, "isBigInt", {
200
201
  });
201
202
  Object.defineProperty(exports, "getPreciseType", {
202
203
  enumerable: true,
203
- get: function () { return chunkF3WBQKRI_cjs.getPreciseType; }
204
+ get: function () { return chunk7C7TQC5J_cjs.getPreciseType; }
204
205
  });
205
206
  Object.defineProperty(exports, "hasOwnProp", {
206
207
  enumerable: true,
207
- get: function () { return chunkF3WBQKRI_cjs.hasOwnProp; }
208
+ get: function () { return chunk7C7TQC5J_cjs.hasOwnProp; }
208
209
  });
209
210
  Object.defineProperty(exports, "isArray", {
210
211
  enumerable: true,
211
- get: function () { return chunkF3WBQKRI_cjs.isArray; }
212
+ get: function () { return chunk7C7TQC5J_cjs.isArray; }
212
213
  });
213
214
  Object.defineProperty(exports, "isBoolean", {
214
215
  enumerable: true,
215
- get: function () { return chunkF3WBQKRI_cjs.isBoolean; }
216
+ get: function () { return chunk7C7TQC5J_cjs.isBoolean; }
216
217
  });
217
218
  Object.defineProperty(exports, "isBooleanObject", {
218
219
  enumerable: true,
219
- get: function () { return chunkF3WBQKRI_cjs.isBooleanObject; }
220
+ get: function () { return chunk7C7TQC5J_cjs.isBooleanObject; }
220
221
  });
221
222
  Object.defineProperty(exports, "isBuffer", {
222
223
  enumerable: true,
223
- get: function () { return chunkF3WBQKRI_cjs.isBuffer; }
224
+ get: function () { return chunk7C7TQC5J_cjs.isBuffer; }
224
225
  });
225
226
  Object.defineProperty(exports, "isError", {
226
227
  enumerable: true,
227
- get: function () { return chunkF3WBQKRI_cjs.isError; }
228
+ get: function () { return chunk7C7TQC5J_cjs.isError; }
228
229
  });
229
230
  Object.defineProperty(exports, "isFunction", {
230
231
  enumerable: true,
231
- get: function () { return chunkF3WBQKRI_cjs.isFunction; }
232
+ get: function () { return chunk7C7TQC5J_cjs.isFunction; }
232
233
  });
233
234
  Object.defineProperty(exports, "isInfinityNumber", {
234
235
  enumerable: true,
235
- get: function () { return chunkF3WBQKRI_cjs.isInfinityNumber; }
236
+ get: function () { return chunk7C7TQC5J_cjs.isInfinityNumber; }
236
237
  });
237
238
  Object.defineProperty(exports, "isNaN", {
238
239
  enumerable: true,
239
- get: function () { return chunkF3WBQKRI_cjs.isNaN; }
240
+ get: function () { return chunk7C7TQC5J_cjs.isNaN; }
240
241
  });
241
242
  Object.defineProperty(exports, "isNil", {
242
243
  enumerable: true,
243
- get: function () { return chunkF3WBQKRI_cjs.isNil; }
244
+ get: function () { return chunk7C7TQC5J_cjs.isNil; }
244
245
  });
245
246
  Object.defineProperty(exports, "isNonEmptyArray", {
246
247
  enumerable: true,
247
- get: function () { return chunkF3WBQKRI_cjs.isNonEmptyArray; }
248
+ get: function () { return chunk7C7TQC5J_cjs.isNonEmptyArray; }
248
249
  });
249
250
  Object.defineProperty(exports, "isNonEmptyString", {
250
251
  enumerable: true,
251
- get: function () { return chunkF3WBQKRI_cjs.isNonEmptyString; }
252
+ get: function () { return chunk7C7TQC5J_cjs.isNonEmptyString; }
252
253
  });
253
254
  Object.defineProperty(exports, "isNull", {
254
255
  enumerable: true,
255
- get: function () { return chunkF3WBQKRI_cjs.isNull; }
256
+ get: function () { return chunk7C7TQC5J_cjs.isNull; }
256
257
  });
257
258
  Object.defineProperty(exports, "isNumber", {
258
259
  enumerable: true,
259
- get: function () { return chunkF3WBQKRI_cjs.isNumber; }
260
+ get: function () { return chunk7C7TQC5J_cjs.isNumber; }
260
261
  });
261
262
  Object.defineProperty(exports, "isNumberObject", {
262
263
  enumerable: true,
263
- get: function () { return chunkF3WBQKRI_cjs.isNumberObject; }
264
+ get: function () { return chunk7C7TQC5J_cjs.isNumberObject; }
264
265
  });
265
266
  Object.defineProperty(exports, "isObject", {
266
267
  enumerable: true,
267
- get: function () { return chunkF3WBQKRI_cjs.isObject; }
268
+ get: function () { return chunk7C7TQC5J_cjs.isObject; }
268
269
  });
269
270
  Object.defineProperty(exports, "isObjectOrArray", {
270
271
  enumerable: true,
271
- get: function () { return chunkF3WBQKRI_cjs.isObjectOrArray; }
272
+ get: function () { return chunk7C7TQC5J_cjs.isObjectOrArray; }
272
273
  });
273
274
  Object.defineProperty(exports, "isPlainObject", {
274
275
  enumerable: true,
275
- get: function () { return chunkF3WBQKRI_cjs.isPlainObject; }
276
+ get: function () { return chunk7C7TQC5J_cjs.isPlainObject; }
276
277
  });
277
278
  Object.defineProperty(exports, "isSet", {
278
279
  enumerable: true,
279
- get: function () { return chunkF3WBQKRI_cjs.isSet; }
280
+ get: function () { return chunk7C7TQC5J_cjs.isSet; }
280
281
  });
281
282
  Object.defineProperty(exports, "isString", {
282
283
  enumerable: true,
283
- get: function () { return chunkF3WBQKRI_cjs.isString; }
284
+ get: function () { return chunk7C7TQC5J_cjs.isString; }
284
285
  });
285
286
  Object.defineProperty(exports, "isStringObject", {
286
287
  enumerable: true,
287
- get: function () { return chunkF3WBQKRI_cjs.isStringObject; }
288
+ get: function () { return chunk7C7TQC5J_cjs.isStringObject; }
288
289
  });
289
290
  Object.defineProperty(exports, "isSymbol", {
290
291
  enumerable: true,
291
- get: function () { return chunkF3WBQKRI_cjs.isSymbol; }
292
+ get: function () { return chunk7C7TQC5J_cjs.isSymbol; }
292
293
  });
293
294
  Object.defineProperty(exports, "isUndefined", {
294
295
  enumerable: true,
295
- get: function () { return chunkF3WBQKRI_cjs.isUndefined; }
296
+ get: function () { return chunk7C7TQC5J_cjs.isUndefined; }
296
297
  });