{ "version": 3, "sources": [ "node_modules/browserify/node_modules/browser-pack/_prelude.js", "/Users/johann/Development/network.js/lib/EventDispatcher.js", "/Users/johann/Development/network.js/lib/Http/BandwidthModule.js", "/Users/johann/Development/network.js/lib/Http/HttpModule.js", "/Users/johann/Development/network.js/lib/Http/LatencyModule.js", "/Users/johann/Development/network.js/lib/Network.js", "/Users/johann/Development/network.js/lib/Timing.js", "/Users/johann/Development/network.js/utils/decorators.js", "/Users/johann/Development/network.js/utils/helpers.js" ], "names": [], "mappings": "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", "file": "generated.js", "sourceRoot": "", "sourcesContent": [ "(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})", "import {enumerable} from '../utils/decorators';\n\n/**\n * A callback used as an event handler.\n * @public\n * @callback EventDispatcher~eventHandler\n * @param {...*} args The extra parameters provided to the `trigger` method.\n * @returns {?boolean} If `false` is explicitly returned, the `trigger` method will return `false`.\n */\n\n/**\n * @class EventDispatcher\n */\nexport default class EventDispatcher {\n\n /**\n * All the registered event callbacks, organized by events.\n * @private\n * @member {Object} EventDispatcher#_eventCallbacks\n */\n @enumerable(false)\n _eventCallbacks = {};\n\n /**\n * Attach a callback to one or more events.\n * @public\n * @method EventDispatcher#on\n * @param {string|string[]} events One or multiple event names.\n * @param {EventDispatcher~eventHandler} callback An event handler.\n * @returns {EventDispatcher}\n */\n on(events, callback)\n {\n events = Array.isArray(events) ? events : [events];\n\n events.forEach(event => {\n var eventCallbacks = this._eventCallbacks[event] = this._eventCallbacks[event] || [];\n\n // If the callback isn't already registered, store it.\n if (!~eventCallbacks.indexOf(callback)) {\n eventCallbacks.push(callback);\n }\n });\n\n return this;\n }\n\n /**\n * Detach a callback from one or more events.\n * @public\n * @method EventDispatcher#off\n * @param {string|string[]} events One or multiple event names.\n * @param {EventDispatcher~eventHandler} callback An event handler.\n * @returns {EventDispatcher}\n */\n off(events, callback = null)\n {\n events = Array.isArray(events) ? events : [events];\n\n events.forEach(event => {\n var eventCallbacks = this._eventCallbacks[event];\n\n // If there is no specified callback, simply delete all the callbacks binded to the provided event.\n if (!callback && eventCallbacks) {\n delete this._eventCallbacks[event];\n } else {\n var callbackIndex = eventCallbacks ? eventCallbacks.indexOf(callback) : -1;\n\n // If the callback is registered, remove it from the array.\n if (callbackIndex != -1) {\n eventCallbacks.splice(callbackIndex, 1);\n }\n }\n });\n\n return this;\n }\n\n /**\n * Trigger an event.\n * @public\n * @method EventDispatcher#trigger\n * @param {string} event An event name.\n * @param {...*} extraParameters Some extra parameters to pass to the event handlers.\n * @returns {boolean} Returns `false` if one of the event handlers explicitly returned `false`.\n */\n trigger(event, ...extraParameters)\n {\n var eventCallbacks = this._eventCallbacks[event] || [];\n\n // A callback can return a boolean value which will be logically compared to the other callbacks values before\n // being returned by the trigger() method. This allows a callback to send a \"signal\" to the caller, like\n // cancelling an action.\n var returnValue = true;\n\n eventCallbacks.forEach(eventCallback => {\n // A callback must explicitly return false if it wants the trigger() method to return false, undefined will\n // not work. This avoids crappy callbacks to mess up with the triggering system.\n var value = eventCallback(...extraParameters);\n value = value !== false ? true : false;\n\n returnValue = returnValue && value; // Compare the result of the callback to the actual return value\n });\n\n return returnValue;\n }\n\n}\n", "import HttpModule from './HttpModule';\nimport Timing from '../Timing';\nimport {defer} from '../../utils/helpers';\nimport {enumerable} from '../../utils/decorators';\n\n/**\n * @public\n * @typedef {Object} BandwidthModule~settingsObject\n * @extends HttpModule~settingsObject\n * @property {Object} data\n * @property {number} data.size The amount of data to initially use.\n * @property {number} [data.multiplier=2] If the measure period can't reach the delay defined in the settings, the data amount is multiplied by the following value.\n */\n\n/**\n * Apply a new set of custom settings.\n * @public\n * @method BandwidthModule#settings\n * @param {BandwidthModule~settingsObject} settings A set of custom settings.\n * @returns {BandwidthModule}\n */\n/**\n * Return the current set of settings.\n * @public\n * @method BandwidthModule#settings^2\n * @returns {BandwidthModule~settingsObject}\n */\n\n/**\n * @class BandwidthModule\n * @extends HttpModule\n * @param {string} loadingType The loading type, `upload` or `download`.\n * @param {BandwidthModule~settingsObject} [settings={}] A set of custom settings.\n */\nexport default class BandwidthModule extends HttpModule {\n\n /**\n *\n * @private\n * @member {string} BandwidthModule#_loadingType\n */\n @enumerable(false)\n _loadingType = undefined;\n\n /**\n *\n * @private\n * @member {boolean} BandwidthModule#_intendedEnd\n */\n @enumerable(false)\n _intendedEnd = false;\n\n /**\n *\n * @private\n * @member {boolean} BandwidthModule#_isRestarting\n */\n @enumerable(false)\n _isRestarting = false;\n\n /**\n * Tracks the value of the `loaded` property for each progress event.\n * @private\n * @member {?number} BandwidthModule#_lastLoadedValue\n */\n @enumerable(false)\n _lastLoadedValue = null;\n\n /**\n * The recorded measures of speed.\n * @private\n * @member {number[]} BandwidthModule#_speedRecords\n */\n @enumerable(false)\n _speedRecords = [];\n\n /**\n * The average speed.\n * @private\n * @member {number} BandwidthModule#_avgSpeed\n */\n @enumerable(false)\n _avgSpeed = undefined;\n\n /**\n * The ID of the current request.\n * @private\n * @member {number} BandwidthModule#_requestID\n */\n @enumerable(false)\n _requestID = 0;\n\n /**\n * The ID of the current progress event.\n * @private\n * @member {number} BandwidthModule#_progressID\n */\n @enumerable(false)\n _progressID = 0;\n\n /**\n * Defines if measures have started.\n * @private\n * @member {boolean} BandwidthModule#_started\n */\n @enumerable(false)\n _started = false;\n\n /**\n * Defines if the current progress event is the first one triggered for the current request.\n * @private\n * @member {boolean} BandwidthModule#_firstProgress\n */\n @enumerable(false)\n _firstProgress = true;\n\n /**\n * @private\n * @member {Defer} BandwidthModule#_deferredProgress\n */\n @enumerable(false)\n _deferredProgress = undefined;\n\n /**\n * Unique labels for each request, exclusively used to make measures.\n * @private\n * @member {Object} BandwidthModule#_timingLabels\n * @property {?string} start\n * @property {?string} progress\n * @property {?string} end\n * @property {?string} measure\n */\n @enumerable(false)\n _timingLabels = {\n start: null,\n progress: null,\n end: null,\n measure: null\n };\n\n constructor(loadingType, settings = {})\n {\n loadingType = (~['upload', 'download'].indexOf(loadingType)) ? loadingType : 'download';\n\n super(loadingType);\n\n this._extendDefaultSettings({\n data: {\n // 2 MB for upload, 10 MB for download\n size: loadingType == 'upload' ? (2 * 1024 * 1024) : (10 * 1024 * 1024),\n multiplier: 2\n }\n }).settings(settings);\n\n this._loadingType = loadingType;\n\n // Bind to XHR events\n this.on('xhr-upload-loadstart', () => Timing.mark(this._timingLabels.start));\n this.on('xhr-readystatechange', xhr => {\n if (!this._started && xhr.readyState == XMLHttpRequest.LOADING) {\n Timing.mark(this._timingLabels.start);\n this._started = true;\n }\n });\n\n var eventsPrefix = (loadingType == 'upload') ? 'xhr-upload' : 'xhr';\n\n this.on(`${eventsPrefix}-progress`, (xhr, event) => this._progress(event));\n this.on(`${eventsPrefix}-timeout`, () => this._timeout());\n this.on(`${eventsPrefix}-loadend`, () => this._end());\n }\n\n /**\n * Start requesting the server to make measures.\n * @public\n * @method BandwidthModule#start\n * @returns {BandwidthModule}\n */\n start()\n {\n var loadingType = this._loadingType,\n dataSettings = this.settings().data,\n reqID = this._requestID++;\n\n this._intendedEnd = false;\n this._lastLoadedValue = null;\n this._speedRecords = [];\n this._started = false;\n this._firstProgress = true;\n this._deferredProgress = defer();\n\n // Trigger the start event\n if (!this._isRestarting) {\n this.trigger('start', dataSettings.size);\n }\n\n // Create unique timing labels for the new request\n var labels = this._timingLabels;\n labels.start = `${loadingType}-${reqID}-start`;\n labels.progress = `${loadingType}-${reqID}-progress`;\n labels.end = `${loadingType}-${reqID}-end`;\n labels.measure = `${loadingType}-${reqID}-measure`;\n\n // Generate some random data to upload to the server. Here we're using a Blob instead of an ArrayBuffer because\n // of a bug in Chrome (tested in v33.0.1750.146), causing a freeze of the page while trying to directly upload\n // an ArrayBuffer (through an ArrayBufferView). The freeze lasts nearly 4.5s for 10MB of data. Using a Blob\n // seems to solve the problem.\n var blob = (loadingType == 'upload') ? new Blob([new ArrayBuffer(dataSettings.size)]) : null;\n\n var type = (loadingType == 'download') ? 'GET' : 'POST';\n\n // Initiate and send a new request\n this._newRequest(type, {\n size: dataSettings.size\n })._sendRequest(blob);\n\n return this;\n }\n\n /**\n * Abort the measures.\n * @public\n * @method BandwidthModule#abort\n * @returns {BandwidthModule}\n */\n abort()\n {\n this._intendedEnd = true;\n return this._abort();\n }\n\n /**\n * Make bandwidth measures for the current request.\n * @private\n * @method BandwidthModule#_progress\n * @param {ProgressEvent} event The event associated with the progress event of the current request.\n * @returns {BandwidthModule}\n */\n _progress(event)\n {\n // Ignore the first progress event, it generally contributes to get incoherent values.\n if (this._firstProgress) return this._firstProgress = false;\n\n // Execute the previous progress trigger\n this._deferredProgress.run();\n\n var labels = this._timingLabels,\n progressID = this._progressID++,\n markLabel = `${labels.progress}-${progressID}`,\n loaded = event.loaded;\n\n Timing.mark(markLabel);\n\n // Measure the average speed (B/s) since the request started\n var avgMeasure = Timing.measure(\n `${labels.measure}-avg-${progressID}`,\n labels.start,\n markLabel\n ),\n avgSpeed = loaded / avgMeasure * 1000;\n\n var instantSpeed;\n\n if (this._lastLoadedValue === null) { // We are executing the first progress event of the current request\n instantSpeed = avgSpeed; // The instant speed of the first progress event is equal to the average one\n } else {\n // Measure the instant speed (B/s), which defines the speed between two progress events.\n var instantMeasure = Timing.measure(\n `${labels.measure}-instant-${progressID}`,\n // Set the mark of the previous progress event as the starting point\n `${labels.progress}-${progressID - 1}`,\n markLabel\n );\n instantSpeed = (loaded - this._lastLoadedValue) / instantMeasure * 1000;\n }\n\n // Save the `loaded` property of the event for the next progress event\n this._lastLoadedValue = loaded;\n\n // Defer measures saving and event triggering, this allows to cancel the last progress event, which can generate\n // incoherent values.\n this._deferredProgress = defer(() => {\n this._avgSpeed = avgSpeed;\n this._speedRecords.push(instantSpeed);\n\n this.trigger('progress', avgSpeed, instantSpeed);\n });\n\n return this;\n }\n\n /**\n * Mark the current request as entirely finished (this means it ended after a time out).\n * @private\n * @method BandwidthModule#_timeout\n * @returns {BandwidthModule}\n */\n _timeout()\n {\n this._intendedEnd = true;\n return this;\n }\n\n /**\n * End the measures.\n * @private\n * @method BandwidthModule#_end\n * @returns {BandwidthModule}\n */\n _end()\n {\n // A timeout or an abort occured, bypass the further requests and trigger the \"end\" event.\n if (this._intendedEnd) {\n this._isRestarting = false;\n this.trigger('end', this._avgSpeed, this._speedRecords);\n }\n\n // The request ended to early, restart it with an increased data size.\n else {\n var dataSettings = this.settings().data,\n size = dataSettings.size * dataSettings.multiplier;\n\n this.settings({data: {size}});\n this.trigger('restart', size);\n\n this._isRestarting = true;\n this.start();\n }\n\n return this;\n }\n\n\n}\n", "import EventDispatcher from '../EventDispatcher';\nimport {isObject, copy, assign, assignStrict} from '../../utils/helpers';\nimport {enumerable} from '../../utils/decorators';\n\n/**\n * @public\n * @typedef {Object} HttpModule~settingsObject\n * @property {string} [endpoint=./network.php] Where is located your `network.php` file.\n * @property {number} [delay=8000] The delay while you want to take measures.\n */\n\n/**\n * @class HttpModule\n * @extends EventDispatcher\n * @param {string} moduleName The name of the instanciated module.\n * @param {HttpModule~settingsObject} [settings={}] A set of custom settings.\n */\nexport default class HttpModule extends EventDispatcher {\n\n /**\n * The default settings.\n * @private\n * @member {?Object} HttpModule#_defaultSettings\n */\n @enumerable(false)\n _defaultSettings = null;\n\n /**\n * The current settings.\n * @private\n * @member {?Object} HttpModule#_settings\n */\n @enumerable(false)\n _settings = null;\n\n /**\n * The module name, will be send to the server.\n * @private\n * @member {string} HttpModule#_moduleName\n */\n @enumerable(false)\n _moduleName = undefined;\n\n /**\n * The current XMLHttpRequest object.\n * @private\n * @member {?XMLHttpRequest} HttpModule#_xhr\n */\n @enumerable(false)\n _xhr = null;\n\n /**\n * An URL token to avoid any caching issues. Also allows to identify the request in the Resource Timing entries.\n * @private\n * @member {?string} HttpModule#_lastURLToken\n */\n @enumerable(false)\n _lastURLToken = null;\n\n /**\n * Defines if the module is currently running an HTTP request.\n * @private\n * @member {boolean} HttpModule#_requesting\n */\n @enumerable(false)\n _requesting = false;\n\n /**\n * Defines if the requesting status has been overridden by the `_setRequesting` method.\n * @private\n * @member {boolean} HttpModule#_requestingOverridden\n */\n @enumerable(false)\n _requestingOverridden = false;\n\n constructor(moduleName, settings = {})\n {\n super();\n\n this._extendDefaultSettings({\n endpoint: './network.php',\n delay: 8000\n });\n\n this.settings(settings);\n\n this._moduleName = moduleName;\n\n // Each time a request starts or ends, set the requesting value unless it has been overridden with the\n // _setRequesting() method.\n this.on(['xhr-loadstart', 'xhr-upload-loadstart'], () => {\n if (!this._requestingOverridden) {\n this._requesting = true;\n }\n });\n\n this.on(['xhr-loadend', 'xhr-upload-loadend'], () => {\n if (!this._requestingOverridden) {\n this._requesting = false;\n }\n });\n }\n\n /**\n * Apply a new set of custom settings.\n * @public\n * @method HttpModule#settings\n * @param {HttpModule~settingsObject} settings A set of custom settings.\n * @returns {HttpModule}\n */\n /**\n * Return the current set of settings.\n * @public\n * @method HttpModule#settings^2\n * @returns {HttpModule~settingsObject}\n */\n settings(settings = null)\n {\n if (isObject(settings)) {\n this._settings = assignStrict(this._defaultSettings || {}, this._settings || {}, settings);\n return this;\n } else {\n return copy(this._settings || this._defaultSettings || {});\n }\n }\n\n /**\n * Return if the module is currently making a request.\n * @public\n * @method HttpModule#isRequesting\n * @returns {boolean} `true` if the module is requesting, otherwise `false`.\n */\n isRequesting()\n {\n return this._requesting;\n }\n\n /**\n * Extend the set of default settings.\n * @protected\n * @method HttpModule#_extendDefaultSettings\n * @param {Object} settings The new properties to add to the default settings.\n * @returns {HttpModule}\n */\n _extendDefaultSettings(settings)\n {\n this._defaultSettings = assign(this._defaultSettings || {}, settings);\n return this;\n }\n\n /**\n * Create a new XHR request.\n * @protected\n * @method HttpModule#_newRequest\n * @param {string} httpMethod The HTTP method to use with the request, GET or POST.\n * @param {Object} queryParams The query parameters to use with the request.\n * @returns {HttpModule}\n */\n _newRequest(httpMethod, queryParams)\n {\n // Check if a callback binded to the \"_newRequest\" event returns false, if it's the case, cancel the request\n // creation. If the requesting status has been overridden, there's no need to cancel the request since the user\n // should know what he's doing.\n if (!this.trigger('_newRequest') && !this._requestingOverridden) {\n console.warn('To ensure accurate measures, you can only make one request at a time.');\n return this;\n }\n\n let settings = this.settings(),\n xhr = new XMLHttpRequest(),\n validHttpMethods = ['GET', 'POST'];\n\n // Prepare the new request.\n if (!~validHttpMethods.indexOf(httpMethod)) {\n console.warn('The HTTP method must be GET or POST.');\n return this;\n }\n\n queryParams = queryParams || {};\n\n let tokenSuffix = (new Date).getTime();\n this._lastURLToken = `network-${tokenSuffix}`;\n\n // Append the query parameters\n let url = settings.endpoint;\n url += ~url.indexOf('?') ? '&' : '?';\n url += `module=${this._moduleName}`;\n\n Object.keys(queryParams).forEach(param => {\n let value = encodeURIComponent(queryParams[param]);\n url += `&${param}=${value}`;\n });\n\n url += `&${this._lastURLToken}`;\n\n xhr.open(httpMethod, url);\n\n // Abort the previous request if it hasn't been sent\n if (this._xhr && this._xhr.readyState == XMLHttpRequest.OPENED) {\n this._xhr.abort();\n }\n\n // Replace the old request by the new one\n this._xhr = xhr;\n\n // Bind all the XHR events\n const events = [\n 'loadstart', 'progress', 'abort', 'error', 'load', 'timeout', 'loadend', 'readystatechange'\n ];\n\n events.forEach(eventType => {\n xhr.addEventListener(eventType, (...args) => {\n // A last progress event can be triggered once a request has timed out, ignore it.\n if (eventType == 'progress' && !this._requesting) return;\n\n this.trigger(`xhr-${eventType}`, xhr, ...args);\n });\n\n // The XMLHttpRequestUpload interface supports all the above event types except the \"readystatechange\" one\n if (eventType != 'readystatechange') {\n xhr.upload.addEventListener(eventType, (...args) => {\n this.trigger(`xhr-upload-${eventType}`, xhr, ...args);\n });\n }\n });\n\n // Define the timeout of the request. We don't use the native `timeout` property since it can distort the\n // measures.\n // See: https://github.com/nesk/network.js/issues/26\n const startTimeout = xhr => {\n setTimeout(() => {\n if (xhr.readyState != XMLHttpRequest.UNSENT && xhr.readyState != XMLHttpRequest.DONE) {\n this.trigger('xhr-timeout');\n this.trigger('xhr-upload-timeout');\n xhr.abort()\n }\n }, settings.delay);\n };\n\n this.on('xhr-upload-loadstart', startTimeout)\n .on('xhr-readystatechange', (timeoutStarted => {\n return xhr => {\n if (!timeoutStarted && xhr.readyState == XMLHttpRequest.LOADING) {\n timeoutStarted = true;\n startTimeout(xhr);\n }\n };\n })(false));\n\n return this;\n }\n\n /**\n * Send a newly created XHR request.\n * @protected\n * @method HttpModule#_sendRequest\n * @param {?*} [data=null] The data to send with the request.\n * @returns {HttpModule}\n */\n _sendRequest(data = null)\n {\n if (this._xhr && this._xhr.readyState == XMLHttpRequest.OPENED) {\n this._xhr.send(data);\n } else {\n console.warn('A request must have been created before sending any data.');\n }\n\n return this;\n }\n\n /**\n * Abort the current request.\n * @protected\n * @method HttpModule#_abort\n * @returns {HttpModule}\n */\n _abort()\n {\n if (this._xhr) {\n this._xhr.abort();\n }\n\n return this;\n }\n\n /**\n * Get the Resource Timing entry associated to the current request.\n * @protected\n * @method HttpModule#_getTimingEntry\n * @param {HttpModule~timingCallback} callback A callback used to send back the timing entry.\n * @returns {HttpModule}\n */\n _getTimingEntry(callback)\n {\n // The Resource Timing entries aren't immediately available once the 'load' event is triggered by an\n // XMLHttpRequest, we must wait for another process tick to check for a refreshed list.\n setTimeout((lastURLToken => {\n return () => {\n // Filter the timing entries to return only the one concerned by the last request made\n let entries = performance.getEntriesByType('resource').filter(function(entry) {\n return ~entry.name.indexOf(lastURLToken);\n });\n\n /**\n * A callback used to send back the timing entry.\n * @private\n * @callback HttpModule~timingCallback\n * @param {PerformanceResourceTiming} entry The Resource Timing entry associated to the current request.\n */\n callback(entries.length ? entries[0] : null);\n };\n })(this._lastURLToken), 0);\n\n return this;\n }\n\n /**\n * Override the requesting status of the module.\n * @protected\n * @method HttpModule#_setRequesting\n * @param {boolean} isRequesting The requesting status.\n * @returns {HttpModule}\n */\n _setRequesting(isRequesting)\n {\n this._requestingOverridden = true;\n this._requesting = isRequesting;\n return this;\n }\n\n}\n", "import HttpModule from './HttpModule';\nimport Timing from '../Timing';\nimport {isObject, assignStrict, except} from '../../utils/helpers';\nimport {enumerable} from '../../utils/decorators';\n\n/**\n * @public\n * @typedef {Object} LatencyModule~settingsObject\n * @property {string} [endpoint=./network.php] Where is located your `network.php` file.\n * @property {number} [measures=5] How many measures should be returned.\n * @property {number} [attempts=3] How much attempts to get a valid value should be done for each measure.\n */\n\n/**\n * @class LatencyModule\n * @extends HttpModule\n * @param {LatencyModule~settingsObject} [settings={}] A set of custom settings.\n */\nexport default class LatencyModule extends HttpModule {\n\n /**\n * The total number of requests left.\n * @private\n * @member {number} LatencyModule#_requestsLeft\n */\n @enumerable(false)\n _requestsLeft = undefined;\n\n /**\n * The total number of attempts left.\n * @private\n * @member {number} LatencyModule#_attemptsLeft\n */\n @enumerable(false)\n _attemptsLeft = undefined;\n\n /**\n * The measured latencies.\n * @private\n * @member {number[]} LatencyModule#_latencies\n */\n @enumerable(false)\n _latencies = undefined;\n\n /**\n * The ID of the current request.\n * @private\n * @member {number} LatencyModule#_requestID\n */\n @enumerable(false)\n _requestID = 0;\n\n /**\n * Unique labels for each request, exclusively used to make measures.\n * @private\n * @member {Object} LatencyModule#_requestID\n * @property {?string} start\n * @property {?string} end\n * @property {?string} measure\n */\n @enumerable(false)\n _timingLabels = {\n start: null,\n end: null,\n measure: null\n };\n\n constructor(settings = {})\n {\n super('latency');\n\n this._extendDefaultSettings({\n measures: 5,\n attempts: 3\n }).settings(settings);\n\n // Measure the latency with the Resource Timing API once the request is finished\n if (Timing.supportsResourceTiming()) {\n this.on('xhr-load', () => this._measure());\n }\n\n // If the browser doesn't support the Resource Timing API, we fallback on a Datetime solution.\n else {\n // Set a mark when the request starts\n this.on('xhr-loadstart', () => Timing.mark(this._timingLabels.start));\n\n // Then make a measure with the previous mark\n this.on('xhr-readystatechange', xhr => this._measure(xhr));\n }\n }\n\n /**\n * Apply a new set of custom settings.\n * @public\n * @method LatencyModule#settings\n * @param {LatencyModule~settingsObject} settings A set of custom settings.\n * @returns {LatencyModule}\n */\n /**\n * Return the current set of settings.\n * @public\n * @method LatencyModule#settings^2\n * @returns {LatencyModule~settingsObject}\n */\n settings(settings = null)\n {\n if (isObject(settings)) {\n return super.settings(assignStrict(settings, {\n delay: 0 // We dont want any timeout during a latency calculation\n }));\n } else {\n return except(super.settings(), ['delay']);\n }\n }\n\n /**\n * Start requesting the server to make measures.\n * @public\n * @method LatencyModule#start\n * @returns {LatencyModule}\n */\n start()\n {\n // Set the number of requests required to establish the network latency. If the browser doesn't support the\n // Resource Timing API, add a request that will be ignored to avoid a longer request due to a possible\n // DNS/whatever fetch.\n let {measures, attempts} = this.settings();\n\n this._requestsLeft = measures;\n this._attemptsLeft = attempts * measures;\n\n if (!Timing.supportsResourceTiming()) {\n this._requestsLeft++;\n this._attemptsLeft++;\n }\n\n // Override the requesting value since a complete latency request consists off multiple ones\n this._setRequesting(true);\n\n this._latencies = [];\n this._nextRequest();\n\n return this;\n }\n\n /**\n * Initiate the next request used for latency measures.\n * @private\n * @method LatencyModule#_nextRequest\n * @param {boolean} [retry=false] Defines if the next request is a retry due to a failing request or not.\n * @returns {LatencyModule}\n */\n _nextRequest(retry = false)\n {\n const reqID = this._requestID++;\n let requestsLeft = retry ? this._requestsLeft : this._requestsLeft--;\n\n if (this._attemptsLeft-- && (requestsLeft || retry)) {\n // Create unique timing labels for the new request\n var labels = this._timingLabels;\n labels.start = `latency-${reqID}-start`;\n labels.end = `latency-${reqID}-end`;\n labels.measure = `latency-${reqID}-measure`;\n\n // Create the new request and send it\n this._newRequest('GET')._sendRequest();\n } else {\n // All the requests are finished, set the requesting status to false.\n this._setRequesting(false);\n\n // If all the requests have been executed, calculate the average latency. Since the _getTimingEntry() method\n // is asynchronous, wait for the next process tick to execute the _end() method, to be sure that all the\n // latencies have been retrieved.\n setTimeout(() => this._end(), 0);\n }\n\n return this;\n }\n\n /**\n * Make latency measures for the last request.\n * @private\n * @method LatencyModule#_measure\n * @param {?XMLHttpRequest} [xhr=null] The concerned XMLHttpRequest if the browser doesn't support the Resource Timing API.\n * @returns {LatencyModule}\n */\n _measure(xhr = null)\n {\n // With Resource Timing API\n if (!xhr) {\n this._getTimingEntry(entry => {\n // The latency calculation differs between an HTTP and an HTTPS connection\n // See: http://www.w3.org/TR/resource-timing/#processing-model\n let latency = !entry.secureConnectionStart\n ? entry.connectEnd - entry.connectStart\n : entry.secureConnectionStart - entry.connectStart;\n\n if (latency) this._latencies.push(latency);\n this._nextRequest(!latency);\n });\n }\n\n // Without Resource Timing API\n else if (this._requestsLeft < this.settings().measures) {\n\n // Measure and save the latency if the headers have been received\n if (xhr.readyState == XMLHttpRequest.HEADERS_RECEIVED) {\n let labels = this._timingLabels;\n\n Timing.mark(labels.end);\n let latency = Timing.measure(labels.measure, labels.start, labels.end);\n\n if (latency) this._latencies.push(latency);\n\n // Abort the current request before we run a new one\n this._abort();\n this._nextRequest(!latency);\n }\n\n }\n\n // Ignore the first request when using the XHR states. See the comments in the start() method for explanations.\n else {\n this._nextRequest();\n }\n\n return this;\n }\n\n /**\n * End the measures.\n * @private\n * @method LatencyModule#_end\n * @returns {LatencyModule}\n */\n _end()\n {\n let latencies = this._latencies;\n\n // Get the average latency\n let avgLatency = latencies.reduce((a, b) => a + b, 0) / (latencies.length || 1);\n avgLatency = avgLatency || null;\n\n // If there is not enough measures, display a warning.\n if (latencies.length < this.settings().measures) {\n let {measures, attempts} = this.settings();\n\n console.warn([\n 'An insufficient number of measures have been processed, this could be due to your web server using',\n `persistant connections or to your client settings (measures: ${measures}, attempts: ${attempts})`\n ].join(' '));\n }\n\n // Trigger the \"end\" event with the average latency and the latency list as parameters\n this.trigger('end', avgLatency, latencies);\n\n return this;\n }\n\n}\n", "import EventDispatcher from './EventDispatcher';\nimport HttpModule from './Http/HttpModule';\nimport LatencyModule from './Http/LatencyModule';\nimport BandwidthModule from './Http/BandwidthModule';\nimport Timing from './Timing';\nimport {getGlobalObject, isObject, assign, except} from '../utils/helpers';\nimport {enumerable} from '../utils/decorators';\n\n/**\n * @public\n * @typedef {Object} Network~settingsObject\n * @property {LatencyModule~settingsObject} latency\n * @property {BandwidthModule~settingsObject} upload\n * @property {BandwidthModule~settingsObject} download\n * @example\n * {\n * // Top-level properties are applied to all the modules\n * endpoint: './my-new-endpoint/',\n *\n * // Top-level properties will be overridden by the ones specified in each module\n * latency: {\n * endpoint: './my-new-latency-endpoint/'\n * }\n * }\n */\n\n/**\n * @class Network\n * @param {Network~settingsObject} [settings={}] A set of custom settings.\n * @member {LatencyModule} latency The latency module.\n * @member {BandwidthModule} upload The upload module.\n * @member {BandwidthModule} download The download module.\n */\nexport default class Network {\n\n /**\n * The registered modules.\n * @private\n * @member {Object} Network#_modules\n */\n @enumerable(false)\n _modules = {};\n\n /**\n * Defines if the registered modules have been initialized.\n * @private\n * @member {boolean} Network#_modulesInitialized\n */\n @enumerable(false)\n _modulesInitialized = false;\n\n /**\n * The settings defined via the constructor, they will be applied once the modules are initialized.\n * @private\n * @member {Network~settingsObject} Network#_pendingSettings\n */\n @enumerable(false)\n _pendingSettings = {};\n\n /**\n * Expose all the internal classes to the global scope. Only for testing purposes!\n * @private\n * @method Network._exposeInternalClasses\n * @returns {Network}\n */\n @enumerable(false)\n static _exposeInternalClasses()\n {\n let global = getGlobalObject(),\n classes = {EventDispatcher, HttpModule, LatencyModule, BandwidthModule, Timing};\n\n Object.keys(classes).forEach(name => {\n global[name] = classes[name];\n });\n\n return this;\n }\n\n constructor(settings = {})\n {\n this._registerModule('latency', settings => new LatencyModule(settings))\n ._registerModule('upload', settings => new BandwidthModule('upload', settings))\n ._registerModule('download', settings => new BandwidthModule('download', settings));\n\n this._initModules(this.settings(settings));\n }\n\n /**\n * Apply a new set of custom settings.\n * @public\n * @method Network#settings\n * @param {Network~settingsObject} settings A set of custom settings.\n * @returns {Network}\n */\n /**\n * Return the current set of settings.\n * @public\n * @method Network#settings^2\n * @returns {Network~settingsObject}\n */\n settings(settings = null)\n {\n let moduleNames = Object.keys(this._modules);\n\n if (isObject(settings)) {\n // Extract the global settings\n let globalSettings = except(settings, moduleNames);\n\n // Extract the local settings\n let localSettings = except(settings, Object.keys(globalSettings));\n\n // Create new settings with the global ones nested in the local ones\n settings = moduleNames.reduce((settings, moduleName) => {\n return assign(settings, {[moduleName]: globalSettings});\n }, {});\n\n // Apply the local settings to the new settings\n settings = assign(settings, localSettings);\n\n // Apply the settings to the modules\n if (this._modulesInitialized) {\n Object.keys(this._modules).forEach(name => {\n this._modules[name].settings(settings[name]);\n });\n }\n\n // If the modules aren't instanciated, store the settings.\n else {\n this._pendingSettings = settings;\n }\n\n return this;\n } else {\n return moduleNames.reduce((settings, moduleName) => {\n return assign(settings, {[moduleName]: this._modules[moduleName].settings()});\n }, {});\n }\n }\n\n /**\n * Return if a module is currently making a request.\n * @public\n * @method Network#isRequesting\n * @returns {boolean} `true` if a module is requesting, otherwise `false`.\n */\n isRequesting()\n {\n let requesting = false;\n\n for (let name in this._modules) {\n if (this._modules.hasOwnProperty(name)) {\n requesting = requesting || this._modules[name].isRequesting();\n }\n }\n\n return requesting;\n }\n\n /**\n * Register a new module for the current `Network` instance.\n * @private\n * @method Network#registerModule\n * @param {string} name The name of the module. Will be used to create the property `Network.<name>`.\n * @param {Network~moduleCallback} moduleCallback A callback used to initialize a module with a set of settings.\n * @returns {Network}\n */\n _registerModule(name, moduleCallback)\n {\n /**\n * A callback used to initialize a module with a set of settings.\n * @private\n * @callback Network~moduleCallback\n * @param {Object} settings A set of custom settings.\n * @returns {HttpModule} An instanciated subclass of `HttpModule`.\n */\n this._modules[name] = moduleCallback;\n return this;\n }\n\n /**\n * Initialize all the registered modules with the settings passed to the constructor.\n * @private\n * @method Network#_initModules\n * @returns {Network}\n */\n _initModules()\n {\n if (!this._modulesInitialized) {\n // Initialize the modules with their respective settings\n Object.keys(this._modules).forEach(name => {\n this._modules[name] = this._modules[name](this._pendingSettings[name]).on('_newRequest', () => {\n return !this.isRequesting();\n });\n\n this[name] = this._modules[name];\n });\n\n this._modulesInitialized = true;\n }\n\n return this;\n }\n\n}\n", "import {getGlobalObject} from '../utils/helpers';\nimport {enumerable} from '../utils/decorators';\n\n/**\n * @private\n * @class Timing\n */\nclass Timing {\n\n /**\n * Defines if the current browser supports some specific Timing APIs.\n * @private\n * @member {Object} Timing#_support\n * @property {boolean} performance `true` if the Performance API is available.\n * @property {boolean} userTiming `true` if the User Timing API is available.\n * @property {boolean} resourceTiming `true` if the Resource Timing API is available.\n */\n @enumerable(false)\n _support = {};\n\n /**\n * All the marks created by the `mark` method.\n * @private\n * @member {Object} Timing#_marks\n */\n @enumerable(false)\n _marks = {};\n\n /**\n * All the measures created by the `measure` method.\n * @private\n * @member {Object} Timing#_measures\n */\n @enumerable(false)\n _measures = {};\n\n constructor()\n {\n const global = getGlobalObject();\n\n this._support = {\n performance: !!global.performance,\n userTiming: global.performance && performance.mark,\n resourceTiming: global.performance\n && (typeof performance.getEntriesByType == \"function\")\n && performance.timing\n };\n }\n\n /**\n * Create a new timing mark.\n * @public\n * @method Timing#mark\n * @param {string} label A label associated to the mark.\n * @returns {Timing}\n */\n mark(label)\n {\n const support = this._support,\n marks = this._marks;\n\n if (support.userTiming) {\n performance.mark(label);\n }\n\n if (support.performance) {\n marks[label] = performance.now();\n } else {\n marks[label] = (new Date).getTime();\n }\n\n return this;\n }\n\n /**\n * Measure the delay between two marks.\n * @public\n * @method Timing#measure\n * @param {string} measureLabel A label associated to the measure.\n * @param {string} markLabelA The label of the first mark.\n * @param {string} markLabelB The label of the second mark.\n * @returns {number} The measured value.\n */\n measure(measureLabel, markLabelA, markLabelB)\n {\n const support = this._support,\n marks = this._marks,\n measures = this._measures;\n\n if (typeof measures[measureLabel] == 'undefined') {\n const measureWithoutUserTiming = marks[markLabelB] - marks[markLabelA];\n\n if (support.userTiming) {\n performance.measure(measureLabel, markLabelA, markLabelB);\n const entriesByName = performance.getEntriesByName(measureLabel);\n\n // The performance API could return no corresponding entries in Firefox so we must use a fallback.\n // See: https://github.com/nesk/network.js/issues/32#issuecomment-118434305\n measures[measureLabel] = entriesByName.length ? entriesByName[0].duration : measureWithoutUserTiming;\n } else {\n measures[measureLabel] = measureWithoutUserTiming;\n }\n }\n\n return measures[measureLabel];\n }\n\n /**\n * Determine if the current browser supports the Resource Timing API.\n * @public\n * @method Timing#supportsResourceTiming\n * @returns {boolean} `true` if the Resource Timing API is supported, otherwise `false`.\n */\n supportsResourceTiming()\n {\n return this._support.resourceTiming;\n }\n\n}\n\nexport default new Timing();\n", "/**\n * @callback propertyDecorator\n * @param target\n * @param key\n * @param descriptor\n */\n\n/**\n * Set the enumerability of a property.\n * @private\n * @function enumerable\n * @param {boolean} isEnumerable Whether the property should be enumerable or not.\n * @returns {propertyDecorator}\n */\nexport function enumerable(isEnumerable) {\n return function(target, key, descriptor) {\n descriptor.enumerable = isEnumerable;\n return descriptor;\n };\n}\n", "/**\n * Return the global object.\n * @private\n * @function getGlobalObject\n * @return {Object}\n * @see https://gist.github.com/rauschma/1bff02da66472f555c75\n */\nexport function getGlobalObject() {\n // Workers don’t have `window`, only `self`.\n if (typeof self !== 'undefined') {\n return self;\n }\n\n if (typeof global !== 'undefined') {\n return global;\n }\n\n // Not all environments allow `eval` and `Function`, use only as a last resort.\n return new Function('return this')();\n}\n\n/**\n * Determine if the provided value is an object.\n * @private\n * @function isObject\n * @param {*} obj The value to check.\n * @returns {boolean} `true` if the value is an object, otherwise `false`.\n */\nexport function isObject(obj)\n{\n return obj != undefined && obj != null && typeof obj.valueOf() == 'object';\n}\n\n/**\n * Make a deep copy of any value.\n * @private\n * @function copy\n * @param {*} value The value to copy.\n * @returns {*} The copied value.\n */\nexport function copy(value)\n{\n return JSON.parse(JSON.stringify(value));\n}\n\n/**\n * Copy the properties in the source objects over to the destination object.\n * @private\n * @function _assign\n * @param {boolean} strict Given `true`, new properties will not be copied.\n * @param {Object} [target={}] The destination object.\n * @param {...Object} sources The source objects.\n * @returns {Object} The destination object once the properties are copied.\n */\nfunction _assign(strict, target = {}, ...sources)\n{\n target = copy(target);\n\n sources.forEach(source => {\n Object.keys(source).forEach(key => {\n if (!strict || target.hasOwnProperty(key)) {\n let value = source[key];\n target[key] = isObject(value) ? _assign(strict, target[key], value) : value;\n }\n })\n });\n\n return target;\n}\n\n/**\n * Copy all the properties in the source objects over to the destination object.\n * @private\n * @function assign\n * @param {Object} [target={}] The destination object.\n * @param {...Object} sources The source objects.\n * @returns {Object} The destination object once the properties are copied.\n */\nexport function assign(target = {}, ...sources)\n{\n return _assign(false, target, ...sources);\n}\n\n/**\n * Copy the properties (but no new ones) in the source objects over to the destination object.\n * @private\n * @function assignStrict\n * @param {Object} [target={}] The destination object.\n * @param {...Object} sources The source objects.\n * @returns {Object} The destination object once the properties are copied.\n */\nexport function assignStrict(target = {}, ...sources)\n{\n return _assign(true, target, ...sources);\n}\n\n/**\n * Get a copy of an object without some of its properties.\n * @private\n * @function except\n * @param {Object} obj The original object.\n * @param {string[]} properties The properties to exclude from the copied object.\n * @returns {Object} The copied object without the specified properties.\n */\nexport function except(obj, properties)\n{\n let objCopy = copy(obj);\n\n properties.forEach(index => delete objCopy[index]);\n\n return objCopy;\n}\n\n/**\n * Defer the execution of a function.\n * @private\n * @function defer\n * @param {Function} func The function to defer.\n * @returns {Defer} The Defer object used to execute the function when needed.\n */\nexport function defer(func = () => {})\n{\n /**\n * @private\n * @class Defer\n */\n return new class {\n constructor()\n {\n this.func = func;\n }\n\n /**\n * Execute the deferred function.\n * @public\n * @method Defer#run\n */\n run()\n {\n if (this.func) this.func();\n delete this.func;\n }\n };\n}\n" ] }