123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- (function() {
- var PROTOCOL_6, PROTOCOL_7, Parser, ProtocolError,
- __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
-
- exports.PROTOCOL_6 = PROTOCOL_6 = 'http://livereload.com/protocols/official-6';
-
- exports.PROTOCOL_7 = PROTOCOL_7 = 'http://livereload.com/protocols/official-7';
-
- exports.ProtocolError = ProtocolError = (function() {
- function ProtocolError(reason, data) {
- this.message = "LiveReload protocol error (" + reason + ") after receiving data: \"" + data + "\".";
- }
-
- return ProtocolError;
-
- })();
-
- exports.Parser = Parser = (function() {
- function Parser(handlers) {
- this.handlers = handlers;
- this.reset();
- }
-
- Parser.prototype.reset = function() {
- return this.protocol = null;
- };
-
- Parser.prototype.process = function(data) {
- var command, e, message, options, _ref;
- try {
- if (this.protocol == null) {
- if (data.match(/^!!ver:([\d.]+)$/)) {
- this.protocol = 6;
- } else if (message = this._parseMessage(data, ['hello'])) {
- if (!message.protocols.length) {
- throw new ProtocolError("no protocols specified in handshake message");
- } else if (__indexOf.call(message.protocols, PROTOCOL_7) >= 0) {
- this.protocol = 7;
- } else if (__indexOf.call(message.protocols, PROTOCOL_6) >= 0) {
- this.protocol = 6;
- } else {
- throw new ProtocolError("no supported protocols found");
- }
- }
- return this.handlers.connected(this.protocol);
- } else if (this.protocol === 6) {
- message = JSON.parse(data);
- if (!message.length) {
- throw new ProtocolError("protocol 6 messages must be arrays");
- }
- command = message[0], options = message[1];
- if (command !== 'refresh') {
- throw new ProtocolError("unknown protocol 6 command");
- }
- return this.handlers.message({
- command: 'reload',
- path: options.path,
- liveCSS: (_ref = options.apply_css_live) != null ? _ref : true
- });
- } else {
- message = this._parseMessage(data, ['reload', 'alert']);
- return this.handlers.message(message);
- }
- } catch (_error) {
- e = _error;
- if (e instanceof ProtocolError) {
- return this.handlers.error(e);
- } else {
- throw e;
- }
- }
- };
-
- Parser.prototype._parseMessage = function(data, validCommands) {
- var e, message, _ref;
- try {
- message = JSON.parse(data);
- } catch (_error) {
- e = _error;
- throw new ProtocolError('unparsable JSON', data);
- }
- if (!message.command) {
- throw new ProtocolError('missing "command" key', data);
- }
- if (_ref = message.command, __indexOf.call(validCommands, _ref) < 0) {
- throw new ProtocolError("invalid command '" + message.command + "', only valid commands are: " + (validCommands.join(', ')) + ")", data);
- }
- return message;
- };
-
- return Parser;
-
- })();
-
- }).call(this);
|