diff --git a/.gitignore b/.gitignore index 42985f0d4419..3b38bbdbc622 100644 --- a/.gitignore +++ b/.gitignore @@ -31,3 +31,4 @@ lint-results.json # legacy !/packages/raven-js/dist +tmp.js diff --git a/.travis.yml b/.travis.yml index cca494de8cff..1e398b97571c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,6 +5,7 @@ branches: only: - master - /^release\/.+$/ + - /^major\/.+$/ install: true sudo: required diff --git a/CHANGELOG.md b/CHANGELOG.md index abb994eb19b7..01d9d6d5f48e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,35 @@ # Changelog -## Unreleased +## v5 + +### Migration from v4 + +This major bump brings a lot of internal improvements. If you were using the SDK without any special abilities, +basically, the way we describe it in the docs, you should be fine by just updating it. This is a **breaking** release +since we removed some methods from the public API and removed some classes from the default export. + +- **breaking** [node] fix: Events created from exception shouldn't have top-level message attribute +- [utils] ref: Update wrap method to hide internal sentry flags +- [utils] fix: Make internal Sentry flags non-enumerable in fill utils +- [utils] ref: Move `SentryError` + `PromiseBuffer` to utils +- **breaking** [core] ref: Use `SyncPromise` internally, this reduces memory pressure by a lot. +- **breaking** [browser] ref: Removed `BrowserBackend` from default export. +- **breaking** [node] ref: Removed `BrowserBackend` from default export. +- **breaking** [core] feat: Disable client once flushed using `close` method +- ref: Move internal `ExtendedError` to a types package +- **breaking** [core] ref: Pass `Event` to `sendEvent` instead of already stringified data +- [utils] feat: Introduce `isSyntheticEvent` util +- **breaking** [utils] ref: remove `isArray` util in favor of `Array.isArray` +- **breaking** [utils] ref: Remove `isNaN` util in favor of `Number.isNaN` +- **breaking** [utils] ref: Remove `isFunction` util in favor of `typeof === 'function'` +- **breaking** [utils] ref: Remove `isUndefined` util in favor of `=== void 0` +- **breaking** [utils] ref: Remove `assign` util in favor of `Object.assign` +- **breaking** [utils] ref: Remove `includes` util in favor of native `includes` +- **breaking** [utils] ref: Rename `serializeKeysToEventMessage` to `keysToEventMessage` +- **breaking** [utils] ref: Rename `limitObjectDepthToSize` to `normalizeToSize` and rewrite its internals +- **breaking** [utils] ref: Rename `safeNormalize` to `normalize` and rewrite its internals +- **breaking** [utils] ref: Remove `serialize`, `deserialize`, `clone` and `serializeObject` functions +- **breaking** [utils] ref: Rewrite normalization functions by removing most of them and leaving just `normalize` and `normalizeToSize` ## 4.6.3 diff --git a/package.json b/package.json index 51bcfe3a8fdb..c546ba86e918 100644 --- a/package.json +++ b/package.json @@ -25,30 +25,30 @@ "devDependencies": { "@google-cloud/storage": "^2.3.1", "@types/chai": "^4.1.3", - "@types/jest": "^23.3.9", + "@types/jest": "^24.0.6", "@types/mocha": "^5.2.0", - "@types/node": "^10.0.2", + "@types/node": "^11.9.4", "@types/raven": "^2.5.1", - "@types/sinon": "^5.0.7", + "@types/sinon": "^7.0.6", "chai": "^4.1.2", "codecov": "^3.0.2", - "danger": "^6.1.5", + "danger": "^7.0.12", "danger-plugin-tslint": "^2.0.0", - "jest": "^23.6.0", + "jest": "^24.1.0", "karma-sinon": "^1.0.5", - "lerna": "3.5.0", - "mocha": "^4.1.0", + "lerna": "3.13.0", + "mocha": "^5.2.0", "npm-run-all": "^4.1.2", "prettier": "^1.14.0", "prettier-check": "^2.0.0", "replace-in-file": "^3.4.2", - "rimraf": "^2.6.2", + "rimraf": "^2.6.3", "sinon": "^7.1.1", "ts-jest": "^23.10.5", "tslint": "^5.11.0", - "typedoc": "^0.13.0", + "typedoc": "^0.14.2", "typedoc-plugin-monorepo": "^0.1.0", "typescript": "^3.2.0", - "typescript-tslint-plugin": "^0.2.1" + "typescript-tslint-plugin": "^0.3.1" } } diff --git a/packages/browser/LICENSE b/packages/browser/LICENSE index 862c9698194b..8b42db873c95 100644 --- a/packages/browser/LICENSE +++ b/packages/browser/LICENSE @@ -1,23 +1,25 @@ -Copyright (c) 2018 Sentry (https://sentry.io) and individual contributors. +BSD 3-Clause License + +Copyright (c) 2019, Sentry All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - 1. Redistributions of source code must retain the above copyright notice, -this list of conditions and the following disclaimer. +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above copyright -notice, this list of conditions and the following disclaimer in the -documentation and/or other materials provided with the distribution. +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. - 3. Neither the name of the Sentry nor the names of its contributors may be -used to endorse or promote products derived from this software without specific -prior written permission. +* Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR diff --git a/packages/browser/package.json b/packages/browser/package.json index b27a6f805311..28ac28773879 100644 --- a/packages/browser/package.json +++ b/packages/browser/package.json @@ -21,35 +21,36 @@ "tslib": "^1.9.3" }, "devDependencies": { - "@types/md5": "2.1.32", + "@types/md5": "2.1.33", "chai": "^4.1.2", - "jsdom": "^11.12.0", - "karma": "^2.0.2", + "jest": "^24.1.0", + "jsdom": "^13.2.0", + "karma": "^4.0.0", "karma-chai": "^0.1.0", "karma-chrome-launcher": "^2.2.0", "karma-failed-reporter": "0.0.3", "karma-firefox-launcher": "^1.1.0", "karma-mocha": "^1.3.0", "karma-mocha-reporter": "^2.2.5", - "karma-rollup-preprocessor": "^6.0.0", - "karma-sauce-launcher": "^1.2.0", - "karma-typescript": "^3.0.12", - "karma-typescript-es6-transform": "^1.0.4", + "karma-rollup-preprocessor": "^7.0.0", + "karma-sauce-launcher": "^2.0.2", + "karma-typescript": "^4.0.0", + "karma-typescript-es6-transform": "^4.0.0", "npm-run-all": "^4.1.2", - "prettier": "^1.14.0", + "prettier": "^1.16.4", "prettier-check": "^2.0.0", - "rimraf": "^2.6.2", - "rollup": "^0.58.2", + "rimraf": "^2.6.3", + "rollup": "^1.2.1", "rollup-plugin-commonjs": "^9.1.3", - "rollup-plugin-license": "^0.6.0", - "rollup-plugin-node-resolve": "^3.3.0", + "rollup-plugin-license": "^0.8.1", + "rollup-plugin-node-resolve": "^4.0.0", "rollup-plugin-npm": "^2.0.0", - "rollup-plugin-typescript2": "^0.13.0", - "rollup-plugin-uglify": "^3.0.0", - "sinon": "^5.0.3", - "tslint": "^5.11.0", - "typescript": "^3.2.0", - "webpack": "^4.26.0" + "rollup-plugin-typescript2": "^0.19.2", + "rollup-plugin-uglify": "^6.0.2", + "sinon": "^7.2.3", + "tslint": "^5.12.1", + "typescript": "^3.3.3", + "webpack": "^4.29.5" }, "scripts": { "build": "run-p build:esm build:es5", diff --git a/packages/browser/rollup.config.js b/packages/browser/rollup.config.js index 57d039b440dd..5a3c37a578f1 100644 --- a/packages/browser/rollup.config.js +++ b/packages/browser/rollup.config.js @@ -1,5 +1,5 @@ import commonjs from 'rollup-plugin-commonjs'; -import uglify from 'rollup-plugin-uglify'; +import { uglify } from 'rollup-plugin-uglify'; import resolve from 'rollup-plugin-node-resolve'; import typescript from 'rollup-plugin-typescript2'; import license from 'rollup-plugin-license'; @@ -32,6 +32,7 @@ const bundleConfig = { tsconfigOverride: { compilerOptions: { declaration: false, + module: 'ES2015', paths: { '@sentry/utils/*': ['../utils/src/*'], '@sentry/core': ['../core/src'], @@ -72,6 +73,7 @@ export default [ tsconfig: 'tsconfig.build.json', tsconfigOverride: { compilerOptions: { + module: 'ES2015', rootDir: 'src', }, }, diff --git a/packages/browser/src/backend.ts b/packages/browser/src/backend.ts index 6ffc8c72b070..73cbb77282ef 100644 --- a/packages/browser/src/backend.ts +++ b/packages/browser/src/backend.ts @@ -1,7 +1,8 @@ -import { BaseBackend, Options, SentryError } from '@sentry/core'; -import { SentryEvent, SentryEventHint, Severity, Transport } from '@sentry/types'; +import { BaseBackend } from '@sentry/core'; +import { Event, EventHint, Options, Severity, Transport } from '@sentry/types'; import { isDOMError, isDOMException, isError, isErrorEvent, isPlainObject } from '@sentry/utils/is'; import { supportsBeacon, supportsFetch } from '@sentry/utils/supports'; +import { SyncPromise } from '@sentry/utils/syncpromise'; import { addExceptionTypeValue, eventFromPlainObject, eventFromStacktrace, prepareFramesForEvent } from './parsers'; import { computeStackTrace } from './tracekit'; import { BeaconTransport, FetchTransport, XHRTransport } from './transports'; @@ -26,25 +27,11 @@ export interface BrowserOptions extends Options { whitelistUrls?: Array; } -/** The Sentry Browser SDK Backend. */ +/** + * The Sentry Browser SDK Backend. + * @hidden + */ export class BrowserBackend extends BaseBackend { - /** - * @inheritDoc - */ - public install(): boolean { - // We are only called by the client if the SDK is enabled and a valid Dsn - // has been configured. If no Dsn is present, this indicates a programming - // error. - const dsn = this.options.dsn; - if (!dsn) { - throw new SentryError('Invariant exception: install() must not be called when disabled'); - } - - Error.stackTraceLimit = 50; - - return true; - } - /** * @inheritdoc */ @@ -69,48 +56,60 @@ export class BrowserBackend extends BaseBackend { /** * @inheritDoc */ - public async eventFromException(exception: any, hint?: SentryEventHint): Promise { - let event; + public eventFromException(exception: any, hint?: EventHint): SyncPromise { + let event: Event; if (isErrorEvent(exception as ErrorEvent) && (exception as ErrorEvent).error) { // If it is an ErrorEvent with `error` property, extract it to get actual Error - const ex = exception as ErrorEvent; - exception = ex.error; // tslint:disable-line:no-parameter-reassignment + const errorEvent = exception as ErrorEvent; + exception = errorEvent.error; // tslint:disable-line:no-parameter-reassignment event = eventFromStacktrace(computeStackTrace(exception as Error)); + return SyncPromise.resolve(this.buildEvent(event)); } else if (isDOMError(exception as DOMError) || isDOMException(exception as DOMException)) { // If it is a DOMError or DOMException (which are legacy APIs, but still supported in some browsers) // then we just extract the name and message, as they don't provide anything else // https://developer.mozilla.org/en-US/docs/Web/API/DOMError // https://developer.mozilla.org/en-US/docs/Web/API/DOMException - const ex = exception as DOMException; - const name = ex.name || (isDOMError(ex) ? 'DOMError' : 'DOMException'); - const message = ex.message ? `${name}: ${ex.message}` : name; - - event = await this.eventFromMessage(message, Severity.Error, hint); - addExceptionTypeValue(event, message); + const domException = exception as DOMException; + const name = domException.name || (isDOMError(domException) ? 'DOMError' : 'DOMException'); + const message = domException.message ? `${name}: ${domException.message}` : name; + + return this.eventFromMessage(message, Severity.Error, hint).then(messageEvent => { + addExceptionTypeValue(messageEvent, message); + return SyncPromise.resolve(this.buildEvent(messageEvent)); + }); } else if (isError(exception as Error)) { // we have a real Error object, do nothing event = eventFromStacktrace(computeStackTrace(exception as Error)); + return SyncPromise.resolve(this.buildEvent(event)); } else if (isPlainObject(exception as {}) && hint && hint.syntheticException) { // If it is plain Object, serialize it manually and extract options // This will allow us to group events based on top-level keys // which is much better than creating new group when any key/value change - const ex = exception as {}; - event = eventFromPlainObject(ex, hint.syntheticException); + const objectException = exception as {}; + event = eventFromPlainObject(objectException, hint.syntheticException); addExceptionTypeValue(event, 'Custom Object'); - } else { - // If none of previous checks were valid, then it means that - // it's not a DOMError/DOMException - // it's not a plain Object - // it's not a valid ErrorEvent (one with an error property) - // it's not an Error - // So bail out and capture it as a simple message: - const ex = exception as string; - event = await this.eventFromMessage(ex, undefined, hint); - addExceptionTypeValue(event, `${ex}`); + return SyncPromise.resolve(this.buildEvent(event)); } - event = { + // If none of previous checks were valid, then it means that + // it's not a DOMError/DOMException + // it's not a plain Object + // it's not a valid ErrorEvent (one with an error property) + // it's not an Error + // So bail out and capture it as a simple message: + const stringException = exception as string; + return this.eventFromMessage(stringException, undefined, hint).then(messageEvent => { + addExceptionTypeValue(messageEvent, `${stringException}`); + return SyncPromise.resolve(this.buildEvent(messageEvent)); + }); + } + + /** + * This is an internal helper function that creates an event. + */ + private buildEvent(event: Event, hint?: EventHint): Event { + return { ...event, event_id: hint && hint.event_id, exception: { @@ -121,19 +120,13 @@ export class BrowserBackend extends BaseBackend { }, }, }; - - return event; } /** * @inheritDoc */ - public async eventFromMessage( - message: string, - level: Severity = Severity.Info, - hint?: SentryEventHint, - ): Promise { - const event: SentryEvent = { + public eventFromMessage(message: string, level: Severity = Severity.Info, hint?: EventHint): SyncPromise { + const event: Event = { event_id: hint && hint.event_id, level, message, @@ -147,6 +140,6 @@ export class BrowserBackend extends BaseBackend { }; } - return event; + return SyncPromise.resolve(event); } } diff --git a/packages/browser/src/client.ts b/packages/browser/src/client.ts index 9ec02ca7eceb..7b2cdd299301 100644 --- a/packages/browser/src/client.ts +++ b/packages/browser/src/client.ts @@ -1,7 +1,8 @@ import { API, BaseClient, Scope } from '@sentry/core'; -import { DsnLike, SentryEvent, SentryEventHint } from '@sentry/types'; +import { DsnLike, Event, EventHint } from '@sentry/types'; import { logger } from '@sentry/utils/logger'; import { getGlobalObject } from '@sentry/utils/misc'; +import { SyncPromise } from '@sentry/utils/syncpromise'; import { BrowserBackend, BrowserOptions } from './backend'; import { SDK_NAME, SDK_VERSION } from './version'; @@ -42,14 +43,14 @@ export class BrowserClient extends BaseClient { * * @param options Configuration options for this SDK. */ - public constructor(options: BrowserOptions) { + public constructor(options: BrowserOptions = {}) { super(BrowserBackend, options); } /** * @inheritDoc */ - protected async prepareEvent(event: SentryEvent, scope?: Scope, hint?: SentryEventHint): Promise { + protected prepareEvent(event: Event, scope?: Scope, hint?: EventHint): SyncPromise { event.platform = event.platform || 'javascript'; event.sdk = { ...event.sdk, diff --git a/packages/browser/src/index.ts b/packages/browser/src/index.ts index c6a6e2d4d213..84a4613191c5 100644 --- a/packages/browser/src/index.ts +++ b/packages/browser/src/index.ts @@ -2,9 +2,9 @@ export { Breadcrumb, Request, SdkInfo, - SentryEvent, - SentryException, - SentryResponse, + Event, + Exception, + Response, Severity, StackFrame, Stacktrace, @@ -27,7 +27,7 @@ export { Scope, } from '@sentry/core'; -export { BrowserBackend, BrowserOptions } from './backend'; +export { BrowserOptions } from './backend'; export { BrowserClient, ReportDialogOptions } from './client'; export { defaultIntegrations, forceLoad, init, lastEventId, onLoad, showReportDialog, flush, close } from './sdk'; export { SDK_NAME, SDK_VERSION } from './version'; diff --git a/packages/browser/src/integrations/breadcrumbs.ts b/packages/browser/src/integrations/breadcrumbs.ts index 12d53c1f2ac9..2fcbd7c0f876 100644 --- a/packages/browser/src/integrations/breadcrumbs.ts +++ b/packages/browser/src/integrations/breadcrumbs.ts @@ -1,10 +1,10 @@ import { API, getCurrentHub } from '@sentry/core'; -import { Breadcrumb, Integration, SentryBreadcrumbHint, Severity } from '@sentry/types'; -import { isFunction, isString } from '@sentry/utils/is'; +import { Breadcrumb, BreadcrumbHint, Integration, Severity } from '@sentry/types'; +import { isString } from '@sentry/utils/is'; import { logger } from '@sentry/utils/logger'; import { getEventDescription, getGlobalObject, parseUrl } from '@sentry/utils/misc'; -import { deserialize, fill, serializeObject } from '@sentry/utils/object'; -import { includes, safeJoin } from '@sentry/utils/string'; +import { fill, normalize } from '@sentry/utils/object'; +import { safeJoin } from '@sentry/utils/string'; import { supportsBeacon, supportsHistory, supportsNativeFetch } from '@sentry/utils/supports'; import { BrowserClient } from '../client'; import { breadcrumbEventHandler, keypressEventHandler, wrap } from './helpers'; @@ -12,7 +12,9 @@ import { breadcrumbEventHandler, keypressEventHandler, wrap } from './helpers'; const global = getGlobalObject() as Window; let lastHref: string | undefined; -/** JSDoc */ +/** + * @hidden + */ export interface SentryWrappedXMLHttpRequest extends XMLHttpRequest { [key: string]: any; __sentry_xhr__?: { @@ -85,7 +87,7 @@ export class Breadcrumbs implements Integration { const filterUrl = new API(dsn).getStoreEndpoint(); // if Sentry key appears in URL, don't capture it as a request // but rather as our own 'sentry' type breadcrumb - if (filterUrl && includes(url, filterUrl)) { + if (filterUrl && url.includes(filterUrl)) { addSentryBreadcrumb(data); return result; } @@ -130,7 +132,7 @@ export class Breadcrumbs implements Integration { category: 'console', data: { extra: { - arguments: serializeObject(args, 2), + arguments: normalize(args, 2), }, logger: 'console', }, @@ -141,7 +143,7 @@ export class Breadcrumbs implements Integration { if (level === 'assert') { if (args[0] === false) { breadcrumbData.message = `Assertion failed: ${safeJoin(args.slice(1), ' ') || 'console.assert'}`; - breadcrumbData.data.extra.arguments = serializeObject(args.slice(1), 2); + breadcrumbData.data.extra.arguments = normalize(args.slice(1), 2); } } @@ -203,7 +205,7 @@ export class Breadcrumbs implements Integration { const filterUrl = new API(dsn).getStoreEndpoint(); // if Sentry key appears in URL, don't capture it as a request // but rather as our own 'sentry' type breadcrumb - if (filterUrl && includes(url, filterUrl)) { + if (filterUrl && url.includes(filterUrl)) { if (method === 'POST' && args[1] && args[1].body) { addSentryBreadcrumb(args[1].body); } @@ -336,7 +338,7 @@ export class Breadcrumbs implements Integration { /** JSDoc */ function wrapProp(prop: string, xhr: XMLHttpRequest): void { // TODO: Fix XHR types - if (prop in xhr && isFunction((xhr as { [key: string]: any })[prop])) { + if (prop in xhr && typeof (xhr as { [key: string]: any })[prop] === 'function') { fill(xhr, prop, original => wrap(original, { mechanism: { @@ -370,7 +372,7 @@ export class Breadcrumbs implements Integration { const filterUrl = new API(dsn).getStoreEndpoint(); // if Sentry key appears in URL, don't capture it as a request // but rather as our own 'sentry' type breadcrumb - if (isString(url) && (filterUrl && includes(url, filterUrl))) { + if (isString(url) && (filterUrl && url.includes(filterUrl))) { this.__sentry_own_request__ = true; } } @@ -422,7 +424,7 @@ export class Breadcrumbs implements Integration { wrapProp(prop, xhr); }); - if ('onreadystatechange' in xhr && isFunction(xhr.onreadystatechange)) { + if ('onreadystatechange' in xhr && typeof xhr.onreadystatechange === 'function') { fill(xhr, 'onreadystatechange', function(original: () => void): void { return wrap( original, @@ -452,9 +454,9 @@ export class Breadcrumbs implements Integration { /** * Helper that checks if integration is enabled on the client. * @param breadcrumb Breadcrumb - * @param hint SentryBreadcrumbHint + * @param hint BreadcrumbHint */ - public static addBreadcrumb(breadcrumb: Breadcrumb, hint?: SentryBreadcrumbHint): void { + public static addBreadcrumb(breadcrumb: Breadcrumb, hint?: BreadcrumbHint): void { if (getCurrentHub().getIntegration(Breadcrumbs)) { getCurrentHub().addBreadcrumb(breadcrumb, hint); } @@ -494,7 +496,7 @@ export class Breadcrumbs implements Integration { function addSentryBreadcrumb(serializedData: string): void { // There's always something that can go wrong with deserialization... try { - const event: { [key: string]: any } = deserialize(serializedData); + const event: { [key: string]: any } = JSON.parse(serializedData); Breadcrumbs.addBreadcrumb( { category: 'sentry', diff --git a/packages/browser/src/integrations/globalhandlers.ts b/packages/browser/src/integrations/globalhandlers.ts index ed4a979c77da..87dad8aabebe 100644 --- a/packages/browser/src/integrations/globalhandlers.ts +++ b/packages/browser/src/integrations/globalhandlers.ts @@ -1,7 +1,6 @@ import { getCurrentHub } from '@sentry/core'; -import { Integration, SentryEvent } from '@sentry/types'; +import { Event, Integration } from '@sentry/types'; import { logger } from '@sentry/utils/logger'; -import { safeNormalize, serialize } from '@sentry/utils/object'; import { truncate } from '@sentry/utils/string'; import { addExceptionTypeValue, eventFromStacktrace } from '../parsers'; import { @@ -45,6 +44,8 @@ export class GlobalHandlers implements Integration { * @inheritDoc */ public setupOnce(): void { + Error.stackTraceLimit = 50; + subscribe((stack: TraceKitStackTrace, _: boolean, error: Error) => { // TODO: use stack.context to get a valuable information from TraceKit, eg. // [ @@ -81,11 +82,11 @@ export class GlobalHandlers implements Integration { } /** - * This function creates an SentryEvent from an TraceKitStackTrace. + * This function creates an Event from an TraceKitStackTrace. * - * @param stacktrace TraceKitStackTrace to be converted to an SentryEvent. + * @param stacktrace TraceKitStackTrace to be converted to an Event. */ - private eventFromGlobalHandler(stacktrace: TraceKitStackTrace): SentryEvent { + private eventFromGlobalHandler(stacktrace: TraceKitStackTrace): Event { const event = eventFromStacktrace(stacktrace); const data: { [key: string]: string } = { @@ -100,7 +101,7 @@ export class GlobalHandlers implements Integration { data.name = stacktrace.name; } - const newEvent: SentryEvent = { + const newEvent: Event = { ...event, exception: { ...event.exception, @@ -112,10 +113,7 @@ export class GlobalHandlers implements Integration { }, }; - const fallbackValue = - typeof stacktrace.original !== 'undefined' - ? `${truncate(serialize(safeNormalize(stacktrace.original)), 300)}` - : ''; + const fallbackValue = stacktrace.original ? truncate(JSON.stringify(stacktrace.original), 300) : ''; const fallbackType = stacktrace.mechanism === 'onunhandledrejection' ? 'UnhandledRejection' : 'Error'; // This makes sure we have type/value in every exception diff --git a/packages/browser/src/integrations/helpers.ts b/packages/browser/src/integrations/helpers.ts index 1c39f2429f81..0e8402bc2a46 100644 --- a/packages/browser/src/integrations/helpers.ts +++ b/packages/browser/src/integrations/helpers.ts @@ -1,19 +1,23 @@ import { captureException, getCurrentHub, withScope } from '@sentry/core'; -import { Mechanism, SentryEvent, SentryWrappedFunction } from '@sentry/types'; -import { isFunction } from '@sentry/utils/is'; +import { Event as SentryEvent, Mechanism, WrappedFunction } from '@sentry/types'; import { htmlTreeAsString } from '@sentry/utils/misc'; -import { serializeObject } from '@sentry/utils/object'; +import { normalize } from '@sentry/utils/object'; const debounceDuration: number = 1000; let keypressTimeout: number | undefined; let lastCapturedEvent: Event | undefined; let ignoreOnError: number = 0; -/** JSDoc */ +/** + * @hidden + */ export function shouldIgnoreOnError(): boolean { return ignoreOnError > 0; } -/** JSDoc */ + +/** + * @hidden + */ export function ignoreNextOnError(): void { // onerror should trigger before setTimeout ignoreOnError += 1; @@ -28,15 +32,17 @@ export function ignoreNextOnError(): void { * * @param fn A function to wrap. * @returns The wrapped function. + * @hidden */ export function wrap( - fn: SentryWrappedFunction, + fn: WrappedFunction, options: { mechanism?: Mechanism; } = {}, - before?: SentryWrappedFunction, + before?: WrappedFunction, ): any { - if (!isFunction(fn)) { + // tslint:disable-next-line:strict-type-predicates + if (typeof fn !== 'function') { return fn; } @@ -57,8 +63,9 @@ export function wrap( return fn; } - const sentryWrapped: SentryWrappedFunction = function(this: any): void { - if (before && isFunction(before)) { + const sentryWrapped: WrappedFunction = function(this: any): void { + // tslint:disable-next-line:strict-type-predicates + if (before && typeof before === 'function') { before.apply(this, arguments); } @@ -79,8 +86,8 @@ export function wrap( } catch (ex) { ignoreNextOnError(); - withScope(async scope => { - scope.addEventProcessor(async (event: SentryEvent) => { + withScope(scope => { + scope.addEventProcessor((event: SentryEvent) => { const processedEvent = { ...event }; if (options.mechanism) { @@ -90,7 +97,7 @@ export function wrap( processedEvent.extra = { ...processedEvent.extra, - arguments: serializeObject(args, 2), + arguments: normalize(args, 2), }; return processedEvent; @@ -141,6 +148,7 @@ export function wrap( * Wraps addEventListener to capture UI breadcrumbs * @param eventName the event name (e.g. "click") * @returns wrapped breadcrumb events handler + * @hidden */ export function breadcrumbEventHandler(eventName: string): (event: Event) => void { return (event: Event) => { @@ -185,6 +193,7 @@ export function breadcrumbEventHandler(eventName: string): (event: Event) => voi /** * Wraps addEventListener to capture keypress UI events * @returns wrapped keypress events handler + * @hidden */ export function keypressEventHandler(): (event: Event) => void { // TODO: if somehow user switches keypress target before diff --git a/packages/browser/src/integrations/linkederrors.ts b/packages/browser/src/integrations/linkederrors.ts index 6b7538ebcfca..b77c4e2db8bc 100644 --- a/packages/browser/src/integrations/linkederrors.ts +++ b/packages/browser/src/integrations/linkederrors.ts @@ -1,18 +1,11 @@ import { addGlobalEventProcessor, getCurrentHub } from '@sentry/core'; -import { Integration, SentryEvent, SentryEventHint, SentryException } from '@sentry/types'; +import { Event, EventHint, Exception, ExtendedError, Integration } from '@sentry/types'; import { exceptionFromStacktrace } from '../parsers'; import { computeStackTrace } from '../tracekit'; const DEFAULT_KEY = 'cause'; const DEFAULT_LIMIT = 5; -/** - * Just an Error object with arbitrary attributes attached to it. - */ -interface ExtendedError extends Error { - [key: string]: any; -} - /** Adds SDK info to an event. */ export class LinkedErrors implements Integration { /** @@ -47,7 +40,7 @@ export class LinkedErrors implements Integration { * @inheritDoc */ public setupOnce(): void { - addGlobalEventProcessor(async (event: SentryEvent, hint?: SentryEventHint) => { + addGlobalEventProcessor((event: Event, hint?: EventHint) => { const self = getCurrentHub().getIntegration(LinkedErrors); if (self) { return self.handler(event, hint); @@ -59,7 +52,7 @@ export class LinkedErrors implements Integration { /** * @inheritDoc */ - public handler(event: SentryEvent, hint?: SentryEventHint): SentryEvent | null { + public handler(event: Event, hint?: EventHint): Event | null { if (!event.exception || !event.exception.values || !hint || !(hint.originalException instanceof Error)) { return event; } @@ -71,7 +64,7 @@ export class LinkedErrors implements Integration { /** * @inheritDoc */ - public walkErrorTree(error: ExtendedError, key: string, stack: SentryException[] = []): SentryException[] { + public walkErrorTree(error: ExtendedError, key: string, stack: Exception[] = []): Exception[] { if (!(error[key] instanceof Error) || stack.length + 1 >= this.limit) { return stack; } diff --git a/packages/browser/src/integrations/pluggable/ember.ts b/packages/browser/src/integrations/pluggable/ember.ts index 76269f40dd33..970350efd53d 100644 --- a/packages/browser/src/integrations/pluggable/ember.ts +++ b/packages/browser/src/integrations/pluggable/ember.ts @@ -1,5 +1,5 @@ import { captureException, captureMessage, getCurrentHub, Scope, withScope } from '@sentry/core'; -import { Integration, SentryEvent } from '@sentry/types'; +import { Event, Integration } from '@sentry/types'; import { logger } from '@sentry/utils/logger'; import { getGlobalObject } from '@sentry/utils/misc'; @@ -81,7 +81,7 @@ export class Ember implements Integration { * @param scope The scope currently used. */ private addIntegrationToSdkInfo(scope: Scope): void { - scope.addEventProcessor(async (event: SentryEvent) => { + scope.addEventProcessor((event: Event) => { if (event.sdk) { const integrations = event.sdk.integrations || []; event.sdk = { diff --git a/packages/browser/src/integrations/pluggable/vue.ts b/packages/browser/src/integrations/pluggable/vue.ts index 1dc6dd8f4295..b8bd02dd1d3d 100644 --- a/packages/browser/src/integrations/pluggable/vue.ts +++ b/packages/browser/src/integrations/pluggable/vue.ts @@ -1,6 +1,6 @@ import { captureException, getCurrentHub, withScope } from '@sentry/core'; -import { Integration, SentryEvent } from '@sentry/types'; -import { isPlainObject, isUndefined } from '@sentry/utils/is'; +import { Event, Integration } from '@sentry/types'; +import { isPlainObject } from '@sentry/utils/is'; import { logger } from '@sentry/utils/logger'; import { getGlobalObject } from '@sentry/utils/misc'; @@ -82,7 +82,7 @@ export class Vue implements Integration { } } - if (!isUndefined(info)) { + if (info !== void 0) { metadata.lifecycleHook = info; } @@ -92,7 +92,7 @@ export class Vue implements Integration { scope.setExtra(key, metadata[key]); }); - scope.addEventProcessor(async (event: SentryEvent) => { + scope.addEventProcessor((event: Event) => { if (event.sdk) { const integrations = event.sdk.integrations || []; event.sdk = { diff --git a/packages/browser/src/integrations/trycatch.ts b/packages/browser/src/integrations/trycatch.ts index 2c9e56aa7479..7ff4c916557a 100644 --- a/packages/browser/src/integrations/trycatch.ts +++ b/packages/browser/src/integrations/trycatch.ts @@ -1,4 +1,4 @@ -import { Integration, SentryWrappedFunction } from '@sentry/types'; +import { Integration, WrappedFunction } from '@sentry/types'; import { getGlobalObject } from '@sentry/utils/misc'; import { fill } from '@sentry/utils/object'; import { breadcrumbEventHandler, keypressEventHandler, wrap } from './helpers'; @@ -124,7 +124,7 @@ export class TryCatch implements Integration { this, eventName, wrap( - (fn as any) as SentryWrappedFunction, + (fn as any) as WrappedFunction, { mechanism: { data: { @@ -152,7 +152,7 @@ export class TryCatch implements Integration { fn: EventListenerObject, options?: boolean | EventListenerOptions, ): () => void { - let callback = (fn as any) as SentryWrappedFunction; + let callback = (fn as any) as WrappedFunction; try { callback = callback && (callback.__sentry_wrapped__ || callback); } catch (e) { diff --git a/packages/browser/src/integrations/useragent.ts b/packages/browser/src/integrations/useragent.ts index bd6611e53764..0cd51c512e33 100644 --- a/packages/browser/src/integrations/useragent.ts +++ b/packages/browser/src/integrations/useragent.ts @@ -1,5 +1,5 @@ import { addGlobalEventProcessor, getCurrentHub } from '@sentry/core'; -import { Integration, SentryEvent } from '@sentry/types'; +import { Event, Integration } from '@sentry/types'; import { getGlobalObject } from '@sentry/utils/misc'; const global = getGlobalObject() as Window; @@ -20,7 +20,7 @@ export class UserAgent implements Integration { * @inheritDoc */ public setupOnce(): void { - addGlobalEventProcessor(async (event: SentryEvent) => { + addGlobalEventProcessor((event: Event) => { if (getCurrentHub().getIntegration(UserAgent)) { if (!global.navigator || !global.location) { return event; diff --git a/packages/browser/src/parsers.ts b/packages/browser/src/parsers.ts index 04c6ae133265..c90d7463369c 100644 --- a/packages/browser/src/parsers.ts +++ b/packages/browser/src/parsers.ts @@ -1,6 +1,6 @@ -import { SentryEvent, SentryException, StackFrame } from '@sentry/types'; -import { limitObjectDepthToSize, serializeKeysToEventMessage } from '@sentry/utils/object'; -import { includes } from '@sentry/utils/string'; +import { Event, Exception, StackFrame } from '@sentry/types'; +import { normalizeToSize } from '@sentry/utils/object'; +import { keysToEventMessage } from '@sentry/utils/string'; import { md5 } from './md5'; import { computeStackTrace, StackFrame as TraceKitStackFrame, StackTrace as TraceKitStackTrace } from './tracekit'; @@ -9,11 +9,12 @@ const STACKTRACE_LIMIT = 50; /** * This function creates an exception from an TraceKitStackTrace * @param stacktrace TraceKitStackTrace that will be converted to an exception + * @hidden */ -export function exceptionFromStacktrace(stacktrace: TraceKitStackTrace): SentryException { +export function exceptionFromStacktrace(stacktrace: TraceKitStackTrace): Exception { const frames = prepareFramesForEvent(stacktrace.stack); - const exception: SentryException = { + const exception: Exception = { type: stacktrace.name, value: stacktrace.message, }; @@ -30,15 +31,17 @@ export function exceptionFromStacktrace(stacktrace: TraceKitStackTrace): SentryE return exception; } -/** JSDoc */ -export function eventFromPlainObject(exception: {}, syntheticException: Error | null): SentryEvent { +/** + * @hidden + */ +export function eventFromPlainObject(exception: {}, syntheticException: Error | null): Event { const exceptionKeys = Object.keys(exception).sort(); - const event: SentryEvent = { + const event: Event = { extra: { - __serialized__: limitObjectDepthToSize(exception), + __serialized__: normalizeToSize(exception), }, fingerprint: [md5(exceptionKeys.join(''))], - message: `Non-Error exception captured with keys: ${serializeKeysToEventMessage(exceptionKeys)}`, + message: `Non-Error exception captured with keys: ${keysToEventMessage(exceptionKeys)}`, }; if (syntheticException) { @@ -52,8 +55,10 @@ export function eventFromPlainObject(exception: {}, syntheticException: Error | return event; } -/** JSDoc */ -export function eventFromStacktrace(stacktrace: TraceKitStackTrace): SentryEvent { +/** + * @hidden + */ +export function eventFromStacktrace(stacktrace: TraceKitStackTrace): Event { const exception = exceptionFromStacktrace(stacktrace); return { @@ -63,7 +68,9 @@ export function eventFromStacktrace(stacktrace: TraceKitStackTrace): SentryEvent }; } -/** JSDoc */ +/** + * @hidden + */ export function prepareFramesForEvent(stack: TraceKitStackFrame[]): StackFrame[] { if (!stack || !stack.length) { return []; @@ -75,12 +82,12 @@ export function prepareFramesForEvent(stack: TraceKitStackFrame[]): StackFrame[] const lastFrameFunction = localStack[localStack.length - 1].func || ''; // If stack starts with one of our API calls, remove it (starts, meaning it's the top of the stack - aka last call) - if (includes(firstFrameFunction, 'captureMessage') || includes(firstFrameFunction, 'captureException')) { + if (firstFrameFunction.includes('captureMessage') || firstFrameFunction.includes('captureException')) { localStack = localStack.slice(1); } // If stack ends with one of our internal API calls, remove it (ends, meaning it's the bottom of the stack - aka top-most call) - if (includes(lastFrameFunction, 'sentryWrapped')) { + if (lastFrameFunction.includes('sentryWrapped')) { localStack = localStack.slice(0, -1); } @@ -104,8 +111,9 @@ export function prepareFramesForEvent(stack: TraceKitStackFrame[]): StackFrame[] * @param event The event to modify. * @param value Value of the exception. * @param type Type of the exception. + * @hidden */ -export function addExceptionTypeValue(event: SentryEvent, value?: string, type?: string): void { +export function addExceptionTypeValue(event: Event, value?: string, type?: string): void { event.exception = event.exception || {}; event.exception.values = event.exception.values || []; event.exception.values[0] = event.exception.values[0] || {}; diff --git a/packages/browser/src/sdk.ts b/packages/browser/src/sdk.ts index c76f81ad0171..8df613ca5d37 100644 --- a/packages/browser/src/sdk.ts +++ b/packages/browser/src/sdk.ts @@ -4,17 +4,13 @@ import { BrowserClient, ReportDialogOptions } from './client'; import { Breadcrumbs, GlobalHandlers, LinkedErrors, TryCatch, UserAgent } from './integrations'; export const defaultIntegrations = [ - // Common new CoreIntegrations.Dedupe(), new CoreIntegrations.InboundFilters(), new CoreIntegrations.FunctionToString(), new CoreIntegrations.ExtraErrorData(), - // Native Wrappers new TryCatch(), new Breadcrumbs(), - // Global Handlers new GlobalHandlers(), - // Misc new LinkedErrors(), new UserAgent(), ]; @@ -27,29 +23,42 @@ export const defaultIntegrations = [ * the provided methods. * * @example + * + * ``` + * * import { init } from '@sentry/browser'; * * init({ * dsn: '__DSN__', * // ... * }); + * ``` * * @example + * ``` + * * import { configureScope } from '@sentry/browser'; * configureScope((scope: Scope) => { * scope.setExtra({ battery: 0.7 }); * scope.setTag({ user_mode: 'admin' }); * scope.setUser({ id: '4711' }); * }); + * ``` * * @example + * ``` + * * import { addBreadcrumb } from '@sentry/browser'; * addBreadcrumb({ * message: 'My Breadcrumb', * // ... * }); + * ``` * * @example + * + * ``` + * * import * as Sentry from '@sentry/browser'; * Sentry.captureMessage('Hello, world!'); * Sentry.captureException(new Error('Good bye')); @@ -59,8 +68,9 @@ export const defaultIntegrations = [ * // ... * ], * }); + * ``` * - * @see BrowserOptions for documentation on configuration options. + * @see {@link BrowserOptions} for documentation on configuration options. */ export function init(options: BrowserOptions = {}): void { if (options.defaultIntegrations === undefined) { @@ -91,14 +101,16 @@ export function lastEventId(): string | undefined { } /** - * This function is here to be API compatible with the loader + * This function is here to be API compatible with the loader. + * @hidden */ export function forceLoad(): void { // Noop } /** - * This function is here to be API compatible with the loader + * This function is here to be API compatible with the loader. + * @hidden */ export function onLoad(callback: () => void): void { callback(); diff --git a/packages/browser/src/tracekit.ts b/packages/browser/src/tracekit.ts index 02641369a286..dd1039fc8ddc 100644 --- a/packages/browser/src/tracekit.ts +++ b/packages/browser/src/tracekit.ts @@ -1,8 +1,11 @@ // tslint:disable -import { isUndefined, isError, isErrorEvent } from '@sentry/utils/is'; +import { isError, isErrorEvent } from '@sentry/utils/is'; import { getGlobalObject } from '@sentry/utils/misc'; +/** + * @hidden + */ export interface StackFrame { url: string; func: string; @@ -12,6 +15,9 @@ export interface StackFrame { context: string[]; } +/** + * @hidden + */ export interface StackTrace { /** * Known modes: callers, failed, multiline, onerror, stack, stacktrace @@ -706,7 +712,7 @@ TraceKit.computeStackTrace = (function computeStackTraceWrapper() { for (var i = 0; i < maxLines; ++i) { line = source[lineNo - i] + line; - if (!isUndefined(line)) { + if (line !== void 0) { if ((m = reGuessFunction.exec(line))) { return m[1]; } else if ((m = reFunctionArgNames.exec(line))) { @@ -745,7 +751,7 @@ TraceKit.computeStackTrace = (function computeStackTraceWrapper() { line -= 1; // convert to 0-based index for (var i = start; i < end; ++i) { - if (!isUndefined(source[i])) { + if (source[i] !== void 0) { context.push(source[i]); } } @@ -839,7 +845,7 @@ TraceKit.computeStackTrace = (function computeStackTraceWrapper() { * @memberof TraceKit.computeStackTrace */ function findSourceByFunctionBody(func: any) { - if (isUndefined(window && window.document)) { + if (window && window.document === void 0) { return; } @@ -999,7 +1005,7 @@ TraceKit.computeStackTrace = (function computeStackTraceWrapper() { // NOTE: It's messing out our integration tests in Karma, let's see if we can live with it – Kamil // parts[4] = submatch[2]; // parts[5] = null; // no column when eval - } else if (i === 0 && !parts[5] && !isUndefined(ex.columnNumber)) { + } else if (i === 0 && !parts[5] && ex.columnNumber !== void 0) { // FireFox uses this awesome columnNumber property for its top frame // Also note, Firefox's column number is 0-based and everything else expects 1-based, // so adding 1 diff --git a/packages/browser/src/transports/base.ts b/packages/browser/src/transports/base.ts index 14c6a42de6cc..637e77a76f55 100644 --- a/packages/browser/src/transports/base.ts +++ b/packages/browser/src/transports/base.ts @@ -1,5 +1,7 @@ -import { API, PromiseBuffer, SentryError } from '@sentry/core'; -import { SentryResponse, Transport, TransportOptions } from '@sentry/types'; +import { API } from '@sentry/core'; +import { Event, Response, Transport, TransportOptions } from '@sentry/types'; +import { SentryError } from '@sentry/utils/error'; +import { PromiseBuffer } from '@sentry/utils/promisebuffer'; /** Base Transport class implementation */ export abstract class BaseTransport implements Transport { @@ -9,7 +11,7 @@ export abstract class BaseTransport implements Transport { public url: string; /** A simple buffer holding all requests. */ - protected readonly buffer: PromiseBuffer = new PromiseBuffer(30); + protected readonly buffer: PromiseBuffer = new PromiseBuffer(30); public constructor(public options: TransportOptions) { this.url = new API(this.options.dsn).getStoreEndpointWithUrlEncodedAuth(); @@ -18,7 +20,7 @@ export abstract class BaseTransport implements Transport { /** * @inheritDoc */ - public async sendEvent(_: string): Promise { + public async sendEvent(_: Event): Promise { throw new SentryError('Transport Class has to implement `sendEvent` method'); } diff --git a/packages/browser/src/transports/beacon.ts b/packages/browser/src/transports/beacon.ts index 4bd547d7a683..ec4f8382bac3 100644 --- a/packages/browser/src/transports/beacon.ts +++ b/packages/browser/src/transports/beacon.ts @@ -1,4 +1,4 @@ -import { SentryResponse, Status } from '@sentry/types'; +import { Event, Response, Status } from '@sentry/types'; import { getGlobalObject } from '@sentry/utils/misc'; import { BaseTransport } from './base'; @@ -9,8 +9,8 @@ export class BeaconTransport extends BaseTransport { /** * @inheritDoc */ - public async sendEvent(body: string): Promise { - const result = global.navigator.sendBeacon(this.url, body); + public async sendEvent(event: Event): Promise { + const result = global.navigator.sendBeacon(this.url, JSON.stringify(event)); return this.buffer.add( Promise.resolve({ diff --git a/packages/browser/src/transports/fetch.ts b/packages/browser/src/transports/fetch.ts index c07087c1d794..1d94982c35d5 100644 --- a/packages/browser/src/transports/fetch.ts +++ b/packages/browser/src/transports/fetch.ts @@ -1,4 +1,4 @@ -import { SentryResponse, Status } from '@sentry/types'; +import { Event, Response, Status } from '@sentry/types'; import { getGlobalObject } from '@sentry/utils/misc'; import { supportsReferrerPolicy } from '@sentry/utils/supports'; import { BaseTransport } from './base'; @@ -10,9 +10,9 @@ export class FetchTransport extends BaseTransport { /** * @inheritDoc */ - public async sendEvent(body: string): Promise { + public async sendEvent(event: Event): Promise { const defaultOptions: RequestInit = { - body, + body: JSON.stringify(event), method: 'POST', // Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default // https://caniuse.com/#feat=referrer-policy diff --git a/packages/browser/src/transports/xhr.ts b/packages/browser/src/transports/xhr.ts index a6e5af9a48c9..f70e49ce443f 100644 --- a/packages/browser/src/transports/xhr.ts +++ b/packages/browser/src/transports/xhr.ts @@ -1,4 +1,4 @@ -import { SentryResponse, Status } from '@sentry/types'; +import { Event, Response, Status } from '@sentry/types'; import { BaseTransport } from './base'; /** `XHR` based transport */ @@ -6,9 +6,9 @@ export class XHRTransport extends BaseTransport { /** * @inheritDoc */ - public async sendEvent(body: string): Promise { + public async sendEvent(event: Event): Promise { return this.buffer.add( - new Promise((resolve, reject) => { + new Promise((resolve, reject) => { const request = new XMLHttpRequest(); request.onreadystatechange = () => { @@ -26,7 +26,7 @@ export class XHRTransport extends BaseTransport { }; request.open('POST', this.url); - request.send(body); + request.send(JSON.stringify(event)); }), ); } diff --git a/packages/browser/test/backend.test.ts b/packages/browser/test/backend.test.ts index 413cd91fe2e6..fe107bf60342 100644 --- a/packages/browser/test/backend.test.ts +++ b/packages/browser/test/backend.test.ts @@ -1,35 +1,13 @@ import { expect } from 'chai'; -import { Status } from '../src'; import { BrowserBackend } from '../src/backend'; -import { SimpleTransport } from './mocks/simpletransport'; - -const dsn = 'https://123@sentry.io/42'; -const testEvent = { - event_id: '1337', - message: 'Pickle Rick', - user: { - username: 'Morty', - }, -}; let backend: BrowserBackend; describe('BrowserBackend', () => { describe('sendEvent()', () => { - it('should throw when no Dsn is provided', async () => { - backend = new BrowserBackend({ dsn }); - - try { - await backend.sendEvent(testEvent); - } catch (e) { - expect(e.message).equal('Cannot sendEvent without a valid Dsn'); - } - }); - - it('should call sendEvent() on provided transport', async () => { - backend = new BrowserBackend({ dsn, transport: SimpleTransport }); - const status = await backend.sendEvent(testEvent); - expect(status.status).equal(Status.Success); + it('should use NoopTransport', async () => { + backend = new BrowserBackend({}); + expect(backend.getTransport().constructor.name).to.equal('NoopTransport'); }); }); }); diff --git a/packages/browser/test/index.test.ts b/packages/browser/test/index.test.ts index 096083173227..4df6ed90b7b4 100644 --- a/packages/browser/test/index.test.ts +++ b/packages/browser/test/index.test.ts @@ -7,11 +7,11 @@ import { captureException, captureMessage, configureScope, + Event, getCurrentHub, init, Integrations, Scope, - SentryEvent, } from '../src'; import { SimpleTransport } from './mocks/simpletransport'; @@ -20,7 +20,7 @@ const dsn = 'https://53039209a22b4ec1bcc296a3c9fdecd6@sentry.io/4291'; declare var global: any; describe('SentryBrowser', () => { - const beforeSend: SinonSpy = spy((event: SentryEvent) => event); + const beforeSend: SinonSpy = spy((event: Event) => event); before(() => { init({ @@ -100,7 +100,7 @@ describe('SentryBrowser', () => { it('should capture a message', done => { getCurrentHub().bindClient( new BrowserClient({ - beforeSend: (event: SentryEvent) => { + beforeSend: (event: Event) => { expect(event.message).to.equal('test'); expect(event.exception).to.be.undefined; done(); @@ -115,7 +115,7 @@ describe('SentryBrowser', () => { it('should capture an event', done => { getCurrentHub().bindClient( new BrowserClient({ - beforeSend: (event: SentryEvent) => { + beforeSend: (event: Event) => { expect(event.message).to.equal('event'); expect(event.exception).to.be.undefined; done(); diff --git a/packages/browser/test/integration/common.js b/packages/browser/test/integration/common.js index 319a71ff43b1..0092647bd3ef 100644 --- a/packages/browser/test/integration/common.js +++ b/packages/browser/test/integration/common.js @@ -107,7 +107,7 @@ function initSDK() { // stub transport so we don't actually transmit any data function DummyTransport() {} DummyTransport.prototype.sendEvent = function(event) { - sentryData.push(JSON.parse(event)); + sentryData.push(event); done(sentryData); return Promise.resolve({ status: 'success', diff --git a/packages/browser/test/integrations/helpers.test.ts b/packages/browser/test/integrations/helpers.test.ts index b608d03440cb..3bd1250507fe 100644 --- a/packages/browser/test/integrations/helpers.test.ts +++ b/packages/browser/test/integrations/helpers.test.ts @@ -1,4 +1,4 @@ -import { SentryWrappedFunction } from '@sentry/types'; +import { WrappedFunction } from '@sentry/types'; import { expect } from 'chai'; import { SinonSpy, spy } from 'sinon'; import { wrap } from '../../src/integrations/helpers'; @@ -23,7 +23,7 @@ describe('wrap()', () => { }); it('bail out with the original if accessing custom props go bad', () => { - const fn = (() => 1337) as SentryWrappedFunction; + const fn = (() => 1337) as WrappedFunction; fn.__sentry__ = false; Object.defineProperty(fn, '__sentry_wrapped__', { get(): void { @@ -44,14 +44,14 @@ describe('wrap()', () => { }); it('returns wrapped function if original was already wrapped', () => { - const fn = (() => 1337) as SentryWrappedFunction; + const fn = (() => 1337) as WrappedFunction; const wrapped = wrap(fn); expect(wrap(fn)).equal(wrapped); }); it('returns same wrapped function if trying to wrap it again', () => { - const fn = (() => 1337) as SentryWrappedFunction; + const fn = (() => 1337) as WrappedFunction; const wrapped = wrap(fn); @@ -59,7 +59,7 @@ describe('wrap()', () => { }); it('calls "before" function when invoking wrapped function', () => { - const fn = (() => 1337) as SentryWrappedFunction; + const fn = (() => 1337) as WrappedFunction; const before = spy(); const wrapped = wrap(fn, {}, before); @@ -69,7 +69,7 @@ describe('wrap()', () => { }); it('attaches metadata to original and wrapped functions', () => { - const fn = (() => 1337) as SentryWrappedFunction; + const fn = (() => 1337) as WrappedFunction; const wrapped = wrap(fn); @@ -84,7 +84,7 @@ describe('wrap()', () => { }); it('copies over original functions properties', () => { - const fn = (() => 1337) as SentryWrappedFunction; + const fn = (() => 1337) as WrappedFunction; fn.some = 1337; fn.property = 'Rick'; @@ -97,7 +97,7 @@ describe('wrap()', () => { }); it('doesnt break when accessing original functions properties blows up', () => { - const fn = (() => 1337) as SentryWrappedFunction; + const fn = (() => 1337) as WrappedFunction; Object.defineProperty(fn, 'some', { get(): void { throw new Error('boom'); @@ -110,7 +110,7 @@ describe('wrap()', () => { }); it('recrusively wraps arguments that are functions', () => { - const fn = (() => 1337) as SentryWrappedFunction; + const fn = (() => 1337) as WrappedFunction; const fnArgA = () => 1337; const fnArgB = () => 1337; @@ -181,7 +181,7 @@ describe('wrap()', () => { }); it('internal flags shouldnt be enumerable', () => { - const fn = (() => 1337) as SentryWrappedFunction; + const fn = (() => 1337) as WrappedFunction; const wrapped = wrap(fn); // Shouldn't show up in iteration diff --git a/packages/browser/test/integrations/linkederrors.test.ts b/packages/browser/test/integrations/linkederrors.test.ts index 26e9e6a8420b..f4b9c1a56057 100644 --- a/packages/browser/test/integrations/linkederrors.test.ts +++ b/packages/browser/test/integrations/linkederrors.test.ts @@ -1,3 +1,4 @@ +import { ExtendedError } from '@sentry/types'; import { expect } from 'chai'; import { stub } from 'sinon'; import { BrowserBackend } from '../../src/backend'; @@ -5,10 +6,6 @@ import { LinkedErrors } from '../../src/integrations/linkederrors'; let linkedErrors: LinkedErrors; -interface ExtendedError extends Error { - [key: string]: any; -} - describe('LinkedErrors', () => { beforeEach(() => { linkedErrors = new LinkedErrors(); @@ -64,22 +61,23 @@ describe('LinkedErrors', () => { const originalException = one; const backend = new BrowserBackend({}); - const event = await backend.eventFromException(originalException); - const result = linkedErrors.handler(event, { - originalException, + return backend.eventFromException(originalException).then(event => { + const result = linkedErrors.handler(event, { + originalException, + }); + + // It shouldn't include root exception, as it's already processed in the event by the main error handler + expect(result!.exception!.values!.length).equal(3); + expect(result!.exception!.values![0].type).equal('SyntaxError'); + expect(result!.exception!.values![0].value).equal('three'); + expect(result!.exception!.values![0].stacktrace).to.have.property('frames'); + expect(result!.exception!.values![1].type).equal('TypeError'); + expect(result!.exception!.values![1].value).equal('two'); + expect(result!.exception!.values![1].stacktrace).to.have.property('frames'); + expect(result!.exception!.values![2].type).equal('Error'); + expect(result!.exception!.values![2].value).equal('one'); + expect(result!.exception!.values![2].stacktrace).to.have.property('frames'); }); - - // It shouldn't include root exception, as it's already processed in the event by the main error handler - expect(result!.exception!.values!.length).equal(3); - expect(result!.exception!.values![0].type).equal('SyntaxError'); - expect(result!.exception!.values![0].value).equal('three'); - expect(result!.exception!.values![0].stacktrace).to.have.property('frames'); - expect(result!.exception!.values![1].type).equal('TypeError'); - expect(result!.exception!.values![1].value).equal('two'); - expect(result!.exception!.values![1].stacktrace).to.have.property('frames'); - expect(result!.exception!.values![2].type).equal('Error'); - expect(result!.exception!.values![2].value).equal('one'); - expect(result!.exception!.values![2].stacktrace).to.have.property('frames'); }); it('should allow to change walk key', async () => { @@ -97,21 +95,22 @@ describe('LinkedErrors', () => { const originalException = one; const backend = new BrowserBackend({}); - const event = await backend.eventFromException(originalException); - const result = linkedErrors.handler(event, { - originalException, + return backend.eventFromException(originalException).then(event => { + const result = linkedErrors.handler(event, { + originalException, + }); + + expect(result!.exception!.values!.length).equal(3); + expect(result!.exception!.values![0].type).equal('SyntaxError'); + expect(result!.exception!.values![0].value).equal('three'); + expect(result!.exception!.values![0].stacktrace).to.have.property('frames'); + expect(result!.exception!.values![1].type).equal('TypeError'); + expect(result!.exception!.values![1].value).equal('two'); + expect(result!.exception!.values![1].stacktrace).to.have.property('frames'); + expect(result!.exception!.values![2].type).equal('Error'); + expect(result!.exception!.values![2].value).equal('one'); + expect(result!.exception!.values![2].stacktrace).to.have.property('frames'); }); - - expect(result!.exception!.values!.length).equal(3); - expect(result!.exception!.values![0].type).equal('SyntaxError'); - expect(result!.exception!.values![0].value).equal('three'); - expect(result!.exception!.values![0].stacktrace).to.have.property('frames'); - expect(result!.exception!.values![1].type).equal('TypeError'); - expect(result!.exception!.values![1].value).equal('two'); - expect(result!.exception!.values![1].stacktrace).to.have.property('frames'); - expect(result!.exception!.values![2].type).equal('Error'); - expect(result!.exception!.values![2].value).equal('one'); - expect(result!.exception!.values![2].stacktrace).to.have.property('frames'); }); it('should allow to change stack size limit', async () => { @@ -126,18 +125,19 @@ describe('LinkedErrors', () => { two.cause = three; const backend = new BrowserBackend({}); - const event = await backend.eventFromException(one); - const result = linkedErrors.handler(event, { - originalException: one, + return backend.eventFromException(one).then(event => { + const result = linkedErrors.handler(event, { + originalException: one, + }); + + expect(result!.exception!.values!.length).equal(2); + expect(result!.exception!.values![0].type).equal('TypeError'); + expect(result!.exception!.values![0].value).equal('two'); + expect(result!.exception!.values![0].stacktrace).to.have.property('frames'); + expect(result!.exception!.values![1].type).equal('Error'); + expect(result!.exception!.values![1].value).equal('one'); + expect(result!.exception!.values![1].stacktrace).to.have.property('frames'); }); - - expect(result!.exception!.values!.length).equal(2); - expect(result!.exception!.values![0].type).equal('TypeError'); - expect(result!.exception!.values![0].value).equal('two'); - expect(result!.exception!.values![0].stacktrace).to.have.property('frames'); - expect(result!.exception!.values![1].type).equal('Error'); - expect(result!.exception!.values![1].value).equal('one'); - expect(result!.exception!.values![1].stacktrace).to.have.property('frames'); }); }); }); diff --git a/packages/browser/test/manual/npm-build.js b/packages/browser/test/manual/npm-build.js index 4527264152b0..2486ae9b7da0 100644 --- a/packages/browser/test/manual/npm-build.js +++ b/packages/browser/test/manual/npm-build.js @@ -39,7 +39,10 @@ function runTests() { const bundlePath = path.join(__dirname, 'tmp.js'); const { window } = new JSDOM(``, { runScripts: 'dangerously' }); - window.onerror = function() { + window.onerror = function(error) { + console.error('ERROR thrown in manual test:'); + console.error(error); + console.error('------------------'); process.exit(1); }; diff --git a/packages/browser/test/mocks/simpletransport.ts b/packages/browser/test/mocks/simpletransport.ts index 2e57687e37be..27d100d36c1a 100644 --- a/packages/browser/test/mocks/simpletransport.ts +++ b/packages/browser/test/mocks/simpletransport.ts @@ -1,8 +1,8 @@ -import { SentryResponse, Status } from '../../src'; +import { Event, Response, Status } from '../../src'; import { BaseTransport } from '../../src/transports'; export class SimpleTransport extends BaseTransport { - public async sendEvent(_: string): Promise { + public async sendEvent(_: Event): Promise { return this.buffer.add( Promise.resolve({ status: Status.fromHttpCode(200), diff --git a/packages/browser/test/transports/base.test.ts b/packages/browser/test/transports/base.test.ts index 907eb6190c88..5da9501730b8 100644 --- a/packages/browser/test/transports/base.test.ts +++ b/packages/browser/test/transports/base.test.ts @@ -10,7 +10,7 @@ describe('BaseTransport', () => { const transport = new SimpleTransport({ dsn: testDsn }); try { - await transport.sendEvent(''); + await transport.sendEvent({}); } catch (e) { expect(e.message).equal('Transport Class has to implement `sendEvent` method'); } diff --git a/packages/browser/test/transports/beacon.test.ts b/packages/browser/test/transports/beacon.test.ts index 9d6bce60be74..50615c068363 100644 --- a/packages/browser/test/transports/beacon.test.ts +++ b/packages/browser/test/transports/beacon.test.ts @@ -33,7 +33,7 @@ describe('BeaconTransport', () => { it('sends a request to Sentry servers', async () => { sendBeacon.returns(true); - return transport.sendEvent(JSON.stringify(payload)).then(res => { + return transport.sendEvent(payload).then(res => { expect(res.status).equal(Status.Success); expect(sendBeacon.calledOnce).equal(true); expect(sendBeacon.calledWith(transportUrl, JSON.stringify(payload))).equal(true); @@ -43,7 +43,7 @@ describe('BeaconTransport', () => { it('rejects with failed status', async () => { sendBeacon.returns(false); - return transport.sendEvent(JSON.stringify(payload)).catch(res => { + return transport.sendEvent(payload).catch(res => { expect(res.status).equal(Status.Failed); expect(sendBeacon.calledOnce).equal(true); expect(sendBeacon.calledWith(transportUrl, JSON.stringify(payload))).equal(true); diff --git a/packages/browser/test/transports/fetch.test.ts b/packages/browser/test/transports/fetch.test.ts index b7be26bb3e46..ba8e9edbc5d4 100644 --- a/packages/browser/test/transports/fetch.test.ts +++ b/packages/browser/test/transports/fetch.test.ts @@ -35,7 +35,7 @@ describe('FetchTransport', () => { fetch.returns(Promise.resolve(response)); - return transport.sendEvent(JSON.stringify(payload)).then(res => { + return transport.sendEvent(payload).then(res => { expect(res.status).equal(Status.Success); expect(fetch.calledOnce).equal(true); expect( @@ -53,7 +53,7 @@ describe('FetchTransport', () => { fetch.returns(Promise.reject(response)); - return transport.sendEvent(JSON.stringify(payload)).catch(res => { + return transport.sendEvent(payload).catch(res => { expect(res.status).equal(403); expect(fetch.calledOnce).equal(true); expect( diff --git a/packages/browser/test/transports/xhr.test.ts b/packages/browser/test/transports/xhr.test.ts index ef586c1778cd..cb126a9e8604 100644 --- a/packages/browser/test/transports/xhr.test.ts +++ b/packages/browser/test/transports/xhr.test.ts @@ -34,7 +34,7 @@ describe('XHRTransport', () => { it('sends a request to Sentry servers', async () => { server.respondWith('POST', transportUrl, [200, {}, '']); - return transport.sendEvent(JSON.stringify(payload)).then(res => { + return transport.sendEvent(payload).then(res => { expect(res.status).equal(Status.Success); const request = server.requests[0]; expect(server.requests.length).equal(1); @@ -46,7 +46,7 @@ describe('XHRTransport', () => { it('rejects with non-200 status code', done => { server.respondWith('POST', transportUrl, [403, {}, '']); - transport.sendEvent(JSON.stringify(payload)).catch(res => { + transport.sendEvent(payload).catch(res => { expect(res.status).equal(403); const request = server.requests[0]; diff --git a/packages/core/LICENSE b/packages/core/LICENSE index 862c9698194b..8b42db873c95 100644 --- a/packages/core/LICENSE +++ b/packages/core/LICENSE @@ -1,23 +1,25 @@ -Copyright (c) 2018 Sentry (https://sentry.io) and individual contributors. +BSD 3-Clause License + +Copyright (c) 2019, Sentry All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - 1. Redistributions of source code must retain the above copyright notice, -this list of conditions and the following disclaimer. +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above copyright -notice, this list of conditions and the following disclaimer in the -documentation and/or other materials provided with the distribution. +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. - 3. Neither the name of the Sentry nor the names of its contributors may be -used to endorse or promote products derived from this software without specific -prior written permission. +* Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR diff --git a/packages/core/README.md b/packages/core/README.md index 84ca4586b865..b228fc669a80 100644 --- a/packages/core/README.md +++ b/packages/core/README.md @@ -21,3 +21,5 @@ This package contains interface definitions, base classes and utilities for building Sentry JavaScript SDKs, like `@sentry/node` or `@sentry/browser`. + +Please consider all classes and exported functions and interfaces `internal`. diff --git a/packages/core/package.json b/packages/core/package.json index 3700117204e9..8a5cfeecd428 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -22,13 +22,13 @@ "tslib": "^1.9.3" }, "devDependencies": { - "jest": "^22.4.3", + "jest": "^24.1.0", "npm-run-all": "^4.1.2", - "prettier": "^1.14.0", + "prettier": "^1.16.4", "prettier-check": "^2.0.0", - "rimraf": "^2.6.2", - "tslint": "^5.11.0", - "typescript": "^3.2.0" + "rimraf": "^2.6.3", + "tslint": "^5.12.1", + "typescript": "^3.3.3" }, "scripts": { "build": "run-p build:es5 build:esm", diff --git a/packages/core/src/basebackend.ts b/packages/core/src/basebackend.ts index b42439622175..b51a6574dd13 100644 --- a/packages/core/src/basebackend.ts +++ b/packages/core/src/basebackend.ts @@ -1,18 +1,57 @@ -import { Scope } from '@sentry/hub'; -import { Breadcrumb, SentryEvent, SentryEventHint, SentryResponse, Severity, Transport } from '@sentry/types'; +import { Event, EventHint, Options, Severity, Transport } from '@sentry/types'; +import { SentryError } from '@sentry/utils/error'; import { logger } from '@sentry/utils/logger'; -import { serialize } from '@sentry/utils/object'; -import { SentryError } from './error'; -import { Backend, Options } from './interfaces'; +import { SyncPromise } from '@sentry/utils/syncpromise'; import { NoopTransport } from './transports/noop'; -/** A class object that can instanciate Backend objects. */ -export interface BackendClass { - new (options: O): B; +/** + * Internal platform-dependent Sentry SDK Backend. + * + * While {@link Client} contains business logic specific to an SDK, the + * Backend offers platform specific implementations for low-level operations. + * These are persisting and loading information, sending events, and hooking + * into the environment. + * + * Backends receive a handle to the Client in their constructor. When a + * Backend automatically generates events, it must pass them to + * the Client for validation and processing first. + * + * Usually, the Client will be of corresponding type, e.g. NodeBackend + * receives NodeClient. However, higher-level SDKs can choose to instanciate + * multiple Backends and delegate tasks between them. In this case, an event + * generated by one backend might very well be sent by another one. + * + * The client also provides access to options via {@link Client.getOptions}. + * @hidden + */ +export interface Backend { + /** Creates a {@link Event} from an exception. */ + eventFromException(exception: any, hint?: EventHint): SyncPromise; + + /** Creates a {@link Event} from a plain message. */ + eventFromMessage(message: string, level?: Severity, hint?: EventHint): SyncPromise; + + /** Submits the event to Sentry */ + sendEvent(event: Event): void; + + /** + * Returns the transport that is used by the backend. + * Please note that the transport gets lazy initialized so it will only be there once the first event has been sent. + * + * @returns The transport. + */ + getTransport(): Transport; } +/** + * A class object that can instanciate Backend objects. + * @hidden + */ +export type BackendClass = new (options: O) => B; + /** * This is the base implemention of a Backend. + * @hidden */ export abstract class BaseBackend implements Backend { /** Options passed to the SDK. */ @@ -21,7 +60,7 @@ export abstract class BaseBackend implements Backend { /** Cached transport used internally. */ protected transport: Transport; - /** Creates a new browser backend instance. */ + /** Creates a new backend instance. */ public constructor(options: O) { this.options = options; if (!this.options.dsn) { @@ -40,43 +79,24 @@ export abstract class BaseBackend implements Backend { /** * @inheritDoc */ - public async eventFromException(_exception: any, _hint?: SentryEventHint): Promise { + public eventFromException(_exception: any, _hint?: EventHint): SyncPromise { throw new SentryError('Backend has to implement `eventFromException` method'); } /** * @inheritDoc */ - public async eventFromMessage(_message: string, _level?: Severity, _hint?: SentryEventHint): Promise { + public eventFromMessage(_message: string, _level?: Severity, _hint?: EventHint): SyncPromise { throw new SentryError('Backend has to implement `eventFromMessage` method'); } /** * @inheritDoc */ - public async sendEvent(event: SentryEvent): Promise { - // TODO: Remove with v5 - // tslint:disable-next-line - if (this.transport.captureEvent) { - // tslint:disable-next-line - return this.transport.captureEvent(event); - } - // -------------------- - return this.transport.sendEvent(serialize(event)); - } - - /** - * @inheritDoc - */ - public storeBreadcrumb(_: Breadcrumb): boolean { - return true; - } - - /** - * @inheritDoc - */ - public storeScope(_: Scope): void { - // Noop + public sendEvent(event: Event): void { + this.transport.sendEvent(event).catch(reason => { + logger.error(`Error while sending event: ${reason}`); + }); } /** diff --git a/packages/core/src/baseclient.ts b/packages/core/src/baseclient.ts index cd2dc37541b6..87da0ef8751d 100644 --- a/packages/core/src/baseclient.ts +++ b/packages/core/src/baseclient.ts @@ -1,37 +1,13 @@ import { Scope } from '@sentry/hub'; -import { - Breadcrumb, - Integration, - IntegrationClass, - SentryBreadcrumbHint, - SentryEvent, - SentryEventHint, - SentryResponse, - Severity, - Status, -} from '@sentry/types'; -import { forget } from '@sentry/utils/async'; -import { isPrimitive } from '@sentry/utils/is'; +import { Client, Event, EventHint, Integration, IntegrationClass, Options, Severity } from '@sentry/types'; +import { isPrimitive, isThenable } from '@sentry/utils/is'; import { logger } from '@sentry/utils/logger'; -import { consoleSandbox, uuid4 } from '@sentry/utils/misc'; +import { uuid4 } from '@sentry/utils/misc'; import { truncate } from '@sentry/utils/string'; -import { BackendClass } from './basebackend'; +import { SyncPromise } from '@sentry/utils/syncpromise'; +import { Backend, BackendClass } from './basebackend'; import { Dsn } from './dsn'; import { IntegrationIndex, setupIntegrations } from './integration'; -import { Backend, Client, Options } from './interfaces'; -import { PromiseBuffer } from './promisebuffer'; - -/** - * Default maximum number of breadcrumbs added to an event. Can be overwritten - * with {@link Options.maxBreadcrumbs}. - */ -const DEFAULT_BREADCRUMBS = 30; - -/** - * Absolute maximum number of breadcrumbs added to an event. The - * `maxBreadcrumbs` option cannot be higher than this value. - */ -const MAX_BREADCRUMBS = 100; /** * By default, truncates URL values to 250 chars @@ -87,18 +63,9 @@ export abstract class BaseClient implement */ private readonly dsn?: Dsn; - /** - * Stores whether installation has been performed and was successful. Before - * installing, this is undefined. Then it contains the success state. - */ - private installed?: boolean; - /** Array of used integrations. */ private readonly integrations: IntegrationIndex; - /** A simple buffer holding all requests. */ - protected readonly buffer: PromiseBuffer = new PromiseBuffer(); - /** * Initializes this client instance. * @@ -112,95 +79,64 @@ export abstract class BaseClient implement if (options.dsn) { this.dsn = new Dsn(options.dsn); } - // We have to setup the integrations in the constructor since we do not want - // that anyone needs to call client.install(); - this.integrations = setupIntegrations(this.options); - } - /** - * @inheritDoc - */ - public install(): boolean { - if (!this.isEnabled()) { - return (this.installed = false); - } - - const backend = this.getBackend(); - if (!this.installed && backend.install) { - backend.install(); - } - - return (this.installed = true); + this.integrations = setupIntegrations(this.options); } /** * @inheritDoc */ - public async captureException(exception: any, hint?: SentryEventHint, scope?: Scope): Promise { - return this.buffer.add( - (async () => { - const event = await this.getBackend().eventFromException(exception, hint); - return this.captureEvent(event, hint, scope); - })(), - ); + public captureException(exception: any, hint?: EventHint, scope?: Scope): string | undefined { + let eventId: string | undefined = hint && hint.event_id; + + this.getBackend() + .eventFromException(exception, hint) + .then(event => this.processEvent(event, hint, scope)) + .then(finalEvent => { + eventId = finalEvent.event_id; + }) + .catch(reason => { + logger.log(reason); + }); + + return eventId; } /** * @inheritDoc */ - public async captureMessage( - message: string, - level?: Severity, - hint?: SentryEventHint, - scope?: Scope, - ): Promise { - return this.buffer.add( - (async () => { - const event = isPrimitive(message) - ? await this.getBackend().eventFromMessage(`${message}`, level, hint) - : await this.getBackend().eventFromException(message, hint); - - return this.captureEvent(event, hint, scope); - })(), - ); + public captureMessage(message: string, level?: Severity, hint?: EventHint, scope?: Scope): string | undefined { + let eventId: string | undefined = hint && hint.event_id; + + const promisedEvent = isPrimitive(message) + ? this.getBackend().eventFromMessage(`${message}`, level, hint) + : this.getBackend().eventFromException(message, hint); + + promisedEvent + .then(event => this.processEvent(event, hint, scope)) + .then(finalEvent => { + eventId = finalEvent.event_id; + }) + .catch(reason => { + logger.log(reason); + }); + + return eventId; } /** * @inheritDoc */ - public async captureEvent(event: SentryEvent, hint?: SentryEventHint, scope?: Scope): Promise { - // Adding this here is technically not correct since if you call captureMessage/captureException it's already - // buffered. But since we not really need the count and we only need to know if the buffer is full or not, - // This is fine... - return this.buffer.add( - (async () => - this.processEvent(event, async finalEvent => this.getBackend().sendEvent(finalEvent), hint, scope))(), - ); - } - - /** - * @inheritDoc - */ - public addBreadcrumb(breadcrumb: Breadcrumb, hint?: SentryBreadcrumbHint, scope?: Scope): void { - const { beforeBreadcrumb, maxBreadcrumbs = DEFAULT_BREADCRUMBS } = this.getOptions(); - - if (maxBreadcrumbs <= 0) { - return; - } - - const timestamp = new Date().getTime() / 1000; - const mergedBreadcrumb = { timestamp, ...breadcrumb }; - const finalBreadcrumb = beforeBreadcrumb - ? (consoleSandbox(() => beforeBreadcrumb(mergedBreadcrumb, hint)) as Breadcrumb | null) - : mergedBreadcrumb; - - if (finalBreadcrumb === null) { - return; - } - - if (this.getBackend().storeBreadcrumb(finalBreadcrumb) && scope) { - scope.addBreadcrumb(finalBreadcrumb, Math.min(maxBreadcrumbs, MAX_BREADCRUMBS)); - } + public captureEvent(event: Event, hint?: EventHint, scope?: Scope): string | undefined { + let eventId: string | undefined = hint && hint.event_id; + this.processEvent(event, hint, scope) + .then(finalEvent => { + eventId = finalEvent.event_id; + }) + .catch(reason => { + logger.log(reason); + }); + return eventId; } /** @@ -241,10 +177,10 @@ export abstract class BaseClient implement * @param scope A scope containing event metadata. * @returns A new event with more information. */ - protected async prepareEvent(event: SentryEvent, scope?: Scope, hint?: SentryEventHint): Promise { - const { environment, maxBreadcrumbs = DEFAULT_BREADCRUMBS, release, dist } = this.getOptions(); + protected prepareEvent(event: Event, scope?: Scope, hint?: EventHint): SyncPromise { + const { environment, release, dist } = this.getOptions(); - const prepared = { ...event }; + const prepared: Event = { ...event }; if (prepared.environment === undefined && environment !== undefined) { prepared.environment = environment; } @@ -274,13 +210,17 @@ export abstract class BaseClient implement prepared.event_id = uuid4(); } + // We prepare the result here with a resolved Event. + let result = SyncPromise.resolve(prepared); + // This should be the last thing called, since we want that // {@link Hub.addEventProcessor} gets the finished prepared event. if (scope) { - return scope.applyToEvent(prepared, hint, Math.min(maxBreadcrumbs, MAX_BREADCRUMBS)); + // In case we have a hub we reassign it. + result = scope.applyToEvent(prepared, hint); } - return prepared; + return result; } /** @@ -290,116 +230,112 @@ export abstract class BaseClient implement * platform specific meta data (such as the User's IP address) must be added * by the SDK implementor. * - * The returned event status offers clues to whether the event was sent to - * Sentry and accepted there. If the {@link Options.shouldSend} hook returns - * `false`, the status will be {@link SendStatus.Skipped}. If the rate limit - * was exceeded, the status will be {@link SendStatus.RateLimit}. * * @param event The event to send to Sentry. - * @param send A function to actually send the event. - * @param scope A scope containing event metadata. * @param hint May contain additional informartion about the original exception. - * @returns A Promise that resolves with the event status. + * @param scope A scope containing event metadata. + * @returns A SyncPromise that resolves with the event or rejects in case event was/will not be send. */ - protected async processEvent( - event: SentryEvent, - send: (finalEvent: SentryEvent) => Promise, - hint?: SentryEventHint, - scope?: Scope, - ): Promise { + protected processEvent(event: Event, hint?: EventHint, scope?: Scope): SyncPromise { + const { beforeSend, sampleRate } = this.getOptions(); + if (!this.isEnabled()) { - return { - status: Status.Skipped, - }; + return SyncPromise.reject('SDK not enabled, will not send event.'); } - const { beforeSend, sampleRate } = this.getOptions(); - // 1.0 === 100% events are sent // 0.0 === 0% events are sent if (typeof sampleRate === 'number' && Math.random() > sampleRate) { - return { - status: Status.Skipped, - }; + return SyncPromise.reject('This event has been sampled, will not send event.'); } - const prepared = await this.prepareEvent(event, scope, hint); - if (prepared === null) { - return { - status: Status.Skipped, - }; - } - - let finalEvent: SentryEvent | null = prepared; - - try { - const isInternalException = hint && hint.data && (hint.data as { [key: string]: any }).__sentry__ === true; - if (!isInternalException && beforeSend) { - finalEvent = await beforeSend(prepared, hint); - if ((typeof finalEvent as any) === 'undefined') { - logger.error('`beforeSend` method has to return `null` or a valid event'); + return new SyncPromise((resolve, reject) => { + this.prepareEvent(event, scope, hint).then(prepared => { + if (prepared === null) { + reject('An event processor returned null, will not send event.'); + return; } - } - } catch (exception) { - forget( - this.captureException(exception, { - data: { - __sentry__: true, - }, - originalException: exception as Error, - }), - ); - - return { - reason: 'Event processing in beforeSend method threw an exception', - status: Status.Invalid, - }; - } - if (finalEvent === null) { - return { - reason: 'Event dropped due to being discarded by beforeSend method', - status: Status.Skipped, - }; - } + let finalEvent: Event | null = prepared; + + try { + const isInternalException = hint && hint.data && (hint.data as { [key: string]: any }).__sentry__ === true; + if (isInternalException || !beforeSend) { + this.getBackend().sendEvent(finalEvent); + resolve(finalEvent); + return; + } + + const beforeSendResult = beforeSend(prepared, hint); + if ((typeof beforeSendResult as any) === 'undefined') { + logger.error('`beforeSend` method has to return `null` or a valid event.'); + } else if (isThenable(beforeSendResult)) { + this.handleAsyncBeforeSend(beforeSendResult as Promise, resolve, reject); + } else { + finalEvent = beforeSendResult as Event | null; + + if (finalEvent === null) { + logger.log('`beforeSend` returned `null`, will not send event.'); + resolve(null); + return; + } + + // From here on we are really async + this.getBackend().sendEvent(finalEvent); + resolve(finalEvent); + } + } catch (exception) { + this.captureException(exception, { + data: { + __sentry__: true, + }, + originalException: exception as Error, + }); + reject('`beforeSend` throw an error, will not send event.'); + } + }); + }); + } - try { - const response = await send(finalEvent); - response.event = finalEvent; - - if (response.status === Status.RateLimit) { - // TODO: Handle rate limits and maintain a queue. For now, we require SDK - // implementors to override this method and handle it themselves. - } - return response; - } catch (error) { - // We have a catch here since the transport can reject the request internally. - // If we do not catch this here, we will run into an endless loop. - logger.error(`${error}`); - return { - reason: `${error}`, - status: Status.Failed, - }; - } + /** + * Resolves before send Promise and calls resolve/reject on parent SyncPromise. + */ + private handleAsyncBeforeSend( + beforeSend: Promise, + resolve: (event: Event) => void, + reject: (reason: string) => void, + ): void { + beforeSend + .then(processedEvent => { + if (processedEvent === null) { + reject('`beforeSend` returned `null`, will not send event.'); + return; + } + // From here on we are really async + this.getBackend().sendEvent(processedEvent); + resolve(processedEvent); + }) + .catch(e => { + reject(`beforeSend rejected with ${e}`); + }); } /** * @inheritDoc */ public async flush(timeout?: number): Promise { - return (await Promise.all([ - this.getBackend() - .getTransport() - .close(timeout), - this.buffer.drain(timeout), - ])).reduce((prev, current) => prev && current); + return this.getBackend() + .getTransport() + .close(timeout); } /** * @inheritDoc */ public async close(timeout?: number): Promise { - return this.flush(timeout); + return this.flush(timeout).finally(() => { + this.getOptions().enabled = false; + }); } /** diff --git a/packages/core/src/dsn.ts b/packages/core/src/dsn.ts index 9287b3c98ed5..643ffa7e662a 100644 --- a/packages/core/src/dsn.ts +++ b/packages/core/src/dsn.ts @@ -1,7 +1,5 @@ import { DsnComponents, DsnLike, DsnProtocol } from '@sentry/types'; -import { isNaN } from '@sentry/utils/is'; -import { assign } from '@sentry/utils/object'; -import { SentryError } from './error'; +import { SentryError } from '@sentry/utils/error'; /** Regular expression used to parse a Dsn. */ const DSN_REGEX = /^(?:(\w+):)\/\/(?:(\w+)(?::(\w+))?@)([\w\.-]+)(?::(\d+))?\/(.+)/; @@ -67,7 +65,7 @@ export class Dsn implements DsnComponents { path = split.slice(0, -1).join('/'); projectId = split.pop() as string; } - assign(this, { host, pass, path, projectId, port, protocol, user }); + Object.assign(this, { host, pass, path, projectId, port, protocol, user }); } /** Maps Dsn components into this instance. */ @@ -93,7 +91,7 @@ export class Dsn implements DsnComponents { throw new SentryError(`Invalid Dsn: Unsupported protocol "${this.protocol}"`); } - if (this.port && isNaN(parseInt(this.port, 10))) { + if (this.port && Number.isNaN(parseInt(this.port, 10))) { throw new SentryError(`Invalid Dsn: Invalid port number "${this.port}"`); } } diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index aa425970895f..2d8e542fd022 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -11,9 +11,6 @@ export { API } from './api'; export { BaseClient } from './baseclient'; export { BackendClass, BaseBackend } from './basebackend'; export { Dsn } from './dsn'; -export { SentryError } from './error'; -export { PromiseBuffer } from './promisebuffer'; -export { Backend, Client, LogLevel, Options } from './interfaces'; export { initAndBind, ClientClass } from './sdk'; export { NoopTransport } from './transports/noop'; diff --git a/packages/core/src/integration.ts b/packages/core/src/integration.ts index 37317986e162..2fc2682e1c81 100644 --- a/packages/core/src/integration.ts +++ b/packages/core/src/integration.ts @@ -1,6 +1,5 @@ -import { Integration } from '@sentry/types'; +import { Integration, Options } from '@sentry/types'; import { logger } from '@sentry/utils/logger'; -import { Options } from './interfaces'; export const installedIntegrations: string[] = []; @@ -47,25 +46,11 @@ export function getIntegrationsToSetup(options: Options): Integration[] { } /** Setup given integration */ -export function setupIntegration(integration: Integration, options: Options): void { +export function setupIntegration(integration: Integration): void { if (installedIntegrations.indexOf(getIntegrationName(integration)) !== -1) { return; } - - try { - integration.setupOnce(); - } catch (_Oo) { - /** @deprecated */ - // TODO: Remove in v5 - - // tslint:disable:deprecation - if (integration.install) { - logger.warn(`Integration ${getIntegrationName(integration)}: The install method is deprecated. Use "setupOnce".`); - integration.install(options); - } - // tslint:enable:deprecation - } - + integration.setupOnce(); installedIntegrations.push(getIntegrationName(integration)); logger.log(`Integration installed: ${getIntegrationName(integration)}`); } @@ -80,7 +65,7 @@ export function setupIntegrations(options: O): IntegrationInd const integrations: IntegrationIndex = {}; getIntegrationsToSetup(options).forEach(integration => { integrations[getIntegrationName(integration)] = integration; - setupIntegration(integration, options); + setupIntegration(integration); }); return integrations; } diff --git a/packages/core/src/integrations/dedupe.ts b/packages/core/src/integrations/dedupe.ts index fafa4ca8ce70..478d587640fc 100644 --- a/packages/core/src/integrations/dedupe.ts +++ b/packages/core/src/integrations/dedupe.ts @@ -1,5 +1,5 @@ import { addGlobalEventProcessor, getCurrentHub } from '@sentry/hub'; -import { Integration, SentryEvent, SentryException, StackFrame } from '@sentry/types'; +import { Event, Exception, Integration, StackFrame } from '@sentry/types'; import { logger } from '@sentry/utils/logger'; import { getEventDescription } from '@sentry/utils/misc'; @@ -8,7 +8,7 @@ export class Dedupe implements Integration { /** * @inheritDoc */ - private previousEvent?: SentryEvent; + private previousEvent?: Event; /** * @inheritDoc @@ -24,7 +24,7 @@ export class Dedupe implements Integration { * @inheritDoc */ public setupOnce(): void { - addGlobalEventProcessor(async (currentEvent: SentryEvent) => { + addGlobalEventProcessor((currentEvent: Event) => { const self = getCurrentHub().getIntegration(Dedupe); if (self) { // Juuust in case something goes wrong @@ -43,7 +43,7 @@ export class Dedupe implements Integration { } /** JSDoc */ - public shouldDropEvent(currentEvent: SentryEvent, previousEvent?: SentryEvent): boolean { + public shouldDropEvent(currentEvent: Event, previousEvent?: Event): boolean { if (!previousEvent) { return false; } @@ -70,7 +70,7 @@ export class Dedupe implements Integration { } /** JSDoc */ - private isSameMessageEvent(currentEvent: SentryEvent, previousEvent: SentryEvent): boolean { + private isSameMessageEvent(currentEvent: Event, previousEvent: Event): boolean { const currentMessage = currentEvent.message; const previousMessage = previousEvent.message; @@ -100,7 +100,7 @@ export class Dedupe implements Integration { } /** JSDoc */ - private getFramesFromEvent(event: SentryEvent): StackFrame[] | undefined { + private getFramesFromEvent(event: Event): StackFrame[] | undefined { const exception = event.exception; if (exception) { @@ -118,7 +118,7 @@ export class Dedupe implements Integration { } /** JSDoc */ - private isSameStacktrace(currentEvent: SentryEvent, previousEvent: SentryEvent): boolean { + private isSameStacktrace(currentEvent: Event, previousEvent: Event): boolean { let currentFrames = this.getFramesFromEvent(currentEvent); let previousFrames = this.getFramesFromEvent(previousEvent); @@ -159,12 +159,12 @@ export class Dedupe implements Integration { } /** JSDoc */ - private getExceptionFromEvent(event: SentryEvent): SentryException | undefined { + private getExceptionFromEvent(event: Event): Exception | undefined { return event.exception && event.exception.values && event.exception.values[0]; } /** JSDoc */ - private isSameExceptionEvent(currentEvent: SentryEvent, previousEvent: SentryEvent): boolean { + private isSameExceptionEvent(currentEvent: Event, previousEvent: Event): boolean { const previousException = this.getExceptionFromEvent(previousEvent); const currentException = this.getExceptionFromEvent(currentEvent); @@ -188,7 +188,7 @@ export class Dedupe implements Integration { } /** JSDoc */ - private isSameFingerprint(currentEvent: SentryEvent, previousEvent: SentryEvent): boolean { + private isSameFingerprint(currentEvent: Event, previousEvent: Event): boolean { let currentFingerprint = currentEvent.fingerprint; let previousFingerprint = previousEvent.fingerprint; diff --git a/packages/core/src/integrations/extraerrordata.ts b/packages/core/src/integrations/extraerrordata.ts index 263cd96f2a03..bad2f877cf78 100644 --- a/packages/core/src/integrations/extraerrordata.ts +++ b/packages/core/src/integrations/extraerrordata.ts @@ -1,15 +1,8 @@ import { addGlobalEventProcessor, getCurrentHub } from '@sentry/hub'; -import { Integration, SentryEvent, SentryEventHint } from '@sentry/types'; -import { isError, isString } from '@sentry/utils/is'; +import { Event, EventHint, ExtendedError, Integration } from '@sentry/types'; +import { isError, isPlainObject } from '@sentry/utils/is'; import { logger } from '@sentry/utils/logger'; -import { safeNormalize } from '@sentry/utils/object'; - -/** - * Just an Error object with arbitrary attributes attached to it. - */ -interface ExtendedError extends Error { - [key: string]: unknown; -} +import { normalize } from '@sentry/utils/object'; /** Patch toString calls to return proper name for wrapped functions */ export class ExtraErrorData implements Integration { @@ -27,7 +20,7 @@ export class ExtraErrorData implements Integration { * @inheritDoc */ public setupOnce(): void { - addGlobalEventProcessor(async (event: SentryEvent, hint?: SentryEventHint) => { + addGlobalEventProcessor((event: Event, hint?: EventHint) => { const self = getCurrentHub().getIntegration(ExtraErrorData); if (!self) { return event; @@ -37,9 +30,9 @@ export class ExtraErrorData implements Integration { } /** - * Attaches extracted information from the Error object to extra field in the SentryEvent + * Attaches extracted information from the Error object to extra field in the Event */ - public enhanceEventWithErrorData(event: SentryEvent, hint?: SentryEventHint): SentryEvent { + public enhanceEventWithErrorData(event: Event, hint?: EventHint): Event { if (!hint || !hint.originalException || !isError(hint.originalException)) { return event; } @@ -50,13 +43,15 @@ export class ExtraErrorData implements Integration { let extra = { ...event.extra, }; - const normalizedErrorData = safeNormalize(errorData); - if (!isString(normalizedErrorData)) { + + const normalizedErrorData = normalize(errorData); + if (isPlainObject(normalizedErrorData)) { extra = { ...event.extra, ...normalizedErrorData, }; } + return { ...event, extra, @@ -84,6 +79,7 @@ export class ExtraErrorData implements Integration { if (isError(value)) { value = (value as Error).name || (value as Error).constructor.name; } + // tslint:disable:no-unsafe-any extraErrorInfo[key] = value; } result = { diff --git a/packages/core/src/integrations/functiontostring.ts b/packages/core/src/integrations/functiontostring.ts index dc22512deb20..e436fe7d0c8a 100644 --- a/packages/core/src/integrations/functiontostring.ts +++ b/packages/core/src/integrations/functiontostring.ts @@ -1,4 +1,4 @@ -import { Integration, SentryWrappedFunction } from '@sentry/types'; +import { Integration, WrappedFunction } from '@sentry/types'; let originalFunctionToString: () => void; @@ -20,7 +20,7 @@ export class FunctionToString implements Integration { public setupOnce(): void { originalFunctionToString = Function.prototype.toString; - Function.prototype.toString = function(this: SentryWrappedFunction, ...args: any[]): string { + Function.prototype.toString = function(this: WrappedFunction, ...args: any[]): string { const context = this.__sentry__ ? this.__sentry_original__ : this; // tslint:disable-next-line:no-unsafe-any return originalFunctionToString.apply(context, args); diff --git a/packages/core/src/integrations/inboundfilters.ts b/packages/core/src/integrations/inboundfilters.ts index 31f7dc35831c..ce55b23b68ae 100644 --- a/packages/core/src/integrations/inboundfilters.ts +++ b/packages/core/src/integrations/inboundfilters.ts @@ -1,10 +1,8 @@ import { addGlobalEventProcessor, getCurrentHub } from '@sentry/hub'; -import { Integration, SentryEvent } from '@sentry/types'; +import { Client, Event, Integration } from '@sentry/types'; import { isRegExp } from '@sentry/utils/is'; import { logger } from '@sentry/utils/logger'; import { getEventDescription } from '@sentry/utils/misc'; -import { includes } from '@sentry/utils/string'; -import { Client } from '../interfaces'; // "Script error." is hard coded into browsers for errors that it can't read. // this is the result of a script being pulled in from an external domain and CORS. @@ -35,7 +33,7 @@ export class InboundFilters implements Integration { * @inheritDoc */ public setupOnce(): void { - addGlobalEventProcessor(async (event: SentryEvent) => { + addGlobalEventProcessor((event: Event) => { const hub = getCurrentHub(); if (!hub) { return event; @@ -54,7 +52,7 @@ export class InboundFilters implements Integration { } /** JSDoc */ - public shouldDropEvent(event: SentryEvent, options: InboundFiltersOptions): boolean { + public shouldDropEvent(event: Event, options: InboundFiltersOptions): boolean { if (this.isSentryError(event, options)) { logger.warn(`Event dropped due to being internal Sentry Error.\nEvent: ${getEventDescription(event)}`); return true; @@ -85,7 +83,7 @@ export class InboundFilters implements Integration { } /** JSDoc */ - public isSentryError(event: SentryEvent, options: InboundFiltersOptions = {}): boolean { + public isSentryError(event: Event, options: InboundFiltersOptions = {}): boolean { if (!options.ignoreInternal) { return false; } @@ -99,7 +97,7 @@ export class InboundFilters implements Integration { } /** JSDoc */ - public isIgnoredError(event: SentryEvent, options: InboundFiltersOptions = {}): boolean { + public isIgnoredError(event: Event, options: InboundFiltersOptions = {}): boolean { if (!options.ignoreErrors || !options.ignoreErrors.length) { return false; } @@ -111,7 +109,7 @@ export class InboundFilters implements Integration { } /** JSDoc */ - public isBlacklistedUrl(event: SentryEvent, options: InboundFiltersOptions = {}): boolean { + public isBlacklistedUrl(event: Event, options: InboundFiltersOptions = {}): boolean { // TODO: Use Glob instead? if (!options.blacklistUrls || !options.blacklistUrls.length) { return false; @@ -121,7 +119,7 @@ export class InboundFilters implements Integration { } /** JSDoc */ - public isWhitelistedUrl(event: SentryEvent, options: InboundFiltersOptions = {}): boolean { + public isWhitelistedUrl(event: Event, options: InboundFiltersOptions = {}): boolean { // TODO: Use Glob instead? if (!options.whitelistUrls || !options.whitelistUrls.length) { return true; @@ -149,14 +147,14 @@ export class InboundFilters implements Integration { if (isRegExp(pattern)) { return (pattern as RegExp).test(value); } else if (typeof pattern === 'string') { - return includes(value, pattern); + return value.includes(pattern); } else { return false; } } /** JSDoc */ - private getPossibleEventMessages(event: SentryEvent): string[] { + private getPossibleEventMessages(event: Event): string[] { if (event.message) { return [event.message]; } else if (event.exception) { @@ -174,7 +172,7 @@ export class InboundFilters implements Integration { } /** JSDoc */ - private getEventFilterUrl(event: SentryEvent): string | null { + private getEventFilterUrl(event: Event): string | null { try { if (event.stacktrace) { // tslint:disable:no-unsafe-any diff --git a/packages/core/src/integrations/index.ts b/packages/core/src/integrations/index.ts index 64f1fc91de67..24708d2c64f9 100644 --- a/packages/core/src/integrations/index.ts +++ b/packages/core/src/integrations/index.ts @@ -1,6 +1,5 @@ export { Dedupe } from './dedupe'; export { FunctionToString } from './functiontostring'; -export { SDKInformation } from './sdkinformation'; export { InboundFilters } from './inboundfilters'; export { ExtraErrorData } from './extraerrordata'; diff --git a/packages/core/src/integrations/pluggable/debug.ts b/packages/core/src/integrations/pluggable/debug.ts index 424969ac7c84..4af6aa19036c 100644 --- a/packages/core/src/integrations/pluggable/debug.ts +++ b/packages/core/src/integrations/pluggable/debug.ts @@ -1,5 +1,5 @@ import { addGlobalEventProcessor, getCurrentHub } from '@sentry/hub'; -import { Integration, SentryEvent, SentryEventHint } from '@sentry/types'; +import { Event, EventHint, Integration } from '@sentry/types'; /** JSDoc */ interface DebugOptions { @@ -37,7 +37,7 @@ export class Debug implements Integration { * @inheritDoc */ public setupOnce(): void { - addGlobalEventProcessor(async (event: SentryEvent, hint?: SentryEventHint) => { + addGlobalEventProcessor((event: Event, hint?: EventHint) => { const self = getCurrentHub().getIntegration(Debug); if (self) { // tslint:disable:no-console diff --git a/packages/core/src/integrations/pluggable/rewriteframes.ts b/packages/core/src/integrations/pluggable/rewriteframes.ts index 976df048048a..18b965102db4 100644 --- a/packages/core/src/integrations/pluggable/rewriteframes.ts +++ b/packages/core/src/integrations/pluggable/rewriteframes.ts @@ -1,8 +1,8 @@ import { addGlobalEventProcessor, getCurrentHub } from '@sentry/hub'; -import { Integration, SentryEvent, StackFrame } from '@sentry/types'; +import { Event, Integration, StackFrame } from '@sentry/types'; import { basename, relative } from '@sentry/utils/path'; -type StackFrameIteratee = (frame: StackFrame) => Promise; +type StackFrameIteratee = (frame: StackFrame) => StackFrame; /** Rewrite event frames paths */ export class RewriteFrames implements Integration { @@ -24,7 +24,7 @@ export class RewriteFrames implements Integration { /** * @inheritDoc */ - private readonly iteratee: StackFrameIteratee = async (frame: StackFrame) => { + private readonly iteratee: StackFrameIteratee = (frame: StackFrame) => { if (frame.filename && frame.filename.startsWith('/')) { const base = this.root ? relative(this.root, frame.filename) : basename(frame.filename); frame.filename = `app:///${base}`; @@ -48,7 +48,7 @@ export class RewriteFrames implements Integration { * @inheritDoc */ public setupOnce(): void { - addGlobalEventProcessor(async event => { + addGlobalEventProcessor(event => { const self = getCurrentHub().getIntegration(RewriteFrames); if (self) { return self.process(event); @@ -58,19 +58,19 @@ export class RewriteFrames implements Integration { } /** JSDoc */ - public async process(event: SentryEvent): Promise { + public process(event: Event): Event { const frames = this.getFramesFromEvent(event); if (frames) { for (const i in frames) { // tslint:disable-next-line - frames[i] = await this.iteratee(frames[i]); + frames[i] = this.iteratee(frames[i]); } } return event; } /** JSDoc */ - private getFramesFromEvent(event: SentryEvent): StackFrame[] | undefined { + private getFramesFromEvent(event: Event): StackFrame[] | undefined { const exception = event.exception; if (exception) { diff --git a/packages/core/src/integrations/sdkinformation.ts b/packages/core/src/integrations/sdkinformation.ts deleted file mode 100644 index 58ce510a5651..000000000000 --- a/packages/core/src/integrations/sdkinformation.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { Integration } from '@sentry/types'; -import { logger } from '@sentry/utils/logger'; - -/** - * @deprecated - * This file can be safely removed in the next major bump - */ - -/** Adds SDK info to an event. */ -export class SDKInformation implements Integration { - /** - * @inheritDoc - */ - public name: string = 'SDKInformation'; - - /** - * @inheritDoc - */ - public setupOnce(): void { - logger.warn( - "SDKInformation Integration is deprecated and can be safely removed. It's functionality has been merged into the SDK's core.", - ); - } -} diff --git a/packages/core/src/interfaces.ts b/packages/core/src/interfaces.ts deleted file mode 100644 index fcd72fa3a2dd..000000000000 --- a/packages/core/src/interfaces.ts +++ /dev/null @@ -1,295 +0,0 @@ -import { Scope } from '@sentry/hub'; -import { - Breadcrumb, - Integration, - IntegrationClass, - SentryBreadcrumbHint, - SentryEvent, - SentryEventHint, - SentryResponse, - Severity, - Transport, - TransportClass, - TransportOptions, -} from '@sentry/types'; -import { Dsn } from './dsn'; - -/** Console logging verbosity for the SDK. */ -export enum LogLevel { - /** No logs will be generated. */ - None = 0, - /** Only SDK internal errors will be logged. */ - Error = 1, - /** Information useful for debugging the SDK will be logged. */ - Debug = 2, - /** All SDK actions will be logged. */ - Verbose = 3, -} - -/** Base configuration options for every SDK. */ -export interface Options { - /** - * Enable debug functionality in the SDK itself - */ - debug?: boolean; - - /** - * Specifies whether this SDK should activate and send events to Sentry. - * Disabling the SDK reduces all overhead from instrumentation, collecting - * breadcrumbs and capturing events. Defaults to true. - */ - enabled?: boolean; - - /** - * The Dsn used to connect to Sentry and identify the project. If omitted, the - * SDK will not send any data to Sentry. - */ - dsn?: string; - - /** - * If this is set to false, default integrations will not be added, otherwise this will internally be set to the - * recommended default integrations. - */ - defaultIntegrations?: false | Integration[]; - - /** - * List of integrations that should be installed after SDK was initialized. - * Accepts either a list of integrations or a function that receives - * default integrations and returns a new, updated list. - */ - integrations?: Integration[] | ((integrations: Integration[]) => Integration[]); - - /** - * A pattern for error messages which should not be sent to Sentry. - * By default, all errors will be sent. - */ - ignoreErrors?: Array; - - /** - * Transport object that should be used to send events to Sentry - */ - transport?: TransportClass; - - /** - * Options for the default transport that the SDK uses. - */ - transportOptions?: TransportOptions; - - /** - * The release identifier used when uploading respective source maps. Specify - * this value to allow Sentry to resolve the correct source maps when - * processing events. - */ - release?: string; - - /** The current environment of your application (e.g. "production"). */ - environment?: string; - - /** Sets the distribution for all events */ - dist?: string; - - /** The maximum number of breadcrumbs sent with events. Defaults to 100. */ - maxBreadcrumbs?: number; - - /** Console logging verbosity for the SDK Client. */ - logLevel?: LogLevel; - - /** A global sample rate to apply to all events (0 - 1). */ - sampleRate?: number; - - /** Attaches stacktraces to pure capture message / log integrations */ - attachStacktrace?: boolean; - - /** - * A callback invoked during event submission, allowing to optionally modify - * the event before it is sent to Sentry. - * - * Note that you must return a valid event from this callback. If you do not - * wish to modify the event, simply return it at the end. - * Returning null will case the event to be dropped. - * - * @param event The error or message event generated by the SDK. - * @param hint May contain additional information about the original exception. - * @returns A new event that will be sent | null. - */ - beforeSend?(event: SentryEvent, hint?: SentryEventHint): SentryEvent | null | Promise; - - /** - * A callback invoked when adding a breadcrumb, allowing to optionally modify - * it before adding it to future events. - * - * Note that you must return a valid breadcrumb from this callback. If you do - * not wish to modify the breadcrumb, simply return it at the end. - * Returning null will case the breadcrumb to be dropped. - * - * @param breadcrumb The breadcrumb as created by the SDK. - * @returns The breadcrumb that will be added | null. - */ - beforeBreadcrumb?(breadcrumb: Breadcrumb, hint?: SentryBreadcrumbHint): Breadcrumb | null; -} - -/** - * User-Facing Sentry SDK Client Client. - * - * This interface contains all methods to interface with the SDK once it has - * been installed. It allows to send events to Sentry, record breadcrumbs and - * set a context included in every event. Since the SDK mutates its environment, - * there will only be one instance during runtime. To retrieve that instance, - * use {@link Client.getInstance}. - * - * Note that the call to {@link Client.install} should occur as early as - * possible so that even errors during startup can be recorded reliably: - * - * @example - * import { captureMessage } from '@sentry/node'; - * captureMessage('Custom message'); - */ -export interface Client { - /** - * Installs the SDK if it hasn't been installed already. - * - * Since this performs modifications in the environment, such as instrumenting - * library functionality or adding signal handlers, this method will only - * execute once and cache its result. - * - * @returns If the installation was the successful or not. - */ - install(): boolean; - - /** - * Captures an exception event and sends it to Sentry. - * - * @param exception An exception-like object. - * @param hint May contain additional information about the original exception. - * @param scope An optional scope containing event metadata. - * @returns SentryResponse status and event - */ - captureException(exception: any, hint?: SentryEventHint, scope?: Scope): Promise; - - /** - * Captures a message event and sends it to Sentry. - * - * @param message The message to send to Sentry. - * @param level Define the level of the message. - * @param hint May contain additional information about the original exception. - * @param scope An optional scope containing event metadata. - * @returns SentryResponse status and event - */ - captureMessage(message: string, level?: Severity, hint?: SentryEventHint, scope?: Scope): Promise; - - /** - * Captures a manually created event and sends it to Sentry. - * - * @param event The event to send to Sentry. - * @param hint May contain additional information about the original exception. - * @param scope An optional scope containing event metadata. - * @returns SentryResponse status and event - */ - captureEvent(event: SentryEvent, hint?: SentryEventHint, scope?: Scope): Promise; - - /** - * Records a new breadcrumb which will be attached to future events. - * - * Breadcrumbs will be added to subsequent events to provide more context on - * user's actions prior to an error or crash. To configure the maximum number - * of breadcrumbs, use {@link Options.maxBreadcrumbs}. - * - * @param breadcrumb The breadcrumb to record. - * @param hint May contain additional information about the original breadcrumb. - * @param scope An optional scope to store this breadcrumb in. - */ - addBreadcrumb(breadcrumb: Breadcrumb, hint?: SentryBreadcrumbHint, scope?: Scope): void; - - /** Returns the current Dsn. */ - getDsn(): Dsn | undefined; - - /** Returns the current options. */ - getOptions(): O; - - /** - * A promise that resolves when all current events have been sent. - * If you provide a timeout and the queue takes longer to drain the promise returns false. - * - * @param timeout Maximum time in ms the client should wait. - */ - close(timeout?: number): Promise; - - /** - * A promise that resolves when all current events have been sent. - * If you provide a timeout and the queue takes longer to drain the promise returns false. - * - * @param timeout Maximum time in ms the client should wait. - */ - flush(timeout?: number): Promise; - - /** Returns an array of installed integrations on the client. */ - getIntegration(integartion: IntegrationClass): T | null; -} - -/** - * Internal platform-dependent Sentry SDK Backend. - * - * While {@link Client} contains business logic specific to an SDK, the - * Backend offers platform specific implementations for low-level operations. - * These are persisting and loading information, sending events, and hooking - * into the environment. - * - * Backends receive a handle to the Client in their constructor. When a - * Backend automatically generates events or breadcrumbs, it must pass them to - * the Client for validation and processing first. - * - * Usually, the Client will be of corresponding type, e.g. NodeBackend - * receives NodeClient. However, higher-level SDKs can choose to instanciate - * multiple Backends and delegate tasks between them. In this case, an event - * generated by one backend might very well be sent by another one. - * - * The client also provides access to options via {@link Client.getOptions} - * and context via {@link Client.getContext}. Note that the user might update - * these any time and they should not be cached. - */ -export interface Backend { - /** Installs the SDK into the environment. */ - install?(): boolean; - - /** Creates a {@link SentryEvent} from an exception. */ - eventFromException(exception: any, hint?: SentryEventHint): Promise; - - /** Creates a {@link SentryEvent} from a plain message. */ - eventFromMessage(message: string, level?: Severity, hint?: SentryEventHint): Promise; - - /** Submits the event to Sentry */ - sendEvent(event: SentryEvent): Promise; - - /** - * Receives a breadcrumb and stores it in a platform-dependent way. - * - * This function is invoked by the client before merging the breadcrumb into - * the scope. Return `false` to prevent this breadcrumb from being merged. - * This should be done for custom breadcrumb management in the backend. - * - * In most cases, this method does not have to perform any action and can - * simply return `true`. It can either be synchronous or asynchronous. - * - * @param breadcrumb The breadcrumb to store. - * @returns True if the breadcrumb should be merged by the client. - */ - storeBreadcrumb(breadcrumb: Breadcrumb): boolean; - - /** - * Receives the whole scope and stores it in a platform-dependent way. - * - * This function is invoked by the scope after the scope is configured. - * This should be done for custom context management in the backend. - * - * @param scope The scope to store. - */ - storeScope(scope: Scope): void; - - /** - * Returns the transport that is used by the backend. - * Please note that the transport gets lazy initialized so it will only be there once the first event has been sent. - * - * @returns The transport. - */ - getTransport(): Transport; -} diff --git a/packages/core/src/sdk.ts b/packages/core/src/sdk.ts index 855120467f62..de30c17004b3 100644 --- a/packages/core/src/sdk.ts +++ b/packages/core/src/sdk.ts @@ -1,11 +1,9 @@ import { getCurrentHub } from '@sentry/hub'; +import { Client, Options } from '@sentry/types'; import { logger } from '@sentry/utils/logger'; -import { Client, Options } from './interfaces'; /** A class object that can instanciate Client objects. */ -export interface ClientClass { - new (options: O): F; -} +export type ClientClass = new (options: O) => F; /** * Internal function to create a new SDK client instance. The client is @@ -22,5 +20,4 @@ export function initAndBind(clientClass: Cl const client = new clientClass(options); getCurrentHub().bindClient(client); - client.install(); } diff --git a/packages/core/src/transports/noop.ts b/packages/core/src/transports/noop.ts index 65ff574a65f8..21e56df43d79 100644 --- a/packages/core/src/transports/noop.ts +++ b/packages/core/src/transports/noop.ts @@ -1,11 +1,11 @@ -import { SentryResponse, Status, Transport } from '@sentry/types'; +import { Event, Response, Status, Transport } from '@sentry/types'; /** Noop transport */ export class NoopTransport implements Transport { /** * @inheritDoc */ - public async sendEvent(_: string): Promise { + public async sendEvent(_: Event): Promise { return Promise.resolve({ reason: `NoopTransport: Event has been skipped because no Dsn is configured.`, status: Status.Skipped, diff --git a/packages/core/test/lib/base.test.ts b/packages/core/test/lib/base.test.ts index 5698c353bd94..111ba84c92f5 100644 --- a/packages/core/test/lib/base.test.ts +++ b/packages/core/test/lib/base.test.ts @@ -1,6 +1,6 @@ -import { Scope } from '@sentry/hub'; -import { SentryEvent, Status } from '@sentry/types'; -import { SentryError } from '../../src/error'; +import { Hub, Scope } from '@sentry/hub'; +import { Event } from '@sentry/types'; +import { SentryError } from '@sentry/utils/error'; import { TestBackend } from '../mocks/backend'; import { TestClient } from '../mocks/client'; import { TestIntegration } from '../mocks/integration'; @@ -38,57 +38,33 @@ jest.mock('@sentry/utils/string', () => ({ })); describe('BaseClient', () => { + beforeEach(() => { + TestBackend.sendEventCalled = undefined; + TestBackend.instance = undefined; + }); + describe('constructor() / getDsn()', () => { test('returns the Dsn', () => { + expect.assertions(1); const client = new TestClient({ dsn: PUBLIC_DSN }); expect(client.getDsn()!.toString()).toBe(PUBLIC_DSN); }); test('allows missing Dsn', () => { + expect.assertions(1); const client = new TestClient({}); expect(client.getDsn()).toBeUndefined(); }); test('throws with invalid Dsn', () => { + expect.assertions(1); expect(() => new TestClient({ dsn: 'abc' })).toThrow(SentryError); }); }); - describe('install()', () => { - test('calls install() on Backend', async () => { - const client = new TestClient({ dsn: PUBLIC_DSN }); - client.install(); - expect(TestBackend.instance!.installed).toBe(1); - }); - - test('calls install() only once', async () => { - const client = new TestClient({ dsn: PUBLIC_DSN }); - client.install(); - client.install(); - expect(TestBackend.instance!.installed).toBe(1); - }); - - test('resolves the result of install()', async () => { - const client = new TestClient({ mockInstallFailure: true }); - const installed = client.install(); - expect(installed).toBeFalsy(); - }); - - test('does not install() when disabled', async () => { - const client = new TestClient({ enabled: false, dsn: PUBLIC_DSN }); - client.install(); - expect(TestBackend.instance!.installed).toBe(0); - }); - - test('does not install() without Dsn', async () => { - const client = new TestClient({}); - client.install(); - expect(TestBackend.instance!.installed).toBe(0); - }); - }); - describe('getOptions()', () => { test('returns the options', () => { + expect.assertions(1); const options = { dsn: PUBLIC_DSN, test: true }; const client = new TestClient(options); expect(client.getOptions()).toEqual(options); @@ -97,77 +73,93 @@ describe('BaseClient', () => { describe('getBreadcrumbs() / addBreadcrumb()', () => { test('adds a breadcrumb', () => { + expect.assertions(1); const client = new TestClient({}); const scope = new Scope(); + const hub = new Hub(client, scope); scope.addBreadcrumb({ message: 'hello' }, 100); - client.addBreadcrumb({ message: 'world' }, undefined, scope); + hub.addBreadcrumb({ message: 'world' }); expect((scope as any).breadcrumbs[1].message).toBe('world'); }); test('adds a timestamp to new breadcrumbs', () => { + expect.assertions(1); const client = new TestClient({}); const scope = new Scope(); + const hub = new Hub(client, scope); scope.addBreadcrumb({ message: 'hello' }, 100); - client.addBreadcrumb({ message: 'world' }, undefined, scope); + hub.addBreadcrumb({ message: 'world' }); expect((scope as any).breadcrumbs[1].timestamp).toBeGreaterThan(1); }); test('discards breadcrumbs beyond maxBreadcrumbs', () => { + expect.assertions(2); const client = new TestClient({ maxBreadcrumbs: 1 }); const scope = new Scope(); + const hub = new Hub(client, scope); scope.addBreadcrumb({ message: 'hello' }, 100); - client.addBreadcrumb({ message: 'world' }, undefined, scope); + hub.addBreadcrumb({ message: 'world' }); expect((scope as any).breadcrumbs.length).toBe(1); expect((scope as any).breadcrumbs[0].message).toBe('world'); }); test('allows concurrent updates', () => { + expect.assertions(1); const client = new TestClient({}); const scope = new Scope(); - client.addBreadcrumb({ message: 'hello' }, undefined, scope); - client.addBreadcrumb({ message: 'world' }, undefined, scope); + const hub = new Hub(client, scope); + hub.addBreadcrumb({ message: 'hello' }); + hub.addBreadcrumb({ message: 'world' }); expect((scope as any).breadcrumbs).toHaveLength(2); }); test('calls beforeBreadcrumb and adds the breadcrumb without any changes', () => { + expect.assertions(1); const beforeBreadcrumb = jest.fn(breadcrumb => breadcrumb); const client = new TestClient({ beforeBreadcrumb }); const scope = new Scope(); - client.addBreadcrumb({ message: 'hello' }, undefined, scope); + const hub = new Hub(client, scope); + hub.addBreadcrumb({ message: 'hello' }); expect((scope as any).breadcrumbs[0].message).toBe('hello'); }); test('calls beforeBreadcrumb and uses the new one', () => { + expect.assertions(1); const beforeBreadcrumb = jest.fn(() => ({ message: 'changed' })); const client = new TestClient({ beforeBreadcrumb }); const scope = new Scope(); - client.addBreadcrumb({ message: 'hello' }, undefined, scope); + const hub = new Hub(client, scope); + hub.addBreadcrumb({ message: 'hello' }); expect((scope as any).breadcrumbs[0].message).toBe('changed'); }); test('calls beforeBreadcrumb and discards the breadcrumb when returned null', () => { + expect.assertions(1); const beforeBreadcrumb = jest.fn(() => null); const client = new TestClient({ beforeBreadcrumb }); const scope = new Scope(); - client.addBreadcrumb({ message: 'hello' }, undefined, scope); + const hub = new Hub(client, scope); + hub.addBreadcrumb({ message: 'hello' }); expect((scope as any).breadcrumbs.length).toBe(0); }); test('calls beforeBreadcrumb gets an access to a hint as a second argument', () => { + expect.assertions(2); const beforeBreadcrumb = jest.fn((breadcrumb, hint) => ({ ...breadcrumb, data: hint.data })); const client = new TestClient({ beforeBreadcrumb }); const scope = new Scope(); - client.addBreadcrumb({ message: 'hello' }, { data: 'someRandomThing' }, scope); + const hub = new Hub(client, scope); + hub.addBreadcrumb({ message: 'hello' }, { data: 'someRandomThing' }); expect((scope as any).breadcrumbs[0].message).toBe('hello'); expect((scope as any).breadcrumbs[0].data).toBe('someRandomThing'); }); }); describe('captures', () => { - test('captures and sends exceptions', async () => { + test('captures and sends exceptions', () => { + expect.assertions(1); const client = new TestClient({ dsn: PUBLIC_DSN }); - const scope = new Scope(); - await client.captureException(new Error('test exception'), undefined, scope); + client.captureException(new Error('test exception')); expect(TestBackend.instance!.event).toEqual({ event_id: '42', exception: { @@ -181,54 +173,56 @@ describe('BaseClient', () => { }); }); - test('captures and sends messages', async () => { + test('captures and sends messages', () => { + expect.assertions(1); const client = new TestClient({ dsn: PUBLIC_DSN }); - const scope = new Scope(); - await client.captureMessage('test message', undefined, undefined, scope); + client.captureMessage('test message'); expect(TestBackend.instance!.event).toEqual({ event_id: '42', - fingerprint: ['test message'], message: 'test message', }); }); - test.only('should call eventFromException if input to captureMessage is not a primitive', async () => { + test('should call eventFromException if input to captureMessage is not a primitive', () => { + expect.assertions(2); const client = new TestClient({ dsn: PUBLIC_DSN }); - const scope = new Scope(); const spy = jest.spyOn(TestBackend.instance!, 'eventFromException'); - await client.captureMessage('foo', undefined, undefined, scope); - await client.captureMessage(null, undefined, undefined, scope); - await client.captureMessage(undefined, undefined, undefined, scope); - await client.captureMessage(1, undefined, undefined, scope); - await client.captureMessage(false, undefined, undefined, scope); + client.captureMessage('foo'); + client.captureMessage(null as any); + client.captureMessage(undefined as any); + client.captureMessage(1 as any); + client.captureMessage(false as any); expect(spy.mock.calls.length).toEqual(0); - await client.captureMessage({}, undefined, undefined, scope); - await client.captureMessage([], undefined, undefined, scope); + client.captureMessage({} as any); + client.captureMessage([] as any); expect(spy.mock.calls.length).toEqual(2); }); }); describe('captureEvent() / prepareEvent()', () => { - test('skips when disabled', async () => { + test('skips when disabled', () => { + expect.assertions(1); const client = new TestClient({ enabled: false, dsn: PUBLIC_DSN }); const scope = new Scope(); - await client.captureEvent({}, undefined, scope); + client.captureEvent({}, undefined, scope); expect(TestBackend.instance!.event).toBeUndefined(); }); - test('skips without a Dsn', async () => { + test('skips without a Dsn', () => { + expect.assertions(1); const client = new TestClient({}); const scope = new Scope(); - await client.captureEvent({}, undefined, scope); + client.captureEvent({}, undefined, scope); expect(TestBackend.instance!.event).toBeUndefined(); }); - test('sends an event', async () => { + test('sends an event', () => { + expect.assertions(2); const client = new TestClient({ dsn: PUBLIC_DSN }); const scope = new Scope(); - await client.captureEvent({ message: 'message' }, undefined, scope); + client.captureEvent({ message: 'message' }, undefined, scope); expect(TestBackend.instance!.event!.message).toBe('message'); expect(TestBackend.instance!.event).toEqual({ event_id: '42', @@ -237,13 +231,14 @@ describe('BaseClient', () => { }); }); - test('adds the configured environment', async () => { + test('adds the configured environment', () => { + expect.assertions(1); const client = new TestClient({ dsn: PUBLIC_DSN, environment: 'env', }); const scope = new Scope(); - await client.captureEvent({ message: 'message' }, undefined, scope); + client.captureEvent({ message: 'message' }, undefined, scope); expect(TestBackend.instance!.event!).toEqual({ environment: 'env', event_id: '42', @@ -252,13 +247,14 @@ describe('BaseClient', () => { }); }); - test('adds the configured release', async () => { + test('adds the configured release', () => { + expect.assertions(1); const client = new TestClient({ dsn: PUBLIC_DSN, release: 'v1.0.0', }); const scope = new Scope(); - await client.captureEvent({ message: 'message' }, undefined, scope); + client.captureEvent({ message: 'message' }, undefined, scope); expect(TestBackend.instance!.event!).toEqual({ event_id: '42', fingerprint: ['message'], @@ -267,11 +263,12 @@ describe('BaseClient', () => { }); }); - test('adds breadcrumbs', async () => { + test('adds breadcrumbs', () => { + expect.assertions(1); const client = new TestClient({ dsn: PUBLIC_DSN }); const scope = new Scope(); scope.addBreadcrumb({ message: 'breadcrumb' }, 100); - await client.captureEvent({ message: 'message' }, undefined, scope); + client.captureEvent({ message: 'message' }, undefined, scope); expect(TestBackend.instance!.event!).toEqual({ breadcrumbs: [{ message: 'breadcrumb' }], event_id: '42', @@ -280,27 +277,26 @@ describe('BaseClient', () => { }); }); - test('limits previously saved breadcrumbs', async () => { + test('limits previously saved breadcrumbs', () => { + expect.assertions(2); const client = new TestClient({ dsn: PUBLIC_DSN, maxBreadcrumbs: 1 }); const scope = new Scope(); - scope.addBreadcrumb({ message: '1' }, 100); - scope.addBreadcrumb({ message: '2' }, 200); - await client.captureEvent({ message: 'message' }, undefined, scope); - expect(TestBackend.instance!.event!).toEqual({ - breadcrumbs: [{ message: '2' }], - event_id: '42', - fingerprint: ['message'], - message: 'message', - }); + const hub = new Hub(client, scope); + hub.addBreadcrumb({ message: '1' }); + hub.addBreadcrumb({ message: '2' }); + client.captureEvent({ message: 'message' }, undefined, scope); + expect(TestBackend.instance!.event!.breadcrumbs).toHaveLength(1); + expect(TestBackend.instance!.event!.breadcrumbs![0].message).toEqual('2'); }); - test('adds context data', async () => { + test('adds context data', () => { + expect.assertions(1); const client = new TestClient({ dsn: PUBLIC_DSN }); const scope = new Scope(); scope.setExtra('b', 'b'); scope.setTag('a', 'a'); scope.setUser({ id: 'user' }); - await client.captureEvent({ message: 'message' }, undefined, scope); + client.captureEvent({ message: 'message' }, undefined, scope); expect(TestBackend.instance!.event!).toEqual({ event_id: '42', extra: { b: 'b' }, @@ -311,11 +307,12 @@ describe('BaseClient', () => { }); }); - test('adds fingerprint', async () => { + test('adds fingerprint', () => { + expect.assertions(1); const client = new TestClient({ dsn: PUBLIC_DSN }); const scope = new Scope(); scope.setFingerprint(['abcd']); - await client.captureEvent({ message: 'message' }, undefined, scope); + client.captureEvent({ message: 'message' }, undefined, scope); expect(TestBackend.instance!.event!).toEqual({ event_id: '42', fingerprint: ['abcd'], @@ -323,89 +320,107 @@ describe('BaseClient', () => { }); }); - test('calls beforeSend and uses original event without any changes', async () => { + test('calls beforeSend and uses original event without any changes', () => { + expect.assertions(1); const beforeSend = jest.fn(event => event); const client = new TestClient({ dsn: PUBLIC_DSN, beforeSend }); - const scope = new Scope(); - await client.captureEvent({ message: 'hello' }, undefined, scope); + client.captureEvent({ message: 'hello' }); expect(TestBackend.instance!.event!.message).toBe('hello'); }); - test('calls beforeSend and uses the new one', async () => { - const beforeSend = jest.fn(() => ({ message: 'changed' })); + test('calls beforeSend and uses the new one', () => { + expect.assertions(1); + const beforeSend = jest.fn(() => ({ message: 'changed1' })); const client = new TestClient({ dsn: PUBLIC_DSN, beforeSend }); - const scope = new Scope(); - await client.captureEvent({ message: 'hello' }, undefined, scope); - expect(TestBackend.instance!.event!.message).toBe('changed'); + client.captureEvent({ message: 'hello' }); + expect(TestBackend.instance!.event!.message).toBe('changed1'); }); - test('calls beforeSend and discards the event', async () => { + test('calls beforeSend and discards the event', () => { + expect.assertions(1); const beforeSend = jest.fn(() => null); const client = new TestClient({ dsn: PUBLIC_DSN, beforeSend }); - const scope = new Scope(); - await client.captureEvent({ message: 'hello' }, undefined, scope); + client.captureEvent({ message: 'hello' }); expect(TestBackend.instance!.event).toBeUndefined(); }); - test('calls async beforeSend and uses original event without any changes', async () => { + test('calls async beforeSend and uses original event without any changes', done => { + jest.useFakeTimers(); + expect.assertions(1); const beforeSend = jest.fn( async event => - new Promise(resolve => { - resolve(event); + new Promise(resolve => { + setTimeout(() => { + resolve(event); + }, 1); }), ); const client = new TestClient({ dsn: PUBLIC_DSN, beforeSend }); - const scope = new Scope(); - await client.captureEvent({ message: 'hello' }, undefined, scope); - expect(TestBackend.instance!.event!.message).toBe('hello'); - }); - - test('calls async beforeSend and uses the new one', async () => { + client.captureEvent({ message: 'hello' }); + jest.runOnlyPendingTimers(); + TestBackend.sendEventCalled = (event: Event) => { + expect(event.message).toBe('hello'); + }; + setTimeout(() => { + done(); + }, 5); + jest.runOnlyPendingTimers(); + }); + + test('calls async beforeSend and uses the new one', done => { + jest.useFakeTimers(); + expect.assertions(1); const beforeSend = jest.fn( async () => - new Promise(resolve => { - resolve({ message: 'changed' }); + new Promise(resolve => { + setTimeout(() => { + resolve({ message: 'changed2' }); + }, 1); }), ); - const client = new TestClient({ dsn: PUBLIC_DSN, beforeSend }); - const scope = new Scope(); - await client.captureEvent({ message: 'hello' }, undefined, scope); - expect(TestBackend.instance!.event!.message).toBe('changed'); - }); - test('calls async beforeSend and discards the event', async () => { + const client = new TestClient({ dsn: PUBLIC_DSN, beforeSend }); + client.captureEvent({ message: 'hello' }); + jest.runOnlyPendingTimers(); + TestBackend.sendEventCalled = (event: Event) => { + expect(event.message).toBe('changed2'); + }; + setTimeout(() => { + done(); + }, 5); + jest.runOnlyPendingTimers(); + }); + + test('calls async beforeSend and discards the event', () => { + jest.useFakeTimers(); + expect.assertions(1); const beforeSend = jest.fn( async () => new Promise(resolve => { - resolve(null); + setTimeout(() => { + resolve(null); + }); }), ); const client = new TestClient({ dsn: PUBLIC_DSN, beforeSend }); - const scope = new Scope(); - await client.captureEvent({ message: 'hello' }, undefined, scope); + client.captureEvent({ message: 'hello' }); + jest.runAllTimers(); expect(TestBackend.instance!.event).toBeUndefined(); }); - test('calls beforeSend gets an access to a hint as a second argument', async () => { + test('calls beforeSend gets an access to a hint as a second argument', () => { + expect.assertions(2); const beforeSend = jest.fn((event, hint) => ({ ...event, data: hint.data })); const client = new TestClient({ dsn: PUBLIC_DSN, beforeSend }); - const scope = new Scope(); - await client.captureEvent({ message: 'hello' }, { data: 'someRandomThing' }, scope); + client.captureEvent({ message: 'hello' }, { data: 'someRandomThing' }); expect(TestBackend.instance!.event!.message).toBe('hello'); - expect(TestBackend.instance!.event!.data).toBe('someRandomThing'); - }); - - test("doesn't do anything with rate limits yet", async () => { - const client = new TestClient({ dsn: PUBLIC_DSN }); - TestBackend.instance!.sendEvent = async () => ({ status: Status.RateLimit }); - const scope = new Scope(); - await client.captureEvent({}, undefined, scope); - // TODO: Test rate limiting queues here + expect((TestBackend.instance!.event! as any).data).toBe('someRandomThing'); }); }); describe('integrations', () => { test('setup each one of them on ctor', () => { + expect.assertions(2); const client = new TestClient({ dsn: PUBLIC_DSN, integrations: [new TestIntegration()], diff --git a/packages/core/test/lib/dsn.test.ts b/packages/core/test/lib/dsn.test.ts index fc91da7bf3df..b7251b7ec804 100644 --- a/packages/core/test/lib/dsn.test.ts +++ b/packages/core/test/lib/dsn.test.ts @@ -1,5 +1,5 @@ +import { SentryError } from '@sentry/utils/error'; import { Dsn } from '../../src/dsn'; -import { SentryError } from '../../src/error'; describe('Dsn', () => { describe('fromComponents', () => { diff --git a/packages/core/test/lib/integrations/extraerrordata.test.ts b/packages/core/test/lib/integrations/extraerrordata.test.ts index df409fa94b28..1d1057932404 100644 --- a/packages/core/test/lib/integrations/extraerrordata.test.ts +++ b/packages/core/test/lib/integrations/extraerrordata.test.ts @@ -1,13 +1,6 @@ -import { SentryEvent } from '@sentry/types'; +import { ExtendedError, SentryEvent } from '@sentry/types'; import { ExtraErrorData } from '../../../src/integrations/extraerrordata'; -/** - * Just an Error object with arbitrary attributes attached to it. - */ -interface ExtendedError extends Error { - [key: string]: any; -} - const extraErrorData = new ExtraErrorData(); let event: SentryEvent; diff --git a/packages/core/test/lib/integrations/rewriteframes.test.ts b/packages/core/test/lib/integrations/rewriteframes.test.ts index e524d835448a..e825139877b6 100644 --- a/packages/core/test/lib/integrations/rewriteframes.test.ts +++ b/packages/core/test/lib/integrations/rewriteframes.test.ts @@ -44,14 +44,14 @@ describe('RewriteFrames', () => { rewriteFrames = new RewriteFrames(); }); - it('transforms messageEvent frames', async () => { - const event = await rewriteFrames.process(messageEvent); + it('transforms messageEvent frames', () => { + const event = rewriteFrames.process(messageEvent); expect(event.stacktrace!.frames![0].filename).toEqual('app:///file1.js'); expect(event.stacktrace!.frames![1].filename).toEqual('app:///file2.js'); }); - it('transforms exceptionEvent frames', async () => { - const event = await rewriteFrames.process(exceptionEvent); + it('transforms exceptionEvent frames', () => { + const event = rewriteFrames.process(exceptionEvent); expect(event.exception!.values![0].stacktrace!.frames![0].filename).toEqual('app:///file1.js'); expect(event.exception!.values![0].stacktrace!.frames![1].filename).toEqual('app:///file2.js'); }); @@ -64,14 +64,14 @@ describe('RewriteFrames', () => { }); }); - it('transforms messageEvent frames', async () => { - const event = await rewriteFrames.process(messageEvent); + it('transforms messageEvent frames', () => { + const event = rewriteFrames.process(messageEvent); expect(event.stacktrace!.frames![0].filename).toEqual('app:///src/app/file1.js'); expect(event.stacktrace!.frames![1].filename).toEqual('app:///src/app/file2.js'); }); - it('transforms exceptionEvent frames', async () => { - const event = await rewriteFrames.process(exceptionEvent); + it('transforms exceptionEvent frames', () => { + const event = rewriteFrames.process(exceptionEvent); expect(event.exception!.values![0].stacktrace!.frames![0].filename).toEqual('app:///src/app/file1.js'); expect(event.exception!.values![0].stacktrace!.frames![1].filename).toEqual('app:///src/app/file2.js'); }); @@ -80,7 +80,7 @@ describe('RewriteFrames', () => { describe('can use custom iteratee', () => { beforeEach(() => { rewriteFrames = new RewriteFrames({ - iteratee: async (frame: StackFrame) => ({ + iteratee: (frame: StackFrame) => ({ ...frame, function: 'whoops', }), @@ -88,7 +88,7 @@ describe('RewriteFrames', () => { }); it('transforms messageEvent frames', async () => { - const event = await rewriteFrames.process(messageEvent); + const event = rewriteFrames.process(messageEvent); expect(event.stacktrace!.frames![0].filename).toEqual('/www/src/app/file1.js'); expect(event.stacktrace!.frames![0].function).toEqual('whoops'); expect(event.stacktrace!.frames![1].filename).toEqual('/www/src/app/file2.js'); @@ -96,7 +96,7 @@ describe('RewriteFrames', () => { }); it('transforms exceptionEvent frames', async () => { - const event = await rewriteFrames.process(exceptionEvent); + const event = rewriteFrames.process(exceptionEvent); expect(event.exception!.values![0].stacktrace!.frames![0].filename).toEqual('/www/src/app/file1.js'); expect(event.exception!.values![0].stacktrace!.frames![0].function).toEqual('whoops'); expect(event.exception!.values![0].stacktrace!.frames![1].filename).toEqual('/www/src/app/file2.js'); diff --git a/packages/core/test/mocks/backend.ts b/packages/core/test/mocks/backend.ts index 44dbaa47bdb3..b97ae9876df1 100644 --- a/packages/core/test/mocks/backend.ts +++ b/packages/core/test/mocks/backend.ts @@ -1,6 +1,6 @@ -import { SentryEvent, SentryResponse, Status } from '@sentry/types'; +import { Event, Options } from '@sentry/types'; +import { SyncPromise } from '@sentry/utils/syncpromise'; import { BaseBackend } from '../../src/basebackend'; -import { Options } from '../../src/interfaces'; export interface TestOptions extends Options { test?: boolean; @@ -9,23 +9,17 @@ export interface TestOptions extends Options { export class TestBackend extends BaseBackend { public static instance?: TestBackend; + public static sendEventCalled?: (event: Event) => void; - public installed: number; - public event?: SentryEvent; + public event?: Event; public constructor(protected readonly options: TestOptions) { super(options); TestBackend.instance = this; - this.installed = 0; } - public install(): boolean { - this.installed += 1; - return !this.options.mockInstallFailure; - } - - public async eventFromException(exception: any): Promise { - return { + public eventFromException(exception: any): SyncPromise { + return SyncPromise.resolve({ exception: { values: [ { @@ -34,15 +28,16 @@ export class TestBackend extends BaseBackend { }, ], }, - }; + }); } - public async eventFromMessage(message: string): Promise { - return { message }; + public eventFromMessage(message: string): SyncPromise { + return SyncPromise.resolve({ message }); } - public async sendEvent(event: SentryEvent): Promise { + public sendEvent(event: Event): void { this.event = event; - return { status: Status.Success }; + // tslint:disable-next-line + TestBackend.sendEventCalled && TestBackend.sendEventCalled(event); } } diff --git a/packages/core/test/mocks/integration.ts b/packages/core/test/mocks/integration.ts index 4f89a04fd78f..7e03da10281b 100644 --- a/packages/core/test/mocks/integration.ts +++ b/packages/core/test/mocks/integration.ts @@ -1,6 +1,6 @@ import { getCurrentHub } from '@sentry/hub'; import { configureScope } from '@sentry/minimal'; -import { Integration, SentryEvent } from '@sentry/types'; +import { Event, Integration } from '@sentry/types'; export class TestIntegration implements Integration { public name: string = 'TestIntegration'; @@ -8,7 +8,7 @@ export class TestIntegration implements Integration { public setupOnce(): void { configureScope(scope => { - scope.addEventProcessor(async (event: SentryEvent) => { + scope.addEventProcessor((event: Event) => { if (!getCurrentHub().getIntegration(TestIntegration)) { return event; } diff --git a/packages/hub/LICENSE b/packages/hub/LICENSE index 862c9698194b..8b42db873c95 100644 --- a/packages/hub/LICENSE +++ b/packages/hub/LICENSE @@ -1,23 +1,25 @@ -Copyright (c) 2018 Sentry (https://sentry.io) and individual contributors. +BSD 3-Clause License + +Copyright (c) 2019, Sentry All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - 1. Redistributions of source code must retain the above copyright notice, -this list of conditions and the following disclaimer. +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above copyright -notice, this list of conditions and the following disclaimer in the -documentation and/or other materials provided with the distribution. +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. - 3. Neither the name of the Sentry nor the names of its contributors may be -used to endorse or promote products derived from this software without specific -prior written permission. +* Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR diff --git a/packages/hub/package.json b/packages/hub/package.json index fcd4b70f3693..6dc7b1416fc4 100644 --- a/packages/hub/package.json +++ b/packages/hub/package.json @@ -20,13 +20,13 @@ "tslib": "^1.9.3" }, "devDependencies": { - "jest": "^22.4.3", + "jest": "^24.1.0", "npm-run-all": "^4.1.2", - "prettier": "^1.14.0", + "prettier": "^1.16.4", "prettier-check": "^2.0.0", - "rimraf": "^2.6.2", - "tslint": "^5.11.0", - "typescript": "^3.2.0" + "rimraf": "^2.6.3", + "tslint": "^5.12.1", + "typescript": "^3.3.3" }, "scripts": { "build": "run-p build:es5 build:esm", @@ -44,7 +44,7 @@ "fix:prettier": "prettier --write \"{src,test}/**/*.ts\"", "fix:tslint": "tslint --fix -t stylish -p .", "test": "jest", - "test:watch": "jest --watch --notify" + "test:watch": "jest --watch" }, "jest": { "collectCoverage": true, diff --git a/packages/hub/src/hub.ts b/packages/hub/src/hub.ts index eaafd54d9657..8cc225356c28 100644 --- a/packages/hub/src/hub.ts +++ b/packages/hub/src/hub.ts @@ -1,14 +1,15 @@ import { Breadcrumb, + BreadcrumbHint, + Client, + Event, + EventHint, Integration, IntegrationClass, - SentryBreadcrumbHint, - SentryEvent, - SentryEventHint, Severity, } from '@sentry/types'; import { logger } from '@sentry/utils/logger'; -import { dynamicRequire, getGlobalObject, uuid4 } from '@sentry/utils/misc'; +import { consoleSandbox, dynamicRequire, getGlobalObject, uuid4 } from '@sentry/utils/misc'; import { Carrier, Layer } from './interfaces'; import { Scope } from './scope'; @@ -27,9 +28,23 @@ declare module 'domain' { * * WARNING: This number should only be incresed when the global interface * changes a and new methods are introduced. + * + * @hidden */ export const API_VERSION = 3; +/** + * Default maximum number of breadcrumbs added to an event. Can be overwritten + * with {@link Options.maxBreadcrumbs}. + */ +const DEFAULT_BREADCRUMBS = 30; + +/** + * Absolute maximum number of breadcrumbs added to an event. The + * `maxBreadcrumbs` option cannot be higher than this value. + */ +const MAX_BREADCRUMBS = 100; + /** * Internal class used to make sure we always have the latest internal functions * working in case we have a version conflict. @@ -49,36 +64,20 @@ export class Hub { * @param scope bound to the hub. * @param version number, higher number means higher priority. */ - public constructor(client?: any, scope: Scope = new Scope(), private readonly version: number = API_VERSION) { + public constructor(client?: Client, scope: Scope = new Scope(), private readonly version: number = API_VERSION) { this.stack.push({ client, scope }); } /** * Internal helper function to call a method on the top client if it exists. * - * @param method The method to call on the client/client. - * @param args Arguments to pass to the client/frontend. + * @param method The method to call on the client. + * @param args Arguments to pass to the client function. */ - private invokeClient(method: string, ...args: any[]): void { + private invokeClient(method: M, ...args: any[]): void { const top = this.getStackTop(); if (top && top.client && top.client[method]) { - top.client[method](...args, top.scope); - } - } - - /** - * Internal helper function to call an async method on the top client if it - * exists. - * - * @param method The method to call on the client/client. - * @param args Arguments to pass to the client/frontend. - */ - private invokeClientAsync(method: string, ...args: any[]): void { - const top = this.getStackTop(); - if (top && top.client && top.client[method]) { - top.client[method](...args, top.scope).catch((err: any) => { - logger.error(err); - }); + (top.client as any)[method](...args, top.scope); } } @@ -87,6 +86,8 @@ export class Hub { * * @param version A version number to compare to. * @return True if the given version is newer; otherwise false. + * + * @hidden */ public isOlderThan(version: number): boolean { return this.version < version; @@ -96,20 +97,9 @@ export class Hub { * This binds the given client to the current scope. * @param client An SDK client (client) instance. */ - public bindClient(client?: any): void { + public bindClient(client?: Client): void { const top = this.getStackTop(); top.client = client; - if (top && top.scope && client) { - top.scope.addScopeListener((s: Scope) => { - if (client.getBackend) { - try { - client.getBackend().storeScope(s); - } catch { - // Do nothing - } - } - }); - } } /** @@ -158,7 +148,7 @@ export class Hub { * * @param callback that will be enclosed into push/popScope. */ - public withScope(callback: ((scope: Scope) => void)): void { + public withScope(callback: (scope: Scope) => void): void { const scope = this.pushScope(); try { callback(scope); @@ -194,9 +184,9 @@ export class Hub { * @param hint May contain additional information about the original exception. * @returns The generated eventId. */ - public captureException(exception: any, hint?: SentryEventHint): string { + public captureException(exception: any, hint?: EventHint): string { const eventId = (this._lastEventId = uuid4()); - this.invokeClientAsync('captureException', exception, { + this.invokeClient('captureException', exception, { ...hint, event_id: eventId, }); @@ -211,9 +201,9 @@ export class Hub { * @param hint May contain additional information about the original exception. * @returns The generated eventId. */ - public captureMessage(message: string, level?: Severity, hint?: SentryEventHint): string { + public captureMessage(message: string, level?: Severity, hint?: EventHint): string { const eventId = (this._lastEventId = uuid4()); - this.invokeClientAsync('captureMessage', message, level, { + this.invokeClient('captureMessage', message, level, { ...hint, event_id: eventId, }); @@ -226,9 +216,9 @@ export class Hub { * @param event The event to send to Sentry. * @param hint May contain additional information about the original exception. */ - public captureEvent(event: SentryEvent, hint?: SentryEventHint): string { + public captureEvent(event: Event, hint?: EventHint): string { const eventId = (this._lastEventId = uuid4()); - this.invokeClientAsync('captureEvent', event, { + this.invokeClient('captureEvent', event, { ...hint, event_id: eventId, }); @@ -253,8 +243,30 @@ export class Hub { * @param breadcrumb The breadcrumb to record. * @param hint May contain additional information about the original breadcrumb. */ - public addBreadcrumb(breadcrumb: Breadcrumb, hint?: SentryBreadcrumbHint): void { - this.invokeClient('addBreadcrumb', breadcrumb, { ...hint }); + public addBreadcrumb(breadcrumb: Breadcrumb, hint?: BreadcrumbHint): void { + const top = this.getStackTop(); + + if (!top.scope || !top.client) { + return; + } + + const { beforeBreadcrumb, maxBreadcrumbs = DEFAULT_BREADCRUMBS } = top.client.getOptions(); + + if (maxBreadcrumbs <= 0) { + return; + } + + const timestamp = new Date().getTime() / 1000; + const mergedBreadcrumb = { timestamp, ...breadcrumb }; + const finalBreadcrumb = beforeBreadcrumb + ? (consoleSandbox(() => beforeBreadcrumb(mergedBreadcrumb, hint)) as Breadcrumb | null) + : mergedBreadcrumb; + + if (finalBreadcrumb === null) { + return; + } + + top.scope.addBreadcrumb(finalBreadcrumb, Math.min(maxBreadcrumbs, MAX_BREADCRUMBS)); } /** @@ -275,7 +287,7 @@ export class Hub { * This function is useful if you want to run your own client and hook into an already initialized one * e.g.: Reporting issues to your own sentry when running in your component while still using the users configuration. */ - public run(callback: ((hub: Hub) => void)): void { + public run(callback: (hub: Hub) => void): void { const oldHub = makeMain(this); try { callback(this); @@ -363,7 +375,7 @@ export function getCurrentHub(): Hub { * This will tell whether a carrier has a hub on it or not * @param carrier object */ -export function hasHubOnCarrier(carrier: any): boolean { +function hasHubOnCarrier(carrier: any): boolean { if (carrier && carrier.__SENTRY__ && carrier.__SENTRY__.hub) { return true; } else { @@ -375,6 +387,7 @@ export function hasHubOnCarrier(carrier: any): boolean { * This will create a new {@link Hub} and add to the passed object on * __SENTRY__.hub. * @param carrier object + * @hidden */ export function getHubFromCarrier(carrier: any): Hub { if (carrier && carrier.__SENTRY__ && carrier.__SENTRY__.hub) { diff --git a/packages/hub/src/index.ts b/packages/hub/src/index.ts index 743beb0302ef..6656b1b24df9 100644 --- a/packages/hub/src/index.ts +++ b/packages/hub/src/index.ts @@ -1,3 +1,3 @@ export { Carrier, Layer } from './interfaces'; export { addGlobalEventProcessor, Scope } from './scope'; -export { getCurrentHub, getHubFromCarrier, getMainCarrier, Hub, setHubOnCarrier } from './hub'; +export { getCurrentHub, getHubFromCarrier, getMainCarrier, Hub, makeMain, setHubOnCarrier } from './hub'; diff --git a/packages/hub/src/interfaces.ts b/packages/hub/src/interfaces.ts index e1c25ba4969b..a46d0e14555f 100644 --- a/packages/hub/src/interfaces.ts +++ b/packages/hub/src/interfaces.ts @@ -1,13 +1,20 @@ +import { Client } from '@sentry/types'; import { Hub } from './hub'; import { Scope } from './scope'; -/** A layer in the process stack. */ +/** + * A layer in the process stack. + * @hidden + */ export interface Layer { - client?: any; + client?: Client; scope?: Scope; } -/** An object that contains a hub and maintains a scope stack. */ +/** + * An object that contains a hub and maintains a scope stack. + * @hidden + */ export interface Carrier { __SENTRY__?: { hub?: Hub; diff --git a/packages/hub/src/scope.ts b/packages/hub/src/scope.ts index c32de00f03a7..9b32e8c10a1c 100644 --- a/packages/hub/src/scope.ts +++ b/packages/hub/src/scope.ts @@ -1,17 +1,14 @@ -import { Breadcrumb, SentryEvent, SentryEventHint, Severity, User } from '@sentry/types'; +import { Breadcrumb, Event, EventHint, EventProcessor, Scope as ScopeInterface, Severity, User } from '@sentry/types'; +import { isThenable } from '@sentry/utils/is'; import { getGlobalObject } from '@sentry/utils/misc'; -import { assign, safeNormalize } from '@sentry/utils/object'; - -export type EventProcessor = ( - event: SentryEvent, - hint?: SentryEventHint, -) => Promise | SentryEvent | null; +import { normalize } from '@sentry/utils/object'; +import { SyncPromise } from '@sentry/utils/syncpromise'; /** * Holds additional event information. {@link Scope.applyToEvent} will be * called by the client before an event will be sent. */ -export class Scope { +export class Scope implements ScopeInterface { /** Flag if notifiying is happening. */ protected notifyingListeners: boolean = false; @@ -44,92 +41,80 @@ export class Scope { this.scopeListeners.push(callback); } - /** Add new event processor that will be called after {@link applyToEvent}. */ + /** + * @inheritdoc + */ public addEventProcessor(callback: EventProcessor): Scope { this.eventProcessors.push(callback); return this; } - /** - * This will be called on every set call. - */ - protected notifyScopeListeners(): void { - if (!this.notifyingListeners) { - this.notifyingListeners = true; - setTimeout(() => { - this.scopeListeners.forEach(callback => { - callback(this); - }); - this.notifyingListeners = false; - }); - } - } - /** * This will be called after {@link applyToEvent} is finished. */ - protected async notifyEventProcessors(event: SentryEvent, hint?: SentryEventHint): Promise { - let processedEvent: SentryEvent | null = event; - for (const processor of [...getGlobalEventProcessors(), ...this.eventProcessors]) { - try { - processedEvent = await processor({ ...processedEvent }, hint); - if (processedEvent === null) { - return null; + protected notifyEventProcessors( + processors: EventProcessor[], + event: Event | null, + hint?: EventHint, + index: number = 0, + ): SyncPromise { + return new SyncPromise((resolve, reject) => { + const processor = processors[index]; + // tslint:disable-next-line:strict-type-predicates + if (event === null || typeof processor !== 'function') { + resolve(event); + } else { + const result = processor({ ...event }, hint) as Event | null; + if (isThenable(result)) { + (result as Promise) + .then(final => this.notifyEventProcessors(processors, final, hint, index + 1).then(resolve)) + .catch(reject); + } else { + this.notifyEventProcessors(processors, result, hint, index + 1) + .then(resolve) + .catch(reject); } - } catch (e) { - continue; } - } - return processedEvent; + }); } /** - * Updates user context information for future events. - * @param user User context object to be set in the current context. + * @inheritdoc */ public setUser(user: User): Scope { - this.user = safeNormalize(user); - this.notifyScopeListeners(); + this.user = normalize(user); return this; } /** - * Updates tags context information for future events. - * @param tags Tags context object to merge into current context. + * @inheritdoc */ public setTag(key: string, value: string): Scope { - this.tags = { ...this.tags, [key]: safeNormalize(value) }; - this.notifyScopeListeners(); + this.tags = { ...this.tags, [key]: normalize(value) }; return this; } /** - * Updates extra context information for future events. - * @param extra context object to merge into current context. + * @inheritdoc */ public setExtra(key: string, extra: any): Scope { - this.extra = { ...this.extra, [key]: safeNormalize(extra) }; - this.notifyScopeListeners(); + this.extra = { ...this.extra, [key]: normalize(extra) }; return this; } /** - * Sets the fingerprint on the scope to send with the events. - * @param fingerprint string[] to group events in Sentry. + * @inheritdoc */ public setFingerprint(fingerprint: string[]): Scope { - this.fingerprint = safeNormalize(fingerprint); - this.notifyScopeListeners(); + this.fingerprint = normalize(fingerprint); return this; } /** - * Sets the level on the scope for future events. - * @param level string {@link Severity} + * @inheritdoc */ public setLevel(level: Severity): Scope { - this.level = safeNormalize(level); - this.notifyScopeListeners(); + this.level = normalize(level); return this; } @@ -139,19 +124,21 @@ export class Scope { */ public static clone(scope?: Scope): Scope { const newScope = new Scope(); - assign(newScope, scope, { + Object.assign(newScope, scope, { scopeListeners: [], }); if (scope) { - newScope.extra = assign(scope.extra); - newScope.tags = assign(scope.tags) as any; + newScope.extra = { ...scope.extra }; + newScope.tags = { ...scope.tags }; newScope.breadcrumbs = [...scope.breadcrumbs]; newScope.eventProcessors = [...scope.eventProcessors]; } return newScope; } - /** Clears the current scope and resets its properties. */ + /** + * @inheritdoc + */ public clear(): void { this.breadcrumbs = []; this.tags = {}; @@ -159,27 +146,23 @@ export class Scope { this.user = {}; this.level = undefined; this.fingerprint = undefined; - this.notifyScopeListeners(); } /** - * Sets the breadcrumbs in the scope - * @param breadcrumbs Breadcrumb - * @param maxBreadcrumbs number of max breadcrumbs to merged into event. + * @inheritdoc */ public addBreadcrumb(breadcrumb: Breadcrumb, maxBreadcrumbs?: number): void { this.breadcrumbs = maxBreadcrumbs !== undefined && maxBreadcrumbs >= 0 - ? [...this.breadcrumbs, safeNormalize(breadcrumb)].slice(-maxBreadcrumbs) - : [...this.breadcrumbs, safeNormalize(breadcrumb)]; - this.notifyScopeListeners(); + ? [...this.breadcrumbs, normalize(breadcrumb)].slice(-maxBreadcrumbs) + : [...this.breadcrumbs, normalize(breadcrumb)]; } /** * Applies fingerprint from the scope to the event if there's one, * uses message if there's one instead or get rid of empty fingerprint */ - private applyFingerprint(event: SentryEvent): void { + private applyFingerprint(event: Event): void { // Make sure it's an array first and we actually have something in place event.fingerprint = event.fingerprint ? Array.isArray(event.fingerprint) @@ -205,15 +188,12 @@ export class Scope { * Applies the current context and fingerprint to the event. * Note that breadcrumbs will be added by the client. * Also if the event has already breadcrumbs on it, we do not merge them. - * @param event SentryEvent + * @param event Event * @param hint May contain additional informartion about the original exception. * @param maxBreadcrumbs number of max breadcrumbs to merged into event. + * @hidden */ - public async applyToEvent( - event: SentryEvent, - hint?: SentryEventHint, - maxBreadcrumbs?: number, - ): Promise { + public applyToEvent(event: Event, hint?: EventHint): SyncPromise { if (this.extra && Object.keys(this.extra).length) { event.extra = { ...this.extra, ...event.extra }; } @@ -231,13 +211,10 @@ export class Scope { const hasNoBreadcrumbs = !event.breadcrumbs || event.breadcrumbs.length === 0; if (hasNoBreadcrumbs && this.breadcrumbs.length > 0) { - event.breadcrumbs = - maxBreadcrumbs !== undefined && maxBreadcrumbs >= 0 - ? this.breadcrumbs.slice(-maxBreadcrumbs) - : this.breadcrumbs; + event.breadcrumbs = this.breadcrumbs; } - return this.notifyEventProcessors(event, hint); + return this.notifyEventProcessors([...getGlobalEventProcessors(), ...this.eventProcessors], event, hint); } } diff --git a/packages/hub/test/hub.test.ts b/packages/hub/test/hub.test.ts index 7992a3de89fd..a3ed9a3693ec 100644 --- a/packages/hub/test/hub.test.ts +++ b/packages/hub/test/hub.test.ts @@ -1,10 +1,7 @@ -import { SentryEvent } from '@sentry/types'; -import { logger } from '@sentry/utils/logger'; +import { Event } from '@sentry/types'; import { getCurrentHub, Hub, Scope } from '../src'; -const clientFn = jest.fn(); -const asyncClientFn = async () => Promise.reject('error'); -const scope = new Scope(); +const clientFn: any = jest.fn(); describe('Hub', () => { afterEach(() => { @@ -18,52 +15,17 @@ describe('Hub', () => { }); test('pass in filled layer', () => { - const hub = new Hub({ - asyncClientFn, - clientFn, - }); + const hub = new Hub(clientFn); expect(hub.getStack()).toHaveLength(1); }); - test('invoke client sync', () => { - const hub = new Hub( - { - asyncClientFn, - clientFn, - }, - scope, - ); - // @ts-ignore - hub.invokeClient('clientFn', true); - expect(clientFn).toHaveBeenCalled(); - expect(clientFn.mock.calls[0][0]).toBe(true); - expect(clientFn.mock.calls[0][1]).toBe(scope); - }); - test("don't invoke client sync with wrong func", () => { - const hub = new Hub({ - asyncClientFn, - clientFn, - }); + const hub = new Hub(clientFn); // @ts-ignore hub.invokeClient('funca', true); expect(clientFn).not.toHaveBeenCalled(); }); - test('invoke client async catch error in case', done => { - jest.spyOn(logger, 'error'); - const hub = new Hub({ - asyncClientFn, - clientFn, - }); - (hub as any).invokeClientAsync('asyncClientFn', true); - setTimeout(() => { - // tslint:disable-next-line - expect(logger.error).toHaveBeenCalled(); - done(); - }); - }); - test('isOlderThan', () => { const hub = new Hub(); expect(hub.isOlderThan(0)).toBeFalsy(); @@ -80,7 +42,7 @@ describe('Hub', () => { }); test('pushScope inherit client', () => { - const testClient = { bla: 'a' }; + const testClient: any = { bla: 'a' }; const hub = new Hub(testClient); hub.pushScope(); expect(hub.getStack()).toHaveLength(2); @@ -88,9 +50,9 @@ describe('Hub', () => { }); test('pushScope bindClient', () => { - const testClient = { bla: 'a' }; + const testClient: any = { bla: 'a' }; const hub = new Hub(testClient); - const ndClient = { foo: 'bar' }; + const ndClient: any = { foo: 'bar' }; hub.pushScope(); hub.bindClient(ndClient); expect(hub.getStack()).toHaveLength(2); @@ -116,71 +78,29 @@ describe('Hub', () => { test('withScope bindClient', () => { const hub = new Hub(); - const testClient = { bla: 'a' }; - hub.withScope(() => { - hub.bindClient(testClient); - expect(hub.getStack()).toHaveLength(2); - expect(hub.getStack()[1].client).toBe(testClient); - }); - expect(hub.getStack()).toHaveLength(1); - }); - - test('withScope bindClient scope changes', () => { - jest.useFakeTimers(); - const hub = new Hub(); - const storeScope = jest.fn(); - const testClient = { - bla: 'a', - getBackend: () => ({ storeScope }), - }; + const testClient: any = { bla: 'a' }; hub.withScope(() => { hub.bindClient(testClient); - hub.configureScope(localScope => { - localScope.setExtra('a', 'b'); - }); - jest.runAllTimers(); - expect(hub.getStack()).toHaveLength(2); - expect(hub.getStack()[1].client).toBe(testClient); - expect(storeScope.mock.calls).toHaveLength(1); - expect(storeScope.mock.calls[0][0].extra).toEqual({ a: 'b' }); - }); - expect(hub.getStack()).toHaveLength(1); - }); - - test('withScope bindClient scope changes without configureScope', () => { - jest.useFakeTimers(); - const hub = new Hub(); - const storeScope = jest.fn(); - const testClient = { - bla: 'a', - getBackend: () => ({ storeScope }), - }; - hub.withScope(localScope => { - hub.bindClient(testClient); - localScope.setExtra('a', 'b'); - jest.runAllTimers(); expect(hub.getStack()).toHaveLength(2); expect(hub.getStack()[1].client).toBe(testClient); - expect(storeScope.mock.calls).toHaveLength(1); - expect(storeScope.mock.calls[0][0].extra).toEqual({ a: 'b' }); }); expect(hub.getStack()).toHaveLength(1); }); test('getCurrentClient', () => { - const testClient = { bla: 'a' }; + const testClient: any = { bla: 'a' }; const hub = new Hub(testClient); expect(hub.getClient()).toBe(testClient); }); test('getStack', () => { - const client = { a: 'b' }; + const client: any = { a: 'b' }; const hub = new Hub(client); expect(hub.getStack()[0].client).toBe(client); }); test('getStackTop', () => { - const testClient = { bla: 'a' }; + const testClient: any = { bla: 'a' }; const hub = new Hub(); hub.pushScope(); hub.pushScope(); @@ -190,7 +110,7 @@ describe('Hub', () => { test('captureException', () => { const hub = new Hub(); - const spy = jest.spyOn(hub as any, 'invokeClientAsync'); + const spy = jest.spyOn(hub as any, 'invokeClient'); hub.captureException('a'); expect(spy).toHaveBeenCalled(); expect(spy.mock.calls[0][0]).toBe('captureException'); @@ -199,7 +119,7 @@ describe('Hub', () => { test('captureMessage', () => { const hub = new Hub(); - const spy = jest.spyOn(hub as any, 'invokeClientAsync'); + const spy = jest.spyOn(hub as any, 'invokeClient'); hub.captureMessage('a'); expect(spy).toHaveBeenCalled(); expect(spy.mock.calls[0][0]).toBe('captureMessage'); @@ -207,26 +127,17 @@ describe('Hub', () => { }); test('captureEvent', () => { - const event: SentryEvent = { + const event: Event = { extra: { b: 3 }, }; const hub = new Hub(); - const spy = jest.spyOn(hub as any, 'invokeClientAsync'); + const spy = jest.spyOn(hub as any, 'invokeClient'); hub.captureEvent(event); expect(spy).toHaveBeenCalled(); expect(spy.mock.calls[0][0]).toBe('captureEvent'); expect(spy.mock.calls[0][1]).toBe(event); }); - test('addBreadcrumb', () => { - const hub = new Hub(); - const spy = jest.spyOn(hub as any, 'invokeClient'); - hub.addBreadcrumb({ message: 'test' }); - expect(spy).toHaveBeenCalled(); - expect(spy.mock.calls[0][0]).toBe('addBreadcrumb'); - expect(spy.mock.calls[0][1]).toEqual({ message: 'test' }); - }); - test('configureScope', () => { expect.assertions(0); const hub = new Hub(); @@ -239,59 +150,60 @@ describe('Hub', () => { expect.assertions(1); const localScope = new Scope(); localScope.setExtra('a', 'b'); - const hub = new Hub({ a: 'b' }, localScope); + const hub = new Hub({ a: 'b' } as any, localScope); hub.configureScope(confScope => { expect((confScope as any).extra).toEqual({ a: 'b' }); }); }); - test('pushScope inherit processors', async () => { - const event: SentryEvent = { + test('pushScope inherit processors', () => { + expect.assertions(1); + const event: Event = { extra: { b: 3 }, }; const localScope = new Scope(); localScope.setExtra('a', 'b'); - const hub = new Hub({ a: 'b' }, localScope); - const callCounter = jest.fn(); - localScope.addEventProcessor(async (processedEvent: SentryEvent) => { - callCounter(1); + const hub = new Hub({ a: 'b' } as any, localScope); + + localScope.addEventProcessor(async (processedEvent: Event) => { processedEvent.dist = '1'; return processedEvent; }); + hub.pushScope(); const pushedScope = hub.getStackTop().scope; - if (pushedScope) { - const final = await pushedScope.applyToEvent(event); + + return pushedScope!.applyToEvent(event).then(final => { expect(final!.dist).toEqual('1'); - } + }); }); test('captureException should set event_id in hint', () => { const hub = new Hub(); - const spy = jest.spyOn(hub as any, 'invokeClientAsync'); + const spy = jest.spyOn(hub as any, 'invokeClient'); hub.captureException('a'); expect(spy.mock.calls[0][2].event_id).toBeTruthy(); }); test('captureMessage should set event_id in hint', () => { const hub = new Hub(); - const spy = jest.spyOn(hub as any, 'invokeClientAsync'); + const spy = jest.spyOn(hub as any, 'invokeClient'); hub.captureMessage('a'); expect(spy.mock.calls[0][3].event_id).toBeTruthy(); }); test('captureEvent should set event_id in hint', () => { - const event: SentryEvent = { + const event: Event = { extra: { b: 3 }, }; const hub = new Hub(); - const spy = jest.spyOn(hub as any, 'invokeClientAsync'); + const spy = jest.spyOn(hub as any, 'invokeClient'); hub.captureEvent(event); expect(spy.mock.calls[0][2].event_id).toBeTruthy(); }); test('lastEventId should be the same as last created', () => { - const event: SentryEvent = { + const event: Event = { extra: { b: 3 }, }; const hub = new Hub(); @@ -302,7 +214,7 @@ describe('Hub', () => { test('run', () => { const currentHub = getCurrentHub(); const myScope = new Scope(); - const myClient = { a: 'b' }; + const myClient: any = { a: 'b' }; myScope.setExtra('a', 'b'); const myHub = new Hub(myClient, myScope); myHub.run(hub => { diff --git a/packages/hub/test/scope.test.ts b/packages/hub/test/scope.test.ts index 4b223e868631..ceb18df98695 100644 --- a/packages/hub/test/scope.test.ts +++ b/packages/hub/test/scope.test.ts @@ -1,4 +1,4 @@ -import { SentryEvent, SentryEventHint, Severity } from '@sentry/types'; +import { Event, EventHint, Severity } from '@sentry/types'; import { Scope } from '../src'; describe('Scope', () => { @@ -75,18 +75,8 @@ describe('Scope', () => { expect((scope as any).extra).toEqual({ a: 2 }); }); - test('listeners', () => { - jest.useFakeTimers(); - const scope = new Scope(); - const listener = jest.fn(); - scope.addScopeListener(listener); - scope.setExtra('a', 2); - jest.runAllTimers(); - expect(listener).toHaveBeenCalled(); - expect(listener.mock.calls[0][0].extra).toEqual({ a: 2 }); - }); - - test('applyToEvent', async () => { + test('applyToEvent', () => { + expect.assertions(6); const scope = new Scope(); scope.setExtra('a', 2); scope.setTag('a', 'b'); @@ -94,55 +84,62 @@ describe('Scope', () => { scope.setFingerprint(['abcd']); scope.setLevel(Severity.Warning); scope.addBreadcrumb({ message: 'test' }, 100); - const event: SentryEvent = {}; - await scope.applyToEvent(event); - expect(event.extra).toEqual({ a: 2 }); - expect(event.tags).toEqual({ a: 'b' }); - expect(event.user).toEqual({ id: '1' }); - expect(event.fingerprint).toEqual(['abcd']); - expect(event.level).toEqual('warning'); - expect(event.breadcrumbs).toEqual([{ message: 'test' }]); + const event: Event = {}; + return scope.applyToEvent(event).then(processedEvent => { + expect(processedEvent!.extra).toEqual({ a: 2 }); + expect(processedEvent!.tags).toEqual({ a: 'b' }); + expect(processedEvent!.user).toEqual({ id: '1' }); + expect(processedEvent!.fingerprint).toEqual(['abcd']); + expect(processedEvent!.level).toEqual('warning'); + expect(processedEvent!.breadcrumbs).toEqual([{ message: 'test' }]); + }); }); - test('applyToEvent merge', async () => { + test('applyToEvent merge', () => { + expect.assertions(5); const scope = new Scope(); scope.setExtra('a', 2); scope.setTag('a', 'b'); scope.setUser({ id: '1' }); scope.setFingerprint(['abcd']); scope.addBreadcrumb({ message: 'test' }, 100); - const event: SentryEvent = { + const event: Event = { breadcrumbs: [{ message: 'test2' }], extra: { b: 3 }, fingerprint: ['efgh'], tags: { b: 'c' }, user: { id: '3' }, }; - await scope.applyToEvent(event); - expect(event.extra).toEqual({ a: 2, b: 3 }); - expect(event.tags).toEqual({ a: 'b', b: 'c' }); - expect(event.user).toEqual({ id: '3' }); - expect(event.fingerprint).toEqual(['efgh', 'abcd']); - expect(event.breadcrumbs).toEqual([{ message: 'test2' }]); + return scope.applyToEvent(event).then(processedEvent => { + expect(processedEvent!.extra).toEqual({ a: 2, b: 3 }); + expect(processedEvent!.tags).toEqual({ a: 'b', b: 'c' }); + expect(processedEvent!.user).toEqual({ id: '3' }); + expect(processedEvent!.fingerprint).toEqual(['efgh', 'abcd']); + expect(processedEvent!.breadcrumbs).toEqual([{ message: 'test2' }]); + }); }); test('applyToEvent message fingerprint', async () => { + expect.assertions(1); const scope = new Scope(); - const event: SentryEvent = { + const event: Event = { fingerprint: ['bar'], message: 'foo', }; - await scope.applyToEvent(event); - expect(event.fingerprint).toEqual(['bar', 'foo']); + return scope.applyToEvent(event).then(processedEvent => { + expect(processedEvent!.fingerprint).toEqual(['bar', 'foo']); + }); }); - test('applyToEvent scope level should be stronger', async () => { + test('applyToEvent scope level should be stronger', () => { + expect.assertions(1); const scope = new Scope(); scope.setLevel(Severity.Warning); - const event: SentryEvent = {}; + const event: Event = {}; event.level = Severity.Critical; - await scope.applyToEvent(event); - expect(event.level).toEqual('warning'); + return scope.applyToEvent(event).then(processedEvent => { + expect(processedEvent!.level).toEqual('warning'); + }); }); test('clear', () => { @@ -157,90 +154,131 @@ describe('Scope', () => { expect((scope as any).extra).toEqual({}); }); - test('addEventProcessor', async done => { - expect.assertions(2); - const event: SentryEvent = { + test('addEventProcessor', () => { + expect.assertions(3); + const event: Event = { extra: { b: 3 }, }; const localScope = new Scope(); localScope.setExtra('a', 'b'); - localScope.addEventProcessor(async (processedEvent: SentryEvent) => { + localScope.addEventProcessor((processedEvent: Event) => { expect(processedEvent.extra).toEqual({ a: 'b', b: 3 }); return processedEvent; }); - localScope.addEventProcessor(async (processedEvent: SentryEvent) => { + localScope.addEventProcessor((processedEvent: Event) => { processedEvent.dist = '1'; return processedEvent; }); - localScope.addEventProcessor(async (processedEvent: SentryEvent) => { + localScope.addEventProcessor((processedEvent: Event) => { expect(processedEvent.dist).toEqual('1'); - done(); return processedEvent; }); - await localScope.applyToEvent(event); + + return localScope.applyToEvent(event).then(final => { + expect(final!.dist).toEqual('1'); + }); }); test('addEventProcessor async', async () => { + jest.useFakeTimers(); expect.assertions(6); - const event: SentryEvent = { + const event: Event = { extra: { b: 3 }, }; const localScope = new Scope(); localScope.setExtra('a', 'b'); const callCounter = jest.fn(); - localScope.addEventProcessor(async (processedEvent: SentryEvent) => { + localScope.addEventProcessor((processedEvent: Event) => { callCounter(1); expect(processedEvent.extra).toEqual({ a: 'b', b: 3 }); return processedEvent; }); localScope.addEventProcessor( - async (processedEvent: SentryEvent) => - new Promise(resolve => { + async (processedEvent: Event) => + new Promise(resolve => { callCounter(2); setTimeout(() => { callCounter(3); processedEvent.dist = '1'; resolve(processedEvent); }, 1); + jest.runAllTimers(); + }), + ); + localScope.addEventProcessor((processedEvent: Event) => { + callCounter(4); + return processedEvent; + }); + + return localScope.applyToEvent(event).then(processedEvent => { + expect(callCounter.mock.calls[0][0]).toBe(1); + expect(callCounter.mock.calls[1][0]).toBe(2); + expect(callCounter.mock.calls[2][0]).toBe(3); + expect(callCounter.mock.calls[3][0]).toBe(4); + expect(processedEvent!.dist).toEqual('1'); + }); + }); + + test('addEventProcessor async with reject', async () => { + jest.useFakeTimers(); + expect.assertions(2); + const event: Event = { + extra: { b: 3 }, + }; + const localScope = new Scope(); + localScope.setExtra('a', 'b'); + const callCounter = jest.fn(); + localScope.addEventProcessor((processedEvent: Event) => { + callCounter(1); + expect(processedEvent.extra).toEqual({ a: 'b', b: 3 }); + return processedEvent; + }); + localScope.addEventProcessor( + async (_processedEvent: Event) => + new Promise((_, reject) => { + setTimeout(() => { + reject('bla'); + }, 1); + jest.runAllTimers(); }), ); - localScope.addEventProcessor(async (processedEvent: SentryEvent) => { + localScope.addEventProcessor((processedEvent: Event) => { callCounter(4); return processedEvent; }); - const final = await localScope.applyToEvent(event); - expect(callCounter.mock.calls[0][0]).toBe(1); - expect(callCounter.mock.calls[1][0]).toBe(2); - expect(callCounter.mock.calls[2][0]).toBe(3); - expect(callCounter.mock.calls[3][0]).toBe(4); - expect(final!.dist).toEqual('1'); + + return localScope.applyToEvent(event).catch(reason => { + expect(reason).toEqual('bla'); + }); }); - test('addEventProcessor return null', async () => { + test('addEventProcessor return null', () => { expect.assertions(1); - const event: SentryEvent = { + const event: Event = { extra: { b: 3 }, }; const localScope = new Scope(); localScope.setExtra('a', 'b'); - localScope.addEventProcessor(async (_: SentryEvent) => null); - const final = await localScope.applyToEvent(event); - expect(final).toBeNull(); + localScope.addEventProcessor(async (_: Event) => null); + return localScope.applyToEvent(event).then(processedEvent => { + expect(processedEvent).toBeNull(); + }); }); - test('addEventProcessor pass along hint', async () => { + test('addEventProcessor pass along hint', () => { expect.assertions(3); - const event: SentryEvent = { + const event: Event = { extra: { b: 3 }, }; const localScope = new Scope(); localScope.setExtra('a', 'b'); - localScope.addEventProcessor(async (internalEvent: SentryEvent, hint?: SentryEventHint) => { + localScope.addEventProcessor(async (internalEvent: Event, hint?: EventHint) => { expect(hint).toBeTruthy(); expect(hint!.syntheticException).toBeTruthy(); return internalEvent; }); - const final = await localScope.applyToEvent(event, { syntheticException: new Error('what') }); - expect(final).toEqual(event); + return localScope.applyToEvent(event, { syntheticException: new Error('what') }).then(processedEvent => { + expect(processedEvent).toEqual(event); + }); }); }); diff --git a/packages/minimal/LICENSE b/packages/minimal/LICENSE index 862c9698194b..8b42db873c95 100644 --- a/packages/minimal/LICENSE +++ b/packages/minimal/LICENSE @@ -1,23 +1,25 @@ -Copyright (c) 2018 Sentry (https://sentry.io) and individual contributors. +BSD 3-Clause License + +Copyright (c) 2019, Sentry All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - 1. Redistributions of source code must retain the above copyright notice, -this list of conditions and the following disclaimer. +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above copyright -notice, this list of conditions and the following disclaimer in the -documentation and/or other materials provided with the distribution. +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. - 3. Neither the name of the Sentry nor the names of its contributors may be -used to endorse or promote products derived from this software without specific -prior written permission. +* Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR diff --git a/packages/minimal/package.json b/packages/minimal/package.json index 4e95d285bca0..287ff9db542f 100644 --- a/packages/minimal/package.json +++ b/packages/minimal/package.json @@ -20,13 +20,13 @@ "tslib": "^1.9.3" }, "devDependencies": { - "jest": "^22.4.3", + "jest": "^24.1.0", "npm-run-all": "^4.1.2", - "prettier": "^1.14.0", + "prettier": "^1.16.4", "prettier-check": "^2.0.0", - "rimraf": "^2.6.2", - "tslint": "^5.11.0", - "typescript": "^3.2.0" + "rimraf": "^2.6.3", + "tslint": "^5.12.1", + "typescript": "^3.3.3" }, "scripts": { "build": "run-p build:es5 build:esm", @@ -44,7 +44,7 @@ "fix:prettier": "prettier --write \"{src,test}/**/*.ts\"", "fix:tslint": "tslint --fix -t stylish -p .", "test": "jest", - "test:watch": "jest --watch --notify" + "test:watch": "jest --watch" }, "jest": { "collectCoverage": true, diff --git a/packages/minimal/src/index.ts b/packages/minimal/src/index.ts index 2f1c89a5ba2e..f14fb169c08c 100644 --- a/packages/minimal/src/index.ts +++ b/packages/minimal/src/index.ts @@ -1,5 +1,5 @@ import { getCurrentHub, Hub, Scope } from '@sentry/hub'; -import { Breadcrumb, SentryEvent, Severity } from '@sentry/types'; +import { Breadcrumb, Event, Severity } from '@sentry/types'; /** * This calls a function on the current hub. @@ -60,7 +60,7 @@ export function captureMessage(message: string, level?: Severity): string { * @param event The event to send to Sentry. * @returns The generated eventId. */ -export function captureEvent(event: SentryEvent): string { +export function captureEvent(event: Event): string { return callOnHub('captureEvent', event); } @@ -97,7 +97,7 @@ export function configureScope(callback: (scope: Scope) => void): void { * * @param callback that will be enclosed into push/popScope. */ -export function withScope(callback: ((scope: Scope) => void)): void { +export function withScope(callback: (scope: Scope) => void): void { callOnHub('withScope', callback); } diff --git a/packages/minimal/test/lib/minimal.test.ts b/packages/minimal/test/lib/minimal.test.ts index e0d9b585cd0d..096366be557f 100644 --- a/packages/minimal/test/lib/minimal.test.ts +++ b/packages/minimal/test/lib/minimal.test.ts @@ -1,14 +1,6 @@ import { getCurrentHub, getHubFromCarrier, Scope } from '@sentry/hub'; import { Severity } from '@sentry/types'; -import { - _callOnClient, - addBreadcrumb, - captureEvent, - captureException, - captureMessage, - configureScope, - withScope, -} from '../../src'; +import { _callOnClient, captureEvent, captureException, captureMessage, configureScope, withScope } from '../../src'; import { init, TestClient, TestClient2 } from '../mocks/client'; declare var global: any; @@ -22,7 +14,7 @@ describe('Minimal', () => { describe('Capture', () => { test('Return an event_id', () => { - const client = { + const client: any = { captureException: jest.fn(async () => Promise.resolve()), }; getCurrentHub().withScope(() => { @@ -34,7 +26,7 @@ describe('Minimal', () => { }); test('Exception', () => { - const client = { + const client: any = { captureException: jest.fn(async () => Promise.resolve()), }; getCurrentHub().withScope(() => { @@ -46,7 +38,7 @@ describe('Minimal', () => { }); test('Message', () => { - const client = { captureMessage: jest.fn(async () => Promise.resolve()) }; + const client: any = { captureMessage: jest.fn(async () => Promise.resolve()) }; getCurrentHub().withScope(() => { getCurrentHub().bindClient(client); const message = 'yo'; @@ -56,7 +48,7 @@ describe('Minimal', () => { }); test('Event', () => { - const client = { captureEvent: jest.fn(async () => Promise.resolve()) }; + const client: any = { captureEvent: jest.fn(async () => Promise.resolve()) }; getCurrentHub().withScope(() => { getCurrentHub().bindClient(client); const e = { message: 'test' }; @@ -68,7 +60,7 @@ describe('Minimal', () => { describe('configureScope', () => { test('User Context', () => { - const client = new TestClient({}); + const client: any = new TestClient({}); getCurrentHub().pushScope(); getCurrentHub().bindClient(client); configureScope((scope: Scope) => { @@ -81,7 +73,7 @@ describe('Minimal', () => { }); test('Extra Context', () => { - const client = new TestClient({}); + const client: any = new TestClient({}); getCurrentHub().pushScope(); getCurrentHub().bindClient(client); configureScope((scope: Scope) => { @@ -104,7 +96,7 @@ describe('Minimal', () => { }); test('Fingerprint', () => { - const client = new TestClient({}); + const client: any = new TestClient({}); getCurrentHub().pushScope(); getCurrentHub().bindClient(client); configureScope((scope: Scope) => { @@ -114,7 +106,7 @@ describe('Minimal', () => { }); test('Level', () => { - const client = new TestClient({}); + const client: any = new TestClient({}); const scope = getCurrentHub().pushScope(); getCurrentHub().bindClient(client); scope.setLevel(Severity.Warning); @@ -123,7 +115,7 @@ describe('Minimal', () => { }); test('Clear Scope', () => { - const client = new TestClient({}); + const client: any = new TestClient({}); getCurrentHub().withScope(() => { getCurrentHub().bindClient(client); expect(global.__SENTRY__.hub.stack.length).toBe(2); @@ -140,19 +132,6 @@ describe('Minimal', () => { }); }); - test('Add Breadcrumb', () => { - const client = { - addBreadcrumb: jest.fn(), - }; - getCurrentHub().pushScope(); - getCurrentHub().bindClient(client); - addBreadcrumb({ message: 'world' }); - expect(client.addBreadcrumb.mock.calls[0][0]).toEqual({ - message: 'world', - }); - getCurrentHub().popScope(); - }); - test('returns undefined before binding a client', () => { expect(getCurrentHub().getClient()).toBeUndefined(); }); @@ -165,7 +144,7 @@ describe('Minimal', () => { test('Calls function on the client', done => { const s = jest.spyOn(TestClient.prototype, 'mySecretPublicMethod'); getCurrentHub().withScope(() => { - getCurrentHub().bindClient(new TestClient({})); + getCurrentHub().bindClient(new TestClient({}) as any); _callOnClient('mySecretPublicMethod', 'test'); expect(s.mock.calls[0][0]).toBe('test'); s.mockRestore(); @@ -177,7 +156,7 @@ describe('Minimal', () => { init({}); expect(() => { getCurrentHub().withScope(() => { - getCurrentHub().bindClient(new TestClient2()); + getCurrentHub().bindClient(new TestClient2() as any); }); }).not.toThrow(); }); @@ -186,7 +165,7 @@ describe('Minimal', () => { init({}); expect(() => { getCurrentHub().withScope(() => { - getCurrentHub().bindClient(new TestClient({})); + getCurrentHub().bindClient(new TestClient({}) as any); }); }).not.toThrow(); }); @@ -197,11 +176,11 @@ describe('Minimal', () => { }; const hub = getHubFromCarrier(iAmSomeGlobalVarTheUserHasToManage.state); hub.pushScope(); - hub.bindClient(new TestClient({})); + hub.bindClient(new TestClient({}) as any); hub.configureScope((scope: Scope) => { scope.setUser({ id: '1234' }); }); - expect(((iAmSomeGlobalVarTheUserHasToManage.state as any).__SENTRY__.hub.stack[1] as any).scope.user).toEqual({ + expect((iAmSomeGlobalVarTheUserHasToManage.state as any).__SENTRY__.hub.stack[1].scope.user).toEqual({ id: '1234', }); hub.popScope(); diff --git a/packages/minimal/test/mocks/client.ts b/packages/minimal/test/mocks/client.ts index bcb38fa27eae..2e04f2645bca 100644 --- a/packages/minimal/test/mocks/client.ts +++ b/packages/minimal/test/mocks/client.ts @@ -15,5 +15,5 @@ export class TestClient { export class TestClient2 {} export function init(options: object): void { - getCurrentHub().bindClient(new TestClient(options)); + getCurrentHub().bindClient(new TestClient(options) as any); } diff --git a/packages/minimal/test/tslint.json b/packages/minimal/test/tslint.json index fc0ed75cfcd7..f2c15a212b8f 100644 --- a/packages/minimal/test/tslint.json +++ b/packages/minimal/test/tslint.json @@ -5,6 +5,7 @@ "max-classes-per-file": false, "no-non-null-assertion": false, "no-implicit-dependencies": [true, "dev"], - "no-unused-expression": false + "no-unused-expression": false, + "no-unsafe-any": false } } diff --git a/packages/node/LICENSE b/packages/node/LICENSE index 862c9698194b..8b42db873c95 100644 --- a/packages/node/LICENSE +++ b/packages/node/LICENSE @@ -1,23 +1,25 @@ -Copyright (c) 2018 Sentry (https://sentry.io) and individual contributors. +BSD 3-Clause License + +Copyright (c) 2019, Sentry All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - 1. Redistributions of source code must retain the above copyright notice, -this list of conditions and the following disclaimer. +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above copyright -notice, this list of conditions and the following disclaimer in the -documentation and/or other materials provided with the distribution. +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. - 3. Neither the name of the Sentry nor the names of its contributors may be -used to endorse or promote products derived from this software without specific -prior written permission. +* Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR diff --git a/packages/node/package.json b/packages/node/package.json index 85c2dff7780d..a309cff094a6 100644 --- a/packages/node/package.json +++ b/packages/node/package.json @@ -28,17 +28,17 @@ "tslib": "^1.9.3" }, "devDependencies": { - "@types/cookie": "0.3.1", + "@types/cookie": "0.3.2", "@types/lru-cache": "^4.1.1", - "@types/node": "^10.12.10", + "@types/node": "^11.9.4", "express": "^4.16.4", - "jest": "^22.4.3", + "jest": "^24.1.0", "npm-run-all": "^4.1.2", - "prettier": "^1.14.0", + "prettier": "^1.16.4", "prettier-check": "^2.0.0", - "rimraf": "^2.6.2", - "tslint": "^5.11.0", - "typescript": "^3.2.0" + "rimraf": "^2.6.3", + "tslint": "^5.12.1", + "typescript": "^3.3.3" }, "scripts": { "build": "tsc -p tsconfig.build.json", diff --git a/packages/node/src/backend.ts b/packages/node/src/backend.ts index 5423686e1aa5..eafbad64f8fc 100644 --- a/packages/node/src/backend.ts +++ b/packages/node/src/backend.ts @@ -1,7 +1,9 @@ -import { BaseBackend, Dsn, getCurrentHub, Options } from '@sentry/core'; -import { SentryEvent, SentryEventHint, Severity, Transport } from '@sentry/types'; +import { BaseBackend, Dsn, getCurrentHub } from '@sentry/core'; +import { Event, EventHint, Options, Severity, Transport } from '@sentry/types'; import { isError, isPlainObject } from '@sentry/utils/is'; -import { limitObjectDepthToSize, serializeKeysToEventMessage } from '@sentry/utils/object'; +import { normalizeToSize } from '@sentry/utils/object'; +import { keysToEventMessage } from '@sentry/utils/string'; +import { SyncPromise } from '@sentry/utils/syncpromise'; import { createHash } from 'crypto'; import { extractStackFromError, parseError, parseStack, prepareFramesForEvent } from './parsers'; import { HTTPSTransport, HTTPTransport } from './transports'; @@ -35,7 +37,10 @@ export interface NodeOptions extends Options { frameContextLines?: number; } -/** The Sentry Node SDK Backend. */ +/** + * The Sentry Node SDK Backend. + * @hidden + */ export class NodeBackend extends BaseBackend { /** * @inheritdoc @@ -69,7 +74,7 @@ export class NodeBackend extends BaseBackend { /** * @inheritDoc */ - public async eventFromException(exception: any, hint?: SentryEventHint): Promise { + public eventFromException(exception: any, hint?: EventHint): SyncPromise { let ex: any = exception; if (!isError(exception)) { @@ -77,10 +82,10 @@ export class NodeBackend extends BaseBackend { // This will allow us to group events based on top-level keys // which is much better than creating new group when any key/value change const keys = Object.keys(exception as {}).sort(); - const message = `Non-Error exception captured with keys: ${serializeKeysToEventMessage(keys)}`; + const message = `Non-Error exception captured with keys: ${keysToEventMessage(keys)}`; getCurrentHub().configureScope(scope => { - scope.setExtra('__serialized__', limitObjectDepthToSize(exception as {})); + scope.setExtra('__serialized__', normalizeToSize(exception as {})); scope.setFingerprint([ createHash('md5') .update(keys.join('')) @@ -97,36 +102,38 @@ export class NodeBackend extends BaseBackend { } } - const event: SentryEvent = await parseError(ex as Error, this.options); - - return { - ...event, - event_id: hint && hint.event_id, - }; + return new SyncPromise(resolve => + parseError(ex as Error, this.options).then(event => { + resolve({ + ...event, + event_id: hint && hint.event_id, + }); + }), + ); } /** * @inheritDoc */ - public async eventFromMessage( - message: string, - level: Severity = Severity.Info, - hint?: SentryEventHint, - ): Promise { - const event: SentryEvent = { + public eventFromMessage(message: string, level: Severity = Severity.Info, hint?: EventHint): SyncPromise { + const event: Event = { event_id: hint && hint.event_id, level, message, }; - if (this.options.attachStacktrace && hint && hint.syntheticException) { - const stack = hint.syntheticException ? await extractStackFromError(hint.syntheticException) : []; - const frames = await parseStack(stack, this.options); - event.stacktrace = { - frames: prepareFramesForEvent(frames), - }; - } - - return event; + return new SyncPromise(resolve => { + if (this.options.attachStacktrace && hint && hint.syntheticException) { + const stack = hint.syntheticException ? extractStackFromError(hint.syntheticException) : []; + parseStack(stack, this.options).then(frames => { + event.stacktrace = { + frames: prepareFramesForEvent(frames), + }; + resolve(event); + }); + } else { + resolve(event); + } + }); } } diff --git a/packages/node/src/client.ts b/packages/node/src/client.ts index e76ea420fd25..b01b6d9cf253 100644 --- a/packages/node/src/client.ts +++ b/packages/node/src/client.ts @@ -1,5 +1,6 @@ import { BaseClient, Scope } from '@sentry/core'; -import { SentryEvent, SentryEventHint } from '@sentry/types'; +import { Event, EventHint } from '@sentry/types'; +import { SyncPromise } from '@sentry/utils/syncpromise'; import { NodeBackend, NodeOptions } from './backend'; import { SDK_NAME, SDK_VERSION } from './version'; @@ -21,7 +22,7 @@ export class NodeClient extends BaseClient { /** * @inheritDoc */ - protected async prepareEvent(event: SentryEvent, scope?: Scope, hint?: SentryEventHint): Promise { + protected prepareEvent(event: Event, scope?: Scope, hint?: EventHint): SyncPromise { event.platform = event.platform || 'node'; event.sdk = { ...event.sdk, diff --git a/packages/node/src/handlers.ts b/packages/node/src/handlers.ts index 4c4827f0fdf6..5eda022d6a37 100644 --- a/packages/node/src/handlers.ts +++ b/packages/node/src/handlers.ts @@ -1,8 +1,9 @@ import { captureException, getCurrentHub } from '@sentry/core'; -import { SentryEvent } from '@sentry/types'; +import { Event } from '@sentry/types'; import { forget } from '@sentry/utils/async'; +import { isString } from '@sentry/utils/is'; import { logger } from '@sentry/utils/logger'; -import { serialize } from '@sentry/utils/object'; +import { normalize } from '@sentry/utils/object'; import * as cookie from 'cookie'; import * as domain from 'domain'; import * as http from 'http'; @@ -94,9 +95,9 @@ function extractRequestData(req: { [key: string]: any }): { [key: string]: strin data = ''; } } - if (data && typeof data !== 'string' && {}.toString.call(data) !== '[object String]') { + if (data && !isString(data)) { // Make sure the request body is a string - data = serialize(data); + data = JSON.stringify(normalize(data)); } // request interface @@ -152,9 +153,10 @@ function extractUserData(req: { [key: string]: any }, keys: boolean | string[]): * @param event Will be mutated and enriched with req data * @param req Request object * @param options object containing flags to enable functionality + * @hidden */ export function parseRequest( - event: SentryEvent, + event: Event, req: { [key: string]: any; }, @@ -165,7 +167,7 @@ export function parseRequest( user?: boolean | string[]; version?: boolean; }, -): SentryEvent { +): Event { // tslint:disable-next-line:no-parameter-reassignment options = { request: true, @@ -211,7 +213,10 @@ export function parseRequest( return event; } -/** JSDoc */ +/** + * Express compatible request handler. + * @see Exposed as `Handlers.requestHandler` + */ export function requestHandler(options?: { request?: boolean; serverName?: boolean; @@ -230,7 +235,7 @@ export function requestHandler(options?: { local.on('error', next); local.run(() => { getCurrentHub().configureScope(scope => - scope.addEventProcessor(async (event: SentryEvent) => parseRequest(event, req, options)), + scope.addEventProcessor((event: Event) => parseRequest(event, req, options)), ); next(); }); @@ -253,7 +258,10 @@ function getStatusCodeFromResponse(error: MiddlewareError): number { return statusCode ? parseInt(statusCode as string, 10) : 500; } -/** JSDoc */ +/** + * Express compatible error handler. + * @see Exposed as `Handlers.errorHandler` + */ export function errorHandler(): ( error: MiddlewareError, req: http.IncomingMessage, @@ -277,7 +285,9 @@ export function errorHandler(): ( }; } -/** JSDoc */ +/** + * @hidden + */ export function defaultOnFatalError(error: Error): void { console.error(error && error.stack ? error.stack : error); const options = (getCurrentHub().getClient() as NodeClient).getOptions(); diff --git a/packages/node/src/index.ts b/packages/node/src/index.ts index 59ec621786e2..684c10c5090e 100644 --- a/packages/node/src/index.ts +++ b/packages/node/src/index.ts @@ -2,9 +2,9 @@ export { Breadcrumb, Request, SdkInfo, - SentryEvent, - SentryException, - SentryResponse, + Event, + Exception, + Response, Severity, StackFrame, Stacktrace, @@ -27,7 +27,7 @@ export { withScope, } from '@sentry/core'; -export { NodeBackend, NodeOptions } from './backend'; +export { NodeOptions } from './backend'; export { NodeClient } from './client'; export { defaultIntegrations, init, flush, close } from './sdk'; export { SDK_NAME, SDK_VERSION } from './version'; @@ -35,7 +35,6 @@ export { SDK_NAME, SDK_VERSION } from './version'; import { Integrations as CoreIntegrations } from '@sentry/core'; import * as Handlers from './handlers'; import * as NodeIntegrations from './integrations'; -import * as Parsers from './parsers'; import * as Transports from './transports'; const INTEGRATIONS = { @@ -43,4 +42,4 @@ const INTEGRATIONS = { ...NodeIntegrations, }; -export { INTEGRATIONS as Integrations, Transports, Parsers, Handlers }; +export { INTEGRATIONS as Integrations, Transports, Handlers }; diff --git a/packages/node/src/integrations/linkederrors.ts b/packages/node/src/integrations/linkederrors.ts index 727bd0f29454..00c6cedda548 100644 --- a/packages/node/src/integrations/linkederrors.ts +++ b/packages/node/src/integrations/linkederrors.ts @@ -1,17 +1,11 @@ import { addGlobalEventProcessor, getCurrentHub } from '@sentry/core'; -import { Integration, SentryEvent, SentryEventHint, SentryException } from '@sentry/types'; +import { Event, EventHint, Exception, ExtendedError, Integration } from '@sentry/types'; +import { SyncPromise } from '@sentry/utils/syncpromise'; import { getExceptionFromError } from '../parsers'; const DEFAULT_KEY = 'cause'; const DEFAULT_LIMIT = 5; -/** - * Just an Error object with arbitrary attributes attached to it. - */ -interface ExtendedError extends Error { - [key: string]: any; -} - /** Adds SDK info to an event. */ export class LinkedErrors implements Integration { /** @@ -45,10 +39,10 @@ export class LinkedErrors implements Integration { * @inheritDoc */ public setupOnce(): void { - addGlobalEventProcessor(async (event: SentryEvent, hint?: SentryEventHint) => { + addGlobalEventProcessor((event: Event, hint?: EventHint) => { const self = getCurrentHub().getIntegration(LinkedErrors); if (self) { - return self.handler(event, hint); + return (self.handler(event, hint) as unknown) as Promise; } return event; }); @@ -57,27 +51,32 @@ export class LinkedErrors implements Integration { /** * @inheritDoc */ - public async handler(event: SentryEvent, hint?: SentryEventHint): Promise { + public handler(event: Event, hint?: EventHint): SyncPromise { if (!event.exception || !event.exception.values || !hint || !(hint.originalException instanceof Error)) { - return event; + return SyncPromise.resolve(event); } - const linkedErrors = await this.walkErrorTree(hint.originalException, this.key); - event.exception.values = [...linkedErrors, ...event.exception.values]; - return event; + + return new SyncPromise(resolve => { + this.walkErrorTree(hint.originalException as ExtendedError, this.key).then((linkedErrors: Exception[]) => { + if (event && event.exception) { + event.exception.values = [...linkedErrors, ...event.exception.values]; + } + resolve(event); + }); + }); } /** * @inheritDoc */ - public async walkErrorTree( - error: ExtendedError, - key: string, - stack: SentryException[] = [], - ): Promise { + public walkErrorTree(error: ExtendedError, key: string, stack: Exception[] = []): SyncPromise { if (!(error[key] instanceof Error) || stack.length + 1 >= this.limit) { - return stack; + return SyncPromise.resolve(stack); } - const exception = await getExceptionFromError(error[key]); - return this.walkErrorTree(error[key], key, [exception, ...stack]); + return new SyncPromise(resolve => { + getExceptionFromError(error[key]).then((exception: Exception) => { + this.walkErrorTree(error[key], key, [exception, ...stack]).then(resolve); + }); + }); } } diff --git a/packages/node/src/integrations/onuncaughtexception.ts b/packages/node/src/integrations/onuncaughtexception.ts index f099e5cf6d14..642df5ed3e4f 100644 --- a/packages/node/src/integrations/onuncaughtexception.ts +++ b/packages/node/src/integrations/onuncaughtexception.ts @@ -26,6 +26,11 @@ export class OnUncaughtException implements Integration { */ public constructor( private readonly options: { + /** + * Default onFatalError handler + * @param firstError Error that has been thrown + * @param secondError If this was called multiple times this will be set + */ onFatalError?(firstError: Error, secondError?: Error): void; } = {}, ) {} @@ -37,7 +42,9 @@ export class OnUncaughtException implements Integration { } } -/** JSDoc */ +/** + * @hidden + */ export function makeErrorHandler( onFatalError: (firstError: Error, secondError?: Error) => void = defaultOnFatalError, ): (error: Error) => void { @@ -58,7 +65,7 @@ export function makeErrorHandler( caughtFirstError = true; if (hub.getIntegration(OnUncaughtException)) { - hub.withScope(async (scope: Scope) => { + hub.withScope((scope: Scope) => { scope.setLevel(Severity.Fatal); hub.captureException(error, { originalException: error }); if (!calledFatalError) { diff --git a/packages/node/src/integrations/pluggable/modules.ts b/packages/node/src/integrations/pluggable/modules.ts index a689a0cbcf70..8d1a508c116f 100644 --- a/packages/node/src/integrations/pluggable/modules.ts +++ b/packages/node/src/integrations/pluggable/modules.ts @@ -19,7 +19,7 @@ export class Modules implements Integration { * @inheritDoc */ public setupOnce(): void { - addGlobalEventProcessor(async event => { + addGlobalEventProcessor(event => { if (!getCurrentHub().getIntegration(Modules)) { return event; } diff --git a/packages/node/src/integrations/pluggable/transaction.ts b/packages/node/src/integrations/pluggable/transaction.ts index eba0c315c2e3..5a87606ae8e0 100644 --- a/packages/node/src/integrations/pluggable/transaction.ts +++ b/packages/node/src/integrations/pluggable/transaction.ts @@ -1,5 +1,5 @@ import { addGlobalEventProcessor, getCurrentHub } from '@sentry/core'; -import { Integration, SentryEvent, StackFrame } from '@sentry/types'; +import { Event, Integration, StackFrame } from '@sentry/types'; /** Add node transaction to the event */ export class Transaction implements Integration { @@ -16,7 +16,7 @@ export class Transaction implements Integration { * @inheritDoc */ public setupOnce(): void { - addGlobalEventProcessor(async event => { + addGlobalEventProcessor(event => { const self = getCurrentHub().getIntegration(Transaction); if (self) { return self.process(event); @@ -28,7 +28,7 @@ export class Transaction implements Integration { /** * @inheritDoc */ - public async process(event: SentryEvent): Promise { + public process(event: Event): Event { const frames = this.getFramesFromEvent(event); // use for loop so we don't have to reverse whole frames array @@ -45,7 +45,7 @@ export class Transaction implements Integration { } /** JSDoc */ - private getFramesFromEvent(event: SentryEvent): StackFrame[] { + private getFramesFromEvent(event: Event): StackFrame[] { const exception = event.exception && event.exception.values && event.exception.values[0]; return (exception && exception.stacktrace && exception.stacktrace.frames) || []; } diff --git a/packages/node/src/parsers.ts b/packages/node/src/parsers.ts index 9dd135bef2d2..4e9c1f861d01 100644 --- a/packages/node/src/parsers.ts +++ b/packages/node/src/parsers.ts @@ -1,7 +1,8 @@ -import { SentryEvent, SentryException, StackFrame } from '@sentry/types'; -import { readFileAsync } from '@sentry/utils/fs'; +import { Event, Exception, ExtendedError, StackFrame } from '@sentry/types'; import { basename, dirname } from '@sentry/utils/path'; import { snipLine } from '@sentry/utils/string'; +import { SyncPromise } from '@sentry/utils/syncpromise'; +import { readFile } from 'fs'; import { LRUMap } from 'lru_map'; import * as stacktrace from 'stack-trace'; import { NodeOptions } from './backend'; @@ -12,18 +13,12 @@ const FILE_CONTENT_CACHE = new LRUMap(100); /** * Resets the file cache. Exists for testing purposes. + * @hidden */ export function resetFileContentCache(): void { FILE_CONTENT_CACHE.clear(); } -/** - * Just an Error object with arbitrary attributes attached to it. - */ -interface ExtendedError extends Error { - [key: string]: any; -} - /** JSDoc */ function getFunction(frame: stacktrace.StackFrame): string { try { @@ -73,55 +68,61 @@ function getModule(filename: string, base?: string): string { * * @param filenames Array of filepaths to read content from. */ -async function readSourceFiles( - filenames: string[], -): Promise<{ - [key: string]: string; -}> { +function readSourceFiles(filenames: string[]): SyncPromise<{ [key: string]: string | null }> { // we're relying on filenames being de-duped already if (filenames.length === 0) { - return {}; + return SyncPromise.resolve({}); } - const sourceFiles: { - [key: string]: string; - } = {}; - - // tslint:disable-next-line:prefer-for-of - for (let i = 0; i < filenames.length; i++) { - const filename = filenames[i]; - - const cache = FILE_CONTENT_CACHE.get(filename); - // We have a cache hit - if (cache !== undefined) { - // If it's not null (which means we found a file and have a content) - // we set the content and return it later. - if (cache !== null) { - sourceFiles[filename] = cache; + return new SyncPromise<{ + [key: string]: string | null; + }>(resolve => { + const sourceFiles: { + [key: string]: string | null; + } = {}; + + let count = 0; + // tslint:disable-next-line:prefer-for-of + for (let i = 0; i < filenames.length; i++) { + const filename = filenames[i]; + + const cache = FILE_CONTENT_CACHE.get(filename); + // We have a cache hit + if (cache !== undefined) { + // If it's not null (which means we found a file and have a content) + // we set the content and return it later. + if (cache !== null) { + sourceFiles[filename] = cache; + } + count++; + // In any case we want to skip here then since we have a content already or we couldn't + // read the file and don't want to try again. + if (count === filenames.length) { + resolve(sourceFiles); + } + continue; } - // In any case we want to skip here then since we have a content already or we couldn't - // read the file and don't want to try again. - continue; - } - let content = null; - try { - content = await readFileAsync(filename); - sourceFiles[filename] = content; - } catch (_) { - // unsure what to add here as the file is unreadable + readFile(filename, (err: Error, data: Buffer) => { + const content = err ? null : data.toString(); + sourceFiles[filename] = content; + + // We always want to set the cache, even to null which means there was an error reading the file. + // We do not want to try to read the file again. + FILE_CONTENT_CACHE.set(filename, content); + count++; + if (count === filenames.length) { + resolve(sourceFiles); + } + }); } - - // We always want to set the cache, even to null which means there was an error reading the file. - // We do not want to try to read the file again. - FILE_CONTENT_CACHE.set(filename, content); - } - - return sourceFiles; + }); } -/** JSDoc */ -export async function extractStackFromError(error: Error): Promise { +/** + * @hidden + */ +export function extractStackFromError(error: Error): stacktrace.StackFrame[] { const stack = stacktrace.parse(error); if (!stack) { return []; @@ -129,8 +130,10 @@ export async function extractStackFromError(error: Error): Promise { +/** + * @hidden + */ +export function parseStack(stack: stacktrace.StackFrame[], options?: NodeOptions): SyncPromise { const filesToRead: string[] = []; const linesOfContext = @@ -171,15 +174,15 @@ export async function parseStack(stack: stacktrace.StackFrame[], options?: NodeO // We do an early return if we do not want to fetch context liens if (linesOfContext <= 0) { - return frames; + return SyncPromise.resolve(frames); } try { - return await addPrePostContext(filesToRead, frames, linesOfContext); + return addPrePostContext(filesToRead, frames, linesOfContext); } catch (_) { // This happens in electron for example where we are not able to read files from asar. // So it's fine, we recover be just returning all frames without pre/post context. - return frames; + return SyncPromise.resolve(frames); } } @@ -189,63 +192,78 @@ export async function parseStack(stack: stacktrace.StackFrame[], options?: NodeO * @param filesToRead string[] of filepaths * @param frames StackFrame[] containg all frames */ -async function addPrePostContext( +function addPrePostContext( filesToRead: string[], frames: StackFrame[], linesOfContext: number, -): Promise { - const sourceFiles = await readSourceFiles(filesToRead); - return frames.map(frame => { - if (frame.filename && sourceFiles[frame.filename]) { - try { - const lines = sourceFiles[frame.filename].split('\n'); - - frame.pre_context = lines - .slice(Math.max(0, (frame.lineno || 0) - (linesOfContext + 1)), (frame.lineno || 0) - 1) - .map((line: string) => snipLine(line, 0)); - - frame.context_line = snipLine(lines[(frame.lineno || 0) - 1], frame.colno || 0); - - frame.post_context = lines - .slice(frame.lineno || 0, (frame.lineno || 0) + linesOfContext) - .map((line: string) => snipLine(line, 0)); - } catch (e) { - // anomaly, being defensive in case - // unlikely to ever happen in practice but can definitely happen in theory - } - } - return frame; - }); +): SyncPromise { + return new SyncPromise(resolve => + readSourceFiles(filesToRead).then(sourceFiles => { + const result = frames.map(frame => { + if (frame.filename && sourceFiles[frame.filename]) { + try { + const lines = (sourceFiles[frame.filename] as string).split('\n'); + + frame.pre_context = lines + .slice(Math.max(0, (frame.lineno || 0) - (linesOfContext + 1)), (frame.lineno || 0) - 1) + .map((line: string) => snipLine(line, 0)); + + frame.context_line = snipLine(lines[(frame.lineno || 0) - 1], frame.colno || 0); + + frame.post_context = lines + .slice(frame.lineno || 0, (frame.lineno || 0) + linesOfContext) + .map((line: string) => snipLine(line, 0)); + } catch (e) { + // anomaly, being defensive in case + // unlikely to ever happen in practice but can definitely happen in theory + } + } + return frame; + }); + + resolve(result); + }), + ); } -/** JSDoc */ -export async function getExceptionFromError(error: Error, options?: NodeOptions): Promise { +/** + * @hidden + */ +export function getExceptionFromError(error: Error, options?: NodeOptions): SyncPromise { const name = error.name || error.constructor.name; - const stack = await extractStackFromError(error); - const frames = await parseStack(stack, options); - - return { - stacktrace: { - frames: prepareFramesForEvent(frames), - }, - type: name, - value: error.message, - }; + const stack = extractStackFromError(error); + return new SyncPromise(resolve => + parseStack(stack, options).then(frames => { + const result = { + stacktrace: { + frames: prepareFramesForEvent(frames), + }, + type: name, + value: error.message, + }; + resolve(result); + }), + ); } -/** JSDoc */ -export async function parseError(error: ExtendedError, options?: NodeOptions): Promise { - const name = error.name || error.constructor.name; - const exception = await getExceptionFromError(error, options); - return { - exception: { - values: [exception], - }, - message: `${name}: ${error.message || ''}`, - }; +/** + * @hidden + */ +export function parseError(error: ExtendedError, options?: NodeOptions): SyncPromise { + return new SyncPromise(resolve => + getExceptionFromError(error, options).then((exception: Exception) => { + resolve({ + exception: { + values: [exception], + }, + }); + }), + ); } -/** JSDoc */ +/** + * @hidden + */ export function prepareFramesForEvent(stack: StackFrame[]): StackFrame[] { if (!stack || !stack.length) { return []; diff --git a/packages/node/src/sdk.ts b/packages/node/src/sdk.ts index f96ca44c09fa..a70e5fb69ac4 100644 --- a/packages/node/src/sdk.ts +++ b/packages/node/src/sdk.ts @@ -29,30 +29,40 @@ export const defaultIntegrations = [ * provided methods. * * @example + * ``` + * * const { init } = require('@sentry/node'); * * init({ * dsn: '__DSN__', * // ... * }); - * + * ``` * * @example + * ``` + * * const { configureScope } = require('@sentry/node'); * configureScope((scope: Scope) => { * scope.setExtra({ battery: 0.7 }); * scope.setTag({ user_mode: 'admin' }); * scope.setUser({ id: '4711' }); * }); + * ``` * * @example + * ``` + * * const { addBreadcrumb } = require('@sentry/node'); * addBreadcrumb({ * message: 'My Breadcrumb', * // ... * }); + * ``` * * @example + * ``` + * * const Sentry = require('@sentry/node'); * Sentry.captureMessage('Hello, world!'); * Sentry.captureException(new Error('Good bye')); @@ -62,8 +72,9 @@ export const defaultIntegrations = [ * // ... * ], * }); + * ``` * - * @see NodeOptions for documentation on configuration options. + * @see {@link NodeOptions} for documentation on configuration options. */ export function init(options: NodeOptions = {}): void { if (options.defaultIntegrations === undefined) { diff --git a/packages/node/src/transports/base.ts b/packages/node/src/transports/base.ts index c1b828757922..becf36ba988d 100644 --- a/packages/node/src/transports/base.ts +++ b/packages/node/src/transports/base.ts @@ -1,13 +1,23 @@ -import { API, PromiseBuffer, SentryError } from '@sentry/core'; -import { SentryResponse, Status, Transport, TransportOptions } from '@sentry/types'; +import { API } from '@sentry/core'; +import { Event, Response, Status, Transport, TransportOptions } from '@sentry/types'; +import { SentryError } from '@sentry/utils/error'; +import { PromiseBuffer } from '@sentry/utils/promisebuffer'; import * as fs from 'fs'; import * as http from 'http'; import * as https from 'https'; import * as url from 'url'; import { SDK_NAME, SDK_VERSION } from '../version'; -/** Internal used interface for typescript */ +/** + * Internal used interface for typescript. + * @hidden + */ export interface HTTPRequest { + /** + * Request wrapper + * @param options These are {@see TransportOptions} + * @param callback Callback when request is finished + */ request( options: http.RequestOptions | https.RequestOptions | string | url.URL, callback?: (res: http.IncomingMessage) => void, @@ -26,7 +36,7 @@ export abstract class BaseTransport implements Transport { public client?: http.Agent | https.Agent; /** A simple buffer holding all requests. */ - protected readonly buffer: PromiseBuffer = new PromiseBuffer(30); + protected readonly buffer: PromiseBuffer = new PromiseBuffer(30); /** Create instance and set this.dsn */ public constructor(public options: TransportOptions) { @@ -61,9 +71,9 @@ export abstract class BaseTransport implements Transport { } /** JSDoc */ - protected async sendWithModule(httpModule: HTTPRequest, body: string): Promise { + protected async sendWithModule(httpModule: HTTPRequest, event: Event): Promise { return this.buffer.add( - new Promise((resolve, reject) => { + new Promise((resolve, reject) => { const req = httpModule.request(this.getRequestOptions(), (res: http.IncomingMessage) => { res.setEncoding('utf8'); if (res.statusCode && res.statusCode >= 200 && res.statusCode < 300) { @@ -87,7 +97,7 @@ export abstract class BaseTransport implements Transport { }); }); req.on('error', reject); - req.end(body); + req.end(JSON.stringify(event)); }), ); } @@ -95,7 +105,7 @@ export abstract class BaseTransport implements Transport { /** * @inheritDoc */ - public async sendEvent(_: string): Promise { + public async sendEvent(_: Event): Promise { throw new SentryError('Transport Class has to implement `sendEvent` method.'); } diff --git a/packages/node/src/transports/http.ts b/packages/node/src/transports/http.ts index 4be6ce3ca8f8..f31a9fc09d79 100644 --- a/packages/node/src/transports/http.ts +++ b/packages/node/src/transports/http.ts @@ -1,5 +1,5 @@ -import { SentryError } from '@sentry/core'; -import { SentryResponse, TransportOptions } from '@sentry/types'; +import { Event, Response, TransportOptions } from '@sentry/types'; +import { SentryError } from '@sentry/utils/error'; import * as http from 'http'; import * as HttpsProxyAgent from 'https-proxy-agent'; import { BaseTransport } from './base'; @@ -20,10 +20,10 @@ export class HTTPTransport extends BaseTransport { /** * @inheritDoc */ - public async sendEvent(body: string): Promise { + public async sendEvent(event: Event): Promise { if (!this.module) { throw new SentryError('No module available in HTTPTransport'); } - return this.sendWithModule(this.module, body); + return this.sendWithModule(this.module, event); } } diff --git a/packages/node/src/transports/https.ts b/packages/node/src/transports/https.ts index 35ca3353bde8..2b2726387d11 100644 --- a/packages/node/src/transports/https.ts +++ b/packages/node/src/transports/https.ts @@ -1,5 +1,5 @@ -import { SentryError } from '@sentry/core'; -import { SentryResponse, TransportOptions } from '@sentry/types'; +import { Event, Response, TransportOptions } from '@sentry/types'; +import { SentryError } from '@sentry/utils/error'; import * as https from 'https'; import * as HttpsProxyAgent from 'https-proxy-agent'; import { BaseTransport } from './base'; @@ -20,10 +20,10 @@ export class HTTPSTransport extends BaseTransport { /** * @inheritDoc */ - public async sendEvent(body: string): Promise { + public async sendEvent(event: Event): Promise { if (!this.module) { throw new SentryError('No module available in HTTPSTransport'); } - return this.sendWithModule(this.module, body); + return this.sendWithModule(this.module, event); } } diff --git a/packages/node/test/helper/settimeouttransport.ts b/packages/node/test/helper/settimeouttransport.ts index 313504b2b083..2cfa2bd88465 100644 --- a/packages/node/test/helper/settimeouttransport.ts +++ b/packages/node/test/helper/settimeouttransport.ts @@ -1,10 +1,10 @@ -import { SentryResponse, Status } from '../../src'; +import { Response, Status } from '../../src'; import { BaseTransport } from '../../src/transports'; export class SetTimeoutTransport extends BaseTransport { - public async sendEvent(_: string): Promise { + public async sendEvent(_: string): Promise { return this.buffer.add( - new Promise(resolve => { + new Promise(resolve => { setTimeout(() => { resolve({ status: Status.fromHttpCode(200), diff --git a/packages/node/test/index.test.ts b/packages/node/test/index.test.ts index 75cfb49a2a90..55d4f7e6f1f9 100644 --- a/packages/node/test/index.test.ts +++ b/packages/node/test/index.test.ts @@ -1,19 +1,18 @@ import * as domain from 'domain'; - import { addBreadcrumb, captureEvent, captureException, captureMessage, configureScope, + Event, getCurrentHub, init, - NodeBackend, NodeClient, + Response, Scope, - SentryEvent, - SentryResponse, } from '../src'; +import { NodeBackend } from '../src/backend'; import { SetTimeoutTransport } from './helper/settimeouttransport'; const dsn = 'https://53039209a22b4ec1bcc296a3c9fdecd6@sentry.io/4291'; @@ -110,7 +109,7 @@ describe('SentryNode', () => { }); describe('breadcrumbs', () => { - let s: jest.Mock<(event: SentryEvent) => Promise>; + let s: jest.Mock<(event: Event) => void>; beforeEach(() => { s = jest.spyOn(NodeBackend.prototype, 'sendEvent').mockImplementation(async () => Promise.resolve({ code: 200 })); @@ -122,7 +121,7 @@ describe('SentryNode', () => { test('record auto breadcrumbs', done => { const client = new NodeClient({ - beforeSend: (event: SentryEvent) => { + beforeSend: (event: Event) => { // TODO: It should be 3, but we don't capture a breadcrumb // for our own captureMessage/captureException calls yet expect(event.breadcrumbs!).toHaveLength(2); @@ -131,7 +130,6 @@ describe('SentryNode', () => { }, dsn, }); - client.install(); getCurrentHub().bindClient(client); addBreadcrumb({ message: 'test1' }); addBreadcrumb({ message: 'test2' }); @@ -140,7 +138,7 @@ describe('SentryNode', () => { }); describe('capture', () => { - let s: jest.Mock<(event: SentryEvent) => Promise>; + let s: jest.Mock<(event: Event) => void>; beforeEach(() => { s = jest.spyOn(NodeBackend.prototype, 'sendEvent').mockImplementation(async () => Promise.resolve({ code: 200 })); @@ -154,7 +152,7 @@ describe('SentryNode', () => { expect.assertions(5); getCurrentHub().bindClient( new NodeClient({ - beforeSend: (event: SentryEvent) => { + beforeSend: (event: Event) => { expect(event.tags).toEqual({ test: '1' }); expect(event.exception).not.toBeUndefined(); expect(event.exception!.values![0]).not.toBeUndefined(); @@ -180,7 +178,7 @@ describe('SentryNode', () => { expect.assertions(10); getCurrentHub().bindClient( new NodeClient({ - beforeSend: (event: SentryEvent) => { + beforeSend: (event: Event) => { expect(event.tags).toEqual({ test: '1' }); expect(event.exception).not.toBeUndefined(); expect(event.exception!.values![0]).not.toBeUndefined(); @@ -212,7 +210,7 @@ describe('SentryNode', () => { expect.assertions(2); getCurrentHub().bindClient( new NodeClient({ - beforeSend: (event: SentryEvent) => { + beforeSend: (event: Event) => { expect(event.message).toBe('test'); expect(event.exception).toBeUndefined(); done(); @@ -228,7 +226,7 @@ describe('SentryNode', () => { expect.assertions(2); getCurrentHub().bindClient( new NodeClient({ - beforeSend: (event: SentryEvent) => { + beforeSend: (event: Event) => { expect(event.message).toBe('test event'); expect(event.exception).toBeUndefined(); done(); @@ -244,7 +242,7 @@ describe('SentryNode', () => { const d = domain.create(); const client = new NodeClient({ - beforeSend: (event: SentryEvent) => { + beforeSend: (event: Event) => { expect(event.message).toBe('test domain'); expect(event.exception).toBeUndefined(); done(); @@ -264,7 +262,7 @@ describe('SentryNode', () => { expect.assertions(1); getCurrentHub().bindClient( new NodeClient({ - beforeSend: (event: SentryEvent) => { + beforeSend: (event: Event) => { expect( event.exception!.values![0].stacktrace!.frames![ event.exception!.values![0].stacktrace!.frames!.length - 1 diff --git a/packages/node/test/integrations/linkederrors.test.ts b/packages/node/test/integrations/linkederrors.test.ts index 1f41ea9265d0..9a391fc918b8 100644 --- a/packages/node/test/integrations/linkederrors.test.ts +++ b/packages/node/test/integrations/linkederrors.test.ts @@ -1,12 +1,10 @@ -import { NodeBackend } from '../../src'; +import { ExtendedError } from '@sentry/types'; +import { Event } from '../../src'; +import { NodeBackend } from '../../src/backend'; import { LinkedErrors } from '../../src/integrations/linkederrors'; let linkedErrors: LinkedErrors; -interface ExtendedError extends Error { - [key: string]: any; -} - describe('LinkedErrors', () => { beforeEach(() => { linkedErrors = new LinkedErrors(); @@ -14,26 +12,37 @@ describe('LinkedErrors', () => { describe('handler', () => { it('should bail out if event doesnt contain exception', async () => { + expect.assertions(2); const spy = jest.spyOn(linkedErrors, 'walkErrorTree'); const event = { message: 'foo', }; - const result = await linkedErrors.handler(event); - expect(spy.mock.calls.length).toEqual(0); - expect(result).toEqual(event); + return linkedErrors.handler(event).then(result => { + expect(spy.mock.calls.length).toEqual(0); + expect(result).toEqual(event); + }); }); it('should bail out if event contains exception, but no hint', async () => { + expect.assertions(2); const spy = jest.spyOn(linkedErrors, 'walkErrorTree'); const one = new Error('originalException'); const backend = new NodeBackend({}); - const event = await backend.eventFromException(one); - const result = await linkedErrors.handler(event); - expect(spy.mock.calls.length).toEqual(0); - expect(result).toEqual(event); + let event: Event | undefined; + return backend + .eventFromException(one) + .then(eventFromException => { + event = eventFromException; + return linkedErrors.handler(eventFromException); + }) + .then(result => { + expect(spy.mock.calls.length).toEqual(0); + expect(result).toEqual(event); + }); }); it('should call walkErrorTree if event contains exception and hint with originalException', async () => { + expect.assertions(1); const spy = jest.spyOn(linkedErrors, 'walkErrorTree').mockImplementation( async () => new Promise<[]>(resolve => { @@ -42,14 +51,19 @@ describe('LinkedErrors', () => { ); const one = new Error('originalException'); const backend = new NodeBackend({}); - const event = await backend.eventFromException(one); - await linkedErrors.handler(event, { - originalException: one, - }); - expect(spy.mock.calls.length).toEqual(1); + return backend.eventFromException(one).then(event => + linkedErrors + .handler(event, { + originalException: one, + }) + .then(_ => { + expect(spy.mock.calls.length).toEqual(1); + }), + ); }); it('should recursively walk error to find linked exceptions and assign them to the event', async () => { + expect.assertions(10); const one: ExtendedError = new Error('one'); const two: ExtendedError = new TypeError('two'); const three: ExtendedError = new SyntaxError('three'); @@ -57,24 +71,28 @@ describe('LinkedErrors', () => { two.cause = three; const backend = new NodeBackend({}); - const event = await backend.eventFromException(one); - const result = await linkedErrors.handler(event, { - originalException: one, - }); - - expect(result!.exception!.values!.length).toEqual(3); - expect(result!.exception!.values![0].type).toEqual('SyntaxError'); - expect(result!.exception!.values![0].value).toEqual('three'); - expect(result!.exception!.values![0].stacktrace).toHaveProperty('frames'); - expect(result!.exception!.values![1].type).toEqual('TypeError'); - expect(result!.exception!.values![1].value).toEqual('two'); - expect(result!.exception!.values![1].stacktrace).toHaveProperty('frames'); - expect(result!.exception!.values![2].type).toEqual('Error'); - expect(result!.exception!.values![2].value).toEqual('one'); - expect(result!.exception!.values![2].stacktrace).toHaveProperty('frames'); + return backend.eventFromException(one).then(event => + linkedErrors + .handler(event, { + originalException: one, + }) + .then(result => { + expect(result!.exception!.values!.length).toEqual(3); + expect(result!.exception!.values![0].type).toEqual('SyntaxError'); + expect(result!.exception!.values![0].value).toEqual('three'); + expect(result!.exception!.values![0].stacktrace).toHaveProperty('frames'); + expect(result!.exception!.values![1].type).toEqual('TypeError'); + expect(result!.exception!.values![1].value).toEqual('two'); + expect(result!.exception!.values![1].stacktrace).toHaveProperty('frames'); + expect(result!.exception!.values![2].type).toEqual('Error'); + expect(result!.exception!.values![2].value).toEqual('one'); + expect(result!.exception!.values![2].stacktrace).toHaveProperty('frames'); + }), + ); }); it('should allow to change walk key', async () => { + expect.assertions(10); linkedErrors = new LinkedErrors({ key: 'reason', }); @@ -86,24 +104,28 @@ describe('LinkedErrors', () => { two.reason = three; const backend = new NodeBackend({}); - const event = await backend.eventFromException(one); - const result = await linkedErrors.handler(event, { - originalException: one, - }); - - expect(result!.exception!.values!.length).toEqual(3); - expect(result!.exception!.values![0].type).toEqual('SyntaxError'); - expect(result!.exception!.values![0].value).toEqual('three'); - expect(result!.exception!.values![0].stacktrace).toHaveProperty('frames'); - expect(result!.exception!.values![1].type).toEqual('TypeError'); - expect(result!.exception!.values![1].value).toEqual('two'); - expect(result!.exception!.values![1].stacktrace).toHaveProperty('frames'); - expect(result!.exception!.values![2].type).toEqual('Error'); - expect(result!.exception!.values![2].value).toEqual('one'); - expect(result!.exception!.values![2].stacktrace).toHaveProperty('frames'); + return backend.eventFromException(one).then(event => + linkedErrors + .handler(event, { + originalException: one, + }) + .then(result => { + expect(result!.exception!.values!.length).toEqual(3); + expect(result!.exception!.values![0].type).toEqual('SyntaxError'); + expect(result!.exception!.values![0].value).toEqual('three'); + expect(result!.exception!.values![0].stacktrace).toHaveProperty('frames'); + expect(result!.exception!.values![1].type).toEqual('TypeError'); + expect(result!.exception!.values![1].value).toEqual('two'); + expect(result!.exception!.values![1].stacktrace).toHaveProperty('frames'); + expect(result!.exception!.values![2].type).toEqual('Error'); + expect(result!.exception!.values![2].value).toEqual('one'); + expect(result!.exception!.values![2].stacktrace).toHaveProperty('frames'); + }), + ); }); it('should allow to change stack size limit', async () => { + expect.assertions(7); linkedErrors = new LinkedErrors({ limit: 2, }); @@ -115,18 +137,21 @@ describe('LinkedErrors', () => { two.cause = three; const backend = new NodeBackend({}); - const event = await backend.eventFromException(one); - const result = await linkedErrors.handler(event, { - originalException: one, - }); - - expect(result!.exception!.values!.length).toEqual(2); - expect(result!.exception!.values![0].type).toEqual('TypeError'); - expect(result!.exception!.values![0].value).toEqual('two'); - expect(result!.exception!.values![0].stacktrace).toHaveProperty('frames'); - expect(result!.exception!.values![1].type).toEqual('Error'); - expect(result!.exception!.values![1].value).toEqual('one'); - expect(result!.exception!.values![1].stacktrace).toHaveProperty('frames'); + return backend.eventFromException(one).then(event => + linkedErrors + .handler(event, { + originalException: one, + }) + .then(result => { + expect(result!.exception!.values!.length).toEqual(2); + expect(result!.exception!.values![0].type).toEqual('TypeError'); + expect(result!.exception!.values![0].value).toEqual('two'); + expect(result!.exception!.values![0].stacktrace).toHaveProperty('frames'); + expect(result!.exception!.values![1].type).toEqual('Error'); + expect(result!.exception!.values![1].value).toEqual('one'); + expect(result!.exception!.values![1].stacktrace).toHaveProperty('frames'); + }), + ); }); }); }); diff --git a/packages/node/test/integrations/transaction.test.ts b/packages/node/test/integrations/transaction.test.ts index 8341fd6e496a..e59f724bdd51 100644 --- a/packages/node/test/integrations/transaction.test.ts +++ b/packages/node/test/integrations/transaction.test.ts @@ -4,8 +4,8 @@ const transaction: Transaction = new Transaction(); describe('Transaction', () => { describe('extracts info from module/function of the first `in_app` frame', () => { - it('using module only', async () => { - const event = await transaction.process({ + it('using module only', () => { + const event = transaction.process({ exception: { values: [ { @@ -30,8 +30,8 @@ describe('Transaction', () => { expect(event.transaction).toEqual('Qux/?'); }); - it('using function only', async () => { - const event = await transaction.process({ + it('using function only', () => { + const event = transaction.process({ exception: { values: [ { @@ -56,8 +56,8 @@ describe('Transaction', () => { expect(event.transaction).toEqual('?/Baz'); }); - it('using module and function', async () => { - const event = await transaction.process({ + it('using module and function', () => { + const event = transaction.process({ exception: { values: [ { @@ -84,8 +84,8 @@ describe('Transaction', () => { expect(event.transaction).toEqual('Foo/Bar'); }); - it('using default', async () => { - const event = await transaction.process({ + it('using default', () => { + const event = transaction.process({ exception: { values: [ { @@ -108,8 +108,8 @@ describe('Transaction', () => { expect(event.transaction).toEqual(''); }); - it('no value with no `in_app` frame', async () => { - const event = await transaction.process({ + it('no value with no `in_app` frame', () => { + const event = transaction.process({ exception: { values: [ { diff --git a/packages/node/test/parsers.test.ts b/packages/node/test/parsers.test.ts index 1337413cc53f..90372812f0d2 100644 --- a/packages/node/test/parsers.test.ts +++ b/packages/node/test/parsers.test.ts @@ -1,7 +1,6 @@ -// import { StackFrame } from '@sentry/types'; import * as fs from 'fs'; import * as stacktrace from 'stack-trace'; -import { Parsers } from '../src'; +import * as Parsers from '../src/parsers'; import { getError } from './helper/error'; describe('parsers.ts', () => { @@ -19,27 +18,41 @@ describe('parsers.ts', () => { }); describe('lru file cache', () => { - test('parseStack with same file', async () => { - await Parsers.parseStack(frames); - const mockCalls = spy.mock.calls.length; - await Parsers.parseStack(frames); - // Calls to readFile shouldn't increase if there isn't a new error - expect(spy).toHaveBeenCalledTimes(mockCalls); + test('parseStack with same file', done => { + expect.assertions(1); + let mockCalls = 0; + Parsers.parseStack(frames).then(_ => { + mockCalls = spy.mock.calls.length; + Parsers.parseStack(frames).then(_1 => { + // Calls to readFile shouldn't increase if there isn't a new error + expect(spy).toHaveBeenCalledTimes(mockCalls); + done(); + }); + }); }); - test('parseStack with adding different file', async () => { - await Parsers.parseStack(frames); - const mockCalls = spy.mock.calls.length; - await Parsers.parseStack(stacktrace.parse(getError())); - const newErrorCalls = spy.mock.calls.length; - expect(newErrorCalls).toBeGreaterThan(mockCalls); - await Parsers.parseStack(stacktrace.parse(getError())); - expect(spy).toHaveBeenCalledTimes(newErrorCalls); + test('parseStack with adding different file', done => { + expect.assertions(2); + let mockCalls = 0; + let newErrorCalls = 0; + Parsers.parseStack(frames).then(_ => { + mockCalls = spy.mock.calls.length; + Parsers.parseStack(stacktrace.parse(getError())).then(_1 => { + newErrorCalls = spy.mock.calls.length; + expect(newErrorCalls).toBeGreaterThan(mockCalls); + Parsers.parseStack(stacktrace.parse(getError())).then(_2 => { + expect(spy).toHaveBeenCalledTimes(newErrorCalls); + done(); + }); + }); + }); }); }); test('parseStack with no context', async () => { - await Parsers.parseStack(frames, { frameContextLines: 0 }); - expect(spy).toHaveBeenCalledTimes(0); + expect.assertions(1); + return Parsers.parseStack(frames, { frameContextLines: 0 }).then(_ => { + expect(spy).toHaveBeenCalledTimes(0); + }); }); }); diff --git a/packages/node/test/transports/http.test.ts b/packages/node/test/transports/http.test.ts index a38952233968..fa6810fe28ec 100644 --- a/packages/node/test/transports/http.test.ts +++ b/packages/node/test/transports/http.test.ts @@ -1,5 +1,5 @@ -import { SentryError } from '@sentry/core'; import { TransportOptions } from '@sentry/types'; +import { SentryError } from '@sentry/utils/error'; import * as HttpsProxyAgent from 'https-proxy-agent'; import { HTTPTransport } from '../../src/transports/http'; @@ -44,11 +44,9 @@ describe('HTTPTransport', () => { test('send 200', async () => { const transport = createTransport({ dsn }); - await transport.sendEvent( - JSON.stringify({ - message: 'test', - }), - ); + await transport.sendEvent({ + message: 'test', + }); const requestOptions = (transport.module!.request as jest.Mock).mock.calls[0][0]; assertBasicOptions(requestOptions); @@ -60,11 +58,9 @@ describe('HTTPTransport', () => { const transport = createTransport({ dsn }); try { - await transport.sendEvent( - JSON.stringify({ - message: 'test', - }), - ); + await transport.sendEvent({ + message: 'test', + }); } catch (e) { const requestOptions = (transport.module!.request as jest.Mock).mock.calls[0][0]; assertBasicOptions(requestOptions); @@ -80,11 +76,9 @@ describe('HTTPTransport', () => { const transport = createTransport({ dsn }); try { - await transport.sendEvent( - JSON.stringify({ - message: 'test', - }), - ); + await transport.sendEvent({ + message: 'test', + }); } catch (e) { const requestOptions = (transport.module!.request as jest.Mock).mock.calls[0][0]; assertBasicOptions(requestOptions); @@ -100,11 +94,9 @@ describe('HTTPTransport', () => { a: 'b', }, }); - await transport.sendEvent( - JSON.stringify({ - message: 'test', - }), - ); + await transport.sendEvent({ + message: 'test', + }); const requestOptions = (transport.module!.request as jest.Mock).mock.calls[0][0]; assertBasicOptions(requestOptions); @@ -117,11 +109,9 @@ describe('HTTPTransport', () => { dsn, httpProxy: 'http://example.com:8080', }); - await transport.sendEvent( - JSON.stringify({ - message: 'test', - }), - ); + await transport.sendEvent({ + message: 'test', + }); const requestOptions = (transport.module!.request as jest.Mock).mock.calls[0][0]; assertBasicOptions(requestOptions); diff --git a/packages/node/test/transports/https.test.ts b/packages/node/test/transports/https.test.ts index 23ec9063ac55..61ce02f95be9 100644 --- a/packages/node/test/transports/https.test.ts +++ b/packages/node/test/transports/https.test.ts @@ -1,5 +1,5 @@ -import { SentryError } from '@sentry/core'; import { TransportOptions } from '@sentry/types'; +import { SentryError } from '@sentry/utils/error'; import * as HttpsProxyAgent from 'https-proxy-agent'; import { HTTPSTransport } from '../../src/transports/https'; @@ -50,11 +50,9 @@ describe('HTTPSTransport', () => { test('send 200', async () => { const transport = createTransport({ dsn }); - await transport.sendEvent( - JSON.stringify({ - message: 'test', - }), - ); + await transport.sendEvent({ + message: 'test', + }); const requestOptions = (transport.module!.request as jest.Mock).mock.calls[0][0]; assertBasicOptions(requestOptions); @@ -66,11 +64,9 @@ describe('HTTPSTransport', () => { const transport = createTransport({ dsn }); try { - await transport.sendEvent( - JSON.stringify({ - message: 'test', - }), - ); + await transport.sendEvent({ + message: 'test', + }); } catch (e) { const requestOptions = (transport.module!.request as jest.Mock).mock.calls[0][0]; assertBasicOptions(requestOptions); @@ -86,11 +82,9 @@ describe('HTTPSTransport', () => { const transport = createTransport({ dsn }); try { - await transport.sendEvent( - JSON.stringify({ - message: 'test', - }), - ); + await transport.sendEvent({ + message: 'test', + }); } catch (e) { const requestOptions = (transport.module!.request as jest.Mock).mock.calls[0][0]; assertBasicOptions(requestOptions); @@ -106,11 +100,9 @@ describe('HTTPSTransport', () => { a: 'b', }, }); - await transport.sendEvent( - JSON.stringify({ - message: 'test', - }), - ); + await transport.sendEvent({ + message: 'test', + }); const requestOptions = (transport.module!.request as jest.Mock).mock.calls[0][0]; assertBasicOptions(requestOptions); @@ -123,11 +115,9 @@ describe('HTTPSTransport', () => { dsn, httpsProxy: 'https://example.com:8080', }); - await transport.sendEvent( - JSON.stringify({ - message: 'test', - }), - ); + await transport.sendEvent({ + message: 'test', + }); const requestOptions = (transport.module!.request as jest.Mock).mock.calls[0][0]; assertBasicOptions(requestOptions); @@ -144,11 +134,9 @@ describe('HTTPSTransport', () => { caCerts: './some/path.pem', dsn, }); - await transport.sendEvent( - JSON.stringify({ - message: 'test', - }), - ); + await transport.sendEvent({ + message: 'test', + }); const requestOptions = (transport.module!.request as jest.Mock).mock.calls[0][0]; assertBasicOptions(requestOptions); expect(requestOptions.ca).toEqual('mockedCert'); diff --git a/packages/raven-js/LICENSE b/packages/raven-js/LICENSE index 862c9698194b..a8f99efd5460 100644 --- a/packages/raven-js/LICENSE +++ b/packages/raven-js/LICENSE @@ -1,23 +1,21 @@ -Copyright (c) 2018 Sentry (https://sentry.io) and individual contributors. +BSD 2-Clause License + +Copyright (c) 2019, Sentry (https://sentry.io) All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - 1. Redistributions of source code must retain the above copyright notice, -this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright -notice, this list of conditions and the following disclaimer in the -documentation and/or other materials provided with the distribution. +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. - 3. Neither the name of the Sentry nor the names of its contributors may be -used to endorse or promote products derived from this software without specific -prior written permission. +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR diff --git a/packages/raven-node/LICENSE b/packages/raven-node/LICENSE index 862c9698194b..a8f99efd5460 100644 --- a/packages/raven-node/LICENSE +++ b/packages/raven-node/LICENSE @@ -1,23 +1,21 @@ -Copyright (c) 2018 Sentry (https://sentry.io) and individual contributors. +BSD 2-Clause License + +Copyright (c) 2019, Sentry (https://sentry.io) All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - 1. Redistributions of source code must retain the above copyright notice, -this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright -notice, this list of conditions and the following disclaimer in the -documentation and/or other materials provided with the distribution. +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. - 3. Neither the name of the Sentry nor the names of its contributors may be -used to endorse or promote products derived from this software without specific -prior written permission. +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR diff --git a/packages/types/LICENSE b/packages/types/LICENSE index 862c9698194b..8b42db873c95 100644 --- a/packages/types/LICENSE +++ b/packages/types/LICENSE @@ -1,23 +1,25 @@ -Copyright (c) 2018 Sentry (https://sentry.io) and individual contributors. +BSD 3-Clause License + +Copyright (c) 2019, Sentry All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - 1. Redistributions of source code must retain the above copyright notice, -this list of conditions and the following disclaimer. +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above copyright -notice, this list of conditions and the following disclaimer in the -documentation and/or other materials provided with the distribution. +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. - 3. Neither the name of the Sentry nor the names of its contributors may be -used to endorse or promote products derived from this software without specific -prior written permission. +* Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR diff --git a/packages/types/package.json b/packages/types/package.json index 73df8b6744ab..7f86636e7e64 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -16,10 +16,10 @@ }, "devDependencies": { "npm-run-all": "^4.1.2", - "prettier": "^1.14.0", + "prettier": "^1.16.4", "prettier-check": "^2.0.0", - "tslint": "^5.11.0", - "typescript": "^3.2.0" + "tslint": "^5.12.1", + "typescript": "^3.3.3" }, "scripts": { "build": "run-p build:es5 build:esm", diff --git a/packages/types/src/breadcrumb.ts b/packages/types/src/breadcrumb.ts new file mode 100644 index 000000000000..2f186ac7771c --- /dev/null +++ b/packages/types/src/breadcrumb.ts @@ -0,0 +1,17 @@ +import { Severity } from './severity'; + +/** JSDoc */ +export interface Breadcrumb { + type?: string; + level?: Severity; + event_id?: string; + category?: string; + message?: string; + data?: any; + timestamp?: number; +} + +/** JSDoc */ +export interface BreadcrumbHint { + [key: string]: any; +} diff --git a/packages/types/src/client.ts b/packages/types/src/client.ts new file mode 100644 index 000000000000..c01f091c4e89 --- /dev/null +++ b/packages/types/src/client.ts @@ -0,0 +1,73 @@ +import { Dsn } from './dsn'; +import { Event, EventHint } from './event'; +import { Integration, IntegrationClass } from './integration'; +import { Options } from './options'; +import { Scope } from './scope'; +import { Severity } from './severity'; + +/** + * User-Facing Sentry SDK Client. + * + * This interface contains all methods to interface with the SDK once it has + * been installed. It allows to send events to Sentry, record breadcrumbs and + * set a context included in every event. Since the SDK mutates its environment, + * there will only be one instance during runtime. + * + */ +export interface Client { + /** + * Captures an exception event and sends it to Sentry. + * + * @param exception An exception-like object. + * @param hint May contain additional information about the original exception. + * @param scope An optional scope containing event metadata. + * @returns The event id + */ + captureException(exception: any, hint?: EventHint, scope?: Scope): string | undefined; + + /** + * Captures a message event and sends it to Sentry. + * + * @param message The message to send to Sentry. + * @param level Define the level of the message. + * @param hint May contain additional information about the original exception. + * @param scope An optional scope containing event metadata. + * @returns The event id + */ + captureMessage(message: string, level?: Severity, hint?: EventHint, scope?: Scope): string | undefined; + + /** + * Captures a manually created event and sends it to Sentry. + * + * @param event The event to send to Sentry. + * @param hint May contain additional information about the original exception. + * @param scope An optional scope containing event metadata. + * @returns The event id + */ + captureEvent(event: Event, hint?: EventHint, scope?: Scope): string | undefined; + + /** Returns the current Dsn. */ + getDsn(): Dsn | undefined; + + /** Returns the current options. */ + getOptions(): O; + + /** + * A promise that resolves when all current events have been sent. + * If you provide a timeout and the queue takes longer to drain the promise returns false. + * + * @param timeout Maximum time in ms the client should wait. + */ + close(timeout?: number): Promise; + + /** + * A promise that resolves when all current events have been sent. + * If you provide a timeout and the queue takes longer to drain the promise returns false. + * + * @param timeout Maximum time in ms the client should wait. + */ + flush(timeout?: number): Promise; + + /** Returns an array of installed integrations on the client. */ + getIntegration(integartion: IntegrationClass): T | null; +} diff --git a/packages/types/src/dsn.ts b/packages/types/src/dsn.ts new file mode 100644 index 000000000000..117b900064b2 --- /dev/null +++ b/packages/types/src/dsn.ts @@ -0,0 +1,37 @@ +/** Supported Sentry transport protocols in a Dsn. */ +export type DsnProtocol = 'http' | 'https'; + +/** Primitive components of a Dsn. */ +export interface DsnComponents { + /** Protocol used to connect to Sentry. */ + protocol: DsnProtocol; + /** Public authorization key. */ + user: string; + /** Private authorization key (deprecated, optional). */ + pass?: string; + /** Hostname of the Sentry instance. */ + host: string; + /** Port of the Sentry instance. */ + port?: string; + /** Sub path/ */ + path?: string; + /** Project ID */ + projectId: string; +} + +/** Anything that can be parsed into a Dsn. */ +export type DsnLike = string | DsnComponents; + +/** The Sentry Dsn, identifying a Sentry instance and project. */ +export interface Dsn { + /** + * Renders the string representation of this Dsn. + * + * By default, this will render the public representation without the password + * component. To get the deprecated private representation, set `withPassword` + * to true. + * + * @param withPassword When set to true, the password will be included. + */ + toString(withPassword: boolean): string; +} diff --git a/packages/types/src/error.ts b/packages/types/src/error.ts new file mode 100644 index 000000000000..d94becdbaf1f --- /dev/null +++ b/packages/types/src/error.ts @@ -0,0 +1,6 @@ +/** + * Just an Error object with arbitrary attributes attached to it. + */ +export interface ExtendedError extends Error { + [key: string]: any; +} diff --git a/packages/types/src/event.ts b/packages/types/src/event.ts new file mode 100644 index 000000000000..c8d4beed51a1 --- /dev/null +++ b/packages/types/src/event.ts @@ -0,0 +1,45 @@ +import { Breadcrumb } from './breadcrumb'; +import { Exception } from './exception'; +import { Mechanism } from './mechanism'; +import { Request } from './request'; +import { SdkInfo } from './sdkinfo'; +import { Severity } from './severity'; +import { Stacktrace } from './stacktrace'; +import { User } from './user'; + +/** JSDoc */ +export interface Event { + event_id?: string; + message?: string; + timestamp?: number; + level?: Severity; + platform?: string; + logger?: string; + server_name?: string; + release?: string; + dist?: string; + environment?: string; + sdk?: SdkInfo; + request?: Request; + transaction?: string; + modules?: { [key: string]: string }; + fingerprint?: string[]; + exception?: { + values?: Exception[]; + mechanism?: Mechanism; + }; + stacktrace?: Stacktrace; + breadcrumbs?: Breadcrumb[]; + contexts?: { [key: string]: object }; + tags?: { [key: string]: string }; + extra?: { [key: string]: any }; + user?: User; +} + +/** JSDoc */ +export interface EventHint { + event_id?: string; + syntheticException?: Error | null; + originalException?: Error | null; + data?: any; +} diff --git a/packages/types/src/eventprocessor.ts b/packages/types/src/eventprocessor.ts new file mode 100644 index 000000000000..07789fc40d76 --- /dev/null +++ b/packages/types/src/eventprocessor.ts @@ -0,0 +1,9 @@ +import { Event, EventHint } from './event'; + +/** + * Event processors are used to change the event before it will be send. + * We strongly advise to make this function sync. + * Returning a Promise will work just fine, but better be sure that you know what you are doing. + * Event processing will be deferred until your Promise is resolved. + */ +export type EventProcessor = (event: Event, hint?: EventHint) => Promise | Event | null; diff --git a/packages/types/src/exception.ts b/packages/types/src/exception.ts new file mode 100644 index 000000000000..8698da418557 --- /dev/null +++ b/packages/types/src/exception.ts @@ -0,0 +1,10 @@ +import { Stacktrace } from './stacktrace'; + +/** JSDoc */ +export interface Exception { + type?: string; + value?: string; + module?: string; + thread_id?: number; + stacktrace?: Stacktrace; +} diff --git a/packages/types/src/index.ts b/packages/types/src/index.ts index 8f7d84095dd9..f1273ce3aa61 100644 --- a/packages/types/src/index.ts +++ b/packages/types/src/index.ts @@ -1,331 +1,24 @@ -/** Supported Sentry transport protocols in a Dsn. */ -export type DsnProtocol = 'http' | 'https'; - -/** Primitive components of a Dsn. */ -export interface DsnComponents { - /** Protocol used to connect to Sentry. */ - protocol: DsnProtocol; - /** Public authorization key. */ - user: string; - /** Private authorization key (deprecated, optional). */ - pass?: string; - /** Hostname of the Sentry instance. */ - host: string; - /** Port of the Sentry instance. */ - port?: string; - /** Sub path/ */ - path?: string; - /** Project ID */ - projectId: string; -} - -/** Anything that can be parsed into a Dsn. */ -export type DsnLike = string | DsnComponents; - -/** JSDoc */ -export enum Severity { - /** JSDoc */ - Fatal = 'fatal', - /** JSDoc */ - Error = 'error', - /** JSDoc */ - Warning = 'warning', - /** JSDoc */ - Log = 'log', - /** JSDoc */ - Info = 'info', - /** JSDoc */ - Debug = 'debug', - /** JSDoc */ - Critical = 'critical', -} - -// tslint:disable:no-unnecessary-qualifier no-namespace -export namespace Severity { - /** - * Converts a string-based level into a {@link Severity}. - * - * @param level string representation of Severity - * @returns Severity - */ - export function fromString(level: string): Severity { - switch (level) { - case 'debug': - return Severity.Debug; - case 'info': - return Severity.Info; - case 'warn': - case 'warning': - return Severity.Warning; - case 'error': - return Severity.Error; - case 'fatal': - return Severity.Fatal; - case 'critical': - return Severity.Critical; - case 'log': - default: - return Severity.Log; - } - } -} - -/** JSDoc */ -export interface Breadcrumb { - type?: string; - level?: Severity; - event_id?: string; - category?: string; - message?: string; - data?: any; - timestamp?: number; -} - -/** JSDoc */ -export interface User { - [key: string]: any; - id?: string; - ip_address?: string; - email?: string; - username?: string; -} - -/** JSDoc */ -export interface SdkInfo { - name: string; - version: string; - integrations?: string[]; - packages?: Package[]; -} - -/** JSDoc */ -export interface Package { - name: string; - version: string; -} - -/** JSDoc */ -export interface StackFrame { - filename?: string; - function?: string; - module?: string; - platform?: string; - lineno?: number; - colno?: number; - abs_path?: string; - context_line?: string; - pre_context?: string[]; - post_context?: string[]; - in_app?: boolean; - vars?: { [key: string]: any }; -} - -/** JSDoc */ -export interface Stacktrace { - frames?: StackFrame[]; - frames_omitted?: [number, number]; -} - -/** JSDoc */ -export interface Thread { - id?: number; - name?: string; - stacktrace?: Stacktrace; - crashed?: boolean; - current?: boolean; -} - -/** JSDoc */ -export interface SentryException { - type?: string; - value?: string; - module?: string; - thread_id?: number; - stacktrace?: Stacktrace; -} - -/** JSDoc */ -export interface Request { - url?: string; - method?: string; - data?: any; - query_string?: string; - cookies?: { [key: string]: string }; - env?: { [key: string]: string }; - headers?: { [key: string]: string }; -} - -/** JSDoc */ -export interface SentryEvent { - event_id?: string; - message?: string; - timestamp?: number; - level?: Severity; - platform?: string; - logger?: string; - server_name?: string; - release?: string; - dist?: string; - environment?: string; - sdk?: SdkInfo; - request?: Request; - transaction?: string; - modules?: { [key: string]: string }; - fingerprint?: string[]; - exception?: { - values?: SentryException[]; - mechanism?: Mechanism; - }; - stacktrace?: Stacktrace; - breadcrumbs?: Breadcrumb[]; - contexts?: { [key: string]: object }; - tags?: { [key: string]: string }; - extra?: { [key: string]: any }; - user?: User; -} - -/** JSDoc */ -export interface Mechanism { - type: string; - handled: boolean; - data?: { - [key: string]: string; - }; -} - -/** Integration interface */ -export interface Integration { - /** - * Returns {@link IntegrationClass.id} - */ - name: string; - // TODO: Remove with v5 - /** @deprecated */ - install?(options?: object): void; - - // This takes no options on purpose, options should be passed in the constructor - setupOnce(): void; // TODO: make not optional -} - -/** Integration Class Interface */ -export interface IntegrationClass { - new (): T; - /** - * Property that holds the integration name - */ - id: string; -} - -/** JSDoc */ -export interface SentryResponse { - status: Status; - event?: SentryEvent; - reason?: string; -} - -/** JSDoc */ -export interface TransportOptions { - [key: string]: any; - /** Sentry DSN */ - dsn: DsnLike; - /** Define custom headers */ - headers?: object; - /** Set a HTTP proxy that should be used for outbound requests. */ - httpProxy?: string; - /** Set a HTTPS proxy that should be used for outbound requests. */ - httpsProxy?: string; - /** HTTPS proxy certificates path */ - caCerts?: string; -} - -/** Transport used sending data to Sentry */ -export interface Transport { - /** - * Sends the body to the Store endpoint in Sentry. - * - * @param body String body that should be sent to Sentry. - */ - sendEvent(body: string): Promise; - - /** - * Call this function to wait until all pending requests have been sent. - * - * @param timeout Number time in ms to wait until the buffer is drained. - */ - close(timeout?: number): Promise; - - // TODO: Remove with v5 - /** @deprecated Implement sendEvent instead */ - captureEvent?(event: SentryEvent): Promise; -} - -/** JSDoc */ -export interface TransportClass { - new (options: TransportOptions): T; -} - -/** The status of an event. */ -export enum Status { - /** The status could not be determined. */ - Unknown = 'unknown', - /** The event was skipped due to configuration or callbacks. */ - Skipped = 'skipped', - /** The event was sent to Sentry successfully. */ - Success = 'success', - /** The client is currently rate limited and will try again later. */ - RateLimit = 'rate_limit', - /** The event could not be processed. */ - Invalid = 'invalid', - /** A server-side error ocurred during submission. */ - Failed = 'failed', -} - -// tslint:disable:no-unnecessary-qualifier no-namespace -export namespace Status { - /** - * Converts a HTTP status code into a {@link Status}. - * - * @param code The HTTP response status code. - * @returns The send status or {@link Status.Unknown}. - */ - export function fromHttpCode(code: number): Status { - if (code >= 200 && code < 300) { - return Status.Success; - } - - if (code === 429) { - return Status.RateLimit; - } - - if (code >= 400 && code < 500) { - return Status.Invalid; - } - - if (code >= 500) { - return Status.Failed; - } - - return Status.Unknown; - } -} - -/** JSDoc */ -export interface SentryWrappedFunction extends Function { - [key: string]: any; - __sentry__?: boolean; - __sentry_wrapped__?: SentryWrappedFunction; - __sentry_original__?: SentryWrappedFunction; -} - -/** JSDoc */ -export interface SentryEventHint { - event_id?: string; - syntheticException?: Error | null; - originalException?: Error | null; - data?: any; -} - -/** JSDoc */ -export interface SentryBreadcrumbHint { - [key: string]: any; -} +export { Breadcrumb, BreadcrumbHint } from './breadcrumb'; +export { Client } from './client'; +export { Dsn, DsnComponents, DsnLike, DsnProtocol } from './dsn'; +export { ExtendedError } from './error'; +export { Event, EventHint } from './event'; +export { EventProcessor } from './eventprocessor'; +export { Exception } from './exception'; +export { Integration, IntegrationClass } from './integration'; +export { LogLevel } from './loglevel'; +export { Mechanism } from './mechanism'; +export { Options } from './options'; +export { Package } from './package'; +export { Request } from './request'; +export { Response } from './response'; +export { Scope } from './scope'; +export { SdkInfo } from './sdkinfo'; +export { Severity } from './severity'; +export { StackFrame } from './stackframe'; +export { Stacktrace } from './stacktrace'; +export { Status } from './status'; +export { Thread } from './thread'; +export { Transport, TransportOptions, TransportClass } from './transport'; +export { User } from './user'; +export { WrappedFunction } from './wrappedfunction'; diff --git a/packages/types/src/integration.ts b/packages/types/src/integration.ts new file mode 100644 index 000000000000..72a30c71066b --- /dev/null +++ b/packages/types/src/integration.ts @@ -0,0 +1,22 @@ +/** Integration Class Interface */ +export interface IntegrationClass { + new (): T; + /** + * Property that holds the integration name + */ + id: string; +} + +/** Integration interface */ +export interface Integration { + /** + * Returns {@link IntegrationClass.id} + */ + name: string; + + /** + * Sets the integration up only once. + * This takes no options on purpose, options should be passed in the constructor + */ + setupOnce(): void; +} diff --git a/packages/types/src/loglevel.ts b/packages/types/src/loglevel.ts new file mode 100644 index 000000000000..7a75d69312dc --- /dev/null +++ b/packages/types/src/loglevel.ts @@ -0,0 +1,11 @@ +/** Console logging verbosity for the SDK. */ +export enum LogLevel { + /** No logs will be generated. */ + None = 0, + /** Only SDK internal errors will be logged. */ + Error = 1, + /** Information useful for debugging the SDK will be logged. */ + Debug = 2, + /** All SDK actions will be logged. */ + Verbose = 3, +} diff --git a/packages/types/src/mechanism.ts b/packages/types/src/mechanism.ts new file mode 100644 index 000000000000..34db72f46d65 --- /dev/null +++ b/packages/types/src/mechanism.ts @@ -0,0 +1,8 @@ +/** JSDoc */ +export interface Mechanism { + type: string; + handled: boolean; + data?: { + [key: string]: string; + }; +} diff --git a/packages/types/src/options.ts b/packages/types/src/options.ts new file mode 100644 index 000000000000..56af609c37a6 --- /dev/null +++ b/packages/types/src/options.ts @@ -0,0 +1,107 @@ +import { Breadcrumb, BreadcrumbHint } from './breadcrumb'; +import { Event, EventHint } from './event'; +import { Integration } from './integration'; +import { LogLevel } from './loglevel'; +import { Transport, TransportClass, TransportOptions } from './transport'; + +/** Base configuration options for every SDK. */ +export interface Options { + /** + * Enable debug functionality in the SDK itself + */ + debug?: boolean; + + /** + * Specifies whether this SDK should activate and send events to Sentry. + * Disabling the SDK reduces all overhead from instrumentation, collecting + * breadcrumbs and capturing events. Defaults to true. + */ + enabled?: boolean; + + /** + * The Dsn used to connect to Sentry and identify the project. If omitted, the + * SDK will not send any data to Sentry. + */ + dsn?: string; + + /** + * If this is set to false, default integrations will not be added, otherwise this will internally be set to the + * recommended default integrations. + */ + defaultIntegrations?: false | Integration[]; + + /** + * List of integrations that should be installed after SDK was initialized. + * Accepts either a list of integrations or a function that receives + * default integrations and returns a new, updated list. + */ + integrations?: Integration[] | ((integrations: Integration[]) => Integration[]); + + /** + * A pattern for error messages which should not be sent to Sentry. + * By default, all errors will be sent. + */ + ignoreErrors?: Array; + + /** + * Transport object that should be used to send events to Sentry + */ + transport?: TransportClass; + + /** + * Options for the default transport that the SDK uses. + */ + transportOptions?: TransportOptions; + + /** + * The release identifier used when uploading respective source maps. Specify + * this value to allow Sentry to resolve the correct source maps when + * processing events. + */ + release?: string; + + /** The current environment of your application (e.g. "production"). */ + environment?: string; + + /** Sets the distribution for all events */ + dist?: string; + + /** The maximum number of breadcrumbs sent with events. Defaults to 100. */ + maxBreadcrumbs?: number; + + /** Console logging verbosity for the SDK Client. */ + logLevel?: LogLevel; + + /** A global sample rate to apply to all events (0 - 1). */ + sampleRate?: number; + + /** Attaches stacktraces to pure capture message / log integrations */ + attachStacktrace?: boolean; + + /** + * A callback invoked during event submission, allowing to optionally modify + * the event before it is sent to Sentry. + * + * Note that you must return a valid event from this callback. If you do not + * wish to modify the event, simply return it at the end. + * Returning null will case the event to be dropped. + * + * @param event The error or message event generated by the SDK. + * @param hint May contain additional information about the original exception. + * @returns A new event that will be sent | null. + */ + beforeSend?(event: Event, hint?: EventHint): Promise | Event | null; + + /** + * A callback invoked when adding a breadcrumb, allowing to optionally modify + * it before adding it to future events. + * + * Note that you must return a valid breadcrumb from this callback. If you do + * not wish to modify the breadcrumb, simply return it at the end. + * Returning null will case the breadcrumb to be dropped. + * + * @param breadcrumb The breadcrumb as created by the SDK. + * @returns The breadcrumb that will be added | null. + */ + beforeBreadcrumb?(breadcrumb: Breadcrumb, hint?: BreadcrumbHint): Breadcrumb | null; +} diff --git a/packages/types/src/package.ts b/packages/types/src/package.ts new file mode 100644 index 000000000000..c44d66e62950 --- /dev/null +++ b/packages/types/src/package.ts @@ -0,0 +1,5 @@ +/** JSDoc */ +export interface Package { + name: string; + version: string; +} diff --git a/packages/types/src/request.ts b/packages/types/src/request.ts new file mode 100644 index 000000000000..980dd498aa73 --- /dev/null +++ b/packages/types/src/request.ts @@ -0,0 +1,10 @@ +/** JSDoc */ +export interface Request { + url?: string; + method?: string; + data?: any; + query_string?: string; + cookies?: { [key: string]: string }; + env?: { [key: string]: string }; + headers?: { [key: string]: string }; +} diff --git a/packages/types/src/response.ts b/packages/types/src/response.ts new file mode 100644 index 000000000000..44efc7f48c10 --- /dev/null +++ b/packages/types/src/response.ts @@ -0,0 +1,9 @@ +import { Event } from './event'; +import { Status } from './status'; + +/** JSDoc */ +export interface Response { + status: Status; + event?: Event; + reason?: string; +} diff --git a/packages/types/src/scope.ts b/packages/types/src/scope.ts new file mode 100644 index 000000000000..a1aeadb7e7cb --- /dev/null +++ b/packages/types/src/scope.ts @@ -0,0 +1,53 @@ +import { Breadcrumb } from './breadcrumb'; +import { EventProcessor } from './eventprocessor'; +import { Severity } from './severity'; +import { User } from './user'; + +/** + * Holds additional event information. {@link Scope.applyToEvent} will be + * called by the client before an event will be sent. + */ +export interface Scope { + /** Add new event processor that will be called after {@link applyToEvent}. */ + addEventProcessor(callback: EventProcessor): Scope; + + /** + * Updates user context information for future events. + * @param user User context object to be set in the current context. + */ + setUser(user: User): Scope; + + /** + * Updates tags context information for future events. + * @param tags Tags context object to merge into current context. + */ + setTag(key: string, value: string): Scope; + + /** + * Updates extra context information for future events. + * @param extra context object to merge into current context. + */ + setExtra(key: string, extra: any): Scope; + + /** + * Sets the fingerprint on the scope to send with the events. + * @param fingerprint string[] to group events in Sentry. + */ + setFingerprint(fingerprint: string[]): Scope; + + /** + * Sets the level on the scope for future events. + * @param level string {@link Severity} + */ + setLevel(level: Severity): Scope; + + /** Clears the current scope and resets its properties. */ + clear(): void; + + /** + * Sets the breadcrumbs in the scope + * @param breadcrumbs Breadcrumb + * @param maxBreadcrumbs number of max breadcrumbs to merged into event. + */ + addBreadcrumb(breadcrumb: Breadcrumb, maxBreadcrumbs?: number): void; +} diff --git a/packages/types/src/sdkinfo.ts b/packages/types/src/sdkinfo.ts new file mode 100644 index 000000000000..45500cad5482 --- /dev/null +++ b/packages/types/src/sdkinfo.ts @@ -0,0 +1,9 @@ +import { Package } from './package'; + +/** JSDoc */ +export interface SdkInfo { + name: string; + version: string; + integrations?: string[]; + packages?: Package[]; +} diff --git a/packages/types/src/severity.ts b/packages/types/src/severity.ts new file mode 100644 index 000000000000..51fcf1b32edb --- /dev/null +++ b/packages/types/src/severity.ts @@ -0,0 +1,47 @@ +/** JSDoc */ +export enum Severity { + /** JSDoc */ + Fatal = 'fatal', + /** JSDoc */ + Error = 'error', + /** JSDoc */ + Warning = 'warning', + /** JSDoc */ + Log = 'log', + /** JSDoc */ + Info = 'info', + /** JSDoc */ + Debug = 'debug', + /** JSDoc */ + Critical = 'critical', +} + +// tslint:disable:no-unnecessary-qualifier no-namespace +export namespace Severity { + /** + * Converts a string-based level into a {@link Severity}. + * + * @param level string representation of Severity + * @returns Severity + */ + export function fromString(level: string): Severity { + switch (level) { + case 'debug': + return Severity.Debug; + case 'info': + return Severity.Info; + case 'warn': + case 'warning': + return Severity.Warning; + case 'error': + return Severity.Error; + case 'fatal': + return Severity.Fatal; + case 'critical': + return Severity.Critical; + case 'log': + default: + return Severity.Log; + } + } +} diff --git a/packages/types/src/stackframe.ts b/packages/types/src/stackframe.ts new file mode 100644 index 000000000000..d228547c6c92 --- /dev/null +++ b/packages/types/src/stackframe.ts @@ -0,0 +1,15 @@ +/** JSDoc */ +export interface StackFrame { + filename?: string; + function?: string; + module?: string; + platform?: string; + lineno?: number; + colno?: number; + abs_path?: string; + context_line?: string; + pre_context?: string[]; + post_context?: string[]; + in_app?: boolean; + vars?: { [key: string]: any }; +} diff --git a/packages/types/src/stacktrace.ts b/packages/types/src/stacktrace.ts new file mode 100644 index 000000000000..120a1b471af6 --- /dev/null +++ b/packages/types/src/stacktrace.ts @@ -0,0 +1,7 @@ +import { StackFrame } from './stackframe'; + +/** JSDoc */ +export interface Stacktrace { + frames?: StackFrame[]; + frames_omitted?: [number, number]; +} diff --git a/packages/types/src/status.ts b/packages/types/src/status.ts new file mode 100644 index 000000000000..182efcacd20c --- /dev/null +++ b/packages/types/src/status.ts @@ -0,0 +1,44 @@ +/** The status of an event. */ +export enum Status { + /** The status could not be determined. */ + Unknown = 'unknown', + /** The event was skipped due to configuration or callbacks. */ + Skipped = 'skipped', + /** The event was sent to Sentry successfully. */ + Success = 'success', + /** The client is currently rate limited and will try again later. */ + RateLimit = 'rate_limit', + /** The event could not be processed. */ + Invalid = 'invalid', + /** A server-side error ocurred during submission. */ + Failed = 'failed', +} + +// tslint:disable:no-unnecessary-qualifier no-namespace +export namespace Status { + /** + * Converts a HTTP status code into a {@link Status}. + * + * @param code The HTTP response status code. + * @returns The send status or {@link Status.Unknown}. + */ + export function fromHttpCode(code: number): Status { + if (code >= 200 && code < 300) { + return Status.Success; + } + + if (code === 429) { + return Status.RateLimit; + } + + if (code >= 400 && code < 500) { + return Status.Invalid; + } + + if (code >= 500) { + return Status.Failed; + } + + return Status.Unknown; + } +} diff --git a/packages/types/src/thread.ts b/packages/types/src/thread.ts new file mode 100644 index 000000000000..5cc1a2b63891 --- /dev/null +++ b/packages/types/src/thread.ts @@ -0,0 +1,10 @@ +import { Stacktrace } from './stacktrace'; + +/** JSDoc */ +export interface Thread { + id?: number; + name?: string; + stacktrace?: Stacktrace; + crashed?: boolean; + current?: boolean; +} diff --git a/packages/types/src/transport.ts b/packages/types/src/transport.ts new file mode 100644 index 000000000000..8595cd11cddf --- /dev/null +++ b/packages/types/src/transport.ts @@ -0,0 +1,38 @@ +import { DsnLike } from './dsn'; +import { Event } from './event'; +import { Response } from './response'; + +/** Transport used sending data to Sentry */ +export interface Transport { + /** + * Sends the body to the Store endpoint in Sentry. + * + * @param body String body that should be sent to Sentry. + */ + sendEvent(event: Event): Promise; + + /** + * Call this function to wait until all pending requests have been sent. + * + * @param timeout Number time in ms to wait until the buffer is drained. + */ + close(timeout?: number): Promise; +} + +/** JSDoc */ +export type TransportClass = new (options: TransportOptions) => T; + +/** JSDoc */ +export interface TransportOptions { + [key: string]: any; + /** Sentry DSN */ + dsn: DsnLike; + /** Define custom headers */ + headers?: object; + /** Set a HTTP proxy that should be used for outbound requests. */ + httpProxy?: string; + /** Set a HTTPS proxy that should be used for outbound requests. */ + httpsProxy?: string; + /** HTTPS proxy certificates path */ + caCerts?: string; +} diff --git a/packages/types/src/user.ts b/packages/types/src/user.ts new file mode 100644 index 000000000000..eae46b008b3e --- /dev/null +++ b/packages/types/src/user.ts @@ -0,0 +1,8 @@ +/** JSDoc */ +export interface User { + [key: string]: any; + id?: string; + ip_address?: string; + email?: string; + username?: string; +} diff --git a/packages/types/src/wrappedfunction.ts b/packages/types/src/wrappedfunction.ts new file mode 100644 index 000000000000..db48773efcca --- /dev/null +++ b/packages/types/src/wrappedfunction.ts @@ -0,0 +1,7 @@ +/** JSDoc */ +export interface WrappedFunction extends Function { + [key: string]: any; + __sentry__?: boolean; + __sentry_wrapped__?: WrappedFunction; + __sentry_original__?: WrappedFunction; +} diff --git a/packages/typescript/LICENSE b/packages/typescript/LICENSE index 862c9698194b..8b42db873c95 100644 --- a/packages/typescript/LICENSE +++ b/packages/typescript/LICENSE @@ -1,23 +1,25 @@ -Copyright (c) 2018 Sentry (https://sentry.io) and individual contributors. +BSD 3-Clause License + +Copyright (c) 2019, Sentry All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - 1. Redistributions of source code must retain the above copyright notice, -this list of conditions and the following disclaimer. +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above copyright -notice, this list of conditions and the following disclaimer in the -documentation and/or other materials provided with the distribution. +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. - 3. Neither the name of the Sentry nor the names of its contributors may be -used to endorse or promote products derived from this software without specific -prior written permission. +* Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR diff --git a/packages/typescript/package.json b/packages/typescript/package.json index dda7bd854e58..e77992fbec28 100644 --- a/packages/typescript/package.json +++ b/packages/typescript/package.json @@ -11,7 +11,7 @@ "access": "public" }, "dependencies": { - "tslint-config-prettier": "^1.12.0" + "tslint-config-prettier": "^1.18.0" }, "peerDependencies": { "tslint": "^5.11.0", diff --git a/packages/typescript/tslint.json b/packages/typescript/tslint.json index 04a6cb6e3c3e..e797c40a8b8e 100644 --- a/packages/typescript/tslint.json +++ b/packages/typescript/tslint.json @@ -15,18 +15,20 @@ "prefer-function-over-method": [false], "strict-boolean-expressions": false, "no-inferrable-types": false, + "ban-ts-ignore": false, + "increment-decrement": false, // These are too strict in tslint:all "comment-format": [true, "check-space"], "completed-docs": [ true, { - "classes": true, - "enums": true, - "enum-members": true, - "functions": true, - "interfaces": true, - "methods": { "tags": { "content": {}, "existence": ["inheritDoc"] } }, - "properties": { "tags": { "content": {}, "existence": ["inheritDoc"] } } + "classes": { "tags": { "content": {}, "existence": ["inheritDoc", "hidden"] } }, + "enums": { "tags": { "content": {}, "existence": ["inheritDoc", "hidden"] } }, + "enum-members": { "tags": { "content": {}, "existence": ["inheritDoc", "hidden"] } }, + "functions": { "tags": { "content": {}, "existence": ["inheritDoc", "hidden"] } }, + "interfaces": { "tags": { "content": {}, "existence": ["inheritDoc", "hidden"] } }, + "methods": { "tags": { "content": {}, "existence": ["inheritDoc", "hidden"] } }, + "properties": { "tags": { "content": {}, "existence": ["inheritDoc", "hidden"] }, "locations": "instance" } } ], "interface-name": [true, "never-prefix"], diff --git a/packages/utils/LICENSE b/packages/utils/LICENSE index 862c9698194b..8b42db873c95 100644 --- a/packages/utils/LICENSE +++ b/packages/utils/LICENSE @@ -1,23 +1,25 @@ -Copyright (c) 2018 Sentry (https://sentry.io) and individual contributors. +BSD 3-Clause License + +Copyright (c) 2019, Sentry All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - 1. Redistributions of source code must retain the above copyright notice, -this list of conditions and the following disclaimer. +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above copyright -notice, this list of conditions and the following disclaimer in the -documentation and/or other materials provided with the distribution. +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. - 3. Neither the name of the Sentry nor the names of its contributors may be -used to endorse or promote products derived from this software without specific -prior written permission. +* Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR diff --git a/packages/utils/package.json b/packages/utils/package.json index fc140f4aabfd..f0def28b6cba 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -18,13 +18,13 @@ }, "devDependencies": { "chai": "^4.1.2", - "jest": "^22.4.3", + "jest": "^24.1.0", "npm-run-all": "^4.1.2", - "prettier": "^1.14.0", + "prettier": "^1.16.4", "prettier-check": "^2.0.0", - "rimraf": "^2.6.2", - "tslint": "^5.11.0", - "typescript": "^3.2.0" + "rimraf": "^2.6.3", + "tslint": "^5.12.1", + "typescript": "^3.3.3" }, "scripts": { "build": "run-s clean && run-p build:es5 build:esm", @@ -42,7 +42,7 @@ "fix:prettier": "prettier --write \"{src,test}/**/*.ts\"", "fix:tslint": "tslint --fix -t stylish -p .", "test": "jest", - "test:watch": "jest --watch --notify" + "test:watch": "jest --watch" }, "jest": { "collectCoverage": true, diff --git a/packages/core/src/error.ts b/packages/utils/src/error.ts similarity index 100% rename from packages/core/src/error.ts rename to packages/utils/src/error.ts diff --git a/packages/utils/src/is.ts b/packages/utils/src/is.ts index 8f4826c739a9..b0de578e4532 100644 --- a/packages/utils/src/is.ts +++ b/packages/utils/src/is.ts @@ -51,28 +51,6 @@ export function isDOMException(wat: any): boolean { return Object.prototype.toString.call(wat) === '[object DOMException]'; } -/** - * Checks whether given value's type is an undefined - * {@link isUndefined}. - * - * @param wat A value to be checked. - * @returns A boolean representing the result. - */ -export function isUndefined(wat: any): boolean { - return wat === void 0; -} - -/** - * Checks whether given value's type is a function - * {@link isFunction}. - * - * @param wat A value to be checked. - * @returns A boolean representing the result. - */ -export function isFunction(wat: any): boolean { - return typeof wat === 'function'; -} - /** * Checks whether given value's type is a string * {@link isString}. @@ -95,17 +73,6 @@ export function isPrimitive(wat: any): boolean { return wat === null || (typeof wat !== 'object' && typeof wat !== 'function'); } -/** - * Checks whether given value's type is an array - * {@link isArray}. - * - * @param wat A value to be checked. - * @returns A boolean representing the result. - */ -export function isArray(wat: any): boolean { - return Object.prototype.toString.call(wat) === '[object Array]'; -} - /** * Checks whether given value's type is an object literal * {@link isPlainObject}. @@ -129,14 +96,13 @@ export function isRegExp(wat: any): boolean { } /** - * Checks whether given value's type is a NaN - * {@link isNaN}. - * + * Checks whether given value has a then function. * @param wat A value to be checked. - * @returns A boolean representing the result. */ -export function isNaN(wat: any): boolean { - return wat !== wat; +export function isThenable(wat: any): boolean { + // tslint:disable:no-unsafe-any + return Boolean(wat && wat.then && typeof wat.then === 'function'); + // tslint:enable:no-unsafe-any } /** diff --git a/packages/utils/src/misc.ts b/packages/utils/src/misc.ts index 75c986a4f48e..b334ffe4633b 100644 --- a/packages/utils/src/misc.ts +++ b/packages/utils/src/misc.ts @@ -1,4 +1,4 @@ -import { SentryEvent, SentryWrappedFunction } from '@sentry/types'; +import { Event, WrappedFunction } from '@sentry/types'; import { isString } from './is'; /** @@ -206,7 +206,7 @@ export function parseUrl( * Extracts either message or type+value from an event that can be used for user-facing logs * @returns event's description */ -export function getEventDescription(event: SentryEvent): string { +export function getEventDescription(event: Event): string { if (event.message) { return event.message; } else if (event.exception && event.exception.values && event.exception.values[0]) { @@ -241,9 +241,9 @@ export function consoleSandbox(callback: () => any): any { // Restore all wrapped console methods levels.forEach(level => { - if (level in global.console && (originalConsole[level] as SentryWrappedFunction).__sentry__) { - wrappedLevels[level] = (originalConsole[level] as SentryWrappedFunction).__sentry_wrapped__; - originalConsole[level] = (originalConsole[level] as SentryWrappedFunction).__sentry_original__; + if (level in global.console && (originalConsole[level] as WrappedFunction).__sentry__) { + wrappedLevels[level] = (originalConsole[level] as WrappedFunction).__sentry_wrapped__; + originalConsole[level] = (originalConsole[level] as WrappedFunction).__sentry_original__; } }); diff --git a/packages/utils/src/object.ts b/packages/utils/src/object.ts index a0fb37af78bc..531b90c6766f 100644 --- a/packages/utils/src/object.ts +++ b/packages/utils/src/object.ts @@ -1,51 +1,6 @@ -import { SentryWrappedFunction } from '@sentry/types'; -import { isArray, isNaN, isPlainObject, isPrimitive, isSyntheticEvent, isUndefined } from './is'; +import { ExtendedError, WrappedFunction } from '@sentry/types'; +import { isError, isPlainObject, isPrimitive, isSyntheticEvent } from './is'; import { Memo } from './memo'; -import { truncate } from './string'; - -/** - * Just an Error object with arbitrary attributes attached to it. - */ -interface ExtendedError extends Error { - [key: string]: any; -} - -/** - * Serializes the given object into a string. - * Like JSON.stringify, but doesn't throw on circular references. - * - * @param object A JSON-serializable object. - * @returns A string containing the serialized object. - */ -export function serialize(object: T): string { - return JSON.stringify(object, serializer({ normalize: false })); -} - -/** - * Deserializes an object from a string previously serialized with - * {@link serialize}. - * - * @param str A serialized object. - * @returns The deserialized object. - */ -export function deserialize(str: string): T { - return JSON.parse(str) as T; -} - -/** - * Creates a deep copy of the given object. - * - * The object must be serializable, i.e.: - * - It must not contain any cycles - * - Only primitive types are allowed (object, array, number, string, boolean) - * - Its depth should be considerably low for performance reasons - * - * @param object A JSON-serializable object. - * @returns The object clone. - */ -export function clone(object: T): T { - return deserialize(serialize(object)); -} /** * Wrap a given object method with a higher-order function @@ -57,11 +12,11 @@ export function clone(object: T): T { */ export function fill(source: { [key: string]: any }, name: string, replacement: (...args: any[]) => any): void { - if (!(name in source) || (source[name] as SentryWrappedFunction).__sentry__) { + if (!(name in source) || (source[name] as WrappedFunction).__sentry__) { return; } const original = source[name] as () => any; - const wrapped = replacement(original) as SentryWrappedFunction; + const wrapped = replacement(original) as WrappedFunction; // Make sure it's a function first, as we need to attach an empty prototype for `defineProperties` to work // otherwise it'll throw "TypeError: Object.defineProperties called on non-object" @@ -102,134 +57,6 @@ export function urlEncode(object: { [key: string]: any }): string { .join('&'); } -// Default Node.js REPL depth -const MAX_SERIALIZE_EXCEPTION_DEPTH = 3; -// 100kB, as 200kB is max payload size, so half sounds reasonable -const MAX_SERIALIZE_EXCEPTION_SIZE = 100 * 1024; -const MAX_SERIALIZE_KEYS_LENGTH = 40; - -/** JSDoc */ -function utf8Length(value: string): number { - // tslint:disable-next-line:no-bitwise - return ~-encodeURI(value).split(/%..|./).length; -} - -/** JSDoc */ -function jsonSize(value: any): number { - return utf8Length(JSON.stringify(value)); -} - -/** JSDoc */ -function serializeValue(value: T): T | string { - const type = Object.prototype.toString.call(value); - - if (typeof value === 'string') { - return truncate(value, 40); - } else if (type === '[object Object]') { - // Node.js REPL notation - return '[Object]'; - } else if (type === '[object Array]') { - // Node.js REPL notation - return '[Array]'; - } else { - return normalizeValue(value) as T; - } -} - -/** JSDoc */ -export function serializeObject(value: T, depth: number): T | string | {} { - if (depth === 0) { - return serializeValue(value); - } - - if (isPlainObject(value)) { - const serialized: { [key: string]: any } = {}; - const val = value as { - [key: string]: any; - }; - - Object.keys(val).forEach((key: string) => { - serialized[key] = serializeObject(val[key], depth - 1); - }); - - return serialized; - } else if (isArray(value)) { - const val = (value as any) as T[]; - return val.map(v => serializeObject(v, depth - 1)); - } - - return serializeValue(value); -} - -/** JSDoc */ -export function limitObjectDepthToSize( - object: { [key: string]: any }, - depth: number = MAX_SERIALIZE_EXCEPTION_DEPTH, - maxSize: number = MAX_SERIALIZE_EXCEPTION_SIZE, -): T { - const serialized = serializeObject(object, depth); - - if (jsonSize(serialize(serialized)) > maxSize) { - return limitObjectDepthToSize(object, depth - 1); - } - - return serialized as T; -} - -/** JSDoc */ -export function serializeKeysToEventMessage(keys: string[], maxLength: number = MAX_SERIALIZE_KEYS_LENGTH): string { - if (!keys.length) { - return '[object has no keys]'; - } - - if (keys[0].length >= maxLength) { - return truncate(keys[0], maxLength); - } - - for (let includedKeys = keys.length; includedKeys > 0; includedKeys--) { - const serialized = keys.slice(0, includedKeys).join(', '); - if (serialized.length > maxLength) { - continue; - } - if (includedKeys === keys.length) { - return serialized; - } - return truncate(serialized, maxLength); - } - - return ''; -} - -// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign#Polyfill -/** JSDoc */ -export function assign(target: any, ...args: any[]): object { - if (target === null || target === undefined) { - throw new TypeError('Cannot convert undefined or null to object'); - } - - const to = Object(target) as { - [key: string]: any; - }; - - // tslint:disable-next-line:prefer-for-of - for (let i = 0; i < args.length; i++) { - const source = args[i]; - if (source !== null) { - for (const nextKey in source as { - [key: string]: any; - }) { - if (Object.prototype.hasOwnProperty.call(source, nextKey)) { - to[nextKey] = (source as { - [key: string]: any; - })[nextKey]; - } - } - } - } - - return to; -} - /** * Transforms Error object into an object literal with all it's attributes * attached to it. @@ -261,6 +88,50 @@ function objectifyError(error: ExtendedError): object { return err; } +/** Calculates bytes size of input string */ +function utf8Length(value: string): number { + // tslint:disable-next-line:no-bitwise + return ~-encodeURI(value).split(/%..|./).length; +} + +/** Calculates bytes size of input object */ +function jsonSize(value: any): number { + return utf8Length(JSON.stringify(value)); +} + +/** JSDoc */ +export function normalizeToSize( + object: { [key: string]: any }, + // Default Node.js REPL depth + depth: number = 3, + // 100kB, as 200kB is max payload size, so half sounds reasonable + maxSize: number = 100 * 1024, +): T { + const serialized = normalize(object, depth); + + if (jsonSize(serialized) > maxSize) { + return normalizeToSize(object, depth - 1, maxSize); + } + + return serialized as T; +} + +/** Transforms any input value into a string form, either primitive value or a type of the input */ +function stringifyValue(value: T): T | string { + // Node.js REPL notation + const type = Object.prototype.toString.call(value) as string; + + if (isPrimitive(value)) { + return value; + } else if (type === '[object Object]') { + return '[Object]'; + } else if (type === '[object Array]') { + return '[Array]'; + } else { + return type; + } +} + /** * normalizeValue() * @@ -271,12 +142,9 @@ function objectifyError(error: ExtendedError): object { * - filter global objects */ function normalizeValue(value: any, key?: any): any { - if (key === 'domain' && typeof value === 'object' && (value as { _events: any })._events) { - return '[Domain]'; - } - - if (key === 'domainEmitter') { - return '[DomainEmitter]'; + if (isError(value)) { + // tslint:disable-next-line:no-unsafe-any + return objectifyError(value); } if (typeof (global as any) !== 'undefined' && value === global) { @@ -291,13 +159,12 @@ function normalizeValue(value: any, key?: any): any { return '[Document]'; } - if (value instanceof Error) { - return objectifyError(value); + if (key === 'domain' && typeof value === 'object' && (value as { _events: any })._events) { + return '[Domain]'; } - // tslint:disable-next-line:strict-type-predicates - if (typeof Event !== 'undefined' && value instanceof Event) { - return Object.getPrototypeOf(value) ? value.constructor.name : 'Event'; + if (key === 'domainEmitter') { + return '[DomainEmitter]'; } // React's SyntheticEvent thingy @@ -305,11 +172,16 @@ function normalizeValue(value: any, key?: any): any { return '[SyntheticEvent]'; } - if (isNaN(value)) { + // tslint:disable-next-line:strict-type-predicates + if (typeof Event !== 'undefined' && value instanceof Event) { + return Object.getPrototypeOf(value) ? value.constructor.name : 'Event'; + } + + if (Number.isNaN(value as number)) { return '[NaN]'; } - if (isUndefined(value)) { + if (value === void 0) { return '[undefined]'; } @@ -321,60 +193,68 @@ function normalizeValue(value: any, key?: any): any { } /** - * Decycles an object to make it safe for json serialization. + * Walks an object to perform a normalization on it * - * @param obj Object to be decycled + * @param key of object that's walked in current iteration + * @param value object to be walked + * @param depth Optional number indicating how deep should walking be performed * @param memo Optional Memo class handling decycling */ -export function decycle(obj: any, memo: Memo = new Memo()): any { - // tslint:disable-next-line:no-unsafe-any - const copy = isArray(obj) ? obj.slice() : isPlainObject(obj) ? assign({}, obj) : obj; - const normalized = normalizeValue(obj); +export function walk(key: string, value: any, depth: number, memo: Memo = new Memo()): any { + // tslint:disable:no-unsafe-any + + // If we reach the maximum depth, stringify whatever left out of it + if (depth === 0) { + return stringifyValue(value); + } - // If an object was normalized to its string form, we should just bail out as theres no point in going down that branch - if (typeof normalized === 'string') { + // If value implements `toJSON` method, call it and return early + if (value !== null && value !== undefined && typeof value.toJSON === 'function') { + return value.toJSON(); + } + + const normalized = normalizeValue(value, key); + // If its a primitive, there are no branches left to walk, so we can just bail out as theres no point in going down that branch any further + if (isPrimitive(normalized)) { return normalized; } - if (!isPrimitive(obj)) { - if (memo.memoize(obj)) { - return '[Circular ~]'; - } - // tslint:disable-next-line - for (const key in obj) { - // Avoid iterating over fields in the prototype if they've somehow been exposed to enumeration. - if (!Object.prototype.hasOwnProperty.call(obj, key)) { - continue; - } - // tslint:disable-next-line - copy[key] = decycle(obj[key], memo); + // Make a copy of the value to prevent any mutations + const copy = Array.isArray(normalized) ? [...normalized] : isPlainObject(normalized) ? { ...normalized } : normalized; + + // If we already walked that branch, bail out + if (memo.memoize(value)) { + return '[Circular ~]'; + } + + for (const innerKey in normalized) { + // Avoid iterating over fields in the prototype if they've somehow been exposed to enumeration. + if (!Object.prototype.hasOwnProperty.call(normalized, innerKey)) { + continue; } - memo.unmemoize(obj); + copy[innerKey] = walk(innerKey, normalized[innerKey], depth - 1, memo); } - return copy; -} + memo.unmemoize(value); -/** - * serializer() - * - * Remove circular references, - * translates undefined/NaN values to "[undefined]"/"[NaN]" respectively, - * and takes care of Error objects serialization - */ -function serializer(options: { normalize: boolean } = { normalize: true }): (key: string, value: any) => any { - // tslint:disable-next-line - return (key: string, value: object) => (options.normalize ? normalizeValue(decycle(value), key) : decycle(value)); + return copy; } /** - * safeNormalize() + * normalize() * - * Creates a copy of the input by applying serializer function on it and parsing it back to unify the data + * - Creates a copy to prevent original input mutation + * - Skip non-enumerablers + * - Calls `toJSON` if implemented + * - Removes circular references + * - Translates non-serializeable values (undefined/NaN/Functions) to serializable format + * - Translates known global objects/Classes to a string representations + * - Takes care of Error objects serialization + * - Optionally limit depth of final output */ -export function safeNormalize(input: any): any { +export function normalize(input: any, depth: number = +Infinity): any { try { - return JSON.parse(JSON.stringify(input, serializer({ normalize: true }))); + return JSON.parse(JSON.stringify(input, (key: string, value: any) => walk(key, value, depth))); } catch (_oO) { return '**non-serializable**'; } diff --git a/packages/core/src/promisebuffer.ts b/packages/utils/src/promisebuffer.ts similarity index 100% rename from packages/core/src/promisebuffer.ts rename to packages/utils/src/promisebuffer.ts diff --git a/packages/utils/src/string.ts b/packages/utils/src/string.ts index 03a9e68ee8a8..68ece1afb80b 100644 --- a/packages/utils/src/string.ts +++ b/packages/utils/src/string.ts @@ -1,5 +1,3 @@ -import { isString } from './is'; - /** * Truncates given string to the maximum characters count * @@ -8,7 +6,7 @@ import { isString } from './is'; * @returns string Encoded */ export function truncate(str: string, max: number = 0): string { - if (max === 0 || !isString(str)) { + if (max === 0) { return str; } return str.length <= max ? str : `${str.substr(0, max)}...`; @@ -82,17 +80,26 @@ export function safeJoin(input: any[], delimiter?: string): string { return output.join(delimiter); } -/** - * Checks if given value is included in the target - * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes#Polyfill - * @param target source string - * @param search string to be looked for - * @returns An answer - */ -export function includes(target: string, search: string): boolean { - if (search.length > target.length) { - return false; - } else { - return target.indexOf(search) !== -1; +/** Merges provided array of keys into */ +export function keysToEventMessage(keys: string[], maxLength: number = 40): string { + if (!keys.length) { + return '[object has no keys]'; + } + + if (keys[0].length >= maxLength) { + return truncate(keys[0], maxLength); } + + for (let includedKeys = keys.length; includedKeys > 0; includedKeys--) { + const serialized = keys.slice(0, includedKeys).join(', '); + if (serialized.length > maxLength) { + continue; + } + if (includedKeys === keys.length) { + return serialized; + } + return truncate(serialized, maxLength); + } + + return ''; } diff --git a/packages/utils/src/syncpromise.ts b/packages/utils/src/syncpromise.ts new file mode 100644 index 000000000000..0caf10686d0b --- /dev/null +++ b/packages/utils/src/syncpromise.ts @@ -0,0 +1,162 @@ +import { isThenable } from './is'; + +/** JSDoc */ +enum States { + /** JSDoc */ + PENDING = 'PENDING', + /** JSDoc */ + RESOLVED = 'RESOLVED', + /** JSDoc */ + REJECTED = 'REJECTED', +} + +/** JSDoc */ +interface Handler { + onFail: HandlerOnFail; + onSuccess: HandlerOnSuccess; +} + +type HandlerOnSuccess = (value: T) => U | Thenable; +type HandlerOnFail = (reason: any) => U | Thenable; + +/** JSDoc */ +interface Thenable { + /** JSDoc */ + then(onSuccess?: HandlerOnSuccess, onFail?: HandlerOnFail | ((reason: any) => void)): Thenable; +} + +type Resolve = (value?: R | Thenable | any) => void; +type Reject = (value?: any) => void; + +/** JSDoc */ +export class SyncPromise implements PromiseLike { + /** JSDoc */ + private state: States = States.PENDING; + /** JSDoc */ + private handlers: Array> = []; + /** JSDoc */ + private value: T | any; + + public constructor(callback: (resolve: Resolve, reject: Reject) => void) { + try { + callback(this.resolve, this.reject); + } catch (e) { + this.reject(e); + } + } + + /** JSDoc */ + private readonly resolve = (value: T) => { + this.setResult(value, States.RESOLVED); + }; + + /** JSDoc */ + private readonly reject = (reason: any) => { + this.setResult(reason, States.REJECTED); + }; + + /** JSDoc */ + private readonly setResult = (value: T | any, state: States) => { + if (this.state !== States.PENDING) { + return; + } + + if (isThenable(value)) { + (value as Thenable).then(this.resolve, this.reject); + return; + } + + this.value = value; + this.state = state; + + this.executeHandlers(); + }; + + /** JSDoc */ + private readonly executeHandlers = () => { + if (this.state === States.PENDING) { + return; + } + + if (this.state === States.REJECTED) { + // tslint:disable-next-line:no-unsafe-any + this.handlers.forEach(h => h.onFail && h.onFail(this.value)); + } else { + // tslint:disable-next-line:no-unsafe-any + this.handlers.forEach(h => h.onSuccess && h.onSuccess(this.value)); + } + + this.handlers = []; + return; + }; + + /** JSDoc */ + private readonly attachHandler = (handler: Handler) => { + this.handlers = this.handlers.concat(handler); + this.executeHandlers(); + }; + + /** JSDoc */ + public then( + onfulfilled?: ((value: T) => TResult1 | PromiseLike) | undefined | null, + onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null, + ): SyncPromise { + // public then(onSuccess?: HandlerOnSuccess, onFail?: HandlerOnFail): SyncPromise { + return new SyncPromise((resolve, reject) => { + this.attachHandler({ + onFail: reason => { + if (!onrejected) { + reject(reason); + return; + } + + try { + resolve(onrejected(reason)); + return; + } catch (e) { + reject(e); + return; + } + }, + onSuccess: result => { + if (!onfulfilled) { + resolve(result); + return; + } + try { + resolve(onfulfilled(result)); + return; + } catch (e) { + reject(e); + return; + } + }, + }); + }); + } + + /** JSDoc */ + public catch(onFail: HandlerOnFail): SyncPromise { + // tslint:disable-next-line:no-unsafe-any + return this.then((val: any) => val, onFail as any); + } + + /** JSDoc */ + public toString(): string { + return `[object SyncPromise]`; + } + + /** JSDoc */ + public static resolve(value?: U | Thenable): SyncPromise { + return new SyncPromise(resolve => { + resolve(value); + }); + } + + /** JSDoc */ + public static reject(reason?: any): SyncPromise { + return new SyncPromise((_, reject) => { + reject(reason); + }); + } +} diff --git a/packages/utils/test/is.test.ts b/packages/utils/test/is.test.ts index 0fb0ccc9bb89..efbacfaa1b5e 100644 --- a/packages/utils/test/is.test.ts +++ b/packages/utils/test/is.test.ts @@ -1,5 +1,6 @@ -import { isDOMError, isDOMException, isError, isErrorEvent, isPrimitive } from '../src/is'; +import { isDOMError, isDOMException, isError, isErrorEvent, isPrimitive, isThenable } from '../src/is'; import { supportsDOMError, supportsDOMException, supportsErrorEvent } from '../src/supports'; +import { SyncPromise } from '../src/syncpromise'; class SentryError extends Error { public name: string; @@ -71,3 +72,20 @@ describe('isPrimitive()', () => { expect(isPrimitive(new Date())).toEqual(false); }); }); + +describe('isThenable()', () => { + test('should work as advertised', () => { + expect(isThenable(Promise.resolve(true))).toEqual(true); + expect(isThenable(SyncPromise.resolve(true))).toEqual(true); + + expect(isThenable(undefined)).toEqual(false); + expect(isThenable(null)).toEqual(false); + expect(isThenable(true)).toEqual(false); + expect(isThenable('foo')).toEqual(false); + expect(isThenable(42)).toEqual(false); + expect(isThenable({})).toEqual(false); + expect(isThenable([])).toEqual(false); + expect(isThenable(new Error('foo'))).toEqual(false); + expect(isThenable(new Date())).toEqual(false); + }); +}); diff --git a/packages/utils/test/object.test.ts b/packages/utils/test/object.test.ts index fa0128763fae..983cad8f2875 100644 --- a/packages/utils/test/object.test.ts +++ b/packages/utils/test/object.test.ts @@ -1,293 +1,4 @@ -import { - clone, - decycle, - deserialize, - fill, - safeNormalize, - serialize, - serializeKeysToEventMessage, - urlEncode, -} from '../src/object'; - -const MATRIX = [ - { name: 'boolean', object: true, serialized: 'true' }, - { name: 'number', object: 42, serialized: '42' }, - { name: 'string', object: 'test', serialized: '"test"' }, - { name: 'array', object: [1, 'test'], serialized: '[1,"test"]' }, - { name: 'object', object: { a: 'test' }, serialized: '{"a":"test"}' }, -]; - -describe('clone()', () => { - for (const entry of MATRIX) { - test(`clones a ${entry.name}`, () => { - expect(clone(entry.object)).toEqual(entry.object); - }); - } -}); - -describe('decycle()', () => { - test('decycles circular objects', () => { - const circular = { - foo: 1, - }; - circular.bar = circular; - - const decycled = decycle(circular); - - expect(decycled).toEqual({ - foo: 1, - bar: '[Circular ~]', - }); - }); - - test('decycles complex circular objects', () => { - const circular = { - foo: 1, - }; - circular.bar = [ - { - baz: circular, - }, - circular, - ]; - circular.qux = circular.bar[0].baz; - - const decycled = decycle(circular); - - expect(decycled).toEqual({ - bar: [ - { - baz: '[Circular ~]', - }, - '[Circular ~]', - ], - foo: 1, - qux: '[Circular ~]', - }); - }); - - test('dont mutate original object', () => { - const circular = { - foo: 1, - }; - circular.bar = circular; - - const decycled = decycle(circular); - - expect(decycled).toEqual({ - foo: 1, - bar: '[Circular ~]', - }); - - expect(circular.bar).toBe(circular); - expect(decycled).not.toBe(circular); - }); - - test('dont mutate original complex object', () => { - const circular = { - foo: 1, - }; - circular.bar = [ - { - baz: circular, - }, - circular, - ]; - circular.qux = circular.bar[0].baz; - - const decycled = decycle(circular); - - expect(decycled).toEqual({ - bar: [ - { - baz: '[Circular ~]', - }, - '[Circular ~]', - ], - foo: 1, - qux: '[Circular ~]', - }); - - expect(circular.bar[0].baz).toBe(circular); - expect(circular.bar[1]).toBe(circular); - expect(circular.qux).toBe(circular.bar[0].baz); - expect(decycled).not.toBe(circular); - }); - - test('skip non-enumerable properties', () => { - const circular = { - foo: 1, - }; - circular.bar = circular; - Object.defineProperty(circular, 'baz', { - enumerable: true, - value: circular, - }); - Object.defineProperty(circular, 'qux', { - enumerable: false, - value: circular, - }); - - const decycled = decycle(circular); - - expect(decycled).toEqual({ - bar: '[Circular ~]', - baz: '[Circular ~]', - foo: 1, - }); - }); -}); - -describe('serialize()', () => { - for (const entry of MATRIX) { - test(`serializes a ${entry.name}`, () => { - expect(serialize(entry.object)).toEqual(entry.serialized); - }); - } - - describe('cyclical structures', () => { - test('circular objects', () => { - const obj = { name: 'Alice' }; - // @ts-ignore - obj.self = obj; - expect(serialize(obj)).toEqual(JSON.stringify({ name: 'Alice', self: '[Circular ~]' })); - }); - - test('circular objects with intermediaries', () => { - const obj = { name: 'Alice' }; - // @ts-ignore - obj.identity = { self: obj }; - expect(serialize(obj)).toEqual(JSON.stringify({ name: 'Alice', identity: { self: '[Circular ~]' } })); - }); - - test('circular objects deeper', () => { - const obj = { name: 'Alice', child: { name: 'Bob' } }; - // @ts-ignore - obj.child.self = obj.child; - expect(serialize(obj)).toEqual( - JSON.stringify({ - name: 'Alice', - child: { name: 'Bob', self: '[Circular ~]' }, - }), - ); - }); - - test('circular objects deeper with intermediaries', () => { - const obj = { name: 'Alice', child: { name: 'Bob' } }; - // @ts-ignore - obj.child.identity = { self: obj.child }; - expect(serialize(obj)).toEqual( - JSON.stringify({ - name: 'Alice', - child: { name: 'Bob', identity: { self: '[Circular ~]' } }, - }), - ); - }); - - test('circular objects in an array', () => { - const obj = { name: 'Alice' }; - // @ts-ignore - obj.self = [obj, obj]; - expect(serialize(obj)).toEqual( - JSON.stringify({ - name: 'Alice', - self: ['[Circular ~]', '[Circular ~]'], - }), - ); - }); - - test('circular objects deeper in an array', () => { - const obj = { - name: 'Alice', - children: [{ name: 'Bob' }, { name: 'Eve' }], - }; - // @ts-ignore - obj.children[0].self = obj.children[0]; - // @ts-ignore - obj.children[1].self = obj.children[1]; - expect(serialize(obj)).toEqual( - JSON.stringify({ - name: 'Alice', - children: [{ name: 'Bob', self: '[Circular ~]' }, { name: 'Eve', self: '[Circular ~]' }], - }), - ); - }); - - test('circular arrays', () => { - const obj: object[] = []; - obj.push(obj); - obj.push(obj); - expect(serialize(obj)).toEqual(JSON.stringify(['[Circular ~]', '[Circular ~]'])); - }); - - test('circular arrays with intermediaries', () => { - const obj: object[] = []; - obj.push({ name: 'Alice', self: obj }); - obj.push({ name: 'Bob', self: obj }); - expect(serialize(obj)).toEqual( - JSON.stringify([{ name: 'Alice', self: '[Circular ~]' }, { name: 'Bob', self: '[Circular ~]' }]), - ); - }); - - test('repeated objects in objects', () => { - const obj = {}; - const alice = { name: 'Alice' }; - // @ts-ignore - obj.alice1 = alice; - // @ts-ignore - obj.alice2 = alice; - expect(serialize(obj)).toEqual( - JSON.stringify({ - alice1: { name: 'Alice' }, - alice2: { name: 'Alice' }, - }), - ); - }); - - test('repeated objects in arrays', () => { - const alice = { name: 'Alice' }; - const obj = [alice, alice]; - expect(serialize(obj)).toEqual(JSON.stringify([{ name: 'Alice' }, { name: 'Alice' }])); - }); - }); -}); - -describe('deserialize()', () => { - for (const entry of MATRIX) { - test(`deserializes a ${entry.name}`, () => { - // tslint:disable:no-inferred-empty-object-type - expect(deserialize(entry.serialized)).toEqual(entry.object); - }); - } -}); - -describe('serializeKeysToEventMessage()', () => { - test('no keys', () => { - expect(serializeKeysToEventMessage([], 10)).toEqual('[object has no keys]'); - }); - - test('one key should be returned as a whole if not over the length limit', () => { - expect(serializeKeysToEventMessage(['foo'], 10)).toEqual('foo'); - expect(serializeKeysToEventMessage(['foobarbazx'], 10)).toEqual('foobarbazx'); - }); - - test('one key should be appended with ... and truncated when over the limit', () => { - expect(serializeKeysToEventMessage(['foobarbazqux'], 10)).toEqual('foobarbazq...'); - }); - - test('multiple keys should be joined as a whole if not over the length limit', () => { - expect(serializeKeysToEventMessage(['foo', 'bar'], 10)).toEqual('foo, bar'); - }); - - test('multiple keys should include only as much keys as can fit into the limit', () => { - expect(serializeKeysToEventMessage(['foo', 'bar', 'baz'], 10)).toEqual('foo, bar'); - expect(serializeKeysToEventMessage(['foo', 'verylongkey', 'baz'], 10)).toEqual('foo'); - }); - - test('multiple keys should truncate first key if its too long', () => { - expect(serializeKeysToEventMessage(['foobarbazqux', 'bar', 'baz'], 10)).toEqual('foobarbazq...'); - }); -}); +import { fill, normalize, urlEncode } from '../src/object'; describe('fill()', () => { test('wraps a method by calling a replacement function on it', () => { @@ -371,115 +82,98 @@ describe('urlEncode()', () => { }); }); -describe('safeNormalize()', () => { - test('return same value for simple input', () => { - expect(safeNormalize('foo')).toEqual('foo'); - expect(safeNormalize(42)).toEqual(42); - expect(safeNormalize(true)).toEqual(true); - expect(safeNormalize(null)).toEqual(null); - }); +describe('normalize()', () => { + describe('acts as a pass-through for simple-cases', () => { + test('return same value for simple input', () => { + expect(normalize('foo')).toEqual('foo'); + expect(normalize(42)).toEqual(42); + expect(normalize(true)).toEqual(true); + expect(normalize(null)).toEqual(null); + }); - test('return same object or arrays for referenced inputs', () => { - expect(safeNormalize({ foo: 'bar' })).toEqual({ foo: 'bar' }); - expect(safeNormalize([42])).toEqual([42]); + test('return same object or arrays for referenced inputs', () => { + expect(normalize({ foo: 'bar' })).toEqual({ foo: 'bar' }); + expect(normalize([42])).toEqual([42]); + }); }); - test('return [undefined] string for undefined values', () => { - expect(safeNormalize(undefined)).toEqual('[undefined]'); - }); + test('extracts extra properties from error objects', () => { + const obj = new Error('Wubba Lubba Dub Dub'); + // @ts-ignore + obj.reason = new TypeError("I'm pickle Riiick!"); + // @ts-ignore + obj.extra = 'some extra prop'; - test('return [NaN] string for NaN values', () => { - expect(safeNormalize(NaN)).toEqual('[NaN]'); - }); + // Stack is inconsistent across browsers, so override it and just make sure its stringified + obj.stack = 'x'; + // @ts-ignore + obj.reason.stack = 'x'; - test('iterates through array and object values to replace undefined/NaN values', () => { - expect(safeNormalize(['foo', 42, undefined, NaN])).toEqual(['foo', 42, '[undefined]', '[NaN]']); - expect( - safeNormalize({ - foo: 42, - bar: undefined, - baz: NaN, - }), - ).toEqual({ - foo: 42, - bar: '[undefined]', - baz: '[NaN]', - }); - }); + // IE 10/11 + // @ts-ignore + delete obj.description; + // @ts-ignore + delete obj.reason.description; - test('iterates through array and object values, but recursively', () => { - expect(safeNormalize(['foo', 42, [[undefined]], [NaN]])).toEqual(['foo', 42, [['[undefined]']], ['[NaN]']]); - expect( - safeNormalize({ - foo: 42, - bar: { - baz: { - quz: undefined, - }, - }, - wat: { - no: NaN, - }, - }), - ).toEqual({ - foo: 42, - bar: { - baz: { - quz: '[undefined]', - }, - }, - wat: { - no: '[NaN]', + expect(normalize(obj)).toEqual({ + message: 'Wubba Lubba Dub Dub', + name: 'Error', + stack: 'x', + reason: { + message: "I'm pickle Riiick!", + name: 'TypeError', + stack: 'x', }, + extra: 'some extra prop', }); }); - describe('cyclical structures', () => { - test('must normalize circular objects', () => { + describe('decycles cyclical structures', () => { + test('circular objects', () => { const obj = { name: 'Alice' }; // @ts-ignore obj.self = obj; - expect(safeNormalize(obj)).toEqual({ name: 'Alice', self: '[Circular ~]' }); + expect(normalize(obj)).toEqual({ name: 'Alice', self: '[Circular ~]' }); }); - test('must normalize circular objects with intermediaries', () => { + test('circular objects with intermediaries', () => { const obj = { name: 'Alice' }; // @ts-ignore obj.identity = { self: obj }; - expect(safeNormalize(obj)).toEqual({ name: 'Alice', identity: { self: '[Circular ~]' } }); + expect(normalize(obj)).toEqual({ name: 'Alice', identity: { self: '[Circular ~]' } }); }); - test('must normalize circular objects deeper', () => { + test('deep circular objects', () => { const obj = { name: 'Alice', child: { name: 'Bob' } }; // @ts-ignore obj.child.self = obj.child; - expect(safeNormalize(obj)).toEqual({ + expect(normalize(obj)).toEqual({ name: 'Alice', child: { name: 'Bob', self: '[Circular ~]' }, }); }); - test('must normalize circular objects deeper with intermediaries', () => { + test('deep circular objects with intermediaries', () => { const obj = { name: 'Alice', child: { name: 'Bob' } }; // @ts-ignore obj.child.identity = { self: obj.child }; - expect(safeNormalize(obj)).toEqual({ + expect(normalize(obj)).toEqual({ name: 'Alice', child: { name: 'Bob', identity: { self: '[Circular ~]' } }, }); }); - test('must normalize circular objects in an array', () => { + test('circular objects in an array', () => { const obj = { name: 'Alice' }; // @ts-ignore obj.self = [obj, obj]; - expect(safeNormalize(obj)).toEqual({ + expect(normalize(obj)).toEqual({ name: 'Alice', self: ['[Circular ~]', '[Circular ~]'], }); }); - test('must normalize circular objects deeper in an array', () => { + test('deep circular objects in an array', () => { const obj = { name: 'Alice', children: [{ name: 'Bob' }, { name: 'Eve' }], @@ -488,54 +182,49 @@ describe('safeNormalize()', () => { obj.children[0].self = obj.children[0]; // @ts-ignore obj.children[1].self = obj.children[1]; - expect(safeNormalize(obj)).toEqual({ + expect(normalize(obj)).toEqual({ name: 'Alice', children: [{ name: 'Bob', self: '[Circular ~]' }, { name: 'Eve', self: '[Circular ~]' }], }); }); - test('must normalize circular arrays', () => { + test('circular arrays', () => { const obj: object[] = []; obj.push(obj); obj.push(obj); - expect(safeNormalize(obj)).toEqual(['[Circular ~]', '[Circular ~]']); + expect(normalize(obj)).toEqual(['[Circular ~]', '[Circular ~]']); }); - test('must normalize circular arrays with intermediaries', () => { + test('circular arrays with intermediaries', () => { const obj: object[] = []; obj.push({ name: 'Alice', self: obj }); obj.push({ name: 'Bob', self: obj }); - expect(safeNormalize(obj)).toEqual([ - { name: 'Alice', self: '[Circular ~]' }, - { name: 'Bob', self: '[Circular ~]' }, - ]); + expect(normalize(obj)).toEqual([{ name: 'Alice', self: '[Circular ~]' }, { name: 'Bob', self: '[Circular ~]' }]); }); - test('must normalize repeated objects in objects', () => { + test('repeated objects in objects', () => { const obj = {}; const alice = { name: 'Alice' }; // @ts-ignore obj.alice1 = alice; // @ts-ignore obj.alice2 = alice; - expect(safeNormalize(obj)).toEqual({ + expect(normalize(obj)).toEqual({ alice1: { name: 'Alice' }, alice2: { name: 'Alice' }, }); }); - test('must normalize repeated objects in arrays', () => { + test('repeated objects in arrays', () => { const alice = { name: 'Alice' }; const obj = [alice, alice]; - expect(safeNormalize(obj)).toEqual([{ name: 'Alice' }, { name: 'Alice' }]); + expect(normalize(obj)).toEqual([{ name: 'Alice' }, { name: 'Alice' }]); }); - test('must normalize error objects, including extra properties', () => { + test('error objects with circular references', () => { const obj = new Error('Wubba Lubba Dub Dub'); // @ts-ignore - obj.reason = new TypeError("I'm pickle Riiick!"); - // @ts-ignore - obj.extra = 'some extra prop'; + obj.reason = obj; // Stack is inconsistent across browsers, so override it and just make sure its stringified obj.stack = 'x'; @@ -545,46 +234,252 @@ describe('safeNormalize()', () => { // IE 10/11 // @ts-ignore delete obj.description; - // @ts-ignore - delete obj.reason.description; - const result = safeNormalize(obj); - - expect(result).toEqual({ + expect(normalize(obj)).toEqual({ message: 'Wubba Lubba Dub Dub', name: 'Error', stack: 'x', - reason: { - message: "I'm pickle Riiick!", - name: 'TypeError', - stack: 'x', + reason: '[Circular ~]', + }); + }); + }); + + describe('dont mutate and skip non-enumerables', () => { + test('simple object', () => { + const circular = { + foo: 1, + }; + circular.bar = circular; + + const normalized = normalize(circular); + expect(normalized).toEqual({ + foo: 1, + bar: '[Circular ~]', + }); + + expect(circular.bar).toBe(circular); + expect(normalized).not.toBe(circular); + }); + + test('complex object', () => { + const circular = { + foo: 1, + }; + circular.bar = [ + { + baz: circular, + }, + circular, + ]; + circular.qux = circular.bar[0].baz; + + const normalized = normalize(circular); + expect(normalized).toEqual({ + bar: [ + { + baz: '[Circular ~]', + }, + '[Circular ~]', + ], + foo: 1, + qux: '[Circular ~]', + }); + + expect(circular.bar[0].baz).toBe(circular); + expect(circular.bar[1]).toBe(circular); + expect(circular.qux).toBe(circular.bar[0].baz); + expect(normalized).not.toBe(circular); + }); + + test('object with non-enumerable properties', () => { + const circular = { + foo: 1, + }; + circular.bar = circular; + circular.baz = { + one: 1337, + }; + Object.defineProperty(circular, 'qux', { + enumerable: true, + value: circular, + }); + Object.defineProperty(circular, 'quaz', { + enumerable: false, + value: circular, + }); + Object.defineProperty(circular.baz, 'two', { + enumerable: false, + value: circular, + }); + + expect(normalize(circular)).toEqual({ + bar: '[Circular ~]', + baz: { + one: 1337, }, - extra: 'some extra prop', + foo: 1, + qux: '[Circular ~]', }); }); }); - test('must normalize error objects with circular references', () => { - const obj = new Error('Wubba Lubba Dub Dub'); - // @ts-ignore - obj.reason = obj; + describe('calls toJSON if implemented', () => { + test('primitive values', () => { + // tslint:disable:no-construct + const a = new Number(1); + a.toJSON = () => 10; + const b = new String('2'); + b.toJSON = () => '20'; + expect(normalize(a)).toEqual(10); + expect(normalize(b)).toEqual('20'); + }); + + test('objects, arrays and classes', () => { + const a = Object.create({}); + a.toJSON = () => 1; + function B(): void { + /*no-empty*/ + } + B.prototype.toJSON = () => 2; + const c = []; + c.toJSON = () => 3; + expect(normalize([{ a }, { b: new B() }, c])).toEqual([{ a: 1 }, { b: 2 }, 3]); + }); + }); - // Stack is inconsistent across browsers, so override it and just make sure its stringified - obj.stack = 'x'; - // @ts-ignore - obj.reason.stack = 'x'; + describe('changes unserializeable/global values/classes to its string representation', () => { + test('primitive values', () => { + expect(normalize(undefined)).toEqual('[undefined]'); + expect(normalize(NaN)).toEqual('[NaN]'); + }); - // IE 10/11 - // @ts-ignore - delete obj.description; + test('functions', () => { + expect( + normalize(() => { + /* no-empty */ + }), + ).toEqual('[Function: ]'); + const foo = () => { + /* no-empty */ + }; + expect(normalize(foo)).toEqual('[Function: foo]'); + }); - const result = safeNormalize(obj); + test('primitive values in objects/arrays', () => { + expect(normalize(['foo', 42, undefined, NaN])).toEqual(['foo', 42, '[undefined]', '[NaN]']); + expect( + normalize({ + foo: 42, + bar: undefined, + baz: NaN, + }), + ).toEqual({ + foo: 42, + bar: '[undefined]', + baz: '[NaN]', + }); + }); - expect(result).toEqual({ - message: 'Wubba Lubba Dub Dub', - name: 'Error', - stack: 'x', - reason: '[Circular ~]', + test('primitive values in deep objects/arrays', () => { + expect(normalize(['foo', 42, [[undefined]], [NaN]])).toEqual(['foo', 42, [['[undefined]']], ['[NaN]']]); + expect( + normalize({ + foo: 42, + bar: { + baz: { + quz: undefined, + }, + }, + wat: { + no: NaN, + }, + }), + ).toEqual({ + foo: 42, + bar: { + baz: { + quz: '[undefined]', + }, + }, + wat: { + no: '[NaN]', + }, + }); + }); + + test('known Classes like Reacts SyntheticEvents', () => { + const obj = { + foo: { + nativeEvent: 'wat', + preventDefault: 'wat', + stopPropagation: 'wat', + }, + }; + expect(normalize(obj)).toEqual({ + foo: '[SyntheticEvent]', + }); + }); + }); + + describe('can limit object to depth', () => { + test('single level', () => { + const obj = { + foo: [], + }; + + expect(normalize(obj, 1)).toEqual({ + foo: '[Array]', + }); + }); + + test('two levels', () => { + const obj = { + foo: [1, 2, []], + }; + + expect(normalize(obj, 2)).toEqual({ + foo: [1, 2, '[Array]'], + }); + }); + + test('multiple levels with various inputs', () => { + const obj = { + foo: { + bar: { + baz: 1, + qux: [ + { + rick: 'morty', + }, + ], + }, + }, + bar: 1, + baz: [ + { + something: 'else', + fn: () => { + /*no-empty*/ + }, + }, + ], + }; + + expect(normalize(obj, 3)).toEqual({ + bar: 1, + baz: [ + { + something: 'else', + fn: '[object Function]', + }, + ], + foo: { + bar: { + baz: 1, + qux: '[Array]', + }, + }, + }); }); }); diff --git a/packages/core/test/lib/promisebuffer.test.ts b/packages/utils/test/promisebuffer.test.ts similarity index 98% rename from packages/core/test/lib/promisebuffer.test.ts rename to packages/utils/test/promisebuffer.test.ts index da2b699fb119..6dff403b02bd 100644 --- a/packages/core/test/lib/promisebuffer.test.ts +++ b/packages/utils/test/promisebuffer.test.ts @@ -1,4 +1,4 @@ -import { PromiseBuffer } from '../../src/promisebuffer'; +import { PromiseBuffer } from '../src/promisebuffer'; // tslint:disable:no-floating-promises diff --git a/packages/utils/test/string.test.ts b/packages/utils/test/string.test.ts index c8d531149088..e1166ca2dd3c 100644 --- a/packages/utils/test/string.test.ts +++ b/packages/utils/test/string.test.ts @@ -1,4 +1,4 @@ -import { truncate } from '../src/string'; +import { keysToEventMessage, truncate } from '../src/string'; describe('truncate()', () => { test('it works as expected', () => { @@ -8,19 +8,32 @@ describe('truncate()', () => { expect(truncate(new Array(1000).join('f'), 0)).toEqual(new Array(1000).join('f')); expect(truncate(new Array(1000).join('f'), 0)).toEqual(new Array(1000).join('f')); }); +}); + +describe('keysToEventMessage()', () => { + test('no keys', () => { + expect(keysToEventMessage([], 10)).toEqual('[object has no keys]'); + }); + + test('one key should be returned as a whole if not over the length limit', () => { + expect(keysToEventMessage(['foo'], 10)).toEqual('foo'); + expect(keysToEventMessage(['foobarbazx'], 10)).toEqual('foobarbazx'); + }); + + test('one key should be appended with ... and truncated when over the limit', () => { + expect(keysToEventMessage(['foobarbazqux'], 10)).toEqual('foobarbazq...'); + }); + + test('multiple keys should be joined as a whole if not over the length limit', () => { + expect(keysToEventMessage(['foo', 'bar'], 10)).toEqual('foo, bar'); + }); + + test('multiple keys should include only as much keys as can fit into the limit', () => { + expect(keysToEventMessage(['foo', 'bar', 'baz'], 10)).toEqual('foo, bar'); + expect(keysToEventMessage(['foo', 'verylongkey', 'baz'], 10)).toEqual('foo'); + }); - test('it instantly returns input when non-string is passed', () => { - // @ts-ignore - expect(truncate(2)).toEqual(2); - // @ts-ignore - expect(truncate(undefined, 123)).toEqual(undefined); - // @ts-ignore - expect(truncate(null)).toEqual(null); - const obj = {}; - // @ts-ignore - expect(truncate(obj, '42')).toEqual(obj); - const arr: any[] = []; - // @ts-ignore - expect(truncate(arr)).toEqual(arr); + test('multiple keys should truncate first key if its too long', () => { + expect(keysToEventMessage(['foobarbazqux', 'bar', 'baz'], 10)).toEqual('foobarbazq...'); }); }); diff --git a/packages/utils/test/syncpromise.test.ts b/packages/utils/test/syncpromise.test.ts new file mode 100644 index 000000000000..e11ff58c5d30 --- /dev/null +++ b/packages/utils/test/syncpromise.test.ts @@ -0,0 +1,250 @@ +import { SyncPromise } from '../src/syncpromise'; + +describe('SyncPromise', () => { + test('simple', () => { + expect.assertions(1); + + return new SyncPromise(resolve => { + resolve(42); + }).then(val => { + expect(val).toBe(42); + }); + }); + + test('simple chaining', () => { + expect.assertions(1); + + return new SyncPromise(resolve => { + resolve(42); + }) + .then(_ => SyncPromise.resolve('a')) + .then(_ => SyncPromise.resolve(0.1)) + .then(_ => SyncPromise.resolve(false)) + .then(val => { + expect(val).toBe(false); + }); + }); + + test('compare to regular promise', async () => { + expect.assertions(2); + + const ap = new Promise(resolve => { + resolve('1'); + }); + + const bp = new Promise(resolve => { + resolve('2'); + }); + + const cp = new Promise(resolve => { + resolve('3'); + }); + + const fp = async (s: Promise, prepend: string) => + new Promise(resolve => { + s.then(val => { + resolve(prepend + val); + }).catch(_ => { + // bla + }); + }); + + const res = await cp + .then(async val => fp(Promise.resolve('x'), val)) + .then(async val => fp(bp, val)) + .then(async val => fp(ap, val)); + + expect(res).toBe('3x21'); + + const a = new SyncPromise(resolve => { + resolve('1'); + }); + + const b = new SyncPromise(resolve => { + resolve('2'); + }); + + const c = new SyncPromise(resolve => { + resolve('3'); + }); + + const f = (s: SyncPromise, prepend: string) => + new SyncPromise(resolve => { + s.then(val => { + resolve(prepend + val); + }); + }); + + return c + .then(val => f(SyncPromise.resolve('x'), val)) + .then(val => f(b, val)) + .then(val => f(a, val)) + .then(val => { + expect(val).toBe(res); + }); + }); + + test('simple static', () => { + expect.assertions(1); + + const p = SyncPromise.resolve(10); + return p.then(val => { + expect(val).toBe(10); + }); + }); + + test('using new Promise internally', () => { + expect.assertions(2); + + return new SyncPromise(done => { + new Promise(resolve => { + expect(true).toBe(true); + resolve(41); + }) + .then(done) + .catch(_ => { + // + }); + }).then(val => { + expect(val).toEqual(41); + }); + }); + + test('with setTimeout', () => { + jest.useFakeTimers(); + expect.assertions(1); + + return new SyncPromise(resolve => { + setTimeout(() => { + resolve(12); + }, 10); + jest.runAllTimers(); + }).then(val => { + expect(val).toEqual(12); + }); + }); + + test('calling the callback immediatly', () => { + expect.assertions(1); + + let foo: number = 1; + + new SyncPromise(_ => { + foo = 2; + }); + + expect(foo).toEqual(2); + }); + + test('calling the callback not immediatly', () => { + jest.useFakeTimers(); + expect.assertions(4); + + const qp = new SyncPromise(resolve => + setTimeout(() => { + resolve(2); + }), + ); + qp.then(value => { + expect(value).toEqual(2); + }); + expect(qp).not.toHaveProperty('value'); + qp.then(value => { + expect(value).toEqual(2); + }); + jest.runAllTimers(); + expect(qp).toHaveProperty('value'); + }); + + test('multiple then returning undefined', () => { + expect.assertions(3); + + return new SyncPromise(resolve => { + resolve(2); + }) + .then(result => { + expect(result).toEqual(2); + }) + .then(result => { + expect(result).toBeUndefined(); + }) + .then(result => { + expect(result).toBeUndefined(); + }); + }); + + test('multiple then returning different values', () => { + expect.assertions(3); + + return new SyncPromise(resolve => { + resolve(2); + }) + .then(result => { + expect(result).toEqual(2); + return 3; + }) + .then(result => { + expect(result).toEqual(3); + return 4; + }) + .then(result => { + expect(result).toEqual(4); + }); + }); + + test('multiple then returning different SyncPromise', () => { + expect.assertions(2); + + return new SyncPromise(resolve => { + resolve(2); + }) + .then(result => { + expect(result).toEqual(2); + return new SyncPromise(resolve2 => { + resolve2('yo'); + }); + }) + .then(result => { + expect(result).toEqual('yo'); + }); + }); + + test('reject immediatly and do not call then', () => { + expect.assertions(1); + + return new SyncPromise((_, reject) => { + reject('test'); + }) + .then(_ => { + expect(true).toBeFalsy(); + }) + .catch(reason => { + expect(reason).toBe('test'); + }); + }); + + test('reject', () => { + expect.assertions(1); + + return new SyncPromise((_, reject) => { + reject('test'); + }).catch(reason => { + expect(reason).toBe('test'); + }); + }); + + test('rejecting after first then', () => { + expect.assertions(2); + + return new SyncPromise(resolve => { + resolve(2); + }) + .then(value => { + expect(value).toEqual(2); + return SyncPromise.reject('wat'); + }) + .catch(reason => { + expect(reason).toBe('wat'); + }); + }); +}); diff --git a/yarn.lock b/yarn.lock index 9f0daa121ea1..3835d4118d42 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,30 +2,147 @@ # yarn lockfile v1 -"@babel/code-frame@^7.0.0-beta.35": +"@babel/code-frame@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8" + integrity sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA== dependencies: "@babel/highlight" "^7.0.0" +"@babel/core@^7.1.0": + version "7.3.3" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.3.3.tgz#d090d157b7c5060d05a05acaebc048bd2b037947" + integrity sha512-w445QGI2qd0E0GlSnq6huRZWPMmQGCp5gd5ZWS4hagn0EiwzxD5QMFkpchyusAyVC1n27OKXzQ0/88aVU9n4xQ== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/generator" "^7.3.3" + "@babel/helpers" "^7.2.0" + "@babel/parser" "^7.3.3" + "@babel/template" "^7.2.2" + "@babel/traverse" "^7.2.2" + "@babel/types" "^7.3.3" + convert-source-map "^1.1.0" + debug "^4.1.0" + json5 "^2.1.0" + lodash "^4.17.11" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/generator@^7.0.0", "@babel/generator@^7.2.2", "@babel/generator@^7.3.3": + version "7.3.3" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.3.3.tgz#185962ade59a52e00ca2bdfcfd1d58e528d4e39e" + integrity sha512-aEADYwRRZjJyMnKN7llGIlircxTCofm3dtV5pmY6ob18MSIuipHpA2yZWkPlycwu5HJcx/pADS3zssd8eY7/6A== + dependencies: + "@babel/types" "^7.3.3" + jsesc "^2.5.1" + lodash "^4.17.11" + source-map "^0.5.0" + trim-right "^1.0.1" + +"@babel/helper-function-name@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz#a0ceb01685f73355d4360c1247f582bfafc8ff53" + integrity sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw== + dependencies: + "@babel/helper-get-function-arity" "^7.0.0" + "@babel/template" "^7.1.0" + "@babel/types" "^7.0.0" + +"@babel/helper-get-function-arity@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3" + integrity sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ== + dependencies: + "@babel/types" "^7.0.0" + +"@babel/helper-plugin-utils@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250" + integrity sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA== + +"@babel/helper-split-export-declaration@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz#3aae285c0311c2ab095d997b8c9a94cad547d813" + integrity sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag== + dependencies: + "@babel/types" "^7.0.0" + +"@babel/helpers@^7.2.0": + version "7.3.1" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.3.1.tgz#949eec9ea4b45d3210feb7dc1c22db664c9e44b9" + integrity sha512-Q82R3jKsVpUV99mgX50gOPCWwco9Ec5Iln/8Vyu4osNIOQgSrd9RFrQeUvmvddFNoLwMyOUWU+5ckioEKpDoGA== + dependencies: + "@babel/template" "^7.1.2" + "@babel/traverse" "^7.1.5" + "@babel/types" "^7.3.0" + "@babel/highlight@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0.tgz#f710c38c8d458e6dd9a201afb637fcb781ce99e4" + integrity sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw== dependencies: chalk "^2.0.0" esutils "^2.0.2" js-tokens "^4.0.0" -"@babel/polyfill@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/polyfill/-/polyfill-7.0.0.tgz#c8ff65c9ec3be6a1ba10113ebd40e8750fb90bff" +"@babel/parser@^7.0.0", "@babel/parser@^7.2.2", "@babel/parser@^7.2.3", "@babel/parser@^7.3.3": + version "7.3.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.3.3.tgz#092d450db02bdb6ccb1ca8ffd47d8774a91aef87" + integrity sha512-xsH1CJoln2r74hR+y7cg2B5JCPaTh+Hd+EbBRk9nWGSNspuo6krjhX0Om6RnRQuIvFq8wVXCLKH3kwKDYhanSg== + +"@babel/plugin-syntax-object-rest-spread@^7.0.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz#3b7a3e733510c57e820b9142a6579ac8b0dfad2e" + integrity sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/polyfill@^7.2.5": + version "7.2.5" + resolved "https://registry.yarnpkg.com/@babel/polyfill/-/polyfill-7.2.5.tgz#6c54b964f71ad27edddc567d065e57e87ed7fa7d" + integrity sha512-8Y/t3MWThtMLYr0YNC/Q76tqN1w30+b0uQMeFUYauG2UGTR19zyUtFrAzT23zNtBxPp+LbE5E/nwV/q/r3y6ug== dependencies: core-js "^2.5.7" - regenerator-runtime "^0.11.1" + regenerator-runtime "^0.12.0" + +"@babel/template@^7.0.0", "@babel/template@^7.1.0", "@babel/template@^7.1.2", "@babel/template@^7.2.2": + version "7.2.2" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.2.2.tgz#005b3fdf0ed96e88041330379e0da9a708eb2907" + integrity sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/parser" "^7.2.2" + "@babel/types" "^7.2.2" + +"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.1.5", "@babel/traverse@^7.2.2": + version "7.2.3" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.2.3.tgz#7ff50cefa9c7c0bd2d81231fdac122f3957748d8" + integrity sha512-Z31oUD/fJvEWVR0lNZtfgvVt512ForCTNKYcJBGbPb1QZfve4WGH8Wsy7+Mev33/45fhP/hwQtvgusNdcCMgSw== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/generator" "^7.2.2" + "@babel/helper-function-name" "^7.1.0" + "@babel/helper-split-export-declaration" "^7.0.0" + "@babel/parser" "^7.2.3" + "@babel/types" "^7.2.2" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.10" + +"@babel/types@^7.0.0", "@babel/types@^7.2.2", "@babel/types@^7.3.0", "@babel/types@^7.3.3": + version "7.3.3" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.3.3.tgz#6c44d1cdac2a7625b624216657d5bc6c107ab436" + integrity sha512-2tACZ80Wg09UnPg5uGAOUvvInaqLk3l/IAhQzlxLQOIXacr6bMsra5SH6AWw/hIDRCSbCdHP2KzSOD+cT7TzMQ== + dependencies: + esutils "^2.0.2" + lodash "^4.17.11" + to-fast-properties "^2.0.0" -"@google-cloud/common@^0.26.0": - version "0.26.2" - resolved "https://registry.yarnpkg.com/@google-cloud/common/-/common-0.26.2.tgz#9c54e2471a84aa031e95a24824976e080f255645" +"@google-cloud/common@^0.31.0": + version "0.31.0" + resolved "https://registry.yarnpkg.com/@google-cloud/common/-/common-0.31.0.tgz#51a82d681043e2718bd32708586d3131b019d7a8" + integrity sha512-mO7WFavzqmr24btNb2zimUh+M3fGnIKGbkR1VT6ZG3yDV+S7BiZPmPiFHKRJVrxwi5sA9U6X6fpNpHgj7j2a2w== dependencies: "@google-cloud/projectify" "^0.3.2" "@google-cloud/promisify" "^0.3.0" @@ -35,10 +152,9 @@ duplexify "^3.6.0" ent "^2.2.0" extend "^3.0.1" - google-auth-library "^2.0.0" + google-auth-library "^3.0.0" pify "^4.0.0" retry-request "^4.0.0" - through2 "^3.0.0" "@google-cloud/paginator@^0.1.0": version "0.1.2" @@ -59,19 +175,20 @@ resolved "https://registry.yarnpkg.com/@google-cloud/promisify/-/promisify-0.3.1.tgz#f641e6d944a8e0a05ee0cb1091dfa60089becdba" "@google-cloud/storage@^2.3.1": - version "2.3.1" - resolved "https://registry.yarnpkg.com/@google-cloud/storage/-/storage-2.3.1.tgz#89db0e051a3d30cd2f0c627d0f13633f646ee392" + version "2.4.2" + resolved "https://registry.yarnpkg.com/@google-cloud/storage/-/storage-2.4.2.tgz#24c3ea68e3368ec42193532a7b6e22e16bc3ea49" + integrity sha512-G4rlt5h2oypPYU2ZtmF3N0FpE47aRvsxp8NmZEdlScd5LgjDAu5Ha01hMOA/ZHBVsUlOGFfa+TxU5Ei/56+0Gg== dependencies: - "@google-cloud/common" "^0.26.0" + "@google-cloud/common" "^0.31.0" "@google-cloud/paginator" "^0.1.0" "@google-cloud/promisify" "^0.3.0" arrify "^1.0.0" async "^2.0.1" compressible "^2.0.12" - concat-stream "^1.5.0" + concat-stream "^2.0.0" duplexify "^3.5.0" extend "^3.0.0" - gcs-resumable-upload "^0.13.0" + gcs-resumable-upload "^0.14.1" hash-stream-validation "^0.2.1" mime "^2.2.0" mime-types "^2.0.8" @@ -79,53 +196,57 @@ pumpify "^1.5.1" snakeize "^0.1.0" stream-events "^1.0.1" - teeny-request "^3.11.0" + teeny-request "^3.11.3" through2 "^3.0.0" xdg-basedir "^3.0.0" -"@lerna/add@^3.5.0": - version "3.5.0" - resolved "https://registry.yarnpkg.com/@lerna/add/-/add-3.5.0.tgz#3518b3d4afc3743b7227b1ee3534114eb9575888" +"@lerna/add@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/add/-/add-3.13.0.tgz#e971a17c1f85cba40f22c816a2bb9d855b62d07d" + integrity sha512-5srUGfZHjqa5BW3JODHpzbH1ayweGqqrxH8qOzf/E/giNfzigdfyCSkbGh/iiLTXGu7BBE+3/OFfycoqYbalgg== dependencies: - "@lerna/bootstrap" "^3.5.0" - "@lerna/command" "^3.5.0" - "@lerna/filter-options" "^3.5.0" - "@lerna/npm-conf" "^3.4.1" - "@lerna/validation-error" "^3.0.0" + "@lerna/bootstrap" "3.13.0" + "@lerna/command" "3.13.0" + "@lerna/filter-options" "3.13.0" + "@lerna/npm-conf" "3.13.0" + "@lerna/validation-error" "3.13.0" dedent "^0.7.0" - npm-package-arg "^6.0.0" + npm-package-arg "^6.1.0" p-map "^1.2.0" - pacote "^9.1.0" + pacote "^9.4.1" semver "^5.5.0" -"@lerna/batch-packages@^3.1.2": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@lerna/batch-packages/-/batch-packages-3.1.2.tgz#74b5312a01a8916204cbc71237ffbe93144b99df" +"@lerna/batch-packages@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/batch-packages/-/batch-packages-3.13.0.tgz#697fde5be28822af9d9dca2f750250b90a89a000" + integrity sha512-TgLBTZ7ZlqilGnzJ3xh1KdAHcySfHytgNRTdG9YomfriTU6kVfp1HrXxKJYVGs7ClPUNt2CTFEOkw0tMBronjw== dependencies: - "@lerna/package-graph" "^3.1.2" - "@lerna/validation-error" "^3.0.0" + "@lerna/package-graph" "3.13.0" + "@lerna/validation-error" "3.13.0" npmlog "^4.1.2" -"@lerna/bootstrap@^3.5.0": - version "3.5.0" - resolved "https://registry.yarnpkg.com/@lerna/bootstrap/-/bootstrap-3.5.0.tgz#4d21ef0d1e648c8121432443a7d80c9442756347" - dependencies: - "@lerna/batch-packages" "^3.1.2" - "@lerna/command" "^3.5.0" - "@lerna/filter-options" "^3.5.0" - "@lerna/has-npm-version" "^3.3.0" - "@lerna/npm-conf" "^3.4.1" - "@lerna/npm-install" "^3.3.0" - "@lerna/rimraf-dir" "^3.3.0" - "@lerna/run-lifecycle" "^3.4.1" - "@lerna/run-parallel-batches" "^3.0.0" - "@lerna/symlink-binary" "^3.3.0" - "@lerna/symlink-dependencies" "^3.3.0" - "@lerna/validation-error" "^3.0.0" +"@lerna/bootstrap@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/bootstrap/-/bootstrap-3.13.0.tgz#04f5d5b7720b020c0c73e11b2db146103c272cd7" + integrity sha512-wdwBzvwEdzGERwpiY6Zu/T+tntCfXeXrL9cQIxP+K2M07jL5M00ZRdDoFcP90sGn568AjhvRhD2ExA5wPECSgA== + dependencies: + "@lerna/batch-packages" "3.13.0" + "@lerna/command" "3.13.0" + "@lerna/filter-options" "3.13.0" + "@lerna/has-npm-version" "3.13.0" + "@lerna/npm-install" "3.13.0" + "@lerna/package-graph" "3.13.0" + "@lerna/pulse-till-done" "3.13.0" + "@lerna/rimraf-dir" "3.13.0" + "@lerna/run-lifecycle" "3.13.0" + "@lerna/run-parallel-batches" "3.13.0" + "@lerna/symlink-binary" "3.13.0" + "@lerna/symlink-dependencies" "3.13.0" + "@lerna/validation-error" "3.13.0" dedent "^0.7.0" get-port "^3.2.0" multimatch "^2.1.0" - npm-package-arg "^6.0.0" + npm-package-arg "^6.1.0" npmlog "^4.1.2" p-finally "^1.0.0" p-map "^1.2.0" @@ -134,113 +255,127 @@ read-package-tree "^5.1.6" semver "^5.5.0" -"@lerna/changed@^3.5.0": - version "3.5.0" - resolved "https://registry.yarnpkg.com/@lerna/changed/-/changed-3.5.0.tgz#c96c4bde6d78f4b2a7b3b3e2511bf78cb6aabe17" +"@lerna/changed@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/changed/-/changed-3.13.0.tgz#d0249585ce5def15580b5a719231594dae449d10" + integrity sha512-BNUVfEzhrY+XEQJI0fFxEAN7JrguXMGNX5rqQ2KWyGQB4fZ1mv4FStJRjK0K/gcCvdHnuR65uexc/acxBnBi9w== dependencies: - "@lerna/collect-updates" "^3.5.0" - "@lerna/command" "^3.5.0" - "@lerna/listable" "^3.0.0" - "@lerna/output" "^3.0.0" - "@lerna/version" "^3.5.0" + "@lerna/collect-updates" "3.13.0" + "@lerna/command" "3.13.0" + "@lerna/listable" "3.13.0" + "@lerna/output" "3.13.0" + "@lerna/version" "3.13.0" -"@lerna/check-working-tree@^3.5.0": - version "3.5.0" - resolved "https://registry.yarnpkg.com/@lerna/check-working-tree/-/check-working-tree-3.5.0.tgz#015f90247fa0b44a940eab0dd6a9da2ae5b8f455" +"@lerna/check-working-tree@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/check-working-tree/-/check-working-tree-3.13.0.tgz#1ddcd4d9b1aceb65efaaa4cd1333a66706d67c9c" + integrity sha512-dsdO15NXX5To+Q53SYeCrBEpiqv4m5VkaPZxbGQZNwoRen1MloXuqxSymJANQn+ZLEqarv5V56gydebeROPH5A== dependencies: - "@lerna/describe-ref" "^3.5.0" - "@lerna/validation-error" "^3.0.0" + "@lerna/describe-ref" "3.13.0" + "@lerna/validation-error" "3.13.0" -"@lerna/child-process@^3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@lerna/child-process/-/child-process-3.3.0.tgz#71184a763105b6c8ece27f43f166498d90fe680f" +"@lerna/child-process@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/child-process/-/child-process-3.13.0.tgz#84e35adf3217a6983edd28080657b9596a052674" + integrity sha512-0iDS8y2jiEucD4fJHEzKoc8aQJgm7s+hG+0RmDNtfT0MM3n17pZnf5JOMtS1FJp+SEXOjMKQndyyaDIPFsnp6A== dependencies: chalk "^2.3.1" execa "^1.0.0" strong-log-transformer "^2.0.0" -"@lerna/clean@^3.5.0": - version "3.5.0" - resolved "https://registry.yarnpkg.com/@lerna/clean/-/clean-3.5.0.tgz#38e0e58443fa43c19b3eeffcafa46cf254a328ee" +"@lerna/clean@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/clean/-/clean-3.13.0.tgz#0a7536564eaec3445f4397cf9ab3e66fc268b6fe" + integrity sha512-eFkqVsOmybUIjak2NyGfk78Mo8rNyNiSDFh2+HGpias3PBdEbkGYtFi/JMBi9FvqCsBSiVnHCTUcnZdLzMz69w== dependencies: - "@lerna/command" "^3.5.0" - "@lerna/filter-options" "^3.5.0" - "@lerna/prompt" "^3.3.1" - "@lerna/rimraf-dir" "^3.3.0" + "@lerna/command" "3.13.0" + "@lerna/filter-options" "3.13.0" + "@lerna/prompt" "3.13.0" + "@lerna/pulse-till-done" "3.13.0" + "@lerna/rimraf-dir" "3.13.0" p-map "^1.2.0" p-map-series "^1.0.0" p-waterfall "^1.0.0" -"@lerna/cli@^3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@lerna/cli/-/cli-3.2.0.tgz#3ed25bcbc0b8f0878bc6a102ee0296f01476cfdf" +"@lerna/cli@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/cli/-/cli-3.13.0.tgz#3d7b357fdd7818423e9681a7b7f2abd106c8a266" + integrity sha512-HgFGlyCZbYaYrjOr3w/EsY18PdvtsTmDfpUQe8HwDjXlPeCCUgliZjXLOVBxSjiOvPeOSwvopwIHKWQmYbwywg== dependencies: - "@lerna/global-options" "^3.1.3" + "@lerna/global-options" "3.13.0" dedent "^0.7.0" npmlog "^4.1.2" yargs "^12.0.1" -"@lerna/collect-updates@^3.5.0": - version "3.5.0" - resolved "https://registry.yarnpkg.com/@lerna/collect-updates/-/collect-updates-3.5.0.tgz#e81c17f89367e71ff59e0f244a523a1dc13891c5" +"@lerna/collect-updates@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/collect-updates/-/collect-updates-3.13.0.tgz#f0828d84ff959ff153d006765659ffc4d68cdefc" + integrity sha512-uR3u6uTzrS1p46tHQ/mlHog/nRJGBqskTHYYJbgirujxm6FqNh7Do+I1Q/7zSee407G4lzsNxZdm8IL927HemQ== dependencies: - "@lerna/child-process" "^3.3.0" - "@lerna/describe-ref" "^3.5.0" + "@lerna/child-process" "3.13.0" + "@lerna/describe-ref" "3.13.0" minimatch "^3.0.4" npmlog "^4.1.2" slash "^1.0.0" -"@lerna/command@^3.5.0": - version "3.5.0" - resolved "https://registry.yarnpkg.com/@lerna/command/-/command-3.5.0.tgz#6b5cc530653aaa631061c1c234f3bc4408cb9613" +"@lerna/command@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/command/-/command-3.13.0.tgz#8e7ff2255bccb8737616a899cf7a0c076dd4411c" + integrity sha512-34Igk99KKeDt1ilzHooVUamMegArFz8AH9BuJivIKBps1E2A5xkwRd0mJFdPENzLxOqBJlt+cnL7LyvaIM6tRQ== dependencies: - "@lerna/child-process" "^3.3.0" - "@lerna/package-graph" "^3.1.2" - "@lerna/project" "^3.5.0" - "@lerna/validation-error" "^3.0.0" - "@lerna/write-log-file" "^3.0.0" + "@lerna/child-process" "3.13.0" + "@lerna/package-graph" "3.13.0" + "@lerna/project" "3.13.0" + "@lerna/validation-error" "3.13.0" + "@lerna/write-log-file" "3.13.0" dedent "^0.7.0" execa "^1.0.0" is-ci "^1.0.10" lodash "^4.17.5" npmlog "^4.1.2" -"@lerna/conventional-commits@^3.5.0": - version "3.5.0" - resolved "https://registry.yarnpkg.com/@lerna/conventional-commits/-/conventional-commits-3.5.0.tgz#1c08013c48acdbdbf6400ccfbe1200a18e1f11ce" +"@lerna/conventional-commits@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/conventional-commits/-/conventional-commits-3.13.0.tgz#877aa225ca34cca61c31ea02a5a6296af74e1144" + integrity sha512-BeAgcNXuocmLhPxnmKU2Vy8YkPd/Uo+vu2i/p3JGsUldzrPC8iF3IDxH7fuXpEFN2Nfogu7KHachd4tchtOppA== dependencies: - "@lerna/validation-error" "^3.0.0" - conventional-changelog-angular "^5.0.2" - conventional-changelog-core "^3.1.5" + "@lerna/validation-error" "3.13.0" + conventional-changelog-angular "^5.0.3" + conventional-changelog-core "^3.1.6" conventional-recommended-bump "^4.0.4" fs-extra "^7.0.0" get-stream "^4.0.0" - npm-package-arg "^6.0.0" + npm-package-arg "^6.1.0" npmlog "^4.1.2" + pify "^3.0.0" semver "^5.5.0" -"@lerna/create-symlink@^3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@lerna/create-symlink/-/create-symlink-3.3.0.tgz#91de00fd576018ba4251f0c6a5b4b7f768f22a82" +"@lerna/create-symlink@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/create-symlink/-/create-symlink-3.13.0.tgz#e01133082fe040779712c960683cb3a272b67809" + integrity sha512-PTvg3jAAJSAtLFoZDsuTMv1wTOC3XYIdtg54k7uxIHsP8Ztpt+vlilY/Cni0THAqEMHvfiToel76Xdta4TU21Q== dependencies: cmd-shim "^2.0.2" fs-extra "^7.0.0" npmlog "^4.1.2" -"@lerna/create@^3.5.0": - version "3.5.0" - resolved "https://registry.yarnpkg.com/@lerna/create/-/create-3.5.0.tgz#22f64a7af7a08cfbed4af2a01ff82307ee9e0b2b" +"@lerna/create@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/create/-/create-3.13.0.tgz#033ea1bbb028cd18252a8595ef32edf28e99048d" + integrity sha512-0Vrl6Z1NEQFKd1uzWBFWii59OmMNKSNXxgKYoh3Ulu/ekMh90BgnLJ0a8tE34KK4lG5mVTQDlowKFEF+jZfYOA== dependencies: - "@lerna/child-process" "^3.3.0" - "@lerna/command" "^3.5.0" - "@lerna/npm-conf" "^3.4.1" - "@lerna/validation-error" "^3.0.0" - camelcase "^4.1.0" + "@lerna/child-process" "3.13.0" + "@lerna/command" "3.13.0" + "@lerna/npm-conf" "3.13.0" + "@lerna/validation-error" "3.13.0" + camelcase "^5.0.0" dedent "^0.7.0" fs-extra "^7.0.0" globby "^8.0.1" init-package-json "^1.10.3" - npm-package-arg "^6.0.0" + npm-package-arg "^6.1.0" + p-reduce "^1.0.0" + pacote "^9.4.1" pify "^3.0.0" semver "^5.5.0" slash "^1.0.0" @@ -248,197 +383,258 @@ validate-npm-package-name "^3.0.0" whatwg-url "^7.0.0" -"@lerna/describe-ref@^3.5.0": - version "3.5.0" - resolved "https://registry.yarnpkg.com/@lerna/describe-ref/-/describe-ref-3.5.0.tgz#d59090d201a0e587798496417373c7fbc1151fc4" +"@lerna/describe-ref@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/describe-ref/-/describe-ref-3.13.0.tgz#fb4c3863fd6bcccad67ce7b183887a5fc1942bb6" + integrity sha512-UJefF5mLxLae9I2Sbz5RLYGbqbikRuMqdgTam0MS5OhXnyuuKYBUpwBshCURNb1dPBXTQhSwc7+oUhORx8ojCg== dependencies: - "@lerna/child-process" "^3.3.0" + "@lerna/child-process" "3.13.0" npmlog "^4.1.2" -"@lerna/diff@^3.5.0": - version "3.5.0" - resolved "https://registry.yarnpkg.com/@lerna/diff/-/diff-3.5.0.tgz#4d131a1045321bcea20d743f5cc7f0d0095cf027" +"@lerna/diff@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/diff/-/diff-3.13.0.tgz#9a39bfb1c4d6af1ea05b3d3df2ba0022ea24b81d" + integrity sha512-fyHRzRBiqXj03YbGY5/ume1N0v0wrWVB7XPHPaQs/e/eCgMpcmoQGQoW5r97R+xaEoy3boByr/ham4XHZv02ZQ== dependencies: - "@lerna/child-process" "^3.3.0" - "@lerna/command" "^3.5.0" - "@lerna/validation-error" "^3.0.0" + "@lerna/child-process" "3.13.0" + "@lerna/command" "3.13.0" + "@lerna/validation-error" "3.13.0" npmlog "^4.1.2" -"@lerna/exec@^3.5.0": - version "3.5.0" - resolved "https://registry.yarnpkg.com/@lerna/exec/-/exec-3.5.0.tgz#98f4e8719681c07a739241fadb4cbdbd9d518982" - dependencies: - "@lerna/batch-packages" "^3.1.2" - "@lerna/child-process" "^3.3.0" - "@lerna/command" "^3.5.0" - "@lerna/filter-options" "^3.5.0" - "@lerna/run-parallel-batches" "^3.0.0" - "@lerna/validation-error" "^3.0.0" - -"@lerna/filter-options@^3.5.0": - version "3.5.0" - resolved "https://registry.yarnpkg.com/@lerna/filter-options/-/filter-options-3.5.0.tgz#34d1719908edbb52d4963c796df565a716282165" - dependencies: - "@lerna/collect-updates" "^3.5.0" - "@lerna/filter-packages" "^3.0.0" +"@lerna/exec@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/exec/-/exec-3.13.0.tgz#76f0a7f48f3feb36d266f4ac1f084c8f34afb152" + integrity sha512-Dc8jr1jL6YrfbI1sUZ3+px00HwcZLKykl7AC8A+vvCzYLa4MeK3UJ7CPg4kvBN1mX7yhGrSDSfxG0bJriHU5nA== + dependencies: + "@lerna/batch-packages" "3.13.0" + "@lerna/child-process" "3.13.0" + "@lerna/command" "3.13.0" + "@lerna/filter-options" "3.13.0" + "@lerna/run-parallel-batches" "3.13.0" + "@lerna/validation-error" "3.13.0" + +"@lerna/filter-options@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/filter-options/-/filter-options-3.13.0.tgz#976e3d8b9fcd47001ab981d276565c1e9f767868" + integrity sha512-SRp7DCo9zrf+7NkQxZMkeyO1GRN6GICoB9UcBAbXhLbWisT37Cx5/6+jh49gYB63d/0/WYHSEPMlheUrpv1Srw== + dependencies: + "@lerna/collect-updates" "3.13.0" + "@lerna/filter-packages" "3.13.0" dedent "^0.7.0" -"@lerna/filter-packages@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@lerna/filter-packages/-/filter-packages-3.0.0.tgz#5eb25ad1610f3e2ab845133d1f8d7d40314e838f" +"@lerna/filter-packages@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/filter-packages/-/filter-packages-3.13.0.tgz#f5371249e7e1a15928e5e88c544a242e0162c21c" + integrity sha512-RWiZWyGy3Mp7GRVBn//CacSnE3Kw82PxE4+H6bQ3pDUw/9atXn7NRX+gkBVQIYeKamh7HyumJtyOKq3Pp9BADQ== dependencies: - "@lerna/validation-error" "^3.0.0" + "@lerna/validation-error" "3.13.0" multimatch "^2.1.0" npmlog "^4.1.2" -"@lerna/get-npm-exec-opts@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-3.0.0.tgz#8fc7866e8d8e9a2f2dc385287ba32eb44de8bdeb" +"@lerna/get-npm-exec-opts@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-3.13.0.tgz#d1b552cb0088199fc3e7e126f914e39a08df9ea5" + integrity sha512-Y0xWL0rg3boVyJk6An/vurKzubyJKtrxYv2sj4bB8Mc5zZ3tqtv0ccbOkmkXKqbzvNNF7VeUt1OJ3DRgtC/QZw== dependencies: npmlog "^4.1.2" -"@lerna/global-options@^3.1.3": - version "3.1.3" - resolved "https://registry.yarnpkg.com/@lerna/global-options/-/global-options-3.1.3.tgz#cf85e24655a91d04d4efc9a80c1f83fc768d08ae" +"@lerna/get-packed@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/get-packed/-/get-packed-3.13.0.tgz#335e40d77f3c1855aa248587d3e0b2d8f4b06e16" + integrity sha512-EgSim24sjIjqQDC57bgXD9l22/HCS93uQBbGpkzEOzxAVzEgpZVm7Fm1t8BVlRcT2P2zwGnRadIvxTbpQuDPTg== + dependencies: + fs-extra "^7.0.0" + ssri "^6.0.1" + tar "^4.4.8" -"@lerna/has-npm-version@^3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@lerna/has-npm-version/-/has-npm-version-3.3.0.tgz#8a73c2c437a0e1e68a19ccbd0dd3c014d4d39135" +"@lerna/github-client@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/github-client/-/github-client-3.13.0.tgz#960c75e4159905ea31c171e27ca468c1a809ed77" + integrity sha512-4/003z1g7shg21nl06ku5/yqYbQfNsQkeWuWEd+mjiTtGH6OhzJ8XcmBOq6mhZrfDAlA4OLeXypd1QIK1Y7arA== + dependencies: + "@lerna/child-process" "3.13.0" + "@octokit/plugin-enterprise-rest" "^2.1.0" + "@octokit/rest" "^16.15.0" + git-url-parse "^11.1.2" + npmlog "^4.1.2" + +"@lerna/global-options@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/global-options/-/global-options-3.13.0.tgz#217662290db06ad9cf2c49d8e3100ee28eaebae1" + integrity sha512-SlZvh1gVRRzYLVluz9fryY1nJpZ0FHDGB66U9tFfvnnxmueckRQxLopn3tXj3NU1kc3QANT2I5BsQkOqZ4TEFQ== + +"@lerna/has-npm-version@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/has-npm-version/-/has-npm-version-3.13.0.tgz#6e1f7e9336cce3e029066f0175f06dd9d51ad09f" + integrity sha512-Oqu7DGLnrMENPm+bPFGOHnqxK8lCnuYr6bk3g/CoNn8/U0qgFvHcq6Iv8/Z04TsvleX+3/RgauSD2kMfRmbypg== dependencies: - "@lerna/child-process" "^3.3.0" + "@lerna/child-process" "3.13.0" semver "^5.5.0" -"@lerna/import@^3.5.0": - version "3.5.0" - resolved "https://registry.yarnpkg.com/@lerna/import/-/import-3.5.0.tgz#b42d368378d53c664a3324c1e2fc656a23819f12" +"@lerna/import@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/import/-/import-3.13.0.tgz#0c521b020edf291c89d591dc6eda0d1efa754452" + integrity sha512-uQ+hoYEC6/B8VqQ9tecA1PVCFiqwN+DCrdIBY/KX3Z5vip94Pc8H/u+Q2dfBymkT6iXnvmPR/6hsMkpMOjBQDg== dependencies: - "@lerna/child-process" "^3.3.0" - "@lerna/command" "^3.5.0" - "@lerna/prompt" "^3.3.1" - "@lerna/validation-error" "^3.0.0" + "@lerna/child-process" "3.13.0" + "@lerna/command" "3.13.0" + "@lerna/prompt" "3.13.0" + "@lerna/pulse-till-done" "3.13.0" + "@lerna/validation-error" "3.13.0" dedent "^0.7.0" fs-extra "^7.0.0" p-map-series "^1.0.0" -"@lerna/init@^3.5.0": - version "3.5.0" - resolved "https://registry.yarnpkg.com/@lerna/init/-/init-3.5.0.tgz#40796d70dc261907e4149df62db8acbda8dc56fc" +"@lerna/init@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/init/-/init-3.13.0.tgz#7b92151572aaa1d9b89002e0b8c332db0ff1b692" + integrity sha512-4MBaNaitr9rfzwHK4d0Y19WIzqL5RTk719tIlVtw+IRE2qF9/ioovNIZuoeISyi84mTKehsFtPsHoxFIulZUhQ== dependencies: - "@lerna/child-process" "^3.3.0" - "@lerna/command" "^3.5.0" + "@lerna/child-process" "3.13.0" + "@lerna/command" "3.13.0" fs-extra "^7.0.0" p-map "^1.2.0" write-json-file "^2.3.0" -"@lerna/link@^3.5.0": - version "3.5.0" - resolved "https://registry.yarnpkg.com/@lerna/link/-/link-3.5.0.tgz#ae7fe19df1bb0555dfa5aafcaf45c7fad537d81a" +"@lerna/link@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/link/-/link-3.13.0.tgz#9965e2fcacfa1b1414db8902d800464d56cf170e" + integrity sha512-0PAZM1kVCmtJfiQUzy6TT1aemIg9pxejGxFBYMB+IAxR5rcgLlZago1R52/8HyNGa07bLv0B6CkRgrdQ/9bzCg== dependencies: - "@lerna/command" "^3.5.0" - "@lerna/package-graph" "^3.1.2" - "@lerna/symlink-dependencies" "^3.3.0" + "@lerna/command" "3.13.0" + "@lerna/package-graph" "3.13.0" + "@lerna/symlink-dependencies" "3.13.0" p-map "^1.2.0" slash "^1.0.0" -"@lerna/list@^3.5.0": - version "3.5.0" - resolved "https://registry.yarnpkg.com/@lerna/list/-/list-3.5.0.tgz#ae38724f1cdc588fde8495385e3b1a9aeac0c80f" +"@lerna/list@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/list/-/list-3.13.0.tgz#4cb34828507d2c02ccd3305ff8b9f546cab7727e" + integrity sha512-nKSqGs4ZJe7zB6SJmBEb7AfGLzqDOwJwbucC3XVgkjrXlrX4AW4+qnPiGpEdz8OFmzstkghQrWUUJvsEpNVTjw== dependencies: - "@lerna/command" "^3.5.0" - "@lerna/filter-options" "^3.5.0" - "@lerna/listable" "^3.0.0" - "@lerna/output" "^3.0.0" + "@lerna/command" "3.13.0" + "@lerna/filter-options" "3.13.0" + "@lerna/listable" "3.13.0" + "@lerna/output" "3.13.0" -"@lerna/listable@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@lerna/listable/-/listable-3.0.0.tgz#27209b1382c87abdbc964220e75c247d803d4199" +"@lerna/listable@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/listable/-/listable-3.13.0.tgz#babc18442c590b549cf0966d20d75fea066598d4" + integrity sha512-liYJ/WBUYP4N4MnSVZuLUgfa/jy3BZ02/1Om7xUY09xGVSuNVNEeB8uZUMSC+nHqFHIsMPZ8QK9HnmZb1E/eTA== dependencies: + "@lerna/batch-packages" "3.13.0" chalk "^2.3.1" columnify "^1.5.4" -"@lerna/log-packed@^3.0.4": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@lerna/log-packed/-/log-packed-3.0.4.tgz#6d1f6ce5ca68b9971f2a27f0ecf3c50684be174a" +"@lerna/log-packed@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/log-packed/-/log-packed-3.13.0.tgz#497b5f692a8d0e3f669125da97b0dadfd9e480f3" + integrity sha512-Rmjrcz+6aM6AEcEVWmurbo8+AnHOvYtDpoeMMJh9IZ9SmZr2ClXzmD7wSvjTQc8BwOaiWjjC/ukcT0UYA2m7wg== dependencies: byte-size "^4.0.3" columnify "^1.5.4" has-unicode "^2.0.1" npmlog "^4.1.2" -"@lerna/npm-conf@^3.4.1": - version "3.4.1" - resolved "https://registry.yarnpkg.com/@lerna/npm-conf/-/npm-conf-3.4.1.tgz#859e931b0bc9a5eed86309cc09508810c1e7d121" +"@lerna/npm-conf@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/npm-conf/-/npm-conf-3.13.0.tgz#6b434ed75ff757e8c14381b9bbfe5d5ddec134a7" + integrity sha512-Jg2kANsGnhg+fbPEzE0X9nX5oviEAvWj0nYyOkcE+cgWuT7W0zpnPXC4hA4C5IPQGhwhhh0IxhWNNHtjTuw53g== dependencies: config-chain "^1.1.11" pify "^3.0.0" -"@lerna/npm-dist-tag@^3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@lerna/npm-dist-tag/-/npm-dist-tag-3.3.0.tgz#e1c5ab67674216d901266a16846b21cc81ff6afd" +"@lerna/npm-dist-tag@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/npm-dist-tag/-/npm-dist-tag-3.13.0.tgz#49ecbe0e82cbe4ad4a8ea6de112982bf6c4e6cd4" + integrity sha512-mcuhw34JhSRFrbPn0vedbvgBTvveG52bR2lVE3M3tfE8gmR/cKS/EJFO4AUhfRKGCTFn9rjaSEzlFGYV87pemQ== dependencies: - "@lerna/child-process" "^3.3.0" - "@lerna/get-npm-exec-opts" "^3.0.0" + figgy-pudding "^3.5.1" + npm-package-arg "^6.1.0" + npm-registry-fetch "^3.9.0" npmlog "^4.1.2" -"@lerna/npm-install@^3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@lerna/npm-install/-/npm-install-3.3.0.tgz#16d00ffd668d11b2386b3ac68bdac2cf8320e533" +"@lerna/npm-install@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/npm-install/-/npm-install-3.13.0.tgz#88f4cc39f4f737c8a8721256b915ea1bcc6a7227" + integrity sha512-qNyfts//isYQxore6fsPorNYJmPVKZ6tOThSH97tP0aV91zGMtrYRqlAoUnDwDdAjHPYEM16hNujg2wRmsqqIw== dependencies: - "@lerna/child-process" "^3.3.0" - "@lerna/get-npm-exec-opts" "^3.0.0" + "@lerna/child-process" "3.13.0" + "@lerna/get-npm-exec-opts" "3.13.0" fs-extra "^7.0.0" - npm-package-arg "^6.0.0" + npm-package-arg "^6.1.0" npmlog "^4.1.2" signal-exit "^3.0.2" write-pkg "^3.1.0" -"@lerna/npm-publish@^3.3.1": - version "3.3.1" - resolved "https://registry.yarnpkg.com/@lerna/npm-publish/-/npm-publish-3.3.1.tgz#30384665d7ee387343332ece62ca231207bbabea" +"@lerna/npm-publish@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/npm-publish/-/npm-publish-3.13.0.tgz#5c74808376e778865ffdc5885fe83935e15e60c3" + integrity sha512-y4WO0XTaf9gNRkI7as6P2ItVDOxmYHwYto357fjybcnfXgMqEA94c3GJ++jU41j0A9vnmYC6/XxpTd9sVmH9tA== dependencies: - "@lerna/child-process" "^3.3.0" - "@lerna/get-npm-exec-opts" "^3.0.0" - "@lerna/has-npm-version" "^3.3.0" - "@lerna/log-packed" "^3.0.4" + "@lerna/run-lifecycle" "3.13.0" + figgy-pudding "^3.5.1" fs-extra "^7.0.0" + libnpmpublish "^1.1.1" npmlog "^4.1.2" - p-map "^1.2.0" + pify "^3.0.0" + read-package-json "^2.0.13" -"@lerna/npm-run-script@^3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@lerna/npm-run-script/-/npm-run-script-3.3.0.tgz#3c79601c27c67121155b20e039be53130217db72" +"@lerna/npm-run-script@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/npm-run-script/-/npm-run-script-3.13.0.tgz#e5997f045402b9948bdc066033ebb36bf94fc9e4" + integrity sha512-hiL3/VeVp+NFatBjkGN8mUdX24EfZx9rQlSie0CMgtjc7iZrtd0jCguLomSCRHYjJuvqgbp+LLYo7nHVykfkaQ== dependencies: - "@lerna/child-process" "^3.3.0" - "@lerna/get-npm-exec-opts" "^3.0.0" + "@lerna/child-process" "3.13.0" + "@lerna/get-npm-exec-opts" "3.13.0" npmlog "^4.1.2" -"@lerna/output@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@lerna/output/-/output-3.0.0.tgz#4ed4a30ed2f311046b714b3840a090990ba3ce35" +"@lerna/output@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/output/-/output-3.13.0.tgz#3ded7cc908b27a9872228a630d950aedae7a4989" + integrity sha512-7ZnQ9nvUDu/WD+bNsypmPG5MwZBwu86iRoiW6C1WBuXXDxM5cnIAC1m2WxHeFnjyMrYlRXM9PzOQ9VDD+C15Rg== dependencies: npmlog "^4.1.2" -"@lerna/package-graph@^3.1.2": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@lerna/package-graph/-/package-graph-3.1.2.tgz#b70298a3a8c82e12090da33233bf242223a38f20" +"@lerna/pack-directory@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/pack-directory/-/pack-directory-3.13.0.tgz#e5df1647f7d3c417753aba666c17bdb8743eb346" + integrity sha512-p5lhLPvpRptms08uSTlDpz8R2/s8Z2Vi0Hc8+yIAP74YD8gh/U9Diku9EGkkgkLfV+P0WhnEO8/Gq/qzNVbntA== dependencies: - "@lerna/validation-error" "^3.0.0" - npm-package-arg "^6.0.0" + "@lerna/get-packed" "3.13.0" + "@lerna/package" "3.13.0" + "@lerna/run-lifecycle" "3.13.0" + figgy-pudding "^3.5.1" + npm-packlist "^1.1.12" + npmlog "^4.1.2" + tar "^4.4.8" + temp-write "^3.4.0" + +"@lerna/package-graph@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/package-graph/-/package-graph-3.13.0.tgz#607062f8d2ce22b15f8d4a0623f384736e67f760" + integrity sha512-3mRF1zuqFE1HEFmMMAIggXy+f+9cvHhW/jzaPEVyrPNLKsyfJQtpTNzeI04nfRvbAh+Gd2aNksvaW/w3xGJnnw== + dependencies: + "@lerna/validation-error" "3.13.0" + npm-package-arg "^6.1.0" semver "^5.5.0" -"@lerna/package@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@lerna/package/-/package-3.0.0.tgz#14afc9a6cb1f7f7b23c1d7c7aa81bdac7d44c0e5" +"@lerna/package@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/package/-/package-3.13.0.tgz#4baeebc49a57fc9b31062cc59f5ee38384429fc8" + integrity sha512-kSKO0RJQy093BufCQnkhf1jB4kZnBvL7kK5Ewolhk5gwejN+Jofjd8DGRVUDUJfQ0CkW1o6GbUeZvs8w8VIZDg== dependencies: - npm-package-arg "^6.0.0" + load-json-file "^4.0.0" + npm-package-arg "^6.1.0" write-pkg "^3.1.0" -"@lerna/project@^3.5.0": - version "3.5.0" - resolved "https://registry.yarnpkg.com/@lerna/project/-/project-3.5.0.tgz#ac5c7b3c49318552b29ccb7a471a657fd57d3091" +"@lerna/project@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/project/-/project-3.13.0.tgz#e7d3ae16309988443eb47470c9dbf6aa8386a2ed" + integrity sha512-hxRvln8Dks3T4PBALC9H3Kw6kTne70XShfqSs4oJkMqFyDj4mb5VCUN6taCDXyF8fu75d02ETdTFZhhBgm1x6w== dependencies: - "@lerna/package" "^3.0.0" - "@lerna/validation-error" "^3.0.0" + "@lerna/package" "3.13.0" + "@lerna/validation-error" "3.13.0" cosmiconfig "^5.0.2" dedent "^0.7.0" dot-prop "^4.2.0" @@ -450,136 +646,160 @@ resolve-from "^4.0.0" write-json-file "^2.3.0" -"@lerna/prompt@^3.3.1": - version "3.3.1" - resolved "https://registry.yarnpkg.com/@lerna/prompt/-/prompt-3.3.1.tgz#ec53f9034a7a02a671627241682947f65078ab88" +"@lerna/prompt@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/prompt/-/prompt-3.13.0.tgz#53571462bb3f5399cc1ca6d335a411fe093426a5" + integrity sha512-P+lWSFokdyvYpkwC3it9cE0IF2U5yy2mOUbGvvE4iDb9K7TyXGE+7lwtx2thtPvBAfIb7O13POMkv7df03HJeA== dependencies: inquirer "^6.2.0" npmlog "^4.1.2" -"@lerna/publish@^3.5.0": - version "3.5.0" - resolved "https://registry.yarnpkg.com/@lerna/publish/-/publish-3.5.0.tgz#e6543375457846557f3cb803f7795a577333a941" - dependencies: - "@lerna/batch-packages" "^3.1.2" - "@lerna/check-working-tree" "^3.5.0" - "@lerna/child-process" "^3.3.0" - "@lerna/collect-updates" "^3.5.0" - "@lerna/command" "^3.5.0" - "@lerna/describe-ref" "^3.5.0" - "@lerna/get-npm-exec-opts" "^3.0.0" - "@lerna/npm-conf" "^3.4.1" - "@lerna/npm-dist-tag" "^3.3.0" - "@lerna/npm-publish" "^3.3.1" - "@lerna/output" "^3.0.0" - "@lerna/prompt" "^3.3.1" - "@lerna/run-lifecycle" "^3.4.1" - "@lerna/run-parallel-batches" "^3.0.0" - "@lerna/validation-error" "^3.0.0" - "@lerna/version" "^3.5.0" +"@lerna/publish@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/publish/-/publish-3.13.0.tgz#9acd2ab79b278e0131f677c339755cfecc30b1b5" + integrity sha512-WuO7LWWQ+8F+ig48RtUxWrVdOfpqDBOv6fXz0/2heQf/rJQoJDTzJZ0rk5ymaGCFz1Av2CbP0zoP7PAQQ2BeKg== + dependencies: + "@lerna/batch-packages" "3.13.0" + "@lerna/check-working-tree" "3.13.0" + "@lerna/child-process" "3.13.0" + "@lerna/collect-updates" "3.13.0" + "@lerna/command" "3.13.0" + "@lerna/describe-ref" "3.13.0" + "@lerna/log-packed" "3.13.0" + "@lerna/npm-conf" "3.13.0" + "@lerna/npm-dist-tag" "3.13.0" + "@lerna/npm-publish" "3.13.0" + "@lerna/output" "3.13.0" + "@lerna/pack-directory" "3.13.0" + "@lerna/prompt" "3.13.0" + "@lerna/pulse-till-done" "3.13.0" + "@lerna/run-lifecycle" "3.13.0" + "@lerna/run-parallel-batches" "3.13.0" + "@lerna/validation-error" "3.13.0" + "@lerna/version" "3.13.0" + figgy-pudding "^3.5.1" fs-extra "^7.0.0" - libnpmaccess "^3.0.0" - npm-package-arg "^6.0.0" - npm-registry-fetch "^3.8.0" + libnpmaccess "^3.0.1" + npm-package-arg "^6.1.0" + npm-registry-fetch "^3.9.0" npmlog "^4.1.2" p-finally "^1.0.0" p-map "^1.2.0" p-pipe "^1.2.0" p-reduce "^1.0.0" + pacote "^9.4.1" semver "^5.5.0" -"@lerna/resolve-symlink@^3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@lerna/resolve-symlink/-/resolve-symlink-3.3.0.tgz#c5d99a60cb17e2ea90b3521a0ba445478d194a44" +"@lerna/pulse-till-done@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/pulse-till-done/-/pulse-till-done-3.13.0.tgz#c8e9ce5bafaf10d930a67d7ed0ccb5d958fe0110" + integrity sha512-1SOHpy7ZNTPulzIbargrgaJX387csN7cF1cLOGZiJQA6VqnS5eWs2CIrG8i8wmaUavj2QlQ5oEbRMVVXSsGrzA== + dependencies: + npmlog "^4.1.2" + +"@lerna/resolve-symlink@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/resolve-symlink/-/resolve-symlink-3.13.0.tgz#3e6809ef53b63fe914814bfa071cd68012e22fbb" + integrity sha512-Lc0USSFxwDxUs5JvIisS8JegjA6SHSAWJCMvi2osZx6wVRkEDlWG2B1JAfXUzCMNfHoZX0/XX9iYZ+4JIpjAtg== dependencies: fs-extra "^7.0.0" npmlog "^4.1.2" read-cmd-shim "^1.0.1" -"@lerna/rimraf-dir@^3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@lerna/rimraf-dir/-/rimraf-dir-3.3.0.tgz#687e9bb3668a9e540e281302a52d9a573860f5db" +"@lerna/rimraf-dir@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/rimraf-dir/-/rimraf-dir-3.13.0.tgz#bb1006104b4aabcb6985624273254648f872b278" + integrity sha512-kte+pMemulre8cmPqljxIYjCmdLByz8DgHBHXB49kz2EiPf8JJ+hJFt0PzEubEyJZ2YE2EVAx5Tv5+NfGNUQyQ== dependencies: - "@lerna/child-process" "^3.3.0" + "@lerna/child-process" "3.13.0" npmlog "^4.1.2" path-exists "^3.0.0" rimraf "^2.6.2" -"@lerna/run-lifecycle@^3.4.1": - version "3.4.1" - resolved "https://registry.yarnpkg.com/@lerna/run-lifecycle/-/run-lifecycle-3.4.1.tgz#6d7e44eada31cb4ec78b18ef050da0d86f6c892b" +"@lerna/run-lifecycle@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/run-lifecycle/-/run-lifecycle-3.13.0.tgz#d8835ee83425edee40f687a55f81b502354d3261" + integrity sha512-oyiaL1biZdjpmjh6X/5C4w07wNFyiwXSSHH5GQB4Ay4BPwgq9oNhCcxRoi0UVZlZ1YwzSW8sTwLgj8emkIo3Yg== dependencies: - "@lerna/npm-conf" "^3.4.1" - npm-lifecycle "^2.0.0" + "@lerna/npm-conf" "3.13.0" + figgy-pudding "^3.5.1" + npm-lifecycle "^2.1.0" npmlog "^4.1.2" -"@lerna/run-parallel-batches@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@lerna/run-parallel-batches/-/run-parallel-batches-3.0.0.tgz#468704934084c74991d3124d80607857d4dfa840" +"@lerna/run-parallel-batches@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/run-parallel-batches/-/run-parallel-batches-3.13.0.tgz#0276bb4e7cd0995297db82d134ca2bd08d63e311" + integrity sha512-bICFBR+cYVF1FFW+Tlm0EhWDioTUTM6dOiVziDEGE1UZha1dFkMYqzqdSf4bQzfLS31UW/KBd/2z8jy2OIjEjg== dependencies: p-map "^1.2.0" p-map-series "^1.0.0" -"@lerna/run@^3.5.0": - version "3.5.0" - resolved "https://registry.yarnpkg.com/@lerna/run/-/run-3.5.0.tgz#f2bf479d8ef12e6a11be5a6404bb1a83eb56146c" - dependencies: - "@lerna/batch-packages" "^3.1.2" - "@lerna/command" "^3.5.0" - "@lerna/filter-options" "^3.5.0" - "@lerna/npm-run-script" "^3.3.0" - "@lerna/output" "^3.0.0" - "@lerna/run-parallel-batches" "^3.0.0" - "@lerna/timer" "^3.5.0" - "@lerna/validation-error" "^3.0.0" +"@lerna/run@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/run/-/run-3.13.0.tgz#4a73af6133843cf9d5767f006e2b988a2aa3461a" + integrity sha512-KSpEStp5SVzNB7+3V5WnyY4So8aEyDhBYvhm7cJr5M7xesKf/IE5KFywcI+JPYzyqnIOGXghfzBf9nBZRHlEUQ== + dependencies: + "@lerna/batch-packages" "3.13.0" + "@lerna/command" "3.13.0" + "@lerna/filter-options" "3.13.0" + "@lerna/npm-run-script" "3.13.0" + "@lerna/output" "3.13.0" + "@lerna/run-parallel-batches" "3.13.0" + "@lerna/timer" "3.13.0" + "@lerna/validation-error" "3.13.0" p-map "^1.2.0" -"@lerna/symlink-binary@^3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@lerna/symlink-binary/-/symlink-binary-3.3.0.tgz#99ea570b21baabd61ecab27582eeb1d7b2c5f9cf" +"@lerna/symlink-binary@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/symlink-binary/-/symlink-binary-3.13.0.tgz#36a9415d468afcb8105750296902f6f000a9680d" + integrity sha512-obc4Y6jxywkdaCe+DB0uTxYqP0IQ8mFWvN+k/YMbwH4G2h7M7lCBWgPy8e7xw/50+1II9tT2sxgx+jMus1sTJg== dependencies: - "@lerna/create-symlink" "^3.3.0" - "@lerna/package" "^3.0.0" + "@lerna/create-symlink" "3.13.0" + "@lerna/package" "3.13.0" fs-extra "^7.0.0" p-map "^1.2.0" - read-pkg "^3.0.0" -"@lerna/symlink-dependencies@^3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@lerna/symlink-dependencies/-/symlink-dependencies-3.3.0.tgz#13bcaed3e37986ab01b13498a459c7f609397dc3" +"@lerna/symlink-dependencies@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/symlink-dependencies/-/symlink-dependencies-3.13.0.tgz#76c23ecabda7824db98a0561364f122b457509cf" + integrity sha512-7CyN5WYEPkbPLbqHBIQg/YiimBzb5cIGQB0E9IkLs3+racq2vmUNQZn38LOaazQacAA83seB+zWSxlI6H+eXSg== dependencies: - "@lerna/create-symlink" "^3.3.0" - "@lerna/resolve-symlink" "^3.3.0" - "@lerna/symlink-binary" "^3.3.0" + "@lerna/create-symlink" "3.13.0" + "@lerna/resolve-symlink" "3.13.0" + "@lerna/symlink-binary" "3.13.0" fs-extra "^7.0.0" p-finally "^1.0.0" p-map "^1.2.0" p-map-series "^1.0.0" -"@lerna/timer@^3.5.0": - version "3.5.0" - resolved "https://registry.yarnpkg.com/@lerna/timer/-/timer-3.5.0.tgz#8dee6acf002c55de64678c66ef37ca52143f1b9b" +"@lerna/timer@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/timer/-/timer-3.13.0.tgz#bcd0904551db16e08364d6c18e5e2160fc870781" + integrity sha512-RHWrDl8U4XNPqY5MQHkToWS9jHPnkLZEt5VD+uunCKTfzlxGnRCr3/zVr8VGy/uENMYpVP3wJa4RKGY6M0vkRw== -"@lerna/validation-error@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@lerna/validation-error/-/validation-error-3.0.0.tgz#a27e90051c3ba71995e2a800a43d94ad04b3e3f4" +"@lerna/validation-error@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/validation-error/-/validation-error-3.13.0.tgz#c86b8f07c5ab9539f775bd8a54976e926f3759c3" + integrity sha512-SiJP75nwB8GhgwLKQfdkSnDufAaCbkZWJqEDlKOUPUvVOplRGnfL+BPQZH5nvq2BYSRXsksXWZ4UHVnQZI/HYA== dependencies: npmlog "^4.1.2" -"@lerna/version@^3.5.0": - version "3.5.0" - resolved "https://registry.yarnpkg.com/@lerna/version/-/version-3.5.0.tgz#df6d4d8ef077b51962126c0f52c800d98c53cc26" - dependencies: - "@lerna/batch-packages" "^3.1.2" - "@lerna/check-working-tree" "^3.5.0" - "@lerna/child-process" "^3.3.0" - "@lerna/collect-updates" "^3.5.0" - "@lerna/command" "^3.5.0" - "@lerna/conventional-commits" "^3.5.0" - "@lerna/output" "^3.0.0" - "@lerna/prompt" "^3.3.1" - "@lerna/run-lifecycle" "^3.4.1" - "@lerna/validation-error" "^3.0.0" +"@lerna/version@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/version/-/version-3.13.0.tgz#d2eb17561b6a9b08947a88b5dc463a4a72e01198" + integrity sha512-YdLC208tExVpV77pdXpokGt9MAtTE7Kt93a2jcfjqiMoAI1VmXgGA+7drgBSTVtzfjXExPgi2//hJjI5ObckXA== + dependencies: + "@lerna/batch-packages" "3.13.0" + "@lerna/check-working-tree" "3.13.0" + "@lerna/child-process" "3.13.0" + "@lerna/collect-updates" "3.13.0" + "@lerna/command" "3.13.0" + "@lerna/conventional-commits" "3.13.0" + "@lerna/github-client" "3.13.0" + "@lerna/output" "3.13.0" + "@lerna/prompt" "3.13.0" + "@lerna/run-lifecycle" "3.13.0" + "@lerna/validation-error" "3.13.0" chalk "^2.3.1" dedent "^0.7.0" minimatch "^3.0.4" @@ -592,9 +812,10 @@ slash "^1.0.0" temp-write "^3.4.0" -"@lerna/write-log-file@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@lerna/write-log-file/-/write-log-file-3.0.0.tgz#2f95fee80c6821fe1ee6ccf8173d2b4079debbd2" +"@lerna/write-log-file@3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@lerna/write-log-file/-/write-log-file-3.13.0.tgz#b78d9e4cfc1349a8be64d91324c4c8199e822a26" + integrity sha512-RibeMnDPvlL8bFYW5C8cs4mbI3AHfQef73tnJCQ/SgrXZHehmHnsyWUiE7qDQCAo+B1RfTapvSyFF69iPj326A== dependencies: npmlog "^4.1.2" write-file-atomic "^2.3.0" @@ -602,6 +823,7 @@ "@mrmlnc/readdir-enhanced@^2.2.1": version "2.2.1" resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" + integrity sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g== dependencies: call-me-maybe "^1.0.1" glob-to-regexp "^0.3.0" @@ -609,48 +831,69 @@ "@nodelib/fs.stat@^1.1.2": version "1.1.3" resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" + integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== -"@octokit/rest@^15.12.1": - version "15.18.0" - resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-15.18.0.tgz#e6de702b57dec94c71e806f1cff0ecb9725b3054" +"@octokit/endpoint@^3.1.1": + version "3.1.3" + resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-3.1.3.tgz#f6e9c2521b83b74367600e474b24efec2b0471c4" + integrity sha512-vAWzeoj9Lzpl3V3YkWKhGzmDUoMfKpyxJhpq74/ohMvmLXDoEuAGnApy/7TRi3OmnjyX2Lr+e9UGGAD0919ohA== + dependencies: + deepmerge "3.2.0" + is-plain-object "^2.0.4" + universal-user-agent "^2.0.1" + url-template "^2.0.8" + +"@octokit/plugin-enterprise-rest@^2.1.0": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-2.1.1.tgz#ee7b245aada06d3ffdd409205ad1b891107fee0b" + integrity sha512-DJNXHH0LptKCLpJ8y3vCA/O+s+3/sDU4JNN2V0M04tsMN0hVGLPzoGgejPJgaxGP8Il5aw+jA5Nl5mTfdt9NrQ== + +"@octokit/request@2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@octokit/request/-/request-2.3.0.tgz#da2672308bcf0b9376ef66f51bddbe5eb87cc00a" + integrity sha512-5YRqYNZOAaL7+nt7w3Scp6Sz4P2g7wKFP9npx1xdExMomk8/M/ICXVLYVam2wzxeY0cIc6wcKpjC5KI4jiNbGw== dependencies: - before-after-hook "^1.1.0" + "@octokit/endpoint" "^3.1.1" + is-plain-object "^2.0.4" + node-fetch "^2.3.0" + universal-user-agent "^2.0.1" + +"@octokit/rest@^16.14.1", "@octokit/rest@^16.15.0": + version "16.15.0" + resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-16.15.0.tgz#648a88d5de055bcf38976709c5b2bdf1227b926f" + integrity sha512-Un+e7rgh38RtPOTe453pT/KPM/p2KZICimBmuZCd2wEo8PacDa4h6RqTPZs+f2DPazTTqdM7QU4LKlUjgiBwWw== + dependencies: + "@octokit/request" "2.3.0" + before-after-hook "^1.2.0" btoa-lite "^1.0.0" - debug "^3.1.0" - http-proxy-agent "^2.1.0" - https-proxy-agent "^2.2.0" - lodash "^4.17.4" - node-fetch "^2.1.1" + lodash.get "^4.4.2" + lodash.set "^4.3.2" + lodash.uniq "^4.5.0" + octokit-pagination-methods "^1.1.0" universal-user-agent "^2.0.0" url-template "^2.0.8" -"@sinonjs/commons@^1.2.0": +"@sinonjs/commons@^1.0.2", "@sinonjs/commons@^1.3.0": version "1.3.0" resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.3.0.tgz#50a2754016b6f30a994ceda6d9a0a8c36adda849" dependencies: type-detect "4.0.8" -"@sinonjs/formatio@3.0.0", "@sinonjs/formatio@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@sinonjs/formatio/-/formatio-3.0.0.tgz#9d282d81030a03a03fa0c5ce31fd8786a4da311a" - dependencies: - "@sinonjs/samsam" "2.1.0" - -"@sinonjs/formatio@^2.0.0": - version "2.0.0" - resolved "http://registry.npmjs.org/@sinonjs/formatio/-/formatio-2.0.0.tgz#84db7e9eb5531df18a8c5e0bfb6e449e55e654b2" +"@sinonjs/formatio@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@sinonjs/formatio/-/formatio-3.1.0.tgz#6ac9d1eb1821984d84c4996726e45d1646d8cce5" + integrity sha512-ZAR2bPHOl4Xg6eklUGpsdiIJ4+J1SNag1DHHrG/73Uz/nVwXqjgUtRPLoS+aVyieN9cSbc0E4LsU984tWcDyNg== dependencies: - samsam "1.3.0" + "@sinonjs/samsam" "^2 || ^3" -"@sinonjs/samsam@2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@sinonjs/samsam/-/samsam-2.1.0.tgz#b8b8f5b819605bd63601a6ede459156880f38ea3" +"@sinonjs/samsam@^2 || ^3", "@sinonjs/samsam@^3.0.2": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@sinonjs/samsam/-/samsam-3.1.1.tgz#8e2eceb2353f6626e2867352e3def951d3366240" + integrity sha512-ILlwvQUwAiaVBzr3qz8oT1moM7AIUHqUc2UmEjQcH9lLe+E+BZPwUMuc9FFojMswRK4r96x5zDTTrowMLw/vuA== dependencies: + "@sinonjs/commons" "^1.0.2" array-from "^2.1.1" - -"@sinonjs/samsam@^2.1.2": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@sinonjs/samsam/-/samsam-2.1.2.tgz#16947fce5f57258d01f1688fdc32723093c55d3f" + lodash "^4.17.11" "@types/caseless@*": version "0.12.1" @@ -659,10 +902,12 @@ "@types/chai@^4.1.3": version "4.1.7" resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.1.7.tgz#1b8e33b61a8c09cbe1f85133071baa0dbf9fa71a" + integrity sha512-2Y8uPt0/jwjhQ6EiluT0XCri1Dbplr0ZxfFXUz+ye13gaqE8u5gL5ppao1JrUYr9cIip5S6MvQzBS7Kke7U9VA== -"@types/cookie@0.3.1": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.3.1.tgz#720a756ea8e760a258708b52441bd341f1ef4296" +"@types/cookie@0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.3.2.tgz#453f4b14b25da6a8ea4494842dedcbf0151deef9" + integrity sha512-aHQA072E10/8iUQsPH7mQU/KUyQBZAGzTVRCUvnSz8mSvbrYsP4xEO2RSA0Pjltolzi0j8+8ixrm//Hr4umPzw== "@types/duplexify@^3.5.0": version "3.6.0" @@ -670,13 +915,15 @@ dependencies: "@types/node" "*" -"@types/estree@0.0.38": - version "0.0.38" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.38.tgz#c1be40aa933723c608820a99a373a16d215a1ca2" +"@types/estree@0.0.39": + version "0.0.39" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" + integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== "@types/events@*": - version "1.2.0" - resolved "http://registry.npmjs.org/@types/events/-/events-1.2.0.tgz#81a6731ce4df43619e5c8c945383b3e62a89ea86" + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" + integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g== "@types/form-data@*": version "2.2.1" @@ -685,34 +932,47 @@ "@types/node" "*" "@types/fs-extra@^5.0.3": - version "5.0.4" - resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-5.0.4.tgz#b971134d162cc0497d221adde3dbb67502225599" + version "5.0.5" + resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-5.0.5.tgz#080d90a792f3fa2c5559eb44bd8ef840aae9104b" + integrity sha512-w7iqhDH9mN8eLClQOYTkhdYUOSpp25eXxfc6VbFOGtzxW34JcvctH2bKjj4jD4++z4R5iO5D+pg48W2e03I65A== dependencies: "@types/node" "*" "@types/glob@*": version "7.1.1" resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575" + integrity sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w== dependencies: "@types/events" "*" "@types/minimatch" "*" "@types/node" "*" "@types/handlebars@^4.0.38": - version "4.0.39" - resolved "https://registry.yarnpkg.com/@types/handlebars/-/handlebars-4.0.39.tgz#961fb54db68030890942e6aeffe9f93a957807bd" + version "4.0.40" + resolved "https://registry.yarnpkg.com/@types/handlebars/-/handlebars-4.0.40.tgz#b714e13d296a75bff3f199316d1311933ca79ffd" + integrity sha512-sGWNtsjNrLOdKha2RV1UeF8+UbQnPSG7qbe5wwbni0mw4h2gHXyPFUMOC+xwGirIiiydM/HSqjDO4rk6NFB18w== "@types/highlight.js@^9.12.3": version "9.12.3" resolved "https://registry.yarnpkg.com/@types/highlight.js/-/highlight.js-9.12.3.tgz#b672cfaac25cbbc634a0fd92c515f66faa18dbca" + integrity sha512-pGF/zvYOACZ/gLGWdQH8zSwteQS1epp68yRcVLJMgUck/MjEn/FBYmPub9pXT8C1e4a8YZfHo1CKyV8q1vKUnQ== -"@types/jest@^23.3.9": - version "23.3.9" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-23.3.9.tgz#c16b55186ee73ae65e001fbee69d392c51337ad1" +"@types/jest-diff@*": + version "20.0.1" + resolved "https://registry.yarnpkg.com/@types/jest-diff/-/jest-diff-20.0.1.tgz#35cc15b9c4f30a18ef21852e255fdb02f6d59b89" + integrity sha512-yALhelO3i0hqZwhjtcr6dYyaLoCHbAMshwtj6cGxTvHZAKXHsYGdff6E8EPw3xLKY0ELUTQ69Q1rQiJENnccMA== + +"@types/jest@^24.0.6": + version "24.0.6" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-24.0.6.tgz#ba4c8c7900ce098a82ca99293cbe4192bde4f355" + integrity sha512-NE7FBG/F4cMDKdCBqgyd+Sa6JZ5GiMOyA5QwJdeS4Ii/Z9a18WgGbFrHbcr48/7I9HdnkaAYP+S2MmQ27qoqJA== + dependencies: + "@types/jest-diff" "*" "@types/lodash@^4.14.110": - version "4.14.118" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.118.tgz#247bab39bfcc6d910d4927c6e06cbc70ec376f27" + version "4.14.121" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.121.tgz#9327e20d49b95fc2bf983fc2f045b2c6effc80b9" + integrity sha512-ORj7IBWj13iYufXt/VXrCNMbUuCTJfhzme5kx9U/UtcIPdJYuvPDUAlHlbNhz/8lKCLy9XGIZnGrqXOtQbPGoQ== "@types/lru-cache@^4.1.1": version "4.1.1" @@ -721,30 +981,35 @@ "@types/marked@^0.4.0": version "0.4.2" resolved "https://registry.yarnpkg.com/@types/marked/-/marked-0.4.2.tgz#64a89e53ea37f61cc0f3ee1732c555c2dbf6452f" + integrity sha512-cDB930/7MbzaGF6U3IwSQp6XBru8xWajF5PV2YZZeV8DyiliTuld11afVztGI9+yJZ29il5E+NpGA6ooV/Cjkg== -"@types/md5@2.1.32": - version "2.1.32" - resolved "https://registry.yarnpkg.com/@types/md5/-/md5-2.1.32.tgz#93e23437fcd17a7b9ca98d02aa6002e835842fe8" +"@types/md5@2.1.33": + version "2.1.33" + resolved "https://registry.yarnpkg.com/@types/md5/-/md5-2.1.33.tgz#8c8dba30df4ad0e92296424f08c4898dd808e8df" + integrity sha512-8+X960EtKLoSblhauxLKy3zzotagjoj3Jt1Tx9oaxUdZEPIBl+mkrUz6PNKpzJgkrKSN9YgkWTA29c0KnLshmA== dependencies: "@types/node" "*" "@types/minimatch@*", "@types/minimatch@3.0.3": version "3.0.3" resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" + integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== "@types/mocha@^5.2.0": - version "5.2.5" - resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-5.2.5.tgz#8a4accfc403c124a0bafe8a9fc61a05ec1032073" + version "5.2.6" + resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-5.2.6.tgz#b8622d50557dd155e9f2f634b7d68fd38de5e94b" + integrity sha512-1axi39YdtBI7z957vdqXI4Ac25e7YihYQtJa+Clnxg1zTJEaIRbndt71O3sP4GAMgiAm0pY26/b9BrY4MR/PMw== -"@types/node@*", "@types/node@^10.0.2", "@types/node@^10.12.10": - version "10.12.10" - resolved "https://registry.yarnpkg.com/@types/node/-/node-10.12.10.tgz#4fa76e6598b7de3f0cb6ec3abacc4f59e5b3a2ce" +"@types/node@*", "@types/node@^11.9.4": + version "11.9.4" + resolved "https://registry.yarnpkg.com/@types/node/-/node-11.9.4.tgz#ceb0048a546db453f6248f2d1d95e937a6f00a14" + integrity sha512-Zl8dGvAcEmadgs1tmSPcvwzO1YRsz38bVJQvH1RvRqSR9/5n61Q1ktcDL0ht3FXWR+ZpVmXVwN1LuH4Ax23NsA== "@types/raven@^2.5.1": - version "2.5.1" - resolved "https://registry.yarnpkg.com/@types/raven/-/raven-2.5.1.tgz#62ef0a59e29691945e1f295b62ed199619cbd9b6" + version "2.5.3" + resolved "https://registry.yarnpkg.com/@types/raven/-/raven-2.5.3.tgz#bd4bed667dd9cfda39452f8ed64a87f45233bc3a" + integrity sha512-k6vxiX5I6/GEqJS9mMYPVIgMJf/X26n09NfzuqBpdcEp684RIwpdrwCgSyJGuy8EaSG1wc2rFP7xVEAixPzw7Q== dependencies: - "@types/events" "*" "@types/node" "*" "@types/request@^2.47.0": @@ -757,15 +1022,17 @@ "@types/tough-cookie" "*" "@types/shelljs@^0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@types/shelljs/-/shelljs-0.8.0.tgz#0caa56b68baae4f68f44e0dd666ab30b098e3632" + version "0.8.3" + resolved "https://registry.yarnpkg.com/@types/shelljs/-/shelljs-0.8.3.tgz#f713f312dbae49ab5025290007e71ea32998e9a9" + integrity sha512-miY41hqc5SkRlsZDod3heDa4OS9xv8G77EMBQuSpqq86HBn66l7F+f8y9YKm+1PIuwC8QEZVwN8YxOOG7Y67fA== dependencies: "@types/glob" "*" "@types/node" "*" -"@types/sinon@^5.0.7": - version "5.0.7" - resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-5.0.7.tgz#0d9f89dd0c9988c4f1505a92a3a324ee7bdb18a6" +"@types/sinon@^7.0.6": + version "7.0.6" + resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-7.0.6.tgz#dbe6c059dd4e2fd2b8e8fc3ed051d4706c84c63e" + integrity sha512-ldQl2p7kyCXHhr//5sQCu9jWgSiDbYuCD5dUp53r/z8T8jmgKpANpy4vqjbdho9P2ldFaQC/gpW31hch+oQ0IQ== "@types/stack-trace@0.0.29": version "0.0.29" @@ -775,142 +1042,165 @@ version "2.3.4" resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-2.3.4.tgz#821878b81bfab971b93a265a561d54ea61f9059f" -"@webassemblyjs/ast@1.7.11": - version "1.7.11" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.7.11.tgz#b988582cafbb2b095e8b556526f30c90d057cace" - dependencies: - "@webassemblyjs/helper-module-context" "1.7.11" - "@webassemblyjs/helper-wasm-bytecode" "1.7.11" - "@webassemblyjs/wast-parser" "1.7.11" - -"@webassemblyjs/floating-point-hex-parser@1.7.11": - version "1.7.11" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.11.tgz#a69f0af6502eb9a3c045555b1a6129d3d3f2e313" - -"@webassemblyjs/helper-api-error@1.7.11": - version "1.7.11" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.11.tgz#c7b6bb8105f84039511a2b39ce494f193818a32a" - -"@webassemblyjs/helper-buffer@1.7.11": - version "1.7.11" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.11.tgz#3122d48dcc6c9456ed982debe16c8f37101df39b" - -"@webassemblyjs/helper-code-frame@1.7.11": - version "1.7.11" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.11.tgz#cf8f106e746662a0da29bdef635fcd3d1248364b" - dependencies: - "@webassemblyjs/wast-printer" "1.7.11" - -"@webassemblyjs/helper-fsm@1.7.11": - version "1.7.11" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.11.tgz#df38882a624080d03f7503f93e3f17ac5ac01181" - -"@webassemblyjs/helper-module-context@1.7.11": - version "1.7.11" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.7.11.tgz#d874d722e51e62ac202476935d649c802fa0e209" - -"@webassemblyjs/helper-wasm-bytecode@1.7.11": - version "1.7.11" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.11.tgz#dd9a1e817f1c2eb105b4cf1013093cb9f3c9cb06" - -"@webassemblyjs/helper-wasm-section@1.7.11": - version "1.7.11" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.11.tgz#9c9ac41ecf9fbcfffc96f6d2675e2de33811e68a" - dependencies: - "@webassemblyjs/ast" "1.7.11" - "@webassemblyjs/helper-buffer" "1.7.11" - "@webassemblyjs/helper-wasm-bytecode" "1.7.11" - "@webassemblyjs/wasm-gen" "1.7.11" - -"@webassemblyjs/ieee754@1.7.11": - version "1.7.11" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.7.11.tgz#c95839eb63757a31880aaec7b6512d4191ac640b" +"@webassemblyjs/ast@1.8.3": + version "1.8.3" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.8.3.tgz#63a741bd715a6b6783f2ea5c6ab707516aa215eb" + integrity sha512-xy3m06+Iu4D32+6soz6zLnwznigXJRuFNTovBX2M4GqVqLb0dnyWLbPnpcXvUSdEN+9DVyDeaq2jyH1eIL2LZQ== + dependencies: + "@webassemblyjs/helper-module-context" "1.8.3" + "@webassemblyjs/helper-wasm-bytecode" "1.8.3" + "@webassemblyjs/wast-parser" "1.8.3" + +"@webassemblyjs/floating-point-hex-parser@1.8.3": + version "1.8.3" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.3.tgz#f198a2d203b3c50846a064f5addd6a133ef9bc0e" + integrity sha512-vq1TISG4sts4f0lDwMUM0f3kpe0on+G3YyV5P0IySHFeaLKRYZ++n2fCFfG4TcCMYkqFeTUYFxm75L3ddlk2xA== + +"@webassemblyjs/helper-api-error@1.8.3": + version "1.8.3" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.3.tgz#3b708f6926accd64dcbaa7ba5b63db5660ff4f66" + integrity sha512-BmWEynI4FnZbjk8CaYZXwcv9a6gIiu+rllRRouQUo73hglanXD3AGFJE7Q4JZCoVE0p5/jeX6kf5eKa3D4JxwQ== + +"@webassemblyjs/helper-buffer@1.8.3": + version "1.8.3" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.3.tgz#f3150a23ffaba68621e1f094c8a14bebfd53dd48" + integrity sha512-iVIMhWnNHoFB94+/2l7LpswfCsXeMRnWfExKtqsZ/E2NxZyUx9nTeKK/MEMKTQNEpyfznIUX06OchBHQ+VKi/Q== + +"@webassemblyjs/helper-code-frame@1.8.3": + version "1.8.3" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.3.tgz#f43ac605789b519d95784ef350fd2968aebdd3ef" + integrity sha512-K1UxoJML7GKr1QXR+BG7eXqQkvu+eEeTjlSl5wUFQ6W6vaOc5OwSxTcb3oE9x/3+w4NHhrIKD4JXXCZmLdL2cg== + dependencies: + "@webassemblyjs/wast-printer" "1.8.3" + +"@webassemblyjs/helper-fsm@1.8.3": + version "1.8.3" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.3.tgz#46aaa03f41082a916850ebcb97e9fc198ef36a9c" + integrity sha512-387zipfrGyO77/qm7/SDUiZBjQ5KGk4qkrVIyuoubmRNIiqn3g+6ijY8BhnlGqsCCQX5bYKOnttJobT5xoyviA== + +"@webassemblyjs/helper-module-context@1.8.3": + version "1.8.3" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.3.tgz#150da405d90c8ea81ae0b0e1965b7b64e585634f" + integrity sha512-lPLFdQfaRssfnGEJit5Sk785kbBPPPK4ZS6rR5W/8hlUO/5v3F+rN8XuUcMj/Ny9iZiyKhhuinWGTUuYL4VKeQ== + dependencies: + "@webassemblyjs/ast" "1.8.3" + mamacro "^0.0.3" + +"@webassemblyjs/helper-wasm-bytecode@1.8.3": + version "1.8.3" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.3.tgz#12f55bbafbbc7ddf9d8059a072cb7b0c17987901" + integrity sha512-R1nJW7bjyJLjsJQR5t3K/9LJ0QWuZezl8fGa49DZq4IVaejgvkbNlKEQxLYTC579zgT4IIIVHb5JA59uBPHXyw== + +"@webassemblyjs/helper-wasm-section@1.8.3": + version "1.8.3" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.3.tgz#9e79456d9719e116f4f8998ee62ab54ba69a6cf3" + integrity sha512-P6F7D61SJY73Yz+fs49Q3+OzlYAZP86OfSpaSY448KzUy65NdfzDmo2NPVte+Rw4562MxEAacvq/mnDuvRWOcg== + dependencies: + "@webassemblyjs/ast" "1.8.3" + "@webassemblyjs/helper-buffer" "1.8.3" + "@webassemblyjs/helper-wasm-bytecode" "1.8.3" + "@webassemblyjs/wasm-gen" "1.8.3" + +"@webassemblyjs/ieee754@1.8.3": + version "1.8.3" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.8.3.tgz#0a89355b1f6c9d08d0605c2acbc2a6fe3141f5b4" + integrity sha512-UD4HuLU99hjIvWz1pD68b52qsepWQlYCxDYVFJQfHh3BHyeAyAlBJ+QzLR1nnS5J6hAzjki3I3AoJeobNNSZlg== dependencies: "@xtuc/ieee754" "^1.2.0" -"@webassemblyjs/leb128@1.7.11": - version "1.7.11" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.7.11.tgz#d7267a1ee9c4594fd3f7e37298818ec65687db63" - dependencies: - "@xtuc/long" "4.2.1" - -"@webassemblyjs/utf8@1.7.11": - version "1.7.11" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.7.11.tgz#06d7218ea9fdc94a6793aa92208160db3d26ee82" - -"@webassemblyjs/wasm-edit@1.7.11": - version "1.7.11" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.11.tgz#8c74ca474d4f951d01dbae9bd70814ee22a82005" - dependencies: - "@webassemblyjs/ast" "1.7.11" - "@webassemblyjs/helper-buffer" "1.7.11" - "@webassemblyjs/helper-wasm-bytecode" "1.7.11" - "@webassemblyjs/helper-wasm-section" "1.7.11" - "@webassemblyjs/wasm-gen" "1.7.11" - "@webassemblyjs/wasm-opt" "1.7.11" - "@webassemblyjs/wasm-parser" "1.7.11" - "@webassemblyjs/wast-printer" "1.7.11" - -"@webassemblyjs/wasm-gen@1.7.11": - version "1.7.11" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.11.tgz#9bbba942f22375686a6fb759afcd7ac9c45da1a8" - dependencies: - "@webassemblyjs/ast" "1.7.11" - "@webassemblyjs/helper-wasm-bytecode" "1.7.11" - "@webassemblyjs/ieee754" "1.7.11" - "@webassemblyjs/leb128" "1.7.11" - "@webassemblyjs/utf8" "1.7.11" - -"@webassemblyjs/wasm-opt@1.7.11": - version "1.7.11" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.11.tgz#b331e8e7cef8f8e2f007d42c3a36a0580a7d6ca7" - dependencies: - "@webassemblyjs/ast" "1.7.11" - "@webassemblyjs/helper-buffer" "1.7.11" - "@webassemblyjs/wasm-gen" "1.7.11" - "@webassemblyjs/wasm-parser" "1.7.11" - -"@webassemblyjs/wasm-parser@1.7.11": - version "1.7.11" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.11.tgz#6e3d20fa6a3519f6b084ef9391ad58211efb0a1a" - dependencies: - "@webassemblyjs/ast" "1.7.11" - "@webassemblyjs/helper-api-error" "1.7.11" - "@webassemblyjs/helper-wasm-bytecode" "1.7.11" - "@webassemblyjs/ieee754" "1.7.11" - "@webassemblyjs/leb128" "1.7.11" - "@webassemblyjs/utf8" "1.7.11" - -"@webassemblyjs/wast-parser@1.7.11": - version "1.7.11" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.7.11.tgz#25bd117562ca8c002720ff8116ef9072d9ca869c" - dependencies: - "@webassemblyjs/ast" "1.7.11" - "@webassemblyjs/floating-point-hex-parser" "1.7.11" - "@webassemblyjs/helper-api-error" "1.7.11" - "@webassemblyjs/helper-code-frame" "1.7.11" - "@webassemblyjs/helper-fsm" "1.7.11" - "@xtuc/long" "4.2.1" - -"@webassemblyjs/wast-printer@1.7.11": - version "1.7.11" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.7.11.tgz#c4245b6de242cb50a2cc950174fdbf65c78d7813" - dependencies: - "@webassemblyjs/ast" "1.7.11" - "@webassemblyjs/wast-parser" "1.7.11" - "@xtuc/long" "4.2.1" +"@webassemblyjs/leb128@1.8.3": + version "1.8.3" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.8.3.tgz#b7fd9d7c039e34e375c4473bd4dc89ce8228b920" + integrity sha512-XXd3s1BmkC1gpGABuCRLqCGOD6D2L+Ma2BpwpjrQEHeQATKWAQtxAyU9Z14/z8Ryx6IG+L4/NDkIGHrccEhRUg== + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.8.3": + version "1.8.3" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.8.3.tgz#75712db52cfdda868731569ddfe11046f1f1e7a2" + integrity sha512-Wv/WH9Zo5h5ZMyfCNpUrjFsLZ3X1amdfEuwdb7MLdG3cPAjRS6yc6ElULlpjLiiBTuzvmLhr3ENsuGyJ3wyCgg== + +"@webassemblyjs/wasm-edit@1.8.3": + version "1.8.3" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.3.tgz#23c3c6206b096f9f6aa49623a5310a102ef0fb87" + integrity sha512-nB19eUx3Yhi1Vvv3yev5r+bqQixZprMtaoCs1brg9Efyl8Hto3tGaUoZ0Yb4Umn/gQCyoEGFfUxPLp1/8+Jvnw== + dependencies: + "@webassemblyjs/ast" "1.8.3" + "@webassemblyjs/helper-buffer" "1.8.3" + "@webassemblyjs/helper-wasm-bytecode" "1.8.3" + "@webassemblyjs/helper-wasm-section" "1.8.3" + "@webassemblyjs/wasm-gen" "1.8.3" + "@webassemblyjs/wasm-opt" "1.8.3" + "@webassemblyjs/wasm-parser" "1.8.3" + "@webassemblyjs/wast-printer" "1.8.3" + +"@webassemblyjs/wasm-gen@1.8.3": + version "1.8.3" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.3.tgz#1a433b8ab97e074e6ac2e25fcbc8cb6125400813" + integrity sha512-sDNmu2nLBJZ/huSzlJvd9IK8B1EjCsOl7VeMV9VJPmxKYgTJ47lbkSP+KAXMgZWGcArxmcrznqm7FrAPQ7vVGg== + dependencies: + "@webassemblyjs/ast" "1.8.3" + "@webassemblyjs/helper-wasm-bytecode" "1.8.3" + "@webassemblyjs/ieee754" "1.8.3" + "@webassemblyjs/leb128" "1.8.3" + "@webassemblyjs/utf8" "1.8.3" + +"@webassemblyjs/wasm-opt@1.8.3": + version "1.8.3" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.3.tgz#54754bcf88f88e92b909416a91125301cc81419c" + integrity sha512-j8lmQVFR+FR4/645VNgV4R/Jz8i50eaPAj93GZyd3EIJondVshE/D9pivpSDIXyaZt+IkCodlzOoZUE4LnQbeA== + dependencies: + "@webassemblyjs/ast" "1.8.3" + "@webassemblyjs/helper-buffer" "1.8.3" + "@webassemblyjs/wasm-gen" "1.8.3" + "@webassemblyjs/wasm-parser" "1.8.3" + +"@webassemblyjs/wasm-parser@1.8.3": + version "1.8.3" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.3.tgz#d12ed19d1b8e8667a7bee040d2245aaaf215340b" + integrity sha512-NBI3SNNtRoy4T/KBsRZCAWUzE9lI94RH2nneLwa1KKIrt/2zzcTavWg6oY05ArCbb/PZDk3OUi63CD1RYtN65w== + dependencies: + "@webassemblyjs/ast" "1.8.3" + "@webassemblyjs/helper-api-error" "1.8.3" + "@webassemblyjs/helper-wasm-bytecode" "1.8.3" + "@webassemblyjs/ieee754" "1.8.3" + "@webassemblyjs/leb128" "1.8.3" + "@webassemblyjs/utf8" "1.8.3" + +"@webassemblyjs/wast-parser@1.8.3": + version "1.8.3" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.8.3.tgz#44aa123e145503e995045dc3e5e2770069da117b" + integrity sha512-gZPst4CNcmGtKC1eYQmgCx6gwQvxk4h/nPjfPBbRoD+Raw3Hs+BS3yhrfgyRKtlYP+BJ8LcY9iFODEQofl2qbg== + dependencies: + "@webassemblyjs/ast" "1.8.3" + "@webassemblyjs/floating-point-hex-parser" "1.8.3" + "@webassemblyjs/helper-api-error" "1.8.3" + "@webassemblyjs/helper-code-frame" "1.8.3" + "@webassemblyjs/helper-fsm" "1.8.3" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/wast-printer@1.8.3": + version "1.8.3" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.8.3.tgz#b1177780b266b1305f2eeba87c4d6aa732352060" + integrity sha512-DTA6kpXuHK4PHu16yAD9QVuT1WZQRT7079oIFFmFSjqjLWGXS909I/7kiLTn931mcj7wGsaUNungjwNQ2lGQ3Q== + dependencies: + "@webassemblyjs/ast" "1.8.3" + "@webassemblyjs/wast-parser" "1.8.3" + "@xtuc/long" "4.2.2" "@xtuc/ieee754@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" -"@xtuc/long@4.2.1": - version "4.2.1" - resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.1.tgz#5c85d662f76fa1d34575766c5dcd6615abcd30d8" +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== JSONStream@^1.0.4, JSONStream@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" + integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== dependencies: jsonparse "^1.2.0" through ">=2.2.7 <3" @@ -918,15 +1208,24 @@ JSONStream@^1.0.4, JSONStream@^1.3.4: abab@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.0.tgz#aba0ab4c5eee2d4c79d3487d85450fb2376ebb0f" + integrity sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w== abbrev@1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== abbrev@1.0.x: version "1.0.9" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" +abort-controller@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-2.0.2.tgz#f0c059173ac7fdc4dba73e3833102def407a6a29" + integrity sha512-JXEYGxxMwiNl9EUdLysK0K0DwB7ENw6KeeaLHgofijTfJYPB/vOer3Mb+IcP913dCfWiQsd05MmVNl0H5PanrQ== + dependencies: + event-target-shim "^5.0.0" + accepts@~1.3.4, accepts@~1.3.5: version "1.3.5" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2" @@ -934,42 +1233,36 @@ accepts@~1.3.4, accepts@~1.3.5: mime-types "~2.1.18" negotiator "0.6.1" -acorn-dynamic-import@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz#901ceee4c7faaef7e07ad2a47e890675da50a278" - dependencies: - acorn "^5.0.0" +acorn-dynamic-import@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz#482210140582a36b83c3e342e1cfebcaa9240948" + integrity sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw== -acorn-globals@^4.1.0: +acorn-globals@^4.1.0, acorn-globals@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.0.tgz#e3b6f8da3c1552a95ae627571f7dd6923bb54103" dependencies: acorn "^6.0.1" acorn-walk "^6.0.1" -acorn-walk@^6.0.1: +acorn-walk@^6.0.1, acorn-walk@^6.1.1: version "6.1.1" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.1.1.tgz#d363b66f5fac5f018ff9c3a1e7b6f8e310cc3913" -acorn@^4.0.4: - version "4.0.13" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" - -acorn@^5.0.0, acorn@^5.4.1, acorn@^5.5.3, acorn@^5.6.2: +acorn@^5.5.3: version "5.7.3" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" + integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== -acorn@^6.0.1: - version "6.0.4" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.0.4.tgz#77377e7353b72ec5104550aa2d2097a2fd40b754" +acorn@^6.0.1, acorn@^6.0.4, acorn@^6.0.5, acorn@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.1.0.tgz#b0a3be31752c97a0f7013c5f4903b71a05db6818" + integrity sha512-MW/FjM+IvU9CgBzjO3UIPCE2pyEwUsoFl+VGdczOPEdxfGFjuKny/gN54mOuX7Qxmb9Rg9MCn2oKiSUeW+pjrw== address@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/address/-/address-1.0.3.tgz#b5f50631f8d6cec8bd20c963963afb55e06cbce9" - -addressparser@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/addressparser/-/addressparser-1.0.1.tgz#47afbe1a2a9262191db6838e4fd1d39b40821746" + integrity sha512-z55ocwKBRLryBs394Sm3ushTtBeg6VAeuku7utSoSnsJKvKcnXFIyC6vh27n3rXyxSgkJBBCAvyOn7gSUcTYjg== adm-zip@~0.4.3: version "0.4.13" @@ -979,15 +1272,17 @@ after@0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" -agent-base@4, agent-base@^4.1.0, agent-base@^4.2.0, agent-base@~4.2.0: +agent-base@4, agent-base@^4.1.0, agent-base@~4.2.0: version "4.2.1" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" + integrity sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg== dependencies: es6-promisify "^5.0.0" agentkeepalive@^3.4.1: version "3.5.2" resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-3.5.2.tgz#a113924dd3fa24a0bc3b78108c450c2abee00f67" + integrity sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ== dependencies: humanize-ms "^1.2.1" @@ -999,7 +1294,7 @@ ajv-keywords@^3.1.0: version "3.2.0" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.2.0.tgz#e86b819c602cf8821ad637413698f1dec021847a" -ajv@^6.1.0, ajv@^6.5.5: +ajv@^6.1.0: version "6.5.5" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.5.5.tgz#cf97cdade71c6399a92c6d6c4177381291b781a1" dependencies: @@ -1008,57 +1303,62 @@ ajv@^6.1.0, ajv@^6.5.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +ajv@^6.5.5: + version "6.9.1" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.9.1.tgz#a4d3683d74abc5670e75f0b16520f70a20ea8dc1" + integrity sha512-XDN92U311aINL77ieWHmqCcNlwjoP5cHXDxIxbf2MaPYuCXOHS7gHH8jktxeK5omgd52XbSTX6a4Piwd1pQmzA== + dependencies: + fast-deep-equal "^2.0.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + align-text@^0.1.1, align-text@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" + integrity sha1-DNkKVhCT810KmSVsIrcGlDP60Rc= dependencies: kind-of "^3.0.2" longest "^1.0.1" repeat-string "^1.5.2" -amdefine@>=0.0.4, amdefine@^1.0.0: +amdefine@>=0.0.4: version "1.0.1" resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" -amqplib@^0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/amqplib/-/amqplib-0.5.2.tgz#d2d7313c7ffaa4d10bcf1e6252de4591b6cc7b63" - dependencies: - bitsyntax "~0.0.4" - bluebird "^3.4.6" - buffer-more-ints "0.0.2" - readable-stream "1.x >=1.1.9" - safe-buffer "^5.0.1" - ansi-align@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" + integrity sha1-w2rsy6VjuJzrVW82kPCx2eNUf38= dependencies: string-width "^2.0.0" -ansi-cyan@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/ansi-cyan/-/ansi-cyan-0.1.1.tgz#538ae528af8982f28ae30d86f2f17456d2609873" +ansi-colors@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-1.1.0.tgz#6374b4dd5d4718ff3ce27a671a3b1cad077132a9" + integrity sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA== dependencies: - ansi-wrap "0.1.0" - -ansi-escapes@^3.0.0: - version "3.1.0" - resolved "http://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz#f73207bb81207d75fd6c83f125af26eea378ca30" + ansi-wrap "^0.1.0" -ansi-red@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/ansi-red/-/ansi-red-0.1.1.tgz#8c638f9d1080800a353c9c28c8a81ca4705d946c" - dependencies: - ansi-wrap "0.1.0" +ansi-escapes@^3.0.0, ansi-escapes@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" + integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= ansi-regex@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + +ansi-regex@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.0.0.tgz#70de791edf021404c3fd615aa89118ae0432e5a9" + integrity sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w== ansi-styles@^2.2.1: version "2.2.1" @@ -1067,61 +1367,44 @@ ansi-styles@^2.2.1: ansi-styles@^3.2.0, 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" -ansi-wrap@0.1.0: +ansi-wrap@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf" + integrity sha1-qCJQ3bABXponyoLoLqYDu/pF768= anymatch@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== dependencies: micromatch "^3.1.4" normalize-path "^2.1.1" -append-transform@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991" +append-transform@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-1.0.0.tgz#046a52ae582a228bd72f58acfbe2967c678759ab" + integrity sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw== dependencies: - default-require-extensions "^1.0.0" + default-require-extensions "^2.0.0" aproba@^1.0.3, aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== aproba@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" - -archiver-utils@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/archiver-utils/-/archiver-utils-1.3.0.tgz#e50b4c09c70bf3d680e32ff1b7994e9f9d895174" - dependencies: - glob "^7.0.0" - graceful-fs "^4.1.0" - lazystream "^1.0.0" - lodash "^4.8.0" - normalize-path "^2.0.0" - readable-stream "^2.0.0" - -archiver@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/archiver/-/archiver-2.1.1.tgz#ff662b4a78201494a3ee544d3a33fe7496509ebc" - dependencies: - archiver-utils "^1.3.0" - async "^2.0.0" - buffer-crc32 "^0.2.1" - glob "^7.0.0" - lodash "^4.8.0" - readable-stream "^2.0.0" - tar-stream "^1.5.0" - zip-stream "^1.2.0" + integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== 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" @@ -1129,12 +1412,14 @@ are-we-there-yet@~1.1.2: argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== dependencies: sprintf-js "~1.0.2" args@2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/args/-/args-2.6.1.tgz#b2590ed4168cd31b62444199bdc5166bb1920c2f" + integrity sha1-slkO1BaM0xtiREGZvcUWa7GSDC8= dependencies: camelcase "4.1.0" chalk "1.1.3" @@ -1145,6 +1430,7 @@ args@2.6.1: args@3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/args/-/args-3.0.2.tgz#850bb8e881f3139203a5e4cb176431092b562c2d" + integrity sha1-hQu46IHzE5IDpeTLF2QxCStWLC0= dependencies: camelcase "4.1.0" chalk "1.1.3" @@ -1156,13 +1442,6 @@ argv@^0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/argv/-/argv-0.0.2.tgz#ecbd16f8949b157183711b1bda334f37840185ab" -arr-diff@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-1.1.0.tgz#687c32758163588fef7de7b36fabe495eb1a399a" - dependencies: - arr-flatten "^1.0.1" - array-slice "^0.2.3" - arr-diff@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" @@ -1172,26 +1451,26 @@ arr-diff@^2.0.0: arr-diff@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= arr-flatten@^1.0.1, arr-flatten@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" -arr-union@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-2.1.0.tgz#20f9eab5ec70f5c7d215b1077b1c39161d292c7d" - arr-union@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= array-differ@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031" + integrity sha1-7/UuN1gknTO+QCuLuOVkuytdQDE= array-equal@^1.0.0: version "1.0.0" - resolved "http://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" + resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" + integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM= array-filter@~0.0.0: version "0.0.1" @@ -1200,6 +1479,7 @@ array-filter@~0.0.0: array-find-index@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" + integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= array-flatten@1.1.1: version "1.1.1" @@ -1212,6 +1492,7 @@ array-from@^2.1.1: array-ify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" + integrity sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4= array-map@~0.0.0: version "0.0.0" @@ -1228,12 +1509,14 @@ array-slice@^0.2.3: array-union@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= dependencies: array-uniq "^1.0.1" array-uniq@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= array-unique@^0.2.1: version "0.2.1" @@ -1242,6 +1525,7 @@ array-unique@^0.2.1: array-unique@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= arraybuffer.slice@~0.0.7: version "0.0.7" @@ -1250,10 +1534,12 @@ arraybuffer.slice@~0.0.7: arrify@^1.0.0, arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= asap@^2.0.0: version "2.0.6" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= asn1.js@^4.0.0: version "4.10.1" @@ -1266,16 +1552,14 @@ asn1.js@^4.0.0: asn1@~0.2.3: version "0.2.4" resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" + integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== dependencies: safer-buffer "~2.1.0" assert-plus@1.0.0, assert-plus@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - -assert-plus@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" + integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= assert@^1.1.1, assert@^1.4.1: version "1.4.1" @@ -1290,78 +1574,67 @@ assertion-error@^1.1.0: assign-symbols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - -ast-types@0.x.x: - version "0.11.7" - resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.11.7.tgz#f318bf44e339db6a320be0009ded64ec1471f46c" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= astral-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" + integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== -async-each@^1.0.0: +async-each@^1.0.0, async-each@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" async-limiter@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" + integrity sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg== async-to-gen@1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/async-to-gen/-/async-to-gen-1.3.3.tgz#d52c9fb4801f0df44abc4d2de1870b48b60e20bb" + integrity sha1-1SyftIAfDfRKvE0t4YcLSLYOILs= dependencies: babylon "^6.14.0" magic-string "^0.19.0" async@1.x, async@^1.4.0: version "1.5.2" - resolved "http://registry.npmjs.org/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" - -async@2.0.1: - version "2.0.1" - resolved "http://registry.npmjs.org/async/-/async-2.0.1.tgz#b709cc0280a9c36f09f4536be823c838a9049e25" - dependencies: - lodash "^4.8.0" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= -async@^2.0.0, async@^2.0.1, async@^2.1.2, async@^2.1.4, async@^2.5.0, async@~2.6.0: +async@^2.0.1, async@^2.1.2: version "2.6.1" resolved "https://registry.yarnpkg.com/async/-/async-2.6.1.tgz#b245a23ca71930044ec53fa46aa00a3e87c6a610" dependencies: lodash "^4.17.10" +async@^2.5.0, async@^2.6.1: + version "2.6.2" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.2.tgz#18330ea7e6e313887f5d2f2a904bac6fe4dd5381" + integrity sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg== + dependencies: + lodash "^4.17.11" + asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= atob@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - -aws-sign2@~0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= -aws4@^1.2.1, aws4@^1.8.0: +aws4@^1.8.0: version "1.8.0" resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" - -axios@^0.15.3: - version "0.15.3" - resolved "http://registry.npmjs.org/axios/-/axios-0.15.3.tgz#2c9d638b2e191a08ea1d6cc988eadd6ba5bdc053" - dependencies: - follow-redirects "1.0.0" - -axios@^0.18.0: - version "0.18.0" - resolved "http://registry.npmjs.org/axios/-/axios-0.18.0.tgz#32d53e4851efdc0a11993b6cd000789d70c05102" - dependencies: - follow-redirects "^1.3.0" - is-buffer "^1.1.5" + integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: version "6.26.0" @@ -1371,9 +1644,10 @@ babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: esutils "^2.0.2" js-tokens "^3.0.2" -babel-core@^6.0.0, babel-core@^6.23.1, babel-core@^6.26.0: +babel-core@^6.26.0, babel-core@^6.26.3: version "6.26.3" resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207" + integrity sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA== dependencies: babel-code-frame "^6.26.0" babel-generator "^6.26.0" @@ -1395,7 +1669,7 @@ babel-core@^6.0.0, babel-core@^6.23.1, babel-core@^6.26.0: slash "^1.0.0" source-map "^0.5.7" -babel-generator@^6.18.0, babel-generator@^6.26.0: +babel-generator@^6.26.0: version "6.26.1" resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" dependencies: @@ -1509,19 +1783,15 @@ babel-helpers@^6.24.1: babel-runtime "^6.22.0" babel-template "^6.24.1" -babel-jest@^22.4.4: - version "22.4.4" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-22.4.4.tgz#977259240420e227444ebe49e226a61e49ea659d" - dependencies: - babel-plugin-istanbul "^4.1.5" - babel-preset-jest "^22.4.4" - -babel-jest@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-23.6.0.tgz#a644232366557a2240a0c083da6b25786185a2f1" +babel-jest@^24.1.0: + version "24.1.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-24.1.0.tgz#441e23ef75ded3bd547e300ac3194cef87b55190" + integrity sha512-MLcagnVrO9ybQGLEfZUqnOzv36iQzU7Bj4elm39vCukumLVSfoX+tRy3/jW7lUKc7XdpRmB/jech6L/UCsSZjw== dependencies: - babel-plugin-istanbul "^4.1.6" - babel-preset-jest "^23.2.0" + babel-plugin-istanbul "^5.1.0" + babel-preset-jest "^24.1.0" + chalk "^2.4.2" + slash "^2.0.0" babel-messages@^6.23.0: version "6.23.0" @@ -1535,22 +1805,19 @@ babel-plugin-check-es2015-constants@^6.22.0: dependencies: babel-runtime "^6.22.0" -babel-plugin-istanbul@^4.1.5, babel-plugin-istanbul@^4.1.6: - version "4.1.6" - resolved "http://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz#36c59b2192efce81c5b378321b74175add1c9a45" +babel-plugin-istanbul@^5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-5.1.1.tgz#7981590f1956d75d67630ba46f0c22493588c893" + integrity sha512-RNNVv2lsHAXJQsEJ5jonQwrJVWK8AcZpG1oxhnjCUaAjL7xahYLANhPUZbzEQHjKy1NMYUwn+0NPKQc8iSY4xQ== dependencies: - babel-plugin-syntax-object-rest-spread "^6.13.0" - find-up "^2.1.0" - istanbul-lib-instrument "^1.10.1" - test-exclude "^4.2.1" - -babel-plugin-jest-hoist@^22.4.4: - version "22.4.4" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-22.4.4.tgz#b9851906eab34c7bf6f8c895a2b08bea1a844c0b" + find-up "^3.0.0" + istanbul-lib-instrument "^3.0.0" + test-exclude "^5.0.0" -babel-plugin-jest-hoist@^23.2.0: - version "23.2.0" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-23.2.0.tgz#e61fae05a1ca8801aadee57a6d66b8cefaf44167" +babel-plugin-jest-hoist@^24.1.0: + version "24.1.0" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.1.0.tgz#dfecc491fb15e2668abbd690a697a8fd1411a7f8" + integrity sha512-gljYrZz8w1b6fJzKcsfKsipSru2DU2DmQ39aB6nV3xQ0DDv3zpIzKGortA5gknrhNnPN8DweaEgrnZdmbGmhnw== babel-plugin-syntax-async-functions@^6.8.0: version "6.13.0" @@ -1560,10 +1827,6 @@ babel-plugin-syntax-exponentiation-operator@^6.8.0: version "6.13.0" resolved "http://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" -babel-plugin-syntax-object-rest-spread@^6.13.0: - version "6.13.0" - resolved "http://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" - babel-plugin-syntax-trailing-function-commas@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" @@ -1765,9 +2028,10 @@ babel-plugin-transform-strict-mode@^6.24.1: babel-runtime "^6.22.0" babel-types "^6.24.1" -babel-preset-env@^1.6.1: +babel-preset-env@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.7.0.tgz#dea79fa4ebeb883cd35dab07e260c1c9c04df77a" + integrity sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg== dependencies: babel-plugin-check-es2015-constants "^6.22.0" babel-plugin-syntax-trailing-function-commas "^6.22.0" @@ -1800,19 +2064,13 @@ babel-preset-env@^1.6.1: invariant "^2.2.2" semver "^5.3.0" -babel-preset-jest@^22.4.4: - version "22.4.4" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-22.4.4.tgz#ec9fbd8bcd7dfd24b8b5320e0e688013235b7c39" - dependencies: - babel-plugin-jest-hoist "^22.4.4" - babel-plugin-syntax-object-rest-spread "^6.13.0" - -babel-preset-jest@^23.2.0: - version "23.2.0" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-23.2.0.tgz#8ec7a03a138f001a1a8fb1e8113652bf1a55da46" +babel-preset-jest@^24.1.0: + version "24.1.0" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-24.1.0.tgz#83bc564fdcd4903641af65ec63f2f5de6b04132e" + integrity sha512-FfNLDxFWsNX9lUmtwY7NheGlANnagvxq8LZdl5PKnVG3umP+S/g0XbVBfwtA4Ai3Ri/IMkWabBz3Tyk9wdspcw== dependencies: - babel-plugin-jest-hoist "^23.2.0" - babel-plugin-syntax-object-rest-spread "^6.13.0" + "@babel/plugin-syntax-object-rest-spread" "^7.0.0" + babel-plugin-jest-hoist "^24.1.0" babel-register@^6.26.0: version "6.26.0" @@ -1833,7 +2091,7 @@ babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: core-js "^2.4.0" regenerator-runtime "^0.11.0" -babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.26.0: +babel-template@^6.24.1, babel-template@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" dependencies: @@ -1843,7 +2101,7 @@ babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.26.0: babylon "^6.18.0" lodash "^4.17.4" -babel-traverse@^6.0.0, babel-traverse@^6.18.0, babel-traverse@^6.24.1, babel-traverse@^6.26.0: +babel-traverse@^6.24.1, babel-traverse@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" dependencies: @@ -1857,7 +2115,7 @@ babel-traverse@^6.0.0, babel-traverse@^6.18.0, babel-traverse@^6.24.1, babel-tra invariant "^2.2.2" lodash "^4.17.4" -babel-types@^6.0.0, babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: +babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" dependencies: @@ -1869,6 +2127,7 @@ babel-types@^6.0.0, babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.24. babylon@^6.14.0, babylon@^6.18.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" + integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== backo2@1.0.2: version "1.0.2" @@ -1877,12 +2136,13 @@ backo2@1.0.2: balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= base64-arraybuffer@0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8" -base64-js@^1.0.2: +base64-js@^1.0.2, base64-js@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3" @@ -1893,6 +2153,7 @@ base64id@1.0.0: base@^0.11.1: version "0.11.2" resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== dependencies: cache-base "^1.0.1" class-utils "^0.3.5" @@ -1904,17 +2165,20 @@ base@^0.11.1: basic-auth@1.1.0: version "1.1.0" - resolved "http://registry.npmjs.org/basic-auth/-/basic-auth-1.1.0.tgz#45221ee429f7ee1e5035be3f51533f1cdfd29884" + resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-1.1.0.tgz#45221ee429f7ee1e5035be3f51533f1cdfd29884" + integrity sha1-RSIe5Cn37h5QNb4/UVM/HN/SmIQ= bcrypt-pbkdf@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= dependencies: tweetnacl "^0.14.3" -before-after-hook@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-1.2.0.tgz#1079c10312cd4d4ad0d1676d37951ef8bfc3a563" +before-after-hook@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-1.3.2.tgz#7bfbf844ad670aa7a96b5a4e4e15bd74b08ed66b" + integrity sha512-zyPgY5dgbf99c0uGUjhY4w+mxqEGxPKg9RQDl34VvrVh2bM31lFN+mwR1ZHepq/KA3VCPk1gwJZL6IIJqjLy2w== better-assert@~1.0.0: version "1.0.2" @@ -1926,29 +2190,15 @@ big.js@^3.1.3: version "3.2.0" resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" +bignumber.js@^7.0.0: + version "7.2.1" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-7.2.1.tgz#80c048759d826800807c4bfd521e50edbba57a5f" + integrity sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ== + binary-extensions@^1.0.0: version "1.12.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.12.0.tgz#c2d780f53d45bba8317a8902d4ceeaf3a6385b14" -bitsyntax@~0.0.4: - version "0.0.4" - resolved "http://registry.npmjs.org/bitsyntax/-/bitsyntax-0.0.4.tgz#eb10cc6f82b8c490e3e85698f07e83d46e0cba82" - dependencies: - buffer-more-ints "0.0.2" - -bl@^1.0.0: - version "1.2.2" - resolved "http://registry.npmjs.org/bl/-/bl-1.2.2.tgz#a160911717103c07410cef63ef51b397c025af9c" - dependencies: - readable-stream "^2.3.5" - safe-buffer "^5.1.1" - -bl@~1.1.2: - version "1.1.2" - resolved "http://registry.npmjs.org/bl/-/bl-1.1.2.tgz#fdca871a99713aa00d19e3bbba41c44787a65398" - dependencies: - readable-stream "~2.0.5" - blob@0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.5.tgz#d680eeef25f8cd91ad533f5b01eed48e64caf683" @@ -1956,14 +2206,16 @@ blob@0.0.5: block-stream@*: version "0.0.9" resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" + integrity sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo= dependencies: inherits "~2.0.0" bluebird@3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.0.tgz#791420d7f551eea2897453a8a77653f96606d67c" + integrity sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw= -bluebird@^3.3.0, bluebird@^3.4.6, bluebird@^3.5.1, bluebird@^3.5.2: +bluebird@^3.3.0, bluebird@^3.5.1, bluebird@^3.5.3: version "3.5.3" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.3.tgz#7d01c6f9616c9a51ab0f8c549a79dfe6ec33efa7" @@ -1986,15 +2238,10 @@ body-parser@1.18.3, body-parser@^1.16.1: raw-body "2.3.3" type-is "~1.6.16" -boom@2.x.x: - version "2.10.1" - resolved "http://registry.npmjs.org/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" - dependencies: - hoek "2.x.x" - boxen@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.1.0.tgz#b1b69dd522305e807a99deee777dbd6e5167b102" + integrity sha1-sbad1SIwXoB6md7ud329blFnsQI= dependencies: ansi-align "^2.0.0" camelcase "^4.0.0" @@ -2007,6 +2254,7 @@ boxen@1.1.0: boxen@^1.0.0: version "1.3.0" resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b" + integrity sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw== dependencies: ansi-align "^2.0.0" camelcase "^4.0.0" @@ -2019,6 +2267,7 @@ boxen@^1.0.0: brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" concat-map "0.0.1" @@ -2037,7 +2286,7 @@ braces@^1.8.2: preserve "^0.2.0" repeat-element "^1.1.2" -braces@^2.3.0, braces@^2.3.1: +braces@^2.3.0, braces@^2.3.1, braces@^2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" dependencies: @@ -2059,16 +2308,19 @@ brorand@^1.0.1: browser-process-hrtime@^0.1.2: version "0.1.3" resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz#616f00faef1df7ec1b5bf9cfe2bdc3170f26c7b4" + integrity sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw== -browser-resolve@^1.11.0, browser-resolve@^1.11.2, browser-resolve@^1.11.3: +browser-resolve@^1.11.3: version "1.11.3" resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" + integrity sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ== dependencies: resolve "1.1.7" -browser-stdout@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f" +browser-stdout@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" + integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== browserify-aes@^1.0.0, browserify-aes@^1.0.4: version "1.2.0" @@ -2139,12 +2391,14 @@ bs-logger@0.x: bser@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719" + integrity sha1-mseNPtXZFYBP2HrLFYvHlxR6Fxk= dependencies: node-int64 "^0.4.0" btoa-lite@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/btoa-lite/-/btoa-lite-1.0.0.tgz#337766da15801210fdd956c22e9c6891ab9d0337" + integrity sha1-M3dm2hWAEhD92VbCLpxokaudAzc= buffer-alloc-unsafe@^1.1.0: version "1.1.0" @@ -2157,13 +2411,10 @@ buffer-alloc@^1.2.0: buffer-alloc-unsafe "^1.1.0" buffer-fill "^1.0.0" -buffer-crc32@^0.2.1: - version "0.2.13" - resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" - buffer-equal-constant-time@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" + integrity sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk= buffer-fill@^1.0.0: version "1.0.0" @@ -2173,10 +2424,6 @@ buffer-from@1.x, buffer-from@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" -buffer-more-ints@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/buffer-more-ints/-/buffer-more-ints-0.0.2.tgz#26b3885d10fa13db7fc01aae3aab870199e0124c" - buffer-xor@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" @@ -2189,32 +2436,22 @@ buffer@^4.3.0: ieee754 "^1.1.4" isarray "^1.0.0" -buffer@^5.0.6, buffer@^5.1.0: +buffer@^5.2.1: version "5.2.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.2.1.tgz#dd57fa0f109ac59c602479044dca7b8b3d0b71d6" + integrity sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg== dependencies: base64-js "^1.0.2" ieee754 "^1.1.4" -buildmail@4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/buildmail/-/buildmail-4.0.1.tgz#877f7738b78729871c9a105e3b837d2be11a7a72" - dependencies: - addressparser "1.0.1" - libbase64 "0.1.0" - libmime "3.0.0" - libqp "1.1.0" - nodemailer-fetch "1.6.0" - nodemailer-shared "1.1.0" - punycode "1.4.1" - -builtin-modules@^1.0.0, builtin-modules@^1.1.1: +builtin-modules@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" -builtin-modules@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-2.0.0.tgz#60b7ef5ae6546bd7deefa74b08b62a43a232648e" +builtin-modules@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.0.0.tgz#1e587d44b006620d90286cc7a9238bbc6129cab1" + integrity sha512-hMIeU4K2ilbXV6Uv93ZZ0Avg/M91RaKXucQ+4me2Do1txxBDyDZWCBa5bJSLqoNTRpXTLwEzIk1KmloenDDjhg== builtin-status-codes@^3.0.0: version "3.0.0" @@ -2223,24 +2460,48 @@ builtin-status-codes@^3.0.0: builtins@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" + integrity sha1-y5T662HIaWRR2zZTThQi+U8K7og= byline@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/byline/-/byline-5.0.0.tgz#741c5216468eadc457b03410118ad77de8c1ddb1" + integrity sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE= byte-size@^4.0.3: version "4.0.4" resolved "https://registry.yarnpkg.com/byte-size/-/byte-size-4.0.4.tgz#29d381709f41aae0d89c631f1c81aec88cd40b23" + integrity sha512-82RPeneC6nqCdSwCX2hZUz3JPOvN5at/nTEw/CMf05Smu3Hrpo9Psb7LjN+k+XndNArG1EY8L4+BM3aTM4BCvw== bytes@2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.4.0.tgz#7d97196f9d5baf7f6935e25985549edd2a6c2339" + integrity sha1-fZcZb51br39pNeJZhVSe3SpsIzk= bytes@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" -cacache@^11.0.1, cacache@^11.0.2, cacache@^11.2.0: +cacache@^11.0.1, cacache@^11.3.2: + version "11.3.2" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-11.3.2.tgz#2d81e308e3d258ca38125b676b98b2ac9ce69bfa" + integrity sha512-E0zP4EPGDOaT2chM08Als91eYnf8Z+eH1awwwVsngUmgppfM5jjJ8l3z5vO5p5w/I3LsiXawb1sW0VY65pQABg== + dependencies: + bluebird "^3.5.3" + chownr "^1.1.1" + figgy-pudding "^3.5.1" + glob "^7.1.3" + graceful-fs "^4.1.15" + lru-cache "^5.1.1" + mississippi "^3.0.0" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + promise-inflight "^1.0.1" + rimraf "^2.6.2" + ssri "^6.0.1" + unique-filename "^1.1.1" + y18n "^4.0.0" + +cacache@^11.0.2: version "11.3.1" resolved "https://registry.yarnpkg.com/cacache/-/cacache-11.3.1.tgz#d09d25f6c4aca7a6d305d141ae332613aa1d515f" dependencies: @@ -2262,6 +2523,7 @@ cacache@^11.0.1, cacache@^11.0.2, cacache@^11.2.0: cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== dependencies: collection-visit "^1.0.0" component-emitter "^1.2.1" @@ -2276,16 +2538,19 @@ cache-base@^1.0.1: call-me-maybe@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" + integrity sha1-JtII6onje1y95gJQoV8DHBak1ms= caller-callsite@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" + integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= dependencies: callsites "^2.0.0" caller-path@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" + integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= dependencies: caller-callsite "^2.0.0" @@ -2295,11 +2560,18 @@ callsite@1.0.0: callsites@^2.0.0: version "2.0.0" - resolved "http://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" + integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= + +callsites@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.0.0.tgz#fb7eb569b72ad7a45812f93fd9430a3e410b3dd3" + integrity sha512-tWnkwu9YEq2uzlBDI4RcLn8jrFvF9AOi8PxDNU3hZZjJcjkcRAq3vCI+vZcg1SuxISDYe86k9VZFwAxDiJGoAw== camelcase-keys@^2.0.0: version "2.1.0" - resolved "http://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" + integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc= dependencies: camelcase "^2.0.0" map-obj "^1.0.0" @@ -2307,6 +2579,7 @@ camelcase-keys@^2.0.0: camelcase-keys@^4.0.0: version "4.2.0" resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-4.2.0.tgz#a2aa5fb1af688758259c32c141426d78923b9b77" + integrity sha1-oqpfsa9oh1glnDLBQUJteJI7m3c= dependencies: camelcase "^4.1.0" map-obj "^2.0.0" @@ -2319,14 +2592,17 @@ camelcase@4.1.0, camelcase@^4.0.0, camelcase@^4.1.0: camelcase@^1.0.2: version "1.2.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" + integrity sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk= camelcase@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" + integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= camelcase@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.0.0.tgz#03295527d58bd3cd4aa75363f35b2e8d97be2f42" + integrity sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA== caniuse-lite@^1.0.30000844: version "1.0.30000912" @@ -2335,24 +2611,24 @@ caniuse-lite@^1.0.30000844: capture-exit@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-1.2.0.tgz#1c5fcc489fd0ab00d4f1ac7ae1072e3173fbab6f" + integrity sha1-HF/MSJ/QqwDU8ax64QcuMXP7q28= dependencies: rsvp "^3.3.3" capture-stack-trace@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz#a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d" - -caseless@~0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7" + integrity sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw== caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= center-align@^0.1.1: version "0.1.3" resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" + integrity sha1-qg0yYptu6XIgBBHL1EYckHvCt60= dependencies: align-text "^0.1.3" lazy-cache "^1.0.3" @@ -2370,7 +2646,8 @@ chai@^4.1.2: chalk@1.1.3, chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: version "1.1.3" - resolved "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= dependencies: ansi-styles "^2.2.1" escape-string-regexp "^1.0.2" @@ -2378,7 +2655,16 @@ chalk@1.1.3, chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.3.1, chalk@^2.4.1: +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.0, chalk@^2.3.1, chalk@^2.4.2: + 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" + +chalk@^2.1.0, chalk@^2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" dependencies: @@ -2389,12 +2675,13 @@ chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.3.1, chalk@^2.4 chardet@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== check-error@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" -chokidar@^2.0.0, chokidar@^2.0.2, chokidar@^2.0.3: +chokidar@^2.0.2, chokidar@^2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.4.tgz#356ff4e2b0e8e43e322d18a372460bbcf3accd26" dependencies: @@ -2413,9 +2700,29 @@ chokidar@^2.0.0, chokidar@^2.0.2, chokidar@^2.0.3: optionalDependencies: fsevents "^1.2.2" +chokidar@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.1.tgz#adc39ad55a2adf26548bd2afa048f611091f9184" + integrity sha512-gfw3p2oQV2wEt+8VuMlNsPjCxDxvvgnm/kz+uATu805mWVF8IJN7uz9DN7iBz+RMJISmiVbCOBFs9qBGMjtPfQ== + dependencies: + anymatch "^2.0.0" + async-each "^1.0.1" + braces "^2.3.2" + glob-parent "^3.1.0" + inherits "^2.0.3" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + normalize-path "^3.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.2.1" + upath "^1.1.0" + optionalDependencies: + fsevents "^1.2.7" + chownr@^1.0.1, chownr@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494" + integrity sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g== chrome-trace-event@^1.0.0: version "1.0.0" @@ -2426,6 +2733,12 @@ chrome-trace-event@^1.0.0: ci-info@^1.5.0: version "1.6.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" + integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A== + +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" @@ -2434,13 +2747,15 @@ cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: inherits "^2.0.1" safe-buffer "^5.0.1" -circular-json@^0.5.4: +circular-json@^0.5.5: version "0.5.9" resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.5.9.tgz#932763ae88f4f7dead7a0d09c8a51a4743a53b1d" + integrity sha512-4ivwqHpIFJZBuhN3g/pEcdbnGUywkBblloGbkglyloVjjR3uT6tieI89MVOfbP2tHX5sgb01FuLgAOzebNlJNQ== class-utils@^0.3.5: version "0.3.6" resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== dependencies: arr-union "^3.1.0" define-property "^0.2.5" @@ -2450,32 +2765,38 @@ class-utils@^0.3.5: cli-boxes@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" + integrity sha1-T6kXw+WclKAEzWH47lCdplFocUM= cli-cursor@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= dependencies: restore-cursor "^2.0.0" cli-width@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" + integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= clipboardy@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/clipboardy/-/clipboardy-1.1.1.tgz#75b5a7ac50d83c98025fb6303298c6a9007c16c7" + integrity sha1-dbWnrFDYPJgCX7YwMpjGqQB8Fsc= dependencies: execa "^0.6.0" clipboardy@1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/clipboardy/-/clipboardy-1.1.4.tgz#51b17574fc682588e2dd295cfa6e6aa109eab5ee" + integrity sha1-UbF1dPxoJYji3Slc+m5qoQnqte4= dependencies: execa "^0.6.0" cliui@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" + integrity sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE= dependencies: center-align "^0.1.1" right-align "^0.1.1" @@ -2484,6 +2805,7 @@ cliui@^2.1.0: cliui@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" + integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ== dependencies: string-width "^2.1.1" strip-ansi "^4.0.0" @@ -2492,10 +2814,12 @@ cliui@^4.0.0: clone@^1.0.2: version "1.0.4" resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= cmd-shim@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-2.0.2.tgz#6fcbda99483a8fd15d7d30a196ca69d688a2efdb" + integrity sha1-b8vamUg6j9FdfTChlspp1oii79s= dependencies: graceful-fs "^4.1.2" mkdirp "~0.5.0" @@ -2503,24 +2827,28 @@ cmd-shim@^2.0.2: co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= code-point-at@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= codecov@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/codecov/-/codecov-3.1.0.tgz#340bd968d361f256976b5af782dd8ba9f82bc849" + version "3.2.0" + resolved "https://registry.yarnpkg.com/codecov/-/codecov-3.2.0.tgz#4465ee19884528092d8c313e1f9e4bdc7d3065cd" + integrity sha512-3NJvNARXxilqnqVfgzDHyVrF4oeVgaYW1c1O6Oi5mn93exE7HTSSFNiYdwojWW6IwrCZABJ8crpNbKoo9aUHQw== dependencies: argv "^0.0.2" ignore-walk "^3.0.1" js-yaml "^3.12.0" - request "^2.87.0" + teeny-request "^3.7.0" urlgrey "^0.4.4" collection-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= dependencies: map-visit "^1.0.0" object-visit "^1.0.0" @@ -2528,12 +2856,14 @@ collection-visit@^1.0.0: 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.0: version "1.3.2" @@ -2546,6 +2876,7 @@ colors@~0.6.0: columnify@^1.5.4: version "1.5.4" resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb" + integrity sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs= dependencies: strip-ansi "^3.0.0" wcwidth "^1.0.0" @@ -2565,27 +2896,26 @@ combine-source-map@^0.8.0: lodash.memoize "~3.0.3" source-map "~0.5.3" -combined-stream@^1.0.5, combined-stream@^1.0.6, combined-stream@~1.0.5, combined-stream@~1.0.6: +combined-stream@^1.0.6, combined-stream@~1.0.6: version "1.0.7" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.7.tgz#2d1d24317afb8abe95d6d2c0b07b57813539d828" + integrity sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w== dependencies: delayed-stream "~1.0.0" -commander@2.11.0: - version "2.11.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563" +commander@2.15.1: + version "2.15.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f" + integrity sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag== -commander@^2.12.1, commander@^2.18.0, commander@^2.9.0: +commander@^2.12.1, commander@^2.18.0: version "2.19.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" -commander@~2.13.0: - version "2.13.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c" - commander@~2.17.1: version "2.17.1" resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" + integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg== commenting@1.0.5: version "1.0.5" @@ -2594,6 +2924,7 @@ commenting@1.0.5: common-tags@^1.4.0: version "1.8.0" resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz#8e3153e542d4a39e9b10554434afaaf98956a937" + integrity sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw== commondir@^1.0.1: version "1.0.1" @@ -2602,10 +2933,16 @@ commondir@^1.0.1: compare-func@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-1.3.2.tgz#99dd0ba457e1f9bc722b12c08ec33eeab31fa648" + integrity sha1-md0LpFfh+bxyKxLAjsM+6rMfpkg= dependencies: array-ify "^1.0.0" dot-prop "^3.0.0" +compare-versions@^3.2.1: + version "3.4.0" + resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.4.0.tgz#e0747df5c9cb7f054d6d3dc3e1dbc444f9e92b26" + integrity sha512-tK69D7oNXXqUW3ZNo/z7NXTEz22TCF0pTE+YF9cxvaAM9XnkLo1fV621xCLrRR6aevJlKxExkss0vWqUCUpqdg== + component-bind@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1" @@ -2618,15 +2955,6 @@ component-inherit@0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143" -compress-commons@^1.2.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-1.2.2.tgz#524a9f10903f3a813389b0225d27c48bb751890f" - dependencies: - buffer-crc32 "^0.2.1" - crc32-stream "^2.0.0" - normalize-path "^2.0.0" - readable-stream "^2.0.0" - compressible@^2.0.12, compressible@~2.0.14: version "2.0.15" resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.15.tgz#857a9ab0a7e5a07d8d837ed43fe2defff64fe212" @@ -2636,6 +2964,7 @@ compressible@^2.0.12, compressible@~2.0.14: compression@^1.6.2: version "1.7.3" resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.3.tgz#27e0e176aaf260f7f2c2813c3e440adb9f1993db" + integrity sha512-HSjyBG5N1Nnz7tF2+O7A9XUhyjru71/fwgNb7oIsEVHR0WShfs2tIS/EySLgiTe98aOK18YDlMXpzjCXY/n9mg== dependencies: accepts "~1.3.5" bytes "3.0.0" @@ -2648,19 +2977,32 @@ compression@^1.6.2: concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= concat-stream@^1.5.0, concat-stream@^1.6.0: version "1.6.2" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== dependencies: buffer-from "^1.0.0" inherits "^2.0.3" readable-stream "^2.2.2" typedarray "^0.0.6" +concat-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1" + integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.0.2" + typedarray "^0.0.6" + config-chain@^1.1.11: version "1.1.12" resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.12.tgz#0fde8d091200eb5e808caf25fe618c02f48e4efa" + integrity sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA== dependencies: ini "^1.3.4" proto-list "~1.2.1" @@ -2668,6 +3010,7 @@ config-chain@^1.1.11: configstore@^3.0.0: version "3.1.2" resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.2.tgz#c6f25defaeef26df12dd33414b001fe81a543f8f" + integrity sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw== dependencies: dot-prop "^4.1.0" graceful-fs "^4.1.2" @@ -2705,6 +3048,7 @@ console-browserify@^1.1.0: 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= constants-browserify@^1.0.0: version "1.0.0" @@ -2718,18 +3062,20 @@ content-type@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" -conventional-changelog-angular@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.2.tgz#39d945635e03b6d0c9d4078b1df74e06163dc66a" +conventional-changelog-angular@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.3.tgz#299fdd43df5a1f095283ac16aeedfb0a682ecab0" + integrity sha512-YD1xzH7r9yXQte/HF9JBuEDfvjxxwDGGwZU1+ndanbY0oFgA+Po1T9JDSpPLdP0pZT6MhCAsdvFKC4TJ4MTJTA== dependencies: compare-func "^1.3.1" q "^1.5.1" -conventional-changelog-core@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-3.1.5.tgz#c2edf928539308b54fe1b90a2fc731abc021852c" +conventional-changelog-core@^3.1.6: + version "3.1.6" + resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-3.1.6.tgz#ac1731a461c50d150d29c1ad4f33143293bcd32f" + integrity sha512-5teTAZOtJ4HLR6384h50nPAaKdDr+IaU0rnD2Gg2C3MS7hKsEPH8pZxrDNqam9eOSPQg9tET6uZY79zzgSz+ig== dependencies: - conventional-changelog-writer "^4.0.2" + conventional-changelog-writer "^4.0.3" conventional-commits-parser "^3.0.1" dateformat "^3.0.0" get-pkg-repo "^1.0.0" @@ -2746,15 +3092,17 @@ conventional-changelog-core@^3.1.5: conventional-changelog-preset-loader@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.0.2.tgz#81d1a07523913f3d17da3a49f0091f967ad345b0" + integrity sha512-pBY+qnUoJPXAXXqVGwQaVmcye05xi6z231QM98wHWamGAmu/ghkBprQAwmF5bdmyobdVxiLhPY3PrCfSeUNzRQ== -conventional-changelog-writer@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-4.0.2.tgz#eb493ed84269e7a663da36e49af51c54639c9a67" +conventional-changelog-writer@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-4.0.3.tgz#916a2b302d0bb5ef18efd236a034c13fb273cde1" + integrity sha512-bIlpSiQtQZ1+nDVHEEh798Erj2jhN/wEjyw9sfxY9es6h7pREE5BNJjfv0hXGH/FTrAsEpHUq4xzK99eePpwuA== dependencies: compare-func "^1.3.1" conventional-commits-filter "^2.0.1" dateformat "^3.0.0" - handlebars "^4.0.2" + handlebars "^4.1.0" json-stringify-safe "^5.0.1" lodash "^4.2.1" meow "^4.0.0" @@ -2765,6 +3113,7 @@ conventional-changelog-writer@^4.0.2: conventional-commits-filter@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-2.0.1.tgz#55a135de1802f6510b6758e0a6aa9e0b28618db3" + integrity sha512-92OU8pz/977udhBjgPEbg3sbYzIxMDFTlQT97w7KdhR9igNqdJvy8smmedAAgn4tPiqseFloKkrVfbXCVd+E7A== dependencies: is-subset "^0.1.1" modify-values "^1.0.0" @@ -2772,6 +3121,7 @@ conventional-commits-filter@^2.0.1: conventional-commits-parser@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.0.1.tgz#fe1c49753df3f98edb2285a5e485e11ffa7f2e4c" + integrity sha512-P6U5UOvDeidUJ8ebHVDIoXzI7gMlQ1OF/id6oUvp8cnZvOXMt1n8nYl74Ey9YMn0uVQtxmCtjPQawpsssBWtGg== dependencies: JSONStream "^1.0.4" is-text-path "^1.0.0" @@ -2784,6 +3134,7 @@ conventional-commits-parser@^3.0.1: conventional-recommended-bump@^4.0.4: version "4.0.4" resolved "https://registry.yarnpkg.com/conventional-recommended-bump/-/conventional-recommended-bump-4.0.4.tgz#05540584641d3da758c8863c09788fcaeb586872" + integrity sha512-9mY5Yoblq+ZMqJpBzgS+RpSq+SUfP2miOR3H/NR9drGf08WCrY9B6HAGJZEm6+ThsVP917VHAahSOjM6k1vhPg== dependencies: concat-stream "^1.6.0" conventional-changelog-preset-loader "^2.0.2" @@ -2794,7 +3145,7 @@ conventional-recommended-bump@^4.0.4: meow "^4.0.0" q "^1.5.1" -convert-source-map@^1.4.0, convert-source-map@^1.5.0, convert-source-map@^1.5.1: +convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.5.1, convert-source-map@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" dependencies: @@ -2815,6 +3166,7 @@ cookie@0.3.1: copy-concurrently@^1.0.0: version "1.0.5" resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" + integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== dependencies: aproba "^1.1.1" fs-write-stream-atomic "^1.0.8" @@ -2826,37 +3178,38 @@ copy-concurrently@^1.0.0: copy-descriptor@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= -core-js@^2.2.0, core-js@^2.4.0, core-js@^2.5.0, core-js@^2.5.7: +core-js@^2.2.0, core-js@^2.4.0, core-js@^2.5.0: version "2.5.7" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.7.tgz#f972608ff0cead68b841a16a932d0b183791814e" +core-js@^2.5.7: + version "2.6.5" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.5.tgz#44bc8d249e7fb2ff5d00e0341a7ffb94fbf67895" + integrity sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A== + +core-js@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.3.0.tgz#fab83fbb0b2d8dc85fa636c4b9d34c75420c6d65" + integrity sha1-+rg/uwstjchfpjbEudNMdUIMbWU= + core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= cosmiconfig@^5.0.2: - version "5.0.7" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.0.7.tgz#39826b292ee0d78eda137dfa3173bd1c21a43b04" + version "5.1.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.1.0.tgz#6c5c35e97f37f985061cdf653f114784231185cf" + integrity sha512-kCNPvthka8gvLtzAxQXvWo4FxqRB+ftRZyPZNuab5ngvM9Y7yw7hbEysglptLgpkGX9nAOKTBVkHUAe8xtYR6Q== dependencies: import-fresh "^2.0.0" is-directory "^0.3.1" js-yaml "^3.9.0" + lodash.get "^4.4.2" parse-json "^4.0.0" -crc32-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-2.0.0.tgz#e3cdd3b4df3168dd74e3de3fbbcb7b297fe908f4" - dependencies: - crc "^3.4.4" - readable-stream "^2.0.0" - -crc@^3.4.4: - version "3.8.0" - resolved "https://registry.yarnpkg.com/crc/-/crc-3.8.0.tgz#ad60269c2c856f8c299e2c4cc0de4556914056c6" - dependencies: - buffer "^5.1.0" - create-ecdh@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" @@ -2867,6 +3220,7 @@ create-ecdh@^4.0.0: create-error-class@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" + integrity sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y= dependencies: capture-stack-trace "^1.0.0" @@ -2893,7 +3247,8 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: cross-spawn-async@^2.1.1: version "2.2.5" - resolved "http://registry.npmjs.org/cross-spawn-async/-/cross-spawn-async-2.2.5.tgz#845ff0c0834a3ded9d160daca6d390906bb288cc" + resolved "https://registry.yarnpkg.com/cross-spawn-async/-/cross-spawn-async-2.2.5.tgz#845ff0c0834a3ded9d160daca6d390906bb288cc" + integrity sha1-hF/wwINKPe2dFg2sptOQkGuyiMw= dependencies: lru-cache "^4.0.0" which "^1.2.8" @@ -2901,6 +3256,7 @@ cross-spawn-async@^2.1.1: cross-spawn@^5.0.1: version "5.1.0" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= dependencies: lru-cache "^4.0.1" shebang-command "^1.2.0" @@ -2916,13 +3272,7 @@ cross-spawn@^6.0.0, cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" -cryptiles@2.x.x: - version "2.0.5" - resolved "http://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" - dependencies: - boom "2.x.x" - -crypto-browserify@^3.11.0, crypto-browserify@^3.11.1: +crypto-browserify@^3.11.0, crypto-browserify@^3.12.0: version "3.12.0" resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" dependencies: @@ -2942,19 +3292,22 @@ crypto-random-string@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" -cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": - version "0.3.4" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.4.tgz#8cd52e8a3acfd68d3aed38ee0a640177d2f9d797" +cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0", cssom@^0.3.4: + version "0.3.6" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.6.tgz#f85206cee04efa841f3c5982a74ba96ab20d65ad" + integrity sha512-DtUeseGk9/GBW0hl0vVPpU22iHL6YB5BUX7ml1hB+GMpo0NX5G4voX3kdWiMSEguFtcW3Vh3djqNF4aIe6ne0A== -cssstyle@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-1.1.1.tgz#18b038a9c44d65f7a8e428a653b9f6fe42faf5fb" +cssstyle@^1.0.0, cssstyle@^1.1.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-1.2.1.tgz#3aceb2759eaf514ac1a21628d723d6043a819495" + integrity sha512-7DYm8qe+gPx/h77QlCyFmX80+fGaE/6A/Ekl0zaszYOubvySO2saYFdQ78P29D0UsULxFKCetDGNaNRUdSF+2A== dependencies: cssom "0.3.x" currently-unhandled@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" + integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= dependencies: array-find-index "^1.0.1" @@ -2965,40 +3318,44 @@ custom-event@~1.0.0: cyclist@~0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640" + integrity sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA= danger-plugin-tslint@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/danger-plugin-tslint/-/danger-plugin-tslint-2.0.0.tgz#7a9feb2180f59ada27d0647dd9b327302cd14604" + integrity sha1-ep/rIYD1mton0GR92bMnMCzRRgQ= dependencies: common-tags "^1.4.0" optionalDependencies: serve "^5.1.5" -danger@^6.1.5: - version "6.1.8" - resolved "https://registry.yarnpkg.com/danger/-/danger-6.1.8.tgz#a940ce426fb8ccce1891b4669c32f14e5e0b696c" +danger@^7.0.12: + version "7.0.12" + resolved "https://registry.yarnpkg.com/danger/-/danger-7.0.12.tgz#bba12a496adcc7a1e30619404bc13a3c6d9ba915" + integrity sha512-pew8vsBs2bitXt5upLuvfEAqvVuvzLoo/BjX7ysGI3yXQ8X7vrESo1/gGRvkA4uaDEoDq7LaBR4xhxfqxk9fog== dependencies: - "@babel/polyfill" "^7.0.0" - "@octokit/rest" "^15.12.1" + "@babel/polyfill" "^7.2.5" + "@octokit/rest" "^16.14.1" chalk "^2.3.0" commander "^2.18.0" - debug "^4.0.1" + debug "^4.1.1" get-stdin "^6.0.0" + http-proxy-agent "^2.1.0" https-proxy-agent "^2.2.1" hyperlinker "^1.0.0" jsome "^2.3.25" json5 "^2.1.0" jsonpointer "^4.0.1" - jsonwebtoken "^8.2.1" + jsonwebtoken "^8.4.0" lodash.find "^4.6.0" lodash.includes "^4.3.0" lodash.isobject "^3.0.2" lodash.keys "^4.0.8" memfs-or-file-map-to-github-branch "^1.1.0" node-cleanup "^2.1.2" - node-fetch "^2.2.0" + node-fetch "^2.3.0" override-require "^1.1.1" - p-limit "^2.0.0" + p-limit "^2.1.0" parse-diff "^0.5.1" parse-git-config "^2.0.3" parse-github-url "^1.0.2" @@ -3008,30 +3365,27 @@ danger@^6.1.5: require-from-string "^2.0.2" rfc6902 "^3.0.1" supports-hyperlinks "^1.0.1" - vm2 "^3.6.3" - voca "^1.4.0" dargs@5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/dargs/-/dargs-5.1.0.tgz#ec7ea50c78564cd36c9d5ec18f66329fade27829" + integrity sha1-7H6lDHhWTNNsnV7Bj2Yyn63ieCk= dargs@^4.0.1: version "4.1.0" resolved "https://registry.yarnpkg.com/dargs/-/dargs-4.1.0.tgz#03a9dbb4b5c2f139bf14ae53f0b8a2a6a86f4e17" + integrity sha1-A6nbtLXC8Tm/FK5T8LiipqhvThc= dependencies: number-is-nan "^1.0.0" dashdash@^1.12.0: version "1.14.1" resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= dependencies: assert-plus "^1.0.0" -data-uri-to-buffer@1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-1.2.0.tgz#77163ea9c20d8641b4707e8f18abdf9a78f34835" - -data-urls@^1.0.0: +data-urls@^1.0.0, data-urls@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe" dependencies: @@ -3039,14 +3393,15 @@ data-urls@^1.0.0: whatwg-mimetype "^2.2.0" whatwg-url "^7.0.0" -date-format@^0.0.0: - version "0.0.0" - resolved "http://registry.npmjs.org/date-format/-/date-format-0.0.0.tgz#09206863ab070eb459acea5542cbd856b11966b3" - date-format@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/date-format/-/date-format-1.2.0.tgz#615e828e233dd1ab9bb9ae0950e0ceccfa6ecad8" +date-format@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/date-format/-/date-format-2.0.0.tgz#7cf7b172f1ec564f0003b39ea302c5498fb98c8f" + integrity sha512-M6UqVvZVgFYqZL1SfHsRGIQSz3ZL+qgbsV5Lp1Vj61LZVYuEwcMXYay7DRDtYs2HQQBK5hQtQ0fD9aEJ89V0LA== + date-now@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" @@ -3061,16 +3416,24 @@ dateformat@^1.0.6: dateformat@^3.0.0: version "3.0.3" resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" + integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== -debug@2, debug@2.6.9, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.8, debug@^2.6.9, debug@~2.6.4, debug@~2.6.6: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - dependencies: - ms "2.0.0" +debounce@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.0.tgz#44a540abc0ea9943018dc0eaa95cce87f65cd131" + integrity sha512-mYtLl1xfZLi1m4RtQYlZgJUNQjl4ZxVnHzIR8nLLgi4q1YT8o/WM+MK/f8yfcc9s5Ir5zRaPZyZU6xs1Syoocg== debug@2.6.7: version "2.6.7" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.7.tgz#92bad1f6d05bbb6bba22cca88bcd0ec894c2861e" + integrity sha1-krrR9tBbu2u6Isyoi80OyJTChh4= + dependencies: + ms "2.0.0" + +debug@2.6.9, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.8, debug@^2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" @@ -3080,29 +3443,29 @@ debug@3.1.0, debug@=3.1.0, debug@~3.1.0: dependencies: ms "2.0.0" -debug@^0.7.2: - version "0.7.4" - resolved "http://registry.npmjs.org/debug/-/debug-0.7.4.tgz#06e1ea8082c2cb14e39806e22e2f6f757f92af39" - 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@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.0.tgz#373687bffa678b38b1cd91f861b63850035ddc87" +debug@^4.1.0, debug@^4.1.1: + 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" debuglog@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" + integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI= decamelize-keys@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" + integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= dependencies: decamelize "^1.1.0" map-obj "^1.0.0" @@ -3114,10 +3477,12 @@ decamelize@^1.0.0, decamelize@^1.1.0, decamelize@^1.1.1, decamelize@^1.1.2, deca decode-uri-component@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= dedent@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" + integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= deep-eql@^3.0.1: version "3.0.1" @@ -3128,67 +3493,75 @@ deep-eql@^3.0.1: 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== deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= -default-require-extensions@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-1.0.0.tgz#f37ea15d3e13ffd9b437d33e1a75b5fb97874cb8" +deepmerge@3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-3.2.0.tgz#58ef463a57c08d376547f8869fdc5bcee957f44e" + integrity sha512-6+LuZGU7QCNUnAJyX8cIrlzoEgggTM6B7mm+znKOX4t5ltluT9KLjN6g61ECMS0LTsLW7yDpNoxhix5FZcrIow== + +default-require-extensions@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-2.0.0.tgz#f5f8fbb18a7d6d50b21f641f649ebb522cfe24f7" + integrity sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc= dependencies: - strip-bom "^2.0.0" + strip-bom "^3.0.0" defaults@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" + integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= dependencies: clone "^1.0.2" define-properties@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== dependencies: object-keys "^1.0.12" define-property@^0.2.5: version "0.2.5" resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= dependencies: is-descriptor "^0.1.0" define-property@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= dependencies: is-descriptor "^1.0.0" define-property@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== dependencies: is-descriptor "^1.0.2" isobject "^3.0.1" -degenerator@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/degenerator/-/degenerator-1.0.4.tgz#fcf490a37ece266464d9cc431ab98c5819ced095" - dependencies: - ast-types "0.x.x" - escodegen "1.x.x" - esprima "3.x.x" - 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.0, depd@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= des.js@^1.0.0: version "1.0.0" @@ -3210,18 +3583,22 @@ detect-indent@^4.0.0: detect-indent@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" + integrity sha1-OHHMCmoALow+Wzz38zYmRnXwa50= detect-libc@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= detect-newline@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" + integrity sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I= detect-port@1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/detect-port/-/detect-port-1.2.1.tgz#a2c0a048aa9df2b703fc54bb4436ce2118f09b5a" + integrity sha512-2KWLTLsfpi/oYPGNBEniPcFzr1GW/s+Xq/4hJmTQRdE8ULuRwGnRPuVhS/cf+Z4ZEXNo7EO2f6oydHJQd94KMg== dependencies: address "^1.0.1" debug "^2.6.0" @@ -3229,6 +3606,7 @@ detect-port@1.2.1: dezalgo@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456" + integrity sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY= dependencies: asap "^2.0.0" wrappy "1" @@ -3237,14 +3615,20 @@ di@^0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c" -diff@3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.3.1.tgz#aa8567a6eed03c531fc89d3f711cd0e5259dec75" +diff-sequences@^24.0.0: + version "24.0.0" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.0.0.tgz#cdf8e27ed20d8b8d3caccb4e0c0d8fe31a173013" + integrity sha512-46OkIuVGBBnrC0soO/4LHu5LHGHx0uhP65OVz8XOrAJpqiCB2aVIuESvjI1F9oqebuvY8lekS1pt6TN7vt7qsw== -diff@^3.2.0, diff@^3.5.0: +diff@3.5.0, diff@^3.2.0, diff@^3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" +diff@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.1.tgz#0c667cb467ebbb5cea7f14f135cc2dba7780a8ff" + integrity sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q== + diffie-hellman@^5.0.0: version "5.0.3" resolved "http://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" @@ -3253,9 +3637,10 @@ diffie-hellman@^5.0.0: miller-rabin "^4.0.0" randombytes "^2.0.0" -dir-glob@^2.0.0: +dir-glob@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.0.0.tgz#0b205d2b6aef98238ca286598a8204d29d0a0034" + integrity sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag== dependencies: arrify "^1.0.1" path-type "^3.0.0" @@ -3269,19 +3654,21 @@ dom-serialize@^2.2.0: extend "^3.0.0" void-elements "^2.0.0" -domain-browser@^1.1.1, domain-browser@^1.1.7: +domain-browser@^1.1.1, domain-browser@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" domexception@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" + integrity sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug== dependencies: webidl-conversions "^4.0.2" dot-prop@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-3.0.0.tgz#1b708af094a49c9a0e7dbcad790aba539dac1177" + integrity sha1-G3CK8JSknJoOfbyteQq6U52sEXc= dependencies: is-obj "^1.0.0" @@ -3291,19 +3678,27 @@ dot-prop@^4.1.0, dot-prop@^4.2.0: dependencies: is-obj "^1.0.0" -double-ended-queue@^2.1.0-0: - version "2.1.0-0" - resolved "https://registry.yarnpkg.com/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz#103d3527fd31528f40188130c841efdd78264e5c" - duplexer3@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" + integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= duplexer@^0.1.1: version "0.1.1" - resolved "http://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" + integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E= + +duplexify@^3.4.2, duplexify@^3.6.0: + version "3.7.1" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" + integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== + dependencies: + end-of-stream "^1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" -duplexify@^3.4.2, duplexify@^3.5.0, duplexify@^3.6.0: +duplexify@^3.5.0: version "3.6.1" resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.6.1.tgz#b1a7a29c4abfd639585efaecce80d666b1e34125" dependencies: @@ -3315,6 +3710,7 @@ duplexify@^3.4.2, duplexify@^3.5.0, duplexify@^3.6.0: ecc-jsbn@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= dependencies: jsbn "~0.1.0" safer-buffer "^2.1.0" @@ -3322,6 +3718,7 @@ ecc-jsbn@~0.1.1: ecdsa-sig-formatter@1.0.10: version "1.0.10" resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.10.tgz#1c595000f04a8897dfb85000892a0f4c33af86c3" + integrity sha1-HFlQAPBKiJffuFAAiSoPTDOvhsM= dependencies: safe-buffer "^5.0.1" @@ -3356,18 +3753,21 @@ encodeurl@~1.0.1, encodeurl@~1.0.2: encoding@^0.1.11: version "0.1.12" resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" + integrity sha1-U4tm8+5izRq1HsMjgp0flIDHS+s= dependencies: iconv-lite "~0.4.13" end-of-stream@^1.0.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" + integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q== dependencies: once "^1.4.0" -engine.io-client@~3.1.0: - version "3.1.6" - resolved "http://registry.npmjs.org/engine.io-client/-/engine.io-client-3.1.6.tgz#5bdeb130f8b94a50ac5cbeb72583e7a4a063ddfd" +engine.io-client@~3.2.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-3.2.1.tgz#6f54c0475de487158a1a7c77d10178708b6add36" + integrity sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw== dependencies: component-emitter "1.2.1" component-inherit "0.0.3" @@ -3391,9 +3791,10 @@ engine.io-parser@~2.1.0, engine.io-parser@~2.1.1: blob "0.0.5" has-binary2 "~1.0.2" -engine.io@~3.1.0: - version "3.1.5" - resolved "http://registry.npmjs.org/engine.io/-/engine.io-3.1.5.tgz#0e7ef9d690eb0b35597f1d4ad02a26ca2dba3845" +engine.io@~3.2.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-3.2.1.tgz#b60281c35484a70ee0351ea0ebff83ec8c9522a2" + integrity sha512-+VlKzHzMhaU+GsCIg4AoXF1UdDFjHHwMmMKqMJNDNLlUlejz58FCy4LBqB2YVJskHGYl06BatYWKP2TVdVXE5w== dependencies: accepts "~1.3.4" base64id "1.0.0" @@ -3401,8 +3802,6 @@ engine.io@~3.1.0: debug "~3.1.0" engine.io-parser "~2.1.0" ws "~3.3.1" - optionalDependencies: - uws "~9.14.0" enhanced-resolve@^4.1.0: version "4.1.0" @@ -3419,6 +3818,7 @@ ent@^2.2.0, ent@~2.2.0: err-code@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/err-code/-/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960" + integrity sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA= errno@^0.1.3, errno@~0.1.7: version "0.1.7" @@ -3429,10 +3829,11 @@ errno@^0.1.3, errno@~0.1.7: error-ex@^1.2.0, error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== dependencies: is-arrayish "^0.2.1" -es-abstract@^1.4.3, es-abstract@^1.5.1: +es-abstract@^1.4.3: version "1.12.0" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.12.0.tgz#9dbbdd27c6856f0001421ca18782d786bf8a6165" dependencies: @@ -3442,21 +3843,41 @@ es-abstract@^1.4.3, es-abstract@^1.5.1: is-callable "^1.1.3" is-regex "^1.0.4" -es-to-primitive@^1.1.1: +es-abstract@^1.5.1: + version "1.13.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9" + integrity sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg== + dependencies: + es-to-primitive "^1.2.0" + function-bind "^1.1.1" + has "^1.0.3" + is-callable "^1.1.4" + is-regex "^1.0.4" + object-keys "^1.0.12" + +es-to-primitive@^1.1.1, es-to-primitive@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" + integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg== dependencies: is-callable "^1.1.4" is-date-object "^1.0.1" is-symbol "^1.0.2" es6-promise@^4.0.3: - version "4.2.5" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.5.tgz#da6d0d5692efb461e082c14817fe2427d8f5d054" + version "4.2.6" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.6.tgz#b685edd8258886365ea62b57d30de28fadcd974f" + integrity sha512-aRVgGdnmW2OiySVPUC9e6m+plolMAJKjZnQlCwNSuK5yQ0JN61DZSO1X1Ufd1foqWRAlig0rhduTCHe7sVtK5Q== + +es6-promise@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.0.2.tgz#010d5858423a5f118979665f46486a95c6ee2bb6" + integrity sha1-AQ1YWEI6XxGJeWZfRkhqlcbuK7Y= es6-promisify@^5.0.0: version "5.0.0" - resolved "http://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" + resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" + integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= dependencies: es6-promise "^4.0.3" @@ -3479,7 +3900,7 @@ escodegen@1.8.x: optionalDependencies: source-map "~0.2.0" -escodegen@1.x.x, escodegen@^1.9.1: +escodegen@^1.11.0, escodegen@^1.9.1: version "1.11.0" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.11.0.tgz#b27a9389481d5bfd5bec76f7bb1eb3f8f4556589" dependencies: @@ -3501,13 +3922,15 @@ esprima@2.7.x, esprima@^2.7.1: version "2.7.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" -esprima@3.x.x, esprima@^3.1.3: +esprima@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" + integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM= 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== esrecurse@^4.1.0: version "4.2.1" @@ -3522,6 +3945,7 @@ estraverse@^1.9.1: estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" + integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM= estree-walker@^0.5.2: version "0.5.2" @@ -3530,19 +3954,31 @@ estree-walker@^0.5.2: esutils@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" + integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs= etag@~1.8.0, etag@~1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + +event-target-shim@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.0.tgz#8fabe06975219af64c36ceed4771cf1ad1c3455c" + integrity sha512-vu4tlY5xqMEGj/rzuDHxfvm9Kk2562O5h58i8xwnkMkv/yqmBqBcDJt/vGBrOBbCKuVc5eV3ghYxAX9YUhyi0w== eventemitter3@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.0.tgz#090b4d6cdbd645ed10bf750d4b5407942d7ba163" -events@^1.0.0, events@^1.1.1: +events@^1.0.0: version "1.1.1" resolved "http://registry.npmjs.org/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" +events@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.0.0.tgz#9a0a0dfaf62893d92b875b8f2698ca4114973e88" + integrity sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA== + evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" @@ -3553,12 +3989,14 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: exec-sh@^0.2.0: version "0.2.2" resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.2.tgz#2a5e7ffcbd7d0ba2755bdecb16e5a427dfbdec36" + integrity sha512-FIUCJz1RbuS0FKTdaAafAByGS0CPvU3R0MeHxgtl+djzCc//F8HakL8GzmVNZanasTbTAY/3DRFA0KpVqj/eAw== dependencies: merge "^1.2.0" execa@^0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/execa/-/execa-0.10.0.tgz#ff456a8f53f90f8eccc71a96d11bdfc7f082cb50" + integrity sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw== dependencies: cross-spawn "^6.0.0" get-stream "^3.0.0" @@ -3571,6 +4009,7 @@ execa@^0.10.0: execa@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/execa/-/execa-0.4.0.tgz#4eb6467a36a095fabb2970ff9d5e3fb7bce6ebc3" + integrity sha1-TrZGejaglfq7KXD/nV4/t7zm68M= dependencies: cross-spawn-async "^2.1.1" is-stream "^1.1.0" @@ -3594,6 +4033,7 @@ execa@^0.6.0: execa@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" + integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c= dependencies: cross-spawn "^5.0.1" get-stream "^3.0.0" @@ -3606,6 +4046,7 @@ execa@^0.7.0: execa@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== dependencies: cross-spawn "^6.0.0" get-stream "^4.0.0" @@ -3618,6 +4059,7 @@ execa@^1.0.0: exit@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= expand-braces@^0.1.1: version "0.1.2" @@ -3636,6 +4078,7 @@ expand-brackets@^0.1.4: expand-brackets@^2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= dependencies: debug "^2.3.3" define-property "^0.2.5" @@ -3661,30 +4104,20 @@ expand-range@^1.8.1: expand-tilde@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" + integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI= dependencies: homedir-polyfill "^1.0.1" -expect@^22.4.0: - version "22.4.3" - resolved "http://registry.npmjs.org/expect/-/expect-22.4.3.tgz#d5a29d0a0e1fb2153557caef2674d4547e914674" - dependencies: - ansi-styles "^3.2.0" - jest-diff "^22.4.3" - jest-get-type "^22.4.3" - jest-matcher-utils "^22.4.3" - jest-message-util "^22.4.3" - jest-regex-util "^22.4.3" - -expect@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/expect/-/expect-23.6.0.tgz#1e0c8d3ba9a581c87bd71fb9bc8862d443425f98" +expect@^24.1.0: + version "24.1.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-24.1.0.tgz#88e73301c4c785cde5f16da130ab407bdaf8c0f2" + integrity sha512-lVcAPhaYkQcIyMS+F8RVwzbm1jro20IG8OkvxQ6f1JfqhVZyyudCwYogQ7wnktlf14iF3ii7ArIUO/mqvrW9Gw== dependencies: ansi-styles "^3.2.0" - jest-diff "^23.6.0" - jest-get-type "^22.1.0" - jest-matcher-utils "^23.6.0" - jest-message-util "^23.4.0" - jest-regex-util "^23.3.0" + jest-get-type "^24.0.0" + jest-matcher-utils "^24.0.0" + jest-message-util "^24.0.0" + jest-regex-util "^24.0.0" express@^4.16.4: version "4.16.4" @@ -3721,32 +4154,29 @@ express@^4.16.4: utils-merge "1.0.1" vary "~1.1.2" -extend-shallow@^1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-1.1.4.tgz#19d6bf94dfc09d76ba711f39b872d21ff4dd9071" - dependencies: - kind-of "^1.1.0" - extend-shallow@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= dependencies: is-extendable "^0.1.0" extend-shallow@^3.0.0, extend-shallow@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= dependencies: assign-symbols "^1.0.0" is-extendable "^1.0.1" -extend@3, extend@^3.0.0, extend@^3.0.1, extend@~3.0.0, extend@~3.0.2: +extend@^3.0.0, extend@^3.0.1, extend@^3.0.2, extend@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" -external-editor@^3.0.0: +external-editor@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.0.3.tgz#5866db29a97826dbe4bf3afd24070ead9ea43a27" + integrity sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA== dependencies: chardet "^0.7.0" iconv-lite "^0.4.24" @@ -3761,6 +4191,7 @@ extglob@^0.3.1: extglob@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== dependencies: array-unique "^0.3.2" define-property "^1.0.0" @@ -3774,18 +4205,22 @@ extglob@^2.0.4: extsprintf@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= extsprintf@^1.2.0: version "1.4.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= fast-deep-equal@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" + integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= fast-glob@^2.0.2: - version "2.2.4" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.4.tgz#e54f4b66d378040e0e4d6a68ec36bbc5b04363c0" + version "2.2.6" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.6.tgz#a5d5b697ec8deda468d85a74035290a025a95295" + integrity sha512-0BvMaZc1k9F+MeWWMe8pL6YltFzZYcJsYU7D4JyDA6PAczaXvxqQQ/z+mDF7/4Mw01DeUc+i3CTKajnkANkV4w== dependencies: "@mrmlnc/readdir-enhanced" "^2.2.1" "@nodelib/fs.stat" "^1.1.2" @@ -3801,34 +4236,40 @@ fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: fast-levenshtein@~2.0.4: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + +fast-text-encoding@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fast-text-encoding/-/fast-text-encoding-1.0.0.tgz#3e5ce8293409cfaa7177a71b9ca84e1b1e6f25ef" + integrity sha512-R9bHCvweUxxwkDwhjav5vxpFvdPGlVngtqmx4pIZfSUhM/Q4NiIUHB456BAf+Q1Nwu3HEZYONtu+Rya+af4jiQ== fb-watchman@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" + integrity sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg= dependencies: bser "^2.0.0" figgy-pudding@^3.1.0, figgy-pudding@^3.4.1, figgy-pudding@^3.5.1: version "3.5.1" resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" + integrity sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w== figures@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= dependencies: escape-string-regexp "^1.0.5" -file-uri-to-path@1: - version "1.0.0" - resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" - filename-regex@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" -fileset@^2.0.2: +fileset@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0" + integrity sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA= dependencies: glob "^7.0.3" minimatch "^3.0.3" @@ -3836,6 +4277,7 @@ fileset@^2.0.2: filesize@3.5.10: version "3.5.10" resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.5.10.tgz#fc8fa23ddb4ef9e5e0ab6e1e64f679a24a56761f" + integrity sha1-/I+iPdtO+eXgq24eZPZ5okpWdh8= fill-range@^2.1.0: version "2.2.4" @@ -3850,6 +4292,7 @@ fill-range@^2.1.0: fill-range@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= dependencies: extend-shallow "^2.0.1" is-number "^3.0.0" @@ -3891,6 +4334,7 @@ find-cache-dir@^2.0.0: find-up@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= dependencies: path-exists "^2.0.0" pinkie-promise "^2.0.0" @@ -3898,29 +4342,31 @@ find-up@^1.0.0: find-up@^2.0.0, find-up@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= dependencies: locate-path "^2.0.0" find-up@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== dependencies: locate-path "^3.0.0" -flush-write-stream@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.0.3.tgz#c5d586ef38af6097650b49bc41b55fabb19f35bd" - dependencies: - inherits "^2.0.1" - readable-stream "^2.0.4" +flatted@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.0.tgz#55122b6536ea496b4b44893ee2608141d10d9916" + integrity sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg== -follow-redirects@1.0.0: - version "1.0.0" - resolved "http://registry.npmjs.org/follow-redirects/-/follow-redirects-1.0.0.tgz#8e34298cbd2e176f254effec75a1c78cc849fd37" +flush-write-stream@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" + integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== dependencies: - debug "^2.2.0" + inherits "^2.0.3" + readable-stream "^2.3.6" -follow-redirects@^1.0.0, follow-redirects@^1.3.0: +follow-redirects@^1.0.0: version "1.5.10" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a" dependencies: @@ -3939,18 +4385,12 @@ for-own@^0.1.4: forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= -form-data@~2.0.0: - version "2.0.0" - resolved "http://registry.npmjs.org/form-data/-/form-data-2.0.0.tgz#6f0aebadcc5da16c13e1ecc11137d85f9b883b25" - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.5" - mime-types "^2.1.11" - -form-data@~2.3.0, form-data@~2.3.2: +form-data@~2.3.2: version "2.3.3" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== dependencies: asynckit "^0.4.0" combined-stream "^1.0.6" @@ -3963,12 +4403,14 @@ forwarded@~0.1.2: fragment-cache@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= dependencies: map-cache "^0.2.2" fresh@0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.0.tgz#f474ca5e6a9246d6fd8e0953cfa9b9c805afa78e" + integrity sha1-9HTKXmqSRtb9jglTz6m5yAWvp44= fresh@0.5.2: version "0.5.2" @@ -3977,6 +4419,7 @@ fresh@0.5.2: from2@^2.1.0: version "2.3.0" resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= dependencies: inherits "^2.0.1" readable-stream "^2.0.0" @@ -3987,31 +4430,21 @@ fs-access@^1.0.0: dependencies: null-check "^1.0.0" -fs-constants@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" - fs-exists-sync@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz#982d6893af918e72d08dec9e8673ff2b5a8d6add" + integrity sha1-mC1ok6+RjnLQjeyehnP/K1qNat0= fs-extra@3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-3.0.1.tgz#3794f378c58b342ea7dbbb23095109c4b3b62291" + integrity sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE= dependencies: graceful-fs "^4.1.2" jsonfile "^3.0.0" universalify "^0.1.0" -fs-extra@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-5.0.0.tgz#414d0110cdd06705734d055652c5411260c31abd" - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-extra@^7.0.0: +fs-extra@7.0.1, fs-extra@^7.0.0: version "7.0.1" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" dependencies: @@ -4022,12 +4455,14 @@ fs-extra@^7.0.0: fs-minipass@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" + integrity sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ== dependencies: minipass "^2.2.1" fs-write-stream-atomic@^1.0.8: version "1.0.10" resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" + integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= dependencies: graceful-fs "^4.1.2" iferr "^0.1.5" @@ -4037,30 +4472,33 @@ fs-write-stream-atomic@^1.0.8: 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= -fsevents@^1.2.2, fsevents@^1.2.3: +fsevents@^1.2.2: version "1.2.4" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.4.tgz#f41dcb1af2582af3692da36fc55cbd8e1041c426" dependencies: nan "^2.9.2" node-pre-gyp "^0.10.0" +fsevents@^1.2.3, fsevents@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.7.tgz#4851b664a3783e52003b3c66eb0eee1074933aa4" + integrity sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw== + dependencies: + nan "^2.9.2" + node-pre-gyp "^0.10.0" + fstream@^1.0.0, fstream@^1.0.2: version "1.0.11" resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" + integrity sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE= dependencies: graceful-fs "^4.1.2" inherits "~2.0.0" mkdirp ">=0.5 0" rimraf "2" -ftp@~0.3.10: - version "0.3.10" - resolved "https://registry.yarnpkg.com/ftp/-/ftp-0.3.10.tgz#9197d861ad8142f3e63d5a83bfe4c59f7330885d" - dependencies: - readable-stream "1.1.x" - xregexp "2.0.0" - function-bind@^1.0.2, function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" @@ -4068,6 +4506,7 @@ function-bind@^1.0.2, function-bind@^1.1.1: 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" @@ -4078,44 +4517,44 @@ gauge@~2.7.3: strip-ansi "^3.0.1" wide-align "^1.1.0" -gcp-metadata@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/gcp-metadata/-/gcp-metadata-0.7.0.tgz#6c35dbb52bda32a427bb9c98f54237ddd1b5406f" +gaxios@^1.0.2, gaxios@^1.0.4, gaxios@^1.2.1: + version "1.7.0" + resolved "https://registry.yarnpkg.com/gaxios/-/gaxios-1.7.0.tgz#cf1638426411cb362403038e0787105f5bf08d22" + integrity sha512-2SaZTtaEgnSMgRrBVnPA5O9Tc8xWfnL48fuxFL7zOHZwnam3HiNOkoosnRgnkNBZoEZrH1Aja3wMCrrDtOEqUw== dependencies: - axios "^0.18.0" - extend "^3.0.1" - retry-axios "0.3.2" + abort-controller "^2.0.2" + extend "^3.0.2" + https-proxy-agent "^2.2.1" + node-fetch "^2.2.0" -gcs-resumable-upload@^0.13.0: - version "0.13.0" - resolved "https://registry.yarnpkg.com/gcs-resumable-upload/-/gcs-resumable-upload-0.13.0.tgz#706e5c835e4c53cd5527b86013c9f4dda4bfcb14" +gcp-metadata@^0.9.3: + version "0.9.3" + resolved "https://registry.yarnpkg.com/gcp-metadata/-/gcp-metadata-0.9.3.tgz#1f9d7495f7460a14526481f29e11596dd563dd26" + integrity sha512-caV4S84xAjENtpezLCT/GILEAF5h/bC4cNqZFmt/tjTn8t+JBtTkQrgBrJu3857YdsnlM8rxX/PMcKGtE8hUlw== + dependencies: + gaxios "^1.0.2" + json-bigint "^0.3.0" + +gcs-resumable-upload@^0.14.1: + version "0.14.1" + resolved "https://registry.yarnpkg.com/gcs-resumable-upload/-/gcs-resumable-upload-0.14.1.tgz#d0b0b2acc608d63e4164329b0a1231227383b532" + integrity sha512-vkIxLeVyW20DdcyhI8GvOkISV62y7+fKAdelUTn8F5en8AmPduqro5xz3VoHkj/RJ3PQmqNovYYaYPyPHwebzw== dependencies: - axios "^0.18.0" configstore "^4.0.0" - google-auth-library "^2.0.0" + google-auth-library "^3.0.0" pumpify "^1.5.1" request "^2.87.0" stream-events "^1.0.4" -generate-function@^2.0.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.3.1.tgz#f069617690c10c868e73b8465746764f97c3479f" - dependencies: - is-property "^1.0.2" - -generate-object-property@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" - dependencies: - is-property "^1.0.0" - genfun@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/genfun/-/genfun-5.0.0.tgz#9dd9710a06900a5c4a5bf57aca5da4e52fe76537" + integrity sha512-KGDOARWVga7+rnB3z9Sd2Letx515owfk0hSxHGuqjANb1M+x2bGZGqHLiozPsYMdM2OubeMni/Hpwmjq6qIUhA== get-caller-file@^1.0.1, get-caller-file@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" + integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== get-func-name@^2.0.0: version "2.0.0" @@ -4124,6 +4563,7 @@ get-func-name@^2.0.0: get-pkg-repo@^1.0.0: version "1.4.0" resolved "https://registry.yarnpkg.com/get-pkg-repo/-/get-pkg-repo-1.4.0.tgz#c73b489c06d80cc5536c2c853f9e05232056972d" + integrity sha1-xztInAbYDMVTbCyFP54FIyBWly0= dependencies: hosted-git-info "^2.1.4" meow "^3.3.0" @@ -4134,53 +4574,51 @@ get-pkg-repo@^1.0.0: get-port@3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/get-port/-/get-port-3.1.0.tgz#ef01b18a84ca6486970ff99e54446141a73ffd3e" + integrity sha1-7wGxioTKZIaXD/meVERhQac//T4= get-port@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/get-port/-/get-port-3.2.0.tgz#dd7ce7de187c06c8bf353796ac71e099f0980ebc" + integrity sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw= get-stdin@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" + integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= get-stdin@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" + integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g== get-stream@^3.0.0: version "3.0.0" - resolved "http://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= get-stream@^4.0.0, get-stream@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== dependencies: pump "^3.0.0" -get-uri@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-2.0.2.tgz#5c795e71326f6ca1286f2fc82575cd2bab2af578" - dependencies: - data-uri-to-buffer "1" - debug "2" - extend "3" - file-uri-to-path "1" - ftp "~0.3.10" - readable-stream "2" - get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= getpass@^0.1.1: version "0.1.7" resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= dependencies: assert-plus "^1.0.0" git-config-path@^1.0.1: version "1.0.1" - resolved "http://registry.npmjs.org/git-config-path/-/git-config-path-1.0.1.tgz#6d33f7ed63db0d0e118131503bab3aca47d54664" + resolved "https://registry.yarnpkg.com/git-config-path/-/git-config-path-1.0.1.tgz#6d33f7ed63db0d0e118131503bab3aca47d54664" + integrity sha1-bTP37WPbDQ4RgTFQO6s6ykfVRmQ= dependencies: extend-shallow "^2.0.1" fs-exists-sync "^0.1.0" @@ -4189,6 +4627,7 @@ git-config-path@^1.0.1: git-raw-commits@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.0.tgz#d92addf74440c14bcc5c83ecce3fb7f8a79118b5" + integrity sha512-w4jFEJFgKXMQJ0H0ikBk2S+4KP2VEjhCvLCNqbNRQC8BgGWgLKNCO7a9K9LI+TVT7Gfoloje502sEnctibffgg== dependencies: dargs "^4.0.1" lodash.template "^4.0.2" @@ -4199,6 +4638,7 @@ git-raw-commits@2.0.0: git-remote-origin-url@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz#5282659dae2107145a11126112ad3216ec5fa65f" + integrity sha1-UoJlna4hBxRaERJhEq0yFuxfpl8= dependencies: gitconfiglocal "^1.0.0" pify "^2.3.0" @@ -4206,13 +4646,30 @@ git-remote-origin-url@^2.0.0: git-semver-tags@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-2.0.2.tgz#f506ec07caade191ac0c8d5a21bdb8131b4934e3" + integrity sha512-34lMF7Yo1xEmsK2EkbArdoU79umpvm0MfzaDkSNYSJqtM5QLAVTPWgpiXSVI5o/O9EvZPSrP4Zvnec/CqhSd5w== dependencies: meow "^4.0.0" semver "^5.5.0" +git-up@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/git-up/-/git-up-4.0.1.tgz#cb2ef086653640e721d2042fe3104857d89007c0" + integrity sha512-LFTZZrBlrCrGCG07/dm1aCjjpL1z9L3+5aEeI9SBhAqSc+kiA9Or1bgZhQFNppJX6h/f5McrvJt1mQXTFm6Qrw== + dependencies: + is-ssh "^1.3.0" + parse-url "^5.0.0" + +git-url-parse@^11.1.2: + version "11.1.2" + resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-11.1.2.tgz#aff1a897c36cc93699270587bea3dbcbbb95de67" + integrity sha512-gZeLVGY8QVKMIkckncX+iCq2/L8PlwncvDFKiWkBn9EtCfYDbliRTTp6qzyQ1VMdITUfq7293zDzfpjdiGASSQ== + dependencies: + git-up "^4.0.0" + gitconfiglocal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz#41d045f3851a5ea88f03f24ca1c6178114464b9b" + integrity sha1-QdBF84UaXqiPA/JMocYXgRRGS5s= dependencies: ini "^1.3.2" @@ -4232,6 +4689,7 @@ glob-parent@^2.0.0: glob-parent@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= dependencies: is-glob "^3.1.0" path-dirname "^1.0.0" @@ -4239,10 +4697,12 @@ glob-parent@^3.1.0: glob-to-regexp@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" + integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs= glob@7.1.2: version "7.1.2" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" + integrity sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -4264,6 +4724,7 @@ glob@^5.0.15: glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3: version "7.1.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" + integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -4272,33 +4733,41 @@ glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" +globals@^11.1.0: + version "11.11.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.11.0.tgz#dcf93757fa2de5486fbeed7118538adf789e9c2e" + integrity sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw== + globals@^9.18.0: version "9.18.0" resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" globby@^8.0.1: - version "8.0.1" - resolved "http://registry.npmjs.org/globby/-/globby-8.0.1.tgz#b5ad48b8aa80b35b814fc1281ecc851f1d2b5b50" + version "8.0.2" + resolved "https://registry.yarnpkg.com/globby/-/globby-8.0.2.tgz#5697619ccd95c5275dbb2d6faa42087c1a941d8d" + integrity sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w== dependencies: array-union "^1.0.1" - dir-glob "^2.0.0" + dir-glob "2.0.0" fast-glob "^2.0.2" glob "^7.1.2" ignore "^3.3.5" pify "^3.0.0" slash "^1.0.0" -google-auth-library@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/google-auth-library/-/google-auth-library-2.0.1.tgz#32c6215e771538ef826cb65391a984a2c62ba57c" - dependencies: - axios "^0.18.0" - gcp-metadata "^0.7.0" - gtoken "^2.3.0" +google-auth-library@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/google-auth-library/-/google-auth-library-3.1.0.tgz#6378ea3e56067312209eee58223e5a00adaec639" + integrity sha512-EntjrOgSffw5EhZGoV8+ROPwEK/aQpoMZaULw3bKailEGdjaUI25PmmFc4AN6vG/Q24YEUiuLxtTXa1Usar5Eg== + dependencies: + base64-js "^1.3.0" + fast-text-encoding "^1.0.0" + gaxios "^1.2.1" + gcp-metadata "^0.9.3" + gtoken "^2.3.2" https-proxy-agent "^2.2.1" jws "^3.1.5" - lodash.isstring "^4.0.1" - lru-cache "^4.1.3" + lru-cache "^5.0.0" semver "^5.5.0" google-p12-pem@^1.0.0: @@ -4310,7 +4779,8 @@ google-p12-pem@^1.0.0: got@^6.7.1: version "6.7.1" - resolved "http://registry.npmjs.org/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" + resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" + integrity sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA= dependencies: create-error-class "^3.0.0" duplexer3 "^0.1.4" @@ -4324,31 +4794,36 @@ got@^6.7.1: unzip-response "^2.0.1" url-parse-lax "^1.0.0" -graceful-fs@^4.1.0, graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6: +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6: version "4.1.15" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" + integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA== -growl@1.10.3: - version "1.10.3" - resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.3.tgz#1926ba90cf3edfe2adb4927f5880bc22c66c790f" +growl@1.10.5: + version "1.10.5" + resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" + integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== growly@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" + integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= -gtoken@^2.3.0: - version "2.3.0" - resolved "http://registry.npmjs.org/gtoken/-/gtoken-2.3.0.tgz#4e0ffc16432d7041a1b3dbc1d97aac17a5dc964a" +gtoken@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/gtoken/-/gtoken-2.3.2.tgz#49890a866c1f44e173099be95515db5872a92151" + integrity sha512-F8EObUGyC8Qd3WXTloNULZBwfUsOABoHElihB1F6zGhT/cy38iPL09wGLRY712I+hQnOyA+sYlgPFX2cOKz0qg== dependencies: - axios "^0.18.0" + gaxios "^1.0.4" google-p12-pem "^1.0.0" - jws "^3.1.4" + jws "^3.1.5" mime "^2.2.0" - pify "^3.0.0" + pify "^4.0.0" handlebars@4.0.10: version "4.0.10" resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.10.tgz#3d30c718b09a3d96f23ea4cc1f403c4d3ba9ff4f" + integrity sha1-PTDHGLCaPZbyPqTMH0A8TTup/08= dependencies: async "^1.4.0" optimist "^0.6.1" @@ -4356,7 +4831,7 @@ handlebars@4.0.10: optionalDependencies: uglify-js "^2.6" -handlebars@^4.0.1, handlebars@^4.0.2, handlebars@^4.0.3, handlebars@^4.0.6: +handlebars@^4.0.1: version "4.0.12" resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.12.tgz#2c15c8a96d46da5e266700518ba8cb8d919d5bc5" dependencies: @@ -4366,22 +4841,26 @@ handlebars@^4.0.1, handlebars@^4.0.2, handlebars@^4.0.3, handlebars@^4.0.6: optionalDependencies: uglify-js "^3.1.4" +handlebars@^4.0.6, handlebars@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.1.0.tgz#0d6a6f34ff1f63cecec8423aa4169827bf787c3a" + integrity sha512-l2jRuU1NAWK6AW5qqcTATWQJvNPEwkM7NEKSiv/gqOsoSQbVoWyqVEY5GS+XPQ88zLNmqASRpzfdm8d79hJS+w== + dependencies: + async "^2.5.0" + optimist "^0.6.1" + source-map "^0.6.1" + optionalDependencies: + uglify-js "^3.1.4" + har-schema@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - -har-validator@~2.0.6: - version "2.0.6" - resolved "http://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d" - dependencies: - chalk "^1.1.1" - commander "^2.9.0" - is-my-json-valid "^2.12.4" - pinkie-promise "^2.0.0" + integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= har-validator@~5.1.0: version "5.1.3" resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" + integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== dependencies: ajv "^6.5.5" har-schema "^2.0.0" @@ -4409,22 +4888,27 @@ has-flag@^1.0.0: has-flag@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" + integrity sha1-6CB68cx7MNRGzHC3NLXovhj4jVE= 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-symbols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" + integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= has-unicode@^2.0.0, has-unicode@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= has-value@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= dependencies: get-value "^2.0.3" has-values "^0.1.4" @@ -4433,6 +4917,7 @@ has-value@^0.3.1: has-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= dependencies: get-value "^2.0.6" has-values "^1.0.0" @@ -4441,17 +4926,20 @@ has-value@^1.0.0: has-values@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= has-values@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= dependencies: is-number "^3.0.0" kind-of "^4.0.0" -has@^1.0.1: +has@^1.0.1, has@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== dependencies: function-bind "^1.1.1" @@ -4475,29 +4963,15 @@ hash.js@^1.0.0, hash.js@^1.0.3: inherits "^2.0.3" minimalistic-assert "^1.0.1" -hawk@~3.1.3: - version "3.1.3" - resolved "http://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" - dependencies: - boom "2.x.x" - cryptiles "2.x.x" - hoek "2.x.x" - sntp "1.x.x" - he@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" + integrity sha1-k0EP0hsAlzUVH4howvJx80J+I/0= -highlight.js@^9.0.0, highlight.js@^9.12.0: - version "9.13.1" - resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.13.1.tgz#054586d53a6863311168488a0f58d6c505ce641e" - -hipchat-notifier@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/hipchat-notifier/-/hipchat-notifier-1.1.0.tgz#b6d249755437c191082367799d3ba9a0f23b231e" - dependencies: - lodash "^4.0.0" - request "^2.0.0" +highlight.js@^9.12.0, highlight.js@^9.13.1: + version "9.14.2" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.14.2.tgz#efbfb22dc701406e4da406056ef8c2b70ebe5b26" + integrity sha512-Nc6YNECYpxyJABGYJAyw7dBAYbXEuIzwzkqoJnwbc1nIpCiN+3ioYf0XrBnLiyyG0JLuJhpPtt2iTSbXiKLoyA== hmac-drbg@^1.0.0: version "1.0.1" @@ -4507,10 +4981,6 @@ hmac-drbg@^1.0.0: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" -hoek@2.x.x: - version "2.16.3" - resolved "http://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" - home-or-tmp@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" @@ -4521,26 +4991,31 @@ home-or-tmp@^2.0.0: homedir-polyfill@^1.0.0, homedir-polyfill@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz#4c2bbc8a758998feebf5ed68580f76d46768b4bc" + integrity sha1-TCu8inWJmP7r9e1oWA921GdotLw= dependencies: parse-passwd "^1.0.0" hosted-git-info@^2.1.4, hosted-git-info@^2.6.0: version "2.7.1" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" + integrity sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w== html-encoding-sniffer@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" + integrity sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw== dependencies: whatwg-encoding "^1.0.1" http-cache-semantics@^3.8.1: version "3.8.1" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" + integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w== http-errors@1.6.3, http-errors@~1.6.1, http-errors@~1.6.2, http-errors@~1.6.3: version "1.6.3" - resolved "http://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= dependencies: depd "~1.1.2" inherits "2.0.3" @@ -4550,6 +5025,7 @@ http-errors@1.6.3, http-errors@~1.6.1, http-errors@~1.6.2, http-errors@~1.6.3: http-proxy-agent@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405" + integrity sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg== dependencies: agent-base "4" debug "3.1.0" @@ -4562,38 +5038,20 @@ http-proxy@^1.13.0: follow-redirects "^1.0.0" requires-port "^1.0.0" -http-signature@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" - dependencies: - assert-plus "^0.2.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - http-signature@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= dependencies: assert-plus "^1.0.0" jsprim "^1.2.2" sshpk "^1.7.0" -httpntlm@1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/httpntlm/-/httpntlm-1.6.1.tgz#ad01527143a2e8773cfae6a96f58656bb52a34b2" - dependencies: - httpreq ">=0.4.22" - underscore "~1.7.0" - -httpreq@>=0.4.22: - version "0.4.24" - resolved "https://registry.yarnpkg.com/httpreq/-/httpreq-0.4.24.tgz#4335ffd82cd969668a39465c929ac61d6393627f" - https-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" -https-proxy-agent@2.2.1, https-proxy-agent@^2.2.0, https-proxy-agent@^2.2.1: +https-proxy-agent@2.2.1, https-proxy-agent@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz#51552970fa04d723e04c56d04178c3f92592bbc0" dependencies: @@ -4603,16 +5061,19 @@ https-proxy-agent@2.2.1, https-proxy-agent@^2.2.0, https-proxy-agent@^2.2.1: humanize-ms@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + integrity sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0= dependencies: ms "^2.0.0" hyperlinker@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/hyperlinker/-/hyperlinker-1.0.0.tgz#23dc9e38a206b208ee49bc2d6c8ef47027df0c0e" + integrity sha512-Ty8UblRWFEcfSuIaajM34LdPXIhbs1ajEX/BBPv24J+enSVaEVY63xQ6lTO9VRYS5LAoghIG0IDJ+p+IPzKUQQ== iconv-lite@0.4.15: version "0.4.15" - resolved "http://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb" + integrity sha1-/iZaIYrGpXz+hUkn6dBMGYJe3es= iconv-lite@0.4.23: version "0.4.23" @@ -4623,6 +5084,7 @@ iconv-lite@0.4.23: iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4, iconv-lite@~0.4.13: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" @@ -4633,20 +5095,29 @@ ieee754@^1.1.4: iferr@^0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" + integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= ignore-walk@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" + integrity sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ== dependencies: minimatch "^3.0.4" ignore@^3.3.5: version "3.3.10" resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" + integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug== + +immediate@~3.0.5: + version "3.0.6" + resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" + integrity sha1-nbHb0Pr43m++D13V5Wu2BigN5ps= import-fresh@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" + integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= dependencies: caller-path "^2.0.0" resolve-from "^3.0.0" @@ -4654,43 +5125,49 @@ import-fresh@^2.0.0: import-lazy@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" + integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= import-local@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/import-local/-/import-local-1.0.0.tgz#5e4ffdc03f4fe6c009c6729beb29631c2f8227bc" + integrity sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ== dependencies: pkg-dir "^2.0.0" resolve-cwd "^2.0.0" +import-local@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" + integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== + dependencies: + pkg-dir "^3.0.0" + resolve-cwd "^2.0.0" + imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= indent-string@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" + integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA= dependencies: repeating "^2.0.0" indent-string@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" + integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= indexof@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" -inflection@~1.12.0: - version "1.12.0" - resolved "https://registry.yarnpkg.com/inflection/-/inflection-1.12.0.tgz#a200935656d6f5f6bc4dc7502e1aecb703228416" - -inflection@~1.3.0: - version "1.3.8" - resolved "https://registry.yarnpkg.com/inflection/-/inflection-1.3.8.tgz#cbd160da9f75b14c3cc63578d4f396784bf3014e" - inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= dependencies: once "^1.3.0" wrappy "1" @@ -4706,10 +5183,12 @@ inherits@2.0.1: ini@^1.3.2, ini@^1.3.4, ini@^1.3.5, 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== init-package-json@^1.10.3: version "1.10.3" resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-1.10.3.tgz#45ffe2f610a8ca134f2bd1db5637b235070f6cbe" + integrity sha512-zKSiXKhQveNteyhcj1CoOP8tqp1QuxPIPBl8Bid99DGLFqA1p87M6lNgfjJHSBoWJJlidGOv5rWjyYKEB3g2Jw== dependencies: glob "^7.1.1" npm-package-arg "^4.0.0 || ^5.0.0 || ^6.0.0" @@ -4727,26 +5206,28 @@ inline-source-map@~0.6.0: source-map "~0.5.3" inquirer@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.2.0.tgz#51adcd776f661369dc1e894859c2560a224abdd8" + version "6.2.2" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.2.2.tgz#46941176f65c9eb20804627149b743a218f25406" + integrity sha512-Z2rREiXA6cHRR9KBOarR3WuLlFzlIfAEIiB45ll5SSadMg7WqOh1MKEjjndfuH5ewXdixWCxqnVfGOQzPeiztA== dependencies: - ansi-escapes "^3.0.0" - chalk "^2.0.0" + ansi-escapes "^3.2.0" + chalk "^2.4.2" cli-cursor "^2.1.0" cli-width "^2.0.0" - external-editor "^3.0.0" + external-editor "^3.0.3" figures "^2.0.0" - lodash "^4.17.10" + lodash "^4.17.11" mute-stream "0.0.7" run-async "^2.2.0" - rxjs "^6.1.0" + rxjs "^6.4.0" string-width "^2.1.0" - strip-ansi "^4.0.0" + strip-ansi "^5.0.0" through "^2.3.6" interpret@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614" + version "1.2.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" + integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw== invariant@^2.2.2, invariant@^2.2.4: version "2.2.4" @@ -4757,14 +5238,17 @@ invariant@^2.2.2, invariant@^2.2.4: invert-kv@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" + integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= invert-kv@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" + integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== -ip@1.1.5, ip@^1.1.2, ip@^1.1.5: +ip@1.1.5, ip@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" + integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= ipaddr.js@1.8.0: version "1.8.0" @@ -4773,22 +5257,26 @@ ipaddr.js@1.8.0: is-accessor-descriptor@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= dependencies: kind-of "^3.0.2" is-accessor-descriptor@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== dependencies: kind-of "^6.0.0" is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= is-async-supported@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/is-async-supported/-/is-async-supported-1.2.0.tgz#20d58ac4d6707eb1cb3712dd38480c0536f27c07" + integrity sha1-INWKxNZwfrHLNxLdOEgMBTbyfAc= is-binary-path@^1.0.0: version "1.0.1" @@ -4799,42 +5287,50 @@ is-binary-path@^1.0.0: is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - -is-builtin-module@^1.0.0: - version "1.0.0" - resolved "http://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" - dependencies: - builtin-modules "^1.0.0" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== is-callable@^1.1.3, is-callable@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" + integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== is-ci@^1.0.10: version "1.2.1" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" + integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg== dependencies: ci-info "^1.5.0" +is-ci@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== + dependencies: + ci-info "^2.0.0" + is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= dependencies: kind-of "^3.0.2" is-data-descriptor@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== dependencies: kind-of "^6.0.0" is-date-object@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" + integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= is-descriptor@^0.1.0: version "0.1.6" resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== dependencies: is-accessor-descriptor "^0.1.6" is-data-descriptor "^0.1.4" @@ -4843,6 +5339,7 @@ is-descriptor@^0.1.0: is-descriptor@^1.0.0, is-descriptor@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== dependencies: is-accessor-descriptor "^1.0.0" is-data-descriptor "^1.0.0" @@ -4851,6 +5348,7 @@ is-descriptor@^1.0.0, is-descriptor@^1.0.2: is-directory@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" + integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= is-dotfile@^1.0.0: version "1.0.3" @@ -4865,10 +5363,12 @@ is-equal-shallow@^0.1.3: is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= is-extendable@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== dependencies: is-plain-object "^2.0.4" @@ -4879,26 +5379,31 @@ is-extglob@^1.0.0: is-extglob@^2.1.0, is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= is-finite@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" + integrity sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko= dependencies: number-is-nan "^1.0.0" is-fullwidth-code-point@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= dependencies: number-is-nan "^1.0.0" is-fullwidth-code-point@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= -is-generator-fn@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-1.0.0.tgz#969d49e1bb3329f6bb7f09089be26578b2ddd46a" +is-generator-fn@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.0.0.tgz#038c31b774709641bda678b1f06a4e3227c10b3e" + integrity sha512-elzyIdM7iKoFHzcrndIqjYomImhxrFRnGP3galODoII4TB9gI7mZ+FnlLQmmjf27SxHS2gKEeyhX5/+YRS6H9g== is-glob@^2.0.0, is-glob@^2.0.1: version "2.0.1" @@ -4909,12 +5414,14 @@ is-glob@^2.0.0, is-glob@^2.0.1: is-glob@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= dependencies: is-extglob "^2.1.0" is-glob@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0" + integrity sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A= dependencies: is-extglob "^2.1.1" @@ -4922,23 +5429,10 @@ is-module@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" -is-my-ip-valid@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz#7b351b8e8edd4d3995d4d066680e664d94696824" - -is-my-json-valid@^2.12.4: - version "2.19.0" - resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.19.0.tgz#8fd6e40363cd06b963fa877d444bfb5eddc62175" - dependencies: - generate-function "^2.0.0" - generate-object-property "^1.1.0" - is-my-ip-valid "^1.0.0" - jsonpointer "^4.0.0" - xtend "^4.0.0" - is-npm@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" + integrity sha1-8vtjpl5JBbQGyGBydloaTceTufQ= is-number@^0.1.1: version "0.1.1" @@ -4953,6 +5447,7 @@ is-number@^2.1.0: is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= dependencies: kind-of "^3.0.2" @@ -4962,15 +5457,18 @@ is-number@^4.0.0: is-obj@^1.0.0: version "1.0.1" - resolved "http://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== dependencies: isobject "^3.0.1" @@ -4985,24 +5483,31 @@ is-primitive@^2.0.0: is-promise@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" - -is-property@^1.0.0, is-property@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" + integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= is-redirect@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" + integrity sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ= is-regex@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" + integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE= dependencies: has "^1.0.1" is-retry-allowed@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" + integrity sha1-EaBgVotnM5REAz0BJaYaINVk+zQ= + +is-ssh@^1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.3.1.tgz#f349a8cadd24e65298037a522cf7520f2e81a0f3" + integrity sha512-0eRIASHZt1E68/ixClI8bp2YK2wmBPVWEismTs6M+M099jKgrzl/3E976zIbImSIob48N2/XGe9y7ZiYdImSlg== + dependencies: + protocols "^1.1.0" is-stream-ended@^0.1.4: version "0.1.4" @@ -5015,34 +5520,41 @@ is-stream@^1.0.0, is-stream@^1.1.0: is-subset@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-subset/-/is-subset-0.1.1.tgz#8a59117d932de1de00f245fcdd39ce43f1e939a6" + integrity sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY= is-symbol@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" + integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw== dependencies: has-symbols "^1.0.0" is-text-path@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e" + integrity sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4= dependencies: text-extensions "^1.0.0" is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= is-utf8@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== is-wsl@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" + integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= is@^3.2.1: version "3.2.1" @@ -5055,6 +5567,7 @@ isarray@0.0.1: isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= isarray@2.0.1: version "2.0.1" @@ -5069,83 +5582,94 @@ isbinaryfile@^3.0.0: isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= isobject@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= dependencies: isarray "1.0.0" isobject@^3.0.0, isobject@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= isstream@0.1.2, isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" -istanbul-api@^1.1.14, istanbul-api@^1.3.1: - version "1.3.7" - resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.3.7.tgz#a86c770d2b03e11e3f778cd7aedd82d2722092aa" - dependencies: - async "^2.1.4" - fileset "^2.0.2" - istanbul-lib-coverage "^1.2.1" - istanbul-lib-hook "^1.2.2" - istanbul-lib-instrument "^1.10.2" - istanbul-lib-report "^1.1.5" - istanbul-lib-source-maps "^1.2.6" - istanbul-reports "^1.5.1" - js-yaml "^3.7.0" - mkdirp "^0.5.1" +istanbul-api@^2.0.8: + version "2.1.1" + resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-2.1.1.tgz#194b773f6d9cbc99a9258446848b0f988951c4d0" + integrity sha512-kVmYrehiwyeBAk/wE71tW6emzLiHGjYIiDrc8sfyty4F8M02/lrgXSm+R1kXysmF20zArvmZXjlE/mg24TVPJw== + dependencies: + async "^2.6.1" + compare-versions "^3.2.1" + fileset "^2.0.3" + istanbul-lib-coverage "^2.0.3" + istanbul-lib-hook "^2.0.3" + istanbul-lib-instrument "^3.1.0" + istanbul-lib-report "^2.0.4" + istanbul-lib-source-maps "^3.0.2" + istanbul-reports "^2.1.1" + js-yaml "^3.12.0" + make-dir "^1.3.0" + minimatch "^3.0.4" once "^1.4.0" -istanbul-lib-coverage@^1.1.1, istanbul-lib-coverage@^1.2.0, istanbul-lib-coverage@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz#ccf7edcd0a0bb9b8f729feeb0930470f9af664f0" +istanbul-lib-coverage@^2.0.2, istanbul-lib-coverage@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#0b891e5ad42312c2b9488554f603795f9a2211ba" + integrity sha512-dKWuzRGCs4G+67VfW9pBFFz2Jpi4vSp/k7zBcJ888ofV5Mi1g5CUML5GvMvV6u9Cjybftu+E8Cgp+k0dI1E5lw== -istanbul-lib-hook@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.2.2.tgz#bc6bf07f12a641fbf1c85391d0daa8f0aea6bf86" +istanbul-lib-hook@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-2.0.3.tgz#e0e581e461c611be5d0e5ef31c5f0109759916fb" + integrity sha512-CLmEqwEhuCYtGcpNVJjLV1DQyVnIqavMLFHV/DP+np/g3qvdxu3gsPqYoJMXm15sN84xOlckFB3VNvRbf5yEgA== dependencies: - append-transform "^0.4.0" + append-transform "^1.0.0" -istanbul-lib-instrument@^1.10.1, istanbul-lib-instrument@^1.10.2, istanbul-lib-instrument@^1.8.0: - version "1.10.2" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz#1f55ed10ac3c47f2bdddd5307935126754d0a9ca" - dependencies: - babel-generator "^6.18.0" - babel-template "^6.16.0" - babel-traverse "^6.18.0" - babel-types "^6.18.0" - babylon "^6.18.0" - istanbul-lib-coverage "^1.2.1" - semver "^5.3.0" +istanbul-lib-instrument@^3.0.0, istanbul-lib-instrument@^3.0.1, istanbul-lib-instrument@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-3.1.0.tgz#a2b5484a7d445f1f311e93190813fa56dfb62971" + integrity sha512-ooVllVGT38HIk8MxDj/OIHXSYvH+1tq/Vb38s8ixt9GoJadXska4WkGY+0wkmtYCZNYtaARniH/DixUGGLZ0uA== + dependencies: + "@babel/generator" "^7.0.0" + "@babel/parser" "^7.0.0" + "@babel/template" "^7.0.0" + "@babel/traverse" "^7.0.0" + "@babel/types" "^7.0.0" + istanbul-lib-coverage "^2.0.3" + semver "^5.5.0" -istanbul-lib-report@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.5.tgz#f2a657fc6282f96170aaf281eb30a458f7f4170c" +istanbul-lib-report@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-2.0.4.tgz#bfd324ee0c04f59119cb4f07dab157d09f24d7e4" + integrity sha512-sOiLZLAWpA0+3b5w5/dq0cjm2rrNdAfHWaGhmn7XEFW6X++IV9Ohn+pnELAl9K3rfpaeBfbmH9JU5sejacdLeA== dependencies: - istanbul-lib-coverage "^1.2.1" - mkdirp "^0.5.1" - path-parse "^1.0.5" - supports-color "^3.1.2" + istanbul-lib-coverage "^2.0.3" + make-dir "^1.3.0" + supports-color "^6.0.0" -istanbul-lib-source-maps@^1.2.1, istanbul-lib-source-maps@^1.2.4, istanbul-lib-source-maps@^1.2.6: - version "1.2.6" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.6.tgz#37b9ff661580f8fca11232752ee42e08c6675d8f" +istanbul-lib-source-maps@^3.0.1, istanbul-lib-source-maps@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.2.tgz#f1e817229a9146e8424a28e5d69ba220fda34156" + integrity sha512-JX4v0CiKTGp9fZPmoxpu9YEkPbEqCqBbO3403VabKjH+NRXo72HafD5UgnjTEqHL2SAjaZK1XDuDOkn6I5QVfQ== dependencies: - debug "^3.1.0" - istanbul-lib-coverage "^1.2.1" - mkdirp "^0.5.1" - rimraf "^2.6.1" - source-map "^0.5.3" + debug "^4.1.1" + istanbul-lib-coverage "^2.0.3" + make-dir "^1.3.0" + rimraf "^2.6.2" + source-map "^0.6.1" -istanbul-reports@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.5.1.tgz#97e4dbf3b515e8c484caea15d6524eebd3ff4e1a" +istanbul-reports@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-2.1.1.tgz#72ef16b4ecb9a4a7bd0e2001e00f95d1eec8afa9" + integrity sha512-FzNahnidyEPBCI0HcufJoSEoKykesRlFcSzQqjH9x0+LC8tnnE/p/90PBLu8iZTxr8yYZNyTtiAujUqyN+CIxw== dependencies: - handlebars "^4.0.3" + handlebars "^4.1.0" istanbul@0.4.5, istanbul@^0.4.0: version "0.4.5" @@ -5166,573 +5690,368 @@ istanbul@0.4.5, istanbul@^0.4.0: which "^1.1.1" wordwrap "^1.0.0" -jest-changed-files@^22.2.0: - version "22.4.3" - resolved "http://registry.npmjs.org/jest-changed-files/-/jest-changed-files-22.4.3.tgz#8882181e022c38bd46a2e4d18d44d19d90a90fb2" - dependencies: - throat "^4.0.0" - -jest-changed-files@^23.4.2: - version "23.4.2" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-23.4.2.tgz#1eed688370cd5eebafe4ae93d34bb3b64968fe83" +jest-changed-files@^24.0.0: + version "24.0.0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-24.0.0.tgz#c02c09a8cc9ca93f513166bc773741bd39898ff7" + integrity sha512-nnuU510R9U+UX0WNb5XFEcsrMqriSiRLeO9KWDFgPrpToaQm60prfQYpxsXigdClpvNot5bekDY440x9dNGnsQ== dependencies: + execa "^1.0.0" throat "^4.0.0" -jest-cli@^22.4.4: - version "22.4.4" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-22.4.4.tgz#68cd2a2aae983adb1e6638248ca21082fd6d9e90" - dependencies: - ansi-escapes "^3.0.0" - chalk "^2.0.1" - exit "^0.1.2" - glob "^7.1.2" - graceful-fs "^4.1.11" - import-local "^1.0.0" - is-ci "^1.0.10" - istanbul-api "^1.1.14" - istanbul-lib-coverage "^1.1.1" - istanbul-lib-instrument "^1.8.0" - istanbul-lib-source-maps "^1.2.1" - jest-changed-files "^22.2.0" - jest-config "^22.4.4" - jest-environment-jsdom "^22.4.1" - jest-get-type "^22.1.0" - jest-haste-map "^22.4.2" - jest-message-util "^22.4.0" - jest-regex-util "^22.1.0" - jest-resolve-dependencies "^22.1.0" - jest-runner "^22.4.4" - jest-runtime "^22.4.4" - jest-snapshot "^22.4.0" - jest-util "^22.4.1" - jest-validate "^22.4.4" - jest-worker "^22.2.2" - micromatch "^2.3.11" - node-notifier "^5.2.1" - realpath-native "^1.0.0" - rimraf "^2.5.4" - slash "^1.0.0" - string-length "^2.0.0" - strip-ansi "^4.0.0" - which "^1.2.12" - yargs "^10.0.3" - -jest-cli@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-23.6.0.tgz#61ab917744338f443ef2baa282ddffdd658a5da4" +jest-cli@^24.1.0: + version "24.1.0" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-24.1.0.tgz#f7cc98995f36e7210cce3cbb12974cbf60940843" + integrity sha512-U/iyWPwOI0T1CIxVLtk/2uviOTJ/OiSWJSe8qt6X1VkbbgP+nrtLJlmT9lPBe4lK78VNFJtrJ7pttcNv/s7yCw== dependencies: ansi-escapes "^3.0.0" chalk "^2.0.1" exit "^0.1.2" glob "^7.1.2" - graceful-fs "^4.1.11" - import-local "^1.0.0" - is-ci "^1.0.10" - istanbul-api "^1.3.1" - istanbul-lib-coverage "^1.2.0" - istanbul-lib-instrument "^1.10.1" - istanbul-lib-source-maps "^1.2.4" - jest-changed-files "^23.4.2" - jest-config "^23.6.0" - jest-environment-jsdom "^23.4.0" - jest-get-type "^22.1.0" - jest-haste-map "^23.6.0" - jest-message-util "^23.4.0" - jest-regex-util "^23.3.0" - jest-resolve-dependencies "^23.6.0" - jest-runner "^23.6.0" - jest-runtime "^23.6.0" - jest-snapshot "^23.6.0" - jest-util "^23.4.0" - jest-validate "^23.6.0" - jest-watcher "^23.4.0" - jest-worker "^23.2.0" - micromatch "^2.3.11" + graceful-fs "^4.1.15" + import-local "^2.0.0" + is-ci "^2.0.0" + istanbul-api "^2.0.8" + istanbul-lib-coverage "^2.0.2" + istanbul-lib-instrument "^3.0.1" + istanbul-lib-source-maps "^3.0.1" + jest-changed-files "^24.0.0" + jest-config "^24.1.0" + jest-environment-jsdom "^24.0.0" + jest-get-type "^24.0.0" + jest-haste-map "^24.0.0" + jest-message-util "^24.0.0" + jest-regex-util "^24.0.0" + jest-resolve-dependencies "^24.1.0" + jest-runner "^24.1.0" + jest-runtime "^24.1.0" + jest-snapshot "^24.1.0" + jest-util "^24.0.0" + jest-validate "^24.0.0" + jest-watcher "^24.0.0" + jest-worker "^24.0.0" + micromatch "^3.1.10" node-notifier "^5.2.1" - prompts "^0.1.9" + p-each-series "^1.0.0" + pirates "^4.0.0" + prompts "^2.0.1" realpath-native "^1.0.0" rimraf "^2.5.4" - slash "^1.0.0" + slash "^2.0.0" string-length "^2.0.0" - strip-ansi "^4.0.0" + strip-ansi "^5.0.0" which "^1.2.12" - yargs "^11.0.0" + yargs "^12.0.2" -jest-config@^22.4.4: - version "22.4.4" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-22.4.4.tgz#72a521188720597169cd8b4ff86934ef5752d86a" +jest-config@^24.1.0: + version "24.1.0" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-24.1.0.tgz#6ea6881cfdd299bc86cc144ee36d937c97c3850c" + integrity sha512-FbbRzRqtFC6eGjG5VwsbW4E5dW3zqJKLWYiZWhB0/4E5fgsMw8GODLbGSrY5t17kKOtCWb/Z7nsIThRoDpuVyg== dependencies: + "@babel/core" "^7.1.0" + babel-jest "^24.1.0" chalk "^2.0.1" glob "^7.1.1" - jest-environment-jsdom "^22.4.1" - jest-environment-node "^22.4.1" - jest-get-type "^22.1.0" - jest-jasmine2 "^22.4.4" - jest-regex-util "^22.1.0" - jest-resolve "^22.4.2" - jest-util "^22.4.1" - jest-validate "^22.4.4" - pretty-format "^22.4.0" - -jest-config@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-23.6.0.tgz#f82546a90ade2d8c7026fbf6ac5207fc22f8eb1d" - dependencies: - babel-core "^6.0.0" - babel-jest "^23.6.0" - chalk "^2.0.1" - glob "^7.1.1" - jest-environment-jsdom "^23.4.0" - jest-environment-node "^23.4.0" - jest-get-type "^22.1.0" - jest-jasmine2 "^23.6.0" - jest-regex-util "^23.3.0" - jest-resolve "^23.6.0" - jest-util "^23.4.0" - jest-validate "^23.6.0" - micromatch "^2.3.11" - pretty-format "^23.6.0" - -jest-diff@^22.4.0, jest-diff@^22.4.3: - version "22.4.3" - resolved "http://registry.npmjs.org/jest-diff/-/jest-diff-22.4.3.tgz#e18cc3feff0aeef159d02310f2686d4065378030" - dependencies: - chalk "^2.0.1" - diff "^3.2.0" - jest-get-type "^22.4.3" - pretty-format "^22.4.3" + jest-environment-jsdom "^24.0.0" + jest-environment-node "^24.0.0" + jest-get-type "^24.0.0" + jest-jasmine2 "^24.1.0" + jest-regex-util "^24.0.0" + jest-resolve "^24.1.0" + jest-util "^24.0.0" + jest-validate "^24.0.0" + micromatch "^3.1.10" + pretty-format "^24.0.0" + realpath-native "^1.0.2" -jest-diff@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-23.6.0.tgz#1500f3f16e850bb3d71233408089be099f610c7d" +jest-diff@^24.0.0: + version "24.0.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-24.0.0.tgz#a3e5f573dbac482f7d9513ac9cfa21644d3d6b34" + integrity sha512-XY5wMpRaTsuMoU+1/B2zQSKQ9RdE9gsLkGydx3nvApeyPijLA8GtEvIcPwISRCer+VDf9W1mStTYYq6fPt8ryA== dependencies: chalk "^2.0.1" - diff "^3.2.0" - jest-get-type "^22.1.0" - pretty-format "^23.6.0" - -jest-docblock@^22.4.0, jest-docblock@^22.4.3: - version "22.4.3" - resolved "http://registry.npmjs.org/jest-docblock/-/jest-docblock-22.4.3.tgz#50886f132b42b280c903c592373bb6e93bb68b19" - dependencies: - detect-newline "^2.1.0" + diff-sequences "^24.0.0" + jest-get-type "^24.0.0" + pretty-format "^24.0.0" -jest-docblock@^23.2.0: - version "23.2.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-23.2.0.tgz#f085e1f18548d99fdd69b20207e6fd55d91383a7" +jest-docblock@^24.0.0: + version "24.0.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-24.0.0.tgz#54d77a188743e37f62181a91a01eb9222289f94e" + integrity sha512-KfAKZ4SN7CFOZpWg4i7g7MSlY0M+mq7K0aMqENaG2vHuhC9fc3vkpU/iNN9sOus7v3h3Y48uEjqz3+Gdn2iptA== dependencies: detect-newline "^2.1.0" -jest-each@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-23.6.0.tgz#ba0c3a82a8054387016139c733a05242d3d71575" +jest-each@^24.0.0: + version "24.0.0" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-24.0.0.tgz#10987a06b21c7ffbfb7706c89d24c52ed864be55" + integrity sha512-gFcbY4Cu55yxExXMkjrnLXov3bWO3dbPAW7HXb31h/DNWdNc/6X8MtxGff8nh3/MjkF9DpVqnj0KsPKuPK0cpA== dependencies: chalk "^2.0.1" - pretty-format "^23.6.0" + jest-get-type "^24.0.0" + jest-util "^24.0.0" + pretty-format "^24.0.0" -jest-environment-jsdom@^22.4.1: - version "22.4.3" - resolved "http://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-22.4.3.tgz#d67daa4155e33516aecdd35afd82d4abf0fa8a1e" +jest-environment-jsdom@^24.0.0: + version "24.0.0" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-24.0.0.tgz#5affa0654d6e44cd798003daa1a8701dbd6e4d11" + integrity sha512-1YNp7xtxajTRaxbylDc2pWvFnfDTH5BJJGyVzyGAKNt/lEULohwEV9zFqTgG4bXRcq7xzdd+sGFws+LxThXXOw== dependencies: - jest-mock "^22.4.3" - jest-util "^22.4.3" + jest-mock "^24.0.0" + jest-util "^24.0.0" jsdom "^11.5.1" -jest-environment-jsdom@^23.4.0: - version "23.4.0" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-23.4.0.tgz#056a7952b3fea513ac62a140a2c368c79d9e6023" +jest-environment-node@^24.0.0: + version "24.0.0" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-24.0.0.tgz#330948980656ed8773ce2e04eb597ed91e3c7190" + integrity sha512-62fOFcaEdU0VLaq8JL90TqwI7hLn0cOKOl8vY2n477vRkCJRojiRRtJVRzzCcgFvs6gqU97DNqX5R0BrBP6Rxg== dependencies: - jest-mock "^23.2.0" - jest-util "^23.4.0" - jsdom "^11.5.1" + jest-mock "^24.0.0" + jest-util "^24.0.0" -jest-environment-node@^22.4.1: - version "22.4.3" - resolved "http://registry.npmjs.org/jest-environment-node/-/jest-environment-node-22.4.3.tgz#54c4eaa374c83dd52a9da8759be14ebe1d0b9129" - dependencies: - jest-mock "^22.4.3" - jest-util "^22.4.3" - -jest-environment-node@^23.4.0: - version "23.4.0" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-23.4.0.tgz#57e80ed0841dea303167cce8cd79521debafde10" - dependencies: - jest-mock "^23.2.0" - jest-util "^23.4.0" - -jest-get-type@^22.1.0, jest-get-type@^22.4.3: - version "22.4.3" - resolved "http://registry.npmjs.org/jest-get-type/-/jest-get-type-22.4.3.tgz#e3a8504d8479342dd4420236b322869f18900ce4" - -jest-haste-map@^22.4.2: - version "22.4.3" - resolved "http://registry.npmjs.org/jest-haste-map/-/jest-haste-map-22.4.3.tgz#25842fa2ba350200767ac27f658d58b9d5c2e20b" - dependencies: - fb-watchman "^2.0.0" - graceful-fs "^4.1.11" - jest-docblock "^22.4.3" - jest-serializer "^22.4.3" - jest-worker "^22.4.3" - micromatch "^2.3.11" - sane "^2.0.0" +jest-get-type@^24.0.0: + version "24.0.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-24.0.0.tgz#36e72930b78e33da59a4f63d44d332188278940b" + integrity sha512-z6/Eyf6s9ZDGz7eOvl+fzpuJmN9i0KyTt1no37/dHu8galssxz5ZEgnc1KaV8R31q1khxyhB4ui/X5ZjjPk77w== -jest-haste-map@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-23.6.0.tgz#2e3eb997814ca696d62afdb3f2529f5bbc935e16" +jest-haste-map@^24.0.0: + version "24.0.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-24.0.0.tgz#e9ef51b2c9257384b4d6beb83bd48c65b37b5e6e" + integrity sha512-CcViJyUo41IQqttLxXVdI41YErkzBKbE6cS6dRAploCeutePYfUimWd3C9rQEWhX0YBOQzvNsC0O9nYxK2nnxQ== dependencies: fb-watchman "^2.0.0" - graceful-fs "^4.1.11" + graceful-fs "^4.1.15" invariant "^2.2.4" - jest-docblock "^23.2.0" - jest-serializer "^23.0.1" - jest-worker "^23.2.0" - micromatch "^2.3.11" - sane "^2.0.0" + jest-serializer "^24.0.0" + jest-util "^24.0.0" + jest-worker "^24.0.0" + micromatch "^3.1.10" + sane "^3.0.0" -jest-jasmine2@^22.4.4: - version "22.4.4" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-22.4.4.tgz#c55f92c961a141f693f869f5f081a79a10d24e23" +jest-jasmine2@^24.1.0: + version "24.1.0" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-24.1.0.tgz#8377324b967037c440f0a549ee0bbd9912055db6" + integrity sha512-H+o76SdSNyCh9fM5K8upK45YTo/DiFx5w2YAzblQebSQmukDcoVBVeXynyr7DDnxh+0NTHYRCLwJVf3tC518wg== dependencies: + "@babel/traverse" "^7.1.0" chalk "^2.0.1" co "^4.6.0" - expect "^22.4.0" - graceful-fs "^4.1.11" - is-generator-fn "^1.0.0" - jest-diff "^22.4.0" - jest-matcher-utils "^22.4.0" - jest-message-util "^22.4.0" - jest-snapshot "^22.4.0" - jest-util "^22.4.1" - source-map-support "^0.5.0" - -jest-jasmine2@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-23.6.0.tgz#840e937f848a6c8638df24360ab869cc718592e0" - dependencies: - babel-traverse "^6.0.0" - chalk "^2.0.1" - co "^4.6.0" - expect "^23.6.0" - is-generator-fn "^1.0.0" - jest-diff "^23.6.0" - jest-each "^23.6.0" - jest-matcher-utils "^23.6.0" - jest-message-util "^23.4.0" - jest-snapshot "^23.6.0" - jest-util "^23.4.0" - pretty-format "^23.6.0" - -jest-leak-detector@^22.4.0: - version "22.4.3" - resolved "http://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-22.4.3.tgz#2b7b263103afae8c52b6b91241a2de40117e5b35" - dependencies: - pretty-format "^22.4.3" - -jest-leak-detector@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-23.6.0.tgz#e4230fd42cf381a1a1971237ad56897de7e171de" - dependencies: - pretty-format "^23.6.0" + expect "^24.1.0" + is-generator-fn "^2.0.0" + jest-each "^24.0.0" + jest-matcher-utils "^24.0.0" + jest-message-util "^24.0.0" + jest-snapshot "^24.1.0" + jest-util "^24.0.0" + pretty-format "^24.0.0" + throat "^4.0.0" -jest-matcher-utils@^22.4.0, jest-matcher-utils@^22.4.3: - version "22.4.3" - resolved "http://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-22.4.3.tgz#4632fe428ebc73ebc194d3c7b65d37b161f710ff" +jest-leak-detector@^24.0.0: + version "24.0.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-24.0.0.tgz#78280119fd05ee98317daee62cddb3aa537a31c6" + integrity sha512-ZYHJYFeibxfsDSKowjDP332pStuiFT2xfc5R67Rjm/l+HFJWJgNIOCOlQGeXLCtyUn3A23+VVDdiCcnB6dTTrg== dependencies: - chalk "^2.0.1" - jest-get-type "^22.4.3" - pretty-format "^22.4.3" + pretty-format "^24.0.0" -jest-matcher-utils@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-23.6.0.tgz#726bcea0c5294261a7417afb6da3186b4b8cac80" +jest-matcher-utils@^24.0.0: + version "24.0.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-24.0.0.tgz#fc9c41cfc49b2c3ec14e576f53d519c37729d579" + integrity sha512-LQTDmO+aWRz1Tf9HJg+HlPHhDh1E1c65kVwRFo5mwCVp5aQDzlkz4+vCvXhOKFjitV2f0kMdHxnODrXVoi+rlA== dependencies: chalk "^2.0.1" - jest-get-type "^22.1.0" - pretty-format "^23.6.0" + jest-diff "^24.0.0" + jest-get-type "^24.0.0" + pretty-format "^24.0.0" -jest-message-util@^22.4.0, jest-message-util@^22.4.3: - version "22.4.3" - resolved "http://registry.npmjs.org/jest-message-util/-/jest-message-util-22.4.3.tgz#cf3d38aafe4befddbfc455e57d65d5239e399eb7" +jest-message-util@^24.0.0: + version "24.0.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-24.0.0.tgz#a07a141433b2c992dbaec68d4cbfe470ba289619" + integrity sha512-J9ROJIwz/IeC+eV1XSwnRK4oAwPuhmxEyYx1+K5UI+pIYwFZDSrfZaiWTdq0d2xYFw4Xiu+0KQWsdsQpgJMf3Q== dependencies: - "@babel/code-frame" "^7.0.0-beta.35" + "@babel/code-frame" "^7.0.0" chalk "^2.0.1" - micromatch "^2.3.11" - slash "^1.0.0" - stack-utils "^1.0.1" - -jest-message-util@^23.4.0: - version "23.4.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-23.4.0.tgz#17610c50942349508d01a3d1e0bda2c079086a9f" - dependencies: - "@babel/code-frame" "^7.0.0-beta.35" - chalk "^2.0.1" - micromatch "^2.3.11" - slash "^1.0.0" + micromatch "^3.1.10" + slash "^2.0.0" stack-utils "^1.0.1" -jest-mock@^22.4.3: - version "22.4.3" - resolved "http://registry.npmjs.org/jest-mock/-/jest-mock-22.4.3.tgz#f63ba2f07a1511772cdc7979733397df770aabc7" - -jest-mock@^23.2.0: - version "23.2.0" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-23.2.0.tgz#ad1c60f29e8719d47c26e1138098b6d18b261134" - -jest-regex-util@^22.1.0, jest-regex-util@^22.4.3: - version "22.4.3" - resolved "http://registry.npmjs.org/jest-regex-util/-/jest-regex-util-22.4.3.tgz#a826eb191cdf22502198c5401a1fc04de9cef5af" +jest-mock@^24.0.0: + version "24.0.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-24.0.0.tgz#9a4b53e01d66a0e780f7d857462d063e024c617d" + integrity sha512-sQp0Hu5fcf5NZEh1U9eIW2qD0BwJZjb63Yqd98PQJFvf/zzUTBoUAwv/Dc/HFeNHIw1f3hl/48vNn+j3STaI7A== -jest-regex-util@^23.3.0: - version "23.3.0" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-23.3.0.tgz#5f86729547c2785c4002ceaa8f849fe8ca471bc5" +jest-regex-util@^24.0.0: + version "24.0.0" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-24.0.0.tgz#4feee8ec4a358f5bee0a654e94eb26163cb9089a" + integrity sha512-Jv/uOTCuC+PY7WpJl2mpoI+WbY2ut73qwwO9ByJJNwOCwr1qWhEW2Lyi2S9ZewUdJqeVpEBisdEVZSI+Zxo58Q== -jest-resolve-dependencies@^22.1.0: - version "22.4.3" - resolved "http://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-22.4.3.tgz#e2256a5a846732dc3969cb72f3c9ad7725a8195e" +jest-resolve-dependencies@^24.1.0: + version "24.1.0" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-24.1.0.tgz#78f738a2ec59ff4d00751d9da56f176e3f589f6c" + integrity sha512-2VwPsjd3kRPu7qe2cpytAgowCObk5AKeizfXuuiwgm1a9sijJDZe8Kh1sFj6FKvSaNEfCPlBVkZEJa2482m/Uw== dependencies: - jest-regex-util "^22.4.3" + jest-regex-util "^24.0.0" + jest-snapshot "^24.1.0" -jest-resolve-dependencies@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-23.6.0.tgz#b4526af24c8540d9a3fab102c15081cf509b723d" - dependencies: - jest-regex-util "^23.3.0" - jest-snapshot "^23.6.0" - -jest-resolve@^22.4.2: - version "22.4.3" - resolved "http://registry.npmjs.org/jest-resolve/-/jest-resolve-22.4.3.tgz#0ce9d438c8438229aa9b916968ec6b05c1abb4ea" - dependencies: - browser-resolve "^1.11.2" - chalk "^2.0.1" - -jest-resolve@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-23.6.0.tgz#cf1d1a24ce7ee7b23d661c33ba2150f3aebfa0ae" +jest-resolve@^24.1.0: + version "24.1.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-24.1.0.tgz#42ff0169b0ea47bfdbd0c52a0067ca7d022c7688" + integrity sha512-TPiAIVp3TG6zAxH28u/6eogbwrvZjBMWroSLBDkwkHKrqxB/RIdwkWDye4uqPlZIXWIaHtifY3L0/eO5Z0f2wg== dependencies: browser-resolve "^1.11.3" chalk "^2.0.1" realpath-native "^1.0.0" -jest-runner@^22.4.4: - version "22.4.4" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-22.4.4.tgz#dfca7b7553e0fa617e7b1291aeb7ce83e540a907" +jest-runner@^24.1.0: + version "24.1.0" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-24.1.0.tgz#3686a2bb89ce62800da23d7fdc3da2c32792943b" + integrity sha512-CDGOkT3AIFl16BLL/OdbtYgYvbAprwJ+ExKuLZmGSCSldwsuU2dEGauqkpvd9nphVdAnJUcP12e/EIlnTX0QXg== dependencies: + chalk "^2.4.2" exit "^0.1.2" - jest-config "^22.4.4" - jest-docblock "^22.4.0" - jest-haste-map "^22.4.2" - jest-jasmine2 "^22.4.4" - jest-leak-detector "^22.4.0" - jest-message-util "^22.4.0" - jest-runtime "^22.4.4" - jest-util "^22.4.1" - jest-worker "^22.2.2" - throat "^4.0.0" - -jest-runner@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-23.6.0.tgz#3894bd219ffc3f3cb94dc48a4170a2e6f23a5a38" - dependencies: - exit "^0.1.2" - graceful-fs "^4.1.11" - jest-config "^23.6.0" - jest-docblock "^23.2.0" - jest-haste-map "^23.6.0" - jest-jasmine2 "^23.6.0" - jest-leak-detector "^23.6.0" - jest-message-util "^23.4.0" - jest-runtime "^23.6.0" - jest-util "^23.4.0" - jest-worker "^23.2.0" + graceful-fs "^4.1.15" + jest-config "^24.1.0" + jest-docblock "^24.0.0" + jest-haste-map "^24.0.0" + jest-jasmine2 "^24.1.0" + jest-leak-detector "^24.0.0" + jest-message-util "^24.0.0" + jest-runtime "^24.1.0" + jest-util "^24.0.0" + jest-worker "^24.0.0" source-map-support "^0.5.6" throat "^4.0.0" -jest-runtime@^22.4.4: - version "22.4.4" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-22.4.4.tgz#9ba7792fc75582a5be0f79af6f8fe8adea314048" +jest-runtime@^24.1.0: + version "24.1.0" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-24.1.0.tgz#7c157a2e776609e8cf552f956a5a19ec9c985214" + integrity sha512-59/BY6OCuTXxGeDhEMU7+N33dpMQyXq7MLK07cNSIY/QYt2QZgJ7Tjx+rykBI0skAoigFl0A5tmT8UdwX92YuQ== dependencies: - babel-core "^6.0.0" - babel-jest "^22.4.4" - babel-plugin-istanbul "^4.1.5" - chalk "^2.0.1" - convert-source-map "^1.4.0" - exit "^0.1.2" - graceful-fs "^4.1.11" - jest-config "^22.4.4" - jest-haste-map "^22.4.2" - jest-regex-util "^22.1.0" - jest-resolve "^22.4.2" - jest-util "^22.4.1" - jest-validate "^22.4.4" - json-stable-stringify "^1.0.1" - micromatch "^2.3.11" - realpath-native "^1.0.0" - slash "^1.0.0" - strip-bom "3.0.0" - write-file-atomic "^2.1.0" - yargs "^10.0.3" - -jest-runtime@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-23.6.0.tgz#059e58c8ab445917cd0e0d84ac2ba68de8f23082" - dependencies: - babel-core "^6.0.0" - babel-plugin-istanbul "^4.1.6" + "@babel/core" "^7.1.0" + babel-plugin-istanbul "^5.1.0" chalk "^2.0.1" convert-source-map "^1.4.0" exit "^0.1.2" fast-json-stable-stringify "^2.0.0" - graceful-fs "^4.1.11" - jest-config "^23.6.0" - jest-haste-map "^23.6.0" - jest-message-util "^23.4.0" - jest-regex-util "^23.3.0" - jest-resolve "^23.6.0" - jest-snapshot "^23.6.0" - jest-util "^23.4.0" - jest-validate "^23.6.0" - micromatch "^2.3.11" + glob "^7.1.3" + graceful-fs "^4.1.15" + jest-config "^24.1.0" + jest-haste-map "^24.0.0" + jest-message-util "^24.0.0" + jest-regex-util "^24.0.0" + jest-resolve "^24.1.0" + jest-snapshot "^24.1.0" + jest-util "^24.0.0" + jest-validate "^24.0.0" + micromatch "^3.1.10" realpath-native "^1.0.0" - slash "^1.0.0" - strip-bom "3.0.0" - write-file-atomic "^2.1.0" - yargs "^11.0.0" - -jest-serializer@^22.4.3: - version "22.4.3" - resolved "http://registry.npmjs.org/jest-serializer/-/jest-serializer-22.4.3.tgz#a679b81a7f111e4766235f4f0c46d230ee0f7436" + slash "^2.0.0" + strip-bom "^3.0.0" + write-file-atomic "2.4.1" + yargs "^12.0.2" -jest-serializer@^23.0.1: - version "23.0.1" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-23.0.1.tgz#a3776aeb311e90fe83fab9e533e85102bd164165" +jest-serializer@^24.0.0: + version "24.0.0" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-24.0.0.tgz#522c44a332cdd194d8c0531eb06a1ee5afb4256b" + integrity sha512-9FKxQyrFgHtx3ozU+1a8v938ILBE7S8Ko3uiAVjT8Yfi2o91j/fj81jacCQZ/Ihjiff/VsUCXVgQ+iF1XdImOw== -jest-snapshot@^22.4.0: - version "22.4.3" - resolved "http://registry.npmjs.org/jest-snapshot/-/jest-snapshot-22.4.3.tgz#b5c9b42846ffb9faccb76b841315ba67887362d2" +jest-snapshot@^24.1.0: + version "24.1.0" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-24.1.0.tgz#85e22f810357aa5994ab61f236617dc2205f2f5b" + integrity sha512-th6TDfFqEmXvuViacU1ikD7xFb7lQsPn2rJl7OEmnfIVpnrx3QNY2t3PE88meeg0u/mQ0nkyvmC05PBqO4USFA== dependencies: + "@babel/types" "^7.0.0" chalk "^2.0.1" - jest-diff "^22.4.3" - jest-matcher-utils "^22.4.3" + jest-diff "^24.0.0" + jest-matcher-utils "^24.0.0" + jest-message-util "^24.0.0" + jest-resolve "^24.1.0" mkdirp "^0.5.1" natural-compare "^1.4.0" - pretty-format "^22.4.3" - -jest-snapshot@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-23.6.0.tgz#f9c2625d1b18acda01ec2d2b826c0ce58a5aa17a" - dependencies: - babel-types "^6.0.0" - chalk "^2.0.1" - jest-diff "^23.6.0" - jest-matcher-utils "^23.6.0" - jest-message-util "^23.4.0" - jest-resolve "^23.6.0" - mkdirp "^0.5.1" - natural-compare "^1.4.0" - pretty-format "^23.6.0" + pretty-format "^24.0.0" semver "^5.5.0" -jest-util@^22.4.1, jest-util@^22.4.3: - version "22.4.3" - resolved "http://registry.npmjs.org/jest-util/-/jest-util-22.4.3.tgz#c70fec8eec487c37b10b0809dc064a7ecf6aafac" +jest-util@^24.0.0: + version "24.0.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-24.0.0.tgz#fd38fcafd6dedbd0af2944d7a227c0d91b68f7d6" + integrity sha512-QxsALc4wguYS7cfjdQSOr5HTkmjzkHgmZvIDkcmPfl1ib8PNV8QUWLwbKefCudWS0PRKioV+VbQ0oCUPC691fQ== dependencies: - callsites "^2.0.0" + callsites "^3.0.0" chalk "^2.0.1" - graceful-fs "^4.1.11" - is-ci "^1.0.10" - jest-message-util "^22.4.3" + graceful-fs "^4.1.15" + is-ci "^2.0.0" + jest-message-util "^24.0.0" mkdirp "^0.5.1" + slash "^2.0.0" source-map "^0.6.0" -jest-util@^23.4.0: - version "23.4.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-23.4.0.tgz#4d063cb927baf0a23831ff61bec2cbbf49793561" - dependencies: - callsites "^2.0.0" - chalk "^2.0.1" - graceful-fs "^4.1.11" - is-ci "^1.0.10" - jest-message-util "^23.4.0" - mkdirp "^0.5.1" - slash "^1.0.0" - source-map "^0.6.0" - -jest-validate@^22.4.4: - version "22.4.4" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-22.4.4.tgz#1dd0b616ef46c995de61810d85f57119dbbcec4d" - dependencies: - chalk "^2.0.1" - jest-config "^22.4.4" - jest-get-type "^22.1.0" - leven "^2.1.0" - pretty-format "^22.4.0" - -jest-validate@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-23.6.0.tgz#36761f99d1ed33fcd425b4e4c5595d62b6597474" +jest-validate@^24.0.0: + version "24.0.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-24.0.0.tgz#aa8571a46983a6538328fef20406b4a496b6c020" + integrity sha512-vMrKrTOP4BBFIeOWsjpsDgVXATxCspC9S1gqvbJ3Tnn/b9ACsJmteYeVx9830UMV28Cob1RX55x96Qq3Tfad4g== dependencies: + camelcase "^5.0.0" chalk "^2.0.1" - jest-get-type "^22.1.0" + jest-get-type "^24.0.0" leven "^2.1.0" - pretty-format "^23.6.0" + pretty-format "^24.0.0" -jest-watcher@^23.4.0: - version "23.4.0" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-23.4.0.tgz#d2e28ce74f8dad6c6afc922b92cabef6ed05c91c" +jest-watcher@^24.0.0: + version "24.0.0" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-24.0.0.tgz#20d44244d10b0b7312410aefd256c1c1eef68890" + integrity sha512-GxkW2QrZ4YxmW1GUWER05McjVDunBlKMFfExu+VsGmXJmpej1saTEKvONdx5RJBlVdpPI5x6E3+EDQSIGgl53g== dependencies: ansi-escapes "^3.0.0" chalk "^2.0.1" + jest-util "^24.0.0" string-length "^2.0.0" -jest-worker@^22.2.2, jest-worker@^22.4.3: - version "22.4.3" - resolved "http://registry.npmjs.org/jest-worker/-/jest-worker-22.4.3.tgz#5c421417cba1c0abf64bf56bd5fb7968d79dd40b" - dependencies: - merge-stream "^1.0.1" - -jest-worker@^23.2.0: - version "23.2.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-23.2.0.tgz#faf706a8da36fae60eb26957257fa7b5d8ea02b9" +jest-worker@^24.0.0: + version "24.0.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.0.0.tgz#3d3483b077bf04f412f47654a27bba7e947f8b6d" + integrity sha512-s64/OThpfQvoCeHG963MiEZOAAxu8kHsaL/rCMF7lpdzo7vgF0CtPml9hfguOMgykgH/eOm4jFP4ibfHLruytg== dependencies: merge-stream "^1.0.1" + supports-color "^6.1.0" -jest@^22.4.3: - version "22.4.4" - resolved "https://registry.yarnpkg.com/jest/-/jest-22.4.4.tgz#ffb36c9654b339a13e10b3d4b338eb3e9d49f6eb" +jest@^24.1.0: + version "24.1.0" + resolved "https://registry.yarnpkg.com/jest/-/jest-24.1.0.tgz#b1e1135caefcf2397950ecf7f90e395fde866fd2" + integrity sha512-+q91L65kypqklvlRFfXfdzUKyngQLOcwGhXQaLmVHv+d09LkNXuBuGxlofTFW42XMzu3giIcChchTsCNUjQ78A== dependencies: - import-local "^1.0.0" - jest-cli "^22.4.4" - -jest@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest/-/jest-23.6.0.tgz#ad5835e923ebf6e19e7a1d7529a432edfee7813d" - dependencies: - import-local "^1.0.0" - jest-cli "^23.6.0" + import-local "^2.0.0" + jest-cli "^24.1.0" "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== js-tokens@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" -js-yaml@3.x, js-yaml@^3.12.0, js-yaml@^3.7.0, js-yaml@^3.9.0: +js-yaml@3.x, js-yaml@^3.7.0: version "3.12.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1" dependencies: argparse "^1.0.7" esprima "^4.0.0" +js-yaml@^3.12.0, js-yaml@^3.9.0: + version "3.12.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.1.tgz#295c8632a18a23e054cf5c9d3cecafe678167600" + integrity sha512-um46hB9wNOKlwkHgiuyEVAybXBjwFUV0Z/RaHJblRd9DXltue9FTYvzCr9ErQrK9Adz5MU4gHWVaNUfdmrC8qA== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= -jsdom@^11.12.0, jsdom@^11.5.1: +jsdom@^11.5.1: version "11.12.0" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.12.0.tgz#1a80d40ddd378a1de59656e9e6dc5a3ba8657bc8" + integrity sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw== dependencies: abab "^2.0.0" acorn "^5.5.3" @@ -5761,10 +6080,47 @@ jsdom@^11.12.0, jsdom@^11.5.1: ws "^5.2.0" xml-name-validator "^3.0.0" +jsdom@^13.2.0: + version "13.2.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-13.2.0.tgz#b1a0dbdadc255435262be8ea3723d2dba0d7eb3a" + integrity sha512-cG1NtMWO9hWpqRNRR3dSvEQa8bFI6iLlqU2x4kwX51FQjp0qus8T9aBaAO6iGp3DeBrhdwuKxckknohkmfvsFw== + dependencies: + abab "^2.0.0" + acorn "^6.0.4" + acorn-globals "^4.3.0" + array-equal "^1.0.0" + cssom "^0.3.4" + cssstyle "^1.1.1" + data-urls "^1.1.0" + domexception "^1.0.1" + escodegen "^1.11.0" + html-encoding-sniffer "^1.0.2" + nwsapi "^2.0.9" + parse5 "5.1.0" + pn "^1.1.0" + request "^2.88.0" + request-promise-native "^1.0.5" + saxes "^3.1.5" + symbol-tree "^3.2.2" + tough-cookie "^2.5.0" + w3c-hr-time "^1.0.1" + w3c-xmlserializer "^1.0.1" + webidl-conversions "^4.0.2" + whatwg-encoding "^1.0.5" + whatwg-mimetype "^2.3.0" + whatwg-url "^7.0.0" + ws "^6.1.2" + xml-name-validator "^3.0.0" + jsesc@^1.3.0: version "1.3.0" resolved "http://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + jsesc@~0.5.0: version "0.5.0" resolved "http://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" @@ -5772,32 +6128,38 @@ jsesc@~0.5.0: jsome@^2.3.25: version "2.5.0" resolved "https://registry.yarnpkg.com/jsome/-/jsome-2.5.0.tgz#5e417eef4341ffeb83ee8bfa9265b36d56fe49ed" + integrity sha1-XkF+70NB/+uD7ov6kmWzbVb+Se0= dependencies: chalk "^2.3.0" json-stringify-safe "^5.0.1" yargs "^11.0.0" +json-bigint@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/json-bigint/-/json-bigint-0.3.0.tgz#0ccd912c4b8270d05f056fbd13814b53d3825b1e" + integrity sha1-DM2RLEuCcNBfBW+9E4FLU9OCWx4= + dependencies: + bignumber.js "^7.0.0" + json-parse-better-errors@^1.0.0, json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== json-schema@0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= -json-stable-stringify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" - dependencies: - jsonify "~0.0.0" - -json-stringify-safe@5.0.x, json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: +json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= json5@2.x, json5@^2.1.0: version "2.1.0" @@ -5812,12 +6174,14 @@ json5@^0.5.0, json5@^0.5.1: jsonfile@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-3.0.1.tgz#a5ecc6f65f53f662c4415c7675a0331d0992ec66" + integrity sha1-pezG9l9T9mLEQVx2daAzHQmS7GY= optionalDependencies: graceful-fs "^4.1.6" jsonfile@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= optionalDependencies: graceful-fs "^4.1.6" @@ -5828,14 +6192,17 @@ jsonify@~0.0.0: jsonparse@^1.2.0: version "1.3.1" resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= -jsonpointer@^4.0.0, jsonpointer@^4.0.1: +jsonpointer@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" + integrity sha1-T9kss04OnbPInIYi7PUfm5eMbLk= -jsonwebtoken@^8.2.1: +jsonwebtoken@^8.4.0: version "8.4.0" resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-8.4.0.tgz#8757f7b4cb7440d86d5e2f3becefa70536c8e46a" + integrity sha512-coyXjRTCy0pw5WYBpMvWOMN+Kjaik2MwTUIq9cna/W7NpO9E+iYbumZONAz3hcr+tXFJECoQVrtmIoC3Oz0gvg== dependencies: jws "^3.1.5" lodash.includes "^4.3.0" @@ -5850,29 +6217,44 @@ jsonwebtoken@^8.2.1: jsprim@^1.2.2: version "1.4.1" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= dependencies: assert-plus "1.0.0" extsprintf "1.3.0" json-schema "0.2.3" verror "1.10.0" -just-extend@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/just-extend/-/just-extend-3.0.0.tgz#cee004031eaabf6406da03a7b84e4fe9d78ef288" +jszip@^3.1.3: + version "3.1.5" + resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.1.5.tgz#e3c2a6c6d706ac6e603314036d43cd40beefdf37" + integrity sha512-5W8NUaFRFRqTOL7ZDDrx5qWHJyBXy6velVudIzQUSoqAAYqzSh2Z7/m0Rf1QbmQJccegD0r+YZxBjzqoBiEeJQ== + dependencies: + core-js "~2.3.0" + es6-promise "~3.0.2" + lie "~3.1.0" + pako "~1.0.2" + readable-stream "~2.0.6" -jwa@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.1.6.tgz#87240e76c9808dbde18783cf2264ef4929ee50e6" +just-extend@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/just-extend/-/just-extend-4.0.2.tgz#f3f47f7dfca0f989c55410a7ebc8854b07108afc" + integrity sha512-FrLwOgm+iXrPV+5zDU6Jqu4gCRXbWEQg2O3SKONsWE4w7AXFRkryS53bpWdaL9cNol+AmR3AEYz6kn+o0fCPnw== + +jwa@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.2.0.tgz#606da70c1c6d425cad329c77c99f2df2a981489a" + integrity sha512-Grku9ZST5NNQ3hqNUodSkDfEBqAmGA1R8yiyPHOnLzEKI0GaCQC/XhFmsheXYuXzFQJdILbh+lYBiliqG5R/Vg== dependencies: buffer-equal-constant-time "1.0.1" ecdsa-sig-formatter "1.0.10" safe-buffer "^5.0.1" -jws@^3.1.4, jws@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/jws/-/jws-3.1.5.tgz#80d12d05b293d1e841e7cb8b4e69e561adcf834f" +jws@^3.1.5: + version "3.2.1" + resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.1.tgz#d79d4216a62c9afa0a3d5e8b5356d75abdeb2be5" + integrity sha512-bGA2omSrFUkd72dhh05bIAN832znP4wOU3lfuXtRBuGTbsmNmDXMQg28f0Vsxaxgk4myF5YkKQpz6qeRpMgX9g== dependencies: - jwa "^1.1.5" + jwa "^1.2.0" safe-buffer "^5.0.1" karma-chai@^0.1.0: @@ -5920,83 +6302,91 @@ karma-mocha@^1.3.0: dependencies: minimist "1.2.0" -karma-rollup-preprocessor@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/karma-rollup-preprocessor/-/karma-rollup-preprocessor-6.1.0.tgz#0dc43c691540325bd07cafe406c3d7604c9ca5a9" +karma-rollup-preprocessor@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/karma-rollup-preprocessor/-/karma-rollup-preprocessor-7.0.0.tgz#cb8e0f74a6b32e7a9fd74d2e5eaa799a1e8b6095" + integrity sha512-/a7bBtinT4+fdbnatCh5ZWvbqIqPzse7O3tvT4x9tadXsxPqybo1Lilpe7AKEmvhAcUwGRlcLOWeV66lIPFrXQ== dependencies: - chokidar "^2.0.0" + chokidar "^2.1.0" + debounce "^1.2.0" -karma-sauce-launcher@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/karma-sauce-launcher/-/karma-sauce-launcher-1.2.0.tgz#6f2558ddef3cf56879fa27540c8ae9f8bfd16bca" +karma-sauce-launcher@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/karma-sauce-launcher/-/karma-sauce-launcher-2.0.2.tgz#dbf98e70d86bf287b03a537cf637eb7aefa975c3" + integrity sha512-jLUFaJhHMcKpxFWUesyWYihzM5FvQiJsDwGcCtKeOy2lsWhkVw0V0Byqb1d+wU6myU1mribBtsIcub23HS4kWA== dependencies: - q "^1.5.0" - sauce-connect-launcher "^1.2.2" - saucelabs "^1.4.0" - wd "^1.4.0" + sauce-connect-launcher "^1.2.4" + saucelabs "^1.5.0" + selenium-webdriver "^4.0.0-alpha.1" karma-sinon@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/karma-sinon/-/karma-sinon-1.0.5.tgz#4e3443f2830fdecff624d3747163f1217daa2a9a" + integrity sha1-TjRD8oMP3s/2JNN0cWPxIX2qKpo= -karma-typescript-es6-transform@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/karma-typescript-es6-transform/-/karma-typescript-es6-transform-1.0.4.tgz#0ab2fd2fbd5f16e734a71f44a4cbf91b257be408" - dependencies: - acorn "^5.4.1" - babel-core "^6.23.1" - babel-preset-env "^1.6.1" - log4js "^1.1.1" - magic-string "^0.22.4" +karma-typescript-es6-transform@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/karma-typescript-es6-transform/-/karma-typescript-es6-transform-4.0.0.tgz#677e47712c0b6c0ff5d2512b3559fbeb700cfc2a" + integrity sha512-NSeMfC4w+gFb3Q1+o32HFWGb4pLSvs9dHNy83jHi2f+bMoeVRNrfKQkz5Pg4e/PRyXHKLOEX1FPnBGZK3vJing== + dependencies: + acorn "^6.0.5" + acorn-walk "^6.1.1" + babel-core "^6.26.3" + babel-preset-env "^1.7.0" + log4js "^4.0.1" + magic-string "^0.25.1" -karma-typescript@^3.0.12: - version "3.0.13" - resolved "https://registry.yarnpkg.com/karma-typescript/-/karma-typescript-3.0.13.tgz#8948afbd103ac1987a5961a0f43a1ba2871067cd" +karma-typescript@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/karma-typescript/-/karma-typescript-4.0.0.tgz#e75ab28770e1be840e68012857f9e4fd979039b6" + integrity sha512-D5mrwspHW8GtvbjYCz29DbxXYqoCOFhbnhZRkmSytWMCTFAwjSHMKxozOM5HeZomS2lqWV+S0WPk4DH9nxkGgA== dependencies: - acorn "^4.0.4" + acorn "^6.0.5" + acorn-walk "^6.1.1" assert "^1.4.1" - async "^2.1.4" - browser-resolve "^1.11.0" + async "^2.6.1" + browser-resolve "^1.11.3" browserify-zlib "^0.2.0" - buffer "^5.0.6" + buffer "^5.2.1" combine-source-map "^0.8.0" console-browserify "^1.1.0" constants-browserify "^1.0.0" - convert-source-map "^1.5.0" - crypto-browserify "^3.11.1" - diff "^3.2.0" - domain-browser "^1.1.7" - events "^1.1.1" - glob "^7.1.1" + convert-source-map "^1.6.0" + crypto-browserify "^3.12.0" + diff "^4.0.1" + domain-browser "^1.2.0" + events "^3.0.0" + glob "^7.1.3" https-browserify "^1.0.0" istanbul "0.4.5" json-stringify-safe "^5.0.1" karma-coverage "^1.1.1" - lodash "^4.17.4" - log4js "^1.1.1" - minimatch "^3.0.3" + lodash "^4.17.11" + log4js "^4.0.1" + minimatch "^3.0.4" os-browserify "^0.3.0" - pad "^2.0.0" - path-browserify "0.0.0" + pad "^2.2.2" + path-browserify "^1.0.0" process "^0.11.10" - punycode "^1.4.1" + punycode "^2.1.1" querystring-es3 "^0.2.1" - readable-stream "^2.3.3" - remap-istanbul "^0.10.1" - source-map "0.6.1" - stream-browserify "^2.0.1" - stream-http "^2.7.2" - string_decoder "^1.0.3" - timers-browserify "^2.0.2" - tmp "0.0.29" - tty-browserify "0.0.0" + readable-stream "^3.1.1" + remap-istanbul "^0.13.0" + source-map "^0.7.3" + stream-browserify "^2.0.2" + stream-http "^3.0.0" + string_decoder "^1.2.0" + timers-browserify "^2.0.10" + tmp "^0.0.33" + tty-browserify "^0.0.1" url "^0.11.0" - util "^0.10.3" - vm-browserify "0.0.4" + util "^0.11.1" + vm-browserify "1.1.0" -karma@^2.0.2: - version "2.0.5" - resolved "https://registry.yarnpkg.com/karma/-/karma-2.0.5.tgz#3710c7a2e71b1c439313f283846d88e04e4f918c" +karma@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/karma/-/karma-4.0.0.tgz#f28e38a2b66243fde3f98e12a8dcaa2c6ff8ca9c" + integrity sha512-EFoFs3F6G0BcUGPNOn/YloGOb3h09hzTguyXlg6loHlKY76qbJikkcyPk43m2kfRF65TUGda/mig29QQtyhm1g== dependencies: bluebird "^3.3.0" body-parser "^1.16.1" @@ -6008,149 +6398,162 @@ karma@^2.0.2: di "^0.0.1" dom-serialize "^2.2.0" expand-braces "^0.1.1" + flatted "^2.0.0" glob "^7.1.1" graceful-fs "^4.1.2" http-proxy "^1.13.0" isbinaryfile "^3.0.0" - lodash "^4.17.4" - log4js "^2.5.3" - mime "^1.3.4" + lodash "^4.17.5" + log4js "^3.0.0" + mime "^2.3.1" minimatch "^3.0.2" optimist "^0.6.1" qjobs "^1.1.4" range-parser "^1.2.0" rimraf "^2.6.0" safe-buffer "^5.0.1" - socket.io "2.0.4" + socket.io "2.1.1" source-map "^0.6.1" tmp "0.0.33" - useragent "2.2.1" - -kind-of@^1.1.0: - version "1.1.0" - resolved "http://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz#140a3d2d41a36d2efcfa9377b62c24f8495a5c44" + useragent "2.3.0" kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= dependencies: is-buffer "^1.1.5" kind-of@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= dependencies: is-buffer "^1.1.5" kind-of@^5.0.0: version "5.1.0" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== kind-of@^6.0.0, kind-of@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" + integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== -kleur@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-2.0.2.tgz#b704f4944d95e255d038f0cb05fb8a602c55a300" +kleur@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.2.tgz#83c7ec858a41098b613d5998a7b653962b504f68" + integrity sha512-3h7B2WRT5LNXOtQiAaWonilegHcPSf9nLVXlSTci8lu1dZUuui61+EsPEZqSVxY7rXYmB2DVKMQILxaO5WL61Q== latest-version@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15" + integrity sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU= dependencies: package-json "^4.0.0" lazy-cache@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" + integrity sha1-odePw6UEdMuAhF07O24dpJpEbo4= lazy-req@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/lazy-req/-/lazy-req-2.0.0.tgz#c9450a363ecdda2e6f0c70132ad4f37f8f06f2b4" - -lazystream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4" - dependencies: - readable-stream "^2.0.5" + integrity sha1-yUUKNj7N2i5vDHATKtTzf48G8rQ= lcid@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" + integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= dependencies: invert-kv "^1.0.0" lcid@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" + integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== dependencies: invert-kv "^2.0.0" left-pad@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e" - -lerna@3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/lerna/-/lerna-3.5.0.tgz#fd989b8992701e90e10aa5b3970d6f7a3512ba64" - dependencies: - "@lerna/add" "^3.5.0" - "@lerna/bootstrap" "^3.5.0" - "@lerna/changed" "^3.5.0" - "@lerna/clean" "^3.5.0" - "@lerna/cli" "^3.2.0" - "@lerna/create" "^3.5.0" - "@lerna/diff" "^3.5.0" - "@lerna/exec" "^3.5.0" - "@lerna/import" "^3.5.0" - "@lerna/init" "^3.5.0" - "@lerna/link" "^3.5.0" - "@lerna/list" "^3.5.0" - "@lerna/publish" "^3.5.0" - "@lerna/run" "^3.5.0" - "@lerna/version" "^3.5.0" + integrity sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA== + +lerna@3.13.0: + version "3.13.0" + resolved "https://registry.yarnpkg.com/lerna/-/lerna-3.13.0.tgz#3a9fe155d763a9814939a631ff958957322f2f31" + integrity sha512-MHaqqwfAdYIo0rAE0oOZRQ8eKbKyW035akLf0pz3YlWbdXKH91lxXRLj0BpbEytUz7hDbsv0FNNtXz9u5eTNFg== + dependencies: + "@lerna/add" "3.13.0" + "@lerna/bootstrap" "3.13.0" + "@lerna/changed" "3.13.0" + "@lerna/clean" "3.13.0" + "@lerna/cli" "3.13.0" + "@lerna/create" "3.13.0" + "@lerna/diff" "3.13.0" + "@lerna/exec" "3.13.0" + "@lerna/import" "3.13.0" + "@lerna/init" "3.13.0" + "@lerna/link" "3.13.0" + "@lerna/list" "3.13.0" + "@lerna/publish" "3.13.0" + "@lerna/run" "3.13.0" + "@lerna/version" "3.13.0" import-local "^1.0.0" npmlog "^4.1.2" leven@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" + integrity sha1-wuep93IJTe6dNCAq6KzORoeHVYA= levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= dependencies: prelude-ls "~1.1.2" type-check "~0.3.2" -libbase64@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/libbase64/-/libbase64-0.1.0.tgz#62351a839563ac5ff5bd26f12f60e9830bb751e6" - -libmime@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/libmime/-/libmime-3.0.0.tgz#51a1a9e7448ecbd32cda54421675bb21bc093da6" - dependencies: - iconv-lite "0.4.15" - libbase64 "0.1.0" - libqp "1.1.0" - -libnpmaccess@^3.0.0: +libnpmaccess@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-3.0.1.tgz#5b3a9de621f293d425191aa2e779102f84167fa8" + integrity sha512-RlZ7PNarCBt+XbnP7R6PoVgOq9t+kou5rvhaInoNibhPO7eMlRfS0B8yjatgn2yaHIwWNyoJDolC/6Lc5L/IQA== dependencies: aproba "^2.0.0" get-stream "^4.0.0" npm-package-arg "^6.1.0" npm-registry-fetch "^3.8.0" -libqp@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/libqp/-/libqp-1.1.0.tgz#f5e6e06ad74b794fb5b5b66988bf728ef1dedbe8" +libnpmpublish@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-1.1.1.tgz#ff0c6bb0b4ad2bda2ad1f5fba6760a4af37125f0" + integrity sha512-nefbvJd/wY38zdt+b9SHL6171vqBrMtZ56Gsgfd0duEKb/pB8rDT4/ObUQLrHz1tOfht1flt2zM+UGaemzAG5g== + dependencies: + aproba "^2.0.0" + figgy-pudding "^3.5.1" + get-stream "^4.0.0" + lodash.clonedeep "^4.5.0" + normalize-package-data "^2.4.0" + npm-package-arg "^6.1.0" + npm-registry-fetch "^3.8.0" + semver "^5.5.1" + ssri "^6.0.1" + +lie@~3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/lie/-/lie-3.1.1.tgz#9a436b2cc7746ca59de7a41fa469b3efb76bd87e" + integrity sha1-mkNrLMd0bKWd56QfpGmz77dr2H4= + dependencies: + immediate "~3.0.5" load-json-file@^1.0.0: version "1.1.0" - resolved "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= dependencies: graceful-fs "^4.1.2" parse-json "^2.2.0" @@ -6161,6 +6564,7 @@ load-json-file@^1.0.0: load-json-file@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= dependencies: graceful-fs "^4.1.2" parse-json "^4.0.0" @@ -6182,6 +6586,7 @@ loader-utils@^1.1.0: locate-path@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= dependencies: p-locate "^2.0.0" path-exists "^3.0.0" @@ -6189,6 +6594,7 @@ locate-path@^2.0.0: locate-path@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== dependencies: p-locate "^3.0.0" path-exists "^3.0.0" @@ -6196,6 +6602,12 @@ locate-path@^3.0.0: lodash._reinterpolate@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" + integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= + +lodash.clonedeep@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= lodash.debounce@^4.0.8: version "4.0.8" @@ -6204,42 +6616,52 @@ lodash.debounce@^4.0.8: lodash.find@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.find/-/lodash.find-4.6.0.tgz#cb0704d47ab71789ffa0de8b97dd926fb88b13b1" + integrity sha1-ywcE1Hq3F4n/oN6Ll92Sb7iLE7E= lodash.get@^4.4.2: version "4.4.2" resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" + integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= lodash.includes@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" + integrity sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8= lodash.isboolean@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" + integrity sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY= lodash.isinteger@^4.0.4: version "4.0.4" resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343" + integrity sha1-YZwK89A/iwTDH1iChAt3sRzWg0M= lodash.isnumber@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc" + integrity sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w= lodash.isobject@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/lodash.isobject/-/lodash.isobject-3.0.2.tgz#3c8fb8d5b5bf4bf90ae06e14f2a530a4ed935e1d" + integrity sha1-PI+41bW/S/kK4G4U8qUwpO2TXh0= lodash.isplainobject@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= lodash.isstring@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" + integrity sha1-1SfftUVuynzJu5XV2ur4i6VKVFE= lodash.keys@^4.0.8: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-4.2.0.tgz#a08602ac12e4fb83f91fc1fb7a360a4d9ba35205" + integrity sha1-oIYCrBLk+4P5H8H7ejYKTZujUgU= lodash.memoize@~3.0.3: version "3.0.4" @@ -6248,14 +6670,22 @@ lodash.memoize@~3.0.3: lodash.once@^4.0.0: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" + integrity sha1-DdOXEhPHxW34gJd9UEyI+0cal6w= + +lodash.set@^4.3.2: + version "4.3.2" + resolved "https://registry.yarnpkg.com/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23" + integrity sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM= lodash.sortby@^4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= lodash.template@^4.0.2: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.4.0.tgz#e73a0385c8355591746e020b99679c690e68fba0" + integrity sha1-5zoDhcg1VZF0bgILmWecaQ5o+6A= dependencies: lodash._reinterpolate "~3.0.0" lodash.templatesettings "^4.0.0" @@ -6263,59 +6693,48 @@ lodash.template@^4.0.2: lodash.templatesettings@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz#2b4d4e95ba440d915ff08bc899e4553666713316" + integrity sha1-K01OlbpEDZFf8IvImeRVNmZxMxY= dependencies: lodash._reinterpolate "~3.0.0" -lodash@4.17.11, lodash@^4.0.0, lodash@^4.13.1, lodash@^4.15.0, lodash@^4.16.6, lodash@^4.17.0, lodash@^4.17.10, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.1, lodash@^4.5.0, lodash@^4.8.0: +lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= + +lodash@4.17.11, lodash@^4.13.1, lodash@^4.16.6, lodash@^4.17.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.1, lodash@^4.5.0: version "4.17.11" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" -lodash@4.17.5: - version "4.17.5" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511" - log-symbols@^2.1.0: version "2.2.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" dependencies: chalk "^2.0.1" -log4js@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/log4js/-/log4js-1.1.1.tgz#c21d29c7604089e4f255833e7f94b3461de1ff43" - dependencies: - debug "^2.2.0" - semver "^5.3.0" - streamroller "^0.4.0" - -log4js@^2.5.3: - version "2.11.0" - resolved "https://registry.yarnpkg.com/log4js/-/log4js-2.11.0.tgz#bf3902eff65c6923d9ce9cfbd2db54160e34005a" +log4js@^3.0.0: + version "3.0.6" + resolved "https://registry.yarnpkg.com/log4js/-/log4js-3.0.6.tgz#e6caced94967eeeb9ce399f9f8682a4b2b28c8ff" + integrity sha512-ezXZk6oPJCWL483zj64pNkMuY/NcRX5MPiB0zE6tjZM137aeusrOnW1ecxgF9cmwMWkBMhjteQxBPoZBh9FDxQ== dependencies: - circular-json "^0.5.4" + circular-json "^0.5.5" date-format "^1.2.0" debug "^3.1.0" - semver "^5.5.0" + rfdc "^1.1.2" streamroller "0.7.0" - optionalDependencies: - amqplib "^0.5.2" - axios "^0.15.3" - hipchat-notifier "^1.1.0" - loggly "^1.1.0" - mailgun-js "^0.18.0" - nodemailer "^2.5.0" - redis "^2.7.1" - slack-node "~0.2.0" - -loggly@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/loggly/-/loggly-1.1.1.tgz#0a0fc1d3fa3a5ec44fdc7b897beba2a4695cebee" + +log4js@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/log4js/-/log4js-4.0.2.tgz#0c73e623ca4448669653eb0e9f629beacc7fbbe3" + integrity sha512-KE7HjiieVDPPdveA3bJZSuu0n8chMkFl8mIoisBFxwEJ9FmXe4YzNuiqSwYUiR1K8q8/5/8Yd6AClENY1RA9ww== dependencies: - json-stringify-safe "5.0.x" - request "2.75.x" - timespan "2.3.x" + date-format "^2.0.0" + debug "^3.1.0" + flatted "^2.0.0" + rfdc "^1.1.2" + streamroller "^1.0.1" -lolex@^2.3.2, lolex@^2.4.2: +lolex@^2.3.2: version "2.7.5" resolved "https://registry.yarnpkg.com/lolex/-/lolex-2.7.5.tgz#113001d56bfc7e02d56e36291cc5c413d1aa0733" @@ -6326,16 +6745,19 @@ lolex@^3.0.0: longest@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" + integrity sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc= loose-envify@^1.0.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== dependencies: js-tokens "^3.0.0 || ^4.0.0" loud-rejection@^1.0.0: version "1.6.0" resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" + integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8= dependencies: currently-unhandled "^0.4.1" signal-exit "^3.0.0" @@ -6343,16 +6765,21 @@ loud-rejection@^1.0.0: lowercase-keys@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" + integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== -lru-cache@2.2.x: - version "2.2.4" - resolved "http://registry.npmjs.org/lru-cache/-/lru-cache-2.2.4.tgz#6c658619becf14031d0d0b594b16042ce4dc063d" - -lru-cache@^4.0.0, lru-cache@^4.0.1, lru-cache@^4.1.2, lru-cache@^4.1.3: - version "4.1.4" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.4.tgz#51cc46e8e6d9530771c857e24ccc720ecdbcc031" +lru-cache@4.1.x, lru-cache@^4.0.0, lru-cache@^4.0.1, lru-cache@^4.1.2, lru-cache@^4.1.3: + version "4.1.5" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== dependencies: pseudomap "^1.0.2" + yallist "^2.1.2" + +lru-cache@^5.0.0, lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: yallist "^3.0.2" lru_map@0.3.3: @@ -6366,55 +6793,25 @@ lsmod@1.0.0: macos-release@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/macos-release/-/macos-release-2.0.0.tgz#7dddf4caf79001a851eb4fba7fb6034f251276ab" + integrity sha512-iCM3ZGeqIzlrH7KxYK+fphlJpCCczyHXc+HhRVbEu9uNTCrzYJjvvtefzeKTCVHd5AP/aD/fzC80JZ4ZP+dQ/A== -magic-string@0.22.4: - version "0.22.4" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.22.4.tgz#31039b4e40366395618c1d6cf8193c53917475ff" +magic-string@0.25.1, magic-string@^0.25.1: + version "0.25.1" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.1.tgz#b1c248b399cd7485da0fe7385c2fc7011843266e" dependencies: - vlq "^0.2.1" + sourcemap-codec "^1.4.1" magic-string@^0.19.0: version "0.19.1" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.19.1.tgz#14d768013caf2ec8fdea16a49af82fc377e75201" + integrity sha1-FNdoATyvLsj96hakmvgvw3fnUgE= dependencies: vlq "^0.2.1" -magic-string@^0.22.4: - version "0.22.5" - resolved "http://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz#8e9cf5afddf44385c1da5bc2a6a0dbd10b03657e" - dependencies: - vlq "^0.2.2" - -magic-string@^0.25.1: - version "0.25.1" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.1.tgz#b1c248b399cd7485da0fe7385c2fc7011843266e" - dependencies: - sourcemap-codec "^1.4.1" - -mailcomposer@4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/mailcomposer/-/mailcomposer-4.0.1.tgz#0e1c44b2a07cf740ee17dc149ba009f19cadfeb4" - dependencies: - buildmail "4.0.1" - libmime "3.0.0" - -mailgun-js@^0.18.0: - version "0.18.1" - resolved "https://registry.yarnpkg.com/mailgun-js/-/mailgun-js-0.18.1.tgz#ee39aa18d7bb598a5ce9ede84afb681defc8a6b0" - dependencies: - async "~2.6.0" - debug "~3.1.0" - form-data "~2.3.0" - inflection "~1.12.0" - is-stream "^1.1.0" - path-proxy "~1.0.0" - promisify-call "^2.0.2" - proxy-agent "~3.0.0" - tsscmp "~1.0.0" - -make-dir@^1.0.0: +make-dir@^1.0.0, make-dir@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" + integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== dependencies: pify "^3.0.0" @@ -6425,6 +6822,7 @@ make-error@1.x: make-fetch-happen@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-4.0.1.tgz#141497cb878f243ba93136c83d8aba12c216c083" + integrity sha512-7R5ivfy9ilRJ1EMKIOziwrns9fGeAD4bAha8EB7BIiBBLHm2KeTUGCrICFt2rbHfzheTLynv50GnNTK1zDTrcQ== dependencies: agentkeepalive "^3.4.1" cacache "^11.0.1" @@ -6441,40 +6839,53 @@ make-fetch-happen@^4.0.1: makeerror@1.0.x: version "1.0.11" resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" + integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= dependencies: tmpl "1.0.x" +mamacro@^0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/mamacro/-/mamacro-0.0.3.tgz#ad2c9576197c9f1abf308d0787865bd975a3f3e4" + integrity sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA== + map-age-cleaner@^0.1.1: version "0.1.3" resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" + integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== dependencies: p-defer "^1.0.0" map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= 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" + integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= map-obj@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-2.0.0.tgz#a65cd29087a92598b8791257a523e021222ac1f9" + integrity sha1-plzSkIepJZi4eRJXpSPgISIqwfk= map-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= dependencies: object-visit "^1.0.0" marked@^0.3.19: version "0.3.19" - resolved "http://registry.npmjs.org/marked/-/marked-0.3.19.tgz#5d47f709c4c9fc3c216b6d46127280f40b39d790" + resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.19.tgz#5d47f709c4c9fc3c216b6d46127280f40b39d790" + integrity sha512-ea2eGWOqNxPcXv8dyERdSr/6FmzvWwzjMxpfGB/sbMccXoct+xY+YukPD+QTUZwyvK7BZwcr4m21WBOW41pAkg== marked@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/marked/-/marked-0.4.0.tgz#9ad2c2a7a1791f10a852e0112f77b571dce10c66" + integrity sha512-tMsdNBgOsrUophCAFQl0XPe6Zqk/uy9gnue+jIIKhykO51hxyu6uNx7zBPy0+y/WKYVZZMspV9YeXLNdKk+iYw== math-random@^1.0.1: version "1.0.1" @@ -6495,20 +6906,23 @@ media-typer@0.3.0: mem@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" + integrity sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y= dependencies: mimic-fn "^1.0.0" mem@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/mem/-/mem-4.0.0.tgz#6437690d9471678f6cc83659c00cbafcd6b0cdaf" + version "4.1.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-4.1.0.tgz#aeb9be2d21f47e78af29e4ac5978e8afa2ca5b8a" + integrity sha512-I5u6Q1x7wxO0kdOpYBB28xueHADYps5uty/zg936CiG8NTe5sJL8EjrCuLneuDW3PlMdZBGDIn8BirEVdovZvg== dependencies: map-age-cleaner "^0.1.1" mimic-fn "^1.0.0" - p-is-promise "^1.1.0" + p-is-promise "^2.0.0" memfs-or-file-map-to-github-branch@^1.1.0: version "1.1.2" resolved "https://registry.yarnpkg.com/memfs-or-file-map-to-github-branch/-/memfs-or-file-map-to-github-branch-1.1.2.tgz#9d46c02481b7eca8e5ee8a94f170b7e0138cad67" + integrity sha512-D2JKK2DTuVYQqquBWco3K6UfSVyVwmd58dgNqh+TgxHOZdTmR8I130gjMbVCkemDl/EzqDA62417cJxKL3/FFA== memory-fs@^0.4.0, memory-fs@~0.4.1: version "0.4.1" @@ -6523,7 +6937,8 @@ memorystream@^0.3.1: meow@^3.3.0: version "3.7.0" - resolved "http://registry.npmjs.org/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" + resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" + integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs= dependencies: camelcase-keys "^2.0.0" decamelize "^1.1.2" @@ -6539,6 +6954,7 @@ meow@^3.3.0: meow@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/meow/-/meow-4.0.1.tgz#d48598f6f4b1472f35bf6317a95945ace347f975" + integrity sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A== dependencies: camelcase-keys "^4.0.0" decamelize-keys "^1.0.0" @@ -6557,16 +6973,19 @@ merge-descriptors@1.0.1: merge-stream@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1" + integrity sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE= dependencies: readable-stream "^2.0.1" merge2@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.2.3.tgz#7ee99dbd69bb6481689253f018488a1b902b0ed5" + integrity sha512-gdUU1Fwj5ep4kplwcmftruWofEFt6lfpkkr3h860CXbAB9c3hGb55EOL2ali0Td5oebvW0E1+3Sr+Ur7XfKpRA== merge@^1.2.0: version "1.2.1" resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.1.tgz#38bebf80c3220a8a487b6fcfb3941bb11720c145" + integrity sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ== methods@~1.1.2: version "1.1.2" @@ -6575,12 +6994,14 @@ methods@~1.1.2: micro-compress@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/micro-compress/-/micro-compress-1.0.0.tgz#53f5a80b4ad0320ca165a559b6e3df145d4f704f" + integrity sha1-U/WoC0rQMgyhZaVZtuPfFF1PcE8= dependencies: compression "^1.6.2" micro@7.3.3: version "7.3.3" resolved "https://registry.yarnpkg.com/micro/-/micro-7.3.3.tgz#8261c56d2a31a7df93986eff86441396f2b4b070" + integrity sha1-gmHFbSoxp9+TmG7/hkQTlvK0sHA= dependencies: args "2.6.1" async-to-gen "1.3.3" @@ -6618,6 +7039,7 @@ micromatch@^2.3.11: micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== dependencies: arr-diff "^4.0.0" array-unique "^0.3.2" @@ -6647,38 +7069,50 @@ miller-rabin@^4.0.0: mime-db@~1.27.0: version "1.27.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.27.0.tgz#820f572296bbd20ec25ed55e5b5de869e5436eb1" + integrity sha1-gg9XIpa70g7CXtVeW13oaeVDbrE= + +mime-db@~1.38.0: + version "1.38.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.38.0.tgz#1a2aab16da9eb167b49c6e4df2d9c68d63d8e2ad" + integrity sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg== mime-types@2.1.15: version "2.1.15" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.15.tgz#a4ebf5064094569237b8cf70046776d09fc92aed" + integrity sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0= dependencies: mime-db "~1.27.0" -mime-types@^2.0.8, mime-types@^2.1.11, mime-types@^2.1.12, mime-types@~2.1.18, mime-types@~2.1.19, mime-types@~2.1.7: +mime-types@^2.0.8, mime-types@~2.1.18: version "2.1.21" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.21.tgz#28995aa1ecb770742fe6ae7e58f9181c744b3f96" dependencies: mime-db "~1.37.0" +mime-types@^2.1.12, mime-types@~2.1.19: + version "2.1.22" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.22.tgz#fe6b355a190926ab7698c9a0556a11199b2199bd" + integrity sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog== + dependencies: + mime-db "~1.38.0" + mime@1.3.4: version "1.3.4" - resolved "http://registry.npmjs.org/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" + integrity sha1-EV+eO2s9rylZmDyzjxSaLUDrXVM= mime@1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" -mime@^1.3.4: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - -mime@^2.2.0: +mime@^2.2.0, mime@^2.3.1: version "2.4.0" resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.0.tgz#e051fd881358585f3279df333fe694da0bcffdd6" mimic-fn@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: version "1.0.1" @@ -6688,7 +7122,7 @@ minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" -"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4: +"minimatch@2 || 3", minimatch@3.0.4, minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" dependencies: @@ -6697,13 +7131,15 @@ minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: minimist-options@^3.0.1: version "3.0.2" resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-3.0.2.tgz#fba4c8191339e13ecf4d61beb03f070103f3d954" + integrity sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ== dependencies: arrify "^1.0.1" is-plain-obj "^1.1.0" minimist@0.0.8: version "0.0.8" - resolved "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= minimist@1.2.0, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0: version "1.2.0" @@ -6711,24 +7147,28 @@ minimist@1.2.0, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0: minimist@~0.0.1: version "0.0.10" - resolved "http://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" + integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= minipass@^2.2.1, minipass@^2.3.4, minipass@^2.3.5: version "2.3.5" resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848" + integrity sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA== dependencies: safe-buffer "^5.1.2" yallist "^3.0.0" minizlib@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.1.1.tgz#6734acc045a46e61d596a43bb9d9cd326e19cc42" + version "1.2.1" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614" + integrity sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA== dependencies: minipass "^2.2.1" mississippi@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" + integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== dependencies: concat-stream "^1.5.0" duplexify "^3.4.2" @@ -6744,6 +7184,7 @@ mississippi@^3.0.0: mixin-deep@^1.2.0: version "1.3.1" resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe" + integrity sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ== dependencies: for-in "^1.0.2" is-extendable "^1.0.1" @@ -6754,24 +7195,27 @@ mkdirp@0.5.1, mkdirp@0.5.x, mkdirp@0.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@ dependencies: minimist "0.0.8" -mocha@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-4.1.0.tgz#7d86cfbcf35cb829e2754c32e17355ec05338794" +mocha@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-5.2.0.tgz#6d8ae508f59167f940f2b5b3c4a612ae50c90ae6" + integrity sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ== dependencies: - browser-stdout "1.3.0" - commander "2.11.0" + browser-stdout "1.3.1" + commander "2.15.1" debug "3.1.0" - diff "3.3.1" + diff "3.5.0" escape-string-regexp "1.0.5" glob "7.1.2" - growl "1.10.3" + growl "1.10.5" he "1.1.1" + minimatch "3.0.4" mkdirp "0.5.1" - supports-color "4.4.0" + supports-color "5.4.0" mock-require@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/mock-require/-/mock-require-3.0.2.tgz#7ce759b559e3b194be5f20a5b1cece0eb363f53d" + version "3.0.3" + resolved "https://registry.yarnpkg.com/mock-require/-/mock-require-3.0.3.tgz#ccd544d9eae81dd576b3f219f69ec867318a1946" + integrity sha512-lLzfLHcyc10MKQnNUCv7dMcoY/2Qxd6wJfbqCcVk3LDb8An4hF6ohk5AztrvgKhJCqj36uyzi/p5se+tvyD+Wg== dependencies: get-caller-file "^1.0.2" normalize-path "^2.1.1" @@ -6779,14 +7223,17 @@ mock-require@^3.0.2: modify-values@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" + integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== -moment@2.21.0: - version "2.21.0" - resolved "http://registry.npmjs.org/moment/-/moment-2.21.0.tgz#2a114b51d2a6ec9e6d83cf803f838a878d8a023a" +moment@2.23.0: + version "2.23.0" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.23.0.tgz#759ea491ac97d54bac5ad776996e2a58cc1bc225" + integrity sha512-3IE39bHVqFbWWaPOMHZF98Q9c3LDKGTmypMiTM2QygGXXElkFWIH7GxfmlwmY2vwa+wmNsoYZmG2iusf1ZjJoA== move-concurrently@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" + integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= dependencies: aproba "^1.1.1" copy-concurrently "^1.0.0" @@ -6798,31 +7245,42 @@ move-concurrently@^1.0.1: ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= ms@^2.0.0, ms@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== multimatch@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-2.1.0.tgz#9c7906a22fb4c02919e2f5f75161b4cdbd4b2a2b" + integrity sha1-nHkGoi+0wCkZ4vX3UWG0zb1LKis= dependencies: array-differ "^1.0.0" array-union "^1.0.1" arrify "^1.0.0" minimatch "^3.0.0" -mute-stream@0.0.7, mute-stream@~0.0.4: +mute-stream@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" + integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= + +mute-stream@~0.0.4: + version "0.0.8" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== nan@^2.9.2: - version "2.11.1" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.11.1.tgz#90e22bccb8ca57ea4cd37cc83d3819b52eea6766" + version "2.12.1" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.12.1.tgz#7b1aa193e9aa86057e3c7bbd0ac448e770925552" + integrity sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw== nanomatch@^1.2.9: version "1.2.13" resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== dependencies: arr-diff "^4.0.0" array-unique "^0.3.2" @@ -6839,10 +7297,12 @@ nanomatch@^1.2.9: natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= needle@^2.2.1: version "2.2.4" resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.4.tgz#51931bff82533b1928b7d1d69e01f1b00ffd2a4e" + integrity sha512-HyoqEb4wr/rsoaIDfTH2aVL9nWtQqba2/HvMv+++m8u0dz808MaagKILxtfeSN7QU7nvbQ79zk3vYOJp9zsNEA== dependencies: debug "^2.1.2" iconv-lite "^0.4.4" @@ -6856,20 +7316,18 @@ neo-async@^2.5.0: version "2.6.0" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.0.tgz#b9d15e4d71c6762908654b5183ed38b753340835" -netmask@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/netmask/-/netmask-1.0.6.tgz#20297e89d86f6f6400f250d9f4f6b4c1945fcd35" - nice-try@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== -nise@^1.3.3, nise@^1.4.6: - version "1.4.6" - resolved "https://registry.yarnpkg.com/nise/-/nise-1.4.6.tgz#76cc3915925056ae6c405dd8ad5d12bde570c19f" +nise@^1.4.8: + version "1.4.8" + resolved "https://registry.yarnpkg.com/nise/-/nise-1.4.8.tgz#ce91c31e86cf9b2c4cac49d7fcd7f56779bfd6b0" + integrity sha512-kGASVhuL4tlAV0tvA34yJYZIVihrUt/5bDwpp4tTluigxUr2bBlJeDXmivb6NuEdFkqvdv/Ybb9dm16PSKUhtw== dependencies: - "@sinonjs/formatio" "3.0.0" - just-extend "^3.0.0" + "@sinonjs/formatio" "^3.1.0" + just-extend "^4.0.2" lolex "^2.3.2" path-to-regexp "^1.7.0" text-encoding "^0.6.4" @@ -6877,16 +7335,18 @@ nise@^1.3.3, nise@^1.4.6: node-cleanup@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/node-cleanup/-/node-cleanup-2.1.2.tgz#7ac19abd297e09a7f72a71545d951b517e4dde2c" + integrity sha1-esGavSl+Caf3KnFUXZUbUX5N3iw= node-fetch-npm@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/node-fetch-npm/-/node-fetch-npm-2.0.2.tgz#7258c9046182dca345b4208eda918daf33697ff7" + integrity sha512-nJIxm1QmAj4v3nfCvEeCrYSoVwXyxLnaPBK5W1W5DGEJwjlKuC2VEUycGw5oxk+4zZahRrB84PUJJgEmhFTDFw== dependencies: encoding "^0.1.11" json-parse-better-errors "^1.0.0" safe-buffer "^5.1.1" -node-fetch@^2.1.1, node-fetch@^2.2.0: +node-fetch@^2.2.0, node-fetch@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.3.0.tgz#1a1d940bbfb916a1d3e0219f037e89e71f8c5fa5" @@ -6897,6 +7357,7 @@ node-forge@^0.7.4: node-gyp@^3.8.0: version "3.8.0" resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.8.0.tgz#540304261c330e80d0d5edce253a68cb3964218c" + integrity sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA== dependencies: fstream "^1.0.0" glob "^7.0.3" @@ -6914,6 +7375,7 @@ node-gyp@^3.8.0: node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= node-libs-browser@^2.0.0: version "2.1.0" @@ -6943,11 +7405,18 @@ node-libs-browser@^2.0.0: util "^0.10.3" vm-browserify "0.0.4" +node-modules-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" + integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= + node-notifier@^5.2.1: - version "5.3.0" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.3.0.tgz#c77a4a7b84038733d5fb351aafd8a268bfe19a01" + version "5.4.0" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.4.0.tgz#7b455fdce9f7de0c63538297354f3db468426e6a" + integrity sha512-SUDEb+o71XR5lXSTyivXd9J7fCloE3SyP4lSgt3lU2oSANiox+SxlNRGPjDKrwU1YN3ix2KN/VGGCg0t01rttQ== dependencies: growly "^1.3.0" + is-wsl "^1.1.0" semver "^5.5.0" shellwords "^0.1.1" which "^1.3.0" @@ -6955,6 +7424,7 @@ node-notifier@^5.2.1: node-pre-gyp@^0.10.0: version "0.10.3" resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz#3070040716afdc778747b61b6887bf78880b80fc" + integrity sha512-d1xFs+C/IPS8Id0qPTZ4bUT8wWryfR/OzzAFxweG+uLN85oPzyo2Iw6bVlLQ/JOdgNonXLCoRyqDzDWq4iw72A== dependencies: detect-libc "^1.0.2" mkdirp "^0.5.1" @@ -6967,62 +7437,10 @@ node-pre-gyp@^0.10.0: semver "^5.3.0" tar "^4" -node-uuid@~1.4.7: - version "1.4.8" - resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.8.tgz#b040eb0923968afabf8d32fb1f17f1167fdab907" - node-version@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/node-version/-/node-version-1.0.0.tgz#1b9b9584a9a7f7a6123f215cd14a652bf21ab19e" - -nodemailer-direct-transport@3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/nodemailer-direct-transport/-/nodemailer-direct-transport-3.3.2.tgz#e96fafb90358560947e569017d97e60738a50a86" - dependencies: - nodemailer-shared "1.1.0" - smtp-connection "2.12.0" - -nodemailer-fetch@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/nodemailer-fetch/-/nodemailer-fetch-1.6.0.tgz#79c4908a1c0f5f375b73fe888da9828f6dc963a4" - -nodemailer-shared@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/nodemailer-shared/-/nodemailer-shared-1.1.0.tgz#cf5994e2fd268d00f5cf0fa767a08169edb07ec0" - dependencies: - nodemailer-fetch "1.6.0" - -nodemailer-smtp-pool@2.8.2: - version "2.8.2" - resolved "https://registry.yarnpkg.com/nodemailer-smtp-pool/-/nodemailer-smtp-pool-2.8.2.tgz#2eb94d6cf85780b1b4725ce853b9cbd5e8da8c72" - dependencies: - nodemailer-shared "1.1.0" - nodemailer-wellknown "0.1.10" - smtp-connection "2.12.0" - -nodemailer-smtp-transport@2.7.2: - version "2.7.2" - resolved "https://registry.yarnpkg.com/nodemailer-smtp-transport/-/nodemailer-smtp-transport-2.7.2.tgz#03d71c76314f14ac7dbc7bf033a6a6d16d67fb77" - dependencies: - nodemailer-shared "1.1.0" - nodemailer-wellknown "0.1.10" - smtp-connection "2.12.0" - -nodemailer-wellknown@0.1.10: - version "0.1.10" - resolved "https://registry.yarnpkg.com/nodemailer-wellknown/-/nodemailer-wellknown-0.1.10.tgz#586db8101db30cb4438eb546737a41aad0cf13d5" - -nodemailer@^2.5.0: - version "2.7.2" - resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-2.7.2.tgz#f242e649aeeae39b6c7ed740ef7b061c404d30f9" - dependencies: - libmime "3.0.0" - mailcomposer "4.0.1" - nodemailer-direct-transport "3.3.2" - nodemailer-shared "1.1.0" - nodemailer-smtp-pool "2.8.2" - nodemailer-smtp-transport "2.7.2" - socks "1.1.9" + integrity sha1-G5uVhKmn96YSPyFc0UplK/IasZ4= "nopt@2 || 3", nopt@3.x: version "3.0.6" @@ -7033,32 +7451,46 @@ nodemailer@^2.5.0: nopt@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" + integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= dependencies: abbrev "1" osenv "^0.1.4" normalize-package-data@^2.0.0, normalize-package-data@^2.3.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.3.5, normalize-package-data@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== dependencies: hosted-git-info "^2.1.4" - is-builtin-module "^1.0.0" + resolve "^1.10.0" semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" -normalize-path@^2.0.0, normalize-path@^2.0.1, normalize-path@^2.1.1: +normalize-path@^2.0.1, normalize-path@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" dependencies: remove-trailing-separator "^1.0.1" +normalize-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-url@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" + integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== + npm-bundled@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.5.tgz#3c1732b7ba936b3a10325aef616467c0ccbcc979" + version "1.0.6" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd" + integrity sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g== -npm-lifecycle@^2.0.0: +npm-lifecycle@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/npm-lifecycle/-/npm-lifecycle-2.1.0.tgz#1eda2eedb82db929e3a0c50341ab0aad140ed569" + integrity sha512-QbBfLlGBKsktwBZLj6AviHC6Q9Y3R/AY4a2PYSIRhSKSS0/CxRyD/PfxEX6tPeOCXQgMSNdwGeECacstgptc+g== dependencies: byline "^5.0.0" graceful-fs "^4.1.11" @@ -7072,6 +7504,7 @@ npm-lifecycle@^2.0.0: "npm-package-arg@^4.0.0 || ^5.0.0 || ^6.0.0", npm-package-arg@^6.0.0, npm-package-arg@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-6.1.0.tgz#15ae1e2758a5027efb4c250554b85a737db7fcc1" + integrity sha512-zYbhP2k9DbJhA0Z3HKUePUgdB1x7MfIfKssC+WLPFMKTBZKpZh5m13PgexJjCq6KW7j17r0jHWcCpxEqnnncSA== dependencies: hosted-git-info "^2.6.0" osenv "^0.1.5" @@ -7079,8 +7512,9 @@ npm-lifecycle@^2.0.0: validate-npm-package-name "^3.0.0" npm-packlist@^1.1.12, npm-packlist@^1.1.6: - version "1.1.12" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.1.12.tgz#22bde2ebc12e72ca482abd67afc51eb49377243a" + version "1.3.0" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.3.0.tgz#7f01e8e44408341379ca98cfd756e7b29bd2626c" + integrity sha512-qPBc6CnxEzpOcc4bjoIBJbYdy0D/LFFPUdxvfwor4/w3vxeE0h6TiOVurCEPpQ6trjN77u/ShyfeJGsbAfB3dA== dependencies: ignore-walk "^3.0.1" npm-bundled "^1.0.1" @@ -7088,14 +7522,16 @@ npm-packlist@^1.1.12, npm-packlist@^1.1.6: npm-pick-manifest@^2.2.3: version "2.2.3" resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-2.2.3.tgz#32111d2a9562638bb2c8f2bf27f7f3092c8fae40" + integrity sha512-+IluBC5K201+gRU85vFlUwX3PFShZAbAgDNp2ewJdWMVSppdo/Zih0ul2Ecky/X7b51J7LrrUAP+XOmOCvYZqA== dependencies: figgy-pudding "^3.5.1" npm-package-arg "^6.0.0" semver "^5.4.1" -npm-registry-fetch@^3.8.0: - version "3.8.0" - resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-3.8.0.tgz#aa7d9a7c92aff94f48dba0984bdef4bd131c88cc" +npm-registry-fetch@^3.8.0, npm-registry-fetch@^3.9.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-3.9.0.tgz#44d841780e2833f06accb34488f8c7450d1a6856" + integrity sha512-srwmt8YhNajAoSAaDWndmZgx89lJwIZ1GWxOuckH4Coek4uHv5S+o/l9FLQe/awA+JwTnj4FJHldxhlXdZEBmw== dependencies: JSONStream "^1.3.4" bluebird "^3.5.1" @@ -7121,18 +7557,21 @@ npm-run-all@^4.1.2: npm-run-path@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-1.0.0.tgz#f5c32bf595fe81ae927daec52e82f8b000ac3c8f" + integrity sha1-9cMr9ZX+ga6Sfa7FLoL4sACsPI8= dependencies: path-key "^1.0.0" 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" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= dependencies: path-key "^2.0.0" "npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.2, npmlog@^4.1.2: 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" @@ -7146,22 +7585,22 @@ null-check@^1.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" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= -nwsapi@^2.0.7: - version "2.0.9" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.0.9.tgz#77ac0cdfdcad52b6a1151a84e73254edc33ed016" - -oauth-sign@~0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" +nwsapi@^2.0.7, nwsapi@^2.0.9: + version "2.1.0" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.1.0.tgz#781065940aed90d9bb01ca5d0ce0fcf81c32712f" + integrity sha512-ZG3bLAvdHmhIjaQ/Db1qvBxsGvFMLIRpQszyqbg31VJ53UP++uZX1/gf3Ut96pdwN9AuDwlMqIYLm0UPCdUeHg== oauth-sign@~0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== object-assign@^4.0.1, 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= object-component@0.0.3: version "0.0.3" @@ -7170,24 +7609,28 @@ object-component@0.0.3: object-copy@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= dependencies: copy-descriptor "^0.1.0" define-property "^0.2.5" kind-of "^3.0.3" object-keys@^1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.12.tgz#09c53855377575310cca62f55bb334abff7b3ed2" + version "1.1.0" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.0.tgz#11bd22348dd2e096a045ab06f6c85bcc340fa032" + integrity sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg== object-visit@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= dependencies: isobject "^3.0.0" object.getownpropertydescriptors@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" + integrity sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY= dependencies: define-properties "^1.1.2" es-abstract "^1.5.1" @@ -7202,9 +7645,15 @@ object.omit@^2.0.0: object.pick@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= dependencies: isobject "^3.0.1" +octokit-pagination-methods@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/octokit-pagination-methods/-/octokit-pagination-methods-1.1.0.tgz#cf472edc9d551055f9ef73f6e42b4dbb4c80bea4" + integrity sha512-fZ4qZdQ2nxJvtcasX7Ghl+WlWS/d9IgnBIwFZXVNNZUmzpno91SX5bc5vuxiuKoCtK78XxGGNuSCrDC7xYB3OQ== + on-finished@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" @@ -7214,6 +7663,7 @@ on-finished@~2.3.0: on-headers@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7" + integrity sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c= once@1.x, once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" @@ -7224,18 +7674,21 @@ once@1.x, once@^1.3.0, once@^1.3.1, once@^1.4.0: onetime@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= dependencies: mimic-fn "^1.0.0" opn@5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/opn/-/opn-5.1.0.tgz#72ce2306a17dbea58ff1041853352b4a8fc77519" + integrity sha512-iPNl7SyM8L30Rm1sjGdLLheyHVw5YXVfi3SKWJzBI7efxRwHojfRFjwE/OLM6qp9xJYMgab8WicTU1cPoY+Hpg== dependencies: is-wsl "^1.1.0" optimist@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" + integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY= dependencies: minimist "~0.0.1" wordwrap "~0.0.2" @@ -7243,6 +7696,7 @@ optimist@^0.6.1: optionator@^0.8.1: version "0.8.2" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" + integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q= dependencies: deep-is "~0.1.3" fast-levenshtein "~2.0.4" @@ -7257,27 +7711,31 @@ os-browserify@^0.3.0: os-homedir@^1.0.0: version "1.0.2" - resolved "http://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= os-locale@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" + integrity sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA== dependencies: execa "^0.7.0" lcid "^1.0.0" mem "^1.1.0" os-locale@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.0.1.tgz#3b014fbf01d87f60a1e5348d80fe870dc82c4620" + version "3.1.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" + integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== dependencies: - execa "^0.10.0" + execa "^1.0.0" lcid "^2.0.0" mem "^4.0.0" os-name@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/os-name/-/os-name-3.0.0.tgz#e1434dbfddb8e74b44c98b56797d951b7648a5d9" + integrity sha512-7c74tib2FsdFbQ3W+qj8Tyd1R3Z6tuVRNNxXjJcZ4NgjIEQU9N/prVMqcW29XZPXGACqaXN3jq58/6hoaoXH6g== dependencies: macos-release "^2.0.0" windows-release "^3.1.0" @@ -7289,6 +7747,7 @@ os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.1, os-tmpdir@~1.0.2: osenv@0, osenv@^0.1.4, osenv@^0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== dependencies: os-homedir "^1.0.0" os-tmpdir "^1.0.0" @@ -7296,117 +7755,118 @@ osenv@0, osenv@^0.1.4, osenv@^0.1.5: override-require@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/override-require/-/override-require-1.1.1.tgz#6ae22fadeb1f850ffb0cf4c20ff7b87e5eb650df" + integrity sha1-auIvresfhQ/7DPTCD/e4fl62UN8= p-defer@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" + integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= + +p-each-series@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-1.0.0.tgz#930f3d12dd1f50e7434457a22cd6f04ac6ad7f71" + integrity sha1-kw89Et0fUOdDRFeiLNbwSsatf3E= + dependencies: + p-reduce "^1.0.0" p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= -p-is-promise@^1.1.0: - version "1.1.0" - resolved "http://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz#9c9456989e9f6588017b0434d56097675c3da05e" +p-is-promise@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.0.0.tgz#7554e3d572109a87e1f3f53f6a7d85d1b194f4c5" + integrity sha512-pzQPhYMCAgLAKPWD2jC3Se9fEfrD9npNos0y150EeqZll7akhEgGhTW/slB6lHku8AvYGiJ+YJ5hfHKePPgFWg== p-limit@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== dependencies: p-try "^1.0.0" -p-limit@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.0.0.tgz#e624ed54ee8c460a778b3c9f3670496ff8a57aec" +p-limit@^2.0.0, p-limit@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.1.0.tgz#1d5a0d20fb12707c758a655f6bbc4386b5930d68" + integrity sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g== dependencies: p-try "^2.0.0" p-locate@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= dependencies: p-limit "^1.1.0" p-locate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== dependencies: p-limit "^2.0.0" p-map-series@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-map-series/-/p-map-series-1.0.0.tgz#bf98fe575705658a9e1351befb85ae4c1f07bdca" + integrity sha1-v5j+V1cFZYqeE1G++4WuTB8Hvco= dependencies: p-reduce "^1.0.0" p-map@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" + integrity sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA== p-pipe@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/p-pipe/-/p-pipe-1.2.0.tgz#4b1a11399a11520a67790ee5a0c1d5881d6befe9" + integrity sha1-SxoROZoRUgpneQ7loMHViB1r7+k= p-reduce@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa" + integrity sha1-GMKw3ZNqRpClKfgjH1ig/bakffo= p-try@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= p-try@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.0.0.tgz#85080bb87c64688fa47996fe8f7dfbe8211760b1" + integrity sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ== p-waterfall@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-waterfall/-/p-waterfall-1.0.0.tgz#7ed94b3ceb3332782353af6aae11aa9fc235bb00" + integrity sha1-ftlLPOszMngjU69qrhGqn8I1uwA= dependencies: p-reduce "^1.0.0" -pac-proxy-agent@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-3.0.0.tgz#11d578b72a164ad74bf9d5bac9ff462a38282432" - dependencies: - agent-base "^4.2.0" - debug "^3.1.0" - get-uri "^2.0.0" - http-proxy-agent "^2.1.0" - https-proxy-agent "^2.2.1" - pac-resolver "^3.0.0" - raw-body "^2.2.0" - socks-proxy-agent "^4.0.1" - -pac-resolver@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-3.0.0.tgz#6aea30787db0a891704deb7800a722a7615a6f26" - dependencies: - co "^4.6.0" - degenerator "^1.0.4" - ip "^1.1.5" - netmask "^1.0.6" - thunkify "^2.1.2" - package-json@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed" + integrity sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0= dependencies: got "^6.7.1" registry-auth-token "^3.0.1" registry-url "^3.0.3" semver "^5.1.0" -pacote@^9.1.0: - version "9.2.3" - resolved "https://registry.yarnpkg.com/pacote/-/pacote-9.2.3.tgz#48cfe87beb9177acd6594355a584a538835424b3" +pacote@^9.4.1: + version "9.4.1" + resolved "https://registry.yarnpkg.com/pacote/-/pacote-9.4.1.tgz#f0af2a52d241bce523d39280ac810c671db62279" + integrity sha512-YKSRsQqmeHxgra0KCdWA2FtVxDPUlBiCdmew+mSe44pzlx5t1ViRMWiQg18T+DREA+vSqYfKzynaToFR4hcKHw== dependencies: - bluebird "^3.5.2" - cacache "^11.2.0" + bluebird "^3.5.3" + cacache "^11.3.2" figgy-pudding "^3.5.1" get-stream "^4.1.0" glob "^7.1.3" - lru-cache "^4.1.3" + lru-cache "^5.1.1" make-fetch-happen "^4.0.1" minimatch "^3.0.4" minipass "^2.3.5" @@ -7425,16 +7885,22 @@ pacote@^9.1.0: safe-buffer "^5.1.2" semver "^5.6.0" ssri "^6.0.1" - tar "^4.4.6" + tar "^4.4.8" unique-filename "^1.1.1" which "^1.3.1" -pad@^2.0.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/pad/-/pad-2.2.1.tgz#e53e5de1304bc4c6c38004cad803f7641cff3220" +pad@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/pad/-/pad-2.2.2.tgz#121a3055be234f27f35a002ee21ccc1364a1f00d" + integrity sha512-w5m0/ISM+Jc/xsxNwKzHhOX+KHKYP3tT+UMmZfCgMSLdCccbjMNYx6LtafOql60qI4NYv13ZGAkSiehJj9ttcQ== dependencies: wcwidth "^1.0.1" +pako@~1.0.2: + version "1.0.8" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.8.tgz#6844890aab9c635af868ad5fecc62e8acbba3ea4" + integrity sha512-6i0HVbUfcKaTv+EG8ZTr75az7GFXcLYk9UyLEg7Notv/Ma+z/UG3TCoz6GiNeOrn1E/e63I0X/Hpw18jHOTUnA== + pako@~1.0.5: version "1.0.6" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.6.tgz#0101211baa70c4bca4a0f63f2206e97b7dfaf258" @@ -7442,6 +7908,7 @@ pako@~1.0.5: parallel-transform@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.1.0.tgz#d410f065b05da23081fcd10f28854c29bda33b06" + integrity sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY= dependencies: cyclist "~0.2.2" inherits "^2.0.3" @@ -7460,10 +7927,12 @@ parse-asn1@^5.0.0: parse-diff@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/parse-diff/-/parse-diff-0.5.1.tgz#18b3e82a0765ac1c8796e3854e475073a691c4fb" + integrity sha512-/qXjo9x/pFa5bVk/ZXaJD0yr3Tf3Yp6MWWMr4vnUmumDrE0yoE6YDH2A8vmcCD/Ko3tW2o0X+zGYh2zMLXshsg== parse-git-config@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/parse-git-config/-/parse-git-config-2.0.3.tgz#6fb840d4a956e28b971c97b33a5deb73a6d5b6bb" + integrity sha512-Js7ueMZOVSZ3tP8C7E3KZiHv6QQl7lnJ+OkbxoaFazzSa2KyEHqApfGbU3XboUgUnq4ZuUmskUpYKTNx01fm5A== dependencies: expand-tilde "^2.0.2" git-config-path "^1.0.1" @@ -7472,10 +7941,12 @@ parse-git-config@^2.0.3: parse-github-repo-url@^1.3.0: version "1.4.1" resolved "https://registry.yarnpkg.com/parse-github-repo-url/-/parse-github-repo-url-1.4.1.tgz#9e7d8bb252a6cb6ba42595060b7bf6df3dbc1f50" + integrity sha1-nn2LslKmy2ukJZUGC3v23z28H1A= parse-github-url@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/parse-github-url/-/parse-github-url-1.0.2.tgz#242d3b65cbcdda14bb50439e3242acf6971db395" + integrity sha512-kgBf6avCbO3Cn6+RnzRGLkUsv4ZVqv/VfAYkRsyBcgkshNvVBkRn1FEZcW0Jb+npXQWm2vHPnnOqFteZxRRGNw== parse-glob@^3.0.4: version "3.0.4" @@ -7489,12 +7960,14 @@ parse-glob@^3.0.4: parse-json@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= dependencies: error-ex "^1.2.0" parse-json@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= dependencies: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" @@ -7502,16 +7975,42 @@ parse-json@^4.0.0: parse-link-header@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/parse-link-header/-/parse-link-header-1.0.1.tgz#bedfe0d2118aeb84be75e7b025419ec8a61140a7" + integrity sha1-vt/g0hGK64S+deewJUGeyKYRQKc= dependencies: xtend "~4.0.1" parse-passwd@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" + integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= + +parse-path@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-4.0.1.tgz#0ec769704949778cb3b8eda5e994c32073a1adff" + integrity sha512-d7yhga0Oc+PwNXDvQ0Jv1BuWkLVPXcAoQ/WREgd6vNNoKYaW52KI+RdOFjI63wjkmps9yUE8VS4veP+AgpQ/hA== + dependencies: + is-ssh "^1.3.0" + protocols "^1.4.0" + +parse-url@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-5.0.1.tgz#99c4084fc11be14141efa41b3d117a96fcb9527f" + integrity sha512-flNUPP27r3vJpROi0/R3/2efgKkyXqnXwyP1KQ2U0SfFRgdizOdWfvrrvJg1LuOoxs7GQhmxJlq23IpQ/BkByg== + dependencies: + is-ssh "^1.3.0" + normalize-url "^3.3.0" + parse-path "^4.0.0" + protocols "^1.4.0" parse5@4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" + integrity sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA== + +parse5@5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.0.tgz#c59341c9723f414c452975564c7c00a68d58acd2" + integrity sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ== parseqs@0.0.5: version "0.0.5" @@ -7532,24 +8031,33 @@ parseurl@~1.3.2: pascalcase@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= path-browserify@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" +path-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.0.tgz#40702a97af46ae00b0ea6fa8998c0b03c0af160d" + integrity sha512-Hkavx/nY4/plImrZPHRk2CL9vpOymZLgEbMNX1U0bjcBL7QN9wODxyx0yaMZURSQaUtSEvDrfAvxa9oPb0at9g== + path-dirname@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= path-exists@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= dependencies: pinkie-promise "^2.0.0" path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: version "1.0.1" @@ -7558,20 +8066,17 @@ path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: path-key@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/path-key/-/path-key-1.0.0.tgz#5d53d578019646c0d68800db4e146e6bdc2ac7af" + integrity sha1-XVPVeAGWRsDWiADbThRua9wqx68= path-key@^2.0.0, path-key@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= -path-parse@^1.0.5: +path-parse@^1.0.5, path-parse@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" - -path-proxy@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/path-proxy/-/path-proxy-1.0.0.tgz#18e8a36859fc9d2f1a53b48dee138543c020de5e" - dependencies: - inflection "~1.3.0" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== path-to-regexp@0.1.7: version "0.1.7" @@ -7586,12 +8091,14 @@ path-to-regexp@^1.7.0: path-type@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" + integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= dependencies: pify "^2.0.0" path-type@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= dependencies: graceful-fs "^4.1.2" pify "^2.0.0" @@ -7600,6 +8107,7 @@ path-type@^1.0.0: path-type@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== dependencies: pify "^3.0.0" @@ -7620,6 +8128,7 @@ pbkdf2@^3.0.3: performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= pidtree@^0.3.0: version "0.3.0" @@ -7627,11 +8136,13 @@ pidtree@^0.3.0: pify@^2.0.0, pify@^2.3.0: version "2.3.0" - resolved "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= pify@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= pify@^4.0.0: version "4.0.1" @@ -7640,58 +8151,75 @@ pify@^4.0.0: pinkie-promise@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= dependencies: pinkie "^2.0.0" pinkie@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= pinpoint@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/pinpoint/-/pinpoint-1.1.0.tgz#0cf7757a6977f1bf7f6a32207b709e377388e874" + integrity sha1-DPd1eml38b9/ajIge3CeN3OI6HQ= + +pirates@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" + integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== + dependencies: + node-modules-regexp "^1.0.0" pkg-dir@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" + integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= dependencies: find-up "^2.1.0" pkg-dir@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" + integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== dependencies: find-up "^3.0.0" pkginfo@0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/pkginfo/-/pkginfo-0.4.0.tgz#349dbb7ffd38081fcadc0853df687f0c7744cd65" + integrity sha1-NJ27f/04CB/K3AhT32h/DHdEzWU= -plugin-error@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/plugin-error/-/plugin-error-0.1.2.tgz#3b9bb3335ccf00f425e07437e19276967da47ace" +plugin-error@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/plugin-error/-/plugin-error-1.0.1.tgz#77016bd8919d0ac377fdcdd0322328953ca5781c" + integrity sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA== dependencies: - ansi-cyan "^0.1.1" - ansi-red "^0.1.1" - arr-diff "^1.0.1" - arr-union "^2.0.1" - extend-shallow "^1.1.2" + ansi-colors "^1.0.1" + arr-diff "^4.0.0" + arr-union "^3.1.0" + extend-shallow "^3.0.2" pn@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" + integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA== posix-character-classes@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= prepend-http@^1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" + integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= preserve@^0.2.0: version "0.2.0" @@ -7703,22 +8231,17 @@ prettier-check@^2.0.0: dependencies: execa "^0.6.0" -prettier@^1.14.0: - version "1.15.2" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.15.2.tgz#d31abe22afa4351efa14c7f8b94b58bb7452205e" - -pretty-format@^22.4.0, pretty-format@^22.4.3: - version "22.4.3" - resolved "http://registry.npmjs.org/pretty-format/-/pretty-format-22.4.3.tgz#f873d780839a9c02e9664c8a082e9ee79eaac16f" - dependencies: - ansi-regex "^3.0.0" - ansi-styles "^3.2.0" +prettier@^1.14.0, prettier@^1.16.4: + version "1.16.4" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.16.4.tgz#73e37e73e018ad2db9c76742e2647e21790c9717" + integrity sha512-ZzWuos7TI5CKUeQAtFd6Zhm2s6EpAD/ZLApIhsF9pRvRtM1RFo61dM/4MSRUA0SuLugA/zgrZD8m0BaY46Og7g== -pretty-format@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-23.6.0.tgz#5eaac8eeb6b33b987b7fe6097ea6a8a146ab5760" +pretty-format@^24.0.0: + version "24.0.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-24.0.0.tgz#cb6599fd73ac088e37ed682f61291e4678f48591" + integrity sha512-LszZaKG665djUcqg5ZQq+XzezHLKrxsA86ZABTozp+oNhkdqa+tG2dX4qa6ERl5c/sRDrAa3lHmwnvKoP+OG/g== dependencies: - ansi-regex "^3.0.0" + ansi-regex "^4.0.0" ansi-styles "^3.2.0" private@^0.1.6, private@^0.1.8: @@ -7732,52 +8255,59 @@ process-nextick-args@~1.0.6: process-nextick-args@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" + integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw== process@^0.11.10: version "0.11.10" resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" progress@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.1.tgz#c9242169342b1c29d275889c95734621b1952e31" + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== promise-inflight@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= promise-retry@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-1.1.1.tgz#6739e968e3051da20ce6497fb2b50f6911df3d6d" + integrity sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0= dependencies: err-code "^1.0.0" retry "^0.10.0" -promisify-call@^2.0.2: - version "2.0.4" - resolved "https://registry.yarnpkg.com/promisify-call/-/promisify-call-2.0.4.tgz#d48c2d45652ccccd52801ddecbd533a6d4bd5fba" - dependencies: - with-callback "^1.0.2" - -prompts@^0.1.9: - version "0.1.14" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-0.1.14.tgz#a8e15c612c5c9ec8f8111847df3337c9cbd443b2" +prompts@^2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.0.3.tgz#c5ccb324010b2e8f74752aadceeb57134c1d2522" + integrity sha512-H8oWEoRZpybm6NV4to9/1limhttEo13xK62pNvn2JzY0MA03p7s0OjtmhXyon3uJmxiJJVSuUwEJFFssI3eBiQ== dependencies: - kleur "^2.0.1" - sisteransi "^0.1.1" + kleur "^3.0.2" + sisteransi "^1.0.0" promzard@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/promzard/-/promzard-0.3.0.tgz#26a5d6ee8c7dee4cb12208305acfb93ba382a9ee" + integrity sha1-JqXW7ox97kyxIggwWs+5O6OCqe4= dependencies: read "1" proto-list@~1.2.1: version "1.2.4" resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" + integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= + +protocols@^1.1.0, protocols@^1.4.0: + version "1.4.7" + resolved "https://registry.yarnpkg.com/protocols/-/protocols-1.4.7.tgz#95f788a4f0e979b291ffefcf5636ad113d037d32" + integrity sha512-Fx65lf9/YDn3hUX08XUc0J8rSux36rEsyiv21ZGUC1mOyeM3lTRpZLcrm8aAolzS4itwVfm7TAPyxC2E5zd6xg== protoduck@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/protoduck/-/protoduck-5.0.1.tgz#03c3659ca18007b69a50fd82a7ebcc516261151f" + integrity sha512-WxoCeDCoCBY55BMvj4cAEjdVUFGRWed9ZxPlqTKYyw1nDDTQ4pqmnIMAGfJlg7Dx35uB/M+PHJPTmGOvaCaPTg== dependencies: genfun "^5.0.0" @@ -7788,23 +8318,6 @@ proxy-addr@~2.0.4: forwarded "~0.1.2" ipaddr.js "1.8.0" -proxy-agent@~3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-3.0.3.tgz#1c1a33db60ef5f2e9e35b876fd63c2bc681c611d" - dependencies: - agent-base "^4.2.0" - debug "^3.1.0" - http-proxy-agent "^2.1.0" - https-proxy-agent "^2.2.1" - lru-cache "^4.1.2" - pac-proxy-agent "^3.0.0" - proxy-from-env "^1.0.0" - socks-proxy-agent "^4.0.1" - -proxy-from-env@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.0.0.tgz#33c50398f70ea7eb96d21f7b817630a55791c7ee" - prr@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" @@ -7812,10 +8325,12 @@ prr@~1.0.1: pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= psl@^1.1.24, psl@^1.1.28: - version "1.1.29" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.29.tgz#60f580d360170bb722a797cc704411e6da850c67" + version "1.1.31" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.31.tgz#e9aa86d0101b5b105cbe93ac6b784cd547276184" + integrity sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw== public-encrypt@^4.0.0: version "4.0.3" @@ -7831,6 +8346,7 @@ public-encrypt@^4.0.0: pump@^2.0.0: 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" @@ -7838,6 +8354,7 @@ pump@^2.0.0: pump@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== dependencies: end-of-stream "^1.1.0" once "^1.3.1" @@ -7854,21 +8371,20 @@ punycode@1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" -punycode@1.4.1, punycode@^1.2.4, punycode@^1.4.1: +punycode@^1.2.4, punycode@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= punycode@^2.1.0, punycode@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -q@1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/q/-/q-1.4.1.tgz#55705bcd93c5f3673530c2c2cbc0c2b3addc286e" - -q@^1.5.0, q@^1.5.1: +q@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= qjobs@^1.1.4: version "1.2.0" @@ -7878,10 +8394,6 @@ qs@6.5.2, qs@~6.5.2: version "6.5.2" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" -qs@~6.2.0: - version "6.2.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.3.tgz#1cfcb25c10a9b2b483053ff39f5dfc9233908cfe" - querystring-es3@^0.2.0, querystring-es3@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" @@ -7893,6 +8405,7 @@ querystring@0.2.0: quick-lru@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8" + integrity sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g= randomatic@^3.0.0: version "3.1.1" @@ -7922,12 +8435,13 @@ range-parser@^1.2.0, range-parser@~1.2.0: raw-body@2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.2.0.tgz#994976cf6a5096a41162840492f0bdc5d6e7fb96" + integrity sha1-mUl2z2pQlqQRYoQEkvC9xdbn+5Y= dependencies: bytes "2.4.0" iconv-lite "0.4.15" unpipe "1.0.0" -raw-body@2.3.3, raw-body@^2.2.0: +raw-body@2.3.3: version "2.3.3" resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.3.tgz#1b324ece6b5706e153855bc1148c65bb7f6ea0c3" dependencies: @@ -7939,6 +8453,7 @@ raw-body@2.3.3, raw-body@^2.2.0: rc@^1.0.1, rc@^1.1.6, rc@^1.2.7: 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" @@ -7948,12 +8463,14 @@ rc@^1.0.1, rc@^1.1.6, rc@^1.2.7: read-cmd-shim@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-1.0.1.tgz#2d5d157786a37c055d22077c32c53f8329e91c7b" + integrity sha1-LV0Vd4ajfAVdIgd8MsU/gynpHHs= dependencies: graceful-fs "^4.1.2" -"read-package-json@1 || 2", read-package-json@^2.0.0: +"read-package-json@1 || 2", read-package-json@^2.0.0, read-package-json@^2.0.13: version "2.0.13" resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-2.0.13.tgz#2e82ebd9f613baa6d2ebe3aa72cefe3f68e41f4a" + integrity sha512-/1dZ7TRZvGrYqE0UAfN6qQb5GYBsNcqS1C0tNK601CFOJmtHI7NIGXwetEPU/OtoFHZL3hDxm4rolFFVE9Bnmg== dependencies: glob "^7.1.1" json-parse-better-errors "^1.0.1" @@ -7963,8 +8480,9 @@ read-cmd-shim@^1.0.1: graceful-fs "^4.1.2" read-package-tree@^5.1.6: - version "5.2.1" - resolved "https://registry.yarnpkg.com/read-package-tree/-/read-package-tree-5.2.1.tgz#6218b187d6fac82289ce4387bbbaf8eef536ad63" + version "5.2.2" + resolved "https://registry.yarnpkg.com/read-package-tree/-/read-package-tree-5.2.2.tgz#4b6a0ef2d943c1ea36a578214c9a7f6b7424f7a8" + integrity sha512-rW3XWUUkhdKmN2JKB4FL563YAgtINifso5KShykufR03nJ5loGFlkUMe1g/yxmqX073SoYYTsgXu7XdDinKZuA== dependencies: debuglog "^1.0.1" dezalgo "^1.0.0" @@ -7975,6 +8493,7 @@ read-package-tree@^5.1.6: read-pkg-up@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" + integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= dependencies: find-up "^1.0.0" read-pkg "^1.0.0" @@ -7982,13 +8501,23 @@ read-pkg-up@^1.0.1: read-pkg-up@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" + integrity sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc= dependencies: find-up "^2.0.0" read-pkg "^3.0.0" +read-pkg-up@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-4.0.0.tgz#1b221c6088ba7799601c808f91161c66e58f8978" + integrity sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA== + dependencies: + find-up "^3.0.0" + read-pkg "^3.0.0" + read-pkg@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= dependencies: load-json-file "^1.0.0" normalize-package-data "^2.3.2" @@ -7997,6 +8526,7 @@ read-pkg@^1.0.0: read-pkg@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" + integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= dependencies: load-json-file "^4.0.0" normalize-package-data "^2.3.2" @@ -8005,10 +8535,11 @@ read-pkg@^3.0.0: read@1, read@~1.0.1: version "1.0.7" resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" + integrity sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ= dependencies: mute-stream "~0.0.4" -"readable-stream@1 || 2", readable-stream@2, readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.0, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6: +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.0, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: version "2.3.6" resolved "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" dependencies: @@ -8020,15 +8551,6 @@ read@1, read@~1.0.1: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@1.1.x, "readable-stream@1.x >=1.1.9", readable-stream@^1.1.7: - version "1.1.14" - resolved "http://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - "readable-stream@2 || 3": version "3.0.6" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.0.6.tgz#351302e4c68b5abd6a2ed55376a7f9a25be3057a" @@ -8037,9 +8559,19 @@ readable-stream@1.1.x, "readable-stream@1.x >=1.1.9", readable-stream@^1.1.7: string_decoder "^1.1.1" util-deprecate "^1.0.1" -readable-stream@~2.0.0, readable-stream@~2.0.5: +readable-stream@^3.0.2, readable-stream@^3.0.6, readable-stream@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.1.1.tgz#ed6bbc6c5ba58b090039ff18ce670515795aeb06" + integrity sha512-DkN66hPyqDhnIQ6Jcsvx9bFjhw214O4poMBcIMgPVpQvNy9a0e0Uhg5SqySyDKAmUlwt8LonTBz1ezOnM8pUdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-stream@~2.0.6: version "2.0.6" - resolved "http://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e" + integrity sha1-j5A0HmilPMySh4jaz80Rs265t44= dependencies: core-util-is "~1.0.0" inherits "~2.0.1" @@ -8051,13 +8583,14 @@ readable-stream@~2.0.0, readable-stream@~2.0.5: readdir-scoped-modules@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.0.2.tgz#9fafa37d286be5d92cbaebdee030dc9b5f406747" + integrity sha1-n6+jfShr5dksuuve4DDcm19AZ0c= dependencies: debuglog "^1.0.1" dezalgo "^1.0.0" graceful-fs "^4.1.2" once "^1.3.0" -readdirp@^2.0.0: +readdirp@^2.0.0, readdirp@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" dependencies: @@ -8068,22 +8601,26 @@ readdirp@^2.0.0: readline-sync@^1.4.9: version "1.4.9" resolved "https://registry.yarnpkg.com/readline-sync/-/readline-sync-1.4.9.tgz#3eda8e65f23cd2a17e61301b1f0003396af5ecda" + integrity sha1-PtqOZfI80qF+YTAbHwADOWr17No= -realpath-native@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.0.2.tgz#cd51ce089b513b45cf9b1516c82989b51ccc6560" +realpath-native@^1.0.0, realpath-native@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.1.0.tgz#2003294fea23fb0672f2476ebe22fcf498a2d65c" + integrity sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA== dependencies: util.promisify "^1.0.0" rechoir@^0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" + integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= dependencies: resolve "^1.1.6" redent@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" + integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94= dependencies: indent-string "^2.1.0" strip-indent "^1.0.1" @@ -8091,34 +8628,24 @@ redent@^1.0.0: redent@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/redent/-/redent-2.0.0.tgz#c1b2007b42d57eb1389079b3c8333639d5e1ccaa" + integrity sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo= dependencies: indent-string "^3.0.0" strip-indent "^2.0.0" -redis-commands@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/redis-commands/-/redis-commands-1.4.0.tgz#52f9cf99153efcce56a8f86af986bd04e988602f" - -redis-parser@^2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/redis-parser/-/redis-parser-2.6.0.tgz#52ed09dacac108f1a631c07e9b69941e7a19504b" - -redis@^2.7.1: - version "2.8.0" - resolved "https://registry.yarnpkg.com/redis/-/redis-2.8.0.tgz#202288e3f58c49f6079d97af7a10e1303ae14b02" - dependencies: - double-ended-queue "^2.1.0-0" - redis-commands "^1.2.0" - redis-parser "^2.6.0" - regenerate@^1.2.1: version "1.4.0" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" -regenerator-runtime@^0.11.0, regenerator-runtime@^0.11.1: +regenerator-runtime@^0.11.0: version "0.11.1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" +regenerator-runtime@^0.12.0: + version "0.12.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz#fa1a71544764c036f8c49b13a08b2594c9f8a0de" + integrity sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg== + regenerator-transform@^0.10.0: version "0.10.1" resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" @@ -8136,6 +8663,7 @@ regex-cache@^0.4.2: regex-not@^1.0.0, regex-not@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== dependencies: extend-shallow "^3.0.2" safe-regex "^1.1.0" @@ -8151,6 +8679,7 @@ regexpu-core@^2.0.0: registry-auth-token@^3.0.1: version "3.3.2" resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.3.2.tgz#851fd49038eecb586911115af845260eec983f20" + integrity sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ== dependencies: rc "^1.1.6" safe-buffer "^5.0.1" @@ -8158,6 +8687,7 @@ registry-auth-token@^3.0.1: registry-url@^3.0.3: version "3.1.0" resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" + integrity sha1-PU74cPc93h138M+aOBQyRE4XSUI= dependencies: rc "^1.0.1" @@ -8171,24 +8701,26 @@ regjsparser@^0.1.4: dependencies: jsesc "~0.5.0" -remap-istanbul@^0.10.1: - version "0.10.1" - resolved "https://registry.yarnpkg.com/remap-istanbul/-/remap-istanbul-0.10.1.tgz#3aa58dd5021d499f336d3ba5bf3bbb91c1b88e37" +remap-istanbul@^0.13.0: + version "0.13.0" + resolved "https://registry.yarnpkg.com/remap-istanbul/-/remap-istanbul-0.13.0.tgz#a529dfd080bb760f5274e3671c9c065f29923ed1" + integrity sha512-rS5ZpVAx3fGtKZkiBe1esXg5mKYbgW9iz8kkADFt3p6lo3NsBBUX1q6SwdhwUtYCGnr7nK6gRlbYK3i8R0jbRA== dependencies: - amdefine "^1.0.0" istanbul "0.4.5" - minimatch "^3.0.3" - plugin-error "^0.1.2" - source-map "^0.6.1" - through2 "2.0.1" + minimatch "^3.0.4" + plugin-error "^1.0.1" + source-map "0.6.1" + through2 "3.0.0" remove-trailing-separator@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= repeat-element@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" + integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== repeat-string@^0.2.2: version "0.2.2" @@ -8201,59 +8733,36 @@ repeat-string@^1.5.2, repeat-string@^1.6.1: repeating@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= dependencies: is-finite "^1.0.0" replace-in-file@^3.4.2: - version "3.4.2" - resolved "https://registry.yarnpkg.com/replace-in-file/-/replace-in-file-3.4.2.tgz#6d40f076ac86948e28efeb6fab73fbad5c0bfa2a" - integrity sha512-wb2EU5MBBqUty+b1xSIqa0IKs5M2/a+4Ldw8KM5Gpe1btv16K0eii6nMxyNhAmRZhCEPrge0ss5Ij9f7vJEYcw== + version "3.4.3" + resolved "https://registry.yarnpkg.com/replace-in-file/-/replace-in-file-3.4.3.tgz#491a41c4353ca8d0342a4a0b9fb3eda3c2d0c7e3" + integrity sha512-m62vEDCIL1B8uzymh+YKMLb4N4LdX5A5ObxOjap4wyCHzWqblAUYO5vhjWwk7zfR8PkTRIdPZVo/u4h33clnew== dependencies: chalk "^2.4.1" glob "^7.1.2" - yargs "^12.0.1" + yargs "^12.0.5" -request-promise-core@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.1.tgz#3eee00b2c5aa83239cfb04c5700da36f81cd08b6" +request-promise-core@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.2.tgz#339f6aababcafdb31c799ff158700336301d3346" + integrity sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag== dependencies: - lodash "^4.13.1" + lodash "^4.17.11" request-promise-native@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.5.tgz#5281770f68e0c9719e5163fd3fab482215f4fda5" - dependencies: - request-promise-core "1.1.1" - stealthy-require "^1.1.0" - tough-cookie ">=2.3.3" - -request@2.75.x: - version "2.75.0" - resolved "http://registry.npmjs.org/request/-/request-2.75.0.tgz#d2b8268a286da13eaa5d01adf5d18cc90f657d93" - dependencies: - aws-sign2 "~0.6.0" - aws4 "^1.2.1" - bl "~1.1.2" - caseless "~0.11.0" - combined-stream "~1.0.5" - extend "~3.0.0" - forever-agent "~0.6.1" - form-data "~2.0.0" - har-validator "~2.0.6" - hawk "~3.1.3" - http-signature "~1.1.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.7" - node-uuid "~1.4.7" - oauth-sign "~0.8.1" - qs "~6.2.0" - stringstream "~0.0.4" - tough-cookie "~2.3.0" - tunnel-agent "~0.4.1" - -request@2.88.0, request@^2.0.0, request@^2.74.0, request@^2.87.0: + version "1.0.7" + resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.7.tgz#a49868a624bdea5069f1251d0a836e0d89aa2c59" + integrity sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w== + dependencies: + request-promise-core "1.1.2" + stealthy-require "^1.1.1" + tough-cookie "^2.3.3" + +request@^2.87.0, request@^2.88.0: version "2.88.0" resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" dependencies: @@ -8278,26 +8787,20 @@ request@2.88.0, request@^2.0.0, request@^2.74.0, request@^2.87.0: tunnel-agent "^0.6.0" uuid "^3.3.2" -requestretry@^1.2.2: - version "1.13.0" - resolved "https://registry.yarnpkg.com/requestretry/-/requestretry-1.13.0.tgz#213ec1006eeb750e8b8ce54176283d15a8d55d94" - dependencies: - extend "^3.0.0" - lodash "^4.15.0" - request "^2.74.0" - when "^3.7.7" - require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= require-from-string@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== require-main-filename@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" + integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= requires-port@^1.0.0: version "1.0.0" @@ -8306,34 +8809,46 @@ requires-port@^1.0.0: resolve-cwd@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" + integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= dependencies: resolve-from "^3.0.0" resolve-from@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + integrity sha1-six699nWiBvItuZTM17rywoYh0g= resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== resolve-url@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= resolve@1.1.7, resolve@1.1.x: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" -resolve@1.x, resolve@^1.1.6, resolve@^1.3.2, resolve@^1.7.1, resolve@^1.8.1: +resolve@1.8.1, resolve@1.x, resolve@^1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.8.1.tgz#82f1ec19a423ac1fbd080b0bab06ba36e84a7a26" dependencies: path-parse "^1.0.5" +resolve@^1.1.6, resolve@^1.10.0, resolve@^1.3.2: + version "1.10.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.10.0.tgz#3bdaaeaf45cc07f375656dfd2e54ed0810b101ba" + integrity sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg== + dependencies: + path-parse "^1.0.6" + restore-cursor@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= dependencies: onetime "^2.0.0" signal-exit "^3.0.2" @@ -8341,10 +8856,7 @@ restore-cursor@^2.0.0: ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - -retry-axios@0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/retry-axios/-/retry-axios-0.3.2.tgz#5757c80f585b4cc4c4986aa2ffd47a60c6d35e13" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== retry-request@^4.0.0: version "4.0.0" @@ -8355,18 +8867,33 @@ retry-request@^4.0.0: retry@^0.10.0: version "0.10.1" resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4" + integrity sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q= rfc6902@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/rfc6902/-/rfc6902-3.0.1.tgz#03a3d38329dbc266fbc92aa7fc14546d7839e89f" + integrity sha512-a4t5OlaOgAejBg48/lkyQMcV6EWpljjSjmXAtSXLhw83x1OhlcVGLMLf//GoUSpHsWt8x/7oxaf5FEGM9QH/iQ== + +rfdc@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.1.2.tgz#e6e72d74f5dc39de8f538f65e00c36c18018e349" + integrity sha512-92ktAgvZhBzYTIK0Mja9uen5q5J3NRVMoDkJL2VMwq6SXjVCgqvQeVP2XAaUY6HT+XpQYeLSjb3UoitBryKmdA== right-align@^0.1.1: version "0.1.3" resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" + integrity sha1-YTObci/mo1FWiSENJOFMlhSGE+8= dependencies: align-text "^0.1.1" -rimraf@2, rimraf@^2.5.4, rimraf@^2.6.0, rimraf@^2.6.1, rimraf@^2.6.2: +rimraf@2, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.3: + 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" + +rimraf@^2.6.0, rimraf@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" dependencies: @@ -8388,76 +8915,89 @@ rollup-plugin-commonjs@^9.1.3: resolve "^1.8.1" rollup-pluginutils "^2.3.3" -rollup-plugin-license@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-license/-/rollup-plugin-license-0.6.0.tgz#d8e5e75ac0fcb5a7af7c5d89a644ef42f05f48a4" +rollup-plugin-license@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/rollup-plugin-license/-/rollup-plugin-license-0.8.1.tgz#cdcfee2a32f27790e5019a2a7abd9234476ac589" + integrity sha512-UeDVawklIv/rb4/M8AqHHtt03L+gDNfCVjQJqgUaQKiNTmUk+peAzkaLYeC6kfQm7i77kGYEzkbPZ0Dd9NEbCQ== dependencies: commenting "1.0.5" - lodash "4.17.5" - magic-string "0.22.4" + lodash "4.17.11" + magic-string "0.25.1" mkdirp "0.5.1" - moment "2.21.0" + moment "2.23.0" -rollup-plugin-node-resolve@^3.3.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-3.4.0.tgz#908585eda12e393caac7498715a01e08606abc89" +rollup-plugin-node-resolve@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-4.0.0.tgz#9bc6b8205e9936cc0e26bba2415f1ecf1e64d9b2" + integrity sha512-7Ni+/M5RPSUBfUaP9alwYQiIKnKeXCOHiqBpKUl9kwp3jX5ZJtgXAait1cne6pGEVUUztPD6skIKH9Kq9sNtfw== dependencies: - builtin-modules "^2.0.0" + builtin-modules "^3.0.0" is-module "^1.0.0" - resolve "^1.1.6" + resolve "^1.8.1" rollup-plugin-npm@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/rollup-plugin-npm/-/rollup-plugin-npm-2.0.0.tgz#8a28ffdb5160bc8e1e371de39ed71faf009d655c" -rollup-plugin-typescript2@^0.13.0: - version "0.13.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.13.0.tgz#5fc838657d05af82e04554832cadf06cdb32f657" +rollup-plugin-typescript2@^0.19.2: + version "0.19.2" + resolved "https://registry.yarnpkg.com/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.19.2.tgz#87d9c799cd6e02efbedbba25af12753a1e92b6c2" + integrity sha512-DRG7SaYX0QzBIz6rII5nm1UkiceS95r8mJjujugybyIueNF3auvzGTHMK62O7As/0q5RHjXsOguWOUv+KJKLFA== dependencies: - fs-extra "^5.0.0" - resolve "^1.7.1" - rollup-pluginutils "^2.0.1" - tslib "^1.9.0" + fs-extra "7.0.1" + resolve "1.8.1" + rollup-pluginutils "2.3.3" + tslib "1.9.3" -rollup-plugin-uglify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-uglify/-/rollup-plugin-uglify-3.0.0.tgz#a34eca24617709c6bf1778e9653baafa06099b86" +rollup-plugin-uglify@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/rollup-plugin-uglify/-/rollup-plugin-uglify-6.0.2.tgz#681042cfdf7ea4e514971946344e1a95bc2772fe" + integrity sha512-qwz2Tryspn5QGtPUowq5oumKSxANKdrnfz7C0jm4lKxvRDsNe/hSGsB9FntUul7UeC4TsZEWKErVgE1qWSO0gw== dependencies: - uglify-es "^3.3.7" + "@babel/code-frame" "^7.0.0" + jest-worker "^24.0.0" + serialize-javascript "^1.6.1" + uglify-js "^3.4.9" -rollup-pluginutils@^2.0.1, rollup-pluginutils@^2.3.3: +rollup-pluginutils@2.3.3, rollup-pluginutils@^2.3.3: version "2.3.3" resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.3.3.tgz#3aad9b1eb3e7fe8262820818840bf091e5ae6794" dependencies: estree-walker "^0.5.2" micromatch "^2.3.11" -rollup@^0.58.2: - version "0.58.2" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-0.58.2.tgz#2feddea8c0c022f3e74b35c48e3c21b3433803ce" +rollup@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-1.2.1.tgz#996a8c63920ab056b39507d93195222e59d2807f" + integrity sha512-rFf7m2MHwjSYjSCFdA7ckGluMcQRcC3dKn6uAWYrk/6wnUrdQhJJruumkk5IV/3KMdmuc9qORmTu1VPBa2Ii8w== dependencies: - "@types/estree" "0.0.38" + "@types/estree" "0.0.39" "@types/node" "*" + acorn "^6.1.0" rsvp@^3.3.3: version "3.6.2" resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-3.6.2.tgz#2e96491599a96cde1b515d5674a8f7a91452926a" + integrity sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw== run-async@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" + integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA= dependencies: is-promise "^2.1.0" run-queue@^1.0.0, run-queue@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" + integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= dependencies: aproba "^1.1.1" -rxjs@^6.1.0: - version "6.3.3" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.3.3.tgz#3c6a7fa420e844a81390fb1158a9ec614f4bad55" +rxjs@^6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.4.0.tgz#f3bb0fe7bda7fb69deac0c16f17b50b0b8790504" + integrity sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw== dependencies: tslib "^1.9.0" @@ -8467,25 +9007,25 @@ safe-buffer@5.1.2, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, s safe-regex@^1.1.0: version "1.1.0" - resolved "http://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= dependencies: ret "~0.1.10" "safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -samsam@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/samsam/-/samsam-1.3.0.tgz#8d1d9350e25622da30de3e44ba692b5221ab7c50" - -sane@^2.0.0: - version "2.5.2" - resolved "https://registry.yarnpkg.com/sane/-/sane-2.5.2.tgz#b4dc1861c21b427e929507a3e751e2a2cb8ab3fa" +sane@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/sane/-/sane-3.1.0.tgz#995193b7dc1445ef1fe41ddfca2faf9f111854c6" + integrity sha512-G5GClRRxT1cELXfdAq7UKtUsv8q/ZC5k8lQGmjEm4HcAl3HzBy68iglyNCmw4+0tiXPCBZntslHlRhbnsSws+Q== dependencies: anymatch "^2.0.0" capture-exit "^1.2.0" exec-sh "^0.2.0" + execa "^1.0.0" fb-watchman "^2.0.0" micromatch "^3.1.4" minimist "^1.1.1" @@ -8494,9 +9034,10 @@ sane@^2.0.0: optionalDependencies: fsevents "^1.2.3" -sauce-connect-launcher@^1.2.2: +sauce-connect-launcher@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sauce-connect-launcher/-/sauce-connect-launcher-1.2.4.tgz#8d38f85242a9fbede1b2303b559f7e20c5609a1c" + integrity sha512-X2vfwulR6brUGiicXKxPm1GJ7dBEeP1II450Uv4bHGrcGOapZNgzJvn9aioea5IC5BPp/7qjKdE3xbbTBIVXMA== dependencies: adm-zip "~0.4.3" async "^2.1.2" @@ -8504,22 +9045,23 @@ sauce-connect-launcher@^1.2.2: lodash "^4.16.6" rimraf "^2.5.4" -saucelabs@^1.4.0: +saucelabs@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/saucelabs/-/saucelabs-1.5.0.tgz#9405a73c360d449b232839919a86c396d379fd9d" + integrity sha512-jlX3FGdWvYf4Q3LFfFWS1QvPg3IGCGWxIc8QBFdPTbpTJnt/v17FHXYVAn7C8sHf1yUXo2c7yIM0isDryfYtHQ== dependencies: https-proxy-agent "^2.2.1" -sax@^1.2.4: +sax@>=0.6.0, sax@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" -schema-utils@^0.4.4: - version "0.4.7" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.7.tgz#ba74f597d2be2ea880131746ee17d0a093c68187" +saxes@^3.1.5: + version "3.1.6" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-3.1.6.tgz#2d948a47b54918516c5a64096f08865deb5bd8cd" + integrity sha512-LAYs+lChg1v5uKNzPtsgTxSS5hLo8aIhSMCJt1WMpefAxm3D1RTpMwSpb6ebdL31cubiLTnhokVktBW+cv9Y9w== dependencies: - ajv "^6.1.0" - ajv-keywords "^3.1.0" + xmlchars "^1.3.1" schema-utils@^1.0.0: version "1.0.0" @@ -8529,23 +9071,36 @@ schema-utils@^1.0.0: ajv-errors "^1.0.0" ajv-keywords "^3.1.0" +selenium-webdriver@^4.0.0-alpha.1: + version "4.0.0-alpha.1" + resolved "https://registry.yarnpkg.com/selenium-webdriver/-/selenium-webdriver-4.0.0-alpha.1.tgz#cc93415e21d2dc1dfd85dfc5f6b55f3ac53933b1" + integrity sha512-z88rdjHAv3jmTZ7KSGUkTvo4rGzcDGMq0oXWHNIDK96Gs31JKVdu9+FMtT4KBrVoibg8dUicJDok6GnqqttO5Q== + dependencies: + jszip "^3.1.3" + rimraf "^2.5.4" + tmp "0.0.30" + xml2js "^0.4.17" + semver-diff@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" + integrity sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY= dependencies: semver "^5.0.3" -"semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5, semver@^5.5.0, semver@^5.6.0: +"semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: version "5.6.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004" semver@~5.3.0: version "5.3.0" - resolved "http://registry.npmjs.org/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" + integrity sha1-myzl094C0XxgEq0yaqa00M9U+U8= send@0.15.3: version "0.15.3" resolved "https://registry.yarnpkg.com/send/-/send-0.15.3.tgz#5013f9f99023df50d1bd9892c19e3defd1d53309" + integrity sha1-UBP5+ZAj31DRvZiSwZ4979HVMwk= dependencies: debug "2.6.7" depd "~1.1.0" @@ -8583,6 +9138,11 @@ serialize-javascript@^1.4.0: version "1.5.0" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.5.0.tgz#1aa336162c88a890ddad5384baebc93a655161fe" +serialize-javascript@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.6.1.tgz#4d1f697ec49429a847ca6f442a2a755126c4d879" + integrity sha512-A5MOagrPFga4YaKQSWHryl7AXvbQkEqpw4NNYMTNYUNV51bA8ABHgYFpqKx+YFFrw59xMV1qGH1R4AgoNIVgCw== + serve-static@1.13.2: version "1.13.2" resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1" @@ -8595,6 +9155,7 @@ serve-static@1.13.2: serve@^5.1.5: version "5.2.4" resolved "https://registry.yarnpkg.com/serve/-/serve-5.2.4.tgz#4742c05f65a2330f788cdde901cd7a09b23a99f6" + integrity sha1-R0LAX2WiMw94jN3pAc16CbI6mfY= dependencies: args "3.0.2" basic-auth "1.1.0" @@ -8620,10 +9181,12 @@ serve@^5.1.5: 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= set-value@^0.4.3: version "0.4.3" resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" + integrity sha1-fbCPnT0i3H945Trzw79GZuzfzPE= dependencies: extend-shallow "^2.0.1" is-extendable "^0.1.1" @@ -8633,6 +9196,7 @@ set-value@^0.4.3: set-value@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" + integrity sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg== dependencies: extend-shallow "^2.0.1" is-extendable "^0.1.1" @@ -8657,12 +9221,14 @@ sha.js@^2.4.0, sha.js@^2.4.8: shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= dependencies: shebang-regex "^1.0.0" shebang-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= shell-quote@^1.6.1: version "1.6.1" @@ -8676,6 +9242,7 @@ shell-quote@^1.6.1: shelljs@^0.8.2: version "0.8.3" resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.3.tgz#a7f3319520ebf09ee81275b2368adb286659b097" + integrity sha512-fc0BKlAWiLpwZljmOvAOTE/gXawtCoNrP5oaY7KIaQbbyHeQVg01pSEuEGvGh3HEdBU4baCD7wQBwADmM/7f7A== dependencies: glob "^7.0.0" interpret "^1.0.0" @@ -8684,69 +9251,50 @@ shelljs@^0.8.2: shellwords@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" + integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== 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" + integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= -sinon@^5.0.3: - version "5.1.1" - resolved "https://registry.yarnpkg.com/sinon/-/sinon-5.1.1.tgz#19c59810ffb733ea6e76a28b94a71fc4c2f523b8" - dependencies: - "@sinonjs/formatio" "^2.0.0" - diff "^3.5.0" - lodash.get "^4.4.2" - lolex "^2.4.2" - nise "^1.3.3" - supports-color "^5.4.0" - type-detect "^4.0.8" - -sinon@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/sinon/-/sinon-7.1.1.tgz#1202f317aa14d93cb9b69ff50b6bd49c0e05ffc9" +sinon@^7.1.1, sinon@^7.2.3: + version "7.2.3" + resolved "https://registry.yarnpkg.com/sinon/-/sinon-7.2.3.tgz#f8bfd956df32ddf592f8c102fd46982366412d8e" + integrity sha512-i6j7sqcLEqTYqUcMV327waI745VASvYuSuQMCjbAwlpAeuCgKZ3LtrjDxAbu+GjNQR0FEDpywtwGCIh8GicNyg== dependencies: - "@sinonjs/commons" "^1.2.0" - "@sinonjs/formatio" "^3.0.0" - "@sinonjs/samsam" "^2.1.2" + "@sinonjs/commons" "^1.3.0" + "@sinonjs/formatio" "^3.1.0" + "@sinonjs/samsam" "^3.0.2" diff "^3.5.0" - lodash.get "^4.4.2" lolex "^3.0.0" - nise "^1.4.6" + nise "^1.4.8" supports-color "^5.5.0" - type-detect "^4.0.8" - -sisteransi@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-0.1.1.tgz#5431447d5f7d1675aac667ccd0b865a4994cb3ce" -slack-node@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/slack-node/-/slack-node-0.2.0.tgz#de4b8dddaa8b793f61dbd2938104fdabf37dfa30" - dependencies: - requestretry "^1.2.2" +sisteransi@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.0.tgz#77d9622ff909080f1c19e5f4a1df0c1b0a27b88c" + integrity sha512-N+z4pHB4AmUv0SjveWRd6q1Nj5w62m5jodv+GD8lvmbY/83T/rpbJGZOnK5T149OldDj4Db07BSv9xY4K6NTPQ== slash@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= + +slash@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" + integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== slide@^1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" + integrity sha1-VusCfWW00tzmyy4tMsTUr8nh1wc= -smart-buffer@^1.0.4: - version "1.1.15" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-1.1.15.tgz#7f114b5b65fab3e2a35aa775bb12f0d1c649bf16" - -smart-buffer@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.0.1.tgz#07ea1ca8d4db24eb4cac86537d7d18995221ace3" - -smtp-connection@2.12.0: - version "2.12.0" - resolved "https://registry.yarnpkg.com/smtp-connection/-/smtp-connection-2.12.0.tgz#d76ef9127cb23c2259edb1e8349c2e8d5e2d74c1" - dependencies: - httpntlm "1.6.1" - nodemailer-shared "1.1.0" +smart-buffer@4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.0.2.tgz#5207858c3815cc69110703c6b94e46c15634395d" + integrity sha512-JDhEpTKzXusOqXZ0BUIdH+CjFdO/CR3tLlf5CN34IypI+xMmXW1uB16OOY8z3cICbJlDAVJzNbwBhNO0wt9OAw== snakeize@^0.1.0: version "0.1.0" @@ -8755,6 +9303,7 @@ snakeize@^0.1.0: snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== dependencies: define-property "^1.0.0" isobject "^3.0.0" @@ -8763,12 +9312,14 @@ snapdragon-node@^2.0.1: snapdragon-util@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== dependencies: kind-of "^3.2.0" snapdragon@^0.8.1: version "0.8.2" resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== dependencies: base "^0.11.1" debug "^2.2.0" @@ -8779,77 +9330,71 @@ snapdragon@^0.8.1: source-map-resolve "^0.5.0" use "^3.1.0" -sntp@1.x.x: - version "1.0.9" - resolved "http://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" - dependencies: - hoek "2.x.x" - socket.io-adapter@~1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz#2a805e8a14d6372124dd9159ad4502f8cb07f06b" -socket.io-client@2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-2.0.4.tgz#0918a552406dc5e540b380dcd97afc4a64332f8e" +socket.io-client@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-2.1.1.tgz#dcb38103436ab4578ddb026638ae2f21b623671f" + integrity sha512-jxnFyhAuFxYfjqIgduQlhzqTcOEQSn+OHKVfAxWaNWa7ecP7xSNk2Dx/3UEsDcY7NcFafxvNvKPmmO7HTwTxGQ== dependencies: backo2 "1.0.2" base64-arraybuffer "0.1.5" component-bind "1.0.0" component-emitter "1.2.1" - debug "~2.6.4" - engine.io-client "~3.1.0" + debug "~3.1.0" + engine.io-client "~3.2.0" + has-binary2 "~1.0.2" has-cors "1.1.0" indexof "0.0.1" object-component "0.0.3" parseqs "0.0.5" parseuri "0.0.5" - socket.io-parser "~3.1.1" + socket.io-parser "~3.2.0" to-array "0.1.4" -socket.io-parser@~3.1.1: - version "3.1.3" - resolved "http://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.1.3.tgz#ed2da5ee79f10955036e3da413bfd7f1e4d86c8e" +socket.io-parser@~3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.2.0.tgz#e7c6228b6aa1f814e6148aea325b51aa9499e077" + integrity sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA== dependencies: component-emitter "1.2.1" debug "~3.1.0" - has-binary2 "~1.0.2" isarray "2.0.1" -socket.io@2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-2.0.4.tgz#c1a4590ceff87ecf13c72652f046f716b29e6014" +socket.io@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-2.1.1.tgz#a069c5feabee3e6b214a75b40ce0652e1cfb9980" + integrity sha512-rORqq9c+7W0DAK3cleWNSyfv/qKXV99hV4tZe+gGLfBECw3XEhBy7x85F3wypA9688LKjtwO9pX9L33/xQI8yA== dependencies: - debug "~2.6.6" - engine.io "~3.1.0" + debug "~3.1.0" + engine.io "~3.2.0" + has-binary2 "~1.0.2" socket.io-adapter "~1.1.0" - socket.io-client "2.0.4" - socket.io-parser "~3.1.1" + socket.io-client "2.1.1" + socket.io-parser "~3.2.0" -socks-proxy-agent@^4.0.0, socks-proxy-agent@^4.0.1: +socks-proxy-agent@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-4.0.1.tgz#5936bf8b707a993079c6f37db2091821bffa6473" + integrity sha512-Kezx6/VBguXOsEe5oU3lXYyKMi4+gva72TwJ7pQY5JfqUx2nMk7NXA6z/mpNqIlfQjWYVfeuNvQjexiTaTn6Nw== dependencies: agent-base "~4.2.0" socks "~2.2.0" -socks@1.1.9: - version "1.1.9" - resolved "http://registry.npmjs.org/socks/-/socks-1.1.9.tgz#628d7e4d04912435445ac0b6e459376cb3e6d691" - dependencies: - ip "^1.1.2" - smart-buffer "^1.0.4" - socks@~2.2.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.2.2.tgz#f061219fc2d4d332afb4af93e865c84d3fa26e2b" + version "2.2.3" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.2.3.tgz#7399ce11e19b2a997153c983a9ccb6306721f2dc" + integrity sha512-+2r83WaRT3PXYoO/1z+RDEBE7Z2f9YcdQnJ0K/ncXXbV5gJ6wYfNAebYFYiiUjM6E4JyXnPY8cimwyvFYHVUUA== dependencies: ip "^1.1.5" - smart-buffer "^4.0.1" + smart-buffer "4.0.2" sort-keys@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" + integrity sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg= dependencies: is-plain-obj "^1.0.0" @@ -8860,6 +9405,7 @@ source-list-map@^2.0.0: source-map-resolve@^0.5.0: version "0.5.2" resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" + integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA== dependencies: atob "^2.1.1" decode-uri-component "^0.2.0" @@ -8873,7 +9419,15 @@ source-map-support@^0.4.15: dependencies: source-map "^0.5.6" -source-map-support@^0.5.0, source-map-support@^0.5.6, source-map-support@~0.5.6: +source-map-support@^0.5.6: + version "0.5.10" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.10.tgz#2214080bc9d51832511ee2bab96e3c2f9353120c" + integrity sha512-YfQ3tQFTK/yzlGJuX8pTwa4tifQj4QS2Mj7UegOu8jAz59MqIiMGPXxQhVQiIMNzayuUSF/jEuVnfFF5JqybmQ== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-support@~0.5.6: version "0.5.9" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.9.tgz#41bc953b2534267ea2d605bccfa7bfa3111ced5f" dependencies: @@ -8883,6 +9437,7 @@ source-map-support@^0.5.0, source-map-support@^0.5.6, source-map-support@~0.5.6: source-map-url@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" @@ -8890,13 +9445,20 @@ source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: source-map@^0.4.4: version "0.4.4" - resolved "http://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" + integrity sha1-66T12pwNyZneaAMti092FzZSA2s= dependencies: amdefine ">=0.0.4" -source-map@^0.5.1, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1, source-map@~0.5.3: +source-map@^0.5.0, source-map@^0.5.1, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1, source-map@~0.5.3: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +source-map@^0.7.3: + version "0.7.3" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" + integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== source-map@~0.2.0: version "0.2.0" @@ -8909,8 +9471,9 @@ sourcemap-codec@^1.4.1: resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.4.tgz#c63ea927c029dd6bd9a2b7fa03b3fec02ad56e9f" spdx-correct@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.0.2.tgz#19bb409e91b47b1ad54159243f7312a858db3c2e" + version "3.1.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" + integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q== dependencies: spdx-expression-parse "^3.0.0" spdx-license-ids "^3.0.0" @@ -8918,17 +9481,20 @@ spdx-correct@^3.0.0: spdx-exceptions@^2.1.0: version "2.2.0" resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" + integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== spdx-expression-parse@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" + integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== dependencies: spdx-exceptions "^2.1.0" spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.2.tgz#a59efc09784c2a5bada13cfeaf5c75dd214044d2" + version "3.0.3" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz#81c0ce8f21474756148bbb5f3bfc0f36bf15d76e" + integrity sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g== split-array-stream@^2.0.0: version "2.0.0" @@ -8939,28 +9505,33 @@ split-array-stream@^2.0.0: split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== dependencies: extend-shallow "^3.0.0" split2@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/split2/-/split2-2.2.0.tgz#186b2575bcf83e85b7d18465756238ee4ee42493" + integrity sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw== dependencies: through2 "^2.0.2" split@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" + integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== dependencies: through "2" sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= sshpk@^1.7.0: - version "1.15.2" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.15.2.tgz#c946d6bd9b1a39d0e8635763f5242d6ed6dcb629" + version "1.16.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" + integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== dependencies: asn1 "~0.2.3" assert-plus "^1.0.0" @@ -8975,6 +9546,7 @@ sshpk@^1.7.0: ssri@^6.0.0, ssri@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" + integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA== dependencies: figgy-pudding "^3.5.1" @@ -8985,10 +9557,12 @@ stack-trace@0.0.10: stack-utils@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8" + integrity sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA== static-extend@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= dependencies: define-property "^0.2.5" object-copy "^0.1.0" @@ -9005,9 +9579,10 @@ statuses@~1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" -stealthy-require@^1.1.0: +stealthy-require@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" + integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= stream-browserify@^2.0.1: version "2.0.1" @@ -9016,9 +9591,18 @@ stream-browserify@^2.0.1: inherits "~2.0.1" readable-stream "^2.0.2" +stream-browserify@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" + integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== + dependencies: + inherits "~2.0.1" + readable-stream "^2.0.2" + stream-each@^1.1.0: version "1.2.3" resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" + integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== dependencies: end-of-stream "^1.1.0" stream-shift "^1.0.0" @@ -9039,9 +9623,20 @@ stream-http@^2.7.2: to-arraybuffer "^1.0.0" xtend "^4.0.0" +stream-http@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-3.0.0.tgz#bd6d3c52610098699e25eb2dfcd188e30e0d12e4" + integrity sha512-JELJfd+btL9GHtxU3+XXhg9NLYrKFnhybfvRuDghtyVkOFydz3PKNT1df07AMr88qW03WHF+FSV0PySpXignCA== + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.1" + readable-stream "^3.0.6" + xtend "^4.0.0" + stream-shift@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" + integrity sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI= streamroller@0.7.0: version "0.7.0" @@ -9052,31 +9647,36 @@ streamroller@0.7.0: mkdirp "^0.5.1" readable-stream "^2.3.0" -streamroller@^0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/streamroller/-/streamroller-0.4.1.tgz#d435bd5974373abd9bd9068359513085106cc05f" +streamroller@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/streamroller/-/streamroller-1.0.1.tgz#6771c9c750638e3ad9de93781d431a05514eeb2f" + integrity sha512-FKL2mEB0A+XTIWSOlBHm2DvdsER5cGraqrUufO0lFMfsVY+Gpb3TC29Z+6/l0Urbb7vtm6m9zJOQBVl6fEkZBA== dependencies: - date-format "^0.0.0" - debug "^0.7.2" - mkdirp "^0.5.1" - readable-stream "^1.1.7" + async "^2.6.1" + date-format "^2.0.0" + debug "^3.1.0" + fs-extra "^7.0.0" + lodash "^4.17.10" string-length@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed" + integrity sha1-1A27aGo6zpYMHP/KVivyxF+DY+0= dependencies: astral-regex "^1.0.0" strip-ansi "^4.0.0" string-similarity@1.1.0: version "1.1.0" - resolved "http://registry.npmjs.org/string-similarity/-/string-similarity-1.1.0.tgz#3c66498858a465ec7c40c7d81739bbd995904914" + resolved "https://registry.yarnpkg.com/string-similarity/-/string-similarity-1.1.0.tgz#3c66498858a465ec7c40c7d81739bbd995904914" + integrity sha1-PGZJiFikZex8QMfYFzm72ZWQSRQ= dependencies: lodash "^4.13.1" string-width@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= dependencies: code-point-at "^1.0.0" is-fullwidth-code-point "^1.0.0" @@ -9085,6 +9685,7 @@ string-width@^1.0.1: "string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.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== dependencies: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" @@ -9097,7 +9698,7 @@ string.prototype.padend@^3.0.0: es-abstract "^1.4.3" function-bind "^1.0.2" -string_decoder@^1.0.0, string_decoder@^1.0.3, string_decoder@^1.1.1: +string_decoder@^1.0.0, string_decoder@^1.1.1, string_decoder@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.2.0.tgz#fe86e738b19544afe70469243b2a1ee9240eae8d" dependencies: @@ -9109,59 +9710,71 @@ string_decoder@~0.10.x: string_decoder@~1.1.1: version "1.1.1" - resolved "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + 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" -stringstream@~0.0.4: - version "0.0.6" - resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.6.tgz#7880225b0d4ad10e30927d167a1d6f2fd3b33a72" - strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" - resolved "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= dependencies: ansi-regex "^2.0.0" strip-ansi@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= dependencies: ansi-regex "^3.0.0" -strip-bom@3.0.0, strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" +strip-ansi@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.0.0.tgz#f78f68b5d0866c20b2c9b8c61b5298508dc8756f" + integrity sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow== + dependencies: + ansi-regex "^4.0.0" strip-bom@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= dependencies: is-utf8 "^0.2.0" +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + strip-eof@^1.0.0: version "1.0.0" - resolved "http://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= strip-indent@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" + integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI= dependencies: get-stdin "^4.0.1" strip-indent@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" + integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g= 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= strong-log-transformer@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strong-log-transformer/-/strong-log-transformer-2.0.0.tgz#fa6d8e0a9e62b3c168c3cad5ae5d00dc97ba26cc" + version "2.1.0" + resolved "https://registry.yarnpkg.com/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz#0f5ed78d325e0421ac6f90f7f10e691d6ae3ae10" + integrity sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA== dependencies: - byline "^5.0.0" duplexer "^0.1.1" minimist "^1.2.0" through "^2.3.4" @@ -9170,31 +9783,41 @@ stubs@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/stubs/-/stubs-3.0.0.tgz#e8d2ba1fa9c90570303c030b6900f7d5f89abe5b" -supports-color@4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.4.0.tgz#883f7ddabc165142b2a61427f3352ded195d1a3e" +supports-color@5.4.0: + version "5.4.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54" + integrity sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w== dependencies: - has-flag "^2.0.0" + has-flag "^3.0.0" 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@^3.1.0, supports-color@^3.1.2: +supports-color@^3.1.0: version "3.2.3" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" + integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY= dependencies: has-flag "^1.0.0" -supports-color@^5.0.0, supports-color@^5.3.0, supports-color@^5.4.0, supports-color@^5.5.0: +supports-color@^5.0.0, supports-color@^5.3.0, supports-color@^5.5.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" dependencies: has-flag "^3.0.0" +supports-color@^6.0.0, supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== + dependencies: + has-flag "^3.0.0" + supports-hyperlinks@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-1.0.1.tgz#71daedf36cc1060ac5100c351bb3da48c29c0ef7" + integrity sha512-HHi5kVSefKaJkGYXbDuKbUGRVxqnWGn3J2e39CYcNJEfWciGq2zYtOhXLTlvrOZW1QU7VX67w7fMmWafHX9Pfw== dependencies: has-flag "^2.0.0" supports-color "^5.0.0" @@ -9202,34 +9825,25 @@ supports-hyperlinks@^1.0.1: symbol-tree@^3.2.2: version "3.2.2" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" + integrity sha1-rifbOPZgp64uHDt9G8KQgZuFGeY= tapable@^1.0.0, tapable@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.1.tgz#4d297923c5a72a42360de2ab52dadfaaec00018e" -tar-stream@^1.5.0: - version "1.6.2" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.6.2.tgz#8ea55dab37972253d9a9af90fdcd559ae435c555" - 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" - tar@^2.0.0: version "2.2.1" - resolved "http://registry.npmjs.org/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" + resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" + integrity sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE= dependencies: block-stream "*" fstream "^1.0.2" inherits "2" -tar@^4, tar@^4.4.6: +tar@^4, tar@^4.4.8: version "4.4.8" resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.8.tgz#b19eec3fde2a96e64666df9fdb40c5ca1bc3747d" + integrity sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ== dependencies: chownr "^1.1.1" fs-minipass "^1.2.5" @@ -9239,9 +9853,10 @@ tar@^4, tar@^4.4.6: safe-buffer "^5.1.2" yallist "^3.0.2" -teeny-request@^3.11.0: - version "3.11.0" - resolved "https://registry.yarnpkg.com/teeny-request/-/teeny-request-3.11.0.tgz#2780e3d8d04ecd4947a59b03ccaee273dd9a9122" +teeny-request@^3.11.3, teeny-request@^3.7.0: + version "3.11.3" + resolved "https://registry.yarnpkg.com/teeny-request/-/teeny-request-3.11.3.tgz#335c629f7645e5d6599362df2f3230c4cbc23a55" + integrity sha512-CKncqSF7sH6p4rzCgkb/z/Pcos5efl0DmolzvlqRQUNcpRIruOhY9+T1FsIlyEbfWd7MsFpodROOwHYh2BaXzw== dependencies: https-proxy-agent "^2.2.1" node-fetch "^2.2.0" @@ -9250,10 +9865,12 @@ teeny-request@^3.11.0: temp-dir@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" + integrity sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0= temp-write@^3.4.0: version "3.4.0" resolved "https://registry.yarnpkg.com/temp-write/-/temp-write-3.4.0.tgz#8cff630fb7e9da05f047c74ce4ce4d685457d492" + integrity sha1-jP9jD7fp2gXwR8dM5M5NaFRX1JI= dependencies: graceful-fs "^4.1.2" is-stream "^1.1.0" @@ -9265,12 +9882,14 @@ temp-write@^3.4.0: term-size@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/term-size/-/term-size-0.1.1.tgz#87360b96396cab5760963714cda0d0cbeecad9ca" + integrity sha1-hzYLljlsq1dgljcUzaDQy+7K2co= dependencies: execa "^0.4.0" term-size@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" + integrity sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk= dependencies: execa "^0.7.0" @@ -9295,14 +9914,14 @@ terser@^3.8.1: source-map "~0.6.1" source-map-support "~0.5.6" -test-exclude@^4.2.1: - version "4.2.3" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.2.3.tgz#a9a5e64474e4398339245a0a769ad7c2f4a97c20" +test-exclude@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-5.1.0.tgz#6ba6b25179d2d38724824661323b73e03c0c1de1" + integrity sha512-gwf0S2fFsANC55fSeSqpb8BYk6w3FDvwZxfNjeF6FRgvFa43r+7wRiA/Q0IxoRU37wB/LE8IQ4221BsNucTaCA== dependencies: arrify "^1.0.1" - micromatch "^2.3.11" - object-assign "^4.1.0" - read-pkg-up "^1.0.1" + minimatch "^3.0.4" + read-pkg-up "^4.0.0" require-main-filename "^1.0.1" text-encoding@^0.6.4: @@ -9312,57 +9931,48 @@ text-encoding@^0.6.4: text-extensions@^1.0.0: version "1.9.0" resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" + integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== throat@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" + integrity sha1-iQN8vJLFarGJJua6TLsgDhVnKmo= -through2@2.0.1: - version "2.0.1" - resolved "http://registry.npmjs.org/through2/-/through2-2.0.1.tgz#384e75314d49f32de12eebb8136b8eb6b5d59da9" +through2@3.0.0, through2@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/through2/-/through2-3.0.0.tgz#468b461df9cd9fcc170f22ebf6852e467e578ff2" dependencies: - readable-stream "~2.0.0" - xtend "~4.0.0" + readable-stream "2 || 3" + xtend "~4.0.1" through2@^2.0.0, through2@^2.0.2: version "2.0.5" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== dependencies: readable-stream "~2.3.6" xtend "~4.0.1" -through2@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/through2/-/through2-3.0.0.tgz#468b461df9cd9fcc170f22ebf6852e467e578ff2" - dependencies: - readable-stream "2 || 3" - xtend "~4.0.1" - through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6: version "2.3.8" - resolved "http://registry.npmjs.org/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - -thunkify@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/thunkify/-/thunkify-2.1.2.tgz#faa0e9d230c51acc95ca13a361ac05ca7e04553d" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= timed-out@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" + integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= -timers-browserify@^2.0.2, timers-browserify@^2.0.4: +timers-browserify@^2.0.10, timers-browserify@^2.0.4: version "2.0.10" resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.10.tgz#1d28e3d2aadf1d5a5996c4e9f95601cd053480ae" dependencies: setimmediate "^1.0.4" -timespan@2.3.x: - version "2.3.0" - resolved "https://registry.yarnpkg.com/timespan/-/timespan-2.3.0.tgz#4902ce040bd13d845c8f59b27e9d59bad6f39929" - -tmp@0.0.29: - version "0.0.29" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.29.tgz#f25125ff0dd9da3ccb0c2dd371ee1288bb9128c0" +tmp@0.0.30: + version "0.0.30" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.30.tgz#72419d4a8be7d6ce75148fd8b324e593a711c2ed" + integrity sha1-ckGdSovn1s51FI/YsyTlk6cRwu0= dependencies: os-tmpdir "~1.0.1" @@ -9375,6 +9985,7 @@ tmp@0.0.33, tmp@0.0.x, tmp@^0.0.33: tmpl@1.0.x: version "1.0.4" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" + integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE= to-array@0.1.4: version "0.1.4" @@ -9384,23 +9995,26 @@ to-arraybuffer@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" -to-buffer@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80" - to-fast-properties@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + to-object-path@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= dependencies: kind-of "^3.0.2" to-regex-range@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= dependencies: is-number "^3.0.0" repeat-string "^1.6.1" @@ -9408,28 +10022,24 @@ to-regex-range@^2.1.0: to-regex@^3.0.1, to-regex@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== dependencies: define-property "^2.0.2" extend-shallow "^3.0.2" regex-not "^1.0.2" safe-regex "^1.1.0" -tough-cookie@>=2.3.3, tough-cookie@^2.3.4: +tough-cookie@^2.3.3, tough-cookie@^2.3.4, tough-cookie@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" dependencies: psl "^1.1.28" punycode "^2.1.1" -tough-cookie@~2.3.0: - version "2.3.4" - resolved "http://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655" - dependencies: - punycode "^1.4.1" - tough-cookie@~2.4.3: version "2.4.3" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" + integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ== dependencies: psl "^1.1.24" punycode "^1.4.1" @@ -9437,28 +10047,34 @@ tough-cookie@~2.4.3: tr46@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" + integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk= dependencies: punycode "^2.1.0" trim-newlines@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" + integrity sha1-WIeWa7WCpFA6QetST301ARgVphM= trim-newlines@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-2.0.0.tgz#b403d0b91be50c331dfc4b82eeceb22c3de16d20" + integrity sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA= trim-off-newlines@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz#9f9ba9d9efa8764c387698bcbfeb2c848f11adb3" + integrity sha1-n5up2e+odkw4dpi8v+sshI8RrbM= trim-right@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" + integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= ts-jest@^23.10.5: version "23.10.5" resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-23.10.5.tgz#cdb550df4466a30489bf70ba867615799f388dd5" + integrity sha512-MRCs9qnGoyKgFc8adDEntAOP64fWK1vZKnOYU1o2HxaqjdJvGqmkLCPCnVq1/If4zkUmEjKPnCiUisTrlX2p2A== dependencies: bs-logger "0.x" buffer-from "1.x" @@ -9470,17 +10086,19 @@ ts-jest@^23.10.5: semver "^5.5" yargs-parser "10.x" -tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: +tslib@1.9.3, tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: version "1.9.3" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" -tslint-config-prettier@^1.12.0: - version "1.17.0" - resolved "https://registry.yarnpkg.com/tslint-config-prettier/-/tslint-config-prettier-1.17.0.tgz#946ed6117f98f3659a65848279156d87628c33dc" +tslint-config-prettier@^1.18.0: + version "1.18.0" + resolved "https://registry.yarnpkg.com/tslint-config-prettier/-/tslint-config-prettier-1.18.0.tgz#75f140bde947d35d8f0d238e0ebf809d64592c37" + integrity sha512-xPw9PgNPLG3iKRxmK7DWr+Ea/SzrvfHtjFt5LBl61gk2UBG/DB9kCXRjv+xyIU1rUtnayLeMUVJBcMX8Z17nDg== -tslint@^5.11.0: - version "5.11.0" - resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.11.0.tgz#98f30c02eae3cde7006201e4c33cb08b48581eed" +tslint@^5.11.0, tslint@^5.12.1: + version "5.12.1" + resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.12.1.tgz#8cec9d454cf8a1de9b0a26d7bdbad6de362e52c1" + integrity sha512-sfodBHOucFg6egff8d1BvuofoOQ/nOeYNfbp7LDlKBcLNrL3lmS5zoiDGyOMdT7YsEXAwWpTdAHwOGOc8eRZAw== dependencies: babel-code-frame "^6.22.0" builtin-modules "^1.1.1" @@ -9495,10 +10113,6 @@ tslint@^5.11.0: tslib "^1.8.0" tsutils "^2.27.2" -tsscmp@~1.0.0: - version "1.0.6" - resolved "https://registry.yarnpkg.com/tsscmp/-/tsscmp-1.0.6.tgz#85b99583ac3589ec4bfef825b5000aa911d605eb" - tsutils@^2.27.2: version "2.29.0" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" @@ -9509,27 +10123,31 @@ tty-browserify@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" +tty-browserify@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.1.tgz#3f05251ee17904dfd0677546670db9651682b811" + integrity sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw== + tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= dependencies: safe-buffer "^5.0.1" -tunnel-agent@~0.4.1: - version "0.4.3" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" - tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= type-check@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= dependencies: prelude-ls "~1.1.2" -type-detect@4.0.8, type-detect@^4.0.0, type-detect@^4.0.5, type-detect@^4.0.8: +type-detect@4.0.8, type-detect@^4.0.0, type-detect@^4.0.5: version "4.0.8" resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" @@ -9543,21 +10161,25 @@ type-is@~1.6.16: typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= typedoc-default-themes@^0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/typedoc-default-themes/-/typedoc-default-themes-0.5.0.tgz#6dc2433e78ed8bea8e887a3acde2f31785bd6227" + integrity sha1-bcJDPnjti+qOiHo6zeLzF4W9Yic= typedoc-plugin-monorepo@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/typedoc-plugin-monorepo/-/typedoc-plugin-monorepo-0.1.0.tgz#d923cb6d9ffff09d8256b679c1bce2b929c0f271" + integrity sha512-hx42ck+9dJCoZO0jLCmEE3R6lydYaaYIKL+g6LT5Ev+B8CdAESsML2jiGR+TFu1rUuEujjArtCHjNLj2YqnKnQ== dependencies: highlight.js "^9.12.0" marked "^0.3.19" -typedoc@^0.13.0: - version "0.13.0" - resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.13.0.tgz#9efdf352bd54873955cd161bd4b75f24a8c59dde" +typedoc@^0.14.2: + version "0.14.2" + resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.14.2.tgz#769f457f4f9e4bdb8b5f3b177c86b6a31d8c3dc3" + integrity sha512-aEbgJXV8/KqaVhcedT7xG6d2r+mOvB5ep3eIz1KuB5sc4fDYXcepEEMdU7XSqLFO5hVPu0nllHi1QxX2h/QlpQ== dependencies: "@types/fs-extra" "^5.0.3" "@types/handlebars" "^4.0.38" @@ -9568,48 +10190,45 @@ typedoc@^0.13.0: "@types/shelljs" "^0.8.0" fs-extra "^7.0.0" handlebars "^4.0.6" - highlight.js "^9.0.0" + highlight.js "^9.13.1" lodash "^4.17.10" marked "^0.4.0" minimatch "^3.0.0" progress "^2.0.0" shelljs "^0.8.2" typedoc-default-themes "^0.5.0" - typescript "3.1.x" + typescript "3.2.x" -typescript-tslint-plugin@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/typescript-tslint-plugin/-/typescript-tslint-plugin-0.2.1.tgz#6a0361cd311bdc9dcec2e70c8a54cab16829e47f" +typescript-tslint-plugin@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/typescript-tslint-plugin/-/typescript-tslint-plugin-0.3.1.tgz#d86ae0342c9e8f9ecfcbcc47f7a7c2b5ab0e86f9" + integrity sha512-h8HEPBm36UEs901ld1x6m5eY/UFb4mF+A0nvERr4BWMww5wnV5nfcm9ZFt18foYL0GQ5NVMt1Tb3466WUU8dRQ== dependencies: minimatch "^3.0.4" mock-require "^3.0.2" vscode-languageserver "^5.1.0" -typescript@3.1.x: - version "3.1.6" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.1.6.tgz#b6543a83cfc8c2befb3f4c8fba6896f5b0c9be68" - -typescript@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.2.2.tgz#fe8101c46aa123f8353523ebdcf5730c2ae493e5" +typescript@3.2.x: + version "3.2.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.2.4.tgz#c585cb952912263d915b462726ce244ba510ef3d" + integrity sha512-0RNDbSdEokBeEAkgNbxJ+BLwSManFy9TeXz8uW+48j/xhEXv1ePME60olyzw2XzUqUBNAYFeJadIqAgNqIACwg== -uglify-es@^3.3.7: - version "3.3.9" - resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.3.9.tgz#0c1c4f0700bed8dbc124cdb304d2592ca203e677" - dependencies: - commander "~2.13.0" - source-map "~0.6.1" +typescript@^3.2.0, typescript@^3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.3.3.tgz#f1657fc7daa27e1a8930758ace9ae8da31403221" + integrity sha512-Y21Xqe54TBVp+VDSNbuDYdGw0BpoR/Q6wo/+35M8PAU0vipahnyduJWirxxdxjsAkS7hue53x2zp8gz7F05u0A== uglify-js@^2.6: version "2.8.29" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" + integrity sha1-KcVzMUgFe7Th913zW3qcty5qWd0= dependencies: source-map "~0.5.1" yargs "~3.10.0" optionalDependencies: uglify-to-browserify "~1.0.0" -uglify-js@^3.1.4: +uglify-js@^3.1.4, uglify-js@^3.4.9: version "3.4.9" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.9.tgz#af02f180c1207d76432e473ed24a28f4a782bae3" dependencies: @@ -9619,10 +10238,12 @@ uglify-js@^3.1.4: 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" + integrity sha1-bgkk1r2mta/jSeOabWMoUKD4grc= uid-number@0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" + integrity sha1-DqEOgDXo61uOREnwbaHHMGY7qoE= ultron@~1.1.0: version "1.1.1" @@ -9631,14 +10252,12 @@ ultron@~1.1.0: umask@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/umask/-/umask-1.1.0.tgz#f29cebf01df517912bb58ff9c4e50fde8e33320d" - -underscore@~1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.7.0.tgz#6bbaf0877500d36be34ecaa584e0db9fef035209" + integrity sha1-8pzr8B31F5ErtY/5xOUP3o4zMg0= union-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" + integrity sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ= dependencies: arr-union "^3.1.0" get-value "^2.0.6" @@ -9648,12 +10267,14 @@ union-value@^1.0.0: unique-filename@^1.1.0, unique-filename@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== dependencies: unique-slug "^2.0.0" unique-slug@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.1.tgz#5e9edc6d1ce8fb264db18a507ef9bd8544451ca6" + integrity sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg== dependencies: imurmurhash "^0.1.4" @@ -9663,15 +10284,17 @@ unique-string@^1.0.0: dependencies: crypto-random-string "^1.0.0" -universal-user-agent@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-2.0.2.tgz#b0322da546100c658adcf4965110a56ed238aee6" +universal-user-agent@^2.0.0, universal-user-agent@^2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-2.0.3.tgz#9f6f09f9cc33de867bb720d84c08069b14937c6c" + integrity sha512-eRHEHhChCBHrZsA4WEhdgiOKgdvgrMIHwnwnqD0r5C6AO8kwKcG7qSku3iXdhvHL3YvsS9ZkSGN8h/hIpoFC8g== dependencies: os-name "^3.0.0" universalify@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" @@ -9680,6 +10303,7 @@ unpipe@1.0.0, unpipe@~1.0.0: unset-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= dependencies: has-value "^0.3.1" isobject "^3.0.0" @@ -9687,14 +10311,16 @@ unset-value@^1.0.0: unzip-response@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" + integrity sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c= -upath@^1.0.5: +upath@^1.0.5, upath@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.0.tgz#35256597e46a581db4793d0ce47fa9aebfc9fabd" update-notifier@2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.1.0.tgz#ec0c1e53536b76647a24b77cb83966d9315123d9" + integrity sha1-7AweU1NrdmR6JLd8uDlm2TFRI9k= dependencies: boxen "^1.0.0" chalk "^1.0.0" @@ -9708,6 +10334,7 @@ update-notifier@2.1.0: update-notifier@2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.2.0.tgz#1b5837cf90c0736d88627732b661c138f86de72f" + integrity sha1-G1g3z5DAc22IYncytmHBOPht5y8= dependencies: boxen "^1.0.0" chalk "^1.0.0" @@ -9721,22 +10348,26 @@ update-notifier@2.2.0: uri-js@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" + integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== dependencies: punycode "^2.1.0" urix@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= url-parse-lax@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" + integrity sha1-evjzA2Rem9eaJy56FKxovAYJ2nM= dependencies: prepend-http "^1.0.1" url-template@^2.0.8: version "2.0.8" resolved "https://registry.yarnpkg.com/url-template/-/url-template-2.0.8.tgz#fc565a3cccbff7730c775f5641f9555791439f21" + integrity sha1-/FZaPMy/93MMd19WQflVV5FDnyE= url@^0.11.0: version "0.11.0" @@ -9752,12 +10383,14 @@ urlgrey@^0.4.4: use@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== -useragent@2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/useragent/-/useragent-2.2.1.tgz#cf593ef4f2d175875e8bb658ea92e18a4fd06d8e" +useragent@2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/useragent/-/useragent-2.3.0.tgz#217f943ad540cb2128658ab23fc960f6a88c9972" + integrity sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw== dependencies: - lru-cache "2.2.x" + lru-cache "4.1.x" tmp "0.0.x" util-deprecate@^1.0.1, util-deprecate@~1.0.1: @@ -9767,6 +10400,7 @@ util-deprecate@^1.0.1, util-deprecate@~1.0.1: util.promisify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" + integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== dependencies: define-properties "^1.1.2" object.getownpropertydescriptors "^2.0.3" @@ -9783,6 +10417,13 @@ util@^0.10.3: dependencies: inherits "2.0.3" +util@^0.11.1: + version "0.11.1" + resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" + integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== + dependencies: + inherits "2.0.3" + utils-merge@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" @@ -9790,14 +10431,12 @@ utils-merge@1.0.1: uuid@^3.0.1, uuid@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" - -uws@~9.14.0: - version "9.14.0" - resolved "https://registry.yarnpkg.com/uws/-/uws-9.14.0.tgz#fac8386befc33a7a3705cbd58dc47b430ca4dd95" + integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.3: version "3.0.4" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== dependencies: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" @@ -9805,13 +10444,10 @@ validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.3: validate-npm-package-name@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" + integrity sha1-X6kS2B630MdK/BQN5zF/DKffQ34= dependencies: builtins "^1.0.3" -vargs@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/vargs/-/vargs-0.1.0.tgz#6b6184da6520cc3204ce1b407cac26d92609ebff" - vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" @@ -9819,14 +10455,16 @@ vary@~1.1.2: verror@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= dependencies: assert-plus "^1.0.0" core-util-is "1.0.2" extsprintf "^1.2.0" -vlq@^0.2.1, vlq@^0.2.2: +vlq@^0.2.1: version "0.2.3" resolved "https://registry.yarnpkg.com/vlq/-/vlq-0.2.3.tgz#8f3e4328cf63b1540c0d67e1b2778386f8975b26" + integrity sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow== vm-browserify@0.0.4: version "0.0.4" @@ -9834,13 +10472,10 @@ vm-browserify@0.0.4: dependencies: indexof "0.0.1" -vm2@^3.6.3: - version "3.6.4" - resolved "https://registry.yarnpkg.com/vm2/-/vm2-3.6.4.tgz#88b27a9f328a0630671841363692a57d24dead33" - -voca@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/voca/-/voca-1.4.0.tgz#e15ac58b38290b72acc0c330366b6cc7984924d7" +vm-browserify@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.0.tgz#bd76d6a23323e2ca8ffa12028dc04559c75f9019" + integrity sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw== void-elements@^2.0.0: version "2.0.1" @@ -9849,10 +10484,12 @@ void-elements@^2.0.0: vscode-jsonrpc@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-4.0.0.tgz#a7bf74ef3254d0a0c272fab15c82128e378b3be9" + integrity sha512-perEnXQdQOJMTDFNv+UF3h1Y0z4iSiaN9jIlb0OqIYgosPCZGYh/MCUlkFtV2668PL69lRDO32hmvL2yiidUYg== vscode-languageserver-protocol@3.14.1: version "3.14.1" resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.14.1.tgz#b8aab6afae2849c84a8983d39a1cf742417afe2f" + integrity sha512-IL66BLb2g20uIKog5Y2dQ0IiigW0XKrvmWiOvc0yXw80z3tMEzEnHjaGAb3ENuU7MnQqgnYJ1Cl2l9RvNgDi4g== dependencies: vscode-jsonrpc "^4.0.0" vscode-languageserver-types "3.14.0" @@ -9860,10 +10497,12 @@ vscode-languageserver-protocol@3.14.1: vscode-languageserver-types@3.14.0: version "3.14.0" resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.14.0.tgz#d3b5952246d30e5241592b6dde8280e03942e743" + integrity sha512-lTmS6AlAlMHOvPQemVwo3CezxBp0sNB95KNPkqp3Nxd5VFEnuG1ByM0zlRWos0zjO3ZWtkvhal0COgiV1xIA4A== vscode-languageserver@^5.1.0: version "5.2.1" resolved "https://registry.yarnpkg.com/vscode-languageserver/-/vscode-languageserver-5.2.1.tgz#0d2feddd33f92aadf5da32450df498d52f6f14eb" + integrity sha512-GuayqdKZqAwwaCUjDvMTAVRPJOp/SLON3mJ07eGsx/Iq9HjRymhKWztX41rISqDKhHVVyFM+IywICyZDla6U3A== dependencies: vscode-languageserver-protocol "3.14.1" vscode-uri "^1.0.6" @@ -9871,22 +10510,35 @@ vscode-languageserver@^5.1.0: vscode-uri@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-1.0.6.tgz#6b8f141b0bbc44ad7b07e94f82f168ac7608ad4d" + integrity sha512-sLI2L0uGov3wKVb9EB+vIQBl9tVP90nqRvxSoJ35vI3NjxE8jfsE5DSOhWgSunHSZmKS4OCi2jrtfxK7uyp2ww== w3c-hr-time@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz#82ac2bff63d950ea9e3189a58a65625fedf19045" + integrity sha1-gqwr/2PZUOqeMYmlimViX+3xkEU= dependencies: browser-process-hrtime "^0.1.2" +w3c-xmlserializer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-1.0.1.tgz#054cdcd359dc5d1f3ec9be4e272c756af4b21d39" + integrity sha512-XZGI1OH/OLQr/NaJhhPmzhngwcAnZDLytsvXnRmlYeRkmbb0I7sqFFA22erq4WQR0sUu17ZSQOAV9mFwCqKRNg== + dependencies: + domexception "^1.0.1" + webidl-conversions "^4.0.2" + xml-name-validator "^3.0.0" + walker@~1.0.5: version "1.0.7" resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" + integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= dependencies: makeerror "1.0.x" watch@~0.18.0: version "0.18.0" resolved "https://registry.yarnpkg.com/watch/-/watch-0.18.0.tgz#28095476c6df7c90c963138990c0a5423eb4b986" + integrity sha1-KAlUdsbffJDJYxOJkMClQj60uYY= dependencies: exec-sh "^0.2.0" minimist "^1.2.0" @@ -9905,21 +10557,10 @@ wcwidth@^1.0.0, wcwidth@^1.0.1: dependencies: defaults "^1.0.3" -wd@^1.4.0: - version "1.11.1" - resolved "https://registry.yarnpkg.com/wd/-/wd-1.11.1.tgz#21a33e21977ad20522bb189f6529c3b55ac3862c" - dependencies: - archiver "2.1.1" - async "2.0.1" - lodash "4.17.11" - mkdirp "^0.5.1" - q "1.4.1" - request "2.88.0" - vargs "0.1.0" - webidl-conversions@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" + integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== webpack-sources@^1.1.0, webpack-sources@^1.3.0: version "1.3.0" @@ -9928,16 +10569,17 @@ webpack-sources@^1.1.0, webpack-sources@^1.3.0: source-list-map "^2.0.0" source-map "~0.6.1" -webpack@^4.26.0: - version "4.26.1" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.26.1.tgz#ff3a9283d363c07b3494dfa702d08f4f2ef6cb39" - dependencies: - "@webassemblyjs/ast" "1.7.11" - "@webassemblyjs/helper-module-context" "1.7.11" - "@webassemblyjs/wasm-edit" "1.7.11" - "@webassemblyjs/wasm-parser" "1.7.11" - acorn "^5.6.2" - acorn-dynamic-import "^3.0.0" +webpack@^4.29.5: + version "4.29.5" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.29.5.tgz#52b60a7b0838427c3a894cd801a11dc0836bc79f" + integrity sha512-DuWlYUT982c7XVHodrLO9quFbNpVq5FNxLrMUfYUTlgKW0+yPimynYf1kttSQpEneAL1FH3P3OLNgkyImx8qIQ== + dependencies: + "@webassemblyjs/ast" "1.8.3" + "@webassemblyjs/helper-module-context" "1.8.3" + "@webassemblyjs/wasm-edit" "1.8.3" + "@webassemblyjs/wasm-parser" "1.8.3" + acorn "^6.0.5" + acorn-dynamic-import "^4.0.0" ajv "^6.1.0" ajv-keywords "^3.1.0" chrome-trace-event "^1.0.0" @@ -9951,25 +10593,26 @@ webpack@^4.26.0: mkdirp "~0.5.0" neo-async "^2.5.0" node-libs-browser "^2.0.0" - schema-utils "^0.4.4" + schema-utils "^1.0.0" tapable "^1.1.0" terser-webpack-plugin "^1.1.0" watchpack "^1.5.0" webpack-sources "^1.3.0" -whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3: +whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3, whatwg-encoding@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" dependencies: iconv-lite "0.4.24" -whatwg-mimetype@^2.1.0, whatwg-mimetype@^2.2.0: +whatwg-mimetype@^2.1.0, whatwg-mimetype@^2.2.0, whatwg-mimetype@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" whatwg-url@^6.4.1: version "6.5.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.5.0.tgz#f2df02bff176fd65070df74ad5ccbb5a199965a8" + integrity sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ== dependencies: lodash.sortby "^4.7.0" tr46 "^1.0.1" @@ -9978,18 +10621,16 @@ whatwg-url@^6.4.1: whatwg-url@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.0.0.tgz#fde926fa54a599f3adf82dff25a9f7be02dc6edd" + integrity sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ== dependencies: lodash.sortby "^4.7.0" tr46 "^1.0.1" webidl-conversions "^4.0.2" -when@^3.7.7: - version "3.7.8" - resolved "https://registry.yarnpkg.com/when/-/when-3.7.8.tgz#c7130b6a7ea04693e842cdc9e7a1f2aa39a39f82" - which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= which@1, which@^1.1.1, which@^1.2.1, which@^1.2.12, which@^1.2.8, which@^1.2.9, which@^1.3.0, which@^1.3.1: version "1.3.1" @@ -10000,38 +10641,40 @@ which@1, which@^1.1.1, which@^1.2.1, which@^1.2.12, which@^1.2.8, which@^1.2.9, 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" widest-line@^1.0.0: version "1.0.0" - resolved "http://registry.npmjs.org/widest-line/-/widest-line-1.0.0.tgz#0c09c85c2a94683d0d7eaf8ee097d564bf0e105c" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-1.0.0.tgz#0c09c85c2a94683d0d7eaf8ee097d564bf0e105c" + integrity sha1-DAnIXCqUaD0Nfq+O4JfVZL8OEFw= dependencies: string-width "^1.0.1" widest-line@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.1.tgz#7438764730ec7ef4381ce4df82fb98a53142a3fc" + integrity sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA== dependencies: string-width "^2.1.1" window-size@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" + integrity sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0= windows-release@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/windows-release/-/windows-release-3.1.0.tgz#8d4a7e266cbf5a233f6c717dac19ce00af36e12e" + integrity sha512-hBb7m7acFgQPQc222uEQTmdcGLeBmQLNLFIh0rDk3CwFOBrfjefLzEfEfmpMq8Af/n/GnFf3eYf203FY1PmudA== dependencies: execa "^0.10.0" -with-callback@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/with-callback/-/with-callback-1.0.2.tgz#a09629b9a920028d721404fb435bdcff5c91bc21" - wordwrap@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" + integrity sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8= wordwrap@^1.0.0, wordwrap@~1.0.0: version "1.0.0" @@ -10040,6 +10683,7 @@ wordwrap@^1.0.0, wordwrap@~1.0.0: wordwrap@~0.0.2: version "0.0.3" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" + integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= worker-farm@^1.5.2: version "1.6.0" @@ -10049,7 +10693,8 @@ worker-farm@^1.5.2: wrap-ansi@^2.0.0: version "2.1.0" - resolved "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= dependencies: string-width "^1.0.1" strip-ansi "^3.0.1" @@ -10057,10 +10702,21 @@ wrap-ansi@^2.0.0: wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= -write-file-atomic@^2.0.0, write-file-atomic@^2.1.0, write-file-atomic@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.3.0.tgz#1ff61575c2e2a4e8e510d6fa4e243cce183999ab" +write-file-atomic@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.1.tgz#d0b05463c188ae804396fd5ab2a370062af87529" + integrity sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg== + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" + +write-file-atomic@^2.0.0, write-file-atomic@^2.3.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.2.tgz#a7181706dfba17855d221140a9c06e15fcdd87b9" + integrity sha512-s0b6vB3xIVRLWywa6X9TOMA7k9zio0TMOsl9ZnDkliA/cfJlpHXAscj0gbHVJiTdIuAYpIyqS5GW91fqm6gG5g== dependencies: graceful-fs "^4.1.11" imurmurhash "^0.1.4" @@ -10069,6 +10725,7 @@ write-file-atomic@^2.0.0, write-file-atomic@^2.1.0, write-file-atomic@^2.3.0: write-json-file@^2.2.0, write-json-file@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-2.3.0.tgz#2b64c8a33004d54b8698c76d585a77ceb61da32f" + integrity sha1-K2TIozAE1UuGmMdtWFp3zrYdoy8= dependencies: detect-indent "^5.0.0" graceful-fs "^4.1.2" @@ -10080,6 +10737,7 @@ write-json-file@^2.2.0, write-json-file@^2.3.0: write-pkg@^3.1.0: version "3.2.0" resolved "https://registry.yarnpkg.com/write-pkg/-/write-pkg-3.2.0.tgz#0e178fe97820d389a8928bc79535dbe68c2cff21" + integrity sha512-tX2ifZ0YqEFOF1wjRW2Pk93NLsj02+n1UP5RvO6rCs0K6R2g1padvf006cY74PQJKMGS2r42NK7FD0dG6Y6paw== dependencies: sort-keys "^2.0.0" write-json-file "^2.2.0" @@ -10087,6 +10745,14 @@ write-pkg@^3.1.0: ws@^5.2.0: version "5.2.2" resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f" + integrity sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA== + dependencies: + async-limiter "~1.0.0" + +ws@^6.1.2: + version "6.1.4" + resolved "https://registry.yarnpkg.com/ws/-/ws-6.1.4.tgz#5b5c8800afab925e94ccb29d153c8d02c1776ef9" + integrity sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA== dependencies: async-limiter "~1.0.0" @@ -10105,30 +10771,53 @@ xdg-basedir@^3.0.0: xml-name-validator@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" + integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== + +xml2js@^0.4.17: + version "0.4.19" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7" + integrity sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q== + dependencies: + sax ">=0.6.0" + xmlbuilder "~9.0.1" + +xmlbuilder@~9.0.1: + version "9.0.7" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" + integrity sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0= + +xmlchars@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-1.3.1.tgz#1dda035f833dbb4f86a0c28eaa6ca769214793cf" + integrity sha512-tGkGJkN8XqCod7OT+EvGYK5Z4SfDQGD30zAa58OcnAa0RRWgzUEK72tkXhsX1FZd+rgnhRxFtmO+ihkp8LHSkw== xmlhttprequest-ssl@~1.5.4: version "1.5.5" resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e" -xregexp@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-2.0.0.tgz#52a63e56ca0b84a7f3a5f3d61872f126ad7a5943" - -xtend@^4.0.0, xtend@~4.0.0, xtend@~4.0.1: +xtend@^4.0.0, xtend@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" y18n@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" + integrity sha1-bRX7qITAhnnA136I53WegR4H+kE= "y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" + integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== + +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= yallist@^3.0.0, yallist@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" + integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A== yargs-parser@10.x: version "10.1.0" @@ -10139,42 +10828,22 @@ yargs-parser@10.x: yargs-parser@^11.1.1: version "11.1.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4" + integrity sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ== dependencies: camelcase "^5.0.0" decamelize "^1.2.0" -yargs-parser@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-8.1.0.tgz#f1376a33b6629a5d063782944da732631e966950" - dependencies: - camelcase "^4.1.0" - yargs-parser@^9.0.2: version "9.0.2" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077" + integrity sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc= dependencies: camelcase "^4.1.0" -yargs@^10.0.3: - version "10.1.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-10.1.2.tgz#454d074c2b16a51a43e2fb7807e4f9de69ccb5c5" - dependencies: - cliui "^4.0.0" - decamelize "^1.1.1" - find-up "^2.1.0" - get-caller-file "^1.0.1" - os-locale "^2.0.0" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^2.0.0" - which-module "^2.0.0" - y18n "^3.2.1" - yargs-parser "^8.1.0" - yargs@^11.0.0: version "11.1.0" - resolved "http://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz#90b869934ed6e871115ea2ff58b03f4724ed2d77" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.1.0.tgz#90b869934ed6e871115ea2ff58b03f4724ed2d77" + integrity sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A== dependencies: cliui "^4.0.0" decamelize "^1.1.1" @@ -10189,7 +10858,7 @@ yargs@^11.0.0: y18n "^3.2.1" yargs-parser "^9.0.2" -yargs@^12.0.1: +yargs@^12.0.1, yargs@^12.0.2, yargs@^12.0.5: version "12.0.5" resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13" dependencies: @@ -10208,7 +10877,8 @@ yargs@^12.0.1: yargs@~3.10.0: version "3.10.0" - resolved "http://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" + integrity sha1-9+572FfdfB0tOMDnTvvWgdFDH9E= dependencies: camelcase "^1.0.2" cliui "^2.1.0" @@ -10218,12 +10888,3 @@ yargs@~3.10.0: yeast@0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" - -zip-stream@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-1.2.0.tgz#a8bc45f4c1b49699c6b90198baacaacdbcd4ba04" - dependencies: - archiver-utils "^1.3.0" - compress-commons "^1.2.0" - lodash "^4.8.0" - readable-stream "^2.0.0"