fix(core): remove duplicated EMPTY_ARRAY constant (#40991)
The codebase currently contains several `EMPTY_ARRAY` constants, and they can end up in the bundle of an application. A recent commit 6fbe219 tipped us off as it introduced several `noop` occurrences in the golden symbol files. After investigating with @petebacondarwin, we decided to remove the duplicated symbols. This probably shaves only a few bytes, but this commit removes the duplicated functions, by always using the one in `core/src/utils/empty`. PR Close #40991
This commit is contained in:
		
							parent
							
								
									be8893fd1d
								
							
						
					
					
						commit
						e12d9dec64
					
				| @ -13,6 +13,7 @@ import {AbstractType, Type} from '../interface/type'; | ||||
| import {FactoryFn, getFactoryDef} from '../render3/definition_factory'; | ||||
| import {throwCyclicDependencyError, throwInvalidProviderError, throwMixedMultiProviderError} from '../render3/errors_di'; | ||||
| import {deepForEach, newArray} from '../util/array_utils'; | ||||
| import {EMPTY_ARRAY} from '../util/empty'; | ||||
| import {stringify} from '../util/stringify'; | ||||
| 
 | ||||
| import {resolveForwardRef} from './forward_ref'; | ||||
| @ -48,8 +49,6 @@ const NOT_YET = {}; | ||||
|  */ | ||||
| const CIRCULAR = {}; | ||||
| 
 | ||||
| const EMPTY_ARRAY = [] as any[]; | ||||
| 
 | ||||
| /** | ||||
|  * A lazily initialized NullInjector. | ||||
|  */ | ||||
|  | ||||
| @ -8,6 +8,7 @@ | ||||
| 
 | ||||
| import {Type} from '../interface/type'; | ||||
| import {ReflectionCapabilities} from '../reflection/reflection_capabilities'; | ||||
| import {EMPTY_ARRAY} from '../util/empty'; | ||||
| import {getClosureSafeProperty} from '../util/property'; | ||||
| 
 | ||||
| import {resolveForwardRef} from './forward_ref'; | ||||
| @ -16,7 +17,6 @@ import {ClassSansProvider, ConstructorSansProvider, ExistingSansProvider, Factor | ||||
| 
 | ||||
| const USE_VALUE = | ||||
|     getClosureSafeProperty<ValueProvider>({provide: String, useValue: getClosureSafeProperty}); | ||||
| const EMPTY_ARRAY: any[] = []; | ||||
| 
 | ||||
| export function convertInjectableProviderToFactory( | ||||
|     type: Type<any>, | ||||
|  | ||||
| @ -9,7 +9,7 @@ import '../util/ng_dev_mode'; | ||||
| 
 | ||||
| import {assertDomNode} from '../util/assert'; | ||||
| 
 | ||||
| import {EMPTY_ARRAY} from './empty'; | ||||
| import {EMPTY_ARRAY} from '../util/empty'; | ||||
| import {LContext, MONKEY_PATCH_KEY_NAME} from './interfaces/context'; | ||||
| import {TNode, TNodeFlags} from './interfaces/node'; | ||||
| import {RElement, RNode} from './interfaces/renderer_dom'; | ||||
|  | ||||
| @ -12,9 +12,10 @@ import {NgModuleDef, NgModuleType} from '../metadata/ng_module_def'; | ||||
| import {SchemaMetadata} from '../metadata/schema'; | ||||
| import {ViewEncapsulation} from '../metadata/view'; | ||||
| import {noSideEffects} from '../util/closure'; | ||||
| import {EMPTY_ARRAY} from '../util/empty'; | ||||
| import {initNgDevMode} from '../util/ng_dev_mode'; | ||||
| import {stringify} from '../util/stringify'; | ||||
| import {EMPTY_ARRAY, EMPTY_OBJ} from './empty'; | ||||
| import {EMPTY_OBJ} from './empty'; | ||||
| import {NG_COMP_DEF, NG_DIR_DEF, NG_LOC_ID_DEF, NG_MOD_DEF, NG_PIPE_DEF} from './fields'; | ||||
| import {ComponentDef, ComponentDefFeature, ComponentTemplate, ComponentType, ContentQueriesFunction, DirectiveDef, DirectiveDefFeature, DirectiveTypesOrFactory, HostBindingsFunction, PipeDef, PipeTypesOrFactory, ViewQueriesFunction} from './interfaces/definition'; | ||||
| import {AttributeMarker, TAttributes, TConstantsOrFactory} from './interfaces/node'; | ||||
|  | ||||
| @ -15,7 +15,6 @@ import {initNgDevMode} from '../util/ng_dev_mode'; | ||||
|  */ | ||||
| 
 | ||||
| export const EMPTY_OBJ: {} = {}; | ||||
| export const EMPTY_ARRAY: any[] = []; | ||||
| 
 | ||||
| // freezing the values prevents any code from accidentally inserting new values in
 | ||||
| if ((typeof ngDevMode === 'undefined' || ngDevMode) && initNgDevMode()) { | ||||
| @ -23,6 +22,4 @@ if ((typeof ngDevMode === 'undefined' || ngDevMode) && initNgDevMode()) { | ||||
|   // when optimizing code and the whole if statement will be dropped.
 | ||||
|   // tslint:disable-next-line:no-toplevel-property-access
 | ||||
|   Object.freeze(EMPTY_OBJ); | ||||
|   // tslint:disable-next-line:no-toplevel-property-access
 | ||||
|   Object.freeze(EMPTY_ARRAY); | ||||
| } | ||||
|  | ||||
| @ -7,8 +7,9 @@ | ||||
|  */ | ||||
| 
 | ||||
| import {Type, Writable} from '../../interface/type'; | ||||
| import {EMPTY_ARRAY} from '../../util/empty'; | ||||
| import {fillProperties} from '../../util/property'; | ||||
| import {EMPTY_ARRAY, EMPTY_OBJ} from '../empty'; | ||||
| import {EMPTY_OBJ} from '../empty'; | ||||
| import {ComponentDef, ContentQueriesFunction, DirectiveDef, DirectiveDefFeature, HostBindingsFunction, RenderFlags, ViewQueriesFunction} from '../interfaces/definition'; | ||||
| import {TAttributes} from '../interfaces/node'; | ||||
| import {isComponentDef} from '../interfaces/type_checks'; | ||||
|  | ||||
| @ -7,8 +7,8 @@ | ||||
|  */ | ||||
| 
 | ||||
| import {assertDomNode, assertNumber, assertNumberInRange} from '../../util/assert'; | ||||
| import {EMPTY_ARRAY} from '../../util/empty'; | ||||
| import {assertTIcu, assertTNodeForLView} from '../assert'; | ||||
| import {EMPTY_ARRAY} from '../empty'; | ||||
| import {getCurrentICUCaseIndex} from '../i18n/i18n_util'; | ||||
| import {I18nRemoveOpCodes, TIcu} from '../interfaces/i18n'; | ||||
| import {TIcuContainerNode} from '../interfaces/node'; | ||||
|  | ||||
| @ -15,9 +15,10 @@ import {Query} from '../../metadata/di'; | ||||
| import {Component, Directive, Input} from '../../metadata/directives'; | ||||
| import {componentNeedsResolution, maybeQueueResolutionOfComponentResources} from '../../metadata/resource_loading'; | ||||
| import {ViewEncapsulation} from '../../metadata/view'; | ||||
| import {EMPTY_ARRAY} from '../../util/empty'; | ||||
| import {initNgDevMode} from '../../util/ng_dev_mode'; | ||||
| import {getComponentDef, getDirectiveDef} from '../definition'; | ||||
| import {EMPTY_ARRAY, EMPTY_OBJ} from '../empty'; | ||||
| import {EMPTY_OBJ} from '../empty'; | ||||
| import {NG_COMP_DEF, NG_DIR_DEF, NG_FACTORY_DEF} from '../fields'; | ||||
| import {ComponentType} from '../interfaces/definition'; | ||||
| import {stringifyForError} from '../util/stringify_utils'; | ||||
|  | ||||
| @ -16,6 +16,7 @@ import {ModuleWithProviders, NgModule} from '../../metadata/ng_module'; | ||||
| import {NgModuleDef, NgModuleTransitiveScopes, NgModuleType} from '../../metadata/ng_module_def'; | ||||
| import {deepForEach, flatten} from '../../util/array_utils'; | ||||
| import {assertDefined} from '../../util/assert'; | ||||
| import {EMPTY_ARRAY} from '../../util/empty'; | ||||
| import {getComponentDef, getDirectiveDef, getNgModuleDef, getPipeDef} from '../definition'; | ||||
| import {NG_COMP_DEF, NG_DIR_DEF, NG_MOD_DEF, NG_PIPE_DEF} from '../fields'; | ||||
| import {ComponentDef} from '../interfaces/definition'; | ||||
| @ -24,8 +25,6 @@ import {stringifyForError} from '../util/stringify_utils'; | ||||
| 
 | ||||
| import {angularCoreEnv} from './environment'; | ||||
| 
 | ||||
| const EMPTY_ARRAY: Type<any>[] = []; | ||||
| 
 | ||||
| interface ModuleQueueItem { | ||||
|   moduleType: Type<any>; | ||||
|   ngModule: NgModule; | ||||
|  | ||||
| @ -6,6 +6,7 @@ | ||||
|  * found in the LICENSE file at https://angular.io/license
 | ||||
|  */ | ||||
| 
 | ||||
| export {EMPTY_ARRAY} from '../util/empty'; | ||||
| export {anchorDef, elementDef} from './element'; | ||||
| export {clearOverrides, createNgModuleFactory, overrideComponentView, overrideProvider} from './entrypoint'; | ||||
| export {ngContentDef} from './ng_content'; | ||||
| @ -16,7 +17,7 @@ export {queryDef} from './query'; | ||||
| export {createComponentFactory, getComponentViewDefinitionFactory, nodeValue, ViewRef_} from './refs'; | ||||
| export {initServicesIfNeeded} from './services'; | ||||
| export {textDef} from './text'; | ||||
| export {createRendererType2, elementEventFullName, EMPTY_ARRAY, EMPTY_MAP, inlineInterpolate, interpolate, rootRenderNodes, tokenKey, unwrapValue} from './util'; | ||||
| export {createRendererType2, elementEventFullName, EMPTY_MAP, inlineInterpolate, interpolate, rootRenderNodes, tokenKey, unwrapValue} from './util'; | ||||
| export {viewDef} from './view'; | ||||
| export {attachEmbeddedView, detachEmbeddedView, moveEmbeddedView} from './view_attach'; | ||||
| 
 | ||||
|  | ||||
| @ -444,5 +444,4 @@ function _toStringWithNull(v: any): string { | ||||
|   return v != null ? v.toString() : ''; | ||||
| } | ||||
| 
 | ||||
| export const EMPTY_ARRAY: any[] = []; | ||||
| export const EMPTY_MAP: {[key: string]: any} = {}; | ||||
|  | ||||
| @ -173,12 +173,6 @@ | ||||
|   { | ||||
|     "name": "EMPTY_ARRAY" | ||||
|   }, | ||||
|   { | ||||
|     "name": "EMPTY_ARRAY" | ||||
|   }, | ||||
|   { | ||||
|     "name": "EMPTY_ARRAY" | ||||
|   }, | ||||
|   { | ||||
|     "name": "EMPTY_OBJ" | ||||
|   }, | ||||
|  | ||||
| @ -236,9 +236,6 @@ | ||||
|   { | ||||
|     "name": "EMPTY_ARRAY" | ||||
|   }, | ||||
|   { | ||||
|     "name": "EMPTY_ARRAY" | ||||
|   }, | ||||
|   { | ||||
|     "name": "EMPTY_OBJ" | ||||
|   }, | ||||
|  | ||||
| @ -14,9 +14,6 @@ | ||||
|   { | ||||
|     "name": "EMPTY_ARRAY" | ||||
|   }, | ||||
|   { | ||||
|     "name": "EMPTY_ARRAY" | ||||
|   }, | ||||
|   { | ||||
|     "name": "EMPTY_OBJ" | ||||
|   }, | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user