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