1 | /// <amd-module name="@angular/compiler-cli/ngcc/src/host/ngcc_host" />
|
---|
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 | import * as ts from 'typescript';
|
---|
10 | import { ClassDeclaration, Declaration, Decorator, ReflectionHost } from '../../../src/ngtsc/reflection';
|
---|
11 | import { SymbolWithValueDeclaration } from '../../../src/ngtsc/util/src/typescript';
|
---|
12 | export declare const PRE_R3_MARKER = "__PRE_R3__";
|
---|
13 | export declare const POST_R3_MARKER = "__POST_R3__";
|
---|
14 | export declare type SwitchableVariableDeclaration = ts.VariableDeclaration & {
|
---|
15 | initializer: ts.Identifier;
|
---|
16 | };
|
---|
17 | export declare function isSwitchableVariableDeclaration(node: ts.Node): node is SwitchableVariableDeclaration;
|
---|
18 | /**
|
---|
19 | * The symbol corresponding to a "class" declaration. I.e. a `ts.Symbol` whose `valueDeclaration` is
|
---|
20 | * a `ClassDeclaration`.
|
---|
21 | */
|
---|
22 | export declare type ClassSymbol = ts.Symbol & {
|
---|
23 | valueDeclaration: ClassDeclaration;
|
---|
24 | };
|
---|
25 | /**
|
---|
26 | * A representation of a class that accounts for the potential existence of two `ClassSymbol`s for a
|
---|
27 | * given class, as the compiled JavaScript bundles that ngcc reflects on can have two declarations.
|
---|
28 | */
|
---|
29 | export interface NgccClassSymbol {
|
---|
30 | /**
|
---|
31 | * The name of the class.
|
---|
32 | */
|
---|
33 | name: string;
|
---|
34 | /**
|
---|
35 | * Represents the symbol corresponding with the outer declaration of the class. This should be
|
---|
36 | * considered the public class symbol, i.e. its declaration is visible to the rest of the program.
|
---|
37 | */
|
---|
38 | declaration: ClassSymbol;
|
---|
39 | /**
|
---|
40 | * Represents the symbol corresponding with the inner declaration of the class, referred to as its
|
---|
41 | * "implementation". This is not necessarily a `ClassSymbol` but rather just a `ts.Symbol`, as the
|
---|
42 | * inner declaration does not need to satisfy the requirements imposed on a publicly visible class
|
---|
43 | * declaration.
|
---|
44 | */
|
---|
45 | implementation: SymbolWithValueDeclaration;
|
---|
46 | /**
|
---|
47 | * Represents the symbol corresponding to a variable within a class IIFE that may be used to
|
---|
48 | * attach static properties or decorated.
|
---|
49 | */
|
---|
50 | adjacent?: SymbolWithValueDeclaration;
|
---|
51 | }
|
---|
52 | /**
|
---|
53 | * A reflection host that has extra methods for looking at non-Typescript package formats
|
---|
54 | */
|
---|
55 | export interface NgccReflectionHost extends ReflectionHost {
|
---|
56 | /**
|
---|
57 | * Find a symbol for a declaration that we think is a class.
|
---|
58 | * @param declaration The declaration whose symbol we are finding
|
---|
59 | * @returns the symbol for the declaration or `undefined` if it is not
|
---|
60 | * a "class" or has no symbol.
|
---|
61 | */
|
---|
62 | getClassSymbol(declaration: ts.Node): NgccClassSymbol | undefined;
|
---|
63 | /**
|
---|
64 | * Search the given module for variable declarations in which the initializer
|
---|
65 | * is an identifier marked with the `PRE_R3_MARKER`.
|
---|
66 | * @param module The module in which to search for switchable declarations.
|
---|
67 | * @returns An array of variable declarations that match.
|
---|
68 | */
|
---|
69 | getSwitchableDeclarations(module: ts.Node): SwitchableVariableDeclaration[];
|
---|
70 | /**
|
---|
71 | * Retrieves all decorators of a given class symbol.
|
---|
72 | * @param symbol Class symbol that can refer to a declaration which can hold decorators.
|
---|
73 | * @returns An array of decorators or null if none are declared.
|
---|
74 | */
|
---|
75 | getDecoratorsOfSymbol(symbol: NgccClassSymbol): Decorator[] | null;
|
---|
76 | /**
|
---|
77 | * Retrieves all class symbols of a given source file.
|
---|
78 | * @param sourceFile The source file to search for classes.
|
---|
79 | * @returns An array of found class symbols.
|
---|
80 | */
|
---|
81 | findClassSymbols(sourceFile: ts.SourceFile): NgccClassSymbol[];
|
---|
82 | /**
|
---|
83 | * Find the last node that is relevant to the specified class.
|
---|
84 | *
|
---|
85 | * As well as the main declaration, classes can have additional statements such as static
|
---|
86 | * properties (`SomeClass.staticProp = ...;`) and decorators (`__decorate(SomeClass, ...);`).
|
---|
87 | * It is useful to know exactly where the class "ends" so that we can inject additional
|
---|
88 | * statements after that point.
|
---|
89 | *
|
---|
90 | * @param classSymbol The class whose statements we want.
|
---|
91 | */
|
---|
92 | getEndOfClass(classSymbol: NgccClassSymbol): ts.Node;
|
---|
93 | /**
|
---|
94 | * Check whether a `Declaration` corresponds with a known declaration and set its `known` property
|
---|
95 | * to the appropriate `KnownDeclaration`.
|
---|
96 | *
|
---|
97 | * @param decl The `Declaration` to check.
|
---|
98 | * @return The passed in `Declaration` (potentially enhanced with a `KnownDeclaration`).
|
---|
99 | */
|
---|
100 | detectKnownDeclaration<T extends Declaration>(decl: T): T;
|
---|
101 | }
|
---|