chore: remove is_async (#16769)

* chore: remove is_async

* unused
pull/16780/head
Rich Harris 4 weeks ago committed by GitHub
parent 9d8f259db3
commit ba391448eb
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -12,8 +12,7 @@ export function create_fragment(transparent = false) {
metadata: { metadata: {
transparent, transparent,
dynamic: false, dynamic: false,
has_await: false, has_await: false
is_async: false
} }
}; };
} }

@ -43,10 +43,6 @@ export function AwaitBlock(node, context) {
context.visit(node.expression, { ...context.state, expression: node.metadata.expression }); context.visit(node.expression, { ...context.state, expression: node.metadata.expression });
if (node.metadata.expression.has_await && context.state.fragment) {
context.state.fragment.metadata.is_async = true;
}
if (node.pending) context.visit(node.pending); if (node.pending) context.visit(node.pending);
if (node.then) context.visit(node.then); if (node.then) context.visit(node.then);
if (node.catch) context.visit(node.catch); if (node.catch) context.visit(node.catch);

@ -35,11 +35,6 @@ export function EachBlock(node, context) {
scope: /** @type {Scope} */ (context.state.scope.parent) scope: /** @type {Scope} */ (context.state.scope.parent)
}); });
// TODO it should be impossible to be in the template and not have a fragment...
if (node.metadata.expression.has_await && context.state.fragment) {
context.state.fragment.metadata.is_async = true;
}
context.visit(node.body); context.visit(node.body);
if (node.key) context.visit(node.key); if (node.key) context.visit(node.key);
if (node.fallback) context.visit(node.fallback); if (node.fallback) context.visit(node.fallback);

@ -22,10 +22,6 @@ export function IfBlock(node, context) {
expression: node.metadata.expression expression: node.metadata.expression
}); });
if (node.metadata.expression.has_await && context.state.fragment) {
context.state.fragment.metadata.is_async = true;
}
context.visit(node.consequent); context.visit(node.consequent);
if (node.alternate) context.visit(node.alternate); if (node.alternate) context.visit(node.alternate);
} }

@ -1,16 +1,16 @@
/** @import { BlockStatement, Expression, Pattern } from 'estree' */ /** @import { BlockStatement, Expression, Pattern, Statement } from 'estree' */
/** @import { AST } from '#compiler' */ /** @import { AST } from '#compiler' */
/** @import { ComponentContext } from '../types.js' */ /** @import { ComponentContext } from '../types.js' */
import * as b from '#compiler/builders'; import * as b from '#compiler/builders';
import { block_close } from './shared/utils.js'; import { block_close, call_child_payload } from './shared/utils.js';
/** /**
* @param {AST.AwaitBlock} node * @param {AST.AwaitBlock} node
* @param {ComponentContext} context * @param {ComponentContext} context
*/ */
export function AwaitBlock(node, context) { export function AwaitBlock(node, context) {
context.state.template.push( /** @type {Statement} */
b.stmt( let statement = b.stmt(
b.call( b.call(
'$.await', '$.await',
b.id('$$payload'), b.id('$$payload'),
@ -23,7 +23,11 @@ export function AwaitBlock(node, context) {
node.then ? /** @type {BlockStatement} */ (context.visit(node.then)) : b.block([]) node.then ? /** @type {BlockStatement} */ (context.visit(node.then)) : b.block([])
) )
) )
),
block_close
); );
if (node.metadata.expression.has_await) {
statement = call_child_payload(b.block([statement]), true);
}
context.state.template.push(statement, block_close);
} }

