feat(ivy): add ngcc
ivy switch (#25238)
Provides a runtime and compile time switch for ivy including `ApplicationRef.bootstrapModule`. This is done by naming the symbols such that `ngcc` (angular Compatibility compiler) can rename symbols in such a way that running `ngcc` command will switch the `@angular/core` module from `legacy` to `ivy` mode. This is done as follows: ``` const someToken__PRE_NGCC__ = ‘legacy mode’; const someToken__POST_NGCC__ = ‘ivy mode’; export someSymbol = someToken__PRE_NGCC__; ``` The `ngcc` will search for any token which ends with `__PRE_NGCC__` and replace it with `__POST_NGCC__`. This allows the `@angular/core` package to be rewritten to ivy mode post `ngcc` execution. PR Close #25238
This commit is contained in:
@ -347,7 +347,7 @@ export interface Directive {
|
||||
*/
|
||||
export const Directive: DirectiveDecorator = makeDecorator(
|
||||
'Directive', (dir: Directive = {}) => dir, undefined, undefined,
|
||||
(type: Type<any>, meta: Directive) => (R3_COMPILE_DIRECTIVE || (() => {}))(type, meta));
|
||||
(type: Type<any>, meta: Directive) => R3_COMPILE_DIRECTIVE(type, meta));
|
||||
|
||||
/**
|
||||
* Component decorator interface
|
||||
@ -631,8 +631,7 @@ export interface Component extends Directive {
|
||||
*/
|
||||
export const Component: ComponentDecorator = makeDecorator(
|
||||
'Component', (c: Component = {}) => ({changeDetection: ChangeDetectionStrategy.Default, ...c}),
|
||||
Directive, undefined,
|
||||
(type: Type<any>, meta: Component) => (R3_COMPILE_COMPONENT || (() => {}))(type, meta));
|
||||
Directive, undefined, (type: Type<any>, meta: Component) => R3_COMPILE_COMPONENT(type, meta));
|
||||
|
||||
/**
|
||||
* Type of the Pipe decorator / constructor function.
|
||||
@ -680,7 +679,7 @@ export interface Pipe {
|
||||
*/
|
||||
export const Pipe: PipeDecorator = makeDecorator(
|
||||
'Pipe', (p: Pipe) => ({pure: true, ...p}), undefined, undefined,
|
||||
(type: Type<any>, meta: Pipe) => (R3_COMPILE_PIPE || (() => {}))(type, meta));
|
||||
(type: Type<any>, meta: Pipe) => R3_COMPILE_PIPE(type, meta));
|
||||
|
||||
|
||||
/**
|
||||
|
@ -7,8 +7,6 @@
|
||||
*/
|
||||
|
||||
import {ApplicationRef} from '../application_ref';
|
||||
import {InjectorDef, InjectorType, defineInjector} from '../di/defs';
|
||||
import {convertInjectableProviderToFactory} from '../di/injectable';
|
||||
import {Provider} from '../di/provider';
|
||||
import {R3_COMPILE_NGMODULE} from '../ivy_switch';
|
||||
import {Type} from '../type';
|
||||
@ -323,19 +321,6 @@ export interface NgModule {
|
||||
jit?: true;
|
||||
}
|
||||
|
||||
function preR3NgModuleCompile(moduleType: InjectorType<any>, metadata: NgModule): void {
|
||||
let imports = (metadata && metadata.imports) || [];
|
||||
if (metadata && metadata.exports) {
|
||||
imports = [...imports, metadata.exports];
|
||||
}
|
||||
|
||||
moduleType.ngInjectorDef = defineInjector({
|
||||
factory: convertInjectableProviderToFactory(moduleType, {useClass: moduleType}),
|
||||
providers: metadata && metadata.providers,
|
||||
imports: imports,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* @Annotation
|
||||
*/
|
||||
@ -352,7 +337,7 @@ export const NgModule: NgModuleDecorator = makeDecorator(
|
||||
* * The `imports` and `exports` options bring in members from other modules, and make
|
||||
* this module's members available to others.
|
||||
*/
|
||||
(type: Type<any>, meta: NgModule) => (R3_COMPILE_NGMODULE || preR3NgModuleCompile)(type, meta));
|
||||
(type: Type<any>, meta: NgModule) => R3_COMPILE_NGMODULE(type, meta));
|
||||
|
||||
/**
|
||||
* @description
|
||||
|
Reference in New Issue
Block a user