Skip to content

Commit aafd502

Browse files
mheveryIgorMinar
authored andcommitted
fix(ivy): default to ngDevMode = true (angular#25208)
Before the `ngDevMode` had to be set explicitly or it would throw an exception at runtime. This changes it so that if `ngDevModu` is `undefined` than we default to `ngDevMode = true`. In other words unless the developer has explicitly asked to make a prodution build by setting `ngDevMode = false` as compilation constant, the default is `ngDevMode = true`. This also fixes a minor bug where the setup code would read `global['ngDevMode']` but all other code would read `global.ngDevMode`. This would cause issues with closure compiler since the reading of the `ngDevMode` must be consistent. PR Close angular#25208
1 parent 4cb1074 commit aafd502

File tree

1 file changed

+40
-29
lines changed

1 file changed

+40
-29
lines changed

packages/core/src/render3/ng_dev_mode.ts

Lines changed: 40 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -35,32 +35,43 @@ declare global {
3535

3636

3737
declare let global: any;
38-
export const ngDevModeResetPerfCounters: () => void =
39-
(typeof ngDevMode == 'undefined' && (function(global: {ngDevMode: NgDevModePerfCounters}) {
40-
function ngDevModeResetPerfCounters() {
41-
global['ngDevMode'] = {
42-
firstTemplatePass: 0,
43-
tNode: 0,
44-
tView: 0,
45-
rendererCreateTextNode: 0,
46-
rendererSetText: 0,
47-
rendererCreateElement: 0,
48-
rendererAddEventListener: 0,
49-
rendererSetAttribute: 0,
50-
rendererRemoveAttribute: 0,
51-
rendererSetProperty: 0,
52-
rendererSetClassName: 0,
53-
rendererAddClass: 0,
54-
rendererRemoveClass: 0,
55-
rendererSetStyle: 0,
56-
rendererRemoveStyle: 0,
57-
rendererDestroy: 0,
58-
rendererDestroyNode: 0,
59-
rendererMoveNode: 0,
60-
rendererRemoveNode: 0,
61-
};
62-
}
63-
ngDevModeResetPerfCounters();
64-
return ngDevModeResetPerfCounters;
65-
})(typeof window != 'undefined' && window || typeof self != 'undefined' && self ||
66-
typeof global != 'undefined' && global)) as() => void;
38+
39+
const __global: {ngDevMode: NgDevModePerfCounters | boolean} =
40+
typeof window != 'undefined' && window || typeof self != 'undefined' && self ||
41+
typeof global != 'undefined' && global;
42+
43+
export function ngDevModeResetPerfCounters() {
44+
__global.ngDevMode = {
45+
firstTemplatePass: 0,
46+
tNode: 0,
47+
tView: 0,
48+
rendererCreateTextNode: 0,
49+
rendererSetText: 0,
50+
rendererCreateElement: 0,
51+
rendererAddEventListener: 0,
52+
rendererSetAttribute: 0,
53+
rendererRemoveAttribute: 0,
54+
rendererSetProperty: 0,
55+
rendererSetClassName: 0,
56+
rendererAddClass: 0,
57+
rendererRemoveClass: 0,
58+
rendererSetStyle: 0,
59+
rendererRemoveStyle: 0,
60+
rendererDestroy: 0,
61+
rendererDestroyNode: 0,
62+
rendererMoveNode: 0,
63+
rendererRemoveNode: 0,
64+
};
65+
}
66+
67+
/**
68+
* This checks to see if the `ngDevMode` has been set. If yes,
69+
* than we honor it, otherwise we default to dev mode with additional checks.
70+
*
71+
* The idea is that unless we are doing production build where we explicitly
72+
* set `ngDevMode == false` we should be helping the developer by providing
73+
* as much early warning and errors as possible.
74+
*/
75+
if (typeof ngDevMode === 'undefined' || ngDevMode) {
76+
ngDevModeResetPerfCounters();
77+
}

0 commit comments

Comments
 (0)