space-router 0.9.4 → 1.0.0
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 +1 -0
- package/dist/history.d.ts +12 -0
- package/dist/history.js +98 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +3 -0
- package/dist/match.d.ts +16 -0
- package/dist/match.js +68 -0
- package/dist/qs.d.ts +5 -0
- package/dist/qs.js +27 -0
- package/dist/router.d.ts +42 -0
- package/dist/router.js +131 -0
- package/package.json +30 -31
- package/src/history.ts +116 -0
- package/src/index.ts +7 -0
- package/src/match.ts +88 -0
- package/src/qs.ts +33 -0
- package/src/router.ts +197 -0
- package/.prettierignore +0 -5
- package/.prettierrc +0 -6
- package/.swc-cjs +0 -11
- package/.swc-esm +0 -1
- package/CHANGELOG.md +0 -64
- package/dist/cjs/history.js +0 -96
- package/dist/cjs/index.js +0 -27
- package/dist/cjs/match.js +0 -94
- package/dist/cjs/qs.js +0 -27
- package/dist/cjs/router.js +0 -270
- package/dist/esm/history.js +0 -86
- package/dist/esm/index.js +0 -3
- package/dist/esm/match.js +0 -76
- package/dist/esm/qs.js +0 -17
- package/dist/esm/router.js +0 -249
- package/docs/archetypes/default.md +0 -7
- package/docs/assets/js/bg.js +0 -742
- package/docs/assets/styles/base.scss +0 -2816
- package/docs/assets/styles/main.scss +0 -1368
- package/docs/assets/styles/syntax-m.scss +0 -264
- package/docs/assets/styles/syntax.scss +0 -240
- package/docs/config.toml +0 -9
- package/docs/content/_index.md +0 -189
- package/docs/layouts/404.html +0 -0
- package/docs/layouts/_default/baseof.html +0 -68
- package/docs/layouts/index.html +0 -31
- package/docs/layouts/partials/favicon.html +0 -5
- package/docs/layouts/partials/header.html +0 -0
- package/docs/layouts/partials/meta/name-author.html +0 -6
- package/docs/layouts/partials/meta/ogimage.html +0 -8
- package/docs/layouts/partials/site-verification.html +0 -12
- package/docs/layouts/shortcodes/callout.html +0 -1
- package/docs/static/js/highlightjs-9.15.10.min.js +0 -2
- package/docs/static/js/master.js +0 -0
- package/docs/static/js/tocbot.min.js +0 -18
- package/docs/static/space.png +0 -0
- package/src/history.js +0 -93
- package/src/index.js +0 -3
- package/src/match.js +0 -87
- package/src/qs.js +0 -20
- package/src/router.js +0 -147
- package/tasks/build.js +0 -16
- package/test/flatten.test.js +0 -58
- package/test/match.test.js +0 -68
- package/test/router.test.js +0 -157
package/dist/cjs/router.js
DELETED
|
@@ -1,270 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
function _export(target, all) {
|
|
6
|
-
for(var name in all)Object.defineProperty(target, name, {
|
|
7
|
-
enumerable: true,
|
|
8
|
-
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
9
|
-
});
|
|
10
|
-
}
|
|
11
|
-
_export(exports, {
|
|
12
|
-
get createRouter () {
|
|
13
|
-
return createRouter;
|
|
14
|
-
},
|
|
15
|
-
get flatten () {
|
|
16
|
-
return flatten;
|
|
17
|
-
},
|
|
18
|
-
get merge () {
|
|
19
|
-
return merge;
|
|
20
|
-
}
|
|
21
|
-
});
|
|
22
|
-
var _match = require("./match");
|
|
23
|
-
var _history = require("./history");
|
|
24
|
-
var _qs = require("./qs");
|
|
25
|
-
function _define_property(obj, key, value) {
|
|
26
|
-
if (key in obj) {
|
|
27
|
-
Object.defineProperty(obj, key, {
|
|
28
|
-
value: value,
|
|
29
|
-
enumerable: true,
|
|
30
|
-
configurable: true,
|
|
31
|
-
writable: true
|
|
32
|
-
});
|
|
33
|
-
} else {
|
|
34
|
-
obj[key] = value;
|
|
35
|
-
}
|
|
36
|
-
return obj;
|
|
37
|
-
}
|
|
38
|
-
function _object_spread(target) {
|
|
39
|
-
for(var i = 1; i < arguments.length; i++){
|
|
40
|
-
var source = arguments[i] != null ? arguments[i] : {};
|
|
41
|
-
var ownKeys = Object.keys(source);
|
|
42
|
-
if (typeof Object.getOwnPropertySymbols === "function") {
|
|
43
|
-
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
|
|
44
|
-
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
|
|
45
|
-
}));
|
|
46
|
-
}
|
|
47
|
-
ownKeys.forEach(function(key) {
|
|
48
|
-
_define_property(target, key, source[key]);
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
return target;
|
|
52
|
-
}
|
|
53
|
-
function ownKeys(object, enumerableOnly) {
|
|
54
|
-
var keys = Object.keys(object);
|
|
55
|
-
if (Object.getOwnPropertySymbols) {
|
|
56
|
-
var symbols = Object.getOwnPropertySymbols(object);
|
|
57
|
-
if (enumerableOnly) {
|
|
58
|
-
symbols = symbols.filter(function(sym) {
|
|
59
|
-
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
keys.push.apply(keys, symbols);
|
|
63
|
-
}
|
|
64
|
-
return keys;
|
|
65
|
-
}
|
|
66
|
-
function _object_spread_props(target, source) {
|
|
67
|
-
source = source != null ? source : {};
|
|
68
|
-
if (Object.getOwnPropertyDescriptors) {
|
|
69
|
-
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
|
|
70
|
-
} else {
|
|
71
|
-
ownKeys(Object(source)).forEach(function(key) {
|
|
72
|
-
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
|
|
73
|
-
});
|
|
74
|
-
}
|
|
75
|
-
return target;
|
|
76
|
-
}
|
|
77
|
-
function _object_without_properties(source, excluded) {
|
|
78
|
-
if (source == null) return {};
|
|
79
|
-
var target = _object_without_properties_loose(source, excluded);
|
|
80
|
-
var key, i;
|
|
81
|
-
if (Object.getOwnPropertySymbols) {
|
|
82
|
-
var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
|
|
83
|
-
for(i = 0; i < sourceSymbolKeys.length; i++){
|
|
84
|
-
key = sourceSymbolKeys[i];
|
|
85
|
-
if (excluded.indexOf(key) >= 0) continue;
|
|
86
|
-
if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
|
|
87
|
-
target[key] = source[key];
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
return target;
|
|
91
|
-
}
|
|
92
|
-
function _object_without_properties_loose(source, excluded) {
|
|
93
|
-
if (source == null) return {};
|
|
94
|
-
var target = {};
|
|
95
|
-
var sourceKeys = Object.keys(source);
|
|
96
|
-
var key, i;
|
|
97
|
-
for(i = 0; i < sourceKeys.length; i++){
|
|
98
|
-
key = sourceKeys[i];
|
|
99
|
-
if (excluded.indexOf(key) >= 0) continue;
|
|
100
|
-
target[key] = source[key];
|
|
101
|
-
}
|
|
102
|
-
return target;
|
|
103
|
-
}
|
|
104
|
-
function createRouter() {
|
|
105
|
-
var options = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
|
|
106
|
-
var history = null;
|
|
107
|
-
var routes = [];
|
|
108
|
-
var mode = options.mode || 'history';
|
|
109
|
-
var qs = options.qs || _qs.qs;
|
|
110
|
-
var sync = options.sync || false;
|
|
111
|
-
var router = {
|
|
112
|
-
listen: function listen(routeMap, cb) {
|
|
113
|
-
if (history) {
|
|
114
|
-
throw new Error('Already listening');
|
|
115
|
-
}
|
|
116
|
-
routes = flatten(routeMap);
|
|
117
|
-
history = (0, _history.createHistory)({
|
|
118
|
-
mode: mode,
|
|
119
|
-
sync: sync
|
|
120
|
-
});
|
|
121
|
-
var dispose = history.listen(function(url) {
|
|
122
|
-
return transition(router, url, cb);
|
|
123
|
-
});
|
|
124
|
-
return function() {
|
|
125
|
-
dispose();
|
|
126
|
-
history = null;
|
|
127
|
-
routes = [];
|
|
128
|
-
};
|
|
129
|
-
},
|
|
130
|
-
navigate: function navigate(to, curr) {
|
|
131
|
-
if (typeof to === 'string') {
|
|
132
|
-
to = {
|
|
133
|
-
url: to
|
|
134
|
-
};
|
|
135
|
-
}
|
|
136
|
-
var url = router.href(to, curr);
|
|
137
|
-
if (to.replace) {
|
|
138
|
-
history.replace(url);
|
|
139
|
-
} else {
|
|
140
|
-
history.push(url);
|
|
141
|
-
}
|
|
142
|
-
},
|
|
143
|
-
href: function href(to, curr) {
|
|
144
|
-
// already a url
|
|
145
|
-
if (typeof to === 'string') {
|
|
146
|
-
return to;
|
|
147
|
-
}
|
|
148
|
-
// align with navigate API
|
|
149
|
-
if (to.url) {
|
|
150
|
-
return to.url;
|
|
151
|
-
}
|
|
152
|
-
if (to.merge) {
|
|
153
|
-
curr = curr || router.match(router.getUrl());
|
|
154
|
-
to = merge(curr, to);
|
|
155
|
-
}
|
|
156
|
-
var url = to.pathname || '/';
|
|
157
|
-
if (to.params) {
|
|
158
|
-
Object.keys(to.params).forEach(function(param) {
|
|
159
|
-
url = url.replace(':' + param, to.params[param]);
|
|
160
|
-
});
|
|
161
|
-
}
|
|
162
|
-
if (to.query && Object.keys(to.query).length) {
|
|
163
|
-
var query = qs.stringify(to.query);
|
|
164
|
-
if (query) {
|
|
165
|
-
url = url + '?' + query;
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
if (to.hash) {
|
|
169
|
-
var prefix = to.hash.startsWith('#') ? '' : '#';
|
|
170
|
-
url = url + prefix + to.hash;
|
|
171
|
-
}
|
|
172
|
-
return url;
|
|
173
|
-
},
|
|
174
|
-
match: function match(url) {
|
|
175
|
-
var route = (0, _match.match)(routes, url, qs);
|
|
176
|
-
if (route) {
|
|
177
|
-
return _object_spread_props(_object_spread({}, route), {
|
|
178
|
-
data: data(routes, route)
|
|
179
|
-
});
|
|
180
|
-
}
|
|
181
|
-
},
|
|
182
|
-
getUrl: function getUrl() {
|
|
183
|
-
return history.getUrl();
|
|
184
|
-
}
|
|
185
|
-
};
|
|
186
|
-
return router;
|
|
187
|
-
}
|
|
188
|
-
function flatten(routeMap) {
|
|
189
|
-
var routes = [];
|
|
190
|
-
var parentData = [];
|
|
191
|
-
function addLevel(level) {
|
|
192
|
-
level.forEach(function(route) {
|
|
193
|
-
var _route_path = route.path, path = _route_path === void 0 ? '' : _route_path, children = route.routes, routeData = _object_without_properties(route, [
|
|
194
|
-
"path",
|
|
195
|
-
"routes"
|
|
196
|
-
]);
|
|
197
|
-
routes.push({
|
|
198
|
-
pattern: path,
|
|
199
|
-
data: parentData.concat([
|
|
200
|
-
routeData
|
|
201
|
-
])
|
|
202
|
-
});
|
|
203
|
-
if (children) {
|
|
204
|
-
parentData.push(routeData);
|
|
205
|
-
addLevel(children);
|
|
206
|
-
parentData.pop();
|
|
207
|
-
}
|
|
208
|
-
});
|
|
209
|
-
}
|
|
210
|
-
addLevel(routeMap);
|
|
211
|
-
return routes;
|
|
212
|
-
}
|
|
213
|
-
function transition(router, url, onNavigated) {
|
|
214
|
-
var route = router.match(url);
|
|
215
|
-
if (route) {
|
|
216
|
-
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
217
|
-
try {
|
|
218
|
-
for(var _iterator = route.data[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
219
|
-
var r = _step.value;
|
|
220
|
-
if (r.redirect) {
|
|
221
|
-
var _$url = redirectUrl(router, r.redirect, route);
|
|
222
|
-
return router.navigate({
|
|
223
|
-
url: _$url,
|
|
224
|
-
replace: true
|
|
225
|
-
});
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
} catch (err) {
|
|
229
|
-
_didIteratorError = true;
|
|
230
|
-
_iteratorError = err;
|
|
231
|
-
} finally{
|
|
232
|
-
try {
|
|
233
|
-
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
234
|
-
_iterator.return();
|
|
235
|
-
}
|
|
236
|
-
} finally{
|
|
237
|
-
if (_didIteratorError) {
|
|
238
|
-
throw _iteratorError;
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
onNavigated && onNavigated(route);
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
function redirectUrl(router, redirect, matchingRoute) {
|
|
246
|
-
if (typeof redirect === 'function') {
|
|
247
|
-
redirect = redirect(matchingRoute);
|
|
248
|
-
}
|
|
249
|
-
return router.href(redirect);
|
|
250
|
-
}
|
|
251
|
-
function data(routes, matchingRoute) {
|
|
252
|
-
for(var i = 0; i < routes.length; i++){
|
|
253
|
-
if (routes[i].pattern === matchingRoute.pattern) {
|
|
254
|
-
return routes[i].data;
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
function merge() {
|
|
259
|
-
var curr = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, to = arguments.length > 1 ? arguments[1] : void 0;
|
|
260
|
-
var pathname = to.pathname || curr.pattern || curr.pathname;
|
|
261
|
-
var params = Object.assign({}, curr.params, to.params);
|
|
262
|
-
var query = to.query === null ? null : Object.assign({}, curr.query, to.query);
|
|
263
|
-
var hash = to.hash === null ? null : to.hash || curr.hash || '';
|
|
264
|
-
return {
|
|
265
|
-
pathname: pathname,
|
|
266
|
-
params: params,
|
|
267
|
-
query: query,
|
|
268
|
-
hash: hash
|
|
269
|
-
};
|
|
270
|
-
}
|
package/dist/esm/history.js
DELETED
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
export function createHistory(options) {
|
|
2
|
-
var sync = options.sync;
|
|
3
|
-
var mode = options.mode;
|
|
4
|
-
var raf;
|
|
5
|
-
var onPop;
|
|
6
|
-
var memory = [];
|
|
7
|
-
var off;
|
|
8
|
-
var destroyed = false;
|
|
9
|
-
if (typeof window === 'undefined') {
|
|
10
|
-
mode = 'memory';
|
|
11
|
-
raf = sync ? function(cb) {
|
|
12
|
-
return cb();
|
|
13
|
-
} : global.setImmediate;
|
|
14
|
-
} else {
|
|
15
|
-
raf = sync ? function(cb) {
|
|
16
|
-
return cb();
|
|
17
|
-
} : requestAnimationFrame;
|
|
18
|
-
if (mode === 'history' && !history.pushState) {
|
|
19
|
-
mode = 'hash';
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
function listen(onChange) {
|
|
23
|
-
onPop = function() {
|
|
24
|
-
return onChange(getUrl());
|
|
25
|
-
};
|
|
26
|
-
if (mode !== 'memory') {
|
|
27
|
-
off = on(window, mode === 'history' ? 'popstate' : 'hashchange', onPop);
|
|
28
|
-
raf(onPop);
|
|
29
|
-
}
|
|
30
|
-
return function() {
|
|
31
|
-
destroyed = true;
|
|
32
|
-
off && off();
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
return {
|
|
36
|
-
listen: listen,
|
|
37
|
-
getUrl: getUrl,
|
|
38
|
-
push: function push(url) {
|
|
39
|
-
go(url);
|
|
40
|
-
},
|
|
41
|
-
replace: function replace(url) {
|
|
42
|
-
go(url, true);
|
|
43
|
-
}
|
|
44
|
-
};
|
|
45
|
-
function go(url, replace) {
|
|
46
|
-
if (destroyed) return;
|
|
47
|
-
url = url.replace(/^\/?#?\/?/, '/').replace(/\/$/, '') || '/';
|
|
48
|
-
if (mode === 'history') {
|
|
49
|
-
history[replace ? 'replaceState' : 'pushState']({}, '', url);
|
|
50
|
-
raf(onPop);
|
|
51
|
-
} else if (mode === 'hash') {
|
|
52
|
-
location[replace ? 'replace' : 'assign']('#' + url);
|
|
53
|
-
} else if (mode === 'memory') {
|
|
54
|
-
replace ? memory[memory.length - 1] = url : memory.push(url);
|
|
55
|
-
raf(onPop);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
function getUrl() {
|
|
59
|
-
if (mode === 'memory') {
|
|
60
|
-
return memory[memory.length - 1];
|
|
61
|
-
}
|
|
62
|
-
var hash = getHash();
|
|
63
|
-
if (mode === 'hash') {
|
|
64
|
-
return hash === '' ? '/' : hash;
|
|
65
|
-
}
|
|
66
|
-
if (mode === 'history') {
|
|
67
|
-
var url = location.pathname + location.search;
|
|
68
|
-
if (hash !== '') {
|
|
69
|
-
url += '#' + hash;
|
|
70
|
-
}
|
|
71
|
-
return url;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
// Gets the true hash value. Cannot use location.hash directly due to bug
|
|
75
|
-
// in Firefox where location.hash will always be decoded.
|
|
76
|
-
function getHash() {
|
|
77
|
-
var match = location.href.match(/#(.*)$/);
|
|
78
|
-
return match ? match[1].replace('#', '') : '';
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
function on(el, type, fn) {
|
|
82
|
-
el.addEventListener(type, fn, false);
|
|
83
|
-
return function off() {
|
|
84
|
-
el.removeEventListener(type, fn, false);
|
|
85
|
-
};
|
|
86
|
-
}
|
package/dist/esm/index.js
DELETED
package/dist/esm/match.js
DELETED
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
export function match(routes, url, qs) {
|
|
2
|
-
if (!url) {
|
|
3
|
-
return;
|
|
4
|
-
}
|
|
5
|
-
for(var i = 0; i < routes.length; i++){
|
|
6
|
-
var m = matchOne(routes[i].pattern, url, qs);
|
|
7
|
-
if (m) {
|
|
8
|
-
return m;
|
|
9
|
-
}
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
export function matchOne(pattern, url, qs) {
|
|
13
|
-
if (!pattern) {
|
|
14
|
-
return false;
|
|
15
|
-
}
|
|
16
|
-
var re = /(?:\?([^#]*))?(#.*)?$/;
|
|
17
|
-
var originalUrl = url;
|
|
18
|
-
var originalPattern = pattern;
|
|
19
|
-
var c = url.match(re);
|
|
20
|
-
var params = {};
|
|
21
|
-
var query = {};
|
|
22
|
-
var search = '';
|
|
23
|
-
var hash = '';
|
|
24
|
-
var ret;
|
|
25
|
-
if (c && c[1]) {
|
|
26
|
-
search = '?' + c[1];
|
|
27
|
-
query = qs.parse(c[1]);
|
|
28
|
-
}
|
|
29
|
-
if (c && c[2]) {
|
|
30
|
-
hash = c[2] || '';
|
|
31
|
-
}
|
|
32
|
-
if (pattern !== '*') {
|
|
33
|
-
url = segmentize(url.replace(re, ''));
|
|
34
|
-
pattern = segmentize(pattern || '');
|
|
35
|
-
var max = Math.max(url.length, pattern.length);
|
|
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('+') > -1;
|
|
41
|
-
var star = flags.indexOf('*') > -1;
|
|
42
|
-
var val = url[i] || '';
|
|
43
|
-
if (!val && !star && (flags.indexOf('?') < 0 || plus)) {
|
|
44
|
-
ret = false;
|
|
45
|
-
break;
|
|
46
|
-
}
|
|
47
|
-
params[param] = decodeURIComponent(val);
|
|
48
|
-
if (plus || star) {
|
|
49
|
-
params[param] = url.slice(i).map(decodeURIComponent).join('/');
|
|
50
|
-
break;
|
|
51
|
-
}
|
|
52
|
-
} else if (pattern[i] !== url[i]) {
|
|
53
|
-
ret = false;
|
|
54
|
-
break;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
if (ret === false) {
|
|
58
|
-
return false;
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
return {
|
|
62
|
-
pattern: originalPattern,
|
|
63
|
-
url: originalUrl,
|
|
64
|
-
pathname: originalUrl.replace(re, ''),
|
|
65
|
-
params: params,
|
|
66
|
-
query: query,
|
|
67
|
-
search: search,
|
|
68
|
-
hash: hash
|
|
69
|
-
};
|
|
70
|
-
}
|
|
71
|
-
function segmentize(url) {
|
|
72
|
-
return strip(url).split('/');
|
|
73
|
-
}
|
|
74
|
-
function strip(url) {
|
|
75
|
-
return url.replace(/(^\/+|\/+$)/g, '');
|
|
76
|
-
}
|
package/dist/esm/qs.js
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
export var qs = {
|
|
2
|
-
parse: function parse(queryString) {
|
|
3
|
-
return queryString.split('&').reduce(function(acc, pair) {
|
|
4
|
-
var parts = pair.split('=');
|
|
5
|
-
acc[parts[0]] = decodeURIComponent(parts[1]);
|
|
6
|
-
return acc;
|
|
7
|
-
}, {});
|
|
8
|
-
},
|
|
9
|
-
stringify: function stringify(query) {
|
|
10
|
-
return Object.keys(query).reduce(function(acc, key) {
|
|
11
|
-
if (query[key] !== undefined) {
|
|
12
|
-
acc.push(key + '=' + encodeURIComponent(query[key]));
|
|
13
|
-
}
|
|
14
|
-
return acc;
|
|
15
|
-
}, []).join('&');
|
|
16
|
-
}
|
|
17
|
-
};
|
package/dist/esm/router.js
DELETED
|
@@ -1,249 +0,0 @@
|
|
|
1
|
-
function _define_property(obj, key, value) {
|
|
2
|
-
if (key in obj) {
|
|
3
|
-
Object.defineProperty(obj, key, {
|
|
4
|
-
value: value,
|
|
5
|
-
enumerable: true,
|
|
6
|
-
configurable: true,
|
|
7
|
-
writable: true
|
|
8
|
-
});
|
|
9
|
-
} else {
|
|
10
|
-
obj[key] = value;
|
|
11
|
-
}
|
|
12
|
-
return obj;
|
|
13
|
-
}
|
|
14
|
-
function _object_spread(target) {
|
|
15
|
-
for(var i = 1; i < arguments.length; i++){
|
|
16
|
-
var source = arguments[i] != null ? arguments[i] : {};
|
|
17
|
-
var ownKeys = Object.keys(source);
|
|
18
|
-
if (typeof Object.getOwnPropertySymbols === "function") {
|
|
19
|
-
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
|
|
20
|
-
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
|
|
21
|
-
}));
|
|
22
|
-
}
|
|
23
|
-
ownKeys.forEach(function(key) {
|
|
24
|
-
_define_property(target, key, source[key]);
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
return target;
|
|
28
|
-
}
|
|
29
|
-
function ownKeys(object, enumerableOnly) {
|
|
30
|
-
var keys = Object.keys(object);
|
|
31
|
-
if (Object.getOwnPropertySymbols) {
|
|
32
|
-
var symbols = Object.getOwnPropertySymbols(object);
|
|
33
|
-
if (enumerableOnly) {
|
|
34
|
-
symbols = symbols.filter(function(sym) {
|
|
35
|
-
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
keys.push.apply(keys, symbols);
|
|
39
|
-
}
|
|
40
|
-
return keys;
|
|
41
|
-
}
|
|
42
|
-
function _object_spread_props(target, source) {
|
|
43
|
-
source = source != null ? source : {};
|
|
44
|
-
if (Object.getOwnPropertyDescriptors) {
|
|
45
|
-
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
|
|
46
|
-
} else {
|
|
47
|
-
ownKeys(Object(source)).forEach(function(key) {
|
|
48
|
-
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
return target;
|
|
52
|
-
}
|
|
53
|
-
function _object_without_properties(source, excluded) {
|
|
54
|
-
if (source == null) return {};
|
|
55
|
-
var target = _object_without_properties_loose(source, excluded);
|
|
56
|
-
var key, i;
|
|
57
|
-
if (Object.getOwnPropertySymbols) {
|
|
58
|
-
var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
|
|
59
|
-
for(i = 0; i < sourceSymbolKeys.length; i++){
|
|
60
|
-
key = sourceSymbolKeys[i];
|
|
61
|
-
if (excluded.indexOf(key) >= 0) continue;
|
|
62
|
-
if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
|
|
63
|
-
target[key] = source[key];
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
return target;
|
|
67
|
-
}
|
|
68
|
-
function _object_without_properties_loose(source, excluded) {
|
|
69
|
-
if (source == null) return {};
|
|
70
|
-
var target = {};
|
|
71
|
-
var sourceKeys = Object.keys(source);
|
|
72
|
-
var key, i;
|
|
73
|
-
for(i = 0; i < sourceKeys.length; i++){
|
|
74
|
-
key = sourceKeys[i];
|
|
75
|
-
if (excluded.indexOf(key) >= 0) continue;
|
|
76
|
-
target[key] = source[key];
|
|
77
|
-
}
|
|
78
|
-
return target;
|
|
79
|
-
}
|
|
80
|
-
import { match as findMatch } from './match';
|
|
81
|
-
import { createHistory } from './history';
|
|
82
|
-
import { qs as defaultQs } from './qs';
|
|
83
|
-
export function createRouter() {
|
|
84
|
-
var options = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
|
|
85
|
-
var history = null;
|
|
86
|
-
var routes = [];
|
|
87
|
-
var mode = options.mode || 'history';
|
|
88
|
-
var qs = options.qs || defaultQs;
|
|
89
|
-
var sync = options.sync || false;
|
|
90
|
-
var router = {
|
|
91
|
-
listen: function listen(routeMap, cb) {
|
|
92
|
-
if (history) {
|
|
93
|
-
throw new Error('Already listening');
|
|
94
|
-
}
|
|
95
|
-
routes = flatten(routeMap);
|
|
96
|
-
history = createHistory({
|
|
97
|
-
mode: mode,
|
|
98
|
-
sync: sync
|
|
99
|
-
});
|
|
100
|
-
var dispose = history.listen(function(url) {
|
|
101
|
-
return transition(router, url, cb);
|
|
102
|
-
});
|
|
103
|
-
return function() {
|
|
104
|
-
dispose();
|
|
105
|
-
history = null;
|
|
106
|
-
routes = [];
|
|
107
|
-
};
|
|
108
|
-
},
|
|
109
|
-
navigate: function navigate(to, curr) {
|
|
110
|
-
if (typeof to === 'string') {
|
|
111
|
-
to = {
|
|
112
|
-
url: to
|
|
113
|
-
};
|
|
114
|
-
}
|
|
115
|
-
var url = router.href(to, curr);
|
|
116
|
-
if (to.replace) {
|
|
117
|
-
history.replace(url);
|
|
118
|
-
} else {
|
|
119
|
-
history.push(url);
|
|
120
|
-
}
|
|
121
|
-
},
|
|
122
|
-
href: function href(to, curr) {
|
|
123
|
-
// already a url
|
|
124
|
-
if (typeof to === 'string') {
|
|
125
|
-
return to;
|
|
126
|
-
}
|
|
127
|
-
// align with navigate API
|
|
128
|
-
if (to.url) {
|
|
129
|
-
return to.url;
|
|
130
|
-
}
|
|
131
|
-
if (to.merge) {
|
|
132
|
-
curr = curr || router.match(router.getUrl());
|
|
133
|
-
to = merge(curr, to);
|
|
134
|
-
}
|
|
135
|
-
var url = to.pathname || '/';
|
|
136
|
-
if (to.params) {
|
|
137
|
-
Object.keys(to.params).forEach(function(param) {
|
|
138
|
-
url = url.replace(':' + param, to.params[param]);
|
|
139
|
-
});
|
|
140
|
-
}
|
|
141
|
-
if (to.query && Object.keys(to.query).length) {
|
|
142
|
-
var query = qs.stringify(to.query);
|
|
143
|
-
if (query) {
|
|
144
|
-
url = url + '?' + query;
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
if (to.hash) {
|
|
148
|
-
var prefix = to.hash.startsWith('#') ? '' : '#';
|
|
149
|
-
url = url + prefix + to.hash;
|
|
150
|
-
}
|
|
151
|
-
return url;
|
|
152
|
-
},
|
|
153
|
-
match: function match(url) {
|
|
154
|
-
var route = findMatch(routes, url, qs);
|
|
155
|
-
if (route) {
|
|
156
|
-
return _object_spread_props(_object_spread({}, route), {
|
|
157
|
-
data: data(routes, route)
|
|
158
|
-
});
|
|
159
|
-
}
|
|
160
|
-
},
|
|
161
|
-
getUrl: function getUrl() {
|
|
162
|
-
return history.getUrl();
|
|
163
|
-
}
|
|
164
|
-
};
|
|
165
|
-
return router;
|
|
166
|
-
}
|
|
167
|
-
export function flatten(routeMap) {
|
|
168
|
-
var routes = [];
|
|
169
|
-
var parentData = [];
|
|
170
|
-
function addLevel(level) {
|
|
171
|
-
level.forEach(function(route) {
|
|
172
|
-
var _route_path = route.path, path = _route_path === void 0 ? '' : _route_path, children = route.routes, routeData = _object_without_properties(route, [
|
|
173
|
-
"path",
|
|
174
|
-
"routes"
|
|
175
|
-
]);
|
|
176
|
-
routes.push({
|
|
177
|
-
pattern: path,
|
|
178
|
-
data: parentData.concat([
|
|
179
|
-
routeData
|
|
180
|
-
])
|
|
181
|
-
});
|
|
182
|
-
if (children) {
|
|
183
|
-
parentData.push(routeData);
|
|
184
|
-
addLevel(children);
|
|
185
|
-
parentData.pop();
|
|
186
|
-
}
|
|
187
|
-
});
|
|
188
|
-
}
|
|
189
|
-
addLevel(routeMap);
|
|
190
|
-
return routes;
|
|
191
|
-
}
|
|
192
|
-
function transition(router, url, onNavigated) {
|
|
193
|
-
var route = router.match(url);
|
|
194
|
-
if (route) {
|
|
195
|
-
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
196
|
-
try {
|
|
197
|
-
for(var _iterator = route.data[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
198
|
-
var r = _step.value;
|
|
199
|
-
if (r.redirect) {
|
|
200
|
-
var _$url = redirectUrl(router, r.redirect, route);
|
|
201
|
-
return router.navigate({
|
|
202
|
-
url: _$url,
|
|
203
|
-
replace: true
|
|
204
|
-
});
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
} catch (err) {
|
|
208
|
-
_didIteratorError = true;
|
|
209
|
-
_iteratorError = err;
|
|
210
|
-
} finally{
|
|
211
|
-
try {
|
|
212
|
-
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
213
|
-
_iterator.return();
|
|
214
|
-
}
|
|
215
|
-
} finally{
|
|
216
|
-
if (_didIteratorError) {
|
|
217
|
-
throw _iteratorError;
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
onNavigated && onNavigated(route);
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
function redirectUrl(router, redirect, matchingRoute) {
|
|
225
|
-
if (typeof redirect === 'function') {
|
|
226
|
-
redirect = redirect(matchingRoute);
|
|
227
|
-
}
|
|
228
|
-
return router.href(redirect);
|
|
229
|
-
}
|
|
230
|
-
function data(routes, matchingRoute) {
|
|
231
|
-
for(var i = 0; i < routes.length; i++){
|
|
232
|
-
if (routes[i].pattern === matchingRoute.pattern) {
|
|
233
|
-
return routes[i].data;
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
export function merge() {
|
|
238
|
-
var curr = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, to = arguments.length > 1 ? arguments[1] : void 0;
|
|
239
|
-
var pathname = to.pathname || curr.pattern || curr.pathname;
|
|
240
|
-
var params = Object.assign({}, curr.params, to.params);
|
|
241
|
-
var query = to.query === null ? null : Object.assign({}, curr.query, to.query);
|
|
242
|
-
var hash = to.hash === null ? null : to.hash || curr.hash || '';
|
|
243
|
-
return {
|
|
244
|
-
pathname: pathname,
|
|
245
|
-
params: params,
|
|
246
|
-
query: query,
|
|
247
|
-
hash: hash
|
|
248
|
-
};
|
|
249
|
-
}
|