From b8c0ab29492553ab9cc0cc4fd7d513e9e4de53f4 Mon Sep 17 00:00:00 2001 From: ekhaled Date: Fri, 30 Mar 2018 19:57:45 +0100 Subject: [PATCH 1/3] support both destroy and teardown in custom event handlers --- src/generators/nodes/Element.ts | 2 +- test/js/samples/event-handlers-custom/expected-bundle.js | 2 +- test/js/samples/event-handlers-custom/expected.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/generators/nodes/Element.ts b/src/generators/nodes/Element.ts index 288a508758..1d4f9fdf53 100644 --- a/src/generators/nodes/Element.ts +++ b/src/generators/nodes/Element.ts @@ -517,7 +517,7 @@ export default class Element extends Node { `); block.builders.destroy.addLine(deindent` - ${handlerName}.teardown(); + ${handlerName}[${handlerName}.destroy ? 'destroy' : 'teardown'](); `); } else { const handler = deindent` diff --git a/test/js/samples/event-handlers-custom/expected-bundle.js b/test/js/samples/event-handlers-custom/expected-bundle.js index 6d0dcd3bc8..7c17164c74 100644 --- a/test/js/samples/event-handlers-custom/expected-bundle.js +++ b/test/js/samples/event-handlers-custom/expected-bundle.js @@ -212,7 +212,7 @@ function create_main_fragment(component, state) { }, d: function destroy$$1() { - foo_handler.teardown(); + foo_handler[foo_handler.destroy ? 'destroy' : 'teardown'](); } }; } diff --git a/test/js/samples/event-handlers-custom/expected.js b/test/js/samples/event-handlers-custom/expected.js index ee1d155e9d..08f964c346 100644 --- a/test/js/samples/event-handlers-custom/expected.js +++ b/test/js/samples/event-handlers-custom/expected.js @@ -39,7 +39,7 @@ function create_main_fragment(component, state) { }, d: function destroy() { - foo_handler.teardown(); + foo_handler[foo_handler.destroy ? 'destroy' : 'teardown'](); } }; } From 298a339df95b03e0d2499149295572360ac432d0 Mon Sep 17 00:00:00 2001 From: ekhaled Date: Fri, 30 Mar 2018 20:09:19 +0100 Subject: [PATCH 2/3] add dev mode warning when teardown is returned instead of destroy --- src/generators/nodes/Element.ts | 8 ++++++++ .../_config.js | 7 +++++++ .../main.html | 16 ++++++++++++++++ 3 files changed, 31 insertions(+) create mode 100644 test/runtime/samples/dev-warning-custom-event-destroy-not-teardown/_config.js create mode 100644 test/runtime/samples/dev-warning-custom-event-destroy-not-teardown/main.html diff --git a/src/generators/nodes/Element.ts b/src/generators/nodes/Element.ts index 1d4f9fdf53..a43c725ff4 100644 --- a/src/generators/nodes/Element.ts +++ b/src/generators/nodes/Element.ts @@ -516,6 +516,14 @@ export default class Element extends Node { }); `); + if (generator.options.dev) { + block.builders.hydrate.addBlock(deindent` + if (${handlerName}.teardown) { + console.warn("Return 'destroy()' from custom event handlers. Returning 'teardown()' has been deprecated and will be unsupported in Svelte 2"); + } + `); + } + block.builders.destroy.addLine(deindent` ${handlerName}[${handlerName}.destroy ? 'destroy' : 'teardown'](); `); diff --git a/test/runtime/samples/dev-warning-custom-event-destroy-not-teardown/_config.js b/test/runtime/samples/dev-warning-custom-event-destroy-not-teardown/_config.js new file mode 100644 index 0000000000..59c583ba1a --- /dev/null +++ b/test/runtime/samples/dev-warning-custom-event-destroy-not-teardown/_config.js @@ -0,0 +1,7 @@ +export default { + dev: true, + + warnings: [ + `Return 'destroy()' from custom event handlers. Returning 'teardown()' has been deprecated and will be unsupported in Svelte 2` + ] +}; \ No newline at end of file diff --git a/test/runtime/samples/dev-warning-custom-event-destroy-not-teardown/main.html b/test/runtime/samples/dev-warning-custom-event-destroy-not-teardown/main.html new file mode 100644 index 0000000000..1e83835f03 --- /dev/null +++ b/test/runtime/samples/dev-warning-custom-event-destroy-not-teardown/main.html @@ -0,0 +1,16 @@ + + + \ No newline at end of file From 6ebf46ad67070132237faef843f4f1fffe2e4e84 Mon Sep 17 00:00:00 2001 From: ekhaled Date: Fri, 30 Mar 2018 21:12:16 +0100 Subject: [PATCH 3/3] fix handler in-place --- src/generators/nodes/Element.ts | 16 ++++++++-------- .../event-handlers-custom/expected-bundle.js | 6 +++++- .../js/samples/event-handlers-custom/expected.js | 6 +++++- 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/src/generators/nodes/Element.ts b/src/generators/nodes/Element.ts index a43c725ff4..555ea5ae4d 100644 --- a/src/generators/nodes/Element.ts +++ b/src/generators/nodes/Element.ts @@ -516,16 +516,16 @@ export default class Element extends Node { }); `); - if (generator.options.dev) { - block.builders.hydrate.addBlock(deindent` - if (${handlerName}.teardown) { - console.warn("Return 'destroy()' from custom event handlers. Returning 'teardown()' has been deprecated and will be unsupported in Svelte 2"); - } - `); - } + + block.builders.hydrate.addBlock(deindent` + if (${handlerName}.teardown) { + ${handlerName}.destroy = ${handlerName}.teardown; + ${generator.options.dev && `console.warn("Return 'destroy()' from custom event handlers. Returning 'teardown()' has been deprecated and will be unsupported in Svelte 2");`} + } + `); block.builders.destroy.addLine(deindent` - ${handlerName}[${handlerName}.destroy ? 'destroy' : 'teardown'](); + ${handlerName}.destroy(); `); } else { const handler = deindent` diff --git a/test/js/samples/event-handlers-custom/expected-bundle.js b/test/js/samples/event-handlers-custom/expected-bundle.js index 7c17164c74..7aea3cc47f 100644 --- a/test/js/samples/event-handlers-custom/expected-bundle.js +++ b/test/js/samples/event-handlers-custom/expected-bundle.js @@ -199,6 +199,10 @@ function create_main_fragment(component, state) { var state = component.get(); component.foo( state.bar ); }); + + if (foo_handler.teardown) { + foo_handler.destroy = foo_handler.teardown; + } }, m: function mount(target, anchor) { @@ -212,7 +216,7 @@ function create_main_fragment(component, state) { }, d: function destroy$$1() { - foo_handler[foo_handler.destroy ? 'destroy' : 'teardown'](); + foo_handler.destroy(); } }; } diff --git a/test/js/samples/event-handlers-custom/expected.js b/test/js/samples/event-handlers-custom/expected.js index 08f964c346..b20649d611 100644 --- a/test/js/samples/event-handlers-custom/expected.js +++ b/test/js/samples/event-handlers-custom/expected.js @@ -26,6 +26,10 @@ function create_main_fragment(component, state) { var state = component.get(); component.foo( state.bar ); }); + + if (foo_handler.teardown) { + foo_handler.destroy = foo_handler.teardown; + } }, m: function mount(target, anchor) { @@ -39,7 +43,7 @@ function create_main_fragment(component, state) { }, d: function destroy() { - foo_handler[foo_handler.destroy ? 'destroy' : 'teardown'](); + foo_handler.destroy(); } }; }