@elderbyte/ngx-starter 18.1.0-beta2 → 18.2.0-beta

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.
Files changed (25) hide show
  1. package/esm2022/lib/common/utils/input-utils.mjs +6 -0
  2. package/esm2022/lib/components/data-view/table/activation/elder-table-activation.directive.mjs +14 -7
  3. package/esm2022/lib/components/files/blob-viewer/elder-blob-viewer.component.mjs +17 -23
  4. package/esm2022/lib/components/files/elder-file-select.directive.mjs +83 -85
  5. package/esm2022/lib/components/files/listing/file-entry.mjs +15 -30
  6. package/esm2022/lib/components/files/listing/file-listing-rx.mjs +70 -30
  7. package/esm2022/lib/components/forms/directives/validation/validators/elder-multiple-of.validator.mjs +17 -13
  8. package/fesm2022/elderbyte-ngx-starter.mjs +154 -425
  9. package/fesm2022/elderbyte-ngx-starter.mjs.map +1 -1
  10. package/lib/common/utils/input-utils.d.ts +18 -0
  11. package/lib/components/data-view/table/activation/elder-table-activation.directive.d.ts +4 -1
  12. package/lib/components/files/blob-viewer/elder-blob-viewer.component.d.ts +3 -3
  13. package/lib/components/files/elder-file-select.directive.d.ts +23 -16
  14. package/lib/components/files/listing/file-entry.d.ts +1 -10
  15. package/lib/components/files/listing/file-listing-rx.d.ts +6 -3
  16. package/lib/components/forms/directives/validation/validators/elder-multiple-of.validator.d.ts +2 -4
  17. package/package.json +1 -1
  18. package/esm2022/lib/components/files/elder-file-select-input.mjs +0 -119
  19. package/esm2022/lib/components/files/file-system-api.mjs +0 -96
  20. package/esm2022/lib/components/files/listing/file-listing-system-handle.mjs +0 -35
  21. package/esm2022/lib/components/files/listing/file-listing-webkit.mjs +0 -77
  22. package/lib/components/files/elder-file-select-input.d.ts +0 -59
  23. package/lib/components/files/file-system-api.d.ts +0 -86
  24. package/lib/components/files/listing/file-listing-system-handle.d.ts +0 -21
  25. package/lib/components/files/listing/file-listing-webkit.d.ts +0 -26
@@ -2,11 +2,6 @@ import { Directive, EventEmitter, HostListener, Input, Output } from '@angular/c
2
2
  import { LoggerFactory } from '@elderbyte/ts-logger';
3
3
  import { coerceBooleanProperty } from '@angular/cdk/coercion';
4
4
  import { FileEntry } from './listing/file-entry';
5
- import { ElderFileSelectInput } from './elder-file-select-input';
6
- import { FileSystemApi } from './file-system-api';
7
- import { combineLatest, switchMap } from 'rxjs';
8
- import { FileListingSystemHandle } from './listing/file-listing-system-handle';
9
- import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
10
5
  import * as i0 from "@angular/core";
11
6
  export class ElderFileSelectDirective {
12
7
  /***************************************************************************
@@ -14,10 +9,9 @@ export class ElderFileSelectDirective {
14
9
  * Constructor *
15
10
  * *
16
11
  **************************************************************************/
17
- constructor(renderer, el, destroyRef) {
18
- this.renderer = renderer;
12
+ constructor(el, renderer) {
19
13
  this.el = el;
20
- this.destroyRef = destroyRef;
14
+ this.renderer = renderer;
21
15
  /***************************************************************************
22
16
  * *
23
17
  * Fields *
@@ -26,8 +20,6 @@ export class ElderFileSelectDirective {
26
20
  this.logger = LoggerFactory.getLogger(this.constructor.name);
27
21
  this.elderFileSelectChange = new EventEmitter();
28
22
  this.elderSingleFileSelectChange = new EventEmitter();
29
- this._useDirectoryPicker = false;
30
- this._legacyInput = new ElderFileSelectInput(this.renderer, this.el);
31
23
  }
32
24
  /***************************************************************************
33
25
  * *
@@ -35,16 +27,10 @@ export class ElderFileSelectDirective {
35
27
  * *
36
28
  **************************************************************************/
37
29
  ngOnInit() {
38
- if (!FileSystemApi.isFileSystemSupported() || !FileSystemApi.isDirectoryPickerSupported()) {
39
- this.logger.warn('showOpenFilePicker or showDirectoryPicker is not supported for this browser, falling back to legacy file picker');
40
- this._legacyInput.createFileSelect();
41
- this._legacyInput.filesSelected.pipe(takeUntilDestroyed(this.destroyRef)).subscribe({
42
- next: multiFileChange => this.pushFileChanges(multiFileChange)
43
- });
44
- }
30
+ this.createFileSelect();
45
31
  }
46
32
  ngOnDestroy() {
47
- this._legacyInput.removeFileSelect();
33
+ this.removeFileSelect();
48
34
  }
49
35
  /***************************************************************************
50
36
  * *
@@ -52,49 +38,16 @@ export class ElderFileSelectDirective {
52
38
  * *
53
39
  **************************************************************************/
54
40
  set elderFileSelect(value) {
55
- this._filePickerOptions = {
56
- excludeAcceptAllOptions: true,
57
- id: this._filePickerOptions?.id,
58
- multiple: this._filePickerOptions?.multiple,
59
- startIn: this._filePickerOptions?.startIn,
60
- types: [this.buildTypeOption(value)]
61
- };
62
- this._legacyInput.elderFileSelect = value;
63
- }
64
- buildTypeOption(value) {
65
- if (this.isFileExtension(value)) {
66
- return {
67
- accept: {
68
- '*/*': value.trim()
69
- .replace(/\s+/g, '')
70
- .split(',')
71
- }
72
- };
41
+ this._accept = value;
42
+ if (this._fileInput) {
43
+ this.renderer.setProperty(this._fileInput, 'accept', value);
73
44
  }
74
- else if (this.isMimeType(value)) {
75
- return {
76
- accept: { [value]: [] }
77
- };
78
- }
79
- return null;
80
- }
81
- isFileExtension(input) {
82
- const regex = new RegExp(/^(\.\w+)(, ?\.\w+)*$/);
83
- return regex.test(input);
84
- }
85
- isMimeType(input) {
86
- const regex = new RegExp(/^.+\/.+$/);
87
- return regex.test(input);
88
45
  }
89
46
  set elderFileSelectMultiple(value) {
90
- this._filePickerOptions = {
91
- excludeAcceptAllOptions: this._filePickerOptions?.excludeAcceptAllOptions,
92
- id: this._filePickerOptions?.id,
93
- multiple: coerceBooleanProperty(value),
94
- startIn: this._filePickerOptions?.startIn,
95
- types: this._filePickerOptions?.types
96
- };
97
- this._legacyInput.elderFileSelectMultiple = value;
47
+ this._multiple = coerceBooleanProperty(value);
48
+ if (this._fileInput) {
49
+ this.renderer.setProperty(this._fileInput, 'multiple', value);
50
+ }
98
51
  }
99
52
  /**
100
53
  * Allow the user to select a directory. All files that are recursively contained are selected.
@@ -102,8 +55,11 @@ export class ElderFileSelectDirective {
102
55
  * @param value
103
56
  */
104
57
  set elderFileSelectDirectory(value) {
105
- this._useDirectoryPicker = coerceBooleanProperty(value);
106
- this._legacyInput.elderFileSelectDirectory = value;
58
+ this._directory = coerceBooleanProperty(value);
59
+ if (this._fileInput) {
60
+ this.renderer.setAttribute(this._fileInput, 'webkitdirectory', 'true');
61
+ this.renderer.setAttribute(this._fileInput, 'directory', 'true');
62
+ }
107
63
  }
108
64
  /***************************************************************************
109
65
  * *
@@ -111,39 +67,81 @@ export class ElderFileSelectDirective {
111
67
  * *
112
68
  **************************************************************************/
113
69
  onClick(event) {
114
- if (!this._useDirectoryPicker && FileSystemApi.isFileSystemSupported()) {
115
- this.openFilePicker(this._filePickerOptions).subscribe({
116
- next: multiFileChange => this.pushFileChanges(multiFileChange)
117
- });
118
- }
119
- else if (this._useDirectoryPicker && FileSystemApi.isDirectoryPickerSupported()) {
120
- this.openDirectoryPicker(this._directoryPickerOptions).subscribe({
121
- next: multiFileChange => this.pushFileChanges(multiFileChange)
122
- });
123
- }
124
- else {
125
- this._legacyInput.openFileSelectDialog();
126
- }
70
+ this.openFileSelectDialog();
71
+ }
72
+ openFileSelectDialog() {
73
+ this._fileInput.click();
127
74
  }
128
75
  /***************************************************************************
129
76
  * *
130
77
  * Private methods *
131
78
  * *
132
79
  **************************************************************************/
133
- pushFileChanges(multiFileChange) {
134
- this.elderFileSelectChange.next(multiFileChange);
135
- const file = multiFileChange[0]?.file;
136
- if (file) {
137
- this.elderSingleFileSelectChange.next(file);
80
+ /**
81
+ * <input type="file"
82
+ * hidden #fileInput
83
+ * [multiple]="multiple"
84
+ * [accept]="accept"
85
+ * (change)="fileInputChanged()"
86
+ * />
87
+ */
88
+ createFileSelect() {
89
+ this._fileInput = this.renderer.createElement('input');
90
+ this.renderer.setAttribute(this._fileInput, 'hidden', 'true');
91
+ this.renderer.setAttribute(this._fileInput, 'type', 'file');
92
+ this.renderer.appendChild(this.el.nativeElement, this._fileInput);
93
+ if (this._accept) {
94
+ this.renderer.setProperty(this._fileInput, 'accept', this._accept);
95
+ }
96
+ if (this._multiple) {
97
+ this.renderer.setProperty(this._fileInput, 'multiple', this._multiple);
98
+ }
99
+ if (this._directory) {
100
+ this.renderer.setAttribute(this._fileInput, 'webkitdirectory', 'true');
101
+ this.renderer.setAttribute(this._fileInput, 'directory', 'true');
102
+ }
103
+ this._unlisten = this.renderer.listen(this._fileInput, 'change', event => this.fileInputChanged(event));
104
+ }
105
+ removeFileSelect() {
106
+ if (this._unlisten) {
107
+ this._unlisten();
108
+ this._unlisten = null;
109
+ }
110
+ if (this._fileInput) {
111
+ this.renderer.removeChild(this.el.nativeElement, this._fileInput);
112
+ this._fileInput = null;
138
113
  }
139
114
  }
140
- openFilePicker(pickerOpts) {
141
- return FileSystemApi.openFilePicker(pickerOpts).pipe(switchMap(files => combineLatest(files.map(file => FileEntry.ofFileHandle(file)))));
115
+ fileInputChanged(event) {
116
+ const fileList = this._fileInput.files;
117
+ const files = this.toFileEntries(fileList);
118
+ this.logger.debug('fileInputChanged, files:', files);
119
+ this.emitFileList(files);
120
+ this.clearFileList();
142
121
  }
143
- openDirectoryPicker(pickerOpts) {
144
- return FileSystemApi.openDirectoryPicker(pickerOpts).pipe(switchMap(dir => FileListingSystemHandle.listFiles(dir)));
122
+ clearFileList() {
123
+ // not nice but works
124
+ this._fileInput.value = null;
125
+ }
126
+ emitFileList(files) {
127
+ if (files.length > 0) {
128
+ this.elderFileSelectChange.next(files);
129
+ this.elderSingleFileSelectChange.emit(files[0].file);
130
+ }
131
+ else {
132
+ this.logger.warn('User did not select any File or the Folder was empty.');
133
+ }
134
+ }
135
+ toFileEntries(fileList) {
136
+ const files = [];
137
+ for (const key in fileList) {
138
+ if (!isNaN(parseInt(key, 0))) {
139
+ files.push(FileEntry.ofFile(fileList[key]));
140
+ }
141
+ }
142
+ return files;
145
143
  }
146
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: ElderFileSelectDirective, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i0.DestroyRef }], target: i0.ɵɵFactoryTarget.Directive }); }
144
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: ElderFileSelectDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive }); }
147
145
  static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.4", type: ElderFileSelectDirective, isStandalone: true, selector: "[elderFileSelect]", inputs: { elderFileSelect: "elderFileSelect", elderFileSelectMultiple: "elderFileSelectMultiple", elderFileSelectDirectory: "elderFileSelectDirectory" }, outputs: { elderFileSelectChange: "elderFileSelectChange", elderSingleFileSelectChange: "elderSingleFileSelectChange" }, host: { listeners: { "click": "onClick($event)" } }, ngImport: i0 }); }
