Skip to content

Commit c01e235

Browse files
rootroot
authored andcommitted
refactor: add some types
1 parent ee85de1 commit c01e235

File tree

3 files changed

+42
-30
lines changed

3 files changed

+42
-30
lines changed

src/create-dom-event.ts

Lines changed: 37 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,19 @@
11
import eventTypes from 'dom-event-types'
22

3+
interface TriggerOptions {
4+
code?: String
5+
key?: String
6+
keyCode?: Number
7+
[custom: string]: any
8+
}
9+
10+
interface EventParams {
11+
eventType: string
12+
modifier: string
13+
meta: any
14+
options?: TriggerOptions
15+
}
16+
317
const keyCodesByKeyName = {
418
backspace: 8,
519
tab: 9,
@@ -18,9 +32,11 @@ const keyCodesByKeyName = {
1832
delete: 46
1933
}
2034

21-
function getEventProperties(eventParams) {
35+
function getEventProperties(eventParams: EventParams) {
2236
const { modifier, meta, options } = eventParams
23-
const keyCode = keyCodesByKeyName[modifier] || options.keyCode || options.code
37+
const keyCode =
38+
keyCodesByKeyName[modifier] ||
39+
(options && (options.keyCode || options.code))
2440

2541
return {
2642
...options, // What the user passed in as the second argument to #trigger
@@ -32,7 +48,7 @@ function getEventProperties(eventParams) {
3248
}
3349
}
3450

35-
function createEvent(eventParams) {
51+
function createEvent(eventParams: EventParams) {
3652
const { eventType, meta } = eventParams
3753
const metaEventInterface = window[meta.eventInterface]
3854

@@ -51,37 +67,32 @@ function createEvent(eventParams) {
5167
return event
5268
}
5369

54-
export default function createDOMEvent(
55-
eventString: String,
56-
options: Object = {}
57-
) {
70+
function createDOMEvent(eventString: String, options?: TriggerOptions) {
5871
const [eventType, modifier] = eventString.split('.')
5972
const meta = eventTypes[eventType] || {
6073
eventInterface: 'Event',
6174
cancelable: true,
6275
bubbles: true
6376
}
6477

65-
const eventParams = { eventType, modifier, meta, options }
66-
67-
const event = createEvent(eventParams)
68-
78+
const eventParams: EventParams = { eventType, modifier, meta, options }
79+
const event: Event = createEvent(eventParams)
6980
const eventPrototype = Object.getPrototypeOf(event)
7081

71-
Object.keys(options).forEach((key) => {
72-
const propertyDescriptor = Object.getOwnPropertyDescriptor(
73-
eventPrototype,
74-
key
75-
)
76-
77-
const canSetProperty = !(
78-
propertyDescriptor && propertyDescriptor.set === undefined
79-
)
80-
81-
if (canSetProperty) {
82-
event[key] = options[key]
83-
}
84-
})
85-
82+
options &&
83+
Object.keys(options).forEach((key) => {
84+
const propertyDescriptor = Object.getOwnPropertyDescriptor(
85+
eventPrototype,
86+
key
87+
)
88+
const canSetProperty = !(
89+
propertyDescriptor && propertyDescriptor.set === undefined
90+
)
91+
if (canSetProperty) {
92+
event[key] = options[key]
93+
}
94+
})
8695
return event
8796
}
97+
98+
export { TriggerOptions, createDOMEvent }

src/dom-wrapper.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { nextTick } from 'vue'
33
import { WrapperAPI } from './types'
44
import { ErrorWrapper } from './error-wrapper'
55

6-
import createDOMEvent from './create-dom-event'
6+
import { TriggerOptions, createDOMEvent } from './create-dom-event'
77

88
export class DOMWrapper<ElementType extends Element> implements WrapperAPI {
99
element: ElementType
@@ -136,8 +136,8 @@ export class DOMWrapper<ElementType extends Element> implements WrapperAPI {
136136
return new DOMWrapper(parentElement).trigger('change')
137137
}
138138

139-
async trigger(eventString: string, options: Object = {}) {
140-
if (options['target']) {
139+
async trigger(eventString: string, options?: TriggerOptions) {
140+
if (options && options['target']) {
141141
throw Error(
142142
`[vue-test-utils]: you cannot set the target value of an event. See the notes section ` +
143143
`of the docs for more details—` +

src/vue-wrapper.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { DOMWrapper } from './dom-wrapper'
55
import { WrapperAPI } from './types'
66
import { ErrorWrapper } from './error-wrapper'
77
import { MOUNT_ELEMENT_ID } from './constants'
8+
import { TriggerOptions } from './create-dom-event'
89

910
export class VueWrapper<T extends ComponentPublicInstance>
1011
implements WrapperAPI {
@@ -105,7 +106,7 @@ export class VueWrapper<T extends ComponentPublicInstance>
105106
return nextTick()
106107
}
107108

108-
trigger(eventString: string, options: Object = {}) {
109+
trigger(eventString: string, options?: TriggerOptions) {
109110
const rootElementWrapper = new DOMWrapper(this.element)
110111
return rootElementWrapper.trigger(eventString, options)
111112
}

0 commit comments

Comments
 (0)