# @arxo/law-engine 中文文档

规范地址：https://npmcn.com/package/%40arxo/law-engine/

版本：0\.5\.6
npm 元数据更新时间：2026-10-21T12:16:55.897Z
中文译文更新时间：2026-11-06T22:19:05.822Z
软件包许可：Apache-2\.0

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40arxo/law-engine
原文对照：https://npmcn.com/package/%40arxo/law-engine/?lang=original
项目主页：https://arxo.io/

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：34.8 MB，32 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- Node.js 要求：\>=18
- 运行依赖：1 个
- 首次发布：2026-08-31T12:07:09.081Z
- 最新版本发布：2026-10-21T12:16:55.681Z
- 近 30 天下载量：2265（2026-10-07 至 2026-11-05，npm 官方下载统计）
- 已发布版本数：27（近 12 个月 27 个）

## 中文简介

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

## 安装

```sh
npm install @arxo/law-engine
```

也可以使用：`pnpm add @arxo/law-engine`、`yarn add @arxo/law-engine`、`bun add @arxo/law-engine`

## README

# @arxo/law-engine (英语)

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

[![npm](https://img.shields.io/npm/v/@arxo/law-engine?color=0b6e4f)](https://www.npmjs.com/package/@arxo/law-engine) ![node](https://img.shields.io/node/v/@arxo/law-engine) ![types](https://img.shields.io/badge/types-included-3f3d9e) ![wasm imports](https://img.shields.io/badge/wasm%20imports-0-0b6e4f) ![license](https://img.shields.io/npm/l/@arxo/law-engine)

## 你需要哪个包裹?

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

## 快速启动

```sh
npm install @arxo/law-engine
```

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

```js
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 } });
```

```js
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` 将软件包编译到其犬形中间体 代表权:

```js
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.wasm` | 5.4 甲基溴 | 评估器、犬形、语义散列、程序手柄 | 您评估编译的软件包 |
| `law_binary_core.wasm` | 5.9 甲基溴 | 紧凑二进制信封的评价器 | 选项 `/binary` 条目 |

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

## 评价

```js
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` 组装起来 从简单的事实, 检查他们与包先.

## 到处跑

**浏览器**

```js
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`。 。 。 .

**网络工人** ——脱离主线

```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`。 。 。 .

**节点工人线程**

```js
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.

**一个完整的软件包树** - 明确、锁定、案件、依赖

```js
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`](https://www.npmjs.com/package/@arxo/law-types),则 软件包是唯一的依赖,然后在此再导出:

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

## 链接

[阿尔克索.io](https://www.arxo.io/) • 妇女 [`@arxo/law`](https://www.npmjs.com/package/@arxo/law) • Apache-2.0

## 常见问题

### @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 和提交记录判断。

