@angular/compiler-cli 11.1.0-next.4 → 11.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. package/linker/babel/src/ast/babel_ast_factory.d.ts +5 -0
  2. package/linker/babel/src/ast/babel_ast_factory.js +10 -5
  3. package/linker/babel/src/es2015_linker_plugin.d.ts +2 -2
  4. package/linker/babel/src/es2015_linker_plugin.js +26 -11
  5. package/linker/babel/src/linker_plugin_options.d.ts +21 -0
  6. package/linker/babel/src/linker_plugin_options.js +13 -0
  7. package/linker/src/file_linker/emit_scopes/emit_scope.d.ts +3 -3
  8. package/linker/src/file_linker/emit_scopes/emit_scope.js +6 -6
  9. package/linker/src/file_linker/emit_scopes/iife_emit_scope.d.ts +4 -0
  10. package/linker/src/file_linker/emit_scopes/iife_emit_scope.js +9 -8
  11. package/linker/src/file_linker/file_linker.d.ts +2 -3
  12. package/linker/src/file_linker/file_linker.js +6 -7
  13. package/linker/src/file_linker/get_source_file.d.ts +19 -0
  14. package/linker/src/file_linker/get_source_file.js +42 -0
  15. package/linker/src/file_linker/linker_environment.d.ts +8 -2
  16. package/linker/src/file_linker/linker_environment.js +11 -6
  17. package/linker/src/file_linker/linker_options.d.ts +5 -0
  18. package/linker/src/file_linker/linker_options.js +2 -1
  19. package/linker/src/file_linker/partial_linkers/partial_component_linker_1.d.ts +24 -10
  20. package/linker/src/file_linker/partial_linkers/partial_component_linker_1.js +138 -97
  21. package/linker/src/file_linker/partial_linkers/partial_directive_linker_1.d.ts +6 -2
  22. package/linker/src/file_linker/partial_linkers/partial_directive_linker_1.js +7 -4
  23. package/linker/src/file_linker/partial_linkers/partial_linker.d.ts +1 -1
  24. package/linker/src/file_linker/partial_linkers/partial_linker.js +1 -1
  25. package/linker/src/file_linker/partial_linkers/partial_linker_selector.d.ts +21 -18
  26. package/linker/src/file_linker/partial_linkers/partial_linker_selector.js +37 -31
  27. package/ngcc/src/analysis/decoration_analyzer.d.ts +3 -3
  28. package/ngcc/src/analysis/decoration_analyzer.js +3 -3
  29. package/ngcc/src/command_line_options.js +4 -3
  30. package/ngcc/src/dependencies/dependency_host.d.ts +3 -3
  31. package/ngcc/src/dependencies/dependency_host.js +1 -1
  32. package/ngcc/src/dependencies/dependency_resolver.d.ts +2 -2
  33. package/ngcc/src/dependencies/dependency_resolver.js +3 -4
  34. package/ngcc/src/dependencies/dts_dependency_host.d.ts +2 -2
  35. package/ngcc/src/dependencies/dts_dependency_host.js +1 -1
  36. package/ngcc/src/dependencies/esm_dependency_host.d.ts +2 -2
  37. package/ngcc/src/dependencies/esm_dependency_host.js +1 -1
  38. package/ngcc/src/dependencies/module_resolver.d.ts +2 -2
  39. package/ngcc/src/dependencies/module_resolver.js +15 -24
  40. package/ngcc/src/entry_point_finder/entry_point_collector.d.ts +2 -2
  41. package/ngcc/src/entry_point_finder/entry_point_collector.js +1 -1
  42. package/ngcc/src/entry_point_finder/program_based_entry_point_finder.d.ts +2 -2
  43. package/ngcc/src/entry_point_finder/program_based_entry_point_finder.js +2 -2
  44. package/ngcc/src/entry_point_finder/targeted_entry_point_finder.d.ts +11 -2
  45. package/ngcc/src/entry_point_finder/targeted_entry_point_finder.js +24 -20
  46. package/ngcc/src/entry_point_finder/tracing_entry_point_finder.d.ts +3 -3
  47. package/ngcc/src/entry_point_finder/tracing_entry_point_finder.js +1 -1
  48. package/ngcc/src/entry_point_finder/utils.d.ts +0 -9
  49. package/ngcc/src/entry_point_finder/utils.js +8 -9
  50. package/ngcc/src/execution/cluster/executor.d.ts +2 -2
  51. package/ngcc/src/execution/cluster/executor.js +1 -1
  52. package/ngcc/src/execution/cluster/master.d.ts +2 -2
  53. package/ngcc/src/execution/cluster/master.js +1 -1
  54. package/ngcc/src/execution/tasks/completion.d.ts +4 -4
  55. package/ngcc/src/execution/tasks/completion.js +4 -12
  56. package/ngcc/src/host/umd_host.js +2 -2
  57. package/ngcc/src/locking/lock_file.d.ts +2 -2
  58. package/ngcc/src/locking/lock_file.js +1 -1
  59. package/ngcc/src/main.js +6 -6
  60. package/ngcc/src/ngcc_options.js +2 -2
  61. package/ngcc/src/packages/build_marker.d.ts +1 -1
  62. package/ngcc/src/packages/build_marker.js +1 -1
  63. package/ngcc/src/packages/bundle_program.d.ts +3 -3
  64. package/ngcc/src/packages/bundle_program.js +6 -7
  65. package/ngcc/src/packages/configuration.d.ts +3 -3
  66. package/ngcc/src/packages/configuration.js +8 -9
  67. package/ngcc/src/packages/entry_point.d.ts +3 -3
  68. package/ngcc/src/packages/entry_point.js +13 -16
  69. package/ngcc/src/packages/entry_point_bundle.js +1 -1
  70. package/ngcc/src/packages/source_file_cache.d.ts +6 -6
  71. package/ngcc/src/packages/source_file_cache.js +1 -1
  72. package/ngcc/src/packages/transformer.d.ts +2 -2
  73. package/ngcc/src/packages/transformer.js +6 -6
  74. package/ngcc/src/path_mappings.d.ts +2 -2
  75. package/ngcc/src/path_mappings.js +4 -12
  76. package/ngcc/src/rendering/commonjs_rendering_formatter.d.ts +9 -1
  77. package/ngcc/src/rendering/commonjs_rendering_formatter.js +6 -13
  78. package/ngcc/src/rendering/dts_renderer.d.ts +2 -2
  79. package/ngcc/src/rendering/dts_renderer.js +1 -1
  80. package/ngcc/src/rendering/esm_rendering_formatter.d.ts +4 -3
  81. package/ngcc/src/rendering/esm_rendering_formatter.js +7 -5
  82. package/ngcc/src/rendering/renderer.d.ts +2 -2
  83. package/ngcc/src/rendering/renderer.js +1 -1
  84. package/ngcc/src/rendering/source_maps.d.ts +2 -2
  85. package/ngcc/src/rendering/source_maps.js +18 -19
  86. package/ngcc/src/rendering/umd_rendering_formatter.d.ts +9 -1
  87. package/ngcc/src/rendering/umd_rendering_formatter.js +6 -13
  88. package/ngcc/src/utils.d.ts +2 -2
  89. package/ngcc/src/utils.js +1 -1
  90. package/ngcc/src/writing/cleaning/package_cleaner.d.ts +2 -2
  91. package/ngcc/src/writing/cleaning/package_cleaner.js +1 -1
  92. package/ngcc/src/writing/cleaning/utils.d.ts +2 -2
  93. package/ngcc/src/writing/cleaning/utils.js +1 -1
  94. package/ngcc/src/writing/new_entry_point_file_writer.d.ts +14 -1
  95. package/ngcc/src/writing/new_entry_point_file_writer.js +54 -18
  96. package/package.json +2 -2
  97. package/src/ngtsc/annotations/src/component.d.ts +48 -10
  98. package/src/ngtsc/annotations/src/component.js +197 -116
  99. package/src/ngtsc/annotations/src/directive.js +18 -3
  100. package/src/ngtsc/core/api/src/public_options.d.ts +2 -2
  101. package/src/ngtsc/core/api/src/public_options.js +1 -1
  102. package/src/ngtsc/core/index.d.ts +1 -1
  103. package/src/ngtsc/core/index.js +5 -5
  104. package/src/ngtsc/core/src/compiler.d.ts +95 -12
  105. package/src/ngtsc/core/src/compiler.js +240 -81
  106. package/src/ngtsc/diagnostics/index.d.ts +1 -1
  107. package/src/ngtsc/diagnostics/index.js +4 -2
  108. package/src/ngtsc/diagnostics/src/error_code.d.ts +6 -1
  109. package/src/ngtsc/diagnostics/src/error_code.js +29 -2
  110. package/src/ngtsc/file_system/index.d.ts +1 -1
  111. package/src/ngtsc/file_system/index.js +1 -1
  112. package/src/ngtsc/file_system/src/node_js_file_system.d.ts +29 -19
  113. package/src/ngtsc/file_system/src/node_js_file_system.js +102 -80
  114. package/src/ngtsc/file_system/src/types.d.ts +34 -23
  115. package/src/ngtsc/file_system/src/types.js +1 -1
  116. package/src/ngtsc/incremental/src/strategy.d.ts +7 -0
  117. package/src/ngtsc/incremental/src/strategy.js +7 -1
  118. package/src/ngtsc/program.js +51 -20
  119. package/src/ngtsc/resource/src/loader.d.ts +4 -0
  120. package/src/ngtsc/resource/src/loader.js +7 -1
  121. package/src/ngtsc/sourcemaps/index.d.ts +3 -2
  122. package/src/ngtsc/sourcemaps/index.js +12 -3
  123. package/src/ngtsc/sourcemaps/src/content_origin.d.ts +34 -0
  124. package/src/ngtsc/sourcemaps/src/content_origin.js +48 -0
  125. package/src/ngtsc/sourcemaps/src/raw_source_map.d.ts +19 -1
  126. package/src/ngtsc/sourcemaps/src/raw_source_map.js +1 -8
  127. package/src/ngtsc/sourcemaps/src/segment_marker.d.ts +1 -1
  128. package/src/ngtsc/sourcemaps/src/segment_marker.js +1 -1
  129. package/src/ngtsc/sourcemaps/src/source_file.d.ts +7 -11
  130. package/src/ngtsc/sourcemaps/src/source_file.js +108 -32
  131. package/src/ngtsc/sourcemaps/src/source_file_loader.d.ts +36 -16
  132. package/src/ngtsc/sourcemaps/src/source_file_loader.js +72 -19
  133. package/src/ngtsc/transform/src/api.d.ts +5 -0
  134. package/src/ngtsc/transform/src/api.js +1 -1
  135. package/src/ngtsc/transform/src/compilation.d.ts +1 -0
  136. package/src/ngtsc/transform/src/compilation.js +40 -17
  137. package/src/ngtsc/tsc_plugin.js +26 -5
  138. package/src/ngtsc/typecheck/api/checker.d.ts +5 -0
  139. package/src/ngtsc/typecheck/api/checker.js +1 -1
  140. package/src/ngtsc/typecheck/src/checker.d.ts +1 -0
  141. package/src/ngtsc/typecheck/src/checker.js +17 -1
  142. package/src/ngtsc/typecheck/src/template_symbol_builder.js +104 -55
  143. package/src/perform_compile.d.ts +2 -2
  144. package/src/perform_compile.js +1 -1
  145. package/src/transformers/downlevel_decorators_transform.js +7 -8
  146. package/src/transformers/patch_alias_reference_resolution.js +25 -13
  147. package/src/version.js +1 -1
@@ -6,15 +6,21 @@
6
6
  * Use of this source code is governed by an MIT-style license that can be
7
7
  * found in the LICENSE file at https://angular.io/license
8
8
  */
9
- import { AstFactory } from '@angular/compiler-cli/src/ngtsc/translator';
9
+ import { ReadonlyFileSystem } from '../../../src/ngtsc/file_system';
10
+ import { Logger } from '../../../src/ngtsc/logging';
11
+ import { SourceFileLoader } from '../../../src/ngtsc/sourcemaps';
12
+ import { AstFactory } from '../../../src/ngtsc/translator';
10
13
  import { AstHost } from '../ast/ast_host';
11
14
  import { LinkerOptions } from './linker_options';
12
15
  import { Translator } from './translator';
13
16
  export declare class LinkerEnvironment<TStatement, TExpression> {
17
+ readonly fileSystem: ReadonlyFileSystem;
18
+ readonly logger: Logger;
14
19
  readonly host: AstHost<TExpression>;
15
20
  readonly factory: AstFactory<TStatement, TExpression>;
16
21
  readonly options: LinkerOptions;
17
22
  readonly translator: Translator<TStatement, TExpression>;
23
+ readonly sourceFileLoader: SourceFileLoader | null;
18
24
  private constructor();
19
- static create<TStatement, TExpression>(host: AstHost<TExpression>, factory: AstFactory<TStatement, TExpression>, options: Partial<LinkerOptions>): LinkerEnvironment<TStatement, TExpression>;
25
+ static create<TStatement, TExpression>(fileSystem: ReadonlyFileSystem, logger: Logger, host: AstHost<TExpression>, factory: AstFactory<TStatement, TExpression>, options: Partial<LinkerOptions>): LinkerEnvironment<TStatement, TExpression>;
20
26
  }
@@ -4,31 +4,36 @@
4
4
  if (v !== undefined) module.exports = v;
5
5
  }
6
6
  else if (typeof define === "function" && define.amd) {
7
- define("@angular/compiler-cli/linker/src/file_linker/linker_environment", ["require", "exports", "@angular/compiler-cli/linker/src/file_linker/linker_options", "@angular/compiler-cli/linker/src/file_linker/translator"], factory);
7
+ define("@angular/compiler-cli/linker/src/file_linker/linker_environment", ["require", "exports", "@angular/compiler-cli/src/ngtsc/sourcemaps", "@angular/compiler-cli/linker/src/file_linker/linker_options", "@angular/compiler-cli/linker/src/file_linker/translator"], factory);
8
8
  }
