@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/dist/driver.js ADDED
@@ -0,0 +1,182 @@
1
+ import * as fs from "node:fs";
2
+ import * as path from "node:path";
3
+ import { css, hash, jsx, selfAlias, virtual } from "./plugins.js";
4
+ /**
5
+ * Directory holding the framework's own runtime modules, whose paths are handed
6
+ * to rolldown. `import.meta.dirname` is undefined when this module is loaded
7
+ * from a remote URL, and a bundler cannot fetch `https:` modules anyway — so
8
+ * fail with the reason rather than a TypeError three frames later.
9
+ */
10
+ const HERE = import.meta.dirname ?? remoteFrameworkError();
11
+ /** `.ts` when running from source (this repo, or JSR), `.js` from the compiled npm build. */
12
+ const EXT = import.meta.url.endsWith(".js") ? ".js" : ".ts";
13
+ function remoteFrameworkError() {
14
+ throw new Error("fu: the framework is loaded from a remote URL (" + import.meta.url + "), " +
15
+ "so its runtime modules cannot be handed to the bundler. Install it " +
16
+ "instead — `npm:@janit/fu` in a Deno import map, or `npm i @janit/fu` — " +
17
+ "so it resolves to a real directory.");
18
+ }
19
+ /**
20
+ * The framework's own package name, read from the package.json above the
21
+ * runtime modules: this repo's at the root, or the installed package's. Absent
22
+ * when neither exists (a JSR install), in which case apps must alias it
23
+ * themselves.
24
+ */
25
+ const PACKAGE_NAME = (() => {
26
+ try {
27
+ return JSON.parse(fs.readFileSync(path.join(HERE, "..", "package.json"), "utf8")).name ?? null;
28
+ }
29
+ catch {
30
+ return null;
31
+ }
32
+ })();
33
+ /** Plugins every bundle of app code needs, client and server alike. */
34
+ function shared(sheets, jsxOpts) {
35
+ return [
36
+ ...(PACKAGE_NAME ? [selfAlias(PACKAGE_NAME, HERE, EXT)] : []),
37
+ css(sheets),
38
+ jsx(jsxOpts),
39
+ ];
40
+ }
41
+ /** Absolute paths of the runtime modules the generated code imports. */
42
+ export const runtime = {
43
+ client: path.join(HERE, `client${EXT}`),
44
+ render: path.join(HERE, `render${EXT}`),
45
+ hmr: path.join(HERE, "hmr-runtime.js"),
46
+ };
47
+ export function scanProject(root) {
48
+ root = path.resolve(root);
49
+ return {
50
+ root,
51
+ routeFiles: walk(root, "routes"),
52
+ islandFiles: walk(root, "islands"),
53
+ appPath: optional(root, "app.ts", "app.tsx"),
54
+ shellPath: optional(root, "routes/_app.tsx"),
55
+ errorPath: optional(root, "routes/_error.tsx"),
56
+ clientDir: path.join(root, "dist/client"),
57
+ genDir: path.join(root, ".fu"),
58
+ };
59
+ }
60
+ /**
61
+ * Recursively list source files under `<root>/<sub>`, as root-relative
62
+ * "/sub/a/b.tsx". Underscore-prefixed files are skipped: they are framework
63
+ * files (`routes/_app.tsx`), not routes.
64
+ */
65
+ export function walk(root, sub) {
66
+ const out = [];
67
+ const visit = (dir) => {
68
+ if (!fs.existsSync(dir))
69
+ return;
70
+ for (const e of fs.readdirSync(dir, { withFileTypes: true })) {
71
+ const f = path.join(dir, e.name);
72
+ if (e.isDirectory())
73
+ visit(f);
74
+ else if (/\.[tj]sx?$/.test(e.name) && !e.name.startsWith("_")) {
75
+ out.push("/" + path.relative(root, f).split(path.sep).join("/"));
76
+ }
77
+ }
78
+ };
79
+ visit(path.join(root, sub));
80
+ return out;
81
+ }
82
+ /** Absolute path to an optional project file, or null when absent. */
83
+ export function optional(root, ...names) {
84
+ for (const n of names) {
85
+ const p = path.resolve(root, n);
86
+ if (fs.existsSync(p))
87
+ return p;
88
+ }
89
+ return null;
90
+ }
91
+ /** Recreate `dir` empty. */
92
+ export function emptyDir(dir) {
93
+ fs.rmSync(dir, { recursive: true, force: true });
94
+ fs.mkdirSync(dir, { recursive: true });
95
+ }
96
+ /** Rolldown input for the client bundle. */
97
+ export function clientInput(project, sheets, hmr = false) {
98
+ return {
99
+ input: { boot: "fu:boot" },
100
+ plugins: [virtual({ "fu:boot": bootModule(project) }), ...shared(sheets, { hmr })],
101
+ platform: "browser",
102
+ // rolldown types modules by extension and refuses to bundle CSS; css()
103
+ // has already replaced their contents with JS.
104
+ moduleTypes: { ".css": "js" },
105
+ };
106
+ }
107
+ /**
108
+ * Nitro options both drivers share. `serverDir` is the generated dir, never the
109
+ * project root, or nitro claims `routes/` as its own server routes and shadows
110
+ * the catch-all. Islands are imported on the server too, so SSR needs the same
111
+ * CSS and JSX handling as the client.
112
+ */
113
+ export function nitroOptions(project, ssrEntry) {
114
+ return {
115
+ rootDir: project.root,
116
+ serverDir: project.genDir,
117
+ scanDirs: [],
118
+ publicAssets: [{ dir: project.clientDir, baseURL: "/" }],
119
+ handlers: [{ route: "/**", handler: ssrEntry, format: "web", lazy: false }],
120
+ rollupConfig: {
121
+ plugins: shared(new Map(), { stampIslands: true }),
122
+ moduleTypes: { ".css": "js" },
123
+ },
124
+ };
125
+ }
126
+ /** Concatenate collected stylesheets into one file; hashed unless a name is given. */
127
+ export function writeSheets(dir, sheets, name) {
128
+ if (sheets.size === 0)
129
+ return null;
130
+ const merged = [...sheets.values()].join("\n");
131
+ const file = name ?? `style-${hash(merged)}.css`;
132
+ fs.writeFileSync(path.join(dir, file), merged);
133
+ return file;
134
+ }
135
+ const lazyImport = (root, file) => `${JSON.stringify(file)}: () => import(${JSON.stringify(path.resolve(root, "." + file))})`;
136
+ /** The client entry: hydrate every island the page carries. */
137
+ export function bootModule(project) {
138
+ const manifest = project.islandFiles.map((f) => " " + lazyImport(project.root, f)).join(",\n");
139
+ return `import { hydrateIslands } from ${JSON.stringify(runtime.client)};\n` +
140
+ `hydrateIslands({\n${manifest}\n});\n`;
141
+ }
142
+ /**
143
+ * The server entry: the route manifest, the optional app, shell and error
144
+ * page, and the handler wired to nitro.
145
+ *
146
+ * Nitro invokes the handler with an H3Event, not a Request. The event exposes
147
+ * `url`/`headers` directly — which is why routing worked long before anyone
148
+ * read a body — but has no json()/text()/formData(). The real Request is
149
+ * `event.req`.
150
+ */
151
+ export function ssrModule(project, assets) {
152
+ const optionalImports = [
153
+ ["app", project.appPath],
154
+ ["Shell", project.shellPath],
155
+ ["ErrorPage", project.errorPath],
156
+ ];
157
+ const present = optionalImports.filter(([, file]) => file);
158
+ return [
159
+ `import { createHandler } from ${JSON.stringify(runtime.render)};`,
160
+ ...present.map(([name, file]) => `import ${name} from ${JSON.stringify(file)};`),
161
+ `const manifest = {`,
162
+ project.routeFiles.map((f) => " " + lazyImport(project.root, f)).join(",\n"),
163
+ `};`,
164
+ `const assets = ${JSON.stringify(assets)};`,
165
+ `const handler = createHandler({ manifest, assets${present.map(([n]) => `, ${n}`).join("")} });`,
166
+ `const toRequest = (input) => input instanceof Request ? input : (input?.req ?? input);`,
167
+ `export default (input) => handler(toRequest(input));`,
168
+ ``,
169
+ ].join("\n");
170
+ }
171
+ /**
172
+ * Write the generated server entry and return its path. It has to be a real
173
+ * file: nitro path-resolves `handlers[].handler`, so a virtual id would not
174
+ * survive its routing codegen.
175
+ */
176
+ export function writeSsrEntry(project, assets) {
177
+ emptyDir(project.genDir);
178
+ const file = path.join(project.genDir, "ssr.ts");
179
+ fs.writeFileSync(file, ssrModule(project, assets));
180
+ return file;
181
+ }
182
+ //# sourceMappingURL=driver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"driver.js","sourceRoot":"","sources":["../src/driver.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@
4
4
  // swap the module, re-run its factory, then fire its accept callbacks.
