Skip to content

Commit 1c037ba

Browse files
authored
Merge pull request #14876 from rwjblue/refactor-transaction
Refactor `ember-metal/lib/transaction` module.
2 parents fc729c9 + 67e6b8c commit 1c037ba

File tree

2 files changed

+33
-60
lines changed

2 files changed

+33
-60
lines changed

packages/ember-glimmer/lib/renderer.js

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,7 @@ import {
33
run,
44
setHasViews,
55
assert,
6-
runInTransaction as _runInTransaction,
7-
isFeatureEnabled
6+
runInTransaction
87
} from 'ember-metal';
98
import { CURRENT_TAG, UNDEFINED_REFERENCE } from '@glimmer/reference';
109
import {
@@ -17,18 +16,6 @@ import { BOUNDS } from './component';
1716
import { RootComponentDefinition } from './syntax/curly-component';
1817
import { TopLevelOutletComponentDefinition } from './syntax/outlet';
1918

20-
let runInTransaction;
21-
22-
if (isFeatureEnabled('ember-glimmer-detect-backtracking-rerender') ||
23-
isFeatureEnabled('ember-glimmer-allow-backtracking-rerender')) {
24-
runInTransaction = _runInTransaction;
25-
} else {
26-
runInTransaction = (context, methodName) => {
27-
context[methodName]();
28-
return false;
29-
};
30-
}
31-
3219
const { backburner } = run;
3320

3421
class DynamicScope {

packages/ember-metal/lib/transaction.js

Lines changed: 32 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,8 @@ import isEnabled from './features';
44

55
let 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
219
if (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

Comments
 (0)