36 lines
1.1 KiB
TypeScript
36 lines
1.1 KiB
TypeScript
|
import {Event} from './types'
|
||
|
import {Container, StaticInstantiable} from '../../di'
|
||
|
import {ErrorWithContext} from '../../util'
|
||
|
|
||
|
export function getEventName<T extends Event>(eventKey: StaticInstantiable<T>): string {
|
||
|
const protoName = eventKey.prototype.eventName
|
||
|
if ( protoName ) {
|
||
|
return protoName
|
||
|
}
|
||
|
|
||
|
try {
|
||
|
const inst = Container.getContainer().make<T>(eventKey)
|
||
|
if ( inst.eventName ) {
|
||
|
return inst.eventName
|
||
|
}
|
||
|
} catch (e: unknown) {} // eslint-disable-line no-empty
|
||
|
|
||
|
let stringParseName = eventKey.toString()
|
||
|
.split('\n')
|
||
|
.map(x => x.trim())
|
||
|
.filter(x => x.startsWith('this.eventName = \'') || x.startsWith('this.eventName = "'))?.[0]
|
||
|
?.split('=')?.[1]
|
||
|
?.trim()
|
||
|
|
||
|
if ( stringParseName ) {
|
||
|
stringParseName = stringParseName.endsWith(';') ? stringParseName.slice(1, -2) : stringParseName.slice(1, -1)
|
||
|
if ( stringParseName ) {
|
||
|
return stringParseName
|
||
|
}
|
||
|
}
|
||
|
|
||
|
throw new ErrorWithContext('Unable to determine eventName from eventKey', {
|
||
|
eventKey,
|
||
|
})
|
||
|
}
|