1.0.0 • Published 3 years ago

nv-facutil-simple-param v1.0.0

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

nv-facutil-simple-param

  • nv-facutil-simple-param
  • simple util to wrap/change params-sequence
  • util for handle function params
  • its a simplified-version of nv-facutil-curry AND nv-facutil-param
  • manually add params_desc,NOT auto
  • no need to parse to src-code

install

  • npm install nv-facutil-simple-param

usage

pary

   ['a','b','c',{'d':300},'e',['args']];
   
   - string means a normal-param name   
   - dict   means a param-with-default   
       { param-name : default-value }
   - array  means a spread-params        
       [ 
          param-name,
          /*max_count@optional@default(Inifinity) */
       ]

example

const x = require("nv-facutil-simple-param");

wrap

 const tmoutp = require('timers/promises').setTimeout;

 var pary          = ['a','b','c',{'d':300},'e',['args']];

 var func          = async function(a,b,c,d=300,e,...args) {
                        args.push(a);
                        let r = await tmoutp(2000/*delay*/,args);
                        args.push(d);
                        r = await tmoutp(2000/*delay*/,args);
                        r.push(e);
                        return(r)
                     }
 
 await func('A','B','C',undefined,'E',1,2,3,4,5)
 /*
    [
      1, 2,   3,   4,
      5, 'A',300, 'E'
    ]
 */      

add param desc to original-function

var pary          = ['a','b','c',{'d':300},'e',['args']];
x.add_param_descs(func,pary)
/*
    > func
    [AsyncFunction: func] {
      ___PARAM_DESCS___: {
        a: 0,
        b: 1,
        c: 2,
        d: [Number (_WithDfltIdx): 3] { dflt: 300 },
        e: 4,
        args: [Number (_SpreadIdx): 5] { count: Infinity }
      }
    }
    >
*/

creat-new-function with different param-order

 var nparam_names  = ['e','a','args']

 var nfunc    = x.wrap(func,nparam_names)
 /*
      > nfunc
      [Function: func] {
        ___PARAM_REFS___: {
          orig: { a: 0, e: 4, args: [_SpreadIdx] },
          curr: [ 'e', 'a', 'args' ]
        }
      }
      >
 */

 await nfunc('E','A',1,2,3,4,5)
 /*
 [
    1, 2,   3,   4,
    5, 'A', 300, 'E'
  ]
  */

parse unparse

        var pary          = ['a','b','c',{'d':300},'e',['args']];
        var param_descs   = x.parse(pary);
        /*
        > param_descs
        {
          a: 0,
          b: 1,
          c: 2,
          d: [Number (_WithDfltIdx): 3] { dflt: 300 },
          e: 4,
          args: [Number (_SpreadIdx): 5] { count: Infinity }
        }
        >
        */

        /*
        > x.list_names_with_param_descs(param_descs)
        [ 'a', 'b', 'c', 'd', 'e', 'args' ]
        >
        */

        /*
        > x.get_idx_with_param_descs(param_descs,'d')
        3
        >
        */

        /*
        > x.init_args_ary_from_param_descs(param_descs)
        [
          undefined,
          undefined,
          undefined,
          300,
          undefined,
          _Spread(0) [ count: Infinity ]
        ]
        >
        */

        /*
        > x.unparse(param_descs)
        [ 'a', 'b', 'c', { d: 300 }, 'e', [ 'args' ] ]
        >

        */

fmt

    var pary          = ['a','b','c',{'d':300},'e',['args']];

    var param_dict = {
        a:10,
        e:30,
        d:20,
        args:[1,2,3,4,5]
    }

    var args_ary = x.fmt_new_args_from_dict(pary,param_dict)
    > args_ary
    [ 10, undefined, undefined, 20, 30,  1, 2, 3, 4, 5 ]
    >

from spread

    > var pary          = ['a','b','c',{'d':300},'e',['args']];
    > var new_param_names = ['a','e','args']
    > var args_ary = x.fmt_new_args_from_spread(pary,new_param_names,10,30,1,2,3,4,5)
    > args_ary
    [ 10, undefined, undefined, 300, 30, 1, 2, 3, 4, 5 ]
    >

API

LICENSE

  • ISC