From a5f313d2a7a174c6b3451bd493960052a8114e82 Mon Sep 17 00:00:00 2001 From: dinawee Date: Wed, 13 May 2020 16:16:28 +0800 Subject: [PATCH 01/17] fix(mediaStream): onStreamAccessSuccess will return streams object and the calling method will resolve --- .../helpers/onStreamAccessError.js | 31 +++++++++++-------- src/media-stream/index.js | 4 ++- 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/src/media-stream/helpers/onStreamAccessError.js b/src/media-stream/helpers/onStreamAccessError.js index c9975c82e..88bcd5f5c 100644 --- a/src/media-stream/helpers/onStreamAccessError.js +++ b/src/media-stream/helpers/onStreamAccessError.js @@ -34,20 +34,25 @@ const onStreamAccessError = (error, reject, resolve, roomKey, audioSettings, vid isAudioFallback, })); - return window.navigator.mediaDevices.getUserMedia({ audio: true }).then(stream => helpers.onStreamAccessSuccess(roomKey, stream, audioSettings, videoSettings, isAudioFallback, resolve)).catch((fallbackError) => { - logger.log.ERROR([state.user.sid, TAGS.MEDIA_STREAM, null, messages.MEDIA_STREAM.ERRORS.FALLBACK, fallbackError]); - dispatchEvent(mediaAccessError({ - error: fallbackError, - isAudioFallbackError: true, - })); - dispatchEvent(mediaAccessFallback({ - error, - state: MEDIA_ACCESS_FALLBACK_STATE.ERROR, - isAudioFallback, - })); + return window.navigator.mediaDevices.getUserMedia({ audio: true }) + .then((stream) => { + const streams = helpers.onStreamAccessSuccess(roomKey, stream, audioSettings, videoSettings, isAudioFallback); + resolve(streams); + }) + .catch((fallbackError) => { + logger.log.ERROR([state.user.sid, TAGS.MEDIA_STREAM, null, messages.MEDIA_STREAM.ERRORS.FALLBACK, fallbackError]); + dispatchEvent(mediaAccessError({ + error: fallbackError, + isAudioFallbackError: true, + })); + dispatchEvent(mediaAccessFallback({ + error, + state: MEDIA_ACCESS_FALLBACK_STATE.ERROR, + isAudioFallback, + })); - reject(fallbackError); - }); + reject(fallbackError); + }); } logger.log.ERROR([state.user.sid, TAGS.MEDIA_STREAM, null, messages.MEDIA_STREAM.ERRORS.GET_USER_MEDIA], error); diff --git a/src/media-stream/index.js b/src/media-stream/index.js index 78398d67d..8f27975f9 100644 --- a/src/media-stream/index.js +++ b/src/media-stream/index.js @@ -147,7 +147,9 @@ class MediaStream { const audioSettings = helpers.parseStreamSettings(streamOptions, TRACK_KIND.AUDIO); const videoSettings = helpers.parseStreamSettings(streamOptions, TRACK_KIND.VIDEO); const isAudioFallback = false; - return helpers.onStreamAccessSuccess(roomKey, stream, audioSettings, videoSettings, isAudioFallback, resolve); + const streams = helpers.onStreamAccessSuccess(roomKey, stream, audioSettings, videoSettings, isAudioFallback, resolve); + + resolve(streams); }); } } From 9481c0bc74887d4dd89098ff744f2839d2ccb029 Mon Sep 17 00:00:00 2001 From: dinawee Date: Thu, 14 May 2020 14:05:54 +0800 Subject: [PATCH 02/17] fix(react native): update adapter with react native check --- src/adapter.js | 13 +++++++++++-- .../callbacks/oniceconnectionstatechange.js | 9 +++++++-- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/adapter.js b/src/adapter.js index 451a48365..27861dc98 100644 --- a/src/adapter.js +++ b/src/adapter.js @@ -91,8 +91,17 @@ window.webrtcDetectedDCSupport = null; AdapterJS.parseWebrtcDetectedBrowser = function () { var hasMatch = null; - // Detect Opera (8.0+) - if ((!!window.opr && !!opr.addons) || !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0) { + // Detect React-Native + // Placed before browsers to check - global navigator object is present when react-native debugger is on and takes browser agent of the debugger + // React Native adapter adds navigator object + if (window.navigator.userAgent.match(/React-Native/gi) || navigator.userAgent.match(/React-Native/gi)) { + window.webrtcDetectedBrowser = 'react-native'; + window.webrtcDetectedVersion = ""; + window.webrtcMinimumVersion = 0; + window.webrtcDetectedType = 'react-native'; + window.webrtcDetectedDCSupport = null; + // Detect Opera (8.0+) + } else if ((!!window.opr && !!opr.addons) || !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0) { hasMatch = navigator.userAgent.match(/OPR\/(\d+)/i) || []; window.webrtcDetectedBrowser = 'opera'; diff --git a/src/peer-connection/helpers/peer-addition/callbacks/oniceconnectionstatechange.js b/src/peer-connection/helpers/peer-addition/callbacks/oniceconnectionstatechange.js index 99328fe94..26f226e33 100644 --- a/src/peer-connection/helpers/peer-addition/callbacks/oniceconnectionstatechange.js +++ b/src/peer-connection/helpers/peer-addition/callbacks/oniceconnectionstatechange.js @@ -28,6 +28,13 @@ const oniceconnectionstatechange = (peerConnection, targetMid, currentRoomState) const { AdapterJS } = window; const { webrtcDetectedBrowser, webrtcDetectedType } = AdapterJS; const state = Skylink.getSkylinkState(currentRoomState.room.id); + let statsInterval = null; + let pcIceConnectionState = peerConnection.iceConnectionState; + + if (webrtcDetectedType === BROWSER_AGENT.REACT_NATIVE && !state && pcIceConnectionState === ICE_CONNECTION_STATE.CLOSED) { + return; + } + const { streams } = state; if (!state) { @@ -40,8 +47,6 @@ const oniceconnectionstatechange = (peerConnection, targetMid, currentRoomState) } = state; const handleIceConnectionStats = new HandleIceConnectionStats(); - let statsInterval = null; - let pcIceConnectionState = peerConnection.iceConnectionState; logger.log.DEBUG([targetMid, 'RTCIceConnectionState', null, PEER_CONNECTION.ice_connection_state], pcIceConnectionState); From 8db96e26e2e3e30c3af43e6d46e044662b5adf1b Mon Sep 17 00:00:00 2001 From: dinawee Date: Mon, 18 May 2020 19:53:09 +0800 Subject: [PATCH 03/17] fix(ice connection): iceRestart flag will be honoured 1. enableIceRestart flag in refreshConnection was set to false in defaultOptions with no way of changing the value. Now SDK will check PC for PC.restartIce method and change enableIceRestart value to true. If iceRestart is set to true in initOptions, renegotiation will trigger ice negotiation. 2. refactor refresh connection messages --- demos/collection/config.js | 7 +- src/constants.js | 1 + src/ice-connection/helpers/addIceCandidate.js | 8 +- .../helpers/addIceCandidateFromQueue.js | 6 +- .../helpers/addIceCandidateToQueue.js | 2 +- src/ice-connection/helpers/onIceCandidate.js | 18 ++--- src/media-stream/helpers/sendStream.js | 2 +- src/messages.js | 77 +++++++++---------- src/models/skylink-state.js | 2 +- .../helpers/getConnectionStatus.js | 6 +- .../callbacks/oniceconnectionstatechange.js | 4 +- .../callbacks/onsignalingstatechange.js | 2 +- .../peer-addition/createPeerConnection.js | 9 ++- .../refresh-connection/refreshConnection.js | 17 ++-- .../refreshPeerConnection.js | 9 +-- .../restartPeerConnection.js | 23 ++---- .../helpers/signalingEndOfCandidates.js | 6 +- .../helpers/statistics/index.js | 2 +- .../api-server/api-helpers.js | 2 + .../handlers/candidateHandler.js | 14 ++-- .../handlers/commons/enterAndWelcome.js | 10 ++- .../handlers/commons/processPeer.js | 7 +- .../signaling-server/parsers/parseUserInfo.js | 2 +- 23 files changed, 122 insertions(+), 114 deletions(-) diff --git a/demos/collection/config.js b/demos/collection/config.js index e2959f2ba..f0ba17d5f 100644 --- a/demos/collection/config.js +++ b/demos/collection/config.js @@ -10,6 +10,11 @@ function getParameterByName(name, url) { results = regex.exec(url); if (!results) return null; if (!results[2]) return ''; + if (results[2] === 'false') { + return false; + } else if (results[2] === 'true') { + return true; + } return decodeURIComponent(results[2].replace(/\+/g, " ")); } @@ -20,7 +25,7 @@ if (!getParameterByName('room')) { const config = { appKey: getParameterByName('appKey') || 'c7ae7e8a-2e24-43a5-85c6-d4dafbdfecb6', defaultRoom: getParameterByName('room'), - audioFallback: !!getParameterByName('audioFallback'), + audioFallback: getParameterByName('audioFallback'), forceSSL: true, beSilentOnParseLogs: true, beSilentOnLogs: true, diff --git a/src/constants.js b/src/constants.js index 524af6c38..6a68179b1 100644 --- a/src/constants.js +++ b/src/constants.js @@ -1562,6 +1562,7 @@ export const SIG_MESSAGE_TYPE = { MESSAGE: 'message', GET_STORED_MESSAGES: 'getStoredMessages', STORED_MESSAGES: 'storedMessages', + RESTART: 'restart', }; export const STREAM_STATUS = { diff --git a/src/ice-connection/helpers/addIceCandidate.js b/src/ice-connection/helpers/addIceCandidate.js index c4e231d47..557b453d7 100644 --- a/src/ice-connection/helpers/addIceCandidate.js +++ b/src/ice-connection/helpers/addIceCandidate.js @@ -23,7 +23,7 @@ const addIceCandidateSuccess = (room, targetMid, candidateId, candidateType, can const { STATS_MODULE, ICE_CANDIDATE } = messages; const { CANDIDATE_PROCESSING_STATE, TAGS } = constants; - logger.log.INFO([targetMid, TAGS.CANDIDATE_HANDLER, `${candidateId}:${candidateType}`, ICE_CANDIDATE.CANDIDATE_HANDLER.CANDIDATE_ADDED]); + logger.log.INFO([targetMid, TAGS.CANDIDATE_HANDLER, `${candidateId}:${candidateType}`, ICE_CANDIDATE.CANDIDATE_ADDED]); dispatchEvent(candidateProcessingState({ room, state: CANDIDATE_PROCESSING_STATE.PROCESS_SUCCESS, @@ -52,7 +52,7 @@ const addIceCandidateFailure = (room, targetMid, candidateId, candidateType, can const { STATS_MODULE, ICE_CANDIDATE } = messages; const { CANDIDATE_PROCESSING_STATE, TAGS } = constants; - logger.log.ERROR([targetMid, TAGS.CANDIDATE_HANDLER, `${candidateId}:${candidateType}`, ICE_CANDIDATE.CANDIDATE_HANDLER.FAILED_ADDING_CANDIDATE], error); + logger.log.ERROR([targetMid, TAGS.CANDIDATE_HANDLER, `${candidateId}:${candidateType}`, ICE_CANDIDATE.FAILED_ADDING_CANDIDATE], error); dispatchEvent(candidateProcessingState({ room, state: CANDIDATE_PROCESSING_STATE.PROCESS_ERROR, @@ -87,7 +87,7 @@ const addIceCandidate = (targetMid, candidateId, candidateType, nativeCandidate, const { STATS_MODULE, ICE_CANDIDATE, PEER_CONNECTION } = messages; const { CANDIDATE_PROCESSING_STATE, PEER_CONNECTION_STATE, TAGS } = constants; - logger.log.DEBUG([targetMid, TAGS.CANDIDATE_HANDLER, `${candidateId}:${candidateType}`, ICE_CANDIDATE.CANDIDATE_HANDLER.ADDING_CANDIDATE]); + logger.log.DEBUG([targetMid, TAGS.CANDIDATE_HANDLER, `${candidateId}:${candidateType}`, ICE_CANDIDATE.ADDING_CANDIDATE]); dispatchEvent(candidateProcessingState({ peerId: targetMid, room, @@ -104,7 +104,7 @@ const addIceCandidate = (targetMid, candidateId, candidateType, nativeCandidate, && peerConnection.remoteDescription && peerConnection.remoteDescription.sdp && peerConnection.remoteDescription.sdp.indexOf(`\r\na=mid:${candidate.sdpMid}\r\n`) > -1)) { - logger.log.WARN([targetMid, TAGS.CANDIDATE_HANDLER, `${candidateId}:${candidateType}`, `${ICE_CANDIDATE.CANDIDATE_HANDLER.DROPPING_CANDIDATE} - ${PEER_CONNECTION.NO_PEER_CONNECTION}`]); + logger.log.WARN([targetMid, TAGS.CANDIDATE_HANDLER, `${candidateId}:${candidateType}`, `${ICE_CANDIDATE.DROPPING_CANDIDATE} - ${PEER_CONNECTION.NO_PEER_CONNECTION}`]); dispatchEvent(candidateProcessingState({ peerId: targetMid, diff --git a/src/ice-connection/helpers/addIceCandidateFromQueue.js b/src/ice-connection/helpers/addIceCandidateFromQueue.js index 84c60eba6..d03fabdb7 100644 --- a/src/ice-connection/helpers/addIceCandidateFromQueue.js +++ b/src/ice-connection/helpers/addIceCandidateFromQueue.js @@ -26,14 +26,14 @@ const addIceCandidateFromQueue = (targetMid, room) => { const nativeCandidate = candidateArray[1]; const candidateId = candidateArray[0]; const candidateType = nativeCandidate.candidate.split(' ')[7]; - logger.log.DEBUG([targetMid, TAGS.CANDIDATE_HANDLER, `${candidateId}:${candidateType}`, messages.ICE_CANDIDATE.CANDIDATE_HANDLER.ADD_BUFFERED_CANDIDATE]); + logger.log.DEBUG([targetMid, TAGS.CANDIDATE_HANDLER, `${candidateId}:${candidateType}`, messages.ICE_CANDIDATE.ADD_BUFFERED_CANDIDATE]); IceConnection.addIceCandidate(targetMid, candidateId, candidateType, nativeCandidate, state); } else if (peerConnection && peerConnection.signalingState !== PEER_CONNECTION_STATE.CLOSED && AdapterJS && isLowerThanVersion(AdapterJS.VERSION, '0.14.0')) { try { peerConnection.addIceCandidate(null); - logger.log.DEBUG([targetMid, TAGS.CANDIDATE_HANDLER, null, messages.ICE_CANDIDATE.CANDIDATE_HANDLER.END_OF_CANDIDATES_SUCCESS]); + logger.log.DEBUG([targetMid, TAGS.CANDIDATE_HANDLER, null, messages.ICE_CANDIDATE.CANDIDATE_ADDED]); } catch (ex) { - logger.log.DEBUG([targetMid, TAGS.CANDIDATE_HANDLER, null, messages.ICE_CANDIDATE.CANDIDATE_HANDLER.END_OF_CANDIDATES_FAILURE]); + logger.log.DEBUG([targetMid, TAGS.CANDIDATE_HANDLER, null, messages.ICE_CANDIDATE.FAILED_ADDING_CANDIDATE]); } } } diff --git a/src/ice-connection/helpers/addIceCandidateToQueue.js b/src/ice-connection/helpers/addIceCandidateToQueue.js index 2095ac4f3..bf823e3d5 100644 --- a/src/ice-connection/helpers/addIceCandidateToQueue.js +++ b/src/ice-connection/helpers/addIceCandidateToQueue.js @@ -22,7 +22,7 @@ const addIceCandidateToQueue = (targetMid, candidateId, candidateType, nativeCan const { room } = updatedState; const handleIceCandidateStats = new HandleIceCandidateStats(); - logger.log.DEBUG([targetMid, TAGS.CANDIDATE_HANDLER, `${candidateId}:${candidateType}`, MESSAGES.ICE_CANDIDATE.CANDIDATE_HANDLER.ADD_CANDIDATE_TO_BUFFER]); + logger.log.DEBUG([targetMid, TAGS.CANDIDATE_HANDLER, `${candidateId}:${candidateType}`, MESSAGES.ICE_CANDIDATE.ADD_CANDIDATE_TO_BUFFER]); handleIceCandidateStats.send(room.id, HANDLE_ICE_GATHERING_STATS.BUFFERED, targetMid, candidateId, nativeCandidate); dispatchEvent(candidateProcessingState({ diff --git a/src/ice-connection/helpers/onIceCandidate.js b/src/ice-connection/helpers/onIceCandidate.js index 394aff463..7703cdaf3 100644 --- a/src/ice-connection/helpers/onIceCandidate.js +++ b/src/ice-connection/helpers/onIceCandidate.js @@ -25,13 +25,13 @@ const onIceCandidate = (targetMid, candidate, currentRoom) => { const { CANDIDATE_GENERATION_STATE, TAGS } = constants; if (!peerConnection) { - logger.log.WARN([targetMid, TAGS.CANDIDATE_HANDLER, null, messages.ICE_CANDIDATE.CANDIDATE_HANDLER.no_peer_connection], candidate); + logger.log.WARN([targetMid, TAGS.CANDIDATE_HANDLER, null, messages.ICE_CANDIDATE.no_peer_connection], candidate); return null; } if (candidate.candidate) { if (!peerConnection.gathering) { - logger.log.WARN([targetMid, TAGS.CANDIDATE_HANDLER, null, messages.ICE_CANDIDATE.CANDIDATE_HANDLER.ICE_GATHERING_STARTED], candidate); + logger.log.WARN([targetMid, TAGS.CANDIDATE_HANDLER, null, messages.ICE_CONNECTION.ICE_GATHERING_STARTED], candidate); peerConnection.gathering = true; peerConnection.gathered = false; dispatchEvent(candidateGenerationState({ @@ -43,22 +43,22 @@ const onIceCandidate = (targetMid, candidate, currentRoom) => { } const candidateType = candidate.candidate.split(' ')[7]; - logger.log.DEBUG([targetMid, TAGS.CANDIDATE_HANDLER, candidateType, messages.ICE_CANDIDATE.CANDIDATE_HANDLER.CANDIDATE_GENERATED], candidate); + logger.log.DEBUG([targetMid, TAGS.CANDIDATE_HANDLER, candidateType, messages.ICE_CANDIDATE.CANDIDATE_GENERATED], candidate); if (candidateType === 'endOfCandidates' || !(peerConnection && peerConnection.localDescription && peerConnection.localDescription.sdp && peerConnection.localDescription.sdp.indexOf(`\r\na=mid:${candidate.sdpMid}\r\n`) > -1)) { - logger.log.WARN([targetMid, TAGS.CANDIDATE_HANDLER, candidateType, messages.ICE_CANDIDATE.CANDIDATE_HANDLER.DROP_EOC], candidate); + logger.log.WARN([targetMid, TAGS.CANDIDATE_HANDLER, candidateType, messages.ICE_CONNECTION.DROP_EOC], candidate); return null; } if (initOptions.filterCandidatesType[candidateType]) { if (!(state.hasMCU && initOptions.forceTURN)) { - logger.log.WARN([targetMid, TAGS.CANDIDATE_HANDLER, candidateType, messages.ICE_CANDIDATE.CANDIDATE_HANDLER.FILTERED_CANDIDATE], candidate); + logger.log.WARN([targetMid, TAGS.CANDIDATE_HANDLER, candidateType, messages.ICE_CANDIDATE.FILTERED_CANDIDATE], candidate); return null; } - logger.log.WARN([targetMid, TAGS.CANDIDATE_HANDLER, candidateType, messages.ICE_CANDIDATE.CANDIDATE_HANDLER.FILTERING_FLAG_NOT_HONOURED], candidate); + logger.log.WARN([targetMid, TAGS.CANDIDATE_HANDLER, candidateType, messages.ICE_CANDIDATE.FILTERING_FLAG_NOT_HONOURED], candidate); } if (!gatheredCandidates) { @@ -77,11 +77,11 @@ const onIceCandidate = (targetMid, candidate, currentRoom) => { state.gatheredCandidates[targetMid] = gatheredCandidates; Skylink.setSkylinkState(state, currentRoom.id); - logger.log.DEBUG([targetMid, TAGS.CANDIDATE_HANDLER, candidateType, messages.ICE_CANDIDATE.CANDIDATE_HANDLER.SENDING_CANDIDATE], candidate); + logger.log.DEBUG([targetMid, TAGS.CANDIDATE_HANDLER, candidateType, messages.ICE_CANDIDATE.SENDING_CANDIDATE], candidate); signalingServer.sendCandidate(targetMid, state, candidate); } else { - logger.log.INFO([targetMid, TAGS.CANDIDATE_HANDLER, null, messages.ICE_CANDIDATE.CANDIDATE_HANDLER.ICE_GATHERING_COMPLETED]); + logger.log.INFO([targetMid, TAGS.CANDIDATE_HANDLER, null, messages.ICE_CONNECTION.ICE_GATHERING_COMPLETED]); if (peerConnection.gathered) { return null; @@ -102,7 +102,7 @@ const onIceCandidate = (targetMid, candidate, currentRoom) => { if (!state.gatheredCandidates[targetMid]) return; const currentState = Skylink.getSkylinkState(currentRoom.id); if (!currentState) { - logger.log.WARN([targetMid, TAGS.CANDIDATE_HANDLER, null, `${messages.ICE_CANDIDATE.CANDIDATE_HANDLER.DROP_EOC} peer has left the room`]); + logger.log.WARN([targetMid, TAGS.CANDIDATE_HANDLER, null, `${messages.ICE_CONNECTION.DROP_EOC} peer has left the room`]); return; } diff --git a/src/media-stream/helpers/sendStream.js b/src/media-stream/helpers/sendStream.js index e7e80fdc3..64c82422f 100644 --- a/src/media-stream/helpers/sendStream.js +++ b/src/media-stream/helpers/sendStream.js @@ -67,7 +67,7 @@ const restartFn = (roomState, streams, resolve, reject) => { refreshPeerConnectionPromise.then(() => { resolve(streams); }).catch((error) => { - logger.log.ERROR(MESSAGES.PEER_CONNECTION.ERRORS.REFRESH); + logger.log.ERROR(MESSAGES.PEER_CONNECTION.REFRESH_CONNECTION.FAILED); reject(error); }); } else { diff --git a/src/messages.js b/src/messages.js index a95f05200..a096daabd 100644 --- a/src/messages.js +++ b/src/messages.js @@ -61,58 +61,55 @@ const MESSAGES = { USER_DATA_NOT_JSON: 'UserData is not JSON', }, PEER_CONNECTION: { + NOT_INITIALISED: 'Peer Connection not initialised', + CREATE_NEW: 'Creating new Peer Connection', NO_PEER_CONNECTION: 'No Peer Connection detected', + PEER_ID_NOT_FOUND: 'Peer Id not found', + STATE_CHANGE: 'Peer connection state changed ->', + STATS_API_UNAVAILABLE: 'getStats() API is not available', + MCU: 'MCU connected', ERRORS: { REMOVE_TRACK: 'Error removing track from peer connection', REPLACE_TRACK: 'Error replacing track in peer connection', - REFRESH: 'Error refreshing peer connection', + NOT_FOUND: 'Peer Connection not found', + }, + REFRESH_CONNECTION: { + START: 'Refreshing peer connections', + SUCCESS: 'Peer Connection refreshed successfully', + FAILED: 'Peer Connection failed to refresh', + COMPLETED: 'All Peer Connections refreshed with resolve or errors', + RESTART_ICE_UNAVAILABLE: 'Dropping iceRestart option as it is not available on the peer connection', + NOT_SUPPORTED: 'Refresh connection not supported by browser', + SEND_RESTART_OFFER: 'Sending restart offer message to signaling server', + NO_LOCAL_DESCRIPTION: 'No localDescription set to connection. There could be a handshaking step error.', }, - end_of_candidates: 'Signaling of end-of-candidates remote ICE gathering', - end_of_candidate_failure: 'Failed signaling end-of-candidates ->', - not_initialised: 'Peer connection is not initialised', - getstats_api_not_available: 'getStats() API is not available', - connection_status_no_pc: 'There is currently no peer connections to retrieve connection status', - ice_connection_state: 'Ice connection state changed ->', - peer_connection_state: 'Peer connection state changed ->', - ice_gathering_state: 'Ice gathering state changed ->', - refresh_start: 'START: Refreshing peer connections', - refresh_failed: 'FAILED: Refreshing peer connections', - refresh_completed: 'All peer connections refreshed with resolve or errors', - refresh_peer_failed: 'Peer connection failed to refresh: ', - refresh_peer_success: 'Peer connection refreshed successfully: ', - refresh_no_peer_connection: 'There is currently no peer connections to restart', - refresh_peerId_no_match: 'PeerId does not match existing peer connections', - refresh_no_edge_support: 'Edge browser currently does not support renegotiation', - refresh_not_supported: 'Failed restarting with other agents connecting from other SDKs as re-negotiation is not supported by other SDKs', - peerId_does_not_exist: 'Peer Id does not exist ->', }, PEER_PRIVILEGED: { not_privileged: 'Please upgrade your key to privileged to use this function', no_appkey: 'App key is not defined - Please authenticate again', getPeerListFromServer: 'Enquired server for peers within the App space', }, + ICE_CONNECTION: { + END_OF_CANDIDATES_SUCCESS: 'Signaling of end-of-candidates remote ICE gathering', + END_OF_CANDIDATES_FAILURE: 'Failed signaling of end-of-candidates remote ICE gathering', + ICE_GATHERING_STARTED: 'ICE gathering has started', + ICE_GATHERING_COMPLETED: 'ICE gathering has completed', + DROP_EOC: 'Dropping of sending ICE candidate end-of-candidates signal or unused ICE candidates ->', + STATE_CHANGE: 'Ice connection state changed ->', + }, ICE_CANDIDATE: { - CANDIDATE_HANDLER: { - DROPPING_CANDIDATE: 'Dropping ICE candidate', - INVALID_CANDIDATE: 'Received invalid ICE candidate message ->', - VALID_CANDIDATE: 'Received ICE candidate ->', - FILTERED_CANDIDATE: 'Dropping received ICE candidate as it matches ICE candidate filtering flag ->', - FILTERING_FLAG_NOT_HONOURED: 'Not dropping received ICE candidate as TURN connections are enforced as MCU is present (and act as a TURN itself) so filtering of ICE candidate flags are not honoured ->', - CANDIDATE_ADDED: 'Added ICE candidate successfully', - ADDING_CANDIDATE: 'Adding ICE Candidate', - FAILED_ADDING_CANDIDATE: 'Failed adding ICE candidate ->', - ADD_BUFFERED_CANDIDATE: 'Adding buffered ICE candidate', - ADD_CANDIDATE_TO_BUFFER: 'Adding ICE candidate to buffer', - END_OF_CANDIDATES_SUCCESS: 'Signaling of end-of-candidates remote ICE gathering', - END_OF_CANDIDATES_FAILURE: 'Failed signaling of end-of-candidates remote ICE gathering', - ICE_GATHERING_STARTED: 'ICE gathering has started', - ICE_GATHERING_COMPLETED: 'ICE gathering has completed', - CANDIDATE_GENERATED: 'Generated ICE candidate ->', - DROP_EOC: 'Dropping of sending ICE candidate end-of-candidates signal or unused ICE candidates ->', - ICE_TRICKLE_DISABLED: 'Dropping of sending ICE candidate as trickle ICE is disabled ->', - SENDING_CANDIDATE: 'Sending ICE candidate ->', - NO_SDP: 'Not sending any session description after ICE gathering completed as it is not present', - }, + DROPPING_CANDIDATE: 'Dropping ICE candidate', + INVALID_CANDIDATE: 'Received invalid ICE candidate message ->', + VALID_CANDIDATE: 'Received ICE candidate ->', + FILTERED_CANDIDATE: 'Dropping received ICE candidate as it matches ICE candidate filtering flag ->', + FILTERING_FLAG_NOT_HONOURED: 'Not dropping received ICE candidate as TURN connections are enforced as MCU is present (and act as a TURN itself) so filtering of ICE candidate flags are not honoured ->', + CANDIDATE_ADDED: 'Added ICE candidate successfully', + ADDING_CANDIDATE: 'Adding ICE Candidate', + FAILED_ADDING_CANDIDATE: 'Failed adding ICE candidate ->', + ADD_BUFFERED_CANDIDATE: 'Adding buffered ICE candidate', + ADD_CANDIDATE_TO_BUFFER: 'Adding ICE candidate to buffer', + CANDIDATE_GENERATED: 'Generated ICE candidate ->', + SENDING_CANDIDATE: 'Sending ICE candidate ->', }, SESSION_DESCRIPTION: { parsing_media_ssrc: 'Parsing session description media SSRCs ->', diff --git a/src/models/skylink-state.js b/src/models/skylink-state.js index 4d69f9b09..6bb6fb8a1 100644 --- a/src/models/skylink-state.js +++ b/src/models/skylink-state.js @@ -308,7 +308,7 @@ class SkylinkState { /** * Stores the value if ICE restart is supported. * @name enableIceRestart - * @type string + * @type boolean * @since 0.6.16 * @private */ diff --git a/src/peer-connection/helpers/getConnectionStatus.js b/src/peer-connection/helpers/getConnectionStatus.js index a83046a25..9e3635f93 100644 --- a/src/peer-connection/helpers/getConnectionStatus.js +++ b/src/peer-connection/helpers/getConnectionStatus.js @@ -12,17 +12,17 @@ const retrieveValidPeerIdsOrErrorMsg = (roomState, peerId) => { let errorMsg = null; if (isEmptyArray(Object.keys(peerConnections))) { - errorMsg = PEER_CONNECTION.not_initialised; + errorMsg = PEER_CONNECTION.NOT_INITIALISED; } else if (Array.isArray(peerId)) { peerIds = peerId; peerIds.forEach((id) => { if (!isValidPeerId(room, id)) { - errorMsg = `${PEER_CONNECTION.peerId_does_not_exist} ${id}`; + errorMsg = `${PEER_CONNECTION.PEER_ID_NOT_FOUND} ${id}`; } }); } else if (isAString(peerId)) { if (!isValidPeerId(room, peerId)) { - errorMsg = `${PEER_CONNECTION.peerId_does_not_exist} ${peerId}`; + errorMsg = `${PEER_CONNECTION.PEER_ID_NOT_FOUND} ${peerId}`; } peerIds = [peerId]; diff --git a/src/peer-connection/helpers/peer-addition/callbacks/oniceconnectionstatechange.js b/src/peer-connection/helpers/peer-addition/callbacks/oniceconnectionstatechange.js index 99328fe94..82151ca81 100644 --- a/src/peer-connection/helpers/peer-addition/callbacks/oniceconnectionstatechange.js +++ b/src/peer-connection/helpers/peer-addition/callbacks/oniceconnectionstatechange.js @@ -23,7 +23,7 @@ const isIceConnectionStateCompleted = (pcIceConnectionState) => { * @memberOf PeerConnection.PeerConnectionHelpers.CreatePeerConnectionCallbacks */ const oniceconnectionstatechange = (peerConnection, targetMid, currentRoomState) => { - const { PEER_CONNECTION } = messages; + const { PEER_CONNECTION, ICE_CONNECTION } = messages; const { ICE_CONNECTION_STATE, PEER_CONNECTION_STATE, BROWSER_AGENT } = constants; const { AdapterJS } = window; const { webrtcDetectedBrowser, webrtcDetectedType } = AdapterJS; @@ -43,7 +43,7 @@ const oniceconnectionstatechange = (peerConnection, targetMid, currentRoomState) let statsInterval = null; let pcIceConnectionState = peerConnection.iceConnectionState; - logger.log.DEBUG([targetMid, 'RTCIceConnectionState', null, PEER_CONNECTION.ice_connection_state], pcIceConnectionState); + logger.log.DEBUG([targetMid, 'RTCIceConnectionState', null, ICE_CONNECTION.STATE_CHANGE], pcIceConnectionState); if (webrtcDetectedBrowser === 'edge') { if (pcIceConnectionState === 'connecting') { diff --git a/src/peer-connection/helpers/peer-addition/callbacks/onsignalingstatechange.js b/src/peer-connection/helpers/peer-addition/callbacks/onsignalingstatechange.js index 43dd54c84..292b03582 100644 --- a/src/peer-connection/helpers/peer-addition/callbacks/onsignalingstatechange.js +++ b/src/peer-connection/helpers/peer-addition/callbacks/onsignalingstatechange.js @@ -19,7 +19,7 @@ const onsignalingstatechange = (peerConnection, targetMid) => { const { PEER_CONNECTION_STATE } = constants; const { signalingState, signalingStateClosed } = peerConnection; - logger.log.DEBUG([targetMid, 'RTCSignalingState', null, PEER_CONNECTION.peer_connection_state], signalingState); + logger.log.DEBUG([targetMid, 'RTCSignalingState', null, PEER_CONNECTION.STATE_CHANGE], signalingState); if (AdapterJS.webrtcDetectedType === 'AppleWebKit' && signalingState === PEER_CONNECTION_STATE.CLOSED) { setTimeout(() => { diff --git a/src/peer-connection/helpers/peer-addition/createPeerConnection.js b/src/peer-connection/helpers/peer-addition/createPeerConnection.js index 380d13f2b..b5f2f0278 100644 --- a/src/peer-connection/helpers/peer-addition/createPeerConnection.js +++ b/src/peer-connection/helpers/peer-addition/createPeerConnection.js @@ -1,5 +1,5 @@ import { - BUNDLE_POLICY, HANDSHAKE_PROGRESS, PEER_TYPE, BROWSER_AGENT, + BUNDLE_POLICY, HANDSHAKE_PROGRESS, PEER_TYPE, BROWSER_AGENT, TAGS, } from '../../../constants'; import Skylink from '../../../index'; import logger from '../../../logger'; @@ -7,12 +7,13 @@ import callbacks from './callbacks/index'; import { dispatchEvent } from '../../../utils/skylinkEventManager'; import { handshakeProgress } from '../../../skylink-events'; import { updateRemoveStream } from '../../../compatibility/index'; +import MESSAGES from '../../../messages'; const createNativePeerConnection = (targetMid, constraints, optional, hasScreenShare, currentRoom) => { const initOptions = Skylink.getInitOptions(); const state = Skylink.getSkylinkState(currentRoom.id); const { AdapterJS } = window; - logger.log.DEBUG([targetMid, 'RTCPeerConnection', null, 'Creating peer connection ->'], { + logger.log.DEBUG([targetMid, TAGS.PEER_CONNECTION, null, MESSAGES.PEER_CONNECTION.CREATE_NEW], { constraints, optional, }); @@ -58,6 +59,10 @@ const createNativePeerConnection = (targetMid, constraints, optional, hasScreenS } } + if (rtcPeerConnection.restartIce) { + state.enableIceRestart = true; + } + Skylink.setSkylinkState(state, currentRoom.id); if (AdapterJS.webrtcDetectedBrowser === 'firefox') { diff --git a/src/peer-connection/helpers/refresh-connection/refreshConnection.js b/src/peer-connection/helpers/refresh-connection/refreshConnection.js index cf023d9b2..bd679a73b 100644 --- a/src/peer-connection/helpers/refresh-connection/refreshConnection.js +++ b/src/peer-connection/helpers/refresh-connection/refreshConnection.js @@ -7,6 +7,7 @@ import { isEmptyArray, isAObj, isAString, isABoolean, } from '../../../utils/helpers'; import buildRefreshConnectionResult from './buildRefreshConnectionResult'; +import { TAGS } from '../../../constants'; const buildResult = (listOfPeers, refreshErrors, refreshSettings) => { const result = {}; @@ -91,14 +92,14 @@ const refreshConnection = (roomState, targetPeerId, iceRestart, options) => new try { if (isEmptyArray(listOfPeers) && !(hasMCU && !mcuUseRenegoRestart)) { - logger.log.ERROR(PEER_CONNECTION.refresh_no_peer_connection); + logger.log.ERROR(PEER_CONNECTION.NO_PEER_CONNECTION); reject({ - refreshErrors: { self: PEER_CONNECTION.refresh_no_peer_connection }, + refreshErrors: { self: PEER_CONNECTION.NO_PEER_CONNECTION }, listOfPeers, }); } - logger.log.INFO([null, 'PeerConnection', null, PEER_CONNECTION.refresh_start]); + logger.log.INFO([null, TAGS.PEER_CONNECTION, null, PEER_CONNECTION.REFRESH_CONNECTION.START]); const refreshPeerConnectionPromises = PeerConnection.refreshPeerConnection(listOfPeers, roomState, doIceRestart, bwOptions); refreshPeerConnectionPromises @@ -109,9 +110,9 @@ const refreshConnection = (roomState, targetPeerId, iceRestart, options) => new if (Array.isArray(mResults[i])) { const error = mResults[i]; refreshErrors.push(buildPeerRefreshErrors(error[0], error[1])); - logger.log.WARN([listOfPeers, 'PeerConnection', null, PEER_CONNECTION.refresh_peer_failed], error[0]); - } else if (typeof mResults[i] === 'string') { - logger.log.INFO([listOfPeers, 'PeerConnection', null, PEER_CONNECTION.refresh_peer_success], mResults[i]); + logger.log.WARN([listOfPeers, TAGS.PEER_CONNECTION, null, PEER_CONNECTION.REFRESH_CONNECTION.FAILED], error[0]); + } else if (isAString(mResults[i])) { + logger.log.INFO([listOfPeers, TAGS.PEER_CONNECTION, null, PEER_CONNECTION.REFRESH_CONNECTION.SUCCESS], mResults[i]); } } @@ -121,8 +122,8 @@ const refreshConnection = (roomState, targetPeerId, iceRestart, options) => new resolve(buildResult(listOfPeers, refreshErrors, buildPeerRefreshSettings(listOfPeers, room, doIceRestart))); } }) - .catch(error => logger.log.ERROR([null, 'RTCPeerConnection', null, PEER_CONNECTION.refresh_failed], error)) - .finally(() => logger.log.INFO(PEER_CONNECTION.refresh_completed)); + .catch(error => logger.log.ERROR([null, TAGS.PEER_CONNECTION, null, PEER_CONNECTION.REFRESH_CONNECTION.FAILED], error)) + .finally(() => logger.log.INFO(PEER_CONNECTION.REFRESH_CONNECTION.COMPLETED)); } catch (error) { reject(error); } diff --git a/src/peer-connection/helpers/refresh-connection/refreshPeerConnection.js b/src/peer-connection/helpers/refresh-connection/refreshPeerConnection.js index 6652da53b..10faa8de2 100644 --- a/src/peer-connection/helpers/refresh-connection/refreshPeerConnection.js +++ b/src/peer-connection/helpers/refresh-connection/refreshPeerConnection.js @@ -2,11 +2,10 @@ import Skylink from '../../..'; import logger from '../../../logger'; import restartPeerConnection from './restartPeerConnection'; import restartMCUConnection from './restartMCUConnection'; +import MESSAGES from '../../../messages'; +import { TAGS } from '../../../constants'; -const refreshSinglePeer = (peerId, roomState, options) => { - logger.log.INFO([peerId, 'PeerConnection', null, 'Restarting peer connection.']); - return restartPeerConnection(peerId, roomState, options); -}; +const refreshSinglePeer = (peerId, roomState, options) => restartPeerConnection(peerId, roomState, options); /** * @param {String}listOfPeers @@ -40,7 +39,7 @@ const refreshPeerConnection = (listOfPeers, roomState, doIceRestart = false, bwO return restartMCUConnection(roomState, doIceRestart, bwOptions); } catch (error) { - logger.log.ERROR([null, 'RTCPeerConnection', null, 'Failed restarting.'], error); + logger.log.ERROR([null, TAGS.PEER_CONNECTION, null, MESSAGES.PEER_CONNECTION.REFRESH_CONNECTION.FAILED], error); return null; } }; diff --git a/src/peer-connection/helpers/refresh-connection/restartPeerConnection.js b/src/peer-connection/helpers/refresh-connection/restartPeerConnection.js index ee619db98..e13a580c3 100644 --- a/src/peer-connection/helpers/refresh-connection/restartPeerConnection.js +++ b/src/peer-connection/helpers/refresh-connection/restartPeerConnection.js @@ -1,8 +1,8 @@ import Skylink from '../../..'; import logger from '../../../logger'; -import { PEER_CONNECTION_STATE } from '../../../constants'; +import { PEER_CONNECTION_STATE, TAGS } from '../../../constants'; import SkylinkSignalingServer from '../../../server-communication/signaling-server'; -import messages from '../../../messages'; +import MESSAGES from '../../../messages'; import sendRestartOfferMsg from './sendRestartOfferMsg'; /** @@ -17,29 +17,22 @@ import sendRestartOfferMsg from './sendRestartOfferMsg'; */ const restartPeerConnection = (peerId, roomState, options) => { const state = Skylink.getSkylinkState(roomState.room.id); - const { AdapterJS } = window; const { peerConnections, peerCustomConfigs, peerEndOfCandidatesCounter, room, user, } = state; const { doIceRestart, bwOptions } = options; const signaling = new SkylinkSignalingServer(); - const { PEER_CONNECTION } = messages; const errors = []; return new Promise((resolve) => { // reject with wrong peerId if (!peerConnections[peerId]) { - logger.log.ERROR([peerId, null, null, PEER_CONNECTION.refresh_peerId_no_match]); - errors.push(PEER_CONNECTION.refresh_peerId_no_match); + logger.log.ERROR([peerId, null, null, MESSAGES.PEER_CONNECTION.ERRORS.NOT_FOUND]); + errors.push(MESSAGES.PEER_CONNECTION.ERRORS.NOT_FOUND); return resolve([peerId, errors]); } const peerConnection = peerConnections[peerId]; - // refresh not supported in edge - if (AdapterJS.webrtcDetectedBrowser === 'edge') { - logger.log.WARN([peerId, 'RTCPeerConnection', null, PEER_CONNECTION.refresh_not_supported]); - errors.push(PEER_CONNECTION.refresh_no_edge_support); - } if (errors.length !== 0) { return resolve([peerId, errors]); @@ -49,7 +42,7 @@ const restartPeerConnection = (peerId, roomState, options) => { // In another galaxy or universe, where the local description gets dropped.. // In the offerHandler or answerHandler, do the appropriate flags to ignore or drop "extra" descriptions if (peerConnection.signalingState === PEER_CONNECTION_STATE.STABLE) { - logger.log.INFO([peerId, null, null, 'Sending restart message to signaling server ->'], { + logger.log.INFO([peerId, null, null, MESSAGES.PEER_CONNECTION.REFRESH_CONNECTION.SEND_RESTART_OFFER], { iceRestart: doIceRestart, options: bwOptions, }); @@ -101,12 +94,12 @@ const restartPeerConnection = (peerId, roomState, options) => { return resolve(peerId); } - const unableToRestartError = `Failed restarting as peer connection state is ${peerConnection.signalingState} and there is no localDescription set to connection. There could be a handshaking step error.`; - logger.log.DEBUG([peerId, 'RTCPeerConnection', null, unableToRestartError], { + logger.log.DEBUG([peerId, TAGS.PEER_CONNECTION, null, MESSAGES.PEER_CONNECTION.REFRESH_CONNECTION.NO_LOCAL_DESCRIPTION], { localDescription: peerConnection.localDescription, remoteDescription: peerConnection.remoteDescription, + signalingState: peerConnection.signalingState, }); - errors.push(unableToRestartError); + errors.push(MESSAGES.PEER_CONNECTION.REFRESH_CONNECTION.NO_LOCAL_DESCRIPTION); resolve([peerId, errors]); diff --git a/src/peer-connection/helpers/signalingEndOfCandidates.js b/src/peer-connection/helpers/signalingEndOfCandidates.js index d24c42c15..c4d03756b 100644 --- a/src/peer-connection/helpers/signalingEndOfCandidates.js +++ b/src/peer-connection/helpers/signalingEndOfCandidates.js @@ -23,7 +23,7 @@ const signalingEndOfCandidates = (targetMid, roomState) => { const gatheredCandidates = state.gatheredCandidates[targetMid]; const { AdapterJS, RTCIceCandidate } = window; const { TAGS } = constants; - const { PEER_CONNECTION } = messages; + const { ICE_CONNECTION } = messages; if (!peerEndOfCandidatesCounter) { return null; @@ -42,7 +42,7 @@ const signalingEndOfCandidates = (targetMid, roomState) => { && (peerCandidatesQueue ? peerCandidatesQueue.length === 0 : true) // If it has not been set yet && !peerEndOfCandidatesCounter.hasSet) { - logger.log.DEBUG([targetMid, TAGS.PEER_CONNECTION, null, PEER_CONNECTION.end_of_candidates]); + logger.log.DEBUG([targetMid, TAGS.PEER_CONNECTION, null, ICE_CONNECTION.END_OF_CANDIDATES_SUCCESS]); peerEndOfCandidatesCounter.hasSet = true; @@ -93,7 +93,7 @@ const signalingEndOfCandidates = (targetMid, roomState) => { state.peerEndOfCandidatesCounter[targetMid] = peerEndOfCandidatesCounter; Skylink.setSkylinkState(state, roomState.room.id); } catch (error) { - logger.log.ERROR([targetMid, TAGS.PEER_CONNECTION, null, PEER_CONNECTION.end_of_candidate_failure], error); + logger.log.ERROR([targetMid, TAGS.PEER_CONNECTION, null, ICE_CONNECTION.END_OF_CANDIDATES_FAILURE], error); } } return null; diff --git a/src/peer-connection/helpers/statistics/index.js b/src/peer-connection/helpers/statistics/index.js index 5d2fe0a41..054deab1b 100644 --- a/src/peer-connection/helpers/statistics/index.js +++ b/src/peer-connection/helpers/statistics/index.js @@ -183,7 +183,7 @@ class PeerConnectionStatistics { } if (typeof this.peerConnection.getStats !== 'function') { - this.getStatsFailure(reject, messages.PEER_CONNECTION.getstats_api_not_available); + this.getStatsFailure(reject, messages.PEER_CONNECTION.STATS_API_UNAVAILABLE); } dispatchEvent(getConnectionStatusStateChange({ diff --git a/src/server-communication/api-server/api-helpers.js b/src/server-communication/api-server/api-helpers.js index 848cf2432..ec5527729 100644 --- a/src/server-communication/api-server/api-helpers.js +++ b/src/server-communication/api-server/api-helpers.js @@ -167,6 +167,8 @@ export const webRTCReadyOperations = () => { room: null, })); } + + return returnObject; }; diff --git a/src/server-communication/signaling-server/message-handler/handlers/candidateHandler.js b/src/server-communication/signaling-server/message-handler/handlers/candidateHandler.js index 64c0dd800..54f108af4 100644 --- a/src/server-communication/signaling-server/message-handler/handlers/candidateHandler.js +++ b/src/server-communication/signaling-server/message-handler/handlers/candidateHandler.js @@ -24,11 +24,11 @@ const candidateHandler = (message) => { const peerConnection = state.peerConnections[mid]; const peerEndOfCandidatesCounter = state.peerEndOfCandidatesCounter[mid] || {}; const { RTCIceCandidate } = window; - const { ICE_CANDIDATE: { CANDIDATE_HANDLER }, PEER_CONNECTION, STATS_MODULE: { HANDLE_ICE_GATHERING_STATS } } = messages; + const { ICE_CANDIDATE, PEER_CONNECTION, STATS_MODULE: { HANDLE_ICE_GATHERING_STATS } } = messages; const handleIceCandidateStats = new HandleIceCandidateStats(); if (!candidate && !message.id) { - logger.log.WARN([mid, CANDIDATE_HANDLER.tag, null, CANDIDATE_HANDLER.INVALID_CANDIDATE], message); + logger.log.WARN([mid, constants.TAGS.CANDIDATE_HANDLER, null, ICE_CANDIDATE.INVALID_CANDIDATE], message); return null; } @@ -40,7 +40,7 @@ const candidateHandler = (message) => { const candidateId = `can-${nativeCandidate.foundation}`; const candidateType = nativeCandidate.candidate.split(' ')[7] || ''; - logger.log.DEBUG([mid, CANDIDATE_HANDLER.tag, `${candidateId}:${candidateType}`, CANDIDATE_HANDLER.VALID_CANDIDATE], nativeCandidate); + logger.log.DEBUG([mid, constants.TAGS.CANDIDATE_HANDLER, `${candidateId}:${candidateType}`, ICE_CANDIDATE.VALID_CANDIDATE], nativeCandidate); peerEndOfCandidatesCounter.len = peerEndOfCandidatesCounter.len || 0; peerEndOfCandidatesCounter.hasSet = false; @@ -68,7 +68,7 @@ const candidateHandler = (message) => { })); if (!(peerConnection && peerConnection.signalingState !== constants.PEER_CONNECTION_STATE.CLOSED)) { - logger.log.WARN([mid, CANDIDATE_HANDLER.tag, `${candidateId}:${candidateType}`, PEER_CONNECTION.NO_PEER_CONNECTION]); + logger.log.WARN([mid, constants.TAGS.CANDIDATE_HANDLER, `${candidateId}:${candidateType}`, PEER_CONNECTION.NO_PEER_CONNECTION]); candidateProcessingStateEventDetail.error = new Error(PEER_CONNECTION.NO_PEER_CONNECTION); handleIceCandidateStats.send(room.id, HANDLE_ICE_GATHERING_STATS.PROCESS_FAILED, mid, candidateId, candidateProcessingStateEventDetail.candidate, candidateProcessingStateEventDetail.error); @@ -88,9 +88,9 @@ const candidateHandler = (message) => { if (initOptions.filterCandidatesType[candidateType]) { if (!(state.hasMCU && initOptions.forceTURN)) { - logger.log.WARN([mid, CANDIDATE_HANDLER.tag, `${candidateId}:${candidateType}`, CANDIDATE_HANDLER.FILTERED_CANDIDATE], nativeCandidate); + logger.log.WARN([mid, constants.TAGS.CANDIDATE_HANDLER, `${candidateId}:${candidateType}`, ICE_CANDIDATE.FILTERED_CANDIDATE], nativeCandidate); - candidateProcessingStateEventDetail.error = new Error(CANDIDATE_HANDLER.FILTERED_CANDIDATE); + candidateProcessingStateEventDetail.error = new Error(ICE_CANDIDATE.FILTERED_CANDIDATE); handleIceCandidateStats.send(room.id, HANDLE_ICE_GATHERING_STATS.DROPPED, mid, candidateId, candidateProcessingStateEventDetail.candidate, candidateProcessingStateEventDetail.error); dispatchEvent(candidateProcessingState({ room, @@ -106,7 +106,7 @@ const candidateHandler = (message) => { return null; } - logger.log.WARN([mid, CANDIDATE_HANDLER.tag, `${candidateId}:${candidateType}`, CANDIDATE_HANDLER.FILTERING_FLAG_NOT_HONOURED], nativeCandidate); + logger.log.WARN([mid, constants.TAGS.CANDIDATE_HANDLER, `${candidateId}:${candidateType}`, ICE_CANDIDATE.FILTERING_FLAG_NOT_HONOURED], nativeCandidate); } if (peerConnection.remoteDescription && peerConnection.remoteDescription.sdp && peerConnection.localDescription && peerConnection.localDescription.sdp) { diff --git a/src/server-communication/signaling-server/message-handler/handlers/commons/enterAndWelcome.js b/src/server-communication/signaling-server/message-handler/handlers/commons/enterAndWelcome.js index 6232ec900..d9793d4bd 100644 --- a/src/server-communication/signaling-server/message-handler/handlers/commons/enterAndWelcome.js +++ b/src/server-communication/signaling-server/message-handler/handlers/commons/enterAndWelcome.js @@ -1,5 +1,7 @@ import Skylink from '../../../../../index'; -import { PEER_CERTIFICATE, PEER_CONNECTION_STATE, PEER_TYPE } from '../../../../../constants'; +import { + PEER_CERTIFICATE, PEER_CONNECTION_STATE, PEER_TYPE, TAGS, +} from '../../../../../constants'; import processPeer from './processPeer'; import SkylinkSignalingServer from '../../../index'; import handleNegotiationStats from '../../../../../skylink-stats/handleNegotiationStats'; @@ -21,7 +23,7 @@ const getNextNegotiationStep = (params) => { if (hasMCU || peerPriorityWeight > params.message.weight) { if (peerMessagesStamps[params.targetMid].hasWelcome) { method = 'noop'; - logger.log.WARN([params.targetMid, 'RTCPeerConnection', null, 'Discarding extra "welcome" received.']); + logger.log.WARN([params.targetMid, TAGS.PEER_CONNECTION, null, 'Discarding extra "welcome" received.']); } else { method = 'offer'; state.peerMessagesStamps[params.targetMid].hasWelcome = true; @@ -72,7 +74,7 @@ const logStats = (caller, targetMid, state, message) => { callerState = 'welcome'; } - logger.log.INFO([targetMid, 'RTCPeerConnection', null, `Peer ${callerState} received ->`], message); + logger.log.INFO([targetMid, TAGS.PEER_CONNECTION, null, `Peer ${callerState} received ->`], message); handleNegotiationStats.send(room.id, callerState, targetMid, message, true); }; @@ -99,7 +101,7 @@ export const parseAndSendWelcome = (message, caller) => { callerState = 'welcome'; } if (targetMid !== PEER_TYPE.MCU && hasMCU && state.publishOnly) { - logger.log.WARN([targetMid, 'RTCPeerConnection', null, `Discarding ${callerState} for publishOnly case -> `], message); + logger.log.WARN([targetMid, TAGS.PEER_CONNECTION, null, `Discarding ${callerState} for publishOnly case -> `], message); return; } diff --git a/src/server-communication/signaling-server/message-handler/handlers/commons/processPeer.js b/src/server-communication/signaling-server/message-handler/handlers/commons/processPeer.js index eea7602c8..047f5aa75 100644 --- a/src/server-communication/signaling-server/message-handler/handlers/commons/processPeer.js +++ b/src/server-communication/signaling-server/message-handler/handlers/commons/processPeer.js @@ -6,7 +6,10 @@ import { peerJoined, handshakeProgress, serverPeerJoined } from '../../../../../ import { dispatchEvent } from '../../../../../utils/skylinkEventManager'; import PeerData from '../../../../../peer-data'; import parsers from '../../../parsers/index'; -import { PEER_TYPE, SERVER_PEER_TYPE, HANDSHAKE_PROGRESS } from '../../../../../constants'; +import { + PEER_TYPE, SERVER_PEER_TYPE, HANDSHAKE_PROGRESS, TAGS, +} from '../../../../../constants'; +import MESSAGES from '../../../../../messages'; const setPeerInformations = (state, peerId, userInfo) => { const { room } = state; @@ -59,7 +62,7 @@ const processPeer = (params) => { }); if (targetMid === PEER_TYPE.MCU) { - logger.log.INFO([targetMid, 'RTCPeerConnection', null, 'MCU feature has been enabled']); + logger.log.INFO([targetMid, TAGS.PEER_CONNECTION, null, MESSAGES.PEER_CONNECTION.MCU]); state.hasMCU = true; dispatchEvent(serverPeerJoined({ peerId: targetMid, diff --git a/src/server-communication/signaling-server/parsers/parseUserInfo.js b/src/server-communication/signaling-server/parsers/parseUserInfo.js index a68087b5b..fc3a6127c 100644 --- a/src/server-communication/signaling-server/parsers/parseUserInfo.js +++ b/src/server-communication/signaling-server/parsers/parseUserInfo.js @@ -3,7 +3,7 @@ const parseUserInfo = (state, msg, parsedMsg) => { info.config = info.config ? info.config : { enableDataChannel: parsedMsg.enableDataChannel, - enableIceRestart: parsedMsg.enableIceRestart, + // enableIceRestart: parsedMsg.enableIceRestart, priorityWeight: parsedMsg.weight, receiveOnly: parsedMsg.receiveOnly, publishOnly: parsedMsg.publishOnly, From 37836ede94d32d7a41967f4c93cc81d7eee6d4df Mon Sep 17 00:00:00 2001 From: dinawee Date: Wed, 20 May 2020 17:11:26 +0800 Subject: [PATCH 04/17] docs: update documentation for readability --- src/constants.js | 255 +++++++++++--------- src/public/index.js | 135 ++++++----- src/skylink-events/candidate-events.js | 13 +- src/skylink-events/datachannel-events.js | 40 +-- src/skylink-events/index.js | 72 +++++- src/skylink-events/init-events.js | 4 +- src/skylink-events/logger-events.js | 1 + src/skylink-events/media-events.js | 42 ++-- src/skylink-events/peer-events.js | 41 ++-- src/skylink-events/peer-handshake-events.js | 2 +- src/skylink-events/room-events.js | 9 +- src/skylink-events/socket-events.js | 17 +- src/skylink-events/stream-events.js | 19 +- 13 files changed, 386 insertions(+), 264 deletions(-) diff --git a/src/constants.js b/src/constants.js index 524af6c38..5c29c0b93 100644 --- a/src/constants.js +++ b/src/constants.js @@ -2,7 +2,80 @@ import * as SkylinkEventsConstants from './skylink-events/constants'; /** * @namespace SkylinkConstants - * @description Constants used by SkylinkJS are described here. + * @description + *
    + *
  • {@link SkylinkConstants.DATA_CHANNEL_STATE|DATA_CHANNEL_STATE}
  • + *
  • {@link SkylinkConstants.DATA_CHANNEL_TYPE|DATA_CHANNEL_TYPE}
  • + *
  • {@link SkylinkConstants.DATA_CHANNEL_MESSAGE_ERROR|DATA_CHANNEL_MESSAGE_ERROR}
  • + *
  • {@link SkylinkConstants.CANDIDATE_GENERATION_STATE|CANDIDATE_GENERATION_STATE}
  • + *
  • {@link SkylinkConstants.CANDIDATE_PROCESSING_STATE|CANDIDATE_PROCESSING_STATE}
  • + *
  • {@link SkylinkConstants.ICE_CONNECTION_STATE|ICE_CONNECTION_STATE}
  • + *
  • {@link SkylinkConstants.TURN_TRANSPORT|TURN_TRANSPORT}
  • + *
  • {@link SkylinkConstants.PEER_CONNECTION_STATE|PEER_CONNECTION_STATE}
  • + *
  • {@link SkylinkConstants.GET_CONNECTION_STATUS_STATE|GET_CONNECTION_STATUS_STATE}
  • + *
  • {@link SkylinkConstants.SERVER_PEER_TYPE|SERVER_PEER_TYPE}
  • + *
  • {@link SkylinkConstants.BUNDLE_POLICY|BUNDLE_POLICY}
  • + *
  • {@link SkylinkConstants.RTCP_MUX_POLICY|RTCP_MUX_POLICY}
  • + *
  • {@link SkylinkConstants.PEER_CERTIFICATE|PEER_CERTIFICATE}
  • + *
  • {@link SkylinkConstants.HANDSHAKE_PROGRESS|HANDSHAKE_PROGRESS}
  • + *
  • {@link SkylinkConstants.GET_PEERS_STATE|GET_PEERS_STATE}
  • + *
  • {@link SkylinkConstants.SYSTEM_ACTION|SYSTEM_ACTION}
  • + *
  • {@link SkylinkConstants.SYSTEM_ACTION_REASON|SYSTEM_ACTION_REASON}
  • + *
  • {@link SkylinkConstants.READY_STATE_CHANGE|READY_STATE_CHANGE}
  • + *
  • {@link SkylinkConstants.READY_STATE_CHANGE_ERROR|READY_STATE_CHANGE_ERROR}
  • + *
  • {@link SkylinkConstants.LOG_LEVEL|LOG_LEVEL}
  • + *
  • {@link SkylinkConstants.SOCKET_ERROR|SOCKET_ERROR}
  • + *
  • {@link SkylinkConstants.SOCKET_FALLBACK|SOCKET_FALLBACK}
  • + *
  • {@link SkylinkConstants.SM_PROTOCOL_VERSION|SM_PROTOCOL_VERSION}
  • + *
  • {@link SkylinkConstants.VIDEO_CODEC|VIDEO_CODEC}
  • + *
  • {@link SkylinkConstants.AUDIO_CODEC|AUDIO_CODEC}
  • + *
  • {@link SkylinkConstants.MEDIA_SOURCE|MEDIA_SOURCE}
  • + *
  • {@link SkylinkConstants.VIDEO_RESOLUTION|VIDEO_RESOLUTION}
  • + *
  • {@link SkylinkConstants.MEDIA_ACCESS_FALLBACK_STATE|MEDIA_ACCESS_FALLBACK_STATE}
  • + *
  • {@link SkylinkConstants.RECORDING_STATE|RECORDING_STATE}
  • + *
  • {@link SkylinkConstants.VIDEO_QUALITY|VIDEO_QUALITY}
  • + *
  • {@link SkylinkConstants.SDP_SEMANTICS|SDP_SEMANTICS}
  • + *
  • {@link SkylinkConstants.RTMP_STATE|RTMP_STATE}
  • + *
  • {@link SkylinkConstants.MEDIA_STATUS|MEDIA_STATUS}
  • + *
  • {@link SkylinkConstants.MEDIA_TYPE|MEDIA_TYPE}
  • + *
  • {@link SkylinkConstants.MEDIA_STATE|MEDIA_STATE}
  • + *
+ */ + +/** + * // Not implemented yet + * {@link SkylinkConstants.DATA_TRANSFER_DATA_TYPE|DATA_TRANSFER_DATA_TYPE}
+ * {@link SkylinkConstants.DT_PROTOCOL_VERSION|DT_PROTOCOL_VERSION}
+ * {@link SkylinkConstants.DATA_TRANSFER_TYPE|DATA_TRANSFER_TYPE}
+ * {@link SkylinkConstants.DATA_TRANSFER_SESSION_TYPE|DATA_TRANSFER_SESSION_TYPE}
+ * {@link SkylinkConstants.DATA_TRANSFER_STATE|DATA_TRANSFER_STATE}
+ * {@link SkylinkConstants.DATA_STREAM_STATE|DATA_STREAM_STATE}
+ * {@link SkylinkConstants.INTRODUCE_STATE|INTRODUCE_STATE}
+ * {@link SkylinkConstants.REGIONAL_SERVER|REGIONAL_SERVER}
+ * {@link SkylinkConstants.PRIORITY_WEIGHT_SCHEME|PRIORITY_WEIGHT_SCHEME}
+ * {@link SkylinkConstants.CHUNK_FILE_SIZE|CHUNK_FILE_SIZE}
+ * {@link SkylinkConstants.MOZ_CHUNK_FILE_SIZE|MOZ_CHUNK_FILE_SIZE}
+ * {@link SkylinkConstants.BINARY_FILE_SIZE|BINARY_FILE_SIZE}
+ * {@link SkylinkConstants.MOZ_BINARY_FILE_SIZE|MOZ_BINARY_FILE_SIZE}
+ * {@link SkylinkConstants.CHUNK_DATAURL_SIZE|CHUNK_DATAURL_SIZE}
+ * {@link SkylinkConstants.DC_PROTOCOL_TYPE|DC_PROTOCOL_TYPE}
+ * // Private + * {@link SkylinkConstants.SIG_MESSAGE_TYPE|SIG_MESSAGE_TYPE}
+ * {@link SkylinkConstants.STREAM_STATUS|STREAM_STATUS}
+ * {@link SkylinkConstants.GROUP_MESSAGE_LIST|GROUP_MESSAGE_LIST}
+ * {@link SkylinkConstants.TAGS|TAGS}
+ * {@link SkylinkConstants.TRACK_READY_STATE|TRACK_READY_STATE}
+ * {@link SkylinkConstants.TRACK_KIND|TRACK_KIND}
+ * {@link SkylinkConstants.MEDIA_INFO|MEDIA_INFO}
+ * {@link SkylinkConstants.SDK_VERSION|SDK_VERSION}
+ * {@link SkylinkConstants.SDK_NAME|SDK_NAME}
+ * {@link SkylinkConstants.API_VERSION|API_VERSION}
+ * {@link SkylinkConstants.SIGNALING_VERSION|SIGNALING_VERSION}
+ * {@link SkylinkConstants.BROWSER_AGENT|BROWSER_AGENT}
+ * {@link SkylinkConstants.PEER_TYPE|PEER_TYPE}
+ * {@link SkylinkConstants.SOCKET_EVENTS|SOCKET_EVENTS}
+ * {@link SkylinkConstants.SOCKET_TYPE|SOCKET_TYPE}
+ * {@link SkylinkConstants.STATES|STATES}
*/ /** @@ -23,12 +96,12 @@ import * as SkylinkEventsConstants from './skylink-events/constants'; * @property {String} BUFFERED_AMOUNT_LOW Value "bufferedAmountLow" * The value of the state when Datachannel when the amount of data buffered to be sent * falls below the Datachannel threshold. - * This state should occur only during after {@link Skylink#sendBlobData} or {@link Skylink#sendURLData} or - * {@link Skylink#sendP2PMessage}. + * This state should occur only during after {@link Skylink#sendBlobData|sendBlobData} or {@link Skylink#sendURLData|sendURLData} or + * {@link Skylink#sendP2PMessage|sendP2PMessage}. * @property {String} SEND_MESSAGE_ERROR Value "sendMessageError" * The value of the state when Datachannel when data transfer packets or P2P message fails to send. - * This state should occur only during after {@link Skylink#sendBlobData} or {@link Skylink#sendURLData} or - * {@link Skylink#sendP2PMessage}. + * This state should occur only during after {@link Skylink#sendBlobData|sendBlobData} or {@link Skylink#sendURLData|sendURLData} or + * {@link Skylink#sendP2PMessage|sendP2PMessage}. * @constant * @type object * @readOnly @@ -51,18 +124,19 @@ export const DATA_CHANNEL_STATE = { * @typedef DATA_CHANNEL_TYPE * @property {String} MESSAGING Value "messaging" * The value of the Datachannel type that is used only for messaging in - * {@link Skylink#sendP2PMessage}. + * {@link Skylink#sendP2PMessage|sendP2PMessage}. * However for Peers that do not support simultaneous data transfers, this Datachannel * type will be used to do data transfers (1 at a time). * Each Peer connections will only have one of this Datachannel type and the - * connection will only close when the Peer connection is closed (happens when {@link SkylinkEvents.event:peerConnectionState|peerConnectionStateEvent} triggers parameter payload state as + * connection will only close when the Peer connection is closed (happens when {@link SkylinkEvents.event:PEER_CONNECTION_STATE|PEER CONNECTION + * STATE} event triggers parameter payload state as * CLOSED for Peer). - * @property {String} DATA Value "data" + * @property {String} DATA [UNAVAILABLE] Value "data" * The value of the Datachannel type that is used only for a data transfer in - * {@link Skylink#sendURLData} and - * {@link Skylink#sendBlobData}. + * {@link Skylink#sendURLData|sendURLData} and + * {@link Skylink#sendBlobData|sendBlobData}. * The connection will close after the data transfer has been completed or terminated (happens when - * {@link SkylinkEvents.event:dataTransferStatedataTransferStateEvent} triggers parameter payload + * {@link SkylinkEvents.event:DATA_TRANSFER_STATE|DATA TRANSFER STATE} triggers parameter payload * state as DOWNLOAD_COMPLETED, UPLOAD_COMPLETED, * REJECTED, CANCEL or ERROR for Peer). * @constant @@ -81,11 +155,11 @@ export const DATA_CHANNEL_TYPE = { * @typedef DATA_CHANNEL_MESSAGE_ERROR * @property {String} MESSAGE Value "message" * The value of the Datachannel sending message error type when encountered during - * sending P2P message from {@link Skylink#sendP2PMessage}. + * sending P2P message from {@link Skylink#sendP2PMessage|sendP2PMessage}. * @property {String} TRANSFER Value "transfer" * The value of the Datachannel sending message error type when encountered during - * data transfers from {@link Skylink#sendURLData} or - * {@link Skylink#sendBlobData}. + * data transfers from {@link Skylink#sendURLData|sendURLData} or + * {@link Skylink#sendBlobData|sendBlobData}. * @constant * @type object * @readOnly @@ -103,22 +177,22 @@ export const DATA_CHANNEL_MESSAGE_ERROR = { * @property {String} BINARY_STRING Value "binaryString" * The value of data transfer data type when Blob binary data chunks encoded to Base64 encoded string are * sent or received over the Datachannel connection for the data transfer session. - * Used only in {@link Skylink#sendBlobData} when + * Used only in {@link Skylink#sendBlobData|sendBlobData} when * parameter sendChunksAsBinary value is false. * @property {String} ARRAY_BUFFER Value "arrayBuffer" * The value of data transfer data type when ArrayBuffer binary data chunks are * sent or received over the Datachannel connection for the data transfer session. - * Used only in {@link Skylink#sendBlobData} when + * Used only in {@link Skylink#sendBlobData|sendBlobData} when * parameter sendChunksAsBinary value is true. * @property {String} BLOB Value "blob" * The value of data transfer data type when Blob binary data chunks are * sent or received over the Datachannel connection for the data transfer session. - * Used only in {@link Skylink#sendBlobData} when + * Used only in {@link Skylink#sendBlobData|sendBlobData} when * parameter sendChunksAsBinary value is true. * @property {String} STRING Value "string" * The value of data transfer data type when only string data chunks are * sent or received over the Datachannel connection for the data transfer session. - * Used only in {@link Skylink#sendURLData}. + * Used only in {@link Skylink#sendURLData|sendURLData}. * @constant * @type Object * @readOnly @@ -172,10 +246,10 @@ export const DATA_TRANSFER_TYPE = { * @typedef DATA_TRANSFER_SESSION_TYPE * @property {String} BLOB Value "blob" * The value of the session type for - * {@link Skylink#sendURLData} data transfer. + * {@link Skylink#sendURLData|sendURLData} data transfer. * @property {String} DATA_URL Value "dataURL" * The value of the session type for - * {@link Skylink#sendBlobData} data transfer. + * {@link Skylink#sendBlobData|sendBlobData} data transfer. * @constant * @type Object * @readOnly @@ -361,7 +435,7 @@ export const CANDIDATE_PROCESSING_STATE = { * @property {String} CHECKING Value "checking" * The value of the state when Peer connection is checking for a suitable matching pair of * ICE candidates to establish ICE connection. - * Exchanging of ICE candidates happens during {@link SkylinkEvents.event:candidateGenerationState|candidateGenerationStateEvent}. + * Exchanging of ICE candidates happens during {@link SkylinkEvents.event:candidateGenerationState|{@link SkylinkEvents.event:CANDIDATE_GENERATION_STATE|CANDIDATE GENERATION STATE} event}. * @property {String} CONNECTED Value "connected" * The value of the state when Peer connection has found a suitable matching pair of * ICE candidates to establish ICE connection but is still checking for a better @@ -372,7 +446,7 @@ export const CANDIDATE_PROCESSING_STATE = { * The value of the state when Peer connection has found the best suitable matching pair * of ICE candidates to establish ICE connection and checking has stopped. * At this state, ICE connection is already established and audio, video and - * data streaming has already started. This may happpen after CONNECTED. + * data streaming has already started. This may happen after CONNECTED. * @property {String} FAILED Value "failed" * The value of the state when Peer connection ICE connection has failed. * @property {String} DISCONNECTED Value "disconnected" @@ -490,11 +564,11 @@ export const PEER_CONNECTION_STATE = { * The list of {@link Skylink#getConnectionStatus} retrieval states. * @typedef GET_CONNECTION_STATUS_STATE * @property {number} RETRIEVING Value 0 - * The value of the state when {@link Skylink#getConnectionStatus} is retrieving the Peer connection stats. + * The value of the state when {@link Skylink#getConnectionStatus|getConnectionStatus} is retrieving the Peer connection stats. * @property {number} RETRIEVE_SUCCESS Value 1 - * The value of the state when {@link Skylink#getConnectionStatus} has retrieved the Peer connection stats successfully. + * The value of the state when {@link Skylink#getConnectionStatus|getConnectionStatus} has retrieved the Peer connection stats successfully. * @property {number} RETRIEVE_ERROR Value -1 - * The value of the state when {@link Skylink#getConnectionStatus} has failed retrieving the Peer connection stats. + * The value of the state when {@link Skylink#getConnectionStatus|getConnectionStatus} has failed retrieving the Peer connection stats. * @constant * @type Object * @readOnly @@ -654,13 +728,13 @@ export const HANDSHAKE_PROGRESS = { * * Read more about privileged App Key feature here. * - * The list of getPeers() method retrieval states. + * The list of {@link Skylink#getPeers|getPeers} method retrieval states. * @typedef GET_PEERS_STATE * @property {String} ENQUIRED Value "enquired" - * The value of the state when getPeers() is retrieving the list of Peer IDs + * The value of the state when {@link Skylink#getPeers|getPeers} is retrieving the list of Peer IDs * from Rooms within the same App space from the Signaling server. * @property {String} RECEIVED Value "received" - * The value of the state when getPeers() has retrieved the list of Peer IDs + * The value of the state when {@link Skylink#getPeers|getPeers} has retrieved the list of Peer IDs * from Rooms within the same App space from the Signaling server successfully. * @readOnly * @type Object @@ -704,7 +778,7 @@ export const INTRODUCE_STATE = { }; /** - * The list of Signaling server reaction states during {@link Skylink#joinRoom}. + * The list of Signaling server reaction states during {@link Skylink#joinRoom|joinRoom}. * @typedef SYSTEM_ACTION * @property {String} WARNING Value "warning" * The value of the state when Room session is about to end. @@ -726,41 +800,37 @@ export const SYSTEM_ACTION = { /** * The list of Signaling server reaction states reason of action code during - * {@link Skylink#joinRoom}. + * {@link Skylink#joinRoom|joinRoom}. * @typedef SYSTEM_ACTION_REASON * @property {String} CREDENTIALS_EXPIRED Value "oldTimeStamp" * The value of the reason code when Room session token has expired. - * Happens during {@link Skylink#joinRoom} request. + * Happens during {@link Skylink#joinRoom|joinRoom} request. * Results with: REJECT * @property {String} CREDENTIALS_ERROR Value "credentialError" * The value of the reason code when Room session token provided is invalid. - * Happens during {@link Skylink#joinRoom} request. + * Happens during {@link Skylink#joinRoom|joinRoom} request. * @property {String} DUPLICATED_LOGIN Value "duplicatedLogin" * The value of the reason code when Room session token has been used already. - * Happens during {@link Skylink#joinRoom} request. + * Happens during {@link Skylink#joinRoom|joinRoom} request. * Results with: REJECT * @property {String} ROOM_NOT_STARTED Value "notStart" * The value of the reason code when Room session has not started. - * Happens during {@link Skylink#joinRoom} request. + * Happens during {@link Skylink#joinRoom|joinRoom} request. * Results with: REJECT * @property {String} EXPIRED Value "expired" * The value of the reason code when Room session has ended already. - * Happens during {@link Skylink#joinRoom} request. + * Happens during {@link Skylink#joinRoom|joinRoom} request. * Results with: REJECT * @property {String} ROOM_LOCKED Value "locked" * The value of the reason code when Room is locked. - * Happens during {@link Skylink#joinRoom} request. + * Happens during {@link Skylink#joinRoom|joinRoom} request. * Results with: REJECT * @property {String} FAST_MESSAGE Value "fastmsg" * The value of the reason code when User is flooding socket messages to the Signaling server * that is sent too quickly within less than a second interval. * Happens after Room session has started. This can be caused by various methods like - * {@link Skylink#sendMessage}, - * {@link Skylink#muteStreams}, - * {@link Skylink#enableAudio}, - * {@link Skylink#enableVideo}, - * {@link Skylink#disableAudio}, - * {@link Skylink#disableVideo}, + * {@link Skylink#sendMessage|sendMessage}, + * {@link Skylink#muteStreams|muteStreams} * Results with: WARNING * @property {String} ROOM_CLOSING Value "toClose" * The value of the reason code when Room session is ending. @@ -773,12 +843,12 @@ export const SYSTEM_ACTION = { * Results with: REJECT * @property {String} SERVER_ERROR Value "serverError" * The value of the reason code when Room session fails to start due to some technical errors. - * Happens during {@link Skylink#joinRoom} request. + * Happens during {@link Skylink#joinRoom|joinRoom} request. * Results with: REJECT * @property {String} KEY_ERROR Value "keyFailed" * The value of the reason code when Room session fails to start due to some technical error pertaining to * App Key initialization. - * Happens during {@link Skylink#joinRoom} request. + * Happens during {@link Skylink#joinRoom|joinRoom} request. * Results with: REJECT * @constant * @type Object @@ -812,7 +882,7 @@ export const SYSTEM_ACTION_REASON = { * The value of the state when init() has successfully authenticated with the Auth server. * Room session token is generated for joining the provided in init(). * Room session token has to be generated each time User switches to a different Room - * in {@link Skylink#joinRoom}. + * in {@link Skylink#joinRoom|joinRoom} method. * @property {number} ERROR Value -1 * The value of the state when init() has failed authenticating with the Auth server. * @constant @@ -950,7 +1020,7 @@ export const REGIONAL_SERVER = { }; /** - * The list of User's priority weight schemes for {@link Skylink#joinRoom} connections. + * The list of User's priority weight schemes for {@link Skylink#joinRoom|joinRoom} connections. * @typedef PRIORITY_WEIGHT_SCHEME * @property {String} ENFORCE_OFFERER Value "enforceOfferer" * The value of the priority weight scheme to enforce User as the offerer. @@ -1007,24 +1077,24 @@ export const LOG_LEVEL = { }; /** - * The list of {@link Skylink#joinRoom} socket connection failure states. + * The list of {@link Skylink#joinRoom|joinRoom} socket connection failure states. * @typedef SOCKET_ERROR * @property {number} CONNECTION_FAILED Value 0 - * The value of the failure state when joinRoom() socket connection failed to establish with + * The value of the failure state when {@link Skylink#joinRoom|joinRoom} socket connection failed to establish with * the Signaling server at the first attempt. * @property {number} RECONNECTION_FAILED Value -1 - * The value of the failure state when joinRoom() socket connection failed to establish + * The value of the failure state when {@link Skylink#joinRoom|joinRoom} socket connection failed to establish * the Signaling server after the first attempt. * @property {number} CONNECTION_ABORTED Value -2 - * The value of the failure state when joinRoom() socket connection will not attempt + * The value of the failure state when {@link Skylink#joinRoom|joinRoom} socket connection will not attempt * to reconnect after the failure of the first attempt in CONNECTION_FAILED as there * are no more ports or transports to attempt for reconnection. * @property {number} RECONNECTION_ABORTED Value -3 - * The value of the failure state when joinRoom() socket connection will not attempt + * The value of the failure state when {@link Skylink#joinRoom|joinRoom} socket connection will not attempt * to reconnect after the failure of several attempts in RECONNECTION_FAILED as there * are no more ports or transports to attempt for reconnection. * @property {number} RECONNECTION_ATTEMPT Value -4 - * The value of the failure state when joinRoom() socket connection is attempting + * The value of the failure state when {@link Skylink#joinRoom|joinRoom} socket connection is attempting * to reconnect with a new port or transport after the failure of attempts in * CONNECTION_FAILED or RECONNECTED_FAILED. * @constant @@ -1042,22 +1112,22 @@ export const SOCKET_ERROR = { }; /** - * The list of {@link Skylink#joinRoom} socket connection reconnection states. + * The list of {@link Skylink#joinRoom|joinRoom} socket connection reconnection states. * @typedef SOCKET_FALLBACK * @property {String} NON_FALLBACK Value "nonfallback" - * The value of the reconnection state when joinRoom() socket connection is at its initial state + * The value of the reconnection state when {@link Skylink#joinRoom|joinRoom} socket connection is at its initial state * without transitioning to any new socket port or transports yet. * @property {String} FALLBACK_PORT Value "fallbackPortNonSSL" - * The value of the reconnection state when joinRoom() socket connection is reconnecting with + * The value of the reconnection state when {@link Skylink#joinRoom|joinRoom} socket connection is reconnecting with * another new HTTP port using WebSocket transports to attempt to establish connection with Signaling server. * @property {String} FALLBACK_PORT_SSL Value "fallbackPortSSL" - * The value of the reconnection state when joinRoom() socket connection is reconnecting with + * The value of the reconnection state when {@link Skylink#joinRoom|joinRoom} socket connection is reconnecting with * another new HTTPS port using WebSocket transports to attempt to establish connection with Signaling server. * @property {String} LONG_POLLING Value "fallbackLongPollingNonSSL" - * The value of the reconnection state when joinRoom() socket connection is reconnecting with + * The value of the reconnection state when {@link Skylink#joinRoom|joinRoom} socket connection is reconnecting with * another new HTTP port using Polling transports to attempt to establish connection with Signaling server. * @property {String} LONG_POLLING_SSL Value "fallbackLongPollingSSL" - * The value of the reconnection state when joinRoom() socket connection is reconnecting with + * The value of the reconnection state when {@link Skylink#joinRoom|joinRoom} socket connection is reconnecting with * another new HTTPS port using Polling transports to attempt to establish connection with Signaling server. * @constant * @type Object @@ -1076,7 +1146,7 @@ export const SOCKET_FALLBACK = { /** *
* Note that this is used only for SDK developer purposes.
- * Current version: 0.1.4 + * Current version: 2.1.0 *
* The value of the current version of the Signaling socket message protocol. * @typedef SM_PROTOCOL_VERSION @@ -1162,7 +1232,7 @@ export const AUDIO_CODEC = { /** * The list of available screensharing media sources configured in the - * {@link Skylink#shareScreen}. + * {@link Skylink#shareScreen|shareScreen}. * @typedef MEDIA_SOURCE * @property {String} SCREEN Value "screen" * The value of the option to share entire screen. @@ -1203,11 +1273,11 @@ export const MEDIA_SOURCE = { /** *
- * Note that currently {@link Skylink#getUserMedia} only configures + * Note that currently {@link Skylink#getUserMedia|getUserMedia} method only configures * the maximum resolution of the Stream due to browser interopability and support. *
* The list of - * video resolutions sets configured in the {@link Skylink#getUserMedia}. + * video resolutions sets configured in the {@link Skylink#getUserMedia|getUserMedia} method. * @typedef VIDEO_RESOLUTION * @property {Object} QQVGA Value { width: 160, height: 120 } * The value of the option to configure QQVGA resolution. @@ -1316,19 +1386,19 @@ export const VIDEO_RESOLUTION = { }; /** - * The list of {@link Skylink#getUserMedia} or - * {@link Skylink#shareScreen} Stream fallback states. + * The list of {@link Skylink#getUserMedia|getUserMedia} or + * {@link Skylink#shareScreen|shareScreen} Stream fallback states. * @typedef MEDIA_ACCESS_FALLBACK_STATE * @property {Object} FALLBACKING Value 0 - * The value of the state when getUserMedia() will retrieve audio track only + * The value of the state when {@link Skylink#getUserMedia|getUserMedia} method will retrieve audio track only * when retrieving audio and video tracks failed. * This can be configured by Skylink {@link initOptions} * audioFallback option. * @property {Object} FALLBACKED Value 1 - * The value of the state when getUserMedia() or shareScreen() - * retrieves camera / screensharing Stream successfully but with missing originally required audio or video tracks. + * The value of the state when {@link Skylink#getUserMedia|getUserMedia} or {@link Skylink#shareScreen|shareScreen} + * method retrieves camera / screensharing Stream successfully but with missing originally required audio or video tracks. * @property {Object} ERROR Value -1 - * The value of the state when getUserMedia() failed to retrieve audio track only + * The value of the state when {@link Skylink#getUserMedia|getUserMedia} method failed to retrieve audio track only * after retrieving audio and video tracks failed. * @readOnly * @constant @@ -1939,53 +2009,4 @@ export const STATES = { SIGNALING: SOCKET_EVENTS, }; -/** - * @namespace SkylinkConstants.EVENTS - * @type {object} - * @property {String} ON_INCOMING_STREAM - 'onIncomingStream' - * @property {String} ON_INCOMING_SCREEN_STREAM - 'onIncomingScreenStream' - * @property {String} STREAM_ENDED - 'streamEnded' - * @property {String} PEER_UPDATED - 'peerUpdated' - * @property {String} PEER_JOINED - 'peerJoined' - * @property {String} PEER_LEFT - 'peerLeft' - * @property {String} PEER_CONNECTION_STATE - 'peerConnectionState' - * @property {String} DATA_CHANNEL_STATE - 'dataChannelState' - * @property {String} ON_INCOMING_MESSAGE - 'onIncomingMessage' - * @property {String} HANDSHAKE_PROGRESS - 'handshakeProgress' - * @property {String} SERVER_PEER_JOINED - 'serverPeerJoined' - * @property {String} SERVER_PEER_LEFT - 'serverPeerLeft' - * @property {String} CANDIDATE_PROCESSING_STATE - 'candidateProcessingState' - * @property {String} CANDIDATE_GENERATION_STATE - 'candidateGenerationState' - * @property {String} CANDIDATES_GATHERED - 'candidatesGathered' - * @property {String} ON_INCOMING_DATA - 'onIncomingData' - * @property {String} GET_PEERS_STATE_CHANGE - 'getPeersStateChange' - * @property {String} SESSION_DISCONNECT - 'sessionDisconnect' - * @property {String} STREAM_MUTED - 'streamMuted' - * @property {String} CHANNEL_OPEN - 'channelOpen' - * @property {String} CHANNEL_CLOSE - 'channelClose' - * @property {String} CHANNEL_MESSAGE - 'channelMessage' - * @property {String} CHANNEL_ERROR - 'channelError' - * @property {String} CHANNEL_RETRY - 'channelRetry' - * @property {String} SOCKET_ERROR - 'socketError' - * @property {String} SYSTEM_ACTION - 'systemAction' - * @property {String} MEDIA_ACCESS_FALLBACK - 'mediaAccessFallback' - * @property {String} MEDIA_ACCESS_REQUIRED - 'mediaAccessRequired' - * @property {String} MEDIA_ACCESS_STOPPED - 'mediaAccessStopped' - * @property {String} MEDIA_ACCESS_SUCCESS - 'mediaAccessSuccess' - * @property {String} RECORDING_STATE - 'recordingState' - * @property {String} LOCAL_MEDIA_MUTED - 'localMediaMuted' - * @property {String} MEDIA_ACCESS_ERROR - 'mediaAccessError' - * @property {String} GET_CONNECTION_STATUS_STATE_CHANGE - 'getConnectionStatusStateChange' - * @property {String} READY_STATE_CHANGE - 'readyStateChange' - * @property {String} ROOM_LOCK - 'roomLock' - * @property {String} ICE_CONNECTION_STATE - 'iceConnectionState' - * @property {String} BYE - 'bye' - * @property {String} RTMP_STATE - 'rtmpState' - * @property {String} STORED_MESSAGES - 'storedMessages' - * @property {String} ENCRYPT_SECRETS_UPDATED - 'encryptSecretsUpdated' - * @memberOf SkylinkConstants - * @constant - * @readonly - * @since 2.0 - */ export const EVENTS = SkylinkEventsConstants; diff --git a/src/public/index.js b/src/public/index.js index 770674623..c601ebed1 100644 --- a/src/public/index.js +++ b/src/public/index.js @@ -72,7 +72,6 @@ class SkylinkPublicInterface { /** * @description Method that sends a message to peers via the data channel connection. - * Consider using {@link Skylink#sendURLData|sendURLData} if you are sending large strings to peers. * @param {String} [roomName] - The name of the room the message is intended for. * When not provided, the message will be broadcast to all rooms where targetPeerId(s) are found (if provided). * Note when roomName is provided, targetPeerId should be provided as null. @@ -126,7 +125,7 @@ class SkylinkPublicInterface { * // handle message from remote peer * } * } - * @fires {@link SkylinkEvents.event:onIncomingMessage|onIncomingMessage} + * @fires {@link SkylinkEvents.event:ON_INCOMING_MESSAGE|ON_INCOMING_MESSAGE} event * @alias Skylink#sendP2PMessage */ sendP2PMessage(roomName = '', message = '', targetPeerId = '') { @@ -135,6 +134,7 @@ class SkylinkPublicInterface { /** * @description Function that sends a message to peers via the Signaling socket connection. + *

sendMessage can also be used to trigger call actions on the remote. Refer to Example 3 for muting the remote peer.

* @param {String} roomName - room name to send the message. * @param {String|JSON} message - The message. * @param {String|Array} [targetPeerId] - The target peer id to send message to. @@ -146,7 +146,7 @@ class SkylinkPublicInterface { * let sendMessage = (roomName) => { * const message = "Hi!"; * const selectedPeers = this.state[location]['selectedPeers']; - * this.skylink.sendMessage(roomName, message, selectedPeers); + * skylink.sendMessage(roomName, message, selectedPeers); * } * @example * Example 2: Broadcasting to selected peers @@ -154,9 +154,24 @@ class SkylinkPublicInterface { * let sendMessage = (roomName) => { * const message = "Hi all!"; * const selectedPeers = ["PeerID_1", "PeerID_2"]; - * this.skylink.sendMessage(roomName, message, selectedPeers); + * skylink.sendMessage(roomName, message, selectedPeers); * } - * @fires {@link SkylinkEvents.event:onIncomingMessage|onIncomingMessage} + * @example + * Example 3: Muting the remote peer + * + * // The local peer - send custom message object + * const msgObject = JSON.stringify({ data: "data-content", type: "muteStreams", audio: true, video: false }); + * this.skylink.sendP2PMessage(roomName, msgObject); + * + * // The remote peer - add an event listener for ON_INCOMING_MESSAGE and check for the custom message object + * SkylinkEventManager.addEventListener(skylinkConstants.EVENTS.ON_INCOMING_MESSAGE, (evt) => { + * const {message, peerId, isSelf, room} = evt.detail; + * const msg = JSON.parse(message.content); + * if (msg.type === "muteStreams") { + * skylink.muteStreams(roomName, { audioMuted: msg.audio, videoMuted: msg.video }); + * } + * }); + * @fires {@link SkylinkEvents.event:ON_INCOMING_MESSAGE|ON_INCOMING_MESSAGE} event * @alias Skylink#sendMessage * @since 0.4.0 */ @@ -181,7 +196,7 @@ class SkylinkPublicInterface { * let getStoredMessages = (roomName) => { * this.skylink.getStoredMessages(roomName); * } - * @fires {@link SkylinkEvents.event:storedMessages|storedMessages} + * @fires {@link SkylinkEvents.event:STORED_MESSAGES|STORED_MESSAGES} event * @alias Skylink#getStoredMessages * @since 2.1 */ @@ -270,7 +285,7 @@ class SkylinkPublicInterface { * @description Method that overwrites the user current custom data. * @param {String} roomName - The room name. * @param {JSON|String} userData - The updated custom data. - * @fires {@link SkylinkEvents.event:peerUpdated|peerUpdatedEvent} event if peer is in room with isSelf=true. + * @fires {@link SkylinkEvents.event:PEER_UPDATED|PEER_UPDATED} event if peer is in room with isSelf=true. * @example * Example 1: Update user custom data after joinRoom() * @@ -346,8 +361,8 @@ class SkylinkPublicInterface { * @param {Boolean} [showAll=false] - The flag if Signaling server should also return the list of privileged peer ids. * By default, the Signaling server does not include the list of privileged peer ids in the return result. * @return {Promise.>>} peerList - Array of peer ids, keyed by room name. - * @fires {@link SkylinkEvents.event:getPeersStateChange|getPeersStateChangeEvent} with parameter payload state=ENQUIRED upon calling getPeers method. - * @fires {@link SkylinkEvents.event:getPeersStateChange|getPeersStateChangeEvent} with parameter payload state=RECEIVED when peer list is received from Signaling server. + * @fires {@link SkylinkEvents.event:GET_PEERS_STATE_CHANGE|GET PEERS STATE CHANGE} event with parameter payload state=ENQUIRED upon calling getPeers method. + * @fires {@link SkylinkEvents.event:GET_PEERS_STATE_CHANGE|GET PEERS STATE CHANGE} event with parameter payload state=RECEIVED when peer list is received from Signaling server. * @example * Example 1: Retrieve un-privileged peers * @@ -598,21 +613,21 @@ class SkylinkPublicInterface { * @param {Boolean} [iceRestart=false]
* Note that this flag will not be honoured for MCU enabled peer connections where * options.mcuUseRenegoRestart flag is set to false as it is not necessary since for MCU - * "restart" case is to invoke {@link Skylink#joinRoom}again, or that it is + * "restart" case is to invoke {@link Skylink#joinRoom|joinRoom} again, or that it is * not supported by the MCU.
* The flag if ICE connections should restart when refreshing peer connections. - * This is used when ICE connection state is FAILED or DISCONNECTED, which state - * can be retrieved with the {@link SkylinkEvents.event:iceConnectionState|iceConnectionStateEvent} + * This is used when ICE connection state is FAILED or DISCONNECTED, which + * can be retrieved with the {@link SkylinkEvents.event:ICE_CONNECTION_STATE|ICE CONNECTION STATE} event. * @param {JSON} [options]
* Note that for MCU connections, the bandwidth or googleXBandwidth * settings will override for all peers or the current room connection session settings.
* The custom peer configuration settings. * @param {JSON} [options.bandwidth] The configuration to set the maximum streaming bandwidth to send to peers. - * Object signature follows {@link Skylink#joinRoom} + * Object signature follows {@link Skylink#joinRoom|joinRoom} * options.bandwidth settings. * @param {JSON} [options.googleXBandwidth] The configuration to set the experimental google * video streaming bandwidth sent to peers. - * Object signature follows {@link Skylink#joinRoom} + * Object signature follows {@link Skylink#joinRoom|joinRoom} * options.googleXBandwidth settings. * @return {Promise.} - The Promise will always resolve. * @example @@ -747,8 +762,7 @@ class SkylinkPublicInterface { * not work depending on the browser support and implementation. * The flag if OPUS audio codec should enable DTX (Discontinuous Transmission) for sending encoded audio data. * This might help to reduce bandwidth as it reduces the bitrate during silence or background noise, and - * goes hand-in-hand with the options.voiceActivityDetection flag in - * joinRoom() method. + * goes hand-in-hand with the options.voiceActivityDetection flag in {@link Skylink#joinRoom|joinRoom} method. * When not provided, the default browser configuration is used. * @param {Boolean} [options.audio.useinbandfec]
Deprecation Warning! * This property has been deprecated. Configure this with the options.codecParams.audio.opus.useinbandfec @@ -775,8 +789,7 @@ class SkylinkPublicInterface { * @param {Boolean} [options.audio.mute=false] The flag if audio tracks should be muted upon receiving them. * Providing the value as false sets peerInfo.mediaStatus.audioMuted to 1, * but when provided as true, this sets the peerInfo.mediaStatus.audioMuted value to - * 0 and mutes any existing - * shareScreen() stream audio tracks as well. + * 0 and mutes any existing {@link Skylink#shareScreen|shareScreen} stream audio tracks as well. * @param {Array} [options.audio.optional]
* This property has been deprecated. "optional" constraints has been moved from specs.
* Note that this may result in constraints related error when options.useExactConstraints value is @@ -787,9 +800,9 @@ class SkylinkPublicInterface { * Note this is currently not supported in Firefox browsers. *
The audio track source id of the device to use. * The list of available audio source id can be retrieved by the {@link https://developer. - * mozilla.org/en-US/docs/Web/API/MediaDevices/enumerateDevices}. + * mozilla.org/en-US/docs/Web/API/MediaDevices/enumerateDevices|mediaDevices.enumerateDevices} method. * @param {Boolean} [options.audio.echoCancellation=true]
- * For Chrome/Opera/IE/Safari/Bowser, the echo cancellation @description Methodality may not work and may produce a terrible + * For Chrome/Opera/IE/Safari/Bowser, the echo cancellation method may not work and may produce a terrible * feedback. It is recommended to use headphones or other microphone devices rather than the device * in-built microphones.
The flag to enable echo cancellation for audio track. * @param {Boolean|JSON} [options.video=false]
@@ -800,11 +813,9 @@ class SkylinkPublicInterface { * @param {Boolean} [options.video.mute=false] The flag if video tracks should be muted upon receiving them. * Providing the value as false sets the peerInfo.mediaStatus.videoMuted value to * 1, but when provided as true, this sets the peerInfo.mediaStatus.videoMuted value to - * 0 and mutes any existing - * shareScreen() stream video tracks as well. + * 0 and mutes any existing {@link Skylink#shareScreen|shareScreen} stream video tracks as well. * @param {JSON} [options.video.resolution] The video resolution. - * By default, VGA resolution option - * is selected when not provided. + * By default,VGA resolution option is selected when not provided. * [Rel: {@link SkylinkConstants.VIDEO_RESOLUTION|VIDEO_RESOLUTION}] * @param {Number|JSON} [options.video.resolution.width] The video resolution width. * - When provided as a number, it is the video resolution width. @@ -818,7 +829,7 @@ class SkylinkPublicInterface { * Parameters are "ideal" for ideal video resolution height, "exact" for exact video resolution height, * "min" for min video resolution height and "max" for max video resolution height. * Note that this may result in constraints related errors depending on the browser/hardware supports. - * @param {Number|JSON} [options.video.frameRate] The video {@link https://en.wikipedia.org/wiki/Frame_rate} per second (fps). + * @param {Number|JSON} [options.video.frameRate] The video {@link https://en.wikipedia.org/wiki/Frame_rate|frame rate} per second (fps). * - When provided as a number, it is the video framerate. * - When provided as a JSON, it is the navigator.mediaDevices.getUserMedia() .frameRate settings. * Parameters are "ideal" for ideal video framerate, "exact" for exact video framerate, @@ -832,12 +843,10 @@ class SkylinkPublicInterface { * The navigator.getUserMedia() API video: { optional [..] } property. * @param {String} [options.video.deviceId]
* Note this is currently not supported in Firefox browsers. - *
The video track source id of the device to use. - * The list of available video source id can be retrieved by the {@link https://developer. - * mozilla.org/en-US/docs/Web/API/MediaDevices/enumerateDevices}. - * @param {String|JSON} [options.video.facingMode] The video camera facing mode. - * The list of available video source id can be retrieved by the {@link https://developer.mozilla.org - * /en-US/docs/Web/API/MediaTrackConstraints/facingMode}. + *
The video track {@link https://developer.mozilla.org/en-US/docs/Web/API/MediaDeviceInfo|source id} of the device to use. + * The list of available video source id can be retrieved by the {@link https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/enumerateDevices|mediaDevices.enumerateDevices} method. + * @param {String|JSON} [options.video.facingMode] The video camera {@link https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackSupportedConstraints/facingMode|facing mode} + * The list of available video source id can be retrieved by the {@link https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getSupportedConstraints|MediaDevices.getSupportedConstraints} method. * @return {Promise.} * @example * Example 1: Get both audio and video after joinRoom @@ -909,10 +918,10 @@ class SkylinkPublicInterface { * } * }).then((streams) => // do something) * .catch((error) => // handle error); - * @fires If retrieval of fallback audio stream is successful:
- {@link SkylinkEvents.event:mediaAccessSuccess|mediaAccessSuccessEvent} with parameter payload isScreensharing=false and isAudioFallback=false if initial retrieval is successful. - * @fires If initial retrieval is unsuccessful:
Fallback to retrieve audio only stream is triggered (configured in {@link initOptions} audioFallback)
  - {@link SkylinkEvents.event:mediaAccessFallback|mediaAccessFallbackEvent} with parameter payload state=FALLBACKING, isScreensharing=false and isAudioFallback=true and options.video=true and options.audio=true.
No fallback to retrieve audio only stream
- {@link SkylinkEvents.event:mediaAccessError|mediaAccessErrorEvent} with parameter payload isScreensharing=false and isAudioFallbackError=false. - * @fires If retrieval of fallback audio stream is successful:
- {@link SkylinkEvents.event:mediaAccessSuccess|mediaAccessSuccessEvent} with parameter payload isScreensharing=false and isAudioFallback=true. - * @fires If retrieval of fallback audio stream is unsuccessful:
- {@link SkylinkEvents.event:mediaAccessFallback|mediaAccessFallbackEvent} with parameter payload state=ERROR, isScreensharing=false and isAudioFallback=true.
- {@link SkylinkEvents.event:mediaAccessError|mediaAccessErrorEvent} with parameter payload isScreensharing=false and isAudioFallbackError=true. + * @fires If retrieval of fallback audio stream is successful:
- {@link SkylinkEvents.event:MEDIA_ACCESS_SUCCESS|MEDIA ACCESS SUCCESS} event with parameter payload isScreensharing=false and isAudioFallback=false if initial retrieval is successful. + * @fires If initial retrieval is unsuccessful:
Fallback to retrieve audio only stream is triggered (configured in {@link initOptions} audioFallback)
  - {@link SkylinkEvents.event:MEDIA_ACCESS_SUCCESS|MEDIA ACCESS SUCCESS} event{@link SkylinkEvents.event:MEDIA_ACCESS_FALLBACK|MEDIA ACCESS FALLBACK} event with parameter payload state=FALLBACKING, isScreensharing=false and isAudioFallback=true and options.video=true and options.audio=true.
No fallback to retrieve audio only stream
- {@link SkylinkEvents.event:MEDIA_ACCESS_ERROR|MEDIA ACCESS ERROR} event with parameter payload isScreensharing=false and isAudioFallbackError=false. + * @fires If retrieval of fallback audio stream is successful:
- {@link SkylinkEvents.event:MEDIA_ACCESS_SUCCESS|MEDIA ACCESS SUCCESS} event with parameter payload isScreensharing=false and isAudioFallback=true. + * @fires If retrieval of fallback audio stream is unsuccessful:
- {@link SkylinkEvents.event:MEDIA_ACCESS_SUCCESS|MEDIA ACCESS SUCCESS} event{@link SkylinkEvents.event:MEDIA_ACCESS_FALLBACK|MEDIA ACCESS FALLBACK} event with parameter payload state=ERROR, isScreensharing=false and isAudioFallback=true.
- {@link SkylinkEvents.event:MEDIA_ACCESS_ERROR|MEDIA ACCESS ERROR} event with parameter payload isScreensharing=false and isAudioFallbackError=true. * @alias Skylink#getUserMedia * @since 0.5.6 */ @@ -936,7 +945,7 @@ class SkylinkPublicInterface { * @description Method that stops the {@link Skylink#getUserMedia} stream that is called without roomName param or before {@link Skylink#joinRoom|joinRoom} is called. * @param {MediaStream} stream - The prefetched stream. * @return {null} - * @fires {@link SkylinkEvents.event:streamEnded|streamEndedEvent} + * @fires {@link SkylinkEvents.event:STREAM_ENDED|STREAM ENDED} event * @alias Skylink#stopPrefetchedStream * @since 2.0 * @ignore @@ -969,10 +978,10 @@ class SkylinkPublicInterface { * * skylink.stopScreen(roomName); * - * @fires {@link SkylinkEvents.event:mediaAccessStopped|mediaAccessStoppedEvent} with parameter payload isScreensharing value as true and isAudioFallback value as false if there is a screen stream - * @fires {@link SkylinkEvents.event:streamEnded|streamEndedEvent} with parameter payload isSelf value as true and isScreensharing value as true if user is in the room - * @fires {@link SkylinkEvents.event:peerUpdated|peerUpdatedEvent} with parameter payload isSelf value as true - * @fires {@link SkylinkEvents.event:onIncomingStream|onIncomingStreamEvent} with parameter payload isSelf value as true and stream as {@link Skylink#getUserMedia} stream if there is an existing userMedia stream + * @fires {@link SkylinkEvents.event:MEDIA_ACCESS_STOPPED|MEDIA ACCESS STOPPED} event with parameter payload isScreensharing value as true and isAudioFallback value as false if there is a screen stream + * @fires {@link SkylinkEvents.event:STREAM_ENDED|STREAM ENDED} event with parameter payload isSelf value as true and isScreensharing value as true if user is in the room + * @fires {@link SkylinkEvents.event:PEER_UPDATED|PEER UPDATED} event with parameter payload isSelf value as true + * @fires {@link SkylinkEvents.event:ON_INCOMING_STREAM|ON INCOMING STREAM} event with parameter payload isSelf value as true and stream as {@link Skylink#getUserMedia} stream if there is an existing userMedia stream * @alias Skylink#stopScreen * @since 0.6.0 */ @@ -994,9 +1003,9 @@ class SkylinkPublicInterface { * @example * skylink.stopStreams(roomName) * .then(() => // do some thing); - * @fires {@link SkylinkEvents.event:mediaAccessStopped|mediaAccessStoppedEvent} with parameter payload isSelf=true and isScreensharing=false if there is a getUserMedia stream. - * @fires {@link SkylinkEvents.event:streamEnded|streamEndedEvent} with parameter payload isSelf=true and isScreensharing=false if there is a getUserMedia stream and user is in a room. - * @fires {@link SkylinkEvents.event:peerUpdated|peerUpdatedEvent} with parameter payload isSelf=true. + * @fires {@link SkylinkEvents.event:MEDIA_ACCESS_STOPPED|MEDIA ACCESS STOPPED} event with parameter payload isSelf=true and isScreensharing=false if there is a getUserMedia stream. + * @fires {@link SkylinkEvents.event:STREAM_ENDED|STREAM ENDED} event with parameter payload isSelf=true and isScreensharing=false if there is a getUserMedia stream and user is in a room. + * @fires {@link SkylinkEvents.event:PEER_UPDATED|PEER UPDATED} event with parameter payload isSelf=true. * @alias Skylink#stopStreams * @since 0.5.6 */ @@ -1027,7 +1036,7 @@ class SkylinkPublicInterface { * // handle local peer left * }) * .catch((error) => // handle error); - * @fires {@link SkylinkEvents.event:peerLeft|peerLeft} on the remote end of the connection. + * @fires {@link SkylinkEvents.event:PEER_LEFT|PEER LEFT} event on the remote end of the connection. * @alias Skylink#leaveRoom * @since 0.5.5 */ @@ -1069,8 +1078,9 @@ class SkylinkPublicInterface { * .catch(error => { * // handle error * }); - * @fires {@link SkylinkEvents.recordingState|recordingStateEvent} with payload state=START if recording has started successfully. - * @fires {@link SkylinkEvents.recordingState|recordingStateEvent} with payload error if an error occurred during recording. + * @fires {@link SkylinkEvents.event:RECORDING_STATE|RECORDING STATE} event with payload state=START if recording has started + * successfully. + * @fires {@link SkylinkEvents.event:RECORDING_STATE|RECORDING STATE} event with payload error if an error occurred during recording. * @alias Skylink#startRecording * @since 0.6.16 */ @@ -1109,8 +1119,9 @@ class SkylinkPublicInterface { * .catch(error => { * // handle error * }); - * @fires {@link SkylinkEvents.recordingState|recordingStateEvent} with payload state=STOP if recording has stopped successfully. - * @fires {@link SkylinkEvents.recordingState|recordingStateEvent} with payload error if an error occurred during recording. + * @fires {@link SkylinkEvents.event:RECORDING_STATE|RECORDING STATE} event with payload state=STOP if recording has stopped + * successfully. + * @fires {@link SkylinkEvents.event:RECORDING_STATE|RECORDING STATE} event with payload error if an error occurred during recording. * @alias Skylink#stopRecording * @since 0.6.16 */ @@ -1127,7 +1138,7 @@ class SkylinkPublicInterface { * @description Method that locks a room. * @param {String} roomName - The room name. * @return {Boolean} - * @fires {@link SkylinkEvents.event:roomLock|roomLockEvent} with payload parameters isLocked=true when the room is successfully locked. + * @fires {@link SkylinkEvents.event:ROOM_LOCK|ROOM LOCK} event with payload parameters isLocked=true when the room is successfully locked. * @example * // add event listener to listen for room locked state when peer tries to join a locked room * skylinkEventManager.addEventListener(SkylinkEvents.SYSTEM_ACTION, (evt) => { @@ -1164,7 +1175,7 @@ class SkylinkPublicInterface { * @description Method that unlocks a room. * @param {String} roomName - The room name. * @return {Boolean} - * @fires {@link SkylinkEvents.event:roomLock|roomLockEvent} with payload parameters isLocked=false when the room is successfully locked. + * @fires {@link SkylinkEvents.event:ROOM_LOCK|ROOM LOCK} event with payload parameters isLocked=false when the room is successfully locked. * @alias Skylink#unlockRoom * @since 0.5.0 */ @@ -1195,7 +1206,7 @@ class SkylinkPublicInterface { * Defined only when state is LINK. * @property {String} #recordingId.links - The recording session links. * Object signature matches the link parameter payload received in the - * {@link SkylinkEvents.event:recordingState|recordingStateEvent} event. + * {@link SkylinkEvents.event:RECORDING_STATE|RECORDING STATE} event event. * @property {Error} #recordingId.error - The recording session error. * Defined only when state is ERROR. */ @@ -1257,8 +1268,8 @@ class SkylinkPublicInterface { * audioMuted: false, * videoMuted: true * }); - * @fires On local peer: {@link SkylinkEvents.event:localMediaMuted|localMediaMutedEvent}, {@link SkylinkEvents.event:streamMuted|streamMuted}, {@link SkylinkEvents.event:peerUpdated|peerUpdatedEvent} with payload parameters isSelf=true and isAudio=true if a local audio stream is muted or isVideo if local video stream is muted. - * @fires On remote peer: {@link SkylinkEvents.event:streamMuted|streamMuted}, {@link SkylinkEvents.event:peerUpdated|peerUpdatedEvent} with with parameter payload isSelf=false and isAudio=true if a remote audio stream is muted or isVideo if remote video stream is muted. + * @fires On local peer: {@link SkylinkEvents.event:LOCAL_MEDIA_MUTED|LOCAL MEDIA MUTED} event, {@link SkylinkEvents.event:STREAM_MUTED|STREAM MUTED} event, {@link SkylinkEvents.event:PEER_UPDATED|PEER UPDATED} event with payload parameters isSelf=true and isAudio=true if a local audio stream is muted or isVideo if local video stream is muted. + * @fires On remote peer: {@link SkylinkEvents.event:STREAM_MUTED|STREAM MUTED} event, {@link SkylinkEvents.event:PEER_UPDATED|PEER UPDATED} event with with parameter payload isSelf=false and isAudio=true if a remote audio stream is muted or isVideo if remote video stream is muted. * @alias Skylink#muteStreams * @since 0.5.7 */ @@ -1291,7 +1302,7 @@ class SkylinkPublicInterface { * .catch(error => { * // handle error * }); - * @fires {@link SkylinkEvents.event:rtmpState|rtmpStateEvent} with parameter payload state=START. + * @fires {@link SkylinkEvents.event:RTMP_STATE|RTMP STATE} event with parameter payload state=START. * @alias Skylink#startRTMPSession * @since 0.6.36 */ @@ -1322,7 +1333,7 @@ class SkylinkPublicInterface { * .catch(error => { * // handle error * }); - * @fires {@link SkylinkEvents.event:rtmpState|rtmpStateEvent} with parameter payload state=STOP. + * @fires {@link SkylinkEvents.event:RTMP_STATE|RTMP STATE} event with parameter payload state=STOP. * @alias Skylink#stopRTMPSession * @since 0.6.36 */ @@ -1367,7 +1378,7 @@ class SkylinkPublicInterface { * - When provided as a MediaStream object, this configures the options.audio and * options.video based on the tracks available in the MediaStream object. * Object signature matches the options parameter in the - * getUserMedia method. + * {@link Skylink#getUserMedia|getUserMedia} method. * @return {Promise.} * @example * Example 1: Send new MediaStream with audio and video @@ -1409,12 +1420,12 @@ class SkylinkPublicInterface { * .catch((error) => { console.error(error) }); * } * - * @fires {@link SkylinkEvents.event:mediaAccessSuccess} with parameter payload isScreensharing=false and + * @fires {@link SkylinkEvents.event:MEDIA_ACCESS_SUCCESS|MEDIA ACCESS SUCCESS} event with parameter payload isScreensharing=false and * isAudioFallback=false if userMedia options is passed into * sendStream method. - * @fires {@link SkylinkEvents.event:onIncomingStream} with parameter payload isSelf=true and + * @fires {@link SkylinkEvents.event:ON_INCOMING_STREAM|ON INCOMING STREAM} event with parameter payload isSelf=true and * stream as userMedia stream. - * @fires {@link SkylinkEvents.event:peerUpdated} with parameter payload isSelf=true. + * @fires {@link SkylinkEvents.event:PEER_UPDATED|PEER UPDATED} event with parameter payload isSelf=true. * @alias Skylink#sendStream * @since 0.5.6 */ @@ -1545,10 +1556,12 @@ class SkylinkPublicInterface { *
* Note that to set message persistence at the app level, the persistent message feature MUST be enabled at the key level in the Temasys * Developers Console. Messages will also only be persisted if the messages are encrypted, are public messages and, are sent via the signaling - * server using the [{@link Skylink#sendMessage|sendMessage}] method. + * server using the {@link Skylink#sendMessage|sendMessage} method. *
* @param {String} roomName - The room name. * @param {Boolean} isPersistent - The flag if messages should be persisted. + * @alias Skylink#setMessagePersistence + * @since 2.0.0 */ setMessagePersistence(roomName, isPersistent) { const roomState = getRoomStateByName(roomName); @@ -1560,6 +1573,8 @@ class SkylinkPublicInterface { * @description Method that retrieves the persistent message feature configured. * @param {String} roomName - The room name. * @returns {Boolean} isPersistent + * @alias Skylink#getMessagePersistence + * @since 2.0.0 */ getMessagePersistence(roomName) { const roomState = getRoomStateByName(roomName); diff --git a/src/skylink-events/candidate-events.js b/src/skylink-events/candidate-events.js index d53084de6..9b58e5484 100644 --- a/src/skylink-events/candidate-events.js +++ b/src/skylink-events/candidate-events.js @@ -8,7 +8,7 @@ import { import SkylinkEvent from '../utils/skylinkEvent'; /** - * @event SkylinkEvents.candidateProcessingState + * @event SkylinkEvents.CANDIDATE_PROCESSING_STATE * @description Event triggered when remote ICE candidate processing state has changed when Peer is using trickle ICE. * @param {Object} detail - Event's payload. * @param {SkylinkRoom} detail.room - The current room @@ -25,7 +25,7 @@ import SkylinkEvent from '../utils/skylinkEvent'; export const candidateProcessingState = detail => new SkylinkEvent(CANDIDATE_PROCESSING_STATE, { detail }); /** - * @event SkylinkEvents.candidateGenerationState + * @event SkylinkEvents.CANDIDATE_GENERATION_STATE * @description Event triggered when a Peer connection ICE gathering state has changed. * @param {Object} detail - Event's payload. * @param {SkylinkRoom} detail.room - The current room @@ -35,7 +35,7 @@ export const candidateProcessingState = detail => new SkylinkEvent(CANDIDATE_PRO export const candidateGenerationState = detail => new SkylinkEvent(CANDIDATE_GENERATION_STATE, { detail }); /** - * @event SkylinkEvents.candidatesGathered + * @event SkylinkEvents.CANDIDATES_GATHERED * @description Event triggered when all remote ICE candidates gathering has completed and been processed. * @param {Object} detail - Event's payload. * @param {SkylinkRoom} detail.room - The current room @@ -48,11 +48,12 @@ export const candidateGenerationState = detail => new SkylinkEvent(CANDIDATE_GEN export const candidatesGathered = detail => new SkylinkEvent(CANDIDATES_GATHERED, { detail }); /** - * @event SkylinkEvents.iceConnectionState + * @event SkylinkEvents.ICE_CONNECTION_STATE * @description Learn more about how ICE works in this * article here. * Event triggered when a Peer connection ICE connection state has changed. - * @param {SkylinkEvents.ICE_CONNECTION_STATE} state The current Peer connection ICE connection state. - * @param {String} peerId The Peer ID. + * @param {Object} detail - Event's payload. + * @param {SkylinkConstants.ICE_CONNECTION_STATE} detail.state - The current Peer connection ICE connection state. + * @param {String} detail.state - The Peer ID. */ export const iceConnectionState = detail => new SkylinkEvent(ICE_CONNECTION_STATE, { detail }); diff --git a/src/skylink-events/datachannel-events.js b/src/skylink-events/datachannel-events.js index 5e61a9e9c..2cf885be1 100644 --- a/src/skylink-events/datachannel-events.js +++ b/src/skylink-events/datachannel-events.js @@ -5,7 +5,7 @@ import { import SkylinkEvent from '../utils/skylinkEvent'; /** - * @event SkylinkEvents.onDataChannelStateChanged + * @event SkylinkEvents.DATA_CHANNEL_STATE * @description Event triggered when a Datachannel connection state has changed. * @param {Object} detail - Event's payload. * @param {SkylinkRoom} detail.room - The current room @@ -23,7 +23,7 @@ import SkylinkEvent from '../utils/skylinkEvent'; export const onDataChannelStateChanged = (detail = {}) => new SkylinkEvent(DATA_CHANNEL_STATE, { detail }); /** - * @event SkylinkEvents.onIncomingMessage + * @event SkylinkEvents.ON_INCOMING_MESSAGE * @description Event triggered when receiving message from Peer. * @param {Object} detail - Event's payload. * @param {SkylinkRoom} detail.room - The current room @@ -31,56 +31,56 @@ export const onDataChannelStateChanged = (detail = {}) => new SkylinkEvent(DATA_ * @param {JSON|string} detail.message.content - The message. * @param {String} detail.message.senderPeerId - The sender Peer ID. * @param {String|Array} [detail.message.targetPeerId] The value of the targetPeerId - * defined in {@link Skylink#sendP2PMessage} or {@link Skylink#sendMessage}. + * defined in {@link Skylink#sendP2PMessage} or {@link Skylink#sendMessage|sendMessage}. * Defined as User's Peer ID when isSelf payload value is false. - * Defined as null when provided targetPeerId in {@link Skylink#sendP2PMessage} or - * {@link Skylink#sendMessage} is not defined. + * Defined as null when provided targetPeerId in {@link Skylink#sendP2PMessage|sendP2PMessage} or + * {@link Skylink#sendMessage|sendMessage} is not defined. * @param {Array} [detail.message.listOfPeers] The list of Peers that the message has been sent to. * Defined only when isSelf payload value is true. * @param {boolean} detail.message.isPrivate The flag if message is targeted or not, basing * off the targetPeerId parameter being defined in - * {@link Skylink#sendP2PMessage} or - * {@link Skylink#sendMessage}. + * {@link Skylink#sendP2PMessage|sendP2PMessage} or + * {@link Skylink#sendMessage|sendMessage}. * @param {boolean} detail.message.isDataChannel The flag if message is sent from - * {@link Skylink#sendP2PMessage}. + * {@link Skylink#sendP2PMessage|sendP2PMessage}. * @param {String} detail.message.timeStamp The time stamp when the message was sent. * @param {String} detail.peerId The Peer ID. * @param {peerInfo} detail.peerInfo The Peer session information. * Object signature matches the peerInfo parameter payload received in the - * {@link SkylinkEvents.event:peerJoined|peerJoinedEvent}. + * {@link SkylinkEvents.event:PEER_JOINED|PEER JOINED} event. * @param {boolean} detail.isSelf - The flag if Peer is User. */ export const onIncomingMessage = (detail = {}) => new SkylinkEvent(ON_INCOMING_MESSAGE, { detail }); /** - * @event SkylinkEvents.storedMessages + * @event SkylinkEvents.STORED_MESSAGES * @description Event triggered when receiving stored messages from the Signaling Server. * @param {Object} detail - Event's payload. * @param {SkylinkRoom} detail.room - The current room * @param {Array} detail.storedMessages - The stored messages result. * @param {String} detail.storedMessages[].targetPeerId - The value of the targetPeerId - * defined in {@link Skylink#sendP2PMessage} or {@link Skylink#sendMessage}. + * defined in {@link Skylink#sendP2PMessage|sendP2PMessage} or {@link Skylink#sendMessage|sendMessage}. * Defined as User's Peer ID when isSelf payload value is false. - * Defined as null when provided targetPeerId in {@link Skylink#sendP2PMessage} or - * {@link Skylink#sendMessage} is not defined. + * Defined as null when provided targetPeerId in {@link Skylink#sendP2PMessage|sendP2PMessage} or + * {@link Skylink#sendMessage|sendMessage} is not defined. * @param {JSON|String} detail.storedMessages[].senderPeerId - The sender Peer ID. * @param {JSON|String} detail.storedMessages[].content - The message. * @param {JSON|String} detail.storedMessages[].timeStamp - The timestamp when the message was sent, in simplified extended ISO format. * @param {boolean} detail.storedMessages.isPrivate - The flag if message is targeted or not, basing - * off the targetPeerId parameter being defined in {@link Skylink#sendP2PMessage} or {@link Skylink#sendMessage}. Value will always + * off the targetPeerId parameter being defined in {@link Skylink#sendP2PMessage|sendP2PMessage} or {@link Skylink#sendMessage|sendMessage}. Value will always * be false for stored messages. - * @param {boolean} detail.storedMessages.isDataChannel - The flag if message is sent from {@link Skylink#sendP2PMessage}. Value will always be + * @param {boolean} detail.storedMessages.isDataChannel - The flag if message is sent from {@link Skylink#sendP2PMessage|sendP2PMessage}. Value will always be * true for stored messages. * @param {String} detail.peerId - The Peer ID. * @param {peerInfo} detail.peerInfo - The Peer session information. * Object signature matches the peerInfo parameter payload received in the - * {@link SkylinkEvents.event:peerJoined|peerJoinedEvent}. + * {@link SkylinkEvents.event:PEER_JOINED|PEER JOINED} event. * @param {boolean} detail.isSelf - The flag if Peer is User. */ export const storedMessages = (detail = {}) => new SkylinkEvent(STORED_MESSAGES, { detail }); /** - * @event SkylinkEvents.encryptSecretsUpdated + * @event SkylinkEvents.ENCRYPT_SECRETS_UPDATED * @description Event triggered when encrypt secret data is updated. * @param {Object} detail - Event's payload. * @param {SkylinkRoom} detail.room - The current room @@ -90,12 +90,12 @@ export const storedMessages = (detail = {}) => new SkylinkEvent(STORED_MESSAGES, * @param {String} detail.peerId - The Peer ID. * @param {peerInfo} detail.peerInfo - The Peer session information. * Object signature matches the peerInfo parameter payload received in the - * {@link SkylinkEvents.event:peerJoined|peerJoinedEvent}. + * {@link SkylinkEvents.event:PEER_JOINED|PEER JOINED} event. */ export const encryptionSecretsUpdated = (detail = {}) => new SkylinkEvent(ENCRYPT_SECRETS_UPDATED, { detail }); /** - * @event SkylinkEvents.persistentMessageState + * @event SkylinkEvents.PERSISTENT_MESSAGE_STATE * @description Event triggered when persistent message state changes. * @param {Object} detail - Event's payload. * @param {SkylinkRoom} detail.room - The current room @@ -103,6 +103,6 @@ export const encryptionSecretsUpdated = (detail = {}) => new SkylinkEvent(ENCRYP * @param {String} detail.peerId - The Peer ID. * @param {peerInfo} detail.peerInfo - The Peer session information. * Object signature matches the peerInfo parameter payload received in the - * {@link SkylinkEvents.event:peerJoined|peerJoinedEvent}. + * {@link SkylinkEvents.event:PEER_JOINED|PEER JOINED} event. */ export const persistentMessageState = (detail = {}) => new SkylinkEvent(PERSISTENT_MESSAGE_STATE, { detail }); diff --git a/src/skylink-events/index.js b/src/skylink-events/index.js index fadfe73d1..122561571 100644 --- a/src/skylink-events/index.js +++ b/src/skylink-events/index.js @@ -64,7 +64,76 @@ import { /** * @namespace SkylinkEvents - * @description Events triggered by SkylinkJS. Event constants referenced here - {@link SkylinkConstants.EVENTS} + * @description + * PEER EVENTS
+ *
    + *
  • {@link SkylinkEvents.event:PEER_UPDATED|PEER_UPDATED}
  • + *
  • {@link SkylinkEvents.event:PEER_JOINED|PEER_JOINED}
  • + *
  • {@link SkylinkEvents.event:PEER_LEFT|PEER_LEFT}
  • + *
  • {@link SkylinkEvents.event:SERVER_PEER_JOINED|SERVER_PEER_JOINED}
  • + *
  • {@link SkylinkEvents.event:SERVER_PEER_LEFT|SERVER_PEER_LEFT}
  • + *
  • {@link SkylinkEvents.event:GET_PEERS_STATE_CHANGE|GET_PEERS_STATE_CHANGE}
  • + *
  • {@link SkylinkEvents.event:PEER_CONNECTION_STATE|PEER_CONNECTION_STATE}
  • + *
  • {@link SkylinkEvents.event:SESSION_DISCONNECT|SESSION_DISCONNECT}
  • + *
  • {@link SkylinkEvents.event:GET_CONNECTION_STATUS_STATE_CHANGE|GET_CONNECTION_STATUS_STATE_CHANGE}
  • + *
+ * STREAM EVENTS
+ *
    + *
  • {@link SkylinkEvents.event:ON_INCOMING_STREAM|ON_INCOMING_STREAM}
  • + *
  • {@link SkylinkEvents.event:ON_INCOMING_SCREEN_STREAM|ON_INCOMING_SCREEN_STREAM}
  • + *
  • {@link SkylinkEvents.event:STREAM_ENDED|STREAM_ENDED}
  • + *
  • {@link SkylinkEvents.event:STREAM_MUTED|STREAM_MUTED}
  • + *
+ * MEDIA EVENTS
+ *
    + *
  • {@link SkylinkEvents.event:MEDIA_ACCESS_FALLBACK|MEDIA_ACCESS_FALLBACK}
  • + *
  • {@link SkylinkEvents.event:MEDIA_ACCESS_REQUIRED|MEDIA_ACCESS_REQUIRED}
  • + *
  • {@link SkylinkEvents.event:MEDIA_ACCESS_STOPPED|MEDIA_ACCESS_STOPPED}
  • + *
  • {@link SkylinkEvents.event:MEDIA_ACCESS_SUCCESS|MEDIA_ACCESS_SUCCESS}
  • + *
  • {@link SkylinkEvents.event:MEDIA_ACCESS_ERROR|MEDIA_ACCESS_ERROR}
  • + *
  • {@link SkylinkEvents.event:RECORDING_STATE|RECORDING_STATE}
  • + *
  • {@link SkylinkEvents.event:RTMP_STATE|RTMP_STATE}
  • + *
  • {@link SkylinkEvents.event:LOCAL_MEDIA_MUTED|LOCAL_MEDIA_MUTED}
  • + *
+ * DATA CHANNEL EVENTS
+ *
    + *
  • {@link SkylinkEvents.event:DATA_CHANNEL_STATE|DATA_CHANNEL_STATE}
  • + *
  • {@link SkylinkEvents.event:ON_INCOMING_MESSAGE|ON_INCOMING_MESSAGE}
  • + *
  • {@link SkylinkEvents.event:STORED_MESSAGES|STORED_MESSAGES}
  • + *
  • {@link SkylinkEvents.event:ENCRYPT_SECRETS_UPDATED|ENCRYPT_SECRETS_UPDATED}
  • + *
  • {@link SkylinkEvents.event:PERSISTENT_MESSAGE_STATE|PERSISTENT_MESSAGE_STATE}
  • + *
+ * CANDIDATE EVENTS
+ *
    + *
  • {@link SkylinkEvents.event:CANDIDATE_PROCESSING_STATE|CANDIDATE_PROCESSING_STATE}
  • + *
  • {@link SkylinkEvents.event:CANDIDATE_GENERATION_STATE|CANDIDATE_GENERATION_STATE}
  • + *
  • {@link SkylinkEvents.event:CANDIDATES_GATHERED|CANDIDATES_GATHERED}
  • + *
  • {@link SkylinkEvents.event:ICE_CONNECTION_STATE|ICE_CONNECTION_STATE}
  • + *
+ * INIT EVENTS
+ *
    + *
  • {@link SkylinkEvents.event:READY_STATE_CHANGE|READY_STATE_CHANGE}
  • + *
+ * PEER HANDSHAKE EVENTS
+ *
    + *
  • {@link SkylinkEvents.event:HANDSHAKE_PROGRESS|HANDSHAKE_PROGRESS}
  • + *
+ * ROOM EVENTS
+ *
    + *
  • {@link SkylinkEvents.event:ROOM_LOCK|ROOM_LOCK}
  • + *
+ * SOCKET EVENTS
+ *
    + *
  • {@link SkylinkEvents.event:CHANNEL_OPEN|CHANNEL_OPEN}
  • + *
  • {@link SkylinkEvents.event:CHANNEL_REOPEN|CHANNEL_REOPEN}
  • + *
  • {@link SkylinkEvents.event:CHANNEL_CLOSE|CHANNEL_CLOSE}
  • + *
  • {@link SkylinkEvents.event:CHANNEL_ERROR|CHANNEL_ERROR}
  • + *
  • {@link SkylinkEvents.event:CHANNEL_MESSAGE|CHANNEL_MESSAGE}
  • + *
  • {@link SkylinkEvents.event:CHANNEL_RETRY|CHANNEL_RETRY}
  • + *
  • {@link SkylinkEvents.event:CHANNEL_OPEN|CHANNEL_OPEN}
  • + *
  • {@link SkylinkEvents.event:SOCKET_ERROR|SOCKET_ERROR}
  • + *
  • {@link SkylinkEvents.event:SYSTEM_ACTION|SYSTEM_ACTION}
  • + *
* @example * Import SkylinkEventManager and SkylinkConstants from 'skylinkjs' * @@ -79,6 +148,7 @@ import { * const { detail } = evt; * // do something * }); + * @since 2.0 */ export { onIncomingStream, diff --git a/src/skylink-events/init-events.js b/src/skylink-events/init-events.js index ca29bba4a..c109940e1 100644 --- a/src/skylink-events/init-events.js +++ b/src/skylink-events/init-events.js @@ -4,10 +4,10 @@ import { READY_STATE_CHANGE } from './constants'; import SkylinkEvent from '../utils/skylinkEvent'; /** - * @event SkylinkEvents.readyStateChange + * @event SkylinkEvents.READY_STATE_CHANGE * @description Event triggered when init() method ready state changes. * @param {Object} detail - Event's payload. - * @param {SkylinkConstants.READY_STATE_CHANGE} detail.readyState - The current init() ready state. + * @param {SkylinkConstants.READY_STATE_CHANGE} detail.readyState - The current ready state when instantiating new Skylink(). * @param {JSON} detail.error - The error result. Defined only when state is ERROR. * @param {Number} detail.error.status - The HTTP status code when failed. * @param {SkylinkConstants.READY_STATE_CHANGE_ERROR} detail.error.errorCode - The ready state change failure code. diff --git a/src/skylink-events/logger-events.js b/src/skylink-events/logger-events.js index acc900825..33fa9cb63 100644 --- a/src/skylink-events/logger-events.js +++ b/src/skylink-events/logger-events.js @@ -12,5 +12,6 @@ import SkylinkEvent from '../utils/skylinkEvent'; * @param {JSON} detail.level - The log level. * @param {String} detail.message - The log message. * @param {JSON} detail.debugObject - A JavaScript object to be logged to help with analysis. + * @private */ export const loggedOnConsole = (detail = {}) => new SkylinkEvent(LOGGED_ON_CONSOLE, { detail }); diff --git a/src/skylink-events/media-events.js b/src/skylink-events/media-events.js index 3315c0d5a..d4b1f4f85 100644 --- a/src/skylink-events/media-events.js +++ b/src/skylink-events/media-events.js @@ -12,7 +12,7 @@ import { import SkylinkEvent from '../utils/skylinkEvent'; /** - * @event SkylinkEvents.mediaAccessFallback + * @event SkylinkEvents.MEDIA_ACCESS_FALLBACK * @description Event triggered when Stream retrieval fallback state has changed. * @param {Object} detail - Event's payload. * @param {JSON} detail.error - The error result. @@ -25,44 +25,44 @@ import SkylinkEvent from '../utils/skylinkEvent'; * @param {Number} detail.error.audio.expected - The expected audio tracks. * @param {Number} detail.error.audio.received - The received audio tracks. * @param {SkylinkConstants.MEDIA_ACCESS_FALLBACK_STATE} detail.state - The fallback state. - * @param {boolean} detail.isScreensharing - The flag if event occurred during shareScreen() method and not getUserMedia() method. - * @param {boolean} detail.isAudioFallback - The flag if event occurred during retrieval of audio tracks only when getUserMedia() method had failed to retrieve both audio and video tracks. + * @param {boolean} detail.isScreensharing - The flag if event occurred during {@link Skylink#shareScreen|shareScreen} method + * and not {@link Skylink#getUserMedia|getUserMedia} method. + * @param {boolean} detail.isAudioFallback - The flag if event occurred during retrieval of audio tracks only when {@link Skylink#getUserMedia|getUserMedia} method failed to retrieve both audio and video tracks. * @param {String} detail.streamId - The Stream ID. Defined only when state payload is FALLBACKED. */ export const mediaAccessFallback = (detail = {}) => new SkylinkEvent(MEDIA_ACCESS_FALLBACK, { detail }); /** - * @event SkylinkEvents.mediaAccessRequired - * @description Event triggered when retrieval of Stream is required to complete joinRoom() method request. + * @event SkylinkEvents.MEDIA_ACCESS_REQUIRED + * @description Event triggered when retrieval of Stream is required to complete {@link Skylink#joinRoom|joinRoom} method request. * @param {Object} detail -Event's payload. */ export const mediaAccessRequired = (detail = {}) => new SkylinkEvent(MEDIA_ACCESS_REQUIRED, { detail }); /** - * @event SkylinkEvents.mediaAccessStopped + * @event SkylinkEvents.MEDIA_ACCESS_STOPPED * @description Event triggered when Stream has stopped streaming. - * @param {Object} detail.isScreensharing - The flag if event occurred during shareScreen() method and not getUserMedia() method. - * @param {boolean} detail.isAudioFallback - The flag if event occurred during retrieval of audio tracks only when getUserMedia() method had failed to retrieve both audio and video tracks. + * @param {Object} detail.isScreensharing - The flag if event occurred during {@link Skylink#shareScreen|shareScreen} method and not {@link Skylink#getUserMedia|jgetUserMedia} method. + * @param {boolean} detail.isAudioFallback - The flag if event occurred during retrieval of audio tracks only when {@link Skylink#getUserMedia|jgetUserMedia} method had failed to retrieve both audio and video tracks. * @param {String} detail.streamId - The Stream ID. */ export const mediaAccessStopped = (detail = {}) => new SkylinkEvent(MEDIA_ACCESS_STOPPED, { detail }); /** - * @event SkylinkEvents.mediaAccessSuccess + * @event SkylinkEvents.MEDIA_ACCESS_SUCCESS * @description Event triggered when retrieval of Stream is successful. * @param {Object} detail * @param {MediaStream} detail.stream - The Stream object. To attach it to an element: attachMediaStream(videoElement, stream);. - * @param {Boolean} detail.isScreensharing - The flag if event occurred during shareScreen() method and not getUserMedia() method. - * @param {Boolean} detail.isAudioFallback - The flag if event occurred during retrieval of audio tracks only when getUserMedia() method had failed to retrieve both audio and video tracks. + * @param {Boolean} detail.isScreensharing - The flag if event occurred during {@link Skylink#shareScreen|shareScreen} method and not {@link Skylink#getUserMedia|getUserMedia} method. + * @param {Boolean} detail.isAudioFallback - The flag if event occurred during retrieval of audio tracks only when {@link Skylink#getUserMedia|getUserMedia} method had failed to retrieve both audio and video tracks. * @param {String} detail.streamId - The Stream ID. * @param {boolean} detail.isVideo - The flag if the incoming stream has a video track. * @param {boolean} detail.isAudio - The flag if the incoming stream has an audio track. - * @alias SkylinkEvents.mediaAccessSuccess */ export const mediaAccessSuccess = (detail = {}) => new SkylinkEvent(MEDIA_ACCESS_SUCCESS, { detail }); /** - * @event SkylinkEvents.recordingState + * @event SkylinkEvents.RECORDING_STATE * @description Event triggered when recording session state has changed. * @param {Object} detail - Event's payload. * @param {SkylinkConstants.RECORDING_STATE} detail.state - The current recording session state. @@ -72,7 +72,7 @@ export const mediaAccessSuccess = (detail = {}) => new SkylinkEvent(MEDIA_ACCESS export const recordingState = (detail = {}) => new SkylinkEvent(RECORDING_STATE, { detail }); /** - * @event SkylinkEvents.rtmpState + * @event SkylinkEvents.RTMP_STATE * @description Event triggered when rtmp session state has changed. * @param {Object} detail - Event's payload. * @param {SkylinkConstants.RTMP_STATE} detail.state - The current recording session state. @@ -82,12 +82,14 @@ export const recordingState = (detail = {}) => new SkylinkEvent(RECORDING_STATE, export const rtmpState = (detail = {}) => new SkylinkEvent(RTMP_STATE, { detail }); /** - * @event SkylinkEvents.localMediaMuted - * @description Event triggered when muteStreams() method changes User Streams audio and video tracks muted status. + * @event SkylinkEvents.LOCAL_MEDIA_MUTED + * @description Event triggered when {@link PeerConnection.muteStreams|muteStreams} method changes User Streams audio and video tracks + * muted + * status. * @param {Object} detail - Event's payload. * @param {String} detail.streamId - The muted Stream Id. * @param {Boolean} detail.isScreensharing - The flag if the media muted was screensharing. - * @param {JSON} detail.mediaStatus - The Peer streaming media status. This indicates the media status for both getUserMedia() Stream and shareScreen() Stream. + * @param {JSON} detail.mediaStatus - The Peer streaming media status. This indicates the media status for both {@link Skylink#getUserMedia|getUserMedia} Stream and {@link Skylink#shareScreen|shareScreen} Stream. * @param {Boolean} detail.mediaStatus.audioMuted - The value of the audio status. If Peer mediaStatus is -1, audio is not present in the stream. If Peer mediaStatus is 1, audio is present * in the stream and active (not muted). If Peer mediaStatus is 0, audio is present in the stream and muted. * @param {Boolean} detail.mediaStatus.videoMuted - The value of the video status. If Peer mediaStatus is -1, video is not present in the stream. If Peer mediaStatus is 1, video is present @@ -96,12 +98,12 @@ export const rtmpState = (detail = {}) => new SkylinkEvent(RTMP_STATE, { detail export const localMediaMuted = (detail = {}) => new SkylinkEvent(LOCAL_MEDIA_MUTED, { detail }); /** - * @event SkylinkEvents.mediaAccessError + * @event SkylinkEvents.MEDIA_ACCESS_ERROR * @description Event triggered when retrieval of Stream failed. * @param {Object} detail - Event's payload. * @param {Error | String} detail.error - The error object. - * @param {Boolean} detail.isScreensharing - The flag if event occurred during shareScreen() method and not getUserMedia() method. - * @param {Boolean} detail.isAudioFallbackError - The flag if event occurred during retrieval of audio tracks only when getUserMedia() method had failed to retrieve both audio and video tracks. + * @param {Boolean} detail.isScreensharing - The flag if event occurred during {@link Skylink#shareScreen|shareScreen} method and not {@link Skylink#getUserMedia|getUserMedia} method. + * @param {Boolean} detail.isAudioFallbackError - The flag if event occurred during retrieval of audio tracks only when {@link Skylink#getUserMedia|getUserMedia} method had failed to retrieve both audio and video tracks. */ export const mediaAccessError = (detail = {}) => new SkylinkEvent(MEDIA_ACCESS_ERROR, { detail }); diff --git a/src/skylink-events/peer-events.js b/src/skylink-events/peer-events.js index 88d3dcdae..4f5119bf6 100644 --- a/src/skylink-events/peer-events.js +++ b/src/skylink-events/peer-events.js @@ -12,19 +12,24 @@ import { import SkylinkEvent from '../utils/skylinkEvent'; /** - * @event SkylinkEvents.peerUpdated + * @event SkylinkEvents.PEER_UPDATED * @description Event triggered when a Peer session information has been updated. * @param {Object} detail - Event's payload. * @param {SkylinkRoom} detail.room - The current room * @param {String} detail.peerId - The peer's id * @param {boolean} detail.isSelf -The flag if Peer is User. - * @param {peerInfo} detail.peerInfo - The Peer session information. Object signature matches the peerInfo parameter payload received in the peerJoined event. + * @param {peerInfo} detail.peerInfo - The Peer session information. Object signature matches the peerInfo parameter payload received in the {@link SkylinkEvents.event:PEER_JOINED|PEER JOINED} event. */ export const peerUpdated = (detail = {}) => new SkylinkEvent(PEER_UPDATED, { detail }); /** - * @event SkylinkEvents.peerJoined + * @event SkylinkEvents.PEER_JOINED * @description Event triggered when a Peer joins the room. + *
PEER_JOINED event with isSelf=true indicates that the local peer has successfully joined the + * room. All call actions should be done after the PEER_JOINED event is registered. + * If MCU feature is enabled on the appKey, {@link SkylinkEvents.event:SERVER_PEER_JOINED|SERVER PEER JOINED} is the + * corresponding event. + *
* @param {Object} detail - Event's payload * @param {SkylinkRoom} detail.room - The current room. * @param {String} detail.peerId - The Peer ID. @@ -34,7 +39,7 @@ export const peerUpdated = (detail = {}) => new SkylinkEvent(PEER_UPDATED, { det export const peerJoined = (detail = {}) => new SkylinkEvent(PEER_JOINED, { detail }); /** - * @event SkylinkEvents.peerLeft + * @event SkylinkEvents.PEER_LEFT * @description Event triggered when a Peer leaves the room. * @param {Object} detail - Event's payload. * @param {String} detail.peerId - The Peer ID. @@ -44,8 +49,13 @@ export const peerJoined = (detail = {}) => new SkylinkEvent(PEER_JOINED, { detai export const peerLeft = (detail = {}) => new SkylinkEvent(PEER_LEFT, { detail }); /** - * @event SkylinkEvents.serverPeerJoined + * @event SkylinkEvents.SERVER_PEER_JOINED * @description Event triggered when a server Peer joins the room. + * *
SERVER_PEER_JOINED event indicates that the MCU has successfully joined the + * room. All call actions should be done after the SERVER_PEER_JOINED event is registered. + * For P2P key, {@link SkylinkEvents.event:PEER_JOINED|PEER JOINED} is the + * corresponding event. + *
* @param {Object} detail - Event's payload. * @param {SkylinkRoom} detail.room - The current room * @param {String} detail.peerId - The peer's id @@ -54,7 +64,7 @@ export const peerLeft = (detail = {}) => new SkylinkEvent(PEER_LEFT, { detail }) export const serverPeerJoined = (detail = {}) => new SkylinkEvent(SERVER_PEER_JOINED, { detail }); /** - * @event SkylinkEvents.serverPeerLeft + * @event SkylinkEvents.SERVER_PEER_LEFT * @description Event triggered when a server Peer leaves the room. * @param {Object} detail - Event's payload * @param {String} detail.peerId - The Peer ID @@ -64,10 +74,10 @@ export const serverPeerJoined = (detail = {}) => new SkylinkEvent(SERVER_PEER_JO export const serverPeerLeft = (detail = {}) => new SkylinkEvent(SERVER_PEER_LEFT, { detail }); /** - * @event SkylinkEvents.getPeersStateChange - * @description Event triggered when getPeers() method retrieval state changes. + * @event SkylinkEvents.GET_PEERS_STATE_CHANGE + * @description Event triggered when {@link Skylink#getPeers|getPeers} method retrieval state changes. * @param {Object} detail - Event's payload - * @param {SkylinkConstants.GET_PEERS_STATE} detail.state - The current getPeers() retrieval state. + * @param {SkylinkConstants.GET_PEERS_STATE} detail.state - The current {@link Skylink#getPeers|getPeers} retrieval state. * @param {SkylinkUser.sid} detail.privilegePeerId - The Users privileged Peer Id. * @param {Object} detail.peerList - The list of Peer IDs Rooms within the same App space. * @param {Array} detail.peerList.#room - The list of Peer IDs associated with the Room defined in #room property. @@ -76,7 +86,7 @@ export const serverPeerLeft = (detail = {}) => new SkylinkEvent(SERVER_PEER_LEFT export const getPeersStateChange = (detail = {}) => new SkylinkEvent(GET_PEERS_STATE_CHANGE, { detail }); /** - * @event SkylinkEvents.peerConnectionState + * @event SkylinkEvents.PEER_CONNECTION_STATE * @description Event triggered when a Peer connection session description exchanging state has changed. *
* Learn more about how ICE works in this @@ -89,20 +99,21 @@ export const getPeersStateChange = (detail = {}) => new SkylinkEvent(GET_PEERS_S export const peerConnectionState = (detail = {}) => new SkylinkEvent(PEER_CONNECTION_STATE, { detail }); /** - * @event SkylinkEvents.sessionDisconnect + * @event SkylinkEvents.SESSION_DISCONNECT * @description Event triggered when Room session has ended abruptly due to network disconnections. * @param {Object} detail - Event's payload. * @param {String} detail.peerId - The User's Room session Peer ID - * @param {peerInfo} detail.peerInfo - The User's Room session information. Object signature matches the peerInfo parameter payload received in thepeerJoined event. + * @param {peerInfo} detail.peerInfo - The User's Room session information. Object signature matches the peerInfo parameter payload received in the {@link SkylinkEvents.event:PEER_JOINED|PEER JOINED} event. */ export const sessionDisconnect = (detail = {}) => new SkylinkEvent(SESSION_DISCONNECT, { detail }); /** - * Event triggered when {@link PeerConnection.getConnectionStatus} method + * Event triggered when {@link PeerConnection.getConnectionStatus|getConnectionStatus} method * retrieval state changes. - * @event SkylinkEvents.getConnectionStatusStateChange + * @event SkylinkEvents.GET_CONNECTION_STATUS_STATE_CHANGE * @param {Object} detail - Event's payload/ - * @param {SkylinkConstants.GET_CONNECTION_STATUS_STATE} detail.state The current getConnectionStatus() retrieval state. + * @param {SkylinkConstants.GET_CONNECTION_STATUS_STATE} detail.state The current retrieval state from {@link + * Skylink#getConnectionStatus|getConnectionStatus} method. * @param {String} detail.peerId The Peer ID. * @param {statistics} [detail.stats] The Peer connection current stats. * @param {Error} detail.error - The error object. Defined only when state payload is RETRIEVE_ERROR. diff --git a/src/skylink-events/peer-handshake-events.js b/src/skylink-events/peer-handshake-events.js index ed252d32d..4fd27cd0b 100644 --- a/src/skylink-events/peer-handshake-events.js +++ b/src/skylink-events/peer-handshake-events.js @@ -3,7 +3,7 @@ import SkylinkEvent from '../utils/skylinkEvent'; /** * @description Event triggered when a Peer connection establishment state has changed. - * @event SkylinkEvents.handshakeProgress + * @event SkylinkEvents.HANDSHAKE_PROGRESS * @param {Object} detail - Event's payload. * @param {SkylinkConstants.HANDSHAKE_PROGRESS} detail.state The current Peer connection establishment state. * @param {String} detail.peerId The Peer ID. diff --git a/src/skylink-events/room-events.js b/src/skylink-events/room-events.js index 09793941f..20722e6e6 100644 --- a/src/skylink-events/room-events.js +++ b/src/skylink-events/room-events.js @@ -6,21 +6,22 @@ import { import SkylinkEvent from '../utils/skylinkEvent'; /** - * @event SkylinkEvents.roomLock + * @event SkylinkEvents.ROOM_LOCK * @description Event triggered when Room locked status has changed. * @param {Object} detail - Event's payload * @param {Boolean} detail.isLocked The flag if Room is locked. * @param {String} detail.peerId The Peer ID. - * @param {peerInfo} detail.peerInfo The Peer session information. Object signature matches the peerInfo parameter payload received in the peerJoined event. + * @param {peerInfo} detail.peerInfo The Peer session information. Object signature matches the peerInfo parameter payload received in the {@link SkylinkEvents.event:PEER_JOINED|PEER JOINED} event. * @param {Boolean} detail.isSelf The flag if User changed the Room locked status. */ export const roomLock = (detail = {}) => new SkylinkEvent(ROOM_LOCK, { detail }); -/* - * @event SkylinkEvents.bye +/** + * @event SkylinkEvents.BYE * @description Event triggered when a user leaves a room. * @param {Object} detail - Event's payload. * @param {String} detail.rid - The User's Room session Peer ID * @param {peerInfo} detail.mid - The User's id + * @private */ export const bye = (detail = {}) => new SkylinkEvent(BYE, { detail }); diff --git a/src/skylink-events/socket-events.js b/src/skylink-events/socket-events.js index ad7393f22..f4f4b8b72 100644 --- a/src/skylink-events/socket-events.js +++ b/src/skylink-events/socket-events.js @@ -13,7 +13,7 @@ import { import SkylinkEvent from '../utils/skylinkEvent' /** - * @event SkylinkEvents.channelOpen + * @event SkylinkEvents.CHANNEL_OPEN * @description Event triggered when socket connection to Signaling server has opened. * @param {Object} detail - Event's payload. * @param {socketSession} detail.session The socket connection session information. @@ -21,7 +21,7 @@ import SkylinkEvent from '../utils/skylinkEvent' export const channelOpen = detail => new SkylinkEvent(CHANNEL_OPEN, { detail }); /** - * @event SkylinkEvents.channelReopen + * @event SkylinkEvents.CHANNEL_REOPEN * @description Event triggered when socket connection to Signaling server has re-opened. * @param {Object} detail - Event's payload. * @param {socketSession} detail.session The socket connection session information. @@ -41,7 +41,7 @@ export const channelReopen = detail => new SkylinkEvent(CHANNEL_REOPEN, { detail /** * @description Event triggered when socket connection to Signaling server has closed. - * @event SkylinkEvents.channelClose + * @event SkylinkEvents.CHANNEL_CLOSE * @param {Object} detail - Event's payload. * @param {socketSession} detail.session The socket connection session information. */ @@ -51,7 +51,7 @@ export const channelClose = detail => new SkylinkEvent(CHANNEL_CLOSE, { detail } * @description This may be caused by Javascript errors in the event listener when subscribing to events.
* It may be resolved by checking for code errors in your Web App in the event subscribing listener.
* Event triggered when socket connection encountered exception. - * @event SkylinkEvents.channelError + * @event SkylinkEvents.CHANNEL_ERROR * @param {Object} detail - Event's payload. * @param {Error|String} detail.error The error object. * @param {socketSession} detail.session The socket connection session information. @@ -61,7 +61,7 @@ export const channelError = detail => new SkylinkEvent(CHANNEL_ERROR, { detail } /** * @description Note that this is used only for SDK developer purposes. * Event triggered when receiving socket message from the Signaling server. - * @event SkylinkEvents.channelMessage + * @event SkylinkEvents.CHANNEL_MESSAGE * @param {Object} detail - Event's payload. * @param {Object} detail.message The socket message object. * @param {socketSession} detail.session The socket connection session information. @@ -70,7 +70,7 @@ export const channelMessage = detail => new SkylinkEvent(CHANNEL_MESSAGE, { deta /** * @description Event triggered when attempting to establish socket connection to Signaling server when failed. - * @event SkylinkEvents.channelRetry + * @event SkylinkEvents.CHANNEL_RETRY * @param {Object} detail - Event's payload. * @param {SkylinkConstants.SOCKET_FALLBACK} detail.fallbackType The current fallback state. * @param {Number} detail.currentAttempt The current socket reconnection attempt. @@ -80,7 +80,7 @@ export const channelRetry = detail => new SkylinkEvent(CHANNEL_RETRY, { detail } /** * @description Event triggered when attempt to establish socket connection to Signaling server has failed. - * @event SkylinkEvents.socketError + * @event SkylinkEvents.SOCKET_ERROR * @param {Object} detail - Event's payload. * @param {SkylinkConstants.SOCKET_ERROR} detail.errorCode The socket connection error code. * @param {Error|String|Number} detail.error The error object. @@ -91,10 +91,9 @@ export const socketError = detail => new SkylinkEvent(SOCKET_ERROR, { detail }); /** * @description Event triggered when Signaling server reaction state has changed. - * @event SkylinkEvents.systemAction + * @event SkylinkEvents.SYSTEM_ACTION * @param {Object} detail - Event's payload. * @param {SkylinkConstants.SYSTEM_ACTION} detail.action The current Signaling server reaction state. - * [Rel: Skylink.SYSTEM_ACTION] * @param {String} detail.message The message. * @param {SkylinkConstants.SYSTEM_ACTION_REASON} detail.reason The Signaling server reaction state reason of action code. */ diff --git a/src/skylink-events/stream-events.js b/src/skylink-events/stream-events.js index 0f7c8b75c..889f5d4f2 100644 --- a/src/skylink-events/stream-events.js +++ b/src/skylink-events/stream-events.js @@ -8,7 +8,7 @@ import { import SkylinkEvent from '../utils/skylinkEvent'; /** - * @event SkylinkEvents.onIncomingStream + * @event SkylinkEvents.ON_INCOMING_STREAM * @description Event triggered when receiving Peer Stream. * @param {Object} detail - Event's payload. * @param {SkylinkRoom} detail.room - The current room @@ -21,13 +21,12 @@ import SkylinkEvent from '../utils/skylinkEvent'; * @param {String} detail.replacedStreamId - The streamId of the replaced stream. * @param {boolean} detail.isVideo - The flag if the incoming stream has a video track. * @param {boolean} detail.isAudio - The flag if the incoming stream has an audio track. - * @alias SkylinkEvents.onIncomingStream * */ export const onIncomingStream = (detail = {}) => new SkylinkEvent(ON_INCOMING_STREAM, { detail }); /** - * @event SkylinkEvents.onIncomingScreenStream - * @description Event triggered when receving Peer Screenshare Stream. + * @event SkylinkEvents.ON_INCOMING_SCREEN_STREAM + * @description Event triggered when receiving Peer Screenshare Stream. * @param {Object} detail - Event's payload. * @param {SkylinkRoom} detail.room - The current room. * @param {String} detail.peerId - The peer's id. @@ -35,19 +34,21 @@ export const onIncomingStream = (detail = {}) => new SkylinkEvent(ON_INCOMING_ST * @param {String} detail.streamId - The Stream id. * @param {Boolean} detail.isSelf - The flag if Peer is User. * @param {peerInfo} detail.peerInfo - The Peer session information. - * @param {Boolean} detail.isReplace - The flag if the incoming screenshare stream results from shareScreen() called with replaceUserMediaStream = true. + * @param {Boolean} detail.isReplace - The flag if the incoming screenshare stream results from {@link Skylink#shareScreen|shareScreen} called + * with replaceUserMediaStream=true. * @param {boolean} detail.isVideo - The flag if the incoming screen stream has a video track. * @param {boolean} detail.isAudio - The flag if the incoming screen stream has an audio track. * */ export const onIncomingScreenStream = (detail = {}) => new SkylinkEvent(ON_INCOMING_SCREEN_STREAM, { detail }); /** - * @event SkylinkEvents.streamEnded + * @event SkylinkEvents.STREAM_ENDED * @description Event triggered when a Peer Stream streaming has stopped. Note that it may not be the currently sent Stream to User, and it also triggers when User leaves the Room for any currently sent Stream to User from Peer. * @param {Object} detail - Event's payload. * @param {String} detail.peerId - The Peer ID. * @param {SkylinkRoom} detail.room - The room. - * @param {peerInfo} detail.peerInfo - The Peer session information. Object signature matches the peerInfo parameter payload received in the peerJoined event. + * @param {peerInfo} detail.peerInfo - The Peer session information. Object signature matches the peerInfo parameter payload received + * in the {@link SkylinkEvents.event:PEER_JOINED|PEER JOINED} event. * @param {Boolean} detail.isSelf The flag if Peer is User. * @param {Boolean} detail.isScreensharing The flag if Peer Stream is a screensharing Stream. * @param {String} detail.streamId The Stream ID. @@ -57,11 +58,11 @@ export const onIncomingScreenStream = (detail = {}) => new SkylinkEvent(ON_INCOM export const streamEnded = (detail = {}) => new SkylinkEvent(STREAM_ENDED, { detail }); /** - * @event SkylinkEvents.streamMuted + * @event SkylinkEvents.STREAM_MUTED * @description Event triggered when Peer Stream audio or video tracks has been muted / unmuted. * @param {Object} detail - Event's payload. * @param {String} detail.peerId - The Peer ID. - * @param {peerInfo} detail.peerInfo The Peer session information. Object signature matches the peerInfo parameter payload received in the peerJoined event. + * @param {peerInfo} detail.peerInfo The Peer session information. Object signature matches the peerInfo parameter payload received in the {@link SkylinkEvents.event:PEER_JOINED|PEER JOINED} event. * @param {Boolean} detail.isSelf The flag if Peer is User. * @param {boolean} detail.isVideo - The flag if the muted stream has a video track. * @param {boolean} detail.isAudio - The flag if the muted stream has an audio track. From c9b812a57c53e5344ae823f9819c1a786106bbc3 Mon Sep 17 00:00:00 2001 From: dinawee Date: Thu, 21 May 2020 12:19:28 +0800 Subject: [PATCH 05/17] refactor(statsLogs): suppress stats logs with beSilentOnStatsLogs flag --- .gitignore | 1 + demos/collection/config.js | 47 ------------------- .../helpers/statistics/index.js | 22 +++++---- src/typedefs.js | 2 +- 4 files changed, 15 insertions(+), 57 deletions(-) delete mode 100644 demos/collection/config.js diff --git a/.gitignore b/.gitignore index c6281f8c6..18fcd4912 100644 --- a/.gitignore +++ b/.gitignore @@ -62,3 +62,4 @@ node_modules dist build docs +config.js diff --git a/demos/collection/config.js b/demos/collection/config.js deleted file mode 100644 index e2959f2ba..000000000 --- a/demos/collection/config.js +++ /dev/null @@ -1,47 +0,0 @@ -/* eslint-disable */ -/**************************** Note ********************************** - Save your api settings like appKey, defaultRoom and room and save it - in a file called [config.js] - *********************************************************************/ -function getParameterByName(name, url) { - if (!url) url = window.location.href; - name = name.replace(/[\[\]]/g, "\\$&"); - var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)", "i"), - results = regex.exec(url); - if (!results) return null; - if (!results[2]) return ''; - return decodeURIComponent(results[2].replace(/\+/g, " ")); -} - -if (!getParameterByName('room')) { - window.location.search = '?room=' + (new Date()).getTime(); -} - -const config = { - appKey: getParameterByName('appKey') || 'c7ae7e8a-2e24-43a5-85c6-d4dafbdfecb6', - defaultRoom: getParameterByName('room'), - audioFallback: !!getParameterByName('audioFallback'), - forceSSL: true, - beSilentOnParseLogs: true, - beSilentOnLogs: true, -}; - -/** - * For using credentials based authentication - */ -const secret = null; // 'xxxxx' Use App Key secret -const duration = 2; // 2 hours. Default is 24 for CORS auth -const startDateTimeStamp = (new Date ()).toISOString(); - -if (secret) { - const genHashForCredentials = CryptoJS.HmacSHA1(config.defaultRoom + '_' + duration + '_' + startDateTimeStamp, secret); - const credentials = encodeURIComponent(genHashForCredentials.toString(CryptoJS.enc.Base64)); - - config.credentials = { - duration: duration, - startDateTime: startDateTimeStamp, - credentials: credentials - }; -} - -export default config; diff --git a/src/peer-connection/helpers/statistics/index.js b/src/peer-connection/helpers/statistics/index.js index 5d2fe0a41..393113b5f 100644 --- a/src/peer-connection/helpers/statistics/index.js +++ b/src/peer-connection/helpers/statistics/index.js @@ -131,11 +131,13 @@ class PeerConnectionStatistics { this.getStatsFailure(promiseReject, messages.STATS_MODULE.ERRORS.PARSE_FAILED, err); } - dispatchEvent(getConnectionStatusStateChange({ - state: GET_CONNECTION_STATUS_STATE.RETRIEVE_SUCCESS, - peerId: this.peerId, - stats: this.output, - })); + if (!this.beSilentOnLogs) { + dispatchEvent(getConnectionStatusStateChange({ + state: GET_CONNECTION_STATUS_STATE.RETRIEVE_SUCCESS, + peerId: this.peerId, + stats: this.output, + })); + } promiseResolve(this.output); } @@ -186,10 +188,12 @@ class PeerConnectionStatistics { this.getStatsFailure(reject, messages.PEER_CONNECTION.getstats_api_not_available); } - dispatchEvent(getConnectionStatusStateChange({ - state: GET_CONNECTION_STATUS_STATE.RETRIEVING, - peerId: this.peerId, - })); + if (!this.beSilentOnLogs) { + dispatchEvent(getConnectionStatusStateChange({ + state: GET_CONNECTION_STATUS_STATE.RETRIEVING, + peerId: this.peerId, + })); + } this.peerConnection.getStats() .then((stats) => { this.getStatsSuccess(resolve, reject, stats); }) diff --git a/src/typedefs.js b/src/typedefs.js index 1cbb14df1..a317bd2f3 100644 --- a/src/typedefs.js +++ b/src/typedefs.js @@ -254,7 +254,7 @@ * @property {String} [socketServer.protocol] The Signaling server protocol for debugging purposes to use. * If not defined, it will use the default protocol specified. * @property {codecParams} [codecParams] The audio and video codecs parameters to configure. - * @property {boolean} [beSilentOnStatsLogs=false] The flag if error logs triggered by the statistics module should be silent. + * @property {boolean} [beSilentOnStatsLogs=false] The flag if all logs triggered by the statistics module should be silent. * @property {boolean} [beSilentOnParseLogs=false] The flag if media and codec parsing logs should be silent. */ From caf093fed5f513d98a435801ed9d2466a36002da Mon Sep 17 00:00:00 2001 From: Dina Wee Date: Fri, 22 May 2020 05:45:36 +0000 Subject: [PATCH 06/17] Merged in ESS-1895-npm-audit (pull request #327) ESS-1895 npm audit * fix(npm): fix vulnerabilities and update license field * chore: remove dependencies and tests no longer needed * fix(doc): refactor for readability --- package-lock.json | 7065 +++-------------- package.json | 22 +- src/constants.js | 47 +- src/index.js | 2 + src/skylink-events/index.js | 1 + test/config.js | 5 - test/unit/imports.test.js | 1 - test/unit/logger/logger.test.js | 289 - .../unit/room/helpers/stopMediaTracks.test.js | 303 - test/unit/room/leaveRoom.test.js | 127 - .../message-handler/byeHandler.test.js | 257 - .../message-handler/redirectHandler.test.js | 160 - test/unit/support/buildInitConfig.js | 24 - test/unit/support/doneWrapper.js | 11 - test/unit/support/mocks/mediaTrack.js | 16 - test/unit/support/mocks/roomState.js | 549 -- .../support/plug-webrtc-to-global-scope.js | 12 - 17 files changed, 1129 insertions(+), 7762 deletions(-) delete mode 100644 test/config.js delete mode 100644 test/unit/imports.test.js delete mode 100644 test/unit/logger/logger.test.js delete mode 100644 test/unit/room/helpers/stopMediaTracks.test.js delete mode 100644 test/unit/room/leaveRoom.test.js delete mode 100644 test/unit/server-communication/signaling-server/message-handler/byeHandler.test.js delete mode 100644 test/unit/server-communication/signaling-server/message-handler/redirectHandler.test.js delete mode 100644 test/unit/support/buildInitConfig.js delete mode 100644 test/unit/support/doneWrapper.js delete mode 100644 test/unit/support/mocks/mediaTrack.js delete mode 100644 test/unit/support/mocks/roomState.js delete mode 100644 test/unit/support/plug-webrtc-to-global-scope.js diff --git a/package-lock.json b/package-lock.json index 7397d0048..3aaadd680 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "skylinkjs", - "version": "2.1.1", + "version": "2.1.2", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -245,6 +245,12 @@ "@babel/types": "^7.0.0" } }, + "@babel/helper-validator-identifier": { + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz", + "integrity": "sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g==", + "dev": true + }, "@babel/helper-wrap-function": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz", @@ -797,34 +803,26 @@ "fastq": "^1.6.0" } }, - "@sinonjs/commons": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.3.0.tgz", - "integrity": "sha512-j4ZwhaHmwsCb4DlDOIWnI5YyKDNMoNThsmwEpfHx6a1EpsGZ9qYLxP++LMlmBRjtGptGHFsGItJ768snllFWpA==", - "dev": true, - "requires": { - "type-detect": "4.0.8" - } + "@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "dev": true }, - "@sinonjs/formatio": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-2.0.0.tgz", - "integrity": "sha512-ls6CAMA6/5gG+O/IdsBcblvnd8qcO/l1TYoNeAzp3wcISOxlPXQEus0mLcdwazEkWjaBdaJ3TaxmNgCLWwvWzg==", + "@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", "dev": true, "requires": { - "samsam": "1.3.0" + "defer-to-connect": "^1.0.1" } }, - "@sinonjs/samsam": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-3.0.2.tgz", - "integrity": "sha512-m08g4CS3J6lwRQk1pj1EO+KEVWbrbXsmi9Pw0ySmrIbcVxVaedoFgLvFsV8wHLwh01EpROVz3KvVcD1Jmks9FQ==", - "dev": true, - "requires": { - "@sinonjs/commons": "^1.0.2", - "array-from": "^2.1.1", - "lodash.get": "^4.4.2" - } + "@types/color-name": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", + "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", + "dev": true }, "@types/estree": { "version": "0.0.39", @@ -883,9 +881,9 @@ "dev": true }, "acorn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.5.tgz", - "integrity": "sha512-i33Zgp3XWtmZBMNvCr4azvOFeWVw1Rk6p3hfi3LUDvIFraOMywb1kAtrbi+med14m4Xfpqm3zRZMT+c0FNE7kg==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", + "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", "dev": true }, "acorn-globals": { @@ -928,12 +926,46 @@ } }, "ansi-align": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", - "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", + "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", "dev": true, "requires": { - "string-width": "^2.0.0" + "string-width": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } } }, "ansi-escapes": { @@ -958,72 +990,13 @@ } }, "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", "dev": true, "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" } }, "argparse": { @@ -1045,36 +1018,12 @@ "commander": "^2.11.0" } }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, "array-equal": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", "dev": true }, - "array-from": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz", - "integrity": "sha1-z+nYwmYoudxa7MYqn12PHzUsEZU=", - "dev": true - }, "array-includes": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", @@ -1100,23 +1049,11 @@ "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", "dev": true }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, "arraybuffer.slice": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==" }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", - "dev": true - }, "asn1": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", @@ -1132,18 +1069,6 @@ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", "dev": true }, - "assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, "ast-types-flow": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", @@ -1156,12 +1081,6 @@ "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", "dev": true }, - "async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "dev": true - }, "async-limiter": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", @@ -1173,12 +1092,6 @@ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", "dev": true }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true - }, "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", @@ -1291,12 +1204,6 @@ } } }, - "babylon": { - "version": "7.0.0-beta.19", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.19.tgz", - "integrity": "sha512-Vg0C9s/REX6/WIXN37UKpv5ZhRi6A4pjHlpkE34+8/a6c2W1Q692n3hmc+SZG5lKRnaExLUbxtJ1SVT+KaCQ/A==", - "dev": true - }, "backo2": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", @@ -1308,61 +1215,6 @@ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, "base64-arraybuffer": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", @@ -1385,12 +1237,6 @@ "callsite": "1.0.0" } }, - "better-docs": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/better-docs/-/better-docs-1.1.6.tgz", - "integrity": "sha512-2mSRSThIIIM/RLatcrFRfTJ6tKNGV8vzSLmM/2hWOwDZWtsyG9WttrQpzmA/izCcqxL0o8DpKfjlAxq8fuaHSw==", - "dev": true - }, "big.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", @@ -1398,9 +1244,9 @@ "dev": true }, "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", + "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==", "dev": true }, "blob": { @@ -1409,37 +1255,114 @@ "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==" }, "bluebird": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz", - "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==", - "dev": true - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", "dev": true }, "boxen": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", - "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", - "dev": true, - "requires": { - "ansi-align": "^2.0.0", - "camelcase": "^4.0.0", - "chalk": "^2.0.1", - "cli-boxes": "^1.0.0", - "string-width": "^2.0.0", - "term-size": "^1.2.0", - "widest-line": "^2.0.0" + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", + "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", + "dev": true, + "requires": { + "ansi-align": "^3.0.0", + "camelcase": "^5.3.1", + "chalk": "^3.0.0", + "cli-boxes": "^2.2.0", + "string-width": "^4.1.0", + "term-size": "^2.1.0", + "type-fest": "^0.8.1", + "widest-line": "^3.1.0" }, "dependencies": { - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } } } }, @@ -1454,32 +1377,12 @@ } }, "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" } }, "braintree-jsdoc-template": { @@ -1493,12 +1396,6 @@ "integrity": "sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw==", "dev": true }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, "browserslist": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.4.1.tgz", @@ -1522,21 +1419,36 @@ "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", "dev": true }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", "dev": true, "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "dependencies": { + "get-stream": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz", + "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true + } } }, "caller-callsite": { @@ -1577,9 +1489,9 @@ "dev": true }, "camelcase": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", - "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, "caniuse-lite": { @@ -1588,12 +1500,6 @@ "integrity": "sha512-n2w1gPQSsYyorSVYqPMqbSaz1w7o9ZC8VhOEGI9T5MfGDzp7sbopQxG6GaQmYsaq13Xfx/mkxJUWC1Dz3oZfzw==", "dev": true }, - "capture-stack-trace": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", - "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==", - "dev": true - }, "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", @@ -1601,26 +1507,12 @@ "dev": true }, "catharsis": { - "version": "0.8.9", - "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.8.9.tgz", - "integrity": "sha1-mMyJDKZS3S7w5ws3klMQ/56Q/Is=", - "dev": true, - "requires": { - "underscore-contrib": "~0.3.0" - } - }, - "chai": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", - "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==", + "version": "0.8.11", + "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.8.11.tgz", + "integrity": "sha512-a+xUyMV7hD1BrDQA/3iPV7oc+6W26BgVJO05PGEoatMyIuPScQKsde6i3YorWX1qs+AZjnJ18NqdKoCtKiNh1g==", "dev": true, "requires": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^3.0.1", - "get-func-name": "^2.0.0", - "pathval": "^1.1.0", - "type-detect": "^4.0.5" + "lodash": "^4.17.14" } }, "chalk": { @@ -1640,107 +1532,22 @@ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true }, - "check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", - "dev": true - }, - "cheerio": { - "version": "0.22.0", - "resolved": "http://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz", - "integrity": "sha1-qbqoYKP5tZWmuBsahocxIe06Jp4=", - "dev": true, - "requires": { - "css-select": "~1.2.0", - "dom-serializer": "~0.1.0", - "entities": "~1.1.1", - "htmlparser2": "^3.9.1", - "lodash.assignin": "^4.0.9", - "lodash.bind": "^4.1.4", - "lodash.defaults": "^4.0.1", - "lodash.filter": "^4.4.0", - "lodash.flatten": "^4.2.0", - "lodash.foreach": "^4.3.0", - "lodash.map": "^4.4.0", - "lodash.merge": "^4.4.0", - "lodash.pick": "^4.2.1", - "lodash.reduce": "^4.4.0", - "lodash.reject": "^4.4.0", - "lodash.some": "^4.4.0" - }, - "dependencies": { - "domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", - "dev": true, - "requires": { - "domelementtype": "1" - } - }, - "htmlparser2": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.0.tgz", - "integrity": "sha512-J1nEUGv+MkXS0weHNWVKJJ+UrLfePxRWpN3C9bEi9fLxL2+ggW94DQvgYVXsaT30PGwYRIZKNZXuyMhp3Di4bQ==", - "dev": true, - "requires": { - "domelementtype": "^1.3.0", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.0.6" - } - }, - "readable-stream": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.1.1.tgz", - "integrity": "sha512-DkN66hPyqDhnIQ6Jcsvx9bFjhw214O4poMBcIMgPVpQvNy9a0e0Uhg5SqySyDKAmUlwt8LonTBz1ezOnM8pUdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "string_decoder": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz", - "integrity": "sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.0.tgz", + "integrity": "sha512-aXAaho2VJtisB/1fg1+3nlLJqGOuewTzQpd/Tz0yTg2R0e4IGtshYvtjowyEumcBv2z+y4+kc75Mz7j5xJskcQ==", + "dev": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.4.0" } }, - "chownr": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", - "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==", - "dev": true - }, "ci-info": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", @@ -1753,39 +1560,16 @@ "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", "dev": true }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "cli-boxes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", - "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", - "dev": true - }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "cli-boxes": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.0.tgz", + "integrity": "sha512-gpaBrMAizVEANOpfZp/EEUixTXDyGt7DFzdK5hU+UbWt/J0lB0w20ncZj59Z9a93xHb9u12zF5BS6i9RKbtg4w==", + "dev": true + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", "dev": true, "requires": { "restore-cursor": "^2.0.0" @@ -1797,36 +1581,18 @@ "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", "dev": true }, - "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", - "dev": true, - "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" - } - }, "clone": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=" }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", "dev": true, "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" + "mimic-response": "^1.0.0" } }, "color-convert": { @@ -1892,60 +1658,37 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, - "concurrently": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-4.1.0.tgz", - "integrity": "sha512-pwzXCE7qtOB346LyO9eFWpkFJVO3JQZ/qU/feGeaAHiX1M3Rw3zgXKc5cZ8vSH5DGygkjzLFDzA/pwoQDkRNGg==", + "configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", "dev": true, "requires": { - "chalk": "^2.4.1", - "date-fns": "^1.23.0", - "lodash": "^4.17.10", - "read-pkg": "^4.0.1", - "rxjs": "^6.3.3", - "spawn-command": "^0.0.2-1", - "supports-color": "^4.5.0", - "tree-kill": "^1.1.0", - "yargs": "^12.0.1" + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" }, "dependencies": { - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", - "dev": true - }, - "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, "requires": { - "has-flag": "^2.0.0" + "semver": "^6.0.0" } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true } } }, - "configstore": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", - "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", - "dev": true, - "requires": { - "dot-prop": "^4.1.0", - "graceful-fs": "^4.1.2", - "make-dir": "^1.0.0", - "unique-string": "^1.0.0", - "write-file-atomic": "^2.0.0", - "xdg-basedir": "^3.0.0" - } - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true - }, "contains-path": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", @@ -1961,12 +1704,6 @@ "safe-buffer": "~5.1.1" } }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, "core-js": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.2.tgz", @@ -2008,15 +1745,6 @@ } } }, - "create-error-class": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", - "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", - "dev": true, - "requires": { - "capture-stack-trace": "^1.0.0" - } - }, "cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", @@ -2036,27 +1764,9 @@ "integrity": "sha1-/aGedh/Ad+Af+/3G6f38WeiAbNg=" }, "crypto-random-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", - "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", - "dev": true - }, - "css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", - "dev": true, - "requires": { - "boolbase": "~1.0.0", - "css-what": "2.1", - "domutils": "1.5.1", - "nth-check": "~1.0.1" - } - }, - "css-what": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.2.tgz", - "integrity": "sha512-wan8dMWQ0GUeF7DGEPVjhHemVW/vy6xUYmFzRY8RYqgA0JtXC9rJmbScBjqSu6dg9q0lwPQy6ZAmJVr3PPTvqQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", "dev": true }, "cssom": { @@ -2100,12 +1810,6 @@ "whatwg-url": "^7.0.0" } }, - "date-fns": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz", - "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==", - "dev": true - }, "debug": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", @@ -2114,25 +1818,13 @@ "ms": "2.0.0" } }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, - "deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", "dev": true, "requires": { - "type-detect": "^4.0.0" + "mimic-response": "^1.0.0" } }, "deep-extend": { @@ -2147,6 +1839,12 @@ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", "dev": true }, + "defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", + "dev": true + }, "define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", @@ -2156,47 +1854,6 @@ "object-keys": "^1.0.12" } }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, "del": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", @@ -2226,12 +1883,6 @@ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", "dev": true }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "dev": true - }, "depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", @@ -2244,18 +1895,6 @@ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", "dev": true }, - "detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", - "dev": true - }, - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true - }, "dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -2282,30 +1921,6 @@ "esutils": "^2.0.2" } }, - "dom-serializer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", - "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", - "dev": true, - "requires": { - "domelementtype": "~1.1.1", - "entities": "~1.1.1" - }, - "dependencies": { - "domelementtype": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", - "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", - "dev": true - } - } - }, - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "dev": true - }, "domexception": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", @@ -2315,23 +1930,13 @@ "webidl-conversions": "^4.0.2" } }, - "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "dev": true, - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, "dot-prop": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", - "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.2.0.tgz", + "integrity": "sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A==", "dev": true, "requires": { - "is-obj": "^1.0.0" + "is-obj": "^2.0.0" } }, "duplexer3": { @@ -2419,12 +2024,6 @@ "has-binary2": "~1.0.2" } }, - "entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", - "dev": true - }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -2459,6 +2058,12 @@ "is-symbol": "^1.0.2" } }, + "escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", + "dev": true + }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -2754,10 +2359,21 @@ } }, "eslint-utils": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.3.1.tgz", - "integrity": "sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q==", - "dev": true + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", + "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", + "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", + "dev": true + } + } }, "eslint-visitor-keys": { "version": "1.0.0", @@ -2839,77 +2455,12 @@ "strip-eof": "^1.0.0" } }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "dev": true }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, "external-editor": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", @@ -2921,111 +2472,12 @@ "tmp": "^0.0.33" } }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, "extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", "dev": true }, - "fake-fetch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fake-fetch/-/fake-fetch-2.0.0.tgz", - "integrity": "sha1-KwBNaGi78thkq28PHHl4KHZP28c=", - "dev": true, - "requires": { - "promise": "^8.0.1", - "sinon": "^4.5.0", - "whatwg-fetch": "^2.0.4" - }, - "dependencies": { - "sinon": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-4.5.0.tgz", - "integrity": "sha512-trdx+mB0VBBgoYucy6a9L7/jfQOmvGeaKZT4OOJ+lPAtI8623xyGr8wLiE4eojzBS8G9yXbhx42GHUOVLr4X2w==", - "dev": true, - "requires": { - "@sinonjs/formatio": "^2.0.0", - "diff": "^3.1.0", - "lodash.get": "^4.4.2", - "lolex": "^2.2.0", - "nise": "^1.2.0", - "supports-color": "^5.1.0", - "type-detect": "^4.0.5" - } - }, - "whatwg-fetch": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz", - "integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==", - "dev": true - } - } - }, "fast-deep-equal": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", @@ -3140,26 +2592,12 @@ } }, "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "to-regex-range": "^5.0.1" } }, "finalhandler": { @@ -3220,12 +2658,6 @@ "write": "^0.2.1" } }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -3243,15 +2675,6 @@ "mime-types": "^2.1.12" } }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, "fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", @@ -3277,15 +2700,6 @@ } } }, - "fs-minipass": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz", - "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", - "dev": true, - "requires": { - "minipass": "^2.2.1" - } - }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -3293,533 +2707,11 @@ "dev": true }, "fsevents": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", - "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", "dev": true, - "optional": true, - "requires": { - "nan": "^2.12.1", - "node-pre-gyp": "^0.12.0" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "debug": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ms": "^2.1.1" - } - }, - "deep-extend": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "glob": { - "version": "7.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.24", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore-walk": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "dev": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "dev": true - }, - "minipass": { - "version": "2.3.5", - "bundled": true, - "dev": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.2.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "needle": { - "version": "2.3.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "debug": "^4.1.0", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.12.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "optional": true - }, - "npm-packlist": { - "version": "1.4.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "rimraf": { - "version": "2.6.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true, - "dev": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "bundled": true, - "dev": true, - "optional": true - }, - "semver": { - "version": "5.7.0", - "bundled": true, - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "tar": { - "version": "4.4.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.3.4", - "minizlib": "^1.1.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "wide-align": { - "version": "1.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "yallist": { - "version": "3.0.3", - "bundled": true, - "dev": true - } - } + "optional": true }, "function-bind": { "version": "1.1.1", @@ -3833,92 +2725,21 @@ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "dev": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true - }, - "get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", - "dev": true - }, - "get-stdin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", - "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", - "dev": true - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "get-stdin": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", + "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", + "dev": true + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", "dev": true, "requires": { "pump": "^3.0.0" } }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true - }, "getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", @@ -3943,33 +2764,21 @@ } }, "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", "dev": true, "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } + "is-glob": "^4.0.1" } }, "global-dirs": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", - "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.0.1.tgz", + "integrity": "sha512-5HqUqdhkEovj2Of/ms3IeS/EekcO54ytHRLV4PEY2rhRwrHXLQjeVEES0Lhka0xwNDtGYn58wyC4s5+MHsOO6A==", "dev": true, "requires": { - "ini": "^1.3.4" + "ini": "^1.3.5" } }, "globals": { @@ -4000,30 +2809,22 @@ } }, "got": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", - "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", "dev": true, "requires": { - "create-error-class": "^3.0.0", + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-redirect": "^1.0.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "lowercase-keys": "^1.0.0", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "unzip-response": "^2.0.1", - "url-parse-lax": "^1.0.0" - }, - "dependencies": { - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - } + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" } }, "graceful-fs": { @@ -4032,12 +2833,6 @@ "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", "dev": true }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true - }, "har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", @@ -4088,44 +2883,12 @@ "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", "dev": true }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", "dev": true }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "home-or-tmp": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-3.0.0.tgz", @@ -4147,6 +2910,12 @@ "whatwg-encoding": "^1.0.1" } }, + "http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "dev": true + }, "http-errors": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", @@ -4271,15 +3040,6 @@ "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", "dev": true }, - "ignore-walk": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz", - "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", - "dev": true, - "requires": { - "minimatch": "^3.0.4" - } - }, "import-fresh": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.0.0.tgz", @@ -4376,32 +3136,6 @@ "loose-envify": "^1.0.0" } }, - "invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", - "dev": true - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -4409,20 +3143,14 @@ "dev": true }, "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, "requires": { - "binary-extensions": "^1.0.0" + "binary-extensions": "^2.0.0" } }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, "is-builtin-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", @@ -4447,63 +3175,18 @@ "ci-info": "^2.0.0" } }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "is-date-object": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", "dev": true }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, "is-directory": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", "dev": true }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -4526,13 +3209,13 @@ } }, "is-installed-globally": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", - "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", + "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", "dev": true, "requires": { - "global-dirs": "^0.1.0", - "is-path-inside": "^1.0.0" + "global-dirs": "^2.0.1", + "is-path-inside": "^3.0.1" } }, "is-module": { @@ -4542,35 +3225,21 @@ "dev": true }, "is-npm": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", - "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz", + "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==", "dev": true }, "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true }, "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", "dev": true }, "is-path-cwd": { @@ -4600,22 +3269,10 @@ } }, "is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", - "dev": true, - "requires": { - "path-is-inside": "^1.0.1" - } - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.2.tgz", + "integrity": "sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg==", + "dev": true }, "is-promise": { "version": "2.1.0", @@ -4623,12 +3280,6 @@ "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", "dev": true }, - "is-redirect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", - "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", - "dev": true - }, "is-reference": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.1.1.tgz", @@ -4647,12 +3298,6 @@ "has": "^1.0.1" } }, - "is-retry-allowed": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", - "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", - "dev": true - }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", @@ -4674,16 +3319,10 @@ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "dev": true }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "is-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", "dev": true }, "isarray": { @@ -4697,156 +3336,12 @@ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", "dev": true }, - "istanbul-lib-coverage": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz", - "integrity": "sha512-nPvSZsVlbG9aLhZYaC3Oi1gT/tpyo3Yt5fNyf6NmcKIayz4VV/txxJFFKAK/gU4dcNn8ehsanBbVHVl0+amOLA==", - "dev": true - }, - "istanbul-lib-instrument": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-2.3.2.tgz", - "integrity": "sha512-l7TD/VnBsIB2OJvSyxaLW/ab1+92dxZNH9wLH7uHPPioy3JZ8tnx2UXUdKmdkgmP2EFPzg64CToUP6dAS3U32Q==", - "dev": true, - "requires": { - "@babel/generator": "7.0.0-beta.51", - "@babel/parser": "7.0.0-beta.51", - "@babel/template": "7.0.0-beta.51", - "@babel/traverse": "7.0.0-beta.51", - "@babel/types": "7.0.0-beta.51", - "istanbul-lib-coverage": "^2.0.1", - "semver": "^5.5.0" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-beta.51.tgz", - "integrity": "sha1-vXHZsZKvl435FYKdOdQJRFZDmgw=", - "dev": true, - "requires": { - "@babel/highlight": "7.0.0-beta.51" - } - }, - "@babel/generator": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.0.0-beta.51.tgz", - "integrity": "sha1-bHV1/952HQdIXgS67cA5LG2eMPY=", - "dev": true, - "requires": { - "@babel/types": "7.0.0-beta.51", - "jsesc": "^2.5.1", - "lodash": "^4.17.5", - "source-map": "^0.5.0", - "trim-right": "^1.0.1" - } - }, - "@babel/helper-function-name": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.51.tgz", - "integrity": "sha1-IbSHSiJ8+Z7K/MMKkDAtpaJkBWE=", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "7.0.0-beta.51", - "@babel/template": "7.0.0-beta.51", - "@babel/types": "7.0.0-beta.51" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.51.tgz", - "integrity": "sha1-MoGy0EWvlcFyzpGyCCXYXqRnZBE=", - "dev": true, - "requires": { - "@babel/types": "7.0.0-beta.51" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.51.tgz", - "integrity": "sha1-imw/ZsTSZTUvwHdIT59ugKUauXg=", - "dev": true, - "requires": { - "@babel/types": "7.0.0-beta.51" - } - }, - "@babel/highlight": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0-beta.51.tgz", - "integrity": "sha1-6IRK4loVlcz9QriWI7Q3bKBtIl0=", - "dev": true, - "requires": { - "chalk": "^2.0.0", - "esutils": "^2.0.2", - "js-tokens": "^3.0.0" - } - }, - "@babel/parser": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.0.0-beta.51.tgz", - "integrity": "sha1-J87C30Cd9gr1gnDtj2qlVAnqhvY=", - "dev": true - }, - "@babel/template": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.0.0-beta.51.tgz", - "integrity": "sha1-lgKkCuvPNXrpZ34lMu9fyBD1+/8=", - "dev": true, - "requires": { - "@babel/code-frame": "7.0.0-beta.51", - "@babel/parser": "7.0.0-beta.51", - "@babel/types": "7.0.0-beta.51", - "lodash": "^4.17.5" - } - }, - "@babel/traverse": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.0.0-beta.51.tgz", - "integrity": "sha1-mB2vLOw0emIx06odnhgDsDqqpKg=", - "dev": true, - "requires": { - "@babel/code-frame": "7.0.0-beta.51", - "@babel/generator": "7.0.0-beta.51", - "@babel/helper-function-name": "7.0.0-beta.51", - "@babel/helper-split-export-declaration": "7.0.0-beta.51", - "@babel/parser": "7.0.0-beta.51", - "@babel/types": "7.0.0-beta.51", - "debug": "^3.1.0", - "globals": "^11.1.0", - "invariant": "^2.2.0", - "lodash": "^4.17.5" - } - }, - "@babel/types": { - "version": "7.0.0-beta.51", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.51.tgz", - "integrity": "sha1-2AK3tUO1g2x3iqaReXq/APPZfqk=", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.5", - "to-fast-properties": "^2.0.0" - } - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", - "dev": true - } - } - }, "jest-worker": { "version": "24.9.0", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", @@ -4881,9 +3376,9 @@ "dev": true }, "js-yaml": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.1.tgz", - "integrity": "sha512-um46hB9wNOKlwkHgiuyEVAybXBjwFUV0Z/RaHJblRd9DXltue9FTYvzCr9ErQrK9Adz5MU4gHWVaNUfdmrC8qA==", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", "dev": true, "requires": { "argparse": "^1.0.7", @@ -4891,12 +3386,12 @@ } }, "js2xmlparser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-3.0.0.tgz", - "integrity": "sha1-P7YOqgicVED5MZ9RdgzNB+JJlzM=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.1.tgz", + "integrity": "sha512-KrPTolcw6RocpYjdC7pL7v62e55q7qOMHvLX1UCLc5AAS8qeJ6nukarEJAF2KL2PZxlbGueEbINqZR2bDe/gUw==", "dev": true, "requires": { - "xmlcreate": "^1.0.1" + "xmlcreate": "^2.0.3" } }, "jsbn": { @@ -4906,23 +3401,51 @@ "dev": true }, "jsdoc": { - "version": "3.5.5", - "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.5.5.tgz", - "integrity": "sha512-6PxB65TAU4WO0Wzyr/4/YhlGovXl0EVYfpKbpSroSj0qBxT4/xod/l40Opkm38dRHRdQgdeY836M0uVnJQG7kg==", - "dev": true, - "requires": { - "babylon": "7.0.0-beta.19", - "bluebird": "~3.5.0", - "catharsis": "~0.8.9", - "escape-string-regexp": "~1.0.5", - "js2xmlparser": "~3.0.0", - "klaw": "~2.0.0", - "marked": "~0.3.6", - "mkdirp": "~0.5.1", - "requizzle": "~0.2.1", - "strip-json-comments": "~2.0.1", + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.6.4.tgz", + "integrity": "sha512-3G9d37VHv7MFdheviDCjUfQoIjdv4TC5zTTf5G9VODLtOnVS6La1eoYBDlbWfsRT3/Xo+j2MIqki2EV12BZfwA==", + "dev": true, + "requires": { + "@babel/parser": "^7.9.4", + "bluebird": "^3.7.2", + "catharsis": "^0.8.11", + "escape-string-regexp": "^2.0.0", + "js2xmlparser": "^4.0.1", + "klaw": "^3.0.0", + "markdown-it": "^10.0.0", + "markdown-it-anchor": "^5.2.7", + "marked": "^0.8.2", + "mkdirp": "^1.0.4", + "requizzle": "^0.2.3", + "strip-json-comments": "^3.1.0", "taffydb": "2.6.2", - "underscore": "~1.8.3" + "underscore": "~1.10.2" + }, + "dependencies": { + "@babel/parser": { + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.6.tgz", + "integrity": "sha512-AoeIEJn8vt+d/6+PXDRPaksYhnlbMIiejioBZvvMQsOjW/JYK6k/0dKnvvP3EhK5GfMBWDPtrxRtegWdAcdq9Q==", + "dev": true + }, + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, + "strip-json-comments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.0.tgz", + "integrity": "sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w==", + "dev": true + } } }, "jsdom": { @@ -4971,6 +3494,12 @@ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true }, + "json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", + "dev": true + }, "json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", @@ -5040,3063 +3569,450 @@ "array-includes": "^3.0.3" } }, - "just-extend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.0.2.tgz", - "integrity": "sha512-FrLwOgm+iXrPV+5zDU6Jqu4gCRXbWEQg2O3SKONsWE4w7AXFRkryS53bpWdaL9cNol+AmR3AEYz6kn+o0fCPnw==", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - }, - "klaw": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-2.0.0.tgz", - "integrity": "sha1-WcEo4Nxc5BAgEVEZTuucv4WGUPY=", + "keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", "dev": true, "requires": { - "graceful-fs": "^4.1.9" + "json-buffer": "3.0.0" } }, - "latest-version": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", - "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", + "klaw": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", + "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==", "dev": true, "requires": { - "package-json": "^4.0.0" + "graceful-fs": "^4.1.9" } }, - "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "latest-version": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", "dev": true, "requires": { - "invert-kv": "^2.0.0" + "package-json": "^6.3.0" } }, "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, - "loader-fs-cache": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.1.tgz", - "integrity": "sha1-VuC/CL2XCLJqdltoUJhAyN7J/bw=", - "dev": true, - "requires": { - "find-cache-dir": "^0.1.1", - "mkdirp": "0.5.1" - }, - "dependencies": { - "find-cache-dir": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz", - "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "mkdirp": "^0.5.1", - "pkg-dir": "^1.0.0" - } - }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - }, - "pkg-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", - "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", - "dev": true, - "requires": { - "find-up": "^1.0.0" - } - } - } - }, - "loader-utils": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", - "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^2.0.0", - "json5": "^1.0.1" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - } - } - }, - "localstorage-polyfill": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/localstorage-polyfill/-/localstorage-polyfill-1.0.1.tgz", - "integrity": "sha1-SzCD1LxR0jtBWFN+ZoFhN0E/0xo=", - "dev": true - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", - "dev": true - }, - "lodash.assignin": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz", - "integrity": "sha1-uo31+4QesKPoBEIysOJjqNxqKKI=", - "dev": true - }, - "lodash.bind": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz", - "integrity": "sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU=", - "dev": true - }, - "lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=", - "dev": true - }, - "lodash.filter": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz", - "integrity": "sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4=", - "dev": true - }, - "lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", - "dev": true - }, - "lodash.foreach": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", - "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=", - "dev": true - }, - "lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", - "dev": true - }, - "lodash.map": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", - "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=", - "dev": true - }, - "lodash.merge": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.1.tgz", - "integrity": "sha512-AOYza4+Hf5z1/0Hztxpm2/xiPZgi/cjMqdnKTUWTBSKchJlxXXuUSxCCl8rJlf4g6yww/j6mA8nC8Hw/EZWxKQ==", - "dev": true - }, - "lodash.pick": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", - "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=", - "dev": true - }, - "lodash.reduce": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz", - "integrity": "sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs=", - "dev": true - }, - "lodash.reject": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz", - "integrity": "sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU=", - "dev": true - }, - "lodash.some": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz", - "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=", - "dev": true - }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", - "dev": true - }, - "lolex": { - "version": "2.7.5", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-2.7.5.tgz", - "integrity": "sha512-l9x0+1offnKKIzYVjyXU2SiwhXDLekRzKyhnbyldPHvC7BvLPVpdNUNR2KeMAiCN2D/kLNttZgQD5WjSxuBx3Q==", - "dev": true - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "dev": true - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - }, - "dependencies": { - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - } - } - }, - "magic-string": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.2.tgz", - "integrity": "sha512-iLs9mPjh9IuTtRsqqhNGYcZXGei0Nh/A4xirrsqW7c+QhKVFL2vm7U09ru6cHRD22azaP/wMDgI+HCqbETMTtg==", - "dev": true, - "requires": { - "sourcemap-codec": "^1.4.4" - } - }, - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "dev": true, - "requires": { - "p-defer": "^1.0.0" - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, - "marked": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.19.tgz", - "integrity": "sha512-ea2eGWOqNxPcXv8dyERdSr/6FmzvWwzjMxpfGB/sbMccXoct+xY+YukPD+QTUZwyvK7BZwcr4m21WBOW41pAkg==", - "dev": true - }, - "mem": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.0.0.tgz", - "integrity": "sha512-WQxG/5xYc3tMbYLXoXPm81ET2WDULiU5FxbuIoNbJqLOOI8zehXFdZuiUEgfdrU2mVB1pxBZUGlYORSrpuJreA==", - "dev": true, - "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^1.0.0", - "p-is-promise": "^1.1.0" - } - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "merge2": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.3.0.tgz", - "integrity": "sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw==", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "mime": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.0.tgz", - "integrity": "sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w==", - "dev": true - }, - "mime-db": { - "version": "1.37.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", - "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==", - "dev": true - }, - "mime-types": { - "version": "2.1.21", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", - "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", - "dev": true, - "requires": { - "mime-db": "~1.37.0" - } - }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "minipass": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz", - "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz", - "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==", - "dev": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "mixin-deep": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", - "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - } - } - }, - "mocha": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", - "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", - "dev": true, - "requires": { - "browser-stdout": "1.3.1", - "commander": "2.15.1", - "debug": "3.1.0", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "glob": "7.1.2", - "growl": "1.10.5", - "he": "1.1.1", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "supports-color": "5.4.0" - }, - "dependencies": { - "commander": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", - "dev": true - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "he": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", - "dev": true - }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", - "dev": true - }, - "nan": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.12.1.tgz", - "integrity": "sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==", - "dev": true - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - } - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "needle": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.2.4.tgz", - "integrity": "sha512-HyoqEb4wr/rsoaIDfTH2aVL9nWtQqba2/HvMv+++m8u0dz808MaagKILxtfeSN7QU7nvbQ79zk3vYOJp9zsNEA==", - "dev": true, - "requires": { - "debug": "^2.1.2", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "nise": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/nise/-/nise-1.4.8.tgz", - "integrity": "sha512-kGASVhuL4tlAV0tvA34yJYZIVihrUt/5bDwpp4tTluigxUr2bBlJeDXmivb6NuEdFkqvdv/Ybb9dm16PSKUhtw==", - "dev": true, - "requires": { - "@sinonjs/formatio": "^3.1.0", - "just-extend": "^4.0.2", - "lolex": "^2.3.2", - "path-to-regexp": "^1.7.0", - "text-encoding": "^0.6.4" - }, - "dependencies": { - "@sinonjs/formatio": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-3.1.0.tgz", - "integrity": "sha512-ZAR2bPHOl4Xg6eklUGpsdiIJ4+J1SNag1DHHrG/73Uz/nVwXqjgUtRPLoS+aVyieN9cSbc0E4LsU984tWcDyNg==", - "dev": true, - "requires": { - "@sinonjs/samsam": "^2 || ^3" - } - } - } - }, - "node-cmake": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/node-cmake/-/node-cmake-2.3.2.tgz", - "integrity": "sha1-4PvFSxFAWwdwXk1tQYZa6VrSidA=", - "dev": true, - "requires": { - "nan": "*", - "which": "^1.2.14", - "yargs": "^7.0.2" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true - }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" - } - }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "dev": true, - "requires": { - "invert-kv": "^1.0.0" - } - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - } - }, - "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "dev": true, - "requires": { - "lcid": "^1.0.0" - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, - "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true, - "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "^0.2.0" - } - }, - "which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", - "dev": true - }, - "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", - "dev": true - }, - "yargs": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", - "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", - "dev": true, - "requires": { - "camelcase": "^3.0.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^1.0.2", - "which-module": "^1.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^5.0.0" - } - }, - "yargs-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", - "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", - "dev": true, - "requires": { - "camelcase": "^3.0.0" - } - } - } - }, - "node-fetch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.3.0.tgz", - "integrity": "sha512-MOd8pV3fxENbryESLgVIeaGKrdl+uaYhCSSVkjeOb/31/njTpcis5aWfdqgNlHIrKOLRbMnfPINPOML2CIFeXA==", - "dev": true - }, - "node-modules-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", - "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", - "dev": true - }, - "node-releases": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.3.tgz", - "integrity": "sha512-6VrvH7z6jqqNFY200kdB6HdzkgM96Oaj9v3dqGfgp6mF+cHmU4wyQKZ2/WPDRVoR0Jz9KqbamaBN0ZhdUaysUQ==", - "dev": true, - "requires": { - "semver": "^5.3.0" - } - }, - "nodemon": { - "version": "1.19.4", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-1.19.4.tgz", - "integrity": "sha512-VGPaqQBNk193lrJFotBU8nvWZPqEZY2eIzymy2jjY0fJ9qIsxA0sxQ8ATPl0gZC645gijYEc1jtZvpS8QWzJGQ==", - "dev": true, - "requires": { - "chokidar": "^2.1.8", - "debug": "^3.2.6", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.0.4", - "pstree.remy": "^1.1.7", - "semver": "^5.7.1", - "supports-color": "^5.5.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.2", - "update-notifier": "^2.5.0" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "nopt": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", - "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", - "dev": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "is-builtin-module": "^1.0.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "npm-bundled": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.5.tgz", - "integrity": "sha512-m/e6jgWu8/v5niCUKQi9qQl8QdeEduFA96xHDDzFGqly0OOjI7c+60KM/2sppfnUU9JJagf+zs+yGhqSOFj71g==", - "dev": true - }, - "npm-packlist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.2.0.tgz", - "integrity": "sha512-7Mni4Z8Xkx0/oegoqlcao/JpPCPEMtUvsmB0q7mgvlMinykJLSRTYuFqoQLYgGY8biuxIeiHO+QNJKbCfljewQ==", - "dev": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "requires": { - "path-key": "^2.0.0" - } - }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "dev": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "dev": true, - "requires": { - "boolbase": "~1.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "nwsapi": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.0.9.tgz", - "integrity": "sha512-nlWFSCTYQcHk/6A9FFnfhKc14c3aFhfdNBXgo8Qgi9QTBu/qg3Ww+Uiz9wMzXd1T8GFxPc2QIHB6Qtf2XFryFQ==", - "dev": true - }, - "nyc": { - "version": "12.0.2", - "resolved": "https://registry.npmjs.org/nyc/-/nyc-12.0.2.tgz", - "integrity": "sha1-ikpO1pCWbBHsWH/4fuoMEsl0upk=", - "dev": true, - "requires": { - "archy": "^1.0.0", - "arrify": "^1.0.1", - "caching-transform": "^1.0.0", - "convert-source-map": "^1.5.1", - "debug-log": "^1.0.1", - "default-require-extensions": "^1.0.0", - "find-cache-dir": "^0.1.1", - "find-up": "^2.1.0", - "foreground-child": "^1.5.3", - "glob": "^7.0.6", - "istanbul-lib-coverage": "^1.2.0", - "istanbul-lib-hook": "^1.1.0", - "istanbul-lib-instrument": "^2.1.0", - "istanbul-lib-report": "^1.1.3", - "istanbul-lib-source-maps": "^1.2.5", - "istanbul-reports": "^1.4.1", - "md5-hex": "^1.2.0", - "merge-source-map": "^1.1.0", - "micromatch": "^3.1.10", - "mkdirp": "^0.5.0", - "resolve-from": "^2.0.0", - "rimraf": "^2.6.2", - "signal-exit": "^3.0.1", - "spawn-wrap": "^1.4.2", - "test-exclude": "^4.2.0", - "yargs": "11.1.0", - "yargs-parser": "^8.0.0" - }, - "dependencies": { - "align-text": { - "version": "0.1.4", - "bundled": true, - "dev": true, - "requires": { - "kind-of": "^3.0.2", - "longest": "^1.0.1", - "repeat-string": "^1.5.2" - } - }, - "amdefine": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "ansi-regex": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "append-transform": { - "version": "0.4.0", - "bundled": true, - "dev": true, - "requires": { - "default-require-extensions": "^1.0.0" - } - }, - "archy": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "arr-diff": { - "version": "4.0.0", - "bundled": true, - "dev": true - }, - "arr-flatten": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "bundled": true, - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "bundled": true, - "dev": true - }, - "arrify": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "assign-symbols": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "async": { - "version": "1.5.2", - "bundled": true, - "dev": true - }, - "atob": { - "version": "2.1.1", - "bundled": true, - "dev": true - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "base": { - "version": "0.11.2", - "bundled": true, - "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "kind-of": { - "version": "6.0.2", - "bundled": true, - "dev": true - } - } - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "2.3.2", - "bundled": true, - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "builtin-modules": { - "version": "1.1.1", - "bundled": true, - "dev": true - }, - "cache-base": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, - "caching-transform": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "requires": { - "md5-hex": "^1.2.0", - "mkdirp": "^0.5.1", - "write-file-atomic": "^1.1.4" - } - }, - "camelcase": { - "version": "1.2.1", - "bundled": true, - "dev": true, - "optional": true - }, - "center-align": { - "version": "0.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "align-text": "^0.1.3", - "lazy-cache": "^1.0.3" - } - }, - "class-utils": { - "version": "0.3.6", - "bundled": true, - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "bundled": true, - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "cliui": { - "version": "2.1.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "center-align": "^0.1.1", - "right-align": "^0.1.1", - "wordwrap": "0.0.2" - }, - "dependencies": { - "wordwrap": { - "version": "0.0.2", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "collection-visit": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "commondir": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "component-emitter": { - "version": "1.2.1", - "bundled": true, - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true - }, - "convert-source-map": { - "version": "1.5.1", - "bundled": true, - "dev": true - }, - "copy-descriptor": { - "version": "0.1.1", - "bundled": true, - "dev": true - }, - "cross-spawn": { - "version": "4.0.2", - "bundled": true, - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "which": "^1.2.9" - } - }, - "debug": { - "version": "3.1.0", - "bundled": true, - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "debug-log": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "decamelize": { - "version": "1.2.0", - "bundled": true, - "dev": true - }, - "decode-uri-component": { - "version": "0.2.0", - "bundled": true, - "dev": true - }, - "default-require-extensions": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "strip-bom": "^2.0.0" - } - }, - "define-property": { - "version": "2.0.2", - "bundled": true, - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "kind-of": { - "version": "6.0.2", - "bundled": true, - "dev": true - } - } - }, - "error-ex": { - "version": "1.3.1", - "bundled": true, - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "execa": { - "version": "0.7.0", - "bundled": true, - "dev": true, - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "5.1.0", - "bundled": true, - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - } - } - }, - "expand-brackets": { - "version": "2.1.4", - "bundled": true, - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "bundled": true, - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "bundled": true, - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "extend-shallow": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "extglob": { - "version": "2.0.4", - "bundled": true, - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "kind-of": { - "version": "6.0.2", - "bundled": true, - "dev": true - } - } - }, - "fill-range": { - "version": "4.0.0", - "bundled": true, - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "find-cache-dir": { - "version": "0.1.1", - "bundled": true, - "dev": true, - "requires": { - "commondir": "^1.0.1", - "mkdirp": "^0.5.1", - "pkg-dir": "^1.0.0" - } - }, - "find-up": { - "version": "2.1.0", - "bundled": true, - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "for-in": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "foreground-child": { - "version": "1.5.6", - "bundled": true, - "dev": true, - "requires": { - "cross-spawn": "^4", - "signal-exit": "^3.0.0" - } - }, - "fragment-cache": { - "version": "0.2.1", - "bundled": true, - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "get-caller-file": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "get-stream": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "get-value": { - "version": "2.0.6", - "bundled": true, - "dev": true - }, - "glob": { - "version": "7.1.2", - "bundled": true, - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "graceful-fs": { - "version": "4.1.11", - "bundled": true, - "dev": true - }, - "handlebars": { - "version": "4.0.11", - "bundled": true, - "dev": true, - "requires": { - "async": "^1.4.0", - "optimist": "^0.6.1", - "source-map": "^0.4.4", - "uglify-js": "^2.6" - }, - "dependencies": { - "source-map": { - "version": "0.4.4", - "bundled": true, - "dev": true, - "requires": { - "amdefine": ">=0.0.4" - } - } - } - }, - "has-value": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "kind-of": { - "version": "4.0.0", - "bundled": true, - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "hosted-git-info": { - "version": "2.6.0", - "bundled": true, - "dev": true - }, - "imurmurhash": { - "version": "0.1.4", - "bundled": true, - "dev": true - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "dev": true - }, - "invert-kv": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "bundled": true, - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-arrayish": { - "version": "0.2.1", - "bundled": true, - "dev": true - }, - "is-buffer": { - "version": "1.1.6", - "bundled": true, - "dev": true - }, - "is-builtin-module": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "builtin-modules": "^1.0.0" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "bundled": true, - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-descriptor": { - "version": "0.1.6", - "bundled": true, - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "bundled": true, - "dev": true - } - } - }, - "is-extendable": { - "version": "0.1.1", - "bundled": true, - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "is-number": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-odd": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "is-number": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "bundled": true, - "dev": true - } - } - }, - "is-plain-object": { - "version": "2.0.4", - "bundled": true, - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "is-stream": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "is-utf8": { - "version": "0.2.1", - "bundled": true, - "dev": true - }, - "is-windows": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "isexe": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "isobject": { - "version": "3.0.1", - "bundled": true, - "dev": true - }, - "istanbul-lib-coverage": { - "version": "1.2.0", - "bundled": true, - "dev": true - }, - "istanbul-lib-hook": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "requires": { - "append-transform": "^0.4.0" - } - }, - "istanbul-lib-report": { - "version": "1.1.3", - "bundled": true, - "dev": true, - "requires": { - "istanbul-lib-coverage": "^1.1.2", - "mkdirp": "^0.5.1", - "path-parse": "^1.0.5", - "supports-color": "^3.1.2" - }, - "dependencies": { - "has-flag": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "supports-color": { - "version": "3.2.3", - "bundled": true, - "dev": true, - "requires": { - "has-flag": "^1.0.0" - } - } - } - }, - "istanbul-lib-source-maps": { - "version": "1.2.5", - "bundled": true, - "dev": true, - "requires": { - "debug": "^3.1.0", - "istanbul-lib-coverage": "^1.2.0", - "mkdirp": "^0.5.1", - "rimraf": "^2.6.1", - "source-map": "^0.5.3" - } - }, - "istanbul-reports": { - "version": "1.4.1", - "bundled": true, - "dev": true, - "requires": { - "handlebars": "^4.0.3" - } - }, - "kind-of": { - "version": "3.2.2", - "bundled": true, - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - }, - "lazy-cache": { - "version": "1.0.4", - "bundled": true, - "dev": true, - "optional": true - }, - "lcid": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "invert-kv": "^1.0.0" - } - }, - "load-json-file": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "dependencies": { - "path-exists": { - "version": "3.0.0", - "bundled": true, - "dev": true - } - } - }, - "longest": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "lru-cache": { - "version": "4.1.3", - "bundled": true, - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "map-cache": { - "version": "0.2.2", - "bundled": true, - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, - "md5-hex": { - "version": "1.3.0", - "bundled": true, - "dev": true, - "requires": { - "md5-o-matic": "^0.1.1" - } - }, - "md5-o-matic": { - "version": "0.1.1", - "bundled": true, - "dev": true - }, - "mem": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "requires": { - "mimic-fn": "^1.0.0" - } - }, - "merge-source-map": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "requires": { - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "bundled": true, - "dev": true - } - } - }, - "micromatch": { - "version": "3.1.10", - "bundled": true, - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "6.0.2", - "bundled": true, - "dev": true - } - } - }, - "mimic-fn": { - "version": "1.2.0", - "bundled": true, - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "dev": true - }, - "mixin-deep": { - "version": "1.3.1", - "bundled": true, - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "nanomatch": { - "version": "1.2.9", - "bundled": true, - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-odd": "^2.0.0", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "kind-of": { - "version": "6.0.2", - "bundled": true, - "dev": true - } - } - }, - "normalize-package-data": { - "version": "2.4.0", - "bundled": true, - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "is-builtin-module": "^1.0.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "npm-run-path": { - "version": "2.0.2", - "bundled": true, - "dev": true, - "requires": { - "path-key": "^2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true - }, - "object-copy": { - "version": "0.1.0", - "bundled": true, - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "bundled": true, - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "object-visit": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "requires": { - "isobject": "^3.0.0" - } - }, - "object.pick": { - "version": "1.3.0", - "bundled": true, - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "optimist": { - "version": "0.6.1", - "bundled": true, - "dev": true, - "requires": { - "minimist": "~0.0.1", - "wordwrap": "~0.0.2" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "os-locale": { - "version": "2.1.0", - "bundled": true, - "dev": true, - "requires": { - "execa": "^0.7.0", - "lcid": "^1.0.0", - "mem": "^1.1.0" - } - }, - "p-finally": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "p-limit": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "parse-json": { - "version": "2.2.0", - "bundled": true, - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "pascalcase": { - "version": "0.1.1", - "bundled": true, - "dev": true - }, - "path-exists": { - "version": "2.1.0", - "bundled": true, - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "path-key": { - "version": "2.0.1", - "bundled": true, - "dev": true - }, - "path-parse": { - "version": "1.0.5", - "bundled": true, - "dev": true - }, - "path-type": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "pify": { - "version": "2.3.0", - "bundled": true, - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "bundled": true, - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "pinkie": "^2.0.0" - } - }, - "pkg-dir": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "find-up": "^1.0.0" - }, - "dependencies": { - "find-up": { - "version": "1.1.2", - "bundled": true, - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - } - } - }, - "posix-character-classes": { - "version": "0.1.1", - "bundled": true, - "dev": true - }, - "pseudomap": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "read-pkg": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - } - }, - "read-pkg-up": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - }, - "dependencies": { - "find-up": { - "version": "1.1.2", - "bundled": true, - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - } - } - }, - "regex-not": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "repeat-element": { - "version": "1.1.2", - "bundled": true, - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "bundled": true, - "dev": true - }, - "require-directory": { - "version": "2.1.1", - "bundled": true, - "dev": true - }, - "require-main-filename": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "resolve-from": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "resolve-url": { - "version": "0.2.1", - "bundled": true, - "dev": true - }, - "ret": { - "version": "0.1.15", - "bundled": true, - "dev": true - }, - "right-align": { - "version": "0.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "align-text": "^0.1.1" - } - }, - "rimraf": { - "version": "2.6.2", - "bundled": true, - "dev": true, - "requires": { - "glob": "^7.0.5" - } - }, - "safe-regex": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, - "semver": { - "version": "5.5.0", - "bundled": true, - "dev": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "set-value": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "shebang-command": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true - }, - "slide": { - "version": "1.1.6", - "bundled": true, - "dev": true - }, - "snapdragon": { - "version": "0.8.2", - "bundled": true, - "dev": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "bundled": true, - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "bundled": true, - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "kind-of": { - "version": "6.0.2", - "bundled": true, - "dev": true - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "requires": { - "kind-of": "^3.2.0" - } - }, - "source-map": { - "version": "0.5.7", - "bundled": true, - "dev": true - }, - "source-map-resolve": { - "version": "0.5.2", - "bundled": true, + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "linkify-it": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz", + "integrity": "sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==", + "dev": true, + "requires": { + "uc.micro": "^1.0.1" + } + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "dev": true, "requires": { - "atob": "^2.1.1", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" + "error-ex": "^1.2.0" } }, - "source-map-url": { - "version": "0.4.0", - "bundled": true, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true - }, - "spawn-wrap": { - "version": "1.4.2", - "bundled": true, + } + } + }, + "loader-fs-cache": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.3.tgz", + "integrity": "sha512-ldcgZpjNJj71n+2Mf6yetz+c9bM4xpKtNds4LbqXzU/PTdeAX0g3ytnU1AJMEcTk2Lex4Smpe3Q/eCTsvUBxbA==", + "dev": true, + "requires": { + "find-cache-dir": "^0.1.1", + "mkdirp": "^0.5.1" + }, + "dependencies": { + "find-cache-dir": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz", + "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=", "dev": true, "requires": { - "foreground-child": "^1.5.6", - "mkdirp": "^0.5.0", - "os-homedir": "^1.0.1", - "rimraf": "^2.6.2", - "signal-exit": "^3.0.2", - "which": "^1.3.0" + "commondir": "^1.0.1", + "mkdirp": "^0.5.1", + "pkg-dir": "^1.0.0" } }, - "spdx-correct": { - "version": "3.0.0", - "bundled": true, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", "dev": true, "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" } }, - "spdx-exceptions": { + "path-exists": { "version": "2.1.0", - "bundled": true, - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "split-string": { - "version": "3.1.0", - "bundled": true, - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "static-extend": { - "version": "0.1.2", - "bundled": true, - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "bundled": true, - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "string-width": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "strip-bom": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "is-utf8": "^0.2.0" - } - }, - "strip-eof": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "test-exclude": { - "version": "4.2.1", - "bundled": true, - "dev": true, - "requires": { - "arrify": "^1.0.1", - "micromatch": "^3.1.8", - "object-assign": "^4.1.0", - "read-pkg-up": "^1.0.1", - "require-main-filename": "^1.0.1" - } - }, - "to-object-path": { - "version": "0.3.0", - "bundled": true, - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "to-regex": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "uglify-js": { - "version": "2.8.29", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "source-map": "~0.5.1", - "uglify-to-browserify": "~1.0.0", - "yargs": "~3.10.0" - }, - "dependencies": { - "yargs": { - "version": "3.10.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "camelcase": "^1.0.2", - "cliui": "^2.1.0", - "decamelize": "^1.0.0", - "window-size": "0.1.0" - } - } - } - }, - "uglify-to-browserify": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "union-value": { - "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", "dev": true, "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^0.4.3" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "set-value": { - "version": "0.4.3", - "bundled": true, - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.1", - "to-object-path": "^0.3.0" - } - } + "pinkie-promise": "^2.0.0" } }, - "unset-value": { + "pkg-dir": { "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "bundled": true, - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "bundled": true, - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "bundled": true, - "dev": true - } - } - }, - "urix": { - "version": "0.1.0", - "bundled": true, - "dev": true - }, - "use": { - "version": "3.1.0", - "bundled": true, - "dev": true, - "requires": { - "kind-of": "^6.0.2" - }, - "dependencies": { - "kind-of": { - "version": "6.0.2", - "bundled": true, - "dev": true - } - } - }, - "validate-npm-package-license": { - "version": "3.0.3", - "bundled": true, - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "which": { - "version": "1.3.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", + "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", "dev": true, "requires": { - "isexe": "^2.0.0" + "find-up": "^1.0.0" } - }, - "which-module": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "window-size": { - "version": "0.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "wordwrap": { - "version": "0.0.3", - "bundled": true, - "dev": true - }, - "wrap-ansi": { - "version": "2.1.0", - "bundled": true, + } + } + }, + "loader-utils": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", + "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^2.0.0", + "json5": "^1.0.1" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", "dev": true, "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } + "minimist": "^1.2.0" } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, + } + } + }, + "localstorage-polyfill": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/localstorage-polyfill/-/localstorage-polyfill-1.0.1.tgz", + "integrity": "sha1-SzCD1LxR0jtBWFN+ZoFhN0E/0xo=", + "dev": true + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + }, + "lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "dev": true + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true + }, + "magic-string": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.2.tgz", + "integrity": "sha512-iLs9mPjh9IuTtRsqqhNGYcZXGei0Nh/A4xirrsqW7c+QhKVFL2vm7U09ru6cHRD22azaP/wMDgI+HCqbETMTtg==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.4" + } + }, + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "markdown-it": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-10.0.0.tgz", + "integrity": "sha512-YWOP1j7UbDNz+TumYP1kpwnP0aEa711cJjrAQrzd0UXlbJfc5aAq0F/PZHjiioqDC1NKgvIMX+o+9Bk7yuM2dg==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "entities": "~2.0.0", + "linkify-it": "^2.0.0", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + }, + "dependencies": { + "entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.2.tgz", + "integrity": "sha512-dmD3AvJQBUjKpcNkoqr+x+IF0SdRtPz9Vk0uTy4yWqga9ibB6s4v++QFWNohjiUGoMlF552ZvNyXDxz5iW0qmw==", "dev": true - }, - "write-file-atomic": { - "version": "1.3.4", - "bundled": true, + } + } + }, + "markdown-it-anchor": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-5.3.0.tgz", + "integrity": "sha512-/V1MnLL/rgJ3jkMWo84UR+K+jF1cxNG1a+KwqeXqTIJ+jtA8aWSHuigx8lTzauiIjBDbwF3NcWQMotd0Dm39jA==", + "dev": true + }, + "marked": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/marked/-/marked-0.8.2.tgz", + "integrity": "sha512-EGwzEeCcLniFX51DhTpmTom+dSA/MG/OBUDjnWtHbEnjAH180VzUeAw+oE4+Zv+CoYBWyRlYOTR0N8SO9R1PVw==", + "dev": true + }, + "mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=", + "dev": true + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "merge2": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.3.0.tgz", + "integrity": "sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw==", + "dev": true + }, + "mime": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.0.tgz", + "integrity": "sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w==", + "dev": true + }, + "mime-db": { + "version": "1.37.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", + "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==", + "dev": true + }, + "mime-types": { + "version": "2.1.21", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", + "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", + "dev": true, + "requires": { + "mime-db": "~1.37.0" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "dev": true + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node-modules-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", + "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", + "dev": true + }, + "node-releases": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.3.tgz", + "integrity": "sha512-6VrvH7z6jqqNFY200kdB6HdzkgM96Oaj9v3dqGfgp6mF+cHmU4wyQKZ2/WPDRVoR0Jz9KqbamaBN0ZhdUaysUQ==", + "dev": true, + "requires": { + "semver": "^5.3.0" + } + }, + "nodemon": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.4.tgz", + "integrity": "sha512-Ltced+hIfTmaS28Zjv1BM552oQ3dbwPqI4+zI0SLgq+wpJhSyqgYude/aZa/3i31VCQWMfXJVxvu86abcam3uQ==", + "dev": true, + "requires": { + "chokidar": "^3.2.2", + "debug": "^3.2.6", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.0.4", + "pstree.remy": "^1.1.7", + "semver": "^5.7.1", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.2", + "update-notifier": "^4.0.0" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "dev": true, "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "slide": "^1.1.5" + "ms": "^2.1.1" } }, - "y18n": { - "version": "3.2.1", - "bundled": true, - "dev": true - }, - "yallist": { + "ms": { "version": "2.1.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "yargs": { - "version": "11.1.0", - "bundled": true, - "dev": true, - "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.1.1", - "find-up": "^2.1.0", - "get-caller-file": "^1.0.1", - "os-locale": "^2.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^9.0.2" - }, - "dependencies": { - "camelcase": { - "version": "4.1.0", - "bundled": true, - "dev": true - }, - "cliui": { - "version": "4.1.0", - "bundled": true, - "dev": true, - "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" - } - }, - "yargs-parser": { - "version": "9.0.2", - "bundled": true, - "dev": true, - "requires": { - "camelcase": "^4.1.0" - } - } - } - }, - "yargs-parser": { - "version": "8.1.0", - "bundled": true, - "dev": true, - "requires": { - "camelcase": "^4.1.0" - }, - "dependencies": { - "camelcase": { - "version": "4.1.0", - "bundled": true, - "dev": true - } - } + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true } } }, + "nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "dev": true, + "requires": { + "abbrev": "1" + } + }, + "normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "is-builtin-module": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "normalize-url": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", + "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", + "dev": true + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "nwsapi": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.0.9.tgz", + "integrity": "sha512-nlWFSCTYQcHk/6A9FFnfhKc14c3aFhfdNBXgo8Qgi9QTBu/qg3Ww+Uiz9wMzXd1T8GFxPc2QIHB6Qtf2XFryFQ==", + "dev": true + }, "oauth-sign": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", @@ -8114,37 +4030,6 @@ "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=" }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "object-hash": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.1.tgz", @@ -8157,15 +4042,6 @@ "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==", "dev": true }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "requires": { - "isobject": "^3.0.0" - } - }, "object.assign": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", @@ -8200,15 +4076,6 @@ "es-abstract": "^1.5.1" } }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, "on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -8256,43 +4123,16 @@ "wordwrap": "~1.0.0" } }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true - }, - "os-locale": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", - "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", - "dev": true, - "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" - } - }, "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true }, - "osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "dev": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", + "p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", "dev": true }, "p-finally": { @@ -8301,12 +4141,6 @@ "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", "dev": true }, - "p-is-promise": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", - "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=", - "dev": true - }, "p-limit": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", @@ -8338,15 +4172,23 @@ "dev": true }, "package-json": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", - "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", "dev": true, "requires": { - "got": "^6.7.1", - "registry-auth-token": "^3.0.1", - "registry-url": "^3.0.3", - "semver": "^5.1.0" + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "parent-module": { @@ -8396,18 +4238,6 @@ "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", "dev": true }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true - }, "path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", @@ -8438,23 +4268,6 @@ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", "dev": true }, - "path-to-regexp": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz", - "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=", - "dev": true, - "requires": { - "isarray": "0.0.1" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - } - } - }, "path-type": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", @@ -8472,12 +4285,6 @@ } } }, - "pathval": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", - "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", - "dev": true - }, "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", @@ -8550,12 +4357,6 @@ "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", "dev": true }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, "prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", @@ -8563,21 +4364,15 @@ "dev": true }, "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", "dev": true }, "private": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", "dev": true }, "progress": { @@ -8586,21 +4381,6 @@ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true }, - "promise": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.0.2.tgz", - "integrity": "sha512-EIyzM39FpVOMbqgzEHhxdrEhtOSDOtjMZQ0M6iVfCE+kWNgCkAyOdnuCWqfmflylftfadU6FkiMgHZA2kUzwRw==", - "dev": true, - "requires": { - "asap": "~2.0.6" - } - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true - }, "psl": { "version": "1.1.31", "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", @@ -8608,9 +4388,9 @@ "dev": true }, "pstree.remy": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.7.tgz", - "integrity": "sha512-xsMgrUwRpuGskEzBFkH8NmTimbZ5PcPup0LA8JJkHIm2IMUbQcpo3yeLNWVrufEYjh8YwtSVh0xz6UeWc5Oh5A==", + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", "dev": true }, "pump": { @@ -8629,6 +4409,15 @@ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true }, + "pupa": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.0.1.tgz", + "integrity": "sha512-hEJH0s8PXLY/cdXh66tNEQGndDrIKNqNC5xmrysZy3i5C3oEoLna7YAOad+7u125+zH1HNXUmGEkrhb3c2VriA==", + "dev": true, + "requires": { + "escape-goat": "^2.0.0" + } + }, "qs": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", @@ -8687,38 +4476,13 @@ } } }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - } - } - }, "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz", + "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==", "dev": true, "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" + "picomatch": "^2.2.1" } }, "regenerate": { @@ -8750,16 +4514,6 @@ "private": "^0.1.6" } }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, "regexpp": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", @@ -8781,22 +4535,21 @@ } }, "registry-auth-token": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz", - "integrity": "sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.1.1.tgz", + "integrity": "sha512-9bKS7nTl9+/A1s7tnPeGrUpRcVY+LUh7bfFgzpndALdPfXQBfQV77rQVtqgUV3ti4vc/Ik81Ex8UJDWDQ12zQA==", "dev": true, "requires": { - "rc": "^1.1.6", - "safe-buffer": "^5.0.1" + "rc": "^1.2.8" } }, "registry-url": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", - "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", "dev": true, "requires": { - "rc": "^1.0.1" + "rc": "^1.2.8" } }, "regjsgen": { @@ -8822,24 +4575,6 @@ } } }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, "request": { "version": "2.88.0", "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", @@ -8906,33 +4641,13 @@ "tough-cookie": ">=2.3.3" } }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "dev": true - }, "requizzle": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.1.tgz", - "integrity": "sha1-aUPDUwxNmn5G8c3dUcFY/GcM294=", + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.3.tgz", + "integrity": "sha512-YanoyJjykPxGHii0fZP0uUPEXpvqfBDxWV7s6GKAiiOsiqhX6vHNyW3Qzdmqp/iq/ExbhaGbVrjB4ruEVSM4GQ==", "dev": true, "requires": { - "underscore": "~1.6.0" - }, - "dependencies": { - "underscore": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", - "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=", - "dev": true - } + "lodash": "^4.17.14" } }, "resolve": { @@ -8950,11 +4665,14 @@ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true + "responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dev": true, + "requires": { + "lowercase-keys": "^1.0.0" + } }, "restore-cursor": { "version": "2.0.0", @@ -8966,12 +4684,6 @@ "signal-exit": "^3.0.2" } }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, "reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -8999,9 +4711,9 @@ }, "dependencies": { "acorn": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.0.tgz", - "integrity": "sha512-MW/FjM+IvU9CgBzjO3UIPCE2pyEwUsoFl+VGdczOPEdxfGFjuKny/gN54mOuX7Qxmb9Rg9MCn2oKiSUeW+pjrw==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", + "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", "dev": true } } @@ -9145,49 +4857,53 @@ } }, "rollup-plugin-terser": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-5.1.2.tgz", - "integrity": "sha512-sWKBCOS+vUkRtHtEiJPAf+WnBqk/C402fBD9AVHxSIXMqjsY7MnYWKYEUqGixtr0c8+1DjzUEPlNgOYQPVrS1g==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-5.3.0.tgz", + "integrity": "sha512-XGMJihTIO3eIBsVGq7jiNYOdDMb3pVxuzY0uhOE/FM4x/u9nQgr3+McsjzqBn3QfHIpNSZmFnpoKAwHBEcsT7g==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "jest-worker": "^24.6.0", - "rollup-pluginutils": "^2.8.1", - "serialize-javascript": "^1.7.0", - "terser": "^4.1.0" + "@babel/code-frame": "^7.5.5", + "jest-worker": "^24.9.0", + "rollup-pluginutils": "^2.8.2", + "serialize-javascript": "^2.1.2", + "terser": "^4.6.2" }, "dependencies": { - "estree-walker": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", - "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", - "dev": true + "@babel/code-frame": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", + "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.8.3" + } }, - "rollup-pluginutils": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", - "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", + "@babel/highlight": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz", + "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==", "dev": true, "requires": { - "estree-walker": "^0.6.1" + "@babel/helper-validator-identifier": "^7.9.0", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" } } } }, "rollup-pluginutils": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.4.1.tgz", - "integrity": "sha512-wesMQ9/172IJDIW/lYWm0vW0LiKe5Ekjws481R7z9WTRtmO59cqyM/2uUlxvf6yzm/fElFmHUobeQOYz46dZJw==", + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", + "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", "dev": true, "requires": { - "estree-walker": "^0.6.0", - "micromatch": "^3.1.10" + "estree-walker": "^0.6.1" }, "dependencies": { "estree-walker": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.0.tgz", - "integrity": "sha512-peq1RfVAVzr3PU/jL31RaOjUKLoZJpObQWJJ+LgfcxDUifyLZ1RjPQZTl0pzj2uJ45b7A7XpyppXvxdEqzo4rw==", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", "dev": true } } @@ -9236,33 +4952,12 @@ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, - "samsam": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/samsam/-/samsam-1.3.0.tgz", - "integrity": "sha512-1HwIYD/8UlOtFS3QO3w7ey+SdSDFE4HRNLZoZRYVQefrOY3l17epswImeB1ijgJFQJodIaHcwkp3r/myBjFVbg==", - "dev": true - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, "saxes": { "version": "3.1.6", "resolved": "https://registry.npmjs.org/saxes/-/saxes-3.1.6.tgz", @@ -9290,12 +4985,20 @@ "dev": true }, "semver-diff": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", - "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", "dev": true, "requires": { - "semver": "^5.0.3" + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "send": { @@ -9343,9 +5046,9 @@ } }, "serialize-javascript": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.9.1.tgz", - "integrity": "sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-2.1.2.tgz", + "integrity": "sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ==", "dev": true }, "serve-static": { @@ -9360,35 +5063,6 @@ "send": "0.16.2" } }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "set-value": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", - "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, "setprototypeof": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", @@ -9416,40 +5090,6 @@ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", "dev": true }, - "sinon": { - "version": "6.3.5", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-6.3.5.tgz", - "integrity": "sha512-xgoZ2gKjyVRcF08RrIQc+srnSyY1JDJtxu3Nsz07j1ffjgXoY6uPLf/qja6nDBZgzYYEovVkFryw2+KiZz11xQ==", - "dev": true, - "requires": { - "@sinonjs/commons": "^1.0.2", - "@sinonjs/formatio": "^3.0.0", - "@sinonjs/samsam": "^2.1.2", - "diff": "^3.5.0", - "lodash.get": "^4.4.2", - "lolex": "^2.7.5", - "nise": "^1.4.5", - "supports-color": "^5.5.0", - "type-detect": "^4.0.8" - }, - "dependencies": { - "@sinonjs/formatio": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-3.1.0.tgz", - "integrity": "sha512-ZAR2bPHOl4Xg6eklUGpsdiIJ4+J1SNag1DHHrG/73Uz/nVwXqjgUtRPLoS+aVyieN9cSbc0E4LsU984tWcDyNg==", - "dev": true, - "requires": { - "@sinonjs/samsam": "^2 || ^3" - } - }, - "@sinonjs/samsam": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-2.1.3.tgz", - "integrity": "sha512-8zNeBkSKhU9a5cRNbpCKau2WWPfan+Q2zDlcXvXyhn9EsMqgYs4qzo0XHNVlXC6ABQL8fT6nV+zzo5RTHJzyXw==", - "dev": true - } - } - }, "slash": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", @@ -9467,122 +5107,6 @@ "is-fullwidth-code-point": "^2.0.0" } }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "socket.io-client": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.2.0.tgz", @@ -9620,19 +5144,6 @@ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true }, - "source-map-resolve": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", - "dev": true, - "requires": { - "atob": "^2.1.1", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, "source-map-support": { "version": "0.5.10", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.10.tgz", @@ -9651,24 +5162,12 @@ } } }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true - }, "sourcemap-codec": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.4.tgz", "integrity": "sha512-CYAPYdBu34781kLHkaW3m6b/uUSyMOC2R61gcYMWooeuaGtjof86ZA/8T+qVPPt7np1085CR9hmMGrySwEc8Xg==", "dev": true }, - "spawn-command": { - "version": "0.0.2-1", - "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", - "integrity": "sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A=", - "dev": true - }, "spdx-correct": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", @@ -9701,15 +5200,6 @@ "integrity": "sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g==", "dev": true }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -9733,27 +5223,6 @@ "tweetnacl": "~0.14.0" } }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, "statuses": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", @@ -9776,15 +5245,6 @@ "strip-ansi": "^4.0.0" } }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", @@ -9834,79 +5294,27 @@ "dev": true, "requires": { "ajv": "^6.6.1", - "lodash": "^4.17.11", - "slice-ansi": "2.0.0", - "string-width": "^2.1.1" - } - }, - "taffydb": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/taffydb/-/taffydb-2.6.2.tgz", - "integrity": "sha1-fLy2S1oUG2ou/CxdLGe04VCyomg=", - "dev": true - }, - "tar": { - "version": "4.4.8", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.8.tgz", - "integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==", - "dev": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.3.4", - "minizlib": "^1.1.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.2" - } - }, - "term-size": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", - "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", - "dev": true, - "requires": { - "execa": "^0.7.0" - }, - "dependencies": { - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", - "dev": true, - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - } + "lodash": "^4.17.11", + "slice-ansi": "2.0.0", + "string-width": "^2.1.1" } }, + "taffydb": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/taffydb/-/taffydb-2.6.2.tgz", + "integrity": "sha1-fLy2S1oUG2ou/CxdLGe04VCyomg=", + "dev": true + }, + "term-size": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.0.tgz", + "integrity": "sha512-a6sumDlzyHVJWb8+YofY4TW112G6p2FCPEAFk+59gIYHv3XHRhm9ltVQ9kli4hNWeQBwSpe8cRN25x0ROunMOw==", + "dev": true + }, "terser": { - "version": "4.3.9", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.3.9.tgz", - "integrity": "sha512-NFGMpHjlzmyOtPL+fDw3G7+6Ueh/sz4mkaUYa4lJCxOPTNzd0Uj0aZJOmsDYoSQyfuVoWDMSWTPU3huyOm2zdA==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.7.0.tgz", + "integrity": "sha512-Lfb0RiZcjRDXCC3OSHJpEkxJ9Qeqs6mp2v4jf2MHfy8vGERmVDuvjXdd/EnP5Deme5F2yBRBymKmKHCBg2echw==", "dev": true, "requires": { "commander": "^2.20.0", @@ -9927,9 +5335,9 @@ "dev": true }, "source-map-support": { - "version": "0.5.16", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz", - "integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==", + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", "dev": true, "requires": { "buffer-from": "^1.0.0", @@ -9938,12 +5346,6 @@ } } }, - "text-encoding": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/text-encoding/-/text-encoding-0.6.4.tgz", - "integrity": "sha1-45mpgiV6J22uQou5KEXLcb3CbRk=", - "dev": true - }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -9956,12 +5358,6 @@ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, - "timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", - "dev": true - }, "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -9982,46 +5378,19 @@ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", "dev": true }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } + "to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "dev": true }, "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" + "is-number": "^7.0.0" } }, "touch": { @@ -10031,17 +5400,6 @@ "dev": true, "requires": { "nopt": "~1.0.10" - }, - "dependencies": { - "nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", - "dev": true, - "requires": { - "abbrev": "1" - } - } } }, "tough-cookie": { @@ -10063,12 +5421,6 @@ "punycode": "^2.1.0" } }, - "tree-kill": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.1.tgz", - "integrity": "sha512-4hjqbObwlh2dLyW4tcz0Ymw0ggoaVDMveUB9w8kFSQScdRLo0gxO9J7WFcUBo+W3C1TLdFIEwNOWebgZZ0RH9Q==", - "dev": true - }, "trim-right": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", @@ -10081,15 +5433,6 @@ "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", "dev": true }, - "tui-jsdoc-template": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tui-jsdoc-template/-/tui-jsdoc-template-1.2.2.tgz", - "integrity": "sha512-oqw0IYaot86VJ2owKBozJnilgta0Z55x8r9PeHj7vb+jDoSvJGRUQUcgs56SZh9HE20fx54Pe75p84X85/ygLA==", - "dev": true, - "requires": { - "cheerio": "^0.22.0" - } - }, "tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", @@ -10114,16 +5457,31 @@ "prelude-ls": "~1.1.2" } }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", "dev": true }, "undefsafe": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.2.tgz", - "integrity": "sha1-Il9rngM3Zj4Njnz9aG/Cg2zKznY=", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.3.tgz", + "integrity": "sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A==", "dev": true, "requires": { "debug": "^2.2.0" @@ -10141,28 +5499,11 @@ } }, "underscore": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", - "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=", + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.10.2.tgz", + "integrity": "sha512-N4P+Q/BuyuEKFJ43B9gYuOj4TQUHXX+j2FqguVOpjkssLUUrnJofCcBccJSCoeturDoZU6GorDTHSvUDlSQbTg==", "dev": true }, - "underscore-contrib": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/underscore-contrib/-/underscore-contrib-0.3.0.tgz", - "integrity": "sha1-ZltmwkeD+PorGMn4y7Dix9SMJsc=", - "dev": true, - "requires": { - "underscore": "1.6.0" - }, - "dependencies": { - "underscore": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", - "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=", - "dev": true - } - } - }, "unicode-canonical-property-names-ecmascript": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", @@ -10191,48 +5532,13 @@ "integrity": "sha512-2WSLa6OdYd2ng8oqiGIWnJqyFArvhn+5vgx5GTxMbUYjCYKUcuKS62YLFF0R/BDGlB1yzXjQOLtPAfHsgirEpg==", "dev": true }, - "union-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", - "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^0.4.3" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "set-value": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", - "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.1", - "to-object-path": "^0.3.0" - } - } - } - }, "unique-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", - "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", "dev": true, "requires": { - "crypto-random-string": "^1.0.0" + "crypto-random-string": "^2.0.0" } }, "universalify": { @@ -10247,95 +5553,75 @@ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", "dev": true }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "update-notifier": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.0.tgz", + "integrity": "sha512-w3doE1qtI0/ZmgeoDoARmI5fjDoT93IfKgEGqm26dGUOh8oNpaSTsGNdYRN/SjOuo10jcJGwkEL3mroKzktkew==", "dev": true, "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" + "boxen": "^4.2.0", + "chalk": "^3.0.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.3.1", + "is-npm": "^4.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.0.0", + "pupa": "^2.0.1", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" }, "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", "dev": true, "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" } }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true - } - } - }, - "unzip-response": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", - "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=", - "dev": true - }, - "upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true - }, - "update-notifier": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", - "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", - "dev": true, - "requires": { - "boxen": "^1.2.1", - "chalk": "^2.0.1", - "configstore": "^3.0.0", - "import-lazy": "^2.1.0", - "is-ci": "^1.0.10", - "is-installed-globally": "^0.1.0", - "is-npm": "^1.0.0", - "latest-version": "^3.0.0", - "semver-diff": "^2.0.0", - "xdg-basedir": "^3.0.0" - }, - "dependencies": { - "ci-info": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", - "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "is-ci": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", - "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", "dev": true, "requires": { - "ci-info": "^1.5.0" + "has-flag": "^4.0.0" } } } @@ -10349,33 +5635,15 @@ "punycode": "^2.1.0" } }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, "url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", "dev": true, "requires": { - "prepend-http": "^1.0.1" + "prepend-http": "^2.0.0" } }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, "util.promisify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", @@ -10489,83 +5757,61 @@ "isexe": "^2.0.0" } }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dev": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, "widest-line": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", - "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", - "dev": true, - "requires": { - "string-width": "^2.1.1" - } - }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", "dev": true, "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" + "string-width": "^4.0.0" }, "dependencies": { "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true }, "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", "dev": true, "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" } }, "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "^5.0.0" } } } }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -10582,45 +5828,15 @@ } }, "write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", "dev": true, "requires": { - "graceful-fs": "^4.1.11", "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "wrtc": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/wrtc/-/wrtc-0.3.4.tgz", - "integrity": "sha512-KTFf+86EBxQvlQfgscE8R57tldyo3MoYhAX+tMasmiVdH5dRpSp55yxsyatyuY/baNjwm0/uQbPk7wZ2MCGuyg==", - "dev": true, - "requires": { - "nan": "^2.3.2", - "node-cmake": "2.3.2", - "node-pre-gyp": "0.11.x" - }, - "dependencies": { - "node-pre-gyp": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz", - "integrity": "sha512-TwWAOZb0j7e9eGaf9esRx3ZcLaE5tQ2lvYy1pb5IAaG1a2e2Kv5Lms1Y4hpj+ciXJRofIxxlt5haeQ/2ANeE0Q==", - "dev": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - } - } + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" } }, "ws": { @@ -10632,9 +5848,9 @@ } }, "xdg-basedir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", - "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", "dev": true }, "xml-name-validator": { @@ -10650,9 +5866,9 @@ "dev": true }, "xmlcreate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-1.0.2.tgz", - "integrity": "sha1-+mv3YqYKQT+z3Y9LA8WyaSONMI8=", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.3.tgz", + "integrity": "sha512-HgS+X6zAztGa9zIK3Y3LXuJes33Lz9x+YyTxgrkIdabu2vqcGOWwdfCpf1hWLRrd553wd4QCDf6BBO6FfdsRiQ==", "dev": true }, "xmlhttprequest-ssl": { @@ -10660,93 +5876,6 @@ "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=" }, - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", - "dev": true - }, - "yallist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", - "dev": true - }, - "yargs": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", - "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", - "dev": true, - "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.2.0", - "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1 || ^4.0.0", - "yargs-parser": "^11.1.1" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.1.0.tgz", - "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", - "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", - "dev": true - } - } - }, - "yargs-parser": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", - "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - }, "yeast": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", diff --git a/package.json b/package.json index aa7cbd912..1a1864ee3 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "main": "src/index.js", "module": "src/index.js", "repository": "Temasys/SkylinkJS", + "license": "Apache-2.0", "licenses": [ { "type": "Apache", @@ -20,9 +21,6 @@ "build": "./node_modules/rollup/bin/rollup --config configs/rollup/rollup.dev.config.js && npm run build:doc-public", "publish": "npm run build && ./node_modules/rollup/bin/rollup --config configs/rollup/rollup.prod.config.js", "prestart": "npm run build && ./start.sh &", - "test": "./node_modules/mocha/bin/mocha --recursive --exit --timeout 10000 --require ./node_modules/@babel/register -r jsdom-global/register", - "test-tdd": "./node_modules/mocha/bin/mocha --timeout 15000 --watch --recursive --require ./node_modules/@babel/register -r jsdom-global/register", - "coverage": "nyc --reporter=html --reporter=text ./node_modules/mocha/bin/mocha --timeout 10000 --recursive --exit --require ./node_modules/@babel/register -r jsdom-global/register", "lint": "node_modules/eslint/bin/eslint.js src/**", "build:doc-public": "npx jsdoc -r -c configs/jsdoc/jsdoc.config.json", "build:doc-private": "npx jsdoc -p -r -c configs/jsdoc/jsdoc.config.json", @@ -51,25 +49,18 @@ "@babel/register": "7.0.0", "babel-eslint": "^10.0.1", "babel-loader": "^8.0.5", - "better-docs": "^1.1.6", - "chai": "^4.1.2", - "concurrently": "^4.1.0", "eslint": "^5.2.0", "eslint-config-airbnb": "^17.0.0", "eslint-loader": "^2.1.0", "eslint-plugin-import": "^2.13.0", "eslint-plugin-jsx-a11y": "^6.1.1", - "fake-fetch": "^2.0.0", "finalhandler": "^1.1.1", "husky": "^1.0.0-rc.13", - "jsdoc": "^3.5.5", + "jsdoc": "^3.6.4", "jsdom": "^13.0.0", "jsdom-global": "3.0.2", "localstorage-polyfill": "^1.0.1", - "mocha": "^5.2.0", - "node-fetch": "^2.3.0", - "nodemon": "^1.19.4", - "nyc": "^12.0.2", + "nodemon": "^2.0.4", "rollup": "^1.2.2", "rollup-plugin-commonjs": "^9.2.0", "rollup-plugin-copy": "^3.3.0", @@ -79,12 +70,9 @@ "rollup-plugin-local-resolve": "^1.0.7", "rollup-plugin-node-resolve": "^4.0.0", "rollup-plugin-serve": "^1.0.1", - "rollup-plugin-terser": "^5.1.2", + "rollup-plugin-terser": "^5.3.0", "serve-static": "^1.13.2", - "sinon": "^6.1.4", - "tui-jsdoc-template": "^1.2.2", - "whatwg-fetch": "^3.0.0", - "wrtc": "^0.3.2" + "whatwg-fetch": "^3.0.0" }, "husky": { "hooks": { diff --git a/src/constants.js b/src/constants.js index 6b60d56f4..1191acb03 100644 --- a/src/constants.js +++ b/src/constants.js @@ -4,41 +4,42 @@ import * as SkylinkEventsConstants from './skylink-events/constants'; * @namespace SkylinkConstants * @description *
    + *
  • {@link SkylinkConstants.AUDIO_CODEC|AUDIO_CODEC}
  • + *
  • {@link SkylinkConstants.BUNDLE_POLICY|BUNDLE_POLICY}
  • + *
  • {@link SkylinkConstants.CANDIDATE_GENERATION_STATE|CANDIDATE_GENERATION_STATE}
  • + *
  • {@link SkylinkConstants.CANDIDATE_PROCESSING_STATE|CANDIDATE_PROCESSING_STATE}
  • *
  • {@link SkylinkConstants.DATA_CHANNEL_STATE|DATA_CHANNEL_STATE}
  • *
  • {@link SkylinkConstants.DATA_CHANNEL_TYPE|DATA_CHANNEL_TYPE}
  • *
  • {@link SkylinkConstants.DATA_CHANNEL_MESSAGE_ERROR|DATA_CHANNEL_MESSAGE_ERROR}
  • - *
  • {@link SkylinkConstants.CANDIDATE_GENERATION_STATE|CANDIDATE_GENERATION_STATE}
  • - *
  • {@link SkylinkConstants.CANDIDATE_PROCESSING_STATE|CANDIDATE_PROCESSING_STATE}
  • - *
  • {@link SkylinkConstants.ICE_CONNECTION_STATE|ICE_CONNECTION_STATE}
  • - *
  • {@link SkylinkConstants.TURN_TRANSPORT|TURN_TRANSPORT}
  • - *
  • {@link SkylinkConstants.PEER_CONNECTION_STATE|PEER_CONNECTION_STATE}
  • + *
  • {@link SkylinkEvents|EVENTS}
  • *
  • {@link SkylinkConstants.GET_CONNECTION_STATUS_STATE|GET_CONNECTION_STATUS_STATE}
  • - *
  • {@link SkylinkConstants.SERVER_PEER_TYPE|SERVER_PEER_TYPE}
  • - *
  • {@link SkylinkConstants.BUNDLE_POLICY|BUNDLE_POLICY}
  • - *
  • {@link SkylinkConstants.RTCP_MUX_POLICY|RTCP_MUX_POLICY}
  • - *
  • {@link SkylinkConstants.PEER_CERTIFICATE|PEER_CERTIFICATE}
  • - *
  • {@link SkylinkConstants.HANDSHAKE_PROGRESS|HANDSHAKE_PROGRESS}
  • *
  • {@link SkylinkConstants.GET_PEERS_STATE|GET_PEERS_STATE}
  • - *
  • {@link SkylinkConstants.SYSTEM_ACTION|SYSTEM_ACTION}
  • - *
  • {@link SkylinkConstants.SYSTEM_ACTION_REASON|SYSTEM_ACTION_REASON}
  • - *
  • {@link SkylinkConstants.READY_STATE_CHANGE|READY_STATE_CHANGE}
  • - *
  • {@link SkylinkConstants.READY_STATE_CHANGE_ERROR|READY_STATE_CHANGE_ERROR}
  • + *
  • {@link SkylinkConstants.HANDSHAKE_PROGRESS|HANDSHAKE_PROGRESS}
  • + *
  • {@link SkylinkConstants.ICE_CONNECTION_STATE|ICE_CONNECTION_STATE}
  • *
  • {@link SkylinkConstants.LOG_LEVEL|LOG_LEVEL}
  • + *
  • {@link SkylinkConstants.MEDIA_ACCESS_FALLBACK_STATE|MEDIA_ACCESS_FALLBACK_STATE}
  • + *
  • {@link SkylinkConstants.MEDIA_SOURCE|MEDIA_SOURCE}
  • + *
  • {@link SkylinkConstants.MEDIA_STATUS|MEDIA_STATUS}
  • + *
  • {@link SkylinkConstants.MEDIA_TYPE|MEDIA_TYPE}
  • + *
  • {@link SkylinkConstants.MEDIA_STATE|MEDIA_STATE}
  • + *
  • {@link SkylinkConstants.PEER_CERTIFICATE|PEER_CERTIFICATE}
  • + *
  • {@link SkylinkConstants.PEER_CONNECTION_STATE|PEER_CONNECTION_STATE}
  • + *
  • {@link SkylinkConstants.READY_STATE_CHANGE_ERROR|READY_STATE_CHANGE_ERROR}
  • + *
  • {@link SkylinkConstants.READY_STATE_CHANGE|READY_STATE_CHANGE}
  • + *
  • {@link SkylinkConstants.RTCP_MUX_POLICY|RTCP_MUX_POLICY}
  • + *
  • {@link SkylinkConstants.RTMP_STATE|RTMP_STATE}
  • + *
  • {@link SkylinkConstants.RECORDING_STATE|RECORDING_STATE}
  • + *
  • {@link SkylinkConstants.SDP_SEMANTICS|SDP_SEMANTICS}
  • + *
  • {@link SkylinkConstants.SERVER_PEER_TYPE|SERVER_PEER_TYPE}
  • *
  • {@link SkylinkConstants.SOCKET_ERROR|SOCKET_ERROR}
  • *
  • {@link SkylinkConstants.SOCKET_FALLBACK|SOCKET_FALLBACK}
  • + *
  • {@link SkylinkConstants.SYSTEM_ACTION|SYSTEM_ACTION}
  • + *
  • {@link SkylinkConstants.SYSTEM_ACTION_REASON|SYSTEM_ACTION_REASON}
  • *
  • {@link SkylinkConstants.SM_PROTOCOL_VERSION|SM_PROTOCOL_VERSION}
  • + *
  • {@link SkylinkConstants.TURN_TRANSPORT|TURN_TRANSPORT}
  • *
  • {@link SkylinkConstants.VIDEO_CODEC|VIDEO_CODEC}
  • - *
  • {@link SkylinkConstants.AUDIO_CODEC|AUDIO_CODEC}
  • - *
  • {@link SkylinkConstants.MEDIA_SOURCE|MEDIA_SOURCE}
  • *
  • {@link SkylinkConstants.VIDEO_RESOLUTION|VIDEO_RESOLUTION}
  • - *
  • {@link SkylinkConstants.MEDIA_ACCESS_FALLBACK_STATE|MEDIA_ACCESS_FALLBACK_STATE}
  • - *
  • {@link SkylinkConstants.RECORDING_STATE|RECORDING_STATE}
  • *
  • {@link SkylinkConstants.VIDEO_QUALITY|VIDEO_QUALITY}
  • - *
  • {@link SkylinkConstants.SDP_SEMANTICS|SDP_SEMANTICS}
  • - *
  • {@link SkylinkConstants.RTMP_STATE|RTMP_STATE}
  • - *
  • {@link SkylinkConstants.MEDIA_STATUS|MEDIA_STATUS}
  • - *
  • {@link SkylinkConstants.MEDIA_TYPE|MEDIA_TYPE}
  • - *
  • {@link SkylinkConstants.MEDIA_STATE|MEDIA_STATE}
  • *
*/ diff --git a/src/index.js b/src/index.js index a1a9ab9da..977bdae22 100644 --- a/src/index.js +++ b/src/index.js @@ -42,7 +42,9 @@ let userInitOptions = {}; const SkylinkEvents = constants.EVENTS; /** + * @class Skylink * @classdesc Class representing a SkylinkJS instance. + * @param {initOptions} options - Skylink authentication and initialisation configuration options. * @example * import Skylink from 'skylinkjs'; * diff --git a/src/skylink-events/index.js b/src/skylink-events/index.js index 122561571..1d813a1be 100644 --- a/src/skylink-events/index.js +++ b/src/skylink-events/index.js @@ -65,6 +65,7 @@ import { /** * @namespace SkylinkEvents * @description + *

Also referenced as SkylinkConstants.EVENTS

* PEER EVENTS
*