@elderbyte/ngx-starter 18.2.0-beta4 → 18.2.0
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.
- package/esm2022/lib/components/files/elder-file-select-input.mjs +119 -0
- package/esm2022/lib/components/files/elder-file-select.directive.mjs +85 -83
- package/esm2022/lib/components/files/file-system-api.mjs +96 -0
- package/esm2022/lib/components/files/listing/file-entry.mjs +30 -15
- package/esm2022/lib/components/files/listing/file-listing-rx.mjs +30 -70
- package/esm2022/lib/components/files/listing/file-listing-system-handle.mjs +35 -0
- package/esm2022/lib/components/files/listing/file-listing-webkit.mjs +77 -0
- package/fesm2022/elderbyte-ngx-starter.mjs +387 -107
- package/fesm2022/elderbyte-ngx-starter.mjs.map +1 -1
- package/lib/components/files/elder-file-select-input.d.ts +59 -0
- package/lib/components/files/elder-file-select.directive.d.ts +16 -23
- package/lib/components/files/file-system-api.d.ts +86 -0
- package/lib/components/files/listing/file-entry.d.ts +10 -1
- package/lib/components/files/listing/file-listing-rx.d.ts +3 -6
- package/lib/components/files/listing/file-listing-system-handle.d.ts +21 -0
- package/lib/components/files/listing/file-listing-webkit.d.ts +26 -0
- package/package.json +1 -1
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { FileEntry } from './listing/file-entry';
|
|
2
|
+
import { coerceBooleanProperty } from '@angular/cdk/coercion';
|
|
3
|
+
import { LoggerFactory } from '@elderbyte/ts-logger';
|
|
4
|
+
import { Subject } from 'rxjs';
|
|
5
|
+
export class ElderFileSelectInput {
|
|
6
|
+
/***************************************************************************
|
|
7
|
+
* *
|
|
8
|
+
* Constructor *
|
|
9
|
+
* *
|
|
10
|
+
**************************************************************************/
|
|
11
|
+
constructor(renderer, el) {
|
|
12
|
+
this.renderer = renderer;
|
|
13
|
+
this.el = el;
|
|
14
|
+
/***************************************************************************
|
|
15
|
+
* *
|
|
16
|
+
* Fields *
|
|
17
|
+
* *
|
|
18
|
+
**************************************************************************/
|
|
19
|
+
this.logger = LoggerFactory.getLogger(this.constructor.name);
|
|
20
|
+
this._filesSelected = new Subject;
|
|
21
|
+
}
|
|
22
|
+
/***************************************************************************
|
|
23
|
+
* *
|
|
24
|
+
* Properties *
|
|
25
|
+
* *
|
|
26
|
+
**************************************************************************/
|
|
27
|
+
get filesSelected() {
|
|
28
|
+
return this._filesSelected;
|
|
29
|
+
}
|
|
30
|
+
set elderFileSelect(value) {
|
|
31
|
+
this._accept = value;
|
|
32
|
+
if (this._fileInput) {
|
|
33
|
+
this.renderer.setProperty(this._fileInput, 'accept', value);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
set elderFileSelectMultiple(value) {
|
|
37
|
+
this._multiple = coerceBooleanProperty(value);
|
|
38
|
+
if (this._fileInput) {
|
|
39
|
+
this.renderer.setProperty(this._fileInput, 'multiple', value);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
set elderFileSelectDirectory(value) {
|
|
43
|
+
this._directory = coerceBooleanProperty(value);
|
|
44
|
+
if (this._fileInput) {
|
|
45
|
+
this.renderer.setAttribute(this._fileInput, 'webkitdirectory', 'true');
|
|
46
|
+
this.renderer.setAttribute(this._fileInput, 'directory', 'true');
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/***************************************************************************
|
|
50
|
+
* *
|
|
51
|
+
* Public API *
|
|
52
|
+
* *
|
|
53
|
+
**************************************************************************/
|
|
54
|
+
/**
|
|
55
|
+
* <input type="file"
|
|
56
|
+
* hidden #fileInput
|
|
57
|
+
* [multiple]="multiple"
|
|
58
|
+
* [accept]="accept"
|
|
59
|
+
* (change)="fileInputChanged()"
|
|
60
|
+
* />
|
|
61
|
+
*/
|
|
62
|
+
createFileSelect() {
|
|
63
|
+
this._fileInput = this.renderer.createElement('input');
|
|
64
|
+
this.renderer.setAttribute(this._fileInput, 'hidden', 'true');
|
|
65
|
+
this.renderer.setAttribute(this._fileInput, 'type', 'file');
|
|
66
|
+
this.renderer.appendChild(this.el.nativeElement, this._fileInput);
|
|
67
|
+
if (this._accept) {
|
|
68
|
+
this.renderer.setProperty(this._fileInput, 'accept', this._accept);
|
|
69
|
+
}
|
|
70
|
+
if (this._multiple) {
|
|
71
|
+
this.renderer.setProperty(this._fileInput, 'multiple', this._multiple);
|
|
72
|
+
}
|
|
73
|
+
if (this._directory) {
|
|
74
|
+
this.renderer.setAttribute(this._fileInput, 'webkitdirectory', 'true');
|
|
75
|
+
this.renderer.setAttribute(this._fileInput, 'directory', 'true');
|
|
76
|
+
}
|
|
77
|
+
this._unlisten = this.renderer.listen(this._fileInput, 'change', event => {
|
|
78
|
+
this.fileInputChanged(this._fileInput.files);
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
removeFileSelect() {
|
|
82
|
+
if (this._unlisten) {
|
|
83
|
+
this._unlisten();
|
|
84
|
+
this._unlisten = null;
|
|
85
|
+
}
|
|
86
|
+
if (this._fileInput) {
|
|
87
|
+
this.renderer.removeChild(this.el.nativeElement, this._fileInput);
|
|
88
|
+
this._fileInput = null;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
openFileSelectDialog() {
|
|
92
|
+
this._fileInput.click();
|
|
93
|
+
}
|
|
94
|
+
/***************************************************************************
|
|
95
|
+
* *
|
|
96
|
+
* Private methods *
|
|
97
|
+
* *
|
|
98
|
+
**************************************************************************/
|
|
99
|
+
fileInputChanged(fileList) {
|
|
100
|
+
const files = this.toFileEntries(fileList);
|
|
101
|
+
this.logger.debug('fileInputChanged, files:', files);
|
|
102
|
+
this.clearFileList();
|
|
103
|
+
this._filesSelected.next(files);
|
|
104
|
+
}
|
|
105
|
+
clearFileList() {
|
|
106
|
+
// not nice but works
|
|
107
|
+
this._fileInput.value = null;
|
|
108
|
+
}
|
|
109
|
+
toFileEntries(fileList) {
|
|
110
|
+
const files = [];
|
|
111
|
+
for (const key in fileList) {
|
|
112
|
+
if (!isNaN(parseInt(key, 0))) {
|
|
113
|
+
files.push(FileEntry.ofFile(fileList[key]));
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
return files;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxkZXItZmlsZS1zZWxlY3QtaW5wdXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbGRlcmJ5dGUvbmd4LXN0YXJ0ZXIvc3JjL2xpYi9jb21wb25lbnRzL2ZpbGVzL2VsZGVyLWZpbGUtc2VsZWN0LWlucHV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUUvQyxPQUFPLEVBQWUscUJBQXFCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxFQUFhLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUd6QyxNQUFNLE9BQU8sb0JBQW9CO0lBcUIvQjs7OztnRkFJNEU7SUFFNUUsWUFDVSxRQUFtQixFQUNuQixFQUFjO1FBRGQsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQixPQUFFLEdBQUYsRUFBRSxDQUFZO1FBMUJ4Qjs7OztvRkFJNEU7UUFFM0QsV0FBTSxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQVN4RCxtQkFBYyxHQUFHLElBQUksT0FBb0IsQ0FBQztJQWEzRCxDQUFDO0lBRUQ7Ozs7Z0ZBSTRFO0lBRTVFLElBQVcsYUFBYTtRQUN0QixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQVcsZUFBZSxDQUFDLEtBQWE7UUFDdEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDckIsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDOUQsQ0FBQztJQUNILENBQUM7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Q0FBQyxVQUFVLENBQUMsQ0FBQztZQUNsRSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUN6QixDQUFDO0lBQ0gsQ0FBQztJQUVNLG9CQUFvQjtRQUN6QixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFHRDs7OztnRkFJNEU7SUFHcEUsZ0JBQWdCLENBQUMsUUFBa0I7UUFDekMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQywwQkFBMEIsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVPLGFBQWE7UUFDbkIscUJBQXFCO1FBQ3JCLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztJQUMvQixDQUFDO0lBRU8sYUFBYSxDQUFDLFFBQWtCO1FBQ3RDLE1BQU0sS0FBSyxHQUFnQixFQUFFLENBQUM7UUFDOUIsS0FBSyxNQUFNLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUM3QixLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM5QyxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztDQUlGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtGaWxlRW50cnl9IGZyb20gJy4vbGlzdGluZy9maWxlLWVudHJ5JztcbmltcG9ydCB7RWxlbWVudFJlZiwgUmVuZGVyZXIyfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Qm9vbGVhbklucHV0LCBjb2VyY2VCb29sZWFuUHJvcGVydHl9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQge0xvZ2dlckZhY3Rvcnl9IGZyb20gJ0BlbGRlcmJ5dGUvdHMtbG9nZ2VyJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgU3ViamVjdH0gZnJvbSAncnhqcyc7XG5cblxuZXhwb3J0IGNsYXNzIEVsZGVyRmlsZVNlbGVjdElucHV0IHtcblxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBGaWVsZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIodGhpcy5jb25zdHJ1Y3Rvci5uYW1lKTtcblxuICBwcml2YXRlIF9maWxlSW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQ7XG4gIHByaXZhdGUgX3VubGlzdGVuOiAoKSA9PiB2b2lkO1xuXG4gIHByaXZhdGUgX211bHRpcGxlOiBib29sZWFuO1xuICBwcml2YXRlIF9kaXJlY3Rvcnk6IGJvb2xlYW47XG4gIHByaXZhdGUgX2FjY2VwdDogc3RyaW5nO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZpbGVzU2VsZWN0ZWQgPSBuZXcgU3ViamVjdDxGaWxlRW50cnlbXT47XG5cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogQ29uc3RydWN0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHJpdmF0ZSBlbDogRWxlbWVudFJlZlxuICApIHtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQcm9wZXJ0aWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHB1YmxpYyBnZXQgZmlsZXNTZWxlY3RlZCgpOiBPYnNlcnZhYmxlPEZpbGVFbnRyeVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbGVzU2VsZWN0ZWQ7XG4gIH1cblxuICBwdWJsaWMgc2V0IGVsZGVyRmlsZVNlbGVjdCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fYWNjZXB0ID0gdmFsdWU7XG4gICAgaWYgKHRoaXMuX2ZpbGVJbnB1dCkge1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9maWxlSW5wdXQsICdhY2NlcHQnLCB2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNldCBlbGRlckZpbGVTZWxlY3RNdWx0aXBsZSh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgdGhpcy5fbXVsdGlwbGUgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIGlmICh0aGlzLl9maWxlSW5wdXQpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZmlsZUlucHV0LCAnbXVsdGlwbGUnLCB2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNldCBlbGRlckZpbGVTZWxlY3REaXJlY3RvcnkodmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgIHRoaXMuX2RpcmVjdG9yeSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgaWYgKHRoaXMuX2ZpbGVJbnB1dCkge1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5fZmlsZUlucHV0LCAnd2Via2l0ZGlyZWN0b3J5JywgJ3RydWUnKTtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuX2ZpbGVJbnB1dCwgJ2RpcmVjdG9yeScsICd0cnVlJyk7XG4gICAgfVxuICB9XG5cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHVibGljIEFQSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAvKipcbiAgICogPGlucHV0IHR5cGU9XCJmaWxlXCJcbiAgICogICAgIGhpZGRlbiAjZmlsZUlucHV0XG4gICAqICAgICBbbXVsdGlwbGVdPVwibXVsdGlwbGVcIlxuICAgKiAgICAgW2FjY2VwdF09XCJhY2NlcHRcIlxuICAgKiAgICAgKGNoYW5nZSk9XCJmaWxlSW5wdXRDaGFuZ2VkKClcIlxuICAgKiAvPlxuICAgKi9cbiAgcHVibGljIGNyZWF0ZUZpbGVTZWxlY3QoKTogdm9pZCB7XG5cbiAgICB0aGlzLl9maWxlSW5wdXQgPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5fZmlsZUlucHV0LCAnaGlkZGVuJywgJ3RydWUnKTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLl9maWxlSW5wdXQsICd0eXBlJywgJ2ZpbGUnKTtcbiAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHRoaXMuZWwubmF0aXZlRWxlbWVudCwgdGhpcy5fZmlsZUlucHV0KTtcblxuICAgIGlmICh0aGlzLl9hY2NlcHQpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZmlsZUlucHV0LCAnYWNjZXB0JywgdGhpcy5fYWNjZXB0KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX211bHRpcGxlKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2ZpbGVJbnB1dCwgJ211bHRpcGxlJywgdGhpcy5fbXVsdGlwbGUpO1xuICAgIH1cbiAgICBpZiAodGhpcy5fZGlyZWN0b3J5KSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLl9maWxlSW5wdXQsICd3ZWJraXRkaXJlY3RvcnknLCAndHJ1ZScpO1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5fZmlsZUlucHV0LCAnZGlyZWN0b3J5JywgJ3RydWUnKTtcbiAgICB9XG5cbiAgICB0aGlzLl91bmxpc3RlbiA9IHRoaXMucmVuZGVyZXIubGlzdGVuKFxuICAgICAgdGhpcy5fZmlsZUlucHV0LFxuICAgICAgJ2NoYW5nZScsXG4gICAgICBldmVudCA9PiB7XG4gICAgICAgIHRoaXMuZmlsZUlucHV0Q2hhbmdlZCh0aGlzLl9maWxlSW5wdXQuZmlsZXMpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlRmlsZVNlbGVjdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fdW5saXN0ZW4pIHtcbiAgICAgIHRoaXMuX3VubGlzdGVuKCk7XG4gICAgICB0aGlzLl91bmxpc3RlbiA9IG51bGw7XG4gICAgfVxuICAgIGlmICh0aGlzLl9maWxlSW5wdXQpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2hpbGQodGhpcy5lbC5uYXRpdmVFbGVtZW50LCB0aGlzLl9maWxlSW5wdXQpO1xuICAgICAgdGhpcy5fZmlsZUlucHV0ID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb3BlbkZpbGVTZWxlY3REaWFsb2coKTogdm9pZCB7XG4gICAgdGhpcy5fZmlsZUlucHV0LmNsaWNrKCk7XG4gIH1cblxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQcml2YXRlIG1ldGhvZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5cbiAgcHJpdmF0ZSBmaWxlSW5wdXRDaGFuZ2VkKGZpbGVMaXN0OiBGaWxlTGlzdCk6IHZvaWQge1xuICAgIGNvbnN0IGZpbGVzID0gdGhpcy50b0ZpbGVFbnRyaWVzKGZpbGVMaXN0KTtcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnZmlsZUlucHV0Q2hhbmdlZCwgZmlsZXM6JywgZmlsZXMpO1xuICAgIHRoaXMuY2xlYXJGaWxlTGlzdCgpO1xuICAgIHRoaXMuX2ZpbGVzU2VsZWN0ZWQubmV4dChmaWxlcyk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFyRmlsZUxpc3QoKSB7XG4gICAgLy8gbm90IG5pY2UgYnV0IHdvcmtzXG4gICAgdGhpcy5fZmlsZUlucHV0LnZhbHVlID0gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgdG9GaWxlRW50cmllcyhmaWxlTGlzdDogRmlsZUxpc3QpOiBGaWxlRW50cnlbXSB7XG4gICAgY29uc3QgZmlsZXM6IEZpbGVFbnRyeVtdID0gW107XG4gICAgZm9yIChjb25zdCBrZXkgaW4gZmlsZUxpc3QpIHtcbiAgICAgIGlmICghaXNOYU4ocGFyc2VJbnQoa2V5LCAwKSkpIHtcbiAgICAgICAgZmlsZXMucHVzaChGaWxlRW50cnkub2ZGaWxlKGZpbGVMaXN0W2tleV0pKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZpbGVzO1xuICB9XG5cblxuXG59XG4iXX0=
|
|
@@ -2,6 +2,11 @@ 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';
|
|
5
10
|
import * as i0 from "@angular/core";
|
|
6
11
|
export class ElderFileSelectDirective {
|
|
7
12
|
/***************************************************************************
|
|
@@ -9,9 +14,10 @@ export class ElderFileSelectDirective {
|
|
|
9
14
|
* Constructor *
|
|
10
15
|
* *
|
|
11
16
|
**************************************************************************/
|
|
12
|
-
constructor(el,
|
|
13
|
-
this.el = el;
|
|
17
|
+
constructor(renderer, el, destroyRef) {
|
|
14
18
|
this.renderer = renderer;
|
|
19
|
+
this.el = el;
|
|
20
|
+
this.destroyRef = destroyRef;
|
|
15
21
|
/***************************************************************************
|
|
16
22
|
* *
|
|
17
23
|
* Fields *
|
|
@@ -20,6 +26,8 @@ export class ElderFileSelectDirective {
|
|
|
20
26
|
this.logger = LoggerFactory.getLogger(this.constructor.name);
|
|
21
27
|
this.elderFileSelectChange = new EventEmitter();
|
|
22
28
|
this.elderSingleFileSelectChange = new EventEmitter();
|
|
29
|
+
this._useDirectoryPicker = false;
|
|
30
|
+
this._legacyInput = new ElderFileSelectInput(this.renderer, this.el);
|
|
23
31
|
}
|
|
24
32
|
/***************************************************************************
|
|
25
33
|
* *
|
|
@@ -27,10 +35,16 @@ export class ElderFileSelectDirective {
|
|
|
27
35
|
* *
|
|
28
36
|
**************************************************************************/
|
|
29
37
|
ngOnInit() {
|
|
30
|
-
|
|
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
|
+
}
|
|
31
45
|
}
|
|
32
46
|
ngOnDestroy() {
|
|
33
|
-
this.removeFileSelect();
|
|
47
|
+
this._legacyInput.removeFileSelect();
|
|
34
48
|
}
|
|
35
49
|
/***************************************************************************
|
|
36
50
|
* *
|
|
@@ -38,16 +52,49 @@ export class ElderFileSelectDirective {
|
|
|
38
52
|
* *
|
|
39
53
|
**************************************************************************/
|
|
40
54
|
set elderFileSelect(value) {
|
|
41
|
-
this.
|
|
42
|
-
|
|
43
|
-
this.
|
|
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
|
+
};
|
|
44
73
|
}
|
|
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);
|
|
45
88
|
}
|
|
46
89
|
set elderFileSelectMultiple(value) {
|
|
47
|
-
this.
|
|
48
|
-
|
|
49
|
-
this.
|
|
50
|
-
|
|
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;
|
|
51
98
|
}
|
|
52
99
|
/**
|
|
53
100
|
* Allow the user to select a directory. All files that are recursively contained are selected.
|
|
@@ -55,11 +102,8 @@ export class ElderFileSelectDirective {
|
|
|
55
102
|
* @param value
|
|
56
103
|
*/
|
|
57
104
|
set elderFileSelectDirectory(value) {
|
|
58
|
-
this.
|
|
59
|
-
|
|
60
|
-
this.renderer.setAttribute(this._fileInput, 'webkitdirectory', 'true');
|
|
61
|
-
this.renderer.setAttribute(this._fileInput, 'directory', 'true');
|
|
62
|
-
}
|
|
105
|
+
this._useDirectoryPicker = coerceBooleanProperty(value);
|
|
106
|
+
this._legacyInput.elderFileSelectDirectory = value;
|
|
63
107
|
}
|
|
64
108
|
/***************************************************************************
|
|
65
109
|
* *
|
|
@@ -67,81 +111,39 @@ export class ElderFileSelectDirective {
|
|
|
67
111
|
* *
|
|
68
112
|
**************************************************************************/
|
|
69
113
|
onClick(event) {
|
|
70
|
-
this.
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
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
|
+
}
|
|
74
127
|
}
|
|
75
128
|
/***************************************************************************
|
|
76
129
|
* *
|
|
77
130
|
* Private methods *
|
|
78
131
|
* *
|
|
79
132
|
**************************************************************************/
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
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;
|
|
133
|
+
pushFileChanges(multiFileChange) {
|
|
134
|
+
this.elderFileSelectChange.next(multiFileChange);
|
|
135
|
+
const file = multiFileChange[0]?.file;
|
|
136
|
+
if (file) {
|
|
137
|
+
this.elderSingleFileSelectChange.next(file);
|
|
113
138
|
}
|
|
114
139
|
}
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
const files = this.toFileEntries(fileList);
|
|
118
|
-
this.logger.debug('fileInputChanged, files:', files);
|
|
119
|
-
this.emitFileList(files);
|
|
120
|
-
this.clearFileList();
|
|
140
|
+
openFilePicker(pickerOpts) {
|
|
141
|
+
return FileSystemApi.openFilePicker(pickerOpts).pipe(switchMap(files => combineLatest(files.map(file => FileEntry.ofFileHandle(file)))));
|
|
121
142
|
}
|
|
122
|
-
|
|
123
|
-
|
|
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;
|
|
143
|
+
openDirectoryPicker(pickerOpts) {
|
|
144
|
+
return FileSystemApi.openDirectoryPicker(pickerOpts).pipe(switchMap(dir => FileListingSystemHandle.listFiles(dir)));
|
|
143
145
|
}
|
|
144
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: ElderFileSelectDirective, deps: [{ token: i0.ElementRef }, { token: i0.
|
|
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 }); }
|
|
145
147
|
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 }); }
|
|
146
148
|
}
|
|
147
149
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: ElderFileSelectDirective, decorators: [{
|
|
@@ -150,7 +152,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImpor
|
|
|
150
152
|
selector: '[elderFileSelect]',
|
|
151
153
|
standalone: true
|
|
152
154
|
}]
|
|
153
|
-
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.
|
|
155
|
+
}], ctorParameters: () => [{ type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i0.DestroyRef }], propDecorators: { elderFileSelectChange: [{
|
|
154
156
|
type: Output
|
|
155
157
|
}], elderSingleFileSelectChange: [{
|
|
156
158
|
type: Output
|
|
@@ -164,4 +166,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImpor
|
|
|
164
166
|
type: HostListener,
|
|
165
167
|
args: ['click', ['$event']]
|
|
166
168
|
}] } });
|
|
167
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxkZXItZmlsZS1zZWxlY3QuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWxkZXJieXRlL25neC1zdGFydGVyL3NyYy9saWIvY29tcG9uZW50cy9maWxlcy9lbGRlci1maWxlLXNlbGVjdC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBRVAsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBZSxxQkFBcUIsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQzFFLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQzs7QUFNL0MsTUFBTSxPQUFPLHdCQUF3QjtJQXVCbkM7Ozs7Z0ZBSTRFO0lBRTVFLFlBQ1UsRUFBYyxFQUNkLFFBQW1CO1FBRG5CLE9BQUUsR0FBRixFQUFFLENBQVk7UUFDZCxhQUFRLEdBQVIsUUFBUSxDQUFXO1FBN0I3Qjs7OztvRkFJNEU7UUFFM0QsV0FBTSxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQU16RCwwQkFBcUIsR0FBRyxJQUFJLFlBQVksRUFBZSxDQUFDO1FBR3hELGdDQUEyQixHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7SUFnQnZFLENBQUM7SUFFRDs7OztnRkFJNEU7SUFFckUsUUFBUTtRQUNiLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFTSxXQUFXO1FBQ2hCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRDs7OztnRkFJNEU7SUFFNUUsSUFDVyxlQUFlLENBQUMsS0FBYTtRQUN0QyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNyQixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM5RCxDQUFDO0lBQ0gsQ0FBQztJQUVELElBQ1csdUJBQXVCLENBQUMsS0FBbUI7UUFDcEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNoRSxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxJQUNXLHdCQUF3QixDQUFDLEtBQW1CO1FBQ3JELElBQUksQ0FBQyxVQUFVLEdBQUcscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0MsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUN2RSxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNuRSxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7O2dGQUk0RTtJQUdyRSxPQUFPLENBQUMsS0FBVTtRQUN2QixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRU0sb0JBQW9CO1FBQ3pCLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVEOzs7O2dGQUk0RTtJQUU1RTs7Ozs7OztPQU9HO0lBQ0ssZ0JBQWdCO1FBRXRCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRWxFLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyRSxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3pFLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ3ZFLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ25FLENBQUM7UUFFRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUNuQyxJQUFJLENBQUMsVUFBVSxFQUNmLFFBQVEsRUFDUixLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FDdEMsQ0FBQztJQUNKLENBQUM7SUFFTyxnQkFBZ0I7UUFDdEIsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDbEUsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDekIsQ0FBQztJQUNILENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxLQUFVO1FBQ2pDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDO1FBQ3ZDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsMEJBQTBCLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVPLGFBQWE7UUFDbkIscUJBQXFCO1FBQ3JCLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztJQUMvQixDQUFDO0lBRU8sWUFBWSxDQUFDLEtBQWtCO1FBQ3JDLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3ZDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQ25DLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ2QsQ0FBQztRQUNKLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsdURBQXVELENBQUMsQ0FBQztRQUM1RSxDQUFDO0lBQ0gsQ0FBQztJQUVPLGFBQWEsQ0FBQyxRQUFrQjtRQUN0QyxNQUFNLEtBQUssR0FBZ0IsRUFBRSxDQUFDO1FBQzlCLEtBQUssTUFBTSxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDN0IsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDOUMsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7OEdBdExVLHdCQUF3QjtrR0FBeEIsd0JBQXdCOzsyRkFBeEIsd0JBQXdCO2tCQUpwQyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxtQkFBbUI7b0JBQzdCLFVBQVUsRUFBRSxJQUFJO2lCQUNuQjt1R0FlaUIscUJBQXFCO3NCQURwQyxNQUFNO2dCQUlTLDJCQUEyQjtzQkFEMUMsTUFBTTtnQkF3Q0ksZUFBZTtzQkFEekIsS0FBSztnQkFTSyx1QkFBdUI7c0JBRGpDLEtBQUs7Z0JBY0ssd0JBQXdCO3NCQURsQyxLQUFLO2dCQWdCQyxPQUFPO3NCQURiLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFJlbmRlcmVyMlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TG9nZ2VyRmFjdG9yeX0gZnJvbSAnQGVsZGVyYnl0ZS90cy1sb2dnZXInO1xuaW1wb3J0IHtCb29sZWFuSW5wdXQsIGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eX0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7RmlsZUVudHJ5fSBmcm9tICcuL2xpc3RpbmcvZmlsZS1lbnRyeSc7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW2VsZGVyRmlsZVNlbGVjdF0nLFxuICAgIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgRWxkZXJGaWxlU2VsZWN0RGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBGaWVsZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIodGhpcy5jb25zdHJ1Y3Rvci5uYW1lKTtcblxuICBwcml2YXRlIF9maWxlSW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQ7XG4gIHByaXZhdGUgX3VubGlzdGVuOiAoKSA9PiB2b2lkO1xuXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgcmVhZG9ubHkgZWxkZXJGaWxlU2VsZWN0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxGaWxlRW50cnlbXT4oKTtcblxuICBAT3V0cHV0KClcbiAgcHVibGljIHJlYWRvbmx5IGVsZGVyU2luZ2xlRmlsZVNlbGVjdENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsZT4oKTtcblxuICBwcml2YXRlIF9tdWx0aXBsZTogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfZGlyZWN0b3J5OiBib29sZWFuO1xuICBwcml2YXRlIF9hY2NlcHQ6IHN0cmluZztcblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogQ29uc3RydWN0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGVsOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMlxuICApIHtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBMaWZlIEN5Y2xlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmNyZWF0ZUZpbGVTZWxlY3QoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnJlbW92ZUZpbGVTZWxlY3QoKTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQcm9wZXJ0aWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZWxkZXJGaWxlU2VsZWN0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9hY2NlcHQgPSB2YWx1ZTtcbiAgICBpZiAodGhpcy5fZmlsZUlucHV0KSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2ZpbGVJbnB1dCwgJ2FjY2VwdCcsIHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGVsZGVyRmlsZVNlbGVjdE11bHRpcGxlKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICB0aGlzLl9tdWx0aXBsZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgaWYgKHRoaXMuX2ZpbGVJbnB1dCkge1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9maWxlSW5wdXQsICdtdWx0aXBsZScsIHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWxsb3cgdGhlIHVzZXIgdG8gc2VsZWN0IGEgZGlyZWN0b3J5LiBBbGwgZmlsZXMgdGhhdCBhcmUgcmVjdXJzaXZlbHkgY29udGFpbmVkIGFyZSBzZWxlY3RlZC5cbiAgICogSG93ZXZlciwgdGhlIHVzZXIgd2lsbCBubyBsb25nZXIgYmUgYWJsZSB0byBzZWxlY3QgaW5kaXZpZHVhbCBmaWxlcyBpZiB0aGlzIGlzIGVuYWJsZWQuXG4gICAqIEBwYXJhbSB2YWx1ZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBlbGRlckZpbGVTZWxlY3REaXJlY3RvcnkodmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgIHRoaXMuX2RpcmVjdG9yeSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgaWYgKHRoaXMuX2ZpbGVJbnB1dCkge1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5fZmlsZUlucHV0LCAnd2Via2l0ZGlyZWN0b3J5JywgJ3RydWUnKTtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuX2ZpbGVJbnB1dCwgJ2RpcmVjdG9yeScsICd0cnVlJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFB1YmxpYyBBUEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKVxuICBwdWJsaWMgb25DbGljayhldmVudDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vcGVuRmlsZVNlbGVjdERpYWxvZygpO1xuICB9XG5cbiAgcHVibGljIG9wZW5GaWxlU2VsZWN0RGlhbG9nKCk6IHZvaWQge1xuICAgIHRoaXMuX2ZpbGVJbnB1dC5jbGljaygpO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFByaXZhdGUgbWV0aG9kcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgLyoqXG4gICAqIDxpbnB1dCB0eXBlPVwiZmlsZVwiXG4gICAqICAgICBoaWRkZW4gI2ZpbGVJbnB1dFxuICAgKiAgICAgW211bHRpcGxlXT1cIm11bHRpcGxlXCJcbiAgICogICAgIFthY2NlcHRdPVwiYWNjZXB0XCJcbiAgICogICAgIChjaGFuZ2UpPVwiZmlsZUlucHV0Q2hhbmdlZCgpXCJcbiAgICogLz5cbiAgICovXG4gIHByaXZhdGUgY3JlYXRlRmlsZVNlbGVjdCgpOiB2b2lkIHtcblxuICAgIHRoaXMuX2ZpbGVJbnB1dCA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLl9maWxlSW5wdXQsICdoaWRkZW4nLCAndHJ1ZScpO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuX2ZpbGVJbnB1dCwgJ3R5cGUnLCAnZmlsZScpO1xuICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy5lbC5uYXRpdmVFbGVtZW50LCB0aGlzLl9maWxlSW5wdXQpO1xuXG4gICAgaWYgKHRoaXMuX2FjY2VwdCkge1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9maWxlSW5wdXQsICdhY2NlcHQnLCB0aGlzLl9hY2NlcHQpO1xuICAgIH1cbiAgICBpZiAodGhpcy5fbXVsdGlwbGUpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZmlsZUlucHV0LCAnbXVsdGlwbGUnLCB0aGlzLl9tdWx0aXBsZSk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9kaXJlY3RvcnkpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuX2ZpbGVJbnB1dCwgJ3dlYmtpdGRpcmVjdG9yeScsICd0cnVlJyk7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLl9maWxlSW5wdXQsICdkaXJlY3RvcnknLCAndHJ1ZScpO1xuICAgIH1cblxuICAgIHRoaXMuX3VubGlzdGVuID0gdGhpcy5yZW5kZXJlci5saXN0ZW4oXG4gICAgICB0aGlzLl9maWxlSW5wdXQsXG4gICAgICAnY2hhbmdlJyxcbiAgICAgIGV2ZW50ID0+IHRoaXMuZmlsZUlucHV0Q2hhbmdlZChldmVudClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVGaWxlU2VsZWN0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl91bmxpc3Rlbikge1xuICAgICAgdGhpcy5fdW5saXN0ZW4oKTtcbiAgICAgIHRoaXMuX3VubGlzdGVuID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2ZpbGVJbnB1dCkge1xuICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDaGlsZCh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIHRoaXMuX2ZpbGVJbnB1dCk7XG4gICAgICB0aGlzLl9maWxlSW5wdXQgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZmlsZUlucHV0Q2hhbmdlZChldmVudDogYW55KTogdm9pZCB7XG4gICAgY29uc3QgZmlsZUxpc3QgPSB0aGlzLl9maWxlSW5wdXQuZmlsZXM7XG4gICAgY29uc3QgZmlsZXMgPSB0aGlzLnRvRmlsZUVudHJpZXMoZmlsZUxpc3QpO1xuICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdmaWxlSW5wdXRDaGFuZ2VkLCBmaWxlczonLCBmaWxlcyk7XG4gICAgdGhpcy5lbWl0RmlsZUxpc3QoZmlsZXMpO1xuICAgIHRoaXMuY2xlYXJGaWxlTGlzdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhckZpbGVMaXN0KCkge1xuICAgIC8vIG5vdCBuaWNlIGJ1dCB3b3Jrc1xuICAgIHRoaXMuX2ZpbGVJbnB1dC52YWx1ZSA9IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGVtaXRGaWxlTGlzdChmaWxlczogRmlsZUVudHJ5W10pOiB2b2lkIHtcbiAgICBpZiAoZmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5lbGRlckZpbGVTZWxlY3RDaGFuZ2UubmV4dChmaWxlcyk7XG4gICAgICB0aGlzLmVsZGVyU2luZ2xlRmlsZVNlbGVjdENoYW5nZS5lbWl0KFxuICAgICAgICBmaWxlc1swXS5maWxlXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvZ2dlci53YXJuKCdVc2VyIGRpZCBub3Qgc2VsZWN0IGFueSBGaWxlIG9yIHRoZSBGb2xkZXIgd2FzIGVtcHR5LicpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdG9GaWxlRW50cmllcyhmaWxlTGlzdDogRmlsZUxpc3QpOiBGaWxlRW50cnlbXSB7XG4gICAgY29uc3QgZmlsZXM6IEZpbGVFbnRyeVtdID0gW107XG4gICAgZm9yIChjb25zdCBrZXkgaW4gZmlsZUxpc3QpIHtcbiAgICAgIGlmICghaXNOYU4ocGFyc2VJbnQoa2V5LCAwKSkpIHtcbiAgICAgICAgZmlsZXMucHVzaChGaWxlRW50cnkub2ZGaWxlKGZpbGVMaXN0W2tleV0pKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZpbGVzO1xuICB9XG5cbn1cbiJdfQ==
|
|
169
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxkZXItZmlsZS1zZWxlY3QuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWxkZXJieXRlL25neC1zdGFydGVyL3NyYy9saWIvY29tcG9uZW50cy9maWxlcy9lbGRlci1maWxlLXNlbGVjdC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBZSxxQkFBcUIsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQzFFLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUMvQyxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUMvRCxPQUFPLEVBQ0wsYUFBYSxFQUlkLE1BQU0sbUJBQW1CLENBQUM7QUFDM0IsT0FBTyxFQUFDLGFBQWEsRUFBYyxTQUFTLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDMUQsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sc0NBQXNDLENBQUM7QUFDN0UsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7O0FBTzlELE1BQU0sT0FBTyx3QkFBd0I7SUFxQm5DOzs7O2dGQUk0RTtJQUU1RSxZQUNVLFFBQW1CLEVBQ25CLEVBQWMsRUFDZCxVQUFzQjtRQUZ0QixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ25CLE9BQUUsR0FBRixFQUFFLENBQVk7UUFDZCxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBNUJoQzs7OztvRkFJNEU7UUFFM0QsV0FBTSxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUd6RCwwQkFBcUIsR0FBRyxJQUFJLFlBQVksRUFBZSxDQUFDO1FBR3hELGdDQUEyQixHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFLL0Qsd0JBQW1CLEdBQVksS0FBSyxDQUFDO1FBYTNDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRUQ7Ozs7Z0ZBSTRFO0lBRXJFLFFBQVE7UUFDYixJQUFJLENBQUMsYUFBYSxDQUFDLHFCQUFxQixFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsMEJBQTBCLEVBQUUsRUFBRSxDQUFDO1lBQzFGLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGlIQUFpSCxDQUFDLENBQUM7WUFDcEksSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3JDLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDbEMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUNwQyxDQUFDLFNBQVMsQ0FBQztnQkFDVixJQUFJLEVBQUUsZUFBZSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQzthQUMvRCxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUVNLFdBQVc7UUFDaEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7OztnRkFJNEU7SUFFNUUsSUFDVyxlQUFlLENBQUMsS0FBYTtRQUV0QyxJQUFJLENBQUMsa0JBQWtCLEdBQUc7WUFDeEIsdUJBQXVCLEVBQUUsSUFBSTtZQUM3QixFQUFFLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixFQUFFLEVBQUU7WUFDL0IsUUFBUSxFQUFFLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxRQUFRO1lBQzNDLE9BQU8sRUFBRSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsT0FBTztZQUN6QyxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3JDLENBQUM7UUFFRixJQUFJLENBQUMsWUFBWSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7SUFDNUMsQ0FBQztJQUVPLGVBQWUsQ0FBQyxLQUFhO1FBQ25DLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2hDLE9BQU87Z0JBQ0wsTUFBTSxFQUFFO29CQUNOLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFO3lCQUNoQixPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQzt5QkFDbkIsS0FBSyxDQUFDLEdBQUcsQ0FBQztpQkFDZDthQUNGLENBQUM7UUFDSixDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDbEMsT0FBTztnQkFDTCxNQUFNLEVBQUUsRUFBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFBQzthQUN0QixDQUFDO1FBQ0osQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVPLGVBQWUsQ0FBQyxLQUFhO1FBQ25DLE1BQU0sS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDakQsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFTyxVQUFVLENBQUMsS0FBYTtRQUM5QixNQUFNLEtBQUssR0FBRyxJQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNyQyxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUdELElBQ1csdUJBQXVCLENBQUMsS0FBbUI7UUFFcEQsSUFBSSxDQUFDLGtCQUFrQixHQUFHO1lBQ3hCLHVCQUF1QixFQUFFLElBQUksQ0FBQyxrQkFBa0IsRUFBRSx1QkFBdUI7WUFDekUsRUFBRSxFQUFFLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxFQUFFO1lBQy9CLFFBQVEsRUFBRSxxQkFBcUIsQ0FBQyxLQUFLLENBQUM7WUFDdEMsT0FBTyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxPQUFPO1lBQ3pDLEtBQUssRUFBRSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsS0FBSztTQUN0QyxDQUFDO1FBRUYsSUFBSSxDQUFDLFlBQVksQ0FBQyx1QkFBdUIsR0FBRyxLQUFLLENBQUM7SUFDcEQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxJQUNXLHdCQUF3QixDQUFDLEtBQW1CO1FBQ3JELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMsWUFBWSxDQUFDLHdCQUF3QixHQUFHLEtBQUssQ0FBQztJQUNyRCxDQUFDO0lBRUQ7Ozs7Z0ZBSTRFO0lBR3JFLE9BQU8sQ0FBQyxLQUFVO1FBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLElBQUksYUFBYSxDQUFDLHFCQUFxQixFQUFFLEVBQUUsQ0FBQztZQUN2RSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQztnQkFDckQsSUFBSSxFQUFFLGVBQWUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUM7YUFDL0QsQ0FBQyxDQUFDO1FBQ0wsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLG1CQUFtQixJQUFJLGFBQWEsQ0FBQywwQkFBMEIsRUFBRSxFQUFFLENBQUM7WUFDbEYsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLFNBQVMsQ0FBQztnQkFDL0QsSUFBSSxFQUFFLGVBQWUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUM7YUFDL0QsQ0FBQyxDQUFDO1FBQ0wsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsWUFBWSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDM0MsQ0FBQztJQUNILENBQUM7SUFFRDs7OztnRkFJNEU7SUFFcEUsZUFBZSxDQUFDLGVBQTRCO1FBQ2xELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDakQsTUFBTSxJQUFJLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQztRQUN0QyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ1QsSUFBSSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QyxDQUFDO0lBQ0gsQ0FBQztJQUVNLGNBQWMsQ0FBQyxVQUF1QztRQUMzRCxPQUFPLGFBQWEsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUNsRCxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FDaEIsYUFBYSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FDL0QsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVNLG1CQUFtQixDQUFDLFVBQTRDO1FBQ3JFLE9BQU8sYUFBYSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FDdkQsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsdUJBQXVCLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQ3pELENBQUM7SUFDSixDQUFDOzhHQWpMVSx3QkFBd0I7a0dBQXhCLHdCQUF3Qjs7MkZBQXhCLHdCQUF3QjtrQkFKcEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsbUJBQW1CO29CQUM3QixVQUFVLEVBQUUsSUFBSTtpQkFDakI7Z0lBWWlCLHFCQUFxQjtzQkFEcEMsTUFBTTtnQkFJUywyQkFBMkI7c0JBRDFDLE1BQU07Z0JBbURJLGVBQWU7c0JBRHpCLEtBQUs7Z0JBMkNLLHVCQUF1QjtzQkFEakMsS0FBSztnQkFvQkssd0JBQXdCO3NCQURsQyxLQUFLO2dCQWFDLE9BQU87c0JBRGIsWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBEZXN0cm95UmVmLFxuICBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCwgUmVuZGVyZXIyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtMb2dnZXJGYWN0b3J5fSBmcm9tICdAZWxkZXJieXRlL3RzLWxvZ2dlcic7XG5pbXBvcnQge0Jvb2xlYW5JbnB1dCwgY29lcmNlQm9vbGVhblByb3BlcnR5fSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHtGaWxlRW50cnl9IGZyb20gJy4vbGlzdGluZy9maWxlLWVudHJ5JztcbmltcG9ydCB7RWxkZXJGaWxlU2VsZWN0SW5wdXR9IGZyb20gJy4vZWxkZXItZmlsZS1zZWxlY3QtaW5wdXQnO1xuaW1wb3J0IHtcbiAgRmlsZVN5c3RlbUFwaSxcbiAgRmlsZVN5c3RlbURpcmVjdG9yeVBpY2tlck9wdGlvbnMsXG4gIEZpbGVTeXN0ZW1GaWxlUGlja2VyT3B0aW9ucyxcbiAgRmlsZVN5c3RlbUZpbGVQaWNrZXJUeXBlT3B0aW9uc1xufSBmcm9tICcuL2ZpbGUtc3lzdGVtLWFwaSc7XG5pbXBvcnQge2NvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIHN3aXRjaE1hcH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0ZpbGVMaXN0aW5nU3lzdGVtSGFuZGxlfSBmcm9tICcuL2xpc3RpbmcvZmlsZS1saXN0aW5nLXN5c3RlbS1oYW5kbGUnO1xuaW1wb3J0IHt0YWtlVW50aWxEZXN0cm95ZWR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcblxuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbZWxkZXJGaWxlU2VsZWN0XScsXG4gIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgRWxkZXJGaWxlU2VsZWN0RGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBGaWVsZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIodGhpcy5jb25zdHJ1Y3Rvci5uYW1lKTtcblxuICBAT3V0cHV0KClcbiAgcHVibGljIHJlYWRvbmx5IGVsZGVyRmlsZVNlbGVjdENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsZUVudHJ5W10+KCk7XG5cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyByZWFkb25seSBlbGRlclNpbmdsZUZpbGVTZWxlY3RDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEZpbGU+KCk7XG5cbiAgcHJpdmF0ZSBfbGVnYWN5SW5wdXQ6IEVsZGVyRmlsZVNlbGVjdElucHV0O1xuICBwcml2YXRlIF9maWxlUGlja2VyT3B0aW9uczogRmlsZVN5c3RlbUZpbGVQaWNrZXJPcHRpb25zO1xuICBwcml2YXRlIF9kaXJlY3RvcnlQaWNrZXJPcHRpb25zOiBGaWxlU3lzdGVtRGlyZWN0b3J5UGlja2VyT3B0aW9ucztcbiAgcHJpdmF0ZSBfdXNlRGlyZWN0b3J5UGlja2VyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIENvbnN0cnVjdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBkZXN0cm95UmVmOiBEZXN0cm95UmVmXG4gICkge1xuICAgIHRoaXMuX2xlZ2FjeUlucHV0ID0gbmV3IEVsZGVyRmlsZVNlbGVjdElucHV0KHRoaXMucmVuZGVyZXIsIHRoaXMuZWwpO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIExpZmUgQ3ljbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICghRmlsZVN5c3RlbUFwaS5pc0ZpbGVTeXN0ZW1TdXBwb3J0ZWQoKSB8fCAhRmlsZVN5c3RlbUFwaS5pc0RpcmVjdG9yeVBpY2tlclN1cHBvcnRlZCgpKSB7XG4gICAgICB0aGlzLmxvZ2dlci53YXJuKCdzaG93T3BlbkZpbGVQaWNrZXIgb3Igc2hvd0RpcmVjdG9yeVBpY2tlciBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGJyb3dzZXIsIGZhbGxpbmcgYmFjayB0byBsZWdhY3kgZmlsZSBwaWNrZXInKTtcbiAgICAgIHRoaXMuX2xlZ2FjeUlucHV0LmNyZWF0ZUZpbGVTZWxlY3QoKTtcbiAgICAgIHRoaXMuX2xlZ2FjeUlucHV0LmZpbGVzU2VsZWN0ZWQucGlwZShcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgICkuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogbXVsdGlGaWxlQ2hhbmdlID0+IHRoaXMucHVzaEZpbGVDaGFuZ2VzKG11bHRpRmlsZUNoYW5nZSlcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9sZWdhY3lJbnB1dC5yZW1vdmVGaWxlU2VsZWN0KCk7XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHJvcGVydGllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGVsZGVyRmlsZVNlbGVjdCh2YWx1ZTogc3RyaW5nKSB7XG5cbiAgICB0aGlzLl9maWxlUGlja2VyT3B0aW9ucyA9IHtcbiAgICAgIGV4Y2x1ZGVBY2NlcHRBbGxPcHRpb25zOiB0cnVlLFxuICAgICAgaWQ6IHRoaXMuX2ZpbGVQaWNrZXJPcHRpb25zPy5pZCxcbiAgICAgIG11bHRpcGxlOiB0aGlzLl9maWxlUGlja2VyT3B0aW9ucz8ubXVsdGlwbGUsXG4gICAgICBzdGFydEluOiB0aGlzLl9maWxlUGlja2VyT3B0aW9ucz8uc3RhcnRJbixcbiAgICAgIHR5cGVzOiBbdGhpcy5idWlsZFR5cGVPcHRpb24odmFsdWUpXVxuICAgIH07XG5cbiAgICB0aGlzLl9sZWdhY3lJbnB1dC5lbGRlckZpbGVTZWxlY3QgPSB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRUeXBlT3B0aW9uKHZhbHVlOiBzdHJpbmcpOiBGaWxlU3lzdGVtRmlsZVBpY2tlclR5cGVPcHRpb25zIHtcbiAgICBpZiAodGhpcy5pc0ZpbGVFeHRlbnNpb24odmFsdWUpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhY2NlcHQ6IHtcbiAgICAgICAgICAnKi8qJzogdmFsdWUudHJpbSgpXG4gICAgICAgICAgICAucmVwbGFjZSgvXFxzKy9nLCAnJylcbiAgICAgICAgICAgIC5zcGxpdCgnLCcpXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzTWltZVR5cGUodmFsdWUpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhY2NlcHQ6IHtbdmFsdWVdOiBbXX1cbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0ZpbGVFeHRlbnNpb24oaW5wdXQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cCgvXihcXC5cXHcrKSgsID9cXC5cXHcrKSokLyk7XG4gICAgcmV0dXJuIHJlZ2V4LnRlc3QoaW5wdXQpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc01pbWVUeXBlKGlucHV0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoL14uK1xcLy4rJC8pO1xuICAgIHJldHVybiByZWdleC50ZXN0KGlucHV0KTtcbiAgfVxuXG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBlbGRlckZpbGVTZWxlY3RNdWx0aXBsZSh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG5cbiAgICB0aGlzLl9maWxlUGlja2VyT3B0aW9ucyA9IHtcbiAgICAgIGV4Y2x1ZGVBY2NlcHRBbGxPcHRpb25zOiB0aGlzLl9maWxlUGlja2VyT3B0aW9ucz8uZXhjbHVkZUFjY2VwdEFsbE9wdGlvbnMsXG4gICAgICBpZDogdGhpcy5fZmlsZVBpY2tlck9wdGlvbnM/LmlkLFxuICAgICAgbXVsdGlwbGU6IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSksXG4gICAgICBzdGFydEluOiB0aGlzLl9maWxlUGlja2VyT3B0aW9ucz8uc3RhcnRJbixcbiAgICAgIHR5cGVzOiB0aGlzLl9maWxlUGlja2VyT3B0aW9ucz8udHlwZXNcbiAgICB9O1xuXG4gICAgdGhpcy5fbGVnYWN5SW5wdXQuZWxkZXJGaWxlU2VsZWN0TXVsdGlwbGUgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvdyB0aGUgdXNlciB0byBzZWxlY3QgYSBkaXJlY3RvcnkuIEFsbCBmaWxlcyB0aGF0IGFyZSByZWN1cnNpdmVseSBjb250YWluZWQgYXJlIHNlbGVjdGVkLlxuICAgKiBIb3dldmVyLCB0aGUgdXNlciB3aWxsIG5vIGxvbmdlciBiZSBhYmxlIHRvIHNlbGVjdCBpbmRpdmlkdWFsIGZpbGVzIGlmIHRoaXMgaXMgZW5hYmxlZC5cbiAgICogQHBhcmFtIHZhbHVlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGVsZGVyRmlsZVNlbGVjdERpcmVjdG9yeSh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgdGhpcy5fdXNlRGlyZWN0b3J5UGlja2VyID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB0aGlzLl9sZWdhY3lJbnB1dC5lbGRlckZpbGVTZWxlY3REaXJlY3RvcnkgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQdWJsaWMgQVBJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSlcbiAgcHVibGljIG9uQ2xpY2soZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdXNlRGlyZWN0b3J5UGlja2VyICYmIEZpbGVTeXN0ZW1BcGkuaXNGaWxlU3lzdGVtU3VwcG9ydGVkKCkpIHtcbiAgICAgIHRoaXMub3BlbkZpbGVQaWNrZXIodGhpcy5fZmlsZVBpY2tlck9wdGlvbnMpLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IG11bHRpRmlsZUNoYW5nZSA9PiB0aGlzLnB1c2hGaWxlQ2hhbmdlcyhtdWx0aUZpbGVDaGFuZ2UpXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX3VzZURpcmVjdG9yeVBpY2tlciAmJiBGaWxlU3lzdGVtQXBpLmlzRGlyZWN0b3J5UGlja2VyU3VwcG9ydGVkKCkpIHtcbiAgICAgIHRoaXMub3BlbkRpcmVjdG9yeVBpY2tlcih0aGlzLl9kaXJlY3RvcnlQaWNrZXJPcHRpb25zKS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiBtdWx0aUZpbGVDaGFuZ2UgPT4gdGhpcy5wdXNoRmlsZUNoYW5nZXMobXVsdGlGaWxlQ2hhbmdlKVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2xlZ2FjeUlucHV0Lm9wZW5GaWxlU2VsZWN0RGlhbG9nKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFByaXZhdGUgbWV0aG9kcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHJpdmF0ZSBwdXNoRmlsZUNoYW5nZXMobXVsdGlGaWxlQ2hhbmdlOiBGaWxlRW50cnlbXSk6IHZvaWQge1xuICAgIHRoaXMuZWxkZXJGaWxlU2VsZWN0Q2hhbmdlLm5leHQobXVsdGlGaWxlQ2hhbmdlKTtcbiAgICBjb25zdCBmaWxlID0gbXVsdGlGaWxlQ2hhbmdlWzBdPy5maWxlO1xuICAgIGlmIChmaWxlKSB7XG4gICAgICB0aGlzLmVsZGVyU2luZ2xlRmlsZVNlbGVjdENoYW5nZS5uZXh0KGZpbGUpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvcGVuRmlsZVBpY2tlcihwaWNrZXJPcHRzOiBGaWxlU3lzdGVtRmlsZVBpY2tlck9wdGlvbnMpOiBPYnNlcnZhYmxlPEZpbGVFbnRyeVtdPiB7XG4gICAgcmV0dXJuIEZpbGVTeXN0ZW1BcGkub3BlbkZpbGVQaWNrZXIocGlja2VyT3B0cykucGlwZShcbiAgICAgIHN3aXRjaE1hcChmaWxlcyA9PlxuICAgICAgICBjb21iaW5lTGF0ZXN0KGZpbGVzLm1hcChmaWxlID0+IEZpbGVFbnRyeS5vZkZpbGVIYW5kbGUoZmlsZSkpKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgb3BlbkRpcmVjdG9yeVBpY2tlcihwaWNrZXJPcHRzOiBGaWxlU3lzdGVtRGlyZWN0b3J5UGlja2VyT3B0aW9ucyk6IE9ic2VydmFibGU8RmlsZUVudHJ5W10+IHtcbiAgICByZXR1cm4gRmlsZVN5c3RlbUFwaS5vcGVuRGlyZWN0b3J5UGlja2VyKHBpY2tlck9wdHMpLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoZGlyID0+IEZpbGVMaXN0aW5nU3lzdGVtSGFuZGxlLmxpc3RGaWxlcyhkaXIpKVxuICAgICk7XG4gIH1cblxufVxuXG5cblxuIl19
|
|
@@ -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
|