Skip to content
This repository was archived by the owner on Jul 19, 2025. It is now read-only.

Commit 76c024d

Browse files
committed
wip: save
1 parent f0361ba commit 76c024d

File tree

3 files changed

+37
-30
lines changed
  • packages-private/sfc-playground/src
  • packages

3 files changed

+37
-30
lines changed

packages-private/sfc-playground/src/App.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ const importMap = computed(() => {
5757
'vue/vapor': vapor,
5858
},
5959
}
60-
if (useVaporMode.value) vaporImportMap.imports!.vue = vapor
60+
// if (useVaporMode.value) vaporImportMap.imports!.vue = vapor
6161
6262
return mergeImportMap(vueImportMap.value, vaporImportMap)
6363
})

packages/compiler-vapor/src/generators/event.ts

Lines changed: 32 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@ export function genSetEvent(
2222
const { element, key, keyOverride, value, modifiers, delegate, effect } = oper
2323

2424
const name = genName()
25-
const handler = genEventHandler(context, value)
25+
let handler = genEventHandler(context, value)
26+
handler = genWithModifiers(context, handler, modifiers.nonKeys)
27+
handler = genWithKeys(context, handler, modifiers.keys)
2628
const eventOptions = genEventOptions()
2729

2830
if (delegate) {
@@ -36,7 +38,7 @@ export function genSetEvent(
3638
vaporHelper(delegate ? 'delegate' : 'on'),
3739
`n${element}`,
3840
name,
39-
handler,
41+
['() => ', ...handler],
4042
eventOptions,
4143
),
4244
]
@@ -55,13 +57,11 @@ export function genSetEvent(
5557
}
5658

5759
function genEventOptions(): CodeFragment[] | undefined {
58-
let { options, keys, nonKeys } = modifiers
59-
if (!options.length && !nonKeys.length && !keys.length && !effect) return
60+
let { options } = modifiers
61+
if (!options.length && !effect) return
6062

6163
return genMulti(
6264
DELIMITERS_OBJECT_NEWLINE,
63-
!!nonKeys.length && ['modifiers: ', genArrayExpression(nonKeys)],
64-
!!keys.length && ['keys: ', genArrayExpression(keys)],
6565
effect && ['effect: true'],
6666
...options.map((option): CodeFragment[] => [`${option}: true`]),
6767
)
@@ -83,10 +83,6 @@ export function genSetDynamicEvents(
8383
]
8484
}
8585

86-
function genArrayExpression(elements: string[]) {
87-
return `[${elements.map(it => JSON.stringify(it)).join(', ')}]`
88-
}
89-
9086
export function genEventHandler(
9187
context: CodegenContext,
9288
value: SimpleExpressionNode | undefined,
@@ -103,15 +99,39 @@ export function genEventHandler(
10399
})
104100
const hasMultipleStatements = value.content.includes(`;`)
105101
return [
106-
'() => $event => ',
102+
'$event => ',
107103
hasMultipleStatements ? '{' : '(',
108104
...expr,
109105
hasMultipleStatements ? '}' : ')',
110106
]
111107
} else {
112-
return ['() => ', ...genExpression(value, context)]
108+
return [...genExpression(value, context)]
113109
}
114110
}
115111

116112
return ['() => {}']
117113
}
114+
115+
function genWithModifiers(
116+
context: CodegenContext,
117+
handler: CodeFragment[],
118+
nonKeys: string[],
119+
): CodeFragment[] {
120+
if (!nonKeys.length) return handler
121+
122+
return genCall(
123+
context.helper('withModifiers'),
124+
handler,
125+
JSON.stringify(nonKeys),
126+
)
127+
}
128+
129+
function genWithKeys(
130+
context: CodegenContext,
131+
handler: CodeFragment[],
132+
keys: string[],
133+
): CodeFragment[] {
134+
if (!keys.length) return handler
135+
136+
return genCall(context.helper('withKeys'), handler, JSON.stringify(keys))
137+
}

packages/runtime-vapor/src/dom/event.ts

Lines changed: 4 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import {
88
getMetadata,
99
recordEventMetadata,
1010
} from '../componentMetadata'
11-
import { withKeys, withModifiers } from '@vue/runtime-dom'
1211
import { queuePostFlushCb } from '../scheduler'
1312

1413
export function addEventListener(
@@ -21,19 +20,13 @@ export function addEventListener(
2120
return (): void => el.removeEventListener(event, handler, options)
2221
}
2322

24-
interface ModifierOptions {
25-
modifiers?: string[]
26-
keys?: string[]
27-
}
28-
2923
export function on(
3024
el: Element,
3125
event: string,
3226
handlerGetter: () => undefined | ((...args: any[]) => any),
33-
options: AddEventListenerOptions &
34-
ModifierOptions & { effect?: boolean } = {},
27+
options: AddEventListenerOptions & { effect?: boolean } = {},
3528
): void {
36-
const handler: DelegatedHandler = eventHandler(handlerGetter, options)
29+
const handler: DelegatedHandler = eventHandler(handlerGetter)
3730
let cleanupEvent: (() => void) | undefined
3831
queuePostFlushCb(() => {
3932
cleanupEvent = addEventListener(el, event, handler, options)
@@ -59,23 +52,17 @@ export function delegate(
5952
el: HTMLElement,
6053
event: string,
6154
handlerGetter: () => undefined | ((...args: any[]) => any),
62-
options: ModifierOptions = {},
6355
): void {
64-
const handler: DelegatedHandler = eventHandler(handlerGetter, options)
56+
const handler: DelegatedHandler = eventHandler(handlerGetter)
6557
handler.delegate = true
6658
recordEventMetadata(el, event, handler)
6759
}
6860

69-
function eventHandler(
70-
getter: () => undefined | ((...args: any[]) => any),
71-
{ modifiers, keys }: ModifierOptions = {},
72-
) {
61+
function eventHandler(getter: () => undefined | ((...args: any[]) => any)) {
7362
return (...args: any[]) => {
7463
let handler = getter()
7564
if (!handler) return
7665

77-
if (modifiers) handler = withModifiers(handler, modifiers as any[])
78-
if (keys) handler = withKeys(handler, keys)
7966
handler && handler(...args)
8067
}
8168
}

0 commit comments

Comments
 (0)