@route-forge/core 0.2.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,186 +0,0 @@
1
- /**
2
- * @route-forge/core 核心类型定义
3
- * @see .docs/SPEC.md §4.1.3a, §4.1.1
4
- */
5
- /**
6
- * 路由元信息(后端 /_forge/routes/{level} 返回的单条路由结构)
7
- */
8
- interface RouteMeta {
9
- /** 路由名,如 'admin.users.show' */
10
- name: string;
11
- /** 路由 URI 模板,如 'admin/users/{user}' */
12
- uri: string;
13
- /** 支持的 HTTP 方法集合,如 ['GET','HEAD'] */
14
- methods: string[];
15
- /** 路径参数名列表,如 ['user'] */
16
- parameters: string[];
17
- /** 所属层级(前端填充,便于隔离缓存) */
18
- level?: string;
19
- /** 后端下发的缓存 TTL(秒),优先级高于本地 cache.ttl */
20
- cache?: number | null;
21
- }
22
- /**
23
- * 某层级下的全部路由元信息响应
24
- */
25
- interface LevelRoutesResponse {
26
- level: string;
27
- routes: Record<string, RouteMeta>;
28
- /** 后端可选下发该层级缓存 TTL */
29
- cache?: number | null;
30
- }
31
- /**
32
- * 摘要端点响应(SPEC §3.1.6)
33
- * GET /_forge/routes 返回此结构
34
- */
35
- interface SummaryResponse {
36
- levels: Record<string, {
37
- description: string;
38
- load: 'lazy' | 'eager';
39
- cache: number | null;
40
- route_count: number;
41
- }>;
42
- config: {
43
- strict_mode: boolean;
44
- endpoint_prefix: string;
45
- };
46
- unassigned: Array<{
47
- name: string;
48
- uri: string;
49
- methods: string[];
50
- parameters: string[];
51
- }>;
52
- }
53
- /**
54
- * 请求拦截器接收/返回的配置对象(可变,返回修改后的版本)
55
- */
56
- interface RequestConfig {
57
- route: string;
58
- level: string;
59
- method: string;
60
- url: string;
61
- headers: Record<string, string>;
62
- body?: unknown;
63
- params: Record<string, unknown>;
64
- meta: RouteMeta;
65
- /** 请求超时毫秒数 */
66
- timeout?: number;
67
- /** 自定义 query 序列化函数 */
68
- paramsSerializer?: (params: Record<string, unknown>) => string;
69
- }
70
- /**
71
- * 响应拦截器首段接收的完整数据对象
72
- */
73
- interface ResponseData {
74
- route: string;
75
- level: string;
76
- method: string;
77
- url: string;
78
- status: number;
79
- headers: Headers;
80
- data: unknown;
81
- config: RequestConfig;
82
- }
83
- /**
84
- * forge.api(level, name, params) 调用参数
85
- */
86
- interface ApiCallParams {
87
- /** 路径参数:填充到 URI 模板的 {name} 占位符 */
88
- [paramName: string]: unknown;
89
- /** 查询参数,序列化到 URL query string */
90
- query?: Record<string, unknown>;
91
- /** 请求体,按 method 决定是否发送 */
92
- body?: unknown;
93
- /** 自定义请求头(与拦截器叠加) */
94
- headers?: Record<string, string>;
95
- }
96
- /**
97
- * 缓存存储介质
98
- */
99
- type CacheStorage = 'memory' | 'sessionStorage' | 'localStorage';
100
- /**
101
- * Adapter 选择值
102
- */
103
- type AdapterOption = 'auto' | 'axios' | 'builtin' | Fetcher;
104
- /**
105
- * Fetcher 接口(自定义 adapter)
106
- * @see .docs/SPEC.md §4.3.3
107
- */
108
- interface Fetcher {
109
- request(config: RequestConfig): Promise<ResponseData>;
110
- interceptors?: {
111
- request?: InterceptorManager<RequestConfig, RequestConfig>;
112
- response?: InterceptorManager<ResponseData, unknown>;
113
- };
114
- }
115
- /**
116
- * 拦截器管理器接口(与 axios use/eject/clear API 一致)
117
- *
118
- * 双类型参数说明(对应 SPEC §4.1.3a):
119
- * - 请求拦截:TIn = TOut = RequestConfig(不可变换类型,仅修改字段)
120
- * - 响应拦截:TIn = ResponseData, TOut = unknown(首段接收 ResponseData,
121
- * 后续段接收上一段返回值,返回类型由用户自行约束)
122
- */
123
- interface InterceptorManager<TIn, TOut = TIn> {
124
- use(onFulfilled?: (value: TIn) => TOut | Promise<TOut>, onRejected?: (error: unknown) => unknown | Promise<unknown>): number;
125
- eject(id: number): void;
126
- clear(): void;
127
- /** 内部使用:当前已注册拦截器快照 */
128
- forEach(fn: (handler: InterceptorHandler<TIn, TOut>) => void): void;
129
- }
130
- /**
131
- * 单个拦截器内部结构
132
- */
133
- interface InterceptorHandler<TIn, TOut = TIn> {
134
- id: number;
135
- onFulfilled?: (value: TIn) => TOut | Promise<TOut>;
136
- onRejected?: (error: unknown) => unknown | Promise<unknown>;
137
- }
138
- /**
139
- * forge 顶层 API 形状
140
- */
141
- interface RouteForge {
142
- /** 通过层级 + 路由名调用 API;level 用于确定加载哪个层级的路由元信息 */
143
- api(level: string, name: string, params?: ApiCallParams): Promise<unknown>;
144
- /** 拉取一个或多个层级(自动并发去重) */
145
- load(level: string | string[]): Promise<void>;
146
- /** 仅生成 URL,不发请求;level 用于定位路由所在的层级缓存 */
147
- route(level: string, name: string, params?: Record<string, unknown>): string;
148
- /** 失效指定层级缓存;不传参失效全部 */
149
- invalidate(level?: string): void;
150
- /** 拦截器入口(请求 / 响应) */
151
- interceptors: {
152
- request: InterceptorManager<RequestConfig, RequestConfig>;
153
- response: InterceptorManager<ResponseData, unknown>;
154
- };
155
- }
156
- /**
157
- * createRouteForge 配置项
158
- * @see .docs/SPEC.md §5.2
159
- */
160
- interface RouteForgeOptions {
161
- endpoint: string;
162
- /**
163
- * 层级列表。未传时从摘要端点自动发现(SPEC §4.1.1)。
164
- * 显式传入时取与后端摘要响应 levels 键的交集(前端不能声明后端不存在的层级,SPEC §5.3)。
165
- */
166
- levels?: string[];
167
- eager?: string[];
168
- adapter?: AdapterOption;
169
- cache?: {
170
- ttl?: number;
171
- storage?: CacheStorage;
172
- };
173
- auth?: {
174
- state?: () => boolean;
175
- levels?: Record<string, boolean>;
176
- };
177
- interceptors?: {
178
- request?: Array<[((c: RequestConfig) => RequestConfig | Promise<RequestConfig>) | undefined, ((e: unknown) => unknown | Promise<unknown>) | undefined]>;
179
- response?: Array<[((r: ResponseData) => unknown | Promise<unknown>) | undefined, ((e: unknown) => unknown | Promise<unknown>) | undefined]>;
180
- };
181
- strict?: boolean;
182
- timeout?: number;
183
- baseURL?: string;
184
- }
185
-
186
- export type { AdapterOption as A, CacheStorage as C, Fetcher as F, InterceptorManager as I, LevelRoutesResponse as L, RouteMeta as R, SummaryResponse as S, InterceptorHandler as a, RouteForgeOptions as b, RouteForge as c, ApiCallParams as d, RequestConfig as e, ResponseData as f };