mirror of https://github.com/sveltejs/svelte
pull/8569/head
parent
e5d02f9dd6
commit
7922b63a3d
@ -1,47 +1,48 @@
|
|||||||
import ConstTag from '../../../nodes/ConstTag';
|
import { b, x } from 'code-red';
|
||||||
import Block from '../../Block';
|
import Expression from '../../../nodes/shared/Expression.js';
|
||||||
import { b, Node, x } from 'code-red';
|
|
||||||
import Renderer from '../../Renderer';
|
|
||||||
import Expression from '../../../nodes/shared/Expression';
|
|
||||||
|
|
||||||
export function add_const_tags(block: Block, const_tags: ConstTag[], ctx: string) {
|
/**
|
||||||
|
* @param {import('../../Block.js').default} block
|
||||||
|
* @param {import('../../../nodes/ConstTag.js').default[]} const_tags
|
||||||
|
* @param {string} ctx
|
||||||
|
*/
|
||||||
|
export function add_const_tags(block, const_tags, ctx) {
|
||||||
const const_tags_props = [];
|
const const_tags_props = [];
|
||||||
const_tags.forEach((const_tag, i) => {
|
const_tags.forEach((const_tag, i) => {
|
||||||
const name = `#constants_${i}`;
|
const name = `#constants_${i}`;
|
||||||
const_tags_props.push(b`const ${name} = ${const_tag.expression.manipulate(block, ctx)}`);
|
const_tags_props.push(b `const ${name} = ${const_tag.expression.manipulate(block, ctx)}`);
|
||||||
const to_ctx = (name: string) =>
|
|
||||||
block.renderer.context_lookup.has(name)
|
|
||||||
? x`${ctx}[${block.renderer.context_lookup.get(name).index}]`
|
|
||||||
: ({ type: 'Identifier', name } as Node);
|
|
||||||
|
|
||||||
|
/** @param {string} name */
|
||||||
|
const to_ctx = (name) => block.renderer.context_lookup.has(name)
|
||||||
|
? x `${ctx}[${block.renderer.context_lookup.get(name).index}]`
|
||||||
|
: ( /** @type {import('code-red').Node} */({ type: 'Identifier', name }));
|
||||||
const_tag.contexts.forEach((context) => {
|
const_tag.contexts.forEach((context) => {
|
||||||
if (context.type === 'DestructuredVariable') {
|
if (context.type === 'DestructuredVariable') {
|
||||||
const_tags_props.push(
|
const_tags_props.push(b `${ctx}[${block.renderer.context_lookup.get(context.key.name).index}] = ${context.default_modifier(context.modifier({ type: 'Identifier', name }), to_ctx)}`);
|
||||||
b`${ctx}[${
|
}
|
||||||
block.renderer.context_lookup.get(context.key.name).index
|
else {
|
||||||
}] = ${context.default_modifier(context.modifier({ type: 'Identifier', name }), to_ctx)}`
|
const expression = new Expression(block.renderer.component, const_tag, const_tag.scope, context.key);
|
||||||
);
|
const_tags_props.push(b `const ${context.property_name} = ${expression.manipulate(block, ctx)}`);
|
||||||
} else {
|
|
||||||
const expression = new Expression(
|
|
||||||
block.renderer.component,
|
|
||||||
const_tag,
|
|
||||||
const_tag.scope,
|
|
||||||
context.key
|
|
||||||
);
|
|
||||||
const_tags_props.push(
|
|
||||||
b`const ${context.property_name} = ${expression.manipulate(block, ctx)}`
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
return const_tags_props;
|
return const_tags_props;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function add_const_tags_context(renderer: Renderer, const_tags: ConstTag[]) {
|
/**
|
||||||
|
* @param {import('../../Renderer.js').default} renderer
|
||||||
|
* @param {import('../../../nodes/ConstTag.js').default[]} const_tags
|
||||||
|
*/
|
||||||
|
export function add_const_tags_context(renderer, const_tags) {
|
||||||
const_tags.forEach((const_tag) => {
|
const_tags.forEach((const_tag) => {
|
||||||
const_tag.contexts.forEach((context) => {
|
const_tag.contexts.forEach((context) => {
|
||||||
if (context.type !== 'DestructuredVariable') return;
|
if (context.type !== 'DestructuredVariable')
|
||||||
|
return;
|
||||||
renderer.add_to_context(context.key.name, true);
|
renderer.add_to_context(context.key.name, true);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in new issue