diff --git a/src/generators/dom/index.js b/src/generators/dom/index.js index 86453cd19f..3c337a2f2a 100644 --- a/src/generators/dom/index.js +++ b/src/generators/dom/index.js @@ -363,20 +363,20 @@ export default function dom ( parsed, source, options, names ) { } ` ); - if ( templateProperties.methods ) { - builders.main.addBlock( `${name}.prototype = template.methods;` ); - } - const sharedPath = options.shared === true ? 'svelte/shared.js' : options.shared; - [ 'get', 'fire', 'observe', 'on', 'set', '_flush' ].forEach( methodName => { - if ( sharedPath ) { - builders.main.addLine( `${name}.prototype.${methodName} = ${generator.helper( methodName )};` ); - } else { - const fn = shared[ options.dev && `${methodName}Dev` in shared ? `${methodName}Dev` : methodName ]; // eslint-disable-line import/namespace - builders.main.addLine( `${name}.prototype.${methodName} = ${fn};` ); + if ( sharedPath ) { + const base = templateProperties.methods ? `{}, template.methods` : `{}`; + builders.main.addBlock( `${name}.prototype = Object.assign( ${base}, ${generator.helper( 'proto' )} );` ); + } else { + if ( templateProperties.methods ) { + builders.main.addBlock( `${name}.prototype = template.methods;` ); } - }); + + [ 'get', 'fire', 'observe', 'on', 'set', '_flush' ].forEach( methodName => { + builders.main.addLine( `${name}.prototype.${methodName} = ${generator.helper( methodName )};` ); + }); + } // TODO deprecate component.teardown() builders.main.addBlock( deindent` @@ -415,4 +415,4 @@ export default function dom ( parsed, source, options, names ) { } return generator.generate( builders.main.toString(), options, { name, format } ); -} +} \ No newline at end of file diff --git a/src/shared/methods.js b/src/shared/methods.js index 10b112b803..395420767d 100644 --- a/src/shared/methods.js +++ b/src/shared/methods.js @@ -101,3 +101,21 @@ export function _flush () { hook.fn.call( hook.context ); } } + +export var proto = { + get: get, + fire: fire, + observe: observe, + on: on, + set: set, + _flush: _flush +}; + +export var protoDev = { + get: get, + fire: fire, + observe: observeDev, + on: onDev, + set: set, + _flush: _flush +}; \ No newline at end of file