UNPKG

angular-material-datatransfer-lib

Version:

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

156 lines 15.8 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'; var CryptoService = /** @class */ (function () { function CryptoService(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 {?} */ CryptoService.prototype.createHashContainer = /** * @param {?} file * @param {?} hashType * @param {?} encodingType * @param {?} inputEncodingType * @return {?} */ function (file, hashType, encodingType, inputEncodingType) { /** @type {?} */ var 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 {?} */ CryptoService.prototype.createStreamHashContainer = /** * @param {?} file * @param {?} hashType * @param {?} encodingType * @param {?} inputEncodingType * @param {?} successCallback * @param {?} errorCallback * @return {?} */ function (file, hashType, encodingType, inputEncodingType, successCallback, errorCallback) { /** @type {?} */ var 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 {?} */ var 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 {?} */ var 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 = function () { return [ { type: NgZone } ]; }; return CryptoService; }()); export { CryptoService }; 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J5cHRvLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9hbmd1bGFyLW1hdGVyaWFsLWRhdGF0cmFuc2Zlci1saWIvIiwic291cmNlcyI6WyJsaWIvc2VydmljZXMvY3J5cHRvLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEtBQUssZ0JBQWdCLE1BQU0sbUJBQW1CLENBQUM7QUFDdEQsT0FBTyxFQUFFLHNCQUFzQixFQUFZLE1BQU0seUJBQXlCLENBQUM7QUFDM0UsT0FBTyxFQUFFLDBCQUEwQixFQUFnQixNQUFNLDZCQUE2QixDQUFDO0FBQ3ZGLE9BQU8sRUFBa0IsYUFBYSxFQUF3QixtQkFBbUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRzFIO0lBUUksdUJBQW9CLElBQVk7UUFBWixTQUFJLEdBQUosSUFBSSxDQUFROztRQUpmLDJCQUFzQixHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ3pDLDZCQUF3QixHQUFHLHNCQUFzQixDQUFDLGdCQUFnQixDQUFDO1FBQ25FLGlDQUE0QixHQUFHLDBCQUEwQixDQUFDLGdCQUFnQixDQUFDO1FBR3hGLGlGQUFpRjtRQUNqRix3Q0FBd0M7SUFDNUMsQ0FBQzs7Ozs7Ozs7SUFFTSwyQ0FBbUI7Ozs7Ozs7SUFBMUIsVUFBMkIsSUFBVSxFQUFFLFFBQWtCLEVBQUUsWUFBMEIsRUFDMUQsaUJBQStCOztZQUVoRCxTQUFTLEdBQUcsSUFBSSxhQUFhLENBQy9CLElBQUksRUFDSixJQUFJLENBQUMsd0JBQXdCLEVBQzdCLElBQUksQ0FBQyw0QkFBNEIsRUFDakMsUUFBUSxFQUNSLFlBQVksRUFDWixpQkFBaUIsQ0FBQztRQUV0QixTQUFTLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFdkUs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QixPQUFPO2lCQUNWOztvQkFFSyxLQUFLLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUM7Z0JBQzVGLFNBQVMsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzNDLFNBQVMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7YUFDdEU7UUFDTCxDQUFDLENBQUEsQ0FBQztRQUVGLE9BQU8sU0FBUyxDQUFDO0lBQ3JCLENBQUM7O2dCQTFGSixVQUFVOzs7O2dCQVBVLE1BQU07O0lBbUczQixvQkFBQztDQUFBLEFBNUZELElBNEZDO1NBM0ZZLGFBQWE7Ozs7OztJQUd0QiwrQ0FBMEQ7Ozs7O0lBQzFELGlEQUFvRjs7Ozs7SUFDcEYscURBQTRGOzs7OztJQUVoRiw2QkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBOZ1pvbmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0ICogYXMgY3J5cHRvQnJvd3NlcmlmeSBmcm9tICdjcnlwdG8tYnJvd3NlcmlmeSc7XHJcbmltcG9ydCB7IEhhc2hUeXBlSW1wbGVtZW50YXRpb24sIEhhc2hUeXBlIH0gZnJvbSAnLi4vZW51bXMvaGFzaC10eXBlLmVudW0nO1xyXG5pbXBvcnQgeyBFbmNvZGluZ1R5cGVJbXBsZW1lbnRhdGlvbiwgRW5jb2RpbmdUeXBlIH0gZnJvbSAnLi4vZW51bXMvZW5jb2RpbmctdHlwZS5lbnVtJztcclxuaW1wb3J0IHsgSUhhc2hDb250YWluZXIsIEhhc2hDb250YWluZXIsIElTdHJlYW1IYXNoQ29udGFpbmVyLCBTdHJlYW1IYXNoQ29udGFpbmVyIH0gZnJvbSAnLi4vbW9kZWxzL2hhc2gtY29udGFpbmVyLm1vZGVsJztcclxuaW1wb3J0IHsgRmlsZVJlYWRlckV2ZW50IH0gZnJvbSAnLi4vZXh0ZW5zaW9ucy9maWxlLXJlYWRlci5leHRlbnNpb24nO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgQ3J5cHRvU2VydmljZSB7XHJcblxyXG4gICAgLy8gaGFzaCA0TUIgYXQgYSB0aW1lXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IFNUUkVBTV9IQVNIX0NIVU5LX1NJWkUgPSAxMDI0ICogMTAwMCAqIDQ7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IEhBU0hfVFlQRV9JTVBMRU1FTlRBVElPTiA9IEhhc2hUeXBlSW1wbGVtZW50YXRpb24uQ3J5cHRvQnJvd3NlcmlmeTtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgRU5DT0RJTkdfVFlQRV9JTVBMRU1FTlRBVElPTiA9IEVuY29kaW5nVHlwZUltcGxlbWVudGF0aW9uLkNyeXB0b0Jyb3dzZXJpZnk7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSB6b25lOiBOZ1pvbmUpIHtcclxuICAgICAgICAvLyBQZXJmb3JtYW5jZSByZW1haW5zIHVuY2hhbmdlZCBieSBydW5uaW5nIHRoZSBoYXNoIGZ1bmN0aW9uIG91dHNpZGUgb2YgQW5ndWxhci5cclxuICAgICAgICAvLyB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4geyB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNyZWF0ZUhhc2hDb250YWluZXIoZmlsZTogRmlsZSwgaGFzaFR5cGU6IEhhc2hUeXBlLCBlbmNvZGluZ1R5cGU6IEVuY29kaW5nVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0RW5jb2RpbmdUeXBlOiBFbmNvZGluZ1R5cGUpOiBJSGFzaENvbnRhaW5lciB7XHJcblxyXG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IG5ldyBIYXNoQ29udGFpbmVyKFxyXG4gICAgICAgICAgICBmaWxlLFxyXG4gICAgICAgICAgICB0aGlzLkhBU0hfVFlQRV9JTVBMRU1FTlRBVElPTixcclxuICAgICAgICAgICAgdGhpcy5FTkNPRElOR19UWVBFX0lNUExFTUVOVEFUSU9OLFxyXG4gICAgICAgICAgICBoYXNoVHlwZSxcclxuICAgICAgICAgICAgZW5jb2RpbmdUeXBlLFxyXG4gICAgICAgICAgICBpbnB1dEVuY29kaW5nVHlwZSk7XHJcblxyXG4gICAgICAgIGNvbnRhaW5lci5oYXNoID0gY3J5cHRvQnJvd3NlcmlmeS5jcmVhdGVIYXNoKGNvbnRhaW5lci5oYXNoVHlwZVN0cmluZyk7XHJcblxyXG4gICAgICAgIGNvbnRhaW5lci5yZWFkZXIub25sb2FkID0gZnVuY3Rpb24oZXZlbnQ6IEZpbGVSZWFkZXJFdmVudCkge1xyXG4gICAgICAgICAgICBjb250YWluZXIuaGFzaFN0cmluZyA9IGNvbnRhaW5lci5oYXNoLnVwZGF0ZShldmVudC50YXJnZXQucmVzdWx0LCBjb250YWluZXIuaW5wdXRFbmNvZGluZ1R5cGVTdHJpbmcpXHJcbiAgICAgICAgICAgICAgICAuZGlnZXN0KGNvbnRhaW5lci5lbmNvZGluZ1R5cGVTdHJpbmcpO1xyXG4gICAgICAgICAgICBjb250YWluZXIuZW5kRGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgICAgIGNvbnRhaW5lci5wZXJjZW50ID0gMTAwO1xyXG4gICAgICAgIH0uYmluZChjb250YWluZXIpO1xyXG5cclxuICAgICAgICBjb250YWluZXIuZG9Xb3JrID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIGNvbnRhaW5lci5yZWFkZXIucmVhZEFzQmluYXJ5U3RyaW5nKGNvbnRhaW5lci5maWxlKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICByZXR1cm4gY29udGFpbmVyO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjcmVhdGVTdHJlYW1IYXNoQ29udGFpbmVyKGZpbGU6IEZpbGUsIGhhc2hUeXBlOiBIYXNoVHlwZSwgZW5jb2RpbmdUeXBlOiBFbmNvZGluZ1R5cGUsIGlucHV0RW5jb2RpbmdUeXBlOiBFbmNvZGluZ1R5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzQ2FsbGJhY2s6IEZ1bmN0aW9uLCBlcnJvckNhbGxiYWNrOiBGdW5jdGlvbik6IElTdHJlYW1IYXNoQ29udGFpbmVyIHtcclxuXHJcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gbmV3IFN0cmVhbUhhc2hDb250YWluZXIoXHJcbiAgICAgICAgICAgIGZpbGUsXHJcbiAgICAgICAgICAgIHRoaXMuSEFTSF9UWVBFX0lNUExFTUVOVEFUSU9OLFxyXG4gICAgICAgICAgICB0aGlzLkVOQ09ESU5HX1RZUEVfSU1QTEVNRU5UQVRJT04sXHJcbiAgICAgICAgICAgIGhhc2hUeXBlLFxyXG4gICAgICAgICAgICBlbmNvZGluZ1R5cGUsXHJcbiAgICAgICAgICAgIGlucHV0RW5jb2RpbmdUeXBlKTtcclxuXHJcbiAgICAgICAgY29udGFpbmVyLmNodW5rU2l6ZSA9IHRoaXMuU1RSRUFNX0hBU0hfQ0hVTktfU0laRTtcclxuICAgICAgICBjb250YWluZXIub2Zmc2V0ID0gMDtcclxuICAgICAgICBjb250YWluZXIuaGFzaCA9IGNyeXB0b0Jyb3dzZXJpZnkuY3JlYXRlSGFzaChjb250YWluZXIuaGFzaFR5cGVTdHJpbmcpO1xyXG5cclxuICAgICAgICBjb250YWluZXIucmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKGV2ZW50OiBGaWxlUmVhZGVyRXZlbnQpIHtcclxuICAgICAgICAgICAgY29uc3QgYmluYXJ5ID0gZXZlbnQudGFyZ2V0LnJlc3VsdDtcclxuXHJcbiAgICAgICAgICAgIGlmIChjb250YWluZXIub2Zmc2V0ICsgY29udGFpbmVyLmNodW5rU2l6ZSA+PSBjb250YWluZXIuZmlsZS5zaXplKSB7XHJcbiAgICAgICAgICAgICAgICBjb250YWluZXIuaGFzaC5lbmQoYmluYXJ5LCBjb250YWluZXIuaW5wdXRFbmNvZGluZ1R5cGVTdHJpbmcpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29udGFpbmVyLmhhc2gud3JpdGUoYmluYXJ5LCBjb250YWluZXIuaW5wdXRFbmNvZGluZ1R5cGVTdHJpbmcpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb250YWluZXIub2Zmc2V0ICs9IGNvbnRhaW5lci5jaHVua1NpemU7XHJcblxyXG4gICAgICAgICAgICBjb250YWluZXIuZG9Xb3JrKCk7XHJcbiAgICAgICAgfS5iaW5kKGNvbnRhaW5lcik7XHJcblxyXG4gICAgICAgIGNvbnRhaW5lci5yZWFkZXIub25lcnJvciA9IGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICAgICAgICAgIGVycm9yQ2FsbGJhY2soZXZlbnQsIGNvbnRhaW5lcik7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29udGFpbmVyLmRvV29yayA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICBpZiAoIWNvbnRhaW5lci5pc0NhbmNlbGxlZCgpICYmICFjb250YWluZXIuaXNQYXVzZWQoKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvbnRhaW5lci5vZmZzZXQgPiBjb250YWluZXIuZmlsZS5zaXplKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLmhhc2hTdHJpbmcgPSBjb250YWluZXIuaGFzaC5yZWFkKCkudG9TdHJpbmcoY29udGFpbmVyLmVuY29kaW5nVHlwZVN0cmluZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLmVuZERhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5wZXJjZW50ID0gMTAwO1xyXG4gICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3NDYWxsYmFjayhjb250YWluZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBzbGljZSA9IGNvbnRhaW5lci5maWxlLnNsaWNlKGNvbnRhaW5lci5vZmZzZXQsIGNvbnRhaW5lci5vZmZzZXQgKyBjb250YWluZXIuY2h1bmtTaXplKTtcclxuICAgICAgICAgICAgICAgIGNvbnRhaW5lci5yZWFkZXIucmVhZEFzQmluYXJ5U3RyaW5nKHNsaWNlKTtcclxuICAgICAgICAgICAgICAgIGNvbnRhaW5lci5wZXJjZW50ID0gTWF0aC5yb3VuZChjb250YWluZXIub2Zmc2V0IC8gZmlsZS5zaXplICogMTAwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHJldHVybiBjb250YWluZXI7XHJcbiAgICB9XHJcblxyXG59XHJcbiJdfQ==