@yelon/abc
Version:
Common business components of ng-yunzai.
1 lines • 7.58 kB
Source Map (JSON)
{"version":3,"file":"zip.mjs","sources":["../../../../packages/abc/zip/zip.service.ts","../../../../packages/abc/zip/zip.ts"],"sourcesContent":["import { HttpClient } from '@angular/common/http';\nimport { Injectable, NgZone, inject } from '@angular/core';\n\nimport { saveAs } from 'file-saver';\nimport type jsZipType from 'jszip';\n\nimport { YunzaiConfigService, YunzaiZipConfig } from '@yelon/util/config';\nimport { ZoneOutside } from '@yelon/util/decorator';\nimport { LazyResult, LazyService } from '@yelon/util/other';\n\nimport { ZipSaveOptions } from './zip.types';\n\ndeclare const JSZip: jsZipType;\n\n@Injectable({ providedIn: 'root' })\nexport class ZipService {\n private readonly http = inject(HttpClient);\n private readonly lazy = inject(LazyService);\n private readonly ngZone = inject(NgZone);\n private readonly cogSrv = inject(YunzaiConfigService);\n\n private cog: YunzaiZipConfig;\n\n constructor() {\n this.cog = this.cogSrv.merge('zip', {\n url: 'https://cdn.jsdelivr.net/npm/jszip@3/dist/jszip.min.js',\n utils: []\n })!;\n }\n\n private init(): Promise<LazyResult[]> {\n return this.lazy.load([this.cog.url!].concat(this.cog.utils!));\n }\n\n private check(zip?: jsZipType | null): void {\n if (!zip) throw new Error('get instance via `ZipService.create()`');\n }\n\n /** 解压 */\n @ZoneOutside()\n read(fileOrUrl: File | string, options?: jsZipType.JSZipLoadOptions): Promise<jsZipType> {\n return new Promise<jsZipType>((resolve, reject) => {\n const resolveCallback = (data: jsZipType): void => {\n this.ngZone.run(() => resolve(data));\n };\n this.init().then(() => {\n // from url\n if (typeof fileOrUrl === 'string') {\n this.http.request('GET', fileOrUrl, { responseType: 'arraybuffer' }).subscribe({\n next: (res: ArrayBuffer) => {\n JSZip.loadAsync(res, options).then((ret: jsZipType) => resolveCallback(ret));\n },\n error: err => {\n reject(err);\n }\n });\n return;\n }\n // from file\n const reader: FileReader = new FileReader();\n reader.onload = (e: ProgressEvent<FileReader>) => {\n JSZip.loadAsync(e.target!.result as ArrayBuffer, options).then((ret: jsZipType) => resolveCallback(ret));\n };\n reader.readAsBinaryString(fileOrUrl as File);\n });\n });\n }\n\n /** 创建 Zip 实例,用于创建压缩文件 */\n create(): Promise<jsZipType | null> {\n return new Promise<jsZipType | null>(resolve => {\n this.init()\n .then(() => {\n const zipFile = new JSZip();\n resolve(zipFile);\n })\n .catch(() => resolve(null));\n });\n }\n\n /**\n * 下载URL资源并写入 zip\n *\n * @param zip Zip 实例\n * @param path Zip 路径,例如: `text.txt`、`txt/hi.txt`\n * @param url URL 地址\n */\n pushUrl(zip: jsZipType | null, path: string, url: string): Promise<void> {\n this.check(zip);\n return new Promise<void>((resolve, reject) => {\n this.http.request('GET', url, { responseType: 'arraybuffer' }).subscribe({\n next: (res: ArrayBuffer) => {\n zip!.file(path, res);\n resolve();\n },\n error: error => {\n reject({ url, error });\n }\n });\n });\n }\n\n /**\n * 保存Zip并执行打开保存对话框\n *\n * @param zip zip 对象,务必通过 `create()` 构建\n * @param options 额外参数,\n */\n save(zip: jsZipType | null, options?: ZipSaveOptions): Promise<void> {\n this.check(zip);\n const opt = { filename: 'download.zip', ...options } as ZipSaveOptions;\n return new Promise<void>((resolve, reject) => {\n zip!.generateAsync<'blob'>({ type: 'blob', ...opt.options } as any, opt.update as any).then(\n data => {\n if (opt.callback) opt.callback(data);\n saveAs(data, opt.filename);\n resolve();\n },\n err => {\n reject(err);\n }\n );\n });\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}