mirror of https://github.com/sveltejs/svelte
make $capture_state/$inject_state act on entire state (#3822)
Previously, these methods only applied to exported props. Also, add $$inject option to constructor, which injects state before running the update loop.pull/4449/head
parent
a53da7e4b0
commit
cb64fb2ac9
@ -0,0 +1,5 @@
|
|||||||
|
export default {
|
||||||
|
options: {
|
||||||
|
dev: true
|
||||||
|
}
|
||||||
|
};
|
@ -0,0 +1,197 @@
|
|||||||
|
/* generated by Svelte vX.Y.Z */
|
||||||
|
import {
|
||||||
|
SvelteComponentDev,
|
||||||
|
add_location,
|
||||||
|
append_dev,
|
||||||
|
detach_dev,
|
||||||
|
dispatch_dev,
|
||||||
|
element,
|
||||||
|
init,
|
||||||
|
insert_dev,
|
||||||
|
noop,
|
||||||
|
safe_not_equal,
|
||||||
|
set_data_dev,
|
||||||
|
space,
|
||||||
|
subscribe,
|
||||||
|
text,
|
||||||
|
validate_store
|
||||||
|
} from "svelte/internal";
|
||||||
|
|
||||||
|
const file = undefined;
|
||||||
|
|
||||||
|
function create_fragment(ctx) {
|
||||||
|
let p;
|
||||||
|
let t0;
|
||||||
|
let t1;
|
||||||
|
let t2;
|
||||||
|
let t3;
|
||||||
|
let t4;
|
||||||
|
let t5;
|
||||||
|
let t6;
|
||||||
|
let t7;
|
||||||
|
let t8;
|
||||||
|
let t9;
|
||||||
|
let t10;
|
||||||
|
|
||||||
|
const block = {
|
||||||
|
c: function create() {
|
||||||
|
p = element("p");
|
||||||
|
t0 = text(/*prop*/ ctx[0]);
|
||||||
|
t1 = space();
|
||||||
|
t2 = text(/*realName*/ ctx[1]);
|
||||||
|
t3 = space();
|
||||||
|
t4 = text(/*local*/ ctx[3]);
|
||||||
|
t5 = space();
|
||||||
|
t6 = text(priv);
|
||||||
|
t7 = space();
|
||||||
|
t8 = text(/*$prop*/ ctx[2]);
|
||||||
|
t9 = space();
|
||||||
|
t10 = text(/*shadowedByModule*/ ctx[4]);
|
||||||
|
add_location(p, file, 22, 0, 430);
|
||||||
|
},
|
||||||
|
l: function claim(nodes) {
|
||||||
|
throw new Error("options.hydrate only works if the component was compiled with the `hydratable: true` option");
|
||||||
|
},
|
||||||
|
m: function mount(target, anchor) {
|
||||||
|
insert_dev(target, p, anchor);
|
||||||
|
append_dev(p, t0);
|
||||||
|
append_dev(p, t1);
|
||||||
|
append_dev(p, t2);
|
||||||
|
append_dev(p, t3);
|
||||||
|
append_dev(p, t4);
|
||||||
|
append_dev(p, t5);
|
||||||
|
append_dev(p, t6);
|
||||||
|
append_dev(p, t7);
|
||||||
|
append_dev(p, t8);
|
||||||
|
append_dev(p, t9);
|
||||||
|
append_dev(p, t10);
|
||||||
|
},
|
||||||
|
p: function update(ctx, [dirty]) {
|
||||||
|
if (dirty & /*prop*/ 1) set_data_dev(t0, /*prop*/ ctx[0]);
|
||||||
|
if (dirty & /*realName*/ 2) set_data_dev(t2, /*realName*/ ctx[1]);
|
||||||
|
if (dirty & /*$prop*/ 4) set_data_dev(t8, /*$prop*/ ctx[2]);
|
||||||
|
},
|
||||||
|
i: noop,
|
||||||
|
o: noop,
|
||||||
|
d: function destroy(detaching) {
|
||||||
|
if (detaching) detach_dev(p);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
dispatch_dev("SvelteRegisterBlock", {
|
||||||
|
block,
|
||||||
|
id: create_fragment.name,
|
||||||
|
type: "component",
|
||||||
|
source: "",
|
||||||
|
ctx
|
||||||
|
});
|
||||||
|
|
||||||
|
return block;
|
||||||
|
}
|
||||||
|
|
||||||
|
let moduleLiveBinding;
|
||||||
|
const moduleContantProps = 4;
|
||||||
|
let moduleLet;
|
||||||
|
const moduleConst = 2;
|
||||||
|
let shadowedByModule;
|
||||||
|
const priv = "priv";
|
||||||
|
|
||||||
|
function instance($$self, $$props, $$invalidate) {
|
||||||
|
let $prop,
|
||||||
|
$$unsubscribe_prop = noop,
|
||||||
|
$$subscribe_prop = () => ($$unsubscribe_prop(), $$unsubscribe_prop = subscribe(prop, $$value => $$invalidate(2, $prop = $$value)), prop);
|
||||||
|
|
||||||
|
$$self.$$.on_destroy.push(() => $$unsubscribe_prop());
|
||||||
|
let { prop } = $$props;
|
||||||
|
validate_store(prop, "prop");
|
||||||
|
$$subscribe_prop();
|
||||||
|
let { alias: realName } = $$props;
|
||||||
|
let local;
|
||||||
|
let shadowedByModule;
|
||||||
|
const writable_props = ["prop", "alias"];
|
||||||
|
|
||||||
|
Object.keys($$props).forEach(key => {
|
||||||
|
if (!~writable_props.indexOf(key) && key.slice(0, 2) !== "$$") console.warn(`<Component> was created with unknown prop '${key}'`);
|
||||||
|
});
|
||||||
|
|
||||||
|
$$self.$set = $$props => {
|
||||||
|
if ("prop" in $$props) $$subscribe_prop($$invalidate(0, prop = $$props.prop));
|
||||||
|
if ("alias" in $$props) $$invalidate(1, realName = $$props.alias);
|
||||||
|
};
|
||||||
|
|
||||||
|
$$self.$capture_state = () => ({
|
||||||
|
moduleLiveBinding,
|
||||||
|
moduleContantProps,
|
||||||
|
moduleLet,
|
||||||
|
moduleConst,
|
||||||
|
shadowedByModule,
|
||||||
|
prop,
|
||||||
|
realName,
|
||||||
|
local,
|
||||||
|
priv,
|
||||||
|
shadowedByModule,
|
||||||
|
computed,
|
||||||
|
$prop
|
||||||
|
});
|
||||||
|
|
||||||
|
$$self.$inject_state = $$props => {
|
||||||
|
if ("prop" in $$props) $$subscribe_prop($$invalidate(0, prop = $$props.prop));
|
||||||
|
if ("realName" in $$props) $$invalidate(1, realName = $$props.realName);
|
||||||
|
if ("local" in $$props) $$invalidate(3, local = $$props.local);
|
||||||
|
if ("shadowedByModule" in $$props) $$invalidate(4, shadowedByModule = $$props.shadowedByModule);
|
||||||
|
if ("computed" in $$props) computed = $$props.computed;
|
||||||
|
};
|
||||||
|
|
||||||
|
let computed;
|
||||||
|
|
||||||
|
if ($$props && "$$inject" in $$props) {
|
||||||
|
$$self.$inject_state($$props.$$inject);
|
||||||
|
}
|
||||||
|
|
||||||
|
$: computed = local * 2;
|
||||||
|
return [prop, realName, $prop, local, shadowedByModule];
|
||||||
|
}
|
||||||
|
|
||||||
|
class Component extends SvelteComponentDev {
|
||||||
|
constructor(options) {
|
||||||
|
super(options);
|
||||||
|
init(this, options, instance, create_fragment, safe_not_equal, { prop: 0, alias: 1 });
|
||||||
|
|
||||||
|
dispatch_dev("SvelteRegisterComponent", {
|
||||||
|
component: this,
|
||||||
|
tagName: "Component",
|
||||||
|
options,
|
||||||
|
id: create_fragment.name
|
||||||
|
});
|
||||||
|
|
||||||
|
const { ctx } = this.$$;
|
||||||
|
const props = options.props || {};
|
||||||
|
|
||||||
|
if (/*prop*/ ctx[0] === undefined && !("prop" in props)) {
|
||||||
|
console.warn("<Component> was created without expected prop 'prop'");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (/*realName*/ ctx[1] === undefined && !("alias" in props)) {
|
||||||
|
console.warn("<Component> was created without expected prop 'alias'");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
get prop() {
|
||||||
|
throw new Error("<Component>: Props cannot be read directly from the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
|
||||||
|
}
|
||||||
|
|
||||||
|
set prop(value) {
|
||||||
|
throw new Error("<Component>: Props cannot be set directly on the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
|
||||||
|
}
|
||||||
|
|
||||||
|
get alias() {
|
||||||
|
throw new Error("<Component>: Props cannot be read directly from the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
|
||||||
|
}
|
||||||
|
|
||||||
|
set alias(value) {
|
||||||
|
throw new Error("<Component>: Props cannot be set directly on the component instance unless compiling with 'accessors: true' or '<svelte:options accessors/>'");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Component;
|
||||||
|
export { moduleLiveBinding, moduleContantProps };
|
@ -0,0 +1,23 @@
|
|||||||
|
<script context="module">
|
||||||
|
export let moduleLiveBinding;
|
||||||
|
export const moduleContantProps = 4;
|
||||||
|
let moduleLet;
|
||||||
|
const moduleConst = 2;
|
||||||
|
let shadowedByModule;
|
||||||
|
</script>
|
||||||
|
<script>
|
||||||
|
export let prop;
|
||||||
|
|
||||||
|
let realName;
|
||||||
|
export { realName as alias };
|
||||||
|
|
||||||
|
let local;
|
||||||
|
|
||||||
|
const priv = 'priv';
|
||||||
|
|
||||||
|
$: computed = local * 2;
|
||||||
|
|
||||||
|
let shadowedByModule;
|
||||||
|
</script>
|
||||||
|
<!-- NOTE $prop ensures store subscriptions are not part of captured state -->
|
||||||
|
<p>{prop} {realName} {local} {priv} {$prop} {shadowedByModule}</p>
|
Loading…
Reference in new issue