htmx-router 2.0.0 → 2.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.
@@ -1,5 +1,4 @@
1
1
  import type { ViteDevServer } from "vite";
2
- import { connectToWeb } from "./compatibility/vite/connectToWeb.js";
3
2
  import { GenericContext } from "../router.js";
4
3
  import { RouterModule } from "./index.js";
5
4
  export type Config = {
@@ -11,10 +10,7 @@ type ServerBindType = "pre" | "post";
11
10
  type ServerBind = (ctx: GenericContext) => Promise<Response | null> | Response | null;
12
11
  export declare class HtmxRouterServer {
13
12
  #private;
14
- readonly vite: {
15
- handler: ReturnType<typeof connectToWeb>;
16
- server: Config["viteDevServer"];
17
- } | null;
13
+ readonly vite: Config["viteDevServer"];
18
14
  readonly render: Config["render"];
19
15
  readonly build: Config["build"];
20
16
  constructor(config: Config);
@@ -21,18 +21,15 @@ export class HtmxRouterServer {
21
21
  build;
22
22
  #binding;
23
23
  constructor(config) {
24
- this.vite = config.viteDevServer ? {
25
- handler: connectToWeb(config.viteDevServer.middlewares),
26
- server: config.viteDevServer
27
- } : null;
24
+ this.vite = config.viteDevServer;
28
25
  this.render = config.render;
29
26
  this.build = config.build;
30
27
  this.#binding = {
31
28
  pre: [UrlCleaner],
32
29
  post: []
33
30
  };
34
- if (config.viteDevServer) {
35
- const handler = connectToWeb(config.viteDevServer.middlewares);
31
+ if (this.vite) {
32
+ const handler = connectToWeb(this.vite.middlewares);
36
33
  this.#binding.post.push(handler);
37
34
  }
38
35
  }
@@ -108,7 +105,7 @@ export class HtmxRouterServer {
108
105
  }
109
106
  catch (e) {
110
107
  if (e instanceof Error)
111
- this.vite?.server?.ssrFixStacktrace(e);
108
+ this.vite?.ssrFixStacktrace(e);
112
109
  console.error(e);
113
110
  response = await tree.unwrap(ctx, e);
114
111
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "htmx-router",
3
- "version": "2.0.0",
3
+ "version": "2.0.1",
4
4
  "description": "A lightweight SSR framework with server+client islands",
5
5
  "keywords": [
6
6
  "htmx",
@@ -1,13 +0,0 @@
1
- import type { IncomingMessage, ServerResponse } from "http";
2
- import type { ViteDevServer } from "vite";
3
- import { GenericContext } from "../router.js";
4
- type Config = {
5
- build: Promise<any> | (() => Promise<Record<string, any>>);
6
- viteDevServer: ViteDevServer | null;
7
- render: GenericContext["render"];
8
- };
9
- /**
10
- * @deprecated
11
- */
12
- export declare function createRequestHandler(config: Config): (req: IncomingMessage, res: ServerResponse) => Promise<void>;
13
- export {};
@@ -1,43 +0,0 @@
1
- import { ServerOnlyWarning } from "../util.js";
2
- ServerOnlyWarning("http-request");
3
- import { CreateRequest } from "./compatibility/node.js";
4
- import { Resolve } from "./native.js";
5
- /**
6
- * @deprecated
7
- */
8
- export function createRequestHandler(config) {
9
- return async (req, res) => {
10
- try {
11
- const mod = typeof config.build === "function" ? await config.build() : await config.build;
12
- const request = CreateRequest(req);
13
- let { response, headers } = await Resolve(request, mod.tree, config);
14
- res.writeHead(response.status, headers);
15
- if (response.body instanceof ReadableStream) {
16
- const reader = response.body.getReader();
17
- while (true) {
18
- const { done, value } = await reader.read();
19
- if (done)
20
- break;
21
- res.write(value); // `value` is a Uint8Array.
22
- }
23
- res.end();
24
- }
25
- else {
26
- const rendered = await response.text();
27
- res.end(rendered);
28
- }
29
- }
30
- catch (e) {
31
- res.statusCode = 500;
32
- if (e instanceof Error) {
33
- console.error(e.stack);
34
- config.viteDevServer?.ssrFixStacktrace(e);
35
- res.end(e.stack);
36
- }
37
- else {
38
- console.error(e);
39
- res.end(String(e));
40
- }
41
- }
42
- };
43
- }
@@ -1,20 +0,0 @@
1
- import type { Config } from './index.js';
2
- import type { RouteTree } from '../../router.js';
3
- /**
4
- * @deprecated
5
- */
6
- export declare function createRequestHandler(config: Config): (req: Request) => Promise<{
7
- response: Response;
8
- headers: {
9
- [key: string]: string | string[];
10
- };
11
- }>;
12
- /**
13
- * @deprecated
14
- */
15
- export declare function Resolve(request: Request, tree: RouteTree, config: Config): Promise<{
16
- response: Response;
17
- headers: {
18
- [key: string]: string | string[];
19
- };
20
- }>;
@@ -1,61 +0,0 @@
1
- import { ServerOnlyWarning } from "../util.js";
2
- ServerOnlyWarning("native-request");
3
- import { GenericContext } from "../router.js";
4
- import { MakeStatus } from "../../status.js";
5
- /**
6
- * @deprecated
7
- */
8
- export function createRequestHandler(config) {
9
- return async (req) => {
10
- const mod = typeof config.build === "function" ? await config.build() : await config.build;
11
- return await Resolve(req, mod.tree, config);
12
- };
13
- }
14
- /**
15
- * @deprecated
16
- */
17
- export async function Resolve(request, tree, config) {
18
- const ctx = new GenericContext(request, new URL(request.url), config.render);
19
- let response;
20
- try {
21
- const x = ctx.url.pathname.slice(1);
22
- if (x.endsWith("/")) {
23
- ctx.headers.set("location", ctx.url.pathname.slice(0, -1) + ctx.url.search + ctx.url.hash);
24
- response = new Response("", MakeStatus("Permanent Redirect", { headers: ctx.headers }));
25
- }
26
- else {
27
- const fragments = x === "" ? [] : x.split("/");
28
- const res = await tree.resolve(fragments, ctx);
29
- response = res === null
30
- ? new Response("No Route Found", MakeStatus("Not Found", ctx.headers))
31
- : res;
32
- }
33
- // Override with context headers
34
- if (response.headers !== ctx.headers) {
35
- for (const [key, value] of ctx.headers) {
36
- if (key === "content-type")
37
- continue;
38
- response.headers.set(key, value);
39
- }
40
- }
41
- }
42
- catch (e) {
43
- if (e instanceof Error) {
44
- console.error(e.stack);
45
- config.viteDevServer?.ssrFixStacktrace(e);
46
- response = new Response(e.message + "\n" + e.stack, { status: 500, statusText: "Internal Server Error" });
47
- }
48
- else {
49
- console.error(e);
50
- response = new Response(String(e), { status: 500, statusText: "Internal Server Error" });
51
- }
52
- }
53
- // Merge cookie changes
54
- const headers = Object.fromEntries(response.headers);
55
- const cookies = ctx.cookie.export();
56
- if (cookies.length > 0) {
57
- headers['set-cookie'] = cookies;
58
- response.headers.set("Set-Cookie", cookies[0]); // Response object doesn't support multi-header..[]
59
- }
60
- return { response, headers };
61
- }