@ -2,7 +2,7 @@
/** @import { AST } from '#compiler' */ /** @import { AST } from '#compiler' */
/** @import { ComponentContext } from '../types.js' */ /** @import { ComponentContext } from '../types.js' */
import * as b from '#compiler/builders'; import * as b from '#compiler/builders';
import { block_close, block_open, block_open_else } from './shared/utils.js'; import { block_close, block_open, block_open_else, call_child_payload } from './shared/utils.js';
/** /**
* @param {AST.EachBlock} node * @param {AST.EachBlock} node
@ -17,7 +17,9 @@ export function EachBlock(node, context) {
each_node_meta.contains_group_binding || !node.index ? each_node_meta.index : b.id(node.index); each_node_meta.contains_group_binding || !node.index ? each_node_meta.index : b.id(node.index);
const array_id = state.scope.root.unique('each_array'); const array_id = state.scope.root.unique('each_array');
state.init.push(b.const(array_id, b.call('$.ensure_array_like', collection)));
/** @type {Statement} */
let block = b.block([b.const(array_id, b.call('$.ensure_array_like', collection))]);
/** @type {Statement[]} */ /** @type {Statement[]} */
const each = []; const each = [];
@ -47,19 +49,23 @@ export function EachBlock(node, context) {
const fallback = /** @type {BlockStatement} */ (context.visit(node.fallback)); const fallback = /** @type {BlockStatement} */ (context.visit(node.fallback));
fallback.body.unshift( fallback.body.unshift(b.stmt(b.call(b.id('$$payload.push'), block_open_else)));
b.stmt(b.call(b.member(b.id('$$payload'), b.id('push')), block_open_else))
);
state.template.push( block.body.push(
b.if( b.if(
b.binary('!==', b.member(array_id, 'length'), b.literal(0)), b.binary('!==', b.member(array_id, 'length'), b.literal(0)),
b.block([open, for_loop]), b.block([open, for_loop]),
fallback fallback
), )
block_close
); );
} else { } else {
state.template.push(block_open, for_loop, block_close); state.template.push(block_open);
block.body.push(for_loop);
}
if (node.metadata.expression.has_await) {
state.template.push(call_child_payload(block, true), block_close);
} else {
state.template.push(...block.body, block_close);
} }
} }

@ -1,14 +1,8 @@
/** @import { AST } from '#compiler' */ /** @import { AST } from '#compiler' */
/** @import { Statement } from 'estree' */
/** @import { ComponentContext, ComponentServerTransformState } from '../types.js' */ /** @import { ComponentContext, ComponentServerTransformState } from '../types.js' */
import { clean_nodes, infer_namespace } from '../../utils.js'; import { clean_nodes, infer_namespace } from '../../utils.js';
import * as b from '#compiler/builders'; import * as b from '#compiler/builders';
import { import { empty_comment, process_children, build_template } from './shared/utils.js';
empty_comment,
process_children,
build_template,
call_child_payload
} from './shared/utils.js';
/** /**
* @param {AST.Fragment} node * @param {AST.Fragment} node
@ -48,15 +42,5 @@ export function Fragment(node, context) {
process_children(trimmed, { ...context, state }); process_children(trimmed, { ...context, state });
if (node.metadata.is_async) {
/** @type {Statement[]} */
const statements = [];
statements.push(...state.init);
statements.push(...build_template(state.template));
return b.block([call_child_payload(b.block(statements), true)]);
}
return b.block([...state.init, ...build_template(state.template)]); return b.block([...state.init, ...build_template(state.template)]);
} }

@ -1,8 +1,8 @@
/** @import { BlockStatement, Expression } from 'estree' */ /** @import { BlockStatement, Expression, Statement } from 'estree' */
/** @import { AST } from '#compiler' */ /** @import { AST } from '#compiler' */
/** @import { ComponentContext } from '../types.js' */ /** @import { ComponentContext } from '../types.js' */
import * as b from '#compiler/builders'; import * as b from '#compiler/builders';
import { block_close, block_open, block_open_else } from './shared/utils.js'; import { block_close, block_open, block_open_else, call_child_payload } from './shared/utils.js';
/** /**
* @param {AST.IfBlock} node * @param {AST.IfBlock} node
@ -22,5 +22,12 @@ export function IfBlock(node, context) {
b.stmt(b.call(b.member(b.id('$$payload'), b.id('push')), block_open_else)) b.stmt(b.call(b.member(b.id('$$payload'), b.id('push')), block_open_else))
); );
context.state.template.push(b.if(test, consequent, alternate), block_close); /** @type {Statement} */
let statement = b.if(test, consequent, alternate);
if (node.metadata.expression.has_await) {
statement = call_child_payload(b.block([statement]), true);
}
context.state.template.push(statement, block_close);
} }

@ -178,8 +178,7 @@ export function RegularElement(node, context) {
b.id('$$payload'), b.id('$$payload'),
b.arrow( b.arrow(
[b.id('$$payload')], [b.id('$$payload')],
b.block([...inner_state.init, ...build_template(inner_state.template)]), b.block([...inner_state.init, ...build_template(inner_state.template)])
node.fragment.metadata.is_async
) )
) )
) )
@ -206,13 +205,9 @@ export function RegularElement(node, context) {
b.block([...inner_state.init, ...build_template(inner_state.template)]) b.block([...inner_state.init, ...build_template(inner_state.template)])
) )
); );
} else {
if (node.fragment.metadata.is_async) {
state.template.push(/** @type {Statement} */ (context.visit(node.fragment)));
} else { } else {
process_children(trimmed, { ...context, state }); process_children(trimmed, { ...context, state });
} }
}
if (select_with_value) { if (select_with_value) {
// we need to create a child scope so that the `select_value` only applies children of this select element // we need to create a child scope so that the `select_value` only applies children of this select element

@ -57,8 +57,6 @@ export namespace AST {
*/ */
dynamic: boolean; dynamic: boolean;
has_await: boolean; has_await: boolean;
/** TODO document */
is_async: boolean;
}; };
} }

