@janit/fu 0.1.0 → 0.2.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 +28 -10
- package/dist/dev.d.ts +8 -0
- package/dist/dev.js +43 -0
- package/dist/dev.js.map +1 -1
- package/dist/driver.js +2 -3
- package/dist/driver.js.map +1 -1
- package/dist/errors.d.ts +6 -0
- package/dist/errors.js +10 -5
- package/dist/errors.js.map +1 -1
- package/dist/hmr-runtime.js +3 -1
- package/dist/render.d.ts +7 -2
- package/dist/render.js +7 -2
- package/dist/render.js.map +1 -1
- package/dist/router.js +35 -6
- package/dist/router.js.map +1 -1
- package/package.json +5 -5
package/README.md
CHANGED
|
@@ -28,10 +28,10 @@ It is experimental and primarily just for myself. Use it accordingly.
|
|
|
28
28
|
deno add npm:@janit/fu # or: npm i @janit/fu
|
|
29
29
|
```
|
|
30
30
|
|
|
31
|
-
|
|
32
|
-
rolldown,
|
|
33
|
-
|
|
34
|
-
|
|
31
|
+
npm is the only channel. The framework hands its own runtime modules to
|
|
32
|
+
rolldown, so it must be a real directory on disk, which an npm install is. It
|
|
33
|
+
was on JSR up to 0.0.4 and was withdrawn from there: Deno keeps JSR packages
|
|
34
|
+
as remote `https:` modules, and a bundler cannot fetch one.
|
|
35
35
|
|
|
36
36
|
The npm package ships compiled JavaScript, because Deno refuses to type-strip
|
|
37
37
|
TypeScript inside `node_modules`.
|
|
@@ -48,8 +48,8 @@ deno task todo:dev # the fu-todo example app
|
|
|
48
48
|
deno task todo:build
|
|
49
49
|
deno task todo:start # serve its build on :1337
|
|
50
50
|
|
|
51
|
-
deno task test #
|
|
52
|
-
deno task check # format, lint, types (framework and both apps), tests
|
|
51
|
+
deno task test # unit tests, no browser
|
|
52
|
+
deno task check # format, lint, types (framework and both apps), tests
|
|
53
53
|
deno task check:pkg # build, serve and dev-serve a real app from the packed npm artefact
|
|
54
54
|
```
|
|
55
55
|
|
|
@@ -151,6 +151,18 @@ export const redirects: Middleware<State> = (ctx) => {
|
|
|
151
151
|
};
|
|
152
152
|
```
|
|
153
153
|
|
|
154
|
+
Nothing in a request says whether `fu dev` or a build is serving it, and the
|
|
155
|
+
same middleware runs in both. So the dev server sets `FU_DEV=1` in its own
|
|
156
|
+
environment before it starts the app, and a built server never does. Read it
|
|
157
|
+
for anything that must be laxer in dev — a Content-Security-Policy, say, which
|
|
158
|
+
has to name the HMR socket on `port + 1`, because a different port is a
|
|
159
|
+
different origin:
|
|
160
|
+
|
|
161
|
+
```ts
|
|
162
|
+
const dev = Deno.env.get("FU_DEV") === "1"; // process.env.FU_DEV on Node and Bun
|
|
163
|
+
const connectSrc = dev ? "connect-src 'self' ws://localhost:*" : "connect-src 'self'";
|
|
164
|
+
```
|
|
165
|
+
|
|
154
166
|
## Errors
|
|
155
167
|
|
|
156
168
|
Anything thrown by a handler, a page or a middleware is turned into a response
|
|
@@ -181,8 +193,13 @@ Two things the framework does for you:
|
|
|
181
193
|
During a deploy a valid URL can 404 for a few seconds, and a shared cache
|
|
182
194
|
would pin that.
|
|
183
195
|
|
|
184
|
-
Errors are caught at the route boundary and returned
|
|
185
|
-
chain, so security headers and logging middleware still
|
|
196
|
+
Errors from a handler or a page are caught at the route boundary and returned
|
|
197
|
+
*through* the middleware chain, so security headers and logging middleware still
|
|
198
|
+
see them. A middleware that throws is different: the throw propagates outward
|
|
199
|
+
past every `await ctx.next()`, so an outer middleware can catch it, and only what
|
|
200
|
+
nobody catches becomes an error response — at the very top, after the chain has
|
|
201
|
+
unwound, without the headers the middleware would have set. To refuse a request
|
|
202
|
+
from middleware, return the response rather than throwing.
|
|
186
203
|
|
|
187
204
|
## Page metadata
|
|
188
205
|
|
|
@@ -258,17 +275,18 @@ the full rationale and the nine undocumented traps this implementation encodes.
|
|
|
258
275
|
deno task test
|
|
259
276
|
```
|
|
260
277
|
|
|
261
|
-
`deno test` over
|
|
278
|
+
`deno test` over the whole workspace, no browser needed. The framework suite is written against the
|
|
262
279
|
failure modes this framework actually hit, so each one guards a real regression:
|
|
263
280
|
|
|
264
281
|
| area | what it pins down |
|
|
265
282
|
|---|---|
|
|
266
|
-
| router | static beats dynamic beats wildcard; wildcards span segments and match their own base path; params decode; a non-ASCII static route matches its percent-encoded request |
|
|
283
|
+
| router | static beats dynamic beats wildcard; wildcards span segments and match their own base path; params decode, but an escaped `/`, NUL, backslash or dot segment never reaches one; a non-ASCII static route matches its percent-encoded request |
|
|
267
284
|
| middleware | outer unwinds last and decorates inner short-circuits; `next()` twice rejects; throws propagate |
|
|
268
285
|
| render | head escaping; JSON-LD cannot close its own `<script>`; 404 vs 405; islands get a marker |
|
|
269
286
|
| errors | a 500 never leaks its message; error responses are uncacheable; a broken error page falls back |
|
|
270
287
|
| plugins | `composes` keeps every class name; CSS output changes with content; the JSX transform never touches rolldown's runtime; the package self-alias |
|
|
271
288
|
| driver | the server entry imports only the optional files that exist; the H3Event unwrap |
|
|
289
|
+
| dev | the HMR socket admits only the dev server's own pages, not another site or a rebound name |
|
|
272
290
|
|
|
273
291
|
Two of these were found by writing the suite, not before it: `ctx.next()` called
|
|
274
292
|
twice resumed at the wrong depth, and a middleware throwing synchronously
|
package/dist/dev.d.ts
CHANGED
|
@@ -1,2 +1,10 @@
|
|
|
1
1
|
import type { FuOptions } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Whether a page at `origin` may open the HMR socket. A browser lets any site
|
|
4
|
+
* open a WebSocket to localhost, and this one streams module source on every
|
|
5
|
+
* save, so only the dev server's own pages get in: its port, on a loopback
|
|
6
|
+
* name or the host it was bound to. The HMR runtime dials localhost, so a page
|
|
7
|
+
* on another machine never gets a working socket anyway.
|
|
8
|
+
*/
|
|
9
|
+
export declare function hmrOriginAllowed(origin: string | null, port: number, hostname: string): boolean;
|
|
2
10
|
export declare function dev(opts: FuOptions): Promise<void>;
|
package/dist/dev.js
CHANGED
|
@@ -6,6 +6,38 @@ import { build as nitroBuild, createDevServer, createNitro, prepare } from "nitr
|
|
|
6
6
|
import * as fs from "node:fs";
|
|
7
7
|
import * as path from "node:path";
|
|
8
8
|
import { clientInput, emptyDir, nitroOptions, runtime, scanProject, writeSheets, writeSsrEntry, } from "./driver.js";
|
|
9
|
+
/** Set an env var on whichever runtime we are on; `Deno.env` is Deno-only. */
|
|
10
|
+
function setEnv(name, value) {
|
|
11
|
+
const g = globalThis;
|
|
12
|
+
if (g.Deno)
|
|
13
|
+
g.Deno.env.set(name, value);
|
|
14
|
+
else if (g.process)
|
|
15
|
+
g.process.env[name] = value;
|
|
16
|
+
}
|
|
17
|
+
const LOOPBACK = new Set(["localhost", "127.0.0.1", "[::1]"]);
|
|
18
|
+
/**
|
|
19
|
+
* Whether a page at `origin` may open the HMR socket. A browser lets any site
|
|
20
|
+
* open a WebSocket to localhost, and this one streams module source on every
|
|
21
|
+
* save, so only the dev server's own pages get in: its port, on a loopback
|
|
22
|
+
* name or the host it was bound to. The HMR runtime dials localhost, so a page
|
|
23
|
+
* on another machine never gets a working socket anyway.
|
|
24
|
+
*/
|
|
25
|
+
export function hmrOriginAllowed(origin, port, hostname) {
|
|
26
|
+
if (!origin)
|
|
27
|
+
return false;
|
|
28
|
+
let url;
|
|
29
|
+
try {
|
|
30
|
+
url = new URL(origin);
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
if (url.protocol !== "http:" && url.protocol !== "https:")
|
|
36
|
+
return false;
|
|
37
|
+
if (url.port !== String(port))
|
|
38
|
+
return false;
|
|
39
|
+
return LOOPBACK.has(url.hostname) || url.hostname === hostname;
|
|
40
|
+
}
|
|
9
41
|
export async function dev(opts) {
|
|
10
42
|
const project = scanProject(opts.root);
|
|
11
43
|
const { clientDir } = project;
|
|
@@ -14,6 +46,11 @@ export async function dev(opts) {
|
|
|
14
46
|
// and from inside containers, not just loopback.
|
|
15
47
|
const hostname = opts.hostname ?? "0.0.0.0";
|
|
16
48
|
const hmrPort = port + 1;
|
|
49
|
+
// An app cannot otherwise tell dev from production: nothing in the
|
|
50
|
+
// environment says so, and the same middleware runs in both. Anything that
|
|
51
|
+
// must be laxer in dev — a CSP that has to allow the HMR socket on
|
|
52
|
+
// `hmrPort`, a verbose error page — reads this.
|
|
53
|
+
setEnv("FU_DEV", "1");
|
|
17
54
|
emptyDir(clientDir);
|
|
18
55
|
const sheets = new Map();
|
|
19
56
|
const peers = new Map();
|
|
@@ -79,8 +116,14 @@ export async function dev(opts) {
|
|
|
79
116
|
};
|
|
80
117
|
serve({
|
|
81
118
|
port: hmrPort,
|
|
119
|
+
hostname,
|
|
82
120
|
fetch: () => new Response("fu hmr"),
|
|
83
121
|
websocket: {
|
|
122
|
+
upgrade(req) {
|
|
123
|
+
if (!hmrOriginAllowed(req.headers.get("origin"), port, hostname)) {
|
|
124
|
+
return new Response("Forbidden", { status: 403 });
|
|
125
|
+
}
|
|
126
|
+
},
|
|
84
127
|
async open(peer) {
|
|
85
128
|
const id = clientIdOf(peer);
|
|
86
129
|
if (!id)
|
package/dist/dev.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev.js","sourceRoot":"","sources":["../src/dev.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,4CAA4C;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,KAAK,IAAI,UAAU,EAAE,eAAe,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC3F,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EACL,WAAW,EACX,QAAQ,EACR,YAAY,EACZ,OAAO,EACP,WAAW,EACX,WAAW,EACX,aAAa,GACd,MAAM,aAAa,CAAC;AAGrB,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,IAAe;IACvC,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvC,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC;IAC/B,yEAAyE;IACzE,iDAAiD;IACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,SAAS,CAAC;IAC5C,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"dev.js","sourceRoot":"","sources":["../src/dev.ts"],"names":[],"mappings":"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"}
|
package/dist/driver.js
CHANGED
|
@@ -8,7 +8,7 @@ import { css, hash, jsx, selfAlias, virtual } from "./plugins.js";
|
|
|
8
8
|
* fail with the reason rather than a TypeError three frames later.
|
|
9
9
|
*/
|
|
10
10
|
const HERE = import.meta.dirname ?? remoteFrameworkError();
|
|
11
|
-
/** `.ts` when running from source (this repo
|
|
11
|
+
/** `.ts` when running from source (this repo), `.js` from the compiled npm build. */
|
|
12
12
|
const EXT = import.meta.url.endsWith(".js") ? ".js" : ".ts";
|
|
13
13
|
function remoteFrameworkError() {
|
|
14
14
|
throw new Error("fu: the framework is loaded from a remote URL (" + import.meta.url + "), " +
|
|
@@ -19,8 +19,7 @@ function remoteFrameworkError() {
|
|
|
19
19
|
/**
|
|
20
20
|
* The framework's own package name, read from the package.json above the
|
|
21
21
|
* runtime modules: this repo's at the root, or the installed package's. Absent
|
|
22
|
-
* when neither exists
|
|
23
|
-
* themselves.
|
|
22
|
+
* when neither exists, in which case apps must alias it themselves.
|
|
24
23
|
*/
|
|
25
24
|
const PACKAGE_NAME = (() => {
|
|
26
25
|
try {
|
package/dist/driver.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"driver.js","sourceRoot":"","sources":["../src/driver.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAGlE;;;;;GAKG;AACH,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,OAAO,IAAI,oBAAoB,EAAE,CAAC;AAE3D,
|
|
1
|
+
{"version":3,"file":"driver.js","sourceRoot":"","sources":["../src/driver.ts"],"names":[],"mappings":"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"}
|
package/dist/errors.d.ts
CHANGED
|
@@ -5,6 +5,9 @@ import type { RouteError } from "./types.js";
|
|
|
5
5
|
* ```ts
|
|
6
6
|
* if (!session) throw new HttpError(403, "Not your todo");
|
|
7
7
|
* ```
|
|
8
|
+
*
|
|
9
|
+
* In middleware, prefer returning the response: a throw there unwinds past the
|
|
10
|
+
* middleware that would have set headers on it.
|
|
8
11
|
*/
|
|
9
12
|
export declare class HttpError extends Error {
|
|
10
13
|
readonly status: number;
|
|
@@ -16,5 +19,8 @@ export declare function statusText(status: number): string;
|
|
|
16
19
|
*
|
|
17
20
|
* A `status` property is honoured wherever it appears, so errors from other
|
|
18
21
|
* libraries (h3, fetch wrappers) map sensibly instead of collapsing to 500.
|
|
22
|
+
* Their message is only carried through below 500: a foreign 5xx can say
|
|
23
|
+
* anything — node:sqlite names the database path, a driver quotes the SQL —
|
|
24
|
+
* and `message` is the one field the error page renders.
|
|
19
25
|
*/
|
|
20
26
|
export declare function toRouteError(err: unknown): RouteError;
|
package/dist/errors.js
CHANGED
|
@@ -4,6 +4,9 @@
|
|
|
4
4
|
* ```ts
|
|
5
5
|
* if (!session) throw new HttpError(403, "Not your todo");
|
|
6
6
|
* ```
|
|
7
|
+
*
|
|
8
|
+
* In middleware, prefer returning the response: a throw there unwinds past the
|
|
9
|
+
* middleware that would have set headers on it.
|
|
7
10
|
*/
|
|
8
11
|
export class HttpError extends Error {
|
|
9
12
|
status;
|
|
@@ -35,6 +38,9 @@ export function statusText(status) {
|
|
|
35
38
|
*
|
|
36
39
|
* A `status` property is honoured wherever it appears, so errors from other
|
|
37
40
|
* libraries (h3, fetch wrappers) map sensibly instead of collapsing to 500.
|
|
41
|
+
* Their message is only carried through below 500: a foreign 5xx can say
|
|
42
|
+
* anything — node:sqlite names the database path, a driver quotes the SQL —
|
|
43
|
+
* and `message` is the one field the error page renders.
|
|
38
44
|
*/
|
|
39
45
|
export function toRouteError(err) {
|
|
40
46
|
if (err instanceof HttpError) {
|
|
@@ -43,11 +49,10 @@ export function toRouteError(err) {
|
|
|
43
49
|
const status = err?.status;
|
|
44
50
|
if (typeof status === "number" && status >= 400 && status <= 599) {
|
|
45
51
|
const message = err.message;
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
};
|
|
52
|
+
const safe = status < 500 && typeof message === "string" && message
|
|
53
|
+
? message
|
|
54
|
+
: statusText(status);
|
|
55
|
+
return { status, message: safe, cause: err };
|
|
51
56
|
}
|
|
52
57
|
return { status: 500, message: statusText(500), cause: err };
|
|
53
58
|
}
|
package/dist/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAEA
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,MAAM,OAAO,SAAU,SAAQ,KAAK;IACzB,MAAM,CAAS;IAExB,YAAY,MAAc,EAAE,OAAgB;QAC1C,KAAK,CAAC,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;QACrC,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;QACxB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF;AAED,MAAM,IAAI,GAA2B;IACnC,GAAG,EAAE,aAAa;IAClB,GAAG,EAAE,cAAc;IACnB,GAAG,EAAE,WAAW;IAChB,GAAG,EAAE,WAAW;IAChB,GAAG,EAAE,oBAAoB;IACzB,GAAG,EAAE,UAAU;IACf,GAAG,EAAE,MAAM;IACX,GAAG,EAAE,uBAAuB;IAC5B,GAAG,EAAE,mBAAmB;IACxB,GAAG,EAAE,uBAAuB;IAC5B,GAAG,EAAE,aAAa;IAClB,GAAG,EAAE,qBAAqB;CAC3B,CAAC;AAEF,MAAM,UAAU,UAAU,CAAC,MAAc;IACvC,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;AAC7E,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,GAAY;IACvC,IAAI,GAAG,YAAY,SAAS,EAAE,CAAC;QAC7B,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;IAClE,CAAC;IACD,MAAM,MAAM,GAAI,GAAmC,EAAE,MAAM,CAAC;IAC5D,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,IAAI,GAAG,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC;QACjE,MAAM,OAAO,GAAI,GAA6B,CAAC,OAAO,CAAC;QACvD,MAAM,IAAI,GAAG,MAAM,GAAG,GAAG,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO;YACjE,CAAC,CAAC,OAAO;YACT,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACvB,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;IAC/C,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AAC/D,CAAC"}
|
package/dist/hmr-runtime.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
// @ts-check
|
|
2
1
|
// Fresh Urquell HMR client runtime. Rolldown's default runtime registers new module
|
|
3
2
|
// factories but never *applies* them; this one does the apply walk:
|
|
4
3
|
// swap the module, re-run its factory, then fire its accept callbacks.
|
|
4
|
+
//
|
|
5
|
+
// Not type-checked: `DevRuntime` is injected by rolldown when this source is
|
|
6
|
+
// inlined via `devMode.implement`, so it does not exist as a module.
|
|
5
7
|
|
|
6
8
|
/** @type {any} */
|
|
7
9
|
const BaseDevRuntime = DevRuntime;
|
package/dist/render.d.ts
CHANGED
|
@@ -30,8 +30,13 @@ export declare function createHandler<S = Record<string, unknown>>(parts: Handle
|
|
|
30
30
|
/**
|
|
31
31
|
* Turn a failure into a response. Rendered through `routes/_error.tsx` when the
|
|
32
32
|
* project has one, so it inherits the app's markup and styling; otherwise plain
|
|
33
|
-
* text.
|
|
34
|
-
*
|
|
33
|
+
* text.
|
|
34
|
+
*
|
|
35
|
+
* For a handler or page failure this runs at the route boundary, so the
|
|
36
|
+
* response goes back out through the middleware chain and security headers and
|
|
37
|
+
* logging still apply. For a middleware throw it runs only after the whole
|
|
38
|
+
* chain has unwound — the throw propagates past every `await ctx.next()` so an
|
|
39
|
+
* outer middleware can catch it — and nothing decorates the response.
|
|
35
40
|
*/
|
|
36
41
|
export declare function renderError<S>(ctx: Ctx<S>, err: unknown, parts: HandlerParts<S>): Promise<Response>;
|
|
37
42
|
/** Assemble the HTML document from the page body, head metadata and assets. */
|
package/dist/render.js
CHANGED
|
@@ -105,8 +105,13 @@ function htmlResponse(body, ctx, parts, status = 200) {
|
|
|
105
105
|
/**
|
|
106
106
|
* Turn a failure into a response. Rendered through `routes/_error.tsx` when the
|
|
107
107
|
* project has one, so it inherits the app's markup and styling; otherwise plain
|
|
108
|
-
* text.
|
|
109
|
-
*
|
|
108
|
+
* text.
|
|
109
|
+
*
|
|
110
|
+
* For a handler or page failure this runs at the route boundary, so the
|
|
111
|
+
* response goes back out through the middleware chain and security headers and
|
|
112
|
+
* logging still apply. For a middleware throw it runs only after the whole
|
|
113
|
+
* chain has unwound — the throw propagates past every `await ctx.next()` so an
|
|
114
|
+
* outer middleware can catch it — and nothing decorates the response.
|
|
110
115
|
*/
|
|
111
116
|
export async function renderError(ctx, err, parts) {
|
|
112
117
|
const error = toRouteError(err);
|
package/dist/render.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.js","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"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"}
|
package/dist/router.js
CHANGED
|
@@ -67,13 +67,42 @@ export function match(routes, pathname) {
|
|
|
67
67
|
const m = route.urlPattern.exec(input);
|
|
68
68
|
if (!m)
|
|
69
69
|
continue;
|
|
70
|
-
const params =
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
params[k] = decodeURIComponent(v);
|
|
74
|
-
}
|
|
75
|
-
return { route, params };
|
|
70
|
+
const params = decodeParams(route.pattern, m.pathname.groups);
|
|
71
|
+
if (params)
|
|
72
|
+
return { route, params };
|
|
76
73
|
}
|
|
77
74
|
return null;
|
|
78
75
|
}
|
|
76
|
+
/**
|
|
77
|
+
* Decoded params, or null when the request should not match this route.
|
|
78
|
+
*
|
|
79
|
+
* URLPattern matches the encoded path, so `%2F` passes as part of one segment
|
|
80
|
+
* and only becomes a separator on decoding: `[slug]` would hand the app
|
|
81
|
+
* `../../etc/passwd`, a traversal for the first handler that joins it onto a
|
|
82
|
+
* directory. So a value may not hold NUL, a backslash, or a `.`/`..` segment,
|
|
83
|
+
* and only a wildcard may hold `/`. A malformed escape is no match either,
|
|
84
|
+
* rather than a throw.
|
|
85
|
+
*/
|
|
86
|
+
function decodeParams(pattern, groups) {
|
|
87
|
+
const params = {};
|
|
88
|
+
for (const [k, raw] of Object.entries(groups)) {
|
|
89
|
+
if (raw === undefined)
|
|
90
|
+
continue;
|
|
91
|
+
let v;
|
|
92
|
+
try {
|
|
93
|
+
v = decodeURIComponent(raw);
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
return null;
|
|
97
|
+
}
|
|
98
|
+
if (v.includes("\0") || v.includes("\\"))
|
|
99
|
+
return null;
|
|
100
|
+
if (v.includes("/") && !pattern.includes(`:${k}*`))
|
|
101
|
+
return null;
|
|
102
|
+
if (v.split("/").some((s) => s === "." || s === ".."))
|
|
103
|
+
return null;
|
|
104
|
+
params[k] = v;
|
|
105
|
+
}
|
|
106
|
+
return params;
|
|
107
|
+
}
|
|
79
108
|
//# sourceMappingURL=router.js.map
|
package/dist/router.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.js","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"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
|
|
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.1
|
|
3
|
+
"version": "0.2.1",
|
|
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",
|
|
@@ -51,17 +51,17 @@
|
|
|
51
51
|
"lightningcss": "^1.33.0",
|
|
52
52
|
"nitro": "^3.0.260903-beta",
|
|
53
53
|
"preact-render-to-string": "^6.7.0",
|
|
54
|
-
"rolldown": "^1.2.
|
|
54
|
+
"rolldown": "^1.2.8",
|
|
55
55
|
"urlpattern-polyfill": "^10.1.0"
|
|
56
56
|
},
|
|
57
57
|
"peerDependencies": {
|
|
58
58
|
"@preact/signals": "^2",
|
|
59
|
-
"preact": "^11.0.0-rc.
|
|
59
|
+
"preact": "^11.0.0-rc.2"
|
|
60
60
|
},
|
|
61
61
|
"devDependencies": {
|
|
62
62
|
"@preact/signals": "^2.11.2",
|
|
63
|
-
"@types/node": "^26.
|
|
64
|
-
"preact": "11.0.0-rc.
|
|
63
|
+
"@types/node": "^26.5.1",
|
|
64
|
+
"preact": "11.0.0-rc.2",
|
|
65
65
|
"typescript": "^7.0.2"
|
|
66
66
|
},
|
|
67
67
|
"engines": {
|