@elderbyte/ngx-starter 18.0.1 → 18.1.0-beta2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,96 @@
1
+ import { from, of, throwError } from 'rxjs';
2
+ import { map } from 'rxjs/operators';
3
+ /***************************************************************************
4
+ * *
5
+ * FileSystem API *
6
+ * *
7
+ **************************************************************************/
8
+ /**
9
+ * Holds experimental features of the browser `File System API`. No typescript lint checks
10
+ * are performed here!
11
+ */
12
+ export class FileSystemApi {
13
+ /***************************************************************************
14
+ * *
15
+ * DataTransferItem *
16
+ * *
17
+ **************************************************************************/
18
+ static isGetAsFileSystemHandleSupported(transferItem) {
19
+ // @ts-ignore
20
+ return transferItem.getAsFileSystemHandle !== undefined;
21
+ }
22
+ /**
23
+ * Returns an FileSystemHandle Observable of the given DataTransferItem. The FileSystemHandle can only be accessed in the `dragstart`
24
+ * or `drop` event. Otherwise, it will return null!
25
+ */
26
+ static getAsFileSystemHandle(transferItem) {
27
+ // @ts-ignore
28
+ return from(transferItem.getAsFileSystemHandle());
29
+ }
30
+ /***************************************************************************
31
+ * *
32
+ * File Picker *
33
+ * *
34
+ **************************************************************************/
35
+ static isFileSystemSupported() {
36
+ return 'showOpenFilePicker' in window;
37
+ }
38
+ static openFilePicker(pickerOpts) {
39
+ try {
40
+ // @ts-ignore
41
+ return from(window.showOpenFilePicker(pickerOpts));
42
+ }
43
+ catch (e) {
44
+ return throwError(() => new Error(e));
45
+ }
46
+ }
47
+ /***************************************************************************
48
+ * *
49
+ * Directory Picker *
50
+ * *
51
+ **************************************************************************/
52
+ static isDirectoryPickerSupported() {
53
+ return 'showDirectoryPicker' in window;
54
+ }
55
+ static openDirectoryPicker(pickerOpts) {
56
+ try {
57
+ // @ts-ignore
58
+ return from(window.showDirectoryPicker(pickerOpts));
59
+ }
60
+ catch (e) {
61
+ return throwError(() => new Error(e));
62
+ }
63
+ }
64
+ /***************************************************************************
65
+ * *
66
+ * FileSystemDirectoryHandle *
67
+ * *
68
+ **************************************************************************/
69
+ static getHandlesFromDirectory(dirHandle) {
70
+ return from(FileSystemApi.getHandlesFromDirectoryAsync(dirHandle));
71
+ }
72
+ static buildRelativeParent(fileOrDirHandle, rootDirectory) {
73
+ if (rootDirectory == null) {
74
+ return of(undefined);
75
+ }
76
+ const relativeParents$ = from(rootDirectory.resolve(fileOrDirHandle));
77
+ return relativeParents$.pipe(map(parents => {
78
+ // path/to/folder/file.jpg
79
+ const path = parents;
80
+ // root/path/to/folder/file.jpg
81
+ path.unshift(rootDirectory.name);
82
+ // root/path/to/folder
83
+ path.pop();
84
+ return path.join('/');
85
+ }));
86
+ }
87
+ static async getHandlesFromDirectoryAsync(dirHandle) {
88
+ const handles = [];
89
+ // @ts-ignore
90
+ for await (const handle of dirHandle.values()) {
91
+ handles.push(handle);
92
+ }
93
+ return handles;
94
+ }
95
+ }
96
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1zeXN0ZW0tYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWxkZXJieXRlL25neC1zdGFydGVyL3NyYy9saWIvY29tcG9uZW50cy9maWxlcy9maWxlLXN5c3RlbS1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLElBQUksRUFBYyxFQUFFLEVBQUUsVUFBVSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3RELE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQWlEbkM7Ozs7NEVBSTRFO0FBRTVFOzs7R0FHRztBQUNILE1BQU0sT0FBTyxhQUFhO0lBRXhCOzs7O2dGQUk0RTtJQUVyRSxNQUFNLENBQUMsZ0NBQWdDLENBQUMsWUFBOEI7UUFDM0UsYUFBYTtRQUNiLE9BQU8sWUFBWSxDQUFDLHFCQUFxQixLQUFLLFNBQVMsQ0FBQztJQUMxRCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksTUFBTSxDQUFDLHFCQUFxQixDQUFDLFlBQThCO1FBQ2hFLGFBQWE7UUFDYixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRDs7OztnRkFJNEU7SUFFckUsTUFBTSxDQUFDLHFCQUFxQjtRQUNqQyxPQUFPLG9CQUFvQixJQUFJLE1BQU0sQ0FBQztJQUN4QyxDQUFDO0lBRU0sTUFBTSxDQUFDLGNBQWMsQ0FBQyxVQUF1QztRQUNsRSxJQUFJLENBQUM7WUFDSCxhQUFhO1lBQ2IsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDckQsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hDLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7Z0ZBSTRFO0lBRXJFLE1BQU0sQ0FBQywwQkFBMEI7UUFDdEMsT0FBTyxxQkFBcUIsSUFBSSxNQUFNLENBQUM7SUFDekMsQ0FBQztJQUVNLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxVQUE0QztRQUM1RSxJQUFJLENBQUM7WUFDSCxhQUFhO1lBQ2IsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDdEQsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hDLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7Z0ZBSTRFO0lBRXJFLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxTQUFvQztRQUN4RSxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsNEJBQTRCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRU0sTUFBTSxDQUFDLG1CQUFtQixDQUMvQixlQUFpQyxFQUNqQyxhQUF5QztRQUd6QyxJQUFJLGFBQWEsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN4QixPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN6QixDQUFDO1FBRUQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO1FBQ3RFLE9BQU8sZ0JBQWdCLENBQUMsSUFBSSxDQUMxQixHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDWiwwQkFBMEI7WUFDMUIsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDO1lBRXJCLCtCQUErQjtZQUMvQixJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUVqQyxzQkFBc0I7WUFDdEIsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ1gsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hCLENBQUMsQ0FDRixDQUFDLENBQUE7SUFDSixDQUFDO0lBRU8sTUFBTSxDQUFDLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxTQUFvQztRQUNwRixNQUFNLE9BQU8sR0FBdUIsRUFBRSxDQUFDO1FBQ3ZDLGFBQWE7UUFDYixJQUFJLEtBQUssRUFBRSxNQUFNLE1BQU0sSUFBSSxTQUFTLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztZQUM5QyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZCLENBQUM7UUFDRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2Zyb20sIE9ic2VydmFibGUsIG9mLCB0aHJvd0Vycm9yfSBmcm9tICdyeGpzJztcbmltcG9ydCB7bWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAqIEZpbGUgUGlja2VyIE9wdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuZXhwb3J0IGludGVyZmFjZSBGaWxlU3lzdGVtRmlsZVBpY2tlck9wdGlvbnMge1xuICAvKipcbiAgICpcbiAgICogYGBgXG4gICAqICAgdHlwZXM6IFtcbiAgICogICAgIHtcbiAgICogICAgICAgZGVzY3JpcHRpb246IFwiSW1hZ2VzXCIsXG4gICAqICAgICAgIGFjY2VwdDoge1xuICAgKiAgICAgICAgIFwiaW1hZ2UvKlwiOiBbXCIucG5nXCIsIFwiLmdpZlwiLCBcIi5qcGVnXCIsIFwiLmpwZ1wiXSxcbiAgICogICAgICAgfSxcbiAgICogICAgIH0sXG4gICAqICAgXSxcbiAgICogICBleGNsdWRlQWNjZXB0QWxsT3B0aW9uOiB0cnVlLFxuICAgKiAgIG11bHRpcGxlOiBmYWxzZSxcbiAgICogYGBgXG4gICAqL1xuICBleGNsdWRlQWNjZXB0QWxsT3B0aW9ucz86IGJvb2xlYW4sXG4gIGlkPzogc3RyaW5nLFxuICBtdWx0aXBsZT86IGJvb2xlYW4sXG4gIHN0YXJ0SW4/OiBGaWxlU3lzdGVtSGFuZGxlIHwgJ2Rlc2t0b3AnIHwgJ2RvY3VtZW50cycgfCAnZG93bmxvYWRzJyB8ICdtdXNpYycgfCAncGljdHVyZXMnIHwgJ3ZpZGVvcycsXG4gIHR5cGVzPzogRmlsZVN5c3RlbUZpbGVQaWNrZXJUeXBlT3B0aW9uc1tdXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmlsZVN5c3RlbUZpbGVQaWNrZXJUeXBlT3B0aW9ucyB7XG4gIGFjY2VwdDogUmVjb3JkPHN0cmluZyxzdHJpbmdbXT4sXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nXG59XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAqIERpcmVjdG9yeSBQaWNrZXIgT3B0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuZXhwb3J0IGludGVyZmFjZSBGaWxlU3lzdGVtRGlyZWN0b3J5UGlja2VyT3B0aW9ucyB7XG4gIGlkPzogc3RyaW5nLFxuICBtb2RlPzogc3RyaW5nLFxuICBzdGFydEluPzogRmlsZVN5c3RlbUhhbmRsZSB8ICdkZXNrdG9wJyB8ICdkb2N1bWVudHMnIHwgJ2Rvd25sb2FkcycgfCAnbXVzaWMnIHwgJ3BpY3R1cmVzJyB8ICd2aWRlb3MnXG59XG5cblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICogRmlsZVN5c3RlbSBBUEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4vKipcbiAqIEhvbGRzIGV4cGVyaW1lbnRhbCBmZWF0dXJlcyBvZiB0aGUgYnJvd3NlciBgRmlsZSBTeXN0ZW0gQVBJYC4gTm8gdHlwZXNjcmlwdCBsaW50IGNoZWNrc1xuICogYXJlIHBlcmZvcm1lZCBoZXJlIVxuICovXG5leHBvcnQgY2xhc3MgRmlsZVN5c3RlbUFwaSB7XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIERhdGFUcmFuc2Zlckl0ZW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHVibGljIHN0YXRpYyBpc0dldEFzRmlsZVN5c3RlbUhhbmRsZVN1cHBvcnRlZCh0cmFuc2Zlckl0ZW06IERhdGFUcmFuc2Zlckl0ZW0pOiBib29sZWFuIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgcmV0dXJuIHRyYW5zZmVySXRlbS5nZXRBc0ZpbGVTeXN0ZW1IYW5kbGUgIT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIEZpbGVTeXN0ZW1IYW5kbGUgT2JzZXJ2YWJsZSBvZiB0aGUgZ2l2ZW4gRGF0YVRyYW5zZmVySXRlbS4gVGhlIEZpbGVTeXN0ZW1IYW5kbGUgY2FuIG9ubHkgYmUgYWNjZXNzZWQgaW4gdGhlIGBkcmFnc3RhcnRgXG4gICAqIG9yIGBkcm9wYCBldmVudC4gT3RoZXJ3aXNlLCBpdCB3aWxsIHJldHVybiBudWxsIVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBnZXRBc0ZpbGVTeXN0ZW1IYW5kbGUodHJhbnNmZXJJdGVtOiBEYXRhVHJhbnNmZXJJdGVtKTogT2JzZXJ2YWJsZTxGaWxlU3lzdGVtSGFuZGxlIHwgbnVsbD4ge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICByZXR1cm4gZnJvbSh0cmFuc2Zlckl0ZW0uZ2V0QXNGaWxlU3lzdGVtSGFuZGxlKCkpO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIEZpbGUgUGlja2VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHVibGljIHN0YXRpYyBpc0ZpbGVTeXN0ZW1TdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICdzaG93T3BlbkZpbGVQaWNrZXInIGluIHdpbmRvdztcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgb3BlbkZpbGVQaWNrZXIocGlja2VyT3B0czogRmlsZVN5c3RlbUZpbGVQaWNrZXJPcHRpb25zKTogT2JzZXJ2YWJsZTxGaWxlU3lzdGVtRmlsZUhhbmRsZVtdPiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHJldHVybiBmcm9tKHdpbmRvdy5zaG93T3BlbkZpbGVQaWNrZXIocGlja2VyT3B0cykpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcihlKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIERpcmVjdG9yeSBQaWNrZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHVibGljIHN0YXRpYyBpc0RpcmVjdG9yeVBpY2tlclN1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gJ3Nob3dEaXJlY3RvcnlQaWNrZXInIGluIHdpbmRvdztcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgb3BlbkRpcmVjdG9yeVBpY2tlcihwaWNrZXJPcHRzOiBGaWxlU3lzdGVtRGlyZWN0b3J5UGlja2VyT3B0aW9ucyk6IE9ic2VydmFibGU8RmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZT4ge1xuICAgIHRyeSB7XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICByZXR1cm4gZnJvbSh3aW5kb3cuc2hvd0RpcmVjdG9yeVBpY2tlcihwaWNrZXJPcHRzKSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKGUpKTtcbiAgICB9XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwdWJsaWMgc3RhdGljIGdldEhhbmRsZXNGcm9tRGlyZWN0b3J5KGRpckhhbmRsZTogRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZSk6IE9ic2VydmFibGU8RmlsZVN5c3RlbUhhbmRsZVtdPiB7XG4gICAgcmV0dXJuIGZyb20oRmlsZVN5c3RlbUFwaS5nZXRIYW5kbGVzRnJvbURpcmVjdG9yeUFzeW5jKGRpckhhbmRsZSkpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBidWlsZFJlbGF0aXZlUGFyZW50KFxuICAgIGZpbGVPckRpckhhbmRsZTogRmlsZVN5c3RlbUhhbmRsZSxcbiAgICByb290RGlyZWN0b3J5PzogRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZVxuICApOiBPYnNlcnZhYmxlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuXG4gICAgaWYgKHJvb3REaXJlY3RvcnkgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gb2YodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBjb25zdCByZWxhdGl2ZVBhcmVudHMkID0gZnJvbShyb290RGlyZWN0b3J5LnJlc29sdmUoZmlsZU9yRGlySGFuZGxlKSk7XG4gICAgcmV0dXJuIHJlbGF0aXZlUGFyZW50cyQucGlwZShcbiAgICAgIG1hcChwYXJlbnRzID0+IHtcbiAgICAgICAgLy8gcGF0aC90by9mb2xkZXIvZmlsZS5qcGdcbiAgICAgICAgY29uc3QgcGF0aCA9IHBhcmVudHM7XG5cbiAgICAgICAgLy8gcm9vdC9wYXRoL3RvL2ZvbGRlci9maWxlLmpwZ1xuICAgICAgICBwYXRoLnVuc2hpZnQocm9vdERpcmVjdG9yeS5uYW1lKTtcblxuICAgICAgICAvLyByb290L3BhdGgvdG8vZm9sZGVyXG4gICAgICAgIHBhdGgucG9wKCk7XG4gICAgICAgIHJldHVybiBwYXRoLmpvaW4oJy8nKTtcbiAgICAgIH1cbiAgICApKVxuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXN5bmMgZ2V0SGFuZGxlc0Zyb21EaXJlY3RvcnlBc3luYyhkaXJIYW5kbGU6IEZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGUpOiBQcm9taXNlPEZpbGVTeXN0ZW1IYW5kbGVbXT4ge1xuICAgIGNvbnN0IGhhbmRsZXM6IEZpbGVTeXN0ZW1IYW5kbGVbXSA9IFtdO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBmb3IgYXdhaXQgKGNvbnN0IGhhbmRsZSBvZiBkaXJIYW5kbGUudmFsdWVzKCkpIHtcbiAgICAgIGhhbmRsZXMucHVzaChoYW5kbGUpO1xuICAgIH1cbiAgICByZXR1cm4gaGFuZGxlcztcbiAgfVxufVxuIl19
@@ -1,3 +1,6 @@
1
+ import { from } from 'rxjs';
2
+ import { combineLatestWith, map } from 'rxjs/operators';
3
+ import { FileSystemApi } from '../file-system-api';
1
4
  /**
2
5
  * Represents a file and the relative path where the user has selected it.
3
6
  * This is useful if the user has selected a folder and files
@@ -12,26 +15,24 @@ export class FileEntry {
12
15
  * which is also supported by this method.
13
16
  */