148
146
  }
149
147
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: ElderFileSelectDirective, decorators: [{
@@ -152,7 +150,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImpor
152
150
  selector: '[elderFileSelect]',
153
151
  standalone: true
154
152
  }]
155
- }], ctorParameters: () => [{ type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i0.DestroyRef }], propDecorators: { elderFileSelectChange: [{
153
+ }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }], propDecorators: { elderFileSelectChange: [{
156
154
  type: Output
157
155
  }], elderSingleFileSelectChange: [{
158
156
  type: Output
@@ -166,4 +164,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImpor
166
164
  type: HostListener,
167
165
  args: ['click', ['$event']]
168
166
  }] } });
169
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxkZXItZmlsZS1zZWxlY3QuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWxkZXJieXRlL25neC1zdGFydGVyL3NyYy9saWIvY29tcG9uZW50cy9maWxlcy9lbGRlci1maWxlLXNlbGVjdC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBZSxxQkFBcUIsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQzFFLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUMvQyxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUMvRCxPQUFPLEVBQ0wsYUFBYSxFQUlkLE1BQU0sbUJBQW1CLENBQUM7QUFDM0IsT0FBTyxFQUFDLGFBQWEsRUFBYyxTQUFTLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDMUQsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sc0NBQXNDLENBQUM7QUFDN0UsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7O0FBTzlELE1BQU0sT0FBTyx3QkFBd0I7SUFxQm5DOzs7O2dGQUk0RTtJQUU1RSxZQUNVLFFBQW1CLEVBQ25CLEVBQWMsRUFDZCxVQUFzQjtRQUZ0QixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ25CLE9BQUUsR0FBRixFQUFFLENBQVk7UUFDZCxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBNUJoQzs7OztvRkFJNEU7UUFFM0QsV0FBTSxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztR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c0JBRGIsWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBEZXN0cm95UmVmLFxuICBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCwgUmVuZGVyZXIyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtMb2dnZXJGYWN0b3J5fSBmcm9tICdAZWxkZXJieXRlL3RzLWxvZ2dlcic7XG5pbXBvcnQge0Jvb2xlYW5JbnB1dCwgY29lcmNlQm9vbGVhblByb3BlcnR5fSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHtGaWxlRW50cnl9IGZyb20gJy4vbGlzdGluZy9maWxlLWVudHJ5JztcbmltcG9ydCB7RWxkZXJGaWxlU2VsZWN0SW5wdXR9IGZyb20gJy4vZWxkZXItZmlsZS1zZWxlY3QtaW5wdXQnO1xuaW1wb3J0IHtcbiAgRmlsZVN5c3RlbUFwaSxcbiAgRmlsZVN5c3RlbURpcmVjdG9yeVBpY2tlck9wdGlvbnMsXG4gIEZpbGVTeXN0ZW1GaWxlUGlja2VyT3B0aW9ucyxcbiAgRmlsZVN5c3RlbUZpbGVQaWNrZXJUeXBlT3B0aW9uc1xufSBmcm9tICcuL2ZpbGUtc3lzdGVtLWFwaSc7XG5pbXBvcnQge2NvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIHN3aXRjaE1hcH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0ZpbGVMaXN0aW5nU3lzdGVtSGFuZGxlfSBmcm9tICcuL2xpc3RpbmcvZmlsZS1saXN0aW5nLXN5c3RlbS1oYW5kbGUnO1xuaW1wb3J0IHt0YWtlVW50aWxEZXN0cm95ZWR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcblxuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbZWxkZXJGaWxlU2VsZWN0XScsXG4gIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgRWxkZXJGaWxlU2VsZWN0RGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBGaWVsZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIodGhpcy5jb25zdHJ1Y3Rvci5uYW1lKTtcblxuICBAT3V0cHV0KClcbiAgcHVibGljIHJlYWRvbmx5IGVsZGVyRmlsZVNlbGVjdENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsZUVudHJ5W10+KCk7XG5cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyByZWFkb25seSBlbGRlclNpbmdsZUZpbGVTZWxlY3RDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEZpbGU+KCk7XG5cbiAgcHJpdmF0ZSBfbGVnYWN5SW5wdXQ6IEVsZGVyRmlsZVNlbGVjdElucHV0O1xuICBwcml2YXRlIF9maWxlUGlja2VyT3B0aW9uczogRmlsZVN5c3RlbUZpbGVQaWNrZXJPcHRpb25zO1xuICBwcml2YXRlIF9kaXJlY3RvcnlQaWNrZXJPcHRpb25zOiBGaWxlU3lzdGVtRGlyZWN0b3J5UGlja2VyT3B0aW9ucztcbiAgcHJpdmF0ZSBfdXNlRGlyZWN0b3J5UGlja2VyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIENvbnN0cnVjdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBkZXN0cm95UmVmOiBEZXN0cm95UmVmXG4gICkge1xuICAgIHRoaXMuX2xlZ2FjeUlucHV0ID0gbmV3IEVsZGVyRmlsZVNlbGVjdElucHV0KHRoaXMucmVuZGVyZXIsIHRoaXMuZWwpO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIExpZmUgQ3ljbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICghRmlsZVN5c3RlbUFwaS5pc0ZpbGVTeXN0ZW1TdXBwb3J0ZWQoKSB8fCAhRmlsZVN5c3RlbUFwaS5pc0RpcmVjdG9yeVBpY2tlclN1cHBvcnRlZCgpKSB7XG4gICAgICB0aGlzLmxvZ2dlci53YXJuKCdzaG93T3BlbkZpbGVQaWNrZXIgb3Igc2hvd0RpcmVjdG9yeVBpY2tlciBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGJyb3dzZXIsIGZhbGxpbmcgYmFjayB0byBsZWdhY3kgZmlsZSBwaWNrZXInKTtcbiAgICAgIHRoaXMuX2xlZ2FjeUlucHV0LmNyZWF0ZUZpbGVTZWxlY3QoKTtcbiAgICAgIHRoaXMuX2xlZ2FjeUlucHV0LmZpbGVzU2VsZWN0ZWQucGlwZShcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgICkuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogbXVsdGlGaWxlQ2hhbmdlID0+IHRoaXMucHVzaEZpbGVDaGFuZ2VzKG11bHRpRmlsZUNoYW5nZSlcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9sZWdhY3lJbnB1dC5yZW1vdmVGaWxlU2VsZWN0KCk7XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHJvcGVydGllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGVsZGVyRmlsZVNlbGVjdCh2YWx1ZTogc3RyaW5nKSB7XG5cbiAgICB0aGlzLl9maWxlUGlja2VyT3B0aW9ucyA9IHtcbiAgICAgIGV4Y2x1ZGVBY2NlcHRBbGxPcHRpb25zOiB0cnVlLFxuICAgICAgaWQ6IHRoaXMuX2ZpbGVQaWNrZXJPcHRpb25zPy5pZCxcbiAgICAgIG11bHRpcGxlOiB0aGlzLl9maWxlUGlja2VyT3B0aW9ucz8ubXVsdGlwbGUsXG4gICAgICBzdGFydEluOiB0aGlzLl9maWxlUGlja2VyT3B0aW9ucz8uc3RhcnRJbixcbiAgICAgIHR5cGVzOiBbdGhpcy5idWlsZFR5cGVPcHRpb24odmFsdWUpXVxuICAgIH07XG5cbiAgICB0aGlzLl9sZWdhY3lJbnB1dC5lbGRlckZpbGVTZWxlY3QgPSB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRUeXBlT3B0aW9uKHZhbHVlOiBzdHJpbmcpOiBGaWxlU3lzdGVtRmlsZVBpY2tlclR5cGVPcHRpb25zIHtcbiAgICBpZiAodGhpcy5pc0ZpbGVFeHRlbnNpb24odmFsdWUpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhY2NlcHQ6IHtcbiAgICAgICAgICAnKi8qJzogdmFsdWUudHJpbSgpXG4gICAgICAgICAgICAucmVwbGFjZSgvXFxzKy9nLCAnJylcbiAgICAgICAgICAgIC5zcGxpdCgnLCcpXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzTWltZVR5cGUodmFsdWUpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhY2NlcHQ6IHtbdmFsdWVdOiBbXX1cbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0ZpbGVFeHRlbnNpb24oaW5wdXQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cCgvXihcXC5cXHcrKSgsID9cXC5cXHcrKSokLyk7XG4gICAgcmV0dXJuIHJlZ2V4LnRlc3QoaW5wdXQpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc01pbWVUeXBlKGlucHV0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoL14uK1xcLy4rJC8pO1xuICAgIHJldHVybiByZWdleC50ZXN0KGlucHV0KTtcbiAgfVxuXG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBlbGRlckZpbGVTZWxlY3RNdWx0aXBsZSh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG5cbiAgICB0aGlzLl9maWxlUGlja2VyT3B0aW9ucyA9IHtcbiAgICAgIGV4Y2x1ZGVBY2NlcHRBbGxPcHRpb25zOiB0aGlzLl9maWxlUGlja2VyT3B0aW9ucz8uZXhjbHVkZUFjY2VwdEFsbE9wdGlvbnMsXG4gICAgICBpZDogdGhpcy5fZmlsZVBpY2tlck9wdGlvbnM/LmlkLFxuICAgICAgbXVsdGlwbGU6IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSksXG4gICAgICBzdGFydEluOiB0aGlzLl9maWxlUGlja2VyT3B0aW9ucz8uc3RhcnRJbixcbiAgICAgIHR5cGVzOiB0aGlzLl9maWxlUGlja2VyT3B0aW9ucz8udHlwZXNcbiAgICB9O1xuXG4gICAgdGhpcy5fbGVnYWN5SW5wdXQuZWxkZXJGaWxlU2VsZWN0TXVsdGlwbGUgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvdyB0aGUgdXNlciB0byBzZWxlY3QgYSBkaXJlY3RvcnkuIEFsbCBmaWxlcyB0aGF0IGFyZSByZWN1cnNpdmVseSBjb250YWluZWQgYXJlIHNlbGVjdGVkLlxuICAgKiBIb3dldmVyLCB0aGUgdXNlciB3aWxsIG5vIGxvbmdlciBiZSBhYmxlIHRvIHNlbGVjdCBpbmRpdmlkdWFsIGZpbGVzIGlmIHRoaXMgaXMgZW5hYmxlZC5cbiAgICogQHBhcmFtIHZhbHVlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGVsZGVyRmlsZVNlbGVjdERpcmVjdG9yeSh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgdGhpcy5fdXNlRGlyZWN0b3J5UGlja2VyID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB0aGlzLl9sZWdhY3lJbnB1dC5lbGRlckZpbGVTZWxlY3REaXJlY3RvcnkgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQdWJsaWMgQVBJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSlcbiAgcHVibGljIG9uQ2xpY2soZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdXNlRGlyZWN0b3J5UGlja2VyICYmIEZpbGVTeXN0ZW1BcGkuaXNGaWxlU3lzdGVtU3VwcG9ydGVkKCkpIHtcbiAgICAgIHRoaXMub3BlbkZpbGVQaWNrZXIodGhpcy5fZmlsZVBpY2tlck9wdGlvbnMpLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IG11bHRpRmlsZUNoYW5nZSA9PiB0aGlzLnB1c2hGaWxlQ2hhbmdlcyhtdWx0aUZpbGVDaGFuZ2UpXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX3VzZURpcmVjdG9yeVBpY2tlciAmJiBGaWxlU3lzdGVtQXBpLmlzRGlyZWN0b3J5UGlja2VyU3VwcG9ydGVkKCkpIHtcbiAgICAgIHRoaXMub3BlbkRpcmVjdG9yeVBpY2tlcih0aGlzLl9kaXJlY3RvcnlQaWNrZXJPcHRpb25zKS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiBtdWx0aUZpbGVDaGFuZ2UgPT4gdGhpcy5wdXNoRmlsZUNoYW5nZXMobXVsdGlGaWxlQ2hhbmdlKVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2xlZ2FjeUlucHV0Lm9wZW5GaWxlU2VsZWN0RGlhbG9nKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFByaXZhdGUgbWV0aG9kcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHJpdmF0ZSBwdXNoRmlsZUNoYW5nZXMobXVsdGlGaWxlQ2hhbmdlOiBGaWxlRW50cnlbXSk6IHZvaWQge1xuICAgIHRoaXMuZWxkZXJGaWxlU2VsZWN0Q2hhbmdlLm5leHQobXVsdGlGaWxlQ2hhbmdlKTtcbiAgICBjb25zdCBmaWxlID0gbXVsdGlGaWxlQ2hhbmdlWzBdPy5maWxlO1xuICAgIGlmIChmaWxlKSB7XG4gICAgICB0aGlzLmVsZGVyU2luZ2xlRmlsZVNlbGVjdENoYW5nZS5uZXh0KGZpbGUpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvcGVuRmlsZVBpY2tlcihwaWNrZXJPcHRzOiBGaWxlU3lzdGVtRmlsZVBpY2tlck9wdGlvbnMpOiBPYnNlcnZhYmxlPEZpbGVFbnRyeVtdPiB7XG4gICAgcmV0dXJuIEZpbGVTeXN0ZW1BcGkub3BlbkZpbGVQaWNrZXIocGlja2VyT3B0cykucGlwZShcbiAgICAgIHN3aXRjaE1hcChmaWxlcyA9PlxuICAgICAgICBjb21iaW5lTGF0ZXN0KGZpbGVzLm1hcChmaWxlID0+IEZpbGVFbnRyeS5vZkZpbGVIYW5kbGUoZmlsZSkpKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgb3BlbkRpcmVjdG9yeVBpY2tlcihwaWNrZXJPcHRzOiBGaWxlU3lzdGVtRGlyZWN0b3J5UGlja2VyT3B0aW9ucyk6IE9ic2VydmFibGU8RmlsZUVudHJ5W10+IHtcbiAgICByZXR1cm4gRmlsZVN5c3RlbUFwaS5vcGVuRGlyZWN0b3J5UGlja2VyKHBpY2tlck9wdHMpLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoZGlyID0+IEZpbGVMaXN0aW5nU3lzdGVtSGFuZGxlLmxpc3RGaWxlcyhkaXIpKVxuICAgICk7XG4gIH1cblxufVxuXG5cblxuIl19
167
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxkZXItZmlsZS1zZWxlY3QuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWxkZXJieXRlL25neC1zdGFydGVyL3NyYy9saWIvY29tcG9uZW50cy9maWxlcy9lbGRlci1maWxlLXNlbGVjdC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBRVAsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBZSxxQkFBcUIsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQzFFLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQzs7QUFNL0MsTUFBTSxPQUFPLHdCQUF3QjtJQXVCbkM7Ozs7Z0ZBSTRFO0lBRTVFLFlBQ1UsRUFBYyxFQUNkLFFBQW1CO1FBRG5CLE9BQUUsR0FBRixFQUFFLENBQVk7UUFDZCxhQUFRLEdBQVIsUUFBUSxDQUFXO1FBN0I3Qjs7OztvRkFJNEU7UUFFM0QsV0FBTSxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQU16RCwwQkFBcUIsR0FBRyxJQUFJLFlBQVksRUFBZSxDQUFDO1FBR3hELGdDQUEyQixHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7SUFnQnZFLENBQUM7SUFFRDs7OztnRkFJNEU7SUFFckUsUUFBUTtRQUNiLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFTSxXQUFXO1FBQ2hCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRDs7OztnRkFJNEU7SUFFNUUsSUFDVyxlQUFlLENBQUMsS0FBYTtRQUN0QyxJQUFJLENBQUMs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LENBQ2QsQ0FBQztRQUNKLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsdURBQXVELENBQUMsQ0FBQztRQUM1RSxDQUFDO0lBQ0gsQ0FBQztJQUVPLGFBQWEsQ0FBQyxRQUFrQjtRQUN0QyxNQUFNLEtBQUssR0FBZ0IsRUFBRSxDQUFDO1FBQzlCLEtBQUssTUFBTSxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDN0IsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDOUMsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7OEdBdExVLHdCQUF3QjtrR0FBeEIsd0JBQXdCOzsyRkFBeEIsd0JBQXdCO2tCQUpwQyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxtQkFBbUI7b0JBQzdCLFVBQVUsRUFBRSxJQUFJO2lCQUNuQjt1R0FlaUIscUJBQXFCO3NCQURwQyxNQUFNO2dCQUlTLDJCQUEyQjtzQkFEMUMsTUFBTTtnQkF3Q0ksZUFBZTtzQkFEekIsS0FBSztnQkFTSyx1QkFBdUI7c0JBRGpDLEtBQUs7Z0JBY0ssd0JBQXdCO3NCQURsQyxLQUFLO2dCQWdCQyxPQUFPO3NCQURiLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFJlbmRlcmVyMlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TG9nZ2VyRmFjdG9yeX0gZnJvbSAnQGVsZGVyYnl0ZS90cy1sb2dnZXInO1xuaW1wb3J0IHtCb29sZWFuSW5wdXQsIGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eX0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7RmlsZUVudHJ5fSBmcm9tICcuL2xpc3RpbmcvZmlsZS1lbnRyeSc7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW2VsZGVyRmlsZVNlbGVjdF0nLFxuICAgIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgRWxkZXJGaWxlU2VsZWN0RGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBGaWVsZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIodGhpcy5jb25zdHJ1Y3Rvci5uYW1lKTtcblxuICBwcml2YXRlIF9maWxlSW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQ7XG4gIHByaXZhdGUgX3VubGlzdGVuOiAoKSA9PiB2b2lkO1xuXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgcmVhZG9ubHkgZWxkZXJGaWxlU2VsZWN0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxGaWxlRW50cnlbXT4oKTtcblxuICBAT3V0cHV0KClcbiAgcHVibGljIHJlYWRvbmx5IGVsZGVyU2luZ2xlRmlsZVNlbGVjdENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsZT4oKTtcblxuICBwcml2YXRlIF9tdWx0aXBsZTogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfZGlyZWN0b3J5OiBib29sZWFuO1xuICBwcml2YXRlIF9hY2NlcHQ6IHN0cmluZztcblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogQ29uc3RydWN0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGVsOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMlxuICApIHtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBMaWZlIEN5Y2xlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmNyZWF0ZUZpbGVTZWxlY3QoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnJlbW92ZUZpbGVTZWxlY3QoKTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQcm9wZXJ0aWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZWxkZXJGaWxlU2VsZWN0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9hY2NlcHQgPSB2YWx1ZTtcbiAgICBpZiAodGhpcy5fZmlsZUlucHV0KSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2ZpbGVJbnB1dCwgJ2FjY2VwdCcsIHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGVsZGVyRmlsZVNlbGVjdE11bHRpcGxlKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICB0aGlzLl9tdWx0aXBsZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgaWYgKHRoaXMuX2ZpbGVJbnB1dCkge1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9maWxlSW5wdXQsICdtdWx0aXBsZScsIHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWxsb3cgdGhlIHVzZXIgdG8gc2VsZWN0IGEgZGlyZWN0b3J5LiBBbGwgZmlsZXMgdGhhdCBhcmUgcmVjdXJzaXZlbHkgY29udGFpbmVkIGFyZSBzZWxlY3RlZC5cbiAgICogSG93ZXZlciwgdGhlIHVzZXIgd2lsbCBubyBsb25nZXIgYmUgYWJsZSB0byBzZWxlY3QgaW5kaXZpZHVhbCBmaWxlcyBpZiB0aGlzIGlzIGVuYWJsZWQuXG4gICAqIEBwYXJhbSB2YWx1ZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBlbGRlckZpbGVTZWxlY3REaXJlY3RvcnkodmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgIHRoaXMuX2RpcmVjdG9yeSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgaWYgKHRoaXMuX2ZpbGVJbnB1dCkge1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5fZmlsZUlucHV0LCAnd2Via2l0ZGlyZWN0b3J5JywgJ3RydWUnKTtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuX2ZpbGVJbnB1dCwgJ2RpcmVjdG9yeScsICd0cnVlJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFB1YmxpYyBBUEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKVxuICBwdWJsaWMgb25DbGljayhldmVudDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vcGVuRmlsZVNlbGVjdERpYWxvZygpO1xuICB9XG5cbiAgcHVibGljIG9wZW5GaWxlU2VsZWN0RGlhbG9nKCk6IHZvaWQge1xuICAgIHRoaXMuX2ZpbGVJbnB1dC5jbGljaygpO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFByaXZhdGUgbWV0aG9kcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgLyoqXG4gICAqIDxpbnB1dCB0eXBlPVwiZmlsZVwiXG4gICAqICAgICBoaWRkZW4gI2ZpbGVJbnB1dFxuICAgKiAgICAgW211bHRpcGxlXT1cIm11bHRpcGxlXCJcbiAgICogICAgIFthY2NlcHRdPVwiYWNjZXB0XCJcbiAgICogICAgIChjaGFuZ2UpPVwiZmlsZUlucHV0Q2hhbmdlZCgpXCJcbiAgICogLz5cbiAgICovXG4gIHByaXZhdGUgY3JlYXRlRmlsZVNlbGVjdCgpOiB2b2lkIHtcblxuICAgIHRoaXMuX2ZpbGVJbnB1dCA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLl9maWxlSW5wdXQsICdoaWRkZW4nLCAndHJ1ZScpO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuX2ZpbGVJbnB1dCwgJ3R5cGUnLCAnZmlsZScpO1xuICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy5lbC5uYXRpdmVFbGVtZW50LCB0aGlzLl9maWxlSW5wdXQpO1xuXG4gICAgaWYgKHRoaXMuX2FjY2VwdCkge1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9maWxlSW5wdXQsICdhY2NlcHQnLCB0aGlzLl9hY2NlcHQpO1xuICAgIH1cbiAgICBpZiAodGhpcy5fbXVsdGlwbGUpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZmlsZUlucHV0LCAnbXVsdGlwbGUnLCB0aGlzLl9tdWx0aXBsZSk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9kaXJlY3RvcnkpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuX2ZpbGVJbnB1dCwgJ3dlYmtpdGRpcmVjdG9yeScsICd0cnVlJyk7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLl9maWxlSW5wdXQsICdkaXJlY3RvcnknLCAndHJ1ZScpO1xuICAgIH1cblxuICAgIHRoaXMuX3VubGlzdGVuID0gdGhpcy5yZW5kZXJlci5saXN0ZW4oXG4gICAgICB0aGlzLl9maWxlSW5wdXQsXG4gICAgICAnY2hhbmdlJyxcbiAgICAgIGV2ZW50ID0+IHRoaXMuZmlsZUlucHV0Q2hhbmdlZChldmVudClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVGaWxlU2VsZWN0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl91bmxpc3Rlbikge1xuICAgICAgdGhpcy5fdW5saXN0ZW4oKTtcbiAgICAgIHRoaXMuX3VubGlzdGVuID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2ZpbGVJbnB1dCkge1xuICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDaGlsZCh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIHRoaXMuX2ZpbGVJbnB1dCk7XG4gICAgICB0aGlzLl9maWxlSW5wdXQgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZmlsZUlucHV0Q2hhbmdlZChldmVudDogYW55KTogdm9pZCB7XG4gICAgY29uc3QgZmlsZUxpc3QgPSB0aGlzLl9maWxlSW5wdXQuZmlsZXM7XG4gICAgY29uc3QgZmlsZXMgPSB0aGlzLnRvRmlsZUVudHJpZXMoZmlsZUxpc3QpO1xuICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdmaWxlSW5wdXRDaGFuZ2VkLCBmaWxlczonLCBmaWxlcyk7XG4gICAgdGhpcy5lbWl0RmlsZUxpc3QoZmlsZXMpO1xuICAgIHRoaXMuY2xlYXJGaWxlTGlzdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhckZpbGVMaXN0KCkge1xuICAgIC8vIG5vdCBuaWNlIGJ1dCB3b3Jrc1xuICAgIHRoaXMuX2ZpbGVJbnB1dC52YWx1ZSA9IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGVtaXRGaWxlTGlzdChmaWxlczogRmlsZUVudHJ5W10pOiB2b2lkIHtcbiAgICBpZiAoZmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5lbGRlckZpbGVTZWxlY3RDaGFuZ2UubmV4dChmaWxlcyk7XG4gICAgICB0aGlzLmVsZGVyU2luZ2xlRmlsZVNlbGVjdENoYW5nZS5lbWl0KFxuICAgICAgICBmaWxlc1swXS5maWxlXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvZ2dlci53YXJuKCdVc2VyIGRpZCBub3Qgc2VsZWN0IGFueSBGaWxlIG9yIHRoZSBGb2xkZXIgd2FzIGVtcHR5LicpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdG9GaWxlRW50cmllcyhmaWxlTGlzdDogRmlsZUxpc3QpOiBGaWxlRW50cnlbXSB7XG4gICAgY29uc3QgZmlsZXM6IEZpbGVFbnRyeVtdID0gW107XG4gICAgZm9yIChjb25zdCBrZXkgaW4gZmlsZUxpc3QpIHtcbiAgICAgIGlmICghaXNOYU4ocGFyc2VJbnQoa2V5LCAwKSkpIHtcbiAgICAgICAgZmlsZXMucHVzaChGaWxlRW50cnkub2ZGaWxlKGZpbGVMaXN0W2tleV0pKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZpbGVzO1xuICB9XG5cbn1cbiJdfQ==
@@ -1,6 +1,3 @@
1
- import { from } from 'rxjs';
2
- import { combineLatestWith, map } from 'rxjs/operators';
3
- import { FileSystemApi } from '../file-system-api';
4
1
  /**
5
2
  * Represents a file and the relative path where the user has selected it.
6
3
  * This is useful if the user has selected a folder and files
@@ -15,24 +12,26 @@ export class FileEntry {
15
12
  * which is also supported by this method.
16
13
  */
