Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BUGFIX release] Update Glimmer VM to 0.77, fix dynamic helpers/modifiers #19416

Merged
merged 1 commit into from
Feb 18, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 13 additions & 13 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@
"@babel/plugin-transform-block-scoping": "^7.8.3",
"@babel/plugin-transform-object-assign": "^7.8.3",
"@ember/edition-utils": "^1.2.0",
"@glimmer/vm-babel-plugins": "0.76.0",
"@glimmer/vm-babel-plugins": "0.77.1",
"babel-plugin-debug-macros": "^0.3.3",
"babel-plugin-filter-imports": "^4.0.0",
"broccoli-concat": "^4.2.4",
Expand All @@ -75,19 +75,19 @@
},
"devDependencies": {
"@babel/preset-env": "^7.9.5",
"@glimmer/compiler": "0.76.0",
"@glimmer/compiler": "0.77.1",
"@glimmer/env": "^0.1.7",
"@glimmer/global-context": "0.76.0",
"@glimmer/interfaces": "0.76.0",
"@glimmer/manager": "0.76.0",
"@glimmer/destroyable": "0.76.0",
"@glimmer/owner": "0.76.0",
"@glimmer/node": "0.76.0",
"@glimmer/opcode-compiler": "0.76.0",
"@glimmer/program": "0.76.0",
"@glimmer/reference": "0.76.0",
"@glimmer/runtime": "0.76.0",
"@glimmer/validator": "0.76.0",
"@glimmer/global-context": "0.77.1",
"@glimmer/interfaces": "0.77.1",
"@glimmer/manager": "0.77.1",
"@glimmer/destroyable": "0.77.1",
"@glimmer/owner": "0.77.1",
"@glimmer/node": "0.77.1",
"@glimmer/opcode-compiler": "0.77.1",
"@glimmer/program": "0.77.1",
"@glimmer/reference": "0.77.1",
"@glimmer/runtime": "0.77.1",
"@glimmer/validator": "0.77.1",
"@simple-dom/document": "^1.4.0",
"@types/qunit": "^2.9.1",
"@types/rsvp": "^4.0.3",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
import { assert } from '@ember/debug';
import { DEBUG } from '@glimmer/env';
import { Helper, VMArguments } from '@glimmer/interfaces';
import { CapturedArguments, Helper } from '@glimmer/interfaces';
import { createComputeRef, valueForRef } from '@glimmer/reference';
import { internalHelper } from './internal-helper';

let helper: Helper;

if (DEBUG) {
helper = (args: VMArguments) => {
let inner = args.positional.at(0);
helper = (args: CapturedArguments) => {
let inner = args.positional[0];

return createComputeRef(() => {
let value = valueForRef(inner);
Expand All @@ -22,7 +22,7 @@ if (DEBUG) {
});
};
} else {
helper = (args: VMArguments) => args.positional.at(0);
helper = (args: CapturedArguments) => args.positional[0];
}

export default internalHelper(helper);
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
import { dasherize } from '@ember/string';
import { VMArguments } from '@glimmer/interfaces';
import { CapturedArguments } from '@glimmer/interfaces';
import { createComputeRef, valueForRef } from '@glimmer/reference';
import { internalHelper } from './internal-helper';

export default internalHelper((args: VMArguments) => {
let positional = args.positional.capture();

export default internalHelper(({ positional }: CapturedArguments) => {
return createComputeRef(() => {
let classNameParts = (valueForRef(positional[0]) as string).split('.');
let className = classNameParts[classNameParts.length - 1];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
*/
import { tagForProperty } from '@ember/-internals/metal';
import { isObject } from '@ember/-internals/utils';
import { VMArguments } from '@glimmer/interfaces';
import { CapturedArguments } from '@glimmer/interfaces';
import { createComputeRef, valueForRef } from '@glimmer/reference';
import { consumeTag } from '@glimmer/validator';
import { internalHelper } from './internal-helper';
Expand All @@ -13,8 +13,8 @@ import { internalHelper } from './internal-helper';
updates to `{{each}}` when it changes. It is put into place by a template
transform at build time, similar to the (-each-in) helper
*/
export default internalHelper((args: VMArguments) => {
let inner = args.positional.at(0);
export default internalHelper(({ positional }: CapturedArguments) => {
let inner = positional[0];

return createComputeRef(() => {
let iterable = valueForRef(inner);
Expand Down
13 changes: 5 additions & 8 deletions packages/@ember/-internals/glimmer/lib/helpers/action.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import { assert, deprecate } from '@ember/debug';
import { flaggedInstrument } from '@ember/instrumentation';
import { join } from '@ember/runloop';
import { DEBUG } from '@glimmer/env';
import { VMArguments } from '@glimmer/interfaces';
import { CapturedArguments } from '@glimmer/interfaces';
import {
createUnboundRef,
isInvokableRef,
Expand Down Expand Up @@ -285,21 +285,18 @@ export const INVOKE: unique symbol = symbol('INVOKE') as any;
@public
*/
export default internalHelper(
(args: VMArguments): Reference<Function> => {
(args: CapturedArguments): Reference<Function> => {
let { named, positional } = args;

let capturedArgs = positional.capture();

// The first two argument slots are reserved.
// pos[0] is the context (or `this`)
// pos[1] is the action name or function
// Anything else is an action argument.
let [context, action, ...restArgs] = capturedArgs;
let [context, action, ...restArgs] = positional;

let debugKey: string = action.debugLabel!;

let target = named.has('target') ? named.get('target') : context;
let processArgs = makeArgsProcessor(named.has('value') && named.get('value'), restArgs);
let target = 'target' in named ? named.target : context;
let processArgs = makeArgsProcessor('value' in named && named.value, restArgs);

let fn: Function;

Expand Down
6 changes: 3 additions & 3 deletions packages/@ember/-internals/glimmer/lib/helpers/each-in.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import { tagForObject } from '@ember/-internals/metal';
import { _contentFor } from '@ember/-internals/runtime';
import { isProxy } from '@ember/-internals/utils';
import { VMArguments } from '@glimmer/interfaces';
import { CapturedArguments } from '@glimmer/interfaces';
import { createComputeRef, valueForRef } from '@glimmer/reference';
import { consumeTag } from '@glimmer/validator';
import { internalHelper } from './internal-helper';
Expand Down Expand Up @@ -159,8 +159,8 @@ export class EachInWrapper {
constructor(public inner: unknown) {}
}

export default internalHelper((args: VMArguments) => {
let inner = args.positional.at(0);
export default internalHelper(({ positional }: CapturedArguments) => {
let inner = positional[0];

return createComputeRef(() => {
let iterable = valueForRef(inner);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { Owner } from '@ember/-internals/owner';
import { Helper, HelperDefinitionState } from '@glimmer/interfaces';
import { setInternalHelperManager } from '@glimmer/manager';

export function internalHelper(helper: Helper): HelperDefinitionState {
export function internalHelper(helper: Helper<Owner>): HelperDefinitionState {
return setInternalHelperManager(helper, {});
}
6 changes: 3 additions & 3 deletions packages/@ember/-internals/glimmer/lib/helpers/mut.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
@module ember
*/
import { assert } from '@ember/debug';
import { VMArguments } from '@glimmer/interfaces';
import { CapturedArguments } from '@glimmer/interfaces';
import { createInvokableRef, isUpdatableRef } from '@glimmer/reference';
import { internalHelper } from './internal-helper';

Expand Down Expand Up @@ -80,8 +80,8 @@ import { internalHelper } from './internal-helper';
@public
*/

export default internalHelper((args: VMArguments) => {
let ref = args.positional.at(0);
export default internalHelper(({ positional }: CapturedArguments) => {
let ref = positional[0];

// TODO: Improve this error message. This covers at least two distinct
// cases:
Expand Down
6 changes: 2 additions & 4 deletions packages/@ember/-internals/glimmer/lib/helpers/query-param.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import { QueryParams } from '@ember/-internals/routing';
import { assert, deprecate } from '@ember/debug';
import { assign } from '@ember/polyfills';
import { VMArguments } from '@glimmer/interfaces';
import { CapturedArguments } from '@glimmer/interfaces';
import { createComputeRef } from '@glimmer/reference';
import { reifyNamed } from '@glimmer/runtime';
import { internalHelper } from './internal-helper';
Expand All @@ -30,9 +30,7 @@ import { internalHelper } from './internal-helper';
@return {Object} A `QueryParams` object for `{{link-to}}`
@public
*/
export default internalHelper((args: VMArguments) => {
let { positional, named } = args.capture();

export default internalHelper(({ positional, named }: CapturedArguments) => {
return createComputeRef(() => {
assert(
"The `query-params` helper only accepts named arguments, e.g. (query-params queryParamPropertyName='foo') as opposed to (query-params 'foo')",
Expand Down
6 changes: 3 additions & 3 deletions packages/@ember/-internals/glimmer/lib/helpers/readonly.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/**
@module ember
*/
import { VMArguments } from '@glimmer/interfaces';
import { CapturedArguments } from '@glimmer/interfaces';
import { createReadOnlyRef } from '@glimmer/reference';
import { internalHelper } from './internal-helper';

Expand Down Expand Up @@ -120,6 +120,6 @@ import { internalHelper } from './internal-helper';
@for Ember.Templates.helpers
@private
*/
export default internalHelper((args: VMArguments) => {
return createReadOnlyRef(args.positional.at(0));
export default internalHelper(({ positional }: CapturedArguments) => {
return createReadOnlyRef(positional[0]);
});
8 changes: 4 additions & 4 deletions packages/@ember/-internals/glimmer/lib/helpers/unbound.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
*/

import { assert } from '@ember/debug';
import { VMArguments } from '@glimmer/interfaces';
import { CapturedArguments } from '@glimmer/interfaces';
import { createUnboundRef, valueForRef } from '@glimmer/reference';
import { internalHelper } from './internal-helper';

Expand Down Expand Up @@ -35,11 +35,11 @@ import { internalHelper } from './internal-helper';
@public
*/

export default internalHelper((args: VMArguments) => {
export default internalHelper(({ positional, named }: CapturedArguments) => {
assert(
'unbound helper cannot be called with multiple params or hash params',
args.positional.length === 1 && args.named.length === 0
positional.length === 1 && Object.keys(named).length === 0
);

return createUnboundRef(valueForRef(args.positional.at(0)), '(resurt of an `unbound` helper)');
return createUnboundRef(valueForRef(positional[0]), '(resurt of an `unbound` helper)');
});
23 changes: 7 additions & 16 deletions packages/@ember/-internals/glimmer/lib/modifiers/action.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,10 @@ import { join } from '@ember/runloop';
import { registerDestructor } from '@glimmer/destroyable';
import { DEBUG } from '@glimmer/env';
import {
CapturedArguments,
CapturedNamedArguments,
CapturedPositionalArguments,
DynamicScope,
GlimmerTreeChanges,
InternalModifierManager,
VMArguments,
} from '@glimmer/interfaces';
import { setInternalModifierManager } from '@glimmer/manager';
import { isInvokableRef, updateRef, valueForRef } from '@glimmer/reference';
Expand Down Expand Up @@ -73,7 +71,6 @@ export class ActionState {
public namedArgs: CapturedNamedArguments;
public positional: CapturedPositionalArguments;
public implicitTarget: any;
public dom: GlimmerTreeChanges;
public eventName: any;
public tag = createUpdatableTag();

Expand All @@ -82,15 +79,13 @@ export class ActionState {
actionId: number,
actionArgs: any[],
namedArgs: CapturedNamedArguments,
positionalArgs: CapturedPositionalArguments,
dom: GlimmerTreeChanges
positionalArgs: CapturedPositionalArguments
) {
this.element = element;
this.actionId = actionId;
this.actionArgs = actionArgs;
this.namedArgs = namedArgs;
this.positional = positionalArgs;
this.dom = dom;
this.eventName = this.getEventName();

registerDestructor(this, () => ActionHelper.unregisterAction(this));
Expand Down Expand Up @@ -208,12 +203,8 @@ class ActionModifierManager implements InternalModifierManager<ActionState, obje
_owner: Owner,
element: SimpleElement,
_state: object,
args: VMArguments,
_dynamicScope: DynamicScope,
dom: GlimmerTreeChanges
{ named, positional }: CapturedArguments
): ActionState {
let { named, positional } = args.capture();

let actionArgs: any[] = [];
// The first two arguments are (1) `this` and (2) the action name.
// Everything else is a param.
Expand All @@ -222,7 +213,7 @@ class ActionModifierManager implements InternalModifierManager<ActionState, obje
}

let actionId = uuid();
let actionState = new ActionState(element, actionId, actionArgs, named, positional, dom);
let actionState = new ActionState(element, actionId, actionArgs, named, positional);

deprecate(
`Using the \`{{action}}\` modifier with \`${actionState.eventName}\` events has been deprecated.`,
Expand All @@ -248,7 +239,7 @@ class ActionModifierManager implements InternalModifierManager<ActionState, obje
}

install(actionState: ActionState): void {
let { dom, element, actionId, positional } = actionState;
let { element, actionId, positional } = actionState;

let actionName;
let actionNameRef: any;
Expand Down Expand Up @@ -288,8 +279,8 @@ class ActionModifierManager implements InternalModifierManager<ActionState, obje

ActionHelper.registerAction(actionState);

dom.setAttribute(element, 'data-ember-action', '');
dom.setAttribute(element, `data-ember-action-${actionId}`, String(actionId));
element.setAttribute('data-ember-action', '');
element.setAttribute(`data-ember-action-${actionId}`, String(actionId));
}

update(actionState: ActionState): void {
Expand Down
5 changes: 2 additions & 3 deletions packages/@ember/-internals/glimmer/lib/modifiers/internal.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import {
CapturedArguments,
Destroyable,
InternalModifierManager as ModifierManager,
VMArguments,
} from '@glimmer/interfaces';
import { valueForRef } from '@glimmer/reference';
import { SimpleElement } from '@simple-dom/interface';
Expand Down Expand Up @@ -60,12 +59,12 @@ export class InternalModifierManager
owner: Owner,
element: SimpleElement,
_definition: unknown,
args: VMArguments
args: CapturedArguments
): InternalModifierState {
assert('element must be an HTMLElement', element instanceof HTMLElement);

let { ModifierClass } = this;
let instance = new ModifierClass(owner, element, args.capture());
let instance = new ModifierClass(owner, element, args);

registerDestructor(instance, destructor);

Expand Down
Loading