1.0.1 • Published 2 years ago

nv-func-chain v1.0.1

Weekly downloads
-
License
ISC
Repository
-
Last release
2 years ago

nv-func-chain

  • nv-func-chain
  • combine single-param-functions (whose rtrn still be same-shape-as param)

install

  • npm install nv-func-chain

usage

   const z = require("nv-func-chain")

example

sync just one layer

        var f0 = (a)=>a+2
        var f1 = (a)=>a*2
        var f2 = (a)=>a**2


        > f0(f1(f2(2)))
        10

        > z.print_sync_l2r("f0","f1","f2")
        'f0(f1(f2(ctx)))'
        >

        > var F = z.sync_l2r(f0,f1,f2)
        > F(2)
        10




        > f2(f1(f0(2)))
        64
        >

        > z.print_sync_r2l("f0","f1","f2")
        'f2(f1(f0(ctx)))'
        >

        > var F = z.sync_r2l(f0,f1,f2)
        > F(2)
        64
        >

async just one layer

    const delay_val = require("timers/promises").setTimeout;


    var f0 = async (a)=> await delay_val(2000,a+2);
    var f1 = async (a)=> await delay_val(2000,a*2);
    var f2 = async (a)=> await delay_val(2000,a**2);


    > await f0(await f1(await f2(2)))
    10
    >


    > z.print_async_l2r("f0","f1","f2")
    'await f0(await f1(await f2(ctx)))'
    >

    > var F = z.async_l2r(f0,f1,f2)
    > await F(2)
    10




    > await f2 (await f1 (await f0 (2)))
    64
    >

    > z.print_async_r2l("f0","f1","f2")
    'await f2 (await f1 (await f0 (ctx)))'
    >


    > var F = z.async_r2l(f0,f1,f2)
    > await F(2)
    64
    >

nested sync-function-array

    var f00 = (a)=>a+2
    var f01 = (a)=>a*2;
    var f10 = (a)=>a+3;
    var f11 = (a)=>a*3;
    var f12 = (a)=>a**3;
    var f03 = (a)=>a*2;

unparse

    > console.log(z.print_sync_nest_l2r(["f00","f01",["f10","f11","f12"],"f03"]))
    f00(
        f01(
              f10(
                  f11(
                      f12(
                        f03(
                            ctx
                        )
                      )
                  )
              )
        )
    )

run-to-complete

    > f00(
    ...     f01(
    .....           f10(
    .......               f11(
    .........                   f12(
    ...........                     f03(
    .............                        2
    .............                     )
    ...........                   )
    .........               )
    .......           )
    .....     )
    ... )
    392
    >

    > var F = z.sync_nest_l2r([f00,f01,[f10,f11,f12],f03])
    > F(2)
    392
    >

stepper

    var sgen = z.sync_gen_nest_l2r([f00,f01,[f10,f11,f12],f03])
    > var g = sgen(2)
    > g.next()
    { value: [ 4, [Function: f03], 0, 3 ], done: false }
    > g.next()
    { value: [ 64, [Function: f12], 1, 2 ], done: false }
    > g.next()
    { value: [ 192, [Function: f11], 1, 1 ], done: false }
    > g.next()
    { value: [ 195, [Function: f10], 1, 0 ], done: false }
    > g.next()
    { value: [ 390, [Function: f01], 0, 1 ], done: false }
    > g.next()
    { value: [ 392, [Function: f00], 0, 0 ], done: false }
    > g.next()
    { value: 392, done: true }
    > g.next()
    { value: undefined, done: true }
    >

right-to-left

    > console.log(z.print_sync_nest_r2l(["f00","f01",["f10","f11","f12"],"f03"]))
    f03(
          f12(
              f11(
                  f10(
                    f01(
                        f00(
                            ctx
                        )
                    )
                  )
              )
          )
    )




    f03(
          f12(
              f11(
                  f10(
                    f01(
                        f00(
                            2
                        )
                    )
                  )
              )
          )
    )
    >
    71874
    >


    > var F = z.sync_nest_r2l([f00,f01,[f10,f11,f12],f03])
    > F(2)
    71874
    >


    var sgen = z.sync_gen_nest_r2l([f00,f01,[f10,f11,f12],f03])
    > var g = sgen(2)

    > g.next()
    { value: [ 4, [Function: f00], 0, 0 ], done: false }
    > g.next()
    { value: [ 8, [Function: f01], 0, 1 ], done: false }
    > g.next()
    { value: [ 11, [Function: f10], 1, 0 ], done: false }
    > g.next()
    { value: [ 33, [Function: f11], 1, 1 ], done: false }
    > g.next()
    { value: [ 35937, [Function: f12], 1, 2 ], done: false }
    > g.next()
    { value: [ 71874, [Function: f03], 0, 3 ], done: false }
    > g.next()
    { value: 71874, done: true }
    > g.next()
    { value: undefined, done: true }
    >

