From 4b5d465a97931fef1b8621782d664254c4181a3d Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Sun, 18 Mar 2018 19:48:16 -0400 Subject: [PATCH] prevent name collisions with each block index - fixes #1254 --- src/generators/nodes/EachBlock.ts | 4 +++- test/helpers.js | 4 ++-- test/runtime/index.js | 10 +++++----- .../samples/deconflict-elements-indexes/_config.js | 3 --- 4 files changed, 10 insertions(+), 11 deletions(-) diff --git a/src/generators/nodes/EachBlock.ts b/src/generators/nodes/EachBlock.ts index ba9ffc11a927..fa658c25370d 100644 --- a/src/generators/nodes/EachBlock.ts +++ b/src/generators/nodes/EachBlock.ts @@ -54,9 +54,11 @@ export default class EachBlock extends Node { this.block.contextTypes.set(this.context, 'each'); this.block.indexNames.set(this.context, indexName); this.block.listNames.set(this.context, listName); + if (this.index) { + this.block.getUniqueName(this.index); // this prevents name collisions (#1254) this.block.indexes.set(this.index, this.context); - this.block.changeableIndexes.set(this.index, this.key) + this.block.changeableIndexes.set(this.index, this.key); // TODO is this right? } const context = this.block.getUniqueName(this.context); diff --git a/test/helpers.js b/test/helpers.js index 4a65b995b7ac..82b9cd979874 100644 --- a/test/helpers.js +++ b/test/helpers.js @@ -174,7 +174,7 @@ function capitalise(str) { return str[0].toUpperCase() + str.slice(1); } -export function showOutput(cwd, options = {}, s = svelte) { +export function showOutput(cwd, options = {}, compile = svelte.compile) { glob.sync('**/*.html', { cwd }).forEach(file => { if (file[0] === '_') return; @@ -183,7 +183,7 @@ export function showOutput(cwd, options = {}, s = svelte) { .replace(/^\d/, '_$&') .replace(/[^a-zA-Z0-9_$]/g, ''); - const { code } = s.compile( + const { code } = compile( fs.readFileSync(`${cwd}/${file}`, 'utf-8'), Object.assign(options, { filename: file, diff --git a/test/runtime/index.js b/test/runtime/index.js index a9b95898c458..8dfa1d50fd6b 100644 --- a/test/runtime/index.js +++ b/test/runtime/index.js @@ -27,8 +27,8 @@ function getName(filename) { describe("runtime", () => { before(() => { - svelte$ = loadSvelte(true); svelte = loadSvelte(false); + svelte$ = loadSvelte(true); require.extensions[".html"] = function(module, filename) { const options = Object.assign( @@ -100,7 +100,7 @@ describe("runtime", () => { if (err.frame) { console.error(chalk.red(err.frame)); // eslint-disable-line no-console } - showOutput(cwd, { shared, format: 'cjs', store: !!compileOptions.store }, svelte$); // eslint-disable-line no-console + showOutput(cwd, { shared, format: 'cjs', store: !!compileOptions.store }, compile); // eslint-disable-line no-console throw err; } } @@ -145,7 +145,7 @@ describe("runtime", () => { try { SvelteComponent = require(`./samples/${dir}/main.html`); } catch (err) { - showOutput(cwd, { shared, format: 'cjs', hydratable: hydrate, store: !!compileOptions.store }, svelte$); // eslint-disable-line no-console + showOutput(cwd, { shared, format: 'cjs', hydratable: hydrate, store: !!compileOptions.store }, compile); // eslint-disable-line no-console throw err; } @@ -203,12 +203,12 @@ describe("runtime", () => { config.error(assert, err); } else { failed.add(dir); - showOutput(cwd, { shared, format: 'cjs', hydratable: hydrate, store: !!compileOptions.store }, svelte$); // eslint-disable-line no-console + showOutput(cwd, { shared, format: 'cjs', hydratable: hydrate, store: !!compileOptions.store }, compile); // eslint-disable-line no-console throw err; } }) .then(() => { - if (config.show) showOutput(cwd, { shared, format: 'cjs', hydratable: hydrate, store: !!compileOptions.store }, svelte$); + if (config.show) showOutput(cwd, { shared, format: 'cjs', hydratable: hydrate, store: !!compileOptions.store }, compile); }); }); } diff --git a/test/runtime/samples/deconflict-elements-indexes/_config.js b/test/runtime/samples/deconflict-elements-indexes/_config.js index 1e98e4295ba8..7e3a91a30658 100644 --- a/test/runtime/samples/deconflict-elements-indexes/_config.js +++ b/test/runtime/samples/deconflict-elements-indexes/_config.js @@ -1,7 +1,4 @@ export default { - solo: true, - show: true, - html: `
one