Skip to content

Commit d35455c

Browse files
committed
fix: adjust typings to make tests on real-data happy
1 parent dca0de4 commit d35455c

File tree

5 files changed

+76
-62
lines changed

5 files changed

+76
-62
lines changed

Resources/js/router.ts

Lines changed: 38 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,12 @@ export interface QueryParamAddFunction {
1515
}
1616

1717
export interface Route {
18-
tokens: string[][];
19-
defaults: RouteDefaults;
20-
requirements: RouteRequirements;
21-
hosttokens: string[];
18+
tokens: ([string, string] | [string, string, string] | [string, string, string, string] | [string, string, string, string, boolean])[];
19+
defaults: undefined[] | RouteDefaults;
20+
requirements: undefined[] | RouteRequirements;
21+
hosttokens: string[][];
2222
schemes: string[];
23+
methods: string[];
2324
}
2425

2526
export interface RoutesMap {
@@ -30,7 +31,7 @@ export interface Context {
3031
base_url: string;
3132
prefix: string;
3233
host: string;
33-
port: string;
34+
port: string | null;
3435
scheme: string;
3536
locale: string;
3637
}
@@ -40,12 +41,14 @@ export interface RoutingData {
4041
routes: RoutesMap;
4142
prefix?: string;
4243
host: string;
43-
scheme: string;
44+
port?: string | null;
45+
scheme?: string;
46+
locale?: string;
4447
}
4548

4649
export class Router {
4750
private context_: Context;
48-
private routes_: RoutesMap;
51+
private routes_!: RoutesMap;
4952

5053
static getInstance(): Router {
5154
return Routing;
@@ -66,18 +69,21 @@ export class Router {
6669
this.setBaseUrl(data['base_url']);
6770
this.setRoutes(data['routes']);
6871

69-
if ('prefix' in data) {
72+
if (typeof data.prefix !== 'undefined') {
7073
this.setPrefix(data['prefix']);
7174
}
72-
if ('port' in data) {
75+
if (typeof data.port !== 'undefined') {
7376
this.setPort(data['port']);
7477
}
75-
if ('locale' in data) {
78+
if (typeof data.locale !== 'undefined') {
7679
this.setLocale(data['locale']);
7780
}
7881

7982
this.setHost(data['host']);
80-
this.setScheme(data['scheme']);
83+
84+
if (typeof data.scheme !== 'undefined') {
85+
this.setScheme(data['scheme']);
86+
}
8187
}
8288

8389
setRoutes(routes: RoutesMap): void {
@@ -116,11 +122,11 @@ export class Router {
116122
return this.context_.host;
117123
}
118124

119-
setPort(port: string) {
125+
setPort(port: string | null) {
120126
this.context_.port = port;
121127
}
122128

123-
getPort(): string {
129+
getPort(): string | null {
124130
return this.context_.port;
125131
};
126132

@@ -179,13 +185,13 @@ export class Router {
179185
* Generates the URL for a route.
180186
*/
181187
generate(name: string, opt_params?: RouteParams, absolute?: boolean): string {
182-
let route = (this.getRoute(name)),
183-
params = opt_params || {},
184-
unusedParams = Object.assign({}, params),
185-
url = '',
186-
optional = true,
187-
host = '',
188-
port = (typeof this.getPort() == 'undefined' || this.getPort() === null) ? '' : this.getPort();
188+
let route = (this.getRoute(name));
189+
let params = opt_params || {};
190+
let unusedParams = Object.assign({}, params);
191+
let url = '';
192+
let optional = true;
193+
let host = '';
194+
let port = (typeof this.getPort() == 'undefined' || this.getPort() === null) ? '' : this.getPort();
189195

190196
route.tokens.forEach((token) => {
191197
if ('text' === token[0]) {
@@ -196,14 +202,14 @@ export class Router {
196202
}
197203

198204
if ('variable' === token[0]) {
199-
let hasDefault = route.defaults && (token[3] in route.defaults);
200-
if (false === optional || !hasDefault || ((token[3] in params) && params[token[3]] != route.defaults[token[3]])) {
205+
let hasDefault = route.defaults && !Array.isArray(route.defaults) && token[3] && (token[3] in route.defaults);
206+
if (false === optional || !hasDefault || ((token[3] && token[3] in params) && !Array.isArray(route.defaults) && params[token[3]] != route.defaults[token[3]])) {
201207
let value;
202208

203-
if (token[3] in params) {
209+
if (token[3] && token[3] in params) {
204210
value = params[token[3]];
205211
delete unusedParams[token[3]];
206-
} else if (hasDefault) {
212+
} else if (token[3] && hasDefault && !Array.isArray(route.defaults)) {
207213
value = route.defaults[token[3]];
208214
} else if (optional) {
209215
return;
@@ -224,7 +230,7 @@ export class Router {
224230
}
225231

226232
optional = false;
227-
} else if (hasDefault && (token[3] in unusedParams)) {
233+
} else if (hasDefault && (token[3] && token[3] in unusedParams)) {
228234
delete unusedParams[token[3]];
229235
}
230236

@@ -251,7 +257,7 @@ export class Router {
251257
if (token[3] in params) {
252258
value = params[token[3]];
253259
delete unusedParams[token[3]];
254-
} else if (route.defaults && (token[3] in route.defaults)) {
260+
} else if (route.defaults && !Array.isArray(route.defaults) && (token[3] in route.defaults)) {
255261
value = route.defaults[token[3]];
256262
}
257263

@@ -276,9 +282,8 @@ export class Router {
276282
}
277283

278284
if (Object.keys(unusedParams).length > 0) {
279-
let prefix;
280-
let queryParams = [];
281-
let add = (key, value) => {
285+
let queryParams: string[] = [];
286+
let add = (key: string, value: string|(() => string)) => {
282287
// if value is a function then call it and assign it's return value as value
283288
value = (typeof value === 'function') ? value() : value;
284289

@@ -288,8 +293,10 @@ export class Router {
288293
queryParams.push(Router.encodeQueryComponent(key) + '=' + Router.encodeQueryComponent(value));
289294
};
290295

291-
for (prefix in unusedParams) {
292-
this.buildQueryParams(prefix, unusedParams[prefix], add);
296+
for (const prefix in unusedParams) {
297+
if(unusedParams.hasOwnProperty(prefix)) {
298+
this.buildQueryParams(prefix, unusedParams[prefix], add);
299+
}
293300
}
294301

295302
url = url + '?' + queryParams.join('&');

Resources/public/js/router.js

Lines changed: 25 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -55,20 +55,23 @@ var Router = /*#__PURE__*/function () {
5555
this.setBaseUrl(data['base_url']);
5656
this.setRoutes(data['routes']);
5757

58-
if ('prefix' in data) {
58+
if (typeof data.prefix !== 'undefined') {
5959
this.setPrefix(data['prefix']);
6060
}
6161

62-
if ('port' in data) {
62+
if (typeof data.port !== 'undefined') {
6363
this.setPort(data['port']);
6464
}
6565

66-
if ('locale' in data) {
66+
if (typeof data.locale !== 'undefined') {
6767
this.setLocale(data['locale']);
6868
}
6969

7070
this.setHost(data['host']);
71-
this.setScheme(data['scheme']);
71+
72+
if (typeof data.scheme !== 'undefined') {
73+
this.setScheme(data['scheme']);
74+
}
7275
}
7376
}, {
7477
key: "setRoutes",
@@ -191,14 +194,15 @@ var Router = /*#__PURE__*/function () {
191194
}, {
192195
key: "generate",
193196
value: function generate(name, opt_params, absolute) {
194-
var route = this.getRoute(name),
195-
params = opt_params || {},
196-
unusedParams = _extends({}, params),
197-
url = '',
198-
optional = true,
199-
host = '',
200-
port = typeof this.getPort() == 'undefined' || this.getPort() === null ? '' : this.getPort();
197+
var route = this.getRoute(name);
198+
var params = opt_params || {};
199+
200+
var unusedParams = _extends({}, params);
201201

202+
var url = '';
203+
var optional = true;
204+
var host = '';
205+
var port = typeof this.getPort() == 'undefined' || this.getPort() === null ? '' : this.getPort();
202206
route.tokens.forEach(function (token) {
203207
if ('text' === token[0]) {
204208
url = Router.encodePathComponent(token[1]) + url;
@@ -207,15 +211,15 @@ var Router = /*#__PURE__*/function () {
207211
}
208212

209213
if ('variable' === token[0]) {
210-
var hasDefault = route.defaults && token[3] in route.defaults;
214+
var hasDefault = route.defaults && !Array.isArray(route.defaults) && token[3] && token[3] in route.defaults;
211215

212-
if (false === optional || !hasDefault || token[3] in params && params[token[3]] != route.defaults[token[3]]) {
216+
if (false === optional || !hasDefault || token[3] && token[3] in params && !Array.isArray(route.defaults) && params[token[3]] != route.defaults[token[3]]) {
213217
var value;
214218

215-
if (token[3] in params) {
219+
if (token[3] && token[3] in params) {
216220
value = params[token[3]];
217221
delete unusedParams[token[3]];
218-
} else if (hasDefault) {
222+
} else if (token[3] && hasDefault && !Array.isArray(route.defaults)) {
219223
value = route.defaults[token[3]];
220224
} else if (optional) {
221225
return;
@@ -236,7 +240,7 @@ var Router = /*#__PURE__*/function () {
236240
}
237241

238242
optional = false;
239-
} else if (hasDefault && token[3] in unusedParams) {
243+
} else if (hasDefault && token[3] && token[3] in unusedParams) {
240244
delete unusedParams[token[3]];
241245
}
242246

@@ -262,7 +266,7 @@ var Router = /*#__PURE__*/function () {
262266
if (token[3] in params) {
263267
value = params[token[3]];
264268
delete unusedParams[token[3]];
265-
} else if (route.defaults && token[3] in route.defaults) {
269+
} else if (route.defaults && !Array.isArray(route.defaults) && token[3] in route.defaults) {
266270
value = route.defaults[token[3]];
267271
}
268272

@@ -286,8 +290,6 @@ var Router = /*#__PURE__*/function () {
286290
}
287291

288292
if (Object.keys(unusedParams).length > 0) {
289-
var _prefix;
290-
291293
var queryParams = [];
292294

293295
var add = function add(key, value) {
@@ -298,8 +300,10 @@ var Router = /*#__PURE__*/function () {
298300
queryParams.push(Router.encodeQueryComponent(key) + '=' + Router.encodeQueryComponent(value));
299301
};
300302

301-
for (_prefix in unusedParams) {
302-
this.buildQueryParams(_prefix, unusedParams[_prefix], add);
303+
for (var _prefix in unusedParams) {
304+
if (unusedParams.hasOwnProperty(_prefix)) {
305+
this.buildQueryParams(_prefix, unusedParams[_prefix], add);
306+
}
303307
}
304308

305309
url = url + '?' + queryParams.join('&');

0 commit comments

Comments
 (0)