import type { DataRecord, FileCreateParams, FileCreateResult, RequestOptions, ResponseData } from '../types/index.js'; import type { BuiltinActionMeta, BuiltinModuleName } from '../modules/generated.js'; type BuiltinActionName = Extract; type BuiltinListRequestName = BuiltinModuleName; type BuiltinNamedRequestName = { [M in BuiltinModuleName]: `${M}/${BuiltinActionName}`; }[BuiltinModuleName]; type BuiltinIdRequestName = `${BuiltinModuleName}/${number}`; /** 内置模块支持的请求名:`module`、`module/action` 或 `module/123`。 */ export type BuiltinRequestName = BuiltinListRequestName | BuiltinNamedRequestName | BuiltinIdRequestName; type ModuleNameOf = Name extends `${infer M}/${string}` ? Extract : Extract; type ActionNameOf = Name extends `${string}/${infer A}` ? A extends `${number}` ? 'get' : A : 'list'; type ActionMetaOf = ModuleNameOf extends infer M extends BuiltinModuleName ? ActionNameOf extends infer A ? A extends keyof BuiltinActionMeta[M] ? BuiltinActionMeta[M][A] : { resultType: 'object'; } : never : never; /** 根据内置请求名推导出的参数类型。字段细节以运行时 registry 为准,这里保持可扩展。 */ export type RequestParamsFor = Name extends 'file/create' ? FileCreateParams : Record; /** 根据内置请求名推导出的 `ResponseData.data` 类型。 */ export type RequestResultFor = ActionMetaOf extends { resultType: 'list'; } ? DataRecord[] : Name extends 'file/create' ? FileCreateResult : ActionMetaOf extends { resultType: 'object'; } ? DataRecord : unknown; /** * 按模块名或模块动作名请求禅道 API。 * * 选项优先级为:本次调用 options > 全局 options > 客户端默认值。 * 当响应 `status` 为 `"fail"` 时,默认按原样返回;若 `options.throwOnFail` * 或全局 `throwOnFail` 为真,则改为抛出 `E_API_FAILED`。 * * 对 `update` 动作,当 `options.autoFill` 或全局 `autoFill` 为真时,会先 GET 当前对象, * 用现值补齐用户未显式传入的 body 字段后再 PUT,避免禅道覆盖未提交字段。详见 {@link RequestOptions.autoFill}。 * * @typeParam T 期望的 `data` 字段类型;不传时为 `unknown`,调用方需要自行收窄。 * @param name - 请求名,例如 `product`、`product/list` 或 `product/1`。 * @param params - 请求参数。 * @param options - 请求选项。 * @returns 归一化后的禅道 API 响应。 * @throws {ZentaoError} 传输层错误、参数缺失或 `throwOnFail` 启用时的业务失败。 */ export declare function request(name: Name, params?: RequestParamsFor, options?: RequestOptions): Promise>>; export declare function request(name: string, params?: Record, options?: RequestOptions): Promise>; export {};