Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor(demo): use h3/nitro for deployment packaging #146

Closed
wants to merge 15 commits into from
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
node_modules
dist
test-results
.vercel
.vite-node
.wrangler
Expand Down
1 change: 1 addition & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
pnpm-lock.yaml
node_modules
dist
test-results
.vercel
.vite-node
.wrangler
10 changes: 10 additions & 0 deletions packages/demo/misc/nitro/build.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#!/bin/bash
set -eu -o pipefail

rm -rf dist/nitro
mkdir -p dist/nitro/routes

cp -r dist/client dist/nitro/public
rm -rf dist/nitro/public/{index.html,.vite}

cp -r misc/nitro/{nitro.config.ts,routes} dist/nitro
23 changes: 23 additions & 0 deletions packages/demo/misc/nitro/nitro.config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import { defineNitroConfig } from "nitropack/config";

export default defineNitroConfig({
publicAssets: [
{
baseURL: "assets",
dir: "public/assets",
maxAge: 31536000,
},
],
rollupConfig: {
// silence warning by "use client" in react-query https://github.com/TanStack/query/pull/5161#issuecomment-1506683450
onwarn(warning, defaultHandler) {
if (
warning.code === "MODULE_LEVEL_DIRECTIVE" &&
warning.message.includes(`"use client"`)
) {
return;
}
defaultHandler(warning);
},
},
});
1 change: 1 addition & 0 deletions packages/demo/misc/nitro/routes/[...].mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export { default } from "../../server/index.js";
6 changes: 6 additions & 0 deletions packages/demo/misc/nitro/vercel.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
#!/bin/bash
set -eu -o pipefail

rm -rf .vercel/output
mkdir -p .vercel/output
cp -r dist/nitro/.vercel/output/. .vercel/output
2 changes: 2 additions & 0 deletions packages/demo/misc/vercel/README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
# vercel

TODO: remove

misc script for vercel deployment

```sh
Expand Down
11 changes: 7 additions & 4 deletions packages/demo/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,12 @@
"dev": "run-p dev:*",
"dev:vite": "vite",
"dev:tsc": "tsc -b --watch --preserveWatchOutput",
"build": "SERVER_ENTRY=./src/server/adapter-vercel-edge.ts run-s build:*",
"build": "run-s build:*",
"build:vite": "vite build && vite build --ssr",
"build:vercel": "bash misc/vercel/build.sh",
"build-preview": "SERVER_ENTRY=./src/server/adapter-preview.ts run-s build:vite",
"preview": "node ./dist/server/index.js",
"build:vercel": "NITRO_PRESET=vercel-edge pnpm run build-nitro && bash misc/nitro/vercel.sh",
"build-nitro": "bash misc/nitro/build.sh && nitro build dist/nitro",
"build-preview": "pnpm run build:vite && NITRO_PRESET=node-server pnpm run build-nitro",
"preview": "NITRO_HOST=127.0.0.1 NITRO_PORT=$PORT node -r @hiogawa/tiny-jwt/dist/polyfill-node ./dist/nitro/.output/server/index.mjs",
"test": "vitest",
"test-e2e": "playwright test",
"cli": "tsx ./src/server/cli.ts",
Expand Down Expand Up @@ -46,6 +47,8 @@
"@vitejs/plugin-react": "^4.2.0",
"cookie": "^0.5.0",
"express": "^4.18.2",
"h3": "^1.9.0",
"nitropack": "^2.8.1",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-router-dom": "^6.13.0",
Expand Down
1 change: 1 addition & 0 deletions packages/demo/playwright.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ const command = process.env["E2E_COMMAND"] ?? `pnpm dev:vite`;

export default defineConfig({
testDir: "e2e",
timeout: 5000,
retries: process.env.CI ? 2 : 0,
use: {
baseURL: `http://localhost:${PORT}`,
Expand Down
22 changes: 22 additions & 0 deletions packages/demo/src/server/adapter-h3.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import { defineEventHandler, getRequestIP, toWebRequest } from "h3";
import { createHattipApp } from ".";

const hattipHandler = createHattipApp();

const h3Handler = defineEventHandler((event) => {
event.context;
return hattipHandler({
request: toWebRequest(event),
ip: getRequestIP(event) ?? "127.0.0.1",
// https://github.com/unjs/nitro/blob/5ead36f78eb54ab94b01c48f6da6e0ecf20a79fa/src/runtime/entries/cloudflare-module.ts#L59-L63
platform: event.context,
passThrough() {},
waitUntil(_promise) {
// TODO: preset dependent e.g.
event.context["cloudflare"];
event.context["vercel"];
},
});
});

export default h3Handler;
9 changes: 4 additions & 5 deletions packages/demo/src/server/adapter-node.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import { createMiddleware } from "@hattip/adapter-node";
import { createHattipApp } from ".";
import "@hiogawa/tiny-jwt/dist/polyfill-node";
import { createApp, toNodeListener } from "h3";
import h3Handler from "./adapter-h3";

export default createMiddleware(createHattipApp(), {
trustProxy: !import.meta.env.DEV,
});
export default toNodeListener(createApp().use(h3Handler));
2 changes: 2 additions & 0 deletions packages/demo/src/server/adapter-preview.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
// TODO: remove

import process from "node:process";
import express from "express";
import middleware from "./adapter-node";
Expand Down
2 changes: 2 additions & 0 deletions packages/demo/src/server/adapter-vercel-edge.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
// TODO: remove

import adapterVercelEdge from "@hattip/adapter-vercel-edge";
import { createHattipApp } from ".";

Expand Down
5 changes: 4 additions & 1 deletion packages/demo/vite.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,10 @@ export default defineConfig((ctx) => ({
importDevServerPlugin(),
globRoutesPlugin({ root: "/src/routes" }),
vitePluginSsrMiddleware({
entry: process.env["SERVER_ENTRY"] ?? "./src/server/adapter-node.ts",
entry:
ctx.command === "serve"
? "./src/server/adapter-node.ts"
: "./src/server/adapter-h3.ts",
}),
vitePluginSsrCss({
entry: ["./src/client/index.tsx"],
Expand Down
Loading