-
Notifications
You must be signed in to change notification settings - Fork 38
/
events.ts
47 lines (40 loc) · 1.27 KB
/
events.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import { ServiceManager } from '../serviceManager'
import { Feature } from '../featureManager'
import { Transport } from '../services/transport'
import * as Debug from 'debug'
export class EventsFeature implements Feature {
private transport: Transport | undefined
private logger: Function = Debug('axm:features:events')
init (): void {
this.transport = ServiceManager.get('transport')
this.logger('init')
}
emit (name?: string, data?: any) {
if (typeof name !== 'string') {
console.error('event name must be a string')
return console.trace()
}
if (typeof data !== 'object') {
console.error('event data must be an object')
return console.trace()
}
if (data instanceof Array) {
console.error(`event data cannot be an array`)
return console.trace()
}
let inflightObj: Object | any = {}
try {
inflightObj = JSON.parse(JSON.stringify(data))
} catch (err) {
return console.log('Failed to serialize the event data', err.message)
}
inflightObj.__name = name
if (this.transport === undefined) {
return this.logger('Failed to send event as transporter isnt available')
}
this.transport.send('human:event', inflightObj)
}
destroy () {
this.logger('destroy')
}
}