@route-forge/core 1.2.2 → 1.3.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.
@@ -256,14 +256,9 @@ interface RouteForge {
256
256
  isLoaded(level?: string): boolean;
257
257
  /** 检查指定层级下某路由是否存在(需该层级缓存已加载) */
258
258
  hasRoute(level: string, name: string): boolean;
259
- /**
260
- * 查询加载中标识状态
261
- */
259
+ /** 查询加载中标识状态 */
262
260
  isLoading(): boolean;
263
- /**
264
- * 订阅加载状态变更
265
- * @returns 取消订阅函数
266
- */
261
+ /** 订阅加载状态变更,返回取消订阅函数 */
267
262
  onLoadingChange(cb: LoadingChangeCallback): () => void;
268
263
  /**
269
264
  * 获取路由元信息快照(深拷贝,修改返回值不影响内部缓存)。
@@ -278,16 +273,24 @@ interface RouteForge {
278
273
  response: InterceptorManager<ResponseData, unknown>;
279
274
  };
280
275
  /**
281
- * Promise,auto-discovery + eager load 完成后 resolve。
282
- * 推荐用法:await forge.ready 后再调用 route() / hasRoute() 等同步方法。
276
+ * auto-discovery + eager load 完成后 resolve。
277
+ * 始终返回 Promise<this>,resolve 值为 forge 实例自身,支持链式调用。
278
+ *
279
+ * - 无参:返回 Promise,适合 async/await
280
+ * - 有参:回调内部走 then/catch,仍返回 Promise
283
281
  */
284
- ready: Promise<void>;
282
+ ready(): Promise<RouteForge>;
283
+ ready(onFulfilled: (forge: RouteForge) => void, onRejected?: (error: unknown) => void): Promise<RouteForge>;
285
284
  /**
286
- * 订阅指定层级路由元数据加载完成事件。
287
- * 框架层(Vue/React)用于驱动响应式状态更新。
288
- * @returns 取消订阅函数
285
+ * 绑定 level(+ 可选 prefix),返回 BoundForge。
286
+ * 唯一入口 — Vue/React/IIFE 共享同一套 API 表面。
287
+ *
288
+ * - use():不绑定,返回 RouteForge 自身
289
+ * - use(level):绑定 level
290
+ * - use(level, prefix):绑定 level + prefix
289
291
  */
290
- onLevelLoaded(level: string, cb: () => void): () => void;
292
+ use(): RouteForge;
293
+ use<L extends string>(level: L, prefix?: string): BoundForge;
291
294
  }
292
295
  /**
293
296
  * createRouteForge 配置项
@@ -369,46 +372,35 @@ type ForgeApiResponse<L extends string, N extends string> = [
369
372
  response: infer R;
370
373
  } ? R : unknown) : unknown : unknown;
371
374
  /**
372
- * 已绑定 level 时的共享方法集。
373
- * @typeParam L - 层级名(string literal)
374
- * @typeParam LevelLoaded - 框架层加载状态类型(Vue: Ref<boolean>, React: boolean)
375
+ * 已绑定 level 的 forge 对象。
376
+ * `forge.use(level, prefix?)` 返回,Vue/React/IIFE 共享同一 API 表面。
377
+ *
378
+ * @typeParam LL - levelLoaded 的类型:core 默认 Promise<void>,Vue 替换为 Ref<boolean>
375
379
  */
