@dotglitch/ngx-common 1.0.21 → 1.0.22

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 (59) hide show
  1. package/assets/mat-icons.d.ts +5705 -0
  2. package/components/filemanager/file-grid/file-grid.component.d.ts +97 -0
  3. package/components/filemanager/filemanager.component.d.ts +206 -0
  4. package/components/filemanager/folder-rename/folder-rename.component.d.ts +18 -0
  5. package/components/filemanager/helpers.d.ts +5 -0
  6. package/components/filemanager/icon-resolver.d.ts +13 -0
  7. package/components/filemanager/textextensions.d.ts +3 -0
  8. package/components/filemanager/toolbar/breadcrumb/breadcrumb.component.d.ts +16 -0
  9. package/components/filemanager/toolbar/icon-button/icon-button.component.d.ts +11 -0
  10. package/components/filemanager/toolbar/toolbar.component.d.ts +30 -0
  11. package/components/filemanager/tree-view/tree-view.component.d.ts +21 -0
  12. package/components/tabulator/tabulator.component.d.ts +30 -0
  13. package/components/types.d.ts +16 -0
  14. package/components/vscode/ts-type-resolver/dependency-parser.d.ts +6 -0
  15. package/components/vscode/ts-type-resolver/dummy-source-cache.d.ts +7 -0
  16. package/components/vscode/ts-type-resolver/import-resolver.d.ts +28 -0
  17. package/components/vscode/ts-type-resolver/main.d.ts +22 -0
  18. package/components/vscode/ts-type-resolver/recursion-depth.d.ts +11 -0
  19. package/components/vscode/ts-type-resolver/types.d.ts +179 -0
  20. package/components/vscode/ts-type-resolver/unpkg-source-resolver.d.ts +5 -0
  21. package/components/vscode/ts-type-resolver/update-emitter.d.ts +2 -0
  22. package/components/vscode/vscode.component.d.ts +57 -0
  23. package/esm2020/assets/mat-icons.mjs +5705 -0
  24. package/esm2020/components/filemanager/file-grid/file-grid.component.mjs +672 -0
  25. package/esm2020/components/filemanager/filemanager.component.mjs +301 -0
  26. package/esm2020/components/filemanager/folder-rename/folder-rename.component.mjs +57 -0
  27. package/esm2020/components/filemanager/helpers.mjs +26 -0
  28. package/esm2020/components/filemanager/icon-resolver.mjs +155 -0
  29. package/esm2020/components/filemanager/textextensions.mjs +294 -0
  30. package/esm2020/components/filemanager/toolbar/breadcrumb/breadcrumb.component.mjs +26 -0
  31. package/esm2020/components/filemanager/toolbar/icon-button/icon-button.component.mjs +34 -0
  32. package/esm2020/components/filemanager/toolbar/toolbar.component.mjs +163 -0
  33. package/esm2020/components/filemanager/tree-view/tree-view.component.mjs +53 -0
  34. package/esm2020/components/lazy-loader/lazy-loader.module.mjs +3 -3
  35. package/esm2020/components/lazy-loader/lazy-loader.service.mjs +1 -1
  36. package/esm2020/components/menu/menu.component.mjs +1 -2
  37. package/esm2020/components/tabulator/tabulator.component.mjs +92 -0
  38. package/esm2020/components/types.mjs +3 -0
  39. package/esm2020/components/vscode/ts-type-resolver/dependency-parser.mjs +91 -0
  40. package/esm2020/components/vscode/ts-type-resolver/dummy-source-cache.mjs +15 -0
  41. package/esm2020/components/vscode/ts-type-resolver/import-resolver.mjs +311 -0
  42. package/esm2020/components/vscode/ts-type-resolver/main.mjs +112 -0
  43. package/esm2020/components/vscode/ts-type-resolver/recursion-depth.mjs +21 -0
  44. package/esm2020/components/vscode/ts-type-resolver/types.mjs +14 -0
  45. package/esm2020/components/vscode/ts-type-resolver/unpkg-source-resolver.mjs +21 -0
  46. package/esm2020/components/vscode/ts-type-resolver/update-emitter.mjs +37 -0
  47. package/esm2020/components/vscode/vscode.component.mjs +230 -0
  48. package/esm2020/directives/menu.directive.mjs +19 -18
  49. package/esm2020/public-api.mjs +6 -1
  50. package/fesm2015/dotglitch-ngx-common-folder-rename.component-d039534b.mjs +79 -0
  51. package/fesm2015/dotglitch-ngx-common-folder-rename.component-d039534b.mjs.map +1 -0
  52. package/fesm2015/dotglitch-ngx-common.mjs +8360 -27
  53. package/fesm2015/dotglitch-ngx-common.mjs.map +1 -1
  54. package/fesm2020/dotglitch-ngx-common-folder-rename.component-ba3ebd0a.mjs +78 -0
  55. package/fesm2020/dotglitch-ngx-common-folder-rename.component-ba3ebd0a.mjs.map +1 -0
  56. package/fesm2020/dotglitch-ngx-common.mjs +8329 -26
  57. package/fesm2020/dotglitch-ngx-common.mjs.map +1 -1
  58. package/package.json +6 -2
  59. package/public-api.d.ts +4 -0