@ -18,7 +18,7 @@ export default function Async_each_fallback_hoisting($$payload) {
$$payload.push(`<!---->`); $$payload.push(`<!---->`);
$$payload.push(async () => $.escape(await Promise.resolve(4))); $$payload.push(async () => $.escape(await Promise.resolve(4)));
} }
});
$$payload.push(`<!--]-->`); $$payload.push(`<!--]-->`);
});
} }

@ -5,18 +5,18 @@ export default function Async_each_hoisting($$payload) {
const second = Promise.resolve(2); const second = Promise.resolve(2);
const third = Promise.resolve(3); const third = Promise.resolve(3);
$$payload.push(`<!--[-->`);
$$payload.child(async ($$payload) => { $$payload.child(async ($$payload) => {
const each_array = $.ensure_array_like(await Promise.resolve([first, second, third])); const each_array = $.ensure_array_like(await Promise.resolve([first, second, third]));
$$payload.push(`<!--[-->`);
for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) { for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
let item = each_array[$$index]; let item = each_array[$$index];
$$payload.push(`<!---->`); $$payload.push(`<!---->`);
$$payload.push(async () => $.escape(await item)); $$payload.push(async () => $.escape(await item));
} }
});
$$payload.push(`<!--]-->`); $$payload.push(`<!--]-->`);
});
} }

@ -9,7 +9,7 @@ export default function Async_if_alternate_hoisting($$payload) {
$$payload.push('<!--[!-->'); $$payload.push('<!--[!-->');
$$payload.push(async () => $.escape(await Promise.resolve('yes yes yes'))); $$payload.push(async () => $.escape(await Promise.resolve('yes yes yes')));
} }
});
$$payload.push(`<!--]-->`); $$payload.push(`<!--]-->`);
});
} }

@ -9,7 +9,7 @@ export default function Async_if_hoisting($$payload) {
$$payload.push('<!--[!-->'); $$payload.push('<!--[!-->');
$$payload.push(async () => $.escape(await Promise.reject('no no no'))); $$payload.push(async () => $.escape(await Promise.reject('no no no')));
} }
});
$$payload.push(`<!--]-->`); $$payload.push(`<!--]-->`);
});
} }

@ -1,10 +1,10 @@
import * as $ from 'svelte/internal/server'; import * as $ from 'svelte/internal/server';
export default function Delegated_locally_declared_shadowed($$payload) { export default function Delegated_locally_declared_shadowed($$payload) {
const each_array = $.ensure_array_like({ length: 1 });
$$payload.push(`<!--[-->`); $$payload.push(`<!--[-->`);
const each_array = $.ensure_array_like({ length: 1 });
for (let index = 0, $$length = each_array.length; index < $$length; index++) { for (let index = 0, $$length = each_array.length; index < $$length; index++) {
$$payload.push(`<button type="button"${$.attr('data-index', index)}>B</button>`); $$payload.push(`<button type="button"${$.attr('data-index', index)}>B</button>`);
} }

@ -1,10 +1,10 @@
import * as $ from 'svelte/internal/server'; import * as $ from 'svelte/internal/server';
export default function Each_index_non_null($$payload) { export default function Each_index_non_null($$payload) {
const each_array = $.ensure_array_like(Array(10));
$$payload.push(`<!--[-->`); $$payload.push(`<!--[-->`);
const each_array = $.ensure_array_like(Array(10));
for (let i = 0, $$length = each_array.length; i < $$length; i++) { for (let i = 0, $$length = each_array.length; i < $$length; i++) {
$$payload.push(`<p>index: ${$.escape(i)}</p>`); $$payload.push(`<p>index: ${$.escape(i)}</p>`);
} }

@ -1,10 +1,10 @@
import * as $ from 'svelte/internal/server'; import * as $ from 'svelte/internal/server';
export default function Each_string_template($$payload) { export default function Each_string_template($$payload) {
const each_array = $.ensure_array_like(['foo', 'bar', 'baz']);
$$payload.push(`<!--[-->`); $$payload.push(`<!--[-->`);
const each_array = $.ensure_array_like(['foo', 'bar', 'baz']);
for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) { for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
let thing = each_array[$$index]; let thing = each_array[$$index];

Loading…
Cancel
Save