@vlian/router 1.0.13 → 1.0.16

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 +1 @@
1
- {"version":3,"file":"transform.d.ts","sourceRoot":"","sources":["../../src/provider/transform.tsx"],"names":[],"mappings":"AAAA,OAAO,EACH,KAAK,WAAW,EAEnB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxD,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,MAAM,MAAM,qBAAqB,GAAG;IAChC,SAAS,EAAE,YAAY,CAAC;IACxB,OAAO,EAAE,YAAY,CAAC;IACtB,QAAQ,EAAE,YAAY,CAAC;IACvB,KAAK,EAAE,YAAY,CAAA;CACtB,CAAA;AACD,MAAM,MAAM,sBAAsB,GAAG;IACjC,IAAI,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IACzC,YAAY,CAAC,EAAE,SAAS,EAAE,CAAC;CAC9B,CAAA;AAGD,eAAO,MAAM,kBAAkB,GAAI,QAAQ,qBAAqB,EAAE,aAAY,MAAM,GAAG,SAAe,EAAE,UAAU,sBAAsB;;;CA4MvI,CAAA"}
1
+ {"version":3,"file":"transform.d.ts","sourceRoot":"","sources":["../../src/provider/transform.tsx"],"names":[],"mappings":"AAAA,OAAO,EACH,KAAK,WAAW,EAEnB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxD,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,MAAM,MAAM,qBAAqB,GAAG;IAChC,SAAS,EAAE,YAAY,CAAC;IACxB,OAAO,EAAE,YAAY,CAAC;IACtB,QAAQ,EAAE,YAAY,CAAC;IACvB,KAAK,EAAE,YAAY,CAAA;CACtB,CAAA;AACD,MAAM,MAAM,sBAAsB,GAAG;IACjC,IAAI,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IACzC,YAAY,CAAC,EAAE,SAAS,EAAE,CAAC;CAC9B,CAAA;AAGD,eAAO,MAAM,kBAAkB,GAAI,QAAQ,qBAAqB,EAAE,aAAY,MAAM,GAAG,SAAe,EAAE,UAAU,sBAAsB;;;CA6NvI,CAAA"}
@@ -286,7 +286,14 @@ export var useRouterTransform = function(config) {
286
286
  }
287
287
  // 获取转换配置
