Skip to content

[finding][drivers] 五个驱动的 find/count/… 仍声明 query: QueryAST,而调用方已可省略 object —— 双变让它编译,但声明开始说谎 #6075

Description

@qq9340100

Blocked-by: #5181

#5181IDataDriver 的 query 参数收窄为 DriverQuery(即 Omit< QueryAST, 'object' >)之后留下的机械收尾。#5181 的派单明确 ⛔ 不改 driver 代码,故单独记录。

现状(实测)

契约侧六个方法(find / findOne / count / updateMany / deleteMany / explain)的 query 参数已经是 DriverQuery;五个驱动的实现仍旧写 query: QueryAST

  • packages/drivers/driver-memory/src/memory-driver.ts:283,342,444,469,502
  • packages/drivers/driver-mongodb/src/mongodb-driver.ts:236,248,366,437,455,544
  • packages/drivers/driver-sql/src/sql-driver.ts:2091,2251,2825,2837,2876
  • packages/drivers/driver-sqlite-wasm(继承 sql 侧)
  • packages/drivers/driver-turso/src/turso-driver.ts:499,504,535,863,870(这些是 query: any,另一种形态的同一问题)

这不是红的,也不会红:方法参数按双变比较,所以实现声明得比契约宽照样满足契约。全仓 pnpm typecheck 125/125 绿,就是在这个前提下拿到的。

为什么仍是一笔账

调用方现在有权省略 object(这正是 #5181 的目的)。于是一个声明 query: QueryAST 的实现,其类型说 query.objectstring,而运行时它可能是 undefined。今天没有人踩到,因为实测五个驱动没有一个读 query.object

grep -rn "query\.object" packages/drivers/*/src --include=*.ts   # 零命中

sql-driver.ts:2414r.objectsys_sequence 的行列,turso/remote-transport.tss.object 是 schema 批同步的入参,都不是 query AST。)

所以这是休眠的类型谎言,不是活体缺陷:下一个在驱动里写 query.object 的人会拿到一个编译期看着是 string、运行期是 undefined 的值,而没有任何门会拦他。

建议范围

把五个驱动的这些签名从 QueryAST / any 换成 DriverQuery(从 @objectstack/spec/contracts 导入),一轮翻完。翻完之后「驱动读 query.object」直接变成编译错误,谎言就没了藏身处。纯机械,无运行时变化,turso 那几处 any 顺手一并收紧还能多拿回一批检查。

按观察类记录、不挂 pm:queue,请分诊轮定级。

会话:session_011M7UwH25Unfi73UHim7ajY#5181 实施期间发现,未认领)


Generated by Claude Code

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions