diff --git a/src/generators/dom/index.js b/src/generators/dom/index.js
index 60aee7b5ad..cb331fd96a 100644
--- a/src/generators/dom/index.js
+++ b/src/generators/dom/index.js
@@ -183,7 +183,8 @@ export default function dom ( parsed, source, options ) {
};
${name}.prototype.teardown = ${name}.prototype.destroy = function destroy ( detach ) {
- this.fire( 'destroy' );${templateProperties.ondestroy ? `\n${generator.alias( 'template' )}.ondestroy.call( this );` : ``}
+ this.fire( 'destroy' );
+ ${templateProperties.ondestroy && `${generator.alias( 'template' )}.ondestroy.call( this );`}
this._fragment.destroy( detach !== false );
this._fragment = null;
diff --git a/src/index.js b/src/index.js
index b7f158a84f..f5b013940d 100644
--- a/src/index.js
+++ b/src/index.js
@@ -56,19 +56,16 @@ export function create ( source, _options = {} ) {
return;
}
- let result;
try {
- result = (new Function( 'return ' + compiled.code ))();
+ return (new Function( 'return ' + compiled.code ))();
} catch ( err ) {
if ( _options.onerror ) {
_options.onerror( err );
+ return;
} else {
throw err;
}
- return;
}
-
- return result;
}
export { parse, validate, version as VERSION };
diff --git a/test/js/samples/non-imported-component/expected.js b/test/js/samples/non-imported-component/expected.js
new file mode 100644
index 0000000000..12e28c9119
--- /dev/null
+++ b/test/js/samples/non-imported-component/expected.js
@@ -0,0 +1,86 @@
+import Imported from './Imported.html';
+
+import { assign, createText, detachNode, dispatchObservers, insertNode, proto } from "svelte/shared.js";
+
+var template = (function () {
+ return {
+ components: {
+ NonImported
+ }
+ };
+}());
+
+function create_main_fragment ( state, component ) {
+ var imported = new Imported({
+ target: null,
+ _root: component._root
+ });
+
+ var text = createText( "\n" );
+
+ var nonimported = new template.components.NonImported({
+ target: null,
+ _root: component._root
+ });
+
+ return {
+ mount: function ( target, anchor ) {
+ imported._fragment.mount( target, anchor );
+ insertNode( text, target, anchor );
+ nonimported._fragment.mount( target, anchor );
+ },
+
+ destroy: function ( detach ) {
+ imported.destroy( detach );
+ nonimported.destroy( detach );
+
+ if ( detach ) {
+ detachNode( text );
+ }
+ }
+ };
+}
+
+function SvelteComponent ( options ) {
+ options = options || {};
+ this._state = options.data || {};
+
+ this._observers = {
+ pre: Object.create( null ),
+ post: Object.create( null )
+ };
+
+ this._handlers = Object.create( null );
+
+ this._root = options._root || this;
+ this._yield = options._yield;
+
+ this._torndown = false;
+ this._renderHooks = [];
+
+ this._fragment = create_main_fragment( this._state, this );
+ if ( options.target ) this._fragment.mount( options.target, null );
+ this._flush();
+}
+
+assign( SvelteComponent.prototype, proto );
+
+SvelteComponent.prototype._set = function _set ( newState ) {
+ var oldState = this._state;
+ this._state = assign( {}, oldState, newState );
+ dispatchObservers( this, this._observers.pre, newState, oldState );
+ dispatchObservers( this, this._observers.post, newState, oldState );
+ this._flush();
+};
+
+SvelteComponent.prototype.teardown = SvelteComponent.prototype.destroy = function destroy ( detach ) {
+ this.fire( 'destroy' );
+
+ this._fragment.destroy( detach !== false );
+ this._fragment = null;
+
+ this._state = {};
+ this._torndown = true;
+};
+
+export default SvelteComponent;
\ No newline at end of file
diff --git a/test/js/samples/non-imported-component/input.html b/test/js/samples/non-imported-component/input.html
new file mode 100644
index 0000000000..74a8abc244
--- /dev/null
+++ b/test/js/samples/non-imported-component/input.html
@@ -0,0 +1,13 @@
+
+
+
+
\ No newline at end of file
diff --git a/test/js/samples/onrender-onteardown-rewritten/expected.js b/test/js/samples/onrender-onteardown-rewritten/expected.js
new file mode 100644
index 0000000000..8e8f81e692
--- /dev/null
+++ b/test/js/samples/onrender-onteardown-rewritten/expected.js
@@ -0,0 +1,67 @@
+import { assign, dispatchObservers, noop, proto } from "svelte/shared.js";
+
+var template = (function () {
+ return {
+ // this test should be removed in v2
+ oncreate () {},
+ ondestroy () {}
+ };
+}());
+
+function create_main_fragment ( state, component ) {
+
+
+ return {
+ mount: noop,
+
+ destroy: noop
+ };
+}
+
+function SvelteComponent ( options ) {
+ options = options || {};
+ this._state = options.data || {};
+
+ this._observers = {
+ pre: Object.create( null ),
+ post: Object.create( null )
+ };
+
+ this._handlers = Object.create( null );
+
+ this._root = options._root || this;
+ this._yield = options._yield;
+
+ this._torndown = false;
+
+ this._fragment = create_main_fragment( this._state, this );
+ if ( options.target ) this._fragment.mount( options.target, null );
+
+ if ( options._root ) {
+ options._root._renderHooks.push( template.oncreate.bind( this ) );
+ } else {
+ template.oncreate.call( this );
+ }
+}
+
+assign( SvelteComponent.prototype, proto );
+
+SvelteComponent.prototype._set = function _set ( newState ) {
+ var oldState = this._state;
+ this._state = assign( {}, oldState, newState );
+ dispatchObservers( this, this._observers.pre, newState, oldState );
+ dispatchObservers( this, this._observers.post, newState, oldState );
+};
+
+SvelteComponent.prototype.teardown = SvelteComponent.prototype.destroy = function destroy ( detach ) {
+ this.fire( 'destroy' );
+ template.ondestroy.call( this );
+
+ this._fragment.destroy( detach !== false );
+ this._fragment = null;
+
+ this._state = {};
+ this._torndown = true;
+};
+
+export default SvelteComponent;
\ No newline at end of file
diff --git a/test/js/samples/onrender-onteardown-rewritten/input.html b/test/js/samples/onrender-onteardown-rewritten/input.html
new file mode 100644
index 0000000000..1d3b9e3f7b
--- /dev/null
+++ b/test/js/samples/onrender-onteardown-rewritten/input.html
@@ -0,0 +1,7 @@
+
\ No newline at end of file