UNPKG

angular-material-datatransfer-lib

Version:

A HTML5 datatransfer UI for handling upload and download of multiple simultaneous files.

141 lines 15.2 kB
/** * @fileoverview added by tsickle * Generated from: lib/services/crypto.service.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Injectable, NgZone } from '@angular/core'; import * as cryptoBrowserify from 'crypto-browserify'; import { HashTypeImplementation } from '../enums/hash-type.enum'; import { EncodingTypeImplementation } from '../enums/encoding-type.enum'; import { HashContainer, StreamHashContainer } from '../models/hash-container.model'; export class CryptoService { /** * @param {?} zone */ constructor(zone) { this.zone = zone; // hash 4MB at a time this.STREAM_HASH_CHUNK_SIZE = 1024 * 1000 * 4; this.HASH_TYPE_IMPLEMENTATION = HashTypeImplementation.CryptoBrowserify; this.ENCODING_TYPE_IMPLEMENTATION = EncodingTypeImplementation.CryptoBrowserify; // Performance remains unchanged by running the hash function outside of Angular. // this.zone.runOutsideAngular(() => { } } /** * @param {?} file * @param {?} hashType * @param {?} encodingType * @param {?} inputEncodingType * @return {?} */ createHashContainer(file, hashType, encodingType, inputEncodingType) { /** @type {?} */ const container = new HashContainer(file, this.HASH_TYPE_IMPLEMENTATION, this.ENCODING_TYPE_IMPLEMENTATION, hashType, encodingType, inputEncodingType); container.hash = cryptoBrowserify.createHash(container.hashTypeString); container.reader.onload = (/** * @param {?} event * @return {?} */ function (event) { container.hashString = container.hash.update(event.target.result, container.inputEncodingTypeString) .digest(container.encodingTypeString); container.endDate = new Date(); container.percent = 100; }).bind(container); container.doWork = (/** * @return {?} */ function () { container.reader.readAsBinaryString(container.file); }); return container; } /** * @param {?} file * @param {?} hashType * @param {?} encodingType * @param {?} inputEncodingType * @param {?} successCallback * @param {?} errorCallback * @return {?} */ createStreamHashContainer(file, hashType, encodingType, inputEncodingType, successCallback, errorCallback) { /** @type {?} */ const container = new StreamHashContainer(file, this.HASH_TYPE_IMPLEMENTATION, this.ENCODING_TYPE_IMPLEMENTATION, hashType, encodingType, inputEncodingType); container.chunkSize = this.STREAM_HASH_CHUNK_SIZE; container.offset = 0; container.hash = cryptoBrowserify.createHash(container.hashTypeString); container.reader.onload = (/** * @param {?} event * @return {?} */ function (event) { /** @type {?} */ const binary = event.target.result; if (container.offset + container.chunkSize >= container.file.size) { container.hash.end(binary, container.inputEncodingTypeString); } else { container.hash.write(binary, container.inputEncodingTypeString); } container.offset += container.chunkSize; container.doWork(); }).bind(container); container.reader.onerror = (/** * @param {?} event * @return {?} */ function (event) { errorCallback(event, container); }); container.doWork = (/** * @return {?} */ function () { if (!container.isCancelled() && !container.isPaused()) { if (container.offset > container.file.size) { container.hashString = container.hash.read().toString(container.encodingTypeString); container.endDate = new Date(); container.percent = 100; successCallback(container); return; } /** @type {?} */ const slice = container.file.slice(container.offset, container.offset + container.chunkSize); container.reader.readAsBinaryString(slice); container.percent = Math.round(container.offset / file.size * 100); } }); return container; } } CryptoService.decorators = [ { type: Injectable } ]; /** @nocollapse */ CryptoService.ctorParameters = () => [ { type: NgZone } ]; if (false) { /** * @type {?} * @private */ CryptoService.prototype.STREAM_HASH_CHUNK_SIZE; /** * @type {?} * @private */ CryptoService.prototype.HASH_TYPE_IMPLEMENTATION; /** * @type {?} * @private */ CryptoService.prototype.ENCODING_TYPE_IMPLEMENTATION; /** * @type {?} * @private */ CryptoService.prototype.zone; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J5cHRvLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9hbmd1bGFyLW1hdGVyaWFsLWRhdGF0cmFuc2Zlci1saWIvIiwic291cmNlcyI6WyJsaWIvc2VydmljZXMvY3J5cHRvLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEtBQUssZ0JBQWdCLE1BQU0sbUJBQW1CLENBQUM7QUFDdEQsT0FBTyxFQUFFLHNCQUFzQixFQUFZLE1BQU0seUJBQXlCLENBQUM7QUFDM0UsT0FBTyxFQUFFLDBCQUEwQixFQUFnQixNQUFNLDZCQUE2QixDQUFDO0FBQ3ZGLE9BQU8sRUFBa0IsYUFBYSxFQUF3QixtQkFBbUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBSTFILE1BQU0sT0FBTyxhQUFhOzs7O0lBT3RCLFlBQW9CLElBQVk7UUFBWixTQUFJLEdBQUosSUFBSSxDQUFROztRQUpmLDJCQUFzQixHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ3pDLDZCQUF3QixHQUFHLHNCQUFzQixDQUFDLGdCQUFnQixDQUFDO1FBQ25FLGlDQUE0QixHQUFHLDBCQUEwQixDQUFDLGdCQUFnQixDQUFDO1FBR3hGLGlGQUFpRjtRQUNqRix3Q0FBd0M7SUFDNUMsQ0FBQzs7Ozs7Ozs7SUFFTSxtQkFBbUIsQ0FBQyxJQUFVLEVBQUUsUUFBa0IsRUFBRSxZQUEwQixFQUMxRCxpQkFBK0I7O2NBRWhELFNBQVMsR0FBRyxJQUFJLGFBQWEsQ0FDL0IsSUFBSSxFQUNKLElBQUksQ0FBQyx3QkFBd0IsRUFDN0IsSUFBSSxDQUFDLDRCQUE0QixFQUNqQyxRQUFRLEVBQ1IsWUFBWSxFQUNaLGlCQUFpQixDQUFDO1FBRXRCLFNBQVMsQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsQ0FBQztR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Q1Y7O3NCQUVLLEtBQUssR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQztnQkFDNUYsU0FBUyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDM0MsU0FBUyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQzthQUN0RTtRQUNMLENBQUMsQ0FBQSxDQUFDO1FBRUYsT0FBTyxTQUFTLENBQUM7SUFDckIsQ0FBQzs7O1lBMUZKLFVBQVU7Ozs7WUFQVSxNQUFNOzs7Ozs7O0lBV3ZCLCtDQUEwRDs7Ozs7SUFDMUQsaURBQW9GOzs7OztJQUNwRixxREFBNEY7Ozs7O0lBRWhGLDZCQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE5nWm9uZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgKiBhcyBjcnlwdG9Ccm93c2VyaWZ5IGZyb20gJ2NyeXB0by1icm93c2VyaWZ5JztcclxuaW1wb3J0IHsgSGFzaFR5cGVJbXBsZW1lbnRhdGlvbiwgSGFzaFR5cGUgfSBmcm9tICcuLi9lbnVtcy9oYXNoLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7IEVuY29kaW5nVHlwZUltcGxlbWVudGF0aW9uLCBFbmNvZGluZ1R5cGUgfSBmcm9tICcuLi9lbnVtcy9lbmNvZGluZy10eXBlLmVudW0nO1xyXG5pbXBvcnQgeyBJSGFzaENvbnRhaW5lciwgSGFzaENvbnRhaW5lciwgSVN0cmVhbUhhc2hDb250YWluZXIsIFN0cmVhbUhhc2hDb250YWluZXIgfSBmcm9tICcuLi9tb2RlbHMvaGFzaC1jb250YWluZXIubW9kZWwnO1xyXG5pbXBvcnQgeyBGaWxlUmVhZGVyRXZlbnQgfSBmcm9tICcuLi9leHRlbnNpb25zL2ZpbGUtcmVhZGVyLmV4dGVuc2lvbic7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBDcnlwdG9TZXJ2aWNlIHtcclxuXHJcbiAgICAvLyBoYXNoIDRNQiBhdCBhIHRpbWVcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgU1RSRUFNX0hBU0hfQ0hVTktfU0laRSA9IDEwMjQgKiAxMDAwICogNDtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgSEFTSF9UWVBFX0lNUExFTUVOVEFUSU9OID0gSGFzaFR5cGVJbXBsZW1lbnRhdGlvbi5DcnlwdG9Ccm93c2VyaWZ5O1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBFTkNPRElOR19UWVBFX0lNUExFTUVOVEFUSU9OID0gRW5jb2RpbmdUeXBlSW1wbGVtZW50YXRpb24uQ3J5cHRvQnJvd3NlcmlmeTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHpvbmU6IE5nWm9uZSkge1xyXG4gICAgICAgIC8vIFBlcmZvcm1hbmNlIHJlbWFpbnMgdW5jaGFuZ2VkIGJ5IHJ1bm5pbmcgdGhlIGhhc2ggZnVuY3Rpb24gb3V0c2lkZSBvZiBBbmd1bGFyLlxyXG4gICAgICAgIC8vIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7IH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY3JlYXRlSGFzaENvbnRhaW5lcihmaWxlOiBGaWxlLCBoYXNoVHlwZTogSGFzaFR5cGUsIGVuY29kaW5nVHlwZTogRW5jb2RpbmdUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRFbmNvZGluZ1R5cGU6IEVuY29kaW5nVHlwZSk6IElIYXNoQ29udGFpbmVyIHtcclxuXHJcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gbmV3IEhhc2hDb250YWluZXIoXHJcbiAgICAgICAgICAgIGZpbGUsXHJcbiAgICAgICAgICAgIHRoaXMuSEFTSF9UWVBFX0lNUExFTUVOVEFUSU9OLFxyXG4gICAgICAgICAgICB0aGlzLkVOQ09ESU5HX1RZUEVfSU1QTEVNRU5UQVRJT04sXHJcbiAgICAgICAgICAgIGhhc2hUeXBlLFxyXG4gICAgICAgICAgICBlbmNvZGluZ1R5cGUsXHJcbiAgICAgICAgICAgIGlucHV0RW5jb2RpbmdUeXBlKTtcclxuXHJcbiAgICAgICAgY29udGFpbmVyLmhhc2ggPSBjcnlwdG9Ccm93c2VyaWZ5LmNyZWF0ZUhhc2goY29udGFpbmVyLmhhc2hUeXBlU3RyaW5nKTtcclxuXHJcbiAgICAgICAgY29udGFpbmVyLnJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbihldmVudDogRmlsZVJlYWRlckV2ZW50KSB7XHJcbiAgICAgICAgICAgIGNvbnRhaW5lci5oYXNoU3RyaW5nID0gY29udGFpbmVyLmhhc2gudXBkYXRlKGV2ZW50LnRhcmdldC5yZXN1bHQsIGNvbnRhaW5lci5pbnB1dEVuY29kaW5nVHlwZVN0cmluZylcclxuICAgICAgICAgICAgICAgIC5kaWdlc3QoY29udGFpbmVyLmVuY29kaW5nVHlwZVN0cmluZyk7XHJcbiAgICAgICAgICAgIGNvbnRhaW5lci5lbmREYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgICAgICAgY29udGFpbmVyLnBlcmNlbnQgPSAxMDA7XHJcbiAgICAgICAgfS5iaW5kKGNvbnRhaW5lcik7XHJcblxyXG4gICAgICAgIGNvbnRhaW5lci5kb1dvcmsgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgY29udGFpbmVyLnJlYWRlci5yZWFkQXNCaW5hcnlTdHJpbmcoY29udGFpbmVyLmZpbGUpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHJldHVybiBjb250YWluZXI7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNyZWF0ZVN0cmVhbUhhc2hDb250YWluZXIoZmlsZTogRmlsZSwgaGFzaFR5cGU6IEhhc2hUeXBlLCBlbmNvZGluZ1R5cGU6IEVuY29kaW5nVHlwZSwgaW5wdXRFbmNvZGluZ1R5cGU6IEVuY29kaW5nVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3NDYWxsYmFjazogRnVuY3Rpb24sIGVycm9yQ2FsbGJhY2s6IEZ1bmN0aW9uKTogSVN0cmVhbUhhc2hDb250YWluZXIge1xyXG5cclxuICAgICAgICBjb25zdCBjb250YWluZXIgPSBuZXcgU3RyZWFtSGFzaENvbnRhaW5lcihcclxuICAgICAgICAgICAgZmlsZSxcclxuICAgICAgICAgICAgdGhpcy5IQVNIX1RZUEVfSU1QTEVNRU5UQVRJT04sXHJcbiAgICAgICAgICAgIHRoaXMuRU5DT0RJTkdfVFlQRV9JTVBMRU1FTlRBVElPTixcclxuICAgICAgICAgICAgaGFzaFR5cGUsXHJcbiAgICAgICAgICAgIGVuY29kaW5nVHlwZSxcclxuICAgICAgICAgICAgaW5wdXRFbmNvZGluZ1R5cGUpO1xyXG5cclxuICAgICAgICBjb250YWluZXIuY2h1bmtTaXplID0gdGhpcy5TVFJFQU1fSEFTSF9DSFVOS19TSVpFO1xyXG4gICAgICAgIGNvbnRhaW5lci5vZmZzZXQgPSAwO1xyXG4gICAgICAgIGNvbnRhaW5lci5oYXNoID0gY3J5cHRvQnJvd3NlcmlmeS5jcmVhdGVIYXNoKGNvbnRhaW5lci5oYXNoVHlwZVN0cmluZyk7XHJcblxyXG4gICAgICAgIGNvbnRhaW5lci5yZWFkZXIub25sb2FkID0gZnVuY3Rpb24oZXZlbnQ6IEZpbGVSZWFkZXJFdmVudCkge1xyXG4gICAgICAgICAgICBjb25zdCBiaW5hcnkgPSBldmVudC50YXJnZXQucmVzdWx0O1xyXG5cclxuICAgICAgICAgICAgaWYgKGNvbnRhaW5lci5vZmZzZXQgKyBjb250YWluZXIuY2h1bmtTaXplID49IGNvbnRhaW5lci5maWxlLnNpemUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRhaW5lci5oYXNoLmVuZChiaW5hcnksIGNvbnRhaW5lci5pbnB1dEVuY29kaW5nVHlwZVN0cmluZyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb250YWluZXIuaGFzaC53cml0ZShiaW5hcnksIGNvbnRhaW5lci5pbnB1dEVuY29kaW5nVHlwZVN0cmluZyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnRhaW5lci5vZmZzZXQgKz0gY29udGFpbmVyLmNodW5rU2l6ZTtcclxuXHJcbiAgICAgICAgICAgIGNvbnRhaW5lci5kb1dvcmsoKTtcclxuICAgICAgICB9LmJpbmQoY29udGFpbmVyKTtcclxuXHJcbiAgICAgICAgY29udGFpbmVyLnJlYWRlci5vbmVycm9yID0gZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgICAgICAgICAgZXJyb3JDYWxsYmFjayhldmVudCwgY29udGFpbmVyKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb250YWluZXIuZG9Xb3JrID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIGlmICghY29udGFpbmVyLmlzQ2FuY2VsbGVkKCkgJiYgIWNvbnRhaW5lci5pc1BhdXNlZCgpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29udGFpbmVyLm9mZnNldCA+IGNvbnRhaW5lci5maWxlLnNpemUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXIuaGFzaFN0cmluZyA9IGNvbnRhaW5lci5oYXNoLnJlYWQoKS50b1N0cmluZyhjb250YWluZXIuZW5jb2RpbmdUeXBlU3RyaW5nKTtcclxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXIuZW5kRGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLnBlcmNlbnQgPSAxMDA7XHJcbiAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc0NhbGxiYWNrKGNvbnRhaW5lcik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHNsaWNlID0gY29udGFpbmVyLmZpbGUuc2xpY2UoY29udGFpbmVyLm9mZnNldCwgY29udGFpbmVyLm9mZnNldCArIGNvbnRhaW5lci5jaHVua1NpemUpO1xyXG4gICAgICAgICAgICAgICAgY29udGFpbmVyLnJlYWRlci5yZWFkQXNCaW5hcnlTdHJpbmcoc2xpY2UpO1xyXG4gICAgICAgICAgICAgICAgY29udGFpbmVyLnBlcmNlbnQgPSBNYXRoLnJvdW5kKGNvbnRhaW5lci5vZmZzZXQgLyBmaWxlLnNpemUgKiAxMDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGNvbnRhaW5lcjtcclxuICAgIH1cclxuXHJcbn1cclxuIl19