@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 CHANGED
@@ -20,21 +20,33 @@ interface RouteList {
20
20
  "blog/detail": { id: number };
21
21
  }
22
22
 
23
- const router = createRouter<RouteList>({
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
- export * from "./routes"
36
- export type GetServerSideProps<Route extends keyof RouteList> = UxfGetServerSideProps<RouteList, Route>;
37
- export type GetStaticProps<Route extends keyof RouteList> = UxfGetStaticProps<RouteList, Route>;
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
- export declare const queryParamToString: (param?: string | string[]) => string;
2
- export declare const queryParamToNumber: (param?: string | string[]) => number;
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
- var queryParamToString = function (param) { return (typeof param === "string" ? param : ""); };
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
- var queryParamToNumber = function (param) {
7
- return typeof param === "string" ? parseInt(param, 10) : 0;
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
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2hlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBTyxJQUFNLGtCQUFrQixHQUFHLFVBQUMsS0FBeUIsSUFBYSxPQUFBLENBQUMsT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUF4QyxDQUF3QyxDQUFDO0FBQXJHLFFBQUEsa0JBQWtCLHNCQUFtRjtBQUUzRyxJQUFNLGtCQUFrQixHQUFHLFVBQUMsS0FBeUI7SUFDeEQsT0FBQSxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFBbkQsQ0FBbUQsQ0FBQztBQUQzQyxRQUFBLGtCQUFrQixzQkFDeUIifQ==
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.2",
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": "^18",
55
- "react-dom": "^18"
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 | null;
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3JvdXRlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUJBQStCO0FBRS9CLHVEQUFrRjtBQWdCbEYsU0FBZ0IsWUFBWSxDQUFZLE1BQTRDO0lBQ2hGLE9BQU87UUFDSCxLQUFLLEVBQUUsVUFBQyxLQUFLLEVBQUUsTUFBa0I7WUFBbEIsdUJBQUEsRUFBQSxrQkFBa0I7WUFBSyxPQUFBLENBQUM7Z0JBQ25DLFFBQVEsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDO2dCQUN2QixLQUFLLEVBQUUsTUFBTSxhQUFOLE1BQU0sY0FBTixNQUFNLEdBQUksSUFBSTthQUN4QixDQUFDO1FBSG9DLENBR3BDO1FBQ0YsVUFBVSxFQUFFLFVBQUMsS0FBSyxFQUFFLE1BQWtCO1lBQWxCLHVCQUFBLEVBQUEsa0JBQWtCO1lBQ2xDLElBQUksUUFBUSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3QixJQUFNLFVBQVUsR0FBUSxFQUFFLENBQUM7WUFDM0IsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLGFBQU4sTUFBTSxjQUFOLE1BQU0sR0FBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQyxHQUFHO2dCQUNsQyxJQUFNLEtBQUssR0FBSSxNQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ25DLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxXQUFJLEdBQUcsTUFBRyxDQUFDLEVBQUU7b0JBQy9CLFFBQVEsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLFdBQUksR0FBRyxNQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7aUJBQ2xEO3FCQUFNO29CQUNILFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7aUJBQzNCO1lBQ0wsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDcEMsUUFBUSxHQUFHLFVBQUcsUUFBUSxjQUFJLElBQUEsY0FBUyxFQUFDLFVBQVUsQ0FBQyxDQUFFLENBQUM7YUFDckQ7WUFDRCxPQUFPLFFBQVEsQ0FBQztRQUNwQixDQUFDO1FBQ0QsZ0JBQWdCLEVBQUUsSUFBQSx5Q0FBc0IsR0FBRTtRQUMxQyxNQUFNLFFBQUE7S0FDVCxDQUFDO0FBQ04sQ0FBQztBQXpCRCxvQ0F5QkMifQ==
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3JvdXRlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUJBQStCO0FBRS9CLHVEQUFrRjtBQWdCbEYsU0FBZ0IsWUFBWSxDQUFZLE1BQTRDO0lBQ2hGLE9BQU87UUFDSCxLQUFLLEVBQUUsVUFBQyxLQUFLLEVBQUUsTUFBa0I7WUFBbEIsdUJBQUEsRUFBQSxrQkFBa0I7WUFBSyxPQUFBLENBQUM7Z0JBQ25DLFFBQVEsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDO2dCQUN2QixLQUFLLEVBQUUsTUFBTSxhQUFOLE1BQU0sY0FBTixNQUFNLEdBQUksSUFBSTthQUN4QixDQUFDO1FBSG9DLENBR3BDO1FBQ0YsVUFBVSxFQUFFLFVBQUMsS0FBSyxFQUFFLE1BQWtCO1lBQWxCLHVCQUFBLEVBQUEsa0JBQWtCO1lBQ2xDLElBQUksUUFBUSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUU3QixJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUNYLE1BQU0sSUFBSSxLQUFLLENBQUMsaUJBQVUsTUFBTSxDQUFDLEtBQUssQ0FBQyxpQkFBYyxDQUFDLENBQUM7YUFDMUQ7WUFFRCxJQUFNLFVBQVUsR0FBUSxFQUFFLENBQUM7WUFDM0IsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLGFBQU4sTUFBTSxjQUFOLE1BQU0sR0FBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQyxHQUFHO2dCQUNsQyxJQUFNLEtBQUssR0FBSSxNQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ25DLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxXQUFJLEdBQUcsTUFBRyxDQUFDLEVBQUU7b0JBQy9CLFFBQVEsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLFdBQUksR0FBRyxNQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7aUJBQ2xEO3FCQUFNO29CQUNILFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7aUJBQzNCO1lBQ0wsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDcEMsUUFBUSxHQUFHLFVBQUcsUUFBUSxjQUFJLElBQUEsY0FBUyxFQUFDLFVBQVUsQ0FBQyxDQUFFLENBQUM7YUFDckQ7WUFDRCxPQUFPLFFBQVEsQ0FBQztRQUNwQixDQUFDO1FBQ0QsZ0JBQWdCLEVBQUUsSUFBQSx5Q0FBc0IsR0FBRTtRQUMxQyxNQUFNLFFBQUE7S0FDVCxDQUFDO0FBQ04sQ0FBQztBQTlCRCxvQ0E4QkMifQ==