5
5
 
6
6
  /** @type {any} */
7
- var BaseDevRuntime = DevRuntime;
7
+ const BaseDevRuntime = DevRuntime;
8
8
 
9
9
  class ModuleHotContext {
10
10
  /** @type {{ deps: string[], fn: (mod: any) => void }[]} */
@@ -17,11 +17,11 @@ class ModuleHotContext {
17
17
  if (args.length === 1) {
18
18
  this.acceptCallbacks.push({ deps: [this.moduleId], fn: args[0] });
19
19
  } else if (args.length !== 0) {
20
- throw new Error('Invalid arguments for `import.meta.hot.accept`');
20
+ throw new Error("Invalid arguments for `import.meta.hot.accept`");
21
21
  }
22
22
  }
23
23
  invalidate() {
24
- socket.send(JSON.stringify({ type: 'hmr:invalidate', moduleId: this.moduleId }));
24
+ socket.send(JSON.stringify({ type: "hmr:invalidate", moduleId: this.moduleId }));
25
25
  }
26
26
  }
27
27
 
@@ -36,8 +36,8 @@ class FuDevRuntime extends BaseDevRuntime {
36
36
  }
37
37
 
38
38
  const clientId = crypto.randomUUID();
39
- const addr = new URL('ws://$ADDR');
40
- addr.searchParams.set('clientId', clientId);
39
+ const addr = new URL("ws://$ADDR");
40
+ addr.searchParams.set("clientId", clientId);
41
41
  const socket = new WebSocket(addr);