nested async-function-array

       const delay_val = require("timers/promises").setTimeout;


        var f00 = async (a)=>await delay_val(1000,a+2)
        var f01 = async (a)=>await delay_val(1000,a*2);
        var f10 = async (a)=>await delay_val(1000,a+3);
        var f11 = async (a)=>await delay_val(1000,a*3);
        var f12 = async (a)=>await delay_val(1000,a**3);
        var f03 = async (a)=>await delay_val(1000,a*2);

left-to-right

        > console.log(z.print_async_nest_l2r(["f00","f01",["f10","f11","f12"],"f03"]))
        await f00(
            await f01(
                  await f10(
                      await f11(
                          await f12(
                            await f03(
                                ctx
                            )
                          )
                      )
                  )
            )
        )



        await f00(
            await f01(
                  await f10(
                      await f11(
                          await f12(
                            await f03(
                                2
                            )
                          )
                      )
                  )
            )
        )

        >
        392
        >


        > var F = z.async_nest_l2r([f00,f01,[f10,f11,f12],f03])
        > await F(2)
        392
        >

        var agen = z.async_gen_nest_l2r([f00,f01,[f10,f11,f12],f03])
        > var ag = agen(2)
        > await ag.next()
        { value: [ 4, [AsyncFunction: f03], 0, 3 ], done: false }
        > await ag.next()
        { value: [ 64, [AsyncFunction: f12], 1, 2 ], done: false }
        > await ag.next()
        { value: [ 192, [AsyncFunction: f11], 1, 1 ], done: false }
        > await ag.next()
        { value: [ 195, [AsyncFunction: f10], 1, 0 ], done: false }
        > await ag.next()
        { value: [ 390, [AsyncFunction: f01], 0, 1 ], done: false }
        > await ag.next()
        { value: [ 392, [AsyncFunction: f00], 0, 0 ], done: false }
        > await ag.next()
        { value: 392, done: true }
        >

right-to-left

        > console.log(z.print_async_nest_r2l(["f00","f01",["f10","f11","f12"],"f03"]))
        await f03(
              await f12(
                  await f11(
                      await f10(
                        await f01(
                            await f00(
                                ctx
                            )
                        )
                      )
                  )
              )
        )




        await f03(
              await f12(
                  await f11(
                      await f10(
                        await f01(
                            await f00(
                                2
                            )
                        )
                      )
                  )
              )
        )
        >
        71874
        >


        > var F = z.async_nest_r2l([f00,f01,[f10,f11,f12],f03])
        > await F(2)
        71874
        >


        var agen = z.async_gen_nest_r2l([f00,f01,[f10,f11,f12],f03])
        > var ag = agen(2)

        > await ag.next()
        { value: [ 4, [AsyncFunction: f00], 0, 0 ], done: false }
        > await ag.next()
        { value: [ 8, [AsyncFunction: f01], 0, 1 ], done: false }
        > await ag.next()
        { value: [ 11, [AsyncFunction: f10], 1, 0 ], done: false }
        > await ag.next()
        { value: [ 33, [AsyncFunction: f11], 1, 1 ], done: false }
        > await ag.next()
        { value: [ 35937, [AsyncFunction: f12], 1, 2 ], done: false }
        > await ag.next()
        { value: [ 71874, [AsyncFunction: f03], 0, 3 ], done: false }
        > await ag.next()
        { value: 71874, done: true }
        >

APIS

    const sync_l2r = (...funcs) => {
    const print_sync_l2r = (...fnames) => {
    const sync_r2l = (...funcs) => {
    const print_sync_r2l = (...fnames) => {
    const async_l2r = (...afuncs) => {
    const print_async_l2r = (...fnames) => {
    const async_r2l = (...funcs) => {
    const print_async_r2l = (...fnames) => {
    const _gen_l2r = function * (fary,depth=0) {
    const _gen_r2l = function * (fary,depth=0) {
    const sync_nest_l2r = (fary) => {
    const print_sync_nest_l2r = (fname_tree) =>{
    const sync_gen_nest_l2r = (fary)=> {
    const sync_nest_r2l = (fary) => {
    const print_sync_nest_r2l = (fname_tree) =>{
    const sync_gen_nest_r2l = (fary)=> {
    const async_nest_l2r = (ftree) => {
    const print_async_nest_l2r = (fname_tree) =>{
    const async_gen_nest_l2r = (ftree) => {
    const async_nest_r2l = (ftree) => {
    const print_async_nest_r2l = (fname_tree) =>{
    const async_gen_nest_r2l = (ftree) => {

METHODS

LICENSE

  • ISC