{"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 { AlainConfigService, AlainZipConfig } from '@delon/util/config';\nimport { ZoneOutside } from '@delon/util/decorator';\nimport { LazyResult, LazyService } from '@delon/util/other';\nimport type { NzSafeAny } from 'ng-zorro-antd/core/types';\n\nimport { ZipSaveOptions } from './zip.types';\n\ndeclare var 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\n  private cog: AlainZipConfig;\n\n  constructor(configSrv: AlainConfigService) {\n    this.cog = configSrv.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 NzSafeAny, opt.update as NzSafeAny).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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"}