UNPKG

@microsoft/windows-admin-center-sdk

Version:

Microsoft - Windows Admin Center Shell

78 lines 11.1 kB
import { from, of, zip } from 'rxjs'; import { mergeMap, map } from 'rxjs/operators'; /** * Abstraction layer for handling the webkit file system. * This is not yet a standard spec, but is supported on both Edge and Chrome. */ export class WebkitFileSystem { constructor(items) { this.items = items; } getFileList() { const files = []; for (let i = 0; i < this.items.length; i++) { const item = this.items[i]; if (item.kind !== 'file') { continue; } const entry = item.webkitGetAsEntry(); const file = item.getAsFile(); if (entry.isDirectory) { file[WebkitFileSystem.isDirectoryPropertyName] = true; } files.push(file); } return of(files); // TODO: The following code should work when we decide to support uploading directories on Edge and Chrome // const entries: any[] = []; // for (let i = 0; i < this.items.length; i++) { // const item = this.items[i]; // if (item.kind !== 'file') { continue; } // // entries.push(item.webkitGetAsEntry()); // } // return this.toFileList(entries); } toFileList(entries) { const files = []; for (let i = 0; i < entries.length; i++) { files.push(this.getFilesFromEntry(entries[i])); } return zip(...files).pipe(map(result => { return result.reduce((value, next) => { value.push(...next); return value; }, []); })); } getFilesFromEntry(entry) { if (entry.isFile) { return this.getFile(entry).pipe(map(file => [file])); } else if (entry.isDirectory) { return this.getDirectory(entry); } } getFile(entry) { return from(new Promise((resolve, reject) => entry.file(resolve, reject))); } getDirectory(entry) { const reader = entry.createReader(); return this.readAllEntries(reader).pipe(mergeMap(entries => this.toFileList(entries))); } readAllEntries(reader) { return this.readEntries(reader).pipe(mergeMap(entries => { if (!entries || entries.length === 0) { return of([]); } return this.readAllEntries(reader).pipe(map(remainingEntries => entries.concat(remainingEntries))); })); } readEntries(reader) { return from(new Promise((resolve, reject) => reader.readEntries(resolve, reject))); } } /** * Temporary solution to indicating a file object is actually a directory without fully implementing folder upload support. */ WebkitFileSystem.isDirectoryPropertyName = '__SME_isDirectory__'; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Via2l0RmlsZVN5c3RlbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2FuZ3VsYXIvc3JjL2NvbnRyb2xzL2Zvcm0vZm9ybS1maWVsZC9maWxlL3dlYmtpdEZpbGVTeXN0ZW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBYyxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFL0M7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLGdCQUFnQjtJQU96QixZQUFvQixLQUEyQjtRQUEzQixVQUFLLEdBQUwsS0FBSyxDQUFzQjtJQUFJLENBQUM7SUFFN0MsV0FBVztRQUNkLE1BQU0sS0FBSyxHQUFXLEVBQUUsQ0FBQztRQUN6QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDeEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMzQixJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFO2dCQUFFLFNBQVM7YUFBRTtZQUN2QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUN0QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDOUIsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFO2dCQUNuQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsdUJBQXVCLENBQUMsR0FBRyxJQUFJLENBQUM7YUFDekQ7WUFDRCxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3BCO1FBQ0QsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLENB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QXFCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmcm9tLCBPYnNlcnZhYmxlLCBvZiwgemlwIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IG1lcmdlTWFwLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG4vKipcclxuICogQWJzdHJhY3Rpb24gbGF5ZXIgZm9yIGhhbmRsaW5nIHRoZSB3ZWJraXQgZmlsZSBzeXN0ZW0uXHJcbiAqIFRoaXMgaXMgbm90IHlldCBhIHN0YW5kYXJkIHNwZWMsIGJ1dCBpcyBzdXBwb3J0ZWQgb24gYm90aCBFZGdlIGFuZCBDaHJvbWUuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgV2Via2l0RmlsZVN5c3RlbSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUZW1wb3Jhcnkgc29sdXRpb24gdG8gaW5kaWNhdGluZyBhIGZpbGUgb2JqZWN0IGlzIGFjdHVhbGx5IGEgZGlyZWN0b3J5IHdpdGhvdXQgZnVsbHkgaW1wbGVtZW50aW5nIGZvbGRlciB1cGxvYWQgc3VwcG9ydC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBpc0RpcmVjdG9yeVByb3BlcnR5TmFtZSA9ICdfX1NNRV9pc0RpcmVjdG9yeV9fJztcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGl0ZW1zOiBEYXRhVHJhbnNmZXJJdGVtTGlzdCkgeyB9XHJcblxyXG4gICAgcHVibGljIGdldEZpbGVMaXN0KCk6IE9ic2VydmFibGU8RmlsZVtdPiB7XHJcbiAgICAgICAgY29uc3QgZmlsZXM6IEZpbGVbXSA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5pdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5pdGVtc1tpXTtcclxuICAgICAgICAgICAgaWYgKGl0ZW0ua2luZCAhPT0gJ2ZpbGUnKSB7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0gaXRlbS53ZWJraXRHZXRBc0VudHJ5KCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBpdGVtLmdldEFzRmlsZSgpO1xyXG4gICAgICAgICAgICBpZiAoZW50cnkuaXNEaXJlY3RvcnkpIHtcclxuICAgICAgICAgICAgICAgIGZpbGVbV2Via2l0RmlsZVN5c3RlbS5pc0RpcmVjdG9yeVByb3BlcnR5TmFtZV0gPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZpbGVzLnB1c2goZmlsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvZihmaWxlcyk7XHJcblxyXG4gICAgICAgIC8vIFRPRE86IFRoZSBmb2xsb3dpbmcgY29kZSBzaG91bGQgd29yayB3aGVuIHdlIGRlY2lkZSB0byBzdXBwb3J0IHVwbG9hZGluZyBkaXJlY3RvcmllcyBvbiBFZGdlIGFuZCBDaHJvbWVcclxuICAgICAgICAvLyBjb25zdCBlbnRyaWVzOiBhbnlbXSA9IFtdO1xyXG4gICAgICAgIC8vIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5pdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIC8vICAgICBjb25zdCBpdGVtID0gdGhpcy5pdGVtc1tpXTtcclxuICAgICAgICAvLyAgICAgaWYgKGl0ZW0ua2luZCAhPT0gJ2ZpbGUnKSB7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgLy8gICAgIC8vIGVudHJpZXMucHVzaChpdGVtLndlYmtpdEdldEFzRW50cnkoKSk7XHJcbiAgICAgICAgLy8gfVxyXG4gICAgICAgIC8vIHJldHVybiB0aGlzLnRvRmlsZUxpc3QoZW50cmllcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB0b0ZpbGVMaXN0KGVudHJpZXM6IGFueVtdKTogT2JzZXJ2YWJsZTxGaWxlW10+IHtcclxuICAgICAgICBjb25zdCBmaWxlczogT2JzZXJ2YWJsZTxGaWxlW10+W10gPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVudHJpZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgZmlsZXMucHVzaCh0aGlzLmdldEZpbGVzRnJvbUVudHJ5KGVudHJpZXNbaV0pKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHppcCguLi5maWxlcykucGlwZShtYXAocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5yZWR1Y2UoKHZhbHVlLCBuZXh0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZS5wdXNoKC4uLm5leHQpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgICAgICB9LCBbXSk7XHJcbiAgICAgICAgfSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0RmlsZXNGcm9tRW50cnkoZW50cnk6IGFueSk6IE9ic2VydmFibGU8RmlsZVtdPiB7XHJcbiAgICAgICAgaWYgKGVudHJ5LmlzRmlsZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRGaWxlKGVudHJ5KS5waXBlKG1hcChmaWxlID0+IFtmaWxlXSkpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZW50cnkuaXNEaXJlY3RvcnkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RGlyZWN0b3J5KGVudHJ5KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRGaWxlKGVudHJ5OiBhbnkpOiBPYnNlcnZhYmxlPEZpbGU+IHtcclxuICAgICAgICByZXR1cm4gZnJvbShuZXcgUHJvbWlzZTxGaWxlPigocmVzb2x2ZSwgcmVqZWN0KSA9PiBlbnRyeS5maWxlKHJlc29sdmUsIHJlamVjdCkpKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldERpcmVjdG9yeShlbnRyeTogYW55KTogT2JzZXJ2YWJsZTxGaWxlW10+IHtcclxuICAgICAgICBjb25zdCByZWFkZXIgPSBlbnRyeS5jcmVhdGVSZWFkZXIoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZWFkQWxsRW50cmllcyhyZWFkZXIpLnBpcGUobWVyZ2VNYXAoZW50cmllcyA9PiB0aGlzLnRvRmlsZUxpc3QoZW50cmllcykpKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlYWRBbGxFbnRyaWVzKHJlYWRlcjogYW55KTogT2JzZXJ2YWJsZTxhbnlbXT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlYWRFbnRyaWVzKHJlYWRlcikucGlwZShcclxuICAgICAgICAgICAgbWVyZ2VNYXAoZW50cmllcyA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWVudHJpZXMgfHwgZW50cmllcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YoW10pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVhZEFsbEVudHJpZXMocmVhZGVyKS5waXBlKFxyXG4gICAgICAgICAgICAgICAgICAgIG1hcChyZW1haW5pbmdFbnRyaWVzID0+IGVudHJpZXMuY29uY2F0KHJlbWFpbmluZ0VudHJpZXMpKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVhZEVudHJpZXMocmVhZGVyOiBhbnkpOiBPYnNlcnZhYmxlPGFueVtdPiB7XHJcbiAgICAgICAgcmV0dXJuIGZyb20obmV3IFByb21pc2U8YW55W10+KChyZXNvbHZlLCByZWplY3QpID0+IHJlYWRlci5yZWFkRW50cmllcyhyZXNvbHZlLCByZWplY3QpKSk7XHJcbiAgICB9XHJcbn1cclxuIl19