Skip to content

Instantly share code, notes, and snippets.

View venkatperi's full-sized avatar

Venkat Peri venkatperi

View GitHub Profile
@venkatperi
venkatperi / pushFixed.ts
Last active September 17, 2018 03:55
For a fixed sized array, adds item to the end of an array and drops elements from the front, if needed
/**
* For a fixed sized array, adds item to the end of
* an array and drops elements from the front, if needed
*
* @param item {T}- to be added to the end of the array
* @param arr {T[]} - the array
* @param size {number} - Max size of the array.
* @return {T[]} The updated array
*/
function pushFixed<T>(item: T, arr: Array<T>, size: number): Array<T> {
['enter#*_#idle', () => keepState()
.emit('init')
.data({
errors: {$set: []},
response: {$set: null},
sessionId: {$set: uniqid()}
})],
['cast#start#idle', ({event}) =>
nextState('running')
.data({request: {$set: event.extra}})],
['enter#*_#running', ({data}) => {
const res = keepState().emit('run', data)
return data.timeout ? res.stateTimeout(data.timeout) : res
}],
['cast#done/:sessionId#running', ({data, args, event}) =>
args.sessionId === data.sessionId
? nextState('done/done').data({response: {$set: event.extra}})
: keepState()],
['cast#done/:sessionId#running', ({data, args, event}) =>
args.sessionId === data.sessionId
? nextState('done/done').data({response: {$set: event.extra}})
: keepState()],
['cast#reset#running', () =>
nextState('done/cancel')
.postpone()],
['cast#cancel#running', ({event}) =>
nextState('done/cancel')
.data({errors: {$push: [event.extra]}})],
['cast#error/:sessionId#running', ({args, data, event}) =>
args.sessionId === data.sessionId
? nextState('done/error').data({errors: {$push: [event.extra]}})
: keepState()],
['enter#*_#done/:status', ({args, data}) =>
keepState()
.emit(args.status, data)],