@@ -0,0 +1,311 @@
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0LXJlc29sdmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3NyYy9jb21wb25lbnRzL3ZzY29kZS90cy10eXBlLXJlc29sdmVyL2ltcG9ydC1yZXNvbHZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEtBQUssSUFBSSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUE0RywwQkFBMEIsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUMvSixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUU5RCxNQUFNLE9BQU8sY0FBYztJQVF2QixZQUFvQixPQUFnQjtRQUFoQixZQUFPLEdBQVAsT0FBTyxDQUFTO1FBQ2hDLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLGdCQUFnQixFQUFFLENBQUM7UUFDL0MsSUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7UUFDaEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTyxDQUFDO1FBRTlCLElBQUksT0FBTyxDQUFDLGVBQWUsSUFBSSxPQUFPLENBQUMsUUFBUSxFQUFFO1lBQzdDLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztZQUNqQyxLQUFLLE1BQU0sQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFB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WUFDdEYsSUFBSSxPQUFPLEVBQUU7Z0JBQ1QsWUFBWSxDQUNSO29CQUNJLElBQUksRUFBRSxlQUFlO29CQUNyQixVQUFVLEVBQUUsR0FBRztpQkFDbEIsRUFDRCxJQUFJLENBQUMsT0FBTyxDQUNmLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO2FBQ3RDO1lBQ0QsT0FBTyxPQUFPLENBQUM7U0FDbEI7SUFDTCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSAqIGFzIG1vbmFjbyBmcm9tICdtb25hY28tZWRpdG9yJztcbmltcG9ydCB7IERlcGVuZGVuY3lQYXJzZXIgfSBmcm9tICcuL2RlcGVuZGVuY3ktcGFyc2VyJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aC1icm93c2VyaWZ5JztcbmltcG9ydCB7IGludm9rZVVwZGF0ZSB9IGZyb20gJy4vdXBkYXRlLWVtaXR0ZXInO1xuaW1wb3J0IHsgUmVjdXJzaW9uRGVwdGggfSBmcm9tICcuL3JlY3Vyc2lvbi1kZXB0aCc7XG5pbXBvcnQgeyBJbXBvcnRSZXNvdXJjZVBhdGgsIEltcG9ydFJlc291cmNlUGF0aFBhY2thZ2UsIEltcG9ydFJlc291cmNlUGF0aFJlbGF0aXZlSW5QYWNrYWdlLCBPcHRpb25zLCBTb3VyY2VDYWNoZSwgaW1wb3J0UmVzb3VyY2VQYXRoVG9TdHJpbmcgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IFVucGtnU291cmNlUmVzb2x2ZXIgfSBmcm9tICcuL3VucGtnLXNvdXJjZS1yZXNvbHZlcic7XG5cbmV4cG9ydCBjbGFzcyBJbXBvcnRSZXNvbHZlciB7XG4gICAgcHJpdmF0ZSBsb2FkZWRGaWxlczogc3RyaW5nW107XG4gICAgcHJpdmF0ZSBkZXBlbmRlbmN5UGFyc2VyOiBEZXBlbmRlbmN5UGFyc2VyO1xuICAgIHByaXZhdGUgY2FjaGU6IFNvdXJjZUNhY2hlO1xuICAgIHByaXZhdGUgdmVyc2lvbnM/OiB7IFtwYWNrYWdlTmFtZTogc3RyaW5nXTogc3RyaW5nIH07XG4gICAgcHJpdmF0ZSBuZXdJbXBvcnRzUmVzb2x2ZWQ6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBtb25hY286IHR5cGVvZiBtb25hY287XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIG9wdGlvbnM6IE9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5sb2FkZWRGaWxlcyA9IFtdO1xuICAgICAgICB0aGlzLmRlcGVuZGVuY3lQYXJzZXIgPSBuZXcgRGVwZW5kZW5jeVBhcnNlcigpO1xuICAgICAgICB0aGlzLmNhY2hlID0gb3B0aW9ucy5zb3VyY2VDYWNoZTtcbiAgICAgICAgdGhpcy5uZXdJbXBvcnRzUmVzb2x2ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5tb25hY28gPSBvcHRpb25zLm1vbmFjbyE7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMucHJlbG9hZFBhY2thZ2VzICYmIG9wdGlvbnMudmVyc2lvbnMpIHtcbiAgICAgICAgICAgIHRoaXMudmVyc2lvbnMgPSBvcHRpb25zLnZlcnNpb25zO1xuICAgICAgICAgICAgZm9yIChjb25zdCBbcGFja2FnZU5hbWUsIHZlcnNpb25dIG9mIE9iamVjdC5lbnRyaWVzKG9wdGlvbnMudmVyc2lvbnMpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNvbHZlSW1wb3J0KFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBraW5kOiAncGFja2FnZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlTmFtZTogcGFja2FnZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnRQYXRoOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgbmV3IFJlY3Vyc2lvbkRlcHRoKHRoaXMub3B0aW9ucylcbiAgICAgICAgICAgICAgICApLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHdlcmVOZXdJbXBvcnRzUmVzb2x2ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5ld0ltcG9ydHNSZXNvbHZlZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVzZXROZXdJbXBvcnRzUmVzb2x2ZWQoKSB7XG4gICAgICAgIHRoaXMubmV3SW1wb3J0c1Jlc29sdmVkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHJlc29sdmVJbXBvcnRzSW5GaWxlKHNvdXJjZTogc3RyaW5nLCBwYXJlbnQ6IHN0cmluZyB8IEltcG9ydFJlc291cmNlUGF0aCwgZGVwdGg6IFJlY3Vyc2lvbkRlcHRoKSB7XG4gICAgICAgIGlmIChkZXB0aC5zaG91bGRTdG9wKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGltcG9ydHMgPSB0aGlzLmRlcGVuZGVuY3lQYXJzZXIucGFyc2VEZXBlbmRlbmNpZXMoc291cmNlLCBwYXJlbnQpO1xuICAgICAgICBmb3IgKGNvbnN0IGltcG9ydENhbGwgb2YgaW1wb3J0cykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlc29sdmVJbXBvcnQoaW1wb3J0Q2FsbCwgZGVwdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLm9uRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLm9uRXJyb3I/LigoZSBhcyBFcnJvcikubWVzc2FnZSA/PyBlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyByZXNvbHZlSW1wb3J0KGltcG9ydFJlc291cmNlOiBJbXBvcnRSZXNvdXJjZVBhdGgsIGRlcHRoOiBSZWN1cnNpb25EZXB0aCkge1xuICAgICAgICBjb25zdCBoYXNoID0gdGhpcy5oYXNoSW1wb3J0UmVzb3VyY2VQYXRoKGltcG9ydFJlc291cmNlKTtcbiAgICAgICAgaWYgKHRoaXMubG9hZGVkRmlsZXMuaW5jbHVkZXMoaGFzaCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubG9hZGVkRmlsZXMucHVzaChoYXNoKTtcbiAgICAgICAgY29uc29sZS5sb2coXCJyZXNvbHZlSW1wb3J0XCIsIGltcG9ydFJlc291cmNlLCBkZXB0aCk7XG5cbiAgICAgICAgLy8gSWdub3JlIHRoZXNlIHBhY2thZ2UgaW1wb3J0cyBhcyB0aGV5IGFyZSB3ZWxsLWtub3duIHRvIGJlIHBvaW50bGVzcy5cbiAgICAgICAgaWYgKGltcG9ydFJlc291cmNlLmtpbmQgPT0gXCJwYWNrYWdlXCIgJiYgaW1wb3J0UmVzb3VyY2UucGFja2FnZU5hbWUgPT0gXCJyZXF1aXJlXCIpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcblxuICAgICAgICBzd2l0Y2ggKGltcG9ydFJlc291cmNlLmtpbmQpIHtcbiAgICAgICAgICAgIGNhc2UgJ3BhY2thZ2UnOlxuICAgICAgICAgICAgICAgIGNvbnN0IHBhY2thZ2VSZWxhdGl2ZUltcG9ydCA9IGF3YWl0IHRoaXMucmVzb2x2ZUltcG9ydEZyb21QYWNrYWdlUm9vdChpbXBvcnRSZXNvdXJjZSk7XG4gICAgICAgICAgICAgICAgaWYgKHBhY2thZ2VSZWxhdGl2ZUltcG9ydCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5yZXNvbHZlSW1wb3J0SW5QYWNrYWdlKHBhY2thZ2VSZWxhdGl2ZUltcG9ydCwgZGVwdGgubmV4dFBhY2thZ2UoKS5uZXh0RmlsZSgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdyZWxhdGl2ZSc6XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCB5ZXQnKTtcbiAgICAgICAgICAgIGNhc2UgJ3JlbGF0aXZlLWluLXBhY2thZ2UnOlxuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnJlc29sdmVJbXBvcnRJblBhY2thZ2UoaW1wb3J0UmVzb3VyY2UsIGRlcHRoLm5leHRGaWxlKCkpO1xuICAgICAgICAgICAgY2FzZSAnYnJ1dGVmb3JjZSc6IHtcblxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyByZXNvbHZlSW1wb3J0SW5QYWNrYWdlKGltcG9ydFJlc291cmNlOiBJbXBvcnRSZXNvdXJjZVBhdGhSZWxhdGl2ZUluUGFja2FnZSwgZGVwdGg6IFJlY3Vyc2lvbkRlcHRoKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwicmVzb2x2ZUltcG9ydEluUGFja2FnZVwiLCBpbXBvcnRSZXNvdXJjZSwgZGVwdGgpO1xuXG4gICAgICAgIGNvbnN0IGNvbnRlbnRzID0gYXdhaXQgdGhpcy5sb2FkU291cmNlRmlsZUNvbnRlbnRzKGltcG9ydFJlc291cmNlKTtcblxuICAgICAgICBpZiAoY29udGVudHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgc291cmNlLCBhdCB9ID0gY29udGVudHM7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZU1vZGVsKFxuICAgICAgICAgICAgICAgIHNvdXJjZSxcbiAgICAgICAgICAgICAgICB0aGlzLm1vbmFjby5VcmkucGFyc2UodGhpcy5vcHRpb25zLmZpbGVSb290UGF0aCArIHBhdGguam9pbihgbm9kZV9tb2R1bGVzLyR7aW1wb3J0UmVzb3VyY2UucGFja2FnZU5hbWV9YCwgYXQpKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgYXdhaXQgdGhpcy5yZXNvbHZlSW1wb3J0c0luRmlsZShcbiAgICAgICAgICAgICAgICBzb3VyY2UsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBraW5kOiAncmVsYXRpdmUtaW4tcGFja2FnZScsXG4gICAgICAgICAgICAgICAgICAgIHBhY2thZ2VOYW1lOiBpbXBvcnRSZXNvdXJjZS5wYWNrYWdlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlUGF0aDogcGF0aC5kaXJuYW1lKGF0KSxcbiAgICAgICAgICAgICAgICAgICAgaW1wb3J0UGF0aDogJycsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBkZXB0aFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgcmVzb2x2ZUltcG9ydEZyb21QYWNrYWdlUm9vdChcbiAgICAgICAgaW1wb3J0UmVzb3VyY2U6IEltcG9ydFJlc291cmNlUGF0aFBhY2thZ2VcbiAgICApOiBQcm9taXNlPEltcG9ydFJlc291cmNlUGF0aFJlbGF0aXZlSW5QYWNrYWdlIHwgdm9pZD4ge1xuICAgICAgICBjb25zb2xlLmxvZyhcInJlc29sdmVJbXBvcnRGcm9tUGFja2FnZVJvb3RcIiwgaW1wb3J0UmVzb3VyY2UpO1xuXG4gICAgICAgIGNvbnN0IGZhaWxlZFByb2dyZXNzVXBkYXRlID0ge1xuICAgICAgICAgICAgdHlwZTogJ0xvb2tlZFVwUGFja2FnZScsXG4gICAgICAgICAgICBwYWNrYWdlOiBpbXBvcnRSZXNvdXJjZS5wYWNrYWdlTmFtZSxcbiAgICAgICAgICAgIGRlZmluaXRlbHlUeXBlZDogZmFsc2UsXG4gICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgfSBhcyBjb25zdDtcblxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLm9ubHlTcGVjaWZpZWRQYWNrYWdlcykge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnZlcnNpb25zPy5baW1wb3J0UmVzb3VyY2UucGFja2FnZU5hbWVdICYmICF0aGlzLnZlcnNpb25zPy5bJ0B0eXBlcy8nICsgaW1wb3J0UmVzb3VyY2UucGFja2FnZU5hbWVdKSB7XG4gICAgICAgICAgICAgICAgaW52b2tlVXBkYXRlKGZhaWxlZFByb2dyZXNzVXBkYXRlLCB0aGlzLm9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZG9lc1BrZ0pzb25IYXNTdWJwYXRoID0gaW1wb3J0UmVzb3VyY2UuaW1wb3J0UGF0aD8ubGVuZ3RoID8/IDAgPiAwO1xuICAgICAgICBsZXQgcGtnSnNvblN1YnBhdGggPSBkb2VzUGtnSnNvbkhhc1N1YnBhdGggPyBgLyR7aW1wb3J0UmVzb3VyY2UuaW1wb3J0UGF0aH1gIDogJyc7XG4gICAgICAgIGxldCBwa2dKc29uID0gYXdhaXQgdGhpcy5yZXNvbHZlUGFja2FnZUpzb24oXG4gICAgICAgICAgICBpbXBvcnRSZXNvdXJjZS5wYWNrYWdlTmFtZSxcbiAgICAgICAgICAgIHRoaXMudmVyc2lvbnM/LltpbXBvcnRSZXNvdXJjZS5wYWNrYWdlTmFtZV0sXG4gICAgICAgICAgICBkb2VzUGtnSnNvbkhhc1N1YnBhdGggPyBpbXBvcnRSZXNvdXJjZS5pbXBvcnRQYXRoIDogdW5kZWZpbmVkXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKCFwa2dKc29uICYmIGRvZXNQa2dKc29uSGFzU3VicGF0aCkge1xuICAgICAgICAgICAgcGtnSnNvbiA9IGF3YWl0IHRoaXMucmVzb2x2ZVBhY2thZ2VKc29uKGltcG9ydFJlc291cmNlLnBhY2thZ2VOYW1lLCB0aGlzLnZlcnNpb25zPy5baW1wb3J0UmVzb3VyY2UucGFja2FnZU5hbWVdKTtcbiAgICAgICAgICAgIHBrZ0pzb25TdWJwYXRoID0gJyc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXBrZ0pzb24pIHJldHVybiBpbnZva2VVcGRhdGUoZmFpbGVkUHJvZ3Jlc3NVcGRhdGUsIHRoaXMub3B0aW9ucyk7XG5cbiAgICAgICAgY29uc3QgcGtnID0gSlNPTi5wYXJzZShwa2dKc29uKTtcblxuICAgICAgICBjb25zb2xlLmxvZyhcInBhY2thZ2UgbWV0YVwiLCBwa2cpO1xuXG4gICAgICAgIGlmIChwa2cudHlwaW5ncyB8fCBwa2cudHlwZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHR5cGluZ3MgPSBwa2cudHlwaW5ncyB8fCBwa2cudHlwZXM7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZU1vZGVsKFxuICAgICAgICAgICAgICAgIHBrZ0pzb24sXG4gICAgICAgICAgICAgICAgdGhpcy5tb25hY28uVXJpLnBhcnNlKFxuICAgICAgICAgICAgICAgICAgICBgJHt0aGlzLm9wdGlvbnMuZmlsZVJvb3RQYXRofW5vZGVfbW9kdWxlcy8ke2ltcG9ydFJlc291cmNlLnBhY2thZ2VOYW1lfSR7cGtnSnNvblN1YnBhdGh9L3BhY2thZ2UuanNvbmBcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBpbnZva2VVcGRhdGUoXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnTG9va2VkVXBQYWNrYWdlJyxcbiAgICAgICAgICAgICAgICAgICAgcGFja2FnZTogaW1wb3J0UmVzb3VyY2UucGFja2FnZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGRlZmluaXRlbHlUeXBlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLnNldFZlcnNpb24oaW1wb3J0UmVzb3VyY2UucGFja2FnZU5hbWUsIHBrZy52ZXJzaW9uKTtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBraW5kOiAncmVsYXRpdmUtaW4tcGFja2FnZScsXG4gICAgICAgICAgICAgICAgcGFja2FnZU5hbWU6IGltcG9ydFJlc291cmNlLnBhY2thZ2VOYW1lLFxuICAgICAgICAgICAgICAgIHNvdXJjZVBhdGg6ICcnLFxuICAgICAgICAgICAgICAgIGltcG9ydFBhdGg6IHBhdGguam9pbihpbXBvcnRSZXNvdXJjZS5pbXBvcnRQYXRoID8/ICcnLCB0eXBpbmdzLnN0YXJ0c1dpdGgoJy4vJykgPyB0eXBpbmdzLnNsaWNlKDIpIDogdHlwaW5ncyksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuXG4gICAgICAgICAgICBjb25zdCB0eXBpbmdQYWNrYWdlTmFtZSA9IGBAdHlwZXMvJHtcbiAgICAgICAgICAgICAgICBpbXBvcnRSZXNvdXJjZS5wYWNrYWdlTmFtZS5zdGFydHNXaXRoKCdAJylcbiAgICAgICAgICAgICAgICAgICAgPyBpbXBvcnRSZXNvdXJjZS5wYWNrYWdlTmFtZS5zbGljZSgxKS5yZXBsYWNlKC9cXC8vLCAnX18nKVxuICAgICAgICAgICAgICAgICAgICA6IGltcG9ydFJlc291cmNlLnBhY2thZ2VOYW1lXG4gICAgICAgICAgICB9YDtcblxuICAgICAgICAgICAgY29uc3QgcGtnSnNvblR5cGluZ3MgPSBhd2FpdCB0aGlzLnJlc29sdmVQYWNrYWdlSnNvbih0eXBpbmdQYWNrYWdlTmFtZSwgdGhpcy52ZXJzaW9ucz8uW3R5cGluZ1BhY2thZ2VOYW1lXSk7XG5cbiAgICAgICAgICAgIGlmICghcGtnSnNvblR5cGluZ3MpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGludm9rZVVwZGF0ZShmYWlsZWRQcm9ncmVzc1VwZGF0ZSwgdGhpcy5vcHRpb25zKTtcblxuICAgICAgICAgICAgY29uc3QgcGtnID0gSlNPTi5wYXJzZShwa2dKc29uVHlwaW5ncyk7XG5cbiAgICAgICAgICAgIGlmICghcGtnLnR5cGluZ3MgJiYgIXBrZy50eXBlcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVzOiB7XG4gICAgICAgICAgICAgICAgICAgIGZpbGVDb3VudDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICBmaWxlczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgW2tleTogc3RyaW5nXToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZXg6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIkZpbGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0JpbmFyeTogXCJ0cnVlXCIgfCBcImZhbHNlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aDogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRUeXBlOiBzdHJpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgaW50ZWdyaXR5OiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgIHNoYXN1bTogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICB0b3RhbFNpemU6IG51bWJlclxuICAgICAgICAgICAgICAgIH0gPSBhd2FpdCBmZXRjaChcImh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL0BkdC1lc2EvZHluYXRyYWNlLWFwaS1jbGllbnQvdi8yLjIuNi9pbmRleFwiLCB7XG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogXCJnZXRcIlxuICAgICAgICAgICAgICAgIH0pLnRoZW4oZSA9PiBlLmpzb24oKSk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCB0eXBpbmdGaWxlcyA9IE9iamVjdC5lbnRyaWVzKGZpbGVzLmZpbGVzKS5tYXAoKFtrZXksIHZhbF0pID0+IHZhbCk7XG5cbiAgICAgICAgICAgICAgICBpbnZva2VVcGRhdGUoXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdMb29rZWRVcFBhY2thZ2UnLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZTogdHlwaW5nUGFja2FnZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZpbml0ZWx5VHlwZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnNcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAga2luZDogJ2JydXRlZm9yY2UnLFxuICAgICAgICAgICAgICAgICAgICBwYWNrYWdlTmFtZTogdHlwaW5nUGFja2FnZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHR5cGluZ0ZpbGVzLFxuICAgICAgICAgICAgICAgIH0gYXMgYW55O1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIC8vIHJldHVybiBpbnZva2VVcGRhdGUoZmFpbGVkUHJvZ3Jlc3NVcGRhdGUsIHRoaXMub3B0aW9ucyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHR5cGluZ3MgPSBwa2cudHlwaW5ncyB8fCBwa2cudHlwZXM7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZU1vZGVsKFxuICAgICAgICAgICAgICAgIHBrZ0pzb25UeXBpbmdzLFxuICAgICAgICAgICAgICAgIHRoaXMubW9uYWNvLlVyaS5wYXJzZShgJHt0aGlzLm9wdGlvbnMuZmlsZVJvb3RQYXRofW5vZGVfbW9kdWxlcy8ke3R5cGluZ1BhY2thZ2VOYW1lfS9wYWNrYWdlLmpzb25gKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaW52b2tlVXBkYXRlKFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0xvb2tlZFVwUGFja2FnZScsXG4gICAgICAgICAgICAgICAgICAgIHBhY2thZ2U6IHR5cGluZ1BhY2thZ2VOYW1lLFxuICAgICAgICAgICAgICAgICAgICBkZWZpbml0ZWx5VHlwZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLnNldFZlcnNpb24odHlwaW5nUGFja2FnZU5hbWUsIHBrZy52ZXJzaW9uKTtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBraW5kOiAncmVsYXRpdmUtaW4tcGFja2FnZScsXG4gICAgICAgICAgICAgICAgcGFja2FnZU5hbWU6IHR5cGluZ1BhY2thZ2VOYW1lLFxuICAgICAgICAgICAgICAgIHNvdXJjZVBhdGg6ICcnLFxuICAgICAgICAgICAgICAgIGltcG9ydFBhdGg6IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICAgICAgaW1wb3J0UmVzb3VyY2UuaW1wb3J0UGF0aCA/PyAnJyxcbiAgICAgICAgICAgICAgICAgICAgdHlwaW5ncy5zdGFydHNXaXRoKCcuLycpID8gdHlwaW5ncy5zbGljZSgyKSA6IHR5cGluZ3NcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgbG9hZFNvdXJjZUZpbGVDb250ZW50cyhcbiAgICAgICAgaW1wb3J0UmVzb3VyY2U6IEltcG9ydFJlc291cmNlUGF0aFJlbGF0aXZlSW5QYWNrYWdlXG4gICAgKTogUHJvbWlzZTx7IHNvdXJjZTogc3RyaW5nOyBhdDogc3RyaW5nIH0gfCBudWxsPiB7XG4gICAgICAgIGNvbnN0IHByb2dyZXNzVXBkYXRlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgIGltcG9ydFJlc291cmNlLnBhY2thZ2VOYW1lLFxuICAgICAgICAgICAgaW1wb3J0UmVzb3VyY2Uuc291cmNlUGF0aCxcbiAgICAgICAgICAgIGltcG9ydFJlc291cmNlLmltcG9ydFBhdGhcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBmYWlsZWRQcm9ncmVzc1VwZGF0ZSA9IHtcbiAgICAgICAgICAgIHR5cGU6ICdMb29rZWRVcFR5cGVGaWxlJyxcbiAgICAgICAgICAgIHBhdGg6IHByb2dyZXNzVXBkYXRlUGF0aCxcbiAgICAgICAgICAgIGRlZmluaXRlbHlUeXBlZDogZmFsc2UsXG4gICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgfSBhcyBjb25zdDtcblxuICAgICAgICBjb25zdCBwa2dOYW1lID0gaW1wb3J0UmVzb3VyY2UucGFja2FnZU5hbWU7XG4gICAgICAgIGNvbnN0IHZlcnNpb24gPSB0aGlzLmdldFZlcnNpb24oaW1wb3J0UmVzb3VyY2UucGFja2FnZU5hbWUpO1xuXG4gICAgICAgIGxldCBhcHBlbmRzID0gWycuZC50cycsICcvaW5kZXguZC50cycsICcudHMnLCAnLnRzeCcsICcvaW5kZXgudHMnLCAnL2luZGV4LnRzeCddO1xuXG4gICAgICAgIGlmIChhcHBlbmRzLm1hcChhcHBlbmQgPT4gaW1wb3J0UmVzb3VyY2UuaW1wb3J0UGF0aC5lbmRzV2l0aChhcHBlbmQpKS5yZWR1Y2UoKGEsIGIpID0+IGEgfHwgYiwgZmFsc2UpKSB7XG4gICAgICAgICAgICBjb25zdCBzb3VyY2UgPSBhd2FpdCB0aGlzLnJlc29sdmVTb3VyY2VGaWxlKFxuICAgICAgICAgICAgICAgIHBrZ05hbWUsXG4gICAgICAgICAgICAgICAgdmVyc2lvbixcbiAgICAgICAgICAgICAgICBwYXRoLmpvaW4oaW1wb3J0UmVzb3VyY2Uuc291cmNlUGF0aCwgaW1wb3J0UmVzb3VyY2UuaW1wb3J0UGF0aClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoc291cmNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgc291cmNlLCBhdDogcGF0aC5qb2luKGltcG9ydFJlc291cmNlLnNvdXJjZVBhdGgsIGltcG9ydFJlc291cmNlLmltcG9ydFBhdGgpIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGFwcGVuZCBvZiBhcHBlbmRzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZnVsbFBhdGggPSBwYXRoLmpvaW4oaW1wb3J0UmVzb3VyY2Uuc291cmNlUGF0aCwgaW1wb3J0UmVzb3VyY2UuaW1wb3J0UGF0aCkgKyBhcHBlbmQ7XG4gICAgICAgICAgICAgICAgY29uc3Qgc291cmNlID0gYXdhaXQgdGhpcy5yZXNvbHZlU291cmNlRmlsZShwa2dOYW1lLCB2ZXJzaW9uLCBmdWxsUGF0aCk7XG4gICAgICAgICAgICAgICAgaW52b2tlVXBkYXRlKFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnQXR0ZW1wdGVkTG9va1VwRmlsZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiBwYXRoLmpvaW4ocGtnTmFtZSwgZnVsbFBhdGgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogISFzb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3B0aW9uc1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKHNvdXJjZSkge1xuICAgICAgICAgICAgICAgICAgICBpbnZva2VVcGRhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0xvb2tlZFVwVHlwZUZpbGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6IHBhdGguam9pbihwa2dOYW1lLCBmdWxsUGF0aCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgc291cmNlLCBhdDogZnVsbFBhdGggfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwa2dKc29uID0gYXdhaXQgdGhpcy5yZXNvbHZlUGFja2FnZUpzb24oXG4gICAgICAgICAgICBwa2dOYW1lLFxuICAgICAgICAgICAgdmVyc2lvbixcbiAgICAgICAgICAgIHBhdGguam9pbihpbXBvcnRSZXNvdXJjZS5zb3VyY2VQYXRoLCBpbXBvcnRSZXNvdXJjZS5pbXBvcnRQYXRoKVxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChwa2dKc29uKSB7XG4gICAgICAgICAgICBjb25zdCB7IHR5cGVzIH0gPSBKU09OLnBhcnNlKHBrZ0pzb24pO1xuICAgICAgICAgICAgaWYgKHR5cGVzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZnVsbFBhdGggPSBwYXRoLmpvaW4oaW1wb3J0UmVzb3VyY2Uuc291cmNlUGF0aCwgaW1wb3J0UmVzb3VyY2UuaW1wb3J0UGF0aCwgdHlwZXMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IGF3YWl0IHRoaXMucmVzb2x2ZVNvdXJjZUZpbGUocGtnTmFtZSwgdmVyc2lvbiwgZnVsbFBhdGgpO1xuICAgICAgICAgICAgICAgIGlmIChzb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgaW52b2tlVXBkYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdMb29rZWRVcFR5cGVGaWxlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiBwYXRoLmpvaW4ocGtnTmFtZSwgZnVsbFBhdGgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHNvdXJjZSwgYXQ6IGZ1bGxQYXRoIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaW52b2tlVXBkYXRlKGZhaWxlZFByb2dyZXNzVXBkYXRlLCB0aGlzLm9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFZlcnNpb24ocGFja2FnZU5hbWU6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy52ZXJzaW9ucz8uW3BhY2thZ2VOYW1lXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0VmVyc2lvbnModmVyc2lvbnM6IHsgW3BhY2thZ2VOYW1lOiBzdHJpbmddOiBzdHJpbmcgfSkge1xuICAgICAgICB0aGlzLnZlcnNpb25zID0gdmVyc2lvbnM7XG4gICAgICAgIHRoaXMub3B0aW9ucy5vblVwZGF0ZVZlcnNpb25zPy4odmVyc2lvbnMpO1xuICAgICAgICAvLyBUT0RPIHJlbG9hZCBwYWNrYWdlcyB3aG9zZSB2ZXJzaW9uIGhhcyBjaGFuZ2VkXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRWZXJzaW9uKHBhY2thZ2VOYW1lOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZykge1xuICAgICAgICB0aGlzLnNldFZlcnNpb25zKHtcbiAgICAgICAgICAgIC4uLnRoaXMudmVyc2lvbnMsXG4gICAgICAgICAgICBbcGFja2FnZU5hbWVdOiB2ZXJzaW9uLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZU1vZGVsKHNvdXJjZTogc3RyaW5nLCB1cmk6IG1vbmFjby5VcmkpIHtcbiAgICAgICAgdXJpID0gdXJpLndpdGgoeyBwYXRoOiB1cmkucGF0aC5yZXBsYWNlKCdAdHlwZXMvJywgJycpIH0pO1xuICAgICAgICBpZiAoIXRoaXMubW9uYWNvLmVkaXRvci5nZXRNb2RlbCh1cmkpKSB7XG4gICAgICAgICAgICB0aGlzLm1vbmFjby5lZGl0b3IuY3JlYXRlTW9kZWwoc291cmNlLCAndHlwZXNjcmlwdCcsIHVyaSk7XG4gICAgICAgICAgICB0aGlzLm5ld0ltcG9ydHNSZXNvbHZlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGhhc2hJbXBvcnRSZXNvdXJjZVBhdGgocDogSW1wb3J0UmVzb3VyY2VQYXRoKSB7XG4gICAgICAgIHJldHVybiBpbXBvcnRSZXNvdXJjZVBhdGhUb1N0cmluZyhwKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHJlc29sdmVQYWNrYWdlSnNvbihcbiAgICAgICAgcGFja2FnZU5hbWU6IHN0cmluZyxcbiAgICAgICAgdmVyc2lvbj86IHN0cmluZyxcbiAgICAgICAgc3ViUGF0aD86IHN0cmluZ1xuICAgICk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG5cbiAgICAgICAgY29uc3QgdXJpID0gcGF0aC5qb2luKHBhY2thZ2VOYW1lICsgKHZlcnNpb24gPyBgQCR7dmVyc2lvbn1gIDogJycpLCBzdWJQYXRoID8/ICcnLCAncGFja2FnZS5qc29uJyk7XG4gICAgICAgIGxldCBpc0F2YWlsYWJsZSA9IGZhbHNlO1xuICAgICAgICBsZXQgY29udGVudDogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmICh0aGlzLmNhY2hlLmlzRmlsZUF2YWlsYWJsZSkge1xuICAgICAgICAgICAgaXNBdmFpbGFibGUgPSBhd2FpdCB0aGlzLmNhY2hlLmlzRmlsZUF2YWlsYWJsZSh1cmkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29udGVudCA9IGF3YWl0IHRoaXMuY2FjaGUuZ2V0RmlsZSh1cmkpO1xuICAgICAgICAgICAgaXNBdmFpbGFibGUgPSBjb250ZW50ICE9PSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNBdmFpbGFibGUpIHtcbiAgICAgICAgICAgIHJldHVybiBjb250ZW50ID8/IChhd2FpdCB0aGlzLmNhY2hlLmdldEZpbGUodXJpKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcInJlY3Vyc2luZyByZXNvbHZlUGFja2FnZUpzb25cIiwgcGFja2FnZU5hbWUsIHZlcnNpb24sIHN1YlBhdGgpXG4gICAgICAgICAgICBjb250ZW50ID0gYXdhaXQgVW5wa2dTb3VyY2VSZXNvbHZlci5yZXNvbHZlUGFja2FnZUpzb24ocGFja2FnZU5hbWUsIHZlcnNpb24sIHN1YlBhdGgpO1xuICAgICAgICAgICAgaWYgKGNvbnRlbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhY2hlLnN0b3JlRmlsZSh1cmksIGNvbnRlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHJlc29sdmVTb3VyY2VGaWxlKFxuICAgICAgICBwYWNrYWdlTmFtZTogc3RyaW5nLFxuICAgICAgICB2ZXJzaW9uOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgICAgIGZpbGVQYXRoOiBzdHJpbmdcbiAgICApOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuXG4gICAgICAgIGNvbnN0IHVyaSA9IHBhdGguam9pbihwYWNrYWdlTmFtZSArICh2ZXJzaW9uID8gYEAke3ZlcnNpb259YCA6ICcnKSwgZmlsZVBhdGgpO1xuICAgICAgICBsZXQgaXNBdmFpbGFibGUgPSBmYWxzZTtcbiAgICAgICAgbGV0IGNvbnRlbnQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAodGhpcy5jYWNoZS5pc0ZpbGVBdmFpbGFibGUpIHtcbiAgICAgICAgICAgIGlzQXZhaWxhYmxlID0gYXdhaXQgdGhpcy5jYWNoZS5pc0ZpbGVBdmFpbGFibGUodXJpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnRlbnQgPSBhd2FpdCB0aGlzLmNhY2hlLmdldEZpbGUodXJpKTtcbiAgICAgICAgICAgIGlzQXZhaWxhYmxlID0gY29udGVudCAhPT0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzQXZhaWxhYmxlKSB7XG4gICAgICAgICAgICBpbnZva2VVcGRhdGUoXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnTG9hZGVkRnJvbUNhY2hlJyxcbiAgICAgICAgICAgICAgICAgICAgaW1wb3J0UGF0aDogdXJpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRlbnQgPz8gKGF3YWl0IHRoaXMuY2FjaGUuZ2V0RmlsZSh1cmkpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnRlbnQgPSBhd2FpdCBVbnBrZ1NvdXJjZVJlc29sdmVyLnJlc29sdmVTb3VyY2VGaWxlKHBhY2thZ2VOYW1lLCB2ZXJzaW9uLCBmaWxlUGF0aCk7XG4gICAgICAgICAgICBpZiAoY29udGVudCkge1xuICAgICAgICAgICAgICAgIGludm9rZVVwZGF0ZShcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1N0b3JlZFRvQ2FjaGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0UGF0aDogdXJpLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnNcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGUuc3RvcmVGaWxlKHVyaSwgY29udGVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY29udGVudDtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
@@ -0,0 +1,112 @@
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvY29tcG9uZW50cy92c2NvZGUvdHMtdHlwZS1yZXNvbHZlci9tYWluLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEtBQUssSUFBSSxNQUFNLGlCQUFpQixDQUFDO0FBRXhDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFbkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFJeEQsMERBQTBEO0FBQzFELE1BQU0sT0FBTyxzQkFBc0I7SUFPL0IsWUFBMkIsTUFBYyxFQUFVLE9BQWdCO1FBQXhDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFBVSxZQUFPLEdBQVAsT0FBTyxDQUFTO1FBRjNELGdCQUFXLEdBQXlCLEVBQUUsQ0FBQztRQUczQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRWxELE1BQU0scUJBQXFCLEdBQUcsTUFBTSxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQzdELElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFdkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsRUFBRTtZQUNqQyxPQUFPLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUMsa0JBQWtCLENBQUM7Z0JBQ3RFLEdBQUcsT0FBTyxDQUFD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QUMsQ0FBQztpQkFDNUM7YUFDSjtZQUNELElBQUksQ0FBQyxjQUFjLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztTQUNqRDtRQUVELElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0lBQzdCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEltcG9ydFJlc29sdmVyIH0gZnJvbSAnLi9pbXBvcnQtcmVzb2x2ZXInO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoLWJyb3dzZXJpZnknO1xuaW1wb3J0IHR5cGUgKiBhcyBtb25hY28gZnJvbSAnbW9uYWNvLWVkaXRvcic7XG5pbXBvcnQgeyBpbnZva2VVcGRhdGUgfSBmcm9tICcuL3VwZGF0ZS1lbWl0dGVyJztcbmltcG9ydCB7IFJlY3Vyc2lvbkRlcHRoIH0gZnJvbSAnLi9yZWN1cnNpb24tZGVwdGgnO1xuaW1wb3J0IHsgT3B0aW9ucywgU291cmNlQ2FjaGUgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IER1bW15U291cmNlQ2FjaGUgfSBmcm9tICcuL2R1bW15LXNvdXJjZS1jYWNoZSc7XG5cbnR5cGUgRWRpdG9yID0gbW9uYWNvLmVkaXRvci5JQ29kZUVkaXRvciB8IG1vbmFjby5lZGl0b3IuSVN0YW5kYWxvbmVDb2RlRWRpdG9yO1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vbHVrYXNiYWNoL21vbmFjby1lZGl0b3ItYXV0by10eXBpbmdzXG5leHBvcnQgY2xhc3MgTW9uYWNvQXV0b1R5cGVJbXBvcnRlciBpbXBsZW1lbnRzIG1vbmFjby5JRGlzcG9zYWJsZSB7XG4gICAgcHJpdmF0ZSBzdGF0aWMgc2hhcmVkQ2FjaGU/OiBTb3VyY2VDYWNoZTtcbiAgICBwcml2YXRlIGltcG9ydFJlc29sdmVyOiBJbXBvcnRSZXNvbHZlcjtcbiAgICBwcml2YXRlIGRlYm91bmNlVGltZXI/OiBudW1iZXI7XG4gICAgcHJpdmF0ZSBpc1Jlc29sdmluZz86IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBkaXNwb3NhYmxlczogbW9uYWNvLklEaXNwb3NhYmxlW10gPSBbXTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIGVkaXRvcjogRWRpdG9yLCBwcml2YXRlIG9wdGlvbnM6IE9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5pbXBvcnRSZXNvbHZlciA9IG5ldyBJbXBvcnRSZXNvbHZlcihvcHRpb25zKTtcblxuICAgICAgICBjb25zdCBjaGFuZ2VNb2RlbERpc3Bvc2FibGUgPSBlZGl0b3Iub25EaWRDaGFuZ2VNb2RlbENvbnRlbnQoZSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRlYm91bmNlZFJlc29sdmVDb250ZW50cygpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kaXNwb3NhYmxlcy5wdXNoKGNoYW5nZU1vZGVsRGlzcG9zYWJsZSk7XG4gICAgICAgIHRoaXMucmVzb2x2ZUNvbnRlbnRzKCk7XG5cbiAgICAgICAgaWYgKCFvcHRpb25zLmRvbnRBZGFwdEVkaXRvck9wdGlvbnMpIHtcbiAgICAgICAgICAgIG9wdGlvbnMubW9uYWNvLmxhbmd1YWdlcy50eXBlc2NyaXB0LnR5cGVzY3JpcHREZWZhdWx0cy5zZXRDb21waWxlck9wdGlvbnMoe1xuICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMubW9uYWNvLmxhbmd1YWdlcy50eXBlc2NyaXB0LnR5cGVzY3JpcHREZWZhdWx0cy5nZXRDb21waWxlck9wdGlvbnMoKSxcbiAgICAgICAgICAgICAgICBtb2R1bGVSZXNvbHV0aW9uOiBvcHRpb25zLm1vbmFjby5sYW5ndWFnZXMudHlwZXNjcmlwdC5Nb2R1bGVSZXNvbHV0aW9uS2luZC5Ob2RlSnMsXG4gICAgICAgICAgICAgICAgYWxsb3dTeW50aGV0aWNEZWZhdWx0SW1wb3J0czogdHJ1ZSxcbiAgICAgICAgICAgICAgICByb290RGlyOiBvcHRpb25zLmZpbGVSb290UGF0aCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBhc3luYyBjcmVhdGUoZWRpdG9yOiBFZGl0b3IsIG9wdGlvbnM/OiBQYXJ0aWFsPE9wdGlvbnM+KTogUHJvbWlzZTxNb25hY29BdXRvVHlwZUltcG9ydGVyPiB7XG4gICAgICAgIGlmIChvcHRpb25zPy5zaGFyZUNhY2hlICYmIG9wdGlvbnMuc291cmNlQ2FjaGUgJiYgIU1vbmFjb0F1dG9UeXBlSW1wb3J0ZXIuc2hhcmVkQ2FjaGUpIHtcbiAgICAgICAgICAgIE1vbmFjb0F1dG9UeXBlSW1wb3J0ZXIuc2hhcmVkQ2FjaGUgPSBvcHRpb25zLnNvdXJjZUNhY2hlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbW9uYWNvSW5zdGFuY2UgPSBvcHRpb25zPy5tb25hY28gPz8gd2luZG93Wydtb25hY28nXTtcblxuICAgICAgICBpZiAoIW1vbmFjb0luc3RhbmNlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ21vbmFjb0luc3RhbmNlIG5vdCBmb3VuZCwgeW91IGNhbiBzcGVjaWZ5IHRoZSBtb25hY28gaW5zdGFuY2UgdmlhIG9wdGlvbnMubW9uYWNvJyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IE1vbmFjb0F1dG9UeXBlSW1wb3J0ZXIoZWRpdG9yLCB7XG4gICAgICAgICAgICBmaWxlUm9vdFBhdGg6ICdpbm1lbW9yeTovL21vZGVsLycsXG4gICAgICAgICAgICBvbmx5U3BlY2lmaWVkUGFja2FnZXM6IGZhbHNlLFxuICAgICAgICAgICAgcHJlbG9hZFBhY2thZ2VzOiBmYWxzZSxcbiAgICAgICAgICAgIHNoYXJlQ2FjaGU6IGZhbHNlLFxuICAgICAgICAgICAgZG9udEFkYXB0RWRpdG9yT3B0aW9uczogZmFsc2UsXG4gICAgICAgICAgICBkb250UmVmcmVzaE1vZGVsVmFsdWVBZnRlclJlc29sdmVtZW50OiBmYWxzZSxcbiAgICAgICAgICAgIHNvdXJjZUNhY2hlOiBNb25hY29BdXRvVHlwZUltcG9ydGVyLnNoYXJlZENhY2hlID8/IG5ldyBEdW1teVNvdXJjZUNhY2hlKCksXG4gICAgICAgICAgICBkZWJvdW5jZUR1cmF0aW9uOiA0MDAwLFxuICAgICAgICAgICAgZmlsZVJlY3Vyc2lvbkRlcHRoOiAxMCxcbiAgICAgICAgICAgIHBhY2thZ2VSZWN1cnNpb25EZXB0aDogMyxcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBtb25hY286IG1vbmFjb0luc3RhbmNlLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGlzcG9zZSgpIHtcbiAgICAgICAgdGhpcy5kaXNwb3NhYmxlcy5mb3JFYWNoKGQgPT4gZC5kaXNwb3NlKCkpXG4gICAgfVxuXG4gICAgcHVibGljIHNldFZlcnNpb25zKHZlcnNpb25zOiB7IFtwYWNrYWdlTmFtZTogc3RyaW5nXTogc3RyaW5nIH0pIHtcbiAgICAgICAgdGhpcy5pbXBvcnRSZXNvbHZlci5zZXRWZXJzaW9ucyh2ZXJzaW9ucyk7XG4gICAgICAgIHRoaXMub3B0aW9ucy52ZXJzaW9ucyA9IHZlcnNpb25zO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjbGVhckNhY2hlKCkge1xuICAgICAgICBhd2FpdCB0aGlzLm9wdGlvbnMuc291cmNlQ2FjaGUuY2xlYXIoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRlYm91bmNlZFJlc29sdmVDb250ZW50cygpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNSZXNvbHZpbmcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGludm9rZVVwZGF0ZSh7IHR5cGU6ICdDb2RlQ2hhbmdlZCcgfSwgdGhpcy5vcHRpb25zKTtcblxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmRlYm91bmNlRHVyYXRpb24gPD0gMCkge1xuICAgICAgICAgICAgdGhpcy5yZXNvbHZlQ29udGVudHMoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRlYm91bmNlVGltZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmRlYm91bmNlVGltZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5kZWJvdW5jZVRpbWVyID0gc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZXNvbHZlQ29udGVudHMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRlYm91bmNlVGltZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9LCB0aGlzLm9wdGlvbnMuZGVib3VuY2VEdXJhdGlvbikgYXMgYW55O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyByZXNvbHZlQ29udGVudHMoKSB7XG4gICAgICAgIHRoaXMuaXNSZXNvbHZpbmcgPSB0cnVlO1xuICAgICAgICBpbnZva2VVcGRhdGUoeyB0eXBlOiAnUmVzb2x2ZU5ld0ltcG9ydHMnIH0sIHRoaXMub3B0aW9ucyk7XG5cbiAgICAgICAgY29uc3QgbW9kZWwgPSB0aGlzLmVkaXRvci5nZXRNb2RlbCgpO1xuICAgICAgICAvLyBUaGlzIGNhbiBoYXBwZW4gd2hlbiB0aGUgZWRpdG9yIGlzIGRpc3Bvc2VkIGJlZm9yZSBhbGwgdHlwaW5nc1xuICAgICAgICAvLyBhcmUgaW5zdGFsbGVkLlxuICAgICAgICBpZiAoIW1vZGVsKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcignTm8gbW9kZWwnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBtb2RlbC5nZXRMaW5lc0NvbnRlbnQoKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5pbXBvcnRSZXNvbHZlci5yZXNvbHZlSW1wb3J0c0luRmlsZShcbiAgICAgICAgICAgICAgICBjb250ZW50LmpvaW4oJ1xcbicpLFxuICAgICAgICAgICAgICAgIHBhdGguZGlybmFtZShtb2RlbC51cmkudG9TdHJpbmcoKSksXG4gICAgICAgICAgICAgICAgbmV3IFJlY3Vyc2lvbkRlcHRoKHRoaXMub3B0aW9ucylcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMub25FcnJvcikge1xuICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5vbkVycm9yKChlIGFzIEVycm9yKS5tZXNzYWdlID8/IGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmltcG9ydFJlc29sdmVyLndlcmVOZXdJbXBvcnRzUmVzb2x2ZWQoKSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuZG9udFJlZnJlc2hNb2RlbFZhbHVlQWZ0ZXJSZXNvbHZlbWVudCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRQb3NpdGlvbiA9IHRoaXMuZWRpdG9yLmdldFBvc2l0aW9uKCk7XG4gICAgICAgICAgICAgICAgbW9kZWwuc2V0VmFsdWUobW9kZWwuZ2V0VmFsdWUoKSk7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRQb3NpdGlvbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVkaXRvci5zZXRQb3NpdGlvbihjdXJyZW50UG9zaXRpb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaW1wb3J0UmVzb2x2ZXIucmVzZXROZXdJbXBvcnRzUmVzb2x2ZWQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaXNSZXNvbHZpbmcgPSBmYWxzZTtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,21 @@
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==
@@ -0,0 +1,14 @@
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL2NvbXBvbmVudHMvdnNjb2RlL3RzLXR5cGUtcmVzb2x2ZXIvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxLQUFLLElBQUksTUFBTSxpQkFBaUIsQ0FBQztBQWtOeEMsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxDQUFxQixFQUFFLEVBQUU7SUFDaEUsUUFBUSxDQUFDLENBQUMsSUFBSSxFQUFFO1FBQ1osS0FBSyxTQUFTO1lBQ1YsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLFVBQVUsSUFBSSxFQUFFLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDeEUsS0FBSyxVQUFVO1lBQ1gsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2pELEtBQUsscUJBQXFCO1lBQ3RCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2hFLEtBQUssWUFBWTtZQUNiLE1BQU0sSUFBSSxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztLQUMxQztBQUNMLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlICogYXMgbW9uYWNvIGZyb20gJ21vbmFjby1lZGl0b3InO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoLWJyb3dzZXJpZnknO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNvdXJjZUNhY2hlIHtcbiAgICBpc0ZpbGVBdmFpbGFibGU/OiAodXJpOiBzdHJpbmcpID0+IFByb21pc2U8Ym9vbGVhbj47XG4gICAgc3RvcmVGaWxlOiAodXJpOiBzdHJpbmcsIGNvbnRlbnQ6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcbiAgICBnZXRGaWxlOiAodXJpOiBzdHJpbmcpID0+IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPjtcbiAgICBjbGVhcjogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbn1cblxuZXhwb3J0IHR5cGUgUHJvZ3Jlc3NVcGRhdGUgPVxuICAgIHwge1xuICAgICAgICB0eXBlOiAnQ29kZUNoYW5nZWQnO1xuICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ1Jlc29sdmVOZXdJbXBvcnRzJztcbiAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdMb29rZWRVcFR5cGVGaWxlJztcbiAgICAgICAgcGF0aDogc3RyaW5nO1xuICAgICAgICBzdWNjZXNzOiBib29sZWFuO1xuICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ0F0dGVtcHRlZExvb2tVcEZpbGUnO1xuICAgICAgICBwYXRoOiBzdHJpbmc7XG4gICAgICAgIHN1Y2Nlc3M6IGJvb2xlYW47XG4gICAgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAnTG9va2VkVXBQYWNrYWdlJztcbiAgICAgICAgcGFja2FnZTogc3RyaW5nO1xuICAgICAgICBkZWZpbml0ZWx5VHlwZWQ6IGJvb2xlYW47XG4gICAgICAgIHN1Y2Nlc3M6IGJvb2xlYW47XG4gICAgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAnTG9hZGVkRnJvbUNhY2hlJztcbiAgICAgICAgaW1wb3J0UGF0aDogc3RyaW5nO1xuICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ1N0b3JlZFRvQ2FjaGUnO1xuICAgICAgICBpbXBvcnRQYXRoOiBzdHJpbmc7XG4gICAgfTtcblxuXG5cbmV4cG9ydCBpbnRlcmZhY2UgT3B0aW9ucyB7XG4gICAgLyoqXG4gICAgICogU2hhcmUgc291cmNlIGNhY2hlIGJldHdlZW4gbXVsdGlwbGUgZWRpdG9yIGluc3RhbmNlcyBieSBzdG9yaW5nXG4gICAgICogdGhlIGNhY2hlIGluIGEgc3RhdGljIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogRGVmYXVsdHMgdG8gZmFsc2UuXG4gICAgICovXG4gICAgc2hhcmVDYWNoZTogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIE9ubHkgdXNlIHBhY2thZ2VzIHNwZWNpZmllZCBpbiB0aGUgYHZlcnNpb25zYCBwcm9wZXJ0eS5cbiAgICAgKlxuICAgICAqIERlZmF1bHRzIHRvIGZhbHNlLlxuICAgICAqL1xuICAgIG9ubHlTcGVjaWZpZWRQYWNrYWdlczogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIExvYWQgdHlwaW5ncyBmcm9tIHByZXNwZWNpZmllZCB2ZXJzaW9ucyB3aGVuIGluaXRpYWxpemluZy4gVmVyc2lvbnNcbiAgICAgKiBuZWVkIHRvIGJlIHNwZWNpZmllZCBpbiB0aGUgYGB2ZXJzaW9uc2BgIG9wdGlvbi5cbiAgICAgKlxuICAgICAqIERlZmF1bHRzIHRvIGZhbHNlLlxuICAgICAqL1xuICAgIHByZWxvYWRQYWNrYWdlczogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgY29tcGlsZXIgb3B0aW9ucyB0byBkZWZhdWx0cyBzdWl0YWJsZSBmb3IgYXV0by1sb2FkZWRcbiAgICAgKiBkZWNsYXJhdGlvbnMsIHNwZWNpZmljYWxseSBieSBzZXR0aW5nIGBgbW9kdWxlUmVzb2x1dGlvbmBgIHRvXG4gICAgICogYGBOb2RlSnNgYCBhbmQgYGBhbGxvd1N5bnRoZXRpY0RlZmF1bHRJbXBvcnRzYGAgdG8gdHJ1ZS5cbiAgICAgKiBPdGhlciBvcHRpb25zIGFyZSBub3QgY2hhbmdlZC4gU2V0IHRoaXMgcHJvcGVydHkgdG8gdHJ1ZSB0b1xuICAgICAqIGRpc2FibGUgdGhpcyBiZWhhdmlvdXIuXG4gICAgICpcbiAgICAgKiBEZWZhdWx0cyB0byBmYWxzZS5cbiAgICAgKi9cbiAgICBkb250QWRhcHRFZGl0b3JPcHRpb25zOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQWZ0ZXIgdHlwaW5ncyB3ZXJlIHJlc29sdmVkIGFuZCBpbmplY3RlZCBpbnRvIG1vbmFjbywgYXV0by10eXBpbmdzXG4gICAgICogdXBkYXRlcyB0aGUgdmFsdWUgb2YgdGhlIGN1cnJlbnQgbW9kZWwgdG8gdHJpZ2dlciBhIHJlZnJlc2ggaW5cbiAgICAgKiBtb25hY28ncyB0eXBpbmcgbG9naWMsIHNvIHRoYXQgaXQgdXNlcyB0aGUgaW5qZWN0ZWQgdHlwaW5ncy5cbiAgICAgKi9cbiAgICBkb250UmVmcmVzaE1vZGVsVmFsdWVBZnRlclJlc29sdmVtZW50OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogUHJlc3BlY2lmaWVkIHBhY2thZ2UgdmVyc2lvbnMuIElmIGEgcGFja2FnZSBpcyBsb2FkZWQgd2hvc2VcbiAgICAgKiBuYW1lIGlzIHNwZWNpZmllZCBpbiB0aGlzIG9iamVjdCwgaXQgd2lsbCBsb2FkIHdpdGggdGhlIGV4YWN0XG4gICAgICogdmVyc2lvbiBzcGVjaWZpZWQgaW4gdGhlIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEV4YW1wbGU6XG4gICAgICpcbiAgICAgKiBgYGBqc29uXG4gICAgICoge1xuICAgICAqICAgXCJAdHlwZXMvcmVhY3RcIjogXCIxNy4wLjBcIixcbiAgICAgKiAgIFwiY3NzdHlwZVwiOiBcIjMuMC41XCJcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBTZXR0aW5nIHRoZSBvcHRpb24gYGBvbmx5U3BlY2lmaWVkUGFja2FnZXNgYCB0byB0cnVlIG1ha2VzIHRoaXNcbiAgICAgKiBwcm9wZXJ0eSBhY3QgYXMgYSB3aGl0ZWxpc3QgZm9yIHBhY2thZ2VzLlxuICAgICAqXG4gICAgICogU2V0dGluZyB0aGUgb3B0aW9uIGBgcHJlbG9hZFBhY2thZ2VzYGAgbWFrZXMgdGhlIHBhY2thZ2VzIHNwZWNpZmllZFxuICAgICAqIGluIHRoaXMgcHJvcGVydHkgbG9hZCBkaXJlY3RseSBhZnRlciBpbml0aWFsaXppbmcgdGhlIGF1dG8tbG9hZGVyLlxuICAgICAqL1xuICAgIHZlcnNpb25zPzogeyBbcGFja2FnZU5hbWU6IHN0cmluZ106IHN0cmluZzsgfTtcblxuICAgIC8qKlxuICAgICAqIElmIGEgbmV3IHBhY2thZ2Ugd2FzIGxvYWRlZCwgaXRzIG5hbWUgYW5kIHZlcnNpb24gaXMgYWRkZWQgdG8gdGhlXG4gICAgICogdmVyc2lvbiBvYmplY3QsIGFuZCB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgd2l0aCB0aGUgdXBkYXRlZCBvYmplY3QuXG4gICAgICogQHBhcmFtIHZlcnNpb25zIHVwZGF0ZWQgdmVyc2lvbnMgb2JqZWN0LlxuICAgICAqL1xuICAgIG9uVXBkYXRlVmVyc2lvbnM/OiAodmVyc2lvbnM6IHsgW3BhY2thZ2VOYW1lOiBzdHJpbmddOiBzdHJpbmc7IH0pID0+IHZvaWQ7XG5cbiAgICAvKipcbiAgICAgKiBTdXBwbHkgYSBjYWNoZSB3aGVyZSBkZWNsYXJhdGlvbiBmaWxlcyBhbmQgcGFja2FnZS5qc29uIGZpbGVzIGFyZVxuICAgICAqIGNhY2hlZCB0by4gU3VwcGx5IGFuIGluc3RhbmNlIG9mIHtAbGluayBMb2NhbFN0b3JhZ2VDYWNoZX0gdG8gY2FjaGVcbiAgICAgKiBmaWxlcyB0byBsb2NhbFN0b3JhZ2UuXG4gICAgICovXG4gICAgc291cmNlQ2FjaGU6IFNvdXJjZUNhY2hlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHJvb3QgZGlyZWN0b3J5IHdoZXJlIHlvdXIgZWRpdGVkIGZpbGVzIGFyZS4gTXVzdCBlbmQgd2l0aFxuICAgICAqIGEgc2xhc2guIFRoZSBkZWZhdWx0IGlzIHN1aXRhYmxlIHVubGVzcyB5b3UgY2hhbmdlIHRoZSBkZWZhdWx0XG4gICAgICogVVJJIG9mIGZpbGVzIGxvYWRlZCBpbiB0aGUgZWRpdG9yLlxuICAgICAqXG4gICAgICogRGVmYXVsdHMgdG8gXCJpbm1lbW9yeTovL21vZGVsL1wiXG4gICAgICovXG4gICAgZmlsZVJvb3RQYXRoOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBEZWJvdW5jZXMgY29kZSByZWFuYWx5emluZyBhZnRlciB1c2VyIGhhcyBjaGFuZ2VkIHRoZSBlZGl0b3IgY29udGVudHNcbiAgICAgKiBieSB0aGUgc3BlY2lmaWVkIGFtb3VudC4gU2V0IHRvIHplcm8gdG8gZGlzYWJsZS4gVmFsdWUgcHJvdmlkZWQgaW5cbiAgICAgKiBtaWxsaXNlY29uZHMuXG4gICAgICpcbiAgICAgKiBEZWZhdWx0cyB0byA0MDAwLCBpLmUuIDQgc2Vjb25kcy5cbiAgICAgKi9cbiAgICBkZWJvdW5jZUR1cmF0aW9uOiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBNYXhpbXVtIHJlY3Vyc2lvbiBkZXB0aCBmb3IgcmVjdXJzaW5nIHBhY2thZ2VzLiBEZXRlcm1pbmVzIGhvdyBtYW55XG4gICAgICogbmVzdGVkIHBhY2thZ2UgZGVjbGFyYXRpb25zIGFyZSBsb2FkZWQuIEZvciBleGFtcGxlLCBpZiBgYHBhY2thZ2VSZWN1cnNpb25EZXB0aGBgXG4gICAgICogaGFzIHRoZSB2YWx1ZSAyLCB0aGUgY29kZSBpbiB0aGUgbW9uYWNvIGVkaXRvciByZWZlcmVuY2VzIHBhY2thZ2VzIGBgQTFgYCwgYGBBMmBgXG4gICAgICogYW5kIGBgQTNgYCwgcGFja2FnZSBgYEExYGAgcmVmZXJlbmNlcyBwYWNrYWdlIGBgQjFgYCBhbmQgYGBCMWBgIHJlZmVyZW5jZXMgYGBDMWBgLFxuICAgICAqIHRoZW4gcGFja2FnZXMgYGBBMWBgLCBgYEEyYGAsIGBgQTNgYCBhbmQgYGBCMWBgIGFyZSBsb2FkZWQuIFNldCB0byB6ZXJvIHRvXG4gICAgICogZGlzYWJsZS5cbiAgICAgKlxuICAgICAqIERlZmF1bHRzIHRvIDMuXG4gICAgICovXG4gICAgcGFja2FnZVJlY3Vyc2lvbkRlcHRoOiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBNYXhpbXVtIHJlY3Vyc2lvbiBkZXB0aCBmb3IgcmVjdXJzaW5nIGZpbGVzLiBEZXRlcm1pbmVzIGhvdyBtYW55XG4gICAgICogbmVzdGVkIGZpbGUgZGVjbGFyYXRpb25zIGFyZSBsb2FkZWQuIFRoZSBzYW1lIGFzIGBgcGFja2FnZVJlY3Vyc2lvbkRlcHRoYGAsXG4gICAgICogYnV0IGZvciBpbmRpdmlkdWFsIGZpbGVzLiBTZXQgdG8gemVybyB0byBkaXNhYmxlLlxuICAgICAqXG4gICAgICogRGVmYXVsdHMgdG8gMTAuXG4gICAgICovXG4gICAgZmlsZVJlY3Vyc2lvbkRlcHRoOiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBDYWxsZWQgYWZ0ZXIgcHJvZ3Jlc3MgdXBkYXRlcyBsaWtlIGxvYWRlZCBkZWNsYXJhdGlvbnMgb3IgZXZlbnRzLlxuICAgICAqIEBwYXJhbSB1cGRhdGUgZGV0YWlsZWQgZXZlbnQgb2JqZWN0IGNvbnRhaW5pbmcgdXBkYXRlIGluZm9zLlxuICAgICAqIEBwYXJhbSB0ZXh0dWFsIGEgdGV4dHVhbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgdXBkYXRlIGZvciBkZWJ1Z2dpbmcuXG4gICAgICovXG4gICAgb25VcGRhdGU/OiAodXBkYXRlOiBQcm9ncmVzc1VwZGF0ZSwgdGV4dHVhbDogc3RyaW5nKSA9PiB2b2lkO1xuXG4gICAgLyoqXG4gICAgICogQ2FsbGVkIGlmIGVycm9ycyBvY2N1ci5cbiAgICAgKiBAcGFyYW0gZXJyb3IgYSB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBlcnJvci5cbiAgICAgKi9cbiAgICBvbkVycm9yPzogKGVycm9yOiBzdHJpbmcpID0+IHZvaWQ7XG4gICAgLyoqXG4gICAgICogaW5zdGFuY2Ugb2YgbW9uYWNvIGVkaXRvclxuICAgICAqL1xuICAgIG1vbmFjbzogdHlwZW9mIG1vbmFjbztcbn1cblxuXG5leHBvcnQgaW50ZXJmYWNlIEltcG9ydFJlc291cmNlUGF0aFBhY2thZ2Uge1xuICAgIGtpbmQ6ICdwYWNrYWdlJztcbiAgICBwYWNrYWdlTmFtZTogc3RyaW5nO1xuICAgIGltcG9ydFBhdGg/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW1wb3J0UmVzb3VyY2VQYXRoUmVsYXRpdmUge1xuICAgIGtpbmQ6ICdyZWxhdGl2ZSc7XG4gICAgaW1wb3J0UGF0aDogc3RyaW5nO1xuICAgIHNvdXJjZVBhdGg6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbXBvcnRSZXNvdXJjZVBhdGhSZWxhdGl2ZUluUGFja2FnZSB7XG4gICAga2luZDogJ3JlbGF0aXZlLWluLXBhY2thZ2UnO1xuICAgIHBhY2thZ2VOYW1lOiBzdHJpbmc7XG4gICAgaW1wb3J0UGF0aDogc3RyaW5nO1xuICAgIHNvdXJjZVBhdGg6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbXBvcnRSZXNvdXJjZUJydXRlRm9yY2Uge1xuICAgIGtpbmQ6ICdicnV0ZWZvcmNlJztcbiAgICBwYWNrYWdlTmFtZTogc3RyaW5nO1xuICAgIHR5cGluZ0ZpbGVzOiBhbnlbXTtcbn1cblxuZXhwb3J0IHR5cGUgSW1wb3J0UmVzb3VyY2VQYXRoID1cbiAgICB8IEltcG9ydFJlc291cmNlUGF0aFBhY2thZ2VcbiAgICB8IEltcG9ydFJlc291cmNlUGF0aFJlbGF0aXZlXG4gICAgfCBJbXBvcnRSZXNvdXJjZVBhdGhSZWxhdGl2ZUluUGFja2FnZVxuICAgIHwgSW1wb3J0UmVzb3VyY2VCcnV0ZUZvcmNlO1xuXG5leHBvcnQgY29uc3QgaW1wb3J0UmVzb3VyY2VQYXRoVG9TdHJpbmcgPSAocDogSW1wb3J0UmVzb3VyY2VQYXRoKSA9PiB7XG4gICAgc3dpdGNoIChwLmtpbmQpIHtcbiAgICAgICAgY2FzZSAncGFja2FnZSc6XG4gICAgICAgICAgICByZXR1cm4gcGF0aC5qb2luKHAucGFja2FnZU5hbWUsIHAuaW1wb3J0UGF0aCA/PyAnJywgJ3BhY2thZ2UuanNvbicpO1xuICAgICAgICBjYXNlICdyZWxhdGl2ZSc6XG4gICAgICAgICAgICByZXR1cm4gcGF0aC5qb2luKHAuc291cmNlUGF0aCwgcC5pbXBvcnRQYXRoKTtcbiAgICAgICAgY2FzZSAncmVsYXRpdmUtaW4tcGFja2FnZSc6XG4gICAgICAgICAgICByZXR1cm4gcGF0aC5qb2luKHAucGFja2FnZU5hbWUsIHAuc291cmNlUGF0aCwgcC5pbXBvcnRQYXRoKTtcbiAgICAgICAgY2FzZSAnYnJ1dGVmb3JjZSc6XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJOb3QgSW1wbGVtZW50ZWRcIik7XG4gICAgfVxufTtcbiJdfQ==
@@ -0,0 +1,21 @@
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5wa2ctc291cmNlLXJlc29sdmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3NyYy9jb21wb25lbnRzL3ZzY29kZS90cy10eXBlLXJlc29sdmVyL3VucGtnLXNvdXJjZS1yZXNvbHZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxNQUFNLE9BQU8sbUJBQW1CO0lBQ3JCLE1BQU0sQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQ2xDLFdBQW1CLEVBQ25CLE9BQTJCLEVBQzNCLE9BQTJCO1FBRTNCLE9BQU8sTUFBTSxJQUFJLENBQUMsV0FBVyxDQUN6QixxQkFBcUIsV0FBVyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxlQUFlLENBQ2hILENBQUM7SUFDTixDQUFDO0lBRU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FDakMsV0FBbUIsRUFDbkIsT0FBMkIsRUFDM0IsSUFBWTtRQUVaLE9BQU8sTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLHFCQUFxQixXQUFXLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQztJQUM3RyxDQUFDO0lBRU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsR0FBVztRQUN4QyxNQUFNLEdBQUcsR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUVoRCxJQUFJLEdBQUcsQ0FBQyxFQUFFLEVBQUU7WUFDUixPQUFPLE1BQU0sR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO1NBQzNCO2FBQ0ksSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRTtZQUN6QixPQUFPLEVBQUUsQ0FBQztTQUNiO2FBQ0k7WUFDRCxNQUFNLEtBQUssQ0FBQyxxREFBcUQsR0FBRyxFQUFFLENBQUMsQ0FBQztTQUMzRTtJQUNMLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbIlxuZXhwb3J0IGNsYXNzIFVucGtnU291cmNlUmVzb2x2ZXIge1xuICAgIHB1YmxpYyBzdGF0aWMgYXN5bmMgcmVzb2x2ZVBhY2thZ2VKc29uKFxuICAgICAgICBwYWNrYWdlTmFtZTogc3RyaW5nLFxuICAgICAgICB2ZXJzaW9uOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgICAgIHN1YlBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZFxuICAgICk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnJlc29sdmVGaWxlKFxuICAgICAgICAgICAgYGh0dHBzOi8vdW5wa2cuY29tLyR7cGFja2FnZU5hbWV9JHt2ZXJzaW9uID8gYEAke3ZlcnNpb259YCA6ICcnfSR7c3ViUGF0aCA/IGAvJHtzdWJQYXRofWAgOiAnJ30vcGFja2FnZS5qc29uYFxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgYXN5bmMgcmVzb2x2ZVNvdXJjZUZpbGUoXG4gICAgICAgIHBhY2thZ2VOYW1lOiBzdHJpbmcsXG4gICAgICAgIHZlcnNpb246IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICAgICAgcGF0aDogc3RyaW5nXG4gICAgKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucmVzb2x2ZUZpbGUoYGh0dHBzOi8vdW5wa2cuY29tLyR7cGFja2FnZU5hbWV9JHt2ZXJzaW9uID8gYEAke3ZlcnNpb259YCA6ICcnfS8ke3BhdGh9YCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgYXN5bmMgcmVzb2x2ZUZpbGUodXJsOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2godXJsLCB7IG1ldGhvZDogJ0dFVCcgfSk7XG5cbiAgICAgICAgaWYgKHJlcy5vaykge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHJlcy50ZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocmVzLnN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihgRXJyb3Igb3RoZXIgdGhhbiA0MDQgd2hpbGUgZmV0Y2hpbmcgZnJvbSBVbnBrZyBhdCAke3VybH1gKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==