UNPKG

10.7 kBJavaScriptView Raw
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 "use strict";
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