pull/4923/head
pushkine 5 years ago
parent 2492441e89
commit 059eec43e5

@ -3,6 +3,7 @@ import Wrapper from './wrappers/shared/Wrapper';
import { b, x } from 'code-red'; import { b, x } from 'code-red';
import { Node, Identifier, ArrayPattern, Literal, CallExpression } from 'estree'; import { Node, Identifier, ArrayPattern, Literal, CallExpression } from 'estree';
import { is_head } from './wrappers/shared/is_head'; import { is_head } from './wrappers/shared/is_head';
import { sanitize_name } from '../utils/stringify';
export interface BlockOptions { export interface BlockOptions {
parent?: Block; parent?: Block;
@ -465,14 +466,14 @@ export default class Block {
node.callee.name === "@listen" node.callee.name === "@listen"
) { ) {
// b`@listen(ref, "type", args);` // b`@listen(ref, "type", args);`
const listener = this.get_unique_name(`${(node.arguments[1] as Literal).value}_listener`); const listener = this.get_unique_name(`${sanitize_name((node.arguments[1] as Literal).value)}_listener`);
this.add_variable(listener); this.add_variable(listener);
mount.push(b`${listener} = ${node};`); mount.push(b`${listener} = ${node};`);
destroy.push(b`${listener}();`) destroy.push(b`${listener}();`)
} else if ( } else if (
node.type === "AssignmentExpression" && node.type === "AssignmentExpression" &&
node.left.type === "Identifier" && node.left.type === "Identifier" &&
node.left.name.endsWith("_action") node.left.name.includes("_action")
) { ) {
// b`identifier = use_action(args);` // b`identifier = use_action(args);`
mount.push(node); mount.push(node);

@ -448,7 +448,8 @@ export default function dom(
${unknown_props_check} ${unknown_props_check}
${component.slots.size || component.compile_options.dev ? b`let { $$slots = {}, $$scope } = $$props;` : null} ${component.slots.size || component.compile_options.dev ? b`let { $$slots = {} } = $$props;` : null}
${component.slots.size ? b`let { $$scope } = $$props;` : null}
${component.compile_options.dev && b`@validate_slots('${component.tag}', $$slots, [${[...component.slots.keys()].map(key => `'${key}'`).join(',')}]);`} ${component.compile_options.dev && b`@validate_slots('${component.tag}', $$slots, [${[...component.slots.keys()].map(key => `'${key}'`).join(',')}]);`}
${renderer.binding_groups.length > 0 && b`const $$binding_groups = [${renderer.binding_groups.map(_ => x`[]`)}];`} ${renderer.binding_groups.length > 0 && b`const $$binding_groups = [${renderer.binding_groups.map(_ => x`[]`)}];`}

@ -1,6 +1,7 @@
import { b, x } from 'code-red'; import { b, x } from 'code-red';
import Block from '../../Block'; import Block from '../../Block';
import Action from '../../../nodes/Action'; import Action from '../../../nodes/Action';
import { sanitize_name } from '../../../utils/stringify';
export default function add_actions( export default function add_actions(
block: Block, block: Block,
target: string, target: string,
@ -18,7 +19,7 @@ export function add_action(block: Block, target: string, action: Action) {
dependencies = expression.dynamic_dependencies(); dependencies = expression.dynamic_dependencies();
} }
const id = block.get_unique_name(`${action.name.replace(/[^a-zA-Z0-9_$]/g, '_')}_action`); const id = block.get_unique_name(`${sanitize_name(action.name)}_action`);
block.add_variable(id); block.add_variable(id);
const fn = block.renderer.reference(action.name); const fn = block.renderer.reference(action.name);

@ -5,6 +5,10 @@ export function string_literal(data: string) {
}; };
} }
export function sanitize_name(str){
return str.replace(/[^a-zA-Z0-9_$]/g, '_')
}
export function escape(data: string, { only_escape_at_symbol = false } = {}) { export function escape(data: string, { only_escape_at_symbol = false } = {}) {
return data.replace(only_escape_at_symbol ? /@+/g : /(@+|#+)/g, (match: string) => { return data.replace(only_escape_at_symbol ? /@+/g : /(@+|#+)/g, (match: string) => {
return match + match[0]; return match + match[0];

Loading…
Cancel
Save