9
9
  })(function (require, exports) {
10
10
  "use strict";
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.LinkerEnvironment = void 0;
13
+ var sourcemaps_1 = require("@angular/compiler-cli/src/ngtsc/sourcemaps");
13
14
  var linker_options_1 = require("@angular/compiler-cli/linker/src/file_linker/linker_options");
14
15
  var translator_1 = require("@angular/compiler-cli/linker/src/file_linker/translator");
15
16
  var LinkerEnvironment = /** @class */ (function () {
16
- function LinkerEnvironment(host, factory, options) {
17
+ function LinkerEnvironment(fileSystem, logger, host, factory, options) {
18
+ this.fileSystem = fileSystem;
19
+ this.logger = logger;
17
20
  this.host = host;
18
21
  this.factory = factory;
19
22
  this.options = options;
20
23
  this.translator = new translator_1.Translator(this.factory);
24
+ this.sourceFileLoader = this.options.sourceMapping ? new sourcemaps_1.SourceFileLoader(this.fileSystem, this.logger, {}) : null;
21
25
  }
22
- LinkerEnvironment.create = function (host, factory, options) {
23
- var _a, _b, _c;
24
- return new LinkerEnvironment(host, factory, {
26
+ LinkerEnvironment.create = function (fileSystem, logger, host, factory, options) {
27
+ var _a, _b, _c, _d;
28
+ return new LinkerEnvironment(fileSystem, logger, host, factory, {
25
29
  enableI18nLegacyMessageIdFormat: (_a = options.enableI18nLegacyMessageIdFormat) !== null && _a !== void 0 ? _a : linker_options_1.DEFAULT_LINKER_OPTIONS.enableI18nLegacyMessageIdFormat,
26
30
  i18nNormalizeLineEndingsInICUs: (_b = options.i18nNormalizeLineEndingsInICUs) !== null && _b !== void 0 ? _b : linker_options_1.DEFAULT_LINKER_OPTIONS.i18nNormalizeLineEndingsInICUs,
27
31
  i18nUseExternalIds: (_c = options.i18nUseExternalIds) !== null && _c !== void 0 ? _c : linker_options_1.DEFAULT_LINKER_OPTIONS.i18nUseExternalIds,
32
+ sourceMapping: (_d = options.sourceMapping) !== null && _d !== void 0 ? _d : linker_options_1.DEFAULT_LINKER_OPTIONS.sourceMapping
28
33
  });
29
34
  };
30
35
  return LinkerEnvironment;
31
36
  }());
32
37
  exports.LinkerEnvironment = LinkerEnvironment;
33
38
  });
34
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlua2VyX2Vudmlyb25tZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcGlsZXItY2xpL2xpbmtlci9zcmMvZmlsZV9saW5rZXIvbGlua2VyX2Vudmlyb25tZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQVVBLDhGQUF1RTtJQUN2RSxzRkFBd0M7SUFFeEM7UUFFRSwyQkFDYSxJQUEwQixFQUFXLE9BQTRDLEVBQ2pGLE9BQXNCO1lBRHRCLFNBQUksR0FBSixJQUFJLENBQXNCO1lBQVcsWUFBTyxHQUFQLE9BQU8sQ0FBcUM7WUFDakYsWUFBTyxHQUFQLE9BQU8sQ0FBZTtZQUgxQixlQUFVLEdBQUcsSUFBSSx1QkFBVSxDQUEwQixJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFHdEMsQ0FBQztRQUVoQyx3QkFBTSxHQUFiLFVBQ0ksSUFBMEIsRUFBRSxPQUE0QyxFQUN4RSxPQUErQjs7WUFDakMsT0FBTyxJQUFJLGlCQUFpQixDQUFDLElBQUksRUFBRSxPQUFPLEVBQUU7Z0JBQzFDLCtCQUErQixRQUFFLE9BQU8sQ0FBQywrQkFBK0IsbUNBQ3BFLHVDQUFzQixDQUFDLCtCQUErQjtnQkFDMUQsOEJBQThCLFFBQUUsT0FBTyxDQUFDLDhCQUE4QixtQ0FDbEUsdUNBQXNCLENBQUMsOEJBQThCO2dCQUN6RCxrQkFBa0IsUUFBRSxPQUFPLENBQUMsa0JBQWtCLG1DQUFJLHVDQUFzQixDQUFDLGtCQUFrQjthQUM1RixDQUFDLENBQUM7UUFDTCxDQUFDO1FBQ0gsd0JBQUM7SUFBRCxDQUFDLEFBakJELElBaUJDO0lBakJZLDhDQUFpQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuaW1wb3J0IHtBc3RGYWN0b3J5fSBmcm9tICdAYW5ndWxhci9jb21waWxlci1jbGkvc3JjL25ndHNjL3RyYW5zbGF0b3InO1xuXG5pbXBvcnQge0FzdEhvc3R9IGZyb20gJy4uL2FzdC9hc3RfaG9zdCc7XG5pbXBvcnQge0RFRkFVTFRfTElOS0VSX09QVElPTlMsIExpbmtlck9wdGlvbnN9IGZyb20gJy4vbGlua2VyX29wdGlvbnMnO1xuaW1wb3J0IHtUcmFuc2xhdG9yfSBmcm9tICcuL3RyYW5zbGF0b3InO1xuXG5leHBvcnQgY2xhc3MgTGlua2VyRW52aXJvbm1lbnQ8VFN0YXRlbWVudCwgVEV4cHJlc3Npb24+IHtcbiAgcmVhZG9ubHkgdHJhbnNsYXRvciA9IG5ldyBUcmFuc2xhdG9yPFRTdGF0ZW1lbnQsIFRFeHByZXNzaW9uPih0aGlzLmZhY3RvcnkpO1xuICBwcml2YXRlIGNvbnN0cnVjdG9yKFxuICAgICAgcmVhZG9ubHkgaG9zdDogQXN0SG9zdDxURXhwcmVzc2lvbj4sIHJlYWRvbmx5IGZhY3Rvcnk6IEFzdEZhY3Rvcnk8VFN0YXRlbWVudCwgVEV4cHJlc3Npb24+LFxuICAgICAgcmVhZG9ubHkgb3B0aW9uczogTGlua2VyT3B0aW9ucykge31cblxuICBzdGF0aWMgY3JlYXRlPFRTdGF0ZW1lbnQsIFRFeHByZXNzaW9uPihcbiAgICAgIGhvc3Q6IEFzdEhvc3Q8VEV4cHJlc3Npb24+LCBmYWN0b3J5OiBBc3RGYWN0b3J5PFRTdGF0ZW1lbnQsIFRFeHByZXNzaW9uPixcbiAgICAgIG9wdGlvbnM6IFBhcnRpYWw8TGlua2VyT3B0aW9ucz4pOiBMaW5rZXJFbnZpcm9ubWVudDxUU3RhdGVtZW50LCBURXhwcmVzc2lvbj4ge1xuICAgIHJldHVybiBuZXcgTGlua2VyRW52aXJvbm1lbnQoaG9zdCwgZmFjdG9yeSwge1xuICAgICAgZW5hYmxlSTE4bkxlZ2FjeU1lc3NhZ2VJZEZvcm1hdDogb3B0aW9ucy5lbmFibGVJMThuTGVnYWN5TWVzc2FnZUlkRm9ybWF0ID8/XG4gICAgICAgICAgREVGQVVMVF9MSU5LRVJfT1BUSU9OUy5lbmFibGVJMThuTGVnYWN5TWVzc2FnZUlkRm9ybWF0LFxuICAgICAgaTE4bk5vcm1hbGl6ZUxpbmVFbmRpbmdzSW5JQ1VzOiBvcHRpb25zLmkxOG5Ob3JtYWxpemVMaW5lRW5kaW5nc0luSUNVcyA/P1xuICAgICAgICAgIERFRkFVTFRfTElOS0VSX09QVElPTlMuaTE4bk5vcm1hbGl6ZUxpbmVFbmRpbmdzSW5JQ1VzLFxuICAgICAgaTE4blVzZUV4dGVybmFsSWRzOiBvcHRpb25zLmkxOG5Vc2VFeHRlcm5hbElkcyA/PyBERUZBVUxUX0xJTktFUl9PUFRJT05TLmkxOG5Vc2VFeHRlcm5hbElkcyxcbiAgICB9KTtcbiAgfVxufVxuIl19
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlua2VyX2Vudmlyb25tZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcGlsZXItY2xpL2xpbmtlci9zcmMvZmlsZV9saW5rZXIvbGlua2VyX2Vudmlyb25tZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQVNBLHlFQUErRDtJQUkvRCw4RkFBdUU7SUFDdkUsc0ZBQXdDO0lBRXhDO1FBS0UsMkJBQ2EsVUFBOEIsRUFBVyxNQUFjLEVBQ3ZELElBQTBCLEVBQVcsT0FBNEMsRUFDakYsT0FBc0I7WUFGdEIsZUFBVSxHQUFWLFVBQVUsQ0FBb0I7WUFBVyxXQUFNLEdBQU4sTUFBTSxDQUFRO1lBQ3ZELFNBQUksR0FBSixJQUFJLENBQXNCO1lBQVcsWUFBTyxHQUFQLE9BQU8sQ0FBcUM7WUFDakYsWUFBTyxHQUFQLE9BQU8sQ0FBZTtZQVAxQixlQUFVLEdBQUcsSUFBSSx1QkFBVSxDQUEwQixJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbkUscUJBQWdCLEdBQ3JCLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLDZCQUFnQixDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBS3pELENBQUM7UUFFaEMsd0JBQU0sR0FBYixVQUNJLFVBQThCLEVBQUUsTUFBYyxFQUFFLElBQTBCLEVBQzFFLE9BQTRDLEVBQzVDLE9BQStCOztZQUNqQyxPQUFPLElBQUksaUJBQWlCLENBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFO2dCQUM5RCwrQkFBK0IsUUFBRSxPQUFPLENBQUMsK0JBQStCLG1DQUNwRSx1Q0FBc0IsQ0FBQywrQkFBK0I7Z0JBQzFELDhCQUE4QixRQUFFLE9BQU8sQ0FBQyw4QkFBOEIsbUNBQ2xFLHVDQUFzQixDQUFDLDhCQUE4QjtnQkFDekQsa0JBQWtCLFFBQUUsT0FBTyxDQUFDLGtCQUFrQixtQ0FBSSx1Q0FBc0IsQ0FBQyxrQkFBa0I7Z0JBQzNGLGFBQWEsUUFBRSxPQUFPLENBQUMsYUFBYSxtQ0FBSSx1Q0FBc0IsQ0FBQyxhQUFhO2FBQzdFLENBQUMsQ0FBQztRQUNMLENBQUM7UUFDSCx3QkFBQztJQUFELENBQUMsQUF2QkQsSUF1QkM7SUF2QlksOENBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5pbXBvcnQge1JlYWRvbmx5RmlsZVN5c3RlbX0gZnJvbSAnLi4vLi4vLi4vc3JjL25ndHNjL2ZpbGVfc3lzdGVtJztcbmltcG9ydCB7TG9nZ2VyfSBmcm9tICcuLi8uLi8uLi9zcmMvbmd0c2MvbG9nZ2luZyc7XG5pbXBvcnQge1NvdXJjZUZpbGVMb2FkZXJ9IGZyb20gJy4uLy4uLy4uL3NyYy9uZ3RzYy9zb3VyY2VtYXBzJztcbmltcG9ydCB7QXN0RmFjdG9yeX0gZnJvbSAnLi4vLi4vLi4vc3JjL25ndHNjL3RyYW5zbGF0b3InO1xuXG5pbXBvcnQge0FzdEhvc3R9IGZyb20gJy4uL2FzdC9hc3RfaG9zdCc7XG5pbXBvcnQge0RFRkFVTFRfTElOS0VSX09QVElPTlMsIExpbmtlck9wdGlvbnN9IGZyb20gJy4vbGlua2VyX29wdGlvbnMnO1xuaW1wb3J0IHtUcmFuc2xhdG9yfSBmcm9tICcuL3RyYW5zbGF0b3InO1xuXG5leHBvcnQgY2xhc3MgTGlua2VyRW52aXJvbm1lbnQ8VFN0YXRlbWVudCwgVEV4cHJlc3Npb24+IHtcbiAgcmVhZG9ubHkgdHJhbnNsYXRvciA9IG5ldyBUcmFuc2xhdG9yPFRTdGF0ZW1lbnQsIFRFeHByZXNzaW9uPih0aGlzLmZhY3RvcnkpO1xuICByZWFkb25seSBzb3VyY2VGaWxlTG9hZGVyID1cbiAgICAgIHRoaXMub3B0aW9ucy5zb3VyY2VNYXBwaW5nID8gbmV3IFNvdXJjZUZpbGVMb2FkZXIodGhpcy5maWxlU3lzdGVtLCB0aGlzLmxvZ2dlciwge30pIDogbnVsbDtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKFxuICAgICAgcmVhZG9ubHkgZmlsZVN5c3RlbTogUmVhZG9ubHlGaWxlU3lzdGVtLCByZWFkb25seSBsb2dnZXI6IExvZ2dlcixcbiAgICAgIHJlYWRvbmx5IGhvc3Q6IEFzdEhvc3Q8VEV4cHJlc3Npb24+LCByZWFkb25seSBmYWN0b3J5OiBBc3RGYWN0b3J5PFRTdGF0ZW1lbnQsIFRFeHByZXNzaW9uPixcbiAgICAgIHJlYWRvbmx5IG9wdGlvbnM6IExpbmtlck9wdGlvbnMpIHt9XG5cbiAgc3RhdGljIGNyZWF0ZTxUU3RhdGVtZW50LCBURXhwcmVzc2lvbj4oXG4gICAgICBmaWxlU3lzdGVtOiBSZWFkb25seUZpbGVTeXN0ZW0sIGxvZ2dlcjogTG9nZ2VyLCBob3N0OiBBc3RIb3N0PFRFeHByZXNzaW9uPixcbiAgICAgIGZhY3Rvcnk6IEFzdEZhY3Rvcnk8VFN0YXRlbWVudCwgVEV4cHJlc3Npb24+LFxuICAgICAgb3B0aW9uczogUGFydGlhbDxMaW5rZXJPcHRpb25zPik6IExpbmtlckVudmlyb25tZW50PFRTdGF0ZW1lbnQsIFRFeHByZXNzaW9uPiB7XG4gICAgcmV0dXJuIG5ldyBMaW5rZXJFbnZpcm9ubWVudChmaWxlU3lzdGVtLCBsb2dnZXIsIGhvc3QsIGZhY3RvcnksIHtcbiAgICAgIGVuYWJsZUkxOG5MZWdhY3lNZXNzYWdlSWRGb3JtYXQ6IG9wdGlvbnMuZW5hYmxlSTE4bkxlZ2FjeU1lc3NhZ2VJZEZvcm1hdCA/P1xuICAgICAgICAgIERFRkFVTFRfTElOS0VSX09QVElPTlMuZW5hYmxlSTE4bkxlZ2FjeU1lc3NhZ2VJZEZvcm1hdCxcbiAgICAgIGkxOG5Ob3JtYWxpemVMaW5lRW5kaW5nc0luSUNVczogb3B0aW9ucy5pMThuTm9ybWFsaXplTGluZUVuZGluZ3NJbklDVXMgPz9cbiAgICAgICAgICBERUZBVUxUX0xJTktFUl9PUFRJT05TLmkxOG5Ob3JtYWxpemVMaW5lRW5kaW5nc0luSUNVcyxcbiAgICAgIGkxOG5Vc2VFeHRlcm5hbElkczogb3B0aW9ucy5pMThuVXNlRXh0ZXJuYWxJZHMgPz8gREVGQVVMVF9MSU5LRVJfT1BUSU9OUy5pMThuVXNlRXh0ZXJuYWxJZHMsXG4gICAgICBzb3VyY2VNYXBwaW5nOiBvcHRpb25zLnNvdXJjZU1hcHBpbmcgPz8gREVGQVVMVF9MSU5LRVJfT1BUSU9OUy5zb3VyY2VNYXBwaW5nXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -26,6 +26,11 @@ export interface LinkerOptions {
26
26
  * The default is `false`.
27
27
  */
28
28
  i18nUseExternalIds: boolean;
29
+ /**
30
+ * Whether to use source-mapping to compute the original source for external templates.
31
+ * The default is `true`.
32
+ */
33
+ sourceMapping: boolean;
29
34
  }
30
35
  /**
31
36
  * The default linker options to use if properties are not provided.
@@ -24,6 +24,7 @@
24
24
  enableI18nLegacyMessageIdFormat: true,
25
25
  i18nNormalizeLineEndingsInICUs: false,
26
26
  i18nUseExternalIds: false,
27
+ sourceMapping: true,
27
28
  };
28
29
  });
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlua2VyX29wdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvbGlua2VyL3NyYy9maWxlX2xpbmtlci9saW5rZXJfb3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7Ozs7SUF5Qkg7O09BRUc7SUFDVSxRQUFBLHNCQUFzQixHQUFrQjtRQUNuRCwrQkFBK0IsRUFBRSxJQUFJO1FBQ3JDLDhCQUE4QixFQUFFLEtBQUs7UUFDckMsa0JBQWtCLEVBQUUsS0FBSztLQUMxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbi8qKlxuICogT3B0aW9ucyB0byBjb25maWd1cmUgdGhlIGxpbmtpbmcgYmVoYXZpb3IuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGlua2VyT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGdlbmVyYXRlIGxlZ2FjeSBpMThuIG1lc3NhZ2UgaWRzLlxuICAgKiBUaGUgZGVmYXVsdCBpcyBgdHJ1ZWAuXG4gICAqL1xuICBlbmFibGVJMThuTGVnYWN5TWVzc2FnZUlkRm9ybWF0OiBib29sZWFuO1xuICAvKipcbiAgICogV2hldGhlciB0byBjb252ZXJ0IGFsbCBsaW5lLWVuZGluZ3MgaW4gSUNVIGV4cHJlc3Npb25zIHRvIGBcXG5gIGNoYXJhY3RlcnMuXG4gICAqIFRoZSBkZWZhdWx0IGlzIGBmYWxzZWAuXG4gICAqL1xuICBpMThuTm9ybWFsaXplTGluZUVuZGluZ3NJbklDVXM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdHJhbnNsYXRpb24gdmFyaWFibGUgbmFtZSBzaG91bGQgY29udGFpbiBleHRlcm5hbCBtZXNzYWdlIGlkXG4gICAqICh1c2VkIGJ5IENsb3N1cmUgQ29tcGlsZXIncyBvdXRwdXQgb2YgYGdvb2cuZ2V0TXNnYCBmb3IgdHJhbnNpdGlvbiBwZXJpb2QpXG4gICAqIFRoZSBkZWZhdWx0IGlzIGBmYWxzZWAuXG4gICAqL1xuICBpMThuVXNlRXh0ZXJuYWxJZHM6IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgbGlua2VyIG9wdGlvbnMgdG8gdXNlIGlmIHByb3BlcnRpZXMgYXJlIG5vdCBwcm92aWRlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfTElOS0VSX09QVElPTlM6IExpbmtlck9wdGlvbnMgPSB7XG4gIGVuYWJsZUkxOG5MZWdhY3lNZXNzYWdlSWRGb3JtYXQ6IHRydWUsXG4gIGkxOG5Ob3JtYWxpemVMaW5lRW5kaW5nc0luSUNVczogZmFsc2UsXG4gIGkxOG5Vc2VFeHRlcm5hbElkczogZmFsc2UsXG59O1xuIl19
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlua2VyX29wdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvbGlua2VyL3NyYy9maWxlX2xpbmtlci9saW5rZXJfb3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7Ozs7SUErQkg7O09BRUc7SUFDVSxRQUFBLHNCQUFzQixHQUFrQjtRQUNuRCwrQkFBK0IsRUFBRSxJQUFJO1FBQ3JDLDhCQUE4QixFQUFFLEtBQUs7UUFDckMsa0JBQWtCLEVBQUUsS0FBSztRQUN6QixhQUFhLEVBQUUsSUFBSTtLQUNwQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbi8qKlxuICogT3B0aW9ucyB0byBjb25maWd1cmUgdGhlIGxpbmtpbmcgYmVoYXZpb3IuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGlua2VyT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGdlbmVyYXRlIGxlZ2FjeSBpMThuIG1lc3NhZ2UgaWRzLlxuICAgKiBUaGUgZGVmYXVsdCBpcyBgdHJ1ZWAuXG4gICAqL1xuICBlbmFibGVJMThuTGVnYWN5TWVzc2FnZUlkRm9ybWF0OiBib29sZWFuO1xuICAvKipcbiAgICogV2hldGhlciB0byBjb252ZXJ0IGFsbCBsaW5lLWVuZGluZ3MgaW4gSUNVIGV4cHJlc3Npb25zIHRvIGBcXG5gIGNoYXJhY3RlcnMuXG4gICAqIFRoZSBkZWZhdWx0IGlzIGBmYWxzZWAuXG4gICAqL1xuICBpMThuTm9ybWFsaXplTGluZUVuZGluZ3NJbklDVXM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdHJhbnNsYXRpb24gdmFyaWFibGUgbmFtZSBzaG91bGQgY29udGFpbiBleHRlcm5hbCBtZXNzYWdlIGlkXG4gICAqICh1c2VkIGJ5IENsb3N1cmUgQ29tcGlsZXIncyBvdXRwdXQgb2YgYGdvb2cuZ2V0TXNnYCBmb3IgdHJhbnNpdGlvbiBwZXJpb2QpXG4gICAqIFRoZSBkZWZhdWx0IGlzIGBmYWxzZWAuXG4gICAqL1xuICBpMThuVXNlRXh0ZXJuYWxJZHM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gdXNlIHNvdXJjZS1tYXBwaW5nIHRvIGNvbXB1dGUgdGhlIG9yaWdpbmFsIHNvdXJjZSBmb3IgZXh0ZXJuYWwgdGVtcGxhdGVzLlxuICAgKiBUaGUgZGVmYXVsdCBpcyBgdHJ1ZWAuXG4gICAqL1xuICBzb3VyY2VNYXBwaW5nOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFRoZSBkZWZhdWx0IGxpbmtlciBvcHRpb25zIHRvIHVzZSBpZiBwcm9wZXJ0aWVzIGFyZSBub3QgcHJvdmlkZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0xJTktFUl9PUFRJT05TOiBMaW5rZXJPcHRpb25zID0ge1xuICBlbmFibGVJMThuTGVnYWN5TWVzc2FnZUlkRm9ybWF0OiB0cnVlLFxuICBpMThuTm9ybWFsaXplTGluZUVuZGluZ3NJbklDVXM6IGZhbHNlLFxuICBpMThuVXNlRXh0ZXJuYWxJZHM6IGZhbHNlLFxuICBzb3VyY2VNYXBwaW5nOiB0cnVlLFxufTtcbiJdfQ==
@@ -6,20 +6,34 @@
6
6
  * Use of this source code is governed by an MIT-style license that can be
7
7
  * found in the LICENSE file at https://angular.io/license
8
8
  */
9
- import { ConstantPool, R3ComponentMetadata, R3DeclareComponentMetadata, R3PartialDeclaration } from '@angular/compiler';
9
+ import { ConstantPool, R3PartialDeclaration } from '@angular/compiler';
10
10
  import * as o from '@angular/compiler/src/output/output_ast';
11
+ import { AbsoluteFsPath } from '../../../../src/ngtsc/file_system';
11
12
  import { AstObject } from '../../ast/ast_value';
12
- import { LinkerOptions } from '../linker_options';
13
+ import { GetSourceFileFn } from '../get_source_file';
14
+ import { LinkerEnvironment } from '../linker_environment';
13
15
  import { PartialLinker } from './partial_linker';
14
16
  /**
15
17
  * A `PartialLinker` that is designed to process `ɵɵngDeclareComponent()` call expressions.
16
18
  */
17
- export declare class PartialComponentLinkerVersion1<TExpression> implements PartialLinker<TExpression> {
18
- private readonly options;
19
- constructor(options: LinkerOptions);
20
- linkPartialDeclaration(sourceUrl: string, code: string, constantPool: ConstantPool, metaObj: AstObject<R3PartialDeclaration, TExpression>): o.Expression;
19
+ export declare class PartialComponentLinkerVersion1<TStatement, TExpression> implements PartialLinker<TExpression> {
20
+ private readonly environment;
21
+ private readonly getSourceFile;
22
+ private sourceUrl;
23
+ private code;
24
+ private readonly i18nNormalizeLineEndingsInICUs;
25
+ private readonly enableI18nLegacyMessageIdFormat;
26
+ private readonly i18nUseExternalIds;
27
+ constructor(environment: LinkerEnvironment<TStatement, TExpression>, getSourceFile: GetSourceFileFn, sourceUrl: AbsoluteFsPath, code: string);
28
+ linkPartialDeclaration(constantPool: ConstantPool, metaObj: AstObject<R3PartialDeclaration, TExpression>): o.Expression;
29
+ /**
30
+ * This function derives the `R3ComponentMetadata` from the provided AST object.
31
+ */
32
+ private toR3ComponentMeta;
33
+ /**
34
+ * Update the range to remove the start and end chars, which should be quotes around the template.
35
+ */
36
+ private getTemplateInfo;
37
+ private tryExternalTemplate;
38
+ private templateFromPartialCode;
21
39
  }
22
- /**
23
- * This function derives the `R3ComponentMetadata` from the provided AST object.
24
- */
25
- export declare function toR3ComponentMeta<TExpression>(metaObj: AstObject<R3DeclareComponentMetadata, TExpression>, code: string, sourceUrl: string, options: LinkerOptions): R3ComponentMetadata;
@@ -9,7 +9,7 @@
9
9
  })(function (require, exports) {
10
10
  "use strict";
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.toR3ComponentMeta = exports.PartialComponentLinkerVersion1 = void 0;
12
+ exports.PartialComponentLinkerVersion1 = void 0;
13
13
  var tslib_1 = require("tslib");
14
14
  /**
15
15
  * @license
@@ -26,93 +26,149 @@
26
26
  * A `PartialLinker` that is designed to process `ɵɵngDeclareComponent()` call expressions.
27
27
  */
28
28
  var PartialComponentLinkerVersion1 = /** @class */ (function () {
29
- function PartialComponentLinkerVersion1(options) {
30
- this.options = options;
29
+ function PartialComponentLinkerVersion1(environment, getSourceFile, sourceUrl, code) {
30
+ this.environment = environment;
31
+ this.getSourceFile = getSourceFile;
32
+ this.sourceUrl = sourceUrl;
33
+ this.code = code;
34
+ this.i18nNormalizeLineEndingsInICUs = this.environment.options.i18nNormalizeLineEndingsInICUs;
35
+ this.enableI18nLegacyMessageIdFormat = this.environment.options.enableI18nLegacyMessageIdFormat;
36
+ this.i18nUseExternalIds = this.environment.options.i18nUseExternalIds;
31
37
  }
32
- PartialComponentLinkerVersion1.prototype.linkPartialDeclaration = function (sourceUrl, code, constantPool, metaObj) {
33
- var meta = toR3ComponentMeta(metaObj, code, sourceUrl, this.options);
38
+ PartialComponentLinkerVersion1.prototype.linkPartialDeclaration = function (constantPool, metaObj) {
39
+ var meta = this.toR3ComponentMeta(metaObj);
34
40
  var def = compiler_1.compileComponentFromMetadata(meta, constantPool, compiler_1.makeBindingParser());
35
41
  return def.expression;
36
42
  };
43
+ /**
44
+ * This function derives the `R3ComponentMetadata` from the provided AST object.
45
+ */
46
+ PartialComponentLinkerVersion1.prototype.toR3ComponentMeta = function (metaObj) {
47
+ var interpolation = parseInterpolationConfig(metaObj);
48
+ var templateSource = metaObj.getValue('template');
49
+ var isInline = metaObj.has('isInline') ? metaObj.getBoolean('isInline') : false;
50
+ var templateInfo = this.getTemplateInfo(templateSource, isInline);
51
+ // We always normalize line endings if the template is inline.
52
+ var i18nNormalizeLineEndingsInICUs = isInline || this.i18nNormalizeLineEndingsInICUs;
53
+ var template = compiler_1.parseTemplate(templateInfo.code, templateInfo.sourceUrl, {
54
+ escapedString: templateInfo.isEscaped,
55
+ interpolationConfig: interpolation,
56
+ range: templateInfo.range,
57
+ enableI18nLegacyMessageIdFormat: this.enableI18nLegacyMessageIdFormat,
58
+ preserveWhitespaces: metaObj.has('preserveWhitespaces') ? metaObj.getBoolean('preserveWhitespaces') : false,
59
+ i18nNormalizeLineEndingsInICUs: i18nNormalizeLineEndingsInICUs,
60
+ isInline: isInline,
61
+ });
62
+ if (template.errors !== null) {
63
+ var errors = template.errors.map(function (err) { return err.toString(); }).join('\n');
64
+ throw new fatal_linker_error_1.FatalLinkerError(templateSource.expression, "Errors found in the template:\n" + errors);
65
+ }
66
+ var declarationListEmitMode = 0 /* Direct */;
67
+ var directives = [];
68
+ if (metaObj.has('directives')) {
69
+ directives = metaObj.getArray('directives').map(function (directive) {
70
+ var directiveExpr = directive.getObject();
71
+ var type = directiveExpr.getValue('type');
72
+ var selector = directiveExpr.getString('selector');
73
+ var typeExpr = type.getOpaque();
74
+ var forwardRefType = extractForwardRef(type);
75
+ if (forwardRefType !== null) {
76
+ typeExpr = forwardRefType;
77
+ declarationListEmitMode = 1 /* Closure */;
78
+ }
79
+ return {
80
+ type: typeExpr,
81
+ selector: selector,
82
+ inputs: directiveExpr.has('inputs') ?
83
+ directiveExpr.getArray('inputs').map(function (input) { return input.getString(); }) :
84
+ [],
85
+ outputs: directiveExpr.has('outputs') ?
86
+ directiveExpr.getArray('outputs').map(function (input) { return input.getString(); }) :
87
+ [],
88
+ exportAs: directiveExpr.has('exportAs') ?
89
+ directiveExpr.getArray('exportAs').map(function (exportAs) { return exportAs.getString(); }) :
90
+ null,
91
+ };
92
+ });
93
+ }
94
+ var pipes = new Map();
95
+ if (metaObj.has('pipes')) {
96
+ pipes = metaObj.getObject('pipes').toMap(function (pipe) {
97
+ var forwardRefType = extractForwardRef(pipe);
98
+ if (forwardRefType !== null) {
99
+ declarationListEmitMode = 1 /* Closure */;
100
+ return forwardRefType;
101
+ }
102
+ else {
103
+ return pipe.getOpaque();
104
+ }
105
+ });
106
+ }
107
+ return tslib_1.__assign(tslib_1.__assign({}, partial_directive_linker_1_1.toR3DirectiveMeta(metaObj, this.code, this.sourceUrl)), { viewProviders: metaObj.has('viewProviders') ? metaObj.getOpaque('viewProviders') : null, template: {
108
+ nodes: template.nodes,
109
+ ngContentSelectors: template.ngContentSelectors,
110
+ }, declarationListEmitMode: declarationListEmitMode, styles: metaObj.has('styles') ? metaObj.getArray('styles').map(function (entry) { return entry.getString(); }) :
111
+ [], encapsulation: metaObj.has('encapsulation') ?
112
+ parseEncapsulation(metaObj.getValue('encapsulation')) :
113
+ core_1.ViewEncapsulation.Emulated, interpolation: interpolation, changeDetection: metaObj.has('changeDetection') ?
114
+ parseChangeDetectionStrategy(metaObj.getValue('changeDetection')) :
115
+ core_1.ChangeDetectionStrategy.Default, animations: metaObj.has('animations') ? metaObj.getOpaque('animations') : null, relativeContextFilePath: this.sourceUrl, i18nUseExternalIds: this.i18nUseExternalIds, pipes: pipes,
116
+ directives: directives });
117
+ };
118
+ /**
119
+ * Update the range to remove the start and end chars, which should be quotes around the template.
120
+ */
121
+ PartialComponentLinkerVersion1.prototype.getTemplateInfo = function (templateNode, isInline) {
122
+ var range = templateNode.getRange();
123
+ if (!isInline) {
124
+ // If not marked as inline, then we try to get the template info from the original external
125
+ // template file, via source-mapping.
126
+ var externalTemplate = this.tryExternalTemplate(range);
127
+ if (externalTemplate !== null) {
128
+ return externalTemplate;
129
+ }
130
+ }
131
+ // Either the template is marked inline or we failed to find the original external template.
132
+ // So just use the literal string from the partially compiled component declaration.
133
+ return this.templateFromPartialCode(templateNode, range);
134
+ };
135
+ PartialComponentLinkerVersion1.prototype.tryExternalTemplate = function (range) {
136
+ var sourceFile = this.getSourceFile();
137
+ if (sourceFile === null) {
138
+ return null;
139
+ }
140
+ var pos = sourceFile.getOriginalLocation(range.startLine, range.startCol);
141
+ // Only interested if the original location is in an "external" template file:
142
+ // * the file is different to the current file
143
+ // * the file does not end in `.js` or `.ts` (we expect it to be something like `.html`).
144
+ // * the range starts at the beginning of the file
145
+ if (pos === null || pos.file === this.sourceUrl || /\.[jt]s$/.test(pos.file) ||
146
+ pos.line !== 0 || pos.column !== 0) {
147
+ return null;
148
+ }
149
+ var templateContents = sourceFile.sources.find(function (src) { return (src === null || src === void 0 ? void 0 : src.sourcePath) === pos.file; }).contents;
150
+ return {
151
+ code: templateContents,
152
+ sourceUrl: pos.file,
153
+ range: { startPos: 0, startLine: 0, startCol: 0, endPos: templateContents.length },
154
+ isEscaped: false,
155
+ };
156
+ };
157
+ PartialComponentLinkerVersion1.prototype.templateFromPartialCode = function (templateNode, _a) {
158
+ var startPos = _a.startPos, endPos = _a.endPos, startLine = _a.startLine, startCol = _a.startCol;
159
+ if (!/["'`]/.test(this.code[startPos]) || this.code[startPos] !== this.code[endPos - 1]) {
160
+ throw new fatal_linker_error_1.FatalLinkerError(templateNode.expression, "Expected the template string to be wrapped in quotes but got: " + this.code.substring(startPos, endPos));
161
+ }
162
+ return {
163
+ code: this.code,
164
+ sourceUrl: this.sourceUrl,
165
+ range: { startPos: startPos + 1, endPos: endPos - 1, startLine: startLine, startCol: startCol + 1 },
166
+ isEscaped: true,
167
+ };
168
+ };
37
169
  return PartialComponentLinkerVersion1;
38
170
  }());
39
171
  exports.PartialComponentLinkerVersion1 = PartialComponentLinkerVersion1;
40
- /**
41
- * This function derives the `R3ComponentMetadata` from the provided AST object.
42
- */
43
- function toR3ComponentMeta(metaObj, code, sourceUrl, options) {
44
- var interpolation = parseInterpolationConfig(metaObj);
45
- var templateObj = metaObj.getObject('template');
46
- var templateSource = templateObj.getValue('source');
47
- var range = getTemplateRange(templateSource, code);
48
- var isInline = templateObj.getBoolean('isInline');
49
- // We always normalize line endings if the template is inline.
50
- var i18nNormalizeLineEndingsInICUs = isInline || options.i18nNormalizeLineEndingsInICUs;
51
- var template = compiler_1.parseTemplate(code, sourceUrl, {
52
- escapedString: true,
53
- interpolationConfig: interpolation,
54
- range: range,
55
- enableI18nLegacyMessageIdFormat: options.enableI18nLegacyMessageIdFormat,
56
- preserveWhitespaces: metaObj.has('preserveWhitespaces') ? metaObj.getBoolean('preserveWhitespaces') : false,
57
- i18nNormalizeLineEndingsInICUs: i18nNormalizeLineEndingsInICUs,
58
- isInline: isInline,
59
- });
60
- if (template.errors !== null) {
61
- var errors = template.errors.map(function (err) { return err.toString(); }).join('\n');
62
- throw new fatal_linker_error_1.FatalLinkerError(templateSource.expression, "Errors found in the template:\n" + errors);
63
- }
64
- var declarationListEmitMode = 0 /* Direct */;
65
- var directives = [];
66
- if (metaObj.has('directives')) {
67
- directives = metaObj.getArray('directives').map(function (directive) {
68
- var directiveExpr = directive.getObject();
69
- var type = directiveExpr.getValue('type');
70
- var selector = directiveExpr.getString('selector');
71
- var typeExpr = type.getOpaque();
72
- var forwardRefType = extractForwardRef(type);
73
- if (forwardRefType !== null) {
74
- typeExpr = forwardRefType;
75
- declarationListEmitMode = 1 /* Closure */;
76
- }
77
- return {
78
- type: typeExpr,
79
- selector: selector,
80
- inputs: directiveExpr.has('inputs') ?
81
- directiveExpr.getArray('inputs').map(function (input) { return input.getString(); }) :
82
- [],
83
- outputs: directiveExpr.has('outputs') ?
84
- directiveExpr.getArray('outputs').map(function (input) { return input.getString(); }) :
85
- [],
86
- exportAs: directiveExpr.has('exportAs') ?
87
- directiveExpr.getArray('exportAs').map(function (exportAs) { return exportAs.getString(); }) :
88
- null,
89
- };
90
- });
91
- }
92
- var pipes = new Map();
93
- if (metaObj.has('pipes')) {
94
- pipes = metaObj.getObject('pipes').toMap(function (pipe) {
95
- var forwardRefType = extractForwardRef(pipe);
96
- if (forwardRefType !== null) {
97
- declarationListEmitMode = 1 /* Closure */;
98
- return forwardRefType;
99
- }
100
- else {
101
- return pipe.getOpaque();
102
- }
103
- });
104
- }
105
- return tslib_1.__assign(tslib_1.__assign({}, partial_directive_linker_1_1.toR3DirectiveMeta(metaObj, code, sourceUrl)), { viewProviders: metaObj.has('viewProviders') ? metaObj.getOpaque('viewProviders') : null, template: {
106
- nodes: template.nodes,
107
- ngContentSelectors: template.ngContentSelectors,
108
- }, declarationListEmitMode: declarationListEmitMode, styles: metaObj.has('styles') ? metaObj.getArray('styles').map(function (entry) { return entry.getString(); }) : [], encapsulation: metaObj.has('encapsulation') ?
109
- parseEncapsulation(metaObj.getValue('encapsulation')) :
110
- core_1.ViewEncapsulation.Emulated, interpolation: interpolation, changeDetection: metaObj.has('changeDetection') ?
111
- parseChangeDetectionStrategy(metaObj.getValue('changeDetection')) :
112
- core_1.ChangeDetectionStrategy.Default, animations: metaObj.has('animations') ? metaObj.getOpaque('animations') : null, relativeContextFilePath: sourceUrl, i18nUseExternalIds: options.i18nUseExternalIds, pipes: pipes,
113
- directives: directives });
114
- }
115
- exports.toR3ComponentMeta = toR3ComponentMeta;
116
172
  /**
117
173
  * Extract an `InterpolationConfig` from the component declaration.
118
174
  */
@@ -155,21 +211,6 @@
155
211
  }
156
212
  return enumValue;
157
213
  }
158
- /**
159
- * Update the range to remove the start and end chars, which should be quotes around the template.
160
- */
161
- function getTemplateRange(templateNode, code) {
162
- var _a = templateNode.getRange(), startPos = _a.startPos, endPos = _a.endPos, startLine = _a.startLine, startCol = _a.startCol;
163
- if (!/["'`]/.test(code[startPos]) || code[startPos] !== code[endPos - 1]) {
164
- throw new fatal_linker_error_1.FatalLinkerError(templateNode.expression, "Expected the template string to be wrapped in quotes but got: " + code.substring(startPos, endPos));
165
- }
166
- return {
167
- startPos: startPos + 1,
168
- endPos: endPos - 1,
169
- startLine: startLine,
170
- startCol: startCol + 1,
171
- };
172
- }
173
214
  /**
174
215
  * Extract the type reference expression from a `forwardRef` function call. For example, the
175
216
  * expression `forwardRef(function() { return FooDir; })` returns `FooDir`. Note that this
@@ -195,4 +236,4 @@
195
236
  return wrapperFn.getFunctionReturnValue().getOpaque();
196
237
  }
197
238
  });
198
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFydGlhbF9jb21wb25lbnRfbGlua2VyXzEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvbGlua2VyL3NyYy9maWxlX2xpbmtlci9wYXJ0aWFsX2xpbmtlcnMvcGFydGlhbF9jb21wb25lbnRfbGlua2VyXzEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztJQUFBOzs7Ozs7T0FNRztJQUNILDhDQUEyUjtJQUMzUixtREFBc0Y7SUFLdEYsMEZBQTBEO0lBRzFELHNJQUErRDtJQUcvRDs7T0FFRztJQUNIO1FBQ0Usd0NBQTZCLE9BQXNCO1lBQXRCLFlBQU8sR0FBUCxPQUFPLENBQWU7UUFBRyxDQUFDO1FBRXZELCtEQUFzQixHQUF0QixVQUNJLFNBQWlCLEVBQUUsSUFBWSxFQUFFLFlBQTBCLEVBQzNELE9BQXFEO1lBQ3ZELElBQU0sSUFBSSxHQUFHLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN2RSxJQUFNLEdBQUcsR0FBRyx1Q0FBNEIsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLDRCQUFpQixFQUFFLENBQUMsQ0FBQztZQUNsRixPQUFPLEdBQUcsQ0FBQyxVQUFVLENBQUM7UUFDeEIsQ0FBQztRQUNILHFDQUFDO0lBQUQsQ0FBQyxBQVZELElBVUM7SUFWWSx3RUFBOEI7SUFZM0M7O09BRUc7SUFDSCxTQUFnQixpQkFBaUIsQ0FDN0IsT0FBMkQsRUFBRSxJQUFZLEVBQUUsU0FBaUIsRUFDNUYsT0FBc0I7UUFDeEIsSUFBTSxhQUFhLEdBQUcsd0JBQXdCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDeEQsSUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNsRCxJQUFNLGNBQWMsR0FBRyxXQUFXLENBQUMsUUFBUSxD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SyxDQUFDLEVBQUU7WUFDckIsTUFBTSxJQUFJLHFDQUFnQixDQUFDLElBQUksRUFBRSx5REFBeUQsQ0FBQyxDQUFDO1NBQzdGO1FBRUQsSUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBb0MsQ0FBQztRQUM3RCxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxFQUFFO1lBQzNCLE1BQU0sSUFBSSxxQ0FBZ0IsQ0FDdEIsU0FBUyxFQUFFLDJEQUEyRCxDQUFDLENBQUM7U0FDN0U7UUFFRCxPQUFPLFNBQVMsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3hELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbmltcG9ydCB7Y29tcGlsZUNvbXBvbmVudEZyb21NZXRhZGF0YSwgQ29uc3RhbnRQb29sLCBEZWNsYXJhdGlvbkxpc3RFbWl0TW9kZSwgREVGQVVMVF9JTlRFUlBPTEFUSU9OX0NPTkZJRywgSW50ZXJwb2xhdGlvbkNvbmZpZywgbWFrZUJpbmRpbmdQYXJzZXIsIHBhcnNlVGVtcGxhdGUsIFIzQ29tcG9uZW50TWV0YWRhdGEsIFIzRGVjbGFyZUNvbXBvbmVudE1ldGFkYXRhLCBSM1BhcnRpYWxEZWNsYXJhdGlvbiwgUjNVc2VkRGlyZWN0aXZlTWV0YWRhdGF9IGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyJztcbmltcG9ydCB7Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIFZpZXdFbmNhcHN1bGF0aW9ufSBmcm9tICdAYW5ndWxhci9jb21waWxlci9zcmMvY29yZSc7XG5pbXBvcnQgKiBhcyBvIGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyL3NyYy9vdXRwdXQvb3V0cHV0X2FzdCc7XG5cbmltcG9ydCB7UmFuZ2V9IGZyb20gJy4uLy4uL2FzdC9hc3RfaG9zdCc7XG5pbXBvcnQge0FzdE9iamVjdCwgQXN0VmFsdWV9IGZyb20gJy4uLy4uL2FzdC9hc3RfdmFsdWUnO1xuaW1wb3J0IHtGYXRhbExpbmtlckVycm9yfSBmcm9tICcuLi8uLi9mYXRhbF9saW5rZXJfZXJyb3InO1xuaW1wb3J0IHtMaW5rZXJPcHRpb25zfSBmcm9tICcuLi9saW5rZXJfb3B0aW9ucyc7XG5cbmltcG9ydCB7dG9SM0RpcmVjdGl2ZU1ldGF9IGZyb20gJy4vcGFydGlhbF9kaXJlY3RpdmVfbGlua2VyXzEnO1xuaW1wb3J0IHtQYXJ0aWFsTGlua2VyfSBmcm9tICcuL3BhcnRpYWxfbGlua2VyJztcblxuLyoqXG4gKiBBIGBQYXJ0aWFsTGlua2VyYCB0aGF0IGlzIGRlc2lnbmVkIHRvIHByb2Nlc3MgYMm1ybVuZ0RlY2xhcmVDb21wb25lbnQoKWAgY2FsbCBleHByZXNzaW9ucy5cbiAqL1xuZXhwb3J0IGNsYXNzIFBhcnRpYWxDb21wb25lbnRMaW5rZXJWZXJzaW9uMTxURXhwcmVzc2lvbj4gaW1wbGVtZW50cyBQYXJ0aWFsTGlua2VyPFRFeHByZXNzaW9uPiB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogTGlua2VyT3B0aW9ucykge31cblxuICBsaW5rUGFydGlhbERlY2xhcmF0aW9uKFxuICAgICAgc291cmNlVXJsOiBzdHJpbmcsIGNvZGU6IHN0cmluZywgY29uc3RhbnRQb29sOiBDb25zdGFudFBvb2wsXG4gICAgICBtZXRhT2JqOiBBc3RPYmplY3Q8UjNQYXJ0aWFsRGVjbGFyYXRpb24sIFRFeHByZXNzaW9uPik6IG8uRXhwcmVzc2lvbiB7XG4gICAgY29uc3QgbWV0YSA9IHRvUjNDb21wb25lbnRNZXRhKG1ldGFPYmosIGNvZGUsIHNvdXJjZVVybCwgdGhpcy5vcHRpb25zKTtcbiAgICBjb25zdCBkZWYgPSBjb21waWxlQ29tcG9uZW50RnJvbU1ldGFkYXRhKG1ldGEsIGNvbnN0YW50UG9vbCwgbWFrZUJpbmRpbmdQYXJzZXIoKSk7XG4gICAgcmV0dXJuIGRlZi5leHByZXNzaW9uO1xuICB9XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBkZXJpdmVzIHRoZSBgUjNDb21wb25lbnRNZXRhZGF0YWAgZnJvbSB0aGUgcHJvdmlkZWQgQVNUIG9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvUjNDb21wb25lbnRNZXRhPFRFeHByZXNzaW9uPihcbiAgICBtZXRhT2JqOiBBc3RPYmplY3Q8UjNEZWNsYXJlQ29tcG9uZW50TWV0YWRhdGEsIFRFeHByZXNzaW9uPiwgY29kZTogc3RyaW5nLCBzb3VyY2VVcmw6IHN0cmluZyxcbiAgICBvcHRpb25zOiBMaW5rZXJPcHRpb25zKTogUjNDb21wb25lbnRNZXRhZGF0YSB7XG4gIGNvbnN0IGludGVycG9sYXRpb24gPSBwYXJzZUludGVycG9sYXRpb25Db25maWcobWV0YU9iaik7XG4gIGNvbnN0IHRlbXBsYXRlT2JqID0gbWV0YU9iai5nZXRPYmplY3QoJ3RlbXBsYXRlJyk7XG4gIGNvbnN0IHRlbXBsYXRlU291cmNlID0gdGVtcGxhdGVPYmouZ2V0VmFsdWUoJ3NvdXJjZScpO1xuICBjb25zdCByYW5nZSA9IGdldFRlbXBsYXRlUmFuZ2UodGVtcGxhdGVTb3VyY2UsIGNvZGUpO1xuICBjb25zdCBpc0lubGluZSA9IHRlbXBsYXRlT2JqLmdldEJvb2xlYW4oJ2lzSW5saW5lJyk7XG5cbiAgLy8gV2UgYWx3YXlzIG5vcm1hbGl6ZSBsaW5lIGVuZGluZ3MgaWYgdGhlIHRlbXBsYXRlIGlzIGlubGluZS5cbiAgY29uc3QgaTE4bk5vcm1hbGl6ZUxpbmVFbmRpbmdzSW5JQ1VzID0gaXNJbmxpbmUgfHwgb3B0aW9ucy5pMThuTm9ybWFsaXplTGluZUVuZGluZ3NJbklDVXM7XG5cbiAgY29uc3QgdGVtcGxhdGUgPSBwYXJzZVRlbXBsYXRlKGNvZGUsIHNvdXJjZVVybCwge1xuICAgIGVzY2FwZWRTdHJpbmc6IHRydWUsXG4gICAgaW50ZXJwb2xhdGlvbkNvbmZpZzogaW50ZXJwb2xhdGlvbixcbiAgICByYW5nZSxcbiAgICBlbmFibGVJMThuTGVnYWN5TWVzc2FnZUlkRm9ybWF0OiBvcHRpb25zLmVuYWJsZUkxOG5MZWdhY3lNZXNzYWdlSWRGb3JtYXQsXG4gICAgcHJlc2VydmVXaGl0ZXNwYWNlczpcbiAgICAgICAgbWV0YU9iai5oYXMoJ3ByZXNlcnZlV2hpdGVzcGFjZXMnKSA/IG1ldGFPYmouZ2V0Qm9vbGVhbigncHJlc2VydmVXaGl0ZXNwYWNlcycpIDogZmFsc2UsXG4gICAgaTE4bk5vcm1hbGl6ZUxpbmVFbmRpbmdzSW5JQ1VzLFxuICAgIGlzSW5saW5lLFxuICB9KTtcbiAgaWYgKHRlbXBsYXRlLmVycm9ycyAhPT0gbnVsbCkge1xuICAgIGNvbnN0IGVycm9ycyA9IHRlbXBsYXRlLmVycm9ycy5tYXAoZXJyID0+IGVyci50b1N0cmluZygpKS5qb2luKCdcXG4nKTtcbiAgICB0aHJvdyBuZXcgRmF0YWxMaW5rZXJFcnJvcihcbiAgICAgICAgdGVtcGxhdGVTb3VyY2UuZXhwcmVzc2lvbiwgYEVycm9ycyBmb3VuZCBpbiB0aGUgdGVtcGxhdGU6XFxuJHtlcnJvcnN9YCk7XG4gIH1cblxuICBsZXQgZGVjbGFyYXRpb25MaXN0RW1pdE1vZGUgPSBEZWNsYXJhdGlvbkxpc3RFbWl0TW9kZS5EaXJlY3Q7XG5cbiAgbGV0IGRpcmVjdGl2ZXM6IFIzVXNlZERpcmVjdGl2ZU1ldGFkYXRhW10gPSBbXTtcbiAgaWYgKG1ldGFPYmouaGFzKCdkaXJlY3RpdmVzJykpIHtcbiAgICBkaXJlY3RpdmVzID0gbWV0YU9iai5nZXRBcnJheSgnZGlyZWN0aXZlcycpLm1hcChkaXJlY3RpdmUgPT4ge1xuICAgICAgY29uc3QgZGlyZWN0aXZlRXhwciA9IGRpcmVjdGl2ZS5nZXRPYmplY3QoKTtcbiAgICAgIGNvbnN0IHR5cGUgPSBkaXJlY3RpdmVFeHByLmdldFZhbHVlKCd0eXBlJyk7XG4gICAgICBjb25zdCBzZWxlY3RvciA9IGRpcmVjdGl2ZUV4cHIuZ2V0U3RyaW5nKCdzZWxlY3RvcicpO1xuXG4gICAgICBsZXQgdHlwZUV4cHIgPSB0eXBlLmdldE9wYXF1ZSgpO1xuICAgICAgY29uc3QgZm9yd2FyZFJlZlR5cGUgPSBleHRyYWN0Rm9yd2FyZFJlZih0eXBlKTtcbiAgICAgIGlmIChmb3J3YXJkUmVmVHlwZSAhPT0gbnVsbCkge1xuICAgICAgICB0eXBlRXhwciA9IGZvcndhcmRSZWZUeXBlO1xuICAgICAgICBkZWNsYXJhdGlvbkxpc3RFbWl0TW9kZSA9IERlY2xhcmF0aW9uTGlzdEVtaXRNb2RlLkNsb3N1cmU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IHR5cGVFeHByLFxuICAgICAgICBzZWxlY3Rvcjogc2VsZWN0b3IsXG4gICAgICAgIGlucHV0czogZGlyZWN0aXZlRXhwci5oYXMoJ2lucHV0cycpID9cbiAgICAgICAgICAgIGRpcmVjdGl2ZUV4cHIuZ2V0QXJyYXkoJ2lucHV0cycpLm1hcChpbnB1dCA9PiBpbnB1dC5nZXRTdHJpbmcoKSkgOlxuICAgICAgICAgICAgW10sXG4gICAgICAgIG91dHB1dHM6IGRpcmVjdGl2ZUV4cHIuaGFzKCdvdXRwdXRzJykgP1xuICAgICAgICAgICAgZGlyZWN0aXZlRXhwci5nZXRBcnJheSgnb3V0cHV0cycpLm1hcChpbnB1dCA9PiBpbnB1dC5nZXRTdHJpbmcoKSkgOlxuICAgICAgICAgICAgW10sXG4gICAgICAgIGV4cG9ydEFzOiBkaXJlY3RpdmVFeHByLmhhcygnZXhwb3J0QXMnKSA/XG4gICAgICAgICAgICBkaXJlY3RpdmVFeHByLmdldEFycmF5KCdleHBvcnRBcycpLm1hcChleHBvcnRBcyA9PiBleHBvcnRBcy5nZXRTdHJpbmcoKSkgOlxuICAgICAgICAgICAgbnVsbCxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBsZXQgcGlwZXMgPSBuZXcgTWFwPHN0cmluZywgby5FeHByZXNzaW9uPigpO1xuICBpZiAobWV0YU9iai5oYXMoJ3BpcGVzJykpIHtcbiAgICBwaXBlcyA9IG1ldGFPYmouZ2V0T2JqZWN0KCdwaXBlcycpLnRvTWFwKHBpcGUgPT4ge1xuICAgICAgY29uc3QgZm9yd2FyZFJlZlR5cGUgPSBleHRyYWN0Rm9yd2FyZFJlZihwaXBlKTtcbiAgICAgIGlmIChmb3J3YXJkUmVmVHlwZSAhPT0gbnVsbCkge1xuICAgICAgICBkZWNsYXJhdGlvbkxpc3RFbWl0TW9kZSA9IERlY2xhcmF0aW9uTGlzdEVtaXRNb2RlLkNsb3N1cmU7XG4gICAgICAgIHJldHVybiBmb3J3YXJkUmVmVHlwZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBwaXBlLmdldE9wYXF1ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi50b1IzRGlyZWN0aXZlTWV0YShtZXRhT2JqLCBjb2RlLCBzb3VyY2VVcmwpLFxuICAgIHZpZXdQcm92aWRlcnM6IG1ldGFPYmouaGFzKCd2aWV3UHJvdmlkZXJzJykgPyBtZXRhT2JqLmdldE9wYXF1ZSgndmlld1Byb3ZpZGVycycpIDogbnVsbCxcbiAgICB0ZW1wbGF0ZToge1xuICAgICAgbm9kZXM6IHRlbXBsYXRlLm5vZGVzLFxuICAgICAgbmdDb250ZW50U2VsZWN0b3JzOiB0ZW1wbGF0ZS5uZ0NvbnRlbnRTZWxlY3RvcnMsXG4gICAgfSxcbiAgICBkZWNsYXJhdGlvbkxpc3RFbWl0TW9kZSxcbiAgICBzdHlsZXM6IG1ldGFPYmouaGFzKCdzdHlsZXMnKSA/IG1ldGFPYmouZ2V0QXJyYXkoJ3N0eWxlcycpLm1hcChlbnRyeSA9PiBlbnRyeS5nZXRTdHJpbmcoKSkgOiBbXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBtZXRhT2JqLmhhcygnZW5jYXBzdWxhdGlvbicpID9cbiAgICAgICAgcGFyc2VFbmNhcHN1bGF0aW9uKG1ldGFPYmouZ2V0VmFsdWUoJ2VuY2Fwc3VsYXRpb24nKSkgOlxuICAgICAgICBWaWV3RW5jYXBzdWxhdGlvbi5FbXVsYXRlZCxcbiAgICBpbnRlcnBvbGF0aW9uLFxuICAgIGNoYW5nZURldGVjdGlvbjogbWV0YU9iai5oYXMoJ2NoYW5nZURldGVjdGlvbicpID9cbiAgICAgICAgcGFyc2VDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneShtZXRhT2JqLmdldFZhbHVlKCdjaGFuZ2VEZXRlY3Rpb24nKSkgOlxuICAgICAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5EZWZhdWx0LFxuICAgIGFuaW1hdGlvbnM6IG1ldGFPYmouaGFzKCdhbmltYXRpb25zJykgPyBtZXRhT2JqLmdldE9wYXF1ZSgnYW5pbWF0aW9ucycpIDogbnVsbCxcbiAgICByZWxhdGl2ZUNvbnRleHRGaWxlUGF0aDogc291cmNlVXJsLFxuICAgIGkxOG5Vc2VFeHRlcm5hbElkczogb3B0aW9ucy5pMThuVXNlRXh0ZXJuYWxJZHMsXG4gICAgcGlwZXMsXG4gICAgZGlyZWN0aXZlcyxcbiAgfTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0IGFuIGBJbnRlcnBvbGF0aW9uQ29uZmlnYCBmcm9tIHRoZSBjb21wb25lbnQgZGVjbGFyYXRpb24uXG4gKi9cbmZ1bmN0aW9uIHBhcnNlSW50ZXJwb2xhdGlvbkNvbmZpZzxURXhwcmVzc2lvbj4oXG4gICAgbWV0YU9iajogQXN0T2JqZWN0PFIzRGVjbGFyZUNvbXBvbmVudE1ldGFkYXRhLCBURXhwcmVzc2lvbj4pOiBJbnRlcnBvbGF0aW9uQ29uZmlnIHtcbiAgaWYgKCFtZXRhT2JqLmhhcygnaW50ZXJwb2xhdGlvbicpKSB7XG4gICAgcmV0dXJuIERFRkFVTFRfSU5URVJQT0xBVElPTl9DT05GSUc7XG4gIH1cblxuICBjb25zdCBpbnRlcnBvbGF0aW9uRXhwciA9IG1ldGFPYmouZ2V0VmFsdWUoJ2ludGVycG9sYXRpb24nKTtcbiAgY29uc3QgdmFsdWVzID0gaW50ZXJwb2xhdGlvbkV4cHIuZ2V0QXJyYXkoKS5tYXAoZW50cnkgPT4gZW50cnkuZ2V0U3RyaW5nKCkpO1xuICBpZiAodmFsdWVzLmxlbmd0aCAhPT0gMikge1xuICAgIHRocm93IG5ldyBGYXRhbExpbmtlckVycm9yKFxuICAgICAgICBpbnRlcnBvbGF0aW9uRXhwci5leHByZXNzaW9uLFxuICAgICAgICAnVW5zdXBwb3J0ZWQgaW50ZXJwb2xhdGlvbiBjb25maWcsIGV4cGVjdGVkIGFuIGFycmF5IGNvbnRhaW5pbmcgZXhhY3RseSB0d28gc3RyaW5ncycpO1xuICB9XG4gIHJldHVybiBJbnRlcnBvbGF0aW9uQ29uZmlnLmZyb21BcnJheSh2YWx1ZXMgYXMgW3N0cmluZywgc3RyaW5nXSk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB0aGUgYFZpZXdFbmNhcHN1bGF0aW9uYCBtb2RlIGZyb20gdGhlIEFTVCB2YWx1ZSdzIHN5bWJvbCBuYW1lLlxuICovXG5mdW5jdGlvbiBwYXJzZUVuY2Fwc3VsYXRpb248VEV4cHJlc3Npb24+KGVuY2Fwc3VsYXRpb246IEFzdFZhbHVlPFZpZXdFbmNhcHN1bGF0aW9uLCBURXhwcmVzc2lvbj4pOlxuICAgIFZpZXdFbmNhcHN1bGF0aW9uIHtcbiAgY29uc3Qgc3ltYm9sTmFtZSA9IGVuY2Fwc3VsYXRpb24uZ2V0U3ltYm9sTmFtZSgpO1xuICBpZiAoc3ltYm9sTmFtZSA9PT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBGYXRhbExpbmtlckVycm9yKFxuICAgICAgICBlbmNhcHN1bGF0aW9uLmV4cHJlc3Npb24sICdFeHBlY3RlZCBlbmNhcHN1bGF0aW9uIHRvIGhhdmUgYSBzeW1ib2wgbmFtZScpO1xuICB9XG4gIGNvbnN0IGVudW1WYWx1ZSA9IFZpZXdFbmNhcHN1bGF0aW9uW3N5bWJvbE5hbWUgYXMga2V5b2YgdHlwZW9mIFZpZXdFbmNhcHN1bGF0aW9uXTtcbiAgaWYgKGVudW1WYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEZhdGFsTGlua2VyRXJyb3IoZW5jYXBzdWxhdGlvbi5leHByZXNzaW9uLCAnVW5zdXBwb3J0ZWQgZW5jYXBzdWxhdGlvbicpO1xuICB9XG4gIHJldHVybiBlbnVtVmFsdWU7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB0aGUgYENoYW5nZURldGVjdGlvblN0cmF0ZWd5YCBmcm9tIHRoZSBBU1QgdmFsdWUncyBzeW1ib2wgbmFtZS5cbiAqL1xuZnVuY3Rpb24gcGFyc2VDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneTxURXhwcmVzc2lvbj4oXG4gICAgY2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3k6IEFzdFZhbHVlPENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBURXhwcmVzc2lvbj4pOlxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5IHtcbiAgY29uc3Qgc3ltYm9sTmFtZSA9IGNoYW5nZURldGVjdGlvblN0cmF0ZWd5LmdldFN5bWJvbE5hbWUoKTtcbiAgaWYgKHN5bWJvbE5hbWUgPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRmF0YWxMaW5rZXJFcnJvcihcbiAgICAgICAgY2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuZXhwcmVzc2lvbixcbiAgICAgICAgJ0V4cGVjdGVkIGNoYW5nZSBkZXRlY3Rpb24gc3RyYXRlZ3kgdG8gaGF2ZSBhIHN5bWJvbCBuYW1lJyk7XG4gIH1cbiAgY29uc3QgZW51bVZhbHVlID0gQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3lbc3ltYm9sTmFtZSBhcyBrZXlvZiB0eXBlb2YgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ldO1xuICBpZiAoZW51bVZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRmF0YWxMaW5rZXJFcnJvcihcbiAgICAgICAgY2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuZXhwcmVzc2lvbiwgJ1Vuc3VwcG9ydGVkIGNoYW5nZSBkZXRlY3Rpb24gc3RyYXRlZ3knKTtcbiAgfVxuICByZXR1cm4gZW51bVZhbHVlO1xufVxuXG4vKipcbiAqIFVwZGF0ZSB0aGUgcmFuZ2UgdG8gcmVtb3ZlIHRoZSBzdGFydCBhbmQgZW5kIGNoYXJzLCB3aGljaCBzaG91bGQgYmUgcXVvdGVzIGFyb3VuZCB0aGUgdGVtcGxhdGUuXG4gKi9cbmZ1bmN0aW9uIGdldFRlbXBsYXRlUmFuZ2U8VEV4cHJlc3Npb24+KFxuICAgIHRlbXBsYXRlTm9kZTogQXN0VmFsdWU8dW5rbm93biwgVEV4cHJlc3Npb24+LCBjb2RlOiBzdHJpbmcpOiBSYW5nZSB7XG4gIGNvbnN0IHtzdGFydFBvcywgZW5kUG9zLCBzdGFydExpbmUsIHN0YXJ0Q29sfSA9IHRlbXBsYXRlTm9kZS5nZXRSYW5nZSgpO1xuXG4gIGlmICghL1tcIidgXS8udGVzdChjb2RlW3N0YXJ0UG9zXSkgfHwgY29kZVtzdGFydFBvc10gIT09IGNvZGVbZW5kUG9zIC0gMV0pIHtcbiAgICB0aHJvdyBuZXcgRmF0YWxMaW5rZXJFcnJvcihcbiAgICAgICAgdGVtcGxhdGVOb2RlLmV4cHJlc3Npb24sXG4gICAgICAgIGBFeHBlY3RlZCB0aGUgdGVtcGxhdGUgc3RyaW5nIHRvIGJlIHdyYXBwZWQgaW4gcXVvdGVzIGJ1dCBnb3Q6ICR7XG4gICAgICAgICAgICBjb2RlLnN1YnN0cmluZyhzdGFydFBvcywgZW5kUG9zKX1gKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHN0YXJ0UG9zOiBzdGFydFBvcyArIDEsXG4gICAgZW5kUG9zOiBlbmRQb3MgLSAxLFxuICAgIHN0YXJ0TGluZSxcbiAgICBzdGFydENvbDogc3RhcnRDb2wgKyAxLFxuICB9O1xufVxuXG4vKipcbiAqIEV4dHJhY3QgdGhlIHR5cGUgcmVmZXJlbmNlIGV4cHJlc3Npb24gZnJvbSBhIGBmb3J3YXJkUmVmYCBmdW5jdGlvbiBjYWxsLiBGb3IgZXhhbXBsZSwgdGhlXG4gKiBleHByZXNzaW9uIGBmb3J3YXJkUmVmKGZ1bmN0aW9uKCkgeyByZXR1cm4gRm9vRGlyOyB9KWAgcmV0dXJucyBgRm9vRGlyYC4gTm90ZSB0aGF0IHRoaXNcbiAqIGV4cHJlc3Npb24gaXMgcmVxdWlyZWQgdG8gYmUgd3JhcHBlZCBpbiBhIGNsb3N1cmUsIGFzIG90aGVyd2lzZSB0aGUgZm9yd2FyZCByZWZlcmVuY2Ugd291bGQgYmVcbiAqIHJlc29sdmVkIGJlZm9yZSBpbml0aWFsaXphdGlvbi5cbiAqL1xuZnVuY3Rpb24gZXh0cmFjdEZvcndhcmRSZWY8VEV4cHJlc3Npb24+KGV4cHI6IEFzdFZhbHVlPHVua25vd24sIFRFeHByZXNzaW9uPik6XG4gICAgby5XcmFwcGVkTm9kZUV4cHI8VEV4cHJlc3Npb24+fG51bGwge1xuICBpZiAoIWV4cHIuaXNDYWxsRXhwcmVzc2lvbigpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBjYWxsZWUgPSBleHByLmdldENhbGxlZSgpO1xuICBpZiAoY2FsbGVlLmdldFN5bWJvbE5hbWUoKSAhPT0gJ2ZvcndhcmRSZWYnKSB7XG4gICAgdGhyb3cgbmV3IEZhdGFsTGlua2VyRXJyb3IoXG4gICAgICAgIGNhbGxlZS5leHByZXNzaW9uLCAnVW5zdXBwb3J0ZWQgZGlyZWN0aXZlIHR5cGUsIGV4cGVjdGVkIGZvcndhcmRSZWYgb3IgYSB0eXBlIHJlZmVyZW5jZScpO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IGV4cHIuZ2V0QXJndW1lbnRzKCk7XG4gIGlmIChhcmdzLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBGYXRhbExpbmtlckVycm9yKGV4cHIsICdVbnN1cHBvcnRlZCBmb3J3YXJkUmVmIGNhbGwsIGV4cGVjdGVkIGEgc2luZ2xlIGFyZ3VtZW50Jyk7XG4gIH1cblxuICBjb25zdCB3cmFwcGVyRm4gPSBhcmdzWzBdIGFzIEFzdFZhbHVlPEZ1bmN0aW9uLCBURXhwcmVzc2lvbj47XG4gIGlmICghd3JhcHBlckZuLmlzRnVuY3Rpb24oKSkge1xuICAgIHRocm93IG5ldyBGYXRhbExpbmtlckVycm9yKFxuICAgICAgICB3cmFwcGVyRm4sICdVbnN1cHBvcnRlZCBmb3J3YXJkUmVmIGNhbGwsIGV4cGVjdGVkIGEgZnVuY3Rpb24gYXJndW1lbnQnKTtcbiAgfVxuXG4gIHJldHVybiB3cmFwcGVyRm4uZ2V0RnVuY3Rpb25SZXR1cm5WYWx1ZSgpLmdldE9wYXF1ZSgpO1xufVxuIl19
239
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFydGlhbF9jb21wb25lbnRfbGlua2VyXzEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvbGlua2VyL3NyYy9maWxlX2xpbmtlci9wYXJ0aWFsX2xpbmtlcnMvcGFydGlhbF9jb21wb25lbnRfbGlua2VyXzEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztJQUFBOzs7Ozs7T0FNRztJQUNILDhDQUEyUjtJQUMzUixtREFBc0Y7SUFNdEYsMEZBQTBEO0lBSTFELHNJQUErRDtJQUcvRDs7T0FFRztJQUNIO1FBUUUsd0NBQ3FCLFdBQXVELEVBQ3ZELGFBQThCLEVBQVUsU0FBeUIsRUFDMUUsSUFBWTtZQUZILGdCQUFXLEdBQVgsV0FBVyxDQUE0QztZQUN2RCxrQkFBYSxHQUFiLGFBQWEsQ0FBaUI7WUFBVSxjQUFTLEdBQVQsU0FBUyxDQUFnQjtZQUMxRSxTQUFJLEdBQUosSUFBSSxDQUFRO1lBVFAsbUNBQThCLEdBQzNDLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLDhCQUE4QixDQUFDO1lBQzNDLG9DQUErQixHQUM1QyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQywrQkFBK0IsQ0FBQztZQUM1Qyx1QkFBa0IsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQztRQUt2RCxDQUFDO1FBRTVCLCtEQUFzQixHQUF0QixVQUNJLFlBQTBCLEVBQzFCLE9BQXFEO1lBQ3ZELElBQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM3QyxJQUFNLEdBQUcsR0FBRyx1Q0FBNEIsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLDRCQUFpQixFQUFFLENBQUMsQ0FBQztZQUNsRixPQUFPLEdBQUcsQ0FBQyxVQUFVLENBQUM7UUFDeEIsQ0FBQztRQUVEOztXQUVHO1FB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QUUsRUFBRTtZQUMzQixNQUFNLElBQUkscUNBQWdCLENBQ3RCLFNBQVMsRUFBRSwyREFBMkQsQ0FBQyxDQUFDO1NBQzdFO1FBRUQsT0FBTyxTQUFTLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUN4RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5pbXBvcnQge2NvbXBpbGVDb21wb25lbnRGcm9tTWV0YWRhdGEsIENvbnN0YW50UG9vbCwgRGVjbGFyYXRpb25MaXN0RW1pdE1vZGUsIERFRkFVTFRfSU5URVJQT0xBVElPTl9DT05GSUcsIEludGVycG9sYXRpb25Db25maWcsIG1ha2VCaW5kaW5nUGFyc2VyLCBwYXJzZVRlbXBsYXRlLCBSM0NvbXBvbmVudE1ldGFkYXRhLCBSM0RlY2xhcmVDb21wb25lbnRNZXRhZGF0YSwgUjNQYXJ0aWFsRGVjbGFyYXRpb24sIFIzVXNlZERpcmVjdGl2ZU1ldGFkYXRhfSBmcm9tICdAYW5ndWxhci9jb21waWxlcic7XG5pbXBvcnQge0NoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBWaWV3RW5jYXBzdWxhdGlvbn0gZnJvbSAnQGFuZ3VsYXIvY29tcGlsZXIvc3JjL2NvcmUnO1xuaW1wb3J0ICogYXMgbyBmcm9tICdAYW5ndWxhci9jb21waWxlci9zcmMvb3V0cHV0L291dHB1dF9hc3QnO1xuXG5pbXBvcnQge0Fic29sdXRlRnNQYXRofSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvbmd0c2MvZmlsZV9zeXN0ZW0nO1xuaW1wb3J0IHtSYW5nZX0gZnJvbSAnLi4vLi4vYXN0L2FzdF9ob3N0JztcbmltcG9ydCB7QXN0T2JqZWN0LCBBc3RWYWx1ZX0gZnJvbSAnLi4vLi4vYXN0L2FzdF92YWx1ZSc7XG5pbXBvcnQge0ZhdGFsTGlua2VyRXJyb3J9IGZyb20gJy4uLy4uL2ZhdGFsX2xpbmtlcl9lcnJvcic7XG5pbXBvcnQge0dldFNvdXJjZUZpbGVGbn0gZnJvbSAnLi4vZ2V0X3NvdXJjZV9maWxlJztcbmltcG9ydCB7TGlua2VyRW52aXJvbm1lbnR9IGZyb20gJy4uL2xpbmtlcl9lbnZpcm9ubWVudCc7XG5cbmltcG9ydCB7dG9SM0RpcmVjdGl2ZU1ldGF9IGZyb20gJy4vcGFydGlhbF9kaXJlY3RpdmVfbGlua2VyXzEnO1xuaW1wb3J0IHtQYXJ0aWFsTGlua2VyfSBmcm9tICcuL3BhcnRpYWxfbGlua2VyJztcblxuLyoqXG4gKiBBIGBQYXJ0aWFsTGlua2VyYCB0aGF0IGlzIGRlc2lnbmVkIHRvIHByb2Nlc3MgYMm1ybVuZ0RlY2xhcmVDb21wb25lbnQoKWAgY2FsbCBleHByZXNzaW9ucy5cbiAqL1xuZXhwb3J0IGNsYXNzIFBhcnRpYWxDb21wb25lbnRMaW5rZXJWZXJzaW9uMTxUU3RhdGVtZW50LCBURXhwcmVzc2lvbj4gaW1wbGVtZW50c1xuICAgIFBhcnRpYWxMaW5rZXI8VEV4cHJlc3Npb24+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBpMThuTm9ybWFsaXplTGluZUVuZGluZ3NJbklDVXMgPVxuICAgICAgdGhpcy5lbnZpcm9ubWVudC5vcHRpb25zLmkxOG5Ob3JtYWxpemVMaW5lRW5kaW5nc0luSUNVcztcbiAgcHJpdmF0ZSByZWFkb25seSBlbmFibGVJMThuTGVnYWN5TWVzc2FnZUlkRm9ybWF0ID1cbiAgICAgIHRoaXMuZW52aXJvbm1lbnQub3B0aW9ucy5lbmFibGVJMThuTGVnYWN5TWVzc2FnZUlkRm9ybWF0O1xuICBwcml2YXRlIHJlYWRvbmx5IGkxOG5Vc2VFeHRlcm5hbElkcyA9IHRoaXMuZW52aXJvbm1lbnQub3B0aW9ucy5pMThuVXNlRXh0ZXJuYWxJZHM7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgICBwcml2YXRlIHJlYWRvbmx5IGVudmlyb25tZW50OiBMaW5rZXJFbnZpcm9ubWVudDxUU3RhdGVtZW50LCBURXhwcmVzc2lvbj4sXG4gICAgICBwcml2YXRlIHJlYWRvbmx5IGdldFNvdXJjZUZpbGU6IEdldFNvdXJjZUZpbGVGbiwgcHJpdmF0ZSBzb3VyY2VVcmw6IEFic29sdXRlRnNQYXRoLFxuICAgICAgcHJpdmF0ZSBjb2RlOiBzdHJpbmcpIHt9XG5cbiAgbGlua1BhcnRpYWxEZWNsYXJhdGlvbihcbiAgICAgIGNvbnN0YW50UG9vbDogQ29uc3RhbnRQb29sLFxuICAgICAgbWV0YU9iajogQXN0T2JqZWN0PFIzUGFydGlhbERlY2xhcmF0aW9uLCBURXhwcmVzc2lvbj4pOiBvLkV4cHJlc3Npb24ge1xuICAgIGNvbnN0IG1ldGEgPSB0aGlzLnRvUjNDb21wb25lbnRNZXRhKG1ldGFPYmopO1xuICAgIGNvbnN0IGRlZiA9IGNvbXBpbGVDb21wb25lbnRGcm9tTWV0YWRhdGEobWV0YSwgY29uc3RhbnRQb29sLCBtYWtlQmluZGluZ1BhcnNlcigpKTtcbiAgICByZXR1cm4gZGVmLmV4cHJlc3Npb247XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiBkZXJpdmVzIHRoZSBgUjNDb21wb25lbnRNZXRhZGF0YWAgZnJvbSB0aGUgcHJvdmlkZWQgQVNUIG9iamVjdC5cbiAgICovXG4gIHByaXZhdGUgdG9SM0NvbXBvbmVudE1ldGEobWV0YU9iajogQXN0T2JqZWN0PFIzRGVjbGFyZUNvbXBvbmVudE1ldGFkYXRhLCBURXhwcmVzc2lvbj4pOlxuICAgICAgUjNDb21wb25lbnRNZXRhZGF0YSB7XG4gICAgY29uc3QgaW50ZXJwb2xhdGlvbiA9IHBhcnNlSW50ZXJwb2xhdGlvbkNvbmZpZyhtZXRhT2JqKTtcbiAgICBjb25zdCB0ZW1wbGF0ZVNvdXJjZSA9IG1ldGFPYmouZ2V0VmFsdWUoJ3RlbXBsYXRlJyk7XG4gICAgY29uc3QgaXNJbmxpbmUgPSBtZXRhT2JqLmhhcygnaXNJbmxpbmUnKSA/IG1ldGFPYmouZ2V0Qm9vbGVhbignaXNJbmxpbmUnKSA6IGZhbHNlO1xuICAgIGNvbnN0IHRlbXBsYXRlSW5mbyA9IHRoaXMuZ2V0VGVtcGxhdGVJbmZvKHRlbXBsYXRlU291cmNlLCBpc0lubGluZSk7XG5cbiAgICAvLyBXZSBhbHdheXMgbm9ybWFsaXplIGxpbmUgZW5kaW5ncyBpZiB0aGUgdGVtcGxhdGUgaXMgaW5saW5lLlxuICAgIGNvbnN0IGkxOG5Ob3JtYWxpemVMaW5lRW5kaW5nc0luSUNVcyA9IGlzSW5saW5lIHx8IHRoaXMuaTE4bk5vcm1hbGl6ZUxpbmVFbmRpbmdzSW5JQ1VzO1xuXG4gICAgY29uc3QgdGVtcGxhdGUgPSBwYXJzZVRlbXBsYXRlKHRlbXBsYXRlSW5mby5jb2RlLCB0ZW1wbGF0ZUluZm8uc291cmNlVXJsLCB7XG4gICAgICBlc2NhcGVkU3RyaW5nOiB0ZW1wbGF0ZUluZm8uaXNFc2NhcGVkLFxuICAgICAgaW50ZXJwb2xhdGlvbkNvbmZpZzogaW50ZXJwb2xhdGlvbixcbiAgICAgIHJhbmdlOiB0ZW1wbGF0ZUluZm8ucmFuZ2UsXG4gICAgICBlbmFibGVJMThuTGVnYWN5TWVzc2FnZUlkRm9ybWF0OiB0aGlzLmVuYWJsZUkxOG5MZWdhY3lNZXNzYWdlSWRGb3JtYXQsXG4gICAgICBwcmVzZXJ2ZVdoaXRlc3BhY2VzOlxuICAgICAgICAgIG1ldGFPYmouaGFzKCdwcmVzZXJ2ZVdoaXRlc3BhY2VzJykgPyBtZXRhT2JqLmdldEJvb2xlYW4oJ3ByZXNlcnZlV2hpdGVzcGFjZXMnKSA6IGZhbHNlLFxuICAgICAgaTE4bk5vcm1hbGl6ZUxpbmVFbmRpbmdzSW5JQ1VzLFxuICAgICAgaXNJbmxpbmUsXG4gICAgfSk7XG4gICAgaWYgKHRlbXBsYXRlLmVycm9ycyAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgZXJyb3JzID0gdGVtcGxhdGUuZXJyb3JzLm1hcChlcnIgPT4gZXJyLnRvU3RyaW5nKCkpLmpvaW4oJ1xcbicpO1xuICAgICAgdGhyb3cgbmV3IEZhdGFsTGlua2VyRXJyb3IoXG4gICAgICAgICAgdGVtcGxhdGVTb3VyY2UuZXhwcmVzc2lvbiwgYEVycm9ycyBmb3VuZCBpbiB0aGUgdGVtcGxhdGU6XFxuJHtlcnJvcnN9YCk7XG4gICAgfVxuXG4gICAgbGV0IGRlY2xhcmF0aW9uTGlzdEVtaXRNb2RlID0gRGVjbGFyYXRpb25MaXN0RW1pdE1vZGUuRGlyZWN0O1xuXG4gICAgbGV0IGRpcmVjdGl2ZXM6IFIzVXNlZERpcmVjdGl2ZU1ldGFkYXRhW10gPSBbXTtcbiAgICBpZiAobWV0YU9iai5oYXMoJ2RpcmVjdGl2ZXMnKSkge1xuICAgICAgZGlyZWN0aXZlcyA9IG1ldGFPYmouZ2V0QXJyYXkoJ2RpcmVjdGl2ZXMnKS5tYXAoZGlyZWN0aXZlID0+IHtcbiAgICAgICAgY29uc3QgZGlyZWN0aXZlRXhwciA9IGRpcmVjdGl2ZS5nZXRPYmplY3QoKTtcbiAgICAgICAgY29uc3QgdHlwZSA9IGRpcmVjdGl2ZUV4cHIuZ2V0VmFsdWUoJ3R5cGUnKTtcbiAgICAgICAgY29uc3Qgc2VsZWN0b3IgPSBkaXJlY3RpdmVFeHByLmdldFN0cmluZygnc2VsZWN0b3InKTtcblxuICAgICAgICBsZXQgdHlwZUV4cHIgPSB0eXBlLmdldE9wYXF1ZSgpO1xuICAgICAgICBjb25zdCBmb3J3YXJkUmVmVHlwZSA9IGV4dHJhY3RGb3J3YXJkUmVmKHR5cGUpO1xuICAgICAgICBpZiAoZm9yd2FyZFJlZlR5cGUgIT09IG51bGwpIHtcbiAgICAgICAgICB0eXBlRXhwciA9IGZvcndhcmRSZWZUeXBlO1xuICAgICAgICAgIGRlY2xhcmF0aW9uTGlzdEVtaXRNb2RlID0gRGVjbGFyYXRpb25MaXN0RW1pdE1vZGUuQ2xvc3VyZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdHlwZTogdHlwZUV4cHIsXG4gICAgICAgICAgc2VsZWN0b3I6IHNlbGVjdG9yLFxuICAgICAgICAgIGlucHV0czogZGlyZWN0aXZlRXhwci5oYXMoJ2lucHV0cycpID9cbiAgICAgICAgICAgICAgZGlyZWN0aXZlRXhwci5nZXRBcnJheSgnaW5wdXRzJykubWFwKGlucHV0ID0+IGlucHV0LmdldFN0cmluZygpKSA6XG4gICAgICAgICAgICAgIFtdLFxuICAgICAgICAgIG91dHB1dHM6IGRpcmVjdGl2ZUV4cHIuaGFzKCdvdXRwdXRzJykgP1xuICAgICAgICAgICAgICBkaXJlY3RpdmVFeHByLmdldEFycmF5KCdvdXRwdXRzJykubWFwKGlucHV0ID0+IGlucHV0LmdldFN0cmluZygpKSA6XG4gICAgICAgICAgICAgIFtdLFxuICAgICAgICAgIGV4cG9ydEFzOiBkaXJlY3RpdmVFeHByLmhhcygnZXhwb3J0QXMnKSA/XG4gICAgICAgICAgICAgIGRpcmVjdGl2ZUV4cHIuZ2V0QXJyYXkoJ2V4cG9ydEFzJykubWFwKGV4cG9ydEFzID0+IGV4cG9ydEFzLmdldFN0cmluZygpKSA6XG4gICAgICAgICAgICAgIG51bGwsXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBsZXQgcGlwZXMgPSBuZXcgTWFwPHN0cmluZywgby5FeHByZXNzaW9uPigpO1xuICAgIGlmIChtZXRhT2JqLmhhcygncGlwZXMnKSkge1xuICAgICAgcGlwZXMgPSBtZXRhT2JqLmdldE9iamVjdCgncGlwZXMnKS50b01hcChwaXBlID0+IHtcbiAgICAgICAgY29uc3QgZm9yd2FyZFJlZlR5cGUgPSBleHRyYWN0Rm9yd2FyZFJlZihwaXBlKTtcbiAgICAgICAgaWYgKGZvcndhcmRSZWZUeXBlICE9PSBudWxsKSB7XG4gICAgICAgICAgZGVjbGFyYXRpb25MaXN0RW1pdE1vZGUgPSBEZWNsYXJhdGlvbkxpc3RFbWl0TW9kZS5DbG9zdXJlO1xuICAgICAgICAgIHJldHVybiBmb3J3YXJkUmVmVHlwZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gcGlwZS5nZXRPcGFxdWUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRvUjNEaXJlY3RpdmVNZXRhKG1ldGFPYmosIHRoaXMuY29kZSwgdGhpcy5zb3VyY2VVcmwpLFxuICAgICAgdmlld1Byb3ZpZGVyczogbWV0YU9iai5oYXMoJ3ZpZXdQcm92aWRlcnMnKSA/IG1ldGFPYmouZ2V0T3BhcXVlKCd2aWV3UHJvdmlkZXJzJykgOiBudWxsLFxuICAgICAgdGVtcGxhdGU6IHtcbiAgICAgICAgbm9kZXM6IHRlbXBsYXRlLm5vZGVzLFxuICAgICAgICBuZ0NvbnRlbnRTZWxlY3RvcnM6IHRlbXBsYXRlLm5nQ29udGVudFNlbGVjdG9ycyxcbiAgICAgIH0sXG4gICAgICBkZWNsYXJhdGlvbkxpc3RFbWl0TW9kZSxcbiAgICAgIHN0eWxlczogbWV0YU9iai5oYXMoJ3N0eWxlcycpID8gbWV0YU9iai5nZXRBcnJheSgnc3R5bGVzJykubWFwKGVudHJ5ID0+IGVudHJ5LmdldFN0cmluZygpKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdLFxuICAgICAgZW5jYXBzdWxhdGlvbjogbWV0YU9iai5oYXMoJ2VuY2Fwc3VsYXRpb24nKSA/XG4gICAgICAgICAgcGFyc2VFbmNhcHN1bGF0aW9uKG1ldGFPYmouZ2V0VmFsdWUoJ2VuY2Fwc3VsYXRpb24nKSkgOlxuICAgICAgICAgIFZpZXdFbmNhcHN1bGF0aW9uLkVtdWxhdGVkLFxuICAgICAgaW50ZXJwb2xhdGlvbixcbiAgICAgIGNoYW5nZURldGVjdGlvbjogbWV0YU9iai5oYXMoJ2NoYW5nZURldGVjdGlvbicpID9cbiAgICAgICAgICBwYXJzZUNoYW5nZURldGVjdGlvblN0cmF0ZWd5KG1ldGFPYmouZ2V0VmFsdWUoJ2NoYW5nZURldGVjdGlvbicpKSA6XG4gICAgICAgICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuRGVmYXVsdCxcbiAgICAgIGFuaW1hdGlvbnM6IG1ldGFPYmouaGFzKCdhbmltYXRpb25zJykgPyBtZXRhT2JqLmdldE9wYXF1ZSgnYW5pbWF0aW9ucycpIDogbnVsbCxcbiAgICAgIHJlbGF0aXZlQ29udGV4dEZpbGVQYXRoOiB0aGlzLnNvdXJjZVVybCxcbiAgICAgIGkxOG5Vc2VFeHRlcm5hbElkczogdGhpcy5pMThuVXNlRXh0ZXJuYWxJZHMsXG4gICAgICBwaXBlcyxcbiAgICAgIGRpcmVjdGl2ZXMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIHJhbmdlIHRvIHJlbW92ZSB0aGUgc3RhcnQgYW5kIGVuZCBjaGFycywgd2hpY2ggc2hvdWxkIGJlIHF1b3RlcyBhcm91bmQgdGhlIHRlbXBsYXRlLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRUZW1wbGF0ZUluZm8odGVtcGxhdGVOb2RlOiBBc3RWYWx1ZTx1bmtub3duLCBURXhwcmVzc2lvbj4sIGlzSW5saW5lOiBib29sZWFuKTpcbiAgICAgIFRlbXBsYXRlSW5mbyB7XG4gICAgY29uc3QgcmFuZ2UgPSB0ZW1wbGF0ZU5vZGUuZ2V0UmFuZ2UoKTtcblxuICAgIGlmICghaXNJbmxpbmUpIHtcbiAgICAgIC8vIElmIG5vdCBtYXJrZWQgYXMgaW5saW5lLCB0aGVuIHdlIHRyeSB0byBnZXQgdGhlIHRlbXBsYXRlIGluZm8gZnJvbSB0aGUgb3JpZ2luYWwgZXh0ZXJuYWxcbiAgICAgIC8vIHRlbXBsYXRlIGZpbGUsIHZpYSBzb3VyY2UtbWFwcGluZy5cbiAgICAgIGNvbnN0IGV4dGVybmFsVGVtcGxhdGUgPSB0aGlzLnRyeUV4dGVybmFsVGVtcGxhdGUocmFuZ2UpO1xuICAgICAgaWYgKGV4dGVybmFsVGVtcGxhdGUgIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGV4dGVybmFsVGVtcGxhdGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRWl0aGVyIHRoZSB0ZW1wbGF0ZSBpcyBtYXJrZWQgaW5saW5lIG9yIHdlIGZhaWxlZCB0byBmaW5kIHRoZSBvcmlnaW5hbCBleHRlcm5hbCB0ZW1wbGF0ZS5cbiAgICAvLyBTbyBqdXN0IHVzZSB0aGUgbGl0ZXJhbCBzdHJpbmcgZnJvbSB0aGUgcGFydGlhbGx5IGNvbXBpbGVkIGNvbXBvbmVudCBkZWNsYXJhdGlvbi5cbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZUZyb21QYXJ0aWFsQ29kZSh0ZW1wbGF0ZU5vZGUsIHJhbmdlKTtcbiAgfVxuXG4gIHByaXZhdGUgdHJ5RXh0ZXJuYWxUZW1wbGF0ZShyYW5nZTogUmFuZ2UpOiBUZW1wbGF0ZUluZm98bnVsbCB7XG4gICAgY29uc3Qgc291cmNlRmlsZSA9IHRoaXMuZ2V0U291cmNlRmlsZSgpO1xuICAgIGlmIChzb3VyY2VGaWxlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBwb3MgPSBzb3VyY2VGaWxlLmdldE9yaWdpbmFsTG9jYXRpb24ocmFuZ2Uuc3RhcnRMaW5lLCByYW5nZS5zdGFydENvbCk7XG4gICAgLy8gT25seSBpbnRlcmVzdGVkIGlmIHRoZSBvcmlnaW5hbCBsb2NhdGlvbiBpcyBpbiBhbiBcImV4dGVybmFsXCIgdGVtcGxhdGUgZmlsZTpcbiAgICAvLyAqIHRoZSBmaWxlIGlzIGRpZmZlcmVudCB0byB0aGUgY3VycmVudCBmaWxlXG4gICAgLy8gKiB0aGUgZmlsZSBkb2VzIG5vdCBlbmQgaW4gYC5qc2Agb3IgYC50c2AgKHdlIGV4cGVjdCBpdCB0byBiZSBzb21ldGhpbmcgbGlrZSBgLmh0bWxgKS5cbiAgICAvLyAqIHRoZSByYW5nZSBzdGFydHMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZVxuICAgIGlmIChwb3MgPT09IG51bGwgfHwgcG9zLmZpbGUgPT09IHRoaXMuc291cmNlVXJsIHx8IC9cXC5banRdcyQvLnRlc3QocG9zLmZpbGUpIHx8XG4gICAgICAgIHBvcy5saW5lICE9PSAwIHx8IHBvcy5jb2x1bW4gIT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHRlbXBsYXRlQ29udGVudHMgPSBzb3VyY2VGaWxlLnNvdXJjZXMuZmluZChzcmMgPT4gc3JjPy5zb3VyY2VQYXRoID09PSBwb3MuZmlsZSkhLmNvbnRlbnRzO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvZGU6IHRlbXBsYXRlQ29udGVudHMsXG4gICAgICBzb3VyY2VVcmw6IHBvcy5maWxlLFxuICAgICAgcmFuZ2U6IHtzdGFydFBvczogMCwgc3RhcnRMaW5lOiAwLCBzdGFydENvbDogMCwgZW5kUG9zOiB0ZW1wbGF0ZUNvbnRlbnRzLmxlbmd0aH0sXG4gICAgICBpc0VzY2FwZWQ6IGZhbHNlLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHRlbXBsYXRlRnJvbVBhcnRpYWxDb2RlKFxuICAgICAgdGVtcGxhdGVOb2RlOiBBc3RWYWx1ZTx1bmtub3duLCBURXhwcmVzc2lvbj4sXG4gICAgICB7c3RhcnRQb3MsIGVuZFBvcywgc3RhcnRMaW5lLCBzdGFydENvbH06IFJhbmdlKTogVGVtcGxhdGVJbmZvIHtcbiAgICBpZiAoIS9bXCInYF0vLnRlc3QodGhpcy5jb2RlW3N0YXJ0UG9zXSkgfHwgdGhpcy5jb2RlW3N0YXJ0UG9zXSAhPT0gdGhpcy5jb2RlW2VuZFBvcyAtIDFdKSB7XG4gICAgICB0aHJvdyBuZXcgRmF0YWxMaW5rZXJFcnJvcihcbiAgICAgICAgICB0ZW1wbGF0ZU5vZGUuZXhwcmVzc2lvbixcbiAgICAgICAgICBgRXhwZWN0ZWQgdGhlIHRlbXBsYXRlIHN0cmluZyB0byBiZSB3cmFwcGVkIGluIHF1b3RlcyBidXQgZ290OiAke1xuICAgICAgICAgICAgICB0aGlzLmNvZGUuc3Vic3RyaW5nKHN0YXJ0UG9zLCBlbmRQb3MpfWApO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgY29kZTogdGhpcy5jb2RlLFxuICAgICAgc291cmNlVXJsOiB0aGlzLnNvdXJjZVVybCxcbiAgICAgIHJhbmdlOiB7c3RhcnRQb3M6IHN0YXJ0UG9zICsgMSwgZW5kUG9zOiBlbmRQb3MgLSAxLCBzdGFydExpbmUsIHN0YXJ0Q29sOiBzdGFydENvbCArIDF9LFxuICAgICAgaXNFc2NhcGVkOiB0cnVlLFxuICAgIH07XG4gIH1cbn1cblxuaW50ZXJmYWNlIFRlbXBsYXRlSW5mbyB7XG4gIGNvZGU6IHN0cmluZztcbiAgc291cmNlVXJsOiBzdHJpbmc7XG4gIHJhbmdlOiBSYW5nZTtcbiAgaXNFc2NhcGVkOiBib29sZWFuO1xufVxuXG4vKipcbiAqIEV4dHJhY3QgYW4gYEludGVycG9sYXRpb25Db25maWdgIGZyb20gdGhlIGNvbXBvbmVudCBkZWNsYXJhdGlvbi5cbiAqL1xuZnVuY3Rpb24gcGFyc2VJbnRlcnBvbGF0aW9uQ29uZmlnPFRFeHByZXNzaW9uPihcbiAgICBtZXRhT2JqOiBBc3RPYmplY3Q8UjNEZWNsYXJlQ29tcG9uZW50TWV0YWRhdGEsIFRFeHByZXNzaW9uPik6IEludGVycG9sYXRpb25Db25maWcge1xuICBpZiAoIW1ldGFPYmouaGFzKCdpbnRlcnBvbGF0aW9uJykpIHtcbiAgICByZXR1cm4gREVGQVVMVF9JTlRFUlBPTEFUSU9OX0NPTkZJRztcbiAgfVxuXG4gIGNvbnN0IGludGVycG9sYXRpb25FeHByID0gbWV0YU9iai5nZXRWYWx1ZSgnaW50ZXJwb2xhdGlvbicpO1xuICBjb25zdCB2YWx1ZXMgPSBpbnRlcnBvbGF0aW9uRXhwci5nZXRBcnJheSgpLm1hcChlbnRyeSA9PiBlbnRyeS5nZXRTdHJpbmcoKSk7XG4gIGlmICh2YWx1ZXMubGVuZ3RoICE9PSAyKSB7XG4gICAgdGhyb3cgbmV3IEZhdGFsTGlua2VyRXJyb3IoXG4gICAgICAgIGludGVycG9sYXRpb25FeHByLmV4cHJlc3Npb24sXG4gICAgICAgICdVbnN1cHBvcnRlZCBpbnRlcnBvbGF0aW9uIGNvbmZpZywgZXhwZWN0ZWQgYW4gYXJyYXkgY29udGFpbmluZyBleGFjdGx5IHR3byBzdHJpbmdzJyk7XG4gIH1cbiAgcmV0dXJuIEludGVycG9sYXRpb25Db25maWcuZnJvbUFycmF5KHZhbHVlcyBhcyBbc3RyaW5nLCBzdHJpbmddKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHRoZSBgVmlld0VuY2Fwc3VsYXRpb25gIG1vZGUgZnJvbSB0aGUgQVNUIHZhbHVlJ3Mgc3ltYm9sIG5hbWUuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlRW5jYXBzdWxhdGlvbjxURXhwcmVzc2lvbj4oZW5jYXBzdWxhdGlvbjogQXN0VmFsdWU8Vmlld0VuY2Fwc3VsYXRpb24sIFRFeHByZXNzaW9uPik6XG4gICAgVmlld0VuY2Fwc3VsYXRpb24ge1xuICBjb25zdCBzeW1ib2xOYW1lID0gZW5jYXBzdWxhdGlvbi5nZXRTeW1ib2xOYW1lKCk7XG4gIGlmIChzeW1ib2xOYW1lID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEZhdGFsTGlua2VyRXJyb3IoXG4gICAgICAgIGVuY2Fwc3VsYXRpb24uZXhwcmVzc2lvbiwgJ0V4cGVjdGVkIGVuY2Fwc3VsYXRpb24gdG8gaGF2ZSBhIHN5bWJvbCBuYW1lJyk7XG4gIH1cbiAgY29uc3QgZW51bVZhbHVlID0gVmlld0VuY2Fwc3VsYXRpb25bc3ltYm9sTmFtZSBhcyBrZXlvZiB0eXBlb2YgVmlld0VuY2Fwc3VsYXRpb25dO1xuICBpZiAoZW51bVZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRmF0YWxMaW5rZXJFcnJvcihlbmNhcHN1bGF0aW9uLmV4cHJlc3Npb24sICdVbnN1cHBvcnRlZCBlbmNhcHN1bGF0aW9uJyk7XG4gIH1cbiAgcmV0dXJuIGVudW1WYWx1ZTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHRoZSBgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3lgIGZyb20gdGhlIEFTVCB2YWx1ZSdzIHN5bWJvbCBuYW1lLlxuICovXG5mdW5jdGlvbiBwYXJzZUNoYW5nZURldGVjdGlvblN0cmF0ZWd5PFRFeHByZXNzaW9uPihcbiAgICBjaGFuZ2VEZXRlY3Rpb25TdHJhdGVneTogQXN0VmFsdWU8Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIFRFeHByZXNzaW9uPik6XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kge1xuICBjb25zdCBzeW1ib2xOYW1lID0gY2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuZ2V0U3ltYm9sTmFtZSgpO1xuICBpZiAoc3ltYm9sTmFtZSA9PT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBGYXRhbExpbmtlckVycm9yKFxuICAgICAgICBjaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5leHByZXNzaW9uLFxuICAgICAgICAnRXhwZWN0ZWQgY2hhbmdlIGRldGVjdGlvbiBzdHJhdGVneSB0byBoYXZlIGEgc3ltYm9sIG5hbWUnKTtcbiAgfVxuICBjb25zdCBlbnVtVmFsdWUgPSBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneVtzeW1ib2xOYW1lIGFzIGtleW9mIHR5cGVvZiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneV07XG4gIGlmIChlbnVtVmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBGYXRhbExpbmtlckVycm9yKFxuICAgICAgICBjaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5leHByZXNzaW9uLCAnVW5zdXBwb3J0ZWQgY2hhbmdlIGRldGVjdGlvbiBzdHJhdGVneScpO1xuICB9XG4gIHJldHVybiBlbnVtVmFsdWU7XG59XG5cbi8qKlxuICogRXh0cmFjdCB0aGUgdHlwZSByZWZlcmVuY2UgZXhwcmVzc2lvbiBmcm9tIGEgYGZvcndhcmRSZWZgIGZ1bmN0aW9uIGNhbGwuIEZvciBleGFtcGxlLCB0aGVcbiAqIGV4cHJlc3Npb24gYGZvcndhcmRSZWYoZnVuY3Rpb24oKSB7IHJldHVybiBGb29EaXI7IH0pYCByZXR1cm5zIGBGb29EaXJgLiBOb3RlIHRoYXQgdGhpc1xuICogZXhwcmVzc2lvbiBpcyByZXF1aXJlZCB0byBiZSB3cmFwcGVkIGluIGEgY2xvc3VyZSwgYXMgb3RoZXJ3aXNlIHRoZSBmb3J3YXJkIHJlZmVyZW5jZSB3b3VsZCBiZVxuICogcmVzb2x2ZWQgYmVmb3JlIGluaXRpYWxpemF0aW9uLlxuICovXG5mdW5jdGlvbiBleHRyYWN0Rm9yd2FyZFJlZjxURXhwcmVzc2lvbj4oZXhwcjogQXN0VmFsdWU8dW5rbm93biwgVEV4cHJlc3Npb24+KTpcbiAgICBvLldyYXBwZWROb2RlRXhwcjxURXhwcmVzc2lvbj58bnVsbCB7XG4gIGlmICghZXhwci5pc0NhbGxFeHByZXNzaW9uKCkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGNhbGxlZSA9IGV4cHIuZ2V0Q2FsbGVlKCk7XG4gIGlmIChjYWxsZWUuZ2V0U3ltYm9sTmFtZSgpICE9PSAnZm9yd2FyZFJlZicpIHtcbiAgICB0aHJvdyBuZXcgRmF0YWxMaW5rZXJFcnJvcihcbiAgICAgICAgY2FsbGVlLmV4cHJlc3Npb24sICdVbnN1cHBvcnRlZCBkaXJlY3RpdmUgdHlwZSwgZXhwZWN0ZWQgZm9yd2FyZFJlZiBvciBhIHR5cGUgcmVmZXJlbmNlJyk7XG4gIH1cblxuICBjb25zdCBhcmdzID0gZXhwci5nZXRBcmd1bWVudHMoKTtcbiAgaWYgKGFyZ3MubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEZhdGFsTGlua2VyRXJyb3IoZXhwciwgJ1Vuc3VwcG9ydGVkIGZvcndhcmRSZWYgY2FsbCwgZXhwZWN0ZWQgYSBzaW5nbGUgYXJndW1lbnQnKTtcbiAgfVxuXG4gIGNvbnN0IHdyYXBwZXJGbiA9IGFyZ3NbMF0gYXMgQXN0VmFsdWU8RnVuY3Rpb24sIFRFeHByZXNzaW9uPjtcbiAgaWYgKCF3cmFwcGVyRm4uaXNGdW5jdGlvbigpKSB7XG4gICAgdGhyb3cgbmV3IEZhdGFsTGlua2VyRXJyb3IoXG4gICAgICAgIHdyYXBwZXJGbiwgJ1Vuc3VwcG9ydGVkIGZvcndhcmRSZWYgY2FsbCwgZXhwZWN0ZWQgYSBmdW5jdGlvbiBhcmd1bWVudCcpO1xuICB9XG5cbiAgcmV0dXJuIHdyYXBwZXJGbi5nZXRGdW5jdGlvblJldHVyblZhbHVlKCkuZ2V0T3BhcXVlKCk7XG59XG4iXX0=
@@ -8,6 +8,7 @@
8
8
  */
9
9
  import { ConstantPool, ParseSourceSpan, R3DeclareDirectiveMetadata, R3DirectiveMetadata, R3PartialDeclaration } from '@angular/compiler';
10
10
  import * as o from '@angular/compiler/src/output/output_ast';
11
+ import { AbsoluteFsPath } from '../../../../src/ngtsc/file_system';
11
12
  import { Range } from '../../ast/ast_host';
12
13
  import { AstObject } from '../../ast/ast_value';
13
14
  import { PartialLinker } from './partial_linker';
@@ -15,10 +16,13 @@ import { PartialLinker } from './partial_linker';
15
16
  * A `PartialLinker` that is designed to process `ɵɵngDeclareDirective()` call expressions.
16
17
  */
17
18
  export declare class PartialDirectiveLinkerVersion1<TExpression> implements PartialLinker<TExpression> {
18
- linkPartialDeclaration(sourceUrl: string, code: string, constantPool: ConstantPool, metaObj: AstObject<R3PartialDeclaration, TExpression>): o.Expression;
19
+ private sourceUrl;
20
+ private code;
21
+ constructor(sourceUrl: AbsoluteFsPath, code: string);
22
+ linkPartialDeclaration(constantPool: ConstantPool, metaObj: AstObject<R3PartialDeclaration, TExpression>): o.Expression;
19
23
  }
20
24
  /**
21
25
  * Derives the `R3DirectiveMetadata` structure from the AST object.
22
26
  */
23
- export declare function toR3DirectiveMeta<TExpression>(metaObj: AstObject<R3DeclareDirectiveMetadata, TExpression>, code: string, sourceUrl: string): R3DirectiveMetadata;
27
+ export declare function toR3DirectiveMeta<TExpression>(metaObj: AstObject<R3DeclareDirectiveMetadata, TExpression>, code: string, sourceUrl: AbsoluteFsPath): R3DirectiveMetadata;
24
28
  export declare function createSourceSpan(range: Range, code: string, sourceUrl: string): ParseSourceSpan;