space-router 0.8.5 → 0.9.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/.swc-cjs +11 -0
- package/CHANGELOG.md +5 -0
- package/LICENSE +1 -1
- package/dist/cjs/history.js +89 -100
- package/dist/cjs/index.js +26 -16
- package/dist/cjs/match.js +82 -85
- package/dist/cjs/qs.js +24 -20
- package/dist/cjs/router.js +252 -188
- package/dist/esm/history.js +81 -94
- package/dist/esm/index.js +3 -3
- package/dist/esm/match.js +65 -79
- package/dist/esm/qs.js +17 -20
- package/dist/esm/router.js +235 -161
- package/package.json +12 -13
- package/src/index.js +3 -3
- package/src/router.js +3 -3
- package/tasks/build.js +11 -5
- package/test/flatten.test.js +1 -1
- package/test/match.test.js +2 -2
- package/test/router.test.js +1 -1
- package/.babelrc-cjs +0 -17
- /package/{.babelrc-esm → .swc-esm} +0 -0
package/dist/cjs/router.js
CHANGED
|
@@ -1,206 +1,270 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
var _excluded = ["path", "routes"];
|
|
15
|
-
|
|
16
|
-
function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
17
|
-
|
|
18
|
-
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
19
|
-
|
|
20
|
-
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
21
|
-
|
|
22
|
-
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
|
23
|
-
|
|
24
|
-
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
25
|
-
|
|
26
|
-
function createRouter(options) {
|
|
27
|
-
if (options === void 0) {
|
|
28
|
-
options = {};
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
var history = null;
|
|
32
|
-
var routes = [];
|
|
33
|
-
var mode = options.mode || 'history';
|
|
34
|
-
var qs = options.qs || _qs.qs;
|
|
35
|
-
var sync = options.sync || false;
|
|
36
|
-
var router = {
|
|
37
|
-
listen: function listen(routeMap, cb) {
|
|
38
|
-
if (history) {
|
|
39
|
-
throw new Error('Already listening');
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
routes = flatten(routeMap);
|
|
43
|
-
history = (0, _history.createHistory)({
|
|
44
|
-
mode: mode,
|
|
45
|
-
sync: sync
|
|
46
|
-
});
|
|
47
|
-
var dispose = history.listen(function (url) {
|
|
48
|
-
return transition(router, url, cb);
|
|
49
|
-
});
|
|
50
|
-
return function () {
|
|
51
|
-
dispose();
|
|
52
|
-
history = null;
|
|
53
|
-
routes = [];
|
|
54
|
-
};
|
|
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: all[name]
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
_export(exports, {
|
|
12
|
+
createRouter: function() {
|
|
13
|
+
return createRouter;
|
|
55
14
|
},
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
to = {
|
|
59
|
-
url: to
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
var url = router.href(to, curr);
|
|
64
|
-
|
|
65
|
-
if (to.replace) {
|
|
66
|
-
history.replace(url);
|
|
67
|
-
} else {
|
|
68
|
-
history.push(url);
|
|
69
|
-
}
|
|
15
|
+
flatten: function() {
|
|
16
|
+
return flatten;
|
|
70
17
|
},
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
var url = to.pathname || '/';
|
|
88
|
-
|
|
89
|
-
if (to.params) {
|
|
90
|
-
Object.keys(to.params).forEach(function (param) {
|
|
91
|
-
url = url.replace(':' + param, to.params[param]);
|
|
18
|
+
merge: function() {
|
|
19
|
+
return merge;
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
var _match = require("./match.js");
|
|
23
|
+
var _history = require("./history.js");
|
|
24
|
+
var _qs = require("./qs.js");
|
|
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
|
|
92
32
|
});
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
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
|
+
}));
|
|
100
46
|
}
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
if (to.hash) {
|
|
104
|
-
var prefix = to.hash.startsWith('#') ? '' : '#';
|
|
105
|
-
url = url + prefix + to.hash;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
return url;
|
|
109
|
-
},
|
|
110
|
-
match: function match(url) {
|
|
111
|
-
var route = (0, _match.match)(routes, url, qs);
|
|
112
|
-
|
|
113
|
-
if (route) {
|
|
114
|
-
return _extends({}, route, {
|
|
115
|
-
data: data(routes, route)
|
|
47
|
+
ownKeys.forEach(function(key) {
|
|
48
|
+
_define_property(target, key, source[key]);
|
|
116
49
|
});
|
|
117
|
-
}
|
|
118
|
-
},
|
|
119
|
-
getUrl: function getUrl() {
|
|
120
|
-
return history.getUrl();
|
|
121
50
|
}
|
|
122
|
-
|
|
123
|
-
|
|
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(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(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(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(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() {
|
|
183
|
+
return history.getUrl();
|
|
184
|
+
}
|
|
185
|
+
};
|
|
186
|
+
return router;
|
|
124
187
|
}
|
|
125
|
-
|
|
126
188
|
function flatten(routeMap) {
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
addLevel(routeMap);
|
|
151
|
-
return routes;
|
|
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;
|
|
152
212
|
}
|
|
153
|
-
|
|
154
213
|
function transition(router, url, onNavigated) {
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
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);
|
|
169
243
|
}
|
|
170
|
-
|
|
171
|
-
onNavigated && onNavigated(route);
|
|
172
|
-
}
|
|
173
244
|
}
|
|
174
|
-
|
|
175
245
|
function redirectUrl(router, redirect, matchingRoute) {
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
return router.href(redirect);
|
|
246
|
+
if (typeof redirect === "function") {
|
|
247
|
+
redirect = redirect(matchingRoute);
|
|
248
|
+
}
|
|
249
|
+
return router.href(redirect);
|
|
181
250
|
}
|
|
182
|
-
|
|
183
251
|
function data(routes, matchingRoute) {
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
252
|
+
for(var i = 0; i < routes.length; i++){
|
|
253
|
+
if (routes[i].pattern === matchingRoute.pattern) {
|
|
254
|
+
return routes[i].data;
|
|
255
|
+
}
|
|
187
256
|
}
|
|
188
|
-
}
|
|
189
257
|
}
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
query: query,
|
|
204
|
-
hash: hash
|
|
205
|
-
};
|
|
206
|
-
}
|
|
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
CHANGED
|
@@ -1,99 +1,86 @@
|
|
|
1
1
|
export function createHistory(options) {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
raf = sync ? cb => cb() : requestAnimationFrame;
|
|
15
|
-
|
|
16
|
-
if (mode === 'history' && !history.pushState) {
|
|
17
|
-
mode = 'hash';
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
function listen(onChange) {
|
|
22
|
-
onPop = () => onChange(getUrl());
|
|
23
|
-
|
|
24
|
-
if (mode !== 'memory') {
|
|
25
|
-
off = on(window, mode === 'history' ? 'popstate' : 'hashchange', onPop);
|
|
26
|
-
raf(onPop);
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
return () => {
|
|
30
|
-
destroyed = true;
|
|
31
|
-
off && off();
|
|
2
|
+
var listen = function listen(onChange) {
|
|
3
|
+
onPop = function() {
|
|
4
|
+
return onChange(getUrl());
|
|
5
|
+
};
|
|
6
|
+
if (mode !== "memory") {
|
|
7
|
+
off = on(window, mode === "history" ? "popstate" : "hashchange", onPop);
|
|
8
|
+
raf(onPop);
|
|
9
|
+
}
|
|
10
|
+
return function() {
|
|
11
|
+
destroyed = true;
|
|
12
|
+
off && off();
|
|
13
|
+
};
|
|
32
14
|
};
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
if (
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
15
|
+
var go = function go(url, replace) {
|
|
16
|
+
if (destroyed) return;
|
|
17
|
+
url = url.replace(/^\/?#?\/?/, "/").replace(/\/$/, "") || "/";
|
|
18
|
+
if (mode === "history") {
|
|
19
|
+
history[replace ? "replaceState" : "pushState"]({}, "", url);
|
|
20
|
+
raf(onPop);
|
|
21
|
+
} else if (mode === "hash") {
|
|
22
|
+
location[replace ? "replace" : "assign"]("#" + url);
|
|
23
|
+
} else if (mode === "memory") {
|
|
24
|
+
replace ? memory[memory.length - 1] = url : memory.push(url);
|
|
25
|
+
raf(onPop);
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
var getUrl = function getUrl() {
|
|
29
|
+
if (mode === "memory") {
|
|
30
|
+
return memory[memory.length - 1];
|
|
31
|
+
}
|
|
32
|
+
var hash = getHash();
|
|
33
|
+
if (mode === "hash") {
|
|
34
|
+
return hash === "" ? "/" : hash;
|
|
35
|
+
}
|
|
36
|
+
if (mode === "history") {
|
|
37
|
+
var url = location.pathname + location.search;
|
|
38
|
+
if (hash !== "") {
|
|
39
|
+
url += "#" + hash;
|
|
40
|
+
}
|
|
41
|
+
return url;
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
var getHash = // Gets the true hash value. Cannot use location.hash directly due to bug
|
|
45
|
+
// in Firefox where location.hash will always be decoded.
|
|
46
|
+
function getHash() {
|
|
47
|
+
var match = location.href.match(/#(.*)$/);
|
|
48
|
+
return match ? match[1].replace("#", "") : "";
|
|
49
|
+
};
|
|
50
|
+
var sync = options.sync;
|
|
51
|
+
var mode = options.mode;
|
|
52
|
+
var raf;
|
|
53
|
+
var onPop;
|
|
54
|
+
var memory = [];
|
|
55
|
+
var off;
|
|
56
|
+
var destroyed = false;
|
|
57
|
+
if (typeof window === "undefined") {
|
|
58
|
+
mode = "memory";
|
|
59
|
+
raf = sync ? function(cb) {
|
|
60
|
+
return cb();
|
|
61
|
+
} : global.setImmediate;
|
|
62
|
+
} else {
|
|
63
|
+
raf = sync ? function(cb) {
|
|
64
|
+
return cb();
|
|
65
|
+
} : requestAnimationFrame;
|
|
66
|
+
if (mode === "history" && !history.pushState) {
|
|
67
|
+
mode = "hash";
|
|
68
|
+
}
|
|
83
69
|
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
70
|
+
return {
|
|
71
|
+
listen: listen,
|
|
72
|
+
getUrl: getUrl,
|
|
73
|
+
push: function push(url) {
|
|
74
|
+
go(url);
|
|
75
|
+
},
|
|
76
|
+
replace: function replace(url) {
|
|
77
|
+
go(url, true);
|
|
78
|
+
}
|
|
79
|
+
};
|
|
92
80
|
}
|
|
93
|
-
|
|
94
81
|
function on(el, type, fn) {
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
}
|
|
82
|
+
el.addEventListener(type, fn, false);
|
|
83
|
+
return function off() {
|
|
84
|
+
el.removeEventListener(type, fn, false);
|
|
85
|
+
};
|
|
86
|
+
}
|
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.js";
|
|
2
|
+
export { createHistory } from "./history.js";
|
|
3
|
+
export { qs } from "./qs.js";
|