fix(bazel): only lookup amd module-name tags in .d.ts files (#25710)

PR Close #25710
This commit is contained in:
Alex Eagle 2018-08-28 16:40:30 -07:00 committed by Matias Niemelä
parent 29761ea5f8
commit 42072c4d0d
1 changed files with 14 additions and 7 deletions

View File

@ -226,14 +226,21 @@ export function compile({allowNonHermeticReads, allDepsCompiledWithBazel = true,
const ngHost = ng.createCompilerHost({options: compilerOpts, tsHost: bazelHost}); const ngHost = ng.createCompilerHost({options: compilerOpts, tsHost: bazelHost});
ngHost.fileNameToModuleName = (importedFilePath: string, containingFilePath: string) => { ngHost.fileNameToModuleName = (importedFilePath: string, containingFilePath: string) => {
try { // Lookup the module name specified in the TypeScript source file, if present
const sourceFile = ngHost.getSourceFile(importedFilePath, ts.ScriptTarget.Latest); // it will look like ///<amd module-name="something"/>
if (sourceFile && sourceFile.moduleName) { // For performance, we only do this for .d.ts files, to avoid parsing lots of
return sourceFile.moduleName; // additional files that were not in the program.
// (We don't have the ts.Program available in this codepath)
if (importedFilePath.endsWith('.d.ts')) {
try {
const sourceFile = ngHost.getSourceFile(importedFilePath, ts.ScriptTarget.Latest);
if (sourceFile && sourceFile.moduleName) {
return sourceFile.moduleName;
}
} catch (err) {
// File does not exist or parse error. Ignore this case and continue onto the
// other methods of resolving the module below.
} }
} catch (err) {
// File does not exist or parse error. Ignore this case and continue onto the
// other methods of resolving the module below.
} }
if ((compilerOpts.module === ts.ModuleKind.UMD || compilerOpts.module === ts.ModuleKind.AMD) && if ((compilerOpts.module === ts.ModuleKind.UMD || compilerOpts.module === ts.ModuleKind.AMD) &&
ngHost.amdModuleName) { ngHost.amdModuleName) {