diff --git a/rollup/rollup.config.main.js b/rollup/rollup.config.main.js index 790c9b232d..334ead6860 100644 --- a/rollup/rollup.config.main.js +++ b/rollup/rollup.config.main.js @@ -1,6 +1,7 @@ import nodeResolve from 'rollup-plugin-node-resolve'; import commonjs from 'rollup-plugin-commonjs'; import json from 'rollup-plugin-json'; +import buble from 'rollup-plugin-buble'; export default { entry: 'src/index.js', @@ -11,7 +12,14 @@ export default { plugins: [ nodeResolve({ jsnext: true, module: true }), commonjs(), - json() + json(), + buble({ + include: 'src/**', + exclude: 'src/shared/**', + transforms: { + dangerousTaggedTemplateString: true + } + }) ], external: [ 'magic-string' ], globals: { diff --git a/rollup/rollup.config.ssr.js b/rollup/rollup.config.ssr.js index 6f8922a854..6d16a185ae 100644 --- a/rollup/rollup.config.ssr.js +++ b/rollup/rollup.config.ssr.js @@ -1,6 +1,7 @@ import * as path from 'path'; import nodeResolve from 'rollup-plugin-node-resolve'; import commonjs from 'rollup-plugin-commonjs'; +import buble from 'rollup-plugin-buble'; export default { entry: 'src/server-side-rendering/register.js', @@ -10,7 +11,14 @@ export default { ], plugins: [ nodeResolve({ jsnext: true, module: true }), - commonjs() + commonjs(), + buble({ + include: 'src/**', + exclude: 'src/shared/**', + transforms: { + dangerousTaggedTemplateString: true + } + }) ], external: [ path.resolve( 'src/index.js' ), 'fs', 'path', 'magic-string' ], paths: { diff --git a/src/generators/dom/visitors/Component.js b/src/generators/dom/visitors/Component.js index f0d0b53d95..990b947f7c 100644 --- a/src/generators/dom/visitors/Component.js +++ b/src/generators/dom/visitors/Component.js @@ -16,7 +16,7 @@ export default { namespace: generator.current.namespace, isComponent: true, - allUsedContexts: new Set(), + allUsedContexts: [], init: new CodeBuilder(), update: new CodeBuilder() @@ -28,10 +28,8 @@ export default { addComponentAttributes( generator, node, local ); - if ( local.allUsedContexts.size ) { - const contextNames = [...local.allUsedContexts]; - - const initialProps = contextNames.map( contextName => { + if ( local.allUsedContexts.length ) { + const initialProps = local.allUsedContexts.map( contextName => { if ( contextName === 'root' ) return `root: root`; const listName = generator.current.listNames[ contextName ]; @@ -40,7 +38,7 @@ export default { return `${listName}: ${listName},\n${indexName}: ${indexName}`; }).join( ',\n' ); - const updates = contextNames.map( contextName => { + const updates = local.allUsedContexts.map( contextName => { if ( contextName === 'root' ) return `${name}._context.root = root;`; const listName = generator.current.listNames[ contextName ]; diff --git a/src/generators/dom/visitors/Element.js b/src/generators/dom/visitors/Element.js index 3338c088ef..275f98429e 100644 --- a/src/generators/dom/visitors/Element.js +++ b/src/generators/dom/visitors/Element.js @@ -17,7 +17,7 @@ export default { namespace: node.name === 'svg' ? 'http://www.w3.org/2000/svg' : generator.current.namespace, isComponent: false, - allUsedContexts: new Set(), + allUsedContexts: [], init: new CodeBuilder(), update: new CodeBuilder() @@ -27,10 +27,8 @@ export default { addElementAttributes( generator, node, local ); - if ( local.allUsedContexts.size ) { - const contextNames = [...local.allUsedContexts]; - - const initialProps = contextNames.map( contextName => { + if ( local.allUsedContexts.length ) { + const initialProps = local.allUsedContexts.map( contextName => { if ( contextName === 'root' ) return `root: root`; const listName = generator.current.listNames[ contextName ]; @@ -39,7 +37,7 @@ export default { return `${listName}: ${listName},\n${indexName}: ${indexName}`; }).join( ',\n' ); - const updates = contextNames.map( contextName => { + const updates = local.allUsedContexts.map( contextName => { if ( contextName === 'root' ) return `${name}.__svelte.root = root;`; const listName = generator.current.listNames[ contextName ]; diff --git a/src/generators/dom/visitors/attributes/addComponentAttributes.js b/src/generators/dom/visitors/attributes/addComponentAttributes.js index 4b05faffac..888b3ca3d5 100644 --- a/src/generators/dom/visitors/attributes/addComponentAttributes.js +++ b/src/generators/dom/visitors/attributes/addComponentAttributes.js @@ -82,18 +82,18 @@ export default function addComponentAttributes ( generator, node, local ) { generator.addSourcemapLocations( attribute.expression ); generator.code.prependRight( attribute.expression.start, 'component.' ); - const usedContexts = new Set(); + const usedContexts = []; attribute.expression.arguments.forEach( arg => { const { contexts } = generator.contextualise( arg, true, true ); contexts.forEach( context => { - usedContexts.add( context ); - local.allUsedContexts.add( context ); + if ( !~usedContexts.indexOf( context ) ) usedContexts.push( context ); + if ( !~local.allUsedContexts.indexOf( context ) ) local.allUsedContexts.push( context ); }); }); // TODO hoist event handlers? can do `this.__component.method(...)` - const declarations = [...usedContexts].map( name => { + const declarations = usedContexts.map( name => { if ( name === 'root' ) return 'var root = this._context.root;'; const listName = generator.current.listNames[ name ]; diff --git a/src/generators/dom/visitors/attributes/addElementAttributes.js b/src/generators/dom/visitors/attributes/addElementAttributes.js index 60dcdc7d23..6c85f6a73c 100644 --- a/src/generators/dom/visitors/attributes/addElementAttributes.js +++ b/src/generators/dom/visitors/attributes/addElementAttributes.js @@ -155,18 +155,18 @@ export default function addElementAttributes ( generator, node, local ) { generator.code.prependRight( attribute.expression.start, 'component.' ); } - const usedContexts = new Set(); + const usedContexts = []; attribute.expression.arguments.forEach( arg => { const { contexts } = generator.contextualise( arg, true ); contexts.forEach( context => { - usedContexts.add( context ); - local.allUsedContexts.add( context ); + if ( !~usedContexts.indexOf( context ) ) usedContexts.push( context ); + if ( !~local.allUsedContexts.indexOf( context ) ) local.allUsedContexts.push( context ); }); }); // TODO hoist event handlers? can do `this.__component.method(...)` - const declarations = [...usedContexts].map( name => { + const declarations = usedContexts.map( name => { if ( name === 'root' ) return 'var root = this.__svelte.root;'; const listName = generator.current.listNames[ name ]; diff --git a/src/generators/dom/visitors/attributes/binding/index.js b/src/generators/dom/visitors/attributes/binding/index.js index 2b79ce1b9a..c2d579e254 100644 --- a/src/generators/dom/visitors/attributes/binding/index.js +++ b/src/generators/dom/visitors/attributes/binding/index.js @@ -8,7 +8,9 @@ export default function createBinding ( generator, node, attribute, current, loc const deep = parts.length > 1; const contextual = parts[0] in current.contexts; - if ( contextual ) local.allUsedContexts.add( parts[0] ); + if ( contextual && !~local.allUsedContexts.indexOf( parts[0] ) ) { + local.allUsedContexts.push( parts[0] ); + } if ( local.isComponent ) { let obj;