From 3b53b357c5077121b52a0020a0c941341551110a Mon Sep 17 00:00:00 2001 From: tnguyen452 Date: Mon, 16 Apr 2018 02:01:46 -0400 Subject: [PATCH 01/41] fix --- functions/handleCases.js | 2 +- functions/receive-message.js | 6 +----- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/functions/handleCases.js b/functions/handleCases.js index 4928c80..06ad20b 100644 --- a/functions/handleCases.js +++ b/functions/handleCases.js @@ -26,7 +26,7 @@ function getStart(sender_psid) { // Provides four options: Next Match, Team News, Team Squad, Next 5 games function teamOptions(sender_psid, teamName, imageURL) { - let choices = ['Next Match', 'Team News', 'Team Squad', 'Team Schedules', 'Another Team']; + let choices = ['Next Match', 'Team News', 'Another Team']; sendResponse.teamOptionChoose(sender_psid, teamName, 'OPTION', choices, imageURL); } diff --git a/functions/receive-message.js b/functions/receive-message.js index 7c7964c..175a0aa 100644 --- a/functions/receive-message.js +++ b/functions/receive-message.js @@ -30,6 +30,7 @@ function handleMessage(sender_psid, received_message) { // Look for the Team else if (handleChoice[sender_psid] == 'TEAM') { key = dataFormat.checkDuplicate(key); + console.log("In team") console.log(key); if (typeof(key) == 'object') { let newKey = dataFormat.completeName(key); @@ -154,11 +155,6 @@ function handlePostback(sender_psid, messagePostback) { sendResponse.directMessage(sender_psid, response); } - // else if (payload.includes('Team News')) { - // teamName = dataFormat.decodeUnderline(payload); - // info.matchLookup(sender_psid, teamName, payload); - // } - // Looking for match's information else { teamName = dataFormat.decodeUnderline(payload); From adfe5fcaa31fc5aa560d404b1a83c511f4ecf694 Mon Sep 17 00:00:00 2001 From: tnguyen452 Date: Mon, 16 Apr 2018 02:06:02 -0400 Subject: [PATCH 02/41] fix --- functions/handleCases.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/functions/handleCases.js b/functions/handleCases.js index 06ad20b..da32ef3 100644 --- a/functions/handleCases.js +++ b/functions/handleCases.js @@ -26,7 +26,7 @@ function getStart(sender_psid) { // Provides four options: Next Match, Team News, Team Squad, Next 5 games function teamOptions(sender_psid, teamName, imageURL) { - let choices = ['Next Match', 'Team News', 'Another Team']; + let choices = ['Next Match', 'Team News', 'Team Squad', 'Another Team']; sendResponse.teamOptionChoose(sender_psid, teamName, 'OPTION', choices, imageURL); } From df2eeb57d6fa4771f7efe447702066a5a93fcb42 Mon Sep 17 00:00:00 2001 From: tnguyen452 Date: Mon, 16 Apr 2018 02:15:25 -0400 Subject: [PATCH 03/41] team squad --- functions/handleCases.js | 3 +- functions/informationLookup.js | 54 ++++++++++++++++++++++++++++------ 2 files changed, 47 insertions(+), 10 deletions(-) diff --git a/functions/handleCases.js b/functions/handleCases.js index da32ef3..1d77864 100644 --- a/functions/handleCases.js +++ b/functions/handleCases.js @@ -26,7 +26,8 @@ function getStart(sender_psid) { // Provides four options: Next Match, Team News, Team Squad, Next 5 games function teamOptions(sender_psid, teamName, imageURL) { - let choices = ['Next Match', 'Team News', 'Team Squad', 'Another Team']; + // let choices = ['Next Match', 'Team News', 'Team Squad', 'Another Team']; + let choices = ['Next Match', 'Team News', 'Team Squad']; sendResponse.teamOptionChoose(sender_psid, teamName, 'OPTION', choices, imageURL); } diff --git a/functions/informationLookup.js b/functions/informationLookup.js index 875523d..a5eb2cc 100644 --- a/functions/informationLookup.js +++ b/functions/informationLookup.js @@ -321,23 +321,59 @@ function matchLookup(sender_psid, key, status) { sendResponse.teamNewsURL(sender_psid, key, url, imageUrl, newsTitle, newsSubtitle); console.log("replied"); + }) + } + }) + } - // In case user want to see the Next Match Squad - // else if (status.includes('Team Squad')) { - // response = { - // "text": 'We are currently working on this feature. Please come back another time.' - // } - // console.log(replied); - // sendResponse.directMessage(sender_psid, response); - // } + }) + } + else if (status.includes('Team Squad')) { + // Async function to look for the Next Match. + data.get_team_squad(key, (err, reply) => { + if (err) { + response = { + "text" : `Cannot find the Team Squad: ${key}` + } + sendResponse.directMessage(sender_psid, response); + } + else if (key) { + request({ + "uri": "https://graph.facebook.com/v2.6/" + sender_psid, + "qs" : {"access_token": process.env.PAGE_ACCESS_TOKEN, fields: "timezone"}, + "method": "GET", + "json": true, + }, (err, res, body) => { + if (err) { + console.error("Unable to send message:" + err); + } + else { + request({ + "uri": "https://graph.facebook.com/v2.6/" + sender_psid, + "qs" : {"access_token": process.env.PAGE_ACCESS_TOKEN, fields: "timezone"}, + "method": "GET", + "json": true, + }, (err, res, body) => { + let url = reply[0]; + let formation = reply[1]; + let players = reply[2]; + let teamPlayer = "" + for (var i = 0; i < players.length; i++) { + teamPlayer = '\n' + teamPlayer + players[i]; + } + response = { + "text" : `Team Formation: ${formation}\nPlayers:${teamPlayer}` + } + sendResponse.directMessage(sender_psid, response); + console.log("replied"); }) } }) } }) - } + } } }, 1200) } From 1a33094363ac07828becd3a1601eb56c0f01e940 Mon Sep 17 00:00:00 2001 From: tnguyen452 Date: Mon, 16 Apr 2018 02:25:55 -0400 Subject: [PATCH 04/41] squad --- data/get_data.js | 2 +- functions/informationLookup.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/data/get_data.js b/data/get_data.js index 9c6319c..bfb509e 100644 --- a/data/get_data.js +++ b/data/get_data.js @@ -31,7 +31,7 @@ module.exports = { }) }, get_team_schedule: function (team_name, callback) { - PythonShell.run('./scripts/get_team_get_team_schedule.py', {args: [team_name]}, (err, data) => { + PythonShell.run('./scripts/get_team_schedule.py', {args: [team_name]}, (err, data) => { spawn('killall', ['-9', 'chrome']); spawn('killall', ['-9', 'chromedriver']); callback(err, data); diff --git a/functions/informationLookup.js b/functions/informationLookup.js index a5eb2cc..43579d7 100644 --- a/functions/informationLookup.js +++ b/functions/informationLookup.js @@ -331,6 +331,7 @@ function matchLookup(sender_psid, key, status) { else if (status.includes('Team Squad')) { // Async function to look for the Next Match. + console.log("team: ", key); data.get_team_squad(key, (err, reply) => { if (err) { response = { @@ -371,9 +372,8 @@ function matchLookup(sender_psid, key, status) { } }) } - }) - } + } } }, 1200) } From 67632a7367165a574b318d61fb13e3d18ff26ba7 Mon Sep 17 00:00:00 2001 From: tnguyen452 Date: Mon, 16 Apr 2018 02:30:59 -0400 Subject: [PATCH 05/41] squad --- scripts/get_team_squad.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/get_team_squad.py b/scripts/get_team_squad.py index 2e91148..e60fe10 100644 --- a/scripts/get_team_squad.py +++ b/scripts/get_team_squad.py @@ -20,7 +20,7 @@ def main(): chrome_options.add_argument("--headless") chrome_options.add_argument("no-sandbox") - browser = webdriver.Chrome(chrome_options=chrome_optaions) + browser = webdriver.Chrome(chrome_options=chrome_options) browser.get('http://www.skysports.com/football/teams') WebDriverWait(browser, timeout).until(EC.visibility_of_element_located((By.XPATH, "//input[@class='site-search__input site-search--inpage__input']"))) From 5f15c91ca08955e6e3e70ce205ffaa260b762cc7 Mon Sep 17 00:00:00 2001 From: tnguyen452 Date: Mon, 16 Apr 2018 02:37:21 -0400 Subject: [PATCH 06/41] fix --- functions/informationLookup.js | 10 +++++----- scripts/get_team_squad.py | 3 ++- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/functions/informationLookup.js b/functions/informationLookup.js index 43579d7..017b703 100644 --- a/functions/informationLookup.js +++ b/functions/informationLookup.js @@ -359,12 +359,12 @@ function matchLookup(sender_psid, key, status) { let url = reply[0]; let formation = reply[1]; let players = reply[2]; - let teamPlayer = "" - for (var i = 0; i < players.length; i++) { - teamPlayer = '\n' + teamPlayer + players[i]; - } + // let teamPlayer = reply[3] + // for (var i = 0; i < players.length; i++) { + // teamPlayer = '\n' + teamPlayer + players[i]; + // } response = { - "text" : `Team Formation: ${formation}\nPlayers:${teamPlayer}` + "text" : `Team Formation: ${formation}\nPlayers:${players}` } sendResponse.directMessage(sender_psid, response); console.log("replied"); diff --git a/scripts/get_team_squad.py b/scripts/get_team_squad.py index e60fe10..6c16525 100644 --- a/scripts/get_team_squad.py +++ b/scripts/get_team_squad.py @@ -78,7 +78,8 @@ def main(): print(url) print(formation) - print(whoPlay) + for i in whoPlay: + print(i) browser.quit() sys.exit(0) From 26ee3932bc0c95df89d93c104040f6b41402aa1d Mon Sep 17 00:00:00 2001 From: tnguyen452 Date: Mon, 16 Apr 2018 16:28:02 -0400 Subject: [PATCH 07/41] new Quick reply --- functions/dataFormat.js | 12 ++++++++++++ functions/handleCases.js | 11 +++++++++-- functions/receive-message.js | 31 +++++++++++++++++++++++++++++++ functions/sendResponse.js | 26 ++++++++++++++++++++++++++ 4 files changed, 78 insertions(+), 2 deletions(-) diff --git a/functions/dataFormat.js b/functions/dataFormat.js index e1753b0..0f551b3 100644 --- a/functions/dataFormat.js +++ b/functions/dataFormat.js @@ -103,6 +103,18 @@ function quickReplyFormat(payloadCharacteristic, value) { return finalArr; } +function teamDataQuick(payloadCharacteristic, value, teamName) { + let finalArr = []; + for (var i = 0; i < value.length; i++) { + var map = {}; + map['content_type'] = 'text'; + map['title'] = value[i]; + map['payload'] = payloadCharacteristic + value[i] + '_' + teamName; + finalArr.push(map); + } + return finalArr; +} + function teamOptionFormat(payloadCharacteristic, choices, teamName) { let finalArr = []; for (var i = 0; i < choices.length; i++) { diff --git a/functions/handleCases.js b/functions/handleCases.js index 1d77864..04c39ba 100644 --- a/functions/handleCases.js +++ b/functions/handleCases.js @@ -26,11 +26,18 @@ function getStart(sender_psid) { // Provides four options: Next Match, Team News, Team Squad, Next 5 games function teamOptions(sender_psid, teamName, imageURL) { - // let choices = ['Next Match', 'Team News', 'Team Squad', 'Another Team']; - let choices = ['Next Match', 'Team News', 'Team Squad']; + let choices = ['Next Match', 'Team Data', 'Another Team']; sendResponse.teamOptionChoose(sender_psid, teamName, 'OPTION', choices, imageURL); } +function teamData(sender_psid, teamName) { + let choices = ['Team News', 'Team Squad', 'Team Schedules', 'Team Coach']; + let response = { + 'text': `Please select the option of data you want` + } + sendResponse.quickDataAccess(sender_psid, teamName ,response, "TEAMDATA", choices); +} + // Provides 11 popular team options function popularTeam(sender_psid) { let key = ['Manchester United', 'Real Madrid', 'Barcelona', 'Chelsea', 'Manchester City', 'Paris Saint Germain', 'Arsenal', 'Liverpool', 'Germany', 'Brazil', 'Spain']; diff --git a/functions/receive-message.js b/functions/receive-message.js index 175a0aa..77fa041 100644 --- a/functions/receive-message.js +++ b/functions/receive-message.js @@ -100,6 +100,31 @@ function handleQuickReply(sender_psid, received_message) { } } + // In case that user want to get the team datas + if (key.includes('TEAMDATA')) { + + // In case that user want the team news + if (key.includes('Team News')) { + teamName = dataFormat.decodeUnderline(key); + info.matchLookup(sender_psid, teamName, key); + } + + // In case that user want the team squad + else if (key.includes('Team Squad')) { + + } + + // In case that user want the team schedules + else if (key.includes('Team Schedules')) { + + } + + // In case that user want the team coach + else { + + } + } + // Continues the bot by asking the initial question: Team or Player? if (key.includes('CONTINUE')) { if (key.includes('Yes')) { @@ -155,6 +180,12 @@ function handlePostback(sender_psid, messagePostback) { sendResponse.directMessage(sender_psid, response); } + else if (payload.includes('Team Data')) { + teamName = dataFormat.decodeUnderline(payload); + console.log('In postback team: ', teamName); + handleCases.teamData(sender_psid, teamName); + } + // Looking for match's information else { teamName = dataFormat.decodeUnderline(payload); diff --git a/functions/sendResponse.js b/functions/sendResponse.js index 34c1eb6..4b3ec74 100644 --- a/functions/sendResponse.js +++ b/functions/sendResponse.js @@ -49,6 +49,32 @@ function quickReply(sender_psid, response, payloadCharacteristic, value) { }); } +// Post a form of quick reply to the server +function quickDataAccess(sender_psid, teamName, response, payloadCharacteristic, value) { + let jsonFile = dataFormat.teamDataQuick(payloadCharacteristic, value, teamName); + let request_body = { + "recipient": { + "id": sender_psid + }, + "message": { + "text": response["text"], + "quick_replies": jsonFile + } + }; + + // Send the HTTP request to the Messenger Platform + request({ + "uri": "https://graph.facebook.com/v2.6/me/messages", + "qs": { "access_token": process.env.PAGE_ACCESS_TOKEN}, + "method": "POST", + "json": request_body + }, (err, res, body) => { + if (err) { + console.error("Unable to send message:" + err); + } + }); +} + // Post a form of quick reply to the server function teamOptionChoose(sender_psid, teamName, payloadCharacteristic, choices, imageURL) { From 43f246cedcbb480473bd73db5b17edcdaa03bea5 Mon Sep 17 00:00:00 2001 From: tnguyen452 Date: Mon, 16 Apr 2018 16:30:52 -0400 Subject: [PATCH 08/41] add func --- functions/dataFormat.js | 1 + functions/handleCases.js | 1 + functions/sendResponse.js | 1 + 3 files changed, 3 insertions(+) diff --git a/functions/dataFormat.js b/functions/dataFormat.js index 0f551b3..bf074ba 100644 --- a/functions/dataFormat.js +++ b/functions/dataFormat.js @@ -138,6 +138,7 @@ module.exports = { timeFormat, teamFormat, quickReplyFormat, + teamDataQuick, teamOptionFormat, decodeUnderline } \ No newline at end of file diff --git a/functions/handleCases.js b/functions/handleCases.js index 04c39ba..28b305d 100644 --- a/functions/handleCases.js +++ b/functions/handleCases.js @@ -76,6 +76,7 @@ function setReminder(sender_psid, match) { module.exports = { getStart, teamOptions, + teamData, popularTeam, popularPlayer, getContinue, diff --git a/functions/sendResponse.js b/functions/sendResponse.js index 4b3ec74..c509306 100644 --- a/functions/sendResponse.js +++ b/functions/sendResponse.js @@ -280,6 +280,7 @@ function sendReminder(sender_psid, response, payloadCharacteristic, match) { module.exports = { directMessage, quickReply, + quickDataAccess, teamOptionChoose, teamNewsURL, playerReply, From e795558a143be53deeaf9f185e97c6f11e720d8d Mon Sep 17 00:00:00 2001 From: tnguyen452 Date: Mon, 16 Apr 2018 16:36:27 -0400 Subject: [PATCH 09/41] update squad --- functions/informationLookup.js | 4 ---- functions/receive-message.js | 35 ++++++++++++++++++---------------- 2 files changed, 19 insertions(+), 20 deletions(-) diff --git a/functions/informationLookup.js b/functions/informationLookup.js index 017b703..b09e452 100644 --- a/functions/informationLookup.js +++ b/functions/informationLookup.js @@ -359,10 +359,6 @@ function matchLookup(sender_psid, key, status) { let url = reply[0]; let formation = reply[1]; let players = reply[2]; - // let teamPlayer = reply[3] - // for (var i = 0; i < players.length; i++) { - // teamPlayer = '\n' + teamPlayer + players[i]; - // } response = { "text" : `Team Formation: ${formation}\nPlayers:${players}` } diff --git a/functions/receive-message.js b/functions/receive-message.js index 77fa041..e5f72c1 100644 --- a/functions/receive-message.js +++ b/functions/receive-message.js @@ -102,27 +102,30 @@ function handleQuickReply(sender_psid, received_message) { // In case that user want to get the team datas if (key.includes('TEAMDATA')) { + + teamName = dataFormat.decodeUnderline(key); + info.matchLookup(sender_psid, teamName, key); + // // In case that user want the team news + // if (key.includes('Team News')) { + // teamName = dataFormat.decodeUnderline(key); + // info.matchLookup(sender_psid, teamName, key); + // } - // In case that user want the team news - if (key.includes('Team News')) { - teamName = dataFormat.decodeUnderline(key); - info.matchLookup(sender_psid, teamName, key); - } + // // In case that user want the team squad + // else if (key.includes('Team Squad')) { + // teamName = dataFormat.decodeUnderline(key); + // info.matchLookup(sender_psid, teamName, key); + // } - // In case that user want the team squad - else if (key.includes('Team Squad')) { + // // In case that user want the team schedules + // else if (key.includes('Team Schedules')) { - } + // } - // In case that user want the team schedules - else if (key.includes('Team Schedules')) { + // // In case that user want the team coach + // else { - } - - // In case that user want the team coach - else { - - } + // } } // Continues the bot by asking the initial question: Team or Player? From 7231faf721bf9089437f58ebe2c0f267a3b69be0 Mon Sep 17 00:00:00 2001 From: tnguyen452 Date: Mon, 16 Apr 2018 16:47:26 -0400 Subject: [PATCH 10/41] fix squad --- functions/handleCases.js | 2 +- functions/informationLookup.js | 6 +++++- functions/receive-message.js | 6 +++++- functions/sendResponse.js | 5 +++++ 4 files changed, 16 insertions(+), 3 deletions(-) diff --git a/functions/handleCases.js b/functions/handleCases.js index 28b305d..c8fa701 100644 --- a/functions/handleCases.js +++ b/functions/handleCases.js @@ -31,7 +31,7 @@ function teamOptions(sender_psid, teamName, imageURL) { } function teamData(sender_psid, teamName) { - let choices = ['Team News', 'Team Squad', 'Team Schedules', 'Team Coach']; + let choices = ['Team News', 'Team Squad', 'Team Schedules', 'Team Coach', 'Go Back']; let response = { 'text': `Please select the option of data you want` } diff --git a/functions/informationLookup.js b/functions/informationLookup.js index b09e452..456bdcd 100644 --- a/functions/informationLookup.js +++ b/functions/informationLookup.js @@ -359,8 +359,12 @@ function matchLookup(sender_psid, key, status) { let url = reply[0]; let formation = reply[1]; let players = reply[2]; + let teamSub = '' + for (var i = 0; i < players.length; i++) { + teamSub += players[i] + ' ' + } response = { - "text" : `Team Formation: ${formation}\nPlayers:${players}` + "text" : `Team Formation: ${formation}\nPlayers:${teamSub}` } sendResponse.directMessage(sender_psid, response); console.log("replied"); diff --git a/functions/receive-message.js b/functions/receive-message.js index e5f72c1..d3efca2 100644 --- a/functions/receive-message.js +++ b/functions/receive-message.js @@ -102,7 +102,11 @@ function handleQuickReply(sender_psid, received_message) { // In case that user want to get the team datas if (key.includes('TEAMDATA')) { - + + if (key.includes('Go Back')) { + handleCases.getStart(sender_psid); + } + teamName = dataFormat.decodeUnderline(key); info.matchLookup(sender_psid, teamName, key); // // In case that user want the team news diff --git a/functions/sendResponse.js b/functions/sendResponse.js index c509306..c07c54d 100644 --- a/functions/sendResponse.js +++ b/functions/sendResponse.js @@ -169,6 +169,11 @@ function teamNewsURL(sender_psid, key, url, imageUrl, newsTitle, newsSubtitle) { } } } + }, + { + "type": 'postback', + "title": 'Another Team', + "payload": 'OPTIONAnother Team' }] }] } From 78bd082f690aeec213e6abaa48b65b8632013fb4 Mon Sep 17 00:00:00 2001 From: tnguyen452 Date: Mon, 16 Apr 2018 16:49:07 -0400 Subject: [PATCH 11/41] update goback --- functions/receive-message.js | 29 +++++------------------------ 1 file changed, 5 insertions(+), 24 deletions(-) diff --git a/functions/receive-message.js b/functions/receive-message.js index d3efca2..c20c78b 100644 --- a/functions/receive-message.js +++ b/functions/receive-message.js @@ -106,30 +106,11 @@ function handleQuickReply(sender_psid, received_message) { if (key.includes('Go Back')) { handleCases.getStart(sender_psid); } - - teamName = dataFormat.decodeUnderline(key); - info.matchLookup(sender_psid, teamName, key); - // // In case that user want the team news - // if (key.includes('Team News')) { - // teamName = dataFormat.decodeUnderline(key); - // info.matchLookup(sender_psid, teamName, key); - // } - - // // In case that user want the team squad - // else if (key.includes('Team Squad')) { - // teamName = dataFormat.decodeUnderline(key); - // info.matchLookup(sender_psid, teamName, key); - // } - - // // In case that user want the team schedules - // else if (key.includes('Team Schedules')) { - - // } - - // // In case that user want the team coach - // else { - - // } + + else { + teamName = dataFormat.decodeUnderline(key); + info.matchLookup(sender_psid, teamName, key); + } } // Continues the bot by asking the initial question: Team or Player? From 635708757e705604af92842f51b992fa54d2237d Mon Sep 17 00:00:00 2001 From: tnguyen452 Date: Mon, 16 Apr 2018 16:59:09 -0400 Subject: [PATCH 12/41] fix squad --- functions/informationLookup.js | 17 ++++++++++++++++- scripts/get_team_squad.py | 4 ++-- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/functions/informationLookup.js b/functions/informationLookup.js index 456bdcd..3f289b6 100644 --- a/functions/informationLookup.js +++ b/functions/informationLookup.js @@ -374,6 +374,22 @@ function matchLookup(sender_psid, key, status) { } }) } + + else if (status.includes('Team Schedules')) { + response = { + "text": `We currently working on this futures for schedules` + } + sendResponse.directMessage(sender_psid, response); + console.log("reply"); + } + + else if (status.includes('Team Coach')) { + response = { + "text": `We currently working on this futures for coach` + } + sendResponse.directMessage(sender_psid, response); + console.log("reply"); + } } }, 1200) } @@ -447,7 +463,6 @@ function playerLookup(sender_psid, key) { console.log("replied"); sendResponse.playerReply(sender_psid, playerTitle, playerSubtitle, playerImageURL, playerURL); } - // Check if user want to continue searching }) } }, 1200); diff --git a/scripts/get_team_squad.py b/scripts/get_team_squad.py index 6c16525..f95fb7b 100644 --- a/scripts/get_team_squad.py +++ b/scripts/get_team_squad.py @@ -28,7 +28,7 @@ def main(): browser.find_element_by_xpath("//input[@class='site-search__input site-search--inpage__input']").send_keys(team_name) - browser.implicitly_wait(2) + browser.implicitly_wait(3) try: WebDriverWait(browser, timeout).until(EC.visibility_of_element_located((By.CLASS_NAME, "autocomplete__results-item"))) @@ -55,7 +55,7 @@ def main(): soup = BeautifulSoup(squadHtml, "html.parser") url = browser.current_url - browser.implicitly_wait(1) + browser.implicitly_wait(2) formation = soup.find('div', {'class': 'box -bp30-hdn s11-graphic-container'}).find('div', {'class': 'span10 strap1 -center -ondark -interact text-h5 arrangement'}).text players = soup.find('div', {'class': 'box -bp30-hdn s11-graphic-container'}).findAll('span', {'class': 'col span3/4'}) From d80a191ad05239df61457c8d8e46a8000248f17d Mon Sep 17 00:00:00 2001 From: tnguyen452 Date: Mon, 16 Apr 2018 17:06:15 -0400 Subject: [PATCH 13/41] fix squad --- functions/informationLookup.js | 4 ++-- scripts/get_team_squad.py | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/functions/informationLookup.js b/functions/informationLookup.js index 3f289b6..bc18fce 100644 --- a/functions/informationLookup.js +++ b/functions/informationLookup.js @@ -361,10 +361,10 @@ function matchLookup(sender_psid, key, status) { let players = reply[2]; let teamSub = '' for (var i = 0; i < players.length; i++) { - teamSub += players[i] + ' ' + teamSub += players[i] + '\n' } response = { - "text" : `Team Formation: ${formation}\nPlayers:${teamSub}` + "text" : `Here is the lastest formation:\nTeam Formation: ${formation}\nPlayers:${teamSub}` } sendResponse.directMessage(sender_psid, response); console.log("replied"); diff --git a/scripts/get_team_squad.py b/scripts/get_team_squad.py index f95fb7b..c21d862 100644 --- a/scripts/get_team_squad.py +++ b/scripts/get_team_squad.py @@ -8,6 +8,7 @@ import sys import os +import unicodedata def main(): window_size = "1200,800" @@ -73,7 +74,7 @@ def main(): j = 0 while (j < 11): - whoPlay.append(playersList[j] + ' - ' + playersNumberList[j]) + whoPlay.append(str(unicodedata.normalize('NFD', playersList[j]).encode('ascii', 'ignore').decode("utf-8")) + ' - ' + playersNumberList[j]) j += 1 print(url) From b915c961dda9799a557211af0c5f59fae53b28ef Mon Sep 17 00:00:00 2001 From: tnguyen452 Date: Tue, 17 Apr 2018 09:29:27 -0400 Subject: [PATCH 14/41] fix squad string --- functions/informationLookup.js | 1 + scripts/get_team_squad.py | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/functions/informationLookup.js b/functions/informationLookup.js index bc18fce..983e3f2 100644 --- a/functions/informationLookup.js +++ b/functions/informationLookup.js @@ -362,6 +362,7 @@ function matchLookup(sender_psid, key, status) { let teamSub = '' for (var i = 0; i < players.length; i++) { teamSub += players[i] + '\n' + // for (var j = 0; j) } response = { "text" : `Here is the lastest formation:\nTeam Formation: ${formation}\nPlayers:${teamSub}` diff --git a/scripts/get_team_squad.py b/scripts/get_team_squad.py index c21d862..b5cf5f5 100644 --- a/scripts/get_team_squad.py +++ b/scripts/get_team_squad.py @@ -79,8 +79,9 @@ def main(): print(url) print(formation) - for i in whoPlay: - print(i) + print(whoPlay) + # for i in whoPlay: + # print(i) browser.quit() sys.exit(0) From b0391053c28c79ae8a42bb66f696d60f63aa2c50 Mon Sep 17 00:00:00 2001 From: tnguyen452 Date: Tue, 17 Apr 2018 09:33:37 -0400 Subject: [PATCH 15/41] fix squad string --- functions/informationLookup.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/functions/informationLookup.js b/functions/informationLookup.js index 983e3f2..5ddcba9 100644 --- a/functions/informationLookup.js +++ b/functions/informationLookup.js @@ -361,8 +361,9 @@ function matchLookup(sender_psid, key, status) { let players = reply[2]; let teamSub = '' for (var i = 0; i < players.length; i++) { - teamSub += players[i] + '\n' - // for (var j = 0; j) + for (var j = 0; j < i.length; j ++) { + teamSub += i[j] + ' ' + } } response = { "text" : `Here is the lastest formation:\nTeam Formation: ${formation}\nPlayers:${teamSub}` From 174b31f4266f2c8e83539ae467f2d94f8411f538 Mon Sep 17 00:00:00 2001 From: tnguyen452 Date: Tue, 17 Apr 2018 10:58:45 -0400 Subject: [PATCH 16/41] fix squad --- data/get_data.js | 7 +++++ functions/informationLookup.js | 48 +++++++++++++++++++++++++++------- scripts/get_team_squad.py | 8 +++--- 3 files changed, 50 insertions(+), 13 deletions(-) diff --git a/data/get_data.js b/data/get_data.js index bfb509e..29cecf7 100644 --- a/data/get_data.js +++ b/data/get_data.js @@ -43,5 +43,12 @@ module.exports = { spawn('killall', ['-9', 'chromedriver']); callback(err, data); }) + }, + get_team_coach: function (team_name, callback) { + PythonShell.run('./scripts/get_team_news.py', {args: [team_name]}, (err, data) => { + spawn('killall', ['-9', 'chrome']); + spawn('killall', ['-9', 'chromedriver']); + callback(err, data); + }) } }; diff --git a/functions/informationLookup.js b/functions/informationLookup.js index 5ddcba9..2ef880e 100644 --- a/functions/informationLookup.js +++ b/functions/informationLookup.js @@ -360,10 +360,8 @@ function matchLookup(sender_psid, key, status) { let formation = reply[1]; let players = reply[2]; let teamSub = '' - for (var i = 0; i < players.length; i++) { - for (var j = 0; j < i.length; j ++) { - teamSub += i[j] + ' ' - } + for (var i = 2; i < 13; i++) { + teamSub += reply[i] + '\n' } response = { "text" : `Here is the lastest formation:\nTeam Formation: ${formation}\nPlayers:${teamSub}` @@ -378,11 +376,43 @@ function matchLookup(sender_psid, key, status) { } else if (status.includes('Team Schedules')) { - response = { - "text": `We currently working on this futures for schedules` - } - sendResponse.directMessage(sender_psid, response); - console.log("reply"); + // Async function to look for the Next Match. + console.log("team: ", key); + data.get_team_schedule(key, (err, reply) => { + if (err) { + response = { + "text" : `Cannot find the Team Schedules: ${key}` + } + sendResponse.directMessage(sender_psid, response); + } + else if (key) { + request({ + "uri": "https://graph.facebook.com/v2.6/" + sender_psid, + "qs" : {"access_token": process.env.PAGE_ACCESS_TOKEN, fields: "timezone"}, + "method": "GET", + "json": true, + }, (err, res, body) => { + if (err) { + console.error("Unable to send message:" + err); + } + else { + request({ + "uri": "https://graph.facebook.com/v2.6/" + sender_psid, + "qs" : {"access_token": process.env.PAGE_ACCESS_TOKEN, fields: "timezone"}, + "method": "GET", + "json": true, + }, (err, res, body) => { + + response = { + "text" : `Match DATA:\n` + } + sendResponse.directMessage(sender_psid, response); + console.log("replied"); + }) + } + }) + } + }) } else if (status.includes('Team Coach')) { diff --git a/scripts/get_team_squad.py b/scripts/get_team_squad.py index b5cf5f5..2ba8561 100644 --- a/scripts/get_team_squad.py +++ b/scripts/get_team_squad.py @@ -14,7 +14,7 @@ def main(): window_size = "1200,800" timeout = 20 team_name = sys.argv[1] - + # team_name = 'Real Madrid' chrome_options = Options() chrome_options.binary_location = os.environ.get('GOOGLE_CHROME_SHIM', None) chrome_options.add_argument("--window-size=%s" % window_size) @@ -79,9 +79,9 @@ def main(): print(url) print(formation) - print(whoPlay) - # for i in whoPlay: - # print(i) + # print(whoPlay) + for i in whoPlay: + print(i) browser.quit() sys.exit(0) From 1ac383ade5de1e6b53d32365662548894826a534 Mon Sep 17 00:00:00 2001 From: tnguyen452 Date: Tue, 17 Apr 2018 16:44:03 -0400 Subject: [PATCH 17/41] team schedule --- functions/informationLookup.js | 17 ++++++++++++-- scripts/get_team_schedule.py | 42 +++++++++++++++++++--------------- scripts/get_team_squad.py | 4 ++-- 3 files changed, 41 insertions(+), 22 deletions(-) diff --git a/functions/informationLookup.js b/functions/informationLookup.js index 2ef880e..5b02ff0 100644 --- a/functions/informationLookup.js +++ b/functions/informationLookup.js @@ -364,7 +364,7 @@ function matchLookup(sender_psid, key, status) { teamSub += reply[i] + '\n' } response = { - "text" : `Here is the lastest formation:\nTeam Formation: ${formation}\nPlayers:${teamSub}` + "text" : `Here is the recently formation team used:\nTEAM FORMATION: ${formation}\nPLAYERS:\n${teamSub}` } sendResponse.directMessage(sender_psid, response); console.log("replied"); @@ -402,9 +402,22 @@ function matchLookup(sender_psid, key, status) { "method": "GET", "json": true, }, (err, res, body) => { + let length = reply[0] + let oldMatches = '' + let nextMatches = '' + + // For the old matches + for (var i = 1; i < 6; i++) { + oldMatches += reply[i] + '\n' + } + + // For the next matches Need to debug for next match if there are no coming match + for (var j = 6; j < (6 + length)-1; j++) { + nextMatches += reply[j] + '\n' + } response = { - "text" : `Match DATA:\n` + "text" : `SOME RECENTLY MATCHES:\n${oldMatches} SOME MATCHES COMING UP:\n${nextMatches}` } sendResponse.directMessage(sender_psid, response); console.log("replied"); diff --git a/scripts/get_team_schedule.py b/scripts/get_team_schedule.py index 2cb54ca..35abcef 100644 --- a/scripts/get_team_schedule.py +++ b/scripts/get_team_schedule.py @@ -79,11 +79,18 @@ def main(): if((passGames[i].find('div', {'class' : 'score-column score-result'}).find('span', {'class' : 'home-score score-value winner'}) == None) or (passGames[i].find('div', {'class' : 'score-column score-result'}).find('span', {'class' : 'away-score score-value'}) == None)): + if((passGames[i].find('div', {'class' : 'score-column score-result'}).find('span', {'class' : 'away-score score-value'}) != None)): + scoresAway.append(passGames[i].find('div', {'class' : 'score-column score-result'}).find('span', {'class' : 'away-score score-value'}).text) + else: + scoresAway.append(passGames[i].find('div', {'class' : 'score-column score-result'}).find('span', {'class' : 'away-score score-value winner'}).text) scoresHome.append(passGames[i].find('div', {'class' : 'score-column score-result'}).find('span', {'class' : 'home-score score-value'}).text) - scoresAway.append(passGames[i].find('div', {'class' : 'score-column score-result'}).find('span', {'class' : 'away-score score-value winner'}).text) else: - scoresHome.append(passGames[i].find('div', {'class' : 'score-column score-result'}).find('span', {'class' : 'home-score score-value winner'}).text) + if((passGames[i].find('div', {'class' : 'score-column score-result'}).find('span', {'class' : 'home-score score-value'}) != None)): + scoresAway.append(passGames[i].find('div', {'class' : 'score-column score-result'}).find('span', {'class' : 'home-score score-value'}).text) + else: + scoresHome.append(passGames[i].find('div', {'class' : 'score-column score-result'}).find('span', {'class' : 'home-score score-value winner'}).text) scoresAway.append(passGames[i].find('div', {'class' : 'score-column score-result'}).find('span', {'class' : 'away-score score-value'}).text) + date.append(passGames[i].find('div', {'class' : 'date'}).text) league.append(passGames[i].find('div', {'class' : 'league'}).text) @@ -91,27 +98,26 @@ def main(): passFewGames.append(homeTeams[i] + ' [' + scoresHome[i] + '] - ' + '[' + scoresAway[i] + '] ' + awayTeams[i] + ' on ' + date[i] + ' in ' + league[i]) + print(len(nextFewGames)); # For the pass 5 games - # for i, j in enumerate(passFewGames, 1): - # print(i, '.', j) - print(passFewGames) + for i, j in enumerate(passFewGames, 1): + print(i, '.', j) # For the next few games - # j = 1 - # if (len(nextFewGames) > 5): - # for i in range(0, 5): - # print(j, '.', nextFewGames[i]) - # j += 1 - # elif ((len(nextFewGames) < 5) and (len(nextFewGames) != 0)): - # for i in range(len(nextFewGames)): - # print(j, '.', nextFewGames[i]) - # j += 1 - # else: - # print('There is no coming match in next few days!.') - print(nextFewGames) + j = 1 + if (len(nextFewGames) > 5): + for i in range(0, 5): + print(j, '.', nextFewGames[i]) + j += 1 + elif ((len(nextFewGames) < 5) and (len(nextFewGames) != 0)): + for i in range(len(nextFewGames)): + print(j, '.', nextFewGames[i]) + j += 1 + else: + print('There is no coming match in next few days!.') browser.quit() sys.exit(0) if __name__ == '__main__': - main() + main() \ No newline at end of file diff --git a/scripts/get_team_squad.py b/scripts/get_team_squad.py index 2ba8561..45cf84c 100644 --- a/scripts/get_team_squad.py +++ b/scripts/get_team_squad.py @@ -14,7 +14,7 @@ def main(): window_size = "1200,800" timeout = 20 team_name = sys.argv[1] - # team_name = 'Real Madrid' + chrome_options = Options() chrome_options.binary_location = os.environ.get('GOOGLE_CHROME_SHIM', None) chrome_options.add_argument("--window-size=%s" % window_size) @@ -79,7 +79,7 @@ def main(): print(url) print(formation) - # print(whoPlay) + for i in whoPlay: print(i) From 29cbb2bdf3bdcf9525096ffacf8111c2f1ddf6b9 Mon Sep 17 00:00:00 2001 From: tnguyen452 Date: Tue, 17 Apr 2018 17:20:12 -0400 Subject: [PATCH 18/41] fix schedule --- data/get_data.js | 16 ++++++++- functions/handleCases.js | 2 +- functions/informationLookup.js | 61 +++++++++++++++++++++++++++++++--- functions/sendResponse.js | 50 +++++++++++++++++++++++++--- scripts/get_player_new.py | 0 scripts/get_player_news.py | 0 scripts/get_team_coach.py | 59 ++++++++++++++++++++++++++++++++ scripts/get_team_schedule.py | 23 ++++++++----- scripts/get_team_video.py | 59 ++++++++++++++++++++++++++++++++ 9 files changed, 250 insertions(+), 20 deletions(-) create mode 100644 scripts/get_player_new.py create mode 100644 scripts/get_player_news.py create mode 100644 scripts/get_team_coach.py create mode 100644 scripts/get_team_video.py diff --git a/data/get_data.js b/data/get_data.js index 29cecf7..ad5b02a 100644 --- a/data/get_data.js +++ b/data/get_data.js @@ -45,7 +45,21 @@ module.exports = { }) }, get_team_coach: function (team_name, callback) { - PythonShell.run('./scripts/get_team_news.py', {args: [team_name]}, (err, data) => { + PythonShell.run('./scripts/get_team_coach.py', {args: [team_name]}, (err, data) => { + spawn('killall', ['-9', 'chrome']); + spawn('killall', ['-9', 'chromedriver']); + callback(err, data); + }) + }, + get_team_video: function (team_name, callback) { + PythonShell.run('./scripts/get_team_video.py', {args: [team_name]}, (err, data) => { + spawn('killall', ['-9', 'chrome']); + spawn('killall', ['-9', 'chromedriver']); + callback(err, data); + }) + }, + get_player_news: function (team_name, callback) { + PythonShell.run('./scripts/get_player_news.py', {args: [player_name]}, (err, data) => { spawn('killall', ['-9', 'chrome']); spawn('killall', ['-9', 'chromedriver']); callback(err, data); diff --git a/functions/handleCases.js b/functions/handleCases.js index c8fa701..acf1ad8 100644 --- a/functions/handleCases.js +++ b/functions/handleCases.js @@ -31,7 +31,7 @@ function teamOptions(sender_psid, teamName, imageURL) { } function teamData(sender_psid, teamName) { - let choices = ['Team News', 'Team Squad', 'Team Schedules', 'Team Coach', 'Go Back']; + let choices = ['Team News', 'Latest Highlight', 'Team Squad', 'Team Schedules', 'Team Coach', 'Go Back']; let response = { 'text': `Please select the option of data you want` } diff --git a/functions/informationLookup.js b/functions/informationLookup.js index 5b02ff0..fae5027 100644 --- a/functions/informationLookup.js +++ b/functions/informationLookup.js @@ -170,7 +170,6 @@ function matchLookup(sender_psid, key, status) { console.log("waiting..."); sendResponse.directMessage(sender_psid, response); - // In case user want the Next Match Schedule if (status.includes('Next Match')) { @@ -285,7 +284,7 @@ function matchLookup(sender_psid, key, status) { }, 1000); } }) - } + } // In case user want to see the lastest Team News else if (status.includes('Team News')) { @@ -403,6 +402,7 @@ function matchLookup(sender_psid, key, status) { "json": true, }, (err, res, body) => { let length = reply[0] + console.log("length: ", length) let oldMatches = '' let nextMatches = '' @@ -411,13 +411,26 @@ function matchLookup(sender_psid, key, status) { oldMatches += reply[i] + '\n' } - // For the next matches Need to debug for next match if there are no coming match - for (var j = 6; j < (6 + length)-1; j++) { + // For the next coming matches + for (var j = 6; j < 6 + length; j++) { nextMatches += reply[j] + '\n' } + // if (length > 5) { + // for (var j = 6; j < (6 + 5); j++) { + // nextMatches += reply[j] + '\n' + // } + // } else if ((length <= 5) && (length != 0)) { + // for (var j = 6; j < (6 + length); j++) { + // nextMatches += reply[j] + '\n' + // } + // } else { + // for (var j = 6; j < 7; j++) { + // nextMatches += reply[j] + '\n' + // } + // } response = { - "text" : `SOME RECENTLY MATCHES:\n${oldMatches} SOME MATCHES COMING UP:\n${nextMatches}` + "text" : `SOME RECENTLY MATCHES:\n${oldMatches}\nSOME COMING UP MATCHES:\n${nextMatches}` } sendResponse.directMessage(sender_psid, response); console.log("replied"); @@ -435,6 +448,44 @@ function matchLookup(sender_psid, key, status) { sendResponse.directMessage(sender_psid, response); console.log("reply"); } + + else if (status.includes('Latest Highlight')) { + data.get_team_video(key, (err, reply) => { + if (err) { + response = { + "text" : `Cannot find the current Team video: ${key}` + } + sendResponse.directMessage(sender_psid, response); + } + else if (key) { + request({ + "uri": "https://graph.facebook.com/v2.6/" + sender_psid, + "qs" : {"access_token": process.env.PAGE_ACCESS_TOKEN, fields: "timezone"}, + "method": "GET", + "json": true, + }, (err, res, body) => { + if (err) { + console.error("Unable to send message:" + err); + } + else { + request({ + "uri": "https://graph.facebook.com/v2.6/" + sender_psid, + "qs" : {"access_token": process.env.PAGE_ACCESS_TOKEN, fields: "timezone"}, + "method": "GET", + "json": true, + }, (err, res, body) => { + let url = reply[0]; + let title = reply[1]; + let currentVideo = reply[2]; + + sendResponse.mediaPlay(sender_psid, title, currentVideo, url); + console.log("replied"); + }) + } + }) + } + }) + } } }, 1200) } diff --git a/functions/sendResponse.js b/functions/sendResponse.js index c07c54d..7f18d29 100644 --- a/functions/sendResponse.js +++ b/functions/sendResponse.js @@ -253,12 +253,12 @@ function sendReminder(sender_psid, response, payloadCharacteristic, match) { }, "message": { "text": response["text"], - "quick_replies": - [ + "quick_replies": + [ { 'content_type': 'text', 'title': 'Yes', - 'payload': payloadCharacteristic + 'YES_' + match + 'payload': payloadCharacteristic + 'YES_' + match }, { 'content_type': 'text', @@ -282,6 +282,47 @@ function sendReminder(sender_psid, response, payloadCharacteristic, match) { }); } +function mediaPlay(sender_psid, title, currentVideo, url) { + let request_body = { + "recipient": { + "id": sender_psid + }, + "messages": { + "attachment": { + "type": "template", + "payload": { + "template_type": "media", + "elements" : [ + { + "media_type" : "Video", + "url": currentVideo, + "buttons" : [ + { + "type": 'web_url', + "url": url, + "title": 'See More Video', + } + ] + } + ] + } + } + } + } + + // Send the HTTP request to the Messenger Platform + request({ + "uri": "https://graph.facebook.com/v2.6/me/messages", + "qs": { "access_token": process.env.PAGE_ACCESS_TOKEN}, + "method": "POST", + "json": request_body + }, (err, res, body) => { + if (err) { + console.error("Unable to send message:" + err); + } + }); +} + module.exports = { directMessage, quickReply, @@ -289,5 +330,6 @@ module.exports = { teamOptionChoose, teamNewsURL, playerReply, - sendReminder + sendReminder, + mediaPlay }; \ No newline at end of file diff --git a/scripts/get_player_new.py b/scripts/get_player_new.py new file mode 100644 index 0000000..e69de29 diff --git a/scripts/get_player_news.py b/scripts/get_player_news.py new file mode 100644 index 0000000..e69de29 diff --git a/scripts/get_team_coach.py b/scripts/get_team_coach.py new file mode 100644 index 0000000..679b5d0 --- /dev/null +++ b/scripts/get_team_coach.py @@ -0,0 +1,59 @@ +from selenium import webdriver +from selenium.webdriver.chrome.options import Options +from selenium.webdriver.common.by import By +from selenium.webdriver.support.ui import WebDriverWait +from selenium.webdriver.support import expected_conditions as EC +from selenium.common.exceptions import TimeoutException +from bs4 import BeautifulSoup + +import sys +import os +import unicodedata + +def main(): + window_size = "1200,800" + timeout = 20 + team_name = sys.argv[1] + + chrome_options = Options() + chrome_options.binary_location = os.environ.get('GOOGLE_CHROME_SHIM', None) + chrome_options.add_argument("--window-size=%s" % window_size) + chrome_options.add_argument("--headless") + chrome_options.add_argument("no-sandbox") + + browser = webdriver.Chrome(chrome_options=chrome_options) + browser.get("http://www.espn.com/espn/story/_/id/21087319/soccer-teams") + + WebDriverWait(browser, timeout).until(EC.visibility_of_element_located((By.XPATH, "//a[@id='global-search-trigger']"))) + browser.find_element_by_xpath("//a[@id='global-search-trigger']").click() + + WebDriverWait(browser, timeout).until(EC.visibility_of_element_located((By.CLASS_NAME, "search-box"))) + browser.find_element_by_class_name('search-box').send_keys(team_name) + + browser.implicitly_wait(3) + + try: + WebDriverWait(browser, timeout).until(EC.visibility_of_element_located((By.XPATH, "//*[@id='global-search']/div/div/div[1]/ul/li/a/div[2]/span[1]"))) + except TimeoutException: + print("Cannot find team") + browser.quit() + sys.exit(1) + else: + browser.find_element_by_xpath("//*[@id='global-search']/div/div/div[1]/ul/li/a/div[2]/span[1]").click() + + WebDriverWait(browser, timeout).until(EC.visibility_of_element_located((By.XPATH, "//*[@id='global-nav-secondary']/div/ul[2]/li[4]/a/span[1]"))) + browser.find_element_by_xpath("//*[@id='global-nav-secondary']/div/ul[2]/li[4]/a/span[1]").click() + + browser.switch_to_window(browser.window_handles[1]) + browser.implicitly_wait(1) + + html = browser.page_source + url = browser.current_url + soup = BeautifulSoup(html, "html.parser") + + + browser.quit() + sys.exit(0) + +if __name__ == '__main__': + main() \ No newline at end of file diff --git a/scripts/get_team_schedule.py b/scripts/get_team_schedule.py index 35abcef..808581a 100644 --- a/scripts/get_team_schedule.py +++ b/scripts/get_team_schedule.py @@ -8,6 +8,7 @@ import sys import os +import unicodedata def main(): window_size = "1200,800" @@ -71,11 +72,15 @@ def main(): for i in range(len(passGames) - 5, len(passGames)): if ((passGames[i].find('div', {'class' : 'score-column score-away-team score-team'}).find('div', {'class' : 'team-name winner'}) == None) or (passGames[i].find('div', {'class' : 'score-column score-home-team score-team'}).find('div', {'class' : 'team-name winner'}) == None)): - awayTeams.append(passGames[i].find('div', {'class' : 'score-column score-away-team score-team'}).find('div', {'class' : 'team-name'}).text) - homeTeams.append(passGames[i].find('div', {'class' : 'score-column score-home-team score-team'}).find('div', {'class' : 'team-name'}).text) + team = passGames[i].find('div', {'class' : 'score-column score-away-team score-team'}).find('div', {'class' : 'team-name'}).text + teams = passGames[i].find('div', {'class' : 'score-column score-home-team score-team'}).find('div', {'class' : 'team-name'}).text + awayTeams.append(str(unicodedata.normalize('NFD', team).encode('ascii', 'ignore').decode("utf-8"))) + homeTeams.append(str(unicodedata.normalize('NFD', teams).encode('ascii', 'ignore').decode("utf-8"))) else: - awayTeams.append(passGames[i].find('div', {'class' : 'score-column score-away-team score-team'}).find('div', {'class' : 'team-name winner'}).text) - homeTeams.append(passGames[i].find('div', {'class' : 'score-column score-home-team score-team'}).find('div', {'class' : 'team-name winner'}).text) + team = passGames[i].find('div', {'class' : 'score-column score-away-team score-team'}).find('div', {'class' : 'team-name winner'}).text + teams = passGames[i].find('div', {'class' : 'score-column score-home-team score-team'}).find('div', {'class' : 'team-name winner'}).text + awayTeams.append(str(unicodedata.normalize('NFD', team).encode('ascii', 'ignore').decode("utf-8"))) + homeTeams.append(str(unicodedata.normalize('NFD', teams).encode('ascii', 'ignore').decode("utf-8"))) if((passGames[i].find('div', {'class' : 'score-column score-result'}).find('span', {'class' : 'home-score score-value winner'}) == None) or (passGames[i].find('div', {'class' : 'score-column score-result'}).find('span', {'class' : 'away-score score-value'}) == None)): @@ -98,20 +103,20 @@ def main(): passFewGames.append(homeTeams[i] + ' [' + scoresHome[i] + '] - ' + '[' + scoresAway[i] + '] ' + awayTeams[i] + ' on ' + date[i] + ' in ' + league[i]) - print(len(nextFewGames)); + print(len(nextFewGames)) # For the pass 5 games for i, j in enumerate(passFewGames, 1): - print(i, '.', j) + print(str(i) + '.' + j) # For the next few games j = 1 if (len(nextFewGames) > 5): for i in range(0, 5): - print(j, '.', nextFewGames[i]) + print(str(j) + '.' + nextFewGames[i]) j += 1 - elif ((len(nextFewGames) < 5) and (len(nextFewGames) != 0)): + elif ((len(nextFewGames) <= 5) and (len(nextFewGames) != 0)): for i in range(len(nextFewGames)): - print(j, '.', nextFewGames[i]) + print(str(j) + '.' + nextFewGames[i]) j += 1 else: print('There is no coming match in next few days!.') diff --git a/scripts/get_team_video.py b/scripts/get_team_video.py new file mode 100644 index 0000000..3ef85d9 --- /dev/null +++ b/scripts/get_team_video.py @@ -0,0 +1,59 @@ +from selenium import webdriver +from selenium.webdriver.chrome.options import Options +from selenium.webdriver.common.by import By +from selenium.webdriver.support.ui import WebDriverWait +from selenium.webdriver.support import expected_conditions as EC +from selenium.common.exceptions import TimeoutException +from bs4 import BeautifulSoup + +import sys +import os + +def main(): + window_size = "1200,800" + timeout = 20 + team_name = sys.argv[1] + + chrome_options = Options() + chrome_options.binary_location = os.environ.get('GOOGLE_CHROME_SHIM', None) + chrome_options.add_argument("--window-size=%s" % window_size) + chrome_options.add_argument("--headless") + chrome_options.add_argument("no-sandbox") + + browser = webdriver.Chrome(chrome_options=chrome_options) + browser.get("http://www.soccerhighlightstoday.com/") + + WebDriverWait(browser, timeout).until(EC.visibility_of_element_located((By.CLASS_NAME, "td-search-btns-wrap"))) + browser.find_element_by_class_name("td-search-btns-wrap").find_element_by_xpath("//a[@id='td-header-search-button']").click() + + WebDriverWait(browser, timeout).until(EC.visibility_of_element_located((By.XPATH, "//input[@id='td-header-search']"))) + browser.find_element_by_xpath("//input[@id='td-header-search']").send_keys(team_name) + + browser.implicitly_wait(4) + + try: + WebDriverWait(browser, timeout).until(EC.visibility_of_element_located((By.XPATH, "//*[@id='td-aj-search']/div/div[1]/div[2]/h3/a"))) + except TimeoutException: + print("Cannot find team") + browser.quit() + sys.exit(1) + else: + browser.find_element_by_xpath("//*[@id='td-aj-search']/div/div[1]/div[2]/h3/a").click() + + browser.implicitly_wait(1) + html = browser.page_source + url = browser.current_url + soup = BeautifulSoup(html, "html.parser") + + title = soup.find('div', {'class' : 'td-post-header'}).find('header', {'class' : 'td-post-title'}).find('h1', {'class' : 'entry-title'}).text + videoURL = soup.find('div', {'class' : 'td-pb-span8 td-main-content'}).find('div', {'class' : 'td-ss-main-content'}).find('article').find('div', {'class' : 'td-post-content'}).find('div', {'class' : 'acp_wrapper'}).find('div', {'class' : 'acp_content'}).find('div', {'class' : 'brid brid-default-skin brid-playing'}).find('video')['src'] + + print(url) + print(title) + print(videoURL) + + browser.quit() + sys.exit(0) + +if __name__ == '__main__': + main() \ No newline at end of file From 8fd337339898c6589e1b9b5ed2f6900be6497511 Mon Sep 17 00:00:00 2001 From: tnguyen452 Date: Fri, 20 Apr 2018 23:47:19 -0400 Subject: [PATCH 19/41] fix schedule --- functions/informationLookup.js | 25 ++++++++++--------------- scripts/get_team_schedule.py | 25 +++++++++++++++---------- 2 files changed, 25 insertions(+), 25 deletions(-) diff --git a/functions/informationLookup.js b/functions/informationLookup.js index fae5027..da04241 100644 --- a/functions/informationLookup.js +++ b/functions/informationLookup.js @@ -412,22 +412,17 @@ function matchLookup(sender_psid, key, status) { } // For the next coming matches - for (var j = 6; j < 6 + length; j++) { - nextMatches += reply[j] + '\n' + if (length > 5) { + for (var j = 6; j < (6 + 5); j++) { + nextMatches += reply[j] + '\n' + } + } else if ((length <= 5) && (length != 0)) { + for (var j = 6; j < (6 + length); j++) { + nextMatches += reply[j] + '\n' + } + } else { + nextMatches = 'There is no coming match in next few days!.'; } - // if (length > 5) { - // for (var j = 6; j < (6 + 5); j++) { - // nextMatches += reply[j] + '\n' - // } - // } else if ((length <= 5) && (length != 0)) { - // for (var j = 6; j < (6 + length); j++) { - // nextMatches += reply[j] + '\n' - // } - // } else { - // for (var j = 6; j < 7; j++) { - // nextMatches += reply[j] + '\n' - // } - // } response = { "text" : `SOME RECENTLY MATCHES:\n${oldMatches}\nSOME COMING UP MATCHES:\n${nextMatches}` diff --git a/scripts/get_team_schedule.py b/scripts/get_team_schedule.py index 808581a..f960770 100644 --- a/scripts/get_team_schedule.py +++ b/scripts/get_team_schedule.py @@ -104,22 +104,27 @@ def main(): + league[i]) print(len(nextFewGames)) + # For the pass 5 games for i, j in enumerate(passFewGames, 1): print(str(i) + '.' + j) # For the next few games j = 1 - if (len(nextFewGames) > 5): - for i in range(0, 5): - print(str(j) + '.' + nextFewGames[i]) - j += 1 - elif ((len(nextFewGames) <= 5) and (len(nextFewGames) != 0)): - for i in range(len(nextFewGames)): - print(str(j) + '.' + nextFewGames[i]) - j += 1 - else: - print('There is no coming match in next few days!.') + for i in range(0, len(nextFewGames)): + print(str(j) + '.' + nextFewGames[i]) + j += 1 + + # if (len(nextFewGames) > 5): + # for i in range(0, 5): + # print(str(j) + '.' + nextFewGames[i]) + # j += 1 + # elif ((len(nextFewGames) <= 5) and (len(nextFewGames) != 0)): + # for i in range(len(nextFewGames)): + # print(str(j) + '.' + nextFewGames[i]) + # j += 1 + # else: + # print('There is no coming match in next few days!.') browser.quit() sys.exit(0) From 5c0a480383f664268942b349d4f0f364d7a17902 Mon Sep 17 00:00:00 2001 From: tnguyen452 Date: Fri, 20 Apr 2018 23:52:56 -0400 Subject: [PATCH 20/41] fix real madrid --- functions/informationLookup.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/functions/informationLookup.js b/functions/informationLookup.js index da04241..70468ca 100644 --- a/functions/informationLookup.js +++ b/functions/informationLookup.js @@ -412,15 +412,15 @@ function matchLookup(sender_psid, key, status) { } // For the next coming matches - if (length > 5) { + if (length >= 5) { for (var j = 6; j < (6 + 5); j++) { nextMatches += reply[j] + '\n' } - } else if ((length <= 5) && (length != 0)) { + } else if ((length < 5) && (length != 0)) { for (var j = 6; j < (6 + length); j++) { nextMatches += reply[j] + '\n' } - } else { + } else if (length == 0) { nextMatches = 'There is no coming match in next few days!.'; } From 4095f25e08926fc3d98a5f1f69456f031b6791c1 Mon Sep 17 00:00:00 2001 From: tnguyen452 Date: Sat, 21 Apr 2018 02:18:40 -0400 Subject: [PATCH 21/41] fix timeout --- functions/handleCases.js | 2 +- functions/informationLookup.js | 51 +++------------------------------- functions/sendResponse.js | 6 ++-- scripts/get_next_game.py | 26 +++++++++++------ scripts/get_player_new.py | 0 scripts/get_player_news.py | 0 scripts/get_team_news.py | 30 ++++++++++++-------- scripts/get_team_schedule.py | 47 ++++++++++++++++--------------- scripts/get_team_squad.py | 4 +-- scripts/get_team_video.py | 19 +++++++++---- 10 files changed, 84 insertions(+), 101 deletions(-) delete mode 100644 scripts/get_player_new.py delete mode 100644 scripts/get_player_news.py diff --git a/functions/handleCases.js b/functions/handleCases.js index acf1ad8..762dbba 100644 --- a/functions/handleCases.js +++ b/functions/handleCases.js @@ -31,7 +31,7 @@ function teamOptions(sender_psid, teamName, imageURL) { } function teamData(sender_psid, teamName) { - let choices = ['Team News', 'Latest Highlight', 'Team Squad', 'Team Schedules', 'Team Coach', 'Go Back']; + let choices = ['Team News', 'Team Squad', 'Team Schedules', 'Go Back']; let response = { 'text': `Please select the option of data you want` } diff --git a/functions/informationLookup.js b/functions/informationLookup.js index 70468ca..2252a31 100644 --- a/functions/informationLookup.js +++ b/functions/informationLookup.js @@ -416,7 +416,7 @@ function matchLookup(sender_psid, key, status) { for (var j = 6; j < (6 + 5); j++) { nextMatches += reply[j] + '\n' } - } else if ((length < 5) && (length != 0)) { + } else if ((length < 5) && (length > 0)) { for (var j = 6; j < (6 + length); j++) { nextMatches += reply[j] + '\n' } @@ -434,52 +434,9 @@ function matchLookup(sender_psid, key, status) { }) } }) - } - - else if (status.includes('Team Coach')) { - response = { - "text": `We currently working on this futures for coach` - } - sendResponse.directMessage(sender_psid, response); - console.log("reply"); - } - - else if (status.includes('Latest Highlight')) { - data.get_team_video(key, (err, reply) => { - if (err) { - response = { - "text" : `Cannot find the current Team video: ${key}` - } - sendResponse.directMessage(sender_psid, response); - } - else if (key) { - request({ - "uri": "https://graph.facebook.com/v2.6/" + sender_psid, - "qs" : {"access_token": process.env.PAGE_ACCESS_TOKEN, fields: "timezone"}, - "method": "GET", - "json": true, - }, (err, res, body) => { - if (err) { - console.error("Unable to send message:" + err); - } - else { - request({ - "uri": "https://graph.facebook.com/v2.6/" + sender_psid, - "qs" : {"access_token": process.env.PAGE_ACCESS_TOKEN, fields: "timezone"}, - "method": "GET", - "json": true, - }, (err, res, body) => { - let url = reply[0]; - let title = reply[1]; - let currentVideo = reply[2]; - - sendResponse.mediaPlay(sender_psid, title, currentVideo, url); - console.log("replied"); - }) - } - }) - } - }) + // setTimeout(() => { + // handleCases.getContinue(sender_psid); + // }, 1000) } } }, 1200) diff --git a/functions/sendResponse.js b/functions/sendResponse.js index 7f18d29..a5ac804 100644 --- a/functions/sendResponse.js +++ b/functions/sendResponse.js @@ -282,7 +282,7 @@ function sendReminder(sender_psid, response, payloadCharacteristic, match) { }); } -function mediaPlay(sender_psid, title, currentVideo, url) { +function mediaPlay(sender_psid, title, currentVideo, urlVi) { let request_body = { "recipient": { "id": sender_psid @@ -299,8 +299,8 @@ function mediaPlay(sender_psid, title, currentVideo, url) { "buttons" : [ { "type": 'web_url', - "url": url, - "title": 'See More Video', + "url": urlVi, + "title": 'See more videos at', } ] } diff --git a/scripts/get_next_game.py b/scripts/get_next_game.py index f4d4215..0bd0da4 100644 --- a/scripts/get_next_game.py +++ b/scripts/get_next_game.py @@ -5,6 +5,7 @@ from selenium.webdriver.support import expected_conditions as EC from selenium.common.exceptions import TimeoutException from bs4 import BeautifulSoup +from unidecode import unidecode import sys import os @@ -31,14 +32,21 @@ def main(): browser.implicitly_wait(4) - try: - WebDriverWait(browser, timeout).until(EC.visibility_of_element_located((By.XPATH, "//*[@id='global-search']/div/div/div[1]/ul/li/a/div[2]/span[1]"))) - except TimeoutException: + WebDriverWait(browser, timeout).until(EC.visibility_of_element_located((By.XPATH, "//*[@id='global-search']/div/div/div[1]/ul"))) + + search_results = browser.find_element_by_xpath("//*[@id='global-search']/div/div/div[1]/ul").find_elements_by_class_name("search_results__details") + found = False + + for result in search_results: + if result.find_element_by_class_name('search_results__cat').text == 'Soccer': + result.find_element_by_class_name('search_results__cat').click() + found = True + break + + if not found: print("Cannot find team") browser.quit() sys.exit(1) - else: - browser.find_element_by_xpath("//*[@id='global-search']/div/div/div[1]/ul/li/a/div[2]/span[1]").click() WebDriverWait(browser, timeout).until(EC.visibility_of_element_located((By.XPATH, "//*[@id='global-nav-secondary']/div/ul[2]/li[4]/a/span[1]"))) newHtml = browser.page_source @@ -62,10 +70,10 @@ def main(): date = next_game.find('div', {'class': 'game-status'}).find('span', {'data-behavior': 'date_time'})['data-date'] teamImageUrl = newSoup.find('head').findAll('meta')[11]['content'] - print(home_team) - print(away_team) - print(date) - print(game_details) + print(unidecode(home_team)) + print(unidecode(away_team)) + print(unidecode(date)) + print(unidecode(game_details)) print(teamImageUrl) browser.quit() diff --git a/scripts/get_player_new.py b/scripts/get_player_new.py deleted file mode 100644 index e69de29..0000000 diff --git a/scripts/get_player_news.py b/scripts/get_player_news.py deleted file mode 100644 index e69de29..0000000 diff --git a/scripts/get_team_news.py b/scripts/get_team_news.py index 44c8847..3553c67 100644 --- a/scripts/get_team_news.py +++ b/scripts/get_team_news.py @@ -12,12 +12,13 @@ def main(): window_size = "1200,800" timeout = 20 - team_name = sys.argv[1] + # team_name = sys.argv[1] + team_name = 'Manchester United' chrome_options = Options() chrome_options.binary_location = os.environ.get('GOOGLE_CHROME_SHIM', None) chrome_options.add_argument("--window-size=%s" % window_size) - chrome_options.add_argument("--headless") + # chrome_options.add_argument("--headless") chrome_options.add_argument("no-sandbox") browser = webdriver.Chrome(chrome_options=chrome_options) @@ -47,17 +48,24 @@ def main(): browser.find_element_by_xpath("//*[@id='global-nav-secondary']/div/ul[2]/li[4]/a/span[1]").click() browser.switch_to_window(browser.window_handles[1]) - browser.implicitly_wait(1) + browser.implicitly_wait(3) - - imageUrl = newSoup.find('article', {'class': 'news-feed-item news-feed-story-package'}).find('figure', {'class': 'feed-item-figure '}).find('div', {'class': 'img-wrap'}).find('img')['data-default-src'] - newsTitle = newSoup.find('article', {'class': 'news-feed-item news-feed-story-package'}).find('div', {'class': 'text-container no-headlines'}).find('div', {'class': 'item-info-wrap'}).find('a').text - newsSubtitle = newSoup.find('article', {'class': 'news-feed-item news-feed-story-package'}).find('div', {'class': 'text-container no-headlines'}).find('div', {'class': 'item-info-wrap'}).find('p').text - print(url) - print(imageUrl) - print(newsTitle) - print(newsSubtitle) + imageUrl1 = newSoup.findAll('article') + # imageUrl1 = newSoup.find('article', {'class': 'news-feed-item news-feed-story-package'}).find('figure', {'class': 'feed-item-figure '}).find('div', {'class': 'img-wrap'}).find('img')['data-default-src'] + # imageUrl1 = newSoup.findAll('article', {'class' : 'news-feed-item news-feed-story-package'})[0].find('figure', {'class': 'feed-item-figure '}).find('div', {'class': 'img-wrap'}).find('img')['data-default-src'] + # imageUrl1 = newSoup.findAll('article', {'class' : 'news-feed-item news-feed-story-package'}) + # newsTitle1 = newSoup.findAll('article')[0].find('div', {'class': 'text-container no-headlines'}).find('div', {'class': 'item-info-wrap'}).find('a').text + # newsSubtitle1 = newSoup.findAll('article')[0].find('div', {'class': 'text-container no-headlines'}).find('div', {'class': 'item-info-wrap'}).find('p').text + # newsLink1 = newSoup.findAll('article')[0].find('a')['data-popup-href'] + + # imgageUrl2 = newSoup.find('article', {'class': 'news-feed-item news-feed-story-package'}).find('figure', {'class': 'feed-item-figure '}).find('div', {'class': 'img-wrap'}).find('img')['data-default-src'] + + # print(url) + print(imageUrl1) + # print(newsTitle1) + # print(newsSubtitle1) + # print(newsLink1) browser.quit() sys.exit(0) diff --git a/scripts/get_team_schedule.py b/scripts/get_team_schedule.py index f960770..57311b6 100644 --- a/scripts/get_team_schedule.py +++ b/scripts/get_team_schedule.py @@ -5,10 +5,10 @@ from selenium.webdriver.support import expected_conditions as EC from selenium.common.exceptions import TimeoutException from bs4 import BeautifulSoup +from unidecode import unidecode import sys import os -import unicodedata def main(): window_size = "1200,800" @@ -32,14 +32,21 @@ def main(): browser.implicitly_wait(3) - try: - WebDriverWait(browser, timeout).until(EC.visibility_of_element_located((By.XPATH, "//*[@id='global-search']/div/div/div[1]/ul/li/a/div[2]/span[1]"))) - except TimeoutException: + WebDriverWait(browser, timeout).until(EC.visibility_of_element_located((By.XPATH, "//*[@id='global-search']/div/div/div[1]/ul"))) + + search_results = browser.find_element_by_xpath("//*[@id='global-search']/div/div/div[1]/ul").find_elements(By.XPATH, ".//*") + found = False + + for result in search_results: + if result.find_element_by_class_name('search_results__cat').text == 'Soccer': + result.find_element_by_class_name('search_results__cat').click() + found = True + break + + if not found: print("Cannot find team") browser.quit() sys.exit(1) - else: - browser.find_element_by_xpath("//*[@id='global-search']/div/div/div[1]/ul/li/a/div[2]/span[1]").click() WebDriverWait(browser, timeout).until(EC.visibility_of_element_located((By.XPATH, "//*[@id='global-nav-secondary']/div/ul[2]/li[4]/a/span[1]"))) browser.find_element_by_xpath("//*[@id='global-nav-secondary']/div/ul[2]/li[4]/a/span[1]").click() @@ -61,9 +68,16 @@ def main(): league = [] date = [] nextGames = soup.find_all('a', "score-list upcoming") + nextGamesInfo = soup.find_all('a', "score-list upcoming has-info") passGames = soup.find_all('a', ["score-list complete", "score-list complete has-info"]) - for i in range(1, len(nextGames)): + for i in range(1, len(nextGamesInfo)): + nextFewGames.append(nextGamesInfo[i].find('div', {'class' : 'score-column score-home-team score-team'}).find('div', {'class' : 'team-name'}).text + + ' Vs ' + nextGamesInfo[i].find('div', {'class' : 'score-column score-away-team score-team'}).find('div', {'class' : 'team-name'}).text + + ' at ' + nextGamesInfo[i].find('div', {'class' : 'date'}).text + ' ' + nextGamesInfo[i].find('div', {'class' : 'time'}).text + ' in ' + + nextGamesInfo[i].find('div', {'class' : 'league'}).text) + + for i in range(0, len(nextGames)): nextFewGames.append(nextGames[i].find('div', {'class' : 'score-column score-home-team score-team'}).find('div', {'class' : 'team-name'}).text + ' Vs ' + nextGames[i].find('div', {'class' : 'score-column score-away-team score-team'}).find('div', {'class' : 'team-name'}).text + ' at ' + nextGames[i].find('div', {'class' : 'date'}).text + ' ' + nextGames[i].find('div', {'class' : 'time'}).text + ' in ' @@ -74,13 +88,13 @@ def main(): (passGames[i].find('div', {'class' : 'score-column score-home-team score-team'}).find('div', {'class' : 'team-name winner'}) == None)): team = passGames[i].find('div', {'class' : 'score-column score-away-team score-team'}).find('div', {'class' : 'team-name'}).text teams = passGames[i].find('div', {'class' : 'score-column score-home-team score-team'}).find('div', {'class' : 'team-name'}).text - awayTeams.append(str(unicodedata.normalize('NFD', team).encode('ascii', 'ignore').decode("utf-8"))) - homeTeams.append(str(unicodedata.normalize('NFD', teams).encode('ascii', 'ignore').decode("utf-8"))) + awayTeams.append(unidecode(team)) + homeTeams.append(unidecode(teams)) else: team = passGames[i].find('div', {'class' : 'score-column score-away-team score-team'}).find('div', {'class' : 'team-name winner'}).text teams = passGames[i].find('div', {'class' : 'score-column score-home-team score-team'}).find('div', {'class' : 'team-name winner'}).text - awayTeams.append(str(unicodedata.normalize('NFD', team).encode('ascii', 'ignore').decode("utf-8"))) - homeTeams.append(str(unicodedata.normalize('NFD', teams).encode('ascii', 'ignore').decode("utf-8"))) + awayTeams.append(unidecode(team)) + homeTeams.append(unidecode(teams)) if((passGames[i].find('div', {'class' : 'score-column score-result'}).find('span', {'class' : 'home-score score-value winner'}) == None) or (passGames[i].find('div', {'class' : 'score-column score-result'}).find('span', {'class' : 'away-score score-value'}) == None)): @@ -115,17 +129,6 @@ def main(): print(str(j) + '.' + nextFewGames[i]) j += 1 - # if (len(nextFewGames) > 5): - # for i in range(0, 5): - # print(str(j) + '.' + nextFewGames[i]) - # j += 1 - # elif ((len(nextFewGames) <= 5) and (len(nextFewGames) != 0)): - # for i in range(len(nextFewGames)): - # print(str(j) + '.' + nextFewGames[i]) - # j += 1 - # else: - # print('There is no coming match in next few days!.') - browser.quit() sys.exit(0) diff --git a/scripts/get_team_squad.py b/scripts/get_team_squad.py index 45cf84c..03fdbaa 100644 --- a/scripts/get_team_squad.py +++ b/scripts/get_team_squad.py @@ -28,7 +28,7 @@ def main(): browser.find_element_by_xpath("//input[@class='site-search__input site-search--inpage__input']").click() browser.find_element_by_xpath("//input[@class='site-search__input site-search--inpage__input']").send_keys(team_name) - + browser.implicitly_wait(3) try: @@ -82,7 +82,7 @@ def main(): for i in whoPlay: print(i) - + browser.quit() sys.exit(0) diff --git a/scripts/get_team_video.py b/scripts/get_team_video.py index 3ef85d9..e935e01 100644 --- a/scripts/get_team_video.py +++ b/scripts/get_team_video.py @@ -12,12 +12,13 @@ def main(): window_size = "1200,800" timeout = 20 - team_name = sys.argv[1] - + # team_name = sys.argv[1] + team_name = 'Arsenal' + chrome_options = Options() chrome_options.binary_location = os.environ.get('GOOGLE_CHROME_SHIM', None) chrome_options.add_argument("--window-size=%s" % window_size) - chrome_options.add_argument("--headless") + # chrome_options.add_argument("--headless") chrome_options.add_argument("no-sandbox") browser = webdriver.Chrome(chrome_options=chrome_options) @@ -29,7 +30,7 @@ def main(): WebDriverWait(browser, timeout).until(EC.visibility_of_element_located((By.XPATH, "//input[@id='td-header-search']"))) browser.find_element_by_xpath("//input[@id='td-header-search']").send_keys(team_name) - browser.implicitly_wait(4) + browser.implicitly_wait(5) try: WebDriverWait(browser, timeout).until(EC.visibility_of_element_located((By.XPATH, "//*[@id='td-aj-search']/div/div[1]/div[2]/h3/a"))) @@ -40,13 +41,19 @@ def main(): else: browser.find_element_by_xpath("//*[@id='td-aj-search']/div/div[1]/div[2]/h3/a").click() - browser.implicitly_wait(1) + browser.implicitly_wait(3) html = browser.page_source url = browser.current_url soup = BeautifulSoup(html, "html.parser") title = soup.find('div', {'class' : 'td-post-header'}).find('header', {'class' : 'td-post-title'}).find('h1', {'class' : 'entry-title'}).text - videoURL = soup.find('div', {'class' : 'td-pb-span8 td-main-content'}).find('div', {'class' : 'td-ss-main-content'}).find('article').find('div', {'class' : 'td-post-content'}).find('div', {'class' : 'acp_wrapper'}).find('div', {'class' : 'acp_content'}).find('div', {'class' : 'brid brid-default-skin brid-playing'}).find('video')['src'] + # htmlBrow = soup.find('div', {'class' : 'td-theme-wrap'}).find('div', {'class' : 'td-main-content-wrap td-container-wrap'}).find('div', {'class' : 'td-container td-post-template-5 '}).find('div', {'class' : 'td-pb-row'}).find('div', {'class' : 'td-pb-span8 td-main-content'}).find('div', {'class' : 'td-ss-main-content'}).find('article').find('div', {'class' : 'td-post-content'}).find('div', {'class' : 'acp_wrapper'}).find('div', {'class' : 'acp_content'}).find('video', {'class' : 'brid-tech brid-animate'}) + + # if (htmlBrow.find('div', {'class' : 'brid brid-default-skin brid-pause'}) == None): + videoURL = soup.find('div', {'class' : 'td-pb-span8 td-main-content'}).find('div', {'class' : 'td-ss-main-content'}).find('article').find('div', {'class' : 'td-post-content'}).find('div', {'class' : 'acp_wrapper'}).find('div', {'class' : 'acp_content'}).find('div').find('video') + # videoURL = soup.find('body').findAll('div')[6].findAll('div')[2].find('div').findAll('div')[2].find('div').find('div').find('article').findAll('div')[2].find('div').findAll('div')[2].find('div').find('video') + # else: + # videoURL = soup.find('div', {'class' : 'td-pb-span8 td-main-content'}).find('div', {'class' : 'td-ss-main-content'}).find('article').find('div', {'class' : 'td-post-content'}).find('div', {'class' : 'acp_wrapper'}).find('div', {'class' : 'acp_content'}).find('div', {'class' : 'brid brid-default-skin brid-pause'}).find('video', {'class' : 'brid-tech brid-animate'})['src'] print(url) print(title) From 0c5d716ff0a8d55bbdc13269941d110457d4256b Mon Sep 17 00:00:00 2001 From: tnguyen452 Date: Sun, 29 Apr 2018 03:58:53 -0400 Subject: [PATCH 22/41] fix schedule underfine at some team --- functions/informationLookup.js | 6 ++++-- scripts/get_team_schedule.py | 8 ++++---- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/functions/informationLookup.js b/functions/informationLookup.js index 2252a31..b47e69e 100644 --- a/functions/informationLookup.js +++ b/functions/informationLookup.js @@ -402,7 +402,7 @@ function matchLookup(sender_psid, key, status) { "json": true, }, (err, res, body) => { let length = reply[0] - console.log("length: ", length) + console.log("Total Next coming match: ", length); let oldMatches = '' let nextMatches = '' @@ -416,16 +416,18 @@ function matchLookup(sender_psid, key, status) { for (var j = 6; j < (6 + 5); j++) { nextMatches += reply[j] + '\n' } + break; } else if ((length < 5) && (length > 0)) { for (var j = 6; j < (6 + length); j++) { nextMatches += reply[j] + '\n' } + break; } else if (length == 0) { nextMatches = 'There is no coming match in next few days!.'; } response = { - "text" : `SOME RECENTLY MATCHES:\n${oldMatches}\nSOME COMING UP MATCHES:\n${nextMatches}` + "text" : `SOME RECENTLY MATCHES:\n${oldMatches}\nSOME COMING MATCHES:\n${nextMatches}` } sendResponse.directMessage(sender_psid, response); console.log("replied"); diff --git a/scripts/get_team_schedule.py b/scripts/get_team_schedule.py index 57311b6..6ce360d 100644 --- a/scripts/get_team_schedule.py +++ b/scripts/get_team_schedule.py @@ -73,13 +73,13 @@ def main(): for i in range(1, len(nextGamesInfo)): nextFewGames.append(nextGamesInfo[i].find('div', {'class' : 'score-column score-home-team score-team'}).find('div', {'class' : 'team-name'}).text - + ' Vs ' + nextGamesInfo[i].find('div', {'class' : 'score-column score-away-team score-team'}).find('div', {'class' : 'team-name'}).text + + ' vs ' + nextGamesInfo[i].find('div', {'class' : 'score-column score-away-team score-team'}).find('div', {'class' : 'team-name'}).text + ' at ' + nextGamesInfo[i].find('div', {'class' : 'date'}).text + ' ' + nextGamesInfo[i].find('div', {'class' : 'time'}).text + ' in ' + nextGamesInfo[i].find('div', {'class' : 'league'}).text) for i in range(0, len(nextGames)): nextFewGames.append(nextGames[i].find('div', {'class' : 'score-column score-home-team score-team'}).find('div', {'class' : 'team-name'}).text - + ' Vs ' + nextGames[i].find('div', {'class' : 'score-column score-away-team score-team'}).find('div', {'class' : 'team-name'}).text + + ' vs ' + nextGames[i].find('div', {'class' : 'score-column score-away-team score-team'}).find('div', {'class' : 'team-name'}).text + ' at ' + nextGames[i].find('div', {'class' : 'date'}).text + ' ' + nextGames[i].find('div', {'class' : 'time'}).text + ' in ' + nextGames[i].find('div', {'class' : 'league'}).text) @@ -121,12 +121,12 @@ def main(): # For the pass 5 games for i, j in enumerate(passFewGames, 1): - print(str(i) + '.' + j) + print(str(i) + '. ' + j) # For the next few games j = 1 for i in range(0, len(nextFewGames)): - print(str(j) + '.' + nextFewGames[i]) + print(str(j) + '. ' + nextFewGames[i]) j += 1 browser.quit() From 8280f93f4840a95b87e88e97e7dd2906e687997d Mon Sep 17 00:00:00 2001 From: tnguyen452 Date: Sun, 29 Apr 2018 04:02:29 -0400 Subject: [PATCH 23/41] fix underfine --- functions/informationLookup.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/functions/informationLookup.js b/functions/informationLookup.js index b47e69e..13cb66d 100644 --- a/functions/informationLookup.js +++ b/functions/informationLookup.js @@ -416,13 +416,11 @@ function matchLookup(sender_psid, key, status) { for (var j = 6; j < (6 + 5); j++) { nextMatches += reply[j] + '\n' } - break; } else if ((length < 5) && (length > 0)) { for (var j = 6; j < (6 + length); j++) { nextMatches += reply[j] + '\n' } - break; - } else if (length == 0) { + } else { nextMatches = 'There is no coming match in next few days!.'; } From 78481ff4c3f028d13e27cab5951c4bc8a77d48d5 Mon Sep 17 00:00:00 2001 From: tnguyen452 Date: Sun, 29 Apr 2018 04:15:47 -0400 Subject: [PATCH 24/41] fix --- functions/informationLookup.js | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/functions/informationLookup.js b/functions/informationLookup.js index 13cb66d..c26c7b2 100644 --- a/functions/informationLookup.js +++ b/functions/informationLookup.js @@ -324,7 +324,6 @@ function matchLookup(sender_psid, key, status) { } }) } - }) } @@ -372,6 +371,9 @@ function matchLookup(sender_psid, key, status) { }) } }) + setTimeout(() => { + handleCases.getContinue(sender_psid); + }, 1000) } else if (status.includes('Team Schedules')) { @@ -427,6 +429,8 @@ function matchLookup(sender_psid, key, status) { response = { "text" : `SOME RECENTLY MATCHES:\n${oldMatches}\nSOME COMING MATCHES:\n${nextMatches}` } + console.log("next few games: ", nextMatches); + console.log("Message response: ", response); sendResponse.directMessage(sender_psid, response); console.log("replied"); }) @@ -434,9 +438,9 @@ function matchLookup(sender_psid, key, status) { }) } }) - // setTimeout(() => { - // handleCases.getContinue(sender_psid); - // }, 1000) + setTimeout(() => { + handleCases.getContinue(sender_psid); + }, 1000) } } }, 1200) From 28e4d3f8f1d2ef8051c5afd0fd1d002d6abd2309 Mon Sep 17 00:00:00 2001 From: tnguyen452 Date: Sun, 29 Apr 2018 04:22:06 -0400 Subject: [PATCH 25/41] debugging --- functions/informationLookup.js | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/functions/informationLookup.js b/functions/informationLookup.js index c26c7b2..db7c7c6 100644 --- a/functions/informationLookup.js +++ b/functions/informationLookup.js @@ -328,7 +328,7 @@ function matchLookup(sender_psid, key, status) { } else if (status.includes('Team Squad')) { - // Async function to look for the Next Match. + // Async function to look for the Team Squad console.log("team: ", key); data.get_team_squad(key, (err, reply) => { if (err) { @@ -371,13 +371,10 @@ function matchLookup(sender_psid, key, status) { }) } }) - setTimeout(() => { - handleCases.getContinue(sender_psid); - }, 1000) } else if (status.includes('Team Schedules')) { - // Async function to look for the Next Match. + // Async function to look for the Team Schedule. console.log("team: ", key); data.get_team_schedule(key, (err, reply) => { if (err) { @@ -420,7 +417,10 @@ function matchLookup(sender_psid, key, status) { } } else if ((length < 5) && (length > 0)) { for (var j = 6; j < (6 + length); j++) { + console.log("j: ", j); + console.log("The reply: ", reply[j]) nextMatches += reply[j] + '\n' + console.log("nextMatches: ", nextMatches) } } else { nextMatches = 'There is no coming match in next few days!.'; @@ -429,8 +429,6 @@ function matchLookup(sender_psid, key, status) { response = { "text" : `SOME RECENTLY MATCHES:\n${oldMatches}\nSOME COMING MATCHES:\n${nextMatches}` } - console.log("next few games: ", nextMatches); - console.log("Message response: ", response); sendResponse.directMessage(sender_psid, response); console.log("replied"); }) @@ -438,9 +436,6 @@ function matchLookup(sender_psid, key, status) { }) } }) - setTimeout(() => { - handleCases.getContinue(sender_psid); - }, 1000) } } }, 1200) From dffe02c9322a55f30faa7c6036d9ecf220bf5524 Mon Sep 17 00:00:00 2001 From: tnguyen452 Date: Sun, 29 Apr 2018 04:29:33 -0400 Subject: [PATCH 26/41] debugging --- functions/informationLookup.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/functions/informationLookup.js b/functions/informationLookup.js index db7c7c6..52050f1 100644 --- a/functions/informationLookup.js +++ b/functions/informationLookup.js @@ -415,12 +415,13 @@ function matchLookup(sender_psid, key, status) { for (var j = 6; j < (6 + 5); j++) { nextMatches += reply[j] + '\n' } - } else if ((length < 5) && (length > 0)) { + } + + if ((length < 5) && (length > 0)) { + console.log("length: ", length); for (var j = 6; j < (6 + length); j++) { console.log("j: ", j); - console.log("The reply: ", reply[j]) nextMatches += reply[j] + '\n' - console.log("nextMatches: ", nextMatches) } } else { nextMatches = 'There is no coming match in next few days!.'; From bc1b38411401dd6bbb6a1cc8a851c7bced9b2dda Mon Sep 17 00:00:00 2001 From: tnguyen452 Date: Sun, 29 Apr 2018 20:40:52 -0400 Subject: [PATCH 27/41] new version team news --- functions/dataFormat.js | 42 +++++++++++++++ functions/handleCases.js | 2 +- functions/informationLookup.js | 12 ++--- functions/receive-message.js | 6 +-- functions/sendResponse.js | 98 +++++++++++++++++++--------------- scripts/get_team_news.py | 49 ++++++++--------- 6 files changed, 128 insertions(+), 81 deletions(-) diff --git a/functions/dataFormat.js b/functions/dataFormat.js index bf074ba..60df2e4 100644 --- a/functions/dataFormat.js +++ b/functions/dataFormat.js @@ -127,6 +127,47 @@ function teamOptionFormat(payloadCharacteristic, choices, teamName) { return finalArr; } +function listViewFormat(arr) { + let newArr = []; + let array = []; + for (var i = 0; i < 4; i++) { + for (var j = 0; j < 4; j++) { + array.push(arr.shift()); + } + newArr.push(array); + array = [] + } + + let finalArr = []; + for (var i = 0; i < 4; i++) { + var buttons = {}; + var button = {}; + var map = {}; + buttons['title'] = "View" + button['title'] = "View", + buttons['type'] = "web_url" + buttons['url'] = newArr[i][3] + buttons['messenger_extensions'] = true + buttons['webview_height_ratio'] = "tall" + map['title'] = newArr[i][0] + map['subtitle'] = newArr[i][1] + map['image_url'] = newArr[i][2] + if (i == 0) { + map['buttons'] = [{ + buttons + }] + } else { + map['default_action'] = [{ + + }] + } + finalArr.push(map); + } + console.log(finalArr); +} + +// listViewFormat(['a', 'b', 'c', 'd', '2', '3', '4', '5', 'g', 'h', 'j' ,'k' ,'b' ,'b', 'b', 'a']); + function decodeUnderline(key) { var startPoint = key.indexOf('_') + 1; return key.slice(startPoint); @@ -140,5 +181,6 @@ module.exports = { quickReplyFormat, teamDataQuick, teamOptionFormat, + listViewFormat, decodeUnderline } \ No newline at end of file diff --git a/functions/handleCases.js b/functions/handleCases.js index 762dbba..6697027 100644 --- a/functions/handleCases.js +++ b/functions/handleCases.js @@ -31,7 +31,7 @@ function teamOptions(sender_psid, teamName, imageURL) { } function teamData(sender_psid, teamName) { - let choices = ['Team News', 'Team Squad', 'Team Schedules', 'Go Back']; + let choices = ['Team News', 'Team Squad', 'Team Schedules', 'Lastest Video', 'Go Back']; let response = { 'text': `Please select the option of data you want` } diff --git a/functions/informationLookup.js b/functions/informationLookup.js index 52050f1..460dcce 100644 --- a/functions/informationLookup.js +++ b/functions/informationLookup.js @@ -313,12 +313,12 @@ function matchLookup(sender_psid, key, status) { "method": "GET", "json": true, }, (err, res, body) => { - let url = reply[0]; - let imageUrl = reply[1]; - let newsTitle = reply[2]; - let newsSubtitle = reply[3]; - - sendResponse.teamNewsURL(sender_psid, key, url, imageUrl, newsTitle, newsSubtitle); + let array = [] + for (var i = 0; i < 16; i++) { + array.push(reply[i]); + } + console.log(array); + sendResponse.teamNewsURL(sender_psid, array); console.log("replied"); }) } diff --git a/functions/receive-message.js b/functions/receive-message.js index c20c78b..a7b76f4 100644 --- a/functions/receive-message.js +++ b/functions/receive-message.js @@ -31,15 +31,15 @@ function handleMessage(sender_psid, received_message) { else if (handleChoice[sender_psid] == 'TEAM') { key = dataFormat.checkDuplicate(key); console.log("In team") - console.log(key); + console.log(key); if (typeof(key) == 'object') { let newKey = dataFormat.completeName(key); response = { "text": `Did you mean:\n${newKey}\nOr please retype the team you want to see!!!` } sendResponse.quickReply(sender_psid, response, 'TEAMLIST', key); - } - + } + else { delete handleChoice[sender_psid]; info.teamNameLookup(sender_psid, key); diff --git a/functions/sendResponse.js b/functions/sendResponse.js index a5ac804..9eff9d4 100644 --- a/functions/sendResponse.js +++ b/functions/sendResponse.js @@ -122,7 +122,7 @@ function teamOptionChoose(sender_psid, teamName, payloadCharacteristic, choices, } // Post a form of quick reply to the server with teamNews -function teamNewsURL(sender_psid, key, url, imageUrl, newsTitle, newsSubtitle) { +function teamNewsURL(sender_psid, array) { let request_body = { "recipient": { "id": sender_psid @@ -131,51 +131,63 @@ function teamNewsURL(sender_psid, key, url, imageUrl, newsTitle, newsSubtitle) { "attachment": { "type": "template", "payload": { - "template_type": "generic", - "image_aspect_ratio": 'square', - "elements": [{ - "title": newsTitle, - "subtitle": newsSubtitle, - "image_url": imageUrl, + "template_type": "list", + "top_element_style": "compact", + "elements": [ + { + "title": array[0], + "subtitle": array[1], + "image_url": array[2], "buttons": [ { - "type": 'web_url', - "url": url, - "title": 'View More' - }, - { - "type": 'element_share', - "share_contents": - { - "attachment": - { - "type": "template", - "payload": - { - "template_type": "generic", - "image_aspect_ratio": 'square', - "elements": [ - { - "title": newsTitle, - "subtitle": newsSubtitle, - "image_url": imageUrl, - "buttons": [ - { - "type": 'web_url', - "url": url, - "title": 'View More' - }] - }] - } - } - } + "title": "View", + "type": "web_url", + "url": array[3], + "messenger_extensions": true, + "webview_height_ratio": "tall" + } + ] + }, + { + "title": array[4], + "subtitle": array[5], + "image_url": array[6], + "default_action": { + "type": "web_url", + "url": array[7], + "messenger_extensions": false, + "webview_height_ratio": "tall" + } + }, + { + "title": array[8], + "subtitle": array[9], + "image_url": array[10], + "default_action": { + "type": "web_url", + "url": array[11], + "messenger_extensions": true, + "webview_height_ratio": "tall" }, - { - "type": 'postback', - "title": 'Another Team', - "payload": 'OPTIONAnother Team' - }] - }] + // "buttons": [ + // { + // "title": "Shop Now", + // "type": "web_url", + // "url": "https://peterssendreceiveapp.ngrok.io/shop?item=101", + // "messenger_extensions": true, + // "webview_height_ratio": "tall", + // "fallback_url": "https://peterssendreceiveapp.ngrok.io/" + // } + // ] + } + ], + "buttons": [ + { + "title": "Another Team", + "type": "postback", + "payload": "OPTIONAnother Team" + } + ] } } } diff --git a/scripts/get_team_news.py b/scripts/get_team_news.py index 3553c67..db6e3bb 100644 --- a/scripts/get_team_news.py +++ b/scripts/get_team_news.py @@ -5,6 +5,7 @@ from selenium.webdriver.support import expected_conditions as EC from selenium.common.exceptions import TimeoutException from bs4 import BeautifulSoup +from unidecode import unidecode import sys import os @@ -12,13 +13,12 @@ def main(): window_size = "1200,800" timeout = 20 - # team_name = sys.argv[1] - team_name = 'Manchester United' + team_name = sys.argv[1] chrome_options = Options() chrome_options.binary_location = os.environ.get('GOOGLE_CHROME_SHIM', None) chrome_options.add_argument("--window-size=%s" % window_size) - # chrome_options.add_argument("--headless") + chrome_options.add_argument("--headless") chrome_options.add_argument("no-sandbox") browser = webdriver.Chrome(chrome_options=chrome_options) @@ -32,40 +32,33 @@ def main(): browser.implicitly_wait(2) - try: - WebDriverWait(browser, timeout).until(EC.visibility_of_element_located((By.XPATH, "//*[@id='global-search']/div/div/div[1]/ul/li/a/div[2]/span[1]"))) - except TimeoutException: + WebDriverWait(browser, timeout).until(EC.visibility_of_element_located((By.XPATH, "//*[@id='global-search']/div/div/div[1]/ul"))) + + search_results = browser.find_element_by_xpath("//*[@id='global-search']/div/div/div[1]/ul").find_elements_by_class_name("search_results__details") + found = False + + for result in search_results: + if result.find_element_by_class_name('search_results__cat').text == 'Soccer': + result.find_element_by_class_name('search_results__cat').click() + found = True + break + + if (found == False): print("Cannot find team") browser.quit() sys.exit(1) - else: - browser.find_element_by_xpath("//*[@id='global-search']/div/div/div[1]/ul/li/a/div[2]/span[1]").click() - WebDriverWait(browser, timeout).until(EC.visibility_of_element_located((By.XPATH, "//*[@id='global-nav-secondary']/div/ul[2]/li[4]/a/span[1]"))) newHtml = browser.page_source url = browser.current_url newSoup = BeautifulSoup(newHtml, "html.parser") - browser.find_element_by_xpath("//*[@id='global-nav-secondary']/div/ul[2]/li[4]/a/span[1]").click() - - browser.switch_to_window(browser.window_handles[1]) - browser.implicitly_wait(3) - - - imageUrl1 = newSoup.findAll('article') - # imageUrl1 = newSoup.find('article', {'class': 'news-feed-item news-feed-story-package'}).find('figure', {'class': 'feed-item-figure '}).find('div', {'class': 'img-wrap'}).find('img')['data-default-src'] - # imageUrl1 = newSoup.findAll('article', {'class' : 'news-feed-item news-feed-story-package'})[0].find('figure', {'class': 'feed-item-figure '}).find('div', {'class': 'img-wrap'}).find('img')['data-default-src'] - # imageUrl1 = newSoup.findAll('article', {'class' : 'news-feed-item news-feed-story-package'}) - # newsTitle1 = newSoup.findAll('article')[0].find('div', {'class': 'text-container no-headlines'}).find('div', {'class': 'item-info-wrap'}).find('a').text - # newsSubtitle1 = newSoup.findAll('article')[0].find('div', {'class': 'text-container no-headlines'}).find('div', {'class': 'item-info-wrap'}).find('p').text - # newsLink1 = newSoup.findAll('article')[0].find('a')['data-popup-href'] - # imgageUrl2 = newSoup.find('article', {'class': 'news-feed-item news-feed-story-package'}).find('figure', {'class': 'feed-item-figure '}).find('div', {'class': 'img-wrap'}).find('img')['data-default-src'] + mainPart = newSoup.findAll('article', {'class' : 'news-feed-item news-feed-story-package'}) - # print(url) - print(imageUrl1) - # print(newsTitle1) - # print(newsSubtitle1) - # print(newsLink1) + for i in range(0, 4): + print(mainPart[i].find('a', {'class' : ' realStory'}).text) + print(mainPart[i].find('p').text) + print(mainPart[i].find('img')['data-default-src']) + print(mainPart[i].find('a', {'class' : 'story-link'})['data-popup-href']) browser.quit() sys.exit(0) From 8ea753c55e4109a09d93a894690d9c9b487fb8d8 Mon Sep 17 00:00:00 2001 From: tnguyen452 Date: Sun, 29 Apr 2018 20:45:53 -0400 Subject: [PATCH 28/41] increase implicitly wait --- scripts/get_team_news.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/get_team_news.py b/scripts/get_team_news.py index db6e3bb..8512f15 100644 --- a/scripts/get_team_news.py +++ b/scripts/get_team_news.py @@ -30,7 +30,7 @@ def main(): WebDriverWait(browser, timeout).until(EC.visibility_of_element_located((By.CLASS_NAME, "search-box"))) browser.find_element_by_class_name('search-box').send_keys(team_name) - browser.implicitly_wait(2) + browser.implicitly_wait(4) WebDriverWait(browser, timeout).until(EC.visibility_of_element_located((By.XPATH, "//*[@id='global-search']/div/div/div[1]/ul"))) From 59e35db7ed95a2a2fa850bb7051a43b1c9f7a35e Mon Sep 17 00:00:00 2001 From: tnguyen452 Date: Sun, 29 Apr 2018 20:51:43 -0400 Subject: [PATCH 29/41] debugging by 1 news --- functions/sendResponse.js | 32 -------------------------------- 1 file changed, 32 deletions(-) diff --git a/functions/sendResponse.js b/functions/sendResponse.js index 9eff9d4..19995e6 100644 --- a/functions/sendResponse.js +++ b/functions/sendResponse.js @@ -147,38 +147,6 @@ function teamNewsURL(sender_psid, array) { "webview_height_ratio": "tall" } ] - }, - { - "title": array[4], - "subtitle": array[5], - "image_url": array[6], - "default_action": { - "type": "web_url", - "url": array[7], - "messenger_extensions": false, - "webview_height_ratio": "tall" - } - }, - { - "title": array[8], - "subtitle": array[9], - "image_url": array[10], - "default_action": { - "type": "web_url", - "url": array[11], - "messenger_extensions": true, - "webview_height_ratio": "tall" - }, - // "buttons": [ - // { - // "title": "Shop Now", - // "type": "web_url", - // "url": "https://peterssendreceiveapp.ngrok.io/shop?item=101", - // "messenger_extensions": true, - // "webview_height_ratio": "tall", - // "fallback_url": "https://peterssendreceiveapp.ngrok.io/" - // } - // ] } ], "buttons": [ From 636083a4cd541345f6043f6682fcbb6f8b9e117a Mon Sep 17 00:00:00 2001 From: tnguyen452 Date: Sun, 29 Apr 2018 20:58:10 -0400 Subject: [PATCH 30/41] add 1 more news --- functions/sendResponse.js | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/functions/sendResponse.js b/functions/sendResponse.js index 19995e6..f31a754 100644 --- a/functions/sendResponse.js +++ b/functions/sendResponse.js @@ -132,15 +132,26 @@ function teamNewsURL(sender_psid, array) { "type": "template", "payload": { "template_type": "list", - "top_element_style": "compact", + "top_element_style": "large", "elements": [ { "title": array[0], "subtitle": array[1], "image_url": array[2], - "buttons": [ + "default_action": [ + { + "type": "web_url", + "url": array[3], + "messenger_extensions": true, + "webview_height_ratio": "tall" + } + ] + }, { + "title": array[0], + "subtitle": array[1], + "image_url": array[2], + "default_action": [ { - "title": "View", "type": "web_url", "url": array[3], "messenger_extensions": true, From 4b730151c2a5a3c5a7cc8928d2eee2d561c16998 Mon Sep 17 00:00:00 2001 From: tnguyen452 Date: Sun, 29 Apr 2018 23:38:39 -0400 Subject: [PATCH 31/41] fix news --- functions/sendResponse.js | 8 ++------ scripts/get_team_news.py | 2 +- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/functions/sendResponse.js b/functions/sendResponse.js index f31a754..c55837f 100644 --- a/functions/sendResponse.js +++ b/functions/sendResponse.js @@ -138,26 +138,22 @@ function teamNewsURL(sender_psid, array) { "title": array[0], "subtitle": array[1], "image_url": array[2], - "default_action": [ - { + "default_action": { "type": "web_url", "url": array[3], "messenger_extensions": true, "webview_height_ratio": "tall" } - ] }, { "title": array[0], "subtitle": array[1], "image_url": array[2], - "default_action": [ - { + "default_action": { "type": "web_url", "url": array[3], "messenger_extensions": true, "webview_height_ratio": "tall" } - ] } ], "buttons": [ diff --git a/scripts/get_team_news.py b/scripts/get_team_news.py index 8512f15..dbf1bb5 100644 --- a/scripts/get_team_news.py +++ b/scripts/get_team_news.py @@ -12,7 +12,7 @@ def main(): window_size = "1200,800" - timeout = 20 + timeout = 25 team_name = sys.argv[1] chrome_options = Options() From 12363d527a842a19e5c6642861bffe047f487d3b Mon Sep 17 00:00:00 2001 From: tnguyen452 Date: Sun, 29 Apr 2018 23:47:29 -0400 Subject: [PATCH 32/41] testing --- functions/sendResponse.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/functions/sendResponse.js b/functions/sendResponse.js index c55837f..4782c84 100644 --- a/functions/sendResponse.js +++ b/functions/sendResponse.js @@ -135,22 +135,22 @@ function teamNewsURL(sender_psid, array) { "top_element_style": "large", "elements": [ { - "title": array[0], - "subtitle": array[1], - "image_url": array[2], + "title": "sdasdasdsaas", + "subtitle": "sdasdasdsaas", + "image_url": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcS3eN01jWLmU7pWnKeNPn1YSNO4yfurKFnEOs8_lyt4O_cJarC0", "default_action": { "type": "web_url", - "url": array[3], + "url": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcS3eN01jWLmU7pWnKeNPn1YSNO4yfurKFnEOs8_lyt4O_cJarC0", "messenger_extensions": true, "webview_height_ratio": "tall" } }, { - "title": array[0], - "subtitle": array[1], - "image_url": array[2], + "title": "asdasdasdas", + "subtitle": "sadasdasdsa", + "image_url": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcS3eN01jWLmU7pWnKeNPn1YSNO4yfurKFnEOs8_lyt4O_cJarC0", "default_action": { "type": "web_url", - "url": array[3], + "url": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcS3eN01jWLmU7pWnKeNPn1YSNO4yfurKFnEOs8_lyt4O_cJarC0", "messenger_extensions": true, "webview_height_ratio": "tall" } From 30c10890dab3736a2dcf93944562f48808683ad5 Mon Sep 17 00:00:00 2001 From: tnguyen452 Date: Sun, 29 Apr 2018 23:53:34 -0400 Subject: [PATCH 33/41] fix --- functions/informationLookup.js | 2 +- functions/receive-message.js | 11 +++++++---- functions/sendResponse.js | 2 +- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/functions/informationLookup.js b/functions/informationLookup.js index 460dcce..c181223 100644 --- a/functions/informationLookup.js +++ b/functions/informationLookup.js @@ -318,7 +318,7 @@ function matchLookup(sender_psid, key, status) { array.push(reply[i]); } console.log(array); - sendResponse.teamNewsURL(sender_psid, array); + sendResponse.teamNewsURL(sender_psid); console.log("replied"); }) } diff --git a/functions/receive-message.js b/functions/receive-message.js index a7b76f4..75301bb 100644 --- a/functions/receive-message.js +++ b/functions/receive-message.js @@ -106,11 +106,14 @@ function handleQuickReply(sender_psid, received_message) { if (key.includes('Go Back')) { handleCases.getStart(sender_psid); } - - else { - teamName = dataFormat.decodeUnderline(key); - info.matchLookup(sender_psid, teamName, key); + if (key.includes('Team News')) { + sendResponse.teamNewsURL(sender_psid, array); } + + // else { + // teamName = dataFormat.decodeUnderline(key); + // info.matchLookup(sender_psid, teamName, key); + // } } // Continues the bot by asking the initial question: Team or Player? diff --git a/functions/sendResponse.js b/functions/sendResponse.js index 4782c84..3b08ccb 100644 --- a/functions/sendResponse.js +++ b/functions/sendResponse.js @@ -122,7 +122,7 @@ function teamOptionChoose(sender_psid, teamName, payloadCharacteristic, choices, } // Post a form of quick reply to the server with teamNews -function teamNewsURL(sender_psid, array) { +function teamNewsURL(sender_psid) { let request_body = { "recipient": { "id": sender_psid From 498024748ce15f45de0a2886cb042a28ac5f0de0 Mon Sep 17 00:00:00 2001 From: tnguyen452 Date: Sun, 29 Apr 2018 23:59:53 -0400 Subject: [PATCH 34/41] fix --- functions/receive-message.js | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/functions/receive-message.js b/functions/receive-message.js index 75301bb..00cf67f 100644 --- a/functions/receive-message.js +++ b/functions/receive-message.js @@ -106,14 +106,11 @@ function handleQuickReply(sender_psid, received_message) { if (key.includes('Go Back')) { handleCases.getStart(sender_psid); } - if (key.includes('Team News')) { - sendResponse.teamNewsURL(sender_psid, array); - } - // else { - // teamName = dataFormat.decodeUnderline(key); - // info.matchLookup(sender_psid, teamName, key); - // } + else { + teamName = dataFormat.decodeUnderline(key); + info.matchLookup(sender_psid, teamName, key); + } } // Continues the bot by asking the initial question: Team or Player? From c0a5d37f4fbf85c52273c587210bf4fd32d635df Mon Sep 17 00:00:00 2001 From: tnguyen452 Date: Mon, 30 Apr 2018 00:17:43 -0400 Subject: [PATCH 35/41] fix --- functions/sendResponse.js | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/functions/sendResponse.js b/functions/sendResponse.js index 3b08ccb..210af0d 100644 --- a/functions/sendResponse.js +++ b/functions/sendResponse.js @@ -122,7 +122,7 @@ function teamOptionChoose(sender_psid, teamName, payloadCharacteristic, choices, } // Post a form of quick reply to the server with teamNews -function teamNewsURL(sender_psid) { +function teamNewsURL(sender_psid, array) { let request_body = { "recipient": { "id": sender_psid @@ -135,22 +135,22 @@ function teamNewsURL(sender_psid) { "top_element_style": "large", "elements": [ { - "title": "sdasdasdsaas", - "subtitle": "sdasdasdsaas", - "image_url": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcS3eN01jWLmU7pWnKeNPn1YSNO4yfurKFnEOs8_lyt4O_cJarC0", + "title": array[0], + "subtitle": array[1], + "image_url": array[2], "default_action": { "type": "web_url", - "url": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcS3eN01jWLmU7pWnKeNPn1YSNO4yfurKFnEOs8_lyt4O_cJarC0", + "url": array[3], "messenger_extensions": true, "webview_height_ratio": "tall" } }, { - "title": "asdasdasdas", - "subtitle": "sadasdasdsa", - "image_url": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcS3eN01jWLmU7pWnKeNPn1YSNO4yfurKFnEOs8_lyt4O_cJarC0", + "title": array[4], + "subtitle": array[5], + "image_url": array[6], "default_action": { "type": "web_url", - "url": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcS3eN01jWLmU7pWnKeNPn1YSNO4yfurKFnEOs8_lyt4O_cJarC0", + "url": array[7], "messenger_extensions": true, "webview_height_ratio": "tall" } From 696e4e58c698a990146716ed24acc127abff9dc0 Mon Sep 17 00:00:00 2001 From: tnguyen452 Date: Mon, 30 Apr 2018 00:24:06 -0400 Subject: [PATCH 36/41] add array --- functions/informationLookup.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/functions/informationLookup.js b/functions/informationLookup.js index c181223..460dcce 100644 --- a/functions/informationLookup.js +++ b/functions/informationLookup.js @@ -318,7 +318,7 @@ function matchLookup(sender_psid, key, status) { array.push(reply[i]); } console.log(array); - sendResponse.teamNewsURL(sender_psid); + sendResponse.teamNewsURL(sender_psid, array); console.log("replied"); }) } From d953b34f782632a0a43dc2df3f03ae2542c68320 Mon Sep 17 00:00:00 2001 From: tnguyen452 Date: Mon, 30 Apr 2018 00:40:12 -0400 Subject: [PATCH 37/41] https --- functions/sendResponse.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/functions/sendResponse.js b/functions/sendResponse.js index 210af0d..9d017f4 100644 --- a/functions/sendResponse.js +++ b/functions/sendResponse.js @@ -137,20 +137,20 @@ function teamNewsURL(sender_psid, array) { { "title": array[0], "subtitle": array[1], - "image_url": array[2], + "image_url": "https://a.espncdn.com/photo/2014/0110/soc_g_villa01jr_1296x729.jpg", "default_action": { "type": "web_url", - "url": array[3], + "url": "https://www.espnfc.com/club/spain/164/blog/post/3437359/david-villa-scores-400th-career-goal-el-guajes-impact-on-spain-mls-and-beyond", "messenger_extensions": true, "webview_height_ratio": "tall" } }, { "title": array[4], "subtitle": array[5], - "image_url": array[6], + "image_url": "https://a.espncdn.com/photo/2014/0110/soc_g_villa01jr_1296x729.jpg", "default_action": { "type": "web_url", - "url": array[7], + "url": "https://www.espnfc.com/club/spain/164/blog/post/3437359/david-villa-scores-400th-career-goal-el-guajes-impact-on-spain-mls-and-beyond", "messenger_extensions": true, "webview_height_ratio": "tall" } From 0c99e11da7d8e8bfc0cc69e6b3e5c3e915254731 Mon Sep 17 00:00:00 2001 From: tnguyen452 Date: Mon, 30 Apr 2018 00:44:33 -0400 Subject: [PATCH 38/41] http --- functions/sendResponse.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/functions/sendResponse.js b/functions/sendResponse.js index 9d017f4..267d3cd 100644 --- a/functions/sendResponse.js +++ b/functions/sendResponse.js @@ -137,7 +137,7 @@ function teamNewsURL(sender_psid, array) { { "title": array[0], "subtitle": array[1], - "image_url": "https://a.espncdn.com/photo/2014/0110/soc_g_villa01jr_1296x729.jpg", + "image_url": "http://a.espncdn.com/photo/2014/0110/soc_g_villa01jr_1296x729.jpg", "default_action": { "type": "web_url", "url": "https://www.espnfc.com/club/spain/164/blog/post/3437359/david-villa-scores-400th-career-goal-el-guajes-impact-on-spain-mls-and-beyond", @@ -147,7 +147,7 @@ function teamNewsURL(sender_psid, array) { }, { "title": array[4], "subtitle": array[5], - "image_url": "https://a.espncdn.com/photo/2014/0110/soc_g_villa01jr_1296x729.jpg", + "image_url": "http://a.espncdn.com/photo/2014/0110/soc_g_villa01jr_1296x729.jpg", "default_action": { "type": "web_url", "url": "https://www.espnfc.com/club/spain/164/blog/post/3437359/david-villa-scores-400th-career-goal-el-guajes-impact-on-spain-mls-and-beyond", From 62f42188b26d0c7f5f09567ac2f597d0be2acc27 Mon Sep 17 00:00:00 2001 From: tnguyen452 Date: Mon, 30 Apr 2018 00:48:54 -0400 Subject: [PATCH 39/41] compact --- functions/sendResponse.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/functions/sendResponse.js b/functions/sendResponse.js index 267d3cd..b87fac3 100644 --- a/functions/sendResponse.js +++ b/functions/sendResponse.js @@ -132,7 +132,7 @@ function teamNewsURL(sender_psid, array) { "type": "template", "payload": { "template_type": "list", - "top_element_style": "large", + "top_element_style": "compact", "elements": [ { "title": array[0], From 52424dd8ea7c88073b2784722cd8a6c4b0fd45fc Mon Sep 17 00:00:00 2001 From: tnguyen452 Date: Tue, 8 May 2018 12:29:06 -0400 Subject: [PATCH 40/41] fix script teamNews --- functions/dataFormat.js | 41 - functions/informationLookup.js | 2 +- functions/sendResponse.js | 32 +- package-lock.json | 2361 ++++++++++++++++---------------- scripts/get_team_news.py | 10 +- 5 files changed, 1214 insertions(+), 1232 deletions(-) diff --git a/functions/dataFormat.js b/functions/dataFormat.js index 60df2e4..26e274f 100644 --- a/functions/dataFormat.js +++ b/functions/dataFormat.js @@ -127,47 +127,6 @@ function teamOptionFormat(payloadCharacteristic, choices, teamName) { return finalArr; } -function listViewFormat(arr) { - let newArr = []; - let array = []; - for (var i = 0; i < 4; i++) { - for (var j = 0; j < 4; j++) { - array.push(arr.shift()); - } - newArr.push(array); - array = [] - } - - let finalArr = []; - for (var i = 0; i < 4; i++) { - var buttons = {}; - var button = {}; - var map = {}; - buttons['title'] = "View" - button['title'] = "View", - buttons['type'] = "web_url" - buttons['url'] = newArr[i][3] - buttons['messenger_extensions'] = true - buttons['webview_height_ratio'] = "tall" - map['title'] = newArr[i][0] - map['subtitle'] = newArr[i][1] - map['image_url'] = newArr[i][2] - if (i == 0) { - map['buttons'] = [{ - buttons - }] - } else { - map['default_action'] = [{ - - }] - } - finalArr.push(map); - } - console.log(finalArr); -} - -// listViewFormat(['a', 'b', 'c', 'd', '2', '3', '4', '5', 'g', 'h', 'j' ,'k' ,'b' ,'b', 'b', 'a']); - function decodeUnderline(key) { var startPoint = key.indexOf('_') + 1; return key.slice(startPoint); diff --git a/functions/informationLookup.js b/functions/informationLookup.js index 460dcce..ac8088f 100644 --- a/functions/informationLookup.js +++ b/functions/informationLookup.js @@ -476,7 +476,7 @@ function playerLookup(sender_psid, key) { 'text' : `Cannot find player: ${key}` }; sendResponse.directMessage(sender_psid, response); - } + } else { flag = false; let playerImageURL = reply[0]; diff --git a/functions/sendResponse.js b/functions/sendResponse.js index b87fac3..2246455 100644 --- a/functions/sendResponse.js +++ b/functions/sendResponse.js @@ -95,7 +95,7 @@ function teamOptionChoose(sender_psid, teamName, payloadCharacteristic, choices, "payload": { "template_type": 'generic', "image_aspect_ratio": 'square', - "elements": + "elements": [ { "title": teamName.toUpperCase(), @@ -132,25 +132,45 @@ function teamNewsURL(sender_psid, array) { "type": "template", "payload": { "template_type": "list", - "top_element_style": "compact", + "top_element_style": "large", "elements": [ { "title": array[0], "subtitle": array[1], - "image_url": "http://a.espncdn.com/photo/2014/0110/soc_g_villa01jr_1296x729.jpg", + "image_url": array[2], "default_action": { "type": "web_url", - "url": "https://www.espnfc.com/club/spain/164/blog/post/3437359/david-villa-scores-400th-career-goal-el-guajes-impact-on-spain-mls-and-beyond", + "url": array[3], "messenger_extensions": true, "webview_height_ratio": "tall" } }, { "title": array[4], "subtitle": array[5], - "image_url": "http://a.espncdn.com/photo/2014/0110/soc_g_villa01jr_1296x729.jpg", + "image_url": array[6], + "default_action": { + "type": "web_url", + "url": array[7], + "messenger_extensions": true, + "webview_height_ratio": "tall" + } + }, { + "title": array[8], + "subtitle": array[9], + "image_url": array[10], + "default_action": { + "type": "web_url", + "url": array[11], + "messenger_extensions": true, + "webview_height_ratio": "tall" + } + }, { + "title": array[12], + "subtitle": array[13], + "image_url": array[14], "default_action": { "type": "web_url", - "url": "https://www.espnfc.com/club/spain/164/blog/post/3437359/david-villa-scores-400th-career-goal-el-guajes-impact-on-spain-mls-and-beyond", + "url": array[15], "messenger_extensions": true, "webview_height_ratio": "tall" } diff --git a/package-lock.json b/package-lock.json index 7563321..74912a8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,9 +10,9 @@ "integrity": "sha512-JNHofQND7Iiuy3f6RXSillN1uBe87DAp+1ktsBfSxfL3xWeGFyJC9jH5zu2zs7eqVGp2qXWvJZFiJIwOYnaCQw==", "dev": true, "requires": { - "chalk": "2.3.0", - "esutils": "2.0.2", - "js-tokens": "3.0.2" + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^3.0.0" } }, "@firebase/app": { @@ -23,7 +23,7 @@ "requires": { "@firebase/app-types": "0.1.2", "@firebase/util": "0.1.10", - "tslib": "1.9.0" + "tslib": "^1.9.0" } }, "@firebase/app-types": { @@ -57,7 +57,7 @@ "@firebase/logger": "0.1.0", "@firebase/util": "0.1.10", "faye-websocket": "0.11.1", - "tslib": "1.9.0" + "tslib": "^1.9.0" } }, "@firebase/database-types": { @@ -75,8 +75,8 @@ "@firebase/firestore-types": "0.2.2", "@firebase/logger": "0.1.0", "@firebase/webchannel-wrapper": "0.2.7", - "grpc": "1.10.1", - "tslib": "1.9.0" + "grpc": "^1.9.1", + "tslib": "^1.9.0" } }, "@firebase/firestore-types": { @@ -92,8 +92,8 @@ "dev": true, "requires": { "@firebase/functions-types": "0.1.0", - "@firebase/messaging-types": "0.1.2", - "isomorphic-fetch": "2.2.1" + "@firebase/messaging-types": "^0.1.1", + "isomorphic-fetch": "^2.2.1" } }, "@firebase/functions-types": { @@ -116,7 +116,7 @@ "requires": { "@firebase/messaging-types": "0.1.2", "@firebase/util": "0.1.10", - "tslib": "1.9.0" + "tslib": "^1.9.0" } }, "@firebase/messaging-types": { @@ -131,9 +131,9 @@ "integrity": "sha512-nE8LMXBhvWdHBlxtjkZkid8WzowBbxUC+mcYdsEbvx5A7hWswisFZO8XwoKnM1jYYSOpDrtxFmyqWBAc15DmRg==", "dev": true, "requires": { - "promise-polyfill": "7.1.2", - "tslib": "1.9.0", - "whatwg-fetch": "2.0.4" + "promise-polyfill": "^7.1.0", + "tslib": "^1.9.0", + "whatwg-fetch": "^2.0.3" } }, "@firebase/storage": { @@ -143,7 +143,7 @@ "dev": true, "requires": { "@firebase/storage-types": "0.1.2", - "tslib": "1.9.0" + "tslib": "^1.9.0" } }, "@firebase/storage-types": { @@ -158,7 +158,7 @@ "integrity": "sha512-XEogRfUQBZ4T37TMq/3ZbuiTdRAKX8hF3TgJglUZNCJf/6QnQ+jlupCuMAXBqCGfw2Mw0m2matoCUBWpsyevOA==", "dev": true, "requires": { - "tslib": "1.9.0" + "tslib": "^1.9.0" } }, "@firebase/webchannel-wrapper": { @@ -184,7 +184,7 @@ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz", "integrity": "sha1-hiRnWMfdbSGmR0/whKR0DsBesh8=", "requires": { - "mime-types": "2.1.17", + "mime-types": "~2.1.16", "negotiator": "0.6.1" } }, @@ -200,7 +200,7 @@ "integrity": "sha512-KjZwU26uG3u6eZcfGbTULzFcsoz6pegNKtHPksZPOUsiKo5bUmiBPa38FuHZ/Eun+XYh/JCCkS9AS3Lu4McQOQ==", "dev": true, "requires": { - "acorn": "5.3.0" + "acorn": "^5.0.0" } }, "ajv": { @@ -209,10 +209,10 @@ "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", "dev": true, "requires": { - "co": "4.6.0", - "fast-deep-equal": "1.0.0", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.3.1" + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" } }, "align-text": { @@ -221,9 +221,9 @@ "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", "dev": true, "requires": { - "kind-of": "3.2.2", - "longest": "1.0.1", - "repeat-string": "1.6.1" + "kind-of": "^3.0.2", + "longest": "^1.0.1", + "repeat-string": "^1.5.2" } }, "amdefine": { @@ -250,7 +250,7 @@ "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", "dev": true, "requires": { - "color-convert": "1.9.1" + "color-convert": "^1.9.0" } }, "anymatch": { @@ -259,8 +259,8 @@ "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", "dev": true, "requires": { - "micromatch": "2.3.11", - "normalize-path": "2.1.1" + "micromatch": "^2.1.5", + "normalize-path": "^2.0.0" } }, "api-check": { @@ -275,7 +275,7 @@ "integrity": "sha1-126/jKlNJ24keja61EpLdKthGZE=", "dev": true, "requires": { - "default-require-extensions": "1.0.0" + "default-require-extensions": "^1.0.0" } }, "argparse": { @@ -284,7 +284,7 @@ "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", "dev": true, "requires": { - "sprintf-js": "1.0.3" + "sprintf-js": "~1.0.2" } }, "arr-diff": { @@ -293,7 +293,7 @@ "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", "dev": true, "requires": { - "arr-flatten": "1.1.0" + "arr-flatten": "^1.0.1" } }, "arr-flatten": { @@ -331,8 +331,8 @@ "integrity": "sha1-vPpZdKYvGOgcq660lzKrSoj5Brw=", "dev": true, "requires": { - "colour": "0.7.1", - "optjs": "3.2.2" + "colour": "~0.7.1", + "optjs": "~3.2.2" } }, "asn1": { @@ -359,7 +359,7 @@ "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", "dev": true, "requires": { - "lodash": "4.17.4" + "lodash": "^4.14.0" } }, "async-each": { @@ -393,21 +393,21 @@ "integrity": "sha1-UCq1SHTX24itALiHoGODzgPQAvE=", "dev": true, "requires": { - "babel-core": "6.26.0", - "babel-polyfill": "6.26.0", - "babel-register": "6.26.0", - "babel-runtime": "6.26.0", - "chokidar": "1.7.0", - "commander": "2.13.0", - "convert-source-map": "1.5.1", - "fs-readdir-recursive": "1.1.0", - "glob": "7.1.2", - "lodash": "4.17.4", - "output-file-sync": "1.1.2", - "path-is-absolute": "1.0.1", - "slash": "1.0.0", - "source-map": "0.5.7", - "v8flags": "2.1.1" + "babel-core": "^6.26.0", + "babel-polyfill": "^6.26.0", + "babel-register": "^6.26.0", + "babel-runtime": "^6.26.0", + "chokidar": "^1.6.1", + "commander": "^2.11.0", + "convert-source-map": "^1.5.0", + "fs-readdir-recursive": "^1.0.0", + "glob": "^7.1.2", + "lodash": "^4.17.4", + "output-file-sync": "^1.1.2", + "path-is-absolute": "^1.0.1", + "slash": "^1.0.0", + "source-map": "^0.5.6", + "v8flags": "^2.1.1" } }, "babel-code-frame": { @@ -416,9 +416,9 @@ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", "dev": true, "requires": { - "chalk": "1.1.3", - "esutils": "2.0.2", - "js-tokens": "3.0.2" + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" }, "dependencies": { "ansi-styles": { @@ -433,11 +433,11 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "strip-ansi": { @@ -446,7 +446,7 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "supports-color": { @@ -463,25 +463,25 @@ "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=", "dev": true, "requires": { - "babel-code-frame": "6.26.0", - "babel-generator": "6.26.0", - "babel-helpers": "6.24.1", - "babel-messages": "6.23.0", - "babel-register": "6.26.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "convert-source-map": "1.5.1", - "debug": "2.6.9", - "json5": "0.5.1", - "lodash": "4.17.4", - "minimatch": "3.0.4", - "path-is-absolute": "1.0.1", - "private": "0.1.8", - "slash": "1.0.0", - "source-map": "0.5.7" + "babel-code-frame": "^6.26.0", + "babel-generator": "^6.26.0", + "babel-helpers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-register": "^6.26.0", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "convert-source-map": "^1.5.0", + "debug": "^2.6.8", + "json5": "^0.5.1", + "lodash": "^4.17.4", + "minimatch": "^3.0.4", + "path-is-absolute": "^1.0.1", + "private": "^0.1.7", + "slash": "^1.0.0", + "source-map": "^0.5.6" } }, "babel-generator": { @@ -490,14 +490,14 @@ "integrity": "sha1-rBriAHC3n248odMmlhMFN3TyDcU=", "dev": true, "requires": { - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "detect-indent": "4.0.0", - "jsesc": "1.3.0", - "lodash": "4.17.4", - "source-map": "0.5.7", - "trim-right": "1.0.1" + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "detect-indent": "^4.0.0", + "jsesc": "^1.3.0", + "lodash": "^4.17.4", + "source-map": "^0.5.6", + "trim-right": "^1.0.1" } }, "babel-helper-bindify-decorators": { @@ -506,9 +506,9 @@ "integrity": "sha1-FMGeXxQte0fxmlJDHlKxzLxAozA=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helper-builder-binary-assignment-operator-visitor": { @@ -517,9 +517,9 @@ "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", "dev": true, "requires": { - "babel-helper-explode-assignable-expression": "6.24.1", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-explode-assignable-expression": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-helper-call-delegate": { @@ -528,10 +528,10 @@ "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", "dev": true, "requires": { - "babel-helper-hoist-variables": "6.24.1", - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-hoist-variables": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helper-define-map": { @@ -540,10 +540,10 @@ "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", "dev": true, "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.4" + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" } }, "babel-helper-explode-assignable-expression": { @@ -552,9 +552,9 @@ "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helper-explode-class": { @@ -563,10 +563,10 @@ "integrity": "sha1-fcKjkQ3uAHBW4eMdZAztPVTqqes=", "dev": true, "requires": { - "babel-helper-bindify-decorators": "6.24.1", - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-bindify-decorators": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helper-function-name": { @@ -575,11 +575,11 @@ "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", "dev": true, "requires": { - "babel-helper-get-function-arity": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helper-get-function-arity": { @@ -588,8 +588,8 @@ "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-helper-hoist-variables": { @@ -598,8 +598,8 @@ "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-helper-optimise-call-expression": { @@ -608,8 +608,8 @@ "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-helper-regex": { @@ -618,9 +618,9 @@ "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.4" + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" } }, "babel-helper-remap-async-to-generator": { @@ -629,11 +629,11 @@ "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", "dev": true, "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helper-replace-supers": { @@ -642,12 +642,12 @@ "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", "dev": true, "requires": { - "babel-helper-optimise-call-expression": "6.24.1", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-optimise-call-expression": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-helpers": { @@ -656,8 +656,8 @@ "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-jest": { @@ -666,8 +666,8 @@ "integrity": "sha512-5pKRFTlDr+x1JESNRd5leqvxEJk3dRwVvIXikB6Lr4BWZbBppk1Wp+BLUzxWL8tM+EYGLCWgfqkD35Sft8r8Lw==", "dev": true, "requires": { - "babel-plugin-istanbul": "4.1.5", - "babel-preset-jest": "22.1.0" + "babel-plugin-istanbul": "^4.1.5", + "babel-preset-jest": "^22.1.0" } }, "babel-messages": { @@ -676,7 +676,7 @@ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-check-es2015-constants": { @@ -685,7 +685,7 @@ "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-istanbul": { @@ -694,9 +694,9 @@ "integrity": "sha1-Z2DN2Xf0EdPhdbsGTyvDJ9mbK24=", "dev": true, "requires": { - "find-up": "2.1.0", - "istanbul-lib-instrument": "1.9.1", - "test-exclude": "4.1.1" + "find-up": "^2.1.0", + "istanbul-lib-instrument": "^1.7.5", + "test-exclude": "^4.1.1" } }, "babel-plugin-jest-hoist": { @@ -759,9 +759,9 @@ "integrity": "sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds=", "dev": true, "requires": { - "babel-helper-remap-async-to-generator": "6.24.1", - "babel-plugin-syntax-async-generators": "6.13.0", - "babel-runtime": "6.26.0" + "babel-helper-remap-async-to-generator": "^6.24.1", + "babel-plugin-syntax-async-generators": "^6.5.0", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-async-to-generator": { @@ -770,9 +770,9 @@ "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", "dev": true, "requires": { - "babel-helper-remap-async-to-generator": "6.24.1", - "babel-plugin-syntax-async-functions": "6.13.0", - "babel-runtime": "6.26.0" + "babel-helper-remap-async-to-generator": "^6.24.1", + "babel-plugin-syntax-async-functions": "^6.8.0", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-class-properties": { @@ -781,10 +781,10 @@ "integrity": "sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=", "dev": true, "requires": { - "babel-helper-function-name": "6.24.1", - "babel-plugin-syntax-class-properties": "6.13.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-helper-function-name": "^6.24.1", + "babel-plugin-syntax-class-properties": "^6.8.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-plugin-transform-decorators": { @@ -793,11 +793,11 @@ "integrity": "sha1-eIAT2PjGtSIr33s0Q5Df13Vp4k0=", "dev": true, "requires": { - "babel-helper-explode-class": "6.24.1", - "babel-plugin-syntax-decorators": "6.13.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-explode-class": "^6.24.1", + "babel-plugin-syntax-decorators": "^6.13.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-arrow-functions": { @@ -806,7 +806,7 @@ "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-block-scoped-functions": { @@ -815,7 +815,7 @@ "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-block-scoping": { @@ -824,11 +824,11 @@ "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.4" + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" } }, "babel-plugin-transform-es2015-classes": { @@ -837,15 +837,15 @@ "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", "dev": true, "requires": { - "babel-helper-define-map": "6.26.0", - "babel-helper-function-name": "6.24.1", - "babel-helper-optimise-call-expression": "6.24.1", - "babel-helper-replace-supers": "6.24.1", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-define-map": "^6.24.1", + "babel-helper-function-name": "^6.24.1", + "babel-helper-optimise-call-expression": "^6.24.1", + "babel-helper-replace-supers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-computed-properties": { @@ -854,8 +854,8 @@ "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-plugin-transform-es2015-destructuring": { @@ -864,7 +864,7 @@ "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-duplicate-keys": { @@ -873,8 +873,8 @@ "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-for-of": { @@ -883,7 +883,7 @@ "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-function-name": { @@ -892,9 +892,9 @@ "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", "dev": true, "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-literals": { @@ -903,7 +903,7 @@ "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-modules-amd": { @@ -912,9 +912,9 @@ "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", "dev": true, "requires": { - "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-plugin-transform-es2015-modules-commonjs": { @@ -923,10 +923,10 @@ "integrity": "sha1-DYOUApt9xqvhqX7xgeAHWN0uXYo=", "dev": true, "requires": { - "babel-plugin-transform-strict-mode": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-types": "6.26.0" + "babel-plugin-transform-strict-mode": "^6.24.1", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-types": "^6.26.0" } }, "babel-plugin-transform-es2015-modules-systemjs": { @@ -935,9 +935,9 @@ "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", "dev": true, "requires": { - "babel-helper-hoist-variables": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-helper-hoist-variables": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-plugin-transform-es2015-modules-umd": { @@ -946,9 +946,9 @@ "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", "dev": true, "requires": { - "babel-plugin-transform-es2015-modules-amd": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-plugin-transform-es2015-modules-amd": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-plugin-transform-es2015-object-super": { @@ -957,8 +957,8 @@ "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", "dev": true, "requires": { - "babel-helper-replace-supers": "6.24.1", - "babel-runtime": "6.26.0" + "babel-helper-replace-supers": "^6.24.1", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-parameters": { @@ -967,12 +967,12 @@ "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", "dev": true, "requires": { - "babel-helper-call-delegate": "6.24.1", - "babel-helper-get-function-arity": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-call-delegate": "^6.24.1", + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-shorthand-properties": { @@ -981,8 +981,8 @@ "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-spread": { @@ -991,7 +991,7 @@ "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-sticky-regex": { @@ -1000,9 +1000,9 @@ "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", "dev": true, "requires": { - "babel-helper-regex": "6.26.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-helper-regex": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-template-literals": { @@ -1011,7 +1011,7 @@ "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-typeof-symbol": { @@ -1020,7 +1020,7 @@ "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-unicode-regex": { @@ -1029,9 +1029,9 @@ "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", "dev": true, "requires": { - "babel-helper-regex": "6.26.0", - "babel-runtime": "6.26.0", - "regexpu-core": "2.0.0" + "babel-helper-regex": "^6.24.1", + "babel-runtime": "^6.22.0", + "regexpu-core": "^2.0.0" } }, "babel-plugin-transform-exponentiation-operator": { @@ -1040,9 +1040,9 @@ "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", "dev": true, "requires": { - "babel-helper-builder-binary-assignment-operator-visitor": "6.24.1", - "babel-plugin-syntax-exponentiation-operator": "6.13.0", - "babel-runtime": "6.26.0" + "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1", + "babel-plugin-syntax-exponentiation-operator": "^6.8.0", + "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-object-rest-spread": { @@ -1051,8 +1051,8 @@ "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=", "dev": true, "requires": { - "babel-plugin-syntax-object-rest-spread": "6.13.0", - "babel-runtime": "6.26.0" + "babel-plugin-syntax-object-rest-spread": "^6.8.0", + "babel-runtime": "^6.26.0" } }, "babel-plugin-transform-regenerator": { @@ -1061,7 +1061,7 @@ "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", "dev": true, "requires": { - "regenerator-transform": "0.10.1" + "regenerator-transform": "^0.10.0" } }, "babel-plugin-transform-strict-mode": { @@ -1070,8 +1070,8 @@ "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-polyfill": { @@ -1080,9 +1080,9 @@ "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "core-js": "2.5.3", - "regenerator-runtime": "0.10.5" + "babel-runtime": "^6.26.0", + "core-js": "^2.5.0", + "regenerator-runtime": "^0.10.5" }, "dependencies": { "regenerator-runtime": { @@ -1099,30 +1099,30 @@ "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=", "dev": true, "requires": { - "babel-plugin-check-es2015-constants": "6.22.0", - "babel-plugin-transform-es2015-arrow-functions": "6.22.0", - "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0", - "babel-plugin-transform-es2015-block-scoping": "6.26.0", - "babel-plugin-transform-es2015-classes": "6.24.1", - "babel-plugin-transform-es2015-computed-properties": "6.24.1", - "babel-plugin-transform-es2015-destructuring": "6.23.0", - "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", - "babel-plugin-transform-es2015-for-of": "6.23.0", - "babel-plugin-transform-es2015-function-name": "6.24.1", - "babel-plugin-transform-es2015-literals": "6.22.0", - "babel-plugin-transform-es2015-modules-amd": "6.24.1", - "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", - "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", - "babel-plugin-transform-es2015-modules-umd": "6.24.1", - "babel-plugin-transform-es2015-object-super": "6.24.1", - "babel-plugin-transform-es2015-parameters": "6.24.1", - "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", - "babel-plugin-transform-es2015-spread": "6.22.0", - "babel-plugin-transform-es2015-sticky-regex": "6.24.1", - "babel-plugin-transform-es2015-template-literals": "6.22.0", - "babel-plugin-transform-es2015-typeof-symbol": "6.23.0", - "babel-plugin-transform-es2015-unicode-regex": "6.24.1", - "babel-plugin-transform-regenerator": "6.26.0" + "babel-plugin-check-es2015-constants": "^6.22.0", + "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoping": "^6.24.1", + "babel-plugin-transform-es2015-classes": "^6.24.1", + "babel-plugin-transform-es2015-computed-properties": "^6.24.1", + "babel-plugin-transform-es2015-destructuring": "^6.22.0", + "babel-plugin-transform-es2015-duplicate-keys": "^6.24.1", + "babel-plugin-transform-es2015-for-of": "^6.22.0", + "babel-plugin-transform-es2015-function-name": "^6.24.1", + "babel-plugin-transform-es2015-literals": "^6.22.0", + "babel-plugin-transform-es2015-modules-amd": "^6.24.1", + "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", + "babel-plugin-transform-es2015-modules-systemjs": "^6.24.1", + "babel-plugin-transform-es2015-modules-umd": "^6.24.1", + "babel-plugin-transform-es2015-object-super": "^6.24.1", + "babel-plugin-transform-es2015-parameters": "^6.24.1", + "babel-plugin-transform-es2015-shorthand-properties": "^6.24.1", + "babel-plugin-transform-es2015-spread": "^6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "^6.24.1", + "babel-plugin-transform-es2015-template-literals": "^6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "^6.22.0", + "babel-plugin-transform-es2015-unicode-regex": "^6.24.1", + "babel-plugin-transform-regenerator": "^6.24.1" } }, "babel-preset-jest": { @@ -1131,8 +1131,8 @@ "integrity": "sha512-ps2UYz7IQpP2IgZ41tJjUuUDTxJioprHXD8fi9DoycKDGNqB3nAX/ggy1S3plaQd43ktBvMS1FkkyGNoBujFpg==", "dev": true, "requires": { - "babel-plugin-jest-hoist": "22.1.0", - "babel-plugin-syntax-object-rest-spread": "6.13.0" + "babel-plugin-jest-hoist": "^22.1.0", + "babel-plugin-syntax-object-rest-spread": "^6.13.0" } }, "babel-preset-stage-2": { @@ -1141,10 +1141,10 @@ "integrity": "sha1-2eKWD7PXEYfw5k7sYrwHdnIZvcE=", "dev": true, "requires": { - "babel-plugin-syntax-dynamic-import": "6.18.0", - "babel-plugin-transform-class-properties": "6.24.1", - "babel-plugin-transform-decorators": "6.24.1", - "babel-preset-stage-3": "6.24.1" + "babel-plugin-syntax-dynamic-import": "^6.18.0", + "babel-plugin-transform-class-properties": "^6.24.1", + "babel-plugin-transform-decorators": "^6.24.1", + "babel-preset-stage-3": "^6.24.1" } }, "babel-preset-stage-3": { @@ -1153,11 +1153,11 @@ "integrity": "sha1-g2raCp56f6N8sTj7kyb4eTSkg5U=", "dev": true, "requires": { - "babel-plugin-syntax-trailing-function-commas": "6.22.0", - "babel-plugin-transform-async-generator-functions": "6.24.1", - "babel-plugin-transform-async-to-generator": "6.24.1", - "babel-plugin-transform-exponentiation-operator": "6.24.1", - "babel-plugin-transform-object-rest-spread": "6.26.0" + "babel-plugin-syntax-trailing-function-commas": "^6.22.0", + "babel-plugin-transform-async-generator-functions": "^6.24.1", + "babel-plugin-transform-async-to-generator": "^6.24.1", + "babel-plugin-transform-exponentiation-operator": "^6.24.1", + "babel-plugin-transform-object-rest-spread": "^6.22.0" } }, "babel-register": { @@ -1166,13 +1166,13 @@ "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", "dev": true, "requires": { - "babel-core": "6.26.0", - "babel-runtime": "6.26.0", - "core-js": "2.5.3", - "home-or-tmp": "2.0.0", - "lodash": "4.17.4", - "mkdirp": "0.5.1", - "source-map-support": "0.4.18" + "babel-core": "^6.26.0", + "babel-runtime": "^6.26.0", + "core-js": "^2.5.0", + "home-or-tmp": "^2.0.0", + "lodash": "^4.17.4", + "mkdirp": "^0.5.1", + "source-map-support": "^0.4.15" }, "dependencies": { "source-map-support": { @@ -1181,7 +1181,7 @@ "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", "dev": true, "requires": { - "source-map": "0.5.7" + "source-map": "^0.5.6" } } } @@ -1192,8 +1192,8 @@ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "dev": true, "requires": { - "core-js": "2.5.3", - "regenerator-runtime": "0.11.1" + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" } }, "babel-template": { @@ -1202,11 +1202,11 @@ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "lodash": "4.17.4" + "babel-runtime": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "lodash": "^4.17.4" } }, "babel-traverse": { @@ -1215,15 +1215,15 @@ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", "dev": true, "requires": { - "babel-code-frame": "6.26.0", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "debug": "2.6.9", - "globals": "9.18.0", - "invariant": "2.2.2", - "lodash": "4.17.4" + "babel-code-frame": "^6.26.0", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "debug": "^2.6.8", + "globals": "^9.18.0", + "invariant": "^2.2.2", + "lodash": "^4.17.4" } }, "babel-types": { @@ -1232,10 +1232,10 @@ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "esutils": "2.0.2", - "lodash": "4.17.4", - "to-fast-properties": "1.0.3" + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" } }, "babylon": { @@ -1257,7 +1257,7 @@ "dev": true, "optional": true, "requires": { - "tweetnacl": "0.14.5" + "tweetnacl": "^0.14.3" } }, "binary-extensions": { @@ -1279,15 +1279,15 @@ "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", "requires": { "bytes": "3.0.0", - "content-type": "1.0.4", + "content-type": "~1.0.4", "debug": "2.6.9", - "depd": "1.1.2", - "http-errors": "1.6.2", + "depd": "~1.1.1", + "http-errors": "~1.6.2", "iconv-lite": "0.4.19", - "on-finished": "2.3.0", + "on-finished": "~2.3.0", "qs": "6.5.1", "raw-body": "2.3.2", - "type-is": "1.6.15" + "type-is": "~1.6.15" } }, "boom": { @@ -1296,7 +1296,7 @@ "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", "dev": true, "requires": { - "hoek": "4.2.0" + "hoek": "4.x.x" } }, "brace-expansion": { @@ -1305,7 +1305,7 @@ "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", "dev": true, "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -1315,9 +1315,9 @@ "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", "dev": true, "requires": { - "expand-range": "1.8.2", - "preserve": "0.2.0", - "repeat-element": "1.1.2" + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" } }, "browser-process-hrtime": { @@ -1347,7 +1347,7 @@ "integrity": "sha1-mseNPtXZFYBP2HrLFYvHlxR6Fxk=", "dev": true, "requires": { - "node-int64": "0.4.0" + "node-int64": "^0.4.0" } }, "builtin-modules": { @@ -1362,7 +1362,7 @@ "integrity": "sha1-WC7qSxqHO20CCkjVjfhfC7ps/d0=", "dev": true, "requires": { - "long": "3.2.0" + "long": "~3" } }, "bytes": { @@ -1396,8 +1396,8 @@ "dev": true, "optional": true, "requires": { - "align-text": "0.1.4", - "lazy-cache": "1.0.4" + "align-text": "^0.1.3", + "lazy-cache": "^1.0.3" } }, "chalk": { @@ -1406,9 +1406,9 @@ "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", "dev": true, "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" + "ansi-styles": "^3.1.0", + "escape-string-regexp": "^1.0.5", + "supports-color": "^4.0.0" } }, "chokidar": { @@ -1418,15 +1418,15 @@ "dev": true, "optional": true, "requires": { - "anymatch": "1.3.2", - "async-each": "1.0.1", - "fsevents": "1.1.3", - "glob-parent": "2.0.0", - "inherits": "2.0.3", - "is-binary-path": "1.0.1", - "is-glob": "2.0.1", - "path-is-absolute": "1.0.1", - "readdirp": "2.1.0" + "anymatch": "^1.3.0", + "async-each": "^1.0.0", + "fsevents": "^1.0.0", + "glob-parent": "^2.0.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^2.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0" } }, "ci-info": { @@ -1442,8 +1442,8 @@ "dev": true, "optional": true, "requires": { - "center-align": "0.1.3", - "right-align": "0.1.3", + "center-align": "^0.1.1", + "right-align": "^0.1.1", "wordwrap": "0.0.2" }, "dependencies": { @@ -1474,7 +1474,7 @@ "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", "dev": true, "requires": { - "color-name": "1.1.3" + "color-name": "^1.1.1" } }, "color-name": { @@ -1495,7 +1495,7 @@ "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", "dev": true, "requires": { - "delayed-stream": "1.0.0" + "delayed-stream": "~1.0.0" } }, "commander": { @@ -1560,9 +1560,9 @@ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", "dev": true, "requires": { - "lru-cache": "4.1.1", - "shebang-command": "1.2.0", - "which": "1.3.0" + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, "cryptiles": { @@ -1571,7 +1571,7 @@ "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", "dev": true, "requires": { - "boom": "5.2.0" + "boom": "5.x.x" }, "dependencies": { "boom": { @@ -1580,7 +1580,7 @@ "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", "dev": true, "requires": { - "hoek": "4.2.0" + "hoek": "4.x.x" } } } @@ -1597,7 +1597,7 @@ "integrity": "sha1-VBCXI0yyUTyDzu06zdwn/yeYfVQ=", "dev": true, "requires": { - "cssom": "0.3.2" + "cssom": "0.3.x" } }, "dashdash": { @@ -1606,7 +1606,7 @@ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "dev": true, "requires": { - "assert-plus": "1.0.0" + "assert-plus": "^1.0.0" } }, "debug": { @@ -1635,7 +1635,7 @@ "integrity": "sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=", "dev": true, "requires": { - "strip-bom": "2.0.0" + "strip-bom": "^2.0.0" } }, "define-properties": { @@ -1644,8 +1644,8 @@ "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", "dev": true, "requires": { - "foreach": "2.0.5", - "object-keys": "1.0.11" + "foreach": "^2.0.5", + "object-keys": "^1.0.8" } }, "delayed-stream": { @@ -1670,7 +1670,7 @@ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", "dev": true, "requires": { - "repeating": "2.0.1" + "repeating": "^2.0.0" } }, "detect-newline": { @@ -1704,7 +1704,7 @@ "dev": true, "optional": true, "requires": { - "jsbn": "0.1.1" + "jsbn": "~0.1.0" } }, "ee-first": { @@ -1722,7 +1722,7 @@ "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", "requires": { - "iconv-lite": "0.4.19" + "iconv-lite": "~0.4.13" } }, "error-ex": { @@ -1731,7 +1731,7 @@ "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", "dev": true, "requires": { - "is-arrayish": "0.2.1" + "is-arrayish": "^0.2.1" } }, "es-abstract": { @@ -1740,11 +1740,11 @@ "integrity": "sha512-/uh/DhdqIOSkAWifU+8nG78vlQxdLckUdI/sPgy0VhuXi2qJ7T8czBmqIYtLQVpCIFYafChnsRsB5pyb1JdmCQ==", "dev": true, "requires": { - "es-to-primitive": "1.1.1", - "function-bind": "1.1.1", - "has": "1.0.1", - "is-callable": "1.1.3", - "is-regex": "1.0.4" + "es-to-primitive": "^1.1.1", + "function-bind": "^1.1.1", + "has": "^1.0.1", + "is-callable": "^1.1.3", + "is-regex": "^1.0.4" } }, "es-to-primitive": { @@ -1753,9 +1753,9 @@ "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=", "dev": true, "requires": { - "is-callable": "1.1.3", - "is-date-object": "1.0.1", - "is-symbol": "1.0.1" + "is-callable": "^1.1.1", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.1" } }, "escape-html": { @@ -1775,11 +1775,11 @@ "integrity": "sha512-v0MYvNQ32bzwoG2OSFzWAkuahDQHK92JBN0pTAALJ4RIxEZe766QJPDR8Hqy7XNUy5K3fnVL76OqYAdc4TZEIw==", "dev": true, "requires": { - "esprima": "3.1.3", - "estraverse": "4.2.0", - "esutils": "2.0.2", - "optionator": "0.8.2", - "source-map": "0.5.7" + "esprima": "^3.1.3", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.5.6" }, "dependencies": { "esprima": { @@ -1819,7 +1819,7 @@ "integrity": "sha512-aLt95pexaugVtQerpmE51+4QfWrNc304uez7jvj6fWnN8GeEHpttB8F36n8N7uVhUMbH/1enbxQ9HImZ4w/9qg==", "dev": true, "requires": { - "merge": "1.2.0" + "merge": "^1.1.3" } }, "execa": { @@ -1828,13 +1828,13 @@ "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", "dev": true, "requires": { - "cross-spawn": "5.1.0", - "get-stream": "3.0.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" + "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" } }, "exit": { @@ -1849,7 +1849,7 @@ "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", "dev": true, "requires": { - "is-posix-bracket": "0.1.1" + "is-posix-bracket": "^0.1.0" } }, "expand-range": { @@ -1858,7 +1858,7 @@ "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", "dev": true, "requires": { - "fill-range": "2.2.3" + "fill-range": "^2.1.0" } }, "expect": { @@ -1867,12 +1867,12 @@ "integrity": "sha512-8K+8TjNnZq73KYtqNWKWTbYbN8z4loeL+Pn2bqpmtTdBtLNXJtpz9vkUcQlFsgKMDRA3VM8GXRA6qbV/oBF7Bw==", "dev": true, "requires": { - "ansi-styles": "3.2.0", - "jest-diff": "22.1.0", - "jest-get-type": "22.1.0", - "jest-matcher-utils": "22.1.0", - "jest-message-util": "22.1.0", - "jest-regex-util": "22.1.0" + "ansi-styles": "^3.2.0", + "jest-diff": "^22.1.0", + "jest-get-type": "^22.1.0", + "jest-matcher-utils": "^22.1.0", + "jest-message-util": "^22.1.0", + "jest-regex-util": "^22.1.0" } }, "express": { @@ -1880,36 +1880,36 @@ "resolved": "https://registry.npmjs.org/express/-/express-4.16.2.tgz", "integrity": "sha1-41xt/i1kt9ygpc1PIXgb4ymeB2w=", "requires": { - "accepts": "1.3.4", + "accepts": "~1.3.4", "array-flatten": "1.1.1", "body-parser": "1.18.2", "content-disposition": "0.5.2", - "content-type": "1.0.4", + "content-type": "~1.0.4", "cookie": "0.3.1", "cookie-signature": "1.0.6", "debug": "2.6.9", - "depd": "1.1.2", - "encodeurl": "1.0.1", - "escape-html": "1.0.3", - "etag": "1.8.1", + "depd": "~1.1.1", + "encodeurl": "~1.0.1", + "escape-html": "~1.0.3", + "etag": "~1.8.1", "finalhandler": "1.1.0", "fresh": "0.5.2", "merge-descriptors": "1.0.1", - "methods": "1.1.2", - "on-finished": "2.3.0", - "parseurl": "1.3.2", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", "path-to-regexp": "0.1.7", - "proxy-addr": "2.0.2", + "proxy-addr": "~2.0.2", "qs": "6.5.1", - "range-parser": "1.2.0", + "range-parser": "~1.2.0", "safe-buffer": "5.1.1", "send": "0.16.1", "serve-static": "1.13.1", "setprototypeof": "1.1.0", - "statuses": "1.3.1", - "type-is": "1.6.15", + "statuses": "~1.3.1", + "type-is": "~1.6.15", "utils-merge": "1.0.1", - "vary": "1.1.2" + "vary": "~1.1.2" }, "dependencies": { "setprototypeof": { @@ -1936,7 +1936,7 @@ "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", "dev": true, "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^1.0.0" } }, "extsprintf": { @@ -1951,9 +1951,9 @@ "integrity": "sha1-KAEcZ74Qgu+4MzjGbBn7UdeUfqk=", "dev": true, "requires": { - "bluebird": "3.5.1", + "bluebird": "^3.3.5", "facebook-sendapi-types": "github:fyndme/facebook-sendapi-types#4bc576d1a9b6204326631648d0c2043a1e99e08c", - "request-promise": "2.0.1" + "request-promise": "^2.0.1" }, "dependencies": { "request-promise": { @@ -1962,9 +1962,9 @@ "integrity": "sha1-rL1HtyXjk3Lt4xdM8pw42ezysw0=", "dev": true, "requires": { - "bluebird": "2.11.0", - "lodash": "4.17.4", - "request": "2.83.0" + "bluebird": "^2.3", + "lodash": "^4.5.0", + "request": "^2.34" }, "dependencies": { "bluebird": { @@ -1979,6 +1979,7 @@ }, "facebook-sendapi-types": { "version": "github:fyndme/facebook-sendapi-types#4bc576d1a9b6204326631648d0c2043a1e99e08c", + "from": "facebook-sendapi-types@github:fyndme/facebook-sendapi-types#4bc576d1a9b6204326631648d0c2043a1e99e08c", "dev": true }, "fast-deep-equal": { @@ -2005,7 +2006,7 @@ "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=", "dev": true, "requires": { - "websocket-driver": "0.7.0" + "websocket-driver": ">=0.5.1" } }, "fb-watchman": { @@ -2014,7 +2015,7 @@ "integrity": "sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg=", "dev": true, "requires": { - "bser": "2.0.0" + "bser": "^2.0.0" } }, "filename-regex": { @@ -2029,8 +2030,8 @@ "integrity": "sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=", "dev": true, "requires": { - "glob": "7.1.2", - "minimatch": "3.0.4" + "glob": "^7.0.3", + "minimatch": "^3.0.3" } }, "fill-range": { @@ -2039,11 +2040,11 @@ "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", "dev": true, "requires": { - "is-number": "2.1.0", - "isobject": "2.1.0", - "randomatic": "1.1.7", - "repeat-element": "1.1.2", - "repeat-string": "1.6.1" + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^1.1.3", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" } }, "finalhandler": { @@ -2052,12 +2053,12 @@ "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", "requires": { "debug": "2.6.9", - "encodeurl": "1.0.1", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "statuses": "1.3.1", - "unpipe": "1.0.0" + "encodeurl": "~1.0.1", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.3.1", + "unpipe": "~1.0.0" }, "dependencies": { "statuses": { @@ -2073,7 +2074,7 @@ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { - "locate-path": "2.0.0" + "locate-path": "^2.0.0" } }, "firebase": { @@ -2090,8 +2091,8 @@ "@firebase/messaging": "0.2.3", "@firebase/polyfill": "0.3.0", "@firebase/storage": "0.1.8", - "dom-storage": "2.1.0", - "xmlhttprequest": "1.8.0" + "dom-storage": "^2.0.2", + "xmlhttprequest": "^1.8.0" } }, "for-in": { @@ -2106,7 +2107,7 @@ "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", "dev": true, "requires": { - "for-in": "1.0.2" + "for-in": "^1.0.1" } }, "foreach": { @@ -2127,9 +2128,9 @@ "integrity": "sha1-b7lPvXGIUwbXPRXMSX/kzE7NRL8=", "dev": true, "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.17" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.5", + "mime-types": "^2.1.12" } }, "forwarded": { @@ -2161,8 +2162,8 @@ "dev": true, "optional": true, "requires": { - "nan": "2.8.0", - "node-pre-gyp": "0.6.39" + "nan": "^2.3.0", + "node-pre-gyp": "^0.6.39" }, "dependencies": { "abbrev": { @@ -2177,8 +2178,8 @@ "dev": true, "optional": true, "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" + "co": "^4.6.0", + "json-stable-stringify": "^1.0.1" } }, "ansi-regex": { @@ -2198,8 +2199,8 @@ "dev": true, "optional": true, "requires": { - "delegates": "1.0.0", - "readable-stream": "2.2.9" + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" } }, "asn1": { @@ -2243,7 +2244,7 @@ "dev": true, "optional": true, "requires": { - "tweetnacl": "0.14.5" + "tweetnacl": "^0.14.3" } }, "block-stream": { @@ -2251,7 +2252,7 @@ "bundled": true, "dev": true, "requires": { - "inherits": "2.0.3" + "inherits": "~2.0.0" } }, "boom": { @@ -2259,7 +2260,7 @@ "bundled": true, "dev": true, "requires": { - "hoek": "2.16.3" + "hoek": "2.x.x" } }, "brace-expansion": { @@ -2267,7 +2268,7 @@ "bundled": true, "dev": true, "requires": { - "balanced-match": "0.4.2", + "balanced-match": "^0.4.1", "concat-map": "0.0.1" } }, @@ -2298,7 +2299,7 @@ "bundled": true, "dev": true, "requires": { - "delayed-stream": "1.0.0" + "delayed-stream": "~1.0.0" } }, "concat-map": { @@ -2321,7 +2322,7 @@ "bundled": true, "dev": true, "requires": { - "boom": "2.10.1" + "boom": "2.x.x" } }, "dashdash": { @@ -2330,7 +2331,7 @@ "dev": true, "optional": true, "requires": { - "assert-plus": "1.0.0" + "assert-plus": "^1.0.0" }, "dependencies": { "assert-plus": { @@ -2379,7 +2380,7 @@ "dev": true, "optional": true, "requires": { - "jsbn": "0.1.1" + "jsbn": "~0.1.0" } }, "extend": { @@ -2405,9 +2406,9 @@ "dev": true, "optional": true, "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.15" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.5", + "mime-types": "^2.1.12" } }, "fs.realpath": { @@ -2420,10 +2421,10 @@ "bundled": true, "dev": true, "requires": { - "graceful-fs": "4.1.11", - "inherits": "2.0.3", - "mkdirp": "0.5.1", - "rimraf": "2.6.1" + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" } }, "fstream-ignore": { @@ -2432,9 +2433,9 @@ "dev": true, "optional": true, "requires": { - "fstream": "1.0.11", - "inherits": "2.0.3", - "minimatch": "3.0.4" + "fstream": "^1.0.0", + "inherits": "2", + "minimatch": "^3.0.0" } }, "gauge": { @@ -2443,14 +2444,14 @@ "dev": true, "optional": true, "requires": { - "aproba": "1.1.1", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" + "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" } }, "getpass": { @@ -2459,7 +2460,7 @@ "dev": true, "optional": true, "requires": { - "assert-plus": "1.0.0" + "assert-plus": "^1.0.0" }, "dependencies": { "assert-plus": { @@ -2475,12 +2476,12 @@ "bundled": true, "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "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": { @@ -2500,8 +2501,8 @@ "dev": true, "optional": true, "requires": { - "ajv": "4.11.8", - "har-schema": "1.0.5" + "ajv": "^4.9.1", + "har-schema": "^1.0.5" } }, "has-unicode": { @@ -2515,10 +2516,10 @@ "bundled": true, "dev": true, "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" + "boom": "2.x.x", + "cryptiles": "2.x.x", + "hoek": "2.x.x", + "sntp": "1.x.x" } }, "hoek": { @@ -2532,9 +2533,9 @@ "dev": true, "optional": true, "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.0", - "sshpk": "1.13.0" + "assert-plus": "^0.2.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" } }, "inflight": { @@ -2542,8 +2543,8 @@ "bundled": true, "dev": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -2562,7 +2563,7 @@ "bundled": true, "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "is-typedarray": { @@ -2588,7 +2589,7 @@ "dev": true, "optional": true, "requires": { - "jsbn": "0.1.1" + "jsbn": "~0.1.0" } }, "jsbn": { @@ -2609,7 +2610,7 @@ "dev": true, "optional": true, "requires": { - "jsonify": "0.0.0" + "jsonify": "~0.0.0" } }, "json-stringify-safe": { @@ -2654,7 +2655,7 @@ "bundled": true, "dev": true, "requires": { - "mime-db": "1.27.0" + "mime-db": "~1.27.0" } }, "minimatch": { @@ -2662,7 +2663,7 @@ "bundled": true, "dev": true, "requires": { - "brace-expansion": "1.1.7" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -2690,17 +2691,17 @@ "dev": true, "optional": true, "requires": { - "detect-libc": "1.0.2", + "detect-libc": "^1.0.2", "hawk": "3.1.3", - "mkdirp": "0.5.1", - "nopt": "4.0.1", - "npmlog": "4.1.0", - "rc": "1.2.1", + "mkdirp": "^0.5.1", + "nopt": "^4.0.1", + "npmlog": "^4.0.2", + "rc": "^1.1.7", "request": "2.81.0", - "rimraf": "2.6.1", - "semver": "5.3.0", - "tar": "2.2.1", - "tar-pack": "3.4.0" + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^2.2.1", + "tar-pack": "^3.4.0" } }, "nopt": { @@ -2709,8 +2710,8 @@ "dev": true, "optional": true, "requires": { - "abbrev": "1.1.0", - "osenv": "0.1.4" + "abbrev": "1", + "osenv": "^0.1.4" } }, "npmlog": { @@ -2719,10 +2720,10 @@ "dev": true, "optional": true, "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" + "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": { @@ -2747,7 +2748,7 @@ "bundled": true, "dev": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "os-homedir": { @@ -2768,8 +2769,8 @@ "dev": true, "optional": true, "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" } }, "path-is-absolute": { @@ -2806,10 +2807,10 @@ "dev": true, "optional": true, "requires": { - "deep-extend": "0.4.2", - "ini": "1.3.4", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" + "deep-extend": "~0.4.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" }, "dependencies": { "minimist": { @@ -2825,13 +2826,13 @@ "bundled": true, "dev": true, "requires": { - "buffer-shims": "1.0.0", - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "1.0.1", - "util-deprecate": "1.0.2" + "buffer-shims": "~1.0.0", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "string_decoder": "~1.0.0", + "util-deprecate": "~1.0.1" } }, "request": { @@ -2840,28 +2841,28 @@ "dev": true, "optional": true, "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "4.2.1", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.15", - "oauth-sign": "0.8.2", - "performance-now": "0.2.0", - "qs": "6.4.0", - "safe-buffer": "5.0.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.2", - "tunnel-agent": "0.6.0", - "uuid": "3.0.1" + "aws-sign2": "~0.6.0", + "aws4": "^1.2.1", + "caseless": "~0.12.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.0", + "forever-agent": "~0.6.1", + "form-data": "~2.1.1", + "har-validator": "~4.2.1", + "hawk": "~3.1.3", + "http-signature": "~1.1.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.7", + "oauth-sign": "~0.8.1", + "performance-now": "^0.2.0", + "qs": "~6.4.0", + "safe-buffer": "^5.0.1", + "stringstream": "~0.0.4", + "tough-cookie": "~2.3.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.0.0" } }, "rimraf": { @@ -2869,7 +2870,7 @@ "bundled": true, "dev": true, "requires": { - "glob": "7.1.2" + "glob": "^7.0.5" } }, "safe-buffer": { @@ -2900,7 +2901,7 @@ "bundled": true, "dev": true, "requires": { - "hoek": "2.16.3" + "hoek": "2.x.x" } }, "sshpk": { @@ -2909,15 +2910,15 @@ "dev": true, "optional": true, "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jodid25519": "1.0.2", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jodid25519": "^1.0.0", + "jsbn": "~0.1.0", + "tweetnacl": "~0.14.0" }, "dependencies": { "assert-plus": { @@ -2933,9 +2934,9 @@ "bundled": true, "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "string_decoder": { @@ -2943,7 +2944,7 @@ "bundled": true, "dev": true, "requires": { - "safe-buffer": "5.0.1" + "safe-buffer": "^5.0.1" } }, "stringstream": { @@ -2957,7 +2958,7 @@ "bundled": true, "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "strip-json-comments": { @@ -2971,9 +2972,9 @@ "bundled": true, "dev": true, "requires": { - "block-stream": "0.0.9", - "fstream": "1.0.11", - "inherits": "2.0.3" + "block-stream": "*", + "fstream": "^1.0.2", + "inherits": "2" } }, "tar-pack": { @@ -2982,14 +2983,14 @@ "dev": true, "optional": true, "requires": { - "debug": "2.6.8", - "fstream": "1.0.11", - "fstream-ignore": "1.0.5", - "once": "1.4.0", - "readable-stream": "2.2.9", - "rimraf": "2.6.1", - "tar": "2.2.1", - "uid-number": "0.0.6" + "debug": "^2.2.0", + "fstream": "^1.0.10", + "fstream-ignore": "^1.0.5", + "once": "^1.3.3", + "readable-stream": "^2.1.4", + "rimraf": "^2.5.1", + "tar": "^2.2.1", + "uid-number": "^0.0.6" } }, "tough-cookie": { @@ -2998,7 +2999,7 @@ "dev": true, "optional": true, "requires": { - "punycode": "1.4.1" + "punycode": "^1.4.1" } }, "tunnel-agent": { @@ -3007,7 +3008,7 @@ "dev": true, "optional": true, "requires": { - "safe-buffer": "5.0.1" + "safe-buffer": "^5.0.1" } }, "tweetnacl": { @@ -3048,7 +3049,7 @@ "dev": true, "optional": true, "requires": { - "string-width": "1.0.2" + "string-width": "^1.0.2" } }, "wrappy": { @@ -3082,7 +3083,7 @@ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "dev": true, "requires": { - "assert-plus": "1.0.0" + "assert-plus": "^1.0.0" } }, "glob": { @@ -3091,12 +3092,12 @@ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "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" } }, "glob-base": { @@ -3105,8 +3106,8 @@ "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", "dev": true, "requires": { - "glob-parent": "2.0.0", - "is-glob": "2.0.1" + "glob-parent": "^2.0.0", + "is-glob": "^2.0.0" } }, "glob-parent": { @@ -3115,7 +3116,7 @@ "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", "dev": true, "requires": { - "is-glob": "2.0.1" + "is-glob": "^2.0.0" } }, "globals": { @@ -3148,10 +3149,10 @@ "integrity": "sha512-xmhA11h2XhqpSVzDAmoQAYdNQ+swILXpKOiRpAEQ2kX55ioxVADc6v7SkS4zQBxm4klhQHgGqpGKvoL6LGx4VQ==", "dev": true, "requires": { - "lodash": "4.17.4", - "nan": "2.10.0", + "lodash": "^4.15.0", + "nan": "^2.10.0", "node-pre-gyp": "0.7.0", - "protobufjs": "5.0.2" + "protobufjs": "^5.0.0" }, "dependencies": { "abbrev": { @@ -3164,10 +3165,10 @@ "bundled": true, "dev": true, "requires": { - "co": "4.6.0", - "fast-deep-equal": "1.1.0", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.3.1" + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" } }, "ansi-regex": { @@ -3185,8 +3186,8 @@ "bundled": true, "dev": true, "requires": { - "delegates": "1.0.0", - "readable-stream": "2.3.5" + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" } }, "asn1": { @@ -3225,7 +3226,7 @@ "dev": true, "optional": true, "requires": { - "tweetnacl": "0.14.5" + "tweetnacl": "^0.14.3" } }, "block-stream": { @@ -3233,7 +3234,7 @@ "bundled": true, "dev": true, "requires": { - "inherits": "2.0.3" + "inherits": "~2.0.0" } }, "boom": { @@ -3241,7 +3242,7 @@ "bundled": true, "dev": true, "requires": { - "hoek": "4.2.1" + "hoek": "4.x.x" } }, "brace-expansion": { @@ -3249,7 +3250,7 @@ "bundled": true, "dev": true, "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -3273,7 +3274,7 @@ "bundled": true, "dev": true, "requires": { - "delayed-stream": "1.0.0" + "delayed-stream": "~1.0.0" } }, "concat-map": { @@ -3296,7 +3297,7 @@ "bundled": true, "dev": true, "requires": { - "boom": "5.2.0" + "boom": "5.x.x" }, "dependencies": { "boom": { @@ -3304,7 +3305,7 @@ "bundled": true, "dev": true, "requires": { - "hoek": "4.2.1" + "hoek": "4.x.x" } } } @@ -3314,7 +3315,7 @@ "bundled": true, "dev": true, "requires": { - "assert-plus": "1.0.0" + "assert-plus": "^1.0.0" } }, "debug": { @@ -3351,7 +3352,7 @@ "dev": true, "optional": true, "requires": { - "jsbn": "0.1.1" + "jsbn": "~0.1.0" } }, "extend": { @@ -3384,9 +3385,9 @@ "bundled": true, "dev": true, "requires": { - "asynckit": "0.4.0", + "asynckit": "^0.4.0", "combined-stream": "1.0.6", - "mime-types": "2.1.18" + "mime-types": "^2.1.12" } }, "fs.realpath": { @@ -3399,10 +3400,10 @@ "bundled": true, "dev": true, "requires": { - "graceful-fs": "4.1.11", - "inherits": "2.0.3", - "mkdirp": "0.5.1", - "rimraf": "2.6.2" + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" } }, "fstream-ignore": { @@ -3410,9 +3411,9 @@ "bundled": true, "dev": true, "requires": { - "fstream": "1.0.11", - "inherits": "2.0.3", - "minimatch": "3.0.4" + "fstream": "^1.0.0", + "inherits": "2", + "minimatch": "^3.0.0" } }, "gauge": { @@ -3420,14 +3421,14 @@ "bundled": true, "dev": true, "requires": { - "aproba": "1.2.0", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" + "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" } }, "getpass": { @@ -3435,7 +3436,7 @@ "bundled": true, "dev": true, "requires": { - "assert-plus": "1.0.0" + "assert-plus": "^1.0.0" } }, "glob": { @@ -3443,12 +3444,12 @@ "bundled": true, "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "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": { @@ -3466,8 +3467,8 @@ "bundled": true, "dev": true, "requires": { - "ajv": "5.5.2", - "har-schema": "2.0.0" + "ajv": "^5.1.0", + "har-schema": "^2.0.0" } }, "has-unicode": { @@ -3480,10 +3481,10 @@ "bundled": true, "dev": true, "requires": { - "boom": "4.3.1", - "cryptiles": "3.1.2", - "hoek": "4.2.1", - "sntp": "2.1.0" + "boom": "4.x.x", + "cryptiles": "3.x.x", + "hoek": "4.x.x", + "sntp": "2.x.x" } }, "hoek": { @@ -3496,9 +3497,9 @@ "bundled": true, "dev": true, "requires": { - "assert-plus": "1.0.0", - "jsprim": "1.4.1", - "sshpk": "1.14.1" + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" } }, "inflight": { @@ -3506,8 +3507,8 @@ "bundled": true, "dev": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -3525,7 +3526,7 @@ "bundled": true, "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "is-typedarray": { @@ -3585,7 +3586,7 @@ "bundled": true, "dev": true, "requires": { - "mime-db": "1.33.0" + "mime-db": "~1.33.0" } }, "minimatch": { @@ -3593,7 +3594,7 @@ "bundled": true, "dev": true, "requires": { - "brace-expansion": "1.1.8" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -3632,16 +3633,16 @@ "bundled": true, "dev": true, "requires": { - "detect-libc": "1.0.3", - "mkdirp": "0.5.1", - "nopt": "4.0.1", - "npmlog": "4.1.2", - "rc": "1.2.6", + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "nopt": "^4.0.1", + "npmlog": "^4.0.2", + "rc": "^1.1.7", "request": "2.83.0", - "rimraf": "2.6.2", - "semver": "5.5.0", - "tar": "2.2.1", - "tar-pack": "3.4.1" + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^2.2.1", + "tar-pack": "^3.4.0" } }, "nopt": { @@ -3649,8 +3650,8 @@ "bundled": true, "dev": true, "requires": { - "abbrev": "1.1.1", - "osenv": "0.1.5" + "abbrev": "1", + "osenv": "^0.1.4" } }, "npmlog": { @@ -3658,10 +3659,10 @@ "bundled": true, "dev": true, "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" + "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": { @@ -3684,7 +3685,7 @@ "bundled": true, "dev": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "os-homedir": { @@ -3702,8 +3703,8 @@ "bundled": true, "dev": true, "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" } }, "path-is-absolute": { @@ -3736,10 +3737,10 @@ "bundled": true, "dev": true, "requires": { - "deep-extend": "0.4.2", - "ini": "1.3.5", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" + "deep-extend": "~0.4.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" } }, "readable-stream": { @@ -3747,13 +3748,13 @@ "bundled": true, "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" + "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.0.3", + "util-deprecate": "~1.0.1" } }, "request": { @@ -3761,28 +3762,28 @@ "bundled": true, "dev": true, "requires": { - "aws-sign2": "0.7.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.6", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.3.2", - "har-validator": "5.0.3", - "hawk": "6.0.2", - "http-signature": "1.2.0", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.18", - "oauth-sign": "0.8.2", - "performance-now": "2.1.0", - "qs": "6.5.1", - "safe-buffer": "5.1.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.4", - "tunnel-agent": "0.6.0", - "uuid": "3.2.1" + "aws-sign2": "~0.7.0", + "aws4": "^1.6.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.1", + "forever-agent": "~0.6.1", + "form-data": "~2.3.1", + "har-validator": "~5.0.3", + "hawk": "~6.0.2", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.17", + "oauth-sign": "~0.8.2", + "performance-now": "^2.1.0", + "qs": "~6.5.1", + "safe-buffer": "^5.1.1", + "stringstream": "~0.0.5", + "tough-cookie": "~2.3.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.1.0" } }, "rimraf": { @@ -3790,7 +3791,7 @@ "bundled": true, "dev": true, "requires": { - "glob": "7.1.2" + "glob": "^7.0.5" } }, "safe-buffer": { @@ -3818,7 +3819,7 @@ "bundled": true, "dev": true, "requires": { - "hoek": "4.2.1" + "hoek": "4.x.x" } }, "sshpk": { @@ -3826,14 +3827,14 @@ "bundled": true, "dev": true, "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "tweetnacl": "~0.14.0" } }, "string-width": { @@ -3841,9 +3842,9 @@ "bundled": true, "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "string_decoder": { @@ -3851,7 +3852,7 @@ "bundled": true, "dev": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "~5.1.0" } }, "stringstream": { @@ -3864,7 +3865,7 @@ "bundled": true, "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "strip-json-comments": { @@ -3877,9 +3878,9 @@ "bundled": true, "dev": true, "requires": { - "block-stream": "0.0.9", - "fstream": "1.0.11", - "inherits": "2.0.3" + "block-stream": "*", + "fstream": "^1.0.2", + "inherits": "2" } }, "tar-pack": { @@ -3887,14 +3888,14 @@ "bundled": true, "dev": true, "requires": { - "debug": "2.6.9", - "fstream": "1.0.11", - "fstream-ignore": "1.0.5", - "once": "1.4.0", - "readable-stream": "2.3.5", - "rimraf": "2.6.2", - "tar": "2.2.1", - "uid-number": "0.0.6" + "debug": "^2.2.0", + "fstream": "^1.0.10", + "fstream-ignore": "^1.0.5", + "once": "^1.3.3", + "readable-stream": "^2.1.4", + "rimraf": "^2.5.1", + "tar": "^2.2.1", + "uid-number": "^0.0.6" } }, "tough-cookie": { @@ -3902,7 +3903,7 @@ "bundled": true, "dev": true, "requires": { - "punycode": "1.4.1" + "punycode": "^1.4.1" } }, "tunnel-agent": { @@ -3910,7 +3911,7 @@ "bundled": true, "dev": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "^5.0.1" } }, "tweetnacl": { @@ -3939,9 +3940,9 @@ "bundled": true, "dev": true, "requires": { - "assert-plus": "1.0.0", + "assert-plus": "^1.0.0", "core-util-is": "1.0.2", - "extsprintf": "1.3.0" + "extsprintf": "^1.2.0" } }, "wide-align": { @@ -3949,7 +3950,7 @@ "bundled": true, "dev": true, "requires": { - "string-width": "1.0.2" + "string-width": "^1.0.2" } }, "wrappy": { @@ -3965,10 +3966,10 @@ "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=", "dev": true, "requires": { - "async": "1.5.2", - "optimist": "0.6.1", - "source-map": "0.4.4", - "uglify-js": "2.8.29" + "async": "^1.4.0", + "optimist": "^0.6.1", + "source-map": "^0.4.4", + "uglify-js": "^2.6" }, "dependencies": { "async": { @@ -3983,7 +3984,7 @@ "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", "dev": true, "requires": { - "amdefine": "1.0.1" + "amdefine": ">=0.0.4" } } } @@ -4000,8 +4001,8 @@ "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", "dev": true, "requires": { - "ajv": "5.5.2", - "har-schema": "2.0.0" + "ajv": "^5.1.0", + "har-schema": "^2.0.0" } }, "has": { @@ -4010,7 +4011,7 @@ "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", "dev": true, "requires": { - "function-bind": "1.1.1" + "function-bind": "^1.0.2" } }, "has-ansi": { @@ -4019,7 +4020,7 @@ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "has-flag": { @@ -4034,10 +4035,10 @@ "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==", "dev": true, "requires": { - "boom": "4.3.1", - "cryptiles": "3.1.2", - "hoek": "4.2.0", - "sntp": "2.1.0" + "boom": "4.x.x", + "cryptiles": "3.x.x", + "hoek": "4.x.x", + "sntp": "2.x.x" } }, "he": { @@ -4058,8 +4059,8 @@ "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", "dev": true, "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.1" } }, "hosted-git-info": { @@ -4074,7 +4075,7 @@ "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", "dev": true, "requires": { - "whatwg-encoding": "1.0.3" + "whatwg-encoding": "^1.0.1" } }, "http-errors": { @@ -4085,7 +4086,7 @@ "depd": "1.1.1", "inherits": "2.0.3", "setprototypeof": "1.0.3", - "statuses": "1.4.0" + "statuses": ">= 1.3.1 < 2" }, "dependencies": { "depd": { @@ -4107,9 +4108,9 @@ "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "dev": true, "requires": { - "assert-plus": "1.0.0", - "jsprim": "1.4.1", - "sshpk": "1.13.1" + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" } }, "iconv-lite": { @@ -4123,8 +4124,8 @@ "integrity": "sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ==", "dev": true, "requires": { - "pkg-dir": "2.0.0", - "resolve-cwd": "2.0.0" + "pkg-dir": "^2.0.0", + "resolve-cwd": "^2.0.0" } }, "imurmurhash": { @@ -4139,8 +4140,8 @@ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -4154,7 +4155,7 @@ "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", "dev": true, "requires": { - "loose-envify": "1.3.1" + "loose-envify": "^1.0.0" } }, "invert-kv": { @@ -4181,7 +4182,7 @@ "dev": true, "optional": true, "requires": { - "binary-extensions": "1.11.0" + "binary-extensions": "^1.0.0" } }, "is-buffer": { @@ -4196,7 +4197,7 @@ "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", "dev": true, "requires": { - "builtin-modules": "1.1.1" + "builtin-modules": "^1.0.0" } }, "is-callable": { @@ -4211,7 +4212,7 @@ "integrity": "sha512-c7TnwxLePuqIlxHgr7xtxzycJPegNHFuIrBkwbf8hc58//+Op1CqFkyS+xnIMkwn9UsJIwc174BIjkyBmSpjKg==", "dev": true, "requires": { - "ci-info": "1.1.2" + "ci-info": "^1.0.0" } }, "is-date-object": { @@ -4232,7 +4233,7 @@ "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", "dev": true, "requires": { - "is-primitive": "2.0.0" + "is-primitive": "^2.0.0" } }, "is-extendable": { @@ -4253,7 +4254,7 @@ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "is-fullwidth-code-point": { @@ -4274,7 +4275,7 @@ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^1.0.0" } }, "is-number": { @@ -4283,7 +4284,7 @@ "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" } }, "is-posix-bracket": { @@ -4304,7 +4305,7 @@ "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", "dev": true, "requires": { - "has": "1.0.1" + "has": "^1.0.1" } }, "is-stream": { @@ -4357,8 +4358,8 @@ "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", "dev": true, "requires": { - "node-fetch": "1.7.3", - "whatwg-fetch": "2.0.4" + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" } }, "isstream": { @@ -4373,17 +4374,17 @@ "integrity": "sha512-oFCwXvd65amgaPCzqrR+a2XjanS1MvpXN6l/MlMUTv6uiA1NOgGX+I0uyq8Lg3GDxsxPsaP1049krz3hIJ5+KA==", "dev": true, "requires": { - "async": "2.6.0", - "fileset": "2.0.3", - "istanbul-lib-coverage": "1.1.1", - "istanbul-lib-hook": "1.1.0", - "istanbul-lib-instrument": "1.9.1", - "istanbul-lib-report": "1.1.2", - "istanbul-lib-source-maps": "1.2.2", - "istanbul-reports": "1.1.3", - "js-yaml": "3.10.0", - "mkdirp": "0.5.1", - "once": "1.4.0" + "async": "^2.1.4", + "fileset": "^2.0.2", + "istanbul-lib-coverage": "^1.1.1", + "istanbul-lib-hook": "^1.1.0", + "istanbul-lib-instrument": "^1.9.1", + "istanbul-lib-report": "^1.1.2", + "istanbul-lib-source-maps": "^1.2.2", + "istanbul-reports": "^1.1.3", + "js-yaml": "^3.7.0", + "mkdirp": "^0.5.1", + "once": "^1.4.0" } }, "istanbul-lib-coverage": { @@ -4398,7 +4399,7 @@ "integrity": "sha512-U3qEgwVDUerZ0bt8cfl3dSP3S6opBoOtk3ROO5f2EfBr/SRiD9FQqzwaZBqFORu8W7O0EXpai+k7kxHK13beRg==", "dev": true, "requires": { - "append-transform": "0.4.0" + "append-transform": "^0.4.0" } }, "istanbul-lib-instrument": { @@ -4407,13 +4408,13 @@ "integrity": "sha512-RQmXeQ7sphar7k7O1wTNzVczF9igKpaeGQAG9qR2L+BS4DCJNTI9nytRmIVYevwO0bbq+2CXvJmYDuz0gMrywA==", "dev": true, "requires": { - "babel-generator": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "istanbul-lib-coverage": "1.1.1", - "semver": "5.5.0" + "babel-generator": "^6.18.0", + "babel-template": "^6.16.0", + "babel-traverse": "^6.18.0", + "babel-types": "^6.18.0", + "babylon": "^6.18.0", + "istanbul-lib-coverage": "^1.1.1", + "semver": "^5.3.0" } }, "istanbul-lib-report": { @@ -4422,10 +4423,10 @@ "integrity": "sha512-UTv4VGx+HZivJQwAo1wnRwe1KTvFpfi/NYwN7DcsrdzMXwpRT/Yb6r4SBPoHWj4VuQPakR32g4PUUeyKkdDkBA==", "dev": true, "requires": { - "istanbul-lib-coverage": "1.1.1", - "mkdirp": "0.5.1", - "path-parse": "1.0.5", - "supports-color": "3.2.3" + "istanbul-lib-coverage": "^1.1.1", + "mkdirp": "^0.5.1", + "path-parse": "^1.0.5", + "supports-color": "^3.1.2" }, "dependencies": { "has-flag": { @@ -4440,7 +4441,7 @@ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { - "has-flag": "1.0.0" + "has-flag": "^1.0.0" } } } @@ -4451,11 +4452,11 @@ "integrity": "sha512-8BfdqSfEdtip7/wo1RnrvLpHVEd8zMZEDmOFEnpC6dg0vXflHt9nvoAyQUzig2uMSXfF2OBEYBV3CVjIL9JvaQ==", "dev": true, "requires": { - "debug": "3.1.0", - "istanbul-lib-coverage": "1.1.1", - "mkdirp": "0.5.1", - "rimraf": "2.6.2", - "source-map": "0.5.7" + "debug": "^3.1.0", + "istanbul-lib-coverage": "^1.1.1", + "mkdirp": "^0.5.1", + "rimraf": "^2.6.1", + "source-map": "^0.5.3" }, "dependencies": { "debug": { @@ -4475,7 +4476,7 @@ "integrity": "sha512-ZEelkHh8hrZNI5xDaKwPMFwDsUf5wIEI2bXAFGp1e6deR2mnEKBPhLJEgr4ZBt8Gi6Mj38E/C8kcy9XLggVO2Q==", "dev": true, "requires": { - "handlebars": "4.0.11" + "handlebars": "^4.0.3" } }, "jest": { @@ -4484,7 +4485,7 @@ "integrity": "sha512-cIPkn+OFGabazPesbhnYkadPftoO2Fo3w84QjeIP+A8eZ5qj7Zs4PuTemAW8StNMxySJr0KPk/LhYG2GUHLexQ==", "dev": true, "requires": { - "jest-cli": "22.1.4" + "jest-cli": "^22.1.4" }, "dependencies": { "jest-cli": { @@ -4493,39 +4494,39 @@ "integrity": "sha512-p7yOu0Q5uuXb3Q93qEg3LE6eNGgAGueakifxXNEqQx4b0lOl2YlC9t6BLQWNOJ+z42VWK/BIdFjf6lxKcTkjFA==", "dev": true, "requires": { - "ansi-escapes": "3.0.0", - "chalk": "2.3.0", - "exit": "0.1.2", - "glob": "7.1.2", - "graceful-fs": "4.1.11", - "import-local": "1.0.0", - "is-ci": "1.1.0", - "istanbul-api": "1.2.1", - "istanbul-lib-coverage": "1.1.1", - "istanbul-lib-instrument": "1.9.1", - "istanbul-lib-source-maps": "1.2.2", - "jest-changed-files": "22.1.4", - "jest-config": "22.1.4", - "jest-environment-jsdom": "22.1.4", - "jest-get-type": "22.1.0", - "jest-haste-map": "22.1.0", - "jest-message-util": "22.1.0", - "jest-regex-util": "22.1.0", - "jest-resolve-dependencies": "22.1.0", - "jest-runner": "22.1.4", - "jest-runtime": "22.1.4", - "jest-snapshot": "22.1.2", - "jest-util": "22.1.4", - "jest-worker": "22.1.0", - "micromatch": "2.3.11", - "node-notifier": "5.2.1", - "realpath-native": "1.0.0", - "rimraf": "2.6.2", - "slash": "1.0.0", - "string-length": "2.0.0", - "strip-ansi": "4.0.0", - "which": "1.3.0", - "yargs": "10.1.1" + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.1.11", + "import-local": "^1.0.0", + "is-ci": "^1.0.10", + "istanbul-api": "^1.1.14", + "istanbul-lib-coverage": "^1.1.1", + "istanbul-lib-instrument": "^1.8.0", + "istanbul-lib-source-maps": "^1.2.1", + "jest-changed-files": "^22.1.4", + "jest-config": "^22.1.4", + "jest-environment-jsdom": "^22.1.4", + "jest-get-type": "^22.1.0", + "jest-haste-map": "^22.1.0", + "jest-message-util": "^22.1.0", + "jest-regex-util": "^22.1.0", + "jest-resolve-dependencies": "^22.1.0", + "jest-runner": "^22.1.4", + "jest-runtime": "^22.1.4", + "jest-snapshot": "^22.1.2", + "jest-util": "^22.1.4", + "jest-worker": "^22.1.0", + "micromatch": "^2.3.11", + "node-notifier": "^5.1.2", + "realpath-native": "^1.0.0", + "rimraf": "^2.5.4", + "slash": "^1.0.0", + "string-length": "^2.0.0", + "strip-ansi": "^4.0.0", + "which": "^1.2.12", + "yargs": "^10.0.3" } } } @@ -4536,7 +4537,7 @@ "integrity": "sha512-EpqJhwt+N/wEHRT+5KrjagVrunduOfMgAb7fjjHkXHFCPRZoVZwl896S7krx7txf5hrMNUkpECnOnO2wBgzJCw==", "dev": true, "requires": { - "throat": "4.1.0" + "throat": "^4.0.0" } }, "jest-config": { @@ -4545,17 +4546,17 @@ "integrity": "sha512-ZImFp7STrUDOgQLW5I5UloCiCRMh6HmMIYIoWqaQkxnR5ws7MuZFG/Ns9sZFyfrnyWCvcW91e+XcEfNeoa4Jew==", "dev": true, "requires": { - "chalk": "2.3.0", - "glob": "7.1.2", - "jest-environment-jsdom": "22.1.4", - "jest-environment-node": "22.1.4", - "jest-get-type": "22.1.0", - "jest-jasmine2": "22.1.4", - "jest-regex-util": "22.1.0", - "jest-resolve": "22.1.4", - "jest-util": "22.1.4", - "jest-validate": "22.1.2", - "pretty-format": "22.1.0" + "chalk": "^2.0.1", + "glob": "^7.1.1", + "jest-environment-jsdom": "^22.1.4", + "jest-environment-node": "^22.1.4", + "jest-get-type": "^22.1.0", + "jest-jasmine2": "^22.1.4", + "jest-regex-util": "^22.1.0", + "jest-resolve": "^22.1.4", + "jest-util": "^22.1.4", + "jest-validate": "^22.1.2", + "pretty-format": "^22.1.0" } }, "jest-diff": { @@ -4564,10 +4565,10 @@ "integrity": "sha512-lowdbU/dzXh+2/MR5QcvU5KPNkO4JdAEYw0PkQCbIQIuy5+g3QZBuVhWh8179Fmpg4CQrz1WgoK/yQHDCHbqqw==", "dev": true, "requires": { - "chalk": "2.3.0", - "diff": "3.4.0", - "jest-get-type": "22.1.0", - "pretty-format": "22.1.0" + "chalk": "^2.0.1", + "diff": "^3.2.0", + "jest-get-type": "^22.1.0", + "pretty-format": "^22.1.0" } }, "jest-docblock": { @@ -4576,7 +4577,7 @@ "integrity": "sha512-/+OGgBVRJb5wCbXrB1LQvibQBz2SdrvDdKRNzY1gL+OISQJZCR9MOewbygdT5rVzbbkfhC4AR2x+qWmNUdJfjw==", "dev": true, "requires": { - "detect-newline": "2.1.0" + "detect-newline": "^2.1.0" } }, "jest-environment-jsdom": { @@ -4585,9 +4586,9 @@ "integrity": "sha512-YGqFJzei/kq5BgQ8su7igLoCl34ytUffr5ZoqwLrDzCmXUKyIiuwBFbWe3xFMG/crlDb1emhBXdzWM1yDEDw5Q==", "dev": true, "requires": { - "jest-mock": "22.1.0", - "jest-util": "22.1.4", - "jsdom": "11.5.1" + "jest-mock": "^22.1.0", + "jest-util": "^22.1.4", + "jsdom": "^11.5.1" } }, "jest-environment-node": { @@ -4596,8 +4597,8 @@ "integrity": "sha512-rQmtzgZVdyCzeXsE8i7Alw2483KSd2PYjssZWZYeNzonN/lBeUjjaOCgLWp6FspBzSTnYF7x6cN4umGZxYAhow==", "dev": true, "requires": { - "jest-mock": "22.1.0", - "jest-util": "22.1.4" + "jest-mock": "^22.1.0", + "jest-util": "^22.1.4" } }, "jest-get-type": { @@ -4612,12 +4613,12 @@ "integrity": "sha512-vETdC6GboGlZX6+9SMZkXtYRQSKBbQ47sFF7NGglbMN4eyIZBODply8rlcO01KwBiAeiNCKdjUyfonZzJ93JEg==", "dev": true, "requires": { - "fb-watchman": "2.0.0", - "graceful-fs": "4.1.11", - "jest-docblock": "22.1.0", - "jest-worker": "22.1.0", - "micromatch": "2.3.11", - "sane": "2.2.0" + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.1.11", + "jest-docblock": "^22.1.0", + "jest-worker": "^22.1.0", + "micromatch": "^2.3.11", + "sane": "^2.0.0" } }, "jest-jasmine2": { @@ -4626,17 +4627,17 @@ "integrity": "sha512-+KoRiG4PUwURB7UXei2jzxvbCebhXgTYS+xWl3FsSYUn3flcxdcOgAsFolx31Dkk/B1bVf1HIKt/B6Ubucp9aQ==", "dev": true, "requires": { - "callsites": "2.0.0", - "chalk": "2.3.0", - "co": "4.6.0", - "expect": "22.1.0", - "graceful-fs": "4.1.11", - "is-generator-fn": "1.0.0", - "jest-diff": "22.1.0", - "jest-matcher-utils": "22.1.0", - "jest-message-util": "22.1.0", - "jest-snapshot": "22.1.2", - "source-map-support": "0.5.2" + "callsites": "^2.0.0", + "chalk": "^2.0.1", + "co": "^4.6.0", + "expect": "^22.1.0", + "graceful-fs": "^4.1.11", + "is-generator-fn": "^1.0.0", + "jest-diff": "^22.1.0", + "jest-matcher-utils": "^22.1.0", + "jest-message-util": "^22.1.0", + "jest-snapshot": "^22.1.2", + "source-map-support": "^0.5.0" } }, "jest-leak-detector": { @@ -4645,7 +4646,7 @@ "integrity": "sha512-8QsCWkncWAqdvrXN4yXQp9vgWF6CT3RkRey+d06SIHX913uXzAJhJdZyo6eE+uHVYMxUbxqW93npbUFhAR0YxA==", "dev": true, "requires": { - "pretty-format": "22.1.0" + "pretty-format": "^22.1.0" } }, "jest-matcher-utils": { @@ -4654,9 +4655,9 @@ "integrity": "sha512-Zn1OD9wVjILOdvRxgAnqiCN36OX6KJx+P2FHN+3lzQ0omG2N2OAguxE1QXuJJneG2yndlkXjekXFP254c0cSpw==", "dev": true, "requires": { - "chalk": "2.3.0", - "jest-get-type": "22.1.0", - "pretty-format": "22.1.0" + "chalk": "^2.0.1", + "jest-get-type": "^22.1.0", + "pretty-format": "^22.1.0" } }, "jest-message-util": { @@ -4665,11 +4666,11 @@ "integrity": "sha512-kftcoawOeOVUGuGWmMupJt7FGLK1pqOrh02FlJwtImmPGZ2yTWCTx2D+N/g95qD2jCbQ/ntH1goBixhAIIxL+g==", "dev": true, "requires": { - "@babel/code-frame": "7.0.0-beta.38", - "chalk": "2.3.0", - "micromatch": "2.3.11", - "slash": "1.0.0", - "stack-utils": "1.0.1" + "@babel/code-frame": "^7.0.0-beta.35", + "chalk": "^2.0.1", + "micromatch": "^2.3.11", + "slash": "^1.0.0", + "stack-utils": "^1.0.1" } }, "jest-mock": { @@ -4690,8 +4691,8 @@ "integrity": "sha512-/HuCMeiTD6YJ+NF15bU1mal1r7Gov0GJozA7232XiYve7cOOnU2JwXBx3EQmcIuG38uNrRPjtgpiXkBqfnk4Og==", "dev": true, "requires": { - "browser-resolve": "1.11.2", - "chalk": "2.3.0" + "browser-resolve": "^1.11.2", + "chalk": "^2.0.1" } }, "jest-resolve-dependencies": { @@ -4700,7 +4701,7 @@ "integrity": "sha512-76Ll61bD/Sus8wK8d+lw891EtiBJGJkWG8OuVDTEX0z3z2+jPujvQqSB2eQ+kCHyCsRwJ2PSjhn3UHqae/oEtA==", "dev": true, "requires": { - "jest-regex-util": "22.1.0" + "jest-regex-util": "^22.1.0" } }, "jest-runner": { @@ -4709,17 +4710,17 @@ "integrity": "sha512-HAyZ0Q2Fyk7mlbtbSKP75hNs9IP0Md7kzPUN1uNKbvQfZkXA/e7P0ttzAIGQtEbRx656tYwkfWNW+hXvs1i4/g==", "dev": true, "requires": { - "exit": "0.1.2", - "jest-config": "22.1.4", - "jest-docblock": "22.1.0", - "jest-haste-map": "22.1.0", - "jest-jasmine2": "22.1.4", - "jest-leak-detector": "22.1.0", - "jest-message-util": "22.1.0", - "jest-runtime": "22.1.4", - "jest-util": "22.1.4", - "jest-worker": "22.1.0", - "throat": "4.1.0" + "exit": "^0.1.2", + "jest-config": "^22.1.4", + "jest-docblock": "^22.1.0", + "jest-haste-map": "^22.1.0", + "jest-jasmine2": "^22.1.4", + "jest-leak-detector": "^22.1.0", + "jest-message-util": "^22.1.0", + "jest-runtime": "^22.1.4", + "jest-util": "^22.1.4", + "jest-worker": "^22.1.0", + "throat": "^4.0.0" } }, "jest-runtime": { @@ -4728,25 +4729,25 @@ "integrity": "sha512-r/UjVuQppDRwbUprDlLYdd8MTYY+H8H6BCqRujGjo5/QyIt3b0hppNoOQHF+0bHNtuz/sR9chJ9HJ3A1fiv9Pw==", "dev": true, "requires": { - "babel-core": "6.26.0", - "babel-jest": "22.1.0", - "babel-plugin-istanbul": "4.1.5", - "chalk": "2.3.0", - "convert-source-map": "1.5.1", - "exit": "0.1.2", - "graceful-fs": "4.1.11", - "jest-config": "22.1.4", - "jest-haste-map": "22.1.0", - "jest-regex-util": "22.1.0", - "jest-resolve": "22.1.4", - "jest-util": "22.1.4", - "json-stable-stringify": "1.0.1", - "micromatch": "2.3.11", - "realpath-native": "1.0.0", - "slash": "1.0.0", + "babel-core": "^6.0.0", + "babel-jest": "^22.1.0", + "babel-plugin-istanbul": "^4.1.5", + "chalk": "^2.0.1", + "convert-source-map": "^1.4.0", + "exit": "^0.1.2", + "graceful-fs": "^4.1.11", + "jest-config": "^22.1.4", + "jest-haste-map": "^22.1.0", + "jest-regex-util": "^22.1.0", + "jest-resolve": "^22.1.4", + "jest-util": "^22.1.4", + "json-stable-stringify": "^1.0.1", + "micromatch": "^2.3.11", + "realpath-native": "^1.0.0", + "slash": "^1.0.0", "strip-bom": "3.0.0", - "write-file-atomic": "2.3.0", - "yargs": "10.1.1" + "write-file-atomic": "^2.1.0", + "yargs": "^10.0.3" }, "dependencies": { "strip-bom": { @@ -4763,12 +4764,12 @@ "integrity": "sha512-45co/M0gTe6Y6yHaJLydEZKHOFpFHESLah40jW35DWd3pd7q188bsi0oUY4Kls7PDXUamvTWuTKTZXCtzwSvCw==", "dev": true, "requires": { - "chalk": "2.3.0", - "jest-diff": "22.1.0", - "jest-matcher-utils": "22.1.0", - "mkdirp": "0.5.1", - "natural-compare": "1.4.0", - "pretty-format": "22.1.0" + "chalk": "^2.0.1", + "jest-diff": "^22.1.0", + "jest-matcher-utils": "^22.1.0", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^22.1.0" } }, "jest-util": { @@ -4777,13 +4778,13 @@ "integrity": "sha512-zM29idoVBPvmpsGubS7YmywVyPe4/m1wE2YhmKp0vVmrQmuby7ObuMqabp82EYlM0Rdp4GNEtaDamW9jg8lgTg==", "dev": true, "requires": { - "callsites": "2.0.0", - "chalk": "2.3.0", - "graceful-fs": "4.1.11", - "is-ci": "1.1.0", - "jest-message-util": "22.1.0", - "jest-validate": "22.1.2", - "mkdirp": "0.5.1" + "callsites": "^2.0.0", + "chalk": "^2.0.1", + "graceful-fs": "^4.1.11", + "is-ci": "^1.0.10", + "jest-message-util": "^22.1.0", + "jest-validate": "^22.1.2", + "mkdirp": "^0.5.1" } }, "jest-validate": { @@ -4792,10 +4793,10 @@ "integrity": "sha512-IjvMsV7GW5ghg5PTQvU23zJqTBmnq10eY+4n47awUeXYEGH27N+JajFPOg6tsN+OYvEPsohPquKoqQ5XBVs/ow==", "dev": true, "requires": { - "chalk": "2.3.0", - "jest-get-type": "22.1.0", - "leven": "2.1.0", - "pretty-format": "22.1.0" + "chalk": "^2.0.1", + "jest-get-type": "^22.1.0", + "leven": "^2.1.0", + "pretty-format": "^22.1.0" } }, "jest-worker": { @@ -4804,7 +4805,7 @@ "integrity": "sha512-ezLueYAQowk5N6g2J7bNZfq4NWZvMNB5Qd24EmOZLcM5SXTdiFvxykZIoNiMj9C98cCbPaojX8tfR7b1LJwNig==", "dev": true, "requires": { - "merge-stream": "1.0.1" + "merge-stream": "^1.0.1" } }, "js-tokens": { @@ -4819,8 +4820,8 @@ "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==", "dev": true, "requires": { - "argparse": "1.0.9", - "esprima": "4.0.0" + "argparse": "^1.0.7", + "esprima": "^4.0.0" } }, "jsbn": { @@ -4836,30 +4837,30 @@ "integrity": "sha512-89ztIZ03aYK9f1uUrLXLsZndRge/JnZjzjpaN+lrse3coqz+8PR/dX4WLHpbF5fIKTXhDjFODOJw2328lPJ90g==", "dev": true, "requires": { - "abab": "1.0.4", - "acorn": "5.3.0", - "acorn-globals": "4.1.0", - "array-equal": "1.0.0", - "browser-process-hrtime": "0.1.2", - "content-type-parser": "1.0.2", - "cssom": "0.3.2", - "cssstyle": "0.2.37", - "domexception": "1.0.0", - "escodegen": "1.9.0", - "html-encoding-sniffer": "1.0.2", - "left-pad": "1.2.0", - "nwmatcher": "1.4.3", - "parse5": "3.0.3", - "pn": "1.1.0", - "request": "2.83.0", - "request-promise-native": "1.0.5", - "sax": "1.2.4", - "symbol-tree": "3.2.2", - "tough-cookie": "2.3.3", - "webidl-conversions": "4.0.2", - "whatwg-encoding": "1.0.3", - "whatwg-url": "6.4.0", - "xml-name-validator": "2.0.1" + "abab": "^1.0.3", + "acorn": "^5.1.2", + "acorn-globals": "^4.0.0", + "array-equal": "^1.0.0", + "browser-process-hrtime": "^0.1.2", + "content-type-parser": "^1.0.1", + "cssom": ">= 0.3.2 < 0.4.0", + "cssstyle": ">= 0.2.37 < 0.3.0", + "domexception": "^1.0.0", + "escodegen": "^1.9.0", + "html-encoding-sniffer": "^1.0.1", + "left-pad": "^1.2.0", + "nwmatcher": "^1.4.3", + "parse5": "^3.0.2", + "pn": "^1.0.0", + "request": "^2.83.0", + "request-promise-native": "^1.0.3", + "sax": "^1.2.1", + "symbol-tree": "^3.2.1", + "tough-cookie": "^2.3.3", + "webidl-conversions": "^4.0.2", + "whatwg-encoding": "^1.0.1", + "whatwg-url": "^6.3.0", + "xml-name-validator": "^2.0.1" } }, "jsesc": { @@ -4886,7 +4887,7 @@ "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", "dev": true, "requires": { - "jsonify": "0.0.0" + "jsonify": "~0.0.0" } }, "json-stringify-safe": { @@ -4925,7 +4926,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } }, "lazy-cache": { @@ -4941,7 +4942,7 @@ "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", "dev": true, "requires": { - "invert-kv": "1.0.0" + "invert-kv": "^1.0.0" } }, "left-pad": { @@ -4962,8 +4963,8 @@ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "dev": true, "requires": { - "prelude-ls": "1.1.2", - "type-check": "0.3.2" + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" } }, "load-json-file": { @@ -4972,11 +4973,11 @@ "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "strip-bom": "2.0.0" + "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": { @@ -4985,8 +4986,8 @@ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, "requires": { - "p-locate": "2.0.0", - "path-exists": "3.0.0" + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" } }, "lodash": { @@ -5019,7 +5020,7 @@ "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", "dev": true, "requires": { - "js-tokens": "3.0.2" + "js-tokens": "^3.0.0" } }, "lru-cache": { @@ -5028,8 +5029,8 @@ "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", "dev": true, "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" } }, "makeerror": { @@ -5038,7 +5039,7 @@ "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", "dev": true, "requires": { - "tmpl": "1.0.4" + "tmpl": "1.0.x" } }, "media-typer": { @@ -5052,7 +5053,7 @@ "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", "dev": true, "requires": { - "mimic-fn": "1.1.0" + "mimic-fn": "^1.0.0" } }, "merge": { @@ -5072,7 +5073,7 @@ "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", "dev": true, "requires": { - "readable-stream": "2.3.3" + "readable-stream": "^2.0.1" } }, "messenger-bot-tester": { @@ -5081,13 +5082,13 @@ "integrity": "sha1-JbgJXjVSdmFJhooF5IBYFDXcA3A=", "dev": true, "requires": { - "api-check": "7.5.5", - "bluebird": "3.5.1", - "body-parser": "1.18.2", - "express": "4.16.2", - "facebook-send-api": "2.8.0", - "lodash": "4.17.4", - "request-promise": "4.2.2" + "api-check": "^7.5.5", + "bluebird": "^3.4.1", + "body-parser": "^1.15.2", + "express": "^4.14.0", + "facebook-send-api": "^2.5.0", + "lodash": "^4.15.0", + "request-promise": "^4.1.1" } }, "methods": { @@ -5101,19 +5102,19 @@ "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", "dev": true, "requires": { - "arr-diff": "2.0.0", - "array-unique": "0.2.1", - "braces": "1.8.5", - "expand-brackets": "0.1.5", - "extglob": "0.3.2", - "filename-regex": "2.0.1", - "is-extglob": "1.0.0", - "is-glob": "2.0.1", - "kind-of": "3.2.2", - "normalize-path": "2.1.1", - "object.omit": "2.0.1", - "parse-glob": "3.0.4", - "regex-cache": "0.4.4" + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" } }, "mime": { @@ -5131,7 +5132,7 @@ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", "requires": { - "mime-db": "1.30.0" + "mime-db": "~1.30.0" } }, "mimic-fn": { @@ -5146,7 +5147,7 @@ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { - "brace-expansion": "1.1.8" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -5209,7 +5210,7 @@ "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", "dev": true, "requires": { - "has-flag": "2.0.0" + "has-flag": "^2.0.0" } } } @@ -5242,8 +5243,8 @@ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", "requires": { - "encoding": "0.1.12", - "is-stream": "1.1.0" + "encoding": "^0.1.11", + "is-stream": "^1.0.1" } }, "node-int64": { @@ -5258,10 +5259,10 @@ "integrity": "sha512-MIBs+AAd6dJ2SklbbE8RUDRlIVhU8MaNLh1A9SUZDUHPiZkWLFde6UNwG41yQHZEToHgJMXqyVZ9UcS/ReOVTg==", "dev": true, "requires": { - "growly": "1.3.0", - "semver": "5.5.0", - "shellwords": "0.1.1", - "which": "1.3.0" + "growly": "^1.3.0", + "semver": "^5.4.1", + "shellwords": "^0.1.1", + "which": "^1.3.0" } }, "normalize-package-data": { @@ -5270,10 +5271,10 @@ "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", "dev": true, "requires": { - "hosted-git-info": "2.5.0", - "is-builtin-module": "1.0.0", - "semver": "5.5.0", - "validate-npm-package-license": "3.0.1" + "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": { @@ -5282,7 +5283,7 @@ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, "requires": { - "remove-trailing-separator": "1.1.0" + "remove-trailing-separator": "^1.0.1" } }, "npm-run-path": { @@ -5291,7 +5292,7 @@ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "dev": true, "requires": { - "path-key": "2.0.1" + "path-key": "^2.0.0" } }, "number-is-nan": { @@ -5330,8 +5331,8 @@ "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", "dev": true, "requires": { - "define-properties": "1.1.2", - "es-abstract": "1.10.0" + "define-properties": "^1.1.2", + "es-abstract": "^1.5.1" } }, "object.omit": { @@ -5340,8 +5341,8 @@ "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", "dev": true, "requires": { - "for-own": "0.1.5", - "is-extendable": "0.1.1" + "for-own": "^0.1.4", + "is-extendable": "^0.1.1" } }, "on-finished": { @@ -5358,7 +5359,7 @@ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "optimist": { @@ -5367,8 +5368,8 @@ "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", "dev": true, "requires": { - "minimist": "0.0.8", - "wordwrap": "0.0.3" + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" } }, "optionator": { @@ -5377,12 +5378,12 @@ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", "dev": true, "requires": { - "deep-is": "0.1.3", - "fast-levenshtein": "2.0.6", - "levn": "0.3.0", - "prelude-ls": "1.1.2", - "type-check": "0.3.2", - "wordwrap": "1.0.0" + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.4", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "wordwrap": "~1.0.0" }, "dependencies": { "wordwrap": { @@ -5411,9 +5412,9 @@ "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", "dev": true, "requires": { - "execa": "0.7.0", - "lcid": "1.0.0", - "mem": "1.1.0" + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" } }, "os-tmpdir": { @@ -5428,9 +5429,9 @@ "integrity": "sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "mkdirp": "0.5.1", - "object-assign": "4.1.1" + "graceful-fs": "^4.1.4", + "mkdirp": "^0.5.1", + "object-assign": "^4.1.0" } }, "p-finally": { @@ -5445,7 +5446,7 @@ "integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==", "dev": true, "requires": { - "p-try": "1.0.0" + "p-try": "^1.0.0" } }, "p-locate": { @@ -5454,7 +5455,7 @@ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, "requires": { - "p-limit": "1.2.0" + "p-limit": "^1.1.0" } }, "p-try": { @@ -5469,10 +5470,10 @@ "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", "dev": true, "requires": { - "glob-base": "0.3.0", - "is-dotfile": "1.0.3", - "is-extglob": "1.0.0", - "is-glob": "2.0.1" + "glob-base": "^0.3.0", + "is-dotfile": "^1.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.0" } }, "parse-json": { @@ -5481,7 +5482,7 @@ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "dev": true, "requires": { - "error-ex": "1.3.1" + "error-ex": "^1.2.0" } }, "parse5": { @@ -5490,7 +5491,7 @@ "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", "dev": true, "requires": { - "@types/node": "9.3.0" + "@types/node": "*" } }, "parseurl": { @@ -5533,9 +5534,9 @@ "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" } }, "performance-now": { @@ -5562,7 +5563,7 @@ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "dev": true, "requires": { - "pinkie": "2.0.4" + "pinkie": "^2.0.0" } }, "pkg-dir": { @@ -5571,7 +5572,7 @@ "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", "dev": true, "requires": { - "find-up": "2.1.0" + "find-up": "^2.1.0" } }, "pn": { @@ -5598,8 +5599,8 @@ "integrity": "sha512-0HHR5hCmjDGU4sez3w5zRDAAwn7V0vT4SgPiYPZ1XDm5sT3Icb+Bh+fsOP3+Y3UwPjMr7TbRj+L7eQyMkPAxAw==", "dev": true, "requires": { - "ansi-regex": "3.0.0", - "ansi-styles": "3.2.0" + "ansi-regex": "^3.0.0", + "ansi-styles": "^3.2.0" }, "dependencies": { "ansi-regex": { @@ -5639,10 +5640,10 @@ "integrity": "sha1-WXSNfc8D0tsiwT2p/rAk4Wq4DJE=", "dev": true, "requires": { - "ascli": "1.0.1", - "bytebuffer": "5.0.1", - "glob": "7.1.2", - "yargs": "3.32.0" + "ascli": "~1", + "bytebuffer": "~5", + "glob": "^7.0.5", + "yargs": "^3.10.0" }, "dependencies": { "camelcase": { @@ -5657,9 +5658,9 @@ "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", "dev": true, "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wrap-ansi": "2.1.0" + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" } }, "is-fullwidth-code-point": { @@ -5668,7 +5669,7 @@ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "os-locale": { @@ -5677,7 +5678,7 @@ "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", "dev": true, "requires": { - "lcid": "1.0.0" + "lcid": "^1.0.0" } }, "string-width": { @@ -5686,9 +5687,9 @@ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "strip-ansi": { @@ -5697,7 +5698,7 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "window-size": { @@ -5712,13 +5713,13 @@ "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=", "dev": true, "requires": { - "camelcase": "2.1.1", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "os-locale": "1.4.0", - "string-width": "1.0.2", - "window-size": "0.1.4", - "y18n": "3.2.1" + "camelcase": "^2.0.1", + "cliui": "^3.0.3", + "decamelize": "^1.1.1", + "os-locale": "^1.4.0", + "string-width": "^1.0.1", + "window-size": "^0.1.4", + "y18n": "^3.2.0" } } } @@ -5728,7 +5729,7 @@ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.2.tgz", "integrity": "sha1-ZXFQT0e7mI7IGAJT+F3X4UlSvew=", "requires": { - "forwarded": "0.1.2", + "forwarded": "~0.1.2", "ipaddr.js": "1.5.2" } }, @@ -5760,8 +5761,8 @@ "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", "dev": true, "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" + "is-number": "^3.0.0", + "kind-of": "^4.0.0" }, "dependencies": { "is-number": { @@ -5770,7 +5771,7 @@ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -5779,7 +5780,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -5790,7 +5791,7 @@ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -5817,9 +5818,9 @@ "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", "dev": true, "requires": { - "load-json-file": "1.1.0", - "normalize-package-data": "2.4.0", - "path-type": "1.1.0" + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" } }, "read-pkg-up": { @@ -5828,8 +5829,8 @@ "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", "dev": true, "requires": { - "find-up": "1.1.2", - "read-pkg": "1.1.0" + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" }, "dependencies": { "find-up": { @@ -5838,8 +5839,8 @@ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", "dev": true, "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" } }, "path-exists": { @@ -5848,7 +5849,7 @@ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", "dev": true, "requires": { - "pinkie-promise": "2.0.1" + "pinkie-promise": "^2.0.0" } } } @@ -5859,13 +5860,13 @@ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.0.3", + "util-deprecate": "~1.0.1" } }, "readdirp": { @@ -5875,10 +5876,10 @@ "dev": true, "optional": true, "requires": { - "graceful-fs": "4.1.11", - "minimatch": "3.0.4", - "readable-stream": "2.3.3", - "set-immediate-shim": "1.0.1" + "graceful-fs": "^4.1.2", + "minimatch": "^3.0.2", + "readable-stream": "^2.0.2", + "set-immediate-shim": "^1.0.1" } }, "realpath-native": { @@ -5887,7 +5888,7 @@ "integrity": "sha512-XJtlRJ9jf0E1H1SLeJyQ9PGzQD7S65h1pRXEcAeK48doKOnKxcgPeNohJvD5u/2sI9J1oke6E8bZHS/fmW1UiQ==", "dev": true, "requires": { - "util.promisify": "1.0.0" + "util.promisify": "^1.0.0" } }, "regenerate": { @@ -5908,9 +5909,9 @@ "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "private": "0.1.8" + "babel-runtime": "^6.18.0", + "babel-types": "^6.19.0", + "private": "^0.1.6" } }, "regex-cache": { @@ -5919,7 +5920,7 @@ "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", "dev": true, "requires": { - "is-equal-shallow": "0.1.3" + "is-equal-shallow": "^0.1.3" } }, "regexpu-core": { @@ -5928,9 +5929,9 @@ "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", "dev": true, "requires": { - "regenerate": "1.3.3", - "regjsgen": "0.2.0", - "regjsparser": "0.1.5" + "regenerate": "^1.2.1", + "regjsgen": "^0.2.0", + "regjsparser": "^0.1.4" } }, "regjsgen": { @@ -5945,7 +5946,7 @@ "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", "dev": true, "requires": { - "jsesc": "0.5.0" + "jsesc": "~0.5.0" }, "dependencies": { "jsesc": { @@ -5980,7 +5981,7 @@ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", "dev": true, "requires": { - "is-finite": "1.0.2" + "is-finite": "^1.0.0" } }, "request": { @@ -5989,28 +5990,28 @@ "integrity": "sha512-lR3gD69osqm6EYLk9wB/G1W/laGWjzH90t1vEa2xuxHD5KUrSzp9pUSfTm+YC5Nxt2T8nMPEvKlhbQayU7bgFw==", "dev": true, "requires": { - "aws-sign2": "0.7.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.3.1", - "har-validator": "5.0.3", - "hawk": "6.0.2", - "http-signature": "1.2.0", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.17", - "oauth-sign": "0.8.2", - "performance-now": "2.1.0", - "qs": "6.5.1", - "safe-buffer": "5.1.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.3", - "tunnel-agent": "0.6.0", - "uuid": "3.2.1" + "aws-sign2": "~0.7.0", + "aws4": "^1.6.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.1", + "forever-agent": "~0.6.1", + "form-data": "~2.3.1", + "har-validator": "~5.0.3", + "hawk": "~6.0.2", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.17", + "oauth-sign": "~0.8.2", + "performance-now": "^2.1.0", + "qs": "~6.5.1", + "safe-buffer": "^5.1.1", + "stringstream": "~0.0.5", + "tough-cookie": "~2.3.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.1.0" } }, "request-promise": { @@ -6019,10 +6020,10 @@ "integrity": "sha1-0epG1lSm7k+O5qT+oQGMIpEZBLQ=", "dev": true, "requires": { - "bluebird": "3.5.1", + "bluebird": "^3.5.0", "request-promise-core": "1.1.1", - "stealthy-require": "1.1.1", - "tough-cookie": "2.3.3" + "stealthy-require": "^1.1.0", + "tough-cookie": ">=2.3.3" } }, "request-promise-core": { @@ -6031,7 +6032,7 @@ "integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=", "dev": true, "requires": { - "lodash": "4.17.4" + "lodash": "^4.13.1" } }, "request-promise-native": { @@ -6041,8 +6042,8 @@ "dev": true, "requires": { "request-promise-core": "1.1.1", - "stealthy-require": "1.1.1", - "tough-cookie": "2.3.3" + "stealthy-require": "^1.1.0", + "tough-cookie": ">=2.3.3" } }, "require-directory": { @@ -6069,7 +6070,7 @@ "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", "dev": true, "requires": { - "resolve-from": "3.0.0" + "resolve-from": "^3.0.0" } }, "resolve-from": { @@ -6085,7 +6086,7 @@ "dev": true, "optional": true, "requires": { - "align-text": "0.1.4" + "align-text": "^0.1.1" } }, "rimraf": { @@ -6094,7 +6095,7 @@ "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", "dev": true, "requires": { - "glob": "7.1.2" + "glob": "^7.0.5" } }, "safe-buffer": { @@ -6108,14 +6109,14 @@ "integrity": "sha512-OSJxhHO0CgPUw3lUm3GhfREAfza45smvEI9ozuFrxKG10GHVo0ryW9FK5VYlLvxj0SV7HVKHW0voYJIRu27GWg==", "dev": true, "requires": { - "anymatch": "1.3.2", - "exec-sh": "0.2.1", - "fb-watchman": "2.0.0", - "fsevents": "1.1.3", - "minimatch": "3.0.4", - "minimist": "1.2.0", - "walker": "1.0.7", - "watch": "0.18.0" + "anymatch": "^1.3.0", + "exec-sh": "^0.2.0", + "fb-watchman": "^2.0.0", + "fsevents": "^1.1.1", + "minimatch": "^3.0.2", + "minimist": "^1.1.1", + "walker": "~1.0.5", + "watch": "~0.18.0" }, "dependencies": { "minimist": { @@ -6144,18 +6145,18 @@ "integrity": "sha512-ElCLJdJIKPk6ux/Hocwhk7NFHpI3pVm/IZOYWqUmoxcgeyM+MpxHHKhb8QmlJDX1pU6WrgaHBkVNm73Sv7uc2A==", "requires": { "debug": "2.6.9", - "depd": "1.1.2", - "destroy": "1.0.4", - "encodeurl": "1.0.1", - "escape-html": "1.0.3", - "etag": "1.8.1", + "depd": "~1.1.1", + "destroy": "~1.0.4", + "encodeurl": "~1.0.1", + "escape-html": "~1.0.3", + "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "1.6.2", + "http-errors": "~1.6.2", "mime": "1.4.1", "ms": "2.0.0", - "on-finished": "2.3.0", - "range-parser": "1.2.0", - "statuses": "1.3.1" + "on-finished": "~2.3.0", + "range-parser": "~1.2.0", + "statuses": "~1.3.1" }, "dependencies": { "statuses": { @@ -6170,9 +6171,9 @@ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.1.tgz", "integrity": "sha512-hSMUZrsPa/I09VYFJwa627JJkNs0NrfL1Uzuup+GqHfToR2KcsXFymXSV90hoyw3M+msjFuQly+YzIH/q0MGlQ==", "requires": { - "encodeurl": "1.0.1", - "escape-html": "1.0.3", - "parseurl": "1.3.2", + "encodeurl": "~1.0.1", + "escape-html": "~1.0.3", + "parseurl": "~1.3.2", "send": "0.16.1" } }, @@ -6200,7 +6201,7 @@ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "dev": true, "requires": { - "shebang-regex": "1.0.0" + "shebang-regex": "^1.0.0" } }, "shebang-regex": { @@ -6233,7 +6234,7 @@ "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==", "dev": true, "requires": { - "hoek": "4.2.0" + "hoek": "4.x.x" } }, "source-map": { @@ -6248,7 +6249,7 @@ "integrity": "sha512-9zHceZbQwERaMK1MiFguvx1dL9GQPLXInr2D/wUxAsuV6ZKc9F0DHYWeloMcalkYRbtanwqUakoDjvj55cL/4A==", "dev": true, "requires": { - "source-map": "0.6.1" + "source-map": "^0.6.0" }, "dependencies": { "source-map": { @@ -6265,7 +6266,7 @@ "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", "dev": true, "requires": { - "spdx-license-ids": "1.2.2" + "spdx-license-ids": "^1.0.2" } }, "spdx-expression-parse": { @@ -6292,14 +6293,14 @@ "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", "dev": true, "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "tweetnacl": "~0.14.0" } }, "stack-utils": { @@ -6325,8 +6326,8 @@ "integrity": "sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=", "dev": true, "requires": { - "astral-regex": "1.0.0", - "strip-ansi": "4.0.0" + "astral-regex": "^1.0.0", + "strip-ansi": "^4.0.0" } }, "string-width": { @@ -6335,8 +6336,8 @@ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" } }, "string_decoder": { @@ -6345,7 +6346,7 @@ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", "dev": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "~5.1.0" } }, "stringstream": { @@ -6360,7 +6361,7 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" }, "dependencies": { "ansi-regex": { @@ -6377,7 +6378,7 @@ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", "dev": true, "requires": { - "is-utf8": "0.2.1" + "is-utf8": "^0.2.0" } }, "strip-eof": { @@ -6392,7 +6393,7 @@ "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", "dev": true, "requires": { - "has-flag": "2.0.0" + "has-flag": "^2.0.0" } }, "symbol-tree": { @@ -6407,11 +6408,11 @@ "integrity": "sha512-35+Asrsk3XHJDBgf/VRFexPgh3UyETv8IAn/LRTiZjVy6rjPVqdEk8dJcJYBzl1w0XCJM48lvTy8SfEsCWS4nA==", "dev": true, "requires": { - "arrify": "1.0.1", - "micromatch": "2.3.11", - "object-assign": "4.1.1", - "read-pkg-up": "1.0.1", - "require-main-filename": "1.0.1" + "arrify": "^1.0.1", + "micromatch": "^2.3.11", + "object-assign": "^4.1.0", + "read-pkg-up": "^1.0.1", + "require-main-filename": "^1.0.1" } }, "throat": { @@ -6438,7 +6439,7 @@ "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", "dev": true, "requires": { - "punycode": "1.4.1" + "punycode": "^1.4.1" } }, "tr46": { @@ -6447,7 +6448,7 @@ "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", "dev": true, "requires": { - "punycode": "2.1.0" + "punycode": "^2.1.0" }, "dependencies": { "punycode": { @@ -6476,7 +6477,7 @@ "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "dev": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "^5.0.1" } }, "tweetnacl": { @@ -6492,7 +6493,7 @@ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", "dev": true, "requires": { - "prelude-ls": "1.1.2" + "prelude-ls": "~1.1.2" } }, "type-is": { @@ -6501,7 +6502,7 @@ "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=", "requires": { "media-typer": "0.3.0", - "mime-types": "2.1.17" + "mime-types": "~2.1.15" } }, "uglify-js": { @@ -6511,9 +6512,9 @@ "dev": true, "optional": true, "requires": { - "source-map": "0.5.7", - "uglify-to-browserify": "1.0.2", - "yargs": "3.10.0" + "source-map": "~0.5.1", + "uglify-to-browserify": "~1.0.0", + "yargs": "~3.10.0" }, "dependencies": { "yargs": { @@ -6523,9 +6524,9 @@ "dev": true, "optional": true, "requires": { - "camelcase": "1.2.1", - "cliui": "2.1.0", - "decamelize": "1.2.0", + "camelcase": "^1.0.2", + "cliui": "^2.1.0", + "decamelize": "^1.0.0", "window-size": "0.1.0" } } @@ -6561,8 +6562,8 @@ "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", "dev": true, "requires": { - "define-properties": "1.1.2", - "object.getownpropertydescriptors": "2.0.3" + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" } }, "utils-merge": { @@ -6582,7 +6583,7 @@ "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", "dev": true, "requires": { - "user-home": "1.1.1" + "user-home": "^1.1.1" } }, "validate-npm-package-license": { @@ -6591,8 +6592,8 @@ "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", "dev": true, "requires": { - "spdx-correct": "1.0.2", - "spdx-expression-parse": "1.0.4" + "spdx-correct": "~1.0.0", + "spdx-expression-parse": "~1.0.0" } }, "vary": { @@ -6606,9 +6607,9 @@ "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "dev": true, "requires": { - "assert-plus": "1.0.0", + "assert-plus": "^1.0.0", "core-util-is": "1.0.2", - "extsprintf": "1.3.0" + "extsprintf": "^1.2.0" } }, "walker": { @@ -6617,7 +6618,7 @@ "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", "dev": true, "requires": { - "makeerror": "1.0.11" + "makeerror": "1.0.x" } }, "watch": { @@ -6626,8 +6627,8 @@ "integrity": "sha1-KAlUdsbffJDJYxOJkMClQj60uYY=", "dev": true, "requires": { - "exec-sh": "0.2.1", - "minimist": "1.2.0" + "exec-sh": "^0.2.0", + "minimist": "^1.2.0" }, "dependencies": { "minimist": { @@ -6650,8 +6651,8 @@ "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=", "dev": true, "requires": { - "http-parser-js": "0.4.11", - "websocket-extensions": "0.1.3" + "http-parser-js": ">=0.4.0", + "websocket-extensions": ">=0.1.1" } }, "websocket-extensions": { @@ -6681,9 +6682,9 @@ "integrity": "sha512-Z0CVh/YE217Foyb488eo+iBv+r7eAQ0wSTyApi9n06jhcA3z6Nidg/EGvl0UFkg7kMdKxfBzzr+o9JF+cevgMg==", "dev": true, "requires": { - "lodash.sortby": "4.7.0", - "tr46": "1.0.1", - "webidl-conversions": "4.0.2" + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.0", + "webidl-conversions": "^4.0.1" } }, "which": { @@ -6692,7 +6693,7 @@ "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", "dev": true, "requires": { - "isexe": "2.0.0" + "isexe": "^2.0.0" } }, "which-module": { @@ -6720,8 +6721,8 @@ "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "dev": true, "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1" + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" }, "dependencies": { "is-fullwidth-code-point": { @@ -6730,7 +6731,7 @@ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "string-width": { @@ -6739,9 +6740,9 @@ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "strip-ansi": { @@ -6750,7 +6751,7 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } } } @@ -6767,9 +6768,9 @@ "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "imurmurhash": "0.1.4", - "signal-exit": "3.0.2" + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" } }, "xml-name-validator": { @@ -6802,18 +6803,18 @@ "integrity": "sha512-7uRL1HZdCbc1QTP+X8mehOPuCYKC/XTaqAPj7gABLfTt6pgLyVRn3QVte4qhtilZouWCvqd1kipgMKl5tKsFiw==", "dev": true, "requires": { - "cliui": "4.0.0", - "decamelize": "1.2.0", - "find-up": "2.1.0", - "get-caller-file": "1.0.2", - "os-locale": "2.1.0", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "2.1.1", - "which-module": "2.0.0", - "y18n": "3.2.1", - "yargs-parser": "8.1.0" + "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": "^8.1.0" }, "dependencies": { "cliui": { @@ -6822,9 +6823,9 @@ "integrity": "sha512-nY3W5Gu2racvdDk//ELReY+dHjb9PlIcVDFXP72nVIhq2Gy3LuVXYwJoPVudwQnv1shtohpgkdCKT2YaKY0CKw==", "dev": true, "requires": { - "string-width": "2.1.1", - "strip-ansi": "4.0.0", - "wrap-ansi": "2.1.0" + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" } } } @@ -6835,7 +6836,7 @@ "integrity": "sha512-yP+6QqN8BmrgW2ggLtTbdrOyBNSI7zBa4IykmiV5R1wl1JWNxQvWhMfMdmzIYtKU7oP3OOInY/tl2ov3BDjnJQ==", "dev": true, "requires": { - "camelcase": "4.1.0" + "camelcase": "^4.1.0" }, "dependencies": { "camelcase": { diff --git a/scripts/get_team_news.py b/scripts/get_team_news.py index dbf1bb5..59a7702 100644 --- a/scripts/get_team_news.py +++ b/scripts/get_team_news.py @@ -9,6 +9,7 @@ import sys import os +import time def main(): window_size = "1200,800" @@ -48,17 +49,18 @@ def main(): browser.quit() sys.exit(1) + time.sleep(2) newHtml = browser.page_source url = browser.current_url newSoup = BeautifulSoup(newHtml, "html.parser") - mainPart = newSoup.findAll('article', {'class' : 'news-feed-item news-feed-story-package'}) - + mainPart = newSoup.findAll('article', {'class': 'news-feed-item news-feed-story-package'}) for i in range(0, 4): - print(mainPart[i].find('a', {'class' : ' realStory'}).text) + print(mainPart[i].find('div', {'class' : 'item-info-wrap'}).find('h1').find('a', {'class' : ' realStory'}).text) print(mainPart[i].find('p').text) print(mainPart[i].find('img')['data-default-src']) - print(mainPart[i].find('a', {'class' : 'story-link'})['data-popup-href']) + newsUrl = mainPart[i].find('a', {'class' : 'story-link'})['data-popup-href'] + print(newsUrl[:4] + 's' + newsUrl[4:]) browser.quit() sys.exit(0) From 4fecfe7983ba79f93c65813878aba42c5bcd5110 Mon Sep 17 00:00:00 2001 From: tnguyen452 Date: Tue, 8 May 2018 12:34:52 -0400 Subject: [PATCH 41/41] delete list view --- functions/dataFormat.js | 1 - 1 file changed, 1 deletion(-) diff --git a/functions/dataFormat.js b/functions/dataFormat.js index 26e274f..bf074ba 100644 --- a/functions/dataFormat.js +++ b/functions/dataFormat.js @@ -140,6 +140,5 @@ module.exports = { quickReplyFormat, teamDataQuick, teamOptionFormat, - listViewFormat, decodeUnderline } \ No newline at end of file