diff --git a/README.md b/README.md index 7823697..96fdd6f 100644 --- a/README.md +++ b/README.md @@ -55,16 +55,17 @@ module.exports = function(config) { ### Global options -- `username` your BS username, you can also use `BROWSERSTACK_USERNAME` env variable. -- `accessKey` your BS access key, you can also use `BROWSERSTACK_ACCESS_KEY` env variable. +- `username` your BS username, you can also use `BROWSER_STACK_USERNAME` env variable. +- `accessKey` your BS access key, you can also use `BROWSER_STACK_ACCESS_KEY` env variable. - `startTunnel` do you wanna establish the BrowserStack tunnel ? (defaults to `true`) -- `tunnelIdentifier` in case you want to start the BrowserStack tunnel outside `karma` by setting `startTunnel` to `false`, set the identifier passed to the `-localIdentifier` option here (optional) +- `tunnelIdentifier`/`localIdentifier` in case you want to start the BrowserStack tunnel outside `karma` by setting `startTunnel` to `false`, set the identifier passed to the `-localIdentifier` option here (optional) - `retryLimit` how many times do you want to retry to capture the browser ? (defaults to `3`) - `captureTimeout` the browser capture timeout (defaults to `120`) - `timeout` the BS worker timeout (defaults to `300` - `build` the BS worker build name (optional) - `name` the BS worker name (optional) - `project` the BS worker project name (optional) +- `binaryBasePath` the BS binary base bath, you can also use `BROWSER_STACK_BINARY_BASE_PATH` env variable. This will override the default and set the base path to the BS local binary (optional) - `proxyHost` the host of your proxy for communicating with BrowserStack REST API and BrowserStackLocal (optional) - `proxyPort` the port of your proxy (optional) - `proxyUser` the username used for authentication with your proxy (optional) @@ -85,7 +86,7 @@ module.exports = function(config) { - `name` the BS worker name (optional, defaults to global) - `project` the BS worker project name (optional, defaults to global) -> **Note:** you can also pass through any additional options supported by browserstack. (EG. `url`, `resolution`, etc.) +> **Note:** you can also pass through any additional options supported by browserstack. (EG. `timezone`, `resolution`, etc.) See https://www.browserstack.com/automate/capabilities for a full list of supported options. ### BrowserStack reporter diff --git a/browserstack-reporter.js b/browserstack-reporter.js index a6ca6d4..4ff016c 100644 --- a/browserstack-reporter.js +++ b/browserstack-reporter.js @@ -1,53 +1,207 @@ var Browserstack = require('browserstack') +var common = require('./common') -var BrowserStackReporter = function (logger, /* BrowserStack:sessionMapping */ sessionMapping) { - var log = logger.create('reporter.browserlabs') +var BrowserStackReporter = function (baseReporterDecorator, logger, /* BrowserStack:sessionMapping */ sessionMapping, config) { + try { + var log = logger.create('reporter.browserstack') + var suiteResults = [] + var buildId + var allMessages = [] + baseReporterDecorator(this) + var callWhenFinished = function () {} - var pendingUpdates = 0 - var callWhenFinished = function () {} - - var exitIfAllFinished = function () { - if (pendingUpdates === 0) { + var exitIfAllFinished = function () { callWhenFinished() } - } - // We're only interested in the final results per browser - this.onBrowserComplete = function (browser) { - var result = browser.lastResult + this.onRunStart = function (browsers) { + // implement this function if you want to perform custom actions post the overall test batch run has started + + } + + this.onBrowserStart = function (browser) { + // implement this function if you want to perform custom actions post browser start + log.debug('Browser: ' + browser.name + ' has been started') + } + + this.onBrowserError = function (browser, error) { + var browserId = browser.launchId || browser.id + if (browserId in sessionMapping) { + var existingObj = suiteResults.find(o => o.browserId === browserId) + if (typeof existingObj === 'undefined') { + suiteResults.push({ + browserId: browserId, + records: [{ + apiStatus: 'Error', + suite: 'N/A [Karma <-> Browser error]', + log: error + }] + }) + } else { + existingObj.records.push({ + apiStatus: 'Error', + suite: 'N/A [Karma <-> Browser error]', + log: error + }) + } + } + } - if (result.disconnected) { - log.error('✖ Test Disconnected') + this.specSuccess = function (browser, result) { + try { + var browserId = browser.launchId || browser.id + if (browserId in sessionMapping) { + var existingObj = suiteResults.find(o => o.browserId === browserId) + if (typeof existingObj === 'undefined') { + suiteResults.push({ + browserId: browserId, + records: [{ + apiStatus: 'Passed', + suite: result.suite, + specs: [result.description] + }] + }) + } else { + existingObj['records'][0]['specs'].push(result.description) + } + } + } catch (e) { + log.debug('Browserstack reporter module specSuccess function encountered issues.\nError message: ' + e.message + '\nStacktrace: ' + e.stack) + } } - if (result.error) { - log.error('✖ Test Errored') + this.specFailure = this.specSkipped = function (browser, result) { + try { + var browserId = browser.launchId || browser.id + log.debug('Spec Failure:' + JSON.stringify(result)) + if (browserId in sessionMapping) { + var existingObj = suiteResults.find(o => o.browserId === browserId) + if (typeof existingObj === 'undefined') { + suiteResults.push({ + browserId: browserId, + records: [{ + apiStatus: 'Failed', + suite: result.suite, + log: result.log + }] + }) + } else { + existingObj.records.push({ + apiStatus: 'Failed', + suite: result.suite, + log: result.log + }) + } + } + } catch (e) { + log.debug('Browserstack reporter module specFailure function encountered issues.\nError message: ' + e.message + '\nStacktrace: ' + e.stack) + } } - var browserId = browser.launchId || browser.id - if (browserId in sessionMapping) { - pendingUpdates++ - var browserstackClient = Browserstack.createAutomateClient(sessionMapping.credentials) - var apiStatus = !(result.failed || result.error || result.disconnected) ? 'completed' : 'error' + this.onSpecComplete = function (browser, result) { + if (result.skipped) { + this.specSkipped(browser, result) + } else if (result.success) { + this.specSuccess(browser, result) + } else { + this.specFailure(browser, result) + } + log.debug('Suite: ' + result.suite + ', Spec completed: ' + result.description) + } + + this.onRunComplete = function (browsersCollection, results) { + // implement this function if you want to perform custom actions post test run completion + try { + log.debug('Test run completed\n' + JSON.stringify(results)) + var browserId = browsersCollection.browsers[0].id - browserstackClient.updateSession(sessionMapping[browserId], { - status: apiStatus - }, function (error) { - if (error) { - log.error('✖ Could not update BrowserStack status') - log.debug(error) + if (typeof buildId === 'undefined') { + var browserstackClient = Browserstack.createAutomateClient(sessionMapping.credentials) + common.getSessionDetails(log, browserstackClient, sessionMapping, browserId, config, function (sessionObj) { + var browserUrl = sessionObj['automation_session']['browser_url'] + if (typeof browserUrl !== 'undefined') { + buildId = browserUrl.split('/').slice(-3)[0] + var originalBuildName = config.browserStack.build + if (typeof buildId !== 'undefined' || buildId !== undefined) { + common.updateBuildName(log, buildId, originalBuildName, results, config) + } + } + }) } - pendingUpdates-- - exitIfAllFinished() + allMessages = [] + } catch (e) { + log.debug('onRunComplete: Browserstack reporter module encountered issues.\nError message: ' + e.message + '\nStacktrace: ' + e.stack) + } + } + + var findSpecObjectRecords = function (browserId, specStatusSearchCondition) { + var suiteObj = suiteResults.find(o => o.browserId === browserId) + var specRecord + if (typeof suiteObj !== 'undefined') { + if (specStatusSearchCondition !== '') { + specRecord = suiteObj.records.find(o => o.apiStatus === specStatusSearchCondition) + } + } + return [suiteObj, specRecord] + } + + var removeFromSuiteResults = function (objectListToRemove) { + suiteResults = suiteResults.filter(function (item) { + return item !== objectListToRemove }) } - } - // Wait until all updates have been pushed to Browserstack - this.onExit = function (done) { - callWhenFinished = done - exitIfAllFinished() + this.adapters = [function (msg) { + allMessages.push(msg) + }] + + this.onBrowserComplete = function (browser) { + try { + var browserId = browser.launchId || browser.id + var failedObjRecord = findSpecObjectRecords(browserId, 'Failed') + var errorObjRecord = findSpecObjectRecords(browserId, 'Error') + var browserstackClient = Browserstack.createAutomateClient(sessionMapping.credentials) + if (browserId in sessionMapping) { + if (typeof failedObjRecord[1] !== 'undefined') { + var reason = 'Suite: ' + failedObjRecord[1]['suite'] + ', Error log: ' + failedObjRecord[1]['log'] + common.updateStatusSession(log, browserstackClient, sessionMapping, browserId, failedObjRecord[1].apiStatus, reason, failedObjRecord[1]['suite']) + removeFromSuiteResults(failedObjRecord[0]) + } else if (typeof errorObjRecord[1] === 'undefined') { + var passedObjRecord = findSpecObjectRecords(browserId, 'Passed') + if (typeof passedObjRecord[1] !== 'undefined') { + reason = 'Suite: ' + passedObjRecord[1]['suite'] + ', Specs run: ' + JSON.stringify(passedObjRecord[1]['specs']) + common.updateStatusSession(log, browserstackClient, sessionMapping, browserId, passedObjRecord[1].apiStatus, reason, passedObjRecord[1]['suite']) + removeFromSuiteResults(passedObjRecord[0]) + allMessages = [] + } + } + } + var result = browser.lastResult + log.debug('Browser Last Result: ' + JSON.stringify(result, null, 2)) + if (result.disconnected) { + log.error('✖ Test Disconnected') + } else if (result.error) { + log.error('✖ Test Errored') + } + errorObjRecord = findSpecObjectRecords(browserId, 'Error') + if (typeof errorObjRecord[1] !== 'undefined') { + reason = 'Suite: ' + errorObjRecord[1]['suite'] + ', Error log: ' + errorObjRecord[1]['log'] + common.updateStatusSession(log, browserstackClient, sessionMapping, browserId, errorObjRecord[1].apiStatus, reason, errorObjRecord[1]['suite']) + removeFromSuiteResults(errorObjRecord[0]) + } + } catch (e) { + log.debug('Browserstack reporter module encountered issues.\nError message: ' + e.message + '\nStacktrace: ' + e.stack) + } + } + + // Wait until all updates have been pushed to Browserstack + this.onExit = function (done) { + callWhenFinished = done + exitIfAllFinished() + } + } catch (e) { + log.debug('Browserstack reporter full module encountered issues.\nError message: ' + e.message + '\nStacktrace: ' + e.stack) } } - +// PUBLISH DI MODULE module.exports = BrowserStackReporter diff --git a/common.js b/common.js new file mode 100644 index 0000000..6d388f2 --- /dev/null +++ b/common.js @@ -0,0 +1,93 @@ +var RestClient = require('node-rest-client').Client + +module.exports = { + updateStatusSession: function (log, browserstackClient, sessionMapping, browserId, status, reason, sessionName) { + browserstackClient.updateSession(sessionMapping[browserId], { + status: status, + reason: reason, + name: sessionName.length !== 0 ? sessionName.toString() : 'Karma Test Suite' + }, function (error) { + if (error) { + log.error('✖ Could not update BrowserStack status' + error) + } + }) + }, + getSessionDetails: function (log, browserstackClient, sessionMapping, browserId, config, callback) { + try { + var apiClientEndpoint = config.browserStack.apiClientEndpoint + var creds = sessionMapping.credentials.username + ':' + sessionMapping.credentials.password + + let buff = Buffer.from(creds) + let base64data = buff.toString('base64') + var encodedCreds = base64data + var client = new RestClient() + var args = { + data: {}, + headers: { + 'Authorization': 'Basic ' + encodedCreds + } + } + client.get(apiClientEndpoint + '/automate/sessions/' + sessionMapping[browserId] + '.json', args, function (data, response) { + callback(data) + }) + } catch (e) { + log.debug('Browserstack reporter module encountered issues.\nError message: ' + e.message + '\nStacktrace: ' + e.stack) + } + }, + updateBuildName: function (log, buildId, originalBuildName, results, config) { + try { + log.debug('Attempting build name update') + if (typeof buildId === 'undefined') { + log.debug('BrowserStack build id is not defined. Not attempting update for build id!') + return + } + + var apiClientEndpoint = config.browserStack.apiClientEndpoint + var client = new RestClient() + var newBuildName + var t = new Date().toISOString() + + if (originalBuildName === null || typeof originalBuildName === 'undefined') { + originalBuildName = 'Karma build' + } + + if (typeof results !== 'undefined') { + if (results.exitCode === 1) { + if (results.disconnected === true) { + newBuildName = originalBuildName + ' completed at ' + t + ' with 1 or more session disconnects: [Specs passed: ' + results.success + ' | Specs failed: ' + results.failed + ']' + } else if (results.error === true) { + newBuildName = originalBuildName + ' completed at ' + t + ' with 1 or more session errors: [Specs passed: ' + results.success + ' | Specs failed: ' + results.failed + ']' + } else if (results.failed !== 0) { + newBuildName = originalBuildName + ' completed at ' + t + ' with spec failures: [Specs passed: ' + results.success + ' | Specs failed: ' + results.failed + ']' + } + } else if (results.failed === 0) { + newBuildName = originalBuildName + ' completed successfully at ' + t + ': [Specs passed: ' + results.success + ']' + } + } else { + newBuildName = originalBuildName + ' started at ' + t + ' | In Progress | ' + } + + var creds = config.browserStack.username + ':' + config.browserStack.accessKey + + let buff = Buffer.from(creds) + let base64data = buff.toString('base64') + var encodedCreds = base64data + var args = { + data: { + name: newBuildName + }, + headers: { + 'Authorization': 'Basic ' + encodedCreds, + 'Content-Type': 'application/json' + } + } + var completeEndpoint = apiClientEndpoint + '/automate/builds/' + buildId + '.json' + log.debug('Complete endpoint for build name update: ' + completeEndpoint) + client.put(completeEndpoint, args, function (data, response) { + }) + log.debug('Exiting updateBuildName function') + } catch (e) { + log.debug('Browserstack reporter module update build name function encountered issues.\nError message: ' + e.message + '\nStacktrace: ' + e.stack) + } + } +} diff --git a/gruntfile.js b/gruntfile.js index 168e545..3529700 100644 --- a/gruntfile.js +++ b/gruntfile.js @@ -41,7 +41,7 @@ module.exports = function (grunt) { }, eslint: { target: [ - 'index.js', + '*.js', 'worker.js', 'worker-manager.js', 'gruntfile.js' diff --git a/index.js b/index.js index 4e61211..8fbed66 100644 --- a/index.js +++ b/index.js @@ -3,6 +3,9 @@ const api = require('browserstack') const browserstack = require('browserstack-local') const workerManager = require('./worker-manager') const BrowserStackReporter = require('./browserstack-reporter') +var common = require('./common') +const buildStartTime = new Date().toISOString() +var client, browserId var createBrowserStackTunnel = function (logger, config, emitter) { const log = logger.create('launcher.browserstack') @@ -13,7 +16,11 @@ var createBrowserStackTunnel = function (logger, config, emitter) { const bsAccesskey = process.env.BROWSERSTACK_ACCESS_KEY || process.env.BROWSER_STACK_ACCESS_KEY || bsConfig.accessKey const bsLocal = new browserstack.Local() - const bsLocalArgs = { key: bsAccesskey } + const bsLocalArgs = { + key: bsAccesskey, + localIdentifier: bsConfig.localIdentifier || bsConfig.tunnelIdentifier || undefined, + forceLocal: bsConfig.forceLocal || undefined + } const deferred = Q.defer() log.debug('Starting BrowserStackLocal') @@ -33,9 +40,8 @@ var createBrowserStackTunnel = function (logger, config, emitter) { return deferred.promise } -var createBrowserStackClient = function (/* config.browserStack */config, /* BrowserStack:sessionMapping */ sessionMapping) { +var createBrowserStackClient = function (/* config.browserStack */config, /* BrowserStack:sessionMapping */sessionMapping) { var env = process.env - config = config || {} var options = { @@ -60,8 +66,7 @@ var createBrowserStackClient = function (/* config.browserStack */config, /* Bro proxy: options.proxy } - // TODO(vojta): handle no username/pwd - var client = api.createClient(options) + client = api.createClient(options) var pollingTimeout = config.pollingTimeout || 1000 @@ -87,13 +92,17 @@ var formatError = function (error) { var BrowserStackBrowser = function ( id, emitter, args, logger, - /* config */ config, - /* browserStackTunnel */ tunnel, - /* browserStackClient */ client, + /* config */ + config, + /* browserStackTunnel */ + tunnel, + /* browserStackClient */ + client, baseLauncherDecorator, captureTimeoutLauncherDecorator, retryLauncherDecorator, - /* BrowserStack:sessionMapping */ sessionMapping + /* BrowserStack:sessionMapping */ + sessionMapping ) { var self = this @@ -116,43 +125,47 @@ var BrowserStackBrowser = function ( var captureTimeoutId var retryLimit = bsConfig.retryLimit || 3 var previousUrl = null - this.start = function (url) { url = url || previousUrl previousUrl = url - var globalSettings = Object.assign( - { - timeout: 300, - name: 'Karma test', - build: process.env.BUILD_NUMBER || - process.env.BUILD_TAG || - process.env.CI_BUILD_NUMBER || - process.env.CI_BUILD_TAG || - process.env.TRAVIS_BUILD_NUMBER || - process.env.CIRCLE_BUILD_NUM || - process.env.DRONE_BUILD_NUMBER || null, - // TODO(vojta): remove "version" (only for B-C) - browser_version: args.version || 'latest', - video: true - }, - bsConfig + var globalSettings = Object.assign({ + timeout: 300, + name: 'Karma test', + build: process.env.BUILD_NUMBER || + process.env.BUILD_TAG || + process.env.CI_BUILD_NUMBER || + process.env.CI_BUILD_TAG || + process.env.TRAVIS_BUILD_NUMBER || + process.env.CIRCLE_BUILD_NUM || + process.env.DRONE_BUILD_NUMBER || null, + browser_version: args.version || 'latest', + video: true + }, + bsConfig ) - // TODO(vojta): handle non os/browser/version - var settings = Object.assign( - { - url: url + '?id=' + id, - 'browserstack.tunnel': true - }, - globalSettings, - args + if (args.real_mobile === true && args.os.toLowerCase() === 'ios' && url.toLowerCase().includes('localhost')) { + url = url.replace('localhost', 'bs-local.com') + previousUrl = url + } + + if (globalSettings.build === null || typeof globalSettings.build === 'undefined') { + globalSettings.build = 'Karma build' + } + + globalSettings.build += ' ' + buildStartTime + var settings = Object.assign({ + url: url + '?id=' + id, + 'browserstack.tunnel': true + }, + globalSettings, + args ) tunnel.then(function () { client.createWorker(settings, function (error, worker) { var sessionUrlShowed = false - if (error) { log.error('Can not start %s\n %s', browserName, formatError(error)) return emitter.emit('browser_process_failure', self) @@ -168,6 +181,7 @@ var BrowserStackBrowser = function ( if (!sessionUrlShowed) { log.info('%s session at %s', browserName, worker.browser_url) sessionMapping[self.id] = worker.browser_url.split('/').slice(-1)[0] + browserId = self.id sessionUrlShowed = true } @@ -215,7 +229,6 @@ var BrowserStackBrowser = function ( clearTimeout(captureTimeoutId) captureTimeoutId = null } - workerId = null captured = false alreadyKilling.resolve() @@ -257,6 +270,12 @@ var BrowserStackBrowser = function ( if (captured) { return } + try { + var browserstackClient = api.createAutomateClient(sessionMapping.credentials) + common.updateStatusSession(log, browserstackClient, sessionMapping, browserId, 'Failed', browserName + ' has not captured in ' + captureTimeout + ' ms, killing.', 'Session Error: ' + browserName + ' capture timed out.') + } catch (e) { + log.debug('Browserstack update session status on timeout encountered issues. Continuing with further test execution...\nError message: ' + e.message + '\nStacktrace: ' + e.stack) + } log.warn('%s has not captured in %d ms, killing.', browserName, captureTimeout) self.kill(function () { diff --git a/package-lock.json b/package-lock.json index 0e4417c..bed048e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "karma-browserstack-launcher", - "version": "1.4.0", + "version": "1.5.2", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -199,15 +199,38 @@ } }, "browserstack-local": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/browserstack-local/-/browserstack-local-1.3.7.tgz", - "integrity": "sha512-ilZlmiy7XYJxsztYan7XueHVr3Ix9EVh/mCiYN1G53wRPEW/hg1KMsseM6UExzVbexEqFEfwjkBLeFlSqxh+bQ==", - "requires": { - "https-proxy-agent": "^2.2.1", - "is-running": "^2.0.0", - "ps-tree": "=1.1.1", - "sinon": "^1.17.6", + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/browserstack-local/-/browserstack-local-1.4.5.tgz", + "integrity": "sha512-0/VdSv2YVXmcnwBb64XThMvjM1HnZJnPdv7CUgQbC5y/N9Wsr0Fu+j1oknE9fC/VPx9CpoSC6CJ0kza42skMSA==", + "requires": { + "https-proxy-agent": "^4.0.0", + "is-running": "^2.1.0", + "ps-tree": "=1.2.0", "temp-fs": "^0.9.9" + }, + "dependencies": { + "agent-base": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz", + "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==" + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + }, + "https-proxy-agent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", + "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==", + "requires": { + "agent-base": "5", + "debug": "4" + } + } } }, "buffer-from": { @@ -1424,12 +1447,12 @@ "write": "^0.2.1" } }, - "formatio": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/formatio/-/formatio-1.1.1.tgz", - "integrity": "sha1-XtPM1jZVEJc4NGXZlhmRAOhhYek=", + "follow-redirects": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.11.0.tgz", + "integrity": "sha512-KZm0V+ll8PfBrKwMzdo5D13b1bur9Iq9Zd/RMmAoQQcl2PxxFml8cxXPaaPYVbV0RjNjq1CU7zIzAOqtUPudmA==", "requires": { - "samsam": "~1.1" + "debug": "^3.0.0" } }, "from": { @@ -1824,9 +1847,9 @@ "dev": true }, "grunt": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.0.3.tgz", - "integrity": "sha512-/JzmZNPfKorlCrrmxWqQO4JVodO+DVd5XX4DkocL/1WlLlKVLE9+SdEIempOAxDhWPysLle6afvn/hg7Ck2k9g==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.1.0.tgz", + "integrity": "sha512-+NGod0grmviZ7Nzdi9am7vuRS/h76PcWDsV635mEXF0PEQMUV6Kb+OjTdsVxbi0PZmfQOjCMKb3w8CVZcqsn1g==", "dev": true, "requires": { "coffeescript": "~1.10.0", @@ -1840,7 +1863,7 @@ "grunt-legacy-log": "~2.0.0", "grunt-legacy-util": "~1.1.1", "iconv-lite": "~0.4.13", - "js-yaml": "~3.5.2", + "js-yaml": "~3.13.1", "minimatch": "~3.0.2", "mkdirp": "~0.5.1", "nopt": "~3.0.6", @@ -1848,12 +1871,6 @@ "rimraf": "~2.6.2" }, "dependencies": { - "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", - "dev": true - }, "glob": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz", @@ -1881,15 +1898,21 @@ } }, "js-yaml": { - "version": "3.5.5", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.5.5.tgz", - "integrity": "sha1-A3fDgBfKvHMisNH7zSWkkWQfL74=", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", "dev": true, "requires": { - "argparse": "^1.0.2", - "esprima": "^2.6.0" + "argparse": "^1.0.7", + "esprima": "^4.0.0" } }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha512-6uCP4Qc0sWsgMLy1EOqqS/3rjDHOEnsStVr/4vtAIK2Y5i2kA7lFFejYrpIyiN9w0pYf4ckeCYT9f1r1P9KX5g==", + "dev": true + }, "resolve": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", @@ -2389,11 +2412,6 @@ "lodash._reinterpolate": "~3.0.0" } }, - "lolex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-1.3.2.tgz", - "integrity": "sha1-fD2mL/yzDw9agKJWbKJORdigHzE=" - }, "loud-rejection": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", @@ -2610,6 +2628,31 @@ "integrity": "sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA==", "dev": true }, + "node-rest-client": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/node-rest-client/-/node-rest-client-3.1.0.tgz", + "integrity": "sha1-4L623aeyDMC2enhHzxLF/EGcN8M=", + "requires": { + "debug": "~2.2.0", + "follow-redirects": ">=1.2.0", + "xml2js": ">=0.2.4" + }, + "dependencies": { + "debug": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "requires": { + "ms": "0.7.1" + } + }, + "ms": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=" + } + } + }, "nopt": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", @@ -2871,9 +2914,9 @@ "dev": true }, "ps-tree": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.1.1.tgz", - "integrity": "sha512-kef7fYYSKVqQffmzTMsVcUD1ObNJMp8sNSmHGlGKsZQyL/ht9MZKk86u0Rd1NhpTOAuhqwKCLLpktwkqz+MF8A==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.2.0.tgz", + "integrity": "sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==", "requires": { "event-stream": "=3.3.4" } @@ -3053,10 +3096,10 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, - "samsam": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/samsam/-/samsam-1.1.2.tgz", - "integrity": "sha1-vsEf3IOp/aBjQBIQ5AF2wwJNFWc=" + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" }, "semver": { "version": "5.6.0", @@ -3091,17 +3134,6 @@ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", "dev": true }, - "sinon": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-1.17.7.tgz", - "integrity": "sha1-RUKk9JugxFwF6y6d2dID4rjv4L8=", - "requires": { - "formatio": "1.1.1", - "lolex": "1.3.2", - "samsam": "1.1.2", - "util": ">=0.10.3 <1" - } - }, "slice-ansi": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", @@ -3360,14 +3392,6 @@ "util-deprecate": "^1.0.2" } }, - "util": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", - "requires": { - "inherits": "2.0.3" - } - }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -3413,6 +3437,27 @@ "mkdirp": "^0.5.1" } }, + "xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "dependencies": { + "xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" + } + } + }, + "xmlbuilder": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-10.1.1.tgz", + "integrity": "sha512-OyzrcFLL/nb6fMGHbiRDuPup9ljBycsdCypwuyg5AAHvyWzGfChJpCXMG88AGTIMFhGZ9RccFN1e6lhg3hkwKg==" + }, "xtend": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", diff --git a/package.json b/package.json index 57235ec..d22563b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "karma-browserstack-launcher", - "version": "1.5.1", + "version": "1.5.2", "description": "A Karma plugin. Launch any browser on BrowserStack!", "main": "index.js", "repository": { @@ -16,8 +16,10 @@ "author": "Vojta Jina ", "dependencies": { "browserstack": "~1.5.1", - "browserstack-local": "^1.3.7", - "q": "~1.5.0" + "browserstack-local": "^1.4.5", + "node-rest-client": "^3.1.0", + "q": "~1.5.0", + "xmlbuilder": "^10.0.0" }, "peerDependencies": { "karma": ">=0.9" @@ -30,7 +32,7 @@ "eslint-plugin-node": "^5.1.0", "eslint-plugin-promise": "^3.5.0", "eslint-plugin-standard": "^3.0.1", - "grunt": "~1.0.1", + "grunt": "^1.0.4", "grunt-auto-release": "0.0.7", "grunt-bump": "~0.8.0", "grunt-conventional-changelog": "^6.1.0", diff --git a/yarn.lock b/yarn.lock index f1ef123..06659e0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -27,12 +27,17 @@ acorn@^5.0.1: version "5.0.3" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.0.3.tgz#c460df08491463f028ccb82eab3730bf01087b3d" -agent-base@2: - version "2.1.1" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-2.1.1.tgz#d6de10d5af6132d5bd692427d46fc538539094c7" +agent-base@5: + version "5.1.1" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-5.1.1.tgz#e8fb3f242959db44d63be665db7a8e739537a32c" + integrity sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g== + +agent-base@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" + integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg== dependencies: - extend "~3.0.0" - semver "~5.0.1" + es6-promisify "^5.0.0" ajv-keywords@^1.0.0: version "1.5.1" @@ -73,7 +78,14 @@ ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" -argparse@^1.0.2, argparse@^1.0.7: +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +argparse@^1.0.7: version "1.0.9" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" dependencies: @@ -121,13 +133,6 @@ balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" -"binary@>= 0.3.0 < 1": - version "0.3.0" - resolved "https://registry.yarnpkg.com/binary/-/binary-0.3.0.tgz#9f60553bc5ce8c3386f3b553cff47462adecaa79" - dependencies: - buffers "~0.1.1" - chainsaw "~0.1.0" - brace-expansion@^1.1.7: version "1.1.8" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292" @@ -135,22 +140,22 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" -browserstack@1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/browserstack/-/browserstack-1.5.0.tgz#b565425ad62ed72c1082a1eb979d5313c7d4754f" +browserstack-local@^1.4.5: + version "1.4.5" + resolved "https://registry.yarnpkg.com/browserstack-local/-/browserstack-local-1.4.5.tgz#115153ce1d08d58b7575ecf4381d54d10b42d2cf" + integrity sha512-0/VdSv2YVXmcnwBb64XThMvjM1HnZJnPdv7CUgQbC5y/N9Wsr0Fu+j1oknE9fC/VPx9CpoSC6CJ0kza42skMSA== dependencies: - https-proxy-agent "1.0.0" + https-proxy-agent "^4.0.0" + is-running "^2.1.0" + ps-tree "=1.2.0" + temp-fs "^0.9.9" -browserstacktunnel-wrapper@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/browserstacktunnel-wrapper/-/browserstacktunnel-wrapper-2.0.1.tgz#ffe1910d6e39fe86618183e826690041af53edae" +browserstack@~1.5.1: + version "1.5.3" + resolved "https://registry.yarnpkg.com/browserstack/-/browserstack-1.5.3.tgz#93ab48799a12ef99dbd074dd595410ddb196a7ac" + integrity sha512-AO+mECXsW4QcqC9bxwM29O7qWa7bJT94uBFzeb5brylIQwawuEziwq20dPYbins95GlWzOawgyDNdjYAo32EKg== dependencies: - https-proxy-agent "^1.0.0" - unzip "~0.1.9" - -buffers@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/buffers/-/buffers-0.1.1.tgz#b24579c3bed4d6d396aeee6d9a8ae7f5482ab7bb" + https-proxy-agent "^2.2.1" builtin-modules@^1.0.0, builtin-modules@^1.1.1: version "1.1.1" @@ -188,13 +193,7 @@ center-align@^0.1.1: align-text "^0.1.3" lazy-cache "^1.0.3" -chainsaw@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/chainsaw/-/chainsaw-0.1.0.tgz#5eab50b28afe58074d0d58291388828b5e5fbc98" - dependencies: - traverse ">=0.3.0 <0.4" - -chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3, chalk@~1.1.1: +chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" dependencies: @@ -204,6 +203,15 @@ chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3, chalk@~1.1.1: strip-ansi "^3.0.0" supports-color "^2.0.0" +chalk@~2.4.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + circular-json@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.1.tgz#be8b36aefccde8b3ca7aa2d6afc07a37242c0d2d" @@ -230,9 +238,22 @@ co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" -coffee-script@~1.10.0: +coffeescript@~1.10.0: version "1.10.0" - resolved "https://registry.yarnpkg.com/coffee-script/-/coffee-script-1.10.0.tgz#12938bcf9be1948fa006f92e0c4c9e81705108c0" + resolved "https://registry.yarnpkg.com/coffeescript/-/coffeescript-1.10.0.tgz#e7aa8301917ef621b35d8a39f348dcdd1db7e33e" + integrity sha1-56qDAZF+9iGzXYo580jc3R234z4= + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= colors@~1.1.2: version "1.1.2" @@ -424,12 +445,33 @@ dateformat@^1.0.11, dateformat@^1.0.12, dateformat@~1.0.12: get-stdin "^4.0.1" meow "^3.3.0" -debug@2, debug@^2.2.0, debug@^2.6.8: +debug@4: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + dependencies: + ms "^2.1.1" + +debug@^2.2.0, debug@^2.6.8: version "2.6.8" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc" dependencies: ms "2.0.0" +debug@^3.0.0, debug@^3.1.0: + version "3.2.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== + dependencies: + ms "^2.1.1" + +debug@~2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" + integrity sha1-+HBX6ZWxofauaklgZkE3vFbwOdo= + dependencies: + ms "0.7.1" + decamelize@^1.0.0, decamelize@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" @@ -470,12 +512,29 @@ dot-prop@^3.0.0: dependencies: is-obj "^1.0.0" +duplexer@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" + integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E= + error-ex@^1.2.0: version "1.3.1" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" dependencies: is-arrayish "^0.2.1" +es6-promise@^4.0.3: + version "4.2.8" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" + integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== + +es6-promisify@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" + integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= + dependencies: + es6-promise "^4.0.3" + escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" @@ -583,14 +642,15 @@ espree@^3.4.3: acorn "^5.0.1" acorn-jsx "^3.0.0" -esprima@^2.6.0: - version "2.7.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" - esprima@^3.1.1: version "3.1.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + esquery@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.0.tgz#cfba8b57d7fba93f17298a8a006a04cda13d80fa" @@ -612,6 +672,19 @@ esutils@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" +event-stream@=3.3.4: + version "3.3.4" + resolved "https://registry.yarnpkg.com/event-stream/-/event-stream-3.3.4.tgz#4ab4c9a0f5a54db9338b4c34d86bfce8f4b35571" + integrity sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE= + dependencies: + duplexer "~0.1.1" + from "~0" + map-stream "~0.1.0" + pause-stream "0.0.11" + split "0.3" + stream-combiner "~0.0.4" + through "~2.3.1" + eventemitter2@~0.4.13: version "0.4.14" resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-0.4.14.tgz#8f61b75cde012b2e9eb284d4545583b5643b61ab" @@ -620,10 +693,6 @@ exit@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" -extend@3, extend@~3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" - external-editor@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.0.4.tgz#1ed9199da9cbfe2ef2f7a31b2fde8b0d12368972" @@ -677,19 +746,22 @@ flat-cache@^1.2.1: graceful-fs "^4.1.2" write "^0.2.1" +follow-redirects@>=1.2.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.11.0.tgz#afa14f08ba12a52963140fe43212658897bc0ecb" + integrity sha512-KZm0V+ll8PfBrKwMzdo5D13b1bur9Iq9Zd/RMmAoQQcl2PxxFml8cxXPaaPYVbV0RjNjq1CU7zIzAOqtUPudmA== + dependencies: + debug "^3.0.0" + +from@~0: + version "0.1.7" + resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe" + integrity sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4= + fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" -"fstream@>= 0.1.30 < 1": - version "0.1.31" - resolved "https://registry.yarnpkg.com/fstream/-/fstream-0.1.31.tgz#7337f058fbbbbefa8c9f561a28cab0849202c988" - dependencies: - graceful-fs "~3.0.2" - inherits "~2.0.0" - mkdirp "0.5" - rimraf "2" - function-bind@^1.0.2: version "1.1.0" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771" @@ -773,6 +845,18 @@ glob@^7.0.3, glob@^7.1.2: once "^1.3.0" path-is-absolute "^1.0.0" +glob@^7.0.5, glob@^7.1.3: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + glob@~5.0.0: version "5.0.15" resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" @@ -813,12 +897,6 @@ graceful-fs@^4.1.2: version "4.1.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" -graceful-fs@~3.0.2: - version "3.0.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-3.0.11.tgz#7613c778a1afea62f25c630a086d7f3acbbdd818" - dependencies: - natives "^1.1.0" - grunt-auto-release@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/grunt-auto-release/-/grunt-auto-release-0.0.7.tgz#4a1be3254b10a17b341e402f51b85191e86cf4d1" @@ -867,44 +945,47 @@ grunt-known-options@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/grunt-known-options/-/grunt-known-options-1.1.0.tgz#a4274eeb32fa765da5a7a3b1712617ce3b144149" -grunt-legacy-log-utils@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/grunt-legacy-log-utils/-/grunt-legacy-log-utils-1.0.0.tgz#a7b8e2d0fb35b5a50f4af986fc112749ebc96f3d" +grunt-legacy-log-utils@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/grunt-legacy-log-utils/-/grunt-legacy-log-utils-2.0.1.tgz#d2f442c7c0150065d9004b08fd7410d37519194e" + integrity sha512-o7uHyO/J+i2tXG8r2bZNlVk20vlIFJ9IEYyHMCQGfWYru8Jv3wTqKZzvV30YW9rWEjq0eP3cflQ1qWojIe9VFA== dependencies: - chalk "~1.1.1" - lodash "~4.3.0" + chalk "~2.4.1" + lodash "~4.17.10" -grunt-legacy-log@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/grunt-legacy-log/-/grunt-legacy-log-1.0.0.tgz#fb86f1809847bc07dc47843f9ecd6cacb62df2d5" +grunt-legacy-log@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/grunt-legacy-log/-/grunt-legacy-log-2.0.0.tgz#c8cd2c6c81a4465b9bbf2d874d963fef7a59ffb9" + integrity sha512-1m3+5QvDYfR1ltr8hjiaiNjddxGdQWcH0rw1iKKiQnF0+xtgTazirSTGu68RchPyh1OBng1bBUjLmX8q9NpoCw== dependencies: colors "~1.1.2" - grunt-legacy-log-utils "~1.0.0" + grunt-legacy-log-utils "~2.0.0" hooker "~0.2.3" - lodash "~3.10.1" - underscore.string "~3.2.3" + lodash "~4.17.5" -grunt-legacy-util@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/grunt-legacy-util/-/grunt-legacy-util-1.0.0.tgz#386aa78dc6ed50986c2b18957265b1b48abb9b86" +grunt-legacy-util@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/grunt-legacy-util/-/grunt-legacy-util-1.1.1.tgz#e10624e7c86034e5b870c8a8616743f0a0845e42" + integrity sha512-9zyA29w/fBe6BIfjGENndwoe1Uy31BIXxTH3s8mga0Z5Bz2Sp4UCjkeyv2tI449ymkx3x26B+46FV4fXEddl5A== dependencies: async "~1.5.2" exit "~0.1.1" getobject "~0.1.0" hooker "~0.2.3" - lodash "~4.3.0" - underscore.string "~3.2.3" - which "~1.2.1" + lodash "~4.17.10" + underscore.string "~3.3.4" + which "~1.3.0" grunt-npm@~0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/grunt-npm/-/grunt-npm-0.0.2.tgz#b3cb34b9bdf2ead69f15016d92412a7aa931ce14" -grunt@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/grunt/-/grunt-1.0.1.tgz#e8778764e944b18f32bb0f10b9078475c9dfb56b" +grunt@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/grunt/-/grunt-1.1.0.tgz#97dc6e6add901459774a988e4f454a12e24c9d3d" + integrity sha512-+NGod0grmviZ7Nzdi9am7vuRS/h76PcWDsV635mEXF0PEQMUV6Kb+OjTdsVxbi0PZmfQOjCMKb3w8CVZcqsn1g== dependencies: - coffee-script "~1.10.0" + coffeescript "~1.10.0" dateformat "~1.0.12" eventemitter2 "~0.4.13" exit "~0.1.1" @@ -912,14 +993,15 @@ grunt@~1.0.1: glob "~7.0.0" grunt-cli "~1.2.0" grunt-known-options "~1.1.0" - grunt-legacy-log "~1.0.0" - grunt-legacy-util "~1.0.0" + grunt-legacy-log "~2.0.0" + grunt-legacy-util "~1.1.1" iconv-lite "~0.4.13" - js-yaml "~3.5.2" - minimatch "~3.0.0" + js-yaml "~3.13.1" + minimatch "~3.0.2" + mkdirp "~0.5.1" nopt "~3.0.6" path-is-absolute "~1.0.0" - rimraf "~2.2.8" + rimraf "~2.6.2" handlebars@^4.0.2: version "4.0.10" @@ -937,6 +1019,11 @@ has-ansi@^2.0.0: dependencies: ansi-regex "^2.0.0" +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + has@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" @@ -951,13 +1038,21 @@ hosted-git-info@^2.1.4: version "2.5.0" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c" -https-proxy-agent@1.0.0, https-proxy-agent@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz#35f7da6c48ce4ddbfa264891ac593ee5ff8671e6" +https-proxy-agent@^2.2.1: + version "2.2.4" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b" + integrity sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg== dependencies: - agent-base "2" - debug "2" - extend "3" + agent-base "^4.3.0" + debug "^3.1.0" + +https-proxy-agent@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz#702b71fb5520a132a66de1f67541d9e62154d82b" + integrity sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg== + dependencies: + agent-base "5" + debug "4" iconv-lite@^0.4.17, iconv-lite@~0.4.13: version "0.4.18" @@ -984,7 +1079,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: +inherits@2, inherits@^2.0.3, inherits@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" @@ -1082,6 +1177,11 @@ is-resolvable@^1.0.0: dependencies: tryit "^1.0.1" +is-running@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-running/-/is-running-2.1.0.tgz#30a73ff5cc3854e4fc25490809e9f5abf8de09e0" + integrity sha1-MKc/9cw4VOT8JUkICen1q/jeCeA= + is-subset@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-subset/-/is-subset-0.1.1.tgz#8a59117d932de1de00f245fcdd39ce43f1e939a6" @@ -1096,10 +1196,6 @@ is-utf8@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" @@ -1119,12 +1215,13 @@ js-yaml@^3.8.4: argparse "^1.0.7" esprima "^3.1.1" -js-yaml@~3.5.2: - version "3.5.5" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.5.5.tgz#0377c38017cabc7322b0d1fbcd25a491641f2fbe" +js-yaml@~3.13.1: + version "3.13.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" + integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== dependencies: - argparse "^1.0.2" - esprima "^2.6.0" + argparse "^1.0.7" + esprima "^4.0.0" jschardet@^1.4.2: version "1.4.2" @@ -1233,13 +1330,10 @@ lodash@^4.0.0, lodash@^4.17.4, lodash@^4.2.1, lodash@^4.3.0: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" -lodash@~3.10.1: - version "3.10.1" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" - -lodash@~4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.3.0.tgz#efd9c4a6ec53f3b05412429915c3e4824e4d25a4" +lodash@~4.17.10, lodash@~4.17.5: + version "4.17.15" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" + integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== longest@^1.0.1: version "1.0.1" @@ -1256,12 +1350,10 @@ map-obj@^1.0.0, map-obj@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" -"match-stream@>= 0.0.2 < 1": - version "0.0.2" - resolved "https://registry.yarnpkg.com/match-stream/-/match-stream-0.0.2.tgz#99eb050093b34dffade421b9ac0b410a9cfa17cf" - dependencies: - buffers "~0.1.1" - readable-stream "~1.0.0" +map-stream@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194" + integrity sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ= meow@^3.3.0: version "3.7.0" @@ -1286,7 +1378,7 @@ mimic-fn@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18" -"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4, minimatch@~3.0.0: +"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4, minimatch@~3.0.2: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" dependencies: @@ -1300,7 +1392,7 @@ minimist@^1.1.3: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" -mkdirp@0.5, mkdirp@^0.5.1: +mkdirp@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" dependencies: @@ -1310,10 +1402,20 @@ modify-values@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.0.tgz#e2b6cdeb9ce19f99317a53722f3dbf5df5eaaab2" +ms@0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" + integrity sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg= + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" +ms@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + multimatch@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-2.1.0.tgz#9c7906a22fb4c02919e2f5f75161b4cdbd4b2a2b" @@ -1327,14 +1429,19 @@ mute-stream@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" -natives@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/natives/-/natives-1.1.0.tgz#e9ff841418a6b2ec7a495e939984f78f163e6e31" - natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" +node-rest-client@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/node-rest-client/-/node-rest-client-3.1.0.tgz#e0beb6dda7b20cc0b67a7847cf12c5fc419c37c3" + integrity sha1-4L623aeyDMC2enhHzxLF/EGcN8M= + dependencies: + debug "~2.2.0" + follow-redirects ">=1.2.0" + xml2js ">=0.2.4" + nopt@~3.0.6: version "3.0.6" resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" @@ -1392,10 +1499,6 @@ os-tmpdir@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" -"over@>= 0.0.5 < 1": - version "0.0.5" - resolved "https://registry.yarnpkg.com/over/-/over-0.0.5.tgz#f29852e70fd7e25f360e013a8ec44c82aedb5708" - p-limit@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.1.0.tgz#b07ff2d9a5d88bec806035895a2bab66a27988bc" @@ -1452,6 +1555,13 @@ path-type@^2.0.0: dependencies: pify "^2.0.0" +pause-stream@0.0.11: + version "0.0.11" + resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445" + integrity sha1-/lo0sMvOErWqaitAPuLnO2AvFEU= + dependencies: + through "~2.3" + pify@^2.0.0, pify@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -1500,14 +1610,12 @@ progress@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f" -"pullstream@>= 0.4.1 < 1": - version "0.4.1" - resolved "https://registry.yarnpkg.com/pullstream/-/pullstream-0.4.1.tgz#d6fb3bf5aed697e831150eb1002c25a3f8ae1314" +ps-tree@=1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/ps-tree/-/ps-tree-1.2.0.tgz#5e7425b89508736cdd4f2224d028f7bb3f722ebd" + integrity sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA== dependencies: - over ">= 0.0.5 < 1" - readable-stream "~1.0.31" - setimmediate ">= 1.0.2 < 2" - slice-stream ">= 1.0.0 < 2" + event-stream "=3.3.4" q@^1.4.1, q@~1.5.0: version "1.5.0" @@ -1555,15 +1663,6 @@ readable-stream@^2.1.5, readable-stream@^2.2.2: string_decoder "~1.0.0" util-deprecate "~1.0.1" -readable-stream@~1.0.0, readable-stream@~1.0.31: - version "1.0.34" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - redent@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" @@ -1625,10 +1724,24 @@ right-align@^0.1.1: dependencies: align-text "^0.1.1" -rimraf@2, rimraf@^2.2.8, rimraf@~2.2.8: +rimraf@^2.2.8: version "2.2.8" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.2.8.tgz#e439be2aaee327321952730f99a8929e4fc50582" +rimraf@~2.5.2: + version "2.5.4" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04" + integrity sha1-loAAk8vxoMhr2VtGJUZ1NcKd+gQ= + dependencies: + glob "^7.0.5" + +rimraf@~2.6.2: + version "2.6.3" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== + dependencies: + glob "^7.1.3" + run-async@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" @@ -1649,6 +1762,11 @@ safe-buffer@~5.1.0: version "5.1.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" +sax@>=0.6.0: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + semver-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/semver-regex/-/semver-regex-1.0.0.tgz#92a4969065f9c70c694753d55248fc68f8f652c9" @@ -1657,14 +1775,6 @@ semver-regex@^1.0.0: version "5.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" -semver@~5.0.1: - version "5.0.3" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.0.3.tgz#77466de589cd5d3c95f138aa78bc569a3cb5d27a" - -"setimmediate@>= 1.0.1 < 2", "setimmediate@>= 1.0.2 < 2": - version "1.0.5" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" @@ -1673,12 +1783,6 @@ slice-ansi@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" -"slice-stream@>= 1.0.0 < 2": - version "1.0.0" - resolved "https://registry.yarnpkg.com/slice-stream/-/slice-stream-1.0.0.tgz#5b33bd66f013b1a7f86460b03d463dec39ad3ea0" - dependencies: - readable-stream "~1.0.31" - source-map@^0.4.4: version "0.4.4" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" @@ -1709,16 +1813,35 @@ split2@^2.0.0: dependencies: through2 "^2.0.2" +split@0.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/split/-/split-0.3.3.tgz#cd0eea5e63a211dfff7eb0f091c4133e2d0dd28f" + integrity sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8= + dependencies: + through "2" + split@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/split/-/split-1.0.0.tgz#c4395ce683abcd254bc28fe1dabb6e5c27dcffae" dependencies: through "2" +sprintf-js@^1.0.3: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673" + integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug== + sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" +stream-combiner@~0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.0.4.tgz#4d5e433c185261dde623ca3f44c586bcf5c4ad14" + integrity sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ= + dependencies: + duplexer "~0.1.1" + string-width@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.0.tgz#030664561fc146c9423ec7d978fe2457437fe6d0" @@ -1726,10 +1849,6 @@ string-width@^2.0.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" -string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - string_decoder@~1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" @@ -1772,6 +1891,13 @@ supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + table@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/table/-/table-4.0.1.tgz#a8116c133fac2c61f4a420ab6cdf5c4d61f0e435" @@ -1783,6 +1909,13 @@ table@^4.0.1: slice-ansi "0.0.4" string-width "^2.0.0" +temp-fs@^0.9.9: + version "0.9.9" + resolved "https://registry.yarnpkg.com/temp-fs/-/temp-fs-0.9.9.tgz#8071730437870720e9431532fe2814364f8803d7" + integrity sha1-gHFzBDeHByDpQxUy/igUNk+IA9c= + dependencies: + rimraf "~2.5.2" + text-extensions@^1.0.0: version "1.5.0" resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.5.0.tgz#d1cb2d14b5d0bc45bfdca8a08a473f68c7eb0cbc" @@ -1798,9 +1931,10 @@ through2@^2.0.0, through2@^2.0.2: readable-stream "^2.1.5" xtend "~4.0.1" -through@2, "through@>=2.2.7 <3", through@^2.3.6: +through@2, "through@>=2.2.7 <3", through@^2.3.6, through@~2.3, through@~2.3.1: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= tmp@^0.0.31: version "0.0.31" @@ -1808,10 +1942,6 @@ tmp@^0.0.31: dependencies: os-tmpdir "~1.0.1" -"traverse@>=0.3.0 <0.4": - version "0.3.9" - resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.3.9.tgz#717b8f220cc0bb7b44e40514c22b2e8bbc70d8b9" - trim-newlines@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" @@ -1847,22 +1977,15 @@ uglify-to-browserify@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" -underscore.string@~3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-3.2.3.tgz#806992633665d5e5fcb4db1fb3a862eb68e9e6da" - -unzip@~0.1.9: - version "0.1.11" - resolved "https://registry.yarnpkg.com/unzip/-/unzip-0.1.11.tgz#89749c63b058d7d90d619f86b98aa1535d3b97f0" +underscore.string@~3.3.4: + version "3.3.5" + resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-3.3.5.tgz#fc2ad255b8bd309e239cbc5816fd23a9b7ea4023" + integrity sha512-g+dpmgn+XBneLmXXo+sGlW5xQEt4ErkS3mgeN2GFbremYeMBSJKr9Wf2KJplQVaiPY/f7FN6atosWYNm9ovrYg== dependencies: - binary ">= 0.3.0 < 1" - fstream ">= 0.1.30 < 1" - match-stream ">= 0.0.2 < 1" - pullstream ">= 0.4.1 < 1" - readable-stream "~1.0.31" - setimmediate ">= 1.0.1 < 2" + sprintf-js "^1.0.3" + util-deprecate "^1.0.2" -util-deprecate@~1.0.1: +util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -1873,9 +1996,10 @@ validate-npm-package-license@^3.0.1: spdx-correct "~1.0.0" spdx-expression-parse "~1.0.0" -which@~1.2.1: - version "1.2.14" - resolved "https://registry.yarnpkg.com/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5" +which@~1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== dependencies: isexe "^2.0.0" @@ -1905,6 +2029,24 @@ write@^0.2.1: dependencies: mkdirp "^0.5.1" +xml2js@>=0.2.4: + version "0.4.23" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66" + integrity sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug== + dependencies: + sax ">=0.6.0" + xmlbuilder "~11.0.0" + +xmlbuilder@^10.0.0: + version "10.1.1" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-10.1.1.tgz#8cae6688cc9b38d850b7c8d3c0a4161dcaf475b0" + integrity sha512-OyzrcFLL/nb6fMGHbiRDuPup9ljBycsdCypwuyg5AAHvyWzGfChJpCXMG88AGTIMFhGZ9RccFN1e6lhg3hkwKg== + +xmlbuilder@~11.0.0: + version "11.0.1" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" + integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== + xtend@^4.0.0, xtend@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"