376
- interface BoundForgeMethods<L extends string = string, LevelLoaded = unknown> {
377
- /** 指定层级的路由元数据是否已加载完成(类型由框架层决定) */
378
- levelLoaded: LevelLoaded;
379
- api(name: ForgeRouteName<L>, params?: ForgeApiParams<L, ForgeRouteName<L>>): Promise<ForgeApiResponse<L, ForgeRouteName<L>>>;
380
- route(name: ForgeRouteName<L>, params?: ForgeApiParams<L, ForgeRouteName<L>>): string;
381
- url(name: ForgeRouteName<L>, params?: ForgeApiParams<L, ForgeRouteName<L>>): string;
382
- load(level: string | string[]): Promise<void>;
383
- invalidate(level?: string | string[]): void;
384
- isLoaded(level?: string): boolean;
385
- hasRoute(level: string, name: string): boolean;
386
- /** 查询加载中标识状态 */
387
- isLoading(): boolean;
388
- /** 订阅加载状态变更,返回取消订阅函数 */
389
- onLoadingChange(cb: LoadingChangeCallback): () => void;
390
- /** 获取指定层级下全部路由元信息(深拷贝,修改不影响内部缓存) */
391
- getRoutes(level: string): Record<string, RouteMeta>;
392
- }
393
- /** 已绑定 level — 可直接调用(= api 快捷方式),无需传 level */
394
- interface BoundForgeTyped<L extends string, LevelLoaded = unknown> extends BoundForgeMethods<L, LevelLoaded> {
395
- /** 当前绑定的 level 值 */
396
- readonly level: L;
397
- /** 路由名前缀(仅在传入 prefix 时存在) */
380
+ interface BoundForge<LL = Promise<void>> {
381
+ /** 直接调用 = api 快捷方式,自动带绑定的 level */
382
+ (name: string, params?: ApiCallParams): Promise<unknown>;
383
+ /** 当前绑定的 level */
384
+ readonly level: string;
385
+ /** 绑定的路由名前缀(仅传入 prefix 时存在) */
398
386
  readonly prefix?: string;
399
- /** 直接调用 = forge.api() 快捷方式,自动带绑定的 level */
400
- (name: ForgeRouteName<L>, params?: ForgeApiParams<L, ForgeRouteName<L>>): Promise<ForgeApiResponse<L, ForgeRouteName<L>>>;
401
- }
402
- /** 未绑定 level 直接调用需要传 level(不提供 route/url/hasRoute/getRoutes 等同步方法) */
403
- interface ForgeInstanceTyped {
404
- ready: Promise<void>;
405
- api(level: string, name: string, params?: ApiCallParams): Promise<unknown>;
406
- load(level: string | string[]): Promise<void>;
407
- invalidate(level?: string | string[]): void;
408
- isLoaded(level?: string): boolean;
387
+ /** level 加载状态(core: Promise<void>,Vue: Ref<boolean>) */
388
+ levelLoaded: LL;
389
+ api(name: string, params?: ApiCallParams): Promise<unknown>;
390
+ route(name: string, params?: Record<string, unknown>): string;
391
+ url(name: string, params?: Record<string, unknown>): string;
392
+ hasRoute(name: string): boolean;
393
+ getRoutes(): Record<string, RouteMeta>;
394
+ load(): Promise<void>;
395
+ invalidate(): void;
396
+ isLoaded(): boolean;
409
397
  isLoading(): boolean;
410
398
  onLoadingChange(cb: LoadingChangeCallback): () => void;
411
- onLevelLoaded(level: string, cb: () => void): () => void;
399
+ /** 等待绑定的 level 加载完成,resolve 值为自身(BoundForge),保证可安全调用 */
400
+ onLevelLoaded(): Promise<BoundForge<LL>>;
401
+ onLevelLoaded(onFulfilled: (bound: BoundForge<LL>) => void, onRejected?: (error: unknown) => void): Promise<BoundForge<LL>>;
402
+ /** 在已绑定 level 基础上追加/替换 prefix,返回新的 BoundForge */
403
+ useRoutePrefix(prefix: string): BoundForge<LL>;
412
404
  }
413
405
  /** call 函数签名 — 未绑定 level,需要显式传入 */
414
406
  interface UseForgeApiCall {
@@ -451,4 +443,4 @@ interface UseForgeByPrefixReturn {
451
443
  route: (suffix: string, params?: Record<string, unknown>) => string;
452
444
  }
453
445
 
454
- export { type AdapterOption as A, type BoundForgeMethods as B, type CacheStorage as C, type Fetcher as F, type InterceptorManager as I, type LevelRoutesResponse as L, type RouteMeta as R, type SummaryResponse as S, type UseForgeApiBoundCall as U, type InterceptorHandler as a, type RouteForgeOptions as b, type RouteForge as c, type ApiCallParams as d, type BoundForgeTyped as e, type ForgeApiParams as f, type ForgeApiResponse as g, type ForgeInstanceTyped as h, type ForgeRouteMap as i, type ForgeRouteName as j, type LoadingChangeCallback as k, type LoadingChangeEvent as l, LoadingTracker as m, type RequestConfig as n, type ResponseData as o, type UseForgeApiBoundReturn as p, type UseForgeApiCall as q, type UseForgeApiReturn as r, type UseForgeByPrefixReturn as s };
446
+ export { type AdapterOption as A, type BoundForge as B, type CacheStorage as C, type Fetcher as F, type InterceptorManager as I, type LevelRoutesResponse as L, type RouteMeta as R, type SummaryResponse as S, type UseForgeApiBoundCall as U, type InterceptorHandler as a, type RouteForgeOptions as b, type RouteForge as c, type ApiCallParams as d, type ForgeApiParams as e, type ForgeApiResponse as f, type ForgeRouteMap as g, type ForgeRouteName as h, type LoadingChangeCallback as i, type LoadingChangeEvent as j, LoadingTracker as k, type RequestConfig as l, type ResponseData as m, type UseForgeApiBoundReturn as n, type UseForgeApiCall as o, type UseForgeApiReturn as p, type UseForgeByPrefixReturn as q };
@@ -256,14 +256,9 @@ interface RouteForge {
256
256
  isLoaded(level?: string): boolean;
257
257
  /** 检查指定层级下某路由是否存在(需该层级缓存已加载) */
258
258
  hasRoute(level: string, name: string): boolean;
259
- /**
260
- * 查询加载中标识状态
261
- */
259
+ /** 查询加载中标识状态 */
262
260
  isLoading(): boolean;
263
- /**
264
- * 订阅加载状态变更
265
- * @returns 取消订阅函数
266
- */
261
+ /** 订阅加载状态变更,返回取消订阅函数 */
267
262
  onLoadingChange(cb: LoadingChangeCallback): () => void;
268
263
  /**
269
264
  * 获取路由元信息快照(深拷贝,修改返回值不影响内部缓存)。
@@ -278,16 +273,24 @@ interface RouteForge {
278
273
  response: InterceptorManager<ResponseData, unknown>;
279
274
  };
280
275
  /**
281
- * Promise,auto-discovery + eager load 完成后 resolve。
282
- * 推荐用法:await forge.ready 后再调用 route() / hasRoute() 等同步方法。
276
+ * auto-discovery + eager load 完成后 resolve。
277
+ * 始终返回 Promise<this>,resolve 值为 forge 实例自身,支持链式调用。
278
+ *
279
+ * - 无参:返回 Promise,适合 async/await
280
+ * - 有参:回调内部走 then/catch,仍返回 Promise
283
281
  */
284
- ready: Promise<void>;
282
+ ready(): Promise<RouteForge>;
283
+ ready(onFulfilled: (forge: RouteForge) => void, onRejected?: (error: unknown) => void): Promise<RouteForge>;
285
284
  /**
286
- * 订阅指定层级路由元数据加载完成事件。
287
- * 框架层(Vue/React)用于驱动响应式状态更新。
288
- * @returns 取消订阅函数
285
+ * 绑定 level(+ 可选 prefix),返回 BoundForge。
286
+ * 唯一入口 — Vue/React/IIFE 共享同一套 API 表面。
287
+ *
288
+ * - use():不绑定,返回 RouteForge 自身
289
+ * - use(level):绑定 level
290
+ * - use(level, prefix):绑定 level + prefix
289
291
  */
290
- onLevelLoaded(level: string, cb: () => void): () => void;
292
+ use(): RouteForge;
293
+ use<L extends string>(level: L, prefix?: string): BoundForge;
291
294
  }
292
295
  /**
293
296
  * createRouteForge 配置项
@@ -369,46 +372,35 @@ type ForgeApiResponse<L extends string, N extends string> = [
369
372
  response: infer R;
370
373
  } ? R : unknown) : unknown : unknown;
371
374
  /**
372
- * 已绑定 level 时的共享方法集。
373
- * @typeParam L - 层级名(string literal)
374
- * @typeParam LevelLoaded - 框架层加载状态类型(Vue: Ref<boolean>, React: boolean)
375
+ * 已绑定 level 的 forge 对象。
376
+ * `forge.use(level, prefix?)` 返回,Vue/React/IIFE 共享同一 API 表面。
377
+ *
378
+ * @typeParam LL - levelLoaded 的类型:core 默认 Promise<void>,Vue 替换为 Ref<boolean>
375
379
  */
376
- interface BoundForgeMethods<L extends string = string, LevelLoaded = unknown> {
377
- /** 指定层级的路由元数据是否已加载完成(类型由框架层决定) */
378
- levelLoaded: LevelLoaded;
379
- api(name: ForgeRouteName<L>, params?: ForgeApiParams<L, ForgeRouteName<L>>): Promise<ForgeApiResponse<L, ForgeRouteName<L>>>;
380
- route(name: ForgeRouteName<L>, params?: ForgeApiParams<L, ForgeRouteName<L>>): string;
381
- url(name: ForgeRouteName<L>, params?: ForgeApiParams<L, ForgeRouteName<L>>): string;
382
- load(level: string | string[]): Promise<void>;
383
- invalidate(level?: string | string[]): void;
384
- isLoaded(level?: string): boolean;
385
- hasRoute(level: string, name: string): boolean;
386
- /** 查询加载中标识状态 */
387
- isLoading(): boolean;
388
- /** 订阅加载状态变更,返回取消订阅函数 */
389
- onLoadingChange(cb: LoadingChangeCallback): () => void;
390
- /** 获取指定层级下全部路由元信息(深拷贝,修改不影响内部缓存) */
391
- getRoutes(level: string): Record<string, RouteMeta>;
392
- }
393
- /** 已绑定 level — 可直接调用(= api 快捷方式),无需传 level */
394
- interface BoundForgeTyped<L extends string, LevelLoaded = unknown> extends BoundForgeMethods<L, LevelLoaded> {
395
- /** 当前绑定的 level 值 */
396
- readonly level: L;
397
- /** 路由名前缀(仅在传入 prefix 时存在) */
380
+ interface BoundForge<LL = Promise<void>> {
381
+ /** 直接调用 = api 快捷方式,自动带绑定的 level */
382
+ (name: string, params?: ApiCallParams): Promise<unknown>;
383
+ /** 当前绑定的 level */
384
+ readonly level: string;
385
+ /** 绑定的路由名前缀(仅传入 prefix 时存在) */
398
386
  readonly prefix?: string;
399
- /** 直接调用 = forge.api() 快捷方式,自动带绑定的 level */
400
- (name: ForgeRouteName<L>, params?: ForgeApiParams<L, ForgeRouteName<L>>): Promise<ForgeApiResponse<L, ForgeRouteName<L>>>;
401
- }
402
- /** 未绑定 level 直接调用需要传 level(不提供 route/url/hasRoute/getRoutes 等同步方法) */
403
- interface ForgeInstanceTyped {
404
- ready: Promise<void>;
405
- api(level: string, name: string, params?: ApiCallParams): Promise<unknown>;
406
- load(level: string | string[]): Promise<void>;
407
- invalidate(level?: string | string[]): void;
408
- isLoaded(level?: string): boolean;
387
+ /** level 加载状态(core: Promise<void>,Vue: Ref<boolean>) */
388
+ levelLoaded: LL;
389
+ api(name: string, params?: ApiCallParams): Promise<unknown>;
390
+ route(name: string, params?: Record<string, unknown>): string;
391
+ url(name: string, params?: Record<string, unknown>): string;
392
+ hasRoute(name: string): boolean;
393
+ getRoutes(): Record<string, RouteMeta>;
394
+ load(): Promise<void>;
395
+ invalidate(): void;
396
+ isLoaded(): boolean;
409
397
  isLoading(): boolean;
410
398
  onLoadingChange(cb: LoadingChangeCallback): () => void;
411
- onLevelLoaded(level: string, cb: () => void): () => void;
399
+ /** 等待绑定的 level 加载完成,resolve 值为自身(BoundForge),保证可安全调用 */
400
+ onLevelLoaded(): Promise<BoundForge<LL>>;
401
+ onLevelLoaded(onFulfilled: (bound: BoundForge<LL>) => void, onRejected?: (error: unknown) => void): Promise<BoundForge<LL>>;
402
+ /** 在已绑定 level 基础上追加/替换 prefix,返回新的 BoundForge */
403
+ useRoutePrefix(prefix: string): BoundForge<LL>;
412
404
  }
413
405
  /** call 函数签名 — 未绑定 level,需要显式传入 */
414
406
  interface UseForgeApiCall {
@@ -451,4 +443,4 @@ interface UseForgeByPrefixReturn {
451
443
  route: (suffix: string, params?: Record<string, unknown>) => string;
452
444
  }
453
445
 
454
- export { type AdapterOption as A, type BoundForgeMethods as B, type CacheStorage as C, type Fetcher as F, type InterceptorManager as I, type LevelRoutesResponse as L, type RouteMeta as R, type SummaryResponse as S, type UseForgeApiBoundCall as U, type InterceptorHandler as a, type RouteForgeOptions as b, type RouteForge as c, type ApiCallParams as d, type BoundForgeTyped as e, type ForgeApiParams as f, type ForgeApiResponse as g, type ForgeInstanceTyped as h, type ForgeRouteMap as i, type ForgeRouteName as j, type LoadingChangeCallback as k, type LoadingChangeEvent as l, LoadingTracker as m, type RequestConfig as n, type ResponseData as o, type UseForgeApiBoundReturn as p, type UseForgeApiCall as q, type UseForgeApiReturn as r, type UseForgeByPrefixReturn as s };
446
+ export { type AdapterOption as A, type BoundForge as B, type CacheStorage as C, type Fetcher as F, type InterceptorManager as I, type LevelRoutesResponse as L, type RouteMeta as R, type SummaryResponse as S, type UseForgeApiBoundCall as U, type InterceptorHandler as a, type RouteForgeOptions as b, type RouteForge as c, type ApiCallParams as d, type ForgeApiParams as e, type ForgeApiResponse as f, type ForgeRouteMap as g, type ForgeRouteName as h, type LoadingChangeCallback as i, type LoadingChangeEvent as j, LoadingTracker as k, type RequestConfig as l, type ResponseData as m, type UseForgeApiBoundReturn as n, type UseForgeApiCall as o, type UseForgeApiReturn as p, type UseForgeByPrefixReturn as q };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@route-forge/core",
3
- "version": "1.2.2",
3
+ "version": "1.3.0",
4
4
  "description": "框架无关的命名路由客户端核心:分级懒加载、隔离缓存、并发去重、拦截器",
5
5
  "license": "MIT",
6
6
  "author": "阿杰很厉害 <506907958@qq.com>",