Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
move computation of event def to event-handler
  • Loading branch information
jasonlyu123 committed Jul 28, 2020
commit 7dda371dcd8f3d1f9ef2860e8b2def0f72fffe79
26 changes: 21 additions & 5 deletions packages/svelte2tsx/src/nodes/event-handler.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Node } from "estree-walker";
import { Node } from 'estree-walker';

export function createEventHandlerTransformer() {
const events = new Map<string, string | string[]>();
Expand All @@ -16,7 +16,7 @@ export function createEventHandlerTransformer() {

// pass-through/ bubble
if (!node.expression) {
if (parent.type === "InlineComponent") {
if (parent.type === 'InlineComponent') {
handleEventHandlerBubble();
} else {
events.set(
Expand All @@ -35,13 +35,29 @@ export function createEventHandlerTransformer() {

function getEventDefExpressionForNonCompoent(eventName: string, ele: Node) {
switch (ele.type) {
case "Element":
case 'Element':
return `__sveltets_mapElementEvent('${eventName}')`;
case "Body":
case 'Body':
return `__sveltets_mapBodyEvent('${eventName}')`;
case "Window":
case 'Window':
return `__sveltets_mapWindowEvent('${eventName}')`;
default:
break;
}
}

export function eventMapToString(events: Map<string, string | string[]>) {
return '{' +
Array.from(events.entries()).map(eventMapEntryToString).join(', ') +
'}';

}

function eventMapEntryToString([eventName, expression]: [
string,
string | string[]
]) {
return `'${eventName}':${
Array.isArray(expression) ? `[${expression}]` : expression
}`;
}
16 changes: 3 additions & 13 deletions packages/svelte2tsx/src/svelte2tsx.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import { parseHtmlx } from './htmlxparser';
import { convertHtmlxToJsx } from './htmlxtojsx';
import { Node } from 'estree-walker';
import * as ts from 'typescript';
import { createEventHandlerTransformer } from './nodes/event-handler';
import { createEventHandlerTransformer, eventMapToString } from './nodes/event-handler';
import { findExortKeyword } from './utils/tsAst';
import { ExportedNames, InstanceScriptProcessResult, CreateRenderFunctionPara } from './interfaces';
import { createRenderFunctionGetterStr, createClassGetters } from './nodes/exportgetters';
Expand Down Expand Up @@ -968,23 +968,13 @@ function createRenderFunction({
.join(', ') +
'}';

const eventMapEntryToString = ([evnetName, expression]: [
string,
string | string[]
]) =>
`'${evnetName}':${
Array.isArray(expression) ? `[${expression}]` : expression
}`;
const eventsDef =
"{" +
Array.from(events.entries()).map(eventMapEntryToString).join(", ") +
"}";


const returnString =
`\nreturn { props: ${createPropsStr(
exportedNames
)}, slots: ${slotsAsDef}, getters: ${createRenderFunctionGetterStr(getters)}` +
`, events: ${eventsDef} }}`;
`, events: ${eventMapToString(events)} }}`;
str.append(returnString);
}

Expand Down