Convert src/compiler/compile/render_dom/wrappers/shared/add_const_tags.ts to JavaScript

pull/8569/head
Simon Holthausen 3 years ago
parent e5d02f9dd6
commit 7922b63a3d

@ -9,6 +9,7 @@ import is_contextual from '../../../nodes/shared/is_contextual.js';
export default function add_actions(block, target, actions) {
actions.forEach((action) => add_action(block, target, action));
}
const regex_invalid_variable_identifier_characters = /[^a-zA-Z0-9_$]/g;
/**

@ -1,47 +1,48 @@
import ConstTag from '../../../nodes/ConstTag';
import Block from '../../Block';
import { b, Node, x } from 'code-red';
import Renderer from '../../Renderer';
import Expression from '../../../nodes/shared/Expression';
import { b, x } from 'code-red';
import Expression from '../../../nodes/shared/Expression.js';
export function add_const_tags(block: Block, const_tags: ConstTag[], ctx: string) {
const const_tags_props = [];
const_tags.forEach((const_tag, i) => {
const name = `#constants_${i}`;
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 {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_tags.forEach((const_tag, i) => {
const name = `#constants_${i}`;
const_tags_props.push(b `const ${name} = ${const_tag.expression.manipulate(block, ctx)}`);
const_tag.contexts.forEach((context) => {
if (context.type === 'DestructuredVariable') {
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)}`
);
} 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;
/** @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) => {
if (context.type === 'DestructuredVariable') {
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)}`);
}
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;
}
export function add_const_tags_context(renderer: Renderer, const_tags: ConstTag[]) {
const_tags.forEach((const_tag) => {
const_tag.contexts.forEach((context) => {
if (context.type !== 'DestructuredVariable') return;
renderer.add_to_context(context.key.name, true);
});
});
/**
* @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_tag.contexts.forEach((context) => {
if (context.type !== 'DestructuredVariable')
return;
renderer.add_to_context(context.key.name, true);
});
});
}

Loading…
Cancel
Save