Skip to content

Commit d742029

Browse files
authored
adapter-vercel: Use CJS entrypoint to load ESM files (#483)
* adapter-vercel fixes Replace require() with await import() Replace url.parse with new URL() * adapter-vercel changeset * adapter-vercel: actually use existing headers * adapter-vercel: Use single CJS entrypoint * adapter-vercel: rename app.js to app.mjs * adapter-vercel: Don't fail on mkdirSync * adapter-vercel: fix deconstruct
1 parent 512b8c9 commit d742029

File tree

5 files changed

+41
-17
lines changed

5 files changed

+41
-17
lines changed

.changeset/selfish-owls-own.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@sveltejs/adapter-vercel': patch
3+
---
4+
5+
Fix mixed usage of CJS and ESM

packages/adapter-vercel/index.js

+7-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { writeFileSync, mkdirSync } from 'fs';
1+
import { writeFileSync, mkdirSync, renameSync } from 'fs';
22
import { dirname, resolve, join } from 'path';
33
import { fileURLToPath } from 'url';
44
import { copy } from '@sveltejs/app-utils/files';
@@ -18,6 +18,7 @@ export default async function adapter(builder) {
1818

1919
builder.log.minor('Building lambda...');
2020
builder.copy_server_files(server_directory);
21+
renameSync(join(server_directory, 'app.js'), join(server_directory, 'app.mjs'));
2122

2223
copy(join(__dirname, 'files'), lambda_directory);
2324

@@ -27,7 +28,11 @@ export default async function adapter(builder) {
2728
});
2829

2930
builder.log.minor('Writing routes...');
30-
mkdirSync(config_directory);
31+
try {
32+
mkdirSync(config_directory);
33+
} catch {
34+
// directory already exists
35+
}
3136
writeFileSync(
3237
join(config_directory, 'routes.json'),
3338
JSON.stringify([
+19-10
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,23 @@
11
import { nodeResolve } from '@rollup/plugin-node-resolve';
22
import commonjs from '@rollup/plugin-commonjs';
33

4-
export default {
5-
input: 'src/index.js',
6-
output: {
7-
file: 'files/index.js',
8-
format: 'esm',
9-
sourcemap: true,
10-
exports: 'default'
4+
export default [
5+
{
6+
input: 'src/entry.js',
7+
output: {
8+
file: 'files/entry.mjs',
9+
format: 'es',
10+
sourcemap: true,
11+
exports: 'default'
12+
},
13+
plugins: [nodeResolve(), commonjs()],
14+
external: [...require('module').builtinModules, './server/app.mjs']
1115
},
12-
plugins: [nodeResolve(), commonjs()],
13-
external: require('module').builtinModules
14-
};
16+
{
17+
input: 'src/index.cjs',
18+
output: {
19+
file: 'files/index.js'
20+
},
21+
external: './entry.mjs'
22+
}
23+
];

packages/adapter-vercel/src/index.js renamed to packages/adapter-vercel/src/entry.js

+6-5
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
1-
import { parse, URLSearchParams } from 'url';
1+
import { URL, URLSearchParams } from 'url';
22
import { get_body } from '@sveltejs/app-utils/http';
33

4-
const app = require('./server/app.js');
5-
64
export default async (req, res) => {
7-
const { pathname, query = '' } = parse(req.url || '');
5+
const host = `${req.headers['x-forwarded-proto']}://${req.headers.host}`;
6+
const { pathname, query = '' } = new URL(req.url || '', host);
7+
8+
const { render } = await import('./server/app.mjs');
89

9-
const rendered = await app.render({
10+
const rendered = await render({
1011
method: req.method,
1112
headers: req.headers,
1213
path: pathname,

packages/adapter-vercel/src/index.cjs

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
module.exports = async (res, req) => {
2+
const { default: app } = await import('./entry.mjs');
3+
await app(res, req);
4+
};

0 commit comments

Comments
 (0)