refactor(ngcc): rename ExportStatement
to ExportsStatement
(#38959)
This clarifies that this is specifically about statements of the form `exports.<name> = <declaration>`, rather than a general export statement such as `export class <ClassName> { ... }`. PR Close #38959
This commit is contained in:
parent
a5a7845593
commit
87274e3eec
@ -14,7 +14,7 @@ import {Declaration, Import} from '../../../src/ngtsc/reflection';
|
|||||||
import {BundleProgram} from '../packages/bundle_program';
|
import {BundleProgram} from '../packages/bundle_program';
|
||||||
import {FactoryMap, isDefined} from '../utils';
|
import {FactoryMap, isDefined} from '../utils';
|
||||||
|
|
||||||
import {DefinePropertyReexportStatement, ExportDeclaration, ExportStatement, extractGetterFnExpression, findNamespaceOfIdentifier, findRequireCallReference, isDefinePropertyReexportStatement, isExportStatement, isExternalImport, isRequireCall, isWildcardReexportStatement, RequireCall, WildcardReexportStatement} from './commonjs_umd_utils';
|
import {DefinePropertyReexportStatement, ExportDeclaration, ExportsStatement, extractGetterFnExpression, findNamespaceOfIdentifier, findRequireCallReference, isDefinePropertyReexportStatement, isExportsStatement, isExternalImport, isRequireCall, isWildcardReexportStatement, RequireCall, WildcardReexportStatement} from './commonjs_umd_utils';
|
||||||
import {Esm5ReflectionHost} from './esm5_host';
|
import {Esm5ReflectionHost} from './esm5_host';
|
||||||
import {NgccClassSymbol} from './ngcc_host';
|
import {NgccClassSymbol} from './ngcc_host';
|
||||||
|
|
||||||
@ -98,7 +98,7 @@ export class CommonJsReflectionHost extends Esm5ReflectionHost {
|
|||||||
private computeExportsOfCommonJsModule(sourceFile: ts.SourceFile): Map<string, Declaration> {
|
private computeExportsOfCommonJsModule(sourceFile: ts.SourceFile): Map<string, Declaration> {
|
||||||
const moduleMap = new Map<string, Declaration>();
|
const moduleMap = new Map<string, Declaration>();
|
||||||
for (const statement of this.getModuleStatements(sourceFile)) {
|
for (const statement of this.getModuleStatements(sourceFile)) {
|
||||||
if (isExportStatement(statement)) {
|
if (isExportsStatement(statement)) {
|
||||||
const exportDeclaration = this.extractBasicCommonJsExportDeclaration(statement);
|
const exportDeclaration = this.extractBasicCommonJsExportDeclaration(statement);
|
||||||
moduleMap.set(exportDeclaration.name, exportDeclaration.declaration);
|
moduleMap.set(exportDeclaration.name, exportDeclaration.declaration);
|
||||||
} else if (isWildcardReexportStatement(statement)) {
|
} else if (isWildcardReexportStatement(statement)) {
|
||||||
@ -116,7 +116,7 @@ export class CommonJsReflectionHost extends Esm5ReflectionHost {
|
|||||||
return moduleMap;
|
return moduleMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
private extractBasicCommonJsExportDeclaration(statement: ExportStatement): ExportDeclaration {
|
private extractBasicCommonJsExportDeclaration(statement: ExportsStatement): ExportDeclaration {
|
||||||
const exportExpression = statement.expression.right;
|
const exportExpression = statement.expression.right;
|
||||||
const name = statement.expression.left.name.text;
|
const name = statement.expression.left.name.text;
|
||||||
return this.extractCommonJsExportDeclaration(name, exportExpression);
|
return this.extractCommonJsExportDeclaration(name, exportExpression);
|
||||||
|
@ -8,22 +8,13 @@
|
|||||||
|
|
||||||
import * as ts from 'typescript';
|
import * as ts from 'typescript';
|
||||||
import {Declaration} from '../../../src/ngtsc/reflection';
|
import {Declaration} from '../../../src/ngtsc/reflection';
|
||||||
|
import {isAssignment} from '../../../src/ngtsc/util/src/typescript';
|
||||||
|
|
||||||
export interface ExportDeclaration {
|
export interface ExportDeclaration {
|
||||||
name: string;
|
name: string;
|
||||||
declaration: Declaration;
|
declaration: Declaration;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface ExportStatement extends ts.ExpressionStatement {
|
|
||||||
expression: ts.BinaryExpression&{
|
|
||||||
left: ts.PropertyAccessExpression &
|
|
||||||
{
|
|
||||||
expression: ts.Identifier
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A CommonJS or UMD wildcard re-export statement.
|
* A CommonJS or UMD wildcard re-export statement.
|
||||||
*
|
*
|
||||||
@ -59,6 +50,9 @@ export interface DefinePropertyReexportStatement extends ts.ExpressionStatement
|
|||||||
{arguments: [ts.Identifier, ts.StringLiteral, ts.ObjectLiteralExpression]};
|
{arguments: [ts.Identifier, ts.StringLiteral, ts.ObjectLiteralExpression]};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A call expression that has a string literal for its first argument.
|
||||||
|
*/
|
||||||
export interface RequireCall extends ts.CallExpression {
|
export interface RequireCall extends ts.CallExpression {
|
||||||
arguments: ts.CallExpression['arguments']&[ts.StringLiteral];
|
arguments: ts.CallExpression['arguments']&[ts.StringLiteral];
|
||||||
}
|
}
|
||||||
@ -90,18 +84,6 @@ export function findRequireCallReference(id: ts.Identifier, checker: ts.TypeChec
|
|||||||
return initializer && isRequireCall(initializer) ? initializer : null;
|
return initializer && isRequireCall(initializer) ? initializer : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Check whether the specified `ts.Statement` is an export statement, i.e. an expression statement
|
|
||||||
* of the form: `exports.<foo> = <bar>`
|
|
||||||
*/
|
|
||||||
export function isExportStatement(stmt: ts.Statement): stmt is ExportStatement {
|
|
||||||
return ts.isExpressionStatement(stmt) && ts.isBinaryExpression(stmt.expression) &&
|
|
||||||
(stmt.expression.operatorToken.kind === ts.SyntaxKind.EqualsToken) &&
|
|
||||||
ts.isPropertyAccessExpression(stmt.expression.left) &&
|
|
||||||
ts.isIdentifier(stmt.expression.left.expression) &&
|
|
||||||
stmt.expression.left.expression.text === 'exports';
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check whether the specified `ts.Statement` is a wildcard re-export statement.
|
* Check whether the specified `ts.Statement` is a wildcard re-export statement.
|
||||||
* I.E. an expression statement of one of the following forms:
|
* I.E. an expression statement of one of the following forms:
|
||||||
@ -194,6 +176,12 @@ export function isDefinePropertyReexportStatement(stmt: ts.Statement):
|
|||||||
prop => prop.name !== undefined && ts.isIdentifier(prop.name) && prop.name.text === 'get'));
|
prop => prop.name !== undefined && ts.isIdentifier(prop.name) && prop.name.text === 'get'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extract the "value" of the getter in a `defineProperty` statement.
|
||||||
|
*
|
||||||
|
* This will return the `ts.Expression` value of a single `return` statement in the `get` method
|
||||||
|
* of the property definition object, or `null` if that is not possible.
|
||||||
|
*/
|
||||||
export function extractGetterFnExpression(statement: DefinePropertyReexportStatement):
|
export function extractGetterFnExpression(statement: DefinePropertyReexportStatement):
|
||||||
ts.Expression|null {
|
ts.Expression|null {
|
||||||
const args = statement.expression.arguments;
|
const args = statement.expression.arguments;
|
||||||
@ -220,6 +208,59 @@ export function isRequireCall(node: ts.Node): node is RequireCall {
|
|||||||
ts.isStringLiteral(node.arguments[0]);
|
ts.isStringLiteral(node.arguments[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check whether the specified `path` is an "external" import.
|
||||||
|
* In other words, that it comes from a entry-point outside the current one.
|
||||||
|
*/
|
||||||
export function isExternalImport(path: string): boolean {
|
export function isExternalImport(path: string): boolean {
|
||||||
return !/^\.\.?(\/|$)/.test(path);
|
return !/^\.\.?(\/|$)/.test(path);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A UMD/CommonJS style export declaration of the form `exports.<name>`.
|
||||||
|
*/
|
||||||
|
export interface ExportsDeclaration extends ts.PropertyAccessExpression {
|
||||||
|
name: ts.Identifier;
|
||||||
|
expression: ts.Identifier;
|
||||||
|
parent: ExportsAssignment;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check whether the specified `node` is a property access expression of the form
|
||||||
|
* `exports.<foo>`.
|
||||||
|
*/
|
||||||
|
export function isExportsDeclaration(expr: ts.Node): expr is ExportsDeclaration {
|
||||||
|
return expr.parent && isExportsAssignment(expr.parent);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A UMD/CommonJS style export assignment of the form `exports.<foo> = <bar>`.
|
||||||
|
*/
|
||||||
|
export interface ExportsAssignment extends ts.BinaryExpression {
|
||||||
|
left: ExportsDeclaration;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check whether the specified `node` is an assignment expression of the form
|
||||||
|
* `exports.<foo> = <bar>`.
|
||||||
|
*/
|
||||||
|
export function isExportsAssignment(expr: ts.Node): expr is ExportsAssignment {
|
||||||
|
return isAssignment(expr) && ts.isPropertyAccessExpression(expr.left) &&
|
||||||
|
ts.isIdentifier(expr.left.expression) && expr.left.expression.text === 'exports' &&
|
||||||
|
ts.isIdentifier(expr.left.name);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An expression statement of the form `exports.<foo> = <bar>;`.
|
||||||
|
*/
|
||||||
|
export interface ExportsStatement extends ts.ExpressionStatement {
|
||||||
|
expression: ExportsAssignment;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check whether the specified `stmt` is an expression statement of the form
|
||||||
|
* `exports.<foo> = <bar>;`.
|
||||||
|
*/
|
||||||
|
export function isExportsStatement(stmt: ts.Node): stmt is ExportsStatement {
|
||||||
|
return ts.isExpressionStatement(stmt) && isExportsAssignment(stmt.expression);
|
||||||
|
}
|
||||||
|
@ -14,7 +14,7 @@ import {Declaration, Import} from '../../../src/ngtsc/reflection';
|
|||||||
import {BundleProgram} from '../packages/bundle_program';
|
import {BundleProgram} from '../packages/bundle_program';
|
||||||
import {FactoryMap, getTsHelperFnFromIdentifier, stripExtension} from '../utils';
|
import {FactoryMap, getTsHelperFnFromIdentifier, stripExtension} from '../utils';
|
||||||
|
|
||||||
import {DefinePropertyReexportStatement, ExportDeclaration, ExportStatement, extractGetterFnExpression, findNamespaceOfIdentifier, findRequireCallReference, isDefinePropertyReexportStatement, isExportStatement, isExternalImport, isRequireCall, isWildcardReexportStatement, WildcardReexportStatement} from './commonjs_umd_utils';
|
import {DefinePropertyReexportStatement, ExportDeclaration, ExportsStatement, extractGetterFnExpression, findNamespaceOfIdentifier, findRequireCallReference, isDefinePropertyReexportStatement, isExportsStatement, isExternalImport, isRequireCall, isWildcardReexportStatement, WildcardReexportStatement} from './commonjs_umd_utils';
|
||||||
import {Esm5ReflectionHost} from './esm5_host';
|
import {Esm5ReflectionHost} from './esm5_host';
|
||||||
import {stripParentheses} from './utils';
|
import {stripParentheses} from './utils';
|
||||||
|
|
||||||
@ -90,7 +90,7 @@ export class UmdReflectionHost extends Esm5ReflectionHost {
|
|||||||
private computeExportsOfUmdModule(sourceFile: ts.SourceFile): Map<string, Declaration>|null {
|
private computeExportsOfUmdModule(sourceFile: ts.SourceFile): Map<string, Declaration>|null {
|
||||||
const moduleMap = new Map<string, Declaration>();
|
const moduleMap = new Map<string, Declaration>();
|
||||||
for (const statement of this.getModuleStatements(sourceFile)) {
|
for (const statement of this.getModuleStatements(sourceFile)) {
|
||||||
if (isExportStatement(statement)) {
|
if (isExportsStatement(statement)) {
|
||||||
const exportDeclaration = this.extractBasicUmdExportDeclaration(statement);
|
const exportDeclaration = this.extractBasicUmdExportDeclaration(statement);
|
||||||
moduleMap.set(exportDeclaration.name, exportDeclaration.declaration);
|
moduleMap.set(exportDeclaration.name, exportDeclaration.declaration);
|
||||||
} else if (isWildcardReexportStatement(statement)) {
|
} else if (isWildcardReexportStatement(statement)) {
|
||||||
@ -132,7 +132,7 @@ export class UmdReflectionHost extends Esm5ReflectionHost {
|
|||||||
return importPath;
|
return importPath;
|
||||||
}
|
}
|
||||||
|
|
||||||
private extractBasicUmdExportDeclaration(statement: ExportStatement): ExportDeclaration {
|
private extractBasicUmdExportDeclaration(statement: ExportsStatement): ExportDeclaration {
|
||||||
const name = statement.expression.left.name.text;
|
const name = statement.expression.left.name.text;
|
||||||
const exportExpression = statement.expression.right;
|
const exportExpression = statement.expression.right;
|
||||||
return this.extractUmdExportDeclaration(name, exportExpression);
|
return this.extractUmdExportDeclaration(name, exportExpression);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user