|
|
const querystring = require('querystring'); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function getAdditionalEntries({ devServer, options }) { |
|
|
|
|
|
let resourceQuery = {}; |
|
|
|
|
|
if (devServer) { |
|
|
const { client, https, http2, sockHost, sockPath, sockPort } = devServer; |
|
|
let { host, path, port } = devServer; |
|
|
|
|
|
let protocol = https || http2 ? 'https' : 'http'; |
|
|
if (sockHost) host = sockHost; |
|
|
if (sockPath) path = sockPath; |
|
|
if (sockPort) port = sockPort; |
|
|
|
|
|
if (client && client.webSocketURL != null) { |
|
|
let parsedUrl = client.webSocketURL; |
|
|
if (typeof parsedUrl === 'string') parsedUrl = new URL(parsedUrl); |
|
|
|
|
|
let auth; |
|
|
if (parsedUrl.username) { |
|
|
auth = parsedUrl.username; |
|
|
if (parsedUrl.password) { |
|
|
auth += ':' + parsedUrl.password; |
|
|
} |
|
|
} |
|
|
|
|
|
if (parsedUrl.hostname != null) { |
|
|
host = [auth != null && auth, parsedUrl.hostname].filter(Boolean).join('@'); |
|
|
} |
|
|
if (parsedUrl.pathname != null) { |
|
|
path = parsedUrl.pathname; |
|
|
} |
|
|
if (parsedUrl.port != null) { |
|
|
port = !['0', 'auto'].includes(String(parsedUrl.port)) ? parsedUrl.port : undefined; |
|
|
} |
|
|
if (parsedUrl.protocol != null) { |
|
|
protocol = parsedUrl.protocol !== 'auto' ? parsedUrl.protocol.replace(':', '') : 'ws'; |
|
|
} |
|
|
} |
|
|
|
|
|
if (host) resourceQuery.sockHost = host; |
|
|
if (path) resourceQuery.sockPath = path; |
|
|
if (port) resourceQuery.sockPort = port; |
|
|
resourceQuery.sockProtocol = protocol; |
|
|
} |
|
|
|
|
|
if (options.overlay) { |
|
|
const { sockHost, sockPath, sockPort, sockProtocol } = options.overlay; |
|
|
if (sockHost) resourceQuery.sockHost = sockHost; |
|
|
if (sockPath) resourceQuery.sockPath = sockPath; |
|
|
if (sockPort) resourceQuery.sockPort = sockPort; |
|
|
if (sockProtocol) resourceQuery.sockProtocol = sockProtocol; |
|
|
} |
|
|
|
|
|
|
|
|
const queryString = querystring.stringify(resourceQuery, undefined, undefined, { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
encodeURIComponent(string) { |
|
|
return string; |
|
|
}, |
|
|
}); |
|
|
|
|
|
const prependEntries = [ |
|
|
|
|
|
require.resolve('../../client/ReactRefreshEntry'), |
|
|
]; |
|
|
|
|
|
const overlayEntries = [ |
|
|
|
|
|
options.overlay && |
|
|
options.overlay.entry && |
|
|
`${require.resolve(options.overlay.entry)}${queryString ? `?${queryString}` : ''}`, |
|
|
].filter(Boolean); |
|
|
|
|
|
return { prependEntries, overlayEntries }; |
|
|
} |
|
|
|
|
|
module.exports = getAdditionalEntries; |
|
|
|