在 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:26 — import { HttpMethodSchema as SpecHttpMethodSchema } from '@objectstack/spec/...',以及 :41 的 export const HttpMethodSchema = SpecHttpMethodSchema;
packages/types/src/objectql.ts:44 — export 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 的 HttpMethod 是 7 值那一个;换过去会把本仓对外暴露的类型悄悄放宽两个值(多出 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
在 objectstack#5832(PR objectstack-ai/objectstack#5976)实施过程中实证发现的下游跟名项。现在还不红 —— 本仓消费的是已发布的
@objectstack/spec,等它升到含该改名的版本时才会断。上游改了什么
packages/spec/src/shared/http.zod.ts在同一个文件里声明了两个内容不同的 enum,而它们经schemaNameFromExportKey剥掉Schema后缀后同名(HttpMethod7 值 /HttpMethodSchema5 值,都发布成shared/HttpMethod),后写覆盖前写,导致发布出去的 JSON Schema 与参考页只描述了 5 值那份。修法是把 5 值那份改名:HttpMethodSchemaHttpMethodSubsetSchemaHttpMethodTypeHttpMethodSubset7 值的
HttpMethod(裸名)与其值域一字未动;5 值那份的运行时值域也一字未动,只是换了名字。本仓要改的两处
packages/types/src/zod/objectql.zod.ts:26—import { HttpMethodSchema as SpecHttpMethodSchema } from '@objectstack/spec/...',以及:41的export const HttpMethodSchema = SpecHttpMethodSchema;packages/types/src/objectql.ts:44—export type { HttpMethodType as HttpMethod } from '@objectstack/spec/ui';(该行上方:36的注释也提到HttpMethodType,一并更新)packages/types/src/__tests__/spec-subschema-parity.test.ts:30,49,71也 import 了HttpMethodSchema,跟着改即可。HttpMethod而保留本仓对外的名字不动。 spec 的HttpMethod是 7 值那一个;换过去会把本仓对外暴露的类型悄悄放宽两个值(多出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