From e7b0a9ca8f937cb351c8205b8541b9fe2342e1b8 Mon Sep 17 00:00:00 2001 From: Samuel Attard Date: Thu, 20 Feb 2020 15:19:06 -0800 Subject: [PATCH] feat: add API for receiving logs from service workers (#20624) * feat: add API for receiving logs from service workers * feat: add new serviceWorkerContext APIs * chore: add missing #include's * refactor: rename serviceWorkerContext to serviceWorkers * chore: clean up based on review * chore: remove native_mate * chore: add tests for the service worker module * Update spec-main/api-service-workers-spec.ts Co-Authored-By: Jeremy Apthorp * chore: fix linting * chore: handle renames Co-authored-by: Jeremy Apthorp --- docs/api/service-workers.md | 62 ++++ docs/api/session.md | 4 + docs/api/structures/service-worker-info.md | 5 + filenames.auto.gni | 2 + filenames.gni | 2 + lib/browser/api/session.js | 5 +- package.json | 3 +- .../electron_api_service_worker_context.cc | 154 ++++++++ .../api/electron_api_service_worker_context.h | 58 +++ shell/browser/api/electron_api_session.cc | 15 + shell/browser/api/electron_api_session.h | 2 + spec-main/api-service-workers-spec.ts | 99 ++++++ .../fixtures/api/service-workers/index.html | 10 + .../fixtures/api/service-workers/logs.html | 10 + .../fixtures/api/service-workers/sw-logs.js | 6 + spec-main/fixtures/api/service-workers/sw.js | 3 + spec/package.json | 1 + spec/yarn.lock | 332 +----------------- yarn.lock | 7 + 19 files changed, 456 insertions(+), 324 deletions(-) create mode 100644 docs/api/service-workers.md create mode 100644 docs/api/structures/service-worker-info.md create mode 100644 shell/browser/api/electron_api_service_worker_context.cc create mode 100644 shell/browser/api/electron_api_service_worker_context.h create mode 100644 spec-main/api-service-workers-spec.ts create mode 100644 spec-main/fixtures/api/service-workers/index.html create mode 100644 spec-main/fixtures/api/service-workers/logs.html create mode 100644 spec-main/fixtures/api/service-workers/sw-logs.js create mode 100644 spec-main/fixtures/api/service-workers/sw.js diff --git a/docs/api/service-workers.md b/docs/api/service-workers.md new file mode 100644 index 0000000000..d50529b337 --- /dev/null +++ b/docs/api/service-workers.md @@ -0,0 +1,62 @@ +## Class: ServiceWorkers + +> Query and receive events from a sessions active service workers. + +Process: [Main](../glossary.md#main-process) + +Instances of the `ServiceWorkers` class are accessed by using `serviceWorkers` property of +a `Session`. + +For example: + +```javascript +const { session } = require('electron') + +// Get all service workers. +console.log(session.defaultSession.serviceWorkers.getAllRunning()) + +// Handle logs and get service worker info +session.defaultSession.serviceWorkers.on('console-message', (event, messageDetails) => { + console.log( + 'Got service worker message', + messageDetails, + 'from', + session.defaultSession.serviceWorkers.getFromVersionID(messageDetails.versionId) + ) +}) +``` + +### Instance Events + +The following events are available on instances of `ServiceWorkers`: + +#### Event: 'console-message' + +Returns: + +* `event` Event +* `messageDetails` Object - Information about the console message + * `message` String - The actual console message + * `versionId` Number - The version ID of the service worker that sent the log message + * `source` String - The type of source for this message. Can be `javascript`, `xml`, `network`, `console-api`, `storage`, `app-cache`, `rendering`, `security`, `deprecation`, `worker`, `violation`, `intervention`, `recommendation` or `other`. + * `level` Number - The log level, from 0 to 3. In order it matches `verbose`, `info`, `warning` and `error`. + * `sourceUrl` String - The URL the message came from + * `lineNumber` Number - The line number of the source that triggered this console message + +Emitted when a service worker logs something to the console. + +### Instance Methods + +The following methods are available on instances of `ServiceWorkers`: + +#### `serviceWorkers.getAllRunning()` + +Returns `Record` - A [ServiceWorkerInfo](structures/service-worker-info.md) object where the keys are the service worker version ID and the values are the information about that service worker. + +#### `serviceWorkers.getFromVersionID(versionId)` + +* `versionId` Number + +Returns [`ServiceWorkerInfo`](structures/service-worker-info.md) - Information about this service worker + +If the service worker does not exist or is not running this method will throw an exception. diff --git a/docs/api/session.md b/docs/api/session.md index e9575335be..ed561e654d 100644 --- a/docs/api/session.md +++ b/docs/api/session.md @@ -585,6 +585,10 @@ code to the `setSpellCheckerLanaguages` API that isn't in this array will result A [`Cookies`](cookies.md) object for this session. +#### `ses.serviceWorkers` _Readonly_ + +A [`ServiceWorkers`](service-workers.md) object for this session. + #### `ses.webRequest` _Readonly_ A [`WebRequest`](web-request.md) object for this session. diff --git a/docs/api/structures/service-worker-info.md b/docs/api/structures/service-worker-info.md new file mode 100644 index 0000000000..578ef34774 --- /dev/null +++ b/docs/api/structures/service-worker-info.md @@ -0,0 +1,5 @@ +# ServiceWorkerInfo Object + +* `scriptUrl` String - The full URL to the script that this service worker runs +* `scope` String - The base URL that this service worker is active for. +* `renderProcessId` Number - The virtual ID of the process that this service worker is running in. This is not an OS level PID. This aligns with the ID set used for `webContents.getProcessId()`. diff --git a/filenames.auto.gni b/filenames.auto.gni index 129d34809f..66a1f5acf0 100644 --- a/filenames.auto.gni +++ b/filenames.auto.gni @@ -46,6 +46,7 @@ auto_filenames = { "docs/api/remote.md", "docs/api/sandbox-option.md", "docs/api/screen.md", + "docs/api/service-workers.md", "docs/api/session.md", "docs/api/shell.md", "docs/api/structures", @@ -111,6 +112,7 @@ auto_filenames = { "docs/api/structures/remove-password.md", "docs/api/structures/scrubber-item.md", "docs/api/structures/segmented-control-segment.md", + "docs/api/structures/service-worker-info.md", "docs/api/structures/shared-worker-info.md", "docs/api/structures/shortcut-details.md", "docs/api/structures/size.md", diff --git a/filenames.gni b/filenames.gni index 70c31d9642..06aa214953 100644 --- a/filenames.gni +++ b/filenames.gni @@ -88,6 +88,8 @@ filenames = { "shell/browser/api/electron_api_protocol.h", "shell/browser/api/electron_api_screen.cc", "shell/browser/api/electron_api_screen.h", + "shell/browser/api/electron_api_service_worker_context.cc", + "shell/browser/api/electron_api_service_worker_context.h", "shell/browser/api/electron_api_session.cc", "shell/browser/api/electron_api_session.h", "shell/browser/api/electron_api_system_preferences.cc", diff --git a/lib/browser/api/session.js b/lib/browser/api/session.js index 347b9a6028..b27e81f106 100644 --- a/lib/browser/api/session.js +++ b/lib/browser/api/session.js @@ -2,7 +2,7 @@ const { EventEmitter } = require('events') const { app, deprecate } = require('electron') -const { fromPartition, Session, Cookies, NetLog, Protocol } = process.electronBinding('session') +const { fromPartition, Session, Cookies, NetLog, Protocol, ServiceWorkerContext } = process.electronBinding('session') // Public API. Object.defineProperties(exports, { @@ -16,8 +16,9 @@ Object.defineProperties(exports, { } }) -Object.setPrototypeOf(Session.prototype, EventEmitter.prototype) Object.setPrototypeOf(Cookies.prototype, EventEmitter.prototype) +Object.setPrototypeOf(ServiceWorkerContext.prototype, EventEmitter.prototype) +Object.setPrototypeOf(Session.prototype, EventEmitter.prototype) Session.prototype._init = function () { app.emit('session-created', this) diff --git a/package.json b/package.json index 1cd90263ac..a811995280 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,7 @@ "@types/semver": "^6.0.1", "@types/send": "^0.14.5", "@types/split": "^1.0.0", + "@types/uuid": "^3.4.6", "@types/webpack": "^4.4.32", "@types/webpack-env": "^1.13.9", "@typescript-eslint/eslint-plugin": "^2.6.0", @@ -141,4 +142,4 @@ "@types/multiparty": "^0.0.32", "@types/temp": "^0.8.34" } -} \ No newline at end of file +} diff --git a/shell/browser/api/electron_api_service_worker_context.cc b/shell/browser/api/electron_api_service_worker_context.cc new file mode 100644 index 0000000000..5f9f157c5b --- /dev/null +++ b/shell/browser/api/electron_api_service_worker_context.cc @@ -0,0 +1,154 @@ +// Copyright (c) 2019 Slack Technologies, Inc. +// Use of this source code is governed by the MIT license that can be +// found in the LICENSE file. + +#include "shell/browser/api/electron_api_service_worker_context.h" + +#include +#include + +#include "chrome/browser/browser_process.h" +#include "content/public/browser/console_message.h" +#include "content/public/browser/storage_partition.h" +#include "gin/data_object_builder.h" +#include "gin/handle.h" +#include "shell/browser/electron_browser_context.h" +#include "shell/common/gin_converters/value_converter.h" +#include "shell/common/gin_helper/dictionary.h" +#include "shell/common/gin_helper/object_template_builder.h" +#include "shell/common/node_includes.h" + +namespace electron { + +namespace api { + +namespace { + +std::string MessageSourceToString( + const blink::mojom::ConsoleMessageSource source) { + if (source == blink::mojom::ConsoleMessageSource::kXml) + return "xml"; + if (source == blink::mojom::ConsoleMessageSource::kJavaScript) + return "javascript"; + if (source == blink::mojom::ConsoleMessageSource::kNetwork) + return "network"; + if (source == blink::mojom::ConsoleMessageSource::kConsoleApi) + return "console-api"; + if (source == blink::mojom::ConsoleMessageSource::kStorage) + return "storage"; + if (source == blink::mojom::ConsoleMessageSource::kAppCache) + return "app-cache"; + if (source == blink::mojom::ConsoleMessageSource::kRendering) + return "rendering"; + if (source == blink::mojom::ConsoleMessageSource::kSecurity) + return "security"; + if (source == blink::mojom::ConsoleMessageSource::kDeprecation) + return "deprecation"; + if (source == blink::mojom::ConsoleMessageSource::kWorker) + return "worker"; + if (source == blink::mojom::ConsoleMessageSource::kViolation) + return "violation"; + if (source == blink::mojom::ConsoleMessageSource::kIntervention) + return "intervention"; + if (source == blink::mojom::ConsoleMessageSource::kRecommendation) + return "recommendation"; + return "other"; +} + +v8::Local ServiceWorkerRunningInfoToDict( + v8::Isolate* isolate, + const content::ServiceWorkerRunningInfo& info) { + return gin::DataObjectBuilder(isolate) + .Set("scriptUrl", info.script_url.spec()) + .Set("scope", info.scope.spec()) + .Set("renderProcessId", info.render_process_id) + .Build(); +} + +} // namespace + +ServiceWorkerContext::ServiceWorkerContext( + v8::Isolate* isolate, + ElectronBrowserContext* browser_context) + : browser_context_(browser_context), weak_ptr_factory_(this) { + Init(isolate); + service_worker_context_ = + content::BrowserContext::GetDefaultStoragePartition(browser_context_) + ->GetServiceWorkerContext(); + service_worker_context_->AddObserver(this); +} + +ServiceWorkerContext::~ServiceWorkerContext() { + service_worker_context_->RemoveObserver(this); +} + +void ServiceWorkerContext::OnReportConsoleMessage( + int64_t version_id, + const content::ConsoleMessage& message) { + Emit("console-message", + gin::DataObjectBuilder(v8::Isolate::GetCurrent()) + .Set("versionId", version_id) + .Set("source", MessageSourceToString(message.source)) + .Set("level", static_cast(message.message_level)) + .Set("message", message.message) + .Set("lineNumber", message.line_number) + .Set("sourceUrl", message.source_url.spec()) + .Build()); +} + +void ServiceWorkerContext::OnDestruct(content::ServiceWorkerContext* context) { + if (context == service_worker_context_) { + delete this; + } +} + +v8::Local ServiceWorkerContext::GetAllRunningWorkerInfo( + v8::Isolate* isolate) { + gin::DataObjectBuilder builder(isolate); + const base::flat_map& info_map = + service_worker_context_->GetRunningServiceWorkerInfos(); + for (auto iter = info_map.begin(); iter != info_map.end(); ++iter) { + builder.Set( + std::to_string(iter->first), + ServiceWorkerRunningInfoToDict(isolate, std::move(iter->second))); + } + return builder.Build(); +} + +v8::Local ServiceWorkerContext::GetWorkerInfoFromID( + gin_helper::ErrorThrower thrower, + int64_t version_id) { + const base::flat_map& info_map = + service_worker_context_->GetRunningServiceWorkerInfos(); + auto iter = info_map.find(version_id); + if (iter == info_map.end()) { + thrower.ThrowError("Could not find service worker with that version_id"); + return v8::Local(); + } + return ServiceWorkerRunningInfoToDict(thrower.isolate(), + std::move(iter->second)); +} + +// static +gin::Handle ServiceWorkerContext::Create( + v8::Isolate* isolate, + ElectronBrowserContext* browser_context) { + return gin::CreateHandle(isolate, + new ServiceWorkerContext(isolate, browser_context)); +} + +// static +void ServiceWorkerContext::BuildPrototype( + v8::Isolate* isolate, + v8::Local prototype) { + prototype->SetClassName(gin::StringToV8(isolate, "ServiceWorkerContext")); + gin_helper::ObjectTemplateBuilder(isolate, prototype->PrototypeTemplate()) + .SetMethod("getAllRunning", + &ServiceWorkerContext::GetAllRunningWorkerInfo) + .SetMethod("getFromVersionID", + &ServiceWorkerContext::GetWorkerInfoFromID); +} + +} // namespace api + +} // namespace electron diff --git a/shell/browser/api/electron_api_service_worker_context.h b/shell/browser/api/electron_api_service_worker_context.h new file mode 100644 index 0000000000..c0586259c3 --- /dev/null +++ b/shell/browser/api/electron_api_service_worker_context.h @@ -0,0 +1,58 @@ +// Copyright (c) 2019 Slack Technologies, Inc. +// Use of this source code is governed by the MIT license that can be +// found in the LICENSE file. + +#ifndef SHELL_BROWSER_API_ELECTRON_API_SERVICE_WORKER_CONTEXT_H_ +#define SHELL_BROWSER_API_ELECTRON_API_SERVICE_WORKER_CONTEXT_H_ + +#include "content/public/browser/service_worker_context.h" +#include "content/public/browser/service_worker_context_observer.h" +#include "gin/handle.h" +#include "shell/common/gin_helper/trackable_object.h" + +namespace electron { + +class ElectronBrowserContext; + +namespace api { + +class ServiceWorkerContext + : public gin_helper::TrackableObject, + public content::ServiceWorkerContextObserver { + public: + static gin::Handle Create( + v8::Isolate* isolate, + ElectronBrowserContext* browser_context); + + static void BuildPrototype(v8::Isolate* isolate, + v8::Local prototype); + + v8::Local GetAllRunningWorkerInfo(v8::Isolate* isolate); + v8::Local GetWorkerInfoFromID(gin_helper::ErrorThrower thrower, + int64_t version_id); + + // content::ServiceWorkerContextObserver + void OnReportConsoleMessage(int64_t version_id, + const content::ConsoleMessage& message) override; + void OnDestruct(content::ServiceWorkerContext* context) override; + + protected: + explicit ServiceWorkerContext(v8::Isolate* isolate, + ElectronBrowserContext* browser_context); + ~ServiceWorkerContext() override; + + private: + ElectronBrowserContext* browser_context_; + + content::ServiceWorkerContext* service_worker_context_; + + base::WeakPtrFactory weak_ptr_factory_; + + DISALLOW_COPY_AND_ASSIGN(ServiceWorkerContext); +}; + +} // namespace api + +} // namespace electron + +#endif // SHELL_BROWSER_API_ELECTRON_API_SERVICE_WORKER_CONTEXT_H_ diff --git a/shell/browser/api/electron_api_session.cc b/shell/browser/api/electron_api_session.cc index 29c2c71ea5..0c7092db08 100644 --- a/shell/browser/api/electron_api_session.cc +++ b/shell/browser/api/electron_api_session.cc @@ -46,6 +46,7 @@ #include "shell/browser/api/electron_api_download_item.h" #include "shell/browser/api/electron_api_net_log.h" #include "shell/browser/api/electron_api_protocol.h" +#include "shell/browser/api/electron_api_service_worker_context.h" #include "shell/browser/api/electron_api_web_request.h" #include "shell/browser/browser.h" #include "shell/browser/electron_browser_context.h" @@ -721,6 +722,15 @@ v8::Local Session::Protocol(v8::Isolate* isolate) { return v8::Local::New(isolate, protocol_); } +v8::Local Session::ServiceWorkerContext(v8::Isolate* isolate) { + if (service_worker_context_.IsEmpty()) { + v8::Local handle; + handle = ServiceWorkerContext::Create(isolate, browser_context()).ToV8(); + service_worker_context_.Reset(isolate, handle); + } + return v8::Local::New(isolate, service_worker_context_); +} + v8::Local Session::WebRequest(v8::Isolate* isolate) { if (web_request_.IsEmpty()) { auto handle = WebRequest::Create(isolate, browser_context()); @@ -958,6 +968,7 @@ void Session::BuildPrototype(v8::Isolate* isolate, .SetProperty("cookies", &Session::Cookies) .SetProperty("netLog", &Session::NetLog) .SetProperty("protocol", &Session::Protocol) + .SetProperty("serviceWorkers", &Session::ServiceWorkerContext) .SetProperty("webRequest", &Session::WebRequest); } @@ -970,6 +981,7 @@ namespace { using electron::api::Cookies; using electron::api::NetLog; using electron::api::Protocol; +using electron::api::ServiceWorkerContext; using electron::api::Session; v8::Local FromPartition(const std::string& partition, @@ -1002,6 +1014,9 @@ void Initialize(v8::Local exports, dict.Set( "Protocol", Protocol::GetConstructor(isolate)->GetFunction(context).ToLocalChecked()); + dict.Set("ServiceWorkerContext", ServiceWorkerContext::GetConstructor(isolate) + ->GetFunction(context) + .ToLocalChecked()); dict.SetMethod("fromPartition", &FromPartition); } diff --git a/shell/browser/api/electron_api_session.h b/shell/browser/api/electron_api_session.h index 8c9a04fdfb..7e1498162d 100644 --- a/shell/browser/api/electron_api_session.h +++ b/shell/browser/api/electron_api_session.h @@ -87,6 +87,7 @@ class Session : public gin_helper::TrackableObject, std::vector GetPreloads() const; v8::Local Cookies(v8::Isolate* isolate); v8::Local Protocol(v8::Isolate* isolate); + v8::Local ServiceWorkerContext(v8::Isolate* isolate); v8::Local WebRequest(v8::Isolate* isolate); v8::Local NetLog(v8::Isolate* isolate); void Preconnect(const gin_helper::Dictionary& options, @@ -120,6 +121,7 @@ class Session : public gin_helper::TrackableObject, v8::Global cookies_; v8::Global protocol_; v8::Global net_log_; + v8::Global service_worker_context_; // Cached object. v8::Global web_request_; diff --git a/spec-main/api-service-workers-spec.ts b/spec-main/api-service-workers-spec.ts new file mode 100644 index 0000000000..c6a46c0a81 --- /dev/null +++ b/spec-main/api-service-workers-spec.ts @@ -0,0 +1,99 @@ +import * as fs from 'fs' +import * as http from 'http' +import * as path from 'path' +import { session, BrowserWindow } from 'electron' +import { expect } from 'chai' +import { v4 } from 'uuid' +import { AddressInfo } from 'net' +import { closeWindow } from './window-helpers' +import { emittedOnce, emittedNTimes } from './events-helpers' + +const partition = 'service-workers-spec' +const uuid = v4() + +describe('session.serviceWorkers', () => { + let ses: Electron.Session + let server: http.Server + let baseUrl: string + let w: BrowserWindow + + before(async () => { + ses = session.fromPartition(partition) + await ses.clearStorageData() + + server = http.createServer((req, res) => { + // /{uuid}/{file} + const file = req.url!.split('/')[2]! + + if (file.endsWith('.js')) { + res.setHeader('Content-Type', 'application/javascript') + } + res.end(fs.readFileSync(path.resolve(__dirname, 'fixtures', 'api', 'service-workers', file))) + }) + await new Promise(resolve => { + server.listen(0, '127.0.0.1', () => { + baseUrl = `http://localhost:${(server.address() as AddressInfo).port}/${uuid}` + resolve() + }) + }) + }) + + beforeEach(() => { + w = new BrowserWindow({ show: false, webPreferences: { session: ses } }) + }) + + afterEach(async () => { + await ses.clearStorageData() + await closeWindow(w) + w = null as any + }) + + after(async () => { + server.close() + }) + + describe('getAllRunning()', () => { + it('should initially report none are running', () => { + expect(ses.serviceWorkers.getAllRunning()).to.deep.equal({}) + }) + + it('should report one as running once you load a page with a service worker', async () => { + await emittedOnce(ses.serviceWorkers, 'console-message', () => w.loadURL(`${baseUrl}/index.html`)) + const workers = ses.serviceWorkers.getAllRunning() + const ids = Object.keys(workers) as any[] as number[] + expect(ids).to.have.lengthOf(1, 'should have one worker running') + }) + }) + + describe('getFromVersionID()', () => { + it('should report the correct script url and scope', async () => { + const eventInfo = await emittedOnce(ses.serviceWorkers, 'console-message', () => w.loadURL(`${baseUrl}/index.html`)) + const details: Electron.MessageDetails = eventInfo[1] + const worker = ses.serviceWorkers.getFromVersionID(details.versionId) + expect(worker).to.not.equal(null) + expect(worker).to.have.property('scope', baseUrl + '/') + expect(worker).to.have.property('scriptUrl', baseUrl + '/sw.js') + }) + }) + + describe('console-message event', () => { + it('should correctly keep the source, message and level', async () => { + const messages: Record = {} + const events = await emittedNTimes(ses.serviceWorkers, 'console-message', 4, () => w.loadURL(`${baseUrl}/logs.html`)) + for (const event of events) { + messages[event[1].message] = event[1] + + expect(event[1]).to.have.property('source', 'console-api') + } + + expect(messages).to.have.property('log log') + expect(messages).to.have.property('info log') + expect(messages).to.have.property('warn log') + expect(messages).to.have.property('error log') + expect(messages['log log']).to.have.property('level', 1) + expect(messages['info log']).to.have.property('level', 1) + expect(messages['warn log']).to.have.property('level', 2) + expect(messages['error log']).to.have.property('level', 3) + }) + }) +}) diff --git a/spec-main/fixtures/api/service-workers/index.html b/spec-main/fixtures/api/service-workers/index.html new file mode 100644 index 0000000000..bb90197451 --- /dev/null +++ b/spec-main/fixtures/api/service-workers/index.html @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/spec-main/fixtures/api/service-workers/logs.html b/spec-main/fixtures/api/service-workers/logs.html new file mode 100644 index 0000000000..d61005f344 --- /dev/null +++ b/spec-main/fixtures/api/service-workers/logs.html @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/spec-main/fixtures/api/service-workers/sw-logs.js b/spec-main/fixtures/api/service-workers/sw-logs.js new file mode 100644 index 0000000000..4aadcae644 --- /dev/null +++ b/spec-main/fixtures/api/service-workers/sw-logs.js @@ -0,0 +1,6 @@ +self.addEventListener('install', function (event) { + console.log('log log') + console.info('info log') + console.warn('warn log') + console.error('error log') +}) diff --git a/spec-main/fixtures/api/service-workers/sw.js b/spec-main/fixtures/api/service-workers/sw.js new file mode 100644 index 0000000000..b9ba57b097 --- /dev/null +++ b/spec-main/fixtures/api/service-workers/sw.js @@ -0,0 +1,3 @@ +self.addEventListener('install', function (event) { + console.log('Installed') +}) diff --git a/spec/package.json b/spec/package.json index 10fb6fa7b1..3ebe235d94 100644 --- a/spec/package.json +++ b/spec/package.json @@ -23,6 +23,7 @@ "send": "^0.16.2", "split": "^1.0.1", "temp": "^0.9.0", + "uuid": "^3.3.3", "walkdir": "^0.3.2", "winreg": "^1.2.4", "ws": "^6.1.4", diff --git a/spec/yarn.lock b/spec/yarn.lock index f21ffc875a..572aa87f55 100644 --- a/spec/yarn.lock +++ b/spec/yarn.lock @@ -34,19 +34,6 @@ ansi-regex@^3.0.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= -aproba@^1.0.3: - version "1.2.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" - integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== - -are-we-there-yet@~1.1.2: - version "1.1.5" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" - integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== - dependencies: - delegates "^1.0.0" - readable-stream "^2.0.6" - asn1@~0.2.3: version "0.2.4" resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" @@ -110,14 +97,6 @@ bindings@^1.2.1: dependencies: file-uri-to-path "1.0.0" -bl@^1.0.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.2.tgz#a160911717103c07410cef63ef51b397c025af9c" - integrity sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA== - dependencies: - readable-stream "^2.3.5" - safe-buffer "^5.1.1" - brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -131,24 +110,6 @@ browser-stdout@1.3.1: resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== -buffer-alloc-unsafe@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" - integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg== - -buffer-alloc@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec" - integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow== - dependencies: - buffer-alloc-unsafe "^1.1.0" - buffer-fill "^1.0.0" - -buffer-fill@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" - integrity sha1-+PeLdniYiO858gXNY39o5wISKyw= - camelcase@^5.0.0: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" @@ -188,11 +149,6 @@ check-error@^1.0.2: resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" integrity sha1-V00xLt2Iu13YkS6Sht1sCu1KrII= -chownr@^1.0.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.3.tgz#42d837d5239688d55f303003a508230fa6727142" - integrity sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw== - cliui@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" @@ -229,12 +185,7 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -console-control-strings@^1.0.0, console-control-strings@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= - -core-util-is@1.0.2, core-util-is@~1.0.0: +core-util-is@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= @@ -274,7 +225,7 @@ dashdash@^1.12.0: safe-buffer "^5.1.1" xml2js "^0.4.17" optionalDependencies: - abstract-socket "github:saghul/node-abstractsocket#35b1b1491fabc04899bde5be3428abf5cf9cd528" + abstract-socket "^2.0.0" debug@2.6.9, debug@^2.2.0: version "2.6.9" @@ -302,13 +253,6 @@ decamelize@^1.2.0: resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= -decompress-response@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" - integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= - dependencies: - mimic-response "^1.0.0" - deep-eql@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" @@ -316,21 +260,11 @@ deep-eql@^3.0.1: dependencies: type-detect "^4.0.0" -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= - depd@1.1.2, depd@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" @@ -341,11 +275,6 @@ destroy@~1.0.4: resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= -detect-libc@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" - integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= - diff@3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" @@ -379,13 +308,6 @@ encodeurl@~1.0.2: resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= -end-of-stream@^1.0.0: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - end-of-stream@^1.1.0: version "1.4.1" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" @@ -434,11 +356,6 @@ execa@^1.0.0: signal-exit "^3.0.0" strip-eof "^1.0.0" -expand-template@^1.0.2: - version "1.1.1" - resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-1.1.1.tgz#981f188c0c3a87d2e28f559bc541426ff94f21dd" - integrity sha512-cebqLtV8KOZfw0UI8TEFWxtczxxC1jvyUvx6H4fyp1K1FN7A4Q+uggVUlOsI1K8AGU0rwOGqP8nCapdrw8CYQg== - extend@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" @@ -507,30 +424,11 @@ from@^0.1.7: resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe" integrity sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4= -fs-constants@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" - integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== - fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= -gauge@~2.7.3: - version "2.7.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" - integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= - dependencies: - aproba "^1.0.3" - console-control-strings "^1.0.0" - has-unicode "^2.0.0" - object-assign "^4.1.0" - signal-exit "^3.0.0" - string-width "^1.0.1" - strip-ansi "^3.0.1" - wide-align "^1.1.0" - get-caller-file@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" @@ -555,11 +453,6 @@ getpass@^0.1.1: dependencies: assert-plus "^1.0.0" -github-from-package@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" - integrity sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4= - glob@7.1.2: version "7.1.2" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" @@ -612,11 +505,6 @@ has-flag@^3.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= -has-unicode@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= - he@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" @@ -670,16 +558,6 @@ inherits@2, inherits@2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= -inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -ini@~1.3.0: - version "1.3.5" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" - integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== - invert-kv@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" @@ -719,11 +597,6 @@ is-valid-window@0.0.5: dependencies: nan "2.x" -isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= - isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" @@ -841,11 +714,6 @@ mimic-fn@^2.0.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -mimic-response@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" - integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== - minimatch@3.0.4, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" @@ -858,11 +726,6 @@ minimist@0.0.8: resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= -minimist@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" - integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= - minimist@~0.0.1: version "0.0.10" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" @@ -938,7 +801,7 @@ multiparty@^4.2.1: safe-buffer "5.1.2" uid-safe "2.1.5" -nan@2.x, nan@^2.12.1, nan@^2.2.1: +nan@2.x, nan@^2.12.1: version "2.14.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== @@ -948,18 +811,6 @@ nice-try@^1.0.4: resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== -node-abi@^2.2.0: - version "2.11.0" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.11.0.tgz#b7dce18815057544a049be5ae75cd1fdc2e9ea59" - integrity sha512-kuy/aEg75u40v378WRllQ4ZexaXJiCvB68D2scDXclp/I4cRq6togpbOoKhmN07tns9Zldu51NNERo0wehfX9g== - dependencies: - semver "^5.4.1" - -noop-logger@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/noop-logger/-/noop-logger-0.1.1.tgz#94a2b1633c4f1317553007d8966fd0e841b6a4c2" - integrity sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI= - npm-run-path@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" @@ -967,16 +818,6 @@ npm-run-path@^2.0.0: dependencies: path-key "^2.0.0" -npmlog@^4.0.1: - version "4.1.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" - integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== - dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.3" - set-blocking "~2.0.0" - number-is-nan@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" @@ -987,11 +828,6 @@ oauth-sign@~0.9.0: resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== -object-assign@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= - on-finished@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" @@ -1014,11 +850,6 @@ optimist@^0.6.1: minimist "~0.0.1" wordwrap "~0.0.2" -os-homedir@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= - os-locale@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" @@ -1099,53 +930,11 @@ performance-now@^2.1.0: resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= -prebuild-install@^2.1.1: - version "2.5.3" - resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-2.5.3.tgz#9f65f242782d370296353710e9bc843490c19f69" - integrity sha512-/rI36cN2g7vDQnKWN8Uzupi++KjyqS9iS+/fpwG4Ea8d0Pip0PQ5bshUNzVwt+/D2MRfhVAplYMMvWLqWrCF/g== - dependencies: - detect-libc "^1.0.3" - expand-template "^1.0.2" - github-from-package "0.0.0" - minimist "^1.2.0" - mkdirp "^0.5.1" - node-abi "^2.2.0" - noop-logger "^0.1.1" - npmlog "^4.0.1" - os-homedir "^1.0.1" - pump "^2.0.1" - rc "^1.1.6" - simple-get "^2.7.0" - tar-fs "^1.13.0" - tunnel-agent "^0.6.0" - which-pm-runs "^1.0.0" - -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - psl@^1.1.24: version "1.2.0" resolved "https://registry.yarnpkg.com/psl/-/psl-1.2.0.tgz#df12b5b1b3a30f51c329eacbdef98f3a6e136dc6" integrity sha512-GEn74ZffufCmkDDLNcl3uuyF/aSD6exEyh1v/ZSdAomB82t6G9hzJVRx0jBmLDW+VfZqks3aScmMw9DszwUalA== -pump@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/pump/-/pump-1.0.3.tgz#5dfe8311c33bbf6fc18261f9f34702c47c08a954" - integrity sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pump@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" - integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - pump@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" @@ -1179,29 +968,6 @@ range-parser@~1.2.0: resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" integrity sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4= -rc@^1.1.6: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -readable-stream@^2.0.6, readable-stream@^2.3.0, readable-stream@^2.3.5: - version "2.3.6" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" - integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - request-json@^0.6.4: version "0.6.4" resolved "https://registry.yarnpkg.com/request-json/-/request-json-0.6.4.tgz#9eff076f105a445d5996d921b58b757ce5300a21" @@ -1253,7 +1019,7 @@ rimraf@~2.6.2: dependencies: glob "^7.1.3" -safe-buffer@5.1.2, safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: +safe-buffer@5.1.2, safe-buffer@^5.0.1, safe-buffer@^5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== @@ -1273,11 +1039,6 @@ sax@>=0.6.0: resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== -semver@^5.4.1: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - semver@^5.5.0: version "5.7.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" @@ -1302,7 +1063,7 @@ send@^0.16.2: range-parser "~1.2.0" statuses "~1.4.0" -set-blocking@^2.0.0, set-blocking@~2.0.0: +set-blocking@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= @@ -1334,20 +1095,6 @@ signal-exit@^3.0.0: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= -simple-concat@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.0.tgz#7344cbb8b6e26fb27d66b2fc86f9f6d5997521c6" - integrity sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY= - -simple-get@^2.7.0: - version "2.8.1" - resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-2.8.1.tgz#0e22e91d4575d87620620bc91308d57a77f44b5d" - integrity sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw== - dependencies: - decompress-response "^3.3.0" - once "^1.3.1" - simple-concat "^1.0.0" - split@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" @@ -1397,7 +1144,7 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.1: +string-width@^2.0.0, string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== @@ -1405,13 +1152,6 @@ string-width@^1.0.1: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" @@ -1431,11 +1171,6 @@ strip-eof@^1.0.0: resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= - supports-color@5.4.0: version "5.4.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54" @@ -1443,29 +1178,6 @@ supports-color@5.4.0: dependencies: has-flag "^3.0.0" -tar-fs@^1.13.0: - version "1.16.3" - resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-1.16.3.tgz#966a628841da2c4010406a82167cbd5e0c72d509" - integrity sha512-NvCeXpYx7OsmOh8zIOP/ebG55zZmxLE0etfWRbWok+q2Qo8x/vOR/IJT1taADXPe+jsiu9axDb3X4B+iIgNlKw== - dependencies: - chownr "^1.0.1" - mkdirp "^0.5.1" - pump "^1.0.0" - tar-stream "^1.1.2" - -tar-stream@^1.1.2: - version "1.6.2" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.6.2.tgz#8ea55dab37972253d9a9af90fdcd559ae435c555" - integrity sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A== - dependencies: - bl "^1.0.0" - buffer-alloc "^1.2.0" - end-of-stream "^1.0.0" - fs-constants "^1.0.0" - readable-stream "^2.3.0" - to-buffer "^1.1.1" - xtend "^4.0.0" - temp@^0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/temp/-/temp-0.9.0.tgz#61391795a11bd9738d4c4d7f55f012cb8f55edaa" @@ -1478,11 +1190,6 @@ through@2, through@^2.3.8, through@~2.3, through@~2.3.4: resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= -to-buffer@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80" - integrity sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg== - toidentifier@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" @@ -1527,16 +1234,16 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" -util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= - uuid@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== +uuid@^3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.3.tgz#4568f0216e78760ee1dbf3a4d2cf53e224112866" + integrity sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ== + verror@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" @@ -1556,11 +1263,6 @@ which-module@^2.0.0: resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= -which-pm-runs@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb" - integrity sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs= - which@^1.2.9: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" @@ -1568,13 +1270,6 @@ which@^1.2.9: dependencies: isexe "^2.0.0" -wide-align@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" - integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== - dependencies: - string-width "^1.0.2 || 2" - winreg@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/winreg/-/winreg-1.2.4.tgz#ba065629b7a925130e15779108cf540990e98d1b" @@ -1623,11 +1318,6 @@ xmlbuilder@~9.0.1: resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" integrity sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0= -xtend@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - "y18n@^3.2.1 || ^4.0.0": version "4.0.0" resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" diff --git a/yarn.lock b/yarn.lock index 497da9368c..fe9127cce2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -333,6 +333,13 @@ resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.3.tgz#9c088679876f374eb5983f150d4787aa6fb32d7e" integrity sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ== +"@types/uuid@^3.4.6": + version "3.4.6" + resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-3.4.6.tgz#d2c4c48eb85a757bf2927f75f939942d521e3016" + integrity sha512-cCdlC/1kGEZdEglzOieLDYBxHsvEOIg7kp/2FYyVR9Pxakq+Qf/inL3RKQ+PA8gOlI/NnL+fXmQH12nwcGzsHw== + dependencies: + "@types/node" "*" + "@types/webpack-env@^1.13.9": version "1.13.9" resolved "https://registry.yarnpkg.com/@types/webpack-env/-/webpack-env-1.13.9.tgz#a67287861c928ebf4159a908d1fb1a2a34d4097a"