@fukict/router 0.1.11 → 0.1.13

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.
package/README.md CHANGED
@@ -14,6 +14,7 @@ SPA router for Fukict framework with nested routing, lazy loading, and navigatio
14
14
  - **Link Component**: Declarative navigation with automatic active states
15
15
  - **Programmatic Navigation**: `push()`, `replace()`, `back()`, `forward()` methods
16
16
  - **Route Meta**: Attach custom metadata to routes
17
+ - **Child Component Access**: `useRouter()` / `useRoute()` helpers for non-RouteComponent children
17
18
 
18
19
  ## Installation
19
20
 
@@ -515,6 +516,62 @@ const routes = [
515
516
  ];
516
517
  ```
517
518
 
519
+ ## Child Component Route Access
520
+
521
+ Non-RouteComponent children can access routing context via `useRouter()` and `useRoute()` helpers.
522
+
523
+ ### useRouter / useRoute
524
+
525
+ ```tsx
526
+ import { Fukict } from '@fukict/basic';
527
+ import { useRouter, useRoute } from '@fukict/router';
528
+
529
+ // Read route info in a regular child component
530
+ class Breadcrumb extends Fukict {
531
+ render() {
532
+ const route = useRoute(this);
533
+ return <nav>Current: {route.path}</nav>;
534
+ }
535
+ }
536
+
537
+ // Programmatic navigation from a child component
538
+ class NavButton extends Fukict<{ to: string }> {
539
+ private handleClick = () => {
540
+ useRouter(this).push(this.props.to);
541
+ };
542
+
543
+ render() {
544
+ return <button on:click={this.handleClick}>Navigate</button>;
545
+ }
546
+ }
547
+
548
+ // Use inside a RouteComponent page
549
+ class DashboardPage extends RouteComponent {
550
+ render() {
551
+ return (
552
+ <div>
553
+ <Breadcrumb />
554
+ <NavButton to="/settings" />
555
+ </div>
556
+ );
557
+ }
558
+ }
559
+ ```
560
+
561
+ ### How It Works
562
+
563
+ 1. Traverses the component's `_parent` chain to find the nearest `RouteComponent` ancestor
564
+ 2. Returns that ancestor's `router` instance (supports nested routes correctly)
565
+ 3. Falls back to `Router.getInstance()` (global singleton)
566
+ 4. Throws an error if no Router is found
567
+
568
+ ### When to Use
569
+
570
+ | Approach | Use Case |
571
+ | ------------------------------------ | ----------------------------------------------- |
572
+ | `RouteComponent` | Page components directly matched by routes |
573
+ | `useRouter(this)` / `useRoute(this)` | Regular child components that need route access |
574
+
518
575
  ## Best Practices
519
576
 
520
577
  ### 1. Use RouteComponent Base Class
@@ -1 +1 @@
1
- {"version":3,"file":"Link.d.ts","sourceRoot":"","sources":["../src/Link.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,KAAK,EAAK,MAAM,eAAe,CAAC;AAGtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzC;;;;GAIG;AACH,qBAAa,IAAK,SAAQ,MAAM,CAAC,SAAS,CAAC;IACzC;;OAEG;IACH,OAAO,CAAC,SAAS;IAIjB;;OAEG;IACH,OAAO,CAAC,SAAS;IAkCjB;;OAEG;IACH,OAAO,CAAC,SAAS;IAqBjB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAahB;;OAEG;IACH,OAAO,CAAC,aAAa;IAYrB;;OAEG;IACH,OAAO,CAAC,WAAW,CAiBjB;IAEF;;OAEG;IACH,MAAM,IAAI,KAAK;CAuChB"}
1
+ {"version":3,"file":"Link.d.ts","sourceRoot":"","sources":["../src/Link.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,KAAK,EAAK,MAAM,eAAe,CAAC;AAItD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzC;;;;GAIG;AACH,qBAAa,IAAK,SAAQ,MAAM,CAAC,SAAS,CAAC;IACzC;;OAEG;IACH,OAAO,CAAC,SAAS;IAQjB;;OAEG;IACH,OAAO,CAAC,SAAS;IAkCjB;;OAEG;IACH,OAAO,CAAC,SAAS;IAqBjB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAahB;;OAEG;IACH,OAAO,CAAC,aAAa;IAYrB;;OAEG;IACH,OAAO,CAAC,WAAW,CAiBjB;IAEF;;OAEG;IACH,MAAM,IAAI,KAAK;CAuChB"}
package/dist/Link.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { Fukict, h } from '@fukict/basic';
2
- import { Router } from './Router';
2
+ import { useRouter } from './helpers';
3
3
  /**
4
4
  * Link 组件
5
5
  *
@@ -10,7 +10,12 @@ export class Link extends Fukict {
10
10
  * 获取 Router 实例
11
11
  */
12
12
  getRouter() {
13
- return Router.getInstance();
13
+ try {
14
+ return useRouter(this);
15
+ }
16
+ catch {
17
+ return null;
18
+ }
14
19
  }
15
20
  /**
16
21
  * 构建完整路径
package/dist/Link.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Link.js","sourceRoot":"","sources":["../src/Link.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAc,CAAC,EAAE,MAAM,eAAe,CAAC;AAEtD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAGlC;;;;GAIG;AACH,MAAM,OAAO,IAAK,SAAQ,MAAiB;IACzC;;OAEG;IACK,SAAS;QACf,OAAO,MAAM,CAAC,WAAW,EAAE,CAAC;IAC9B,CAAC;IAED;;OAEG;IACK,SAAS;QACf,MAAM,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QAE1B,IAAI,OAAO,EAAE,KAAK,QAAQ,EAAE,CAAC;YAC3B,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,GAAG,CAAC;QACb,CAAC;QAED,IAAI,IAAI,GAAG,EAAE,CAAC,IAAI,IAAI,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC;QAE/C,SAAS;QACT,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC;YACb,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;YACrC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;gBACpD,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAC5B,CAAC;YACD,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;YACtC,IAAI,WAAW,EAAE,CAAC;gBAChB,IAAI,IAAI,GAAG,GAAG,WAAW,CAAC;YAC5B,CAAC;QACH,CAAC;QAED,UAAU;QACV,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;YACZ,IAAI,IAAI,EAAE,CAAC,IAAI,CAAC;QAClB,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACK,SAAS;QACf,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAEhC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC;QACd,CAAC;QAED,mCAAmC;QACnC,sBAAsB;QACtB,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAE/B,2BAA2B;QAC3B,IAAI,OAAO,IAAI,OAAO,CAAC,WAAW,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;YAC1D,OAAO,IAAI,IAAI,EAAE,CAAC;QACpB,CAAC;QAED,mBAAmB;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACK,QAAQ;QACd,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QACpC,MAAM,WAAW,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC;QAE7C,uBAAuB;QACvB,OAAO,WAAW,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACK,aAAa;QACnB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QACpC,MAAM,WAAW,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC;QAE7C,OAAO,WAAW,KAAK,UAAU,CAAC;IACpC,CAAC;IAED;;OAEG;IACK,WAAW,GAAG,CAAC,CAAQ,EAAQ,EAAE;QACvC,SAAS;QACT,CAAC,CAAC,cAAc,EAAE,CAAC;QAEnB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO;QACT,CAAC;QAED,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QAEnC,KAAK;QACL,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACrB,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC;IAEF;;OAEG;IACH,MAAM;QACJ,MAAM,EACJ,WAAW,GAAG,oBAAoB,EAClC,gBAAgB,GAAG,0BAA0B,GAC9C,GAAG,IAAI,CAAC,KAAK,CAAC;QAEf,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QACjC,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QAE3C,cAAc;QACd,MAAM,OAAO,GAAa,CAAC,aAAa,CAAC,CAAC;QAE1C,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACrB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC;QAED,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC5B,CAAC;QAED,IAAI,aAAa,EAAE,CAAC;YAClB,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACjC,CAAC;QAED,OAAO,CAAC,CACN,GAAG,EACH;YACE,IAAI;YACJ,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;YACxB,UAAU,EAAE,IAAI,CAAC,WAAW;SAC7B,EACD,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;YAChC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO;YACrB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO;gBACnB,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;gBACvB,CAAC,CAAC,EAAE,CACT,CAAC;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"Link.js","sourceRoot":"","sources":["../src/Link.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import type { Fukict } from '@fukict/basic';
2
+ import { Router } from './Router';
3
+ import type { Route } from './types';
4
+ /**
5
+ * 获取最近的 Router 实例
6
+ *
7
+ * 查找顺序:
8
+ * 1. 遍历 _parent 链查找最近的 RouteComponent,返回其 router
9
+ * 2. 回退到 Router.getInstance()(全局单例)
10
+ * 3. 都找不到则抛出错误
11
+ *
12
+ * @example
13
+ * ```tsx
14
+ * class ChildComponent extends Fukict {
15
+ * goTo(path: string) {
16
+ * useRouter(this).push(path);
17
+ * }
18
+ * }
19
+ * ```
20
+ */
21
+ export declare function useRouter(component: Fukict): Router;
22
+ /**
23
+ * 获取当前路由对象
24
+ *
25
+ * 查找顺序与 useRouter 相同,返回当前路由信息
26
+ *
27
+ * @example
28
+ * ```tsx
29
+ * class ChildComponent extends Fukict {
30
+ * render() {
31
+ * const route = useRoute(this);
32
+ * return <div>Current path: {route.path}</div>;
33
+ * }
34
+ * }
35
+ * ```
36
+ */
37
+ export declare function useRoute(component: Fukict): Route;
38
+ //# sourceMappingURL=helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAG5C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAgBrC;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAcnD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,KAAK,CAEjD"}
@@ -0,0 +1,62 @@
1
+ import { RouteComponent } from './RouteComponent';
2
+ import { Router } from './Router';
3
+ /**
4
+ * 从组件的 _parent 链中查找最近的 RouteComponent 祖先
5
+ */
6
+ function findRouteComponent(component) {
7
+ let current = component._parent;
8
+ while (current) {
9
+ if (current instanceof RouteComponent) {
10
+ return current;
11
+ }
12
+ current = current._parent;
13
+ }
14
+ return null;
15
+ }
16
+ /**
17
+ * 获取最近的 Router 实例
18
+ *
19
+ * 查找顺序:
20
+ * 1. 遍历 _parent 链查找最近的 RouteComponent,返回其 router
21
+ * 2. 回退到 Router.getInstance()(全局单例)
22
+ * 3. 都找不到则抛出错误
23
+ *
24
+ * @example
25
+ * ```tsx
26
+ * class ChildComponent extends Fukict {
27
+ * goTo(path: string) {
28
+ * useRouter(this).push(path);
29
+ * }
30
+ * }
31
+ * ```
32
+ */
33
+ export function useRouter(component) {
34
+ const routeComponent = findRouteComponent(component);
35
+ if (routeComponent) {
36
+ return routeComponent.router;
37
+ }
38
+ const instance = Router.getInstance();
39
+ if (instance) {
40
+ return instance;
41
+ }
42
+ throw new Error('[fukict-router] No Router found. Ensure the component is rendered within a RouterView or a Router instance exists.');
43
+ }
44
+ /**
45
+ * 获取当前路由对象
46
+ *
47
+ * 查找顺序与 useRouter 相同,返回当前路由信息
48
+ *
49
+ * @example
50
+ * ```tsx
51
+ * class ChildComponent extends Fukict {
52
+ * render() {
53
+ * const route = useRoute(this);
54
+ * return <div>Current path: {route.path}</div>;
55
+ * }
56
+ * }
57
+ * ```
58
+ */
59
+ export function useRoute(component) {
60
+ return useRouter(component).currentRoute;
61
+ }
62
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAGlC;;GAEG;AACH,SAAS,kBAAkB,CAAC,SAAiB;IAC3C,IAAI,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;IAChC,OAAO,OAAO,EAAE,CAAC;QACf,IAAI,OAAO,YAAY,cAAc,EAAE,CAAC;YACtC,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAC5B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,SAAS,CAAC,SAAiB;IACzC,MAAM,cAAc,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;IACrD,IAAI,cAAc,EAAE,CAAC;QACnB,OAAO,cAAc,CAAC,MAAM,CAAC;IAC/B,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;IACtC,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,MAAM,IAAI,KAAK,CACb,oHAAoH,CACrH,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,QAAQ,CAAC,SAAiB;IACxC,OAAO,SAAS,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC;AAC3C,CAAC"}
package/dist/index.d.ts CHANGED
@@ -9,6 +9,7 @@ export { RouteComponent } from './RouteComponent';
9
9
  export { RouterProvider } from './RouterProvider';
10
10
  export { RouterView } from './RouterView';
11
11
  export { Link } from './Link';
12
+ export { useRouter, useRoute } from './helpers';
12
13
  export { RouteMatcher } from './matcher';
13
14
  export { createHistory, HashHistory, BrowserHistory } from './history';
14
15
  export type { IHistory, HistoryListener } from './history';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,YAAY,EACV,WAAW,EACX,KAAK,EACL,UAAU,EACV,SAAS,EACT,QAAQ,EACR,eAAe,EACf,UAAU,EACV,aAAa,EACb,mBAAmB,EACnB,UAAU,EACV,mBAAmB,EACnB,eAAe,EACf,SAAS,GACV,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGlD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAG9B,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACvE,YAAY,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,YAAY,EACV,WAAW,EACX,KAAK,EACL,UAAU,EACV,SAAS,EACT,QAAQ,EACR,eAAe,EACf,UAAU,EACV,aAAa,EACb,mBAAmB,EACnB,UAAU,EACV,mBAAmB,EACnB,eAAe,EACf,SAAS,GACV,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGlD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAG9B,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAGhD,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACvE,YAAY,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC"}
package/dist/index.js CHANGED
@@ -10,6 +10,8 @@ export { RouteComponent } from './RouteComponent';
10
10
  export { RouterProvider } from './RouterProvider';
11
11
  export { RouterView } from './RouterView';
12
12
  export { Link } from './Link';
13
+ // 导出辅助函数
14
+ export { useRouter, useRoute } from './helpers';
13
15
  // 导出工具类(可选)
14
16
  export { RouteMatcher } from './matcher';
15
17
  export { createHistory, HashHistory, BrowserHistory } from './history';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAmBH,QAAQ;AACR,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO;AACP,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAE9B,YAAY;AACZ,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAmBH,QAAQ;AACR,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO;AACP,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAE9B,SAAS;AACT,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAEhD,YAAY;AACZ,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC"}
@@ -4,7 +4,7 @@
4
4
  */
5
5
  export declare const METADATA: {
6
6
  readonly name: "@fukict/router";
7
- readonly version: "0.1.11";
7
+ readonly version: "0.1.13";
8
8
  readonly description: "Router for Fukict framework with nested routing and lazy loading";
9
9
  readonly author: "Fukict Team";
10
10
  readonly license: "MIT";
package/dist/metadata.js CHANGED
@@ -3,12 +3,12 @@
3
3
  * Auto-generated by extract-metadata.ts - DO NOT EDIT MANUALLY
4
4
  */
5
5
  export const METADATA = {
6
- name: '@fukict/router',
7
- version: '0.1.11',
8
- description: 'Router for Fukict framework with nested routing and lazy loading',
9
- author: 'Fukict Team',
10
- license: 'MIT',
11
- homepage: '',
12
- repository: 'https://github.com/fukict/fukict.git',
6
+ name: "@fukict/router",
7
+ version: "0.1.13",
8
+ description: "Router for Fukict framework with nested routing and lazy loading",
9
+ author: "Fukict Team",
10
+ license: "MIT",
11
+ homepage: "",
12
+ repository: "https://github.com/fukict/fukict.git",
13
13
  };
14
14
  //# sourceMappingURL=metadata.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fukict/router",
3
- "version": "0.1.11",
3
+ "version": "0.1.13",
4
4
  "description": "Router for Fukict framework with nested routing and lazy loading",
5
5
  "keywords": [
6
6
  "fukict",
@@ -40,7 +40,7 @@
40
40
  "registry": "https://registry.npmjs.org/"
41
41
  },
42
42
  "dependencies": {
43
- "@fukict/basic": "0.1.11"
43
+ "@fukict/basic": "0.1.13"
44
44
  },
45
45
  "devDependencies": {
46
46
  "typescript": "^5.6.3"