0.5.3 • Published 1 month ago

@dicexp/naive-evaluator-in-worker v0.5.3

Weekly downloads
-
License
MIT
Repository
github
Last release
1 month ago

naive-evaluator-in-worker

Usage

evaluating.worker.js:

import { startWorkerServer } from "@dicexp/naive-evaluator-in-worker";

import { asScope, Evaluator } from "@dicexp/naive-evaluator";
import { functionScope, operatorScope } from "@dicexp/naive-evaluator-builtins";

// 将 “运算符作用域” 与 “函数作用域” 合并为一个作用域。
const topLevelScope = asScope([operatorScope, functionScope]);

startWorkerServer((opts) => (new Evaluator(opts)), topLevelScope);

main.js:

import { EvaluatingWorkerManager } from "@dicexp/naive-evaluator-in-worker";

// 如果运行环境是并不存在原生 Web Worker 的 node:
// 可以将 “web-worker” 包添加为依赖。(目前的最新版本 1.3.0 对模块的支持有问题,
// 可以考虑使用更老的 1.2.0。)
import Worker from "web-worker";
const workerProvider = () =>
  new Worker(new URL("./evaluating.worker.js", import.meta.url), {
    type: "module",
  });

// 如果运行环境是浏览器,假设使用 Vite 打包:
import DicexpEvaluatingWorker from "./evaluating.worker?worker";
const workerProvider = () => new DicexpEvaluatingWorker();

const result = await new Promise((resolve) => {
  const manager = new EvaluatingWorkerManager(
    workerProvider,
    async (ready) => {
      if (!ready) return;

      // `result` 的类型是 `EvaluationResult`。
      // “dicexp” 包的 README 中有列举 `EvaluationResult` 需要处理的分支。
      const result = await manager.evaluateRemote("d100", {
        execution: { seed: 42 },
      });

      resolve(result);
      manager.destroy();
    },
    {
      newEvaluatorOptions: {
        randomSourceMaker: "xorshift7",
      },
    },
  );
});

console.log(result);
0.5.3

1 month ago

0.5.1

1 month ago

0.5.0

1 month ago