diff --git a/build/prepare-sites-build.mjs b/build/prepare-sites-build.mjs new file mode 100644 index 0000000..2863e3c --- /dev/null +++ b/build/prepare-sites-build.mjs @@ -0,0 +1,11 @@ +import { copyFile, mkdir } from 'node:fs/promises'; +import { resolve } from 'node:path'; + +const root = process.cwd(); +const serverDirectory = resolve(root, 'dist', 'server'); + +await mkdir(serverDirectory, { recursive: true }); +await copyFile( + resolve(root, 'worker', 'index.js'), + resolve(serverDirectory, 'index.js'), +); diff --git a/package.json b/package.json index e7d1f96..c0424dd 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "type": "module", "scripts": { "dev": "vite", - "build": "tsc -b && vite build", + "build": "tsc -b && vite build && node build/prepare-sites-build.mjs", "lint": "eslint .", "preview": "vite preview" }, diff --git a/worker/index.js b/worker/index.js new file mode 100644 index 0000000..a163804 --- /dev/null +++ b/worker/index.js @@ -0,0 +1,18 @@ +const worker = { + async fetch(request, env) { + const response = await env.ASSETS.fetch(request); + + if ( + response.status !== 404 || + request.method !== 'GET' || + !request.headers.get('accept')?.includes('text/html') + ) { + return response; + } + + const indexUrl = new URL('/index.html', request.url); + return env.ASSETS.fetch(new Request(indexUrl, request)); + }, +}; + +export default worker;