# @7mind\.io/baboon 中文文档

规范地址：https://npmcn.com/package/%407mind.io/baboon/

版本：0\.0\.199
npm 元数据更新时间：2026-11-03T20:21:59.024Z
中文译文更新时间：2026-11-06T11:31:17.672Z
软件包许可：BSD-2-Clause

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

原始 npm 页面：https://www.npmjs.com/package/%407mind.io/baboon
原文对照：https://npmcn.com/package/%407mind.io/baboon/?lang=original
项目主页：https://github.com/7mind/baboon#readme
源码仓库：https://github.com/7mind/baboon

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

- 包体积（解压后）：33.5 MB，14 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- 运行依赖：0 个
- 首次发布：2025-12-01T17:40:24.611Z
- 最新版本发布：2026-11-03T20:21:58.682Z
- 近 30 天下载量：3381（2026-10-05 至 2026-11-03，npm 官方下载统计）
- 已发布版本数：31（近 12 个月 31 个）

## 中文简介

为JavaScript消费者编译和运行时间捆绑.

## 安装

```sh
npm install @7mind.io/baboon
```

也可以使用：`pnpm add @7mind.io/baboon`、`yarn add @7mind.io/baboon`、`bun add @7mind.io/baboon`

## README

# @ 7mind.io/baboon (韩语)

JavaScript 为 Baboon 编译器和运行时编码器绑定.

Baboon允许您在紧凑的DSL中定义数据模型,生成多种语言的源代码,并用有版本意识的解码器来编码/解码有效载荷.

## 安装

```bash
npm install @7mind.io/baboon
```

## 使用量

```javascript
import { BaboonCompiler } from "@7mind.io/baboon";

const model = `
model example.npm
version "1.0.0"

root data User {
  name: str
  age: i32
}
`;

const inputs = [{ path: "model.baboon", content: model }];

const result = await BaboonCompiler.compile({
  inputs,
  targets: [
    {
      language: "cs",
      generic: {
        generateTests: false,
        generateFixtures: false
      },
      cs: {
        generateJsonCodecs: true,
        generateUebaCodecs: true,
        deduplicate: true
      }
    }
  ],
  debug: false
});

if (!result.success) {
  throw new Error(result.errors?.join("\n") ?? "Compilation failed");
}

const files = { "model.baboon": model };

// Type identifiers follow `<pkg>/<owner>#<name>`, with `:` for top-level types.
const typeId = "example.npm/:#User";

const encoded = await BaboonCompiler.encode(
  files,
  "example.npm",
  "1.0.0",
  typeId,
  JSON.stringify({ name: "Ada", age: 42 }),
  false
);

if (!encoded.success || !encoded.data) {
  throw new Error(encoded.error ?? "Encoding failed");
}

const decoded = await BaboonCompiler.decode(
  files,
  "example.npm",
  "1.0.0",
  typeId,
  encoded.data
);

if (!decoded.success || !decoded.json) {
  throw new Error(decoded.error ?? "Decoding failed");
}

console.log(JSON.parse(decoded.json));
```

## 环境

软件包是普通ES模块,没有运行时间依赖性:编译器是单一的 `main.js`,而它不需要主机提供的全域,所以在节点运行相同的文件,在 浏览器和网络工人.

## 在网络工作者中运行

一个模型的装入和类型检查是同步的, CPU 绑定: 大型多版本 归档可以让一条线程忙上几秒钟 。 要保持页面响应, 请运行编译器 在网络工人. `worker.js` 是一个现成的模块-工人条目 `connectBaboonWorker` 给予主线程的方法与 `BaboonCompiler`每个返回一个 `Promise`· ; 主线程从未下载或解析编译器捆绑 :

```javascript
// baboon.worker.js — the worker's entry, one line:
import "@7mind.io/baboon/worker.js";
```

```javascript
import { connectBaboonWorker } from "@7mind.io/baboon/worker-client.js";

// `new Worker(new URL("./x.js", import.meta.url), { type: "module" })` is the form bundlers
// document for emitting a module worker with its dependencies.
const worker = new Worker(new URL("./baboon.worker.js", import.meta.url), { type: "module" });
const baboon = connectBaboonWorker(worker);

