Convert src/compiler/compile/render_ssr/handlers/AwaitBlock.ts to JavaScript

pull/8569/head
Simon Holthausen 3 years ago
parent 346059505a
commit 91202a220b

@ -1,26 +1,37 @@
import Renderer, { RenderOptions } from '../Renderer';
import AwaitBlock from '../../nodes/AwaitBlock';
import { x } from 'code-red'; import { x } from 'code-red';
import { get_const_tags } from './shared/get_const_tags'; import { get_const_tags } from './shared/get_const_tags.js';
export default function (node: AwaitBlock, renderer: Renderer, options: RenderOptions) { /**
renderer.push(); * @param {AwaitBlock} node
renderer.render(node.pending.children, options); * @param {Renderer} renderer
const pending = renderer.pop(); * @param {import('../Renderer').RenderOptions} options
*/
export default function (node, renderer, options) {
renderer.push();
renderer.render(node.pending.children, options);
renderer.push(); /**
renderer.render(node.then.children, options); * @type {undefined}
const then = renderer.pop(); */
const pending = renderer.pop();
renderer.push();
renderer.render(node.then.children, options);
renderer.add_expression(x` /**
* @type {undefined}
*/
const then = renderer.pop();
renderer.add_expression(x `
function(__value) { function(__value) {
if (@is_promise(__value)) { if (@is_promise(__value)) {
__value.then(null, @noop); __value.then(null, @noop);
return ${pending}; return ${pending};
} }
return (function(${node.then_node ? node.then_node : ''}) { ${get_const_tags( return (function(${node.then_node ? node.then_node : ''}) { ${get_const_tags(node.then.const_tags)}; return ${then}; }(__value));
node.then.const_tags
)}; return ${then}; }(__value));
}(${node.expression.node}) }(${node.expression.node})
`); `);
} }

@ -1,12 +1,12 @@
/** /**
* Transforms a list of Text and MustacheTags into a TemplateLiteral expression. * Transforms a list of Text and MustacheTags into a TemplateLiteral expression.
* Start/End positions on the elements of the expression are not set. * Start/End positions on the elements of the expression are not set.
* @param {Array<Text | MustacheTag>} value * @param {Array<import('../../interfaces.js').Text | import('../../interfaces.js').MustacheTag>} value
* @returns {import("C:/repos/svelte/svelte/node_modules/.pnpm/@types+estree@1.0.0/node_modules/@types/estree/index").TemplateLiteral} * @returns {import('estree').TemplateLiteral}
*/ */
export function nodes_to_template_literal(value) { export function nodes_to_template_literal(value) {
/** /**
* @type {TemplateLiteral} * @type {import('estree').TemplateLiteral}
*/ */
const literal = { const literal = {
type: 'TemplateLiteral', type: 'TemplateLiteral',
@ -15,7 +15,7 @@ export function nodes_to_template_literal(value) {
}; };
/** /**
* @type {TemplateElement} * @type {import('estree').TemplateElement}
*/ */
let quasi = { let quasi = {
type: 'TemplateElement', type: 'TemplateElement',
@ -27,7 +27,7 @@ export function nodes_to_template_literal(value) {
quasi.value.raw += node.raw; quasi.value.raw += node.raw;
} else if (node.type === 'MustacheTag') { } else if (node.type === 'MustacheTag') {
literal.quasis.push(quasi); literal.quasis.push(quasi);
literal.expressions.push(node.expression); literal.expressions.push(/** @type {any} */ (node.expression));
quasi = { quasi = {
type: 'TemplateElement', type: 'TemplateElement',
value: { raw: '', cooked: null }, value: { raw: '', cooked: null },

Loading…
Cancel
Save