time-to-botec

Benchmark sampling in different programming languages
Log | Files | Refs | README

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