[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)
|
[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'
|
[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)
|
[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'
|
[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)
|
[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'
|
[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)
|
[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'
|
[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)
|
[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'
|
[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)
|
[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'
|
[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)
|
[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'
|