feat: add patch to add generic types to eventemitter2

EventEmitter2 has types, but they're very basic and not very type safe.
I created this patch, because my improved types haven't been merged into the official package.

Signed-off-by: Tilman Vatteroth <git@tilmanvatteroth.de>
This commit is contained in:
Tilman Vatteroth 2023-02-06 13:21:58 +01:00
parent 11c2f57e4b
commit caa53e3556
16 changed files with 445 additions and 22 deletions

View file

@ -17,7 +17,7 @@ import type { AsyncState } from 'react-use/lib/useAsyncFn'
export const useLoadNoteFromServer = (): [AsyncState<boolean>, () => void] => {
const id = useSingleStringUrlParameter('noteId', undefined)
return useAsyncFn(async () => {
return useAsyncFn(async (): Promise<boolean> => {
if (id === undefined) {
throw new Error('Invalid id')
}

View file

@ -7,7 +7,8 @@ import type { TaskCheckedEventPayload } from '../../../../extensions/extra-integ
import { TaskListCheckboxAppExtension } from '../../../../extensions/extra-integrations/task-list/task-list-checkbox-app-extension'
import { WaitSpinner } from '../../../common/wait-spinner/wait-spinner'
import { eventEmitterContext } from '../../../markdown-renderer/hooks/use-extension-event-emitter'
import EventEmitter2 from 'eventemitter2'
import type { Listener } from 'eventemitter2'
import { EventEmitter2 } from 'eventemitter2'
import React, { Suspense, useEffect, useMemo } from 'react'
export interface CheatsheetLineProps {
@ -32,10 +33,13 @@ export const CheatsheetLine: React.FC<CheatsheetLineProps> = ({ markdown, onTask
const eventEmitter = useMemo(() => new EventEmitter2(), [])
useEffect(() => {
const handler = ({ checked }: TaskCheckedEventPayload) => onTaskCheckedChange(checked)
eventEmitter.on(TaskListCheckboxAppExtension.EVENT_NAME, handler)
const handler = eventEmitter.on(
TaskListCheckboxAppExtension.EVENT_NAME,
({ checked }: TaskCheckedEventPayload) => onTaskCheckedChange(checked),
{ objectify: true }
) as Listener
return () => {
eventEmitter.off(TaskListCheckboxAppExtension.EVENT_NAME, handler)
handler.off()
}
})

View file

@ -5,7 +5,7 @@
*/
import type { NodeProcessor } from '../../node-preprocessors/node-processor'
import type { ComponentReplacer } from '../../replace-components/component-replacer'
import type EventEmitter2 from 'eventemitter2'
import type { EventEmitter2 } from 'eventemitter2'
import type MarkdownIt from 'markdown-it'
/**

View file

@ -3,7 +3,7 @@
*
* SPDX-License-Identifier: AGPL-3.0-only
*/
import EventEmitter2 from 'eventemitter2'
import { EventEmitter2 } from 'eventemitter2'
import type { PropsWithChildren } from 'react'
import React, { createContext, useContext, useEffect, useMemo } from 'react'

View file

@ -14,7 +14,7 @@ import { useRendererReceiveHandler } from './window-post-message-communicator/ho
import type { BaseConfiguration } from './window-post-message-communicator/rendering-message'
import { CommunicationMessageType, RendererType } from './window-post-message-communicator/rendering-message'
import { countWords } from './word-counter'
import EventEmitter2 from 'eventemitter2'
import { EventEmitter2 } from 'eventemitter2'
import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'
/**
@ -174,10 +174,10 @@ export const IframeMarkdownRenderer: React.FC = () => {
const extensionEventEmitter = useMemo(() => new EventEmitter2({ wildcard: true }), [])
useEffect(() => {
extensionEventEmitter.onAny((event, values) => {
extensionEventEmitter.onAny((event: string, values: unknown) => {
communicator.sendMessageToOtherSide({
type: CommunicationMessageType.EXTENSION_EVENT,
eventName: typeof event === 'object' ? event.join('.') : event,
eventName: event,
payload: values
})
})

View file

@ -5,7 +5,7 @@
*/
import type { Logger } from '../../../utils/logger'
import { Optional } from '@mrdrogdrog/optional'
import EventEmitter2 from 'eventemitter2'
import { EventEmitter2 } from 'eventemitter2'
/**
* Error that will be thrown if a message couldn't be sent.

View file

@ -5,7 +5,7 @@
*/
import type { Linter } from '../../components/editor-page/editor-pane/linter/linter'
import type { MarkdownRendererExtension } from '../../components/markdown-renderer/extensions/base/markdown-renderer-extension'
import type EventEmitter2 from 'eventemitter2'
import type { EventEmitter2 } from 'eventemitter2'
import type React from 'react'
import { Fragment } from 'react'

View file

@ -6,7 +6,7 @@
import { AppExtension } from '../../base/app-extension'
import { SetCheckboxInEditor } from './set-checkbox-in-editor'
import { TaskListMarkdownExtension } from './task-list-markdown-extension'
import type EventEmitter2 from 'eventemitter2'
import type { EventEmitter2 } from 'eventemitter2'
import type React from 'react'
/**