Skip to content

expression.zod.ts 的方言表仍把 js 列为活方言(还写着用于 "mapping"),且漏了 template —— 12 行之下的枚举正好相反 #6085

Description

@qq9340100

发现于 #5552(退役 FieldMapping.transform)测量过程,不在该 PR 范围内(该单指令明确 ⛔ 不碰 ExpressionDialect 本体)。

事实

packages/spec/src/shared/expression.zod.ts 模块级 TSDoc 的 "## Dialects" 表(L19-23):

| dialect | engine | use |
|:---|:---|:---|
| `cel`   | `@objectstack/formula` (cel-js + ObjectStack stdlib) | formulas, predicates, seed dynamic values |
| `js`    | sandboxed L2 hook bodies (`isolated-vm` / `quickjs`) | mapping, hook bodies |
| `cron`  | `cron-parser` | job schedules |

而同文件 L42,12 行之下:

export const ExpressionDialect = z.enum(['cel', 'cron', 'template']);

表和枚举两个方向都对不上:

  1. 多了 js —— 该方言于 formula: retire the js expression dialect — redundant with L2 ScriptBody; hasDialect also mis-reports the stub as real #3278(ADR-0058 addendum)退役。讽刺的是,紧挨着枚举的那段注释自己把退役讲得很清楚("js was declared here but never shipped as an expression engine … Retired in formula: retire the js expression dialect — redundant with L2 ScriptBody; hasDialect also mis-reports the stub as real #3278"),但上方的表没跟着改。表还给它配了引擎(isolated-vm / quickjs)和用途,读起来完全像一个可选项。
  2. 少了 template —— 它是枚举的真实成员,并且有自己的 author helper(TemplateExpressionInputSchema,用于通知标题/正文、titleFormat、prompt 模板),表里却没有。

影响

模块 TSDoc 进生成文档:content/docs/references/shared/expression.mdx:32 逐字复制了这一行。所以已发布的参考页正在告诉作者 js 是一个有引擎的方言,而 ExpressionSchema 会直接拒收 dialect: 'js'。这与 #5552 是同一类缺陷(describe/文档宣传一个运行时不兑现的方言名,Prime Directive #10),只是位置在方言表本身。

表里 js 的 "use" 列还写着 mapping —— 而 #5552 / PR #6078 刚刚把字段映射的整个 transform 联合退役掉,所以这一格在该 PR 落地后会更加不成立。

建议处置

纯文档修正(改表:删 js 行、补 template 行),不动枚举与任何 schema。范围应仅限 expression.zod.ts 的 TSDoc + 重跑 gen:schema && gen:docs

需要留意的一点交给三诊:js 那行描述的能力(沙箱化 L2 hook body)本身是存在的,只是它不是 L1 expression dialect 而是 ScriptBody { language: 'js' }。所以正确的修法多半不是删一行了事,而是把它挪到一句"procedural JS 走 ScriptBody,不是 dialect"的说明里 —— 枚举旁那段现成注释已经这么写了,可直接复用措辞。

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions