Merge pull request #755 from sveltejs/gh-744

handle set after destroy, and move destroy into shared helpers
pull/754/merge
Rich Harris 7 years ago committed by GitHub
commit 8b9380fb24

@ -174,8 +174,8 @@ export default function dom(
? `@proto ` ? `@proto `
: deindent` : deindent`
{ {
${['get', 'fire', 'observe', 'on', 'set'] ${['destroy', 'get', 'fire', 'observe', 'on', 'set', 'teardown']
.map(n => `${n}: @${n}`) .map(n => `${n}: @${n === 'teardown' ? 'destroy' : n}`)
.join(',\n')} .join(',\n')}
}`; }`;
@ -207,11 +207,11 @@ export default function dom(
}; };
this._handlers = Object.create( null ); this._handlers = Object.create( null );
${templateProperties.ondestroy && `this._handlers.destroy = [@template.ondestroy]`}
this._root = options._root || this; this._root = options._root || this;
this._yield = options._yield; this._yield = options._yield;
this._destroyed = false;
${generator.stylesheet.hasStyles && ${generator.stylesheet.hasStyles &&
options.css !== false && options.css !== false &&
`if ( !document.getElementById( '${generator.stylesheet.id}-style' ) ) @add_css();`} `if ( !document.getElementById( '${generator.stylesheet.id}-style' ) ) @add_css();`}
@ -263,19 +263,6 @@ export default function dom(
${_set} ${_set}
}; };
${name}.prototype.teardown = ${name}.prototype.destroy = function destroy ( detach ) {
if ( this._destroyed ) return${options.dev && ` console.warn( 'Component was already destroyed' )`};
this.fire( 'destroy' );
${templateProperties.ondestroy && `@template.ondestroy.call( this );`}
if ( detach !== false ) this._fragment.unmount();
this._fragment.destroy();
this._fragment = null;
this._state = {};
this._destroyed = true;
};
${templateProperties.setup && `@template.setup( ${name} );`} ${templateProperties.setup && `@template.setup( ${name} );`}
`); `);

@ -1,8 +1,27 @@
import { assign } from './utils.js'; import { assign } from './utils.js';
import { noop } from './utils.js';
export * from './dom.js'; export * from './dom.js';
export * from './transitions.js'; export * from './transitions.js';
export * from './utils.js'; export * from './utils.js';
export function destroy(detach) {
this.destroy = this.set = noop;
this.fire('destroy');
if (detach !== false) this._fragment.unmount();
this._fragment.destroy();
this._fragment = null;
this._state = {};
}
export function destroyDev(detach) {
destroy.call(this, detach);
this.destroy = function() {
console.warn('Component was already destroyed');
};
}
export function differs(a, b) { export function differs(a, b) {
return a !== b || ((a && typeof a === 'object') || typeof a === 'function'); return a !== b || ((a && typeof a === 'object') || typeof a === 'function');
} }
@ -119,17 +138,21 @@ export function callAll(fns) {
} }
export var proto = { export var proto = {
destroy: destroy,
get: get, get: get,
fire: fire, fire: fire,
observe: observe, observe: observe,
on: on, on: on,
set: set set: set,
teardown: destroy
}; };
export var protoDev = { export var protoDev = {
destroy: destroyDev,
get: get, get: get,
fire: fire, fire: fire,
observe: observeDev, observe: observeDev,
on: onDev, on: onDev,
set: set set: set,
teardown: destroyDev
}; };

@ -37,6 +37,17 @@ function setAttribute(node, attribute, value) {
node.setAttribute(attribute, value); node.setAttribute(attribute, value);
} }
function destroy(detach) {
this.destroy = this.set = noop;
this.fire('destroy');
if (detach !== false) this._fragment.unmount();
this._fragment.destroy();
this._fragment = null;
this._state = {};
}
function differs(a, b) { function differs(a, b) {
return a !== b || ((a && typeof a === 'object') || typeof a === 'function'); return a !== b || ((a && typeof a === 'object') || typeof a === 'function');
} }
@ -128,11 +139,13 @@ function callAll(fns) {
} }
var proto = { var proto = {
destroy: destroy,
get: get, get: get,
fire: fire, fire: fire,
observe: observe, observe: observe,
on: on, on: on,
set: set set: set,
teardown: destroy
}; };
var template = (function () { var template = (function () {
@ -201,7 +214,6 @@ function SvelteComponent ( options ) {
this._root = options._root || this; this._root = options._root || this;
this._yield = options._yield; this._yield = options._yield;
this._destroyed = false;
if ( !document.getElementById( 'svelte-3590263702-style' ) ) add_css(); if ( !document.getElementById( 'svelte-3590263702-style' ) ) add_css();
this._fragment = create_main_fragment( this._state, this ); this._fragment = create_main_fragment( this._state, this );
@ -222,16 +234,4 @@ SvelteComponent.prototype._set = function _set ( newState ) {
dispatchObservers( this, this._observers.post, newState, oldState ); dispatchObservers( this, this._observers.post, newState, oldState );
}; };
SvelteComponent.prototype.teardown = SvelteComponent.prototype.destroy = function destroy ( detach ) {
if ( this._destroyed ) return;
this.fire( 'destroy' );
if ( detach !== false ) this._fragment.unmount();
this._fragment.destroy();
this._fragment = null;
this._state = {};
this._destroyed = true;
};
export default SvelteComponent; export default SvelteComponent;

@ -66,7 +66,6 @@ function SvelteComponent ( options ) {
this._root = options._root || this; this._root = options._root || this;
this._yield = options._yield; this._yield = options._yield;
this._destroyed = false;
if ( !document.getElementById( 'svelte-3590263702-style' ) ) add_css(); if ( !document.getElementById( 'svelte-3590263702-style' ) ) add_css();
this._fragment = create_main_fragment( this._state, this ); this._fragment = create_main_fragment( this._state, this );
@ -87,16 +86,4 @@ SvelteComponent.prototype._set = function _set ( newState ) {
dispatchObservers( this, this._observers.post, newState, oldState ); dispatchObservers( this, this._observers.post, newState, oldState );
}; };
SvelteComponent.prototype.teardown = SvelteComponent.prototype.destroy = function destroy ( detach ) {
if ( this._destroyed ) return;
this.fire( 'destroy' );
if ( detach !== false ) this._fragment.unmount();
this._fragment.destroy();
this._fragment = null;
this._state = {};
this._destroyed = true;
};
export default SvelteComponent; export default SvelteComponent;

@ -13,6 +13,17 @@ function assign(target) {
return target; return target;
} }
function destroy(detach) {
this.destroy = this.set = noop;
this.fire('destroy');
if (detach !== false) this._fragment.unmount();
this._fragment.destroy();
this._fragment = null;
this._state = {};
}
function differs(a, b) { function differs(a, b) {
return a !== b || ((a && typeof a === 'object') || typeof a === 'function'); return a !== b || ((a && typeof a === 'object') || typeof a === 'function');
} }
@ -104,11 +115,13 @@ function callAll(fns) {
} }
var proto = { var proto = {
destroy: destroy,
get: get, get: get,
fire: fire, fire: fire,
observe: observe, observe: observe,
on: on, on: on,
set: set set: set,
teardown: destroy
}; };
function recompute ( state, newState, oldState, isInitial ) { function recompute ( state, newState, oldState, isInitial ) {
@ -155,8 +168,6 @@ function SvelteComponent ( options ) {
this._root = options._root || this; this._root = options._root || this;
this._yield = options._yield; this._yield = options._yield;
this._destroyed = false;
this._fragment = create_main_fragment( this._state, this ); this._fragment = create_main_fragment( this._state, this );
if ( options.target ) { if ( options.target ) {
@ -175,16 +186,4 @@ SvelteComponent.prototype._set = function _set ( newState ) {
dispatchObservers( this, this._observers.post, newState, oldState ); dispatchObservers( this, this._observers.post, newState, oldState );
}; };
SvelteComponent.prototype.teardown = SvelteComponent.prototype.destroy = function destroy ( detach ) {
if ( this._destroyed ) return;
this.fire( 'destroy' );
if ( detach !== false ) this._fragment.unmount();
this._fragment.destroy();
this._fragment = null;
this._state = {};
this._destroyed = true;
};
export default SvelteComponent; export default SvelteComponent;

@ -44,8 +44,6 @@ function SvelteComponent ( options ) {
this._root = options._root || this; this._root = options._root || this;
this._yield = options._yield; this._yield = options._yield;
this._destroyed = false;
this._fragment = create_main_fragment( this._state, this ); this._fragment = create_main_fragment( this._state, this );
if ( options.target ) { if ( options.target ) {
@ -64,16 +62,4 @@ SvelteComponent.prototype._set = function _set ( newState ) {
dispatchObservers( this, this._observers.post, newState, oldState ); dispatchObservers( this, this._observers.post, newState, oldState );
}; };
SvelteComponent.prototype.teardown = SvelteComponent.prototype.destroy = function destroy ( detach ) {
if ( this._destroyed ) return;
this.fire( 'destroy' );
if ( detach !== false ) this._fragment.unmount();
this._fragment.destroy();
this._fragment = null;
this._state = {};
this._destroyed = true;
};
export default SvelteComponent; export default SvelteComponent;

@ -33,6 +33,17 @@ function setAttribute(node, attribute, value) {
node.setAttribute(attribute, value); node.setAttribute(attribute, value);
} }
function destroy(detach) {
this.destroy = this.set = noop;
this.fire('destroy');
if (detach !== false) this._fragment.unmount();
this._fragment.destroy();
this._fragment = null;
this._state = {};
}
function differs(a, b) { function differs(a, b) {
return a !== b || ((a && typeof a === 'object') || typeof a === 'function'); return a !== b || ((a && typeof a === 'object') || typeof a === 'function');
} }
@ -124,11 +135,13 @@ function callAll(fns) {
} }
var proto = { var proto = {
destroy: destroy,
get: get, get: get,
fire: fire, fire: fire,
observe: observe, observe: observe,
on: on, on: on,
set: set set: set,
teardown: destroy
}; };
function encapsulateStyles ( node ) { function encapsulateStyles ( node ) {
@ -181,7 +194,6 @@ function SvelteComponent ( options ) {
this._root = options._root || this; this._root = options._root || this;
this._yield = options._yield; this._yield = options._yield;
this._destroyed = false;
if ( !document.getElementById( 'svelte-2363328337-style' ) ) add_css(); if ( !document.getElementById( 'svelte-2363328337-style' ) ) add_css();
this._fragment = create_main_fragment( this._state, this ); this._fragment = create_main_fragment( this._state, this );
@ -201,16 +213,4 @@ SvelteComponent.prototype._set = function _set ( newState ) {
dispatchObservers( this, this._observers.post, newState, oldState ); dispatchObservers( this, this._observers.post, newState, oldState );
}; };
SvelteComponent.prototype.teardown = SvelteComponent.prototype.destroy = function destroy ( detach ) {
if ( this._destroyed ) return;
this.fire( 'destroy' );
if ( detach !== false ) this._fragment.unmount();
this._fragment.destroy();
this._fragment = null;
this._state = {};
this._destroyed = true;
};
export default SvelteComponent; export default SvelteComponent;

@ -50,7 +50,6 @@ function SvelteComponent ( options ) {
this._root = options._root || this; this._root = options._root || this;
this._yield = options._yield; this._yield = options._yield;
this._destroyed = false;
if ( !document.getElementById( 'svelte-2363328337-style' ) ) add_css(); if ( !document.getElementById( 'svelte-2363328337-style' ) ) add_css();
this._fragment = create_main_fragment( this._state, this ); this._fragment = create_main_fragment( this._state, this );
@ -70,16 +69,4 @@ SvelteComponent.prototype._set = function _set ( newState ) {
dispatchObservers( this, this._observers.post, newState, oldState ); dispatchObservers( this, this._observers.post, newState, oldState );
}; };
SvelteComponent.prototype.teardown = SvelteComponent.prototype.destroy = function destroy ( detach ) {
if ( this._destroyed ) return;
this.fire( 'destroy' );
if ( detach !== false ) this._fragment.unmount();
this._fragment.destroy();
this._fragment = null;
this._state = {};
this._destroyed = true;
};
export default SvelteComponent; export default SvelteComponent;

@ -46,6 +46,17 @@ function createText(data) {
return document.createTextNode(data); return document.createTextNode(data);
} }
function destroy(detach) {
this.destroy = this.set = noop;
this.fire('destroy');
if (detach !== false) this._fragment.unmount();
this._fragment.destroy();
this._fragment = null;
this._state = {};
}
function differs(a, b) { function differs(a, b) {
return a !== b || ((a && typeof a === 'object') || typeof a === 'function'); return a !== b || ((a && typeof a === 'object') || typeof a === 'function');
} }
@ -137,11 +148,13 @@ function callAll(fns) {
} }
var proto = { var proto = {
destroy: destroy,
get: get, get: get,
fire: fire, fire: fire,
observe: observe, observe: observe,
on: on, on: on,
set: set set: set,
teardown: destroy
}; };
function create_main_fragment ( state, component ) { function create_main_fragment ( state, component ) {
@ -301,8 +314,6 @@ function SvelteComponent ( options ) {
this._root = options._root || this; this._root = options._root || this;
this._yield = options._yield; this._yield = options._yield;
this._destroyed = false;
this._fragment = create_main_fragment( this._state, this ); this._fragment = create_main_fragment( this._state, this );
if ( options.target ) { if ( options.target ) {
@ -321,16 +332,4 @@ SvelteComponent.prototype._set = function _set ( newState ) {
dispatchObservers( this, this._observers.post, newState, oldState ); dispatchObservers( this, this._observers.post, newState, oldState );
}; };
SvelteComponent.prototype.teardown = SvelteComponent.prototype.destroy = function destroy ( detach ) {
if ( this._destroyed ) return;
this.fire( 'destroy' );
if ( detach !== false ) this._fragment.unmount();
this._fragment.destroy();
this._fragment = null;
this._state = {};
this._destroyed = true;
};
export default SvelteComponent; export default SvelteComponent;

@ -157,8 +157,6 @@ function SvelteComponent ( options ) {
this._root = options._root || this; this._root = options._root || this;
this._yield = options._yield; this._yield = options._yield;
this._destroyed = false;
this._fragment = create_main_fragment( this._state, this ); this._fragment = create_main_fragment( this._state, this );
if ( options.target ) { if ( options.target ) {
@ -177,16 +175,4 @@ SvelteComponent.prototype._set = function _set ( newState ) {
dispatchObservers( this, this._observers.post, newState, oldState ); dispatchObservers( this, this._observers.post, newState, oldState );
}; };
SvelteComponent.prototype.teardown = SvelteComponent.prototype.destroy = function destroy ( detach ) {
if ( this._destroyed ) return;
this.fire( 'destroy' );
if ( detach !== false ) this._fragment.unmount();
this._fragment.destroy();
this._fragment = null;
this._state = {};
this._destroyed = true;
};
export default SvelteComponent; export default SvelteComponent;

@ -1,3 +1,5 @@
function noop() {}
function assign(target) { function assign(target) {
var k, var k,
source, source,
@ -31,6 +33,17 @@ function createText(data) {
return document.createTextNode(data); return document.createTextNode(data);
} }
function destroy(detach) {
this.destroy = this.set = noop;
this.fire('destroy');
if (detach !== false) this._fragment.unmount();
this._fragment.destroy();
this._fragment = null;
this._state = {};
}
function differs(a, b) { function differs(a, b) {
return a !== b || ((a && typeof a === 'object') || typeof a === 'function'); return a !== b || ((a && typeof a === 'object') || typeof a === 'function');
} }
@ -122,11 +135,13 @@ function callAll(fns) {
} }
var proto = { var proto = {
destroy: destroy,
get: get, get: get,
fire: fire, fire: fire,
observe: observe, observe: observe,
on: on, on: on,
set: set set: set,
teardown: destroy
}; };
var template = (function () { var template = (function () {
@ -190,8 +205,6 @@ function SvelteComponent ( options ) {
this._root = options._root || this; this._root = options._root || this;
this._yield = options._yield; this._yield = options._yield;
this._destroyed = false;
this._fragment = create_main_fragment( this._state, this ); this._fragment = create_main_fragment( this._state, this );
if ( options.target ) { if ( options.target ) {
@ -209,16 +222,4 @@ SvelteComponent.prototype._set = function _set ( newState ) {
dispatchObservers( this, this._observers.post, newState, oldState ); dispatchObservers( this, this._observers.post, newState, oldState );
}; };
SvelteComponent.prototype.teardown = SvelteComponent.prototype.destroy = function destroy ( detach ) {
if ( this._destroyed ) return;
this.fire( 'destroy' );
if ( detach !== false ) this._fragment.unmount();
this._fragment.destroy();
this._fragment = null;
this._state = {};
this._destroyed = true;
};
export default SvelteComponent; export default SvelteComponent;

@ -61,8 +61,6 @@ function SvelteComponent ( options ) {
this._root = options._root || this; this._root = options._root || this;
this._yield = options._yield; this._yield = options._yield;
this._destroyed = false;
this._fragment = create_main_fragment( this._state, this ); this._fragment = create_main_fragment( this._state, this );
if ( options.target ) { if ( options.target ) {
@ -80,16 +78,4 @@ SvelteComponent.prototype._set = function _set ( newState ) {
dispatchObservers( this, this._observers.post, newState, oldState ); dispatchObservers( this, this._observers.post, newState, oldState );
}; };
SvelteComponent.prototype.teardown = SvelteComponent.prototype.destroy = function destroy ( detach ) {
if ( this._destroyed ) return;
this.fire( 'destroy' );
if ( detach !== false ) this._fragment.unmount();
this._fragment.destroy();
this._fragment = null;
this._state = {};
this._destroyed = true;
};
export default SvelteComponent; export default SvelteComponent;

@ -37,6 +37,17 @@ function createComment() {
return document.createComment(''); return document.createComment('');
} }
function destroy(detach) {
this.destroy = this.set = noop;
this.fire('destroy');
if (detach !== false) this._fragment.unmount();
this._fragment.destroy();
this._fragment = null;
this._state = {};
}
function differs(a, b) { function differs(a, b) {
return a !== b || ((a && typeof a === 'object') || typeof a === 'function'); return a !== b || ((a && typeof a === 'object') || typeof a === 'function');
} }
@ -128,11 +139,13 @@ function callAll(fns) {
} }
var proto = { var proto = {
destroy: destroy,
get: get, get: get,
fire: fire, fire: fire,
observe: observe, observe: observe,
on: on, on: on,
set: set set: set,
teardown: destroy
}; };
function create_main_fragment ( state, component ) { function create_main_fragment ( state, component ) {
@ -236,8 +249,6 @@ function SvelteComponent ( options ) {
this._root = options._root || this; this._root = options._root || this;
this._yield = options._yield; this._yield = options._yield;
this._destroyed = false;
this._fragment = create_main_fragment( this._state, this ); this._fragment = create_main_fragment( this._state, this );
if ( options.target ) { if ( options.target ) {
@ -256,16 +267,4 @@ SvelteComponent.prototype._set = function _set ( newState ) {
dispatchObservers( this, this._observers.post, newState, oldState ); dispatchObservers( this, this._observers.post, newState, oldState );
}; };
SvelteComponent.prototype.teardown = SvelteComponent.prototype.destroy = function destroy ( detach ) {
if ( this._destroyed ) return;
this.fire( 'destroy' );
if ( detach !== false ) this._fragment.unmount();
this._fragment.destroy();
this._fragment = null;
this._state = {};
this._destroyed = true;
};
export default SvelteComponent; export default SvelteComponent;

@ -101,8 +101,6 @@ function SvelteComponent ( options ) {
this._root = options._root || this; this._root = options._root || this;
this._yield = options._yield; this._yield = options._yield;
this._destroyed = false;
this._fragment = create_main_fragment( this._state, this ); this._fragment = create_main_fragment( this._state, this );
if ( options.target ) { if ( options.target ) {
@ -121,16 +119,4 @@ SvelteComponent.prototype._set = function _set ( newState ) {
dispatchObservers( this, this._observers.post, newState, oldState ); dispatchObservers( this, this._observers.post, newState, oldState );
}; };
SvelteComponent.prototype.teardown = SvelteComponent.prototype.destroy = function destroy ( detach ) {
if ( this._destroyed ) return;
this.fire( 'destroy' );
if ( detach !== false ) this._fragment.unmount();
this._fragment.destroy();
this._fragment = null;
this._state = {};
this._destroyed = true;
};
export default SvelteComponent; export default SvelteComponent;

@ -37,6 +37,17 @@ function createComment() {
return document.createComment(''); return document.createComment('');
} }
function destroy(detach) {
this.destroy = this.set = noop;
this.fire('destroy');
if (detach !== false) this._fragment.unmount();
this._fragment.destroy();
this._fragment = null;
this._state = {};
}
function differs(a, b) { function differs(a, b) {
return a !== b || ((a && typeof a === 'object') || typeof a === 'function'); return a !== b || ((a && typeof a === 'object') || typeof a === 'function');
} }
@ -128,11 +139,13 @@ function callAll(fns) {
} }
var proto = { var proto = {
destroy: destroy,
get: get, get: get,
fire: fire, fire: fire,
observe: observe, observe: observe,
on: on, on: on,
set: set set: set,
teardown: destroy
}; };
function create_main_fragment ( state, component ) { function create_main_fragment ( state, component ) {
@ -212,8 +225,6 @@ function SvelteComponent ( options ) {
this._root = options._root || this; this._root = options._root || this;
this._yield = options._yield; this._yield = options._yield;
this._destroyed = false;
this._fragment = create_main_fragment( this._state, this ); this._fragment = create_main_fragment( this._state, this );
if ( options.target ) { if ( options.target ) {
@ -232,16 +243,4 @@ SvelteComponent.prototype._set = function _set ( newState ) {
dispatchObservers( this, this._observers.post, newState, oldState ); dispatchObservers( this, this._observers.post, newState, oldState );
}; };
SvelteComponent.prototype.teardown = SvelteComponent.prototype.destroy = function destroy ( detach ) {
if ( this._destroyed ) return;
this.fire( 'destroy' );
if ( detach !== false ) this._fragment.unmount();
this._fragment.destroy();
this._fragment = null;
this._state = {};
this._destroyed = true;
};
export default SvelteComponent; export default SvelteComponent;

@ -77,8 +77,6 @@ function SvelteComponent ( options ) {
this._root = options._root || this; this._root = options._root || this;
this._yield = options._yield; this._yield = options._yield;
this._destroyed = false;
this._fragment = create_main_fragment( this._state, this ); this._fragment = create_main_fragment( this._state, this );
if ( options.target ) { if ( options.target ) {
@ -97,16 +95,4 @@ SvelteComponent.prototype._set = function _set ( newState ) {
dispatchObservers( this, this._observers.post, newState, oldState ); dispatchObservers( this, this._observers.post, newState, oldState );
}; };
SvelteComponent.prototype.teardown = SvelteComponent.prototype.destroy = function destroy ( detach ) {
if ( this._destroyed ) return;
this.fire( 'destroy' );
if ( detach !== false ) this._fragment.unmount();
this._fragment.destroy();
this._fragment = null;
this._state = {};
this._destroyed = true;
};
export default SvelteComponent; export default SvelteComponent;

@ -1,5 +1,7 @@
import Imported from 'Imported.html'; import Imported from 'Imported.html';
function noop() {}
function assign(target) { function assign(target) {
var k, var k,
source, source,
@ -25,6 +27,17 @@ function createText(data) {
return document.createTextNode(data); return document.createTextNode(data);
} }
function destroy(detach) {
this.destroy = this.set = noop;
this.fire('destroy');
if (detach !== false) this._fragment.unmount();
this._fragment.destroy();
this._fragment = null;
this._state = {};
}
function differs(a, b) { function differs(a, b) {
return a !== b || ((a && typeof a === 'object') || typeof a === 'function'); return a !== b || ((a && typeof a === 'object') || typeof a === 'function');
} }
@ -116,11 +129,13 @@ function callAll(fns) {
} }
var proto = { var proto = {
destroy: destroy,
get: get, get: get,
fire: fire, fire: fire,
observe: observe, observe: observe,
on: on, on: on,
set: set set: set,
teardown: destroy
}; };
var template = (function () { var template = (function () {
@ -182,8 +197,6 @@ function SvelteComponent ( options ) {
this._root = options._root || this; this._root = options._root || this;
this._yield = options._yield; this._yield = options._yield;
this._destroyed = false;
if ( !options._root ) { if ( !options._root ) {
this._oncreate = []; this._oncreate = [];
this._beforecreate = []; this._beforecreate = [];
@ -215,16 +228,4 @@ SvelteComponent.prototype._set = function _set ( newState ) {
dispatchObservers( this, this._observers.post, newState, oldState ); dispatchObservers( this, this._observers.post, newState, oldState );
}; };
SvelteComponent.prototype.teardown = SvelteComponent.prototype.destroy = function destroy ( detach ) {
if ( this._destroyed ) return;
this.fire( 'destroy' );
if ( detach !== false ) this._fragment.unmount();
this._fragment.destroy();
this._fragment = null;
this._state = {};
this._destroyed = true;
};
export default SvelteComponent; export default SvelteComponent;

@ -61,8 +61,6 @@ function SvelteComponent ( options ) {
this._root = options._root || this; this._root = options._root || this;
this._yield = options._yield; this._yield = options._yield;
this._destroyed = false;
if ( !options._root ) { if ( !options._root ) {
this._oncreate = []; this._oncreate = [];
this._beforecreate = []; this._beforecreate = [];
@ -94,16 +92,4 @@ SvelteComponent.prototype._set = function _set ( newState ) {
dispatchObservers( this, this._observers.post, newState, oldState ); dispatchObservers( this, this._observers.post, newState, oldState );
}; };
SvelteComponent.prototype.teardown = SvelteComponent.prototype.destroy = function destroy ( detach ) {
if ( this._destroyed ) return;
this.fire( 'destroy' );
if ( detach !== false ) this._fragment.unmount();
this._fragment.destroy();
this._fragment = null;
this._state = {};
this._destroyed = true;
};
export default SvelteComponent; export default SvelteComponent;

@ -13,6 +13,17 @@ function assign(target) {
return target; return target;
} }
function destroy(detach) {
this.destroy = this.set = noop;
this.fire('destroy');
if (detach !== false) this._fragment.unmount();
this._fragment.destroy();
this._fragment = null;
this._state = {};
}
function differs(a, b) { function differs(a, b) {
return a !== b || ((a && typeof a === 'object') || typeof a === 'function'); return a !== b || ((a && typeof a === 'object') || typeof a === 'function');
} }
@ -104,11 +115,13 @@ function callAll(fns) {
} }
var proto = { var proto = {
destroy: destroy,
get: get, get: get,
fire: fire, fire: fire,
observe: observe, observe: observe,
on: on, on: on,
set: set set: set,
teardown: destroy
}; };
var template = (function () { var template = (function () {
@ -142,12 +155,11 @@ function SvelteComponent ( options ) {
}; };
this._handlers = Object.create( null ); this._handlers = Object.create( null );
this._handlers.destroy = [template.ondestroy];
this._root = options._root || this; this._root = options._root || this;
this._yield = options._yield; this._yield = options._yield;
this._destroyed = false;
var oncreate = template.oncreate.bind( this ); var oncreate = template.oncreate.bind( this );
if ( !options._root ) { if ( !options._root ) {
@ -177,17 +189,4 @@ SvelteComponent.prototype._set = function _set ( newState ) {
dispatchObservers( this, this._observers.post, newState, oldState ); dispatchObservers( this, this._observers.post, newState, oldState );
}; };
SvelteComponent.prototype.teardown = SvelteComponent.prototype.destroy = function destroy ( detach ) {
if ( this._destroyed ) return;
this.fire( 'destroy' );
template.ondestroy.call( this );
if ( detach !== false ) this._fragment.unmount();
this._fragment.destroy();
this._fragment = null;
this._state = {};
this._destroyed = true;
};
export default SvelteComponent; export default SvelteComponent;

@ -31,12 +31,11 @@ function SvelteComponent ( options ) {
}; };
this._handlers = Object.create( null ); this._handlers = Object.create( null );
this._handlers.destroy = [template.ondestroy]
this._root = options._root || this; this._root = options._root || this;
this._yield = options._yield; this._yield = options._yield;
this._destroyed = false;
var oncreate = template.oncreate.bind( this ); var oncreate = template.oncreate.bind( this );
if ( !options._root ) { if ( !options._root ) {
@ -66,17 +65,4 @@ SvelteComponent.prototype._set = function _set ( newState ) {
dispatchObservers( this, this._observers.post, newState, oldState ); dispatchObservers( this, this._observers.post, newState, oldState );
}; };
SvelteComponent.prototype.teardown = SvelteComponent.prototype.destroy = function destroy ( detach ) {
if ( this._destroyed ) return;
this.fire( 'destroy' );
template.ondestroy.call( this );
if ( detach !== false ) this._fragment.unmount();
this._fragment.destroy();
this._fragment = null;
this._state = {};
this._destroyed = true;
};
export default SvelteComponent; export default SvelteComponent;

@ -13,6 +13,17 @@ function assign(target) {
return target; return target;
} }
function destroy(detach) {
this.destroy = this.set = noop;
this.fire('destroy');
if (detach !== false) this._fragment.unmount();
this._fragment.destroy();
this._fragment = null;
this._state = {};
}
function differs(a, b) { function differs(a, b) {
return a !== b || ((a && typeof a === 'object') || typeof a === 'function'); return a !== b || ((a && typeof a === 'object') || typeof a === 'function');
} }
@ -104,11 +115,13 @@ function callAll(fns) {
} }
var proto = { var proto = {
destroy: destroy,
get: get, get: get,
fire: fire, fire: fire,
observe: observe, observe: observe,
on: on, on: on,
set: set set: set,
teardown: destroy
}; };
var template = (function () { var template = (function () {
@ -157,8 +170,6 @@ function SvelteComponent ( options ) {
this._root = options._root || this; this._root = options._root || this;
this._yield = options._yield; this._yield = options._yield;
this._destroyed = false;
this._fragment = create_main_fragment( this._state, this ); this._fragment = create_main_fragment( this._state, this );
if ( options.target ) { if ( options.target ) {
@ -176,18 +187,6 @@ SvelteComponent.prototype._set = function _set ( newState ) {
dispatchObservers( this, this._observers.post, newState, oldState ); dispatchObservers( this, this._observers.post, newState, oldState );
}; };
SvelteComponent.prototype.teardown = SvelteComponent.prototype.destroy = function destroy ( detach ) {
if ( this._destroyed ) return;
this.fire( 'destroy' );
if ( detach !== false ) this._fragment.unmount();
this._fragment.destroy();
this._fragment = null;
this._state = {};
this._destroyed = true;
};
template.setup( SvelteComponent ); template.setup( SvelteComponent );
export default SvelteComponent; export default SvelteComponent;

@ -46,8 +46,6 @@ function SvelteComponent ( options ) {
this._root = options._root || this; this._root = options._root || this;
this._yield = options._yield; this._yield = options._yield;
this._destroyed = false;
this._fragment = create_main_fragment( this._state, this ); this._fragment = create_main_fragment( this._state, this );
if ( options.target ) { if ( options.target ) {
@ -65,18 +63,6 @@ SvelteComponent.prototype._set = function _set ( newState ) {
dispatchObservers( this, this._observers.post, newState, oldState ); dispatchObservers( this, this._observers.post, newState, oldState );
}; };
SvelteComponent.prototype.teardown = SvelteComponent.prototype.destroy = function destroy ( detach ) {
if ( this._destroyed ) return;
this.fire( 'destroy' );
if ( detach !== false ) this._fragment.unmount();
this._fragment.destroy();
this._fragment = null;
this._state = {};
this._destroyed = true;
};
template.setup( SvelteComponent ); template.setup( SvelteComponent );
export default SvelteComponent; export default SvelteComponent;

@ -37,6 +37,17 @@ function createComment() {
return document.createComment(''); return document.createComment('');
} }
function destroy(detach) {
this.destroy = this.set = noop;
this.fire('destroy');
if (detach !== false) this._fragment.unmount();
this._fragment.destroy();
this._fragment = null;
this._state = {};
}
function differs(a, b) { function differs(a, b) {
return a !== b || ((a && typeof a === 'object') || typeof a === 'function'); return a !== b || ((a && typeof a === 'object') || typeof a === 'function');
} }
@ -128,11 +139,13 @@ function callAll(fns) {
} }
var proto = { var proto = {
destroy: destroy,
get: get, get: get,
fire: fire, fire: fire,
observe: observe, observe: observe,
on: on, on: on,
set: set set: set,
teardown: destroy
}; };
function create_main_fragment ( state, component ) { function create_main_fragment ( state, component ) {
@ -396,8 +409,6 @@ function SvelteComponent ( options ) {
this._root = options._root || this; this._root = options._root || this;
this._yield = options._yield; this._yield = options._yield;
this._destroyed = false;
this._fragment = create_main_fragment( this._state, this ); this._fragment = create_main_fragment( this._state, this );
if ( options.target ) { if ( options.target ) {
@ -416,16 +427,4 @@ SvelteComponent.prototype._set = function _set ( newState ) {
dispatchObservers( this, this._observers.post, newState, oldState ); dispatchObservers( this, this._observers.post, newState, oldState );
}; };
SvelteComponent.prototype.teardown = SvelteComponent.prototype.destroy = function destroy ( detach ) {
if ( this._destroyed ) return;
this.fire( 'destroy' );
if ( detach !== false ) this._fragment.unmount();
this._fragment.destroy();
this._fragment = null;
this._state = {};
this._destroyed = true;
};
export default SvelteComponent; export default SvelteComponent;

@ -261,8 +261,6 @@ function SvelteComponent ( options ) {
this._root = options._root || this; this._root = options._root || this;
this._yield = options._yield; this._yield = options._yield;
this._destroyed = false;
this._fragment = create_main_fragment( this._state, this ); this._fragment = create_main_fragment( this._state, this );
if ( options.target ) { if ( options.target ) {
@ -281,16 +279,4 @@ SvelteComponent.prototype._set = function _set ( newState ) {
dispatchObservers( this, this._observers.post, newState, oldState ); dispatchObservers( this, this._observers.post, newState, oldState );
}; };
SvelteComponent.prototype.teardown = SvelteComponent.prototype.destroy = function destroy ( detach ) {
if ( this._destroyed ) return;
this.fire( 'destroy' );
if ( detach !== false ) this._fragment.unmount();
this._fragment.destroy();
this._fragment = null;
this._state = {};
this._destroyed = true;
};
export default SvelteComponent; export default SvelteComponent;

@ -1,7 +1,7 @@
export default { export default {
test ( assert, component ) { test(assert, component) {
assert.deepEqual( component.events, [ 'render' ]); assert.deepEqual(component.events, ['create']);
component.destroy(); component.destroy();
assert.deepEqual( component.events, [ 'render', 'teardown' ]); assert.deepEqual(component.events, ['create', 'destroy']);
} }
}; };

@ -2,12 +2,12 @@
<script> <script>
export default { export default {
oncreate () { oncreate() {
this.events = [ 'render' ]; this.events = ['create'];
}, },
ondestroy () { ondestroy() {
this.events.push( 'teardown' ); this.events.push('destroy');
} }
}; };
</script> </script>

@ -0,0 +1,10 @@
export default {
data: {
x: 1
},
test(assert, component) {
component.destroy();
component.set({ x: 2 });
}
};
Loading…
Cancel
Save