UNPKG

human-logic

Version:
112 lines 3.6 kB
"use strict"; /** * Discrete Common Sense Logic * * Discrete Common Sense Logic only allows `true`, `false`, `maybe`, `never` or `undefined` as a value. * @module */ Object.defineProperty(exports, "__esModule", { value: true }); exports.or = exports.and = exports.not = exports.Categories = exports.TRUE = exports.MAYBE = exports.NEVER = exports.FALSE = exports.UNDEF = void 0; /** * Discrete Logical Category of “totally unknown” */ exports.UNDEF = 'UNDEF'; /** * Discrete Logical Category of “certainly negative” */ exports.FALSE = 'FALSE'; /** * Discrete Logical Category of “impossible” (neither positive nor negative) */ exports.NEVER = 'NEVER'; /** * Discrete Logical Category of “uncertain” (could be either positive or negative) */ exports.MAYBE = 'MAYBE'; /** * Discrete Logical Category of “certainly positive” */ exports.TRUE = 'TRUE'; /** * List of all five categories. * * Useful to iterate through all five logical categories. */ exports.Categories = [exports.UNDEF, exports.FALSE, exports.NEVER, exports.MAYBE, exports.TRUE]; /** * Discrete Logical NOT: * * | `undef` | `false` | `never` | `maybe` | `true` | * | --- | --- | --- | --- | --- | * | `undef` | `true` | `maybe` | `never` | `false` | */ function not(value) { switch (value) { case exports.FALSE: return exports.TRUE; case exports.NEVER: return exports.MAYBE; case exports.MAYBE: return exports.NEVER; case exports.TRUE: return exports.FALSE; default: return exports.UNDEF; } } exports.not = not; /** * Discrete Logical AND: * * | `a` \ `b` | `undef` | `false` | `never` | `maybe` | `true` | * | --- | --- | --- | --- | --- | --- | * | **`undef`** | `undef` | `undef` | `undef` | `undef` | `undef` | * | **`false`** | `undef` | `false` | `false` | `false` | `false` | * | **`never`** | `undef` | `false` | `never` | `false` | `never` | * | **`maybe`** | `undef` | `false` | `false` | `maybe` | `maybe` | * | **`true`** | `undef` | `false` | `never` | `maybe` | `true` | */ function and(a, b) { if (a === exports.UNDEF || b === exports.UNDEF) return exports.UNDEF; if (a === exports.FALSE || b === exports.FALSE) return exports.FALSE; if (a === exports.TRUE) return b; if (b === exports.TRUE) return a; if (a === exports.NEVER && b === exports.NEVER) return exports.NEVER; if (a === exports.MAYBE && b === exports.MAYBE) return exports.MAYBE; return exports.FALSE; } exports.and = and; /** * Discrete Logical OR: * * | `a` \ `b` | `undef` | `false` | `never` | `maybe` | `true` | * | --- | --- | --- | --- | --- | --- | * | **`undef`** | `undef` | `undef` | `undef` | `undef` | `undef` | * | **`false`** | `undef` | `false` | `never` | `maybe` | `true` | * | **`never`** | `undef` | `never` | `never` | `true` | `true` | * | **`maybe`** | `undef` | `maybe` | `true` | `maybe` | `true` | * | **`true`** | `undef` | `true` | `true` | `true` | `true` | */ function or(a, b) { if (a === exports.UNDEF || b === exports.UNDEF) return exports.UNDEF; if (a === exports.TRUE || b === exports.TRUE) return exports.TRUE; if (a === exports.FALSE) return b; if (b === exports.FALSE) return a; if (a === exports.NEVER && b === exports.NEVER) return exports.NEVER; if (a === exports.MAYBE && b === exports.MAYBE) return exports.MAYBE; return exports.TRUE; } exports.or = or; //# sourceMappingURL=Category.js.map