UNPKG

webpack-dev-server

Version:

Serves a webpack app. Updates the browser on changes.

1,531 lines (1,386 loc) 175 kB
(function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'object') module.exports = factory(); else if(typeof define === 'function' && define.amd) define([], factory); else if(typeof exports === 'object') exports["SockJS"] = factory(); else root["SockJS"] = factory(); })((typeof self !== 'undefined' ? self : this), function() { return /******/ (function() { // webpackBootstrap /******/ var __webpack_modules__ = ({ /***/ "./node_modules/inherits/inherits_browser.js": /*!***************************************************!*\ !*** ./node_modules/inherits/inherits_browser.js ***! \***************************************************/ /***/ (function(module) { if (typeof Object.create === 'function') { // implementation from standard node.js 'util' module module.exports = function inherits(ctor, superCtor) { if (superCtor) { ctor.super_ = superCtor; ctor.prototype = Object.create(superCtor.prototype, { constructor: { value: ctor, enumerable: false, writable: true, configurable: true } }); } }; } else { // old school shim for old browsers module.exports = function inherits(ctor, superCtor) { if (superCtor) { ctor.super_ = superCtor; var TempCtor = function TempCtor() {}; TempCtor.prototype = superCtor.prototype; ctor.prototype = new TempCtor(); ctor.prototype.constructor = ctor; } }; } /***/ }), /***/ "./node_modules/ms/index.js": /*!**********************************!*\ !*** ./node_modules/ms/index.js ***! \**********************************/ /***/ (function(module) { function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } /** * Helpers. */ var s = 1000; var m = s * 60; var h = m * 60; var d = h * 24; var w = d * 7; var y = d * 365.25; /** * Parse or format the given `val`. * * Options: * * - `long` verbose formatting [false] * * @param {String|Number} val * @param {Object} [options] * @throws {Error} throw an error if val is not a non-empty string or a number * @return {String|Number} * @api public */ module.exports = function (val, options) { options = options || {}; var type = _typeof(val); if (type === 'string' && val.length > 0) { return parse(val); } else if (type === 'number' && isFinite(val)) { return options.long ? fmtLong(val) : fmtShort(val); } throw new Error('val is not a non-empty string or a valid number. val=' + JSON.stringify(val)); }; /** * Parse the given `str` and return milliseconds. * * @param {String} str * @return {Number} * @api private */ function parse(str) { str = String(str); if (str.length > 100) { return; } var match = /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(str); if (!match) { return; } var n = parseFloat(match[1]); var type = (match[2] || 'ms').toLowerCase(); switch (type) { case 'years': case 'year': case 'yrs': case 'yr': case 'y': return n * y; case 'weeks': case 'week': case 'w': return n * w; case 'days': case 'day': case 'd': return n * d; case 'hours': case 'hour': case 'hrs': case 'hr': case 'h': return n * h; case 'minutes': case 'minute': case 'mins': case 'min': case 'm': return n * m; case 'seconds': case 'second': case 'secs': case 'sec': case 's': return n * s; case 'milliseconds': case 'millisecond': case 'msecs': case 'msec': case 'ms': return n; default: return undefined; } } /** * Short format for `ms`. * * @param {Number} ms * @return {String} * @api private */ function fmtShort(ms) { var msAbs = Math.abs(ms); if (msAbs >= d) { return Math.round(ms / d) + 'd'; } if (msAbs >= h) { return Math.round(ms / h) + 'h'; } if (msAbs >= m) { return Math.round(ms / m) + 'm'; } if (msAbs >= s) { return Math.round(ms / s) + 's'; } return ms + 'ms'; } /** * Long format for `ms`. * * @param {Number} ms * @return {String} * @api private */ function fmtLong(ms) { var msAbs = Math.abs(ms); if (msAbs >= d) { return plural(ms, msAbs, d, 'day'); } if (msAbs >= h) { return plural(ms, msAbs, h, 'hour'); } if (msAbs >= m) { return plural(ms, msAbs, m, 'minute'); } if (msAbs >= s) { return plural(ms, msAbs, s, 'second'); } return ms + ' ms'; } /** * Pluralization helper. */ function plural(ms, msAbs, n, name) { var isPlural = msAbs >= n * 1.5; return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : ''); } /***/ }), /***/ "./node_modules/querystringify/index.js": /*!**********************************************!*\ !*** ./node_modules/querystringify/index.js ***! \**********************************************/ /***/ (function(__unused_webpack_module, exports) { "use strict"; var has = Object.prototype.hasOwnProperty, undef; /** * Decode a URI encoded string. * * @param {String} input The URI encoded string. * @returns {String|Null} The decoded string. * @api private */ function decode(input) { try { return decodeURIComponent(input.replace(/\+/g, ' ')); } catch (e) { return null; } } /** * Attempts to encode a given input. * * @param {String} input The string that needs to be encoded. * @returns {String|Null} The encoded string. * @api private */ function encode(input) { try { return encodeURIComponent(input); } catch (e) { return null; } } /** * Simple query string parser. * * @param {String} query The query string that needs to be parsed. * @returns {Object} * @api public */ function querystring(query) { var parser = /([^=?#&]+)=?([^&]*)/g, result = {}, part; while (part = parser.exec(query)) { var key = decode(part[1]), value = decode(part[2]); // // Prevent overriding of existing properties. This ensures that build-in // methods like `toString` or __proto__ are not overriden by malicious // querystrings. // // In the case if failed decoding, we want to omit the key/value pairs // from the result. // if (key === null || value === null || key in result) continue; result[key] = value; } return result; } /** * Transform a query string to an object. * * @param {Object} obj Object that should be transformed. * @param {String} prefix Optional prefix. * @returns {String} * @api public */ function querystringify(obj, prefix) { prefix = prefix || ''; var pairs = [], value, key; // // Optionally prefix with a '?' if needed // if ('string' !== typeof prefix) prefix = '?'; for (key in obj) { if (has.call(obj, key)) { value = obj[key]; // // Edge cases where we actually want to encode the value to an empty // string instead of the stringified value. // if (!value && (value === null || value === undef || isNaN(value))) { value = ''; } key = encode(key); value = encode(value); // // If we failed to encode the strings, we should bail out as we don't // want to add invalid strings to the query. // if (key === null || value === null) continue; pairs.push(key + '=' + value); } } return pairs.length ? prefix + pairs.join('&') : ''; } // // Expose the module. // exports.stringify = querystringify; exports.parse = querystring; /***/ }), /***/ "./node_modules/requires-port/index.js": /*!*********************************************!*\ !*** ./node_modules/requires-port/index.js ***! \*********************************************/ /***/ (function(module) { "use strict"; /** * Check if we're required to add a port number. * * @see https://url.spec.whatwg.org/#default-port * @param {Number|String} port Port number we need to check * @param {String} protocol Protocol we need to check against. * @returns {Boolean} Is it a default port for the given protocol * @api private */ module.exports = function required(port, protocol) { protocol = protocol.split(':')[0]; port = +port; if (!port) return false; switch (protocol) { case 'http': case 'ws': return port !== 80; case 'https': case 'wss': return port !== 443; case 'ftp': return port !== 21; case 'gopher': return port !== 70; case 'file': return false; } return port !== 0; }; /***/ }), /***/ "./node_modules/sockjs-client/lib/entry.js": /*!*************************************************!*\ !*** ./node_modules/sockjs-client/lib/entry.js ***! \*************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { "use strict"; var transportList = __webpack_require__(/*! ./transport-list */ "./node_modules/sockjs-client/lib/transport-list.js"); module.exports = __webpack_require__(/*! ./main */ "./node_modules/sockjs-client/lib/main.js")(transportList); // TODO can't get rid of this until all servers do if ('_sockjs_onload' in __webpack_require__.g) { setTimeout(__webpack_require__.g._sockjs_onload, 1); } /***/ }), /***/ "./node_modules/sockjs-client/lib/event/close.js": /*!*******************************************************!*\ !*** ./node_modules/sockjs-client/lib/event/close.js ***! \*******************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { "use strict"; var inherits = __webpack_require__(/*! inherits */ "./node_modules/inherits/inherits_browser.js"), Event = __webpack_require__(/*! ./event */ "./node_modules/sockjs-client/lib/event/event.js"); function CloseEvent() { Event.call(this); this.initEvent('close', false, false); this.wasClean = false; this.code = 0; this.reason = ''; } inherits(CloseEvent, Event); module.exports = CloseEvent; /***/ }), /***/ "./node_modules/sockjs-client/lib/event/emitter.js": /*!*********************************************************!*\ !*** ./node_modules/sockjs-client/lib/event/emitter.js ***! \*********************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { "use strict"; var inherits = __webpack_require__(/*! inherits */ "./node_modules/inherits/inherits_browser.js"), EventTarget = __webpack_require__(/*! ./eventtarget */ "./node_modules/sockjs-client/lib/event/eventtarget.js"); function EventEmitter() { EventTarget.call(this); } inherits(EventEmitter, EventTarget); EventEmitter.prototype.removeAllListeners = function (type) { if (type) { delete this._listeners[type]; } else { this._listeners = {}; } }; EventEmitter.prototype.once = function (type, listener) { var self = this, fired = false; function g() { self.removeListener(type, g); if (!fired) { fired = true; listener.apply(this, arguments); } } this.on(type, g); }; EventEmitter.prototype.emit = function () { var type = arguments[0]; var listeners = this._listeners[type]; if (!listeners) { return; } // equivalent of Array.prototype.slice.call(arguments, 1); var l = arguments.length; var args = new Array(l - 1); for (var ai = 1; ai < l; ai++) { args[ai - 1] = arguments[ai]; } for (var i = 0; i < listeners.length; i++) { listeners[i].apply(this, args); } }; EventEmitter.prototype.on = EventEmitter.prototype.addListener = EventTarget.prototype.addEventListener; EventEmitter.prototype.removeListener = EventTarget.prototype.removeEventListener; module.exports.EventEmitter = EventEmitter; /***/ }), /***/ "./node_modules/sockjs-client/lib/event/event.js": /*!*******************************************************!*\ !*** ./node_modules/sockjs-client/lib/event/event.js ***! \*******************************************************/ /***/ (function(module) { "use strict"; function Event(eventType) { this.type = eventType; } Event.prototype.initEvent = function (eventType, canBubble, cancelable) { this.type = eventType; this.bubbles = canBubble; this.cancelable = cancelable; this.timeStamp = +new Date(); return this; }; Event.prototype.stopPropagation = function () {}; Event.prototype.preventDefault = function () {}; Event.CAPTURING_PHASE = 1; Event.AT_TARGET = 2; Event.BUBBLING_PHASE = 3; module.exports = Event; /***/ }), /***/ "./node_modules/sockjs-client/lib/event/eventtarget.js": /*!*************************************************************!*\ !*** ./node_modules/sockjs-client/lib/event/eventtarget.js ***! \*************************************************************/ /***/ (function(module) { "use strict"; /* Simplified implementation of DOM2 EventTarget. * http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-EventTarget */ function EventTarget() { this._listeners = {}; } EventTarget.prototype.addEventListener = function (eventType, listener) { if (!(eventType in this._listeners)) { this._listeners[eventType] = []; } var arr = this._listeners[eventType]; // #4 if (arr.indexOf(listener) === -1) { // Make a copy so as not to interfere with a current dispatchEvent. arr = arr.concat([listener]); } this._listeners[eventType] = arr; }; EventTarget.prototype.removeEventListener = function (eventType, listener) { var arr = this._listeners[eventType]; if (!arr) { return; } var idx = arr.indexOf(listener); if (idx !== -1) { if (arr.length > 1) { // Make a copy so as not to interfere with a current dispatchEvent. this._listeners[eventType] = arr.slice(0, idx).concat(arr.slice(idx + 1)); } else { delete this._listeners[eventType]; } return; } }; EventTarget.prototype.dispatchEvent = function () { var event = arguments[0]; var t = event.type; // equivalent of Array.prototype.slice.call(arguments, 0); var args = arguments.length === 1 ? [event] : Array.apply(null, arguments); // TODO: This doesn't match the real behavior; per spec, onfoo get // their place in line from the /first/ time they're set from // non-null. Although WebKit bumps it to the end every time it's // set. if (this['on' + t]) { this['on' + t].apply(this, args); } if (t in this._listeners) { // Grab a reference to the listeners list. removeEventListener may alter the list. var listeners = this._listeners[t]; for (var i = 0; i < listeners.length; i++) { listeners[i].apply(this, args); } } }; module.exports = EventTarget; /***/ }), /***/ "./node_modules/sockjs-client/lib/event/trans-message.js": /*!***************************************************************!*\ !*** ./node_modules/sockjs-client/lib/event/trans-message.js ***! \***************************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { "use strict"; var inherits = __webpack_require__(/*! inherits */ "./node_modules/inherits/inherits_browser.js"), Event = __webpack_require__(/*! ./event */ "./node_modules/sockjs-client/lib/event/event.js"); function TransportMessageEvent(data) { Event.call(this); this.initEvent('message', false, false); this.data = data; } inherits(TransportMessageEvent, Event); module.exports = TransportMessageEvent; /***/ }), /***/ "./node_modules/sockjs-client/lib/facade.js": /*!**************************************************!*\ !*** ./node_modules/sockjs-client/lib/facade.js ***! \**************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { "use strict"; var iframeUtils = __webpack_require__(/*! ./utils/iframe */ "./node_modules/sockjs-client/lib/utils/iframe.js"); function FacadeJS(transport) { this._transport = transport; transport.on('message', this._transportMessage.bind(this)); transport.on('close', this._transportClose.bind(this)); } FacadeJS.prototype._transportClose = function (code, reason) { iframeUtils.postMessage('c', JSON.stringify([code, reason])); }; FacadeJS.prototype._transportMessage = function (frame) { iframeUtils.postMessage('t', frame); }; FacadeJS.prototype._send = function (data) { this._transport.send(data); }; FacadeJS.prototype._close = function () { this._transport.close(); this._transport.removeAllListeners(); }; module.exports = FacadeJS; /***/ }), /***/ "./node_modules/sockjs-client/lib/iframe-bootstrap.js": /*!************************************************************!*\ !*** ./node_modules/sockjs-client/lib/iframe-bootstrap.js ***! \************************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { "use strict"; var urlUtils = __webpack_require__(/*! ./utils/url */ "./node_modules/sockjs-client/lib/utils/url.js"), eventUtils = __webpack_require__(/*! ./utils/event */ "./node_modules/sockjs-client/lib/utils/event.js"), FacadeJS = __webpack_require__(/*! ./facade */ "./node_modules/sockjs-client/lib/facade.js"), InfoIframeReceiver = __webpack_require__(/*! ./info-iframe-receiver */ "./node_modules/sockjs-client/lib/info-iframe-receiver.js"), iframeUtils = __webpack_require__(/*! ./utils/iframe */ "./node_modules/sockjs-client/lib/utils/iframe.js"), loc = __webpack_require__(/*! ./location */ "./node_modules/sockjs-client/lib/location.js"); var debug = function debug() {}; if (true) { debug = __webpack_require__(/*! debug */ "./node_modules/sockjs-client/node_modules/debug/src/browser.js")('sockjs-client:iframe-bootstrap'); } module.exports = function (SockJS, availableTransports) { var transportMap = {}; availableTransports.forEach(function (at) { if (at.facadeTransport) { transportMap[at.facadeTransport.transportName] = at.facadeTransport; } }); // hard-coded for the info iframe // TODO see if we can make this more dynamic transportMap[InfoIframeReceiver.transportName] = InfoIframeReceiver; var parentOrigin; /* eslint-disable camelcase */ SockJS.bootstrap_iframe = function () { /* eslint-enable camelcase */ var facade; iframeUtils.currentWindowId = loc.hash.slice(1); var onMessage = function onMessage(e) { if (e.source !== parent) { return; } if (typeof parentOrigin === 'undefined') { parentOrigin = e.origin; } if (e.origin !== parentOrigin) { return; } var iframeMessage; try { iframeMessage = JSON.parse(e.data); } catch (ignored) { debug('bad json', e.data); return; } if (iframeMessage.windowId !== iframeUtils.currentWindowId) { return; } switch (iframeMessage.type) { case 's': var p; try { p = JSON.parse(iframeMessage.data); } catch (ignored) { debug('bad json', iframeMessage.data); break; } var version = p[0]; var transport = p[1]; var transUrl = p[2]; var baseUrl = p[3]; debug(version, transport, transUrl, baseUrl); // change this to semver logic if (version !== SockJS.version) { throw new Error('Incompatible SockJS! Main site uses:' + ' "' + version + '", the iframe:' + ' "' + SockJS.version + '".'); } if (!urlUtils.isOriginEqual(transUrl, loc.href) || !urlUtils.isOriginEqual(baseUrl, loc.href)) { throw new Error('Can\'t connect to different domain from within an ' + 'iframe. (' + loc.href + ', ' + transUrl + ', ' + baseUrl + ')'); } facade = new FacadeJS(new transportMap[transport](transUrl, baseUrl)); break; case 'm': facade._send(iframeMessage.data); break; case 'c': if (facade) { facade._close(); } facade = null; break; } }; eventUtils.attachEvent('message', onMessage); // Start iframeUtils.postMessage('s'); }; }; /***/ }), /***/ "./node_modules/sockjs-client/lib/info-ajax.js": /*!*****************************************************!*\ !*** ./node_modules/sockjs-client/lib/info-ajax.js ***! \*****************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { "use strict"; var EventEmitter = (__webpack_require__(/*! events */ "./node_modules/sockjs-client/lib/event/emitter.js").EventEmitter), inherits = __webpack_require__(/*! inherits */ "./node_modules/inherits/inherits_browser.js"), objectUtils = __webpack_require__(/*! ./utils/object */ "./node_modules/sockjs-client/lib/utils/object.js"); var debug = function debug() {}; if (true) { debug = __webpack_require__(/*! debug */ "./node_modules/sockjs-client/node_modules/debug/src/browser.js")('sockjs-client:info-ajax'); } function InfoAjax(url, AjaxObject) { EventEmitter.call(this); var self = this; var t0 = +new Date(); this.xo = new AjaxObject('GET', url); this.xo.once('finish', function (status, text) { var info, rtt; if (status === 200) { rtt = +new Date() - t0; if (text) { try { info = JSON.parse(text); } catch (e) { debug('bad json', text); } } if (!objectUtils.isObject(info)) { info = {}; } } self.emit('finish', info, rtt); self.removeAllListeners(); }); } inherits(InfoAjax, EventEmitter); InfoAjax.prototype.close = function () { this.removeAllListeners(); this.xo.close(); }; module.exports = InfoAjax; /***/ }), /***/ "./node_modules/sockjs-client/lib/info-iframe-receiver.js": /*!****************************************************************!*\ !*** ./node_modules/sockjs-client/lib/info-iframe-receiver.js ***! \****************************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { "use strict"; var inherits = __webpack_require__(/*! inherits */ "./node_modules/inherits/inherits_browser.js"), EventEmitter = (__webpack_require__(/*! events */ "./node_modules/sockjs-client/lib/event/emitter.js").EventEmitter), XHRLocalObject = __webpack_require__(/*! ./transport/sender/xhr-local */ "./node_modules/sockjs-client/lib/transport/sender/xhr-local.js"), InfoAjax = __webpack_require__(/*! ./info-ajax */ "./node_modules/sockjs-client/lib/info-ajax.js"); function InfoReceiverIframe(transUrl) { var self = this; EventEmitter.call(this); this.ir = new InfoAjax(transUrl, XHRLocalObject); this.ir.once('finish', function (info, rtt) { self.ir = null; self.emit('message', JSON.stringify([info, rtt])); }); } inherits(InfoReceiverIframe, EventEmitter); InfoReceiverIframe.transportName = 'iframe-info-receiver'; InfoReceiverIframe.prototype.close = function () { if (this.ir) { this.ir.close(); this.ir = null; } this.removeAllListeners(); }; module.exports = InfoReceiverIframe; /***/ }), /***/ "./node_modules/sockjs-client/lib/info-iframe.js": /*!*******************************************************!*\ !*** ./node_modules/sockjs-client/lib/info-iframe.js ***! \*******************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { "use strict"; var EventEmitter = (__webpack_require__(/*! events */ "./node_modules/sockjs-client/lib/event/emitter.js").EventEmitter), inherits = __webpack_require__(/*! inherits */ "./node_modules/inherits/inherits_browser.js"), utils = __webpack_require__(/*! ./utils/event */ "./node_modules/sockjs-client/lib/utils/event.js"), IframeTransport = __webpack_require__(/*! ./transport/iframe */ "./node_modules/sockjs-client/lib/transport/iframe.js"), InfoReceiverIframe = __webpack_require__(/*! ./info-iframe-receiver */ "./node_modules/sockjs-client/lib/info-iframe-receiver.js"); var debug = function debug() {}; if (true) { debug = __webpack_require__(/*! debug */ "./node_modules/sockjs-client/node_modules/debug/src/browser.js")('sockjs-client:info-iframe'); } function InfoIframe(baseUrl, url) { var self = this; EventEmitter.call(this); var go = function go() { var ifr = self.ifr = new IframeTransport(InfoReceiverIframe.transportName, url, baseUrl); ifr.once('message', function (msg) { if (msg) { var d; try { d = JSON.parse(msg); } catch (e) { debug('bad json', msg); self.emit('finish'); self.close(); return; } var info = d[0], rtt = d[1]; self.emit('finish', info, rtt); } self.close(); }); ifr.once('close', function () { self.emit('finish'); self.close(); }); }; // TODO this seems the same as the 'needBody' from transports if (!__webpack_require__.g.document.body) { utils.attachEvent('load', go); } else { go(); } } inherits(InfoIframe, EventEmitter); InfoIframe.enabled = function () { return IframeTransport.enabled(); }; InfoIframe.prototype.close = function () { if (this.ifr) { this.ifr.close(); } this.removeAllListeners(); this.ifr = null; }; module.exports = InfoIframe; /***/ }), /***/ "./node_modules/sockjs-client/lib/info-receiver.js": /*!*********************************************************!*\ !*** ./node_modules/sockjs-client/lib/info-receiver.js ***! \*********************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { "use strict"; var EventEmitter = (__webpack_require__(/*! events */ "./node_modules/sockjs-client/lib/event/emitter.js").EventEmitter), inherits = __webpack_require__(/*! inherits */ "./node_modules/inherits/inherits_browser.js"), urlUtils = __webpack_require__(/*! ./utils/url */ "./node_modules/sockjs-client/lib/utils/url.js"), XDR = __webpack_require__(/*! ./transport/sender/xdr */ "./node_modules/sockjs-client/lib/transport/sender/xdr.js"), XHRCors = __webpack_require__(/*! ./transport/sender/xhr-cors */ "./node_modules/sockjs-client/lib/transport/sender/xhr-cors.js"), XHRLocal = __webpack_require__(/*! ./transport/sender/xhr-local */ "./node_modules/sockjs-client/lib/transport/sender/xhr-local.js"), XHRFake = __webpack_require__(/*! ./transport/sender/xhr-fake */ "./node_modules/sockjs-client/lib/transport/sender/xhr-fake.js"), InfoIframe = __webpack_require__(/*! ./info-iframe */ "./node_modules/sockjs-client/lib/info-iframe.js"), InfoAjax = __webpack_require__(/*! ./info-ajax */ "./node_modules/sockjs-client/lib/info-ajax.js"); var debug = function debug() {}; if (true) { debug = __webpack_require__(/*! debug */ "./node_modules/sockjs-client/node_modules/debug/src/browser.js")('sockjs-client:info-receiver'); } function InfoReceiver(baseUrl, urlInfo) { debug(baseUrl); var self = this; EventEmitter.call(this); setTimeout(function () { self.doXhr(baseUrl, urlInfo); }, 0); } inherits(InfoReceiver, EventEmitter); // TODO this is currently ignoring the list of available transports and the whitelist InfoReceiver._getReceiver = function (baseUrl, url, urlInfo) { // determine method of CORS support (if needed) if (urlInfo.sameOrigin) { return new InfoAjax(url, XHRLocal); } if (XHRCors.enabled) { return new InfoAjax(url, XHRCors); } if (XDR.enabled && urlInfo.sameScheme) { return new InfoAjax(url, XDR); } if (InfoIframe.enabled()) { return new InfoIframe(baseUrl, url); } return new InfoAjax(url, XHRFake); }; InfoReceiver.prototype.doXhr = function (baseUrl, urlInfo) { var self = this, url = urlUtils.addPath(baseUrl, '/info'); debug('doXhr', url); this.xo = InfoReceiver._getReceiver(baseUrl, url, urlInfo); this.timeoutRef = setTimeout(function () { debug('timeout'); self._cleanup(false); self.emit('finish'); }, InfoReceiver.timeout); this.xo.once('finish', function (info, rtt) { debug('finish', info, rtt); self._cleanup(true); self.emit('finish', info, rtt); }); }; InfoReceiver.prototype._cleanup = function (wasClean) { debug('_cleanup'); clearTimeout(this.timeoutRef); this.timeoutRef = null; if (!wasClean && this.xo) { this.xo.close(); } this.xo = null; }; InfoReceiver.prototype.close = function () { debug('close'); this.removeAllListeners(); this._cleanup(false); }; InfoReceiver.timeout = 8000; module.exports = InfoReceiver; /***/ }), /***/ "./node_modules/sockjs-client/lib/location.js": /*!****************************************************!*\ !*** ./node_modules/sockjs-client/lib/location.js ***! \****************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { "use strict"; module.exports = __webpack_require__.g.location || { origin: 'http://localhost:80', protocol: 'http:', host: 'localhost', port: 80, href: 'http://localhost/', hash: '' }; /***/ }), /***/ "./node_modules/sockjs-client/lib/main.js": /*!************************************************!*\ !*** ./node_modules/sockjs-client/lib/main.js ***! \************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { "use strict"; __webpack_require__(/*! ./shims */ "./node_modules/sockjs-client/lib/shims.js"); var URL = __webpack_require__(/*! url-parse */ "./node_modules/url-parse/index.js"), inherits = __webpack_require__(/*! inherits */ "./node_modules/inherits/inherits_browser.js"), random = __webpack_require__(/*! ./utils/random */ "./node_modules/sockjs-client/lib/utils/random.js"), escape = __webpack_require__(/*! ./utils/escape */ "./node_modules/sockjs-client/lib/utils/escape.js"), urlUtils = __webpack_require__(/*! ./utils/url */ "./node_modules/sockjs-client/lib/utils/url.js"), eventUtils = __webpack_require__(/*! ./utils/event */ "./node_modules/sockjs-client/lib/utils/event.js"), transport = __webpack_require__(/*! ./utils/transport */ "./node_modules/sockjs-client/lib/utils/transport.js"), objectUtils = __webpack_require__(/*! ./utils/object */ "./node_modules/sockjs-client/lib/utils/object.js"), browser = __webpack_require__(/*! ./utils/browser */ "./node_modules/sockjs-client/lib/utils/browser.js"), log = __webpack_require__(/*! ./utils/log */ "./node_modules/sockjs-client/lib/utils/log.js"), Event = __webpack_require__(/*! ./event/event */ "./node_modules/sockjs-client/lib/event/event.js"), EventTarget = __webpack_require__(/*! ./event/eventtarget */ "./node_modules/sockjs-client/lib/event/eventtarget.js"), loc = __webpack_require__(/*! ./location */ "./node_modules/sockjs-client/lib/location.js"), CloseEvent = __webpack_require__(/*! ./event/close */ "./node_modules/sockjs-client/lib/event/close.js"), TransportMessageEvent = __webpack_require__(/*! ./event/trans-message */ "./node_modules/sockjs-client/lib/event/trans-message.js"), InfoReceiver = __webpack_require__(/*! ./info-receiver */ "./node_modules/sockjs-client/lib/info-receiver.js"); var debug = function debug() {}; if (true) { debug = __webpack_require__(/*! debug */ "./node_modules/sockjs-client/node_modules/debug/src/browser.js")('sockjs-client:main'); } var transports; // follow constructor steps defined at http://dev.w3.org/html5/websockets/#the-websocket-interface function SockJS(url, protocols, options) { if (!(this instanceof SockJS)) { return new SockJS(url, protocols, options); } if (arguments.length < 1) { throw new TypeError("Failed to construct 'SockJS: 1 argument required, but only 0 present"); } EventTarget.call(this); this.readyState = SockJS.CONNECTING; this.extensions = ''; this.protocol = ''; // non-standard extension options = options || {}; if (options.protocols_whitelist) { log.warn("'protocols_whitelist' is DEPRECATED. Use 'transports' instead."); } this._transportsWhitelist = options.transports; this._transportOptions = options.transportOptions || {}; this._timeout = options.timeout || 0; var sessionId = options.sessionId || 8; if (typeof sessionId === 'function') { this._generateSessionId = sessionId; } else if (typeof sessionId === 'number') { this._generateSessionId = function () { return random.string(sessionId); }; } else { throw new TypeError('If sessionId is used in the options, it needs to be a number or a function.'); } this._server = options.server || random.numberString(1000); // Step 1 of WS spec - parse and validate the url. Issue #8 var parsedUrl = new URL(url); if (!parsedUrl.host || !parsedUrl.protocol) { throw new SyntaxError("The URL '" + url + "' is invalid"); } else if (parsedUrl.hash) { throw new SyntaxError('The URL must not contain a fragment'); } else if (parsedUrl.protocol !== 'http:' && parsedUrl.protocol !== 'https:') { throw new SyntaxError("The URL's scheme must be either 'http:' or 'https:'. '" + parsedUrl.protocol + "' is not allowed."); } var secure = parsedUrl.protocol === 'https:'; // Step 2 - don't allow secure origin with an insecure protocol if (loc.protocol === 'https:' && !secure) { // exception is 127.0.0.0/8 and ::1 urls if (!urlUtils.isLoopbackAddr(parsedUrl.hostname)) { throw new Error('SecurityError: An insecure SockJS connection may not be initiated from a page loaded over HTTPS'); } } // Step 3 - check port access - no need here // Step 4 - parse protocols argument if (!protocols) { protocols = []; } else if (!Array.isArray(protocols)) { protocols = [protocols]; } // Step 5 - check protocols argument var sortedProtocols = protocols.sort(); sortedProtocols.forEach(function (proto, i) { if (!proto) { throw new SyntaxError("The protocols entry '" + proto + "' is invalid."); } if (i < sortedProtocols.length - 1 && proto === sortedProtocols[i + 1]) { throw new SyntaxError("The protocols entry '" + proto + "' is duplicated."); } }); // Step 6 - convert origin var o = urlUtils.getOrigin(loc.href); this._origin = o ? o.toLowerCase() : null; // remove the trailing slash parsedUrl.set('pathname', parsedUrl.pathname.replace(/\/+$/, '')); // store the sanitized url this.url = parsedUrl.href; debug('using url', this.url); // Step 7 - start connection in background // obtain server info // http://sockjs.github.io/sockjs-protocol/sockjs-protocol-0.3.3.html#section-26 this._urlInfo = { nullOrigin: !browser.hasDomain(), sameOrigin: urlUtils.isOriginEqual(this.url, loc.href), sameScheme: urlUtils.isSchemeEqual(this.url, loc.href) }; this._ir = new InfoReceiver(this.url, this._urlInfo); this._ir.once('finish', this._receiveInfo.bind(this)); } inherits(SockJS, EventTarget); function userSetCode(code) { return code === 1000 || code >= 3000 && code <= 4999; } SockJS.prototype.close = function (code, reason) { // Step 1 if (code && !userSetCode(code)) { throw new Error('InvalidAccessError: Invalid code'); } // Step 2.4 states the max is 123 bytes, but we are just checking length if (reason && reason.length > 123) { throw new SyntaxError('reason argument has an invalid length'); } // Step 3.1 if (this.readyState === SockJS.CLOSING || this.readyState === SockJS.CLOSED) { return; } // TODO look at docs to determine how to set this var wasClean = true; this._close(code || 1000, reason || 'Normal closure', wasClean); }; SockJS.prototype.send = function (data) { // #13 - convert anything non-string to string // TODO this currently turns objects into [object Object] if (typeof data !== 'string') { data = '' + data; } if (this.readyState === SockJS.CONNECTING) { throw new Error('InvalidStateError: The connection has not been established yet'); } if (this.readyState !== SockJS.OPEN) { return; } this._transport.send(escape.quote(data)); }; SockJS.version = __webpack_require__(/*! ./version */ "./node_modules/sockjs-client/lib/version.js"); SockJS.CONNECTING = 0; SockJS.OPEN = 1; SockJS.CLOSING = 2; SockJS.CLOSED = 3; SockJS.prototype._receiveInfo = function (info, rtt) { debug('_receiveInfo', rtt); this._ir = null; if (!info) { this._close(1002, 'Cannot connect to server'); return; } // establish a round-trip timeout (RTO) based on the // round-trip time (RTT) this._rto = this.countRTO(rtt); // allow server to override url used for the actual transport this._transUrl = info.base_url ? info.base_url : this.url; info = objectUtils.extend(info, this._urlInfo); debug('info', info); // determine list of desired and supported transports var enabledTransports = transports.filterToEnabled(this._transportsWhitelist, info); this._transports = enabledTransports.main; debug(this._transports.length + ' enabled transports'); this._connect(); }; SockJS.prototype._connect = function () { for (var Transport = this._transports.shift(); Transport; Transport = this._transports.shift()) { debug('attempt', Transport.transportName); if (Transport.needBody) { if (!__webpack_require__.g.document.body || typeof __webpack_require__.g.document.readyState !== 'undefined' && __webpack_require__.g.document.readyState !== 'complete' && __webpack_require__.g.document.readyState !== 'interactive') { debug('waiting for body'); this._transports.unshift(Transport); eventUtils.attachEvent('load', this._connect.bind(this)); return; } } // calculate timeout based on RTO and round trips. Default to 5s var timeoutMs = Math.max(this._timeout, this._rto * Transport.roundTrips || 5000); this._transportTimeoutId = setTimeout(this._transportTimeout.bind(this), timeoutMs); debug('using timeout', timeoutMs); var transportUrl = urlUtils.addPath(this._transUrl, '/' + this._server + '/' + this._generateSessionId()); var options = this._transportOptions[Transport.transportName]; debug('transport url', transportUrl); var transportObj = new Transport(transportUrl, this._transUrl, options); transportObj.on('message', this._transportMessage.bind(this)); transportObj.once('close', this._transportClose.bind(this)); transportObj.transportName = Transport.transportName; this._transport = transportObj; return; } this._close(2000, 'All transports failed', false); }; SockJS.prototype._transportTimeout = function () { debug('_transportTimeout'); if (this.readyState === SockJS.CONNECTING) { if (this._transport) { this._transport.close(); } this._transportClose(2007, 'Transport timed out'); } }; SockJS.prototype._transportMessage = function (msg) { debug('_transportMessage', msg); var self = this, type = msg.slice(0, 1), content = msg.slice(1), payload; // first check for messages that don't need a payload switch (type) { case 'o': this._open(); return; case 'h': this.dispatchEvent(new Event('heartbeat')); debug('heartbeat', this.transport); return; } if (content) { try { payload = JSON.parse(content); } catch (e) { debug('bad json', content); } } if (typeof payload === 'undefined') { debug('empty payload', content); return; } switch (type) { case 'a': if (Array.isArray(payload)) { payload.forEach(function (p) { debug('message', self.transport, p); self.dispatchEvent(new TransportMessageEvent(p)); }); } break; case 'm': debug('message', this.transport, payload); this.dispatchEvent(new TransportMessageEvent(payload)); break; case 'c': if (Array.isArray(payload) && payload.length === 2) { this._close(payload[0], payload[1], true); } break; } }; SockJS.prototype._transportClose = function (code, reason) { debug('_transportClose', this.transport, code, reason); if (this._transport) { this._transport.removeAllListeners(); this._transport = null; this.transport = null; } if (!userSetCode(code) && code !== 2000 && this.readyState === SockJS.CONNECTING) { this._connect(); return; } this._close(code, reason); }; SockJS.prototype._open = function () { debug('_open', this._transport && this._transport.transportName, this.readyState); if (this.readyState === SockJS.CONNECTING) { if (this._transportTimeoutId) { clearTimeout(this._transportTimeoutId); this._transportTimeoutId = null; } this.readyState = SockJS.OPEN; this.transport = this._transport.transportName; this.dispatchEvent(new Event('open')); debug('connected', this.transport); } else { // The server might have been restarted, and lost track of our // connection. this._close(1006, 'Server lost session'); } }; SockJS.prototype._close = function (code, reason, wasClean) { debug('_close', this.transport, code, reason, wasClean, this.readyState); var forceFail = false; if (this._ir) { forceFail = true; this._ir.close(); this._ir = null; } if (this._transport) { this._transport.close(); this._transport = null; this.transport = null; } if (this.readyState === SockJS.CLOSED) { throw new Error('InvalidStateError: SockJS has already been closed'); } this.readyState = SockJS.CLOSING; setTimeout(function () { this.readyState = SockJS.CLOSED; if (forceFail) { this.dispatchEvent(new Event('error')); } var e = new CloseEvent('close'); e.wasClean = wasClean || false; e.code = code || 1000; e.reason = reason; this.dispatchEvent(e); this.onmessage = this.onclose = this.onerror = null; debug('disconnected'); }.bind(this), 0); }; // See: http://www.erg.abdn.ac.uk/~gerrit/dccp/notes/ccid2/rto_estimator/ // and RFC 2988. SockJS.prototype.countRTO = function (rtt) { // In a local environment, when using IE8/9 and the `jsonp-polling` // transport the time needed to establish a connection (the time that pass // from the opening of the transport to the call of `_dispatchOpen`) is // around 200msec (the lower bound used in the article above) and this // causes spurious timeouts. For this reason we calculate a value slightly // larger than that used in the article. if (rtt > 100) { return 4 * rtt; // rto > 400msec } return 300 + rtt; // 300msec < rto <= 400msec }; module.exports = function (availableTransports) { transports = transport(availableTransports); __webpack_require__(/*! ./iframe-bootstrap */ "./node_modules/sockjs-client/lib/iframe-bootstrap.js")(SockJS, availableTransports); return SockJS; }; /***/ }), /***/ "./node_modules/sockjs-client/lib/shims.js": /*!*************************************************!*\ !*** ./node_modules/sockjs-client/lib/shims.js ***! \*************************************************/ /***/ (function() { "use strict"; /* eslint-disable */ /* jscs: disable */ // pulled specific shims from https://github.com/es-shims/es5-shim function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } var ArrayPrototype = Array.prototype; var ObjectPrototype = Object.prototype; var FunctionPrototype = Function.prototype; var StringPrototype = String.prototype; var array_slice = ArrayPrototype.slice; var _toString = ObjectPrototype.toString; var isFunction = function isFunction(val) { return ObjectPrototype.toString.call(val) === '[object Function]'; }; var isArray = function isArray(obj) { return _toString.call(obj) === '[object Array]'; }; var isString = function isString(obj) { return _toString.call(obj) === '[object String]'; }; var supportsDescriptors = Object.defineProperty && function () { try { Object.defineProperty({}, 'x', {}); return true; } catch (e) { /* this is ES3 */ return false; } }(); // Define configurable, writable and non-enumerable props // if they don't exist. var defineProperty; if (supportsDescriptors) { defineProperty = function defineProperty(object, name, method, forceAssign) { if (!forceAssign && name in object) { return; } Object.defineProperty(object, name, { configurable: true, enumerable: false, writable: true, value: method }); }; } else { defineProperty = function defineProperty(object, name, method, forceAssign) { if (!forceAssign && name in object) { return; } object[name] = method; }; } var defineProperties = function defineProperties(object, map, forceAssign) { for (var name in map) { if (ObjectPrototype.hasOwnProperty.call(map, name)) { defineProperty(object, name, map[name], forceAssign); } } }; var toObject = function toObject(o) { if (o == null) { // this matches both null and undefined throw new TypeError("can't convert " + o + ' to object'); } return Object(o); }; // // Util // ====== // // ES5 9.4 // http://es5.github.com/#x9.4 // http://jsperf.com/to-integer function toInteger(num) { var n = +num; if (n !== n) { // isNaN n = 0; } else if (n !== 0 && n !== 1 / 0 && n !== -(1 / 0)) { n = (n > 0 || -1) * Math.floor(Math.abs(n)); } return n; } function ToUint32(x) { return x >>> 0; } // // Function // ======== // // ES-5 15.3.4.5 // http://es5.github.com/#x15.3.4.5 function Empty() {} defineProperties(FunctionPrototype, { bind: function bind(that) { // .length is 1 // 1. Let Target be the this value. var target = this; // 2. If IsCallable(Target) is false, throw a TypeError exception. if (!isFunction(target)) { throw new TypeError('Function.prototype.bind called on incompatible ' + target); } // 3. Let A be a new (possibly empty) internal list of all of the // argument values provided after thisArg (arg1, arg2 etc), in order. // XXX slicedArgs will stand in for "A" if used var args = array_slice.call(arguments, 1); // for normal call // 4. Let F be a new native ECMAScript object. // 11. Set the [[Prototype]] internal property of F to the standard // built-in Function prototype object as specified in 15.3.3.1. // 12. Set the [[Call]] internal property of F as described in // 15.3.4.5.1. // 13. Set the [[Construct]] internal property of F as described in // 15.3.4.5.2. // 14. Set the [[HasInstance]] internal property of F as described in // 15.3.4.5.3. var binder = function binder() { if (this instanceof bound) { // 15.3.4.5.2 [[Construct]] // When the [[Construct]] internal method of a function object, // F that was created using the bind function is called with a // list of arguments ExtraArgs, the following steps are taken: // 1. Let target be the value of F's [[TargetFunction]] // internal property. // 2. If target has no [[Construct]] internal method, a // TypeError exception is thrown. // 3. Let boundArgs be the value of F's [[BoundArgs]] internal // property. // 4. Let args be a new list containing the same values as the // list boundArgs in the same order followed by the same // values as the list ExtraArgs in the same order. // 5. Return the result of calling the [[Construct]] internal // method of target providing args as the arguments. var result = target.apply(this, args.concat(array_slice.call(arguments))); if (Object(result) === result) { return result; } return this; } else { // 15.3.4.5.1 [[Call]] // When the [[Call]] internal method of a function object, F, // which was created using the bind function is called with a // this value and a list of arguments ExtraArgs, the following // steps are taken: // 1. Let boundArgs be the value of F's [[BoundArgs]] internal // property. // 2. Let boundThis be the value of F's [[BoundThis]] internal // property. // 3. Let target be the value of F's [[TargetFunction]] internal // property. // 4. Let args be a new list containing the same values as the // list boundArgs in the same order followed by the same // values as the list ExtraArgs in the same order. // 5. Return the result of calling the [[Call]] internal method // of target providing boundThis as the this value and // providing args as the arguments. // equiv: target.call(this, ...boundArgs, ...args) return target.apply(that, args.concat(array_slice.call(arguments))); } }; // 15. If the [[Class]] internal property of Target is "Function", then // a. Let L be the length property of Target minus the length of A. // b. Set the length own property of F to either 0 or L, whichever is // larger. // 16. Else set the length own property of F to 0. var boundLength = Math.max(0, target.length - args.length); // 17. Set the attributes of the length own property of F to the values // specified in 15.3.5.1. var boundArgs = []; for (var i = 0; i < boundLength; i++) { boundArgs.push('$' + i); } // XXX Build a dynamic function with desired amount of argument