space-router 0.9.2 → 0.9.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +4 -0
- package/dist/cjs/history.js +19 -19
- package/dist/cjs/match.js +18 -18
- package/dist/cjs/qs.js +4 -4
- package/dist/cjs/router.js +11 -11
- package/dist/esm/history.js +19 -19
- package/dist/esm/index.js +3 -3
- package/dist/esm/match.js +18 -18
- package/dist/esm/qs.js +4 -4
- package/dist/esm/router.js +14 -14
- package/package.json +8 -8
- package/tasks/build.js +2 -2
package/CHANGELOG.md
CHANGED
package/dist/cjs/history.js
CHANGED
|
@@ -16,8 +16,8 @@ function createHistory(options) {
|
|
|
16
16
|
var memory = [];
|
|
17
17
|
var off;
|
|
18
18
|
var destroyed = false;
|
|
19
|
-
if (typeof window ===
|
|
20
|
-
mode =
|
|
19
|
+
if (typeof window === 'undefined') {
|
|
20
|
+
mode = 'memory';
|
|
21
21
|
raf = sync ? function(cb) {
|
|
22
22
|
return cb();
|
|
23
23
|
} : global.setImmediate;
|
|
@@ -25,16 +25,16 @@ function createHistory(options) {
|
|
|
25
25
|
raf = sync ? function(cb) {
|
|
26
26
|
return cb();
|
|
27
27
|
} : requestAnimationFrame;
|
|
28
|
-
if (mode ===
|
|
29
|
-
mode =
|
|
28
|
+
if (mode === 'history' && !history.pushState) {
|
|
29
|
+
mode = 'hash';
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
32
|
function listen(onChange) {
|
|
33
33
|
onPop = function() {
|
|
34
34
|
return onChange(getUrl());
|
|
35
35
|
};
|
|
36
|
-
if (mode !==
|
|
37
|
-
off = on(window, mode ===
|
|
36
|
+
if (mode !== 'memory') {
|
|
37
|
+
off = on(window, mode === 'history' ? 'popstate' : 'hashchange', onPop);
|
|
38
38
|
raf(onPop);
|
|
39
39
|
}
|
|
40
40
|
return function() {
|
|
@@ -54,29 +54,29 @@ function createHistory(options) {
|
|
|
54
54
|
};
|
|
55
55
|
function go(url, replace) {
|
|
56
56
|
if (destroyed) return;
|
|
57
|
-
url = url.replace(/^\/?#?\/?/,
|
|
58
|
-
if (mode ===
|
|
59
|
-
history[replace ?
|
|
57
|
+
url = url.replace(/^\/?#?\/?/, '/').replace(/\/$/, '') || '/';
|
|
58
|
+
if (mode === 'history') {
|
|
59
|
+
history[replace ? 'replaceState' : 'pushState']({}, '', url);
|
|
60
60
|
raf(onPop);
|
|
61
|
-
} else if (mode ===
|
|
62
|
-
location[replace ?
|
|
63
|
-
} else if (mode ===
|
|
61
|
+
} else if (mode === 'hash') {
|
|
62
|
+
location[replace ? 'replace' : 'assign']('#' + url);
|
|
63
|
+
} else if (mode === 'memory') {
|
|
64
64
|
replace ? memory[memory.length - 1] = url : memory.push(url);
|
|
65
65
|
raf(onPop);
|
|
66
66
|
}
|
|
67
67
|
}
|
|
68
68
|
function getUrl() {
|
|
69
|
-
if (mode ===
|
|
69
|
+
if (mode === 'memory') {
|
|
70
70
|
return memory[memory.length - 1];
|
|
71
71
|
}
|
|
72
72
|
var hash = getHash();
|
|
73
|
-
if (mode ===
|
|
74
|
-
return hash ===
|
|
73
|
+
if (mode === 'hash') {
|
|
74
|
+
return hash === '' ? '/' : hash;
|
|
75
75
|
}
|
|
76
|
-
if (mode ===
|
|
76
|
+
if (mode === 'history') {
|
|
77
77
|
var url = location.pathname + location.search;
|
|
78
|
-
if (hash !==
|
|
79
|
-
url +=
|
|
78
|
+
if (hash !== '') {
|
|
79
|
+
url += '#' + hash;
|
|
80
80
|
}
|
|
81
81
|
return url;
|
|
82
82
|
}
|
|
@@ -85,7 +85,7 @@ function createHistory(options) {
|
|
|
85
85
|
// in Firefox where location.hash will always be decoded.
|
|
86
86
|
function getHash() {
|
|
87
87
|
var match = location.href.match(/#(.*)$/);
|
|
88
|
-
return match ? match[1].replace(
|
|
88
|
+
return match ? match[1].replace('#', '') : '';
|
|
89
89
|
}
|
|
90
90
|
}
|
|
91
91
|
function on(el, type, fn) {
|
package/dist/cjs/match.js
CHANGED
|
@@ -37,34 +37,34 @@ function matchOne(pattern, url, qs) {
|
|
|
37
37
|
var c = url.match(re);
|
|
38
38
|
var params = {};
|
|
39
39
|
var query = {};
|
|
40
|
-
var search =
|
|
41
|
-
var hash =
|
|
40
|
+
var search = '';
|
|
41
|
+
var hash = '';
|
|
42
42
|
var ret;
|
|
43
43
|
if (c && c[1]) {
|
|
44
|
-
search =
|
|
44
|
+
search = '?' + c[1];
|
|
45
45
|
query = qs.parse(c[1]);
|
|
46
46
|
}
|
|
47
47
|
if (c && c[2]) {
|
|
48
|
-
hash = c[2] ||
|
|
48
|
+
hash = c[2] || '';
|
|
49
49
|
}
|
|
50
|
-
if (pattern !==
|
|
51
|
-
url = segmentize(url.replace(re,
|
|
52
|
-
pattern = segmentize(pattern ||
|
|
50
|
+
if (pattern !== '*') {
|
|
51
|
+
url = segmentize(url.replace(re, ''));
|
|
52
|
+
pattern = segmentize(pattern || '');
|
|
53
53
|
var max = Math.max(url.length, pattern.length);
|
|
54
54
|
for(var i = 0; i < max; i++){
|
|
55
|
-
if (pattern[i] && pattern[i].charAt(0) ===
|
|
56
|
-
var param = pattern[i].replace(/(^:|[+*?]+$)/g,
|
|
57
|
-
var flags = (pattern[i].match(/[+*?]+$/) || {})[0] ||
|
|
58
|
-
var plus = flags.indexOf(
|
|
59
|
-
var star = flags.indexOf(
|
|
60
|
-
var val = url[i] ||
|
|
61
|
-
if (!val && !star && (flags.indexOf(
|
|
55
|
+
if (pattern[i] && pattern[i].charAt(0) === ':') {
|
|
56
|
+
var param = pattern[i].replace(/(^:|[+*?]+$)/g, '');
|
|
57
|
+
var flags = (pattern[i].match(/[+*?]+$/) || {})[0] || '';
|
|
58
|
+
var plus = flags.indexOf('+') > -1;
|
|
59
|
+
var star = flags.indexOf('*') > -1;
|
|
60
|
+
var val = url[i] || '';
|
|
61
|
+
if (!val && !star && (flags.indexOf('?') < 0 || plus)) {
|
|
62
62
|
ret = false;
|
|
63
63
|
break;
|
|
64
64
|
}
|
|
65
65
|
params[param] = decodeURIComponent(val);
|
|
66
66
|
if (plus || star) {
|
|
67
|
-
params[param] = url.slice(i).map(decodeURIComponent).join(
|
|
67
|
+
params[param] = url.slice(i).map(decodeURIComponent).join('/');
|
|
68
68
|
break;
|
|
69
69
|
}
|
|
70
70
|
} else if (pattern[i] !== url[i]) {
|
|
@@ -79,7 +79,7 @@ function matchOne(pattern, url, qs) {
|
|
|
79
79
|
return {
|
|
80
80
|
pattern: originalPattern,
|
|
81
81
|
url: originalUrl,
|
|
82
|
-
pathname: originalUrl.replace(re,
|
|
82
|
+
pathname: originalUrl.replace(re, ''),
|
|
83
83
|
params: params,
|
|
84
84
|
query: query,
|
|
85
85
|
search: search,
|
|
@@ -87,8 +87,8 @@ function matchOne(pattern, url, qs) {
|
|
|
87
87
|
};
|
|
88
88
|
}
|
|
89
89
|
function segmentize(url) {
|
|
90
|
-
return strip(url).split(
|
|
90
|
+
return strip(url).split('/');
|
|
91
91
|
}
|
|
92
92
|
function strip(url) {
|
|
93
|
-
return url.replace(/(^\/+|\/+$)/g,
|
|
93
|
+
return url.replace(/(^\/+|\/+$)/g, '');
|
|
94
94
|
}
|
package/dist/cjs/qs.js
CHANGED
|
@@ -10,8 +10,8 @@ Object.defineProperty(exports, "qs", {
|
|
|
10
10
|
});
|
|
11
11
|
var qs = {
|
|
12
12
|
parse: function(queryString) {
|
|
13
|
-
return queryString.split(
|
|
14
|
-
var parts = pair.split(
|
|
13
|
+
return queryString.split('&').reduce(function(acc, pair) {
|
|
14
|
+
var parts = pair.split('=');
|
|
15
15
|
acc[parts[0]] = decodeURIComponent(parts[1]);
|
|
16
16
|
return acc;
|
|
17
17
|
}, {});
|
|
@@ -19,9 +19,9 @@ var qs = {
|
|
|
19
19
|
stringify: function(query) {
|
|
20
20
|
return Object.keys(query).reduce(function(acc, key) {
|
|
21
21
|
if (query[key] !== undefined) {
|
|
22
|
-
acc.push(key +
|
|
22
|
+
acc.push(key + '=' + encodeURIComponent(query[key]));
|
|
23
23
|
}
|
|
24
24
|
return acc;
|
|
25
|
-
}, []).join(
|
|
25
|
+
}, []).join('&');
|
|
26
26
|
}
|
|
27
27
|
};
|
package/dist/cjs/router.js
CHANGED
|
@@ -105,13 +105,13 @@ function createRouter() {
|
|
|
105
105
|
var options = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
|
|
106
106
|
var history = null;
|
|
107
107
|
var routes = [];
|
|
108
|
-
var mode = options.mode ||
|
|
108
|
+
var mode = options.mode || 'history';
|
|
109
109
|
var qs = options.qs || _qs.qs;
|
|
110
110
|
var sync = options.sync || false;
|
|
111
111
|
var router = {
|
|
112
112
|
listen: function(routeMap, cb) {
|
|
113
113
|
if (history) {
|
|
114
|
-
throw new Error(
|
|
114
|
+
throw new Error('Already listening');
|
|
115
115
|
}
|
|
116
116
|
routes = flatten(routeMap);
|
|
117
117
|
history = (0, _history.createHistory)({
|
|
@@ -128,7 +128,7 @@ function createRouter() {
|
|
|
128
128
|
};
|
|
129
129
|
},
|
|
130
130
|
navigate: function(to, curr) {
|
|
131
|
-
if (typeof to ===
|
|
131
|
+
if (typeof to === 'string') {
|
|
132
132
|
to = {
|
|
133
133
|
url: to
|
|
134
134
|
};
|
|
@@ -142,7 +142,7 @@ function createRouter() {
|
|
|
142
142
|
},
|
|
143
143
|
href: function(to, curr) {
|
|
144
144
|
// already a url
|
|
145
|
-
if (typeof to ===
|
|
145
|
+
if (typeof to === 'string') {
|
|
146
146
|
return to;
|
|
147
147
|
}
|
|
148
148
|
// align with navigate API
|
|
@@ -153,20 +153,20 @@ function createRouter() {
|
|
|
153
153
|
curr = curr || router.match(router.getUrl());
|
|
154
154
|
to = merge(curr, to);
|
|
155
155
|
}
|
|
156
|
-
var url = to.pathname ||
|
|
156
|
+
var url = to.pathname || '/';
|
|
157
157
|
if (to.params) {
|
|
158
158
|
Object.keys(to.params).forEach(function(param) {
|
|
159
|
-
url = url.replace(
|
|
159
|
+
url = url.replace(':' + param, to.params[param]);
|
|
160
160
|
});
|
|
161
161
|
}
|
|
162
162
|
if (to.query && Object.keys(to.query).length) {
|
|
163
163
|
var query = qs.stringify(to.query);
|
|
164
164
|
if (query) {
|
|
165
|
-
url = url +
|
|
165
|
+
url = url + '?' + query;
|
|
166
166
|
}
|
|
167
167
|
}
|
|
168
168
|
if (to.hash) {
|
|
169
|
-
var prefix = to.hash.startsWith(
|
|
169
|
+
var prefix = to.hash.startsWith('#') ? '' : '#';
|
|
170
170
|
url = url + prefix + to.hash;
|
|
171
171
|
}
|
|
172
172
|
return url;
|
|
@@ -190,7 +190,7 @@ function flatten(routeMap) {
|
|
|
190
190
|
var parentData = [];
|
|
191
191
|
function addLevel(level) {
|
|
192
192
|
level.forEach(function(route) {
|
|
193
|
-
var _route_path = route.path, path = _route_path === void 0 ?
|
|
193
|
+
var _route_path = route.path, path = _route_path === void 0 ? '' : _route_path, children = route.routes, routeData = _object_without_properties(route, [
|
|
194
194
|
"path",
|
|
195
195
|
"routes"
|
|
196
196
|
]);
|
|
@@ -243,7 +243,7 @@ function transition(router, url, onNavigated) {
|
|
|
243
243
|
}
|
|
244
244
|
}
|
|
245
245
|
function redirectUrl(router, redirect, matchingRoute) {
|
|
246
|
-
if (typeof redirect ===
|
|
246
|
+
if (typeof redirect === 'function') {
|
|
247
247
|
redirect = redirect(matchingRoute);
|
|
248
248
|
}
|
|
249
249
|
return router.href(redirect);
|
|
@@ -260,7 +260,7 @@ function merge() {
|
|
|
260
260
|
var pathname = to.pathname || curr.pattern || curr.pathname;
|
|
261
261
|
var params = Object.assign({}, curr.params, to.params);
|
|
262
262
|
var query = to.query === null ? null : Object.assign({}, curr.query, to.query);
|
|
263
|
-
var hash = to.hash === null ? null : to.hash || curr.hash ||
|
|
263
|
+
var hash = to.hash === null ? null : to.hash || curr.hash || '';
|
|
264
264
|
return {
|
|
265
265
|
pathname: pathname,
|
|
266
266
|
params: params,
|
package/dist/esm/history.js
CHANGED
|
@@ -6,8 +6,8 @@ export function createHistory(options) {
|
|
|
6
6
|
var memory = [];
|
|
7
7
|
var off;
|
|
8
8
|
var destroyed = false;
|
|
9
|
-
if (typeof window ===
|
|
10
|
-
mode =
|
|
9
|
+
if (typeof window === 'undefined') {
|
|
10
|
+
mode = 'memory';
|
|
11
11
|
raf = sync ? function(cb) {
|
|
12
12
|
return cb();
|
|
13
13
|
} : global.setImmediate;
|
|
@@ -15,16 +15,16 @@ export function createHistory(options) {
|
|
|
15
15
|
raf = sync ? function(cb) {
|
|
16
16
|
return cb();
|
|
17
17
|
} : requestAnimationFrame;
|
|
18
|
-
if (mode ===
|
|
19
|
-
mode =
|
|
18
|
+
if (mode === 'history' && !history.pushState) {
|
|
19
|
+
mode = 'hash';
|
|
20
20
|
}
|
|
21
21
|
}
|
|
22
22
|
function listen(onChange) {
|
|
23
23
|
onPop = function() {
|
|
24
24
|
return onChange(getUrl());
|
|
25
25
|
};
|
|
26
|
-
if (mode !==
|
|
27
|
-
off = on(window, mode ===
|
|
26
|
+
if (mode !== 'memory') {
|
|
27
|
+
off = on(window, mode === 'history' ? 'popstate' : 'hashchange', onPop);
|
|
28
28
|
raf(onPop);
|
|
29
29
|
}
|
|
30
30
|
return function() {
|
|
@@ -44,29 +44,29 @@ export function createHistory(options) {
|
|
|
44
44
|
};
|
|
45
45
|
function go(url, replace) {
|
|
46
46
|
if (destroyed) return;
|
|
47
|
-
url = url.replace(/^\/?#?\/?/,
|
|
48
|
-
if (mode ===
|
|
49
|
-
history[replace ?
|
|
47
|
+
url = url.replace(/^\/?#?\/?/, '/').replace(/\/$/, '') || '/';
|
|
48
|
+
if (mode === 'history') {
|
|
49
|
+
history[replace ? 'replaceState' : 'pushState']({}, '', url);
|
|
50
50
|
raf(onPop);
|
|
51
|
-
} else if (mode ===
|
|
52
|
-
location[replace ?
|
|
53
|
-
} else if (mode ===
|
|
51
|
+
} else if (mode === 'hash') {
|
|
52
|
+
location[replace ? 'replace' : 'assign']('#' + url);
|
|
53
|
+
} else if (mode === 'memory') {
|
|
54
54
|
replace ? memory[memory.length - 1] = url : memory.push(url);
|
|
55
55
|
raf(onPop);
|
|
56
56
|
}
|
|
57
57
|
}
|
|
58
58
|
function getUrl() {
|
|
59
|
-
if (mode ===
|
|
59
|
+
if (mode === 'memory') {
|
|
60
60
|
return memory[memory.length - 1];
|
|
61
61
|
}
|
|
62
62
|
var hash = getHash();
|
|
63
|
-
if (mode ===
|
|
64
|
-
return hash ===
|
|
63
|
+
if (mode === 'hash') {
|
|
64
|
+
return hash === '' ? '/' : hash;
|
|
65
65
|
}
|
|
66
|
-
if (mode ===
|
|
66
|
+
if (mode === 'history') {
|
|
67
67
|
var url = location.pathname + location.search;
|
|
68
|
-
if (hash !==
|
|
69
|
-
url +=
|
|
68
|
+
if (hash !== '') {
|
|
69
|
+
url += '#' + hash;
|
|
70
70
|
}
|
|
71
71
|
return url;
|
|
72
72
|
}
|
|
@@ -75,7 +75,7 @@ export function createHistory(options) {
|
|
|
75
75
|
// in Firefox where location.hash will always be decoded.
|
|
76
76
|
function getHash() {
|
|
77
77
|
var match = location.href.match(/#(.*)$/);
|
|
78
|
-
return match ? match[1].replace(
|
|
78
|
+
return match ? match[1].replace('#', '') : '';
|
|
79
79
|
}
|
|
80
80
|
}
|
|
81
81
|
function on(el, type, fn) {
|
package/dist/esm/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { createRouter, merge } from
|
|
2
|
-
export { createHistory } from
|
|
3
|
-
export { qs } from
|
|
1
|
+
export { createRouter, merge } from './router';
|
|
2
|
+
export { createHistory } from './history';
|
|
3
|
+
export { qs } from './qs';
|
package/dist/esm/match.js
CHANGED
|
@@ -19,34 +19,34 @@ export function matchOne(pattern, url, qs) {
|
|
|
19
19
|
var c = url.match(re);
|
|
20
20
|
var params = {};
|
|
21
21
|
var query = {};
|
|
22
|
-
var search =
|
|
23
|
-
var hash =
|
|
22
|
+
var search = '';
|
|
23
|
+
var hash = '';
|
|
24
24
|
var ret;
|
|
25
25
|
if (c && c[1]) {
|
|
26
|
-
search =
|
|
26
|
+
search = '?' + c[1];
|
|
27
27
|
query = qs.parse(c[1]);
|
|
28
28
|
}
|
|
29
29
|
if (c && c[2]) {
|
|
30
|
-
hash = c[2] ||
|
|
30
|
+
hash = c[2] || '';
|
|
31
31
|
}
|
|
32
|
-
if (pattern !==
|
|
33
|
-
url = segmentize(url.replace(re,
|
|
34
|
-
pattern = segmentize(pattern ||
|
|
32
|
+
if (pattern !== '*') {
|
|
33
|
+
url = segmentize(url.replace(re, ''));
|
|
34
|
+
pattern = segmentize(pattern || '');
|
|
35
35
|
var max = Math.max(url.length, pattern.length);
|
|
36
36
|
for(var i = 0; i < max; i++){
|
|
37
|
-
if (pattern[i] && pattern[i].charAt(0) ===
|
|
38
|
-
var param = pattern[i].replace(/(^:|[+*?]+$)/g,
|
|
39
|
-
var flags = (pattern[i].match(/[+*?]+$/) || {})[0] ||
|
|
40
|
-
var plus = flags.indexOf(
|
|
41
|
-
var star = flags.indexOf(
|
|
42
|
-
var val = url[i] ||
|
|
43
|
-
if (!val && !star && (flags.indexOf(
|
|
37
|
+
if (pattern[i] && pattern[i].charAt(0) === ':') {
|
|
38
|
+
var param = pattern[i].replace(/(^:|[+*?]+$)/g, '');
|
|
39
|
+
var flags = (pattern[i].match(/[+*?]+$/) || {})[0] || '';
|
|
40
|
+
var plus = flags.indexOf('+') > -1;
|
|
41
|
+
var star = flags.indexOf('*') > -1;
|
|
42
|
+
var val = url[i] || '';
|
|
43
|
+
if (!val && !star && (flags.indexOf('?') < 0 || plus)) {
|
|
44
44
|
ret = false;
|
|
45
45
|
break;
|
|
46
46
|
}
|
|
47
47
|
params[param] = decodeURIComponent(val);
|
|
48
48
|
if (plus || star) {
|
|
49
|
-
params[param] = url.slice(i).map(decodeURIComponent).join(
|
|
49
|
+
params[param] = url.slice(i).map(decodeURIComponent).join('/');
|
|
50
50
|
break;
|
|
51
51
|
}
|
|
52
52
|
} else if (pattern[i] !== url[i]) {
|
|
@@ -61,7 +61,7 @@ export function matchOne(pattern, url, qs) {
|
|
|
61
61
|
return {
|
|
62
62
|
pattern: originalPattern,
|
|
63
63
|
url: originalUrl,
|
|
64
|
-
pathname: originalUrl.replace(re,
|
|
64
|
+
pathname: originalUrl.replace(re, ''),
|
|
65
65
|
params: params,
|
|
66
66
|
query: query,
|
|
67
67
|
search: search,
|
|
@@ -69,8 +69,8 @@ export function matchOne(pattern, url, qs) {
|
|
|
69
69
|
};
|
|
70
70
|
}
|
|
71
71
|
function segmentize(url) {
|
|
72
|
-
return strip(url).split(
|
|
72
|
+
return strip(url).split('/');
|
|
73
73
|
}
|
|
74
74
|
function strip(url) {
|
|
75
|
-
return url.replace(/(^\/+|\/+$)/g,
|
|
75
|
+
return url.replace(/(^\/+|\/+$)/g, '');
|
|
76
76
|
}
|
package/dist/esm/qs.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export var qs = {
|
|
2
2
|
parse: function parse(queryString) {
|
|
3
|
-
return queryString.split(
|
|
4
|
-
var parts = pair.split(
|
|
3
|
+
return queryString.split('&').reduce(function(acc, pair) {
|
|
4
|
+
var parts = pair.split('=');
|
|
5
5
|
acc[parts[0]] = decodeURIComponent(parts[1]);
|
|
6
6
|
return acc;
|
|
7
7
|
}, {});
|
|
@@ -9,9 +9,9 @@ export var qs = {
|
|
|
9
9
|
stringify: function stringify(query) {
|
|
10
10
|
return Object.keys(query).reduce(function(acc, key) {
|
|
11
11
|
if (query[key] !== undefined) {
|
|
12
|
-
acc.push(key +
|
|
12
|
+
acc.push(key + '=' + encodeURIComponent(query[key]));
|
|
13
13
|
}
|
|
14
14
|
return acc;
|
|
15
|
-
}, []).join(
|
|
15
|
+
}, []).join('&');
|
|
16
16
|
}
|
|
17
17
|
};
|
package/dist/esm/router.js
CHANGED
|
@@ -77,20 +77,20 @@ function _object_without_properties_loose(source, excluded) {
|
|
|
77
77
|
}
|
|
78
78
|
return target;
|
|
79
79
|
}
|
|
80
|
-
import { match as findMatch } from
|
|
81
|
-
import { createHistory } from
|
|
82
|
-
import { qs as defaultQs } from
|
|
80
|
+
import { match as findMatch } from './match';
|
|
81
|
+
import { createHistory } from './history';
|
|
82
|
+
import { qs as defaultQs } from './qs';
|
|
83
83
|
export function createRouter() {
|
|
84
84
|
var options = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
|
|
85
85
|
var history = null;
|
|
86
86
|
var routes = [];
|
|
87
|
-
var mode = options.mode ||
|
|
87
|
+
var mode = options.mode || 'history';
|
|
88
88
|
var qs = options.qs || defaultQs;
|
|
89
89
|
var sync = options.sync || false;
|
|
90
90
|
var router = {
|
|
91
91
|
listen: function listen(routeMap, cb) {
|
|
92
92
|
if (history) {
|
|
93
|
-
throw new Error(
|
|
93
|
+
throw new Error('Already listening');
|
|
94
94
|
}
|
|
95
95
|
routes = flatten(routeMap);
|
|
96
96
|
history = createHistory({
|
|
@@ -107,7 +107,7 @@ export function createRouter() {
|
|
|
107
107
|
};
|
|
108
108
|
},
|
|
109
109
|
navigate: function navigate(to, curr) {
|
|
110
|
-
if (typeof to ===
|
|
110
|
+
if (typeof to === 'string') {
|
|
111
111
|
to = {
|
|
112
112
|
url: to
|
|
113
113
|
};
|
|
@@ -121,7 +121,7 @@ export function createRouter() {
|
|
|
121
121
|
},
|
|
122
122
|
href: function href(to, curr) {
|
|
123
123
|
// already a url
|
|
124
|
-
if (typeof to ===
|
|
124
|
+
if (typeof to === 'string') {
|
|
125
125
|
return to;
|
|
126
126
|
}
|
|
127
127
|
// align with navigate API
|
|
@@ -132,20 +132,20 @@ export function createRouter() {
|
|
|
132
132
|
curr = curr || router.match(router.getUrl());
|
|
133
133
|
to = merge(curr, to);
|
|
134
134
|
}
|
|
135
|
-
var url = to.pathname ||
|
|
135
|
+
var url = to.pathname || '/';
|
|
136
136
|
if (to.params) {
|
|
137
137
|
Object.keys(to.params).forEach(function(param) {
|
|
138
|
-
url = url.replace(
|
|
138
|
+
url = url.replace(':' + param, to.params[param]);
|
|
139
139
|
});
|
|
140
140
|
}
|
|
141
141
|
if (to.query && Object.keys(to.query).length) {
|
|
142
142
|
var query = qs.stringify(to.query);
|
|
143
143
|
if (query) {
|
|
144
|
-
url = url +
|
|
144
|
+
url = url + '?' + query;
|
|
145
145
|
}
|
|
146
146
|
}
|
|
147
147
|
if (to.hash) {
|
|
148
|
-
var prefix = to.hash.startsWith(
|
|
148
|
+
var prefix = to.hash.startsWith('#') ? '' : '#';
|
|
149
149
|
url = url + prefix + to.hash;
|
|
150
150
|
}
|
|
151
151
|
return url;
|
|
@@ -169,7 +169,7 @@ export function flatten(routeMap) {
|
|
|
169
169
|
var parentData = [];
|
|
170
170
|
function addLevel(level) {
|
|
171
171
|
level.forEach(function(route) {
|
|
172
|
-
var _route_path = route.path, path = _route_path === void 0 ?
|
|
172
|
+
var _route_path = route.path, path = _route_path === void 0 ? '' : _route_path, children = route.routes, routeData = _object_without_properties(route, [
|
|
173
173
|
"path",
|
|
174
174
|
"routes"
|
|
175
175
|
]);
|
|
@@ -222,7 +222,7 @@ function transition(router, url, onNavigated) {
|
|
|
222
222
|
}
|
|
223
223
|
}
|
|
224
224
|
function redirectUrl(router, redirect, matchingRoute) {
|
|
225
|
-
if (typeof redirect ===
|
|
225
|
+
if (typeof redirect === 'function') {
|
|
226
226
|
redirect = redirect(matchingRoute);
|
|
227
227
|
}
|
|
228
228
|
return router.href(redirect);
|
|
@@ -239,7 +239,7 @@ export function merge() {
|
|
|
239
239
|
var pathname = to.pathname || curr.pattern || curr.pathname;
|
|
240
240
|
var params = Object.assign({}, curr.params, to.params);
|
|
241
241
|
var query = to.query === null ? null : Object.assign({}, curr.query, to.query);
|
|
242
|
-
var hash = to.hash === null ? null : to.hash || curr.hash ||
|
|
242
|
+
var hash = to.hash === null ? null : to.hash || curr.hash || '';
|
|
243
243
|
return {
|
|
244
244
|
pathname: pathname,
|
|
245
245
|
params: params,
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "space-router",
|
|
3
3
|
"description": "All the routing essentials.",
|
|
4
|
-
"version": "0.9.
|
|
4
|
+
"version": "0.9.3",
|
|
5
5
|
"main": "dist/cjs",
|
|
6
6
|
"module": "dist/esm",
|
|
7
7
|
"license": "ICS",
|
|
@@ -34,15 +34,15 @@
|
|
|
34
34
|
"release:docs": "hugo -s docs && gh-pages -d docs/public"
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|
|
37
|
-
"@swc-node/register": "^1.
|
|
38
|
-
"@swc/cli": "^0.
|
|
39
|
-
"@swc/core": "^1.
|
|
40
|
-
"ava": "^
|
|
41
|
-
"c8": "^
|
|
37
|
+
"@swc-node/register": "^1.9.1",
|
|
38
|
+
"@swc/cli": "^0.3.12",
|
|
39
|
+
"@swc/core": "^1.4.17",
|
|
40
|
+
"ava": "^6.1.2",
|
|
41
|
+
"c8": "^9.1.0",
|
|
42
42
|
"execa": "^8.0.1",
|
|
43
|
-
"gh-pages": "^6.
|
|
43
|
+
"gh-pages": "^6.1.1",
|
|
44
44
|
"healthier": "^7.0.0",
|
|
45
|
-
"prettier": "^3.
|
|
45
|
+
"prettier": "^3.2.5"
|
|
46
46
|
},
|
|
47
47
|
"healthier": {
|
|
48
48
|
"global": [
|
package/tasks/build.js
CHANGED
|
@@ -11,6 +11,6 @@ const path = require('path')
|
|
|
11
11
|
const pkg = JSON.parse(fs.readFileSync(path.join(__dirname, '../package.json')))
|
|
12
12
|
|
|
13
13
|
const swc = './node_modules/.bin/swc'
|
|
14
|
-
await sh(`${swc} --no-swcrc src -d ${pkg.main} --config-file=./.swc-cjs`)
|
|
15
|
-
await sh(`${swc} --no-swcrc src -d ${pkg.module} --config-file=./.swc-esm`)
|
|
14
|
+
await sh(`${swc} --no-swcrc src -d ${pkg.main} --strip-leading-paths --config-file=./.swc-cjs`)
|
|
15
|
+
await sh(`${swc} --no-swcrc src -d ${pkg.module} --strip-leading-paths --config-file=./.swc-esm`)
|
|
16
16
|
})()
|