input.js (4068B)
1 import { REArgumentError } from "../errors/messages.js"; 2 import { makeDefinition } from "../library/registry/fnDefinition.js"; 3 import { frArray, frBool, frDict, frNumberOrString, frOptional, frString, } from "../library/registry/frTypes.js"; 4 import { FnFactory } from "../library/registry/helpers.js"; 5 import { vInput } from "../value/index.js"; 6 const maker = new FnFactory({ 7 nameSpace: "Input", 8 requiresNamespace: true, 9 }); 10 const convertInputDefault = (value) => { 11 if (typeof value === "number") { 12 return value.toString(); 13 } 14 else if (typeof value === "string") { 15 return value; 16 } 17 else { 18 return undefined; 19 } 20 }; 21 export const library = [ 22 maker.make({ 23 name: "text", 24 output: "Input", 25 examples: [`Input.text({ name: "First", default: "John" })`], 26 definitions: [ 27 makeDefinition([ 28 frDict(["name", frString], ["description", frOptional(frString)], ["default", frOptional(frNumberOrString)]), 29 ], ([vars]) => { 30 return vInput({ 31 type: "text", 32 name: vars.name, 33 description: vars.description || undefined, 34 default: convertInputDefault(vars.default), 35 }); 36 }), 37 ], 38 }), 39 maker.make({ 40 name: "textArea", 41 output: "Input", 42 examples: [`Input.textArea({ name: "First", default: "John" })`], 43 definitions: [ 44 makeDefinition([ 45 frDict(["name", frString], ["description", frOptional(frString)], ["default", frOptional(frNumberOrString)]), 46 ], ([vars]) => { 47 return vInput({ 48 type: "textArea", 49 name: vars.name, 50 description: vars.description || undefined, 51 default: convertInputDefault(vars.default), 52 }); 53 }), 54 ], 55 }), 56 maker.make({ 57 name: "checkbox", 58 output: "Input", 59 examples: [`Input.checkbox({ name: "First", default: true })`], 60 definitions: [ 61 makeDefinition([ 62 frDict(["name", frString], ["description", frOptional(frString)], ["default", frOptional(frBool)]), 63 ], ([vars]) => { 64 return vInput({ 65 type: "checkbox", 66 name: vars.name, 67 description: vars.description || undefined, 68 default: vars.default ?? undefined, 69 }); 70 }), 71 ], 72 }), 73 maker.make({ 74 name: "select", 75 output: "Input", 76 examples: [ 77 `Input.select({ name: "First", default: "John", options: ["John", "Mary", "Sue"] })`, 78 ], 79 definitions: [ 80 makeDefinition([ 81 frDict(["name", frString], ["description", frOptional(frString)], ["options", frArray(frString)], ["default", frOptional(frString)]), 82 ], ([vars]) => { 83 const isEmpty = () => vars.options.length === 0; 84 const defaultNotInOptions = () => vars.default && !vars.options.includes(vars.default); 85 const hasDuplicates = () => new Set(vars.options).size !== vars.options.length; 86 if (isEmpty()) { 87 throw new REArgumentError("Options cannot be empty"); 88 } 89 else if (defaultNotInOptions()) { 90 throw new REArgumentError("Default value must be one of the options provided"); 91 } 92 else if (hasDuplicates()) { 93 throw new REArgumentError("Options cannot have duplicate values"); 94 } 95 return vInput({ 96 type: "select", 97 name: vars.name, 98 description: vars.description || undefined, 99 options: vars.options, 100 default: vars.default ?? undefined, 101 }); 102 }), 103 ], 104 }), 105 ]; 106 //# sourceMappingURL=input.js.map