Skip to content

Commit 10f2f9b

Browse files
author
Chris Garrett
authored
Merge pull request emberjs#19381 from emberjs/deprecate-array-observers
[DEPRECATION] Add Array Observers deprecation
2 parents a5e6f09 + 71f9cd0 commit 10f2f9b

File tree

5 files changed

+50
-9
lines changed

5 files changed

+50
-9
lines changed

packages/@ember/-internals/metal/lib/array.ts

+38-5
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
import { EmberArray } from '@ember/-internals/utils';
1+
import { EmberArray, getDebugName } from '@ember/-internals/utils';
2+
import { deprecate } from '@ember/debug';
23
import { arrayContentDidChange, arrayContentWillChange } from './array_events';
34
import { addListener, removeListener } from './events';
45
import { notifyPropertyChange } from './property_events';
@@ -91,16 +92,48 @@ function arrayObserversHelper(
9192

9293
export function addArrayObserver<T>(
9394
array: EmberArray<T>,
94-
target: any,
95-
opts?: ArrayObserverOptions | undefined
95+
target: object | Function | null,
96+
opts?: ArrayObserverOptions | undefined,
97+
suppress = false
9698
): ObjectHasArrayObservers {
99+
deprecate(
100+
`Array observers have been deprecated. Added an array observer to ${getDebugName?.(array)}.`,
101+
suppress,
102+
{
103+
id: 'array-observers',
104+
url: 'https://deprecations.emberjs.com/v3.x#toc_array-observers',
105+
until: '4.0.0',
106+
for: 'ember-source',
107+
since: {
108+
enabled: '3.26.0-beta.1',
109+
},
110+
}
111+
);
112+
97113
return arrayObserversHelper(array, target, opts, addListener, false);
98114
}
99115

100116
export function removeArrayObserver<T>(
101117
array: EmberArray<T>,
102-
target: any,
103-
opts?: ArrayObserverOptions | undefined
118+
target: object | Function | null,
119+
opts?: ArrayObserverOptions | undefined,
120+
suppress = false
104121
): ObjectHasArrayObservers {
122+
deprecate(
123+
`Array observers have been deprecated. Removed an array observer from ${getDebugName?.(
124+
array
125+
)}.`,
126+
suppress,
127+
{
128+
id: 'array-observers',
129+
url: 'https://deprecations.emberjs.com/v3.x#toc_array-observers',
130+
until: '4.0.0',
131+
for: 'ember-source',
132+
since: {
133+
enabled: '3.26.0-beta.1',
134+
},
135+
}
136+
);
137+
105138
return arrayObserversHelper(array, target, opts, removeListener, true);
106139
}

packages/@ember/-internals/runtime/lib/system/array_proxy.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -272,15 +272,15 @@ export default class ArrayProxy extends EmberObject {
272272
isArray(arrangedContent) || arrangedContent.isDestroyed
273273
);
274274

275-
addArrayObserver(arrangedContent, this, ARRAY_OBSERVER_MAPPING);
275+
addArrayObserver(arrangedContent, this, ARRAY_OBSERVER_MAPPING, true);
276276

277277
this._arrangedContent = arrangedContent;
278278
}
279279
}
280280

281281
_removeArrangedContentArrayObserver() {
282282
if (this._arrangedContent) {
283-
removeArrayObserver(this._arrangedContent, this, ARRAY_OBSERVER_MAPPING);
283+
removeArrayObserver(this._arrangedContent, this, ARRAY_OBSERVER_MAPPING, true);
284284
}
285285
}
286286

packages/@ember/-internals/runtime/tests/mixins/array_test.js

+2
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,8 @@ moduleFor(
196196
'notify array observers',
197197
class extends AbstractTestCase {
198198
beforeEach(assert) {
199+
expectDeprecation(/Array observers have been deprecated/);
200+
199201
obj = DummyArray.create();
200202

201203
observer = EmberObject.extend({

packages/@ember/-internals/runtime/tests/mutable-array/replace-test.js

+2
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,8 @@ class ReplaceTests extends AbstractTestCase {
241241
}
242242

243243
async '@test Adding object should notify array observer'() {
244+
expectDeprecation(/Array observers have been deprecated/);
245+
244246
let fixtures = newFixture(4);
245247
let obj = this.newObject(fixtures);
246248
let observer = this.newObserver(obj).observeArray(obj);

packages/@ember/-internals/runtime/tests/system/array_proxy/array_observer_test.js

+6-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@ moduleFor(
77
'ArrayProxy - array observers',
88
class extends AbstractTestCase {
99
['@test mutating content'](assert) {
10-
assert.expect(4);
10+
expectDeprecation(/Array observers have been deprecated/);
11+
12+
assert.expect(5);
1113

1214
let content = A(['x', 'y', 'z']);
1315
let proxy = ArrayProxy.create({ content });
@@ -28,7 +30,9 @@ moduleFor(
2830
}
2931

3032
['@test assigning content'](assert) {
31-
assert.expect(4);
33+
expectDeprecation(/Array observers have been deprecated/);
34+
35+
assert.expect(5);
3236

3337
let content = A(['x', 'y', 'z']);
3438
let proxy = ArrayProxy.create({ content });

0 commit comments

Comments
 (0)