@@ -4,20 +4,8 @@ import isEnabled from './features';
44
55let runInTransaction , didRender , assertNotRendered ;
66
7- let raise = assert ;
8- if ( isEnabled ( 'ember-glimmer-allow-backtracking-rerender' ) ) {
9- raise = ( message , test ) => {
10- deprecate ( message , test , { id : 'ember-views.render-double-modify' , until : '3.0.0' } ) ;
11- } ;
12- }
13-
14- let implication ;
15- if ( isEnabled ( 'ember-glimmer-allow-backtracking-rerender' ) ) {
16- implication = 'will be removed in Ember 3.0.' ;
17- } else if ( isEnabled ( 'ember-glimmer-detect-backtracking-rerender' ) ) {
18- implication = 'is no longer supported. See https://github.com/emberjs/ember.js/issues/13948 for more details.' ;
19- }
20-
7+ // detect-backtracking-rerender by default is debug build only
8+ // detect-glimmer-allow-backtracking-rerender can be enabled in custom builds
219if ( isEnabled ( 'ember-glimmer-detect-backtracking-rerender' ) ||
2210 isEnabled ( 'ember-glimmer-allow-backtracking-rerender' ) ) {
2311 let counter = 0 ;
@@ -59,46 +47,44 @@ if (isEnabled('ember-glimmer-detect-backtracking-rerender') ||
5947 let lastRendered = meta . readableLastRendered ( ) ;
6048
6149 if ( lastRendered && lastRendered [ key ] === counter ) {
62- raise (
63- ( ( ( ) => {
64- let templateMap = meta . readableLastRenderedTemplateMap ( ) ;
65- let lastRenderedIn = templateMap [ key ] ;
66- let currentlyIn = debugStack . peek ( ) ;
67-
68- let referenceMap = meta . readableLastRenderedReferenceMap ( ) ;
69- let lastRef = referenceMap [ key ] ;
70- let parts = [ ] ;
71- let label ;
50+ runInDebug ( ( ) => {
51+ let templateMap = meta . readableLastRenderedTemplateMap ( ) ;
52+ let lastRenderedIn = templateMap [ key ] ;
53+ let currentlyIn = debugStack . peek ( ) ;
54+
55+ let referenceMap = meta . readableLastRenderedReferenceMap ( ) ;
56+ let lastRef = referenceMap [ key ] ;
57+ let parts = [ ] ;
58+ let label ;
59+
60+ if ( lastRef ) {
61+ while ( lastRef && lastRef . _propertyKey ) {
62+ parts . unshift ( lastRef . _propertyKey ) ;
63+ lastRef = lastRef . _parentReference ;
64+ }
7265
73- if ( lastRef ) {
74- while ( lastRef && lastRef . _propertyKey ) {
75- parts . unshift ( lastRef . _propertyKey ) ;
76- lastRef = lastRef . _parentReference ;
77- }
66+ label = parts . join ( '.' ) ;
67+ } else {
68+ label = 'the same value' ;
69+ }
7870
79- label = parts . join ( '.' ) ;
80- } else {
81- label = 'the same value' ;
82- }
71+ let message = `You modified "${ label } " twice on ${ object } in a single render. It was rendered in ${ lastRenderedIn } and modified in ${ currentlyIn } . This was unreliable and slow in Ember 1.x and` ;
8372
84- return `You modified "${ label } " twice on ${ object } in a single render. It was rendered in ${ lastRenderedIn } and modified in ${ currentlyIn } . This was unreliable and slow in Ember 1.x and ${ implication } ` ;
85- } ) ( ) ) ,
86- false ) ;
73+ if ( isEnabled ( 'ember-glimmer-allow-backtracking-rerender' ) ) {
74+ deprecate ( `${ message } will be removed in Ember 3.0.` , false , { id : 'ember-views.render-double-modify' , until : '3.0.0' } ) ;
75+ } else {
76+ assert ( `${ message } is no longer supported. See https://github.com/emberjs/ember.js/issues/13948 for more details.` , false ) ;
77+ }
78+ } ) ;
8779
8880 shouldReflush = true ;
8981 }
9082 } ;
9183} else {
92- runInTransaction = ( ) => {
93- throw new Error ( 'Cannot call runInTransaction without Glimmer' ) ;
94- } ;
95-
96- didRender = ( ) => {
97- throw new Error ( 'Cannot call didRender without Glimmer' ) ;
98- } ;
99-
100- assertNotRendered = ( ) => {
101- throw new Error ( 'Cannot call assertNotRendered without Glimmer' ) ;
84+ // in production do nothing to detect reflushes
85+ runInTransaction = ( context , methodName ) => {
86+ context [ methodName ] ( ) ;
87+ return false ;
10288 } ;
10389}
10490
0 commit comments