feat(tools): allow disabling annotation lowering
This commit is contained in:
parent
aac37bedc0
commit
c1a62e2154
@ -29,6 +29,9 @@ interface Options extends ts.CompilerOptions {
|
|||||||
// Default is true.
|
// Default is true.
|
||||||
generateCodeForLibraries?: boolean;
|
generateCodeForLibraries?: boolean;
|
||||||
|
|
||||||
|
// Modify how angular annotations are emitted to improve tree-shaking.
|
||||||
|
annotationsAs?: string; /* 'decorator'|'static field' */
|
||||||
|
|
||||||
// Print extra information while running the compiler
|
// Print extra information while running the compiler
|
||||||
trace: boolean;
|
trace: boolean;
|
||||||
|
|
||||||
|
@ -52,6 +52,26 @@ export function check(diags: ts.Diagnostic[]) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function validateAngularCompilerOptions(options: AngularCompilerOptions): ts.Diagnostic[] {
|
||||||
|
if (options.annotationsAs) {
|
||||||
|
switch (options.annotationsAs) {
|
||||||
|
case 'decorators':
|
||||||
|
case 'static fields':
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return [{
|
||||||
|
file: null,
|
||||||
|
start: null,
|
||||||
|
length: null,
|
||||||
|
messageText:
|
||||||
|
'Angular compiler options "annotationsAs" only supports "static fields" and "decorators"',
|
||||||
|
category: ts.DiagnosticCategory.Error,
|
||||||
|
code: 0
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export class Tsc implements CompilerInterface {
|
export class Tsc implements CompilerInterface {
|
||||||
public ngOptions: AngularCompilerOptions;
|
public ngOptions: AngularCompilerOptions;
|
||||||
public parsed: ts.ParsedCommandLine;
|
public parsed: ts.ParsedCommandLine;
|
||||||
@ -96,6 +116,8 @@ export class Tsc implements CompilerInterface {
|
|||||||
for (const key of Object.keys(this.parsed.options)) {
|
for (const key of Object.keys(this.parsed.options)) {
|
||||||
this.ngOptions[key] = this.parsed.options[key];
|
this.ngOptions[key] = this.parsed.options[key];
|
||||||
}
|
}
|
||||||
|
check(validateAngularCompilerOptions(this.ngOptions));
|
||||||
|
|
||||||
return {parsed: this.parsed, ngOptions: this.ngOptions};
|
return {parsed: this.parsed, ngOptions: this.ngOptions};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -113,8 +135,10 @@ export class Tsc implements CompilerInterface {
|
|||||||
}
|
}
|
||||||
|
|
||||||
emit(compilerHost: TsickleHost, oldProgram: ts.Program): number {
|
emit(compilerHost: TsickleHost, oldProgram: ts.Program): number {
|
||||||
// Create a new program since the host may be different from the old program.
|
// Create a program if we are lowering annotations with tsickle.
|
||||||
const program = ts.createProgram(this.parsed.fileNames, this.parsed.options, compilerHost);
|
const program = this.ngOptions.annotationsAs === 'static fields' ?
|
||||||
|
ts.createProgram(this.parsed.fileNames, this.parsed.options, compilerHost) :
|
||||||
|
oldProgram;
|
||||||
debug('Emitting outputs...');
|
debug('Emitting outputs...');
|
||||||
const emitResult = program.emit();
|
const emitResult = program.emit();
|
||||||
const diagnostics: ts.Diagnostic[] = [];
|
const diagnostics: ts.Diagnostic[] = [];
|
||||||
|
Loading…
x
Reference in New Issue
Block a user