feat(core): expose a Compiler API for accessing module ids from NgModule types (#24258)
This will allow RouterTestingModule to better support lazy loading of modules when using summaries, since it can detect whether a module is already loaded if it can access the id. PR Close #24258
This commit is contained in:
parent
e3759f7a73
commit
bd02b27ee1
|
@ -78,6 +78,11 @@ export class Compiler {
|
||||||
* Clears the cache for the given component/ngModule.
|
* Clears the cache for the given component/ngModule.
|
||||||
*/
|
*/
|
||||||
clearCacheFor(type: Type<any>) {}
|
clearCacheFor(type: Type<any>) {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the id for a given NgModule, if one is defined and known to the compiler.
|
||||||
|
*/
|
||||||
|
getModuleId(moduleType: Type<any>): string|undefined { return undefined; }
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -78,6 +78,10 @@ export class CompilerImpl implements Compiler {
|
||||||
}
|
}
|
||||||
clearCache(): void { this._delegate.clearCache(); }
|
clearCache(): void { this._delegate.clearCache(); }
|
||||||
clearCacheFor(type: Type<any>) { this._delegate.clearCacheFor(type); }
|
clearCacheFor(type: Type<any>) { this._delegate.clearCacheFor(type); }
|
||||||
|
getModuleId(moduleType: Type<any>): string|undefined {
|
||||||
|
const meta = this._metadataResolver.getNgModuleMetadata(moduleType);
|
||||||
|
return meta && meta.id || undefined;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import {ResourceLoader} from '@angular/compiler';
|
import {ResourceLoader} from '@angular/compiler';
|
||||||
import {Component} from '@angular/core';
|
import {Compiler, Component, NgModule} from '@angular/core';
|
||||||
import {TestBed, async, fakeAsync, inject, tick} from '@angular/core/testing';
|
import {TestBed, async, fakeAsync, inject, tick} from '@angular/core/testing';
|
||||||
|
|
||||||
import {ResourceLoaderImpl} from '../src/resource_loader/resource_loader_impl';
|
import {ResourceLoaderImpl} from '../src/resource_loader/resource_loader_impl';
|
||||||
|
@ -77,6 +77,22 @@ class BadTemplateUrl {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('Compiler', () => {
|
||||||
|
it('should return NgModule id when asked', () => {
|
||||||
|
@NgModule({
|
||||||
|
id: 'test-module',
|
||||||
|
})
|
||||||
|
class TestModule {
|
||||||
|
}
|
||||||
|
|
||||||
|
TestBed.configureTestingModule({
|
||||||
|
imports: [TestModule],
|
||||||
|
});
|
||||||
|
const compiler = TestBed.get(Compiler) as Compiler;
|
||||||
|
expect(compiler.getModuleId(TestModule)).toBe('test-module');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
describe('errors', () => {
|
describe('errors', () => {
|
||||||
let originalJasmineIt: any;
|
let originalJasmineIt: any;
|
||||||
|
|
||||||
|
|
|
@ -99,4 +99,8 @@ export class TestingCompilerImpl implements TestingCompiler {
|
||||||
clearCacheFor(type: Type<any>) { this._compiler.clearCacheFor(type); }
|
clearCacheFor(type: Type<any>) { this._compiler.clearCacheFor(type); }
|
||||||
|
|
||||||
getComponentFromError(error: Error) { return (error as any)[ERROR_COMPONENT_TYPE] || null; }
|
getComponentFromError(error: Error) { return (error as any)[ERROR_COMPONENT_TYPE] || null; }
|
||||||
|
|
||||||
|
getModuleId(moduleType: Type<any>): string|undefined {
|
||||||
|
return this._moduleResolver.resolve(moduleType, true).id;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -86,6 +86,7 @@ export declare class Compiler {
|
||||||
compileModuleAndAllComponentsSync<T>(moduleType: Type<T>): ModuleWithComponentFactories<T>;
|
compileModuleAndAllComponentsSync<T>(moduleType: Type<T>): ModuleWithComponentFactories<T>;
|
||||||
compileModuleAsync<T>(moduleType: Type<T>): Promise<NgModuleFactory<T>>;
|
compileModuleAsync<T>(moduleType: Type<T>): Promise<NgModuleFactory<T>>;
|
||||||
compileModuleSync<T>(moduleType: Type<T>): NgModuleFactory<T>;
|
compileModuleSync<T>(moduleType: Type<T>): NgModuleFactory<T>;
|
||||||
|
getModuleId(moduleType: Type<any>): string | undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @experimental */
|
/** @experimental */
|
||||||
|
|
Loading…
Reference in New Issue