@arxo/law-engine

中文文档
0.5.6发布于 2026/10/21Apache-2.0TypeScriptES Module近 30 天下载 2265

Arxo Core编译器和评价器SDK:WebAssembly,用于Node.js的JavaScript和TypeScript,浏览器和工人.

中文使用文档
文档目录11 节
  1. 你需要哪个包裹?
  2. 快速启动
  3. 两个模块
  4. 评价
  5. 到处跑
  6. API 密码
  7. 编译调色板 — 完整模块
  8. 发动机
  9. 失败
  10. 类型
  11. 链接

@arxo/law-engine (英语)

作为Web Assembly的Arxo Law引擎:编译 .law 包,检查它们, 并评估节点、浏览器和 工人们. 模块没有进口——没有WASI,没有时钟,没有 环境——所以同一请求在任何地方给出相同的字节.

npm node types wasm imports license

你需要哪个包裹?

你想这样使用
问一个已经出版的罐子的问题 并获得有证据的答案@arxo/law 它包住这个引擎 组装箱子 并预测答案
检查或编译 .law 编辑器、 CI 或浏览器中的源@arxo/law-engine,完整模块
用最小模块评价已编译的软件包( CLIR)@arxo/law-engine,核心模块
只有文件和诊断的种类@arxo/law-types

快速启动

npm install @arxo/law-engine

请检查date=中的日期值 (帮助)

import { loadEngine } from '@arxo/law-engine/node';

const engine = await loadEngine();
const source = `language "law.core" version "0.2";
package demo.age version "0.1.0";
namespace "urn:example:demo-age";

pub entity Person;
pub relation age(p: Person, years: Integer) kind empirical;
pub relation adult(p: Person) kind institutional;

rule Adult(p: Person, y: Integer) strict {
  when aeg(p, y);
  when y >= 18;
  then adult(p);
}
`;
const { answer } = engine.call({ op: 'check', path: 'demo.law', files: { 'demo.law': source } });
answer.ok;                    // false
answer.diagnostics[0].code;   // 'LDC-E2102'
answer.diagnostics[0].message // 'predicate "aeg" is not declared as a relation in this file'
answer.diagnostics[0].primarySpan.start; // { line: 10, character: 8, offset: 284 }

修补 aeg → age 将软件包编译到其犬形中间体 代表权:

const lowered = engine.call({ op: 'lower', path: 'demo.law', files: { 'demo.law': fixed } }).answer;
const ir = JSON.parse(lowered.bytes);
ir.semanticVersion;            // '0.2.5'
ir.artifactHash;               // 'sha256:e2c51767…'
engine.semanticHash(ir);       // the freshness fingerprint

在开发者笔记本电脑上测量(20号,2026-10-02号): loadEngine() 75分钟, check 本包的长度为44毫秒.

两个模块

模块大小出口用它当
law_wasm.wasm (默认)11.3 甲基溴评估器 + 编译器调色器 + 发音器您分析, 检查或降低 .law 来源
law_wasm_core.wasm5.4 甲基溴评估器、犬形、语义散列、程序手柄您评估编译的软件包
law_binary_core.wasm5.9 甲基溴紧凑二进制信封的评价器选项 /binary 条目

两个主要模块都以字节相同的方式答复评价请求 文档。 核心模块完全没有编译器: 全包拒绝 一个核心模块在即时化,而不是在第一次呼叫时失败.

评价

import { loadCoreEngine, REQUEST_SCHEMA } from '@arxo/law-engine/core/node';

const core = await loadCoreEngine();
const program = core.load(ir);            // load once
const { document } = program.evaluate({   // evaluate many cases
  schemaVersion: REQUEST_SCHEMA,          // 'law.core.evaluation-request/0.2'
  semanticVersion: ir.semanticVersion,
  case: caseDocument,
  query,
});
program.dispose();

document 是评价文件:结果、证明图表、问题和 胡说八道 请求信封已经关闭.. schemaVersion 财务报告和审定财务报表 semanticVersion 执行选项 case.options。 。 。 . 大楼 caseDocument 很少需要手动: @arxo/law 组装起来 从简单的事实, 检查他们与包先.

到处跑

浏览器
import { LawEngine } from '@arxo/law-engine';

const wasmUrl = new URL('@arxo/law-engine/law_wasm.wasm', import.meta.url);
const engine = await LawEngine.instantiate(await fetch(wasmUrl));

模块以空导入对象即时化; 如果失败, 建筑是错的,不要阻碍进口。 当你复制文件时 你自己来,复制完整 dist 目录,包括 composition.js。 。 。 .

网络工人 ——脱离主线
import { createWorkerEngine } from '@arxo/law-engine/worker';