const model = await baboon.loadMany({ bytes });                 // runs in the worker
const result = await baboon.decodeEnvelopeLoaded(model, envelope);
await baboon.release(model);                                    // frees it in the worker
```

没有捆绑器,就把工人指向包裹本身 (单位:千美元)`new Worker("/node_modules/@7mind.io/baboon/worker.js", { type: "module" })`,或者无论它在哪里 (已送达).

-   模型留在工人体内;主线有不透明的手柄,只能通过 装入它们的连接,直到 `release(model)`。 。 。 .
-   参数和结果被复制到结构组合算法( 不传输) : 呼叫者保持缓冲.
-   工人一方的失败以同样的信息拒绝电话,如果 工人脚本无法加载或崩溃,待发和后发的电话拒绝.
-   在另一港口服务(a) `MessagePort`,节点的 `worker_threads`),电话 `serveBaboon(port)` 从 `@7mind.io/baboon/worker-server.js` 在工人和 `connectBaboonWorker(otherPort)` 在另一边.

## API 表面

-   `BaboonCompiler.compile(options)` → `Promise<{ success, files?, errors? }>`
-   `BaboonCompiler.load(files)` → `Promise<BaboonLoadedModel>`
-   `BaboonCompiler.loadMany({ bytes } | { base64 })` → `Promise<BaboonLoadedModel>`
-   `BaboonCompiler.listTypes(model)` → `BaboonTypeInfo[]`
-   `BaboonCompiler.generateRandom(model, pkg, version, idString)` → `{ success, json?, error? }`
-   `BaboonCompiler.encode(files, pkg, version, idString, json, indexed)` → `Promise<{ success, data?, error? }>`
-   `BaboonCompiler.encodeLoaded(model, pkg, version, idString, json, indexed)` → `Promise<{ success, data?, error? }>`
-   `BaboonCompiler.decode(files, pkg, version, idString, data)` → `Promise<{ success, json?, error? }>`
-   `BaboonCompiler.decodeLoaded(model, pkg, version, idString, data)` → `Promise<{ success, json?, error? }>`
-   `BaboonCompiler.encodedEnvelopeLoaded(model, jsonEnvelope, { envelopeVersion, indexed })` → `Promise<{ success, data?, error? }>`
-   `BaboonCompiler.decodeEnvelopeLoaded(model, uebaEnvelope)` → `Promise<{ success, json?, error? }>`
-   `BaboonCompiler.cleanupScheme(files, domain, version)` 编号 : `cleanupSchemeLoaded(model, domain, version)` → `Promise<{ success, content?, error? }>`

`load` 财务报告和审定财务报表 `loadMany` 拒绝 `Error` 其信息从 `Loading failed:`· ; 模型问题与它们来自的文件(或档案条目)的路径一起列出.

### 装入计划归档

`loadMany` 加载一个 schema 归档的每个计划( 常规的 ZIP 文件) `*.bsm`(中文(简体) ) 在记忆中一起通过与 `load`,并返回相同的手柄 :

```javascript
// e.g. written by: baboon --model-dir ./models :scheme --domains="*@*" --zip-output=schemas.bsm
const model = await BaboonCompiler.loadMany({ bytes: new Uint8Array(await response.arrayBuffer()) });
const same = await BaboonCompiler.loadMany({ base64: "UEsDBAoAAAg..." }); // plain base64, not a data: URL
```

正好通过一个 `bytes` 联合国 `Uint8Array`,节点的 `Buffer` 列入)或 `base64` (单位:千美元) 标准字母; 无 `data:` 前缀,没有空白。 存档合同 :

-   条目必须存储(方法 0, 什么 `baboon :scheme --zip-output` 写)或 解缩(方法8, 缩放工具默认写作); 其他方法, 加密和 拒绝ZIP64;
-   输入路径必须是相对的 `/`\-没有空的分离路径, `.` 或者说 `..` 部分, 后鞭打或驱动前缀,并具有独特性;
-   目录条目被忽略 ; `*.baboon` 条目是计划(UTF-8,至少一个); `*.bmo` 仅可供 `include`,其路径解决旁边 包括首先输入,然后与归档根相对;拒绝任何其他条目;
-   已核实CRC-32核对和.

档案在记忆中读取,没有额外的依赖性,在节点和浏览器中都一样.

### 正在转换信封

生成的运行时间的外观将值包裹在一个命名的顶级信封中 域、版本和类型(`docs/spec/codec-envelope.md`) (中文(简体) ). `encodedEnvelopeLoaded` 转弯 jSON信封装入二进制的UEBA; `decodeEnvelopeLoaded` 反向显示 :

```javascript
const json = JSON.stringify({ $mv: 1, $d: "example.npm", $v: "1.0.0", $t: typeId, $c: { name: "Ada", age: 42 } });
const bin = await BaboonCompiler.encodedEnvelopeLoaded(model, json, { envelopeVersion: 1, indexed: false });
const back = await BaboonCompiler.decodeEnvelopeLoaded(model, bin.data); // back.json === json
```

-   需要两种选择: `envelopeVersion` 是二进制布局( e)`1`外观 默认,带有一个相容性约束; `2` 两者兼具,而且只能由 当前运行时间), `indexed` uEBA指数模式(默认为紧凑, `false`) (中文(简体) ). 二进制输入是自我描述(v1或v2,收缩或索引),因此解码不需要选项.
-   这是格式转换,而不是迁移:域、版本和完整的类型标识符 (单位:千美元)`pkg/:#Name`, (中文(简体) ), `pkg/ns#Name`, (中文(简体) ), `pkg/[pkg/:#Adt]#Branch`)从输入中取出并保存. 有效载荷与该确切版本一并阅读。 一个比每个装入的版本更新的作者是 只有当其信封证明有效载荷字节与装入的版本相同时才转换 (单位:千美元)`$uv`,或二进制 v2 `minCompat`; 二进制 v1 信封无法证明, 被拒绝 .
-   兼容性边界从已装入的模型中重新计算输出格式: JSON `$rv` (json-additive)和 二进制 `readableMin` (前缀-compact / 前缀- any-mode) 承诺 不同的东西, 从来没有复制过。 从模型中计算出的 只有部分域名的分界线是保守的.
-   错误报告于 `error`: 不正确或短发的信封, 不支持 `metaVersion` 或旗帜, 超出顺序, 未知域, 版本或类型, JSON 字段中,该类型不声明,跟踪字节,并值运行时编码器不能 转换( e)`any` 字段,不含 `rt` 绘制地图)。 贾森 `$mv` 也许就是 编号 `1` 或遗留字符串 `"1"`或缺席.

