1 | "use strict";
|
---|
2 | /**
|
---|
3 | * @license
|
---|
4 | * Copyright Google LLC All Rights Reserved.
|
---|
5 | *
|
---|
6 | * Use of this source code is governed by an MIT-style license that can be
|
---|
7 | * found in the LICENSE file at https://angular.io/license
|
---|
8 | */
|
---|
9 | Object.defineProperty(exports, "__esModule", { value: true });
|
---|
10 | exports.getKeywords = void 0;
|
---|
11 | const core_1 = require("@babel/core");
|
---|
12 | /**
|
---|
13 | * The name of the Angular class metadata function created by the Angular compiler.
|
---|
14 | */
|
---|
15 | const SET_CLASS_METADATA_NAME = 'ɵsetClassMetadata';
|
---|
16 | /**
|
---|
17 | * Provides one or more keywords that if found within the content of a source file indicate
|
---|
18 | * that this plugin should be used with a source file.
|
---|
19 | *
|
---|
20 | * @returns An a string iterable containing one or more keywords.
|
---|
21 | */
|
---|
22 | function getKeywords() {
|
---|
23 | return [SET_CLASS_METADATA_NAME];
|
---|
24 | }
|
---|
25 | exports.getKeywords = getKeywords;
|
---|
26 | /**
|
---|
27 | * A babel plugin factory function for eliding the Angular class metadata function (`ɵsetClassMetadata`).
|
---|
28 | *
|
---|
29 | * @returns A babel plugin object instance.
|
---|
30 | */
|
---|
31 | function default_1() {
|
---|
32 | return {
|
---|
33 | visitor: {
|
---|
34 | CallExpression(path) {
|
---|
35 | var _a;
|
---|
36 | const callee = path.node.callee;
|
---|
37 | // The function being called must be the metadata function name
|
---|
38 | let calleeName;
|
---|
39 | if (core_1.types.isMemberExpression(callee) && core_1.types.isIdentifier(callee.property)) {
|
---|
40 | calleeName = callee.property.name;
|
---|
41 | }
|
---|
42 | else if (core_1.types.isIdentifier(callee)) {
|
---|
43 | calleeName = callee.name;
|
---|
44 | }
|
---|
45 | if (calleeName !== SET_CLASS_METADATA_NAME) {
|
---|
46 | return;
|
---|
47 | }
|
---|
48 | // There must be four arguments that meet the following criteria:
|
---|
49 | // * First must be an identifier
|
---|
50 | // * Second must be an array literal
|
---|
51 | const callArguments = path.node.arguments;
|
---|
52 | if (callArguments.length !== 4 ||
|
---|
53 | !core_1.types.isIdentifier(callArguments[0]) ||
|
---|
54 | !core_1.types.isArrayExpression(callArguments[1])) {
|
---|
55 | return;
|
---|
56 | }
|
---|
57 | // The metadata function is always emitted inside a function expression
|
---|
58 | if (!((_a = path.getFunctionParent()) === null || _a === void 0 ? void 0 : _a.isFunctionExpression())) {
|
---|
59 | return;
|
---|
60 | }
|
---|
61 | // Replace the metadata function with `void 0` which is the equivalent return value
|
---|
62 | // of the metadata function.
|
---|
63 | path.replaceWith(path.scope.buildUndefinedNode());
|
---|
64 | },
|
---|
65 | },
|
---|
66 | };
|
---|
67 | }
|
---|
68 | exports.default = default_1;
|
---|