const worker = new Worker(new URL('@arxo/law-engine/worker-entry', import.meta.url), { type: 'module' });
const engine = createWorkerEngine(worker, new URL('@arxo/law-engine/law_wasm.wasm', import.meta.url).href);
await engine.init();
const result = await engine.call({ op: 'features' });
worker.terminate();

关于核心单元: @arxo/law-engine/core/worker-entry 财务报告和审定财务报表 law_wasm_core.wasm。 。 。 .

节点工人线程
import { Worker } from 'node:worker_threads';
import { createRequire } from 'node:module';
import { createWorkerEngine } from '@arxo/law-engine/worker';

const resolve = createRequire(import.meta.url).resolve;
const worker = new Worker(resolve('@arxo/law-engine/worker-node-entry'));
const engine = createWorkerEngine(worker, resolve('@arxo/law-engine/law_wasm.wasm'));
await engine.init();
worker.terminate();

节点工人条目从本地路径装入 file: URL 以及 网络 HTTP和数据URL.

一个完整的软件包树 - 明确、锁定、案件、依赖
const { answer } = engine.call({
  op: 'ask', path: 'pkg', files,
  args: {
    case: 'Main',
    evaluate: 'evaluate truth(demo.rules::eligible("Ada"));',
    queryId: 'urn:law:demo:case#case/Main/query/eligible',
  },
});

files 将路径映射到 UTF-8 文本或 { base64: '…' } 字节:列表, law.lock、来源和案例、实际的依赖和固定的 资源。 引擎从不安装依赖性或读取网络 代表编译请求.

API 密码

编译调色板 — 完整模块

engine.call(request) 返回时 { answer, bytes }· ; bytes 是峡谷 形式 answer。 。 。 .

op对
parse语法树和语法诊断
check所有静态诊断 : { ok, diagnostics }
lower编译软件包( CLIR)
layer, (中文(简体) ), features语义层和软件包的特征
expand模板扩展的软件包
explain, (中文(简体) ), why-not, (中文(简体) ), graph编译软件包的解释、阻塞和依赖图
test包的相容性向量
ask评估保存的完整软件包树

发动机

方法回返
LawEngine.instantiate(source)引擎,来自 fetch 响应或字节
engine.evaluate(request){ document, bytes } - 一项评价
engine.load(ir) 编号 : engine.loadBytes(bytes)程序控件 : evaluate(request) 无 ir,则 dispose()
engine.verbalize({ ir, pack, labels? }){ text, contentHash, gaps, blocks } 模板包(完整模块)下的软件包审查文本
engine.canon(document)任意 JSON 文档的可读字节
engine.semanticHash(document)新鲜度指纹

失败

无论引擎本身如何回答,失败就是一个值: { error: { code, message } } 或信封内有 ok: false包装 仅用于滥用和显示主机故障,如 HostAdapterError 与 code 财务报告和审定财务报表 message (在全体工人中保留). 将诊断结果匹配在马厩上 code (单位:千美元)LDC-E…),在消息上没有 语句。 装载器拒绝为另一个ABI版本所建模块.

类型

每个文件和诊断都来自规范的JSON计划 @arxo/law-types,则 软件包是唯一的依赖,然后在此再导出:

import type { EvaluationDocument, Diagnostic } from '@arxo/law-engine';

阿尔克索.io • 妇女 @arxo/law • Apache-2.0

版本与发布记录

@arxo/law-engine 共发布 27 个版本,首次发布于 2026/08/31;过去 12 个月发布了 27 个版本。

版本发布日期距今
0.5.6latest2026/10/2117 天前
0.5.52026/10/1622 天前
0.5.42026/10/1424 天前
0.5.32026/10/1425 天前
0.5.22026/10/1325 天前
0.5.12026/10/1226 天前

其他发布通道:next → 0.3.2。

关于 @arxo/law-engine 的常见问题

@arxo/law-engine 是什么?

Arxo Core编译器和评价器SDK:WebAssembly,用于Node.js的JavaScript和TypeScript,浏览器和工人.

如何安装 @arxo/law-engine?

在项目目录运行 npm install @arxo/law-engine,或使用 pnpm add / yarn add / bun add。

@arxo/law-engine 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@arxo/law-engine 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@arxo/law-engine 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=18。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@arxo/law-engine 可以商用吗?

@arxo/law-engine 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@arxo/law-engine 的下载量有多少?

根据 npm 官方下载统计,@arxo/law-engine 在 2026/10/07 – 2026/11/05 这 30 天内被下载 2,265 次,日均约 76 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@arxo/law-engine 还在维护吗?

最新版本 0.5.6 发布于 2026/10/21(17 天前);至今共发布 27 个版本,其中过去 12 个月发布了 27 个;首次发布于 2026/08/31。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。