0.1.4 • Published 2 years ago

@duo-common/formula-runner v0.1.4

Weekly downloads
-
License
MIT
Repository
-
Last release
2 years ago

@duo-common/formula-runner

Installation

$ npm install @duo-common/formula-runner

# or yarn
$ yarn add @duo-common/formula-runner

# or pnpm
$ pnpm i @duo-common/formula-runner

Usage

v0.1.x

import { expect, it } from "vitest";
import { Options, run, runAsync } from "../../src/core";

const context = {
  name: "John",
  age: 30,
  height: 170,
  address: "123 Main St",
  city: "New York",
  state: "NY",
  zip: "10001",
  phone: "123-456-7890",
  sex: "man",
};

const asyncFn = (ms) => {
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve(`return result after ${ms} ms`);
    }, ms);
  });
};

it("expression not is string", () => {
  expect(() => run(true as unknown as string, context)).toThrow(
    "Expected a string, got boolean"
  );
});

it("basic usage", () => {
  expect(run("SUM(1, 2)", context)).toBe(3);
});

it("use context", () => {
  expect(run("SUM(age, height)", context)).toBe(200);
});

it("use debugger", () => {
  expect(
    run("SUM(age, height)", context, {
      debugger: true,
    })
  ).toBe(200);
});

it("use custom Function", () => {
  const functions = {
    TOUPPERCASE(str: string) {
      return str.toUpperCase();
    },
  };

  const options: Options = {
    functions: functions,
  };
  expect(run("TOUPPERCASE('abc')", context, options)).toBe("ABC");
});

it("async result in run", () => {
  const options: Options = {
    functions: {
      asyncFn,
    },
  };

  expect(() => run("asyncFn(2000)", context, options)).toThrow(
    `If you result is a Promise. Please use "runAsync"`
  );
});

it("async result in runAsync", async () => {
  const options: Options = {
    functions: {
      asyncFn,
    },
  };

  await expect(runAsync("asyncFn(2000)", context, options)).resolves.toBe(
    `return result after 2000 ms`
  );
});

License

Unlicense © IduoFE

0.1.0

2 years ago

0.1.2

2 years ago

0.1.1

2 years ago

0.0.9

2 years ago

0.0.8

2 years ago

0.1.4

2 years ago

0.1.3

2 years ago

0.0.7

2 years ago

0.0.6

2 years ago

0.0.5

2 years ago

0.0.4

2 years ago

0.0.3

2 years ago

0.0.2

2 years ago

0.0.1

2 years ago