@ngtools/webpack 7.2.0 → 7.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ngtools/webpack",
3
- "version": "7.2.0",
3
+ "version": "7.2.4",
4
4
  "description": "Webpack plugin that AoT compiles your Angular components and modules.",
5
5
  "main": "./src/index.js",
6
6
  "typings": "src/index.d.ts",
@@ -25,7 +25,7 @@
25
25
  },
26
26
  "homepage": "https://github.com/angular/angular-cli",
27
27
  "dependencies": {
28
- "@angular-devkit/core": "7.2.0",
28
+ "@angular-devkit/core": "7.2.4",
29
29
  "enhanced-resolve": "4.1.0",
30
30
  "rxjs": "6.3.3",
31
31
  "tree-kill": "1.2.0",
@@ -3,7 +3,7 @@ import { WebpackCompilerHost } from '../compiler_host';
3
3
  export declare function collectDeepNodes<T extends ts.Node>(node: ts.Node, kind: ts.SyntaxKind): T[];
4
4
  export declare function getFirstNode(sourceFile: ts.SourceFile): ts.Node;
5
5
  export declare function getLastNode(sourceFile: ts.SourceFile): ts.Node | null;
6
- export declare function createTypescriptContext(content: string): {
6
+ export declare function createTypescriptContext(content: string, additionalFiles?: Record<string, string>): {
7
7
  compilerHost: WebpackCompilerHost;
8
8
  program: ts.Program;
9
9
  };
@@ -40,12 +40,13 @@ exports.getLastNode = getLastNode;
40
40
  // Test transform helpers.
41
41
  const basePath = '/project/src/';
42
42
  const fileName = basePath + 'test-file.ts';
43
- function createTypescriptContext(content) {
43
+ function createTypescriptContext(content, additionalFiles) {
44
44
  // Set compiler options.
45
45
  const compilerOptions = {
46
46
  noEmitOnError: false,
47
47
  allowJs: true,
48
48
  newLine: ts.NewLineKind.LineFeed,
49
+ moduleResolution: ts.ModuleResolutionKind.NodeJs,
49
50
  target: ts.ScriptTarget.ESNext,
50
51
  skipLibCheck: true,
51
52
  sourceMap: false,
@@ -55,6 +56,11 @@ function createTypescriptContext(content) {
55
56
  const compilerHost = new compiler_host_1.WebpackCompilerHost(compilerOptions, basePath, new core_1.virtualFs.SimpleMemoryHost(), false);
56
57
  // Add a dummy file to host content.
57
58
  compilerHost.writeFile(fileName, content, false);
59
+ if (additionalFiles) {
60
+ for (const key in additionalFiles) {
61
+ compilerHost.writeFile(basePath + key, additionalFiles[key], false);
62
+ }
63
+ }
58
64
  // Create the TypeScript program.
59
65
  const program = ts.createProgram([fileName], compilerOptions, compilerHost);
60
66
  return { compilerHost, program };
@@ -81,4 +87,4 @@ function transformTypescript(content, transformers, program, compilerHost) {
81
87
  return compilerHost.readFile(fileName.replace(/\.tsx?$/, '.js'));
82
88
  }
83
89
  exports.transformTypescript = transformTypescript;
84
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXN0X2hlbHBlcnMuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL25ndG9vbHMvd2VicGFjay9zcmMvdHJhbnNmb3JtZXJzL2FzdF9oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUE7Ozs7OztHQU1HO0FBQ0gsK0NBQWlEO0FBQ2pELGlDQUFpQztBQUNqQyxvREFBdUQ7QUFHdkQseUVBQXlFO0FBQ3pFLFNBQWdCLGdCQUFnQixDQUFvQixJQUFhLEVBQUUsSUFBbUI7SUFDcEYsTUFBTSxLQUFLLEdBQVEsRUFBRSxDQUFDO0lBQ3RCLE1BQU0sTUFBTSxHQUFHLENBQUMsS0FBYyxFQUFFLEVBQUU7UUFDaEMsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLElBQUksRUFBRTtZQUN2QixLQUFLLENBQUMsSUFBSSxDQUFDLEtBQVUsQ0FBQyxDQUFDO1NBQ3hCO1FBQ0QsRUFBRSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDakMsQ0FBQyxDQUFDO0lBQ0YsRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFFOUIsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBWEQsNENBV0M7QUFFRCxTQUFnQixZQUFZLENBQUMsVUFBeUI7SUFDcEQsSUFBSSxVQUFVLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDcEMsT0FBTyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ2pDO0lBRUQsT0FBTyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xDLENBQUM7QUFORCxvQ0FNQztBQUVELFNBQWdCLFdBQVcsQ0FBQyxVQUF5QjtJQUNuRCxJQUFJLFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUNwQyxPQUFPLFVBQVUsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDO0tBQ3hFO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBTkQsa0NBTUM7QUFHRCwwQkFBMEI7QUFDMUIsTUFBTSxRQUFRLEdBQUcsZUFBZSxDQUFDO0FBQ2pDLE1BQU0sUUFBUSxHQUFHLFFBQVEsR0FBRyxjQUFjLENBQUM7QUFFM0MsU0FBZ0IsdUJBQXVCLENBQUMsT0FBZTtJQUNyRCx3QkFBd0I7SUFDeEIsTUFBTSxlQUFlLEdBQXVCO1FBQzFDLGFBQWEsRUFBRSxLQUFLO1FBQ3BCLE9BQU8sRUFBRSxJQUFJO1FBQ2IsT0FBTyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsUUFBUTtRQUNoQyxNQUFNLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxNQUFNO1FBQzlCLFlBQVksRUFBRSxJQUFJO1FBQ2xCLFNBQVMsRUFBRSxLQUFLO1FBQ2hCLGFBQWEsRUFBRSxJQUFJO0tBQ3BCLENBQUM7SUFFRix3QkFBd0I7SUFDeEIsTUFBTSxZQUFZLEdBQUcsSUFBSSxtQ0FBbUIsQ0FDMUMsZUFBZSxFQUNmLFFBQVEsRUFDUixJQUFJLGdCQUFTLENBQUMsZ0JBQWdCLEVBQUUsRUFDaEMsS0FBSyxDQUNOLENBQUM7SUFFRixvQ0FBb0M7SUFDcEMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRWpELGlDQUFpQztJQUNqQyxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsZUFBZSxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBRTVFLE9BQU8sRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLENBQUM7QUFDbkMsQ0FBQztBQTNCRCwwREEyQkM7QUFFRCxTQUFnQixtQkFBbUIsQ0FDakMsT0FBMkIsRUFDM0IsWUFBb0QsRUFDcEQsT0FBb0IsRUFDcEIsWUFBa0M7SUFHbEMseUNBQXlDO0lBQ3pDLElBQUksT0FBTyxLQUFLLFNBQVMsRUFBRTtRQUN6QixNQUFNLGlCQUFpQixHQUFHLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzNELE9BQU8sR0FBRyxpQkFBaUIsQ0FBQyxPQUFPLENBQUM7UUFDcEMsWUFBWSxHQUFHLGlCQUFpQixDQUFDLFlBQVksQ0FBQztLQUMvQztTQUFNLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxZQUFZLEVBQUU7UUFDcEMsTUFBTSxJQUFJLEtBQUssQ0FBQyw2RUFBNkUsQ0FBQyxDQUFDO0tBQ2hHO0lBRUQsUUFBUTtJQUNSLE1BQU0sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FDL0MsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxDQUNyRSxDQUFDO0lBRUYsOENBQThDO0lBQzlDLElBQUksV0FBVyxFQUFFO1FBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUUzQixPQUFPLElBQUksQ0FBQztLQUNiO0lBRUQsNEJBQTRCO0lBQzVCLE9BQU8sWUFBWSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ25FLENBQUM7QUE5QkQsa0RBOEJDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuaW1wb3J0IHsgdmlydHVhbEZzIH0gZnJvbSAnQGFuZ3VsYXItZGV2a2l0L2NvcmUnO1xuaW1wb3J0ICogYXMgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5pbXBvcnQgeyBXZWJwYWNrQ29tcGlsZXJIb3N0IH0gZnJvbSAnLi4vY29tcGlsZXJfaG9zdCc7XG5cblxuLy8gRmluZCBhbGwgbm9kZXMgZnJvbSB0aGUgQVNUIGluIHRoZSBzdWJ0cmVlIG9mIG5vZGUgb2YgU3ludGF4S2luZCBraW5kLlxuZXhwb3J0IGZ1bmN0aW9uIGNvbGxlY3REZWVwTm9kZXM8VCBleHRlbmRzIHRzLk5vZGU+KG5vZGU6IHRzLk5vZGUsIGtpbmQ6IHRzLlN5bnRheEtpbmQpOiBUW10ge1xuICBjb25zdCBub2RlczogVFtdID0gW107XG4gIGNvbnN0IGhlbHBlciA9IChjaGlsZDogdHMuTm9kZSkgPT4ge1xuICAgIGlmIChjaGlsZC5raW5kID09PSBraW5kKSB7XG4gICAgICBub2Rlcy5wdXNoKGNoaWxkIGFzIFQpO1xuICAgIH1cbiAgICB0cy5mb3JFYWNoQ2hpbGQoY2hpbGQsIGhlbHBlcik7XG4gIH07XG4gIHRzLmZvckVhY2hDaGlsZChub2RlLCBoZWxwZXIpO1xuXG4gIHJldHVybiBub2Rlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZpcnN0Tm9kZShzb3VyY2VGaWxlOiB0cy5Tb3VyY2VGaWxlKTogdHMuTm9kZSB7XG4gIGlmIChzb3VyY2VGaWxlLnN0YXRlbWVudHMubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBzb3VyY2VGaWxlLnN0YXRlbWVudHNbMF07XG4gIH1cblxuICByZXR1cm4gc291cmNlRmlsZS5nZXRDaGlsZEF0KDApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFzdE5vZGUoc291cmNlRmlsZTogdHMuU291cmNlRmlsZSk6IHRzLk5vZGUgfCBudWxsIHtcbiAgaWYgKHNvdXJjZUZpbGUuc3RhdGVtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHNvdXJjZUZpbGUuc3RhdGVtZW50c1tzb3VyY2VGaWxlLnN0YXRlbWVudHMubGVuZ3RoIC0gMV0gfHwgbnVsbDtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5cbi8vIFRlc3QgdHJhbnNmb3JtIGhlbHBlcnMuXG5jb25zdCBiYXNlUGF0aCA9ICcvcHJvamVjdC9zcmMvJztcbmNvbnN0IGZpbGVOYW1lID0gYmFzZVBhdGggKyAndGVzdC1maWxlLnRzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVR5cGVzY3JpcHRDb250ZXh0KGNvbnRlbnQ6IHN0cmluZykge1xuICAvLyBTZXQgY29tcGlsZXIgb3B0aW9ucy5cbiAgY29uc3QgY29tcGlsZXJPcHRpb25zOiB0cy5Db21waWxlck9wdGlvbnMgPSB7XG4gICAgbm9FbWl0T25FcnJvcjogZmFsc2UsXG4gICAgYWxsb3dKczogdHJ1ZSxcbiAgICBuZXdMaW5lOiB0cy5OZXdMaW5lS2luZC5MaW5lRmVlZCxcbiAgICB0YXJnZXQ6IHRzLlNjcmlwdFRhcmdldC5FU05leHQsXG4gICAgc2tpcExpYkNoZWNrOiB0cnVlLFxuICAgIHNvdXJjZU1hcDogZmFsc2UsXG4gICAgaW1wb3J0SGVscGVyczogdHJ1ZSxcbiAgfTtcblxuICAvLyBDcmVhdGUgY29tcGlsZXIgaG9zdC5cbiAgY29uc3QgY29tcGlsZXJIb3N0ID0gbmV3IFdlYnBhY2tDb21waWxlckhvc3QoXG4gICAgY29tcGlsZXJPcHRpb25zLFxuICAgIGJhc2VQYXRoLFxuICAgIG5ldyB2aXJ0dWFsRnMuU2ltcGxlTWVtb3J5SG9zdCgpLFxuICAgIGZhbHNlLFxuICApO1xuXG4gIC8vIEFkZCBhIGR1bW15IGZpbGUgdG8gaG9zdCBjb250ZW50LlxuICBjb21waWxlckhvc3Qud3JpdGVGaWxlKGZpbGVOYW1lLCBjb250ZW50LCBmYWxzZSk7XG5cbiAgLy8gQ3JlYXRlIHRoZSBUeXBlU2NyaXB0IHByb2dyYW0uXG4gIGNvbnN0IHByb2dyYW0gPSB0cy5jcmVhdGVQcm9ncmFtKFtmaWxlTmFtZV0sIGNvbXBpbGVyT3B0aW9ucywgY29tcGlsZXJIb3N0KTtcblxuICByZXR1cm4geyBjb21waWxlckhvc3QsIHByb2dyYW0gfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybVR5cGVzY3JpcHQoXG4gIGNvbnRlbnQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgdHJhbnNmb3JtZXJzOiB0cy5UcmFuc2Zvcm1lckZhY3Rvcnk8dHMuU291cmNlRmlsZT5bXSxcbiAgcHJvZ3JhbT86IHRzLlByb2dyYW0sXG4gIGNvbXBpbGVySG9zdD86IFdlYnBhY2tDb21waWxlckhvc3QsXG4pIHtcblxuICAvLyBVc2UgZ2l2ZW4gY29udGV4dCBvciBjcmVhdGUgYSBuZXcgb25lLlxuICBpZiAoY29udGVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgdHlwZXNjcmlwdENvbnRleHQgPSBjcmVhdGVUeXBlc2NyaXB0Q29udGV4dChjb250ZW50KTtcbiAgICBwcm9ncmFtID0gdHlwZXNjcmlwdENvbnRleHQucHJvZ3JhbTtcbiAgICBjb21waWxlckhvc3QgPSB0eXBlc2NyaXB0Q29udGV4dC5jb21waWxlckhvc3Q7XG4gIH0gZWxzZSBpZiAoIXByb2dyYW0gfHwgIWNvbXBpbGVySG9zdCkge1xuICAgIHRocm93IG5ldyBFcnJvcigndHJhbnNmb3JtVHlwZXNjcmlwdCBuZWVkcyBlaXRoZXIgYGNvbnRlbnRgIG9yIGEgYHByb2dyYW1gIGFuZCBgY29tcGlsZXJIb3N0Jyk7XG4gIH1cblxuICAvLyBFbWl0LlxuICBjb25zdCB7IGVtaXRTa2lwcGVkLCBkaWFnbm9zdGljcyB9ID0gcHJvZ3JhbS5lbWl0KFxuICAgIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgeyBiZWZvcmU6IHRyYW5zZm9ybWVycyB9LFxuICApO1xuXG4gIC8vIExvZyBkaWFnbm9zdGljcyBpZiBlbWl0IHdhc24ndCBzdWNjZXNzZnVsbC5cbiAgaWYgKGVtaXRTa2lwcGVkKSB7XG4gICAgY29uc29sZS5lcnJvcihkaWFnbm9zdGljcyk7XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIFJldHVybiB0aGUgdHJhbnNwaWxlZCBqcy5cbiAgcmV0dXJuIGNvbXBpbGVySG9zdC5yZWFkRmlsZShmaWxlTmFtZS5yZXBsYWNlKC9cXC50c3g/JC8sICcuanMnKSk7XG59XG4iXX0=
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXN0X2hlbHBlcnMuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL25ndG9vbHMvd2VicGFjay9zcmMvdHJhbnNmb3JtZXJzL2FzdF9oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUE7Ozs7OztHQU1HO0FBQ0gsK0NBQWlEO0FBQ2pELGlDQUFpQztBQUNqQyxvREFBdUQ7QUFHdkQseUVBQXlFO0FBQ3pFLFNBQWdCLGdCQUFnQixDQUFvQixJQUFhLEVBQUUsSUFBbUI7SUFDcEYsTUFBTSxLQUFLLEdBQVEsRUFBRSxDQUFDO0lBQ3RCLE1BQU0sTUFBTSxHQUFHLENBQUMsS0FBYyxFQUFFLEVBQUU7UUFDaEMsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLElBQUksRUFBRTtZQUN2QixLQUFLLENBQUMsSUFBSSxDQUFDLEtBQVUsQ0FBQyxDQUFDO1NBQ3hCO1FBQ0QsRUFBRSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDakMsQ0FBQyxDQUFDO0lBQ0YsRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFFOUIsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBWEQsNENBV0M7QUFFRCxTQUFnQixZQUFZLENBQUMsVUFBeUI7SUFDcEQsSUFBSSxVQUFVLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDcEMsT0FBTyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ2pDO0lBRUQsT0FBTyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xDLENBQUM7QUFORCxvQ0FNQztBQUVELFNBQWdCLFdBQVcsQ0FBQyxVQUF5QjtJQUNuRCxJQUFJLFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUNwQyxPQUFPLFVBQVUsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDO0tBQ3hFO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBTkQsa0NBTUM7QUFHRCwwQkFBMEI7QUFDMUIsTUFBTSxRQUFRLEdBQUcsZUFBZSxDQUFDO0FBQ2pDLE1BQU0sUUFBUSxHQUFHLFFBQVEsR0FBRyxjQUFjLENBQUM7QUFFM0MsU0FBZ0IsdUJBQXVCLENBQUMsT0FBZSxFQUFFLGVBQXdDO0lBQy9GLHdCQUF3QjtJQUN4QixNQUFNLGVBQWUsR0FBdUI7UUFDMUMsYUFBYSxFQUFFLEtBQUs7UUFDcEIsT0FBTyxFQUFFLElBQUk7UUFDYixPQUFPLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxRQUFRO1FBQ2hDLGdCQUFnQixFQUFFLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNO1FBQ2hELE1BQU0sRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLE1BQU07UUFDOUIsWUFBWSxFQUFFLElBQUk7UUFDbEIsU0FBUyxFQUFFLEtBQUs7UUFDaEIsYUFBYSxFQUFFLElBQUk7S0FDcEIsQ0FBQztJQUVGLHdCQUF3QjtJQUN4QixNQUFNLFlBQVksR0FBRyxJQUFJLG1DQUFtQixDQUMxQyxlQUFlLEVBQ2YsUUFBUSxFQUNSLElBQUksZ0JBQVMsQ0FBQyxnQkFBZ0IsRUFBRSxFQUNoQyxLQUFLLENBQ04sQ0FBQztJQUVGLG9DQUFvQztJQUNwQyxZQUFZLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFFakQsSUFBSSxlQUFlLEVBQUU7UUFDbkIsS0FBSyxNQUFNLEdBQUcsSUFBSSxlQUFlLEVBQUU7WUFDakMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsR0FBRyxFQUFFLGVBQWUsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztTQUNyRTtLQUNGO0lBRUQsaUNBQWlDO0lBQ2pDLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxlQUFlLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFFNUUsT0FBTyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsQ0FBQztBQUNuQyxDQUFDO0FBbENELDBEQWtDQztBQUVELFNBQWdCLG1CQUFtQixDQUNqQyxPQUEyQixFQUMzQixZQUFvRCxFQUNwRCxPQUFvQixFQUNwQixZQUFrQztJQUdsQyx5Q0FBeUM7SUFDekMsSUFBSSxPQUFPLEtBQUssU0FBUyxFQUFFO1FBQ3pCLE1BQU0saUJBQWlCLEdBQUcsdUJBQXVCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0QsT0FBTyxHQUFHLGlCQUFpQixDQUFDLE9BQU8sQ0FBQztRQUNwQyxZQUFZLEdBQUcsaUJBQWlCLENBQUMsWUFBWSxDQUFDO0tBQy9DO1NBQU0sSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLFlBQVksRUFBRTtRQUNwQyxNQUFNLElBQUksS0FBSyxDQUFDLDZFQUE2RSxDQUFDLENBQUM7S0FDaEc7SUFFRCxRQUFRO0lBQ1IsTUFBTSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUMvQyxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLENBQ3JFLENBQUM7SUFFRiw4Q0FBOEM7SUFDOUMsSUFBSSxXQUFXLEVBQUU7UUFDZixPQUFPLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRTNCLE9BQU8sSUFBSSxDQUFDO0tBQ2I7SUFFRCw0QkFBNEI7SUFDNUIsT0FBTyxZQUFZLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDbkUsQ0FBQztBQTlCRCxrREE4QkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5pbXBvcnQgeyB2aXJ0dWFsRnMgfSBmcm9tICdAYW5ndWxhci1kZXZraXQvY29yZSc7XG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcbmltcG9ydCB7IFdlYnBhY2tDb21waWxlckhvc3QgfSBmcm9tICcuLi9jb21waWxlcl9ob3N0JztcblxuXG4vLyBGaW5kIGFsbCBub2RlcyBmcm9tIHRoZSBBU1QgaW4gdGhlIHN1YnRyZWUgb2Ygbm9kZSBvZiBTeW50YXhLaW5kIGtpbmQuXG5leHBvcnQgZnVuY3Rpb24gY29sbGVjdERlZXBOb2RlczxUIGV4dGVuZHMgdHMuTm9kZT4obm9kZTogdHMuTm9kZSwga2luZDogdHMuU3ludGF4S2luZCk6IFRbXSB7XG4gIGNvbnN0IG5vZGVzOiBUW10gPSBbXTtcbiAgY29uc3QgaGVscGVyID0gKGNoaWxkOiB0cy5Ob2RlKSA9PiB7XG4gICAgaWYgKGNoaWxkLmtpbmQgPT09IGtpbmQpIHtcbiAgICAgIG5vZGVzLnB1c2goY2hpbGQgYXMgVCk7XG4gICAgfVxuICAgIHRzLmZvckVhY2hDaGlsZChjaGlsZCwgaGVscGVyKTtcbiAgfTtcbiAgdHMuZm9yRWFjaENoaWxkKG5vZGUsIGhlbHBlcik7XG5cbiAgcmV0dXJuIG5vZGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rmlyc3ROb2RlKHNvdXJjZUZpbGU6IHRzLlNvdXJjZUZpbGUpOiB0cy5Ob2RlIHtcbiAgaWYgKHNvdXJjZUZpbGUuc3RhdGVtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHNvdXJjZUZpbGUuc3RhdGVtZW50c1swXTtcbiAgfVxuXG4gIHJldHVybiBzb3VyY2VGaWxlLmdldENoaWxkQXQoMCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYXN0Tm9kZShzb3VyY2VGaWxlOiB0cy5Tb3VyY2VGaWxlKTogdHMuTm9kZSB8IG51bGwge1xuICBpZiAoc291cmNlRmlsZS5zdGF0ZW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gc291cmNlRmlsZS5zdGF0ZW1lbnRzW3NvdXJjZUZpbGUuc3RhdGVtZW50cy5sZW5ndGggLSAxXSB8fCBudWxsO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cblxuLy8gVGVzdCB0cmFuc2Zvcm0gaGVscGVycy5cbmNvbnN0IGJhc2VQYXRoID0gJy9wcm9qZWN0L3NyYy8nO1xuY29uc3QgZmlsZU5hbWUgPSBiYXNlUGF0aCArICd0ZXN0LWZpbGUudHMnO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVHlwZXNjcmlwdENvbnRleHQoY29udGVudDogc3RyaW5nLCBhZGRpdGlvbmFsRmlsZXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KSB7XG4gIC8vIFNldCBjb21waWxlciBvcHRpb25zLlxuICBjb25zdCBjb21waWxlck9wdGlvbnM6IHRzLkNvbXBpbGVyT3B0aW9ucyA9IHtcbiAgICBub0VtaXRPbkVycm9yOiBmYWxzZSxcbiAgICBhbGxvd0pzOiB0cnVlLFxuICAgIG5ld0xpbmU6IHRzLk5ld0xpbmVLaW5kLkxpbmVGZWVkLFxuICAgIG1vZHVsZVJlc29sdXRpb246IHRzLk1vZHVsZVJlc29sdXRpb25LaW5kLk5vZGVKcyxcbiAgICB0YXJnZXQ6IHRzLlNjcmlwdFRhcmdldC5FU05leHQsXG4gICAgc2tpcExpYkNoZWNrOiB0cnVlLFxuICAgIHNvdXJjZU1hcDogZmFsc2UsXG4gICAgaW1wb3J0SGVscGVyczogdHJ1ZSxcbiAgfTtcblxuICAvLyBDcmVhdGUgY29tcGlsZXIgaG9zdC5cbiAgY29uc3QgY29tcGlsZXJIb3N0ID0gbmV3IFdlYnBhY2tDb21waWxlckhvc3QoXG4gICAgY29tcGlsZXJPcHRpb25zLFxuICAgIGJhc2VQYXRoLFxuICAgIG5ldyB2aXJ0dWFsRnMuU2ltcGxlTWVtb3J5SG9zdCgpLFxuICAgIGZhbHNlLFxuICApO1xuXG4gIC8vIEFkZCBhIGR1bW15IGZpbGUgdG8gaG9zdCBjb250ZW50LlxuICBjb21waWxlckhvc3Qud3JpdGVGaWxlKGZpbGVOYW1lLCBjb250ZW50LCBmYWxzZSk7XG5cbiAgaWYgKGFkZGl0aW9uYWxGaWxlcykge1xuICAgIGZvciAoY29uc3Qga2V5IGluIGFkZGl0aW9uYWxGaWxlcykge1xuICAgICAgY29tcGlsZXJIb3N0LndyaXRlRmlsZShiYXNlUGF0aCArIGtleSwgYWRkaXRpb25hbEZpbGVzW2tleV0sIGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICAvLyBDcmVhdGUgdGhlIFR5cGVTY3JpcHQgcHJvZ3JhbS5cbiAgY29uc3QgcHJvZ3JhbSA9IHRzLmNyZWF0ZVByb2dyYW0oW2ZpbGVOYW1lXSwgY29tcGlsZXJPcHRpb25zLCBjb21waWxlckhvc3QpO1xuXG4gIHJldHVybiB7IGNvbXBpbGVySG9zdCwgcHJvZ3JhbSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtVHlwZXNjcmlwdChcbiAgY29udGVudDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICB0cmFuc2Zvcm1lcnM6IHRzLlRyYW5zZm9ybWVyRmFjdG9yeTx0cy5Tb3VyY2VGaWxlPltdLFxuICBwcm9ncmFtPzogdHMuUHJvZ3JhbSxcbiAgY29tcGlsZXJIb3N0PzogV2VicGFja0NvbXBpbGVySG9zdCxcbikge1xuXG4gIC8vIFVzZSBnaXZlbiBjb250ZXh0IG9yIGNyZWF0ZSBhIG5ldyBvbmUuXG4gIGlmIChjb250ZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCB0eXBlc2NyaXB0Q29udGV4dCA9IGNyZWF0ZVR5cGVzY3JpcHRDb250ZXh0KGNvbnRlbnQpO1xuICAgIHByb2dyYW0gPSB0eXBlc2NyaXB0Q29udGV4dC5wcm9ncmFtO1xuICAgIGNvbXBpbGVySG9zdCA9IHR5cGVzY3JpcHRDb250ZXh0LmNvbXBpbGVySG9zdDtcbiAgfSBlbHNlIGlmICghcHJvZ3JhbSB8fCAhY29tcGlsZXJIb3N0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd0cmFuc2Zvcm1UeXBlc2NyaXB0IG5lZWRzIGVpdGhlciBgY29udGVudGAgb3IgYSBgcHJvZ3JhbWAgYW5kIGBjb21waWxlckhvc3QnKTtcbiAgfVxuXG4gIC8vIEVtaXQuXG4gIGNvbnN0IHsgZW1pdFNraXBwZWQsIGRpYWdub3N0aWNzIH0gPSBwcm9ncmFtLmVtaXQoXG4gICAgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB7IGJlZm9yZTogdHJhbnNmb3JtZXJzIH0sXG4gICk7XG5cbiAgLy8gTG9nIGRpYWdub3N0aWNzIGlmIGVtaXQgd2Fzbid0IHN1Y2Nlc3NmdWxsLlxuICBpZiAoZW1pdFNraXBwZWQpIHtcbiAgICBjb25zb2xlLmVycm9yKGRpYWdub3N0aWNzKTtcblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gUmV0dXJuIHRoZSB0cmFuc3BpbGVkIGpzLlxuICByZXR1cm4gY29tcGlsZXJIb3N0LnJlYWRGaWxlKGZpbGVOYW1lLnJlcGxhY2UoL1xcLnRzeD8kLywgJy5qcycpKTtcbn1cbiJdfQ==
@@ -22,7 +22,6 @@ function elideImports(sourceFile, removedNodes, getTypeChecker) {
22
22
  }
23
23
  const typeChecker = getTypeChecker();
24
24
  // Collect all imports and used identifiers
25
- const specialCaseNames = new Set();
26
25
  const usedSymbols = new Set();
27
26
  const imports = [];
28
27
  ts.forEachChild(sourceFile, function visit(node) {
@@ -35,21 +34,20 @@ function elideImports(sourceFile, removedNodes, getTypeChecker) {
35
34
  imports.push(node);
36
35
  return;
37
36
  }
38
- if (ts.isIdentifier(node)) {
39
- const symbol = typeChecker.getSymbolAtLocation(node);
40
- if (symbol) {
41
- usedSymbols.add(symbol);
42
- }
43
- }
44
- else if (ts.isExportSpecifier(node)) {
45
- // Export specifiers return the non-local symbol from the above
46
- // so check the name string instead
47
- specialCaseNames.add((node.propertyName || node.name).text);
48
- return;
37
+ let symbol;
38
+ switch (node.kind) {
39
+ case ts.SyntaxKind.Identifier:
40
+ symbol = typeChecker.getSymbolAtLocation(node);
41
+ break;
42
+ case ts.SyntaxKind.ExportSpecifier:
43
+ symbol = typeChecker.getExportSpecifierLocalTargetSymbol(node);
44
+ break;
45
+ case ts.SyntaxKind.ShorthandPropertyAssignment:
46
+ symbol = typeChecker.getShorthandAssignmentValueSymbol(node);
47
+ break;
49
48
  }
50
- else if (ts.isShorthandPropertyAssignment(node)) {
51
- // Shorthand property assignments return the object property's symbol not the import's
52
- specialCaseNames.add(node.name.text);
49
+ if (symbol) {
50
+ usedSymbols.add(symbol);
53
51
  }
54
52
  ts.forEachChild(node, visit);
55
53
  });
@@ -57,9 +55,6 @@ function elideImports(sourceFile, removedNodes, getTypeChecker) {
57
55
  return [];
58
56
  }
59
57
  const isUnused = (node) => {
60
- if (specialCaseNames.has(node.text)) {
61
- return false;
62
- }
63
58
  const symbol = typeChecker.getSymbolAtLocation(node);
64
59
  return symbol && !usedSymbols.has(symbol);
65
60
  };
@@ -68,29 +63,39 @@ function elideImports(sourceFile, removedNodes, getTypeChecker) {
68
63
  // "import 'abc';"
69
64
  continue;
70
65
  }
71
- if (node.importClause.name) {
72
- // "import XYZ from 'abc';"
73
- if (isUnused(node.importClause.name)) {
74
- ops.push(new interfaces_1.RemoveNodeOperation(sourceFile, node));
75
- }
76
- }
77
- else if (node.importClause.namedBindings
78
- && ts.isNamespaceImport(node.importClause.namedBindings)) {
66
+ const namedBindings = node.importClause.namedBindings;
67
+ if (namedBindings && ts.isNamespaceImport(namedBindings)) {
79
68
  // "import * as XYZ from 'abc';"
80
- if (isUnused(node.importClause.namedBindings.name)) {
69
+ if (isUnused(namedBindings.name)) {
81
70
  ops.push(new interfaces_1.RemoveNodeOperation(sourceFile, node));
82
71
  }
83
72
  }
84
- else if (node.importClause.namedBindings
85
- && ts.isNamedImports(node.importClause.namedBindings)) {
86
- // "import { XYZ, ... } from 'abc';"
73
+ else {
87
74
  const specifierOps = [];
88
- for (const specifier of node.importClause.namedBindings.elements) {
89
- if (isUnused(specifier.name)) {
90
- specifierOps.push(new interfaces_1.RemoveNodeOperation(sourceFile, specifier));
75
+ let clausesCount = 0;
76
+ // "import { XYZ, ... } from 'abc';"
77
+ if (namedBindings && ts.isNamedImports(namedBindings)) {
78
+ let removedClausesCount = 0;
79
+ clausesCount += namedBindings.elements.length;
80
+ for (const specifier of namedBindings.elements) {
81
+ if (isUnused(specifier.name)) {
82
+ removedClausesCount++;
83
+ // in case we don't have any more namedImports we should remove the parent ie the {}
84
+ const nodeToRemove = clausesCount === removedClausesCount
85
+ ? specifier.parent
86
+ : specifier;
87
+ specifierOps.push(new interfaces_1.RemoveNodeOperation(sourceFile, nodeToRemove));
88
+ }
89
+ }
90
+ }
91
+ // "import XYZ from 'abc';"
92
+ if (node.importClause.name) {
93
+ clausesCount++;
94
+ if (isUnused(node.importClause.name)) {
95
+ specifierOps.push(new interfaces_1.RemoveNodeOperation(sourceFile, node.importClause.name));
91
96
  }
92
97
  }
93
- if (specifierOps.length === node.importClause.namedBindings.elements.length) {
98
+ if (specifierOps.length === clausesCount) {
94
99
  ops.push(new interfaces_1.RemoveNodeOperation(sourceFile, node));
95
100
  }
96
101
  else {
@@ -101,4 +106,4 @@ function elideImports(sourceFile, removedNodes, getTypeChecker) {
101
106
  return ops;
102
107
  }
103
108
  exports.elideImports = elideImports;
104
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxpZGVfaW1wb3J0cy5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvbmd0b29scy93ZWJwYWNrL3NyYy90cmFuc2Zvcm1lcnMvZWxpZGVfaW1wb3J0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBOzs7Ozs7R0FNRztBQUNILGlDQUFpQztBQUNqQyw2Q0FBdUU7QUFHdkUsOERBQThEO0FBQzlELHdFQUF3RTtBQUN4RSxpRkFBaUY7QUFDakYsa0dBQWtHO0FBQ2xHLHFDQUFxQztBQUNyQyxpRkFBaUY7QUFDakYsU0FBZ0IsWUFBWSxDQUMxQixVQUF5QixFQUN6QixZQUF1QixFQUN2QixjQUFvQztJQUVwQyxNQUFNLEdBQUcsR0FBeUIsRUFBRSxDQUFDO0lBRXJDLElBQUksWUFBWSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDN0IsT0FBTyxFQUFFLENBQUM7S0FDWDtJQUVELE1BQU0sV0FBVyxHQUFHLGNBQWMsRUFBRSxDQUFDO0lBRXJDLDJDQUEyQztJQUMzQyxNQUFNLGdCQUFnQixHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFDM0MsTUFBTSxXQUFXLEdBQUcsSUFBSSxHQUFHLEVBQWEsQ0FBQztJQUN6QyxNQUFNLE9BQU8sR0FBRyxFQUE0QixDQUFDO0lBQzdDLEVBQUUsQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLFNBQVMsS0FBSyxDQUFDLElBQUk7UUFDN0MscUJBQXFCO1FBQ3JCLElBQUksWUFBWSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUMvQixPQUFPO1NBQ1I7UUFFRCx5QkFBeUI7UUFDekIsSUFBSSxFQUFFLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDaEMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUVuQixPQUFPO1NBQ1I7UUFFRCxJQUFJLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDekIsTUFBTSxNQUFNLEdB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RSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksZ0NBQW1CLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7YUFDckQ7aUJBQU07Z0JBQ0wsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDO2FBQzNCO1NBQ0Y7S0FDRjtJQUVELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQW5HRCxvQ0FtR0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcbmltcG9ydCB7IFJlbW92ZU5vZGVPcGVyYXRpb24sIFRyYW5zZm9ybU9wZXJhdGlvbiB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5cblxuLy8gUmVtb3ZlIGltcG9ydHMgZm9yIHdoaWNoIGFsbCBpZGVudGlmaWVycyBoYXZlIGJlZW4gcmVtb3ZlZC5cbi8vIE5lZWRzIHR5cGUgY2hlY2tlciwgYW5kIHdvcmtzIGV2ZW4gaWYgaXQncyBub3QgdGhlIGZpcnN0IHRyYW5zZm9ybWVyLlxuLy8gV29ya3MgYnkgcmVtb3ZpbmcgaW1wb3J0cyBmb3Igc3ltYm9scyB3aG9zZSBpZGVudGlmaWVycyBoYXZlIGFsbCBiZWVuIHJlbW92ZWQuXG4vLyBEb2Vzbid0IHVzZSB0aGUgYHN5bWJvbC5kZWNsYXJhdGlvbnNgIGJlY2F1c2UgdGhhdCBwcmV2aW91cyB0cmFuc2Zvcm1zIG1pZ2h0IGhhdmUgcmVtb3ZlZCBub2Rlc1xuLy8gYnV0IHRoZSB0eXBlIGNoZWNrZXIgZG9lc24ndCBrbm93LlxuLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9NaWNyb3NvZnQvVHlwZVNjcmlwdC9pc3N1ZXMvMTc1NTIgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG5leHBvcnQgZnVuY3Rpb24gZWxpZGVJbXBvcnRzKFxuICBzb3VyY2VGaWxlOiB0cy5Tb3VyY2VGaWxlLFxuICByZW1vdmVkTm9kZXM6IHRzLk5vZGVbXSxcbiAgZ2V0VHlwZUNoZWNrZXI6ICgpID0+IHRzLlR5cGVDaGVja2VyLFxuKTogVHJhbnNmb3JtT3BlcmF0aW9uW10ge1xuICBjb25zdCBvcHM6IFRyYW5zZm9ybU9wZXJhdGlvbltdID0gW107XG5cbiAgaWYgKHJlbW92ZWROb2Rlcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjb25zdCB0eXBlQ2hlY2tlciA9IGdldFR5cGVDaGVja2VyKCk7XG5cbiAgLy8gQ29sbGVjdCBhbGwgaW1wb3J0cyBhbmQgdXNlZCBpZGVudGlmaWVyc1xuICBjb25zdCBzcGVjaWFsQ2FzZU5hbWVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGNvbnN0IHVzZWRTeW1ib2xzID0gbmV3IFNldDx0cy5TeW1ib2w+KCk7XG4gIGNvbnN0IGltcG9ydHMgPSBbXSBhcyB0cy5JbXBvcnREZWNsYXJhdGlvbltdO1xuICB0cy5mb3JFYWNoQ2hpbGQoc291cmNlRmlsZSwgZnVuY3Rpb24gdmlzaXQobm9kZSkge1xuICAgIC8vIFNraXAgcmVtb3ZlZCBub2Rlc1xuICAgIGlmIChyZW1vdmVkTm9kZXMuaW5jbHVkZXMobm9kZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBSZWNvcmQgaW1wb3J0IGFuZCBza2lwXG4gICAgaWYgKHRzLmlzSW1wb3J0RGVjbGFyYXRpb24obm9kZSkpIHtcbiAgICAgIGltcG9ydHMucHVzaChub2RlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0cy5pc0lkZW50aWZpZXIobm9kZSkpIHtcbiAgICAgIGNvbnN0IHN5bWJvbCA9IHR5cGVDaGVja2VyLmdldFN5bWJvbEF0TG9jYXRpb24obm9kZSk7XG4gICAgICBpZiAoc3ltYm9sKSB7XG4gICAgICAgIHVzZWRTeW1ib2xzLmFkZChzeW1ib2wpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHMuaXNFeHBvcnRTcGVjaWZpZXIobm9kZSkpIHtcbiAgICAgIC8vIEV4cG9ydCBzcGVjaWZpZXJzIHJldHVybiB0aGUgbm9uLWxvY2FsIHN5bWJvbCBmcm9tIHRoZSBhYm92ZVxuICAgICAgLy8gc28gY2hlY2sgdGhlIG5hbWUgc3RyaW5nIGluc3RlYWRcbiAgICAgIHNwZWNpYWxDYXNlTmFtZXMuYWRkKChub2RlLnByb3BlcnR5TmFtZSB8fCBub2RlLm5hbWUpLnRleHQpO1xuXG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmICh0cy5pc1Nob3J0aGFuZFByb3BlcnR5QXNzaWdubWVudChub2RlKSkge1xuICAgICAgLy8gU2hvcnRoYW5kIHByb3BlcnR5IGFzc2lnbm1lbnRzIHJldHVybiB0aGUgb2JqZWN0IHByb3BlcnR5J3Mgc3ltYm9sIG5vdCB0aGUgaW1wb3J0J3NcbiAgICAgIHNwZWNpYWxDYXNlTmFtZXMuYWRkKG5vZGUubmFtZS50ZXh0KTtcbiAgICB9XG5cbiAgICB0cy5mb3JFYWNoQ2hpbGQobm9kZSwgdmlzaXQpO1xuICB9KTtcblxuICBpZiAoaW1wb3J0cy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjb25zdCBpc1VudXNlZCA9IChub2RlOiB0cy5JZGVudGlmaWVyKSA9PiB7XG4gICAgaWYgKHNwZWNpYWxDYXNlTmFtZXMuaGFzKG5vZGUudGV4dCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBzeW1ib2wgPSB0eXBlQ2hlY2tlci5nZXRTeW1ib2xBdExvY2F0aW9uKG5vZGUpO1xuXG4gICAgcmV0dXJuIHN5bWJvbCAmJiAhdXNlZFN5bWJvbHMuaGFzKHN5bWJvbCk7XG4gIH07XG5cbiAgZm9yIChjb25zdCBub2RlIG9mIGltcG9ydHMpIHtcbiAgICBpZiAoIW5vZGUuaW1wb3J0Q2xhdXNlKSB7XG4gICAgICAvLyBcImltcG9ydCAnYWJjJztcIlxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUuaW1wb3J0Q2xhdXNlLm5hbWUpIHtcbiAgICAgIC8vIFwiaW1wb3J0IFhZWiBmcm9tICdhYmMnO1wiXG4gICAgICBpZiAoaXNVbnVzZWQobm9kZS5pbXBvcnRDbGF1c2UubmFtZSkpIHtcbiAgICAgICAgb3BzLnB1c2gobmV3IFJlbW92ZU5vZGVPcGVyYXRpb24oc291cmNlRmlsZSwgbm9kZSkpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobm9kZS5pbXBvcnRDbGF1c2UubmFtZWRCaW5kaW5nc1xuICAgICAgICAgICAgICAgJiYgdHMuaXNOYW1lc3BhY2VJbXBvcnQobm9kZS5pbXBvcnRDbGF1c2UubmFtZWRCaW5kaW5ncykpIHtcbiAgICAgIC8vIFwiaW1wb3J0ICogYXMgWFlaIGZyb20gJ2FiYyc7XCJcbiAgICAgIGlmIChpc1VudXNlZChub2RlLmltcG9ydENsYXVzZS5uYW1lZEJpbmRpbmdzLm5hbWUpKSB7XG4gICAgICAgIG9wcy5wdXNoKG5ldyBSZW1vdmVOb2RlT3BlcmF0aW9uKHNvdXJjZUZpbGUsIG5vZGUpKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG5vZGUuaW1wb3J0Q2xhdXNlLm5hbWVkQmluZGluZ3NcbiAgICAgICAgICAgICAgICYmIHRzLmlzTmFtZWRJbXBvcnRzKG5vZGUuaW1wb3J0Q2xhdXNlLm5hbWVkQmluZGluZ3MpKSB7XG4gICAgICAvLyBcImltcG9ydCB7IFhZWiwgLi4uIH0gZnJvbSAnYWJjJztcIlxuICAgICAgY29uc3Qgc3BlY2lmaWVyT3BzID0gW107XG4gICAgICBmb3IgKGNvbnN0IHNwZWNpZmllciBvZiBub2RlLmltcG9ydENsYXVzZS5uYW1lZEJpbmRpbmdzLmVsZW1lbnRzKSB7XG4gICAgICAgIGlmIChpc1VudXNlZChzcGVjaWZpZXIubmFtZSkpIHtcbiAgICAgICAgICBzcGVjaWZpZXJPcHMucHVzaChuZXcgUmVtb3ZlTm9kZU9wZXJhdGlvbihzb3VyY2VGaWxlLCBzcGVjaWZpZXIpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoc3BlY2lmaWVyT3BzLmxlbmd0aCA9PT0gbm9kZS5pbXBvcnRDbGF1c2UubmFtZWRCaW5kaW5ncy5lbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgb3BzLnB1c2gobmV3IFJlbW92ZU5vZGVPcGVyYXRpb24oc291cmNlRmlsZSwgbm9kZSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3BzLnB1c2goLi4uc3BlY2lmaWVyT3BzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gb3BzO1xufVxuIl19
109
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxpZGVfaW1wb3J0cy5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvbmd0b29scy93ZWJwYWNrL3NyYy90cmFuc2Zvcm1lcnMvZWxpZGVfaW1wb3J0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBOzs7Ozs7R0FNRztBQUNILGlDQUFpQztBQUNqQyw2Q0FBdUU7QUFHdkUsOERBQThEO0FBQzlELHdFQUF3RTtBQUN4RSxpRkFBaUY7QUFDakYsa0dBQWtHO0FBQ2xHLHFDQUFxQztBQUNyQyxpRkFBaUY7QUFDakYsU0FBZ0IsWUFBWSxDQUMxQixVQUF5QixFQUN6QixZQUF1QixFQUN2QixjQUFvQztJQUVwQyxNQUFNLEdBQUcsR0FBeUIsRUFBRSxDQUFDO0lBRXJDLElBQUksWUFBWSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDN0IsT0FBTyxFQUFFLENBQUM7S0FDWDtJQUVELE1BQU0sV0FBVyxHQUFHLGNBQWMsRUFBRSxDQUFDO0lBRXJDLDJDQUEyQztJQUMzQyxNQUFNLFdBQVcsR0FBRyxJQUFJLEdBQUcsRUFBYSxDQUFDO0lBQ3pDLE1BQU0sT0FBTyxHQUEyQixFQUFFLENBQUM7SUFFM0MsRUFBRSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsU0FBUyxLQUFLLENBQUMsSUFBSTtRQUM3QyxxQkFBcUI7UUFDckIsSUFBSSxZQUFZLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQy9CLE9BQU87U0FDUjtRQUVELHlCQUF5QjtRQUN6QixJQUFJLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNoQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRW5CLE9BQU87U0FDUjtRQUVELElBQUksTUFBNkIsQ0FBQztRQUVsQyxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDakIsS0FBSyxFQUFFLENBQUMsVUFBVSxDQUFDLFVBQVU7Z0JBQzNCLE1BQU0sR0FBRyxX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QUU7Z0JBQ3hDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxnQ0FBbUIsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQzthQUNyRDtpQkFBTTtnQkFDTCxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsWUFBWSxDQUFDLENBQUM7YUFDM0I7U0FDRjtLQUNGO0lBRUQsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBbEhELG9DQWtIQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuaW1wb3J0IHsgUmVtb3ZlTm9kZU9wZXJhdGlvbiwgVHJhbnNmb3JtT3BlcmF0aW9uIH0gZnJvbSAnLi9pbnRlcmZhY2VzJztcblxuXG4vLyBSZW1vdmUgaW1wb3J0cyBmb3Igd2hpY2ggYWxsIGlkZW50aWZpZXJzIGhhdmUgYmVlbiByZW1vdmVkLlxuLy8gTmVlZHMgdHlwZSBjaGVja2VyLCBhbmQgd29ya3MgZXZlbiBpZiBpdCdzIG5vdCB0aGUgZmlyc3QgdHJhbnNmb3JtZXIuXG4vLyBXb3JrcyBieSByZW1vdmluZyBpbXBvcnRzIGZvciBzeW1ib2xzIHdob3NlIGlkZW50aWZpZXJzIGhhdmUgYWxsIGJlZW4gcmVtb3ZlZC5cbi8vIERvZXNuJ3QgdXNlIHRoZSBgc3ltYm9sLmRlY2xhcmF0aW9uc2AgYmVjYXVzZSB0aGF0IHByZXZpb3VzIHRyYW5zZm9ybXMgbWlnaHQgaGF2ZSByZW1vdmVkIG5vZGVzXG4vLyBidXQgdGhlIHR5cGUgY2hlY2tlciBkb2Vzbid0IGtub3cuXG4vLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL01pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy8xNzU1MiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbmV4cG9ydCBmdW5jdGlvbiBlbGlkZUltcG9ydHMoXG4gIHNvdXJjZUZpbGU6IHRzLlNvdXJjZUZpbGUsXG4gIHJlbW92ZWROb2RlczogdHMuTm9kZVtdLFxuICBnZXRUeXBlQ2hlY2tlcjogKCkgPT4gdHMuVHlwZUNoZWNrZXIsXG4pOiBUcmFuc2Zvcm1PcGVyYXRpb25bXSB7XG4gIGNvbnN0IG9wczogVHJhbnNmb3JtT3BlcmF0aW9uW10gPSBbXTtcblxuICBpZiAocmVtb3ZlZE5vZGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IHR5cGVDaGVja2VyID0gZ2V0VHlwZUNoZWNrZXIoKTtcblxuICAvLyBDb2xsZWN0IGFsbCBpbXBvcnRzIGFuZCB1c2VkIGlkZW50aWZpZXJzXG4gIGNvbnN0IHVzZWRTeW1ib2xzID0gbmV3IFNldDx0cy5TeW1ib2w+KCk7XG4gIGNvbnN0IGltcG9ydHM6IHRzLkltcG9ydERlY2xhcmF0aW9uW10gPSBbXTtcblxuICB0cy5mb3JFYWNoQ2hpbGQoc291cmNlRmlsZSwgZnVuY3Rpb24gdmlzaXQobm9kZSkge1xuICAgIC8vIFNraXAgcmVtb3ZlZCBub2Rlc1xuICAgIGlmIChyZW1vdmVkTm9kZXMuaW5jbHVkZXMobm9kZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBSZWNvcmQgaW1wb3J0IGFuZCBza2lwXG4gICAgaWYgKHRzLmlzSW1wb3J0RGVjbGFyYXRpb24obm9kZSkpIHtcbiAgICAgIGltcG9ydHMucHVzaChub2RlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBzeW1ib2w6IHRzLlN5bWJvbCB8IHVuZGVmaW5lZDtcblxuICAgIHN3aXRjaCAobm9kZS5raW5kKSB7XG4gICAgICBjYXNlIHRzLlN5bnRheEtpbmQuSWRlbnRpZmllcjpcbiAgICAgICAgc3ltYm9sID0gdHlwZUNoZWNrZXIuZ2V0U3ltYm9sQXRMb2NhdGlvbihub2RlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIHRzLlN5bnRheEtpbmQuRXhwb3J0U3BlY2lmaWVyOlxuICAgICAgICBzeW1ib2wgPSB0eXBlQ2hlY2tlci5nZXRFeHBvcnRTcGVjaWZpZXJMb2NhbFRhcmdldFN5bWJvbChub2RlIGFzIHRzLkV4cG9ydFNwZWNpZmllcik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSB0cy5TeW50YXhLaW5kLlNob3J0aGFuZFByb3BlcnR5QXNzaWdubWVudDpcbiAgICAgICAgc3ltYm9sID0gdHlwZUNoZWNrZXIuZ2V0U2hvcnRoYW5kQXNzaWdubWVudFZhbHVlU3ltYm9sKG5vZGUpO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAoc3ltYm9sKSB7XG4gICAgICB1c2VkU3ltYm9scy5hZGQoc3ltYm9sKTtcbiAgICB9XG5cbiAgICB0cy5mb3JFYWNoQ2hpbGQobm9kZSwgdmlzaXQpO1xuICB9KTtcblxuICBpZiAoaW1wb3J0cy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjb25zdCBpc1VudXNlZCA9IChub2RlOiB0cy5JZGVudGlmaWVyKSA9PiB7XG4gICAgY29uc3Qgc3ltYm9sID0gdHlwZUNoZWNrZXIuZ2V0U3ltYm9sQXRMb2NhdGlvbihub2RlKTtcblxuICAgIHJldHVybiBzeW1ib2wgJiYgIXVzZWRTeW1ib2xzLmhhcyhzeW1ib2wpO1xuICB9O1xuXG4gIGZvciAoY29uc3Qgbm9kZSBvZiBpbXBvcnRzKSB7XG4gICAgaWYgKCFub2RlLmltcG9ydENsYXVzZSkge1xuICAgICAgLy8gXCJpbXBvcnQgJ2FiYyc7XCJcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IG5hbWVkQmluZGluZ3MgPSBub2RlLmltcG9ydENsYXVzZS5uYW1lZEJpbmRpbmdzO1xuXG4gICAgaWYgKG5hbWVkQmluZGluZ3MgJiYgdHMuaXNOYW1lc3BhY2VJbXBvcnQobmFtZWRCaW5kaW5ncykpIHtcbiAgICAgIC8vIFwiaW1wb3J0ICogYXMgWFlaIGZyb20gJ2FiYyc7XCJcbiAgICAgIGlmIChpc1VudXNlZChuYW1lZEJpbmRpbmdzLm5hbWUpKSB7XG4gICAgICAgIG9wcy5wdXNoKG5ldyBSZW1vdmVOb2RlT3BlcmF0aW9uKHNvdXJjZUZpbGUsIG5vZGUpKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc3BlY2lmaWVyT3BzID0gW107XG4gICAgICBsZXQgY2xhdXNlc0NvdW50ID0gMDtcblxuICAgICAgLy8gXCJpbXBvcnQgeyBYWVosIC4uLiB9IGZyb20gJ2FiYyc7XCJcbiAgICAgIGlmIChuYW1lZEJpbmRpbmdzICYmIHRzLmlzTmFtZWRJbXBvcnRzKG5hbWVkQmluZGluZ3MpKSB7XG4gICAgICAgIGxldCByZW1vdmVkQ2xhdXNlc0NvdW50ID0gMDtcbiAgICAgICAgY2xhdXNlc0NvdW50ICs9IG5hbWVkQmluZGluZ3MuZWxlbWVudHMubGVuZ3RoO1xuXG4gICAgICAgIGZvciAoY29uc3Qgc3BlY2lmaWVyIG9mIG5hbWVkQmluZGluZ3MuZWxlbWVudHMpIHtcbiAgICAgICAgICBpZiAoaXNVbnVzZWQoc3BlY2lmaWVyLm5hbWUpKSB7XG4gICAgICAgICAgICByZW1vdmVkQ2xhdXNlc0NvdW50Kys7XG4gICAgICAgICAgICAvLyBpbiBjYXNlIHdlIGRvbid0IGhhdmUgYW55IG1vcmUgbmFtZWRJbXBvcnRzIHdlIHNob3VsZCByZW1vdmUgdGhlIHBhcmVudCBpZSB0aGUge31cbiAgICAgICAgICAgIGNvbnN0IG5vZGVUb1JlbW92ZSA9IGNsYXVzZXNDb3VudCA9PT0gcmVtb3ZlZENsYXVzZXNDb3VudFxuICAgICAgICAgICAgICA/IHNwZWNpZmllci5wYXJlbnRcbiAgICAgICAgICAgICAgOiBzcGVjaWZpZXI7XG5cbiAgICAgICAgICAgIHNwZWNpZmllck9wcy5wdXNoKG5ldyBSZW1vdmVOb2RlT3BlcmF0aW9uKHNvdXJjZUZpbGUsIG5vZGVUb1JlbW92ZSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBcImltcG9ydCBYWVogZnJvbSAnYWJjJztcIlxuICAgICAgaWYgKG5vZGUuaW1wb3J0Q2xhdXNlLm5hbWUpIHtcbiAgICAgICAgY2xhdXNlc0NvdW50Kys7XG5cbiAgICAgICAgaWYgKGlzVW51c2VkKG5vZGUuaW1wb3J0Q2xhdXNlLm5hbWUpKSB7XG4gICAgICAgICAgc3BlY2lmaWVyT3BzLnB1c2gobmV3IFJlbW92ZU5vZGVPcGVyYXRpb24oc291cmNlRmlsZSwgbm9kZS5pbXBvcnRDbGF1c2UubmFtZSkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChzcGVjaWZpZXJPcHMubGVuZ3RoID09PSBjbGF1c2VzQ291bnQpIHtcbiAgICAgICAgb3BzLnB1c2gobmV3IFJlbW92ZU5vZGVPcGVyYXRpb24oc291cmNlRmlsZSwgbm9kZSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3BzLnB1c2goLi4uc3BlY2lmaWVyT3BzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gb3BzO1xufVxuIl19