Skip to content

Commit

Permalink
fix(core): define ngDevMode without toplevel side effects
Browse files Browse the repository at this point in the history
Fix #31595
  • Loading branch information
filipesilva committed Aug 12, 2019
1 parent 2abbe98 commit 4a450a5
Show file tree
Hide file tree
Showing 63 changed files with 289 additions and 214 deletions.
2 changes: 1 addition & 1 deletion packages/compiler-cli/ngcc/test/host/esm2015_host_spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -479,7 +479,7 @@ runInEachFileSystem(() => {
}
function compileNgModuleFactory__POST_R3__(injector, options, moduleType) {
ngDevMode && assertNgModuleType(moduleType);
getNgDevMode() && assertNgModuleType(moduleType);
return Promise.resolve(new R3NgModuleFactory(moduleType));
}
`
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ function compileNgModuleFactory__PRE_R3__(injector, options, moduleType) {
}
function compileNgModuleFactory__POST_R3__(injector, options, moduleType) {
ngDevMode && assertNgModuleType(moduleType);
getNgDevMode() && assertNgModuleType(moduleType);
return Promise.resolve(new R3NgModuleFactory(moduleType));
}
// Some other content
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ function compileNgModuleFactory__PRE_R3__(injector, options, moduleType) {
}
function compileNgModuleFactory__POST_R3__(injector, options, moduleType) {
ngDevMode && assertNgModuleType(moduleType);
getNgDevMode() && assertNgModuleType(moduleType);
return Promise.resolve(new R3NgModuleFactory(moduleType));
}
// Some other content
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ function compileNgModuleFactory__PRE_R3__(injector, options, moduleType) {
}
function compileNgModuleFactory__POST_R3__(injector, options, moduleType) {
ngDevMode && assertNgModuleType(moduleType);
getNgDevMode() && assertNgModuleType(moduleType);
return Promise.resolve(new R3NgModuleFactory(moduleType));
}
// Some other content`
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ function compileNgModuleFactory__PRE_R3__(injector, options, moduleType) {
}
function compileNgModuleFactory__POST_R3__(injector, options, moduleType) {
ngDevMode && assertNgModuleType(moduleType);
getNgDevMode() && assertNgModuleType(moduleType);
return Promise.resolve(new R3NgModuleFactory(moduleType));
}
// Some other content
Expand Down
1 change: 1 addition & 0 deletions packages/core/src/application_ref.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ import {Testability, TestabilityRegistry} from './testability/testability';
import {isDevMode} from './util/is_dev_mode';
import {isPromise} from './util/lang';
import {scheduleMicroTask} from './util/microtask';
import {ngDevMode} from './util/ng_dev_mode';
import {stringify} from './util/stringify';
import {NgZone, NoopNgZone} from './zone/ng_zone';

Expand Down
1 change: 1 addition & 0 deletions packages/core/src/debug/debug_node.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import {INTERPOLATION_DELIMITER, isPropMetadataString, renderStringify} from '..
import {findComponentView} from '../render3/util/view_traversal_utils';
import {getComponentViewByIndex, getNativeByTNodeOrNull} from '../render3/util/view_utils';
import {assertDomNode} from '../util/assert';
import {ngDevMode} from '../util/ng_dev_mode';
import {DebugContext} from '../view/index';


Expand Down
4 changes: 2 additions & 2 deletions packages/core/src/di/injector_compatibility.ts
Original file line number Diff line number Diff line change
Expand Up @@ -200,8 +200,8 @@ export class NullInjector implements Injector {
if (notFoundValue === THROW_IF_NOT_FOUND) {
// Intentionally left behind: With dev tools open the debugger will stop here. There is no
// reason why correctly written application should cause this exception.
// TODO(misko): uncomment the next line once `ngDevMode` works with closure.
// if(ngDevMode) debugger;
// TODO(misko): uncomment the next line once `getNgDevMode()` works with closure.
// if(getNgDevMode()) debugger;
const error = new Error(`NullInjectorError: No provider for ${stringify(token)}!`);
error.name = 'NullInjectorError';
throw error;
Expand Down
4 changes: 2 additions & 2 deletions packages/core/src/di/interface/defs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -211,8 +211,8 @@ export function getInjectableDef<T>(type: any): ɵɵInjectableDef<T>|null {
*/
export function getInheritedInjectableDef<T>(type: any): ɵɵInjectableDef<T>|null {
if (type && type[NG_INJECTABLE_DEF]) {
// TODO(FW-1307): Re-add ngDevMode when closure can handle it
// ngDevMode &&
// TODO(FW-1307): Re-add getNgDevMode() when closure can handle it
// getNgDevMode() &&
console.warn(
`DEPRECATED: DI is instantiating a token "${type.name}" that inherits its @Injectable decorator but does not provide one itself.\n` +
`This will become an error in v10. Please add @Injectable() to the "${type.name}" class.`);
Expand Down
3 changes: 1 addition & 2 deletions packages/core/src/di/r3_injector.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,11 @@
* found in the LICENSE file at https://angular.io/license
*/

import '../util/ng_dev_mode';

import {OnDestroy} from '../interface/lifecycle_hooks';
import {Type} from '../interface/type';
import {throwCyclicDependencyError, throwInvalidProviderError, throwMixedMultiProviderError} from '../render3/errors';
import {deepForEach} from '../util/array_utils';
import {ngDevMode} from '../util/ng_dev_mode';
import {stringify} from '../util/stringify';

import {resolveForwardRef} from './forward_ref';
Expand Down
2 changes: 1 addition & 1 deletion packages/core/src/render3/TREE_SHAKING.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ Here is an example of code which is not tree shakable.
export function query<T>(
predicate: Type<any>| string[], descend?: boolean,
read?: QueryReadType | Type<T>): QueryList<T> {
ngDevMode && assertPreviousIsParent();
getNgDevMode() && assertPreviousIsParent();
const queryList = new QueryList<T>();
const query = currentQuery || (currentQuery = new LQuery_());
query.track(queryList, predicate, descend, read);
Expand Down
1 change: 1 addition & 0 deletions packages/core/src/render3/bindings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@

import {devModeEqual} from '../change_detection/change_detection_util';
import {assertDataInRange, assertLessThan, assertNotSame} from '../util/assert';
import {ngDevMode} from '../util/ng_dev_mode';
import {throwErrorIfNoChangesMode} from './errors';
import {LView} from './interfaces/view';
import {getCheckNoChangesMode} from './state';
Expand Down
1 change: 1 addition & 0 deletions packages/core/src/render3/component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import {Type} from '../core';
import {Injector} from '../di/injector';
import {Sanitizer} from '../sanitization/security';
import {assertDataInRange} from '../util/assert';
import {ngDevMode} from '../util/ng_dev_mode';

import {assertComponentType} from './assert';
import {getComponentDef} from './definition';
Expand Down
1 change: 1 addition & 0 deletions packages/core/src/render3/component_ref.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import {ElementRef as viewEngine_ElementRef} from '../linker/element_ref';
import {NgModuleRef as viewEngine_NgModuleRef} from '../linker/ng_module_factory';
import {RendererFactory2} from '../render/api';
import {Sanitizer} from '../sanitization/security';
import {ngDevMode} from '../util/ng_dev_mode';
import {VERSION} from '../version';
import {NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR} from '../view/provider';

Expand Down
4 changes: 1 addition & 3 deletions packages/core/src/render3/context_discovery.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,8 @@
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
import '../util/ng_dev_mode';

import {assertDomNode} from '../util/assert';
import {ngDevMode} from '../util/ng_dev_mode';

import {EMPTY_ARRAY} from './empty';
import {LContext, MONKEY_PATCH_KEY_NAME} from './interfaces/context';
Expand All @@ -17,7 +16,6 @@ import {CONTEXT, HEADER_OFFSET, HOST, LView, TVIEW} from './interfaces/view';
import {getComponentViewByIndex, getNativeByTNodeOrNull, readPatchedData, unwrapRNode} from './util/view_utils';



/** Returns the matching `LContext` data for a given DOM node, directive or component instance.
*
* This function will examine the provided DOM element, component, or directive instance\'s
Expand Down
2 changes: 1 addition & 1 deletion packages/core/src/render3/definition.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,14 @@
* found in the LICENSE file at https://angular.io/license
*/

import '../util/ng_dev_mode';
import {ChangeDetectionStrategy} from '../change_detection/constants';
import {NG_INJECTABLE_DEF, ɵɵdefineInjectable} from '../di/interface/defs';
import {Mutable, Type} from '../interface/type';
import {NgModuleDef} from '../metadata/ng_module';
import {SchemaMetadata} from '../metadata/schema';
import {ViewEncapsulation} from '../metadata/view';
import {noSideEffects} from '../util/closure';
import {ngDevMode} from '../util/ng_dev_mode';
import {stringify} from '../util/stringify';
import {EMPTY_ARRAY, EMPTY_OBJ} from './empty';
import {NG_BASE_DEF, NG_COMPONENT_DEF, NG_DIRECTIVE_DEF, NG_LOCALE_ID_DEF, NG_MODULE_DEF, NG_PIPE_DEF} from './fields';
Expand Down
10 changes: 6 additions & 4 deletions packages/core/src/render3/di.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import {getInjectableDef, getInjectorDef} from '../di/interface/defs';
import {InjectFlags} from '../di/interface/injector';
import {Type} from '../interface/type';
import {assertDefined, assertEqual} from '../util/assert';
import {ngDevMode} from '../util/ng_dev_mode';

import {getComponentDef, getDirectiveDef, getPipeDef} from './definition';
import {NG_ELEMENT_ID} from './fields';
Expand Down Expand Up @@ -97,7 +98,8 @@ let nextNgElementId = 0;
*/
export function bloomAdd(
injectorIndex: number, tView: TView, type: Type<any>| InjectionToken<any>| string): void {
ngDevMode && assertEqual(tView.firstTemplatePass, true, 'expected firstTemplatePass to be true');
ngDevMode &&
assertEqual(tView.firstTemplatePass, true, 'expected firstTemplatePass to be true');
let id: number|undefined =
typeof type !== 'string' ? (type as any)[NG_ELEMENT_ID] : type.charCodeAt(0) || 0;

Expand Down Expand Up @@ -154,8 +156,8 @@ export function getOrCreateNodeInjectorForNode(
insertBloom(tView.blueprint, null);

ngDevMode && assertEqual(
tNode.flags === 0 || tNode.flags === TNodeFlags.isComponent, true,
'expected tNode.flags to not be initialized');
tNode.flags === 0 || tNode.flags === TNodeFlags.isComponent, true,
'expected tNode.flags to not be initialized');
}

const parentLoc = getParentInjectorLocation(tNode, hostView);
Expand Down Expand Up @@ -270,7 +272,7 @@ export function diPublicInInjector(
*/
export function injectAttributeImpl(tNode: TNode, attrNameToInject: string): string|null {
ngDevMode && assertNodeOfPossibleTypes(
tNode, TNodeType.Container, TNodeType.Element, TNodeType.ElementContainer);
tNode, TNodeType.Container, TNodeType.Element, TNodeType.ElementContainer);
ngDevMode && assertDefined(tNode, 'expecting tNode');
if (attrNameToInject === 'class') {
return getInitialStylingValue(tNode.classes);
Expand Down
6 changes: 3 additions & 3 deletions packages/core/src/render3/empty.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
import '../util/ng_dev_mode';
import {ngDevMode} from '../util/ng_dev_mode';

/**
* This file contains reuseable "empty" symbols that can be used as default return values
Expand All @@ -18,8 +18,8 @@ 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) {
// These property accesses can be ignored because ngDevMode will be set to false
if (ngDevMode) {
// These property accesses can be ignored because getNgDevMode() will be set to false
// when optimizing code and the whole if statement will be dropped.
// tslint:disable-next-line:no-toplevel-property-access
Object.freeze(EMPTY_OBJ);
Expand Down
1 change: 1 addition & 0 deletions packages/core/src/render3/hooks.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
*/

import {assertEqual} from '../util/assert';
import {ngDevMode} from '../util/ng_dev_mode';

import {DirectiveDef} from './interfaces/definition';
import {TNode} from './interfaces/node';
Expand Down
4 changes: 2 additions & 2 deletions packages/core/src/render3/i18n.md
Original file line number Diff line number Diff line change
Expand Up @@ -553,9 +553,9 @@ const tI18n = <TI18n>{

// const node = document.createTextNode('');
// if (first_execution_for_tview) {
// ngDevMode && assertEquals(tView.blueprint.length, expandoIndex);
// getNgDevMode() && assertEquals(tView.blueprint.length, expandoIndex);
// tView.blueprint.push(null);
// ngDevMode && assertEquals(lView.length, expandoIndex);
// getNgDevMode() && assertEquals(lView.length, expandoIndex);
// lView.push(node);
// } else {
// lView[expandoIndex] = node; // save expandoIndex == 100;
Expand Down
13 changes: 7 additions & 6 deletions packages/core/src/render3/i18n.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import {InertBodyHelper} from '../sanitization/inert_body';
import {_sanitizeUrl, sanitizeSrcset} from '../sanitization/url_sanitizer';
import {addAllToArray} from '../util/array_utils';
import {assertDataInRange, assertDefined, assertEqual, assertGreaterThan} from '../util/assert';
import {ngDevMode} from '../util/ng_dev_mode';
import {attachPatchData} from './context_discovery';
import {bind, setDelayProjection, ɵɵload} from './instructions/all';
import {attachI18nOpCodesDebug} from './instructions/lview_debug';
Expand Down Expand Up @@ -671,8 +672,8 @@ export function ɵɵi18nEnd(): void {
function i18nEndFirstPass(tView: TView) {
const viewData = getLView();
ngDevMode && assertEqual(
viewData[BINDING_INDEX], viewData[TVIEW].bindingStartIndex,
'i18nEnd should be called before any binding');
viewData[BINDING_INDEX], viewData[TVIEW].bindingStartIndex,
'i18nEnd should be called before any binding');

const rootIndex = i18nIndexStack[i18nIndexStackPointer--];
const tI18n = tView.data[rootIndex + HEADER_OFFSET] as TI18n;
Expand Down Expand Up @@ -779,8 +780,8 @@ function readCreateOpCodes(
const commentValue = createOpCodes[++i] as string;
const commentNodeIndex = createOpCodes[++i] as number;
ngDevMode && assertEqual(
typeof commentValue, 'string',
`Expected "${commentValue}" to be a comment node value`);
typeof commentValue, 'string',
`Expected "${commentValue}" to be a comment node value`);
const commentRNode = renderer.createComment(commentValue);
ngDevMode && ngDevMode.rendererCreateComment++;
previousTNode = currentTNode;
Expand All @@ -796,8 +797,8 @@ function readCreateOpCodes(
const tagNameValue = createOpCodes[++i] as string;
const elementNodeIndex = createOpCodes[++i] as number;
ngDevMode && assertEqual(
typeof tagNameValue, 'string',
`Expected "${tagNameValue}" to be an element node tag name`);
typeof tagNameValue, 'string',
`Expected "${tagNameValue}" to be an element node tag name`);
const elementRNode = renderer.createElement(tagNameValue);
ngDevMode && ngDevMode.rendererCreateElement++;
previousTNode = currentTNode;
Expand Down
2 changes: 2 additions & 0 deletions packages/core/src/render3/instructions/alloc_host_vars.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,13 @@
*/

import {assertEqual} from '../../util/assert';
import {ngDevMode} from '../../util/ng_dev_mode';
import {ComponentDef, DirectiveDef} from '../interfaces/definition';
import {LView, TVIEW, TView} from '../interfaces/view';
import {getCurrentDirectiveDef, getLView} from '../state';
import {NO_CHANGE} from '../tokens';


/**
* Allocates the necessary amount of slots for host vars.
*
Expand Down
1 change: 1 addition & 0 deletions packages/core/src/render3/instructions/change_detection.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
*/

import {assertDefined} from '../../util/assert';
import {ngDevMode} from '../../util/ng_dev_mode';
import {getComponentViewByInstance} from '../context_discovery';
import {CONTEXT, RootContext, RootContextFlags} from '../interfaces/view';
import {getRootView} from '../util/view_traversal_utils';
Expand Down
5 changes: 3 additions & 2 deletions packages/core/src/render3/instructions/container.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
* found in the LICENSE file at https://angular.io/license
*/
import {assertDataInRange, assertEqual} from '../../util/assert';
import {ngDevMode} from '../../util/ng_dev_mode';
import {assertHasParent} from '../assert';
import {attachPatchData} from '../context_discovery';
import {executePreOrderHooks, registerPostOrderHooks} from '../hooks';
Expand Down Expand Up @@ -144,8 +145,8 @@ function containerInternal(
lView: LView, nodeIndex: number, tagName: string | null,
attrs: TAttributes | null): TContainerNode {
ngDevMode && assertEqual(
lView[BINDING_INDEX], lView[TVIEW].bindingStartIndex,
'container nodes should be created before any bindings');
lView[BINDING_INDEX], lView[TVIEW].bindingStartIndex,
'container nodes should be created before any bindings');

const adjustedIndex = nodeIndex + HEADER_OFFSET;
ngDevMode && assertDataInRange(lView, nodeIndex + HEADER_OFFSET);
Expand Down
5 changes: 3 additions & 2 deletions packages/core/src/render3/instructions/element.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
*/

import {assertDataInRange, assertDefined, assertEqual} from '../../util/assert';
import {ngDevMode} from '../../util/ng_dev_mode';
import {assertHasParent} from '../assert';
import {attachPatchData} from '../context_discovery';
import {registerPostOrderHooks} from '../hooks';
Expand Down Expand Up @@ -47,8 +48,8 @@ export function ɵɵelementStart(
const lView = getLView();
const tView = lView[TVIEW];
ngDevMode && assertEqual(
lView[BINDING_INDEX], tView.bindingStartIndex,
'elements should be created before any bindings ');
lView[BINDING_INDEX], tView.bindingStartIndex,
'elements should be created before any bindings ');

ngDevMode && ngDevMode.rendererCreateElement++;
ngDevMode && assertDataInRange(lView, index + HEADER_OFFSET);
Expand Down
8 changes: 5 additions & 3 deletions packages/core/src/render3/instructions/element_container.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
* found in the LICENSE file at https://angular.io/license
*/
import {assertDataInRange, assertEqual} from '../../util/assert';
import {ngDevMode} from '../../util/ng_dev_mode';
import {assertHasParent} from '../assert';
import {attachPatchData} from '../context_discovery';
import {registerPostOrderHooks} from '../hooks';
Expand Down Expand Up @@ -42,12 +43,13 @@ export function ɵɵelementContainerStart(
const renderer = lView[RENDERER];
const tagName = 'ng-container';
ngDevMode && assertEqual(
lView[BINDING_INDEX], tView.bindingStartIndex,
'element containers should be created before any bindings');
lView[BINDING_INDEX], tView.bindingStartIndex,
'element containers should be created before any bindings');

ngDevMode && ngDevMode.rendererCreateComment++;
ngDevMode && assertDataInRange(lView, index + HEADER_OFFSET);
const native = lView[index + HEADER_OFFSET] = renderer.createComment(ngDevMode ? tagName : '');
const native = lView[index + HEADER_OFFSET] =
renderer.createComment(ngDevMode ? tagName : '');

ngDevMode && assertDataInRange(lView, index - 1);
const tNode = getOrCreateTNode(
Expand Down
4 changes: 3 additions & 1 deletion packages/core/src/render3/instructions/embedded_view.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
*/

import {assertDefined, assertEqual} from '../../util/assert';
import {ngDevMode} from '../../util/ng_dev_mode';
import {assertLContainerOrUndefined} from '../assert';
import {ACTIVE_INDEX, CONTAINER_HEADER_OFFSET, LContainer} from '../interfaces/container';
import {RenderFlags} from '../interfaces/definition';
Expand Down Expand Up @@ -84,7 +85,8 @@ function getOrCreateEmbeddedTView(
ngDevMode && assertNodeType(parent, TNodeType.Container);
const containerTViews = parent.tViews as TView[];
ngDevMode && assertDefined(containerTViews, 'TView expected');
ngDevMode && assertEqual(Array.isArray(containerTViews), true, 'TViews should be in an array');
ngDevMode &&
assertEqual(Array.isArray(containerTViews), true, 'TViews should be in an array');
if (viewIndex >= containerTViews.length || containerTViews[viewIndex] == null) {
containerTViews[viewIndex] = createTView(
viewIndex, null, consts, vars, tView.directiveRegistry, tView.pipeRegistry, null, null);
Expand Down
1 change: 1 addition & 0 deletions packages/core/src/render3/instructions/host_property.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
* found in the LICENSE file at https://angular.io/license
*/
import {assertNotEqual} from '../../util/assert';
import {ngDevMode} from '../../util/ng_dev_mode';
import {SanitizerFn} from '../interfaces/sanitization';
import {getLView, getSelectedIndex} from '../state';
import {NO_CHANGE} from '../tokens';
Expand Down
Loading

0 comments on commit 4a450a5

Please sign in to comment.