@dotglitch/ngx-common 1.2.0 → 3.0.0-beta.1

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 (90) hide show
  1. package/README.md +37 -22
  2. package/esm2022/components/lazy-loader/lazy-loader.component.mjs +4 -4
  3. package/esm2022/components/lazy-loader/lazy-loader.module.mjs +5 -5
  4. package/esm2022/components/lazy-loader/lazy-loader.service.mjs +4 -4
  5. package/esm2022/components/menu/menu.component.mjs +4 -4
  6. package/esm2022/components/parallax-card/parallax-card.component.mjs +4 -4
  7. package/esm2022/components/tooltip/tooltip.component.mjs +4 -4
  8. package/esm2022/directives/image-cache.directive.mjs +7 -4
  9. package/esm2022/directives/menu.directive.mjs +4 -4
  10. package/esm2022/directives/tooltip.directive.mjs +7 -7
  11. package/esm2022/pipes/html-bypass.pipe.mjs +4 -4
  12. package/esm2022/pipes/resource-bypass.pipe.mjs +4 -4
  13. package/esm2022/pipes/script-bypass.pipe.mjs +4 -4
  14. package/esm2022/pipes/style-bypass.pipe.mjs +4 -4
  15. package/esm2022/pipes/url-bypass.pipe.mjs +4 -4
  16. package/esm2022/public-api.mjs +7 -23
  17. package/esm2022/services/dependency.service.mjs +4 -4
  18. package/esm2022/services/dialog.service.mjs +4 -4
  19. package/esm2022/services/fetch.service.mjs +4 -4
  20. package/esm2022/services/file.service.mjs +4 -4
  21. package/esm2022/services/keyboard.service.mjs +4 -4
  22. package/esm2022/services/navigation.service.mjs +4 -4
  23. package/esm2022/services/theme.service.mjs +50 -15
  24. package/fesm2022/dotglitch-ngx-common.mjs +1105 -10155
  25. package/fesm2022/dotglitch-ngx-common.mjs.map +1 -1
  26. package/package.json +27 -10
  27. package/public-api.d.ts +6 -19
  28. package/services/theme.service.d.ts +12 -2
  29. package/assets/mat-icons.d.ts +0 -5705
  30. package/components/command-palette/breadcrumb/breadcrumb.component.d.ts +0 -16
  31. package/components/command-palette/command-palette.component.d.ts +0 -38
  32. package/components/command-palette/shortcut/shortcut.component.d.ts +0 -9
  33. package/components/dynamic-html/dynamic-html.component.d.ts +0 -15
  34. package/components/dynamic-html/dynamic-html.module.d.ts +0 -10
  35. package/components/dynamic-html/dynamic-html.service.d.ts +0 -18
  36. package/components/dynamic-html/types.d.ts +0 -12
  37. package/components/filemanager/file-grid/file-grid.component.d.ts +0 -101
  38. package/components/filemanager/filemanager.component.d.ts +0 -207
  39. package/components/filemanager/folder-rename/folder-rename.component.d.ts +0 -18
  40. package/components/filemanager/helpers.d.ts +0 -5
  41. package/components/filemanager/icon-resolver.d.ts +0 -13
  42. package/components/filemanager/textextensions.d.ts +0 -3
  43. package/components/filemanager/toolbar/breadcrumb/breadcrumb.component.d.ts +0 -16
  44. package/components/filemanager/toolbar/icon-button/icon-button.component.d.ts +0 -11
  45. package/components/filemanager/toolbar/toolbar.component.d.ts +0 -31
  46. package/components/filemanager/tree-view/tree-view.component.d.ts +0 -21
  47. package/components/react-magic-wrapper/react-magic-wrapper.component.d.ts +0 -63
  48. package/components/tabulator/tabulator.component.d.ts +0 -30
  49. package/components/vscode/ts-type-resolver/dependency-parser.d.ts +0 -6
  50. package/components/vscode/ts-type-resolver/dummy-source-cache.d.ts +0 -7
  51. package/components/vscode/ts-type-resolver/import-resolver.d.ts +0 -28
  52. package/components/vscode/ts-type-resolver/main.d.ts +0 -22
  53. package/components/vscode/ts-type-resolver/recursion-depth.d.ts +0 -11
  54. package/components/vscode/ts-type-resolver/types.d.ts +0 -179
  55. package/components/vscode/ts-type-resolver/unpkg-source-resolver.d.ts +0 -5
  56. package/components/vscode/ts-type-resolver/update-emitter.d.ts +0 -2
  57. package/components/vscode/vscode.component.d.ts +0 -52
  58. package/esm2022/assets/mat-icons.mjs +0 -5705
  59. package/esm2022/components/command-palette/breadcrumb/breadcrumb.component.mjs +0 -30
  60. package/esm2022/components/command-palette/command-palette.component.mjs +0 -257
  61. package/esm2022/components/command-palette/shortcut/shortcut.component.mjs +0 -19
  62. package/esm2022/components/dynamic-html/dynamic-html.component.mjs +0 -43
  63. package/esm2022/components/dynamic-html/dynamic-html.module.mjs +0 -27
  64. package/esm2022/components/dynamic-html/dynamic-html.service.mjs +0 -66
  65. package/esm2022/components/dynamic-html/types.mjs +0 -7
  66. package/esm2022/components/filemanager/file-grid/file-grid.component.mjs +0 -674
  67. package/esm2022/components/filemanager/filemanager.component.mjs +0 -314
  68. package/esm2022/components/filemanager/folder-rename/folder-rename.component.mjs +0 -57
  69. package/esm2022/components/filemanager/helpers.mjs +0 -26
  70. package/esm2022/components/filemanager/icon-resolver.mjs +0 -155
  71. package/esm2022/components/filemanager/textextensions.mjs +0 -294
  72. package/esm2022/components/filemanager/toolbar/breadcrumb/breadcrumb.component.mjs +0 -22
  73. package/esm2022/components/filemanager/toolbar/icon-button/icon-button.component.mjs +0 -32
  74. package/esm2022/components/filemanager/toolbar/toolbar.component.mjs +0 -165
  75. package/esm2022/components/filemanager/tree-view/tree-view.component.mjs +0 -51
  76. package/esm2022/components/react-magic-wrapper/react-magic-wrapper.component.mjs +0 -160
  77. package/esm2022/components/tabulator/tabulator.component.mjs +0 -93
  78. package/esm2022/components/vscode/ts-type-resolver/dependency-parser.mjs +0 -91
  79. package/esm2022/components/vscode/ts-type-resolver/dummy-source-cache.mjs +0 -15
  80. package/esm2022/components/vscode/ts-type-resolver/import-resolver.mjs +0 -311
  81. package/esm2022/components/vscode/ts-type-resolver/main.mjs +0 -112
  82. package/esm2022/components/vscode/ts-type-resolver/recursion-depth.mjs +0 -21
  83. package/esm2022/components/vscode/ts-type-resolver/types.mjs +0 -14
  84. package/esm2022/components/vscode/ts-type-resolver/unpkg-source-resolver.mjs +0 -21
  85. package/esm2022/components/vscode/ts-type-resolver/update-emitter.mjs +0 -37
  86. package/esm2022/components/vscode/vscode.component.mjs +0 -232
  87. package/esm2022/services/command-palette.service.mjs +0 -209
  88. package/fesm2022/dotglitch-ngx-common-folder-rename.component-6j7OjwOo.mjs +0 -83
  89. package/fesm2022/dotglitch-ngx-common-folder-rename.component-6j7OjwOo.mjs.map +0 -1
  90. package/services/command-palette.service.d.ts +0 -128