42
42
 
43
43
  /** @type {any} */
@@ -54,21 +54,21 @@ async function applyPatch(url, allChangedIds) {
54
54
  const rt = globalThis.__rolldown_runtime__;
55
55
  // Stylesheets are swapped via the <link>, so they never need to accept and
56
56
  // must not drag the page into a full reload.
57
- const changedIds = (allChangedIds || []).filter((id) => !id.endsWith('.css'));
57
+ const changedIds = (allChangedIds || []).filter((id) => !id.endsWith(".css"));
58
58
  const selfAccepting = changedIds.filter((id) => {
59
59
  const ctx = rt.moduleHotContexts.get(id);
60
60
  return ctx && ctx.acceptCallbacks.length > 0;
61
61
  });
62
62
  try {
63
- await import(url + (url.includes('?') ? '&' : '?') + 't=' + Date.now());
63
+ await import(url + (url.includes("?") ? "&" : "?") + "t=" + Date.now());
64
64
  } catch (err) {
65
- console.error('[hmr] failed to load patch', url, err);
65
+ console.error("[hmr] failed to load patch", url, err);
66
66
  location.reload();
67
67
  return;
68
68
  }
69
69
  if (!changedIds || changedIds.length === 0) return;
70
70
  if (selfAccepting.length !== changedIds.length) {
71
- console.debug('[hmr] some modules did not accept; reloading');
71
+ console.debug("[hmr] some modules did not accept; reloading");
72
72
  location.reload();
73
73
  return;
74
74
  }
@@ -79,7 +79,7 @@ async function applyPatch(url, allChangedIds) {
79
79
  const ctx = rt.moduleHotContexts.get(id);
80
80
  for (const { fn } of ctx ? ctx.acceptCallbacks : []) fn(exports);
81
81
  }
82
- console.debug('[hmr] applied', selfAccepting.join(', '));
82
+ console.debug("[hmr] applied", selfAccepting.join(", "));
83
83
  }
84
84
 
