diff --git a/src/generators/Generator.ts b/src/generators/Generator.ts index d5ca344470..c57cee27c3 100644 --- a/src/generators/Generator.ts +++ b/src/generators/Generator.ts @@ -214,8 +214,7 @@ export default class Generator { isEventHandler: boolean ): { contexts: Set, - indexes: Set, - snippet: string + indexes: Set } { // this.addSourcemapLocations(expression); @@ -299,8 +298,7 @@ export default class Generator { return { contexts: usedContexts, - indexes: usedIndexes, - snippet: `[✂${expression.start}-${expression.end}✂]`, + indexes: usedIndexes }; } @@ -694,6 +692,7 @@ export default class Generator { }); return { + snippet: `[✂${node.start}-${node.end}✂]`, dependencies: Array.from(dependencies) }; } @@ -721,7 +720,6 @@ export default class Generator { const name = node.destructuredContexts[i]; const value = `${node.context}[${i}]`; - // contexts.set(node.destructuredContexts[i], `${context}[${i}]`); contextDependencies.set(name, node.metadata.dependencies); } } diff --git a/src/generators/dom/visitors/Component.ts b/src/generators/dom/visitors/Component.ts index 0add0d37b8..bfd52559d6 100644 --- a/src/generators/dom/visitors/Component.ts +++ b/src/generators/dom/visitors/Component.ts @@ -352,8 +352,8 @@ function mungeAttribute(attribute: Node, block: Block): Attribute { } // simple dynamic attributes - const { snippet } = block.contextualise(value.expression); - const dependencies = value.metadata.dependencies; + block.contextualise(value.expression); // TODO remove + const { dependencies, snippet } = value.metadata; // TODO only update attributes that have changed return { @@ -374,16 +374,14 @@ function mungeAttribute(attribute: Node, block: Block): Attribute { if (chunk.type === 'Text') { return stringify(chunk.data); } else { - const { snippet } = block.contextualise( - chunk.expression - ); - const dependencies = chunk.metadata.dependencies; + block.contextualise(chunk.expression); // TODO remove + const { dependencies, snippet } = chunk.metadata; - dependencies.forEach(dependency => { + dependencies.forEach((dependency: string) => { allDependencies.add(dependency); }); - return getExpressionPrecedence(chunk.expression) <= 13 ? `( ${snippet} )` : snippet; + return getExpressionPrecedence(chunk.expression) <= 13 ? `(${snippet})` : snippet; } }) .join(' + '); @@ -398,10 +396,8 @@ function mungeAttribute(attribute: Node, block: Block): Attribute { function mungeBinding(binding: Node, block: Block): Binding { const { name } = getObject(binding.value); - const { snippet, contexts } = block.contextualise( - binding.value - ); - const dependencies = binding.metadata.dependencies; + const { contexts } = block.contextualise(binding.value); + const { dependencies, snippet } = binding.metadata; const contextual = block.contexts.has(name); diff --git a/src/generators/dom/visitors/EachBlock.ts b/src/generators/dom/visitors/EachBlock.ts index c2b61c1177..68b2c38c15 100644 --- a/src/generators/dom/visitors/EachBlock.ts +++ b/src/generators/dom/visitors/EachBlock.ts @@ -45,7 +45,8 @@ export default function visitEachBlock( mountOrIntro, }; - const { snippet } = block.contextualise(node.expression); + block.contextualise(node.expression); + const { snippet } = node.metadata; block.builders.init.addLine(`var ${each_block_value} = ${snippet};`); @@ -362,7 +363,7 @@ function unkeyed( block: Block, state: State, node: Node, - snippet, + snippet: string, { create_each_block, each_block_value, @@ -402,8 +403,8 @@ function unkeyed( } `); - const dependencies = node.metadata.dependencies; const allDependencies = new Set(node._block.dependencies); + const { dependencies } = node.metadata; dependencies.forEach((dependency: string) => { allDependencies.add(dependency); }); diff --git a/src/generators/dom/visitors/Element/Attribute.ts b/src/generators/dom/visitors/Element/Attribute.ts index b76a24a10d..a812b74fce 100644 --- a/src/generators/dom/visitors/Element/Attribute.ts +++ b/src/generators/dom/visitors/Element/Attribute.ts @@ -72,8 +72,8 @@ export default function visitAttribute( if (attribute.value.length === 1) { // single {{tag}} — may be a non-string const { expression } = attribute.value[0]; - const { snippet, indexes } = block.contextualise(expression); - const dependencies = attribute.value[0].metadata.dependencies; + const { indexes } = block.contextualise(expression); + const { dependencies, snippet } = attribute.value[0].metadata; value = snippet; dependencies.forEach(d => { @@ -96,8 +96,8 @@ export default function visitAttribute( if (chunk.type === 'Text') { return stringify(chunk.data); } else { - const { snippet, indexes } = block.contextualise(chunk.expression); - const dependencies = chunk.metadata.dependencies; + const { indexes } = block.contextualise(chunk.expression); + const { dependencies, snippet } = chunk.metadata; if (Array.from(indexes).some(index => block.changeableIndexes.get(index))) { hasChangeableIndex = true; diff --git a/src/generators/dom/visitors/Element/StyleAttribute.ts b/src/generators/dom/visitors/Element/StyleAttribute.ts index 391d4b2a72..36bb79e757 100644 --- a/src/generators/dom/visitors/Element/StyleAttribute.ts +++ b/src/generators/dom/visitors/Element/StyleAttribute.ts @@ -36,8 +36,8 @@ export default function visitStyleAttribute( if (chunk.type === 'Text') { return stringify(chunk.data); } else { - const { snippet, indexes } = block.contextualise(chunk.expression); - const dependencies = chunk.metadata.dependencies; + const { indexes } = block.contextualise(chunk.expression); + const { dependencies, snippet } = chunk.metadata; if (Array.from(indexes).some(index => block.changeableIndexes.get(index))) { hasChangeableIndex = true; diff --git a/src/generators/dom/visitors/Element/addBindings.ts b/src/generators/dom/visitors/Element/addBindings.ts index 17e921df14..a2433abf93 100644 --- a/src/generators/dom/visitors/Element/addBindings.ts +++ b/src/generators/dom/visitors/Element/addBindings.ts @@ -92,9 +92,8 @@ export default function addBindings( let updateCondition: string; const { name } = getObject(binding.value); - const { snippet, contexts } = block.contextualise( - binding.value - ); + const { contexts } = block.contextualise(binding.value); + const { snippet } = binding.metadata; // special case: if you have e.g. `` // and `selected` is an object chosen with a