UNPKG

grind-assets

Version:
93 lines (75 loc) 8.72 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Socket = Socket; function _isnil(val) { return val === null || typeof val === 'undefined'; } function Socket(referenceScript) { if (!window.WebSocket) { throw new Error('This browser does not support websockets, live reload will not work.'); } const listeners = {}; let attempts = 0; let attemptsReset = null; let pending = false; let socket = connect(); let firstConnect = true; function connect() { const protocol = window.location.protocol === 'https:' ? 'wss' : 'ws'; const socket = new WebSocket(`${protocol}://${window.location.host}/@assets/socket`); socket.onopen = () => { if (attemptsReset) { clearTimeout(attemptsReset); } if (firstConnect && !_isnil(referenceScript) && referenceScript.hasAttribute('data-since')) { socket.send(JSON.stringify({ type: 'init', since: Number(referenceScript.getAttribute('data-since')) })); } attemptsReset = setTimeout(() => { attempts = 1; }, 1000); firstConnect = false; }; socket.onclose = _reconnect.bind(null, 'close'); socket.onerror = _reconnect.bind(null, 'error'); socket.onmessage = message => { message = JSON.parse(message.data); { ; (listeners[message.type] || []).forEach(listener => listener(message.asset, message)); } }; return socket; } function _reconnect() { if (socket.readyState === WebSocket.OPEN) { return; } if (pending) { return; } else { pending = true; } const delay = Math.min(30, Math.pow(2, attempts) - 1) * 1000; if (attemptsReset) { clearTimeout(attemptsReset); attemptsReset = null; } setTimeout(() => { attempts++; pending = false; socket = connect(); }, delay); } return { on: (event, callback) => { if (!Array.isArray(listeners[event])) { listeners[event] = []; } listeners[event].push(callback); } }; } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9EZXZ0b29scy9Ccm93c2VyL1NvY2tldC5qcyJdLCJuYW1lcyI6WyJTb2NrZXQiLCJyZWZlcmVuY2VTY3JpcHQiLCJ3aW5kb3ciLCJXZWJTb2NrZXQiLCJFcnJvciIsImxpc3RlbmVycyIsImF0dGVtcHRzIiwiYXR0ZW1wdHNSZXNldCIsInBlbmRpbmciLCJzb2NrZXQiLCJjb25uZWN0IiwiZmlyc3RDb25uZWN0IiwicHJvdG9jb2wiLCJsb2NhdGlvbiIsImhvc3QiLCJvbm9wZW4iLCJjbGVhclRpbWVvdXQiLCJoYXNBdHRyaWJ1dGUiLCJzZW5kIiwiSlNPTiIsInN0cmluZ2lmeSIsInR5cGUiLCJzaW5jZSIsIk51bWJlciIsImdldEF0dHJpYnV0ZSIsInNldFRpbWVvdXQiLCJvbmNsb3NlIiwiX3JlY29ubmVjdCIsImJpbmQiLCJvbmVycm9yIiwib25tZXNzYWdlIiwibWVzc2FnZSIsInBhcnNlIiwiZGF0YSIsImZvckVhY2giLCJsaXN0ZW5lciIsImFzc2V0IiwicmVhZHlTdGF0ZSIsIk9QRU4iLCJkZWxheSIsIk1hdGgiLCJtaW4iLCJwb3ciLCJvbiIsImV2ZW50IiwiY2FsbGJhY2siLCJBcnJheSIsImlzQXJyYXkiLCJwdXNoIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBTyxTQUFTQSxNQUFULENBQWdCQyxlQUFoQixFQUFpQztBQUN2QyxNQUFJLENBQUNDLE1BQU0sQ0FBQ0MsU0FBWixFQUF1QjtBQUN0QixVQUFNLElBQUlDLEtBQUosQ0FBVSxzRUFBVixDQUFOO0FBQ0E7O0FBRUQsUUFBTUMsU0FBUyxHQUFHLEVBQWxCO0FBQ0EsTUFBSUMsUUFBUSxHQUFHLENBQWY7QUFDQSxNQUFJQyxhQUFhLEdBQUcsSUFBcEI7QUFDQSxNQUFJQyxPQUFPLEdBQUcsS0FBZDtBQUNBLE1BQUlDLE1BQU0sR0FBR0MsT0FBTyxFQUFwQjtBQUNBLE1BQUlDLFlBQVksR0FBRyxJQUFuQjs7QUFFQSxXQUFTRCxPQUFULEdBQW1CO0FBQ2xCLFVB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QUFBLFNBQVMsQ0FBQ3VDLEtBQUQsQ0FBVCxHQUFtQixFQUFuQjtBQUNBOztBQUVEdkMsTUFBQUEsU0FBUyxDQUFDdUMsS0FBRCxDQUFULENBQWlCSSxJQUFqQixDQUFzQkgsUUFBdEI7QUFDQTtBQVBLLEdBQVA7QUFTQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBTb2NrZXQocmVmZXJlbmNlU2NyaXB0KSB7XG5cdGlmICghd2luZG93LldlYlNvY2tldCkge1xuXHRcdHRocm93IG5ldyBFcnJvcignVGhpcyBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgd2Vic29ja2V0cywgbGl2ZSByZWxvYWQgd2lsbCBub3Qgd29yay4nKVxuXHR9XG5cblx0Y29uc3QgbGlzdGVuZXJzID0ge31cblx0bGV0IGF0dGVtcHRzID0gMFxuXHRsZXQgYXR0ZW1wdHNSZXNldCA9IG51bGxcblx0bGV0IHBlbmRpbmcgPSBmYWxzZVxuXHRsZXQgc29ja2V0ID0gY29ubmVjdCgpXG5cdGxldCBmaXJzdENvbm5lY3QgPSB0cnVlXG5cblx0ZnVuY3Rpb24gY29ubmVjdCgpIHtcblx0XHRjb25zdCBwcm90b2NvbCA9IHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCA9PT0gJ2h0dHBzOicgPyAnd3NzJyA6ICd3cydcblx0XHRjb25zdCBzb2NrZXQgPSBuZXcgV2ViU29ja2V0KGAke3Byb3RvY29sfTovLyR7d2luZG93LmxvY2F0aW9uLmhvc3R9L0Bhc3NldHMvc29ja2V0YClcblxuXHRcdHNvY2tldC5vbm9wZW4gPSAoKSA9PiB7XG5cdFx0XHRpZiAoYXR0ZW1wdHNSZXNldCkge1xuXHRcdFx0XHRjbGVhclRpbWVvdXQoYXR0ZW1wdHNSZXNldClcblx0XHRcdH1cblxuXHRcdFx0aWYgKFxuXHRcdFx0XHRmaXJzdENvbm5lY3QgJiZcblx0XHRcdFx0IXJlZmVyZW5jZVNjcmlwdC5pc05pbCAmJlxuXHRcdFx0XHRyZWZlcmVuY2VTY3JpcHQuaGFzQXR0cmlidXRlKCdkYXRhLXNpbmNlJylcblx0XHRcdCkge1xuXHRcdFx0XHRzb2NrZXQuc2VuZChcblx0XHRcdFx0XHRKU09OLnN0cmluZ2lmeSh7XG5cdFx0XHRcdFx0XHR0eXBlOiAnaW5pdCcsXG5cdFx0XHRcdFx0XHRzaW5jZTogTnVtYmVyKHJlZmVyZW5jZVNjcmlwdC5nZXRBdHRyaWJ1dGUoJ2RhdGEtc2luY2UnKSksXG5cdFx0XHRcdFx0fSksXG5cdFx0XHRcdClcblx0XHRcdH1cblxuXHRcdFx0YXR0ZW1wdHNSZXNldCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRhdHRlbXB0cyA9IDFcblx0XHRcdH0sIDEwMDApXG5cblx0XHRcdGZpcnN0Q29ubmVjdCA9IGZhbHNlXG5cdFx0fVxuXG5cdFx0c29ja2V0Lm9uY2xvc2UgPSBfcmVjb25uZWN0LmJpbmQobnVsbCwgJ2Nsb3NlJylcblx0XHRzb2NrZXQub25lcnJvciA9IF9yZWNvbm5lY3QuYmluZChudWxsLCAnZXJyb3InKVxuXG5cdFx0c29ja2V0Lm9ubWVzc2FnZSA9IG1lc3NhZ2UgPT4ge1xuXHRcdFx0bWVzc2FnZSA9IEpTT04ucGFyc2UobWVzc2FnZS5kYXRhKVxuXHRcdFx0e1xuXHRcdFx0XHQ7KGxpc3RlbmVyc1ttZXNzYWdlLnR5cGVdIHx8IFtdKS5mb3JFYWNoKGxpc3RlbmVyID0+XG5cdFx0XHRcdFx0bGlzdGVuZXIobWVzc2FnZS5hc3NldCwgbWVzc2FnZSksXG5cdFx0XHRcdClcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gc29ja2V0XG5cdH1cblxuXHRmdW5jdGlvbiBfcmVjb25uZWN0KCkge1xuXHRcdGlmIChzb2NrZXQucmVhZHlTdGF0ZSA9PT0gV2ViU29ja2V0Lk9QRU4pIHtcblx0XHRcdHJldHVyblxuXHRcdH1cblxuXHRcdGlmIChwZW5kaW5nKSB7XG5cdFx0XHRyZXR1cm5cblx0XHR9IGVsc2Uge1xuXHRcdFx0cGVuZGluZyA9IHRydWVcblx0XHR9XG5cblx0XHRjb25zdCBkZWxheSA9IE1hdGgubWluKDMwLCBNYXRoLnBvdygyLCBhdHRlbXB0cykgLSAxKSAqIDEwMDBcblxuXHRcdGlmIChhdHRlbXB0c1Jlc2V0KSB7XG5cdFx0XHRjbGVhclRpbWVvdXQoYXR0ZW1wdHNSZXNldClcblx0XHRcdGF0dGVtcHRzUmVzZXQgPSBudWxsXG5cdFx0fVxuXG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRhdHRlbXB0cysrXG5cdFx0XHRwZW5kaW5nID0gZmFsc2Vcblx0XHRcdHNvY2tldCA9IGNvbm5lY3QoKVxuXHRcdH0sIGRlbGF5KVxuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRvbjogKGV2ZW50LCBjYWxsYmFjaykgPT4ge1xuXHRcdFx0aWYgKCFBcnJheS5pc0FycmF5KGxpc3RlbmVyc1tldmVudF0pKSB7XG5cdFx0XHRcdGxpc3RlbmVyc1tldmVudF0gPSBbXVxuXHRcdFx0fVxuXG5cdFx0XHRsaXN0ZW5lcnNbZXZlbnRdLnB1c2goY2FsbGJhY2spXG5cdFx0fSxcblx0fVxufVxuIl19