85
85
  /**
@@ -90,23 +90,25 @@ async function applyPatch(url, allChangedIds) {
90
90
  function swapStylesheet(href) {
91
91
  const links = [...document.querySelectorAll('link[rel="stylesheet"]')];
92
92
  const old = links[links.length - 1];
93
- const next = document.createElement('link');
94
- next.rel = 'stylesheet';
93
+ const next = document.createElement("link");
94
+ next.rel = "stylesheet";
95
95
  next.href = href;
96
- next.onload = () => { if (old && old !== next) old.remove(); };
96
+ next.onload = () => {
97
+ if (old && old !== next) old.remove();
98
+ };
97
99
  (old ? old.parentNode : document.head).insertBefore(next, old ? old.nextSibling : null);
98
- console.debug('[hmr] css swapped ->', href);
100
+ console.debug("[hmr] css swapped ->", href);
99
101
  }
100
102
 
101
103
  socket.onmessage = function (event) {
102
104
  const data = JSON.parse(event.data);
103
- if (data.type === 'connected') {
104
- console.debug('[hmr] connected');
105
- } else if (data.type === 'hmr:update') {
105
+ if (data.type === "connected") {
106
+ console.debug("[hmr] connected");
107
+ } else if (data.type === "hmr:update") {
106
108
  applyPatch(data.url, data.changedIds);
107
- } else if (data.type === 'fu:css') {
109
+ } else if (data.type === "fu:css") {
108
110
  swapStylesheet(data.href);
109
- } else if (data.type === 'hmr:reload') {
111
+ } else if (data.type === "hmr:reload") {
110
112
  location.reload();
111
113
  }
112
114
  };
package/dist/plugins.d.ts CHANGED
@@ -39,30 +39,13 @@ export declare function stampIslands(js: string, key: string, id: string): {
39
39
  * module by extension and refuses to bundle it.
40
40
  */
41
41
  export declare function css(collected: Map<string, string>): Plugin;
42
+ /**
43
+ * Resolve a bare package name (and its subpaths) to files under `dir`, so an
44
+ * app importing the framework by name gets the copy the driver is running
45
+ * from. Node resolution would otherwise pick whatever `package.json` claims —
46
+ * in this repo, a stale compiled `dist/` — and bundle a second framework.
47
+ */
48
+ export declare function selfAlias(name: string, dir: string, ext: string): Plugin;
42
49
  /** Serve generated modules by exact id. */
43
50
  export declare function virtual(mods: Record<string, string>): Plugin;
44
51
  export declare function hash(s: string): string;
45
- /**
46
- * Recursively list source files under `dir`, as root-relative "/a/b.tsx".
47
- * Underscore-prefixed files are skipped: they are framework files
48
- * (`routes/_app.tsx`), not routes.
49
- */
50
- export declare function walk(root: string, dir: string, out?: string[]): string[];
51
- /** Absolute path to an optional project file, or null when absent. */
52
- export declare function optional(root: string, ...names: string[]): string | null;
53
- /** Generated module bodies both drivers need. */
54
- export declare function bootModule(clientPath: string, islandFiles: string[], root: string): string;
55
- export interface SsrModuleOptions {
56
- renderPath: string;
57
- routeFiles: string[];
58
- root: string;
59
- /** Serialized Assets literal. */
60
- assets: string;
61
- /** Absolute path to the project's `app.ts`, if it has one. */
62
- appPath?: string | null;
63
- /** Absolute path to the project's `routes/_app.tsx`, if it has one. */
64
- shellPath?: string | null;
65
- /** Absolute path to the project's `routes/_error.tsx`, if it has one. */
66
- errorPath?: string | null;
67
- }
68
- export declare function ssrModule(o: SsrModuleOptions): string;
package/dist/plugins.js CHANGED
@@ -1,7 +1,5 @@
1
1
  import { parseSync, transformSync } from "rolldown/experimental";
2
2
  import { transform as lightning } from "lightningcss";
3
- import * as fs from "node:fs";
4
- import * as path from "node:path";
5
3
  /** Files a source transform must never touch. */
6
4
  function isInternal(id) {
7
5
  return id.includes("node_modules") ||
@@ -173,6 +171,24 @@ export function css(collected) {
173
171
  },
174
172
  };
175
173
  }
174
+ /**
175
+ * Resolve a bare package name (and its subpaths) to files under `dir`, so an
176
+ * app importing the framework by name gets the copy the driver is running
177
+ * from. Node resolution would otherwise pick whatever `package.json` claims —
178
+ * in this repo, a stale compiled `dist/` — and bundle a second framework.
179
+ */
180
+ export function selfAlias(name, dir, ext) {
181
+ return {
182
+ name: "fu:self-alias",
183
+ resolveId(id) {
184
+ if (id === name)
185
+ return `${dir}/mod${ext}`;
186
+ if (id.startsWith(name + "/"))
187
+ return `${dir}/${id.slice(name.length + 1)}${ext}`;
188
+ return null;
189
+ },
190
+ };
191
+ }
176
192
  /** Serve generated modules by exact id. */
