@boring-stack-pkg/eslint-plugin-elysia

中文文档
0.2.0发布于 2026/09/15MITTypeScriptESM + CJS近 30 天下载 2462

为Elysia.js应用程序执行建筑,类型安全,生命周期,性能模式的ESLint插件.

中文使用文档
文档目录12 节
  1. 为什么
  2. 安装
  3. 用法(平面配置)
  4. 规则
  5. 路由- 要求- schema
  6. 需要插件名称
  7. 程序前需要呼号
  8. 无解析态- 缩写
  9. 设计说明
  10. 发展
  11. 释放
  12. 许可证

埃斯林特-插孔-埃利西亚

npm source

执行建筑、类型安全、生命周期和性能模式的 ESLint 插件 艾丽西亚.js 应用.

为什么

Elysia是一个流利而以链条为基础的框架,其正确性取决于 登记令, (中文(简体) ), 插件命名, (中文(简体) ), 计划声明,以及 平庸的环境结构解。这些限制大多无法在类型系统中表达出来 — 一个缺失的策略,一个未命名的插件,一个在路由后注册的钩子,或者 new Response() elysia会将所有类型检查都按原地顺序进行.

此插件会将那些不常态在平时固定下来 .

安装

pnpm add -D @boring-stack-pkg/eslint-plugin-elysia @typescript-eslint/parser

用法(平面配置)

// eslint.config.mjs
import tsParser from "@typescript-eslint/parser";
import elysia from "@boring-stack-pkg/eslint-plugin-elysia";

export default [
  {
    files: ["**/*.ts"],
    languageOptions: {
      parser: tsParser,
      parserOptions: { ecmaVersion: "latest", sourceType: "module" },
    },
    plugins: { elysia },
    rules: elysia.configs.recommended.rules,
  },
];

建议的预设使所有十二条规则在 "error"酌情取代个别规则:

rules: {
  ...elysia.configs.recommended.rules,
  "elysia/route-requires-tag": "warn",
  "elysia/prefer-static-services": "off",
  "elysia/no-direct-error-throw": [
    "error",
    { factoryName: "HttpErrors", factoryMethod: "make" }
  ]
}

规则

规则类别说明
route-requires-schema司马每条路线必须至少宣布其中一条 body编号 :query编号 :params编号 :response编号 :headers编号 :cookie。 。 。 .
route-requires-tag公约每条路线都要申报 detail.tags 为斯瓦格分组.
no-direct-error-throw安全(可固定)否定 throw new Error(...); 使用打入错误厂.
portable-schema-types安全问题单位 *.schemas.ts,禁止 t.Integer(), (中文(简体) ), t.Tuple() 财务报告和审定财务报表 t.Union(x.map(...)),则OpenAPI客户端无法携带.
consistent-status-via-set公约内部路由处理器, 设置状态通过 set.status = N没有 new Response(body, { status })。 。 。 .
prefer-destructured-context业绩别把整个爱丽西亚传出去 Context - 控制器/服务——在边界拆除结构.
require-plugin-name生命周期导出 new Elysia(...) 实例必须声明 { name: "..." } 为运行时间分解.
no-separate-model-interfaces公约取消重复运行时 schema 形状的 TS 接口; 使用 typeof Schema.static (或等同为一.
prefer-static-services业绩别 new Service() 内部的路由处理器,当该类无国籍.
require-hooks-before-routes生命周期全球悬钩必须在同一情况下的任何路线之前注册——爱丽西亚的瀑布对命令敏感.
prefer-throw-status公约内部的路由处理器,偏好 throw status(...) 试验/捕获 人工反应.
prefer-direct-return业绩直接返回值; 让 Elysia 序列化 。 准备金 new Response(...) 用于流和自定义标题.
no-decorate-state-collision安全问题断开重复的密钥 .decorate() 编号 : .state() 编号 : .derive() 编号 : .resolve() 在一个单一的例子.

路由- 要求- schema

// ❌
new Elysia().post("/users", create);

// ✅
new Elysia().post("/users", create, {
  body: t.Object({ email: t.String() }),
  detail: { tags: ["Users"] },
});

需要插件名称

// ❌
export const auth = new Elysia();

// ✅
export const auth = new Elysia({ name: "Auth.Plugin" });

程序前需要呼号

// ❌  onError will not fire for /health
new Elysia().get("/health", () => "ok").onError(handleError);

// ✅
new Elysia().onError(handleError).get("/health", () => "ok");

无解析态- 缩写

// ❌  silent overwrite — second decorate("db", ...) wins
new Elysia({ name: "db" }).decorate("db", a).decorate("db", b);

// ✅
new Elysia({ name: "db" }).decorate("db", buildDb()).state("requestId", "");

关于每个规则的全部选项和QQ/QQ片段,参见 docs/rules/。 。 。 .

设计说明

  • 只有AST的设计. 没有 parserServices / 类型检查器依赖性。 消费者不需要一个 parserOptions.project 设置。 规则在类型可以提供更多的信息的地方轻而易举地降解——这在"限制"下记录了每个规则
  • 家庭联系公约. 镜像 eslint-plugin-module-boundaries 财务报告和审定财务报表 eslint-plugin-drizzle-conventions: 相同的插件导出形状, 相同的 ESLintUtils.RuleCreator 工厂 相同的平面配置预设结构 相同的kebab-case规则 ids.
  • 高压规则是明确的. 没有解析器服务就无法精确化的规则(prefer-destructured-context, (中文(简体) ), no-separate-model-interfaces, (中文(简体) ), prefer-static-services, (中文(简体) ), prefer-throw-status在规则文件中记录其限制.

发展

pnpm install
pnpm test
pnpm typecheck
pnpm build

释放

标记 a v* 本地版本并按下标签.. .github/workflows/release.yml 运行 pnpm publish --access public 与 NPM_TOKEN。 。 。 .

许可证

麻省理工学院.

版本与发布记录

@boring-stack-pkg/eslint-plugin-elysia 共发布 3 个版本,首次发布于 2026/05/20;过去 12 个月发布了 3 个版本。

版本发布日期距今
0.2.0latest2026/09/151 个月前
0.1.22026/05/255 个月前
0.1.12026/05/205 个月前

关于 @boring-stack-pkg/eslint-plugin-elysia 的常见问题

@boring-stack-pkg/eslint-plugin-elysia 是什么?

为Elysia.js应用程序执行建筑,类型安全,生命周期,性能模式的ESLint插件.

如何安装 @boring-stack-pkg/eslint-plugin-elysia?

在项目目录运行 npm install @boring-stack-pkg/eslint-plugin-elysia,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:eslint(8.57.0 || ^9.0.0)、typescript(>=5.0.0)、@typescript-eslint/parser(>=8.0.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@boring-stack-pkg/eslint-plugin-elysia 支持 TypeScript 吗?

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

@boring-stack-pkg/eslint-plugin-elysia 支持 ESM 还是 CommonJS?

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

@boring-stack-pkg/eslint-plugin-elysia 需要什么版本的 Node.js?

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

@boring-stack-pkg/eslint-plugin-elysia 可以商用吗?

@boring-stack-pkg/eslint-plugin-elysia 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@boring-stack-pkg/eslint-plugin-elysia 的下载量有多少?

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

@boring-stack-pkg/eslint-plugin-elysia 还在维护吗?

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