diff --git a/src/internal/ssr.js b/src/internal/ssr.js index 762c01a3c5..e6ed110a86 100644 --- a/src/internal/ssr.js +++ b/src/internal/ssr.js @@ -65,28 +65,39 @@ export function debug(file, line, column, values) { return ''; } -export function create_ssr_component($$render) { +let on_destroy; + +export function create_ssr_component(fn) { + function $$render(result, props, bindings, slots) { + const parent_component = current_component; + + const $$ = { + // these will be immediately discarded + on_mount: [], + before_render: [], + after_render: [], + + on_destroy, + context: new Map(parent_component ? parent_component.$$.context : []), + callbacks: blankObject() + }; + + set_current_component({ $$ }); + + const html = fn(result, props, bindings, slots); + + set_current_component(parent_component); + return html; + } + return { render: (props = {}, options = {}) => { - const parent_component = current_component; - - // TODO do we need on_ready, since on_mount, - // before_render and after_render don't run? - const $$ = { - on_mount: [], - on_destroy: [], - before_render: [], - after_render: [], - context: new Map(parent_component ? parent_component.$$.context : []), - callbacks: blankObject() - }; - - set_current_component({ $$ }); + on_destroy = []; const result = { head: '', css: new Set() }; const html = $$render(result, props, {}, options); - run_all($$.on_destroy); + run_all(on_destroy); return { html, diff --git a/test/runtime/samples/context-api-b/Leaf.svelte b/test/runtime/samples/context-api-b/Leaf.svelte new file mode 100644 index 0000000000..0e6e1f34a5 --- /dev/null +++ b/test/runtime/samples/context-api-b/Leaf.svelte @@ -0,0 +1,8 @@ + + +
{name}
\ No newline at end of file diff --git a/test/runtime/samples/context-api-b/Nested.svelte b/test/runtime/samples/context-api-b/Nested.svelte new file mode 100644 index 0000000000..d7f709133f --- /dev/null +++ b/test/runtime/samples/context-api-b/Nested.svelte @@ -0,0 +1,10 @@ + + + \ No newline at end of file diff --git a/test/runtime/samples/context-api-b/_config.js b/test/runtime/samples/context-api-b/_config.js new file mode 100644 index 0000000000..70dff54c06 --- /dev/null +++ b/test/runtime/samples/context-api-b/_config.js @@ -0,0 +1,6 @@ +export default { + html: ` +
foo/bar
+
foo/baz
+ ` +}; \ No newline at end of file diff --git a/test/runtime/samples/context-api-b/main.svelte b/test/runtime/samples/context-api-b/main.svelte new file mode 100644 index 0000000000..ddad5267f7 --- /dev/null +++ b/test/runtime/samples/context-api-b/main.svelte @@ -0,0 +1,13 @@ + + + + + + + + + + \ No newline at end of file