feat(compiler): support sync runtime compile
Adds new abstraction `Compiler` with methods `compileComponentAsync` and `compileComponentSync`. This is in preparation of deprecating `ComponentResolver`. `compileComponentSync` is able to compile components synchronously given all components either have an inline template or they have been compiled before. Also changes `TestComponentBuilder.createSync` to take a `Type` and use the new `compileComponentSync` method. Also supports overriding the component metadata even if the component has already been compiled. Also fixes #7084 in a better way. BREAKING CHANGE: `TestComponentBuilder.createSync` now takes a component type and throws if not all templates are either inlined are compiled before via `createAsync`. Closes #9594
This commit is contained in:
19
tools/public_api_guard/compiler/index.d.ts
vendored
19
tools/public_api_guard/compiler/index.d.ts
vendored
@ -310,21 +310,24 @@ export declare class CompilerConfig {
|
||||
});
|
||||
}
|
||||
|
||||
export declare class CompileTemplateMetadata {
|
||||
export declare class CompileTemplateMetadata implements CompileStylesheetMetadata {
|
||||
animations: CompileAnimationEntryMetadata[];
|
||||
encapsulation: ViewEncapsulation;
|
||||
externalStylesheets: CompileStylesheetMetadata[];
|
||||
interpolation: [string, string];
|
||||
moduleUrl: string;
|
||||
ngContentSelectors: string[];
|
||||
styleUrls: string[];
|
||||
styles: string[];
|
||||
template: string;
|
||||
templateUrl: string;
|
||||
constructor({encapsulation, template, templateUrl, styles, styleUrls, animations, ngContentSelectors, interpolation}?: {
|
||||
constructor({encapsulation, template, templateUrl, styles, styleUrls, externalStylesheets, animations, ngContentSelectors, interpolation}?: {
|
||||
encapsulation?: ViewEncapsulation;
|
||||
template?: string;
|
||||
templateUrl?: string;
|
||||
styles?: string[];
|
||||
styleUrls?: string[];
|
||||
externalStylesheets?: CompileStylesheetMetadata[];
|
||||
ngContentSelectors?: string[];
|
||||
animations?: CompileAnimationEntryMetadata[];
|
||||
interpolation?: [string, string];
|
||||
@ -460,9 +463,8 @@ export declare class NormalizedComponentWithViewDirectives {
|
||||
}
|
||||
|
||||
export declare class OfflineCompiler {
|
||||
constructor(_directiveNormalizer: DirectiveNormalizer, _templateParser: TemplateParser, _styleCompiler: StyleCompiler, _viewCompiler: ViewCompiler, _outputEmitter: OutputEmitter, _xhr: XHR);
|
||||
compileTemplates(components: NormalizedComponentWithViewDirectives[]): SourceModule;
|
||||
loadAndCompileStylesheet(stylesheetUrl: string, shim: boolean, suffix: string): Promise<StyleSheetSourceWithImports>;
|
||||
constructor(_directiveNormalizer: DirectiveNormalizer, _templateParser: TemplateParser, _styleCompiler: StyleCompiler, _viewCompiler: ViewCompiler, _outputEmitter: OutputEmitter);
|
||||
compileTemplates(components: NormalizedComponentWithViewDirectives[]): SourceModule[];
|
||||
normalizeDirectiveMetadata(directive: CompileDirectiveMetadata): Promise<CompileDirectiveMetadata>;
|
||||
}
|
||||
|
||||
@ -515,9 +517,12 @@ export declare abstract class RenderTypes {
|
||||
renderer: CompileIdentifierMetadata;
|
||||
}
|
||||
|
||||
export declare class RuntimeCompiler implements ComponentResolver {
|
||||
constructor(_metadataResolver: CompileMetadataResolver, _templateNormalizer: DirectiveNormalizer, _templateParser: TemplateParser, _styleCompiler: StyleCompiler, _viewCompiler: ViewCompiler, _xhr: XHR, _genConfig: CompilerConfig);
|
||||
export declare class RuntimeCompiler implements ComponentResolver, Compiler {
|
||||
constructor(_metadataResolver: CompileMetadataResolver, _templateNormalizer: DirectiveNormalizer, _templateParser: TemplateParser, _styleCompiler: StyleCompiler, _viewCompiler: ViewCompiler, _genConfig: CompilerConfig);
|
||||
clearCache(): void;
|
||||
clearCacheFor(compType: Type): void;
|
||||
compileComponentAsync<T>(compType: ConcreteType<T>): Promise<ComponentFactory<T>>;
|
||||
compileComponentSync<T>(compType: ConcreteType<T>): ComponentFactory<T>;
|
||||
resolveComponent(component: Type | string): Promise<ComponentFactory<any>>;
|
||||
}
|
||||
|
||||
|
6
tools/public_api_guard/compiler/testing.d.ts
vendored
6
tools/public_api_guard/compiler/testing.d.ts
vendored
@ -1,4 +1,5 @@
|
||||
export declare class MockDirectiveResolver extends DirectiveResolver {
|
||||
constructor(_injector: Injector);
|
||||
resolve(type: Type): DirectiveMetadata;
|
||||
setProvidersOverride(type: Type, providers: any[]): void;
|
||||
setViewProvidersOverride(type: Type, viewProviders: any[]): void;
|
||||
@ -22,7 +23,7 @@ export declare class MockSchemaRegistry implements ElementSchemaRegistry {
|
||||
}
|
||||
|
||||
export declare class MockViewResolver extends ViewResolver {
|
||||
constructor();
|
||||
constructor(_injector: Injector);
|
||||
overrideViewDirective(component: Type, from: Type, to: Type): void;
|
||||
resolve(component: Type): ViewMetadata;
|
||||
setAnimations(component: Type, animations: AnimationEntryMetadata[]): void;
|
||||
@ -32,7 +33,8 @@ export declare class MockViewResolver extends ViewResolver {
|
||||
|
||||
export declare class OverridingTestComponentBuilder extends TestComponentBuilder {
|
||||
constructor(injector: Injector);
|
||||
createAsync(rootComponentType: Type): Promise<ComponentFixture<any>>;
|
||||
createAsync<T>(rootComponentType: ConcreteType<T>): Promise<ComponentFixture<T>>;
|
||||
createSync<T>(rootComponentType: ConcreteType<T>): ComponentFixture<T>;
|
||||
overrideAnimations(componentType: Type, animations: AnimationEntryMetadata[]): TestComponentBuilder;
|
||||
overrideDirective(componentType: Type, from: Type, to: Type): OverridingTestComponentBuilder;
|
||||
overrideProviders(type: Type, providers: any[]): OverridingTestComponentBuilder;
|
||||
|
14
tools/public_api_guard/core/index.d.ts
vendored
14
tools/public_api_guard/core/index.d.ts
vendored
@ -207,7 +207,7 @@ export declare abstract class ChangeDetectorRef {
|
||||
}
|
||||
|
||||
/** @stable */
|
||||
export declare function Class(clsDef: ClassDefinition): ConcreteType;
|
||||
export declare function Class(clsDef: ClassDefinition): ConcreteType<any>;
|
||||
|
||||
/** @stable */
|
||||
export interface ClassDefinition {
|
||||
@ -226,6 +226,14 @@ export declare class CollectionChangeRecord {
|
||||
toString(): string;
|
||||
}
|
||||
|
||||
/** @stable */
|
||||
export declare class Compiler {
|
||||
clearCache(): void;
|
||||
clearCacheFor(compType: Type): void;
|
||||
compileComponentAsync<T>(component: ConcreteType<T>): Promise<ComponentFactory<T>>;
|
||||
compileComponentSync<T>(component: ConcreteType<T>): ComponentFactory<T>;
|
||||
}
|
||||
|
||||
/** @stable */
|
||||
export declare var Component: ComponentMetadataFactory;
|
||||
|
||||
@ -254,7 +262,7 @@ export declare class ComponentFactory<C> {
|
||||
|
||||
/** @stable */
|
||||
export declare abstract class ComponentFactoryResolver {
|
||||
abstract resolveComponentFactory<T>(component: ClassWithConstructor<T>): ComponentFactory<T>;
|
||||
abstract resolveComponentFactory<T>(component: ConcreteType<T>): ComponentFactory<T>;
|
||||
static NULL: ComponentFactoryResolver;
|
||||
}
|
||||
|
||||
@ -1267,7 +1275,7 @@ export interface TypeDecorator {
|
||||
annotations: any[];
|
||||
(target: Object, propertyKey?: string | symbol, parameterIndex?: number): void;
|
||||
<T extends Type>(type: T): T;
|
||||
Class(obj: ClassDefinition): ConcreteType;
|
||||
Class(obj: ClassDefinition): ConcreteType<any>;
|
||||
}
|
||||
|
||||
/** @stable */
|
||||
|
6
tools/public_api_guard/core/testing.d.ts
vendored
6
tools/public_api_guard/core/testing.d.ts
vendored
@ -89,10 +89,10 @@ export declare function setBaseTestProviders(platformProviders: Array<Type | Pro
|
||||
export declare class TestComponentBuilder {
|
||||
protected _injector: Injector;
|
||||
constructor(_injector: Injector);
|
||||
createAsync(rootComponentType: Type): Promise<ComponentFixture<any>>;
|
||||
createFakeAsync(rootComponentType: Type): ComponentFixture<any>;
|
||||
createAsync<T>(rootComponentType: ConcreteType<T>): Promise<ComponentFixture<T>>;
|
||||
createFakeAsync<T>(rootComponentType: ConcreteType<T>): ComponentFixture<T>;
|
||||
protected createFromFactory<C>(ngZone: NgZone, componentFactory: ComponentFactory<C>): ComponentFixture<C>;
|
||||
/** @deprecated */ createSync<C>(componentFactory: ComponentFactory<C>): ComponentFixture<C>;
|
||||
createSync<T>(rootComponentType: ConcreteType<T>): ComponentFixture<T>;
|
||||
overrideAnimations(componentType: Type, animations: AnimationEntryMetadata[]): TestComponentBuilder;
|
||||
overrideDirective(componentType: Type, from: Type, to: Type): TestComponentBuilder;
|
||||
overrideProviders(type: Type, providers: any[]): TestComponentBuilder;
|
||||
|
Reference in New Issue
Block a user