99941cf4ed79aa21d266f965267d3865d8e5fdb9
Christian Fraß [add] lib:plankton

Christian Fraß authored 3 years ago

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

Christian Fraß authored 3 years ago

server/lib/plankton/trait/logic-impl.js   4) Copyright 2016-2021 greenscale <info@greenscale.de>
Christian Fraß [add] lib:plankton

Christian Fraß authored 3 years ago

lib/plankton/trait/logic-impl.js          5) 
lib/plankton/trait/logic-impl.js          6) »bacterio-plankton:trait« is free software: you can redistribute it and/or modify
lib/plankton/trait/logic-impl.js          7) it under the terms of the GNU Lesser General Public License as published by
lib/plankton/trait/logic-impl.js          8) the Free Software Foundation, either version 3 of the License, or
lib/plankton/trait/logic-impl.js          9) (at your option) any later version.
lib/plankton/trait/logic-impl.js         10) 
lib/plankton/trait/logic-impl.js         11) »bacterio-plankton:trait« is distributed in the hope that it will be callful,
lib/plankton/trait/logic-impl.js         12) but WITHOUT ANY WARRANTY; without even the implied warranty of
lib/plankton/trait/logic-impl.js         13) MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
lib/plankton/trait/logic-impl.js         14) GNU Lesser General Public License for more details.
lib/plankton/trait/logic-impl.js         15) 
lib/plankton/trait/logic-impl.js         16) You should have received a copy of the GNU Lesser General Public License
lib/plankton/trait/logic-impl.js         17) along with »bacterio-plankton:trait«. If not, see <http://www.gnu.org/licenses/>.
lib/plankton/trait/logic-impl.js         18)  */
lib/plankton/trait/logic-impl.js         19) var lib_trait;
lib/plankton/trait/logic-impl.js         20) (function (lib_trait) {
lib/plankton/trait/logic-impl.js         21)     /**
lib/plankton/trait/logic-impl.js         22)      * @author fenris
lib/plankton/trait/logic-impl.js         23)      */
lib/plankton/trait/logic-impl.js         24)     function domain_make(_a, _make) {
lib/plankton/trait/logic-impl.js         25)         var _b = _a["soft"], soft = _b === void 0 ? false : _b, kind = _a["kind"];
lib/plankton/trait/logic-impl.js         26)         return {
lib/plankton/trait/logic-impl.js         27)             "soft": soft,
lib/plankton/trait/logic-impl.js         28)             "kind": kind
lib/plankton/trait/logic-impl.js         29)         };
lib/plankton/trait/logic-impl.js         30)     }
lib/plankton/trait/logic-impl.js         31)     /**
lib/plankton/trait/logic-impl.js         32)      * @author fenris
lib/plankton/trait/logic-impl.js         33)      */
lib/plankton/trait/logic-impl.js         34)     function domain_inspect(parameters, value, _inspect) {
lib/plankton/trait/logic-impl.js         35)         var inspection = lib_shape.inspection_create();
lib/plankton/trait/logic-impl.js         36)         if (value == undefined) {
lib/plankton/trait/logic-impl.js         37)             if (parameters.soft) {
lib/plankton/trait/logic-impl.js         38)                 // all good
lib/plankton/trait/logic-impl.js         39)             }
lib/plankton/trait/logic-impl.js         40)             else {
lib/plankton/trait/logic-impl.js         41)                 lib_shape.inspection_add(inspection, "null is not allowed");
lib/plankton/trait/logic-impl.js         42)             }
lib/plankton/trait/logic-impl.js         43)         }
lib/plankton/trait/logic-impl.js         44)         else {
lib/plankton/trait/logic-impl.js         45)             var jstype_actual = typeof (value);
lib/plankton/trait/logic-impl.js         46)             var jstype_expected = "object";
lib/plankton/trait/logic-impl.js         47)             if (jstype_actual === jstype_expected) {
lib/plankton/trait/logic-impl.js         48)                 if ("domain" in value) {
lib/plankton/trait/logic-impl.js         49)                     var domain_actual = value["domain"]["kind"];
lib/plankton/trait/logic-impl.js         50)                     var domain_expected = parameters.kind;
lib/plankton/trait/logic-impl.js         51)                     if (domain_actual == domain_expected) {
lib/plankton/trait/logic-impl.js         52)                         // all good?
lib/plankton/trait/logic-impl.js         53)                     }
lib/plankton/trait/logic-impl.js         54)                     else {
lib/plankton/trait/logic-impl.js         55)                         lib_shape.inspection_add(inspection, "expected domain-kind '" + domain_expected + "' but got '" + domain_actual + "'");
lib/plankton/trait/logic-impl.js         56)                     }
lib/plankton/trait/logic-impl.js         57)                 }
lib/plankton/trait/logic-impl.js         58)                 else {
lib/plankton/trait/logic-impl.js         59)                     lib_shape.inspection_add(inspection, "field 'domain' missing");
lib/plankton/trait/logic-impl.js         60)                 }
lib/plankton/trait/logic-impl.js         61)             }
lib/plankton/trait/logic-impl.js         62)             else {
lib/plankton/trait/logic-impl.js         63)                 lib_shape.inspection_add(inspection, "expected JS-type '" + jstype_expected + "' but got '" + jstype_actual + "'");
lib/plankton/trait/logic-impl.js         64)             }
lib/plankton/trait/logic-impl.js         65)         }
lib/plankton/trait/logic-impl.js         66)         return inspection;
lib/plankton/trait/logic-impl.js         67)     }
lib/plankton/trait/logic-impl.js         68)     /**
lib/plankton/trait/logic-impl.js         69)      * @author fenris
lib/plankton/trait/logic-impl.js         70)      */
lib/plankton/trait/logic-impl.js         71)     function domain_stance(parameters, bindings, _stance) {
lib/plankton/trait/logic-impl.js         72)         return {
lib/plankton/trait/logic-impl.js         73)             "name": "domain",
lib/plankton/trait/logic-impl.js         74)             "parameters": {
lib/plankton/trait/logic-impl.js         75)                 "soft": parameters.soft,
lib/plankton/trait/logic-impl.js         76)                 "kind": parameters.kind
lib/plankton/trait/logic-impl.js         77)             }
lib/plankton/trait/logic-impl.js         78)         };
lib/plankton/trait/logic-impl.js         79)     }
lib/plankton/trait/logic-impl.js         80)     /**
lib/plankton/trait/logic-impl.js         81)      * @author fenris
lib/plankton/trait/logic-impl.js         82)      */
lib/plankton/trait/logic-impl.js         83)     function domain_show(parameters, _show) {
lib/plankton/trait/logic-impl.js         84)         var str;
lib/plankton/trait/logic-impl.js         85)         // core
lib/plankton/trait/logic-impl.js         86)         {
lib/plankton/trait/logic-impl.js         87)             str = ("#" + parameters.kind);
lib/plankton/trait/logic-impl.js         88)         }
lib/plankton/trait/logic-impl.js         89)         /*
lib/plankton/trait/logic-impl.js         90)         // parameters
lib/plankton/trait/logic-impl.js         91)         {
lib/plankton/trait/logic-impl.js         92)             str += (":" + JSON.stringify(parameters.parameters))
lib/plankton/trait/logic-impl.js         93)         }
lib/plankton/trait/logic-impl.js         94)          */
lib/plankton/trait/logic-impl.js         95)         // soft
lib/plankton/trait/logic-impl.js         96)         {
lib/plankton/trait/logic-impl.js         97)             if (parameters.soft) {
lib/plankton/trait/logic-impl.js         98)                 str = "~" + str;
lib/plankton/trait/logic-impl.js         99)             }
lib/plankton/trait/logic-impl.js        100)         }
lib/plankton/trait/logic-impl.js        101)         return str;
lib/plankton/trait/logic-impl.js        102)     }
lib/plankton/trait/logic-impl.js        103)     /**
lib/plankton/trait/logic-impl.js        104)      * @author fenris
lib/plankton/trait/logic-impl.js        105)      */
lib/plankton/trait/logic-impl.js        106)     lib_shape.register({
lib/plankton/trait/logic-impl.js        107)         "name": "domain",
lib/plankton/trait/logic-impl.js        108)         "make": domain_make,
lib/plankton/trait/logic-impl.js        109)         "inspect": domain_inspect,
lib/plankton/trait/logic-impl.js        110)         "stance": domain_stance,
lib/plankton/trait/logic-impl.js        111)         "show": domain_show
lib/plankton/trait/logic-impl.js        112)     });
lib/plankton/trait/logic-impl.js        113) })(lib_trait || (lib_trait = {}));
lib/plankton/trait/logic-impl.js        114) /*
lib/plankton/trait/logic-impl.js        115) This file is part of »bacterio-plankton:trait«.
lib/plankton/trait/logic-impl.js        116) 
Christian Fraß [upd] server:lib:plankton

Christian Fraß authored 3 years ago

server/lib/plankton/trait/logic-impl.js 117) Copyright 2016-2021 greenscale <info@greenscale.de>
Christian Fraß [add] lib:plankton

Christian Fraß authored 3 years ago

lib/plankton/trait/logic-impl.js        118) 
lib/plankton/trait/logic-impl.js        119) »bacterio-plankton:trait« is free software: you can redistribute it and/or modify
lib/plankton/trait/logic-impl.js        120) it under the terms of the GNU Lesser General Public License as published by
lib/plankton/trait/logic-impl.js        121) the Free Software Foundation, either version 3 of the License, or
lib/plankton/trait/logic-impl.js        122) (at your option) any later version.
lib/plankton/trait/logic-impl.js        123) 
lib/plankton/trait/logic-impl.js        124) »bacterio-plankton:trait« is distributed in the hope that it will be callful,
lib/plankton/trait/logic-impl.js        125) but WITHOUT ANY WARRANTY; without even the implied warranty of
lib/plankton/trait/logic-impl.js        126) MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
lib/plankton/trait/logic-impl.js        127) GNU Lesser General Public License for more details.
lib/plankton/trait/logic-impl.js        128) 
lib/plankton/trait/logic-impl.js        129) You should have received a copy of the GNU Lesser General Public License
lib/plankton/trait/logic-impl.js        130) along with »bacterio-plankton:trait«. If not, see <http://www.gnu.org/licenses/>.
lib/plankton/trait/logic-impl.js        131)  */
lib/plankton/trait/logic-impl.js        132) /**
lib/plankton/trait/logic-impl.js        133)  * @author fenris
lib/plankton/trait/logic-impl.js        134)  */
lib/plankton/trait/logic-impl.js        135) var lib_trait;
lib/plankton/trait/logic-impl.js        136) (function (lib_trait) {
lib/plankton/trait/logic-impl.js        137)     /**
lib/plankton/trait/logic-impl.js        138)      * @author fenris
lib/plankton/trait/logic-impl.js        139)      */
lib/plankton/trait/logic-impl.js        140)     lib_trait._verbosity = 1;
lib/plankton/trait/logic-impl.js        141)     /**
lib/plankton/trait/logic-impl.js        142)      * @author fenris
lib/plankton/trait/logic-impl.js        143)      */
lib/plankton/trait/logic-impl.js        144)     lib_trait._logprefix = "[lib_trait] ";
lib/plankton/trait/logic-impl.js        145)     /**
lib/plankton/trait/logic-impl.js        146)      * @desc holds all defined traits
lib/plankton/trait/logic-impl.js        147)      * @author fenris
lib/plankton/trait/logic-impl.js        148)      */
lib/plankton/trait/logic-impl.js        149)     var _pool = {};
lib/plankton/trait/logic-impl.js        150)     /**
lib/plankton/trait/logic-impl.js        151)      * @author fenris
lib/plankton/trait/logic-impl.js        152)      */
lib/plankton/trait/logic-impl.js        153)     var _typechecker = function (value, shape, logger) {
lib/plankton/trait/logic-impl.js        154)         var messages = lib_shape.inspect(shape, value).messages;
lib/plankton/trait/logic-impl.js        155)         messages.forEach(logger);
lib/plankton/trait/logic-impl.js        156)         return (messages.length === 0);
lib/plankton/trait/logic-impl.js        157)     };
lib/plankton/trait/logic-impl.js        158)     /**
lib/plankton/trait/logic-impl.js        159)      * @author fenris
lib/plankton/trait/logic-impl.js        160)      */
lib/plankton/trait/logic-impl.js        161)     function log(_a) {
lib/plankton/trait/logic-impl.js        162)         var message = _a["message"], _b = _a["kind"], kind = _b === void 0 ? "log" : _b, _c = _a["level"], level = _c === void 0 ? 0 : _c;
lib/plankton/trait/logic-impl.js        163)         if (level <= lib_trait._verbosity) {
lib/plankton/trait/logic-impl.js        164)             var message_ = "" + lib_trait._logprefix + message;
lib/plankton/trait/logic-impl.js        165)             switch (kind) {
lib/plankton/trait/logic-impl.js        166)                 default:
lib/plankton/trait/logic-impl.js        167)                 case "log": {
lib/plankton/trait/logic-impl.js        168)                     console.log(message_);
lib/plankton/trait/logic-impl.js        169)                     break;
lib/plankton/trait/logic-impl.js        170)                 }
lib/plankton/trait/logic-impl.js        171)                 case "information":
lib/plankton/trait/logic-impl.js        172)                 case "info": {
lib/plankton/trait/logic-impl.js        173)                     console.info(message_);
lib/plankton/trait/logic-impl.js        174)                     break;
lib/plankton/trait/logic-impl.js        175)                 }
lib/plankton/trait/logic-impl.js        176)                 case "warning":
lib/plankton/trait/logic-impl.js        177)                 case "warn": {
lib/plankton/trait/logic-impl.js        178)                     console.warn(message_);
lib/plankton/trait/logic-impl.js        179)                     break;
lib/plankton/trait/logic-impl.js        180)                 }
lib/plankton/trait/logic-impl.js        181)                 case "error":
lib/plankton/trait/logic-impl.js        182)                 case "err": {
lib/plankton/trait/logic-impl.js        183)                     console.error(message_);
lib/plankton/trait/logic-impl.js        184)                     break;
lib/plankton/trait/logic-impl.js        185)                 }
lib/plankton/trait/logic-impl.js        186)             }
lib/plankton/trait/logic-impl.js        187)         }
lib/plankton/trait/logic-impl.js        188)     }
lib/plankton/trait/logic-impl.js        189)     /**
lib/plankton/trait/logic-impl.js        190)      * @author fenris
lib/plankton/trait/logic-impl.js        191)      */
lib/plankton/trait/logic-impl.js        192)     function set_typechecker(typechecker) {
lib/plankton/trait/logic-impl.js        193)         _typechecker = typechecker;
lib/plankton/trait/logic-impl.js        194)     }
lib/plankton/trait/logic-impl.js        195)     lib_trait.set_typechecker = set_typechecker;
lib/plankton/trait/logic-impl.js        196)     /**
lib/plankton/trait/logic-impl.js        197)      * @author fenris
lib/plankton/trait/logic-impl.js        198)      */
lib/plankton/trait/logic-impl.js        199)     function domain_instance(domain, value) {
lib/plankton/trait/logic-impl.js        200)         return { "domain": domain, "value": value };
lib/plankton/trait/logic-impl.js        201)     }
lib/plankton/trait/logic-impl.js        202)     lib_trait.domain_instance = domain_instance;
lib/plankton/trait/logic-impl.js        203)     /**
lib/plankton/trait/logic-impl.js        204)      * @desc adds a trait
lib/plankton/trait/logic-impl.js        205)      * @author fenris
lib/plankton/trait/logic-impl.js        206)      */
lib/plankton/trait/logic-impl.js        207)     function define(trait_id, variable_conditions, facets_raw) {
lib/plankton/trait/logic-impl.js        208)         if (trait_id in _pool) {
lib/plankton/trait/logic-impl.js        209)             var message = "trait '" + trait_id + "' already registered";
lib/plankton/trait/logic-impl.js        210)             throw (new Error(message));
lib/plankton/trait/logic-impl.js        211)         }
lib/plankton/trait/logic-impl.js        212)         else {
lib/plankton/trait/logic-impl.js        213)             var trait_1 = {
lib/plankton/trait/logic-impl.js        214)                 "variables": {},
lib/plankton/trait/logic-impl.js        215)                 "facets": {},
lib/plankton/trait/logic-impl.js        216)                 "attendants": {}
lib/plankton/trait/logic-impl.js        217)             };
lib/plankton/trait/logic-impl.js        218)             Object.keys(variable_conditions).forEach(function (variable_name) {
lib/plankton/trait/logic-impl.js        219)                 var variable = {
lib/plankton/trait/logic-impl.js        220)                     "conditions": variable_conditions[variable_name],
lib/plankton/trait/logic-impl.js        221)                     "bindings": {}
lib/plankton/trait/logic-impl.js        222)                 };
lib/plankton/trait/logic-impl.js        223)                 trait_1.variables[variable_name] = variable;
lib/plankton/trait/logic-impl.js        224)             });
lib/plankton/trait/logic-impl.js        225)             Object.keys(facets_raw).forEach(function (facet_name) {
lib/plankton/trait/logic-impl.js        226)                 var facet_raw = facets_raw[facet_name];
lib/plankton/trait/logic-impl.js        227)                 var facet = {
lib/plankton/trait/logic-impl.js        228)                     "shape": lib_shape.make(facet_raw.shape || { "name": "any" }),
lib/plankton/trait/logic-impl.js        229)                     "description": facet_raw.description,
lib/plankton/trait/logic-impl.js        230)                     "implementation": facet_raw.implementation,
lib/plankton/trait/logic-impl.js        231)                     "handlers": {}
lib/plankton/trait/logic-impl.js        232)                 };
lib/plankton/trait/logic-impl.js        233)                 trait_1.facets[facet_name] = facet;
lib/plankton/trait/logic-impl.js        234)             });
lib/plankton/trait/logic-impl.js        235)             _pool[trait_id] = trait_1;
lib/plankton/trait/logic-impl.js        236)         }
lib/plankton/trait/logic-impl.js        237)     }
lib/plankton/trait/logic-impl.js        238)     lib_trait.define = define;
lib/plankton/trait/logic-impl.js        239)     /**
lib/plankton/trait/logic-impl.js        240)      * @desc adhoc binding
lib/plankton/trait/logic-impl.js        241)      * @author fenris
lib/plankton/trait/logic-impl.js        242)      */
lib/plankton/trait/logic-impl.js        243)     function attend(trait_id, domain_kind, bindings, handlers, condition) {
lib/plankton/trait/logic-impl.js        244)         if (condition === void 0) { condition = null; }
lib/plankton/trait/logic-impl.js        245)         var strict_binding = true;
lib/plankton/trait/logic-impl.js        246)         var strict_handling = true;
lib/plankton/trait/logic-impl.js        247)         if (!_pool.hasOwnProperty(trait_id)) {
lib/plankton/trait/logic-impl.js        248)             var message = "no trait '" + trait_id + "'";
lib/plankton/trait/logic-impl.js        249)             throw (new Error(message));
lib/plankton/trait/logic-impl.js        250)         }
lib/plankton/trait/logic-impl.js        251)         else {
lib/plankton/trait/logic-impl.js        252)             var trait_2 = _pool[trait_id];
lib/plankton/trait/logic-impl.js        253)             // assignments
lib/plankton/trait/logic-impl.js        254)             {
lib/plankton/trait/logic-impl.js        255)                 // variables
lib/plankton/trait/logic-impl.js        256)                 {
lib/plankton/trait/logic-impl.js        257)                     Object.keys(bindings).forEach(function (variable_name) {
lib/plankton/trait/logic-impl.js        258)                         if (!trait_2.variables.hasOwnProperty(variable_name)) {
lib/plankton/trait/logic-impl.js        259)                             var message = "";
lib/plankton/trait/logic-impl.js        260)                             message += "no variable '" + variable_name + "'";
lib/plankton/trait/logic-impl.js        261)                             message += " to bind in trait '" + trait_id + "'";
lib/plankton/trait/logic-impl.js        262)                             log({ "message": message, "kind": "warning" });
lib/plankton/trait/logic-impl.js        263)                             // throw (new Error(message));
lib/plankton/trait/logic-impl.js        264)                         }
lib/plankton/trait/logic-impl.js        265)                         else {
lib/plankton/trait/logic-impl.js        266)                             var variable = trait_2.variables[variable_name];
lib/plankton/trait/logic-impl.js        267)                             if (variable.bindings.hasOwnProperty(domain_kind)) {
lib/plankton/trait/logic-impl.js        268)                                 var message = "";
lib/plankton/trait/logic-impl.js        269)                                 message += "variable '" + variable_name + "'";
lib/plankton/trait/logic-impl.js        270)                                 message += " already bound for domain '" + domain_kind + "'";
lib/plankton/trait/logic-impl.js        271)                                 message += " in trait '" + trait_id + "'";
lib/plankton/trait/logic-impl.js        272)                                 throw (new Error(message));
lib/plankton/trait/logic-impl.js        273)                             }
lib/plankton/trait/logic-impl.js        274)                             else {
lib/plankton/trait/logic-impl.js        275)                                 variable.bindings[domain_kind] = lib_shape.make(bindings[variable_name]);
lib/plankton/trait/logic-impl.js        276)                             }
lib/plankton/trait/logic-impl.js        277)                         }
lib/plankton/trait/logic-impl.js        278)                     });
lib/plankton/trait/logic-impl.js        279)                 }
lib/plankton/trait/logic-impl.js        280)                 // facets
lib/plankton/trait/logic-impl.js        281)                 {
lib/plankton/trait/logic-impl.js        282)                     Object.keys(handlers).forEach(function (facet_name) {
lib/plankton/trait/logic-impl.js        283)                         if (!trait_2.facets.hasOwnProperty(facet_name)) {
lib/plankton/trait/logic-impl.js        284)                             var message = "";
lib/plankton/trait/logic-impl.js        285)                             message += "no facet '" + facet_name + "'";
lib/plankton/trait/logic-impl.js        286)                             message += " to implement at trait '" + trait_id + "'";
lib/plankton/trait/logic-impl.js        287)                             log({ "kind": "warning", "message": message });
lib/plankton/trait/logic-impl.js        288)                             // throw (new Error(message));
lib/plankton/trait/logic-impl.js        289)                         }
lib/plankton/trait/logic-impl.js        290)                         else {
lib/plankton/trait/logic-impl.js        291)                             var facet = trait_2.facets[facet_name];
lib/plankton/trait/logic-impl.js        292)                             var intrinsic = (facet.implementation != undefined);
lib/plankton/trait/logic-impl.js        293)                             if (intrinsic) {
lib/plankton/trait/logic-impl.js        294)                                 var message = "shadowing intrinsic facet '" + facet_name + "'";
lib/plankton/trait/logic-impl.js        295)                                 console.warn(message);
lib/plankton/trait/logic-impl.js        296)                             }
lib/plankton/trait/logic-impl.js        297)                             else {
lib/plankton/trait/logic-impl.js        298)                                 // do nothing
lib/plankton/trait/logic-impl.js        299)                             }
lib/plankton/trait/logic-impl.js        300)                             if (facet.handlers.hasOwnProperty(domain_kind)) {
lib/plankton/trait/logic-impl.js        301)                                 var message = "";
lib/plankton/trait/logic-impl.js        302)                                 message += "facet '" + facet_name + "'";
lib/plankton/trait/logic-impl.js        303)                                 message += " already implemented in domain '" + domain_kind + "'";
lib/plankton/trait/logic-impl.js        304)                                 message += " at trait '" + trait_id + "'";
lib/plankton/trait/logic-impl.js        305)                                 throw (new Error(message));
lib/plankton/trait/logic-impl.js        306)                             }
lib/plankton/trait/logic-impl.js        307)                             else {
lib/plankton/trait/logic-impl.js        308)                                 facet.handlers[domain_kind] = handlers[facet_name];
lib/plankton/trait/logic-impl.js        309)                             }
lib/plankton/trait/logic-impl.js        310)                         }
lib/plankton/trait/logic-impl.js        311)                     });
lib/plankton/trait/logic-impl.js        312)                 }
lib/plankton/trait/logic-impl.js        313)                 // attendants
lib/plankton/trait/logic-impl.js        314)                 {
lib/plankton/trait/logic-impl.js        315)                     trait_2.attendants[domain_kind] = {
lib/plankton/trait/logic-impl.js        316)                         "condition": condition
lib/plankton/trait/logic-impl.js        317)                     };
lib/plankton/trait/logic-impl.js        318)                 }
lib/plankton/trait/logic-impl.js        319)             }
lib/plankton/trait/logic-impl.js        320)             // checks
lib/plankton/trait/logic-impl.js        321)             {
lib/plankton/trait/logic-impl.js        322)                 var messages_1 = [];
lib/plankton/trait/logic-impl.js        323)                 // variables
lib/plankton/trait/logic-impl.js        324)                 {
lib/plankton/trait/logic-impl.js        325)                     if (strict_binding) {
lib/plankton/trait/logic-impl.js        326)                         var variable_names_given_1 = Object.keys(bindings);
lib/plankton/trait/logic-impl.js        327)                         var variable_names_present = Object.keys(trait_2.variables);
lib/plankton/trait/logic-impl.js        328)                         var variable_names_missing = variable_names_present.filter(function (variable_name) { return (!variable_names_given_1.some(function (variable_name_) { return (variable_name == variable_name_); })); });
lib/plankton/trait/logic-impl.js        329)                         variable_names_missing.forEach(function (variable_name) {
lib/plankton/trait/logic-impl.js        330)                             var message = "binding missing for variable '" + variable_name + "'";
lib/plankton/trait/logic-impl.js        331)                             messages_1.push(message);
lib/plankton/trait/logic-impl.js        332)                         });
lib/plankton/trait/logic-impl.js        333)                     }
lib/plankton/trait/logic-impl.js        334)                     else {
lib/plankton/trait/logic-impl.js        335)                         // do nothing
lib/plankton/trait/logic-impl.js        336)                     }
lib/plankton/trait/logic-impl.js        337)                 }
lib/plankton/trait/logic-impl.js        338)                 // facets
lib/plankton/trait/logic-impl.js        339)                 {
lib/plankton/trait/logic-impl.js        340)                     if (strict_handling) {
lib/plankton/trait/logic-impl.js        341)                         var facet_names_given_1 = Object.keys(handlers);
lib/plankton/trait/logic-impl.js        342)                         var facet_names_needed = (Object.keys(trait_2.facets).filter(function (facet_name) { return (trait_2.facets[facet_name].implementation == undefined); }));
lib/plankton/trait/logic-impl.js        343)                         var facet_names_missing = (facet_names_needed.filter(function (facet_name) { return (!facet_names_given_1.some(function (facet_name_) { return (facet_name === facet_name_); })); }));
lib/plankton/trait/logic-impl.js        344)                         facet_names_missing.forEach(function (facet_name) {
lib/plankton/trait/logic-impl.js        345)                             var message = "implementation missing for the facet '" + facet_name + "'";
lib/plankton/trait/logic-impl.js        346)                             messages_1.push(message);
lib/plankton/trait/logic-impl.js        347)                         });
lib/plankton/trait/logic-impl.js        348)                     }
lib/plankton/trait/logic-impl.js        349)                     else {
lib/plankton/trait/logic-impl.js        350)                         // do nothing
lib/plankton/trait/logic-impl.js        351)                     }
lib/plankton/trait/logic-impl.js        352)                 }
lib/plankton/trait/logic-impl.js        353)                 if (messages_1.length > 0) {
lib/plankton/trait/logic-impl.js        354)                     var message = "";
lib/plankton/trait/logic-impl.js        355)                     message += "assignment of domain '" + domain_kind + "'";
lib/plankton/trait/logic-impl.js        356)                     message += " to trait '" + trait_id + "'";
lib/plankton/trait/logic-impl.js        357)                     message += " incomplete: " + messages_1.join(", ");
lib/plankton/trait/logic-impl.js        358)                     throw (new Error(message));
lib/plankton/trait/logic-impl.js        359)                 }
lib/plankton/trait/logic-impl.js        360)             }
lib/plankton/trait/logic-impl.js        361)         }
lib/plankton/trait/logic-impl.js        362)     }
lib/plankton/trait/logic-impl.js        363)     lib_trait.attend = attend;
lib/plankton/trait/logic-impl.js        364)     /**
lib/plankton/trait/logic-impl.js        365)      * @desc calls a facet from a trait according to a given domain
lib/plankton/trait/logic-impl.js        366)      * @author fenris
lib/plankton/trait/logic-impl.js        367)      */
lib/plankton/trait/logic-impl.js        368)     function call(trait_id, facet_name, domain, check) {
lib/plankton/trait/logic-impl.js        369)         if (check === void 0) { check = true; }
lib/plankton/trait/logic-impl.js        370)         if (!_pool.hasOwnProperty(trait_id)) {
lib/plankton/trait/logic-impl.js        371)             var message = "no trait '" + trait_id + "'";
lib/plankton/trait/logic-impl.js        372)             throw (new Error(message));
lib/plankton/trait/logic-impl.js        373)         }
lib/plankton/trait/logic-impl.js        374)         else {
lib/plankton/trait/logic-impl.js        375)             var trait_3 = _pool[trait_id];
lib/plankton/trait/logic-impl.js        376)             if (!trait_3.facets.hasOwnProperty(facet_name)) {
lib/plankton/trait/logic-impl.js        377)                 var message = "no facet '" + facet_name + "' in trait '" + trait_id + "'";
lib/plankton/trait/logic-impl.js        378)                 throw (new Error(message));
lib/plankton/trait/logic-impl.js        379)             }
lib/plankton/trait/logic-impl.js        380)             else {
lib/plankton/trait/logic-impl.js        381)                 var facet = trait_3.facets[facet_name];
lib/plankton/trait/logic-impl.js        382)                 var intrinsic = (facet.implementation !== undefined);
lib/plankton/trait/logic-impl.js        383)                 var result = void 0;
lib/plankton/trait/logic-impl.js        384)                 if (intrinsic) {
lib/plankton/trait/logic-impl.js        385)                     result = facet.implementation(function (facet_name_) { return call(trait_id, facet_name_, domain, check); });
lib/plankton/trait/logic-impl.js        386)                 }
lib/plankton/trait/logic-impl.js        387)                 else {
lib/plankton/trait/logic-impl.js        388)                     if (!facet.handlers.hasOwnProperty(domain.kind)) {
lib/plankton/trait/logic-impl.js        389)                         var message = "";
lib/plankton/trait/logic-impl.js        390)                         message += "implementation missing";
lib/plankton/trait/logic-impl.js        391)                         message += " at trait '" + trait_id + "'";
lib/plankton/trait/logic-impl.js        392)                         message += " for facet '" + facet_name + "'";
lib/plankton/trait/logic-impl.js        393)                         message += " in domain '" + domain.kind + "'";
lib/plankton/trait/logic-impl.js        394)                         throw (new Error(message));
lib/plankton/trait/logic-impl.js        395)                     }
lib/plankton/trait/logic-impl.js        396)                     else {
lib/plankton/trait/logic-impl.js        397)                         var show_shape = (function (shape) { return lib_shape.show(shape); });
lib/plankton/trait/logic-impl.js        398)                         var handler = facet.handlers[domain.kind];
lib/plankton/trait/logic-impl.js        399)                         var bindings_1 = {};
lib/plankton/trait/logic-impl.js        400)                         Object.keys(trait_3.variables).forEach(function (variable_name) {
lib/plankton/trait/logic-impl.js        401)                             bindings_1[variable_name] = trait_3.variables[variable_name].bindings[domain.kind];
lib/plankton/trait/logic-impl.js        402)                         });
lib/plankton/trait/logic-impl.js        403)                         result = handler(domain.parameters);
lib/plankton/trait/logic-impl.js        404)                         if (check
lib/plankton/trait/logic-impl.js        405)                             &&
lib/plankton/trait/logic-impl.js        406)                                 (_typechecker !== null)
lib/plankton/trait/logic-impl.js        407)                             &&
lib/plankton/trait/logic-impl.js        408)                                 (facet.shape !== undefined)) {
lib/plankton/trait/logic-impl.js        409)                             var shape = lib_shape.stance(facet.shape, bindings_1);
lib/plankton/trait/logic-impl.js        410)                             // console.info("expected shape of result: " + lib_shape.show(shape)); console.info("result: ", result);
lib/plankton/trait/logic-impl.js        411)                             var valid = _typechecker(result, shape, function (message) { return log({ "kind": "warning", "message": "[typechecker] [result] " + message }); });
lib/plankton/trait/logic-impl.js        412)                             if (!valid) {
lib/plankton/trait/logic-impl.js        413)                                 var message = "";
lib/plankton/trait/logic-impl.js        414)                                 message += "result '" + instance_show(result) + "'";
lib/plankton/trait/logic-impl.js        415)                                 message += " doesn't match the expected type '" + show_shape(shape) + "'";
lib/plankton/trait/logic-impl.js        416)                                 message += " at trait '" + trait_id + "'";
lib/plankton/trait/logic-impl.js        417)                                 message += " for facet '" + facet_name + "'";
lib/plankton/trait/logic-impl.js        418)                                 message += " in domain '" + domain.kind + "'";
lib/plankton/trait/logic-impl.js        419)                                 log({ "kind": "warning", "message": message });
lib/plankton/trait/logic-impl.js        420)                             }
lib/plankton/trait/logic-impl.js        421)                             {
lib/plankton/trait/logic-impl.js        422)                                 var condition = trait_3.attendants[domain.kind].condition;
lib/plankton/trait/logic-impl.js        423)                                 if (condition != null) {
lib/plankton/trait/logic-impl.js        424)                                     var attends = function (trait_id_, domain_) {
lib/plankton/trait/logic-impl.js        425)                                         return (_pool.hasOwnProperty(trait_id_) && _pool[trait_id_].attendants.hasOwnProperty(domain_.kind));
lib/plankton/trait/logic-impl.js        426)                                     };
lib/plankton/trait/logic-impl.js        427)                                     if (!condition(attends)(domain.parameters)) {
lib/plankton/trait/logic-impl.js        428)                                         var message = "";
lib/plankton/trait/logic-impl.js        429)                                         message += "condition not fulfilled";
lib/plankton/trait/logic-impl.js        430)                                         message += " at trait '" + trait_id + "'";
lib/plankton/trait/logic-impl.js        431)                                         message += " for facet '" + facet_name + "'";
lib/plankton/trait/logic-impl.js        432)                                         message += " in domain '" + domain.kind + "'";
lib/plankton/trait/logic-impl.js        433)                                         log({ "kind": "warning", "message": message });
lib/plankton/trait/logic-impl.js        434)                                     }
lib/plankton/trait/logic-impl.js        435)                                     else {
lib/plankton/trait/logic-impl.js        436)                                         // do nothing
lib/plankton/trait/logic-impl.js        437)                                     }
lib/plankton/trait/logic-impl.js        438)                                 }
lib/plankton/trait/logic-impl.js        439)                                 else {
lib/plankton/trait/logic-impl.js        440)                                     // do nothing
lib/plankton/trait/logic-impl.js        441)                                 }
lib/plankton/trait/logic-impl.js        442)                             }
lib/plankton/trait/logic-impl.js        443)                         }
lib/plankton/trait/logic-impl.js        444)                     }
lib/plankton/trait/logic-impl.js        445)                 }
lib/plankton/trait/logic-impl.js        446)                 return result;
lib/plankton/trait/logic-impl.js        447)             }
lib/plankton/trait/logic-impl.js        448)         }
lib/plankton/trait/logic-impl.js        449)     }
lib/plankton/trait/logic-impl.js        450)     lib_trait.call = call;
lib/plankton/trait/logic-impl.js        451)     /**
lib/plankton/trait/logic-impl.js        452)      * @author fenris
lib/plankton/trait/logic-impl.js        453)      */
lib/plankton/trait/logic-impl.js        454)     function explain(trait_id) {
lib/plankton/trait/logic-impl.js        455)         if (!_pool.hasOwnProperty(trait_id)) {
lib/plankton/trait/logic-impl.js        456)             var message = "no trait '" + trait_id + "'";
lib/plankton/trait/logic-impl.js        457)             throw (new Error(message));
lib/plankton/trait/logic-impl.js        458)         }
lib/plankton/trait/logic-impl.js        459)         else {
lib/plankton/trait/logic-impl.js        460)             var trait_4 = _pool[trait_id];
lib/plankton/trait/logic-impl.js        461)             var str_1 = "";
lib/plankton/trait/logic-impl.js        462)             // head
lib/plankton/trait/logic-impl.js        463)             {
lib/plankton/trait/logic-impl.js        464)                 str_1 += "<<" + trait_id + ">>";
lib/plankton/trait/logic-impl.js        465)                 str_1 += (" "
lib/plankton/trait/logic-impl.js        466)                     +
lib/plankton/trait/logic-impl.js        467)                         "("
lib/plankton/trait/logic-impl.js        468)                     +
lib/plankton/trait/logic-impl.js        469)                         (Object.keys(trait_4.variables)
lib/plankton/trait/logic-impl.js        470)                             .map(function (variable_name) {
lib/plankton/trait/logic-impl.js        471)                             var shape = lib_shape.make({
lib/plankton/trait/logic-impl.js        472)                                 "name": "variable",
lib/plankton/trait/logic-impl.js        473)                                 "parameters": {
lib/plankton/trait/logic-impl.js        474)                                     "name": variable_name
lib/plankton/trait/logic-impl.js        475)                                 }
lib/plankton/trait/logic-impl.js        476)                             });
lib/plankton/trait/logic-impl.js        477)                             return lib_shape.show(shape);
lib/plankton/trait/logic-impl.js        478)                         })
lib/plankton/trait/logic-impl.js        479)                             .join(","))
lib/plankton/trait/logic-impl.js        480)                     +
lib/plankton/trait/logic-impl.js        481)                         ")");
lib/plankton/trait/logic-impl.js        482)                 str_1 += "\n";
lib/plankton/trait/logic-impl.js        483)             }
lib/plankton/trait/logic-impl.js        484)             // facets
lib/plankton/trait/logic-impl.js        485)             {
lib/plankton/trait/logic-impl.js        486)                 Object.keys(trait_4.facets)
lib/plankton/trait/logic-impl.js        487)                     .forEach(function (facet_name) {
lib/plankton/trait/logic-impl.js        488)                     var facet = trait_4.facets[facet_name];
lib/plankton/trait/logic-impl.js        489)                     // str += "\t";
lib/plankton/trait/logic-impl.js        490)                     str_1 += "* ";
lib/plankton/trait/logic-impl.js        491)                     str_1 += ((facet.implementation != undefined) ? ("[" + facet_name + "]") : facet_name);
lib/plankton/trait/logic-impl.js        492)                     str_1 += (" : " + lib_shape.show(facet.shape));
lib/plankton/trait/logic-impl.js        493)                     if (facet.description !== undefined) {
lib/plankton/trait/logic-impl.js        494)                         str_1 += (" ~ " + "" + facet.description + "");
lib/plankton/trait/logic-impl.js        495)                     }
lib/plankton/trait/logic-impl.js        496)                     str_1 += "\n";
lib/plankton/trait/logic-impl.js        497)                 });
lib/plankton/trait/logic-impl.js        498)             }
lib/plankton/trait/logic-impl.js        499)             return str_1;
lib/plankton/trait/logic-impl.js        500)         }
lib/plankton/trait/logic-impl.js        501)     }
lib/plankton/trait/logic-impl.js        502)     lib_trait.explain = explain;
lib/plankton/trait/logic-impl.js        503)     /**
lib/plankton/trait/logic-impl.js        504)      * @author fenris
lib/plankton/trait/logic-impl.js        505)      */
lib/plankton/trait/logic-impl.js        506)     function explain_all() {
lib/plankton/trait/logic-impl.js        507)         return Object.keys(_pool).map(function (trait_id) { return explain(trait_id); }).join("\n");
lib/plankton/trait/logic-impl.js        508)     }
lib/plankton/trait/logic-impl.js        509)     lib_trait.explain_all = explain_all;
lib/plankton/trait/logic-impl.js        510) })(lib_trait || (lib_trait = {}));
lib/plankton/trait/logic-impl.js        511) /*
lib/plankton/trait/logic-impl.js        512) This file is part of »bacterio-plankton:trait«.
lib/plankton/trait/logic-impl.js        513) 
Christian Fraß [upd] server:lib:plankton

Christian Fraß authored 3 years ago

server/lib/plankton/trait/logic-impl.js 514) Copyright 2016-2021 greenscale <info@greenscale.de>
Christian Fraß [add] lib:plankton

Christian Fraß authored 3 years ago

lib/plankton/trait/logic-impl.js        515) 
lib/plankton/trait/logic-impl.js        516) »bacterio-plankton:trait« is free software: you can redistribute it and/or modify
lib/plankton/trait/logic-impl.js        517) it under the terms of the GNU Lesser General Public License as published by
lib/plankton/trait/logic-impl.js        518) the Free Software Foundation, either version 3 of the License, or
lib/plankton/trait/logic-impl.js        519) (at your option) any later version.
lib/plankton/trait/logic-impl.js        520) 
lib/plankton/trait/logic-impl.js        521) »bacterio-plankton:trait« is distributed in the hope that it will be callful,
lib/plankton/trait/logic-impl.js        522) but WITHOUT ANY WARRANTY; without even the implied warranty of
lib/plankton/trait/logic-impl.js        523) MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
lib/plankton/trait/logic-impl.js        524) GNU Lesser General Public License for more details.
lib/plankton/trait/logic-impl.js        525) 
lib/plankton/trait/logic-impl.js        526) You should have received a copy of the GNU Lesser General Public License
lib/plankton/trait/logic-impl.js        527) along with »bacterio-plankton:trait«. If not, see <http://www.gnu.org/licenses/>.
lib/plankton/trait/logic-impl.js        528)  */
lib/plankton/trait/logic-impl.js        529) /**
lib/plankton/trait/logic-impl.js        530)  * @author fenris
lib/plankton/trait/logic-impl.js        531)  */
lib/plankton/trait/logic-impl.js        532) var lib_trait;
lib/plankton/trait/logic-impl.js        533) (function (lib_trait) {
lib/plankton/trait/logic-impl.js        534)     /**
lib/plankton/trait/logic-impl.js        535)      * @desc the ability to check for equality with another element of the same domain
lib/plankton/trait/logic-impl.js        536)      * @author fenris
lib/plankton/trait/logic-impl.js        537)      */
lib/plankton/trait/logic-impl.js        538)     function define_collatable() {
lib/plankton/trait/logic-impl.js        539)         lib_trait.define("collatable", {
lib/plankton/trait/logic-impl.js        540)             "value": []
lib/plankton/trait/logic-impl.js        541)         }, {
lib/plankton/trait/logic-impl.js        542)             "collate": {
lib/plankton/trait/logic-impl.js        543)                 "shape": {
lib/plankton/trait/logic-impl.js        544)                     "name": "function",
lib/plankton/trait/logic-impl.js        545)                     "parameters": {
lib/plankton/trait/logic-impl.js        546)                         "shape_input": {
lib/plankton/trait/logic-impl.js        547)                             "name": "variable",
lib/plankton/trait/logic-impl.js        548)                             "parameters": {
lib/plankton/trait/logic-impl.js        549)                                 "name": "value"
lib/plankton/trait/logic-impl.js        550)                             }
lib/plankton/trait/logic-impl.js        551)                         },
lib/plankton/trait/logic-impl.js        552)                         "shape_output": {
lib/plankton/trait/logic-impl.js        553)                             "name": "function",
lib/plankton/trait/logic-impl.js        554)                             "parameters": {
lib/plankton/trait/logic-impl.js        555)                                 "shape_input": {
lib/plankton/trait/logic-impl.js        556)                                     "name": "variable",
lib/plankton/trait/logic-impl.js        557)                                     "parameters": {
lib/plankton/trait/logic-impl.js        558)                                         "name": "value"
lib/plankton/trait/logic-impl.js        559)                                     }
lib/plankton/trait/logic-impl.js        560)                                 },
lib/plankton/trait/logic-impl.js        561)                                 "shape_output": {
lib/plankton/trait/logic-impl.js        562)                                     "name": "boolean"
lib/plankton/trait/logic-impl.js        563)                                 }
lib/plankton/trait/logic-impl.js        564)                             }
lib/plankton/trait/logic-impl.js        565)                         }
lib/plankton/trait/logic-impl.js        566)                     }
lib/plankton/trait/logic-impl.js        567)                 }
lib/plankton/trait/logic-impl.js        568)             }
lib/plankton/trait/logic-impl.js        569)         });
lib/plankton/trait/logic-impl.js        570)         lib_trait.attend("collatable", "crude", {
lib/plankton/trait/logic-impl.js        571)             "value": {
lib/plankton/trait/logic-impl.js        572)                 "name": "any"
lib/plankton/trait/logic-impl.js        573)             }
lib/plankton/trait/logic-impl.js        574)         }, {
lib/plankton/trait/logic-impl.js        575)             "collate": function () { return function (instance) { return function (other) {
lib/plankton/trait/logic-impl.js        576)                 if (typeof (instance) === "object") {
lib/plankton/trait/logic-impl.js        577)                     if (instance == null) {
lib/plankton/trait/logic-impl.js        578)                         return (other == null);
lib/plankton/trait/logic-impl.js        579)                     }
lib/plankton/trait/logic-impl.js        580)                     else {
lib/plankton/trait/logic-impl.js        581)                         if ("_collate" in instance) {
lib/plankton/trait/logic-impl.js        582)                             return instance["_collate"](other);
lib/plankton/trait/logic-impl.js        583)                         }
lib/plankton/trait/logic-impl.js        584)                         else {
lib/plankton/trait/logic-impl.js        585)                             var message = ("[collate]" + " " + "object has no such method");
lib/plankton/trait/logic-impl.js        586)                             throw (new Error(message));
lib/plankton/trait/logic-impl.js        587)                         }
lib/plankton/trait/logic-impl.js        588)                     }
lib/plankton/trait/logic-impl.js        589)                 }
lib/plankton/trait/logic-impl.js        590)                 else {
lib/plankton/trait/logic-impl.js        591)                     if (lib_trait._verbosity >= 1) {
lib/plankton/trait/logic-impl.js        592)                         var message = ("[collate]" + " " + "primitive value; using default implementation");
lib/plankton/trait/logic-impl.js        593)                         console.warn(message);
lib/plankton/trait/logic-impl.js        594)                     }
lib/plankton/trait/logic-impl.js        595)                     return (instance === other);
lib/plankton/trait/logic-impl.js        596)                 }
lib/plankton/trait/logic-impl.js        597)             }; }; }
lib/plankton/trait/logic-impl.js        598)         });
lib/plankton/trait/logic-impl.js        599)     }
lib/plankton/trait/logic-impl.js        600)     lib_trait.define_collatable = define_collatable;
lib/plankton/trait/logic-impl.js        601)     /**
lib/plankton/trait/logic-impl.js        602)      * @author fenris
lib/plankton/trait/logic-impl.js        603)      */
lib/plankton/trait/logic-impl.js        604)     function _collate(instance, other, domain) {
lib/plankton/trait/logic-impl.js        605)         if (domain === void 0) { domain = { "kind": "crude" }; }
lib/plankton/trait/logic-impl.js        606)         return lib_trait.call("collatable", "collate", domain)(instance)(other);
lib/plankton/trait/logic-impl.js        607)     }
lib/plankton/trait/logic-impl.js        608)     lib_trait._collate = _collate;
lib/plankton/trait/logic-impl.js        609)     define_collatable();
lib/plankton/trait/logic-impl.js        610) })(lib_trait || (lib_trait = {}));
lib/plankton/trait/logic-impl.js        611) /*
lib/plankton/trait/logic-impl.js        612) This file is part of »bacterio-plankton:trait«.
lib/plankton/trait/logic-impl.js        613) 
Christian Fraß [upd] server:lib:plankton

Christian Fraß authored 3 years ago

server/lib/plankton/trait/logic-impl.js 614) Copyright 2016-2021 greenscale <info@greenscale.de>
Christian Fraß [add] lib:plankton

Christian Fraß authored 3 years ago

lib/plankton/trait/logic-impl.js        615) 
lib/plankton/trait/logic-impl.js        616) »bacterio-plankton:trait« is free software: you can redistribute it and/or modify
lib/plankton/trait/logic-impl.js        617) it under the terms of the GNU Lesser General Public License as published by
lib/plankton/trait/logic-impl.js        618) the Free Software Foundation, either version 3 of the License, or
lib/plankton/trait/logic-impl.js        619) (at your option) any later version.
lib/plankton/trait/logic-impl.js        620) 
lib/plankton/trait/logic-impl.js        621) »bacterio-plankton:trait« is distributed in the hope that it will be callful,
lib/plankton/trait/logic-impl.js        622) but WITHOUT ANY WARRANTY; without even the implied warranty of
lib/plankton/trait/logic-impl.js        623) MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
lib/plankton/trait/logic-impl.js        624) GNU Lesser General Public License for more details.
lib/plankton/trait/logic-impl.js        625) 
lib/plankton/trait/logic-impl.js        626) You should have received a copy of the GNU Lesser General Public License
lib/plankton/trait/logic-impl.js        627) along with »bacterio-plankton:trait«. If not, see <http://www.gnu.org/licenses/>.
lib/plankton/trait/logic-impl.js        628)  */
lib/plankton/trait/logic-impl.js        629) /**
lib/plankton/trait/logic-impl.js        630)  * @author fenris
lib/plankton/trait/logic-impl.js        631)  */
lib/plankton/trait/logic-impl.js        632) var lib_trait;
lib/plankton/trait/logic-impl.js        633) (function (lib_trait) {
lib/plankton/trait/logic-impl.js        634)     /**
lib/plankton/trait/logic-impl.js        635)      * @desc the ability to compare with another element of the same domain for determining if the first is "smaller than or equal to" the latter
lib/plankton/trait/logic-impl.js        636)      * @author fenris
lib/plankton/trait/logic-impl.js        637)      */
lib/plankton/trait/logic-impl.js        638)     function define_comparable() {
lib/plankton/trait/logic-impl.js        639)         lib_trait.define("comparable", {
lib/plankton/trait/logic-impl.js        640)             "value": []
lib/plankton/trait/logic-impl.js        641)         }, {
lib/plankton/trait/logic-impl.js        642)             "compare": {
lib/plankton/trait/logic-impl.js        643)                 "shape": {
lib/plankton/trait/logic-impl.js        644)                     "name": "function",
lib/plankton/trait/logic-impl.js        645)                     "parameters": {
lib/plankton/trait/logic-impl.js        646)                         "shape_input": {
lib/plankton/trait/logic-impl.js        647)                             "name": "variable",
lib/plankton/trait/logic-impl.js        648)                             "parameters": {
lib/plankton/trait/logic-impl.js        649)                                 "name": "value"
lib/plankton/trait/logic-impl.js        650)                             }
lib/plankton/trait/logic-impl.js        651)                         },
lib/plankton/trait/logic-impl.js        652)                         "shape_output": {
lib/plankton/trait/logic-impl.js        653)                             "name": "function",
lib/plankton/trait/logic-impl.js        654)                             "parameters": {
lib/plankton/trait/logic-impl.js        655)                                 "shape_input": {
lib/plankton/trait/logic-impl.js        656)                                     "name": "variable",
lib/plankton/trait/logic-impl.js        657)                                     "parameters": {
lib/plankton/trait/logic-impl.js        658)                                         "name": "value"
lib/plankton/trait/logic-impl.js        659)                                     }
lib/plankton/trait/logic-impl.js        660)                                 },
lib/plankton/trait/logic-impl.js        661)                                 "shape_output": {
lib/plankton/trait/logic-impl.js        662)                                     "name": "boolean"
lib/plankton/trait/logic-impl.js        663)                                 }
lib/plankton/trait/logic-impl.js        664)                             }
lib/plankton/trait/logic-impl.js        665)                         }
lib/plankton/trait/logic-impl.js        666)                     }
lib/plankton/trait/logic-impl.js        667)                 }
lib/plankton/trait/logic-impl.js        668)             }
lib/plankton/trait/logic-impl.js        669)         });
lib/plankton/trait/logic-impl.js        670)         lib_trait.attend("comparable", "crude", {
lib/plankton/trait/logic-impl.js        671)             "value": {
lib/plankton/trait/logic-impl.js        672)                 "name": "any"
lib/plankton/trait/logic-impl.js        673)             }
lib/plankton/trait/logic-impl.js        674)         }, {
lib/plankton/trait/logic-impl.js        675)             "compare": function () { return function (instance) { return function (other) {
lib/plankton/trait/logic-impl.js        676)                 if (typeof (instance) === "object") {
lib/plankton/trait/logic-impl.js        677)                     if ("_compare" in instance) {
lib/plankton/trait/logic-impl.js        678)                         return instance["_compare"](other);
lib/plankton/trait/logic-impl.js        679)                     }
lib/plankton/trait/logic-impl.js        680)                     else {
lib/plankton/trait/logic-impl.js        681)                         throw (new Error("[compare]" + " " + "object has no such method"));
lib/plankton/trait/logic-impl.js        682)                     }
lib/plankton/trait/logic-impl.js        683)                 }
lib/plankton/trait/logic-impl.js        684)                 else {
lib/plankton/trait/logic-impl.js        685)                     if (lib_trait._verbosity >= 1) {
lib/plankton/trait/logic-impl.js        686)                         console.warn("[compare]" + " " + "primitive value; using default implementation");
lib/plankton/trait/logic-impl.js        687)                     }
lib/plankton/trait/logic-impl.js        688)                     return (instance <= other);
lib/plankton/trait/logic-impl.js        689)                 }
lib/plankton/trait/logic-impl.js        690)             }; }; }
lib/plankton/trait/logic-impl.js        691)         });
lib/plankton/trait/logic-impl.js        692)     }
lib/plankton/trait/logic-impl.js        693)     lib_trait.define_comparable = define_comparable;
lib/plankton/trait/logic-impl.js        694)     /**
lib/plankton/trait/logic-impl.js        695)      * @author fenris
lib/plankton/trait/logic-impl.js        696)      */
lib/plankton/trait/logic-impl.js        697)     function _compare(instance, other, domain) {
lib/plankton/trait/logic-impl.js        698)         if (domain === void 0) { domain = { "kind": "crude" }; }
lib/plankton/trait/logic-impl.js        699)         return lib_trait.call("comparable", "compare", domain)(instance)(other);
lib/plankton/trait/logic-impl.js        700)     }
lib/plankton/trait/logic-impl.js        701)     lib_trait._compare = _compare;
lib/plankton/trait/logic-impl.js        702)     define_comparable();
lib/plankton/trait/logic-impl.js        703) })(lib_trait || (lib_trait = {}));
lib/plankton/trait/logic-impl.js        704) /*
lib/plankton/trait/logic-impl.js        705) This file is part of »bacterio-plankton:trait«.
lib/plankton/trait/logic-impl.js        706) 
Christian Fraß [upd] server:lib:plankton

Christian Fraß authored 3 years ago

server/lib/plankton/trait/logic-impl.js 707) Copyright 2016-2021 greenscale <info@greenscale.de>
Christian Fraß [add] lib:plankton

Christian Fraß authored 3 years ago

lib/plankton/trait/logic-impl.js        708) 
lib/plankton/trait/logic-impl.js        709) »bacterio-plankton:trait« is free software: you can redistribute it and/or modify
lib/plankton/trait/logic-impl.js        710) it under the terms of the GNU Lesser General Public License as published by
lib/plankton/trait/logic-impl.js        711) the Free Software Foundation, either version 3 of the License, or
lib/plankton/trait/logic-impl.js        712) (at your option) any later version.
lib/plankton/trait/logic-impl.js        713) 
lib/plankton/trait/logic-impl.js        714) »bacterio-plankton:trait« is distributed in the hope that it will be callful,
lib/plankton/trait/logic-impl.js        715) but WITHOUT ANY WARRANTY; without even the implied warranty of
lib/plankton/trait/logic-impl.js        716) MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
lib/plankton/trait/logic-impl.js        717) GNU Lesser General Public License for more details.
lib/plankton/trait/logic-impl.js        718) 
lib/plankton/trait/logic-impl.js        719) You should have received a copy of the GNU Lesser General Public License
lib/plankton/trait/logic-impl.js        720) along with »bacterio-plankton:trait«. If not, see <http://www.gnu.org/licenses/>.
lib/plankton/trait/logic-impl.js        721)  */
lib/plankton/trait/logic-impl.js        722) /**
lib/plankton/trait/logic-impl.js        723)  * @author fenris
lib/plankton/trait/logic-impl.js        724)  */
lib/plankton/trait/logic-impl.js        725) var lib_trait;
lib/plankton/trait/logic-impl.js        726) (function (lib_trait) {
lib/plankton/trait/logic-impl.js        727)     /**
lib/plankton/trait/logic-impl.js        728)      * @desc the ability to create an exact copy
lib/plankton/trait/logic-impl.js        729)      * @author fenris
lib/plankton/trait/logic-impl.js        730)      */
lib/plankton/trait/logic-impl.js        731)     function define_clonable() {
lib/plankton/trait/logic-impl.js        732)         lib_trait.define("clonable", {
lib/plankton/trait/logic-impl.js        733)             "value": []
lib/plankton/trait/logic-impl.js        734)         }, {
lib/plankton/trait/logic-impl.js        735)             "clone": {
lib/plankton/trait/logic-impl.js        736)                 "shape": {
lib/plankton/trait/logic-impl.js        737)                     "name": "function",
lib/plankton/trait/logic-impl.js        738)                     "parameters": {
lib/plankton/trait/logic-impl.js        739)                         "shape_input": {
lib/plankton/trait/logic-impl.js        740)                             "name": "variable",
lib/plankton/trait/logic-impl.js        741)                             "parameters": {
lib/plankton/trait/logic-impl.js        742)                                 "name": "value"
lib/plankton/trait/logic-impl.js        743)                             }
lib/plankton/trait/logic-impl.js        744)                         },
lib/plankton/trait/logic-impl.js        745)                         "shape_output": {
lib/plankton/trait/logic-impl.js        746)                             "name": "variable",
lib/plankton/trait/logic-impl.js        747)                             "parameters": {
lib/plankton/trait/logic-impl.js        748)                                 "name": "value"
lib/plankton/trait/logic-impl.js        749)                             }
lib/plankton/trait/logic-impl.js        750)                         }
lib/plankton/trait/logic-impl.js        751)                     }
lib/plankton/trait/logic-impl.js        752)                 }
lib/plankton/trait/logic-impl.js        753)             }
lib/plankton/trait/logic-impl.js        754)         });
lib/plankton/trait/logic-impl.js        755)         lib_trait.attend("clonable", "crude", {
lib/plankton/trait/logic-impl.js        756)             "value": {
lib/plankton/trait/logic-impl.js        757)                 "name": "any"
lib/plankton/trait/logic-impl.js        758)             }
lib/plankton/trait/logic-impl.js        759)         }, {
lib/plankton/trait/logic-impl.js        760)             "clone": function () { return function (instance) {
lib/plankton/trait/logic-impl.js        761)                 if (typeof (instance) === "object") {
lib/plankton/trait/logic-impl.js        762)                     if ("_clone" in instance) {
lib/plankton/trait/logic-impl.js        763)                         return instance["_clone"]();
lib/plankton/trait/logic-impl.js        764)                     }
lib/plankton/trait/logic-impl.js        765)                     else {
lib/plankton/trait/logic-impl.js        766)                         throw (new Error("[clone]" + " " + "object has no such method"));
lib/plankton/trait/logic-impl.js        767)                     }
lib/plankton/trait/logic-impl.js        768)                 }
lib/plankton/trait/logic-impl.js        769)                 else {
lib/plankton/trait/logic-impl.js        770)                     if (lib_trait._verbosity >= 1) {
lib/plankton/trait/logic-impl.js        771)                         console.warn("[clone]" + " " + "primitive value; using default implementation");
lib/plankton/trait/logic-impl.js        772)                     }
lib/plankton/trait/logic-impl.js        773)                     return instance;
lib/plankton/trait/logic-impl.js        774)                 }
lib/plankton/trait/logic-impl.js        775)             }; }
lib/plankton/trait/logic-impl.js        776)         });
lib/plankton/trait/logic-impl.js        777)     }
lib/plankton/trait/logic-impl.js        778)     lib_trait.define_clonable = define_clonable;
lib/plankton/trait/logic-impl.js        779)     /**
lib/plankton/trait/logic-impl.js        780)      * @author fenris
lib/plankton/trait/logic-impl.js        781)      */
lib/plankton/trait/logic-impl.js        782)     function _clone(instance, domain) {
lib/plankton/trait/logic-impl.js        783)         if (domain === void 0) { domain = { "kind": "crude" }; }
lib/plankton/trait/logic-impl.js        784)         return lib_trait.call("clonable", "clone", domain)(instance);
lib/plankton/trait/logic-impl.js        785)     }
lib/plankton/trait/logic-impl.js        786)     lib_trait._clone = _clone;
lib/plankton/trait/logic-impl.js        787)     define_clonable();
lib/plankton/trait/logic-impl.js        788) })(lib_trait || (lib_trait = {}));
lib/plankton/trait/logic-impl.js        789) /*
lib/plankton/trait/logic-impl.js        790) This file is part of »bacterio-plankton:trait«.
lib/plankton/trait/logic-impl.js        791) 
Christian Fraß [upd] server:lib:plankton

Christian Fraß authored 3 years ago

server/lib/plankton/trait/logic-impl.js 792) Copyright 2016-2021 greenscale <info@greenscale.de>
Christian Fraß [add] lib:plankton

Christian Fraß authored 3 years ago

lib/plankton/trait/logic-impl.js        793) 
lib/plankton/trait/logic-impl.js        794) »bacterio-plankton:trait« is free software: you can redistribute it and/or modify
lib/plankton/trait/logic-impl.js        795) it under the terms of the GNU Lesser General Public License as published by
lib/plankton/trait/logic-impl.js        796) the Free Software Foundation, either version 3 of the License, or
lib/plankton/trait/logic-impl.js        797) (at your option) any later version.
lib/plankton/trait/logic-impl.js        798) 
lib/plankton/trait/logic-impl.js        799) »bacterio-plankton:trait« is distributed in the hope that it will be callful,
lib/plankton/trait/logic-impl.js        800) but WITHOUT ANY WARRANTY; without even the implied warranty of
lib/plankton/trait/logic-impl.js        801) MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
lib/plankton/trait/logic-impl.js        802) GNU Lesser General Public License for more details.
lib/plankton/trait/logic-impl.js        803) 
lib/plankton/trait/logic-impl.js        804) You should have received a copy of the GNU Lesser General Public License
lib/plankton/trait/logic-impl.js        805) along with »bacterio-plankton:trait«. If not, see <http://www.gnu.org/licenses/>.
lib/plankton/trait/logic-impl.js        806)  */
lib/plankton/trait/logic-impl.js        807) /**
lib/plankton/trait/logic-impl.js        808)  * @author fenris
lib/plankton/trait/logic-impl.js        809)  */
lib/plankton/trait/logic-impl.js        810) var lib_trait;
lib/plankton/trait/logic-impl.js        811) (function (lib_trait) {
lib/plankton/trait/logic-impl.js        812)     /**
lib/plankton/trait/logic-impl.js        813)      * @desc the ability to generate a string out of the element, which identifies it to a high degree
lib/plankton/trait/logic-impl.js        814)      * @author fenris
lib/plankton/trait/logic-impl.js        815)      */
lib/plankton/trait/logic-impl.js        816)     function define_hashable() {
lib/plankton/trait/logic-impl.js        817)         lib_trait.define("hashable", {
lib/plankton/trait/logic-impl.js        818)             "value": []
lib/plankton/trait/logic-impl.js        819)         }, {
lib/plankton/trait/logic-impl.js        820)             "hash": {
lib/plankton/trait/logic-impl.js        821)                 "shape": {
lib/plankton/trait/logic-impl.js        822)                     "name": "function",
lib/plankton/trait/logic-impl.js        823)                     "parameters": {
lib/plankton/trait/logic-impl.js        824)                         "shape_input": {
lib/plankton/trait/logic-impl.js        825)                             "name": "variable",
lib/plankton/trait/logic-impl.js        826)                             "parameters": {
lib/plankton/trait/logic-impl.js        827)                                 "name": "value"
lib/plankton/trait/logic-impl.js        828)                             }
lib/plankton/trait/logic-impl.js        829)                         },
lib/plankton/trait/logic-impl.js        830)                         "shape_output": {
lib/plankton/trait/logic-impl.js        831)                             "name": "string"
lib/plankton/trait/logic-impl.js        832)                         }
lib/plankton/trait/logic-impl.js        833)                     }
lib/plankton/trait/logic-impl.js        834)                 }
lib/plankton/trait/logic-impl.js        835)             }
lib/plankton/trait/logic-impl.js        836)         });
lib/plankton/trait/logic-impl.js        837)         lib_trait.attend("hashable", "crude", {
lib/plankton/trait/logic-impl.js        838)             "value": {
lib/plankton/trait/logic-impl.js        839)                 "name": "any"
lib/plankton/trait/logic-impl.js        840)             }
lib/plankton/trait/logic-impl.js        841)         }, {
lib/plankton/trait/logic-impl.js        842)             "hash": function () { return function (thing) {
lib/plankton/trait/logic-impl.js        843)                 if (typeof (thing) === "object") {
lib/plankton/trait/logic-impl.js        844)                     if ("_hash" in thing) {
lib/plankton/trait/logic-impl.js        845)                         return thing["_hash"]();
lib/plankton/trait/logic-impl.js        846)                     }
lib/plankton/trait/logic-impl.js        847)                     else {
lib/plankton/trait/logic-impl.js        848)                         var message = ("[hash]" + " " + "object has no such method");
lib/plankton/trait/logic-impl.js        849)                         throw (new Error(message));
lib/plankton/trait/logic-impl.js        850)                     }
lib/plankton/trait/logic-impl.js        851)                 }
lib/plankton/trait/logic-impl.js        852)                 else {
lib/plankton/trait/logic-impl.js        853)                     if (lib_trait._verbosity >= 1) {
lib/plankton/trait/logic-impl.js        854)                         var message = ("[hash]" + " " + "primitive value; using default implementation");
lib/plankton/trait/logic-impl.js        855)                         console.warn(message);
lib/plankton/trait/logic-impl.js        856)                     }
lib/plankton/trait/logic-impl.js        857)                     return String(thing);
lib/plankton/trait/logic-impl.js        858)                 }
lib/plankton/trait/logic-impl.js        859)             }; }
lib/plankton/trait/logic-impl.js        860)         });
lib/plankton/trait/logic-impl.js        861)     }
lib/plankton/trait/logic-impl.js        862)     lib_trait.define_hashable = define_hashable;
lib/plankton/trait/logic-impl.js        863)     /**
lib/plankton/trait/logic-impl.js        864)      * @author fenris
lib/plankton/trait/logic-impl.js        865)      */
lib/plankton/trait/logic-impl.js        866)     function _hash(instance, domain) {
lib/plankton/trait/logic-impl.js        867)         if (domain === void 0) { domain = { "kind": "crude" }; }
lib/plankton/trait/logic-impl.js        868)         return lib_trait.call("hashable", "hash", domain)(instance);
lib/plankton/trait/logic-impl.js        869)     }
lib/plankton/trait/logic-impl.js        870)     lib_trait._hash = _hash;
lib/plankton/trait/logic-impl.js        871)     define_hashable();
lib/plankton/trait/logic-impl.js        872) })(lib_trait || (lib_trait = {}));
lib/plankton/trait/logic-impl.js        873) /*
lib/plankton/trait/logic-impl.js        874) This file is part of »bacterio-plankton:trait«.
lib/plankton/trait/logic-impl.js        875) 
Christian Fraß [upd] server:lib:plankton

Christian Fraß authored 3 years ago

server/lib/plankton/trait/logic-impl.js 876) Copyright 2016-2021 greenscale <info@greenscale.de>