paracetamol

    0.7.2 • Public • Published

    Version

    Current pre-alpha 0.7.2 Release is pre-alpha

    Install

    > npm i -S paracetamol

    About

    Declarative checking arguments in your function. Possible wrap and runtime syntax Added function profiling

    You need any function where should be strong-type arguments

    let fn = function functionName(number, string) {
        return string + '(' + number + ')';
    };

    Variant A: Declare and wrap

    1.Declare arguments and wrap your function
    fn = $p(
        fn,
        $p.Number, // asserts for 0 argument 
        $p.String  // asserts for 1 argument
    );
    2. Call it
    // Normal run
    fn(1, 'one');
    fn(2, 'two');
    fn(3, 'three');
     
    // Throw TypeError
    fn(1, []);
    fn({}, 1);
    fn(null, function(){});

    Variant B. RunTime assert

    let fn = function functionName(number, string) {
        $p.Number(number);
        $p.String(string);
     
        return string + '(' + number + ')';
    };

    Variant C. RunTime no throw assert

    let fn = function functionName(number, string) {
        if (
            $p.Number.for(number) && 
            $p.String.for(string)
        ) {
            return string + '(' + number + ')';
        } else {
            return null;
        }
    };

    Function Time, Memory, Result profiling

    it possible only wrap syntax:

    let fn = function(a, b, c) {
        return Math.pow(a, b * c);
    };
     
    fn = $p(fn, $p.Number, $p.Number, $p.Number, {
        profile: {
            // profile memory change, default false
            memory        : true,
            
            // average/total time without first calling (VM jit compile), default true
            ignoreCompile : true, 
            
            // store all call event (Attention use, it is slow and need many memory), default false
            every         : true  
        }
    });
     
    for (let i = 0; i < 16; ++i) {
        fn(2, i, i+1);
    }
     
    console.log(fn.profile.print());
    Result:
    Function "anonymous" has been called 16 times
    total calling time: 70us
    compile time: 44us
    average calling time: 4us
    sum of memory diff: 18920
    average memory diff: 1182.5
    list of every call:
        P_TIME  HR_TIME  MEMORY_CHANGE  ARGS => RESULT
        52ms    44us     5696           (2 ,0 ,1) => 1
        52ms    56us     4072           (2 ,1 ,2) => 4
        52ms    1us      680            (2 ,2 ,3) => 64
        52ms    998ns    1656           (2 ,3 ,4) => 4096
        52ms    1us      568            (2 ,4 ,5) => 1048576
        52ms    964ns    568            (2 ,5 ,6) => 1073741824
        52ms    952ns    568            (2 ,6 ,7) => 4398046511104
        52ms    1us      568            (2 ,7 ,8) => 72057594037927940
        52ms    989ns    568            (2 ,8 ,9) => 4.722366482869645e+21
        52ms    975ns    568            (2 ,9 ,10) => 1.2379400392853803e+27
        52ms    920ns    568            (2 ,10 ,11) => 1.298074214633707e+33
        52ms    834ns    568            (2 ,11 ,12) => 5.444517870735016e+39
        52ms    832ns    568            (2 ,12 ,13) => 9.134385233318143e+46
        52ms    823ns    568            (2 ,13 ,14) => 6.129982163463556e+54
        52ms    815ns    568            (2 ,14 ,15) => 1.645504557321206e+63
        52ms    812ns    568            (2 ,15 ,16) => 1.7668470647783843e+72

    Release Notes:

    0.0.1:

    • Initial work concept

    0.7.1:

    • Initial modular build: declarations factory (store), assert library, $p main function, definer, main point
    • Api: Basic types: Number, String, Symbol, Bool, Array, Object, Function, Null, Undef
    • Api: Type classes: Complex, Scalar, Any, Defined, Countable)

    0.7.2

    • Api: Add new type class Numeric
    • Api: Numeric asserts types: int, float, positive, negative
    • Testing chained calling declarations $p.Numeric.int.positive(5);

    Install

    npm i paracetamol

    DownloadsWeekly Downloads

    2

    Version

    0.7.2

    License

    ISC

    Last publish

    Collaborators

    • spat-ne-hochu