288
288
  function convertConfig(m) {
289
+ if (!m) {
290
+ return null;
291
+ }
289
292
  var action = m.action, loader = m.loader, shouldRevalidate = m.shouldRevalidate, Component = m.default;
293
+ // 如果 Component 不存在,记录警告
294
+ if (!Component) {
295
+ console.warn("路由组件未找到 default 导出: ".concat(name), m);
296
+ }
290
297
  return {
291
298
  action: action,
292
299
  loader: loader,
@@ -359,8 +366,9 @@ export var useRouterTransform = function(config) {
359
366
  if ((layout || isGroup) && !index) {
360
367
  return null;
361
368
  }
362
- return _object_spread_props(_object_spread({}, handle, route), {
363
- name: name
369
+ return _object_spread_props(_object_spread({}, handle), {
370
+ name: name,
371
+ path: path
364
372
  });
365
373
  }
366
374
  var reactRoute = {
@@ -370,7 +378,7 @@ export var useRouterTransform = function(config) {
370
378
  handle: getHandle(),
371
379
  lazy: function() {
372
380
  return _async_to_generator(function() {
373
- var ErrorBoundary, _tmp;
381
+ var ErrorBoundary, _$config;
374
382
  return _ts_generator(this, function(_state) {
375
383
  switch(_state.label){
376
384
  case 0:
@@ -380,21 +388,26 @@ export var useRouterTransform = function(config) {
380
388
  ];
381
389
  case 1:
382
390
  ErrorBoundary = _state.sent();
383
- _tmp = [
384
- {
385
- ErrorBoundary: ErrorBoundary === null || ErrorBoundary === void 0 ? void 0 : ErrorBoundary.default
386
- }
387
- ];
388
391
  return [
389
392
  4,
390
393
  getConfig()
391
394
  ];
392
395
  case 2:
396
+ _$config = _state.sent();
397
+ // 如果配置为空,确保至少返回一个空对象,避免展开 undefined
398
+ if (!_$config) {
399
+ return [
400
+ 2,
401
+ {
402
+ ErrorBoundary: ErrorBoundary === null || ErrorBoundary === void 0 ? void 0 : ErrorBoundary.default
403
+ }
404
+ ];
405
+ }
393
406
  return [
394
407
  2,
395
- _object_spread.apply(void 0, _tmp.concat([
396
- _state.sent()
397
- ]))
408
+ _object_spread({
409
+ ErrorBoundary: ErrorBoundary === null || ErrorBoundary === void 0 ? void 0 : ErrorBoundary.default
410
+ }, _$config)
398
411
  ];
399
412
  }
400
413
  });
@@ -1,4 +1,4 @@
1
- import { DOMRouterOpts, type MemoryRouterOpts } from 'react-router-dom';
1
+ import { DOMRouterOpts, type DataRouter, type MemoryRouterOpts } from 'react-router-dom';
2
2
  import { navigator } from "../provider";
3
3
  import React from 'react';
4
4
  import type { RouteItem } from '../types';
@@ -8,6 +8,15 @@ declare global {
8
8
  }
9
9
  }
10
10
  export type RouterMode = 'browser' | 'hash' | 'memory';
11
+ /**
12
+ * RouterProvider 通过 ref 暴露的接口
13
+ */
14
+ export interface RouterProviderRef {
15
+ /**
16
+ * 获取路由实例
17
+ */
18
+ getRouter: () => DataRouter | undefined;
19
+ }
11
20
  export type RouterProviderProps = {
12
21
  fetchRoutes: () => Promise<RouteItem[]>;
13
22
  imports: Record<string, any>;
@@ -21,5 +30,5 @@ export type RouterProviderProps = {
21
30
  loadingColor?: string;
22
31
  loadingOpacity?: number;
23
32
  };
24
- export declare const RouterProvider: React.FC<RouterProviderProps>;
33
+ export declare const RouterProvider: React.ForwardRefExoticComponent<RouterProviderProps & React.RefAttributes<RouterProviderRef>>;
25
34
  //# sourceMappingURL=router.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/router/router.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAA0G,KAAK,gBAAgB,EAAC,MAAM,kBAAkB,CAAC;AAC9K,OAAO,EAAqB,SAAS,EAAC,MAAM,aAAa,CAAC;AAC1D,OAAO,KAA4B,MAAM,OAAO,CAAC;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAI1C,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,OAAO,EAAE,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC;KACvC;CACF;AAED,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEvD,MAAM,MAAM,mBAAmB,GAAG;IAChC,WAAW,EAAE,MAAM,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IACxC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,YAAY,CAAC,EAAE,SAAS,EAAE,CAAC;IAC3B,OAAO,CAAC,EAAE,aAAa,GAAG,gBAAgB,CAAC;IAC3C,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAA;AAED,eAAO,MAAM,cAAc,EAAC,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAmEvD,CAAA"}
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/router/router.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAE,KAAK,UAAU,EAAyF,KAAK,gBAAgB,EAAC,MAAM,kBAAkB,CAAC;AAC9K,OAAO,EAAqB,SAAS,EAAC,MAAM,aAAa,CAAC;AAC1D,OAAO,KAA6D,MAAM,OAAO,CAAC;AAClF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAI1C,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,OAAO,EAAE,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC;KACvC;CACF;AAED,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEvD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,SAAS,EAAE,MAAM,UAAU,GAAG,SAAS,CAAC;CACzC;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,WAAW,EAAE,MAAM,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IACxC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,YAAY,CAAC,EAAE,SAAS,EAAE,CAAC;IAC3B,OAAO,CAAC,EAAE,aAAa,GAAG,gBAAgB,CAAC;IAC3C,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAA;AAED,eAAO,MAAM,cAAc,+FAwEzB,CAAC"}
@@ -46,10 +46,10 @@ function _unsupported_iterable_to_array(o, minLen) {
46
46
  }
47
47
  import { RouterProvider as Provider, createBrowserRouter, createHashRouter, createMemoryRouter } from 'react-router-dom';
48
48
  import { useRouterTransform, navigator } from "../provider";
49
- import React, { useState, useEffect } from 'react';
49
+ import React, { useState, useEffect, forwardRef, useImperativeHandle } from 'react';
50
50
  import { staticRoutes as defaultStaticRoutes } from './routes';
51
51
  import { useSquareRotate2Styles } from '../styles/square-rotate';
52
- export var RouterProvider = function(param) {
52
+ export var RouterProvider = /*#__PURE__*/ forwardRef(function(param, ref) {
53
53
  var fetchRoutes = param.fetchRoutes, imports = param.imports, _param_rootRoutes = param.rootRoutes, rootRoutes = _param_rootRoutes === void 0 ? '/' : _param_rootRoutes, _param_staticRoutes = param.staticRoutes, staticRoutes = _param_staticRoutes === void 0 ? defaultStaticRoutes : _param_staticRoutes, options = param.options, _param_routerMode = param.routerMode, routerMode = _param_routerMode === void 0 ? 'browser' : _param_routerMode, _param_isSubApp = param.isSubApp, isSubApp = _param_isSubApp === void 0 ? false : _param_isSubApp, loadingRender = param.loadingRender, _param_loadingSize = param.loadingSize, loadingSize = _param_loadingSize === void 0 ? '24px' : _param_loadingSize, _param_loadingColor = param.loadingColor, loadingColor = _param_loadingColor === void 0 ? 'currentColor' : _param_loadingColor, _param_loadingOpacity = param.loadingOpacity, loadingOpacity = _param_loadingOpacity === void 0 ? 0.25 : _param_loadingOpacity;
54
54
  var _useState = _sliced_to_array(useState(), 2), dataRouter = _useState[0], setDataRouter = _useState[1];
55
55
  var styles = useSquareRotate2Styles().styles;
@@ -88,6 +88,16 @@ export var RouterProvider = function(param) {
88
88
  options,
89
89
  isSubApp
90
90
  ]);
91
+ // 通过 ref 暴露路由实例
92
+ useImperativeHandle(ref, function() {
93
+ return {
94
+ getRouter: function() {
95
+ return dataRouter;
96
+ }
97
+ };
98
+ }, [
99
+ dataRouter
100
+ ]);
91
101
  if (!routeObject || !dataRouter) {
92
102
  return /*#__PURE__*/ React.createElement("div", {
93
103
  className: "w-full h-full flex-center",
@@ -110,4 +120,5 @@ export var RouterProvider = function(param) {
110
120
  return /*#__PURE__*/ React.createElement(Provider, {
111
121
  router: dataRouter
112
122
  });
113
- };
123
+ });
124
+ RouterProvider.displayName = 'RouterProvider';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vlian/router",
3
- "version": "1.0.13",
3
+ "version": "1.0.16",
4
4
  "description": "基于 React Router 的路由管理包,支持动态路由、权限控制、路由转换等功能",
5
5
  "keywords": [
6
6
  "router",