New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details →
Socket
Book a DemoSign in
Socket

taskroll

Package Overview
Dependencies
Maintainers
1
Versions
31
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

taskroll

https://www.npmjs.com/package/taskroll

latest
Source
npmnpm
Version
1.0.31
Version published
Weekly downloads
31
520%
Maintainers
1
Weekly downloads
 
Created
Source

TaskRoll

https://www.npmjs.com/package/taskroll

npm i taskroll

Creates lazily evaluated tasks, which calcualate asyncronouse tasks in syncronous manner. Tasks can be composed like Promises or Futures. Main features:

  • Lazy evaluation
  • Stack safety
  • Continuation guarding
  • Cancellation support with syncronous reversed rollback
  • Catches exceptions.
  • Inspectable immutable context after each computation
  • Supports functions returning promises
  • Holds state which can hold data or callable Tasks
  const mapper = TaskRoll.of().value( _ => _ * 15)
  const show_slowly = TaskRoll.of()
    .log( _ => _ )
    .sleep(1000)
  const task = TaskRoll.of()
    .map(mapper)
    .forEach(show_slowly)

  TaskRoll.of([1,2,3,4]).chain(task).start()
  // 15
  // 30
  // 45
  // 60

.of(value:any)

Transform any value into Task

TaskRoll.of([1,2,3,4]).forEach( _ => {
  console.log(_)
}).start()

.start()

Starts execution of Task - task will not start without calling start.

TaskRoll.of().log('Hello World').start()

toPromise()

Alternative way to start the evaluation of the task

await TaskRoll.of().log('Hello World').toPromise()

.chain( (value:any) => any )

const multiply = TaskRoll.of().chain( _ => _ * 2)

Result of the chain can also be another Task which is evaluated

TaskRoll.of(1).chain( _ => {
  return TaskRoll.of( _ + 1)
}) // 2

.value( value?:any)

Sets the value, alias to chain

TaskRoll.of(4).value(6).log( _ => _ ) // 6

.map( (value:any) => any )

const multiply = TaskRoll.of().chain( _ => _ * 2)
TaskRoll.of([1,2,3]).map( multiply )

.cond( condition:any, fn:any, elseFn?:any )

If condition is true evaluate fn else elseFn

const longer_than_5 = TaskRoll.of().chain( _ =>  _.length > 5)
const compare =  TaskRoll.of()
    .cond(longer_than_5, 
        TaskRoll.of().log( _ => `${_}.length > 5`),
        TaskRoll.of().log( _ => `${_}.length <= 5`),
    )
await TaskRoll.of(['ABC', 'Chevy Van', 'Trekk']).map( compare ).toPromise()

.forEach( (value:any) => any )

TaskRoll.of([1,2,3]).forEach( _ => {
  console.log(_)
})

.fn( name:string, value?:any)

Create Task based function in state. Can be used to signal events.

const multiply = TaskRoll.of().chain( _ => _ * 2)
const lazyvalue = TaskRoll.of(100)
TaskRoll.of().fn('multiply', multiply)
  .value(11)
  .call('multiply') // 22
  .call('multiply', lazyvalue) // 200
  .call(multiply, lazyvalue)   // 200

.call( fn:TaskRoll, value?:any)

Apply Task to the value programmatically

const multiply = TaskRoll.of().chain( _ => _ * 2)
const slowValue = TaskRoll.of(10).sleep(1000)

TaskRoll.of(4).call(multiply)           // 8
TaskRoll.of().call(multiply,3)          // 6
TaskRoll.of().call(multiply,slowValue)  // 20

.valueTo( string )

TaskRoll.of(5).valueTo('x')   // ctx.state.x == 5

.valueFrom( string )

TaskRoll.of().valueFrom('x')   // ctx.value == 5

.fork( (task:TaskRoll) => any )

In case we want to use the current value for something but preseve original we can fork the execution.

TaskRoll.of(5)
  .fork( task => {
    task.chain( _ => _ * 10 ) // 50
      .log( _ => _)
  })
  .log( _ => _) // still 5 here

.background( (task:TaskRoll) => any )

Execute repeating task at background

TaskRoll.of(...).background( task => {
  task.log('msg from bg').sleep(1000)
})

.cleanup( async fn => any )

Cleanup after task completes successfully or not.

TaskRoll.of(...)
  .chain(doSomething)
  .cleanup( async (ctx:TaskRollCtx) => {
    // ctx.value
    // ctx.state
  })

.rollback( async fn => any )

If task is cancelled (not committed)

TaskRoll.of(...)
  .chain(doSomething)
  .rollback( async  (ctx:TaskRollCtx) => {
    // ctx.value
    // ctx.state
  })

.setName( string)

TaskRoll.of('Hello World').setName('Hello World Process')

.log( string | (value:any) => string )

TaskRoll.of('Hello World').log( _ => `${_}`)

.serialize() => Object

const obj = TaskRoll.of().serialize()

.sleep( number )

TaskRoll.of().log('sleeping 1 sec').sleep(1000).log('awake')

.commit()

Accept changes (rollback is not called)

TaskRoll.of([1,2,3])
  .map(doSomething)
  .commit() 

.onFulfilled( (ctx:TaskRollCtx) => void )

Called when task ends

Projects which are solving similar problems

FAQs

Package last updated on 16 Dec 2018

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts