1.0.1 • Published 2 years ago
nv-func-chain v1.0.1
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
1.0.1
2 years ago