@uxf/router 1.6.1 → 2.0.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 +29 -39
- package/Router.d.ts +4 -12
- package/Router.js +31 -128
- package/Router.test.js +6 -27
- package/helper.js +5 -3
- package/index.js +1 -1
- package/package.json +15 -34
- package/types.d.ts +3 -0
- 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,60 +23,46 @@ 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
|
+
import { router } from "./routes"
|
|
27
35
|
|
|
28
36
|
export const Link = router.getLink();
|
|
29
37
|
export const useRouter = router.getUseRouter();
|
|
30
38
|
export const Router = router.getSingletonRouter();
|
|
31
|
-
export const getRequestHandler = router.getRequestHandler;
|
|
32
39
|
export type RouteName = keyof RouteList;
|
|
33
40
|
```
|
|
34
41
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
}
|
|
47
|
-
|
|
42
|
+
Add configuration to `tsconfig.json`
|
|
43
|
+
|
|
44
|
+
```json
|
|
45
|
+
{
|
|
46
|
+
"compilerOptions": {
|
|
47
|
+
"baseUrl": "./src",
|
|
48
|
+
"paths": {
|
|
49
|
+
"@app-routes": [
|
|
50
|
+
"routes"
|
|
51
|
+
]
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
48
55
|
```
|
|
49
56
|
|
|
50
|
-
##
|
|
57
|
+
## How to use Link?
|
|
51
58
|
|
|
52
59
|
```tsx
|
|
53
60
|
// pages/index.js
|
|
54
|
-
import { Link } from '
|
|
61
|
+
import { Link } from '@app-routes'
|
|
55
62
|
|
|
56
63
|
export default () => (
|
|
57
64
|
<Link route='blog-article' params={{ articleId: 12 }}>
|
|
58
65
|
<a>Hello world</a>
|
|
59
66
|
</Link>
|
|
60
67
|
)
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
## Anchor
|
|
64
|
-
|
|
65
|
-
```tsx
|
|
66
|
-
// pages/index.js
|
|
67
|
-
import { Link, Router } from '../routes'
|
|
68
|
-
|
|
69
|
-
export default () => (
|
|
70
|
-
<Link route='blog-article' anchor="...">
|
|
71
|
-
<a>Hello world</a>
|
|
72
|
-
</Link>
|
|
73
|
-
)
|
|
74
|
-
|
|
75
|
-
// or
|
|
76
|
-
|
|
77
|
-
Router.push('blog-article', null, { anchor: "..." });
|
|
78
68
|
```
|
package/Router.d.ts
CHANGED
|
@@ -1,21 +1,13 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import { LinkProps, UxfRouter, UxfSingletonRouter
|
|
2
|
+
import { 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) => (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: (route: keyof T, params?: T[keyof T] | undefined) => { [key in keyof T]: string; }[keyof T];
|
|
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,165 +40,68 @@ 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
|
-
var MatchedRoute_1 = require("./MatchedRoute");
|
|
80
|
-
var Route_1 = require("./Route");
|
|
51
|
+
var qs_1 = __importDefault(require("qs"));
|
|
81
52
|
var Router = /** @class */ (function () {
|
|
82
|
-
function Router(routes
|
|
83
|
-
var e_1, _a;
|
|
53
|
+
function Router(routes) {
|
|
84
54
|
var _this = this;
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
this.getRequestHandler = function (app) {
|
|
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
|
-
return app.render(req, res, route.page, __assign(__assign({}, parsedUrl.query), matchResult.params));
|
|
100
|
-
}
|
|
101
|
-
return nextHandler(req, res, parsedUrl);
|
|
102
|
-
};
|
|
103
|
-
};
|
|
104
|
-
this.getRouteByUrl = function (url) {
|
|
105
|
-
var _a;
|
|
106
|
-
// TODO @vejvis - sjednotit s metodou getRequestHandler
|
|
107
|
-
var parsedUrl = url_1.parse(url, true);
|
|
108
|
-
var matchedRoute = _this.matchRoute((_a = parsedUrl.pathname) !== null && _a !== void 0 ? _a : "");
|
|
109
|
-
if (matchedRoute) {
|
|
110
|
-
return [matchedRoute.route.name, __assign(__assign({}, parsedUrl.query), matchedRoute.matchResult.params)];
|
|
111
|
-
}
|
|
112
|
-
throw new Error("Route for url '" + url + "' not found.");
|
|
113
|
-
};
|
|
114
|
-
this.getUrls = function (routeName, params, anchor) {
|
|
115
|
-
var route = _this.getRoute(routeName);
|
|
116
|
-
return {
|
|
117
|
-
as: route.getAs(_this.handleDefaultParams(routeName, params)) + (anchor ? "#" + anchor : ""),
|
|
118
|
-
href: route.getHref(_this.handleDefaultParams(routeName, params)),
|
|
119
|
-
};
|
|
55
|
+
this.getRouteByPathname = function (pathname) {
|
|
56
|
+
return Object.keys(_this.routes).find(function (route) { return _this.routes[route] === pathname; });
|
|
120
57
|
};
|
|
121
58
|
this.getLink = function () { return function (props) {
|
|
122
59
|
var route = props.route, params = props.params, anchor = props.anchor, linkProps = __rest(props, ["route", "params", "anchor"]);
|
|
123
|
-
|
|
124
|
-
return react_1.default.createElement(link_1.default, __assign({ as: as, href: href }, linkProps));
|
|
60
|
+
return react_1.default.createElement(link_1.default, __assign({ href: { pathname: _this.routes[route], query: params } }, linkProps));
|
|
125
61
|
}; };
|
|
126
62
|
this.getUseRouter = function () { return function () {
|
|
127
|
-
var
|
|
128
|
-
|
|
129
|
-
var parsedUrl = url_1.parse(router.asPath, true);
|
|
130
|
-
return __assign(__assign({}, router), { route: ((_c = (_b = _this.matchRoute((_a = parsedUrl.pathname) !== null && _a !== void 0 ? _a : "")) === null || _b === void 0 ? void 0 : _b.route.name) !== null && _c !== void 0 ? _c : null), push: function (route, params, options) {
|
|
63
|
+
var router = (0, router_1.useRouter)();
|
|
64
|
+
return __assign(__assign({}, router), { route: _this.getRouteByPathname(router.pathname), push: function (route, params, options) {
|
|
131
65
|
if (options === void 0) { options = {}; }
|
|
132
66
|
var anchor = options.anchor, nextJsOptions = __rest(options, ["anchor"]);
|
|
133
|
-
|
|
134
|
-
return router.push(href, as, nextJsOptions);
|
|
67
|
+
return router.push({ pathname: _this.routes[route], query: params }, undefined, nextJsOptions);
|
|
135
68
|
}, replace: function (route, params, options) {
|
|
136
69
|
if (options === void 0) { options = {}; }
|
|
137
70
|
var anchor = options.anchor, nextJsOptions = __rest(options, ["anchor"]);
|
|
138
|
-
|
|
139
|
-
return router.replace(href, as, nextJsOptions);
|
|
71
|
+
return router.replace({ pathname: _this.routes[route], query: params }, undefined, nextJsOptions);
|
|
140
72
|
} });
|
|
141
73
|
}; };
|
|
142
74
|
this.getSingletonRouter = function () {
|
|
143
75
|
return __assign(__assign({}, router_1.default), { push: function (route, params, options) {
|
|
144
76
|
if (options === void 0) { options = {}; }
|
|
145
77
|
var anchor = options.anchor, nextJsOptions = __rest(options, ["anchor"]);
|
|
146
|
-
|
|
147
|
-
return router_1.default.push(href, as, nextJsOptions);
|
|
78
|
+
return router_1.default.push({ pathname: _this.routes[route], query: params }, undefined, nextJsOptions);
|
|
148
79
|
}, replace: function (route, params, options) {
|
|
149
80
|
if (options === void 0) { options = {}; }
|
|
150
81
|
var anchor = options.anchor, nextJsOptions = __rest(options, ["anchor"]);
|
|
151
|
-
|
|
152
|
-
return router_1.default.replace(href, as, nextJsOptions);
|
|
82
|
+
return router_1.default.replace({ pathname: _this.routes[route], query: params }, undefined, nextJsOptions);
|
|
153
83
|
} });
|
|
154
84
|
};
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
finally {
|
|
163
|
-
try {
|
|
164
|
-
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
165
|
-
}
|
|
166
|
-
finally { if (e_1) throw e_1.error; }
|
|
167
|
-
}
|
|
168
|
-
this.config = config;
|
|
169
|
-
}
|
|
170
|
-
Router.prototype.handleDefaultParams = function (route, params) {
|
|
171
|
-
var _a = this.config.defaultParams, defaultParams = _a === void 0 ? function (_, params) { return params; } : _a;
|
|
172
|
-
return defaultParams(route, params);
|
|
173
|
-
};
|
|
174
|
-
Router.prototype.matchRoute = function (url) {
|
|
175
|
-
var e_2, _a;
|
|
176
|
-
try {
|
|
177
|
-
for (var _b = __values(this.routes), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
178
|
-
var route = _c.value;
|
|
179
|
-
var matchResult = route.match(url);
|
|
180
|
-
if (matchResult) {
|
|
181
|
-
return new MatchedRoute_1.MatchedRoute(route, matchResult);
|
|
85
|
+
this.getUrlByRoute = function (route, params) {
|
|
86
|
+
var pathname = _this.routes[route];
|
|
87
|
+
var restParams = {};
|
|
88
|
+
Object.keys(params !== null && params !== void 0 ? params : {}).forEach(function (key) {
|
|
89
|
+
var value = params[key];
|
|
90
|
+
if (pathname.includes("[".concat(key, "]"))) {
|
|
91
|
+
pathname = pathname.replace("[".concat(key, "]"), value);
|
|
182
92
|
}
|
|
93
|
+
else {
|
|
94
|
+
restParams[key] = value;
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
if (Object.keys(restParams).length > 0) {
|
|
98
|
+
pathname = "".concat(pathname, "?").concat(qs_1.default.stringify(restParams));
|
|
183
99
|
}
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
189
|
-
}
|
|
190
|
-
finally { if (e_2) throw e_2.error; }
|
|
191
|
-
}
|
|
192
|
-
return null;
|
|
193
|
-
};
|
|
194
|
-
Router.prototype.getRoute = function (routeName) {
|
|
195
|
-
var route = this.routes.find(function (r) { return r.name === routeName; });
|
|
196
|
-
if (!route) {
|
|
197
|
-
throw new Error("Route '" + routeName + "' not found.");
|
|
198
|
-
}
|
|
199
|
-
return route;
|
|
200
|
-
};
|
|
100
|
+
return pathname;
|
|
101
|
+
};
|
|
102
|
+
this.routes = routes;
|
|
103
|
+
}
|
|
201
104
|
return Router;
|
|
202
105
|
}());
|
|
203
106
|
exports.Router = Router;
|
|
204
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
107
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUm91dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1JvdXRlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxtREFBaUM7QUFDakMsb0RBQThFO0FBQzlFLGdEQUEwQjtBQUUxQiwwQ0FBb0I7QUFFcEI7SUFHSSxnQkFBWSxNQUFvQztRQUFoRCxpQkFFQztRQUVPLHVCQUFrQixHQUFHLFVBQUMsUUFBZ0I7WUFDMUMsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBQyxLQUFLLElBQUssT0FBQyxLQUFJLENBQUMsTUFBYyxDQUFDLEtBQUssQ0FBQyxLQUFLLFFBQVEsRUFBeEMsQ0FBd0MsQ0FBUSxDQUFDO1FBQ3JHLENBQUMsQ0FBQztRQUVLLFlBQU8sR0FBRyxjQUE4QixPQUFBLFVBQUMsS0FBSztZQUN6QyxJQUFBLEtBQUssR0FBbUMsS0FBSyxNQUF4QyxFQUFFLE1BQU0sR0FBMkIsS0FBSyxPQUFoQyxFQUFFLE1BQU0sR0FBbUIsS0FBSyxPQUF4QixFQUFLLFNBQVMsVUFBSyxLQUFLLEVBQS9DLDZCQUF1QyxDQUFGLENBQVc7WUFDdEQsT0FBTyw4QkFBQyxjQUFRLGFBQUMsSUFBSSxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQWEsRUFBRSxJQUFNLFNBQVMsRUFBSSxDQUFDO1FBQ3JHLENBQUMsRUFIOEMsQ0FHOUMsQ0FBQztRQUVLLGlCQUFZLEdBQUcsY0FBTSxPQUFBO1lBQ3hCLElBQU0sTUFBTSxHQUFHLElBQUEsa0JBQWEsR0FBRSxDQUFDO1lBRS9CLDZCQUNPLE1BQU0sS0FDVCxLQUFLLEVBQUUsS0FBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFDL0MsSUFB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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": "
|
|
3
|
+
"version": "2.0.1",
|
|
4
4
|
"description": "UXF Router",
|
|
5
5
|
"author": "UXFans <dev@uxf.cz>",
|
|
6
6
|
"homepage": "https://gitlab.com/uxf-npm/router#readme",
|
|
@@ -19,7 +19,7 @@
|
|
|
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
25
|
"typecheck": "tsc --noEmit --skipLibCheck"
|
|
@@ -28,43 +28,24 @@
|
|
|
28
28
|
"url": "https://gitlab.com/uxf-npm/cms/issues"
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"
|
|
31
|
+
"qs": "^6.10.1"
|
|
32
32
|
},
|
|
33
33
|
"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": "^3.8.3"
|
|
34
|
+
"@types/jest": "^27.4.0",
|
|
35
|
+
"@types/node": "^17.0.10",
|
|
36
|
+
"@types/qs": "^6.9.7",
|
|
37
|
+
"@types/react": "^17.0.38",
|
|
38
|
+
"@types/react-dom": "^17.0.11",
|
|
39
|
+
"jest": "^27.4.7",
|
|
40
|
+
"next": "^12.0.8",
|
|
41
|
+
"prettier": "^2.5.1",
|
|
42
|
+
"react": "^17.0.2",
|
|
43
|
+
"react-dom": "^17.0.2",
|
|
44
|
+
"ts-jest": "^27.1.3",
|
|
45
|
+
"typescript": "^4.5.4"
|
|
47
46
|
},
|
|
48
47
|
"peerDependencies": {
|
|
49
48
|
"react": "^16 || ^17",
|
|
50
49
|
"react-dom": "^16 || ^17"
|
|
51
|
-
},
|
|
52
|
-
"release": {
|
|
53
|
-
"plugins": [
|
|
54
|
-
"@semantic-release/commit-analyzer",
|
|
55
|
-
"@semantic-release/release-notes-generator",
|
|
56
|
-
[
|
|
57
|
-
"@semantic-release/gitlab",
|
|
58
|
-
{
|
|
59
|
-
"gitlabUrl": "https://gitlab.com/"
|
|
60
|
-
}
|
|
61
|
-
],
|
|
62
|
-
[
|
|
63
|
-
"@semantic-release/npm",
|
|
64
|
-
{
|
|
65
|
-
"pkgRoot": "dist"
|
|
66
|
-
}
|
|
67
|
-
]
|
|
68
|
-
]
|
|
69
50
|
}
|
|
70
51
|
}
|
package/types.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
1
2
|
import { LinkProps as NextLinkProps } from "next/link";
|
|
2
3
|
import { NextRouter, SingletonRouter } from "next/router";
|
|
4
|
+
import { ParsedUrlQuery } from "querystring";
|
|
3
5
|
export interface Options {
|
|
4
6
|
anchor?: string;
|
|
5
7
|
shallow?: boolean;
|
|
@@ -22,3 +24,4 @@ export interface UxfSingletonRouter<T> extends Omit<SingletonRouter, "push" | "r
|
|
|
22
24
|
export interface Config<T> {
|
|
23
25
|
defaultParams?: (route: keyof T, params: any) => any;
|
|
24
26
|
}
|
|
27
|
+
export declare type RequestHandler = (req: any, res: any, pathname: string, query: ParsedUrlQuery) => Promise<void>;
|
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=
|