1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.addMessageListener = addMessageListener;
- exports.sendMessage = sendMessage;
- exports.connectHMR = connectHMR;
- let source;
- const eventCallbacks = [];
- let lastActivity = Date.now();
- function getSocketProtocol(assetPrefix) {
- let protocol = location.protocol;
- try {
- // assetPrefix is a url
- protocol = new URL(assetPrefix).protocol;
- } catch (_) {}
- return protocol === 'http:' ? 'ws' : 'wss';
- }
- function addMessageListener(cb) {
- eventCallbacks.push(cb);
- }
- function sendMessage(data) {
- if (!source || source.readyState !== source.OPEN) return;
- return source.send(data);
- }
- function connectHMR(options) {
- if (!options.timeout) {
- options.timeout = 5 * 1000;
- }
- function init() {
- if (source) source.close();
- function handleOnline() {
- if (options.log) console.log('[HMR] connected');
- lastActivity = Date.now();
- }
- function handleMessage(event) {
- lastActivity = Date.now();
- eventCallbacks.forEach((cb)=>{
- cb(event);
- });
- }
- let timer;
- function handleDisconnect() {
- clearInterval(timer);
- source.close();
- setTimeout(init, options.timeout);
- }
- timer = setInterval(function() {
- if (Date.now() - lastActivity > options.timeout) {
- handleDisconnect();
- }
- }, options.timeout / 2);
- const { hostname , port } = location;
- const protocol = getSocketProtocol(options.assetPrefix || '');
- const assetPrefix = options.assetPrefix.replace(/^\/+/, '');
- let url = `${protocol}://${hostname}:${port}${assetPrefix ? `/${assetPrefix}` : ''}`;
- if (assetPrefix.startsWith('http')) {
- url = `${protocol}://${assetPrefix.split('://')[1]}`;
- }
- source = new window.WebSocket(`${url}${options.path}`);
- source.onopen = handleOnline;
- source.onerror = handleDisconnect;
- source.onmessage = handleMessage;
- }
- init();
- }
- if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') {
- Object.defineProperty(exports.default, '__esModule', { value: true });
- Object.assign(exports.default, exports);
- module.exports = exports.default;
- }
- //# sourceMappingURL=websocket.js.map
|