Skip to content

Commit 0e875f8

Browse files
knagaitsevhiroppy
authored andcommitted
feat(server): async user callback for server.listen (#2218)
* feat(server): made user callback async, remove cli listen redundancy * test(server): added server listen method async callback tests * test(server): create options object using spread operator * chore(server): fix comment spelling
1 parent 64036a0 commit 0e875f8

File tree

4 files changed

+44
-18
lines changed

4 files changed

+44
-18
lines changed

bin/webpack-dev-server.js

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -113,19 +113,13 @@ function startDevServer(config, options) {
113113
throw err;
114114
}
115115

116-
if (options.socket) {
117-
server.listen(options.socket, options.host, (err) => {
118-
if (err) {
119-
throw err;
120-
}
121-
});
122-
} else {
123-
server.listen(options.port, options.host, (err) => {
124-
if (err) {
125-
throw err;
126-
}
127-
});
128-
}
116+
// options.socket does not have a default value, so it will only be set
117+
// if the user sets it explicitly
118+
server.listen(options.socket || options.port, options.host, (err) => {
119+
if (err) {
120+
throw err;
121+
}
122+
});
129123
}
130124

131125
processOptions(config, argv, (config, options) => {

lib/Server.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -740,12 +740,12 @@ class Server {
740740

741741
// between setupCallback and userCallback should be any other needed handling,
742742
// specifically so that things are done in the right order to prevent
743-
// backwards compatability issues
743+
// backwards compatibility issues
744744
let userCallbackCalled = false;
745-
const userCallback = (err) => {
745+
const userCallback = async (err) => {
746746
if (fn && !userCallbackCalled) {
747747
userCallbackCalled = true;
748-
fn.call(this.listeningApp, err);
748+
await fn.call(this.listeningApp, err);
749749
}
750750
};
751751

@@ -755,9 +755,9 @@ class Server {
755755
}
756756
};
757757

758-
const fullCallback = (err) => {
758+
const fullCallback = async (err) => {
759759
setupCallback();
760-
userCallback(err);
760+
await userCallback(err);
761761
onListeningCallback();
762762
};
763763

test/server/Server.test.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ const { noop } = require('webpack-dev-middleware/lib/util');
77
const Server = require('../../lib/Server');
88
const config = require('../fixtures/simple-config/webpack.config');
99
const port = require('../ports-map').Server;
10+
const timer = require('../helpers/timer');
1011

1112
jest.mock('sockjs/lib/transport');
1213

@@ -178,4 +179,28 @@ describe('Server', () => {
178179
});
179180
});
180181
});
182+
183+
describe('server.listen', () => {
184+
it('should complete async callback before calling onListening', (done) => {
185+
const callOrder = [];
186+
const compiler = webpack(config);
187+
const server = new Server(compiler, {
188+
onListening: () => {
189+
callOrder.push('onListening');
190+
},
191+
...baseDevConfig,
192+
});
193+
server.listen(port, '0.0.0.0', async () => {
194+
await timer(1000);
195+
callOrder.push('user callback');
196+
});
197+
198+
// we need a timeout because even if the server is done listening,
199+
// the compiler might still be compiling
200+
setTimeout(() => {
201+
expect(callOrder).toMatchSnapshot();
202+
server.close(done);
203+
}, 5000);
204+
});
205+
});
181206
});

test/server/__snapshots__/Server.test.js.snap

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,3 +59,10 @@ Array [
5959
},
6060
]
6161
`;
62+
63+
exports[`Server server.listen should complete async callback before calling onListening 1`] = `
64+
Array [
65+
"user callback",
66+
"onListening",
67+
]
68+
`;

0 commit comments

Comments
 (0)