@janit/fu 0.0.4 → 0.1.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 +31 -14
- package/dist/app.d.ts +0 -2
- package/dist/app.js +0 -4
- package/dist/app.js.map +1 -1
- package/dist/build.d.ts +0 -2
- package/dist/build.js +10 -85
- package/dist/build.js.map +1 -1
- package/dist/cli.js +7 -7
- package/dist/cli.js.map +1 -1
- package/dist/client.d.ts +7 -1
- package/dist/client.js +18 -7
- package/dist/client.js.map +1 -1
- package/dist/dev.js +13 -66
- package/dist/dev.js.map +1 -1
- package/dist/driver.d.ts +66 -0
- package/dist/driver.js +182 -0
- package/dist/driver.js.map +1 -0
- package/dist/hmr-runtime.js +21 -19
- package/dist/plugins.d.ts +7 -24
- package/dist/plugins.js +18 -58
- package/dist/plugins.js.map +1 -1
- package/dist/render.d.ts +3 -3
- package/dist/render.js +6 -9
- package/dist/render.js.map +1 -1
- package/dist/router.d.ts +17 -0
- package/dist/router.js +37 -6
- package/dist/router.js.map +1 -1
- package/package.json +2 -2
package/dist/router.js
CHANGED
|
@@ -10,8 +10,6 @@ export function filePathToPattern(file) {
|
|
|
10
10
|
let p = file.replace(/^\/routes/, "").replace(/\.[tj]sx?$/, "");
|
|
11
11
|
if (p.endsWith("/index"))
|
|
12
12
|
p = p.slice(0, -"/index".length);
|
|
13
|
-
if (p === "/index" || p === "")
|
|
14
|
-
p = "/";
|
|
15
13
|
const out = p
|
|
16
14
|
.split("/")
|
|
17
15
|
.map((s) => s.startsWith("[...") && s.endsWith("]")
|
|
@@ -22,18 +20,51 @@ export function filePathToPattern(file) {
|
|
|
22
20
|
.join("/");
|
|
23
21
|
return out || "/";
|
|
24
22
|
}
|
|
23
|
+
/** Anything URLPattern would read as syntax rather than as a literal character. */
|
|
24
|
+
const PATTERN_SYNTAX = /[:*?+(){}\\]/;
|
|
25
25
|
export function buildRoutes(manifest) {
|
|
26
26
|
const out = [];
|
|
27
27
|
for (const [file, load] of Object.entries(manifest)) {
|
|
28
28
|
const pattern = filePathToPattern(file);
|
|
29
|
-
const
|
|
30
|
-
out.push({
|
|
29
|
+
const urlPattern = new URLPattern({ pathname: pattern });
|
|
30
|
+
out.push({
|
|
31
|
+
pattern,
|
|
32
|
+
urlPattern,
|
|
33
|
+
load,
|
|
34
|
+
score: pattern.includes("*") ? 2 : pattern.includes(":") ? 1 : 0,
|
|
35
|
+
literal: PATTERN_SYNTAX.test(pattern) ? null : urlPattern.pathname,
|
|
36
|
+
segments: countSegments(pattern),
|
|
37
|
+
});
|
|
31
38
|
}
|
|
32
|
-
return out.sort((a, b) => a.score - b.score || b.
|
|
39
|
+
return out.sort((a, b) => a.score - b.score || b.segments - a.segments);
|
|
33
40
|
}
|
|
41
|
+
function countSegments(pathname) {
|
|
42
|
+
let n = 1;
|
|
43
|
+
for (let i = 0; i < pathname.length; i++)
|
|
44
|
+
if (pathname.charCodeAt(i) === 47 /* / */)
|
|
45
|
+
n++;
|
|
46
|
+
return n;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* First route that matches, in `buildRoutes` order.
|
|
50
|
+
*
|
|
51
|
+
* `URLPattern.exec` costs microseconds per call, so it only runs for routes
|
|
52
|
+
* that could match: literal routes compare by equality, and a pattern whose
|
|
53
|
+
* segment count cannot fit the path is skipped. The string input form is used
|
|
54
|
+
* because the `{ pathname }` dictionary form is several times slower on Deno.
|
|
55
|
+
*/
|
|
34
56
|
export function match(routes, pathname) {
|
|
57
|
+
const n = countSegments(pathname);
|
|
58
|
+
const input = "http://x" + pathname;
|
|
35
59
|
for (const route of routes) {
|
|
36
|
-
|
|
60
|
+
if (route.literal !== null) {
|
|
61
|
+
if (route.literal === pathname)
|
|
62
|
+
return { route, params: {} };
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
if (route.score === 2 ? n < route.segments - 1 : n !== route.segments)
|
|
66
|
+
continue;
|
|
67
|
+
const m = route.urlPattern.exec(input);
|
|
37
68
|
if (!m)
|
|
38
69
|
continue;
|
|
39
70
|
const params = {};
|
package/dist/router.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.js","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAIA,IAAI,OAAO,UAAU,CAAC,UAAU,KAAK,WAAW,EAAE,CAAC;IACjD,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;AACtC,CAAC;
|
|
1
|
+
{"version":3,"file":"router.js","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@janit/fu",
|
|
3
|
-
"version": "0.0
|
|
3
|
+
"version": "0.1.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "A minimal islands framework on Preact 11, rolldown and Nitro. Runs on Deno, Node and Bun.",
|
|
6
6
|
"license": "MIT",
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"./package.json": "./package.json"
|
|
45
45
|
},
|
|
46
46
|
"bin": {
|
|
47
|
-
"fu": "
|
|
47
|
+
"fu": "dist/cli.js"
|
|
48
48
|
},
|
|
49
49
|
"dependencies": {
|
|
50
50
|
"crossws": "^0.4.12",
|