import type { EditorView } from '@prosekit/pm/view' type FileHandler = (options: { view: EditorView event: E file: File }) => boolean | void function handleFile( view: EditorView, event: E, file: File, handlers: FileHandler[], ) { // The last item in `handlers` should has the highest priority. for (let i = handlers.length - 1; i >= 0; i--) { const handler = handlers[i] if (handler({ view, event, file })) { return true } } return false } export function handleEvent( view: EditorView, event: E, handlers: FileHandler[], getFiles: (event: E) => File[], ): boolean { const files = getFiles(event) let handled = false for (const file of files) { if (handleFile(view, event, file, handlers)) { handled = true } } return handled }