├── lib ├── config.js ├── helpers.js ├── allure.js └── video.js ├── .editorconfig ├── .tern-project ├── .gitignore ├── package.json ├── LICENSE ├── demo ├── package.json ├── specs │ └── selenium-easy.e2e.js ├── wdio.conf.js └── yarn.lock ├── index.js ├── yarn.lock └── README.md /lib/config.js: -------------------------------------------------------------------------------- 1 | 2 | module.exports = { 3 | videoRecorderImageName: 'selenoid-manual-video-recorder', 4 | }; 5 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | -------------------------------------------------------------------------------- /.tern-project: -------------------------------------------------------------------------------- 1 | { 2 | "ecmaVersion": 6, 3 | "libs": [ 4 | "browser" 5 | ], 6 | "loadEagerly": [ 7 | "src/**/*.js" 8 | ], 9 | "dontLoad": [ 10 | "node_modules/**" 11 | ], 12 | "plugins": { 13 | "modules": {}, 14 | "es_modules": {}, 15 | "node": {}, 16 | "doc_comment": { 17 | "fullDocs": true, 18 | "strong": true 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Compiled source # 2 | ################### 3 | *.com 4 | *.class 5 | *.dll 6 | *.exe 7 | *.o 8 | *.so 9 | 10 | # Packages # 11 | ############ 12 | # it's better to unpack these files and commit the raw source 13 | # git has its own built in compression methods 14 | *.7z 15 | *.dmg 16 | *.gz 17 | *.iso 18 | *.jar 19 | *.rar 20 | *.tar 21 | *.zip 22 | 23 | # Logs and databases # 24 | ###################### 25 | *.log 26 | *.sql 27 | *.sqlite 28 | 29 | # OS generated files # 30 | ###################### 31 | .DS_Store 32 | .DS_Store? 33 | ._* 34 | .Spotlight-V100 35 | .Trashes 36 | ehthumbs.db 37 | Thumbs.db 38 | 39 | # project files # 40 | .idea 41 | .svn 42 | .tmp 43 | npm-debug.log 44 | yarn-error.log 45 | build 46 | dist 47 | node_modules 48 | coverage 49 | /vendor 50 | syncinfo.cfg 51 | demo/e2e 52 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "selenoid-video-api", 3 | "version": "1.3.1", 4 | "description": "Node library to manually control the selenoid video recorder", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "git+https://github.com/presidenten/selenoid-video-api.git" 12 | }, 13 | "author": "Johan Hernefeldt", 14 | "license": "MIT", 15 | "bugs": { 16 | "url": "https://github.com/presidenten/selenoid-video-api/issues" 17 | }, 18 | "homepage": "https://github.com/presidenten/selenoid-video-api#readme", 19 | "dependencies": { 20 | "axios": "^0.18.0", 21 | "fs-extra": "^6.0.1", 22 | "ip": "^1.1.5", 23 | "sleep": "^5.1.1", 24 | "wdio-allure-reporter": "^0.6.2" 25 | }, 26 | "devDependencies": {} 27 | } 28 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Johan Hernefeldt 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /demo/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "selenoid-video-api-demo", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "pretest": "rimraf e2e && mkdir -p e2e", 8 | "test": "wdio wdio.conf.js", 9 | "allure": "allure generate e2e/results/allure-raw -o e2e/results/allure --clean", 10 | "postallure": "open http://localhost:8080/index.html && autoreload-server e2e/results/allure" 11 | }, 12 | "author": "", 13 | "license": "MIT", 14 | "dependencies": {}, 15 | "devDependencies": { 16 | "allure-commandline": "^2.5.0", 17 | "babel-core": "^6.26.3", 18 | "babel-plugin-transform-runtime": "^6.23.0", 19 | "babel-preset-es2015": "^6.24.1", 20 | "babel-preset-stage-2": "^6.24.1", 21 | "ip": "^1.1.5", 22 | "open": "^0.0.5", 23 | "rimraf": "^2.6.2", 24 | "simple-autoreload-server": "^0.2.7", 25 | "wdio-allure-reporter": "^0.6.2", 26 | "wdio-dot-reporter": "^0.0.9", 27 | "wdio-jasmine-framework": "^0.3.4", 28 | "wdio-json-reporter": "^0.3.1", 29 | "wdio-junit-reporter": "^0.4.3", 30 | "wdio-selenium-standalone-service": "^0.0.10", 31 | "webdriverio": "^4.12.0" 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /lib/helpers.js: -------------------------------------------------------------------------------- 1 | const execSync = require('child_process').execSync; 2 | const config = require('./config.js'); 3 | 4 | const helpers = { 5 | findRecorderImages() { 6 | let activeContainers = []; 7 | 8 | try { activeContainers = execSync('docker ps').toString().split('\n'); } catch(e) { } 9 | 10 | // Find video recorders 11 | const recorderContainerNames = activeContainers 12 | .filter(line => line.includes(config.videoRecorderImageName)) 13 | .map(line => line.match(/[^\s]+$/)[0]); 14 | return recorderContainerNames; 15 | }, 16 | 17 | 18 | runIfVideoEnabled(browser, cb) { 19 | const { enableVNC, enableVideo } = browser.desiredCapabilities; 20 | if (enableVNC && enableVideo) { 21 | cb(); 22 | } 23 | }, 24 | 25 | generateFilename(browser, test) { 26 | const { browserName } = browser.desiredCapabilities; 27 | 28 | const timestamp = new Date().toLocaleString('iso', { 29 | year: 'numeric', 30 | month: '2-digit', 31 | day: '2-digit', 32 | hour: '2-digit', 33 | minute: '2-digit', 34 | hour12: false 35 | }).replace(/[ ]/g, '--').replace(':', '-'); 36 | 37 | const filename = encodeURIComponent( 38 | `${ 39 | test.fullName.replace(/\s+/g, '-') 40 | }-${browserName}-${timestamp}`.replace(/[/]/g, '__') 41 | ).replace(/%../, '.'); 42 | 43 | return filename; 44 | }, 45 | }; 46 | 47 | 48 | module.exports = helpers; 49 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | const ip = require('ip'); 2 | 3 | const allure = require('./lib/allure.js'); 4 | const video = require('./lib/video.js'); 5 | const config = require('./lib/config.js'); 6 | const helpers = require('./lib/helpers.js'); 7 | 8 | 9 | const wdio = { 10 | /** 11 | * Get ready for tests 12 | * - find local ip 13 | * - Init video interface 14 | */ 15 | before(browser) { 16 | browser.globals = browser.globals || {}; 17 | browser.globals.ip = ip.address(); // Used by tests since we run webserver on local machine, feel free to override 18 | 19 | helpers.runIfVideoEnabled(browser, () => { 20 | video.init(browser); 21 | }); 22 | }, 23 | 24 | /** 25 | * Start recording before each test 26 | * Pause a short while to get nice video 27 | */ 28 | beforeTest(browser, test, { size, framerate, codec, pixelFormat }) { 29 | // Generate filename for screenshots and video 30 | browser.globals.currentRecordingName = helpers.generateFilename(browser, test); 31 | 32 | helpers.runIfVideoEnabled(browser, () => { 33 | video.startRecording({ 34 | browser, 35 | size, 36 | framerate, 37 | codec, 38 | pixelFormat, 39 | }); 40 | }); 41 | }, 42 | 43 | /** 44 | * Stop recording after each test 45 | */ 46 | afterTest(browser, test, outputDir) { 47 | helpers.runIfVideoEnabled(browser, () => { 48 | video.stopRecording({ 49 | browser: browser, 50 | save: !test.passed || config.saveAllVideos, 51 | }); 52 | }); 53 | 54 | if (config.usingAllure) { 55 | allure.addAttachments(browser, test, outputDir); 56 | } 57 | }, 58 | 59 | /** 60 | * Finalize report if using allure 61 | * Close all video recorders 62 | */ 63 | onComplete(wdioConfig, shortenSeleniumUrls) { 64 | if (config.usingAllure) { 65 | allure.finalizeReport(wdioConfig, shortenSeleniumUrls); 66 | } 67 | 68 | video.closeAll(); 69 | }, 70 | }; 71 | 72 | 73 | module.exports = { 74 | getWdioHooks({ usingAllure=true, saveAllVideos=false, videoMinTime=50, screenshots=false, removeSteps=false }) { 75 | config.usingAllure = usingAllure; 76 | config.saveAllVideos = saveAllVideos; 77 | config.videoMinTime = videoMinTime; 78 | config.screenshots = screenshots; 79 | config.removeSteps = removeSteps; 80 | 81 | return wdio; 82 | }, 83 | video, 84 | config, 85 | } 86 | -------------------------------------------------------------------------------- /demo/specs/selenium-easy.e2e.js: -------------------------------------------------------------------------------- 1 | 2 | describe('User interactions', () => { 3 | beforeEach(() => { 4 | browser.url('http://www.seleniumeasy.com/test/'); 5 | }); 6 | 7 | it('should be able edit input', () => { 8 | browser.click('#btn_basic_example'); 9 | 10 | browser.waitForExist('.list-group .list-group-item'); 11 | browser.pause(300); 12 | browser.click('.list-group .list-group-item'); 13 | 14 | browser.waitForExist('#get-input'); 15 | browser.setValue('#get-input input', 'Presidenten'); 16 | browser.click('#get-input button'); 17 | 18 | let name = $('#user-message #display').getText(); 19 | 20 | expect(name).toBe('Presidenten'); 21 | }); 22 | 23 | 24 | it('should be able to move slider', () => { 25 | browser.click('#btn_basic_example'); 26 | 27 | browser.waitForExist('.list-group .list-group-item'); 28 | browser.pause(300); 29 | browser.click('#advanced_example'); 30 | browser.waitForExist('.list-group .list-group-item'); 31 | browser.pause(300); 32 | 33 | browser.click('.list-group-item[href^="./drag-drop-range"]'); 34 | 35 | browser.waitForExist('#slider1'); 36 | browser.pause(300); 37 | 38 | const sliderPos = browser.getLocation('#slider1 input'); 39 | 40 | // browser.moveTo('#slider1 input', 10, 10); 41 | // browser.buttonDown(0); 42 | // browser.moveTo('#slider1 input', 100, 10); 43 | // browser.buttonUp(0); 44 | 45 | browser.leftClick('#slider1 input', 10, 10); 46 | browser.leftClick('#slider1 input', 100, 10); 47 | 48 | let range = $('#slider1 #range').getText(); 49 | expect(range).toBe(30); 50 | }); 51 | 52 | 53 | it('should be able to multi-select in dropdown', () => { 54 | browser.click('#btn_basic_example'); 55 | 56 | browser.waitForExist('.list-group .list-group-item'); 57 | browser.pause(300); 58 | browser.click('.list-group-item[href^="./basic-select-dropdown"]'); 59 | 60 | browser.waitForExist('#multi-select'); 61 | browser.pause(300); 62 | 63 | const modifierKey = process.platform == 'darwin' ? 'Meta' : 'Control'; 64 | browser.keys(modifierKey); 65 | browser.click('#multi-select option[value="Florida"]'); 66 | browser.click('#multi-select option[value="Ohio"]'); 67 | browser.click('#multi-select option[value="Texas"]'); 68 | 69 | browser.click('#printAll'); 70 | 71 | const values = $('.getall-selected').getText(); 72 | 73 | expect(values.includes('Florida')).toBe(true); 74 | expect(values.includes('Ohio')).toBe(true); 75 | expect(values.includes('Texas')).toBe(true); 76 | }); 77 | 78 | }); 79 | -------------------------------------------------------------------------------- /demo/wdio.conf.js: -------------------------------------------------------------------------------- 1 | const selenoidVideoApi = require('../index.js'); 2 | 3 | const rec = selenoidVideoApi.getWdioHooks({ 4 | usingAllure: true, // Update Allurereport with videos 5 | saveAllVideos: false, // If true, also saves videos for successful test cases 6 | videoMinTime: 50, // Min time for tests. Increase if you have very short tests 7 | screenshots: false, // Save screenshots on failed tests 8 | removeSteps: true, // Remove all steps, and only save video 9 | }); 10 | 11 | 12 | const config = { 13 | // ================================= 14 | // Hooks bound to selenoid-video-api 15 | // ================================= 16 | before: function (capabilities, specs) { 17 | // Setup the browser window 18 | browser.windowHandlePosition({x: 0, y: 0}); 19 | browser.windowHandleSize({width: 1320, height: 768}); 20 | 21 | rec.before(browser); 22 | }, 23 | beforeTest: function (test) { 24 | rec.beforeTest(browser, test, { 25 | size: '1320x768', 26 | framerate: 15, 27 | }); 28 | }, 29 | afterTest: function (test) { 30 | rec.afterTest(browser, test, config.outputDir); 31 | }, 32 | onComplete: function(exitCode, config, capabilities) { 33 | rec.onComplete(config); 34 | }, 35 | 36 | 37 | // ============ 38 | // Capabilities 39 | // ============ 40 | capabilities: [{ 41 | maxInstances: 1, 42 | browserName: 'chrome', 43 | enableVideo: true, 44 | enableVNC: true, 45 | }], 46 | 47 | 48 | // =============== 49 | // Custom settings 50 | // =============== 51 | host: 'localhost', // Selenium host url 52 | //services: ['selenium-standalone'], 53 | specs: [ 54 | './specs/**/*.e2e.js', // Which files to run 55 | ], 56 | outputDir: './e2e/results/', // Output dir for the report 57 | reporters: ['dot', 'allure'], // Reporters: Dot for terminal, allure for web 58 | reporterOptions: { 59 | allure: { 60 | outputDir: './e2e/results/allure-raw/', // Output dir for raw report 61 | }, 62 | }, 63 | 64 | 65 | // ================== 66 | // Some nice defaults 67 | // ================== 68 | deprecationWarnings: false, 69 | maxInstances: 10, 70 | sync: true, 71 | logLevel: 'silent', 72 | coloredLogs: true, 73 | bail: 0, 74 | waitforTimeout: 10000, 75 | connectionRetryTimeout: 90000, 76 | connectionRetryCount: 3, 77 | framework: 'jasmine', 78 | jasmineNodeOpts: { 79 | defaultTimeoutInterval: 100000, 80 | expectationResultHandler: function(passed, assertion) { 81 | } 82 | }, 83 | }; 84 | 85 | module.exports = { 86 | config, 87 | }; 88 | 89 | require("babel-core/register")({ 90 | presets: ['es2015'] 91 | }); 92 | 93 | -------------------------------------------------------------------------------- /lib/allure.js: -------------------------------------------------------------------------------- 1 | const reporter = require('wdio-allure-reporter'); 2 | 3 | const path = require('path'); 4 | const fs = require('fs-extra'); 5 | const sleep = require('sleep'); 6 | 7 | const config = require('./config.js'); 8 | const helpers = require('./helpers.js'); 9 | 10 | const homePath = process.env[(process.platform == 'win32') ? 'USERPROFILE' : 'HOME']; 11 | 12 | const allure = { 13 | addAttachments(browser, test, outputDir) { 14 | if (!test.passed || config.saveAllVideos) { 15 | const filename = browser.globals.currentRecordingName; 16 | if (config.screenshots) { 17 | const filePath = path.resolve(outputDir, `${filename}.png`); 18 | browser.saveScreenshot(filePath); 19 | } 20 | 21 | helpers.runIfVideoEnabled(browser, () => { 22 | const videoPath = path.resolve(homePath, '.aerokube/selenoid/video', filename + '.mp4'); 23 | reporter.createAttachment('Execution video', videoPath, 'video/mp4'); 24 | }); 25 | } 26 | }, 27 | finalizeReport(wdioConfig, shortenSeleniumUrls=true) { 28 | allureReportDir = path.resolve(wdioConfig.outputDir, 'allure-raw'); 29 | console.log('- Waiting for videos to render'); 30 | 31 | fs 32 | .readdirSync(allureReportDir) 33 | .filter(line=>line.includes('.mp4')) 34 | .map(filename => allureReportDir + '/' + filename) 35 | .forEach((filepath) => { 36 | const videoFilePath = fs.readFileSync(filepath).toString(); // Contents of placeholder file is real video path 37 | const filename = videoFilePath.toString().match(/[^\/]*\.mp4$/)[0]; 38 | 39 | // Wait for video files to render 40 | let fileStats = fs.statSync(videoFilePath); 41 | let lastSize = 0; 42 | let videoIsReady = false; 43 | do { 44 | fileStats = fs.statSync(videoFilePath); 45 | videoIsReady = fileStats.size > 48 && lastSize === fileStats.size; 46 | lastSize = fileStats.size > 48 ? fileStats.size : 0; 47 | sleep.msleep(100); 48 | } while (fileStats.size === 48 || !videoIsReady); 49 | 50 | fs.copySync(videoFilePath, path.resolve(wdioConfig.outputDir + filename)); 51 | fs.renameSync(videoFilePath, filepath); // Move video to placeholder 52 | }); 53 | 54 | // Make report pretty by moving attachments from final step to test body 55 | fs 56 | .readdirSync(allureReportDir) 57 | .filter(line=>line.includes('.xml')) 58 | .map(filename => allureReportDir + '/' + filename) 59 | .forEach((filePath) => { 60 | let file = fs.readFileSync(filePath).toString(); 61 | 62 | const homeDirRegExp = new RegExp(homePath, 'g'); 63 | file = file.replace(homeDirRegExp, '~'); 64 | 65 | if(shortenSeleniumUrls) { 66 | const captureActionRegexp = /\/wd\/hub.*(\/\w+<\/)/g; 67 | file = file.replace(captureActionRegexp, '$1'); 68 | } 69 | 70 | const faileStepToTestAttachmentsRegexp = new RegExp('(?:\n.*){3}' + // Find test step 71 | '(\n'+ // Attchments block 72 | '(?:.*\n)?' + // Optional line for screenshot 73 | '.*)' + // Finalize capturegroup for step attachments 75 | '(?:\n.*){4}' + // Move outside test steps 76 | '', // Make sure to end with empty test attachments 77 | 'gm'); // Modifier: global, multiline 78 | 79 | file = file.replace(faileStepToTestAttachmentsRegexp, '\n\t\t\t\t$1'); 80 | 81 | if (config.removeSteps) { 82 | const removeSteps = /[\s\S]*?<\/steps>[\s\S]*?=2.5.1: 91 | version "2.10.0" 92 | resolved "https://registry.yarnpkg.com/nan/-/nan-2.10.0.tgz#96d0cd610ebd58d4b4de9cc0c6828cda99c7548f" 93 | 94 | object-assign@^4.1.1: 95 | version "4.1.1" 96 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 97 | 98 | regenerator-runtime@^0.11.0: 99 | version "0.11.1" 100 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" 101 | 102 | sleep@^5.1.1: 103 | version "5.1.1" 104 | resolved "https://registry.yarnpkg.com/sleep/-/sleep-5.1.1.tgz#878fa1d44d08eeb0f26fb2018ef8629eb1a3ab94" 105 | dependencies: 106 | nan ">=2.5.1" 107 | 108 | universalify@^0.1.0: 109 | version "0.1.1" 110 | resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.1.tgz#fa71badd4437af4c148841e3b3b165f9e9e590b7" 111 | 112 | uuid@^3.0.0: 113 | version "3.2.1" 114 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14" 115 | 116 | wdio-allure-reporter@^0.6.2: 117 | version "0.6.2" 118 | resolved "https://registry.yarnpkg.com/wdio-allure-reporter/-/wdio-allure-reporter-0.6.2.tgz#a5a8e1e0c6db3653d3708118a4745482b75abbea" 119 | dependencies: 120 | allure-js-commons "^1.3.1" 121 | babel-runtime "^6.26.0" 122 | 123 | xmlcreate@^1.0.1: 124 | version "1.0.2" 125 | resolved "https://registry.yarnpkg.com/xmlcreate/-/xmlcreate-1.0.2.tgz#fa6bf762a60a413fb3dd8f4b03c5b269238d308f" 126 | -------------------------------------------------------------------------------- /lib/video.js: -------------------------------------------------------------------------------- 1 | const spawn = require('child_process').spawn; 2 | const exec = require('child_process').exec; 3 | const execSync = require('child_process').execSync; 4 | 5 | const axios = require('axios'); 6 | 7 | const config = require('./config.js'); 8 | const helpers = require('./helpers.js'); 9 | 10 | let recorderMappings = []; 11 | let containerrecorderContainerNames = []; 12 | 13 | // Video interface 14 | const video = { 15 | /** 16 | * Init should be called when Selenoid has spawned all containers 17 | * It stores the browsers ips in `browser` and makes a map 18 | * over which recorder that belongs to each browser container. 19 | */ 20 | init(browser, baseUrl) { 21 | var sessionId = browser.requestHandler.sessionID; 22 | 23 | // Find browser ip by comparing sessionID in selenoid status 24 | // (Can we do this in a smarter way?) 25 | axios.get('http://localhost:4444/status').then((response) => { 26 | var regexp = new RegExp(sessionId.replace('-', '\-') + '.*?\"ip\":\"([^\"]*)'); 27 | browser.globals.clientIp = JSON.stringify(response.data).match(regexp)[1]; 28 | }); 29 | 30 | recorderContainerNames = helpers.findRecorderImages(); 31 | 32 | const newRecorderMappings = recorderContainerNames 33 | .filter(name => !containerrecorderContainerNames.includes(name)) 34 | .map((name) => { 35 | const browserIp = execSync(`docker exec ${name} env`) 36 | .toString() 37 | .split('\n') 38 | .filter(line => line.includes('BROWSER_PORT_4444_TCP_ADDR')) 39 | .map(line => line.split('=')[1]) 40 | .pop(); 41 | 42 | const ip = execSync(`docker inspect ${name}`) 43 | .toString() 44 | .split('\n') 45 | .map(line => line.trim()) 46 | .filter(line => line.match('\"IPAddress')) 47 | .map(line => line.split(':')[1] 48 | .trim() 49 | .replace(/\"|,/g, '')) 50 | .pop(); 51 | 52 | return { 53 | name, // Recorder container name 54 | ip, // Recorder container ip (nice to have if we want rest-services) 55 | browserIp, // Associated browser ip 56 | }; 57 | }); 58 | 59 | recorderMappings.push(...newRecorderMappings); 60 | containerrecorderContainerNames.push(...recorderContainerNames); 61 | 62 | // Wait for http request to finish 63 | do { 64 | browser.pause(100); 65 | } while(!browser.globals.clientIp); 66 | }, 67 | 68 | /** 69 | * Start recording 70 | * Executes command in docker container 71 | */ 72 | startRecording({ browser, size='1920x1080', framerate=15, codec='libx264', pixelFormat='yuv420p' }) { 73 | const { clientIp, currentRecordingName } = browser.globals; 74 | const recorder = recorderMappings.filter(recorder => recorder.browserIp === clientIp).pop(); 75 | 76 | const ffmpegCMD = `ffmpeg -y `+ 77 | `-f x11grab `+ 78 | `-video_size ${size} ` + 79 | `-r ${framerate} ` + 80 | `-i browser:99 ` + 81 | `-vcodec ${codec} ` + 82 | `-pix_fmt ${pixelFormat} ` + 83 | `"/data/${currentRecordingName}.mp4"`; 84 | 85 | browser.globals.ffmpeg = spawn('docker', ['exec', recorder.name, 'sh', '-c', ffmpegCMD]); 86 | }, 87 | 88 | /** 89 | * Stop recording 90 | * Sends SIGINT to ffmpeg in docker container 91 | */ 92 | stopRecording({ browser, save=true }) { 93 | const { clientIp, currentRecordingName } = browser.globals; 94 | const recorder = recorderMappings.filter(recorder => recorder.browserIp === clientIp).pop(); 95 | 96 | // Send SIGINT to ffmpeg in container 97 | // Wrapped in try-block because it sometimes acts up for no reason even when it works 98 | 99 | try { execSync(`docker exec ${recorder.name} sh -c 'pkill -INT -f ffmpeg'`); } catch(e) {} 100 | 101 | let done = false; 102 | 103 | browser.globals.ffmpeg.stderr.on('data', (data) => { 104 | if(!data.includes('Exiting normally, received signal 2.')) { 105 | browser.globals.ffmpeg.kill(); 106 | done = true; 107 | } 108 | }); 109 | 110 | do { 111 | browser.pause(100); 112 | } while(!done); 113 | 114 | if (!save) { 115 | // Remove video files when they are not wanted 116 | execSync(`docker exec ${recorder.name} sh -c 'rm /data/${currentRecordingName}.mp4'`); 117 | } 118 | }, 119 | 120 | /** 121 | * Close docker container 122 | * Cleanup by killing all processes with SIGINT 123 | */ 124 | closeAll() { 125 | helpers.findRecorderImages().forEach((name) => { 126 | execSync(`docker kill ${name}`) 127 | }); 128 | }, 129 | }; 130 | 131 | 132 | // --- Start up --- 133 | // Clean up old spawned video recorders that might be alive 134 | helpers.findRecorderImages().forEach(name => { exec(`docker kill ${name}`) }); 135 | 136 | 137 | module.exports = video; 138 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # selenoid-video-api 2 | Node library to manually control a custom Selenoid video recorder 3 | 4 | ## Intro 5 | This library contains a node api to a interact with a custom Selenoid video recorder, 6 | as well as methods that easily plugs into a few Webdriver.io test hooks for easy setup. 7 | 8 | This makes it possible to run many test suites in one go and still make separate recordings of each test case. 9 | 10 | There is also easy integration with Allure reports to make them pretty: 11 | 12 | ![Allure example](https://presidenten.github.io/allure-example-report-with-video/assets/allure_example.gif) 13 | 14 | Explore the allure example here: [allure-example-report-with-video](https://presidenten.github.io/allure-example-report-with-video) 15 | 16 | 17 | ## Prerequisites 18 | 1. Install Node >= v8: [How to install node](https://nodejs.org/en/download/package-manager/) 19 | 2. Install Docker: [How to install docker](https://docs.docker.com/install/) 20 | 3. Pull the [manual video recorder docker image](https://hub.docker.com/r/presidenten/selenoid-manual-video-recorder/) 21 | ```shell 22 | docker image pull presidenten/selenoid-manual-video-recorder 23 | ``` 24 | 4. Install [cm](https://github.com/aerokube/cm) for [Selenoid](https://github.com/aerokube/selenoid): 25 | ```shell 26 | curl -s https://aerokube.com/cm/bash | bash 27 | ``` 28 | - Start selenoid with custom manual video recorder 29 | ```shell 30 | cm selenoid start --vnc --tmpfs 128 --args "-video-recorder-image presidenten/selenoid-manual-video-recorder" 31 | ``` 32 | - Make a Webdriver.io project [How to get started with Webdriver.io](http://webdriver.io/guide/getstarted/install.html) 33 | 34 | ## Test the demo 35 | - To run the demo, make sure prerequisites 1-4 are in place, then: 36 | ```shell 37 | git clone https://github.com/presidenten/selenoid-video-api.git 38 | cd selenoid-video-api 39 | 40 | # Install project dependencies 41 | npm install 42 | 43 | # Install demo dependencies 44 | cd demo 45 | npm install 46 | ``` 47 | - Run tests 48 | ```shell 49 | npm run test --silent 50 | ``` 51 | - Generate allure report (optional): 52 | ```shell 53 | npm run allure 54 | ``` 55 | Then navigate to from http://localhost:8080/index.html, click on a failing test and check `Execution Video` in test body 56 | 57 | - Videos are moved to the output dir and the report dir as report attachments 58 | The library assumes that the selenoid config dir is default (~/.aerokube) 59 | ```shell 60 | ~/github/selenium-video-api/demo/e2e/results$ ls 61 | User-list-should-be-able-to-move-slider-chrome-2018-06-03--10-29.mp4 62 | User-list-should-be-able-to-move-slider-chrome-2018-06-03--10-29.png 63 | User-list-should-be-able-to-multi-select-in-dropdown-chrome-2018-06-03--10-29.mp4 64 | User-list-should-be-able-to-multi-select-in-dropdown-chrome-2018-06-03--10-29.png 65 | ``` 66 | 67 | ## Installation 68 | - Add this module to your test repo 69 | ```shell 70 | npm install selenoid-video-api 71 | ``` 72 | 73 | - Check the example config to see how to use this module: [wdio.conf.js](https://github.com/presidenten/selenoid-video-api/blob/master/demo/wdio.conf.js) 74 | 75 | (Ofcourse `const selenoidVideoApi = require('../index.js');` from row 1 in the example needs to be changed to: `const selenoidVideoApi = require('selenium-video-api');`) 76 | 77 | - If you want awesome Allure reports, also check `Custom settings` section on how to configure the Allure reporter and make sure to install it as well 78 | ```shell 79 | npm install wdio-allure-reporter 80 | ``` 81 | 82 | ## Configuration 83 | 84 | `selenoidVideoApi.getWdioHooks` accepts the following config, with these defaults: 85 | 86 | ```javascript 87 | getWdioHooks({ 88 | usingAllure = false, 89 | saveAllVideos = false, 90 | waitForVNCTime = 2000, 91 | videoMinTime = 500, 92 | }) 93 | ``` 94 | 95 | ## Working with the video interface separately 96 | 97 | tbd 98 | 99 | 100 | ## Under the hood 101 | 102 | Normally when using linking docker containers, a one way connection is specified with 103 | environment variables set in one machine so it can reach the other. 104 | 105 | To be able to start/stop the recorder, we need a way to trigger the recorder from the browser. 106 | But it is linked to the recorder for vnc, so the browser has no knowledge of the recorder container. 107 | 108 | This is my solution: 109 | - Have a middle man (this library) read `env` from each video recorder and make a map of the recorders name, ip and its corresponding browser ip 110 | - Have each spawned browser figure out its ip inside selenium during runtime 111 | - Have an api to trigger commands in the recorder containers, which accepts browser ip to decide which container to run commands in 112 | 113 | ### For more details: 114 | - Docker integrations: 115 | [video.js](https://github.com/presidenten/selenoid-video-api/blob/master/lib/video.js) 116 | 117 | - Webdriver.io integration: 118 | [wdio.conf.js](https://github.com/presidenten/selenoid-video-api/blob/master/demo/wdio.conf.js) 119 | -------------------------------------------------------------------------------- /demo/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | ajv@^5.1.0: 6 | version "5.5.2" 7 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" 8 | dependencies: 9 | co "^4.6.0" 10 | fast-deep-equal "^1.0.0" 11 | fast-json-stable-stringify "^2.0.0" 12 | json-schema-traverse "^0.3.0" 13 | 14 | allure-commandline@^2.5.0: 15 | version "2.5.0" 16 | resolved "https://registry.yarnpkg.com/allure-commandline/-/allure-commandline-2.5.0.tgz#941d80d854e4f7131ed020db3e7bec9b75765800" 17 | 18 | allure-js-commons@^1.3.1: 19 | version "1.3.2" 20 | resolved "https://registry.yarnpkg.com/allure-js-commons/-/allure-js-commons-1.3.2.tgz#e1cf0466e36695bb3ced1228f6570eac6c2e9eda" 21 | dependencies: 22 | file-type "^7.7.1" 23 | fs-extra "^6.0.1" 24 | js2xmlparser "^3.0.0" 25 | mime "^2.3.1" 26 | object-assign "^4.1.1" 27 | uuid "^3.0.0" 28 | 29 | amdefine@>=0.0.4: 30 | version "1.0.1" 31 | resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" 32 | 33 | ansi-escapes@^3.0.0: 34 | version "3.1.0" 35 | resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.1.0.tgz#f73207bb81207d75fd6c83f125af26eea378ca30" 36 | 37 | ansi-regex@^2.0.0: 38 | version "2.1.1" 39 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 40 | 41 | ansi-regex@^3.0.0: 42 | version "3.0.0" 43 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" 44 | 45 | ansi-styles@^2.2.1: 46 | version "2.2.1" 47 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" 48 | 49 | ansi-styles@^3.2.1: 50 | version "3.2.1" 51 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 52 | dependencies: 53 | color-convert "^1.9.0" 54 | 55 | archiver-utils@^1.3.0: 56 | version "1.3.0" 57 | resolved "https://registry.yarnpkg.com/archiver-utils/-/archiver-utils-1.3.0.tgz#e50b4c09c70bf3d680e32ff1b7994e9f9d895174" 58 | dependencies: 59 | glob "^7.0.0" 60 | graceful-fs "^4.1.0" 61 | lazystream "^1.0.0" 62 | lodash "^4.8.0" 63 | normalize-path "^2.0.0" 64 | readable-stream "^2.0.0" 65 | 66 | archiver@~2.1.0: 67 | version "2.1.1" 68 | resolved "https://registry.yarnpkg.com/archiver/-/archiver-2.1.1.tgz#ff662b4a78201494a3ee544d3a33fe7496509ebc" 69 | dependencies: 70 | archiver-utils "^1.3.0" 71 | async "^2.0.0" 72 | buffer-crc32 "^0.2.1" 73 | glob "^7.0.0" 74 | lodash "^4.8.0" 75 | readable-stream "^2.0.0" 76 | tar-stream "^1.5.0" 77 | zip-stream "^1.2.0" 78 | 79 | asn1@~0.2.3: 80 | version "0.2.3" 81 | resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" 82 | 83 | assert-plus@1.0.0, assert-plus@^1.0.0: 84 | version "1.0.0" 85 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" 86 | 87 | async@^2.0.0, async@^2.1.4: 88 | version "2.6.1" 89 | resolved "https://registry.yarnpkg.com/async/-/async-2.6.1.tgz#b245a23ca71930044ec53fa46aa00a3e87c6a610" 90 | dependencies: 91 | lodash "^4.17.10" 92 | 93 | asynckit@^0.4.0: 94 | version "0.4.0" 95 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 96 | 97 | atob@^2.1.1: 98 | version "2.1.1" 99 | resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.1.tgz#ae2d5a729477f289d60dd7f96a6314a22dd6c22a" 100 | 101 | aws-sign2@~0.7.0: 102 | version "0.7.0" 103 | resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" 104 | 105 | aws4@^1.6.0: 106 | version "1.7.0" 107 | resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.7.0.tgz#d4d0e9b9dbfca77bf08eeb0a8a471550fe39e289" 108 | 109 | babel-code-frame@^6.26.0: 110 | version "6.26.0" 111 | resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" 112 | dependencies: 113 | chalk "^1.1.3" 114 | esutils "^2.0.2" 115 | js-tokens "^3.0.2" 116 | 117 | babel-core@^6.26.0, babel-core@^6.26.3: 118 | version "6.26.3" 119 | resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207" 120 | dependencies: 121 | babel-code-frame "^6.26.0" 122 | babel-generator "^6.26.0" 123 | babel-helpers "^6.24.1" 124 | babel-messages "^6.23.0" 125 | babel-register "^6.26.0" 126 | babel-runtime "^6.26.0" 127 | babel-template "^6.26.0" 128 | babel-traverse "^6.26.0" 129 | babel-types "^6.26.0" 130 | babylon "^6.18.0" 131 | convert-source-map "^1.5.1" 132 | debug "^2.6.9" 133 | json5 "^0.5.1" 134 | lodash "^4.17.4" 135 | minimatch "^3.0.4" 136 | path-is-absolute "^1.0.1" 137 | private "^0.1.8" 138 | slash "^1.0.0" 139 | source-map "^0.5.7" 140 | 141 | babel-generator@^6.26.0: 142 | version "6.26.1" 143 | resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" 144 | dependencies: 145 | babel-messages "^6.23.0" 146 | babel-runtime "^6.26.0" 147 | babel-types "^6.26.0" 148 | detect-indent "^4.0.0" 149 | jsesc "^1.3.0" 150 | lodash "^4.17.4" 151 | source-map "^0.5.7" 152 | trim-right "^1.0.1" 153 | 154 | babel-helper-bindify-decorators@^6.24.1: 155 | version "6.24.1" 156 | resolved "https://registry.yarnpkg.com/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz#14c19e5f142d7b47f19a52431e52b1ccbc40a330" 157 | dependencies: 158 | babel-runtime "^6.22.0" 159 | babel-traverse "^6.24.1" 160 | babel-types "^6.24.1" 161 | 162 | babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: 163 | version "6.24.1" 164 | resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664" 165 | dependencies: 166 | babel-helper-explode-assignable-expression "^6.24.1" 167 | babel-runtime "^6.22.0" 168 | babel-types "^6.24.1" 169 | 170 | babel-helper-call-delegate@^6.24.1: 171 | version "6.24.1" 172 | resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" 173 | dependencies: 174 | babel-helper-hoist-variables "^6.24.1" 175 | babel-runtime "^6.22.0" 176 | babel-traverse "^6.24.1" 177 | babel-types "^6.24.1" 178 | 179 | babel-helper-define-map@^6.24.1: 180 | version "6.26.0" 181 | resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f" 182 | dependencies: 183 | babel-helper-function-name "^6.24.1" 184 | babel-runtime "^6.26.0" 185 | babel-types "^6.26.0" 186 | lodash "^4.17.4" 187 | 188 | babel-helper-explode-assignable-expression@^6.24.1: 189 | version "6.24.1" 190 | resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" 191 | dependencies: 192 | babel-runtime "^6.22.0" 193 | babel-traverse "^6.24.1" 194 | babel-types "^6.24.1" 195 | 196 | babel-helper-explode-class@^6.24.1: 197 | version "6.24.1" 198 | resolved "https://registry.yarnpkg.com/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz#7dc2a3910dee007056e1e31d640ced3d54eaa9eb" 199 | dependencies: 200 | babel-helper-bindify-decorators "^6.24.1" 201 | babel-runtime "^6.22.0" 202 | babel-traverse "^6.24.1" 203 | babel-types "^6.24.1" 204 | 205 | babel-helper-function-name@^6.24.1: 206 | version "6.24.1" 207 | resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" 208 | dependencies: 209 | babel-helper-get-function-arity "^6.24.1" 210 | babel-runtime "^6.22.0" 211 | babel-template "^6.24.1" 212 | babel-traverse "^6.24.1" 213 | babel-types "^6.24.1" 214 | 215 | babel-helper-get-function-arity@^6.24.1: 216 | version "6.24.1" 217 | resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" 218 | dependencies: 219 | babel-runtime "^6.22.0" 220 | babel-types "^6.24.1" 221 | 222 | babel-helper-hoist-variables@^6.24.1: 223 | version "6.24.1" 224 | resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" 225 | dependencies: 226 | babel-runtime "^6.22.0" 227 | babel-types "^6.24.1" 228 | 229 | babel-helper-optimise-call-expression@^6.24.1: 230 | version "6.24.1" 231 | resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" 232 | dependencies: 233 | babel-runtime "^6.22.0" 234 | babel-types "^6.24.1" 235 | 236 | babel-helper-regex@^6.24.1: 237 | version "6.26.0" 238 | resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72" 239 | dependencies: 240 | babel-runtime "^6.26.0" 241 | babel-types "^6.26.0" 242 | lodash "^4.17.4" 243 | 244 | babel-helper-remap-async-to-generator@^6.24.1: 245 | version "6.24.1" 246 | resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" 247 | dependencies: 248 | babel-helper-function-name "^6.24.1" 249 | babel-runtime "^6.22.0" 250 | babel-template "^6.24.1" 251 | babel-traverse "^6.24.1" 252 | babel-types "^6.24.1" 253 | 254 | babel-helper-replace-supers@^6.24.1: 255 | version "6.24.1" 256 | resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" 257 | dependencies: 258 | babel-helper-optimise-call-expression "^6.24.1" 259 | babel-messages "^6.23.0" 260 | babel-runtime "^6.22.0" 261 | babel-template "^6.24.1" 262 | babel-traverse "^6.24.1" 263 | babel-types "^6.24.1" 264 | 265 | babel-helpers@^6.24.1: 266 | version "6.24.1" 267 | resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" 268 | dependencies: 269 | babel-runtime "^6.22.0" 270 | babel-template "^6.24.1" 271 | 272 | babel-messages@^6.23.0: 273 | version "6.23.0" 274 | resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" 275 | dependencies: 276 | babel-runtime "^6.22.0" 277 | 278 | babel-plugin-check-es2015-constants@^6.22.0: 279 | version "6.22.0" 280 | resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" 281 | dependencies: 282 | babel-runtime "^6.22.0" 283 | 284 | babel-plugin-syntax-async-functions@^6.8.0: 285 | version "6.13.0" 286 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" 287 | 288 | babel-plugin-syntax-async-generators@^6.5.0: 289 | version "6.13.0" 290 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz#6bc963ebb16eccbae6b92b596eb7f35c342a8b9a" 291 | 292 | babel-plugin-syntax-class-properties@^6.8.0: 293 | version "6.13.0" 294 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de" 295 | 296 | babel-plugin-syntax-decorators@^6.13.0: 297 | version "6.13.0" 298 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz#312563b4dbde3cc806cee3e416cceeaddd11ac0b" 299 | 300 | babel-plugin-syntax-dynamic-import@^6.18.0: 301 | version "6.18.0" 302 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz#8d6a26229c83745a9982a441051572caa179b1da" 303 | 304 | babel-plugin-syntax-exponentiation-operator@^6.8.0: 305 | version "6.13.0" 306 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" 307 | 308 | babel-plugin-syntax-object-rest-spread@^6.8.0: 309 | version "6.13.0" 310 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" 311 | 312 | babel-plugin-syntax-trailing-function-commas@^6.22.0: 313 | version "6.22.0" 314 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" 315 | 316 | babel-plugin-transform-async-generator-functions@^6.24.1: 317 | version "6.24.1" 318 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz#f058900145fd3e9907a6ddf28da59f215258a5db" 319 | dependencies: 320 | babel-helper-remap-async-to-generator "^6.24.1" 321 | babel-plugin-syntax-async-generators "^6.5.0" 322 | babel-runtime "^6.22.0" 323 | 324 | babel-plugin-transform-async-to-generator@^6.24.1: 325 | version "6.24.1" 326 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761" 327 | dependencies: 328 | babel-helper-remap-async-to-generator "^6.24.1" 329 | babel-plugin-syntax-async-functions "^6.8.0" 330 | babel-runtime "^6.22.0" 331 | 332 | babel-plugin-transform-class-properties@^6.24.1: 333 | version "6.24.1" 334 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz#6a79763ea61d33d36f37b611aa9def81a81b46ac" 335 | dependencies: 336 | babel-helper-function-name "^6.24.1" 337 | babel-plugin-syntax-class-properties "^6.8.0" 338 | babel-runtime "^6.22.0" 339 | babel-template "^6.24.1" 340 | 341 | babel-plugin-transform-decorators@^6.24.1: 342 | version "6.24.1" 343 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz#788013d8f8c6b5222bdf7b344390dfd77569e24d" 344 | dependencies: 345 | babel-helper-explode-class "^6.24.1" 346 | babel-plugin-syntax-decorators "^6.13.0" 347 | babel-runtime "^6.22.0" 348 | babel-template "^6.24.1" 349 | babel-types "^6.24.1" 350 | 351 | babel-plugin-transform-es2015-arrow-functions@^6.22.0: 352 | version "6.22.0" 353 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" 354 | dependencies: 355 | babel-runtime "^6.22.0" 356 | 357 | babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: 358 | version "6.22.0" 359 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" 360 | dependencies: 361 | babel-runtime "^6.22.0" 362 | 363 | babel-plugin-transform-es2015-block-scoping@^6.24.1: 364 | version "6.26.0" 365 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" 366 | dependencies: 367 | babel-runtime "^6.26.0" 368 | babel-template "^6.26.0" 369 | babel-traverse "^6.26.0" 370 | babel-types "^6.26.0" 371 | lodash "^4.17.4" 372 | 373 | babel-plugin-transform-es2015-classes@^6.24.1: 374 | version "6.24.1" 375 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" 376 | dependencies: 377 | babel-helper-define-map "^6.24.1" 378 | babel-helper-function-name "^6.24.1" 379 | babel-helper-optimise-call-expression "^6.24.1" 380 | babel-helper-replace-supers "^6.24.1" 381 | babel-messages "^6.23.0" 382 | babel-runtime "^6.22.0" 383 | babel-template "^6.24.1" 384 | babel-traverse "^6.24.1" 385 | babel-types "^6.24.1" 386 | 387 | babel-plugin-transform-es2015-computed-properties@^6.24.1: 388 | version "6.24.1" 389 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" 390 | dependencies: 391 | babel-runtime "^6.22.0" 392 | babel-template "^6.24.1" 393 | 394 | babel-plugin-transform-es2015-destructuring@^6.22.0: 395 | version "6.23.0" 396 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" 397 | dependencies: 398 | babel-runtime "^6.22.0" 399 | 400 | babel-plugin-transform-es2015-duplicate-keys@^6.24.1: 401 | version "6.24.1" 402 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" 403 | dependencies: 404 | babel-runtime "^6.22.0" 405 | babel-types "^6.24.1" 406 | 407 | babel-plugin-transform-es2015-for-of@^6.22.0: 408 | version "6.23.0" 409 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" 410 | dependencies: 411 | babel-runtime "^6.22.0" 412 | 413 | babel-plugin-transform-es2015-function-name@^6.24.1: 414 | version "6.24.1" 415 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" 416 | dependencies: 417 | babel-helper-function-name "^6.24.1" 418 | babel-runtime "^6.22.0" 419 | babel-types "^6.24.1" 420 | 421 | babel-plugin-transform-es2015-literals@^6.22.0: 422 | version "6.22.0" 423 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" 424 | dependencies: 425 | babel-runtime "^6.22.0" 426 | 427 | babel-plugin-transform-es2015-modules-amd@^6.24.1: 428 | version "6.24.1" 429 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" 430 | dependencies: 431 | babel-plugin-transform-es2015-modules-commonjs "^6.24.1" 432 | babel-runtime "^6.22.0" 433 | babel-template "^6.24.1" 434 | 435 | babel-plugin-transform-es2015-modules-commonjs@^6.24.1: 436 | version "6.26.2" 437 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz#58a793863a9e7ca870bdc5a881117ffac27db6f3" 438 | dependencies: 439 | babel-plugin-transform-strict-mode "^6.24.1" 440 | babel-runtime "^6.26.0" 441 | babel-template "^6.26.0" 442 | babel-types "^6.26.0" 443 | 444 | babel-plugin-transform-es2015-modules-systemjs@^6.24.1: 445 | version "6.24.1" 446 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" 447 | dependencies: 448 | babel-helper-hoist-variables "^6.24.1" 449 | babel-runtime "^6.22.0" 450 | babel-template "^6.24.1" 451 | 452 | babel-plugin-transform-es2015-modules-umd@^6.24.1: 453 | version "6.24.1" 454 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" 455 | dependencies: 456 | babel-plugin-transform-es2015-modules-amd "^6.24.1" 457 | babel-runtime "^6.22.0" 458 | babel-template "^6.24.1" 459 | 460 | babel-plugin-transform-es2015-object-super@^6.24.1: 461 | version "6.24.1" 462 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" 463 | dependencies: 464 | babel-helper-replace-supers "^6.24.1" 465 | babel-runtime "^6.22.0" 466 | 467 | babel-plugin-transform-es2015-parameters@^6.24.1: 468 | version "6.24.1" 469 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" 470 | dependencies: 471 | babel-helper-call-delegate "^6.24.1" 472 | babel-helper-get-function-arity "^6.24.1" 473 | babel-runtime "^6.22.0" 474 | babel-template "^6.24.1" 475 | babel-traverse "^6.24.1" 476 | babel-types "^6.24.1" 477 | 478 | babel-plugin-transform-es2015-shorthand-properties@^6.24.1: 479 | version "6.24.1" 480 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" 481 | dependencies: 482 | babel-runtime "^6.22.0" 483 | babel-types "^6.24.1" 484 | 485 | babel-plugin-transform-es2015-spread@^6.22.0: 486 | version "6.22.0" 487 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" 488 | dependencies: 489 | babel-runtime "^6.22.0" 490 | 491 | babel-plugin-transform-es2015-sticky-regex@^6.24.1: 492 | version "6.24.1" 493 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" 494 | dependencies: 495 | babel-helper-regex "^6.24.1" 496 | babel-runtime "^6.22.0" 497 | babel-types "^6.24.1" 498 | 499 | babel-plugin-transform-es2015-template-literals@^6.22.0: 500 | version "6.22.0" 501 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" 502 | dependencies: 503 | babel-runtime "^6.22.0" 504 | 505 | babel-plugin-transform-es2015-typeof-symbol@^6.22.0: 506 | version "6.23.0" 507 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" 508 | dependencies: 509 | babel-runtime "^6.22.0" 510 | 511 | babel-plugin-transform-es2015-unicode-regex@^6.24.1: 512 | version "6.24.1" 513 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" 514 | dependencies: 515 | babel-helper-regex "^6.24.1" 516 | babel-runtime "^6.22.0" 517 | regexpu-core "^2.0.0" 518 | 519 | babel-plugin-transform-exponentiation-operator@^6.24.1: 520 | version "6.24.1" 521 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" 522 | dependencies: 523 | babel-helper-builder-binary-assignment-operator-visitor "^6.24.1" 524 | babel-plugin-syntax-exponentiation-operator "^6.8.0" 525 | babel-runtime "^6.22.0" 526 | 527 | babel-plugin-transform-object-rest-spread@^6.22.0: 528 | version "6.26.0" 529 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06" 530 | dependencies: 531 | babel-plugin-syntax-object-rest-spread "^6.8.0" 532 | babel-runtime "^6.26.0" 533 | 534 | babel-plugin-transform-regenerator@^6.24.1: 535 | version "6.26.0" 536 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" 537 | dependencies: 538 | regenerator-transform "^0.10.0" 539 | 540 | babel-plugin-transform-runtime@^6.23.0: 541 | version "6.23.0" 542 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.23.0.tgz#88490d446502ea9b8e7efb0fe09ec4d99479b1ee" 543 | dependencies: 544 | babel-runtime "^6.22.0" 545 | 546 | babel-plugin-transform-strict-mode@^6.24.1: 547 | version "6.24.1" 548 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" 549 | dependencies: 550 | babel-runtime "^6.22.0" 551 | babel-types "^6.24.1" 552 | 553 | babel-preset-es2015@^6.24.1: 554 | version "6.24.1" 555 | resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz#d44050d6bc2c9feea702aaf38d727a0210538939" 556 | dependencies: 557 | babel-plugin-check-es2015-constants "^6.22.0" 558 | babel-plugin-transform-es2015-arrow-functions "^6.22.0" 559 | babel-plugin-transform-es2015-block-scoped-functions "^6.22.0" 560 | babel-plugin-transform-es2015-block-scoping "^6.24.1" 561 | babel-plugin-transform-es2015-classes "^6.24.1" 562 | babel-plugin-transform-es2015-computed-properties "^6.24.1" 563 | babel-plugin-transform-es2015-destructuring "^6.22.0" 564 | babel-plugin-transform-es2015-duplicate-keys "^6.24.1" 565 | babel-plugin-transform-es2015-for-of "^6.22.0" 566 | babel-plugin-transform-es2015-function-name "^6.24.1" 567 | babel-plugin-transform-es2015-literals "^6.22.0" 568 | babel-plugin-transform-es2015-modules-amd "^6.24.1" 569 | babel-plugin-transform-es2015-modules-commonjs "^6.24.1" 570 | babel-plugin-transform-es2015-modules-systemjs "^6.24.1" 571 | babel-plugin-transform-es2015-modules-umd "^6.24.1" 572 | babel-plugin-transform-es2015-object-super "^6.24.1" 573 | babel-plugin-transform-es2015-parameters "^6.24.1" 574 | babel-plugin-transform-es2015-shorthand-properties "^6.24.1" 575 | babel-plugin-transform-es2015-spread "^6.22.0" 576 | babel-plugin-transform-es2015-sticky-regex "^6.24.1" 577 | babel-plugin-transform-es2015-template-literals "^6.22.0" 578 | babel-plugin-transform-es2015-typeof-symbol "^6.22.0" 579 | babel-plugin-transform-es2015-unicode-regex "^6.24.1" 580 | babel-plugin-transform-regenerator "^6.24.1" 581 | 582 | babel-preset-stage-2@^6.24.1: 583 | version "6.24.1" 584 | resolved "https://registry.yarnpkg.com/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz#d9e2960fb3d71187f0e64eec62bc07767219bdc1" 585 | dependencies: 586 | babel-plugin-syntax-dynamic-import "^6.18.0" 587 | babel-plugin-transform-class-properties "^6.24.1" 588 | babel-plugin-transform-decorators "^6.24.1" 589 | babel-preset-stage-3 "^6.24.1" 590 | 591 | babel-preset-stage-3@^6.24.1: 592 | version "6.24.1" 593 | resolved "https://registry.yarnpkg.com/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz#836ada0a9e7a7fa37cb138fb9326f87934a48395" 594 | dependencies: 595 | babel-plugin-syntax-trailing-function-commas "^6.22.0" 596 | babel-plugin-transform-async-generator-functions "^6.24.1" 597 | babel-plugin-transform-async-to-generator "^6.24.1" 598 | babel-plugin-transform-exponentiation-operator "^6.24.1" 599 | babel-plugin-transform-object-rest-spread "^6.22.0" 600 | 601 | babel-register@^6.26.0: 602 | version "6.26.0" 603 | resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" 604 | dependencies: 605 | babel-core "^6.26.0" 606 | babel-runtime "^6.26.0" 607 | core-js "^2.5.0" 608 | home-or-tmp "^2.0.0" 609 | lodash "^4.17.4" 610 | mkdirp "^0.5.1" 611 | source-map-support "^0.4.15" 612 | 613 | babel-runtime@6.26.0, babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: 614 | version "6.26.0" 615 | resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" 616 | dependencies: 617 | core-js "^2.4.0" 618 | regenerator-runtime "^0.11.0" 619 | 620 | babel-runtime@^5.8.25: 621 | version "5.8.38" 622 | resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-5.8.38.tgz#1c0b02eb63312f5f087ff20450827b425c9d4c19" 623 | dependencies: 624 | core-js "^1.0.0" 625 | 626 | babel-template@^6.24.1, babel-template@^6.26.0: 627 | version "6.26.0" 628 | resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" 629 | dependencies: 630 | babel-runtime "^6.26.0" 631 | babel-traverse "^6.26.0" 632 | babel-types "^6.26.0" 633 | babylon "^6.18.0" 634 | lodash "^4.17.4" 635 | 636 | babel-traverse@^6.24.1, babel-traverse@^6.26.0: 637 | version "6.26.0" 638 | resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" 639 | dependencies: 640 | babel-code-frame "^6.26.0" 641 | babel-messages "^6.23.0" 642 | babel-runtime "^6.26.0" 643 | babel-types "^6.26.0" 644 | babylon "^6.18.0" 645 | debug "^2.6.8" 646 | globals "^9.18.0" 647 | invariant "^2.2.2" 648 | lodash "^4.17.4" 649 | 650 | babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: 651 | version "6.26.0" 652 | resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" 653 | dependencies: 654 | babel-runtime "^6.26.0" 655 | esutils "^2.0.2" 656 | lodash "^4.17.4" 657 | to-fast-properties "^1.0.3" 658 | 659 | babylon@^6.18.0: 660 | version "6.18.0" 661 | resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" 662 | 663 | balanced-match@^1.0.0: 664 | version "1.0.0" 665 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 666 | 667 | batch@0.5.0: 668 | version "0.5.0" 669 | resolved "https://registry.yarnpkg.com/batch/-/batch-0.5.0.tgz#fd2e05a7a5d696b4db9314013e285d8ff3557ec3" 670 | 671 | bcrypt-pbkdf@^1.0.0: 672 | version "1.0.1" 673 | resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" 674 | dependencies: 675 | tweetnacl "^0.14.3" 676 | 677 | bl@^1.0.0: 678 | version "1.2.2" 679 | resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.2.tgz#a160911717103c07410cef63ef51b397c025af9c" 680 | dependencies: 681 | readable-stream "^2.3.5" 682 | safe-buffer "^5.1.1" 683 | 684 | boom@4.x.x: 685 | version "4.3.1" 686 | resolved "https://registry.yarnpkg.com/boom/-/boom-4.3.1.tgz#4f8a3005cb4a7e3889f749030fd25b96e01d2e31" 687 | dependencies: 688 | hoek "4.x.x" 689 | 690 | boom@5.x.x: 691 | version "5.2.0" 692 | resolved "https://registry.yarnpkg.com/boom/-/boom-5.2.0.tgz#5dd9da6ee3a5f302077436290cb717d3f4a54e02" 693 | dependencies: 694 | hoek "4.x.x" 695 | 696 | brace-expansion@^1.0.0, brace-expansion@^1.1.7: 697 | version "1.1.11" 698 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 699 | dependencies: 700 | balanced-match "^1.0.0" 701 | concat-map "0.0.1" 702 | 703 | buffer-alloc-unsafe@^1.1.0: 704 | version "1.1.0" 705 | resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" 706 | 707 | buffer-alloc@^1.1.0: 708 | version "1.2.0" 709 | resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec" 710 | dependencies: 711 | buffer-alloc-unsafe "^1.1.0" 712 | buffer-fill "^1.0.0" 713 | 714 | buffer-crc32@0.2.1: 715 | version "0.2.1" 716 | resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.1.tgz#be3e5382fc02b6d6324956ac1af98aa98b08534c" 717 | 718 | buffer-crc32@^0.2.1, buffer-crc32@~0.2.3: 719 | version "0.2.13" 720 | resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" 721 | 722 | buffer-fill@^1.0.0: 723 | version "1.0.0" 724 | resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" 725 | 726 | bytes@0.2.1, bytes@~0.2.1: 727 | version "0.2.1" 728 | resolved "https://registry.yarnpkg.com/bytes/-/bytes-0.2.1.tgz#555b08abcb063f8975905302523e4cd4ffdfdf31" 729 | 730 | caseless@~0.12.0: 731 | version "0.12.0" 732 | resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" 733 | 734 | chalk@^1.1.3: 735 | version "1.1.3" 736 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" 737 | dependencies: 738 | ansi-styles "^2.2.1" 739 | escape-string-regexp "^1.0.2" 740 | has-ansi "^2.0.0" 741 | strip-ansi "^3.0.0" 742 | supports-color "^2.0.0" 743 | 744 | chalk@^2.0.0: 745 | version "2.4.1" 746 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" 747 | dependencies: 748 | ansi-styles "^3.2.1" 749 | escape-string-regexp "^1.0.5" 750 | supports-color "^5.3.0" 751 | 752 | chardet@^0.4.0: 753 | version "0.4.2" 754 | resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" 755 | 756 | cli-cursor@^2.1.0: 757 | version "2.1.0" 758 | resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" 759 | dependencies: 760 | restore-cursor "^2.0.0" 761 | 762 | cli-width@^2.0.0: 763 | version "2.2.0" 764 | resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" 765 | 766 | co@^4.6.0: 767 | version "4.6.0" 768 | resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" 769 | 770 | color-convert@^1.9.0: 771 | version "1.9.1" 772 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed" 773 | dependencies: 774 | color-name "^1.1.1" 775 | 776 | color-name@^1.1.1: 777 | version "1.1.3" 778 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 779 | 780 | colors@0.6.2: 781 | version "0.6.2" 782 | resolved "https://registry.yarnpkg.com/colors/-/colors-0.6.2.tgz#2423fe6678ac0c5dae8852e5d0e5be08c997abcc" 783 | 784 | combined-stream@1.0.6, combined-stream@~1.0.5: 785 | version "1.0.6" 786 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818" 787 | dependencies: 788 | delayed-stream "~1.0.0" 789 | 790 | commander@^2.9.0: 791 | version "2.15.1" 792 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f" 793 | 794 | compress-commons@^1.2.0: 795 | version "1.2.2" 796 | resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-1.2.2.tgz#524a9f10903f3a813389b0225d27c48bb751890f" 797 | dependencies: 798 | buffer-crc32 "^0.2.1" 799 | crc32-stream "^2.0.0" 800 | normalize-path "^2.0.0" 801 | readable-stream "^2.0.0" 802 | 803 | compressible@1.0.0: 804 | version "1.0.0" 805 | resolved "https://registry.yarnpkg.com/compressible/-/compressible-1.0.0.tgz#f83e49c1cb61421753545125a8011d68b492427d" 806 | 807 | concat-map@0.0.1: 808 | version "0.0.1" 809 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 810 | 811 | connect@2.13.1: 812 | version "2.13.1" 813 | resolved "https://registry.yarnpkg.com/connect/-/connect-2.13.1.tgz#aab82be9f0765a423aa99431ab922aaa8081aa22" 814 | dependencies: 815 | batch "0.5.0" 816 | buffer-crc32 "0.2.1" 817 | bytes "0.2.1" 818 | compressible "1.0.0" 819 | cookie "0.1.0" 820 | cookie-signature "1.0.1" 821 | debug ">= 0.7.3 < 1" 822 | fresh "0.2.0" 823 | methods "0.1.0" 824 | multiparty "2.2.0" 825 | negotiator "0.3.0" 826 | pause "0.0.1" 827 | qs "0.6.6" 828 | raw-body "1.1.3" 829 | send "0.1.4" 830 | uid2 "0.0.3" 831 | 832 | convert-source-map@^1.5.1: 833 | version "1.5.1" 834 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5" 835 | 836 | cookie-signature@1.0.1: 837 | version "1.0.1" 838 | resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.1.tgz#44e072148af01e6e8e24afbf12690d68ae698ecb" 839 | 840 | cookie@0.1.0: 841 | version "0.1.0" 842 | resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.1.0.tgz#90eb469ddce905c866de687efc43131d8801f9d0" 843 | 844 | core-js@^1.0.0: 845 | version "1.2.7" 846 | resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" 847 | 848 | core-js@^2.4.0, core-js@^2.5.0: 849 | version "2.5.7" 850 | resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.7.tgz#f972608ff0cead68b841a16a932d0b183791814e" 851 | 852 | core-util-is@1.0.2, core-util-is@~1.0.0: 853 | version "1.0.2" 854 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 855 | 856 | crc32-stream@^2.0.0: 857 | version "2.0.0" 858 | resolved "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-2.0.0.tgz#e3cdd3b4df3168dd74e3de3fbbcb7b297fe908f4" 859 | dependencies: 860 | crc "^3.4.4" 861 | readable-stream "^2.0.0" 862 | 863 | crc@^3.4.4: 864 | version "3.5.0" 865 | resolved "https://registry.yarnpkg.com/crc/-/crc-3.5.0.tgz#98b8ba7d489665ba3979f59b21381374101a1964" 866 | 867 | cross-spawn@^6.0.0: 868 | version "6.0.5" 869 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" 870 | dependencies: 871 | nice-try "^1.0.4" 872 | path-key "^2.0.1" 873 | semver "^5.5.0" 874 | shebang-command "^1.2.0" 875 | which "^1.2.9" 876 | 877 | cryptiles@3.x.x: 878 | version "3.1.2" 879 | resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe" 880 | dependencies: 881 | boom "5.x.x" 882 | 883 | css-parse@~2.0.0: 884 | version "2.0.0" 885 | resolved "https://registry.yarnpkg.com/css-parse/-/css-parse-2.0.0.tgz#a468ee667c16d81ccf05c58c38d2a97c780dbfd4" 886 | dependencies: 887 | css "^2.0.0" 888 | 889 | css-value@~0.0.1: 890 | version "0.0.1" 891 | resolved "https://registry.yarnpkg.com/css-value/-/css-value-0.0.1.tgz#5efd6c2eea5ea1fd6b6ac57ec0427b18452424ea" 892 | 893 | css@^2.0.0: 894 | version "2.2.3" 895 | resolved "https://registry.yarnpkg.com/css/-/css-2.2.3.tgz#f861f4ba61e79bedc962aa548e5780fd95cbc6be" 896 | dependencies: 897 | inherits "^2.0.1" 898 | source-map "^0.1.38" 899 | source-map-resolve "^0.5.1" 900 | urix "^0.1.0" 901 | 902 | dashdash@^1.12.0: 903 | version "1.14.1" 904 | resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" 905 | dependencies: 906 | assert-plus "^1.0.0" 907 | 908 | date-format@0.0.2: 909 | version "0.0.2" 910 | resolved "https://registry.yarnpkg.com/date-format/-/date-format-0.0.2.tgz#fafd448f72115ef1e2b739155ae92f2be6c28dd1" 911 | 912 | debug@*, debug@^3.0.0: 913 | version "3.1.0" 914 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" 915 | dependencies: 916 | ms "2.0.0" 917 | 918 | "debug@>= 0.7.3 < 1": 919 | version "0.8.1" 920 | resolved "https://registry.yarnpkg.com/debug/-/debug-0.8.1.tgz#20ff4d26f5e422cb68a1bacbbb61039ad8c1c130" 921 | 922 | debug@^2.6.8, debug@^2.6.9: 923 | version "2.6.9" 924 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 925 | dependencies: 926 | ms "2.0.0" 927 | 928 | decode-uri-component@^0.2.0: 929 | version "0.2.0" 930 | resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" 931 | 932 | deepmerge@~2.0.1: 933 | version "2.0.1" 934 | resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-2.0.1.tgz#25c1c24f110fb914f80001b925264dd77f3f4312" 935 | 936 | define-properties@^1.1.2: 937 | version "1.1.2" 938 | resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" 939 | dependencies: 940 | foreach "^2.0.5" 941 | object-keys "^1.0.8" 942 | 943 | delayed-stream@~1.0.0: 944 | version "1.0.0" 945 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 946 | 947 | detect-indent@^4.0.0: 948 | version "4.0.0" 949 | resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" 950 | dependencies: 951 | repeating "^2.0.0" 952 | 953 | ecc-jsbn@~0.1.1: 954 | version "0.1.1" 955 | resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" 956 | dependencies: 957 | jsbn "~0.1.0" 958 | 959 | ejs@~2.5.6: 960 | version "2.5.9" 961 | resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.5.9.tgz#7ba254582a560d267437109a68354112475b0ce5" 962 | 963 | end-of-stream@^1.0.0: 964 | version "1.4.1" 965 | resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" 966 | dependencies: 967 | once "^1.4.0" 968 | 969 | escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: 970 | version "1.0.5" 971 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 972 | 973 | esutils@^2.0.2: 974 | version "2.0.2" 975 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" 976 | 977 | extend@~3.0.1: 978 | version "3.0.1" 979 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" 980 | 981 | external-editor@^2.0.4: 982 | version "2.2.0" 983 | resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5" 984 | dependencies: 985 | chardet "^0.4.0" 986 | iconv-lite "^0.4.17" 987 | tmp "^0.0.33" 988 | 989 | extsprintf@1.3.0: 990 | version "1.3.0" 991 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" 992 | 993 | extsprintf@^1.2.0: 994 | version "1.4.0" 995 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" 996 | 997 | fast-deep-equal@^1.0.0: 998 | version "1.1.0" 999 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" 1000 | 1001 | fast-json-stable-stringify@^2.0.0: 1002 | version "2.0.0" 1003 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" 1004 | 1005 | faye-websocket@0.9.2: 1006 | version "0.9.2" 1007 | resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.9.2.tgz#872e633049fa10c3a55381f9ecac80bfb3053405" 1008 | dependencies: 1009 | websocket-driver ">=0.5.1" 1010 | 1011 | fd-slicer@~1.0.1: 1012 | version "1.0.1" 1013 | resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.0.1.tgz#8b5bcbd9ec327c5041bf9ab023fd6750f1177e65" 1014 | dependencies: 1015 | pend "~1.2.0" 1016 | 1017 | fibers@~2.0.0: 1018 | version "2.0.2" 1019 | resolved "https://registry.yarnpkg.com/fibers/-/fibers-2.0.2.tgz#36db63ea61c543174e2264675fea8c2783371366" 1020 | 1021 | figures@^2.0.0: 1022 | version "2.0.0" 1023 | resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" 1024 | dependencies: 1025 | escape-string-regexp "^1.0.5" 1026 | 1027 | file-type@^7.7.1: 1028 | version "7.7.1" 1029 | resolved "https://registry.yarnpkg.com/file-type/-/file-type-7.7.1.tgz#91c2f5edb8ce70688b9b68a90d931bbb6cb21f65" 1030 | 1031 | foreach@^2.0.5: 1032 | version "2.0.5" 1033 | resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" 1034 | 1035 | forever-agent@~0.6.1: 1036 | version "0.6.1" 1037 | resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" 1038 | 1039 | form-data@~2.3.1: 1040 | version "2.3.2" 1041 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.2.tgz#4970498be604c20c005d4f5c23aecd21d6b49099" 1042 | dependencies: 1043 | asynckit "^0.4.0" 1044 | combined-stream "1.0.6" 1045 | mime-types "^2.1.12" 1046 | 1047 | fresh@0.2.0: 1048 | version "0.2.0" 1049 | resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.2.0.tgz#bfd9402cf3df12c4a4c310c79f99a3dde13d34a7" 1050 | 1051 | fs-constants@^1.0.0: 1052 | version "1.0.0" 1053 | resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" 1054 | 1055 | fs-extra@^0.30.0: 1056 | version "0.30.0" 1057 | resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0" 1058 | dependencies: 1059 | graceful-fs "^4.1.2" 1060 | jsonfile "^2.1.0" 1061 | klaw "^1.0.0" 1062 | path-is-absolute "^1.0.0" 1063 | rimraf "^2.2.8" 1064 | 1065 | fs-extra@^6.0.1: 1066 | version "6.0.1" 1067 | resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-6.0.1.tgz#8abc128f7946e310135ddc93b98bddb410e7a34b" 1068 | dependencies: 1069 | graceful-fs "^4.1.2" 1070 | jsonfile "^4.0.0" 1071 | universalify "^0.1.0" 1072 | 1073 | fs.realpath@^1.0.0: 1074 | version "1.0.0" 1075 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 1076 | 1077 | function-bind@^1.1.1: 1078 | version "1.1.1" 1079 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 1080 | 1081 | gaze@~1.1.2: 1082 | version "1.1.3" 1083 | resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.3.tgz#c441733e13b927ac8c0ff0b4c3b033f28812924a" 1084 | dependencies: 1085 | globule "^1.0.0" 1086 | 1087 | getpass@^0.1.1: 1088 | version "0.1.7" 1089 | resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" 1090 | dependencies: 1091 | assert-plus "^1.0.0" 1092 | 1093 | glob@^7.0.0, glob@^7.0.5, glob@^7.0.6, glob@~7.1.1: 1094 | version "7.1.2" 1095 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" 1096 | dependencies: 1097 | fs.realpath "^1.0.0" 1098 | inflight "^1.0.4" 1099 | inherits "2" 1100 | minimatch "^3.0.4" 1101 | once "^1.3.0" 1102 | path-is-absolute "^1.0.0" 1103 | 1104 | globals@^9.18.0: 1105 | version "9.18.0" 1106 | resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" 1107 | 1108 | globule@^1.0.0: 1109 | version "1.2.1" 1110 | resolved "https://registry.yarnpkg.com/globule/-/globule-1.2.1.tgz#5dffb1b191f22d20797a9369b49eab4e9839696d" 1111 | dependencies: 1112 | glob "~7.1.1" 1113 | lodash "~4.17.10" 1114 | minimatch "~3.0.2" 1115 | 1116 | graceful-fs@^4.1.0, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9: 1117 | version "4.1.11" 1118 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" 1119 | 1120 | har-schema@^2.0.0: 1121 | version "2.0.0" 1122 | resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" 1123 | 1124 | har-validator@~5.0.3: 1125 | version "5.0.3" 1126 | resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd" 1127 | dependencies: 1128 | ajv "^5.1.0" 1129 | har-schema "^2.0.0" 1130 | 1131 | has-ansi@^2.0.0: 1132 | version "2.0.0" 1133 | resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" 1134 | dependencies: 1135 | ansi-regex "^2.0.0" 1136 | 1137 | has-flag@^2.0.0: 1138 | version "2.0.0" 1139 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" 1140 | 1141 | has-flag@^3.0.0: 1142 | version "3.0.0" 1143 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 1144 | 1145 | has-symbols@^1.0.0: 1146 | version "1.0.0" 1147 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" 1148 | 1149 | hawk@~6.0.2: 1150 | version "6.0.2" 1151 | resolved "https://registry.yarnpkg.com/hawk/-/hawk-6.0.2.tgz#af4d914eb065f9b5ce4d9d11c1cb2126eecc3038" 1152 | dependencies: 1153 | boom "4.x.x" 1154 | cryptiles "3.x.x" 1155 | hoek "4.x.x" 1156 | sntp "2.x.x" 1157 | 1158 | hoek@4.x.x: 1159 | version "4.2.1" 1160 | resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.1.tgz#9634502aa12c445dd5a7c5734b572bb8738aacbb" 1161 | 1162 | home-or-tmp@^2.0.0: 1163 | version "2.0.0" 1164 | resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" 1165 | dependencies: 1166 | os-homedir "^1.0.0" 1167 | os-tmpdir "^1.0.1" 1168 | 1169 | http-parser-js@>=0.4.0: 1170 | version "0.4.13" 1171 | resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.13.tgz#3bd6d6fde6e3172c9334c3b33b6c193d80fe1137" 1172 | 1173 | http-signature@~1.2.0: 1174 | version "1.2.0" 1175 | resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" 1176 | dependencies: 1177 | assert-plus "^1.0.0" 1178 | jsprim "^1.2.2" 1179 | sshpk "^1.7.0" 1180 | 1181 | iconv-lite@^0.4.17: 1182 | version "0.4.23" 1183 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63" 1184 | dependencies: 1185 | safer-buffer ">= 2.1.2 < 3" 1186 | 1187 | inflight@^1.0.4: 1188 | version "1.0.6" 1189 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 1190 | dependencies: 1191 | once "^1.3.0" 1192 | wrappy "1" 1193 | 1194 | inherits@2, inherits@^2.0.1, inherits@~2.0.1, inherits@~2.0.3: 1195 | version "2.0.3" 1196 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 1197 | 1198 | inquirer@~3.3.0: 1199 | version "3.3.0" 1200 | resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" 1201 | dependencies: 1202 | ansi-escapes "^3.0.0" 1203 | chalk "^2.0.0" 1204 | cli-cursor "^2.1.0" 1205 | cli-width "^2.0.0" 1206 | external-editor "^2.0.4" 1207 | figures "^2.0.0" 1208 | lodash "^4.3.0" 1209 | mute-stream "0.0.7" 1210 | run-async "^2.2.0" 1211 | rx-lite "^4.0.8" 1212 | rx-lite-aggregates "^4.0.8" 1213 | string-width "^2.1.0" 1214 | strip-ansi "^4.0.0" 1215 | through "^2.3.6" 1216 | 1217 | invariant@^2.2.2: 1218 | version "2.2.4" 1219 | resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" 1220 | dependencies: 1221 | loose-envify "^1.0.0" 1222 | 1223 | ip@^1.1.5: 1224 | version "1.1.5" 1225 | resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" 1226 | 1227 | is-finite@^1.0.0: 1228 | version "1.0.2" 1229 | resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" 1230 | dependencies: 1231 | number-is-nan "^1.0.0" 1232 | 1233 | is-fullwidth-code-point@^2.0.0: 1234 | version "2.0.0" 1235 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 1236 | 1237 | is-promise@^2.1.0: 1238 | version "2.1.0" 1239 | resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" 1240 | 1241 | is-typedarray@~1.0.0: 1242 | version "1.0.0" 1243 | resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" 1244 | 1245 | isarray@0.0.1: 1246 | version "0.0.1" 1247 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" 1248 | 1249 | isarray@~1.0.0: 1250 | version "1.0.0" 1251 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 1252 | 1253 | isexe@^2.0.0: 1254 | version "2.0.0" 1255 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 1256 | 1257 | isstream@~0.1.2: 1258 | version "0.1.2" 1259 | resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" 1260 | 1261 | jasmine-core@~3.1.0: 1262 | version "3.1.0" 1263 | resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-3.1.0.tgz#a4785e135d5df65024dfc9224953df585bd2766c" 1264 | 1265 | jasmine@^3.0.0: 1266 | version "3.1.0" 1267 | resolved "https://registry.yarnpkg.com/jasmine/-/jasmine-3.1.0.tgz#2bd59fd7ec6ec0e8acb64e09f45a68ed2ad1952a" 1268 | dependencies: 1269 | glob "^7.0.6" 1270 | jasmine-core "~3.1.0" 1271 | 1272 | js-tokens@^3.0.0, js-tokens@^3.0.2: 1273 | version "3.0.2" 1274 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" 1275 | 1276 | js2xmlparser@^3.0.0: 1277 | version "3.0.0" 1278 | resolved "https://registry.yarnpkg.com/js2xmlparser/-/js2xmlparser-3.0.0.tgz#3fb60eaa089c5440f9319f51760ccd07e2499733" 1279 | dependencies: 1280 | xmlcreate "^1.0.1" 1281 | 1282 | jsbn@~0.1.0: 1283 | version "0.1.1" 1284 | resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" 1285 | 1286 | jsesc@^1.3.0: 1287 | version "1.3.0" 1288 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" 1289 | 1290 | jsesc@~0.5.0: 1291 | version "0.5.0" 1292 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" 1293 | 1294 | json-schema-traverse@^0.3.0: 1295 | version "0.3.1" 1296 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" 1297 | 1298 | json-schema@0.2.3: 1299 | version "0.2.3" 1300 | resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" 1301 | 1302 | json-stringify-safe@~5.0.1: 1303 | version "5.0.1" 1304 | resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" 1305 | 1306 | json5@^0.5.1: 1307 | version "0.5.1" 1308 | resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" 1309 | 1310 | jsonfile@^2.1.0: 1311 | version "2.4.0" 1312 | resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" 1313 | optionalDependencies: 1314 | graceful-fs "^4.1.6" 1315 | 1316 | jsonfile@^4.0.0: 1317 | version "4.0.0" 1318 | resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" 1319 | optionalDependencies: 1320 | graceful-fs "^4.1.6" 1321 | 1322 | jsprim@^1.2.2: 1323 | version "1.4.1" 1324 | resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" 1325 | dependencies: 1326 | assert-plus "1.0.0" 1327 | extsprintf "1.3.0" 1328 | json-schema "0.2.3" 1329 | verror "1.10.0" 1330 | 1331 | junit-report-builder@~1.3.0: 1332 | version "1.3.1" 1333 | resolved "https://registry.yarnpkg.com/junit-report-builder/-/junit-report-builder-1.3.1.tgz#65923e2587a54762e8fb91505ea5604dba519d55" 1334 | dependencies: 1335 | date-format "0.0.2" 1336 | lodash "^4.17.10" 1337 | mkdirp "^0.5.0" 1338 | xmlbuilder "^10.0.0" 1339 | 1340 | klaw@^1.0.0: 1341 | version "1.3.1" 1342 | resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" 1343 | optionalDependencies: 1344 | graceful-fs "^4.1.9" 1345 | 1346 | lazystream@^1.0.0: 1347 | version "1.0.0" 1348 | resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4" 1349 | dependencies: 1350 | readable-stream "^2.0.5" 1351 | 1352 | lodash.get@^4.4.2: 1353 | version "4.4.2" 1354 | resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" 1355 | 1356 | lodash@^4.17.10, lodash@^4.17.4, lodash@^4.3.0, lodash@^4.8.0, lodash@~4.17.10: 1357 | version "4.17.10" 1358 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7" 1359 | 1360 | loose-envify@^1.0.0: 1361 | version "1.3.1" 1362 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" 1363 | dependencies: 1364 | js-tokens "^3.0.0" 1365 | 1366 | methods@0.1.0: 1367 | version "0.1.0" 1368 | resolved "https://registry.yarnpkg.com/methods/-/methods-0.1.0.tgz#335d429eefd21b7bacf2e9c922a8d2bd14a30e4f" 1369 | 1370 | mime-db@~1.33.0: 1371 | version "1.33.0" 1372 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" 1373 | 1374 | mime-types@^2.1.12, mime-types@~2.1.17: 1375 | version "2.1.18" 1376 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" 1377 | dependencies: 1378 | mime-db "~1.33.0" 1379 | 1380 | mime@^2.3.1: 1381 | version "2.3.1" 1382 | resolved "https://registry.yarnpkg.com/mime/-/mime-2.3.1.tgz#b1621c54d63b97c47d3cfe7f7215f7d64517c369" 1383 | 1384 | mime@~1.2.9: 1385 | version "1.2.11" 1386 | resolved "https://registry.yarnpkg.com/mime/-/mime-1.2.11.tgz#58203eed86e3a5ef17aed2b7d9ebd47f0a60dd10" 1387 | 1388 | mimic-fn@^1.0.0: 1389 | version "1.2.0" 1390 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" 1391 | 1392 | minimatch@3.0.2: 1393 | version "3.0.2" 1394 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.2.tgz#0f398a7300ea441e9c348c83d98ab8c9dbf9c40a" 1395 | dependencies: 1396 | brace-expansion "^1.0.0" 1397 | 1398 | minimatch@^3.0.4, minimatch@~3.0.2: 1399 | version "3.0.4" 1400 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 1401 | dependencies: 1402 | brace-expansion "^1.1.7" 1403 | 1404 | minimist@0.0.8: 1405 | version "0.0.8" 1406 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 1407 | 1408 | minimist@^1.2.0: 1409 | version "1.2.0" 1410 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" 1411 | 1412 | minimist@~0.0.1: 1413 | version "0.0.10" 1414 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" 1415 | 1416 | mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1: 1417 | version "0.5.1" 1418 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 1419 | dependencies: 1420 | minimist "0.0.8" 1421 | 1422 | ms@2.0.0: 1423 | version "2.0.0" 1424 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 1425 | 1426 | multiparty@2.2.0: 1427 | version "2.2.0" 1428 | resolved "https://registry.yarnpkg.com/multiparty/-/multiparty-2.2.0.tgz#a567c2af000ad22dc8f2a653d91978ae1f5316f4" 1429 | dependencies: 1430 | readable-stream "~1.1.9" 1431 | stream-counter "~0.2.0" 1432 | 1433 | mute-stream@0.0.7: 1434 | version "0.0.7" 1435 | resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" 1436 | 1437 | negotiator@0.3.0: 1438 | version "0.3.0" 1439 | resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.3.0.tgz#706d692efeddf574d57ea9fb1ab89a4fa7ee8f60" 1440 | 1441 | nice-try@^1.0.4: 1442 | version "1.0.4" 1443 | resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.4.tgz#d93962f6c52f2c1558c0fbda6d512819f1efe1c4" 1444 | 1445 | normalize-path@^2.0.0: 1446 | version "2.1.1" 1447 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" 1448 | dependencies: 1449 | remove-trailing-separator "^1.0.1" 1450 | 1451 | npm-install-package@~2.1.0: 1452 | version "2.1.0" 1453 | resolved "https://registry.yarnpkg.com/npm-install-package/-/npm-install-package-2.1.0.tgz#d7efe3cfcd7ab00614b896ea53119dc9ab259125" 1454 | 1455 | number-is-nan@^1.0.0: 1456 | version "1.0.1" 1457 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" 1458 | 1459 | oauth-sign@~0.8.2: 1460 | version "0.8.2" 1461 | resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" 1462 | 1463 | object-assign@^4.1.1: 1464 | version "4.1.1" 1465 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 1466 | 1467 | object-keys@^1.0.11, object-keys@^1.0.8: 1468 | version "1.0.11" 1469 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" 1470 | 1471 | object.assign@^4.0.3: 1472 | version "4.1.0" 1473 | resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" 1474 | dependencies: 1475 | define-properties "^1.1.2" 1476 | function-bind "^1.1.1" 1477 | has-symbols "^1.0.0" 1478 | object-keys "^1.0.11" 1479 | 1480 | once@^1.3.0, once@^1.4.0: 1481 | version "1.4.0" 1482 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1483 | dependencies: 1484 | wrappy "1" 1485 | 1486 | onetime@^2.0.0: 1487 | version "2.0.1" 1488 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" 1489 | dependencies: 1490 | mimic-fn "^1.0.0" 1491 | 1492 | open@^0.0.5: 1493 | version "0.0.5" 1494 | resolved "https://registry.yarnpkg.com/open/-/open-0.0.5.tgz#42c3e18ec95466b6bf0dc42f3a2945c3f0cad8fc" 1495 | 1496 | opener@1.4.1: 1497 | version "1.4.1" 1498 | resolved "https://registry.yarnpkg.com/opener/-/opener-1.4.1.tgz#897590acd1aed3311b703b58bccb4d43f56f2895" 1499 | 1500 | optimist@~0.6.1: 1501 | version "0.6.1" 1502 | resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" 1503 | dependencies: 1504 | minimist "~0.0.1" 1505 | wordwrap "~0.0.2" 1506 | 1507 | os-homedir@^1.0.0: 1508 | version "1.0.2" 1509 | resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" 1510 | 1511 | os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: 1512 | version "1.0.2" 1513 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" 1514 | 1515 | path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: 1516 | version "1.0.1" 1517 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1518 | 1519 | path-key@^2.0.1: 1520 | version "2.0.1" 1521 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" 1522 | 1523 | pause@0.0.1: 1524 | version "0.0.1" 1525 | resolved "https://registry.yarnpkg.com/pause/-/pause-0.0.1.tgz#1d408b3fdb76923b9543d96fb4c9dfd535d9cb5d" 1526 | 1527 | pend@~1.2.0: 1528 | version "1.2.0" 1529 | resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" 1530 | 1531 | performance-now@^2.1.0: 1532 | version "2.1.0" 1533 | resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" 1534 | 1535 | private@^0.1.6, private@^0.1.8: 1536 | version "0.1.8" 1537 | resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" 1538 | 1539 | process-nextick-args@~2.0.0: 1540 | version "2.0.0" 1541 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" 1542 | 1543 | progress@2.0.0: 1544 | version "2.0.0" 1545 | resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f" 1546 | 1547 | punycode@1.3.2: 1548 | version "1.3.2" 1549 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" 1550 | 1551 | punycode@^1.4.1: 1552 | version "1.4.1" 1553 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" 1554 | 1555 | q@~1.5.0: 1556 | version "1.5.1" 1557 | resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" 1558 | 1559 | qs@0.6.6: 1560 | version "0.6.6" 1561 | resolved "https://registry.yarnpkg.com/qs/-/qs-0.6.6.tgz#6e015098ff51968b8a3c819001d5f2c89bc4b107" 1562 | 1563 | qs@~6.5.1: 1564 | version "6.5.2" 1565 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" 1566 | 1567 | querystring@0.2.0: 1568 | version "0.2.0" 1569 | resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" 1570 | 1571 | range-parser@0.0.4: 1572 | version "0.0.4" 1573 | resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-0.0.4.tgz#c0427ffef51c10acba0782a46c9602e744ff620b" 1574 | 1575 | raw-body@1.1.3: 1576 | version "1.1.3" 1577 | resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-1.1.3.tgz#3d2f91e2449259cc67b8c3ce9f061db5b987935b" 1578 | dependencies: 1579 | bytes "~0.2.1" 1580 | 1581 | readable-stream@^2.0.0, readable-stream@^2.0.5, readable-stream@^2.3.0, readable-stream@^2.3.5: 1582 | version "2.3.6" 1583 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" 1584 | dependencies: 1585 | core-util-is "~1.0.0" 1586 | inherits "~2.0.3" 1587 | isarray "~1.0.0" 1588 | process-nextick-args "~2.0.0" 1589 | safe-buffer "~5.1.1" 1590 | string_decoder "~1.1.1" 1591 | util-deprecate "~1.0.1" 1592 | 1593 | readable-stream@~1.1.8, readable-stream@~1.1.9: 1594 | version "1.1.14" 1595 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" 1596 | dependencies: 1597 | core-util-is "~1.0.0" 1598 | inherits "~2.0.1" 1599 | isarray "0.0.1" 1600 | string_decoder "~0.10.x" 1601 | 1602 | regenerate@^1.2.1: 1603 | version "1.4.0" 1604 | resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" 1605 | 1606 | regenerator-runtime@^0.11.0: 1607 | version "0.11.1" 1608 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" 1609 | 1610 | regenerator-transform@^0.10.0: 1611 | version "0.10.1" 1612 | resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" 1613 | dependencies: 1614 | babel-runtime "^6.18.0" 1615 | babel-types "^6.19.0" 1616 | private "^0.1.6" 1617 | 1618 | regexpu-core@^2.0.0: 1619 | version "2.0.0" 1620 | resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" 1621 | dependencies: 1622 | regenerate "^1.2.1" 1623 | regjsgen "^0.2.0" 1624 | regjsparser "^0.1.4" 1625 | 1626 | regjsgen@^0.2.0: 1627 | version "0.2.0" 1628 | resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" 1629 | 1630 | regjsparser@^0.1.4: 1631 | version "0.1.5" 1632 | resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" 1633 | dependencies: 1634 | jsesc "~0.5.0" 1635 | 1636 | remove-trailing-separator@^1.0.1: 1637 | version "1.1.0" 1638 | resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" 1639 | 1640 | repeating@^2.0.0: 1641 | version "2.0.1" 1642 | resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" 1643 | dependencies: 1644 | is-finite "^1.0.0" 1645 | 1646 | request@2.87.0: 1647 | version "2.87.0" 1648 | resolved "https://registry.yarnpkg.com/request/-/request-2.87.0.tgz#32f00235cd08d482b4d0d68db93a829c0ed5756e" 1649 | dependencies: 1650 | aws-sign2 "~0.7.0" 1651 | aws4 "^1.6.0" 1652 | caseless "~0.12.0" 1653 | combined-stream "~1.0.5" 1654 | extend "~3.0.1" 1655 | forever-agent "~0.6.1" 1656 | form-data "~2.3.1" 1657 | har-validator "~5.0.3" 1658 | http-signature "~1.2.0" 1659 | is-typedarray "~1.0.0" 1660 | isstream "~0.1.2" 1661 | json-stringify-safe "~5.0.1" 1662 | mime-types "~2.1.17" 1663 | oauth-sign "~0.8.2" 1664 | performance-now "^2.1.0" 1665 | qs "~6.5.1" 1666 | safe-buffer "^5.1.1" 1667 | tough-cookie "~2.3.3" 1668 | tunnel-agent "^0.6.0" 1669 | uuid "^3.1.0" 1670 | 1671 | request@~2.83.0: 1672 | version "2.83.0" 1673 | resolved "https://registry.yarnpkg.com/request/-/request-2.83.0.tgz#ca0b65da02ed62935887808e6f510381034e3356" 1674 | dependencies: 1675 | aws-sign2 "~0.7.0" 1676 | aws4 "^1.6.0" 1677 | caseless "~0.12.0" 1678 | combined-stream "~1.0.5" 1679 | extend "~3.0.1" 1680 | forever-agent "~0.6.1" 1681 | form-data "~2.3.1" 1682 | har-validator "~5.0.3" 1683 | hawk "~6.0.2" 1684 | http-signature "~1.2.0" 1685 | is-typedarray "~1.0.0" 1686 | isstream "~0.1.2" 1687 | json-stringify-safe "~5.0.1" 1688 | mime-types "~2.1.17" 1689 | oauth-sign "~0.8.2" 1690 | performance-now "^2.1.0" 1691 | qs "~6.5.1" 1692 | safe-buffer "^5.1.1" 1693 | stringstream "~0.0.5" 1694 | tough-cookie "~2.3.3" 1695 | tunnel-agent "^0.6.0" 1696 | uuid "^3.1.0" 1697 | 1698 | resolve-url@^0.2.1: 1699 | version "0.2.1" 1700 | resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" 1701 | 1702 | restore-cursor@^2.0.0: 1703 | version "2.0.0" 1704 | resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" 1705 | dependencies: 1706 | onetime "^2.0.0" 1707 | signal-exit "^3.0.2" 1708 | 1709 | rgb2hex@~0.1.0: 1710 | version "0.1.1" 1711 | resolved "https://registry.yarnpkg.com/rgb2hex/-/rgb2hex-0.1.1.tgz#81abc922b60e9087a42c3e1ce20bf62d2359e400" 1712 | 1713 | rimraf@^2.2.8, rimraf@^2.6.2: 1714 | version "2.6.2" 1715 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" 1716 | dependencies: 1717 | glob "^7.0.5" 1718 | 1719 | run-async@^2.2.0: 1720 | version "2.3.0" 1721 | resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" 1722 | dependencies: 1723 | is-promise "^2.1.0" 1724 | 1725 | rx-lite-aggregates@^4.0.8: 1726 | version "4.0.8" 1727 | resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" 1728 | dependencies: 1729 | rx-lite "*" 1730 | 1731 | rx-lite@*, rx-lite@^4.0.8: 1732 | version "4.0.8" 1733 | resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" 1734 | 1735 | safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: 1736 | version "5.1.2" 1737 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 1738 | 1739 | "safer-buffer@>= 2.1.2 < 3": 1740 | version "2.1.2" 1741 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 1742 | 1743 | selenium-standalone@^6.13.0: 1744 | version "6.15.0" 1745 | resolved "https://registry.yarnpkg.com/selenium-standalone/-/selenium-standalone-6.15.0.tgz#c8dc77bd45154afbda7509ec53dc599809f63ee4" 1746 | dependencies: 1747 | async "^2.1.4" 1748 | commander "^2.9.0" 1749 | cross-spawn "^6.0.0" 1750 | debug "^3.0.0" 1751 | lodash "^4.17.4" 1752 | minimist "^1.2.0" 1753 | mkdirp "^0.5.1" 1754 | progress "2.0.0" 1755 | request "2.87.0" 1756 | tar-stream "1.6.1" 1757 | urijs "^1.18.4" 1758 | which "^1.2.12" 1759 | yauzl "^2.5.0" 1760 | 1761 | semver@^5.5.0: 1762 | version "5.5.0" 1763 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" 1764 | 1765 | send@0.1.4: 1766 | version "0.1.4" 1767 | resolved "https://registry.yarnpkg.com/send/-/send-0.1.4.tgz#be70d8d1be01de61821af13780b50345a4f71abd" 1768 | dependencies: 1769 | debug "*" 1770 | fresh "0.2.0" 1771 | mime "~1.2.9" 1772 | range-parser "0.0.4" 1773 | 1774 | shebang-command@^1.2.0: 1775 | version "1.2.0" 1776 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" 1777 | dependencies: 1778 | shebang-regex "^1.0.0" 1779 | 1780 | shebang-regex@^1.0.0: 1781 | version "1.0.0" 1782 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" 1783 | 1784 | signal-exit@^3.0.2: 1785 | version "3.0.2" 1786 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" 1787 | 1788 | simple-autoreload-server@^0.2.7: 1789 | version "0.2.7" 1790 | resolved "https://registry.yarnpkg.com/simple-autoreload-server/-/simple-autoreload-server-0.2.7.tgz#9e456a1a6e5e0dfad7cc45b9ed3c7aaf12914264" 1791 | dependencies: 1792 | colors "0.6.2" 1793 | connect "2.13.1" 1794 | faye-websocket "0.9.2" 1795 | minimatch "3.0.2" 1796 | opener "1.4.1" 1797 | 1798 | slash@^1.0.0: 1799 | version "1.0.0" 1800 | resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" 1801 | 1802 | sntp@2.x.x: 1803 | version "2.1.0" 1804 | resolved "https://registry.yarnpkg.com/sntp/-/sntp-2.1.0.tgz#2c6cec14fedc2222739caf9b5c3d85d1cc5a2cc8" 1805 | dependencies: 1806 | hoek "4.x.x" 1807 | 1808 | source-map-resolve@^0.5.1: 1809 | version "0.5.2" 1810 | resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" 1811 | dependencies: 1812 | atob "^2.1.1" 1813 | decode-uri-component "^0.2.0" 1814 | resolve-url "^0.2.1" 1815 | source-map-url "^0.4.0" 1816 | urix "^0.1.0" 1817 | 1818 | source-map-support@^0.4.15: 1819 | version "0.4.18" 1820 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" 1821 | dependencies: 1822 | source-map "^0.5.6" 1823 | 1824 | source-map-url@^0.4.0: 1825 | version "0.4.0" 1826 | resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" 1827 | 1828 | source-map@^0.1.38: 1829 | version "0.1.43" 1830 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346" 1831 | dependencies: 1832 | amdefine ">=0.0.4" 1833 | 1834 | source-map@^0.5.6, source-map@^0.5.7: 1835 | version "0.5.7" 1836 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" 1837 | 1838 | sshpk@^1.7.0: 1839 | version "1.14.1" 1840 | resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.14.1.tgz#130f5975eddad963f1d56f92b9ac6c51fa9f83eb" 1841 | dependencies: 1842 | asn1 "~0.2.3" 1843 | assert-plus "^1.0.0" 1844 | dashdash "^1.12.0" 1845 | getpass "^0.1.1" 1846 | optionalDependencies: 1847 | bcrypt-pbkdf "^1.0.0" 1848 | ecc-jsbn "~0.1.1" 1849 | jsbn "~0.1.0" 1850 | tweetnacl "~0.14.0" 1851 | 1852 | stream-counter@~0.2.0: 1853 | version "0.2.0" 1854 | resolved "https://registry.yarnpkg.com/stream-counter/-/stream-counter-0.2.0.tgz#ded266556319c8b0e222812b9cf3b26fa7d947de" 1855 | dependencies: 1856 | readable-stream "~1.1.8" 1857 | 1858 | string-width@^2.1.0: 1859 | version "2.1.1" 1860 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" 1861 | dependencies: 1862 | is-fullwidth-code-point "^2.0.0" 1863 | strip-ansi "^4.0.0" 1864 | 1865 | string_decoder@~0.10.x: 1866 | version "0.10.31" 1867 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" 1868 | 1869 | string_decoder@~1.1.1: 1870 | version "1.1.1" 1871 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" 1872 | dependencies: 1873 | safe-buffer "~5.1.0" 1874 | 1875 | stringstream@~0.0.5: 1876 | version "0.0.6" 1877 | resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.6.tgz#7880225b0d4ad10e30927d167a1d6f2fd3b33a72" 1878 | 1879 | strip-ansi@^3.0.0: 1880 | version "3.0.1" 1881 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 1882 | dependencies: 1883 | ansi-regex "^2.0.0" 1884 | 1885 | strip-ansi@^4.0.0: 1886 | version "4.0.0" 1887 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" 1888 | dependencies: 1889 | ansi-regex "^3.0.0" 1890 | 1891 | supports-color@^2.0.0: 1892 | version "2.0.0" 1893 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" 1894 | 1895 | supports-color@^5.3.0: 1896 | version "5.4.0" 1897 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54" 1898 | dependencies: 1899 | has-flag "^3.0.0" 1900 | 1901 | supports-color@~5.0.0: 1902 | version "5.0.1" 1903 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.0.1.tgz#1c5331f22250c84202805b2f17adf16699f3a39a" 1904 | dependencies: 1905 | has-flag "^2.0.0" 1906 | 1907 | tar-stream@1.6.1, tar-stream@^1.5.0: 1908 | version "1.6.1" 1909 | resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.6.1.tgz#f84ef1696269d6223ca48f6e1eeede3f7e81f395" 1910 | dependencies: 1911 | bl "^1.0.0" 1912 | buffer-alloc "^1.1.0" 1913 | end-of-stream "^1.0.0" 1914 | fs-constants "^1.0.0" 1915 | readable-stream "^2.3.0" 1916 | to-buffer "^1.1.0" 1917 | xtend "^4.0.0" 1918 | 1919 | through@^2.3.6: 1920 | version "2.3.8" 1921 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" 1922 | 1923 | tmp@^0.0.33: 1924 | version "0.0.33" 1925 | resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" 1926 | dependencies: 1927 | os-tmpdir "~1.0.2" 1928 | 1929 | to-buffer@^1.1.0: 1930 | version "1.1.1" 1931 | resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80" 1932 | 1933 | to-fast-properties@^1.0.3: 1934 | version "1.0.3" 1935 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" 1936 | 1937 | tough-cookie@~2.3.3: 1938 | version "2.3.4" 1939 | resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655" 1940 | dependencies: 1941 | punycode "^1.4.1" 1942 | 1943 | trim-right@^1.0.1: 1944 | version "1.0.1" 1945 | resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" 1946 | 1947 | tunnel-agent@^0.6.0: 1948 | version "0.6.0" 1949 | resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" 1950 | dependencies: 1951 | safe-buffer "^5.0.1" 1952 | 1953 | tweetnacl@^0.14.3, tweetnacl@~0.14.0: 1954 | version "0.14.5" 1955 | resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" 1956 | 1957 | uid2@0.0.3: 1958 | version "0.0.3" 1959 | resolved "https://registry.yarnpkg.com/uid2/-/uid2-0.0.3.tgz#483126e11774df2f71b8b639dcd799c376162b82" 1960 | 1961 | universalify@^0.1.0: 1962 | version "0.1.1" 1963 | resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.1.tgz#fa71badd4437af4c148841e3b3b165f9e9e590b7" 1964 | 1965 | urijs@^1.18.4: 1966 | version "1.19.1" 1967 | resolved "https://registry.yarnpkg.com/urijs/-/urijs-1.19.1.tgz#5b0ff530c0cbde8386f6342235ba5ca6e995d25a" 1968 | 1969 | urix@^0.1.0: 1970 | version "0.1.0" 1971 | resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" 1972 | 1973 | url@~0.11.0: 1974 | version "0.11.0" 1975 | resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" 1976 | dependencies: 1977 | punycode "1.3.2" 1978 | querystring "0.2.0" 1979 | 1980 | util-deprecate@~1.0.1: 1981 | version "1.0.2" 1982 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 1983 | 1984 | uuid@^2.0.2: 1985 | version "2.0.3" 1986 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" 1987 | 1988 | uuid@^3.0.0, uuid@^3.1.0: 1989 | version "3.2.1" 1990 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14" 1991 | 1992 | verror@1.10.0: 1993 | version "1.10.0" 1994 | resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" 1995 | dependencies: 1996 | assert-plus "^1.0.0" 1997 | core-util-is "1.0.2" 1998 | extsprintf "^1.2.0" 1999 | 2000 | wdio-allure-reporter@^0.6.2: 2001 | version "0.6.2" 2002 | resolved "https://registry.yarnpkg.com/wdio-allure-reporter/-/wdio-allure-reporter-0.6.2.tgz#a5a8e1e0c6db3653d3708118a4745482b75abbea" 2003 | dependencies: 2004 | allure-js-commons "^1.3.1" 2005 | babel-runtime "^6.26.0" 2006 | 2007 | wdio-dot-reporter@^0.0.9, wdio-dot-reporter@~0.0.8: 2008 | version "0.0.9" 2009 | resolved "https://registry.yarnpkg.com/wdio-dot-reporter/-/wdio-dot-reporter-0.0.9.tgz#929b2adafd49d6b0534fda068e87319b47e38fe5" 2010 | 2011 | wdio-jasmine-framework@^0.3.4: 2012 | version "0.3.4" 2013 | resolved "https://registry.yarnpkg.com/wdio-jasmine-framework/-/wdio-jasmine-framework-0.3.4.tgz#99fa06fc679e089c829a08088039d9574b6fdf45" 2014 | dependencies: 2015 | babel-runtime "6.26.0" 2016 | jasmine "^3.0.0" 2017 | wdio-sync "0.7.1" 2018 | 2019 | wdio-json-reporter@^0.3.1: 2020 | version "0.3.1" 2021 | resolved "https://registry.yarnpkg.com/wdio-json-reporter/-/wdio-json-reporter-0.3.1.tgz#7d5e01027a22c51a5faae5ae769ab9d2111f5f88" 2022 | dependencies: 2023 | babel-runtime "^5.8.25" 2024 | mkdirp "^0.5.1" 2025 | uuid "^2.0.2" 2026 | 2027 | wdio-junit-reporter@^0.4.3: 2028 | version "0.4.3" 2029 | resolved "https://registry.yarnpkg.com/wdio-junit-reporter/-/wdio-junit-reporter-0.4.3.tgz#f8fa4c5a438c437bdb447640fcd54fccb2716a08" 2030 | dependencies: 2031 | junit-report-builder "~1.3.0" 2032 | lodash.get "^4.4.2" 2033 | mkdirp "~0.5.1" 2034 | 2035 | wdio-selenium-standalone-service@^0.0.10: 2036 | version "0.0.10" 2037 | resolved "https://registry.yarnpkg.com/wdio-selenium-standalone-service/-/wdio-selenium-standalone-service-0.0.10.tgz#cdb64d9a53fa3ea0ed3cf0ebf4fd3bdca93dcf05" 2038 | dependencies: 2039 | fs-extra "^0.30.0" 2040 | selenium-standalone "^6.13.0" 2041 | 2042 | wdio-sync@0.7.1: 2043 | version "0.7.1" 2044 | resolved "https://registry.yarnpkg.com/wdio-sync/-/wdio-sync-0.7.1.tgz#00847fbbce16826c3225618f4259d28b60a42483" 2045 | dependencies: 2046 | babel-runtime "6.26.0" 2047 | fibers "~2.0.0" 2048 | object.assign "^4.0.3" 2049 | 2050 | webdriverio@^4.12.0: 2051 | version "4.12.0" 2052 | resolved "https://registry.yarnpkg.com/webdriverio/-/webdriverio-4.12.0.tgz#e340def272183c8168a4dd0b382322f9d7bee10d" 2053 | dependencies: 2054 | archiver "~2.1.0" 2055 | babel-runtime "^6.26.0" 2056 | css-parse "~2.0.0" 2057 | css-value "~0.0.1" 2058 | deepmerge "~2.0.1" 2059 | ejs "~2.5.6" 2060 | gaze "~1.1.2" 2061 | glob "~7.1.1" 2062 | inquirer "~3.3.0" 2063 | json-stringify-safe "~5.0.1" 2064 | mkdirp "~0.5.1" 2065 | npm-install-package "~2.1.0" 2066 | optimist "~0.6.1" 2067 | q "~1.5.0" 2068 | request "~2.83.0" 2069 | rgb2hex "~0.1.0" 2070 | safe-buffer "~5.1.1" 2071 | supports-color "~5.0.0" 2072 | url "~0.11.0" 2073 | wdio-dot-reporter "~0.0.8" 2074 | wgxpath "~1.0.0" 2075 | 2076 | websocket-driver@>=0.5.1: 2077 | version "0.7.0" 2078 | resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.0.tgz#0caf9d2d755d93aee049d4bdd0d3fe2cca2a24eb" 2079 | dependencies: 2080 | http-parser-js ">=0.4.0" 2081 | websocket-extensions ">=0.1.1" 2082 | 2083 | websocket-extensions@>=0.1.1: 2084 | version "0.1.3" 2085 | resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29" 2086 | 2087 | wgxpath@~1.0.0: 2088 | version "1.0.0" 2089 | resolved "https://registry.yarnpkg.com/wgxpath/-/wgxpath-1.0.0.tgz#eef8a4b9d558cc495ad3a9a2b751597ecd9af690" 2090 | 2091 | which@^1.2.12, which@^1.2.9: 2092 | version "1.3.1" 2093 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" 2094 | dependencies: 2095 | isexe "^2.0.0" 2096 | 2097 | wordwrap@~0.0.2: 2098 | version "0.0.3" 2099 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" 2100 | 2101 | wrappy@1: 2102 | version "1.0.2" 2103 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 2104 | 2105 | xmlbuilder@^10.0.0: 2106 | version "10.0.0" 2107 | resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-10.0.0.tgz#c64e52f8ae097fe5fd46d1c38adaade071ee1b55" 2108 | 2109 | xmlcreate@^1.0.1: 2110 | version "1.0.2" 2111 | resolved "https://registry.yarnpkg.com/xmlcreate/-/xmlcreate-1.0.2.tgz#fa6bf762a60a413fb3dd8f4b03c5b269238d308f" 2112 | 2113 | xtend@^4.0.0: 2114 | version "4.0.1" 2115 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" 2116 | 2117 | yauzl@^2.5.0: 2118 | version "2.9.1" 2119 | resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.9.1.tgz#a81981ea70a57946133883f029c5821a89359a7f" 2120 | dependencies: 2121 | buffer-crc32 "~0.2.3" 2122 | fd-slicer "~1.0.1" 2123 | 2124 | zip-stream@^1.2.0: 2125 | version "1.2.0" 2126 | resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-1.2.0.tgz#a8bc45f4c1b49699c6b90198baacaacdbcd4ba04" 2127 | dependencies: 2128 | archiver-utils "^1.3.0" 2129 | compress-commons "^1.2.0" 2130 | lodash "^4.8.0" 2131 | readable-stream "^2.0.0" 2132 | --------------------------------------------------------------------------------