@dillonkearns/elm-graphql
Version:
<img src="https://cdn.jsdelivr.net/gh/martimatix/logo-graphqelm/logo.svg" alt="dillonearns/elm-graphql logo" width="40%" align="right">
68 lines (54 loc) • 1.84 kB
JavaScript
const http = require('http');
const https = require('https');
const chalk = require('chalk');
const killable = require('killable');
const urljoin = require('url-join');
const weblog = require('webpack-log');
module.exports = {
bind(server, options) {
const { bus } = options;
const log = weblog({ id: 'webpack-serve', name: 'serve' });
server.once('listening', () => {
const { port } = server.address();
const uri = `${options.protocol}://${options.host}:${port}`;
log.info(chalk`Project is running at {blue ${uri}}`);
if (options.clipboard && !options.open) {
try {
// eslint-disable-next-line global-require
const clip = require('clipboardy');
clip.writeSync(uri);
log.info(chalk.grey('Server URI copied to clipboard'));
} catch (error) {
log.warn(
chalk.grey(
'Failed to copy server URI to clipboard. ' +
"Use logLevel: 'debug' for more information."
)
);
log.debug(error);
}
}
bus.emit('listening', { server, options });
if (options.open) {
const open = require('opn'); // eslint-disable-line global-require
open(urljoin(uri, options.open.path || ''), options.open.app || {});
}
});
},
getServer(app, options) {
// eslint-disable-next-line global-require, import/no-unresolved
const http2 = options.http2 ? require('http2') : null;
const args = [];
let method = (http2 || http).createServer;
if (app) {
args.unshift(app.callback());
}
if (options.https) {
args.unshift(options.https);
method = http2 ? http2.createSecureServer : https.createServer;
}
const server = method(...args);
killable(server);
return server;
},
};