refactor(ivy): prefix all generated instructions (#29692)
- Updates all instructions to be prefixed with the Greek delta symbol PR Close #29692
This commit is contained in:
@ -6,7 +6,7 @@
|
||||
* found in the LICENSE file at https://angular.io/license
|
||||
*/
|
||||
|
||||
import {defineInjectable} from '../../di/interface/defs';
|
||||
import {ΔdefineInjectable} from '../../di/interface/defs';
|
||||
import {StaticProvider} from '../../di/interface/provider';
|
||||
import {Optional, SkipSelf} from '../../di/metadata';
|
||||
import {DefaultIterableDifferFactory} from '../differs/default_iterable_differ';
|
||||
@ -143,7 +143,7 @@ export interface IterableDifferFactory {
|
||||
*/
|
||||
export class IterableDiffers {
|
||||
/** @nocollapse */
|
||||
static ngInjectableDef = defineInjectable({
|
||||
static ngInjectableDef = ΔdefineInjectable({
|
||||
providedIn: 'root',
|
||||
factory: () => new IterableDiffers([new DefaultIterableDifferFactory()])
|
||||
});
|
||||
|
@ -6,7 +6,7 @@
|
||||
* found in the LICENSE file at https://angular.io/license
|
||||
*/
|
||||
|
||||
import {Optional, SkipSelf, StaticProvider, defineInjectable} from '../../di';
|
||||
import {Optional, SkipSelf, StaticProvider, ΔdefineInjectable} from '../../di';
|
||||
import {DefaultKeyValueDifferFactory} from './default_keyvalue_differ';
|
||||
|
||||
|
||||
@ -118,7 +118,7 @@ export interface KeyValueDifferFactory {
|
||||
*/
|
||||
export class KeyValueDiffers {
|
||||
/** @nocollapse */
|
||||
static ngInjectableDef = defineInjectable({
|
||||
static ngInjectableDef = ΔdefineInjectable({
|
||||
providedIn: 'root',
|
||||
factory: () => new KeyValueDiffers([new DefaultKeyValueDifferFactory()])
|
||||
});
|
||||
|
@ -8,4 +8,4 @@
|
||||
|
||||
export {CodegenComponentFactoryResolver as ɵCodegenComponentFactoryResolver} from './linker/component_factory_resolver';
|
||||
export {registerModuleFactory as ɵregisterModuleFactory} from './linker/ng_module_factory_loader';
|
||||
export {ArgumentType as ɵArgumentType, BindingFlags as ɵBindingFlags, DepFlags as ɵDepFlags, EMPTY_ARRAY as ɵEMPTY_ARRAY, EMPTY_MAP as ɵEMPTY_MAP, NodeFlags as ɵNodeFlags, QueryBindingType as ɵQueryBindingType, QueryValueType as ɵQueryValueType, ViewDefinition as ɵViewDefinition, ViewFlags as ɵViewFlags, anchorDef as ɵand, createComponentFactory as ɵccf, createNgModuleFactory as ɵcmf, createRendererType2 as ɵcrt, directiveDef as ɵdid, elementDef as ɵeld, elementEventFullName as ɵelementEventFullName, getComponentViewDefinitionFactory as ɵgetComponentViewDefinitionFactory, inlineInterpolate as ɵinlineInterpolate, interpolate as ɵinterpolate, moduleDef as ɵmod, moduleProvideDef as ɵmpd, ngContentDef as ɵncd, nodeValue as ɵnov, pipeDef as ɵpid, providerDef as ɵprd, pureArrayDef as ɵpad, pureObjectDef as ɵpod, purePipeDef as ɵppd, queryDef as ɵqud, textDef as ɵted, unwrapValue as ɵunv, viewDef as ɵvid} from './view/index';
|
||||
export {ArgumentType as ɵArgumentType, BindingFlags as ɵBindingFlags, DepFlags as ɵDepFlags, EMPTY_ARRAY as ɵEMPTY_ARRAY, EMPTY_MAP as ɵEMPTY_MAP, NodeFlags as ɵNodeFlags, QueryBindingType as ɵQueryBindingType, QueryValueType as ɵQueryValueType, ViewDefinition as ɵViewDefinition, ViewFlags as ɵViewFlags, anchorDef as ɵand, createComponentFactory as ɵccf, createNgModuleFactory as ɵcmf, createRendererType2 as ɵcrt, directiveDef as ɵdid, elementDef as ɵeld, getComponentViewDefinitionFactory as ɵgetComponentViewDefinitionFactory, inlineInterpolate as ɵinlineInterpolate, interpolate as ɵinterpolate, moduleDef as ɵmod, moduleProvideDef as ɵmpd, ngContentDef as ɵncd, nodeValue as ɵnov, pipeDef as ɵpid, providerDef as ɵprd, pureArrayDef as ɵpad, pureObjectDef as ɵpod, purePipeDef as ɵppd, queryDef as ɵqud, textDef as ɵted, unwrapValue as ɵunv, viewDef as ɵvid} from './view/index';
|
||||
|
@ -13,8 +13,8 @@ export {devModeEqual as ɵdevModeEqual} from './change_detection/change_detectio
|
||||
export {isListLikeIterable as ɵisListLikeIterable} from './change_detection/change_detection_util';
|
||||
export {ChangeDetectorStatus as ɵChangeDetectorStatus, isDefaultChangeDetectionStrategy as ɵisDefaultChangeDetectionStrategy} from './change_detection/constants';
|
||||
export {Console as ɵConsole} from './console';
|
||||
export {inject as ɵinject, setCurrentInjector as ɵsetCurrentInjector} from './di/injector_compatibility';
|
||||
export {InjectableDef as ɵInjectableDef, InjectorDef as ɵInjectorDef, getInjectableDef as ɵgetInjectableDef} from './di/interface/defs';
|
||||
export {inject, setCurrentInjector as ɵsetCurrentInjector, Δinject} from './di/injector_compatibility';
|
||||
export {getInjectableDef as ɵgetInjectableDef, ΔInjectableDef as ΔInjectableDef, ΔInjectorDef} from './di/interface/defs';
|
||||
export {APP_ROOT as ɵAPP_ROOT} from './di/scope';
|
||||
export {ivyEnabled as ɵivyEnabled} from './ivy_switch';
|
||||
export {ComponentFactory as ɵComponentFactory} from './linker/component_factory';
|
||||
@ -27,6 +27,7 @@ export {_sanitizeHtml as ɵ_sanitizeHtml} from './sanitization/html_sanitizer';
|
||||
export {_sanitizeStyle as ɵ_sanitizeStyle} from './sanitization/style_sanitizer';
|
||||
export {_sanitizeUrl as ɵ_sanitizeUrl} from './sanitization/url_sanitizer';
|
||||
export {global as ɵglobal} from './util/global';
|
||||
|
||||
export {looseIdentical as ɵlooseIdentical,} from './util/comparison';
|
||||
export {stringify as ɵstringify} from './util/stringify';
|
||||
export {makeDecorator as ɵmakeDecorator} from './util/decorators';
|
||||
|
@ -8,11 +8,11 @@
|
||||
|
||||
// clang-format off
|
||||
export {
|
||||
defineBase as ɵdefineBase,
|
||||
defineComponent as ɵdefineComponent,
|
||||
defineDirective as ɵdefineDirective,
|
||||
definePipe as ɵdefinePipe,
|
||||
defineNgModule as ɵdefineNgModule,
|
||||
ΔdefineBase,
|
||||
ΔdefineComponent,
|
||||
ΔdefineDirective,
|
||||
ΔdefinePipe,
|
||||
ΔdefineNgModule,
|
||||
detectChanges as ɵdetectChanges,
|
||||
renderComponent as ɵrenderComponent,
|
||||
AttributeMarker as ɵAttributeMarker,
|
||||
@ -21,16 +21,16 @@ export {
|
||||
ComponentRef as ɵRender3ComponentRef,
|
||||
DirectiveType as ɵDirectiveType,
|
||||
RenderFlags as ɵRenderFlags,
|
||||
directiveInject as ɵdirectiveInject,
|
||||
injectAttribute as ɵinjectAttribute,
|
||||
getFactoryOf as ɵgetFactoryOf,
|
||||
getInheritedFactory as ɵgetInheritedFactory,
|
||||
setComponentScope as ɵsetComponentScope,
|
||||
setNgModuleScope as ɵsetNgModuleScope,
|
||||
templateRefExtractor as ɵtemplateRefExtractor,
|
||||
ProvidersFeature as ɵProvidersFeature,
|
||||
InheritDefinitionFeature as ɵInheritDefinitionFeature,
|
||||
NgOnChangesFeature as ɵNgOnChangesFeature,
|
||||
ΔdirectiveInject,
|
||||
ΔinjectAttribute,
|
||||
ΔgetFactoryOf,
|
||||
ΔgetInheritedFactory,
|
||||
ΔsetComponentScope,
|
||||
ΔsetNgModuleScope,
|
||||
ΔtemplateRefExtractor,
|
||||
ΔProvidersFeature,
|
||||
ΔInheritDefinitionFeature,
|
||||
ΔNgOnChangesFeature,
|
||||
LifecycleHooksFeature as ɵLifecycleHooksFeature,
|
||||
NgModuleType as ɵNgModuleType,
|
||||
NgModuleRef as ɵRender3NgModuleRef,
|
||||
@ -38,106 +38,106 @@ export {
|
||||
markDirty as ɵmarkDirty,
|
||||
NgModuleFactory as ɵNgModuleFactory,
|
||||
NO_CHANGE as ɵNO_CHANGE,
|
||||
container as ɵcontainer,
|
||||
nextContext as ɵnextContext,
|
||||
elementStart as ɵelementStart,
|
||||
namespaceHTML as ɵnamespaceHTML,
|
||||
namespaceMathML as ɵnamespaceMathML,
|
||||
namespaceSVG as ɵnamespaceSVG,
|
||||
element as ɵelement,
|
||||
listener as ɵlistener,
|
||||
text as ɵtext,
|
||||
embeddedViewStart as ɵembeddedViewStart,
|
||||
projection as ɵprojection,
|
||||
bind as ɵbind,
|
||||
interpolation1 as ɵinterpolation1,
|
||||
interpolation2 as ɵinterpolation2,
|
||||
interpolation3 as ɵinterpolation3,
|
||||
interpolation4 as ɵinterpolation4,
|
||||
interpolation5 as ɵinterpolation5,
|
||||
interpolation6 as ɵinterpolation6,
|
||||
interpolation7 as ɵinterpolation7,
|
||||
interpolation8 as ɵinterpolation8,
|
||||
interpolationV as ɵinterpolationV,
|
||||
pipeBind1 as ɵpipeBind1,
|
||||
pipeBind2 as ɵpipeBind2,
|
||||
pipeBind3 as ɵpipeBind3,
|
||||
pipeBind4 as ɵpipeBind4,
|
||||
pipeBindV as ɵpipeBindV,
|
||||
pureFunction0 as ɵpureFunction0,
|
||||
pureFunction1 as ɵpureFunction1,
|
||||
pureFunction2 as ɵpureFunction2,
|
||||
pureFunction3 as ɵpureFunction3,
|
||||
pureFunction4 as ɵpureFunction4,
|
||||
pureFunction5 as ɵpureFunction5,
|
||||
pureFunction6 as ɵpureFunction6,
|
||||
pureFunction7 as ɵpureFunction7,
|
||||
pureFunction8 as ɵpureFunction8,
|
||||
pureFunctionV as ɵpureFunctionV,
|
||||
getCurrentView as ɵgetCurrentView,
|
||||
Δcontainer,
|
||||
ΔnextContext,
|
||||
ΔelementStart,
|
||||
ΔnamespaceHTML,
|
||||
ΔnamespaceMathML,
|
||||
ΔnamespaceSVG,
|
||||
Δelement,
|
||||
Δlistener,
|
||||
Δtext,
|
||||
ΔembeddedViewStart,
|
||||
Δprojection,
|
||||
Δbind,
|
||||
Δinterpolation1,
|
||||
Δinterpolation2,
|
||||
Δinterpolation3,
|
||||
Δinterpolation4,
|
||||
Δinterpolation5,
|
||||
Δinterpolation6,
|
||||
Δinterpolation7,
|
||||
Δinterpolation8,
|
||||
ΔinterpolationV,
|
||||
ΔpipeBind1,
|
||||
ΔpipeBind2,
|
||||
ΔpipeBind3,
|
||||
ΔpipeBind4,
|
||||
ΔpipeBindV,
|
||||
ΔpureFunction0,
|
||||
ΔpureFunction1,
|
||||
ΔpureFunction2,
|
||||
ΔpureFunction3,
|
||||
ΔpureFunction4,
|
||||
ΔpureFunction5,
|
||||
ΔpureFunction6,
|
||||
ΔpureFunction7,
|
||||
ΔpureFunction8,
|
||||
ΔpureFunctionV,
|
||||
ΔgetCurrentView,
|
||||
getDirectives as ɵgetDirectives,
|
||||
getHostElement as ɵgetHostElement,
|
||||
restoreView as ɵrestoreView,
|
||||
containerRefreshStart as ɵcontainerRefreshStart,
|
||||
containerRefreshEnd as ɵcontainerRefreshEnd,
|
||||
queryRefresh as ɵqueryRefresh,
|
||||
viewQuery as ɵviewQuery,
|
||||
staticViewQuery as ɵstaticViewQuery,
|
||||
staticContentQuery as ɵstaticContentQuery,
|
||||
loadViewQuery as ɵloadViewQuery,
|
||||
contentQuery as ɵcontentQuery,
|
||||
loadContentQuery as ɵloadContentQuery,
|
||||
elementEnd as ɵelementEnd,
|
||||
elementProperty as ɵelementProperty,
|
||||
componentHostSyntheticProperty as ɵcomponentHostSyntheticProperty,
|
||||
componentHostSyntheticListener as ɵcomponentHostSyntheticListener,
|
||||
projectionDef as ɵprojectionDef,
|
||||
reference as ɵreference,
|
||||
enableBindings as ɵenableBindings,
|
||||
disableBindings as ɵdisableBindings,
|
||||
allocHostVars as ɵallocHostVars,
|
||||
elementAttribute as ɵelementAttribute,
|
||||
elementContainerStart as ɵelementContainerStart,
|
||||
elementContainerEnd as ɵelementContainerEnd,
|
||||
elementStyling as ɵelementStyling,
|
||||
elementStylingMap as ɵelementStylingMap,
|
||||
elementStyleProp as ɵelementStyleProp,
|
||||
elementStylingApply as ɵelementStylingApply,
|
||||
elementClassProp as ɵelementClassProp,
|
||||
ΔrestoreView,
|
||||
ΔcontainerRefreshStart,
|
||||
ΔcontainerRefreshEnd,
|
||||
ΔqueryRefresh,
|
||||
ΔviewQuery,
|
||||
ΔstaticViewQuery,
|
||||
ΔstaticContentQuery,
|
||||
ΔloadViewQuery,
|
||||
ΔcontentQuery,
|
||||
ΔloadContentQuery,
|
||||
ΔelementEnd,
|
||||
ΔelementProperty,
|
||||
ΔcomponentHostSyntheticProperty,
|
||||
ΔcomponentHostSyntheticListener,
|
||||
ΔprojectionDef,
|
||||
Δreference,
|
||||
ΔenableBindings,
|
||||
ΔdisableBindings,
|
||||
ΔallocHostVars,
|
||||
ΔelementAttribute,
|
||||
ΔelementContainerStart,
|
||||
ΔelementContainerEnd,
|
||||
ΔelementStyling,
|
||||
ΔelementStylingMap,
|
||||
ΔelementStyleProp,
|
||||
ΔelementStylingApply,
|
||||
ΔelementClassProp,
|
||||
|
||||
elementHostAttrs as ɵelementHostAttrs,
|
||||
elementHostStyling as ɵelementHostStyling,
|
||||
elementHostStylingMap as ɵelementHostStylingMap,
|
||||
elementHostStyleProp as ɵelementHostStyleProp,
|
||||
elementHostClassProp as ɵelementHostClassProp,
|
||||
elementHostStylingApply as ɵelementHostStylingApply,
|
||||
ΔelementHostAttrs,
|
||||
ΔelementHostStyling,
|
||||
ΔelementHostStylingMap,
|
||||
ΔelementHostStyleProp,
|
||||
ΔelementHostClassProp,
|
||||
ΔelementHostStylingApply,
|
||||
|
||||
select as ɵselect,
|
||||
textBinding as ɵtextBinding,
|
||||
template as ɵtemplate,
|
||||
embeddedViewEnd as ɵembeddedViewEnd,
|
||||
Δselect,
|
||||
ΔtextBinding,
|
||||
Δtemplate,
|
||||
ΔembeddedViewEnd,
|
||||
store as ɵstore,
|
||||
load as ɵload,
|
||||
pipe as ɵpipe,
|
||||
BaseDef as ɵBaseDef,
|
||||
Δload,
|
||||
Δpipe,
|
||||
ΔBaseDef,
|
||||
ComponentDef as ɵComponentDef,
|
||||
ComponentDefWithMeta as ɵComponentDefWithMeta,
|
||||
ΔComponentDefWithMeta,
|
||||
DirectiveDef as ɵDirectiveDef,
|
||||
DirectiveDefWithMeta as ɵDirectiveDefWithMeta,
|
||||
ΔDirectiveDefWithMeta,
|
||||
PipeDef as ɵPipeDef,
|
||||
PipeDefWithMeta as ɵPipeDefWithMeta,
|
||||
ΔPipeDefWithMeta,
|
||||
whenRendered as ɵwhenRendered,
|
||||
i18n as ɵi18n,
|
||||
i18nAttributes as ɵi18nAttributes,
|
||||
i18nExp as ɵi18nExp,
|
||||
i18nStart as ɵi18nStart,
|
||||
i18nEnd as ɵi18nEnd,
|
||||
i18nApply as ɵi18nApply,
|
||||
i18nPostprocess as ɵi18nPostprocess,
|
||||
Δi18n,
|
||||
Δi18nAttributes,
|
||||
Δi18nExp,
|
||||
Δi18nStart,
|
||||
Δi18nEnd,
|
||||
Δi18nApply,
|
||||
Δi18nPostprocess,
|
||||
setClassMetadata as ɵsetClassMetadata,
|
||||
resolveWindow as ɵresolveWindow,
|
||||
resolveDocument as ɵresolveDocument,
|
||||
resolveBody as ɵresolveBody,
|
||||
ΔresolveWindow,
|
||||
ΔresolveDocument,
|
||||
ΔresolveBody,
|
||||
} from './render3/index';
|
||||
|
||||
|
||||
@ -159,18 +159,18 @@ export {
|
||||
|
||||
export {
|
||||
NgModuleDef as ɵNgModuleDef,
|
||||
NgModuleDefWithMeta as ɵNgModuleDefWithMeta,
|
||||
ΔNgModuleDefWithMeta,
|
||||
NgModuleTransitiveScopes as ɵNgModuleTransitiveScopes,
|
||||
} from './metadata/ng_module';
|
||||
|
||||
export {
|
||||
sanitizeHtml as ɵsanitizeHtml,
|
||||
sanitizeStyle as ɵsanitizeStyle,
|
||||
defaultStyleSanitizer as ɵdefaultStyleSanitizer,
|
||||
sanitizeScript as ɵsanitizeScript,
|
||||
sanitizeUrl as ɵsanitizeUrl,
|
||||
sanitizeResourceUrl as ɵsanitizeResourceUrl,
|
||||
sanitizeUrlOrResourceUrl as ɵsanitizeUrlOrResourceUrl,
|
||||
ΔsanitizeHtml,
|
||||
ΔsanitizeStyle,
|
||||
ΔdefaultStyleSanitizer,
|
||||
ΔsanitizeScript,
|
||||
ΔsanitizeUrl,
|
||||
ΔsanitizeResourceUrl,
|
||||
ΔsanitizeUrlOrResourceUrl,
|
||||
} from './sanitization/sanitization';
|
||||
|
||||
export {
|
||||
|
@ -14,11 +14,11 @@
|
||||
|
||||
export * from './metadata';
|
||||
export {InjectFlags} from './interface/injector';
|
||||
export {defineInjectable, defineInjector, InjectableType, InjectorType} from './interface/defs';
|
||||
export {ΔdefineInjectable, defineInjectable, ΔdefineInjector, InjectableType, InjectorType} from './interface/defs';
|
||||
export {forwardRef, resolveForwardRef, ForwardRefFn} from './forward_ref';
|
||||
export {Injectable, InjectableDecorator, InjectableProvider} from './injectable';
|
||||
export {INJECTOR, Injector} from './injector';
|
||||
export {inject} from './injector_compatibility';
|
||||
export {Δinject, inject} from './injector_compatibility';
|
||||
export {ReflectiveInjector} from './reflective_injector';
|
||||
export {StaticProvider, ValueProvider, ConstructorSansProvider, ExistingProvider, FactoryProvider, Provider, TypeProvider, ClassProvider} from './interface/provider';
|
||||
export {ResolvedReflectiveFactory, ResolvedReflectiveProvider} from './reflective_provider';
|
||||
|
@ -8,7 +8,8 @@
|
||||
|
||||
import {Type} from '../interface/type';
|
||||
import {TypeDecorator, makeDecorator} from '../util/decorators';
|
||||
import {InjectableDef, InjectableType, defineInjectable, getInjectableDef} from './interface/defs';
|
||||
|
||||
import {InjectableType, getInjectableDef, ΔInjectableDef, ΔdefineInjectable} from './interface/defs';
|
||||
import {ClassSansProvider, ConstructorSansProvider, ExistingSansProvider, FactorySansProvider, StaticClassSansProvider, ValueSansProvider} from './interface/provider';
|
||||
import {compileInjectable as render3CompileInjectable} from './jit/injectable';
|
||||
import {convertInjectableProviderToFactory} from './util';
|
||||
@ -79,7 +80,7 @@ export const Injectable: InjectableDecorator = makeDecorator(
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export interface InjectableType<T> extends Type<T> { ngInjectableDef: InjectableDef<T>; }
|
||||
export interface InjectableType<T> extends Type<T> { ngInjectableDef: ΔInjectableDef<T>; }
|
||||
|
||||
/**
|
||||
* Supports @Injectable() in JIT mode for Render2.
|
||||
@ -88,7 +89,7 @@ function render2CompileInjectable(
|
||||
injectableType: InjectableType<any>,
|
||||
options: {providedIn?: Type<any>| 'root' | null} & InjectableProvider): void {
|
||||
if (options && options.providedIn !== undefined && !getInjectableDef(injectableType)) {
|
||||
injectableType.ngInjectableDef = defineInjectable({
|
||||
injectableType.ngInjectableDef = ΔdefineInjectable({
|
||||
providedIn: options.providedIn,
|
||||
factory: convertInjectableProviderToFactory(injectableType, options),
|
||||
});
|
||||
|
@ -8,7 +8,7 @@
|
||||
|
||||
import {Type} from '../interface/type';
|
||||
|
||||
import {defineInjectable} from './interface/defs';
|
||||
import {ΔdefineInjectable} from './interface/defs';
|
||||
|
||||
/**
|
||||
* Creates a token that can be used in a DI Provider.
|
||||
@ -67,7 +67,7 @@ export class InjectionToken<T> {
|
||||
// We are using it to assign `-1` which is used to identify `Injector`.
|
||||
(this as any).__NG_ELEMENT_ID__ = options;
|
||||
} else if (options !== undefined) {
|
||||
this.ngInjectableDef = defineInjectable({
|
||||
this.ngInjectableDef = ΔdefineInjectable({
|
||||
providedIn: options.providedIn || 'root',
|
||||
factory: options.factory,
|
||||
});
|
||||
|
@ -11,8 +11,8 @@ import {getClosureSafeProperty} from '../util/property';
|
||||
import {stringify} from '../util/stringify';
|
||||
import {resolveForwardRef} from './forward_ref';
|
||||
import {InjectionToken} from './injection_token';
|
||||
import {inject} from './injector_compatibility';
|
||||
import {defineInjectable} from './interface/defs';
|
||||
import {Δinject} from './injector_compatibility';
|
||||
import {ΔdefineInjectable} from './interface/defs';
|
||||
import {InjectFlags} from './interface/injector';
|
||||
import {ConstructorProvider, ExistingProvider, FactoryProvider, StaticClassProvider, StaticProvider, ValueProvider} from './interface/provider';
|
||||
import {Inject, Optional, Self, SkipSelf} from './metadata';
|
||||
@ -107,9 +107,9 @@ export abstract class Injector {
|
||||
}
|
||||
|
||||
/** @nocollapse */
|
||||
static ngInjectableDef = defineInjectable({
|
||||
static ngInjectableDef = ΔdefineInjectable({
|
||||
providedIn: 'any' as any,
|
||||
factory: () => inject(INJECTOR),
|
||||
factory: () => Δinject(INJECTOR),
|
||||
});
|
||||
|
||||
/**
|
||||
|
@ -11,7 +11,7 @@ import {stringify} from '../util/stringify';
|
||||
|
||||
import {InjectionToken} from './injection_token';
|
||||
import {Injector} from './injector';
|
||||
import {InjectableDef, getInjectableDef} from './interface/defs';
|
||||
import {getInjectableDef, ΔInjectableDef} from './interface/defs';
|
||||
import {InjectFlags} from './interface/injector';
|
||||
import {Inject, Optional, Self, SkipSelf} from './metadata';
|
||||
|
||||
@ -69,7 +69,13 @@ export function injectInjectorOnly<T>(
|
||||
}
|
||||
|
||||
/**
|
||||
* Injects a token from the currently active injector.
|
||||
* Generated instruction: Injects a token from the currently active injector.
|
||||
*
|
||||
* WARNING: This function is meant to be generated by the Ivy compiler, and is not meant for
|
||||
* developer consumption!
|
||||
*
|
||||
* https://github.com/angular/angular/blob/master/packages/core/src/render3/DELTA_INSTRUCTIONS.md
|
||||
*
|
||||
* Must be used in the context of a factory function such as one defined for an
|
||||
* `InjectionToken`. Throws an error if not called from such a context.
|
||||
*
|
||||
@ -91,11 +97,17 @@ export function injectInjectorOnly<T>(
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function inject<T>(token: Type<T>| InjectionToken<T>): T;
|
||||
export function inject<T>(token: Type<T>| InjectionToken<T>, flags?: InjectFlags): T|null;
|
||||
export function inject<T>(token: Type<T>| InjectionToken<T>, flags = InjectFlags.Default): T|null {
|
||||
export function Δinject<T>(token: Type<T>| InjectionToken<T>): T;
|
||||
export function Δinject<T>(token: Type<T>| InjectionToken<T>, flags?: InjectFlags): T|null;
|
||||
export function Δinject<T>(token: Type<T>| InjectionToken<T>, flags = InjectFlags.Default): T|null {
|
||||
return (_injectImplementation || injectInjectorOnly)(token, flags);
|
||||
}
|
||||
/**
|
||||
* @deprecated in v8, delete after v10. This API should be used only be generated code, and that
|
||||
* code should now use Δinject instead.
|
||||
* @publicApi
|
||||
*/
|
||||
export const inject = Δinject;
|
||||
|
||||
/**
|
||||
* Injects `root` tokens in limp mode.
|
||||
@ -106,7 +118,7 @@ export function inject<T>(token: Type<T>| InjectionToken<T>, flags = InjectFlags
|
||||
*/
|
||||
export function injectRootLimpMode<T>(
|
||||
token: Type<T>| InjectionToken<T>, notFoundValue: T | undefined, flags: InjectFlags): T|null {
|
||||
const injectableDef: InjectableDef<T>|null = getInjectableDef(token);
|
||||
const injectableDef: ΔInjectableDef<T>|null = getInjectableDef(token);
|
||||
if (injectableDef && injectableDef.providedIn == 'root') {
|
||||
return injectableDef.value === undefined ? injectableDef.value = injectableDef.factory() :
|
||||
injectableDef.value;
|
||||
@ -142,9 +154,9 @@ export function injectArgs(types: (Type<any>| InjectionToken<any>| any[])[]): an
|
||||
}
|
||||
}
|
||||
|
||||
args.push(inject(type !, flags));
|
||||
args.push(Δinject(type !, flags));
|
||||
} else {
|
||||
args.push(inject(arg));
|
||||
args.push(Δinject(arg));
|
||||
}
|
||||
}
|
||||
return args;
|
||||
|
@ -23,8 +23,10 @@ import {ClassProvider, ConstructorProvider, ExistingProvider, FactoryProvider, S
|
||||
* that the injectable does not belong to any scope.
|
||||
*
|
||||
* NOTE: This is a private type and should not be exported
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export interface InjectableDef<T> {
|
||||
export interface ΔInjectableDef<T> {
|
||||
/**
|
||||
* Specifies that the given type belongs to a particular injector:
|
||||
* - `InjectorType` such as `NgModule`,
|
||||
@ -55,8 +57,10 @@ export interface InjectableDef<T> {
|
||||
* an import/dependency structure).
|
||||
*
|
||||
* NOTE: This is a private type and should not be exported
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export interface InjectorDef<T> {
|
||||
export interface ΔInjectorDef<T> {
|
||||
factory: () => T;
|
||||
|
||||
// TODO(alxhub): Narrow down the type here once decorators properly change the return type of the
|
||||
@ -127,15 +131,22 @@ export interface InjectorTypeWithProviders<T> {
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function defineInjectable<T>(opts: {
|
||||
export function ΔdefineInjectable<T>(opts: {
|
||||
providedIn?: Type<any>| 'root' | 'any' | null,
|
||||
factory: () => T,
|
||||
}): never {
|
||||
return ({
|
||||
providedIn: opts.providedIn as any || null, factory: opts.factory, value: undefined,
|
||||
} as InjectableDef<T>) as never;
|
||||
} as ΔInjectableDef<T>) as never;
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated in v8, delete after v10. This API should be used only be generated code, and that
|
||||
* code should now use ΔdefineInjectable instead.
|
||||
* @publicApi
|
||||
*/
|
||||
export const defineInjectable = ΔdefineInjectable;
|
||||
|
||||
/**
|
||||
* Construct an `InjectorDef` which configures an injector.
|
||||
*
|
||||
@ -156,11 +167,11 @@ export function defineInjectable<T>(opts: {
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function defineInjector(options: {factory: () => any, providers?: any[], imports?: any[]}):
|
||||
export function ΔdefineInjector(options: {factory: () => any, providers?: any[], imports?: any[]}):
|
||||
never {
|
||||
return ({
|
||||
factory: options.factory, providers: options.providers || [], imports: options.imports || [],
|
||||
} as InjectorDef<any>) as never;
|
||||
} as ΔInjectorDef<any>) as never;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -168,7 +179,7 @@ export function defineInjector(options: {factory: () => any, providers?: any[],
|
||||
*
|
||||
* @param type type which may have `ngInjectableDef`
|
||||
*/
|
||||
export function getInjectableDef<T>(type: any): InjectableDef<T>|null {
|
||||
export function getInjectableDef<T>(type: any): ΔInjectableDef<T>|null {
|
||||
return type && type.hasOwnProperty(NG_INJECTABLE_DEF) ? (type as any)[NG_INJECTABLE_DEF] : null;
|
||||
}
|
||||
|
||||
@ -177,7 +188,7 @@ export function getInjectableDef<T>(type: any): InjectableDef<T>|null {
|
||||
*
|
||||
* @param type type which may have `ngInjectorDef`
|
||||
*/
|
||||
export function getInjectorDef<T>(type: any): InjectorDef<T>|null {
|
||||
export function getInjectorDef<T>(type: any): ΔInjectorDef<T>|null {
|
||||
return type && type.hasOwnProperty(NG_INJECTOR_DEF) ? (type as any)[NG_INJECTOR_DEF] : null;
|
||||
}
|
||||
|
||||
|
@ -7,8 +7,9 @@
|
||||
*/
|
||||
|
||||
import {Type} from '../../interface/type';
|
||||
import {inject} from '../injector_compatibility';
|
||||
import {defineInjectable, defineInjector, getInjectableDef, getInjectorDef} from '../interface/defs';
|
||||
import {Δinject} from '../injector_compatibility';
|
||||
import {getInjectableDef, getInjectorDef, ΔdefineInjectable, ΔdefineInjector} from '../interface/defs';
|
||||
|
||||
|
||||
|
||||
/**
|
||||
@ -17,10 +18,10 @@ import {defineInjectable, defineInjector, getInjectableDef, getInjectorDef} from
|
||||
* This should be kept up to date with the public exports of @angular/core.
|
||||
*/
|
||||
export const angularCoreDiEnv: {[name: string]: Function} = {
|
||||
'defineInjectable': defineInjectable,
|
||||
'defineInjector': defineInjector,
|
||||
'inject': inject,
|
||||
'ɵgetFactoryOf': getFactoryOf,
|
||||
'ΔdefineInjectable': ΔdefineInjectable,
|
||||
'ΔdefineInjector': ΔdefineInjector,
|
||||
'Δinject': Δinject,
|
||||
'ΔgetFactoryOf': getFactoryOf,
|
||||
};
|
||||
|
||||
function getFactoryOf<T>(type: Type<any>): ((type: Type<T>| null) => T)|null {
|
||||
|
@ -9,16 +9,18 @@
|
||||
import {OnDestroy} from '../interface/lifecycle_hooks';
|
||||
import {Type} from '../interface/type';
|
||||
import {stringify} from '../util/stringify';
|
||||
|
||||
import {resolveForwardRef} from './forward_ref';
|
||||
import {InjectionToken} from './injection_token';
|
||||
import {INJECTOR, Injector, NG_TEMP_TOKEN_PATH, NullInjector, USE_VALUE, catchInjectorError} from './injector';
|
||||
import {inject, injectArgs, setCurrentInjector} from './injector_compatibility';
|
||||
import {InjectableDef, InjectableType, InjectorType, InjectorTypeWithProviders, getInjectableDef, getInjectorDef} from './interface/defs';
|
||||
import {injectArgs, setCurrentInjector, Δinject} from './injector_compatibility';
|
||||
import {InjectableType, InjectorType, InjectorTypeWithProviders, getInjectableDef, getInjectorDef, ΔInjectableDef} from './interface/defs';
|
||||
import {InjectFlags} from './interface/injector';
|
||||
import {ClassProvider, ConstructorProvider, ExistingProvider, FactoryProvider, StaticClassProvider, StaticProvider, TypeProvider, ValueProvider} from './interface/provider';
|
||||
import {APP_ROOT} from './scope';
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Internal type for a single provider in a deep provider array.
|
||||
*/
|
||||
@ -354,7 +356,7 @@ export class R3Injector {
|
||||
return record.value as T;
|
||||
}
|
||||
|
||||
private injectableDefInScope(def: InjectableDef<any>): boolean {
|
||||
private injectableDefInScope(def: ΔInjectableDef<any>): boolean {
|
||||
if (!def.providedIn) {
|
||||
return false;
|
||||
} else if (typeof def.providedIn === 'string') {
|
||||
@ -411,7 +413,7 @@ export function providerToFactory(
|
||||
if (isValueProvider(provider)) {
|
||||
factory = () => resolveForwardRef(provider.useValue);
|
||||
} else if (isExistingProvider(provider)) {
|
||||
factory = () => inject(resolveForwardRef(provider.useExisting));
|
||||
factory = () => Δinject(resolveForwardRef(provider.useExisting));
|
||||
} else if (isFactoryProvider(provider)) {
|
||||
factory = () => provider.useFactory(...injectArgs(provider.deps || []));
|
||||
} else {
|
||||
|
@ -10,7 +10,7 @@ import {Type} from '../interface/type';
|
||||
import {ReflectionCapabilities} from '../reflection/reflection_capabilities';
|
||||
import {getClosureSafeProperty} from '../util/property';
|
||||
|
||||
import {inject, injectArgs} from './injector_compatibility';
|
||||
import {injectArgs, Δinject} from './injector_compatibility';
|
||||
import {ClassSansProvider, ConstructorSansProvider, ExistingSansProvider, FactorySansProvider, StaticClassSansProvider, ValueProvider, ValueSansProvider} from './interface/provider';
|
||||
|
||||
const USE_VALUE =
|
||||
@ -32,7 +32,7 @@ export function convertInjectableProviderToFactory(
|
||||
return () => valueProvider.useValue;
|
||||
} else if ((provider as ExistingSansProvider).useExisting) {
|
||||
const existingProvider = (provider as ExistingSansProvider);
|
||||
return () => inject(existingProvider.useExisting);
|
||||
return () => Δinject(existingProvider.useExisting);
|
||||
} else if ((provider as FactorySansProvider).useFactory) {
|
||||
const factoryProvider = (provider as FactorySansProvider);
|
||||
return () => factoryProvider.useFactory(...injectArgs(factoryProvider.deps || EMPTY_ARRAY));
|
||||
|
@ -7,7 +7,7 @@
|
||||
*/
|
||||
|
||||
import {ApplicationRef} from '../application_ref';
|
||||
import {InjectorType, defineInjector} from '../di/interface/defs';
|
||||
import {InjectorType, ΔdefineInjector} from '../di/interface/defs';
|
||||
import {Provider} from '../di/interface/provider';
|
||||
import {convertInjectableProviderToFactory} from '../di/util';
|
||||
import {Type} from '../interface/type';
|
||||
@ -32,7 +32,10 @@ export interface NgModuleTransitiveScopes {
|
||||
schemas: SchemaMetadata[]|null;
|
||||
}
|
||||
|
||||
export type NgModuleDefWithMeta<T, Declarations, Imports, Exports> = NgModuleDef<T>;
|
||||
/**
|
||||
* @publicApi
|
||||
*/
|
||||
export type ΔNgModuleDefWithMeta<T, Declarations, Imports, Exports> = NgModuleDef<T>;
|
||||
|
||||
/**
|
||||
* Runtime link information for NgModules.
|
||||
@ -40,7 +43,7 @@ export type NgModuleDefWithMeta<T, Declarations, Imports, Exports> = NgModuleDef
|
||||
* This is the internal data structure used by the runtime to assemble components, directives,
|
||||
* pipes, and injectors.
|
||||
*
|
||||
* NOTE: Always use `defineNgModule` function to create this object,
|
||||
* NOTE: Always use `ΔdefineNgModule` function to create this object,
|
||||
* never create the object directly since the shape of this object
|
||||
* can change between versions.
|
||||
*/
|
||||
@ -344,7 +347,7 @@ function preR3NgModuleCompile(moduleType: InjectorType<any>, metadata: NgModule)
|
||||
imports = [...imports, metadata.exports];
|
||||
}
|
||||
|
||||
moduleType.ngInjectorDef = defineInjector({
|
||||
moduleType.ngInjectorDef = ΔdefineInjector({
|
||||
factory: convertInjectableProviderToFactory(moduleType, {useClass: moduleType}),
|
||||
providers: metadata && metadata.providers,
|
||||
imports: imports,
|
||||
|
@ -21,10 +21,10 @@
|
||||
* The below symbols are used for @Injectable and @NgModule compilation.
|
||||
*/
|
||||
|
||||
export {inject} from './di/injector_compatibility';
|
||||
export {InjectableDef, InjectorDef, defineInjectable, defineInjector} from './di/interface/defs';
|
||||
export {NgModuleDef, NgModuleDefWithMeta} from './metadata/ng_module';
|
||||
export {defineNgModule} from './render3/definition';
|
||||
export {Δinject} from './di/injector_compatibility';
|
||||
export {ΔInjectableDef, ΔInjectorDef, ΔdefineInjectable, ΔdefineInjector} from './di/interface/defs';
|
||||
export {NgModuleDef, ΔNgModuleDefWithMeta} from './metadata/ng_module';
|
||||
export {ΔdefineNgModule} from './render3/definition';
|
||||
export {setClassMetadata} from './render3/metadata';
|
||||
export {NgModuleFactory} from './render3/ng_module_ref';
|
||||
|
||||
|
9
packages/core/src/render3/DELTA_INSTRUCTIONS.md
Normal file
9
packages/core/src/render3/DELTA_INSTRUCTIONS.md
Normal file
@ -0,0 +1,9 @@
|
||||
# Delta Instructions
|
||||
|
||||
Ivy exports a number of functions prefixed with `Δ`, for example `ΔelementStart`, or `Δinject`, et al. These functions are referred to an "instructions" or "delta" instructions. They are functions that are called by code generated by the Ivy compiler that must be publicly exposed in order to be consumed by this generated code. **They are not meant for developer consumption**. The reason they are prefixed with `Δ` is not only to identify them as different from other functions, but also to make them not show up at the top of IDE code completion in environments such as Visual Studio code.
|
||||
|
||||
|
||||
### Guidance
|
||||
|
||||
- Do not use `Δ` functions directly. They are meant to be used in generated code.
|
||||
- Do not create new `Δ` functions, it's not a convention that Angular consumes, and it is liable to confuse other developers into thinking consuming Angular's `Δ` functions is a good pattern to follow.
|
@ -10,8 +10,8 @@ We currently expect Ivy to remain behind the flag until it's feature complete an
|
||||
|
||||
The work can be divided into three categories:
|
||||
- `@angular/compiler-cli`: TypeScript transformer pipeline which includes two command line tools:
|
||||
- `ngtsc`: (Angular TypeScript Compiler) Angular compiler which strips out `@Component` (and friends) and replaces it with `defineComponent` (and friends).
|
||||
- `ngcc`: (Angular Compatibility Compiler) NPM upgrade compiler which reads the `STORING_METADATA_IN_D.TS.json` files and `.js` files and adds `defineComponent` (and friends) into the `node_module`. This in effect converts a pre-ivy module into ivy module.
|
||||
- `ngtsc`: (Angular TypeScript Compiler) Angular compiler which strips out `@Component` (and friends) and replaces it with `ΔdefineComponent` (and friends).
|
||||
- `ngcc`: (Angular Compatibility Compiler) NPM upgrade compiler which reads the `STORING_METADATA_IN_D.TS.json` files and `.js` files and adds `ΔdefineComponent` (and friends) into the `node_module`. This in effect converts a pre-ivy module into ivy module.
|
||||
- `@angular/compiler`: Ivy Compiler which converts decorator into ivy
|
||||
- `@angular/core`: Decorators which can be patched with `@angular/compiler`.
|
||||
|
||||
@ -20,7 +20,7 @@ The work can be divided into three categories:
|
||||
### `ngtsc` TSC compiler transformer
|
||||
|
||||
TSC transformer which removes and converts `@Pipe`, `@Component`, `@Directive` and `@NgModule`
|
||||
to the corresponding `definePipe`, `defineComponent`, `defineDirective` and `defineInjector`.
|
||||
to the corresponding `ΔdefinePipe`, `ΔdefineComponent`, `ΔdefineDirective` and `ΔdefineInjector`.
|
||||
|
||||
- ✅ Basic setup of the transformer into `tsc`
|
||||
- ✅ Can read STORING_METADATA_IN_D.TS from `.d.ts` (see: [STORING_METADATA_IN_D.TS.md](./STORING_METADATA_IN_D.TS.md))
|
||||
@ -40,19 +40,19 @@ A tool which "upgrades" `node_module` compiled with non-ivy `ngc` into ivy compl
|
||||
|
||||
## `@angular/compiler` changes
|
||||
|
||||
- ✅ Component compilation: Translates `@Component` => `defineComponent`
|
||||
- ✅ Component compilation: Translates `@Component` => `ΔdefineComponent`
|
||||
- ✅ `TemplateCompiler` (current known as `ViewCompiler`)
|
||||
- ✅ `StyleCompiler`
|
||||
- ✅ `PipeCompiler`: Translates `@Pipe` => `definePipe`
|
||||
- ✅ `DirectiveCompiler`: Translates `@Directive` => `defineDirective`
|
||||
- ✅ `InjectableCompiler`: Translates `@Injectable` => `defineInjectable`
|
||||
- ✅ `NgModuleCompiler`: Translates `@NgModule` => `defineInjector` (and `defineNgModule` only in jit)
|
||||
- ✅ `PipeCompiler`: Translates `@Pipe` => `ΔdefinePipe`
|
||||
- ✅ `DirectiveCompiler`: Translates `@Directive` => `ΔdefineDirective`
|
||||
- ✅ `InjectableCompiler`: Translates `@Injectable` => `ΔdefineInjectable`
|
||||
- ✅ `NgModuleCompiler`: Translates `@NgModule` => `ΔdefineInjector` (and `ΔdefineNgModule` only in jit)
|
||||
- ❌ Documentation
|
||||
|
||||
|
||||
## `@angular/core` changes
|
||||
|
||||
The goal is for the `@Component` (and friends) to be the compiler of template. Since decorators are functions which execute during parsing of the `.js` file, the decorator can compile the template into Ivy. The AoT compiler's job is to remove the `@Component` and replace it with call to `defineComponent`.
|
||||
The goal is for the `@Component` (and friends) to be the compiler of template. Since decorators are functions which execute during parsing of the `.js` file, the decorator can compile the template into Ivy. The AoT compiler's job is to remove the `@Component` and replace it with call to `ΔdefineComponent`.
|
||||
|
||||
- ✅ `@angular/compiler` can patch itself onto:
|
||||
- ✅ `@Injectable`
|
||||
@ -68,15 +68,15 @@ The goal is for the `@Component` (and friends) to be the compiler of template. S
|
||||
# Crosscutting
|
||||
|
||||
## Decorators
|
||||
| Annotation | `defineXXX()` | Run time | Spec | Compiler |
|
||||
| -------------------- | ------------------------------ | ------- | -------- | -------- |
|
||||
| `@Component` | ✅ `defineComponent()` | ✅ | ✅ | ✅ |
|
||||
| `@Directive` | ✅ `defineDirective()` | ✅ | ✅ | ✅ |
|
||||
| `@Directive` | ✅ `defineBase()` | ✅ | ✅ | ✅ |
|
||||
| `@Pipe` | ✅ `definePipe()` | ✅ | ✅ | ✅ |
|
||||
| `@Injectable` | ✅ `defineInjectable()` | ✅ | ✅ | ✅ |
|
||||
| `@NgModule` | ✅ `defineInjector()` | ✅ | ✅ | ✅ |
|
||||
| `@ConfigureInjector` | ✅ `defineInjector()` | ❌ | ❌ | ❌ |
|
||||
| Annotation | `defineXXX()` | Run time | Spec | Compiler |
|
||||
| -------------------- | ------------------------------ | ------- | -------- | -------- |
|
||||
| `@Component` | ✅ `ΔdefineComponent()` | ✅ | ✅ | ✅ |
|
||||
| `@Directive` | ✅ `ΔdefineDirective()` | ✅ | ✅ | ✅ |
|
||||
| `@Directive` | ✅ `ΔdefineBase()` | ✅ | ✅ | ✅ |
|
||||
| `@Pipe` | ✅ `ΔdefinePipe()` | ✅ | ✅ | ✅ |
|
||||
| `@Injectable` | ✅ `ΔdefineInjectable()` | ✅ | ✅ | ✅ |
|
||||
| `@NgModule` | ✅ `ΔdefineInjector()` | ✅ | ✅ | ✅ |
|
||||
| `@ConfigureInjector` | ✅ `ΔdefineInjector()` | ❌ | ❌ | ❌ |
|
||||
|
||||
|
||||
|
||||
|
@ -4,7 +4,7 @@ Previous version of Angular used `metadata.json` files to store information abou
|
||||
`ngc` compiler would than do a global analysis to generate the `.ngfactory.ts` files from the `metadata.json`.
|
||||
Ivy strives for locality, which means that `ngtsc` should not need any global information in order to compile the system.
|
||||
The above is mostly true.
|
||||
Unfortunately, in order for `ngtsc` to generate code which is tree shakable `ngtsc` does need to have global knowledge.
|
||||
Unfortunately, in order for `ngtsc` to generate code which is tree shakable `ngtsc` does need to have global knowledge.
|
||||
|
||||
Here is an abbreviated example of breakage of tree-shake-ability.
|
||||
```typescript
|
||||
@ -13,7 +13,7 @@ Here is an abbreviated example of breakage of tree-shake-ability.
|
||||
})
|
||||
export class TooltipDirective {
|
||||
// ngtsc generates this:
|
||||
static ngDirectiveDef = defineDirective(...);
|
||||
static ngDirectiveDef = ΔdefineDirective(...);
|
||||
}
|
||||
|
||||
@Component({
|
||||
@ -22,12 +22,12 @@ export class TooltipDirective {
|
||||
})
|
||||
class MyAppComponent {
|
||||
// ngtsc generates this:
|
||||
static ngDirectiveDef = defineComponent({
|
||||
static ngDirectiveDef = ΔdefineComponent({
|
||||
...
|
||||
directives: [
|
||||
// BREAKS TREE-SHAKING!!!
|
||||
// TooltipDirective included here because it was declared in the NgModule
|
||||
// ngtsc does not know it can be omitted.
|
||||
// ngtsc does not know it can be omitted.
|
||||
// Only way for ngtsc to know that it can omit TooltipDirective is if it knows
|
||||
// its selector and see if the selector matches the current component's template.
|
||||
TooltipDirective
|
||||
@ -41,12 +41,12 @@ class MyAppComponent {
|
||||
})
|
||||
class MyAppModule {
|
||||
// ngtsc generates this:
|
||||
static ngDirectiveDef = defineNgModule(...);
|
||||
static ngDirectiveDef = ΔdefineNgModule(...);
|
||||
}
|
||||
```
|
||||
|
||||
Notice that `ngtsc` can't remove `TooltipDirective` because it would need to know its selector and see if the directive matches in the component's template.
|
||||
Knowing the selector breaks locality and so we make an exception for some locality information such as selector, inputs and outputs.
|
||||
Knowing the selector breaks locality and so we make an exception for some locality information such as selector, inputs and outputs.
|
||||
Since we are breaking the locality rule, we need to store the information someplace since `ngtsc` can't have access to the `TooltipDirective` source.
|
||||
We store the information in the `.d.ts` file like so.
|
||||
|
||||
|
@ -36,18 +36,18 @@ The size of the `CONSTS` section is declared in the property `consts` of the com
|
||||
})
|
||||
class MyApp {
|
||||
|
||||
static ngComponentDef = defineComponent({
|
||||
static ngComponentDef = ΔdefineComponent({
|
||||
...,
|
||||
consts: 5,
|
||||
template: function(rf: RenderFlags, ctx: MyApp) {
|
||||
if (rf & RenderFlags.Create) {
|
||||
elementStart(0, 'div');
|
||||
text(1, 'Hello ');
|
||||
elementStart(2, 'b');
|
||||
text(3, 'World');
|
||||
elementEnd();
|
||||
text(4, '!');
|
||||
elementEnd();
|
||||
ΔelementStart(0, 'div');
|
||||
Δtext(1, 'Hello ');
|
||||
ΔelementStart(2, 'b');
|
||||
Δtext(3, 'World');
|
||||
ΔelementEnd();
|
||||
Δtext(4, '!');
|
||||
ΔelementEnd();
|
||||
}
|
||||
...
|
||||
}
|
||||
@ -87,19 +87,19 @@ The size of the `VARS `section is declared in the property `vars` of the compone
|
||||
class MyApp {
|
||||
name = 'World';
|
||||
|
||||
static ngComponentDef = defineComponent({
|
||||
static ngComponentDef = ΔdefineComponent({
|
||||
...,
|
||||
consts: 2, // Two DOM Elements.
|
||||
vars: 2, // Two bindings.
|
||||
template: function(rf: RenderFlags, ctx: MyApp) {
|
||||
if (rf & RenderFlags.Create) {
|
||||
elementStart(0, 'div');
|
||||
text(1);
|
||||
elementEnd();
|
||||
ΔelementStart(0, 'div');
|
||||
Δtext(1);
|
||||
ΔelementEnd();
|
||||
}
|
||||
if (rf & RenderFlags.Update) {
|
||||
elementProperty(0, 'title', bind(ctx.name));
|
||||
textBinding(1, interpolation1('Hello ', ctx.name, '!'));
|
||||
ΔelementProperty(0, 'title', Δbind(ctx.name));
|
||||
ΔtextBinding(1, Δinterpolation1('Hello ', ctx.name, '!'));
|
||||
}
|
||||
...
|
||||
}
|
||||
@ -139,12 +139,12 @@ Examples include:
|
||||
})
|
||||
class MyApp {
|
||||
|
||||
static ngComponentDef = defineComponent({
|
||||
static ngComponentDef = ΔdefineComponent({
|
||||
...,
|
||||
consts: 1,
|
||||
template: function(rf: RenderFlags, ctx: MyApp) {
|
||||
if (rf & RenderFlags.Create) {
|
||||
element(0, 'child', ['tooltip', null]);
|
||||
Δelement(0, 'child', ['tooltip', null]);
|
||||
}
|
||||
...
|
||||
},
|
||||
@ -159,7 +159,7 @@ class MyApp {
|
||||
})
|
||||
class Child {
|
||||
@HostBinding('tooltip') hostTitle = 'Hello World!';
|
||||
static ngComponentDef = defineComponent({
|
||||
static ngComponentDef = ΔdefineComponent({
|
||||
...
|
||||
hostVars: 1
|
||||
});
|
||||
@ -171,7 +171,7 @@ class Child {
|
||||
})
|
||||
class Tooltip {
|
||||
@HostBinding('title') hostTitle = 'greeting';
|
||||
static ngDirectiveDef = defineDirective({
|
||||
static ngDirectiveDef = ΔdefineDirective({
|
||||
...
|
||||
hostVars: 1
|
||||
});
|
||||
@ -273,12 +273,12 @@ Injection tokens are sorted into three sections:
|
||||
})
|
||||
class MyApp {
|
||||
|
||||
static ngComponentDef = defineComponent({
|
||||
static ngComponentDef = ΔdefineComponent({
|
||||
...,
|
||||
consts: 1,
|
||||
template: function(rf: RenderFlags, ctx: MyApp) {
|
||||
if (rf & RenderFlags.Create) {
|
||||
element(0, 'child');
|
||||
Δelement(0, 'child');
|
||||
}
|
||||
...
|
||||
},
|
||||
@ -301,7 +301,7 @@ class MyApp {
|
||||
})
|
||||
class Child {
|
||||
construction(injector: Injector) {}
|
||||
static ngComponentDef = defineComponent({
|
||||
static ngComponentDef = ΔdefineComponent({
|
||||
...
|
||||
features: [
|
||||
ProvidesFeature(
|
||||
@ -348,7 +348,7 @@ NOTICE:
|
||||
Where `factory` is a function which wraps the factory into object which can be monomorphically detected at runtime in an efficient way.
|
||||
```TypeScript
|
||||
class Factory {
|
||||
/// Marker set to true during factory invocation to see if we get into recursive loop.
|
||||
/// Marker set to true during factory invocation to see if we get into recursive loop.
|
||||
/// Recursive loop causes an error to be displayed.
|
||||
resolving = false;
|
||||
constructor(public factory: Function) { }
|
||||
@ -376,13 +376,13 @@ There are several special objects such as `ElementRef`, `ViewContainerRef`, etc.
|
||||
These objects behave as if they are always included in the `providers` array of every component and directive.
|
||||
Adding them always there would prevent tree shaking so they need to be lazily included.
|
||||
|
||||
NOTE:
|
||||
NOTE:
|
||||
An interesting thing about these objects is that they are not memoized `injector.get(ElementRef) !== injector.get(ElementRef)`.
|
||||
This could be considered a bug, it means that we don't have to allocate storage space for them.
|
||||
|
||||
We should treat these special objects like any other token. `directiveInject()` already reads a special `NG_ELEMENT_ID`
|
||||
property set on directives to locate their bit in the bloom filter. We can set this same property on special objects,
|
||||
but point to a factory function rather than an element ID number. When we check that property in `directiveInject()`
|
||||
property set on directives to locate their bit in the bloom filter. We can set this same property on special objects,
|
||||
but point to a factory function rather than an element ID number. When we check that property in `directiveInject()`
|
||||
and see that it's a function, we know to invoke the factory function directly instead of searching the node tree.
|
||||
|
||||
```typescript
|
||||
@ -422,7 +422,7 @@ function inject(token: any): any {
|
||||
if (typeof token === 'function' && injectableDef = token.ngInjectableDef) {
|
||||
const provideIn = injectableDef.provideIn;
|
||||
if (provideIn === '__node_injector__') {
|
||||
// if we are injecting `Injector` than create a wrapper object around the inject but which
|
||||
// if we are injecting `Injector` than create a wrapper object around the inject but which
|
||||
// is bound to the current node.
|
||||
return createInjector();
|
||||
}
|
||||
@ -439,4 +439,4 @@ TODO
|
||||
|
||||
## Combining `LContainer` with `LView`
|
||||
|
||||
TODO
|
||||
TODO
|
||||
|
@ -9,7 +9,7 @@
|
||||
import {ChangeDetectorRef as ViewEngine_ChangeDetectorRef} from '../change_detection/change_detector_ref';
|
||||
import {InjectionToken} from '../di/injection_token';
|
||||
import {Injector} from '../di/injector';
|
||||
import {inject} from '../di/injector_compatibility';
|
||||
import {Δinject} from '../di/injector_compatibility';
|
||||
import {InjectFlags} from '../di/interface/injector';
|
||||
import {Type} from '../interface/type';
|
||||
import {ComponentFactory as viewEngine_ComponentFactory, ComponentRef as viewEngine_ComponentRef} from '../linker/component_factory';
|
||||
@ -66,7 +66,7 @@ function toRefArray(map: {[key: string]: string}): {propName: string; templateNa
|
||||
*/
|
||||
export const ROOT_CONTEXT = new InjectionToken<RootContext>(
|
||||
'ROOT_CONTEXT_TOKEN',
|
||||
{providedIn: 'root', factory: () => createRootContext(inject(SCHEDULER))});
|
||||
{providedIn: 'root', factory: () => createRootContext(Δinject(SCHEDULER))});
|
||||
|
||||
/**
|
||||
* A change detection scheduler token for {@link RootContext}. This token is the default value used
|
||||
|
@ -18,7 +18,7 @@ import {stringify} from '../util/stringify';
|
||||
|
||||
import {EMPTY_ARRAY, EMPTY_OBJ} from './empty';
|
||||
import {NG_COMPONENT_DEF, NG_DIRECTIVE_DEF, NG_MODULE_DEF, NG_PIPE_DEF} from './fields';
|
||||
import {BaseDef, ComponentDef, ComponentDefFeature, ComponentTemplate, ComponentType, ContentQueriesFunction, DirectiveDef, DirectiveDefFeature, DirectiveType, DirectiveTypesOrFactory, FactoryFn, HostBindingsFunction, PipeDef, PipeType, PipeTypesOrFactory, ViewQueriesFunction} from './interfaces/definition';
|
||||
import {ComponentDef, ComponentDefFeature, ComponentTemplate, ComponentType, ContentQueriesFunction, DirectiveDef, DirectiveDefFeature, DirectiveType, DirectiveTypesOrFactory, FactoryFn, HostBindingsFunction, PipeDef, PipeType, PipeTypesOrFactory, ViewQueriesFunction, ΔBaseDef} from './interfaces/definition';
|
||||
// while SelectorFlags is unused here, it's required so that types don't get resolved lazily
|
||||
// see: https://github.com/Microsoft/web-build-tools/issues/1050
|
||||
import {CssSelectorList, SelectorFlags} from './interfaces/projection';
|
||||
@ -39,8 +39,9 @@ let _renderCompCount = 0;
|
||||
* });
|
||||
* }
|
||||
* ```
|
||||
* @publicApi
|
||||
*/
|
||||
export function defineComponent<T>(componentDefinition: {
|
||||
export function ΔdefineComponent<T>(componentDefinition: {
|
||||
/**
|
||||
* Directive type, needed to configure the injector.
|
||||
*/
|
||||
@ -303,7 +304,10 @@ export function defineComponent<T>(componentDefinition: {
|
||||
return def as never;
|
||||
}
|
||||
|
||||
export function setComponentScope(
|
||||
/**
|
||||
* @publicApi
|
||||
*/
|
||||
export function ΔsetComponentScope(
|
||||
type: ComponentType<any>, directives: Type<any>[], pipes: Type<any>[]): void {
|
||||
const def = (type.ngComponentDef as ComponentDef<any>);
|
||||
def.directiveDefs = () => directives.map(extractDirectiveDef);
|
||||
@ -327,7 +331,10 @@ export function extractPipeDef(type: PipeType<any>): PipeDef<any> {
|
||||
return def !;
|
||||
}
|
||||
|
||||
export function defineNgModule<T>(def: {
|
||||
/**
|
||||
* @publicApi
|
||||
*/
|
||||
export function ΔdefineNgModule<T>(def: {
|
||||
/** Token representing the module. Used by DI. */
|
||||
type: T;
|
||||
|
||||
@ -368,8 +375,10 @@ export function defineNgModule<T>(def: {
|
||||
* Scope metadata of modules is not used in production builds, so calls to this function can be
|
||||
* marked pure to tree-shake it from the bundle, allowing for all referenced declarations
|
||||
* to become eligible for tree-shaking as well.
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function setNgModuleScope(type: any, scope: {
|
||||
export function ΔsetNgModuleScope(type: any, scope: {
|
||||
/** List of components, directives, and pipes declared by this module. */
|
||||
declarations?: Type<any>[] | (() => Type<any>[]);
|
||||
|
||||
@ -469,15 +478,19 @@ function invertObject<T>(
|
||||
* Create a base definition
|
||||
*
|
||||
* # Example
|
||||
* ```
|
||||
* ```ts
|
||||
* class ShouldBeInherited {
|
||||
* static ngBaseDef = defineBase({
|
||||
* static ngBaseDef = ΔdefineBase({
|
||||
* ...
|
||||
* })
|
||||
* }
|
||||
* ```
|
||||
*
|
||||
* @param baseDefinition The base definition parameters
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function defineBase<T>(baseDefinition: {
|
||||
export function ΔdefineBase<T>(baseDefinition: {
|
||||
/**
|
||||
* A map of input names.
|
||||
*
|
||||
@ -534,7 +547,7 @@ export function defineBase<T>(baseDefinition: {
|
||||
* of properties.
|
||||
*/
|
||||
outputs?: {[P in keyof T]?: string};
|
||||
}): BaseDef<T> {
|
||||
}): ΔBaseDef<T> {
|
||||
const declaredInputs: {[P in keyof T]: string} = {} as any;
|
||||
return {
|
||||
inputs: invertObject<T>(baseDefinition.inputs as any, declaredInputs),
|
||||
@ -547,17 +560,19 @@ export function defineBase<T>(baseDefinition: {
|
||||
* Create a directive definition object.
|
||||
*
|
||||
* # Example
|
||||
* ```
|
||||
* ```ts
|
||||
* class MyDirective {
|
||||
* // Generated by Angular Template Compiler
|
||||
* // [Symbol] syntax will not be supported by TypeScript until v2.7
|
||||
* static ngDirectiveDef = defineDirective({
|
||||
* static ngDirectiveDef = ΔdefineDirective({
|
||||
* ...
|
||||
* });
|
||||
* }
|
||||
* ```
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export const defineDirective = defineComponent as any as<T>(directiveDefinition: {
|
||||
export const ΔdefineDirective = ΔdefineComponent as any as<T>(directiveDefinition: {
|
||||
/**
|
||||
* Directive type, needed to configure the injector.
|
||||
*/
|
||||
@ -672,8 +687,10 @@ export const defineDirective = defineComponent as any as<T>(directiveDefinition:
|
||||
* }
|
||||
* ```
|
||||
* @param pipeDef Pipe definition generated by the compiler
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function definePipe<T>(pipeDef: {
|
||||
export function ΔdefinePipe<T>(pipeDef: {
|
||||
/** Name of the pipe. Used for matching pipes in template to pipe defs. */
|
||||
name: string,
|
||||
|
||||
|
@ -634,7 +634,10 @@ export class NodeInjector implements Injector {
|
||||
}
|
||||
}
|
||||
|
||||
export function getFactoryOf<T>(type: Type<any>): ((type: Type<T>| null) => T)|null {
|
||||
/**
|
||||
* @publicApi
|
||||
*/
|
||||
export function ΔgetFactoryOf<T>(type: Type<any>): ((type: Type<T>| null) => T)|null {
|
||||
const typeAny = type as any;
|
||||
const def = getComponentDef<T>(typeAny) || getDirectiveDef<T>(typeAny) ||
|
||||
getPipeDef<T>(typeAny) || getInjectableDef<T>(typeAny) || getInjectorDef<T>(typeAny);
|
||||
@ -644,9 +647,12 @@ export function getFactoryOf<T>(type: Type<any>): ((type: Type<T>| null) => T)|n
|
||||
return def.factory;
|
||||
}
|
||||
|
||||
export function getInheritedFactory<T>(type: Type<any>): (type: Type<T>) => T {
|
||||
/**
|
||||
* @publicApi
|
||||
*/
|
||||
export function ΔgetInheritedFactory<T>(type: Type<any>): (type: Type<T>) => T {
|
||||
const proto = Object.getPrototypeOf(type.prototype).constructor as Type<any>;
|
||||
const factory = getFactoryOf<T>(proto);
|
||||
const factory = ΔgetFactoryOf<T>(proto);
|
||||
if (factory !== null) {
|
||||
return factory;
|
||||
} else {
|
||||
|
@ -12,7 +12,7 @@ import {ClassProvider, Provider} from '../di/interface/provider';
|
||||
import {isClassProvider, isTypeProvider, providerToFactory} from '../di/r3_injector';
|
||||
|
||||
import {diPublicInInjector, getNodeInjectable, getOrCreateNodeInjectorForNode} from './di';
|
||||
import {directiveInject} from './instructions/all';
|
||||
import {ΔdirectiveInject} from './instructions/all';
|
||||
import {DirectiveDef} from './interfaces/definition';
|
||||
import {NodeInjectorFactory} from './interfaces/injector';
|
||||
import {TContainerNode, TElementContainerNode, TElementNode, TNodeProviderIndexes} from './interfaces/node';
|
||||
@ -93,7 +93,7 @@ function resolveProvider(
|
||||
|
||||
if (isTypeProvider(provider) || !provider.multi) {
|
||||
// Single provider case: the factory is created and pushed immediately
|
||||
const factory = new NodeInjectorFactory(providerFactory, isViewProvider, directiveInject);
|
||||
const factory = new NodeInjectorFactory(providerFactory, isViewProvider, ΔdirectiveInject);
|
||||
const existingFactoryIndex = indexOf(
|
||||
token, tInjectables, isViewProvider ? beginIndex : beginIndex + cptViewProvidersCount,
|
||||
endIndex);
|
||||
@ -255,7 +255,7 @@ function multiFactory(
|
||||
this: NodeInjectorFactory, _: null, tData: TData, lData: LView, tNode: TElementNode) => any,
|
||||
index: number, isViewProvider: boolean, isComponent: boolean,
|
||||
f: () => any): NodeInjectorFactory {
|
||||
const factory = new NodeInjectorFactory(factoryFn, isViewProvider, directiveInject);
|
||||
const factory = new NodeInjectorFactory(factoryFn, isViewProvider, ΔdirectiveInject);
|
||||
factory.multi = [];
|
||||
factory.index = index;
|
||||
factory.componentProviders = 0;
|
||||
|
@ -13,7 +13,7 @@ import {ComponentDef, DirectiveDef, DirectiveDefFeature, RenderFlags} from '../i
|
||||
import {adjustActiveDirectiveSuperClassDepthPosition} from '../state';
|
||||
import {isComponentDef} from '../util/view_utils';
|
||||
|
||||
import {NgOnChangesFeature} from './ng_onchanges_feature';
|
||||
import {ΔNgOnChangesFeature} from './ng_onchanges_feature';
|
||||
|
||||
function getSuperType(type: Type<any>): Type<any>&
|
||||
{ngComponentDef?: ComponentDef<any>, ngDirectiveDef?: DirectiveDef<any>} {
|
||||
@ -23,8 +23,10 @@ function getSuperType(type: Type<any>): Type<any>&
|
||||
/**
|
||||
* Merges the definition from a super class to a sub class.
|
||||
* @param definition The definition that is a SubClass of another directive of component
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function InheritDefinitionFeature(definition: DirectiveDef<any>| ComponentDef<any>): void {
|
||||
export function ΔInheritDefinitionFeature(definition: DirectiveDef<any>| ComponentDef<any>): void {
|
||||
let superType = getSuperType(definition.type);
|
||||
|
||||
while (superType) {
|
||||
@ -159,7 +161,7 @@ export function InheritDefinitionFeature(definition: DirectiveDef<any>| Componen
|
||||
definition.onInit = definition.onInit || superPrototype.ngOnInit;
|
||||
|
||||
if (superPrototype.ngOnChanges) {
|
||||
NgOnChangesFeature()(definition);
|
||||
ΔNgOnChangesFeature()(definition);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -38,8 +38,10 @@ type OnChangesExpando = OnChanges & {
|
||||
* features: [NgOnChangesFeature()]
|
||||
* });
|
||||
* ```
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function NgOnChangesFeature<T>(): DirectiveDefFeature {
|
||||
export function ΔNgOnChangesFeature<T>(): DirectiveDefFeature {
|
||||
// This option ensures that the ngOnChanges lifecycle hook will be inherited
|
||||
// from superclasses (in InheritDefinitionFeature).
|
||||
(NgOnChangesFeatureImpl as DirectiveDefFeature).ngInherit = true;
|
||||
|
@ -36,8 +36,10 @@ import {DirectiveDef} from '../interfaces/definition';
|
||||
* }
|
||||
*
|
||||
* @param definition
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function ProvidersFeature<T>(providers: Provider[], viewProviders: Provider[] = []) {
|
||||
export function ΔProvidersFeature<T>(providers: Provider[], viewProviders: Provider[] = []) {
|
||||
return (definition: DirectiveDef<T>) => {
|
||||
definition.providersResolver =
|
||||
(def: DirectiveDef<T>, processProvidersFn?: ProcessProvidersFunction) => {
|
||||
|
@ -14,7 +14,7 @@ import {assertDefined, assertEqual, assertGreaterThan} from '../util/assert';
|
||||
|
||||
import {attachPatchData} from './context_discovery';
|
||||
import {attachI18nOpCodesDebug} from './debug';
|
||||
import {elementAttribute, load, textBinding} from './instructions/all';
|
||||
import {ΔelementAttribute, Δload, ΔtextBinding} from './instructions/all';
|
||||
import {allocExpando, createNodeAtIndex} from './instructions/shared';
|
||||
import {LContainer, NATIVE} from './interfaces/container';
|
||||
import {COMMENT_MARKER, ELEMENT_MARKER, I18nMutateOpCode, I18nMutateOpCodes, I18nUpdateOpCode, I18nUpdateOpCodes, IcuType, TI18n, TIcu} from './interfaces/i18n';
|
||||
@ -346,8 +346,10 @@ const parentIndexStack: number[] = [];
|
||||
* @param index A unique index of the translation in the static block.
|
||||
* @param message The translation message.
|
||||
* @param subTemplateIndex Optional sub-template index in the `message`.
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function i18nStart(index: number, message: string, subTemplateIndex?: number): void {
|
||||
export function Δi18nStart(index: number, message: string, subTemplateIndex?: number): void {
|
||||
const tView = getLView()[TVIEW];
|
||||
ngDevMode && assertDefined(tView, `tView should be defined`);
|
||||
i18nIndexStack[++i18nIndexStackPointer] = index;
|
||||
@ -532,9 +534,9 @@ function appendI18nNode(tNode: TNode, parentTNode: TNode, previousTNode: TNode |
|
||||
*
|
||||
* @returns Transformed string that can be consumed by i18nStart instruction
|
||||
*
|
||||
* @publicAPI
|
||||
* @publicApi
|
||||
*/
|
||||
export function i18nPostprocess(
|
||||
export function Δi18nPostprocess(
|
||||
message: string, replacements: {[key: string]: (string | string[])} = {}): string {
|
||||
/**
|
||||
* Step 1: resolve all multi-value placeholders like [<5B>#5<>|<7C>*1:1<><31>#2:1<>|<7C>#4:1<>]
|
||||
@ -627,8 +629,10 @@ export function i18nPostprocess(
|
||||
/**
|
||||
* Translates a translation block marked by `i18nStart` and `i18nEnd`. It inserts the text/ICU nodes
|
||||
* into the render tree, moves the placeholder nodes and removes the deleted nodes.
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function i18nEnd(): void {
|
||||
export function Δi18nEnd(): void {
|
||||
const tView = getLView()[TVIEW];
|
||||
ngDevMode && assertDefined(tView, `tView should be defined`);
|
||||
i18nEndFirstPass(tView);
|
||||
@ -736,7 +740,7 @@ function readCreateOpCodes(
|
||||
const elementNodeIndex = opCode >>> I18nMutateOpCode.SHIFT_REF;
|
||||
const attrName = createOpCodes[++i] as string;
|
||||
const attrValue = createOpCodes[++i] as string;
|
||||
elementAttribute(elementNodeIndex, attrName, attrValue);
|
||||
ΔelementAttribute(elementNodeIndex, attrName, attrValue);
|
||||
break;
|
||||
default:
|
||||
throw new Error(`Unable to determine the type of mutate operation for "${opCode}"`);
|
||||
@ -813,10 +817,10 @@ function readUpdateOpCodes(
|
||||
case I18nUpdateOpCode.Attr:
|
||||
const attrName = updateOpCodes[++j] as string;
|
||||
const sanitizeFn = updateOpCodes[++j] as SanitizerFn | null;
|
||||
elementAttribute(nodeIndex, attrName, value, sanitizeFn);
|
||||
ΔelementAttribute(nodeIndex, attrName, value, sanitizeFn);
|
||||
break;
|
||||
case I18nUpdateOpCode.Text:
|
||||
textBinding(nodeIndex, value);
|
||||
ΔtextBinding(nodeIndex, value);
|
||||
break;
|
||||
case I18nUpdateOpCode.IcuSwitch:
|
||||
tIcuIndex = updateOpCodes[++j] as number;
|
||||
@ -880,7 +884,7 @@ function removeNode(index: number, viewData: LView) {
|
||||
nativeRemoveNode(viewData[RENDERER], removedPhRNode);
|
||||
}
|
||||
|
||||
const slotValue = load(index) as RElement | RComment | LContainer | StylingContext;
|
||||
const slotValue = Δload(index) as RElement | RComment | LContainer | StylingContext;
|
||||
if (isLContainer(slotValue)) {
|
||||
const lContainer = slotValue as LContainer;
|
||||
if (removedPhTNode.type !== TNodeType.Container) {
|
||||
@ -914,10 +918,12 @@ function removeNode(index: number, viewData: LView) {
|
||||
* @param index A unique index of the translation in the static block.
|
||||
* @param message The translation message.
|
||||
* @param subTemplateIndex Optional sub-template index in the `message`.
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function i18n(index: number, message: string, subTemplateIndex?: number): void {
|
||||
i18nStart(index, message, subTemplateIndex);
|
||||
i18nEnd();
|
||||
export function Δi18n(index: number, message: string, subTemplateIndex?: number): void {
|
||||
Δi18nStart(index, message, subTemplateIndex);
|
||||
Δi18nEnd();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -925,8 +931,10 @@ export function i18n(index: number, message: string, subTemplateIndex?: number):
|
||||
*
|
||||
* @param index A unique index in the static block
|
||||
* @param values
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function i18nAttributes(index: number, values: string[]): void {
|
||||
export function Δi18nAttributes(index: number, values: string[]): void {
|
||||
const tView = getLView()[TVIEW];
|
||||
ngDevMode && assertDefined(tView, `tView should be defined`);
|
||||
if (tView.firstTemplatePass && tView.data[index + HEADER_OFFSET] === null) {
|
||||
@ -958,7 +966,7 @@ function i18nAttributesFirstPass(tView: TView, index: number, values: string[])
|
||||
addAllToArray(
|
||||
generateBindingUpdateOpCodes(value, previousElementIndex, attrName), updateOpCodes);
|
||||
} else {
|
||||
elementAttribute(previousElementIndex, attrName, value);
|
||||
ΔelementAttribute(previousElementIndex, attrName, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -975,8 +983,10 @@ let shiftsCounter = 0;
|
||||
* update the translated nodes.
|
||||
*
|
||||
* @param expression The binding's new value or NO_CHANGE
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function i18nExp<T>(expression: T | NO_CHANGE): void {
|
||||
export function Δi18nExp<T>(expression: T | NO_CHANGE): void {
|
||||
if (expression !== NO_CHANGE) {
|
||||
changeMask = changeMask | (1 << shiftsCounter);
|
||||
}
|
||||
@ -988,8 +998,10 @@ export function i18nExp<T>(expression: T | NO_CHANGE): void {
|
||||
*
|
||||
* @param index Index of either {@link i18nStart} (translation block) or {@link i18nAttributes}
|
||||
* (i18n attribute) on which it should update the content.
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function i18nApply(index: number) {
|
||||
export function Δi18nApply(index: number) {
|
||||
if (shiftsCounter) {
|
||||
const lView = getLView();
|
||||
const tView = lView[TVIEW];
|
||||
|
@ -6,109 +6,107 @@
|
||||
* found in the LICENSE file at https://angular.io/license
|
||||
*/
|
||||
import {LifecycleHooksFeature, renderComponent, whenRendered} from './component';
|
||||
import {defineBase, defineComponent, defineDirective, defineNgModule, definePipe, setComponentScope, setNgModuleScope} from './definition';
|
||||
import {InheritDefinitionFeature} from './features/inherit_definition_feature';
|
||||
import {NgOnChangesFeature} from './features/ng_onchanges_feature';
|
||||
import {ProvidersFeature} from './features/providers_feature';
|
||||
import {BaseDef, ComponentDef, ComponentDefWithMeta, ComponentTemplate, ComponentType, DirectiveDef, DirectiveDefFlags, DirectiveDefWithMeta, DirectiveType, PipeDef, PipeDefWithMeta} from './interfaces/definition';
|
||||
import {ΔdefineBase, ΔdefineComponent, ΔdefineDirective, ΔdefineNgModule, ΔdefinePipe, ΔsetComponentScope, ΔsetNgModuleScope} from './definition';
|
||||
import {ΔInheritDefinitionFeature} from './features/inherit_definition_feature';
|
||||
import {ΔNgOnChangesFeature} from './features/ng_onchanges_feature';
|
||||
import {ΔProvidersFeature} from './features/providers_feature';
|
||||
import {ComponentDef, ComponentTemplate, ComponentType, DirectiveDef, DirectiveDefFlags, DirectiveType, PipeDef, ΔBaseDef, ΔComponentDefWithMeta, ΔDirectiveDefWithMeta, ΔPipeDefWithMeta} from './interfaces/definition';
|
||||
import {getComponent, getDirectives, getHostElement, getRenderedText} from './util/discovery_utils';
|
||||
|
||||
export {ComponentFactory, ComponentFactoryResolver, ComponentRef, injectComponentFactoryResolver} from './component_ref';
|
||||
export {getFactoryOf, getInheritedFactory} from './di';
|
||||
export {ΔgetFactoryOf, ΔgetInheritedFactory} from './di';
|
||||
// clang-format off
|
||||
export {
|
||||
detectChanges,
|
||||
markDirty,
|
||||
store,
|
||||
tick,
|
||||
ΔallocHostVars,
|
||||
Δbind,
|
||||
ΔcomponentHostSyntheticListener,
|
||||
ΔcomponentHostSyntheticProperty,
|
||||
|
||||
Δcontainer,
|
||||
ΔcontainerRefreshEnd,
|
||||
ΔcontainerRefreshStart,
|
||||
|
||||
ΔdirectiveInject,
|
||||
|
||||
Δelement,
|
||||
ΔelementAttribute,
|
||||
ΔelementClassProp,
|
||||
ΔelementContainerEnd,
|
||||
|
||||
ΔelementContainerStart,
|
||||
ΔelementEnd,
|
||||
|
||||
ΔelementHostAttrs,
|
||||
ΔelementHostClassProp,
|
||||
ΔelementHostStyleProp,
|
||||
ΔelementHostStyling,
|
||||
ΔelementHostStylingApply,
|
||||
ΔelementHostStylingMap,
|
||||
ΔelementProperty,
|
||||
ΔelementStart,
|
||||
ΔelementStyleProp,
|
||||
ΔelementStyling,
|
||||
ΔelementStylingApply,
|
||||
ΔelementStylingMap,
|
||||
ΔembeddedViewEnd,
|
||||
|
||||
ΔembeddedViewStart,
|
||||
|
||||
ΔgetCurrentView,
|
||||
ΔinjectAttribute,
|
||||
|
||||
Δinterpolation1,
|
||||
Δinterpolation2,
|
||||
Δinterpolation3,
|
||||
Δinterpolation4,
|
||||
Δinterpolation5,
|
||||
Δinterpolation6,
|
||||
Δinterpolation7,
|
||||
Δinterpolation8,
|
||||
ΔinterpolationV,
|
||||
|
||||
Δlistener,
|
||||
Δload,
|
||||
|
||||
ΔnamespaceHTML,
|
||||
ΔnamespaceMathML,
|
||||
ΔnamespaceSVG,
|
||||
|
||||
ΔnextContext,
|
||||
|
||||
Δprojection,
|
||||
ΔprojectionDef,
|
||||
Δproperty,
|
||||
|
||||
Δreference,
|
||||
|
||||
Δselect,
|
||||
Δtemplate,
|
||||
|
||||
Δtext,
|
||||
ΔtextBinding} from './instructions/all';
|
||||
export {RenderFlags} from './interfaces/definition';
|
||||
export {CssSelectorList} from './interfaces/projection';
|
||||
|
||||
|
||||
// clang-format off
|
||||
export {
|
||||
allocHostVars,
|
||||
bind,
|
||||
interpolation1,
|
||||
interpolation2,
|
||||
interpolation3,
|
||||
interpolation4,
|
||||
interpolation5,
|
||||
interpolation6,
|
||||
interpolation7,
|
||||
interpolation8,
|
||||
interpolationV,
|
||||
ΔrestoreView,
|
||||
|
||||
container,
|
||||
containerRefreshStart,
|
||||
containerRefreshEnd,
|
||||
|
||||
nextContext,
|
||||
|
||||
element,
|
||||
elementAttribute,
|
||||
elementClassProp,
|
||||
elementEnd,
|
||||
elementProperty,
|
||||
componentHostSyntheticProperty,
|
||||
componentHostSyntheticListener,
|
||||
elementStart,
|
||||
|
||||
elementContainerStart,
|
||||
elementContainerEnd,
|
||||
elementStyling,
|
||||
elementStylingMap,
|
||||
elementStyleProp,
|
||||
elementStylingApply,
|
||||
|
||||
elementHostAttrs,
|
||||
elementHostStyling,
|
||||
elementHostStylingMap,
|
||||
elementHostStyleProp,
|
||||
elementHostClassProp,
|
||||
elementHostStylingApply,
|
||||
|
||||
select,
|
||||
property,
|
||||
|
||||
listener,
|
||||
store,
|
||||
load,
|
||||
|
||||
namespaceHTML,
|
||||
namespaceMathML,
|
||||
namespaceSVG,
|
||||
|
||||
projection,
|
||||
projectionDef,
|
||||
|
||||
text,
|
||||
textBinding,
|
||||
template,
|
||||
|
||||
reference,
|
||||
|
||||
embeddedViewStart,
|
||||
embeddedViewEnd,
|
||||
detectChanges,
|
||||
markDirty,
|
||||
tick,
|
||||
|
||||
directiveInject,
|
||||
injectAttribute,
|
||||
|
||||
getCurrentView
|
||||
} from './instructions/all';
|
||||
|
||||
export {
|
||||
restoreView,
|
||||
|
||||
enableBindings,
|
||||
disableBindings,
|
||||
ΔenableBindings,
|
||||
ΔdisableBindings,
|
||||
} from './state';
|
||||
|
||||
export {
|
||||
i18n,
|
||||
i18nAttributes,
|
||||
i18nExp,
|
||||
i18nStart,
|
||||
i18nEnd,
|
||||
i18nApply,
|
||||
i18nPostprocess
|
||||
Δi18n,
|
||||
Δi18nAttributes,
|
||||
Δi18nExp,
|
||||
Δi18nStart,
|
||||
Δi18nEnd,
|
||||
Δi18nApply,
|
||||
Δi18nPostprocess,
|
||||
} from './i18n';
|
||||
|
||||
export {NgModuleFactory, NgModuleRef, NgModuleType} from './ng_module_ref';
|
||||
@ -122,71 +120,71 @@ export {
|
||||
} from './metadata';
|
||||
|
||||
export {
|
||||
pipe,
|
||||
pipeBind1,
|
||||
pipeBind2,
|
||||
pipeBind3,
|
||||
pipeBind4,
|
||||
pipeBindV,
|
||||
Δpipe,
|
||||
ΔpipeBind1,
|
||||
ΔpipeBind2,
|
||||
ΔpipeBind3,
|
||||
ΔpipeBind4,
|
||||
ΔpipeBindV,
|
||||
} from './pipe';
|
||||
|
||||
export {
|
||||
queryRefresh,
|
||||
viewQuery,
|
||||
staticViewQuery,
|
||||
loadViewQuery,
|
||||
contentQuery,
|
||||
loadContentQuery,
|
||||
staticContentQuery
|
||||
ΔqueryRefresh,
|
||||
ΔviewQuery,
|
||||
ΔstaticViewQuery,
|
||||
ΔloadViewQuery,
|
||||
ΔcontentQuery,
|
||||
ΔloadContentQuery,
|
||||
ΔstaticContentQuery
|
||||
} from './query';
|
||||
|
||||
export {
|
||||
pureFunction0,
|
||||
pureFunction1,
|
||||
pureFunction2,
|
||||
pureFunction3,
|
||||
pureFunction4,
|
||||
pureFunction5,
|
||||
pureFunction6,
|
||||
pureFunction7,
|
||||
pureFunction8,
|
||||
pureFunctionV,
|
||||
ΔpureFunction0,
|
||||
ΔpureFunction1,
|
||||
ΔpureFunction2,
|
||||
ΔpureFunction3,
|
||||
ΔpureFunction4,
|
||||
ΔpureFunction5,
|
||||
ΔpureFunction6,
|
||||
ΔpureFunction7,
|
||||
ΔpureFunction8,
|
||||
ΔpureFunctionV,
|
||||
} from './pure_function';
|
||||
|
||||
export {templateRefExtractor} from './view_engine_compatibility_prebound';
|
||||
export {ΔtemplateRefExtractor} from './view_engine_compatibility_prebound';
|
||||
|
||||
export {resolveWindow, resolveDocument, resolveBody} from './util/misc_utils';
|
||||
export {ΔresolveWindow, ΔresolveDocument, ΔresolveBody} from './util/misc_utils';
|
||||
|
||||
// clang-format on
|
||||
|
||||
export {
|
||||
BaseDef,
|
||||
ΔBaseDef,
|
||||
ComponentDef,
|
||||
ComponentDefWithMeta,
|
||||
ΔComponentDefWithMeta,
|
||||
ComponentTemplate,
|
||||
ComponentType,
|
||||
DirectiveDef,
|
||||
DirectiveDefFlags,
|
||||
DirectiveDefWithMeta,
|
||||
ΔDirectiveDefWithMeta,
|
||||
DirectiveType,
|
||||
NgOnChangesFeature,
|
||||
InheritDefinitionFeature,
|
||||
ProvidersFeature,
|
||||
ΔNgOnChangesFeature,
|
||||
ΔInheritDefinitionFeature,
|
||||
ΔProvidersFeature,
|
||||
PipeDef,
|
||||
PipeDefWithMeta,
|
||||
ΔPipeDefWithMeta,
|
||||
LifecycleHooksFeature,
|
||||
defineComponent,
|
||||
defineDirective,
|
||||
defineNgModule,
|
||||
defineBase,
|
||||
definePipe,
|
||||
ΔdefineComponent,
|
||||
ΔdefineDirective,
|
||||
ΔdefineNgModule,
|
||||
ΔdefineBase,
|
||||
ΔdefinePipe,
|
||||
getHostElement,
|
||||
getComponent,
|
||||
getDirectives,
|
||||
getRenderedText,
|
||||
renderComponent,
|
||||
setComponentScope,
|
||||
setNgModuleScope,
|
||||
ΔsetComponentScope,
|
||||
ΔsetNgModuleScope,
|
||||
whenRendered,
|
||||
};
|
||||
|
||||
|
@ -16,8 +16,10 @@ import {NO_CHANGE} from '../tokens';
|
||||
* Allocates the necessary amount of slots for host vars.
|
||||
*
|
||||
* @param count Amount of vars to be allocated
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function allocHostVars(count: number): void {
|
||||
export function ΔallocHostVars(count: number): void {
|
||||
const lView = getLView();
|
||||
const tView = lView[TVIEW];
|
||||
if (!tView.firstTemplatePass) return;
|
||||
|
@ -27,8 +27,10 @@ import {addToViewTree, createDirectivesAndLocals, createLContainer, createNodeAt
|
||||
* % }
|
||||
*
|
||||
* @param index The index of the container in the data array
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function container(index: number): void {
|
||||
export function Δcontainer(index: number): void {
|
||||
const tNode = containerInternal(index, null, null);
|
||||
const lView = getLView();
|
||||
if (lView[TVIEW].firstTemplatePass) {
|
||||
@ -54,8 +56,10 @@ export function container(index: number): void {
|
||||
* @param localRefs A set of local reference bindings on the element.
|
||||
* @param localRefExtractor A function which extracts local-refs values from the template.
|
||||
* Defaults to the current element associated with the local-ref.
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function template(
|
||||
export function Δtemplate(
|
||||
index: number, templateFn: ComponentTemplate<any>| null, consts: number, vars: number,
|
||||
tagName?: string | null, attrs?: TAttributes | null, localRefs?: string[] | null,
|
||||
localRefExtractor?: LocalRefExtractor) {
|
||||
@ -80,8 +84,10 @@ export function template(
|
||||
* Sets a container up to receive views.
|
||||
*
|
||||
* @param index The index of the container in the data array
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function containerRefreshStart(index: number): void {
|
||||
export function ΔcontainerRefreshStart(index: number): void {
|
||||
const lView = getLView();
|
||||
const tView = lView[TVIEW];
|
||||
let previousOrParentTNode = loadInternal(tView.data, index) as TNode;
|
||||
@ -101,8 +107,10 @@ export function containerRefreshStart(index: number): void {
|
||||
* Marks the end of the LContainer.
|
||||
*
|
||||
* Marking the end of LContainer is the time when to child views get inserted or removed.
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function containerRefreshEnd(): void {
|
||||
export function ΔcontainerRefreshEnd(): void {
|
||||
let previousOrParentTNode = getPreviousOrParentTNode();
|
||||
if (getIsParent()) {
|
||||
setIsParent(false);
|
||||
|
@ -19,22 +19,25 @@ import {getLView, getPreviousOrParentTNode} from '../state';
|
||||
*
|
||||
* Usage example (in factory function):
|
||||
*
|
||||
* ```ts
|
||||
* class SomeDirective {
|
||||
* constructor(directive: DirectiveA) {}
|
||||
*
|
||||
* static ngDirectiveDef = defineDirective({
|
||||
* static ngDirectiveDef = ΔdefineDirective({
|
||||
* type: SomeDirective,
|
||||
* factory: () => new SomeDirective(directiveInject(DirectiveA))
|
||||
* factory: () => new SomeDirective(ΔdirectiveInject(DirectiveA))
|
||||
* });
|
||||
* }
|
||||
*
|
||||
* ```
|
||||
* @param token the type or token to inject
|
||||
* @param flags Injection flags
|
||||
* @returns the value from the injector or `null` when not found
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function directiveInject<T>(token: Type<T>| InjectionToken<T>): T;
|
||||
export function directiveInject<T>(token: Type<T>| InjectionToken<T>, flags: InjectFlags): T;
|
||||
export function directiveInject<T>(
|
||||
export function ΔdirectiveInject<T>(token: Type<T>| InjectionToken<T>): T;
|
||||
export function ΔdirectiveInject<T>(token: Type<T>| InjectionToken<T>, flags: InjectFlags): T;
|
||||
export function ΔdirectiveInject<T>(
|
||||
token: Type<T>| InjectionToken<T>, flags = InjectFlags.Default): T|null {
|
||||
token = resolveForwardRef(token);
|
||||
return getOrCreateInjectable<T>(
|
||||
@ -44,7 +47,9 @@ export function directiveInject<T>(
|
||||
|
||||
/**
|
||||
* Facade for the attribute injection from DI.
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function injectAttribute(attrNameToInject: string): string|null {
|
||||
export function ΔinjectAttribute(attrNameToInject: string): string|null {
|
||||
return injectAttributeImpl(getPreviousOrParentTNode(), attrNameToInject);
|
||||
}
|
||||
|
@ -41,8 +41,10 @@ import {getActiveDirectiveStylingIndex} from './styling';
|
||||
* Attributes and localRefs are passed as an array of strings where elements with an even index
|
||||
* hold an attribute name and elements with an odd index hold an attribute value, ex.:
|
||||
* ['id', 'warning5', 'class', 'alert']
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function elementStart(
|
||||
export function ΔelementStart(
|
||||
index: number, name: string, attrs?: TAttributes | null, localRefs?: string[] | null): void {
|
||||
const lView = getLView();
|
||||
const tView = lView[TVIEW];
|
||||
@ -122,8 +124,12 @@ export function elementStart(
|
||||
executeContentQueries(tView, tNode, lView);
|
||||
}
|
||||
|
||||
/** Mark the end of the element. */
|
||||
export function elementEnd(): void {
|
||||
/**
|
||||
* Mark the end of the element.
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function ΔelementEnd(): void {
|
||||
let previousOrParentTNode = getPreviousOrParentTNode();
|
||||
if (getIsParent()) {
|
||||
setIsParent(false);
|
||||
@ -172,11 +178,13 @@ export function elementEnd(): void {
|
||||
* @param attrs Statically bound set of attributes, classes, and styles to be written into the DOM
|
||||
* element on creation. Use [AttributeMarker] to denote the meaning of this array.
|
||||
* @param localRefs A set of local reference bindings on the element.
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function element(
|
||||
export function Δelement(
|
||||
index: number, name: string, attrs?: TAttributes | null, localRefs?: string[] | null): void {
|
||||
elementStart(index, name, attrs, localRefs);
|
||||
elementEnd();
|
||||
ΔelementStart(index, name, attrs, localRefs);
|
||||
ΔelementEnd();
|
||||
}
|
||||
|
||||
|
||||
@ -189,8 +197,10 @@ export function element(
|
||||
* Otherwise the attribute value is set to the stringified value.
|
||||
* @param sanitizer An optional function used to sanitize the value.
|
||||
* @param namespace Optional namespace to use when setting the attribute.
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function elementAttribute(
|
||||
export function ΔelementAttribute(
|
||||
index: number, name: string, value: any, sanitizer?: SanitizerFn | null,
|
||||
namespace?: string): void {
|
||||
if (value !== NO_CHANGE) {
|
||||
@ -258,7 +268,7 @@ export function elementAttribute(
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function elementHostAttrs(attrs: TAttributes) {
|
||||
export function ΔelementHostAttrs(attrs: TAttributes) {
|
||||
const hostElementIndex = getSelectedIndex();
|
||||
const lView = getLView();
|
||||
const tNode = getTNode(hostElementIndex, lView);
|
||||
|
@ -28,8 +28,10 @@ import {createDirectivesAndLocals, createNodeAtIndex, executeContentQueries, set
|
||||
* Even if this instruction accepts a set of attributes no actual attribute values are propagated to
|
||||
* the DOM (as a comment node can't have attributes). Attributes are here only for directive
|
||||
* matching purposes and setting initial inputs of directives.
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function elementContainerStart(
|
||||
export function ΔelementContainerStart(
|
||||
index: number, attrs?: TAttributes | null, localRefs?: string[] | null): void {
|
||||
const lView = getLView();
|
||||
const tView = lView[TVIEW];
|
||||
@ -65,8 +67,12 @@ export function elementContainerStart(
|
||||
executeContentQueries(tView, tNode, lView);
|
||||
}
|
||||
|
||||
/** Mark the end of the <ng-container>. */
|
||||
export function elementContainerEnd(): void {
|
||||
/**
|
||||
* Mark the end of the <ng-container>.
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function ΔelementContainerEnd(): void {
|
||||
let previousOrParentTNode = getPreviousOrParentTNode();
|
||||
const lView = getLView();
|
||||
const tView = lView[TVIEW];
|
||||
|
@ -23,8 +23,10 @@ import {assignTViewNodeToLView, createLView, createTView, refreshDescendantViews
|
||||
*
|
||||
* @param viewBlockId The ID of this view
|
||||
* @return boolean Whether or not this view is in creation mode
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function embeddedViewStart(viewBlockId: number, consts: number, vars: number): RenderFlags {
|
||||
export function ΔembeddedViewStart(viewBlockId: number, consts: number, vars: number): RenderFlags {
|
||||
const lView = getLView();
|
||||
const previousOrParentTNode = getPreviousOrParentTNode();
|
||||
// The previous node can be a view node if we are processing an inline for loop
|
||||
@ -122,8 +124,12 @@ function scanForView(lContainer: LContainer, startIdx: number, viewBlockId: numb
|
||||
return null;
|
||||
}
|
||||
|
||||
/** Marks the end of an embedded view. */
|
||||
export function embeddedViewEnd(): void {
|
||||
/**
|
||||
* Marks the end of an embedded view.
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function ΔembeddedViewEnd(): void {
|
||||
const lView = getLView();
|
||||
const viewHost = lView[T_HOST];
|
||||
|
||||
|
@ -14,7 +14,9 @@ import {getLView} from '../state';
|
||||
* Used in conjunction with the restoreView() instruction to save a snapshot
|
||||
* of the current view and restore it when listeners are invoked. This allows
|
||||
* walking the declaration view tree in listeners to get vars from parent views.
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function getCurrentView(): OpaqueViewState {
|
||||
export function ΔgetCurrentView(): OpaqueViewState {
|
||||
return getLView() as any as OpaqueViewState;
|
||||
}
|
||||
|
@ -28,8 +28,10 @@ import {BindingDirection, generatePropertyAliases, getCleanup, handleError, load
|
||||
* @param useCapture Whether or not to use capture in event listener
|
||||
* @param eventTargetResolver Function that returns global target information in case this listener
|
||||
* should be attached to a global object like window, document or body
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function listener(
|
||||
export function Δlistener(
|
||||
eventName: string, listenerFn: (e?: any) => any, useCapture = false,
|
||||
eventTargetResolver?: GlobalTargetResolver): void {
|
||||
listenerInternal(eventName, listenerFn, useCapture, eventTargetResolver);
|
||||
@ -53,8 +55,10 @@ export function listener(
|
||||
* @param useCapture Whether or not to use capture in event listener
|
||||
* @param eventTargetResolver Function that returns global target information in case this listener
|
||||
* should be attached to a global object like window, document or body
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function componentHostSyntheticListener<T>(
|
||||
export function ΔcomponentHostSyntheticListener<T>(
|
||||
eventName: string, listenerFn: (e?: any) => any, useCapture = false,
|
||||
eventTargetResolver?: GlobalTargetResolver): void {
|
||||
listenerInternal(eventName, listenerFn, useCapture, eventTargetResolver, loadComponentRenderer);
|
||||
|
@ -6,4 +6,4 @@
|
||||
* found in the LICENSE file at https://angular.io/license
|
||||
*/
|
||||
|
||||
export {namespaceHTML, namespaceMathML, namespaceSVG} from '../state';
|
||||
export {ΔnamespaceHTML, ΔnamespaceMathML, ΔnamespaceSVG} from '../state';
|
||||
|
@ -16,7 +16,9 @@ import {nextContextImpl} from '../state';
|
||||
*
|
||||
* @param level The relative level of the view from which to grab context compared to contextVewData
|
||||
* @returns context
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function nextContext<T = any>(level: number = 1): T {
|
||||
export function ΔnextContext<T = any>(level: number = 1): T {
|
||||
return nextContextImpl(level);
|
||||
}
|
||||
|
@ -34,8 +34,10 @@ import {createNodeAtIndex} from './shared';
|
||||
*
|
||||
* @param selectors A collection of parsed CSS selectors
|
||||
* @param rawSelectors A collection of CSS selectors in the raw, un-parsed form
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function projectionDef(selectors?: CssSelectorList[], textSelectors?: string[]): void {
|
||||
export function ΔprojectionDef(selectors?: CssSelectorList[], textSelectors?: string[]): void {
|
||||
const componentNode = findComponentView(getLView())[T_HOST] as TElementNode;
|
||||
|
||||
if (!componentNode.projection) {
|
||||
@ -72,8 +74,10 @@ export function projectionDef(selectors?: CssSelectorList[], textSelectors?: str
|
||||
* @param selectorIndex:
|
||||
* - 0 when the selector is `*` (or unspecified as this is the default value),
|
||||
* - 1 based index of the selector from the {@link projectionDef}
|
||||
*/
|
||||
export function projection(nodeIndex: number, selectorIndex: number = 0, attrs?: string[]): void {
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function Δprojection(nodeIndex: number, selectorIndex: number = 0, attrs?: string[]): void {
|
||||
const lView = getLView();
|
||||
const tProjectionNode =
|
||||
createNodeAtIndex(nodeIndex, TNodeType.Projection, null, null, attrs || null);
|
||||
|
@ -38,22 +38,26 @@ import {TsickleIssue1009, initializeTNodeInputs, loadComponentRenderer, setInput
|
||||
* (this is necessary for host property bindings)
|
||||
* @returns This function returns itself so that it may be chained
|
||||
* (e.g. `property('name', ctx.name)('title', ctx.title)`)
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function property<T>(
|
||||
export function Δproperty<T>(
|
||||
propName: string, value: T, sanitizer?: SanitizerFn | null,
|
||||
nativeOnly?: boolean): TsickleIssue1009 {
|
||||
const index = getSelectedIndex();
|
||||
const bindReconciledValue = bind(value);
|
||||
const bindReconciledValue = Δbind(value);
|
||||
elementPropertyInternal(index, propName, bindReconciledValue, sanitizer, nativeOnly);
|
||||
return property;
|
||||
return Δproperty;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a single value binding.
|
||||
*
|
||||
* @param value Value to diff
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function bind<T>(value: T): T|NO_CHANGE {
|
||||
export function Δbind<T>(value: T): T|NO_CHANGE {
|
||||
const lView = getLView();
|
||||
const bindingIndex = lView[BINDING_INDEX]++;
|
||||
storeBindingMetadata(lView);
|
||||
@ -75,8 +79,10 @@ export function bind<T>(value: T): T|NO_CHANGE {
|
||||
* @param sanitizer An optional function used to sanitize the value.
|
||||
* @param nativeOnly Whether or not we should only set native properties and skip input check
|
||||
* (this is necessary for host property bindings)
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function elementProperty<T>(
|
||||
export function ΔelementProperty<T>(
|
||||
index: number, propName: string, value: T | NO_CHANGE, sanitizer?: SanitizerFn | null,
|
||||
nativeOnly?: boolean): void {
|
||||
elementPropertyInternal(index, propName, value, sanitizer, nativeOnly);
|
||||
@ -102,8 +108,10 @@ export function elementProperty<T>(
|
||||
* @param sanitizer An optional function used to sanitize the value.
|
||||
* @param nativeOnly Whether or not we should only set native properties and skip input check
|
||||
* (this is necessary for host property bindings)
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function componentHostSyntheticProperty<T>(
|
||||
export function ΔcomponentHostSyntheticProperty<T>(
|
||||
index: number, propName: string, value: T | NO_CHANGE, sanitizer?: SanitizerFn | null,
|
||||
nativeOnly?: boolean) {
|
||||
elementPropertyInternal(index, propName, value, sanitizer, nativeOnly, loadComponentRenderer);
|
||||
|
@ -24,8 +24,10 @@ import {storeBindingMetadata} from './shared';
|
||||
* - has evaluated expressions at odd indexes.
|
||||
*
|
||||
* Returns the concatenated string when any of the arguments changes, `NO_CHANGE` otherwise.
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function interpolationV(values: any[]): string|NO_CHANGE {
|
||||
export function ΔinterpolationV(values: any[]): string|NO_CHANGE {
|
||||
ngDevMode && assertLessThan(2, values.length, 'should have at least 3 values');
|
||||
ngDevMode && assertEqual(values.length % 2, 1, 'should have an odd number of values');
|
||||
let different = false;
|
||||
@ -67,16 +69,22 @@ export function interpolationV(values: any[]): string|NO_CHANGE {
|
||||
* @param prefix static value used for concatenation only.
|
||||
* @param v0 value checked for change.
|
||||
* @param suffix static value used for concatenation only.
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function interpolation1(prefix: string, v0: any, suffix: string): string|NO_CHANGE {
|
||||
export function Δinterpolation1(prefix: string, v0: any, suffix: string): string|NO_CHANGE {
|
||||
const lView = getLView();
|
||||
const different = bindingUpdated(lView, lView[BINDING_INDEX]++, v0);
|
||||
storeBindingMetadata(lView, prefix, suffix);
|
||||
return different ? prefix + renderStringify(v0) + suffix : NO_CHANGE;
|
||||
}
|
||||
|
||||
/** Creates an interpolation binding with 2 expressions. */
|
||||
export function interpolation2(
|
||||
/**
|
||||
* Creates an interpolation binding with 2 expressions.
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function Δinterpolation2(
|
||||
prefix: string, v0: any, i0: string, v1: any, suffix: string): string|NO_CHANGE {
|
||||
const lView = getLView();
|
||||
const bindingIndex = lView[BINDING_INDEX];
|
||||
@ -92,8 +100,12 @@ export function interpolation2(
|
||||
return different ? prefix + renderStringify(v0) + i0 + renderStringify(v1) + suffix : NO_CHANGE;
|
||||
}
|
||||
|
||||
/** Creates an interpolation binding with 3 expressions. */
|
||||
export function interpolation3(
|
||||
/**
|
||||
* Creates an interpolation binding with 3 expressions.
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function Δinterpolation3(
|
||||
prefix: string, v0: any, i0: string, v1: any, i1: string, v2: any, suffix: string): string|
|
||||
NO_CHANGE {
|
||||
const lView = getLView();
|
||||
@ -114,8 +126,12 @@ export function interpolation3(
|
||||
NO_CHANGE;
|
||||
}
|
||||
|
||||
/** Create an interpolation binding with 4 expressions. */
|
||||
export function interpolation4(
|
||||
/**
|
||||
* Create an interpolation binding with 4 expressions.
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function Δinterpolation4(
|
||||
prefix: string, v0: any, i0: string, v1: any, i1: string, v2: any, i2: string, v3: any,
|
||||
suffix: string): string|NO_CHANGE {
|
||||
const lView = getLView();
|
||||
@ -138,8 +154,12 @@ export function interpolation4(
|
||||
NO_CHANGE;
|
||||
}
|
||||
|
||||
/** Creates an interpolation binding with 5 expressions. */
|
||||
export function interpolation5(
|
||||
/**
|
||||
* Creates an interpolation binding with 5 expressions.
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function Δinterpolation5(
|
||||
prefix: string, v0: any, i0: string, v1: any, i1: string, v2: any, i2: string, v3: any,
|
||||
i3: string, v4: any, suffix: string): string|NO_CHANGE {
|
||||
const lView = getLView();
|
||||
@ -164,8 +184,12 @@ export function interpolation5(
|
||||
NO_CHANGE;
|
||||
}
|
||||
|
||||
/** Creates an interpolation binding with 6 expressions. */
|
||||
export function interpolation6(
|
||||
/**
|
||||
* Creates an interpolation binding with 6 expressions.
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function Δinterpolation6(
|
||||
prefix: string, v0: any, i0: string, v1: any, i1: string, v2: any, i2: string, v3: any,
|
||||
i3: string, v4: any, i4: string, v5: any, suffix: string): string|NO_CHANGE {
|
||||
const lView = getLView();
|
||||
@ -191,8 +215,12 @@ export function interpolation6(
|
||||
NO_CHANGE;
|
||||
}
|
||||
|
||||
/** Creates an interpolation binding with 7 expressions. */
|
||||
export function interpolation7(
|
||||
/**
|
||||
* Creates an interpolation binding with 7 expressions.
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function Δinterpolation7(
|
||||
prefix: string, v0: any, i0: string, v1: any, i1: string, v2: any, i2: string, v3: any,
|
||||
i3: string, v4: any, i4: string, v5: any, i5: string, v6: any, suffix: string): string|
|
||||
NO_CHANGE {
|
||||
@ -221,8 +249,12 @@ export function interpolation7(
|
||||
NO_CHANGE;
|
||||
}
|
||||
|
||||
/** Creates an interpolation binding with 8 expressions. */
|
||||
export function interpolation8(
|
||||
/**
|
||||
* Creates an interpolation binding with 8 expressions.
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function Δinterpolation8(
|
||||
prefix: string, v0: any, i0: string, v1: any, i1: string, v2: any, i2: string, v3: any,
|
||||
i3: string, v4: any, i4: string, v5: any, i5: string, v6: any, i6: string, v7: any,
|
||||
suffix: string): string|NO_CHANGE {
|
||||
|
@ -18,18 +18,20 @@ import {getCheckNoChangesMode, getLView, setSelectedIndex} from '../state';
|
||||
*
|
||||
* ```ts
|
||||
* (rf: RenderFlags, ctx: any) => {
|
||||
* if (rf & 1) {
|
||||
* element(0, 'div');
|
||||
* }
|
||||
* if (rf & 2) {
|
||||
* select(0); // Select the <div/> created above.
|
||||
* property('title', 'test');
|
||||
* }
|
||||
* }
|
||||
* ```
|
||||
* @param index the index of the item to act on with the following instructions
|
||||
*/
|
||||
export function select(index: number): void {
|
||||
* if (rf & 1) {
|
||||
* element(0, 'div');
|
||||
* }
|
||||
* if (rf & 2) {
|
||||
* select(0); // Select the <div/> created above.
|
||||
* property('title', 'test');
|
||||
* }
|
||||
* }
|
||||
* ```
|
||||
* @param index the index of the item to act on with the following instructions
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function Δselect(index: number): void {
|
||||
ngDevMode && assertGreaterThan(index, -1, 'Invalid index');
|
||||
ngDevMode &&
|
||||
assertLessThan(
|
||||
|
@ -27,7 +27,7 @@ import {StylingContext} from '../interfaces/styling';
|
||||
import {BINDING_INDEX, CHILD_HEAD, CHILD_TAIL, CLEANUP, CONTEXT, DECLARATION_VIEW, ExpandoInstructions, FLAGS, HEADER_OFFSET, HOST, INJECTOR, InitPhaseState, LView, LViewFlags, NEXT, PARENT, QUERIES, RENDERER, RENDERER_FACTORY, RootContext, RootContextFlags, SANITIZER, TVIEW, TView, T_HOST} from '../interfaces/view';
|
||||
import {assertNodeOfPossibleTypes, assertNodeType} from '../node_assert';
|
||||
import {isNodeMatchingSelectorList} from '../node_selector_matcher';
|
||||
import {enterView, getBindingsEnabled, getCheckNoChangesMode, getIsParent, getLView, getNamespace, getPreviousOrParentTNode, incrementActiveDirectiveId, isCreationMode, leaveView, namespaceHTML, resetComponentState, setActiveHostElement, setBindingRoot, setCheckNoChangesMode, setCurrentDirectiveDef, setCurrentQueryIndex, setIsParent, setPreviousOrParentTNode, setSelectedIndex} from '../state';
|
||||
import {enterView, getBindingsEnabled, getCheckNoChangesMode, getIsParent, getLView, getNamespace, getPreviousOrParentTNode, incrementActiveDirectiveId, isCreationMode, leaveView, resetComponentState, setActiveHostElement, setBindingRoot, setCheckNoChangesMode, setCurrentDirectiveDef, setCurrentQueryIndex, setIsParent, setPreviousOrParentTNode, setSelectedIndex, ΔnamespaceHTML} from '../state';
|
||||
import {initializeStaticContext as initializeStaticStylingContext} from '../styling/class_and_style_bindings';
|
||||
import {NO_CHANGE} from '../tokens';
|
||||
import {attrsStylingIndexOf} from '../util/attrs_utils';
|
||||
@ -36,6 +36,7 @@ import {getLViewParent, getRootContext} from '../util/view_traversal_utils';
|
||||
import {getComponentViewByIndex, getNativeByTNode, isComponentDef, isContentQueryHost, isRootView, readPatchedLView, resetPreOrderHookFlags, unwrapRNode, viewAttachedToChangeDetector} from '../util/view_utils';
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* A permanent marker promise which signifies that the current CD tree is
|
||||
* clean.
|
||||
@ -426,7 +427,7 @@ export function renderEmbeddedTemplate<T>(viewToRender: LView, tView: TView, con
|
||||
|
||||
oldView = enterView(viewToRender, viewToRender[T_HOST]);
|
||||
resetPreOrderHookFlags(viewToRender);
|
||||
namespaceHTML();
|
||||
ΔnamespaceHTML();
|
||||
|
||||
// Reset the selected index so we can assert that `select` was called later
|
||||
ngDevMode && setSelectedIndex(-1);
|
||||
@ -461,7 +462,7 @@ function renderComponentOrTemplate<T>(
|
||||
if (creationModeIsActive) {
|
||||
// creation mode pass
|
||||
if (templateFn) {
|
||||
namespaceHTML();
|
||||
ΔnamespaceHTML();
|
||||
|
||||
// Reset the selected index so we can assert that `select` was called later
|
||||
ngDevMode && setSelectedIndex(-1);
|
||||
@ -1510,7 +1511,7 @@ export function checkView<T>(hostView: LView, component: T) {
|
||||
|
||||
try {
|
||||
resetPreOrderHookFlags(hostView);
|
||||
namespaceHTML();
|
||||
ΔnamespaceHTML();
|
||||
creationMode && executeViewQueryFn(RenderFlags.Create, hostTView, component);
|
||||
|
||||
// Reset the selected index so we can assert that `select` was called later
|
||||
|
@ -30,13 +30,19 @@ export function store<T>(index: number, value: T): void {
|
||||
* with a nextContext() call, which walks up the tree and updates the contextViewData instance.
|
||||
*
|
||||
* @param index The index of the local ref in contextViewData.
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function reference<T>(index: number) {
|
||||
export function Δreference<T>(index: number) {
|
||||
const contextLView = getContextLView();
|
||||
return loadInternal<T>(contextLView, index);
|
||||
}
|
||||
|
||||
/** Retrieves a value from current `viewData`. */
|
||||
export function load<T>(index: number): T {
|
||||
/**
|
||||
* Retrieves a value from current `viewData`.
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function Δload<T>(index: number): T {
|
||||
return loadInternal<T>(getLView(), index);
|
||||
}
|
||||
|
@ -64,7 +64,7 @@ import {scheduleTick, setInputsForProperty} from './shared';
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function elementStyling(
|
||||
export function ΔelementStyling(
|
||||
classBindingNames?: string[] | null, styleBindingNames?: string[] | null,
|
||||
styleSanitizer?: StyleSanitizeFn | null): void {
|
||||
const tNode = getPreviousOrParentTNode();
|
||||
@ -106,7 +106,7 @@ export function elementStyling(
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function elementHostStyling(
|
||||
export function ΔelementHostStyling(
|
||||
classBindingNames?: string[] | null, styleBindingNames?: string[] | null,
|
||||
styleSanitizer?: StyleSanitizeFn | null): void {
|
||||
const tNode = getPreviousOrParentTNode();
|
||||
@ -166,7 +166,7 @@ function initElementStyling(
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function elementStyleProp(
|
||||
export function ΔelementStyleProp(
|
||||
index: number, styleIndex: number, value: string | number | String | PlayerFactory | null,
|
||||
suffix?: string | null, forceOverride?: boolean): void {
|
||||
const valueToAdd = resolveStylePropValue(value, suffix);
|
||||
@ -200,7 +200,7 @@ export function elementStyleProp(
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function elementHostStyleProp(
|
||||
export function ΔelementHostStyleProp(
|
||||
styleIndex: number, value: string | number | String | PlayerFactory | null,
|
||||
suffix?: string | null, forceOverride?: boolean): void {
|
||||
const directiveStylingIndex = getActiveDirectiveStylingIndex();
|
||||
@ -253,7 +253,7 @@ function resolveStylePropValue(
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function elementClassProp(
|
||||
export function ΔelementClassProp(
|
||||
index: number, classIndex: number, value: boolean | PlayerFactory,
|
||||
forceOverride?: boolean): void {
|
||||
const input = (value instanceof BoundPlayerFactory) ?
|
||||
@ -283,7 +283,7 @@ export function elementClassProp(
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function elementHostClassProp(
|
||||
export function ΔelementHostClassProp(
|
||||
classIndex: number, value: boolean | PlayerFactory, forceOverride?: boolean): void {
|
||||
const directiveStylingIndex = getActiveDirectiveStylingIndex();
|
||||
const hostElementIndex = getSelectedIndex();
|
||||
@ -326,7 +326,7 @@ function booleanOrNull(value: any): boolean|null {
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function elementStylingMap(
|
||||
export function ΔelementStylingMap(
|
||||
index: number, classes: {[key: string]: any} | string | NO_CHANGE | null,
|
||||
styles?: {[styleName: string]: any} | NO_CHANGE | null): void {
|
||||
const lView = getLView();
|
||||
@ -379,7 +379,7 @@ export function elementStylingMap(
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function elementHostStylingMap(
|
||||
export function ΔelementHostStylingMap(
|
||||
classes: {[key: string]: any} | string | NO_CHANGE | null,
|
||||
styles?: {[styleName: string]: any} | NO_CHANGE | null): void {
|
||||
const directiveStylingIndex = getActiveDirectiveStylingIndex();
|
||||
@ -405,7 +405,7 @@ export function elementHostStylingMap(
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function elementStylingApply(index: number): void {
|
||||
export function ΔelementStylingApply(index: number): void {
|
||||
elementStylingApplyInternal(DEFAULT_TEMPLATE_DIRECTIVE_INDEX, index);
|
||||
}
|
||||
|
||||
@ -419,7 +419,7 @@ export function elementStylingApply(index: number): void {
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function elementHostStylingApply(): void {
|
||||
export function ΔelementHostStylingApply(): void {
|
||||
elementStylingApplyInternal(getActiveDirectiveStylingIndex(), getSelectedIndex());
|
||||
}
|
||||
|
||||
@ -449,4 +449,4 @@ export function getActiveDirectiveStylingIndex() {
|
||||
// parent directive. To help the styling code distinguish between a parent
|
||||
// sub-classed directive the inheritance depth is taken into account as well.
|
||||
return getActiveDirectiveId() + getActiveDirectiveSuperClassDepth();
|
||||
}
|
||||
}
|
||||
|
@ -21,8 +21,10 @@ import {createNodeAtIndex} from './shared';
|
||||
*
|
||||
* @param index Index of the node in the data array
|
||||
* @param value Value to write. This value will be stringified.
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function text(index: number, value?: any): void {
|
||||
export function Δtext(index: number, value?: any): void {
|
||||
const lView = getLView();
|
||||
ngDevMode && assertEqual(
|
||||
lView[BINDING_INDEX], lView[TVIEW].bindingStartIndex,
|
||||
@ -42,8 +44,10 @@ export function text(index: number, value?: any): void {
|
||||
*
|
||||
* @param index Index of the node in the data array.
|
||||
* @param value Stringified value to write.
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function textBinding<T>(index: number, value: T | NO_CHANGE): void {
|
||||
export function ΔtextBinding<T>(index: number, value: T | NO_CHANGE): void {
|
||||
if (value !== NO_CHANGE) {
|
||||
const lView = getLView();
|
||||
ngDevMode && assertDataInRange(lView, index + HEADER_OFFSET);
|
||||
|
@ -85,7 +85,10 @@ export const enum DirectiveDefFlags {ContentQuery = 0b10}
|
||||
*/
|
||||
export interface PipeType<T> extends Type<T> { ngPipeDef: never; }
|
||||
|
||||
export type DirectiveDefWithMeta<
|
||||
/**
|
||||
* @publicApi
|
||||
*/
|
||||
export type ΔDirectiveDefWithMeta<
|
||||
T, Selector extends string, ExportAs extends string[], InputMap extends{[key: string]: string},
|
||||
OutputMap extends{[key: string]: string}, QueryFields extends string[]> = DirectiveDef<T>;
|
||||
|
||||
@ -97,8 +100,10 @@ export type DirectiveDefWithMeta<
|
||||
* and outputs should be inherited.
|
||||
*
|
||||
* See: {@link defineBase}
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export interface BaseDef<T> {
|
||||
export interface ΔBaseDef<T> {
|
||||
/**
|
||||
* A dictionary mapping the inputs' minified property names to their public API names, which
|
||||
* are their aliases if any, or their original unminified property names
|
||||
@ -134,7 +139,7 @@ export interface BaseDef<T> {
|
||||
*
|
||||
* See: {@link defineDirective}
|
||||
*/
|
||||
export interface DirectiveDef<T> extends BaseDef<T> {
|
||||
export interface DirectiveDef<T> extends ΔBaseDef<T> {
|
||||
/** Token representing the directive. Used by DI. */
|
||||
type: Type<T>;
|
||||
|
||||
@ -194,7 +199,10 @@ export interface DirectiveDef<T> extends BaseDef<T> {
|
||||
privateName: string) => void)|null;
|
||||
}
|
||||
|
||||
export type ComponentDefWithMeta<
|
||||
/**
|
||||
* @publicApi
|
||||
*/
|
||||
export type ΔComponentDefWithMeta<
|
||||
T, Selector extends String, ExportAs extends string[], InputMap extends{[key: string]: string},
|
||||
OutputMap extends{[key: string]: string}, QueryFields extends string[]> = ComponentDef<T>;
|
||||
|
||||
@ -338,7 +346,10 @@ export interface PipeDef<T> {
|
||||
onDestroy: (() => void)|null;
|
||||
}
|
||||
|
||||
export type PipeDefWithMeta<T, Name extends string> = PipeDef<T>;
|
||||
/**
|
||||
* @publicApi
|
||||
*/
|
||||
export type ΔPipeDefWithMeta<T, Name extends string> = PipeDef<T>;
|
||||
|
||||
export interface DirectiveDefFeature {
|
||||
<T>(directiveDef: DirectiveDef<T>): void;
|
||||
|
@ -6,8 +6,8 @@
|
||||
* found in the LICENSE file at https://angular.io/license
|
||||
*/
|
||||
|
||||
import {defineInjectable, defineInjector,} from '../../di/interface/defs';
|
||||
import {inject} from '../../di/injector_compatibility';
|
||||
import {ΔdefineInjectable, ΔdefineInjector,} from '../../di/interface/defs';
|
||||
import {Δinject} from '../../di/injector_compatibility';
|
||||
import * as r3 from '../index';
|
||||
import * as sanitization from '../../sanitization/sanitization';
|
||||
|
||||
@ -18,116 +18,116 @@ import * as sanitization from '../../sanitization/sanitization';
|
||||
* This should be kept up to date with the public exports of @angular/core.
|
||||
*/
|
||||
export const angularCoreEnv: {[name: string]: Function} = {
|
||||
'ɵdefineBase': r3.defineBase,
|
||||
'ɵdefineComponent': r3.defineComponent,
|
||||
'ɵdefineDirective': r3.defineDirective,
|
||||
'defineInjectable': defineInjectable,
|
||||
'defineInjector': defineInjector,
|
||||
'ɵdefineNgModule': r3.defineNgModule,
|
||||
'ɵdefinePipe': r3.definePipe,
|
||||
'ɵdirectiveInject': r3.directiveInject,
|
||||
'ɵgetFactoryOf': r3.getFactoryOf,
|
||||
'ɵgetInheritedFactory': r3.getInheritedFactory,
|
||||
'inject': inject,
|
||||
'ɵinjectAttribute': r3.injectAttribute,
|
||||
'ɵtemplateRefExtractor': r3.templateRefExtractor,
|
||||
'ɵNgOnChangesFeature': r3.NgOnChangesFeature,
|
||||
'ɵProvidersFeature': r3.ProvidersFeature,
|
||||
'ɵInheritDefinitionFeature': r3.InheritDefinitionFeature,
|
||||
'ɵelementAttribute': r3.elementAttribute,
|
||||
'ɵbind': r3.bind,
|
||||
'ɵcontainer': r3.container,
|
||||
'ɵnextContext': r3.nextContext,
|
||||
'ɵcontainerRefreshStart': r3.containerRefreshStart,
|
||||
'ɵcontainerRefreshEnd': r3.containerRefreshEnd,
|
||||
'ɵnamespaceHTML': r3.namespaceHTML,
|
||||
'ɵnamespaceMathML': r3.namespaceMathML,
|
||||
'ɵnamespaceSVG': r3.namespaceSVG,
|
||||
'ɵenableBindings': r3.enableBindings,
|
||||
'ɵdisableBindings': r3.disableBindings,
|
||||
'ɵallocHostVars': r3.allocHostVars,
|
||||
'ɵelementStart': r3.elementStart,
|
||||
'ɵelementEnd': r3.elementEnd,
|
||||
'ɵelement': r3.element,
|
||||
'ɵelementContainerStart': r3.elementContainerStart,
|
||||
'ɵelementContainerEnd': r3.elementContainerEnd,
|
||||
'ɵpureFunction0': r3.pureFunction0,
|
||||
'ɵpureFunction1': r3.pureFunction1,
|
||||
'ɵpureFunction2': r3.pureFunction2,
|
||||
'ɵpureFunction3': r3.pureFunction3,
|
||||
'ɵpureFunction4': r3.pureFunction4,
|
||||
'ɵpureFunction5': r3.pureFunction5,
|
||||
'ɵpureFunction6': r3.pureFunction6,
|
||||
'ɵpureFunction7': r3.pureFunction7,
|
||||
'ɵpureFunction8': r3.pureFunction8,
|
||||
'ɵpureFunctionV': r3.pureFunctionV,
|
||||
'ɵgetCurrentView': r3.getCurrentView,
|
||||
'ɵrestoreView': r3.restoreView,
|
||||
'ɵinterpolation1': r3.interpolation1,
|
||||
'ɵinterpolation2': r3.interpolation2,
|
||||
'ɵinterpolation3': r3.interpolation3,
|
||||
'ɵinterpolation4': r3.interpolation4,
|
||||
'ɵinterpolation5': r3.interpolation5,
|
||||
'ɵinterpolation6': r3.interpolation6,
|
||||
'ɵinterpolation7': r3.interpolation7,
|
||||
'ɵinterpolation8': r3.interpolation8,
|
||||
'ɵinterpolationV': r3.interpolationV,
|
||||
'ɵlistener': r3.listener,
|
||||
'ɵload': r3.load,
|
||||
'ɵprojection': r3.projection,
|
||||
'ɵelementProperty': r3.elementProperty,
|
||||
'ɵcomponentHostSyntheticProperty': r3.componentHostSyntheticProperty,
|
||||
'ɵcomponentHostSyntheticListener': r3.componentHostSyntheticListener,
|
||||
'ɵpipeBind1': r3.pipeBind1,
|
||||
'ɵpipeBind2': r3.pipeBind2,
|
||||
'ɵpipeBind3': r3.pipeBind3,
|
||||
'ɵpipeBind4': r3.pipeBind4,
|
||||
'ɵpipeBindV': r3.pipeBindV,
|
||||
'ɵprojectionDef': r3.projectionDef,
|
||||
'ɵpipe': r3.pipe,
|
||||
'ɵqueryRefresh': r3.queryRefresh,
|
||||
'ɵviewQuery': r3.viewQuery,
|
||||
'ɵstaticViewQuery': r3.staticViewQuery,
|
||||
'ɵstaticContentQuery': r3.staticContentQuery,
|
||||
'ɵloadViewQuery': r3.loadViewQuery,
|
||||
'ɵcontentQuery': r3.contentQuery,
|
||||
'ɵloadContentQuery': r3.loadContentQuery,
|
||||
'ɵreference': r3.reference,
|
||||
'ɵelementHostAttrs': r3.elementHostAttrs,
|
||||
'ɵelementStyling': r3.elementStyling,
|
||||
'ɵelementStylingMap': r3.elementStylingMap,
|
||||
'ɵelementStyleProp': r3.elementStyleProp,
|
||||
'ɵelementStylingApply': r3.elementStylingApply,
|
||||
'ɵelementClassProp': r3.elementClassProp,
|
||||
'ɵelementHostStyling': r3.elementHostStyling,
|
||||
'ɵelementHostStylingMap': r3.elementHostStylingMap,
|
||||
'ɵelementHostStyleProp': r3.elementHostStyleProp,
|
||||
'ɵelementHostStylingApply': r3.elementHostStylingApply,
|
||||
'ɵelementHostClassProp': r3.elementHostClassProp,
|
||||
'ɵselect': r3.select,
|
||||
'ɵtemplate': r3.template,
|
||||
'ɵtext': r3.text,
|
||||
'ɵtextBinding': r3.textBinding,
|
||||
'ɵembeddedViewStart': r3.embeddedViewStart,
|
||||
'ɵembeddedViewEnd': r3.embeddedViewEnd,
|
||||
'ɵi18n': r3.i18n,
|
||||
'ɵi18nAttributes': r3.i18nAttributes,
|
||||
'ɵi18nExp': r3.i18nExp,
|
||||
'ɵi18nStart': r3.i18nStart,
|
||||
'ɵi18nEnd': r3.i18nEnd,
|
||||
'ɵi18nApply': r3.i18nApply,
|
||||
'ɵi18nPostprocess': r3.i18nPostprocess,
|
||||
'ɵresolveWindow': r3.resolveWindow,
|
||||
'ɵresolveDocument': r3.resolveDocument,
|
||||
'ɵresolveBody': r3.resolveBody,
|
||||
'ɵsetComponentScope': r3.setComponentScope,
|
||||
'ɵsetNgModuleScope': r3.setNgModuleScope,
|
||||
'ΔdefineBase': r3.ΔdefineBase,
|
||||
'ΔdefineComponent': r3.ΔdefineComponent,
|
||||
'ΔdefineDirective': r3.ΔdefineDirective,
|
||||
'ΔdefineInjectable': ΔdefineInjectable,
|
||||
'ΔdefineInjector': ΔdefineInjector,
|
||||
'ΔdefineNgModule': r3.ΔdefineNgModule,
|
||||
'ΔdefinePipe': r3.ΔdefinePipe,
|
||||
'ΔdirectiveInject': r3.ΔdirectiveInject,
|
||||
'ΔgetFactoryOf': r3.ΔgetFactoryOf,
|
||||
'ΔgetInheritedFactory': r3.ΔgetInheritedFactory,
|
||||
'Δinject': Δinject,
|
||||
'ΔinjectAttribute': r3.ΔinjectAttribute,
|
||||
'ΔtemplateRefExtractor': r3.ΔtemplateRefExtractor,
|
||||
'ΔNgOnChangesFeature': r3.ΔNgOnChangesFeature,
|
||||
'ΔProvidersFeature': r3.ΔProvidersFeature,
|
||||
'ΔInheritDefinitionFeature': r3.ΔInheritDefinitionFeature,
|
||||
'ΔelementAttribute': r3.ΔelementAttribute,
|
||||
'Δbind': r3.Δbind,
|
||||
'Δcontainer': r3.Δcontainer,
|
||||
'ΔnextContext': r3.ΔnextContext,
|
||||
'ΔcontainerRefreshStart': r3.ΔcontainerRefreshStart,
|
||||
'ΔcontainerRefreshEnd': r3.ΔcontainerRefreshEnd,
|
||||
'ΔnamespaceHTML': r3.ΔnamespaceHTML,
|
||||
'ΔnamespaceMathML': r3.ΔnamespaceMathML,
|
||||
'ΔnamespaceSVG': r3.ΔnamespaceSVG,
|
||||
'ΔenableBindings': r3.ΔenableBindings,
|
||||
'ΔdisableBindings': r3.ΔdisableBindings,
|
||||
'ΔallocHostVars': r3.ΔallocHostVars,
|
||||
'ΔelementStart': r3.ΔelementStart,
|
||||
'ΔelementEnd': r3.ΔelementEnd,
|
||||
'Δelement': r3.Δelement,
|
||||
'ΔelementContainerStart': r3.ΔelementContainerStart,
|
||||
'ΔelementContainerEnd': r3.ΔelementContainerEnd,
|
||||
'ΔpureFunction0': r3.ΔpureFunction0,
|
||||
'ΔpureFunction1': r3.ΔpureFunction1,
|
||||
'ΔpureFunction2': r3.ΔpureFunction2,
|
||||
'ΔpureFunction3': r3.ΔpureFunction3,
|
||||
'ΔpureFunction4': r3.ΔpureFunction4,
|
||||
'ΔpureFunction5': r3.ΔpureFunction5,
|
||||
'ΔpureFunction6': r3.ΔpureFunction6,
|
||||
'ΔpureFunction7': r3.ΔpureFunction7,
|
||||
'ΔpureFunction8': r3.ΔpureFunction8,
|
||||
'ΔpureFunctionV': r3.ΔpureFunctionV,
|
||||
'ΔgetCurrentView': r3.ΔgetCurrentView,
|
||||
'ΔrestoreView': r3.ΔrestoreView,
|
||||
'Δinterpolation1': r3.Δinterpolation1,
|
||||
'Δinterpolation2': r3.Δinterpolation2,
|
||||
'Δinterpolation3': r3.Δinterpolation3,
|
||||
'Δinterpolation4': r3.Δinterpolation4,
|
||||
'Δinterpolation5': r3.Δinterpolation5,
|
||||
'Δinterpolation6': r3.Δinterpolation6,
|
||||
'Δinterpolation7': r3.Δinterpolation7,
|
||||
'Δinterpolation8': r3.Δinterpolation8,
|
||||
'ΔinterpolationV': r3.ΔinterpolationV,
|
||||
'Δlistener': r3.Δlistener,
|
||||
'Δload': r3.Δload,
|
||||
'Δprojection': r3.Δprojection,
|
||||
'ΔelementProperty': r3.ΔelementProperty,
|
||||
'ΔcomponentHostSyntheticProperty': r3.ΔcomponentHostSyntheticProperty,
|
||||
'ΔcomponentHostSyntheticListener': r3.ΔcomponentHostSyntheticListener,
|
||||
'ΔpipeBind1': r3.ΔpipeBind1,
|
||||
'ΔpipeBind2': r3.ΔpipeBind2,
|
||||
'ΔpipeBind3': r3.ΔpipeBind3,
|
||||
'ΔpipeBind4': r3.ΔpipeBind4,
|
||||
'ΔpipeBindV': r3.ΔpipeBindV,
|
||||
'ΔprojectionDef': r3.ΔprojectionDef,
|
||||
'Δpipe': r3.Δpipe,
|
||||
'ΔqueryRefresh': r3.ΔqueryRefresh,
|
||||
'ΔviewQuery': r3.ΔviewQuery,
|
||||
'ΔstaticViewQuery': r3.ΔstaticViewQuery,
|
||||
'ΔstaticContentQuery': r3.ΔstaticContentQuery,
|
||||
'ΔloadViewQuery': r3.ΔloadViewQuery,
|
||||
'ΔcontentQuery': r3.ΔcontentQuery,
|
||||
'ΔloadContentQuery': r3.ΔloadContentQuery,
|
||||
'Δreference': r3.Δreference,
|
||||
'ΔelementHostAttrs': r3.ΔelementHostAttrs,
|
||||
'ΔelementStyling': r3.ΔelementStyling,
|
||||
'ΔelementStylingMap': r3.ΔelementStylingMap,
|
||||
'ΔelementStyleProp': r3.ΔelementStyleProp,
|
||||
'ΔelementStylingApply': r3.ΔelementStylingApply,
|
||||
'ΔelementClassProp': r3.ΔelementClassProp,
|
||||
'ΔelementHostStyling': r3.ΔelementHostStyling,
|
||||
'ΔelementHostStylingMap': r3.ΔelementHostStylingMap,
|
||||
'ΔelementHostStyleProp': r3.ΔelementHostStyleProp,
|
||||
'ΔelementHostStylingApply': r3.ΔelementHostStylingApply,
|
||||
'ΔelementHostClassProp': r3.ΔelementHostClassProp,
|
||||
'Δselect': r3.Δselect,
|
||||
'Δtemplate': r3.Δtemplate,
|
||||
'Δtext': r3.Δtext,
|
||||
'ΔtextBinding': r3.ΔtextBinding,
|
||||
'ΔembeddedViewStart': r3.ΔembeddedViewStart,
|
||||
'ΔembeddedViewEnd': r3.ΔembeddedViewEnd,
|
||||
'Δi18n': r3.Δi18n,
|
||||
'Δi18nAttributes': r3.Δi18nAttributes,
|
||||
'Δi18nExp': r3.Δi18nExp,
|
||||
'Δi18nStart': r3.Δi18nStart,
|
||||
'Δi18nEnd': r3.Δi18nEnd,
|
||||
'Δi18nApply': r3.Δi18nApply,
|
||||
'Δi18nPostprocess': r3.Δi18nPostprocess,
|
||||
'ΔresolveWindow': r3.ΔresolveWindow,
|
||||
'ΔresolveDocument': r3.ΔresolveDocument,
|
||||
'ΔresolveBody': r3.ΔresolveBody,
|
||||
'ΔsetComponentScope': r3.ΔsetComponentScope,
|
||||
'ΔsetNgModuleScope': r3.ΔsetNgModuleScope,
|
||||
|
||||
'ɵsanitizeHtml': sanitization.sanitizeHtml,
|
||||
'ɵsanitizeStyle': sanitization.sanitizeStyle,
|
||||
'ɵdefaultStyleSanitizer': sanitization.defaultStyleSanitizer,
|
||||
'ɵsanitizeResourceUrl': sanitization.sanitizeResourceUrl,
|
||||
'ɵsanitizeScript': sanitization.sanitizeScript,
|
||||
'ɵsanitizeUrl': sanitization.sanitizeUrl,
|
||||
'ɵsanitizeUrlOrResourceUrl': sanitization.sanitizeUrlOrResourceUrl
|
||||
'ΔsanitizeHtml': sanitization.ΔsanitizeHtml,
|
||||
'ΔsanitizeStyle': sanitization.ΔsanitizeStyle,
|
||||
'ΔdefaultStyleSanitizer': sanitization.ΔdefaultStyleSanitizer,
|
||||
'ΔsanitizeResourceUrl': sanitization.ΔsanitizeResourceUrl,
|
||||
'ΔsanitizeScript': sanitization.ΔsanitizeScript,
|
||||
'ΔsanitizeUrl': sanitization.ΔsanitizeUrl,
|
||||
'ΔsanitizeUrlOrResourceUrl': sanitization.ΔsanitizeUrlOrResourceUrl
|
||||
};
|
||||
|
@ -9,22 +9,25 @@
|
||||
import {WrappedValue} from '../change_detection/change_detection_util';
|
||||
import {PipeTransform} from '../change_detection/pipe_transform';
|
||||
|
||||
import {load, store} from './instructions/all';
|
||||
import {store, Δload} from './instructions/all';
|
||||
import {PipeDef, PipeDefList} from './interfaces/definition';
|
||||
import {BINDING_INDEX, HEADER_OFFSET, TVIEW} from './interfaces/view';
|
||||
import {pureFunction1, pureFunction2, pureFunction3, pureFunction4, pureFunctionV} from './pure_function';
|
||||
import {ΔpureFunction1, ΔpureFunction2, ΔpureFunction3, ΔpureFunction4, ΔpureFunctionV} from './pure_function';
|
||||
import {getLView} from './state';
|
||||
import {NO_CHANGE} from './tokens';
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Create a pipe.
|
||||
*
|
||||
* @param index Pipe index where the pipe will be stored.
|
||||
* @param pipeName The name of the pipe
|
||||
* @returns T the instance of the pipe.
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function pipe(index: number, pipeName: string): any {
|
||||
export function Δpipe(index: number, pipeName: string): any {
|
||||
const tView = getLView()[TVIEW];
|
||||
let pipeDef: PipeDef<any>;
|
||||
const adjustedIndex = index + HEADER_OFFSET;
|
||||
@ -51,6 +54,8 @@ export function pipe(index: number, pipeName: string): any {
|
||||
* @param name Name of pipe to resolve
|
||||
* @param registry Full list of available pipes
|
||||
* @returns Matching PipeDef
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
function getPipeDef(name: string, registry: PipeDefList | null): PipeDef<any> {
|
||||
if (registry) {
|
||||
@ -73,11 +78,13 @@ function getPipeDef(name: string, registry: PipeDefList | null): PipeDef<any> {
|
||||
* @param index Pipe index where the pipe was stored on creation.
|
||||
* @param slotOffset the offset in the reserved slot space
|
||||
* @param v1 1st argument to {@link PipeTransform#transform}.
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function pipeBind1(index: number, slotOffset: number, v1: any): any {
|
||||
const pipeInstance = load<PipeTransform>(index);
|
||||
export function ΔpipeBind1(index: number, slotOffset: number, v1: any): any {
|
||||
const pipeInstance = Δload<PipeTransform>(index);
|
||||
return unwrapValue(
|
||||
isPure(index) ? pureFunction1(slotOffset, pipeInstance.transform, v1, pipeInstance) :
|
||||
isPure(index) ? ΔpureFunction1(slotOffset, pipeInstance.transform, v1, pipeInstance) :
|
||||
pipeInstance.transform(v1));
|
||||
}
|
||||
|
||||
@ -91,11 +98,13 @@ export function pipeBind1(index: number, slotOffset: number, v1: any): any {
|
||||
* @param slotOffset the offset in the reserved slot space
|
||||
* @param v1 1st argument to {@link PipeTransform#transform}.
|
||||
* @param v2 2nd argument to {@link PipeTransform#transform}.
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function pipeBind2(index: number, slotOffset: number, v1: any, v2: any): any {
|
||||
const pipeInstance = load<PipeTransform>(index);
|
||||
export function ΔpipeBind2(index: number, slotOffset: number, v1: any, v2: any): any {
|
||||
const pipeInstance = Δload<PipeTransform>(index);
|
||||
return unwrapValue(
|
||||
isPure(index) ? pureFunction2(slotOffset, pipeInstance.transform, v1, v2, pipeInstance) :
|
||||
isPure(index) ? ΔpureFunction2(slotOffset, pipeInstance.transform, v1, v2, pipeInstance) :
|
||||
pipeInstance.transform(v1, v2));
|
||||
}
|
||||
|
||||
@ -110,11 +119,13 @@ export function pipeBind2(index: number, slotOffset: number, v1: any, v2: any):
|
||||
* @param v1 1st argument to {@link PipeTransform#transform}.
|
||||
* @param v2 2nd argument to {@link PipeTransform#transform}.
|
||||
* @param v3 4rd argument to {@link PipeTransform#transform}.
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function pipeBind3(index: number, slotOffset: number, v1: any, v2: any, v3: any): any {
|
||||
const pipeInstance = load<PipeTransform>(index);
|
||||
export function ΔpipeBind3(index: number, slotOffset: number, v1: any, v2: any, v3: any): any {
|
||||
const pipeInstance = Δload<PipeTransform>(index);
|
||||
return unwrapValue(
|
||||
isPure(index) ? pureFunction3(slotOffset, pipeInstance.transform, v1, v2, v3, pipeInstance) :
|
||||
isPure(index) ? ΔpureFunction3(slotOffset, pipeInstance.transform, v1, v2, v3, pipeInstance) :
|
||||
pipeInstance.transform(v1, v2, v3));
|
||||
}
|
||||
|
||||
@ -130,13 +141,15 @@ export function pipeBind3(index: number, slotOffset: number, v1: any, v2: any, v
|
||||
* @param v2 2nd argument to {@link PipeTransform#transform}.
|
||||
* @param v3 3rd argument to {@link PipeTransform#transform}.
|
||||
* @param v4 4th argument to {@link PipeTransform#transform}.
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function pipeBind4(
|
||||
export function ΔpipeBind4(
|
||||
index: number, slotOffset: number, v1: any, v2: any, v3: any, v4: any): any {
|
||||
const pipeInstance = load<PipeTransform>(index);
|
||||
const pipeInstance = Δload<PipeTransform>(index);
|
||||
return unwrapValue(
|
||||
isPure(index) ?
|
||||
pureFunction4(slotOffset, pipeInstance.transform, v1, v2, v3, v4, pipeInstance) :
|
||||
ΔpureFunction4(slotOffset, pipeInstance.transform, v1, v2, v3, v4, pipeInstance) :
|
||||
pipeInstance.transform(v1, v2, v3, v4));
|
||||
}
|
||||
|
||||
@ -149,11 +162,13 @@ export function pipeBind4(
|
||||
* @param index Pipe index where the pipe was stored on creation.
|
||||
* @param slotOffset the offset in the reserved slot space
|
||||
* @param values Array of arguments to pass to {@link PipeTransform#transform} method.
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function pipeBindV(index: number, slotOffset: number, values: any[]): any {
|
||||
const pipeInstance = load<PipeTransform>(index);
|
||||
export function ΔpipeBindV(index: number, slotOffset: number, values: any[]): any {
|
||||
const pipeInstance = Δload<PipeTransform>(index);
|
||||
return unwrapValue(
|
||||
isPure(index) ? pureFunctionV(slotOffset, pipeInstance.transform, values, pipeInstance) :
|
||||
isPure(index) ? ΔpureFunctionV(slotOffset, pipeInstance.transform, values, pipeInstance) :
|
||||
pipeInstance.transform.apply(pipeInstance, values));
|
||||
}
|
||||
|
||||
|
@ -37,8 +37,10 @@ import {getBindingRoot, getLView, isCreationMode} from './state';
|
||||
* @param pureFn Function that returns a value
|
||||
* @param thisArg Optional calling context of pureFn
|
||||
* @returns value
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function pureFunction0<T>(slotOffset: number, pureFn: () => T, thisArg?: any): T {
|
||||
export function ΔpureFunction0<T>(slotOffset: number, pureFn: () => T, thisArg?: any): T {
|
||||
// TODO(kara): use bindingRoot instead of bindingStartIndex when implementing host bindings
|
||||
const bindingIndex = getBindingRoot() + slotOffset;
|
||||
const lView = getLView();
|
||||
@ -56,8 +58,10 @@ export function pureFunction0<T>(slotOffset: number, pureFn: () => T, thisArg?:
|
||||
* @param exp Updated expression value
|
||||
* @param thisArg Optional calling context of pureFn
|
||||
* @returns Updated or cached value
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function pureFunction1(
|
||||
export function ΔpureFunction1(
|
||||
slotOffset: number, pureFn: (v: any) => any, exp: any, thisArg?: any): any {
|
||||
// TODO(kara): use bindingRoot instead of bindingStartIndex when implementing host bindings
|
||||
const lView = getLView();
|
||||
@ -77,8 +81,10 @@ export function pureFunction1(
|
||||
* @param exp2
|
||||
* @param thisArg Optional calling context of pureFn
|
||||
* @returns Updated or cached value
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function pureFunction2(
|
||||
export function ΔpureFunction2(
|
||||
slotOffset: number, pureFn: (v1: any, v2: any) => any, exp1: any, exp2: any,
|
||||
thisArg?: any): any {
|
||||
// TODO(kara): use bindingRoot instead of bindingStartIndex when implementing host bindings
|
||||
@ -102,8 +108,10 @@ export function pureFunction2(
|
||||
* @param exp3
|
||||
* @param thisArg Optional calling context of pureFn
|
||||
* @returns Updated or cached value
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function pureFunction3(
|
||||
export function ΔpureFunction3(
|
||||
slotOffset: number, pureFn: (v1: any, v2: any, v3: any) => any, exp1: any, exp2: any, exp3: any,
|
||||
thisArg?: any): any {
|
||||
// TODO(kara): use bindingRoot instead of bindingStartIndex when implementing host bindings
|
||||
@ -128,8 +136,10 @@ export function pureFunction3(
|
||||
* @param exp4
|
||||
* @param thisArg Optional calling context of pureFn
|
||||
* @returns Updated or cached value
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function pureFunction4(
|
||||
export function ΔpureFunction4(
|
||||
slotOffset: number, pureFn: (v1: any, v2: any, v3: any, v4: any) => any, exp1: any, exp2: any,
|
||||
exp3: any, exp4: any, thisArg?: any): any {
|
||||
// TODO(kara): use bindingRoot instead of bindingStartIndex when implementing host bindings
|
||||
@ -155,8 +165,10 @@ export function pureFunction4(
|
||||
* @param exp5
|
||||
* @param thisArg Optional calling context of pureFn
|
||||
* @returns Updated or cached value
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function pureFunction5(
|
||||
export function ΔpureFunction5(
|
||||
slotOffset: number, pureFn: (v1: any, v2: any, v3: any, v4: any, v5: any) => any, exp1: any,
|
||||
exp2: any, exp3: any, exp4: any, exp5: any, thisArg?: any): any {
|
||||
// TODO(kara): use bindingRoot instead of bindingStartIndex when implementing host bindings
|
||||
@ -184,8 +196,10 @@ export function pureFunction5(
|
||||
* @param exp6
|
||||
* @param thisArg Optional calling context of pureFn
|
||||
* @returns Updated or cached value
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function pureFunction6(
|
||||
export function ΔpureFunction6(
|
||||
slotOffset: number, pureFn: (v1: any, v2: any, v3: any, v4: any, v5: any, v6: any) => any,
|
||||
exp1: any, exp2: any, exp3: any, exp4: any, exp5: any, exp6: any, thisArg?: any): any {
|
||||
// TODO(kara): use bindingRoot instead of bindingStartIndex when implementing host bindings
|
||||
@ -215,8 +229,10 @@ export function pureFunction6(
|
||||
* @param exp7
|
||||
* @param thisArg Optional calling context of pureFn
|
||||
* @returns Updated or cached value
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function pureFunction7(
|
||||
export function ΔpureFunction7(
|
||||
slotOffset: number,
|
||||
pureFn: (v1: any, v2: any, v3: any, v4: any, v5: any, v6: any, v7: any) => any, exp1: any,
|
||||
exp2: any, exp3: any, exp4: any, exp5: any, exp6: any, exp7: any, thisArg?: any): any {
|
||||
@ -248,8 +264,10 @@ export function pureFunction7(
|
||||
* @param exp8
|
||||
* @param thisArg Optional calling context of pureFn
|
||||
* @returns Updated or cached value
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function pureFunction8(
|
||||
export function ΔpureFunction8(
|
||||
slotOffset: number,
|
||||
pureFn: (v1: any, v2: any, v3: any, v4: any, v5: any, v6: any, v7: any, v8: any) => any,
|
||||
exp1: any, exp2: any, exp3: any, exp4: any, exp5: any, exp6: any, exp7: any, exp8: any,
|
||||
@ -278,8 +296,10 @@ export function pureFunction8(
|
||||
* @param exps An array of binding values
|
||||
* @param thisArg Optional calling context of pureFn
|
||||
* @returns Updated or cached value
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function pureFunctionV(
|
||||
export function ΔpureFunctionV(
|
||||
slotOffset: number, pureFn: (...v: any[]) => any, exps: any[], thisArg?: any): any {
|
||||
// TODO(kara): use bindingRoot instead of bindingStartIndex when implementing host bindings
|
||||
let bindingIndex = getBindingRoot() + slotOffset;
|
||||
|
@ -18,7 +18,7 @@ import {assertDataInRange, assertDefined, assertEqual} from '../util/assert';
|
||||
import {assertPreviousIsParent} from './assert';
|
||||
import {getNodeInjectable, locateDirectiveOrProvider} from './di';
|
||||
import {NG_ELEMENT_ID} from './fields';
|
||||
import {load, store} from './instructions/all';
|
||||
import {store, Δload} from './instructions/all';
|
||||
import {storeCleanupWithContext} from './instructions/shared';
|
||||
import {unusedValueExportToPlacateAjd as unused1} from './interfaces/definition';
|
||||
import {unusedValueExportToPlacateAjd as unused2} from './interfaces/injector';
|
||||
@ -369,8 +369,10 @@ export function query<T>(
|
||||
*
|
||||
* @returns `true` if a query got dirty during change detection or if this is a static query
|
||||
* resolving in creation mode, `false` otherwise.
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function queryRefresh(queryList: QueryList<any>): boolean {
|
||||
export function ΔqueryRefresh(queryList: QueryList<any>): boolean {
|
||||
const queryListImpl = (queryList as any as QueryList_<any>);
|
||||
const creationMode = isCreationMode();
|
||||
|
||||
@ -389,11 +391,13 @@ export function queryRefresh(queryList: QueryList<any>): boolean {
|
||||
* @param predicate The type for which the query will search
|
||||
* @param descend Whether or not to descend into children
|
||||
* @param read What to save in the query
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function staticViewQuery<T>(
|
||||
export function ΔstaticViewQuery<T>(
|
||||
// TODO(FW-486): "read" should be an AbstractType
|
||||
predicate: Type<any>| string[], descend: boolean, read: any): void {
|
||||
const queryList = viewQuery(predicate, descend, read) as QueryList_<T>;
|
||||
const queryList = ΔviewQuery(predicate, descend, read) as QueryList_<T>;
|
||||
const tView = getLView()[TVIEW];
|
||||
queryList._static = true;
|
||||
if (!tView.staticViewQueries) {
|
||||
@ -408,8 +412,10 @@ export function staticViewQuery<T>(
|
||||
* @param descend Whether or not to descend into children
|
||||
* @param read What to save in the query
|
||||
* @returns QueryList<T>
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function viewQuery<T>(
|
||||
export function ΔviewQuery<T>(
|
||||
// TODO(FW-486): "read" should be an AbstractType
|
||||
predicate: Type<any>| string[], descend: boolean, read: any): QueryList<T> {
|
||||
const lView = getLView();
|
||||
@ -425,12 +431,14 @@ export function viewQuery<T>(
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads current View Query and moves the pointer/index to the next View Query in LView.
|
||||
*/
|
||||
export function loadViewQuery<T>(): T {
|
||||
* Loads current View Query and moves the pointer/index to the next View Query in LView.
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function ΔloadViewQuery<T>(): T {
|
||||
const index = getCurrentQueryIndex();
|
||||
setCurrentQueryIndex(index + 1);
|
||||
return load<T>(index - HEADER_OFFSET);
|
||||
return Δload<T>(index - HEADER_OFFSET);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -442,8 +450,10 @@ export function loadViewQuery<T>(): T {
|
||||
* @param descend Whether or not to descend into children
|
||||
* @param read What to save in the query
|
||||
* @returns QueryList<T>
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function contentQuery<T>(
|
||||
export function ΔcontentQuery<T>(
|
||||
directiveIndex: number, predicate: Type<any>| string[], descend: boolean,
|
||||
// TODO(FW-486): "read" should be an AbstractType
|
||||
read: any): QueryList<T> {
|
||||
@ -471,12 +481,14 @@ export function contentQuery<T>(
|
||||
* @param descend Whether or not to descend into children
|
||||
* @param read What to save in the query
|
||||
* @returns QueryList<T>
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function staticContentQuery<T>(
|
||||
export function ΔstaticContentQuery<T>(
|
||||
directiveIndex: number, predicate: Type<any>| string[], descend: boolean,
|
||||
// TODO(FW-486): "read" should be an AbstractType
|
||||
read: any): void {
|
||||
const queryList = contentQuery(directiveIndex, predicate, descend, read) as QueryList_<T>;
|
||||
const queryList = ΔcontentQuery(directiveIndex, predicate, descend, read) as QueryList_<T>;
|
||||
const tView = getLView()[TVIEW];
|
||||
queryList._static = true;
|
||||
if (!tView.staticContentQueries) {
|
||||
@ -484,7 +496,11 @@ export function staticContentQuery<T>(
|
||||
}
|
||||
}
|
||||
|
||||
export function loadContentQuery<T>(): QueryList<T> {
|
||||
/**
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function ΔloadContentQuery<T>(): QueryList<T> {
|
||||
const lView = getLView();
|
||||
ngDevMode &&
|
||||
assertDefined(
|
||||
|
@ -82,15 +82,17 @@ export function getBindingsEnabled(): boolean {
|
||||
* Should match component / directive.
|
||||
* </my-comp>
|
||||
* <div ngNonBindable>
|
||||
* <!-- disabledBindings() -->
|
||||
* <!-- ΔdisableBindings() -->
|
||||
* <my-comp my-directive>
|
||||
* Should not match component / directive because we are in ngNonBindable.
|
||||
* </my-comp>
|
||||
* <!-- enableBindings() -->
|
||||
* <!-- ΔenableBindings() -->
|
||||
* </div>
|
||||
* ```
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function enableBindings(): void {
|
||||
export function ΔenableBindings(): void {
|
||||
bindingsEnabled = true;
|
||||
}
|
||||
|
||||
@ -103,15 +105,17 @@ export function enableBindings(): void {
|
||||
* Should match component / directive.
|
||||
* </my-comp>
|
||||
* <div ngNonBindable>
|
||||
* <!-- disabledBindings() -->
|
||||
* <!-- ΔdisableBindings() -->
|
||||
* <my-comp my-directive>
|
||||
* Should not match component / directive because we are in ngNonBindable.
|
||||
* </my-comp>
|
||||
* <!-- enableBindings() -->
|
||||
* <!-- ΔenableBindings() -->
|
||||
* </div>
|
||||
* ```
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function disableBindings(): void {
|
||||
export function ΔdisableBindings(): void {
|
||||
bindingsEnabled = false;
|
||||
}
|
||||
|
||||
@ -262,8 +266,10 @@ export function getActiveDirectiveSuperClassDepth() {
|
||||
* walking the declaration view tree in listeners to get vars from parent views.
|
||||
*
|
||||
* @param viewToRestore The OpaqueViewState instance to restore.
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function restoreView(viewToRestore: OpaqueViewState) {
|
||||
export function ΔrestoreView(viewToRestore: OpaqueViewState) {
|
||||
contextLView = viewToRestore as any as LView;
|
||||
}
|
||||
|
||||
@ -483,23 +489,29 @@ let _currentNamespace: string|null = null;
|
||||
|
||||
/**
|
||||
* Sets the namespace used to create elements to `'http://www.w3.org/2000/svg'` in global state.
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function namespaceSVG() {
|
||||
export function ΔnamespaceSVG() {
|
||||
_currentNamespace = 'http://www.w3.org/2000/svg';
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the namespace used to create elements to `'http://www.w3.org/1998/MathML/'` in global state.
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function namespaceMathML() {
|
||||
export function ΔnamespaceMathML() {
|
||||
_currentNamespace = 'http://www.w3.org/1998/MathML/';
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the namespace used to create elements no `null`, which forces element creation to use
|
||||
* `createElement` rather than `createElementNS`.
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function namespaceHTML() {
|
||||
export function ΔnamespaceHTML() {
|
||||
_currentNamespace = null;
|
||||
}
|
||||
|
||||
|
@ -41,15 +41,27 @@ export const defaultScheduler =
|
||||
setTimeout // everything else
|
||||
).bind(global);
|
||||
|
||||
export function resolveWindow(element: RElement & {ownerDocument: Document}) {
|
||||
/**
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function ΔresolveWindow(element: RElement & {ownerDocument: Document}) {
|
||||
return {name: 'window', target: element.ownerDocument.defaultView};
|
||||
}
|
||||
|
||||
export function resolveDocument(element: RElement & {ownerDocument: Document}) {
|
||||
/**
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function ΔresolveDocument(element: RElement & {ownerDocument: Document}) {
|
||||
return {name: 'document', target: element.ownerDocument};
|
||||
}
|
||||
|
||||
export function resolveBody(element: RElement & {ownerDocument: Document}) {
|
||||
/**
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function ΔresolveBody(element: RElement & {ownerDocument: Document}) {
|
||||
return {name: 'body', target: element.ownerDocument.body};
|
||||
}
|
||||
|
||||
|
@ -19,7 +19,9 @@ import {createTemplateRef} from './view_engine_compatibility';
|
||||
/**
|
||||
* Retrieves `TemplateRef` instance from `Injector` when a local reference is placed on the
|
||||
* `<ng-template>` element.
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function templateRefExtractor(tNode: TNode, currentView: LView) {
|
||||
export function ΔtemplateRefExtractor(tNode: TNode, currentView: LView) {
|
||||
return createTemplateRef(ViewEngine_TemplateRef, ViewEngine_ElementRef, tNode, currentView);
|
||||
}
|
||||
|
@ -30,8 +30,10 @@ import {_sanitizeUrl as _sanitizeUrl} from './url_sanitizer';
|
||||
* @param unsafeHtml untrusted `html`, typically from the user.
|
||||
* @returns `html` string which is safe to display to user, because all of the dangerous javascript
|
||||
* and urls have been removed.
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function sanitizeHtml(unsafeHtml: any): string {
|
||||
export function ΔsanitizeHtml(unsafeHtml: any): string {
|
||||
const sanitizer = getSanitizer();
|
||||
if (sanitizer) {
|
||||
return sanitizer.sanitize(SecurityContext.HTML, unsafeHtml) || '';
|
||||
@ -54,8 +56,10 @@ export function sanitizeHtml(unsafeHtml: any): string {
|
||||
* @param unsafeStyle untrusted `style`, typically from the user.
|
||||
* @returns `style` string which is safe to bind to the `style` properties, because all of the
|
||||
* dangerous javascript and urls have been removed.
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function sanitizeStyle(unsafeStyle: any): string {
|
||||
export function ΔsanitizeStyle(unsafeStyle: any): string {
|
||||
const sanitizer = getSanitizer();
|
||||
if (sanitizer) {
|
||||
return sanitizer.sanitize(SecurityContext.STYLE, unsafeStyle) || '';
|
||||
@ -79,8 +83,10 @@ export function sanitizeStyle(unsafeStyle: any): string {
|
||||
* @param unsafeUrl untrusted `url`, typically from the user.
|
||||
* @returns `url` string which is safe to bind to the `src` properties such as `<img src>`, because
|
||||
* all of the dangerous javascript has been removed.
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function sanitizeUrl(unsafeUrl: any): string {
|
||||
export function ΔsanitizeUrl(unsafeUrl: any): string {
|
||||
const sanitizer = getSanitizer();
|
||||
if (sanitizer) {
|
||||
return sanitizer.sanitize(SecurityContext.URL, unsafeUrl) || '';
|
||||
@ -99,8 +105,10 @@ export function sanitizeUrl(unsafeUrl: any): string {
|
||||
* @param unsafeResourceUrl untrusted `url`, typically from the user.
|
||||
* @returns `url` string which is safe to bind to the `src` properties such as `<img src>`, because
|
||||
* only trusted `url`s have been allowed to pass.
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function sanitizeResourceUrl(unsafeResourceUrl: any): string {
|
||||
export function ΔsanitizeResourceUrl(unsafeResourceUrl: any): string {
|
||||
const sanitizer = getSanitizer();
|
||||
if (sanitizer) {
|
||||
return sanitizer.sanitize(SecurityContext.RESOURCE_URL, unsafeResourceUrl) || '';
|
||||
@ -120,8 +128,10 @@ export function sanitizeResourceUrl(unsafeResourceUrl: any): string {
|
||||
* @param unsafeScript untrusted `script`, typically from the user.
|
||||
* @returns `url` string which is safe to bind to the `<script>` element such as `<img src>`,
|
||||
* because only trusted `scripts` have been allowed to pass.
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function sanitizeScript(unsafeScript: any): string {
|
||||
export function ΔsanitizeScript(unsafeScript: any): string {
|
||||
const sanitizer = getSanitizer();
|
||||
if (sanitizer) {
|
||||
return sanitizer.sanitize(SecurityContext.SCRIPT, unsafeScript) || '';
|
||||
@ -143,9 +153,9 @@ export function getUrlSanitizer(tag: string, prop: string) {
|
||||
if ((prop === 'src' && (tag === 'embed' || tag === 'frame' || tag === 'iframe' ||
|
||||
tag === 'media' || tag === 'script')) ||
|
||||
(prop === 'href' && (tag === 'base' || tag === 'link'))) {
|
||||
return sanitizeResourceUrl;
|
||||
return ΔsanitizeResourceUrl;
|
||||
}
|
||||
return sanitizeUrl;
|
||||
return ΔsanitizeUrl;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -160,22 +170,26 @@ export function getUrlSanitizer(tag: string, prop: string) {
|
||||
* @param tag target element tag name.
|
||||
* @param prop name of the property that contains the value.
|
||||
* @returns `url` string which is safe to bind.
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export function sanitizeUrlOrResourceUrl(unsafeUrl: any, tag: string, prop: string): any {
|
||||
export function ΔsanitizeUrlOrResourceUrl(unsafeUrl: any, tag: string, prop: string): any {
|
||||
return getUrlSanitizer(tag, prop)(unsafeUrl);
|
||||
}
|
||||
|
||||
/**
|
||||
* The default style sanitizer will handle sanitization for style properties by
|
||||
* sanitizing any CSS property that can include a `url` value (usually image-based properties)
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
export const defaultStyleSanitizer = (function(prop: string, value?: string): string | boolean {
|
||||
export const ΔdefaultStyleSanitizer = (function(prop: string, value?: string): string | boolean {
|
||||
if (value === undefined) {
|
||||
return prop === 'background-image' || prop === 'background' || prop === 'border-image' ||
|
||||
prop === 'filter' || prop === 'list-style' || prop === 'list-style-image';
|
||||
}
|
||||
|
||||
return sanitizeStyle(value);
|
||||
return ΔsanitizeStyle(value);
|
||||
} as StyleSanitizeFn);
|
||||
|
||||
export function validateAgainstEventProperties(name: string) {
|
||||
|
@ -9,7 +9,7 @@
|
||||
import {resolveForwardRef} from '../di/forward_ref';
|
||||
import {INJECTOR, Injector} from '../di/injector';
|
||||
import {setCurrentInjector} from '../di/injector_compatibility';
|
||||
import {InjectableDef, getInjectableDef} from '../di/interface/defs';
|
||||
import {getInjectableDef, ΔInjectableDef} from '../di/interface/defs';
|
||||
import {APP_ROOT} from '../di/scope';
|
||||
import {NgModuleRef} from '../linker/ng_module_factory';
|
||||
import {stringify} from '../util/stringify';
|
||||
@ -98,7 +98,7 @@ export function resolveNgModuleDep(
|
||||
return data;
|
||||
}
|
||||
const providerDef = data._def.providersByKey[tokenKey];
|
||||
let injectableDef: InjectableDef<any>|null;
|
||||
let injectableDef: ΔInjectableDef<any>|null;
|
||||
if (providerDef) {
|
||||
let providerInstance = data._providers[providerDef.index];
|
||||
if (providerInstance === undefined) {
|
||||
@ -132,7 +132,7 @@ function moduleTransitivelyPresent(ngModule: NgModuleData, scope: any): boolean
|
||||
return ngModule._def.modules.indexOf(scope) > -1;
|
||||
}
|
||||
|
||||
function targetsModule(ngModule: NgModuleData, def: InjectableDef<any>): boolean {
|
||||
function targetsModule(ngModule: NgModuleData, def: ΔInjectableDef<any>): boolean {
|
||||
return def.providedIn != null && (moduleTransitivelyPresent(ngModule, def.providedIn) ||
|
||||
def.providedIn === 'root' && ngModule._def.isRoot);
|
||||
}
|
||||
|
@ -9,7 +9,7 @@
|
||||
import {DebugElement__PRE_R3__, DebugNode__PRE_R3__, EventListener, getDebugNode, indexDebugNode, removeDebugNodeFromIndex} from '../debug/debug_node';
|
||||
import {Injector} from '../di';
|
||||
import {InjectableType} from '../di/injectable';
|
||||
import {InjectableDef, getInjectableDef} from '../di/interface/defs';
|
||||
import {getInjectableDef, ΔInjectableDef} from '../di/interface/defs';
|
||||
import {ErrorHandler} from '../error_handler';
|
||||
import {Type} from '../interface/type';
|
||||
import {ComponentFactory} from '../linker/component_factory';
|
||||
@ -170,7 +170,7 @@ const viewDefOverrides = new Map<any, ViewDefinition>();
|
||||
|
||||
function debugOverrideProvider(override: ProviderOverride) {
|
||||
providerOverrides.set(override.token, override);
|
||||
let injectableDef: InjectableDef<any>|null;
|
||||
let injectableDef: ΔInjectableDef<any>|null;
|
||||
if (typeof override.token === 'function' && (injectableDef = getInjectableDef(override.token)) &&
|
||||
typeof injectableDef.providedIn === 'function') {
|
||||
providerOverridesWithScope.set(override.token as InjectableType<any>, override);
|
||||
|
Reference in New Issue
Block a user