From 9cceb98f47b9695f1e34c2a79147b866eac5631c Mon Sep 17 00:00:00 2001 From: Robert Jackson Date: Wed, 2 Sep 2020 15:45:53 -0400 Subject: [PATCH 1/2] Add testing harness that replicates FastBoot environment. Prior to this we were simulating FastBoot in a non-isolated VM context. That meant that the running Node context was available within rendering attempts. However, when ran with "real" FastBoot that is **not** the case. In the real FastBoot environment, we create an isolated `vm` context and evaluate both Ember and the application within that context. This ensures that the running context does not have access to arbitrary Node-land APIs (e.g. `require`). (cherry picked from commit f9ef7dcca312148832894259713ca350de1c8085) --- .eslintrc.js | 14 --- tests/node/component-rendering-test.js | 8 ++ tests/node/fastboot-sandbox-test.js | 120 +++++++++++++++++++++++++ tests/node/helpers/load-ember.js | 14 ++- 4 files changed, 139 insertions(+), 17 deletions(-) create mode 100644 tests/node/fastboot-sandbox-test.js diff --git a/.eslintrc.js b/.eslintrc.js index a850e9954af..9512c474dba 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -166,20 +166,6 @@ module.exports = { 'disable-features/disable-generator-functions': 'off', }), }, - { - // matches node-land files that aren't shipped to consumers (allows using Node 6+ features) - files: [ - 'broccoli/**/*.js', - 'tests/node/**/*.js', - 'ember-cli-build.js', - 'rollup.config.js', - 'd8-runner.js', - ], - - rules: { - 'node/no-unsupported-features': ['error', { version: 6 }], - } - }, { files: [ 'node-tests/**/*.js' ], diff --git a/tests/node/component-rendering-test.js b/tests/node/component-rendering-test.js index e8fcce14a91..a5e9c17aeef 100644 --- a/tests/node/component-rendering-test.js +++ b/tests/node/component-rendering-test.js @@ -33,4 +33,12 @@ QUnit.module('Components can be rendered without a DOM dependency', function(hoo assert.ok(html.match(/rel="canonical"/)); }); + + QUnit.test('attributes requiring protocol sanitization do not error', function(assert) { + this.set('someHref', 'https://foo.com/'); + + let html = this.render('Some Link'); + + assert.ok(html.match(/Some Link<\/a>/)); + }); }); diff --git a/tests/node/fastboot-sandbox-test.js b/tests/node/fastboot-sandbox-test.js new file mode 100644 index 00000000000..91d8de63dd5 --- /dev/null +++ b/tests/node/fastboot-sandbox-test.js @@ -0,0 +1,120 @@ +const fs = require('fs'); +const vm = require('vm'); +const SimpleDOM = require('simple-dom'); +const { emberPath, loadEmber, clearEmber } = require('./helpers/load-ember'); + +// This is based on what fastboot-server does +let HTMLSerializer = new SimpleDOM.HTMLSerializer(SimpleDOM.voidMap); + +async function fastbootVisit(context, url) { + let doc = new SimpleDOM.Document(); + let rootElement = doc.body; + let options = { isBrowser: false, document: doc, rootElement: rootElement }; + + let { app } = context; + + await app.boot(); + + let instance = await app.buildInstance(); + + try { + await instance.boot(options); + await instance.visit(url, options); + + return { + url: instance.getURL(), + title: doc.title, + body: HTMLSerializer.serialize(rootElement), + }; + } finally { + instance.destroy(); + } +} + +// essentially doing the same as what is done in FastBoot 3.1.0 +// https://github.com/ember-fastboot/fastboot/blob/v3.1.0/src/sandbox.js +function buildSandboxContext(precompile) { + let URL = require('url'); + + let sandbox = { + console, + setTimeout, + clearTimeout, + URL, + + // Convince jQuery not to assume it's in a browser + module: { exports: {} }, + }; + + // Set the global as `window` + sandbox.window = sandbox; + sandbox.window.self = sandbox; + + let context = vm.createContext(sandbox); + + let environmentSetupScript = new vm.Script( + ` +var EmberENV = { + _TEMPLATE_ONLY_GLIMMER_COMPONENTS: true, + _APPLICATION_TEMPLATE_WRAPPER: false, + _DEFAULT_ASYNC_OBSERVERS: true, + _JQUERY_INTEGRATION: false, +};`, + { filename: 'prepend.js' } + ); + environmentSetupScript.runInContext(context); + + let emberSource = fs.readFileSync(emberPath, { encoding: 'utf-8' }); + let emberScript = new vm.Script(emberSource, { filename: emberPath }); + emberScript.runInContext(context); + + let applicationSource = ` +class Router extends Ember.Router {} +Router.map(function() { + this.route('a'); + this.route('b'); +}); + +const registry = { + 'router:main': Router, + 'template:application': ${precompile('

Hello world!

\n{{outlet}}')} +}; + +class Resolver extends Ember.Object { + resolve(specifier) { + return registry[specifier]; + } +} + +var app = Ember.Application.extend().create({ + autoboot: false, + Resolver, +}); +`; + let appScript = new vm.Script(applicationSource, { filename: 'app.js' }); + appScript.runInContext(context); + + return context; +} + +QUnit.module('Ember.Application - visit() Integration Tests', function(hooks) { + hooks.beforeEach(function() { + let { precompile } = loadEmber(); + this.context = buildSandboxContext(precompile); + }); + + hooks.afterEach(function() { + clearEmber(); + }); + + QUnit.test('FastBoot: basic', async function(assert) { + let result = await fastbootVisit(this.context, '/'); + + assert.equal(result.url, '/', 'landed on correct url'); + assert.equal( + result.body, + '

Hello world!

\n', + 'results in expected HTML' + ); + }); +}); diff --git a/tests/node/helpers/load-ember.js b/tests/node/helpers/load-ember.js index 7a9da12fbd7..4b6d5df56a3 100644 --- a/tests/node/helpers/load-ember.js +++ b/tests/node/helpers/load-ember.js @@ -7,19 +7,27 @@ const templateCompilerPath = path.join(distPath, 'ember-template-compiler'); // properly to avoid the @glimmer/validator assertion const originalGlobalSymbols = Object.getOwnPropertySymbols(global).map(sym => [sym, global[sym]]); +module.exports.emberPath = require.resolve(emberPath); + module.exports.loadEmber = function() { let Ember = require(emberPath); - let precompile = require(templateCompilerPath).precompile; + let _precompile = require(templateCompilerPath).precompile; + + let precompile = function(templateString, options) { + let templateSpec = _precompile(templateString, options); + + return `Ember.HTMLBars.template(${templateSpec})`; + }; let compile = function(templateString, options) { - let templateSpec = precompile(templateString, options); + let templateSpec = _precompile(templateString, options); let template = new Function('return ' + templateSpec)(); return Ember.HTMLBars.template(template); }; - return { Ember, compile }; + return { Ember, compile, precompile }; }; module.exports.clearEmber = function() { From 084361ac3b6f6a94e090a85871781f3059d18691 Mon Sep 17 00:00:00 2001 From: Robert Jackson Date: Wed, 2 Sep 2020 19:38:02 -0400 Subject: [PATCH 2/2] Fix rendering engine usage within a `fastboot` sandbox --- package.json | 18 ++--- yarn.lock | 210 +++++++++++++++++++++++++-------------------------- 2 files changed, 114 insertions(+), 114 deletions(-) diff --git a/package.json b/package.json index 2f9bbe5383c..ccc0d0d40d6 100644 --- a/package.json +++ b/package.json @@ -74,16 +74,16 @@ }, "devDependencies": { "@babel/preset-env": "^7.9.5", - "@glimmer/compiler": "^0.59.0", + "@glimmer/compiler": "^0.59.1", "@glimmer/env": "^0.1.7", - "@glimmer/global-context": "^0.59.0", - "@glimmer/interfaces": "^0.59.0", - "@glimmer/node": "^0.59.0", - "@glimmer/opcode-compiler": "^0.59.0", - "@glimmer/program": "^0.59.0", - "@glimmer/reference": "^0.59.0", - "@glimmer/runtime": "^0.59.0", - "@glimmer/validator": "^0.59.0", + "@glimmer/global-context": "^0.59.1", + "@glimmer/interfaces": "^0.59.1", + "@glimmer/node": "^0.59.1", + "@glimmer/opcode-compiler": "^0.59.1", + "@glimmer/program": "^0.59.1", + "@glimmer/reference": "^0.59.1", + "@glimmer/runtime": "^0.59.1", + "@glimmer/validator": "^0.59.1", "@simple-dom/document": "^1.4.0", "@types/qunit": "^2.9.1", "@types/rsvp": "^4.0.3", diff --git a/yarn.lock b/yarn.lock index 24df10cb78c..eae0584d57d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -913,152 +913,152 @@ resolved "https://registry.yarnpkg.com/@ember/edition-utils/-/edition-utils-1.2.0.tgz#a039f542dc14c8e8299c81cd5abba95e2459cfa6" integrity sha512-VmVq/8saCaPdesQmftPqbFtxJWrzxNGSQ+e8x8LLe3Hjm36pJ04Q8LeORGZkAeOhldoUX9seLGmSaHeXkIqoog== -"@glimmer/compiler@^0.59.0": - version "0.59.0" - resolved "https://registry.yarnpkg.com/@glimmer/compiler/-/compiler-0.59.0.tgz#96ceb23600aef2cb8ce0194fa527db991cf0ea00" - integrity sha512-8S3jHpQykERW9wmcpauqqwuA795telZZhgm8qagba2VqwXKGSTynv6SjXTcr3ZXUku/gejN/LFttn51Gb09a/Q== - dependencies: - "@glimmer/interfaces" "^0.59.0" - "@glimmer/syntax" "^0.59.0" - "@glimmer/util" "^0.59.0" - "@glimmer/wire-format" "^0.59.0" +"@glimmer/compiler@^0.59.1": + version "0.59.1" + resolved "https://registry.yarnpkg.com/@glimmer/compiler/-/compiler-0.59.1.tgz#d1d48cea41b0751e49ad945d786f856c2742acf9" + integrity sha512-CEmaAuNwctm+m+j1T+Bzal4pzeB3YEi/CkL5ouPZmfNj/X4xNtu4bBv8OWosMW1864BFRj3R2eSVg7O76lIIVA== + dependencies: + "@glimmer/interfaces" "^0.59.1" + "@glimmer/syntax" "^0.59.1" + "@glimmer/util" "^0.59.1" + "@glimmer/wire-format" "^0.59.1" "@simple-dom/interface" "^1.4.0" -"@glimmer/encoder@^0.59.0": - version "0.59.0" - resolved "https://registry.yarnpkg.com/@glimmer/encoder/-/encoder-0.59.0.tgz#d28b7dfd583ea15c7466f64a4c1e2e66ad9e6df3" - integrity sha512-2jWNOMNgP7HBcuQ3TBF+WpbC5WPCo1mgpRJbGAku+th15CNiaTgzzgmi/Af9RhPwBKUuFXroTIrash9HEu+s2Q== +"@glimmer/encoder@^0.59.1": + version "0.59.1" + resolved "https://registry.yarnpkg.com/@glimmer/encoder/-/encoder-0.59.1.tgz#28025a4c743e9e425ccfb70febb5a003950cf687" + integrity sha512-tIfL17GVLZgAQQB1fNrMyE3WTEt/39zbsuOosp8i+mkV9G6LTFNwGgIbGyzExQMMtB7OrX6XWQQimlyJtBFQ4A== dependencies: - "@glimmer/interfaces" "^0.59.0" - "@glimmer/vm" "^0.59.0" + "@glimmer/interfaces" "^0.59.1" + "@glimmer/vm" "^0.59.1" "@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.59.0", "@glimmer/global-context@^0.59.0": - version "0.59.0" - resolved "https://registry.yarnpkg.com/@glimmer/global-context/-/global-context-0.59.0.tgz#7ccf9c6689dd240a78fcd6b04fb2660cfdbaac97" - integrity sha512-D8toHmniE1ufbK+A/pizPtfN4BY5n+E9/8/feFTERQBN5Q0+MQUAYoWtx2yb3RYprukwbQ8k+doOIAoHiZQ88A== +"@glimmer/global-context@0.59.1", "@glimmer/global-context@^0.59.1": + version "0.59.1" + resolved "https://registry.yarnpkg.com/@glimmer/global-context/-/global-context-0.59.1.tgz#81aa95bf7393477cd93268e4b08d9c92f8f988fa" + integrity sha512-v1eKFbH8wu1cDcvSs4baL3NM5f/qxpJdwKxALAN34oRjkNHv1Ok3vcXJIZEcpKQWJYsl3SHxtKjM9qZ4w9JEAA== dependencies: "@glimmer/env" "^0.1.7" -"@glimmer/interfaces@^0.59.0": - version "0.59.0" - resolved "https://registry.yarnpkg.com/@glimmer/interfaces/-/interfaces-0.59.0.tgz#b94e099609ed83bad686bf4759b373caa1c19210" - integrity sha512-k1ax7bbIdbwpS77d1G0y+y2C6pL+u6l/AXYvJip+yHRe163c5os8jbE9pSzzmOsdpqeJoQe0XYodLpyBMJebog== +"@glimmer/interfaces@^0.59.1": + version "0.59.1" + resolved "https://registry.yarnpkg.com/@glimmer/interfaces/-/interfaces-0.59.1.tgz#d7904a482d7c3113ea1c555372299f99585567b8" + integrity sha512-KPOUludcDdPPXm+78YmLR8hW7uSE1AjedVHdZ70OzSdQa27ZeLBdBGfN3pWBjQP/QSmL4k+wcfedAzO675jcxQ== dependencies: "@simple-dom/interface" "^1.4.0" -"@glimmer/low-level@^0.59.0": - version "0.59.0" - resolved "https://registry.yarnpkg.com/@glimmer/low-level/-/low-level-0.59.0.tgz#59c55dfc143e7f888d614188c353d16f4253435b" - integrity sha512-RSdI5A3jKxX9xO7zpzwf5NI6rpoIl9yW+ByAz3htrhqYpLLEsFNMEZoqGlKF2V7p+u3PnUyRq1m6lRgVRHNY5Q== +"@glimmer/low-level@^0.59.1": + version "0.59.1" + resolved "https://registry.yarnpkg.com/@glimmer/low-level/-/low-level-0.59.1.tgz#92af71168822e237245a1babcb22720947fd8308" + integrity sha512-/Xheya2i892kZN5OzDGQ7tjDwQlUi2h7awm7FS1bzhUpE6Jvu4urJQUAJXQXtjl74s5cfcT9jDKNgdN/qmteaw== -"@glimmer/node@^0.59.0": - version "0.59.0" - resolved "https://registry.yarnpkg.com/@glimmer/node/-/node-0.59.0.tgz#d545b5912ea93316e378ae00af4ecd42a7f6cb0c" - integrity sha512-1KIbRPwEJTeIdXktqnHAMVJru8dkyWi7BROTyqU2jwwVxK4zkgucYT30J3inVnghIs+nZB0BFmxdkv6uDvVVfQ== +"@glimmer/node@^0.59.1": + version "0.59.1" + resolved "https://registry.yarnpkg.com/@glimmer/node/-/node-0.59.1.tgz#a7e7a19e23cab9860359a22afe6c038166506047" + integrity sha512-gBFYnej88lKcKN9yps73KzI2JIWkcHCrZ9OWJ4ii5039HYlGWD+0ZYKcQ4Htiz82QtZ4jajeJX4CFfOZVc+5YA== dependencies: - "@glimmer/interfaces" "^0.59.0" - "@glimmer/runtime" "^0.59.0" - "@glimmer/util" "^0.59.0" + "@glimmer/interfaces" "^0.59.1" + "@glimmer/runtime" "^0.59.1" + "@glimmer/util" "^0.59.1" "@simple-dom/document" "^1.4.0" "@simple-dom/interface" "^1.4.0" -"@glimmer/opcode-compiler@^0.59.0": - version "0.59.0" - resolved "https://registry.yarnpkg.com/@glimmer/opcode-compiler/-/opcode-compiler-0.59.0.tgz#37fd670d29317a2ad6b4a2c8186b514f05c398ae" - integrity sha512-MP/FaQrya4aeNWZ40QzvjMr0hLfMIUThA6dOGk3yq5ls9wYg0AzmM/EOShR7tNkNmH/85rXzaUvQXVvKKcQacg== - dependencies: - "@glimmer/encoder" "^0.59.0" - "@glimmer/interfaces" "^0.59.0" - "@glimmer/program" "^0.59.0" - "@glimmer/reference" "^0.59.0" - "@glimmer/util" "^0.59.0" - "@glimmer/vm" "^0.59.0" - "@glimmer/wire-format" "^0.59.0" - -"@glimmer/program@^0.59.0": - version "0.59.0" - resolved "https://registry.yarnpkg.com/@glimmer/program/-/program-0.59.0.tgz#fd3a40c1786aae51cc9337d5c7d2cad42c3f5bdc" - integrity sha512-wD6sBFd4ilcYlSFz3JWihtWwXoJPyHeBNuqD9YdVd4s5yPUw1uFTI26zelWKfs0sMmMuG2FE4OD6Gsv5Nl4cew== - dependencies: - "@glimmer/encoder" "^0.59.0" - "@glimmer/interfaces" "^0.59.0" - "@glimmer/util" "^0.59.0" - -"@glimmer/reference@^0.59.0": - version "0.59.0" - resolved "https://registry.yarnpkg.com/@glimmer/reference/-/reference-0.59.0.tgz#50bc7a993b62276300fc732dd5ebdb27dcd4e589" - integrity sha512-uJbzdwi965KdflNuaD1snaH7y54v+LAbt/W2VUFue0ZSWoAhBLPrRP8XGO+gnXYSRDNkkoUnPwTsvEB9Pg4bRQ== +"@glimmer/opcode-compiler@^0.59.1": + version "0.59.1" + resolved "https://registry.yarnpkg.com/@glimmer/opcode-compiler/-/opcode-compiler-0.59.1.tgz#f4253fd4c1c9bd70f6e4cd048b2496718a836919" + integrity sha512-iulo0V8wKrVqXVa68sekc+J1ymN1pI+59v6lgtKc1K7GLljVX4XqVywS7sZA2DaI/7Ta5iZc0L3/b60st+pSGQ== + dependencies: + "@glimmer/encoder" "^0.59.1" + "@glimmer/interfaces" "^0.59.1" + "@glimmer/program" "^0.59.1" + "@glimmer/reference" "^0.59.1" + "@glimmer/util" "^0.59.1" + "@glimmer/vm" "^0.59.1" + "@glimmer/wire-format" "^0.59.1" + +"@glimmer/program@^0.59.1": + version "0.59.1" + resolved "https://registry.yarnpkg.com/@glimmer/program/-/program-0.59.1.tgz#6f70a04b3b52a7cbd4daa58743fad254befca15f" + integrity sha512-zeUPGym5GqS3glgGKBSfizC6OOwGS6258zjwGXH+9mmjfBFxkiQvDbdzZwWlWDSVGlJvUij/kaeBrIHlY6id8Q== + dependencies: + "@glimmer/encoder" "^0.59.1" + "@glimmer/interfaces" "^0.59.1" + "@glimmer/util" "^0.59.1" + +"@glimmer/reference@^0.59.1": + version "0.59.1" + resolved "https://registry.yarnpkg.com/@glimmer/reference/-/reference-0.59.1.tgz#55f8afc039e318e92c1cf24c7474e3049534bada" + integrity sha512-b7jsJW1nMqeWtvwGE/Dv5R749Mb6xV+ndeKc9Dkh59Lz88W1xneIerBhgldAx2X64yNHyh0CkgUkCkUgBMjeBg== dependencies: "@glimmer/env" "^0.1.7" - "@glimmer/global-context" "^0.59.0" - "@glimmer/interfaces" "^0.59.0" - "@glimmer/util" "^0.59.0" - "@glimmer/validator" "^0.59.0" + "@glimmer/global-context" "^0.59.1" + "@glimmer/interfaces" "^0.59.1" + "@glimmer/util" "^0.59.1" + "@glimmer/validator" "^0.59.1" -"@glimmer/runtime@^0.59.0": - version "0.59.0" - resolved "https://registry.yarnpkg.com/@glimmer/runtime/-/runtime-0.59.0.tgz#9e458752413555be09149deb9387ec6e9bd2c718" - integrity sha512-1mIkLLwiBLQx/+kfsn5TaP5HPNcszJh2aENVa0ai14fCVtNPFNge+B+oQ3FbV944Hb4EzhFAnx9nvVB1NWa0OA== +"@glimmer/runtime@^0.59.1": + version "0.59.1" + resolved "https://registry.yarnpkg.com/@glimmer/runtime/-/runtime-0.59.1.tgz#8d3a0b91330d13ca0abd0e9d6532129112ebb81a" + integrity sha512-TAfEzHS37l5FjjBLlCkcdhapAtF3ktHl0qk7eXrYCsfuyDP3kU99GWfoA9zuuec/bUX37o/vRxgCjuSbfqxdJA== dependencies: "@glimmer/env" "0.1.7" - "@glimmer/global-context" "0.59.0" - "@glimmer/interfaces" "^0.59.0" - "@glimmer/low-level" "^0.59.0" - "@glimmer/program" "^0.59.0" - "@glimmer/reference" "^0.59.0" - "@glimmer/util" "^0.59.0" - "@glimmer/validator" "^0.59.0" - "@glimmer/vm" "^0.59.0" - "@glimmer/wire-format" "^0.59.0" + "@glimmer/global-context" "0.59.1" + "@glimmer/interfaces" "^0.59.1" + "@glimmer/low-level" "^0.59.1" + "@glimmer/program" "^0.59.1" + "@glimmer/reference" "^0.59.1" + "@glimmer/util" "^0.59.1" + "@glimmer/validator" "^0.59.1" + "@glimmer/vm" "^0.59.1" + "@glimmer/wire-format" "^0.59.1" "@simple-dom/interface" "^1.4.0" -"@glimmer/syntax@^0.59.0": - version "0.59.0" - resolved "https://registry.yarnpkg.com/@glimmer/syntax/-/syntax-0.59.0.tgz#5ba14edd7c3d793d9f881ec59fc78991fb3c3f9f" - integrity sha512-cvd9//tWKO5Cb1o0c778cR1O75m3/idnoQv6hJK9jV60KAsKIuZL9gtG0eWOepiLnZYg0oXeLXvzBd3LcedSIg== +"@glimmer/syntax@^0.59.1": + version "0.59.1" + resolved "https://registry.yarnpkg.com/@glimmer/syntax/-/syntax-0.59.1.tgz#a1b97bb0b51d80fef04506efd2e549224a287e5a" + integrity sha512-0ENuadW5uLaIN06jLMD3QkbW20L68dwooCULOKCx5GGXx3cq6DRb0O0u8+6ABKMnxP7BGphmY7OysSk9myKmIA== dependencies: - "@glimmer/interfaces" "^0.59.0" - "@glimmer/util" "^0.59.0" + "@glimmer/interfaces" "^0.59.1" + "@glimmer/util" "^0.59.1" handlebars "^4.7.4" simple-html-tokenizer "^0.5.9" -"@glimmer/util@^0.59.0": - version "0.59.0" - resolved "https://registry.yarnpkg.com/@glimmer/util/-/util-0.59.0.tgz#625a2a4481c9ff3a74edb18f841b6d89459327dd" - integrity sha512-93mlGdNTywN/F58KRWLWc3WKl0kzaiy6dLF7GpHmaPG4lsAAoZ0O0Vbz0nPIe4Qr/IVgDvm5CSa4govwHYjJvg== +"@glimmer/util@^0.59.1": + version "0.59.1" + resolved "https://registry.yarnpkg.com/@glimmer/util/-/util-0.59.1.tgz#7b673293f7b49771308d9ef521811300989bc287" + integrity sha512-jDtAGpsGTVp3Gd6cyEM4/SM/qF8f5t3OEm7dLwAoLK2gDvXcGUmQa/v8CZNbpmwAVlmkQTCtvYf9QjbD1D9I5Q== dependencies: "@glimmer/env" "0.1.7" - "@glimmer/interfaces" "^0.59.0" + "@glimmer/interfaces" "^0.59.1" "@simple-dom/interface" "^1.4.0" -"@glimmer/validator@^0.59.0": - version "0.59.0" - resolved "https://registry.yarnpkg.com/@glimmer/validator/-/validator-0.59.0.tgz#58574fcbeaa5a29c6f0997c0e8a326f8d9a52016" - integrity sha512-kJAE9PicuxTHvCU9zWZdoK7j0vDh35TJ6rhfM1kxW/9IlIu2Q+NrFOT3i3bbxOkN7Z0TFaBvugjCREByw4sFpQ== +"@glimmer/validator@^0.59.1": + version "0.59.1" + resolved "https://registry.yarnpkg.com/@glimmer/validator/-/validator-0.59.1.tgz#1b8863ce13ce589083f06c56ecae275fd4dbaa2a" + integrity sha512-tAQJ0JUSSd9pxQr6R6FlRqobzYpgC1YxdDoRuvZctwS89uYFwzBJ/of5l6ZxGNOTT6PVriYlqJ64aEq+jZUYKA== dependencies: "@glimmer/env" "^0.1.7" - "@glimmer/global-context" "0.59.0" + "@glimmer/global-context" "0.59.1" -"@glimmer/vm@^0.59.0": - version "0.59.0" - resolved "https://registry.yarnpkg.com/@glimmer/vm/-/vm-0.59.0.tgz#667d18b676dd4b7c991473acaabdabf194813676" - integrity sha512-V8jL9i3GkdFp5CoVWk5A0SlwtYauAxj60eblrzR4fUaEy/snEJjOhaMfCT6LH9QBowvvifyqxyY8YagaF0X+9A== +"@glimmer/vm@^0.59.1": + version "0.59.1" + resolved "https://registry.yarnpkg.com/@glimmer/vm/-/vm-0.59.1.tgz#2f4b3d3bc796be09a50c6ffa75817d97b509af83" + integrity sha512-EIM70et1HU9ut7t1U8CfF1igs4JFhffO5tkhIHPpqZHrkiD5gebiVvBzSomviN8zhLS1Hv/F2UJJOgLfY/Q7Fw== dependencies: - "@glimmer/interfaces" "^0.59.0" - "@glimmer/util" "^0.59.0" + "@glimmer/interfaces" "^0.59.1" + "@glimmer/util" "^0.59.1" -"@glimmer/wire-format@^0.59.0": - version "0.59.0" - resolved "https://registry.yarnpkg.com/@glimmer/wire-format/-/wire-format-0.59.0.tgz#d6376e099867970b29d82418b34d36e1a84ccc30" - integrity sha512-TXThBQXZAbN15yWtYDCazzv3i3poWYXZZxcF1LvclxJS40I4E8FOfrl5npinGQeS0XZoypEOpVkne4EAL5cxEw== +"@glimmer/wire-format@^0.59.1": + version "0.59.1" + resolved "https://registry.yarnpkg.com/@glimmer/wire-format/-/wire-format-0.59.1.tgz#d0a6e8f15a8f8c0a50e7ff9cfa943feb12ea8a8f" + integrity sha512-Q4nZilvqhDiSmF34mAYQubo2J7spYzowJ5G2tdbFWNipbg7A7aSYIbPv408WS1RgY9DeQuqkXjRCEq3M5zlt0Q== dependencies: - "@glimmer/interfaces" "^0.59.0" - "@glimmer/util" "^0.59.0" + "@glimmer/interfaces" "^0.59.1" + "@glimmer/util" "^0.59.1" "@simple-dom/document@^1.4.0": version "1.4.0"