gs-data 0.1.10 → 0.1.12
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.cn.md +5 -5
- package/README.md +5 -5
- package/lib/index.cjs +494 -1
- package/lib/index.js +522 -1
- package/lib/index.web.js +637 -1
- package/package.json +4 -4
package/README.cn.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
#
|
|
1
|
+
# gs-data
|
|
2
2
|
### 中文 | [English](README.md)
|
|
3
3
|
> 在浏览器端读写网络或文件数据的基础性类库<br/>
|
|
4
|
-
> 如果用于本地文件读写,基于本类库的[
|
|
5
|
-
> 如果用于网络读取与下载,基于本类库的[
|
|
4
|
+
> 如果用于本地文件读写,基于本类库的[gs-web-fs](https://www.npmjs.com/package/gs-web-fs)更方便使用<br/>
|
|
5
|
+
> 如果用于网络读取与下载,基于本类库的[gs-fetch](https://www.npmjs.com/package/gs-fetch)更方便使用
|
|
6
6
|
>> 主要包含通过文件内容自动类型分析与扩展名分析
|
|
7
7
|
|
|
8
8
|
> 自动根据内容读取浏览器端常用数据类型
|
|
@@ -13,12 +13,12 @@
|
|
|
13
13
|
|
|
14
14
|
## 安装
|
|
15
15
|
```shell
|
|
16
|
-
npx yarn add
|
|
16
|
+
npx yarn add gs-data
|
|
17
17
|
```
|
|
18
18
|
## 使用
|
|
19
19
|
### 自动判断数据类型 与 数据读取
|
|
20
20
|
```ts
|
|
21
|
-
import {parseMime,getExtensionMime,readBlob} from 'https://cdn.jsdmirror.cn/npm/
|
|
21
|
+
import {parseMime,getExtensionMime,readBlob} from 'https://cdn.jsdmirror.cn/npm/gs-data/lib/index.web.js'
|
|
22
22
|
|
|
23
23
|
const blob = await fetch('https://emoji.bj.bcebos.com/yige-aigc/index_aigc/final/toolspics/15.png').then(r=>r.blob());
|
|
24
24
|
|
package/README.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
#
|
|
1
|
+
# gs-data
|
|
2
2
|
### English | [中文](README.cn.md)
|
|
3
3
|
> A foundational library for reading and writing network or file data on the browser side<br/>
|
|
4
|
-
> For local file read/write operations, [
|
|
5
|
-
> For network data reading and downloading, [
|
|
4
|
+
> For local file read/write operations, [gs-web-fs](https://www.npmjs.com/package/gs-web-fs), built on top of this library, offers enhanced ease of use<br/>
|
|
5
|
+
> For network data reading and downloading, [gs-fetch](https://www.npmjs.com/package/gs-fetch), also based on this library, provides a more convenient solution
|
|
6
6
|
>> The main features include automatic type detection by file content and file extension analysis.
|
|
7
7
|
|
|
8
8
|
> Automatically reads common browser-side data types based on content
|
|
@@ -13,13 +13,13 @@
|
|
|
13
13
|
|
|
14
14
|
## Installation
|
|
15
15
|
```shell
|
|
16
|
-
npx yarn add
|
|
16
|
+
npx yarn add gs-data
|
|
17
17
|
```
|
|
18
18
|
|
|
19
19
|
## Usage
|
|
20
20
|
### Auto-detecting Data Types and Reading Data
|
|
21
21
|
```ts
|
|
22
|
-
import {parseMime,getExtensionMime,readBlob} from 'https://cdn.jsdmirror.cn/npm/
|
|
22
|
+
import {parseMime,getExtensionMime,readBlob} from 'https://cdn.jsdmirror.cn/npm/gs-data/lib/index.web.js'
|
|
23
23
|
|
|
24
24
|
const blob = await fetch('https://emoji.bj.bcebos.com/yige-aigc/index_aigc/final/toolspics/15.png').then(r => r.blob());
|
|
25
25
|
|
package/lib/index.cjs
CHANGED
|
@@ -1 +1,494 @@
|
|
|
1
|
-
"use strict";var e,t,a,i=require("gs-base"),o=require("js-base64");let n;exports.FileMimeTypes=void 0,(a=exports.FileMimeTypes||(exports.FileMimeTypes={})).TextPlain="text/plain",a.TextUTF8="text/plain;charset=UTF-8",a.TextUTF16BE="text/plain;charset=UTF-16BE",a.TextUTF16LE="text/plain;charset=UTF-16LE",a.HTML="text/html",a.CSS="text/css",a.JavaScript="text/javascript",a.XML="text/xml",a.JSON="application/json",a.CSV="text/csv",a.Markdown="text/markdown",a.LaTeX="application/x-latex",a.TSV="text/tab-separated-values",a.Bat="text/x-sh",a.SimpleData="text/x-simpledata",a.JPEG="image/jpeg",a.PNG="image/png",a.GIF="image/gif",a.SVG="image/svg+xml",a.WebP="image/webp",a.BMP="image/bmp",a.TIFF="image/tiff",a.HEIF="image/heif",a.HEIC="image/heic",a.ICO="image/x-icon",a.JPEG2000="image/jp2",a.AdobeXD="application/vnd.adobe.xd",a.PSD="image/vnd.adobe.photoshop",a.MP3="audio/mpeg",a.OGG="audio/ogg",a.WAV="audio/wav",a.AAC="audio/aac",a.FLAC="audio/flac",a.M4A="audio/x-m4a",a.AMR="audio/amr",a.WMA="audio/x-ms-wma",a.MP4="video/mp4",a.MPEG="video/mpeg",a.MP2T="video/MP2T",a.MPEGPS="video/MP1S",a.WebM="video/webm",a.OggVideo="video/ogg",a.QuickTime="video/quicktime",a.AVI="video/x-msvideo",a.MKV="video/x-matroska",a.MOV="video/quicktime",a.FLV="video/x-flv",a.WMV="video/x-ms-wmv",a.PDF="application/pdf",a.EXE="application/vnd.microsoft.portable-executable",a.MSI="application/x-msdownload",a.APK="application/vnd.android.package-archive",a.JAR="application/java-archive",a.DMG="application/x-apple-diskimage",a.ISO="application/x-iso9660-image",a.TTF="font/ttf",a.WOFF="font/woff",a.WOFF2="font/woff2",a.OTF="font/otf",a.EOT="application/vnd.ms-fontobject",a.SVGFont="font/svg+xml",a.DOC="application/msword",a.DOCX="application/vnd.openxmlformats-officedocument.wordprocessingml.document",a.XLS="application/vnd.ms-excel",a.XLSX="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",a.PPT="application/vnd.ms-powerpoint",a.PPTX="application/vnd.openxmlformats-officedocument.presentationml.presentation",a.ODT="application/vnd.oasis.opendocument.text",a.ODS="application/vnd.oasis.opendocument.spreadsheet",a.ODP="application/vnd.oasis.opendocument.presentation",a.RTF="application/rtf",a.Base64="application/base64",a.P7M="application/pkcs7-mime",a.P12="application/x-pkcs12",a.COM="application/x-msdos-program",a.DLL="application/x-msdownload",a.SYS="application/x-mswinexe",a.OLE="application/x-oleobject",a.OctetStream="application/octet-stream",a.UnknownBinary="application/x-unknown",a.Binary="application/x-binary",a.ZIP="application/zip",a.RAR="application/vnd.rar",a.GZIP="application/gzip",a.TAR="application/x-tar",a.BZIP2="application/x-bzip2",a.SEVEN_ZIP="application/x-7z-compressed",a.XZ="application/x-xz",a.GZ="application/x-gzip",a.TAR_GZ="application/gzip",a.LZ="application/x-lzip",a.LZH="application/x-lzh",a.Fbr="application/zip+fbr",a.M3U="audio/x-mpegurl",a.M3U8="application/x-mpegurl",a.PLS="audio/x-scpls",a.XSPF="application/xspf+xml",a.DPL="application/x-daumplaylist",exports.NetMimeTypes=void 0,(t=exports.NetMimeTypes||(exports.NetMimeTypes={})).MIME="message/rfc822",t.SMTP="application/smtp",t.HTTP="application/http",t.HTTPS="application/https",t.FTP="application/ftp",t.TCP="application/tcp",t.UDP="application/udp",t.JSONLD="application/ld+json",t.WebAssembly="application/wasm",t.SVGZ="image/svg+xml+gzip",t.MHTML="multipart/related",t.OGG="application/ogg",t.XAP="application/x-silverlight-app",t.WOFF="font/woff",t.WASM="application/wasm",t.WGT="application/widget",t.OctetStream="application/octet-stream",t.UnknownBinary="application/x-unknown",exports.MimeTypes=void 0,(e=exports.MimeTypes||(exports.MimeTypes={})).SimpleData="text/x-simpledata",e.Fbr="application/zip+fbr",e.PSD="image/vnd.adobe.photoshop",e.Bat="text/x-sh",e.TextPlain="text/plain",e.TextUTF8="text/plain;charset=UTF-8",e.TextUTF16LE="text/plain;charset=UTF-16LE",e.TextUTF16BE="text/plain;charset=UTF-16BE",e.HTML="text/html",e.CSS="text/css",e.JavaScript="text/javascript",e.XML="text/xml",e.JSON="application/json",e.CSV="text/csv",e.Markdown="text/markdown",e.RTF="application/rtf",e.LaTeX="application/x-latex",e.TSV="text/tab-separated-values",e.JPEG="image/jpeg",e.PNG="image/png",e.GIF="image/gif",e.SVG="image/svg+xml",e.WebP="image/webp",e.BMP="image/bmp",e.TIFF="image/tiff",e.HEIF="image/heif",e.HEIC="image/heic",e.ICO="image/x-icon",e.JPEG2000="image/jp2",e.MP3="audio/mpeg",e.OGG="audio/ogg",e.WAV="audio/wav",e.AAC="audio/aac",e.FLAC="audio/flac",e.M4A="audio/x-m4a",e.AMR="audio/amr",e.WMA="audio/x-ms-wma",e.MP4="video/mp4",e.MPEG="video/mpeg",e.MP2T="video/MP2T",e.MPEGPS="video/MP1S",e.WebM="video/webm",e.OggVideo="video/ogg",e.QuickTime="video/quicktime",e.AVI="video/x-msvideo",e.MKV="video/x-matroska",e.MOV="video/quicktime",e.FLV="video/x-flv",e.WMV="video/x-ms-wmv",e.PDF="application/pdf",e.ZIP="application/zip",e.RAR="application/vnd.rar",e.SEVEN_ZIP="application/x-7z-compressed",e.GZIP="application/gzip",e.TAR="application/x-tar",e.EXE="application/vnd.microsoft.portable-executable",e.MSI="application/x-msdownload",e.APK="application/vnd.android.package-archive",e.JAR="application/java-archive",e.DMG="application/x-apple-diskimage",e.ISO="application/x-iso9660-image",e.TTF="font/ttf",e.WOFF="font/woff",e.WOFF2="font/woff2",e.OTF="font/otf",e.EOT="application/vnd.ms-fontobject",e.SVGFont="font/svg+xml",e.DOC="application/msword",e.DOCX="application/vnd.openxmlformats-officedocument.wordprocessingml.document",e.AdobeXD="application/vnd.adobe.xd",e.XLS="application/vnd.ms-excel",e.XLSX="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",e.PPT="application/vnd.ms-powerpoint",e.PPTX="application/vnd.openxmlformats-officedocument.presentationml.presentation",e.ODT="application/vnd.oasis.opendocument.text",e.ODS="application/vnd.oasis.opendocument.spreadsheet",e.ODP="application/vnd.oasis.opendocument.presentation",e.Base64="application/base64",e.P7M="application/pkcs7-mime",e.P12="application/x-pkcs12",e.XZ="application/x-xz",e.BZIP2="application/x-bzip2",e.GZ="application/x-gzip",e.TAR_GZ="application/gzip",e.LZ="application/x-lzip",e.LZH="application/x-lzh",e.COM="application/x-msdos-program",e.DLL="application/x-msdownload",e.SYS="application/x-mswinexe",e.OLE="application/x-oleobject",e.Binary="application/x-binary",e.MIME="message/rfc822",e.SMTP="application/smtp",e.HTTP="application/http",e.HTTPS="application/https",e.FTP="application/ftp",e.TCP="application/tcp",e.UDP="application/udp",e.JSONLD="application/ld+json",e.WebAssembly="application/wasm",e.SVGZ="image/svg+xml+gzip",e.MHTML="multipart/related",e.XAP="application/x-silverlight-app",e.WASM="application/wasm",e.WGT="application/widget",e.OctetStream="application/octet-stream",e.UnknownBinary="application/x-unknown",e.M3U="audio/x-mpegurl",e.M3U8="application/x-mpegurl",e.PLS="audio/x-scpls",e.XSPF="application/xspf+xml",e.DPL="application/x-daumplaylist";const p=()=>n||(n={"text/x-simpledata":"txt","text/plain":"txt","text/html":"html","text/css":"css","text/javascript":"js","text/xml":"xml","application/json":"json","text/csv":"csv","text/markdown":"md","application/x-latex":"tex","text/tab-separated-values":"tsv","text/x-sh":"bat","image/jpeg":"jpg","image/png":"png","image/gif":"gif","image/svg+xml":"svg","image/webp":"webp","image/bmp":"bmp","image/tiff":"tiff","image/heif":"heif","image/heic":"heic","image/x-icon":"ico","image/jp2":"jp2","audio/mpeg":"mp3","audio/ogg":"ogg","audio/wav":"wav","audio/aac":"aac","audio/flac":"flac","audio/x-m4a":"m4a","audio/amr":"amr","audio/x-ms-wma":"wma","video/mp4":"mp4","video/webm":"webm","video/ogg":"ogg","video/quicktime":"mov","video/x-msvideo":"avi","video/x-matroska":"mkv","video/x-flv":"flv","video/x-ms-wmv":"wmv","application/pdf":"pdf","application/zip":"zip","application/vnd.rar":"rar","application/gzip":"gzip","application/x-tar":"tar","application/vnd.microsoft.portable-executable":"exe","application/x-msdownload":"msi","application/vnd.android.package-archive":"apk","application/java-archive":"jar","application/x-apple-diskimage":"dmg","application/x-iso9660-image":"iso","application/zip+fbr":"fbr","font/ttf":"ttf","font/woff":"woff","font/woff2":"woff2","font/otf":"otf","application/vnd.ms-fontobject":"eot","font/svg+xml":"svgfont","application/msword":"doc","application/vnd.openxmlformats-officedocument.wordprocessingml.document":"docx","application/vnd.ms-excel":"xls","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":"xlsx","application/vnd.ms-powerpoint":"ppt","application/vnd.openxmlformats-officedocument.presentationml.presentation":"pptx","application/vnd.oasis.opendocument.text":"odt","application/vnd.oasis.opendocument.spreadsheet":"ods","application/vnd.oasis.opendocument.presentation":"odp","application/octet-stream":"exe","application/x-unknown":"unknown","audio/x-mpegurl":"m3u","application/x-mpegurl":"m3u8","audio/x-scpls":"pls","application/xspf+xml":"xspf","application/x-daumplaylist":"dpl"});let s;const c=/^\.?(\w+)(?:\/([0-9a-z-+.]+)\s*(?:;.*charset\s*=\s*([0-9a-z-]+).*)?)?$/i;function r(e){const t=c.exec(e);let a,o;return t?.[2]?(a=`${t[1]}/${t[2]}`,o=p()?.[a]||"unknown"):t?.[1]&&(o=t[1],a=(s||(s=i.invertRecordKv(p())),s)[o]||"application/x-unknown"),t?.[3]&&(a=`${a}; charset=${t[3]}`),{ext:o,mime:a}}let l;async function m(e,t,a=0){let i;return i=e instanceof Blob?new Uint8Array(await e.slice(a,t).arrayBuffer()):e instanceof ArrayBuffer?new Uint8Array(e.slice(a,t)):e.slice(a,t),i}async function d(e,t,a=0){return(new TextDecoder).decode(await m(e,t,a))}async function x(e){const t=await async function(e,t,a=0){return Array.from(await m(e,t,a)).map((e=>e.toString(16).padStart(2,"0"))).join("").toUpperCase()}(e,8);for(const[e,a]of l||(l=[["EFBBBF","text/plain;charset=UTF-8"],["FEFF","text/plain;charset=UTF-16BE"],["FFFE","text/plain;charset=UTF-16LE"],["FFD8FF","image/jpeg"],["89504E47","image/png"],["47494638","image/gif"],["49492A00","image/tiff"],["4D4D002A","image/tiff"],["424D","image/bmp"],["00000100","image/x-icon"],["38425053","image/vnd.adobe.photoshop"],["52494646","image/webp"],["57454250","image/webp"],["494433","audio/mpeg"],["4F676753","audio/ogg"],["57415645","audio/wav"],["664C6143","audio/flac"],["000001BA","video/MP1S"],["000001BA","video/mpeg"],["000001B3","video/mpeg"],["1A45DFA3","video/x-matroska"],["6674797069736F6D","video/mp4"],["0000001866747970","video/mp4"],["667479706d703432","video/mp4"],["47","video/MP2T"],["1A45DFA3","video/webm"],["504B0304","application/zip"],["52617221","application/vnd.rar"],["1F8B08","application/gzip"],["75737461","application/x-tar"],["425A68","application/x-bzip2"],["377ABCAF271C","application/x-7z-compressed"],["25504446","application/pdf"],["D0CF11E0A1B11AE1","application/msword"],["7B5C727466","application/rtf"],["4D5A","application/vnd.microsoft.portable-executable"],["FFD8FFE0","image/jpeg"],["MZ","application/octet-stream"]]))if(t.startsWith(e))return a}const f=[["word/","application/vnd.openxmlformats-officedocument.wordprocessingml.document"],["ppt/","application/vnd.openxmlformats-officedocument.presentationml.presentation"],["xl/","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"],["@Uu","application/zip+fbr"],["mimetypeapplication/","application/vnd.adobe.xd"]];const u="//",g="SimpleData,",v=new RegExp(`^(${g})?(\\{.*\\}|\\[.*\\])$`,"i"),w=[[/^<(!DOCTYPE\s+)?html/i,"text/html"],[/^<svg/i,"image/svg+xml"],[/^<(\?xml|\w+)/i,"text/xml"],[/^[{\[]/i,"application/json"],[/^8BPS/i,"image/vnd.adobe.photoshop"],[/^@?(echo|chcp|set)/i,"text/x-sh"],[new RegExp(`^${g}`,"i"),"text/x-simpledata"],[/^DAUMPLAYLIST/i,"application/x-daumplaylist"]];async function b(e){const t=(await d(e,50)).trim();for(const[e,a]of w)if(e.test(t))return a}const h=/stream|unknown|binary|text|xml'/;async function T(e){const t=e.type||"";if(t&&!h.test(t))return t;let a=t?.includes("text/plain")?await b(e):"";if(a)return a;const i=await x(e);return/zip$/.test(i)?await async function(e){const t=await d(e,50,30);for(const[e,a]of f)if(t.includes(e))return a;return"application/zip"}(e):(a=!i||i.includes("text/plain")?await b(e):"",h.test(i)?a||t||i||void 0:a||i||t||void 0)}const y=o.decode,S=o.encode;async function F(e,t="gzip"){const a=new CompressionStream(t),i=a.writable.getWriter();return i.write(e instanceof Uint8Array?e:new Uint8Array(e)),i.close(),await new Response(a.readable).arrayBuffer()}async function P(e,t="gzip"){const a=new DecompressionStream(t),i=a.writable.getWriter();i.write(e instanceof Uint8Array?e:new Uint8Array(e)),i.close();const o=a.readable;return await new Response(o).arrayBuffer()}async function M(e,t="gzip"){return await F((new TextEncoder).encode(e),t)}async function A(e,t="gzip"){const a=atob(e),i=a.length,o=new Uint8Array(i);for(let e=0;e<i;e++)o[e]=a.charCodeAt(e);return await P(o,t)}async function D(e){if(e.fields)return B(e.fields,e.excludeFields);const t=await async function(e,t=30){const a=[];let o=1;if(i.isIterable(e)){for(const i of e)if(a.push(i),++o>t)break}else if(i.isAsyncIterable(e))for await(const i of e)if(a.push(i),++o>t)break;return a}(e.data),a={};let o,n=0;for(const e of t){const t=Object.keys(e).length;t>n&&(n=t,o=e)}n=0;for(const e in o)a[e]=n++;return B(a,e.excludeFields)}function O(e){return Object.entries(e).sort(E)}function B(e,t){if(!t)return e;const a={},i=Object.entries(e).sort(E);let o=0;for(const[e]of i)t.includes(e)||(a[e]=o++);return a}function E(e,t){return e[1]-t[1]}function z(e,t){const a=[];for(const[i]of e)a.push(t[i]);const i=JSON.stringify(a);return i.slice(1,i.length-1)}class j{_arg;constructor(e){this._arg=e}async*[Symbol.asyncIterator](){const{header:e,exportData:t}=this._arg;yield`${g}${JSON.stringify(e)}`;for(const e of t){const t=await D(e),a=O(t),o={name:e.name,fields:t};if(e.description&&(o.description=e.description),e.extraData&&(o.extraData=e.extraData),e.defaultValues&&(o.defaultValues=e.defaultValues),yield`${u}${JSON.stringify(o)}`,i.isIterable(e.data))for(const t of e.data)yield z(a,t);else if(i.isAsyncIterable(e.data))for await(const t of e.data)yield z(a,t)}}destroy(){delete this._arg}}const k=/^\s*$/;class R{_textReader;constructor(e){i.isString(e)?this._textReader=new i.StringTextReader(e):this._textReader=e}getHeader(){const e=this._textReader.firstLine;return e&&v.exec(e)?.[2]||{}}getSize(){return this._textReader.size}*read(e){let t,a,o;for(const{data:n,progress:p}of this._textReader){if(k.test(n))continue;if(n.startsWith(u)){if(o=JSON.parse(n.slice(2)),t&&t===e)return;t=o.name,a=[];for(const[e,t]of Object.entries(o.fields))a.push([e,Number(t)]);continue}if(!t||!a||e&&t!==e)continue;const s=JSON.parse(`[${n}]`),c=o?.defaultValues?i.copyObject(o?.defaultValues):{};for(const[e,t]of a)c[e]=s[t];yield{name:t,data:c,progress:p,meta:o}}}getAll(e){const t=[];for(const{data:a}of this.read(e))t.push(a);return t}async pageRead(e,t=1e3){let a=[];const i=this._textReader.size;let o,n;for(const{name:i,data:p,progress:s,meta:c}of this.read())a.push(p),a.length>=t?(await e(i,a,s,c),a=[]):(o=i,n=c);a.length&&await e(o,a,i,n)}async namedRead(e,t=1e3){await this.pageRead((async(t,a,i,o)=>{t in e&&await e[t](a,i,o)}),t)}destroy(){try{this._textReader?.destroy?.()}finally{delete this._textReader}}}var L;function C(e,t,a){return new Promise(((i,o)=>{const n=new FileReader;n.onload=()=>{i(n.result)},n.onerror=o,n[t](e,a)}))}exports.BlobTypes=void 0,(L=exports.BlobTypes||(exports.BlobTypes={}))[L.Text=1]="Text",L[L.Base64=2]="Base64",L[L.Image=3]="Image",L[L.Bitmap=4]="Bitmap",L[L.Svg=5]="Svg",L[L.Html=6]="Html",L[L.Xml=7]="Xml",L[L.Json=8]="Json",L[L.SimpleData=9]="SimpleData",L[L.NotSupped=10]="NotSupped";const U=[1,6,5,7,8,9],I=/<meta[^>]+charset\s*=\s*["']?([\w-]+)|^<\?xml[^>]+encoding\s*=\s*"?([\w-]+)/i;function G(e,t){return(new globalThis.DOMParser).parseFromString(e,t)}const V=[2,3];function W(e){switch(e){case"text/plain":return 1;case"application/base64":return 2;case"image/jpeg":case"image/png":case"image/gif":case"image/webp":case"image/bmp":case"image/x-icon":return 3;case"image/svg+xml":return 5;case"text/html":return 6;case"text/xml":return 7;case"application/json":return 8;case"text/x-simpledata":return 9;default:return 10}}exports.NamedWeakMap=class{valueCreator;objectRefs={};constructor(e){this.valueCreator=e}get(e){let t=this.objectRefs[e]?.deref();return t||(this.valueCreator&&this.set(e,t=this.valueCreator(e)),t)}set(e,t){this.objectRefs[e]=new WeakRef(t)}destroy(){for(let e in this.objectRefs)this.objectRefs[e]?.deref()||delete this.objectRefs[e]}},exports.SimpleDataExport=j,exports.SimpleDataReader=R,exports.base64ToBlob=function(e,t){const a=e.indexOf(";base64,");a>-1&&(e=e.slice(a+8));const i=atob(e),o=i.length,n=new Uint8Array(o);for(let e=0;e<o;e++)n[e]=i.charCodeAt(e);return new Blob([n],{type:t})},exports.compressData=F,exports.compressText=M,exports.compressTextToBase64=async function(e,t="gzip"){return btoa(String.fromCharCode(...new Uint8Array(await M(e,t))))},exports.compressToBase64=async function(e,t="gzip"){return btoa(String.fromCharCode(...new Uint8Array(await F(e,t))))},exports.decodeBase64=y,exports.decompressData=P,exports.decompressFromBase64=A,exports.decompressText=async function(e,t="gzip"){return(new TextDecoder).decode(await P(e,t))},exports.decompressTextFromBase64=async function(e,t="gzip"){return(new TextDecoder).decode(await A(e,t))},exports.encodeBase64=S,exports.exportSimpleData=e=>i.joinAsyncIterable(new j(e)),exports.getExtensionMime=r,exports.miniToBlobType=W,exports.parseMime=T,exports.parseMimeExt=async function(e){return r(`${await T(e)}`)},exports.readBlob=async function(e,...t){let a=0;const o=i.isNumber(t[a])?t[a++]:void 0,n=i.isString(t[a])?t[a++]:void 0,p=!o&&await T(e),s=o||W(p);let c;return 4===s?c=await globalThis.createImageBitmap(e):U.includes(s)?c=await async function(e,t,a){if(!a){const[,t,i]=I.exec(await e.slice(0,1024).text())||[];a=t||i}const i=await C(e,"readAsText",a);switch(t){case 5:return G(i,"image/svg+xml").querySelector("svg");case 7:return G(i,"text/xml");case 6:return G(i,"text/html");case 9:return new R(i);case 8:return JSON.parse(i);default:return i}}(e,s,n):V.includes(s)&&(c=await function(e,t){return new Promise((async(a,i)=>{const o=await C(e,"readAsDataURL");if(3===t){const e=new globalThis.Image;e.onload=()=>a(e),e.onerror=i,e.src=o}else a(o)}))}(e,s)),o&&10!==s?c:{...r(p),blob:e,type:s,result:c}},exports.readBlobData=C,exports.supportsCompression=function(){return typeof CompressionStream<"u"&&typeof DecompressionStream<"u"};
|
|
1
|
+
"use strict";
|
|
2
|
+
var gsBase = require("gs-base"), jsBase64 = require("js-base64"), FileMimeTypes = /* @__PURE__ */ ((FileMimeTypes2) => (FileMimeTypes2.TextPlain = "text/plain", FileMimeTypes2.TextUTF8 = "text/plain;charset=UTF-8", FileMimeTypes2.TextUTF16BE = "text/plain;charset=UTF-16BE", FileMimeTypes2.TextUTF16LE = "text/plain;charset=UTF-16LE", FileMimeTypes2.HTML = "text/html", FileMimeTypes2.CSS = "text/css", FileMimeTypes2.JavaScript = "text/javascript", FileMimeTypes2.XML = "text/xml", FileMimeTypes2.JSON = "application/json", FileMimeTypes2.CSV = "text/csv", FileMimeTypes2.Markdown = "text/markdown", FileMimeTypes2.LaTeX = "application/x-latex", FileMimeTypes2.TSV = "text/tab-separated-values", FileMimeTypes2.Bat = "text/x-sh", FileMimeTypes2.SimpleData = "text/x-simpledata", FileMimeTypes2.JPEG = "image/jpeg", FileMimeTypes2.PNG = "image/png", FileMimeTypes2.GIF = "image/gif", FileMimeTypes2.SVG = "image/svg+xml", FileMimeTypes2.WebP = "image/webp", FileMimeTypes2.BMP = "image/bmp", FileMimeTypes2.TIFF = "image/tiff", FileMimeTypes2.HEIF = "image/heif", FileMimeTypes2.HEIC = "image/heic", FileMimeTypes2.ICO = "image/x-icon", FileMimeTypes2.JPEG2000 = "image/jp2", FileMimeTypes2.AdobeXD = "application/vnd.adobe.xd", FileMimeTypes2.PSD = "image/vnd.adobe.photoshop", FileMimeTypes2.MP3 = "audio/mpeg", FileMimeTypes2.OGG = "audio/ogg", FileMimeTypes2.WAV = "audio/wav", FileMimeTypes2.AAC = "audio/aac", FileMimeTypes2.FLAC = "audio/flac", FileMimeTypes2.M4A = "audio/x-m4a", FileMimeTypes2.AMR = "audio/amr", FileMimeTypes2.WMA = "audio/x-ms-wma", FileMimeTypes2.MP4 = "video/mp4", FileMimeTypes2.MPEG = "video/mpeg", FileMimeTypes2.MP2T = "video/MP2T", FileMimeTypes2.MPEGPS = "video/MP1S", FileMimeTypes2.WebM = "video/webm", FileMimeTypes2.OggVideo = "video/ogg", FileMimeTypes2.QuickTime = "video/quicktime", FileMimeTypes2.AVI = "video/x-msvideo", FileMimeTypes2.MKV = "video/x-matroska", FileMimeTypes2.MOV = "video/quicktime", FileMimeTypes2.FLV = "video/x-flv", FileMimeTypes2.WMV = "video/x-ms-wmv", FileMimeTypes2.PDF = "application/pdf", FileMimeTypes2.EXE = "application/vnd.microsoft.portable-executable", FileMimeTypes2.MSI = "application/x-msdownload", FileMimeTypes2.APK = "application/vnd.android.package-archive", FileMimeTypes2.JAR = "application/java-archive", FileMimeTypes2.DMG = "application/x-apple-diskimage", FileMimeTypes2.ISO = "application/x-iso9660-image", FileMimeTypes2.TTF = "font/ttf", FileMimeTypes2.WOFF = "font/woff", FileMimeTypes2.WOFF2 = "font/woff2", FileMimeTypes2.OTF = "font/otf", FileMimeTypes2.EOT = "application/vnd.ms-fontobject", FileMimeTypes2.SVGFont = "font/svg+xml", FileMimeTypes2.DOC = "application/msword", FileMimeTypes2.DOCX = "application/vnd.openxmlformats-officedocument.wordprocessingml.document", FileMimeTypes2.XLS = "application/vnd.ms-excel", FileMimeTypes2.XLSX = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", FileMimeTypes2.PPT = "application/vnd.ms-powerpoint", FileMimeTypes2.PPTX = "application/vnd.openxmlformats-officedocument.presentationml.presentation", FileMimeTypes2.ODT = "application/vnd.oasis.opendocument.text", FileMimeTypes2.ODS = "application/vnd.oasis.opendocument.spreadsheet", FileMimeTypes2.ODP = "application/vnd.oasis.opendocument.presentation", FileMimeTypes2.RTF = "application/rtf", FileMimeTypes2.Base64 = "application/base64", FileMimeTypes2.P7M = "application/pkcs7-mime", FileMimeTypes2.P12 = "application/x-pkcs12", FileMimeTypes2.COM = "application/x-msdos-program", FileMimeTypes2.DLL = "application/x-msdownload", FileMimeTypes2.SYS = "application/x-mswinexe", FileMimeTypes2.OLE = "application/x-oleobject", FileMimeTypes2.OctetStream = "application/octet-stream", FileMimeTypes2.UnknownBinary = "application/x-unknown", FileMimeTypes2.Binary = "application/x-binary", FileMimeTypes2.ZIP = "application/zip", FileMimeTypes2.RAR = "application/vnd.rar", FileMimeTypes2.GZIP = "application/gzip", FileMimeTypes2.TAR = "application/x-tar", FileMimeTypes2.BZIP2 = "application/x-bzip2", FileMimeTypes2.SEVEN_ZIP = "application/x-7z-compressed", FileMimeTypes2.XZ = "application/x-xz", FileMimeTypes2.GZ = "application/x-gzip", FileMimeTypes2.TAR_GZ = "application/gzip", FileMimeTypes2.LZ = "application/x-lzip", FileMimeTypes2.LZH = "application/x-lzh", FileMimeTypes2.Fbr = "application/zip+fbr", FileMimeTypes2.M3U = "audio/x-mpegurl", FileMimeTypes2.M3U8 = "application/x-mpegurl", FileMimeTypes2.PLS = "audio/x-scpls", FileMimeTypes2.XSPF = "application/xspf+xml", FileMimeTypes2.DPL = "application/x-daumplaylist", FileMimeTypes2))(FileMimeTypes || {}), NetMimeTypes = /* @__PURE__ */ ((NetMimeTypes2) => (NetMimeTypes2.MIME = "message/rfc822", NetMimeTypes2.SMTP = "application/smtp", NetMimeTypes2.HTTP = "application/http", NetMimeTypes2.HTTPS = "application/https", NetMimeTypes2.FTP = "application/ftp", NetMimeTypes2.TCP = "application/tcp", NetMimeTypes2.UDP = "application/udp", NetMimeTypes2.JSONLD = "application/ld+json", NetMimeTypes2.WebAssembly = "application/wasm", NetMimeTypes2.SVGZ = "image/svg+xml+gzip", NetMimeTypes2.MHTML = "multipart/related", NetMimeTypes2.OGG = "application/ogg", NetMimeTypes2.XAP = "application/x-silverlight-app", NetMimeTypes2.WOFF = "font/woff", NetMimeTypes2.WASM = "application/wasm", NetMimeTypes2.WGT = "application/widget", NetMimeTypes2.OctetStream = "application/octet-stream", NetMimeTypes2.UnknownBinary = "application/x-unknown", NetMimeTypes2))(NetMimeTypes || {}), MimeTypes = ((MimeTypes2) => (MimeTypes2[MimeTypes2.SimpleData = FileMimeTypes.SimpleData] = "SimpleData", MimeTypes2[MimeTypes2.Fbr = FileMimeTypes.Fbr] = "Fbr", MimeTypes2[MimeTypes2.PSD = FileMimeTypes.PSD] = "PSD", MimeTypes2[MimeTypes2.Bat = FileMimeTypes.Bat] = "Bat", MimeTypes2[MimeTypes2.TextPlain = FileMimeTypes.TextPlain] = "TextPlain", MimeTypes2[MimeTypes2.TextUTF8 = FileMimeTypes.TextUTF8] = "TextUTF8", MimeTypes2[MimeTypes2.TextUTF16LE = FileMimeTypes.TextUTF16LE] = "TextUTF16LE", MimeTypes2[MimeTypes2.TextUTF16BE = FileMimeTypes.TextUTF16BE] = "TextUTF16BE", MimeTypes2[MimeTypes2.HTML = FileMimeTypes.HTML] = "HTML", MimeTypes2[MimeTypes2.CSS = FileMimeTypes.CSS] = "CSS", MimeTypes2[MimeTypes2.JavaScript = FileMimeTypes.JavaScript] = "JavaScript", MimeTypes2[MimeTypes2.XML = FileMimeTypes.XML] = "XML", MimeTypes2[MimeTypes2.JSON = FileMimeTypes.JSON] = "JSON", MimeTypes2[MimeTypes2.CSV = FileMimeTypes.CSV] = "CSV", MimeTypes2[MimeTypes2.Markdown = FileMimeTypes.Markdown] = "Markdown", MimeTypes2[MimeTypes2.RTF = FileMimeTypes.RTF] = "RTF", MimeTypes2[MimeTypes2.LaTeX = FileMimeTypes.LaTeX] = "LaTeX", MimeTypes2[MimeTypes2.TSV = FileMimeTypes.TSV] = "TSV", MimeTypes2[MimeTypes2.JPEG = FileMimeTypes.JPEG] = "JPEG", MimeTypes2[MimeTypes2.PNG = FileMimeTypes.PNG] = "PNG", MimeTypes2[MimeTypes2.GIF = FileMimeTypes.GIF] = "GIF", MimeTypes2[MimeTypes2.SVG = FileMimeTypes.SVG] = "SVG", MimeTypes2[MimeTypes2.WebP = FileMimeTypes.WebP] = "WebP", MimeTypes2[MimeTypes2.BMP = FileMimeTypes.BMP] = "BMP", MimeTypes2[MimeTypes2.TIFF = FileMimeTypes.TIFF] = "TIFF", MimeTypes2[MimeTypes2.HEIF = FileMimeTypes.HEIF] = "HEIF", MimeTypes2[MimeTypes2.HEIC = FileMimeTypes.HEIC] = "HEIC", MimeTypes2[MimeTypes2.ICO = FileMimeTypes.ICO] = "ICO", MimeTypes2[MimeTypes2.JPEG2000 = FileMimeTypes.JPEG2000] = "JPEG2000", MimeTypes2[MimeTypes2.MP3 = FileMimeTypes.MP3] = "MP3", MimeTypes2[MimeTypes2.OGG = FileMimeTypes.OGG] = "OGG", MimeTypes2[MimeTypes2.WAV = FileMimeTypes.WAV] = "WAV", MimeTypes2[MimeTypes2.AAC = FileMimeTypes.AAC] = "AAC", MimeTypes2[MimeTypes2.FLAC = FileMimeTypes.FLAC] = "FLAC", MimeTypes2[MimeTypes2.M4A = FileMimeTypes.M4A] = "M4A", MimeTypes2[MimeTypes2.AMR = FileMimeTypes.AMR] = "AMR", MimeTypes2[MimeTypes2.WMA = FileMimeTypes.WMA] = "WMA", MimeTypes2[MimeTypes2.MP4 = FileMimeTypes.MP4] = "MP4", MimeTypes2[MimeTypes2.MPEG = FileMimeTypes.MPEG] = "MPEG", MimeTypes2[MimeTypes2.MP2T = FileMimeTypes.MP2T] = "MP2T", MimeTypes2[MimeTypes2.MPEGPS = FileMimeTypes.MPEGPS] = "MPEGPS", MimeTypes2[MimeTypes2.WebM = FileMimeTypes.WebM] = "WebM", MimeTypes2[MimeTypes2.OggVideo = FileMimeTypes.OggVideo] = "OggVideo", MimeTypes2[MimeTypes2.QuickTime = FileMimeTypes.QuickTime] = "QuickTime", MimeTypes2[MimeTypes2.AVI = FileMimeTypes.AVI] = "AVI", MimeTypes2[MimeTypes2.MKV = FileMimeTypes.MKV] = "MKV", MimeTypes2[MimeTypes2.MOV = FileMimeTypes.MOV] = "MOV", MimeTypes2[MimeTypes2.FLV = FileMimeTypes.FLV] = "FLV", MimeTypes2[MimeTypes2.WMV = FileMimeTypes.WMV] = "WMV", MimeTypes2[MimeTypes2.PDF = FileMimeTypes.PDF] = "PDF", MimeTypes2[MimeTypes2.ZIP = FileMimeTypes.ZIP] = "ZIP", MimeTypes2[MimeTypes2.RAR = FileMimeTypes.RAR] = "RAR", MimeTypes2[MimeTypes2.SEVEN_ZIP = FileMimeTypes.SEVEN_ZIP] = "SEVEN_ZIP", MimeTypes2[MimeTypes2.GZIP = FileMimeTypes.GZIP] = "GZIP", MimeTypes2[MimeTypes2.TAR = FileMimeTypes.TAR] = "TAR", MimeTypes2[MimeTypes2.EXE = FileMimeTypes.EXE] = "EXE", MimeTypes2[MimeTypes2.MSI = FileMimeTypes.MSI] = "MSI", MimeTypes2[MimeTypes2.APK = FileMimeTypes.APK] = "APK", MimeTypes2[MimeTypes2.JAR = FileMimeTypes.JAR] = "JAR", MimeTypes2[MimeTypes2.DMG = FileMimeTypes.DMG] = "DMG", MimeTypes2[MimeTypes2.ISO = FileMimeTypes.ISO] = "ISO", MimeTypes2[MimeTypes2.TTF = FileMimeTypes.TTF] = "TTF", MimeTypes2[MimeTypes2.WOFF = FileMimeTypes.WOFF] = "WOFF", MimeTypes2[MimeTypes2.WOFF2 = FileMimeTypes.WOFF2] = "WOFF2", MimeTypes2[MimeTypes2.OTF = FileMimeTypes.OTF] = "OTF", MimeTypes2[MimeTypes2.EOT = FileMimeTypes.EOT] = "EOT", MimeTypes2[MimeTypes2.SVGFont = FileMimeTypes.SVGFont] = "SVGFont", MimeTypes2[MimeTypes2.DOC = FileMimeTypes.DOC] = "DOC", MimeTypes2[MimeTypes2.DOCX = FileMimeTypes.DOCX] = "DOCX", MimeTypes2[MimeTypes2.AdobeXD = FileMimeTypes.AdobeXD] = "AdobeXD", MimeTypes2[MimeTypes2.XLS = FileMimeTypes.XLS] = "XLS", MimeTypes2[MimeTypes2.XLSX = FileMimeTypes.XLSX] = "XLSX", MimeTypes2[MimeTypes2.PPT = FileMimeTypes.PPT] = "PPT", MimeTypes2[MimeTypes2.PPTX = FileMimeTypes.PPTX] = "PPTX", MimeTypes2[MimeTypes2.ODT = FileMimeTypes.ODT] = "ODT", MimeTypes2[MimeTypes2.ODS = FileMimeTypes.ODS] = "ODS", MimeTypes2[MimeTypes2.ODP = FileMimeTypes.ODP] = "ODP", MimeTypes2[MimeTypes2.Base64 = FileMimeTypes.Base64] = "Base64", MimeTypes2[MimeTypes2.P7M = FileMimeTypes.P7M] = "P7M", MimeTypes2[MimeTypes2.P12 = FileMimeTypes.P12] = "P12", MimeTypes2[MimeTypes2.XZ = FileMimeTypes.XZ] = "XZ", MimeTypes2[MimeTypes2.BZIP2 = FileMimeTypes.BZIP2] = "BZIP2", MimeTypes2[MimeTypes2.GZ = FileMimeTypes.GZ] = "GZ", MimeTypes2[MimeTypes2.TAR_GZ = FileMimeTypes.TAR_GZ] = "TAR_GZ", MimeTypes2[MimeTypes2.LZ = FileMimeTypes.LZ] = "LZ", MimeTypes2[MimeTypes2.LZH = FileMimeTypes.LZH] = "LZH", MimeTypes2[MimeTypes2.COM = FileMimeTypes.COM] = "COM", MimeTypes2[MimeTypes2.DLL = FileMimeTypes.DLL] = "DLL", MimeTypes2[MimeTypes2.SYS = FileMimeTypes.SYS] = "SYS", MimeTypes2[MimeTypes2.OLE = FileMimeTypes.OLE] = "OLE", MimeTypes2[MimeTypes2.Binary = FileMimeTypes.Binary] = "Binary", MimeTypes2[MimeTypes2.MIME = NetMimeTypes.MIME] = "MIME", MimeTypes2[MimeTypes2.SMTP = NetMimeTypes.SMTP] = "SMTP", MimeTypes2[MimeTypes2.HTTP = NetMimeTypes.HTTP] = "HTTP", MimeTypes2[MimeTypes2.HTTPS = NetMimeTypes.HTTPS] = "HTTPS", MimeTypes2[MimeTypes2.FTP = NetMimeTypes.FTP] = "FTP", MimeTypes2[MimeTypes2.TCP = NetMimeTypes.TCP] = "TCP", MimeTypes2[MimeTypes2.UDP = NetMimeTypes.UDP] = "UDP", MimeTypes2[MimeTypes2.JSONLD = NetMimeTypes.JSONLD] = "JSONLD", MimeTypes2[MimeTypes2.WebAssembly = NetMimeTypes.WebAssembly] = "WebAssembly", MimeTypes2[MimeTypes2.SVGZ = NetMimeTypes.SVGZ] = "SVGZ", MimeTypes2[MimeTypes2.MHTML = NetMimeTypes.MHTML] = "MHTML", MimeTypes2[MimeTypes2.XAP = NetMimeTypes.XAP] = "XAP", MimeTypes2[MimeTypes2.WASM = NetMimeTypes.WASM] = "WASM", MimeTypes2[MimeTypes2.WGT = NetMimeTypes.WGT] = "WGT", MimeTypes2[MimeTypes2.OctetStream = FileMimeTypes.OctetStream] = "OctetStream", MimeTypes2[MimeTypes2.UnknownBinary = FileMimeTypes.UnknownBinary] = "UnknownBinary", MimeTypes2[MimeTypes2.M3U = FileMimeTypes.M3U] = "M3U", MimeTypes2[MimeTypes2.M3U8 = FileMimeTypes.M3U8] = "M3U8", MimeTypes2[MimeTypes2.PLS = FileMimeTypes.PLS] = "PLS", MimeTypes2[MimeTypes2.XSPF = FileMimeTypes.XSPF] = "XSPF", MimeTypes2[MimeTypes2.DPL = FileMimeTypes.DPL] = "DPL", MimeTypes2))(MimeTypes || {});
|
|
3
|
+
let mimeToExtensionMap;
|
|
4
|
+
const getMiniToExtensionMap = () => mimeToExtensionMap || (mimeToExtensionMap = {
|
|
5
|
+
// 文本类型
|
|
6
|
+
[MimeTypes.SimpleData]: "txt",
|
|
7
|
+
[MimeTypes.TextPlain]: "txt",
|
|
8
|
+
[MimeTypes.HTML]: "html",
|
|
9
|
+
[MimeTypes.CSS]: "css",
|
|
10
|
+
[MimeTypes.JavaScript]: "js",
|
|
11
|
+
[MimeTypes.XML]: "xml",
|
|
12
|
+
[MimeTypes.JSON]: "json",
|
|
13
|
+
[MimeTypes.CSV]: "csv",
|
|
14
|
+
[MimeTypes.Markdown]: "md",
|
|
15
|
+
[MimeTypes.LaTeX]: "tex",
|
|
16
|
+
[MimeTypes.TSV]: "tsv",
|
|
17
|
+
[MimeTypes.Bat]: "bat",
|
|
18
|
+
// 图片类型
|
|
19
|
+
[MimeTypes.JPEG]: "jpg",
|
|
20
|
+
[MimeTypes.PNG]: "png",
|
|
21
|
+
[MimeTypes.GIF]: "gif",
|
|
22
|
+
[MimeTypes.SVG]: "svg",
|
|
23
|
+
[MimeTypes.WebP]: "webp",
|
|
24
|
+
[MimeTypes.BMP]: "bmp",
|
|
25
|
+
[MimeTypes.TIFF]: "tiff",
|
|
26
|
+
[MimeTypes.HEIF]: "heif",
|
|
27
|
+
[MimeTypes.HEIC]: "heic",
|
|
28
|
+
[MimeTypes.ICO]: "ico",
|
|
29
|
+
[MimeTypes.JPEG2000]: "jp2",
|
|
30
|
+
// 音频类型
|
|
31
|
+
[MimeTypes.MP3]: "mp3",
|
|
32
|
+
[MimeTypes.OGG]: "ogg",
|
|
33
|
+
[MimeTypes.WAV]: "wav",
|
|
34
|
+
[MimeTypes.AAC]: "aac",
|
|
35
|
+
[MimeTypes.FLAC]: "flac",
|
|
36
|
+
[MimeTypes.M4A]: "m4a",
|
|
37
|
+
[MimeTypes.AMR]: "amr",
|
|
38
|
+
[MimeTypes.WMA]: "wma",
|
|
39
|
+
// 视频类型
|
|
40
|
+
[MimeTypes.MP4]: "mp4",
|
|
41
|
+
[MimeTypes.WebM]: "webm",
|
|
42
|
+
[MimeTypes.OggVideo]: "ogg",
|
|
43
|
+
[MimeTypes.QuickTime]: "mov",
|
|
44
|
+
[MimeTypes.AVI]: "avi",
|
|
45
|
+
[MimeTypes.MKV]: "mkv",
|
|
46
|
+
[MimeTypes.FLV]: "flv",
|
|
47
|
+
[MimeTypes.WMV]: "wmv",
|
|
48
|
+
// 应用程序类型
|
|
49
|
+
[MimeTypes.PDF]: "pdf",
|
|
50
|
+
[MimeTypes.ZIP]: "zip",
|
|
51
|
+
[MimeTypes.RAR]: "rar",
|
|
52
|
+
[MimeTypes.GZIP]: "gzip",
|
|
53
|
+
[MimeTypes.TAR]: "tar",
|
|
54
|
+
[MimeTypes.EXE]: "exe",
|
|
55
|
+
[MimeTypes.MSI]: "msi",
|
|
56
|
+
[MimeTypes.APK]: "apk",
|
|
57
|
+
[MimeTypes.JAR]: "jar",
|
|
58
|
+
[MimeTypes.DMG]: "dmg",
|
|
59
|
+
[MimeTypes.ISO]: "iso",
|
|
60
|
+
[MimeTypes.Fbr]: "fbr",
|
|
61
|
+
// 字体类型
|
|
62
|
+
[MimeTypes.TTF]: "ttf",
|
|
63
|
+
[MimeTypes.WOFF]: "woff",
|
|
64
|
+
[MimeTypes.WOFF2]: "woff2",
|
|
65
|
+
[MimeTypes.OTF]: "otf",
|
|
66
|
+
[MimeTypes.EOT]: "eot",
|
|
67
|
+
[MimeTypes.SVGFont]: "svgfont",
|
|
68
|
+
// 文档类型
|
|
69
|
+
[MimeTypes.DOC]: "doc",
|
|
70
|
+
[MimeTypes.DOCX]: "docx",
|
|
71
|
+
[MimeTypes.XLS]: "xls",
|
|
72
|
+
[MimeTypes.XLSX]: "xlsx",
|
|
73
|
+
[MimeTypes.PPT]: "ppt",
|
|
74
|
+
[MimeTypes.PPTX]: "pptx",
|
|
75
|
+
[MimeTypes.ODT]: "odt",
|
|
76
|
+
[MimeTypes.ODS]: "ods",
|
|
77
|
+
[MimeTypes.ODP]: "odp",
|
|
78
|
+
// 二进制数据
|
|
79
|
+
[MimeTypes.OctetStream]: "exe",
|
|
80
|
+
[MimeTypes.UnknownBinary]: "unknown",
|
|
81
|
+
[MimeTypes.M3U]: "m3u",
|
|
82
|
+
[MimeTypes.M3U8]: "m3u8",
|
|
83
|
+
[MimeTypes.PLS]: "pls",
|
|
84
|
+
[MimeTypes.XSPF]: "xspf",
|
|
85
|
+
[MimeTypes.DPL]: "dpl"
|
|
86
|
+
});
|
|
87
|
+
let extensionToMimeMap;
|
|
88
|
+
const getExtensionToMiniMap = () => (extensionToMimeMap || (extensionToMimeMap = gsBase.invertRecordKv(getMiniToExtensionMap())), extensionToMimeMap), MineExtensionRegexp = /^\.?(\w+)(?:\/([0-9a-z-+.]+)\s*(?:;.*charset\s*=\s*([0-9a-z-]+).*)?)?$/i;
|
|
89
|
+
function getExtensionMime(extOrMine) {
|
|
90
|
+
const match = MineExtensionRegexp.exec(extOrMine);
|
|
91
|
+
let mime, ext;
|
|
92
|
+
return match?.[2] ? (mime = `${match[1]}/${match[2]}`, ext = getMiniToExtensionMap()?.[mime] || "unknown") : match?.[1] && (ext = match[1], mime = getExtensionToMiniMap()[ext] || MimeTypes.UnknownBinary), match?.[3] && (mime = `${mime}; charset=${match[3]}`), {
|
|
93
|
+
ext,
|
|
94
|
+
mime
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
let magicNumbers;
|
|
98
|
+
const getMagicNumbers = () => magicNumbers || (magicNumbers = [
|
|
99
|
+
// 文本类型
|
|
100
|
+
["EFBBBF", MimeTypes.TextUTF8],
|
|
101
|
+
["FEFF", MimeTypes.TextUTF16BE],
|
|
102
|
+
["FFFE", MimeTypes.TextUTF16LE],
|
|
103
|
+
// 图片类型
|
|
104
|
+
["FFD8FF", MimeTypes.JPEG],
|
|
105
|
+
["89504E47", MimeTypes.PNG],
|
|
106
|
+
["47494638", MimeTypes.GIF],
|
|
107
|
+
["49492A00", MimeTypes.TIFF],
|
|
108
|
+
["4D4D002A", MimeTypes.TIFF],
|
|
109
|
+
["424D", MimeTypes.BMP],
|
|
110
|
+
["00000100", MimeTypes.ICO],
|
|
111
|
+
["38425053", MimeTypes.PSD],
|
|
112
|
+
["52494646", MimeTypes.WebP],
|
|
113
|
+
["57454250", MimeTypes.WebP],
|
|
114
|
+
// 音频文件类型
|
|
115
|
+
["494433", MimeTypes.MP3],
|
|
116
|
+
["4F676753", MimeTypes.OGG],
|
|
117
|
+
["57415645", MimeTypes.WAV],
|
|
118
|
+
["664C6143", MimeTypes.FLAC],
|
|
119
|
+
["000001BA", MimeTypes.MPEGPS],
|
|
120
|
+
// 视频文件类型
|
|
121
|
+
["000001BA", MimeTypes.MPEG],
|
|
122
|
+
["000001B3", MimeTypes.MPEG],
|
|
123
|
+
["1A45DFA3", MimeTypes.MKV],
|
|
124
|
+
["6674797069736F6D", MimeTypes.MP4],
|
|
125
|
+
["0000001866747970", MimeTypes.MP4],
|
|
126
|
+
["667479706d703432", MimeTypes.MP4],
|
|
127
|
+
["47", MimeTypes.MP2T],
|
|
128
|
+
["1A45DFA3", MimeTypes.WebM],
|
|
129
|
+
// 压缩文件类型
|
|
130
|
+
["504B0304", MimeTypes.ZIP],
|
|
131
|
+
["52617221", MimeTypes.RAR],
|
|
132
|
+
["1F8B08", MimeTypes.GZIP],
|
|
133
|
+
["75737461", MimeTypes.TAR],
|
|
134
|
+
["425A68", MimeTypes.BZIP2],
|
|
135
|
+
["377ABCAF271C", MimeTypes.SEVEN_ZIP],
|
|
136
|
+
// 应用程序和文档类型
|
|
137
|
+
["25504446", MimeTypes.PDF],
|
|
138
|
+
["D0CF11E0A1B11AE1", MimeTypes.DOC],
|
|
139
|
+
["7B5C727466", MimeTypes.RTF],
|
|
140
|
+
["4D5A", MimeTypes.EXE],
|
|
141
|
+
["FFD8FFE0", MimeTypes.JPEG],
|
|
142
|
+
//可执行文件
|
|
143
|
+
["MZ", MimeTypes.OctetStream]
|
|
144
|
+
]);
|
|
145
|
+
async function sliceHeader(header, end, start = 0) {
|
|
146
|
+
let arrayHeader;
|
|
147
|
+
return header instanceof Blob ? arrayHeader = new Uint8Array(await header.slice(start, end).arrayBuffer()) : header instanceof ArrayBuffer ? arrayHeader = new Uint8Array(header.slice(start, end)) : arrayHeader = header.slice(start, end), arrayHeader;
|
|
148
|
+
}
|
|
149
|
+
async function sliceHexString(header, end, start = 0) {
|
|
150
|
+
return Array.from(await sliceHeader(header, end, start)).map((b) => b.toString(16).padStart(2, "0")).join("").toUpperCase();
|
|
151
|
+
}
|
|
152
|
+
async function sliceText(header, end, start = 0) {
|
|
153
|
+
return new TextDecoder().decode(await sliceHeader(header, end, start));
|
|
154
|
+
}
|
|
155
|
+
async function parseHexHeader(header) {
|
|
156
|
+
const hexString = await sliceHexString(header, 8);
|
|
157
|
+
for (const [magic, mimeType] of getMagicNumbers())
|
|
158
|
+
if (hexString.startsWith(magic))
|
|
159
|
+
return mimeType;
|
|
160
|
+
}
|
|
161
|
+
const ZipSubHeaders = [
|
|
162
|
+
["word/", MimeTypes.DOCX],
|
|
163
|
+
["ppt/", MimeTypes.PPTX],
|
|
164
|
+
["xl/", MimeTypes.XLSX],
|
|
165
|
+
["@Uu", MimeTypes.Fbr],
|
|
166
|
+
["mimetypeapplication/", MimeTypes.AdobeXD]
|
|
167
|
+
];
|
|
168
|
+
async function parseZipL2Header(header) {
|
|
169
|
+
const subHeader = await sliceText(header, 50, 30);
|
|
170
|
+
for (const [header2, type] of ZipSubHeaders)
|
|
171
|
+
if (subHeader.includes(header2))
|
|
172
|
+
return type;
|
|
173
|
+
return MimeTypes.ZIP;
|
|
174
|
+
}
|
|
175
|
+
const SimpleDataTypePrefix = "//", SimpleDataHeaderPrefix = "SimpleData,", SimpleDataHeaderRegexp = new RegExp(`^(${SimpleDataHeaderPrefix})?(\\{.*\\}|\\[.*\\])$`, "i"), textHeaderTypes = [
|
|
176
|
+
[/^<(!DOCTYPE\s+)?html/i, MimeTypes.HTML],
|
|
177
|
+
[/^<svg/i, MimeTypes.SVG],
|
|
178
|
+
[/^<(\?xml|\w+)/i, MimeTypes.XML],
|
|
179
|
+
[/^[{\[]/i, MimeTypes.JSON],
|
|
180
|
+
[/^8BPS/i, MimeTypes.PSD],
|
|
181
|
+
[/^@?(echo|chcp|set)/i, MimeTypes.Bat],
|
|
182
|
+
[new RegExp(`^${SimpleDataHeaderPrefix}`, "i"), MimeTypes.SimpleData],
|
|
183
|
+
[/^DAUMPLAYLIST/i, MimeTypes.DPL]
|
|
184
|
+
];
|
|
185
|
+
async function parseTextHeader(header) {
|
|
186
|
+
const textHeader = (await sliceText(header, 50)).trim();
|
|
187
|
+
for (const [regexp, type] of textHeaderTypes)
|
|
188
|
+
if (regexp.test(textHeader))
|
|
189
|
+
return type;
|
|
190
|
+
}
|
|
191
|
+
const unknownHeaders = /stream|unknown|binary|text|xml'/;
|
|
192
|
+
async function parseMime(header) {
|
|
193
|
+
const blobType = header.type || "";
|
|
194
|
+
if (blobType && !unknownHeaders.test(blobType))
|
|
195
|
+
return blobType;
|
|
196
|
+
let textType = blobType?.includes(MimeTypes.TextPlain) ? await parseTextHeader(header) : "";
|
|
197
|
+
if (textType) return textType;
|
|
198
|
+
const hexType = await parseHexHeader(header);
|
|
199
|
+
return /zip$/.test(hexType) ? await parseZipL2Header(header) : (textType = !hexType || hexType.includes(MimeTypes.TextPlain) ? await parseTextHeader(header) : "", unknownHeaders.test(hexType) ? textType || blobType || hexType || void 0 : textType || hexType || blobType || void 0);
|
|
200
|
+
}
|
|
201
|
+
async function parseMimeExt(header) {
|
|
202
|
+
return getExtensionMime(`${await parseMime(header)}`);
|
|
203
|
+
}
|
|
204
|
+
const decodeBase64 = jsBase64.decode, encodeBase64 = jsBase64.encode;
|
|
205
|
+
function supportsCompression() {
|
|
206
|
+
return typeof CompressionStream < "u" && typeof DecompressionStream < "u";
|
|
207
|
+
}
|
|
208
|
+
async function compressData(data, format = "gzip") {
|
|
209
|
+
const compressionStream = new CompressionStream(format), writer = compressionStream.writable.getWriter();
|
|
210
|
+
return writer.write(data instanceof Uint8Array ? data : new Uint8Array(data)), writer.close(), await new Response(compressionStream.readable).arrayBuffer();
|
|
211
|
+
}
|
|
212
|
+
async function decompressData(compressedData, format = "gzip") {
|
|
213
|
+
const decompressionStream = new DecompressionStream(format), writer = decompressionStream.writable.getWriter();
|
|
214
|
+
writer.write(compressedData instanceof Uint8Array ? compressedData : new Uint8Array(compressedData)), writer.close();
|
|
215
|
+
const decompressedStream = decompressionStream.readable;
|
|
216
|
+
return await new Response(decompressedStream).arrayBuffer();
|
|
217
|
+
}
|
|
218
|
+
async function compressText(data, format = "gzip") {
|
|
219
|
+
return await compressData(new TextEncoder().encode(data), format);
|
|
220
|
+
}
|
|
221
|
+
async function decompressText(compressedData, format = "gzip") {
|
|
222
|
+
return new TextDecoder().decode(await decompressData(compressedData, format));
|
|
223
|
+
}
|
|
224
|
+
async function compressToBase64(data, format = "gzip") {
|
|
225
|
+
return btoa(String.fromCharCode(...new Uint8Array(await compressData(data, format))));
|
|
226
|
+
}
|
|
227
|
+
async function compressTextToBase64(data, format = "gzip") {
|
|
228
|
+
return btoa(String.fromCharCode(...new Uint8Array(await compressText(data, format))));
|
|
229
|
+
}
|
|
230
|
+
async function decompressFromBase64(base64, format = "gzip") {
|
|
231
|
+
const binaryString = atob(base64), len = binaryString.length, bytes = new Uint8Array(len);
|
|
232
|
+
for (let i = 0; i < len; i++)
|
|
233
|
+
bytes[i] = binaryString.charCodeAt(i);
|
|
234
|
+
return await decompressData(bytes, format);
|
|
235
|
+
}
|
|
236
|
+
async function decompressTextFromBase64(base64, format = "gzip") {
|
|
237
|
+
return new TextDecoder().decode(await decompressFromBase64(base64, format));
|
|
238
|
+
}
|
|
239
|
+
class NamedWeakMap {
|
|
240
|
+
valueCreator;
|
|
241
|
+
objectRefs = {};
|
|
242
|
+
// 存储对象的弱引用
|
|
243
|
+
constructor(valueCreator) {
|
|
244
|
+
this.valueCreator = valueCreator;
|
|
245
|
+
}
|
|
246
|
+
get(key) {
|
|
247
|
+
let value = this.objectRefs[key]?.deref();
|
|
248
|
+
return value || (this.valueCreator && this.set(key, value = this.valueCreator(key)), value);
|
|
249
|
+
}
|
|
250
|
+
set(key, value) {
|
|
251
|
+
this.objectRefs[key] = new WeakRef(value);
|
|
252
|
+
}
|
|
253
|
+
destroy() {
|
|
254
|
+
for (let key in this.objectRefs)
|
|
255
|
+
this.objectRefs[key]?.deref() || delete this.objectRefs[key];
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
async function readTmpData(data, count = 30) {
|
|
259
|
+
const arr = [];
|
|
260
|
+
let i = 1;
|
|
261
|
+
if (gsBase.isIterable(data)) {
|
|
262
|
+
for (const d of data)
|
|
263
|
+
if (arr.push(d), ++i > count) break;
|
|
264
|
+
} else if (gsBase.isAsyncIterable(data)) {
|
|
265
|
+
for await (const d of data)
|
|
266
|
+
if (arr.push(d), ++i > count) break;
|
|
267
|
+
}
|
|
268
|
+
return arr;
|
|
269
|
+
}
|
|
270
|
+
async function checkFieldsRecord(data) {
|
|
271
|
+
if (data.fields) return fieldExclude(data.fields, data.excludeFields);
|
|
272
|
+
const tmpArr = await readTmpData(data.data), fields = {};
|
|
273
|
+
let tpl, n = 0;
|
|
274
|
+
for (const obj of tmpArr) {
|
|
275
|
+
const len = Object.keys(obj).length;
|
|
276
|
+
len > n && (n = len, tpl = obj);
|
|
277
|
+
}
|
|
278
|
+
n = 0;
|
|
279
|
+
for (const key in tpl)
|
|
280
|
+
fields[key] = n++;
|
|
281
|
+
return fieldExclude(fields, data.excludeFields);
|
|
282
|
+
}
|
|
283
|
+
function createFieldEntries(fields) {
|
|
284
|
+
return Object.entries(fields).sort(fieldEntriesSort);
|
|
285
|
+
}
|
|
286
|
+
function fieldExclude(record, names) {
|
|
287
|
+
if (!names) return record;
|
|
288
|
+
const difference = {}, entries = Object.entries(record).sort(fieldEntriesSort);
|
|
289
|
+
let i = 0;
|
|
290
|
+
for (const [key] of entries)
|
|
291
|
+
names.includes(key) || (difference[key] = i++);
|
|
292
|
+
return difference;
|
|
293
|
+
}
|
|
294
|
+
function fieldEntriesSort(a, b) {
|
|
295
|
+
return a[1] - b[1];
|
|
296
|
+
}
|
|
297
|
+
function createDataLine(fields, obj) {
|
|
298
|
+
const arr = [];
|
|
299
|
+
for (const [key] of fields)
|
|
300
|
+
arr.push(obj[key]);
|
|
301
|
+
const str = JSON.stringify(arr);
|
|
302
|
+
return str.slice(1, str.length - 1);
|
|
303
|
+
}
|
|
304
|
+
const exportSimpleData = (arg) => gsBase.joinAsyncIterable(new SimpleDataExport(arg));
|
|
305
|
+
class SimpleDataExport {
|
|
306
|
+
_arg;
|
|
307
|
+
constructor(arg) {
|
|
308
|
+
this._arg = arg;
|
|
309
|
+
}
|
|
310
|
+
async *[Symbol.asyncIterator]() {
|
|
311
|
+
const { header, exportData } = this._arg;
|
|
312
|
+
yield `${SimpleDataHeaderPrefix}${JSON.stringify(header)}`;
|
|
313
|
+
for (const data of exportData) {
|
|
314
|
+
const fields = await checkFieldsRecord(data), fieldsEntries = createFieldEntries(fields), header2 = { name: data.name, fields };
|
|
315
|
+
if (data.description && (header2.description = data.description), data.extraData && (header2.extraData = data.extraData), data.defaultValues && (header2.defaultValues = data.defaultValues), yield `${SimpleDataTypePrefix}${JSON.stringify(header2)}`, gsBase.isIterable(data.data))
|
|
316
|
+
for (const d of data.data)
|
|
317
|
+
yield createDataLine(fieldsEntries, d);
|
|
318
|
+
else if (gsBase.isAsyncIterable(data.data))
|
|
319
|
+
for await (const d of data.data)
|
|
320
|
+
yield createDataLine(fieldsEntries, d);
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
destroy() {
|
|
324
|
+
delete this._arg;
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
const SpaceRegex = /^\s*$/;
|
|
328
|
+
class SimpleDataReader {
|
|
329
|
+
_textReader;
|
|
330
|
+
constructor(dataOrReader) {
|
|
331
|
+
gsBase.isString(dataOrReader) ? this._textReader = new gsBase.StringTextReader(dataOrReader) : this._textReader = dataOrReader;
|
|
332
|
+
}
|
|
333
|
+
getHeader() {
|
|
334
|
+
const line = this._textReader.firstLine;
|
|
335
|
+
return line ? SimpleDataHeaderRegexp.exec(line)?.[2] || {} : {};
|
|
336
|
+
}
|
|
337
|
+
getSize() {
|
|
338
|
+
return this._textReader.size;
|
|
339
|
+
}
|
|
340
|
+
*read(targetName) {
|
|
341
|
+
let name, fields, meta;
|
|
342
|
+
for (const { data, progress } of this._textReader) {
|
|
343
|
+
if (SpaceRegex.test(data)) continue;
|
|
344
|
+
if (data.startsWith(SimpleDataTypePrefix)) {
|
|
345
|
+
if (meta = JSON.parse(data.slice(SimpleDataTypePrefix.length)), name && name === targetName) return;
|
|
346
|
+
name = meta.name, fields = [];
|
|
347
|
+
for (const [name2, index] of Object.entries(meta.fields))
|
|
348
|
+
fields.push([name2, Number(index)]);
|
|
349
|
+
continue;
|
|
350
|
+
} else if (!name || !fields || targetName && name !== targetName)
|
|
351
|
+
continue;
|
|
352
|
+
const lineArr = JSON.parse(`[${data}]`), obj = meta?.defaultValues ? gsBase.copyObject(meta?.defaultValues) : {};
|
|
353
|
+
for (const [name2, index] of fields)
|
|
354
|
+
obj[name2] = lineArr[index];
|
|
355
|
+
yield {
|
|
356
|
+
name,
|
|
357
|
+
data: obj,
|
|
358
|
+
progress,
|
|
359
|
+
meta
|
|
360
|
+
};
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
getAll(targetName) {
|
|
364
|
+
const arr = [];
|
|
365
|
+
for (const { data } of this.read(targetName))
|
|
366
|
+
arr.push(data);
|
|
367
|
+
return arr;
|
|
368
|
+
}
|
|
369
|
+
async pageRead(fn, limit = 1e3) {
|
|
370
|
+
let arr = [];
|
|
371
|
+
const total = this._textReader.size;
|
|
372
|
+
let lastName, lastDataHeader;
|
|
373
|
+
for (const { name, data, progress, meta } of this.read())
|
|
374
|
+
arr.push(data), arr.length >= limit ? (await fn(name, arr, progress, meta), arr = []) : (lastName = name, lastDataHeader = meta);
|
|
375
|
+
arr.length && await fn(lastName, arr, total, lastDataHeader);
|
|
376
|
+
}
|
|
377
|
+
async namedRead(fnRecord, limit = 1e3) {
|
|
378
|
+
await this.pageRead(async (name, page, progress, dataHeader) => {
|
|
379
|
+
name in fnRecord && await fnRecord[name](page, progress, dataHeader);
|
|
380
|
+
}, limit);
|
|
381
|
+
}
|
|
382
|
+
destroy() {
|
|
383
|
+
try {
|
|
384
|
+
this._textReader?.destroy?.();
|
|
385
|
+
} finally {
|
|
386
|
+
delete this._textReader;
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
function base64ToBlob(base64, mimeType) {
|
|
391
|
+
const index = base64.indexOf(";base64,");
|
|
392
|
+
index > -1 && (base64 = base64.slice(index + 8));
|
|
393
|
+
const binaryString = atob(base64), len = binaryString.length, bytes = new Uint8Array(len);
|
|
394
|
+
for (let i = 0; i < len; i++)
|
|
395
|
+
bytes[i] = binaryString.charCodeAt(i);
|
|
396
|
+
return new Blob([bytes], { type: mimeType });
|
|
397
|
+
}
|
|
398
|
+
var BlobTypes = /* @__PURE__ */ ((BlobTypes2) => (BlobTypes2[BlobTypes2.Text = 1] = "Text", BlobTypes2[BlobTypes2.Base64 = 2] = "Base64", BlobTypes2[BlobTypes2.Image = 3] = "Image", BlobTypes2[BlobTypes2.Bitmap = 4] = "Bitmap", BlobTypes2[BlobTypes2.Svg = 5] = "Svg", BlobTypes2[BlobTypes2.Html = 6] = "Html", BlobTypes2[BlobTypes2.Xml = 7] = "Xml", BlobTypes2[BlobTypes2.Json = 8] = "Json", BlobTypes2[BlobTypes2.SimpleData = 9] = "SimpleData", BlobTypes2[BlobTypes2.NotSupped = 10] = "NotSupped", BlobTypes2))(BlobTypes || {});
|
|
399
|
+
function readBlobData(blob, call, encoding) {
|
|
400
|
+
return new Promise((resolve, reject) => {
|
|
401
|
+
const reader = new FileReader();
|
|
402
|
+
reader.onload = () => {
|
|
403
|
+
resolve(reader.result);
|
|
404
|
+
}, reader.onerror = reject, reader[call](blob, encoding);
|
|
405
|
+
});
|
|
406
|
+
}
|
|
407
|
+
const textBlobTypes = [
|
|
408
|
+
BlobTypes.Text,
|
|
409
|
+
BlobTypes.Html,
|
|
410
|
+
BlobTypes.Svg,
|
|
411
|
+
BlobTypes.Xml,
|
|
412
|
+
BlobTypes.Json,
|
|
413
|
+
BlobTypes.SimpleData
|
|
414
|
+
], parseEncodingRegex = /<meta[^>]+charset\s*=\s*["']?([\w-]+)|^<\?xml[^>]+encoding\s*=\s*"?([\w-]+)/i;
|
|
415
|
+
async function readTextBlob(blob, type, encoding) {
|
|
416
|
+
if (!encoding) {
|
|
417
|
+
const [, e1, e2] = parseEncodingRegex.exec(await blob.slice(0, 1024).text()) || [];
|
|
418
|
+
encoding = e1 || e2;
|
|
419
|
+
}
|
|
420
|
+
const text = await readBlobData(blob, "readAsText", encoding);
|
|
421
|
+
switch (type) {
|
|
422
|
+
case BlobTypes.Svg:
|
|
423
|
+
return parseText(text, MimeTypes.SVG).querySelector("svg");
|
|
424
|
+
case BlobTypes.Xml:
|
|
425
|
+
return parseText(text, MimeTypes.XML);
|
|
426
|
+
case BlobTypes.Html:
|
|
427
|
+
return parseText(text, MimeTypes.HTML);
|
|
428
|
+
case BlobTypes.SimpleData:
|
|
429
|
+
return new SimpleDataReader(text);
|
|
430
|
+
case BlobTypes.Json:
|
|
431
|
+
return JSON.parse(text);
|
|
432
|
+
default:
|
|
433
|
+
return text;
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
function parseText(text, type) {
|
|
437
|
+
return new globalThis.DOMParser().parseFromString(text, type);
|
|
438
|
+
}
|
|
439
|
+
const base64BlobTypes = [
|
|
440
|
+
BlobTypes.Base64,
|
|
441
|
+
BlobTypes.Image
|
|
442
|
+
];
|
|
443
|
+
function readBase64Blob(blob, type) {
|
|
444
|
+
return new Promise(async (resolve, reject) => {
|
|
445
|
+
const text = await readBlobData(blob, "readAsDataURL");
|
|
446
|
+
switch (type) {
|
|
447
|
+
case BlobTypes.Image:
|
|
448
|
+
const image = new globalThis.Image();
|
|
449
|
+
image.onload = () => resolve(image), image.onerror = reject, image.src = text;
|
|
450
|
+
break;
|
|
451
|
+
default:
|
|
452
|
+
resolve(text);
|
|
453
|
+
}
|
|
454
|
+
});
|
|
455
|
+
}
|
|
456
|
+
function miniToBlobType(miniType) {
|
|
457
|
+
switch (miniType) {
|
|
458
|
+
case MimeTypes.TextPlain:
|
|
459
|
+
return BlobTypes.Text;
|
|
460
|
+
case MimeTypes.Base64:
|
|
461
|
+
return BlobTypes.Base64;
|
|
462
|
+
case MimeTypes.JPEG:
|
|
463
|
+
case MimeTypes.PNG:
|
|
464
|
+
case MimeTypes.GIF:
|
|
465
|
+
case MimeTypes.WebP:
|
|
466
|
+
case MimeTypes.BMP:
|
|
467
|
+
case MimeTypes.ICO:
|
|
468
|
+
return BlobTypes.Image;
|
|
469
|
+
case MimeTypes.SVG:
|
|
470
|
+
return BlobTypes.Svg;
|
|
471
|
+
case MimeTypes.HTML:
|
|
472
|
+
return BlobTypes.Html;
|
|
473
|
+
case MimeTypes.XML:
|
|
474
|
+
return BlobTypes.Xml;
|
|
475
|
+
case MimeTypes.JSON:
|
|
476
|
+
return BlobTypes.Json;
|
|
477
|
+
case MimeTypes.SimpleData:
|
|
478
|
+
return BlobTypes.SimpleData;
|
|
479
|
+
default:
|
|
480
|
+
return BlobTypes.NotSupped;
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
async function readBlob(blob, ...args) {
|
|
484
|
+
let i = 0;
|
|
485
|
+
const argType = gsBase.isNumber(args[i]) ? args[i++] : void 0, encoding = gsBase.isString(args[i]) ? args[i++] : void 0, mimeType = !argType && await parseMime(blob), type = argType || miniToBlobType(mimeType);
|
|
486
|
+
let result;
|
|
487
|
+
return type === BlobTypes.Bitmap ? result = await globalThis.createImageBitmap(blob) : textBlobTypes.includes(type) ? result = await readTextBlob(blob, type, encoding) : base64BlobTypes.includes(type) && (result = await readBase64Blob(blob, type)), argType && type !== BlobTypes.NotSupped ? result : {
|
|
488
|
+
...getExtensionMime(mimeType),
|
|
489
|
+
blob,
|
|
490
|
+
type,
|
|
491
|
+
result
|
|
492
|
+
};
|
|
493
|
+
}
|
|
494
|
+
exports.BlobTypes = BlobTypes, exports.FileMimeTypes = FileMimeTypes, exports.MimeTypes = MimeTypes, exports.NamedWeakMap = NamedWeakMap, exports.NetMimeTypes = NetMimeTypes, exports.SimpleDataExport = SimpleDataExport, exports.SimpleDataReader = SimpleDataReader, exports.base64ToBlob = base64ToBlob, exports.compressData = compressData, exports.compressText = compressText, exports.compressTextToBase64 = compressTextToBase64, exports.compressToBase64 = compressToBase64, exports.decodeBase64 = decodeBase64, exports.decompressData = decompressData, exports.decompressFromBase64 = decompressFromBase64, exports.decompressText = decompressText, exports.decompressTextFromBase64 = decompressTextFromBase64, exports.encodeBase64 = encodeBase64, exports.exportSimpleData = exportSimpleData, exports.getExtensionMime = getExtensionMime, exports.miniToBlobType = miniToBlobType, exports.parseMime = parseMime, exports.parseMimeExt = parseMimeExt, exports.readBlob = readBlob, exports.readBlobData = readBlobData, exports.supportsCompression = supportsCompression;
|