ember-source 5.6.0-alpha.2 → 5.6.0-alpha.4
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/build-metadata.json +3 -3
- package/dist/dependencies/@glimmer/debug.js +1533 -0
- package/dist/dependencies/@glimmer/destroyable.js +30 -59
- package/dist/dependencies/@glimmer/encoder.js +13 -24
- package/dist/dependencies/@glimmer/global-context.js +38 -41
- package/dist/dependencies/@glimmer/manager.js +144 -326
- package/dist/dependencies/@glimmer/node.js +14 -46
- package/dist/dependencies/@glimmer/opcode-compiler.js +1673 -2478
- package/dist/dependencies/@glimmer/owner.js +2 -5
- package/dist/dependencies/@glimmer/program.js +102 -185
- package/dist/dependencies/@glimmer/reference.js +58 -126
- package/dist/dependencies/@glimmer/runtime.js +4674 -5639
- package/dist/dependencies/@glimmer/util.js +340 -326
- package/dist/dependencies/@glimmer/validator.js +160 -217
- package/dist/dependencies/@glimmer/vm.js +174 -23
- package/dist/dependencies/@glimmer/wire-format.js +91 -34
- package/dist/dependencies/@simple-dom/document.js +1 -1
- package/dist/dependencies/backburner.js.js +1 -1
- package/dist/dependencies/router_js.js +15 -16
- package/dist/dependencies/rsvp.js +89 -88
- package/dist/ember-template-compiler.js +8574 -8350
- package/dist/ember-template-compiler.map +1 -1
- package/dist/ember-testing.js +107 -107
- package/dist/ember-testing.map +1 -1
- package/dist/ember.debug.js +11216 -9634
- package/dist/ember.debug.map +1 -1
- package/dist/header/license.js +1 -1
- package/dist/packages/@ember/-internals/glimmer/index.js +109 -80
- package/dist/packages/@ember/-internals/metal/index.js +5 -4
- package/dist/packages/@ember/-internals/utils/index.js +3 -4
- package/dist/packages/@ember/array/-internals.js +1 -2
- package/dist/packages/@ember/debug/lib/inspect.js +0 -1
- package/dist/packages/@ember/object/core.js +0 -1
- package/dist/packages/@ember/object/mixin.js +1 -2
- package/dist/packages/@ember/routing/route.js +23 -101
- package/dist/packages/@ember/routing/router.js +25 -84
- package/dist/packages/ember/version.js +1 -1
- package/dist/packages/ember-babel.js +13 -0
- package/docs/data.json +217 -242
- package/lib/index.js +1 -5
- package/package.json +26 -21
- package/types/stable/@ember/-internals/glimmer/index.d.ts +1 -1
- package/types/stable/@ember/-internals/glimmer/lib/component-managers/curly.d.ts +4 -4
- package/types/stable/@ember/-internals/glimmer/lib/component-managers/mount.d.ts +3 -3
- package/types/stable/@ember/-internals/glimmer/lib/component-managers/outlet.d.ts +5 -8
- package/types/stable/@ember/-internals/glimmer/lib/component-managers/root.d.ts +3 -3
- package/types/stable/@ember/-internals/glimmer/lib/renderer.d.ts +3 -3
- package/types/stable/@ember/-internals/glimmer/lib/resolver.d.ts +3 -3
- package/types/stable/@ember/-internals/glimmer/lib/syntax/utils.d.ts +3 -2
- package/types/stable/@ember/-internals/glimmer/lib/utils/iterator.d.ts +2 -2
- package/types/stable/@ember/-internals/glimmer/lib/utils/outlet.d.ts +39 -18
- package/types/stable/@ember/-internals/utility-types/index.d.ts +1 -0
- package/types/stable/@ember/-internals/views/lib/system/utils.d.ts +4 -3
- package/types/stable/@ember/routing/route.d.ts +6 -28
- package/dist/dependencies/@glimmer/low-level.js +0 -77
|
@@ -5,6 +5,7 @@ var __decorate = this && this.__decorate || function (decorators, target, key, d
|
|
|
5
5
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
6
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
7
|
};
|
|
8
|
+
var _a;
|
|
8
9
|
import { privatize as P } from '@ember/-internals/container';
|
|
9
10
|
import { addObserver, defineProperty, descriptorForProperty, flushAsyncObservers } from '@ember/-internals/metal';
|
|
10
11
|
import { getOwner } from '@ember/-internals/owner';
|
|
@@ -13,7 +14,7 @@ import EmberObject, { computed, get, set, getProperties, setProperties } from '@
|
|
|
13
14
|
import Evented from '@ember/object/evented';
|
|
14
15
|
import { A as emberA } from '@ember/array';
|
|
15
16
|
import { ActionHandler } from '@ember/-internals/runtime';
|
|
16
|
-
import {
|
|
17
|
+
import { typeOf } from '@ember/utils';
|
|
17
18
|
import { isProxy, lookupDescriptor } from '@ember/-internals/utils';
|
|
18
19
|
import Controller from '@ember/controller';
|
|
19
20
|
import { assert, deprecate, info, isTesting } from '@ember/debug';
|
|
@@ -28,8 +29,8 @@ import { calculateCacheKey, normalizeControllerQueryParams, prefixRouteNameArg,
|
|
|
28
29
|
function isStoreLike(store) {
|
|
29
30
|
return typeof store === 'object' && store !== null && typeof store.find === 'function';
|
|
30
31
|
}
|
|
31
|
-
export const ROUTE_CONNECTIONS = new WeakMap();
|
|
32
32
|
const RENDER = Symbol('render');
|
|
33
|
+
const RENDER_STATE = Symbol('render-state');
|
|
33
34
|
class Route extends EmberObject.extend(ActionHandler, Evented) {
|
|
34
35
|
constructor(owner) {
|
|
35
36
|
super(owner);
|
|
@@ -39,6 +40,7 @@ class Route extends EmberObject.extend(ActionHandler, Evented) {
|
|
|
39
40
|
// people subclassing `Route` that they should not use them.
|
|
40
41
|
/** @internal */
|
|
41
42
|
this.context = {};
|
|
43
|
+
this[_a] = undefined;
|
|
42
44
|
if (owner) {
|
|
43
45
|
let router = owner.lookup('router:main');
|
|
44
46
|
let bucketCache = owner.lookup(P`-bucket-cache:main`);
|
|
@@ -316,7 +318,7 @@ class Route extends EmberObject.extend(ActionHandler, Evented) {
|
|
|
316
318
|
@method enter
|
|
317
319
|
*/
|
|
318
320
|
enter(transition) {
|
|
319
|
-
|
|
321
|
+
this[RENDER_STATE] = undefined;
|
|
320
322
|
this.activate(transition);
|
|
321
323
|
this.trigger('activate', transition);
|
|
322
324
|
}
|
|
@@ -777,24 +779,12 @@ class Route extends EmberObject.extend(ActionHandler, Evented) {
|
|
|
777
779
|
return route?.currentModel;
|
|
778
780
|
}
|
|
779
781
|
/**
|
|
780
|
-
`this[RENDER]` is used to
|
|
781
|
-
|
|
782
|
-
@method this[RENDER]
|
|
783
|
-
@param {String} name the name of the template to render
|
|
784
|
-
@param {Object} [options] the options
|
|
785
|
-
@param {String} [options.into] the template to render into,
|
|
786
|
-
referenced by name. Defaults to the parent template
|
|
787
|
-
@param {String} [options.outlet] the outlet inside `options.into` to render into.
|
|
788
|
-
Defaults to 'main'
|
|
789
|
-
@param {String|Object} [options.controller] the controller to use for this template,
|
|
790
|
-
referenced by name or as a controller instance. Defaults to the Route's paired controller
|
|
791
|
-
@param {Object} [options.model] the model object to set on `options.controller`.
|
|
792
|
-
Defaults to the return value of the Route's model hook
|
|
782
|
+
`this[RENDER]` is used to set up the rendering option for the outlet state.
|
|
783
|
+
@method this[RENDER]
|
|
793
784
|
@private
|
|
794
785
|
*/
|
|
795
|
-
[
|
|
796
|
-
|
|
797
|
-
ROUTE_CONNECTIONS.get(this).push(renderOptions);
|
|
786
|
+
[(_a = RENDER_STATE, RENDER)]() {
|
|
787
|
+
this[RENDER_STATE] = buildRenderState(this);
|
|
798
788
|
once(this._router, '_setOutlets');
|
|
799
789
|
}
|
|
800
790
|
willDestroy() {
|
|
@@ -805,9 +795,8 @@ class Route extends EmberObject.extend(ActionHandler, Evented) {
|
|
|
805
795
|
@method teardownViews
|
|
806
796
|
*/
|
|
807
797
|
teardownViews() {
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
ROUTE_CONNECTIONS.set(this, []);
|
|
798
|
+
if (this[RENDER_STATE]) {
|
|
799
|
+
this[RENDER_STATE] = undefined;
|
|
811
800
|
once(this._router, '_setOutlets');
|
|
812
801
|
}
|
|
813
802
|
}
|
|
@@ -952,92 +941,25 @@ class Route extends EmberObject.extend(ActionHandler, Evented) {
|
|
|
952
941
|
Route.isRouteFactory = true;
|
|
953
942
|
__decorate([computed], Route.prototype, "_store", null);
|
|
954
943
|
__decorate([computed], Route.prototype, "_qp", null);
|
|
955
|
-
function
|
|
956
|
-
|
|
957
|
-
return routeInfo && routeInfo.route;
|
|
944
|
+
export function getRenderState(route) {
|
|
945
|
+
return route[RENDER_STATE];
|
|
958
946
|
}
|
|
959
|
-
function
|
|
960
|
-
if (!routeInfos) {
|
|
961
|
-
return;
|
|
962
|
-
}
|
|
963
|
-
let current;
|
|
964
|
-
for (let i = 0; i < routeInfos.length; i++) {
|
|
965
|
-
let routeInfo = routeInfos[i];
|
|
966
|
-
assert('has current routeInfo', routeInfo);
|
|
967
|
-
current = routeInfo.route;
|
|
968
|
-
if (current === route) {
|
|
969
|
-
return routeInfos[i + offset];
|
|
970
|
-
}
|
|
971
|
-
}
|
|
972
|
-
return;
|
|
973
|
-
}
|
|
974
|
-
function buildRenderOptions(route, nameOrOptions, options) {
|
|
975
|
-
let isDefaultRender = !nameOrOptions && !options;
|
|
976
|
-
let _name;
|
|
977
|
-
if (!isDefaultRender) {
|
|
978
|
-
if (typeof nameOrOptions === 'object' && !options) {
|
|
979
|
-
_name = route.templateName || route.routeName;
|
|
980
|
-
options = nameOrOptions;
|
|
981
|
-
} else {
|
|
982
|
-
assert('The name in the given arguments is undefined or empty string', !isEmpty(nameOrOptions));
|
|
983
|
-
// SAFETY: the check for `nameOrOptions` above should be validating this,
|
|
984
|
-
// and as of TS 5.1.0-dev.2023-0417 it is *not*. This cast can go away if
|
|
985
|
-
// TS validates it correctly *or* if we refactor this entire function to
|
|
986
|
-
// be less wildly dynamic in its argument handling.
|
|
987
|
-
_name = nameOrOptions;
|
|
988
|
-
}
|
|
989
|
-
}
|
|
990
|
-
assert('You passed undefined as the outlet name.', isDefaultRender || !(options && 'outlet' in options && options.outlet === undefined));
|
|
947
|
+
function buildRenderState(route) {
|
|
991
948
|
let owner = getOwner(route);
|
|
992
949
|
assert('Route is unexpectedly missing an owner', owner);
|
|
993
|
-
let name
|
|
994
|
-
let controller;
|
|
995
|
-
if (options) {
|
|
996
|
-
into = options.into && options.into.replace(/\//g, '.');
|
|
997
|
-
outlet = options.outlet;
|
|
998
|
-
controller = options.controller;
|
|
999
|
-
model = options.model;
|
|
1000
|
-
}
|
|
1001
|
-
outlet = outlet || 'main';
|
|
1002
|
-
if (isDefaultRender) {
|
|
1003
|
-
name = route.routeName;
|
|
1004
|
-
templateName = route.templateName || name;
|
|
1005
|
-
} else {
|
|
1006
|
-
name = _name.replace(/\//g, '.');
|
|
1007
|
-
templateName = name;
|
|
1008
|
-
}
|
|
1009
|
-
if (controller === undefined) {
|
|
1010
|
-
if (isDefaultRender) {
|
|
1011
|
-
controller = route.controllerName || owner.lookup(`controller:${name}`);
|
|
1012
|
-
} else {
|
|
1013
|
-
controller = owner.lookup(`controller:${name}`) || route.controllerName || route.routeName;
|
|
1014
|
-
}
|
|
1015
|
-
}
|
|
1016
|
-
if (typeof controller === 'string') {
|
|
1017
|
-
let controllerName = controller;
|
|
1018
|
-
controller = owner.lookup(`controller:${controllerName}`);
|
|
1019
|
-
assert(`You passed \`controller: '${controllerName}'\` into the \`render\` method, but no such controller could be found.`, isDefaultRender || controller !== undefined);
|
|
1020
|
-
}
|
|
950
|
+
let name = route.routeName;
|
|
951
|
+
let controller = owner.lookup(`controller:${route.controllerName || name}`);
|
|
1021
952
|
assert('Expected an instance of controller', controller instanceof Controller);
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
controller.set('model', model);
|
|
1026
|
-
}
|
|
1027
|
-
let template = owner.lookup(`template:${templateName}`);
|
|
1028
|
-
assert(`Could not find "${templateName}" template, view, or component.`, isDefaultRender || template !== undefined);
|
|
1029
|
-
let parent;
|
|
1030
|
-
if (into && (parent = parentRoute(route)) && into === parent.routeName) {
|
|
1031
|
-
into = undefined;
|
|
1032
|
-
}
|
|
1033
|
-
let renderOptions = {
|
|
953
|
+
let model = route.currentModel;
|
|
954
|
+
let template = owner.lookup(`template:${route.templateName || name}`);
|
|
955
|
+
let render = {
|
|
1034
956
|
owner,
|
|
1035
|
-
into,
|
|
1036
|
-
outlet,
|
|
957
|
+
into: undefined,
|
|
958
|
+
outlet: 'main',
|
|
1037
959
|
name,
|
|
1038
960
|
controller,
|
|
1039
961
|
model,
|
|
1040
|
-
template: template
|
|
962
|
+
template: template?.(owner) ?? route._topLevelViewTemplate(owner)
|
|
1041
963
|
};
|
|
1042
964
|
if (DEBUG) {
|
|
1043
965
|
let LOG_VIEW_LOOKUPS = get(route._router, 'namespace.LOG_VIEW_LOOKUPS');
|
|
@@ -1047,7 +969,7 @@ function buildRenderOptions(route, nameOrOptions, options) {
|
|
|
1047
969
|
});
|
|
1048
970
|
}
|
|
1049
971
|
}
|
|
1050
|
-
return
|
|
972
|
+
return render;
|
|
1051
973
|
}
|
|
1052
974
|
export function getFullQueryParams(router, state) {
|
|
1053
975
|
if (state.fullQueryParams) {
|
|
@@ -10,7 +10,7 @@ import Evented from '@ember/object/evented';
|
|
|
10
10
|
import { assert, info } from '@ember/debug';
|
|
11
11
|
import { cancel, once, run, scheduleOnce } from '@ember/runloop';
|
|
12
12
|
import { DEBUG } from '@glimmer/env';
|
|
13
|
-
import { defaultSerialize, getFullQueryParams,
|
|
13
|
+
import { defaultSerialize, getFullQueryParams, getRenderState, hasDefaultSerialize } from '@ember/routing/route';
|
|
14
14
|
import Router, { logAbort, STATE_SYMBOL } from 'router_js';
|
|
15
15
|
import EngineInstance from '@ember/engine/instance';
|
|
16
16
|
/**
|
|
@@ -400,35 +400,39 @@ class EmberRouter extends EmberObject.extend(Evented) {
|
|
|
400
400
|
if (!routeInfos) {
|
|
401
401
|
return;
|
|
402
402
|
}
|
|
403
|
-
let
|
|
404
|
-
let
|
|
403
|
+
let root = null;
|
|
404
|
+
let parent = null;
|
|
405
405
|
for (let routeInfo of routeInfos) {
|
|
406
406
|
let route = routeInfo.route;
|
|
407
|
-
let
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
let appended = appendLiveRoute(liveRoutes, defaultParentState, connections[j]);
|
|
414
|
-
liveRoutes = appended.liveRoutes;
|
|
415
|
-
let {
|
|
416
|
-
name,
|
|
417
|
-
outlet
|
|
418
|
-
} = appended.ownState.render;
|
|
419
|
-
if (name === route.routeName || outlet === 'main') {
|
|
420
|
-
ownState = appended.ownState;
|
|
407
|
+
let render = getRenderState(route);
|
|
408
|
+
if (render) {
|
|
409
|
+
let state = {
|
|
410
|
+
render,
|
|
411
|
+
outlets: {
|
|
412
|
+
main: undefined
|
|
421
413
|
}
|
|
414
|
+
};
|
|
415
|
+
if (parent) {
|
|
416
|
+
parent.outlets.main = state;
|
|
417
|
+
} else {
|
|
418
|
+
root = state;
|
|
422
419
|
}
|
|
420
|
+
parent = state;
|
|
421
|
+
} else {
|
|
422
|
+
// It used to be that we would create a stub entry and keep traversing,
|
|
423
|
+
// but I don't think that is necessary anymore – if a parent route did
|
|
424
|
+
// not render, then the child routes have nowhere to render into these
|
|
425
|
+
// days. That wasn't always the case since in the past any route can
|
|
426
|
+
// render into any other route's outlets.
|
|
427
|
+
break;
|
|
423
428
|
}
|
|
424
|
-
defaultParentState = ownState;
|
|
425
429
|
}
|
|
426
430
|
// when a transitionTo happens after the validation phase
|
|
427
431
|
// during the initial transition _setOutlets is called
|
|
428
432
|
// when no routes are active. However, it will get called
|
|
429
433
|
// again with the correct values during the next turn of
|
|
430
434
|
// the runloop
|
|
431
|
-
if (
|
|
435
|
+
if (root === null) {
|
|
432
436
|
return;
|
|
433
437
|
}
|
|
434
438
|
if (!this._toplevelView) {
|
|
@@ -451,7 +455,7 @@ class EmberRouter extends EmberObject.extend(Evented) {
|
|
|
451
455
|
template,
|
|
452
456
|
application
|
|
453
457
|
});
|
|
454
|
-
this._toplevelView.setOutletState(
|
|
458
|
+
this._toplevelView.setOutletState(root);
|
|
455
459
|
// TODO(SAFETY): At least one test runs without this set correctly. At a
|
|
456
460
|
// later time, update the test to configure this correctly. The test ID:
|
|
457
461
|
// `Router Service - non application test: RouterService#transitionTo with basic route`
|
|
@@ -465,7 +469,7 @@ class EmberRouter extends EmberObject.extend(Evented) {
|
|
|
465
469
|
instance.didCreateRootView(this._toplevelView);
|
|
466
470
|
}
|
|
467
471
|
} else {
|
|
468
|
-
this._toplevelView.setOutletState(
|
|
472
|
+
this._toplevelView.setOutletState(root);
|
|
469
473
|
}
|
|
470
474
|
}
|
|
471
475
|
handleURL(url) {
|
|
@@ -1282,69 +1286,6 @@ function forEachQueryParam(router, routeInfos, queryParams, callback) {
|
|
|
1282
1286
|
callback(key, value, qp);
|
|
1283
1287
|
}
|
|
1284
1288
|
}
|
|
1285
|
-
function findLiveRoute(liveRoutes, name) {
|
|
1286
|
-
if (!liveRoutes) {
|
|
1287
|
-
return;
|
|
1288
|
-
}
|
|
1289
|
-
let stack = [liveRoutes];
|
|
1290
|
-
while (stack.length > 0) {
|
|
1291
|
-
let test = stack.shift();
|
|
1292
|
-
if (test.render.name === name) {
|
|
1293
|
-
return test;
|
|
1294
|
-
}
|
|
1295
|
-
let outlets = test.outlets;
|
|
1296
|
-
for (let outletName in outlets) {
|
|
1297
|
-
stack.push(outlets[outletName]);
|
|
1298
|
-
}
|
|
1299
|
-
}
|
|
1300
|
-
return;
|
|
1301
|
-
}
|
|
1302
|
-
function appendLiveRoute(liveRoutes, defaultParentState, renderOptions) {
|
|
1303
|
-
let ownState = {
|
|
1304
|
-
render: renderOptions,
|
|
1305
|
-
outlets: Object.create(null),
|
|
1306
|
-
wasUsed: false
|
|
1307
|
-
};
|
|
1308
|
-
let target;
|
|
1309
|
-
if (renderOptions.into) {
|
|
1310
|
-
target = findLiveRoute(liveRoutes, renderOptions.into);
|
|
1311
|
-
} else {
|
|
1312
|
-
target = defaultParentState;
|
|
1313
|
-
}
|
|
1314
|
-
if (target) {
|
|
1315
|
-
set(target.outlets, renderOptions.outlet, ownState);
|
|
1316
|
-
} else {
|
|
1317
|
-
liveRoutes = ownState;
|
|
1318
|
-
}
|
|
1319
|
-
return {
|
|
1320
|
-
liveRoutes,
|
|
1321
|
-
ownState
|
|
1322
|
-
};
|
|
1323
|
-
}
|
|
1324
|
-
function representEmptyRoute(liveRoutes, defaultParentState, {
|
|
1325
|
-
routeName
|
|
1326
|
-
}) {
|
|
1327
|
-
// the route didn't render anything
|
|
1328
|
-
let alreadyAppended = findLiveRoute(liveRoutes, routeName);
|
|
1329
|
-
if (alreadyAppended) {
|
|
1330
|
-
// But some other route has already rendered our default
|
|
1331
|
-
// template, so that becomes the default target for any
|
|
1332
|
-
// children we may have.
|
|
1333
|
-
return alreadyAppended;
|
|
1334
|
-
} else {
|
|
1335
|
-
// Create an entry to represent our default template name,
|
|
1336
|
-
// just so other routes can target it and inherit its place
|
|
1337
|
-
// in the outlet hierarchy.
|
|
1338
|
-
defaultParentState.outlets['main'] = {
|
|
1339
|
-
render: {
|
|
1340
|
-
name: routeName,
|
|
1341
|
-
outlet: 'main'
|
|
1342
|
-
},
|
|
1343
|
-
outlets: {}
|
|
1344
|
-
};
|
|
1345
|
-
return defaultParentState;
|
|
1346
|
-
}
|
|
1347
|
-
}
|
|
1348
1289
|
EmberRouter.reopen({
|
|
1349
1290
|
didTransition: defaultDidTransition,
|
|
1350
1291
|
willTransition: defaultWillTransition,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export default "5.6.0-alpha.
|
|
1
|
+
export default "5.6.0-alpha.4";
|
|
@@ -9,6 +9,19 @@ const hasReflectConstruct = typeof Reflect === 'object' && typeof Reflect.constr
|
|
|
9
9
|
|
|
10
10
|
const nativeWrapperCache = new Map();
|
|
11
11
|
|
|
12
|
+
// Implementations:
|
|
13
|
+
// https://github.com/babel/babel/blob/436d78920883603668666210a4aacf524257bc3b/packages/babel-helpers/src/helpers.ts#L958
|
|
14
|
+
let privateFieldId = 0;
|
|
15
|
+
export function classPrivateFieldLooseKey(name) {
|
|
16
|
+
return '__private_' + privateFieldId++ + '_' + name;
|
|
17
|
+
}
|
|
18
|
+
export function classPrivateFieldLooseBase(receiver, privateKey) {
|
|
19
|
+
if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) {
|
|
20
|
+
throw new TypeError('attempted to use private field on non-instance');
|
|
21
|
+
}
|
|
22
|
+
return receiver;
|
|
23
|
+
}
|
|
24
|
+
|
|
12
25
|
// Super minimal version of Babel's wrapNativeSuper. We only use this for
|
|
13
26
|
// extending Function, for ComputedDecoratorImpl and AliasDecoratorImpl. We know
|
|
14
27
|
// we will never directly create an instance of these classes so no need to
|