@@ -1,311 +0,0 @@
1
- import { DependencyParser } from './dependency-parser';
2
- import * as path from 'path-browserify';
3
- import { invokeUpdate } from './update-emitter';
4
- import { RecursionDepth } from './recursion-depth';
5
- import { importResourcePathToString } from './types';
6
- import { UnpkgSourceResolver } from './unpkg-source-resolver';
7
- export class ImportResolver {
8
- constructor(options) {
9
- this.options = options;
10
- this.loadedFiles = [];
11
- this.dependencyParser = new DependencyParser();
12
- this.cache = options.sourceCache;
13
- this.newImportsResolved = false;
14
- this.monaco = options.monaco;
15
- if (options.preloadPackages && options.versions) {
16
- this.versions = options.versions;
17
- for (const [packageName, version] of Object.entries(options.versions)) {
18
- this.resolveImport({
19
- kind: 'package',
20
- packageName: packageName,
21
- importPath: '',
22
- }, new RecursionDepth(this.options)).catch(e => {
23
- console.error(e);
24
- });
25
- }
26
- }
27
- }
28
- wereNewImportsResolved() {
29
- return this.newImportsResolved;
30
- }
31
- resetNewImportsResolved() {
32
- this.newImportsResolved = false;
33
- }
34
- async resolveImportsInFile(source, parent, depth) {
35
- if (depth.shouldStop()) {
36
- return;
37
- }
38
- const imports = this.dependencyParser.parseDependencies(source, parent);
39
- for (const importCall of imports) {
40
- try {
41
- await this.resolveImport(importCall, depth);
42
- }
43
- catch (e) {
44
- if (this.options.onError) {
45
- this.options.onError?.(e.message ?? e);
46
- }
47
- else {
48
- console.error(e);
49
- }
50
- }
51
- }
52
- }
53
- async resolveImport(importResource, depth) {
54
- const hash = this.hashImportResourcePath(importResource);
55
- if (this.loadedFiles.includes(hash)) {
56
- return;
57
- }
58
- this.loadedFiles.push(hash);
59
- console.log("resolveImport", importResource, depth);
60
- // Ignore these package imports as they are well-known to be pointless.
61
- if (importResource.kind == "package" && importResource.packageName == "require")
62
- return null;
63
- switch (importResource.kind) {
64
- case 'package':
65
- const packageRelativeImport = await this.resolveImportFromPackageRoot(importResource);
66
- if (packageRelativeImport) {
67
- return await this.resolveImportInPackage(packageRelativeImport, depth.nextPackage().nextFile());
68
- }
69
- break;
70
- case 'relative':
71
- throw Error('Not implemented yet');
72
- case 'relative-in-package':
73
- return await this.resolveImportInPackage(importResource, depth.nextFile());
74
- case 'bruteforce': {
75
- }
76
- }
77
- }
78
- async resolveImportInPackage(importResource, depth) {
79
- console.log("resolveImportInPackage", importResource, depth);
80
- const contents = await this.loadSourceFileContents(importResource);
81
- if (contents) {
82
- const { source, at } = contents;
83
- this.createModel(source, this.monaco.Uri.parse(this.options.fileRootPath + path.join(`node_modules/${importResource.packageName}`, at)));
84
- await this.resolveImportsInFile(source, {
85
- kind: 'relative-in-package',
86
- packageName: importResource.packageName,
87
- sourcePath: path.dirname(at),
88
- importPath: '',
89
- }, depth);
90
- }
91
- }
92
- async resolveImportFromPackageRoot(importResource) {
93
- console.log("resolveImportFromPackageRoot", importResource);
94
- const failedProgressUpdate = {
95
- type: 'LookedUpPackage',
96
- package: importResource.packageName,
97
- definitelyTyped: false,
98
- success: false,
99
- };
100
- if (this.options.onlySpecifiedPackages) {
101
- if (!this.versions?.[importResource.packageName] && !this.versions?.['@types/' + importResource.packageName]) {
102
- invokeUpdate(failedProgressUpdate, this.options);
103
- return null;
104
- }
105
- }
106
- const doesPkgJsonHasSubpath = importResource.importPath?.length ?? 0 > 0;
107
- let pkgJsonSubpath = doesPkgJsonHasSubpath ? `/${importResource.importPath}` : '';
108
- let pkgJson = await this.resolvePackageJson(importResource.packageName, this.versions?.[importResource.packageName], doesPkgJsonHasSubpath ? importResource.importPath : undefined);
109
- if (!pkgJson && doesPkgJsonHasSubpath) {
110
- pkgJson = await this.resolvePackageJson(importResource.packageName, this.versions?.[importResource.packageName]);
111
- pkgJsonSubpath = '';
112
- }
113
- if (!pkgJson)
114
- return invokeUpdate(failedProgressUpdate, this.options);
115
- const pkg = JSON.parse(pkgJson);
116
- console.log("package meta", pkg);
117
- if (pkg.typings || pkg.types) {
118
- const typings = pkg.typings || pkg.types;
119
- this.createModel(pkgJson, this.monaco.Uri.parse(`${this.options.fileRootPath}node_modules/${importResource.packageName}${pkgJsonSubpath}/package.json`));
120
- invokeUpdate({
121
- type: 'LookedUpPackage',
122
- package: importResource.packageName,
123
- definitelyTyped: false,
124
- success: true,
125
- }, this.options);
126
- this.setVersion(importResource.packageName, pkg.version);
127
- return {
128
- kind: 'relative-in-package',
129
- packageName: importResource.packageName,
130
- sourcePath: '',
131
- importPath: path.join(importResource.importPath ?? '', typings.startsWith('./') ? typings.slice(2) : typings),
132
- };
133
- }
134
- else {
135
- const typingPackageName = `@types/${importResource.packageName.startsWith('@')
136
- ? importResource.packageName.slice(1).replace(/\//, '__')
137
- : importResource.packageName}`;
138
- const pkgJsonTypings = await this.resolvePackageJson(typingPackageName, this.versions?.[typingPackageName]);
139
- if (!pkgJsonTypings)
140
- return invokeUpdate(failedProgressUpdate, this.options);
141
- const pkg = JSON.parse(pkgJsonTypings);
142
- if (!pkg.typings && !pkg.types) {
143
- const files = await fetch("https://www.npmjs.com/package/@dt-esa/dynatrace-api-client/v/2.2.6/index", {
144
- method: "get"
145
- }).then(e => e.json());
146
- const typingFiles = Object.entries(files.files).map(([key, val]) => val);
147
- invokeUpdate({
148
- type: 'LookedUpPackage',
149
- package: typingPackageName,
150
- definitelyTyped: true,
151
- success: true,
152
- }, this.options);
153
- return {
154
- kind: 'bruteforce',
155
- packageName: typingPackageName,
156
- typingFiles,
157
- };
158
- return;
159
- // return invokeUpdate(failedProgressUpdate, this.options);
160
- }
161
- const typings = pkg.typings || pkg.types;
162
- this.createModel(pkgJsonTypings, this.monaco.Uri.parse(`${this.options.fileRootPath}node_modules/${typingPackageName}/package.json`));
163
- invokeUpdate({
164
- type: 'LookedUpPackage',
165
- package: typingPackageName,
166
- definitelyTyped: true,
167
- success: true,
168
- }, this.options);
169
- this.setVersion(typingPackageName, pkg.version);
170
- return {
171
- kind: 'relative-in-package',
172
- packageName: typingPackageName,
173
- sourcePath: '',
174
- importPath: path.join(importResource.importPath ?? '', typings.startsWith('./') ? typings.slice(2) : typings),
175
- };
176
- }
177
- }
178
- async loadSourceFileContents(importResource) {
179
- const progressUpdatePath = path.join(importResource.packageName, importResource.sourcePath, importResource.importPath);
180
- const failedProgressUpdate = {
181
- type: 'LookedUpTypeFile',
182
- path: progressUpdatePath,
183
- definitelyTyped: false,
184
- success: false,
185
- };
186
- const pkgName = importResource.packageName;
187
- const version = this.getVersion(importResource.packageName);
188
- let appends = ['.d.ts', '/index.d.ts', '.ts', '.tsx', '/index.ts', '/index.tsx'];
189
- if (appends.map(append => importResource.importPath.endsWith(append)).reduce((a, b) => a || b, false)) {
190
- const source = await this.resolveSourceFile(pkgName, version, path.join(importResource.sourcePath, importResource.importPath));
191
- if (source) {
192
- return { source, at: path.join(importResource.sourcePath, importResource.importPath) };
193
- }
194
- }
195
- else {
196
- for (const append of appends) {
197
- const fullPath = path.join(importResource.sourcePath, importResource.importPath) + append;
198
- const source = await this.resolveSourceFile(pkgName, version, fullPath);
199
- invokeUpdate({
200
- type: 'AttemptedLookUpFile',
201
- path: path.join(pkgName, fullPath),
202
- success: !!source,
203
- }, this.options);
204
- if (source) {
205
- invokeUpdate({
206
- type: 'LookedUpTypeFile',
207
- path: path.join(pkgName, fullPath),
208
- success: true,
209
- }, this.options);
210
- return { source, at: fullPath };
211
- }
212
- }
213
- }
214
- const pkgJson = await this.resolvePackageJson(pkgName, version, path.join(importResource.sourcePath, importResource.importPath));
215
- if (pkgJson) {
216
- const { types } = JSON.parse(pkgJson);
217
- if (types) {
218
- const fullPath = path.join(importResource.sourcePath, importResource.importPath, types);
219
- const source = await this.resolveSourceFile(pkgName, version, fullPath);
220
- if (source) {
221
- invokeUpdate({
222
- type: 'LookedUpTypeFile',
223
- path: path.join(pkgName, fullPath),
224
- success: true,
225
- }, this.options);
226
- return { source, at: fullPath };
227
- }
228
- }
229
- }
230
- invokeUpdate(failedProgressUpdate, this.options);
231
- return null;
232
- }
233
- getVersion(packageName) {
234
- return this.versions?.[packageName];
235
- }
236
- setVersions(versions) {
237
- this.versions = versions;
238
- this.options.onUpdateVersions?.(versions);
239
- // TODO reload packages whose version has changed
240
- }
241
- setVersion(packageName, version) {
242
- this.setVersions({
243
- ...this.versions,
244
- [packageName]: version,
245
- });
246
- }
247
- createModel(source, uri) {
248
- uri = uri.with({ path: uri.path.replace('@types/', '') });
249
- if (!this.monaco.editor.getModel(uri)) {
250
- this.monaco.editor.createModel(source, 'typescript', uri);
251
- this.newImportsResolved = true;
252
- }
253
- }
254
- hashImportResourcePath(p) {
255
- return importResourcePathToString(p);
256
- }
257
- async resolvePackageJson(packageName, version, subPath) {
258
- const uri = path.join(packageName + (version ? `@${version}` : ''), subPath ?? '', 'package.json');
259
- let isAvailable = false;
260
- let content = undefined;
261
- if (this.cache.isFileAvailable) {
262
- isAvailable = await this.cache.isFileAvailable(uri);
263
- }
264
- else {
265
- content = await this.cache.getFile(uri);
266
- isAvailable = content !== undefined;
267
- }
268
- if (isAvailable) {
269
- return content ?? (await this.cache.getFile(uri));
270
- }
271
- else {
272
- console.log("recursing resolvePackageJson", packageName, version, subPath);
273
- content = await UnpkgSourceResolver.resolvePackageJson(packageName, version, subPath);
274
- if (content) {
275
- this.cache.storeFile(uri, content);
276
- }
277
- return content;
278
- }
279
- }
280
- async resolveSourceFile(packageName, version, filePath) {
281
- const uri = path.join(packageName + (version ? `@${version}` : ''), filePath);
282
- let isAvailable = false;
283
- let content = undefined;
284
- if (this.cache.isFileAvailable) {
285
- isAvailable = await this.cache.isFileAvailable(uri);
286
- }
287
- else {
288
- content = await this.cache.getFile(uri);
289
- isAvailable = content !== undefined;
290
- }
291
- if (isAvailable) {
292
- invokeUpdate({
293
- type: 'LoadedFromCache',
294
- importPath: uri,
295
- }, this.options);
296
- return content ?? (await this.cache.getFile(uri));
297
- }
298
- else {
299
- content = await UnpkgSourceResolver.resolveSourceFile(packageName, version, filePath);
300
- if (content) {
301
- invokeUpdate({
302
- type: 'StoredToCache',
303
- importPath: uri,
304
- }, this.options);
305
- this.cache.storeFile(uri, content);
306
- }
307
- return content;
308
- }
309
- }
310
- }
311
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0LXJlc29sdmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3NyYy9jb21wb25lbnRzL3ZzY29kZS90cy10eXBlLXJlc29sdmVyL2ltcG9ydC1yZXNvbHZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEtBQUssSUFBSSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUE0RywwQkFBMEIsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUMvSixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUU5RCxNQUFNLE9BQU8sY0FBYztJQVF2QixZQUFvQixPQUFnQjtRQUFoQixZQUFPLEdBQVAsT0FBTyxDQUFTO1FBQ2hDLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLGdCQUFnQixFQUFFLENBQUM7UUFDL0MsSUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7UUFDaEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTyxDQUFDO1FBRTlCLElBQUksT0FBTyxDQUFDLGVBQWUsSUFBSSxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDOUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDO1lBQ2pDLEtBQUssTUFBTSxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO2dCQUNwRSxJQUFJLENBQUMsYUFBYSxDQUNkO29CQUNJLElBQUksRUFBRSxTQUFTO29CQUNmLFdBQVcsRUFBRSxXQUFXO29CQUN4QixVQUFVLEVBQUUsRUFBRTtpQkFDakIsRUFDRCxJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQ25DLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFO29CQUNSLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JCLENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0lBRU0sc0JBQXNCO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDO0lBQ25DLENBQUM7SUFFTSx1QkFBdUI7UUFDMUIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQztJQUNwQyxDQUFDO0lBRU0sS0FBSyxDQUFDLG9CQUFvQixDQUFDLE1BQWMsRUFBRSxNQUFtQyxFQUFFLEtBQXFCO1FBQ3hHLElBQUksS0FBSyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUM7WUFDckIsT0FBTztRQUNYLENBQUM7UUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3hFLEtBQUssTUFBTSxVQUFVLElBQUksT0FBTyxFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDO2dCQUNELE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDaEQsQ0FBQztZQUNELE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ1AsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUN2QixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFFLENBQVcsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQ3RELENBQUM7cUJBQ0ksQ0FBQztvQkFDRixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNyQixDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0lBRU8sS0FBSyxDQUFDLGFBQWEsQ0FBQyxjQUFrQyxFQUFFLEtBQXFCO1FBQ2pGLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN6RCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDbEMsT0FBTztRQUNYLENBQUM7UUFFRCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QixPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxjQUFjLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFcEQsdUVBQXVFO1FBQ3ZFLElBQUksY0FBYyxDQUFDLElBQUksSUFBSSxTQUFTLElBQUksY0FBYyxDQUFDLFdBQVcsSUFBSSxTQUFTO1lBQzNFLE9BQU8sSUFBSSxDQUFDO1FBRWhCLFFBQVEsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzFCLEtBQUssU0FBUztnQkFDVixNQUFNLHFCQUFxQixHQUFHLE1BQU0sSUFBSSxDQUFDLDRCQUE0QixDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUN0RixJQUFJLHFCQUFxQixFQUFFLENBQUM7b0JBQ3hCLE9BQU8sTUFBTSxJQUFJLENBQUMsc0JBQXNCLENBQUMscUJBQXFCLEVBQUUsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7Z0JBQ3BHLENBQUM7Z0JBQ0QsTUFBTTtZQUNWLEtBQUssVUFBVTtnQkFDWCxNQUFNLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1lBQ3ZDLEtBQUsscUJBQXFCO2dCQUN0QixPQUFPLE1BQU0sSUFBSSxDQUFDLHNCQUFzQixDQUFDLGNBQWMsRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUMvRSxLQUFLLFlBQVksQ0FBQyxDQUFDLENBQUM7WUFFcEIsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0lBRU8sS0FBSyxDQUFDLHNCQUFzQixDQUFDLGNBQW1ELEVBQUUsS0FBcUI7UUFDM0csT0FBTyxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsRUFBRSxjQUFjLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFN0QsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsc0JBQXNCLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFbkUsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNYLE1BQU0sRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsUUFBUSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxXQUFXLENBQ1osTUFBTSxFQUNOLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixjQUFjLENBQUMsV0FBVyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FDakgsQ0FBQztZQUVGLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixDQUMzQixNQUFNLEVBQ047Z0JBQ0ksSUFBSSxFQUFFLHFCQUFxQjtnQkFDM0IsV0FBVyxFQUFFLGNBQWMsQ0FBQyxXQUFXO2dCQUN2QyxVQUFVLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQzVCLFVBQVUsRUFBRSxFQUFFO2FBQ2pCLEVBQ0QsS0FBSyxDQUNSLENBQUM7UUFDTixDQUFDO0lBQ0wsQ0FBQztJQUVPLEtBQUssQ0FBQyw0QkFBNEIsQ0FDdEMsY0FBeUM7UUFFekMsT0FBTyxDQUFDLEdBQUcsQ0FBQyw4QkFBOEIsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUU1RCxNQUFNLG9CQUFvQixHQUFHO1lBQ3pCLElBQUksRUFBRSxpQkFBaUI7WUFDdkIsT0FBTyxFQUFFLGNBQWMsQ0FBQyxXQUFXO1lBQ25DLGVBQWUsRUFBRSxLQUFLO1lBQ3RCLE9BQU8sRUFBRSxLQUFLO1NBQ1IsQ0FBQztRQUVYLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQ3JDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLFNBQVMsR0FBRyxjQUFjLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztnQkFDM0csWUFBWSxDQUFDLG9CQUFvQixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDakQsT0FBTyxJQUFJLENBQUM7WUFDaEIsQ0FBQztRQUNMLENBQUM7UUFFRCxNQUFNLHFCQUFxQixHQUFHLGNBQWMsQ0FBQyxVQUFVLEVBQUUsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDekUsSUFBSSxjQUFjLEdBQUcscUJBQXFCLENBQUMsQ0FBQyxDQUFDLElBQUksY0FBYyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDbEYsSUFBSSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQ3ZDLGNBQWMsQ0FBQyxXQUFXLEVBQzFCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLEVBQzNDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQ2hFLENBQUM7UUFFRixJQUFJLENBQUMsT0FBTyxJQUFJLHFCQUFxQixFQUFFLENBQUM7WUFDcEMsT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQ2pILGNBQWMsR0FBRyxFQUFFLENBQUM7UUFDeEIsQ0FBQztRQUVELElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTyxZQUFZLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXRFLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFaEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFakMsSUFBSSxHQUFHLENBQUMsT0FBTyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMzQixNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsT0FBTyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUM7WUFDekMsSUFBSSxDQUFDLFdBQVcsQ0FDWixPQUFPLEVBQ1AsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUNqQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxnQkFBZ0IsY0FBYyxDQUFDLFdBQVcsR0FBRyxjQUFjLGVBQWUsQ0FDekcsQ0FDSixDQUFDO1lBRUYsWUFBWSxDQUNSO2dCQUNJLElBQUksRUFBRSxpQkFBaUI7Z0JBQ3ZCLE9BQU8sRUFBRSxjQUFjLENBQUMsV0FBVztnQkFDbkMsZUFBZSxFQUFFLEtBQUs7Z0JBQ3RCLE9BQU8sRUFBRSxJQUFJO2FBQ2hCLEVBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FDZixDQUFDO1lBQ0YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUV6RCxPQUFPO2dCQUNILElBQUksRUFBRSxxQkFBcUI7Z0JBQzNCLFdBQVcsRUFBRSxjQUFjLENBQUMsV0FBVztnQkFDdkMsVUFBVSxFQUFFLEVBQUU7Z0JBQ2QsVUFBVSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsSUFBSSxFQUFFLEVBQUUsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO2FBQ2hILENBQUM7UUFDTixDQUFDO2FBQ0ksQ0FBQztZQUVGLE1BQU0saUJBQWlCLEdBQUcsVUFDdEIsY0FBYyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDO2dCQUN0QyxDQUFDLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7Z0JBQ3pELENBQUMsQ0FBQyxjQUFjLENBQUMsV0FDekIsRUFBRSxDQUFDO1lBRUgsTUFBTSxjQUFjLEdBQUcsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztZQUU1RyxJQUFJLENBQUMsY0FBYztnQkFDZixPQUFPLFlBQVksQ0FBQyxvQkFBb0IsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFNUQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUV2QyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDN0IsTUFBTSxLQUFLLEdBZVAsTUFBTSxLQUFLLENBQUMsMEVBQTBFLEVBQUU7b0JBQ3hGLE1BQU0sRUFBRSxLQUFLO2lCQUNoQixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBRXZCLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFFekUsWUFBWSxDQUNSO29CQUNJLElBQUksRUFBRSxpQkFBaUI7b0JBQ3ZCLE9BQU8sRUFBRSxpQkFBaUI7b0JBQzFCLGVBQWUsRUFBRSxJQUFJO29CQUNyQixPQUFPLEVBQUUsSUFBSTtpQkFDaEIsRUFDRCxJQUFJLENBQUMsT0FBTyxDQUNmLENBQUM7Z0JBRUYsT0FBTztvQkFDSCxJQUFJLEVBQUUsWUFBWTtvQkFDbEIsV0FBVyxFQUFFLGlCQUFpQjtvQkFDOUIsV0FBVztpQkFDUCxDQUFDO2dCQUVULE9BQU87Z0JBQ1AsMkRBQTJEO1lBQy9ELENBQUM7WUFFRCxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsT0FBTyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUM7WUFDekMsSUFBSSxDQUFDLFdBQVcsQ0FDWixjQUFjLEVBQ2QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLGdCQUFnQixpQkFBaUIsZUFBZSxDQUFDLENBQ3RHLENBQUM7WUFFRixZQUFZLENBQ1I7Z0JBQ0ksSUFBSSxFQUFFLGlCQUFpQjtnQkFDdkIsT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsZUFBZSxFQUFFLElBQUk7Z0JBQ3JCLE9BQU8sRUFBRSxJQUFJO2FBQ2hCLEVBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FDZixDQUFDO1lBQ0YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFaEQsT0FBTztnQkFDSCxJQUFJLEVBQUUscUJBQXFCO2dCQUMzQixXQUFXLEVBQUUsaUJBQWlCO2dCQUM5QixVQUFVLEVBQUUsRUFBRTtnQkFDZCxVQUFVLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FDakIsY0FBYyxDQUFDLFVBQVUsSUFBSSxFQUFFLEVBQy9CLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FDeEQ7YUFDSixDQUFDO1FBQ04sQ0FBQztJQUNMLENBQUM7SUFFTyxLQUFLLENBQUMsc0JBQXNCLENBQ2hDLGNBQW1EO1FBRW5ELE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FDaEMsY0FBYyxDQUFDLFdBQVcsRUFDMUIsY0FBYyxDQUFDLFVBQVUsRUFDekIsY0FBYyxDQUFDLFVBQVUsQ0FDNUIsQ0FBQztRQUVGLE1BQU0sb0JBQW9CLEdBQUc7WUFDekIsSUFBSSxFQUFFLGtCQUFrQjtZQUN4QixJQUFJLEVBQUUsa0JBQWtCO1lBQ3hCLGVBQWUsRUFBRSxLQUFLO1lBQ3RCLE9BQU8sRUFBRSxLQUFLO1NBQ1IsQ0FBQztRQUVYLE1BQU0sT0FBTyxHQUFHLGNBQWMsQ0FBQyxXQUFXLENBQUM7UUFDM0MsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFNUQsSUFBSSxPQUFPLEdBQUcsQ0FBQyxPQUFPLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBRWpGLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3BHLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUN2QyxPQUFPLEVBQ1AsT0FBTyxFQUNQLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsRUFBRSxjQUFjLENBQUMsVUFBVSxDQUFDLENBQ2xFLENBQUM7WUFDRixJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUNULE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsRUFBRSxjQUFjLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUMzRixDQUFDO1FBQ0wsQ0FBQzthQUNJLENBQUM7WUFDRixLQUFLLE1BQU0sTUFBTSxJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUMzQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUUsY0FBYyxDQUFDLFVBQVUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztnQkFDMUYsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDeEUsWUFBWSxDQUNSO29CQUNJLElBQUksRUFBRSxxQkFBcUI7b0JBQzNCLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUM7b0JBQ2xDLE9BQU8sRUFBRSxDQUFDLENBQUMsTUFBTTtpQkFDcEIsRUFDRCxJQUFJLENBQUMsT0FBTyxDQUNmLENBQUM7Z0JBQ0YsSUFBSSxNQUFNLEVBQUUsQ0FBQztvQkFDVCxZQUFZLENBQ1I7d0JBQ0ksSUFBSSxFQUFFLGtCQUFrQjt3QkFDeEIsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQzt3QkFDbEMsT0FBTyxFQUFFLElBQUk7cUJBQ2hCLEVBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FDZixDQUFDO29CQUNGLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDO2dCQUNwQyxDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUM7UUFFRCxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FDekMsT0FBTyxFQUNQLE9BQU8sRUFDUCxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUUsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUNsRSxDQUFDO1FBRUYsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNWLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3RDLElBQUksS0FBSyxFQUFFLENBQUM7Z0JBQ1IsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxFQUFFLGNBQWMsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3hGLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQ3hFLElBQUksTUFBTSxFQUFFLENBQUM7b0JBQ1QsWUFBWSxDQUNSO3dCQUNJLElBQUksRUFBRSxrQkFBa0I7d0JBQ3hCLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUM7d0JBQ2xDLE9BQU8sRUFBRSxJQUFJO3FCQUNoQixFQUNELElBQUksQ0FBQyxPQUFPLENBQ2YsQ0FBQztvQkFDRixPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQztnQkFDcEMsQ0FBQztZQUNMLENBQUM7UUFDTCxDQUFDO1FBRUQsWUFBWSxDQUFDLG9CQUFvQixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNqRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU8sVUFBVSxDQUFDLFdBQW1CO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFTSxXQUFXLENBQUMsUUFBMkM7UUFDMUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzFDLGlEQUFpRDtJQUNyRCxDQUFDO0lBRU8sVUFBVSxDQUFDLFdBQW1CLEVBQUUsT0FBZTtRQUNuRCxJQUFJLENBQUMsV0FBVyxDQUFDO1lBQ2IsR0FBRyxJQUFJLENBQUMsUUFBUTtZQUNoQixDQUFDLFdBQVcsQ0FBQyxFQUFFLE9BQU87U0FDekIsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLFdBQVcsQ0FBQyxNQUFjLEVBQUUsR0FBZTtRQUMvQyxHQUFHLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNwQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLFlBQVksRUFBRSxHQUFHLENBQUMsQ0FBQztZQUMxRCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO1FBQ25DLENBQUM7SUFDTCxDQUFDO0lBRU8sc0JBQXNCLENBQUMsQ0FBcUI7UUFDaEQsT0FBTywwQkFBMEIsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRU8sS0FBSyxDQUFDLGtCQUFrQixDQUM1QixXQUFtQixFQUNuQixPQUFnQixFQUNoQixPQUFnQjtRQUdoQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxJQUFJLEVBQUUsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUNuRyxJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDeEIsSUFBSSxPQUFPLEdBQXVCLFNBQVMsQ0FBQztRQUU1QyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDN0IsV0FBVyxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDeEQsQ0FBQzthQUNJLENBQUM7WUFDRixPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN4QyxXQUFXLEdBQUcsT0FBTyxLQUFLLFNBQVMsQ0FBQztRQUN4QyxDQUFDO1FBRUQsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNkLE9BQU8sT0FBTyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3RELENBQUM7YUFDSSxDQUFDO1lBQ0YsT0FBTyxDQUFDLEdBQUcsQ0FBQyw4QkFBOEIsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFBO1lBQzFFLE9BQU8sR0FBRyxNQUFNLG1CQUFtQixDQUFDLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDdEYsSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDVixJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDdkMsQ0FBQztZQUNELE9BQU8sT0FBTyxDQUFDO1FBQ25CLENBQUM7SUFDTCxDQUFDO0lBRU8sS0FBSyxDQUFDLGlCQUFpQixDQUMzQixXQUFtQixFQUNuQixPQUEyQixFQUMzQixRQUFnQjtRQUdoQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDOUUsSUFBSSxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLElBQUksT0FBTyxHQUF1QixTQUFTLENBQUM7UUFFNUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQzdCLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hELENBQUM7YUFDSSxDQUFDO1lBQ0YsT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDeEMsV0FBVyxHQUFHLE9BQU8sS0FBSyxTQUFTLENBQUM7UUFDeEMsQ0FBQztRQUVELElBQUksV0FBVyxFQUFFLENBQUM7WUFDZCxZQUFZLENBQ1I7Z0JBQ0ksSUFBSSxFQUFFLGlCQUFpQjtnQkFDdkIsVUFBVSxFQUFFLEdBQUc7YUFDbEIsRUFDRCxJQUFJLENBQUMsT0FBTyxDQUNmLENBQUM7WUFDRixPQUFPLE9BQU8sSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN0RCxDQUFDO2FBQ0ksQ0FBQztZQUNGLE9BQU8sR0FBRyxNQUFNLG1CQUFtQixDQUFDLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDdEYsSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDVixZQUFZLENBQ1I7b0JBQ0ksSUFBSSxFQUFFLGVBQWU7b0JBQ3JCLFVBQVUsRUFBRSxHQUFHO2lCQUNsQixFQUNELElBQUksQ0FBQyxPQUFPLENBQ2YsQ0FBQztnQkFDRixJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDdkMsQ0FBQztZQUNELE9BQU8sT0FBTyxDQUFDO1FBQ25CLENBQUM7SUFDTCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSAqIGFzIG1vbmFjbyBmcm9tICdtb25hY28tZWRpdG9yJztcbmltcG9ydCB7IERlcGVuZGVuY3lQYXJzZXIgfSBmcm9tICcuL2RlcGVuZGVuY3ktcGFyc2VyJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aC1icm93c2VyaWZ5JztcbmltcG9ydCB7IGludm9rZVVwZGF0ZSB9IGZyb20gJy4vdXBkYXRlLWVtaXR0ZXInO1xuaW1wb3J0IHsgUmVjdXJzaW9uRGVwdGggfSBmcm9tICcuL3JlY3Vyc2lvbi1kZXB0aCc7XG5pbXBvcnQgeyBJbXBvcnRSZXNvdXJjZVBhdGgsIEltcG9ydFJlc291cmNlUGF0aFBhY2thZ2UsIEltcG9ydFJlc291cmNlUGF0aFJlbGF0aXZlSW5QYWNrYWdlLCBPcHRpb25zLCBTb3VyY2VDYWNoZSwgaW1wb3J0UmVzb3VyY2VQYXRoVG9TdHJpbmcgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IFVucGtnU291cmNlUmVzb2x2ZXIgfSBmcm9tICcuL3VucGtnLXNvdXJjZS1yZXNvbHZlcic7XG5cbmV4cG9ydCBjbGFzcyBJbXBvcnRSZXNvbHZlciB7XG4gICAgcHJpdmF0ZSBsb2FkZWRGaWxlczogc3RyaW5nW107XG4gICAgcHJpdmF0ZSBkZXBlbmRlbmN5UGFyc2VyOiBEZXBlbmRlbmN5UGFyc2VyO1xuICAgIHByaXZhdGUgY2FjaGU6IFNvdXJjZUNhY2hlO1xuICAgIHByaXZhdGUgdmVyc2lvbnM/OiB7IFtwYWNrYWdlTmFtZTogc3RyaW5nXTogc3RyaW5nIH07XG4gICAgcHJpdmF0ZSBuZXdJbXBvcnRzUmVzb2x2ZWQ6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBtb25hY286IHR5cGVvZiBtb25hY287XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIG9wdGlvbnM6IE9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5sb2FkZWRGaWxlcyA9IFtdO1xuICAgICAgICB0aGlzLmRlcGVuZGVuY3lQYXJzZXIgPSBuZXcgRGVwZW5kZW5jeVBhcnNlcigpO1xuICAgICAgICB0aGlzLmNhY2hlID0gb3B0aW9ucy5zb3VyY2VDYWNoZTtcbiAgICAgICAgdGhpcy5uZXdJbXBvcnRzUmVzb2x2ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5tb25hY28gPSBvcHRpb25zLm1vbmFjbyE7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMucHJlbG9hZFBhY2thZ2VzICYmIG9wdGlvbnMudmVyc2lvbnMpIHtcbiAgICAgICAgICAgIHRoaXMudmVyc2lvbnMgPSBvcHRpb25zLnZlcnNpb25zO1xuICAgICAgICAgICAgZm9yIChjb25zdCBbcGFja2FnZU5hbWUsIHZlcnNpb25dIG9mIE9iamVjdC5lbnRyaWVzKG9wdGlvbnMudmVyc2lvbnMpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNvbHZlSW1wb3J0KFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBraW5kOiAncGFja2FnZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlTmFtZTogcGFja2FnZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnRQYXRoOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgbmV3IFJlY3Vyc2lvbkRlcHRoKHRoaXMub3B0aW9ucylcbiAgICAgICAgICAgICAgICApLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHdlcmVOZXdJbXBvcnRzUmVzb2x2ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5ld0ltcG9ydHNSZXNvbHZlZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVzZXROZXdJbXBvcnRzUmVzb2x2ZWQoKSB7XG4gICAgICAgIHRoaXMubmV3SW1wb3J0c1Jlc29sdmVkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHJlc29sdmVJbXBvcnRzSW5GaWxlKHNvdXJjZTogc3RyaW5nLCBwYXJlbnQ6IHN0cmluZyB8IEltcG9ydFJlc291cmNlUGF0aCwgZGVwdGg6IFJlY3Vyc2lvbkRlcHRoKSB7XG4gICAgICAgIGlmIChkZXB0aC5zaG91bGRTdG9wKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGltcG9ydHMgPSB0aGlzLmRlcGVuZGVuY3lQYXJzZXIucGFyc2VEZXBlbmRlbmNpZXMoc291cmNlLCBwYXJlbnQpO1xuICAgICAgICBmb3IgKGNvbnN0IGltcG9ydENhbGwgb2YgaW1wb3J0cykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlc29sdmVJbXBvcnQoaW1wb3J0Q2FsbCwgZGVwdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLm9uRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLm9uRXJyb3I/LigoZSBhcyBFcnJvcikubWVzc2FnZSA/PyBlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyByZXNvbHZlSW1wb3J0KGltcG9ydFJlc291cmNlOiBJbXBvcnRSZXNvdXJjZVBhdGgsIGRlcHRoOiBSZWN1cnNpb25EZXB0aCkge1xuICAgICAgICBjb25zdCBoYXNoID0gdGhpcy5oYXNoSW1wb3J0UmVzb3VyY2VQYXRoKGltcG9ydFJlc291cmNlKTtcbiAgICAgICAgaWYgKHRoaXMubG9hZGVkRmlsZXMuaW5jbHVkZXMoaGFzaCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubG9hZGVkRmlsZXMucHVzaChoYXNoKTtcbiAgICAgICAgY29uc29sZS5sb2coXCJyZXNvbHZlSW1wb3J0XCIsIGltcG9ydFJlc291cmNlLCBkZXB0aCk7XG5cbiAgICAgICAgLy8gSWdub3JlIHRoZXNlIHBhY2thZ2UgaW1wb3J0cyBhcyB0aGV5IGFyZSB3ZWxsLWtub3duIHRvIGJlIHBvaW50bGVzcy5cbiAgICAgICAgaWYgKGltcG9ydFJlc291cmNlLmtpbmQgPT0gXCJwYWNrYWdlXCIgJiYgaW1wb3J0UmVzb3VyY2UucGFja2FnZU5hbWUgPT0gXCJyZXF1aXJlXCIpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcblxuICAgICAgICBzd2l0Y2ggKGltcG9ydFJlc291cmNlLmtpbmQpIHtcbiAgICAgICAgICAgIGNhc2UgJ3BhY2thZ2UnOlxuICAgICAgICAgICAgICAgIGNvbnN0IHBhY2thZ2VSZWxhdGl2ZUltcG9ydCA9IGF3YWl0IHRoaXMucmVzb2x2ZUltcG9ydEZyb21QYWNrYWdlUm9vdChpbXBvcnRSZXNvdXJjZSk7XG4gICAgICAgICAgICAgICAgaWYgKHBhY2thZ2VSZWxhdGl2ZUltcG9ydCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5yZXNvbHZlSW1wb3J0SW5QYWNrYWdlKHBhY2thZ2VSZWxhdGl2ZUltcG9ydCwgZGVwdGgubmV4dFBhY2thZ2UoKS5uZXh0RmlsZSgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdyZWxhdGl2ZSc6XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCB5ZXQnKTtcbiAgICAgICAgICAgIGNhc2UgJ3JlbGF0aXZlLWluLXBhY2thZ2UnOlxuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnJlc29sdmVJbXBvcnRJblBhY2thZ2UoaW1wb3J0UmVzb3VyY2UsIGRlcHRoLm5leHRGaWxlKCkpO1xuICAgICAgICAgICAgY2FzZSAnYnJ1dGVmb3JjZSc6IHtcblxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyByZXNvbHZlSW1wb3J0SW5QYWNrYWdlKGltcG9ydFJlc291cmNlOiBJbXBvcnRSZXNvdXJjZVBhdGhSZWxhdGl2ZUluUGFja2FnZSwgZGVwdGg6IFJlY3Vyc2lvbkRlcHRoKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwicmVzb2x2ZUltcG9ydEluUGFja2FnZVwiLCBpbXBvcnRSZXNvdXJjZSwgZGVwdGgpO1xuXG4gICAgICAgIGNvbnN0IGNvbnRlbnRzID0gYXdhaXQgdGhpcy5sb2FkU291cmNlRmlsZUNvbnRlbnRzKGltcG9ydFJlc291cmNlKTtcblxuICAgICAgICBpZiAoY29udGVudHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgc291cmNlLCBhdCB9ID0gY29udGVudHM7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZU1vZGVsKFxuICAgICAgICAgICAgICAgIHNvdXJjZSxcbiAgICAgICAgICAgICAgICB0aGlzLm1vbmFjby5VcmkucGFyc2UodGhpcy5vcHRpb25zLmZpbGVSb290UGF0aCArIHBhdGguam9pbihgbm9kZV9tb2R1bGVzLyR7aW1wb3J0UmVzb3VyY2UucGFja2FnZU5hbWV9YCwgYXQpKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgYXdhaXQgdGhpcy5yZXNvbHZlSW1wb3J0c0luRmlsZShcbiAgICAgICAgICAgICAgICBzb3VyY2UsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBraW5kOiAncmVsYXRpdmUtaW4tcGFja2FnZScsXG4gICAgICAgICAgICAgICAgICAgIHBhY2thZ2VOYW1lOiBpbXBvcnRSZXNvdXJjZS5wYWNrYWdlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlUGF0aDogcGF0aC5kaXJuYW1lKGF0KSxcbiAgICAgICAgICAgICAgICAgICAgaW1wb3J0UGF0aDogJycsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBkZXB0aFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgcmVzb2x2ZUltcG9ydEZyb21QYWNrYWdlUm9vdChcbiAgICAgICAgaW1wb3J0UmVzb3VyY2U6IEltcG9ydFJlc291cmNlUGF0aFBhY2thZ2VcbiAgICApOiBQcm9taXNlPEltcG9ydFJlc291cmNlUGF0aFJlbGF0aXZlSW5QYWNrYWdlIHwgdm9pZD4ge1xuICAgICAgICBjb25zb2xlLmxvZyhcInJlc29sdmVJbXBvcnRGcm9tUGFja2FnZVJvb3RcIiwgaW1wb3J0UmVzb3VyY2UpO1xuXG4gICAgICAgIGNvbnN0IGZhaWxlZFByb2dyZXNzVXBkYXRlID0ge1xuICAgICAgICAgICAgdHlwZTogJ0xvb2tlZFVwUGFja2FnZScsXG4gICAgICAgICAgICBwYWNrYWdlOiBpbXBvcnRSZXNvdXJjZS5wYWNrYWdlTmFtZSxcbiAgICAgICAgICAgIGRlZmluaXRlbHlUeXBlZDogZmFsc2UsXG4gICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgfSBhcyBjb25zdDtcblxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLm9ubHlTcGVjaWZpZWRQYWNrYWdlcykge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnZlcnNpb25zPy5baW1wb3J0UmVzb3VyY2UucGFja2FnZU5hbWVdICYmICF0aGlzLnZlcnNpb25zPy5bJ0B0eXBlcy8nICsgaW1wb3J0UmVzb3VyY2UucGFja2FnZU5hbWVdKSB7XG4gICAgICAgICAgICAgICAgaW52b2tlVXBkYXRlKGZhaWxlZFByb2dyZXNzVXBkYXRlLCB0aGlzLm9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZG9lc1BrZ0pzb25IYXNTdWJwYXRoID0gaW1wb3J0UmVzb3VyY2UuaW1wb3J0UGF0aD8ubGVuZ3RoID8/IDAgPiAwO1xuICAgICAgICBsZXQgcGtnSnNvblN1YnBhdGggPSBkb2VzUGtnSnNvbkhhc1N1YnBhdGggPyBgLyR7aW1wb3J0UmVzb3VyY2UuaW1wb3J0UGF0aH1gIDogJyc7XG4gICAgICAgIGxldCBwa2dKc29uID0gYXdhaXQgdGhpcy5yZXNvbHZlUGFja2FnZUpzb24oXG4gICAgICAgICAgICBpbXBvcnRSZXNvdXJjZS5wYWNrYWdlTmFtZSxcbiAgICAgICAgICAgIHRoaXMudmVyc2lvbnM/LltpbXBvcnRSZXNvdXJjZS5wYWNrYWdlTmFtZV0sXG4gICAgICAgICAgICBkb2VzUGtnSnNvbkhhc1N1YnBhdGggPyBpbXBvcnRSZXNvdXJjZS5pbXBvcnRQYXRoIDogdW5kZWZpbmVkXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKCFwa2dKc29uICYmIGRvZXNQa2dKc29uSGFzU3VicGF0aCkge1xuICAgICAgICAgICAgcGtnSnNvbiA9IGF3YWl0IHRoaXMucmVzb2x2ZVBhY2thZ2VKc29uKGltcG9ydFJlc291cmNlLnBhY2thZ2VOYW1lLCB0aGlzLnZlcnNpb25zPy5baW1wb3J0UmVzb3VyY2UucGFja2FnZU5hbWVdKTtcbiAgICAgICAgICAgIHBrZ0pzb25TdWJwYXRoID0gJyc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXBrZ0pzb24pIHJldHVybiBpbnZva2VVcGRhdGUoZmFpbGVkUHJvZ3Jlc3NVcGRhdGUsIHRoaXMub3B0aW9ucyk7XG5cbiAgICAgICAgY29uc3QgcGtnID0gSlNPTi5wYXJzZShwa2dKc29uKTtcblxuICAgICAgICBjb25zb2xlLmxvZyhcInBhY2thZ2UgbWV0YVwiLCBwa2cpO1xuXG4gICAgICAgIGlmIChwa2cudHlwaW5ncyB8fCBwa2cudHlwZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHR5cGluZ3MgPSBwa2cudHlwaW5ncyB8fCBwa2cudHlwZXM7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZU1vZGVsKFxuICAgICAgICAgICAgICAgIHBrZ0pzb24sXG4gICAgICAgICAgICAgICAgdGhpcy5tb25hY28uVXJpLnBhcnNlKFxuICAgICAgICAgICAgICAgICAgICBgJHt0aGlzLm9wdGlvbnMuZmlsZVJvb3RQYXRofW5vZGVfbW9kdWxlcy8ke2ltcG9ydFJlc291cmNlLnBhY2thZ2VOYW1lfSR7cGtnSnNvblN1YnBhdGh9L3BhY2thZ2UuanNvbmBcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBpbnZva2VVcGRhdGUoXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnTG9va2VkVXBQYWNrYWdlJyxcbiAgICAgICAgICAgICAgICAgICAgcGFja2FnZTogaW1wb3J0UmVzb3VyY2UucGFja2FnZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGRlZmluaXRlbHlUeXBlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLnNldFZlcnNpb24oaW1wb3J0UmVzb3VyY2UucGFja2FnZU5hbWUsIHBrZy52ZXJzaW9uKTtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBraW5kOiAncmVsYXRpdmUtaW4tcGFja2FnZScsXG4gICAgICAgICAgICAgICAgcGFja2FnZU5hbWU6IGltcG9ydFJlc291cmNlLnBhY2thZ2VOYW1lLFxuICAgICAgICAgICAgICAgIHNvdXJjZVBhdGg6ICcnLFxuICAgICAgICAgICAgICAgIGltcG9ydFBhdGg6IHBhdGguam9pbihpbXBvcnRSZXNvdXJjZS5pbXBvcnRQYXRoID8/ICcnLCB0eXBpbmdzLnN0YXJ0c1dpdGgoJy4vJykgPyB0eXBpbmdzLnNsaWNlKDIpIDogdHlwaW5ncyksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuXG4gICAgICAgICAgICBjb25zdCB0eXBpbmdQYWNrYWdlTmFtZSA9IGBAdHlwZXMvJHtcbiAgICAgICAgICAgICAgICBpbXBvcnRSZXNvdXJjZS5wYWNrYWdlTmFtZS5zdGFydHNXaXRoKCdAJylcbiAgICAgICAgICAgICAgICAgICAgPyBpbXBvcnRSZXNvdXJjZS5wYWNrYWdlTmFtZS5zbGljZSgxKS5yZXBsYWNlKC9cXC8vLCAnX18nKVxuICAgICAgICAgICAgICAgICAgICA6IGltcG9ydFJlc291cmNlLnBhY2thZ2VOYW1lXG4gICAgICAgICAgICB9YDtcblxuICAgICAgICAgICAgY29uc3QgcGtnSnNvblR5cGluZ3MgPSBhd2FpdCB0aGlzLnJlc29sdmVQYWNrYWdlSnNvbih0eXBpbmdQYWNrYWdlTmFtZSwgdGhpcy52ZXJzaW9ucz8uW3R5cGluZ1BhY2thZ2VOYW1lXSk7XG5cbiAgICAgICAgICAgIGlmICghcGtnSnNvblR5cGluZ3MpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGludm9rZVVwZGF0ZShmYWlsZWRQcm9ncmVzc1VwZGF0ZSwgdGhpcy5vcHRpb25zKTtcblxuICAgICAgICAgICAgY29uc3QgcGtnID0gSlNPTi5wYXJzZShwa2dKc29uVHlwaW5ncyk7XG5cbiAgICAgICAgICAgIGlmICghcGtnLnR5cGluZ3MgJiYgIXBrZy50eXBlcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVzOiB7XG4gICAgICAgICAgICAgICAgICAgIGZpbGVDb3VudDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICBmaWxlczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgW2tleTogc3RyaW5nXToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZXg6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIkZpbGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0JpbmFyeTogXCJ0cnVlXCIgfCBcImZhbHNlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aDogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRUeXBlOiBzdHJpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgaW50ZWdyaXR5OiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgIHNoYXN1bTogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICB0b3RhbFNpemU6IG51bWJlclxuICAgICAgICAgICAgICAgIH0gPSBhd2FpdCBmZXRjaChcImh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL0BkdC1lc2EvZHluYXRyYWNlLWFwaS1jbGllbnQvdi8yLjIuNi9pbmRleFwiLCB7XG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogXCJnZXRcIlxuICAgICAgICAgICAgICAgIH0pLnRoZW4oZSA9PiBlLmpzb24oKSk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCB0eXBpbmdGaWxlcyA9IE9iamVjdC5lbnRyaWVzKGZpbGVzLmZpbGVzKS5tYXAoKFtrZXksIHZhbF0pID0+IHZhbCk7XG5cbiAgICAgICAgICAgICAgICBpbnZva2VVcGRhdGUoXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdMb29rZWRVcFBhY2thZ2UnLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZTogdHlwaW5nUGFja2FnZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZpbml0ZWx5VHlwZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnNcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAga2luZDogJ2JydXRlZm9yY2UnLFxuICAgICAgICAgICAgICAgICAgICBwYWNrYWdlTmFtZTogdHlwaW5nUGFja2FnZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHR5cGluZ0ZpbGVzLFxuICAgICAgICAgICAgICAgIH0gYXMgYW55O1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIC8vIHJldHVybiBpbnZva2VVcGRhdGUoZmFpbGVkUHJvZ3Jlc3NVcGRhdGUsIHRoaXMub3B0aW9ucyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHR5cGluZ3MgPSBwa2cudHlwaW5ncyB8fCBwa2cudHlwZXM7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZU1vZGVsKFxuICAgICAgICAgICAgICAgIHBrZ0pzb25UeXBpbmdzLFxuICAgICAgICAgICAgICAgIHRoaXMubW9uYWNvLlVyaS5wYXJzZShgJHt0aGlzLm9wdGlvbnMuZmlsZVJvb3RQYXRofW5vZGVfbW9kdWxlcy8ke3R5cGluZ1BhY2thZ2VOYW1lfS9wYWNrYWdlLmpzb25gKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaW52b2tlVXBkYXRlKFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0xvb2tlZFVwUGFja2FnZScsXG4gICAgICAgICAgICAgICAgICAgIHBhY2thZ2U6IHR5cGluZ1BhY2thZ2VOYW1lLFxuICAgICAgICAgICAgICAgICAgICBkZWZpbml0ZWx5VHlwZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLnNldFZlcnNpb24odHlwaW5nUGFja2FnZU5hbWUsIHBrZy52ZXJzaW9uKTtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBraW5kOiAncmVsYXRpdmUtaW4tcGFja2FnZScsXG4gICAgICAgICAgICAgICAgcGFja2FnZU5hbWU6IHR5cGluZ1BhY2thZ2VOYW1lLFxuICAgICAgICAgICAgICAgIHNvdXJjZVBhdGg6ICcnLFxuICAgICAgICAgICAgICAgIGltcG9ydFBhdGg6IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICAgICAgaW1wb3J0UmVzb3VyY2UuaW1wb3J0UGF0aCA/PyAnJyxcbiAgICAgICAgICAgICAgICAgICAgdHlwaW5ncy5zdGFydHNXaXRoKCcuLycpID8gdHlwaW5ncy5zbGljZSgyKSA6IHR5cGluZ3NcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgbG9hZFNvdXJjZUZpbGVDb250ZW50cyhcbiAgICAgICAgaW1wb3J0UmVzb3VyY2U6IEltcG9ydFJlc291cmNlUGF0aFJlbGF0aXZlSW5QYWNrYWdlXG4gICAgKTogUHJvbWlzZTx7IHNvdXJjZTogc3RyaW5nOyBhdDogc3RyaW5nIH0gfCBudWxsPiB7XG4gICAgICAgIGNvbnN0IHByb2dyZXNzVXBkYXRlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgIGltcG9ydFJlc291cmNlLnBhY2thZ2VOYW1lLFxuICAgICAgICAgICAgaW1wb3J0UmVzb3VyY2Uuc291cmNlUGF0aCxcbiAgICAgICAgICAgIGltcG9ydFJlc291cmNlLmltcG9ydFBhdGhcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBmYWlsZWRQcm9ncmVzc1VwZGF0ZSA9IHtcbiAgICAgICAgICAgIHR5cGU6ICdMb29rZWRVcFR5cGVGaWxlJyxcbiAgICAgICAgICAgIHBhdGg6IHByb2dyZXNzVXBkYXRlUGF0aCxcbiAgICAgICAgICAgIGRlZmluaXRlbHlUeXBlZDogZmFsc2UsXG4gICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgfSBhcyBjb25zdDtcblxuICAgICAgICBjb25zdCBwa2dOYW1lID0gaW1wb3J0UmVzb3VyY2UucGFja2FnZU5hbWU7XG4gICAgICAgIGNvbnN0IHZlcnNpb24gPSB0aGlzLmdldFZlcnNpb24oaW1wb3J0UmVzb3VyY2UucGFja2FnZU5hbWUpO1xuXG4gICAgICAgIGxldCBhcHBlbmRzID0gWycuZC50cycsICcvaW5kZXguZC50cycsICcudHMnLCAnLnRzeCcsICcvaW5kZXgudHMnLCAnL2luZGV4LnRzeCddO1xuXG4gICAgICAgIGlmIChhcHBlbmRzLm1hcChhcHBlbmQgPT4gaW1wb3J0UmVzb3VyY2UuaW1wb3J0UGF0aC5lbmRzV2l0aChhcHBlbmQpKS5yZWR1Y2UoKGEsIGIpID0+IGEgfHwgYiwgZmFsc2UpKSB7XG4gICAgICAgICAgICBjb25zdCBzb3VyY2UgPSBhd2FpdCB0aGlzLnJlc29sdmVTb3VyY2VGaWxlKFxuICAgICAgICAgICAgICAgIHBrZ05hbWUsXG4gICAgICAgICAgICAgICAgdmVyc2lvbixcbiAgICAgICAgICAgICAgICBwYXRoLmpvaW4oaW1wb3J0UmVzb3VyY2Uuc291cmNlUGF0aCwgaW1wb3J0UmVzb3VyY2UuaW1wb3J0UGF0aClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoc291cmNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgc291cmNlLCBhdDogcGF0aC5qb2luKGltcG9ydFJlc291cmNlLnNvdXJjZVBhdGgsIGltcG9ydFJlc291cmNlLmltcG9ydFBhdGgpIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGFwcGVuZCBvZiBhcHBlbmRzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZnVsbFBhdGggPSBwYXRoLmpvaW4oaW1wb3J0UmVzb3VyY2Uuc291cmNlUGF0aCwgaW1wb3J0UmVzb3VyY2UuaW1wb3J0UGF0aCkgKyBhcHBlbmQ7XG4gICAgICAgICAgICAgICAgY29uc3Qgc291cmNlID0gYXdhaXQgdGhpcy5yZXNvbHZlU291cmNlRmlsZShwa2dOYW1lLCB2ZXJzaW9uLCBmdWxsUGF0aCk7XG4gICAgICAgICAgICAgICAgaW52b2tlVXBkYXRlKFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnQXR0ZW1wdGVkTG9va1VwRmlsZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiBwYXRoLmpvaW4ocGtnTmFtZSwgZnVsbFBhdGgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogISFzb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3B0aW9uc1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKHNvdXJjZSkge1xuICAgICAgICAgICAgICAgICAgICBpbnZva2VVcGRhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0xvb2tlZFVwVHlwZUZpbGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6IHBhdGguam9pbihwa2dOYW1lLCBmdWxsUGF0aCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgc291cmNlLCBhdDogZnVsbFBhdGggfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwa2dKc29uID0gYXdhaXQgdGhpcy5yZXNvbHZlUGFja2FnZUpzb24oXG4gICAgICAgICAgICBwa2dOYW1lLFxuICAgICAgICAgICAgdmVyc2lvbixcbiAgICAgICAgICAgIHBhdGguam9pbihpbXBvcnRSZXNvdXJjZS5zb3VyY2VQYXRoLCBpbXBvcnRSZXNvdXJjZS5pbXBvcnRQYXRoKVxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChwa2dKc29uKSB7XG4gICAgICAgICAgICBjb25zdCB7IHR5cGVzIH0gPSBKU09OLnBhcnNlKHBrZ0pzb24pO1xuICAgICAgICAgICAgaWYgKHR5cGVzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZnVsbFBhdGggPSBwYXRoLmpvaW4oaW1wb3J0UmVzb3VyY2Uuc291cmNlUGF0aCwgaW1wb3J0UmVzb3VyY2UuaW1wb3J0UGF0aCwgdHlwZXMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IGF3YWl0IHRoaXMucmVzb2x2ZVNvdXJjZUZpbGUocGtnTmFtZSwgdmVyc2lvbiwgZnVsbFBhdGgpO1xuICAgICAgICAgICAgICAgIGlmIChzb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgaW52b2tlVXBkYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdMb29rZWRVcFR5cGVGaWxlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiBwYXRoLmpvaW4ocGtnTmFtZSwgZnVsbFBhdGgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHNvdXJjZSwgYXQ6IGZ1bGxQYXRoIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaW52b2tlVXBkYXRlKGZhaWxlZFByb2dyZXNzVXBkYXRlLCB0aGlzLm9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFZlcnNpb24ocGFja2FnZU5hbWU6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy52ZXJzaW9ucz8uW3BhY2thZ2VOYW1lXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0VmVyc2lvbnModmVyc2lvbnM6IHsgW3BhY2thZ2VOYW1lOiBzdHJpbmddOiBzdHJpbmcgfSkge1xuICAgICAgICB0aGlzLnZlcnNpb25zID0gdmVyc2lvbnM7XG4gICAgICAgIHRoaXMub3B0aW9ucy5vblVwZGF0ZVZlcnNpb25zPy4odmVyc2lvbnMpO1xuICAgICAgICAvLyBUT0RPIHJlbG9hZCBwYWNrYWdlcyB3aG9zZSB2ZXJzaW9uIGhhcyBjaGFuZ2VkXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRWZXJzaW9uKHBhY2thZ2VOYW1lOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZykge1xuICAgICAgICB0aGlzLnNldFZlcnNpb25zKHtcbiAgICAgICAgICAgIC4uLnRoaXMudmVyc2lvbnMsXG4gICAgICAgICAgICBbcGFja2FnZU5hbWVdOiB2ZXJzaW9uLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZU1vZGVsKHNvdXJjZTogc3RyaW5nLCB1cmk6IG1vbmFjby5VcmkpIHtcbiAgICAgICAgdXJpID0gdXJpLndpdGgoeyBwYXRoOiB1cmkucGF0aC5yZXBsYWNlKCdAdHlwZXMvJywgJycpIH0pO1xuICAgICAgICBpZiAoIXRoaXMubW9uYWNvLmVkaXRvci5nZXRNb2RlbCh1cmkpKSB7XG4gICAgICAgICAgICB0aGlzLm1vbmFjby5lZGl0b3IuY3JlYXRlTW9kZWwoc291cmNlLCAndHlwZXNjcmlwdCcsIHVyaSk7XG4gICAgICAgICAgICB0aGlzLm5ld0ltcG9ydHNSZXNvbHZlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGhhc2hJbXBvcnRSZXNvdXJjZVBhdGgocDogSW1wb3J0UmVzb3VyY2VQYXRoKSB7XG4gICAgICAgIHJldHVybiBpbXBvcnRSZXNvdXJjZVBhdGhUb1N0cmluZyhwKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHJlc29sdmVQYWNrYWdlSnNvbihcbiAgICAgICAgcGFja2FnZU5hbWU6IHN0cmluZyxcbiAgICAgICAgdmVyc2lvbj86IHN0cmluZyxcbiAgICAgICAgc3ViUGF0aD86IHN0cmluZ1xuICAgICk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG5cbiAgICAgICAgY29uc3QgdXJpID0gcGF0aC5qb2luKHBhY2thZ2VOYW1lICsgKHZlcnNpb24gPyBgQCR7dmVyc2lvbn1gIDogJycpLCBzdWJQYXRoID8/ICcnLCAncGFja2FnZS5qc29uJyk7XG4gICAgICAgIGxldCBpc0F2YWlsYWJsZSA9IGZhbHNlO1xuICAgICAgICBsZXQgY29udGVudDogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmICh0aGlzLmNhY2hlLmlzRmlsZUF2YWlsYWJsZSkge1xuICAgICAgICAgICAgaXNBdmFpbGFibGUgPSBhd2FpdCB0aGlzLmNhY2hlLmlzRmlsZUF2YWlsYWJsZSh1cmkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29udGVudCA9IGF3YWl0IHRoaXMuY2FjaGUuZ2V0RmlsZSh1cmkpO1xuICAgICAgICAgICAgaXNBdmFpbGFibGUgPSBjb250ZW50ICE9PSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNBdmFpbGFibGUpIHtcbiAgICAgICAgICAgIHJldHVybiBjb250ZW50ID8/IChhd2FpdCB0aGlzLmNhY2hlLmdldEZpbGUodXJpKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcInJlY3Vyc2luZyByZXNvbHZlUGFja2FnZUpzb25cIiwgcGFja2FnZU5hbWUsIHZlcnNpb24sIHN1YlBhdGgpXG4gICAgICAgICAgICBjb250ZW50ID0gYXdhaXQgVW5wa2dTb3VyY2VSZXNvbHZlci5yZXNvbHZlUGFja2FnZUpzb24ocGFja2FnZU5hbWUsIHZlcnNpb24sIHN1YlBhdGgpO1xuICAgICAgICAgICAgaWYgKGNvbnRlbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhY2hlLnN0b3JlRmlsZSh1cmksIGNvbnRlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHJlc29sdmVTb3VyY2VGaWxlKFxuICAgICAgICBwYWNrYWdlTmFtZTogc3RyaW5nLFxuICAgICAgICB2ZXJzaW9uOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgICAgIGZpbGVQYXRoOiBzdHJpbmdcbiAgICApOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuXG4gICAgICAgIGNvbnN0IHVyaSA9IHBhdGguam9pbihwYWNrYWdlTmFtZSArICh2ZXJzaW9uID8gYEAke3ZlcnNpb259YCA6ICcnKSwgZmlsZVBhdGgpO1xuICAgICAgICBsZXQgaXNBdmFpbGFibGUgPSBmYWxzZTtcbiAgICAgICAgbGV0IGNvbnRlbnQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAodGhpcy5jYWNoZS5pc0ZpbGVBdmFpbGFibGUpIHtcbiAgICAgICAgICAgIGlzQXZhaWxhYmxlID0gYXdhaXQgdGhpcy5jYWNoZS5pc0ZpbGVBdmFpbGFibGUodXJpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnRlbnQgPSBhd2FpdCB0aGlzLmNhY2hlLmdldEZpbGUodXJpKTtcbiAgICAgICAgICAgIGlzQXZhaWxhYmxlID0gY29udGVudCAhPT0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzQXZhaWxhYmxlKSB7XG4gICAgICAgICAgICBpbnZva2VVcGRhdGUoXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnTG9hZGVkRnJvbUNhY2hlJyxcbiAgICAgICAgICAgICAgICAgICAgaW1wb3J0UGF0aDogdXJpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRlbnQgPz8gKGF3YWl0IHRoaXMuY2FjaGUuZ2V0RmlsZSh1cmkpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnRlbnQgPSBhd2FpdCBVbnBrZ1NvdXJjZVJlc29sdmVyLnJlc29sdmVTb3VyY2VGaWxlKHBhY2thZ2VOYW1lLCB2ZXJzaW9uLCBmaWxlUGF0aCk7XG4gICAgICAgICAgICBpZiAoY29udGVudCkge1xuICAgICAgICAgICAgICAgIGludm9rZVVwZGF0ZShcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1N0b3JlZFRvQ2FjaGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0UGF0aDogdXJpLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnNcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGUuc3RvcmVGaWxlKHVyaSwgY29udGVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY29udGVudDtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
@@ -1,112 +0,0 @@
1
- import { ImportResolver } from './import-resolver';
2
- import * as path from 'path-browserify';
3
- import { invokeUpdate } from './update-emitter';
4
- import { RecursionDepth } from './recursion-depth';
5
- import { DummySourceCache } from './dummy-source-cache';
6
- // https://github.com/lukasbach/monaco-editor-auto-typings
7
- export class MonacoAutoTypeImporter {
8
- constructor(editor, options) {
9
- this.editor = editor;
10
- this.options = options;
11
- this.disposables = [];
12
- this.importResolver = new ImportResolver(options);
13
- const changeModelDisposable = editor.onDidChangeModelContent(e => {
14
- this.debouncedResolveContents();
15
- });
16
- this.disposables.push(changeModelDisposable);
17
- this.resolveContents();
18
- if (!options.dontAdaptEditorOptions) {
19
- options.monaco.languages.typescript.typescriptDefaults.setCompilerOptions({
20
- ...options.monaco.languages.typescript.typescriptDefaults.getCompilerOptions(),
21
- moduleResolution: options.monaco.languages.typescript.ModuleResolutionKind.NodeJs,
22
- allowSyntheticDefaultImports: true,
23
- rootDir: options.fileRootPath,
24
- });
25
- }
26
- }
27
- static async create(editor, options) {
28
- if (options?.shareCache && options.sourceCache && !MonacoAutoTypeImporter.sharedCache) {
29
- MonacoAutoTypeImporter.sharedCache = options.sourceCache;
30
- }
31
- const monacoInstance = options?.monaco ?? window['monaco'];
32
- if (!monacoInstance) {
33
- throw new Error('monacoInstance not found, you can specify the monaco instance via options.monaco');
34
- }
35
- return new MonacoAutoTypeImporter(editor, {
36
- fileRootPath: 'inmemory://model/',
37
- onlySpecifiedPackages: false,
38
- preloadPackages: false,
39
- shareCache: false,
40
- dontAdaptEditorOptions: false,
41
- dontRefreshModelValueAfterResolvement: false,
42
- sourceCache: MonacoAutoTypeImporter.sharedCache ?? new DummySourceCache(),
43
- debounceDuration: 4000,
44
- fileRecursionDepth: 10,
45
- packageRecursionDepth: 3,
46
- ...options,
47
- monaco: monacoInstance,
48
- });
49
- }
50
- dispose() {
51
- this.disposables.forEach(d => d.dispose());
52
- }
53
- setVersions(versions) {
54
- this.importResolver.setVersions(versions);
55
- this.options.versions = versions;
56
- }
57
- async clearCache() {
58
- await this.options.sourceCache.clear();
59
- }
60
- debouncedResolveContents() {
61
- if (this.isResolving) {
62
- return;
63
- }
64
- invokeUpdate({ type: 'CodeChanged' }, this.options);
65
- if (this.options.debounceDuration <= 0) {
66
- this.resolveContents();
67
- }
68
- else {
69
- if (this.debounceTimer !== undefined) {
70
- clearTimeout(this.debounceTimer);
71
- }
72
- this.debounceTimer = setTimeout(async () => {
73
- await this.resolveContents();
74
- this.debounceTimer = undefined;
75
- }, this.options.debounceDuration);
76
- }
77
- }
78
- async resolveContents() {
79
- this.isResolving = true;
80
- invokeUpdate({ type: 'ResolveNewImports' }, this.options);
81
- const model = this.editor.getModel();
82
- // This can happen when the editor is disposed before all typings
83
- // are installed.
84
- if (!model) {
85
- throw Error('No model');
86
- }
87
- const content = model.getLinesContent();
88
- try {
89
- await this.importResolver.resolveImportsInFile(content.join('\n'), path.dirname(model.uri.toString()), new RecursionDepth(this.options));
90
- }
91
- catch (e) {
92
- if (this.options.onError) {
93
- this.options.onError(e.message ?? e);
94
- }
95
- else {
96
- throw e;
97
- }
98
- }
99
- if (this.importResolver.wereNewImportsResolved()) {
100
- if (!this.options.dontRefreshModelValueAfterResolvement) {
101
- const currentPosition = this.editor.getPosition();
102
- model.setValue(model.getValue());
103
- if (currentPosition) {
104
- this.editor.setPosition(currentPosition);
105
- }
106
- }
107
- this.importResolver.resetNewImportsResolved();
108
- }
109
- this.isResolving = false;
110
- }
111
- }
112
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvY29tcG9uZW50cy92c2NvZGUvdHMtdHlwZS1yZXNvbHZlci9tYWluLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEtBQUssSUFBSSxNQUFNLGlCQUFpQixDQUFDO0FBRXhDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFbkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFJeEQsMERBQTBEO0FBQzFELE1BQU0sT0FBTyxzQkFBc0I7SUFPL0IsWUFBMkIsTUFBYyxFQUFVLE9BQWdCO1FBQXhDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFBVSxZQUFPLEdBQVAsT0FBTyxDQUFTO1FBRjNELGdCQUFXLEdBQXlCLEVBQUUsQ0FBQztRQUczQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRWxELE1BQU0scUJBQXFCLEdBQUcsTUFBTSxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQzdELElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFdkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1lBQ2xDLE9BQU8sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxrQkFBa0IsQ0FBQztnQkFDdEUsR0FBRyxPQUFP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RSxDQUFDO2dCQUNsRCxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO2dCQUNqQyxJQUFJLGVBQWUsRUFBRSxDQUFDO29CQUNsQixJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsQ0FBQztnQkFDN0MsQ0FBQztZQUNMLENBQUM7WUFDRCxJQUFJLENBQUMsY0FBYyxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFDbEQsQ0FBQztRQUVELElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0lBQzdCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEltcG9ydFJlc29sdmVyIH0gZnJvbSAnLi9pbXBvcnQtcmVzb2x2ZXInO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoLWJyb3dzZXJpZnknO1xuaW1wb3J0IHR5cGUgKiBhcyBtb25hY28gZnJvbSAnbW9uYWNvLWVkaXRvcic7XG5pbXBvcnQgeyBpbnZva2VVcGRhdGUgfSBmcm9tICcuL3VwZGF0ZS1lbWl0dGVyJztcbmltcG9ydCB7IFJlY3Vyc2lvbkRlcHRoIH0gZnJvbSAnLi9yZWN1cnNpb24tZGVwdGgnO1xuaW1wb3J0IHsgT3B0aW9ucywgU291cmNlQ2FjaGUgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IER1bW15U291cmNlQ2FjaGUgfSBmcm9tICcuL2R1bW15LXNvdXJjZS1jYWNoZSc7XG5cbnR5cGUgRWRpdG9yID0gbW9uYWNvLmVkaXRvci5JQ29kZUVkaXRvciB8IG1vbmFjby5lZGl0b3IuSVN0YW5kYWxvbmVDb2RlRWRpdG9yO1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vbHVrYXNiYWNoL21vbmFjby1lZGl0b3ItYXV0by10eXBpbmdzXG5leHBvcnQgY2xhc3MgTW9uYWNvQXV0b1R5cGVJbXBvcnRlciBpbXBsZW1lbnRzIG1vbmFjby5JRGlzcG9zYWJsZSB7XG4gICAgcHJpdmF0ZSBzdGF0aWMgc2hhcmVkQ2FjaGU/OiBTb3VyY2VDYWNoZTtcbiAgICBwcml2YXRlIGltcG9ydFJlc29sdmVyOiBJbXBvcnRSZXNvbHZlcjtcbiAgICBwcml2YXRlIGRlYm91bmNlVGltZXI/OiBudW1iZXI7XG4gICAgcHJpdmF0ZSBpc1Jlc29sdmluZz86IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBkaXNwb3NhYmxlczogbW9uYWNvLklEaXNwb3NhYmxlW10gPSBbXTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIGVkaXRvcjogRWRpdG9yLCBwcml2YXRlIG9wdGlvbnM6IE9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5pbXBvcnRSZXNvbHZlciA9IG5ldyBJbXBvcnRSZXNvbHZlcihvcHRpb25zKTtcblxuICAgICAgICBjb25zdCBjaGFuZ2VNb2RlbERpc3Bvc2FibGUgPSBlZGl0b3Iub25EaWRDaGFuZ2VNb2RlbENvbnRlbnQoZSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRlYm91bmNlZFJlc29sdmVDb250ZW50cygpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kaXNwb3NhYmxlcy5wdXNoKGNoYW5nZU1vZGVsRGlzcG9zYWJsZSk7XG4gICAgICAgIHRoaXMucmVzb2x2ZUNvbnRlbnRzKCk7XG5cbiAgICAgICAgaWYgKCFvcHRpb25zLmRvbnRBZGFwdEVkaXRvck9wdGlvbnMpIHtcbiAgICAgICAgICAgIG9wdGlvbnMubW9uYWNvLmxhbmd1YWdlcy50eXBlc2NyaXB0LnR5cGVzY3JpcHREZWZhdWx0cy5zZXRDb21waWxlck9wdGlvbnMoe1xuICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMubW9uYWNvLmxhbmd1YWdlcy50eXBlc2NyaXB0LnR5cGVzY3JpcHREZWZhdWx0cy5nZXRDb21waWxlck9wdGlvbnMoKSxcbiAgICAgICAgICAgICAgICBtb2R1bGVSZXNvbHV0aW9uOiBvcHRpb25zLm1vbmFjby5sYW5ndWFnZXMudHlwZXNjcmlwdC5Nb2R1bGVSZXNvbHV0aW9uS2luZC5Ob2RlSnMsXG4gICAgICAgICAgICAgICAgYWxsb3dTeW50aGV0aWNEZWZhdWx0SW1wb3J0czogdHJ1ZSxcbiAgICAgICAgICAgICAgICByb290RGlyOiBvcHRpb25zLmZpbGVSb290UGF0aCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBhc3luYyBjcmVhdGUoZWRpdG9yOiBFZGl0b3IsIG9wdGlvbnM/OiBQYXJ0aWFsPE9wdGlvbnM+KTogUHJvbWlzZTxNb25hY29BdXRvVHlwZUltcG9ydGVyPiB7XG4gICAgICAgIGlmIChvcHRpb25zPy5zaGFyZUNhY2hlICYmIG9wdGlvbnMuc291cmNlQ2FjaGUgJiYgIU1vbmFjb0F1dG9UeXBlSW1wb3J0ZXIuc2hhcmVkQ2FjaGUpIHtcbiAgICAgICAgICAgIE1vbmFjb0F1dG9UeXBlSW1wb3J0ZXIuc2hhcmVkQ2FjaGUgPSBvcHRpb25zLnNvdXJjZUNhY2hlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbW9uYWNvSW5zdGFuY2UgPSBvcHRpb25zPy5tb25hY28gPz8gd2luZG93Wydtb25hY28nXTtcblxuICAgICAgICBpZiAoIW1vbmFjb0luc3RhbmNlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ21vbmFjb0luc3RhbmNlIG5vdCBmb3VuZCwgeW91IGNhbiBzcGVjaWZ5IHRoZSBtb25hY28gaW5zdGFuY2UgdmlhIG9wdGlvbnMubW9uYWNvJyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IE1vbmFjb0F1dG9UeXBlSW1wb3J0ZXIoZWRpdG9yLCB7XG4gICAgICAgICAgICBmaWxlUm9vdFBhdGg6ICdpbm1lbW9yeTovL21vZGVsLycsXG4gICAgICAgICAgICBvbmx5U3BlY2lmaWVkUGFja2FnZXM6IGZhbHNlLFxuICAgICAgICAgICAgcHJlbG9hZFBhY2thZ2VzOiBmYWxzZSxcbiAgICAgICAgICAgIHNoYXJlQ2FjaGU6IGZhbHNlLFxuICAgICAgICAgICAgZG9udEFkYXB0RWRpdG9yT3B0aW9uczogZmFsc2UsXG4gICAgICAgICAgICBkb250UmVmcmVzaE1vZGVsVmFsdWVBZnRlclJlc29sdmVtZW50OiBmYWxzZSxcbiAgICAgICAgICAgIHNvdXJjZUNhY2hlOiBNb25hY29BdXRvVHlwZUltcG9ydGVyLnNoYXJlZENhY2hlID8/IG5ldyBEdW1teVNvdXJjZUNhY2hlKCksXG4gICAgICAgICAgICBkZWJvdW5jZUR1cmF0aW9uOiA0MDAwLFxuICAgICAgICAgICAgZmlsZVJlY3Vyc2lvbkRlcHRoOiAxMCxcbiAgICAgICAgICAgIHBhY2thZ2VSZWN1cnNpb25EZXB0aDogMyxcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBtb25hY286IG1vbmFjb0luc3RhbmNlLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGlzcG9zZSgpIHtcbiAgICAgICAgdGhpcy5kaXNwb3NhYmxlcy5mb3JFYWNoKGQgPT4gZC5kaXNwb3NlKCkpXG4gICAgfVxuXG4gICAgcHVibGljIHNldFZlcnNpb25zKHZlcnNpb25zOiB7IFtwYWNrYWdlTmFtZTogc3RyaW5nXTogc3RyaW5nIH0pIHtcbiAgICAgICAgdGhpcy5pbXBvcnRSZXNvbHZlci5zZXRWZXJzaW9ucyh2ZXJzaW9ucyk7XG4gICAgICAgIHRoaXMub3B0aW9ucy52ZXJzaW9ucyA9IHZlcnNpb25zO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjbGVhckNhY2hlKCkge1xuICAgICAgICBhd2FpdCB0aGlzLm9wdGlvbnMuc291cmNlQ2FjaGUuY2xlYXIoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRlYm91bmNlZFJlc29sdmVDb250ZW50cygpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNSZXNvbHZpbmcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGludm9rZVVwZGF0ZSh7IHR5cGU6ICdDb2RlQ2hhbmdlZCcgfSwgdGhpcy5vcHRpb25zKTtcblxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmRlYm91bmNlRHVyYXRpb24gPD0gMCkge1xuICAgICAgICAgICAgdGhpcy5yZXNvbHZlQ29udGVudHMoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRlYm91bmNlVGltZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmRlYm91bmNlVGltZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5kZWJvdW5jZVRpbWVyID0gc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZXNvbHZlQ29udGVudHMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRlYm91bmNlVGltZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9LCB0aGlzLm9wdGlvbnMuZGVib3VuY2VEdXJhdGlvbikgYXMgYW55O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyByZXNvbHZlQ29udGVudHMoKSB7XG4gICAgICAgIHRoaXMuaXNSZXNvbHZpbmcgPSB0cnVlO1xuICAgICAgICBpbnZva2VVcGRhdGUoeyB0eXBlOiAnUmVzb2x2ZU5ld0ltcG9ydHMnIH0sIHRoaXMub3B0aW9ucyk7XG5cbiAgICAgICAgY29uc3QgbW9kZWwgPSB0aGlzLmVkaXRvci5nZXRNb2RlbCgpO1xuICAgICAgICAvLyBUaGlzIGNhbiBoYXBwZW4gd2hlbiB0aGUgZWRpdG9yIGlzIGRpc3Bvc2VkIGJlZm9yZSBhbGwgdHlwaW5nc1xuICAgICAgICAvLyBhcmUgaW5zdGFsbGVkLlxuICAgICAgICBpZiAoIW1vZGVsKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcignTm8gbW9kZWwnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBtb2RlbC5nZXRMaW5lc0NvbnRlbnQoKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5pbXBvcnRSZXNvbHZlci5yZXNvbHZlSW1wb3J0c0luRmlsZShcbiAgICAgICAgICAgICAgICBjb250ZW50LmpvaW4oJ1xcbicpLFxuICAgICAgICAgICAgICAgIHBhdGguZGlybmFtZShtb2RlbC51cmkudG9TdHJpbmcoKSksXG4gICAgICAgICAgICAgICAgbmV3IFJlY3Vyc2lvbkRlcHRoKHRoaXMub3B0aW9ucylcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMub25FcnJvcikge1xuICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5vbkVycm9yKChlIGFzIEVycm9yKS5tZXNzYWdlID8/IGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmltcG9ydFJlc29sdmVyLndlcmVOZXdJbXBvcnRzUmVzb2x2ZWQoKSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuZG9udFJlZnJlc2hNb2RlbFZhbHVlQWZ0ZXJSZXNvbHZlbWVudCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRQb3NpdGlvbiA9IHRoaXMuZWRpdG9yLmdldFBvc2l0aW9uKCk7XG4gICAgICAgICAgICAgICAgbW9kZWwuc2V0VmFsdWUobW9kZWwuZ2V0VmFsdWUoKSk7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRQb3NpdGlvbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVkaXRvci5zZXRQb3NpdGlvbihjdXJyZW50UG9zaXRpb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaW1wb3J0UmVzb2x2ZXIucmVzZXROZXdJbXBvcnRzUmVzb2x2ZWQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaXNSZXNvbHZpbmcgPSBmYWxzZTtcbiAgICB9XG59XG4iXX0=
@@ -1,21 +0,0 @@
1
- export class RecursionDepth {
2
- constructor(options, fileRecursionDepth = 0, packageRecursionDepth = 0) {
3
- this.options = options;
4
- this.fileRecursionDepth = fileRecursionDepth;
5
- this.packageRecursionDepth = packageRecursionDepth;
6
- }
7
- nextPackage() {
8
- return new RecursionDepth(this.options, this.fileRecursionDepth, this.packageRecursionDepth + 1);
9
- }
10
- nextFile() {
11
- return new RecursionDepth(this.options, this.fileRecursionDepth + 1, this.packageRecursionDepth);
12
- }
13
- same() {
14
- return new RecursionDepth(this.options, this.fileRecursionDepth, this.packageRecursionDepth);
15
- }
16
- shouldStop() {
17
- return ((this.options.fileRecursionDepth > 0 && this.fileRecursionDepth >= this.options.fileRecursionDepth) ||
18
- (this.options.packageRecursionDepth > 0 && this.packageRecursionDepth >= this.options.packageRecursionDepth));
19
- }
20
- }
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjdXJzaW9uLWRlcHRoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3NyYy9jb21wb25lbnRzL3ZzY29kZS90cy10eXBlLXJlc29sdmVyL3JlY3Vyc2lvbi1kZXB0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLE9BQU8sY0FBYztJQUN2QixZQUFvQixPQUFnQixFQUFVLHFCQUFxQixDQUFDLEVBQVUsd0JBQXdCLENBQUM7UUFBbkYsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUFVLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBSTtRQUFVLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBSTtJQUFHLENBQUM7SUFFcEcsV0FBVztRQUNkLE9BQU8sSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3JHLENBQUM7SUFFTSxRQUFRO1FBQ1gsT0FBTyxJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDckcsQ0FBQztJQUVNLElBQUk7UUFDUCxPQUFPLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQ2pHLENBQUM7SUFFTSxVQUFVO1FBQ2IsT0FBTyxDQUNILENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLGtCQUFrQixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUM7WUFDbkcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLHFCQUFxQixHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMscUJBQXFCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxDQUMvRyxDQUFDO0lBQ04sQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT3B0aW9ucyB9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgUmVjdXJzaW9uRGVwdGgge1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgb3B0aW9uczogT3B0aW9ucywgcHJpdmF0ZSBmaWxlUmVjdXJzaW9uRGVwdGggPSAwLCBwcml2YXRlIHBhY2thZ2VSZWN1cnNpb25EZXB0aCA9IDApIHt9XG5cbiAgICBwdWJsaWMgbmV4dFBhY2thZ2UoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVjdXJzaW9uRGVwdGgodGhpcy5vcHRpb25zLCB0aGlzLmZpbGVSZWN1cnNpb25EZXB0aCwgdGhpcy5wYWNrYWdlUmVjdXJzaW9uRGVwdGggKyAxKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmV4dEZpbGUoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVjdXJzaW9uRGVwdGgodGhpcy5vcHRpb25zLCB0aGlzLmZpbGVSZWN1cnNpb25EZXB0aCArIDEsIHRoaXMucGFja2FnZVJlY3Vyc2lvbkRlcHRoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2FtZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWN1cnNpb25EZXB0aCh0aGlzLm9wdGlvbnMsIHRoaXMuZmlsZVJlY3Vyc2lvbkRlcHRoLCB0aGlzLnBhY2thZ2VSZWN1cnNpb25EZXB0aCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNob3VsZFN0b3AoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAodGhpcy5vcHRpb25zLmZpbGVSZWN1cnNpb25EZXB0aCA+IDAgJiYgdGhpcy5maWxlUmVjdXJzaW9uRGVwdGggPj0gdGhpcy5vcHRpb25zLmZpbGVSZWN1cnNpb25EZXB0aCkgfHxcbiAgICAgICAgICAgICh0aGlzLm9wdGlvbnMucGFja2FnZVJlY3Vyc2lvbkRlcHRoID4gMCAmJiB0aGlzLnBhY2thZ2VSZWN1cnNpb25EZXB0aCA+PSB0aGlzLm9wdGlvbnMucGFja2FnZVJlY3Vyc2lvbkRlcHRoKVxuICAgICAgICApO1xuICAgIH1cbn1cbiJdfQ==
@@ -1,14 +0,0 @@
1
- import * as path from 'path-browserify';
2
- export const importResourcePathToString = (p) => {
3
- switch (p.kind) {
4
- case 'package':
5
- return path.join(p.packageName, p.importPath ?? '', 'package.json');
6
- case 'relative':
7
- return path.join(p.sourcePath, p.importPath);
8
- case 'relative-in-package':
9
- return path.join(p.packageName, p.sourcePath, p.importPath);
10
- case 'bruteforce':
11
- throw new Error("Not Implemented");
12
- }
13
- };
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL2NvbXBvbmVudHMvdnNjb2RlL3RzLXR5cGUtcmVzb2x2ZXIvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxLQUFLLElBQUksTUFBTSxpQkFBaUIsQ0FBQztBQWtOeEMsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxDQUFxQixFQUFFLEVBQUU7SUFDaEUsUUFBUSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDYixLQUFLLFNBQVM7WUFDVixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsVUFBVSxJQUFJLEVBQUUsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUN4RSxLQUFLLFVBQVU7WUFDWCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDakQsS0FBSyxxQkFBcUI7WUFDdEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDaEUsS0FBSyxZQUFZO1lBQ2IsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQzNDLENBQUM7QUFDTCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSAqIGFzIG1vbmFjbyBmcm9tICdtb25hY28tZWRpdG9yJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aC1icm93c2VyaWZ5JztcblxuZXhwb3J0IGludGVyZmFjZSBTb3VyY2VDYWNoZSB7XG4gICAgaXNGaWxlQXZhaWxhYmxlPzogKHVyaTogc3RyaW5nKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xuICAgIHN0b3JlRmlsZTogKHVyaTogc3RyaW5nLCBjb250ZW50OiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD47XG4gICAgZ2V0RmlsZTogKHVyaTogc3RyaW5nKSA9PiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD47XG4gICAgY2xlYXI6ICgpID0+IFByb21pc2U8dm9pZD47XG59XG5cbmV4cG9ydCB0eXBlIFByb2dyZXNzVXBkYXRlID1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ0NvZGVDaGFuZ2VkJztcbiAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdSZXNvbHZlTmV3SW1wb3J0cyc7XG4gICAgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAnTG9va2VkVXBUeXBlRmlsZSc7XG4gICAgICAgIHBhdGg6IHN0cmluZztcbiAgICAgICAgc3VjY2VzczogYm9vbGVhbjtcbiAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdBdHRlbXB0ZWRMb29rVXBGaWxlJztcbiAgICAgICAgcGF0aDogc3RyaW5nO1xuICAgICAgICBzdWNjZXNzOiBib29sZWFuO1xuICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ0xvb2tlZFVwUGFja2FnZSc7XG4gICAgICAgIHBhY2thZ2U6IHN0cmluZztcbiAgICAgICAgZGVmaW5pdGVseVR5cGVkOiBib29sZWFuO1xuICAgICAgICBzdWNjZXNzOiBib29sZWFuO1xuICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ0xvYWRlZEZyb21DYWNoZSc7XG4gICAgICAgIGltcG9ydFBhdGg6IHN0cmluZztcbiAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdTdG9yZWRUb0NhY2hlJztcbiAgICAgICAgaW1wb3J0UGF0aDogc3RyaW5nO1xuICAgIH07XG5cblxuXG5leHBvcnQgaW50ZXJmYWNlIE9wdGlvbnMge1xuICAgIC8qKlxuICAgICAqIFNoYXJlIHNvdXJjZSBjYWNoZSBiZXR3ZWVuIG11bHRpcGxlIGVkaXRvciBpbnN0YW5jZXMgYnkgc3RvcmluZ1xuICAgICAqIHRoZSBjYWNoZSBpbiBhIHN0YXRpYyBwcm9wZXJ0eS5cbiAgICAgKlxuICAgICAqIERlZmF1bHRzIHRvIGZhbHNlLlxuICAgICAqL1xuICAgIHNoYXJlQ2FjaGU6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBPbmx5IHVzZSBwYWNrYWdlcyBzcGVjaWZpZWQgaW4gdGhlIGB2ZXJzaW9uc2AgcHJvcGVydHkuXG4gICAgICpcbiAgICAgKiBEZWZhdWx0cyB0byBmYWxzZS5cbiAgICAgKi9cbiAgICBvbmx5U3BlY2lmaWVkUGFja2FnZXM6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBMb2FkIHR5cGluZ3MgZnJvbSBwcmVzcGVjaWZpZWQgdmVyc2lvbnMgd2hlbiBpbml0aWFsaXppbmcuIFZlcnNpb25zXG4gICAgICogbmVlZCB0byBiZSBzcGVjaWZpZWQgaW4gdGhlIGBgdmVyc2lvbnNgYCBvcHRpb24uXG4gICAgICpcbiAgICAgKiBEZWZhdWx0cyB0byBmYWxzZS5cbiAgICAgKi9cbiAgICBwcmVsb2FkUGFja2FnZXM6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGVzIGNvbXBpbGVyIG9wdGlvbnMgdG8gZGVmYXVsdHMgc3VpdGFibGUgZm9yIGF1dG8tbG9hZGVkXG4gICAgICogZGVjbGFyYXRpb25zLCBzcGVjaWZpY2FsbHkgYnkgc2V0dGluZyBgYG1vZHVsZVJlc29sdXRpb25gYCB0b1xuICAgICAqIGBgTm9kZUpzYGAgYW5kIGBgYWxsb3dTeW50aGV0aWNEZWZhdWx0SW1wb3J0c2BgIHRvIHRydWUuXG4gICAgICogT3RoZXIgb3B0aW9ucyBhcmUgbm90IGNoYW5nZWQuIFNldCB0aGlzIHByb3BlcnR5IHRvIHRydWUgdG9cbiAgICAgKiBkaXNhYmxlIHRoaXMgYmVoYXZpb3VyLlxuICAgICAqXG4gICAgICogRGVmYXVsdHMgdG8gZmFsc2UuXG4gICAgICovXG4gICAgZG9udEFkYXB0RWRpdG9yT3B0aW9uczogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEFmdGVyIHR5cGluZ3Mgd2VyZSByZXNvbHZlZCBhbmQgaW5qZWN0ZWQgaW50byBtb25hY28sIGF1dG8tdHlwaW5nc1xuICAgICAqIHVwZGF0ZXMgdGhlIHZhbHVlIG9mIHRoZSBjdXJyZW50IG1vZGVsIHRvIHRyaWdnZXIgYSByZWZyZXNoIGluXG4gICAgICogbW9uYWNvJ3MgdHlwaW5nIGxvZ2ljLCBzbyB0aGF0IGl0IHVzZXMgdGhlIGluamVjdGVkIHR5cGluZ3MuXG4gICAgICovXG4gICAgZG9udFJlZnJlc2hNb2RlbFZhbHVlQWZ0ZXJSZXNvbHZlbWVudDogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIFByZXNwZWNpZmllZCBwYWNrYWdlIHZlcnNpb25zLiBJZiBhIHBhY2thZ2UgaXMgbG9hZGVkIHdob3NlXG4gICAgICogbmFtZSBpcyBzcGVjaWZpZWQgaW4gdGhpcyBvYmplY3QsIGl0IHdpbGwgbG9hZCB3aXRoIHRoZSBleGFjdFxuICAgICAqIHZlcnNpb24gc3BlY2lmaWVkIGluIHRoZSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBFeGFtcGxlOlxuICAgICAqXG4gICAgICogYGBganNvblxuICAgICAqIHtcbiAgICAgKiAgIFwiQHR5cGVzL3JlYWN0XCI6IFwiMTcuMC4wXCIsXG4gICAgICogICBcImNzc3R5cGVcIjogXCIzLjAuNVwiXG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogU2V0dGluZyB0aGUgb3B0aW9uIGBgb25seVNwZWNpZmllZFBhY2thZ2VzYGAgdG8gdHJ1ZSBtYWtlcyB0aGlzXG4gICAgICogcHJvcGVydHkgYWN0IGFzIGEgd2hpdGVsaXN0IGZvciBwYWNrYWdlcy5cbiAgICAgKlxuICAgICAqIFNldHRpbmcgdGhlIG9wdGlvbiBgYHByZWxvYWRQYWNrYWdlc2BgIG1ha2VzIHRoZSBwYWNrYWdlcyBzcGVjaWZpZWRcbiAgICAgKiBpbiB0aGlzIHByb3BlcnR5IGxvYWQgZGlyZWN0bHkgYWZ0ZXIgaW5pdGlhbGl6aW5nIHRoZSBhdXRvLWxvYWRlci5cbiAgICAgKi9cbiAgICB2ZXJzaW9ucz86IHsgW3BhY2thZ2VOYW1lOiBzdHJpbmddOiBzdHJpbmc7IH07XG5cbiAgICAvKipcbiAgICAgKiBJZiBhIG5ldyBwYWNrYWdlIHdhcyBsb2FkZWQsIGl0cyBuYW1lIGFuZCB2ZXJzaW9uIGlzIGFkZGVkIHRvIHRoZVxuICAgICAqIHZlcnNpb24gb2JqZWN0LCBhbmQgdGhpcyBtZXRob2QgaXMgY2FsbGVkIHdpdGggdGhlIHVwZGF0ZWQgb2JqZWN0LlxuICAgICAqIEBwYXJhbSB2ZXJzaW9ucyB1cGRhdGVkIHZlcnNpb25zIG9iamVjdC5cbiAgICAgKi9cbiAgICBvblVwZGF0ZVZlcnNpb25zPzogKHZlcnNpb25zOiB7IFtwYWNrYWdlTmFtZTogc3RyaW5nXTogc3RyaW5nOyB9KSA9PiB2b2lkO1xuXG4gICAgLyoqXG4gICAgICogU3VwcGx5IGEgY2FjaGUgd2hlcmUgZGVjbGFyYXRpb24gZmlsZXMgYW5kIHBhY2thZ2UuanNvbiBmaWxlcyBhcmVcbiAgICAgKiBjYWNoZWQgdG8uIFN1cHBseSBhbiBpbnN0YW5jZSBvZiB7QGxpbmsgTG9jYWxTdG9yYWdlQ2FjaGV9IHRvIGNhY2hlXG4gICAgICogZmlsZXMgdG8gbG9jYWxTdG9yYWdlLlxuICAgICAqL1xuICAgIHNvdXJjZUNhY2hlOiBTb3VyY2VDYWNoZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSByb290IGRpcmVjdG9yeSB3aGVyZSB5b3VyIGVkaXRlZCBmaWxlcyBhcmUuIE11c3QgZW5kIHdpdGhcbiAgICAgKiBhIHNsYXNoLiBUaGUgZGVmYXVsdCBpcyBzdWl0YWJsZSB1bmxlc3MgeW91IGNoYW5nZSB0aGUgZGVmYXVsdFxuICAgICAqIFVSSSBvZiBmaWxlcyBsb2FkZWQgaW4gdGhlIGVkaXRvci5cbiAgICAgKlxuICAgICAqIERlZmF1bHRzIHRvIFwiaW5tZW1vcnk6Ly9tb2RlbC9cIlxuICAgICAqL1xuICAgIGZpbGVSb290UGF0aDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogRGVib3VuY2VzIGNvZGUgcmVhbmFseXppbmcgYWZ0ZXIgdXNlciBoYXMgY2hhbmdlZCB0aGUgZWRpdG9yIGNvbnRlbnRzXG4gICAgICogYnkgdGhlIHNwZWNpZmllZCBhbW91bnQuIFNldCB0byB6ZXJvIHRvIGRpc2FibGUuIFZhbHVlIHByb3ZpZGVkIGluXG4gICAgICogbWlsbGlzZWNvbmRzLlxuICAgICAqXG4gICAgICogRGVmYXVsdHMgdG8gNDAwMCwgaS5lLiA0IHNlY29uZHMuXG4gICAgICovXG4gICAgZGVib3VuY2VEdXJhdGlvbjogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogTWF4aW11bSByZWN1cnNpb24gZGVwdGggZm9yIHJlY3Vyc2luZyBwYWNrYWdlcy4gRGV0ZXJtaW5lcyBob3cgbWFueVxuICAgICAqIG5lc3RlZCBwYWNrYWdlIGRlY2xhcmF0aW9ucyBhcmUgbG9hZGVkLiBGb3IgZXhhbXBsZSwgaWYgYGBwYWNrYWdlUmVjdXJzaW9uRGVwdGhgYFxuICAgICAqIGhhcyB0aGUgdmFsdWUgMiwgdGhlIGNvZGUgaW4gdGhlIG1vbmFjbyBlZGl0b3IgcmVmZXJlbmNlcyBwYWNrYWdlcyBgYEExYGAsIGBgQTJgYFxuICAgICAqIGFuZCBgYEEzYGAsIHBhY2thZ2UgYGBBMWBgIHJlZmVyZW5jZXMgcGFja2FnZSBgYEIxYGAgYW5kIGBgQjFgYCByZWZlcmVuY2VzIGBgQzFgYCxcbiAgICAgKiB0aGVuIHBhY2thZ2VzIGBgQTFgYCwgYGBBMmBgLCBgYEEzYGAgYW5kIGBgQjFgYCBhcmUgbG9hZGVkLiBTZXQgdG8gemVybyB0b1xuICAgICAqIGRpc2FibGUuXG4gICAgICpcbiAgICAgKiBEZWZhdWx0cyB0byAzLlxuICAgICAqL1xuICAgIHBhY2thZ2VSZWN1cnNpb25EZXB0aDogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogTWF4aW11bSByZWN1cnNpb24gZGVwdGggZm9yIHJlY3Vyc2luZyBmaWxlcy4gRGV0ZXJtaW5lcyBob3cgbWFueVxuICAgICAqIG5lc3RlZCBmaWxlIGRlY2xhcmF0aW9ucyBhcmUgbG9hZGVkLiBUaGUgc2FtZSBhcyBgYHBhY2thZ2VSZWN1cnNpb25EZXB0aGBgLFxuICAgICAqIGJ1dCBmb3IgaW5kaXZpZHVhbCBmaWxlcy4gU2V0IHRvIHplcm8gdG8gZGlzYWJsZS5cbiAgICAgKlxuICAgICAqIERlZmF1bHRzIHRvIDEwLlxuICAgICAqL1xuICAgIGZpbGVSZWN1cnNpb25EZXB0aDogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogQ2FsbGVkIGFmdGVyIHByb2dyZXNzIHVwZGF0ZXMgbGlrZSBsb2FkZWQgZGVjbGFyYXRpb25zIG9yIGV2ZW50cy5cbiAgICAgKiBAcGFyYW0gdXBkYXRlIGRldGFpbGVkIGV2ZW50IG9iamVjdCBjb250YWluaW5nIHVwZGF0ZSBpbmZvcy5cbiAgICAgKiBAcGFyYW0gdGV4dHVhbCBhIHRleHR1YWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIHVwZGF0ZSBmb3IgZGVidWdnaW5nLlxuICAgICAqL1xuICAgIG9uVXBkYXRlPzogKHVwZGF0ZTogUHJvZ3Jlc3NVcGRhdGUsIHRleHR1YWw6IHN0cmluZykgPT4gdm9pZDtcblxuICAgIC8qKlxuICAgICAqIENhbGxlZCBpZiBlcnJvcnMgb2NjdXIuXG4gICAgICogQHBhcmFtIGVycm9yIGEgdGV4dHVhbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgZXJyb3IuXG4gICAgICovXG4gICAgb25FcnJvcj86IChlcnJvcjogc3RyaW5nKSA9PiB2b2lkO1xuICAgIC8qKlxuICAgICAqIGluc3RhbmNlIG9mIG1vbmFjbyBlZGl0b3JcbiAgICAgKi9cbiAgICBtb25hY286IHR5cGVvZiBtb25hY287XG59XG5cblxuZXhwb3J0IGludGVyZmFjZSBJbXBvcnRSZXNvdXJjZVBhdGhQYWNrYWdlIHtcbiAgICBraW5kOiAncGFja2FnZSc7XG4gICAgcGFja2FnZU5hbWU6IHN0cmluZztcbiAgICBpbXBvcnRQYXRoPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEltcG9ydFJlc291cmNlUGF0aFJlbGF0aXZlIHtcbiAgICBraW5kOiAncmVsYXRpdmUnO1xuICAgIGltcG9ydFBhdGg6IHN0cmluZztcbiAgICBzb3VyY2VQYXRoOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW1wb3J0UmVzb3VyY2VQYXRoUmVsYXRpdmVJblBhY2thZ2Uge1xuICAgIGtpbmQ6ICdyZWxhdGl2ZS1pbi1wYWNrYWdlJztcbiAgICBwYWNrYWdlTmFtZTogc3RyaW5nO1xuICAgIGltcG9ydFBhdGg6IHN0cmluZztcbiAgICBzb3VyY2VQYXRoOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW1wb3J0UmVzb3VyY2VCcnV0ZUZvcmNlIHtcbiAgICBraW5kOiAnYnJ1dGVmb3JjZSc7XG4gICAgcGFja2FnZU5hbWU6IHN0cmluZztcbiAgICB0eXBpbmdGaWxlczogYW55W107XG59XG5cbmV4cG9ydCB0eXBlIEltcG9ydFJlc291cmNlUGF0aCA9XG4gICAgfCBJbXBvcnRSZXNvdXJjZVBhdGhQYWNrYWdlXG4gICAgfCBJbXBvcnRSZXNvdXJjZVBhdGhSZWxhdGl2ZVxuICAgIHwgSW1wb3J0UmVzb3VyY2VQYXRoUmVsYXRpdmVJblBhY2thZ2VcbiAgICB8IEltcG9ydFJlc291cmNlQnJ1dGVGb3JjZTtcblxuZXhwb3J0IGNvbnN0IGltcG9ydFJlc291cmNlUGF0aFRvU3RyaW5nID0gKHA6IEltcG9ydFJlc291cmNlUGF0aCkgPT4ge1xuICAgIHN3aXRjaCAocC5raW5kKSB7XG4gICAgICAgIGNhc2UgJ3BhY2thZ2UnOlxuICAgICAgICAgICAgcmV0dXJuIHBhdGguam9pbihwLnBhY2thZ2VOYW1lLCBwLmltcG9ydFBhdGggPz8gJycsICdwYWNrYWdlLmpzb24nKTtcbiAgICAgICAgY2FzZSAncmVsYXRpdmUnOlxuICAgICAgICAgICAgcmV0dXJuIHBhdGguam9pbihwLnNvdXJjZVBhdGgsIHAuaW1wb3J0UGF0aCk7XG4gICAgICAgIGNhc2UgJ3JlbGF0aXZlLWluLXBhY2thZ2UnOlxuICAgICAgICAgICAgcmV0dXJuIHBhdGguam9pbihwLnBhY2thZ2VOYW1lLCBwLnNvdXJjZVBhdGgsIHAuaW1wb3J0UGF0aCk7XG4gICAgICAgIGNhc2UgJ2JydXRlZm9yY2UnOlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm90IEltcGxlbWVudGVkXCIpO1xuICAgIH1cbn07XG4iXX0=
@@ -1,21 +0,0 @@
1
- export class UnpkgSourceResolver {
2
- static async resolvePackageJson(packageName, version, subPath) {
3
- return await this.resolveFile(`https://unpkg.com/${packageName}${version ? `@${version}` : ''}${subPath ? `/${subPath}` : ''}/package.json`);
4
- }
5
- static async resolveSourceFile(packageName, version, path) {
6
- return await this.resolveFile(`https://unpkg.com/${packageName}${version ? `@${version}` : ''}/${path}`);
7
- }
8
- static async resolveFile(url) {
9
- const res = await fetch(url, { method: 'GET' });
10
- if (res.ok) {
11
- return await res.text();
12
- }
13
- else if (res.status === 404) {
14
- return '';
15
- }
16
- else {
17
- throw Error(`Error other than 404 while fetching from Unpkg at ${url}`);
18
- }
19
- }
20
- }
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5wa2ctc291cmNlLXJlc29sdmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3NyYy9jb21wb25lbnRzL3ZzY29kZS90cy10eXBlLXJlc29sdmVyL3VucGtnLXNvdXJjZS1yZXNvbHZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxNQUFNLE9BQU8sbUJBQW1CO0lBQ3JCLE1BQU0sQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQ2xDLFdBQW1CLEVBQ25CLE9BQTJCLEVBQzNCLE9BQTJCO1FBRTNCLE9BQU8sTUFBTSxJQUFJLENBQUMsV0FBVyxDQUN6QixxQkFBcUIsV0FBVyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxlQUFlLENBQ2hILENBQUM7SUFDTixDQUFDO0lBRU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FDakMsV0FBbUIsRUFDbkIsT0FBMkIsRUFDM0IsSUFBWTtRQUVaLE9BQU8sTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLHFCQUFxQixXQUFXLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQztJQUM3RyxDQUFDO0lBRU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsR0FBVztRQUN4QyxNQUFNLEdBQUcsR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUVoRCxJQUFJLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNULE9BQU8sTUFBTSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDNUIsQ0FBQzthQUNJLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUMxQixPQUFPLEVBQUUsQ0FBQztRQUNkLENBQUM7YUFDSSxDQUFDO1lBQ0YsTUFBTSxLQUFLLENBQUMscURBQXFELEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDNUUsQ0FBQztJQUNMLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbIlxuZXhwb3J0IGNsYXNzIFVucGtnU291cmNlUmVzb2x2ZXIge1xuICAgIHB1YmxpYyBzdGF0aWMgYXN5bmMgcmVzb2x2ZVBhY2thZ2VKc29uKFxuICAgICAgICBwYWNrYWdlTmFtZTogc3RyaW5nLFxuICAgICAgICB2ZXJzaW9uOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgICAgIHN1YlBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZFxuICAgICk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnJlc29sdmVGaWxlKFxuICAgICAgICAgICAgYGh0dHBzOi8vdW5wa2cuY29tLyR7cGFja2FnZU5hbWV9JHt2ZXJzaW9uID8gYEAke3ZlcnNpb259YCA6ICcnfSR7c3ViUGF0aCA/IGAvJHtzdWJQYXRofWAgOiAnJ30vcGFja2FnZS5qc29uYFxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgYXN5bmMgcmVzb2x2ZVNvdXJjZUZpbGUoXG4gICAgICAgIHBhY2thZ2VOYW1lOiBzdHJpbmcsXG4gICAgICAgIHZlcnNpb246IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICAgICAgcGF0aDogc3RyaW5nXG4gICAgKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucmVzb2x2ZUZpbGUoYGh0dHBzOi8vdW5wa2cuY29tLyR7cGFja2FnZU5hbWV9JHt2ZXJzaW9uID8gYEAke3ZlcnNpb259YCA6ICcnfS8ke3BhdGh9YCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgYXN5bmMgcmVzb2x2ZUZpbGUodXJsOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2godXJsLCB7IG1ldGhvZDogJ0dFVCcgfSk7XG5cbiAgICAgICAgaWYgKHJlcy5vaykge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHJlcy50ZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocmVzLnN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihgRXJyb3Igb3RoZXIgdGhhbiA0MDQgd2hpbGUgZmV0Y2hpbmcgZnJvbSBVbnBrZyBhdCAke3VybH1gKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==