@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 CHANGED
@@ -31,12 +31,17 @@ export const router = new UxfRouter<RouteList>({
31
31
  ```
32
32
 
33
33
  ```ts
34
- import { router } from "./routes"
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
- export type RouteName = keyof RouteList;
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: (route: keyof T, params?: T[keyof T] | undefined) => { [key in keyof T]: string; }[keyof T];
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
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
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 (options === void 0) { options = {}; }
68
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
69
- var anchor = options.anchor, nextJsOptions = __rest(options, ["anchor"]);
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 (options === void 0) { options = {}; }
73
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
74
- var anchor = options.anchor, nextJsOptions = __rest(options, ["anchor"]);
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 (options === void 0) { options = {}; }
81
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
82
- var anchor = options.anchor, nextJsOptions = __rest(options, ["anchor"]);
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 (options === void 0) { options = {}; }
86
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
87
- var anchor = options.anchor, nextJsOptions = __rest(options, ["anchor"]);
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUm91dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1JvdXRlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxtREFBaUM7QUFDakMsb0RBQThFO0FBQzlFLGdEQUEwQjtBQUUxQix5QkFBK0I7QUFFL0Isa0NBQWtDO0FBQ2xDO0lBR0ksZ0JBQVksTUFBb0M7UUFBaEQsaUJBRUM7UUFFTyx1QkFBa0IsR0FBRyxVQUFDLFFBQWdCO1lBQzFDLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQUMsS0FBSyxJQUFLLE9BQUMsS0FBSSxDQUFDLE1BQWMsQ0FBQyxLQUFLLENBQUMsS0FBSyxRQUFRLEVBQXhDLENBQXdDLENBQVEsQ0FBQztRQUNyRyxDQUFDLENBQUM7UUFFSyxZQUFPLEdBQUcsY0FBOEIsT0FBQSxVQUFDLEtBQUs7WUFDakQsNkRBQTZEO1lBQ3JELElBQUEsS0FBSyxHQUFtQyxLQUFLLE1BQXhDLEVBQUUsTUFBTSxHQUEyQixLQUFLLE9BQWhDLEVBQUUsTUFBTSxHQUFtQixLQUFLLE9BQXhCLEVBQUssU0FBUyxVQUFLLEtBQUssRUFBL0MsNkJBQXVDLENBQUYsQ0FBVztZQUN0RCxPQUFPLDhCQUFDLGNBQVEsYUFBQyxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsS0FBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBYSxFQUFFLElBQU0sU0FBUyxFQUFJLENBQUM7UUFDckcsQ0FBQyxFQUo4QyxDQUk5QyxDQUFDO1FBRUssaUJBQVksR0FBRyxjQUFNLE9BQUE7WUFDeEIsSUFBTSxNQUFNLEdBQUcsSUFBQSxrQkFBYSxHQUFFLENBQUM7WUFFL0IsNkJBQ08sTUFBTSxLQUNULEtBQUssRUFBRSxLQUFJLENBQUMsa0JBQWtCLENBQUMsTUFB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
109
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUm91dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1JvdXRlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxtREFBaUM7QUFDakMsb0RBQThFO0FBQzlFLGdEQUEwQjtBQUUxQix5QkFBK0I7QUFFL0Isa0NBQWtDO0FBQ2xDO0lBR0ksZ0JBQVksTUFBb0M7UUFBaEQsaUJBRUM7UUFFTyx1QkFBa0IsR0FBRyxVQUFDLFFBQWdCO1lBQzFDLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQUMsS0FBSyxJQUFLLE9BQUMsS0FBSSxDQUFDLE1BQWMsQ0FBQyxLQUFLLENBQUMsS0FBSyxRQUFRLEVBQXhDLENBQXdDLENBQVEsQ0FBQztRQUNyRyxDQUFDLENBQUM7UUFFSyxZQUFPLEdBQUcsY0FBOEIsT0FBQSxVQUFDLEtBQUs7WUFDekMsSUFBQSxLQUFLLEdBQTJCLEtBQUssTUFBaEMsRUFBRSxNQUFNLEdBQW1CLEtBQUssT0FBeEIsRUFBSyxTQUFTLFVBQUssS0FBSyxFQUF2QyxtQkFBK0IsQ0FBRixDQUFXO1lBQzlDLE9BQU8sOEJBQUMsY0FBUSxhQUFDLElBQUksRUFBRSxFQUFFLFFBQVEsRUFBRSxLQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFhLEVBQUUsSUFBTSxTQUFTLEVBQUksQ0FBQztRQUNyRyxDQUFDLEVBSDhDLENBRzlDLENBQUM7UUFFSyxpQkFBWSxHQUFHLGNBQU0sT0FBQTtZQUN4QixJQUFNLE1BQU0sR0FBRyxJQUFBLGtCQUFhLEdBQUUsQ0FBQztZQUUvQiw2QkFDTyxNQUFNLEtBQ1QsS0FBSyxFQUFFLEtBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQy9DLElBQUksRUFBRSxVQUFDLEtB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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uxf/router",
3
- "version": "2.0.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/cms/issues"
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 { ParsedUrlQuery } from "querystring";
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<T, R extends keyof T = keyof T> = Omit<NextLinkProps, "as" | "href"> & {
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: (route: keyof T, params?: T[typeof route], options?: Options) => Promise<boolean>;
18
- replace: (route: keyof T, params?: T[typeof route], options?: Options) => Promise<boolean>;
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: (route: keyof T, params?: T[typeof route], options?: Options) => Promise<boolean>;
22
- replace: (route: keyof T, params?: T[typeof route], options?: Options) => Promise<boolean>;
16
+ push: (...attr: FunctionParametersWithOptionsGenerator<T>) => Promise<boolean>;
17
+ replace: (...attr: FunctionParametersWithOptionsGenerator<T>) => Promise<boolean>;
23
18
  }
24
- export interface Config<T> {
25
- defaultParams?: (route: keyof T, params: any) => any;
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 RequestHandler = (req: any, res: any, pathname: string, query: ParsedUrlQuery) => Promise<void>;
39
+ export declare type UxfNextPage<Routes, Route extends keyof Routes, IP = Record<string, any>, P = IP> = NextComponentType<UxfPageContext<Routes, Route>, IP, P>;