subscribe to global stores (#2139)

pull/2235/head
Richard Harris 6 years ago
parent 76cc07d7f6
commit 6d3e47812d

@ -168,7 +168,7 @@ export default class Component {
this.add_reference(subscribable_name); this.add_reference(subscribable_name);
const variable = this.var_lookup.get(subscribable_name); const variable = this.var_lookup.get(subscribable_name);
variable.subscribable = true; if (variable) variable.subscribable = true;
} else { } else {
this.usedNames.add(name); this.usedNames.add(name);
} }

@ -149,13 +149,6 @@ export default class Expression {
dependencies.add(name); 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.add_reference(name);
component.warn_if_undefined(nodes[0], template_scope); component.warn_if_undefined(nodes[0], template_scope);
} }

@ -326,7 +326,7 @@ export default function dom(
const reactive_store_subscriptions = reactive_stores const reactive_store_subscriptions = reactive_stores
.filter(store => { .filter(store => {
const variable = component.var_lookup.get(store.name.slice(1)); const variable = component.var_lookup.get(store.name.slice(1));
return variable.hoistable; return !variable || variable.hoistable;
}) })
.map(({ name }) => deindent` .map(({ name }) => deindent`
${component.compileOptions.dev && `@validate_store(${name.slice(1)}, '${name.slice(1)}');`} ${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 const resubscribable_reactive_store_unsubscribers = reactive_stores
.filter(store => { .filter(store => {
const variable = component.var_lookup.get(store.name.slice(1)); 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)}());`); .map(({ name }) => `$$self.$$.on_destroy.push(() => $$unsubscribe_${name.slice(1)}());`);
@ -370,7 +370,7 @@ export default function dom(
const name = $name.slice(1); const name = $name.slice(1);
const store = component.var_lookup.get(name); 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}); }) }` return `${$name}, $$unsubscribe_${name} = @noop, $$subscribe_${name} = () => { $$unsubscribe_${name}(); $$unsubscribe_${name} = ${name}.subscribe($$value => { ${$name} = $$value; $$invalidate('${$name}', ${$name}); }) }`
} }

@ -0,0 +1,3 @@
export default {
error: 'missingGlobal is not defined'
};
Loading…
Cancel
Save