ember-source 4.8.0-alpha.5 → 4.8.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +11 -2
- package/blueprints/helper/files/__root__/{__collection__ → helpers}/__name__.ts +0 -0
- package/blueprints/helper/index.js +0 -15
- package/blueprints/helper-test/index.js +0 -3
- package/blueprints/helper-test/mocha-0.12-files/__root__/__testType__/{__collection__ → helpers}/__name__-test.js +0 -0
- package/blueprints/helper-test/mocha-files/__root__/__testType__/{__collection__ → helpers}/__name__-test.js +0 -0
- package/blueprints/helper-test/mocha-rfc-232-files/__root__/__testType__/{__collection__ → helpers}/__name__-test.ts +0 -0
- package/blueprints/helper-test/qunit-files/__root__/__testType__/{__collection__ → helpers}/__name__-test.js +0 -0
- package/blueprints/helper-test/qunit-rfc-232-files/__root__/__testType__/{__collection__ → helpers}/__name__-test.ts +0 -0
- package/blueprints-js/helper/files/__root__/{__collection__ → helpers}/__name__.js +0 -0
- package/blueprints-js/helper-test/mocha-0.12-files/__root__/__testType__/{__collection__ → helpers}/__name__-test.js +0 -0
- package/blueprints-js/helper-test/mocha-files/__root__/__testType__/{__collection__ → helpers}/__name__-test.js +0 -0
- package/blueprints-js/helper-test/mocha-rfc-232-files/__root__/__testType__/{__collection__ → helpers}/__name__-test.js +0 -0
- package/blueprints-js/helper-test/qunit-files/__root__/__testType__/{__collection__ → helpers}/__name__-test.js +0 -0
- package/blueprints-js/helper-test/qunit-rfc-232-files/__root__/__testType__/{__collection__ → helpers}/__name__-test.js +0 -0
- package/build-metadata.json +3 -3
- package/dist/dependencies/router_js.js +1 -1
- package/dist/ember-template-compiler.js +675 -18
- package/dist/ember-template-compiler.map +1 -1
- package/dist/ember-testing.js +11 -11
- package/dist/ember-testing.map +1 -1
- package/dist/ember.debug.js +19576 -20510
- package/dist/ember.debug.map +1 -1
- package/dist/header/license.js +1 -1
- package/dist/packages/@ember/-internals/glimmer/index.js +4 -2
- package/dist/packages/@ember/-internals/metal/index.js +214 -1094
- package/dist/packages/@ember/-internals/routing/index.js +1 -17
- package/dist/packages/@ember/-internals/runtime/index.js +3 -16
- package/dist/packages/@ember/-internals/runtime/lib/mixins/-proxy.js +2 -1
- package/dist/packages/@ember/-internals/runtime/lib/mixins/action_handler.js +4 -3
- package/dist/packages/@ember/-internals/runtime/lib/mixins/comparable.js +1 -1
- package/dist/packages/@ember/-internals/runtime/lib/mixins/container_proxy.js +1 -1
- package/dist/packages/@ember/-internals/runtime/lib/mixins/registry_proxy.js +1 -8
- package/dist/packages/@ember/-internals/runtime/lib/mixins/target_action_support.js +2 -1
- package/dist/packages/@ember/-internals/utils/index.js +3 -3
- package/dist/packages/@ember/-internals/views/lib/component_lookup.js +1 -1
- package/dist/packages/@ember/-internals/views/lib/mixins/action_support.js +2 -1
- package/dist/packages/@ember/-internals/views/lib/mixins/child_views_support.js +2 -1
- package/dist/packages/@ember/-internals/views/lib/mixins/class_names_support.js +2 -1
- package/dist/packages/@ember/-internals/views/lib/mixins/view_state_support.js +1 -1
- package/dist/packages/@ember/-internals/views/lib/mixins/view_support.js +2 -1
- package/dist/packages/@ember/-internals/views/lib/system/event_dispatcher.js +1 -1
- package/dist/packages/@ember/-internals/views/lib/views/core_view.js +3 -1
- package/dist/packages/@ember/application/index.js +876 -2
- package/dist/packages/@ember/application/instance.js +2 -2
- package/dist/packages/@ember/application/namespace.js +70 -1
- package/dist/packages/@ember/array/index.js +1503 -2
- package/dist/packages/@ember/array/mutable.js +1 -1
- package/dist/packages/@ember/array/proxy.js +307 -1
- package/dist/packages/@ember/canary-features/index.js +2 -2
- package/dist/packages/@ember/controller/index.js +260 -3
- package/dist/packages/@ember/debug/container-debug-adapter.js +99 -1
- package/dist/packages/@ember/debug/data-adapter.js +574 -1
- package/dist/packages/@ember/engine/index.js +5 -5
- package/dist/packages/@ember/engine/instance.js +4 -4
- package/dist/packages/@ember/enumerable/index.js +3 -1
- package/dist/packages/@ember/enumerable/mutable.js +4 -0
- package/dist/packages/@ember/{-internals/runtime/lib/system/object.js → object/-internals.js} +4 -17
- package/dist/packages/@ember/object/core.js +731 -1
- package/dist/packages/@ember/object/evented.js +93 -2
- package/dist/packages/@ember/object/index.js +76 -4
- package/dist/packages/@ember/object/internals.js +3 -2
- package/dist/packages/@ember/object/lib/computed/computed_macros.js +3 -1
- package/dist/packages/@ember/object/lib/computed/reduce_computed_macros.js +4 -3
- package/dist/packages/@ember/object/mixin.js +659 -1
- package/dist/packages/@ember/object/observable.js +341 -1
- package/dist/packages/@ember/object/promise-proxy-mixin.js +150 -1
- package/dist/packages/@ember/object/proxy.js +10 -1
- package/dist/packages/@ember/routing/-internals.js +7 -0
- package/dist/packages/@ember/routing/auto-location.js +249 -1
- package/dist/packages/@ember/routing/hash-location.js +169 -1
- package/dist/packages/@ember/routing/history-location.js +289 -1
- package/dist/packages/@ember/{-internals/routing/lib/system → routing/lib}/cache.js +0 -0
- package/dist/packages/@ember/{-internals/routing/lib/system → routing/lib}/controller_for.js +0 -0
- package/dist/packages/@ember/{-internals/routing/lib/system → routing/lib}/dsl.js +0 -0
- package/dist/packages/@ember/{-internals/routing/lib/system → routing/lib}/engines.js +0 -0
- package/dist/packages/@ember/{-internals/routing/lib/system → routing/lib}/generate_controller.js +0 -0
- package/dist/packages/@ember/{-internals/routing/lib/location/util.js → routing/lib/location-utils.js} +0 -0
- package/dist/packages/@ember/{-internals/routing/lib/system → routing/lib}/query_params.js +0 -0
- package/dist/packages/@ember/{-internals/routing/lib/system → routing/lib}/route-info.js +0 -0
- package/dist/packages/@ember/{-internals/routing/lib/system → routing/lib}/router_state.js +1 -1
- package/dist/packages/@ember/{-internals/routing/lib/services/routing.js → routing/lib/routing-service.js} +2 -2
- package/dist/packages/@ember/{-internals/routing/lib/system → routing/lib}/transition.js +0 -0
- package/dist/packages/@ember/{-internals/routing → routing}/lib/utils.js +0 -0
- package/dist/packages/@ember/routing/location.js +104 -1
- package/dist/packages/@ember/routing/none-location.js +123 -1
- package/dist/packages/@ember/routing/route.js +1700 -1
- package/dist/packages/@ember/routing/router-service.js +510 -1
- package/dist/packages/@ember/routing/router.js +1666 -1
- package/dist/packages/@ember/service/index.js +1 -1
- package/dist/packages/@ember/utils/index.js +7 -2
- package/dist/packages/@ember/{-internals/runtime → utils}/lib/compare.js +2 -2
- package/dist/packages/@ember/{-internals/runtime → utils}/lib/is-equal.js +0 -0
- package/dist/packages/@ember/utils/lib/is_blank.js +35 -0
- package/dist/packages/@ember/utils/lib/is_empty.js +68 -0
- package/dist/packages/@ember/utils/lib/is_none.js +27 -0
- package/dist/packages/@ember/utils/lib/is_present.js +38 -0
- package/dist/packages/@ember/{-internals/runtime → utils}/lib/type-of.js +2 -2
- package/dist/packages/ember/index.js +47 -28
- package/dist/packages/ember/version.js +1 -1
- package/dist/packages/ember-testing/lib/adapters/adapter.js +1 -1
- package/dist/packages/ember-testing/lib/helpers/current_path.js +2 -2
- package/dist/packages/ember-testing/lib/helpers/current_route_name.js +2 -2
- package/dist/packages/ember-testing/lib/helpers/current_url.js +1 -1
- package/docs/data.json +9428 -9189
- package/package.json +23 -8
- package/types/preview/@ember/-internals/resolver.d.ts +35 -0
- package/types/preview/@ember/application/-private/event-dispatcher.d.ts +18 -0
- package/types/preview/@ember/application/-private/registry.d.ts +15 -0
- package/types/preview/@ember/application/deprecations.d.ts +24 -0
- package/types/preview/@ember/application/index.d.ts +153 -0
- package/types/preview/@ember/application/instance.d.ts +9 -0
- package/types/preview/@ember/application/tsconfig.json +3 -0
- package/types/preview/@ember/application/types.d.ts +29 -0
- package/types/preview/@ember/array/-private/enumerable.d.ts +13 -0
- package/types/preview/@ember/array/-private/mutable-enumerable.d.ts +13 -0
- package/types/preview/@ember/array/-private/native-array.d.ts +23 -0
- package/types/preview/@ember/array/index.d.ts +243 -0
- package/types/preview/@ember/array/mutable.d.ts +94 -0
- package/types/preview/@ember/array/proxy.d.ts +29 -0
- package/types/preview/@ember/array/tsconfig.json +3 -0
- package/types/preview/@ember/component/-private/class-names-support.d.ts +27 -0
- package/types/preview/@ember/component/-private/core-view.d.ts +14 -0
- package/types/preview/@ember/component/-private/glimmer-interfaces.d.ts +45 -0
- package/types/preview/@ember/component/-private/signature-utils.d.ts +107 -0
- package/types/preview/@ember/component/-private/view-mixin.d.ts +59 -0
- package/types/preview/@ember/component/helper.d.ts +122 -0
- package/types/preview/@ember/component/index.d.ts +132 -0
- package/types/preview/@ember/component/template-only.d.ts +47 -0
- package/types/preview/@ember/component/tsconfig.json +3 -0
- package/types/preview/@ember/controller/index.d.ts +48 -0
- package/types/preview/@ember/controller/tsconfig.json +3 -0
- package/types/preview/@ember/debug/container-debug-adapter.d.ts +13 -0
- package/types/preview/@ember/debug/data-adapter.d.ts +64 -0
- package/types/preview/@ember/debug/index.d.ts +98 -0
- package/types/preview/@ember/debug/tsconfig.json +3 -0
- package/types/preview/@ember/destroyable/index.d.ts +23 -0
- package/types/preview/@ember/destroyable/tsconfig.json +3 -0
- package/types/preview/@ember/engine/-private/container-proxy-mixin.d.ts +17 -0
- package/types/preview/@ember/engine/-private/registry-proxy-mixin.d.ts +54 -0
- package/types/preview/@ember/engine/-private/types/initializer.d.ts +8 -0
- package/types/preview/@ember/engine/index.d.ts +45 -0
- package/types/preview/@ember/engine/instance.d.ts +24 -0
- package/types/preview/@ember/engine/tsconfig.json +3 -0
- package/types/preview/@ember/error/index.d.ts +6 -0
- package/types/preview/@ember/error/tsconfig.json +3 -0
- package/types/preview/@ember/helper/index.d.ts +49 -0
- package/types/preview/@ember/helper/tsconfig.json +3 -0
- package/types/preview/@ember/modifier/index.d.ts +33 -0
- package/types/preview/@ember/modifier/tsconfig.json +3 -0
- package/types/preview/@ember/object/-private/action-handler.d.ts +31 -0
- package/types/preview/@ember/object/-private/types.d.ts +63 -0
- package/types/preview/@ember/object/compat.d.ts +9 -0
- package/types/preview/@ember/object/computed.d.ts +263 -0
- package/types/preview/@ember/object/core.d.ts +89 -0
- package/types/preview/@ember/object/evented.d.ts +45 -0
- package/types/preview/@ember/object/events.d.ts +47 -0
- package/types/preview/@ember/object/index.d.ts +126 -0
- package/types/preview/@ember/object/internals.d.ts +17 -0
- package/types/preview/@ember/object/mixin.d.ts +19 -0
- package/types/preview/@ember/object/observable.d.ts +89 -0
- package/types/preview/@ember/object/observers.d.ts +34 -0
- package/types/preview/@ember/object/promise-proxy-mixin.d.ts +37 -0
- package/types/preview/@ember/object/proxy.d.ts +27 -0
- package/types/preview/@ember/object/tsconfig.json +3 -0
- package/types/preview/@ember/owner/index.d.ts +102 -0
- package/types/preview/@ember/owner/tsconfig.json +3 -0
- package/types/preview/@ember/polyfills/index.d.ts +23 -0
- package/types/preview/@ember/polyfills/tsconfig.json +3 -0
- package/types/preview/@ember/polyfills/types.d.ts +6 -0
- package/types/preview/@ember/routing/-private/router-dsl.d.ts +20 -0
- package/types/preview/@ember/routing/auto-location.d.ts +8 -0
- package/types/preview/@ember/routing/hash-location.d.ts +10 -0
- package/types/preview/@ember/routing/history-location.d.ts +9 -0
- package/types/preview/@ember/routing/index.d.ts +20 -0
- package/types/preview/@ember/routing/none-location.d.ts +11 -0
- package/types/preview/@ember/routing/route-info.d.ts +74 -0
- package/types/preview/@ember/routing/route.d.ts +533 -0
- package/types/preview/@ember/routing/router-service.d.ts +351 -0
- package/types/preview/@ember/routing/router.d.ts +49 -0
- package/types/preview/@ember/routing/transition.d.ts +126 -0
- package/types/preview/@ember/routing/tsconfig.json +3 -0
- package/types/preview/@ember/routing/types.d.ts +15 -0
- package/types/preview/@ember/runloop/-private/backburner.d.ts +43 -0
- package/types/preview/@ember/runloop/-private/types.d.ts +9 -0
- package/types/preview/@ember/runloop/index.d.ts +175 -0
- package/types/preview/@ember/runloop/tsconfig.json +3 -0
- package/types/preview/@ember/runloop/types.d.ts +5 -0
- package/types/preview/@ember/service/index.d.ts +25 -0
- package/types/preview/@ember/service/tsconfig.json +3 -0
- package/types/preview/@ember/string/index.d.ts +9 -0
- package/types/preview/@ember/string/tsconfig.json +3 -0
- package/types/preview/@ember/template/-private/handlebars.d.ts +7 -0
- package/types/preview/@ember/template/index.d.ts +5 -0
- package/types/preview/@ember/template/tsconfig.json +3 -0
- package/types/preview/@ember/test/adapter.d.ts +22 -0
- package/types/preview/@ember/test/index.d.ts +49 -0
- package/types/preview/@ember/test/tsconfig.json +3 -0
- package/types/preview/@ember/utils/-private/types.d.ts +39 -0
- package/types/preview/@ember/utils/index.d.ts +42 -0
- package/types/preview/@ember/utils/tsconfig.json +3 -0
- package/types/preview/ember/-private/type-utils.d.ts +54 -0
- package/types/preview/ember/index.d.ts +381 -0
- package/types/preview/ember/tsconfig.json +3 -0
- package/types/preview/index.d.ts +120 -0
- package/types/preview/tsconfig.json +6 -0
- package/blueprints/helper/mu-files/__root__/__collection__/__name__.js +0 -7
- package/blueprints-js/helper/mu-files/__root__/__collection__/__name__.js +0 -7
- package/dist/packages/@ember/-internals/extension-support/index.js +0 -2
- package/dist/packages/@ember/-internals/extension-support/lib/container_debug_adapter.js +0 -96
- package/dist/packages/@ember/-internals/extension-support/lib/data_adapter.js +0 -576
- package/dist/packages/@ember/-internals/routing/lib/ext/controller.js +0 -224
- package/dist/packages/@ember/-internals/routing/lib/location/api.js +0 -104
- package/dist/packages/@ember/-internals/routing/lib/location/auto_location.js +0 -250
- package/dist/packages/@ember/-internals/routing/lib/location/hash_location.js +0 -170
- package/dist/packages/@ember/-internals/routing/lib/location/history_location.js +0 -290
- package/dist/packages/@ember/-internals/routing/lib/location/none_location.js +0 -124
- package/dist/packages/@ember/-internals/routing/lib/services/router.js +0 -506
- package/dist/packages/@ember/-internals/routing/lib/system/route.js +0 -1696
- package/dist/packages/@ember/-internals/routing/lib/system/router.js +0 -1662
- package/dist/packages/@ember/-internals/runtime/lib/mixins/array.js +0 -1501
- package/dist/packages/@ember/-internals/runtime/lib/mixins/enumerable.js +0 -3
- package/dist/packages/@ember/-internals/runtime/lib/mixins/evented.js +0 -91
- package/dist/packages/@ember/-internals/runtime/lib/mixins/mutable_enumerable.js +0 -4
- package/dist/packages/@ember/-internals/runtime/lib/mixins/observable.js +0 -339
- package/dist/packages/@ember/-internals/runtime/lib/mixins/promise_proxy.js +0 -149
- package/dist/packages/@ember/-internals/runtime/lib/system/array_proxy.js +0 -305
- package/dist/packages/@ember/-internals/runtime/lib/system/core_object.js +0 -730
- package/dist/packages/@ember/-internals/runtime/lib/system/namespace.js +0 -69
- package/dist/packages/@ember/-internals/runtime/lib/system/object_proxy.js +0 -7
- package/dist/packages/@ember/application/lib/application.js +0 -870
- package/dist/packages/@ember/controller/lib/controller_mixin.js +0 -42
- package/dist/packages/@ember/runloop/type-tests.ts/begin-end.test.js +0 -5
- package/dist/packages/@ember/runloop/type-tests.ts/bind.test.js +0 -59
- package/dist/packages/@ember/runloop/type-tests.ts/cancel.test.js +0 -5
- package/dist/packages/@ember/runloop/type-tests.ts/debounce.test.js +0 -77
- package/dist/packages/@ember/runloop/type-tests.ts/join.test.js +0 -38
- package/dist/packages/@ember/runloop/type-tests.ts/later.test.js +0 -38
- package/dist/packages/@ember/runloop/type-tests.ts/next.test.js +0 -38
- package/dist/packages/@ember/runloop/type-tests.ts/once.test.js +0 -38
- package/dist/packages/@ember/runloop/type-tests.ts/run.test.js +0 -38
- package/dist/packages/@ember/runloop/type-tests.ts/schedule-once.test.js +0 -39
- package/dist/packages/@ember/runloop/type-tests.ts/schedule.test.js +0 -39
- package/dist/packages/@ember/runloop/type-tests.ts/throttle.test.js +0 -77
|
@@ -1,305 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
@module @ember/array
|
|
3
|
-
*/
|
|
4
|
-
import { get, objectAt, alias, PROPERTY_DID_CHANGE, addArrayObserver, removeArrayObserver, replace, arrayContentDidChange, arrayContentWillChange, tagForProperty } from '@ember/-internals/metal';
|
|
5
|
-
import { isObject } from '@ember/-internals/utils';
|
|
6
|
-
import EmberObject from './object';
|
|
7
|
-
import EmberArray, { MutableArray } from '../mixins/array';
|
|
8
|
-
import { assert } from '@ember/debug';
|
|
9
|
-
import { setCustomTagFor } from '@glimmer/manager';
|
|
10
|
-
import { combine, consumeTag, validateTag, valueForTag, tagFor } from '@glimmer/validator';
|
|
11
|
-
|
|
12
|
-
function isMutable(obj) {
|
|
13
|
-
return Array.isArray(obj) || typeof obj.replace === 'function';
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
const ARRAY_OBSERVER_MAPPING = {
|
|
17
|
-
willChange: '_arrangedContentArrayWillChange',
|
|
18
|
-
didChange: '_arrangedContentArrayDidChange'
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
function customTagForArrayProxy(proxy, key) {
|
|
22
|
-
assert('[BUG] Expected a proxy', proxy instanceof ArrayProxy);
|
|
23
|
-
|
|
24
|
-
if (key === '[]') {
|
|
25
|
-
proxy._revalidate();
|
|
26
|
-
|
|
27
|
-
return proxy._arrTag;
|
|
28
|
-
} else if (key === 'length') {
|
|
29
|
-
proxy._revalidate();
|
|
30
|
-
|
|
31
|
-
return proxy._lengthTag;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
return tagFor(proxy, key);
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
class ArrayProxy extends EmberObject {
|
|
38
|
-
constructor() {
|
|
39
|
-
super(...arguments);
|
|
40
|
-
/*
|
|
41
|
-
`this._objectsDirtyIndex` determines which indexes in the `this._objects`
|
|
42
|
-
cache are dirty.
|
|
43
|
-
If `this._objectsDirtyIndex === -1` then no indexes are dirty.
|
|
44
|
-
Otherwise, an index `i` is dirty if `i >= this._objectsDirtyIndex`.
|
|
45
|
-
Calling `objectAt` with a dirty index will cause the `this._objects`
|
|
46
|
-
cache to be recomputed.
|
|
47
|
-
*/
|
|
48
|
-
|
|
49
|
-
/** @internal */
|
|
50
|
-
|
|
51
|
-
this._objectsDirtyIndex = 0;
|
|
52
|
-
/** @internal */
|
|
53
|
-
|
|
54
|
-
this._objects = null;
|
|
55
|
-
/** @internal */
|
|
56
|
-
|
|
57
|
-
this._lengthDirty = true;
|
|
58
|
-
/** @internal */
|
|
59
|
-
|
|
60
|
-
this._length = 0;
|
|
61
|
-
/** @internal */
|
|
62
|
-
|
|
63
|
-
this._arrangedContent = null;
|
|
64
|
-
/** @internal */
|
|
65
|
-
|
|
66
|
-
this._arrangedContentIsUpdating = false;
|
|
67
|
-
/** @internal */
|
|
68
|
-
|
|
69
|
-
this._arrangedContentTag = null;
|
|
70
|
-
/** @internal */
|
|
71
|
-
|
|
72
|
-
this._arrangedContentRevision = null;
|
|
73
|
-
/** @internal */
|
|
74
|
-
|
|
75
|
-
this._lengthTag = null;
|
|
76
|
-
/** @internal */
|
|
77
|
-
|
|
78
|
-
this._arrTag = null;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
init(props) {
|
|
82
|
-
super.init(props);
|
|
83
|
-
setCustomTagFor(this, customTagForArrayProxy);
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
[PROPERTY_DID_CHANGE]() {
|
|
87
|
-
this._revalidate();
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
willDestroy() {
|
|
91
|
-
this._removeArrangedContentArrayObserver();
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
Should actually retrieve the object at the specified index from the
|
|
95
|
-
content. You can override this method in subclasses to transform the
|
|
96
|
-
content item to something new.
|
|
97
|
-
This method will only be called if content is non-`null`.
|
|
98
|
-
@method objectAtContent
|
|
99
|
-
@param {Number} idx The index to retrieve.
|
|
100
|
-
@return {Object} the value or undefined if none found
|
|
101
|
-
@public
|
|
102
|
-
*/
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
objectAtContent(idx) {
|
|
106
|
-
let arrangedContent = get(this, 'arrangedContent');
|
|
107
|
-
assert('[BUG] Called objectAtContent without content', arrangedContent);
|
|
108
|
-
return objectAt(arrangedContent, idx);
|
|
109
|
-
} // See additional docs for `replace` from `MutableArray`:
|
|
110
|
-
// https://api.emberjs.com/ember/release/classes/MutableArray/methods/replace?anchor=replace
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
replace(idx, amt, objects) {
|
|
114
|
-
assert('Mutating an arranged ArrayProxy is not allowed', get(this, 'arrangedContent') === get(this, 'content'));
|
|
115
|
-
this.replaceContent(idx, amt, objects);
|
|
116
|
-
}
|
|
117
|
-
/**
|
|
118
|
-
Should actually replace the specified objects on the content array.
|
|
119
|
-
You can override this method in subclasses to transform the content item
|
|
120
|
-
into something new.
|
|
121
|
-
This method will only be called if content is non-`null`.
|
|
122
|
-
@method replaceContent
|
|
123
|
-
@param {Number} idx The starting index
|
|
124
|
-
@param {Number} amt The number of items to remove from the content.
|
|
125
|
-
@param {Array} objects Optional array of objects to insert.
|
|
126
|
-
@return {void}
|
|
127
|
-
@public
|
|
128
|
-
*/
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
replaceContent(idx, amt, objects) {
|
|
132
|
-
let content = get(this, 'content');
|
|
133
|
-
assert('[BUG] Called replaceContent without content', content);
|
|
134
|
-
assert('Mutating a non-mutable array is not allowed', isMutable(content));
|
|
135
|
-
replace(content, idx, amt, objects);
|
|
136
|
-
} // Overriding objectAt is not supported.
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
objectAt(idx) {
|
|
140
|
-
this._revalidate();
|
|
141
|
-
|
|
142
|
-
if (this._objects === null) {
|
|
143
|
-
this._objects = [];
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
if (this._objectsDirtyIndex !== -1 && idx >= this._objectsDirtyIndex) {
|
|
147
|
-
let arrangedContent = get(this, 'arrangedContent');
|
|
148
|
-
|
|
149
|
-
if (arrangedContent) {
|
|
150
|
-
let length = this._objects.length = get(arrangedContent, 'length');
|
|
151
|
-
|
|
152
|
-
for (let i = this._objectsDirtyIndex; i < length; i++) {
|
|
153
|
-
// SAFETY: This is expected to only ever return an instance of T. In other words, there should
|
|
154
|
-
// be no gaps in the array. Unfortunately, we can't actually assert for it since T could include
|
|
155
|
-
// any types, including null or undefined.
|
|
156
|
-
this._objects[i] = this.objectAtContent(i);
|
|
157
|
-
}
|
|
158
|
-
} else {
|
|
159
|
-
this._objects.length = 0;
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
this._objectsDirtyIndex = -1;
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
return this._objects[idx];
|
|
166
|
-
} // Overriding length is not supported.
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
get length() {
|
|
170
|
-
this._revalidate();
|
|
171
|
-
|
|
172
|
-
if (this._lengthDirty) {
|
|
173
|
-
let arrangedContent = get(this, 'arrangedContent');
|
|
174
|
-
this._length = arrangedContent ? get(arrangedContent, 'length') : 0;
|
|
175
|
-
this._lengthDirty = false;
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
assert('[BUG] _lengthTag is not set', this._lengthTag);
|
|
179
|
-
consumeTag(this._lengthTag);
|
|
180
|
-
return this._length;
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
set length(value) {
|
|
184
|
-
let length = this.length;
|
|
185
|
-
let removedCount = length - value;
|
|
186
|
-
let added;
|
|
187
|
-
|
|
188
|
-
if (removedCount === 0) {
|
|
189
|
-
return;
|
|
190
|
-
} else if (removedCount < 0) {
|
|
191
|
-
added = new Array(-removedCount);
|
|
192
|
-
removedCount = 0;
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
let content = get(this, 'content');
|
|
196
|
-
|
|
197
|
-
if (content) {
|
|
198
|
-
assert('Mutating a non-mutable array is not allowed', isMutable(content));
|
|
199
|
-
replace(content, value, removedCount, added);
|
|
200
|
-
|
|
201
|
-
this._invalidate();
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
_updateArrangedContentArray(arrangedContent) {
|
|
206
|
-
let oldLength = this._objects === null ? 0 : this._objects.length;
|
|
207
|
-
let newLength = arrangedContent ? get(arrangedContent, 'length') : 0;
|
|
208
|
-
|
|
209
|
-
this._removeArrangedContentArrayObserver();
|
|
210
|
-
|
|
211
|
-
arrayContentWillChange(this, 0, oldLength, newLength);
|
|
212
|
-
|
|
213
|
-
this._invalidate();
|
|
214
|
-
|
|
215
|
-
arrayContentDidChange(this, 0, oldLength, newLength, false);
|
|
216
|
-
|
|
217
|
-
this._addArrangedContentArrayObserver(arrangedContent);
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
_addArrangedContentArrayObserver(arrangedContent) {
|
|
221
|
-
if (arrangedContent && !arrangedContent.isDestroyed) {
|
|
222
|
-
// @ts-expect-error This check is still good for ensuring correctness
|
|
223
|
-
assert("Can't set ArrayProxy's content to itself", arrangedContent !== this);
|
|
224
|
-
assert(`ArrayProxy expects a native Array, EmberArray, or ArrayProxy, but you passed ${typeof arrangedContent}`, function (arr) {
|
|
225
|
-
return Array.isArray(arr) || EmberArray.detect(arr);
|
|
226
|
-
}(arrangedContent));
|
|
227
|
-
assert('ArrayProxy expected its contents to not be destroyed', !arrangedContent.isDestroyed);
|
|
228
|
-
addArrayObserver(arrangedContent, this, ARRAY_OBSERVER_MAPPING);
|
|
229
|
-
this._arrangedContent = arrangedContent;
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
_removeArrangedContentArrayObserver() {
|
|
234
|
-
if (this._arrangedContent) {
|
|
235
|
-
removeArrayObserver(this._arrangedContent, this, ARRAY_OBSERVER_MAPPING);
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
_arrangedContentArrayWillChange() {}
|
|
240
|
-
|
|
241
|
-
_arrangedContentArrayDidChange(_proxy, idx, removedCnt, addedCnt) {
|
|
242
|
-
arrayContentWillChange(this, idx, removedCnt, addedCnt);
|
|
243
|
-
let dirtyIndex = idx;
|
|
244
|
-
|
|
245
|
-
if (dirtyIndex < 0) {
|
|
246
|
-
let length = get(this._arrangedContent, 'length');
|
|
247
|
-
dirtyIndex += length + removedCnt - addedCnt;
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
if (this._objectsDirtyIndex === -1 || this._objectsDirtyIndex > dirtyIndex) {
|
|
251
|
-
this._objectsDirtyIndex = dirtyIndex;
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
this._lengthDirty = true;
|
|
255
|
-
arrayContentDidChange(this, idx, removedCnt, addedCnt, false);
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
_invalidate() {
|
|
259
|
-
this._objectsDirtyIndex = 0;
|
|
260
|
-
this._lengthDirty = true;
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
_revalidate() {
|
|
264
|
-
if (this._arrangedContentIsUpdating === true) return;
|
|
265
|
-
|
|
266
|
-
if (this._arrangedContentTag === null || !validateTag(this._arrangedContentTag, this._arrangedContentRevision)) {
|
|
267
|
-
let arrangedContent = this.get('arrangedContent');
|
|
268
|
-
|
|
269
|
-
if (this._arrangedContentTag === null) {
|
|
270
|
-
// This is the first time the proxy has been setup, only add the observer
|
|
271
|
-
// don't trigger any events
|
|
272
|
-
this._addArrangedContentArrayObserver(arrangedContent);
|
|
273
|
-
} else {
|
|
274
|
-
this._arrangedContentIsUpdating = true;
|
|
275
|
-
|
|
276
|
-
this._updateArrangedContentArray(arrangedContent);
|
|
277
|
-
|
|
278
|
-
this._arrangedContentIsUpdating = false;
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
let arrangedContentTag = this._arrangedContentTag = tagFor(this, 'arrangedContent');
|
|
282
|
-
this._arrangedContentRevision = valueForTag(this._arrangedContentTag);
|
|
283
|
-
|
|
284
|
-
if (isObject(arrangedContent)) {
|
|
285
|
-
this._lengthTag = combine([arrangedContentTag, tagForProperty(arrangedContent, 'length')]);
|
|
286
|
-
this._arrTag = combine([arrangedContentTag, tagForProperty(arrangedContent, '[]')]);
|
|
287
|
-
} else {
|
|
288
|
-
this._lengthTag = this._arrTag = arrangedContentTag;
|
|
289
|
-
}
|
|
290
|
-
}
|
|
291
|
-
}
|
|
292
|
-
|
|
293
|
-
}
|
|
294
|
-
|
|
295
|
-
ArrayProxy.reopen(MutableArray, {
|
|
296
|
-
/**
|
|
297
|
-
The array that the proxy pretends to be. In the default `ArrayProxy`
|
|
298
|
-
implementation, this and `content` are the same. Subclasses of `ArrayProxy`
|
|
299
|
-
can override this property to provide things like sorting and filtering.
|
|
300
|
-
@property arrangedContent
|
|
301
|
-
@public
|
|
302
|
-
*/
|
|
303
|
-
arrangedContent: alias('content')
|
|
304
|
-
});
|
|
305
|
-
export default ArrayProxy;
|