speech-recognition-aws-polyfill
Version:
Polyfill for the SpeechRecognition browser API using AWS Transcribe
27 lines (18 loc) • 766 B
text/typescript
import {equals, reject, concat} from 'remeda';
import {Listeners, ListenerCallback, AWSSpeechRecognitionEvent} from '../types/shared'
export class CustomEventTarget {
listeners: Listeners = {}
addEventListener(type: string, callback: ListenerCallback) {
const stack = this.listeners[type] || []
this.listeners[type] = concat(stack, [callback])
}
removeEventListener(type: string, callback: ListenerCallback) {
if (!(type in this.listeners)) return
this.listeners[type] = reject(this.listeners[type], equals(callback))
}
dispatchEvent(e: Event | AWSSpeechRecognitionEvent) {
if (!(e.type in this.listeners)) return true
this.listeners[e.type].forEach((fn: ListenerCallback) => fn(e))
return !e.defaultPrevented;
};
}