Skip to content

Latest commit

 

History

History
31 lines (26 loc) · 2.01 KB

File metadata and controls

31 lines (26 loc) · 2.01 KB
@objectstack/lint minor

feat(lint): 视图 searchableFields 按运行时同一套判定做构建期校验 —— 一个 lookup 笔误不再等到 400 才暴露 (#4830)

视图(list view)的 searchableFields 会被客户端逐字回显为 $searchFields 覆盖参数,而 REST 入口闸(#4254)会用 resolveSearchFieldResolution(@objectstack/spec/data)判定 该对象的可搜索集合 —— 声明一个 lookup 等「不可搜索」字段,运行时会把整条查询 400 (INVALID_FIELD),列表工具栏搜索对全体角色彻底不可用。此前 compile/validate 只查 字段存在性,这类笔误全绿放行,只能靠人肉点搜索框发现。

新增规则 searchable-field-unsearchable(error 级,新导出常量同名):对每个视图级 narrowing(对象内建 listViewsdefineViewlist/listViews、react 页面的 <ListView searchableFields>)按运行时同一个函数(resolveSearchFieldResolution, 非复制的类型清单,杜绝再度漂移)判定 declared = enforced:

  • 对象未声明 searchableFields(auto 源):视图里出现 lookup/json/hidden/审计列等 auto-default 拒绝的字段 → 构建期 error,信息含类型与 400 后果,lookup 给出「镜像到本 对象 text/formula 字段」的处方;
  • 对象已声明(declared 源):视图条目超出对象声明集合 → 构建期 error(视图只能收窄、 不能放宽,ADR-0061);
  • 对象自身的 searchableFields(canonical)维持只查存在性:运行时 declared 分支按 存在过滤、不按类型过滤,声明即被引擎执行,构建期拒绝会误伤运行时接受的元数据 (ADR-0072 D1);
  • 注册表注入的系统列在 narrowing 中跳过判定(其运行时元数据对 linter 不可见,宁可漏报 不可误报)。

内部核心 checkSearchableFieldList / indexObjectSearchTargets(模块级导出,未入包 barrel)签名有变:索引值从 Set<string> | null 变为 ObjectSearchTarget | null,并新增 可选 role: 'canonical' | 'narrowing'(默认 'narrowing')参数。