grind-assets
Version:
Asset management for Grind
65 lines (52 loc) • 5.98 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.socket = socket;
var _grindFramework = require("grind-framework");
let ws = null;
try {
ws = require('ws');
} catch (err) {
throw new _grindFramework.MissingPackageError('ws', 'dev');
}
function socket(app) {
app.assets.websocket = app.routes.upgrade('@assets/socket');
app.assets.websocket.replayLog = [];
app.assets.websocket.sendAll = sendAll.bind(null, app.assets.websocket);
app.assets.websocket.on('connection', client => {
client.on('message', handleMessage.bind(null, app.assets.websocket, client));
});
}
function sendAll(wss, data, shouldReplayAfterConnect) {
if (shouldReplayAfterConnect) {
const cutoff = Date.now() - 5000;
wss.replayLog = wss.replayLog.filter(({
ts
}) => ts > cutoff);
wss.replayLog.push({
ts: Date.now(),
data
});
}
data = JSON.stringify(data);
for (const client of wss.clients) {
if (client.readyState !== ws.OPEN) {
continue;
}
client.send(data);
}
}
function handleMessage(wss, client, message) {
message = JSON.parse(message);
if (message.type !== 'init') {
return;
}
for (const replay of wss.replayLog) {
if (replay.ts < message.since) {
continue;
}
client.send(JSON.stringify(replay.data));
}
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9EZXZ0b29scy9TZXJ2ZXIvc29ja2V0LmpzIl0sIm5hbWVzIjpbIndzIiwicmVxdWlyZSIsImVyciIsIk1pc3NpbmdQYWNrYWdlRXJyb3IiLCJzb2NrZXQiLCJhcHAiLCJhc3NldHMiLCJ3ZWJzb2NrZXQiLCJyb3V0ZXMiLCJ1cGdyYWRlIiwicmVwbGF5TG9nIiwic2VuZEFsbCIsImJpbmQiLCJvbiIsImNsaWVudCIsImhhbmRsZU1lc3NhZ2UiLCJ3c3MiLCJkYXRhIiwic2hvdWxkUmVwbGF5QWZ0ZXJDb25uZWN0IiwiY3V0b2ZmIiwiRGF0ZSIsIm5vdyIsImZpbHRlciIsInRzIiwicHVzaCIsIkpTT04iLCJzdHJpbmdpZnkiLCJjbGllbnRzIiwicmVhZHlTdGF0ZSIsIk9QRU4iLCJzZW5kIiwibWVzc2FnZSIsInBhcnNlIiwidHlwZSIsInJlcGxheSIsInNpbmNlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBRUEsSUFBSUEsRUFBRSxHQUFHLElBQVQ7O0FBRUEsSUFBSTtBQUNIQSxFQUFBQSxFQUFFLEdBQUdDLE9BQU8sQ0FBQyxJQUFELENBQVo7QUFDQSxDQUZELENBRUUsT0FBT0MsR0FBUCxFQUFZO0FBQ2IsUUFBTSxJQUFJQyxtQ0FBSixDQUF3QixJQUF4QixFQUE4QixLQUE5QixDQUFOO0FBQ0E7O0FBRU0sU0FBU0MsTUFBVCxDQUFnQkMsR0FBaEIsRUFBcUI7QUFDM0JBLEVBQUFBLEdBQUcsQ0FBQ0MsTUFBSixDQUFXQyxTQUFYLEdBQXVCRixHQUFHLENBQUNHLE1BQUosQ0FBV0MsT0FBWCxDQUFtQixnQkFBbkIsQ0FBdkI7QUFFQUosRUFBQUEsR0FBRyxDQUFDQyxNQUFKLENBQVdDLFNBQVgsQ0FBcUJHLFNBQXJCLEdBQWlDLEVBQWpDO0FBQ0FMLEVBQUFBLEdBQUcsQ0FBQ0MsTUFBSixDQUFXQyxTQUFYLENBQXFCSSxPQUFyQixHQUErQkEsT0FBTyxDQUFDQyxJQUFSLENBQWEsSUFBYixFQUFtQlAsR0FBRyxDQUFDQyxNQUFKLENBQVdDLFNBQTlCLENBQS9CO0FBRUFGLEVBQUFBLEdBQUcsQ0FBQ0MsTUFBSixDQUFXQyxTQUFYLENBQXFCTSxFQUFyQixDQUF3QixZQUF4QixFQUFzQ0MsTUFBTSxJQUFJO0FBQy9DQSxJQUFBQSxNQUFNLENBQUNELEVBQVAsQ0FBVSxTQUFWLEVBQXFCRSxhQUFhLENBQUNILElBQWQsQ0FBbUIsSUFBbkIsRUFBeUJQLEdBQUcsQ0FBQ0MsTUFBSixDQUFXQyxTQUFwQyxFQUErQ08sTUFBL0MsQ0FBckI7QUFDQSxHQUZEO0FBR0E7O0FBRUQsU0FBU0gsT0FBVCxDQUFpQkssR0FBakIsRUFBc0JDLElBQXRCLEVBQTRCQyx3QkFBNUIsRUFBc0Q7QUFDckQsTUFBSUEsd0JBQUosRUFBOEI7QUFDN0IsVUFBTUMsTUFBTSxHQUFHQyxJQUFJLENBQUNDLEdBQUwsS0FBYSxJQUE1QjtBQUNBTCxJQUFBQSxHQUFHLENBQUNOLFNBQUosR0FBZ0JNLEdBQUcsQ0FBQ04sU0FBSixDQUFjWSxNQUFkLENBQXFCLENBQUM7QUFBRUMsTUFBQUE7QUFBRixLQUFELEtBQVlBLEVBQUUsR0FBR0osTUFBdEMsQ0FBaEI7QUFDQUgsSUFBQUEsR0FBRyxDQUFDTixTQUFKLENBQWNjLElBQWQsQ0FBbUI7QUFBRUQsTUFBQUEsRUFBRSxFQUFFSCxJQUFJLENBQUNDLEdBQUwsRUFBTjtBQUFrQkosTUFBQUE7QUFBbEIsS0FBbkI7QUFDQTs7QUFFREEsRUFBQUEsSUFBSSxHQUFHUSxJQUFJLENBQUNDLFNBQUwsQ0FBZVQsSUFBZixDQUFQOztBQUVBLE9BQUssTUFBTUgsTUFBWCxJQUFxQkUsR0FBRyxDQUFDVyxPQUF6QixFQUFrQztBQUNqQyxRQUFJYixNQUFNLENBQUNjLFVBQVAsS0FBc0I1QixFQUFFLENBQUM2QixJQUE3QixFQUFtQztBQUNsQztBQUNBOztBQUVEZixJQUFBQSxNQUFNLENBQUNnQixJQUFQLENBQVliLElBQVo7QUFDQTtBQUNEOztBQUVELFNBQVNGLGFBQVQsQ0FBdUJDLEdBQXZCLEVBQTRCRixNQUE1QixFQUFvQ2lCLE9BQXBDLEVBQTZDO0FBQzVDQSxFQUFBQSxPQUFPLEdBQUdOLElBQUksQ0FBQ08sS0FBTCxDQUFXRCxPQUFYLENBQVY7O0FBRUEsTUFBSUEsT0FBTyxDQUFDRSxJQUFSLEtBQWlCLE1BQXJCLEVBQTZCO0FBQzVCO0FBQ0E7O0FBRUQsT0FBSyxNQUFNQyxNQUFYLElBQXFCbEIsR0FBRyxDQUFDTixTQUF6QixFQUFvQztBQUNuQyxRQUFJd0IsTUFBTSxDQUFDWCxFQUFQLEdBQVlRLE9BQU8sQ0FBQ0ksS0FBeEIsRUFBK0I7QUFDOUI7QUFDQTs7QUFFRHJCLElBQUFBLE1BQU0sQ0FBQ2dCLElBQVAsQ0FBWUwsSUFBSSxDQUFDQyxTQUFMLENBQWVRLE1BQU0sQ0FBQ2pCLElBQXRCLENBQVo7QUFDQTtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTWlzc2luZ1BhY2thZ2VFcnJvciB9IGZyb20gJ2dyaW5kLWZyYW1ld29yaydcblxubGV0IHdzID0gbnVsbFxuXG50cnkge1xuXHR3cyA9IHJlcXVpcmUoJ3dzJylcbn0gY2F0Y2ggKGVycikge1xuXHR0aHJvdyBuZXcgTWlzc2luZ1BhY2thZ2VFcnJvcignd3MnLCAnZGV2Jylcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNvY2tldChhcHApIHtcblx0YXBwLmFzc2V0cy53ZWJzb2NrZXQgPSBhcHAucm91dGVzLnVwZ3JhZGUoJ0Bhc3NldHMvc29ja2V0JylcblxuXHRhcHAuYXNzZXRzLndlYnNvY2tldC5yZXBsYXlMb2cgPSBbXVxuXHRhcHAuYXNzZXRzLndlYnNvY2tldC5zZW5kQWxsID0gc2VuZEFsbC5iaW5kKG51bGwsIGFwcC5hc3NldHMud2Vic29ja2V0KVxuXG5cdGFwcC5hc3NldHMud2Vic29ja2V0Lm9uKCdjb25uZWN0aW9uJywgY2xpZW50ID0+IHtcblx0XHRjbGllbnQub24oJ21lc3NhZ2UnLCBoYW5kbGVNZXNzYWdlLmJpbmQobnVsbCwgYXBwLmFzc2V0cy53ZWJzb2NrZXQsIGNsaWVudCkpXG5cdH0pXG59XG5cbmZ1bmN0aW9uIHNlbmRBbGwod3NzLCBkYXRhLCBzaG91bGRSZXBsYXlBZnRlckNvbm5lY3QpIHtcblx0aWYgKHNob3VsZFJlcGxheUFmdGVyQ29ubmVjdCkge1xuXHRcdGNvbnN0IGN1dG9mZiA9IERhdGUubm93KCkgLSA1MDAwXG5cdFx0d3NzLnJlcGxheUxvZyA9IHdzcy5yZXBsYXlMb2cuZmlsdGVyKCh7IHRzIH0pID0+IHRzID4gY3V0b2ZmKVxuXHRcdHdzcy5yZXBsYXlMb2cucHVzaCh7IHRzOiBEYXRlLm5vdygpLCBkYXRhIH0pXG5cdH1cblxuXHRkYXRhID0gSlNPTi5zdHJpbmdpZnkoZGF0YSlcblxuXHRmb3IgKGNvbnN0IGNsaWVudCBvZiB3c3MuY2xpZW50cykge1xuXHRcdGlmIChjbGllbnQucmVhZHlTdGF0ZSAhPT0gd3MuT1BFTikge1xuXHRcdFx0Y29udGludWVcblx0XHR9XG5cblx0XHRjbGllbnQuc2VuZChkYXRhKVxuXHR9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZU1lc3NhZ2Uod3NzLCBjbGllbnQsIG1lc3NhZ2UpIHtcblx0bWVzc2FnZSA9IEpTT04ucGFyc2UobWVzc2FnZSlcblxuXHRpZiAobWVzc2FnZS50eXBlICE9PSAnaW5pdCcpIHtcblx0XHRyZXR1cm5cblx0fVxuXG5cdGZvciAoY29uc3QgcmVwbGF5IG9mIHdzcy5yZXBsYXlMb2cpIHtcblx0XHRpZiAocmVwbGF5LnRzIDwgbWVzc2FnZS5zaW5jZSkge1xuXHRcdFx0Y29udGludWVcblx0XHR9XG5cblx0XHRjbGllbnQuc2VuZChKU09OLnN0cmluZ2lmeShyZXBsYXkuZGF0YSkpXG5cdH1cbn1cbiJdfQ==