Skip to content
This repository was archived by the owner on Jan 11, 2023. It is now read-only.

Commit bf4858c

Browse files
authored
ESM support: allow usage in "type": "module" packages (#1800)
1 parent 88a6066 commit bf4858c

File tree

8 files changed

+177
-133
lines changed

8 files changed

+177
-133
lines changed

package-lock.json

+154-122
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
"@types/mocha": "^8.0.0",
3737
"@types/node": "^10.0.0",
3838
"@types/node-fetch": "^2.5.7",
39-
"@types/puppeteer": "^3.0.1",
39+
"@types/puppeteer": "^5.4.4",
4040
"@typescript-eslint/eslint-plugin": "^4.3.0",
4141
"@typescript-eslint/parser": "^4.3.0",
4242
"cheap-watch": "^1.0.4",
@@ -55,7 +55,7 @@
5555
"polka": "^0.5.2",
5656
"port-authority": "^1.0.5",
5757
"pretty-bytes": "^5.3.0",
58-
"puppeteer": "^5.0.0",
58+
"puppeteer": "^10.4.0",
5959
"require-relative": "^0.8.7",
6060
"rimraf": "^3.0.2",
6161
"rollup": "^2.29.0",

src/cli.ts

+5-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import colors from 'kleur';
55
import * as pkg from '../package.json';
66
import { elapsed, repeat, left_pad, format_milliseconds } from './utils';
77
import { InvalidEvent, ErrorEvent, FatalEvent, BuildEvent, ReadyEvent } from './interfaces';
8+
import { module } from './config/env';
89

910
const prog = sade('sapper').version(pkg.version);
1011

@@ -172,14 +173,17 @@ prog.command('build [dest]')
172173
await _build(opts.bundler, opts.legacy, opts.cwd, opts.src, opts.routes, opts.output, dest, opts.ext);
173174

174175
const launcher = path.resolve(dest, 'index.js');
176+
const import_statement = module
177+
? "import './server/server.js';"
178+
: "require('./server/server.js');";
175179

176180
fs.writeFileSync(launcher, `
177181
// generated by sapper build at ${new Date().toISOString()}
178182
process.env.NODE_ENV = process.env.NODE_ENV || 'production';
179183
process.env.PORT = process.env.PORT || ${opts.port || 3000};
180184
181185
console.log('Starting server on port ' + process.env.PORT);
182-
require('./server/server.js');
186+
${import_statement}
183187
`.replace(/^\t+/gm, '').trim());
184188

185189
console.error(`\n> Finished in ${elapsed(start)}. Type ${colors.bold().cyan(`node ${dest}`)} to run the app.`);

src/config/env.ts

+2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
export let dev: boolean;
22
export let src: string;
33
export let dest: string;
4+
export let module: boolean;
45

56
export const set_dev = (_: boolean) => dev = _;
67
export const set_src = (_: string) => src = _;
78
export const set_dest = (_: string) => dest = _;
9+
export const set_module = (_: boolean) => module = _;

src/config/rollup.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { dev, src, dest } from './env';
1+
import { dev, src, dest, module } from './env';
22
import { InputOption, OutputOptions } from 'rollup';
33

44
const sourcemap = dev ? 'inline' : false;
@@ -35,7 +35,7 @@ export default {
3535
output: (): OutputOptions => {
3636
return {
3737
dir: `${dest}/server`,
38-
format: 'cjs',
38+
format: module ? 'esm' : 'cjs',
3939
sourcemap
4040
};
4141
}

src/core/create_compilers/index.ts

+7-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1+
import * as fs from 'fs';
12
import * as path from 'path';
23
import RollupCompiler from './RollupCompiler';
34
import { WebpackCompiler } from './WebpackCompiler';
4-
import { set_dev, set_src, set_dest } from '../../config/env';
5+
import { set_dev, set_src, set_dest, set_module } from '../../config/env';
56

67
export type Compiler = RollupCompiler | WebpackCompiler;
78

@@ -22,6 +23,11 @@ export default async function create_compilers(
2223
set_dev(dev);
2324
set_src(src);
2425
set_dest(dest);
26+
try {
27+
set_module(JSON.parse(fs.readFileSync(path.resolve(cwd, 'package.json'), 'utf-8')).type === 'module');
28+
} catch (err) {
29+
set_module(false);
30+
}
2531

2632
if (bundler === 'rollup') {
2733
const config = await RollupCompiler.load_config(cwd);

test/apps/AppRunner.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -109,13 +109,13 @@ export class AppRunner {
109109
const pending: Set<string> = new Set();
110110
let done = false;
111111

112-
function handle_request(request: puppeteer.Request) {
112+
function handle_request(request: puppeteer.HTTPRequest) {
113113
const url = request.url();
114114
requests.push(url);
115115
pending.add(url);
116116
}
117117

118-
function handle_requestfinished(request: puppeteer.Request) {
118+
function handle_requestfinished(request: puppeteer.HTTPRequest) {
119119
const url = request.url();
120120
pending.delete(url);
121121

@@ -125,7 +125,7 @@ export class AppRunner {
125125
}
126126
}
127127

128-
function handle_requestfailed(request: puppeteer.Request) {
128+
function handle_requestfailed(request: puppeteer.HTTPRequest) {
129129
cleanup();
130130
reject(new Error(`failed to fetch ${request.url()}`));
131131
}
@@ -151,7 +151,7 @@ export class AppRunner {
151151
});
152152
}
153153

154-
async intercept_requests(interceptor: (request: puppeteer.Request) => void, fn: () => any): Promise<void> {
154+
async intercept_requests(interceptor: (request: puppeteer.HTTPRequest) => void, fn: () => any): Promise<void> {
155155
const unique_interceptor = request => interceptor(request);
156156

157157
this.page.on('request', unique_interceptor);

test/apps/redirects/test.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ describe('redirects', function() {
8383
);
8484
});
8585

86-
const interceptor = (request: puppeteer.Request) => {
86+
const interceptor = (request: puppeteer.HTTPRequest) => {
8787
if (/example\.com/.test(request.url())) {
8888
request.respond({
8989
status: 200,

0 commit comments

Comments
 (0)