build: add moduleName to ngFactory sourcefiles (#29385)
PR Close #29385
This commit is contained in:
parent
ae4a86e3b5
commit
86aba1e8f3
|
@ -369,10 +369,15 @@ export class TsCompilerAotCompilerTypeCheckHostAdapter implements ts.CompilerHos
|
||||||
/* emitSourceMaps */ false);
|
/* emitSourceMaps */ false);
|
||||||
const sf = ts.createSourceFile(
|
const sf = ts.createSourceFile(
|
||||||
genFile.genFileUrl, sourceText, this.options.target || ts.ScriptTarget.Latest);
|
genFile.genFileUrl, sourceText, this.options.target || ts.ScriptTarget.Latest);
|
||||||
if ((this.options.module === ts.ModuleKind.AMD || this.options.module === ts.ModuleKind.UMD) &&
|
if (this.options.module === ts.ModuleKind.AMD || this.options.module === ts.ModuleKind.UMD) {
|
||||||
this.context.amdModuleName) {
|
if (this.context.amdModuleName) {
|
||||||
const moduleName = this.context.amdModuleName(sf);
|
const moduleName = this.context.amdModuleName(sf);
|
||||||
if (moduleName) sf.moduleName = moduleName;
|
if (moduleName) sf.moduleName = moduleName;
|
||||||
|
} else if (/node_modules/.test(genFile.genFileUrl)) {
|
||||||
|
// If we are generating an ngModule file under node_modules, we know the right module name
|
||||||
|
// We don't need the host to supply a function in this case.
|
||||||
|
sf.moduleName = stripNodeModulesPrefix(genFile.genFileUrl.replace(EXT, ''));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
this.generatedSourceFiles.set(genFile.genFileUrl, {
|
this.generatedSourceFiles.set(genFile.genFileUrl, {
|
||||||
sourceFile: sf,
|
sourceFile: sf,
|
||||||
|
|
|
@ -213,6 +213,40 @@ describe('NgCompilerHost', () => {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('addGeneratedFile', () => {
|
||||||
|
function generate(path: string, files: {}) {
|
||||||
|
codeGenerator.findGeneratedFileNames.and.returnValue([`${path}.ngfactory.ts`]);
|
||||||
|
codeGenerator.generateFile.and.returnValue(
|
||||||
|
new compiler.GeneratedFile(`${path}.ts`, `${path}.ngfactory.ts`, []));
|
||||||
|
const host = createHost({
|
||||||
|
files,
|
||||||
|
options: {
|
||||||
|
basePath: '/tmp',
|
||||||
|
moduleResolution: ts.ModuleResolutionKind.NodeJs,
|
||||||
|
// Request UMD, which should get default module names
|
||||||
|
module: ts.ModuleKind.UMD
|
||||||
|
},
|
||||||
|
});
|
||||||
|
return host.getSourceFile(`${path}.ngfactory.ts`, ts.ScriptTarget.Latest);
|
||||||
|
}
|
||||||
|
|
||||||
|
it('should include a moduleName when the file is in node_modules', () => {
|
||||||
|
const genSf = generate(
|
||||||
|
'/tmp/node_modules/@angular/core/core',
|
||||||
|
{'tmp': {'node_modules': {'@angular': {'core': {'core.ts': `// some content`}}}}});
|
||||||
|
expect(genSf.moduleName).toBe('@angular/core/core.ngfactory');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should not get tripped on nested node_modules', () => {
|
||||||
|
const genSf = generate('/tmp/node_modules/lib1/node_modules/lib2/thing', {
|
||||||
|
'tmp': {
|
||||||
|
'node_modules': {'lib1': {'node_modules': {'lib2': {'thing.ts': `// some content`}}}}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
expect(genSf.moduleName).toBe('lib2/thing.ngfactory');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
describe('getSourceFile', () => {
|
describe('getSourceFile', () => {
|
||||||
it('should cache source files by name', () => {
|
it('should cache source files by name', () => {
|
||||||
const host = createHost({files: {'tmp': {'src': {'index.ts': ``}}}});
|
const host = createHost({files: {'tmp': {'src': {'index.ts': ``}}}});
|
||||||
|
|
Loading…
Reference in New Issue