time-to-botec

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

dict.js (5280B)


      1 import { OrderedMap } from "immutable";
      2 import { REArgumentError } from "../errors/messages.js";
      3 import { makeDefinition } from "../library/registry/fnDefinition.js";
      4 import { frAny, frArray, frDictWithArbitraryKeys, frLambda, frString, frTuple, } from "../library/registry/frTypes.js";
      5 import { FnFactory } from "../library/registry/helpers.js";
      6 import { ImmutableMap } from "../utility/immutableMap.js";
      7 import { vArray, vDict, vString } from "../value/index.js";
      8 const maker = new FnFactory({
      9     nameSpace: "Dict",
     10     requiresNamespace: true,
     11 });
     12 export const library = [
     13     maker.make({
     14         name: "set",
     15         output: "Dict",
     16         examples: [`Dict.set({a: 1, b: 2}, "c", 3)`],
     17         definitions: [
     18             makeDefinition([frDictWithArbitraryKeys(frAny), frString, frAny], ([dict, key, value]) => vDict(dict.set(key, value))),
     19         ],
     20     }),
     21     maker.make({
     22         name: "merge",
     23         output: "Dict",
     24         examples: [`Dict.merge({a: 1, b: 2}, {c: 3, d: 4})`],
     25         definitions: [
     26             makeDefinition([frDictWithArbitraryKeys(frAny), frDictWithArbitraryKeys(frAny)], ([d1, d2]) => vDict(ImmutableMap([...d1.entries(), ...d2.entries()]))),
     27         ],
     28     }),
     29     maker.make({
     30         name: "mergeMany",
     31         output: "Dict",
     32         examples: [`Dict.mergeMany([{a: 1, b: 2}, {c: 3, d: 4}])`],
     33         definitions: [
     34             makeDefinition([frArray(frDictWithArbitraryKeys(frAny))], ([dicts]) => vDict(ImmutableMap(dicts.map((d) => [...d.entries()]).flat()))),
     35         ],
     36     }),
     37     maker.make({
     38         name: "keys",
     39         output: "Array",
     40         examples: [`Dict.keys({a: 1, b: 2})`],
     41         definitions: [
     42             makeDefinition([frDictWithArbitraryKeys(frAny)], ([d1]) => vArray([...d1.keys()].map((k) => vString(k)))),
     43         ],
     44     }),
     45     maker.make({
     46         name: "values",
     47         output: "Array",
     48         examples: [`Dict.values({a: 1, b: 2})`],
     49         definitions: [
     50             makeDefinition([frDictWithArbitraryKeys(frAny)], ([d1]) => vArray([...d1.values()])),
     51         ],
     52     }),
     53     maker.make({
     54         name: "toList",
     55         output: "Array",
     56         examples: [`Dict.toList({a: 1, b: 2})`],
     57         definitions: [
     58             makeDefinition([frDictWithArbitraryKeys(frAny)], ([dict]) => vArray([...dict.entries()].map(([k, v]) => vArray([vString(k), v])))),
     59         ],
     60     }),
     61     maker.make({
     62         name: "fromList",
     63         output: "Dict",
     64         examples: [`Dict.fromList([["a", 1], ["b", 2]])`],
     65         definitions: [
     66             makeDefinition([frArray(frTuple(frString, frAny))], ([items]) => vDict(ImmutableMap(items))),
     67         ],
     68     }),
     69     maker.make({
     70         name: "map",
     71         output: "Dict",
     72         examples: [`Dict.map({a: 1, b: 2}, {|x| x + 1})`],
     73         definitions: [
     74             makeDefinition([frDictWithArbitraryKeys(frAny), frLambda], ([dict, lambda], context) => {
     75                 return vDict(ImmutableMap([...dict.entries()].map(([key, value]) => {
     76                     const mappedValue = lambda.call([value], context);
     77                     return [key, mappedValue];
     78                 })));
     79             }),
     80         ],
     81     }),
     82     maker.make({
     83         name: "mapKeys",
     84         output: "Dict",
     85         examples: [`Dict.mapKeys({a: 1, b: 2}, {|x| concat(x, "-1")})`],
     86         definitions: [
     87             makeDefinition([frDictWithArbitraryKeys(frAny), frLambda], ([dict, lambda], context) => {
     88                 const mappedEntries = [];
     89                 for (const [key, value] of dict.entries()) {
     90                     const mappedKey = lambda.call([vString(key)], context);
     91                     if (mappedKey.type == "String") {
     92                         mappedEntries.push([mappedKey.value, value]);
     93                     }
     94                     else {
     95                         throw new REArgumentError("mapKeys: lambda must return a string");
     96                     }
     97                 }
     98                 return vDict(ImmutableMap(mappedEntries));
     99             }),
    100         ],
    101     }),
    102     maker.make({
    103         name: "pick",
    104         output: "Dict",
    105         examples: [`Dict.pick({a: 1, b: 2, c: 3}, ['a', 'c'])`],
    106         definitions: [
    107             makeDefinition([frDictWithArbitraryKeys(frAny), frArray(frString)], ([dict, keys]) => {
    108                 const response = OrderedMap().withMutations((result) => {
    109                     keys.forEach((key) => {
    110                         const value = dict.get(key);
    111                         if (dict.has(key) && value) {
    112                             result.set(key, value);
    113                         }
    114                     });
    115                 });
    116                 return vDict(response);
    117             }),
    118         ],
    119     }),
    120     maker.make({
    121         name: "omit",
    122         output: "Dict",
    123         examples: [`Dict.omit({a: 1, b: 2, c: 3}, ['b'])`],
    124         definitions: [
    125             makeDefinition([frDictWithArbitraryKeys(frAny), frArray(frString)], ([dict, keys]) => {
    126                 const response = dict.withMutations((result) => {
    127                     keys.forEach((key) => {
    128                         if (result.has(key)) {
    129                             result.delete(key);
    130                         }
    131                     });
    132                 });
    133                 return vDict(response);
    134             }),
    135         ],
    136     }),
    137 ];
    138 //# sourceMappingURL=dict.js.map