177
193
  export function virtual(mods) {
178
194
  return {
@@ -187,60 +203,4 @@ export function hash(s) {
187
203
  h = (Math.imul(h, 31) + s.charCodeAt(i)) >>> 0;
188
204
  return h.toString(36);
189
205
  }
190
- /**
191
- * Recursively list source files under `dir`, as root-relative "/a/b.tsx".
192
- * Underscore-prefixed files are skipped: they are framework files
193
- * (`routes/_app.tsx`), not routes.
194
- */
195
- export function walk(root, dir, out = []) {
196
- if (!fs.existsSync(dir))
197
- return out;
198
- for (const e of fs.readdirSync(dir, { withFileTypes: true })) {
199
- const f = path.join(dir, e.name);
200
- if (e.isDirectory())
201
- walk(root, f, out);
202
- else if (/\.[tj]sx?$/.test(e.name) && !e.name.startsWith("_")) {
203
- out.push("/" + path.relative(root, f).split(path.sep).join("/"));
204
- }
205
- }
206
- return out;
207
- }
208
- /** Absolute path to an optional project file, or null when absent. */
209
- export function optional(root, ...names) {
210
- for (const n of names) {
211
- const p = path.resolve(root, n);
212
- if (fs.existsSync(p))
213
- return p;
214
- }
215
- return null;
216
- }
217
- /** Generated module bodies both drivers need. */
218
- export function bootModule(clientPath, islandFiles, root) {
219
- return `
220
- import { hydrateIslands } from ${JSON.stringify(clientPath)};
221
- hydrateIslands({
222
- ${islandFiles.map((f) => ` ${JSON.stringify(f)}: () => import(${JSON.stringify(path.resolve(root, "." + f))})`).join(",\n")}
223
- });
224
- `;
225
- }
226
- export function ssrModule(o) {
227
- const lines = [
228
- `import { createHandler } from ${JSON.stringify(o.renderPath)};`,
229
- ];
230
- if (o.appPath)
231
- lines.push(`import app from ${JSON.stringify(o.appPath)};`);
232
- if (o.shellPath)
233
- lines.push(`import Shell from ${JSON.stringify(o.shellPath)};`);
234
- if (o.errorPath)
235
- lines.push(`import ErrorPage from ${JSON.stringify(o.errorPath)};`);
236
- lines.push(`const routes = {`, o.routeFiles
237
- .map((f) => ` ${JSON.stringify(f)}: () => import(${JSON.stringify(path.resolve(o.root, "." + f))})`)
238
- .join(",\n"), `};`, `const assets = ${o.assets};`, `const handler = createHandler({`, ` manifest: routes,`, ` assets,`, o.appPath ? ` app,` : ` app: undefined,`, o.shellPath ? ` Shell,` : ` Shell: undefined,`, o.errorPath ? ` ErrorPage,` : ` ErrorPage: undefined,`, `});`,
239
- // Nitro invokes the handler with an H3Event, not a Request. The event
240
- // exposes `url`/`headers` directly — which is why routing worked long
241
- // before anyone read a body — but has no json()/text()/formData(). The
242
- // real Request is `event.req`.
243
- `const toRequest = (input) => input instanceof Request ? input : (input?.req ?? input);`, `export default (input) => handler(toRequest(input));`, ``);
244
- return lines.join("\n");
245
- }
246
206
  //# sourceMappingURL=plugins.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugins.js","sourceRoot":"","sources":["../src/plugins.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugins.js","sourceRoot":"","sources":["../src/plugins.ts"],"names":[],"mappings":"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"}
package/dist/render.d.ts CHANGED
@@ -1,10 +1,10 @@
1
- import { type ComponentType } from "preact";
2
- import type { App } from "./app.js";
1
+ import { type ComponentChildren, type ComponentType } from "preact";
2
+ import { type App } from "./app.js";
3
3
  import type { Assets, Ctx, Head, RouteManifest } from "./types.js";
4
4
  /** Optional root wrapper (`routes/_app.tsx`) around every page. */
5
5
  export interface ShellProps<S = Record<string, unknown>> {
6
6
  ctx: Ctx<S>;
7
- children: unknown;
7
+ children: ComponentChildren;
8
8
  }
9
9
  export interface HandlerParts<S> {
10
10
  manifest: RouteManifest<S>;
package/dist/render.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import { h, options } from "preact";
2
2
  import { renderToStringAsync } from "preact-render-to-string";
3
3
  import { buildRoutes, match } from "./router.js";
4
+ import { compose } from "./app.js";
4
5
  import { HttpError, statusText, toRouteError } from "./errors.js";
5
6
  /** Property the SSR transform stamps onto island exports. */
6
7
  const ISLAND = "__island";
@@ -45,8 +46,7 @@ function installIslandHook() {
45
46
  export function createHandler(parts) {
46
47
  installIslandHook();
47
48
  const routes = buildRoutes(parts.manifest);
48
- const terminal = (ctx) => renderRoute(ctx, routes, parts);
49
- const run = parts.app ? parts.app.compose(terminal) : composeBare(terminal);
49
+ const run = compose(parts.app?.middleware ?? [], (ctx) => renderRoute(ctx, routes, parts));
50
50
  return (req) => {
51
51
  const ctx = {
52
52
  req,
@@ -61,16 +61,15 @@ export function createHandler(parts) {
61
61
  return run(ctx).catch((err) => renderError(ctx, err, parts));
62
62
  };
63
63
  }
64
- function composeBare(terminal) {
65
- return (ctx) => Promise.resolve(terminal(ctx));
66
- }
67
64
  async function renderRoute(ctx, routes, parts) {
68
65
  try {
69
66
  const m = match(routes, ctx.url.pathname);
70
67
  if (!m)
71
68
  throw new HttpError(404);
72
69
  ctx.params = m.params;
73
- const mod = await m.route.load();
70
+ // Cached on the route: a dynamic import of a loaded module is cheap but
71
+ // not free, and the manifest never changes within one server process.
72
+ const mod = m.route.module ??= await m.route.load();
74
73
  if (mod.handlers) {
75
74
  const fn = mod.handlers[ctx.req.method];
76
75
  if (!fn)
@@ -91,9 +90,7 @@ async function renderRoute(ctx, routes, parts) {
91
90
  }
92
91
  /** Render the page, wrapped in `routes/_app.tsx` when the project has one. */
93
92
  async function renderTree(ctx, page, parts) {
94
- const tree = parts.Shell
95
- ? h(parts.Shell, { ctx, children: page })
96
- : page;
93
+ const tree = parts.Shell ? h(parts.Shell, { ctx, children: page }) : page;
97
94
  return await renderToStringAsync(tree);
98
95
  }
99
96
  function htmlResponse(body, ctx, parts, status = 200) {
@@ -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.d.ts CHANGED
@@ -6,6 +6,15 @@ export interface Route<S = Record<string, unknown>> {
6
6
  load: () => Promise<RouteModule<S>>;
7
7
  /** Lower sorts first: static beats dynamic beats wildcard. */
8
8
  score: number;
9
+ /**
10
+ * The canonical pathname when the pattern has no pattern syntax at all, so
11
+ * the route can be matched by string equality instead of `URLPattern.exec`.
12
+ */
13
+ literal: string | null;
14
+ /** Segments in the pattern. A wildcard matches one fewer or more; the rest exactly this many. */
15
+ segments: number;
16
+ /** The loaded module, cached by the renderer after the first request. */
17
+ module?: RouteModule<S>;
9
18
  }
10
19
  export interface Matched<S = Record<string, unknown>> {
11
20
  route: Route<S>;
@@ -18,4 +27,12 @@ export interface Matched<S = Record<string, unknown>> {
18
27
  */
19
28
  export declare function filePathToPattern(file: string): string;
20
29
  export declare function buildRoutes<S = Record<string, unknown>>(manifest: RouteManifest<S>): Route<S>[];
30
+ /**
31
+ * First route that matches, in `buildRoutes` order.
32
+ *
33
+ * `URLPattern.exec` costs microseconds per call, so it only runs for routes
34
+ * that could match: literal routes compare by equality, and a pattern whose
35
+ * segment count cannot fit the path is skipped. The string input form is used
36
+ * because the `{ pathname }` dictionary form is several times slower on Deno.
37
+ */
21
38
  export declare function match<S = Record<string, unknown>>(routes: Route<S>[], pathname: string): Matched<S> | null;