From 9ff5e271eca3be2182c5bc23e9707fdb27293557 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Wed, 22 Nov 2017 14:11:15 -0500 Subject: [PATCH] move dependencies into node.metadata object --- src/generators/Generator.ts | 35 ++++++++++--------- src/generators/dom/preprocess.ts | 16 ++++----- src/generators/dom/visitors/Component.ts | 6 ++-- src/generators/dom/visitors/EachBlock.ts | 2 +- .../dom/visitors/Element/Attribute.ts | 4 +-- .../dom/visitors/Element/StyleAttribute.ts | 2 +- .../dom/visitors/Element/addBindings.ts | 4 +-- .../dom/visitors/Element/meta/Window.ts | 2 +- src/generators/dom/visitors/shared/Tag.ts | 2 +- 9 files changed, 38 insertions(+), 35 deletions(-) diff --git a/src/generators/Generator.ts b/src/generators/Generator.ts index 179a7390a5..d5ca344470 100644 --- a/src/generators/Generator.ts +++ b/src/generators/Generator.ts @@ -213,12 +213,11 @@ export default class Generator { context: string, isEventHandler: boolean ): { - dependencies: string[], contexts: Set, indexes: Set, snippet: string } { - this.addSourcemapLocations(expression); + // this.addSourcemapLocations(expression); const usedContexts: Set = new Set(); const usedIndexes: Set = new Set(); @@ -298,10 +297,7 @@ export default class Generator { }, }); - const dependencies: Set = new Set(expression._dependencies || []); - return { - dependencies: Array.from(dependencies), contexts: usedContexts, indexes: usedIndexes, snippet: `[✂${expression.start}-${expression.end}✂]`, @@ -650,18 +646,23 @@ export default class Generator { walkTemplate() { const { + code, expectedProperties, helpers } = this; const { html } = this.parsed; - function findDependencies(node: Node, contextDependencies: Map, indexes: Set) { - const dependencies: Set = new Set(); - + const contextualise = (node: Node, contextDependencies: Map, indexes: Set) => { + this.addSourcemapLocations(node); // TODO this involves an additional walk — can we roll it in somewhere else? let scope = annotateWithScopes(node); + const dependencies: Set = new Set(); + walk(node, { enter(node: Node, parent: Node) { + code.addSourcemapLocation(node.start); + code.addSourcemapLocation(node.end); + if (node._scope) { scope = node._scope; return; @@ -692,7 +693,9 @@ export default class Generator { expectedProperties.add(dependency); }); - return Array.from(dependencies); + return { + dependencies: Array.from(dependencies) + }; } const contextStack = []; @@ -708,10 +711,10 @@ export default class Generator { walk(html, { enter(node: Node, parent: Node) { if (node.type === 'EachBlock') { - node.dependencies = findDependencies(node.expression, contextDependencies, indexes); + node.metadata = contextualise(node.expression, contextDependencies, indexes); contextDependencies = new Map(contextDependencies); - contextDependencies.set(node.context, node.dependencies); + contextDependencies.set(node.context, node.metadata.dependencies); if (node.destructuredContexts) { for (let i = 0; i < node.destructuredContexts.length; i += 1) { @@ -719,7 +722,7 @@ export default class Generator { const value = `${node.context}[${i}]`; // contexts.set(node.destructuredContexts[i], `${context}[${i}]`); - contextDependencies.set(name, node.dependencies); + contextDependencies.set(name, node.metadata.dependencies); } } @@ -733,22 +736,22 @@ export default class Generator { } if (node.type === 'IfBlock') { - node.dependencies = findDependencies(node.expression, contextDependencies, indexes); + node.metadata = contextualise(node.expression, contextDependencies, indexes); } if (node.type === 'MustacheTag' || node.type === 'RawMustacheTag' || node.type === 'AttributeShorthand') { - node.dependencies = findDependencies(node.expression, contextDependencies, indexes); + node.metadata = contextualise(node.expression, contextDependencies, indexes); this.skip(); } if (node.type === 'Binding') { - node.dependencies = findDependencies(node.value, contextDependencies, indexes); + node.metadata = contextualise(node.value, contextDependencies, indexes); this.skip(); } if (node.type === 'EventHandler' && node.expression) { node.expression.arguments.forEach((arg: Node) => { - arg.dependencies = findDependencies(arg, contextDependencies, indexes); + arg.metadata = contextualise(arg, contextDependencies, indexes); }); this.skip(); } diff --git a/src/generators/dom/preprocess.ts b/src/generators/dom/preprocess.ts index 5c0ede1193..bf48e1ebd0 100644 --- a/src/generators/dom/preprocess.ts +++ b/src/generators/dom/preprocess.ts @@ -74,7 +74,7 @@ const preprocessors = { ) => { cannotUseInnerHTML(node); node.var = block.getUniqueName('text'); - block.addDependencies(node.dependencies); + block.addDependencies(node.metadata.dependencies); }, RawMustacheTag: ( @@ -88,7 +88,7 @@ const preprocessors = { ) => { cannotUseInnerHTML(node); node.var = block.getUniqueName('raw'); - block.addDependencies(node.dependencies); + block.addDependencies(node.metadata.dependencies); }, Text: ( @@ -129,7 +129,7 @@ const preprocessors = { function attachBlocks(node: Node) { node.var = block.getUniqueName(`if_block`); - block.addDependencies(node.dependencies); + block.addDependencies(node.metadata.dependencies); node._block = block.child({ comment: createDebuggingComment(node, generator), @@ -204,7 +204,7 @@ const preprocessors = { cannotUseInnerHTML(node); node.var = block.getUniqueName(`each`); - const { dependencies } = node; + const { dependencies } = node.metadata; block.addDependencies(dependencies); const indexNames = new Map(block.indexNames); @@ -314,7 +314,7 @@ const preprocessors = { if (chunk.type !== 'Text') { if (node.parent) cannotUseInnerHTML(node.parent); - const dependencies = chunk.dependencies; + const dependencies = chunk.metadata.dependencies; block.addDependencies(dependencies); // special case —