builtin.ts (3005B)
1 import { makeDefinition } from "../library/registry/fnDefinition.js"; 2 import { 3 frAny, 4 frArray, 5 frBool, 6 frNumber, 7 frString, 8 } from "../library/registry/frTypes.js"; 9 import { FnFactory } from "../library/registry/helpers.js"; 10 import { vArray, vBool, vString, isEqual } from "../value/index.js"; 11 12 const maker = new FnFactory({ 13 nameSpace: "", // no namespaced versions 14 requiresNamespace: false, 15 }); 16 17 export const library = [ 18 maker.nn2n({ name: "add", fn: (x, y) => x + y }), // infix + (see Reducer/Reducer_Peggy/helpers.ts) 19 maker.ss2s({ name: "add", fn: (x, y) => x + y }), // infix + on strings 20 maker.nn2n({ name: "subtract", fn: (x, y) => x - y }), // infix - 21 maker.nn2n({ name: "multiply", fn: (x, y) => x * y }), // infix * 22 maker.nn2n({ name: "divide", fn: (x, y) => x / y }), // infix / 23 maker.nn2n({ name: "pow", fn: (x, y) => Math.pow(x, y) }), // infix ^ 24 maker.nn2b({ name: "smaller", fn: (x, y) => x < y }), // infix < 25 maker.nn2b({ name: "smallerEq", fn: (x, y) => x <= y }), // infix <= 26 maker.nn2b({ name: "larger", fn: (x, y) => x > y }), // infix > 27 maker.nn2b({ name: "largerEq", fn: (x, y) => x >= y }), // infix >= 28 maker.bb2b({ name: "or", fn: (x, y) => x || y }), // infix || 29 maker.bb2b({ name: "and", fn: (x, y) => x && y }), // infix && 30 maker.n2n({ name: "unaryMinus", fn: (x) => -x }), // unary prefix - 31 maker.make({ 32 name: "not", 33 definitions: [ 34 makeDefinition([frNumber], ([x]) => { 35 // unary prefix ! 36 return vBool(x !== 0); 37 }), 38 makeDefinition([frBool], ([x]) => { 39 // unary prefix ! 40 return vBool(!x); 41 }), 42 ], 43 }), 44 maker.make({ 45 name: "concat", 46 definitions: [ 47 makeDefinition([frString, frString], ([a, b]) => { 48 return vString(a + b); 49 }), 50 makeDefinition([frArray(frAny), frArray(frAny)], ([a, b]) => { 51 return vArray([...a, ...b]); 52 }), 53 makeDefinition([frString, frAny], ([a, b]) => { 54 return vString(a + b.toString()); 55 }), 56 ], 57 }), 58 maker.make({ 59 name: "add", 60 definitions: [ 61 makeDefinition([frString, frAny], ([a, b]) => { 62 return vString(a + b.toString()); 63 }), 64 ], 65 }), 66 maker.make({ 67 name: "equal", 68 definitions: [ 69 makeDefinition([frAny, frAny], ([a, b]) => { 70 return vBool(isEqual(a, b)); 71 }), 72 ], 73 }), 74 maker.make({ 75 name: "unequal", 76 definitions: [ 77 makeDefinition([frAny, frAny], ([a, b]) => { 78 return vBool(!isEqual(a, b)); 79 }), 80 ], 81 }), 82 maker.make({ 83 name: "typeOf", 84 definitions: [ 85 makeDefinition([frAny], ([v]) => { 86 return vString(v.publicName); 87 }), 88 ], 89 }), 90 maker.make({ 91 name: "inspect", 92 definitions: [ 93 makeDefinition([frAny], ([value]) => { 94 console.log(value); 95 return value; 96 }), 97 makeDefinition([frAny, frString], ([value, label]) => { 98 console.log(`${label}: ${value.toString()}`); 99 return value; 100 }), 101 ], 102 }), 103 ];