From 4a3fc2b78b7b4cec6081e5ebe24dee8d14de760f Mon Sep 17 00:00:00 2001 From: Tom Dale Date: Sun, 29 Oct 2017 16:54:01 -0400 Subject: [PATCH] Use @glimmer/compiler-delegates Note: this commit relies on some unpublished changes in @glimmer/compiler-delegates. --- package.json | 1 + src/bundle.ts | 27 +- src/compiler-delegates/basic.ts | 15 +- src/compiler-delegates/module-unification.ts | 305 ------------------- src/index.ts | 16 +- test/webpack-build-test.ts | 19 +- yarn.lock | 132 +++++++- 7 files changed, 161 insertions(+), 354 deletions(-) delete mode 100644 src/compiler-delegates/module-unification.ts diff --git a/package.json b/package.json index d79c8da..2139908 100644 --- a/package.json +++ b/package.json @@ -51,6 +51,7 @@ }, "dependencies": { "@glimmer/bundle-compiler": "^0.29.8", + "@glimmer/compiler-delegates": "^0.9.0-alpha.1", "@glimmer/syntax": "^0.29.8", "babel-core": "^7.0.0-alpha.19", "babel-plugin-syntax-class-properties": "^7.0.0-alpha.19", diff --git a/src/bundle.ts b/src/bundle.ts index 0025f6d..4c4651d 100644 --- a/src/bundle.ts +++ b/src/bundle.ts @@ -1,10 +1,10 @@ import { ConcatSource, RawSource } from 'webpack-sources'; -import { BundleCompiler, CompilerDelegate, Specifier, specifierFor, SpecifierMap } from '@glimmer/bundle-compiler'; +import { BundleCompiler, Specifier, specifierFor } from '@glimmer/bundle-compiler'; import { expect } from '@glimmer/util'; +import { ConstantPool } from '@glimmer/program'; +import { BundleCompilerDelegate } from '@glimmer/compiler-delegates'; import ComponentRegistry from './component-registry'; -import { ConstantPool } from '@glimmer/program'; -import { AST } from '@glimmer/syntax'; export interface Resolver { resolveSync(context: {}, path: string, request: string): string | null; @@ -14,13 +14,6 @@ export interface Specifiers { [key: string]: Specifier; } -export interface BundleCompilerDelegate extends CompilerDelegate { - bundleCompiler: BundleCompiler; - add(modulePath: string, templateSource: string, meta: Metadata): void; - addAST(modulePath: string, ast: AST.Program): void; - generateDataSegment(map: SpecifierMap, pool: ConstantPool, heapTable: number[]): string; -} - interface BundleOptions { helpers?: Specifiers; delegate: BundleCompilerDelegate; @@ -54,15 +47,17 @@ export default class Bundle { this.helpers = helpers || {}; this.delegate = delegate; - this.bundleCompiler = delegate.bundleCompiler = new BundleCompiler(delegate); + this.bundleCompiler = new BundleCompiler(delegate); } - add(modulePath: string, templateSource: string, meta: Metadata) { - this.delegate.add(modulePath, templateSource, meta); + add(absoluteModulePath: string, templateSource: string, _meta: Metadata) { + let specifier = this.normalizeSpecifier(absoluteModulePath); + this.bundleCompiler.add(specifier, templateSource); } - addAST(modulePath: string, ast: AST.Program) { - this.delegate.addAST(modulePath, ast); + protected normalizeSpecifier(absoluteModulePath: string) { + let normalizedPath = this.delegate.normalizePath(absoluteModulePath); + return specifierFor(normalizedPath, 'default'); } compile() { @@ -79,7 +74,7 @@ export default class Bundle { entryHandle }; - let data = this.delegate.generateDataSegment(map, pool, heap.table); + let data = this.delegate.generateDataSegment(map, pool, heap.table, heap.handle, bundleCompiler.compiledBlocks); return { bytecode: new RawSource(heap.buffer as any), diff --git a/src/compiler-delegates/basic.ts b/src/compiler-delegates/basic.ts index 9382cec..262c5ba 100644 --- a/src/compiler-delegates/basic.ts +++ b/src/compiler-delegates/basic.ts @@ -7,7 +7,7 @@ import { expect } from '@glimmer/util'; import { specifierFor, BundleCompiler, Specifier } from '@glimmer/bundle-compiler'; import Scope from '../scope'; import { SerializedTemplateBlock } from '@glimmer/wire-format'; -import { BundleCompilerDelegate } from '../bundle'; +import { BundleCompilerDelegate } from '@glimmer/compiler-delegates'; import { TemplateCompiler } from '@glimmer/compiler'; import { AST } from '@glimmer/syntax'; @@ -21,20 +21,17 @@ const CAPABILITIES = { attributeHook: true }; -interface BasicMetadata { - scope: Scope; -} - export default class BasicCompilerDelegate implements BundleCompilerDelegate { bundleCompiler: BundleCompiler; protected scopes = new Map(); - add(modulePath: string, templateSource: string, meta: BasicMetadata) { - let specifier = specifierFor(modulePath, 'default'); - this.bundleCompiler.add(specifier, templateSource); + normalizePath(absoluteModulePath: string) { + return absoluteModulePath; + } - this.scopes.set(specifier, meta.scope); + specifierFor(modulePath: string) { + return specifierFor(modulePath, 'default'); } addAST(modulePath: string, ast: AST.Program) { diff --git a/src/compiler-delegates/module-unification.ts b/src/compiler-delegates/module-unification.ts deleted file mode 100644 index 85c4af0..0000000 --- a/src/compiler-delegates/module-unification.ts +++ /dev/null @@ -1,305 +0,0 @@ -import { relative } from 'path'; -import Debug = require('debug'); -import { Project } from 'glimmer-analyzer'; - -import { Specifier, specifierFor, BundleCompiler, SpecifierMap } from '@glimmer/bundle-compiler'; -import { CompilableTemplate, CompileOptions } from '@glimmer/opcode-compiler'; -import { SerializedTemplateBlock } from '@glimmer/wire-format'; -import { expect, Dict } from '@glimmer/util'; -import { AST } from '@glimmer/syntax'; - -import { BundleCompilerDelegate } from '../bundle'; -import { getImportStatements } from './utils/codegen'; -import { ConstantPool } from '@glimmer/program'; -import { SymbolTable } from '@glimmer/interfaces'; -import { TemplateCompiler } from "@glimmer/compiler"; - -const debug = Debug('glimmer-compiler-webpack-plugin:mu-delegate'); - -const CAPABILITIES = { - dynamicLayout: false, - prepareArgs: false, - elementHook: true, - staticDefinitions: false, - dynamicTag: true, - createArgs: true, - attributeHook: true -}; - -const BUILTINS = ['action', 'if', '/css-blocks/components/state', '/css-blocks/components/concat']; - -export default class ModuleUnificationCompilerDelegate implements BundleCompilerDelegate { - public bundleCompiler: BundleCompiler; - protected project: Project; - protected specifiersToSymbolTable: Map = new Map(); - - constructor(protected projectPath: string) { - debug('initialized MU compiler delegate; project=%s', projectPath); - this.project = new Project(projectPath); - } - - add(modulePath: string, templateSource: string, meta: {}) { - let normalizedPath = this.pathRelativeFromProject(modulePath); - let specifier = specifierFor(normalizedPath, 'default'); - - debug('add; path=%s; specifier=%o; meta=%o; template=%o', modulePath, specifier, meta, templateSource); - - let block = this.bundleCompiler.add(specifier, templateSource); - - let symbolTable = { - hasEval: block.hasEval, - symbols: block.symbols, - referrer: specifier - }; - - this.specifiersToSymbolTable.set(specifier, symbolTable); - } - - addAST(modulePath: string, ast: AST.Program) { - let normalizedPath = this.pathRelativeFromProject(modulePath); - let specifier = specifierFor(normalizedPath, 'default'); - - let template = TemplateCompiler.compile({ meta: specifier }, ast) - let block = template.toJSON(); - - debug('add custom; path=%s; specifier=%o; ast=%o', modulePath, specifier, block); - - let compilable = CompilableTemplate.topLevel(block, this.bundleCompiler.compileOptions(specifier)); - this.bundleCompiler.addCustom(specifier, compilable); - - let symbolTable = { - hasEval: block.hasEval, - symbols: block.symbols, - referrer: specifier - }; - - this.specifiersToSymbolTable.set(specifier, symbolTable); - } - - hasComponentInScope(name: string, referrer: Specifier) { - debug('hasComponentInScope; name=%s; referrer=%o', name, referrer); - - let referrerSpec = expect( - this.project.specifierForPath(referrer.module), - `The component <${name}> was used in ${referrer.module} but could not be found.` - ); - - return !!this.project.resolver.identify(`template:${name}`, referrerSpec); - } - - resolveComponentSpecifier(name: string, referrer: Specifier) { - let referrerSpec = expect(this.project.specifierForPath(referrer.module), `expected specifier for path ${referrer.module}`); - let resolved = this.project.resolver.identify(`template:${name}`, referrerSpec); - - let resolvedSpecifier = this.getCompilerSpecifier(resolved); - - debug('resolveComponentSpecifier; name=%s; referrer=%o; resolved=%o', name, referrer, resolvedSpecifier); - return resolvedSpecifier; - } - - /** - * Converts a path relative to the current working directory into a path - * relative to the project root. - */ - protected pathRelativeFromProject(modulePath: string): string { - let project = this.project; - let projectPath = relative(process.cwd(), project.projectDir); - - return relative(projectPath, modulePath); - } - - protected getCompilerSpecifier(specifier: string): Specifier { - let modulePath = expect(this.project.pathForSpecifier(specifier), `couldn't find module with specifier '${specifier}'`); - - return specifierFor(modulePath, 'default'); - } - - getComponentCapabilities() { - return CAPABILITIES; - } - - hasHelperInScope(helperName: string, referrer: Specifier) { - debug('hasHelperInScope; name=%s; referrer=%o', helperName, referrer); - if (BUILTINS.indexOf(helperName) > -1) { return true; } - - let referrerSpec = this.project.specifierForPath(referrer.module) || undefined; - return !!this.project.resolver.identify(`helper:${helperName}`, referrerSpec); - } - - resolveHelperSpecifier(helperName: string, referrer: Specifier) { - debug('resolveHelperSpecifier; name=%s; referrer=%o', helperName, referrer); - - if (BUILTINS.indexOf(helperName) > -1) { - return specifierFor('__BUILTIN__', helperName); - } - - let referrerSpec = this.project.specifierForPath(referrer.module) || undefined; - let resolvedSpec = this.project.resolver.identify(`helper:${helperName}`, referrerSpec); - - if (!resolvedSpec) { - return specifierFor('__UNKNOWN__', 'default'); - } - return this.getCompilerSpecifier(resolvedSpec); - } - - getComponentLayout(specifier: Specifier, block: SerializedTemplateBlock, options: CompileOptions) { - debug('building component layout; specifier=%o; block=%o', specifier, block); - - return CompilableTemplate.topLevel(block, options); - } - - generateDataSegment(map: SpecifierMap, pool: ConstantPool, table: number[]) { - debug('generating data segment'); - - let externalModuleTable = this.generateExternalModuleTable(map); - let constantPool = this.generateConstantPool(pool); - let heapTable = this.generateHeapTable(table); - let specifierMap = this.generateSpecifierMap(map); - let symbolTables = this.generateSymbolTables(); - - let source = ` -${externalModuleTable} -${heapTable} -${constantPool} -${specifierMap} -${symbolTables} - -export default { moduleTable, heapTable, pool, specifierMap, symbolTables };` - debug('generated data segment; source=%s', source); - - return source; - } - - generateSymbolTables() { - let symbolTables: Dict = {}; - - for (let [specifier, table] of this.specifiersToSymbolTable) { - let muSpecifier = this.muSpecifierForSpecifier(specifier); - symbolTables[muSpecifier] = table; - } - - return `const symbolTables = ${inlineJSON(symbolTables)};`; - } - - generateSpecifierMap(map: SpecifierMap) { - let entries = Array.from(map.vmHandleBySpecifier.entries()); - let specifierMap: Dict = {}; - - for (let [specifier, handle] of entries) { - let muSpecifier = this.muSpecifierForSpecifier(specifier); - - specifierMap[muSpecifier] = handle; - } - - return `const specifierMap = ${inlineJSON(specifierMap)};`; - } - - muSpecifierForSpecifier(specifier: Specifier): string { - let { module } = specifier; - let project = this.project; - - if (module === '__BUILTIN__') { - return module; - } - - return expect( - project.specifierForPath(specifier.module), - `expected to have a MU specifier for module ${specifier.module}` - ); - } - - generateHeapTable(table: number[]) { - return ` -const heapTable = ${inlineJSON(table)}; -` - } - - generateConstantPool(pool: ConstantPool) { - return ` -const pool = ${inlineJSON(pool)}; -`; - } - - generateExternalModuleTable(map: SpecifierMap) { - let project = this.project; - let self = this; - - // First, convert the map into an array of specifiers, using the handle - // as the index. - let modules = toSparseArray(map.byHandle) - .map(normalizeModulePaths) - .filter(m => m) as Specifier[]; - - let source = generateExternalModuleTable(modules); - - return source; - - function normalizeModulePaths(moduleSpecifier: Specifier) { - let specifier = self.muSpecifierForSpecifier(moduleSpecifier); - - debug('resolved MU specifier; specifier=%s', specifier); - - let [type] = specifier.split(':'); - - switch (type) { - case 'template': - return getComponentImport(specifier); - case 'helper': - return moduleSpecifier; - case '__BUILTIN__': - return null; - default: - throw new Error(`Unsupported type in specifier map: ${type}`); - } - } - - function getComponentImport(referrer: string): Specifier | null { - let componentSpec = project.resolver.identify('component:', referrer); - if (componentSpec) { - let componentPath = project.pathForSpecifier(componentSpec)!; - debug('found corresponding component; referrer=%s; path=%s', referrer, componentPath); - return specifierFor(componentPath, 'default'); - } - - debug('no component for template; referrer=%s', referrer); - return null; - } - } - - hasModifierInScope(_modifierName: string, _referrer: Specifier): boolean { - return false; - } - resolveModifierSpecifier(_modifierName: string, _referrer: Specifier): Specifier { - throw new Error("Method not implemented."); - } - hasPartialInScope(_partialName: string, _referrer: Specifier): boolean { - return false; - } - resolvePartialSpecifier(_partialName: string, _referrer: Specifier): Specifier { - throw new Error("Method not implemented."); - } -}; - -function generateExternalModuleTable(modules: Specifier[]) { - let { imports, identifiers } = getImportStatements(modules); - - return ` -${imports.join('\n')} - -const moduleTable = [${identifiers.join(',')}]; -`; -} - -function inlineJSON(data: any) { - return `JSON.parse(${JSON.stringify(JSON.stringify(data))})`; -} - -function toSparseArray(map: Map): T[] { - let array: T[] = []; - - for (let [key, value] of map) { - array[key] = value; - } - - return array; -} diff --git a/src/index.ts b/src/index.ts index c8e8126..ec57d93 100644 --- a/src/index.ts +++ b/src/index.ts @@ -4,12 +4,11 @@ import { Source } from 'webpack-sources'; import Debug = require('debug'); import { expect } from '@glimmer/util'; +import { BundleCompilerDelegate, ModuleUnificationCompilerDelegate } from '@glimmer/compiler-delegates'; -import Bundle, { Specifiers, BundleCompilerDelegate } from './bundle'; -import Scope from './scope'; +import Bundle, { Specifiers } from './bundle'; import BasicCompilerDelegate from './compiler-delegates/basic'; -import ModuleUnificationCompilerDelegate from './compiler-delegates/module-unification'; -import { AST } from '@glimmer/syntax'; +import Scope from './scope'; const debug = Debug('glimmer-compiler-webpack-plugin:plugin'); @@ -94,10 +93,6 @@ class GlimmerCompiler { this.bundle.add(path, template, scope); } - addAST(path: string, ast: AST.Program) { - this.bundle.addAST(path, ast); - } - apply(compiler: Compiler) { debug('applying plugin'); let inputPath = expect(this.options.context || compiler.options.context, 'expected compiler to have a context'); @@ -176,7 +171,10 @@ class GlimmerCompiler { } } - return new CompilerDelegate(inputPath); + return new CompilerDelegate(inputPath, { + dataSegment: 'table.js', + heapFile: 'templates.gbx' + }); } } diff --git a/test/webpack-build-test.ts b/test/webpack-build-test.ts index 70f64f9..e45496d 100644 --- a/test/webpack-build-test.ts +++ b/test/webpack-build-test.ts @@ -47,7 +47,7 @@ describe('component loader', () => { // Each segment represents how many items where compiled into the buffer expect(bundle.heapTable.length / 4).to.equal(5); - expect(bundle.moduleTable.length).to.equal(2); + expect(bundle.moduleTable.length).to.equal(3); expect(bundle.pool.strings.sort()).to.deep.equal([ 'div', 'OtherComponent ', 'h1', 'UserNav ', 'wat', '\n', '\n Yo yo ' @@ -66,26 +66,17 @@ describe('component loader', () => { expect(bundle.symbolTables).to.deep.equal({ 'template:/such-webpack/components/DropDown': { hasEval: false, - referrer: { - module: 'src/ui/components/DropDown/template.hbs', - name: 'default' - }, + referrer: null, symbols: [] }, 'template:/such-webpack/components/OtherComponent': { hasEval: false, - referrer: { - module: 'src/ui/components/OtherComponent/template.hbs', - name: 'default' - }, + referrer: null, symbols: [] }, 'template:/such-webpack/components/UserNav': { hasEval: false, - referrer: { - module: 'src/ui/components/UserNav/template.hbs', - name: 'default' - }, + referrer: null, symbols: [] } }); @@ -109,4 +100,4 @@ function sortedValues(obj: { [s: string]: number }): number[] { return values .sort((a, b) => a - b); -} \ No newline at end of file +} diff --git a/yarn.lock b/yarn.lock index d9dba56..dbeea12 100644 --- a/yarn.lock +++ b/yarn.lock @@ -15,6 +15,22 @@ "@glimmer/wire-format" "^0.29.8" simple-html-tokenizer "^0.4.1" +"@glimmer/compiler-delegates@^0.9.0-alpha.1": + version "0.9.0-alpha.1" + resolved "https://registry.yarnpkg.com/@glimmer/compiler-delegates/-/compiler-delegates-0.9.0-alpha.1.tgz#5831f4747d05731c47a4325d42163ceb63e20c9d" + dependencies: + "@glimmer/bundle-compiler" "^0.29.8" + "@glimmer/component" "^0.9.0-alpha.1" + "@glimmer/interfaces" "^0.29.8" + "@glimmer/opcode-compiler" "^0.29.8" + "@glimmer/program" "^0.29.8" + "@glimmer/syntax" "^0.29.8" + "@glimmer/util" "^0.29.8" + "@types/node" "^8.0.46" + debug "^3.1.0" + glimmer-analyzer "^0.3.2" + resolve "^1.4.0" + "@glimmer/compiler@^0.29.8": version "0.29.8" resolved "https://registry.yarnpkg.com/@glimmer/compiler/-/compiler-0.29.8.tgz#1a2311ac24eba5b49310889b0827d28e24da38d8" @@ -25,14 +41,42 @@ "@glimmer/wire-format" "^0.29.8" simple-html-tokenizer "^0.4.1" +"@glimmer/component@^0.9.0-alpha.1": + version "0.9.0-alpha.1" + resolved "https://registry.yarnpkg.com/@glimmer/component/-/component-0.9.0-alpha.1.tgz#5937b456b94ea45fc085e9e142ce8d57b593f6b1" + dependencies: + "@glimmer/di" "^0.1.9" + "@glimmer/env" "^0.1.7" + "@glimmer/reference" "^0.29.8" + "@glimmer/runtime" "^0.29.8" + "@glimmer/util" "^0.29.8" + +"@glimmer/di@^0.1.9": + version "0.1.11" + resolved "https://registry.yarnpkg.com/@glimmer/di/-/di-0.1.11.tgz#a6878c07a13a2c2c76fcde598a5c97637bfc4280" + "@glimmer/di@^0.2.0": version "0.2.0" resolved "https://registry.yarnpkg.com/@glimmer/di/-/di-0.2.0.tgz#73bfd4a6ee4148a80bf092e8a5d29bcac9d4ce7e" +"@glimmer/encoder@^0.29.10": + version "0.29.10" + resolved "https://registry.yarnpkg.com/@glimmer/encoder/-/encoder-0.29.10.tgz#a49c61a0794d2e1b218ec0a563d0f84dca08334c" + "@glimmer/encoder@^0.29.8": version "0.29.8" resolved "https://registry.yarnpkg.com/@glimmer/encoder/-/encoder-0.29.8.tgz#bbd6657928144dca5622754a4c810137d21c8351" +"@glimmer/env@^0.1.7": + version "0.1.7" + resolved "https://registry.yarnpkg.com/@glimmer/env/-/env-0.1.7.tgz#fd2d2b55a9029c6b37a6c935e8c8871ae70dfa07" + +"@glimmer/interfaces@^0.29.10": + version "0.29.10" + resolved "https://registry.yarnpkg.com/@glimmer/interfaces/-/interfaces-0.29.10.tgz#7744451ca329a42c62b08fa460808bccbddeb2ab" + dependencies: + "@glimmer/wire-format" "^0.29.10" + "@glimmer/interfaces@^0.29.7": version "0.29.7" resolved "https://registry.yarnpkg.com/@glimmer/interfaces/-/interfaces-0.29.7.tgz#e63e37f95a8ff27019105220ec4c844ebb080449" @@ -45,6 +89,33 @@ dependencies: "@glimmer/wire-format" "^0.29.8" +"@glimmer/object-reference@^0.29.10": + version "0.29.10" + resolved "https://registry.yarnpkg.com/@glimmer/object-reference/-/object-reference-0.29.10.tgz#9e0acc15779611d306b66819088b0aee2cf06a48" + dependencies: + "@glimmer/reference" "^0.29.10" + "@glimmer/util" "^0.29.10" + +"@glimmer/object@^0.29.10": + version "0.29.10" + resolved "https://registry.yarnpkg.com/@glimmer/object/-/object-0.29.10.tgz#ce450757598274e476f73f61a3a36a26f81642e5" + dependencies: + "@glimmer/object-reference" "^0.29.10" + "@glimmer/util" "^0.29.10" + +"@glimmer/opcode-compiler@^0.29.10": + version "0.29.10" + resolved "https://registry.yarnpkg.com/@glimmer/opcode-compiler/-/opcode-compiler-0.29.10.tgz#37bb4413e614e442c908d2a38725c9358e4c7e45" + dependencies: + "@glimmer/encoder" "^0.29.10" + "@glimmer/interfaces" "^0.29.10" + "@glimmer/program" "^0.29.10" + "@glimmer/syntax" "^0.29.10" + "@glimmer/util" "^0.29.10" + "@glimmer/vm" "^0.29.10" + "@glimmer/wire-format" "^0.29.10" + simple-html-tokenizer "^0.4.1" + "@glimmer/opcode-compiler@^0.29.8": version "0.29.8" resolved "https://registry.yarnpkg.com/@glimmer/opcode-compiler/-/opcode-compiler-0.29.8.tgz#6cc8fa4c5b6b41e17b9e55b1b4eb9e77799a0af2" @@ -58,6 +129,14 @@ "@glimmer/wire-format" "^0.29.8" simple-html-tokenizer "^0.4.1" +"@glimmer/program@^0.29.10": + version "0.29.10" + resolved "https://registry.yarnpkg.com/@glimmer/program/-/program-0.29.10.tgz#c9a2facda2812b6314f3f7f2153cd51f5e51bfba" + dependencies: + "@glimmer/encoder" "^0.29.10" + "@glimmer/interfaces" "^0.29.10" + "@glimmer/util" "^0.29.10" + "@glimmer/program@^0.29.8": version "0.29.8" resolved "https://registry.yarnpkg.com/@glimmer/program/-/program-0.29.8.tgz#a770f035551af8cd358f7006d7cd19113c23abe9" @@ -66,6 +145,12 @@ "@glimmer/interfaces" "^0.29.8" "@glimmer/util" "^0.29.8" +"@glimmer/reference@^0.29.10", "@glimmer/reference@^0.29.8": + version "0.29.10" + resolved "https://registry.yarnpkg.com/@glimmer/reference/-/reference-0.29.10.tgz#fc5db84f5b2a9aeef28e1407a54679cf5817acab" + dependencies: + "@glimmer/util" "^0.29.10" + "@glimmer/resolution-map-builder@^0.4.0": version "0.4.0" resolved "https://registry.yarnpkg.com/@glimmer/resolution-map-builder/-/resolution-map-builder-0.4.0.tgz#b999b51ea3046a44b323e7ef3683c22c99807ee3" @@ -80,6 +165,20 @@ dependencies: "@glimmer/di" "^0.2.0" +"@glimmer/runtime@^0.29.8": + version "0.29.10" + resolved "https://registry.yarnpkg.com/@glimmer/runtime/-/runtime-0.29.10.tgz#90dce95aa6b596ff1134a11de1c77f50110c38b9" + dependencies: + "@glimmer/interfaces" "^0.29.10" + "@glimmer/object" "^0.29.10" + "@glimmer/object-reference" "^0.29.10" + "@glimmer/opcode-compiler" "^0.29.10" + "@glimmer/program" "^0.29.10" + "@glimmer/reference" "^0.29.10" + "@glimmer/util" "^0.29.10" + "@glimmer/vm" "^0.29.10" + "@glimmer/wire-format" "^0.29.10" + "@glimmer/syntax@^0.29.1": version "0.29.7" resolved "https://registry.yarnpkg.com/@glimmer/syntax/-/syntax-0.29.7.tgz#6b5754d1e5c842265affff8f0ff957453fda7f98" @@ -89,6 +188,15 @@ handlebars "^4.0.6" simple-html-tokenizer "^0.4.1" +"@glimmer/syntax@^0.29.10": + version "0.29.10" + resolved "https://registry.yarnpkg.com/@glimmer/syntax/-/syntax-0.29.10.tgz#2a074223fc3b42d49c8b9345684a80b5133dc030" + dependencies: + "@glimmer/interfaces" "^0.29.10" + "@glimmer/util" "^0.29.10" + handlebars "^4.0.6" + simple-html-tokenizer "^0.4.1" + "@glimmer/syntax@^0.29.8": version "0.29.8" resolved "https://registry.yarnpkg.com/@glimmer/syntax/-/syntax-0.29.8.tgz#ada0e17d34fe0c8ce5b60f637e44c707f035d5ba" @@ -98,6 +206,10 @@ handlebars "^4.0.6" simple-html-tokenizer "^0.4.1" +"@glimmer/util@^0.29.10": + version "0.29.10" + resolved "https://registry.yarnpkg.com/@glimmer/util/-/util-0.29.10.tgz#8662daf273ffef9254b8d943d39aa396ed7225a5" + "@glimmer/util@^0.29.7": version "0.29.7" resolved "https://registry.yarnpkg.com/@glimmer/util/-/util-0.29.7.tgz#71ddcef06d425b7ad5c468f8003b73966c27f6a8" @@ -106,6 +218,14 @@ version "0.29.8" resolved "https://registry.yarnpkg.com/@glimmer/util/-/util-0.29.8.tgz#371e598b34abc93e0a1618c43842d8bbf3f1d108" +"@glimmer/vm@^0.29.10": + version "0.29.10" + resolved "https://registry.yarnpkg.com/@glimmer/vm/-/vm-0.29.10.tgz#e723ea7d23960dd470cc73ec31e02fd74cab2cd8" + dependencies: + "@glimmer/interfaces" "^0.29.10" + "@glimmer/program" "^0.29.10" + "@glimmer/util" "^0.29.10" + "@glimmer/vm@^0.29.8": version "0.29.8" resolved "https://registry.yarnpkg.com/@glimmer/vm/-/vm-0.29.8.tgz#9e02ec4db458616a7fe0787fe9390c694b4319d8" @@ -114,6 +234,12 @@ "@glimmer/program" "^0.29.8" "@glimmer/util" "^0.29.8" +"@glimmer/wire-format@^0.29.10": + version "0.29.10" + resolved "https://registry.yarnpkg.com/@glimmer/wire-format/-/wire-format-0.29.10.tgz#90e82f67a6325468d6fee4f8dd7affc1070a9557" + dependencies: + "@glimmer/util" "^0.29.10" + "@glimmer/wire-format@^0.29.7": version "0.29.7" resolved "https://registry.yarnpkg.com/@glimmer/wire-format/-/wire-format-0.29.7.tgz#085a41c3d4fb09b3463b7131a009358c81de3a0e" @@ -173,6 +299,10 @@ version "8.0.24" resolved "https://registry.yarnpkg.com/@types/node/-/node-8.0.24.tgz#06c580084d9add1fb40c1510ef0b448961246fb1" +"@types/node@^8.0.46": + version "8.0.47" + resolved "https://registry.yarnpkg.com/@types/node/-/node-8.0.47.tgz#968e596f91acd59069054558a00708c445ca30c2" + "@types/resolve@^0.0.4": version "0.0.4" resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-0.0.4.tgz#9b586d65a947dea88c4bc24da0b905fe9520a0d5" @@ -1193,7 +1323,7 @@ getpass@^0.1.1: dependencies: assert-plus "^1.0.0" -glimmer-analyzer@^0.3.1: +glimmer-analyzer@^0.3.1, glimmer-analyzer@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/glimmer-analyzer/-/glimmer-analyzer-0.3.2.tgz#801f051db5943e529c60cb483c4f78e35623e395" dependencies: