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 | (function (factory) {
|
9 | if (typeof module === "object" && typeof module.exports === "object") {
|
10 | var v = factory(require, exports);
|
11 | if (v !== undefined) module.exports = v;
|
12 | }
|
13 | else if (typeof define === "function" && define.amd) {
|
14 | define("@angular/language-service/ivy/compiler_factory", ["require", "exports", "tslib", "@angular/compiler-cli/src/ngtsc/core", "@angular/compiler-cli/src/ngtsc/incremental", "typescript/lib/tsserverlibrary", "@angular/language-service/ivy/language_service_adapter"], factory);
|
15 | }
|
16 | })(function (require, exports) {
|
17 | ;
|
18 | Object.defineProperty(exports, "__esModule", { value: true });
|
19 | exports.CompilerFactory = void 0;
|
20 | var tslib_1 = require("tslib");
|
21 | var core_1 = require("@angular/compiler-cli/src/ngtsc/core");
|
22 | var incremental_1 = require("@angular/compiler-cli/src/ngtsc/incremental");
|
23 | var ts = require("typescript/lib/tsserverlibrary");
|
24 | var language_service_adapter_1 = require("@angular/language-service/ivy/language_service_adapter");
|
25 | var CompilerFactory = /** @class */ (function () {
|
26 | function CompilerFactory(adapter, programStrategy) {
|
27 | this.adapter = adapter;
|
28 | this.programStrategy = programStrategy;
|
29 | this.incrementalStrategy = new incremental_1.TrackedIncrementalBuildStrategy();
|
30 | this.compiler = null;
|
31 | this.lastKnownProgram = null;
|
32 | }
|
33 | /**
|
34 | * Create a new instance of the Ivy compiler if the program has changed since
|
35 | * the last time the compiler was instantiated. If the program has not changed,
|
36 | * return the existing instance.
|
37 | * @param fileName override the template if this is an external template file
|
38 | * @param options angular compiler options
|
39 | */
|
40 | CompilerFactory.prototype.getOrCreateWithChangedFile = function (fileName, options) {
|
41 | var program = this.programStrategy.getProgram();
|
42 | if (!this.compiler || program !== this.lastKnownProgram) {
|
43 | this.compiler = new core_1.NgCompiler(this.adapter, // like compiler host
|
44 | options, // angular compiler options
|
45 | program, this.programStrategy, this.incrementalStrategy, true, // enableTemplateTypeChecker
|
46 | true, // usePoisonedData
|
47 | this.lastKnownProgram, undefined);
|
48 | this.lastKnownProgram = program;
|
49 | }
|
50 | if (language_service_adapter_1.isExternalTemplate(fileName)) {
|
51 | this.overrideTemplate(fileName, this.compiler);
|
52 | }
|
53 | return this.compiler;
|
54 | };
|
55 | CompilerFactory.prototype.overrideTemplate = function (fileName, compiler) {
|
56 | var e_1, _a;
|
57 | if (!this.adapter.isTemplateDirty(fileName)) {
|
58 | return;
|
59 | }
|
60 | // 1. Get the latest snapshot
|
61 | var latestTemplate = this.adapter.readResource(fileName);
|
62 | // 2. Find all components that use the template
|
63 | var ttc = compiler.getTemplateTypeChecker();
|
64 | var components = compiler.getComponentsWithTemplateFile(fileName);
|
65 | try {
|
66 | // 3. Update component template
|
67 | for (var components_1 = tslib_1.__values(components), components_1_1 = components_1.next(); !components_1_1.done; components_1_1 = components_1.next()) {
|
68 | var component = components_1_1.value;
|
69 | if (ts.isClassDeclaration(component)) {
|
70 | ttc.overrideComponentTemplate(component, latestTemplate);
|
71 | }
|
72 | }
|
73 | }
|
74 | catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
75 | finally {
|
76 | try {
|
77 | if (components_1_1 && !components_1_1.done && (_a = components_1.return)) _a.call(components_1);
|
78 | }
|
79 | finally { if (e_1) throw e_1.error; }
|
80 | }
|
81 | };
|
82 | CompilerFactory.prototype.registerLastKnownProgram = function () {
|
83 | this.lastKnownProgram = this.programStrategy.getProgram();
|
84 | };
|
85 | return CompilerFactory;
|
86 | }());
|
87 | exports.CompilerFactory = CompilerFactory;
|
88 | });
|
89 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGlsZXJfZmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2xhbmd1YWdlLXNlcnZpY2UvaXZ5L2NvbXBpbGVyX2ZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7OztJQUVILDZEQUFnRTtJQUVoRSwyRUFBNEY7SUFFNUYsbURBQXFEO0lBRXJELG1HQUFzRjtJQUV0RjtRQUtFLHlCQUNxQixPQUErQixFQUMvQixlQUE0QztZQUQ1QyxZQUFPLEdBQVAsT0FBTyxDQUF3QjtZQUMvQixvQkFBZSxHQUFmLGVBQWUsQ0FBNkI7WUFOaEQsd0JBQW1CLEdBQUcsSUFBSSw2Q0FBK0IsRUFBRSxDQUFDO1lBQ3JFLGFBQVEsR0FBb0IsSUFBSSxDQUFDO1lBQ2pDLHFCQUFnQixHQUFvQixJQUFJLENBQUM7UUFLOUMsQ0FBQztRQUVKOzs7Ozs7V0FNRztRQUNILG9EQUEwQixHQUExQixVQUEyQixRQUFnQixFQUFFLE9BQTBCO1lBQ3JFLElBQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDbEQsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksT0FBTyxLQUFLLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtnQkFDdkQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLGlCQUFVLENBQzFCLElBQUksQ0FBQyxPQUFPLEVBQUcscUJBQXFCO2dCQUNwQyxPQUFPLEVBQVEsMkJBQTJCO2dCQUMxQyxPQUFPLEVBQ1AsSUFBSSxDQUFDLGVBQWUsRUFDcEIsSUFBSSxDQUFDLG1CQUFtQixFQUN4QixJQUFJLEVBQUcsNEJBQTRCO2dCQUNuQyxJQUFJLEVBQUcsa0JBQWtCO2dCQUN6QixJQUFJLENBQUMsZ0JBQWdCLEVBQ3JCLFNBQVMsQ0FDWixDQUFDO2dCQUNGLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxPQUFPLENBQUM7YUFDakM7WUFDRCxJQUFJLDZDQUFrQixDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUNoQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUNoRDtZQUNELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUN2QixDQUFDO1FBRU8sMENBQWdCLEdBQXhCLFVBQXlCLFFBQWdCLEVBQUUsUUFBb0I7O1lBQzdELElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDM0MsT0FBTzthQUNSO1lBQ0QsNkJBQTZCO1lBQzdCLElBQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzNELCtDQUErQztZQUMvQyxJQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztZQUM5QyxJQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsNkJBQTZCLENBQUMsUUFBUSxDQUFDLENBQUM7O2dCQUNwRSwrQkFBK0I7Z0JBQy9CLEtBQXdCLElBQUEsZUFBQSxpQkFBQSxVQUFVLENBQUEsc0NBQUEsOERBQUU7b0JBQS9CLElBQU0sU0FBUyx1QkFBQTtvQkFDbEIsSUFBSSxFQUFFLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLEVBQUU7d0JBQ3BDLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxTQUFTLEVBQUUsY0FBYyxDQUFDLENBQUM7cUJBQzFEO2lCQUNGOzs7Ozs7Ozs7UUFDSCxDQUFDO1FBRUQsa0RBQXdCLEdBQXhCO1lBQ0UsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDNUQsQ0FBQztRQUNILHNCQUFDO0lBQUQsQ0FBQyxBQTNERCxJQTJEQztJQTNEWSwwQ0FBZSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge05nQ29tcGlsZXJ9IGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvY29yZSc7XG5pbXBvcnQge05nQ29tcGlsZXJPcHRpb25zfSBmcm9tICdAYW5ndWxhci9jb21waWxlci1jbGkvc3JjL25ndHNjL2NvcmUvYXBpJztcbmltcG9ydCB7VHJhY2tlZEluY3JlbWVudGFsQnVpbGRTdHJhdGVneX0gZnJvbSAnQGFuZ3VsYXIvY29tcGlsZXItY2xpL3NyYy9uZ3RzYy9pbmNyZW1lbnRhbCc7XG5pbXBvcnQge1R5cGVDaGVja2luZ1Byb2dyYW1TdHJhdGVneX0gZnJvbSAnQGFuZ3VsYXIvY29tcGlsZXItY2xpL3NyYy9uZ3RzYy90eXBlY2hlY2svYXBpJztcbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQvbGliL3Rzc2VydmVybGlicmFyeSc7XG5cbmltcG9ydCB7aXNFeHRlcm5hbFRlbXBsYXRlLCBMYW5ndWFnZVNlcnZpY2VBZGFwdGVyfSBmcm9tICcuL2xhbmd1YWdlX3NlcnZpY2VfYWRhcHRlcic7XG5cbmV4cG9ydCBjbGFzcyBDb21waWxlckZhY3Rvcnkge1xuICBwcml2YXRlIHJlYWRvbmx5IGluY3JlbWVudGFsU3RyYXRlZ3kgPSBuZXcgVHJhY2tlZEluY3JlbWVudGFsQnVpbGRTdHJhdGVneSgpO1xuICBwcml2YXRlIGNvbXBpbGVyOiBOZ0NvbXBpbGVyfG51bGwgPSBudWxsO1xuICBwcml2YXRlIGxhc3RLbm93blByb2dyYW06IHRzLlByb2dyYW18bnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgICBwcml2YXRlIHJlYWRvbmx5IGFkYXB0ZXI6IExhbmd1YWdlU2VydmljZUFkYXB0ZXIsXG4gICAgICBwcml2YXRlIHJlYWRvbmx5IHByb2dyYW1TdHJhdGVneTogVHlwZUNoZWNraW5nUHJvZ3JhbVN0cmF0ZWd5LFxuICApIHt9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgSXZ5IGNvbXBpbGVyIGlmIHRoZSBwcm9ncmFtIGhhcyBjaGFuZ2VkIHNpbmNlXG4gICAqIHRoZSBsYXN0IHRpbWUgdGhlIGNvbXBpbGVyIHdhcyBpbnN0YW50aWF0ZWQuIElmIHRoZSBwcm9ncmFtIGhhcyBub3QgY2hhbmdlZCxcbiAgICogcmV0dXJuIHRoZSBleGlzdGluZyBpbnN0YW5jZS5cbiAgICogQHBhcmFtIGZpbGVOYW1lIG92ZXJyaWRlIHRoZSB0ZW1wbGF0ZSBpZiB0aGlzIGlzIGFuIGV4dGVybmFsIHRlbXBsYXRlIGZpbGVcbiAgICogQHBhcmFtIG9wdGlvbnMgYW5ndWxhciBjb21waWxlciBvcHRpb25zXG4gICAqL1xuICBnZXRPckNyZWF0ZVdpdGhDaGFuZ2VkRmlsZShmaWxlTmFtZTogc3RyaW5nLCBvcHRpb25zOiBOZ0NvbXBpbGVyT3B0aW9ucyk6IE5nQ29tcGlsZXIge1xuICAgIGNvbnN0IHByb2dyYW0gPSB0aGlzLnByb2dyYW1TdHJhdGVneS5nZXRQcm9ncmFtKCk7XG4gICAgaWYgKCF0aGlzLmNvbXBpbGVyIHx8IHByb2dyYW0gIT09IHRoaXMubGFzdEtub3duUHJvZ3JhbSkge1xuICAgICAgdGhpcy5jb21waWxlciA9IG5ldyBOZ0NvbXBpbGVyKFxuICAgICAgICAgIHRoaXMuYWRhcHRlciwgIC8vIGxpa2UgY29tcGlsZXIgaG9zdFxuICAgICAgICAgIG9wdGlvbnMsICAgICAgIC8vIGFuZ3VsYXIgY29tcGlsZXIgb3B0aW9uc1xuICAgICAgICAgIHByb2dyYW0sXG4gICAgICAgICAgdGhpcy5wcm9ncmFtU3RyYXRlZ3ksXG4gICAgICAgICAgdGhpcy5pbmNyZW1lbnRhbFN0cmF0ZWd5LFxuICAgICAgICAgIHRydWUsICAvLyBlbmFibGVUZW1wbGF0ZVR5cGVDaGVja2VyXG4gICAgICAgICAgdHJ1ZSwgIC8vIHVzZVBvaXNvbmVkRGF0YVxuICAgICAgICAgIHRoaXMubGFzdEtub3duUHJvZ3JhbSxcbiAgICAgICAgICB1bmRlZmluZWQsICAvLyBwZXJmUmVjb3JkZXIgKHVzZSBkZWZhdWx0KVxuICAgICAgKTtcbiAgICAgIHRoaXMubGFzdEtub3duUHJvZ3JhbSA9IHByb2dyYW07XG4gICAgfVxuICAgIGlmIChpc0V4dGVybmFsVGVtcGxhdGUoZmlsZU5hbWUpKSB7XG4gICAgICB0aGlzLm92ZXJyaWRlVGVtcGxhdGUoZmlsZU5hbWUsIHRoaXMuY29tcGlsZXIpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jb21waWxlcjtcbiAgfVxuXG4gIHByaXZhdGUgb3ZlcnJpZGVUZW1wbGF0ZShmaWxlTmFtZTogc3RyaW5nLCBjb21waWxlcjogTmdDb21waWxlcikge1xuICAgIGlmICghdGhpcy5hZGFwdGVyLmlzVGVtcGxhdGVEaXJ0eShmaWxlTmFtZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gMS4gR2V0IHRoZSBsYXRlc3Qgc25hcHNob3RcbiAgICBjb25zdCBsYXRlc3RUZW1wbGF0ZSA9IHRoaXMuYWRhcHRlci5yZWFkUmVzb3VyY2UoZmlsZU5hbWUpO1xuICAgIC8vIDIuIEZpbmQgYWxsIGNvbXBvbmVudHMgdGhhdCB1c2UgdGhlIHRlbXBsYXRlXG4gICAgY29uc3QgdHRjID0gY29tcGlsZXIuZ2V0VGVtcGxhdGVUeXBlQ2hlY2tlcigpO1xuICAgIGNvbnN0IGNvbXBvbmVudHMgPSBjb21waWxlci5nZXRDb21wb25lbnRzV2l0aFRlbXBsYXRlRmlsZShmaWxlTmFtZSk7XG4gICAgLy8gMy4gVXBkYXRlIGNvbXBvbmVudCB0ZW1wbGF0ZVxuICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIGNvbXBvbmVudHMpIHtcbiAgICAgIGlmICh0cy5pc0NsYXNzRGVjbGFyYXRpb24oY29tcG9uZW50KSkge1xuICAgICAgICB0dGMub3ZlcnJpZGVDb21wb25lbnRUZW1wbGF0ZShjb21wb25lbnQsIGxhdGVzdFRlbXBsYXRlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZWdpc3Rlckxhc3RLbm93blByb2dyYW0oKSB7XG4gICAgdGhpcy5sYXN0S25vd25Qcm9ncmFtID0gdGhpcy5wcm9ncmFtU3RyYXRlZ3kuZ2V0UHJvZ3JhbSgpO1xuICB9XG59XG4iXX0= |
\ | No newline at end of file |