@aurelienbbn/oxlint-plugin-alchemy

中文文档
0.1.1发布于 2026/10/14MITTypeScriptES Module构建来源已验证近 30 天下载 2073

自定义为 Alchemy v2( 基础设施作为效果) 堆栈和运行时间的 oxlint 规则 .

中文使用文档
文档目录4 节
  1. 什么火吗
  2. 限制
  3. 登记的合同库存
  4. 信用概念

@aurelienbn/oxlint-plugin-alchemy (英语)

npm downloads CI license node

4 oxlint rules for Alchemy v2(基础设施作为效果):代码,用于进行打字检查和部署,然后因为运行在错误的相位或错误的范围而行为不当.

[注] 释放候选人. 已核对 alchemy 2.0.0-β.79 (英语). 还没有消费者校正过.

pnpm add -D @aurelienbbn/oxlint-plugin-alchemy oxlint   # oxlint >=1.82.0 <2.0.0
{
  "jsPlugins": ["@aurelienbbn/oxlint-plugin-alchemy"],
  "rules": {
    "alchemy/config-in-init": "error",
    "alchemy/no-disposable-in-instance-scope": "error",
    "alchemy/worker-env-secret-literal": "error",
    "alchemy/workflow-io-outside-task": "error"
  }
}

无预设. 无自定义 : 每个定律都需要一个选择(在读取值的地方,资源生活的地方,步骤的名称),所以每个规则只报告.

什么火吗

export default Cloudflare.Worker(
  "Api",
  { main: import.meta.url, env: { STRIPE_SECRET: "sk_live_..." } }, // ❌ worker-env-secret-literal: bound as plain_text
  Effect.gen(function* () {
    const pool = yield* Effect.acquireRelease(openPool, close); // ❌ no-disposable-in-instance-scope: never released on workerd
    const apiKey = yield* Config.Redacted("API_KEY"); // ✅ read in the init, so Alchemy binds it
    return {
      fetch: Effect.gen(function* () {
        const host = yield* Config.String("HOST"); // ❌ config-in-init: never bound, missing at runtime
        const again = yield* Config.Redacted("API_KEY"); // ✅ already bound by the init
      }),
    };
  }),
);

