source: trip-planner-front/node_modules/@angular/compiler-cli/ngcc/src/migrations/undecorated_parent_migration.js@ fa375fe

Last change on this file since fa375fe was 6a3a178, checked in by Ema <ema_spirova@…>, 3 years ago

initial commit

  • Property mode set to 100644
File size: 11.6 KB
Line 
1(function (factory) {
2 if (typeof module === "object" && typeof module.exports === "object") {
3 var v = factory(require, exports);
4 if (v !== undefined) module.exports = v;
5 }
6 else if (typeof define === "function" && define.amd) {
7 define("@angular/compiler-cli/ngcc/src/migrations/undecorated_parent_migration", ["require", "exports", "@angular/compiler-cli/src/ngtsc/imports", "@angular/compiler-cli/ngcc/src/migrations/utils"], factory);
8 }
9})(function (require, exports) {
10 "use strict";
11 Object.defineProperty(exports, "__esModule", { value: true });
12 exports.UndecoratedParentMigration = void 0;
13 var imports_1 = require("@angular/compiler-cli/src/ngtsc/imports");
14 var utils_1 = require("@angular/compiler-cli/ngcc/src/migrations/utils");
15 /**
16 * Ensure that the parents of directives and components that have no constructor are also decorated
17 * as a `Directive`.
18 *
19 * Example:
20 *
21 * ```
22 * export class BasePlain {
23 * constructor(private vcr: ViewContainerRef) {}
24 * }
25 *
26 * @Directive({selector: '[blah]'})
27 * export class DerivedDir extends BasePlain {}
28 * ```
29 *
30 * When compiling `DerivedDir` which extends the undecorated `BasePlain` class, the compiler needs
31 * to generate a directive def (`ɵdir`) for `DerivedDir`. In particular, it needs to generate a
32 * factory function that creates instances of `DerivedDir`.
33 *
34 * As `DerivedDir` has no constructor, the factory function for `DerivedDir` must delegate to the
35 * factory function for `BasePlain`. But for this to work, `BasePlain` must have a factory function,
36 * itself.
37 *
38 * This migration adds a `Directive` decorator to such undecorated parent classes, to ensure that
39 * the compiler will create the necessary factory function.
40 *
41 * The resulting code looks like:
42 *
43 * ```
44 * @Directive()
45 * export class BasePlain {
46 * constructor(private vcr: ViewContainerRef) {}
47 * }
48 *
49 * @Directive({selector: '[blah]'})
50 * export class DerivedDir extends BasePlain {}
51 * ```
52 */
53 var UndecoratedParentMigration = /** @class */ (function () {
54 function UndecoratedParentMigration() {
55 }
56 UndecoratedParentMigration.prototype.apply = function (clazz, host) {
57 // Only interested in `clazz` if it is a `Component` or a `Directive`,
58 // and it has no constructor of its own.
59 if (!utils_1.hasDirectiveDecorator(host, clazz) || utils_1.hasConstructor(host, clazz)) {
60 return null;
61 }
62 // Only interested in `clazz` if it inherits from a base class.
63 var baseClazzRef = determineBaseClass(clazz, host);
64 while (baseClazzRef !== null) {
65 var baseClazz = baseClazzRef.node;
66 // Do not proceed if the base class already has a decorator, or is not in scope of the
67 // entry-point that is currently being compiled.
68 if (utils_1.hasDirectiveDecorator(host, baseClazz) || !host.isInScope(baseClazz)) {
69 break;
70 }
71 // Inject an `@Directive()` decorator for the base class.
72 host.injectSyntheticDecorator(baseClazz, utils_1.createDirectiveDecorator(baseClazz));
73 // If the base class has a constructor, there's no need to continue walking up the
74 // inheritance chain. The injected decorator ensures that a factory is generated that does
75 // not delegate to the base class.
76 if (utils_1.hasConstructor(host, baseClazz)) {
77 break;
78 }
79 // Continue with another level of class inheritance.
80 baseClazzRef = determineBaseClass(baseClazz, host);
81 }
82 return null;
83 };
84 return UndecoratedParentMigration;
85 }());
86 exports.UndecoratedParentMigration = UndecoratedParentMigration;
87 /**
88 * Computes a reference to the base class, or `null` if the class has no base class or if it could
89 * not be statically determined.
90 */
91 function determineBaseClass(clazz, host) {
92 var baseClassExpr = host.reflectionHost.getBaseClassExpression(clazz);
93 if (baseClassExpr === null) {
94 return null;
95 }
96 var baseClass = host.evaluator.evaluate(baseClassExpr);
97 if (!(baseClass instanceof imports_1.Reference) || !utils_1.isClassDeclaration(baseClass.node)) {
98 return null;
99 }
100 return baseClass;
101 }
102});
103//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5kZWNvcmF0ZWRfcGFyZW50X21pZ3JhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyLWNsaS9uZ2NjL3NyYy9taWdyYXRpb25zL3VuZGVjb3JhdGVkX3BhcmVudF9taWdyYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBU0EsbUVBQXFEO0lBSXJELHlFQUE0RztJQUc1Rzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQXFDRztJQUNIO1FBQUE7UUFtQ0EsQ0FBQztRQWxDQywwQ0FBSyxHQUFMLFVBQU0sS0FBdUIsRUFBRSxJQUFtQjtZQUNoRCxzRUFBc0U7WUFDdEUsd0NBQXdDO1lBQ3hDLElBQUksQ0FBQyw2QkFBcUIsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksc0JBQWMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUU7Z0JBQ3RFLE9BQU8sSUFBSSxDQUFDO2FBQ2I7WUFFRCwrREFBK0Q7WUFDL0QsSUFBSSxZQUFZLEdBQUcsa0JBQWtCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ25ELE9BQU8sWUFBWSxLQUFLLElBQUksRUFBRTtnQkFDNUIsSUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQztnQkFFcEMsc0ZBQXNGO2dCQUN0RixnREFBZ0Q7Z0JBQ2hELElBQUksNkJBQXFCLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsRUFBRTtvQkFDeEUsTUFBTTtpQkFDUDtnQkFFRCx5REFBeUQ7Z0JBQ3pELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxTQUFTLEVBQUUsZ0NBQXdCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztnQkFFOUUsa0ZBQWtGO2dCQUNsRiwwRkFBMEY7Z0JBQzFGLGtDQUFrQztnQkFDbEMsSUFBSSxzQkFBYyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsRUFBRTtvQkFDbkMsTUFBTTtpQkFDUDtnQkFFRCxvREFBb0Q7Z0JBQ3BELFlBQVksR0FBRyxrQkFBa0IsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDcEQ7WUFFRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDSCxpQ0FBQztJQUFELENBQUMsQUFuQ0QsSUFtQ0M7SUFuQ1ksZ0VBQTBCO0lBcUN2Qzs7O09BR0c7SUFDSCxTQUFTLGtCQUFrQixDQUN2QixLQUF1QixFQUFFLElBQW1CO1FBQzlDLElBQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEUsSUFBSSxhQUFhLEtBQUssSUFBSSxFQUFFO1lBQzFCLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCxJQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsQ0FBQyxTQUFTLFlBQVksbUJBQVMsQ0FBQyxJQUFJLENBQUMsMEJBQWtCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzVFLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCxPQUFPLFNBQXdDLENBQUM7SUFDbEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuaW1wb3J0ICogYXMgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5cbmltcG9ydCB7UmVmZXJlbmNlfSBmcm9tICcuLi8uLi8uLi9zcmMvbmd0c2MvaW1wb3J0cyc7XG5pbXBvcnQge0NsYXNzRGVjbGFyYXRpb259IGZyb20gJy4uLy4uLy4uL3NyYy9uZ3RzYy9yZWZsZWN0aW9uJztcblxuaW1wb3J0IHtNaWdyYXRpb24sIE1pZ3JhdGlvbkhvc3R9IGZyb20gJy4vbWlncmF0aW9uJztcbmltcG9ydCB7Y3JlYXRlRGlyZWN0aXZlRGVjb3JhdG9yLCBoYXNDb25zdHJ1Y3RvciwgaGFzRGlyZWN0aXZlRGVjb3JhdG9yLCBpc0NsYXNzRGVjbGFyYXRpb259IGZyb20gJy4vdXRpbHMnO1xuXG5cbi8qKlxuICogRW5zdXJlIHRoYXQgdGhlIHBhcmVudHMgb2YgZGlyZWN0aXZlcyBhbmQgY29tcG9uZW50cyB0aGF0IGhhdmUgbm8gY29uc3RydWN0b3IgYXJlIGFsc28gZGVjb3JhdGVkXG4gKiBhcyBhIGBEaXJlY3RpdmVgLlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogYGBgXG4gKiBleHBvcnQgY2xhc3MgQmFzZVBsYWluIHtcbiAqICAgY29uc3RydWN0b3IocHJpdmF0ZSB2Y3I6IFZpZXdDb250YWluZXJSZWYpIHt9XG4gKiB9XG4gKlxuICogQERpcmVjdGl2ZSh7c2VsZWN0b3I6ICdbYmxhaF0nfSlcbiAqIGV4cG9ydCBjbGFzcyBEZXJpdmVkRGlyIGV4dGVuZHMgQmFzZVBsYWluIHt9XG4gKiBgYGBcbiAqXG4gKiBXaGVuIGNvbXBpbGluZyBgRGVyaXZlZERpcmAgd2hpY2ggZXh0ZW5kcyB0aGUgdW5kZWNvcmF0ZWQgYEJhc2VQbGFpbmAgY2xhc3MsIHRoZSBjb21waWxlciBuZWVkc1xuICogdG8gZ2VuZXJhdGUgYSBkaXJlY3RpdmUgZGVmIChgybVkaXJgKSBmb3IgYERlcml2ZWREaXJgLiBJbiBwYXJ0aWN1bGFyLCBpdCBuZWVkcyB0byBnZW5lcmF0ZSBhXG4gKiBmYWN0b3J5IGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBpbnN0YW5jZXMgb2YgYERlcml2ZWREaXJgLlxuICpcbiAqIEFzIGBEZXJpdmVkRGlyYCBoYXMgbm8gY29uc3RydWN0b3IsIHRoZSBmYWN0b3J5IGZ1bmN0aW9uIGZvciBgRGVyaXZlZERpcmAgbXVzdCBkZWxlZ2F0ZSB0byB0aGVcbiAqIGZhY3RvcnkgZnVuY3Rpb24gZm9yIGBCYXNlUGxhaW5gLiBCdXQgZm9yIHRoaXMgdG8gd29yaywgYEJhc2VQbGFpbmAgbXVzdCBoYXZlIGEgZmFjdG9yeSBmdW5jdGlvbixcbiAqIGl0c2VsZi5cbiAqXG4gKiBUaGlzIG1pZ3JhdGlvbiBhZGRzIGEgYERpcmVjdGl2ZWAgZGVjb3JhdG9yIHRvIHN1Y2ggdW5kZWNvcmF0ZWQgcGFyZW50IGNsYXNzZXMsIHRvIGVuc3VyZSB0aGF0XG4gKiB0aGUgY29tcGlsZXIgd2lsbCBjcmVhdGUgdGhlIG5lY2Vzc2FyeSBmYWN0b3J5IGZ1bmN0aW9uLlxuICpcbiAqIFRoZSByZXN1bHRpbmcgY29kZSBsb29rcyBsaWtlOlxuICpcbiAqIGBgYFxuICogQERpcmVjdGl2ZSgpXG4gKiBleHBvcnQgY2xhc3MgQmFzZVBsYWluIHtcbiAqICAgY29uc3RydWN0b3IocHJpdmF0ZSB2Y3I6IFZpZXdDb250YWluZXJSZWYpIHt9XG4gKiB9XG4gKlxuICogQERpcmVjdGl2ZSh7c2VsZWN0b3I6ICdbYmxhaF0nfSlcbiAqIGV4cG9ydCBjbGFzcyBEZXJpdmVkRGlyIGV4dGVuZHMgQmFzZVBsYWluIHt9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIFVuZGVjb3JhdGVkUGFyZW50TWlncmF0aW9uIGltcGxlbWVudHMgTWlncmF0aW9uIHtcbiAgYXBwbHkoY2xheno6IENsYXNzRGVjbGFyYXRpb24sIGhvc3Q6IE1pZ3JhdGlvbkhvc3QpOiB0cy5EaWFnbm9zdGljfG51bGwge1xuICAgIC8vIE9ubHkgaW50ZXJlc3RlZCBpbiBgY2xhenpgIGlmIGl0IGlzIGEgYENvbXBvbmVudGAgb3IgYSBgRGlyZWN0aXZlYCxcbiAgICAvLyBhbmQgaXQgaGFzIG5vIGNvbnN0cnVjdG9yIG9mIGl0cyBvd24uXG4gICAgaWYgKCFoYXNEaXJlY3RpdmVEZWNvcmF0b3IoaG9zdCwgY2xhenopIHx8IGhhc0NvbnN0cnVjdG9yKGhvc3QsIGNsYXp6KSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gT25seSBpbnRlcmVzdGVkIGluIGBjbGF6emAgaWYgaXQgaW5oZXJpdHMgZnJvbSBhIGJhc2UgY2xhc3MuXG4gICAgbGV0IGJhc2VDbGF6elJlZiA9IGRldGVybWluZUJhc2VDbGFzcyhjbGF6eiwgaG9zdCk7XG4gICAgd2hpbGUgKGJhc2VDbGF6elJlZiAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgYmFzZUNsYXp6ID0gYmFzZUNsYXp6UmVmLm5vZGU7XG5cbiAgICAgIC8vIERvIG5vdCBwcm9jZWVkIGlmIHRoZSBiYXNlIGNsYXNzIGFscmVhZHkgaGFzIGEgZGVjb3JhdG9yLCBvciBpcyBub3QgaW4gc2NvcGUgb2YgdGhlXG4gICAgICAvLyBlbnRyeS1wb2ludCB0aGF0IGlzIGN1cnJlbnRseSBiZWluZyBjb21waWxlZC5cbiAgICAgIGlmIChoYXNEaXJlY3RpdmVEZWNvcmF0b3IoaG9zdCwgYmFzZUNsYXp6KSB8fCAhaG9zdC5pc0luU2NvcGUoYmFzZUNsYXp6KSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgLy8gSW5qZWN0IGFuIGBARGlyZWN0aXZlKClgIGRlY29yYXRvciBmb3IgdGhlIGJhc2UgY2xhc3MuXG4gICAgICBob3N0LmluamVjdFN5bnRoZXRpY0RlY29yYXRvcihiYXNlQ2xhenosIGNyZWF0ZURpcmVjdGl2ZURlY29yYXRvcihiYXNlQ2xhenopKTtcblxuICAgICAgLy8gSWYgdGhlIGJhc2UgY2xhc3MgaGFzIGEgY29uc3RydWN0b3IsIHRoZXJlJ3Mgbm8gbmVlZCB0byBjb250aW51ZSB3YWxraW5nIHVwIHRoZVxuICAgICAgLy8gaW5oZXJpdGFuY2UgY2hhaW4uIFRoZSBpbmplY3RlZCBkZWNvcmF0b3IgZW5zdXJlcyB0aGF0IGEgZmFjdG9yeSBpcyBnZW5lcmF0ZWQgdGhhdCBkb2VzXG4gICAgICAvLyBub3QgZGVsZWdhdGUgdG8gdGhlIGJhc2UgY2xhc3MuXG4gICAgICBpZiAoaGFzQ29uc3RydWN0b3IoaG9zdCwgYmFzZUNsYXp6KSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgLy8gQ29udGludWUgd2l0aCBhbm90aGVyIGxldmVsIG9mIGNsYXNzIGluaGVyaXRhbmNlLlxuICAgICAgYmFzZUNsYXp6UmVmID0gZGV0ZXJtaW5lQmFzZUNsYXNzKGJhc2VDbGF6eiwgaG9zdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuLyoqXG4gKiBDb21wdXRlcyBhIHJlZmVyZW5jZSB0byB0aGUgYmFzZSBjbGFzcywgb3IgYG51bGxgIGlmIHRoZSBjbGFzcyBoYXMgbm8gYmFzZSBjbGFzcyBvciBpZiBpdCBjb3VsZFxuICogbm90IGJlIHN0YXRpY2FsbHkgZGV0ZXJtaW5lZC5cbiAqL1xuZnVuY3Rpb24gZGV0ZXJtaW5lQmFzZUNsYXNzKFxuICAgIGNsYXp6OiBDbGFzc0RlY2xhcmF0aW9uLCBob3N0OiBNaWdyYXRpb25Ib3N0KTogUmVmZXJlbmNlPENsYXNzRGVjbGFyYXRpb24+fG51bGwge1xuICBjb25zdCBiYXNlQ2xhc3NFeHByID0gaG9zdC5yZWZsZWN0aW9uSG9zdC5nZXRCYXNlQ2xhc3NFeHByZXNzaW9uKGNsYXp6KTtcbiAgaWYgKGJhc2VDbGFzc0V4cHIgPT09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGJhc2VDbGFzcyA9IGhvc3QuZXZhbHVhdG9yLmV2YWx1YXRlKGJhc2VDbGFzc0V4cHIpO1xuICBpZiAoIShiYXNlQ2xhc3MgaW5zdGFuY2VvZiBSZWZlcmVuY2UpIHx8ICFpc0NsYXNzRGVjbGFyYXRpb24oYmFzZUNsYXNzLm5vZGUpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gYmFzZUNsYXNzIGFzIFJlZmVyZW5jZTxDbGFzc0RlY2xhcmF0aW9uPjtcbn1cbiJdfQ==
Note: See TracBrowser for help on using the repository browser.