From 33b92276c6603cd39568e1ae04e731e3df631758 Mon Sep 17 00:00:00 2001 From: Godfrey Chan Date: Tue, 20 Apr 2021 01:34:20 -0700 Subject: [PATCH] [BUGFIX beta] [DEPRECATION] Deprecate `@foo={{helper}}` Per [RFC 496](https://github.com/emberjs/rfcs/blob/master/text/0496-handlebars-strict-mode.md#3-no-implicit-invocation-of-argument-less-helpers), this commit deprecates the implicit invocation of argument-less helpers and requires explicit parenthesis if: 1. Non-strict mode, AND 2. `helper` is a free variable (not `this.helper`, `@helper` or a local variable), AND 3. No arguments are provided to the helper, AND 4. It's in a component invocation's named argument position (not `
` or ``), AND 5. Not parenthesized (not `@foo={{(helper)}}`), AND 6. Not interpolated (not `@foo="{{helper}}"`). The cases in real apps where all of the above are true should be quite rare, as most helpers take at least one argument. This is probably not the most efficient/minimal changes to the compiler infrastructure, but I chose to optimize for making the change easier to remove/rollback (i.e. adding new nodes instead of changing existing ones) as we won't be needing this for very long. This also bumps `@glimmer/*` to latest which also brings in the bugfix commit https://github.com/glimmerjs/glimmer-vm/pull/1293. --- package.json | 26 +- .../-internals/glimmer/lib/environment.ts | 8 + .../custom-modifier-manager-test.js | 22 +- .../integration/helpers/custom-helper-test.js | 105 +++++++ yarn.lock | 262 +++++++++--------- 5 files changed, 278 insertions(+), 145 deletions(-) diff --git a/package.json b/package.json index cc05ff66278..b361b401eed 100644 --- a/package.json +++ b/package.json @@ -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.77.5", + "@glimmer/vm-babel-plugins": "0.78.0", "babel-plugin-debug-macros": "^0.3.3", "babel-plugin-filter-imports": "^4.0.0", "broccoli-concat": "^4.2.4", @@ -75,19 +75,19 @@ }, "devDependencies": { "@babel/preset-env": "^7.9.5", - "@glimmer/compiler": "0.77.5", + "@glimmer/compiler": "0.78.0", "@glimmer/env": "^0.1.7", - "@glimmer/global-context": "0.77.5", - "@glimmer/interfaces": "0.77.5", - "@glimmer/manager": "0.77.5", - "@glimmer/destroyable": "0.77.5", - "@glimmer/owner": "0.77.5", - "@glimmer/node": "0.77.5", - "@glimmer/opcode-compiler": "0.77.5", - "@glimmer/program": "0.77.5", - "@glimmer/reference": "0.77.5", - "@glimmer/runtime": "0.77.5", - "@glimmer/validator": "0.77.5", + "@glimmer/global-context": "0.78.0", + "@glimmer/interfaces": "0.78.0", + "@glimmer/manager": "0.78.0", + "@glimmer/destroyable": "0.78.0", + "@glimmer/owner": "0.78.0", + "@glimmer/node": "0.78.0", + "@glimmer/opcode-compiler": "0.78.0", + "@glimmer/program": "0.78.0", + "@glimmer/reference": "0.78.0", + "@glimmer/runtime": "0.78.0", + "@glimmer/validator": "0.78.0", "@simple-dom/document": "^1.4.0", "@types/qunit": "^2.9.1", "@types/rsvp": "^4.0.3", diff --git a/packages/@ember/-internals/glimmer/lib/environment.ts b/packages/@ember/-internals/glimmer/lib/environment.ts index 5e420176c3a..847642050f0 100644 --- a/packages/@ember/-internals/glimmer/lib/environment.ts +++ b/packages/@ember/-internals/glimmer/lib/environment.ts @@ -116,6 +116,14 @@ const VM_DEPRECATION_OVERRIDES: (DeprecationOptions & { enabled: '3.26.0', }, }, + { + id: 'argument-less-helper-paren-less-invocation', + until: '4.0.0', + for: 'ember-source', + since: { + enabled: '3.27.0', + }, + }, ]; const VM_ASSERTION_OVERRIDES: { id: string; message: string }[] = []; diff --git a/packages/@ember/-internals/glimmer/tests/integration/custom-modifier-manager-test.js b/packages/@ember/-internals/glimmer/tests/integration/custom-modifier-manager-test.js index 508dfc567ed..51f639d9e18 100644 --- a/packages/@ember/-internals/glimmer/tests/integration/custom-modifier-manager-test.js +++ b/packages/@ember/-internals/glimmer/tests/integration/custom-modifier-manager-test.js @@ -1,5 +1,11 @@ import { DEBUG } from '@glimmer/env'; -import { moduleFor, RenderingTestCase, runTask, defineSimpleModifier } from 'internal-test-helpers'; +import { + moduleFor, + RenderingTestCase, + runTask, + defineSimpleHelper, + defineSimpleModifier, +} from 'internal-test-helpers'; import { Component } from '@ember/-internals/glimmer'; import { setModifierManager, modifierCapabilities } from '@glimmer/manager'; @@ -644,6 +650,20 @@ moduleFor( }); }, /Cannot use the \(modifier\) keyword yet, as it has not been implemented/); } + + '@feature(EMBER_DYNAMIC_HELPERS_AND_MODIFIERS) Can use a dynamic modifier with a nested dynamic helper'() { + let foo = defineSimpleHelper(() => 'Hello, world!'); + let bar = defineSimpleModifier((element, [value]) => (element.innerHTML = value)); + + this.registerComponent('baz', { + template: '
', + ComponentClass: Component.extend({ tagName: '', foo, bar }), + }); + + this.render(''); + this.assertHTML('
Hello, world!
'); + this.assertStableRerender(); + } } ); diff --git a/packages/@ember/-internals/glimmer/tests/integration/helpers/custom-helper-test.js b/packages/@ember/-internals/glimmer/tests/integration/helpers/custom-helper-test.js index ba4bb014444..7d6df2df570 100644 --- a/packages/@ember/-internals/glimmer/tests/integration/helpers/custom-helper-test.js +++ b/packages/@ember/-internals/glimmer/tests/integration/helpers/custom-helper-test.js @@ -826,6 +826,20 @@ moduleFor( }, /Cannot use the \(helper\) keyword yet, as it has not been implemented/); } + '@feature(EMBER_DYNAMIC_HELPERS_AND_MODIFIERS) Can use a dynamic helper with nested helpers'() { + let foo = defineSimpleHelper(() => 'world!'); + let bar = defineSimpleHelper((value) => 'Hello, ' + value); + + this.registerComponent('baz', { + template: '{{this.bar (this.foo)}}', + ComponentClass: Component.extend({ foo, bar }), + }); + + this.render(''); + this.assertText('Hello, world!'); + this.assertStableRerender(); + } + ['@test helpers are not computed eagerly when used with if expressions'](assert) { this.registerHelper('is-ok', () => 'hello'); this.registerHelper('throws-error', () => assert.ok(false, 'helper was computed eagerly')); @@ -909,4 +923,95 @@ if (DEBUG) { } } ); + + moduleFor( + 'Helpers test: argument-less helper invocation in named arguments position', + class extends RenderingTestCase { + constructor() { + super(...arguments); + + this.registerComponent('bar', { + template: '[{{is-string @content}}][{{@content}}]', + }); + + this.registerHelper('is-string', ([value]) => typeof value === 'string'); + } + + ['@test invoking an argument-less helper without parens in named argument position is deprecated']() { + this.registerHelper('foo', () => 'Hello, world!'); + + expectDeprecation( + () => this.render('', { foo: 'Not it!' }), + new RegExp( + /The `foo` helper was used in the `-top-level` template as /.source + + /`@content={{foo}}`\. This is ambigious between wanting the `@content` /.source + + /argument to be the `foo` helper itself, or the result of invoking the /.source + + /`foo` helper \(current behavior\)\. This implicit invocation behavior /.source + + /has been deprecated\./.source + ) + ); + + this.assertText('[true][Hello, world!]'); + this.assertStableRerender(); + } + + ['@test invoking an argument-less helper with parens in named argument position is not deprecated']() { + this.registerHelper('foo', () => 'Hello, world!'); + + expectNoDeprecation(() => this.render('', { foo: 'Not it!' })); + + this.assertText('[true][Hello, world!]'); + this.assertStableRerender(); + } + + ['@test invoking an argument-less helper with quotes in named argument position is not deprecated']() { + this.registerHelper('foo', () => 'Hello, world!'); + + expectNoDeprecation(() => this.render('', { foo: 'Not it!' })); + + this.assertText('[true][Hello, world!]'); + this.assertStableRerender(); + } + + ['@test passing a local helper in named argument position is not deprecated']() { + let foo = defineSimpleHelper(() => 'Hello, world!'); + + expectNoDeprecation(() => + this.render(`{{#let this.foo as |foo|}}{{/let}}`, { foo }) + ); + + this.assertText('[false][Hello, world!]'); + this.assertStableRerender(); + } + + // TODO: this one really should work, and there is a passing test in glimmer-vm, + // but somehow it doesn't work here. This is almost certainly a VM bug as something + // is trying to call `block.compile()` but `block` is the reference for `this.foo`. + // So the execution stack is probably off-by-one or something. + + ['@skip invoking a local helper with parens in named argument position is not deprecated']() { + let foo = defineSimpleHelper(() => 'Hello, world!'); + + expectNoDeprecation(() => + this.render(`{{#let this.foo as |foo|}}{{/let}}`, { foo }) + ); + + this.assertText('[true][Hello, world!]'); + this.assertStableRerender(); + } + + // TODO: this one doesn't work yet, and there is a failing test in glimmer-vm + + ['@skip invoking a helper with quotes in named argument position is not deprecated']() { + let foo = defineSimpleHelper(() => 'Hello, world!'); + + expectNoDeprecation(() => + this.render(`{{#let this.foo as |foo|}}{{/let}}`, { foo }) + ); + + this.assertText('[true][Hello, world!]'); + this.assertStableRerender(); + } + } + ); } diff --git a/yarn.lock b/yarn.lock index b387ddcfff1..806b1b50730 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1588,194 +1588,194 @@ minimatch "^3.0.4" strip-json-comments "^3.1.1" -"@glimmer/compiler@0.77.5": - version "0.77.5" - resolved "https://registry.yarnpkg.com/@glimmer/compiler/-/compiler-0.77.5.tgz#f12cf9cff8b8a8c94e8edffa6f967caf3ff92776" - integrity sha512-WXNfEtqmoAur2+aU0qZnE1cK6GVucwUlCHJd6756FrFxTcayl/Zj6+Ti5yfTSnqXnYo2rRWn0FCc/WZ0wGlTGw== - dependencies: - "@glimmer/interfaces" "0.77.5" - "@glimmer/syntax" "0.77.5" - "@glimmer/util" "0.77.5" - "@glimmer/wire-format" "0.77.5" +"@glimmer/compiler@0.78.0": + version "0.78.0" + resolved "https://registry.yarnpkg.com/@glimmer/compiler/-/compiler-0.78.0.tgz#711b2940e5280ac09f59b0b7b42dcce25a5ce11c" + integrity sha512-e6LSESRKZZlViCZTYi21kyfWf0BPiEFWij5Yvpyq9iNFnhJIbSa2+LfhyHZKaWU7lXILOcrdqWoFqqRREwkQyg== + dependencies: + "@glimmer/interfaces" "0.78.0" + "@glimmer/syntax" "0.78.0" + "@glimmer/util" "0.78.0" + "@glimmer/wire-format" "0.78.0" "@simple-dom/interface" "^1.4.0" -"@glimmer/destroyable@0.77.5": - version "0.77.5" - resolved "https://registry.yarnpkg.com/@glimmer/destroyable/-/destroyable-0.77.5.tgz#c55089f2007a42a59058784d75b30784ed138bc7" - integrity sha512-s8cVbb+WlE6tTpwRhzOhlwO9PSokjC3s7wzkD6gHCQIPQivc8BHqZ2czUWfQFhHZdYVk4dg04pFMq+y8m3qC0Q== +"@glimmer/destroyable@0.78.0": + version "0.78.0" + resolved "https://registry.yarnpkg.com/@glimmer/destroyable/-/destroyable-0.78.0.tgz#5a67da4c6269c03870de917e98d7c125aa721575" + integrity sha512-RwwSQ1UthO+pSIPPOwM7gD2IMIiYClzzLdOTpPilW8BPy27663HV+oHaFfTRMQrsQ9bA+uNOZnUNF86bDFQmWQ== dependencies: "@glimmer/env" "0.1.7" - "@glimmer/global-context" "0.77.5" - "@glimmer/interfaces" "0.77.5" - "@glimmer/util" "0.77.5" + "@glimmer/global-context" "0.78.0" + "@glimmer/interfaces" "0.78.0" + "@glimmer/util" "0.78.0" -"@glimmer/encoder@0.77.5": - version "0.77.5" - resolved "https://registry.yarnpkg.com/@glimmer/encoder/-/encoder-0.77.5.tgz#40dd91417998c7f1c6b1fa947fa881a598250bc3" - integrity sha512-BJpuFi78T9U8g5ix5R99kYhB4m5hQRfB0femrvGhECyhtOZJ+Y797uuOaSqmGTYTY8VIhvxEao6YRaKly0K3mw== +"@glimmer/encoder@0.78.0": + version "0.78.0" + resolved "https://registry.yarnpkg.com/@glimmer/encoder/-/encoder-0.78.0.tgz#cbe024b3ae2709c717db2c10be4b71a7dfadcdd9" + integrity sha512-TbB4hfsQwMEyvme90y4x0EDqrtwRAaMhOTi536D/zMJSj8i9l71fVD8G+omtvAexmg1gUvOOBh+cWeeTWF+caA== dependencies: "@glimmer/env" "0.1.7" - "@glimmer/interfaces" "0.77.5" - "@glimmer/vm" "0.77.5" + "@glimmer/interfaces" "0.78.0" + "@glimmer/vm" "0.78.0" "@glimmer/env@0.1.7", "@glimmer/env@^0.1.7": version "0.1.7" resolved "https://registry.yarnpkg.com/@glimmer/env/-/env-0.1.7.tgz#fd2d2b55a9029c6b37a6c935e8c8871ae70dfa07" integrity sha1-/S0rVakCnGs3psk16MiHGucN+gc= -"@glimmer/global-context@0.77.5": - version "0.77.5" - resolved "https://registry.yarnpkg.com/@glimmer/global-context/-/global-context-0.77.5.tgz#ff72f216cd39f7e7923d54f3bb0862910070a9cc" - integrity sha512-kWHYjOyhYeyBEEuu3gMJsLO9WxFlXFFeWmtk2raWkJ37TndZNUFMQt6C0yOyT/AkXUJH5+1W7XSia1P3TB6CKw== +"@glimmer/global-context@0.78.0": + version "0.78.0" + resolved "https://registry.yarnpkg.com/@glimmer/global-context/-/global-context-0.78.0.tgz#c25eee9a0833eb38fd1590f86b42c6b98b8a6b67" + integrity sha512-u+gfALFpGWH5lzyCgpLlvgBtkcNiTevKdWPCWaj4KKKv0/x/WYfgsH0PouEtCdGS5dRUUArgPTJle4msK+pJYg== dependencies: "@glimmer/env" "^0.1.7" -"@glimmer/interfaces@0.77.5": - version "0.77.5" - resolved "https://registry.yarnpkg.com/@glimmer/interfaces/-/interfaces-0.77.5.tgz#74c791ba4712588f2e7b65669d90e8d349eee30a" - integrity sha512-ahiZX2EG2w1DrXmIxjzmkRrAeRJS+y35YTXhP82/NSyLiS2g7NTgYbqXpsS+VfvYRZ2+EbeXzY7cTe8mN4OUxg== +"@glimmer/interfaces@0.78.0": + version "0.78.0" + resolved "https://registry.yarnpkg.com/@glimmer/interfaces/-/interfaces-0.78.0.tgz#85274e1195775ba0e783e5c33f0d91164d3d8767" + integrity sha512-S+OfQR9gkRAzRfcuHANA5sKaID3MCm1VnGEQjyPfXi64SkyJ++j6AWZBJ7UR+36jUB9JNgHGySSCaAuB0llwCA== dependencies: "@simple-dom/interface" "^1.4.0" -"@glimmer/low-level@0.77.5": - version "0.77.5" - resolved "https://registry.yarnpkg.com/@glimmer/low-level/-/low-level-0.77.5.tgz#f198acd9c6b5f39da07756db32f11cf0f8714f7e" - integrity sha512-A+bNz17vBcTe0qn38q0sdDldCj4gKdFllw8lRHms2Xn50xc+e0uQ00sFFVBT51XDrKiX6u+U72sVnBrUYCbGXg== +"@glimmer/low-level@0.78.0": + version "0.78.0" + resolved "https://registry.yarnpkg.com/@glimmer/low-level/-/low-level-0.78.0.tgz#bc8f09ba3645267a9d33a1cfb09361cd1eddc564" + integrity sha512-hxjls0NnOph/bKKyxVS8pSu/Wi17y92FBDOFXtuJPy6PA5FXMOuQmD1dMHPoWTLeDI9Artq7dV/mJYDQU4DJBA== -"@glimmer/manager@0.77.5": - version "0.77.5" - resolved "https://registry.yarnpkg.com/@glimmer/manager/-/manager-0.77.5.tgz#dfbd94a2f47640f8d6fcdf67bb8cc8e995c835f8" - integrity sha512-neURL3qGaDuiq/8YYE4F2reGnS42vMjgYcJjP00eY/pBHfOY6icPR1oPwGmTt8Qr6topGc3FmUaUWDXPt0Lnkg== +"@glimmer/manager@0.78.0": + version "0.78.0" + resolved "https://registry.yarnpkg.com/@glimmer/manager/-/manager-0.78.0.tgz#39ef004270140da4f7e6573a8b5868fc0d4085a0" + integrity sha512-rnLAIEw6ke+cbP9gDGUmgBdwQf2p82r/lNCmICeijaGhXeMUtTn6T7CSKM5kkTlcByBMPqTYPmtkVhA/V8Qazg== dependencies: - "@glimmer/destroyable" "0.77.5" + "@glimmer/destroyable" "0.78.0" "@glimmer/env" "0.1.7" - "@glimmer/interfaces" "0.77.5" - "@glimmer/reference" "0.77.5" - "@glimmer/util" "0.77.5" - "@glimmer/validator" "0.77.5" - -"@glimmer/node@0.77.5": - version "0.77.5" - resolved "https://registry.yarnpkg.com/@glimmer/node/-/node-0.77.5.tgz#6bb693744d612a770d106b69d2803c2423c15868" - integrity sha512-BBM32C5GldOFxUbV2XljwoNmOGP9YobJF9WEW1zVkbggDZcGH090VwbTErrXVv8aw987fGXqei0UCFGleOXu1A== - dependencies: - "@glimmer/interfaces" "0.77.5" - "@glimmer/runtime" "0.77.5" - "@glimmer/util" "0.77.5" + "@glimmer/interfaces" "0.78.0" + "@glimmer/reference" "0.78.0" + "@glimmer/util" "0.78.0" + "@glimmer/validator" "0.78.0" + +"@glimmer/node@0.78.0": + version "0.78.0" + resolved "https://registry.yarnpkg.com/@glimmer/node/-/node-0.78.0.tgz#a0c86fc70bc6b2a5d73eb708796853568c7c242b" + integrity sha512-tpL72q5kfJu6+m8SqEUdmKAeW+sQWoIyn20sq0ZYWT2pEu5VAfUBuvK8wgc5vDzu6/2WtdATXCQZPMSyMcP4fg== + dependencies: + "@glimmer/interfaces" "0.78.0" + "@glimmer/runtime" "0.78.0" + "@glimmer/util" "0.78.0" "@simple-dom/document" "^1.4.0" "@simple-dom/interface" "^1.4.0" -"@glimmer/opcode-compiler@0.77.5": - version "0.77.5" - resolved "https://registry.yarnpkg.com/@glimmer/opcode-compiler/-/opcode-compiler-0.77.5.tgz#088f946587c905fcb37a6516df5cb858fc177d7c" - integrity sha512-qJYdDeJFch2BGpYWmZ0klExsBvu6bZYoNyRtzUmuA0+xzT2I1HdwrTpekkAHVDfB0rfHArHmcimTxgFF15o4Mg== +"@glimmer/opcode-compiler@0.78.0": + version "0.78.0" + resolved "https://registry.yarnpkg.com/@glimmer/opcode-compiler/-/opcode-compiler-0.78.0.tgz#9f152ace46f3e4e6059af3dfe1fb27c0cbc4fad5" + integrity sha512-mk3mO0lbyuI0XgrkpRMM5wYwdIQAJNQufRcEN7lAPdgv03xq5OX8ReLd9xfcG+PduAx4u1lLTH6bGcEWPO4Xzg== dependencies: - "@glimmer/encoder" "0.77.5" + "@glimmer/encoder" "0.78.0" "@glimmer/env" "0.1.7" - "@glimmer/interfaces" "0.77.5" - "@glimmer/reference" "0.77.5" - "@glimmer/util" "0.77.5" - "@glimmer/vm" "0.77.5" - "@glimmer/wire-format" "0.77.5" + "@glimmer/interfaces" "0.78.0" + "@glimmer/reference" "0.78.0" + "@glimmer/util" "0.78.0" + "@glimmer/vm" "0.78.0" + "@glimmer/wire-format" "0.78.0" -"@glimmer/owner@0.77.5": - version "0.77.5" - resolved "https://registry.yarnpkg.com/@glimmer/owner/-/owner-0.77.5.tgz#d81933f3d6c4c0feafcf3d972cc7edca00532a5b" - integrity sha512-0jPDb63qBNN20QkVprIuennHP1Vf3fWCQNtuVOYsDOjyV2RIlrOwTVLuFIpua86nSBRQq7gH411ZyEpoq6H3Cg== +"@glimmer/owner@0.78.0": + version "0.78.0" + resolved "https://registry.yarnpkg.com/@glimmer/owner/-/owner-0.78.0.tgz#323ee4815f2695cd661aab98e760fff77f6fc279" + integrity sha512-qEsFrdNLuTDXnA6Uzt7W1qZqyAI6w9vWqLcwcmv8Q0jgYsICY7UfA0e50QhX8AhDHwz6dwKlo5f4kFOFYrLDbA== dependencies: - "@glimmer/util" "0.77.5" + "@glimmer/util" "0.78.0" -"@glimmer/program@0.77.5": - version "0.77.5" - resolved "https://registry.yarnpkg.com/@glimmer/program/-/program-0.77.5.tgz#53ce8da78377b255a22eb1d86eb5e6a837393305" - integrity sha512-19rWpeqqK7UF6CT9G+A7TOnWeoIlT8wCF4gKQNRbp2sbUugJ0PyTn7VzZTLAc110F0ohFlv17yKIrDBoPytHDw== +"@glimmer/program@0.78.0": + version "0.78.0" + resolved "https://registry.yarnpkg.com/@glimmer/program/-/program-0.78.0.tgz#fcf54f2321186e1419b9a091378b6efed82ab0e9" + integrity sha512-KVUZWnIjYKrJjGpAFACXUtjWCzj8YaTzrffNfLdmTIKLF2ZMkVyyz+OHkXmkTaLN+lEyHcIXXruB6PMGSYZuzQ== dependencies: - "@glimmer/encoder" "0.77.5" + "@glimmer/encoder" "0.78.0" "@glimmer/env" "0.1.7" - "@glimmer/interfaces" "0.77.5" - "@glimmer/manager" "0.77.5" - "@glimmer/opcode-compiler" "0.77.5" - "@glimmer/util" "0.77.5" + "@glimmer/interfaces" "0.78.0" + "@glimmer/manager" "0.78.0" + "@glimmer/opcode-compiler" "0.78.0" + "@glimmer/util" "0.78.0" -"@glimmer/reference@0.77.5": - version "0.77.5" - resolved "https://registry.yarnpkg.com/@glimmer/reference/-/reference-0.77.5.tgz#54eac6b00bd06cb84ff8c9f854d9a7811f2c298f" - integrity sha512-L432i/VD4Kud8qsvPs3bY12hjkKOjfqH1tyGnjfdNAip/k6Z7GIuFDi+T/lJOLWLFONh4414KDopTysBXx9USw== +"@glimmer/reference@0.78.0": + version "0.78.0" + resolved "https://registry.yarnpkg.com/@glimmer/reference/-/reference-0.78.0.tgz#e8f5104a22af5dd6eefcd850078f6ce83bd223fb" + integrity sha512-IBPFda7x5UfVl8UmQSG82s91+jFC31u3re5CVJrrizind79mKbA2eVGoViawkk4MtwqCEQY4Qv9JSNCiPRpIkQ== dependencies: "@glimmer/env" "^0.1.7" - "@glimmer/global-context" "0.77.5" - "@glimmer/interfaces" "0.77.5" - "@glimmer/util" "0.77.5" - "@glimmer/validator" "0.77.5" + "@glimmer/global-context" "0.78.0" + "@glimmer/interfaces" "0.78.0" + "@glimmer/util" "0.78.0" + "@glimmer/validator" "0.78.0" -"@glimmer/runtime@0.77.5": - version "0.77.5" - resolved "https://registry.yarnpkg.com/@glimmer/runtime/-/runtime-0.77.5.tgz#6b936da4e2f37cd3994626efa672b15c715ae0f8" - integrity sha512-rLzXY2IFw7yzsvOwy/3eLxoza9Y9vx52bivlZJ9+8AWCtn4ywNGOKwvv4i8Mf1EMXtvo3nZHC9yIwfpUJg8NLg== +"@glimmer/runtime@0.78.0": + version "0.78.0" + resolved "https://registry.yarnpkg.com/@glimmer/runtime/-/runtime-0.78.0.tgz#41a802b2bd1769005782ce77bd19fa26e75c6b76" + integrity sha512-kcc9WYAS2awG3xJ8QHIjilw6jLDwcOllKU6TDqdo9Oa6XuiBJh9WMMb/2lf6EpFqZqSraYuI9DBZQ7ujdCdKTQ== dependencies: - "@glimmer/destroyable" "0.77.5" + "@glimmer/destroyable" "0.78.0" "@glimmer/env" "0.1.7" - "@glimmer/global-context" "0.77.5" - "@glimmer/interfaces" "0.77.5" - "@glimmer/low-level" "0.77.5" - "@glimmer/owner" "0.77.5" - "@glimmer/program" "0.77.5" - "@glimmer/reference" "0.77.5" - "@glimmer/util" "0.77.5" - "@glimmer/validator" "0.77.5" - "@glimmer/vm" "0.77.5" - "@glimmer/wire-format" "0.77.5" + "@glimmer/global-context" "0.78.0" + "@glimmer/interfaces" "0.78.0" + "@glimmer/low-level" "0.78.0" + "@glimmer/owner" "0.78.0" + "@glimmer/program" "0.78.0" + "@glimmer/reference" "0.78.0" + "@glimmer/util" "0.78.0" + "@glimmer/validator" "0.78.0" + "@glimmer/vm" "0.78.0" + "@glimmer/wire-format" "0.78.0" "@simple-dom/interface" "^1.4.0" -"@glimmer/syntax@0.77.5": - version "0.77.5" - resolved "https://registry.yarnpkg.com/@glimmer/syntax/-/syntax-0.77.5.tgz#b841803dd54ea86de7e8ae8850b3760000033bf2" - integrity sha512-FRb1onDsP9P2CnbwTyKF91QYIbRJ0svALG7TnAJlUjQU9E4lWdI5lf7vPRh45A4W1rjcAcIcuiIS6oGrdEkhuQ== +"@glimmer/syntax@0.78.0": + version "0.78.0" + resolved "https://registry.yarnpkg.com/@glimmer/syntax/-/syntax-0.78.0.tgz#b62359c0f3506f83f259caa7aafe33603fded78d" + integrity sha512-lgn3/Y1r5fVx0w0o0Qr8W58bpkt0cLpJeFH5n1uROMpSqFvlLr9/Oozx4o8XKmUOdHFSrs748ESbbhUogxYNng== dependencies: - "@glimmer/interfaces" "0.77.5" - "@glimmer/util" "0.77.5" + "@glimmer/interfaces" "0.78.0" + "@glimmer/util" "0.78.0" "@handlebars/parser" "~2.0.0" simple-html-tokenizer "^0.5.10" -"@glimmer/util@0.77.5": - version "0.77.5" - resolved "https://registry.yarnpkg.com/@glimmer/util/-/util-0.77.5.tgz#b4e2909d34eb7db34c63fd9d942e0ffa458d4c90" - integrity sha512-Y78NnJClpz7sBks3q+ZNNVfCjy8ALcCQOG5GEIm/P9O3+eXMBsx2ac9Umu4LBZqmeINQ9CtFz10u2BiyxOtSQg== +"@glimmer/util@0.78.0": + version "0.78.0" + resolved "https://registry.yarnpkg.com/@glimmer/util/-/util-0.78.0.tgz#9ab3c55ac22d97f69e74392c98f2178df1809539" + integrity sha512-Y+m4q9QmJ5Xr6kSswUdSVWjoJrTIicAZ4iiRuw3Y3t8XllnmuNFMcypQJpIchecnvlHg+9X4xRXzxRvel5+Mhg== dependencies: "@glimmer/env" "0.1.7" - "@glimmer/interfaces" "0.77.5" + "@glimmer/interfaces" "0.78.0" "@simple-dom/interface" "^1.4.0" -"@glimmer/validator@0.77.5": - version "0.77.5" - resolved "https://registry.yarnpkg.com/@glimmer/validator/-/validator-0.77.5.tgz#a5e272d700f661aa0b2f350670974792b7785a49" - integrity sha512-LluyvxWTqys5ulkYA24sFDQ/obwOTwbLDakNBOlHvKdh814h+scz4y8bckx6qY7AsJObQgZVAg00r1Nlhfs6fQ== +"@glimmer/validator@0.78.0": + version "0.78.0" + resolved "https://registry.yarnpkg.com/@glimmer/validator/-/validator-0.78.0.tgz#8caf1f721936e494435009e04d00130753dbe2b1" + integrity sha512-CzPLEMAj/d+s3mlr/5iJnRn4bRbGfDy+QQKDE/4F65aC+7aaImjP7nP8Z9AZRlva9Y7t+/YlR0LgCAlXhpPbiQ== dependencies: "@glimmer/env" "^0.1.7" - "@glimmer/global-context" "0.77.5" + "@glimmer/global-context" "0.78.0" -"@glimmer/vm-babel-plugins@0.77.5": - version "0.77.5" - resolved "https://registry.yarnpkg.com/@glimmer/vm-babel-plugins/-/vm-babel-plugins-0.77.5.tgz#daffb6507aa6b08ec36f69d652897d339fdd0007" - integrity sha512-jTBM7fJMrIEy4/bCeI8e7ypR+AuWYzLA+KORCGbnTJtL/NYg4G8qwhQAZBtg1d3KmoqyqaCsyqE6f4/tzJO4eQ== +"@glimmer/vm-babel-plugins@0.78.0": + version "0.78.0" + resolved "https://registry.yarnpkg.com/@glimmer/vm-babel-plugins/-/vm-babel-plugins-0.78.0.tgz#6fc2d617664888d3815451f8ff42dbfae25a42d5" + integrity sha512-YkznZnqMQwHzFmdivSm5RfUjb6gCBreM6udzKvuflr5TcJ5QvitYt2dxvA00J10a+8HU8sarwlVSENGbd8XYGg== dependencies: babel-plugin-debug-macros "^0.3.4" -"@glimmer/vm@0.77.5": - version "0.77.5" - resolved "https://registry.yarnpkg.com/@glimmer/vm/-/vm-0.77.5.tgz#ff244acb0ce4a0076df01da8fdd37d690833e478" - integrity sha512-SsG/BEnM+ySk236UlHHoxYufdWwMSmr2RiapQp6O4pDzy7npkRebTYOzXCXpYrFkjDcTwPaygYCnr7RRFJXEUA== +"@glimmer/vm@0.78.0": + version "0.78.0" + resolved "https://registry.yarnpkg.com/@glimmer/vm/-/vm-0.78.0.tgz#ede99f998f065117efc75aee7be0d205ed7061bc" + integrity sha512-Exe9TGprShcs2m0uidYWtd4/hjxfsfrFAWsVzUYqjiT3558oSwZ0aE2W7mGVMGCq/A+OJDd/Uy1cfuw2/SgW/g== dependencies: - "@glimmer/interfaces" "0.77.5" - "@glimmer/util" "0.77.5" + "@glimmer/interfaces" "0.78.0" + "@glimmer/util" "0.78.0" -"@glimmer/wire-format@0.77.5": - version "0.77.5" - resolved "https://registry.yarnpkg.com/@glimmer/wire-format/-/wire-format-0.77.5.tgz#326ae0e09d81182096c0e4efef7cc197d96081d4" - integrity sha512-/FyjStQtyHkCS8dOp7t79e+PIgEAF0yo9rxmazexl3Ie3ePE9qRxOQi/GKIxi1V1YGpxxv8Aq6wP8kteUzCDaQ== +"@glimmer/wire-format@0.78.0": + version "0.78.0" + resolved "https://registry.yarnpkg.com/@glimmer/wire-format/-/wire-format-0.78.0.tgz#12ba8a03f09db536803a56e2d34995db1b254ec0" + integrity sha512-DNW6BpWiWWdbA+LfFVMM46Gy+6s1C3JB746dGJB1vLg9GZH98D4lW7tMhLRQDmJ9WXWtJ8vknRUEHWTgCs5YhQ== dependencies: - "@glimmer/interfaces" "0.77.5" - "@glimmer/util" "0.77.5" + "@glimmer/interfaces" "0.78.0" + "@glimmer/util" "0.78.0" "@handlebars/parser@~2.0.0": version "2.0.0"