Skip to content
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
This repository was archived by the owner on Nov 4, 2026. It is now read-only.

spec v17 下一个 rc 将移除 @objectstack/spec/ui 的 HttpMethod 导出 —— @object-ui/types 需迁移(一行,零形状变化) #3235

Closed

Description

@os-zhuang

背景

objectstack 侧 spec 双源清账 C14(objectstack-ai/objectstack#4691,#4535 v17 账最后一条)将从 @objectstack/spec/ui 移除 HttpMethod 这个类型导出。原因:该名字在 spec 包内指向两个不同类型 —— ./shared / ./api 的 7 值枚举(含 HEAD / OPTIONS)与 ./ui 的 5 值 UI 子集 —— 拿到哪个只取决于 import 路径(#4411 陷阱),且两侧连取值集合都不同,无法用 re-export 收敛(那会让 ./ui 的类型对 5 值的 HttpRequestSchema.method 运行时说谎)。5 值类型继续以既有名字 HttpMethodType 从 ./ui 与 ./shared 导出,形状零变化;HttpMethodSchema(const)不受影响。

对本仓的影响

本仓依赖 @objectstack/spec: ^17.0.0-rc.1(区间覆盖后续 rc),spec 发布下一个含该变更的 v17 rc 后,packages/types typecheck 将以 TS2305 失败:

  • packages/types/src/objectql.ts:35 — export type { HttpMethod } from '@objectstack/spec/ui';(唯一直接消费点,type-only)
  • 经 packages/types/src/index.ts:329 再导出为 @object-ui/types 公共表面
  • 仓内下游:packages/core/src/adapters/ApiDataSource.ts:18(从 @object-ui/types 导入,用作 method?: HttpMethod,语义就是 5 值)

export type * as UI from '@objectstack/spec/ui'(index.ts:932)不受影响(仓内无 UI.HttpMethod 用法);spec-subschema-parity.test.ts 只比较 HttpMethodSchema const,不受影响。apps/console 的 HttpMethod 是本地声明,无关。

迁移选项

A(推荐,解破且零下游影响):

// packages/types/src/objectql.ts
export type { HttpMethodType as HttpMethod } from '@objectstack/spec/ui';

@object-ui/types 公共表面不变,下游(ApiDataSource 等)零改动,类型形状逐字相同。代价:本仓继续以 HttpMethod 命名 5 值类型,与 spec ./shared 的 7 值 HttpMethod 名同型异 —— 即把 spec 刚清掉的命名分歧保留在本仓边界上(仓内无双源,但跨包读者仍需分辨)。

B(彻底,但破坏本仓公共表面): 跟随 spec 命名,把 @object-ui/types 的导出改名为 HttpMethodType(或将来 spec 若按 objectstack#4691 尾注改成 ViewHttpMethod,一并跟随),同步改 ApiDataSource.ts 等仓内用法。需要按本仓版本策略走破坏性发布。

维护者定夺;A 可先行止血,B 可等 spec 侧 5 值命名收敛(objectstack#4691 尾注,未立项)有结论后一次到位。

参考

Activity

  1. os-zhuang commented on Aug 3, 2026

    @os-zhuang
    ContributorAuthor

    分诊(主 backlog PM 代管 objectui 分片,session_015Br2xsJsczFsTR9bvbh2Ny):


    Generated by Claude Code

  2. xuyushun441-sys commented on Aug 3, 2026

    @xuyushun441-sys
    Contributor

    pin-bump PR 清单增补(维护者 2026-08-03 裁决产物)

    判据不变:以 lockfile 实际解析版本为准,而非 ^ 区间。


    Generated by Claude Code


    Generated by Claude Code

  3. xuyushun441-sys commented on Aug 3, 2026

    @xuyushun441-sys
    Contributor

    清单增补(#3301/PR #3302 验收产物)

    • 2 行 JSDoc 更新:packages/types/src/field-types.ts 里 mobile_fullscreen 的「Consumer: TextAreaField」已过时——feat(fields): RichTextField honors mobile_fullscreen with a fullscreen editing dialog (#3301) #3302 后消费者是 TextAreaField + RichTextField。声明比实现窄正是 declared-vs-actual 漂移的反向形态,且 types JSDoc 是 AI 生成元数据时的权威读物。随本清单的 pin-bump PR 顺手改(该 PR 本就动 packages/types),不为 2 行注释单开 PR。

    Generated by Claude Code


    Generated by Claude Code

  4. xuyushun441-sys commented on Aug 3, 2026

    @xuyushun441-sys
    Contributor

    认领并派发 —— rc.2 已发布,触发条件达成

    会话 session_01NVPjPzmmAJ2Ngtvgg5MSRa,分支 claude/issue-3235-spec-rc2-pin-bump。本单为 pin-bump 轮的主单,与 #3208、#3287 同一 PR(拆开会产生 CI 必红的中间态:抬 pin 与修复破坏不可分离提交)。

    触发判据已满足

    @objectstack/spec@17.0.0-rc.2 已发布上 npm(dist-tag rc = 17.0.0-rc.2)。本仓 lockfile 当前仍解析到 17.0.0-rc.1,30 个 package.json 声明 ^17.0.0-rc.1。

    rc.1 → rc.2 实测破坏面(api-surface 机械求交,非人工估计)

    包级:303 处 per-entry 导出移除,其中 221 个名字整包消失。对本仓求交后命中 5 处:

    名字 入口 位置 性质
    HttpMethod ./ui packages/types/src/objectql.ts:35 移出该入口(./ui 侧改名 HttpMethodType)——本单
    Notification ./ui packages/types/src/index.ts 移出该入口,现归 ./api
    NotificationConfig ./ui packages/types/src/index.ts 整包消失,需定替代
    ValidationResult ./contracts packages/sdui-parser/src/__tests__/spec-symbol-batch7.test.ts 移出该入口
    MetadataSaveOptions ./kernel packages/data-objectstack/src/spec-symbol-batch6.test.ts 移出该入口

    ⚠️ 这份清单只覆盖导出名消失,不覆盖形状变化(.strict() 收紧、枚举收窄、签名转 async)。实际范围以 typecheck + 全量测试为准,清单只用于交叉验证「有没有漏」。

    方法论提示:我第一遍扫描只匹配 import … from,漏掉了 export … from 再导出形式,对 HttpMethod 报了假阴性;修正后才得到上表。派发的工单已要求实施侧独立复核。

    本单处置:选项 A

    // packages/types/src/objectql.ts:35
    export type { HttpMethodType as HttpMethod } from '@objectstack/spec/ui';

    @object-ui/types 公共表面不变,ApiDataSource.ts 等下游零改动,形状逐字相同。选项 B(跟随改名 + 破坏本仓表面)留待 spec 侧 5 值命名收敛(objectstack#4691 尾注)有结论后一次到位。

    清单结算


    Generated by Claude Code


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions