chore: tidy up post-#10481 (#10503)

* simplify

* replace snapshot test with runtime test

* this is overkill

---------

Co-authored-by: Rich Harris <rich.harris@vercel.com>
pull/10499/head
Rich Harris 9 months ago committed by GitHub
parent 2c93c255f0
commit a2014809ec
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -362,25 +362,6 @@ function is_store_name(name) {
return name[0] === '$' && /[A-Za-z_]/.test(name[1]); return name[0] === '$' && /[A-Za-z_]/.test(name[1]);
} }
/**
*
* @param {Iterable<import('#compiler').Binding>} bindings
*/
function store_sub_exist(bindings) {
for (const binding of bindings) {
if (binding.kind === 'store_sub') {
for (const reference of binding.references) {
const node = reference.path.at(-1);
// hacky way to ensure the sub is not in a directive e.g. use:$store as it is unneeded
if (node?.type !== 'RegularElement') {
return true;
}
}
}
}
}
/** /**
* @param {import('estree').AssignmentExpression} node * @param {import('estree').AssignmentExpression} node
* @param {import('zimmerframe').Context<import('#compiler').SvelteNode, import('./types').ServerTransformState>} context * @param {import('zimmerframe').Context<import('#compiler').SvelteNode, import('./types').ServerTransformState>} context
@ -2108,7 +2089,11 @@ export function server_component(analysis, options) {
]; ];
} }
if (store_sub_exist(analysis.instance.scope.declarations.values())) { if (
[...analysis.instance.scope.declarations.values()].some(
(binding) => binding.kind === 'store_sub'
)
) {
instance.body.unshift(b.const('$$store_subs', b.object([]))); instance.body.unshift(b.const('$$store_subs', b.object([])));
template.body.push(b.stmt(b.call('$.unsubscribe_stores', b.id('$$store_subs')))); template.body.push(b.stmt(b.call('$.unsubscribe_stores', b.id('$$store_subs'))));
} }

@ -331,15 +331,10 @@ export function create_scopes(ast, root, allow_reactive_declarations, parent) {
} }
/** /**
* Reference store in transion:, use:, animate: directives
* @type {import('zimmerframe').Visitor<import('#compiler').Directive, State, import('#compiler').SvelteNode>} * @type {import('zimmerframe').Visitor<import('#compiler').Directive, State, import('#compiler').SvelteNode>}
*/ */
const SvelteDirective = (node, context) => { const SvelteDirective = (node, context) => {
const name = node.name; context.state.scope.reference(b.id(node.name), context.path);
if (name[0] === '$') {
context.state.scope.reference(b.id(name), context.path);
}
}; };
walk(ast, state, { walk(ast, state, {

@ -0,0 +1,6 @@
import { test } from '../../test';
export default test({
html: `<div>mounted</div>`,
ssrHtml: `<div>hello</div>`
});

@ -0,0 +1,9 @@
<script>
import { writable } from 'svelte/store';
let action = writable((node) => {
node.textContent = 'mounted';
});
</script>
<div use:$action>hello</div>

@ -1,32 +0,0 @@
// main.svelte (Svelte VERSION)
// Note: compiler output will change before 5.0 is released!
import "svelte/internal/disclose-version";
import * as $ from "svelte/internal";
import { writable } from 'svelte/store';
var frag = $.template(`<div>Hello!</div> <div>Hello!</div>`, true);
export default function Main($$anchor, $$props) {
$.push($$props, false);
const $$subscriptions = {};
$.unsubscribe_on_destroy($$subscriptions);
const $animate = () => $.store_get(animate, "$animate", $$subscriptions);
const animate = writable();
$.init();
/* Init */
var fragment = $.open_frag($$anchor, true, frag);
var div = $.child_frag(fragment);
$.in(div, $animate, () => ({ duration: 750, x: 0, y: -200 }), false);
var div_1 = $.sibling($.sibling(div, true));
$.action(div_1, ($$node) => $animate()($$node));
$.close_frag($$anchor, fragment);
$.pop();
}

@ -1,13 +0,0 @@
// main.svelte (Svelte VERSION)
// Note: compiler output will change before 5.0 is released!
import * as $ from "svelte/internal/server";
import { writable } from 'svelte/store';
export default function Main($$payload, $$props) {
$.push(false);
const animate = writable();
$$payload.out += `<div>Hello!</div> <div>Hello!</div>`;
$.pop();
}

@ -1,8 +0,0 @@
<script>
import { writable, } from 'svelte/store';
const animate = writable();
</script>
<div in:$animate={{ duration: 750, x:0, y: -200}}>Hello!</div>
<div use:$animate>Hello!</div>
Loading…
Cancel
Save