# @bob-kit/client 中文文档

规范地址：https://npmcn.com/package/%40bob-kit/client/

版本：0\.0\.34
npm 元数据更新时间：2026-04-30T16:08:33.696Z
中文译文更新时间：2026-11-08T09:37:09.742Z
软件包许可：ISC

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

原始 npm 页面：https://www.npmjs.com/package/%40bob-kit/client
原文对照：https://npmcn.com/package/%40bob-kit/client/?lang=original

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

- 包体积（解压后）：3.1 MB，12 个文件
- 模块格式：ESM + CJS
- TypeScript 类型：包内自带
- 运行依赖：1 个
- 首次发布：2025-11-17T13:03:14.214Z
- 最新版本发布：2026-04-30T16:08:33.558Z
- 近 30 天下载量：7250（2026-10-09 至 2026-11-07，npm 官方下载统计）
- 已发布版本数：35（近 12 个月 35 个）

## 中文简介

> **免责声明:**  
> 鲍勃正在开发中! 自己冒险使用.

## 安装

```sh
npm install @bob-kit/client
```

也可以使用：`pnpm add @bob-kit/client`、`yarn add @bob-kit/client`、`bun add @bob-kit/client`

## README

# @bob- kit/ 客户端

> **免责声明:**  
> 鲍勃正在开发中! 自己冒险使用.

公务 **鲍勃** 消费者客户端 `bob` DSL 从 **Java 脚本/ Type 脚本**。 。 。 .

这个包装入了Bob的运行时间(WASM),并暴露出一个小API:

-   翻译你的 `bob` 为给定的引擎输入SQL(SQLite,MariaDB/MySQL,PostgreSQL).
-   使用一个 `Driver` 你提供.
-   可选缓存转录结果.

## 鲍勃是什么?

**鲍勃** 是一个轻量级、 声明式的转录器, 可以定义数据库 **计划** 财务报告和审定财务报表 **查询** 使用一个简单的,人类可读的DSL `bob`。 。 。 .  
Bob然后将这些定义转换成SQL,用于多个引擎,例如: **SQL 点**, (中文(简体) ), **马里亚DB/ MySQL**,以及 **邮递SQL**。 。 。 .

与其用手写动词SQL,不如简洁地描述表格,关系,以及查询,而Bob生成相应的SQL.

## 安装

与 pnpm 连接 :

```bash
pnpm add @bob-kit/client
```

以 npm 为单位 :

```bash
npm i @bob-kit/client
```

用纱线:

```bash
yarn add @bob-kit/client
```

## 环境要求

现在, `@bob-kit/client` 使用节点API加载WASM(`fs`, (中文(简体) ), `vm`) (中文(简体) ).  
也就是说现在 **面向节点.js** (不是浏览器)今天执行.

## 概念:驱动和缓存

客户需要一个 `Driver` (从) `@bob-kit/types`执行生成的 SQL :

-   **驱动程序**:目标引擎(`"sqlite" | "mariadb" | "mysql" | "postgres"`) (中文(简体) ).
-   **等离子( 等离子)**: 执行 SQL 的async 函数(并返回行) `SELECT`) (中文(简体) ).
-   **缓存**: 缓存转录结果的可选执行(memory, redis等).

此套件还导出一个现成的内存: `MemoryCache`。 。 。 .

## 快速启动( 节点 + SQLite)

使用完整示例 `@bob-kit/sqlite` 作为 `querier`数字 :

```ts
import bob from "@bob-kit/client";
import { MemoryCache } from "@bob-kit/client/cache";
import { sqlite } from "@bob-kit/sqlite";

const querier = sqlite(":memory:");

const client = bob({
  driver: "sqlite",
  querier,
  cache: new MemoryCache(),
});

// 1) Define multiple tables in a single query
await client.query`
  table Profile {
    id id
    avatar string
  }

  table Users {
    id id
    name string
    lastName string
    Profile
  }
`;

// 2) Insert one entity
await client.query`
  new Profile {
    avatar "bear"
  }
`;

// 3) Bulk insert with multiple rows and columns
await client.query`
  new Users name          lastName      Profile.id {
            "John"        "Doe"         1
            "Mary"        "Jane"        3
            "Robert"      "Smith"       3
  }
`;

// 4) Create reusable query functions with types
const getUserByName = (name: string) => client.query`
  get Users {
    name
    profile_id

    -> Profile {
        avatar
    }

    desc Profile.id
  }
`;

const users = await getUserByName("John");
```

### 高级实例

#### 结合和关系

```ts
// Join with related table
const usersWithProfiles = await client.query`
  get Users {
    id
    name
    lastName

    -> Profile {
      avatar
    }
  }
`;
```

#### 过滤和排序

```ts
const filteredUsers = await client.query`
  get Users {
    id
    name
    if name = "John" || "Mary"
  }
`;

const sortedUsers = await client.query`
  get Users {
    id
    name
    desc id
  }
`;
```

### 参数

API 接受参数作为参数 `query(...)`。在内部,模板文字将使用 `?` 作为占位符.

```ts
const byEmail = await client.query`
  get Users {
    id
    name
    email
    if email == ?
  }
`("ada@lovelace.dev");
```

## API 密码

### `default export function bob(driver: Driver)`

创建客户端实例.

以 :

-   **`query<A>(input, ...params): Promise<A[]>`**: 执行 a `bob` 输入。 为了方便,你可以调整结构: `const { query: b } = bob(...)`。 。 。 .
-   **`cache(id)(input, ...params): Promise<A[]>`**: 与 `query`,但缓存转换结果在一个固定 `id`。 。 。 .
-   **`factory.<id>(input, ...params): Promise<A[]>`**: 快捷键 `cache("<id>")(...)`。 。 。 .

### `bobQuery({ driver, input, id? })`

低级函数,只执行转录(如果存在则应用缓存). 你通常不需要它.

### `@bob-kit/client/cache`

包括:

-   **`MemoryCache`**: 内嵌 (映射)缓存 `BobQueryResult`。 。 。 .

## 错误

当Bob返回解析/验证/递译错误时,客户端会丢弃 `BobError` 改为:

-   **`name`**: 一个值来自 `BobErrors` (从) `@bob-kit/types/errors`(中文(简体) )
-   **`message`**: 错误细节

## 重要说明

-   **多重行动**:如果您的输入生成超过1个 SQL 动作,客户端会丢出(`MultipleActions`) (中文(简体) ).  
    当前流量假定 **0或1个动作** 每次执行.
-   **表格执行**: 如果输出包含 `tables`,它们全部在动作/静音前被执行(顺序).

## 常见问题

### @bob-kit/client 是什么？

免责声明: 鲍勃正在开发中\! 自己冒险使用\.

### 如何安装 @bob-kit/client？

在项目目录运行 npm install @bob-kit/client，或使用 pnpm add / yarn add / bun add。

### @bob-kit/client 支持 TypeScript 吗？

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

### @bob-kit/client 支持 ESM 还是 CommonJS？

同时提供 ES Module 与 CommonJS 入口，import 和 require\(\) 都可以使用，打包工具会自动选择合适的版本。

### @bob-kit/client 可以商用吗？

@bob-kit/client 使用 ISC 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @bob-kit/client 的下载量有多少？

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

### @bob-kit/client 还在维护吗？

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

