@uxf/router 2.0.2 → 2.1.1
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 +31 -2
- package/Router.d.ts +2 -2
- package/Router.js +15 -19
- package/package.json +2 -2
- package/types.d.ts +26 -14
package/README.md
CHANGED
|
@@ -31,12 +31,17 @@ export const router = new UxfRouter<RouteList>({
|
|
|
31
31
|
```
|
|
32
32
|
|
|
33
33
|
```ts
|
|
34
|
-
|
|
34
|
+
// routes/index.ts
|
|
35
|
+
import { RouteList, router } from "./routes";
|
|
36
|
+
import { PropsGenerator, FunctionParametersGenerator, UxfNextPage } from "@uxf/router";
|
|
35
37
|
|
|
36
38
|
export const Link = router.getLink();
|
|
37
39
|
export const useRouter = router.getUseRouter();
|
|
38
40
|
export const Router = router.getSingletonRouter();
|
|
39
|
-
|
|
41
|
+
|
|
42
|
+
export type RouteProps = PropsGenerator<RouteList>;
|
|
43
|
+
export type RouteParams = FunctionParametersGenerator<RouteList>;
|
|
44
|
+
export type NextPage<Route extends keyof RouteList, IP = Record<string, any>, P = IP> = UxfNextPage<RouteList, Route, IP, P>;
|
|
40
45
|
```
|
|
41
46
|
|
|
42
47
|
Add configuration to `tsconfig.json`
|
|
@@ -54,6 +59,30 @@ Add configuration to `tsconfig.json`
|
|
|
54
59
|
}
|
|
55
60
|
```
|
|
56
61
|
|
|
62
|
+
## Typings
|
|
63
|
+
|
|
64
|
+
### Function
|
|
65
|
+
|
|
66
|
+
```ts
|
|
67
|
+
import { RouteList } from "@app-routes";
|
|
68
|
+
import { FunctionParametersGenerator } from "@uxf/router";
|
|
69
|
+
|
|
70
|
+
const navigate: (...attrs: FunctionParametersGenerator<RouteList>) => void = (route, params = undefined) => {
|
|
71
|
+
// implement me
|
|
72
|
+
}
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### Component
|
|
76
|
+
|
|
77
|
+
```ts
|
|
78
|
+
import { RouteList } from "@app-routes";
|
|
79
|
+
import { PropsGenerator } from "@uxf/router";
|
|
80
|
+
|
|
81
|
+
const SomeComponent: React.FC<PropsGenerator<RouteList>> = (props) => {
|
|
82
|
+
// implement me
|
|
83
|
+
}
|
|
84
|
+
```
|
|
85
|
+
|
|
57
86
|
## How to use Link?
|
|
58
87
|
|
|
59
88
|
```tsx
|
package/Router.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import { LinkProps, UxfRouter, UxfSingletonRouter } from "./types";
|
|
2
|
+
import { FunctionParametersGenerator, LinkProps, UxfRouter, UxfSingletonRouter } from "./types";
|
|
3
3
|
export declare class Router<T> {
|
|
4
4
|
private routes;
|
|
5
5
|
constructor(routes: {
|
|
@@ -9,5 +9,5 @@ export declare class Router<T> {
|
|
|
9
9
|
getLink: () => React.FC<LinkProps<T>>;
|
|
10
10
|
getUseRouter: () => () => UxfRouter<T>;
|
|
11
11
|
getSingletonRouter: () => UxfSingletonRouter<T>;
|
|
12
|
-
getUrlByRoute: (
|
|
12
|
+
getUrlByRoute: (...attrs: FunctionParametersGenerator<T>) => string;
|
|
13
13
|
}
|
package/Router.js
CHANGED
|
@@ -57,38 +57,34 @@ var Router = /** @class */ (function () {
|
|
|
57
57
|
return Object.keys(_this.routes).find(function (route) { return _this.routes[route] === pathname; });
|
|
58
58
|
};
|
|
59
59
|
this.getLink = function () { return function (props) {
|
|
60
|
-
|
|
61
|
-
var route = props.route, params = props.params, anchor = props.anchor, linkProps = __rest(props, ["route", "params", "anchor"]);
|
|
60
|
+
var route = props.route, params = props.params, linkProps = __rest(props, ["route", "params"]);
|
|
62
61
|
return react_1.default.createElement(link_1.default, __assign({ href: { pathname: _this.routes[route], query: params } }, linkProps));
|
|
63
62
|
}; };
|
|
64
63
|
this.getUseRouter = function () { return function () {
|
|
65
64
|
var router = (0, router_1.useRouter)();
|
|
66
65
|
return __assign(__assign({}, router), { route: _this.getRouteByPathname(router.pathname), push: function (route, params, options) {
|
|
67
|
-
if (
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
return router.push({ pathname: _this.routes[route], query: params }, undefined, nextJsOptions);
|
|
66
|
+
if (params === void 0) { params = undefined; }
|
|
67
|
+
if (options === void 0) { options = undefined; }
|
|
68
|
+
return router.push({ pathname: _this.routes[route], query: params }, undefined, options);
|
|
71
69
|
}, replace: function (route, params, options) {
|
|
72
|
-
if (
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
return router.replace({ pathname: _this.routes[route], query: params }, undefined, nextJsOptions);
|
|
70
|
+
if (params === void 0) { params = undefined; }
|
|
71
|
+
if (options === void 0) { options = undefined; }
|
|
72
|
+
return router.replace({ pathname: _this.routes[route], query: params }, undefined, options);
|
|
76
73
|
} });
|
|
77
74
|
}; };
|
|
78
75
|
this.getSingletonRouter = function () {
|
|
79
76
|
return __assign(__assign({}, router_1.default), { push: function (route, params, options) {
|
|
80
|
-
if (
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
return router_1.default.push({ pathname: _this.routes[route], query: params }, undefined, nextJsOptions);
|
|
77
|
+
if (params === void 0) { params = undefined; }
|
|
78
|
+
if (options === void 0) { options = undefined; }
|
|
79
|
+
return router_1.default.push({ pathname: _this.routes[route], query: params }, undefined, options);
|
|
84
80
|
}, replace: function (route, params, options) {
|
|
85
|
-
if (
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
return router_1.default.replace({ pathname: _this.routes[route], query: params }, undefined, nextJsOptions);
|
|
81
|
+
if (params === void 0) { params = undefined; }
|
|
82
|
+
if (options === void 0) { options = undefined; }
|
|
83
|
+
return router_1.default.replace({ pathname: _this.routes[route], query: params }, undefined, options);
|
|
89
84
|
} });
|
|
90
85
|
};
|
|
91
86
|
this.getUrlByRoute = function (route, params) {
|
|
87
|
+
if (params === void 0) { params = undefined; }
|
|
92
88
|
var pathname = _this.routes[route];
|
|
93
89
|
var restParams = {};
|
|
94
90
|
Object.keys(params !== null && params !== void 0 ? params : {}).forEach(function (key) {
|
|
@@ -110,4 +106,4 @@ var Router = /** @class */ (function () {
|
|
|
110
106
|
return Router;
|
|
111
107
|
}());
|
|
112
108
|
exports.Router = Router;
|
|
113
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
109
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUm91dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1JvdXRlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxtREFBaUM7QUFDakMsb0RBQThFO0FBQzlFLGdEQUEwQjtBQUUxQix5QkFBK0I7QUFFL0Isa0NBQWtDO0FBQ2xDO0lBR0ksZ0JBQVksTUFBb0M7UUFBaEQsaUJBRUM7UUFFTyx1QkFBa0IsR0FBRyxVQUFDLFFBQWdCO1lBQzFDLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQUMsS0FBSyxJQUFLLE9BQUMsS0FBSSxDQUFDLE1BQWMsQ0FBQyxLQUFLLENBQUMsS0FBSyxRQUFRLEVBQXhDLENBQXdDLENBQVEsQ0FBQztRQUNyRyxDQUFDLENBQUM7UUFFSyxZQUFPLEdBQUcsY0FBOEIsT0FBQSxVQUFDLEtBQUs7WUFDekMsSUFBQSxLQUFLLEdBQTJCLEtBQUssTUFBaEMsRUFBRSxNQUFNLEdBQW1CLEtBQUssT0FBeEIsRUFBSyxTQUFTLFVBQUssS0FBSyxFQUF2QyxtQkFBK0IsQ0FBRixDQUFXO1lBQzlDLE9BQU8sOEJBQUMsY0FBUSxhQUFDLElBQUksRUFBRSxFQUFFLFFBQVEsRUFBRSxLQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFhLEVBQUUsSUFBTSxTQUFTLEVBQUksQ0FBQztRQUNyRyxDQUFDLEVBSDhDLENBRzlDLENBQUM7UUFFSyxpQkFBWSxHQUFHLGNBQU0sT0FBQTtZQUN4QixJQUFNLE1BQU0sR0FBRyxJQUFBLGtCQUFhLEdBQUUsQ0FBQztZQUUvQiw2QkFDTyxNQUFNLEtBQ1QsS0FBSyxFQUFFLEtBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQy9DLElBQUksRUFBRSxVQUFDLEtBQUssRUFBRSxNQUFrQixFQUFFLE9BQW1CO29CQUF2Qyx1QkFBQSxFQUFBLGtCQUFrQjtvQkFBRSx3QkFBQSxFQUFBLG1CQUFtQjtvQkFDakQsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQWEsRUFBRSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDbkcsQ0FBQyxFQUNELE9BQU8sRUFBRSxVQUFDLEtBQUssRUFBRSxNQUFrQixFQUFFLE9BQW1CO29CQUF2Qyx1QkFBQSxFQUFBLGtCQUFrQjtvQkFBRSx3QkFBQSxFQUFBLG1CQUFtQjtvQkFDcEQsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQWEsRUFBRSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDdEcsQ0FBQyxJQUNIO1FBQ04sQ0FBQyxFQWIyQixDQWEzQixDQUFDO1FBRUssdUJBQWtCLEdBQUc7WUFDeEIsNkJBQ08sZ0JBQW1CLEtBQ3RCLElBQUksRUFBRSxVQUFDLEtBQUssRUFBRSxNQUFrQixFQUFFLE9BQW1CO29CQUF2Qyx1QkFBQSxFQUFBLGtCQUFrQjtvQkFBRSx3QkFBQSxFQUFBLG1CQUFtQjtvQkFDakQsT0FBTyxnQkFBbUIsQ0FBQyxJQUFJLENBQzNCLEVBQUUsUUFBUSxFQUFFLEtBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQWEsRUFBRSxFQUN0RCxTQUFTLEVBQ1QsT0FBTyxDQUNWLENBQUM7Z0JBQ04sQ0FBQyxFQUNELE9BQU8sRUFBRSxVQUFDLEtBQUssRUFBRSxNQUFrQixFQUFFLE9BQW1CO29CQUF2Qyx1QkFBQSxFQUFBLGtCQUFrQjtvQkFBRSx3QkFBQSxFQUFBLG1CQUFtQjtvQkFDcEQsT0FBTyxnQkFBbUIsQ0FBQyxPQUFPLENBQzlCLEVBQUUsUUFBUSxFQUFFLEtBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQWEsRUFBRSxFQUN0RCxTQUFTLEVBQ1QsT0FBTyxDQUNWLENBQUM7Z0JBQ04sQ0FBQyxJQUNIO1FBQ04sQ0FBQyxDQUFDO1FBRUssa0JBQWEsR0FBeUQsVUFBQyxLQUFLLEVBQUUsTUFBa0I7WUFBbEIsdUJBQUEsRUFBQSxrQkFBa0I7WUFDbkcsSUFBSSxRQUFRLEdBQUcsS0FBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNsQyxJQUFNLFVBQVUsR0FBUSxFQUFFLENBQUM7WUFDM0IsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLGFBQU4sTUFBTSxjQUFOLE1BQU0sR0FBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQyxHQUFHO2dCQUNsQyxJQUFNLEtBQUssR0FBSSxNQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ25DLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxXQUFJLEdBQUcsTUFBRyxDQUFDLEVBQUU7b0JBQy9CLFFBQVEsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLFdBQUksR0FBRyxNQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7aUJBQ2xEO3FCQUFNO29CQUNILFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7aUJBQzNCO1lBQ0wsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDcEMsUUFBUSxHQUFHLFVBQUcsUUFBUSxjQUFJLElBQUEsY0FBUyxFQUFDLFVBQVUsQ0FBQyxDQUFFLENBQUM7YUFDckQ7WUFDRCxPQUFPLFFBQVEsQ0FBQztRQUNwQixDQUFDLENBQUM7UUE5REUsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFDekIsQ0FBQztJQThETCxhQUFDO0FBQUQsQ0FBQyxBQW5FRCxJQW1FQztBQW5FWSx3QkFBTSJ9
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@uxf/router",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.1.1",
|
|
4
4
|
"description": "UXF Router",
|
|
5
5
|
"author": "UXFans <dev@uxf.cz>",
|
|
6
6
|
"homepage": "https://gitlab.com/uxf-npm/router#readme",
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"lint": "./node_modules/.bin/eslint -c .eslintrc.js \"./**/*.ts*\""
|
|
27
27
|
},
|
|
28
28
|
"bugs": {
|
|
29
|
-
"url": "https://gitlab.com/uxf-npm/
|
|
29
|
+
"url": "https://gitlab.com/uxf-npm/router/issues"
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
32
|
"qs": "^6.10.1"
|
package/types.d.ts
CHANGED
|
@@ -1,27 +1,39 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
1
|
import { LinkProps as NextLinkProps } from "next/link";
|
|
3
2
|
import { NextRouter, SingletonRouter } from "next/router";
|
|
4
|
-
import {
|
|
3
|
+
import { NextComponentType, NextPageContext } from "next";
|
|
5
4
|
export interface Options {
|
|
6
5
|
anchor?: string;
|
|
7
6
|
shallow?: boolean;
|
|
8
7
|
[key: string]: any;
|
|
9
8
|
}
|
|
10
|
-
export declare type LinkProps<
|
|
11
|
-
route: R;
|
|
12
|
-
params?: T[R];
|
|
13
|
-
anchor?: string;
|
|
14
|
-
};
|
|
9
|
+
export declare type LinkProps<RouteList> = Omit<NextLinkProps, "as" | "href"> & PropsGenerator<RouteList>;
|
|
15
10
|
export interface UxfRouter<T> extends Omit<NextRouter, "push" | "replace" | "route"> {
|
|
16
11
|
route: keyof T | null;
|
|
17
|
-
push: (
|
|
18
|
-
replace: (
|
|
12
|
+
push: (...attr: FunctionParametersWithOptionsGenerator<T>) => Promise<boolean>;
|
|
13
|
+
replace: (...attr: FunctionParametersWithOptionsGenerator<T>) => Promise<boolean>;
|
|
19
14
|
}
|
|
20
15
|
export interface UxfSingletonRouter<T> extends Omit<SingletonRouter, "push" | "replace"> {
|
|
21
|
-
push: (
|
|
22
|
-
replace: (
|
|
16
|
+
push: (...attr: FunctionParametersWithOptionsGenerator<T>) => Promise<boolean>;
|
|
17
|
+
replace: (...attr: FunctionParametersWithOptionsGenerator<T>) => Promise<boolean>;
|
|
23
18
|
}
|
|
24
|
-
export
|
|
25
|
-
|
|
19
|
+
export declare type PropsGenerator<Routes> = {
|
|
20
|
+
[K in keyof Routes]: Routes[K] extends null ? {
|
|
21
|
+
route: K;
|
|
22
|
+
params?: never;
|
|
23
|
+
} : {
|
|
24
|
+
route: K;
|
|
25
|
+
params: Routes[K];
|
|
26
|
+
};
|
|
27
|
+
}[keyof Routes];
|
|
28
|
+
export declare type FunctionParametersGenerator<Routes> = {
|
|
29
|
+
[K in keyof Routes]: Routes[K] extends null ? [K] : [K, Routes[K]];
|
|
30
|
+
}[keyof Routes];
|
|
31
|
+
export declare type FunctionParametersWithOptionsGenerator<Routes> = {
|
|
32
|
+
[K in keyof Routes]: Routes[K] extends null ? [K] | [K, Options] : [K, Routes[K]] | [K, Routes[K], Options];
|
|
33
|
+
}[keyof Routes];
|
|
34
|
+
export interface UxfPageContext<Routes, T extends keyof Routes> extends Omit<NextPageContext, "query"> {
|
|
35
|
+
query: Routes[T] extends null ? Record<string, any> : {
|
|
36
|
+
[key in keyof Routes[T]]: string | string[] | undefined;
|
|
37
|
+
};
|
|
26
38
|
}
|
|
27
|
-
export declare type
|
|
39
|
+
export declare type UxfNextPage<Routes, Route extends keyof Routes, IP = Record<string, any>, P = IP> = NextComponentType<UxfPageContext<Routes, Route>, IP, P>;
|