@uxf/router 1.7.1 → 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 +50 -48
- package/Router.d.ts +4 -12
- package/Router.js +42 -140
- package/Router.test.js +6 -27
- package/helper.js +5 -3
- package/index.js +1 -1
- package/package.json +23 -18
- package/types.d.ts +26 -14
- package/MatchedRoute.d.ts +0 -9
- package/MatchedRoute.js +0 -26
- package/Route.d.ts +0 -17
- package/Route.js +0 -86
package/README.md
CHANGED
|
@@ -1,16 +1,20 @@
|
|
|
1
1
|
# @uxf/router
|
|
2
2
|
|
|
3
|
-
##
|
|
4
|
-
|
|
5
|
-
Install:
|
|
3
|
+
## Installation
|
|
6
4
|
|
|
7
5
|
```
|
|
8
6
|
yarn add @uxf/router
|
|
9
7
|
```
|
|
8
|
+
or
|
|
9
|
+
```
|
|
10
|
+
npm install @uxf/router --save
|
|
11
|
+
```
|
|
10
12
|
|
|
11
|
-
Create `routes
|
|
13
|
+
- Create `routes` directory
|
|
14
|
+
- Create `routes.ts` and `index.ts` inside `routes` directory:
|
|
12
15
|
|
|
13
16
|
```ts
|
|
17
|
+
// routes/routes.ts
|
|
14
18
|
import { Router as UxfRouter } from "@uxf/router";
|
|
15
19
|
|
|
16
20
|
export interface RouteList {
|
|
@@ -19,77 +23,75 @@ export interface RouteList {
|
|
|
19
23
|
"blog-article": { articleId: string };
|
|
20
24
|
}
|
|
21
25
|
|
|
22
|
-
const router = new UxfRouter<RouteList>({
|
|
26
|
+
export const router = new UxfRouter<RouteList>({
|
|
23
27
|
index: "/",
|
|
24
28
|
"blog": "/blog",
|
|
25
|
-
"blog-article": "/blog
|
|
29
|
+
"blog-article": "/blog/[articleId]",
|
|
26
30
|
});
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
```ts
|
|
34
|
+
// routes/index.ts
|
|
35
|
+
import { RouteList, router } from "./routes";
|
|
36
|
+
import { PropsGenerator, FunctionParametersGenerator, UxfNextPage } from "@uxf/router";
|
|
27
37
|
|
|
28
38
|
export const Link = router.getLink();
|
|
29
39
|
export const useRouter = router.getUseRouter();
|
|
30
40
|
export const Router = router.getSingletonRouter();
|
|
31
|
-
export const getRequestHandler = router.getRequestHandler;
|
|
32
|
-
export type RouteName = keyof RouteList;
|
|
33
|
-
```
|
|
34
41
|
|
|
35
|
-
|
|
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>;
|
|
45
|
+
```
|
|
36
46
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
app
|
|
45
|
-
|
|
46
|
-
|
|
47
|
+
Add configuration to `tsconfig.json`
|
|
48
|
+
|
|
49
|
+
```json
|
|
50
|
+
{
|
|
51
|
+
"compilerOptions": {
|
|
52
|
+
"baseUrl": "./src",
|
|
53
|
+
"paths": {
|
|
54
|
+
"@app-routes": [
|
|
55
|
+
"routes"
|
|
56
|
+
]
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
47
60
|
```
|
|
48
61
|
|
|
49
|
-
|
|
62
|
+
## Typings
|
|
50
63
|
|
|
51
|
-
|
|
52
|
-
import next from "next";
|
|
53
|
-
import { RequestHandler } from "@uxf/router";
|
|
54
|
-
import { getRequestHandler } from "./routes";
|
|
64
|
+
### Function
|
|
55
65
|
|
|
56
|
-
|
|
66
|
+
```ts
|
|
67
|
+
import { RouteList } from "@app-routes";
|
|
68
|
+
import { FunctionParametersGenerator } from "@uxf/router";
|
|
57
69
|
|
|
58
|
-
const
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
res.send(html);
|
|
70
|
+
const navigate: (...attrs: FunctionParametersGenerator<RouteList>) => void = (route, params = undefined) => {
|
|
71
|
+
// implement me
|
|
62
72
|
}
|
|
63
|
-
|
|
64
|
-
const handler = getRequestHandler(app, customHandler);
|
|
65
73
|
```
|
|
66
74
|
|
|
67
|
-
|
|
75
|
+
### Component
|
|
68
76
|
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
import {
|
|
77
|
+
```ts
|
|
78
|
+
import { RouteList } from "@app-routes";
|
|
79
|
+
import { PropsGenerator } from "@uxf/router";
|
|
72
80
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
</Link>
|
|
77
|
-
)
|
|
81
|
+
const SomeComponent: React.FC<PropsGenerator<RouteList>> = (props) => {
|
|
82
|
+
// implement me
|
|
83
|
+
}
|
|
78
84
|
```
|
|
79
85
|
|
|
80
|
-
##
|
|
86
|
+
## How to use Link?
|
|
81
87
|
|
|
82
88
|
```tsx
|
|
83
89
|
// pages/index.js
|
|
84
|
-
import { Link
|
|
90
|
+
import { Link } from '@app-routes'
|
|
85
91
|
|
|
86
92
|
export default () => (
|
|
87
|
-
<Link route='blog-article'
|
|
93
|
+
<Link route='blog-article' params={{ articleId: 12 }}>
|
|
88
94
|
<a>Hello world</a>
|
|
89
95
|
</Link>
|
|
90
96
|
)
|
|
91
|
-
|
|
92
|
-
// or
|
|
93
|
-
|
|
94
|
-
Router.push('blog-article', null, { anchor: "..." });
|
|
95
97
|
```
|
package/Router.d.ts
CHANGED
|
@@ -1,21 +1,13 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import { LinkProps, UxfRouter, UxfSingletonRouter
|
|
2
|
+
import { FunctionParametersGenerator, LinkProps, UxfRouter, UxfSingletonRouter } from "./types";
|
|
3
3
|
export declare class Router<T> {
|
|
4
4
|
private routes;
|
|
5
|
-
private readonly config;
|
|
6
5
|
constructor(routes: {
|
|
7
6
|
[key in keyof T]: string;
|
|
8
|
-
}
|
|
9
|
-
private
|
|
10
|
-
private matchRoute;
|
|
11
|
-
getRequestHandler: (app: any, customHandler?: RequestHandler | undefined) => (req: any, res: any) => any;
|
|
12
|
-
getRouteByUrl: (url: string) => [keyof T, any];
|
|
13
|
-
private getRoute;
|
|
14
|
-
getUrls: (routeName: keyof T, params?: object | undefined, anchor?: string | undefined) => {
|
|
15
|
-
as: string;
|
|
16
|
-
href: string;
|
|
17
|
-
};
|
|
7
|
+
});
|
|
8
|
+
private getRouteByPathname;
|
|
18
9
|
getLink: () => React.FC<LinkProps<T>>;
|
|
19
10
|
getUseRouter: () => () => UxfRouter<T>;
|
|
20
11
|
getSingletonRouter: () => UxfSingletonRouter<T>;
|
|
12
|
+
getUrlByRoute: (...attrs: FunctionParametersGenerator<T>) => string;
|
|
21
13
|
}
|
package/Router.js
CHANGED
|
@@ -25,7 +25,7 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
|
|
|
25
25
|
var __importStar = (this && this.__importStar) || function (mod) {
|
|
26
26
|
if (mod && mod.__esModule) return mod;
|
|
27
27
|
var result = {};
|
|
28
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
28
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
29
29
|
__setModuleDefault(result, mod);
|
|
30
30
|
return result;
|
|
31
31
|
};
|
|
@@ -40,168 +40,70 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
40
40
|
}
|
|
41
41
|
return t;
|
|
42
42
|
};
|
|
43
|
-
var __values = (this && this.__values) || function(o) {
|
|
44
|
-
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
45
|
-
if (m) return m.call(o);
|
|
46
|
-
if (o && typeof o.length === "number") return {
|
|
47
|
-
next: function () {
|
|
48
|
-
if (o && i >= o.length) o = void 0;
|
|
49
|
-
return { value: o && o[i++], done: !o };
|
|
50
|
-
}
|
|
51
|
-
};
|
|
52
|
-
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
53
|
-
};
|
|
54
|
-
var __read = (this && this.__read) || function (o, n) {
|
|
55
|
-
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
56
|
-
if (!m) return o;
|
|
57
|
-
var i = m.call(o), r, ar = [], e;
|
|
58
|
-
try {
|
|
59
|
-
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
60
|
-
}
|
|
61
|
-
catch (error) { e = { error: error }; }
|
|
62
|
-
finally {
|
|
63
|
-
try {
|
|
64
|
-
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
65
|
-
}
|
|
66
|
-
finally { if (e) throw e.error; }
|
|
67
|
-
}
|
|
68
|
-
return ar;
|
|
69
|
-
};
|
|
70
43
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
71
44
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
72
45
|
};
|
|
73
46
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
74
47
|
exports.Router = void 0;
|
|
75
|
-
var router_1 = __importStar(require("next/router"));
|
|
76
48
|
var link_1 = __importDefault(require("next/link"));
|
|
49
|
+
var router_1 = __importStar(require("next/router"));
|
|
77
50
|
var react_1 = __importDefault(require("react"));
|
|
78
|
-
var
|
|
79
|
-
|
|
80
|
-
var Route_1 = require("./Route");
|
|
51
|
+
var qs_1 = require("qs");
|
|
52
|
+
// TODO Vejvis: fix eslint ignores
|
|
81
53
|
var Router = /** @class */ (function () {
|
|
82
|
-
function Router(routes
|
|
83
|
-
var e_1, _a;
|
|
54
|
+
function Router(routes) {
|
|
84
55
|
var _this = this;
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
this.getRequestHandler = function (app, customHandler) {
|
|
88
|
-
var nextHandler = app.getRequestHandler();
|
|
89
|
-
return function (req, res) {
|
|
90
|
-
var _a;
|
|
91
|
-
var url = req.url;
|
|
92
|
-
var parsedUrl = url_1.parse(url, true);
|
|
93
|
-
if (url.indexOf("/_next") === 0 || url.indexOf("/__nextjs") === 0) {
|
|
94
|
-
return nextHandler(req, res, parsedUrl);
|
|
95
|
-
}
|
|
96
|
-
var matchedRoute = _this.matchRoute((_a = parsedUrl.pathname) !== null && _a !== void 0 ? _a : "");
|
|
97
|
-
if (matchedRoute) {
|
|
98
|
-
var matchResult = matchedRoute.matchResult, route = matchedRoute.route;
|
|
99
|
-
if (customHandler) {
|
|
100
|
-
return customHandler(req, res, route.page, __assign(__assign({}, parsedUrl.query), matchResult.params));
|
|
101
|
-
}
|
|
102
|
-
return app.render(req, res, route.page, __assign(__assign({}, parsedUrl.query), matchResult.params));
|
|
103
|
-
}
|
|
104
|
-
return nextHandler(req, res, parsedUrl);
|
|
105
|
-
};
|
|
106
|
-
};
|
|
107
|
-
this.getRouteByUrl = function (url) {
|
|
108
|
-
var _a;
|
|
109
|
-
// TODO @vejvis - sjednotit s metodou getRequestHandler
|
|
110
|
-
var parsedUrl = url_1.parse(url, true);
|
|
111
|
-
var matchedRoute = _this.matchRoute((_a = parsedUrl.pathname) !== null && _a !== void 0 ? _a : "");
|
|
112
|
-
if (matchedRoute) {
|
|
113
|
-
return [matchedRoute.route.name, __assign(__assign({}, parsedUrl.query), matchedRoute.matchResult.params)];
|
|
114
|
-
}
|
|
115
|
-
throw new Error("Route for url '" + url + "' not found.");
|
|
116
|
-
};
|
|
117
|
-
this.getUrls = function (routeName, params, anchor) {
|
|
118
|
-
var route = _this.getRoute(routeName);
|
|
119
|
-
return {
|
|
120
|
-
as: route.getAs(_this.handleDefaultParams(routeName, params)) + (anchor ? "#" + anchor : ""),
|
|
121
|
-
href: route.getHref(_this.handleDefaultParams(routeName, params)),
|
|
122
|
-
};
|
|
56
|
+
this.getRouteByPathname = function (pathname) {
|
|
57
|
+
return Object.keys(_this.routes).find(function (route) { return _this.routes[route] === pathname; });
|
|
123
58
|
};
|
|
124
59
|
this.getLink = function () { return function (props) {
|
|
125
|
-
var route = props.route, params = props.params,
|
|
126
|
-
|
|
127
|
-
return react_1.default.createElement(link_1.default, __assign({ as: as, href: href }, linkProps));
|
|
60
|
+
var route = props.route, params = props.params, linkProps = __rest(props, ["route", "params"]);
|
|
61
|
+
return react_1.default.createElement(link_1.default, __assign({ href: { pathname: _this.routes[route], query: params } }, linkProps));
|
|
128
62
|
}; };
|
|
129
63
|
this.getUseRouter = function () { return function () {
|
|
130
|
-
var
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
var anchor = options.anchor, nextJsOptions = __rest(options, ["anchor"]);
|
|
136
|
-
var _a = _this.getUrls(route, params || {}, anchor), as = _a.as, href = _a.href;
|
|
137
|
-
return router.push(href, as, nextJsOptions);
|
|
64
|
+
var router = (0, router_1.useRouter)();
|
|
65
|
+
return __assign(__assign({}, router), { route: _this.getRouteByPathname(router.pathname), push: function (route, params, options) {
|
|
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);
|
|
138
69
|
}, replace: function (route, params, options) {
|
|
139
|
-
if (
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
return router.replace(href, as, 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);
|
|
143
73
|
} });
|
|
144
74
|
}; };
|
|
145
75
|
this.getSingletonRouter = function () {
|
|
146
76
|
return __assign(__assign({}, router_1.default), { push: function (route, params, options) {
|
|
147
|
-
if (
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
return router_1.default.push(href, as, 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);
|
|
151
80
|
}, replace: function (route, params, options) {
|
|
152
|
-
if (
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
return router_1.default.replace(href, as, 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);
|
|
156
84
|
} });
|
|
157
85
|
};
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
try {
|
|
167
|
-
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
168
|
-
}
|
|
169
|
-
finally { if (e_1) throw e_1.error; }
|
|
170
|
-
}
|
|
171
|
-
this.config = config;
|
|
172
|
-
}
|
|
173
|
-
Router.prototype.handleDefaultParams = function (route, params) {
|
|
174
|
-
var _a = this.config.defaultParams, defaultParams = _a === void 0 ? function (_, params) { return params; } : _a;
|
|
175
|
-
return defaultParams(route, params);
|
|
176
|
-
};
|
|
177
|
-
Router.prototype.matchRoute = function (url) {
|
|
178
|
-
var e_2, _a;
|
|
179
|
-
try {
|
|
180
|
-
for (var _b = __values(this.routes), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
181
|
-
var route = _c.value;
|
|
182
|
-
var matchResult = route.match(url);
|
|
183
|
-
if (matchResult) {
|
|
184
|
-
return new MatchedRoute_1.MatchedRoute(route, matchResult);
|
|
86
|
+
this.getUrlByRoute = function (route, params) {
|
|
87
|
+
if (params === void 0) { params = undefined; }
|
|
88
|
+
var pathname = _this.routes[route];
|
|
89
|
+
var restParams = {};
|
|
90
|
+
Object.keys(params !== null && params !== void 0 ? params : {}).forEach(function (key) {
|
|
91
|
+
var value = params[key];
|
|
92
|
+
if (pathname.includes("[".concat(key, "]"))) {
|
|
93
|
+
pathname = pathname.replace("[".concat(key, "]"), value);
|
|
185
94
|
}
|
|
95
|
+
else {
|
|
96
|
+
restParams[key] = value;
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
if (Object.keys(restParams).length > 0) {
|
|
100
|
+
pathname = "".concat(pathname, "?").concat((0, qs_1.stringify)(restParams));
|
|
186
101
|
}
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
192
|
-
}
|
|
193
|
-
finally { if (e_2) throw e_2.error; }
|
|
194
|
-
}
|
|
195
|
-
return null;
|
|
196
|
-
};
|
|
197
|
-
Router.prototype.getRoute = function (routeName) {
|
|
198
|
-
var route = this.routes.find(function (r) { return r.name === routeName; });
|
|
199
|
-
if (!route) {
|
|
200
|
-
throw new Error("Route '" + routeName + "' not found.");
|
|
201
|
-
}
|
|
202
|
-
return route;
|
|
203
|
-
};
|
|
102
|
+
return pathname;
|
|
103
|
+
};
|
|
104
|
+
this.routes = routes;
|
|
105
|
+
}
|
|
204
106
|
return Router;
|
|
205
107
|
}());
|
|
206
108
|
exports.Router = Router;
|
|
207
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
109
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUm91dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1JvdXRlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxtREFBaUM7QUFDakMsb0RBQThFO0FBQzlFLGdEQUEwQjtBQUUxQix5QkFBK0I7QUFFL0Isa0NBQWtDO0FBQ2xDO0lBR0ksZ0JBQVksTUFBb0M7UUFBaEQsaUJBRUM7UUFFTyx1QkFBa0IsR0FBRyxVQUFDLFFBQWdCO1lBQzFDLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQUMsS0FBSyxJQUFLLE9BQUMsS0FBSSxDQUFDLE1BQWMsQ0FBQyxLQUFLLENBQUMsS0FBSyxRQUFRLEVBQXhDLENBQXdDLENBQVEsQ0FBQztRQUNyRyxDQUFDLENBQUM7UUFFSyxZQUFPLEdBQUcsY0FBOEIsT0FBQSxVQUFDLEtBQUs7WUFDekMsSUFBQSxLQUFLLEdBQTJCLEtBQUssTUFBaEMsRUFBRSxNQUFNLEdBQW1CLEtBQUssT0FBeEIsRUFBSyxTQUFTLFVBQUssS0FBSyxFQUF2QyxtQkFBK0IsQ0FBRixDQUFXO1lBQzlDLE9BQU8sOEJBQUMsY0FBUSxhQUFDLElBQUksRUFBRSxFQUFFLFFBQVEsRUFBRSxLQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFhLEVBQUUsSUFBTSxTQUFTLEVBQUksQ0FBQztRQUNyRyxDQUFDLEVBSDhDLENBRzlDLENBQUM7UUFFSyxpQkFBWSxHQUFHLGNBQU0sT0FBQTtZQUN4QixJQUFNLE1BQU0sR0FBRyxJQUFBLGtCQUFhLEdBQUUsQ0FBQztZQUUvQiw2QkFDTyxNQUFNLEtBQ1QsS0FBSyxFQUFFLEtBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQy9DLElBQUksRUFBRSxVQUFDLEtB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
|
package/Router.test.js
CHANGED
|
@@ -1,34 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
var Route_1 = require("./Route");
|
|
4
3
|
var Router_1 = require("./Router");
|
|
5
|
-
var route = function (pattern) { return new Route_1.Route("", pattern); };
|
|
6
4
|
var router = new Router_1.Router({
|
|
7
5
|
index: "/",
|
|
8
|
-
form: "/form
|
|
9
|
-
"form-field": "/form
|
|
6
|
+
form: "/form/[id]",
|
|
7
|
+
"form-field": "/form/[formId]/field/[fieldId]",
|
|
10
8
|
});
|
|
11
|
-
test("
|
|
12
|
-
expect(
|
|
13
|
-
|
|
14
|
-
index: 0,
|
|
15
|
-
params: { param: "nejaky-parametr" },
|
|
16
|
-
});
|
|
17
|
-
expect(route("/test").match("/test")).toEqual({ path: "/test", index: 0, params: {} });
|
|
18
|
-
expect(route("/").match("/")).toEqual({ path: "/", index: 0, params: {} });
|
|
9
|
+
test("getUrlByRoute", function () {
|
|
10
|
+
expect(router.getUrlByRoute("form", { id: 12, attr: "abc" })).toBe("/form/12?attr=abc");
|
|
11
|
+
expect(router.getUrlByRoute("form-field", { formId: 33, fieldId: "aaa", param1: "ano" })).toBe("/form/33/field/aaa?param1=ano");
|
|
19
12
|
});
|
|
20
|
-
|
|
21
|
-
expect(router.getUrls("index", { param1: "test-param" })).toEqual({
|
|
22
|
-
as: "/?param1=test-param",
|
|
23
|
-
href: "/?param1=test-param",
|
|
24
|
-
});
|
|
25
|
-
expect(router.getUrls("form", { id: 1, param1: "test-param" })).toEqual({
|
|
26
|
-
as: "/form/1?param1=test-param",
|
|
27
|
-
href: "/form?id=1¶m1=test-param",
|
|
28
|
-
});
|
|
29
|
-
expect(router.getUrls("form-field", { formId: 1, fieldId: 2, param1: "test-param" })).toEqual({
|
|
30
|
-
as: "/form/1/field/2?param1=test-param",
|
|
31
|
-
href: "/form-field?formId=1&fieldId=2¶m1=test-param",
|
|
32
|
-
});
|
|
33
|
-
});
|
|
34
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUm91dGVyLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvUm91dGVyLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxpQ0FBZ0M7QUFDaEMsbUNBQWtDO0FBRWxDLElBQU0sS0FBSyxHQUFHLFVBQUMsT0FBZSxJQUFLLE9BQUEsSUFBSSxhQUFLLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxFQUF0QixDQUFzQixDQUFDO0FBRTFELElBQU0sTUFBTSxHQUFHLElBQUksZUFBTSxDQUFDO0lBQ3RCLEtBQUssRUFBRSxHQUFHO0lBQ1YsSUFBSSxFQUFFLFdBQVc7SUFDakIsWUFBWSxFQUFFLDhCQUE4QjtDQUMvQyxDQUFDLENBQUM7QUFFSCxJQUFJLENBQUMsY0FBYyxFQUFFO0lBQ2pCLE1BQU0sQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUMsS0FBSyxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDakUsSUFBSSxFQUFFLHVCQUF1QjtRQUM3QixLQUFLLEVBQUUsQ0FBQztRQUNSLE1BQU0sRUFBRSxFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRTtLQUN2QyxDQUFDLENBQUM7SUFFSCxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUV2RixNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUMvRSxDQUFDLENBQUMsQ0FBQztBQUVILElBQUksQ0FBQyxhQUFhLEVBQUU7SUFDaEIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDOUQsRUFBRSxFQUFFLHFCQUFxQjtRQUN6QixJQUFJLEVBQUUscUJBQXFCO0tBQzlCLENBQUMsQ0FBQztJQUVILE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDcEUsRUFBRSxFQUFFLDJCQUEyQjtRQUMvQixJQUFJLEVBQUUsOEJBQThCO0tBQ3ZDLENBQUMsQ0FBQztJQUVILE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUMxRixFQUFFLEVBQUUsbUNBQW1DO1FBQ3ZDLElBQUksRUFBRSxrREFBa0Q7S0FDM0QsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxDQUFDLENBQUMifQ==
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUm91dGVyLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvUm91dGVyLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxtQ0FBa0M7QUFFbEMsSUFBTSxNQUFNLEdBQUcsSUFBSSxlQUFNLENBQUM7SUFDdEIsS0FBSyxFQUFFLEdBQUc7SUFDVixJQUFJLEVBQUUsWUFBWTtJQUNsQixZQUFZLEVBQUUsZ0NBQWdDO0NBQ2pELENBQUMsQ0FBQztBQUVILElBQUksQ0FBQyxlQUFlLEVBQUU7SUFDbEIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ3hGLE1BQU0sQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDMUYsK0JBQStCLENBQ2xDLENBQUM7QUFDTixDQUFDLENBQUMsQ0FBQyJ9
|
package/helper.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.queryParamToNumber = exports.queryParamToString = void 0;
|
|
4
|
-
|
|
5
|
-
exports.
|
|
4
|
+
var queryParamToString = function (param) { return (typeof param === "string" ? param : ""); };
|
|
5
|
+
exports.queryParamToString = queryParamToString;
|
|
6
|
+
var queryParamToNumber = function (param) {
|
|
6
7
|
return typeof param === "string" ? parseInt(param, 10) : 0;
|
|
7
8
|
};
|
|
8
|
-
|
|
9
|
+
exports.queryParamToNumber = queryParamToNumber;
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2hlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBTyxJQUFNLGtCQUFrQixHQUFHLFVBQUMsS0FBeUIsSUFBYSxPQUFBLENBQUMsT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUF4QyxDQUF3QyxDQUFDO0FBQXJHLFFBQUEsa0JBQWtCLHNCQUFtRjtBQUUzRyxJQUFNLGtCQUFrQixHQUFHLFVBQUMsS0FBeUI7SUFDeEQsT0FBQSxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFBbkQsQ0FBbUQsQ0FBQztBQUQzQyxRQUFBLGtCQUFrQixzQkFDeUIifQ==
|
package/index.js
CHANGED
|
@@ -7,7 +7,7 @@ var __createBinding = (this && this.__createBinding) || (Object.create ? (functi
|
|
|
7
7
|
o[k2] = m[k];
|
|
8
8
|
}));
|
|
9
9
|
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
10
|
-
for (var p in m) if (p !== "default" && !
|
|
10
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
11
11
|
};
|
|
12
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
13
|
__exportStar(require("./Router"), exports);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@uxf/router",
|
|
3
|
-
"version": "1.
|
|
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",
|
|
@@ -19,31 +19,36 @@
|
|
|
19
19
|
"build": "tsc -P tsconfig.build.json",
|
|
20
20
|
"build:next": "next build",
|
|
21
21
|
"clean": "rm -rf ./dist",
|
|
22
|
-
"dev": "
|
|
22
|
+
"dev": "next dev",
|
|
23
23
|
"prepublish": "npm run-script build",
|
|
24
24
|
"test": "npm run-script typecheck",
|
|
25
|
-
"typecheck": "tsc --noEmit --skipLibCheck"
|
|
25
|
+
"typecheck": "tsc --noEmit --skipLibCheck",
|
|
26
|
+
"lint": "./node_modules/.bin/eslint -c .eslintrc.js \"./**/*.ts*\""
|
|
26
27
|
},
|
|
27
28
|
"bugs": {
|
|
28
|
-
"url": "https://gitlab.com/uxf-npm/
|
|
29
|
+
"url": "https://gitlab.com/uxf-npm/router/issues"
|
|
29
30
|
},
|
|
30
31
|
"dependencies": {
|
|
31
|
-
"
|
|
32
|
+
"qs": "^6.10.1"
|
|
32
33
|
},
|
|
33
34
|
"devDependencies": {
|
|
34
|
-
"@types/jest": "^
|
|
35
|
-
"@types/node": "^
|
|
36
|
-
"@types/
|
|
37
|
-
"@types/react
|
|
38
|
-
"
|
|
39
|
-
"
|
|
40
|
-
"
|
|
41
|
-
"prettier": "^2.1
|
|
42
|
-
"react": "^
|
|
43
|
-
"react-dom": "^
|
|
44
|
-
"ts-jest": "^
|
|
45
|
-
"
|
|
46
|
-
"typescript": "^
|
|
35
|
+
"@types/jest": "^27.4.0",
|
|
36
|
+
"@types/node": "^17.0.10",
|
|
37
|
+
"@types/qs": "^6.9.7",
|
|
38
|
+
"@types/react": "^17.0.38",
|
|
39
|
+
"@types/react-dom": "^17.0.11",
|
|
40
|
+
"jest": "^27.4.7",
|
|
41
|
+
"next": "^12.0.8",
|
|
42
|
+
"prettier": "^2.5.1",
|
|
43
|
+
"react": "^17.0.2",
|
|
44
|
+
"react-dom": "^17.0.2",
|
|
45
|
+
"ts-jest": "^27.1.3",
|
|
46
|
+
"typescript": "^4.5.4",
|
|
47
|
+
"@typescript-eslint/eslint-plugin": "^5.11.0",
|
|
48
|
+
"@uxf/eslint-config": "^1.2.3",
|
|
49
|
+
"eslint": "^8.8.0",
|
|
50
|
+
"eslint-config-prettier": "^8.3.0",
|
|
51
|
+
"eslint-plugin-prettier": "^4.0.0"
|
|
47
52
|
},
|
|
48
53
|
"peerDependencies": {
|
|
49
54
|
"react": "^16 || ^17",
|
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>;
|
package/MatchedRoute.d.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { MatchResult } from "path-to-regexp";
|
|
2
|
-
import { Route } from "./Route";
|
|
3
|
-
export declare class MatchedRoute {
|
|
4
|
-
private _route;
|
|
5
|
-
private _matchResult;
|
|
6
|
-
constructor(route: Route, match: MatchResult);
|
|
7
|
-
get route(): Route;
|
|
8
|
-
get matchResult(): MatchResult;
|
|
9
|
-
}
|
package/MatchedRoute.js
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.MatchedRoute = void 0;
|
|
4
|
-
var MatchedRoute = /** @class */ (function () {
|
|
5
|
-
function MatchedRoute(route, match) {
|
|
6
|
-
this._route = route;
|
|
7
|
-
this._matchResult = match;
|
|
8
|
-
}
|
|
9
|
-
Object.defineProperty(MatchedRoute.prototype, "route", {
|
|
10
|
-
get: function () {
|
|
11
|
-
return this._route;
|
|
12
|
-
},
|
|
13
|
-
enumerable: false,
|
|
14
|
-
configurable: true
|
|
15
|
-
});
|
|
16
|
-
Object.defineProperty(MatchedRoute.prototype, "matchResult", {
|
|
17
|
-
get: function () {
|
|
18
|
-
return this._matchResult;
|
|
19
|
-
},
|
|
20
|
-
enumerable: false,
|
|
21
|
-
configurable: true
|
|
22
|
-
});
|
|
23
|
-
return MatchedRoute;
|
|
24
|
-
}());
|
|
25
|
-
exports.MatchedRoute = MatchedRoute;
|
|
26
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWF0Y2hlZFJvdXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL01hdGNoZWRSb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFHQTtJQUlJLHNCQUFZLEtBQVksRUFBRSxLQUFrQjtRQUN4QyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNwQixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztJQUM5QixDQUFDO0lBRUQsc0JBQUksK0JBQUs7YUFBVDtZQUNJLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUN2QixDQUFDOzs7T0FBQTtJQUVELHNCQUFJLHFDQUFXO2FBQWY7WUFDSSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDN0IsQ0FBQzs7O09BQUE7SUFDTCxtQkFBQztBQUFELENBQUMsQUFoQkQsSUFnQkM7QUFoQlksb0NBQVkifQ==
|
package/Route.d.ts
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { Match } from "path-to-regexp";
|
|
2
|
-
export declare class Route {
|
|
3
|
-
private readonly _name;
|
|
4
|
-
private readonly _pattern;
|
|
5
|
-
private readonly _page;
|
|
6
|
-
private _keys;
|
|
7
|
-
private _keyNames;
|
|
8
|
-
private matchFunction;
|
|
9
|
-
private compileFunction;
|
|
10
|
-
constructor(name: string, pattern: string);
|
|
11
|
-
match(url: string): Match;
|
|
12
|
-
getHref(params?: {}): string;
|
|
13
|
-
getAs(params?: {}): string;
|
|
14
|
-
get name(): string;
|
|
15
|
-
get pattern(): string;
|
|
16
|
-
get page(): string;
|
|
17
|
-
}
|
package/Route.js
DELETED
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __assign = (this && this.__assign) || function () {
|
|
3
|
-
__assign = Object.assign || function(t) {
|
|
4
|
-
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
-
s = arguments[i];
|
|
6
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
-
t[p] = s[p];
|
|
8
|
-
}
|
|
9
|
-
return t;
|
|
10
|
-
};
|
|
11
|
-
return __assign.apply(this, arguments);
|
|
12
|
-
};
|
|
13
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
-
exports.Route = void 0;
|
|
15
|
-
var path_to_regexp_1 = require("path-to-regexp");
|
|
16
|
-
function toQuerystring(obj) {
|
|
17
|
-
return Object.keys(obj)
|
|
18
|
-
.filter(function (key) { return obj[key] !== null && obj[key] !== undefined; })
|
|
19
|
-
.map(function (key) {
|
|
20
|
-
var value = obj[key];
|
|
21
|
-
if (Array.isArray(value)) {
|
|
22
|
-
value = value.join("/");
|
|
23
|
-
}
|
|
24
|
-
return [encodeURIComponent(key), encodeURIComponent(value)].join("=");
|
|
25
|
-
})
|
|
26
|
-
.join("&");
|
|
27
|
-
}
|
|
28
|
-
var Route = /** @class */ (function () {
|
|
29
|
-
function Route(name, pattern) {
|
|
30
|
-
this._keys = [];
|
|
31
|
-
this._name = name;
|
|
32
|
-
this._page = name.replace(/(^|\/)index$/, "").replace(/^\/?/, "/");
|
|
33
|
-
this._pattern = pattern;
|
|
34
|
-
path_to_regexp_1.pathToRegexp(pattern, this._keys);
|
|
35
|
-
this._keyNames = this._keys.map(function (k) { return k.name.toString(); });
|
|
36
|
-
this.matchFunction = path_to_regexp_1.match(pattern, { encode: encodeURI, decode: decodeURIComponent });
|
|
37
|
-
this.compileFunction = path_to_regexp_1.compile(pattern, { encode: encodeURI });
|
|
38
|
-
}
|
|
39
|
-
Route.prototype.match = function (url) {
|
|
40
|
-
var _a;
|
|
41
|
-
return (_a = this.matchFunction(url)) !== null && _a !== void 0 ? _a : null;
|
|
42
|
-
};
|
|
43
|
-
Route.prototype.getHref = function (params) {
|
|
44
|
-
if (params === void 0) { params = {}; }
|
|
45
|
-
return this.page + "?" + toQuerystring(params);
|
|
46
|
-
};
|
|
47
|
-
Route.prototype.getAs = function (params) {
|
|
48
|
-
var _this = this;
|
|
49
|
-
if (params === void 0) { params = {}; }
|
|
50
|
-
var as = this.compileFunction(params) || "/";
|
|
51
|
-
var keys = Object.keys(params);
|
|
52
|
-
var qsKeys = keys.filter(function (key) { return _this._keyNames.indexOf(key) === -1; });
|
|
53
|
-
if (qsKeys.length === 0) {
|
|
54
|
-
return as;
|
|
55
|
-
}
|
|
56
|
-
var qsParams = qsKeys.reduce(function (qs, key) {
|
|
57
|
-
var _a;
|
|
58
|
-
return (__assign(__assign({}, qs), (_a = {}, _a[key] = params[key], _a)));
|
|
59
|
-
}, {});
|
|
60
|
-
return as + "?" + toQuerystring(qsParams);
|
|
61
|
-
};
|
|
62
|
-
Object.defineProperty(Route.prototype, "name", {
|
|
63
|
-
get: function () {
|
|
64
|
-
return this._name;
|
|
65
|
-
},
|
|
66
|
-
enumerable: false,
|
|
67
|
-
configurable: true
|
|
68
|
-
});
|
|
69
|
-
Object.defineProperty(Route.prototype, "pattern", {
|
|
70
|
-
get: function () {
|
|
71
|
-
return this._pattern;
|
|
72
|
-
},
|
|
73
|
-
enumerable: false,
|
|
74
|
-
configurable: true
|
|
75
|
-
});
|
|
76
|
-
Object.defineProperty(Route.prototype, "page", {
|
|
77
|
-
get: function () {
|
|
78
|
-
return this._page;
|
|
79
|
-
},
|
|
80
|
-
enumerable: false,
|
|
81
|
-
configurable: true
|
|
82
|
-
});
|
|
83
|
-
return Route;
|
|
84
|
-
}());
|
|
85
|
-
exports.Route = Route;
|
|
86
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvUm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFBQSxpREFBMEU7QUFFMUUsU0FBUyxhQUFhLENBQUMsR0FBUTtJQUMzQixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO1NBQ2xCLE1BQU0sQ0FBQyxVQUFDLEdBQUcsSUFBSyxPQUFBLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLFNBQVMsRUFBM0MsQ0FBMkMsQ0FBQztTQUM1RCxHQUFHLENBQUMsVUFBQyxHQUFHO1FBQ0wsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRXJCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN0QixLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUMzQjtRQUNELE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxRSxDQUFDLENBQUM7U0FDRCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkIsQ0FBQztBQUVEO0lBVUksZUFBWSxJQUFZLEVBQUUsT0FBZTtRQU5qQyxVQUFLLEdBQVUsRUFBRSxDQUFDO1FBT3RCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNuRSxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztRQUN4Qiw2QkFBWSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFDLENBQUMsSUFBSyxPQUFBLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQWpCLENBQWlCLENBQUMsQ0FBQztRQUUxRCxJQUFJLENBQUMsYUFBYSxHQUFHLHNCQUFLLENBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZGLElBQUksQ0FBQyxlQUFlLEdBQUcsd0JBQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRU0scUJBQUssR0FBWixVQUFhLEdBQVc7O1FBQ3BCLGFBQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsbUNBQUksSUFBSSxDQUFDO0lBQzNDLENBQUM7SUFFTSx1QkFBTyxHQUFkLFVBQWUsTUFBVztRQUFYLHVCQUFBLEVBQUEsV0FBVztRQUN0QixPQUFVLElBQUksQ0FBQyxJQUFJLFNBQUksYUFBYSxDQUFDLE1BQU0sQ0FBRyxDQUFDO0lBQ25ELENBQUM7SUFFTSxxQkFBSyxHQUFaLFVBQWEsTUFBVztRQUF4QixpQkFrQkM7UUFsQlksdUJBQUEsRUFBQSxXQUFXO1FBQ3BCLElBQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxDQUFDO1FBQy9DLElBQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDakMsSUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFDLEdBQUcsSUFBSyxPQUFBLEtBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFsQyxDQUFrQyxDQUFDLENBQUM7UUFFeEUsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUNyQixPQUFPLEVBQUUsQ0FBQztTQUNiO1FBRUQsSUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FDMUIsVUFBQyxFQUFFLEVBQUUsR0FBRzs7WUFBSyxPQUFBLHVCQUNOLEVBQUUsZ0JBQ0osR0FBRyxJQUFJLE1BQWMsQ0FBQyxHQUFHLENBQUMsT0FDN0I7UUFIVyxDQUdYLEVBQ0YsRUFBRSxDQUNMLENBQUM7UUFFRixPQUFVLEVBQUUsU0FBSSxhQUFhLENBQUMsUUFBUSxDQUFHLENBQUM7SUFDOUMsQ0FBQztJQUVELHNCQUFJLHVCQUFJO2FBQVI7WUFDSSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDdEIsQ0FBQzs7O09BQUE7SUFFRCxzQkFBSSwwQkFBTzthQUFYO1lBQ0ksT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ3pCLENBQUM7OztPQUFBO0lBRUQsc0JBQUksdUJBQUk7YUFBUjtZQUNJLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztRQUN0QixDQUFDOzs7T0FBQTtJQUNMLFlBQUM7QUFBRCxDQUFDLEFBNURELElBNERDO0FBNURZLHNCQUFLIn0=
|