Skip to content

Commit d860475

Browse files
committed
fix: Use esbuild inject API
1 parent 5b3e1e6 commit d860475

File tree

17 files changed

+74
-37
lines changed

17 files changed

+74
-37
lines changed

.changeset/ninety-games-flow.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
---
2+
'@sveltejs/adapter-netlify': patch
3+
'@sveltejs/adapter-node': patch
4+
'@sveltejs/adapter-vercel': patch
5+
'@sveltejs/kit': patch
6+
---
7+
8+
Use esbuild inject API to insert shims

packages/adapter-netlify/files/entry.js

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
import '@sveltejs/kit/install-fetch'; // eslint-disable-line import/no-unresolved
2-
31
// TODO hardcoding the relative location makes this brittle
42
import { init, render } from '../output/server/app.js'; // eslint-disable-line import/no-unresolved
53

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export { fetch, Response, Request, Headers } from '@sveltejs/kit/install-fetch'; // eslint-disable-line import/no-unresolved

packages/adapter-netlify/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ export default function () {
2424
entryPoints: ['.svelte-kit/netlify/entry.js'],
2525
outfile: join(functions, 'render/index.js'),
2626
bundle: true,
27+
inject: [join(files, 'shims.js')],
2728
platform: 'node'
2829
});
2930

packages/adapter-node/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ export default function ({
6363
format: 'esm',
6464
platform: 'node',
6565
target: 'node12',
66+
inject: [join(files, 'shims.js')],
6667
define: {
6768
esbuild_app_dir: '"' + config.kit.appDir + '"'
6869
}

packages/adapter-node/rollup.config.js

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,23 @@ import { nodeResolve } from '@rollup/plugin-node-resolve';
22
import commonjs from '@rollup/plugin-commonjs';
33
import json from '@rollup/plugin-json';
44

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

packages/adapter-node/src/index.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import './require_shim';
21
import { createServer } from './server';
32
// TODO hardcoding the relative location makes this brittle
43
import { init, render } from '../output/server/app.js'; // eslint-disable-line import/no-unresolved

packages/adapter-node/src/require_shim.js

Lines changed: 0 additions & 2 deletions
This file was deleted.

packages/adapter-node/src/server.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import '@sveltejs/kit/install-fetch'; // eslint-disable-line import/no-unresolved
21
import { getRawBody } from '@sveltejs/kit/node'; // eslint-disable-line import/no-unresolved
32
import compression from 'compression';
43
import fs from 'fs';

packages/adapter-node/src/shims.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { createRequire } from 'module';
2+
export { fetch, Response, Request, Headers } from '@sveltejs/kit/install-fetch'; // eslint-disable-line import/no-unresolved
3+
4+
// esbuild automatically renames "require"
5+
// So we still have to use Object.defineProperty here
6+
Object.defineProperty(globalThis, 'require', {
7+
enumerable: true,
8+
value: createRequire(import.meta.url)
9+
});

packages/adapter-vercel/files/entry.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { getRawBody } from '@sveltejs/kit/node'; // eslint-disable-line import/no-unresolved
2-
import '@sveltejs/kit/install-fetch'; // eslint-disable-line import/no-unresolved
32

43
// TODO hardcoding the relative location makes this brittle
54
import { init, render } from '../output/server/app.js'; // eslint-disable-line import/no-unresolved
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export { fetch, Response, Request, Headers } from '@sveltejs/kit/install-fetch'; // eslint-disable-line import/no-unresolved

packages/adapter-vercel/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ export default function () {
3131
entryPoints: ['.svelte-kit/vercel/entry.js'],
3232
outfile: join(dirs.lambda, 'index.js'),
3333
bundle: true,
34+
inject: [join(files, 'shims.js')],
3435
platform: 'node'
3536
});
3637

packages/kit/src/core/adapt/prerender.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { readFileSync, writeFileSync } from 'fs';
22
import { dirname, join, resolve as resolve_path } from 'path';
33
import { parse, pathToFileURL, resolve } from 'url';
44
import { mkdirp } from '../filesystem/index.js';
5-
import '../../install-fetch.js';
5+
import { __fetch_polyfill } from '../../install-fetch.js';
66
import { SVELTE_KIT } from '../constants.js';
77

88
/** @param {string} html */
@@ -58,6 +58,8 @@ const REDIRECT = 3;
5858
* all: boolean; // disregard `export const prerender = true`
5959
* }} opts */
6060
export async function prerender({ cwd, out, log, config, build_data, fallback, all }) {
61+
__fetch_polyfill();
62+
6163
const dir = resolve_path(cwd, `${SVELTE_KIT}/output`);
6264

6365
const seen = new Set();

packages/kit/src/core/dev/index.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,16 @@ import { copy_assets, get_no_external, resolve_entry } from '../utils.js';
1515
import { deep_merge, print_config_conflicts } from '../config/index.js';
1616
import { svelte } from '@sveltejs/vite-plugin-svelte';
1717
import { get_server } from '../server/index.js';
18-
import '../../install-fetch.js';
18+
import { __fetch_polyfill } from '../../install-fetch.js';
1919
import { SVELTE_KIT } from '../constants.js';
2020

2121
/** @typedef {{ cwd?: string, port: number, host: string, https: boolean, config: import('types/config').ValidatedConfig }} Options */
2222
/** @typedef {import('types/internal').SSRComponent} SSRComponent */
2323

2424
/** @param {Options} opts */
2525
export function dev(opts) {
26+
__fetch_polyfill();
27+
2628
return new Watcher(opts).init();
2729
}
2830

packages/kit/src/core/start/index.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import sirv from 'sirv';
44
import { getRawBody } from '../node/index.js';
55
import { join, resolve } from 'path';
66
import { get_server } from '../server/index.js';
7-
import '../../install-fetch.js';
7+
import { __fetch_polyfill } from '../../install-fetch.js';
88
import { SVELTE_KIT } from '../constants.js';
99

1010
/** @param {string} dir */
@@ -24,6 +24,8 @@ const mutable = (dir) =>
2424
* }} opts
2525
*/
2626
export async function start({ port, host, config, https: use_https = false, cwd = process.cwd() }) {
27+
__fetch_polyfill();
28+
2729
const app_file = resolve(cwd, `${SVELTE_KIT}/output/server/app.js`);
2830

2931
/** @type {import('types/internal').App} */

packages/kit/src/install-fetch.js

Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,26 @@
11
import fetch, { Response, Request, Headers } from 'node-fetch';
22

3-
Object.defineProperties(globalThis, {
4-
fetch: {
5-
enumerable: true,
6-
value: fetch
7-
},
8-
Response: {
9-
enumerable: true,
10-
value: Response
11-
},
12-
Request: {
13-
enumerable: true,
14-
value: Request
15-
},
16-
Headers: {
17-
enumerable: true,
18-
value: Headers
19-
}
20-
});
3+
// exported for dev, prerender, and preview
4+
export function __fetch_polyfill() {
5+
Object.defineProperties(globalThis, {
6+
fetch: {
7+
enumerable: true,
8+
value: fetch
9+
},
10+
Response: {
11+
enumerable: true,
12+
value: Response
13+
},
14+
Request: {
15+
enumerable: true,
16+
value: Request
17+
},
18+
Headers: {
19+
enumerable: true,
20+
value: Headers
21+
}
22+
});
23+
}
24+
25+
// exported for esbuild shims in adapters
26+
export { fetch, Response, Request, Headers };

0 commit comments

Comments
 (0)