Newline Proliferating Maniac

    @insulo/runner

    0.1.6 • Public • Published

    Insulo: Runner

    Execute functions and promises with logging runtime information like duration; run them in sequential or parallel order or with piping the return as param through an array of those.

    Having the two entrypoints @insulo/runner and @insulo/runner/pretty to choose from, where pretty just wraps the base implementation with closures, some implementations are needing everything wrapped and some not.

    • @insulo/runner @insulo/runner/pretty
    • run run execute with runtime configuration, pass params for fn, add a name, disable logging
    • runSequential sequential execute an array, wait e.g. for the first promise to have finished before starting second
    • runParallel parallel execute an array in parallel (not multi-threaded)
    • runPipe pipe execute an array sequential and pass down the return values as params
    • log utility console.log wrapper with coloring, timestamp etc.
      • log.raw ()<string: text, Date|undefined: time>
      • log.error
      • log.start
      • log.end

    Example Usage with pretty/dsl-like functions

    How run, sequential, parallel, pipe and log can be used to execute a lot of things.

    someThing can be: function, function wrapping a promise or just a promise

    const {run, sequential, parallel, pipe, log} = require('@insulo/runner/pretty');
    
    run(
        sequential([
             someThing0,
             parallel([
                 pipe([
                     someThing1,
                     someThing2,
                 ]),
                 someThing3
             ]),
             sequential([
                 someThing4,
                 someThing5
             ]),
             run(
                 someThing6,
                 ['param'],
                 'task-name'
             ),
             someThing7,
        ]),
        ['param1', 2],
        'task-root-name'
        
    // this run must be executed 
    )().then(res => {
        // this log is an object
        log.raw('log e.g. the result');
        log.raw(JSON.stringify(res));
    }).catch(e =>{});

    Example Usage with base implementation Runner

    How Runner.run, Runner.runSequential, Runner.runParallel, Runner.runPipe and Runner.log can be used to execute a lot of things.

    someThing can be: function, function wrapping a promise or just a promise

    const Runner = require('@insulo/runner');
    
    Runner.run(
        () => Runner.runSequential([
             someThing0,
             () => Runner.runParallel([
                 () => Runner.runPipe([
                     someThing1,
                     someThing2,
                 ]),
                 someThing3
             ]),
             () => Runner.runSequential([
                 someThing4,
                 someThing5
             ]),
             () => Runner.run(
                 someThing6,
                 ['param'],
                 'task-name'
             ),
             someThing7,
        ]),
        ['param1', 2],
        'task-root-name'
        
    // this run is executed automatically
    ).then(res => {
        // this log is a function returning an object
        Runner.log().raw('log e.g. the result');
        Runner.log().raw(JSON.stringify(res));
    }).catch(e =>{});

    Example Mixed Usage

    someThing can be: function, function wrapping a promise or just a promise

    const Runner = require('@insulo/runner');
    const {run, sequential, parallel, pipe, log} = require('@insulo/runner/pretty');
    
    Runner.run(
        sequential([
             someThing0,
             parallel([
                 pipe([
                     someThing1,
                     someThing2,
                 ]),
                 someThing3
             ]),
             sequential([
                 someThing4,
                 someThing5
             ]),
             run(
                 someThing6,
                 ['param'],
                 'task-name'
             ),
             someThing7,
        ]),
        ['param1', 2],
        'task-root-name'
        
    // this run is executed automatically
    ).then(res => {
        log.raw('log e.g. the result');
        log.raw(JSON.stringify(res));
    }).catch(e =>{});

    Example log

    Using the logger from Runner:

    const Runner = require('@insulo/runner');
    
    //
    // Raw
    
    Runner.log().raw('Text');
    Runner.log().raw('Text', new Date());
    // [10:45:50] Text
    
    //
    // Error
    
    Runner.log().error('Text');
    Runner.log().error('Text', new Date());
    // [10:45:50] #! Text
    
    //
    // Start and End
    
    let start_date = Runner.log().start('Name');
    let start_date = Runner.log().start('Name', new Date());
    // [10:45:50] Starting `Name`
    
    Runner.log().end('Name', start_date);
    Runner.log().end('Name', start_date, new Date());
    // [10:45:50] Finished `Name` after 50ms
    Runner.log().end('Name', start_date, undefined, 'Suffix');
    Runner.log().end('Name', start_date, new Date(), 'Suffix');
    // [10:45:50] Finished `Name` after 50ms Suffix

    Using log from pretty:

    const {log} = require('@insulo/runner/pretty');
    
    //
    // Raw
    
    log.raw('Text');
    log.raw('Text', new Date());
    // [10:45:50] Text
    
    //
    // Error
    
    log.error('Text');
    log.error('Text', new Date());
    // [10:45:50] #! Text
    
    //
    // Start and End
    
    let start_date = log.start('Name');
    let start_date = log.start('Name', new Date());
    // [10:45:50] Starting `Name`
    
    log.end('Name', start_date);
    log.end('Name', start_date, new Date());
    // [10:45:50] Finished `Name` after 50ms
    log.end('Name', start_date, undefined, 'Suffix');
    log.end('Name', start_date, new Date(), 'Suffix');
    // [10:45:50] Finished `Name` after 50ms Suffix

    Licence

    This project is free software distributed under the terms of two licences, the CeCILL-C and the GNU Lesser General Public License. You can use, modify and/ or redistribute the software under the terms of CeCILL-C (v1) for Europe or GNU LGPL (v3) for the rest of the world.

    This file and the LICENCE.* files need to be distributed and not changed when distributing. For more informations on the licences which are applied read: LICENCE.md

    Copyright

    2018 | bemit UG (haftungsbeschränkt) - project@bemit.codes
    Author: Michael Becker - michael@bemit.codes
    

    Keywords

    none

    Install

    npm i @insulo/runner

    DownloadsWeekly Downloads

    1

    Version

    0.1.6

    License

    MIT

    Unpacked Size

    55.4 kB

    Total Files

    9

    Last publish

    Collaborators

    • elbakerino