diff --git a/src/compile/Component.ts b/src/compile/Component.ts index 62c2931f62..037880eff5 100644 --- a/src/compile/Component.ts +++ b/src/compile/Component.ts @@ -168,7 +168,7 @@ export default class Component { this.add_reference(subscribable_name); const variable = this.var_lookup.get(subscribable_name); - variable.subscribable = true; + if (variable) variable.subscribable = true; } else { this.usedNames.add(name); } diff --git a/src/compile/nodes/shared/Expression.ts b/src/compile/nodes/shared/Expression.ts index 87d06b722b..eb6b12143a 100644 --- a/src/compile/nodes/shared/Expression.ts +++ b/src/compile/nodes/shared/Expression.ts @@ -149,13 +149,6 @@ export default class Expression { dependencies.add(name); } - if (name[0] === '$' && !component.var_lookup.get(name.slice(1)) && name !== '$$props') { - component.error(node, { - code: `missing-store`, - message: `Stores must be declared` - }); - } - component.add_reference(name); component.warn_if_undefined(nodes[0], template_scope); } diff --git a/src/compile/render-dom/index.ts b/src/compile/render-dom/index.ts index 9d926d0d37..5def2edd04 100644 --- a/src/compile/render-dom/index.ts +++ b/src/compile/render-dom/index.ts @@ -326,7 +326,7 @@ export default function dom( const reactive_store_subscriptions = reactive_stores .filter(store => { const variable = component.var_lookup.get(store.name.slice(1)); - return variable.hoistable; + return !variable || variable.hoistable; }) .map(({ name }) => deindent` ${component.compileOptions.dev && `@validate_store(${name.slice(1)}, '${name.slice(1)}');`} @@ -336,7 +336,7 @@ export default function dom( const resubscribable_reactive_store_unsubscribers = reactive_stores .filter(store => { const variable = component.var_lookup.get(store.name.slice(1)); - return variable.reassigned; + return variable && variable.reassigned; }) .map(({ name }) => `$$self.$$.on_destroy.push(() => $$unsubscribe_${name.slice(1)}());`); @@ -370,7 +370,7 @@ export default function dom( const name = $name.slice(1); const store = component.var_lookup.get(name); - if (store.reassigned) { + if (store && store.reassigned) { return `${$name}, $$unsubscribe_${name} = @noop, $$subscribe_${name} = () => { $$unsubscribe_${name}(); $$unsubscribe_${name} = ${name}.subscribe($$value => { ${$name} = $$value; $$invalidate('${$name}', ${$name}); }) }` } diff --git a/test/runtime/samples/store-auto-subscribe-missing-global/_config.js b/test/runtime/samples/store-auto-subscribe-missing-global/_config.js new file mode 100644 index 0000000000..c4eb72b553 --- /dev/null +++ b/test/runtime/samples/store-auto-subscribe-missing-global/_config.js @@ -0,0 +1,3 @@ +export default { + error: 'missingGlobal is not defined' +}; \ No newline at end of file diff --git a/test/runtime/samples/store-auto-subscribe-missing-global/main.svelte b/test/runtime/samples/store-auto-subscribe-missing-global/main.svelte new file mode 100644 index 0000000000..196836edef --- /dev/null +++ b/test/runtime/samples/store-auto-subscribe-missing-global/main.svelte @@ -0,0 +1 @@ +

{$missingGlobal}

\ No newline at end of file