From 1fda17618fecdcd6ba479284ac82a4082e2f8d45 Mon Sep 17 00:00:00 2001 From: daishi Date: Sat, 14 Sep 2024 14:33:12 +0900 Subject: [PATCH 1/6] refactor(build): vercel serve and constants --- packages/waku/src/lib/builder/build.ts | 3 +- packages/waku/src/lib/builder/serve-vercel.ts | 28 ------ packages/waku/src/lib/config.ts | 2 - packages/waku/src/lib/constants.ts | 3 + .../src/lib/middleware/dev-server-impl.ts | 8 +- .../plugins/vite-plugin-deploy-aws-lambda.ts | 6 +- .../plugins/vite-plugin-deploy-cloudflare.ts | 6 +- .../lib/plugins/vite-plugin-deploy-deno.ts | 6 +- .../lib/plugins/vite-plugin-deploy-netlify.ts | 6 +- .../plugins/vite-plugin-deploy-partykit.ts | 6 +- .../lib/plugins/vite-plugin-deploy-vercel.ts | 89 +++++++++---------- .../lib/plugins/vite-plugin-nonjs-resolve.ts | 2 +- .../lib/plugins/vite-plugin-rsc-analyze.ts | 2 +- .../lib/plugins/vite-plugin-rsc-delegate.ts | 2 +- .../lib/plugins/vite-plugin-rsc-entries.ts | 5 +- .../src/lib/plugins/vite-plugin-rsc-index.ts | 4 +- .../lib/plugins/vite-plugin-rsc-managed.ts | 5 +- .../lib/plugins/vite-plugin-rsc-transform.ts | 2 +- .../waku/src/lib/renderers/html-renderer.ts | 2 +- packages/waku/src/router/fs-router.ts | 2 +- 20 files changed, 64 insertions(+), 125 deletions(-) delete mode 100644 packages/waku/src/lib/builder/serve-vercel.ts create mode 100644 packages/waku/src/lib/constants.ts diff --git a/packages/waku/src/lib/builder/build.ts b/packages/waku/src/lib/builder/build.ts index 6f096be3f..780acd34f 100644 --- a/packages/waku/src/lib/builder/build.ts +++ b/packages/waku/src/lib/builder/build.ts @@ -9,7 +9,8 @@ import type { Config } from '../../config.js'; import { unstable_getPlatformObject } from '../../server.js'; import type { BuildConfig, EntriesPrd } from '../../server.js'; import type { ResolvedConfig } from '../config.js'; -import { resolveConfig, EXTENSIONS } from '../config.js'; +import { resolveConfig } from '../config.js'; +import { EXTENSIONS } from '../constants.js'; import type { PathSpec } from '../utils/path.js'; import { decodeFilePathFromAbsolute, diff --git a/packages/waku/src/lib/builder/serve-vercel.ts b/packages/waku/src/lib/builder/serve-vercel.ts deleted file mode 100644 index 58ebb1f6b..000000000 --- a/packages/waku/src/lib/builder/serve-vercel.ts +++ /dev/null @@ -1,28 +0,0 @@ -import path from 'node:path'; -import { existsSync, readFileSync } from 'node:fs'; -import type { IncomingMessage, ServerResponse } from 'node:http'; -import { Hono } from 'hono'; -import { getRequestListener } from '@hono/node-server'; - -import { runner } from '../hono/runner.js'; - -const distDir = import.meta.env.WAKU_CONFIG_DIST_DIR!; -const publicDir = import.meta.env.WAKU_CONFIG_PUBLIC_DIR!; -const loadEntries = () => import(import.meta.env.WAKU_ENTRIES_FILE!); -const env: Record = process.env as any; - -const app = new Hono(); -app.use('*', runner({ cmd: 'start', loadEntries, env })); -app.notFound((c) => { - // FIXME better implementation using node stream? - const file = path.join(distDir, publicDir, '404.html'); - if (existsSync(file)) { - return c.html(readFileSync(file, 'utf8'), 404); - } - return c.text('404 Not Found', 404); -}); -const requestListener = getRequestListener(app.fetch); - -export default function handler(req: IncomingMessage, res: ServerResponse) { - return requestListener(req, res); -} diff --git a/packages/waku/src/lib/config.ts b/packages/waku/src/lib/config.ts index c0d0b2e11..aca16c503 100644 --- a/packages/waku/src/lib/config.ts +++ b/packages/waku/src/lib/config.ts @@ -29,5 +29,3 @@ export async function resolveConfig(config: Config) { }; return resolvedConfig; } - -export const EXTENSIONS = ['.js', '.ts', '.tsx', '.jsx', '.mjs', '.cjs']; diff --git a/packages/waku/src/lib/constants.ts b/packages/waku/src/lib/constants.ts new file mode 100644 index 000000000..69eeeb837 --- /dev/null +++ b/packages/waku/src/lib/constants.ts @@ -0,0 +1,3 @@ +export const EXTENSIONS = ['.js', '.ts', '.tsx', '.jsx', '.mjs', '.cjs']; +export const SRC_MAIN = 'main'; +export const SRC_ENTRIES = 'entries'; diff --git a/packages/waku/src/lib/middleware/dev-server-impl.ts b/packages/waku/src/lib/middleware/dev-server-impl.ts index 489c8ca75..3020e0648 100644 --- a/packages/waku/src/lib/middleware/dev-server-impl.ts +++ b/packages/waku/src/lib/middleware/dev-server-impl.ts @@ -6,6 +6,7 @@ import viteReact from '@vitejs/plugin-react'; import type { EntriesDev } from '../../server.js'; import { resolveConfig } from '../config.js'; +import { SRC_MAIN, SRC_ENTRIES } from '../constants.js'; import { joinPath, fileURLToFilePath, @@ -22,12 +23,7 @@ import { rscHmrPlugin, hotUpdate } from '../plugins/vite-plugin-rsc-hmr.js'; import type { HotUpdatePayload } from '../plugins/vite-plugin-rsc-hmr.js'; import { rscEnvPlugin } from '../plugins/vite-plugin-rsc-env.js'; import { rscPrivatePlugin } from '../plugins/vite-plugin-rsc-private.js'; -import { - // HACK depending on these constants is not ideal - SRC_ENTRIES, - SRC_MAIN, - rscManagedPlugin, -} from '../plugins/vite-plugin-rsc-managed.js'; +import { rscManagedPlugin } from '../plugins/vite-plugin-rsc-managed.js'; import { rscDelegatePlugin } from '../plugins/vite-plugin-rsc-delegate.js'; import { mergeUserViteConfig } from '../utils/merge-vite-config.js'; import type { ClonableModuleNode, Middleware } from './types.js'; diff --git a/packages/waku/src/lib/plugins/vite-plugin-deploy-aws-lambda.ts b/packages/waku/src/lib/plugins/vite-plugin-deploy-aws-lambda.ts index 34ab89a84..4b75ef3be 100644 --- a/packages/waku/src/lib/plugins/vite-plugin-deploy-aws-lambda.ts +++ b/packages/waku/src/lib/plugins/vite-plugin-deploy-aws-lambda.ts @@ -3,12 +3,8 @@ import { existsSync, writeFileSync } from 'node:fs'; import { normalizePath } from 'vite'; import type { Plugin } from 'vite'; -// HACK: Depending on a different plugin isn't ideal. -// Maybe we could put in vite config object? -import { SRC_ENTRIES } from './vite-plugin-rsc-managed.js'; - import { unstable_getPlatformObject } from '../../server.js'; -import { EXTENSIONS } from '../config.js'; +import { EXTENSIONS, SRC_ENTRIES } from '../constants.js'; import { decodeFilePathFromAbsolute, extname, diff --git a/packages/waku/src/lib/plugins/vite-plugin-deploy-cloudflare.ts b/packages/waku/src/lib/plugins/vite-plugin-deploy-cloudflare.ts index 57961ae69..d8133bb14 100644 --- a/packages/waku/src/lib/plugins/vite-plugin-deploy-cloudflare.ts +++ b/packages/waku/src/lib/plugins/vite-plugin-deploy-cloudflare.ts @@ -10,12 +10,8 @@ import { import { normalizePath } from 'vite'; import type { Plugin } from 'vite'; -// HACK: Depending on a different plugin isn't ideal. -// Maybe we could put in vite config object? -import { SRC_ENTRIES } from './vite-plugin-rsc-managed.js'; - import { unstable_getPlatformObject } from '../../server.js'; -import { EXTENSIONS } from '../config.js'; +import { EXTENSIONS, SRC_ENTRIES } from '../constants.js'; import { decodeFilePathFromAbsolute, extname, diff --git a/packages/waku/src/lib/plugins/vite-plugin-deploy-deno.ts b/packages/waku/src/lib/plugins/vite-plugin-deploy-deno.ts index 3f866a19a..620cdecc2 100644 --- a/packages/waku/src/lib/plugins/vite-plugin-deploy-deno.ts +++ b/packages/waku/src/lib/plugins/vite-plugin-deploy-deno.ts @@ -3,12 +3,8 @@ import { existsSync } from 'node:fs'; import { normalizePath } from 'vite'; import type { Plugin } from 'vite'; -// HACK: Depending on a different plugin isn't ideal. -// Maybe we could put in vite config object? -import { SRC_ENTRIES } from './vite-plugin-rsc-managed.js'; - import { unstable_getPlatformObject } from '../../server.js'; -import { EXTENSIONS } from '../config.js'; +import { EXTENSIONS, SRC_ENTRIES } from '../constants.js'; import { decodeFilePathFromAbsolute, extname, diff --git a/packages/waku/src/lib/plugins/vite-plugin-deploy-netlify.ts b/packages/waku/src/lib/plugins/vite-plugin-deploy-netlify.ts index c4a92e003..311c340bb 100644 --- a/packages/waku/src/lib/plugins/vite-plugin-deploy-netlify.ts +++ b/packages/waku/src/lib/plugins/vite-plugin-deploy-netlify.ts @@ -3,12 +3,8 @@ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs'; import { normalizePath } from 'vite'; import type { Plugin } from 'vite'; -// HACK: Depending on a different plugin isn't ideal. -// Maybe we could put in vite config object? -import { SRC_ENTRIES } from './vite-plugin-rsc-managed.js'; - import { unstable_getPlatformObject } from '../../server.js'; -import { EXTENSIONS } from '../config.js'; +import { EXTENSIONS, SRC_ENTRIES } from '../constants.js'; import { decodeFilePathFromAbsolute, extname, diff --git a/packages/waku/src/lib/plugins/vite-plugin-deploy-partykit.ts b/packages/waku/src/lib/plugins/vite-plugin-deploy-partykit.ts index e9961762c..2000fe835 100644 --- a/packages/waku/src/lib/plugins/vite-plugin-deploy-partykit.ts +++ b/packages/waku/src/lib/plugins/vite-plugin-deploy-partykit.ts @@ -3,12 +3,8 @@ import { existsSync, writeFileSync } from 'node:fs'; import { normalizePath } from 'vite'; import type { Plugin } from 'vite'; -// HACK: Depending on a different plugin isn't ideal. -// Maybe we could put in vite config object? -import { SRC_ENTRIES } from './vite-plugin-rsc-managed.js'; - import { unstable_getPlatformObject } from '../../server.js'; -import { EXTENSIONS } from '../config.js'; +import { EXTENSIONS, SRC_ENTRIES } from '../constants.js'; import { decodeFilePathFromAbsolute, extname, diff --git a/packages/waku/src/lib/plugins/vite-plugin-deploy-vercel.ts b/packages/waku/src/lib/plugins/vite-plugin-deploy-vercel.ts index 4f0bfd1dc..e0377cee7 100644 --- a/packages/waku/src/lib/plugins/vite-plugin-deploy-vercel.ts +++ b/packages/waku/src/lib/plugins/vite-plugin-deploy-vercel.ts @@ -1,35 +1,10 @@ import path from 'node:path'; import { cpSync, existsSync, mkdirSync, writeFileSync } from 'node:fs'; -import { normalizePath } from 'vite'; import type { Plugin } from 'vite'; -// HACK: Depending on a different plugin isn't ideal. -// Maybe we could put in vite config object? -import { SRC_ENTRIES } from './vite-plugin-rsc-managed.js'; - import { unstable_getPlatformObject } from '../../server.js'; -import { EXTENSIONS } from '../config.js'; -import { - decodeFilePathFromAbsolute, - extname, - fileURLToFilePath, - joinPath, -} from '../utils/path.js'; -import { DIST_SERVE_JS, DIST_PUBLIC } from '../builder/constants.js'; - -const resolveFileName = (fname: string) => { - for (const ext of EXTENSIONS) { - const resolvedName = fname.slice(0, -extname(fname).length) + ext; - if (existsSync(resolvedName)) { - return resolvedName; - } - } - return fname; // returning the default one -}; - -const srcServeFile = decodeFilePathFromAbsolute( - joinPath(fileURLToFilePath(import.meta.url), '../../builder/serve-vercel.js'), -); +import { SRC_ENTRIES } from '../constants.js'; +import { DIST_PUBLIC } from '../builder/constants.js'; export function deployVercelPlugin(opts: { srcDir: string; @@ -40,6 +15,35 @@ export function deployVercelPlugin(opts: { }): Plugin { const platformObject = unstable_getPlatformObject(); let rootDir: string; + const serveJs = `${opts.srcDir}/serve-vercel.js`; + const serveJsContent = ` +import path from 'node:path'; +import { existsSync, readFileSync } from 'node:fs'; +import { Hono } from 'hono'; +import { getRequestListener } from '@hono/node-server'; + +import { runner } from '../hono/runner.js'; + +const distDir = '${opts.distDir}'; +const publicDir = '${DIST_PUBLIC}'; +const loadEntries = () => import('./${SRC_ENTRIES}'); + +const app = new Hono(); +app.use('*', runner({ cmd: 'start', loadEntries, env: process.env })); +app.notFound((c) => { + // FIXME better implementation using node stream? + const file = path.join(distDir, publicDir, '404.html'); + if (existsSync(file)) { + return c.html(readFileSync(file, 'utf8'), 404); + } + return c.text('404 Not Found', 404); +}); +const requestListener = getRequestListener(app.fetch); + +export default function handler(req, res) { + return requestListener(req, res); +} +`; return { name: 'deploy-vercel-plugin', config(viteConfig) { @@ -50,27 +54,20 @@ export function deployVercelPlugin(opts: { ) { return; } - - // FIXME This seems too hacky (The use of viteConfig.root, '.', path.resolve and resolveFileName) - const entriesFile = normalizePath( - resolveFileName( - path.resolve( - viteConfig.root || '.', - opts.srcDir, - SRC_ENTRIES + '.jsx', - ), - ), - ); const { input } = viteConfig.build?.rollupOptions ?? {}; if (input && !(typeof input === 'string') && !(input instanceof Array)) { - input[DIST_SERVE_JS.replace(/\.js$/, '')] = srcServeFile; + input[serveJs.replace(/\.js$/, '')] = serveJs; + } + }, + resolveId(source) { + if (source === serveJs) { + return source; + } + }, + load(id) { + if (id === serveJs) { + return serveJsContent; } - viteConfig.define = { - ...viteConfig.define, - 'import.meta.env.WAKU_ENTRIES_FILE': JSON.stringify(entriesFile), - 'import.meta.env.WAKU_CONFIG_DIST_DIR': JSON.stringify(opts.distDir), - 'import.meta.env.WAKU_CONFIG_PUBLIC_DIR': JSON.stringify(DIST_PUBLIC), - }; }, configResolved(config) { rootDir = config.root; @@ -112,7 +109,7 @@ export function deployVercelPlugin(opts: { } const vcConfigJson = { runtime: 'nodejs20.x', - handler: `${opts.distDir}/${DIST_SERVE_JS}`, + handler: `${opts.distDir}/${serveJs}`, launcherType: 'Nodejs', }; writeFileSync( diff --git a/packages/waku/src/lib/plugins/vite-plugin-nonjs-resolve.ts b/packages/waku/src/lib/plugins/vite-plugin-nonjs-resolve.ts index 205e59116..20212f511 100644 --- a/packages/waku/src/lib/plugins/vite-plugin-nonjs-resolve.ts +++ b/packages/waku/src/lib/plugins/vite-plugin-nonjs-resolve.ts @@ -1,6 +1,6 @@ import type { Plugin } from 'vite'; -import { EXTENSIONS } from '../config.js'; +import { EXTENSIONS } from '../constants.js'; import { extname } from '../utils/path.js'; export function nonjsResolvePlugin(): Plugin { diff --git a/packages/waku/src/lib/plugins/vite-plugin-rsc-analyze.ts b/packages/waku/src/lib/plugins/vite-plugin-rsc-analyze.ts index 89d24fd35..1c537b971 100644 --- a/packages/waku/src/lib/plugins/vite-plugin-rsc-analyze.ts +++ b/packages/waku/src/lib/plugins/vite-plugin-rsc-analyze.ts @@ -1,7 +1,7 @@ import type { Plugin } from 'vite'; import * as swc from '@swc/core'; -import { EXTENSIONS } from '../config.js'; +import { EXTENSIONS } from '../constants.js'; import { extname } from '../utils/path.js'; import { parseOpts } from '../utils/swc.js'; // HACK: Is it common to depend on another plugin like this? diff --git a/packages/waku/src/lib/plugins/vite-plugin-rsc-delegate.ts b/packages/waku/src/lib/plugins/vite-plugin-rsc-delegate.ts index a253d3f7b..b7ec3435c 100644 --- a/packages/waku/src/lib/plugins/vite-plugin-rsc-delegate.ts +++ b/packages/waku/src/lib/plugins/vite-plugin-rsc-delegate.ts @@ -1,7 +1,7 @@ import type { Plugin, ViteDevServer } from 'vite'; import * as swc from '@swc/core'; -import { EXTENSIONS } from '../config.js'; +import { EXTENSIONS } from '../constants.js'; import { extname } from '../utils/path.js'; import { parseOpts } from '../utils/swc.js'; import type { HotUpdatePayload } from './vite-plugin-rsc-hmr.js'; diff --git a/packages/waku/src/lib/plugins/vite-plugin-rsc-entries.ts b/packages/waku/src/lib/plugins/vite-plugin-rsc-entries.ts index 977c2063c..d2b98e6c6 100644 --- a/packages/waku/src/lib/plugins/vite-plugin-rsc-entries.ts +++ b/packages/waku/src/lib/plugins/vite-plugin-rsc-entries.ts @@ -3,10 +3,7 @@ import path from 'node:path'; import { normalizePath } from 'vite'; import type { Plugin } from 'vite'; -// HACK Depending on a different plugin isn't ideal. -// Maybe we could put in vite config object? -import { SRC_ENTRIES } from './vite-plugin-rsc-managed.js'; - +import { SRC_ENTRIES } from '../constants.js'; import { extname, joinPath } from '../utils/path.js'; const stripExt = (fname: string) => { diff --git a/packages/waku/src/lib/plugins/vite-plugin-rsc-index.ts b/packages/waku/src/lib/plugins/vite-plugin-rsc-index.ts index 842746fc5..46b20feb3 100644 --- a/packages/waku/src/lib/plugins/vite-plugin-rsc-index.ts +++ b/packages/waku/src/lib/plugins/vite-plugin-rsc-index.ts @@ -1,8 +1,6 @@ import type { Plugin } from 'vite'; -// HACK Depending on a different plugin isn't ideal. -// Maybe we could put in vite config object? -import { SRC_MAIN } from './vite-plugin-rsc-managed.js'; +import { SRC_MAIN } from '../constants.js'; export const DEFAULT_HTML_HEAD = ` diff --git a/packages/waku/src/lib/plugins/vite-plugin-rsc-managed.ts b/packages/waku/src/lib/plugins/vite-plugin-rsc-managed.ts index 86b02e220..0deb959c4 100644 --- a/packages/waku/src/lib/plugins/vite-plugin-rsc-managed.ts +++ b/packages/waku/src/lib/plugins/vite-plugin-rsc-managed.ts @@ -1,11 +1,8 @@ import type { Plugin } from 'vite'; -import { EXTENSIONS } from '../config.js'; +import { EXTENSIONS, SRC_MAIN, SRC_ENTRIES } from '../constants.js'; import { extname, joinPath } from '../utils/path.js'; -export const SRC_MAIN = 'main'; -export const SRC_ENTRIES = 'entries'; - const stripExt = (fname: string) => { const ext = extname(fname); return ext ? fname.slice(0, -ext.length) : fname; diff --git a/packages/waku/src/lib/plugins/vite-plugin-rsc-transform.ts b/packages/waku/src/lib/plugins/vite-plugin-rsc-transform.ts index 9584f1ad6..0f6705330 100644 --- a/packages/waku/src/lib/plugins/vite-plugin-rsc-transform.ts +++ b/packages/waku/src/lib/plugins/vite-plugin-rsc-transform.ts @@ -1,7 +1,7 @@ import type { Plugin } from 'vite'; import * as swc from '@swc/core'; -import { EXTENSIONS } from '../config.js'; +import { EXTENSIONS } from '../constants.js'; import { extname } from '../utils/path.js'; import { parseOpts } from '../utils/swc.js'; diff --git a/packages/waku/src/lib/renderers/html-renderer.ts b/packages/waku/src/lib/renderers/html-renderer.ts index 8e87768cb..3f9ffa001 100644 --- a/packages/waku/src/lib/renderers/html-renderer.ts +++ b/packages/waku/src/lib/renderers/html-renderer.ts @@ -6,6 +6,7 @@ import { injectRSCPayload } from 'rsc-html-stream/server'; import type * as WakuClientType from '../../client.js'; import type { EntriesPrd } from '../../server.js'; +import { SRC_MAIN } from '../constants.js'; import type { ResolvedConfig } from '../config.js'; import { concatUint8Arrays } from '../utils/stream.js'; import { @@ -17,7 +18,6 @@ import { import { encodeInput, hasStatusCode } from './utils.js'; // HACK depending on these constants is not ideal -import { SRC_MAIN } from '../plugins/vite-plugin-rsc-managed.js'; import { DEFAULT_HTML_HEAD } from '../plugins/vite-plugin-rsc-index.js'; export const CLIENT_MODULE_MAP = { diff --git a/packages/waku/src/router/fs-router.ts b/packages/waku/src/router/fs-router.ts index 23d49cb71..7435c2d9c 100644 --- a/packages/waku/src/router/fs-router.ts +++ b/packages/waku/src/router/fs-router.ts @@ -1,7 +1,7 @@ import { unstable_getPlatformObject } from '../server.js'; import { createPages } from './create-pages.js'; -import { EXTENSIONS } from '../lib/config.js'; +import { EXTENSIONS } from '../lib/constants.js'; const DO_NOT_BUNDLE = ''; From c75ae5babec50bb44b98b87a2983b48ad025a7a6 Mon Sep 17 00:00:00 2001 From: daishi Date: Sat, 14 Sep 2024 15:40:43 +0900 Subject: [PATCH 2/6] fix: deploy vercel plugin --- packages/waku/package.json | 4 ++ packages/waku/src/hono.ts | 7 +++ packages/waku/src/internals.ts | 24 +++++++- .../lib/plugins/vite-plugin-deploy-vercel.ts | 59 ++++++++++--------- 4 files changed, 63 insertions(+), 31 deletions(-) create mode 100644 packages/waku/src/hono.ts diff --git a/packages/waku/package.json b/packages/waku/package.json index 52457b930..2b8217335 100644 --- a/packages/waku/package.json +++ b/packages/waku/package.json @@ -34,6 +34,10 @@ "types": "./dist/internals.d.ts", "default": "./dist/internals.js" }, + "./hono": { + "types": "./dist/hono.d.ts", + "default": "./dist/hono.js" + }, "./client": { "types": "./dist/client.d.ts", "default": "./dist/client.js" diff --git a/packages/waku/src/hono.ts b/packages/waku/src/hono.ts new file mode 100644 index 000000000..f2c9e7626 --- /dev/null +++ b/packages/waku/src/hono.ts @@ -0,0 +1,7 @@ +// These exports are for internal use only and subject to change without notice. + +export { runner } from './lib/hono/runner.js'; + +export { Hono } from 'hono'; +export { getRequestListener } from '@hono/node-server'; +export { serveStatic } from '@hono/node-server/serve-static'; diff --git a/packages/waku/src/internals.ts b/packages/waku/src/internals.ts index 20e2bfdc8..c9b8d4bbd 100644 --- a/packages/waku/src/internals.ts +++ b/packages/waku/src/internals.ts @@ -1,2 +1,22 @@ -export { runner as unstable_runner } from './lib/hono/runner.js'; -export { build as unstable_build } from './lib/builder/build.js'; +// These exports are for internal use only and subject to change without notice. + +export { build } from './lib/builder/build.js'; + +export { deployAwsLambdaPlugin } from './lib/plugins/vite-plugin-deploy-aws-lambda.js'; +export { deployCloudflarePlugin } from './lib/plugins/vite-plugin-deploy-cloudflare.js'; +export { deployDenoPlugin } from './lib/plugins/vite-plugin-deploy-deno.js'; +export { deployNetlifyPlugin } from './lib/plugins/vite-plugin-deploy-netlify.js'; +export { deployPartykitPlugin } from './lib/plugins/vite-plugin-deploy-partykit.js'; +export { deployVercelPlugin } from './lib/plugins/vite-plugin-deploy-vercel.js'; +export { devCommonJsPlugin } from './lib/plugins/vite-plugin-dev-commonjs.js'; +export { nonjsResolvePlugin } from './lib/plugins/vite-plugin-nonjs-resolve.js'; +export { rscAnalyzePlugin } from './lib/plugins/vite-plugin-rsc-analyze.js'; +export { rscDelegatePlugin } from './lib/plugins/vite-plugin-rsc-delegate.js'; +export { rscEntriesPlugin } from './lib/plugins/vite-plugin-rsc-entries.js'; +export { rscEnvPlugin } from './lib/plugins/vite-plugin-rsc-env.js'; +export { rscHmrPlugin } from './lib/plugins/vite-plugin-rsc-hmr.js'; +export { rscIndexPlugin } from './lib/plugins/vite-plugin-rsc-index.js'; +export { rscManagedPlugin } from './lib/plugins/vite-plugin-rsc-managed.js'; +export { rscPrivatePlugin } from './lib/plugins/vite-plugin-rsc-private.js'; +export { rscRsdwPlugin } from './lib/plugins/vite-plugin-rsc-rsdw.js'; +export { rscTransformPlugin } from './lib/plugins/vite-plugin-rsc-transform.js'; diff --git a/packages/waku/src/lib/plugins/vite-plugin-deploy-vercel.ts b/packages/waku/src/lib/plugins/vite-plugin-deploy-vercel.ts index e0377cee7..e7444d37e 100644 --- a/packages/waku/src/lib/plugins/vite-plugin-deploy-vercel.ts +++ b/packages/waku/src/lib/plugins/vite-plugin-deploy-vercel.ts @@ -6,27 +6,18 @@ import { unstable_getPlatformObject } from '../../server.js'; import { SRC_ENTRIES } from '../constants.js'; import { DIST_PUBLIC } from '../builder/constants.js'; -export function deployVercelPlugin(opts: { - srcDir: string; - distDir: string; - basePath: string; - rscPath: string; - privateDir: string; -}): Plugin { - const platformObject = unstable_getPlatformObject(); - let rootDir: string; - const serveJs = `${opts.srcDir}/serve-vercel.js`; - const serveJsContent = ` +const getServeJsContent = ( + distDir: string, + distPublic: string, + srcEntriesFile: string, +) => ` import path from 'node:path'; import { existsSync, readFileSync } from 'node:fs'; -import { Hono } from 'hono'; -import { getRequestListener } from '@hono/node-server'; +import { runner, Hono, getRequestListener } from 'waku/hono'; -import { runner } from '../hono/runner.js'; - -const distDir = '${opts.distDir}'; -const publicDir = '${DIST_PUBLIC}'; -const loadEntries = () => import('./${SRC_ENTRIES}'); +const distDir = '${distDir}'; +const publicDir = '${distPublic}'; +const loadEntries = () => import('${srcEntriesFile}'); const app = new Hono(); app.use('*', runner({ cmd: 'start', loadEntries, env: process.env })); @@ -38,12 +29,21 @@ app.notFound((c) => { } return c.text('404 Not Found', 404); }); -const requestListener = getRequestListener(app.fetch); -export default function handler(req, res) { - return requestListener(req, res); -} +export default getRequestListener(app.fetch); `; + +export function deployVercelPlugin(opts: { + srcDir: string; + distDir: string; + basePath: string; + rscPath: string; + privateDir: string; +}): Plugin { + const platformObject = unstable_getPlatformObject(); + let rootDir: string; + let entriesFile: string; + const serveJs = 'serve-vercel.js'; return { name: 'deploy-vercel-plugin', config(viteConfig) { @@ -56,22 +56,23 @@ export default function handler(req, res) { } const { input } = viteConfig.build?.rollupOptions ?? {}; if (input && !(typeof input === 'string') && !(input instanceof Array)) { - input[serveJs.replace(/\.js$/, '')] = serveJs; + input[serveJs.replace(/\.js$/, '')] = `${opts.srcDir}/${serveJs}`; } }, + configResolved(config) { + rootDir = config.root; + entriesFile = `${rootDir}/${opts.srcDir}/${SRC_ENTRIES}`; + }, resolveId(source) { - if (source === serveJs) { + if (source === `${opts.srcDir}/${serveJs}`) { return source; } }, load(id) { - if (id === serveJs) { - return serveJsContent; + if (id === `${opts.srcDir}/${serveJs}`) { + return getServeJsContent(opts.distDir, DIST_PUBLIC, entriesFile); } }, - configResolved(config) { - rootDir = config.root; - }, closeBundle() { const { deploy, unstable_phase } = platformObject.buildOptions || {}; if ( From ebee7bf27eddfc0bd8d4f9ca7e222e41945da51f Mon Sep 17 00:00:00 2001 From: daishi Date: Sat, 14 Sep 2024 15:58:56 +0900 Subject: [PATCH 3/6] testing vercel serverless --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 79a538d46..e30870e4a 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,7 @@ "examples:prd:24_nesting": "NAME=24_nesting pnpm run examples:prd", "website:dev": "(cd packages/website && pnpm run dev)", "website:build": "cd packages/website && pnpm run build", - "website:vercel": "pnpm run compile && pnpm run website:build --with-vercel-static && mv packages/website/.vercel/output .vercel/", + "website:vercel": "pnpm run compile && pnpm run website:build && mv packages/website/.vercel/output .vercel/", "website:prd": "pnpm run website:build && (cd packages/website && pnpm start)" }, "prettier": { From 7a57da8607782d6becd32471d53bb43789dbec7c Mon Sep 17 00:00:00 2001 From: daishi Date: Sat, 14 Sep 2024 16:19:35 +0900 Subject: [PATCH 4/6] Revert "testing vercel serverless" This reverts commit ebee7bf27eddfc0bd8d4f9ca7e222e41945da51f. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e30870e4a..79a538d46 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,7 @@ "examples:prd:24_nesting": "NAME=24_nesting pnpm run examples:prd", "website:dev": "(cd packages/website && pnpm run dev)", "website:build": "cd packages/website && pnpm run build", - "website:vercel": "pnpm run compile && pnpm run website:build && mv packages/website/.vercel/output .vercel/", + "website:vercel": "pnpm run compile && pnpm run website:build --with-vercel-static && mv packages/website/.vercel/output .vercel/", "website:prd": "pnpm run website:build && (cd packages/website && pnpm start)" }, "prettier": { From a49ef00d3144d2932c02b8de1ad39f3f3d20922d Mon Sep 17 00:00:00 2001 From: daishi Date: Sat, 14 Sep 2024 17:18:20 +0900 Subject: [PATCH 5/6] add unstable prefix explicitly --- packages/waku/package.json | 12 ++++++------ .../src/lib/plugins/vite-plugin-deploy-vercel.ts | 2 +- packages/waku/src/{hono.ts => unstable_hono.ts} | 0 .../waku/src/{internals.ts => unstable_internals.ts} | 0 4 files changed, 7 insertions(+), 7 deletions(-) rename packages/waku/src/{hono.ts => unstable_hono.ts} (100%) rename packages/waku/src/{internals.ts => unstable_internals.ts} (100%) diff --git a/packages/waku/package.json b/packages/waku/package.json index 2b8217335..68591b582 100644 --- a/packages/waku/package.json +++ b/packages/waku/package.json @@ -30,13 +30,13 @@ "types": "./dist/middleware/*.d.ts", "default": "./dist/middleware/*.js" }, - "./internals": { - "types": "./dist/internals.d.ts", - "default": "./dist/internals.js" + "./unstable_internals": { + "types": "./dist/unstable_internals.d.ts", + "default": "./dist/unstable_internals.js" }, - "./hono": { - "types": "./dist/hono.d.ts", - "default": "./dist/hono.js" + "./unstable_hono": { + "types": "./dist/unstable_hono.d.ts", + "default": "./dist/unstable_hono.js" }, "./client": { "types": "./dist/client.d.ts", diff --git a/packages/waku/src/lib/plugins/vite-plugin-deploy-vercel.ts b/packages/waku/src/lib/plugins/vite-plugin-deploy-vercel.ts index e7444d37e..6de7a4d8e 100644 --- a/packages/waku/src/lib/plugins/vite-plugin-deploy-vercel.ts +++ b/packages/waku/src/lib/plugins/vite-plugin-deploy-vercel.ts @@ -13,7 +13,7 @@ const getServeJsContent = ( ) => ` import path from 'node:path'; import { existsSync, readFileSync } from 'node:fs'; -import { runner, Hono, getRequestListener } from 'waku/hono'; +import { runner, Hono, getRequestListener } from 'waku/unstable_hono'; const distDir = '${distDir}'; const publicDir = '${distPublic}'; diff --git a/packages/waku/src/hono.ts b/packages/waku/src/unstable_hono.ts similarity index 100% rename from packages/waku/src/hono.ts rename to packages/waku/src/unstable_hono.ts diff --git a/packages/waku/src/internals.ts b/packages/waku/src/unstable_internals.ts similarity index 100% rename from packages/waku/src/internals.ts rename to packages/waku/src/unstable_internals.ts From acb7a6c8b9a3d75222f75019d62d9e57edaca92f Mon Sep 17 00:00:00 2001 From: daishi Date: Sat, 14 Sep 2024 17:37:44 +0900 Subject: [PATCH 6/6] small refactor --- .../waku/src/lib/plugins/vite-plugin-deploy-vercel.ts | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/packages/waku/src/lib/plugins/vite-plugin-deploy-vercel.ts b/packages/waku/src/lib/plugins/vite-plugin-deploy-vercel.ts index 6de7a4d8e..5aa843332 100644 --- a/packages/waku/src/lib/plugins/vite-plugin-deploy-vercel.ts +++ b/packages/waku/src/lib/plugins/vite-plugin-deploy-vercel.ts @@ -6,6 +6,8 @@ import { unstable_getPlatformObject } from '../../server.js'; import { SRC_ENTRIES } from '../constants.js'; import { DIST_PUBLIC } from '../builder/constants.js'; +const SERVE_JS = 'serve-vercel.js'; + const getServeJsContent = ( distDir: string, distPublic: string, @@ -43,7 +45,6 @@ export function deployVercelPlugin(opts: { const platformObject = unstable_getPlatformObject(); let rootDir: string; let entriesFile: string; - const serveJs = 'serve-vercel.js'; return { name: 'deploy-vercel-plugin', config(viteConfig) { @@ -56,7 +57,7 @@ export function deployVercelPlugin(opts: { } const { input } = viteConfig.build?.rollupOptions ?? {}; if (input && !(typeof input === 'string') && !(input instanceof Array)) { - input[serveJs.replace(/\.js$/, '')] = `${opts.srcDir}/${serveJs}`; + input[SERVE_JS.replace(/\.js$/, '')] = `${opts.srcDir}/${SERVE_JS}`; } }, configResolved(config) { @@ -64,12 +65,12 @@ export function deployVercelPlugin(opts: { entriesFile = `${rootDir}/${opts.srcDir}/${SRC_ENTRIES}`; }, resolveId(source) { - if (source === `${opts.srcDir}/${serveJs}`) { + if (source === `${opts.srcDir}/${SERVE_JS}`) { return source; } }, load(id) { - if (id === `${opts.srcDir}/${serveJs}`) { + if (id === `${opts.srcDir}/${SERVE_JS}`) { return getServeJsContent(opts.distDir, DIST_PUBLIC, entriesFile); } }, @@ -110,7 +111,7 @@ export function deployVercelPlugin(opts: { } const vcConfigJson = { runtime: 'nodejs20.x', - handler: `${opts.distDir}/${serveJs}`, + handler: `${opts.distDir}/${SERVE_JS}`, launcherType: 'Nodejs', }; writeFileSync(