# @fitzzero/quickdraw-lint 中文文档

规范地址：https://npmcn.com/package/%40fitzzero/quickdraw-lint/

版本：5\.1\.4
npm 元数据更新时间：2026-10-25T21:15:40.240Z
中文译文更新时间：2026-11-14T20:40:50.476Z
软件包许可：MIT

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

原始 npm 页面：https://www.npmjs.com/package/%40fitzzero/quickdraw-lint
原文对照：https://npmcn.com/package/%40fitzzero/quickdraw-lint/?lang=original
项目主页：https://github.com/fitzzero/quickdraw#readme
源码仓库：https://github.com/fitzzero/quickdraw

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

- 包体积（解压后）：269 kB，40 个文件
- 模块格式：ES Module
- TypeScript 类型：未声明
- Node.js 要求：\>=24
- 运行依赖：0 个
- peer 依赖：oxlint ^1\.52\.0
- 首次发布：2026-10-04T16:53:30.728Z
- 最新版本发布：2026-10-25T21:15:39.855Z
- 近 30 天下载量：2668（2026-10-15 至 2026-11-13，npm 官方下载统计）
- 已发布版本数：15（近 12 个月 15 个）

## 中文简介

oxlint 插件、 基础配置和快速绘图应用的基准命令

## 安装

```sh
npm install @fitzzero/quickdraw-lint
```

也可以使用：`pnpm add @fitzzero/quickdraw-lint`、`yarn add @fitzzero/quickdraw-lint`、`bun add @fitzzero/quickdraw-lint`

## README

# @fitzzero/ quickdraw-lint (英语)

