@angular/core 12.1.1 → 12.1.2
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/bundles/core-testing.umd.js +15 -4
- package/bundles/core-testing.umd.js.map +1 -1
- package/bundles/core.umd.js +7 -11
- package/bundles/core.umd.js.map +1 -1
- package/core.d.ts +12 -12
- package/core.metadata.json +1 -1
- package/esm2015/src/application_init.js +5 -5
- package/esm2015/src/change_detection/differs/iterable_differs.js +1 -1
- package/esm2015/src/compiler/compiler_facade_interface.js +1 -1
- package/esm2015/src/error_handler.js +2 -6
- package/esm2015/src/event_emitter.js +1 -1
- package/esm2015/src/linker/component_factory_resolver.js +1 -1
- package/esm2015/src/linker/template_ref.js +1 -1
- package/esm2015/src/linker/view_container_ref.js +1 -1
- package/esm2015/src/metadata/di.js +1 -1
- package/esm2015/src/render3/component_ref.js +1 -1
- package/esm2015/src/render3/ng_module_ref.js +1 -1
- package/esm2015/src/render3/view_ref.js +1 -1
- package/esm2015/src/sanitization/bypass.js +1 -1
- package/esm2015/src/version.js +1 -1
- package/esm2015/src/view/entrypoint.js +1 -1
- package/esm2015/src/view/refs.js +1 -1
- package/esm2015/testing/src/ng_zone_mock.js +1 -1
- package/esm2015/testing/src/r3_test_bed_compiler.js +4 -1
- package/esm2015/testing/src/resolvers.js +1 -1
- package/esm2015/testing/src/test_bed.js +12 -4
- package/fesm2015/core.js +7 -11
- package/fesm2015/core.js.map +1 -1
- package/fesm2015/testing.js +15 -4
- package/fesm2015/testing.js.map +1 -1
- package/package.json +1 -1
- package/schematics/migrations/missing-injectable/providers_evaluator.js +1 -1
- package/schematics/migrations/static-queries/strategies/usage_strategy/template_usage_visitor.js +1 -1
- package/schematics/migrations/template-var-assignment/angular/html_variable_assignment_visitor.js +1 -1
- package/schematics/migrations.json +1 -1
- package/src/r3_symbols.d.ts +2 -3
- package/testing/testing.d.ts +2 -1
- package/testing/testing.metadata.json +1 -1
- package/testing.d.ts +1 -1
- package/schematics/migrations/abstract-control-parent/abstract-control-parent.externs.js +0 -0
- package/schematics/migrations/abstract-control-parent/index.mjs +0 -47
- package/schematics/migrations/abstract-control-parent/util.mjs +0 -50
- package/schematics/migrations/activated-route-snapshot-fragment/activated-route-snapshot-fragment.externs.js +0 -0
- package/schematics/migrations/activated-route-snapshot-fragment/index.mjs +0 -48
- package/schematics/migrations/activated-route-snapshot-fragment/util.mjs +0 -33
- package/schematics/migrations/can-activate-with-redirect-to/can-activate-with-redirect-to.externs.js +0 -0
- package/schematics/migrations/can-activate-with-redirect-to/index.mjs +0 -44
- package/schematics/migrations/can-activate-with-redirect-to/util.mjs +0 -55
- package/schematics/migrations/deep-shadow-piercing-selector/deep-shadow-piercing-selector.externs.js +0 -0
- package/schematics/migrations/deep-shadow-piercing-selector/index.mjs +0 -36
- package/schematics/migrations/dynamic-queries/dynamic-queries.externs.js +0 -0
- package/schematics/migrations/dynamic-queries/index.mjs +0 -51
- package/schematics/migrations/dynamic-queries/util.mjs +0 -65
- package/schematics/migrations/initial-navigation/collector.mjs +0 -105
- package/schematics/migrations/initial-navigation/index.mjs +0 -61
- package/schematics/migrations/initial-navigation/initial-navigation.externs.js +0 -0
- package/schematics/migrations/initial-navigation/transform.mjs +0 -54
- package/schematics/migrations/initial-navigation/update_recorder.mjs +0 -9
- package/schematics/migrations/initial-navigation/util.mjs +0 -28
- package/schematics/migrations/missing-injectable/definition_collector.mjs +0 -75
- package/schematics/migrations/missing-injectable/index.mjs +0 -100
- package/schematics/migrations/missing-injectable/missing-injectable.externs.js +0 -0
- package/schematics/migrations/missing-injectable/providers_evaluator.mjs +0 -50
- package/schematics/migrations/missing-injectable/transform.mjs +0 -187
- package/schematics/migrations/missing-injectable/update_recorder.mjs +0 -9
- package/schematics/migrations/module-with-providers/collector.mjs +0 -59
- package/schematics/migrations/module-with-providers/index.mjs +0 -71
- package/schematics/migrations/module-with-providers/module-with-providers.externs.js +0 -0
- package/schematics/migrations/module-with-providers/transform.mjs +0 -134
- package/schematics/migrations/module-with-providers/util.mjs +0 -25
- package/schematics/migrations/move-document/document_import_visitor.mjs +0 -60
- package/schematics/migrations/move-document/index.mjs +0 -71
- package/schematics/migrations/move-document/move-document.externs.js +0 -0
- package/schematics/migrations/move-document/move-import.mjs +0 -45
- package/schematics/migrations/native-view-encapsulation/index.mjs +0 -41
- package/schematics/migrations/native-view-encapsulation/native-view-encapsulation.externs.js +0 -0
- package/schematics/migrations/native-view-encapsulation/util.mjs +0 -34
- package/schematics/migrations/navigation-extras-omissions/index.mjs +0 -47
- package/schematics/migrations/navigation-extras-omissions/navigation-extras-omissions.externs.js +0 -0
- package/schematics/migrations/navigation-extras-omissions/util.mjs +0 -111
- package/schematics/migrations/relative-link-resolution/collector.mjs +0 -81
- package/schematics/migrations/relative-link-resolution/index.mjs +0 -62
- package/schematics/migrations/relative-link-resolution/relative-link-resolution.externs.js +0 -0
- package/schematics/migrations/relative-link-resolution/transform.mjs +0 -51
- package/schematics/migrations/relative-link-resolution/update_recorder.mjs +0 -9
- package/schematics/migrations/relative-link-resolution/util.mjs +0 -28
- package/schematics/migrations/renderer-to-renderer2/helpers.mjs +0 -224
- package/schematics/migrations/renderer-to-renderer2/index.mjs +0 -113
- package/schematics/migrations/renderer-to-renderer2/migration.mjs +0 -211
- package/schematics/migrations/renderer-to-renderer2/renderer-to-renderer2.externs.js +0 -0
- package/schematics/migrations/renderer-to-renderer2/util.mjs +0 -69
- package/schematics/migrations/router-preserve-query-params/index.mjs +0 -50
- package/schematics/migrations/router-preserve-query-params/router-preserve-query-params.externs.js +0 -0
- package/schematics/migrations/router-preserve-query-params/util.mjs +0 -88
- package/schematics/migrations/static-queries/angular/directive_inputs.mjs +0 -70
- package/schematics/migrations/static-queries/angular/ng_query_visitor.mjs +0 -113
- package/schematics/migrations/static-queries/angular/query-definition.mjs +0 -20
- package/schematics/migrations/static-queries/angular/super_class.mjs +0 -21
- package/schematics/migrations/static-queries/index.mjs +0 -206
- package/schematics/migrations/static-queries/static-queries.externs.js +0 -0
- package/schematics/migrations/static-queries/strategies/template_strategy/template_strategy.mjs +0 -200
- package/schematics/migrations/static-queries/strategies/test_strategy/test_strategy.mjs +0 -24
- package/schematics/migrations/static-queries/strategies/timing-strategy.mjs +0 -9
- package/schematics/migrations/static-queries/strategies/usage_strategy/declaration_usage_visitor.mjs +0 -355
- package/schematics/migrations/static-queries/strategies/usage_strategy/super_class_context.mjs +0 -38
- package/schematics/migrations/static-queries/strategies/usage_strategy/template_usage_visitor.mjs +0 -80
- package/schematics/migrations/static-queries/strategies/usage_strategy/usage_strategy.mjs +0 -154
- package/schematics/migrations/static-queries/transform.mjs +0 -88
- package/schematics/migrations/template-var-assignment/analyze_template.mjs +0 -25
- package/schematics/migrations/template-var-assignment/angular/html_variable_assignment_visitor.mjs +0 -65
- package/schematics/migrations/template-var-assignment/index.mjs +0 -68
- package/schematics/migrations/template-var-assignment/template-var-assignment.externs.js +0 -0
- package/schematics/migrations/undecorated-classes-with-decorated-fields/index.mjs +0 -92
- package/schematics/migrations/undecorated-classes-with-decorated-fields/transform.mjs +0 -286
- package/schematics/migrations/undecorated-classes-with-decorated-fields/undecorated-classes-with-decorated-fields.externs.js +0 -0
- package/schematics/migrations/undecorated-classes-with-decorated-fields/update_recorder.mjs +0 -9
- package/schematics/migrations/undecorated-classes-with-di/create_ngc_program.mjs +0 -43
- package/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/convert_directive_metadata.mjs +0 -82
- package/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/decorator_rewriter.mjs +0 -102
- package/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/import_rewrite_visitor.mjs +0 -111
- package/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/path_format.mjs +0 -17
- package/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/source_file_exports.mjs +0 -51
- package/schematics/migrations/undecorated-classes-with-di/index.mjs +0 -162
- package/schematics/migrations/undecorated-classes-with-di/ng_declaration_collector.mjs +0 -124
- package/schematics/migrations/undecorated-classes-with-di/transform.mjs +0 -356
- package/schematics/migrations/undecorated-classes-with-di/undecorated-classes-with-di.externs.js +0 -0
- package/schematics/migrations/undecorated-classes-with-di/update_recorder.mjs +0 -9
- package/schematics/migrations/wait-for-async/index.mjs +0 -76
- package/schematics/migrations/wait-for-async/util.mjs +0 -23
- package/schematics/migrations/wait-for-async/wait-for-async.externs.js +0 -0
- package/schematics/migrations/xhr-factory/index.mjs +0 -91
- package/schematics/migrations/xhr-factory/xhr-factory.externs.js +0 -0
- package/schematics/utils/import_manager.mjs +0 -197
- package/schematics/utils/line_mappings.mjs +0 -60
- package/schematics/utils/ng_component_template.mjs +0 -96
- package/schematics/utils/ng_decorators.mjs +0 -23
- package/schematics/utils/parse_html.mjs +0 -24
- package/schematics/utils/project_tsconfig_paths.mjs +0 -74
- package/schematics/utils/schematics_prompt.mjs +0 -30
- package/schematics/utils/typescript/class_declaration.mjs +0 -33
- package/schematics/utils/typescript/compiler_host.mjs +0 -66
- package/schematics/utils/typescript/decorators.mjs +0 -20
- package/schematics/utils/typescript/find_base_classes.mjs +0 -30
- package/schematics/utils/typescript/functions.mjs +0 -28
- package/schematics/utils/typescript/imports.mjs +0 -91
- package/schematics/utils/typescript/nodes.mjs +0 -57
- package/schematics/utils/typescript/parse_tsconfig.mjs +0 -26
- package/schematics/utils/typescript/property_name.mjs +0 -23
- package/schematics/utils/typescript/symbol.mjs +0 -72
- package/schematics/utils/utils.externs.js +0 -0
package/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/decorator_rewriter.mjs
DELETED
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
import * as ts from 'typescript';
|
|
2
|
-
import { unwrapExpression } from '../../../utils/typescript/functions';
|
|
3
|
-
import { ImportRewriteTransformerFactory, UnresolvedIdentifierError } from './import_rewrite_visitor';
|
|
4
|
-
/**
|
|
5
|
-
* Class that can be used to copy decorators to a new location. The rewriter ensures that
|
|
6
|
-
* identifiers and imports are rewritten to work in the new file location. Fields in a
|
|
7
|
-
* decorator that cannot be cleanly copied will be copied with a comment explaining that
|
|
8
|
-
* imports and identifiers need to be adjusted manually.
|
|
9
|
-
*/
|
|
10
|
-
export class DecoratorRewriter {
|
|
11
|
-
constructor(importManager, typeChecker, evaluator, compiler) {
|
|
12
|
-
this.importManager = importManager;
|
|
13
|
-
this.typeChecker = typeChecker;
|
|
14
|
-
this.evaluator = evaluator;
|
|
15
|
-
this.compiler = compiler;
|
|
16
|
-
this.previousSourceFile = null;
|
|
17
|
-
this.newSourceFile = null;
|
|
18
|
-
this.newProperties = [];
|
|
19
|
-
this.nonCopyableProperties = [];
|
|
20
|
-
this.importRewriterFactory = new ImportRewriteTransformerFactory(this.importManager, this.typeChecker, this.compiler['_host']);
|
|
21
|
-
}
|
|
22
|
-
rewrite(ngDecorator, newSourceFile) {
|
|
23
|
-
const decorator = ngDecorator.node;
|
|
24
|
-
// Reset the previous state of the decorator rewriter.
|
|
25
|
-
this.newProperties = [];
|
|
26
|
-
this.nonCopyableProperties = [];
|
|
27
|
-
this.newSourceFile = newSourceFile;
|
|
28
|
-
this.previousSourceFile = decorator.getSourceFile();
|
|
29
|
-
// If the decorator will be added to the same source file it currently
|
|
30
|
-
// exists in, we don't need to rewrite any paths or add new imports.
|
|
31
|
-
if (this.previousSourceFile === newSourceFile) {
|
|
32
|
-
return this._createDecorator(decorator.expression);
|
|
33
|
-
}
|
|
34
|
-
const oldCallExpr = decorator.expression;
|
|
35
|
-
if (!oldCallExpr.arguments.length) {
|
|
36
|
-
// Re-use the original decorator if there are no arguments and nothing needs
|
|
37
|
-
// to be sanitized or rewritten.
|
|
38
|
-
return this._createDecorator(decorator.expression);
|
|
39
|
-
}
|
|
40
|
-
const metadata = unwrapExpression(oldCallExpr.arguments[0]);
|
|
41
|
-
if (!ts.isObjectLiteralExpression(metadata)) {
|
|
42
|
-
// Re-use the original decorator as there is no metadata that can be sanitized.
|
|
43
|
-
return this._createDecorator(decorator.expression);
|
|
44
|
-
}
|
|
45
|
-
metadata.properties.forEach(prop => {
|
|
46
|
-
// We don't handle spread assignments, accessors or method declarations automatically
|
|
47
|
-
// as it involves more advanced static analysis and these type of properties are not
|
|
48
|
-
// picked up by ngc either.
|
|
49
|
-
if (ts.isSpreadAssignment(prop) || ts.isAccessor(prop) || ts.isMethodDeclaration(prop)) {
|
|
50
|
-
this.nonCopyableProperties.push(prop);
|
|
51
|
-
return;
|
|
52
|
-
}
|
|
53
|
-
const sanitizedProp = this._sanitizeMetadataProperty(prop);
|
|
54
|
-
if (sanitizedProp !== null) {
|
|
55
|
-
this.newProperties.push(sanitizedProp);
|
|
56
|
-
}
|
|
57
|
-
else {
|
|
58
|
-
this.nonCopyableProperties.push(prop);
|
|
59
|
-
}
|
|
60
|
-
});
|
|
61
|
-
// In case there is at least one non-copyable property, we add a leading comment to
|
|
62
|
-
// the first property assignment in order to ask the developer to manually manage
|
|
63
|
-
// imports and do path rewriting for these properties.
|
|
64
|
-
if (this.nonCopyableProperties.length !== 0) {
|
|
65
|
-
['The following fields were copied from the base class,',
|
|
66
|
-
'but could not be updated automatically to work in the',
|
|
67
|
-
'new file location. Please add any required imports for', 'the properties below:']
|
|
68
|
-
.forEach(text => ts.addSyntheticLeadingComment(this.nonCopyableProperties[0], ts.SyntaxKind.SingleLineCommentTrivia, ` ${text}`, true));
|
|
69
|
-
}
|
|
70
|
-
// Note that we don't update the decorator as we don't want to copy potential leading
|
|
71
|
-
// comments of the decorator. This is necessary because otherwise comments from the
|
|
72
|
-
// copied decorator end up describing the new class (which is not always correct).
|
|
73
|
-
return this._createDecorator(ts.createCall(this.importManager.addImportToSourceFile(newSourceFile, ngDecorator.name, ngDecorator.moduleName), undefined, [ts.updateObjectLiteral(metadata, [...this.newProperties, ...this.nonCopyableProperties])]));
|
|
74
|
-
}
|
|
75
|
-
/** Creates a new decorator with the given expression. */
|
|
76
|
-
_createDecorator(expr) {
|
|
77
|
-
// Note that we don't update the decorator as we don't want to copy potential leading
|
|
78
|
-
// comments of the decorator. This is necessary because otherwise comments from the
|
|
79
|
-
// copied decorator end up describing the new class (which is not always correct).
|
|
80
|
-
return ts.createDecorator(expr);
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* Sanitizes a metadata property by ensuring that all contained identifiers
|
|
84
|
-
* are imported in the target source file.
|
|
85
|
-
*/
|
|
86
|
-
_sanitizeMetadataProperty(prop) {
|
|
87
|
-
try {
|
|
88
|
-
return ts
|
|
89
|
-
.transform(prop, [ctx => this.importRewriterFactory.create(ctx, this.newSourceFile)])
|
|
90
|
-
.transformed[0];
|
|
91
|
-
}
|
|
92
|
-
catch (e) {
|
|
93
|
-
// If the error is for an unresolved identifier, we want to return "null" because
|
|
94
|
-
// such object literal elements could be added to the non-copyable properties.
|
|
95
|
-
if (e instanceof UnresolvedIdentifierError) {
|
|
96
|
-
return null;
|
|
97
|
-
}
|
|
98
|
-
throw e;
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9yX3Jld3JpdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zY2hlbWF0aWNzL21pZ3JhdGlvbnMvdW5kZWNvcmF0ZWQtY2xhc3Nlcy13aXRoLWRpL2RlY29yYXRvcl9yZXdyaXRlL2RlY29yYXRvcl9yZXdyaXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFVQSxPQUFPLEtBQUssRUFBRSxNQUFNLFlBQVksQ0FBQztBQUlqQyxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQztBQUVyRSxPQUFPLEVBQUMsK0JBQStCLEVBQUUseUJBQXlCLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUdwRzs7Ozs7R0FLRztBQUNILE1BQU0sT0FBTyxpQkFBaUI7SUFVNUIsWUFDWSxhQUE0QixFQUFVLFdBQTJCLEVBQ2pFLFNBQTJCLEVBQVUsUUFBcUI7UUFEMUQsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFBVSxnQkFBVyxHQUFYLFdBQVcsQ0FBZ0I7UUFDakUsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFBVSxhQUFRLEdBQVIsUUFBUSxDQUFhO1FBWHRFLHVCQUFrQixHQUF1QixJQUFJLENBQUM7UUFDOUMsa0JBQWEsR0FBdUIsSUFBSSxDQUFDO1FBRXpDLGtCQUFhLEdBQWtDLEVBQUUsQ0FBQztRQUNsRCwwQkFBcUIsR0FBa0MsRUFBRSxDQUFDO1FBRWxELDBCQUFxQixHQUFHLElBQUksK0JBQStCLENBQy9ELElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFJTyxDQUFDO0lBRTFFLE9BQU8sQ0FBQyxXQUF3QixFQUFFLGFBQTRCO1FBQzVELE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUM7UUFFbkMsc0RBQXNEO1FBQ3RELElBQUksQ0FB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QyxDQUFDLENBQUM7SUFDMUYsQ0FBQztJQUVELHlEQUF5RDtJQUNqRCxnQkFBZ0IsQ0FBQyxJQUFtQjtRQUMxQyxxRkFBcUY7UUFDckYsbUZBQW1GO1FBQ25GLGtGQUFrRjtRQUNsRixPQUFPLEVBQUUsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVEOzs7T0FHRztJQUNLLHlCQUF5QixDQUFDLElBQWlDO1FBRWpFLElBQUk7WUFDRixPQUFPLEVBQUU7aUJBQ0osU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLGFBQWMsQ0FBQyxDQUFDLENBQUM7aUJBQ3JGLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNyQjtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1YsaUZBQWlGO1lBQ2pGLDhFQUE4RTtZQUM5RSxJQUFJLENBQUMsWUFBWSx5QkFBeUIsRUFBRTtnQkFDMUMsT0FBTyxJQUFJLENBQUM7YUFDYjtZQUNELE1BQU0sQ0FBQyxDQUFDO1NBQ1Q7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJcbi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuaW1wb3J0IHtBb3RDb21waWxlcn0gZnJvbSAnQGFuZ3VsYXIvY29tcGlsZXInO1xuaW1wb3J0IHtQYXJ0aWFsRXZhbHVhdG9yfSBmcm9tICdAYW5ndWxhci9jb21waWxlci1jbGkvc3JjL25ndHNjL3BhcnRpYWxfZXZhbHVhdG9yJztcbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQge0ltcG9ydE1hbmFnZXJ9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2ltcG9ydF9tYW5hZ2VyJztcbmltcG9ydCB7TmdEZWNvcmF0b3J9IGZyb20gJy4uLy4uLy4uL3V0aWxzL25nX2RlY29yYXRvcnMnO1xuaW1wb3J0IHt1bndyYXBFeHByZXNzaW9ufSBmcm9tICcuLi8uLi8uLi91dGlscy90eXBlc2NyaXB0L2Z1bmN0aW9ucyc7XG5cbmltcG9ydCB7SW1wb3J0UmV3cml0ZVRyYW5zZm9ybWVyRmFjdG9yeSwgVW5yZXNvbHZlZElkZW50aWZpZXJFcnJvcn0gZnJvbSAnLi9pbXBvcnRfcmV3cml0ZV92aXNpdG9yJztcblxuXG4vKipcbiAqIENsYXNzIHRoYXQgY2FuIGJlIHVzZWQgdG8gY29weSBkZWNvcmF0b3JzIHRvIGEgbmV3IGxvY2F0aW9uLiBUaGUgcmV3cml0ZXIgZW5zdXJlcyB0aGF0XG4gKiBpZGVudGlmaWVycyBhbmQgaW1wb3J0cyBhcmUgcmV3cml0dGVuIHRvIHdvcmsgaW4gdGhlIG5ldyBmaWxlIGxvY2F0aW9uLiBGaWVsZHMgaW4gYVxuICogZGVjb3JhdG9yIHRoYXQgY2Fubm90IGJlIGNsZWFubHkgY29waWVkIHdpbGwgYmUgY29waWVkIHdpdGggYSBjb21tZW50IGV4cGxhaW5pbmcgdGhhdFxuICogaW1wb3J0cyBhbmQgaWRlbnRpZmllcnMgbmVlZCB0byBiZSBhZGp1c3RlZCBtYW51YWxseS5cbiAqL1xuZXhwb3J0IGNsYXNzIERlY29yYXRvclJld3JpdGVyIHtcbiAgcHJldmlvdXNTb3VyY2VGaWxlOiB0cy5Tb3VyY2VGaWxlfG51bGwgPSBudWxsO1xuICBuZXdTb3VyY2VGaWxlOiB0cy5Tb3VyY2VGaWxlfG51bGwgPSBudWxsO1xuXG4gIG5ld1Byb3BlcnRpZXM6IHRzLk9iamVjdExpdGVyYWxFbGVtZW50TGlrZVtdID0gW107XG4gIG5vbkNvcHlhYmxlUHJvcGVydGllczogdHMuT2JqZWN0TGl0ZXJhbEVsZW1lbnRMaWtlW10gPSBbXTtcblxuICBwcml2YXRlIGltcG9ydFJld3JpdGVyRmFjdG9yeSA9IG5ldyBJbXBvcnRSZXdyaXRlVHJhbnNmb3JtZXJGYWN0b3J5KFxuICAgICAgdGhpcy5pbXBvcnRNYW5hZ2VyLCB0aGlzLnR5cGVDaGVja2VyLCB0aGlzLmNvbXBpbGVyWydfaG9zdCddKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICAgIHByaXZhdGUgaW1wb3J0TWFuYWdlcjogSW1wb3J0TWFuYWdlciwgcHJpdmF0ZSB0eXBlQ2hlY2tlcjogdHMuVHlwZUNoZWNrZXIsXG4gICAgICBwcml2YXRlIGV2YWx1YXRvcjogUGFydGlhbEV2YWx1YXRvciwgcHJpdmF0ZSBjb21waWxlcjogQW90Q29tcGlsZXIpIHt9XG5cbiAgcmV3cml0ZShuZ0RlY29yYXRvcjogTmdEZWNvcmF0b3IsIG5ld1NvdXJjZUZpbGU6IHRzLlNvdXJjZUZpbGUpOiB0cy5EZWNvcmF0b3Ige1xuICAgIGNvbnN0IGRlY29yYXRvciA9IG5nRGVjb3JhdG9yLm5vZGU7XG5cbiAgICAvLyBSZXNldCB0aGUgcHJldmlvdXMgc3RhdGUgb2YgdGhlIGRlY29yYXRvciByZXdyaXRlci5cbiAgICB0aGlzLm5ld1Byb3BlcnRpZXMgPSBbXTtcbiAgICB0aGlzLm5vbkNvcHlhYmxlUHJvcGVydGllcyA9IFtdO1xuICAgIHRoaXMubmV3U291cmNlRmlsZSA9IG5ld1NvdXJjZUZpbGU7XG4gICAgdGhpcy5wcmV2aW91c1NvdXJjZUZpbGUgPSBkZWNvcmF0b3IuZ2V0U291cmNlRmlsZSgpO1xuXG4gICAgLy8gSWYgdGhlIGRlY29yYXRvciB3aWxsIGJlIGFkZGVkIHRvIHRoZSBzYW1lIHNvdXJjZSBmaWxlIGl0IGN1cnJlbnRseVxuICAgIC8vIGV4aXN0cyBpbiwgd2UgZG9uJ3QgbmVlZCB0byByZXdyaXRlIGFueSBwYXRocyBvciBhZGQgbmV3IGltcG9ydHMuXG4gICAgaWYgKHRoaXMucHJldmlvdXNTb3VyY2VGaWxlID09PSBuZXdTb3VyY2VGaWxlKSB7XG4gICAgICByZXR1cm4gdGhpcy5fY3JlYXRlRGVjb3JhdG9yKGRlY29yYXRvci5leHByZXNzaW9uKTtcbiAgICB9XG5cbiAgICBjb25zdCBvbGRDYWxsRXhwciA9IGRlY29yYXRvci5leHByZXNzaW9uO1xuXG4gICAgaWYgKCFvbGRDYWxsRXhwci5hcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAvLyBSZS11c2UgdGhlIG9yaWdpbmFsIGRlY29yYXRvciBpZiB0aGVyZSBhcmUgbm8gYXJndW1lbnRzIGFuZCBub3RoaW5nIG5lZWRzXG4gICAgICAvLyB0byBiZSBzYW5pdGl6ZWQgb3IgcmV3cml0dGVuLlxuICAgICAgcmV0dXJuIHRoaXMuX2NyZWF0ZURlY29yYXRvcihkZWNvcmF0b3IuZXhwcmVzc2lvbik7XG4gICAgfVxuXG4gICAgY29uc3QgbWV0YWRhdGEgPSB1bndyYXBFeHByZXNzaW9uKG9sZENhbGxFeHByLmFyZ3VtZW50c1swXSk7XG4gICAgaWYgKCF0cy5pc09iamVjdExpdGVyYWxFeHByZXNzaW9uKG1ldGFkYXRhKSkge1xuICAgICAgLy8gUmUtdXNlIHRoZSBvcmlnaW5hbCBkZWNvcmF0b3IgYXMgdGhlcmUgaXMgbm8gbWV0YWRhdGEgdGhhdCBjYW4gYmUgc2FuaXRpemVkLlxuICAgICAgcmV0dXJuIHRoaXMuX2NyZWF0ZURlY29yYXRvcihkZWNvcmF0b3IuZXhwcmVzc2lvbik7XG4gICAgfVxuXG4gICAgbWV0YWRhdGEucHJvcGVydGllcy5mb3JFYWNoKHByb3AgPT4ge1xuICAgICAgLy8gV2UgZG9uJ3QgaGFuZGxlIHNwcmVhZCBhc3NpZ25tZW50cywgYWNjZXNzb3JzIG9yIG1ldGhvZCBkZWNsYXJhdGlvbnMgYXV0b21hdGljYWxseVxuICAgICAgLy8gYXMgaXQgaW52b2x2ZXMgbW9yZSBhZHZhbmNlZCBzdGF0aWMgYW5hbHlzaXMgYW5kIHRoZXNlIHR5cGUgb2YgcHJvcGVydGllcyBhcmUgbm90XG4gICAgICAvLyBwaWNrZWQgdXAgYnkgbmdjIGVpdGhlci5cbiAgICAgIGlmICh0cy5pc1NwcmVhZEFzc2lnbm1lbnQocHJvcCkgfHwgdHMuaXNBY2Nlc3Nvcihwcm9wKSB8fCB0cy5pc01ldGhvZERlY2xhcmF0aW9uKHByb3ApKSB7XG4gICAgICAgIHRoaXMubm9uQ29weWFibGVQcm9wZXJ0aWVzLnB1c2gocHJvcCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2FuaXRpemVkUHJvcCA9IHRoaXMuX3Nhbml0aXplTWV0YWRhdGFQcm9wZXJ0eShwcm9wKTtcbiAgICAgIGlmIChzYW5pdGl6ZWRQcm9wICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMubmV3UHJvcGVydGllcy5wdXNoKHNhbml0aXplZFByb3ApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5ub25Db3B5YWJsZVByb3BlcnRpZXMucHVzaChwcm9wKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIEluIGNhc2UgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIG5vbi1jb3B5YWJsZSBwcm9wZXJ0eSwgd2UgYWRkIGEgbGVhZGluZyBjb21tZW50IHRvXG4gICAgLy8gdGhlIGZpcnN0IHByb3BlcnR5IGFzc2lnbm1lbnQgaW4gb3JkZXIgdG8gYXNrIHRoZSBkZXZlbG9wZXIgdG8gbWFudWFsbHkgbWFuYWdlXG4gICAgLy8gaW1wb3J0cyBhbmQgZG8gcGF0aCByZXdyaXRpbmcgZm9yIHRoZXNlIHByb3BlcnRpZXMuXG4gICAgaWYgKHRoaXMubm9uQ29weWFibGVQcm9wZXJ0aWVzLmxlbmd0aCAhPT0gMCkge1xuICAgICAgWydUaGUgZm9sbG93aW5nIGZpZWxkcyB3ZXJlIGNvcGllZCBmcm9tIHRoZSBiYXNlIGNsYXNzLCcsXG4gICAgICAgJ2J1dCBjb3VsZCBub3QgYmUgdXBkYXRlZCBhdXRvbWF0aWNhbGx5IHRvIHdvcmsgaW4gdGhlJyxcbiAgICAgICAnbmV3IGZpbGUgbG9jYXRpb24uIFBsZWFzZSBhZGQgYW55IHJlcXVpcmVkIGltcG9ydHMgZm9yJywgJ3RoZSBwcm9wZXJ0aWVzIGJlbG93OiddXG4gICAgICAgICAgLmZvckVhY2goXG4gICAgICAgICAgICAgIHRleHQgPT4gdHMuYWRkU3ludGhldGljTGVhZGluZ0NvbW1lbnQoXG4gICAgICAgICAgICAgICAgICB0aGlzLm5vbkNvcHlhYmxlUHJvcGVydGllc1swXSwgdHMuU3ludGF4S2luZC5TaW5nbGVMaW5lQ29tbWVudFRyaXZpYSwgYCAke3RleHR9YCxcbiAgICAgICAgICAgICAgICAgIHRydWUpKTtcbiAgICB9XG5cbiAgICAvLyBOb3RlIHRoYXQgd2UgZG9uJ3QgdXBkYXRlIHRoZSBkZWNvcmF0b3IgYXMgd2UgZG9uJ3Qgd2FudCB0byBjb3B5IHBvdGVudGlhbCBsZWFkaW5nXG4gICAgLy8gY29tbWVudHMgb2YgdGhlIGRlY29yYXRvci4gVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBvdGhlcndpc2UgY29tbWVudHMgZnJvbSB0aGVcbiAgICAvLyBjb3BpZWQgZGVjb3JhdG9yIGVuZCB1cCBkZXNjcmliaW5nIHRoZSBuZXcgY2xhc3MgKHdoaWNoIGlzIG5vdCBhbHdheXMgY29ycmVjdCkuXG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZURlY29yYXRvcih0cy5jcmVhdGVDYWxsKFxuICAgICAgICB0aGlzLmltcG9ydE1hbmFnZXIuYWRkSW1wb3J0VG9Tb3VyY2VGaWxlKFxuICAgICAgICAgICAgbmV3U291cmNlRmlsZSwgbmdEZWNvcmF0b3IubmFtZSwgbmdEZWNvcmF0b3IubW9kdWxlTmFtZSksXG4gICAgICAgIHVuZGVmaW5lZCwgW3RzLnVwZGF0ZU9iamVjdExpdGVyYWwoXG4gICAgICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLCBbLi4udGhpcy5uZXdQcm9wZXJ0aWVzLCAuLi50aGlzLm5vbkNvcHlhYmxlUHJvcGVydGllc10pXSkpO1xuICB9XG5cbiAgLyoqIENyZWF0ZXMgYSBuZXcgZGVjb3JhdG9yIHdpdGggdGhlIGdpdmVuIGV4cHJlc3Npb24uICovXG4gIHByaXZhdGUgX2NyZWF0ZURlY29yYXRvcihleHByOiB0cy5FeHByZXNzaW9uKTogdHMuRGVjb3JhdG9yIHtcbiAgICAvLyBOb3RlIHRoYXQgd2UgZG9uJ3QgdXBkYXRlIHRoZSBkZWNvcmF0b3IgYXMgd2UgZG9uJ3Qgd2FudCB0byBjb3B5IHBvdGVudGlhbCBsZWFkaW5nXG4gICAgLy8gY29tbWVudHMgb2YgdGhlIGRlY29yYXRvci4gVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBvdGhlcndpc2UgY29tbWVudHMgZnJvbSB0aGVcbiAgICAvLyBjb3BpZWQgZGVjb3JhdG9yIGVuZCB1cCBkZXNjcmliaW5nIHRoZSBuZXcgY2xhc3MgKHdoaWNoIGlzIG5vdCBhbHdheXMgY29ycmVjdCkuXG4gICAgcmV0dXJuIHRzLmNyZWF0ZURlY29yYXRvcihleHByKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYW5pdGl6ZXMgYSBtZXRhZGF0YSBwcm9wZXJ0eSBieSBlbnN1cmluZyB0aGF0IGFsbCBjb250YWluZWQgaWRlbnRpZmllcnNcbiAgICogYXJlIGltcG9ydGVkIGluIHRoZSB0YXJnZXQgc291cmNlIGZpbGUuXG4gICAqL1xuICBwcml2YXRlIF9zYW5pdGl6ZU1ldGFkYXRhUHJvcGVydHkocHJvcDogdHMuT2JqZWN0TGl0ZXJhbEVsZW1lbnRMaWtlKTogdHMuT2JqZWN0TGl0ZXJhbEVsZW1lbnRMaWtlXG4gICAgICB8bnVsbCB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0c1xuICAgICAgICAgIC50cmFuc2Zvcm0ocHJvcCwgW2N0eCA9PiB0aGlzLmltcG9ydFJld3JpdGVyRmFjdG9yeS5jcmVhdGUoY3R4LCB0aGlzLm5ld1NvdXJjZUZpbGUhKV0pXG4gICAgICAgICAgLnRyYW5zZm9ybWVkWzBdO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIElmIHRoZSBlcnJvciBpcyBmb3IgYW4gdW5yZXNvbHZlZCBpZGVudGlmaWVyLCB3ZSB3YW50IHRvIHJldHVybiBcIm51bGxcIiBiZWNhdXNlXG4gICAgICAvLyBzdWNoIG9iamVjdCBsaXRlcmFsIGVsZW1lbnRzIGNvdWxkIGJlIGFkZGVkIHRvIHRoZSBub24tY29weWFibGUgcHJvcGVydGllcy5cbiAgICAgIGlmIChlIGluc3RhbmNlb2YgVW5yZXNvbHZlZElkZW50aWZpZXJFcnJvcikge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright Google LLC All Rights Reserved.
|
|
4
|
-
*
|
|
5
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
-
* found in the LICENSE file at https://angular.io/license
|
|
7
|
-
*/
|
|
8
|
-
import { dirname, resolve } from 'path';
|
|
9
|
-
import * as ts from 'typescript';
|
|
10
|
-
import { getImportOfIdentifier } from '../../../utils/typescript/imports';
|
|
11
|
-
import { getValueSymbolOfDeclaration } from '../../../utils/typescript/symbol';
|
|
12
|
-
import { getPosixPath } from './path_format';
|
|
13
|
-
import { getExportSymbolsOfFile } from './source_file_exports';
|
|
14
|
-
/**
|
|
15
|
-
* Factory that creates a TypeScript transformer which ensures that
|
|
16
|
-
* referenced identifiers are available at the target file location.
|
|
17
|
-
*
|
|
18
|
-
* Imports cannot be just added as sometimes identifiers collide in the
|
|
19
|
-
* target source file and the identifier needs to be aliased.
|
|
20
|
-
*/
|
|
21
|
-
export class ImportRewriteTransformerFactory {
|
|
22
|
-
constructor(importManager, typeChecker, compilerHost) {
|
|
23
|
-
this.importManager = importManager;
|
|
24
|
-
this.typeChecker = typeChecker;
|
|
25
|
-
this.compilerHost = compilerHost;
|
|
26
|
-
this.sourceFileExports = new Map();
|
|
27
|
-
}
|
|
28
|
-
create(ctx, newSourceFile) {
|
|
29
|
-
const visitNode = (node) => {
|
|
30
|
-
if (ts.isIdentifier(node)) {
|
|
31
|
-
// Record the identifier reference and return the new identifier. The identifier
|
|
32
|
-
// name can change if the generated import uses an namespaced import or aliased
|
|
33
|
-
// import identifier (to avoid collisions).
|
|
34
|
-
return this._recordIdentifierReference(node, newSourceFile);
|
|
35
|
-
}
|
|
36
|
-
return ts.visitEachChild(node, visitNode, ctx);
|
|
37
|
-
};
|
|
38
|
-
return (node) => ts.visitNode(node, visitNode);
|
|
39
|
-
}
|
|
40
|
-
_recordIdentifierReference(node, targetSourceFile) {
|
|
41
|
-
// For object literal elements we don't want to check identifiers that describe the
|
|
42
|
-
// property name. These identifiers do not refer to a value but rather to a property
|
|
43
|
-
// name and therefore don't need to be imported. The exception is that for shorthand
|
|
44
|
-
// property assignments the "name" identifier is both used as value and property name.
|
|
45
|
-
if (ts.isObjectLiteralElementLike(node.parent) &&
|
|
46
|
-
!ts.isShorthandPropertyAssignment(node.parent) && node.parent.name === node) {
|
|
47
|
-
return node;
|
|
48
|
-
}
|
|
49
|
-
const resolvedImport = getImportOfIdentifier(this.typeChecker, node);
|
|
50
|
-
const sourceFile = node.getSourceFile();
|
|
51
|
-
if (resolvedImport) {
|
|
52
|
-
const symbolName = resolvedImport.name;
|
|
53
|
-
const moduleFileName = this.compilerHost.moduleNameToFileName(resolvedImport.importModule, sourceFile.fileName);
|
|
54
|
-
// In case the identifier refers to an export in the target source file, we need to use
|
|
55
|
-
// the local identifier in the scope of the target source file. This is necessary because
|
|
56
|
-
// the export could be aliased and the alias is not available to the target source file.
|
|
57
|
-
if (moduleFileName && resolve(moduleFileName) === resolve(targetSourceFile.fileName)) {
|
|
58
|
-
const resolvedExport = this._getSourceFileExports(targetSourceFile).find(e => e.exportName === symbolName);
|
|
59
|
-
if (resolvedExport) {
|
|
60
|
-
return resolvedExport.identifier;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
return this.importManager.addImportToSourceFile(targetSourceFile, symbolName, this._rewriteModuleImport(resolvedImport, targetSourceFile));
|
|
64
|
-
}
|
|
65
|
-
else {
|
|
66
|
-
let symbol = getValueSymbolOfDeclaration(node, this.typeChecker);
|
|
67
|
-
if (symbol) {
|
|
68
|
-
// If the symbol refers to a shorthand property assignment, we want to resolve the
|
|
69
|
-
// value symbol of the shorthand property assignment. This is necessary because the
|
|
70
|
-
// value symbol is ambiguous for shorthand property assignment identifiers as the
|
|
71
|
-
// identifier resolves to both property name and property value.
|
|
72
|
-
if (symbol.valueDeclaration && ts.isShorthandPropertyAssignment(symbol.valueDeclaration)) {
|
|
73
|
-
symbol = this.typeChecker.getShorthandAssignmentValueSymbol(symbol.valueDeclaration);
|
|
74
|
-
}
|
|
75
|
-
const resolvedExport = this._getSourceFileExports(sourceFile).find(e => e.symbol === symbol);
|
|
76
|
-
if (resolvedExport) {
|
|
77
|
-
return this.importManager.addImportToSourceFile(targetSourceFile, resolvedExport.exportName, getPosixPath(this.compilerHost.fileNameToModuleName(sourceFile.fileName, targetSourceFile.fileName)));
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
// The referenced identifier cannot be imported. In that case we throw an exception
|
|
81
|
-
// which can be handled outside of the transformer.
|
|
82
|
-
throw new UnresolvedIdentifierError();
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* Gets the resolved exports of a given source file. Exports are cached
|
|
87
|
-
* for subsequent calls.
|
|
88
|
-
*/
|
|
89
|
-
_getSourceFileExports(sourceFile) {
|
|
90
|
-
if (this.sourceFileExports.has(sourceFile)) {
|
|
91
|
-
return this.sourceFileExports.get(sourceFile);
|
|
92
|
-
}
|
|
93
|
-
const sourceFileExports = getExportSymbolsOfFile(sourceFile, this.typeChecker);
|
|
94
|
-
this.sourceFileExports.set(sourceFile, sourceFileExports);
|
|
95
|
-
return sourceFileExports;
|
|
96
|
-
}
|
|
97
|
-
/** Rewrites a module import to be relative to the target file location. */
|
|
98
|
-
_rewriteModuleImport(resolvedImport, newSourceFile) {
|
|
99
|
-
if (!resolvedImport.importModule.startsWith('.')) {
|
|
100
|
-
return resolvedImport.importModule;
|
|
101
|
-
}
|
|
102
|
-
const importFilePath = resolvedImport.node.getSourceFile().fileName;
|
|
103
|
-
const resolvedModulePath = resolve(dirname(importFilePath), resolvedImport.importModule);
|
|
104
|
-
const relativeModuleName = this.compilerHost.fileNameToModuleName(resolvedModulePath, newSourceFile.fileName);
|
|
105
|
-
return getPosixPath(relativeModuleName);
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
/** Error that will be thrown if a given identifier cannot be resolved. */
|
|
109
|
-
export class UnresolvedIdentifierError extends Error {
|
|
110
|
-
}
|
|
111
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0X3Jld3JpdGVfdmlzaXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc2NoZW1hdGljcy9taWdyYXRpb25zL3VuZGVjb3JhdGVkLWNsYXNzZXMtd2l0aC1kaS9kZWNvcmF0b3JfcmV3cml0ZS9pbXBvcnRfcmV3cml0ZV92aXNpdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUdILE9BQU8sRUFBQyxPQUFPLEVBQUUsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3RDLE9BQU8sS0FBSyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBR2pDLE9BQU8sRUFBQyxxQkFBcUIsRUFBUyxNQUFNLG1DQUFtQyxDQUFDO0FBQ2hGLE9BQU8sRUFBQywyQkFBMkIsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBRTdFLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFDLHNCQUFzQixFQUFpQixNQUFNLHVCQUF1QixDQUFDO0FBRzdFOzs7Ozs7R0FNRztBQUNILE1BQU0sT0FBTywrQkFBK0I7SUFHMUMsWUFDWSxhQUE0QixFQUFVLFdBQTJCLEVBQ2pFLFlBQTZCO1FBRDdCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQVUsZ0JBQVcsR0FBWCxXQUFXLENBQWdCO1FBQ2pFLGlCQUFZLEdBQVosWUFBWSxDQUFpQjtRQUpqQyxzQkFBaUIsR0FBRyxJQUFJLEdBQUcsRUFBbUMsQ0FBQztJQUkzQixDQUFDO0lBRTdDLE1BQU0sQ0FBb0IsR0FBNkIsRUFBRSxhQUE0QjtRQUVuRixNQUFNLFNBQVMsR0FBZSxDQUFDLElBQWEsRUFBRSxFQUFFO1lBQzlDLElBQUksRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDekIsZ0ZBQWdGO2dCQUNoRiwrRUFBK0U7Z0JBQy9FLDJDQUEyQztnQkFDM0MsT0FBTyxJ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QTBFO0FBQzFFLE1BQU0sT0FBTyx5QkFBMEIsU0FBUSxLQUFLO0NBQUciLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtBb3RDb21waWxlckhvc3R9IGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyJztcbmltcG9ydCB7ZGlybmFtZSwgcmVzb2x2ZX0gZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHtJbXBvcnRNYW5hZ2VyfSBmcm9tICcuLi8uLi8uLi91dGlscy9pbXBvcnRfbWFuYWdlcic7XG5pbXBvcnQge2dldEltcG9ydE9mSWRlbnRpZmllciwgSW1wb3J0fSBmcm9tICcuLi8uLi8uLi91dGlscy90eXBlc2NyaXB0L2ltcG9ydHMnO1xuaW1wb3J0IHtnZXRWYWx1ZVN5bWJvbE9mRGVjbGFyYXRpb259IGZyb20gJy4uLy4uLy4uL3V0aWxzL3R5cGVzY3JpcHQvc3ltYm9sJztcblxuaW1wb3J0IHtnZXRQb3NpeFBhdGh9IGZyb20gJy4vcGF0aF9mb3JtYXQnO1xuaW1wb3J0IHtnZXRFeHBvcnRTeW1ib2xzT2ZGaWxlLCBSZXNvbHZlZEV4cG9ydH0gZnJvbSAnLi9zb3VyY2VfZmlsZV9leHBvcnRzJztcblxuXG4vKipcbiAqIEZhY3RvcnkgdGhhdCBjcmVhdGVzIGEgVHlwZVNjcmlwdCB0cmFuc2Zvcm1lciB3aGljaCBlbnN1cmVzIHRoYXRcbiAqIHJlZmVyZW5jZWQgaWRlbnRpZmllcnMgYXJlIGF2YWlsYWJsZSBhdCB0aGUgdGFyZ2V0IGZpbGUgbG9jYXRpb24uXG4gKlxuICogSW1wb3J0cyBjYW5ub3QgYmUganVzdCBhZGRlZCBhcyBzb21ldGltZXMgaWRlbnRpZmllcnMgY29sbGlkZSBpbiB0aGVcbiAqIHRhcmdldCBzb3VyY2UgZmlsZSBhbmQgdGhlIGlkZW50aWZpZXIgbmVlZHMgdG8gYmUgYWxpYXNlZC5cbiAqL1xuZXhwb3J0IGNsYXNzIEltcG9ydFJld3JpdGVUcmFuc2Zvcm1lckZhY3Rvcnkge1xuICBwcml2YXRlIHNvdXJjZUZpbGVFeHBvcnRzID0gbmV3IE1hcDx0cy5Tb3VyY2VGaWxlLCBSZXNvbHZlZEV4cG9ydFtdPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgICAgcHJpdmF0ZSBpbXBvcnRNYW5hZ2VyOiBJbXBvcnRNYW5hZ2VyLCBwcml2YXRlIHR5cGVDaGVja2VyOiB0cy5UeXBlQ2hlY2tlcixcbiAgICAgIHByaXZhdGUgY29tcGlsZXJIb3N0OiBBb3RDb21waWxlckhvc3QpIHt9XG5cbiAgY3JlYXRlPFQgZXh0ZW5kcyB0cy5Ob2RlPihjdHg6IHRzLlRyYW5zZm9ybWF0aW9uQ29udGV4dCwgbmV3U291cmNlRmlsZTogdHMuU291cmNlRmlsZSk6XG4gICAgICB0cy5UcmFuc2Zvcm1lcjxUPiB7XG4gICAgY29uc3QgdmlzaXROb2RlOiB0cy5WaXNpdG9yID0gKG5vZGU6IHRzLk5vZGUpID0+IHtcbiAgICAgIGlmICh0cy5pc0lkZW50aWZpZXIobm9kZSkpIHtcbiAgICAgICAgLy8gUmVjb3JkIHRoZSBpZGVudGlmaWVyIHJlZmVyZW5jZSBhbmQgcmV0dXJuIHRoZSBuZXcgaWRlbnRpZmllci4gVGhlIGlkZW50aWZpZXJcbiAgICAgICAgLy8gbmFtZSBjYW4gY2hhbmdlIGlmIHRoZSBnZW5lcmF0ZWQgaW1wb3J0IHVzZXMgYW4gbmFtZXNwYWNlZCBpbXBvcnQgb3IgYWxpYXNlZFxuICAgICAgICAvLyBpbXBvcnQgaWRlbnRpZmllciAodG8gYXZvaWQgY29sbGlzaW9ucykuXG4gICAgICAgIHJldHVybiB0aGlzLl9yZWNvcmRJZGVudGlmaWVyUmVmZXJlbmNlKG5vZGUsIG5ld1NvdXJjZUZpbGUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHMudmlzaXRFYWNoQ2hpbGQobm9kZSwgdmlzaXROb2RlLCBjdHgpO1xuICAgIH07XG5cbiAgICByZXR1cm4gKG5vZGU6IFQpID0+IHRzLnZpc2l0Tm9kZShub2RlLCB2aXNpdE5vZGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVjb3JkSWRlbnRpZmllclJlZmVyZW5jZShub2RlOiB0cy5JZGVudGlmaWVyLCB0YXJnZXRTb3VyY2VGaWxlOiB0cy5Tb3VyY2VGaWxlKTpcbiAgICAgIHRzLk5vZGUge1xuICAgIC8vIEZvciBvYmplY3QgbGl0ZXJhbCBlbGVtZW50cyB3ZSBkb24ndCB3YW50IHRvIGNoZWNrIGlkZW50aWZpZXJzIHRoYXQgZGVzY3JpYmUgdGhlXG4gICAgLy8gcHJvcGVydHkgbmFtZS4gVGhlc2UgaWRlbnRpZmllcnMgZG8gbm90IHJlZmVyIHRvIGEgdmFsdWUgYnV0IHJhdGhlciB0byBhIHByb3BlcnR5XG4gICAgLy8gbmFtZSBhbmQgdGhlcmVmb3JlIGRvbid0IG5lZWQgdG8gYmUgaW1wb3J0ZWQuIFRoZSBleGNlcHRpb24gaXMgdGhhdCBmb3Igc2hvcnRoYW5kXG4gICAgLy8gcHJvcGVydHkgYXNzaWdubWVudHMgdGhlIFwibmFtZVwiIGlkZW50aWZpZXIgaXMgYm90aCB1c2VkIGFzIHZhbHVlIGFuZCBwcm9wZXJ0eSBuYW1lLlxuICAgIGlmICh0cy5pc09iamVjdExpdGVyYWxFbGVtZW50TGlrZShub2RlLnBhcmVudCkgJiZcbiAgICAgICAgIXRzLmlzU2hvcnRoYW5kUHJvcGVydHlBc3NpZ25tZW50KG5vZGUucGFyZW50KSAmJiBub2RlLnBhcmVudC5uYW1lID09PSBub2RlKSB7XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG5cbiAgICBjb25zdCByZXNvbHZlZEltcG9ydCA9IGdldEltcG9ydE9mSWRlbnRpZmllcih0aGlzLnR5cGVDaGVja2VyLCBub2RlKTtcbiAgICBjb25zdCBzb3VyY2VGaWxlID0gbm9kZS5nZXRTb3VyY2VGaWxlKCk7XG5cbiAgICBpZiAocmVzb2x2ZWRJbXBvcnQpIHtcbiAgICAgIGNvbnN0IHN5bWJvbE5hbWUgPSByZXNvbHZlZEltcG9ydC5uYW1lO1xuICAgICAgY29uc3QgbW9kdWxlRmlsZU5hbWUgPVxuICAgICAgICAgIHRoaXMuY29tcGlsZXJIb3N0Lm1vZHVsZU5hbWVUb0ZpbGVOYW1lKHJlc29sdmVkSW1wb3J0LmltcG9ydE1vZHVsZSwgc291cmNlRmlsZS5maWxlTmFtZSk7XG5cbiAgICAgIC8vIEluIGNhc2UgdGhlIGlkZW50aWZpZXIgcmVmZXJzIHRvIGFuIGV4cG9ydCBpbiB0aGUgdGFyZ2V0IHNvdXJjZSBmaWxlLCB3ZSBuZWVkIHRvIHVzZVxuICAgICAgLy8gdGhlIGxvY2FsIGlkZW50aWZpZXIgaW4gdGhlIHNjb3BlIG9mIHRoZSB0YXJnZXQgc291cmNlIGZpbGUuIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2VcbiAgICAgIC8vIHRoZSBleHBvcnQgY291bGQgYmUgYWxpYXNlZCBhbmQgdGhlIGFsaWFzIGlzIG5vdCBhdmFpbGFibGUgdG8gdGhlIHRhcmdldCBzb3VyY2UgZmlsZS5cbiAgICAgIGlmIChtb2R1bGVGaWxlTmFtZSAmJiByZXNvbHZlKG1vZHVsZUZpbGVOYW1lKSA9PT0gcmVzb2x2ZSh0YXJnZXRTb3VyY2VGaWxlLmZpbGVOYW1lKSkge1xuICAgICAgICBjb25zdCByZXNvbHZlZEV4cG9ydCA9XG4gICAgICAgICAgICB0aGlzLl9nZXRTb3VyY2VGaWxlRXhwb3J0cyh0YXJnZXRTb3VyY2VGaWxlKS5maW5kKGUgPT4gZS5leHBvcnROYW1lID09PSBzeW1ib2xOYW1lKTtcbiAgICAgICAgaWYgKHJlc29sdmVkRXhwb3J0KSB7XG4gICAgICAgICAgcmV0dXJuIHJlc29sdmVkRXhwb3J0LmlkZW50aWZpZXI7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuaW1wb3J0TWFuYWdlci5hZGRJbXBvcnRUb1NvdXJjZUZpbGUoXG4gICAgICAgICAgdGFyZ2V0U291cmNlRmlsZSwgc3ltYm9sTmFtZSxcbiAgICAgICAgICB0aGlzLl9yZXdyaXRlTW9kdWxlSW1wb3J0KHJlc29sdmVkSW1wb3J0LCB0YXJnZXRTb3VyY2VGaWxlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBzeW1ib2wgPSBnZXRWYWx1ZVN5bWJvbE9mRGVjbGFyYXRpb24obm9kZSwgdGhpcy50eXBlQ2hlY2tlcik7XG5cbiAgICAgIGlmIChzeW1ib2wpIHtcbiAgICAgICAgLy8gSWYgdGhlIHN5bWJvbCByZWZlcnMgdG8gYSBzaG9ydGhhbmQgcHJvcGVydHkgYXNzaWdubWVudCwgd2Ugd2FudCB0byByZXNvbHZlIHRoZVxuICAgICAgICAvLyB2YWx1ZSBzeW1ib2wgb2YgdGhlIHNob3J0aGFuZCBwcm9wZXJ0eSBhc3NpZ25tZW50LiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZVxuICAgICAgICAvLyB2YWx1ZSBzeW1ib2wgaXMgYW1iaWd1b3VzIGZvciBzaG9ydGhhbmQgcHJvcGVydHkgYXNzaWdubWVudCBpZGVudGlmaWVycyBhcyB0aGVcbiAgICAgICAgLy8gaWRlbnRpZmllciByZXNvbHZlcyB0byBib3RoIHByb3BlcnR5IG5hbWUgYW5kIHByb3BlcnR5IHZhbHVlLlxuICAgICAgICBpZiAoc3ltYm9sLnZhbHVlRGVjbGFyYXRpb24gJiYgdHMuaXNTaG9ydGhhbmRQcm9wZXJ0eUFzc2lnbm1lbnQoc3ltYm9sLnZhbHVlRGVjbGFyYXRpb24pKSB7XG4gICAgICAgICAgc3ltYm9sID0gdGhpcy50eXBlQ2hlY2tlci5nZXRTaG9ydGhhbmRBc3NpZ25tZW50VmFsdWVTeW1ib2woc3ltYm9sLnZhbHVlRGVjbGFyYXRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzb2x2ZWRFeHBvcnQgPVxuICAgICAgICAgICAgdGhpcy5fZ2V0U291cmNlRmlsZUV4cG9ydHMoc291cmNlRmlsZSkuZmluZChlID0+IGUuc3ltYm9sID09PSBzeW1ib2wpO1xuXG4gICAgICAgIGlmIChyZXNvbHZlZEV4cG9ydCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmltcG9ydE1hbmFnZXIuYWRkSW1wb3J0VG9Tb3VyY2VGaWxlKFxuICAgICAgICAgICAgICB0YXJnZXRTb3VyY2VGaWxlLCByZXNvbHZlZEV4cG9ydC5leHBvcnROYW1lLFxuICAgICAgICAgICAgICBnZXRQb3NpeFBhdGgodGhpcy5jb21waWxlckhvc3QuZmlsZU5hbWVUb01vZHVsZU5hbWUoXG4gICAgICAgICAgICAgICAgICBzb3VyY2VGaWxlLmZpbGVOYW1lLCB0YXJnZXRTb3VyY2VGaWxlLmZpbGVOYW1lKSkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSByZWZlcmVuY2VkIGlkZW50aWZpZXIgY2Fubm90IGJlIGltcG9ydGVkLiBJbiB0aGF0IGNhc2Ugd2UgdGhyb3cgYW4gZXhjZXB0aW9uXG4gICAgICAvLyB3aGljaCBjYW4gYmUgaGFuZGxlZCBvdXRzaWRlIG9mIHRoZSB0cmFuc2Zvcm1lci5cbiAgICAgIHRocm93IG5ldyBVbnJlc29sdmVkSWRlbnRpZmllckVycm9yKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHJlc29sdmVkIGV4cG9ydHMgb2YgYSBnaXZlbiBzb3VyY2UgZmlsZS4gRXhwb3J0cyBhcmUgY2FjaGVkXG4gICAqIGZvciBzdWJzZXF1ZW50IGNhbGxzLlxuICAgKi9cbiAgcHJpdmF0ZSBfZ2V0U291cmNlRmlsZUV4cG9ydHMoc291cmNlRmlsZTogdHMuU291cmNlRmlsZSk6IFJlc29sdmVkRXhwb3J0W10ge1xuICAgIGlmICh0aGlzLnNvdXJjZUZpbGVFeHBvcnRzLmhhcyhzb3VyY2VGaWxlKSkge1xuICAgICAgcmV0dXJuIHRoaXMuc291cmNlRmlsZUV4cG9ydHMuZ2V0KHNvdXJjZUZpbGUpITtcbiAgICB9XG5cbiAgICBjb25zdCBzb3VyY2VGaWxlRXhwb3J0cyA9IGdldEV4cG9ydFN5bWJvbHNPZkZpbGUoc291cmNlRmlsZSwgdGhpcy50eXBlQ2hlY2tlcik7XG4gICAgdGhpcy5zb3VyY2VGaWxlRXhwb3J0cy5zZXQoc291cmNlRmlsZSwgc291cmNlRmlsZUV4cG9ydHMpO1xuICAgIHJldHVybiBzb3VyY2VGaWxlRXhwb3J0cztcbiAgfVxuXG4gIC8qKiBSZXdyaXRlcyBhIG1vZHVsZSBpbXBvcnQgdG8gYmUgcmVsYXRpdmUgdG8gdGhlIHRhcmdldCBmaWxlIGxvY2F0aW9uLiAqL1xuICBwcml2YXRlIF9yZXdyaXRlTW9kdWxlSW1wb3J0KHJlc29sdmVkSW1wb3J0OiBJbXBvcnQsIG5ld1NvdXJjZUZpbGU6IHRzLlNvdXJjZUZpbGUpOiBzdHJpbmcge1xuICAgIGlmICghcmVzb2x2ZWRJbXBvcnQuaW1wb3J0TW9kdWxlLnN0YXJ0c1dpdGgoJy4nKSkge1xuICAgICAgcmV0dXJuIHJlc29sdmVkSW1wb3J0LmltcG9ydE1vZHVsZTtcbiAgICB9XG5cbiAgICBjb25zdCBpbXBvcnRGaWxlUGF0aCA9IHJlc29sdmVkSW1wb3J0Lm5vZGUuZ2V0U291cmNlRmlsZSgpLmZpbGVOYW1lO1xuICAgIGNvbnN0IHJlc29sdmVkTW9kdWxlUGF0aCA9IHJlc29sdmUoZGlybmFtZShpbXBvcnRGaWxlUGF0aCksIHJlc29sdmVkSW1wb3J0LmltcG9ydE1vZHVsZSk7XG4gICAgY29uc3QgcmVsYXRpdmVNb2R1bGVOYW1lID1cbiAgICAgICAgdGhpcy5jb21waWxlckhvc3QuZmlsZU5hbWVUb01vZHVsZU5hbWUocmVzb2x2ZWRNb2R1bGVQYXRoLCBuZXdTb3VyY2VGaWxlLmZpbGVOYW1lKTtcblxuICAgIHJldHVybiBnZXRQb3NpeFBhdGgocmVsYXRpdmVNb2R1bGVOYW1lKTtcbiAgfVxufVxuXG4vKiogRXJyb3IgdGhhdCB3aWxsIGJlIHRocm93biBpZiBhIGdpdmVuIGlkZW50aWZpZXIgY2Fubm90IGJlIHJlc29sdmVkLiAqL1xuZXhwb3J0IGNsYXNzIFVucmVzb2x2ZWRJZGVudGlmaWVyRXJyb3IgZXh0ZW5kcyBFcnJvciB7fVxuIl19
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright Google LLC All Rights Reserved.
|
|
4
|
-
*
|
|
5
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
-
* found in the LICENSE file at https://angular.io/license
|
|
7
|
-
*/
|
|
8
|
-
import { normalize } from 'path';
|
|
9
|
-
/** Normalizes the specified path to conform with the posix path format. */
|
|
10
|
-
export function getPosixPath(pathString) {
|
|
11
|
-
const normalized = normalize(pathString).replace(/\\/g, '/');
|
|
12
|
-
if (!normalized.startsWith('.')) {
|
|
13
|
-
return `./${normalized}`;
|
|
14
|
-
}
|
|
15
|
-
return normalized;
|
|
16
|
-
}
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0aF9mb3JtYXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NjaGVtYXRpY3MvbWlncmF0aW9ucy91bmRlY29yYXRlZC1jbGFzc2VzLXdpdGgtZGkvZGVjb3JhdG9yX3Jld3JpdGUvcGF0aF9mb3JtYXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUUvQiwyRUFBMkU7QUFDM0UsTUFBTSxVQUFVLFlBQVksQ0FBQyxVQUFrQjtJQUM3QyxNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztJQUM3RCxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUMvQixPQUFPLEtBQUssVUFBVSxFQUFFLENBQUM7S0FDMUI7SUFDRCxPQUFPLFVBQVUsQ0FBQztBQUNwQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7bm9ybWFsaXplfSBmcm9tICdwYXRoJztcblxuLyoqIE5vcm1hbGl6ZXMgdGhlIHNwZWNpZmllZCBwYXRoIHRvIGNvbmZvcm0gd2l0aCB0aGUgcG9zaXggcGF0aCBmb3JtYXQuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UG9zaXhQYXRoKHBhdGhTdHJpbmc6IHN0cmluZykge1xuICBjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplKHBhdGhTdHJpbmcpLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbiAgaWYgKCFub3JtYWxpemVkLnN0YXJ0c1dpdGgoJy4nKSkge1xuICAgIHJldHVybiBgLi8ke25vcm1hbGl6ZWR9YDtcbiAgfVxuICByZXR1cm4gbm9ybWFsaXplZDtcbn1cbiJdfQ==
|
package/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/source_file_exports.mjs
DELETED
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright Google LLC All Rights Reserved.
|
|
4
|
-
*
|
|
5
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
-
* found in the LICENSE file at https://angular.io/license
|
|
7
|
-
*/
|
|
8
|
-
import * as ts from 'typescript';
|
|
9
|
-
import { getValueSymbolOfDeclaration } from '../../../utils/typescript/symbol';
|
|
10
|
-
/** Computes the resolved exports of a given source file. */
|
|
11
|
-
export function getExportSymbolsOfFile(sf, typeChecker) {
|
|
12
|
-
const exports = [];
|
|
13
|
-
const resolvedExports = [];
|
|
14
|
-
ts.forEachChild(sf, function visitNode(node) {
|
|
15
|
-
if (ts.isClassDeclaration(node) || ts.isFunctionDeclaration(node) ||
|
|
16
|
-
ts.isInterfaceDeclaration(node) &&
|
|
17
|
-
(ts.getCombinedModifierFlags(node) & ts.ModifierFlags.Export) !== 0) {
|
|
18
|
-
if (node.name) {
|
|
19
|
-
exports.push({ exportName: node.name.text, identifier: node.name });
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
else if (ts.isVariableStatement(node)) {
|
|
23
|
-
for (const decl of node.declarationList.declarations) {
|
|
24
|
-
visitNode(decl);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
else if (ts.isVariableDeclaration(node)) {
|
|
28
|
-
if ((ts.getCombinedModifierFlags(node) & ts.ModifierFlags.Export) != 0 &&
|
|
29
|
-
ts.isIdentifier(node.name)) {
|
|
30
|
-
exports.push({ exportName: node.name.text, identifier: node.name });
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
else if (ts.isExportDeclaration(node)) {
|
|
34
|
-
const { moduleSpecifier, exportClause } = node;
|
|
35
|
-
if (!moduleSpecifier && exportClause && ts.isNamedExports(exportClause)) {
|
|
36
|
-
exportClause.elements.forEach(el => exports.push({
|
|
37
|
-
exportName: el.name.text,
|
|
38
|
-
identifier: el.propertyName ? el.propertyName : el.name
|
|
39
|
-
}));
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
});
|
|
43
|
-
exports.forEach(({ identifier, exportName }) => {
|
|
44
|
-
const symbol = getValueSymbolOfDeclaration(identifier, typeChecker);
|
|
45
|
-
if (symbol) {
|
|
46
|
-
resolvedExports.push({ symbol, identifier, exportName });
|
|
47
|
-
}
|
|
48
|
-
});
|
|
49
|
-
return resolvedExports;
|
|
50
|
-
}
|
|
51
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlX2ZpbGVfZXhwb3J0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc2NoZW1hdGljcy9taWdyYXRpb25zL3VuZGVjb3JhdGVkLWNsYXNzZXMtd2l0aC1kaS9kZWNvcmF0b3JfcmV3cml0ZS9zb3VyY2VfZmlsZV9leHBvcnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sS0FBSyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ2pDLE9BQU8sRUFBQywyQkFBMkIsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBUTdFLDREQUE0RDtBQUM1RCxNQUFNLFVBQVUsc0JBQXNCLENBQ2xDLEVBQWlCLEVBQUUsV0FBMkI7SUFDaEQsTUFBTSxPQUFPLEdBQXNELEVBQUUsQ0FBQztJQUN0RSxNQUFNLGVBQWUsR0FBcUIsRUFBRSxDQUFDO0lBRTdDLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRSxFQUFFLFNBQVMsU0FBUyxDQUFDLElBQUk7UUFDekMsSUFBSSxFQUFFLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQztZQUM3RCxFQUFFLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDO2dCQUMzQixDQUFDLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQyxJQUFzQixDQUFDLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDN0YsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO2dCQUNiLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUMsQ0FBQyxDQUFDO2FBQ25FO1NBQ0Y7YUFBTSxJQUFJLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN2QyxLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFO2dCQUNwRCxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDakI7U0FDRjthQUFNLElBQUksRUFBRSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3pDLElBQUksQ0FBQyxFQUFFLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO2dCQUNsRSxFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDOUIsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBQyxDQUFDLENBQUM7YUFDbkU7U0FDRjthQUFNLElBQUksRUFBRSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3ZDLE1BQU0sRUFBQyxlQUFlLEVBQUUsWUFBWSxFQUFDLEdBQUcsSUFBSSxDQUFDO1lBQzdDLElBQUksQ0FBQyxlQUFlLElBQUksWUFBWSxJQUFJLEVBQUUsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLEVBQUU7Z0JBQ3ZFLFlBQVksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztvQkFDL0MsVUFBVSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSTtvQkFDeEIsVUFBVSxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJO2lCQUN4RCxDQUFDLENBQUMsQ0FBQzthQUNMO1NBQ0Y7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUMsRUFBRSxFQUFFO1FBQzNDLE1BQU0sTUFBTSxHQUFHLDJCQUEyQixDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNwRSxJQUFJLE1BQU0sRUFBRTtZQUNWLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBQyxDQUFDLENBQUM7U0FDeEQ7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sZUFBZSxDQUFDO0FBQ3pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0ICogYXMgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5pbXBvcnQge2dldFZhbHVlU3ltYm9sT2ZEZWNsYXJhdGlvbn0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvdHlwZXNjcmlwdC9zeW1ib2wnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdmVkRXhwb3J0IHtcbiAgc3ltYm9sOiB0cy5TeW1ib2w7XG4gIGV4cG9ydE5hbWU6IHN0cmluZztcbiAgaWRlbnRpZmllcjogdHMuSWRlbnRpZmllcjtcbn1cblxuLyoqIENvbXB1dGVzIHRoZSByZXNvbHZlZCBleHBvcnRzIG9mIGEgZ2l2ZW4gc291cmNlIGZpbGUuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RXhwb3J0U3ltYm9sc09mRmlsZShcbiAgICBzZjogdHMuU291cmNlRmlsZSwgdHlwZUNoZWNrZXI6IHRzLlR5cGVDaGVja2VyKTogUmVzb2x2ZWRFeHBvcnRbXSB7XG4gIGNvbnN0IGV4cG9ydHM6IHtleHBvcnROYW1lOiBzdHJpbmcsIGlkZW50aWZpZXI6IHRzLklkZW50aWZpZXJ9W10gPSBbXTtcbiAgY29uc3QgcmVzb2x2ZWRFeHBvcnRzOiBSZXNvbHZlZEV4cG9ydFtdID0gW107XG5cbiAgdHMuZm9yRWFjaENoaWxkKHNmLCBmdW5jdGlvbiB2aXNpdE5vZGUobm9kZSkge1xuICAgIGlmICh0cy5pc0NsYXNzRGVjbGFyYXRpb24obm9kZSkgfHwgdHMuaXNGdW5jdGlvbkRlY2xhcmF0aW9uKG5vZGUpIHx8XG4gICAgICAgIHRzLmlzSW50ZXJmYWNlRGVjbGFyYXRpb24obm9kZSkgJiZcbiAgICAgICAgICAgICh0cy5nZXRDb21iaW5lZE1vZGlmaWVyRmxhZ3Mobm9kZSBhcyB0cy5EZWNsYXJhdGlvbikgJiB0cy5Nb2RpZmllckZsYWdzLkV4cG9ydCkgIT09IDApIHtcbiAgICAgIGlmIChub2RlLm5hbWUpIHtcbiAgICAgICAgZXhwb3J0cy5wdXNoKHtleHBvcnROYW1lOiBub2RlLm5hbWUudGV4dCwgaWRlbnRpZmllcjogbm9kZS5uYW1lfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0cy5pc1ZhcmlhYmxlU3RhdGVtZW50KG5vZGUpKSB7XG4gICAgICBmb3IgKGNvbnN0IGRlY2wgb2Ygbm9kZS5kZWNsYXJhdGlvbkxpc3QuZGVjbGFyYXRpb25zKSB7XG4gICAgICAgIHZpc2l0Tm9kZShkZWNsKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRzLmlzVmFyaWFibGVEZWNsYXJhdGlvbihub2RlKSkge1xuICAgICAgaWYgKCh0cy5nZXRDb21iaW5lZE1vZGlmaWVyRmxhZ3Mobm9kZSkgJiB0cy5Nb2RpZmllckZsYWdzLkV4cG9ydCkgIT0gMCAmJlxuICAgICAgICAgIHRzLmlzSWRlbnRpZmllcihub2RlLm5hbWUpKSB7XG4gICAgICAgIGV4cG9ydHMucHVzaCh7ZXhwb3J0TmFtZTogbm9kZS5uYW1lLnRleHQsIGlkZW50aWZpZXI6IG5vZGUubmFtZX0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHMuaXNFeHBvcnREZWNsYXJhdGlvbihub2RlKSkge1xuICAgICAgY29uc3Qge21vZHVsZVNwZWNpZmllciwgZXhwb3J0Q2xhdXNlfSA9IG5vZGU7XG4gICAgICBpZiAoIW1vZHVsZVNwZWNpZmllciAmJiBleHBvcnRDbGF1c2UgJiYgdHMuaXNOYW1lZEV4cG9ydHMoZXhwb3J0Q2xhdXNlKSkge1xuICAgICAgICBleHBvcnRDbGF1c2UuZWxlbWVudHMuZm9yRWFjaChlbCA9PiBleHBvcnRzLnB1c2goe1xuICAgICAgICAgIGV4cG9ydE5hbWU6IGVsLm5hbWUudGV4dCxcbiAgICAgICAgICBpZGVudGlmaWVyOiBlbC5wcm9wZXJ0eU5hbWUgPyBlbC5wcm9wZXJ0eU5hbWUgOiBlbC5uYW1lXG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIGV4cG9ydHMuZm9yRWFjaCgoe2lkZW50aWZpZXIsIGV4cG9ydE5hbWV9KSA9PiB7XG4gICAgY29uc3Qgc3ltYm9sID0gZ2V0VmFsdWVTeW1ib2xPZkRlY2xhcmF0aW9uKGlkZW50aWZpZXIsIHR5cGVDaGVja2VyKTtcbiAgICBpZiAoc3ltYm9sKSB7XG4gICAgICByZXNvbHZlZEV4cG9ydHMucHVzaCh7c3ltYm9sLCBpZGVudGlmaWVyLCBleHBvcnROYW1lfSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcmVzb2x2ZWRFeHBvcnRzO1xufVxuIl19
|
|
@@ -1,162 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright Google LLC All Rights Reserved.
|
|
4
|
-
*
|
|
5
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
-
* found in the LICENSE file at https://angular.io/license
|
|
7
|
-
*/
|
|
8
|
-
import { SchematicsException } from '@angular-devkit/schematics';
|
|
9
|
-
import { PartialEvaluator } from '@angular/compiler-cli/src/ngtsc/partial_evaluator';
|
|
10
|
-
import { TypeScriptReflectionHost } from '@angular/compiler-cli/src/ngtsc/reflection';
|
|
11
|
-
import { relative } from 'path';
|
|
12
|
-
import * as ts from 'typescript';
|
|
13
|
-
import { getProjectTsConfigPaths } from '../../utils/project_tsconfig_paths';
|
|
14
|
-
import { canMigrateFile, createMigrationCompilerHost } from '../../utils/typescript/compiler_host';
|
|
15
|
-
import { createNgcProgram } from './create_ngc_program';
|
|
16
|
-
import { NgDeclarationCollector } from './ng_declaration_collector';
|
|
17
|
-
import { UndecoratedClassesTransform } from './transform';
|
|
18
|
-
const MIGRATION_RERUN_MESSAGE = 'Migration can be rerun with: "ng update @angular/core ' +
|
|
19
|
-
'--migrate-only migration-v9-undecorated-classes-with-di"';
|
|
20
|
-
const MIGRATION_AOT_FAILURE = 'This migration uses the Angular compiler internally and ' +
|
|
21
|
-
'therefore projects that no longer build successfully after the update cannot run ' +
|
|
22
|
-
'the migration. Please ensure there are no AOT compilation errors and rerun the migration.';
|
|
23
|
-
/** Entry point for the V9 "undecorated-classes-with-di" migration. */
|
|
24
|
-
export default function () {
|
|
25
|
-
return (tree, ctx) => {
|
|
26
|
-
const { buildPaths } = getProjectTsConfigPaths(tree);
|
|
27
|
-
const basePath = process.cwd();
|
|
28
|
-
const failures = [];
|
|
29
|
-
let programError = false;
|
|
30
|
-
if (!buildPaths.length) {
|
|
31
|
-
throw new SchematicsException('Could not find any tsconfig file. Cannot migrate undecorated derived classes and ' +
|
|
32
|
-
'undecorated base classes which use DI.');
|
|
33
|
-
}
|
|
34
|
-
for (const tsconfigPath of buildPaths) {
|
|
35
|
-
const result = runUndecoratedClassesMigration(tree, tsconfigPath, basePath, ctx.logger);
|
|
36
|
-
failures.push(...result.failures);
|
|
37
|
-
programError = programError || !!result.programError;
|
|
38
|
-
}
|
|
39
|
-
if (programError) {
|
|
40
|
-
ctx.logger.info('Could not migrate all undecorated classes that use dependency');
|
|
41
|
-
ctx.logger.info('injection. Some project targets could not be analyzed due to');
|
|
42
|
-
ctx.logger.info('TypeScript program failures.\n');
|
|
43
|
-
ctx.logger.info(`${MIGRATION_RERUN_MESSAGE}\n`);
|
|
44
|
-
if (failures.length) {
|
|
45
|
-
ctx.logger.info('Please manually fix the following failures and re-run the');
|
|
46
|
-
ctx.logger.info('migration once the TypeScript program failures are resolved.');
|
|
47
|
-
failures.forEach(message => ctx.logger.warn(`⮑ ${message}`));
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
else if (failures.length) {
|
|
51
|
-
ctx.logger.info('Could not migrate all undecorated classes that use dependency');
|
|
52
|
-
ctx.logger.info('injection. Please manually fix the following failures:');
|
|
53
|
-
failures.forEach(message => ctx.logger.warn(`⮑ ${message}`));
|
|
54
|
-
}
|
|
55
|
-
};
|
|
56
|
-
}
|
|
57
|
-
function runUndecoratedClassesMigration(tree, tsconfigPath, basePath, logger) {
|
|
58
|
-
const failures = [];
|
|
59
|
-
const programData = gracefullyCreateProgram(tree, basePath, tsconfigPath, logger);
|
|
60
|
-
// Gracefully exit if the program could not be created.
|
|
61
|
-
if (programData === null) {
|
|
62
|
-
return { failures: [], programError: true };
|
|
63
|
-
}
|
|
64
|
-
const { program, compiler } = programData;
|
|
65
|
-
const typeChecker = program.getTypeChecker();
|
|
66
|
-
const partialEvaluator = new PartialEvaluator(new TypeScriptReflectionHost(typeChecker), typeChecker, /* dependencyTracker */ null);
|
|
67
|
-
const declarationCollector = new NgDeclarationCollector(typeChecker, partialEvaluator);
|
|
68
|
-
const sourceFiles = program.getSourceFiles().filter(sourceFile => canMigrateFile(basePath, sourceFile, program));
|
|
69
|
-
// Analyze source files by detecting all directives, components and providers.
|
|
70
|
-
sourceFiles.forEach(sourceFile => declarationCollector.visitNode(sourceFile));
|
|
71
|
-
const { decoratedDirectives, decoratedProviders, undecoratedDeclarations } = declarationCollector;
|
|
72
|
-
const transform = new UndecoratedClassesTransform(typeChecker, compiler, partialEvaluator, getUpdateRecorder);
|
|
73
|
-
const updateRecorders = new Map();
|
|
74
|
-
// Run the migrations for decorated providers and both decorated and undecorated
|
|
75
|
-
// directives. The transform failures are collected and converted into human-readable
|
|
76
|
-
// failures which can be printed to the console.
|
|
77
|
-
[...transform.migrateDecoratedDirectives(decoratedDirectives),
|
|
78
|
-
...transform.migrateDecoratedProviders(decoratedProviders),
|
|
79
|
-
...transform.migrateUndecoratedDeclarations(Array.from(undecoratedDeclarations))]
|
|
80
|
-
.forEach(({ node, message }) => {
|
|
81
|
-
const nodeSourceFile = node.getSourceFile();
|
|
82
|
-
const relativeFilePath = relative(basePath, nodeSourceFile.fileName);
|
|
83
|
-
const { line, character } = ts.getLineAndCharacterOfPosition(node.getSourceFile(), node.getStart());
|
|
84
|
-
failures.push(`${relativeFilePath}@${line + 1}:${character + 1}: ${message}`);
|
|
85
|
-
});
|
|
86
|
-
// Record the changes collected in the import manager and transformer.
|
|
87
|
-
transform.recordChanges();
|
|
88
|
-
// Walk through each update recorder and commit the update. We need to commit the
|
|
89
|
-
// updates in batches per source file as there can be only one recorder per source
|
|
90
|
-
// file in order to avoid shifted character offsets.
|
|
91
|
-
updateRecorders.forEach(recorder => recorder.commitUpdate());
|
|
92
|
-
return { failures };
|
|
93
|
-
/** Gets the update recorder for the specified source file. */
|
|
94
|
-
function getUpdateRecorder(sourceFile) {
|
|
95
|
-
if (updateRecorders.has(sourceFile)) {
|
|
96
|
-
return updateRecorders.get(sourceFile);
|
|
97
|
-
}
|
|
98
|
-
const treeRecorder = tree.beginUpdate(relative(basePath, sourceFile.fileName));
|
|
99
|
-
const recorder = {
|
|
100
|
-
addClassComment(node, text) {
|
|
101
|
-
treeRecorder.insertLeft(node.members.pos, `\n // ${text}\n`);
|
|
102
|
-
},
|
|
103
|
-
addClassDecorator(node, text) {
|
|
104
|
-
// New imports should be inserted at the left while decorators should be inserted
|
|
105
|
-
// at the right in order to ensure that imports are inserted before the decorator
|
|
106
|
-
// if the start position of import and decorator is the source file start.
|
|
107
|
-
treeRecorder.insertRight(node.getStart(), `${text}\n`);
|
|
108
|
-
},
|
|
109
|
-
addNewImport(start, importText) {
|
|
110
|
-
// New imports should be inserted at the left while decorators should be inserted
|
|
111
|
-
// at the right in order to ensure that imports are inserted before the decorator
|
|
112
|
-
// if the start position of import and decorator is the source file start.
|
|
113
|
-
treeRecorder.insertLeft(start, importText);
|
|
114
|
-
},
|
|
115
|
-
updateExistingImport(namedBindings, newNamedBindings) {
|
|
116
|
-
treeRecorder.remove(namedBindings.getStart(), namedBindings.getWidth());
|
|
117
|
-
treeRecorder.insertRight(namedBindings.getStart(), newNamedBindings);
|
|
118
|
-
},
|
|
119
|
-
commitUpdate() {
|
|
120
|
-
tree.commitUpdate(treeRecorder);
|
|
121
|
-
}
|
|
122
|
-
};
|
|
123
|
-
updateRecorders.set(sourceFile, recorder);
|
|
124
|
-
return recorder;
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
function getErrorDiagnostics(diagnostics) {
|
|
128
|
-
return diagnostics.filter(d => d.category === ts.DiagnosticCategory.Error);
|
|
129
|
-
}
|
|
130
|
-
function gracefullyCreateProgram(tree, basePath, tsconfigPath, logger) {
|
|
131
|
-
try {
|
|
132
|
-
const { ngcProgram, host, program, compiler } = createNgcProgram((options) => createMigrationCompilerHost(tree, options, basePath), tsconfigPath);
|
|
133
|
-
const syntacticDiagnostics = getErrorDiagnostics(ngcProgram.getTsSyntacticDiagnostics());
|
|
134
|
-
const structuralDiagnostics = getErrorDiagnostics(ngcProgram.getNgStructuralDiagnostics());
|
|
135
|
-
const configDiagnostics = getErrorDiagnostics([...program.getOptionsDiagnostics(), ...ngcProgram.getNgOptionDiagnostics()]);
|
|
136
|
-
if (configDiagnostics.length) {
|
|
137
|
-
logger.warn(`\nTypeScript project "${tsconfigPath}" has configuration errors. This could cause ` +
|
|
138
|
-
`an incomplete migration. Please fix the following failures and rerun the migration:`);
|
|
139
|
-
logger.error(ts.formatDiagnostics(configDiagnostics, host));
|
|
140
|
-
return null;
|
|
141
|
-
}
|
|
142
|
-
// Syntactic TypeScript errors can throw off the query analysis and therefore we want
|
|
143
|
-
// to notify the developer that we couldn't analyze parts of the project. Developers
|
|
144
|
-
// can just re-run the migration after fixing these failures.
|
|
145
|
-
if (syntacticDiagnostics.length) {
|
|
146
|
-
logger.warn(`\nTypeScript project "${tsconfigPath}" has syntactical errors which could cause ` +
|
|
147
|
-
`an incomplete migration. Please fix the following failures and rerun the migration:`);
|
|
148
|
-
logger.error(ts.formatDiagnostics(syntacticDiagnostics, host));
|
|
149
|
-
return null;
|
|
150
|
-
}
|
|
151
|
-
if (structuralDiagnostics.length) {
|
|
152
|
-
throw new Error(ts.formatDiagnostics(structuralDiagnostics, host));
|
|
153
|
-
}
|
|
154
|
-
return { program, compiler };
|
|
155
|
-
}
|
|
156
|
-
catch (e) {
|
|
157
|
-
logger.warn(`\n${MIGRATION_AOT_FAILURE} The following project failed: ${tsconfigPath}\n`);
|
|
158
|
-
logger.error(`${e.toString()}\n`);
|
|
159
|
-
return null;
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NjaGVtYXRpY3MvbWlncmF0aW9ucy91bmRlY29yYXRlZC1jbGFzc2VzLXdpdGgtZGkvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBR0gsT0FBTyxFQUF5QixtQkFBbUIsRUFBTyxNQUFNLDRCQUE0QixDQUFDO0FBRzdGLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLG1EQUFtRCxDQUFDO0FBQ25GLE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLDRDQUE0QyxDQUFDO0FBQ3BGLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDOUIsT0FBTyxLQUFLLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFakMsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDM0UsT0FBTyxFQUFDLGNBQWMsRUFBRSwyQkFBMkIsRUFBQyxNQUFNLHNDQUFzQyxDQUFDO0FBRWpHLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3RELE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQ2xFLE9BQU8sRUFBQywyQkFBMkIsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUd4RCxNQUFNLHVCQUF1QixHQUFHLHdEQUF3RDtJQUNwRiwwREFBMEQsQ0FBQztBQUUvRCxNQUFNLHFCQUFxQixHQUFHLDBEQUEwRDtJQUNwRixtRkFBbUY7SUFDbkYsMkZBQTJGLENBQUM7QUFFaEcsc0VBQXNFO0FBQ3RFLE1BQU0sQ0FBQyxPQUFPO0lBQ1osT0FBTyxDQUFDLElBQVUsRUFBRSxHQUFxQixFQUFFLEVBQUU7UUFDM0MsTUFBTSxFQUFDLFVBQVUsRUFBQyxHQUFHLHVCQUF1QixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25ELE1BQU0sUUFBUSxH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QUMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbEMsT0FBTyxJQUFJLENBQUM7S0FDYjtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtsb2dnaW5nfSBmcm9tICdAYW5ndWxhci1kZXZraXQvY29yZSc7XG5pbXBvcnQge1J1bGUsIFNjaGVtYXRpY0NvbnRleHQsIFNjaGVtYXRpY3NFeGNlcHRpb24sIFRyZWV9IGZyb20gJ0Bhbmd1bGFyLWRldmtpdC9zY2hlbWF0aWNzJztcbmltcG9ydCB7QW90Q29tcGlsZXJ9IGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyJztcbmltcG9ydCB7RGlhZ25vc3RpYyBhcyBOZ0RpYWdub3N0aWN9IGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyLWNsaSc7XG5pbXBvcnQge1BhcnRpYWxFdmFsdWF0b3J9IGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvcGFydGlhbF9ldmFsdWF0b3InO1xuaW1wb3J0IHtUeXBlU2NyaXB0UmVmbGVjdGlvbkhvc3R9IGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvcmVmbGVjdGlvbic7XG5pbXBvcnQge3JlbGF0aXZlfSBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQge2dldFByb2plY3RUc0NvbmZpZ1BhdGhzfSBmcm9tICcuLi8uLi91dGlscy9wcm9qZWN0X3RzY29uZmlnX3BhdGhzJztcbmltcG9ydCB7Y2FuTWlncmF0ZUZpbGUsIGNyZWF0ZU1pZ3JhdGlvbkNvbXBpbGVySG9zdH0gZnJvbSAnLi4vLi4vdXRpbHMvdHlwZXNjcmlwdC9jb21waWxlcl9ob3N0JztcblxuaW1wb3J0IHtjcmVhdGVOZ2NQcm9ncmFtfSBmcm9tICcuL2NyZWF0ZV9uZ2NfcHJvZ3JhbSc7XG5pbXBvcnQge05nRGVjbGFyYXRpb25Db2xsZWN0b3J9IGZyb20gJy4vbmdfZGVjbGFyYXRpb25fY29sbGVjdG9yJztcbmltcG9ydCB7VW5kZWNvcmF0ZWRDbGFzc2VzVHJhbnNmb3JtfSBmcm9tICcuL3RyYW5zZm9ybSc7XG5pbXBvcnQge1VwZGF0ZVJlY29yZGVyfSBmcm9tICcuL3VwZGF0ZV9yZWNvcmRlcic7XG5cbmNvbnN0IE1JR1JBVElPTl9SRVJVTl9NRVNTQUdFID0gJ01pZ3JhdGlvbiBjYW4gYmUgcmVydW4gd2l0aDogXCJuZyB1cGRhdGUgQGFuZ3VsYXIvY29yZSAnICtcbiAgICAnLS1taWdyYXRlLW9ubHkgbWlncmF0aW9uLXY5LXVuZGVjb3JhdGVkLWNsYXNzZXMtd2l0aC1kaVwiJztcblxuY29uc3QgTUlHUkFUSU9OX0FPVF9GQUlMVVJFID0gJ1RoaXMgbWlncmF0aW9uIHVzZXMgdGhlIEFuZ3VsYXIgY29tcGlsZXIgaW50ZXJuYWxseSBhbmQgJyArXG4gICAgJ3RoZXJlZm9yZSBwcm9qZWN0cyB0aGF0IG5vIGxvbmdlciBidWlsZCBzdWNjZXNzZnVsbHkgYWZ0ZXIgdGhlIHVwZGF0ZSBjYW5ub3QgcnVuICcgK1xuICAgICd0aGUgbWlncmF0aW9uLiBQbGVhc2UgZW5zdXJlIHRoZXJlIGFyZSBubyBBT1QgY29tcGlsYXRpb24gZXJyb3JzIGFuZCByZXJ1biB0aGUgbWlncmF0aW9uLic7XG5cbi8qKiBFbnRyeSBwb2ludCBmb3IgdGhlIFY5IFwidW5kZWNvcmF0ZWQtY2xhc3Nlcy13aXRoLWRpXCIgbWlncmF0aW9uLiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKTogUnVsZSB7XG4gIHJldHVybiAodHJlZTogVHJlZSwgY3R4OiBTY2hlbWF0aWNDb250ZXh0KSA9PiB7XG4gICAgY29uc3Qge2J1aWxkUGF0aHN9ID0gZ2V0UHJvamVjdFRzQ29uZmlnUGF0aHModHJlZSk7XG4gICAgY29uc3QgYmFzZVBhdGggPSBwcm9jZXNzLmN3ZCgpO1xuICAgIGNvbnN0IGZhaWx1cmVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGxldCBwcm9ncmFtRXJyb3IgPSBmYWxzZTtcblxuICAgIGlmICghYnVpbGRQYXRocy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBTY2hlbWF0aWNzRXhjZXB0aW9uKFxuICAgICAgICAgICdDb3VsZCBub3QgZmluZCBhbnkgdHNjb25maWcgZmlsZS4gQ2Fubm90IG1pZ3JhdGUgdW5kZWNvcmF0ZWQgZGVyaXZlZCBjbGFzc2VzIGFuZCAnICtcbiAgICAgICAgICAndW5kZWNvcmF0ZWQgYmFzZSBjbGFzc2VzIHdoaWNoIHVzZSBESS4nKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHRzY29uZmlnUGF0aCBvZiBidWlsZFBhdGhzKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBydW5VbmRlY29yYXRlZENsYXNzZXNNaWdyYXRpb24odHJlZSwgdHNjb25maWdQYXRoLCBiYXNlUGF0aCwgY3R4LmxvZ2dlcik7XG4gICAgICBmYWlsdXJlcy5wdXNoKC4uLnJlc3VsdC5mYWlsdXJlcyk7XG4gICAgICBwcm9ncmFtRXJyb3IgPSBwcm9ncmFtRXJyb3IgfHwgISFyZXN1bHQucHJvZ3JhbUVycm9yO1xuICAgIH1cblxuICAgIGlmIChwcm9ncmFtRXJyb3IpIHtcbiAgICAgIGN0eC5sb2dnZXIuaW5mbygnQ291bGQgbm90IG1pZ3JhdGUgYWxsIHVuZGVjb3JhdGVkIGNsYXNzZXMgdGhhdCB1c2UgZGVwZW5kZW5jeScpO1xuICAgICAgY3R4LmxvZ2dlci5pbmZvKCdpbmplY3Rpb24uIFNvbWUgcHJvamVjdCB0YXJnZXRzIGNvdWxkIG5vdCBiZSBhbmFseXplZCBkdWUgdG8nKTtcbiAgICAgIGN0eC5sb2dnZXIuaW5mbygnVHlwZVNjcmlwdCBwcm9ncmFtIGZhaWx1cmVzLlxcbicpO1xuICAgICAgY3R4LmxvZ2dlci5pbmZvKGAke01JR1JBVElPTl9SRVJVTl9NRVNTQUdFfVxcbmApO1xuXG4gICAgICBpZiAoZmFpbHVyZXMubGVuZ3RoKSB7XG4gICAgICAgIGN0eC5sb2dnZXIuaW5mbygnUGxlYXNlIG1hbnVhbGx5IGZpeCB0aGUgZm9sbG93aW5nIGZhaWx1cmVzIGFuZCByZS1ydW4gdGhlJyk7XG4gICAgICAgIGN0eC5sb2dnZXIuaW5mbygnbWlncmF0aW9uIG9uY2UgdGhlIFR5cGVTY3JpcHQgcHJvZ3JhbSBmYWlsdXJlcyBhcmUgcmVzb2x2ZWQuJyk7XG4gICAgICAgIGZhaWx1cmVzLmZvckVhY2gobWVzc2FnZSA9PiBjdHgubG9nZ2VyLndhcm4oYOKukSAgICR7bWVzc2FnZX1gKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChmYWlsdXJlcy5sZW5ndGgpIHtcbiAgICAgIGN0eC5sb2dnZXIuaW5mbygnQ291bGQgbm90IG1pZ3JhdGUgYWxsIHVuZGVjb3JhdGVkIGNsYXNzZXMgdGhhdCB1c2UgZGVwZW5kZW5jeScpO1xuICAgICAgY3R4LmxvZ2dlci5pbmZvKCdpbmplY3Rpb24uIFBsZWFzZSBtYW51YWxseSBmaXggdGhlIGZvbGxvd2luZyBmYWlsdXJlczonKTtcbiAgICAgIGZhaWx1cmVzLmZvckVhY2gobWVzc2FnZSA9PiBjdHgubG9nZ2VyLndhcm4oYOKukSAgICR7bWVzc2FnZX1gKSk7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBydW5VbmRlY29yYXRlZENsYXNzZXNNaWdyYXRpb24oXG4gICAgdHJlZTogVHJlZSwgdHNjb25maWdQYXRoOiBzdHJpbmcsIGJhc2VQYXRoOiBzdHJpbmcsXG4gICAgbG9nZ2VyOiBsb2dnaW5nLkxvZ2dlckFwaSk6IHtmYWlsdXJlczogc3RyaW5nW10sIHByb2dyYW1FcnJvcj86IGJvb2xlYW59IHtcbiAgY29uc3QgZmFpbHVyZXM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IHByb2dyYW1EYXRhID0gZ3JhY2VmdWxseUNyZWF0ZVByb2dyYW0odHJlZSwgYmFzZVBhdGgsIHRzY29uZmlnUGF0aCwgbG9nZ2VyKTtcblxuICAvLyBHcmFjZWZ1bGx5IGV4aXQgaWYgdGhlIHByb2dyYW0gY291bGQgbm90IGJlIGNyZWF0ZWQuXG4gIGlmIChwcm9ncmFtRGF0YSA9PT0gbnVsbCkge1xuICAgIHJldHVybiB7ZmFpbHVyZXM6IFtdLCBwcm9ncmFtRXJyb3I6IHRydWV9O1xuICB9XG5cbiAgY29uc3Qge3Byb2dyYW0sIGNvbXBpbGVyfSA9IHByb2dyYW1EYXRhO1xuICBjb25zdCB0eXBlQ2hlY2tlciA9IHByb2dyYW0uZ2V0VHlwZUNoZWNrZXIoKTtcbiAgY29uc3QgcGFydGlhbEV2YWx1YXRvciA9IG5ldyBQYXJ0aWFsRXZhbHVhdG9yKFxuICAgICAgbmV3IFR5cGVTY3JpcHRSZWZsZWN0aW9uSG9zdCh0eXBlQ2hlY2tlciksIHR5cGVDaGVja2VyLCAvKiBkZXBlbmRlbmN5VHJhY2tlciAqLyBudWxsKTtcbiAgY29uc3QgZGVjbGFyYXRpb25Db2xsZWN0b3IgPSBuZXcgTmdEZWNsYXJhdGlvbkNvbGxlY3Rvcih0eXBlQ2hlY2tlciwgcGFydGlhbEV2YWx1YXRvcik7XG4gIGNvbnN0IHNvdXJjZUZpbGVzID1cbiAgICAgIHByb2dyYW0uZ2V0U291cmNlRmlsZXMoKS5maWx0ZXIoc291cmNlRmlsZSA9PiBjYW5NaWdyYXRlRmlsZShiYXNlUGF0aCwgc291cmNlRmlsZSwgcHJvZ3JhbSkpO1xuXG4gIC8vIEFuYWx5emUgc291cmNlIGZpbGVzIGJ5IGRldGVjdGluZyBhbGwgZGlyZWN0aXZlcywgY29tcG9uZW50cyBhbmQgcHJvdmlkZXJzLlxuICBzb3VyY2VGaWxlcy5mb3JFYWNoKHNvdXJjZUZpbGUgPT4gZGVjbGFyYXRpb25Db2xsZWN0b3IudmlzaXROb2RlKHNvdXJjZUZpbGUpKTtcblxuICBjb25zdCB7ZGVjb3JhdGVkRGlyZWN0aXZlcywgZGVjb3JhdGVkUHJvdmlkZXJzLCB1bmRlY29yYXRlZERlY2xhcmF0aW9uc30gPSBkZWNsYXJhdGlvbkNvbGxlY3RvcjtcbiAgY29uc3QgdHJhbnNmb3JtID1cbiAgICAgIG5ldyBVbmRlY29yYXRlZENsYXNzZXNUcmFuc2Zvcm0odHlwZUNoZWNrZXIsIGNvbXBpbGVyLCBwYXJ0aWFsRXZhbHVhdG9yLCBnZXRVcGRhdGVSZWNvcmRlcik7XG4gIGNvbnN0IHVwZGF0ZVJlY29yZGVycyA9IG5ldyBNYXA8dHMuU291cmNlRmlsZSwgVXBkYXRlUmVjb3JkZXI+KCk7XG5cbiAgLy8gUnVuIHRoZSBtaWdyYXRpb25zIGZvciBkZWNvcmF0ZWQgcHJvdmlkZXJzIGFuZCBib3RoIGRlY29yYXRlZCBhbmQgdW5kZWNvcmF0ZWRcbiAgLy8gZGlyZWN0aXZlcy4gVGhlIHRyYW5zZm9ybSBmYWlsdXJlcyBhcmUgY29sbGVjdGVkIGFuZCBjb252ZXJ0ZWQgaW50byBodW1hbi1yZWFkYWJsZVxuICAvLyBmYWlsdXJlcyB3aGljaCBjYW4gYmUgcHJpbnRlZCB0byB0aGUgY29uc29sZS5cbiAgWy4uLnRyYW5zZm9ybS5taWdyYXRlRGVjb3JhdGVkRGlyZWN0aXZlcyhkZWNvcmF0ZWREaXJlY3RpdmVzKSxcbiAgIC4uLnRyYW5zZm9ybS5taWdyYXRlRGVjb3JhdGVkUHJvdmlkZXJzKGRlY29yYXRlZFByb3ZpZGVycyksXG4gICAuLi50cmFuc2Zvcm0ubWlncmF0ZVVuZGVjb3JhdGVkRGVjbGFyYXRpb25zKEFycmF5LmZyb20odW5kZWNvcmF0ZWREZWNsYXJhdGlvbnMpKV1cbiAgICAgIC5mb3JFYWNoKCh7bm9kZSwgbWVzc2FnZX0pID0+IHtcbiAgICAgICAgY29uc3Qgbm9kZVNvdXJjZUZpbGUgPSBub2RlLmdldFNvdXJjZUZpbGUoKTtcbiAgICAgICAgY29uc3QgcmVsYXRpdmVGaWxlUGF0aCA9IHJlbGF0aXZlKGJhc2VQYXRoLCBub2RlU291cmNlRmlsZS5maWxlTmFtZSk7XG4gICAgICAgIGNvbnN0IHtsaW5lLCBjaGFyYWN0ZXJ9ID1cbiAgICAgICAgICAgIHRzLmdldExpbmVBbmRDaGFyYWN0ZXJPZlBvc2l0aW9uKG5vZGUuZ2V0U291cmNlRmlsZSgpLCBub2RlLmdldFN0YXJ0KCkpO1xuICAgICAgICBmYWlsdXJlcy5wdXNoKGAke3JlbGF0aXZlRmlsZVBhdGh9QCR7bGluZSArIDF9OiR7Y2hhcmFjdGVyICsgMX06ICR7bWVzc2FnZX1gKTtcbiAgICAgIH0pO1xuXG4gIC8vIFJlY29yZCB0aGUgY2hhbmdlcyBjb2xsZWN0ZWQgaW4gdGhlIGltcG9ydCBtYW5hZ2VyIGFuZCB0cmFuc2Zvcm1lci5cbiAgdHJhbnNmb3JtLnJlY29yZENoYW5nZXMoKTtcblxuICAvLyBXYWxrIHRocm91Z2ggZWFjaCB1cGRhdGUgcmVjb3JkZXIgYW5kIGNvbW1pdCB0aGUgdXBkYXRlLiBXZSBuZWVkIHRvIGNvbW1pdCB0aGVcbiAgLy8gdXBkYXRlcyBpbiBiYXRjaGVzIHBlciBzb3VyY2UgZmlsZSBhcyB0aGVyZSBjYW4gYmUgb25seSBvbmUgcmVjb3JkZXIgcGVyIHNvdXJjZVxuICAvLyBmaWxlIGluIG9yZGVyIHRvIGF2b2lkIHNoaWZ0ZWQgY2hhcmFjdGVyIG9mZnNldHMuXG4gIHVwZGF0ZVJlY29yZGVycy5mb3JFYWNoKHJlY29yZGVyID0+IHJlY29yZGVyLmNvbW1pdFVwZGF0ZSgpKTtcblxuICByZXR1cm4ge2ZhaWx1cmVzfTtcblxuICAvKiogR2V0cyB0aGUgdXBkYXRlIHJlY29yZGVyIGZvciB0aGUgc3BlY2lmaWVkIHNvdXJjZSBmaWxlLiAqL1xuICBmdW5jdGlvbiBnZXRVcGRhdGVSZWNvcmRlcihzb3VyY2VGaWxlOiB0cy5Tb3VyY2VGaWxlKTogVXBkYXRlUmVjb3JkZXIge1xuICAgIGlmICh1cGRhdGVSZWNvcmRlcnMuaGFzKHNvdXJjZUZpbGUpKSB7XG4gICAgICByZXR1cm4gdXBkYXRlUmVjb3JkZXJzLmdldChzb3VyY2VGaWxlKSE7XG4gICAgfVxuICAgIGNvbnN0IHRyZWVSZWNvcmRlciA9IHRyZWUuYmVnaW5VcGRhdGUocmVsYXRpdmUoYmFzZVBhdGgsIHNvdXJjZUZpbGUuZmlsZU5hbWUpKTtcbiAgICBjb25zdCByZWNvcmRlcjogVXBkYXRlUmVjb3JkZXIgPSB7XG4gICAgICBhZGRDbGFzc0NvbW1lbnQobm9kZTogdHMuQ2xhc3NEZWNsYXJhdGlvbiwgdGV4dDogc3RyaW5nKSB7XG4gICAgICAgIHRyZWVSZWNvcmRlci5pbnNlcnRMZWZ0KG5vZGUubWVtYmVycy5wb3MsIGBcXG4gIC8vICR7dGV4dH1cXG5gKTtcbiAgICAgIH0sXG4gICAgICBhZGRDbGFzc0RlY29yYXRvcihub2RlOiB0cy5DbGFzc0RlY2xhcmF0aW9uLCB0ZXh0OiBzdHJpbmcpIHtcbiAgICAgICAgLy8gTmV3IGltcG9ydHMgc2hvdWxkIGJlIGluc2VydGVkIGF0IHRoZSBsZWZ0IHdoaWxlIGRlY29yYXRvcnMgc2hvdWxkIGJlIGluc2VydGVkXG4gICAgICAgIC8vIGF0IHRoZSByaWdodCBpbiBvcmRlciB0byBlbnN1cmUgdGhhdCBpbXBvcnRzIGFyZSBpbnNlcnRlZCBiZWZvcmUgdGhlIGRlY29yYXRvclxuICAgICAgICAvLyBpZiB0aGUgc3RhcnQgcG9zaXRpb24gb2YgaW1wb3J0IGFuZCBkZWNvcmF0b3IgaXMgdGhlIHNvdXJjZSBmaWxlIHN0YXJ0LlxuICAgICAgICB0cmVlUmVjb3JkZXIuaW5zZXJ0UmlnaHQobm9kZS5nZXRTdGFydCgpLCBgJHt0ZXh0fVxcbmApO1xuICAgICAgfSxcbiAgICAgIGFkZE5ld0ltcG9ydChzdGFydDogbnVtYmVyLCBpbXBvcnRUZXh0OiBzdHJpbmcpIHtcbiAgICAgICAgLy8gTmV3IGltcG9ydHMgc2hvdWxkIGJlIGluc2VydGVkIGF0IHRoZSBsZWZ0IHdoaWxlIGRlY29yYXRvcnMgc2hvdWxkIGJlIGluc2VydGVkXG4gICAgICAgIC8vIGF0IHRoZSByaWdodCBpbiBvcmRlciB0byBlbnN1cmUgdGhhdCBpbXBvcnRzIGFyZSBpbnNlcnRlZCBiZWZvcmUgdGhlIGRlY29yYXRvclxuICAgICAgICAvLyBpZiB0aGUgc3RhcnQgcG9zaXRpb24gb2YgaW1wb3J0IGFuZCBkZWNvcmF0b3IgaXMgdGhlIHNvdXJjZSBmaWxlIHN0YXJ0LlxuICAgICAgICB0cmVlUmVjb3JkZXIuaW5zZXJ0TGVmdChzdGFydCwgaW1wb3J0VGV4dCk7XG4gICAgICB9LFxuICAgICAgdXBkYXRlRXhpc3RpbmdJbXBvcnQobmFtZWRCaW5kaW5nczogdHMuTmFtZWRJbXBvcnRzLCBuZXdOYW1lZEJpbmRpbmdzOiBzdHJpbmcpIHtcbiAgICAgICAgdHJlZVJlY29yZGVyLnJlbW92ZShuYW1lZEJpbmRpbmdzLmdldFN0YXJ0KCksIG5hbWVkQmluZGluZ3MuZ2V0V2lkdGgoKSk7XG4gICAgICAgIHRyZWVSZWNvcmRlci5pbnNlcnRSaWdodChuYW1lZEJpbmRpbmdzLmdldFN0YXJ0KCksIG5ld05hbWVkQmluZGluZ3MpO1xuICAgICAgfSxcbiAgICAgIGNvbW1pdFVwZGF0ZSgpIHtcbiAgICAgICAgdHJlZS5jb21taXRVcGRhdGUodHJlZVJlY29yZGVyKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHVwZGF0ZVJlY29yZGVycy5zZXQoc291cmNlRmlsZSwgcmVjb3JkZXIpO1xuICAgIHJldHVybiByZWNvcmRlcjtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRFcnJvckRpYWdub3N0aWNzKGRpYWdub3N0aWNzOiBSZWFkb25seUFycmF5PHRzLkRpYWdub3N0aWN8TmdEaWFnbm9zdGljPikge1xuICByZXR1cm4gPHRzLkRpYWdub3N0aWNbXT5kaWFnbm9zdGljcy5maWx0ZXIoZCA9PiBkLmNhdGVnb3J5ID09PSB0cy5EaWFnbm9zdGljQ2F0ZWdvcnkuRXJyb3IpO1xufVxuXG5mdW5jdGlvbiBncmFjZWZ1bGx5Q3JlYXRlUHJvZ3JhbShcbiAgICB0cmVlOiBUcmVlLCBiYXNlUGF0aDogc3RyaW5nLCB0c2NvbmZpZ1BhdGg6IHN0cmluZyxcbiAgICBsb2dnZXI6IGxvZ2dpbmcuTG9nZ2VyQXBpKToge2NvbXBpbGVyOiBBb3RDb21waWxlciwgcHJvZ3JhbTogdHMuUHJvZ3JhbX18bnVsbCB7XG4gIHRyeSB7XG4gICAgY29uc3Qge25nY1Byb2dyYW0sIGhvc3QsIHByb2dyYW0sIGNvbXBpbGVyfSA9IGNyZWF0ZU5nY1Byb2dyYW0oXG4gICAgICAgIChvcHRpb25zKSA9PiBjcmVhdGVNaWdyYXRpb25Db21waWxlckhvc3QodHJlZSwgb3B0aW9ucywgYmFzZVBhdGgpLCB0c2NvbmZpZ1BhdGgpO1xuICAgIGNvbnN0IHN5bnRhY3RpY0RpYWdub3N0aWNzID0gZ2V0RXJyb3JEaWFnbm9zdGljcyhuZ2NQcm9ncmFtLmdldFRzU3ludGFjdGljRGlhZ25vc3RpY3MoKSk7XG4gICAgY29uc3Qgc3RydWN0dXJhbERpYWdub3N0aWNzID0gZ2V0RXJyb3JEaWFnbm9zdGljcyhuZ2NQcm9ncmFtLmdldE5nU3RydWN0dXJhbERpYWdub3N0aWNzKCkpO1xuICAgIGNvbnN0IGNvbmZpZ0RpYWdub3N0aWNzID0gZ2V0RXJyb3JEaWFnbm9zdGljcyhcbiAgICAgICAgWy4uLnByb2dyYW0uZ2V0T3B0aW9uc0RpYWdub3N0aWNzKCksIC4uLm5nY1Byb2dyYW0uZ2V0TmdPcHRpb25EaWFnbm9zdGljcygpXSk7XG5cbiAgICBpZiAoY29uZmlnRGlhZ25vc3RpY3MubGVuZ3RoKSB7XG4gICAgICBsb2dnZXIud2FybihcbiAgICAgICAgICBgXFxuVHlwZVNjcmlwdCBwcm9qZWN0IFwiJHt0c2NvbmZpZ1BhdGh9XCIgaGFzIGNvbmZpZ3VyYXRpb24gZXJyb3JzLiBUaGlzIGNvdWxkIGNhdXNlIGAgK1xuICAgICAgICAgIGBhbiBpbmNvbXBsZXRlIG1pZ3JhdGlvbi4gUGxlYXNlIGZpeCB0aGUgZm9sbG93aW5nIGZhaWx1cmVzIGFuZCByZXJ1biB0aGUgbWlncmF0aW9uOmApO1xuICAgICAgbG9nZ2VyLmVycm9yKHRzLmZvcm1hdERpYWdub3N0aWNzKGNvbmZpZ0RpYWdub3N0aWNzLCBob3N0KSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBTeW50YWN0aWMgVHlwZVNjcmlwdCBlcnJvcnMgY2FuIHRocm93IG9mZiB0aGUgcXVlcnkgYW5hbHlzaXMgYW5kIHRoZXJlZm9yZSB3ZSB3YW50XG4gICAgLy8gdG8gbm90aWZ5IHRoZSBkZXZlbG9wZXIgdGhhdCB3ZSBjb3VsZG4ndCBhbmFseXplIHBhcnRzIG9mIHRoZSBwcm9qZWN0LiBEZXZlbG9wZXJzXG4gICAgLy8gY2FuIGp1c3QgcmUtcnVuIHRoZSBtaWdyYXRpb24gYWZ0ZXIgZml4aW5nIHRoZXNlIGZhaWx1cmVzLlxuICAgIGlmIChzeW50YWN0aWNEaWFnbm9zdGljcy5sZW5ndGgpIHtcbiAgICAgIGxvZ2dlci53YXJuKFxuICAgICAgICAgIGBcXG5UeXBlU2NyaXB0IHByb2plY3QgXCIke3RzY29uZmlnUGF0aH1cIiBoYXMgc3ludGFjdGljYWwgZXJyb3JzIHdoaWNoIGNvdWxkIGNhdXNlIGAgK1xuICAgICAgICAgIGBhbiBpbmNvbXBsZXRlIG1pZ3JhdGlvbi4gUGxlYXNlIGZpeCB0aGUgZm9sbG93aW5nIGZhaWx1cmVzIGFuZCByZXJ1biB0aGUgbWlncmF0aW9uOmApO1xuICAgICAgbG9nZ2VyLmVycm9yKHRzLmZvcm1hdERpYWdub3N0aWNzKHN5bnRhY3RpY0RpYWdub3N0aWNzLCBob3N0KSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoc3RydWN0dXJhbERpYWdub3N0aWNzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHRzLmZvcm1hdERpYWdub3N0aWNzKDx0cy5EaWFnbm9zdGljW10+c3RydWN0dXJhbERpYWdub3N0aWNzLCBob3N0KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtwcm9ncmFtLCBjb21waWxlcn07XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dnZXIud2FybihgXFxuJHtNSUdSQVRJT05fQU9UX0ZBSUxVUkV9IFRoZSBmb2xsb3dpbmcgcHJvamVjdCBmYWlsZWQ6ICR7dHNjb25maWdQYXRofVxcbmApO1xuICAgIGxvZ2dlci5lcnJvcihgJHtlLnRvU3RyaW5nKCl9XFxuYCk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cbiJdfQ==
|