UNPKG

@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">

102 lines (88 loc) 2.46 kB
const { Server: HttpsServer } = require('https'); const validate = require('@webpack-contrib/schema-utils'); const merge = require('merge-options').bind({ concatArrays: true }); const weblog = require('webpack-log'); const schema = require('../schemas/options.json'); const HotClientError = require('./HotClientError'); const defaults = { allEntries: false, autoConfigure: true, host: 'localhost', hmr: true, // eslint-disable-next-line no-undefined https: undefined, logLevel: 'info', logTime: false, port: 0, reload: true, send: { errors: true, warnings: true, }, server: null, stats: { context: process.cwd(), }, validTargets: ['web'], test: false, }; module.exports = (opts = {}) => { validate({ name: 'webpack-hot-client', schema, target: opts }); const options = merge({}, defaults, opts); const log = weblog({ name: 'hot', id: options.test ? null : 'webpack-hot-client', level: options.logLevel, timestamp: options.logTime, }); options.log = log; if (typeof options.host === 'string') { options.host = { client: options.host, server: options.host, }; } else if (!options.host.server) { throw new HotClientError( '`host.server` must be defined when setting host to an Object' ); } else if (!options.host.client) { throw new HotClientError( '`host.client` must be defined when setting host to an Object' ); } if (typeof options.port === 'number') { options.port = { client: options.port, server: options.port, }; } else if (isNaN(parseInt(options.port.server, 10))) { throw new HotClientError( '`port.server` must be defined when setting host to an Object' ); } else if (isNaN(parseInt(options.port.client, 10))) { throw new HotClientError( '`port.client` must be defined when setting host to an Object' ); } const { server } = options; if ( server && server instanceof HttpsServer && typeof options.https === 'undefined' ) { options.https = true; } if (server && server.listening) { options.webSocket = { host: server.address().address, // a port.client value of 0 will be falsy, so it should pull the server port port: options.port.client || server.address().port, }; } else { options.webSocket = { host: options.host.client, port: options.port.client, }; } return options; };