快速draw oxlint 插件和配置 (设计: `docs/rfcs/0003-v5.md`页:1 规矩是错的 与 5.0 API 相关: 写入订阅者永远不会看到, 帧由 手,读取与表一起生长,绕过被键入的客户端,和 4.x 这已经不复存在。 每个规则都经过测试,每个规则都可以 采用时不首先固定旧代码(基线,以下).

```bash
bun add -d @fitzzero/quickdraw-lint oxlint
```

```jsonc
// .oxlintrc.json in your app
{
  "extends": [
    "./node_modules/@fitzzero/quickdraw-lint/oxlint.base.jsonc",
    // or, in an app built from the quickdraw template, the template config
    // instead: it extends the base and adds the design-system rules
    // "./node_modules/@fitzzero/quickdraw-lint/oxlint.template.jsonc",
  ],
  // plugins, ignorePatterns, env, globals and settings are not inherited
  "plugins": ["typescript", "import", "react", "nextjs", "jsx_a11y"],
  "ignorePatterns": ["**/dist/**", "**/node_modules/**"],
}
```

配置通过相对自身的路径加载插件, 所以是一个应用程序 需要没有 `jsPlugins` 进入它自己的。 顶端的评论 `oxlint.base.jsonc` 列出扩展配置继承什么。 它的路径 覆盖( 明确类型在 `packages/shared` 财务报告和审定财务报表 `packages/db`网络 应用的放松预算) `**/`\- 前置, 因此它们是否应用 lint 运行 从应用程序的根或每个软件包目录。 插件运行在 牛林一万五千二或后出.

## 规则

每个规则都是综合的:克林特的JS插件看到一个文件的语法,没有 类型。 如果一个规则需要猜测,它宁愿缺少一个案件而不是报告 正确的代码; 每一个规则的文件都说它留下了什么.

| 规则 | 报告 | 默认检查 |
| --- | --- | --- |
| `no-untracked-write` | 导入未跟踪的 Prisma 客户端( R)`prisma`, (中文(简体) ), `PrismaClient` 从应用程序的db包, `@prisma/client` 或生成的客户端),并通过命名的客户端写入 `prisma` (a) 参数、变量、解结构绑定或类成员键入) `Tracked<...>` 或者说 `TrackedTransaction<...>`从 `@fitzzero/quickdraw-core` 或者说 `@fitzzero/quickdraw-core/prisma` 无论名称如何,都是跟踪客户端 `Tracked` 无效) | 服务、工作、路线 |
| `no-foreign-write` | 写给一个模型 , 其附件 `defineService` 既不拥有(`model`)或列表中 `writes` | 到处都是 |
| `no-nested-write` | 嵌入关系书写( n)`data: { labels: { create } }`通过跟踪客户端(`db`, (中文(简体) ), `tx`,或使用快取键键键入的绑定或类成员 `Tracked<...>`: 只有父行被跟踪 | 到处都是 |
| `no-raw-sql-write` | `$executeRaw*`,以及 `$queryRaw*` 运行写入,在不用 `ctx.touch(...)` (或 `qd.collections.reset(...)`(中文(简体) ) | 服务、工作、路线 |
| `no-manual-emit` | `.emit()` 在袜子上。 IO 服务器或套接字(`io.to(room).emit`),以及 `qd:` 字符串、 框架的事件和房间名称 | 服务、工作、路线 |
| `no-inline-auth-guard` | `if (!ctx.principal) throw ...` 及其变体a `handler` (声明) `access` 换句话说,还有一份很好的检查, `if (ctx.principal.kind !== "user") throw ...` (声明) `kinds` 改为) | 到处都是 |
| `no-plain-error-refusal` | 内置出错的投出( n)`new Error(...)`, (中文(简体) ), `TypeError(...)`,有或无 `new`在给定为 `auth.authenticate` 改为 `createServer` 或者说 `createHttpRouter`,作为 `loadPrincipal` 改为 `socketAuth`,或作为 `principal` 改为 `createMcpRegistry` (写在那里,或 `function` 或者说 `const` ),服务器会为自己失败而接受,因此客户端会永远重试证书(MCP代理商从未被告知其代号被拒绝) `try` 带有 `catch` 或一个 `catch` 条款 | 除了测试,到处都是 |
| `no-unbounded-read` | `findMany` 无 `take` (由ids读取, `id` 平等, `{ in }` 或者说 `{ equals }`,被绑定; `{ not }`, (中文(简体) ), `{ notIn }` 财务报告和审定财务报表 `{ gt }` 无) | 服务 |
| `no-db-call-in-loop` | 每个项目的数据库呼叫 `for`编号 :`for...of`编号 :`for...in` 循环或 `.map` 回拨、等待或发送到 `Promise.all` (无) `while`, (中文(简体) ), `createMany`, (中文(简体) ), `in:` 自己的游戏, `tx` 写作) | 服务、工作、路线 |
| `no-emit-in-loop` | `ctx.rooms.emit`, (中文(简体) ), `emitToUser` 或溪流的 `push` 每件物品到同一房间、用户或流量范围(fan-out很好;批次与 `pushMany`(中文(简体) ) | 服务、工作、路线 |
| `no-load-then-filter` | `findMany` 其行仅存 `.filter`编辑或 `.find`条件a `where` 可表达 | 服务、工作、路线 |
| `no-prisma-in-routes` | 模型在路由处理器中调用 Prisma 客户端 | 路线 |
| `no-cross-service-internal-imports` | 导入索引以外的其它服务目录文件 | 服务 |
| `no-await-void-mutate` | `await mutation.mutate(...)`数字 : `mutate` 返回无; 使用 `mutateAsync` | 客户端代码 |
| `no-untyped-client` | a TanStack 查询钩 `queryFn`编号 :`mutationFn` 即用手拨打快速拨打的电话 `queryKey` 是一个快画键( 客户端缺少时可能会使用成员键 ) `key` 财务报告和审定财务报表 `call`(中文(简体) ) | 客户端代码 |
| `no-manual-refetch` | 快速绘图查询 `refetch()` 在(或者在回调中)快速拉动突变之后 `invalidateQueries`编号 :`refetchQueries`编号 :`resetQueries` 快捷键上 | 客户端代码 |
| `no-raw-socket` | `socket.emit`, (中文(简体) ), `socket.on`, (中文(简体) ), `socket.off` 还有其他生的苏克特 IO呼叫:一个 `socket` (或 `x.socket`不管怎么样 `socket.io-client`是因为 `io()`, (中文(简体) ), `connect()` 或者说 `Manager` 以任何名称制作(通过变量和 `this` 字段),并带有a `qd:` 任何接收器上的事件名称 | 客户端代码 |
| `no-v4-api` | 每删除或移动 4.x API 5.0; 每个信件名替换 | 到处都是 |
| `prefer-kit` | 工具箱采用的一种手写方法(`get`, (中文(简体) ), `list`, (中文(简体) ), `create`, (中文(简体) ), `search`, (中文(简体) ), `share`, (中文(简体) ), `adminList`,或 `getTask`, (中文(简体) ), `listTasks`, (中文(简体) ), `createTask`, (中文(简体) ), `updateTask`, (中文(简体) ), `deleteTask` 用于模型 `"task"`· ; `remove` 仅以成员模式或以其他分享方式进行) `defineService` 谁 `model` 是一个字符串( 或 `const` (其中之一)以及 `methods` 不传播任何工具包(一个散开的变量或一个调用计数),或重复其旁所传播的工具包(`crud.handlers`' `access` 字面名称, `search` 页:1 `search.handlers`,用于 `admin.handlers`页:1 `// quickdraw: hand-written because <reason>` 上面的评论保持安静 | 除了测试,到处都是 |
| `no-todo-schema` | `todoSchema()`,占位符计划4.x迁移(`@fitzzero/quickdraw-codemod`(a) 一种方法没有的地方留下:它证明什么都没有 `query()` 或者说 `mutation()` 无输入 `keys`,它也会隐藏输入键从 `defineService`id-reach (less) 检查,消息说是这样 | 到处都是 |
| `require-describe` | 合同成员 `describe`合同(`defineContract`),每个 `query` 财务报告和审定财务报表 `mutation`、 收集、 流、 通道和事件, 写成对象字元( 在别处构建的扩展或定义被留下) , 静态 `describe` 下级 `minWords` 单词(默认 3); MCP 桥描述一个方法的工具,并 `quickdraw-docs` 带领每个区域 | 除了测试,到处都是 |
| `no-unused-baseline` | 基线文件中的允许性,即不再使用任何违规行为(以下) | 基线文件 |
| `no-raw-button-strings`, (中文(简体) ), `no-raw-tooltip-strings`, (中文(简体) ), `no-raw-typography-strings` | mUI 中的原始字符串 `Button`, (中文(简体) ), `Typography` 财务报告和审定财务报表 `Tooltip` 标题`oxlint.template.jsonc`(中文(简体) ) | `*.tsx`, (中文(简体) ), `*.jsx` |

基础配置打开 除了最后三个 `error`时,除 `no-unused-baseline`, (中文(简体) ), `no-todo-schema`, (中文(简体) ), `prefer-kit`, (中文(简体) ), `require-describe` 财务报告和审定财务报表 `no-plain-error-refusal`警告他们。 警告不会失败升级; 一旦应用程序没有 报告从一个,它可以设置规则到 `"error"` 在它自己的配置中 (单位:千美元)`"quickdraw/require-describe": "error"`,说)所以新代码不能添加任何. `oxlint.template.jsonc` 扩展基数并添加后三个基数.

### 哪些文件是规则检查

一个只检查该层文件的规则。 默认跟随 模板的布局。 这些规则涉及服务、工作和路线, `no-raw-socket`, (中文(简体) ), `prefer-kit` 财务报告和审定财务报表 `require-describe` 跳过测试( e)`__tests__/`, (中文(简体) ), `test/`, (中文(简体) ), `tests/`, (中文(简体) ), `*.test.*`, (中文(简体) ), `*.spec.*`哪些种子、检查和探测;其他规则检查 测试也.

| 层 | 球盖 |
| --- | --- |
| 服务 | `**/services/**` |
| 任务 | `**/jobs/**` |
| 路线 | `**/routes/**`, (中文(简体) ), `**/routes.*` |
| 客户端代码 | `**/*.tsx`, (中文(简体) ), `**/*.jsx`, (中文(简体) ), `**/apps/web/**` |

客户端代码也是任何导入的文件 `@tanstack/react-query`, (中文(简体) ), `socket.io-client` 或者说 `@fitzzero/quickdraw-core/client`,所以钩在 `.ts` 文件检查 oxlint 的出处、 应用程序根或 `apps/web` 相同; 对于客户端规则, globs 会在其中添加文件 .

每个文件范围的规则 `files` 财务报告和审定财务报表 `ignore` 光滑,与 相对于牛林运行地点的路径( 保留它们) `**/`\- 前缀 :

```jsonc
{
  "rules": {
    "quickdraw/no-unbounded-read": ["error", { "files": ["**/server/services/**"] }],
  },
}
```

其他选项: `clients` (数据库客户端的名称为: `["db", "tx"]` 写作规则,加 `prisma` 关于规则 查看数据库的电话; `modules` (未跟踪客户端的说明符) 模块) `no-untracked-write`· ; `emitters` 打开 `no-manual-emit`· ; `sockets`, (中文(简体) ), `allowedEvents` 财务报告和审定财务报表 `allowedPrefixes` 打开 `no-raw-socket`· ; `clients` (类型) 客户姓名, `["qd"]`继续 `no-untyped-client` 财务报告和审定财务报表 `no-manual-refetch`· ; `minWords` (静态描述中最少的字,默认为3) `require-describe`· ; `shared` 财务报告和审定财务报表 `allow` (单位:千美元)`{ "<service>": ["<service>/<file>"] }`继续 `no-cross-service-internal-imports`每一个规则的选项都在它的计划, 所以一个拼错的选项在启动时会失败克林特.

写作规则( :`no-untracked-write`, (中文(简体) ), `no-nested-write`, (中文(简体) ), `no-foreign-write`(中文(简体) ) 也取一个客户端的快取 `Tracked<...>` 或者说 `TrackedTransaction<...>` 担任跟踪客户,无论其名称为何:a 参数或变量,一个其模式类型给予它的已解结构绑定 1( 类型字词, 或此文件的接口或类型别名 : `{ db }: { db: Tracked<Db> }`),或 `this.<member>` 其类别宣布为(财产,或 构造器的参数属性). 类型在文件导入时计数 从 `@fitzzero/quickdraw-core` 或者说 `@fitzzero/quickdraw-core/prisma`下页 任何名称或通过命名空间导入,或通过此文件的别名类型 说吧 应用程序的一类名称 `Tracked`,或从 另一个模块(包含再导出)不读:规则查看一个文件, 而只有速战速决的型态 将客户端控制在履带式的.

## 基线

应用程序采用基础配置而不修正所有已有的违规情况 首先,快活的规则 和克林特自己的:

```bash
bunx quickdraw-lint baseline -c .oxlintrc.json   # writes .quickdraw-lint-baseline.json
```

```jsonc
// .oxlintrc.json: every rule reads the file
{
  "settings": { "quickdraw": { "baseline": ".quickdraw-lint-baseline.json" } },
}
```

```jsonc
// package.json: lint through quickdraw-lint check (per package: -c ../../.oxlintrc.json src)
{ "scripts": { "lint": "quickdraw-lint check -c .oxlintrc.json ." } }
```

`quickdraw-lint baseline` 使用您的配置运行牛林( r)`-c` 选择一个; 选项后的路径,默认情况下当前目录)并记录 a 规则、档案和散列 的线条的修剪文本。 然后,只有当 其指纹没有被记录,或者发生频率超过记录。 这么说吧 修复旧的违规情况,并在同一份文件中增加一个新的违规情况 新一条,在其行上,同时编辑文件的其他地方(移动行) 没有改变它们) 扰动什么。 禁用注释的违反 封面没有记录,也没有使用备忘,文件牛林无法解析 永远不会被记录:没有基线存在语法错误。 提交文件 .

快速画规则应用文件本身,所以简单 `oxlint` 运行( a) 编辑部也把记录的违纪事件排除在外。 牛林自己的规矩 (单位:千美元)`no-unused-vars`, (中文(简体) ), `no-shadow`,.)在本地运行,其中JS插件无法运行 联系他们: `quickdraw-lint check` 运行克林特 并留下他们的记录 也违反,所以它是一个应用程序的指针。 每一次都会传来 选项它不知道 (`-c`, (中文(简体) ), `--fix`,路径)到牛林,打印什么是 左为 `file:line:column: message [Severity/rule]` (单位:千美元)`--format json` 页:1 牛林的JSON报告,过滤,取 `--quiet`, (中文(简体) ), `--deny-warnings` 财务报告和审定财务报表 `--max-warnings <n>` 和 oxlint 一样,当错误发生时退出 1 .

记录的违规情况一旦确定,其津贴即予使用 `no-unused-baseline` 在文件的顶端警告( i)`quickdraw-lint check` 以同样方式报告牛林本身的规则未使用的津贴 基线命令再次生效,使文件缩水,没有新的信息可以带走 津贴地点。 一个规则将文件作为选项,而不是 设置 : `["error", { "baseline": ".quickdraw-lint-baseline.json" }]`A级 相对路径从每个已挂起的文件目录向上查找, 所以一个 寄存器根的文件还服务从软件包启动的 lint 运行 目录. 快速规则按着它的名字 任何其他规则按着它 代码为:

```json
{
  "version": 2,
  "files": {
    "apps/api/src/services/task.ts": {
      "eslint(no-unused-vars)": { "9a0364b9e99bb480": 1 },
      "no-unbounded-read": { "5d41402abc4b2a76": 1, "7d793037a0760186": 2 }
    }
  }
}
```

1版本文件(每个文件的计数,从早先的 5.0 预释)是 拒绝留言,说要再次写给指挥部.

## 从4.1规则

4.1规则在5.0之前不变地移到这里;5.0代替. A 类 仍然为已删除规则命名的配置无法装入, 因此删除这些名称 从您的覆盖 :

| 4.1 规则 | 5.0 (中文(简体) ) |
| --- | --- |
| `no-cross-service-mutations` | `no-foreign-write`: 所有者来自 `defineService`是因为 `model` 财务报告和审定财务报表 `writes`,所以没有允许者保留 |
| `no-direct-prisma-mutations` | `no-untracked-write` (没有) `this.create` 首选:通过 `db`(中文(简体) ) |
| `no-manual-collection-events` | `no-manual-emit` (收集从履带式写作中获得的三角洲) |
| `no-raw-socket-emit`, (中文(简体) ), `no-raw-socket-on` | `no-raw-socket`,没有针对应用程序的默认豁免 |
| `no-raw-service-room-string` | 删除:实体和收集室属于框架(`no-manual-emit` 报告 `qd:` 名称) |
| `require-zod-schema` | 删除: 宣布每一种合同方法 `input` 财务报告和审定财务报表 `output` |
| `no-service-method-record`, (中文(简体) ), `no-unsafe-payload-cast` | 删除: 没有服务类或 `defineMethod` 通用;投入由合同打出 |
| `no-raw-button-strings`, (中文(简体) ), `no-raw-tooltip-strings`, (中文(简体) ), `no-raw-typography-strings` | 移动到 `oxlint.template.jsonc` |

## 发展中国家

`bun run --filter @fitzzero/quickdraw-lint test` 运行每个规则的案件 由牛林自己负责 `RuleTester` (单位:千美元)`oxlint/plugins-dev`:克林特的剖析器和 插件运行时间, in vitest),以及 `plugin/test/oxlint.test.mjs` 运行牛林 带有已运出配置的 CLI : 每条规则必须在此报告其实例( 使用 模板配置, 核心软件包的固定程序必须通过 判断服务定义的规则和基线命令 圆通相去. `plugin/test/check.test.mjs` 运行配置路径覆盖 从应用程序根和软件包目录中,以及 `quickdraw-lint check`。 。 。 . 该插件的 `.mjs` 文档和 `bin/` 船是怎样的,没有建筑.

## 常见问题

### @fitzzero/quickdraw-lint 是什么？

oxlint 插件、 基础配置和快速绘图应用的基准命令

### 如何安装 @fitzzero/quickdraw-lint？

在项目目录运行 npm install @fitzzero/quickdraw-lint，或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖：oxlint（^1\.52\.0）。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖，Yarn 需要手动安装。它还提供命令行工具 quickdraw-lint，可以用 npx quickdraw-lint 直接运行。

### @fitzzero/quickdraw-lint 支持 TypeScript 吗？

该包的 package\.json 没有声明类型入口。需要类型提示时，可以在 npm 上查找社区维护的 @types/fitzzero\_\_quickdraw-lint 是否存在。

### @fitzzero/quickdraw-lint 支持 ESM 还是 CommonJS？

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

### @fitzzero/quickdraw-lint 需要什么版本的 Node\.js？

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

### @fitzzero/quickdraw-lint 可以商用吗？

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

### @fitzzero/quickdraw-lint 的下载量有多少？

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

### @fitzzero/quickdraw-lint 还在维护吗？

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

