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/.swc-cjs
ADDED
package/CHANGELOG.md
CHANGED
package/LICENSE
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
ISC License
|
|
2
2
|
|
|
3
|
-
Copyright
|
|
3
|
+
Copyright 2023 Karolis Narkevicius
|
|
4
4
|
|
|
5
5
|
Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.
|
|
6
6
|
|
package/dist/cjs/history.js
CHANGED
|
@@ -1,107 +1,96 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
var raf;
|
|
10
|
-
var onPop;
|
|
11
|
-
var memory = [];
|
|
12
|
-
var off;
|
|
13
|
-
var destroyed = false;
|
|
14
|
-
|
|
15
|
-
if (typeof window === 'undefined') {
|
|
16
|
-
mode = 'memory';
|
|
17
|
-
raf = sync ? function (cb) {
|
|
18
|
-
return cb();
|
|
19
|
-
} : global.setImmediate;
|
|
20
|
-
} else {
|
|
21
|
-
raf = sync ? function (cb) {
|
|
22
|
-
return cb();
|
|
23
|
-
} : requestAnimationFrame;
|
|
24
|
-
|
|
25
|
-
if (mode === 'history' && !history.pushState) {
|
|
26
|
-
mode = 'hash';
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "createHistory", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return createHistory;
|
|
27
9
|
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
10
|
+
});
|
|
11
|
+
function createHistory(options) {
|
|
12
|
+
var listen = function listen(onChange) {
|
|
13
|
+
onPop = function() {
|
|
14
|
+
return onChange(getUrl());
|
|
15
|
+
};
|
|
16
|
+
if (mode !== "memory") {
|
|
17
|
+
off = on(window, mode === "history" ? "popstate" : "hashchange", onPop);
|
|
18
|
+
raf(onPop);
|
|
19
|
+
}
|
|
20
|
+
return function() {
|
|
21
|
+
destroyed = true;
|
|
22
|
+
off && off();
|
|
23
|
+
};
|
|
33
24
|
};
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
25
|
+
var go = function go(url, replace) {
|
|
26
|
+
if (destroyed) return;
|
|
27
|
+
url = url.replace(/^\/?#?\/?/, "/").replace(/\/$/, "") || "/";
|
|
28
|
+
if (mode === "history") {
|
|
29
|
+
history[replace ? "replaceState" : "pushState"]({}, "", url);
|
|
30
|
+
raf(onPop);
|
|
31
|
+
} else if (mode === "hash") {
|
|
32
|
+
location[replace ? "replace" : "assign"]("#" + url);
|
|
33
|
+
} else if (mode === "memory") {
|
|
34
|
+
replace ? memory[memory.length - 1] = url : memory.push(url);
|
|
35
|
+
raf(onPop);
|
|
36
|
+
}
|
|
43
37
|
};
|
|
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
|
-
if (
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
if (hash !== '') {
|
|
87
|
-
url += '#' + hash;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
return url;
|
|
38
|
+
var getUrl = function getUrl() {
|
|
39
|
+
if (mode === "memory") {
|
|
40
|
+
return memory[memory.length - 1];
|
|
41
|
+
}
|
|
42
|
+
var hash = getHash();
|
|
43
|
+
if (mode === "hash") {
|
|
44
|
+
return hash === "" ? "/" : hash;
|
|
45
|
+
}
|
|
46
|
+
if (mode === "history") {
|
|
47
|
+
var url = location.pathname + location.search;
|
|
48
|
+
if (hash !== "") {
|
|
49
|
+
url += "#" + hash;
|
|
50
|
+
}
|
|
51
|
+
return url;
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
var getHash = // Gets the true hash value. Cannot use location.hash directly due to bug
|
|
55
|
+
// in Firefox where location.hash will always be decoded.
|
|
56
|
+
function getHash() {
|
|
57
|
+
var match = location.href.match(/#(.*)$/);
|
|
58
|
+
return match ? match[1].replace("#", "") : "";
|
|
59
|
+
};
|
|
60
|
+
var sync = options.sync;
|
|
61
|
+
var mode = options.mode;
|
|
62
|
+
var raf;
|
|
63
|
+
var onPop;
|
|
64
|
+
var memory = [];
|
|
65
|
+
var off;
|
|
66
|
+
var destroyed = false;
|
|
67
|
+
if (typeof window === "undefined") {
|
|
68
|
+
mode = "memory";
|
|
69
|
+
raf = sync ? function(cb) {
|
|
70
|
+
return cb();
|
|
71
|
+
} : global.setImmediate;
|
|
72
|
+
} else {
|
|
73
|
+
raf = sync ? function(cb) {
|
|
74
|
+
return cb();
|
|
75
|
+
} : requestAnimationFrame;
|
|
76
|
+
if (mode === "history" && !history.pushState) {
|
|
77
|
+
mode = "hash";
|
|
78
|
+
}
|
|
91
79
|
}
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
80
|
+
return {
|
|
81
|
+
listen: listen,
|
|
82
|
+
getUrl: getUrl,
|
|
83
|
+
push: function(url) {
|
|
84
|
+
go(url);
|
|
85
|
+
},
|
|
86
|
+
replace: function(url) {
|
|
87
|
+
go(url, true);
|
|
88
|
+
}
|
|
89
|
+
};
|
|
100
90
|
}
|
|
101
|
-
|
|
102
91
|
function on(el, type, fn) {
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
}
|
|
92
|
+
el.addEventListener(type, fn, false);
|
|
93
|
+
return function off() {
|
|
94
|
+
el.removeEventListener(type, fn, false);
|
|
95
|
+
};
|
|
96
|
+
}
|
package/dist/cjs/index.js
CHANGED
|
@@ -1,17 +1,27 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
var
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
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 _router.createRouter;
|
|
14
|
+
},
|
|
15
|
+
merge: function() {
|
|
16
|
+
return _router.merge;
|
|
17
|
+
},
|
|
18
|
+
createHistory: function() {
|
|
19
|
+
return _history.createHistory;
|
|
20
|
+
},
|
|
21
|
+
qs: function() {
|
|
22
|
+
return _qs.qs;
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
var _router = require("./router.js");
|
|
26
|
+
var _history = require("./history.js");
|
|
27
|
+
var _qs = require("./qs.js");
|
package/dist/cjs/match.js
CHANGED
|
@@ -1,97 +1,94 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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
|
+
match: function() {
|
|
13
|
+
return match;
|
|
14
|
+
},
|
|
15
|
+
matchOne: function() {
|
|
16
|
+
return matchOne;
|
|
17
|
+
}
|
|
18
|
+
});
|
|
7
19
|
function match(routes, url, qs) {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
return m;
|
|
20
|
+
if (!url) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
for(var i = 0; i < routes.length; i++){
|
|
24
|
+
var m = matchOne(routes[i].pattern, url, qs);
|
|
25
|
+
if (m) {
|
|
26
|
+
return m;
|
|
27
|
+
}
|
|
17
28
|
}
|
|
18
|
-
}
|
|
19
29
|
}
|
|
20
|
-
|
|
21
30
|
function matchOne(pattern, url, qs) {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
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
|
-
|
|
31
|
+
if (!pattern) {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
var re = /(?:\?([^#]*))?(#.*)?$/;
|
|
35
|
+
var originalUrl = url;
|
|
36
|
+
var originalPattern = pattern;
|
|
37
|
+
var c = url.match(re);
|
|
38
|
+
var params = {};
|
|
39
|
+
var query = {};
|
|
40
|
+
var search = "";
|
|
41
|
+
var hash = "";
|
|
42
|
+
var ret;
|
|
43
|
+
if (c && c[1]) {
|
|
44
|
+
search = "?" + c[1];
|
|
45
|
+
query = qs.parse(c[1]);
|
|
46
|
+
}
|
|
47
|
+
if (c && c[2]) {
|
|
48
|
+
hash = c[2] || "";
|
|
49
|
+
}
|
|
50
|
+
if (pattern !== "*") {
|
|
51
|
+
url = segmentize(url.replace(re, ""));
|
|
52
|
+
pattern = segmentize(pattern || "");
|
|
53
|
+
var max = Math.max(url.length, pattern.length);
|
|
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("+") > -1;
|
|
59
|
+
var star = flags.indexOf("*") > -1;
|
|
60
|
+
var val = url[i] || "";
|
|
61
|
+
if (!val && !star && (flags.indexOf("?") < 0 || plus)) {
|
|
62
|
+
ret = false;
|
|
63
|
+
break;
|
|
64
|
+
}
|
|
65
|
+
params[param] = decodeURIComponent(val);
|
|
66
|
+
if (plus || star) {
|
|
67
|
+
params[param] = url.slice(i).map(decodeURIComponent).join("/");
|
|
68
|
+
break;
|
|
69
|
+
}
|
|
70
|
+
} else if (pattern[i] !== url[i]) {
|
|
71
|
+
ret = false;
|
|
72
|
+
break;
|
|
73
|
+
}
|
|
61
74
|
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
if (plus || star) {
|
|
66
|
-
params[param] = url.slice(i).map(decodeURIComponent).join('/');
|
|
67
|
-
break;
|
|
75
|
+
if (ret === false) {
|
|
76
|
+
return false;
|
|
68
77
|
}
|
|
69
|
-
} else if (pattern[i] !== url[i]) {
|
|
70
|
-
ret = false;
|
|
71
|
-
break;
|
|
72
|
-
}
|
|
73
78
|
}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
pathname: originalUrl.replace(re, ''),
|
|
84
|
-
params: params,
|
|
85
|
-
query: query,
|
|
86
|
-
search: search,
|
|
87
|
-
hash: hash
|
|
88
|
-
};
|
|
79
|
+
return {
|
|
80
|
+
pattern: originalPattern,
|
|
81
|
+
url: originalUrl,
|
|
82
|
+
pathname: originalUrl.replace(re, ""),
|
|
83
|
+
params: params,
|
|
84
|
+
query: query,
|
|
85
|
+
search: search,
|
|
86
|
+
hash: hash
|
|
87
|
+
};
|
|
89
88
|
}
|
|
90
|
-
|
|
91
89
|
function segmentize(url) {
|
|
92
|
-
|
|
90
|
+
return strip(url).split("/");
|
|
93
91
|
}
|
|
94
|
-
|
|
95
92
|
function strip(url) {
|
|
96
|
-
|
|
97
|
-
}
|
|
93
|
+
return url.replace(/(^\/+|\/+$)/g, "");
|
|
94
|
+
}
|
package/dist/cjs/qs.js
CHANGED
|
@@ -1,23 +1,27 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "qs", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return qs;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
5
11
|
var qs = {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
}
|
|
21
|
-
}
|
|
12
|
+
parse: function(queryString) {
|
|
13
|
+
return queryString.split("&").reduce(function(acc, pair) {
|
|
14
|
+
var parts = pair.split("=");
|
|
15
|
+
acc[parts[0]] = decodeURIComponent(parts[1]);
|
|
16
|
+
return acc;
|
|
17
|
+
}, {});
|
|
18
|
+
},
|
|
19
|
+
stringify: function(query) {
|
|
20
|
+
return Object.keys(query).reduce(function(acc, key) {
|
|
21
|
+
if (query[key] !== undefined) {
|
|
22
|
+
acc.push(key + "=" + encodeURIComponent(query[key]));
|
|
23
|
+
}
|
|
24
|
+
return acc;
|
|
25
|
+
}, []).join("&");
|
|
26
|
+
}
|
|
22
27
|
};
|
|
23
|
-
exports.qs = qs;
|