@ohayojp.com/components
Version:
Common business components of ohayojp.
323 lines (316 loc) • 10.3 kB
JavaScript
import { HttpClient } from '@angular/common/http';
import { Injectable, NgZone, ɵɵdefineInjectable, ɵɵinject, NgModule } from '@angular/core';
import { LazyService, OhayoConfigService, OhayoUtilModule } from '@ohayojp.com/util';
import { saveAs } from 'file-saver';
import { CommonModule } from '@angular/common';
/**
* @fileoverview added by tsickle
* Generated from: zip.types.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/**
* @record
*/
function ZipWriteOptions() { }
if (false) {
/**
* save file name, default: `download.zip`
* @type {?|undefined}
*/
ZipWriteOptions.prototype.filename;
/** @type {?|undefined} */
ZipWriteOptions.prototype.options;
/**
* The optional function called on each internal update with the metadata.
* @type {?|undefined}
*/
ZipWriteOptions.prototype.update;
/**
* triggers when saveas
* @type {?|undefined}
*/
ZipWriteOptions.prototype.callback;
}
/**
* @record
*/
function ZipSaveOptions() { }
if (false) {
/**
* 指定保存文件名,默认 `download.zip`
* @type {?|undefined}
*/
ZipSaveOptions.prototype.filename;
/**
* JSZip `generateAsync` 方法的 `options` 选项
* @see https://stuk.github.io/jszip/documentation/api_jszip/generate_async.html
* @type {?|undefined}
*/
ZipSaveOptions.prototype.options;
/**
* JSZip `generateAsync` 方法的 `onUpdate` 回调
* @see https://stuk.github.io/jszip/documentation/api_jszip/generate_async.html
* @type {?|undefined}
*/
ZipSaveOptions.prototype.update;
/**
* 保存前回调方法
* @type {?|undefined}
*/
ZipSaveOptions.prototype.callback;
}
/**
* @fileoverview added by tsickle
* Generated from: zip.service.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
class ZipService {
/**
* @param {?} http
* @param {?} lazy
* @param {?} configSrv
* @param {?} ngZone
*/
constructor(http, lazy, configSrv, ngZone) {
this.http = http;
this.lazy = lazy;
this.ngZone = ngZone;
this.cog = (/** @type {?} */ (configSrv.merge('zip', {
url: '//cdn.bootcss.com/jszip/3.3.0/jszip.min.js',
utils: [],
})));
}
/**
* @private
* @return {?}
*/
init() {
return this.lazy.load([(/** @type {?} */ (this.cog.url))].concat((/** @type {?} */ (this.cog.utils))));
}
/**
* @private
* @param {?} zip
* @return {?}
*/
check(zip) {
if (!zip)
throw new Error('get instance via `ZipService.create()`');
}
/**
* 解压
* @param {?} fileOrUrl
* @param {?=} options
* @return {?}
*/
read(fileOrUrl, options) {
return new Promise((/**
* @param {?} resolve
* @param {?} reject
* @return {?}
*/
(resolve, reject) => {
/** @type {?} */
const resolveCallback = (/**
* @param {?} data
* @return {?}
*/
(data) => {
this.ngZone.run((/**
* @return {?}
*/
() => resolve(data)));
});
this.init().then((/**
* @return {?}
*/
() => {
this.ngZone.runOutsideAngular((/**
* @return {?}
*/
() => {
// from url
if (typeof fileOrUrl === 'string') {
this.http.request('GET', fileOrUrl, { responseType: 'arraybuffer' }).subscribe((/**
* @param {?} res
* @return {?}
*/
(res) => {
JSZip.loadAsync(res, options).then((/**
* @param {?} ret
* @return {?}
*/
(ret) => resolveCallback(ret)));
}), (/**
* @param {?} err
* @return {?}
*/
(err) => {
reject(err);
}));
return;
}
// from file
/** @type {?} */
const reader = new FileReader();
reader.onload = (/**
* @param {?} e
* @return {?}
*/
(e) => {
JSZip.loadAsync(e.target.result, options).then((/**
* @param {?} ret
* @return {?}
*/
(ret) => resolveCallback(ret)));
});
reader.readAsBinaryString((/** @type {?} */ (fileOrUrl)));
}));
}));
}));
}
/**
* 创建 Zip 实例,用于创建压缩文件
* @return {?}
*/
create() {
return new Promise((/**
* @param {?} resolve
* @return {?}
*/
resolve => {
this.init().then((/**
* @return {?}
*/
() => {
/** @type {?} */
const zipFile = new JSZip();
resolve(zipFile);
}));
}));
}
/**
* 下载URL资源并写入 zip
* @param {?} zip Zip 实例
* @param {?} path Zip 路径,例如: `text.txt`、`txt/hi.txt`
* @param {?} url URL 地址
* @return {?}
*/
pushUrl(zip, path, url) {
this.check(zip);
return new Promise((/**
* @param {?} resolve
* @param {?} reject
* @return {?}
*/
(resolve, reject) => {
this.http.request('GET', url, { responseType: 'arraybuffer' }).subscribe((/**
* @param {?} res
* @return {?}
*/
(res) => {
zip.file(path, res);
resolve();
}), (/**
* @param {?} error
* @return {?}
*/
(error) => {
reject({ url, error });
}));
}));
}
/**
* 保存Zip并执行打开保存对话框
*
* @param {?} zip zip 对象,务必通过 `create()` 构建
* @param {?=} options 额外参数,
* @return {?}
*/
save(zip, options) {
this.check(zip);
/** @type {?} */
const opt = (/** @type {?} */ (Object.assign({}, options)));
return new Promise((/**
* @param {?} resolve
* @param {?} reject
* @return {?}
*/
(resolve, reject) => {
zip.generateAsync(Object.assign({ type: 'blob' }, opt.options), opt.update).then((/**
* @param {?} data
* @return {?}
*/
(data) => {
if (opt.callback)
opt.callback(data);
saveAs(data, opt.filename || 'download.zip');
resolve();
}), (/**
* @param {?} err
* @return {?}
*/
(err) => {
reject(err);
}));
}));
}
}
ZipService.decorators = [
{ type: Injectable, args: [{ providedIn: 'root' },] }
];
/** @nocollapse */
ZipService.ctorParameters = () => [
{ type: HttpClient },
{ type: LazyService },
{ type: OhayoConfigService },
{ type: NgZone }
];
/** @nocollapse */ ZipService.ɵprov = ɵɵdefineInjectable({ factory: function ZipService_Factory() { return new ZipService(ɵɵinject(HttpClient), ɵɵinject(LazyService), ɵɵinject(OhayoConfigService), ɵɵinject(NgZone)); }, token: ZipService, providedIn: "root" });
if (false) {
/**
* @type {?}
* @private
*/
ZipService.prototype.cog;
/**
* @type {?}
* @private
*/
ZipService.prototype.http;
/**
* @type {?}
* @private
*/
ZipService.prototype.lazy;
/**
* @type {?}
* @private
*/
ZipService.prototype.ngZone;
}
/**
* @fileoverview added by tsickle
* Generated from: zip.module.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
class ZipModule {
}
ZipModule.decorators = [
{
type: NgModule, args: [{
imports: [CommonModule, OhayoUtilModule],
},]
}
];
/**
* @fileoverview added by tsickle
* Generated from: public_api.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/**
* @fileoverview added by tsickle
* Generated from: zip.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
export { ZipModule, ZipService };
//# sourceMappingURL=zip.js.map