From 9d5e3d2c2cac0af46afdfeab00715dd744213de7 Mon Sep 17 00:00:00 2001 From: Nandor Kraszlan Date: Fri, 12 Feb 2021 08:08:48 +0000 Subject: [PATCH] Added PR fixes --- src/emit.ts | 22 +++++++++++++--------- src/vueWrapper.ts | 9 ++++++--- tests/emit.spec.ts | 4 +++- tests/features/async-components.spec.ts | 2 -- 4 files changed, 22 insertions(+), 15 deletions(-) diff --git a/src/emit.ts b/src/emit.ts index df2239cfc..bd8797be0 100644 --- a/src/emit.ts +++ b/src/emit.ts @@ -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 = Record> const enum DevtoolsHooks { COMPONENT_EMIT = 'component:emit' } -let componentEvents: Record -let events: Record +let events: Events export function emitted( vm: ComponentPublicInstance, eventName?: string -): undefined | T[] | Record { +): undefined | Events[number][string] | Events[number] { const cid = vm.$.uid - const vmEvents = (events as Record>)[cid] || {} + const vmEvents: Events[number] = (events as Events)[cid] || {} if (eventName) { - return vmEvents ? (vmEvents as Record)[eventName] : undefined + return vmEvents ? vmEvents[eventName] : undefined } - return vmEvents as Record + return vmEvents } -type Events = { [id: number]: Record } export const attachEmitListener = () => { events = {} diff --git a/src/vueWrapper.ts b/src/vueWrapper.ts index 23b3f91f4..445f90274 100644 --- a/src/vueWrapper.ts +++ b/src/vueWrapper.ts @@ -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 { private componentVM: T @@ -74,11 +75,13 @@ export class VueWrapper { return true } - emitted(): Record - emitted(eventName?: string): undefined | T[] + emitted(): Events[number] emitted( eventName?: string - ): undefined | T[] | Record { + ): undefined | Events[number][string] + emitted( + eventName?: string + ): undefined | Events[number][string] | Events[number] { return emitted(this.vm, eventName) } diff --git a/tests/emit.spec.ts b/tests/emit.spec.ts index 893f9e625..9f168c6cc 100644 --- a/tests/emit.spec.ts +++ b/tests/emit.spec.ts @@ -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) diff --git a/tests/features/async-components.spec.ts b/tests/features/async-components.spec.ts index 010beab4d..fe35e43a7 100644 --- a/tests/features/async-components.spec.ts +++ b/tests/features/async-components.spec.ts @@ -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: {},