17
14
  static ofFile(file) {
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)));
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);
27
26
  }
28
27
  /**
29
28
  * Creates a file Entry with a relative parent path
30
29
  */
31
- static relativeFile(file, relativeParent, fileHandle) {
30
+ static relativeFile(file, relativeParent) {
32
31
  if (relativeParent && relativeParent.endsWith('/')) {
33
32
  relativeParent = relativeParent.substring(0, relativeParent.length - 1);
34
33
  }
35
- return new FileEntry(file, relativeParent, fileHandle);
34
+ return new FileEntry(file, relativeParent);
36
35
  }
37
36
  static toFileMap(entries) {
38
37
  const map = new Map();
@@ -52,10 +51,9 @@ export class FileEntry {
52
51
  * Contains the relative path from the selected folder
53
52
  * to this file. Only relevant if the user has selected a folder.
54
53
  */
55
- relativeParent, fileHandle) {
54
+ relativeParent) {
56
55
  this.file = file;
57
56
  this.relativeParent = relativeParent;
58
- this.fileHandle = fileHandle;
59
57
  this.relativePath = FileEntry.buildRelativePath(relativeParent, file);
60
58
  }
61
59
  /***************************************************************************
@@ -74,18 +72,5 @@ export class FileEntry {
74
72
  return file.name;
75
73
  }
76
74
  }
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
- }
90
75
  }
91
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1lbnRyeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VsZGVyYnl0ZS9uZ3gtc3RhcnRlci9zcmMvbGliL2NvbXBvbmVudHMvZmlsZXMvbGlzdGluZy9maWxlLWVudHJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxJQUFJLEVBQWEsTUFBTSxNQUFNLENBQUM7QUFDdEMsT0FBTyxFQUFDLGlCQUFpQixFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3RELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUVqRDs7OztHQUlHO0FBQ0gsTUFBTSxPQUFPLFNBQVM7SUFFcEI7Ozs7OztPQU1HO0lBQ0ksTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFVO1FBRTdCLE9BQU8sU0FBUyxDQUFDLFlBQVksQ0FDM0IsSUFBSSxFQUNKLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FDL0IsQ0FBQztJQUNKLENBQUM7SUFHRDs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLFlBQVksQ0FDeEIsVUFBZ0MsRUFDaEMsYUFBeUM7UUFHdkMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUNwQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsbUJBQW1CLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxDQUFDLEVBQy9FLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUNwRCxJQUFJLEVBQ0osY0FBYyxFQUNkLFVBQVUsQ0FBQyxDQUFDLENBQ2YsQ0FBQztJQUNOLENBQUM7SUFJRDs7T0FFRztJQUNJLE1BQU0sQ0FBQyxZQUFZLENBQ3hCLElBQVUsRUFDVixjQUE2QixFQUM3QixVQUFpQztRQUVqQyxJQUFJLGNBQWMsSUFBSSxjQUFjLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDbkQsY0FBYyxHQUFHLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDMUUsQ0FBQztRQUNELE9BQU8sSUFBSSxTQUFTLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRU0sTUFBTSxDQUFDLFNBQVMsQ0FBQyxPQUFvQjtRQUMxQyxNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsRUFBbUIsQ0FBQztRQUN2QyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekMsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRU0sTUFBTSxDQUFDLFdBQVcsQ0FBQyxPQUFvQjtRQUM1QyxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQWFEOzs7O2dGQUk0RTtJQUU1RSxZQUNrQixJQUFVO0lBQzFCOzs7T0FHRztJQUNhLGNBQTZCLEVBQzdCLFVBQWlDO1FBTmpDLFNBQUksR0FBSixJQUFJLENBQU07UUFLVixtQkFBYyxHQUFkLGNBQWMsQ0FBZTtRQUM3QixlQUFVLEdBQVYsVUFBVSxDQUF1QjtRQUVqRCxJQUFJLENBQUMsWUFBWSxHQUFHLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVEOzs7O2dGQUk0RTtJQUU1RTs7T0FFRztJQUNLLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxjQUFzQixFQUFFLElBQVU7UUFDakUsSUFBSSxjQUFjLElBQUksSUFBSSxFQUFFLENBQUM7WUFDM0IsT0FBTyxjQUFjLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDMUMsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDbkIsQ0FBQztJQUNILENBQUM7SUFHTyxNQUFNLENBQUMsbUJBQW1CLENBQUMsSUFBVTtRQUMzQyxJQUFJLGNBQWMsR0FBVyxJQUFJLENBQUM7UUFFbEMsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUM1QixJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ2hELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7Z0JBQ3BFLGNBQWMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUNuRSxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sY0FBYyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztZQUMzQyxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sY0FBYyxDQUFDO0lBQ3hCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7ZnJvbSwgT2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2NvbWJpbmVMYXRlc3RXaXRoLCBtYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7RmlsZVN5c3RlbUFwaX0gZnJvbSAnLi4vZmlsZS1zeXN0ZW0tYXBpJztcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgZmlsZSBhbmQgdGhlIHJlbGF0aXZlIHBhdGggd2hlcmUgdGhlIHVzZXIgaGFzIHNlbGVjdGVkIGl0LlxuICogVGhpcyBpcyB1c2VmdWwgaWYgdGhlIHVzZXIgaGFzIHNlbGVjdGVkIGEgZm9sZGVyIGFuZCBmaWxlc1xuICogYXJlIGxpc3RlZCByZWN1cnNpdmVseS5cbiAqL1xuZXhwb3J0IGNsYXNzIEZpbGVFbnRyeSB7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBmaWxlIEVudHJ5IHdpdGhvdXQgYW4gZXhwbGljaXQgcmVsYXRpdmUgcGFyZW50LlxuICAgKlxuICAgKiBIb3dldmVyLCBkZXBlbmRpbmcgb24gaG93IHRoZSBmaWxlIHdhcyBzZWxlY3RlZCwgc29tZSBicm93c2Vyc1xuICAgKiBlbmNvZGUgdGhlIHJlbGF0aXZlIHBhcmVudCBwYXRoIGluIHRoZSBwcm9wZXJ0eSAnd2Via2l0UmVsYXRpdmVQYXRoJ1xuICAgKiB3aGljaCBpcyBhbHNvIHN1cHBvcnRlZCBieSB0aGlzIG1ldGhvZC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgb2ZGaWxlKGZpbGU6IEZpbGUpOiBGaWxlRW50cnkge1xuXG4gICAgcmV0dXJuIEZpbGVFbnRyeS5yZWxhdGl2ZUZpbGUoXG4gICAgICBmaWxlLFxuICAgICAgdGhpcy5idWlsZFJlbGF0aXZlUGFyZW50KGZpbGUpXG4gICAgKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gT2JzZXJ2YWJsZSBvZiBhIEZpbGUgRW50cnkgYnkgcmVzb2x2aW5nIGl0cyBGaWxlU3lzdGVtRmlsZUhhbmRsZS5cbiAgICogQHBhcmFtIGZpbGVIYW5kbGVcbiAgICogQHBhcmFtIHJvb3REaXJlY3RvcnkgaXMgbmVlZGVkIHRvIGJ1aWxkIGEgcmVsYXRpdmUgcGFyZW50XG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG9mRmlsZUhhbmRsZShcbiAgICBmaWxlSGFuZGxlOiBGaWxlU3lzdGVtRmlsZUhhbmRsZSxcbiAgICByb290RGlyZWN0b3J5PzogRmlsZVN5c3RlbURpcmVjdG9yeUhhbmRsZVxuICApOiBPYnNlcnZhYmxlPEZpbGVFbnRyeT4ge1xuXG4gICAgICByZXR1cm4gZnJvbShmaWxlSGFuZGxlLmdldEZpbGUoKSkucGlwZShcbiAgICAgICAgY29tYmluZUxhdGVzdFdpdGgoRmlsZVN5c3RlbUFwaS5idWlsZFJlbGF0aXZlUGFyZW50KGZpbGVIYW5kbGUsIHJvb3REaXJlY3RvcnkpKSxcbiAgICAgICAgbWFwKChbZmlsZSwgcmVsYXRpdmVQYXJlbnRdKSA9PiBGaWxlRW50cnkucmVsYXRpdmVGaWxlKFxuICAgICAgICAgIGZpbGUsXG4gICAgICAgICAgcmVsYXRpdmVQYXJlbnQsXG4gICAgICAgICAgZmlsZUhhbmRsZSkpXG4gICAgICApO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgZmlsZSBFbnRyeSB3aXRoIGEgcmVsYXRpdmUgcGFyZW50IHBhdGhcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVsYXRpdmVGaWxlKFxuICAgIGZpbGU6IEZpbGUsXG4gICAgcmVsYXRpdmVQYXJlbnQ6IHN0cmluZyB8IG51bGwsXG4gICAgZmlsZUhhbmRsZT86IEZpbGVTeXN0ZW1GaWxlSGFuZGxlXG4gICk6IEZpbGVFbnRyeSB7XG4gICAgaWYgKHJlbGF0aXZlUGFyZW50ICYmIHJlbGF0aXZlUGFyZW50LmVuZHNXaXRoKCcvJykpIHtcbiAgICAgIHJlbGF0aXZlUGFyZW50ID0gcmVsYXRpdmVQYXJlbnQuc3Vic3RyaW5nKDAsIHJlbGF0aXZlUGFyZW50Lmxlbmd0aCAtIDEpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEZpbGVFbnRyeShmaWxlLCByZWxhdGl2ZVBhcmVudCwgZmlsZUhhbmRsZSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHRvRmlsZU1hcChlbnRyaWVzOiBGaWxlRW50cnlbXSk6IE1hcDxGaWxlLCBGaWxlRW50cnk+IHtcbiAgICBjb25zdCBtYXAgPSBuZXcgTWFwPEZpbGUsIEZpbGVFbnRyeT4oKTtcbiAgICBlbnRyaWVzLmZvckVhY2goZSA9PiBtYXAuc2V0KGUuZmlsZSwgZSkpO1xuICAgIHJldHVybiBtYXA7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHRvRmlsZUFycmF5KGVudHJpZXM6IEZpbGVFbnRyeVtdKTogRmlsZVtdIHtcbiAgICByZXR1cm4gZW50cmllcy5tYXAoZSA9PiBlLmZpbGUpO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIEZpZWxkcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdHJpbmcgd2hpY2ggc3BlY2lmaWVzIHRoZSBmaWxlJ3MgcGF0aCByZWxhdGl2ZSB0byB0aGUgZGlyZWN0b3J5IHNlbGVjdGVkIGJ5IHRoZSB1c2VyLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJlbGF0aXZlUGF0aDogc3RyaW5nO1xuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBDb25zdHJ1Y3RvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IGZpbGU6IEZpbGUsXG4gICAgLyoqXG4gICAgICogQ29udGFpbnMgdGhlIHJlbGF0aXZlIHBhdGggZnJvbSB0aGUgc2VsZWN0ZWQgZm9sZGVyXG4gICAgICogdG8gdGhpcyBmaWxlLiBPbmx5IHJlbGV2YW50IGlmIHRoZSB1c2VyIGhhcyBzZWxlY3RlZCBhIGZvbGRlci5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgcmVsYXRpdmVQYXJlbnQ6IHN0cmluZyB8IG51bGwsXG4gICAgcHVibGljIHJlYWRvbmx5IGZpbGVIYW5kbGU/OiBGaWxlU3lzdGVtRmlsZUhhbmRsZVxuICApIHtcbiAgICB0aGlzLnJlbGF0aXZlUGF0aCA9IEZpbGVFbnRyeS5idWlsZFJlbGF0aXZlUGF0aChyZWxhdGl2ZVBhcmVudCwgZmlsZSk7XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHJpdmF0ZSBtZXRob2RzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAvKipcbiAgICogUmV0dXJucyBhIHN0cmluZyB3aGljaCBzcGVjaWZpZXMgdGhlIGZpbGUncyBwYXRoIHJlbGF0aXZlIHRvIHRoZSBkaXJlY3Rvcnkgc2VsZWN0ZWQgYnkgdGhlIHVzZXIuXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBidWlsZFJlbGF0aXZlUGF0aChyZWxhdGl2ZVBhcmVudDogc3RyaW5nLCBmaWxlOiBGaWxlKTogc3RyaW5nIHtcbiAgICBpZiAocmVsYXRpdmVQYXJlbnQgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHJlbGF0aXZlUGFyZW50ICsgJy8nICsgZmlsZS5uYW1lO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmlsZS5uYW1lO1xuICAgIH1cbiAgfVxuXG5cbiAgcHJpdmF0ZSBzdGF0aWMgYnVpbGRSZWxhdGl2ZVBhcmVudChmaWxlOiBGaWxlKTogc3RyaW5nIHtcbiAgICBsZXQgcmVsYXRpdmVQYXJlbnQ6IHN0cmluZyA9IG51bGw7XG5cbiAgICBpZiAoZmlsZS53ZWJraXRSZWxhdGl2ZVBhdGgpIHtcbiAgICAgIGlmIChmaWxlLndlYmtpdFJlbGF0aXZlUGF0aC5lbmRzV2l0aChmaWxlLm5hbWUpKSB7XG4gICAgICAgIGNvbnN0IG5hbWVTdGFydCA9IGZpbGUud2Via2l0UmVsYXRpdmVQYXRoLmxlbmd0aCAtIGZpbGUubmFtZS5sZW5ndGg7XG4gICAgICAgIHJlbGF0aXZlUGFyZW50ID0gZmlsZS53ZWJraXRSZWxhdGl2ZVBhdGguc3Vic3RyaW5nKDAsIG5hbWVTdGFydCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWxhdGl2ZVBhcmVudCA9IGZpbGUud2Via2l0UmVsYXRpdmVQYXRoO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVsYXRpdmVQYXJlbnQ7XG4gIH1cbn1cbiJdfQ==
76
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1lbnRyeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VsZGVyYnl0ZS9uZ3gtc3RhcnRlci9zcmMvbGliL2NvbXBvbmVudHMvZmlsZXMvbGlzdGluZy9maWxlLWVudHJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8sU0FBUztJQUVwQjs7Ozs7O09BTUc7SUFDSSxNQUFNLENBQUMsTUFBTSxDQUFDLElBQVU7UUFFN0IsSUFBSSxjQUFjLEdBQVcsSUFBSSxDQUFDO1FBRWxDLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDNUIsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNoRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO2dCQUNwRSxjQUFjLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDbkUsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLGNBQWMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUM7WUFDM0MsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLFNBQVMsQ0FBQyxZQUFZLENBQzNCLElBQUksRUFDSixjQUFjLENBQ2YsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNJLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBVSxFQUFFLGNBQTZCO1FBQ2xFLElBQUksY0FBYyxJQUFJLGNBQWMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNuRCxjQUFjLEdBQUcsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMxRSxDQUFDO1FBQ0QsT0FBTyxJQUFJLFNBQVMsQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVNLE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBb0I7UUFDMUMsTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLEVBQW1CLENBQUM7UUFDdkMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVNLE1BQU0sQ0FBQyxXQUFXLENBQUMsT0FBb0I7UUFDNUMsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFhRDs7OztnRkFJNEU7SUFFNUUsWUFDa0IsSUFBVTtJQUMxQjs7O09BR0c7SUFDYSxjQUE2QjtRQUw3QixTQUFJLEdBQUosSUFBSSxDQUFNO1FBS1YsbUJBQWMsR0FBZCxjQUFjLENBQWU7UUFFN0MsSUFBSSxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUMsaUJBQWlCLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFRDs7OztnRkFJNEU7SUFFNUU7O09BRUc7SUFDSyxNQUFNLENBQUMsaUJBQWlCLENBQUMsY0FBc0IsRUFBRSxJQUFVO1FBQ2pFLElBQUksY0FBYyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQzNCLE9BQU8sY0FBYyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQzFDLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ25CLENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFJlcHJlc2VudHMgYSBmaWxlIGFuZCB0aGUgcmVsYXRpdmUgcGF0aCB3aGVyZSB0aGUgdXNlciBoYXMgc2VsZWN0ZWQgaXQuXG4gKiBUaGlzIGlzIHVzZWZ1bCBpZiB0aGUgdXNlciBoYXMgc2VsZWN0ZWQgYSBmb2xkZXIgYW5kIGZpbGVzXG4gKiBhcmUgbGlzdGVkIHJlY3Vyc2l2ZWx5LlxuICovXG5leHBvcnQgY2xhc3MgRmlsZUVudHJ5IHtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIGZpbGUgRW50cnkgd2l0aG91dCBhbiBleHBsaWNpdCByZWxhdGl2ZSBwYXJlbnQuXG4gICAqXG4gICAqIEhvd2V2ZXIsIGRlcGVuZGluZyBvbiBob3cgdGhlIGZpbGUgd2FzIHNlbGVjdGVkLCBzb21lIGJyb3dzZXJzXG4gICAqIGVuY29kZSB0aGUgcmVsYXRpdmUgcGFyZW50IHBhdGggaW4gdGhlIHByb3BlcnR5ICd3ZWJraXRSZWxhdGl2ZVBhdGgnXG4gICAqIHdoaWNoIGlzIGFsc28gc3VwcG9ydGVkIGJ5IHRoaXMgbWV0aG9kLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBvZkZpbGUoZmlsZTogRmlsZSk6IEZpbGVFbnRyeSB7XG5cbiAgICBsZXQgcmVsYXRpdmVQYXJlbnQ6IHN0cmluZyA9IG51bGw7XG5cbiAgICBpZiAoZmlsZS53ZWJraXRSZWxhdGl2ZVBhdGgpIHtcbiAgICAgIGlmIChmaWxlLndlYmtpdFJlbGF0aXZlUGF0aC5lbmRzV2l0aChmaWxlLm5hbWUpKSB7XG4gICAgICAgIGNvbnN0IG5hbWVTdGFydCA9IGZpbGUud2Via2l0UmVsYXRpdmVQYXRoLmxlbmd0aCAtIGZpbGUubmFtZS5sZW5ndGg7XG4gICAgICAgIHJlbGF0aXZlUGFyZW50ID0gZmlsZS53ZWJraXRSZWxhdGl2ZVBhdGguc3Vic3RyaW5nKDAsIG5hbWVTdGFydCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWxhdGl2ZVBhcmVudCA9IGZpbGUud2Via2l0UmVsYXRpdmVQYXRoO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBGaWxlRW50cnkucmVsYXRpdmVGaWxlKFxuICAgICAgZmlsZSxcbiAgICAgIHJlbGF0aXZlUGFyZW50XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgZmlsZSBFbnRyeSB3aXRoIGEgcmVsYXRpdmUgcGFyZW50IHBhdGhcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVsYXRpdmVGaWxlKGZpbGU6IEZpbGUsIHJlbGF0aXZlUGFyZW50OiBzdHJpbmcgfCBudWxsKSB7XG4gICAgaWYgKHJlbGF0aXZlUGFyZW50ICYmIHJlbGF0aXZlUGFyZW50LmVuZHNXaXRoKCcvJykpIHtcbiAgICAgIHJlbGF0aXZlUGFyZW50ID0gcmVsYXRpdmVQYXJlbnQuc3Vic3RyaW5nKDAsIHJlbGF0aXZlUGFyZW50Lmxlbmd0aCAtIDEpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEZpbGVFbnRyeShmaWxlLCByZWxhdGl2ZVBhcmVudCk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHRvRmlsZU1hcChlbnRyaWVzOiBGaWxlRW50cnlbXSk6IE1hcDxGaWxlLCBGaWxlRW50cnk+IHtcbiAgICBjb25zdCBtYXAgPSBuZXcgTWFwPEZpbGUsIEZpbGVFbnRyeT4oKTtcbiAgICBlbnRyaWVzLmZvckVhY2goZSA9PiBtYXAuc2V0KGUuZmlsZSwgZSkpO1xuICAgIHJldHVybiBtYXA7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHRvRmlsZUFycmF5KGVudHJpZXM6IEZpbGVFbnRyeVtdKTogRmlsZVtdIHtcbiAgICByZXR1cm4gZW50cmllcy5tYXAoZSA9PiBlLmZpbGUpO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIEZpZWxkcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdHJpbmcgd2hpY2ggc3BlY2lmaWVzIHRoZSBmaWxlJ3MgcGF0aCByZWxhdGl2ZSB0byB0aGUgZGlyZWN0b3J5IHNlbGVjdGVkIGJ5IHRoZSB1c2VyLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJlbGF0aXZlUGF0aDogc3RyaW5nO1xuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBDb25zdHJ1Y3RvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IGZpbGU6IEZpbGUsXG4gICAgLyoqXG4gICAgICogQ29udGFpbnMgdGhlIHJlbGF0aXZlIHBhdGggZnJvbSB0aGUgc2VsZWN0ZWQgZm9sZGVyXG4gICAgICogdG8gdGhpcyBmaWxlLiBPbmx5IHJlbGV2YW50IGlmIHRoZSB1c2VyIGhhcyBzZWxlY3RlZCBhIGZvbGRlci5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgcmVsYXRpdmVQYXJlbnQ6IHN0cmluZyB8IG51bGxcbiAgKSB7XG4gICAgdGhpcy5yZWxhdGl2ZVBhdGggPSBGaWxlRW50cnkuYnVpbGRSZWxhdGl2ZVBhdGgocmVsYXRpdmVQYXJlbnQsIGZpbGUpO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFByaXZhdGUgbWV0aG9kcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdHJpbmcgd2hpY2ggc3BlY2lmaWVzIHRoZSBmaWxlJ3MgcGF0aCByZWxhdGl2ZSB0byB0aGUgZGlyZWN0b3J5IHNlbGVjdGVkIGJ5IHRoZSB1c2VyLlxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgYnVpbGRSZWxhdGl2ZVBhdGgocmVsYXRpdmVQYXJlbnQ6IHN0cmluZywgZmlsZTogRmlsZSk6IHN0cmluZyB7XG4gICAgaWYgKHJlbGF0aXZlUGFyZW50ICE9IG51bGwpIHtcbiAgICAgIHJldHVybiByZWxhdGl2ZVBhcmVudCArICcvJyArIGZpbGUubmFtZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZpbGUubmFtZTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -1,10 +1,7 @@
1
- import { of, switchMap, zip } from 'rxjs';
1
+ import { EMPTY, mergeMap, Observable, of, 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';
8
5
  export class FileListingRx {
9
6
  constructor() {
10
7
  this.log = LoggerFactory.getLogger(this.constructor.name);
@@ -19,46 +16,89 @@ export class FileListingRx {
19
16
  const obs = [];
20
17
  for (let i = 0; i < transferItemList.length; i++) {
21
18
  const transferItem = transferItemList[i];
22
- obs.push(this.resolveTransferItem(transferItem));
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
+ }
23
41
  }
24
42
  return zip(obs).pipe(map(files => files.flat()));
25
43
  }
44
+ listFilesRecursive(entry) {
45
+ return this.listFilesRecursiveAsync(entry, null);
46
+ }
26
47
  /***************************************************************************
27
48
  * *
28
49
  * Private methods *
29
50
  * *
30
51
  **************************************************************************/
31
- resolveTransferItem(transferItem) {
32
- if (FileSystemApi.isGetAsFileSystemHandleSupported(transferItem)) {
33
- return FileSystemApi.getAsFileSystemHandle(transferItem).pipe(switchMap(handle => handle ? FileListingSystemHandle.listFiles(handle) : this.legacyFileListing(transferItem)));
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()));
34
56
  }
35
- return this.legacyFileListing(transferItem);
36
- }
37
- legacyFileListing(transferItem) {
38
- const entry = transferItem.webkitGetAsEntry();
39
- if (entry) {
40
- return FileListingWebkit.listFilesRecursive(entry);
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;
41
63
  }
42
- return this.fallbackFileListing(transferItem);
43
64
  }
