Skip to content

Commit

Permalink
Added PR fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
nandi95 authored and lmiller1990 committed Feb 12, 2021
1 parent fec4b46 commit 9d5e3d2
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 15 deletions.
22 changes: 13 additions & 9 deletions src/emit.ts
Original file line number Diff line number Diff line change
@@ -1,27 +1,31 @@
import { setDevtoolsHook, devtools, ComponentPublicInstance } from 'vue'
import { ComponentInternalInstance } from '@vue/runtime-core'
import {
setDevtoolsHook,
devtools,
ComponentPublicInstance,
ComponentInternalInstance
} from 'vue'

export type Events<T = unknown> = Record<number, Record<string, T[]>>

const enum DevtoolsHooks {
COMPONENT_EMIT = 'component:emit'
}

let componentEvents: Record<string, unknown[]>
let events: Record<string, typeof componentEvents>
let events: Events

export function emitted<T = unknown>(
vm: ComponentPublicInstance,
eventName?: string
): undefined | T[] | Record<string, T[]> {
): undefined | Events<T>[number][string] | Events<T>[number] {
const cid = vm.$.uid

const vmEvents = (events as Record<string, Record<string, T[]>>)[cid] || {}
const vmEvents: Events<T>[number] = (events as Events<T>)[cid] || {}
if (eventName) {
return vmEvents ? (vmEvents as Record<string, T[]>)[eventName] : undefined
return vmEvents ? vmEvents[eventName] : undefined
}

return vmEvents as Record<string, T[]>
return vmEvents
}
type Events = { [id: number]: Record<string, any> }

export const attachEmitListener = () => {
events = {}
Expand Down
9 changes: 6 additions & 3 deletions src/vueWrapper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import { TriggerOptions } from './createDomEvent'
import { find, matches } from './utils/find'
import { mergeDeep, textContent } from './utils'
import { emitted } from './emit'
import type { Events } from './emit'

export class VueWrapper<T extends ComponentPublicInstance> {
private componentVM: T
Expand Down Expand Up @@ -74,11 +75,13 @@ export class VueWrapper<T extends ComponentPublicInstance> {
return true
}

emitted<T = unknown>(): Record<string, T[]>
emitted<T = unknown>(eventName?: string): undefined | T[]
emitted<T = unknown>(): Events<T>[number]
emitted<T = unknown>(
eventName?: string
): undefined | T[] | Record<string, T[]> {
): undefined | Events<T>[number][string]
emitted<T = unknown>(
eventName?: string
): undefined | Events<T>[number][string] | Events<T>[number] {
return emitted(this.vm, eventName)
}

Expand Down
4 changes: 3 additions & 1 deletion tests/emit.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,9 @@ describe('emitted', () => {
name: 'Parent',
setup(props, { emit }) {
return () =>
h(Child, { onHello: (...events: any[]) => emit('parent', ...events) })
h(Child, {
onHello: (...events: unknown[]) => emit('parent', ...events)
})
}
})
const wrapper = mount(Parent)
Expand Down
2 changes: 0 additions & 2 deletions tests/features/async-components.spec.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
import { defineAsyncComponent, defineComponent, h, AppConfig } from 'vue'

import { mount, flushPromises } from '../../src'
import { ComponentPublicInstance } from '@vue/runtime-core'

const config: AppConfig = {
optionMergeStrategies: {},
Expand Down

0 comments on commit 9d5e3d2

Please sign in to comment.