### 性能优化

对于重复操作,一次装入模型并再用. 此跳过每次呼叫的解析和验证步骤 :

```javascript
// 1. Load model once
const model = await BaboonCompiler.load(files);

// 2. Encode/Decode multiple times efficiently
const encoded = await BaboonCompiler.encodeLoaded(
  model,
  "example.npm",
  "1.0.0",
  typeId,
  jsonPayload,
  false
);

const decoded = await BaboonCompiler.decodeLoaded(
  model,
  "example.npm",
  "1.0.0",
  typeId,
  encoded.data
);
```

## 许可证

BSD-2- 标签

## 常见问题

### @7mind\.io/baboon 是什么？

为JavaScript消费者编译和运行时间捆绑\.

### 如何安装 @7mind\.io/baboon？

在项目目录运行 npm install @7mind\.io/baboon，或使用 pnpm add / yarn add / bun add。

### @7mind\.io/baboon 支持 TypeScript 吗？

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

### @7mind\.io/baboon 支持 ESM 还是 CommonJS？

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

### @7mind\.io/baboon 可以商用吗？

@7mind\.io/baboon 使用 BSD-2-Clause 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @7mind\.io/baboon 的下载量有多少？

根据 npm 官方下载统计，@7mind\.io/baboon 在 2026/10/05 – 2026/11/03 这 30 天内被下载 3,381 次，日均约 113 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @7mind\.io/baboon 还在维护吗？

最新版本 0\.0\.199 发布于 2026/11/04（3 天前）；至今共发布 31 个版本，其中过去 12 个月发布了 31 个；首次发布于 2025/12/02。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