export class Sync extends Cloudflare.Workflow<Sync>()(
  "Sync",
  Effect.gen(function* () {
    const kv = yield* Cloudflare.KV.ReadWriteNamespace(KV);
    return Effect.fn(function* (input: { id: string }) {
      yield* kv.put(input.id, "started"); // ❌ workflow-io-outside-task: runs again on every replay
      yield* Cloudflare.Workflows.task("store", kv.put(input.id, "done")); // ✅ checkpointed
    });
  }),
) {}
每项规则的确切触发因素和范围
规则* 开火匹配/ QQ 跳过
config-in-initConfig.<constructor>(..., "KEY") (单位:千美元)String, (中文(简体) ), Redacted, (中文(简体) ), Number, (中文(简体) ), Port, (中文(简体) ), schema,...; 效果 3 小写名称也)在 init 中返回的内容(内含,或 const Effect.gen 编号 : Effect.fn 通过引用返回的处理器:处理器、 RPC 方法、 持久对象实例效应、 工作流程正文qq 密钥也在内或内读 env 同一声明的道具, 值为输入 yield*s 在返回对象内部或运行本身(yield* warmup),非升键
no-disposable-in-instance-scopeEffect.acquireRelease, (中文(简体) ), Effect.acquireDisposable, (中文(简体) ), Effect.addFinalizer 最近的函数是运行时的 init 生成器,或者每个对象的构造器 持久对象 init 返回* 处理者和方法(活动范围) Effect.scoped(...), (中文(简体) ), Effect.acquireUseRelease (释放自己),助手功能
worker-env-secret-literal非空字符串文字,模板文字, process.env.X,或一个 ?? 编号 : || 倒置一个,作为云花板工人中密钥的值 env 道具匹配密钥 secretPattern (默认) SECRET, (中文(简体) ), TOKEN, (中文(简体) ), PASSWORD, (中文(简体) ), API_KEY, (中文(简体) ), PRIVATE_KEY, (中文(简体) ), DSN, (中文(简体) ), DATABASE_URL,(......)而不是(......) benignPattern (默认) PUBLIC, (中文(简体) ), PUBLISHABLE, (中文(简体) ), _TTL, (中文(简体) ), _NAME, . . ) ⏭️ Config.*, (中文(简体) ), Redacted.make, (中文(简体) ), ""
workflow-io-outside-task调用方法 const x = yield* <Alchemy binding> (任何从 alchemy/*直接由Workflow机构制作的Workflow int.(Effect.fn(...), (中文(简体) ), Effect.fn(name)(...),或箭头返回 Effect.gen(中文(简体) )里面有电话 Cloudflare.Workflows.task(...) 参数(效果和回滚),调用嵌入式函数,接收器来自您自己的服务

运行时间在战术上得到承认: Cloudflare.Worker, (中文(简体) ), Cloudflare.DurableObject, (中文(简体) ), Cloudflare.Workflow 财务报告和审定财务报表 AWS.Lambda.Function,调用内线(X(id, props, init)),类别形式(X<Self>()(id, props, init)),或作为 Tag.make(props, init) 在同一文件中声明的标签类。 输入必须写为 Effect.gen(...) 或者说 Effect.succeed(...)可选的管道.

限制

  • 单文件视图. 由另一个文件所建的、通过标识符传递的或由图层构成的索引是无形的。 A 类 Tag.make 在从另一个文件导入的标签上不被识别.
  • config-in-init 假阳性 : 报告受不同声明约束的密钥(图层,工作流的主机工人)。 压制行,或读 键在这个init.
  • workflow-io-outside-task 故意缩小: 只有直接通话 yield* 炼金术绑定; I/O 通过您自己的服务或助手功能不被看到.
  • 其他炼金平台 (ECS, Containers, Railway, Fly,.)不被承认:他们的镜形语义不同(服务器在优雅的出道上运行最终确定器).
没有运出,谁拥有它
关切拥有者
秘密名称 Config.String 改为 Config.Redactedeffect/require-redacted-secret-config 内 @aurelienbbn/oxlint-plugin-effect
Date.now(), (中文(简体) ), Math.random()效果@effect/tsgo (单位:千美元)global-date*, (中文(简体) ), global-random*, (中文(简体) ), global-timers-in-effect(中文(简体) )
本地语言 WorkflowEntrypoint 决定主义,秘密比较@aurelienbbn/oxlint-plugin-cloudflare
具有约束力的存在, Env 类型、部署有效性炼金术本身的类型和 alchemy deploy

资信: 每个规则都独立执行由Alchemy所记录的行为(alchemy-run/alchemy,Apache-2.0):Secrets & Config, runtime(Intance size vs request size), Cloudflare Workers) env 绑定, Cloudflare Workflows 重放语义; 没有文档文本或代码复制 .

登记的合同库存

从软件包导出 pnpm catalog. 规则特定选项和限制在上文和源测试中都有描述.

规则/检查触发或审查范围
config-in-init要求处理器、 持久对象实例或由 Alchemy runtime init 返回的工作流程正文中读取效果/ 压缩密钥, 也可以在 init 本身中读取, 在部署时, Alchemy 将它们绑起 .
no-disposable-in-instance-scopeForbid Effect.access Release, Effect.access Disposable and Effect. 在其返回的处理器之外,在Alchemy runtime init(Cloudflare Worker,持久对象,工作流量,AWS Lambda函数)中直接添加最终处理器.
worker-env-secret-literalForbid 字符串字元,模板字元和进程. env读取为密名密钥(SECRET,TOKEN,PASSWORD,API KEY,DSN,.)在一个Alchemy Cloudflare Worker的内嵌道具中被用Config绑定. 已编辑或已编辑值 .
workflow-io-outside-task要求在Cloudflare Workflow init(KV, R2, D1, 持久对象. )中使用Alchemy生成的装订方式。 Workflow.task () 直接在 Workflow 机体中完成 .

信用概念

版本与发布记录

@aurelienbbn/oxlint-plugin-alchemy 共发布 2 个版本,首次发布于 2026/09/28;过去 12 个月发布了 2 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.1.1latest2026/10/1424 天前
0.1.02026/09/281 个月前

关于 @aurelienbbn/oxlint-plugin-alchemy 的常见问题

@aurelienbbn/oxlint-plugin-alchemy 是什么?

自定义为 Alchemy v2( 基础设施作为效果) 堆栈和运行时间的 oxlint 规则 .

如何安装 @aurelienbbn/oxlint-plugin-alchemy?

在项目目录运行 npm install @aurelienbbn/oxlint-plugin-alchemy,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:oxlint(>=1.82.0 <2.0.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@aurelienbbn/oxlint-plugin-alchemy 支持 TypeScript 吗?

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

@aurelienbbn/oxlint-plugin-alchemy 支持 ESM 还是 CommonJS?

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

@aurelienbbn/oxlint-plugin-alchemy 需要什么版本的 Node.js?

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

@aurelienbbn/oxlint-plugin-alchemy 可以商用吗?

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

@aurelienbbn/oxlint-plugin-alchemy 的下载量有多少?

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

@aurelienbbn/oxlint-plugin-alchemy 还在维护吗?

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