@geometra/router 1.0.1
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 +47 -0
- package/dist/history.d.ts +28 -0
- package/dist/history.d.ts.map +1 -0
- package/dist/history.js +111 -0
- package/dist/history.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -0
- package/dist/link.d.ts +14 -0
- package/dist/link.d.ts.map +1 -0
- package/dist/link.js +28 -0
- package/dist/link.js.map +1 -0
- package/dist/matcher.d.ts +5 -0
- package/dist/matcher.d.ts.map +1 -0
- package/dist/matcher.js +96 -0
- package/dist/matcher.js.map +1 -0
- package/dist/path.d.ts +22 -0
- package/dist/path.d.ts.map +1 -0
- package/dist/path.js +46 -0
- package/dist/path.js.map +1 -0
- package/dist/query.d.ts +23 -0
- package/dist/query.d.ts.map +1 -0
- package/dist/query.js +68 -0
- package/dist/query.js.map +1 -0
- package/dist/ranking.d.ts +3 -0
- package/dist/ranking.d.ts.map +1 -0
- package/dist/ranking.js +51 -0
- package/dist/ranking.js.map +1 -0
- package/dist/responses.d.ts +25 -0
- package/dist/responses.d.ts.map +1 -0
- package/dist/responses.js +27 -0
- package/dist/responses.js.map +1 -0
- package/dist/router.d.ts +71 -0
- package/dist/router.d.ts.map +1 -0
- package/dist/router.js +344 -0
- package/dist/router.js.map +1 -0
- package/dist/tree.d.ts +43 -0
- package/dist/tree.d.ts.map +1 -0
- package/dist/tree.js +67 -0
- package/dist/tree.js.map +1 -0
- package/package.json +39 -0
package/dist/tree.js
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { matchPath } from './matcher.js';
|
|
2
|
+
import { comparePatternSpecificity } from './ranking.js';
|
|
3
|
+
function joinPaths(base, next) {
|
|
4
|
+
const left = base === '/' ? '' : base.replace(/\/+$/, '');
|
|
5
|
+
const right = next.replace(/^\/+/, '');
|
|
6
|
+
const combined = `${left}/${right}`.replace(/\/+/g, '/');
|
|
7
|
+
return combined === '' ? '/' : combined;
|
|
8
|
+
}
|
|
9
|
+
function branchPattern(matches) {
|
|
10
|
+
let current = '/';
|
|
11
|
+
for (const route of matches) {
|
|
12
|
+
if (!route.path)
|
|
13
|
+
continue;
|
|
14
|
+
current = joinPaths(current, route.path);
|
|
15
|
+
}
|
|
16
|
+
return current;
|
|
17
|
+
}
|
|
18
|
+
export function matchRouteTree(routes, pathname) {
|
|
19
|
+
let bestMatch = null;
|
|
20
|
+
function visit(node, inheritedPath, stack) {
|
|
21
|
+
const nodePath = node.path ?? '';
|
|
22
|
+
const absolutePath = nodePath === '' ? inheritedPath : joinPaths(inheritedPath, nodePath);
|
|
23
|
+
const nextStack = [...stack, node];
|
|
24
|
+
const nodeMatch = matchPath(absolutePath, pathname);
|
|
25
|
+
if (nodeMatch) {
|
|
26
|
+
const candidate = { params: nodeMatch.params, matches: nextStack };
|
|
27
|
+
if (!bestMatch) {
|
|
28
|
+
bestMatch = candidate;
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
const candidatePattern = branchPattern(candidate.matches);
|
|
32
|
+
const bestPattern = branchPattern(bestMatch.matches);
|
|
33
|
+
const compare = comparePatternSpecificity(candidatePattern, bestPattern);
|
|
34
|
+
if (compare < 0 || (compare === 0 && candidate.matches.length > bestMatch.matches.length)) {
|
|
35
|
+
bestMatch = candidate;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
if (!node.children)
|
|
40
|
+
return;
|
|
41
|
+
for (const child of node.children) {
|
|
42
|
+
visit(child, absolutePath, nextStack);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
for (const route of routes) {
|
|
46
|
+
visit(route, '/', []);
|
|
47
|
+
}
|
|
48
|
+
return bestMatch;
|
|
49
|
+
}
|
|
50
|
+
export function renderMatchedOutlet(branch, pathname) {
|
|
51
|
+
let outlet = null;
|
|
52
|
+
for (let i = branch.matches.length - 1; i >= 0; i -= 1) {
|
|
53
|
+
const route = branch.matches[i];
|
|
54
|
+
if (!route)
|
|
55
|
+
continue;
|
|
56
|
+
if (!route.render)
|
|
57
|
+
continue;
|
|
58
|
+
outlet = route.render({
|
|
59
|
+
outlet,
|
|
60
|
+
params: branch.params,
|
|
61
|
+
pathname,
|
|
62
|
+
route,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
return outlet;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=tree.js.map
|
package/dist/tree.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree.js","sourceRoot":"","sources":["../src/tree.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@geometra/router",
|
|
3
|
+
"version": "1.0.1",
|
|
4
|
+
"description": "Routing primitives for Geometra",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "https://github.com/razroo/geometra",
|
|
10
|
+
"directory": "packages/router"
|
|
11
|
+
},
|
|
12
|
+
"homepage": "https://razroo.github.io/geometra",
|
|
13
|
+
"keywords": [
|
|
14
|
+
"router",
|
|
15
|
+
"routing",
|
|
16
|
+
"geometra",
|
|
17
|
+
"dom-free",
|
|
18
|
+
"canvas",
|
|
19
|
+
"terminal"
|
|
20
|
+
],
|
|
21
|
+
"main": "./dist/index.js",
|
|
22
|
+
"types": "./dist/index.d.ts",
|
|
23
|
+
"exports": {
|
|
24
|
+
".": {
|
|
25
|
+
"types": "./dist/index.d.ts",
|
|
26
|
+
"import": "./dist/index.js"
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
"files": [
|
|
30
|
+
"dist"
|
|
31
|
+
],
|
|
32
|
+
"scripts": {
|
|
33
|
+
"build": "rm -rf dist && tsc -p tsconfig.build.json",
|
|
34
|
+
"check": "tsc --noEmit"
|
|
35
|
+
},
|
|
36
|
+
"dependencies": {
|
|
37
|
+
"@geometra/core": "^1.0.1"
|
|
38
|
+
}
|
|
39
|
+
}
|