@uxf/router 3.0.0-beta.2 → 3.0.0-beta.3
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 +19 -6
- package/helper.d.ts +8 -2
- package/helper.js +50 -6
- package/package.json +3 -3
- package/router.d.ts +1 -1
- package/router.js +4 -1
package/README.md
CHANGED
|
@@ -20,21 +20,33 @@ interface RouteList {
|
|
|
20
20
|
"blog/detail": { id: number };
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
export default createRouter<RouteList>({
|
|
24
24
|
index: "/",
|
|
25
25
|
"admin/index": "/admin",
|
|
26
26
|
"blog/detail": "/blog/[id]",
|
|
27
27
|
});
|
|
28
|
-
|
|
29
|
-
export const { route, routeToUrl, sitemapGenerator } = router;
|
|
30
28
|
```
|
|
31
29
|
|
|
32
30
|
```ts
|
|
33
31
|
// routes/index.ts
|
|
34
32
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
33
|
+
import router, { RouteList } from "./routes";
|
|
34
|
+
import { UxfGetServerSideProps, UxfGetStaticProps } from "@uxf/router";
|
|
35
|
+
import { PreviewData as NextPreviewData } from "next/types";
|
|
36
|
+
|
|
37
|
+
export const { route, routeToUrl, sitemapGenerator } = router;
|
|
38
|
+
|
|
39
|
+
export type GetStaticProps<
|
|
40
|
+
Route extends keyof RouteList,
|
|
41
|
+
Props extends { [key: string]: any } = { [key: string]: any },
|
|
42
|
+
PreviewData extends NextPreviewData = NextPreviewData,
|
|
43
|
+
> = UxfGetStaticProps<RouteList, Route, Props, PreviewData>;
|
|
44
|
+
|
|
45
|
+
export type GetServerSideProps<
|
|
46
|
+
Route extends keyof RouteList,
|
|
47
|
+
Props extends { [key: string]: any } = { [key: string]: any },
|
|
48
|
+
PreviewData extends NextPreviewData = NextPreviewData,
|
|
49
|
+
> = UxfGetServerSideProps<RouteList, Route, Props, PreviewData>;
|
|
38
50
|
```
|
|
39
51
|
|
|
40
52
|
Add configuration to `tsconfig.json`
|
|
@@ -56,6 +68,7 @@ Add configuration to `tsconfig.json`
|
|
|
56
68
|
|
|
57
69
|
```tsx
|
|
58
70
|
// pages/index.js
|
|
71
|
+
|
|
59
72
|
import Link from "next/link";
|
|
60
73
|
import { route } from "@app-routes";
|
|
61
74
|
|
package/helper.d.ts
CHANGED
|
@@ -1,2 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
export declare
|
|
1
|
+
type ParamType = string | string[] | undefined;
|
|
2
|
+
export declare function queryParamToString(param: ParamType): string | undefined;
|
|
3
|
+
export declare function queryParamToStringStrict(param: ParamType): string;
|
|
4
|
+
export declare function queryParamToBoolean(param: ParamType): boolean | undefined;
|
|
5
|
+
export declare function queryParamToBooleanStrict(param: ParamType): boolean;
|
|
6
|
+
export declare function queryParamToNumber(param: ParamType): number | undefined;
|
|
7
|
+
export declare function queryParamToNumberStrict(param: ParamType): number;
|
|
8
|
+
export {};
|
package/helper.js
CHANGED
|
@@ -1,10 +1,54 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.queryParamToNumber = exports.queryParamToString = void 0;
|
|
4
|
-
|
|
3
|
+
exports.queryParamToNumberStrict = exports.queryParamToNumber = exports.queryParamToBooleanStrict = exports.queryParamToBoolean = exports.queryParamToStringStrict = exports.queryParamToString = void 0;
|
|
4
|
+
function queryParamToString(param) {
|
|
5
|
+
if (Array.isArray(param))
|
|
6
|
+
throw new Error("Query parameter is array. Should be string.");
|
|
7
|
+
return param;
|
|
8
|
+
}
|
|
5
9
|
exports.queryParamToString = queryParamToString;
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
10
|
+
function queryParamToStringStrict(param) {
|
|
11
|
+
var paramOrUndefined = queryParamToString(param);
|
|
12
|
+
if (paramOrUndefined === undefined)
|
|
13
|
+
throw new Error("Parameter not found.");
|
|
14
|
+
return paramOrUndefined;
|
|
15
|
+
}
|
|
16
|
+
exports.queryParamToStringStrict = queryParamToStringStrict;
|
|
17
|
+
function queryParamToBoolean(param) {
|
|
18
|
+
if (Array.isArray(param))
|
|
19
|
+
throw new Error("Query parameter is array. Should be string.");
|
|
20
|
+
if (param === undefined)
|
|
21
|
+
return undefined;
|
|
22
|
+
if (param === "true")
|
|
23
|
+
return true;
|
|
24
|
+
if (param === "false")
|
|
25
|
+
return false;
|
|
26
|
+
throw new Error("Parameter should be boolean (true|false). Given '".concat(param, "'."));
|
|
27
|
+
}
|
|
28
|
+
exports.queryParamToBoolean = queryParamToBoolean;
|
|
29
|
+
function queryParamToBooleanStrict(param) {
|
|
30
|
+
var paramOrUndefined = queryParamToBoolean(param);
|
|
31
|
+
if (paramOrUndefined === undefined)
|
|
32
|
+
throw new Error("Parameter not found.");
|
|
33
|
+
return paramOrUndefined;
|
|
34
|
+
}
|
|
35
|
+
exports.queryParamToBooleanStrict = queryParamToBooleanStrict;
|
|
36
|
+
function queryParamToNumber(param) {
|
|
37
|
+
if (Array.isArray(param))
|
|
38
|
+
throw new Error("Query parameter is array. Should be number.");
|
|
39
|
+
if (param === undefined)
|
|
40
|
+
return undefined;
|
|
41
|
+
var numberParam = Number.parseInt(param, 10);
|
|
42
|
+
if (Number.isNaN(numberParam))
|
|
43
|
+
throw new Error("Query parameter is NaN. Should be number.");
|
|
44
|
+
return numberParam;
|
|
45
|
+
}
|
|
9
46
|
exports.queryParamToNumber = queryParamToNumber;
|
|
10
|
-
|
|
47
|
+
function queryParamToNumberStrict(param) {
|
|
48
|
+
var paramOrUndefined = queryParamToNumber(param);
|
|
49
|
+
if (paramOrUndefined === undefined)
|
|
50
|
+
throw new Error("Parameter not found.");
|
|
51
|
+
return paramOrUndefined;
|
|
52
|
+
}
|
|
53
|
+
exports.queryParamToNumberStrict = queryParamToNumberStrict;
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2hlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSxTQUFnQixrQkFBa0IsQ0FBQyxLQUFnQjtJQUMvQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO0lBRXpGLE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUM7QUFKRCxnREFJQztBQUVELFNBQWdCLHdCQUF3QixDQUFDLEtBQWdCO0lBQ3JELElBQU0sZ0JBQWdCLEdBQUcsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFbkQsSUFBSSxnQkFBZ0IsS0FBSyxTQUFTO1FBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBRTVFLE9BQU8sZ0JBQWdCLENBQUM7QUFDNUIsQ0FBQztBQU5ELDREQU1DO0FBRUQsU0FBZ0IsbUJBQW1CLENBQUMsS0FBZ0I7SUFDaEQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsNkNBQTZDLENBQUMsQ0FBQztJQUV6RixJQUFJLEtBQUssS0FBSyxTQUFTO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFDMUMsSUFBSSxLQUFLLEtBQUssTUFBTTtRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ2xDLElBQUksS0FBSyxLQUFLLE9BQU87UUFBRSxPQUFPLEtBQUssQ0FBQztJQUVwQyxNQUFNLElBQUksS0FBSyxDQUFDLDJEQUFvRCxLQUFLLE9BQUksQ0FBQyxDQUFDO0FBQ25GLENBQUM7QUFSRCxrREFRQztBQUVELFNBQWdCLHlCQUF5QixDQUFDLEtBQWdCO0lBQ3RELElBQU0sZ0JBQWdCLEdBQUcsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFcEQsSUFBSSxnQkFBZ0IsS0FBSyxTQUFTO1FBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBRTVFLE9BQU8sZ0JBQWdCLENBQUM7QUFDNUIsQ0FBQztBQU5ELDhEQU1DO0FBRUQsU0FBZ0Isa0JBQWtCLENBQUMsS0FBZ0I7SUFDL0MsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsNkNBQTZDLENBQUMsQ0FBQztJQUV6RixJQUFJLEtBQUssS0FBSyxTQUFTO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFFMUMsSUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFL0MsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQztRQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsMkNBQTJDLENBQUMsQ0FBQztJQUU1RixPQUFPLFdBQVcsQ0FBQztBQUN2QixDQUFDO0FBVkQsZ0RBVUM7QUFFRCxTQUFnQix3QkFBd0IsQ0FBQyxLQUFnQjtJQUNyRCxJQUFNLGdCQUFnQixHQUFHLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRW5ELElBQUksZ0JBQWdCLEtBQUssU0FBUztRQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUU1RSxPQUFPLGdCQUFnQixDQUFDO0FBQzVCLENBQUM7QUFORCw0REFNQyJ9
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@uxf/router",
|
|
3
|
-
"version": "3.0.0-beta.
|
|
3
|
+
"version": "3.0.0-beta.3",
|
|
4
4
|
"description": "UXF Router",
|
|
5
5
|
"author": "UXFans <dev@uxf.cz>",
|
|
6
6
|
"homepage": "https://gitlab.com/uxf-npm/router#readme",
|
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
"eslint-plugin-prettier": "^4.0.0"
|
|
52
52
|
},
|
|
53
53
|
"peerDependencies": {
|
|
54
|
-
"react": "
|
|
55
|
-
"react-dom": "
|
|
54
|
+
"react": "17 - 18",
|
|
55
|
+
"react-dom": "17 - 18"
|
|
56
56
|
}
|
|
57
57
|
}
|
package/router.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ export type FunctionParametersGenerator<RouteList> = {
|
|
|
4
4
|
[K in keyof RouteList]: RouteList[K] extends null ? [K] : [K, RouteList[K]];
|
|
5
5
|
}[keyof RouteList];
|
|
6
6
|
type RouteFunction<RouteList> = (...args: FunctionParametersGenerator<RouteList>) => LinkProps["href"];
|
|
7
|
-
type RouteToUrlFunction<RouteList> = (...args: FunctionParametersGenerator<RouteList>) => string
|
|
7
|
+
type RouteToUrlFunction<RouteList> = (...args: FunctionParametersGenerator<RouteList>) => string;
|
|
8
8
|
type Router<RouteList> = {
|
|
9
9
|
route: RouteFunction<RouteList>;
|
|
10
10
|
routeToUrl: RouteToUrlFunction<RouteList>;
|
package/router.js
CHANGED
|
@@ -15,6 +15,9 @@ function createRouter(routes) {
|
|
|
15
15
|
routeToUrl: function (route, params) {
|
|
16
16
|
if (params === void 0) { params = undefined; }
|
|
17
17
|
var pathname = routes[route];
|
|
18
|
+
if (!pathname) {
|
|
19
|
+
throw new Error("Route '".concat(String(route), "' not found."));
|
|
20
|
+
}
|
|
18
21
|
var restParams = {};
|
|
19
22
|
Object.keys(params !== null && params !== void 0 ? params : {}).forEach(function (key) {
|
|
20
23
|
var value = params[key];
|
|
@@ -35,4 +38,4 @@ function createRouter(routes) {
|
|
|
35
38
|
};
|
|
36
39
|
}
|
|
37
40
|
exports.createRouter = createRouter;
|
|
38
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3JvdXRlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUJBQStCO0FBRS9CLHVEQUFrRjtBQWdCbEYsU0FBZ0IsWUFBWSxDQUFZLE1BQTRDO0lBQ2hGLE9BQU87UUFDSCxLQUFLLEVBQUUsVUFBQyxLQUFLLEVBQUUsTUFBa0I7WUFBbEIsdUJBQUEsRUFBQSxrQkFBa0I7WUFBSyxPQUFBLENBQUM7Z0JBQ25DLFFBQVEsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDO2dCQUN2QixLQUFLLEVBQUUsTUFBTSxhQUFOLE1BQU0sY0FBTixNQUFNLEdBQUksSUFBSTthQUN4QixDQUFDO1FBSG9DLENBR3BDO1FBQ0YsVUFBVSxFQUFFLFVBQUMsS0FBSyxFQUFFLE1BQWtCO1lBQWxCLHVCQUFBLEVBQUEsa0JBQWtCO1lBQ2xDLElBQUksUUFBUSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUU3QixJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUNYLE1BQU0sSUFBSSxLQUFLLENBQUMsaUJBQVUsTUFBTSxDQUFDLEtBQUssQ0FBQyxpQkFBYyxDQUFDLENBQUM7YUFDMUQ7WUFFRCxJQUFNLFVBQVUsR0FBUSxFQUFFLENBQUM7WUFDM0IsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLGFBQU4sTUFBTSxjQUFOLE1BQU0sR0FBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQyxHQUFHO2dCQUNsQyxJQUFNLEtBQUssR0FBSSxNQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ25DLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxXQUFJLEdBQUcsTUFBRyxDQUFDLEVBQUU7b0JBQy9CLFFBQVEsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLFdBQUksR0FBRyxNQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7aUJBQ2xEO3FCQUFNO29CQUNILFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7aUJBQzNCO1lBQ0wsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDcEMsUUFBUSxHQUFHLFVBQUcsUUFBUSxjQUFJLElBQUEsY0FBUyxFQUFDLFVBQVUsQ0FBQyxDQUFFLENBQUM7YUFDckQ7WUFDRCxPQUFPLFFBQVEsQ0FBQztRQUNwQixDQUFDO1FBQ0QsZ0JBQWdCLEVBQUUsSUFBQSx5Q0FBc0IsR0FBRTtRQUMxQyxNQUFNLFFBQUE7S0FDVCxDQUFDO0FBQ04sQ0FBQztBQTlCRCxvQ0E4QkMifQ==
|