
Previously, ngcc's `Renderer` would add some constants in the processed files which were emitted as ES2015 code (e.g. `const` declarations). This would result in invalid ES5 generated code that would break when run on browsers that do not support the emitted format. This commit fixes it by adding a `printStatement()` method to `RenderingFormatter`, which can convert statements to JavaScript code in a suitable format for the corresponding `RenderingFormatter`. Additionally, the `translateExpression()` and `translateStatement()` ngtsc helper methods are augmented to accept an extra hint to know whether the code needs to be translated to ES5 format or not. Fixes #32665 PR Close #33514
51 lines
2.3 KiB
TypeScript
51 lines
2.3 KiB
TypeScript
/**
|
|
* @license
|
|
* Copyright Google Inc. All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by an MIT-style license that can be
|
|
* found in the LICENSE file at https://angular.io/license
|
|
*/
|
|
import {Statement} from '@angular/compiler';
|
|
import MagicString from 'magic-string';
|
|
import * as ts from 'typescript';
|
|
import {Reexport} from '../../../src/ngtsc/imports';
|
|
import {Import, ImportManager} from '../../../src/ngtsc/translator';
|
|
import {ExportInfo} from '../analysis/private_declarations_analyzer';
|
|
import {CompiledClass} from '../analysis/types';
|
|
import {SwitchableVariableDeclaration} from '../host/ngcc_host';
|
|
import {ModuleWithProvidersInfo} from '../analysis/module_with_providers_analyzer';
|
|
|
|
/**
|
|
* The collected decorators that have become redundant after the compilation
|
|
* of Ivy static fields. The map is keyed by the container node, such that we
|
|
* can tell if we should remove the entire decorator property
|
|
*/
|
|
export type RedundantDecoratorMap = Map<ts.Node, ts.Node[]>;
|
|
export const RedundantDecoratorMap = Map;
|
|
|
|
/**
|
|
* Implement this interface with methods that know how to render a specific format,
|
|
* such as ESM5 or UMD.
|
|
*/
|
|
export interface RenderingFormatter {
|
|
addConstants(output: MagicString, constants: string, file: ts.SourceFile): void;
|
|
addImports(output: MagicString, imports: Import[], sf: ts.SourceFile): void;
|
|
addExports(
|
|
output: MagicString, entryPointBasePath: string, exports: ExportInfo[],
|
|
importManager: ImportManager, file: ts.SourceFile): void;
|
|
addDirectExports(
|
|
output: MagicString, exports: Reexport[], importManager: ImportManager,
|
|
file: ts.SourceFile): void;
|
|
addDefinitions(output: MagicString, compiledClass: CompiledClass, definitions: string): void;
|
|
addAdjacentStatements(output: MagicString, compiledClass: CompiledClass, statements: string):
|
|
void;
|
|
removeDecorators(output: MagicString, decoratorsToRemove: RedundantDecoratorMap): void;
|
|
rewriteSwitchableDeclarations(
|
|
outputText: MagicString, sourceFile: ts.SourceFile,
|
|
declarations: SwitchableVariableDeclaration[]): void;
|
|
addModuleWithProvidersParams(
|
|
outputText: MagicString, moduleWithProviders: ModuleWithProvidersInfo[],
|
|
importManager: ImportManager): void;
|
|
printStatement(stmt: Statement, sourceFile: ts.SourceFile, importManager: ImportManager): string;
|
|
}
|