diff --git a/compiler/generate/index.js b/compiler/generate/index.js index c611c4c8c9..f2a70fc6a6 100644 --- a/compiler/generate/index.js +++ b/compiler/generate/index.js @@ -266,7 +266,23 @@ export default function generate ( parsed, template ) { renderers.push( createRenderer( current ) ); + let js; + let hasDefaultData = false; + + // TODO wrap all this in magic-string + if ( parsed.js ) { + const defaultExport = parsed.js.content.body.find( node => node.type === 'ExportDefaultDeclaration' ); + if ( defaultExport ) { + js = `${template.slice( parsed.js.content.start, defaultExport.start )}const template = ${template.slice( defaultExport.declaration.start, parsed.js.content.end)}`; + hasDefaultData = defaultExport.declaration.properties.find( prop => prop.key.name === 'data' ); + } else { + js = template.slice( parsed.js.content.start, parsed.js.content.end ); + } + } + const code = deindent` + ${js} + ${renderers.reverse().join( '\n\n' )} export default function createComponent ( options ) { @@ -327,7 +343,7 @@ export default function generate ( parsed, template ) { }; let mainFragment = renderMainFragment( options.target ); - component.set( options.data ); + component.set( ${hasDefaultData ? `Object.assign( template.data(), options.data )` : `options.data`} ); return component; }