14
17
  static ofFile(file) {
15
- let relativeParent = null;
16
- if (file.webkitRelativePath) {
17
- if (file.webkitRelativePath.endsWith(file.name)) {
18
- const nameStart = file.webkitRelativePath.length - file.name.length;
19
- relativeParent = file.webkitRelativePath.substring(0, nameStart);
20
- }
21
- else {
22
- relativeParent = file.webkitRelativePath;
23
- }
24
- }
25
- return FileEntry.relativeFile(file, relativeParent);
18
+ return FileEntry.relativeFile(file, this.buildRelativeParent(file));
19
+ }
20
+ /**
21
+ * Creates an Observable of a File Entry by resolving its FileSystemFileHandle.
22
+ * @param fileHandle
23
+ * @param rootDirectory is needed to build a relative parent
24
+ */
25
+ static ofFileHandle(fileHandle, rootDirectory) {
26
+ return from(fileHandle.getFile()).pipe(combineLatestWith(FileSystemApi.buildRelativeParent(fileHandle, rootDirectory)), map(([file, relativeParent]) => FileEntry.relativeFile(file, relativeParent, fileHandle)));
26
27
  }
27
28
  /**
28
29
  * Creates a file Entry with a relative parent path
29
30
  */
30
- static relativeFile(file, relativeParent) {
31
+ static relativeFile(file, relativeParent, fileHandle) {
31
32
  if (relativeParent && relativeParent.endsWith('/')) {
32
33
  relativeParent = relativeParent.substring(0, relativeParent.length - 1);
33
34
  }
34
- return new FileEntry(file, relativeParent);
35
+ return new FileEntry(file, relativeParent, fileHandle);
35
36
  }
36
37
  static toFileMap(entries) {
37
38
  const map = new Map();
@@ -51,9 +52,10 @@ export class FileEntry {
51
52
  * Contains the relative path from the selected folder
52
53
  * to this file. Only relevant if the user has selected a folder.
53
54
  */
54
- relativeParent) {
55
+ relativeParent, fileHandle) {
55
56
  this.file = file;
56
57
  this.relativeParent = relativeParent;
58
+ this.fileHandle = fileHandle;
57
59
  this.relativePath = FileEntry.buildRelativePath(relativeParent, file);
58
60
  }
59
61
  /***************************************************************************
@@ -72,5 +74,18 @@ export class FileEntry {
72
74
  return file.name;
73
75
  }
74
76
  }
77
+ static buildRelativeParent(file) {
78
+ let relativeParent = null;
79
+ if (file.webkitRelativePath) {
80
+ if (file.webkitRelativePath.endsWith(file.name)) {
81
+ const nameStart = file.webkitRelativePath.length - file.name.length;
82
+ relativeParent = file.webkitRelativePath.substring(0, nameStart);
83
+ }
84
+ else {
85
+ relativeParent = file.webkitRelativePath;
86
+ }
87
+ }
88
+ return relativeParent;
89
+ }
75
90
  }
76
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1lbnRyeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VsZGVyYnl0ZS9uZ3gtc3RhcnRlci9zcmMvbGliL2NvbXBvbmVudHMvZmlsZXMvbGlzdGluZy9maWxlLWVudHJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8sU0FBUztJQUVwQjs7Ozs7O09BTUc7SUFDSSxNQUFNLENBQUMsTUFBTSxDQUFDLElBQVU7UUFFN0IsSUFBSSxjQUFjLEdBQVcsSUFBSSxDQUFDO1FBRWxDLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDNUIsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNoRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO2dCQUNwRSxjQUFjLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDbkUsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLGNBQWMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUM7WUFDM0MsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLFNBQVMsQ0FBQyxZQUFZLENBQzNCLElBQUksRUFDSixjQUFjLENBQ2YsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNJLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBVSxFQUFFLGNBQTZCO1FBQ2xFLElBQUksY0FBYyxJQUFJLGNBQWMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNuRCxjQUFjLEdBQUcsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMxRSxDQUFDO1FBQ0QsT0FBTyxJQUFJLFNBQVMsQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVNLE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBb0I7UUFDMUMsTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLEVBQW1CLENBQUM7UUFDdkMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVNLE1BQU0sQ0FBQyxXQUFXLENBQUMsT0FBb0I7UUFDNUMsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFhRDs7OztnRkFJNEU7SUFFNUUsWUFDa0IsSUFBVTtJQUMxQjs7O09BR0c7SUFDYSxjQUE2QjtRQUw3QixTQUFJLEdBQUosSUFBSSxDQUFNO1FBS1YsbUJBQWMsR0FBZCxjQUFjLENBQWU7UUFFN0MsSUFBSSxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUMsaUJBQWlCLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFRDs7OztnRkFJNEU7SUFFNUU7O09BRUc7SUFDSyxNQUFNLENBQUMsaUJBQWlCLENBQUMsY0FBc0IsRUFBRSxJQUFVO1FBQ2pFLElBQUksY0FBYyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQzNCLE9BQU8sY0FBYyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQzFDLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ25CLENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFJlcHJlc2VudHMgYSBmaWxlIGFuZCB0aGUgcmVsYXRpdmUgcGF0aCB3aGVyZSB0aGUgdXNlciBoYXMgc2VsZWN0ZWQgaXQuXG4gKiBUaGlzIGlzIHVzZWZ1bCBpZiB0aGUgdXNlciBoYXMgc2VsZWN0ZWQgYSBmb2xkZXIgYW5kIGZpbGVzXG4gKiBhcmUgbGlzdGVkIHJlY3Vyc2l2ZWx5LlxuICovXG5leHBvcnQgY2xhc3MgRmlsZUVudHJ5IHtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIGZpbGUgRW50cnkgd2l0aG91dCBhbiBleHBsaWNpdCByZWxhdGl2ZSBwYXJlbnQuXG4gICAqXG4gICAqIEhvd2V2ZXIsIGRlcGVuZGluZyBvbiBob3cgdGhlIGZpbGUgd2FzIHNlbGVjdGVkLCBzb21lIGJyb3dzZXJzXG4gICAqIGVuY29kZSB0aGUgcmVsYXRpdmUgcGFyZW50IHBhdGggaW4gdGhlIHByb3BlcnR5ICd3ZWJraXRSZWxhdGl2ZVBhdGgnXG4gICAqIHdoaWNoIGlzIGFsc28gc3VwcG9ydGVkIGJ5IHRoaXMgbWV0aG9kLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBvZkZpbGUoZmlsZTogRmlsZSk6IEZpbGVFbnRyeSB7XG5cbiAgICBsZXQgcmVsYXRpdmVQYXJlbnQ6IHN0cmluZyA9IG51bGw7XG5cbiAgICBpZiAoZmlsZS53ZWJraXRSZWxhdGl2ZVBhdGgpIHtcbiAgICAgIGlmIChmaWxlLndlYmtpdFJlbGF0aXZlUGF0aC5lbmRzV2l0aChmaWxlLm5hbWUpKSB7XG4gICAgICAgIGNvbnN0IG5hbWVTdGFydCA9IGZpbGUud2Via2l0UmVsYXRpdmVQYXRoLmxlbmd0aCAtIGZpbGUubmFtZS5sZW5ndGg7XG4gICAgICAgIHJlbGF0aXZlUGFyZW50ID0gZmlsZS53ZWJraXRSZWxhdGl2ZVBhdGguc3Vic3RyaW5nKDAsIG5hbWVTdGFydCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWxhdGl2ZVBhcmVudCA9IGZpbGUud2Via2l0UmVsYXRpdmVQYXRoO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBGaWxlRW50cnkucmVsYXRpdmVGaWxlKFxuICAgICAgZmlsZSxcbiAgICAgIHJlbGF0aXZlUGFyZW50XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgZmlsZSBFbnRyeSB3aXRoIGEgcmVsYXRpdmUgcGFyZW50IHBhdGhcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVsYXRpdmVGaWxlKGZpbGU6IEZpbGUsIHJlbGF0aXZlUGFyZW50OiBzdHJpbmcgfCBudWxsKSB7XG4gICAgaWYgKHJlbGF0aXZlUGFyZW50ICYmIHJlbGF0aXZlUGFyZW50LmVuZHNXaXRoKCcvJykpIHtcbiAgICAgIHJlbGF0aXZlUGFyZW50ID0gcmVsYXRpdmVQYXJlbnQuc3Vic3RyaW5nKDAsIHJlbGF0aXZlUGFyZW50Lmxlbmd0aCAtIDEpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEZpbGVFbnRyeShmaWxlLCByZWxhdGl2ZVBhcmVudCk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHRvRmlsZU1hcChlbnRyaWVzOiBGaWxlRW50cnlbXSk6IE1hcDxGaWxlLCBGaWxlRW50cnk+IHtcbiAgICBjb25zdCBtYXAgPSBuZXcgTWFwPEZpbGUsIEZpbGVFbnRyeT4oKTtcbiAgICBlbnRyaWVzLmZvckVhY2goZSA9PiBtYXAuc2V0KGUuZmlsZSwgZSkpO1xuICAgIHJldHVybiBtYXA7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHRvRmlsZUFycmF5KGVudHJpZXM6IEZpbGVFbnRyeVtdKTogRmlsZVtdIHtcbiAgICByZXR1cm4gZW50cmllcy5tYXAoZSA9PiBlLmZpbGUpO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIEZpZWxkcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdHJpbmcgd2hpY2ggc3BlY2lmaWVzIHRoZSBmaWxlJ3MgcGF0aCByZWxhdGl2ZSB0byB0aGUgZGlyZWN0b3J5IHNlbGVjdGVkIGJ5IHRoZSB1c2VyLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJlbGF0aXZlUGF0aDogc3RyaW5nO1xuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBDb25zdHJ1Y3RvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IGZpbGU6IEZpbGUsXG4gICAgLyoqXG4gICAgICogQ29udGFpbnMgdGhlIHJlbGF0aXZlIHBhdGggZnJvbSB0aGUgc2VsZWN0ZWQgZm9sZGVyXG4gICAgICogdG8gdGhpcyBmaWxlLiBPbmx5IHJlbGV2YW50IGlmIHRoZSB1c2VyIGhhcyBzZWxlY3RlZCBhIGZvbGRlci5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgcmVsYXRpdmVQYXJlbnQ6IHN0cmluZyB8IG51bGxcbiAgKSB7XG4gICAgdGhpcy5yZWxhdGl2ZVBhdGggPSBGaWxlRW50cnkuYnVpbGRSZWxhdGl2ZVBhdGgocmVsYXRpdmVQYXJlbnQsIGZpbGUpO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFByaXZhdGUgbWV0aG9kcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdHJpbmcgd2hpY2ggc3BlY2lmaWVzIHRoZSBmaWxlJ3MgcGF0aCByZWxhdGl2ZSB0byB0aGUgZGlyZWN0b3J5IHNlbGVjdGVkIGJ5IHRoZSB1c2VyLlxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgYnVpbGRSZWxhdGl2ZVBhdGgocmVsYXRpdmVQYXJlbnQ6IHN0cmluZywgZmlsZTogRmlsZSk6IHN0cmluZyB7XG4gICAgaWYgKHJlbGF0aXZlUGFyZW50ICE9IG51bGwpIHtcbiAgICAgIHJldHVybiByZWxhdGl2ZVBhcmVudCArICcvJyArIGZpbGUubmFtZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZpbGUubmFtZTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
91
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1lbnRyeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VsZGVyYnl0ZS9uZ3gtc3RhcnRlci9zcmMvbGliL2NvbXBvbmVudHMvZmlsZXMvbGlzdGluZy9maWxlLWVudHJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxJQUFJLEVBQWEsTUFBTSxNQUFNLENBQUM7QUFDdEMsT0FBTyxFQUFDLGlCQUFpQixFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3RELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUVqRDs7OztHQUlHO0FBQ0gsTUFBTSxPQUFPLFNBQVM7SUFFcEI7Ozs7OztPQU1HO0lBQ0ksTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFVO1FBRTdCLE9BQU8sU0FBUyxDQUFDLFlBQVksQ0FDM0IsSUFBSSxFQUNKLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FDL0IsQ0FBQztJQUNKLENBQUM7SUFHRDs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLFlBQVksQ0FDeEIsVUFBZ0MsRUFDaEMsYUFBeUM7UUFHdkMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUNwQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsbUJBQW1CLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxDQUFDLEVBQy9FLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUNwRCxJQUFJLEVBQ0osY0FBYyxFQUNkLFVBQVUsQ0FBQyxDQUFDLENBQ2YsQ0FBQztJQUNOLENBQUM7SUFJRDs7T0FFRztJQUNJLE1BQU0sQ0FBQyxZQUFZLENBQ3hCLElBQVUsRUFDVixjQUE2QixFQUM3QixVQUFpQztRQUVqQyxJQUFJLGNBQWMsSUFBSSxjQUFjLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDbkQsY0FBYyxHQUFHLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDMUUsQ0FBQztRQUNELE9BQU8sSUFBSSxTQUFTLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRU0sTUFBTSxDQUFDLFNBQVMsQ0FBQyxPQUFvQjtRQUMxQyxNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsRUFBbUIsQ0FBQztRQUN2QyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekMsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRU0sTUFBTSxDQUFDLFdBQVcsQ0FBQyxPQUFvQjtRQUM1QyxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQWFEOzs7O2dGQUk0RTtJQUU1RSxZQUNrQixJQUFVO0lBQzFCOzs7T0FHRztJQUNhLGNBQTZCLEVBQzdCLFVBQWlDO1FBTmpDLFNBQUksR0FBSixJQUFJLENBQU07UUFLVixtQkFBYyxHQUFkLGNBQWMsQ0FBZTtRQUM3QixlQUFVLEdBQVYsVUFBVSxDQUF1QjtRQUVqRCxJQUFJLENBQUMsWUFBWSxHQUFHLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVEOzs7O2dGQUk0RTtJQUU1RTs7T0FFRztJQUNLLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxjQUFzQixFQUFFLElBQVU7UUFDakUsSUFBSSxjQUFjLElBQUksSUFBSSxFQUFFLENBQUM7WUFDM0IsT0FBTyxjQUFjLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDMUMsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDbkIsQ0FBQztJQUNILENBQUM7SUFHTyxNQUFNLENBQUMsbUJBQW1CLENBQUMsSUFBVTtRQUMzQyxJQUFJLGNBQWMsR0FBVyxJQUFJLENBQUM7UUFFbEMsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUM1QixJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ2hELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7Z0JBQ3BFLGNBQWMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUNuRSxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sY0FBYyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztZQUMzQyxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sY0FBYyxDQUFDO0lBQ3hCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7ZnJvbSwgT2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2NvbWJpbmVMYXRlc3RXaXRoLCBtYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7RmlsZVN5c3RlbUFwaX0gZnJvbSAnLi4vZmlsZS1zeXN0ZW0tYXBpJztcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgZmlsZSBhbmQgdGhlIHJlbGF0aXZlIHBhdGggd2hlcmUgdGhlIHVzZXIgaGFzIHNlbGVjdGVkIGl0LlxuICogVGhpcyBpcyB1c2VmdWwgaWYgdGhlIHVzZXIgaGFzIHNlbGVjdGVkIGEgZm9sZGVyIGFuZCBmaWxlc1xuICogYXJlIGxpc3RlZCByZWN1cnNpdmVseS5cbiAqL1xuZXhwb3J0IGNsYXNzIEZpbGVFbnRyeSB7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBmaWxlIEVudHJ5IHdpdGhvdXQgYW4gZXhwbGljaXQgcmVsYXRpdmUgcGFyZW50LlxuICAgKlxuICAgKiBIb3dldmVyLCBkZXBlbmRpbmcgb24gaG93IHRoZSBmaWxlIHdhcyBzZWxlY3RlZCwgc29tZSBicm93c2Vyc1xuICAgKiBlbmNvZGUgdGhlIHJlbGF0aXZlIHBhcmVudCBwYXRoIGluIHRoZSBwcm9wZXJ0eSAnd2Via2l0UmVsYXRpdmVQYXRoJ1xuICAgKiB3aGljaCBpcyBhbHNvIHN1cHBvcnRlZCBieSB0aGlzIG1ldGhvZC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgb2ZGaWxlKGZpbGU6IEZpbGUpOiBGaWxlRW50cnkge1xuXG4gICAgcmV0dXJuIEZpbGVFbnRyeS5yZWxhdGl2ZUZpbGUoXG4gICAgICBmaWxlLFxuICAgICAgdGhpcy5idWlsZFJlbGF0aXZlUGFyZW50KGZpbGUpXG4gICAgKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gT2JzZXJ2YWJsZSBvZiBhIEZpbGUgRW50cnkgYnkgcmVzb2x2aW5nIGl0cyBGaWxlU3lzdGVtRmlsZUhhbmRsZS5cbiAgICogQHBhcmFtIGZpbGVIYW5kbGVcbiAgICogQHBhcmFtIHJvb3REaXJlY3RvcnkgaXMgbmVlZGVkIHRvIGJ1aWxkIGEgcmVsYXRpdmUgcGFyZW50XG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG9mRmlsZUhhbmRsZShcbiAgICBmaWxlSGFuZGxlOiBGaWxlU3lzdGVtRmlsZUhhbmRsZSxcbiAgICByb290RGlyZWN0b3J5PzogRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZVxuICApOiBPYnNlcnZhYmxlPEZpbGVFbnRyeT4ge1xuXG4gICAgICByZXR1cm4gZnJvbShmaWxlSGFuZGxlLmdldEZpbGUoKSkucGlwZShcbiAgICAgICAgY29tYmluZUxhdGVzdFdpdGgoRmlsZVN5c3RlbUFwaS5idWlsZFJlbGF0aXZlUGFyZW50KGZpbGVIYW5kbGUsIHJvb3REaXJlY3RvcnkpKSxcbiAgICAgICAgbWFwKChbZmlsZSwgcmVsYXRpdmVQYXJlbnRdKSA9PiBGaWxlRW50cnkucmVsYXRpdmVGaWxlKFxuICAgICAgICAgIGZpbGUsXG4gICAgICAgICAgcmVsYXRpdmVQYXJlbnQsXG4gICAgICAgICAgZmlsZUhhbmRsZSkpXG4gICAgICApO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgZmlsZSBFbnRyeSB3aXRoIGEgcmVsYXRpdmUgcGFyZW50IHBhdGhcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVsYXRpdmVGaWxlKFxuICAgIGZpbGU6IEZpbGUsXG4gICAgcmVsYXRpdmVQYXJlbnQ6IHN0cmluZyB8IG51bGwsXG4gICAgZmlsZUhhbmRsZT86IEZpbGVTeXN0ZW1GaWxlSGFuZGxlXG4gICk6IEZpbGVFbnRyeSB7XG4gICAgaWYgKHJlbGF0aXZlUGFyZW50ICYmIHJlbGF0aXZlUGFyZW50LmVuZHNXaXRoKCcvJykpIHtcbiAgICAgIHJlbGF0aXZlUGFyZW50ID0gcmVsYXRpdmVQYXJlbnQuc3Vic3RyaW5nKDAsIHJlbGF0aXZlUGFyZW50Lmxlbmd0aCAtIDEpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEZpbGVFbnRyeShmaWxlLCByZWxhdGl2ZVBhcmVudCwgZmlsZUhhbmRsZSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHRvRmlsZU1hcChlbnRyaWVzOiBGaWxlRW50cnlbXSk6IE1hcDxGaWxlLCBGaWxlRW50cnk+IHtcbiAgICBjb25zdCBtYXAgPSBuZXcgTWFwPEZpbGUsIEZpbGVFbnRyeT4oKTtcbiAgICBlbnRyaWVzLmZvckVhY2goZSA9PiBtYXAuc2V0KGUuZmlsZSwgZSkpO1xuICAgIHJldHVybiBtYXA7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHRvRmlsZUFycmF5KGVudHJpZXM6IEZpbGVFbnRyeVtdKTogRmlsZVtdIHtcbiAgICByZXR1cm4gZW50cmllcy5tYXAoZSA9PiBlLmZpbGUpO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIEZpZWxkcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdHJpbmcgd2hpY2ggc3BlY2lmaWVzIHRoZSBmaWxlJ3MgcGF0aCByZWxhdGl2ZSB0byB0aGUgZGlyZWN0b3J5IHNlbGVjdGVkIGJ5IHRoZSB1c2VyLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJlbGF0aXZlUGF0aDogc3RyaW5nO1xuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBDb25zdHJ1Y3RvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IGZpbGU6IEZpbGUsXG4gICAgLyoqXG4gICAgICogQ29udGFpbnMgdGhlIHJlbGF0aXZlIHBhdGggZnJvbSB0aGUgc2VsZWN0ZWQgZm9sZGVyXG4gICAgICogdG8gdGhpcyBmaWxlLiBPbmx5IHJlbGV2YW50IGlmIHRoZSB1c2VyIGhhcyBzZWxlY3RlZCBhIGZvbGRlci5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgcmVsYXRpdmVQYXJlbnQ6IHN0cmluZyB8IG51bGwsXG4gICAgcHVibGljIHJlYWRvbmx5IGZpbGVIYW5kbGU/OiBGaWxlU3lzdGVtRmlsZUhhbmRsZVxuICApIHtcbiAgICB0aGlzLnJlbGF0aXZlUGF0aCA9IEZpbGVFbnRyeS5idWlsZFJlbGF0aXZlUGF0aChyZWxhdGl2ZVBhcmVudCwgZmlsZSk7XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHJpdmF0ZSBtZXRob2RzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAvKipcbiAgICogUmV0dXJucyBhIHN0cmluZyB3aGljaCBzcGVjaWZpZXMgdGhlIGZpbGUncyBwYXRoIHJlbGF0aXZlIHRvIHRoZSBkaXJlY3Rvcnkgc2VsZWN0ZWQgYnkgdGhlIHVzZXIuXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBidWlsZFJlbGF0aXZlUGF0aChyZWxhdGl2ZVBhcmVudDogc3RyaW5nLCBmaWxlOiBGaWxlKTogc3RyaW5nIHtcbiAgICBpZiAocmVsYXRpdmVQYXJlbnQgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHJlbGF0aXZlUGFyZW50ICsgJy8nICsgZmlsZS5uYW1lO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmlsZS5uYW1lO1xuICAgIH1cbiAgfVxuXG5cbiAgcHJpdmF0ZSBzdGF0aWMgYnVpbGRSZWxhdGl2ZVBhcmVudChmaWxlOiBGaWxlKTogc3RyaW5nIHtcbiAgICBsZXQgcmVsYXRpdmVQYXJlbnQ6IHN0cmluZyA9IG51bGw7XG5cbiAgICBpZiAoZmlsZS53ZWJraXRSZWxhdGl2ZVBhdGgpIHtcbiAgICAgIGlmIChmaWxlLndlYmtpdFJlbGF0aXZlUGF0aC5lbmRzV2l0aChmaWxlLm5hbWUpKSB7XG4gICAgICAgIGNvbnN0IG5hbWVTdGFydCA9IGZpbGUud2Via2l0UmVsYXRpdmVQYXRoLmxlbmd0aCAtIGZpbGUubmFtZS5sZW5ndGg7XG4gICAgICAgIHJlbGF0aXZlUGFyZW50ID0gZmlsZS53ZWJraXRSZWxhdGl2ZVBhdGguc3Vic3RyaW5nKDAsIG5hbWVTdGFydCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWxhdGl2ZVBhcmVudCA9IGZpbGUud2Via2l0UmVsYXRpdmVQYXRoO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVsYXRpdmVQYXJlbnQ7XG4gIH1cbn1cbiJdfQ==
@@ -1,7 +1,10 @@
1
- import { EMPTY, mergeMap, Observable, of, zip } from 'rxjs';
1
+ import { of, switchMap, zip } from 'rxjs';
2
2
  import { FileEntry } from './file-entry';
3
3
  import { map } from 'rxjs/operators';
4
4
  import { LoggerFactory } from '@elderbyte/ts-logger';
5
+ import { FileListingWebkit } from './file-listing-webkit';
6
+ import { FileListingSystemHandle } from './file-listing-system-handle';
7
+ import { FileSystemApi } from '../file-system-api';
5
8
  export class FileListingRx {
6
9
  constructor() {
7
10
  this.log = LoggerFactory.getLogger(this.constructor.name);
@@ -16,89 +19,46 @@ export class FileListingRx {
16
19
  const obs = [];
17
20
  for (let i = 0; i < transferItemList.length; i++) {
18
21
  const transferItem = transferItemList[i];
19
- const entry = transferItem.webkitGetAsEntry();
20
- if (entry) {
21
- obs.push(this.listFilesRecursive(entry));
22
- }
23
- else {
24
- const itemAsFile = transferItem.getAsFile();
25
- if (itemAsFile) {
26
- obs.push(of([FileEntry.ofFile(itemAsFile)]));
27
- }
28
- else {
29
- if (transferItem.kind == 'file') {
30
- obs.push(of([
31
- FileEntry.ofFile(new File([], '', {
32
- type: transferItem.type
33
- }))
34
- ]));
35
- }
36
- else {
37
- this.log.warn('Could not handle DataTransferItem!', transferItem);
38
- }
39
- }
40
- }
22
+ obs.push(this.resolveTransferItem(transferItem));
41
23
  }
42
24
  return zip(obs).pipe(map(files => files.flat()));
43
25
  }
44
- listFilesRecursive(entry) {
45
- return this.listFilesRecursiveAsync(entry, null);
46
- }
47
26
  /***************************************************************************
48
27
  * *
49
28
  * Private methods *
50
29
  * *
51
30
  **************************************************************************/
52
- listFilesRecursiveAsync(entry, parent) {
53
- if (entry.isDirectory) {
54
- const directoryEntry = entry;
55
- return this.readEntries(directoryEntry).pipe(mergeMap(entries => zip(entries.map(entry => this.listFilesRecursiveAsync(entry, directoryEntry)))), map(files => files.flat()));
56
- }
57
- else if (entry.isFile) {
58
- const fileEntry = entry;
59
- return this.observableFile(fileEntry, parent).pipe(map(file => [file]));
60
- }
61
- else {
62
- return EMPTY;
31
+ resolveTransferItem(transferItem) {
32
+ if (FileSystemApi.isGetAsFileSystemHandleSupported(transferItem)) {
33
+ return FileSystemApi.getAsFileSystemHandle(transferItem).pipe(switchMap(handle => handle ? FileListingSystemHandle.listFiles(handle) : this.legacyFileListing(transferItem)));
63
34
  }
35
+ return this.legacyFileListing(transferItem);
64
36
  }
65
- observableFile(fileEntry, parent) {
66
- return new Observable(observer => {
67
- fileEntry.file(file => {
68
- observer.next(FileEntry.relativeFile(file, this.trimStaringSlash(parent?.fullPath)));
69
- observer.complete();
70
- }, err => {
71
- observer.error(err);
72
- observer.complete();
73
- });
74
- });
75
- }
76
- trimStaringSlash(path) {
77
- if (path) {
78
- if (path.startsWith('/')) {
79
- path = path.substring(1);
80
- }
37
+ legacyFileListing(transferItem) {
38
+ const entry = transferItem.webkitGetAsEntry();
39
+ if (entry) {
40
+ return FileListingWebkit.listFilesRecursive(entry);
81
41
  }
82
- return path;
83
- }
84
- readEntries(directoryEntry) {
85
- return new Observable(observer => {
86
- this.consumeReaderToCompletion(observer, directoryEntry.createReader());
87
- });
42
+ return this.fallbackFileListing(transferItem);
88
43
  }
89
- consumeReaderToCompletion(observer, directoryReader) {
90
- directoryReader.readEntries(entries => {
91
- if (entries && entries.length > 0) {
92
- observer.next(entries);
93
- this.consumeReaderToCompletion(observer, directoryReader);
44
+ fallbackFileListing(transferItem) {
45
+ const itemAsFile = transferItem.getAsFile();
46
+ if (itemAsFile) {
47
+ return of([FileEntry.ofFile(itemAsFile)]);
48
+ }
49
+ else {
50
+ if (transferItem.kind == 'file') {
51
+ return of([
52
+ FileEntry.ofFile(new File([], '', {
53
+ type: transferItem.type
54
+ }))
55
+ ]);
94
56
  }
95
57
  else {
96
- observer.complete();
58
+ this.log.warn('Could not handle DataTransferItem!', transferItem);
59
+ return of([]);
97
60
  }
98
- }, err => {
99
- observer.error(err);
100
- observer.complete();
101
- });
61
+ }
102
62
  }
103
63
  }
104
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1saXN0aW5nLXJ4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWxkZXJieXRlL25neC1zdGFydGVyL3NyYy9saWIvY29tcG9uZW50cy9maWxlcy9saXN0aW5nL2ZpbGUtbGlzdGluZy1yeC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFjLEdBQUcsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUN0RSxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuQyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFFbkQsTUFBTSxPQUFPLGFBQWE7SUFBMUI7UUFJbUIsUUFBRyxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQThIeEUsQ0FBQzthQWhJd0IsYUFBUSxHQUFHLElBQUksYUFBYSxFQUFFLEFBQXRCLENBQXVCO0lBSXREOzs7O2dGQUk0RTtJQUVyRSxVQUFVLENBQUMsZ0JBQXNDO1FBQ3RELE1BQU0sR0FBRyxHQUE4QixFQUFFLENBQUM7UUFDMUMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2pELE1BQU0sWUFBWSxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pDLE1BQU0sS0FBSyxHQUFHLFlBQVksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzlDLElBQUksS0FBSyxFQUFFLENBQUM7Z0JBQ1YsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFD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cmliZXIsIHppcH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0ZpbGVFbnRyeX0gZnJvbSAnLi9maWxlLWVudHJ5JztcbmltcG9ydCB7bWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0xvZ2dlckZhY3Rvcnl9IGZyb20gJ0BlbGRlcmJ5dGUvdHMtbG9nZ2VyJztcblxuZXhwb3J0IGNsYXNzIEZpbGVMaXN0aW5nUngge1xuXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSU5TVEFOQ0UgPSBuZXcgRmlsZUxpc3RpbmdSeCgpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgbG9nID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIodGhpcy5jb25zdHJ1Y3Rvci5uYW1lKTtcblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHVibGljIEFQSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwdWJsaWMgdG9GaWxlTGlzdCh0cmFuc2Zlckl0ZW1MaXN0OiBEYXRhVHJhbnNmZXJJdGVtTGlzdCk6IE9ic2VydmFibGU8RmlsZUVudHJ5W10+IHtcbiAgICBjb25zdCBvYnM6IE9ic2VydmFibGU8RmlsZUVudHJ5W10+W10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRyYW5zZmVySXRlbUxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHRyYW5zZmVySXRlbSA9IHRyYW5zZmVySXRlbUxpc3RbaV07XG4gICAgICBjb25zdCBlbnRyeSA9IHRyYW5zZmVySXRlbS53ZWJraXRHZXRBc0VudHJ5KCk7XG4gICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgb2JzLnB1c2godGhpcy5saXN0RmlsZXNSZWN1cnNpdmUoZW50cnkpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGl0ZW1Bc0ZpbGUgPSB0cmFuc2Zlckl0ZW0uZ2V0QXNGaWxlKCk7XG4gICAgICAgIGlmIChpdGVtQXNGaWxlKSB7XG4gICAgICAgICAgb2JzLnB1c2gob2YoW0ZpbGVFbnRyeS5vZkZpbGUoaXRlbUFzRmlsZSldKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHRyYW5zZmVySXRlbS5raW5kID09ICdmaWxlJykge1xuICAgICAgICAgICAgb2JzLnB1c2gob2YoW1xuICAgICAgICAgICAgICBGaWxlRW50cnkub2ZGaWxlKFxuICAgICAgICAgICAgICAgIG5ldyBGaWxlKFtdLCAnJywge1xuICAgICAgICAgICAgICAgICAgdHlwZTogdHJhbnNmZXJJdGVtLnR5cGVcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICBdKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubG9nLndhcm4oJ0NvdWxkIG5vdCBoYW5kbGUgRGF0YVRyYW5zZmVySXRlbSEnLCB0cmFuc2Zlckl0ZW0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gemlwKG9icykucGlwZShcbiAgICAgIG1hcChmaWxlcyA9PiBmaWxlcy5mbGF0KCkpLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgbGlzdEZpbGVzUmVjdXJzaXZlKFxuICAgIGVudHJ5OiBGaWxlU3lzdGVtRW50cnlcbiAgKTogT2JzZXJ2YWJsZTxGaWxlRW50cnlbXT4ge1xuICAgIHJldHVybiB0aGlzLmxpc3RGaWxlc1JlY3Vyc2l2ZUFzeW5jKGVudHJ5LCBudWxsKTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQcml2YXRlIG1ldGhvZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHByaXZhdGUgbGlzdEZpbGVzUmVjdXJzaXZlQXN5bmMoXG4gICAgZW50cnk6IEZpbGVTeXN0ZW1FbnRyeSxcbiAgICBwYXJlbnQ6IEZpbGVTeXN0ZW1EaXJlY3RvcnlFbnRyeVxuICApOiBPYnNlcnZhYmxlPEZpbGVFbnRyeVtdPiB7XG4gICAgaWYgKGVudHJ5LmlzRGlyZWN0b3J5KSB7XG4gICAgICBjb25zdCBkaXJlY3RvcnlFbnRyeSA9IGVudHJ5IGFzIEZpbGVTeXN0ZW1EaXJlY3RvcnlFbnRyeTtcbiAgICAgIHJldHVybiB0aGlzLnJlYWRFbnRyaWVzKGRpcmVjdG9yeUVudHJ5KS5waXBlKFxuICAgICAgICBtZXJnZU1hcChlbnRyaWVzID0+IHppcChcbiAgICAgICAgICBlbnRyaWVzLm1hcChlbnRyeSA9PiB0aGlzLmxpc3RGaWxlc1JlY3Vyc2l2ZUFzeW5jKGVudHJ5LCBkaXJlY3RvcnlFbnRyeSkpXG4gICAgICAgICkpLFxuICAgICAgICBtYXAoZmlsZXMgPT4gZmlsZXMuZmxhdCgpKSxcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChlbnRyeS5pc0ZpbGUpIHtcbiAgICAgIGNvbnN0IGZpbGVFbnRyeSA9IGVudHJ5IGFzIEZpbGVTeXN0ZW1GaWxlRW50cnk7XG4gICAgICByZXR1cm4gdGhpcy5vYnNlcnZhYmxlRmlsZShmaWxlRW50cnksIHBhcmVudCkucGlwZShcbiAgICAgICAgbWFwKGZpbGUgPT4gW2ZpbGVdKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIEVNUFRZO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgb2JzZXJ2YWJsZUZpbGUoXG4gICAgZmlsZUVudHJ5OiBGaWxlU3lzdGVtRmlsZUVudHJ5LFxuICAgIHBhcmVudDogRmlsZVN5c3RlbURpcmVjdG9yeUVudHJ5IHwgbnVsbFxuICApOiBPYnNlcnZhYmxlPEZpbGVFbnRyeT4ge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxGaWxlRW50cnk+KFxuICAgICAgb2JzZXJ2ZXIgPT4ge1xuICAgICAgICBmaWxlRW50cnkuZmlsZShmaWxlID0+IHtcbiAgICAgICAgICBvYnNlcnZlci5uZXh0KEZpbGVFbnRyeS5yZWxhdGl2ZUZpbGUoZmlsZSwgdGhpcy50cmltU3RhcmluZ1NsYXNoKHBhcmVudD8uZnVsbFBhdGgpKSk7XG4gICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgfSwgZXJyID0+IHtcbiAgICAgICAgICBvYnNlcnZlci5lcnJvcihlcnIpO1xuICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHRyaW1TdGFyaW5nU2xhc2gocGF0aDogc3RyaW5nIHwgbnVsbCk6IHN0cmluZyB7XG4gICAgaWYgKHBhdGgpIHtcbiAgICAgIGlmIChwYXRoLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgICBwYXRoID0gcGF0aC5zdWJzdHJpbmcoMSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwYXRoO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkRW50cmllcyhcbiAgICBkaXJlY3RvcnlFbnRyeTogRmlsZVN5c3RlbURpcmVjdG9yeUVudHJ5XG4gICk6IE9ic2VydmFibGU8RmlsZVN5c3RlbUVudHJ5W10+IHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8RmlsZVN5c3RlbUVudHJ5W10+KFxuICAgICAgb2JzZXJ2ZXIgPT4ge1xuICAgICAgICB0aGlzLmNvbnN1bWVSZWFkZXJUb0NvbXBsZXRpb24ob2JzZXJ2ZXIsIGRpcmVjdG9yeUVudHJ5LmNyZWF0ZVJlYWRlcigpKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdW1lUmVhZGVyVG9Db21wbGV0aW9uKFxuICAgIG9ic2VydmVyOiBTdWJzY3JpYmVyPEZpbGVTeXN0ZW1FbnRyeVtdPixcbiAgICBkaXJlY3RvcnlSZWFkZXI6IEZpbGVTeXN0ZW1EaXJlY3RvcnlSZWFkZXJcbiAgKTogdm9pZCB7XG4gICAgZGlyZWN0b3J5UmVhZGVyLnJlYWRFbnRyaWVzKGVudHJpZXMgPT4ge1xuICAgICAgaWYgKGVudHJpZXMgJiYgZW50cmllcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIG9ic2VydmVyLm5leHQoZW50cmllcyk7XG4gICAgICAgIHRoaXMuY29uc3VtZVJlYWRlclRvQ29tcGxldGlvbihvYnNlcnZlciwgZGlyZWN0b3J5UmVhZGVyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICB9XG4gICAgfSwgZXJyID0+IHtcbiAgICAgIG9ic2VydmVyLmVycm9yKGVycik7XG4gICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgIH0pO1xuICB9XG5cbn1cbiJdfQ==
64
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1saXN0aW5nLXJ4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWxkZXJieXRlL25neC1zdGFydGVyL3NyYy9saWIvY29tcG9uZW50cy9maWxlcy9saXN0aW5nL2ZpbGUtbGlzdGluZy1yeC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWEsRUFBRSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDcEQsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUN2QyxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkMsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQ3hELE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQ3JFLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUVqRCxNQUFNLE9BQU8sYUFBYTtJQUExQjtRQUltQixRQUFHLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBK0R4RSxDQUFDO2FBakV3QixhQUFRLEdBQUcsSUFBSSxhQUFhLEVBQUUsQUFBdEIsQ0FBdUI7SUFJdEQ7Ozs7Z0ZBSTRFO0lBRXJFLFVBQVUsQ0FBQyxnQkFBc0M7UUFDdEQsTUFBTSxHQUFHLEdBQThCLEVBQUUsQ0FBQztRQUMxQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDakQsTUFBTSxZQUFZLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDekMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztRQUNuRCxDQUFDO1FBQ0QsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUNsQixHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FDM0IsQ0FBQztJQUNKLENBQUM7SUFFRDs7OztnRkFJNEU7SUFFcEUsbUJBQW1CLENBQUMsWUFBOEI7UUFFeEQsSUFBSSxhQUFhLENBQUMsZ0NBQWdDLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztZQUNqRSxPQUFPLGFBQWEsQ0FBQyxxQkFBcUIsQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQzNELFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsdUJBQXVCLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FDL0csQ0FBQztRQUNKLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBR08saUJBQWlCLENBQUMsWUFBOEI7UUFDdEQsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDOUMsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLE9BQU8saUJBQWlCLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckQsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxZQUE4QjtRQUN4RCxNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDNUMsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNmLE9BQU8sRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUMsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLFlBQVksQ0FBQyxJQUFJLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQ2hDLE9BQU8sRUFBRSxDQUFDO29CQUNSLFNBQVMsQ0FBQyxNQUFNLENBQ2QsSUFBSSxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRTt3QkFDZixJQUFJLEVBQUUsWUFBWSxDQUFDLElBQUk7cUJBQ3hCLENBQUMsQ0FDSDtpQkFDRixDQUFDLENBQUM7WUFDTCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsb0NBQW9DLEVBQUUsWUFBWSxDQUFDLENBQUM7Z0JBQ2xFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2hCLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7T2JzZXJ2YWJsZSwgb2YsIHN3aXRjaE1hcCwgemlwfSBmcm9tICdyeGpzJztcbmltcG9ydCB7RmlsZUVudHJ5fSBmcm9tICcuL2ZpbGUtZW50cnknO1xuaW1wb3J0IHttYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7TG9nZ2VyRmFjdG9yeX0gZnJvbSAnQGVsZGVyYnl0ZS90cy1sb2dnZXInO1xuaW1wb3J0IHtGaWxlTGlzdGluZ1dlYmtpdH0gZnJvbSAnLi9maWxlLWxpc3Rpbmctd2Via2l0JztcbmltcG9ydCB7RmlsZUxpc3RpbmdTeXN0ZW1IYW5kbGV9IGZyb20gJy4vZmlsZS1saXN0aW5nLXN5c3RlbS1oYW5kbGUnO1xuaW1wb3J0IHtGaWxlU3lzdGVtQXBpfSBmcm9tICcuLi9maWxlLXN5c3RlbS1hcGknO1xuXG5leHBvcnQgY2xhc3MgRmlsZUxpc3RpbmdSeCB7XG5cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBJTlNUQU5DRSA9IG5ldyBGaWxlTGlzdGluZ1J4KCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBsb2cgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcih0aGlzLmNvbnN0cnVjdG9yLm5hbWUpO1xuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQdWJsaWMgQVBJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHB1YmxpYyB0b0ZpbGVMaXN0KHRyYW5zZmVySXRlbUxpc3Q6IERhdGFUcmFuc2Zlckl0ZW1MaXN0KTogT2JzZXJ2YWJsZTxGaWxlRW50cnlbXT4ge1xuICAgIGNvbnN0IG9iczogT2JzZXJ2YWJsZTxGaWxlRW50cnlbXT5bXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdHJhbnNmZXJJdGVtTGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgdHJhbnNmZXJJdGVtID0gdHJhbnNmZXJJdGVtTGlzdFtpXTtcbiAgICAgIG9icy5wdXNoKHRoaXMucmVzb2x2ZVRyYW5zZmVySXRlbSh0cmFuc2Zlckl0ZW0pKTtcbiAgICB9XG4gICAgcmV0dXJuIHppcChvYnMpLnBpcGUoXG4gICAgICBtYXAoZmlsZXMgPT4gZmlsZXMuZmxhdCgpKVxuICAgICk7XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHJpdmF0ZSBtZXRob2RzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwcml2YXRlIHJlc29sdmVUcmFuc2Zlckl0ZW0odHJhbnNmZXJJdGVtOiBEYXRhVHJhbnNmZXJJdGVtKTogT2JzZXJ2YWJsZTxGaWxlRW50cnlbXT4ge1xuXG4gICAgaWYgKEZpbGVTeXN0ZW1BcGkuaXNHZXRBc0ZpbGVTeXN0ZW1IYW5kbGVTdXBwb3J0ZWQodHJhbnNmZXJJdGVtKSkge1xuICAgICAgcmV0dXJuIEZpbGVTeXN0ZW1BcGkuZ2V0QXNGaWxlU3lzdGVtSGFuZGxlKHRyYW5zZmVySXRlbSkucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKGhhbmRsZSA9PiBoYW5kbGUgPyBGaWxlTGlzdGluZ1N5c3RlbUhhbmRsZS5saXN0RmlsZXMoaGFuZGxlKSA6IHRoaXMubGVnYWN5RmlsZUxpc3RpbmcodHJhbnNmZXJJdGVtKSlcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmxlZ2FjeUZpbGVMaXN0aW5nKHRyYW5zZmVySXRlbSk7XG4gIH1cblxuXG4gIHByaXZhdGUgbGVnYWN5RmlsZUxpc3RpbmcodHJhbnNmZXJJdGVtOiBEYXRhVHJhbnNmZXJJdGVtKTogT2JzZXJ2YWJsZTxGaWxlRW50cnlbXT4ge1xuICAgIGNvbnN0IGVudHJ5ID0gdHJhbnNmZXJJdGVtLndlYmtpdEdldEFzRW50cnkoKTtcbiAgICBpZiAoZW50cnkpIHtcbiAgICAgIHJldHVybiBGaWxlTGlzdGluZ1dlYmtpdC5saXN0RmlsZXNSZWN1cnNpdmUoZW50cnkpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5mYWxsYmFja0ZpbGVMaXN0aW5nKHRyYW5zZmVySXRlbSk7XG4gIH1cblxuICBwcml2YXRlIGZhbGxiYWNrRmlsZUxpc3RpbmcodHJhbnNmZXJJdGVtOiBEYXRhVHJhbnNmZXJJdGVtKTogT2JzZXJ2YWJsZTxGaWxlRW50cnlbXT4ge1xuICAgIGNvbnN0IGl0ZW1Bc0ZpbGUgPSB0cmFuc2Zlckl0ZW0uZ2V0QXNGaWxlKCk7XG4gICAgaWYgKGl0ZW1Bc0ZpbGUpIHtcbiAgICAgIHJldHVybiBvZihbRmlsZUVudHJ5Lm9mRmlsZShpdGVtQXNGaWxlKV0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodHJhbnNmZXJJdGVtLmtpbmQgPT0gJ2ZpbGUnKSB7XG4gICAgICAgIHJldHVybiBvZihbXG4gICAgICAgICAgRmlsZUVudHJ5Lm9mRmlsZShcbiAgICAgICAgICAgIG5ldyBGaWxlKFtdLCAnJywge1xuICAgICAgICAgICAgICB0eXBlOiB0cmFuc2Zlckl0ZW0udHlwZVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sb2cud2FybignQ291bGQgbm90IGhhbmRsZSBEYXRhVHJhbnNmZXJJdGVtIScsIHRyYW5zZmVySXRlbSk7XG4gICAgICAgIHJldHVybiBvZihbXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -0,0 +1,35 @@
1
+ import { switchMap, toArray, zip } from 'rxjs';
2
+ import { FileEntry } from './file-entry';
3
+ import { FileSystemApi } from '../file-system-api';
4
+ import { map } from 'rxjs/operators';
5
+ export class FileListingSystemHandle {
6
+ /***************************************************************************
7
+ * *
8
+ * Public methods *
9
+ * *
10
+ **************************************************************************/
11
+ /**
12
+ * Creates a File Entry Array Observable by resolving its FileSystemHandle.
13
+ * @returns An `Observable<FileEntry[]>` with the FileSystemFileHandle included
14
+ */
15
+ static listFiles(handle, rootDirectory) {
16
+ switch (handle.kind) {
17
+ case 'file':
18
+ return FileEntry.ofFileHandle(handle, rootDirectory).pipe(toArray());
19
+ case 'directory':
20
+ return FileListingSystemHandle.listFilesRecursive(handle, rootDirectory);
21
+ }
22
+ }
23
+ /***************************************************************************
24
+ * *
25
+ * Private methods *
26
+ * *
27
+ **************************************************************************/
28
+ static listFilesRecursive(dirHandle, rootDirectory) {
29
+ return FileSystemApi.getHandlesFromDirectory(dirHandle).pipe(map(handles => FileListingSystemHandle.listFilesOfEach(handles, rootDirectory ? rootDirectory : dirHandle)), switchMap(fileEntriesArray$ => zip(fileEntriesArray$)), map(fileEntriesArray => fileEntriesArray.flat()));
30
+ }
31
+ static listFilesOfEach(handles, rootDirectory) {
32
+ return handles.map(fileOrDirHandle => FileListingSystemHandle.listFiles(fileOrDirHandle, rootDirectory));
33
+ }
34
+ }
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1saXN0aW5nLXN5c3RlbS1oYW5kbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbGRlcmJ5dGUvbmd4LXN0YXJ0ZXIvc3JjL2xpYi9jb21wb25lbnRzL2ZpbGVzL2xpc3RpbmcvZmlsZS1saXN0aW5nLXN5c3RlbS1oYW5kbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFhLFNBQVMsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3pELE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDdkMsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQ2pELE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVuQyxNQUFNLE9BQU8sdUJBQXVCO0lBRWxDOzs7O2dGQUk0RTtJQUU1RTs7O09BR0c7SUFDSSxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQXdCLEVBQUUsYUFBeUM7UUFDekYsUUFBUSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDcEIsS0FBSyxNQUFNO2dCQUNULE9BQU8sU0FBUyxDQUFDLFlBQVksQ0FBQyxNQUE4QixFQUFFLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQy9GLEtBQUssV0FBVztnQkFDZCxPQUFPLHVCQUF1QixDQUFDLGtCQUFrQixDQUFDLE1BQW1DLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDMUcsQ0FBQztJQUNILENBQUM7SUFFRDs7OztnRkFJNEU7SUFHcEUsTUFBTSxDQUFDLGtCQUFrQixDQUFDLFNBQW9DLEVBQUUsYUFBeUM7UUFDL0csT0FBTyxhQUFhLENBQUMsdUJBQXVCLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUMxRCxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUMzRyxTQUFTLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLEVBQ3RELEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FDakQsQ0FBQztJQUNKLENBQUM7SUFFTyxNQUFNLENBQUMsZUFBZSxDQUM1QixPQUEyQixFQUMzQixhQUF5QztRQUV6QyxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQyxTQUFTLENBQUMsZUFBZSxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUE7SUFDMUcsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtPYnNlcnZhYmxlLCBzd2l0Y2hNYXAsIHRvQXJyYXksIHppcH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0ZpbGVFbnRyeX0gZnJvbSAnLi9maWxlLWVudHJ5JztcbmltcG9ydCB7RmlsZVN5c3RlbUFwaX0gZnJvbSAnLi4vZmlsZS1zeXN0ZW0tYXBpJztcbmltcG9ydCB7bWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmV4cG9ydCBjbGFzcyBGaWxlTGlzdGluZ1N5c3RlbUhhbmRsZSB7XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFB1YmxpYyBtZXRob2RzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBGaWxlIEVudHJ5IEFycmF5IE9ic2VydmFibGUgYnkgcmVzb2x2aW5nIGl0cyBGaWxlU3lzdGVtSGFuZGxlLlxuICAgKiBAcmV0dXJucyBBbiBgT2JzZXJ2YWJsZTxGaWxlRW50cnlbXT5gIHdpdGggdGhlIEZpbGVTeXN0ZW1GaWxlSGFuZGxlIGluY2x1ZGVkXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGxpc3RGaWxlcyhoYW5kbGU6IEZpbGVTeXN0ZW1IYW5kbGUsIHJvb3REaXJlY3Rvcnk/OiBGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlKTogT2JzZXJ2YWJsZTxGaWxlRW50cnlbXT4ge1xuICAgIHN3aXRjaCAoaGFuZGxlLmtpbmQpIHtcbiAgICAgIGNhc2UgJ2ZpbGUnOlxuICAgICAgICByZXR1cm4gRmlsZUVudHJ5Lm9mRmlsZUhhbmRsZShoYW5kbGUgYXMgRmlsZVN5c3RlbUZpbGVIYW5kbGUsIHJvb3REaXJlY3RvcnkpLnBpcGUodG9BcnJheSgpKTtcbiAgICAgIGNhc2UgJ2RpcmVjdG9yeSc6XG4gICAgICAgIHJldHVybiBGaWxlTGlzdGluZ1N5c3RlbUhhbmRsZS5saXN0RmlsZXNSZWN1cnNpdmUoaGFuZGxlIGFzIEZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGUsIHJvb3REaXJlY3RvcnkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQcml2YXRlIG1ldGhvZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5cbiAgcHJpdmF0ZSBzdGF0aWMgbGlzdEZpbGVzUmVjdXJzaXZlKGRpckhhbmRsZTogRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZSwgcm9vdERpcmVjdG9yeT86IEZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGUpOiBPYnNlcnZhYmxlPEZpbGVFbnRyeVtdPiB7XG4gICAgcmV0dXJuIEZpbGVTeXN0ZW1BcGkuZ2V0SGFuZGxlc0Zyb21EaXJlY3RvcnkoZGlySGFuZGxlKS5waXBlKFxuICAgICAgbWFwKGhhbmRsZXMgPT4gRmlsZUxpc3RpbmdTeXN0ZW1IYW5kbGUubGlzdEZpbGVzT2ZFYWNoKGhhbmRsZXMsIHJvb3REaXJlY3RvcnkgPyByb290RGlyZWN0b3J5IDogZGlySGFuZGxlKSksXG4gICAgICBzd2l0Y2hNYXAoZmlsZUVudHJpZXNBcnJheSQgPT4gemlwKGZpbGVFbnRyaWVzQXJyYXkkKSksXG4gICAgICBtYXAoZmlsZUVudHJpZXNBcnJheSA9PiBmaWxlRW50cmllc0FycmF5LmZsYXQoKSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgbGlzdEZpbGVzT2ZFYWNoKFxuICAgIGhhbmRsZXM6IEZpbGVTeXN0ZW1IYW5kbGVbXSxcbiAgICByb290RGlyZWN0b3J5PzogRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZVxuICApOiBPYnNlcnZhYmxlPEZpbGVFbnRyeVtdPltdIHtcbiAgICByZXR1cm4gaGFuZGxlcy5tYXAoZmlsZU9yRGlySGFuZGxlID0+IEZpbGVMaXN0aW5nU3lzdGVtSGFuZGxlLmxpc3RGaWxlcyhmaWxlT3JEaXJIYW5kbGUsIHJvb3REaXJlY3RvcnkpKVxuICB9XG59XG4iXX0=
@@ -0,0 +1,77 @@
1
+ import { EMPTY, mergeMap, Observable, zip } from 'rxjs';
2
+ import { FileEntry } from './file-entry';
3
+ import { map } from 'rxjs/operators';
4
+ export class FileListingWebkit {
5
+ /***************************************************************************
6
+ * *
7
+ * Constructor *
8
+ * *
9
+ **************************************************************************/
10
+ constructor() {
11
+ }
12
+ /***************************************************************************
13
+ * *
14
+ * Public methods *
15
+ * *
16
+ **************************************************************************/
17
+ static listFilesRecursive(entry) {
18
+ return FileListingWebkit.listFilesRecursiveAsync(entry, null);
19
+ }
20
+ /***************************************************************************
21
+ * *
22
+ * Private methods *
23
+ * *
24
+ **************************************************************************/
25
+ static listFilesRecursiveAsync(entry, parent) {
26
+ if (entry.isDirectory) {
27
+ const directoryEntry = entry;
28
+ return FileListingWebkit.readEntries(directoryEntry).pipe(mergeMap(entries => zip(entries.map(entry => this.listFilesRecursiveAsync(entry, directoryEntry)))), map(files => files.flat()));
29
+ }
30
+ else if (entry.isFile) {
31
+ const fileEntry = entry;
32
+ return FileListingWebkit.observableFile(fileEntry, parent).pipe(map(file => [file]));
33
+ }
34
+ else {
35
+ return EMPTY;
36
+ }
37
+ }
38
+ static observableFile(fileEntry, parent) {
39
+ return new Observable(observer => {
40
+ fileEntry.file(file => {
41
+ observer.next(FileEntry.relativeFile(file, FileListingWebkit.trimStaringSlash(parent?.fullPath)));
42
+ observer.complete();
43
+ }, err => {
44
+ observer.error(err);
45
+ observer.complete();
46
+ });
47
+ });
48
+ }
49
+ static trimStaringSlash(path) {
50
+ if (path) {
51
+ if (path.startsWith('/')) {
52
+ path = path.substring(1);
53
+ }
54
+ }
55
+ return path;
56
+ }
57
+ static readEntries(directoryEntry) {
58
+ return new Observable(observer => {
59
+ FileListingWebkit.consumeReaderToCompletion(observer, directoryEntry.createReader());
60
+ });
61
+ }
62
+ static consumeReaderToCompletion(observer, directoryReader) {
63
+ directoryReader.readEntries(entries => {
64
+ if (entries && entries.length > 0) {
65
+ observer.next(entries);
66
+ this.consumeReaderToCompletion(observer, directoryReader);
67
+ }
68
+ else {
69
+ observer.complete();
70
+ }
71
+ }, err => {
72
+ observer.error(err);
73
+ observer.complete();
74
+ });
75
+ }
76
+ }
77
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1saXN0aW5nLXdlYmtpdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VsZGVyYnl0ZS9uZ3gtc3RhcnRlci9zcmMvbGliL2NvbXBvbmVudHMvZmlsZXMvbGlzdGluZy9maWxlLWxpc3Rpbmctd2Via2l0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBYyxHQUFHLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDbEUsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUN2QyxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFbkMsTUFBTSxPQUFPLGlCQUFpQjtJQUc1Qjs7OztnRkFJNEU7SUFFNUU7SUFDQSxDQUFDO0lBRUQ7Ozs7Z0ZBSTRFO0lBR3JFLE1BQU0sQ0FBQyxrQkFBa0IsQ0FDOUIsS0FBc0I7UUFFdEIsT0FBTyxpQkFBaUIsQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVEOzs7O2dGQUk0RTtJQUVwRSxNQUFNLENBQUMsdUJBQXVCLENBQ3BDLEtBQXNCLEVBQ3RCLE1BQWdDO1FBRWhDLElBQUksS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3RCLE1BQU0sY0FBYyxHQUFHLEtBQWlDLENBQUM7WUFDekQsT0FBTyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUMsSUFBSSxDQUN2RCxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQ3JCLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsS0FBSyxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQzFFLENBQUMsRUFDRixHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FDM0IsQ0FBQztRQUNKLENBQUM7YUFBTSxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN4QixNQUFNLFNBQVMsR0FBRyxLQUE0QixDQUFDO1lBQy9DLE9BQU8saUJBQWlCLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQzdELEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FDcEIsQ0FBQztRQUNKLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO0lBQ0gsQ0FBQztJQUVPLE1BQU0sQ0FBQyxjQUFjLENBQzNCLFNBQThCLEVBQzlCLE1BQXVDO1FBRXZDLE9BQU8sSUFBSSxVQUFVLENBQ25CLFFBQVEsQ0FBQyxFQUFFO1lBQ1QsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDcEIsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNsRyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDdEIsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFO2dCQUNQLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3BCLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN0QixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVPLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFtQjtRQUNqRCxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ1QsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3pCLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzNCLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU8sTUFBTSxDQUFDLFdBQVcsQ0FDeEIsY0FBd0M7UUFFeEMsT0FBTyxJQUFJLFVBQVUsQ0FDbkIsUUFBUSxDQUFDLEVBQUU7WUFDVCxpQkFBaUIsQ0FBQyx5QkFBeUIsQ0FBQyxRQUFRLEVBQUUsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7UUFDdkYsQ0FBQyxDQUNGLENBQUM7SUFDSixDQUFDO0lBRU8sTUFBTSxDQUFDLHlCQUF5QixDQUN0QyxRQUF1QyxFQUN2QyxlQUEwQztRQUUxQyxlQUFlLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3BDLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ2xDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxRQUFRLEVBQUUsZUFBZSxDQUFDLENBQUM7WUFDNUQsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN0QixDQUFDO1FBQ0gsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFO1lBQ1AsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNwQixRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDdEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBRUYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0VNUFRZLCBtZXJnZU1hcCwgT2JzZXJ2YWJsZSwgU3Vic2NyaWJlciwgemlwfSBmcm9tICdyeGpzJztcbmltcG9ydCB7RmlsZUVudHJ5fSBmcm9tICcuL2ZpbGUtZW50cnknO1xuaW1wb3J0IHttYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuZXhwb3J0IGNsYXNzIEZpbGVMaXN0aW5nV2Via2l0IHtcblxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBDb25zdHJ1Y3RvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFB1YmxpYyBtZXRob2RzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cblxuICBwdWJsaWMgc3RhdGljIGxpc3RGaWxlc1JlY3Vyc2l2ZShcbiAgICBlbnRyeTogRmlsZVN5c3RlbUVudHJ5XG4gICk6IE9ic2VydmFibGU8RmlsZUVudHJ5W10+IHtcbiAgICByZXR1cm4gRmlsZUxpc3RpbmdXZWJraXQubGlzdEZpbGVzUmVjdXJzaXZlQXN5bmMoZW50cnksIG51bGwpO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFByaXZhdGUgbWV0aG9kcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHJpdmF0ZSBzdGF0aWMgbGlzdEZpbGVzUmVjdXJzaXZlQXN5bmMoXG4gICAgZW50cnk6IEZpbGVTeXN0ZW1FbnRyeSxcbiAgICBwYXJlbnQ6IEZpbGVTeXN0ZW1EaXJlY3RvcnlFbnRyeVxuICApOiBPYnNlcnZhYmxlPEZpbGVFbnRyeVtdPiB7XG4gICAgaWYgKGVudHJ5LmlzRGlyZWN0b3J5KSB7XG4gICAgICBjb25zdCBkaXJlY3RvcnlFbnRyeSA9IGVudHJ5IGFzIEZpbGVTeXN0ZW1EaXJlY3RvcnlFbnRyeTtcbiAgICAgIHJldHVybiBGaWxlTGlzdGluZ1dlYmtpdC5yZWFkRW50cmllcyhkaXJlY3RvcnlFbnRyeSkucGlwZShcbiAgICAgICAgbWVyZ2VNYXAoZW50cmllcyA9PiB6aXAoXG4gICAgICAgICAgZW50cmllcy5tYXAoZW50cnkgPT4gdGhpcy5saXN0RmlsZXNSZWN1cnNpdmVBc3luYyhlbnRyeSwgZGlyZWN0b3J5RW50cnkpKVxuICAgICAgICApKSxcbiAgICAgICAgbWFwKGZpbGVzID0+IGZpbGVzLmZsYXQoKSlcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChlbnRyeS5pc0ZpbGUpIHtcbiAgICAgIGNvbnN0IGZpbGVFbnRyeSA9IGVudHJ5IGFzIEZpbGVTeXN0ZW1GaWxlRW50cnk7XG4gICAgICByZXR1cm4gRmlsZUxpc3RpbmdXZWJraXQub2JzZXJ2YWJsZUZpbGUoZmlsZUVudHJ5LCBwYXJlbnQpLnBpcGUoXG4gICAgICAgIG1hcChmaWxlID0+IFtmaWxlXSlcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBFTVBUWTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBvYnNlcnZhYmxlRmlsZShcbiAgICBmaWxlRW50cnk6IEZpbGVTeXN0ZW1GaWxlRW50cnksXG4gICAgcGFyZW50OiBGaWxlU3lzdGVtRGlyZWN0b3J5RW50cnkgfCBudWxsXG4gICk6IE9ic2VydmFibGU8RmlsZUVudHJ5PiB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPEZpbGVFbnRyeT4oXG4gICAgICBvYnNlcnZlciA9PiB7XG4gICAgICAgIGZpbGVFbnRyeS5maWxlKGZpbGUgPT4ge1xuICAgICAgICAgIG9ic2VydmVyLm5leHQoRmlsZUVudHJ5LnJlbGF0aXZlRmlsZShmaWxlLCBGaWxlTGlzdGluZ1dlYmtpdC50cmltU3RhcmluZ1NsYXNoKHBhcmVudD8uZnVsbFBhdGgpKSk7XG4gICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgfSwgZXJyID0+IHtcbiAgICAgICAgICBvYnNlcnZlci5lcnJvcihlcnIpO1xuICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyB0cmltU3RhcmluZ1NsYXNoKHBhdGg6IHN0cmluZyB8IG51bGwpOiBzdHJpbmcge1xuICAgIGlmIChwYXRoKSB7XG4gICAgICBpZiAocGF0aC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgICAgcGF0aCA9IHBhdGguc3Vic3RyaW5nKDEpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcGF0aDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHJlYWRFbnRyaWVzKFxuICAgIGRpcmVjdG9yeUVudHJ5OiBGaWxlU3lzdGVtRGlyZWN0b3J5RW50cnlcbiAgKTogT2JzZXJ2YWJsZTxGaWxlU3lzdGVtRW50cnlbXT4ge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxGaWxlU3lzdGVtRW50cnlbXT4oXG4gICAgICBvYnNlcnZlciA9PiB7XG4gICAgICAgIEZpbGVMaXN0aW5nV2Via2l0LmNvbnN1bWVSZWFkZXJUb0NvbXBsZXRpb24ob2JzZXJ2ZXIsIGRpcmVjdG9yeUVudHJ5LmNyZWF0ZVJlYWRlcigpKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgY29uc3VtZVJlYWRlclRvQ29tcGxldGlvbihcbiAgICBvYnNlcnZlcjogU3Vic2NyaWJlcjxGaWxlU3lzdGVtRW50cnlbXT4sXG4gICAgZGlyZWN0b3J5UmVhZGVyOiBGaWxlU3lzdGVtRGlyZWN0b3J5UmVhZGVyXG4gICk6IHZvaWQge1xuICAgIGRpcmVjdG9yeVJlYWRlci5yZWFkRW50cmllcyhlbnRyaWVzID0+IHtcbiAgICAgIGlmIChlbnRyaWVzICYmIGVudHJpZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBvYnNlcnZlci5uZXh0KGVudHJpZXMpO1xuICAgICAgICB0aGlzLmNvbnN1bWVSZWFkZXJUb0NvbXBsZXRpb24ob2JzZXJ2ZXIsIGRpcmVjdG9yeVJlYWRlcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgfVxuICAgIH0sIGVyciA9PiB7XG4gICAgICBvYnNlcnZlci5lcnJvcihlcnIpO1xuICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICB9KTtcbiAgfVxuXG59XG4iXX0=