@omni-api/client
v0.0.2
Published
Type-safe HTTP client for OmniAPI: zero codegen, full TS inference from server router type
Readme
@omni/client
OmniAPI 的类型安全 HTTP 客户端。零 codegen —— 类型直接从服务端 router 推导。
用法
服务端(导出类型)
// server/router.ts
import { createRouter } from '@omni/core';
export const orderRouter = createRouter({
namespace: 'order',
procedures: [createOrderProcedure, getOrderProcedure /* ... */],
});
export type AppRouter = ProcedureMap<typeof orderRouter.procedures>;客户端(自动推导)
// client.ts
import type { AppRouter } from '@my/server';
import { createClient } from '@omni/client';
const client = createClient<AppRouter>({
baseUrl: 'https://api.example.com',
headers: () => ({ authorization: `Bearer ${token}` }),
});
const order = await client.order.create({ sku: 'X1', qty: 1 });
// ^? 自动推导 { id: string; sku: string; qty: number }特性
- 零 codegen:仅靠 TS 类型推导,无需任何生成文件
- 路由派生与服务端一致:按 name 派生 path,按动词推断 method
- 错误自动转回
OmniError:捕获后能拿到code/status/details - headers 支持动态函数:每次请求重新求值,方便注入 token
resolveRoute可覆盖:业务有自定义 RESTful path 时同步策略
API
createClient<TMap>(options)- 创建客户端ProcedureMap<T>- 把服务端 router/procedure 集合转为类型映射NestedClient<TMap>- 把扁平 dot-key 转嵌套调用类型
