@duo-common/formula-runner
v0.1.4
Published
formula-runner.
Downloads
7
Readme
@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`
);
});