add shared prototype

pull/378/head
Rich Harris 9 years ago
parent 06f89d1d96
commit 6a4c3e46b3

@ -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 } );
}
}

@ -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
};
Loading…
Cancel
Save