44
- fallbackFileListing(transferItem) {
45
- const itemAsFile = transferItem.getAsFile();
46
- if (itemAsFile) {
47
- return of([FileEntry.ofFile(itemAsFile)]);
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
+ }
48
81
  }
49
- else {
50
- if (transferItem.kind == 'file') {
51
- return of([
52
- FileEntry.ofFile(new File([], '', {
53
- type: transferItem.type
54
- }))
55
- ]);
82
+ return path;
83
+ }
84
+ readEntries(directoryEntry) {
85
+ return new Observable(observer => {
86
+ this.consumeReaderToCompletion(observer, directoryEntry.createReader());
87
+ });
88
+ }
89
+ consumeReaderToCompletion(observer, directoryReader) {
90
+ directoryReader.readEntries(entries => {
91
+ if (entries && entries.length > 0) {
92
+ observer.next(entries);
93
+ this.consumeReaderToCompletion(observer, directoryReader);
56
94
  }
57
95
  else {
58
- this.log.warn('Could not handle DataTransferItem!', transferItem);
59
- return of([]);
96
+ observer.complete();
60
97
  }
61
- }
98
+ }, err => {
99
+ observer.error(err);
100
+ observer.complete();
101
+ });
62
102
  }
63
103
  }
64
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1saXN0aW5nLXJ4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWxkZXJieXRlL25neC1zdGFydGVyL3NyYy9saWIvY29tcG9uZW50cy9maWxlcy9saXN0aW5nL2ZpbGUtbGlzdGluZy1yeC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWEsRUFBRSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDcEQsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUN2QyxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkMsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQ3hELE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQ3JFLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUVqRCxNQUFNLE9BQU8sYUFBYTtJQUExQjtRQUltQixRQUFHLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBK0R4RSxDQUFDO2FBakV3QixhQUFRLEdBQUcsSUFBSSxhQUFhLEVBQUUsQUFBdEIsQ0FBdUI7SUFJdEQ7Ozs7Z0ZBSTRFO0lBRXJFLFVBQVUsQ0FBQyxnQkFBc0M7UUFDdEQsTUFBTSxHQUFHLEdBQThCLEVBQUUsQ0FBQztRQUMxQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDakQsTUFBTSxZQUFZLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDekMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztRQUNuRCxDQUFDO1FBQ0QsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUNsQixHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FDM0IsQ0FBQztJQUNKLENBQUM7SUFFRDs7OztnRkFJNEU7SUFFcEUsbUJBQW1CLENBQUMsWUFBOEI7UUFFeEQsSUFBSSxhQUFhLENBQUMsZ0NBQWdDLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztZQUNqRSxPQUFPLGFBQWEsQ0FBQyxxQkFBcUIsQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQzNELFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsdUJBQXVCLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FDL0csQ0FBQztRQUNKLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBR08saUJBQWlCLENBQUMsWUFBOEI7UUFDdEQsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDOUMsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLE9BQU8saUJBQWlCLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckQsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxZQUE4QjtRQUN4RCxNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDNUMsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNmLE9BQU8sRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUMsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLFlBQVksQ0FBQyxJQUFJLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQ2hDLE9BQU8sRUFBRSxDQUFDO29CQUNSLFNBQVMsQ0FBQyxNQUFNLENBQ2QsSUFBSSxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRTt3QkFDZixJQUFJLEVBQUUsWUFBWSxDQUFDLElBQUk7cUJBQ3hCLENBQUMsQ0FDSDtpQkFDRixDQUFDLENBQUM7WUFDTCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsb0NBQW9DLEVBQUUsWUFBWSxDQUFDLENBQUM7Z0JBQ2xFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2hCLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7T2JzZXJ2YWJsZSwgb2YsIHN3aXRjaE1hcCwgemlwfSBmcm9tICdyeGpzJztcbmltcG9ydCB7RmlsZUVudHJ5fSBmcm9tICcuL2ZpbGUtZW50cnknO1xuaW1wb3J0IHttYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7TG9nZ2VyRmFjdG9yeX0gZnJvbSAnQGVsZGVyYnl0ZS90cy1sb2dnZXInO1xuaW1wb3J0IHtGaWxlTGlzdGluZ1dlYmtpdH0gZnJvbSAnLi9maWxlLWxpc3Rpbmctd2Via2l0JztcbmltcG9ydCB7RmlsZUxpc3RpbmdTeXN0ZW1IYW5kbGV9IGZyb20gJy4vZmlsZS1saXN0aW5nLXN5c3RlbS1oYW5kbGUnO1xuaW1wb3J0IHtGaWxlU3lzdGVtQXBpfSBmcm9tICcuLi9maWxlLXN5c3RlbS1hcGknO1xuXG5leHBvcnQgY2xhc3MgRmlsZUxpc3RpbmdSeCB7XG5cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBJTlNUQU5DRSA9IG5ldyBGaWxlTGlzdGluZ1J4KCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBsb2cgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcih0aGlzLmNvbnN0cnVjdG9yLm5hbWUpO1xuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQdWJsaWMgQVBJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHB1YmxpYyB0b0ZpbGVMaXN0KHRyYW5zZmVySXRlbUxpc3Q6IERhdGFUcmFuc2Zlckl0ZW1MaXN0KTogT2JzZXJ2YWJsZTxGaWxlRW50cnlbXT4ge1xuICAgIGNvbnN0IG9iczogT2JzZXJ2YWJsZTxGaWxlRW50cnlbXT5bXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdHJhbnNmZXJJdGVtTGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgdHJhbnNmZXJJdGVtID0gdHJhbnNmZXJJdGVtTGlzdFtpXTtcbiAgICAgIG9icy5wdXNoKHRoaXMucmVzb2x2ZVRyYW5zZmVySXRlbSh0cmFuc2Zlckl0ZW0pKTtcbiAgICB9XG4gICAgcmV0dXJuIHppcChvYnMpLnBpcGUoXG4gICAgICBtYXAoZmlsZXMgPT4gZmlsZXMuZmxhdCgpKVxuICAgICk7XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHJpdmF0ZSBtZXRob2RzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwcml2YXRlIHJlc29sdmVUcmFuc2Zlckl0ZW0odHJhbnNmZXJJdGVtOiBEYXRhVHJhbnNmZXJJdGVtKTogT2JzZXJ2YWJsZTxGaWxlRW50cnlbXT4ge1xuXG4gICAgaWYgKEZpbGVTeXN0ZW1BcGkuaXNHZXRBc0ZpbGVTeXN0ZW1IYW5kbGVTdXBwb3J0ZWQodHJhbnNmZXJJdGVtKSkge1xuICAgICAgcmV0dXJuIEZpbGVTeXN0ZW1BcGkuZ2V0QXNGaWxlU3lzdGVtSGFuZGxlKHRyYW5zZmVySXRlbSkucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKGhhbmRsZSA9PiBoYW5kbGUgPyBGaWxlTGlzdGluZ1N5c3RlbUhhbmRsZS5saXN0RmlsZXMoaGFuZGxlKSA6IHRoaXMubGVnYWN5RmlsZUxpc3RpbmcodHJhbnNmZXJJdGVtKSlcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmxlZ2FjeUZpbGVMaXN0aW5nKHRyYW5zZmVySXRlbSk7XG4gIH1cblxuXG4gIHByaXZhdGUgbGVnYWN5RmlsZUxpc3RpbmcodHJhbnNmZXJJdGVtOiBEYXRhVHJhbnNmZXJJdGVtKTogT2JzZXJ2YWJsZTxGaWxlRW50cnlbXT4ge1xuICAgIGNvbnN0IGVudHJ5ID0gdHJhbnNmZXJJdGVtLndlYmtpdEdldEFzRW50cnkoKTtcbiAgICBpZiAoZW50cnkpIHtcbiAgICAgIHJldHVybiBGaWxlTGlzdGluZ1dlYmtpdC5saXN0RmlsZXNSZWN1cnNpdmUoZW50cnkpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5mYWxsYmFja0ZpbGVMaXN0aW5nKHRyYW5zZmVySXRlbSk7XG4gIH1cblxuICBwcml2YXRlIGZhbGxiYWNrRmlsZUxpc3RpbmcodHJhbnNmZXJJdGVtOiBEYXRhVHJhbnNmZXJJdGVtKTogT2JzZXJ2YWJsZTxGaWxlRW50cnlbXT4ge1xuICAgIGNvbnN0IGl0ZW1Bc0ZpbGUgPSB0cmFuc2Zlckl0ZW0uZ2V0QXNGaWxlKCk7XG4gICAgaWYgKGl0ZW1Bc0ZpbGUpIHtcbiAgICAgIHJldHVybiBvZihbRmlsZUVudHJ5Lm9mRmlsZShpdGVtQXNGaWxlKV0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodHJhbnNmZXJJdGVtLmtpbmQgPT0gJ2ZpbGUnKSB7XG4gICAgICAgIHJldHVybiBvZihbXG4gICAgICAgICAgRmlsZUVudHJ5Lm9mRmlsZShcbiAgICAgICAgICAgIG5ldyBGaWxlKFtdLCAnJywge1xuICAgICAgICAgICAgICB0eXBlOiB0cmFuc2Zlckl0ZW0udHlwZVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sb2cud2FybignQ291bGQgbm90IGhhbmRsZSBEYXRhVHJhbnNmZXJJdGVtIScsIHRyYW5zZmVySXRlbSk7XG4gICAgICAgIHJldHVybiBvZihbXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
104
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1saXN0aW5nLXJ4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWxkZXJieXRlL25neC1zdGFydGVyL3NyYy9saWIvY29tcG9uZW50cy9maWxlcy9saXN0aW5nL2ZpbGUtbGlzdGluZy1yeC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFjLEdBQUcsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUN0RSxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuQyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFFbkQsTUFBTSxPQUFPLGFBQWE7SUFBMUI7UUFJbUIsUUFBRyxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQThIeEUsQ0FBQzthQWhJd0IsYUFBUSxHQUFHLElBQUksYUFBYSxFQUFFLEFBQXRCLENBQXVCO0lBSXREOzs7O2dGQUk0RTtJQUVyRSxVQUFVLENBQUMsZ0JBQXNDO1FBQ3RELE1BQU0sR0FBRyxHQUE4QixFQUFFLENBQUM7UUFDMUMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2pELE1BQU0sWUFBWSxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pDLE1BQU0sS0FBSyxHQUFHLFlBQVksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzlDLElBQUksS0FBSyxFQUFFLENBQUM7Z0JBQ1YsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFD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cmliZXIsIHppcH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0ZpbGVFbnRyeX0gZnJvbSAnLi9maWxlLWVudHJ5JztcbmltcG9ydCB7bWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0xvZ2dlckZhY3Rvcnl9IGZyb20gJ0BlbGRlcmJ5dGUvdHMtbG9nZ2VyJztcblxuZXhwb3J0IGNsYXNzIEZpbGVMaXN0aW5nUngge1xuXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSU5TVEFOQ0UgPSBuZXcgRmlsZUxpc3RpbmdSeCgpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgbG9nID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIodGhpcy5jb25zdHJ1Y3Rvci5uYW1lKTtcblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHVibGljIEFQSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwdWJsaWMgdG9GaWxlTGlzdCh0cmFuc2Zlckl0ZW1MaXN0OiBEYXRhVHJhbnNmZXJJdGVtTGlzdCk6IE9ic2VydmFibGU8RmlsZUVudHJ5W10+IHtcbiAgICBjb25zdCBvYnM6IE9ic2VydmFibGU8RmlsZUVudHJ5W10+W10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRyYW5zZmVySXRlbUxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHRyYW5zZmVySXRlbSA9IHRyYW5zZmVySXRlbUxpc3RbaV07XG4gICAgICBjb25zdCBlbnRyeSA9IHRyYW5zZmVySXRlbS53ZWJraXRHZXRBc0VudHJ5KCk7XG4gICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgb2JzLnB1c2godGhpcy5saXN0RmlsZXNSZWN1cnNpdmUoZW50cnkpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGl0ZW1Bc0ZpbGUgPSB0cmFuc2Zlckl0ZW0uZ2V0QXNGaWxlKCk7XG4gICAgICAgIGlmIChpdGVtQXNGaWxlKSB7XG4gICAgICAgICAgb2JzLnB1c2gob2YoW0ZpbGVFbnRyeS5vZkZpbGUoaXRlbUFzRmlsZSldKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHRyYW5zZmVySXRlbS5raW5kID09ICdmaWxlJykge1xuICAgICAgICAgICAgb2JzLnB1c2gob2YoW1xuICAgICAgICAgICAgICBGaWxlRW50cnkub2ZGaWxlKFxuICAgICAgICAgICAgICAgIG5ldyBGaWxlKFtdLCAnJywge1xuICAgICAgICAgICAgICAgICAgdHlwZTogdHJhbnNmZXJJdGVtLnR5cGVcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICBdKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubG9nLndhcm4oJ0NvdWxkIG5vdCBoYW5kbGUgRGF0YVRyYW5zZmVySXRlbSEnLCB0cmFuc2Zlckl0ZW0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gemlwKG9icykucGlwZShcbiAgICAgIG1hcChmaWxlcyA9PiBmaWxlcy5mbGF0KCkpLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgbGlzdEZpbGVzUmVjdXJzaXZlKFxuICAgIGVudHJ5OiBGaWxlU3lzdGVtRW50cnlcbiAgKTogT2JzZXJ2YWJsZTxGaWxlRW50cnlbXT4ge1xuICAgIHJldHVybiB0aGlzLmxpc3RGaWxlc1JlY3Vyc2l2ZUFzeW5jKGVudHJ5LCBudWxsKTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQcml2YXRlIG1ldGhvZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHByaXZhdGUgbGlzdEZpbGVzUmVjdXJzaXZlQXN5bmMoXG4gICAgZW50cnk6IEZpbGVTeXN0ZW1FbnRyeSxcbiAgICBwYXJlbnQ6IEZpbGVTeXN0ZW1EaXJlY3RvcnlFbnRyeVxuICApOiBPYnNlcnZhYmxlPEZpbGVFbnRyeVtdPiB7XG4gICAgaWYgKGVudHJ5LmlzRGlyZWN0b3J5KSB7XG4gICAgICBjb25zdCBkaXJlY3RvcnlFbnRyeSA9IGVudHJ5IGFzIEZpbGVTeXN0ZW1EaXJlY3RvcnlFbnRyeTtcbiAgICAgIHJldHVybiB0aGlzLnJlYWRFbnRyaWVzKGRpcmVjdG9yeUVudHJ5KS5waXBlKFxuICAgICAgICBtZXJnZU1hcChlbnRyaWVzID0+IHppcChcbiAgICAgICAgICBlbnRyaWVzLm1hcChlbnRyeSA9PiB0aGlzLmxpc3RGaWxlc1JlY3Vyc2l2ZUFzeW5jKGVudHJ5LCBkaXJlY3RvcnlFbnRyeSkpXG4gICAgICAgICkpLFxuICAgICAgICBtYXAoZmlsZXMgPT4gZmlsZXMuZmxhdCgpKSxcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChlbnRyeS5pc0ZpbGUpIHtcbiAgICAgIGNvbnN0IGZpbGVFbnRyeSA9IGVudHJ5IGFzIEZpbGVTeXN0ZW1GaWxlRW50cnk7XG4gICAgICByZXR1cm4gdGhpcy5vYnNlcnZhYmxlRmlsZShmaWxlRW50cnksIHBhcmVudCkucGlwZShcbiAgICAgICAgbWFwKGZpbGUgPT4gW2ZpbGVdKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIEVNUFRZO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgb2JzZXJ2YWJsZUZpbGUoXG4gICAgZmlsZUVudHJ5OiBGaWxlU3lzdGVtRmlsZUVudHJ5LFxuICAgIHBhcmVudDogRmlsZVN5c3RlbURpcmVjdG9yeUVudHJ5IHwgbnVsbFxuICApOiBPYnNlcnZhYmxlPEZpbGVFbnRyeT4ge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxGaWxlRW50cnk+KFxuICAgICAgb2JzZXJ2ZXIgPT4ge1xuICAgICAgICBmaWxlRW50cnkuZmlsZShmaWxlID0+IHtcbiAgICAgICAgICBvYnNlcnZlci5uZXh0KEZpbGVFbnRyeS5yZWxhdGl2ZUZpbGUoZmlsZSwgdGhpcy50cmltU3RhcmluZ1NsYXNoKHBhcmVudD8uZnVsbFBhdGgpKSk7XG4gICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgfSwgZXJyID0+IHtcbiAgICAgICAgICBvYnNlcnZlci5lcnJvcihlcnIpO1xuICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHRyaW1TdGFyaW5nU2xhc2gocGF0aDogc3RyaW5nIHwgbnVsbCk6IHN0cmluZyB7XG4gICAgaWYgKHBhdGgpIHtcbiAgICAgIGlmIChwYXRoLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgICBwYXRoID0gcGF0aC5zdWJzdHJpbmcoMSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwYXRoO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkRW50cmllcyhcbiAgICBkaXJlY3RvcnlFbnRyeTogRmlsZVN5c3RlbURpcmVjdG9yeUVudHJ5XG4gICk6IE9ic2VydmFibGU8RmlsZVN5c3RlbUVudHJ5W10+IHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8RmlsZVN5c3RlbUVudHJ5W10+KFxuICAgICAgb2JzZXJ2ZXIgPT4ge1xuICAgICAgICB0aGlzLmNvbnN1bWVSZWFkZXJUb0NvbXBsZXRpb24ob2JzZXJ2ZXIsIGRpcmVjdG9yeUVudHJ5LmNyZWF0ZVJlYWRlcigpKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdW1lUmVhZGVyVG9Db21wbGV0aW9uKFxuICAgIG9ic2VydmVyOiBTdWJzY3JpYmVyPEZpbGVTeXN0ZW1FbnRyeVtdPixcbiAgICBkaXJlY3RvcnlSZWFkZXI6IEZpbGVTeXN0ZW1EaXJlY3RvcnlSZWFkZXJcbiAgKTogdm9pZCB7XG4gICAgZGlyZWN0b3J5UmVhZGVyLnJlYWRFbnRyaWVzKGVudHJpZXMgPT4ge1xuICAgICAgaWYgKGVudHJpZXMgJiYgZW50cmllcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIG9ic2VydmVyLm5leHQoZW50cmllcyk7XG4gICAgICAgIHRoaXMuY29uc3VtZVJlYWRlclRvQ29tcGxldGlvbihvYnNlcnZlciwgZGlyZWN0b3J5UmVhZGVyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICB9XG4gICAgfSwgZXJyID0+IHtcbiAgICAgIG9ic2VydmVyLmVycm9yKGVycik7XG4gICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgIH0pO1xuICB9XG5cbn1cbiJdfQ==