@pawover/kit 0.2.2 → 0.3.1
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/package.json +5 -5
- package/packages/hooks/dist/react.js +389 -0
- package/packages/utils/dist/index.d.ts +122 -40
- package/packages/utils/dist/index.js +246 -40
package/package.json
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"url": "https://github.com/pawover"
|
|
7
7
|
},
|
|
8
8
|
"description": "一个基于 TypeScript 的开发工具包",
|
|
9
|
-
"version": "0.
|
|
9
|
+
"version": "0.3.1",
|
|
10
10
|
"type": "module",
|
|
11
11
|
"engines": {
|
|
12
12
|
"node": ">=22.20.0"
|
|
@@ -53,8 +53,8 @@
|
|
|
53
53
|
"devDependencies": {
|
|
54
54
|
"@commitlint/cli": "^21.2.1",
|
|
55
55
|
"@commitlint/config-conventional": "^21.2.0",
|
|
56
|
-
"@eslint-react/eslint-plugin": "^5.14.
|
|
57
|
-
"@pawover/eslint-rules": "^0.2.
|
|
56
|
+
"@eslint-react/eslint-plugin": "^5.14.8",
|
|
57
|
+
"@pawover/eslint-rules": "^0.2.3",
|
|
58
58
|
"@playwright/test": "^1.61.1",
|
|
59
59
|
"@stylistic/eslint-plugin": "^6.0.0-beta.5",
|
|
60
60
|
"@types/fs-extra": "^11.0.4",
|
|
@@ -75,9 +75,9 @@
|
|
|
75
75
|
"rimraf": "^6.1.3",
|
|
76
76
|
"taze": "^19.14.1",
|
|
77
77
|
"tsdown": "^0.22.7",
|
|
78
|
-
"turbo": "^2.10.
|
|
78
|
+
"turbo": "^2.10.5",
|
|
79
79
|
"typescript": "^6.0.3",
|
|
80
|
-
"typescript-eslint": "^8.
|
|
80
|
+
"typescript-eslint": "^8.64.0",
|
|
81
81
|
"vitest": "^4.1.10"
|
|
82
82
|
},
|
|
83
83
|
"peerDependencies": {
|
|
@@ -1538,6 +1538,395 @@ var EnvUtil = class {
|
|
|
1538
1538
|
}
|
|
1539
1539
|
};
|
|
1540
1540
|
/**
|
|
1541
|
+
* MIME 工具类
|
|
1542
|
+
*/
|
|
1543
|
+
var MimeUtil = class {
|
|
1544
|
+
/**
|
|
1545
|
+
* 文件类型 MIME 常量
|
|
1546
|
+
* - 每个类型对应具体的文件扩展名
|
|
1547
|
+
*/
|
|
1548
|
+
static FILE_MIME = {
|
|
1549
|
+
/** 普通文本文件(.txt) */
|
|
1550
|
+
TEXT: "text/plain",
|
|
1551
|
+
/** 超文本标记语言文档(.html/.htm) */
|
|
1552
|
+
HTML: "text/html",
|
|
1553
|
+
/** 层叠样式表文件(.css) */
|
|
1554
|
+
CSS: "text/css",
|
|
1555
|
+
/** 逗号分隔值文件/表格数据(.csv) */
|
|
1556
|
+
CSV: "text/csv",
|
|
1557
|
+
/** 制表符分隔值文件(.tsv) */
|
|
1558
|
+
TSV: "text/tab-separated-values",
|
|
1559
|
+
/** XML 文档(.xml) */
|
|
1560
|
+
XML: "application/xml",
|
|
1561
|
+
/** XML 文档/兼容值 */
|
|
1562
|
+
XML_LEGACY: "text/xml",
|
|
1563
|
+
/** XHTML 文档(.xhtml/.xht) */
|
|
1564
|
+
XHTML: "application/xhtml+xml",
|
|
1565
|
+
/** JavaScript 文件(.js) */
|
|
1566
|
+
JS: "text/javascript",
|
|
1567
|
+
/** TypeScript 文件(.ts) */
|
|
1568
|
+
TS: "text/typescript",
|
|
1569
|
+
/** Python 文件(.py) */
|
|
1570
|
+
PY: "text/x-python",
|
|
1571
|
+
/** Shell 脚本 (.sh) */
|
|
1572
|
+
SH: "text/x-sh",
|
|
1573
|
+
/** C 语言源文件(.c) */
|
|
1574
|
+
C: "text/x-c",
|
|
1575
|
+
/** C++ 源文件(.cpp/.cc/.cxx) */
|
|
1576
|
+
CPP: "text/x-c++",
|
|
1577
|
+
/** C# 源文件(.cs) */
|
|
1578
|
+
CSHARP: "text/x-csharp",
|
|
1579
|
+
/** Java 源文件(.java) */
|
|
1580
|
+
JAVA: "text/x-java",
|
|
1581
|
+
/** Go 源文件(.go) */
|
|
1582
|
+
GO: "text/x-go",
|
|
1583
|
+
/** Rust 源文件(.rs) */
|
|
1584
|
+
RUST: "text/x-rust",
|
|
1585
|
+
/** PHP 文件(.php) */
|
|
1586
|
+
PHP: "text/x-php",
|
|
1587
|
+
/** Ruby 文件(.rb) */
|
|
1588
|
+
RUBY: "text/x-ruby",
|
|
1589
|
+
/** Swift 源文件(.swift) */
|
|
1590
|
+
SWIFT: "text/x-swift",
|
|
1591
|
+
/** YAML 文档(.yaml/.yml) */
|
|
1592
|
+
YAML: "application/yaml",
|
|
1593
|
+
/** YAML 文档/兼容值 */
|
|
1594
|
+
YAML_LEGACY: "text/vnd.yaml",
|
|
1595
|
+
/** TOML 文档(.toml) */
|
|
1596
|
+
TOML: "application/toml",
|
|
1597
|
+
/** TOML 文档/兼容值 */
|
|
1598
|
+
TOML_LEGACY: "text/x-toml",
|
|
1599
|
+
/** SQL 脚本(.sql) */
|
|
1600
|
+
SQL: "application/sql",
|
|
1601
|
+
/** SQL 脚本/兼容值 */
|
|
1602
|
+
SQL_LEGACY: "text/x-sql",
|
|
1603
|
+
/** Markdown 格式文档(.md/.markdown) */
|
|
1604
|
+
MARKDOWN: "text/markdown",
|
|
1605
|
+
/** 富文本格式文档(.rtf) */
|
|
1606
|
+
RTF: "application/rtf",
|
|
1607
|
+
/** iCalendar 日历格式(.ics) */
|
|
1608
|
+
CALENDAR: "text/calendar",
|
|
1609
|
+
/** JPEG 图像(.jpg/.jpeg) */
|
|
1610
|
+
JPEG: "image/jpeg",
|
|
1611
|
+
/** JPG 图像(JPEG 别名,.jpg) */
|
|
1612
|
+
JPG: "image/jpeg",
|
|
1613
|
+
/** PNG 图像/无损压缩,支持透明(.png) */
|
|
1614
|
+
PNG: "image/png",
|
|
1615
|
+
/** GIF 图像/支持动画(.gif) */
|
|
1616
|
+
GIF: "image/gif",
|
|
1617
|
+
/** Windows 位图(.bmp) */
|
|
1618
|
+
BMP: "image/bmp",
|
|
1619
|
+
/** SVG 向量图形(.svg) */
|
|
1620
|
+
SVG: "image/svg+xml",
|
|
1621
|
+
/** APNG 动态图像(.apng) */
|
|
1622
|
+
APNG: "image/apng",
|
|
1623
|
+
/** AVIF 图像/高效压缩(.avif) */
|
|
1624
|
+
AVIF: "image/avif",
|
|
1625
|
+
/** 图标文件格式(.ico) */
|
|
1626
|
+
ICO: "image/vnd.microsoft.icon",
|
|
1627
|
+
/** 图标文件格式/兼容值(.ico) */
|
|
1628
|
+
ICO_LEGACY: "image/x-icon",
|
|
1629
|
+
/** WebP 图像/高效压缩(.webp) */
|
|
1630
|
+
WEBP: "image/webp",
|
|
1631
|
+
/** TIFF 图像(.tif/.tiff) */
|
|
1632
|
+
TIFF: "image/tiff",
|
|
1633
|
+
/** HEIC 图像/高效编码(.heic) */
|
|
1634
|
+
HEIC: "image/heic",
|
|
1635
|
+
/** HEIF 图像/高效编码(.heif) */
|
|
1636
|
+
HEIF: "image/heif",
|
|
1637
|
+
/** Adobe Photoshop 文件(.psd) */
|
|
1638
|
+
PSD: "image/vnd.adobe.photoshop",
|
|
1639
|
+
/** MP3 音频(.mp3) */
|
|
1640
|
+
MP3: "audio/mpeg",
|
|
1641
|
+
/** AAC 音频(.aac) */
|
|
1642
|
+
AAC: "audio/aac",
|
|
1643
|
+
/** MIDI 音乐文件(.mid/.midi) */
|
|
1644
|
+
MIDI: "audio/midi",
|
|
1645
|
+
/** OGG 音频(.oga) */
|
|
1646
|
+
OGG_AUDIO: "audio/ogg",
|
|
1647
|
+
/** Opus 音频(.opus) */
|
|
1648
|
+
OPUS: "audio/opus",
|
|
1649
|
+
/** FLAC 无损音频(.flac) */
|
|
1650
|
+
FLAC: "audio/flac",
|
|
1651
|
+
/** WAV 音频(.wav) */
|
|
1652
|
+
WAV: "audio/wav",
|
|
1653
|
+
/** WebM 音频(.weba) */
|
|
1654
|
+
WEBM_AUDIO: "audio/webm",
|
|
1655
|
+
/** RealAudio 音频(.ra/.ram) */
|
|
1656
|
+
REAL_AUDIO: "audio/x-pn-realaudio",
|
|
1657
|
+
/** MP4 视频(.mp4) */
|
|
1658
|
+
MP4: "video/mp4",
|
|
1659
|
+
/** MPEG 视频(.mpeg/.mpg) */
|
|
1660
|
+
MPEG: "video/mpeg",
|
|
1661
|
+
/** OGG 视频(.ogv) */
|
|
1662
|
+
OGG_VIDEO: "video/ogg",
|
|
1663
|
+
/** AVI 视频(.avi) */
|
|
1664
|
+
AVI: "video/x-msvideo",
|
|
1665
|
+
/** 3GPP 视频(.3gp) */
|
|
1666
|
+
THREE_GPP: "video/3gpp",
|
|
1667
|
+
/** 3GPP2 视频(.3g2) */
|
|
1668
|
+
THREE_GPP2: "video/3gpp2",
|
|
1669
|
+
/** WebM 视频(.webm) */
|
|
1670
|
+
WEBM: "video/webm",
|
|
1671
|
+
/** Matroska 视频(.mkv) */
|
|
1672
|
+
MKV: "video/x-matroska",
|
|
1673
|
+
/** Matroska 音频(.mka) */
|
|
1674
|
+
MKA: "audio/x-matroska",
|
|
1675
|
+
/** QuickTime 视频(.mov) */
|
|
1676
|
+
QUICKTIME: "video/quicktime",
|
|
1677
|
+
/** PDF 文档(.pdf) */
|
|
1678
|
+
PDF: "application/pdf",
|
|
1679
|
+
/** Word 97-2003 文档(.doc) */
|
|
1680
|
+
DOC: "application/msword",
|
|
1681
|
+
/** Word 2007+ 文档(.docx) */
|
|
1682
|
+
DOCX: "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
|
|
1683
|
+
/** Excel 2007+ 工作簿(.xlsx) */
|
|
1684
|
+
XLSX: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
|
|
1685
|
+
/** 启用宏的Excel工作簿(.xlsm) */
|
|
1686
|
+
XLSM: "application/vnd.ms-excel.sheet.macroEnabled.12",
|
|
1687
|
+
/** Excel模板文件(.xltx) */
|
|
1688
|
+
XLTX: "application/vnd.openxmlformats-officedocument.spreadsheetml.template",
|
|
1689
|
+
/** PowerPoint 2007+ 演示文稿(.pptx) */
|
|
1690
|
+
PPTX: "application/vnd.openxmlformats-officedocument.presentationml.presentation",
|
|
1691
|
+
/** PowerPoint 97-2003 演示文稿(.ppt) */
|
|
1692
|
+
PPT: "application/vnd.ms-powerpoint",
|
|
1693
|
+
/** OpenDocument 文本文档(.odt) */
|
|
1694
|
+
ODT: "application/vnd.oasis.opendocument.text",
|
|
1695
|
+
/** OpenDocument 表格文档(.ods) */
|
|
1696
|
+
ODS: "application/vnd.oasis.opendocument.spreadsheet",
|
|
1697
|
+
/** OpenDocument 演示文稿(.odp) */
|
|
1698
|
+
ODP: "application/vnd.oasis.opendocument.presentation",
|
|
1699
|
+
/** EPUB 电子书(.epub) */
|
|
1700
|
+
EPUB: "application/epub+zip",
|
|
1701
|
+
/** Kindle 电子书(.azw) */
|
|
1702
|
+
AZW: "application/vnd.amazon.ebook",
|
|
1703
|
+
/** ZIP 压缩文件(.zip) */
|
|
1704
|
+
ZIP: "application/zip",
|
|
1705
|
+
/** GZIP 压缩文件(.gz) */
|
|
1706
|
+
GZIP: "application/gzip",
|
|
1707
|
+
/** TAR 归档文件(.tar) */
|
|
1708
|
+
TAR: "application/x-tar",
|
|
1709
|
+
/** BZip 归档(.bz) */
|
|
1710
|
+
BZIP: "application/x-bzip",
|
|
1711
|
+
/** BZip2 归档(.bz2) */
|
|
1712
|
+
BZIP2: "application/x-bzip2",
|
|
1713
|
+
/** 7-Zip 压缩文件(.7z) */
|
|
1714
|
+
SEVEN_Z: "application/x-7z-compressed",
|
|
1715
|
+
/** RAR 压缩文件(.rar) */
|
|
1716
|
+
RAR: "application/vnd.rar",
|
|
1717
|
+
/** XZ 压缩文件(.xz) */
|
|
1718
|
+
XZ: "application/x-xz",
|
|
1719
|
+
/** Zstandard 压缩文件(.zst) */
|
|
1720
|
+
ZSTD: "application/zstd",
|
|
1721
|
+
/** ISO 光盘镜像(.iso) */
|
|
1722
|
+
ISO9660_IMAGE: "application/x-iso9660-image",
|
|
1723
|
+
/** JSON 数据格式(.json) */
|
|
1724
|
+
JSON: "application/json",
|
|
1725
|
+
/** JSON-LD 格式(.jsonld) */
|
|
1726
|
+
LD_JSON: "application/ld+json",
|
|
1727
|
+
/** Web App Manifest(.webmanifest) */
|
|
1728
|
+
MANIFEST: "application/manifest+json",
|
|
1729
|
+
/** Java 归档文件(.jar) */
|
|
1730
|
+
JAR: "application/java-archive",
|
|
1731
|
+
/** WebAssembly 二进制指令格式(.wasm) */
|
|
1732
|
+
WASM: "application/wasm",
|
|
1733
|
+
/** MS 嵌入式 OpenType 字体(.eot) */
|
|
1734
|
+
EOT: "application/vnd.ms-fontobject",
|
|
1735
|
+
/** OpenType 字体(.otf) */
|
|
1736
|
+
OTF: "font/otf",
|
|
1737
|
+
/** WOFF 字体(.woff) */
|
|
1738
|
+
WOFF: "font/woff",
|
|
1739
|
+
/** WOFF2 字体(.woff2) */
|
|
1740
|
+
WOFF2: "font/woff2",
|
|
1741
|
+
/** TrueType 字体(.ttf) */
|
|
1742
|
+
TTF: "font/ttf",
|
|
1743
|
+
/** Excel 97-2003 工作簿(.xls) */
|
|
1744
|
+
XLS: "application/vnd.ms-excel",
|
|
1745
|
+
/** Microsoft XPS 文档(.xps) */
|
|
1746
|
+
XPS: "application/vnd.ms-xpsdocument",
|
|
1747
|
+
/** Word 启用宏文档(.docm) */
|
|
1748
|
+
DOCM: "application/vnd.ms-word.document.macroEnabled.12"
|
|
1749
|
+
};
|
|
1750
|
+
/**
|
|
1751
|
+
* 协议/内容类型 MIME 常量
|
|
1752
|
+
* - 用于 HTTP 请求/响应内容协商,无对应文件扩展名
|
|
1753
|
+
*/
|
|
1754
|
+
static PROTOCOL_MIME = {
|
|
1755
|
+
/** 通用二进制数据流 */
|
|
1756
|
+
OCTET_STREAM: "application/octet-stream",
|
|
1757
|
+
/** URL 编码表单 */
|
|
1758
|
+
FORM_URLENCODED: "application/x-www-form-urlencoded",
|
|
1759
|
+
/** multipart 表单 */
|
|
1760
|
+
FORM_DATA: "multipart/form-data",
|
|
1761
|
+
/** Server-Sent Events 数据流 */
|
|
1762
|
+
EVENT_STREAM: "text/event-stream",
|
|
1763
|
+
/** 问题详情 JSON(RFC 9457) */
|
|
1764
|
+
PROBLEM_JSON: "application/problem+json",
|
|
1765
|
+
/** JSON Patch(RFC 6902) */
|
|
1766
|
+
JSON_PATCH: "application/json-patch+json",
|
|
1767
|
+
/** JSON Merge Patch(RFC 7386) */
|
|
1768
|
+
MERGE_PATCH_JSON: "application/merge-patch+json"
|
|
1769
|
+
};
|
|
1770
|
+
/**
|
|
1771
|
+
* 根据文件后缀名获取对应的标准 MIME 类型(含历史兼容值)
|
|
1772
|
+
* - 支持带 `.` 或不带 `.` 的后缀名,不区分大小写
|
|
1773
|
+
* - 元组第一项始终为 IANA 官方标准 MIME,后续项为历史兼容值
|
|
1774
|
+
* - 仅查询文件类型 MIME,不包含无后缀对应的协议类型
|
|
1775
|
+
*
|
|
1776
|
+
* @param extension 文件后缀名(如 `".png"` / `"png"` / `".PNG"`)
|
|
1777
|
+
* @returns 标准 MIME + 兼容值的元组;如无匹配则返回 `undefined`
|
|
1778
|
+
* @example
|
|
1779
|
+
* ```ts
|
|
1780
|
+
* MimeUtil.fromExtension(".png"); // ["image/png"]
|
|
1781
|
+
* MimeUtil.fromExtension("ico"); // ["image/vnd.microsoft.icon", "image/x-icon"]
|
|
1782
|
+
* MimeUtil.fromExtension(".xml"); // ["application/xml", "text/xml"]
|
|
1783
|
+
* MimeUtil.fromExtension(".xyz"); // undefined
|
|
1784
|
+
* ```
|
|
1785
|
+
*/
|
|
1786
|
+
static fromExtension(extension) {
|
|
1787
|
+
const ext = StringUtil.cast(extension).toLowerCase();
|
|
1788
|
+
const key = ext.startsWith(".") ? ext : `.${ext}`;
|
|
1789
|
+
return EXT_TO_MIME[key];
|
|
1790
|
+
}
|
|
1791
|
+
/**
|
|
1792
|
+
* 根据 MIME 类型获取对应的文件后缀名列表
|
|
1793
|
+
* - 一个 MIME 类型可能对应多个后缀名(如 `text/html` → `.html` / `.htm`)
|
|
1794
|
+
* - 兼容值和标准值映射到相同的后缀(如 `image/x-icon` 和 `image/vnd.microsoft.icon` 均返回 `[".ico"]`)
|
|
1795
|
+
* - 仅查询文件类型 MIME,协议类型无对应后缀
|
|
1796
|
+
*
|
|
1797
|
+
* @param mime MIME 类型字符串(如 `"image/png"` / `"IMAGE/PNG"`)
|
|
1798
|
+
* @returns 文件后缀名列表;如无匹配则返回 `undefined`
|
|
1799
|
+
* @example
|
|
1800
|
+
* ```ts
|
|
1801
|
+
* MimeUtil.toExtension("IMAGE/PNG"); // [".png"]
|
|
1802
|
+
* MimeUtil.toExtension("text/html"); // [".html", ".htm"]
|
|
1803
|
+
* MimeUtil.toExtension("image/jpeg"); // [".jpg", ".jpeg"]
|
|
1804
|
+
* MimeUtil.toExtension("application/octet-stream"); // undefined
|
|
1805
|
+
* ```
|
|
1806
|
+
*/
|
|
1807
|
+
static toExtension(mime) {
|
|
1808
|
+
const m = StringUtil.cast(mime).toLowerCase();
|
|
1809
|
+
return MIME_TO_EXT.get(m);
|
|
1810
|
+
}
|
|
1811
|
+
};
|
|
1812
|
+
const EXT_TO_MIME = {
|
|
1813
|
+
".txt": [MimeUtil.FILE_MIME.TEXT],
|
|
1814
|
+
".html": [MimeUtil.FILE_MIME.HTML],
|
|
1815
|
+
".htm": [MimeUtil.FILE_MIME.HTML],
|
|
1816
|
+
".css": [MimeUtil.FILE_MIME.CSS],
|
|
1817
|
+
".csv": [MimeUtil.FILE_MIME.CSV],
|
|
1818
|
+
".tsv": [MimeUtil.FILE_MIME.TSV],
|
|
1819
|
+
".xml": [MimeUtil.FILE_MIME.XML, MimeUtil.FILE_MIME.XML_LEGACY],
|
|
1820
|
+
".xhtml": [MimeUtil.FILE_MIME.XHTML],
|
|
1821
|
+
".xht": [MimeUtil.FILE_MIME.XHTML],
|
|
1822
|
+
".js": [MimeUtil.FILE_MIME.JS],
|
|
1823
|
+
".ts": [MimeUtil.FILE_MIME.TS],
|
|
1824
|
+
".py": [MimeUtil.FILE_MIME.PY],
|
|
1825
|
+
".sh": [MimeUtil.FILE_MIME.SH],
|
|
1826
|
+
".c": [MimeUtil.FILE_MIME.C],
|
|
1827
|
+
".cpp": [MimeUtil.FILE_MIME.CPP],
|
|
1828
|
+
".cc": [MimeUtil.FILE_MIME.CPP],
|
|
1829
|
+
".cxx": [MimeUtil.FILE_MIME.CPP],
|
|
1830
|
+
".cs": [MimeUtil.FILE_MIME.CSHARP],
|
|
1831
|
+
".java": [MimeUtil.FILE_MIME.JAVA],
|
|
1832
|
+
".go": [MimeUtil.FILE_MIME.GO],
|
|
1833
|
+
".rs": [MimeUtil.FILE_MIME.RUST],
|
|
1834
|
+
".php": [MimeUtil.FILE_MIME.PHP],
|
|
1835
|
+
".rb": [MimeUtil.FILE_MIME.RUBY],
|
|
1836
|
+
".swift": [MimeUtil.FILE_MIME.SWIFT],
|
|
1837
|
+
".yaml": [MimeUtil.FILE_MIME.YAML, MimeUtil.FILE_MIME.YAML_LEGACY],
|
|
1838
|
+
".yml": [MimeUtil.FILE_MIME.YAML, MimeUtil.FILE_MIME.YAML_LEGACY],
|
|
1839
|
+
".toml": [MimeUtil.FILE_MIME.TOML, MimeUtil.FILE_MIME.TOML_LEGACY],
|
|
1840
|
+
".sql": [MimeUtil.FILE_MIME.SQL, MimeUtil.FILE_MIME.SQL_LEGACY],
|
|
1841
|
+
".md": [MimeUtil.FILE_MIME.MARKDOWN],
|
|
1842
|
+
".markdown": [MimeUtil.FILE_MIME.MARKDOWN],
|
|
1843
|
+
".rtf": [MimeUtil.FILE_MIME.RTF],
|
|
1844
|
+
".ics": [MimeUtil.FILE_MIME.CALENDAR],
|
|
1845
|
+
".jpg": [MimeUtil.FILE_MIME.JPEG],
|
|
1846
|
+
".jpeg": [MimeUtil.FILE_MIME.JPEG],
|
|
1847
|
+
".png": [MimeUtil.FILE_MIME.PNG],
|
|
1848
|
+
".gif": [MimeUtil.FILE_MIME.GIF],
|
|
1849
|
+
".bmp": [MimeUtil.FILE_MIME.BMP],
|
|
1850
|
+
".svg": [MimeUtil.FILE_MIME.SVG],
|
|
1851
|
+
".apng": [MimeUtil.FILE_MIME.APNG],
|
|
1852
|
+
".avif": [MimeUtil.FILE_MIME.AVIF],
|
|
1853
|
+
".ico": [MimeUtil.FILE_MIME.ICO, MimeUtil.FILE_MIME.ICO_LEGACY],
|
|
1854
|
+
".webp": [MimeUtil.FILE_MIME.WEBP],
|
|
1855
|
+
".tif": [MimeUtil.FILE_MIME.TIFF],
|
|
1856
|
+
".tiff": [MimeUtil.FILE_MIME.TIFF],
|
|
1857
|
+
".heic": [MimeUtil.FILE_MIME.HEIC],
|
|
1858
|
+
".heif": [MimeUtil.FILE_MIME.HEIF],
|
|
1859
|
+
".psd": [MimeUtil.FILE_MIME.PSD],
|
|
1860
|
+
".mp3": [MimeUtil.FILE_MIME.MP3],
|
|
1861
|
+
".aac": [MimeUtil.FILE_MIME.AAC],
|
|
1862
|
+
".mid": [MimeUtil.FILE_MIME.MIDI],
|
|
1863
|
+
".midi": [MimeUtil.FILE_MIME.MIDI],
|
|
1864
|
+
".oga": [MimeUtil.FILE_MIME.OGG_AUDIO],
|
|
1865
|
+
".opus": [MimeUtil.FILE_MIME.OPUS],
|
|
1866
|
+
".flac": [MimeUtil.FILE_MIME.FLAC],
|
|
1867
|
+
".wav": [MimeUtil.FILE_MIME.WAV],
|
|
1868
|
+
".weba": [MimeUtil.FILE_MIME.WEBM_AUDIO],
|
|
1869
|
+
".ra": [MimeUtil.FILE_MIME.REAL_AUDIO],
|
|
1870
|
+
".ram": [MimeUtil.FILE_MIME.REAL_AUDIO],
|
|
1871
|
+
".mp4": [MimeUtil.FILE_MIME.MP4],
|
|
1872
|
+
".mpeg": [MimeUtil.FILE_MIME.MPEG],
|
|
1873
|
+
".mpg": [MimeUtil.FILE_MIME.MPEG],
|
|
1874
|
+
".ogv": [MimeUtil.FILE_MIME.OGG_VIDEO],
|
|
1875
|
+
".avi": [MimeUtil.FILE_MIME.AVI],
|
|
1876
|
+
".3gp": [MimeUtil.FILE_MIME.THREE_GPP],
|
|
1877
|
+
".3g2": [MimeUtil.FILE_MIME.THREE_GPP2],
|
|
1878
|
+
".webm": [MimeUtil.FILE_MIME.WEBM],
|
|
1879
|
+
".mkv": [MimeUtil.FILE_MIME.MKV],
|
|
1880
|
+
".mka": [MimeUtil.FILE_MIME.MKA],
|
|
1881
|
+
".mov": [MimeUtil.FILE_MIME.QUICKTIME],
|
|
1882
|
+
".pdf": [MimeUtil.FILE_MIME.PDF],
|
|
1883
|
+
".doc": [MimeUtil.FILE_MIME.DOC],
|
|
1884
|
+
".docx": [MimeUtil.FILE_MIME.DOCX],
|
|
1885
|
+
".xlsx": [MimeUtil.FILE_MIME.XLSX],
|
|
1886
|
+
".xlsm": [MimeUtil.FILE_MIME.XLSM],
|
|
1887
|
+
".xltx": [MimeUtil.FILE_MIME.XLTX],
|
|
1888
|
+
".pptx": [MimeUtil.FILE_MIME.PPTX],
|
|
1889
|
+
".ppt": [MimeUtil.FILE_MIME.PPT],
|
|
1890
|
+
".odt": [MimeUtil.FILE_MIME.ODT],
|
|
1891
|
+
".ods": [MimeUtil.FILE_MIME.ODS],
|
|
1892
|
+
".odp": [MimeUtil.FILE_MIME.ODP],
|
|
1893
|
+
".epub": [MimeUtil.FILE_MIME.EPUB],
|
|
1894
|
+
".azw": [MimeUtil.FILE_MIME.AZW],
|
|
1895
|
+
".zip": [MimeUtil.FILE_MIME.ZIP],
|
|
1896
|
+
".gz": [MimeUtil.FILE_MIME.GZIP],
|
|
1897
|
+
".tar": [MimeUtil.FILE_MIME.TAR],
|
|
1898
|
+
".bz": [MimeUtil.FILE_MIME.BZIP],
|
|
1899
|
+
".bz2": [MimeUtil.FILE_MIME.BZIP2],
|
|
1900
|
+
".7z": [MimeUtil.FILE_MIME.SEVEN_Z],
|
|
1901
|
+
".rar": [MimeUtil.FILE_MIME.RAR],
|
|
1902
|
+
".xz": [MimeUtil.FILE_MIME.XZ],
|
|
1903
|
+
".zst": [MimeUtil.FILE_MIME.ZSTD],
|
|
1904
|
+
".iso": [MimeUtil.FILE_MIME.ISO9660_IMAGE],
|
|
1905
|
+
".json": [MimeUtil.FILE_MIME.JSON],
|
|
1906
|
+
".jsonld": [MimeUtil.FILE_MIME.LD_JSON],
|
|
1907
|
+
".webmanifest": [MimeUtil.FILE_MIME.MANIFEST],
|
|
1908
|
+
".jar": [MimeUtil.FILE_MIME.JAR],
|
|
1909
|
+
".wasm": [MimeUtil.FILE_MIME.WASM],
|
|
1910
|
+
".eot": [MimeUtil.FILE_MIME.EOT],
|
|
1911
|
+
".otf": [MimeUtil.FILE_MIME.OTF],
|
|
1912
|
+
".woff": [MimeUtil.FILE_MIME.WOFF],
|
|
1913
|
+
".woff2": [MimeUtil.FILE_MIME.WOFF2],
|
|
1914
|
+
".ttf": [MimeUtil.FILE_MIME.TTF],
|
|
1915
|
+
".xls": [MimeUtil.FILE_MIME.XLS],
|
|
1916
|
+
".xps": [MimeUtil.FILE_MIME.XPS],
|
|
1917
|
+
".docm": [MimeUtil.FILE_MIME.DOCM]
|
|
1918
|
+
};
|
|
1919
|
+
const MIME_TO_EXT = (() => {
|
|
1920
|
+
const map = /* @__PURE__ */ new Map();
|
|
1921
|
+
for (const [ext, mimes] of Object.entries(EXT_TO_MIME)) for (const mime of mimes) {
|
|
1922
|
+
const exts = map.get(mime);
|
|
1923
|
+
if (exts) {
|
|
1924
|
+
if (!exts.includes(ext)) exts.push(ext);
|
|
1925
|
+
} else map.set(mime, [ext]);
|
|
1926
|
+
}
|
|
1927
|
+
return map;
|
|
1928
|
+
})();
|
|
1929
|
+
/**
|
|
1541
1930
|
* 对象工具类
|
|
1542
1931
|
*/
|
|
1543
1932
|
var ObjectUtil = class {
|
|
@@ -694,57 +694,65 @@ declare class FunctionUtil {
|
|
|
694
694
|
*/
|
|
695
695
|
declare class MimeUtil {
|
|
696
696
|
/**
|
|
697
|
-
*
|
|
698
|
-
*
|
|
697
|
+
* 文件类型 MIME 常量
|
|
698
|
+
* - 每个类型对应具体的文件扩展名
|
|
699
699
|
*/
|
|
700
|
-
static readonly
|
|
701
|
-
/**
|
|
700
|
+
static readonly FILE_MIME: {
|
|
701
|
+
/** 普通文本文件(.txt) */
|
|
702
702
|
readonly TEXT: "text/plain";
|
|
703
|
-
/**
|
|
703
|
+
/** 超文本标记语言文档(.html/.htm) */
|
|
704
704
|
readonly HTML: "text/html";
|
|
705
|
-
/**
|
|
705
|
+
/** 层叠样式表文件(.css) */
|
|
706
706
|
readonly CSS: "text/css";
|
|
707
|
-
/**
|
|
707
|
+
/** 逗号分隔值文件/表格数据(.csv) */
|
|
708
708
|
readonly CSV: "text/csv";
|
|
709
|
-
/**
|
|
709
|
+
/** 制表符分隔值文件(.tsv) */
|
|
710
710
|
readonly TSV: "text/tab-separated-values";
|
|
711
|
-
/** XML
|
|
712
|
-
readonly XML: "
|
|
713
|
-
/**
|
|
711
|
+
/** XML 文档(.xml) */
|
|
712
|
+
readonly XML: "application/xml";
|
|
713
|
+
/** XML 文档/兼容值 */
|
|
714
|
+
readonly XML_LEGACY: "text/xml";
|
|
715
|
+
/** XHTML 文档(.xhtml/.xht) */
|
|
714
716
|
readonly XHTML: "application/xhtml+xml";
|
|
715
|
-
/** JavaScript
|
|
717
|
+
/** JavaScript 文件(.js) */
|
|
716
718
|
readonly JS: "text/javascript";
|
|
717
|
-
/** TypeScript
|
|
719
|
+
/** TypeScript 文件(.ts) */
|
|
718
720
|
readonly TS: "text/typescript";
|
|
719
|
-
/** Python
|
|
721
|
+
/** Python 文件(.py) */
|
|
720
722
|
readonly PY: "text/x-python";
|
|
721
723
|
/** Shell 脚本 (.sh) */
|
|
722
724
|
readonly SH: "text/x-sh";
|
|
723
|
-
/** C
|
|
725
|
+
/** C 语言源文件(.c) */
|
|
724
726
|
readonly C: "text/x-c";
|
|
725
|
-
/** C++
|
|
727
|
+
/** C++ 源文件(.cpp/.cc/.cxx) */
|
|
726
728
|
readonly CPP: "text/x-c++";
|
|
727
|
-
/** C#
|
|
729
|
+
/** C# 源文件(.cs) */
|
|
728
730
|
readonly CSHARP: "text/x-csharp";
|
|
729
|
-
/** Java
|
|
731
|
+
/** Java 源文件(.java) */
|
|
730
732
|
readonly JAVA: "text/x-java";
|
|
731
|
-
/** Go
|
|
733
|
+
/** Go 源文件(.go) */
|
|
732
734
|
readonly GO: "text/x-go";
|
|
733
|
-
/** Rust
|
|
735
|
+
/** Rust 源文件(.rs) */
|
|
734
736
|
readonly RUST: "text/x-rust";
|
|
735
|
-
/** PHP
|
|
737
|
+
/** PHP 文件(.php) */
|
|
736
738
|
readonly PHP: "text/x-php";
|
|
737
|
-
/** Ruby
|
|
739
|
+
/** Ruby 文件(.rb) */
|
|
738
740
|
readonly RUBY: "text/x-ruby";
|
|
739
|
-
/** Swift
|
|
741
|
+
/** Swift 源文件(.swift) */
|
|
740
742
|
readonly SWIFT: "text/x-swift";
|
|
741
|
-
/** YAML
|
|
742
|
-
readonly YAML: "
|
|
743
|
-
/**
|
|
744
|
-
readonly
|
|
745
|
-
/**
|
|
746
|
-
readonly
|
|
747
|
-
/**
|
|
743
|
+
/** YAML 文档(.yaml/.yml) */
|
|
744
|
+
readonly YAML: "application/yaml";
|
|
745
|
+
/** YAML 文档/兼容值 */
|
|
746
|
+
readonly YAML_LEGACY: "text/vnd.yaml";
|
|
747
|
+
/** TOML 文档(.toml) */
|
|
748
|
+
readonly TOML: "application/toml";
|
|
749
|
+
/** TOML 文档/兼容值 */
|
|
750
|
+
readonly TOML_LEGACY: "text/x-toml";
|
|
751
|
+
/** SQL 脚本(.sql) */
|
|
752
|
+
readonly SQL: "application/sql";
|
|
753
|
+
/** SQL 脚本/兼容值 */
|
|
754
|
+
readonly SQL_LEGACY: "text/x-sql";
|
|
755
|
+
/** Markdown 格式文档(.md/.markdown) */
|
|
748
756
|
readonly MARKDOWN: "text/markdown";
|
|
749
757
|
/** 富文本格式文档(.rtf) */
|
|
750
758
|
readonly RTF: "application/rtf";
|
|
@@ -752,9 +760,11 @@ declare class MimeUtil {
|
|
|
752
760
|
readonly CALENDAR: "text/calendar";
|
|
753
761
|
/** JPEG 图像(.jpg/.jpeg) */
|
|
754
762
|
readonly JPEG: "image/jpeg";
|
|
755
|
-
/**
|
|
763
|
+
/** JPG 图像(JPEG 别名,.jpg) */
|
|
764
|
+
readonly JPG: "image/jpeg";
|
|
765
|
+
/** PNG 图像/无损压缩,支持透明(.png) */
|
|
756
766
|
readonly PNG: "image/png";
|
|
757
|
-
/** GIF
|
|
767
|
+
/** GIF 图像/支持动画(.gif) */
|
|
758
768
|
readonly GIF: "image/gif";
|
|
759
769
|
/** Windows 位图(.bmp) */
|
|
760
770
|
readonly BMP: "image/bmp";
|
|
@@ -762,16 +772,20 @@ declare class MimeUtil {
|
|
|
762
772
|
readonly SVG: "image/svg+xml";
|
|
763
773
|
/** APNG 动态图像(.apng) */
|
|
764
774
|
readonly APNG: "image/apng";
|
|
765
|
-
/** AVIF
|
|
775
|
+
/** AVIF 图像/高效压缩(.avif) */
|
|
766
776
|
readonly AVIF: "image/avif";
|
|
767
777
|
/** 图标文件格式(.ico) */
|
|
768
778
|
readonly ICO: "image/vnd.microsoft.icon";
|
|
769
|
-
/**
|
|
779
|
+
/** 图标文件格式/兼容值(.ico) */
|
|
780
|
+
readonly ICO_LEGACY: "image/x-icon";
|
|
781
|
+
/** WebP 图像/高效压缩(.webp) */
|
|
770
782
|
readonly WEBP: "image/webp";
|
|
771
783
|
/** TIFF 图像(.tif/.tiff) */
|
|
772
784
|
readonly TIFF: "image/tiff";
|
|
773
|
-
/** HEIC
|
|
785
|
+
/** HEIC 图像/高效编码(.heic) */
|
|
774
786
|
readonly HEIC: "image/heic";
|
|
787
|
+
/** HEIF 图像/高效编码(.heif) */
|
|
788
|
+
readonly HEIF: "image/heif";
|
|
775
789
|
/** Adobe Photoshop 文件(.psd) */
|
|
776
790
|
readonly PSD: "image/vnd.adobe.photoshop";
|
|
777
791
|
/** MP3 音频(.mp3) */
|
|
@@ -784,8 +798,12 @@ declare class MimeUtil {
|
|
|
784
798
|
readonly OGG_AUDIO: "audio/ogg";
|
|
785
799
|
/** Opus 音频(.opus) */
|
|
786
800
|
readonly OPUS: "audio/opus";
|
|
801
|
+
/** FLAC 无损音频(.flac) */
|
|
802
|
+
readonly FLAC: "audio/flac";
|
|
787
803
|
/** WAV 音频(.wav) */
|
|
788
804
|
readonly WAV: "audio/wav";
|
|
805
|
+
/** WebM 音频(.weba) */
|
|
806
|
+
readonly WEBM_AUDIO: "audio/webm";
|
|
789
807
|
/** RealAudio 音频(.ra/.ram) */
|
|
790
808
|
readonly REAL_AUDIO: "audio/x-pn-realaudio";
|
|
791
809
|
/** MP4 视频(.mp4) */
|
|
@@ -802,7 +820,13 @@ declare class MimeUtil {
|
|
|
802
820
|
readonly THREE_GPP2: "video/3gpp2";
|
|
803
821
|
/** WebM 视频(.webm) */
|
|
804
822
|
readonly WEBM: "video/webm";
|
|
805
|
-
/**
|
|
823
|
+
/** Matroska 视频(.mkv) */
|
|
824
|
+
readonly MKV: "video/x-matroska";
|
|
825
|
+
/** Matroska 音频(.mka) */
|
|
826
|
+
readonly MKA: "audio/x-matroska";
|
|
827
|
+
/** QuickTime 视频(.mov) */
|
|
828
|
+
readonly QUICKTIME: "video/quicktime";
|
|
829
|
+
/** PDF 文档(.pdf) */
|
|
806
830
|
readonly PDF: "application/pdf";
|
|
807
831
|
/** Word 97-2003 文档(.doc) */
|
|
808
832
|
readonly DOC: "application/msword";
|
|
@@ -832,8 +856,6 @@ declare class MimeUtil {
|
|
|
832
856
|
readonly ZIP: "application/zip";
|
|
833
857
|
/** GZIP 压缩文件(.gz) */
|
|
834
858
|
readonly GZIP: "application/gzip";
|
|
835
|
-
/** GZIP 压缩文件(旧格式) */
|
|
836
|
-
readonly X_GZIP: "application/x-gzip";
|
|
837
859
|
/** TAR 归档文件(.tar) */
|
|
838
860
|
readonly TAR: "application/x-tar";
|
|
839
861
|
/** BZip 归档(.bz) */
|
|
@@ -844,12 +866,18 @@ declare class MimeUtil {
|
|
|
844
866
|
readonly SEVEN_Z: "application/x-7z-compressed";
|
|
845
867
|
/** RAR 压缩文件(.rar) */
|
|
846
868
|
readonly RAR: "application/vnd.rar";
|
|
847
|
-
/**
|
|
848
|
-
readonly
|
|
869
|
+
/** XZ 压缩文件(.xz) */
|
|
870
|
+
readonly XZ: "application/x-xz";
|
|
871
|
+
/** Zstandard 压缩文件(.zst) */
|
|
872
|
+
readonly ZSTD: "application/zstd";
|
|
873
|
+
/** ISO 光盘镜像(.iso) */
|
|
874
|
+
readonly ISO9660_IMAGE: "application/x-iso9660-image";
|
|
849
875
|
/** JSON 数据格式(.json) */
|
|
850
876
|
readonly JSON: "application/json";
|
|
851
877
|
/** JSON-LD 格式(.jsonld) */
|
|
852
878
|
readonly LD_JSON: "application/ld+json";
|
|
879
|
+
/** Web App Manifest(.webmanifest) */
|
|
880
|
+
readonly MANIFEST: "application/manifest+json";
|
|
853
881
|
/** Java 归档文件(.jar) */
|
|
854
882
|
readonly JAR: "application/java-archive";
|
|
855
883
|
/** WebAssembly 二进制指令格式(.wasm) */
|
|
@@ -871,6 +899,60 @@ declare class MimeUtil {
|
|
|
871
899
|
/** Word 启用宏文档(.docm) */
|
|
872
900
|
readonly DOCM: "application/vnd.ms-word.document.macroEnabled.12";
|
|
873
901
|
};
|
|
902
|
+
/**
|
|
903
|
+
* 协议/内容类型 MIME 常量
|
|
904
|
+
* - 用于 HTTP 请求/响应内容协商,无对应文件扩展名
|
|
905
|
+
*/
|
|
906
|
+
static readonly PROTOCOL_MIME: {
|
|
907
|
+
/** 通用二进制数据流 */
|
|
908
|
+
readonly OCTET_STREAM: "application/octet-stream";
|
|
909
|
+
/** URL 编码表单 */
|
|
910
|
+
readonly FORM_URLENCODED: "application/x-www-form-urlencoded";
|
|
911
|
+
/** multipart 表单 */
|
|
912
|
+
readonly FORM_DATA: "multipart/form-data";
|
|
913
|
+
/** Server-Sent Events 数据流 */
|
|
914
|
+
readonly EVENT_STREAM: "text/event-stream";
|
|
915
|
+
/** 问题详情 JSON(RFC 9457) */
|
|
916
|
+
readonly PROBLEM_JSON: "application/problem+json";
|
|
917
|
+
/** JSON Patch(RFC 6902) */
|
|
918
|
+
readonly JSON_PATCH: "application/json-patch+json";
|
|
919
|
+
/** JSON Merge Patch(RFC 7386) */
|
|
920
|
+
readonly MERGE_PATCH_JSON: "application/merge-patch+json";
|
|
921
|
+
};
|
|
922
|
+
/**
|
|
923
|
+
* 根据文件后缀名获取对应的标准 MIME 类型(含历史兼容值)
|
|
924
|
+
* - 支持带 `.` 或不带 `.` 的后缀名,不区分大小写
|
|
925
|
+
* - 元组第一项始终为 IANA 官方标准 MIME,后续项为历史兼容值
|
|
926
|
+
* - 仅查询文件类型 MIME,不包含无后缀对应的协议类型
|
|
927
|
+
*
|
|
928
|
+
* @param extension 文件后缀名(如 `".png"` / `"png"` / `".PNG"`)
|
|
929
|
+
* @returns 标准 MIME + 兼容值的元组;如无匹配则返回 `undefined`
|
|
930
|
+
* @example
|
|
931
|
+
* ```ts
|
|
932
|
+
* MimeUtil.fromExtension(".png"); // ["image/png"]
|
|
933
|
+
* MimeUtil.fromExtension("ico"); // ["image/vnd.microsoft.icon", "image/x-icon"]
|
|
934
|
+
* MimeUtil.fromExtension(".xml"); // ["application/xml", "text/xml"]
|
|
935
|
+
* MimeUtil.fromExtension(".xyz"); // undefined
|
|
936
|
+
* ```
|
|
937
|
+
*/
|
|
938
|
+
static fromExtension(extension: string): readonly [string, ...string[]] | undefined;
|
|
939
|
+
/**
|
|
940
|
+
* 根据 MIME 类型获取对应的文件后缀名列表
|
|
941
|
+
* - 一个 MIME 类型可能对应多个后缀名(如 `text/html` → `.html` / `.htm`)
|
|
942
|
+
* - 兼容值和标准值映射到相同的后缀(如 `image/x-icon` 和 `image/vnd.microsoft.icon` 均返回 `[".ico"]`)
|
|
943
|
+
* - 仅查询文件类型 MIME,协议类型无对应后缀
|
|
944
|
+
*
|
|
945
|
+
* @param mime MIME 类型字符串(如 `"image/png"` / `"IMAGE/PNG"`)
|
|
946
|
+
* @returns 文件后缀名列表;如无匹配则返回 `undefined`
|
|
947
|
+
* @example
|
|
948
|
+
* ```ts
|
|
949
|
+
* MimeUtil.toExtension("IMAGE/PNG"); // [".png"]
|
|
950
|
+
* MimeUtil.toExtension("text/html"); // [".html", ".htm"]
|
|
951
|
+
* MimeUtil.toExtension("image/jpeg"); // [".jpg", ".jpeg"]
|
|
952
|
+
* MimeUtil.toExtension("application/octet-stream"); // undefined
|
|
953
|
+
* ```
|
|
954
|
+
*/
|
|
955
|
+
static toExtension(mime: string): readonly [string, ...string[]] | undefined;
|
|
874
956
|
}
|
|
875
957
|
//#endregion
|
|
876
958
|
//#region src/number/numberUtil.d.ts
|
|
@@ -704,57 +704,65 @@ var FunctionUtil = class {
|
|
|
704
704
|
*/
|
|
705
705
|
var MimeUtil = class {
|
|
706
706
|
/**
|
|
707
|
-
*
|
|
708
|
-
*
|
|
707
|
+
* 文件类型 MIME 常量
|
|
708
|
+
* - 每个类型对应具体的文件扩展名
|
|
709
709
|
*/
|
|
710
|
-
static
|
|
711
|
-
/**
|
|
710
|
+
static FILE_MIME = {
|
|
711
|
+
/** 普通文本文件(.txt) */
|
|
712
712
|
TEXT: "text/plain",
|
|
713
|
-
/**
|
|
713
|
+
/** 超文本标记语言文档(.html/.htm) */
|
|
714
714
|
HTML: "text/html",
|
|
715
|
-
/**
|
|
715
|
+
/** 层叠样式表文件(.css) */
|
|
716
716
|
CSS: "text/css",
|
|
717
|
-
/**
|
|
717
|
+
/** 逗号分隔值文件/表格数据(.csv) */
|
|
718
718
|
CSV: "text/csv",
|
|
719
|
-
/**
|
|
719
|
+
/** 制表符分隔值文件(.tsv) */
|
|
720
720
|
TSV: "text/tab-separated-values",
|
|
721
|
-
/** XML
|
|
722
|
-
XML: "
|
|
723
|
-
/**
|
|
721
|
+
/** XML 文档(.xml) */
|
|
722
|
+
XML: "application/xml",
|
|
723
|
+
/** XML 文档/兼容值 */
|
|
724
|
+
XML_LEGACY: "text/xml",
|
|
725
|
+
/** XHTML 文档(.xhtml/.xht) */
|
|
724
726
|
XHTML: "application/xhtml+xml",
|
|
725
|
-
/** JavaScript
|
|
727
|
+
/** JavaScript 文件(.js) */
|
|
726
728
|
JS: "text/javascript",
|
|
727
|
-
/** TypeScript
|
|
729
|
+
/** TypeScript 文件(.ts) */
|
|
728
730
|
TS: "text/typescript",
|
|
729
|
-
/** Python
|
|
731
|
+
/** Python 文件(.py) */
|
|
730
732
|
PY: "text/x-python",
|
|
731
733
|
/** Shell 脚本 (.sh) */
|
|
732
734
|
SH: "text/x-sh",
|
|
733
|
-
/** C
|
|
735
|
+
/** C 语言源文件(.c) */
|
|
734
736
|
C: "text/x-c",
|
|
735
|
-
/** C++
|
|
737
|
+
/** C++ 源文件(.cpp/.cc/.cxx) */
|
|
736
738
|
CPP: "text/x-c++",
|
|
737
|
-
/** C#
|
|
739
|
+
/** C# 源文件(.cs) */
|
|
738
740
|
CSHARP: "text/x-csharp",
|
|
739
|
-
/** Java
|
|
741
|
+
/** Java 源文件(.java) */
|
|
740
742
|
JAVA: "text/x-java",
|
|
741
|
-
/** Go
|
|
743
|
+
/** Go 源文件(.go) */
|
|
742
744
|
GO: "text/x-go",
|
|
743
|
-
/** Rust
|
|
745
|
+
/** Rust 源文件(.rs) */
|
|
744
746
|
RUST: "text/x-rust",
|
|
745
|
-
/** PHP
|
|
747
|
+
/** PHP 文件(.php) */
|
|
746
748
|
PHP: "text/x-php",
|
|
747
|
-
/** Ruby
|
|
749
|
+
/** Ruby 文件(.rb) */
|
|
748
750
|
RUBY: "text/x-ruby",
|
|
749
|
-
/** Swift
|
|
751
|
+
/** Swift 源文件(.swift) */
|
|
750
752
|
SWIFT: "text/x-swift",
|
|
751
|
-
/** YAML
|
|
752
|
-
YAML: "
|
|
753
|
-
/**
|
|
754
|
-
|
|
755
|
-
/**
|
|
756
|
-
|
|
757
|
-
/**
|
|
753
|
+
/** YAML 文档(.yaml/.yml) */
|
|
754
|
+
YAML: "application/yaml",
|
|
755
|
+
/** YAML 文档/兼容值 */
|
|
756
|
+
YAML_LEGACY: "text/vnd.yaml",
|
|
757
|
+
/** TOML 文档(.toml) */
|
|
758
|
+
TOML: "application/toml",
|
|
759
|
+
/** TOML 文档/兼容值 */
|
|
760
|
+
TOML_LEGACY: "text/x-toml",
|
|
761
|
+
/** SQL 脚本(.sql) */
|
|
762
|
+
SQL: "application/sql",
|
|
763
|
+
/** SQL 脚本/兼容值 */
|
|
764
|
+
SQL_LEGACY: "text/x-sql",
|
|
765
|
+
/** Markdown 格式文档(.md/.markdown) */
|
|
758
766
|
MARKDOWN: "text/markdown",
|
|
759
767
|
/** 富文本格式文档(.rtf) */
|
|
760
768
|
RTF: "application/rtf",
|
|
@@ -762,9 +770,11 @@ var MimeUtil = class {
|
|
|
762
770
|
CALENDAR: "text/calendar",
|
|
763
771
|
/** JPEG 图像(.jpg/.jpeg) */
|
|
764
772
|
JPEG: "image/jpeg",
|
|
765
|
-
/**
|
|
773
|
+
/** JPG 图像(JPEG 别名,.jpg) */
|
|
774
|
+
JPG: "image/jpeg",
|
|
775
|
+
/** PNG 图像/无损压缩,支持透明(.png) */
|
|
766
776
|
PNG: "image/png",
|
|
767
|
-
/** GIF
|
|
777
|
+
/** GIF 图像/支持动画(.gif) */
|
|
768
778
|
GIF: "image/gif",
|
|
769
779
|
/** Windows 位图(.bmp) */
|
|
770
780
|
BMP: "image/bmp",
|
|
@@ -772,16 +782,20 @@ var MimeUtil = class {
|
|
|
772
782
|
SVG: "image/svg+xml",
|
|
773
783
|
/** APNG 动态图像(.apng) */
|
|
774
784
|
APNG: "image/apng",
|
|
775
|
-
/** AVIF
|
|
785
|
+
/** AVIF 图像/高效压缩(.avif) */
|
|
776
786
|
AVIF: "image/avif",
|
|
777
787
|
/** 图标文件格式(.ico) */
|
|
778
788
|
ICO: "image/vnd.microsoft.icon",
|
|
779
|
-
/**
|
|
789
|
+
/** 图标文件格式/兼容值(.ico) */
|
|
790
|
+
ICO_LEGACY: "image/x-icon",
|
|
791
|
+
/** WebP 图像/高效压缩(.webp) */
|
|
780
792
|
WEBP: "image/webp",
|
|
781
793
|
/** TIFF 图像(.tif/.tiff) */
|
|
782
794
|
TIFF: "image/tiff",
|
|
783
|
-
/** HEIC
|
|
795
|
+
/** HEIC 图像/高效编码(.heic) */
|
|
784
796
|
HEIC: "image/heic",
|
|
797
|
+
/** HEIF 图像/高效编码(.heif) */
|
|
798
|
+
HEIF: "image/heif",
|
|
785
799
|
/** Adobe Photoshop 文件(.psd) */
|
|
786
800
|
PSD: "image/vnd.adobe.photoshop",
|
|
787
801
|
/** MP3 音频(.mp3) */
|
|
@@ -794,8 +808,12 @@ var MimeUtil = class {
|
|
|
794
808
|
OGG_AUDIO: "audio/ogg",
|
|
795
809
|
/** Opus 音频(.opus) */
|
|
796
810
|
OPUS: "audio/opus",
|
|
811
|
+
/** FLAC 无损音频(.flac) */
|
|
812
|
+
FLAC: "audio/flac",
|
|
797
813
|
/** WAV 音频(.wav) */
|
|
798
814
|
WAV: "audio/wav",
|
|
815
|
+
/** WebM 音频(.weba) */
|
|
816
|
+
WEBM_AUDIO: "audio/webm",
|
|
799
817
|
/** RealAudio 音频(.ra/.ram) */
|
|
800
818
|
REAL_AUDIO: "audio/x-pn-realaudio",
|
|
801
819
|
/** MP4 视频(.mp4) */
|
|
@@ -812,7 +830,13 @@ var MimeUtil = class {
|
|
|
812
830
|
THREE_GPP2: "video/3gpp2",
|
|
813
831
|
/** WebM 视频(.webm) */
|
|
814
832
|
WEBM: "video/webm",
|
|
815
|
-
/**
|
|
833
|
+
/** Matroska 视频(.mkv) */
|
|
834
|
+
MKV: "video/x-matroska",
|
|
835
|
+
/** Matroska 音频(.mka) */
|
|
836
|
+
MKA: "audio/x-matroska",
|
|
837
|
+
/** QuickTime 视频(.mov) */
|
|
838
|
+
QUICKTIME: "video/quicktime",
|
|
839
|
+
/** PDF 文档(.pdf) */
|
|
816
840
|
PDF: "application/pdf",
|
|
817
841
|
/** Word 97-2003 文档(.doc) */
|
|
818
842
|
DOC: "application/msword",
|
|
@@ -842,8 +866,6 @@ var MimeUtil = class {
|
|
|
842
866
|
ZIP: "application/zip",
|
|
843
867
|
/** GZIP 压缩文件(.gz) */
|
|
844
868
|
GZIP: "application/gzip",
|
|
845
|
-
/** GZIP 压缩文件(旧格式) */
|
|
846
|
-
X_GZIP: "application/x-gzip",
|
|
847
869
|
/** TAR 归档文件(.tar) */
|
|
848
870
|
TAR: "application/x-tar",
|
|
849
871
|
/** BZip 归档(.bz) */
|
|
@@ -854,12 +876,18 @@ var MimeUtil = class {
|
|
|
854
876
|
SEVEN_Z: "application/x-7z-compressed",
|
|
855
877
|
/** RAR 压缩文件(.rar) */
|
|
856
878
|
RAR: "application/vnd.rar",
|
|
857
|
-
/**
|
|
858
|
-
|
|
879
|
+
/** XZ 压缩文件(.xz) */
|
|
880
|
+
XZ: "application/x-xz",
|
|
881
|
+
/** Zstandard 压缩文件(.zst) */
|
|
882
|
+
ZSTD: "application/zstd",
|
|
883
|
+
/** ISO 光盘镜像(.iso) */
|
|
884
|
+
ISO9660_IMAGE: "application/x-iso9660-image",
|
|
859
885
|
/** JSON 数据格式(.json) */
|
|
860
886
|
JSON: "application/json",
|
|
861
887
|
/** JSON-LD 格式(.jsonld) */
|
|
862
888
|
LD_JSON: "application/ld+json",
|
|
889
|
+
/** Web App Manifest(.webmanifest) */
|
|
890
|
+
MANIFEST: "application/manifest+json",
|
|
863
891
|
/** Java 归档文件(.jar) */
|
|
864
892
|
JAR: "application/java-archive",
|
|
865
893
|
/** WebAssembly 二进制指令格式(.wasm) */
|
|
@@ -881,7 +909,185 @@ var MimeUtil = class {
|
|
|
881
909
|
/** Word 启用宏文档(.docm) */
|
|
882
910
|
DOCM: "application/vnd.ms-word.document.macroEnabled.12"
|
|
883
911
|
};
|
|
912
|
+
/**
|
|
913
|
+
* 协议/内容类型 MIME 常量
|
|
914
|
+
* - 用于 HTTP 请求/响应内容协商,无对应文件扩展名
|
|
915
|
+
*/
|
|
916
|
+
static PROTOCOL_MIME = {
|
|
917
|
+
/** 通用二进制数据流 */
|
|
918
|
+
OCTET_STREAM: "application/octet-stream",
|
|
919
|
+
/** URL 编码表单 */
|
|
920
|
+
FORM_URLENCODED: "application/x-www-form-urlencoded",
|
|
921
|
+
/** multipart 表单 */
|
|
922
|
+
FORM_DATA: "multipart/form-data",
|
|
923
|
+
/** Server-Sent Events 数据流 */
|
|
924
|
+
EVENT_STREAM: "text/event-stream",
|
|
925
|
+
/** 问题详情 JSON(RFC 9457) */
|
|
926
|
+
PROBLEM_JSON: "application/problem+json",
|
|
927
|
+
/** JSON Patch(RFC 6902) */
|
|
928
|
+
JSON_PATCH: "application/json-patch+json",
|
|
929
|
+
/** JSON Merge Patch(RFC 7386) */
|
|
930
|
+
MERGE_PATCH_JSON: "application/merge-patch+json"
|
|
931
|
+
};
|
|
932
|
+
/**
|
|
933
|
+
* 根据文件后缀名获取对应的标准 MIME 类型(含历史兼容值)
|
|
934
|
+
* - 支持带 `.` 或不带 `.` 的后缀名,不区分大小写
|
|
935
|
+
* - 元组第一项始终为 IANA 官方标准 MIME,后续项为历史兼容值
|
|
936
|
+
* - 仅查询文件类型 MIME,不包含无后缀对应的协议类型
|
|
937
|
+
*
|
|
938
|
+
* @param extension 文件后缀名(如 `".png"` / `"png"` / `".PNG"`)
|
|
939
|
+
* @returns 标准 MIME + 兼容值的元组;如无匹配则返回 `undefined`
|
|
940
|
+
* @example
|
|
941
|
+
* ```ts
|
|
942
|
+
* MimeUtil.fromExtension(".png"); // ["image/png"]
|
|
943
|
+
* MimeUtil.fromExtension("ico"); // ["image/vnd.microsoft.icon", "image/x-icon"]
|
|
944
|
+
* MimeUtil.fromExtension(".xml"); // ["application/xml", "text/xml"]
|
|
945
|
+
* MimeUtil.fromExtension(".xyz"); // undefined
|
|
946
|
+
* ```
|
|
947
|
+
*/
|
|
948
|
+
static fromExtension(extension) {
|
|
949
|
+
const ext = StringUtil.cast(extension).toLowerCase();
|
|
950
|
+
const key = ext.startsWith(".") ? ext : `.${ext}`;
|
|
951
|
+
return EXT_TO_MIME[key];
|
|
952
|
+
}
|
|
953
|
+
/**
|
|
954
|
+
* 根据 MIME 类型获取对应的文件后缀名列表
|
|
955
|
+
* - 一个 MIME 类型可能对应多个后缀名(如 `text/html` → `.html` / `.htm`)
|
|
956
|
+
* - 兼容值和标准值映射到相同的后缀(如 `image/x-icon` 和 `image/vnd.microsoft.icon` 均返回 `[".ico"]`)
|
|
957
|
+
* - 仅查询文件类型 MIME,协议类型无对应后缀
|
|
958
|
+
*
|
|
959
|
+
* @param mime MIME 类型字符串(如 `"image/png"` / `"IMAGE/PNG"`)
|
|
960
|
+
* @returns 文件后缀名列表;如无匹配则返回 `undefined`
|
|
961
|
+
* @example
|
|
962
|
+
* ```ts
|
|
963
|
+
* MimeUtil.toExtension("IMAGE/PNG"); // [".png"]
|
|
964
|
+
* MimeUtil.toExtension("text/html"); // [".html", ".htm"]
|
|
965
|
+
* MimeUtil.toExtension("image/jpeg"); // [".jpg", ".jpeg"]
|
|
966
|
+
* MimeUtil.toExtension("application/octet-stream"); // undefined
|
|
967
|
+
* ```
|
|
968
|
+
*/
|
|
969
|
+
static toExtension(mime) {
|
|
970
|
+
const m = StringUtil.cast(mime).toLowerCase();
|
|
971
|
+
return MIME_TO_EXT.get(m);
|
|
972
|
+
}
|
|
973
|
+
};
|
|
974
|
+
const EXT_TO_MIME = {
|
|
975
|
+
".txt": [MimeUtil.FILE_MIME.TEXT],
|
|
976
|
+
".html": [MimeUtil.FILE_MIME.HTML],
|
|
977
|
+
".htm": [MimeUtil.FILE_MIME.HTML],
|
|
978
|
+
".css": [MimeUtil.FILE_MIME.CSS],
|
|
979
|
+
".csv": [MimeUtil.FILE_MIME.CSV],
|
|
980
|
+
".tsv": [MimeUtil.FILE_MIME.TSV],
|
|
981
|
+
".xml": [MimeUtil.FILE_MIME.XML, MimeUtil.FILE_MIME.XML_LEGACY],
|
|
982
|
+
".xhtml": [MimeUtil.FILE_MIME.XHTML],
|
|
983
|
+
".xht": [MimeUtil.FILE_MIME.XHTML],
|
|
984
|
+
".js": [MimeUtil.FILE_MIME.JS],
|
|
985
|
+
".ts": [MimeUtil.FILE_MIME.TS],
|
|
986
|
+
".py": [MimeUtil.FILE_MIME.PY],
|
|
987
|
+
".sh": [MimeUtil.FILE_MIME.SH],
|
|
988
|
+
".c": [MimeUtil.FILE_MIME.C],
|
|
989
|
+
".cpp": [MimeUtil.FILE_MIME.CPP],
|
|
990
|
+
".cc": [MimeUtil.FILE_MIME.CPP],
|
|
991
|
+
".cxx": [MimeUtil.FILE_MIME.CPP],
|
|
992
|
+
".cs": [MimeUtil.FILE_MIME.CSHARP],
|
|
993
|
+
".java": [MimeUtil.FILE_MIME.JAVA],
|
|
994
|
+
".go": [MimeUtil.FILE_MIME.GO],
|
|
995
|
+
".rs": [MimeUtil.FILE_MIME.RUST],
|
|
996
|
+
".php": [MimeUtil.FILE_MIME.PHP],
|
|
997
|
+
".rb": [MimeUtil.FILE_MIME.RUBY],
|
|
998
|
+
".swift": [MimeUtil.FILE_MIME.SWIFT],
|
|
999
|
+
".yaml": [MimeUtil.FILE_MIME.YAML, MimeUtil.FILE_MIME.YAML_LEGACY],
|
|
1000
|
+
".yml": [MimeUtil.FILE_MIME.YAML, MimeUtil.FILE_MIME.YAML_LEGACY],
|
|
1001
|
+
".toml": [MimeUtil.FILE_MIME.TOML, MimeUtil.FILE_MIME.TOML_LEGACY],
|
|
1002
|
+
".sql": [MimeUtil.FILE_MIME.SQL, MimeUtil.FILE_MIME.SQL_LEGACY],
|
|
1003
|
+
".md": [MimeUtil.FILE_MIME.MARKDOWN],
|
|
1004
|
+
".markdown": [MimeUtil.FILE_MIME.MARKDOWN],
|
|
1005
|
+
".rtf": [MimeUtil.FILE_MIME.RTF],
|
|
1006
|
+
".ics": [MimeUtil.FILE_MIME.CALENDAR],
|
|
1007
|
+
".jpg": [MimeUtil.FILE_MIME.JPEG],
|
|
1008
|
+
".jpeg": [MimeUtil.FILE_MIME.JPEG],
|
|
1009
|
+
".png": [MimeUtil.FILE_MIME.PNG],
|
|
1010
|
+
".gif": [MimeUtil.FILE_MIME.GIF],
|
|
1011
|
+
".bmp": [MimeUtil.FILE_MIME.BMP],
|
|
1012
|
+
".svg": [MimeUtil.FILE_MIME.SVG],
|
|
1013
|
+
".apng": [MimeUtil.FILE_MIME.APNG],
|
|
1014
|
+
".avif": [MimeUtil.FILE_MIME.AVIF],
|
|
1015
|
+
".ico": [MimeUtil.FILE_MIME.ICO, MimeUtil.FILE_MIME.ICO_LEGACY],
|
|
1016
|
+
".webp": [MimeUtil.FILE_MIME.WEBP],
|
|
1017
|
+
".tif": [MimeUtil.FILE_MIME.TIFF],
|
|
1018
|
+
".tiff": [MimeUtil.FILE_MIME.TIFF],
|
|
1019
|
+
".heic": [MimeUtil.FILE_MIME.HEIC],
|
|
1020
|
+
".heif": [MimeUtil.FILE_MIME.HEIF],
|
|
1021
|
+
".psd": [MimeUtil.FILE_MIME.PSD],
|
|
1022
|
+
".mp3": [MimeUtil.FILE_MIME.MP3],
|
|
1023
|
+
".aac": [MimeUtil.FILE_MIME.AAC],
|
|
1024
|
+
".mid": [MimeUtil.FILE_MIME.MIDI],
|
|
1025
|
+
".midi": [MimeUtil.FILE_MIME.MIDI],
|
|
1026
|
+
".oga": [MimeUtil.FILE_MIME.OGG_AUDIO],
|
|
1027
|
+
".opus": [MimeUtil.FILE_MIME.OPUS],
|
|
1028
|
+
".flac": [MimeUtil.FILE_MIME.FLAC],
|
|
1029
|
+
".wav": [MimeUtil.FILE_MIME.WAV],
|
|
1030
|
+
".weba": [MimeUtil.FILE_MIME.WEBM_AUDIO],
|
|
1031
|
+
".ra": [MimeUtil.FILE_MIME.REAL_AUDIO],
|
|
1032
|
+
".ram": [MimeUtil.FILE_MIME.REAL_AUDIO],
|
|
1033
|
+
".mp4": [MimeUtil.FILE_MIME.MP4],
|
|
1034
|
+
".mpeg": [MimeUtil.FILE_MIME.MPEG],
|
|
1035
|
+
".mpg": [MimeUtil.FILE_MIME.MPEG],
|
|
1036
|
+
".ogv": [MimeUtil.FILE_MIME.OGG_VIDEO],
|
|
1037
|
+
".avi": [MimeUtil.FILE_MIME.AVI],
|
|
1038
|
+
".3gp": [MimeUtil.FILE_MIME.THREE_GPP],
|
|
1039
|
+
".3g2": [MimeUtil.FILE_MIME.THREE_GPP2],
|
|
1040
|
+
".webm": [MimeUtil.FILE_MIME.WEBM],
|
|
1041
|
+
".mkv": [MimeUtil.FILE_MIME.MKV],
|
|
1042
|
+
".mka": [MimeUtil.FILE_MIME.MKA],
|
|
1043
|
+
".mov": [MimeUtil.FILE_MIME.QUICKTIME],
|
|
1044
|
+
".pdf": [MimeUtil.FILE_MIME.PDF],
|
|
1045
|
+
".doc": [MimeUtil.FILE_MIME.DOC],
|
|
1046
|
+
".docx": [MimeUtil.FILE_MIME.DOCX],
|
|
1047
|
+
".xlsx": [MimeUtil.FILE_MIME.XLSX],
|
|
1048
|
+
".xlsm": [MimeUtil.FILE_MIME.XLSM],
|
|
1049
|
+
".xltx": [MimeUtil.FILE_MIME.XLTX],
|
|
1050
|
+
".pptx": [MimeUtil.FILE_MIME.PPTX],
|
|
1051
|
+
".ppt": [MimeUtil.FILE_MIME.PPT],
|
|
1052
|
+
".odt": [MimeUtil.FILE_MIME.ODT],
|
|
1053
|
+
".ods": [MimeUtil.FILE_MIME.ODS],
|
|
1054
|
+
".odp": [MimeUtil.FILE_MIME.ODP],
|
|
1055
|
+
".epub": [MimeUtil.FILE_MIME.EPUB],
|
|
1056
|
+
".azw": [MimeUtil.FILE_MIME.AZW],
|
|
1057
|
+
".zip": [MimeUtil.FILE_MIME.ZIP],
|
|
1058
|
+
".gz": [MimeUtil.FILE_MIME.GZIP],
|
|
1059
|
+
".tar": [MimeUtil.FILE_MIME.TAR],
|
|
1060
|
+
".bz": [MimeUtil.FILE_MIME.BZIP],
|
|
1061
|
+
".bz2": [MimeUtil.FILE_MIME.BZIP2],
|
|
1062
|
+
".7z": [MimeUtil.FILE_MIME.SEVEN_Z],
|
|
1063
|
+
".rar": [MimeUtil.FILE_MIME.RAR],
|
|
1064
|
+
".xz": [MimeUtil.FILE_MIME.XZ],
|
|
1065
|
+
".zst": [MimeUtil.FILE_MIME.ZSTD],
|
|
1066
|
+
".iso": [MimeUtil.FILE_MIME.ISO9660_IMAGE],
|
|
1067
|
+
".json": [MimeUtil.FILE_MIME.JSON],
|
|
1068
|
+
".jsonld": [MimeUtil.FILE_MIME.LD_JSON],
|
|
1069
|
+
".webmanifest": [MimeUtil.FILE_MIME.MANIFEST],
|
|
1070
|
+
".jar": [MimeUtil.FILE_MIME.JAR],
|
|
1071
|
+
".wasm": [MimeUtil.FILE_MIME.WASM],
|
|
1072
|
+
".eot": [MimeUtil.FILE_MIME.EOT],
|
|
1073
|
+
".otf": [MimeUtil.FILE_MIME.OTF],
|
|
1074
|
+
".woff": [MimeUtil.FILE_MIME.WOFF],
|
|
1075
|
+
".woff2": [MimeUtil.FILE_MIME.WOFF2],
|
|
1076
|
+
".ttf": [MimeUtil.FILE_MIME.TTF],
|
|
1077
|
+
".xls": [MimeUtil.FILE_MIME.XLS],
|
|
1078
|
+
".xps": [MimeUtil.FILE_MIME.XPS],
|
|
1079
|
+
".docm": [MimeUtil.FILE_MIME.DOCM]
|
|
884
1080
|
};
|
|
1081
|
+
const MIME_TO_EXT = (() => {
|
|
1082
|
+
const map = /* @__PURE__ */ new Map();
|
|
1083
|
+
for (const [ext, mimes] of Object.entries(EXT_TO_MIME)) for (const mime of mimes) {
|
|
1084
|
+
const exts = map.get(mime);
|
|
1085
|
+
if (exts) {
|
|
1086
|
+
if (!exts.includes(ext)) exts.push(ext);
|
|
1087
|
+
} else map.set(mime, [ext]);
|
|
1088
|
+
}
|
|
1089
|
+
return map;
|
|
1090
|
+
})();
|
|
885
1091
|
//#endregion
|
|
886
1092
|
//#region src/number/numberUtil.ts
|
|
887
1093
|
/**
|