99941cf4ed79aa21d266f965267d3865d8e5fdb9
Christian Fraß [add] lib:plankton

Christian Fraß authored 3 years ago

lib/plankton/call/logic-impl.js          1) /*
lib/plankton/call/logic-impl.js          2) This file is part of »bacterio-plankton:call«.
lib/plankton/call/logic-impl.js          3) 
Christian Fraß [upd] server:lib:plankton

Christian Fraß authored 3 years ago

server/lib/plankton/call/logic-impl.js   4) Copyright 2016-2021 'Christian Fraß, Christian Neubauer, Martin Springwald GbR'
Christian Fraß [add] lib:plankton

Christian Fraß authored 3 years ago

lib/plankton/call/logic-impl.js          5) <info@greenscale.de>
lib/plankton/call/logic-impl.js          6) 
lib/plankton/call/logic-impl.js          7) »bacterio-plankton:call« is free software: you can redistribute it and/or modify
lib/plankton/call/logic-impl.js          8) it under the terms of the GNU Lesser General Public License as published by
lib/plankton/call/logic-impl.js          9) the Free Software Foundation, either version 3 of the License, or
lib/plankton/call/logic-impl.js         10) (at your option) any later version.
lib/plankton/call/logic-impl.js         11) 
lib/plankton/call/logic-impl.js         12) »bacterio-plankton:call« is distributed in the hope that it will be useful,
lib/plankton/call/logic-impl.js         13) but WITHOUT ANY WARRANTY; without even the implied warranty of
lib/plankton/call/logic-impl.js         14) MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
lib/plankton/call/logic-impl.js         15) GNU Lesser General Public License for more details.
lib/plankton/call/logic-impl.js         16) 
lib/plankton/call/logic-impl.js         17) You should have received a copy of the GNU Lesser General Public License
lib/plankton/call/logic-impl.js         18) along with »bacterio-plankton:call«. If not, see <http://www.gnu.org/licenses/>.
lib/plankton/call/logic-impl.js         19)  */
lib/plankton/call/logic-impl.js         20) "use strict";
lib/plankton/call/logic-impl.js         21) /*
lib/plankton/call/logic-impl.js         22) This file is part of »bacterio-plankton:call«.
lib/plankton/call/logic-impl.js         23) 
Christian Fraß [upd] server:lib:plankton

Christian Fraß authored 3 years ago

server/lib/plankton/call/logic-impl.js  24) Copyright 2016-2021 'Christian Fraß, Christian Neubauer, Martin Springwald GbR'
Christian Fraß [add] lib:plankton

Christian Fraß authored 3 years ago

lib/plankton/call/logic-impl.js         25) <info@greenscale.de>
lib/plankton/call/logic-impl.js         26) 
lib/plankton/call/logic-impl.js         27) »bacterio-plankton:call« is free software: you can redistribute it and/or modify
lib/plankton/call/logic-impl.js         28) it under the terms of the GNU Lesser General Public License as published by
lib/plankton/call/logic-impl.js         29) the Free Software Foundation, either version 3 of the License, or
lib/plankton/call/logic-impl.js         30) (at your option) any later version.
lib/plankton/call/logic-impl.js         31) 
lib/plankton/call/logic-impl.js         32) »bacterio-plankton:call« is distributed in the hope that it will be useful,
lib/plankton/call/logic-impl.js         33) but WITHOUT ANY WARRANTY; without even the implied warranty of
lib/plankton/call/logic-impl.js         34) MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
lib/plankton/call/logic-impl.js         35) GNU Lesser General Public License for more details.
lib/plankton/call/logic-impl.js         36) 
lib/plankton/call/logic-impl.js         37) You should have received a copy of the GNU Lesser General Public License
lib/plankton/call/logic-impl.js         38) along with »bacterio-plankton:call«. If not, see <http://www.gnu.org/licenses/>.
lib/plankton/call/logic-impl.js         39)  */
lib/plankton/call/logic-impl.js         40) var lib_call;
lib/plankton/call/logic-impl.js         41) (function (lib_call) {
lib/plankton/call/logic-impl.js         42)     /**
lib/plankton/call/logic-impl.js         43)      * @desc hacked class for postfix function application
lib/plankton/call/logic-impl.js         44)      * @author fenris
lib/plankton/call/logic-impl.js         45)      */
lib/plankton/call/logic-impl.js         46)     class class_valuewrapper {
lib/plankton/call/logic-impl.js         47)         /**
lib/plankton/call/logic-impl.js         48)          * @desc [constructor]
lib/plankton/call/logic-impl.js         49)          * @author fenris
lib/plankton/call/logic-impl.js         50)          */
lib/plankton/call/logic-impl.js         51)         constructor(value) {
lib/plankton/call/logic-impl.js         52)             this.value = value;
lib/plankton/call/logic-impl.js         53)         }
lib/plankton/call/logic-impl.js         54)         /**
lib/plankton/call/logic-impl.js         55)          * @desc [accessor] applies a function and returns a new valuewrapper
lib/plankton/call/logic-impl.js         56)          * @author fenris
lib/plankton/call/logic-impl.js         57)          */
lib/plankton/call/logic-impl.js         58)         pass(function_) {
lib/plankton/call/logic-impl.js         59)             return (new class_valuewrapper(function_(this.value)));
lib/plankton/call/logic-impl.js         60)         }
lib/plankton/call/logic-impl.js         61)         /**
lib/plankton/call/logic-impl.js         62)          * @desc [accessor] gives the wrapped value
lib/plankton/call/logic-impl.js         63)          * @author fenris
lib/plankton/call/logic-impl.js         64)          */
lib/plankton/call/logic-impl.js         65)         extract() {
lib/plankton/call/logic-impl.js         66)             return this.value;
lib/plankton/call/logic-impl.js         67)         }
lib/plankton/call/logic-impl.js         68)     }
lib/plankton/call/logic-impl.js         69)     lib_call.class_valuewrapper = class_valuewrapper;
lib/plankton/call/logic-impl.js         70)     /**
lib/plankton/call/logic-impl.js         71)      * @desc shortcut for constructing a valuewrapper-object
lib/plankton/call/logic-impl.js         72)      * @author fenris
lib/plankton/call/logic-impl.js         73)      */
lib/plankton/call/logic-impl.js         74)     function vw(value) {
lib/plankton/call/logic-impl.js         75)         return (new class_valuewrapper(value));
lib/plankton/call/logic-impl.js         76)     }
lib/plankton/call/logic-impl.js         77)     lib_call.vw = vw;
lib/plankton/call/logic-impl.js         78)     /**
lib/plankton/call/logic-impl.js         79)      * @author fenris
lib/plankton/call/logic-impl.js         80)      */
lib/plankton/call/logic-impl.js         81)     function use(input, function_) {
lib/plankton/call/logic-impl.js         82)         return function_(input);
lib/plankton/call/logic-impl.js         83)     }
lib/plankton/call/logic-impl.js         84)     lib_call.use = use;
lib/plankton/call/logic-impl.js         85)     /**
lib/plankton/call/logic-impl.js         86)      * @desc just the identity; useful for some callbacks etc.
lib/plankton/call/logic-impl.js         87)      * @author fenris
lib/plankton/call/logic-impl.js         88)      */
lib/plankton/call/logic-impl.js         89)     function id(x) {
lib/plankton/call/logic-impl.js         90)         return x;
lib/plankton/call/logic-impl.js         91)     }
lib/plankton/call/logic-impl.js         92)     lib_call.id = id;
lib/plankton/call/logic-impl.js         93)     /**
lib/plankton/call/logic-impl.js         94)      * @desc composes two functions (i.e. returns a function that return the result of the successive execution of both input-functions)
lib/plankton/call/logic-impl.js         95)      * @param {function} function_f
lib/plankton/call/logic-impl.js         96)      * @param {function} function_g
lib/plankton/call/logic-impl.js         97)      * @author fenris
lib/plankton/call/logic-impl.js         98)      */
lib/plankton/call/logic-impl.js         99)     function compose(function_f, function_g) {
lib/plankton/call/logic-impl.js        100)         return (function (x) {
lib/plankton/call/logic-impl.js        101)             // return function_g(function_f(x));
lib/plankton/call/logic-impl.js        102)             return function_g(function_f.apply(function_f, lib_call.args2list(arguments)));
lib/plankton/call/logic-impl.js        103)         });
lib/plankton/call/logic-impl.js        104)     }
lib/plankton/call/logic-impl.js        105)     lib_call.compose = compose;
lib/plankton/call/logic-impl.js        106)     /**
lib/plankton/call/logic-impl.js        107)      * @desc transforms a function with sequential input into a function with leveled input; example: add(2,3) = curryfy(add)(2)(3)
lib/plankton/call/logic-impl.js        108)      * @param {function} f
lib/plankton/call/logic-impl.js        109)      * @param {int} n (don't set manually)
lib/plankton/call/logic-impl.js        110)      * @return {function} the currified version of the in put function
lib/plankton/call/logic-impl.js        111)      * @author fenris
lib/plankton/call/logic-impl.js        112)      */
lib/plankton/call/logic-impl.js        113)     function curryfy(f, n = f.length) {
lib/plankton/call/logic-impl.js        114)         switch (n) {
lib/plankton/call/logic-impl.js        115)             case 0: {
lib/plankton/call/logic-impl.js        116)                 throw (new Error("[curryfy] impossible"));
lib/plankton/call/logic-impl.js        117)                 // break;
lib/plankton/call/logic-impl.js        118)             }
lib/plankton/call/logic-impl.js        119)             case 1: {
lib/plankton/call/logic-impl.js        120)                 return f;
lib/plankton/call/logic-impl.js        121)                 // break;
lib/plankton/call/logic-impl.js        122)             }
lib/plankton/call/logic-impl.js        123)             default: {
lib/plankton/call/logic-impl.js        124)                 return (function (x) {
lib/plankton/call/logic-impl.js        125)                     return (curryfy(function () { return f.apply(f, [x].concat(lib_call.args2list(arguments))); }, n - 1));
lib/plankton/call/logic-impl.js        126)                 });
lib/plankton/call/logic-impl.js        127)                 // break;
lib/plankton/call/logic-impl.js        128)             }
lib/plankton/call/logic-impl.js        129)         }
lib/plankton/call/logic-impl.js        130)     }
lib/plankton/call/logic-impl.js        131)     lib_call.curryfy = curryfy;
lib/plankton/call/logic-impl.js        132) })(lib_call || (lib_call = {}));
lib/plankton/call/logic-impl.js        133) var lib_call;
lib/plankton/call/logic-impl.js        134) (function (lib_call) {
lib/plankton/call/logic-impl.js        135)     /**
lib/plankton/call/logic-impl.js        136)      * @author fenris
lib/plankton/call/logic-impl.js        137)      */
lib/plankton/call/logic-impl.js        138)     function executor_resolve(result) {
lib/plankton/call/logic-impl.js        139)         return ((resolve, reject) => resolve(result));
lib/plankton/call/logic-impl.js        140)     }
lib/plankton/call/logic-impl.js        141)     lib_call.executor_resolve = executor_resolve;
lib/plankton/call/logic-impl.js        142)     /**
lib/plankton/call/logic-impl.js        143)      * @author fenris
lib/plankton/call/logic-impl.js        144)      */
lib/plankton/call/logic-impl.js        145)     function executor_reject(reason) {
lib/plankton/call/logic-impl.js        146)         return ((resolve, reject) => reject(reason));
lib/plankton/call/logic-impl.js        147)     }
lib/plankton/call/logic-impl.js        148)     lib_call.executor_reject = executor_reject;
lib/plankton/call/logic-impl.js        149)     /**
lib/plankton/call/logic-impl.js        150)      * @author fenris
lib/plankton/call/logic-impl.js        151)      */
lib/plankton/call/logic-impl.js        152)     function executor_transform(executor, transform_result, transform_reason) {
lib/plankton/call/logic-impl.js        153)         return ((resolve, reject) => {
lib/plankton/call/logic-impl.js        154)             executor(result => resolve(transform_result(result)), reason => reject(transform_reason(reason)));
lib/plankton/call/logic-impl.js        155)         });
lib/plankton/call/logic-impl.js        156)     }
lib/plankton/call/logic-impl.js        157)     lib_call.executor_transform = executor_transform;
lib/plankton/call/logic-impl.js        158)     /**
lib/plankton/call/logic-impl.js        159)      * @author fenris
lib/plankton/call/logic-impl.js        160)      */
lib/plankton/call/logic-impl.js        161)     function executor_transform_default(executor, transform_result, wrap_string = null) {
lib/plankton/call/logic-impl.js        162)         let transform_reason = (error => ((wrap_string == null) ? error : new class_error(wrap_string, [error])));
lib/plankton/call/logic-impl.js        163)         return (executor_transform(executor, transform_result, transform_reason));
lib/plankton/call/logic-impl.js        164)     }
lib/plankton/call/logic-impl.js        165)     lib_call.executor_transform_default = executor_transform_default;
lib/plankton/call/logic-impl.js        166)     /**
lib/plankton/call/logic-impl.js        167)      * @author fenris
lib/plankton/call/logic-impl.js        168)      */
lib/plankton/call/logic-impl.js        169)     function executor_compose_sequential(first, second) {
lib/plankton/call/logic-impl.js        170)         return ((resolve, reject) => {
lib/plankton/call/logic-impl.js        171)             first(result => {
lib/plankton/call/logic-impl.js        172)                 second(result)(resolve, reject);
lib/plankton/call/logic-impl.js        173)             }, reason => {
lib/plankton/call/logic-impl.js        174)                 reject(reason);
lib/plankton/call/logic-impl.js        175)             });
lib/plankton/call/logic-impl.js        176)         });
lib/plankton/call/logic-impl.js        177)     }
lib/plankton/call/logic-impl.js        178)     lib_call.executor_compose_sequential = executor_compose_sequential;
lib/plankton/call/logic-impl.js        179)     /**
lib/plankton/call/logic-impl.js        180)      * @author fenris
lib/plankton/call/logic-impl.js        181)      */
lib/plankton/call/logic-impl.js        182)     function executor_chain(state, executors) {
lib/plankton/call/logic-impl.js        183)         return ((resolve, reject) => {
lib/plankton/call/logic-impl.js        184)             if (executors.length == 0) {
lib/plankton/call/logic-impl.js        185)                 return resolve(state);
lib/plankton/call/logic-impl.js        186)             }
lib/plankton/call/logic-impl.js        187)             else {
lib/plankton/call/logic-impl.js        188)                 return executors[0](state)(result => {
lib/plankton/call/logic-impl.js        189)                     executor_chain(result, executors.slice(1))(resolve, reject);
lib/plankton/call/logic-impl.js        190)                 }, reject);
lib/plankton/call/logic-impl.js        191)             }
lib/plankton/call/logic-impl.js        192)         });
lib/plankton/call/logic-impl.js        193)         /*
lib/plankton/call/logic-impl.js        194)          */
lib/plankton/call/logic-impl.js        195)         /*
lib/plankton/call/logic-impl.js        196)         if (executors.length == 0) {
lib/plankton/call/logic-impl.js        197)             return executor_resolve<type_state, type_error>(state);
lib/plankton/call/logic-impl.js        198)         }
lib/plankton/call/logic-impl.js        199)         else if (executors.length == 1) {
lib/plankton/call/logic-impl.js        200)             return executors[0](state);
lib/plankton/call/logic-impl.js        201)         }
lib/plankton/call/logic-impl.js        202)         else {
lib/plankton/call/logic-impl.js        203)             return (
lib/plankton/call/logic-impl.js        204)                 executor_chain<type_state, type_error>(
lib/plankton/call/logic-impl.js        205)                     state,
lib/plankton/call/logic-impl.js        206)                     [
lib/plankton/call/logic-impl.js        207)                         state => (resolve, reject) => executors[0](state)(result => executors[1](result)(resolve, reject), reject)
lib/plankton/call/logic-impl.js        208)                     ].concat(executors.slice(2))
lib/plankton/call/logic-impl.js        209)                 )
lib/plankton/call/logic-impl.js        210)             );
lib/plankton/call/logic-impl.js        211)         }
lib/plankton/call/logic-impl.js        212)          */
lib/plankton/call/logic-impl.js        213)         /*
lib/plankton/call/logic-impl.js        214)         return (
lib/plankton/call/logic-impl.js        215)             executors.reduce(
lib/plankton/call/logic-impl.js        216)                 (chain, current) => executor_compose_sequential<type_state, type_state, type_error>(chain, current, deferred),
lib/plankton/call/logic-impl.js        217)                 executor_resolve<type_state, type_error>(state)
lib/plankton/call/logic-impl.js        218)             )
lib/plankton/call/logic-impl.js        219)         );
lib/plankton/call/logic-impl.js        220)          */
lib/plankton/call/logic-impl.js        221)     }
lib/plankton/call/logic-impl.js        222)     lib_call.executor_chain = executor_chain;
lib/plankton/call/logic-impl.js        223)     /**
lib/plankton/call/logic-impl.js        224)      * @author fenris
lib/plankton/call/logic-impl.js        225)      */
lib/plankton/call/logic-impl.js        226)     function executor_first(executors) {
lib/plankton/call/logic-impl.js        227)         /*
lib/plankton/call/logic-impl.js        228)         return (
lib/plankton/call/logic-impl.js        229)             (resolve, reject) => {
lib/plankton/call/logic-impl.js        230)                 if (executors.length == 0) {
lib/plankton/call/logic-impl.js        231)                     reject(new Error("all failed"));
lib/plankton/call/logic-impl.js        232)                 }
lib/plankton/call/logic-impl.js        233)                 else {
lib/plankton/call/logic-impl.js        234)                     executors[0](
lib/plankton/call/logic-impl.js        235)                         result => {
lib/plankton/call/logic-impl.js        236)                             resolve(result);
lib/plankton/call/logic-impl.js        237)                         },
lib/plankton/call/logic-impl.js        238)                         reason => {
lib/plankton/call/logic-impl.js        239)                             executor_first<type_result, type_reason>(executors.slice(1))(resolve, reject);
lib/plankton/call/logic-impl.js        240)                         }
lib/plankton/call/logic-impl.js        241)                     )
lib/plankton/call/logic-impl.js        242)                 }
lib/plankton/call/logic-impl.js        243)             }
lib/plankton/call/logic-impl.js        244)         );
lib/plankton/call/logic-impl.js        245)          */
lib/plankton/call/logic-impl.js        246)         return ((resolve, reject) => {
lib/plankton/call/logic-impl.js        247)             executor_chain([], executors.map(executor => reasons => (resolve_, reject_) => {
lib/plankton/call/logic-impl.js        248)                 executor(result => reject_(result), reason => resolve_(reasons.concat([reason])));
lib/plankton/call/logic-impl.js        249)             }))(errors => reject(errors), result => resolve(result));
lib/plankton/call/logic-impl.js        250)         });
lib/plankton/call/logic-impl.js        251)     }
lib/plankton/call/logic-impl.js        252)     lib_call.executor_first = executor_first;
lib/plankton/call/logic-impl.js        253)     /**
lib/plankton/call/logic-impl.js        254)      * @author fenris
lib/plankton/call/logic-impl.js        255)      */
lib/plankton/call/logic-impl.js        256)     function executor_condense(executors) {
lib/plankton/call/logic-impl.js        257)         return (executor_chain([], executors.map(executor => result => (resolve, reject) => {
lib/plankton/call/logic-impl.js        258)             executor(element => resolve(result.concat([element])), reject);
lib/plankton/call/logic-impl.js        259)         })));
lib/plankton/call/logic-impl.js        260)     }
lib/plankton/call/logic-impl.js        261)     lib_call.executor_condense = executor_condense;
lib/plankton/call/logic-impl.js        262)     /**
lib/plankton/call/logic-impl.js        263)      * @author fenris
lib/plankton/call/logic-impl.js        264)      * @deprecated use condense
lib/plankton/call/logic-impl.js        265)      */
lib/plankton/call/logic-impl.js        266)     function executor_filter(executors, predicate) {
lib/plankton/call/logic-impl.js        267)         return (executor_chain([], executors.map(executor => result => (resolve, reject) => {
lib/plankton/call/logic-impl.js        268)             executor(element => resolve(predicate(element) ? result.concat([element]) : result), reject);
lib/plankton/call/logic-impl.js        269)         })));
lib/plankton/call/logic-impl.js        270)     }
lib/plankton/call/logic-impl.js        271)     lib_call.executor_filter = executor_filter;
lib/plankton/call/logic-impl.js        272)     /**
lib/plankton/call/logic-impl.js        273)      * @author fenris
lib/plankton/call/logic-impl.js        274)      * @deprecated use condense
lib/plankton/call/logic-impl.js        275)      */
lib/plankton/call/logic-impl.js        276)     function executor_map(executors, transformator) {
lib/plankton/call/logic-impl.js        277)         return (executor_chain([], executors.map(executor => result => (resolve, reject) => {
lib/plankton/call/logic-impl.js        278)             executor(element1 => resolve(result.concat([transformator(element1)])), reject);
lib/plankton/call/logic-impl.js        279)         })));
lib/plankton/call/logic-impl.js        280)     }
lib/plankton/call/logic-impl.js        281)     lib_call.executor_map = executor_map;
lib/plankton/call/logic-impl.js        282)     /**
lib/plankton/call/logic-impl.js        283)      * @author fenris
lib/plankton/call/logic-impl.js        284)      * @deprecated use condense
lib/plankton/call/logic-impl.js        285)      */
lib/plankton/call/logic-impl.js        286)     function executor_reduce(executors, initial, accumulator) {
lib/plankton/call/logic-impl.js        287)         return (executor_chain(initial, executors.map(executor => result => (resolve, reject) => {
lib/plankton/call/logic-impl.js        288)             executor(element => resolve(accumulator(result, element)), reject);
lib/plankton/call/logic-impl.js        289)         })));
lib/plankton/call/logic-impl.js        290)     }
lib/plankton/call/logic-impl.js        291)     lib_call.executor_reduce = executor_reduce;
lib/plankton/call/logic-impl.js        292) })(lib_call || (lib_call = {}));
lib/plankton/call/logic-impl.js        293) /*
lib/plankton/call/logic-impl.js        294) This file is part of »bacterio-plankton:call«.
lib/plankton/call/logic-impl.js        295) 
Christian Fraß [upd] server:lib:plankton

Christian Fraß authored 3 years ago

server/lib/plankton/call/logic-impl.js 296) Copyright 2016-2021 'Christian Fraß, Christian Neubauer, Martin Springwald GbR'
Christian Fraß [add] lib:plankton

Christian Fraß authored 3 years ago

lib/plankton/call/logic-impl.js        297) <info@greenscale.de>
lib/plankton/call/logic-impl.js        298) 
lib/plankton/call/logic-impl.js        299) »bacterio-plankton:call« is free software: you can redistribute it and/or modify
lib/plankton/call/logic-impl.js        300) it under the terms of the GNU Lesser General Public License as published by
lib/plankton/call/logic-impl.js        301) the Free Software Foundation, either version 3 of the License, or
lib/plankton/call/logic-impl.js        302) (at your option) any later version.
lib/plankton/call/logic-impl.js        303) 
lib/plankton/call/logic-impl.js        304) »bacterio-plankton:call« is distributed in the hope that it will be useful,
lib/plankton/call/logic-impl.js        305) but WITHOUT ANY WARRANTY; without even the implied warranty of
lib/plankton/call/logic-impl.js        306) MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
lib/plankton/call/logic-impl.js        307) GNU Lesser General Public License for more details.
lib/plankton/call/logic-impl.js        308) 
lib/plankton/call/logic-impl.js        309) You should have received a copy of the GNU Lesser General Public License
lib/plankton/call/logic-impl.js        310) along with »bacterio-plankton:call«. If not, see <http://www.gnu.org/licenses/>.
lib/plankton/call/logic-impl.js        311)  */
lib/plankton/call/logic-impl.js        312) var lib_call;
lib/plankton/call/logic-impl.js        313) (function (lib_call) {
lib/plankton/call/logic-impl.js        314)     /**
lib/plankton/call/logic-impl.js        315)      * @author fenris
lib/plankton/call/logic-impl.js        316)      */
lib/plankton/call/logic-impl.js        317)     function promise_reject(reason) {
lib/plankton/call/logic-impl.js        318)         return Promise.reject(reason);
lib/plankton/call/logic-impl.js        319)     }
lib/plankton/call/logic-impl.js        320)     lib_call.promise_reject = promise_reject;
lib/plankton/call/logic-impl.js        321)     /**
lib/plankton/call/logic-impl.js        322)      * @author fenris
lib/plankton/call/logic-impl.js        323)      */
lib/plankton/call/logic-impl.js        324)     function promise_resolve(result) {
lib/plankton/call/logic-impl.js        325)         return Promise.resolve(result);
lib/plankton/call/logic-impl.js        326)     }
lib/plankton/call/logic-impl.js        327)     lib_call.promise_resolve = promise_resolve;
lib/plankton/call/logic-impl.js        328)     /**
lib/plankton/call/logic-impl.js        329)      * @author fenris
lib/plankton/call/logic-impl.js        330)      */
lib/plankton/call/logic-impl.js        331)     function promise_make(executor) {
lib/plankton/call/logic-impl.js        332)         return (new Promise(executor));
lib/plankton/call/logic-impl.js        333)     }
lib/plankton/call/logic-impl.js        334)     lib_call.promise_make = promise_make;
lib/plankton/call/logic-impl.js        335)     /**
lib/plankton/call/logic-impl.js        336)      * @author fenris
lib/plankton/call/logic-impl.js        337)      */
lib/plankton/call/logic-impl.js        338)     function promise_then_close(promise, resolver, rejector) {
lib/plankton/call/logic-impl.js        339)         promise.then(resolver, rejector);
lib/plankton/call/logic-impl.js        340)     }
lib/plankton/call/logic-impl.js        341)     lib_call.promise_then_close = promise_then_close;
lib/plankton/call/logic-impl.js        342)     /**
lib/plankton/call/logic-impl.js        343)      * @author fenris
lib/plankton/call/logic-impl.js        344)      */
lib/plankton/call/logic-impl.js        345)     function promise_then_append(promise, resolver, rejector = null) {
lib/plankton/call/logic-impl.js        346)         if (rejector == null) {
lib/plankton/call/logic-impl.js        347)             rejector = (reason) => promise_reject(reason);
lib/plankton/call/logic-impl.js        348)         }
lib/plankton/call/logic-impl.js        349)         return (promise.then(resolver, rejector));
lib/plankton/call/logic-impl.js        350)     }
lib/plankton/call/logic-impl.js        351)     lib_call.promise_then_append = promise_then_append;
lib/plankton/call/logic-impl.js        352)     /**
lib/plankton/call/logic-impl.js        353)      * @author fenris
lib/plankton/call/logic-impl.js        354)      */
lib/plankton/call/logic-impl.js        355)     function promise_all(promises) {
lib/plankton/call/logic-impl.js        356)         return Promise.all(promises);
lib/plankton/call/logic-impl.js        357)     }
lib/plankton/call/logic-impl.js        358)     lib_call.promise_all = promise_all;
lib/plankton/call/logic-impl.js        359)     /**
lib/plankton/call/logic-impl.js        360)      * @author fenris
lib/plankton/call/logic-impl.js        361)      */
lib/plankton/call/logic-impl.js        362)     function promise_chain(promises, start = undefined) {
lib/plankton/call/logic-impl.js        363)         return (promises.reduce((chain, promise) => promise_then_append(chain, promise), promise_resolve(start)));
lib/plankton/call/logic-impl.js        364)     }
lib/plankton/call/logic-impl.js        365)     lib_call.promise_chain = promise_chain;
lib/plankton/call/logic-impl.js        366)     /**
lib/plankton/call/logic-impl.js        367)      * @author fenris
lib/plankton/call/logic-impl.js        368)      */
lib/plankton/call/logic-impl.js        369)     function promise_condense(promises) {
lib/plankton/call/logic-impl.js        370)         return (promise_chain(promises.map(promise => result => promise_then_append(promise(), element => promise_resolve(result.concat([element])))), []));
lib/plankton/call/logic-impl.js        371)     }
lib/plankton/call/logic-impl.js        372)     lib_call.promise_condense = promise_condense;
lib/plankton/call/logic-impl.js        373)     /**
lib/plankton/call/logic-impl.js        374)      * @author fenris
lib/plankton/call/logic-impl.js        375)      */
lib/plankton/call/logic-impl.js        376)     function promise_group(promises, serial = false) {
lib/plankton/call/logic-impl.js        377)         const decorate = function (promise, name) {
lib/plankton/call/logic-impl.js        378)             return (() => promise_then_append(promise(), value => promise_resolve({ "key": name, "value": value })));
lib/plankton/call/logic-impl.js        379)         };
lib/plankton/call/logic-impl.js        380)         const convert = function (array) {
lib/plankton/call/logic-impl.js        381)             let object = {};
lib/plankton/call/logic-impl.js        382)             array.forEach(({ "key": key, "value": value }) => { object[key] = value; });
lib/plankton/call/logic-impl.js        383)             return object;
lib/plankton/call/logic-impl.js        384)         };
lib/plankton/call/logic-impl.js        385)         if (serial) {
lib/plankton/call/logic-impl.js        386)             return (promise_then_append(promise_condense(Object.keys(promises)
lib/plankton/call/logic-impl.js        387)                 .map(name => decorate(promises[name], name))), list => promise_resolve(convert(list))));
lib/plankton/call/logic-impl.js        388)         }
lib/plankton/call/logic-impl.js        389)         else {
lib/plankton/call/logic-impl.js        390)             return (promise_then_append(promise_all(Object.keys(promises)
lib/plankton/call/logic-impl.js        391)                 .map(name => decorate(promises[name], name))
lib/plankton/call/logic-impl.js        392)                 .map(promise => promise())), list => promise_resolve(convert(list))));
lib/plankton/call/logic-impl.js        393)         }
lib/plankton/call/logic-impl.js        394)     }
lib/plankton/call/logic-impl.js        395)     lib_call.promise_group = promise_group;
lib/plankton/call/logic-impl.js        396)     /**
lib/plankton/call/logic-impl.js        397)      * @author fenris
lib/plankton/call/logic-impl.js        398)      */
lib/plankton/call/logic-impl.js        399)     function promise_wrap(promise, transformator_result, transformator_reason = lib_call.id) {
lib/plankton/call/logic-impl.js        400)         return (promise_make((resolve, reject) => {
lib/plankton/call/logic-impl.js        401)             promise_then_close(promise, result => resolve(transformator_result(result)), reason => reject(transformator_reason(reason)));
lib/plankton/call/logic-impl.js        402)         }));
lib/plankton/call/logic-impl.js        403)     }
lib/plankton/call/logic-impl.js        404)     lib_call.promise_wrap = promise_wrap;
lib/plankton/call/logic-impl.js        405)     /**
lib/plankton/call/logic-impl.js        406)      * @author fenris
lib/plankton/call/logic-impl.js        407)      */
lib/plankton/call/logic-impl.js        408)     function promise_show(label) {
lib/plankton/call/logic-impl.js        409)         return (result => promise_make((resolve, reject) => {
lib/plankton/call/logic-impl.js        410)             lib_log.info(label + ": " + instance_show(result));
lib/plankton/call/logic-impl.js        411)             resolve(result);
lib/plankton/call/logic-impl.js        412)         }));
lib/plankton/call/logic-impl.js        413)     }
lib/plankton/call/logic-impl.js        414)     lib_call.promise_show = promise_show;
lib/plankton/call/logic-impl.js        415)     /**
lib/plankton/call/logic-impl.js        416)      * @author fenris
lib/plankton/call/logic-impl.js        417)      */
lib/plankton/call/logic-impl.js        418)     function promise_log(result) {
lib/plankton/call/logic-impl.js        419)         return promise_show("log");
lib/plankton/call/logic-impl.js        420)     }
lib/plankton/call/logic-impl.js        421)     lib_call.promise_log = promise_log;
lib/plankton/call/logic-impl.js        422)     /**
lib/plankton/call/logic-impl.js        423)      * @author fenris
lib/plankton/call/logic-impl.js        424)      */
lib/plankton/call/logic-impl.js        425)     function promise_attach(state, promise, name) {
lib/plankton/call/logic-impl.js        426)         return (promise_wrap(promise, result => {
lib/plankton/call/logic-impl.js        427)             state[name] = result;
lib/plankton/call/logic-impl.js        428)             return state;
lib/plankton/call/logic-impl.js        429)         }));
lib/plankton/call/logic-impl.js        430)     }
lib/plankton/call/logic-impl.js        431)     lib_call.promise_attach = promise_attach;
lib/plankton/call/logic-impl.js        432)     /**
lib/plankton/call/logic-impl.js        433)      * @author fenris
lib/plankton/call/logic-impl.js        434)      */
lib/plankton/call/logic-impl.js        435)     function promise_delay(promise, delay) {
lib/plankton/call/logic-impl.js        436)         return promise_make((resolve, reject) => {
lib/plankton/call/logic-impl.js        437)             lib_call.timeout(() => {
lib/plankton/call/logic-impl.js        438)                 promise_then_close(promise, resolve, reject);
lib/plankton/call/logic-impl.js        439)                 return null;
lib/plankton/call/logic-impl.js        440)             }, delay);
lib/plankton/call/logic-impl.js        441)         });
lib/plankton/call/logic-impl.js        442)     }
lib/plankton/call/logic-impl.js        443)     lib_call.promise_delay = promise_delay;
lib/plankton/call/logic-impl.js        444)     /**
lib/plankton/call/logic-impl.js        445)      * @author fenris
lib/plankton/call/logic-impl.js        446)      */
lib/plankton/call/logic-impl.js        447)     function promise_to_executor(promise) {
lib/plankton/call/logic-impl.js        448)         return ((resolve, reject) => promise.then(resolve, reject));
lib/plankton/call/logic-impl.js        449)     }
lib/plankton/call/logic-impl.js        450)     lib_call.promise_to_executor = promise_to_executor;
lib/plankton/call/logic-impl.js        451) })(lib_call || (lib_call = {}));
lib/plankton/call/logic-impl.js        452) /*
lib/plankton/call/logic-impl.js        453) This file is part of »bacterio-plankton:call«.
lib/plankton/call/logic-impl.js        454) 
Christian Fraß [upd] server:lib:plankton

Christian Fraß authored 3 years ago

server/lib/plankton/call/logic-impl.js 455) Copyright 2016-2021 'Christian Fraß, Christian Neubauer, Martin Springwald GbR'
Christian Fraß [add] lib:plankton

Christian Fraß authored 3 years ago

lib/plankton/call/logic-impl.js        456) <info@greenscale.de>
lib/plankton/call/logic-impl.js        457) 
lib/plankton/call/logic-impl.js        458) »bacterio-plankton:call« is free software: you can redistribute it and/or modify
lib/plankton/call/logic-impl.js        459) it under the terms of the GNU Lesser General Public License as published by
lib/plankton/call/logic-impl.js        460) the Free Software Foundation, either version 3 of the License, or
lib/plankton/call/logic-impl.js        461) (at your option) any later version.
lib/plankton/call/logic-impl.js        462) 
lib/plankton/call/logic-impl.js        463) »bacterio-plankton:call« is distributed in the hope that it will be useful,
lib/plankton/call/logic-impl.js        464) but WITHOUT ANY WARRANTY; without even the implied warranty of
lib/plankton/call/logic-impl.js        465) MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
lib/plankton/call/logic-impl.js        466) GNU Lesser General Public License for more details.
lib/plankton/call/logic-impl.js        467) 
lib/plankton/call/logic-impl.js        468) You should have received a copy of the GNU Lesser General Public License
lib/plankton/call/logic-impl.js        469) along with »bacterio-plankton:call«. If not, see <http://www.gnu.org/licenses/>.
lib/plankton/call/logic-impl.js        470)  */
lib/plankton/call/logic-impl.js        471) var lib_call;
lib/plankton/call/logic-impl.js        472) (function (lib_call) {
lib/plankton/call/logic-impl.js        473)     lib_call.initializer_state_initial = 0;
lib/plankton/call/logic-impl.js        474)     lib_call.initializer_state_waiting = 1;
lib/plankton/call/logic-impl.js        475)     lib_call.initializer_state_successful = 2;
lib/plankton/call/logic-impl.js        476)     lib_call.initializer_state_failed = 3;
lib/plankton/call/logic-impl.js        477)     /**
lib/plankton/call/logic-impl.js        478)      * @author fenris
lib/plankton/call/logic-impl.js        479)      */
lib/plankton/call/logic-impl.js        480)     function initializer_make(fetcher) {
lib/plankton/call/logic-impl.js        481)         let subject = {
lib/plankton/call/logic-impl.js        482)             "fetcher": fetcher,
lib/plankton/call/logic-impl.js        483)             "state": lib_call.initializer_state_initial,
lib/plankton/call/logic-impl.js        484)             "queue": [],
lib/plankton/call/logic-impl.js        485)             "result": undefined,
lib/plankton/call/logic-impl.js        486)             "reason": undefined,
lib/plankton/call/logic-impl.js        487)         };
lib/plankton/call/logic-impl.js        488)         return subject;
lib/plankton/call/logic-impl.js        489)     }
lib/plankton/call/logic-impl.js        490)     lib_call.initializer_make = initializer_make;
lib/plankton/call/logic-impl.js        491)     /**
lib/plankton/call/logic-impl.js        492)      * @author fenris
lib/plankton/call/logic-impl.js        493)      */
lib/plankton/call/logic-impl.js        494)     function initializer_actuate(subject) {
lib/plankton/call/logic-impl.js        495)         switch (subject.state) {
lib/plankton/call/logic-impl.js        496)             case lib_call.initializer_state_successful: {
lib/plankton/call/logic-impl.js        497)                 subject.queue.forEach(entry => entry.resolve(subject.result));
lib/plankton/call/logic-impl.js        498)                 break;
lib/plankton/call/logic-impl.js        499)             }
lib/plankton/call/logic-impl.js        500)             case lib_call.initializer_state_failed: {
lib/plankton/call/logic-impl.js        501)                 subject.queue.forEach(entry => entry.reject(subject.reason));
lib/plankton/call/logic-impl.js        502)                 break;
lib/plankton/call/logic-impl.js        503)             }
lib/plankton/call/logic-impl.js        504)             default: {
lib/plankton/call/logic-impl.js        505)                 let message = `unhandled state ${subject.state}`;
lib/plankton/call/logic-impl.js        506)                 throw (new Error(message));
lib/plankton/call/logic-impl.js        507)                 break;
lib/plankton/call/logic-impl.js        508)             }
lib/plankton/call/logic-impl.js        509)         }
lib/plankton/call/logic-impl.js        510)     }
lib/plankton/call/logic-impl.js        511)     /**
lib/plankton/call/logic-impl.js        512)      * @author fenris
lib/plankton/call/logic-impl.js        513)      */
lib/plankton/call/logic-impl.js        514)     function initializer_reset(subject) {
lib/plankton/call/logic-impl.js        515)         subject.state = lib_call.initializer_state_initial;
lib/plankton/call/logic-impl.js        516)         subject.queue = [];
lib/plankton/call/logic-impl.js        517)     }
lib/plankton/call/logic-impl.js        518)     lib_call.initializer_reset = initializer_reset;
lib/plankton/call/logic-impl.js        519)     /**
lib/plankton/call/logic-impl.js        520)      * @author fenris
lib/plankton/call/logic-impl.js        521)      */
lib/plankton/call/logic-impl.js        522)     function initializer_state(subject) {
lib/plankton/call/logic-impl.js        523)         return subject.state;
lib/plankton/call/logic-impl.js        524)     }
lib/plankton/call/logic-impl.js        525)     lib_call.initializer_state = initializer_state;
lib/plankton/call/logic-impl.js        526)     /**
lib/plankton/call/logic-impl.js        527)      * @author fenris
lib/plankton/call/logic-impl.js        528)      */
lib/plankton/call/logic-impl.js        529)     function initializer_get(subject) {
lib/plankton/call/logic-impl.js        530)         switch (subject.state) {
lib/plankton/call/logic-impl.js        531)             case lib_call.initializer_state_initial: {
lib/plankton/call/logic-impl.js        532)                 subject.state = lib_call.initializer_state_waiting;
lib/plankton/call/logic-impl.js        533)                 return (lib_call.promise_make((resolve, reject) => {
lib/plankton/call/logic-impl.js        534)                     subject.queue.push({ "resolve": resolve, "reject": reject });
lib/plankton/call/logic-impl.js        535)                     subject.fetcher().then(result => {
lib/plankton/call/logic-impl.js        536)                         subject.state = lib_call.initializer_state_successful;
lib/plankton/call/logic-impl.js        537)                         subject.result = result;
lib/plankton/call/logic-impl.js        538)                         initializer_actuate(subject);
lib/plankton/call/logic-impl.js        539)                     }, reason => {
lib/plankton/call/logic-impl.js        540)                         subject.state = lib_call.initializer_state_failed;
lib/plankton/call/logic-impl.js        541)                         subject.reason = reason;
lib/plankton/call/logic-impl.js        542)                         initializer_actuate(subject);
lib/plankton/call/logic-impl.js        543)                     });
lib/plankton/call/logic-impl.js        544)                 }));
lib/plankton/call/logic-impl.js        545)                 break;
lib/plankton/call/logic-impl.js        546)             }
lib/plankton/call/logic-impl.js        547)             case lib_call.initializer_state_waiting: {
lib/plankton/call/logic-impl.js        548)                 return (lib_call.promise_make((resolve, reject) => {
lib/plankton/call/logic-impl.js        549)                     subject.queue.push({ "resolve": resolve, "reject": reject });
lib/plankton/call/logic-impl.js        550)                 }));
lib/plankton/call/logic-impl.js        551)                 break;
lib/plankton/call/logic-impl.js        552)             }
lib/plankton/call/logic-impl.js        553)             case lib_call.initializer_state_successful: {
lib/plankton/call/logic-impl.js        554)                 return (lib_call.promise_resolve(subject.result));
lib/plankton/call/logic-impl.js        555)                 break;
lib/plankton/call/logic-impl.js        556)             }
lib/plankton/call/logic-impl.js        557)             case lib_call.initializer_state_failed: {
lib/plankton/call/logic-impl.js        558)                 return (lib_call.promise_reject(subject.reason));
lib/plankton/call/logic-impl.js        559)                 break;
lib/plankton/call/logic-impl.js        560)             }
lib/plankton/call/logic-impl.js        561)             default: {
lib/plankton/call/logic-impl.js        562)                 let message = `unhandled state ${subject.state}`;
lib/plankton/call/logic-impl.js        563)                 throw (new Error(message));
lib/plankton/call/logic-impl.js        564)                 break;
lib/plankton/call/logic-impl.js        565)             }
lib/plankton/call/logic-impl.js        566)         }
lib/plankton/call/logic-impl.js        567)     }
lib/plankton/call/logic-impl.js        568)     lib_call.initializer_get = initializer_get;
lib/plankton/call/logic-impl.js        569)     /**
lib/plankton/call/logic-impl.js        570)      * @author fenris
lib/plankton/call/logic-impl.js        571)      */
lib/plankton/call/logic-impl.js        572)     function initializer_get_sync(subject) {
lib/plankton/call/logic-impl.js        573)         switch (subject.state) {
lib/plankton/call/logic-impl.js        574)             case lib_call.initializer_state_successful: {
lib/plankton/call/logic-impl.js        575)                 return subject.result;
lib/plankton/call/logic-impl.js        576)                 break;
lib/plankton/call/logic-impl.js        577)             }
lib/plankton/call/logic-impl.js        578)             case lib_call.initializer_state_failed: {
lib/plankton/call/logic-impl.js        579)                 throw subject.reason;
lib/plankton/call/logic-impl.js        580)                 break;
lib/plankton/call/logic-impl.js        581)             }
lib/plankton/call/logic-impl.js        582)             default: {
lib/plankton/call/logic-impl.js        583)                 let message = `unhandled state ${subject.state}`;
lib/plankton/call/logic-impl.js        584)                 throw (new Error(message));
lib/plankton/call/logic-impl.js        585)                 break;
lib/plankton/call/logic-impl.js        586)             }
lib/plankton/call/logic-impl.js        587)         }
lib/plankton/call/logic-impl.js        588)     }
lib/plankton/call/logic-impl.js        589)     /**
lib/plankton/call/logic-impl.js        590)      * @author fenris
lib/plankton/call/logic-impl.js        591)      */
lib/plankton/call/logic-impl.js        592)     function initializer_set_sync(subject, result) {
lib/plankton/call/logic-impl.js        593)         switch (subject.state) {
lib/plankton/call/logic-impl.js        594)             case lib_call.initializer_state_successful: {
lib/plankton/call/logic-impl.js        595)                 subject.result = result;
lib/plankton/call/logic-impl.js        596)                 break;
lib/plankton/call/logic-impl.js        597)             }
lib/plankton/call/logic-impl.js        598)             case lib_call.initializer_state_failed: {
lib/plankton/call/logic-impl.js        599)                 subject.state = lib_call.initializer_state_successful;
lib/plankton/call/logic-impl.js        600)                 subject.result = result;
lib/plankton/call/logic-impl.js        601)                 break;
lib/plankton/call/logic-impl.js        602)             }
lib/plankton/call/logic-impl.js        603)             default: {
lib/plankton/call/logic-impl.js        604)                 let message = `unhandled state ${subject.state}`;
lib/plankton/call/logic-impl.js        605)                 throw (new Error(message));
lib/plankton/call/logic-impl.js        606)                 break;
lib/plankton/call/logic-impl.js        607)             }
lib/plankton/call/logic-impl.js        608)         }
lib/plankton/call/logic-impl.js        609)     }
lib/plankton/call/logic-impl.js        610) })(lib_call || (lib_call = {}));
lib/plankton/call/logic-impl.js        611) /*
lib/plankton/call/logic-impl.js        612) This file is part of »bacterio-plankton:call«.
lib/plankton/call/logic-impl.js        613) 
Christian Fraß [upd] server:lib:plankton

Christian Fraß authored 3 years ago

server/lib/plankton/call/logic-impl.js 614) Copyright 2016-2021 'Christian Fraß, Christian Neubauer, Martin Springwald GbR'
Christian Fraß [add] lib:plankton

Christian Fraß authored 3 years ago

lib/plankton/call/logic-impl.js        615) <info@greenscale.de>
lib/plankton/call/logic-impl.js        616) 
lib/plankton/call/logic-impl.js        617) »bacterio-plankton:call« is free software: you can redistribute it and/or modify
lib/plankton/call/logic-impl.js        618) it under the terms of the GNU Lesser General Public License as published by
lib/plankton/call/logic-impl.js        619) the Free Software Foundation, either version 3 of the License, or
lib/plankton/call/logic-impl.js        620) (at your option) any later version.
lib/plankton/call/logic-impl.js        621) 
lib/plankton/call/logic-impl.js        622) »bacterio-plankton:call« is distributed in the hope that it will be useful,
lib/plankton/call/logic-impl.js        623) but WITHOUT ANY WARRANTY; without even the implied warranty of
lib/plankton/call/logic-impl.js        624) MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
lib/plankton/call/logic-impl.js        625) GNU Lesser General Public License for more details.
lib/plankton/call/logic-impl.js        626) 
lib/plankton/call/logic-impl.js        627) You should have received a copy of the GNU Lesser General Public License
lib/plankton/call/logic-impl.js        628) along with »bacterio-plankton:call«. If not, see <http://www.gnu.org/licenses/>.
lib/plankton/call/logic-impl.js        629)  */
lib/plankton/call/logic-impl.js        630) var lib_call;
lib/plankton/call/logic-impl.js        631) (function (lib_call) {
lib/plankton/call/logic-impl.js        632)     /*
lib/plankton/call/logic-impl.js        633)         The core idea of this library is to provide means for asynchronous program flow. The old-school way to do is,
lib/plankton/call/logic-impl.js        634)         is to use callbacks. While this approach is simple and easy to understand, it has some disadvantages. As an
lib/plankton/call/logic-impl.js        635)         attempt to relief and improve this, the promise-system was introduced. In principle it solves most of the
lib/plankton/call/logic-impl.js        636)         problems found in the callback-approach; however it has some downsides as well:
lib/plankton/call/logic-impl.js        637)             
lib/plankton/call/logic-impl.js        638)         - Convolution of multiple principles
lib/plankton/call/logic-impl.js        639)             Promises unite the ideas of asynchronous program flow and error handling.
lib/plankton/call/logic-impl.js        640)         
lib/plankton/call/logic-impl.js        641)         - Instant execution
lib/plankton/call/logic-impl.js        642)             Creating a promise results in the instant execution of the given executor prodecure. While this might be
lib/plankton/call/logic-impl.js        643)             convenient in some cases, it can be quite disturbing and counter-intuitive in others.
lib/plankton/call/logic-impl.js        644)         
lib/plankton/call/logic-impl.js        645)         - Broken typing
lib/plankton/call/logic-impl.js        646)             The Promise system doesn't distinguish between an appending "then" (i.e. passing a function, which returns a
lib/plankton/call/logic-impl.js        647)             new promise) and a closing "then" (i.e. passing a function, which has no return value). On top of that it
lib/plankton/call/logic-impl.js        648)             allows returning simple values in an appending "then", which results in an implicit call of the executors
lib/plankton/call/logic-impl.js        649)             "resolve"-function. The price for these "pragmatic" features is that the whole system can't be typed well.
lib/plankton/call/logic-impl.js        650)             And even though JavaScript is not a strictly typed language, it was a quite questionable decision to design
lib/plankton/call/logic-impl.js        651)             the promise system in a way, which breaks typing from the start.
lib/plankton/call/logic-impl.js        652)         
lib/plankton/call/logic-impl.js        653)         The deferral-system forseeks to solve these issues while retaining the advantages of the promise-system.
lib/plankton/call/logic-impl.js        654)      */
lib/plankton/call/logic-impl.js        655)     /**
lib/plankton/call/logic-impl.js        656)      * @author fenris
lib/plankton/call/logic-impl.js        657)      * @desc activates the deferral and handles its output according to a given procedure
lib/plankton/call/logic-impl.js        658)      * @param {(value : type_value)=>void} procedure a function which receives the output of the deferral as argument
lib/plankton/call/logic-impl.js        659)      */
lib/plankton/call/logic-impl.js        660)     function deferral_use(deferral, input, procedure) {
lib/plankton/call/logic-impl.js        661)         deferral.representation(input).then(value => {
lib/plankton/call/logic-impl.js        662)             procedure(value);
lib/plankton/call/logic-impl.js        663)         }, reason => {
lib/plankton/call/logic-impl.js        664)             throw reason;
lib/plankton/call/logic-impl.js        665)         });
lib/plankton/call/logic-impl.js        666)     }
lib/plankton/call/logic-impl.js        667)     lib_call.deferral_use = deferral_use;
lib/plankton/call/logic-impl.js        668)     /**
lib/plankton/call/logic-impl.js        669)      * @author fenris
lib/plankton/call/logic-impl.js        670)      * @desc creates a deferral-subject (similar to "new Promise", where "convey" reflects "resolve"/"reject")
lib/plankton/call/logic-impl.js        671)      */
lib/plankton/call/logic-impl.js        672)     function deferral_make(handler) {
lib/plankton/call/logic-impl.js        673)         return ({
lib/plankton/call/logic-impl.js        674)             "representation": ((input) => (new Promise((resolve, reject) => {
lib/plankton/call/logic-impl.js        675)                 handler(input, resolve);
lib/plankton/call/logic-impl.js        676)             })))
lib/plankton/call/logic-impl.js        677)         });
lib/plankton/call/logic-impl.js        678)     }
lib/plankton/call/logic-impl.js        679)     lib_call.deferral_make = deferral_make;
lib/plankton/call/logic-impl.js        680)     /**
lib/plankton/call/logic-impl.js        681)      * @author fenris
lib/plankton/call/logic-impl.js        682)      * @desc wraps a simple function into a deferral (similar to "Promise.resolve"/"Promise.reject")
lib/plankton/call/logic-impl.js        683)      */
lib/plankton/call/logic-impl.js        684)     function deferral_wrap(function_) {
lib/plankton/call/logic-impl.js        685)         return (deferral_make((input, convey) => convey(function_(input))));
lib/plankton/call/logic-impl.js        686)     }
lib/plankton/call/logic-impl.js        687)     lib_call.deferral_wrap = deferral_wrap;
lib/plankton/call/logic-impl.js        688)     /**
lib/plankton/call/logic-impl.js        689)      * @author fenris
lib/plankton/call/logic-impl.js        690)      */
lib/plankton/call/logic-impl.js        691)     function deferral_id() {
lib/plankton/call/logic-impl.js        692)         return (deferral_make((input, convey) => convey(input)));
lib/plankton/call/logic-impl.js        693)     }
lib/plankton/call/logic-impl.js        694)     lib_call.deferral_id = deferral_id;
lib/plankton/call/logic-impl.js        695)     /**
lib/plankton/call/logic-impl.js        696)      * @author fenris
lib/plankton/call/logic-impl.js        697)      */
lib/plankton/call/logic-impl.js        698)     function deferral_const(value) {
lib/plankton/call/logic-impl.js        699)         return (deferral_make((input, convey) => convey(value)));
lib/plankton/call/logic-impl.js        700)     }
lib/plankton/call/logic-impl.js        701)     lib_call.deferral_const = deferral_const;
lib/plankton/call/logic-impl.js        702)     /**
lib/plankton/call/logic-impl.js        703)      * @author fenris
lib/plankton/call/logic-impl.js        704)      */
lib/plankton/call/logic-impl.js        705)     function deferral_delay(output, delay) {
lib/plankton/call/logic-impl.js        706)         return (deferral_make((input, convey) => {
lib/plankton/call/logic-impl.js        707)             setTimeout(() => convey(output), delay);
lib/plankton/call/logic-impl.js        708)         }));
lib/plankton/call/logic-impl.js        709)     }
lib/plankton/call/logic-impl.js        710)     lib_call.deferral_delay = deferral_delay;
lib/plankton/call/logic-impl.js        711)     /**
lib/plankton/call/logic-impl.js        712)      * @author fenris
lib/plankton/call/logic-impl.js        713)      * @desc connects two deferrals to form a new one; the output of the first is taken as input for the second
lib/plankton/call/logic-impl.js        714)      *     (similar to "Promise.then" when passing a function which returns a new promise)
lib/plankton/call/logic-impl.js        715)      * @param {type_deferral<type_value1>} first a simple deferral
lib/plankton/call/logic-impl.js        716)      * @param {(value1 : type_value1)=>type_deferral<type_value2>} second a function depending from a value returning a deferral
lib/plankton/call/logic-impl.js        717)      */
lib/plankton/call/logic-impl.js        718)     function deferral_compose_serial(first, second) {
lib/plankton/call/logic-impl.js        719)         return {
lib/plankton/call/logic-impl.js        720)             "representation": ((input) => first.representation(input).then((between) => second.representation(between)))
lib/plankton/call/logic-impl.js        721)         };
lib/plankton/call/logic-impl.js        722)     }
lib/plankton/call/logic-impl.js        723)     lib_call.deferral_compose_serial = deferral_compose_serial;
lib/plankton/call/logic-impl.js        724)     /**
lib/plankton/call/logic-impl.js        725)      * @author fenris
lib/plankton/call/logic-impl.js        726)      */
lib/plankton/call/logic-impl.js        727)     function deferral_compose_parallel({ "left": deferral_left, "right": deferral_right, }) {
lib/plankton/call/logic-impl.js        728)         return (deferral_make((input, convey) => {
lib/plankton/call/logic-impl.js        729)             let object = {
lib/plankton/call/logic-impl.js        730)                 "left": lib_maybe.make_nothing(),
lib/plankton/call/logic-impl.js        731)                 "right": lib_maybe.make_nothing(),
lib/plankton/call/logic-impl.js        732)             };
lib/plankton/call/logic-impl.js        733)             let finish = function () {
lib/plankton/call/logic-impl.js        734)                 if (lib_maybe.is_just(object.left)
lib/plankton/call/logic-impl.js        735)                     &&
lib/plankton/call/logic-impl.js        736)                         lib_maybe.is_just(object.right)) {
lib/plankton/call/logic-impl.js        737)                     let result = {
lib/plankton/call/logic-impl.js        738)                         "left": lib_maybe.cull(object.left),
lib/plankton/call/logic-impl.js        739)                         "right": lib_maybe.cull(object.right),
lib/plankton/call/logic-impl.js        740)                     };
lib/plankton/call/logic-impl.js        741)                     convey(result);
lib/plankton/call/logic-impl.js        742)                 }
lib/plankton/call/logic-impl.js        743)                 else {
lib/plankton/call/logic-impl.js        744)                     // do nothing
lib/plankton/call/logic-impl.js        745)                 }
lib/plankton/call/logic-impl.js        746)             };
lib/plankton/call/logic-impl.js        747)             deferral_use(deferral_left, input, output_left => {
lib/plankton/call/logic-impl.js        748)                 object.left = lib_maybe.make_just(output_left);
lib/plankton/call/logic-impl.js        749)                 finish();
lib/plankton/call/logic-impl.js        750)             });
lib/plankton/call/logic-impl.js        751)             deferral_use(deferral_right, input, output_right => {
lib/plankton/call/logic-impl.js        752)                 object.right = lib_maybe.make_just(output_right);
lib/plankton/call/logic-impl.js        753)                 finish();
lib/plankton/call/logic-impl.js        754)             });
lib/plankton/call/logic-impl.js        755)         }));
lib/plankton/call/logic-impl.js        756)     }
lib/plankton/call/logic-impl.js        757)     lib_call.deferral_compose_parallel = deferral_compose_parallel;
lib/plankton/call/logic-impl.js        758)     /**
lib/plankton/call/logic-impl.js        759)      * @author fenris
lib/plankton/call/logic-impl.js        760)      * @desc repeatedly applied serial composition
lib/plankton/call/logic-impl.js        761)      */
lib/plankton/call/logic-impl.js        762)     function deferral_chain(members) {
lib/plankton/call/logic-impl.js        763)         return (members.reduce(
lib/plankton/call/logic-impl.js        764)         // (result, current) => deferral_compose_serial<type_value, type_value, type_value>(result, current),
lib/plankton/call/logic-impl.js        765)         deferral_compose_serial, deferral_id()));
lib/plankton/call/logic-impl.js        766)     }
lib/plankton/call/logic-impl.js        767)     lib_call.deferral_chain = deferral_chain;
lib/plankton/call/logic-impl.js        768)     /**
lib/plankton/call/logic-impl.js        769)      * @author fenris
lib/plankton/call/logic-impl.js        770)      */
lib/plankton/call/logic-impl.js        771)     /*
lib/plankton/call/logic-impl.js        772)     export function deferral_bunch<type_input, type_output>(
lib/plankton/call/logic-impl.js        773)         members : {[name : string] : type_deferral<type_input, type_output>}
lib/plankton/call/logic-impl.js        774)     ) : type_deferral<type_input, {[name : string] : type_output}> {
lib/plankton/call/logic-impl.js        775)         
lib/plankton/call/logic-impl.js        776)     }
lib/plankton/call/logic-impl.js        777)      */
lib/plankton/call/logic-impl.js        778) })(lib_call || (lib_call = {}));
lib/plankton/call/logic-impl.js        779) /*
lib/plankton/call/logic-impl.js        780) This file is part of »bacterio-plankton:call«.
lib/plankton/call/logic-impl.js        781) 
Christian Fraß [upd] server:lib:plankton

Christian Fraß authored 3 years ago

server/lib/plankton/call/logic-impl.js 782) Copyright 2016-2021 'Christian Fraß, Christian Neubauer, Martin Springwald GbR'
Christian Fraß [add] lib:plankton

Christian Fraß authored 3 years ago

lib/plankton/call/logic-impl.js        783) <info@greenscale.de>
lib/plankton/call/logic-impl.js        784) 
lib/plankton/call/logic-impl.js        785) »bacterio-plankton:call« is free software: you can redistribute it and/or modify
lib/plankton/call/logic-impl.js        786) it under the terms of the GNU Lesser General Public License as published by
lib/plankton/call/logic-impl.js        787) the Free Software Foundation, either version 3 of the License, or
lib/plankton/call/logic-impl.js        788) (at your option) any later version.
lib/plankton/call/logic-impl.js        789) 
lib/plankton/call/logic-impl.js        790) »bacterio-plankton:call« is distributed in the hope that it will be useful,
lib/plankton/call/logic-impl.js        791) but WITHOUT ANY WARRANTY; without even the implied warranty of
lib/plankton/call/logic-impl.js        792) MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
lib/plankton/call/logic-impl.js        793) GNU Lesser General Public License for more details.
lib/plankton/call/logic-impl.js        794) 
lib/plankton/call/logic-impl.js        795) You should have received a copy of the GNU Lesser General Public License
lib/plankton/call/logic-impl.js        796) along with »bacterio-plankton:call«. If not, see <http://www.gnu.org/licenses/>.
lib/plankton/call/logic-impl.js        797)  */
lib/plankton/call/logic-impl.js        798) var lib_call;
lib/plankton/call/logic-impl.js        799) (function (lib_call) {
lib/plankton/call/logic-impl.js        800)     /**
lib/plankton/call/logic-impl.js        801)      * @author fenris
lib/plankton/call/logic-impl.js        802)      */
lib/plankton/call/logic-impl.js        803)     class class_deferral {
lib/plankton/call/logic-impl.js        804)         /**
lib/plankton/call/logic-impl.js        805)          * @author fenris
lib/plankton/call/logic-impl.js        806)          */
lib/plankton/call/logic-impl.js        807)         constructor(subject) {
lib/plankton/call/logic-impl.js        808)             this.subject = subject;
lib/plankton/call/logic-impl.js        809)         }
lib/plankton/call/logic-impl.js        810)         /**
lib/plankton/call/logic-impl.js        811)          * @author fenris
lib/plankton/call/logic-impl.js        812)          */
lib/plankton/call/logic-impl.js        813)         static _cram(subject) {
lib/plankton/call/logic-impl.js        814)             return (new class_deferral(subject));
lib/plankton/call/logic-impl.js        815)         }
lib/plankton/call/logic-impl.js        816)         /**
lib/plankton/call/logic-impl.js        817)          * @author fenris
lib/plankton/call/logic-impl.js        818)          */
lib/plankton/call/logic-impl.js        819)         static _tear(instance) {
lib/plankton/call/logic-impl.js        820)             return instance.subject;
lib/plankton/call/logic-impl.js        821)         }
lib/plankton/call/logic-impl.js        822)         /**
lib/plankton/call/logic-impl.js        823)          * @author fenris
lib/plankton/call/logic-impl.js        824)          */
lib/plankton/call/logic-impl.js        825)         static make(handler) {
lib/plankton/call/logic-impl.js        826)             return (class_deferral._cram(lib_call.deferral_make(handler)));
lib/plankton/call/logic-impl.js        827)         }
lib/plankton/call/logic-impl.js        828)         /**
lib/plankton/call/logic-impl.js        829)          * @author fenris
lib/plankton/call/logic-impl.js        830)          */
lib/plankton/call/logic-impl.js        831)         use(input, procedure) {
lib/plankton/call/logic-impl.js        832)             return (lib_call.deferral_use(class_deferral._tear(this), input, procedure));
lib/plankton/call/logic-impl.js        833)         }
lib/plankton/call/logic-impl.js        834)         /**
lib/plankton/call/logic-impl.js        835)          * @author fenris
lib/plankton/call/logic-impl.js        836)          */
lib/plankton/call/logic-impl.js        837)         compose_serial(second) {
lib/plankton/call/logic-impl.js        838)             return (class_deferral._cram(lib_call.deferral_compose_serial(class_deferral._tear(this), class_deferral._tear(second))));
lib/plankton/call/logic-impl.js        839)         }
lib/plankton/call/logic-impl.js        840)         /**
lib/plankton/call/logic-impl.js        841)          * @author fenris
lib/plankton/call/logic-impl.js        842)          */
lib/plankton/call/logic-impl.js        843)         static chain(members) {
lib/plankton/call/logic-impl.js        844)             return (class_deferral._cram(lib_call.deferral_chain(members.map(member => class_deferral._tear(member)))));
lib/plankton/call/logic-impl.js        845)         }
lib/plankton/call/logic-impl.js        846)         /**
lib/plankton/call/logic-impl.js        847)          * @author fenris
lib/plankton/call/logic-impl.js        848)          */
lib/plankton/call/logic-impl.js        849)         static wrap(function_) {
lib/plankton/call/logic-impl.js        850)             return (class_deferral._cram(lib_call.deferral_wrap(function_)));
lib/plankton/call/logic-impl.js        851)         }
lib/plankton/call/logic-impl.js        852)         /**
lib/plankton/call/logic-impl.js        853)          * @author fenris
lib/plankton/call/logic-impl.js        854)          */
lib/plankton/call/logic-impl.js        855)         static const_(value) {
lib/plankton/call/logic-impl.js        856)             return (class_deferral._cram(lib_call.deferral_const(value)));
lib/plankton/call/logic-impl.js        857)         }
lib/plankton/call/logic-impl.js        858)         /**
lib/plankton/call/logic-impl.js        859)          * @author fenris
lib/plankton/call/logic-impl.js        860)          */
lib/plankton/call/logic-impl.js        861)         static delay(output, delay) {
lib/plankton/call/logic-impl.js        862)             return (class_deferral._cram(lib_call.deferral_delay(output, delay)));
lib/plankton/call/logic-impl.js        863)         }
lib/plankton/call/logic-impl.js        864)     }
lib/plankton/call/logic-impl.js        865)     lib_call.class_deferral = class_deferral;
lib/plankton/call/logic-impl.js        866) })(lib_call || (lib_call = {}));
lib/plankton/call/logic-impl.js        867) /*
lib/plankton/call/logic-impl.js        868) This file is part of »bacterio-plankton:call«.
lib/plankton/call/logic-impl.js        869) 
Christian Fraß [upd] server:lib:plankton

Christian Fraß authored 3 years ago

server/lib/plankton/call/logic-impl.js 870) Copyright 2016-2021 'Christian Fraß, Christian Neubauer, Martin Springwald GbR'