diff --git a/.changeset/selfish-owls-own.md b/.changeset/selfish-owls-own.md new file mode 100644 index 000000000000..33cf8b42b73a --- /dev/null +++ b/.changeset/selfish-owls-own.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/adapter-vercel': patch +--- + +Fix mixed usage of CJS and ESM diff --git a/packages/adapter-vercel/index.js b/packages/adapter-vercel/index.js index 302874b55049..12edd9073908 100644 --- a/packages/adapter-vercel/index.js +++ b/packages/adapter-vercel/index.js @@ -1,4 +1,4 @@ -import { writeFileSync, mkdirSync } from 'fs'; +import { writeFileSync, mkdirSync, renameSync } from 'fs'; import { dirname, resolve, join } from 'path'; import { fileURLToPath } from 'url'; import { copy } from '@sveltejs/app-utils/files'; @@ -18,6 +18,7 @@ export default async function adapter(builder) { builder.log.minor('Building lambda...'); builder.copy_server_files(server_directory); + renameSync(join(server_directory, 'app.js'), join(server_directory, 'app.mjs')); copy(join(__dirname, 'files'), lambda_directory); @@ -27,7 +28,11 @@ export default async function adapter(builder) { }); builder.log.minor('Writing routes...'); - mkdirSync(config_directory); + try { + mkdirSync(config_directory); + } catch { + // directory already exists + } writeFileSync( join(config_directory, 'routes.json'), JSON.stringify([ diff --git a/packages/adapter-vercel/rollup.config.js b/packages/adapter-vercel/rollup.config.js index 1dbb1c6f1a2a..656e98946125 100644 --- a/packages/adapter-vercel/rollup.config.js +++ b/packages/adapter-vercel/rollup.config.js @@ -1,14 +1,23 @@ import { nodeResolve } from '@rollup/plugin-node-resolve'; import commonjs from '@rollup/plugin-commonjs'; -export default { - input: 'src/index.js', - output: { - file: 'files/index.js', - format: 'esm', - sourcemap: true, - exports: 'default' +export default [ + { + input: 'src/entry.js', + output: { + file: 'files/entry.mjs', + format: 'es', + sourcemap: true, + exports: 'default' + }, + plugins: [nodeResolve(), commonjs()], + external: [...require('module').builtinModules, './server/app.mjs'] }, - plugins: [nodeResolve(), commonjs()], - external: require('module').builtinModules -}; + { + input: 'src/index.cjs', + output: { + file: 'files/index.js' + }, + external: './entry.mjs' + } +]; diff --git a/packages/adapter-vercel/src/index.js b/packages/adapter-vercel/src/entry.js similarity index 58% rename from packages/adapter-vercel/src/index.js rename to packages/adapter-vercel/src/entry.js index 528084d5acb4..762e9043d4ea 100644 --- a/packages/adapter-vercel/src/index.js +++ b/packages/adapter-vercel/src/entry.js @@ -1,12 +1,13 @@ -import { parse, URLSearchParams } from 'url'; +import { URL, URLSearchParams } from 'url'; import { get_body } from '@sveltejs/app-utils/http'; -const app = require('./server/app.js'); - export default async (req, res) => { - const { pathname, query = '' } = parse(req.url || ''); + const host = `${req.headers['x-forwarded-proto']}://${req.headers.host}`; + const { pathname, query = '' } = new URL(req.url || '', host); + + const { render } = await import('./server/app.mjs'); - const rendered = await app.render({ + const rendered = await render({ method: req.method, headers: req.headers, path: pathname, diff --git a/packages/adapter-vercel/src/index.cjs b/packages/adapter-vercel/src/index.cjs new file mode 100644 index 000000000000..cce6e18a8da7 --- /dev/null +++ b/packages/adapter-vercel/src/index.cjs @@ -0,0 +1,4 @@ +module.exports = async (res, req) => { + const { default: app } = await import('./entry.mjs'); + await app(res, req); +};