Skip to content

spec 把 5 值 HTTP 方法子集改名(HttpMethodSchema → HttpMethodSubsetSchema、HttpMethodType → HttpMethodSubset),packages/types 两处 import 需跟名 #3499

Description

@qq9340100

在 objectstack#5832(PR objectstack-ai/objectstack#5976)实施过程中实证发现的下游跟名项。现在还不红 —— 本仓消费的是已发布的 @objectstack/spec,等它升到含该改名的版本时才会断。

上游改了什么

packages/spec/src/shared/http.zod.ts 在同一个文件里声明了两个内容不同的 enum,而它们经 schemaNameFromExportKey 剥掉 Schema 后缀后同名(HttpMethod 7 值 / HttpMethodSchema 5 值,都发布成 shared/HttpMethod),后写覆盖前写,导致发布出去的 JSON Schema 与参考页只描述了 5 值那份。修法是把 5 值那份改名:

改前 改后
schema const HttpMethodSchema HttpMethodSubsetSchema
类型别名 HttpMethodType HttpMethodSubset

7 值的 HttpMethod(裸名)与其值域一字未动;5 值那份的运行时值域也一字未动,只是换了名字。

本仓要改的两处

  • packages/types/src/zod/objectql.zod.ts:26import { HttpMethodSchema as SpecHttpMethodSchema } from '@objectstack/spec/...',以及 :41export const HttpMethodSchema = SpecHttpMethodSchema;
  • packages/types/src/objectql.ts:44export type { HttpMethodType as HttpMethod } from '@objectstack/spec/ui';(该行上方 :36 的注释也提到 HttpMethodType,一并更新)

packages/types/src/__tests__/spec-subschema-parity.test.ts:30,49,71 也 import 了 HttpMethodSchema,跟着改即可。

⚠️ 不要把 import 换成 spec 的 HttpMethod 而保留本仓对外的名字不动。 spec 的 HttpMethod7 值那一个;换过去会把本仓对外暴露的类型悄悄放宽两个值(多出 HEAD/OPTIONS),而 HttpRequestSchema.method 运行时仍只接受 5 值 —— method: 'HEAD' 会通过编译、在 .parse() 抛错。这正是 objectstack#4691 当初拒绝合并这两个名字的理由。只跟名,不改跨包语义。

时机

@objectstack/spec 升到含 objectstack-ai/objectstack#5976 的版本(v17 rc 线)时一并做;在此之前本仓保持现状即可。

Blocked-by: objectstack-ai/objectstack#5832


Generated by Claude Code

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions