diff --git a/.eslintignore b/.eslintignore index 66d4fa776cff..544b9a8eeef6 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,8 +1,4 @@ # THIS IS A TEMPORARY FILE # THIS WILL BE REMOVED AFTER WE FINISH ESLINT UPGRADE -packages/integrations/**/* -packages/node/**/* -packages/react/**/* -packages/tracing/**/* packages/typescript/**/* diff --git a/.eslintrc.js b/.eslintrc.js index 64f5f023ccb1..f4ee4c1089a4 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -4,8 +4,8 @@ module.exports = { node: true, }, extends: ['prettier', 'eslint:recommended', 'plugin:import/errors', 'plugin:import/warnings'], - plugins: ['sentry-sdk', 'simple-import-sort'], - ignorePatterns: ['eslint-plugin-sentry-sdk'], + plugins: ['sentry-sdks', 'simple-import-sort'], + ignorePatterns: ['eslint-plugin-sentry-sdks'], overrides: [ { // Configuration for JavaScript files @@ -43,7 +43,7 @@ module.exports = { // Enforce type annotations to maintain consistency. This is especially important as // we have a public API, so we want changes to be very explicit. '@typescript-eslint/typedef': ['error', { arrowParameter: false }], - '@typescript-eslint/explicit-function-return-type': 'error', + '@typescript-eslint/explicit-function-return-type': ['error', { allowExpressions: true }], // Consistent ordering of fields, methods and constructors for classes should be enforced '@typescript-eslint/member-ordering': 'error', @@ -87,6 +87,17 @@ module.exports = { 'simple-import-sort/sort': 'error', 'sort-imports': 'off', 'import/order': 'off', + + // Disallow delete operator. We should make this operation opt in (by disabling this rule). + '@typescript-eslint/no-dynamic-delete': 'error', + + // We should prevent against overloads unless necessary. + '@typescript-eslint/unified-signatures': 'error', + + // Disallow unsafe any usage. We should enforce that types be used as possible, or unknown be used + // instead of any. This is especially important for methods that expose a public API, as users + // should know exactly what they have to provide to use those methods. Turned off in tests. + '@typescript-eslint/no-unsafe-member-access': 'error', }, }, { @@ -94,7 +105,7 @@ module.exports = { files: ['src/**/*'], rules: { // We want to prevent async await usage in our files to prevent uncessary bundle size. - 'sentry-sdk/no-async-await': 'error', + 'sentry-sdks/no-async-await': 'error', // JSDOC comments are required for classes and methods. As we have a public facing codebase, documentation, // even if it may seems excessive at times, is important to emphasize. Turned off in tests. @@ -102,6 +113,9 @@ module.exports = { 'error', { require: { ClassDeclaration: true, MethodDefinition: true }, checkConstructors: false }, ], + + // All imports should be accounted for + 'import/no-extraneous-dependencies': 'error', }, }, { @@ -116,6 +130,7 @@ module.exports = { '@typescript-eslint/explicit-function-return-type': 'off', 'no-unused-expressions': 'off', '@typescript-eslint/no-unused-expressions': 'off', + '@typescript-eslint/no-unsafe-member-access': 'off', }, }, { @@ -164,5 +179,8 @@ module.exports = { // imports should be ordered. 'import/order': ['error', { 'newlines-between': 'always' }], + + // Make sure for in loops check for properties + 'guard-for-in': 'error', }, }; diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 28476b36dfbe..c2246750180f 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -1,5 +1,5 @@ { // See http://go.microsoft.com/fwlink/?LinkId=827846 // for the documentation about the extensions.json format - "recommendations": ["esbenp.prettier-vscode", "ms-vscode.vscode-typescript-tslint-plugin", "dbaeumer.vscode-eslint"] + "recommendations": ["esbenp.prettier-vscode", "dbaeumer.vscode-eslint"] } diff --git a/.vscode/settings.json b/.vscode/settings.json index 84d066dc93a6..849e79f5a842 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -13,7 +13,6 @@ "**/dist/": true }, "typescript.tsdk": "./node_modules/typescript/lib", - "tslint.autoFixOnSave": true, "[json]": { "editor.formatOnType": false, "editor.formatOnPaste": false, diff --git a/dangerfile.ts b/dangerfile.ts index 61e840109bbe..9b7a436e304b 100644 --- a/dangerfile.ts +++ b/dangerfile.ts @@ -1,12 +1,8 @@ import { exec } from 'child_process'; import { danger, fail, message, schedule, warn } from 'danger'; -import tslint from 'danger-plugin-tslint'; -import { prettyResults } from 'danger-plugin-tslint/dist/prettyResults'; import { CLIEngine } from 'eslint'; -import { resolve } from 'path'; import { promisify } from 'util'; -const PACKAGES = ['integrations', 'node']; const EXTENSIONS = ['.js', '.jsx', '.ts', '.tsx']; /** @@ -48,35 +44,6 @@ export default async (): Promise => { return; } - schedule(async () => { - const tsLintResult = ( - await Promise.all( - PACKAGES.map(packageName => { - return new Promise(res => { - tslint({ - lintResultsJsonPath: resolve(__dirname, 'packages', packageName, 'lint-results.json'), - handleResults: results => { - if (results.length > 0) { - const formattedResults = prettyResults(results); - res(`TSLint failed: **@sentry/${packageName}**\n\n${formattedResults}`); - } else { - res(''); - } - }, - }); - }); - }), - ) - ).filter(str => str.length); - if (tsLintResult.length) { - tsLintResult.forEach(tsLintFail => { - fail(`${tsLintFail}`); - }); - } else { - message('✅ TSLint passed'); - } - }); - await eslint(); const hasChangelog = danger.git.modified_files.indexOf('CHANGELOG.md') !== -1; diff --git a/eslint-plugin-sentry-sdk/index.js b/eslint-plugin-sentry-sdks/index.js similarity index 100% rename from eslint-plugin-sentry-sdk/index.js rename to eslint-plugin-sentry-sdks/index.js diff --git a/eslint-plugin-sentry-sdk/package.json b/eslint-plugin-sentry-sdks/package.json similarity index 78% rename from eslint-plugin-sentry-sdk/package.json rename to eslint-plugin-sentry-sdks/package.json index 3ee16ff8fae1..231126e1abbb 100644 --- a/eslint-plugin-sentry-sdk/package.json +++ b/eslint-plugin-sentry-sdks/package.json @@ -1,5 +1,5 @@ { - "name": "eslint-plugin-sentry-sdk", + "name": "eslint-plugin-sentry-sdks", "version": "0.0.1", "main": "index.js", "devDependencies": { diff --git a/package.json b/package.json index 8a0a3a1f3492..95a1f152a46a 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,6 @@ "fix": "lerna run --stream --concurrency 1 fix", "link:yarn": "lerna run --stream --concurrency 1 link:yarn", "lint": "lerna run --stream --concurrency 1 lint", - "lint:json": "lerna run --stream --concurrency 1 lint:tslint:json", "test": "lerna run --stream --concurrency 1 --sort test", "codecov": "codecov", "postpublish": "make publish-docs" @@ -44,19 +43,17 @@ "@types/mocha": "^5.2.0", "@types/node": "^11.13.7", "@types/sinon": "^7.0.11", - "@typescript-eslint/eslint-plugin": "^3.7.1", - "@typescript-eslint/parser": "^3.7.1", + "@typescript-eslint/eslint-plugin": "^3.9.0", + "@typescript-eslint/parser": "^3.9.0", "chai": "^4.1.2", "codecov": "^3.6.5", "danger": "^7.1.3", - "danger-plugin-eslint": "^0.1.0", - "danger-plugin-tslint": "^2.0.0", "eslint": "^7.5.0", "eslint-config-prettier": "^6.11.0", "eslint-plugin-deprecation": "^1.1.0", "eslint-plugin-import": "^2.22.0", "eslint-plugin-jsdoc": "^30.0.3", - "eslint-plugin-sentry-sdk": "file:./eslint-plugin-sentry-sdk", + "eslint-plugin-sentry-sdks": "file:./eslint-plugin-sentry-sdks", "eslint-plugin-simple-import-sort": "^5.0.3", "jest": "^24.7.1", "karma-browserstack-launcher": "^1.5.1", @@ -71,10 +68,8 @@ "sinon": "^7.3.2", "size-limit": "^4.5.5", "ts-jest": "^24.0.2", - "tslint": "5.16.0", "typedoc": "^0.14.2", - "typescript": "3.4.5", - "typescript-tslint-plugin": "^0.3.1" + "typescript": "3.4.5" }, "resolutions": { "**/agent-base": "5" diff --git a/packages/angular/package.json b/packages/angular/package.json index e1558202b94b..7b26fee71726 100644 --- a/packages/angular/package.json +++ b/packages/angular/package.json @@ -30,7 +30,6 @@ "prettier": "^1.17.0", "prettier-check": "^2.0.0", "rimraf": "^2.6.3", - "tslint": "^5.16.0", "typescript": "^3.5.1" }, "scripts": { diff --git a/packages/angular/src/errorhandler.ts b/packages/angular/src/errorhandler.ts index 456c67476bd2..2c93586c0eb8 100644 --- a/packages/angular/src/errorhandler.ts +++ b/packages/angular/src/errorhandler.ts @@ -78,7 +78,6 @@ class SentryErrorHandler implements AngularErrorHandler { // Allow custom overrides of extracting function if (this._options.extractor) { const defaultExtractor = this._defaultExtractor.bind(this); - // tslint:disable-next-line:no-unsafe-any return this._options.extractor(error, defaultExtractor); } diff --git a/packages/angular/src/tracing.ts b/packages/angular/src/tracing.ts index 03a09fafd27a..8ebc48d26d30 100644 --- a/packages/angular/src/tracing.ts +++ b/packages/angular/src/tracing.ts @@ -146,9 +146,9 @@ export class TraceDirective implements OnInit, AfterViewInit { export function TraceClassDecorator(): ClassDecorator { let tracingSpan: Span; + /* eslint-disable @typescript-eslint/no-unsafe-member-access */ // eslint-disable-next-line @typescript-eslint/explicit-function-return-type return target => { - // tslint:disable-next-line:no-unsafe-any const originalOnInit = target.prototype.ngOnInit; // eslint-disable-next-line @typescript-eslint/no-explicit-any target.prototype.ngOnInit = function(...args: any[]): ReturnType { @@ -171,11 +171,11 @@ export function TraceClassDecorator(): ClassDecorator { tracingSpan.finish(); } if (originalAfterViewInit) { - // tslint:disable-next-line:no-unsafe-any return originalAfterViewInit.apply(this, args); } }; }; + /* eslint-enable @typescript-eslint/no-unsafe-member-access */ } /** @@ -198,7 +198,7 @@ export function TraceMethodDecorator(): MethodDecorator { }); } if (originalMethod) { - // tslint:disable-next-line:no-unsafe-any + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access return originalMethod.apply(this, args); } }; diff --git a/packages/apm/package.json b/packages/apm/package.json index 3b6261365993..83f09c132fae 100644 --- a/packages/apm/package.json +++ b/packages/apm/package.json @@ -36,7 +36,6 @@ "rollup-plugin-node-resolve": "^4.2.3", "rollup-plugin-terser": "^4.0.4", "rollup-plugin-typescript2": "^0.21.0", - "tslint": "5.16.0", "typescript": "3.4.5" }, "scripts": { diff --git a/packages/apm/src/index.bundle.ts b/packages/apm/src/index.bundle.ts index 00ebceae3714..ba114e0c788b 100644 --- a/packages/apm/src/index.bundle.ts +++ b/packages/apm/src/index.bundle.ts @@ -61,12 +61,10 @@ export { Span, TRACEPARENT_REGEXP } from './span'; let windowIntegrations = {}; // This block is needed to add compatibility with the integrations packages when used with a CDN -// tslint:disable: no-unsafe-any const _window = getGlobalObject(); if (_window.Sentry && _window.Sentry.Integrations) { windowIntegrations = _window.Sentry.Integrations; } -// tslint:enable: no-unsafe-any const INTEGRATIONS = { ...windowIntegrations, diff --git a/packages/apm/src/integrations/tracing.ts b/packages/apm/src/integrations/tracing.ts index 6de086ddc5f8..97ba85efdc5e 100644 --- a/packages/apm/src/integrations/tracing.ts +++ b/packages/apm/src/integrations/tracing.ts @@ -315,7 +315,7 @@ export class Tracing implements Integration { } span.finish(); } - // tslint:disable-next-line: no-dynamic-delete + // eslint-disable-next-line @typescript-eslint/no-dynamic-delete delete Tracing._activities[id]; } @@ -630,6 +630,7 @@ export class Tracing implements Integration { let entryScriptStartEndTime: number | undefined; let tracingInitMarkStartTime: number | undefined; + /* eslint-disable @typescript-eslint/no-unsafe-member-access */ performance .getEntries() .slice(Tracing._performanceCursor) @@ -687,6 +688,7 @@ export class Tracing implements Integration { // Ignore other entry types. } }); + /* eslint-enable @typescript-eslint/no-unsafe-member-access */ if (entryScriptStartEndTime !== undefined && tracingInitMarkStartTime !== undefined) { _startChild(transactionSpan, { @@ -698,7 +700,6 @@ export class Tracing implements Integration { } Tracing._performanceCursor = Math.max(performance.getEntries().length - 1, 0); - // tslint:enable: no-unsafe-any } /** @@ -772,6 +773,7 @@ export class Tracing implements Integration { return time / 1000; } + /* eslint-disable @typescript-eslint/no-unsafe-member-access */ /** * Adds debug data to the span */ @@ -792,8 +794,8 @@ export class Tracing implements Integration { } debugData['Date.now()'] = Date.now(); span.setData('sentry_debug', debugData); - // tslint:enable: no-unsafe-any } + /* eslint-enable @typescript-eslint/no-unsafe-member-access */ /** * @inheritDoc @@ -936,6 +938,7 @@ export class Tracing implements Integration { } } +/* eslint-disable @typescript-eslint/no-unsafe-member-access */ /** * Creates breadcrumbs from XHR API calls */ @@ -945,12 +948,10 @@ function xhrCallback(handlerData: { [key: string]: any }): void { return; } - // tslint:disable-next-line: no-unsafe-any if (!handlerData || !handlerData.xhr || !handlerData.xhr.__sentry_xhr__) { return; } - // tslint:disable: no-unsafe-any const xhr = handlerData.xhr.__sentry_xhr__; if (!Tracing.options.shouldCreateSpanForRequest(xhr.url)) { @@ -988,7 +989,6 @@ function xhrCallback(handlerData: { [key: string]: any }): void { } } } - // tslint:enable: no-unsafe-any } /** @@ -996,7 +996,6 @@ function xhrCallback(handlerData: { [key: string]: any }): void { */ // eslint-disable-next-line @typescript-eslint/no-explicit-any function fetchCallback(handlerData: { [key: string]: any }): void { - // tslint:disable: no-unsafe-any if (!Tracing.options.traceFetch) { return; } @@ -1043,8 +1042,8 @@ function fetchCallback(handlerData: { [key: string]: any }): void { } } } - // tslint:enable: no-unsafe-any } +/* eslint-enable @typescript-eslint/no-unsafe-member-access */ /** * Creates transaction from navigation changes diff --git a/packages/apm/src/integrations/types.ts b/packages/apm/src/integrations/types.ts index 357a7b857332..4120cd5aa813 100644 --- a/packages/apm/src/integrations/types.ts +++ b/packages/apm/src/integrations/types.ts @@ -99,7 +99,7 @@ export interface Location { */ reload(): void; /** @deprecated */ - // tslint:disable-next-line: unified-signatures completed-docs + // eslint-disable-next-line @typescript-eslint/unified-signatures reload(forcedReload: boolean): void; /** * Removes the current page from the session history and navigates to the given URL. diff --git a/packages/apm/src/transaction.ts b/packages/apm/src/transaction.ts index 1dede4623a06..c36981245e68 100644 --- a/packages/apm/src/transaction.ts +++ b/packages/apm/src/transaction.ts @@ -1,4 +1,3 @@ -// tslint:disable:max-classes-per-file import { getCurrentHub, Hub } from '@sentry/hub'; import { TransactionContext } from '@sentry/types'; import { isInstanceOf, logger } from '@sentry/utils'; diff --git a/packages/browser/.eslintrc.js b/packages/browser/.eslintrc.js index e03f056247e1..1c1c96c6a009 100644 --- a/packages/browser/.eslintrc.js +++ b/packages/browser/.eslintrc.js @@ -24,6 +24,7 @@ module.exports = { 'max-lines': 'off', 'prefer-template': 'off', 'no-unused-expressions': 'off', + 'guard-for-in': 'off', }, }, { diff --git a/packages/browser/src/helpers.ts b/packages/browser/src/helpers.ts index ef6663621cbd..3b50fb4a2dad 100644 --- a/packages/browser/src/helpers.ts +++ b/packages/browser/src/helpers.ts @@ -69,7 +69,7 @@ export function wrap( before.apply(this, arguments); } - // eslint-disable-next-line @typescript-eslint/no-explicit-any + // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access const wrappedArguments = args.map((arg: any) => wrap(arg, options)); if (fn.handleEvent) { @@ -77,6 +77,7 @@ export function wrap( // NOTE: If you are a Sentry user, and you are seeing this stack frame, it // means the sentry.javascript SDK caught an error invoking your application code. This // is expected behavior and NOT indicative of a bug with sentry.javascript. + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access return fn.handleEvent.apply(this, wrappedArguments); } // Attempt to invoke user-land function diff --git a/packages/browser/src/integrations/breadcrumbs.ts b/packages/browser/src/integrations/breadcrumbs.ts index 92915171dd7a..eb8cb1de1458 100644 --- a/packages/browser/src/integrations/breadcrumbs.ts +++ b/packages/browser/src/integrations/breadcrumbs.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable max-lines */ import { getCurrentHub } from '@sentry/core'; import { Event, Integration, Severity } from '@sentry/types'; diff --git a/packages/browser/src/integrations/globalhandlers.ts b/packages/browser/src/integrations/globalhandlers.ts index c305d495da22..b7768dea4e7a 100644 --- a/packages/browser/src/integrations/globalhandlers.ts +++ b/packages/browser/src/integrations/globalhandlers.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/no-unsafe-member-access */ import { getCurrentHub } from '@sentry/core'; import { Event, Integration, Severity } from '@sentry/types'; import { diff --git a/packages/browser/src/integrations/trycatch.ts b/packages/browser/src/integrations/trycatch.ts index 34d6b504839b..5b638201b91c 100644 --- a/packages/browser/src/integrations/trycatch.ts +++ b/packages/browser/src/integrations/trycatch.ts @@ -125,6 +125,7 @@ export class TryCatch implements Integration { private _wrapRAF(original: any): (callback: () => void) => any { // eslint-disable-next-line @typescript-eslint/no-explicit-any return function(this: any, callback: () => void): () => void { + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access return original.call( this, wrap(callback, { @@ -145,8 +146,10 @@ export class TryCatch implements Integration { private _wrapEventTarget(target: string): void { // eslint-disable-next-line @typescript-eslint/no-explicit-any const global = getGlobalObject() as { [key: string]: any }; + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access const proto = global[target] && global[target].prototype; + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access if (!proto || !proto.hasOwnProperty || !proto.hasOwnProperty('addEventListener')) { return; } diff --git a/packages/browser/src/tracekit.ts b/packages/browser/src/tracekit.ts index 97943c9449a1..61db50795ffe 100644 --- a/packages/browser/src/tracekit.ts +++ b/packages/browser/src/tracekit.ts @@ -3,6 +3,8 @@ * largely modified and is now maintained as part of Sentry JS SDK. */ +/* eslint-disable @typescript-eslint/no-unsafe-member-access */ + /** * An object representing a single stack frame. * {Object} StackFrame diff --git a/packages/core/src/baseclient.ts b/packages/core/src/baseclient.ts index 799533f77f39..299cfc4a77a8 100644 --- a/packages/core/src/baseclient.ts +++ b/packages/core/src/baseclient.ts @@ -330,6 +330,7 @@ export abstract class BaseClient implement // so this block overwrites the normalized event to add back the original // Transaction information prior to normalization. if (event.contexts && event.contexts.trace) { + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access normalized.contexts.trace = event.contexts.trace; } return normalized; diff --git a/packages/core/test/lib/base.test.ts b/packages/core/test/lib/base.test.ts index cfab857f25d2..ba4d8061a620 100644 --- a/packages/core/test/lib/base.test.ts +++ b/packages/core/test/lib/base.test.ts @@ -594,7 +594,7 @@ describe('BaseClient', () => { spanId: '9e15bf99fbe4bc80', startTimestamp: 1591603196.637835, traceId: '86f39e84263a4de99c326acab3bfe3bd', - } as any) as Span, // `as any` to bypass linter https://palantir.github.io/tslint/rules/no-object-literal-type-assertion/ + } as unknown) as Span, ({ description: 'first-contentful-paint', endTimestamp: 1591603196.637835, diff --git a/packages/core/test/mocks/backend.ts b/packages/core/test/mocks/backend.ts index fabf12fcbc13..d4929d9d306a 100644 --- a/packages/core/test/mocks/backend.ts +++ b/packages/core/test/mocks/backend.ts @@ -26,8 +26,10 @@ export class TestBackend extends BaseBackend { exception: { values: [ { + /* eslint-disable @typescript-eslint/no-unsafe-member-access */ type: exception.name, value: exception.message, + /* eslint-enable @typescript-eslint/no-unsafe-member-access */ }, ], }, diff --git a/packages/core/test/tslint.json b/packages/core/test/tslint.json deleted file mode 100644 index e3e63638823f..000000000000 --- a/packages/core/test/tslint.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "extends": ["../tslint.json"], - "rules": { - "completed-docs": false, - "no-non-null-assertion": false, - "no-implicit-dependencies": [true, "dev"], - "no-unused-expression": false, - "no-unsafe-any": false - } -} diff --git a/packages/gatsby/package.json b/packages/gatsby/package.json index 20f85d4656e0..14819302e4a7 100644 --- a/packages/gatsby/package.json +++ b/packages/gatsby/package.json @@ -38,7 +38,6 @@ "prettier": "^1.17.0", "prettier-check": "^2.0.0", "rimraf": "^2.6.3", - "tslint": "5.16.0", "typescript": "3.4.5" }, "scripts": { diff --git a/packages/hub/src/hub.ts b/packages/hub/src/hub.ts index 43dc3ad754dd..3965b05dd013 100644 --- a/packages/hub/src/hub.ts +++ b/packages/hub/src/hub.ts @@ -390,7 +390,7 @@ export class Hub implements HubInterface { private _invokeClient(method: M, ...args: any[]): void { const top = this.getStackTop(); if (top && top.client && top.client[method]) { - // eslint-disable-next-line @typescript-eslint/no-explicit-any + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any (top.client as any)[method](...args, top.scope); } } @@ -470,6 +470,7 @@ function getHubFromActiveDomain(registry: Carrier): Hub { } // eslint-disable-next-line @typescript-eslint/no-explicit-any const domain = sentry.extensions[property] as any; + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access const activeDomain = domain.active; // If there no active domain, just return global hub diff --git a/packages/integrations/.eslintrc.js b/packages/integrations/.eslintrc.js new file mode 100644 index 000000000000..78c630867d13 --- /dev/null +++ b/packages/integrations/.eslintrc.js @@ -0,0 +1,29 @@ +module.exports = { + root: true, + env: { + es6: true, + }, + parserOptions: { + ecmaVersion: 2018, + }, + extends: ['../../.eslintrc.js'], + ignorePatterns: ['build/**/*', 'dist/**/*', 'esm/**/*', 'examples/**/*', 'scripts/**/*'], + overrides: [ + { + files: ['*.ts', '*.tsx', '*.d.ts'], + parserOptions: { + project: './tsconfig.json', + }, + }, + { + files: ['test/**/*'], + env: { + mocha: true, + }, + rules: { + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/no-non-null-assertion': 'off', + }, + }, + ], +}; diff --git a/packages/integrations/package.json b/packages/integrations/package.json index 5d843929afe3..620e776e9e1c 100644 --- a/packages/integrations/package.json +++ b/packages/integrations/package.json @@ -32,7 +32,6 @@ "rollup-plugin-node-resolve": "^4.2.3", "rollup-plugin-terser": "^4.0.4", "rollup-plugin-typescript2": "^0.21.0", - "tslint": "5.16.0", "typescript": "3.4.5" }, "scripts": { @@ -45,13 +44,12 @@ "build:bundle": "rollup --config", "clean": "rimraf dist coverage esm build .rpt2_cache", "link:yarn": "yarn link", - "lint": "run-s lint:prettier lint:tslint", + "lint": "run-s lint:prettier lint:eslint", "lint:prettier": "prettier-check \"{src,test}/**/*.ts\"", - "lint:tslint": "tslint -t stylish -p .", - "lint:tslint:json": "tslint --format json -p . | tee lint-results.json", - "fix": "run-s fix:tslint fix:prettier", + "lint:eslint": "eslint . --cache --cache-location '../../eslintcache/' --format stylish", + "fix": "run-s fix:eslint fix:prettier", "fix:prettier": "prettier --write \"{src,test}/**/*.ts\"", - "fix:tslint": "tslint --fix -t stylish -p .", + "fix:eslint": "eslint . --format stylish --fix", "test": "jest", "test:watch": "jest --watch" }, diff --git a/packages/integrations/rollup.config.js b/packages/integrations/rollup.config.js index 2f086a70ed15..f05c4cd04d44 100644 --- a/packages/integrations/rollup.config.js +++ b/packages/integrations/rollup.config.js @@ -1,8 +1,9 @@ +import * as fs from 'fs'; + import { terser } from 'rollup-plugin-terser'; import typescript from 'rollup-plugin-typescript2'; import resolve from 'rollup-plugin-node-resolve'; import commonjs from 'rollup-plugin-commonjs'; -import * as fs from 'fs'; const terserInstance = terser({ mangle: { diff --git a/packages/integrations/src/angular.ts b/packages/integrations/src/angular.ts index 5e223fef1a0e..bf50de29007c 100644 --- a/packages/integrations/src/angular.ts +++ b/packages/integrations/src/angular.ts @@ -10,11 +10,6 @@ const angularPattern = /^\[((?:[$a-zA-Z0-9]+:)?(?:[$a-zA-Z0-9]+))\] (.*?)\n?(\S+ * Provides an $exceptionHandler for AngularJS */ export class Angular implements Integration { - /** - * @inheritDoc - */ - public name: string = Angular.id; - /** * @inheritDoc */ @@ -25,9 +20,15 @@ export class Angular implements Integration { */ public static moduleName: string = 'ngSentry'; + /** + * @inheritDoc + */ + public name: string = Angular.id; + /** * Angular's instance */ + // eslint-disable-next-line @typescript-eslint/no-explicit-any private readonly _angular: any; /** @@ -38,8 +39,9 @@ export class Angular implements Integration { /** * @inheritDoc */ + // eslint-disable-next-line @typescript-eslint/no-explicit-any public constructor(options: { angular?: any } = {}) { - // tslint:disable-next-line: no-unsafe-any + // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access this._angular = options.angular || getGlobalObject().angular; } @@ -54,22 +56,23 @@ export class Angular implements Integration { this._getCurrentHub = getCurrentHub; - // tslint:disable: no-unsafe-any + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access this._angular.module(Angular.moduleName, []).config([ '$provide', - ($provide: any) => { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + ($provide: any): void => { + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access $provide.decorator('$exceptionHandler', ['$delegate', this._$exceptionHandlerDecorator.bind(this)]); }, ]); - // tslint:enable: no-unsafe-any } /** * Angular's exceptionHandler for Sentry integration */ - // tslint:disable-next-line: no-unsafe-any + // eslint-disable-next-line @typescript-eslint/no-explicit-any private _$exceptionHandlerDecorator($delegate: any): any { - return (exception: Error, cause?: string) => { + return (exception: Error, cause?: string): void => { const hub = this._getCurrentHub && this._getCurrentHub(); if (hub && hub.getIntegration(Angular)) { @@ -103,7 +106,6 @@ export class Angular implements Integration { hub.captureException(exception); }); } - // tslint:disable-next-line: no-unsafe-any $delegate(exception, cause); }; } diff --git a/packages/integrations/src/captureconsole.ts b/packages/integrations/src/captureconsole.ts index 90f37df2812e..af9233207b58 100644 --- a/packages/integrations/src/captureconsole.ts +++ b/packages/integrations/src/captureconsole.ts @@ -8,12 +8,12 @@ export class CaptureConsole implements Integration { /** * @inheritDoc */ - public name: string = CaptureConsole.id; + public static id: string = 'CaptureConsole'; /** * @inheritDoc */ - public static id: string = 'CaptureConsole'; + public name: string = CaptureConsole.id; /** * @inheritDoc @@ -42,7 +42,8 @@ export class CaptureConsole implements Integration { return; } - fill(global.console, level, (originalConsoleLevel: () => any) => (...args: any[]) => { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + fill(global.console, level, (originalConsoleLevel: () => any) => (...args: any[]): void => { const hub = getCurrentHub(); if (hub.getIntegration(CaptureConsole)) { diff --git a/packages/integrations/src/debug.ts b/packages/integrations/src/debug.ts index e13e213d8b6c..b54e96d2ee4a 100644 --- a/packages/integrations/src/debug.ts +++ b/packages/integrations/src/debug.ts @@ -12,12 +12,12 @@ export class Debug implements Integration { /** * @inheritDoc */ - public name: string = Debug.id; + public static id: string = 'Debug'; /** * @inheritDoc */ - public static id: string = 'Debug'; + public name: string = Debug.id; /** JSDoc */ private readonly _options: DebugOptions; @@ -40,12 +40,12 @@ export class Debug implements Integration { addGlobalEventProcessor((event: Event, hint?: EventHint) => { const self = getCurrentHub().getIntegration(Debug); if (self) { - // tslint:disable:no-console - // tslint:disable:no-debugger if (self._options.debugger) { + // eslint-disable-next-line no-debugger debugger; } + /* eslint-disable no-console */ consoleSandbox(() => { if (self._options.stringify) { console.log(JSON.stringify(event, null, 2)); @@ -59,6 +59,7 @@ export class Debug implements Integration { } } }); + /* eslint-enable no-console */ } return event; }); diff --git a/packages/integrations/src/dedupe.ts b/packages/integrations/src/dedupe.ts index ed8cea670cb5..04a76708ec06 100644 --- a/packages/integrations/src/dedupe.ts +++ b/packages/integrations/src/dedupe.ts @@ -5,7 +5,7 @@ export class Dedupe implements Integration { /** * @inheritDoc */ - private _previousEvent?: Event; + public static id: string = 'Dedupe'; /** * @inheritDoc @@ -15,7 +15,7 @@ export class Dedupe implements Integration { /** * @inheritDoc */ - public static id: string = 'Dedupe'; + private _previousEvent?: Event; /** * @inheritDoc @@ -92,7 +92,7 @@ export class Dedupe implements Integration { if (exception) { try { - // @ts-ignore + // @ts-ignore Object could be undefined return exception.values[0].stacktrace.frames; } catch (_oO) { return undefined; diff --git a/packages/integrations/src/ember.ts b/packages/integrations/src/ember.ts index 1664e3405fa5..aec7cdbb7f0c 100644 --- a/packages/integrations/src/ember.ts +++ b/packages/integrations/src/ember.ts @@ -6,22 +6,25 @@ export class Ember implements Integration { /** * @inheritDoc */ - public name: string = Ember.id; + public static id: string = 'Ember'; + /** * @inheritDoc */ - public static id: string = 'Ember'; + public name: string = Ember.id; /** * @inheritDoc */ - private readonly _Ember: any; // tslint:disable-line:variable-name + // eslint-disable-next-line @typescript-eslint/naming-convention, @typescript-eslint/no-explicit-any + private readonly _Ember: any; /** * @inheritDoc */ + // eslint-disable-next-line @typescript-eslint/no-explicit-any public constructor(options: { Ember?: any } = {}) { - // tslint:disable-next-line: no-unsafe-any + // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access this._Ember = options.Ember || getGlobalObject().Ember; } @@ -29,13 +32,12 @@ export class Ember implements Integration { * @inheritDoc */ public setupOnce(_: (callback: EventProcessor) => void, getCurrentHub: () => Hub): void { - // tslint:disable:no-unsafe-any - if (!this._Ember) { logger.error('EmberIntegration is missing an Ember instance'); return; } + /* eslint-disable @typescript-eslint/no-unsafe-member-access */ const oldOnError = this._Ember.onerror; this._Ember.onerror = (error: Error): void => { @@ -50,6 +52,7 @@ export class Ember implements Integration { } }; + // eslint-disable-next-line @typescript-eslint/no-explicit-any this._Ember.RSVP.on('error', (reason: any): void => { if (getCurrentHub().getIntegration(Ember)) { getCurrentHub().withScope(scope => { @@ -64,4 +67,5 @@ export class Ember implements Integration { } }); } + /* eslint-enable @typescript-eslint/no-unsafe-member-access */ } diff --git a/packages/integrations/src/extraerrordata.ts b/packages/integrations/src/extraerrordata.ts index 6285a0acf55b..38e32a469b8c 100644 --- a/packages/integrations/src/extraerrordata.ts +++ b/packages/integrations/src/extraerrordata.ts @@ -11,12 +11,12 @@ export class ExtraErrorData implements Integration { /** * @inheritDoc */ - public name: string = ExtraErrorData.id; + public static id: string = 'ExtraErrorData'; /** * @inheritDoc */ - public static id: string = 'ExtraErrorData'; + public name: string = ExtraErrorData.id; /** * @inheritDoc @@ -88,7 +88,6 @@ export class ExtraErrorData implements Integration { if (isError(value)) { value = (value as Error).toString(); } - // tslint:disable:no-unsafe-any extraErrorInfo[key] = value; } result = extraErrorInfo; diff --git a/packages/integrations/src/reportingobserver.ts b/packages/integrations/src/reportingobserver.ts index 9b9f3d32635e..2e4a457e04bf 100644 --- a/packages/integrations/src/reportingobserver.ts +++ b/packages/integrations/src/reportingobserver.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ import { EventProcessor, Hub, Integration } from '@sentry/types'; import { getGlobalObject, supportsReportingObserver } from '@sentry/utils'; @@ -55,11 +56,12 @@ export class ReportingObserver implements Integration { /** * @inheritDoc */ - public readonly name: string = ReportingObserver.id; + public static id: string = 'ReportingObserver'; + /** * @inheritDoc */ - public static id: string = 'ReportingObserver'; + public readonly name: string = ReportingObserver.id; /** * Returns current hub. @@ -81,19 +83,19 @@ export class ReportingObserver implements Integration { * @inheritDoc */ public setupOnce(_: (callback: EventProcessor) => void, getCurrentHub: () => Hub): void { - // tslint:disable:no-unsafe-any - if (!supportsReportingObserver()) { return; } this._getCurrentHub = getCurrentHub; + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access const observer = new (getGlobalObject().ReportingObserver)(this.handler.bind(this), { buffered: true, types: this._options.types, }); + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access observer.observe(); } @@ -118,7 +120,7 @@ export class ReportingObserver implements Integration { [key: string]: any; } = {}; - // tslint:disable-next-line:forin + // eslint-disable-next-line guard-for-in for (const prop in report.body) { plainBody[prop] = report.body[prop]; } diff --git a/packages/integrations/src/rewriteframes.ts b/packages/integrations/src/rewriteframes.ts index 58613776a330..03fa00a19c5b 100644 --- a/packages/integrations/src/rewriteframes.ts +++ b/packages/integrations/src/rewriteframes.ts @@ -5,11 +5,6 @@ type StackFrameIteratee = (frame: StackFrame) => StackFrame; /** Rewrite event frames paths */ export class RewriteFrames implements Integration { - /** - * @inheritDoc - */ - public name: string = RewriteFrames.id; - /** * @inheritDoc */ @@ -18,29 +13,12 @@ export class RewriteFrames implements Integration { /** * @inheritDoc */ - private readonly _root?: string; + public name: string = RewriteFrames.id; /** * @inheritDoc */ - private readonly _iteratee: StackFrameIteratee = (frame: StackFrame) => { - if (!frame.filename) { - return frame; - } - // Check if the frame filename begins with `/` or a Windows-style prefix such as `C:\` - const isWindowsFrame = /^[A-Z]:\\/.test(frame.filename); - const startsWithSlash = /^\//.test(frame.filename); - if (isWindowsFrame || startsWithSlash) { - const filename = isWindowsFrame - ? frame.filename - .replace(/^[A-Z]:/, '') // remove Windows-style prefix - .replace(/\\/g, '/') // replace all `\\` instances with `/` - : frame.filename; - const base = this._root ? relative(this._root, filename) : basename(filename); - frame.filename = `app:///${base}`; - } - return frame; - }; + private readonly _root?: string; /** * @inheritDoc @@ -80,6 +58,28 @@ export class RewriteFrames implements Integration { return event; } + /** + * @inheritDoc + */ + private readonly _iteratee: StackFrameIteratee = (frame: StackFrame) => { + if (!frame.filename) { + return frame; + } + // Check if the frame filename begins with `/` or a Windows-style prefix such as `C:\` + const isWindowsFrame = /^[A-Z]:\\/.test(frame.filename); + const startsWithSlash = /^\//.test(frame.filename); + if (isWindowsFrame || startsWithSlash) { + const filename = isWindowsFrame + ? frame.filename + .replace(/^[A-Z]:/, '') // remove Windows-style prefix + .replace(/\\/g, '/') // replace all `\\` instances with `/` + : frame.filename; + const base = this._root ? relative(this._root, filename) : basename(filename); + frame.filename = `app:///${base}`; + } + return frame; + }; + /** JSDoc */ private _processExceptionsEvent(event: Event): Event { try { @@ -88,7 +88,7 @@ export class RewriteFrames implements Integration { exception: { ...event.exception, // The check for this is performed inside `process` call itself, safe to skip here - // tslint:disable-next-line:no-non-null-assertion + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion values: event.exception!.values!.map(value => ({ ...value, stacktrace: this._processStacktrace(value.stacktrace), diff --git a/packages/integrations/src/sessiontiming.ts b/packages/integrations/src/sessiontiming.ts index c82f26d7b350..0e45588e0f31 100644 --- a/packages/integrations/src/sessiontiming.ts +++ b/packages/integrations/src/sessiontiming.ts @@ -5,11 +5,12 @@ export class SessionTiming implements Integration { /** * @inheritDoc */ - public name: string = SessionTiming.id; + public static id: string = 'SessionTiming'; + /** * @inheritDoc */ - public static id: string = 'SessionTiming'; + public name: string = SessionTiming.id; /** Exact time Client was initialized expressed in milliseconds since Unix Epoch. */ protected readonly _startTime: number = Date.now(); diff --git a/packages/integrations/src/transaction.ts b/packages/integrations/src/transaction.ts index 0846f23c474e..e6d0ac24f770 100644 --- a/packages/integrations/src/transaction.ts +++ b/packages/integrations/src/transaction.ts @@ -5,11 +5,12 @@ export class Transaction implements Integration { /** * @inheritDoc */ - public name: string = Transaction.id; + public static id: string = 'Transaction'; + /** * @inheritDoc */ - public static id: string = 'Transaction'; + public name: string = Transaction.id; /** * @inheritDoc diff --git a/packages/integrations/src/vue.ts b/packages/integrations/src/vue.ts index 74f84bf9bfd8..dd0250224853 100644 --- a/packages/integrations/src/vue.ts +++ b/packages/integrations/src/vue.ts @@ -1,3 +1,5 @@ +/* eslint-disable max-lines */ +/* eslint-disable @typescript-eslint/no-explicit-any */ import { EventProcessor, Hub, Integration, IntegrationClass, Scope, Span, Transaction } from '@sentry/types'; import { basename, getGlobalObject, logger, timestampWithMs } from '@sentry/utils'; @@ -20,17 +22,18 @@ const BROWSER_TRACING_GETTER = ({ /** Global Vue object limited to the methods/attributes we require */ interface VueInstance { config: { - errorHandler?(error: Error, vm?: ViewModel, info?: string): void; // tslint:disable-line:completed-docs + errorHandler?(error: Error, vm?: ViewModel, info?: string): void; }; - mixin(hooks: { [key: string]: () => void }): void; // tslint:disable-line:completed-docs util?: { - warn(...input: any): void; // tslint:disable-line:completed-docs + warn(...input: any): void; }; + mixin(hooks: { [key: string]: () => void }): void; } /** Representation of Vue component internals */ interface ViewModel { [key: string]: any; + // eslint-disable-next-line @typescript-eslint/ban-types $root: object; $options: { [key: string]: any; @@ -40,11 +43,9 @@ interface ViewModel { __file?: string; $_sentryPerfHook?: boolean; }; - $once(hook: string, cb: () => void): void; // tslint:disable-line:completed-docs + $once(hook: string, cb: () => void): void; } -// tslint:enable:completed-docs - /** Vue Integration configuration */ interface IntegrationOptions { /** Vue instance to be used inside the integration */ @@ -130,12 +131,12 @@ export class Vue implements Integration { /** * @inheritDoc */ - public name: string = Vue.id; + public static id: string = 'Vue'; /** * @inheritDoc */ - public static id: string = 'Vue'; + public name: string = Vue.id; private readonly _options: IntegrationOptions; @@ -152,7 +153,8 @@ export class Vue implements Integration { */ public constructor(options: Partial) { this._options = { - Vue: getGlobalObject().Vue, // tslint:disable-line:no-unsafe-any + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + Vue: getGlobalObject().Vue, attachProps: true, logErrors: false, tracing: false, @@ -166,6 +168,22 @@ export class Vue implements Integration { }; } + /** + * @inheritDoc + */ + public setupOnce(_: (callback: EventProcessor) => void, getCurrentHub: () => Hub): void { + if (!this._options.Vue) { + logger.error('Vue integration is missing a Vue instance'); + return; + } + + this._attachErrorHandler(getCurrentHub); + + if (this._options.tracing) { + this._startTracing(getCurrentHub); + } + } + /** * Extract component name from the ViewModel */ @@ -207,7 +225,8 @@ export class Vue implements Integration { } /** Keep it as attribute function, to keep correct `this` binding inside the hooks callbacks */ - private readonly _applyTracingHooks = (vm: ViewModel, getCurrentHub: () => Hub) => { + // eslint-disable-next-line @typescript-eslint/typedef + private readonly _applyTracingHooks = (vm: ViewModel, getCurrentHub: () => Hub): void => { // Don't attach twice, just in case if (vm.$options.$_sentryPerfHook) { return; @@ -223,7 +242,7 @@ export class Vue implements Integration { // // Because of this, we start measuring inside the first event, // but finish it before it triggers, to skip the event emitter timing itself. - const rootHandler = (hook: Hook) => { + const rootHandler = (hook: Hook): void => { const now = timestampWithMs(); // On the first handler call (before), it'll be undefined, as `$once` will add it in the future. @@ -237,15 +256,13 @@ export class Vue implements Integration { // We do this whole dance with `TRACING_GETTER` to prevent `@sentry/apm` from becoming a peerDependency. // We also need to ask for the `.constructor`, as `pushActivity` and `popActivity` are static, not instance methods. - // tslint:disable-next-line: deprecation + /* eslint-disable @typescript-eslint/no-unsafe-member-access */ + // eslint-disable-next-line deprecation/deprecation const tracingIntegration = getCurrentHub().getIntegration(TRACING_GETTER); if (tracingIntegration) { - // tslint:disable-next-line:no-unsafe-any this._tracingActivity = (tracingIntegration as any).constructor.pushActivity('Vue Application Render'); - // tslint:disable-next-line:no-unsafe-any const transaction = (tracingIntegration as any).constructor.getTransaction(); if (transaction) { - // tslint:disable-next-line:no-unsafe-any this._rootSpan = transaction.startChild({ description: 'Application Render', op: 'Vue', @@ -261,11 +278,12 @@ export class Vue implements Integration { }); } } + /* eslint-enable @typescript-eslint/no-unsafe-member-access */ }); } }; - const childHandler = (hook: Hook, operation: Operation) => { + const childHandler = (hook: Hook, operation: Operation): void => { // Skip components that we don't want to track to minimize the noise and give a more granular control to the user const shouldTrack = Array.isArray(this._options.tracingOptions.trackComponents) ? this._options.tracingOptions.trackComponents.indexOf(name) > -1 @@ -333,10 +351,10 @@ export class Vue implements Integration { if (this._tracingActivity) { // We do this whole dance with `TRACING_GETTER` to prevent `@sentry/apm` from becoming a peerDependency. // We also need to ask for the `.constructor`, as `pushActivity` and `popActivity` are static, not instance methods. - // tslint:disable-next-line: deprecation + // eslint-disable-next-line deprecation/deprecation const tracingIntegration = getCurrentHub().getIntegration(TRACING_GETTER); if (tracingIntegration) { - // tslint:disable-next-line:no-unsafe-any + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access (tracingIntegration as any).constructor.popActivity(this._tracingActivity); } } @@ -354,7 +372,7 @@ export class Vue implements Integration { this._options.Vue.mixin({ beforeCreate(this: ViewModel): void { - // tslint:disable-next-line: deprecation + // eslint-disable-next-line deprecation/deprecation if (getCurrentHub().getIntegration(TRACING_GETTER) || getCurrentHub().getIntegration(BROWSER_TRACING_GETTER)) { // `this` points to currently rendered component applyTracingHooks(this, getCurrentHub); @@ -367,7 +385,8 @@ export class Vue implements Integration { /** Inject Sentry's handler into owns Vue's error handler */ private _attachErrorHandler(getCurrentHub: () => Hub): void { - const currentErrorHandler = this._options.Vue.config.errorHandler; // tslint:disable-line:no-unbound-method + // eslint-disable-next-line @typescript-eslint/unbound-method + const currentErrorHandler = this._options.Vue.config.errorHandler; this._options.Vue.config.errorHandler = (error: Error, vm?: ViewModel, info?: string): void => { const metadata: Metadata = {}; @@ -406,31 +425,14 @@ export class Vue implements Integration { if (this._options.Vue.util) { this._options.Vue.util.warn(`Error in ${info}: "${error.toString()}"`, vm); } - console.error(error); // tslint:disable-line:no-console + // eslint-disable-next-line no-console + console.error(error); } }; } - - /** - * @inheritDoc - */ - public setupOnce(_: (callback: EventProcessor) => void, getCurrentHub: () => Hub): void { - if (!this._options.Vue) { - logger.error('Vue integration is missing a Vue instance'); - return; - } - - this._attachErrorHandler(getCurrentHub); - - if (this._options.tracing) { - this._startTracing(getCurrentHub); - } - } } -// tslint:disable-next-line: completed-docs interface HubType extends Hub { - // tslint:disable-next-line: completed-docs getScope?(): Scope | undefined; } diff --git a/packages/integrations/test/extraerrordata.test.ts b/packages/integrations/test/extraerrordata.test.ts index b90e3e654503..2237540249dd 100644 --- a/packages/integrations/test/extraerrordata.test.ts +++ b/packages/integrations/test/extraerrordata.test.ts @@ -1,4 +1,4 @@ -import { ExtendedError, SentryEvent } from '@sentry/types'; +import { Event as SentryEvent, ExtendedError } from '@sentry/types'; import { ExtraErrorData } from '../src/extraerrordata'; @@ -44,6 +44,7 @@ describe('ExtraErrorData()', () => { it('should not remove previous data existing in extra field', () => { event = { + // @ts-ignore Allow contexts on event contexts: { foo: 42, }, @@ -81,6 +82,7 @@ describe('ExtraErrorData()', () => { it('should return event if there is no originalException', () => { const enhancedEvent = extraErrorData.enhanceEventWithErrorData(event, { + // @ts-ignore Allow event to have extra properties notOriginalException: 'fooled you', }); diff --git a/packages/integrations/test/tslint.json b/packages/integrations/test/tslint.json deleted file mode 100644 index 8917acb8f870..000000000000 --- a/packages/integrations/test/tslint.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": ["../tslint.json"], - "rules": { - "no-non-null-assertion": false, - "no-unsafe-any": false - } -} diff --git a/packages/integrations/tslint.json b/packages/integrations/tslint.json deleted file mode 100644 index a50f2617f7ba..000000000000 --- a/packages/integrations/tslint.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "extends": "@sentry/typescript/tslint", - "rules": { - "no-console": true - } -} diff --git a/packages/node/.eslintrc.js b/packages/node/.eslintrc.js new file mode 100644 index 000000000000..f2892f1e4888 --- /dev/null +++ b/packages/node/.eslintrc.js @@ -0,0 +1,38 @@ +module.exports = { + root: true, + env: { + es6: true, + node: true, + }, + parserOptions: { + ecmaVersion: 2018, + }, + extends: ['../../.eslintrc.js'], + ignorePatterns: ['build/**/*', 'dist/**/*', 'esm/**/*', 'examples/**/*', 'scripts/**/*', 'test/manual/**/*'], + overrides: [ + { + files: ['*.ts', '*.tsx', '*.d.ts'], + parserOptions: { + project: './tsconfig.json', + }, + }, + { + files: ['test/**/*'], + rules: { + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/no-non-null-assertion': 'off', + }, + }, + { + files: ['test/**/*.js'], + rules: { + 'import/order': 'off', + }, + }, + ], + rules: { + 'prefer-rest-params': 'off', + '@typescript-eslint/no-var-requires': 'off', + 'sentry-sdks/no-async-await': 'off', + }, +}; diff --git a/packages/node/package.json b/packages/node/package.json index 0eb85fe9c078..3f8174be54cc 100644 --- a/packages/node/package.json +++ b/packages/node/package.json @@ -37,7 +37,6 @@ "prettier": "^1.17.0", "prettier-check": "^2.0.0", "rimraf": "^2.6.3", - "tslint": "5.16.0", "typescript": "3.4.5" }, "scripts": { @@ -49,13 +48,12 @@ "build:watch:esm": "tsc -p tsconfig.esm.json -w --preserveWatchOutput", "clean": "rimraf dist coverage", "link:yarn": "yarn link", - "lint": "run-s lint:prettier lint:tslint", + "lint": "run-s lint:prettier lint:eslint", "lint:prettier": "prettier-check \"{src,test}/**/*.ts\"", - "lint:tslint": "tslint -t stylish -p .", - "lint:tslint:json": "tslint --format json -p . | tee lint-results.json", - "fix": "run-s fix:tslint fix:prettier", + "lint:eslint": "eslint . --cache --cache-location '../../eslintcache/' --format stylish", + "fix": "run-s fix:eslint fix:prettier", "fix:prettier": "prettier --write \"{src,test}/**/*.ts\"", - "fix:tslint": "tslint --fix -t stylish -p .", + "fix:eslint": "eslint . --format stylish --fix", "test": "run-s test:jest test:express test:webpack", "test:jest": "jest", "test:watch": "jest --watch", diff --git a/packages/node/src/backend.ts b/packages/node/src/backend.ts index b99cad60fe47..407d6a443053 100644 --- a/packages/node/src/backend.ts +++ b/packages/node/src/backend.ts @@ -19,9 +19,6 @@ import { HTTPSTransport, HTTPTransport } from './transports'; * @see NodeClient for more information. */ export interface NodeOptions extends Options { - /** Callback that is executed when a fatal global error occurs. */ - onFatalError?(error: Error): void; - /** Sets an optional server name (device name) */ serverName?: string; @@ -39,6 +36,9 @@ export interface NodeOptions extends Options { /** Sets the number of context lines for each frame when loading a file. */ frameContextLines?: number; + + /** Callback that is executed when a fatal global error occurs. */ + onFatalError?(error: Error): void; } /** @@ -49,35 +49,9 @@ export class NodeBackend extends BaseBackend { /** * @inheritDoc */ - protected _setupTransport(): Transport { - if (!this._options.dsn) { - // We return the noop transport here in case there is no Dsn. - return super._setupTransport(); - } - - const dsn = new Dsn(this._options.dsn); - - const transportOptions: TransportOptions = { - ...this._options.transportOptions, - ...(this._options.httpProxy && { httpProxy: this._options.httpProxy }), - ...(this._options.httpsProxy && { httpsProxy: this._options.httpsProxy }), - ...(this._options.caCerts && { caCerts: this._options.caCerts }), - dsn: this._options.dsn, - }; - - if (this._options.transport) { - return new this._options.transport(transportOptions); - } - if (dsn.protocol === 'http') { - return new HTTPTransport(transportOptions); - } - return new HTTPSTransport(transportOptions); - } - - /** - * @inheritDoc - */ + // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types public eventFromException(exception: any, hint?: EventHint): PromiseLike { + // eslint-disable-next-line @typescript-eslint/no-explicit-any let ex: any = exception; const mechanism: Mechanism = { handled: true, @@ -91,7 +65,7 @@ export class NodeBackend extends BaseBackend { const message = `Non-Error exception captured with keys: ${extractExceptionKeysForMessage(exception)}`; getCurrentHub().configureScope(scope => { - scope.setExtra('__serialized__', normalizeToSize(exception as {})); + scope.setExtra('__serialized__', normalizeToSize(exception as Record)); }); ex = (hint && hint.syntheticException) || new Error(message); @@ -147,4 +121,32 @@ export class NodeBackend extends BaseBackend { } }); } + + /** + * @inheritDoc + */ + protected _setupTransport(): Transport { + if (!this._options.dsn) { + // We return the noop transport here in case there is no Dsn. + return super._setupTransport(); + } + + const dsn = new Dsn(this._options.dsn); + + const transportOptions: TransportOptions = { + ...this._options.transportOptions, + ...(this._options.httpProxy && { httpProxy: this._options.httpProxy }), + ...(this._options.httpsProxy && { httpsProxy: this._options.httpsProxy }), + ...(this._options.caCerts && { caCerts: this._options.caCerts }), + dsn: this._options.dsn, + }; + + if (this._options.transport) { + return new this._options.transport(transportOptions); + } + if (dsn.protocol === 'http') { + return new HTTPTransport(transportOptions); + } + return new HTTPSTransport(transportOptions); + } } diff --git a/packages/node/src/handlers.ts b/packages/node/src/handlers.ts index 160db8915d09..e1639262a0fc 100644 --- a/packages/node/src/handlers.ts +++ b/packages/node/src/handlers.ts @@ -1,3 +1,5 @@ +/* eslint-disable max-lines */ +/* eslint-disable @typescript-eslint/no-explicit-any */ import { Span } from '@sentry/apm'; import { captureException, getCurrentHub, startTransaction, withScope } from '@sentry/core'; import { Event } from '@sentry/types'; @@ -62,6 +64,7 @@ export function tracingHandler(): ( // We also set __sentry_transaction on the response so people can grab the transaction there to add // spans to it later. + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access (res as any).__sentry_transaction = transaction; res.once('finish', () => { @@ -253,7 +256,7 @@ export function parseRequest( }, options?: ParseRequestOptions, ): Event { - // tslint:disable-next-line:no-parameter-reassignment + // eslint-disable-next-line no-param-reassign options = { ip: false, request: true, @@ -334,7 +337,7 @@ export function requestHandler( next: (error?: any) => void, ): void { if (options && options.flushTimeout && options.flushTimeout > 0) { - // tslint:disable-next-line: no-unbound-method + // eslint-disable-next-line @typescript-eslint/unbound-method const _end = res.end; res.end = function(chunk?: any | (() => void), encoding?: string | (() => void), cb?: () => void): void { flush(options.flushTimeout) @@ -403,16 +406,19 @@ export function errorHandler(options?: { res: http.ServerResponse, next: (error: MiddlewareError) => void, ): void { + // eslint-disable-next-line @typescript-eslint/unbound-method const shouldHandleError = (options && options.shouldHandleError) || defaultShouldHandleError; if (shouldHandleError(error)) { withScope(_scope => { // For some reason we need to set the transaction on the scope again + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access const transaction = (res as any).__sentry_transaction as Span; if (transaction && _scope.getSpan() === undefined) { _scope.setSpan(transaction); } const eventId = captureException(error); + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access (res as any).sentry = eventId; next(error); }); @@ -428,6 +434,7 @@ export function errorHandler(options?: { * @hidden */ export function logAndExitProcess(error: Error): void { + // eslint-disable-next-line no-console console.error(error && error.stack ? error.stack : error); const client = getCurrentHub().getClient(); diff --git a/packages/node/src/index.ts b/packages/node/src/index.ts index 88e6011bb4d3..b8678705fb66 100644 --- a/packages/node/src/index.ts +++ b/packages/node/src/index.ts @@ -63,7 +63,7 @@ const carrier = getMainCarrier(); if (carrier.__SENTRY__) { carrier.__SENTRY__.extensions = carrier.__SENTRY__.extensions || {}; if (!carrier.__SENTRY__.extensions.domain) { - // @ts-ignore + // @ts-ignore domain is missing from extensions Type carrier.__SENTRY__.extensions.domain = domain; } } diff --git a/packages/node/src/integrations/console.ts b/packages/node/src/integrations/console.ts index 7465d93df713..4676fbb4747f 100644 --- a/packages/node/src/integrations/console.ts +++ b/packages/node/src/integrations/console.ts @@ -8,11 +8,12 @@ export class Console implements Integration { /** * @inheritDoc */ - public name: string = Console.id; + public static id: string = 'Console'; + /** * @inheritDoc */ - public static id: string = 'Console'; + public name: string = Console.id; /** * @inheritDoc diff --git a/packages/node/src/integrations/http.ts b/packages/node/src/integrations/http.ts index 19b051843813..ea7de94c422d 100644 --- a/packages/node/src/integrations/http.ts +++ b/packages/node/src/integrations/http.ts @@ -11,11 +11,12 @@ export class Http implements Integration { /** * @inheritDoc */ - public name: string = Http.id; + public static id: string = 'Http'; + /** * @inheritDoc */ - public static id: string = 'Http'; + public name: string = Http.id; /** * @inheritDoc @@ -92,6 +93,7 @@ function createHandlerWrapper( } } + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access return originalHandler .apply(this, arguments) .once('response', function(this: http.IncomingMessage, res: http.ServerResponse): void { diff --git a/packages/node/src/integrations/linkederrors.ts b/packages/node/src/integrations/linkederrors.ts index 8c8986d91781..301b0f15f507 100644 --- a/packages/node/src/integrations/linkederrors.ts +++ b/packages/node/src/integrations/linkederrors.ts @@ -12,12 +12,12 @@ export class LinkedErrors implements Integration { /** * @inheritDoc */ - public readonly name: string = LinkedErrors.id; + public static id: string = 'LinkedErrors'; /** * @inheritDoc */ - public static id: string = 'LinkedErrors'; + public readonly name: string = LinkedErrors.id; /** * @inheritDoc diff --git a/packages/node/src/integrations/modules.ts b/packages/node/src/integrations/modules.ts index 0ed282e5371d..0b15ef1532cf 100644 --- a/packages/node/src/integrations/modules.ts +++ b/packages/node/src/integrations/modules.ts @@ -9,7 +9,7 @@ function collectModules(): { [name: string]: string; } { const mainPaths = (require.main && require.main.paths) || []; - const paths = require.cache ? Object.keys(require.cache as {}) : []; + const paths = require.cache ? Object.keys(require.cache as Record) : []; const infos: { [name: string]: string; } = {}; @@ -61,11 +61,12 @@ export class Modules implements Integration { /** * @inheritDoc */ - public name: string = Modules.id; + public static id: string = 'Modules'; + /** * @inheritDoc */ - public static id: string = 'Modules'; + public name: string = Modules.id; /** * @inheritDoc @@ -85,7 +86,6 @@ export class Modules implements Integration { /** Fetches the list of modules and the versions loaded by the entry file for your node.js app. */ private _getModules(): { [key: string]: string } { if (!moduleCache) { - // tslint:disable-next-line:no-unsafe-any moduleCache = collectModules(); } return moduleCache; diff --git a/packages/node/src/integrations/onuncaughtexception.ts b/packages/node/src/integrations/onuncaughtexception.ts index d37296b62566..49808e458e8b 100644 --- a/packages/node/src/integrations/onuncaughtexception.ts +++ b/packages/node/src/integrations/onuncaughtexception.ts @@ -10,11 +10,12 @@ export class OnUncaughtException implements Integration { /** * @inheritDoc */ - public name: string = OnUncaughtException.id; + public static id: string = 'OnUncaughtException'; + /** * @inheritDoc */ - public static id: string = 'OnUncaughtException'; + public name: string = OnUncaughtException.id; /** * @inheritDoc @@ -58,8 +59,10 @@ export class OnUncaughtException implements Integration { const client = getCurrentHub().getClient(); if (this._options.onFatalError) { + // eslint-disable-next-line @typescript-eslint/unbound-method onFatalError = this._options.onFatalError; } else if (client && client.getOptions().onFatalError) { + // eslint-disable-next-line @typescript-eslint/unbound-method onFatalError = client.getOptions().onFatalError as onFatalErrorHandlerType; } diff --git a/packages/node/src/integrations/onunhandledrejection.ts b/packages/node/src/integrations/onunhandledrejection.ts index 5b488b5f7858..b4e8858f9a74 100644 --- a/packages/node/src/integrations/onunhandledrejection.ts +++ b/packages/node/src/integrations/onunhandledrejection.ts @@ -11,11 +11,12 @@ export class OnUnhandledRejection implements Integration { /** * @inheritDoc */ - public name: string = OnUnhandledRejection.id; + public static id: string = 'OnUnhandledRejection'; + /** * @inheritDoc */ - public static id: string = 'OnUnhandledRejection'; + public name: string = OnUnhandledRejection.id; /** * @inheritDoc @@ -42,6 +43,7 @@ export class OnUnhandledRejection implements Integration { * @param reason string * @param promise promise */ + // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any public sendUnhandledPromise(reason: any, promise: any): void { const hub = getCurrentHub(); @@ -50,6 +52,7 @@ export class OnUnhandledRejection implements Integration { return; } + /* eslint-disable @typescript-eslint/no-unsafe-member-access */ const context = (promise.domain && promise.domain.sentryContext) || {}; hub.withScope((scope: Scope) => { @@ -68,6 +71,7 @@ export class OnUnhandledRejection implements Integration { hub.captureException(reason, { originalException: promise }); }); + /* eslint-disable @typescript-eslint/no-unsafe-member-access */ this._handleRejection(reason); } @@ -75,6 +79,7 @@ export class OnUnhandledRejection implements Integration { /** * Handler for `mode` option */ + // eslint-disable-next-line @typescript-eslint/no-explicit-any private _handleRejection(reason: any): void { // https://github.com/nodejs/node/blob/7cf6f9e964aa00772965391c23acda6d71972a9a/lib/internal/process/promises.js#L234-L240 const rejectionWarning = @@ -83,9 +88,11 @@ export class OnUnhandledRejection implements Integration { 'or by rejecting a promise which was not handled with .catch().' + ' The promise rejected with the reason:'; + /* eslint-disable no-console */ if (this._options.mode === 'warn') { consoleSandbox(() => { console.warn(rejectionWarning); + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access console.error(reason && reason.stack ? reason.stack : reason); }); } else if (this._options.mode === 'strict') { @@ -94,5 +101,6 @@ export class OnUnhandledRejection implements Integration { }); logAndExitProcess(reason); } + /* eslint-enable no-console */ } } diff --git a/packages/node/src/integrations/tslint.json b/packages/node/src/integrations/tslint.json deleted file mode 100644 index 20fe5d9b2b59..000000000000 --- a/packages/node/src/integrations/tslint.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": ["../../tslint.json"], - "rules": { - "no-unsafe-any": false, - "only-arrow-functions": false - } -} diff --git a/packages/node/src/parsers.ts b/packages/node/src/parsers.ts index 8f28b6e0e736..1ce5502644fe 100644 --- a/packages/node/src/parsers.ts +++ b/packages/node/src/parsers.ts @@ -6,7 +6,6 @@ import { LRUMap } from 'lru_map'; import { NodeOptions } from './backend'; import * as stacktrace from './stacktrace'; -// tslint:disable-next-line:no-unsafe-any const DEFAULT_LINES_OF_CONTEXT: number = 7; const FILE_CONTENT_CACHE = new LRUMap(100); @@ -36,12 +35,14 @@ const mainModule: string = `${(require.main && require.main.filename && dirname( /** JSDoc */ function getModule(filename: string, base?: string): string { if (!base) { - base = mainModule; // tslint:disable-line:no-parameter-reassignment + // eslint-disable-next-line no-param-reassign + base = mainModule; } // It's specifically a module const file = basename(filename, '.js'); - filename = dirname(filename); // tslint:disable-line:no-parameter-reassignment + // eslint-disable-next-line no-param-reassign + filename = dirname(filename); let n = filename.lastIndexOf('/node_modules/'); if (n > -1) { // /node_modules/ is 14 chars @@ -81,7 +82,7 @@ function readSourceFiles(filenames: string[]): PromiseLike<{ [key: string]: stri } = {}; let count = 0; - // tslint:disable-next-line:prefer-for-of + // eslint-disable-next-line @typescript-eslint/prefer-for-of for (let i = 0; i < filenames.length; i++) { const filename = filenames[i]; @@ -93,6 +94,7 @@ function readSourceFiles(filenames: string[]): PromiseLike<{ [key: string]: stri if (cache !== null) { sourceFiles[filename] = cache; } + // eslint-disable-next-line no-plusplus 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. @@ -109,6 +111,7 @@ function readSourceFiles(filenames: string[]): PromiseLike<{ [key: string]: stri // 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); + // eslint-disable-next-line no-plusplus count++; if (count === filenames.length) { resolve(sourceFiles); diff --git a/packages/node/src/sdk.ts b/packages/node/src/sdk.ts index d4421a4553fb..14b85b293aa2 100644 --- a/packages/node/src/sdk.ts +++ b/packages/node/src/sdk.ts @@ -101,6 +101,7 @@ export function init(options: NodeOptions = {}): void { options.environment = process.env.SENTRY_ENVIRONMENT; } + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any if ((domain as any).active) { setHubOnCarrier(getMainCarrier(), getCurrentHub()); } diff --git a/packages/node/src/stacktrace.ts b/packages/node/src/stacktrace.ts index a325d9d9e6c9..1aa35fa6a6e1 100644 --- a/packages/node/src/stacktrace.ts +++ b/packages/node/src/stacktrace.ts @@ -59,6 +59,7 @@ export function parse(err: Error): StackFrame[] { functionName = lineMatch[1]; let methodStart = functionName.lastIndexOf('.'); if (functionName[methodStart - 1] === '.') { + // eslint-disable-next-line no-plusplus methodStart--; } if (methodStart > 0) { diff --git a/packages/node/src/transports/base.ts b/packages/node/src/transports/base.ts index 95f13b6b1a50..3513c8c864b8 100644 --- a/packages/node/src/transports/base.ts +++ b/packages/node/src/transports/base.ts @@ -36,15 +36,15 @@ export interface HTTPRequest { /** Base Transport class implementation */ export abstract class BaseTransport implements Transport { - /** API object */ - protected _api: API; - /** The Agent used for corresponding transport */ public module?: HTTPRequest; /** The Agent used for corresponding transport */ public client?: http.Agent | https.Agent; + /** API object */ + protected _api: API; + /** A simple buffer holding all requests. */ protected readonly _buffer: PromiseBuffer = new PromiseBuffer(30); @@ -56,6 +56,20 @@ export abstract class BaseTransport implements Transport { this._api = new API(options.dsn); } + /** + * @inheritDoc + */ + public sendEvent(_: Event): PromiseLike { + throw new SentryError('Transport Class has to implement `sendEvent` method.'); + } + + /** + * @inheritDoc + */ + public close(timeout?: number): PromiseLike { + return this._buffer.drain(timeout); + } + /** Returns a build request option object used by request */ protected _getRequestOptions(uri: url.URL): http.RequestOptions | https.RequestOptions { const headers = { @@ -137,18 +151,4 @@ export abstract class BaseTransport implements Transport { }), ); } - - /** - * @inheritDoc - */ - public sendEvent(_: Event): PromiseLike { - throw new SentryError('Transport Class has to implement `sendEvent` method.'); - } - - /** - * @inheritDoc - */ - public close(timeout?: number): PromiseLike { - return this._buffer.drain(timeout); - } } diff --git a/packages/node/src/transports/http.ts b/packages/node/src/transports/http.ts index 1a5a6f3ca2ef..6f1192f095bf 100644 --- a/packages/node/src/transports/http.ts +++ b/packages/node/src/transports/http.ts @@ -12,7 +12,7 @@ export class HTTPTransport extends BaseTransport { const proxy = options.httpProxy || process.env.http_proxy; this.module = http; this.client = proxy - ? (new (require('https-proxy-agent'))(proxy) as http.Agent) // tslint:disable-line:no-unsafe-any + ? (new (require('https-proxy-agent'))(proxy) as http.Agent) : new http.Agent({ keepAlive: false, maxSockets: 30, timeout: 2000 }); } diff --git a/packages/node/src/transports/https.ts b/packages/node/src/transports/https.ts index 56829d76a108..6428697b880f 100644 --- a/packages/node/src/transports/https.ts +++ b/packages/node/src/transports/https.ts @@ -12,7 +12,7 @@ export class HTTPSTransport extends BaseTransport { const proxy = options.httpsProxy || options.httpProxy || process.env.https_proxy || process.env.http_proxy; this.module = https; this.client = proxy - ? (new (require('https-proxy-agent'))(proxy) as https.Agent) // tslint:disable-line:no-unsafe-any + ? (new (require('https-proxy-agent'))(proxy) as https.Agent) : new https.Agent({ keepAlive: false, maxSockets: 30, timeout: 2000 }); } diff --git a/packages/node/test/domain.test.ts b/packages/node/test/domain.test.ts index 9bdbf30c751a..2d70fe1275e2 100644 --- a/packages/node/test/domain.test.ts +++ b/packages/node/test/domain.test.ts @@ -4,11 +4,12 @@ import * as domain from 'domain'; // We need this import here to patch domain on the global object import * as Sentry from '../src'; -// tslint:disable-next-line: no-console +// eslint-disable-next-line no-console console.log(Sentry.SDK_NAME); describe('domains', () => { test('without domain', () => { + // @ts-ignore property active does not exist on domain expect(domain.active).toBeFalsy(); const hub = getCurrentHub(); expect(hub).toEqual(new Hub()); @@ -43,7 +44,7 @@ describe('domains', () => { d1.run(() => { const hub = getCurrentHub(); - hub.getStack().push({ client: 'process' }); + hub.getStack().push({ client: 'process' } as any); expect(hub.getStack()[1]).toEqual({ client: 'process' }); // Just in case so we don't have to worry which one finishes first // (although it always should be d2) @@ -57,7 +58,7 @@ describe('domains', () => { d2.run(() => { const hub = getCurrentHub(); - hub.getStack().push({ client: 'local' }); + hub.getStack().push({ client: 'local' } as any); expect(hub.getStack()[1]).toEqual({ client: 'local' }); setTimeout(() => { d2done = true; diff --git a/packages/node/test/handlers.test.ts b/packages/node/test/handlers.test.ts index 84f3b5763582..b0b66af407b6 100644 --- a/packages/node/test/handlers.test.ts +++ b/packages/node/test/handlers.test.ts @@ -73,7 +73,7 @@ describe('parseRequest', () => { {}, { ...mockReq, - // @ts-ignore + // @ts-ignore user is not assignable to object user: 'wat', }, ); diff --git a/packages/node/test/index.test.ts b/packages/node/test/index.test.ts index 6a3e2e2a1244..6c13800250d8 100644 --- a/packages/node/test/index.test.ts +++ b/packages/node/test/index.test.ts @@ -16,6 +16,7 @@ import { NodeBackend } from '../src/backend'; const dsn = 'https://53039209a22b4ec1bcc296a3c9fdecd6@sentry.io/4291'; +// eslint-disable-next-line no-var declare var global: any; describe('SentryNode', () => { @@ -61,7 +62,7 @@ describe('SentryNode', () => { }); describe('breadcrumbs', () => { - let s: jest.Mock<(event: Event) => void>; + let s: jest.SpyInstance; beforeEach(() => { s = jest.spyOn(NodeBackend.prototype, 'sendEvent').mockImplementation(async () => Promise.resolve({ code: 200 })); @@ -90,7 +91,7 @@ describe('SentryNode', () => { }); describe('capture', () => { - let s: jest.Mock<(event: Event) => void>; + let s: jest.SpyInstance; beforeEach(() => { s = jest.spyOn(NodeBackend.prototype, 'sendEvent').mockImplementation(async () => Promise.resolve({ code: 200 })); @@ -227,7 +228,8 @@ describe('SentryNode', () => { }), ); try { - // @ts-ignore + // @ts-ignore allow function declarations in strict mode + // eslint-disable-next-line no-inner-declarations function testy(): void { throw new Error('test'); } diff --git a/packages/node/test/integrations/linkederrors.test.ts b/packages/node/test/integrations/linkederrors.test.ts index 52aaf491bd11..7dcaf077e4c6 100644 --- a/packages/node/test/integrations/linkederrors.test.ts +++ b/packages/node/test/integrations/linkederrors.test.ts @@ -57,7 +57,7 @@ describe('LinkedErrors', () => { ._handler(event, { originalException: one, }) - .then(_ => { + .then((_: any) => { expect(spy.mock.calls.length).toEqual(1); }), ); diff --git a/packages/node/test/parsers.test.ts b/packages/node/test/parsers.test.ts index eb1952b6852f..e09a6607c51f 100644 --- a/packages/node/test/parsers.test.ts +++ b/packages/node/test/parsers.test.ts @@ -2,7 +2,6 @@ import * as fs from 'fs'; import * as Parsers from '../src/parsers'; import * as stacktrace from '../src/stacktrace'; - import { getError } from './helper/error'; describe('parsers.ts', () => { diff --git a/packages/node/test/stacktrace.test.ts b/packages/node/test/stacktrace.test.ts index 87f8110e36f8..967e69e098b4 100644 --- a/packages/node/test/stacktrace.test.ts +++ b/packages/node/test/stacktrace.test.ts @@ -12,9 +12,6 @@ import * as stacktrace from '../src/stacktrace'; -// tslint:disable:typedef -// tslint:disable:prefer-template - function testBasic() { return new Error('something went wrong'); } diff --git a/packages/node/test/tslint.json b/packages/node/test/tslint.json deleted file mode 100644 index e3e63638823f..000000000000 --- a/packages/node/test/tslint.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "extends": ["../tslint.json"], - "rules": { - "completed-docs": false, - "no-non-null-assertion": false, - "no-implicit-dependencies": [true, "dev"], - "no-unused-expression": false, - "no-unsafe-any": false - } -} diff --git a/packages/node/tslint.json b/packages/node/tslint.json deleted file mode 100644 index 3016a27a85cc..000000000000 --- a/packages/node/tslint.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": "@sentry/typescript/tslint" -} diff --git a/packages/react/.eslintrc.js b/packages/react/.eslintrc.js new file mode 100644 index 000000000000..4fe0b7fa24fd --- /dev/null +++ b/packages/react/.eslintrc.js @@ -0,0 +1,37 @@ +module.exports = { + root: true, + env: { + es6: true, + browser: true, + }, + parserOptions: { + ecmaVersion: 2018, + jsx: true, + }, + extends: ['../../.eslintrc.js', 'plugin:react/recommended', 'plugin:react-hooks/recommended'], + ignorePatterns: ['build/**/*', 'dist/**/*', 'esm/**/*', 'examples/**/*', 'scripts/**/*'], + overrides: [ + { + files: ['*.ts', '*.tsx', '*.d.ts'], + parserOptions: { + project: './tsconfig.json', + }, + }, + { + files: ['*.tsx'], + rules: { + 'jsdoc/require-jsdoc': 'off', + }, + }, + { + files: ['test/**/*'], + rules: { + '@typescript-eslint/no-explicit-any': 'off', + }, + }, + ], + rules: { + 'react/prop-types': 'off', + '@typescript-eslint/no-unsafe-member-access': 'off', + }, +}; diff --git a/packages/react/package.json b/packages/react/package.json index 836c66f07af2..939509df1672 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -37,6 +37,8 @@ "@types/react-router-3": "npm:@types/react-router@3.0.20", "@types/react-router-4": "npm:@types/react-router@5.0.0", "@types/react-router-5": "npm:@types/react-router@5.0.0", + "eslint-plugin-react": "^7.20.5", + "eslint-plugin-react-hooks": "^4.0.8", "history-4": "npm:history@4.6.0", "history-5": "npm:history@4.9.0", "jest": "^24.7.1", @@ -52,9 +54,6 @@ "react-test-renderer": "^16.13.1", "redux": "^4.0.5", "rimraf": "^2.6.3", - "tslint": "5.16.0", - "tslint-react": "^5.0.0", - "tslint-react-hooks": "^2.2.2", "typescript": "3.4.5" }, "scripts": { @@ -66,13 +65,12 @@ "build:watch:esm": "tsc -p tsconfig.esm.json -w --preserveWatchOutput", "clean": "rimraf dist coverage build esm", "link:yarn": "yarn link", - "lint": "run-s lint:prettier lint:tslint", - "lint:prettier": "prettier-check \"{src,test}/**/*.{ts,tsx}\"", - "lint:tslint": "tslint -t stylish -p .", - "lint:tslint:json": "tslint --format json -p . | tee lint-results.json", - "fix": "run-s fix:tslint fix:prettier", - "fix:prettier": "prettier --write \"{src,test}/**/*.{ts,tsx}\"", - "fix:tslint": "tslint --fix -t stylish -p .", + "lint": "run-s lint:prettier lint:eslint", + "lint:prettier": "prettier-check \"{src,test}/**/*.ts\"", + "lint:eslint": "eslint . --cache --cache-location '../../eslintcache/' --format stylish", + "fix": "run-s fix:eslint fix:prettier", + "fix:prettier": "prettier --write \"{src,test}/**/*.ts\"", + "fix:eslint": "eslint . --format stylish --fix", "test": "jest", "test:watch": "jest --watch" }, diff --git a/packages/react/src/errorboundary.tsx b/packages/react/src/errorboundary.tsx index 4c43bb1d4233..99d5cd8fe795 100644 --- a/packages/react/src/errorboundary.tsx +++ b/packages/react/src/errorboundary.tsx @@ -7,8 +7,8 @@ export const UNKNOWN_COMPONENT = 'unknown'; export type FallbackRender = (fallback: { error: Error | null; componentStack: string | null; - resetError(): void; eventId: string | null; + resetError(): void; }) => React.ReactNode; export type ErrorBoundaryProps = { @@ -19,7 +19,6 @@ export type ErrorBoundaryProps = { * No-op if {@link showDialog} is false. */ dialogOptions?: ReportDialogOptions; - // tslint:disable no-null-undefined-union /** * A fallback component that gets rendered when the error boundary encounters an error. * @@ -29,7 +28,6 @@ export type ErrorBoundaryProps = { * */ fallback?: React.ReactNode | FallbackRender; - // tslint:enable no-null-undefined-union /** Called with the error boundary encounters an error */ onError?(error: Error, componentStack: string, eventId: string): void; /** Called on componentDidMount() */ @@ -97,7 +95,7 @@ class ErrorBoundary extends React.Component { + public resetErrorBoundary: () => void = () => { const { onReset } = this.props; const { error, componentStack, eventId } = this.state; if (onReset) { @@ -126,7 +124,7 @@ class ErrorBoundary extends React.Component( +function withErrorBoundary

>( WrappedComponent: React.ComponentType

, errorBoundaryOptions: ErrorBoundaryProps, ): React.FC

{ diff --git a/packages/react/src/index.ts b/packages/react/src/index.ts index 7012eed355e1..57a37862d85d 100644 --- a/packages/react/src/index.ts +++ b/packages/react/src/index.ts @@ -1,5 +1,10 @@ import { addGlobalEventProcessor, SDK_VERSION } from '@sentry/browser'; +/** + * A global side effect that makes sure Sentry events that user + * `@sentry/react` will correctly have Sentry events associated + * with it. + */ function createReactEventProcessor(): void { if (addGlobalEventProcessor) { addGlobalEventProcessor(event => { diff --git a/packages/react/src/profiler.tsx b/packages/react/src/profiler.tsx index d88b1c463fde..238eaf46ba26 100644 --- a/packages/react/src/profiler.tsx +++ b/packages/react/src/profiler.tsx @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ import { getCurrentHub, Hub } from '@sentry/browser'; import { Integration, IntegrationClass, Span, Transaction } from '@sentry/types'; import { timestampWithMs } from '@sentry/utils'; @@ -12,7 +13,7 @@ const TRACING_GETTER = ({ let globalTracingIntegration: Integration | null = null; /** @deprecated remove when @sentry/apm no longer used */ -const getTracingIntegration = () => { +const getTracingIntegration = (): Integration | null => { if (globalTracingIntegration) { return globalTracingIntegration; } @@ -32,7 +33,6 @@ function pushActivity(name: string, op: string): number | null { return null; } - // tslint:disable-next-line:no-unsafe-any return (globalTracingIntegration as any).constructor.pushActivity(name, { description: `<${name}>`, op: `react.${op}`, @@ -50,7 +50,6 @@ function popActivity(activity: number | null): void { return; } - // tslint:disable-next-line:no-unsafe-any (globalTracingIntegration as any).constructor.popActivity(activity); } @@ -65,7 +64,6 @@ function getActivitySpan(activity: number | null): Span | undefined { return undefined; } - // tslint:disable-next-line:no-unsafe-any return (globalTracingIntegration as any).constructor.getActivitySpan(activity) as Span | undefined; } @@ -80,7 +78,7 @@ export type ProfilerProps = { // If component updates should be displayed as spans. True by default. includeUpdates?: boolean; // props given to component being profiled. - updateProps: { [key: string]: any }; + updateProps: { [key: string]: unknown }; }; /** @@ -93,6 +91,7 @@ class Profiler extends React.Component { // The span of the mount activity private _mountSpan: Span | undefined = undefined; + // eslint-disable-next-line @typescript-eslint/member-ordering public static defaultProps: Partial = { disabled: false, includeRender: true, @@ -108,9 +107,9 @@ class Profiler extends React.Component { } // If they are using @sentry/apm, we need to push/pop activities - // tslint:disable-next-line: deprecation + // eslint-disable-next-line deprecation/deprecation if (getTracingIntegration()) { - // tslint:disable-next-line: deprecation + // eslint-disable-next-line deprecation/deprecation this._mountActivity = pushActivity(name, 'mount'); } else { const activeTransaction = getActiveTransaction(); @@ -128,9 +127,9 @@ class Profiler extends React.Component { if (this._mountSpan) { this._mountSpan.finish(); } else { - // tslint:disable-next-line: deprecation + // eslint-disable-next-line deprecation/deprecation this._mountSpan = getActivitySpan(this._mountActivity); - // tslint:disable-next-line: deprecation + // eslint-disable-next-line deprecation/deprecation popActivity(this._mountActivity); this._mountActivity = null; } @@ -191,7 +190,7 @@ class Profiler extends React.Component { * @param WrappedComponent component that is wrapped by Profiler * @param options the {@link ProfilerProps} you can pass into the Profiler */ -function withProfiler

( +function withProfiler

>( WrappedComponent: React.ComponentType

, // We do not want to have `updateProps` given in options, it is instead filled through the HOC. options?: Pick, Exclude>, @@ -248,7 +247,7 @@ function useProfiler( mountSpan.finish(); } - return () => { + return (): void => { if (mountSpan && options.hasRenderSpan) { mountSpan.startChild({ description: `<${name}>`, @@ -258,6 +257,8 @@ function useProfiler( }); } }; + // We only want this to run once. + // eslint-disable-next-line react-hooks/exhaustive-deps }, []); } diff --git a/packages/react/src/reactrouter.tsx b/packages/react/src/reactrouter.tsx index e3d04f14137b..10deafc6d5a2 100644 --- a/packages/react/src/reactrouter.tsx +++ b/packages/react/src/reactrouter.tsx @@ -1,9 +1,13 @@ import { Transaction } from '@sentry/types'; import { getGlobalObject } from '@sentry/utils'; +import hoistNonReactStatics from 'hoist-non-react-statics'; import * as React from 'react'; import { Action, Location, ReactRouterInstrumentation } from './types'; +// We need to disable eslint no-explict-any because any is required for the +// react-router typings. +/* eslint-disable @typescript-eslint/no-explicit-any */ type Match = { path: string; url: string; params: Record; isExact: boolean }; export type RouterHistory = { @@ -12,14 +16,26 @@ export type RouterHistory = { } & Record; export type RouteConfig = { + [propName: string]: any; path?: string | string[]; exact?: boolean; component?: JSX.Element; routes?: RouteConfig[]; - [propName: string]: any; }; +interface RouteProps { + location?: Location; + component?: React.ComponentType | React.ComponentType; + render?: (props: any) => React.ReactNode; + children?: ((props: any) => React.ReactNode) | React.ReactNode; + path?: string | string[]; + exact?: boolean; + sensitive?: boolean; + strict?: boolean; +} + type MatchPath = (pathname: string, props: string | string[] | any, parent?: Match | null) => Match | null; +/* eslint-enable @typescript-eslint/no-explicit-any */ const global = getGlobalObject(); @@ -53,7 +69,7 @@ function reactRouterInstrumentation( } const branches = matchRoutes(allRoutes, pathname, matchPath); - // tslint:disable-next-line: prefer-for-of + // eslint-disable-next-line @typescript-eslint/prefer-for-of for (let x = 0; x < branches.length; x++) { if (branches[x].match.isExact) { return branches[x].match.path; @@ -63,7 +79,7 @@ function reactRouterInstrumentation( return pathname; } - return (startTransaction, startTransactionOnPageLoad = true, startTransactionOnLocationChange = true) => { + return (startTransaction, startTransactionOnPageLoad = true, startTransactionOnLocationChange = true): void => { if (startTransactionOnPageLoad && global && global.location) { activeTransaction = startTransaction({ name: getName(global.location.pathname), @@ -130,9 +146,20 @@ function computeRootMatch(pathname: string): Match { return { path: '/', url: '/', params: {}, isExact: pathname === '/' }; } -export const withSentryRouting = (Route: React.ElementType) => (props: { computedMatch?: Match }) => { - if (activeTransaction && props && props.computedMatch && props.computedMatch.isExact) { - activeTransaction.setName(props.computedMatch.path); - } - return ; -}; +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export function withSentryRouting

>( + Route: React.ComponentType

, +): React.FC

{ + const componentDisplayName = Route.displayName || Route.name; + + const WrappedRoute: React.FC

= (props: P) => { + if (activeTransaction && props && props.computedMatch && props.computedMatch.isExact) { + activeTransaction.setName(props.computedMatch.path); + } + return ; + }; + + WrappedRoute.displayName = `sentryRoute(${componentDisplayName})`; + hoistNonReactStatics(WrappedRoute, Route); + return WrappedRoute; +} diff --git a/packages/react/src/reactrouterv3.ts b/packages/react/src/reactrouterv3.ts index c37eacef4f4d..822d619850a4 100644 --- a/packages/react/src/reactrouterv3.ts +++ b/packages/react/src/reactrouterv3.ts @@ -9,6 +9,7 @@ import { Location, ReactRouterInstrumentation } from './types'; type HistoryV3 = { location?: Location; listen?(cb: (location: Location) => void): void; + // eslint-disable-next-line @typescript-eslint/no-explicit-any } & Record; export type Route = { path?: string; childRoutes?: Route[] }; diff --git a/packages/react/src/redux.ts b/packages/react/src/redux.ts index 195953c3fdc5..bf66ebe0e077 100644 --- a/packages/react/src/redux.ts +++ b/packages/react/src/redux.ts @@ -1,4 +1,4 @@ -// @flow +/* eslint-disable @typescript-eslint/no-explicit-any */ import { configureScope } from '@sentry/minimal'; import { Scope } from '@sentry/types'; @@ -18,7 +18,7 @@ type ExtendState = [Extension] extends [never] ? State : State type Unsubscribe = () => void; -interface Store { +interface Store> { dispatch: Dispatch; getState(): S; subscribe(listener: () => void): Unsubscribe; @@ -35,15 +35,18 @@ type PreloadedState = Required extends { [$CombinedState]: undefined; } ? S extends CombinedState - ? { [K in keyof S1]?: S1[K] extends object ? PreloadedState : S1[K] } + ? { [K in keyof S1]?: S1[K] extends Record ? PreloadedState : S1[K] } : never : { [K in keyof S]: S[K] extends string | number | boolean | symbol ? S[K] : PreloadedState }; -type StoreEnhancer = ( +type StoreEnhancer, StateExt = never> = ( next: StoreEnhancerStoreCreator, ) => StoreEnhancerStoreCreator; -type StoreEnhancerStoreCreator = ( +type StoreEnhancerStoreCreator, StateExt = never> = < + S = any, + A extends Action = AnyAction +>( reducer: Reducer, preloadedState?: PreloadedState, ) => Store, A, StateExt, Ext> & Ext; @@ -73,7 +76,6 @@ const STATE_CONTEXT_KEY = 'redux.state'; const defaultOptions: SentryEnhancerOptions = { actionTransformer: action => action, - // tslint:disable-next-line: no-unsafe-any stateTransformer: state => state || null, }; @@ -98,7 +100,6 @@ function createReduxEnhancer(enhancerOptions?: Partial): configureScope(scope => { /* Action breadcrumbs */ const transformedAction = options.actionTransformer(action); - // tslint:disable-next-line: strict-type-predicates if (typeof transformedAction !== 'undefined' && transformedAction !== null) { scope.addBreadcrumb({ category: ACTION_BREADCRUMB_CATEGORY, @@ -109,9 +110,7 @@ function createReduxEnhancer(enhancerOptions?: Partial): /* Set latest state to scope */ const transformedState = options.stateTransformer(newState); - // tslint:disable-next-line: strict-type-predicates if (typeof transformedState !== 'undefined' && transformedState !== null) { - // tslint:disable-next-line: no-unsafe-any scope.setContext(STATE_CONTEXT_KEY, transformedState); } else { scope.setContext(STATE_CONTEXT_KEY, null); diff --git a/packages/react/src/types.ts b/packages/react/src/types.ts index 632a4db6c0b0..68cbd2a0ddc3 100644 --- a/packages/react/src/types.ts +++ b/packages/react/src/types.ts @@ -5,7 +5,7 @@ export type Action = 'PUSH' | 'REPLACE' | 'POP'; export type Location = { pathname: string; action?: Action; -} & Record; +} & Record; export type ReactRouterInstrumentation = ( startTransaction: (context: TransactionContext) => T | undefined, diff --git a/packages/react/test/profiler.test.tsx b/packages/react/test/profiler.test.tsx index faaed0a960c6..387860e5417e 100644 --- a/packages/react/test/profiler.test.tsx +++ b/packages/react/test/profiler.test.tsx @@ -159,13 +159,11 @@ describe('withProfiler', () => { describe('useProfiler()', () => { describe('mount span', () => { it('does not get created if Profiler is disabled', () => { - // tslint:disable-next-line: no-void-expression renderHook(() => useProfiler('Example', { disabled: true })); expect(mockStartChild).toHaveBeenCalledTimes(0); }); it('is created when a component is mounted', () => { - // tslint:disable-next-line: no-void-expression renderHook(() => useProfiler('Example')); expect(mockStartChild).toHaveBeenCalledTimes(1); @@ -178,7 +176,6 @@ describe('useProfiler()', () => { describe('render span', () => { it('does not get created when hasRenderSpan is false', () => { - // tslint:disable-next-line: no-void-expression const component = renderHook(() => useProfiler('Example', { hasRenderSpan: false })); expect(mockStartChild).toHaveBeenCalledTimes(1); component.unmount(); @@ -186,7 +183,6 @@ describe('useProfiler()', () => { }); it('is created by default', () => { - // tslint:disable-next-line: no-void-expression const component = renderHook(() => useProfiler('Example')); expect(mockStartChild).toHaveBeenCalledTimes(1); diff --git a/packages/react/test/reactrouterv3.test.tsx b/packages/react/test/reactrouterv3.test.tsx index 092c949196a8..d8162d3d311b 100644 --- a/packages/react/test/reactrouterv3.test.tsx +++ b/packages/react/test/reactrouterv3.test.tsx @@ -6,7 +6,7 @@ import { Match, reactRouterV3Instrumentation, Route as RouteType } from '../src/ // Have to manually set types because we are using package-alias declare module 'react-router-3' { - type History = { replace: Function; push: Function }; + type History = { replace: (s: string) => void; push: (s: string) => void }; export function createMemoryHistory(): History; export const Router: React.ComponentType<{ history: History }>; export const Route: React.ComponentType<{ path: string; component?: React.ComponentType }>; diff --git a/packages/react/test/reactrouterv4.test.tsx b/packages/react/test/reactrouterv4.test.tsx index c3177021f94b..04e93bd043dc 100644 --- a/packages/react/test/reactrouterv4.test.tsx +++ b/packages/react/test/reactrouterv4.test.tsx @@ -1,4 +1,3 @@ -// tslint:disable: no-unsafe-any import { render } from '@testing-library/react'; import { createMemoryHistory } from 'history-4'; import * as React from 'react'; diff --git a/packages/react/test/reactrouterv5.test.tsx b/packages/react/test/reactrouterv5.test.tsx index ab0c45a6c186..d4ba0b95c489 100644 --- a/packages/react/test/reactrouterv5.test.tsx +++ b/packages/react/test/reactrouterv5.test.tsx @@ -1,4 +1,3 @@ -// tslint:disable: no-unsafe-any import { render } from '@testing-library/react'; import { createMemoryHistory } from 'history-4'; import * as React from 'react'; diff --git a/packages/react/test/redux.test.ts b/packages/react/test/redux.test.ts index 1fd4da3230c6..55729ddc860b 100644 --- a/packages/react/test/redux.test.ts +++ b/packages/react/test/redux.test.ts @@ -1,4 +1,3 @@ -// tslint:disable-next-line: no-implicit-dependencies import * as Sentry from '@sentry/minimal'; import { Scope } from '@sentry/types'; import * as Redux from 'redux'; @@ -47,15 +46,18 @@ describe('createReduxEnhancer', () => { }; const ACTION_TYPE = 'UPDATE_VALUE'; - const store = Redux.createStore((state: object = initialState, action: { type: string; newValue: any }) => { - if (action.type === ACTION_TYPE) { - return { - ...state, - value: action.newValue, - }; - } - return state; - }, enhancer); + const store = Redux.createStore( + (state: Record = initialState, action: { type: string; newValue: any }) => { + if (action.type === ACTION_TYPE) { + return { + ...state, + value: action.newValue, + }; + } + return state; + }, + enhancer, + ); const updateAction = { type: ACTION_TYPE, newValue: 'updated' }; store.dispatch(updateAction); @@ -205,15 +207,18 @@ describe('createReduxEnhancer', () => { const UPDATE_VALUE = 'UPDATE_VALUE'; - const store = Redux.createStore((state: object = initialState, action: { type: string; value: any }) => { - if (action.type === UPDATE_VALUE) { - return { - ...state, - value: action.value, - }; - } - return state; - }, enhancer); + const store = Redux.createStore( + (state: Record = initialState, action: { type: string; value: any }) => { + if (action.type === UPDATE_VALUE) { + return { + ...state, + value: action.value, + }; + } + return state; + }, + enhancer, + ); store.dispatch({ type: UPDATE_VALUE, diff --git a/packages/react/tslint.json b/packages/react/tslint.json deleted file mode 100644 index 16541fbae993..000000000000 --- a/packages/react/tslint.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "extends": ["@sentry/typescript/tslint", "tslint-react", "tslint-react-hooks"], - "rules": { - "no-implicit-dependencies": [ - true, - "dev" - ], - "variable-name": false, - "completed-docs": false, - "interface-over-type-literal": false, - "jsx-no-lambda": false, - "jsx-boolean-value": false - } -} diff --git a/packages/tracing/.eslintrc.js b/packages/tracing/.eslintrc.js new file mode 100644 index 000000000000..06e1cc905a45 --- /dev/null +++ b/packages/tracing/.eslintrc.js @@ -0,0 +1,26 @@ +module.exports = { + root: true, + env: { + es6: true, + }, + parserOptions: { + ecmaVersion: 2018, + }, + extends: ['../../.eslintrc.js'], + ignorePatterns: ['build/**/*', 'dist/**/*', 'esm/**/*', 'examples/**/*', 'scripts/**/*'], + overrides: [ + { + files: ['*.ts', '*.tsx', '*.d.ts'], + parserOptions: { + project: './tsconfig.json', + }, + }, + { + files: ['test/**/*'], + rules: { + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/no-non-null-assertion': 'off', + }, + }, + ], +}; diff --git a/packages/tracing/package.json b/packages/tracing/package.json index 16ae07246076..0824311ffc84 100644 --- a/packages/tracing/package.json +++ b/packages/tracing/package.json @@ -38,7 +38,6 @@ "rollup-plugin-node-resolve": "^4.2.3", "rollup-plugin-terser": "^4.0.4", "rollup-plugin-typescript2": "^0.21.0", - "tslint": "5.16.0", "typescript": "3.4.5" }, "scripts": { @@ -52,13 +51,12 @@ "build:watch:esm": "tsc -p tsconfig.esm.json -w --preserveWatchOutput", "clean": "rimraf dist coverage build esm", "link:yarn": "yarn link", - "lint": "run-s lint:prettier lint:tslint", + "lint": "run-s lint:prettier lint:eslint", "lint:prettier": "prettier-check \"{src,test}/**/*.ts\"", - "lint:tslint": "tslint -t stylish -p .", - "lint:tslint:json": "tslint --format json -p . | tee lint-results.json", - "fix": "run-s fix:tslint fix:prettier", + "lint:eslint": "eslint . --cache --cache-location '../../eslintcache/' --format stylish", + "fix": "run-s fix:eslint fix:prettier", "fix:prettier": "prettier --write \"{src,test}/**/*.ts\"", - "fix:tslint": "tslint --fix -t stylish -p .", + "fix:eslint": "eslint . --format stylish --fix", "test": "jest", "test:watch": "jest --watch" }, diff --git a/packages/tracing/src/browser/backgroundtab.ts b/packages/tracing/src/browser/backgroundtab.ts index 71d16c4f3ebd..f0ce1f5446aa 100644 --- a/packages/tracing/src/browser/backgroundtab.ts +++ b/packages/tracing/src/browser/backgroundtab.ts @@ -2,7 +2,6 @@ import { getGlobalObject, logger } from '@sentry/utils'; import { IdleTransaction } from '../idletransaction'; import { SpanStatus } from '../spanstatus'; - import { getActiveTransaction } from './utils'; const global = getGlobalObject(); diff --git a/packages/tracing/src/browser/browsertracing.ts b/packages/tracing/src/browser/browsertracing.ts index 4c3ef17319b2..67772bec562a 100644 --- a/packages/tracing/src/browser/browsertracing.ts +++ b/packages/tracing/src/browser/browsertracing.ts @@ -6,7 +6,6 @@ import { startIdleTransaction } from '../hubextensions'; import { DEFAULT_IDLE_TIMEOUT, IdleTransaction } from '../idletransaction'; import { Span } from '../span'; import { SpanStatus } from '../spanstatus'; - import { registerBackgroundTabDetection } from './backgroundtab'; import { registerErrorInstrumentation } from './errors'; import { MetricsInstrumentation } from './metrics'; @@ -45,24 +44,6 @@ export interface BrowserTracingOptions extends RequestInstrumentationOptions { */ startTransactionOnPageLoad: boolean; - /** - * beforeNavigate is called before a pageload/navigation transaction is created and allows for users - * to set custom transaction context. Defaults behaviour is to return `window.location.pathname`. - * - * If undefined is returned, a pageload/navigation transaction will not be created. - */ - beforeNavigate(context: TransactionContext): TransactionContext | undefined; - - /** - * Instrumentation that creates routing change transactions. By default creates - * pageload and navigation transactions. - */ - routingInstrumentation( - startTransaction: (context: TransactionContext) => T | undefined, - startTransactionOnPageLoad?: boolean, - startTransactionOnLocationChange?: boolean, - ): void; - /** * The maximum duration of a transaction before it will be marked as "deadline_exceeded". * If you never want to mark a transaction set it to 0. @@ -80,6 +61,24 @@ export interface BrowserTracingOptions extends RequestInstrumentationOptions { * Default: true */ markBackgroundTransactions: boolean; + + /** + * beforeNavigate is called before a pageload/navigation transaction is created and allows for users + * to set custom transaction context. Defaults behaviour is to return `window.location.pathname`. + * + * If undefined is returned, a pageload/navigation transaction will not be created. + */ + beforeNavigate(context: TransactionContext): TransactionContext | undefined; + + /** + * Instrumentation that creates routing change transactions. By default creates + * pageload and navigation transactions. + */ + routingInstrumentation( + startTransaction: (context: TransactionContext) => T | undefined, + startTransactionOnPageLoad?: boolean, + startTransactionOnLocationChange?: boolean, + ): void; } /** @@ -154,6 +153,7 @@ export class BrowserTracing implements Integration { ); } + // eslint-disable-next-line @typescript-eslint/unbound-method const { routingInstrumentation, startTransactionOnLocationChange, @@ -188,6 +188,7 @@ export class BrowserTracing implements Integration { return undefined; } + // eslint-disable-next-line @typescript-eslint/unbound-method const { beforeNavigate, idleTimeout, maxTransactionDuration } = this.options; // if beforeNavigate returns undefined, we should not start a transaction. diff --git a/packages/tracing/src/browser/errors.ts b/packages/tracing/src/browser/errors.ts index 5a8a97910647..08aadb544705 100644 --- a/packages/tracing/src/browser/errors.ts +++ b/packages/tracing/src/browser/errors.ts @@ -1,7 +1,6 @@ import { addInstrumentationHandler, logger } from '@sentry/utils'; import { SpanStatus } from '../spanstatus'; - import { getActiveTransaction } from './utils'; /** diff --git a/packages/tracing/src/browser/metrics.ts b/packages/tracing/src/browser/metrics.ts index 3083327f22f2..18ef3fc2592d 100644 --- a/packages/tracing/src/browser/metrics.ts +++ b/packages/tracing/src/browser/metrics.ts @@ -1,9 +1,9 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ import { SpanContext } from '@sentry/types'; import { getGlobalObject, logger } from '@sentry/utils'; import { Span } from '../span'; import { Transaction } from '../transaction'; - import { msToSec } from './utils'; const global = getGlobalObject(); @@ -14,71 +14,6 @@ export class MetricsInstrumentation { private _performanceCursor: number = 0; - private _forceLCP = () => { - /* No-op, replaced later if LCP API is available. */ - return; - }; - - /** Starts tracking the Largest Contentful Paint on the current page. */ - private _trackLCP(): void { - // Based on reference implementation from https://web.dev/lcp/#measure-lcp-in-javascript. - // Use a try/catch instead of feature detecting `largest-contentful-paint` - // support, since some browsers throw when using the new `type` option. - // https://bugs.webkit.org/show_bug.cgi?id=209216 - try { - // Keep track of whether (and when) the page was first hidden, see: - // https://github.com/w3c/page-visibility/issues/29 - // NOTE: ideally this check would be performed in the document - // to avoid cases where the visibility state changes before this code runs. - let firstHiddenTime = document.visibilityState === 'hidden' ? 0 : Infinity; - document.addEventListener( - 'visibilitychange', - event => { - firstHiddenTime = Math.min(firstHiddenTime, event.timeStamp); - }, - { once: true }, - ); - - const updateLCP = (entry: PerformanceEntry) => { - // Only include an LCP entry if the page wasn't hidden prior to - // the entry being dispatched. This typically happens when a page is - // loaded in a background tab. - if (entry.startTime < firstHiddenTime) { - // NOTE: the `startTime` value is a getter that returns the entry's - // `renderTime` value, if available, or its `loadTime` value otherwise. - // The `renderTime` value may not be available if the element is an image - // that's loaded cross-origin without the `Timing-Allow-Origin` header. - this._lcp = { - // @ts-ignore - ...(entry.id && { elementId: entry.id }), - // @ts-ignore - ...(entry.size && { elementSize: entry.size }), - value: entry.startTime, - }; - } - }; - - // Create a PerformanceObserver that calls `updateLCP` for each entry. - const po = new PerformanceObserver(entryList => { - entryList.getEntries().forEach(updateLCP); - }); - - // Observe entries of type `largest-contentful-paint`, including buffered entries, - // i.e. entries that occurred before calling `observe()` below. - po.observe({ - buffered: true, - // @ts-ignore - type: 'largest-contentful-paint', - }); - - this._forceLCP = () => { - po.takeRecords().forEach(updateLCP); - }; - } catch (e) { - // Do nothing if the browser doesn't support this API. - } - } - public constructor() { if (global && global.performance) { if (global.performance.mark) { @@ -112,7 +47,7 @@ export class MetricsInstrumentation { let entryScriptSrc: string | undefined; if (global.document) { - // tslint:disable-next-line: prefer-for-of + // eslint-disable-next-line @typescript-eslint/prefer-for-of for (let i = 0; i < document.scripts.length; i++) { // We go through all scripts on the page and look for 'data-entry' // We remember the name and measure the time between this script finished loading and @@ -144,13 +79,14 @@ export class MetricsInstrumentation { break; case 'mark': case 'paint': - case 'measure': + case 'measure': { const startTimestamp = addMeasureSpans(transaction, entry, startTime, duration, timeOrigin); if (tracingInitMarkStartTime === undefined && entry.name === 'sentry-tracing-init') { tracingInitMarkStartTime = startTimestamp; } break; - case 'resource': + } + case 'resource': { const resourceName = (entry.name as string).replace(window.location.origin, ''); const endTimestamp = addResourceSpans(transaction, entry, resourceName, startTime, duration, timeOrigin); // We remember the entry script end time to calculate the difference to the first init mark @@ -158,6 +94,7 @@ export class MetricsInstrumentation { entryScriptStartTimestamp = endTimestamp; } break; + } default: // Ignore other entry types. } @@ -174,6 +111,71 @@ export class MetricsInstrumentation { this._performanceCursor = Math.max(performance.getEntries().length - 1, 0); } + + private _forceLCP: () => void = () => { + /* No-op, replaced later if LCP API is available. */ + return; + }; + + /** Starts tracking the Largest Contentful Paint on the current page. */ + private _trackLCP(): void { + // Based on reference implementation from https://web.dev/lcp/#measure-lcp-in-javascript. + // Use a try/catch instead of feature detecting `largest-contentful-paint` + // support, since some browsers throw when using the new `type` option. + // https://bugs.webkit.org/show_bug.cgi?id=209216 + try { + // Keep track of whether (and when) the page was first hidden, see: + // https://github.com/w3c/page-visibility/issues/29 + // NOTE: ideally this check would be performed in the document + // to avoid cases where the visibility state changes before this code runs. + let firstHiddenTime = document.visibilityState === 'hidden' ? 0 : Infinity; + document.addEventListener( + 'visibilitychange', + event => { + firstHiddenTime = Math.min(firstHiddenTime, event.timeStamp); + }, + { once: true }, + ); + + const updateLCP = (entry: PerformanceEntry): void => { + // Only include an LCP entry if the page wasn't hidden prior to + // the entry being dispatched. This typically happens when a page is + // loaded in a background tab. + if (entry.startTime < firstHiddenTime) { + // NOTE: the `startTime` value is a getter that returns the entry's + // `renderTime` value, if available, or its `loadTime` value otherwise. + // The `renderTime` value may not be available if the element is an image + // that's loaded cross-origin without the `Timing-Allow-Origin` header. + this._lcp = { + // @ts-ignore can't access id on entry + ...(entry.id && { elementId: entry.id }), + // @ts-ignore can't access id on entry + ...(entry.size && { elementSize: entry.size }), + value: entry.startTime, + }; + } + }; + + // Create a PerformanceObserver that calls `updateLCP` for each entry. + const po = new PerformanceObserver(entryList => { + entryList.getEntries().forEach(updateLCP); + }); + + // Observe entries of type `largest-contentful-paint`, including buffered entries, + // i.e. entries that occurred before calling `observe()` below. + po.observe({ + buffered: true, + // @ts-ignore type does not exist on obj + type: 'largest-contentful-paint', + }); + + this._forceLCP = () => { + po.takeRecords().forEach(updateLCP); + }; + } catch (e) { + // Do nothing if the browser doesn't support this API. + } + } } /** Instrument navigation entries */ diff --git a/packages/tracing/src/browser/request.ts b/packages/tracing/src/browser/request.ts index 9bc952d91a86..b8e328f0199a 100644 --- a/packages/tracing/src/browser/request.ts +++ b/packages/tracing/src/browser/request.ts @@ -1,7 +1,6 @@ import { addInstrumentationHandler, isInstanceOf, isMatchingPattern } from '@sentry/utils'; import { Span } from '../span'; - import { getActiveTransaction } from './utils'; export const DEFAULT_TRACING_ORIGINS = ['localhost', /^\//]; @@ -41,6 +40,7 @@ export interface RequestInstrumentationOptions { /** Data returned from fetch callback */ export interface FetchData { + // eslint-disable-next-line @typescript-eslint/no-explicit-any args: any[]; fetchData?: { method: string; @@ -59,11 +59,12 @@ interface XHRData { method: string; url: string; status_code: number; + // eslint-disable-next-line @typescript-eslint/no-explicit-any data: Record; }; __sentry_xhr_span_id__?: string; __sentry_own_request__: boolean; - setRequestHeader?: Function; + setRequestHeader?: (key: string, val: string) => void; }; startTimestamp: number; endTimestamp?: number; @@ -137,7 +138,7 @@ export function _fetchCallback( if (span) { span.finish(); - // tslint:disable-next-line: no-dynamic-delete + // eslint-disable-next-line @typescript-eslint/no-dynamic-delete delete spans[handlerData.fetchData.__span]; } return; @@ -158,15 +159,16 @@ export function _fetchCallback( spans[span.spanId] = span; const request = (handlerData.args[0] = handlerData.args[0] as string | Request); + // eslint-disable-next-line @typescript-eslint/no-explicit-any const options = (handlerData.args[1] = (handlerData.args[1] as { [key: string]: any }) || {}); let headers = options.headers; if (isInstanceOf(request, Request)) { headers = (request as Request).headers; } if (headers) { - // tslint:disable-next-line: no-unsafe-any + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access if (typeof headers.append === 'function') { - // tslint:disable-next-line: no-unsafe-any + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access headers.append('sentry-trace', span.toTraceparent()); } else if (Array.isArray(headers)) { headers = [...headers, ['sentry-trace', span.toTraceparent()]]; @@ -210,7 +212,7 @@ function xhrCallback( span.setHttpStatus(xhr.status_code); span.finish(); - // tslint:disable-next-line: no-dynamic-delete + // eslint-disable-next-line @typescript-eslint/no-dynamic-delete delete spans[handlerData.xhr.__sentry_xhr_span_id__]; } return; diff --git a/packages/tracing/src/idletransaction.ts b/packages/tracing/src/idletransaction.ts index c63a24881b85..4c3debf2da6d 100644 --- a/packages/tracing/src/idletransaction.ts +++ b/packages/tracing/src/idletransaction.ts @@ -1,4 +1,3 @@ -// tslint:disable: max-classes-per-file import { Hub } from '@sentry/hub'; import { TransactionContext } from '@sentry/types'; import { logger, timestampWithMs } from '@sentry/utils'; @@ -72,6 +71,7 @@ export class IdleTransaction extends Transaction { // If a transaction is created and no activities are added, we want to make sure that // it times out properly. This is cleared and not used when activities are added. + // eslint-disable-next-line @typescript-eslint/no-explicit-any private _initTimeout: any; public constructor( @@ -95,48 +95,6 @@ export class IdleTransaction extends Transaction { } } - /** - * Checks when entries of this.activities are not changing for 3 beats. - * If this occurs we finish the transaction. - */ - private _beat(): void { - clearTimeout(this._heartbeatTimer); - // We should not be running heartbeat if the idle transaction is finished. - if (this._finished) { - return; - } - - const keys = Object.keys(this.activities); - const heartbeatString = keys.length ? keys.reduce((prev: string, current: string) => prev + current) : ''; - - if (heartbeatString === this._prevHeartbeatString) { - this._heartbeatCounter++; - } else { - this._heartbeatCounter = 1; - } - - this._prevHeartbeatString = heartbeatString; - - if (this._heartbeatCounter >= 3) { - logger.log(`[Tracing] Transaction finished because of no change for 3 heart beats`); - this.setStatus(SpanStatus.DeadlineExceeded); - this.setTag('heartbeat', 'failed'); - this.finish(); - } else { - this._pingHeartbeat(); - } - } - - /** - * Pings the heartbeat - */ - private _pingHeartbeat(): void { - logger.log(`pinging Heartbeat -> current counter: ${this._heartbeatCounter}`); - this._heartbeatTimer = (setTimeout(() => { - this._beat(); - }, 5000) as any) as number; - } - /** {@inheritDoc} */ public finish(endTimestamp: number = timestampWithMs()): string | undefined { this._finished = true; @@ -185,13 +143,56 @@ export class IdleTransaction extends Transaction { return super.finish(endTimestamp); } + /** + * Register a callback function that gets excecuted before the transaction finishes. + * Useful for cleanup or if you want to add any additional spans based on current context. + * + * This is exposed because users have no other way of running something before an idle transaction + * finishes. + */ + public registerBeforeFinishCallback(callback: BeforeFinishCallback): void { + this._beforeFinishCallbacks.push(callback); + } + + /** + * @inheritDoc + */ + public initSpanRecorder(maxlen?: number): void { + if (!this.spanRecorder) { + this._initTimeout = setTimeout(() => { + if (!this._finished) { + this.finish(); + } + }, this._idleTimeout); + + const pushActivity = (id: string): void => { + if (this._finished) { + return; + } + this._pushActivity(id); + }; + const popActivity = (id: string): void => { + if (this._finished) { + return; + } + this._popActivity(id); + }; + + this.spanRecorder = new IdleTransactionSpanRecorder(pushActivity, popActivity, this.spanId, maxlen); + + // Start heartbeat so that transactions do not run forever. + logger.log('Starting heartbeat'); + this._pingHeartbeat(); + } + this.spanRecorder.add(this); + } + /** * Start tracking a specific activity. * @param spanId The span id that represents the activity */ private _pushActivity(spanId: string): void { if (this._initTimeout) { - // tslint:disable-next-line: no-unsafe-any clearTimeout(this._initTimeout); this._initTimeout = undefined; } @@ -207,7 +208,7 @@ export class IdleTransaction extends Transaction { private _popActivity(spanId: string): void { if (this.activities[spanId]) { logger.log(`[Tracing] popActivity ${spanId}`); - // tslint:disable-next-line: no-dynamic-delete + // eslint-disable-next-line @typescript-eslint/no-dynamic-delete delete this.activities[spanId]; logger.log('[Tracing] new activities count', Object.keys(this.activities).length); } @@ -227,47 +228,45 @@ export class IdleTransaction extends Transaction { } /** - * Register a callback function that gets excecuted before the transaction finishes. - * Useful for cleanup or if you want to add any additional spans based on current context. - * - * This is exposed because users have no other way of running something before an idle transaction - * finishes. + * Checks when entries of this.activities are not changing for 3 beats. + * If this occurs we finish the transaction. */ - public registerBeforeFinishCallback(callback: BeforeFinishCallback): void { - this._beforeFinishCallbacks.push(callback); - } + private _beat(): void { + clearTimeout(this._heartbeatTimer); + // We should not be running heartbeat if the idle transaction is finished. + if (this._finished) { + return; + } - /** - * @inheritDoc - */ - public initSpanRecorder(maxlen?: number): void { - if (!this.spanRecorder) { - this._initTimeout = setTimeout(() => { - if (!this._finished) { - this.finish(); - } - }, this._idleTimeout); + const keys = Object.keys(this.activities); + const heartbeatString = keys.length ? keys.reduce((prev: string, current: string) => prev + current) : ''; - const pushActivity = (id: string) => { - if (this._finished) { - return; - } - this._pushActivity(id); - }; - const popActivity = (id: string) => { - if (this._finished) { - return; - } - this._popActivity(id); - }; + if (heartbeatString === this._prevHeartbeatString) { + this._heartbeatCounter += 1; + } else { + this._heartbeatCounter = 1; + } - this.spanRecorder = new IdleTransactionSpanRecorder(pushActivity, popActivity, this.spanId, maxlen); + this._prevHeartbeatString = heartbeatString; - // Start heartbeat so that transactions do not run forever. - logger.log('Starting heartbeat'); + if (this._heartbeatCounter >= 3) { + logger.log(`[Tracing] Transaction finished because of no change for 3 heart beats`); + this.setStatus(SpanStatus.DeadlineExceeded); + this.setTag('heartbeat', 'failed'); + this.finish(); + } else { this._pingHeartbeat(); } - this.spanRecorder.add(this); + } + + /** + * Pings the heartbeat + */ + private _pingHeartbeat(): void { + logger.log(`pinging Heartbeat -> current counter: ${this._heartbeatCounter}`); + this._heartbeatTimer = (setTimeout(() => { + this._beat(); + }, 5000) as unknown) as number; } } diff --git a/packages/tracing/src/index.bundle.ts b/packages/tracing/src/index.bundle.ts index a80d9fa4db74..2eff4ca833ed 100644 --- a/packages/tracing/src/index.bundle.ts +++ b/packages/tracing/src/index.bundle.ts @@ -1,4 +1,3 @@ -// tslint:disable: no-implicit-dependencies export { Breadcrumb, Request, @@ -61,12 +60,10 @@ export { Span, TRACEPARENT_REGEXP } from './span'; let windowIntegrations = {}; // This block is needed to add compatibility with the integrations packages when used with a CDN -// tslint:disable: no-unsafe-any const _window = getGlobalObject(); if (_window.Sentry && _window.Sentry.Integrations) { windowIntegrations = _window.Sentry.Integrations; } -// tslint:enable: no-unsafe-any const INTEGRATIONS = { ...windowIntegrations, diff --git a/packages/tracing/src/index.ts b/packages/tracing/src/index.ts index 1546346e749d..457d94df8135 100644 --- a/packages/tracing/src/index.ts +++ b/packages/tracing/src/index.ts @@ -2,7 +2,6 @@ import { BrowserTracing } from './browser'; import { addExtensionMethods } from './hubextensions'; import * as ApmIntegrations from './integrations'; -// tslint:disable-next-line: variable-name const Integrations = { ...ApmIntegrations, BrowserTracing }; export { Integrations }; diff --git a/packages/tracing/src/integrations/express.ts b/packages/tracing/src/integrations/express.ts index a2ca54d06672..4b75f88e2bd7 100644 --- a/packages/tracing/src/integrations/express.ts +++ b/packages/tracing/src/integrations/express.ts @@ -1,7 +1,7 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ import { Integration, Transaction } from '@sentry/types'; import { logger } from '@sentry/utils'; -// tslint:disable: completed-docs // Have to manually set types because we are using package-alias interface Application { use(...args: any): any; @@ -14,7 +14,6 @@ type NextFunction = (...args: any) => any; interface Response { once(name: string, callback: () => void): void; } -// tslint:enable: completed-docs /** * Internal helper for `__sentry_transaction` @@ -34,12 +33,12 @@ export class Express implements Integration { /** * @inheritDoc */ - public name: string = Express.id; + public static id: string = 'Express'; /** * @inheritDoc */ - public static id: string = 'Express'; + public name: string = Express.id; /** * Express App instance @@ -77,6 +76,7 @@ export class Express implements Integration { * // error handler * app.use(function (err, req, res, next) { ... }) */ +// eslint-disable-next-line @typescript-eslint/ban-types function wrap(fn: Function): RequestHandler | ErrorRequestHandler { const arrity = fn.length; @@ -93,6 +93,7 @@ function wrap(fn: Function): RequestHandler | ErrorRequestHandler { span.finish(); }); } + // eslint-disable-next-line prefer-rest-params return fn.apply(this, arguments); }; } @@ -114,6 +115,7 @@ function wrap(fn: Function): RequestHandler | ErrorRequestHandler { if (span) { span.finish(); } + // eslint-disable-next-line prefer-rest-params return next.apply(this, arguments); }); }; @@ -137,6 +139,7 @@ function wrap(fn: Function): RequestHandler | ErrorRequestHandler { if (span) { span.finish(); } + // eslint-disable-next-line prefer-rest-params return next.apply(this, arguments); }); }; @@ -180,9 +183,10 @@ function wrapUseArgs(args: IArguments): unknown[] { * Patches original app.use to utilize our tracing functionality */ function instrumentMiddlewares(app: Application): Application { - // tslint:disable-next-line: no-unbound-method + // eslint-disable-next-line @typescript-eslint/unbound-method const originalAppUse = app.use; app.use = function(): any { + // eslint-disable-next-line prefer-rest-params return originalAppUse.apply(this, wrapUseArgs(arguments)); }; return app; diff --git a/packages/tracing/src/span.ts b/packages/tracing/src/span.ts index bad9dc1fbc60..72a859e0811d 100644 --- a/packages/tracing/src/span.ts +++ b/packages/tracing/src/span.ts @@ -1,4 +1,4 @@ -// tslint:disable:max-classes-per-file +/* eslint-disable max-lines */ import { Span as SpanInterface, SpanContext } from '@sentry/types'; import { dropUndefinedKeys, timestampWithMs, uuid4 } from '@sentry/utils'; @@ -19,9 +19,10 @@ export const TRACEPARENT_REGEXP = new RegExp( * @hidden */ export class SpanRecorder { - private readonly _maxlen: number; public spans: Span[] = []; + private readonly _maxlen: number; + public constructor(maxlen: number = 1000) { this._maxlen = maxlen; } @@ -98,6 +99,7 @@ export class Span implements SpanInterface, SpanContext { /** * @inheritDoc */ + // eslint-disable-next-line @typescript-eslint/no-explicit-any public data: { [key: string]: any } = {}; /** @@ -151,6 +153,32 @@ export class Span implements SpanInterface, SpanContext { } } + /** + * Continues a trace from a string (usually the header). + * @param traceparent Traceparent string + */ + public static fromTraceparent( + traceparent: string, + spanContext?: Pick>, + ): Span | undefined { + const matches = traceparent.match(TRACEPARENT_REGEXP); + if (matches) { + let sampled: boolean | undefined; + if (matches[3] === '1') { + sampled = true; + } else if (matches[3] === '0') { + sampled = false; + } + return new Span({ + ...spanContext, + parentSpanId: matches[2], + sampled, + traceId: matches[1], + }); + } + return undefined; + } + /** * @inheritDoc * @deprecated @@ -182,32 +210,6 @@ export class Span implements SpanInterface, SpanContext { return span; } - /** - * Continues a trace from a string (usually the header). - * @param traceparent Traceparent string - */ - public static fromTraceparent( - traceparent: string, - spanContext?: Pick>, - ): Span | undefined { - const matches = traceparent.match(TRACEPARENT_REGEXP); - if (matches) { - let sampled: boolean | undefined; - if (matches[3] === '1') { - sampled = true; - } else if (matches[3] === '0') { - sampled = false; - } - return new Span({ - ...spanContext, - parentSpanId: matches[2], - sampled, - traceId: matches[1], - }); - } - return undefined; - } - /** * @inheritDoc */ @@ -219,6 +221,7 @@ export class Span implements SpanInterface, SpanContext { /** * @inheritDoc */ + // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types public setData(key: string, value: any): this { this.data = { ...this.data, [key]: value }; return this; @@ -273,6 +276,7 @@ export class Span implements SpanInterface, SpanContext { * @inheritDoc */ public getTraceContext(): { + // eslint-disable-next-line @typescript-eslint/no-explicit-any data?: { [key: string]: any }; description?: string; op?: string; @@ -298,6 +302,7 @@ export class Span implements SpanInterface, SpanContext { * @inheritDoc */ public toJSON(): { + // eslint-disable-next-line @typescript-eslint/no-explicit-any data?: { [key: string]: any }; description?: string; op?: string; diff --git a/packages/tracing/src/spanstatus.ts b/packages/tracing/src/spanstatus.ts index 6aa87a4dc833..e26d19e36139 100644 --- a/packages/tracing/src/spanstatus.ts +++ b/packages/tracing/src/spanstatus.ts @@ -1,4 +1,5 @@ /** The status of an Span. */ +// eslint-disable-next-line import/export export enum SpanStatus { /** The operation completed successfully. */ Ok = 'ok', @@ -36,7 +37,7 @@ export enum SpanStatus { DataLoss = 'data_loss', } -// tslint:disable:no-unnecessary-qualifier no-namespace +// eslint-disable-next-line @typescript-eslint/no-namespace, import/export export namespace SpanStatus { /** * Converts a HTTP status code into a {@link SpanStatus}. @@ -44,7 +45,6 @@ export namespace SpanStatus { * @param httpStatus The HTTP response status code. * @returns The span status or {@link SpanStatus.UnknownError}. */ - // tslint:disable-next-line:completed-docs export function fromHttpCode(httpStatus: number): SpanStatus { if (httpStatus < 400) { return SpanStatus.Ok; diff --git a/packages/tracing/src/transaction.ts b/packages/tracing/src/transaction.ts index 869724e59f2b..49583d562c27 100644 --- a/packages/tracing/src/transaction.ts +++ b/packages/tracing/src/transaction.ts @@ -6,13 +6,13 @@ import { Span as SpanClass, SpanRecorder } from './span'; /** JSDoc */ export class Transaction extends SpanClass { + public name?: string; + /** * The reference to the current hub. */ private readonly _hub: Hub = (getCurrentHub() as unknown) as Hub; - public name?: string; - private readonly _trimEnd?: boolean; /** diff --git a/packages/tracing/test/browser/backgroundtab.test.ts b/packages/tracing/test/browser/backgroundtab.test.ts index a85a93434bc2..71b8810c9142 100644 --- a/packages/tracing/test/browser/backgroundtab.test.ts +++ b/packages/tracing/test/browser/backgroundtab.test.ts @@ -1,6 +1,5 @@ import { BrowserClient } from '@sentry/browser'; import { Hub, makeMain } from '@sentry/hub'; -// tslint:disable-next-line: no-implicit-dependencies import { JSDOM } from 'jsdom'; import { SpanStatus } from '../../src'; @@ -11,13 +10,13 @@ describe('registerBackgroundTabDetection', () => { let hub: Hub; beforeEach(() => { const dom = new JSDOM(); - // @ts-ignore + // @ts-ignore need to override global document global.document = dom.window.document; hub = new Hub(new BrowserClient({ tracesSampleRate: 1 })); makeMain(hub); - // @ts-ignore + // @ts-ignore need to override global document global.document.addEventListener = jest.fn((event, callback) => { events[event] = callback; }); @@ -29,7 +28,7 @@ describe('registerBackgroundTabDetection', () => { }); it('does not creates an event listener if global document is undefined', () => { - // @ts-ignore; + // @ts-ignore need to override global document global.document = undefined; registerBackgroundTabDetection(); expect(events).toMatchObject({}); @@ -46,7 +45,7 @@ describe('registerBackgroundTabDetection', () => { hub.configureScope(scope => scope.setSpan(transaction)); // Simulate document visibility hidden event - // @ts-ignore + // @ts-ignore need to override global document global.document.hidden = true; events.visibilitychange(); diff --git a/packages/tracing/test/browser/browsertracing.test.ts b/packages/tracing/test/browser/browsertracing.test.ts index 5e7f695aed86..0c77e137f494 100644 --- a/packages/tracing/test/browser/browsertracing.test.ts +++ b/packages/tracing/test/browser/browsertracing.test.ts @@ -1,6 +1,5 @@ import { BrowserClient } from '@sentry/browser'; import { Hub, makeMain } from '@sentry/hub'; -// tslint:disable-next-line: no-implicit-dependencies import { JSDOM } from 'jsdom'; import { SpanStatus } from '../../src'; @@ -34,11 +33,11 @@ const warnSpy = jest.spyOn(logger, 'warn'); beforeAll(() => { const dom = new JSDOM(); - // @ts-ignore + // @ts-ignore need to override global document global.document = dom.window.document; - // @ts-ignore + // @ts-ignore need to override global document global.window = dom.window; - // @ts-ignore + // @ts-ignore need to override global document global.location = dom.window.location; }); @@ -61,7 +60,6 @@ describe('BrowserTracing', () => { } }); - // tslint:disable-next-line: completed-docs function createBrowserTracing(setup?: boolean, _options?: Partial): BrowserTracing { const inst = new BrowserTracing(_options); if (setup) { @@ -95,7 +93,7 @@ describe('BrowserTracing', () => { * so that we can show this functionality works independent of the default routing integration. */ describe('route transaction', () => { - const customRoutingInstrumentation = (startTransaction: Function) => { + const customRoutingInstrumentation = (startTransaction: (obj: any) => void) => { startTransaction({ name: 'a/path', op: 'pageload' }); }; diff --git a/packages/tracing/test/browser/request.test.ts b/packages/tracing/test/browser/request.test.ts index de6841e83aac..823db03f5ce4 100644 --- a/packages/tracing/test/browser/request.test.ts +++ b/packages/tracing/test/browser/request.test.ts @@ -6,8 +6,8 @@ import { _fetchCallback, FetchData, registerRequestInstrumentation } from '../.. import { addExtensionMethods } from '../../src/hubextensions'; declare global { + // eslint-disable-next-line @typescript-eslint/no-namespace namespace NodeJS { - // tslint:disable-next-line: completed-docs interface Global { // Have to mock out Request because it is not defined in jest environment Request: Request; @@ -17,7 +17,7 @@ declare global { beforeAll(() => { addExtensionMethods(); - // @ts-ignore + // @ts-ignore need to override global Request global.Request = {}; }); diff --git a/packages/tracing/test/browser/router.test.ts b/packages/tracing/test/browser/router.test.ts index ab83366c9f86..5dfaf222399c 100644 --- a/packages/tracing/test/browser/router.test.ts +++ b/packages/tracing/test/browser/router.test.ts @@ -1,4 +1,3 @@ -// tslint:disable-next-line: no-implicit-dependencies import { JSDOM } from 'jsdom'; import { defaultBeforeNavigate, defaultRoutingInstrumentation } from '../../src/browser/router'; @@ -28,11 +27,11 @@ describe('defaultRoutingInstrumentation', () => { const startTransaction = jest.fn().mockReturnValue({ finish: mockFinish }); beforeEach(() => { const dom = new JSDOM(); - // @ts-ignore + // @ts-ignore need to override global document global.document = dom.window.document; - // @ts-ignore + // @ts-ignore need to override global document global.window = dom.window; - // @ts-ignore + // @ts-ignore need to override global document global.location = dom.window.location; startTransaction.mockClear(); @@ -40,7 +39,7 @@ describe('defaultRoutingInstrumentation', () => { }); it('does not start transactions if global location is undefined', () => { - // @ts-ignore + // @ts-ignore need to override global document global.location = undefined; defaultRoutingInstrumentation(startTransaction); expect(startTransaction).toHaveBeenCalledTimes(0); diff --git a/packages/tracing/test/tslint.json b/packages/tracing/test/tslint.json deleted file mode 100644 index fed4f6106476..000000000000 --- a/packages/tracing/test/tslint.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": ["../tslint.json"], - "rules": { - "no-unsafe-any": false, - "no-implicit-dependencies": false - } -} diff --git a/packages/tracing/tslint.json b/packages/tracing/tslint.json deleted file mode 100644 index 3016a27a85cc..000000000000 --- a/packages/tracing/tslint.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": "@sentry/typescript/tslint" -} diff --git a/packages/utils/src/instrument.ts b/packages/utils/src/instrument.ts index c89bcbc6e89b..7308d9efd892 100644 --- a/packages/utils/src/instrument.ts +++ b/packages/utils/src/instrument.ts @@ -153,6 +153,7 @@ function instrumentFetch(): void { ...commonHandlerData, }); + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access return originalFetch.apply(global, args).then( (response: Response) => { triggerHandlers('fetch', { @@ -188,6 +189,7 @@ interface SentryWrappedXMLHttpRequest extends XMLHttpRequest { }; } +/* eslint-disable @typescript-eslint/no-unsafe-member-access */ /** Extract `method` from fetch call arguments */ function getFetchMethod(fetchArgs: any[] = []): string { if ('Request' in global && isInstanceOf(fetchArgs[0], Request) && fetchArgs[0].method) { @@ -209,6 +211,7 @@ function getFetchUrl(fetchArgs: any[] = []): string { } return String(fetchArgs[0]); } +/* eslint-enable @typescript-eslint/no-unsafe-member-access */ /** JSDoc */ function instrumentXHR(): void { @@ -224,11 +227,13 @@ function instrumentXHR(): void { const xhr = this; const url = args[1]; xhr.__sentry_xhr__ = { + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access method: isString(args[0]) ? args[0].toUpperCase() : args[0], url: args[1], }; // if Sentry key appears in URL, don't capture it as a request + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access if (isString(url) && xhr.__sentry_xhr__.method === 'POST' && url.match(/sentry_key/)) { xhr.__sentry_own_request__ = true; } @@ -340,12 +345,14 @@ function instrumentDOM(): void { // After hooking into document bubbled up click and keypresses events, we also hook into user handled click & keypresses. ['EventTarget', 'Node'].forEach((target: string) => { + /* eslint-disable @typescript-eslint/no-unsafe-member-access */ const proto = (global as any)[target] && (global as any)[target].prototype; // eslint-disable-next-line no-prototype-builtins if (!proto || !proto.hasOwnProperty || !proto.hasOwnProperty('addEventListener')) { return; } + /* eslint-enable @typescript-eslint/no-unsafe-member-access */ fill(proto, 'addEventListener', function( original: () => void, diff --git a/packages/utils/src/is.ts b/packages/utils/src/is.ts index 855863d5ccb2..4e563ba43649 100644 --- a/packages/utils/src/is.ts +++ b/packages/utils/src/is.ts @@ -124,6 +124,7 @@ export function isRegExp(wat: any): boolean { * @param wat A value to be checked. */ export function isThenable(wat: any): boolean { + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access return Boolean(wat && wat.then && typeof wat.then === 'function'); } diff --git a/packages/utils/src/memo.ts b/packages/utils/src/memo.ts index 37848fc9587b..81e1c9c74a79 100644 --- a/packages/utils/src/memo.ts +++ b/packages/utils/src/memo.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/no-explicit-any */ /* eslint-disable @typescript-eslint/explicit-module-boundary-types */ /** diff --git a/packages/utils/src/misc.ts b/packages/utils/src/misc.ts index 4448fef110ee..551d4ece9e8e 100644 --- a/packages/utils/src/misc.ts +++ b/packages/utils/src/misc.ts @@ -28,6 +28,7 @@ interface SentryGlobal { */ // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types export function dynamicRequire(mod: any, request: string): any { + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access return mod.require(request); } diff --git a/packages/utils/src/object.ts b/packages/utils/src/object.ts index 1318dad98d53..02e5ec7bb1e4 100644 --- a/packages/utils/src/object.ts +++ b/packages/utils/src/object.ts @@ -253,10 +253,12 @@ export function walk(key: string, value: any, depth: number = +Infinity, memo: M return serializeValue(value); } + /* eslint-disable @typescript-eslint/no-unsafe-member-access */ // If value implements `toJSON` method, call it and return early if (value !== null && value !== undefined && typeof value.toJSON === 'function') { return value.toJSON(); } + /* eslint-enable @typescript-eslint/no-unsafe-member-access */ // If normalized value is 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 const normalized = normalizeValue(value, key); diff --git a/packages/utils/src/supports.ts b/packages/utils/src/supports.ts index 7185536e95ef..a7c98f1bb5ab 100644 --- a/packages/utils/src/supports.ts +++ b/packages/utils/src/supports.ts @@ -166,9 +166,11 @@ export function supportsHistory(): boolean { // a try/catch block*, will cause Chrome to output an error to console.error // borrowed from: https://github.com/angular/angular.js/pull/13945/files const global = getGlobalObject(); + /* eslint-disable @typescript-eslint/no-unsafe-member-access */ // eslint-disable-next-line @typescript-eslint/no-explicit-any const chrome = (global as any).chrome; const isChromePackagedApp = chrome && chrome.app && chrome.app.runtime; + /* eslint-enable @typescript-eslint/no-unsafe-member-access */ const hasHistoryApi = 'history' in global && !!global.history.pushState && !!global.history.replaceState; return !isChromePackagedApp && hasHistoryApi; diff --git a/scripts/danger.sh b/scripts/danger.sh index 48e75309c77e..bc3fa4480f1f 100755 --- a/scripts/danger.sh +++ b/scripts/danger.sh @@ -5,7 +5,7 @@ yarn # We have to build it first, so that TypeScript Types are recognized correctly yarn build if [[ ! -z $DANGER_GITHUB_API_TOKEN ]]; then - yarn lint:json + yarn lint yarn test yarn codecov yarn danger ci || true # for external PRs danger will fail because of token diff --git a/yarn.lock b/yarn.lock index 14f40ee66e2f..d51d8e7dd23d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2879,30 +2879,19 @@ dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@^3.7.1": - version "3.7.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.7.1.tgz#d144c49a9a0ffe8dd704bb179c243df76c111bc9" - integrity sha512-3DB9JDYkMrc8Au00rGFiJLK2Ja9CoMP6Ut0sHsXp3ZtSugjNxvSSHTnKLfo4o+QmjYBJqEznDqsG1zj4F2xnsg== +"@typescript-eslint/eslint-plugin@^3.9.0": + version "3.9.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.9.0.tgz#0fe529b33d63c9a94f7503ca2bb12c84b9477ff3" + integrity sha512-UD6b4p0/hSe1xdTvRCENSx7iQ+KR6ourlZFfYuPC7FlXEzdHuLPrEmuxZ23b2zW96KJX9Z3w05GE/wNOiEzrVg== dependencies: - "@typescript-eslint/experimental-utils" "3.7.1" + "@typescript-eslint/experimental-utils" "3.9.0" debug "^4.1.1" functional-red-black-tree "^1.0.1" regexpp "^3.0.0" semver "^7.3.2" tsutils "^3.17.1" -"@typescript-eslint/experimental-utils@3.7.1": - version "3.7.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-3.7.1.tgz#ab036caaed4c870d22531d41f9352f3147364d61" - integrity sha512-TqE97pv7HrqWcGJbLbZt1v59tcqsSVpWTOf1AqrWK7n8nok2sGgVtYRuGXeNeLw3wXlLEbY1MKP3saB2HsO/Ng== - dependencies: - "@types/json-schema" "^7.0.3" - "@typescript-eslint/types" "3.7.1" - "@typescript-eslint/typescript-estree" "3.7.1" - eslint-scope "^5.0.0" - eslint-utils "^2.0.0" - -"@typescript-eslint/experimental-utils@^2.19.2 || ^3.0.0": +"@typescript-eslint/experimental-utils@3.9.0", "@typescript-eslint/experimental-utils@^2.19.2 || ^3.0.0": version "3.9.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-3.9.0.tgz#3171d8ddba0bf02a8c2034188593630914fcf5ee" integrity sha512-/vSHUDYizSOhrOJdjYxPNGfb4a3ibO8zd4nUKo/QBFOmxosT3cVUV7KIg8Dwi6TXlr667G7YPqFK9+VSZOorNA== @@ -2913,41 +2902,22 @@ eslint-scope "^5.0.0" eslint-utils "^2.0.0" -"@typescript-eslint/parser@^3.7.1": - version "3.7.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-3.7.1.tgz#5d9ccecb116d12d9c6073e9861c57c9b1aa88128" - integrity sha512-W4QV/gXvfIsccN8225784LNOorcm7ch68Fi3V4Wg7gmkWSQRKevO4RrRqWo6N/Z/myK1QAiGgeaXN57m+R/8iQ== +"@typescript-eslint/parser@^3.9.0": + version "3.9.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-3.9.0.tgz#344978a265d9a5c7c8f13e62c78172a4374dabea" + integrity sha512-rDHOKb6uW2jZkHQniUQVZkixQrfsZGUCNWWbKWep4A5hGhN5dLHMUCNAWnC4tXRlHedXkTDptIpxs6e4Pz8UfA== dependencies: "@types/eslint-visitor-keys" "^1.0.0" - "@typescript-eslint/experimental-utils" "3.7.1" - "@typescript-eslint/types" "3.7.1" - "@typescript-eslint/typescript-estree" "3.7.1" + "@typescript-eslint/experimental-utils" "3.9.0" + "@typescript-eslint/types" "3.9.0" + "@typescript-eslint/typescript-estree" "3.9.0" eslint-visitor-keys "^1.1.0" -"@typescript-eslint/types@3.7.1": - version "3.7.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-3.7.1.tgz#90375606b2fd73c1224fe9e397ee151e28fa1e0c" - integrity sha512-PZe8twm5Z4b61jt7GAQDor6KiMhgPgf4XmUb9zdrwTbgtC/Sj29gXP1dws9yEn4+aJeyXrjsD9XN7AWFhmnUfg== - "@typescript-eslint/types@3.9.0": version "3.9.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-3.9.0.tgz#be9d0aa451e1bf3ce99f2e6920659e5b2e6bfe18" integrity sha512-rb6LDr+dk9RVVXO/NJE8dT1pGlso3voNdEIN8ugm4CWM5w5GimbThCMiMl4da1t5u3YwPWEwOnKAULCZgBtBHg== -"@typescript-eslint/typescript-estree@3.7.1": - version "3.7.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-3.7.1.tgz#ce1ffbd0fa53f34d4ce851a7a364e392432f6eb3" - integrity sha512-m97vNZkI08dunYOr2lVZOHoyfpqRs0KDpd6qkGaIcLGhQ2WPtgHOd/eVbsJZ0VYCQvupKrObAGTOvk3tfpybYA== - dependencies: - "@typescript-eslint/types" "3.7.1" - "@typescript-eslint/visitor-keys" "3.7.1" - debug "^4.1.1" - glob "^7.1.6" - is-glob "^4.0.1" - lodash "^4.17.15" - semver "^7.3.2" - tsutils "^3.17.1" - "@typescript-eslint/typescript-estree@3.9.0": version "3.9.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-3.9.0.tgz#c6abbb50fa0d715cab46fef67ca6378bf2eaca13" @@ -2962,13 +2932,6 @@ semver "^7.3.2" tsutils "^3.17.1" -"@typescript-eslint/visitor-keys@3.7.1": - version "3.7.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-3.7.1.tgz#b90191e74efdee656be8c5a30f428ed16dda46d1" - integrity sha512-xn22sQbEya+Utj2IqJHGLA3i1jDzR43RzWupxojbSWnj3nnPLavaQmWe5utw03CwYao3r00qzXfgJMGNkrzrAA== - dependencies: - eslint-visitor-keys "^1.1.0" - "@typescript-eslint/visitor-keys@3.9.0": version "3.9.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-3.9.0.tgz#44de8e1b1df67adaf3b94d6b60b80f8faebc8dd3" @@ -3287,11 +3250,6 @@ JSONStream@^1.0.4, JSONStream@^1.3.4: jsonparse "^1.2.0" through ">=2.2.7 <3" -abab@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.4.tgz#5faad9c2c07f60dd76770f71cf025b62a63cfd4e" - integrity sha1-X6rZwsB/YN12dw9xzwJbYqY8/U4= - abab@^2.0.0, abab@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.3.tgz#623e2075e02eb2d3f2475e49f99c91846467907a" @@ -3336,13 +3294,6 @@ acorn-dynamic-import@^3.0.0: dependencies: acorn "^5.0.0" -acorn-globals@^1.0.4: - version "1.0.9" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-1.0.9.tgz#55bb5e98691507b74579d0513413217c380c54cf" - integrity sha1-VbtemGkVB7dFedBRNBMhfDgMVM8= - dependencies: - acorn "^2.1.0" - acorn-globals@^4.1.0, acorn-globals@^4.3.0, acorn-globals@^4.3.2: version "4.3.4" resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.4.tgz#9fa1926addc11c97308c4e66d7add0d40c3272e7" @@ -3359,13 +3310,6 @@ acorn-globals@^6.0.0: acorn "^7.1.1" acorn-walk "^7.1.1" -acorn-jsx@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" - integrity sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s= - dependencies: - acorn "^3.0.4" - acorn-jsx@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.2.0.tgz#4c66069173d6fdd68ed85239fc256226182b2ebe" @@ -3381,17 +3325,7 @@ acorn-walk@^7.1.1: resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== -acorn@^2.1.0, acorn@^2.4.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-2.7.0.tgz#ab6e7d9d886aaca8b085bc3312b79a198433f0e7" - integrity sha1-q259nYhqrKiwhbwzEreaGYQz8Oc= - -acorn@^3.0.4: - version "3.3.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" - integrity sha1-ReN/s56No/JbruP/U2niu18iAXo= - -acorn@^5.0.0, acorn@^5.5.0, acorn@^5.5.3, acorn@^5.6.2: +acorn@^5.0.0, acorn@^5.5.3, acorn@^5.6.2: version "5.7.4" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e" integrity sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg== @@ -3406,11 +3340,6 @@ acorn@^7.1.0, acorn@^7.1.1, acorn@^7.3.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.3.1.tgz#85010754db53c3fbaf3b9ea3e083aa5c5d147ffd" integrity sha512-tLc0wSnatxAQHVHUapaHdz72pi9KUyHjq5KyHjGg9Y8Ifdc79pTh2XvI6I1/chZbnM7QtNKzh66ooDogPZSleA== -address@^1.0.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6" - integrity sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA== - after@0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" @@ -3433,26 +3362,11 @@ ajv-errors@^1.0.0: resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== -ajv-keywords@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762" - integrity sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I= - ajv-keywords@^3.1.0, ajv-keywords@^3.4.1: version "3.5.1" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.1.tgz#b83ca89c5d42d69031f424cad49aada0236c6957" integrity sha512-KWcq3xN8fDjSB+IMoh2VaXVhRI0BBGxoYp3rx7Pkb6z0cFjYR9Q9l4yZqqals0/zsioCmocC5H6UvsGD4MoIBA== -ajv@^5.2.3, ajv@^5.3.0: - version "5.5.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" - integrity sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU= - dependencies: - co "^4.6.0" - fast-deep-equal "^1.0.0" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.3.0" - ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.2, ajv@^6.5.5: version "6.12.3" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.3.tgz#18c5af38a111ddeb4f2697bd78d68abc1cabd706" @@ -3463,15 +3377,6 @@ ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.2, ajv@^6.5.5: 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" - alphanum-sort@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" @@ -3497,13 +3402,6 @@ amdefine@>=0.0.4: resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= -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-colors@3.2.3: version "3.2.3" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.3.tgz#57d35b8686e851e2cc04c403f1c00203976a1813" @@ -3636,28 +3534,6 @@ argparse@^1.0.7: 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" - minimist "1.2.0" - pkginfo "0.4.0" - string-similarity "1.1.0" - -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" - minimist "1.2.0" - pkginfo "0.4.0" - string-similarity "1.1.0" - argv@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/argv/-/argv-0.0.2.tgz#ecbd16f8949b157183711b1bda334f37840185ab" @@ -3772,6 +3648,15 @@ array.prototype.flat@^1.2.3: define-properties "^1.1.3" es-abstract "^1.17.0-next.1" +array.prototype.flatmap@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.3.tgz#1c13f84a178566042dd63de4414440db9222e443" + integrity sha512-OOEk+lkePcg+ODXIpvuU9PAryCikCJyo7GlDG1upleEpQRx6mzL9puEBkozQ5iAx20KV0l3DbyQwqciJtqe5Pg== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + function-bind "^1.1.1" + arraybuffer.slice@~0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675" @@ -3900,15 +3785,7 @@ async-promise-queue@^1.0.3, async-promise-queue@^1.0.5: async "^2.4.1" debug "^2.6.8" -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: +async@1.x: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= @@ -3967,7 +3844,7 @@ aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.10.0.tgz#a17b3a8ea811060e74d47d306122400ad4497ae2" integrity sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA== -babel-code-frame@^6.22.0, babel-code-frame@^6.26.0, babel-code-frame@^6.8.0: +babel-code-frame@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= @@ -4013,18 +3890,6 @@ babel-eslint@^10.1.0: eslint-visitor-keys "^1.0.0" resolve "^1.12.0" -babel-generator@6.11.4: - version "6.11.4" - resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.11.4.tgz#14f6933abb20c62666d27e3b7b9f5b9dc0712a9a" - integrity sha1-FPaTOrsgxiZm0n47e59bncBxKpo= - dependencies: - babel-messages "^6.8.0" - babel-runtime "^6.9.0" - babel-types "^6.10.2" - detect-indent "^3.0.1" - lodash "^4.2.0" - source-map "^0.5.0" - babel-generator@^6.26.0: version "6.26.1" resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" @@ -4176,7 +4041,7 @@ babel-loader@^8.0.6: pify "^4.0.1" schema-utils "^2.6.5" -babel-messages@^6.23.0, babel-messages@^6.8.0: +babel-messages@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" integrity sha1-8830cDhYA1sqKVHG7F7fbGLyYw4= @@ -4591,7 +4456,7 @@ babel-register@^6.26.0: mkdirp "^0.5.1" source-map-support "^0.4.15" -babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0, babel-runtime@^6.9.0: +babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= @@ -4610,21 +4475,6 @@ babel-template@^6.24.1, babel-template@^6.26.0: babylon "^6.18.0" lodash "^4.17.4" -babel-traverse@6.12.0: - version "6.12.0" - resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.12.0.tgz#f22f54fa0d6eeb7f63585246bab6e637858f5d94" - integrity sha1-8i9U+g1u639jWFJGurbmN4WPXZQ= - dependencies: - babel-code-frame "^6.8.0" - babel-messages "^6.8.0" - babel-runtime "^6.9.0" - babel-types "^6.9.0" - babylon "^6.7.0" - debug "^2.2.0" - globals "^8.3.0" - invariant "^2.2.0" - lodash "^4.2.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" @@ -4640,7 +4490,7 @@ babel-traverse@^6.24.1, babel-traverse@^6.26.0: invariant "^2.2.2" lodash "^4.17.4" -babel-types@^6.10.2, babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0, babel-types@^6.9.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" integrity sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc= @@ -4650,12 +4500,7 @@ babel-types@^6.10.2, babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26 lodash "^4.17.4" to-fast-properties "^1.0.3" -babylon@6.14.1: - version "6.14.1" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.14.1.tgz#956275fab72753ad9b3435d7afe58f8bf0a29815" - integrity sha1-lWJ1+rcnU62bNDXXr+WPi/CimBU= - -babylon@^6.14.0, babylon@^6.18.0, babylon@^6.7.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== @@ -4715,11 +4560,6 @@ base@^0.11.1: mixin-deep "^1.2.0" pascalcase "^0.1.1" -basic-auth@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-1.1.0.tgz#45221ee429f7ee1e5035be3f51533f1cdfd29884" - integrity sha1-RSIe5Cn37h5QNb4/UVM/HN/SmIQ= - basic-auth@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-2.0.1.tgz#b998279bf47ce38344b4f3cf916d4679bbf51e3a" @@ -4798,11 +4638,6 @@ blob@0.0.5: resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.5.tgz#d680eeef25f8cd91ad533f5b01eed48e64caf683" integrity sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig== -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.1.1, bluebird@^3.3.0, bluebird@^3.4.6, bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.5.5: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" @@ -4874,32 +4709,6 @@ bower-endpoint-parser@0.2.2: resolved "https://registry.yarnpkg.com/bower-endpoint-parser/-/bower-endpoint-parser-0.2.2.tgz#00b565adbfab6f2d35addde977e97962acbcb3f6" integrity sha1-ALVlrb+rby01rd3pd+l5Yqy8s/Y= -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" - chalk "^1.1.1" - cli-boxes "^1.0.0" - string-width "^2.0.0" - term-size "^0.1.0" - widest-line "^1.0.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" - chalk "^2.0.1" - cli-boxes "^1.0.0" - string-width "^2.0.0" - term-size "^1.2.0" - widest-line "^2.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" @@ -5671,11 +5480,6 @@ buffer@^5.2.1: base64-js "^1.0.2" ieee754 "^1.1.4" -builtin-modules@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" - integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= - builtin-modules@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.1.0.tgz#aad97c15131eb76b65b50ef208e7584cd76a7484" @@ -5706,11 +5510,6 @@ bytes@1: resolved "https://registry.yarnpkg.com/bytes/-/bytes-1.0.0.tgz#3569ede8ba34315fab99c3e92cb04c7220de1fa8" integrity sha1-NWnt6Lo0MV+rmcPpLLBMciDeH6g= -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" @@ -5809,13 +5608,6 @@ caller-callsite@^2.0.0: dependencies: callsites "^2.0.0" -caller-path@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" - integrity sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8= - dependencies: - callsites "^0.2.0" - caller-path@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" @@ -5828,11 +5620,6 @@ callsite@1.0.0: resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20" integrity sha1-KAOY5dZkvXQDi28JBRU+borxvCA= -callsites@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" - integrity sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo= - callsites@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" @@ -5869,21 +5656,16 @@ camelcase-keys@^6.2.2: map-obj "^4.0.0" quick-lru "^4.0.1" -camelcase@4.1.0, camelcase@^4.0.0, camelcase@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" - integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= - -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@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" + integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= + camelcase@^5.0.0, camelcase@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" @@ -5941,14 +5723,6 @@ caseless@~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" - chai@^4.1.2: version "4.2.0" resolved "https://registry.yarnpkg.com/chai/-/chai-4.2.0.tgz#760aa72cf20e3795e84b12877ce0e83737aa29e5" @@ -5961,7 +5735,7 @@ chai@^4.1.2: pathval "^1.1.0" type-detect "^4.0.5" -chalk@1.1.3, chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: +chalk@^1.0.0, chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= @@ -5997,11 +5771,6 @@ chalk@^4.0.0, chalk@^4.1.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -chardet@^0.4.0: - version "0.4.2" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" - integrity sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I= - chardet@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" @@ -6024,41 +5793,6 @@ check-types@^8.0.3: resolved "https://registry.yarnpkg.com/check-types/-/check-types-8.0.3.tgz#3356cca19c889544f2d7a95ed49ce508a0ecf552" integrity sha512-YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ== -cheerio@0.20.0: - version "0.20.0" - resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-0.20.0.tgz#5c710f2bab95653272842ba01c6ea61b3545ec35" - integrity sha1-XHEPK6uVZTJyhCugHG6mGzVF7DU= - dependencies: - css-select "~1.2.0" - dom-serializer "~0.1.0" - entities "~1.1.1" - htmlparser2 "~3.8.1" - lodash "^4.1.0" - optionalDependencies: - jsdom "^7.0.2" - -cheerio@0.22.0: - version "0.22.0" - resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-0.22.0.tgz#a9baa860a3f9b595a6b81b1a86873121ed3a269e" - integrity sha1-qbqoYKP5tZWmuBsahocxIe06Jp4= - dependencies: - css-select "~1.2.0" - dom-serializer "~0.1.0" - entities "~1.1.1" - htmlparser2 "^3.9.1" - lodash.assignin "^4.0.9" - lodash.bind "^4.1.4" - lodash.defaults "^4.0.1" - lodash.filter "^4.4.0" - lodash.flatten "^4.2.0" - lodash.foreach "^4.3.0" - lodash.map "^4.4.0" - lodash.merge "^4.4.0" - lodash.pick "^4.2.1" - lodash.reduce "^4.4.0" - lodash.reject "^4.4.0" - lodash.some "^4.4.0" - chokidar@^2.1.8: version "2.1.8" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" @@ -6128,11 +5862,6 @@ 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.3.1: - version "0.3.3" - resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" - integrity sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A== - class-utils@^0.3.5: version "0.3.6" resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" @@ -6170,11 +5899,6 @@ clean-up-path@^1.0.0: resolved "https://registry.yarnpkg.com/clean-up-path/-/clean-up-path-1.0.0.tgz#de9e8196519912e749c9eaf67c13d64fac72a3e5" integrity sha512-PHGlEF0Z6976qQyN6gM7kKH6EH0RdfZcc8V+QhFe36eRxV0SMH5OUBZG7Bxa9YcreNzyNbK63cGiZxdSZgosRw== -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" @@ -6221,29 +5945,6 @@ cli-width@^3.0.0: resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== -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" - wordwrap "0.0.2" - cliui@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" @@ -6348,11 +6049,6 @@ color-convert@^2.0.1: dependencies: color-name "~1.1.4" -color-logger@0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/color-logger/-/color-logger-0.0.3.tgz#d9b22dd1d973e166b18bf313f9f481bba4df2018" - integrity sha1-2bIt0dlz4Waxi/MT+fSBu6TfIBg= - color-name@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" @@ -6431,7 +6127,7 @@ commander@2.8.x: dependencies: graceful-readlink ">= 1.0.0" -commander@^2.12.1, commander@^2.18.0, commander@^2.19.0, commander@^2.20.0, commander@^2.6.0: +commander@^2.18.0, commander@^2.19.0, commander@^2.20.0, commander@^2.6.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== @@ -6501,7 +6197,7 @@ compressible@^2.0.12, compressible@~2.0.16: dependencies: mime-db ">= 1.43.0 < 2" -compression@^1.6.2, compression@^1.7.4: +compression@^1.7.4: version "1.7.4" resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== @@ -6519,7 +6215,7 @@ concat-map@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: +concat-stream@^1.5.0: version "1.6.2" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== @@ -6547,18 +6243,6 @@ config-chain@^1.1.11: ini "^1.3.4" proto-list "~1.2.1" -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" - make-dir "^1.0.0" - unique-string "^1.0.0" - write-file-atomic "^2.0.0" - xdg-basedir "^3.0.0" - configstore@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/configstore/-/configstore-4.0.0.tgz#5933311e95d3687efb592c528b922d9262d227e7" @@ -6901,15 +6585,7 @@ create-react-context@^0.2.2: fbjs "^0.8.0" gud "^1.0.0" -cross-spawn-async@^2.1.1: - version "2.2.5" - 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" - -cross-spawn@^5.0.1, cross-spawn@^5.1.0: +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= @@ -7012,16 +6688,6 @@ css-select@^2.0.0: domutils "^1.7.0" nth-check "^1.0.2" -css-select@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" - integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg= - dependencies: - boolbase "~1.0.0" - css-what "2.1" - domutils "1.5.1" - nth-check "~1.0.1" - css-tree@1.0.0-alpha.37: version "1.0.0-alpha.37" resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22" @@ -7038,11 +6704,6 @@ css-tree@1.0.0-alpha.39: mdn-data "2.0.6" source-map "^0.6.1" -css-what@2.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2" - integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg== - css-what@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.3.0.tgz#10fec696a9ece2e591ac772d759aacabac38cd39" @@ -7128,7 +6789,7 @@ csso@^4.0.2: dependencies: css-tree "1.0.0-alpha.39" -cssom@0.3.x, "cssom@>= 0.3.0 < 0.4.0", "cssom@>= 0.3.2 < 0.4.0", cssom@^0.3.4, cssom@~0.3.6: +cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0", cssom@^0.3.4, cssom@~0.3.6: version "0.3.8" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== @@ -7138,13 +6799,6 @@ cssom@^0.4.1, cssom@^0.4.4: resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== -"cssstyle@>= 0.2.29 < 0.3.0": - version "0.2.37" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-0.2.37.tgz#541097234cb2513c83ceed3acddc27ff27987d54" - integrity sha1-VBCXI0yyUTyDzu06zdwn/yeYfVQ= - dependencies: - cssom "0.3.x" - cssstyle@^1.0.0, cssstyle@^1.1.1: version "1.4.0" resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-1.4.0.tgz#9d31328229d3c565c61e586b02041a28fccdccf1" @@ -7186,24 +6840,6 @@ dag-map@^2.0.2: resolved "https://registry.yarnpkg.com/dag-map/-/dag-map-2.0.2.tgz#9714b472de82a1843de2fba9b6876938cab44c68" integrity sha1-lxS0ct6CoYQ94vuptodpOMq0TGg= -danger-plugin-eslint@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/danger-plugin-eslint/-/danger-plugin-eslint-0.1.0.tgz#5c60f40b32f6c2dd29a920337ca5394e769b825c" - integrity sha512-D/6KEsyRc6MZMIUMO1R221F6osW30vhxomPSg0bzCEDpq5cdSdsa2v7bbZbxTiOYpKXrC11nLRf6urd9gZXoMg== - dependencies: - eslint "^4.12.1" - optionalDependencies: - esdoc "^0.5.2" - -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@^7.1.3: version "7.1.4" resolved "https://registry.yarnpkg.com/danger/-/danger-7.1.4.tgz#de068b9277143505a7aaa698f27aac90c00303ae" @@ -7244,11 +6880,6 @@ danger@^7.1.3: rfc6902 "^3.0.1" supports-hyperlinks "^1.0.1" -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" @@ -7309,14 +6940,7 @@ debounce@^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.0, debug@^2.1.1, debug@^2.1.3, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.8, debug@^2.6.9: +debug@2.6.9, debug@^2.1.0, debug@^2.1.1, debug@^2.1.3, debug@^2.2.0, debug@^2.3.3, 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== @@ -7357,7 +6981,7 @@ decamelize-keys@^1.0.0, decamelize-keys@^1.1.0: decamelize "^1.1.0" map-obj "^1.0.0" -decamelize@^1.0.0, decamelize@^1.1.0, decamelize@^1.1.1, decamelize@^1.1.2, decamelize@^1.2.0: +decamelize@^1.1.0, decamelize@^1.1.1, decamelize@^1.1.2, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= @@ -7447,7 +7071,7 @@ delegates@^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: +depd@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= @@ -7480,15 +7104,6 @@ detect-file@^1.0.0: resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= -detect-indent@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-3.0.1.tgz#9dc5e5ddbceef8325764b9451b02bc6d54084f75" - integrity sha1-ncXl3bzu+DJXZLlFGwK8bVQIT3U= - dependencies: - get-stdin "^4.0.1" - minimist "^1.1.0" - repeating "^1.1.0" - detect-indent@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" @@ -7516,14 +7131,6 @@ detect-newline@^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" - dezalgo@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456" @@ -7542,7 +7149,7 @@ diff-sequences@^24.9.0: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.9.0.tgz#5715d6244e2aa65f48bba0bc972db0b0b11e95b5" integrity sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew== -diff@3.5.0, diff@^3.2.0, diff@^3.5.0: +diff@3.5.0, diff@^3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== @@ -7621,20 +7228,12 @@ dom-serializer@0: domelementtype "^2.0.1" entities "^2.0.0" -dom-serializer@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0" - integrity sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA== - dependencies: - domelementtype "^1.3.0" - entities "^1.1.1" - 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" integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== -domelementtype@1, domelementtype@^1.3.0, domelementtype@^1.3.1: +domelementtype@1: version "1.3.1" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== @@ -7658,29 +7257,7 @@ domexception@^2.0.1: dependencies: webidl-conversions "^5.0.0" -domhandler@2.3: - version "2.3.0" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.3.0.tgz#2de59a0822d5027fabff6f032c2b25a2a8abe738" - integrity sha1-LeWaCCLVAn+r/28DLCsloqir5zg= - dependencies: - domelementtype "1" - -domhandler@^2.3.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" - integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== - dependencies: - domelementtype "1" - -domutils@1.5, domutils@1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" - integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8= - dependencies: - dom-serializer "0" - domelementtype "1" - -domutils@^1.5.1, domutils@^1.7.0: +domutils@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== @@ -8475,7 +8052,7 @@ emojis-list@^3.0.0: resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== -encodeurl@~1.0.1, encodeurl@~1.0.2: +encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= @@ -8600,12 +8177,7 @@ ent@^2.2.0, ent@~2.2.0: resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d" integrity sha1-6WQhkyWiHQX0RGai9obtbOX13R0= -entities@1.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-1.0.0.tgz#b2987aa3821347fcde642b24fdfc9e4fb712bf26" - integrity sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY= - -entities@^1.1.1, entities@^1.1.2, entities@~1.1.1: +entities@^1.1.2, entities@~1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== @@ -8682,7 +8254,7 @@ escalade@^3.0.1: resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.0.2.tgz#6a580d70edb87880f22b4c91d0d56078df6962c4" integrity sha512-gPYAU37hYCUhW5euPeR+Y74F7BL+IBsV93j5cvGriSaD1aG6MGsqsV1yamRdrWrb2j3aiZvb0X+UBOWpx3JWtQ== -escape-html@1.0.3, escape-html@~1.0.3: +escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= @@ -8709,7 +8281,7 @@ escodegen@1.8.x: optionalDependencies: source-map "~0.2.0" -escodegen@^1.11.0, escodegen@^1.11.1, escodegen@^1.14.1, escodegen@^1.6.1, escodegen@^1.9.1: +escodegen@^1.11.0, escodegen@^1.11.1, escodegen@^1.14.1, escodegen@^1.9.1: version "1.14.3" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== @@ -8721,23 +8293,6 @@ escodegen@^1.11.0, escodegen@^1.11.1, escodegen@^1.14.1, escodegen@^1.6.1, escod optionalDependencies: source-map "~0.6.1" -esdoc@^0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/esdoc/-/esdoc-0.5.2.tgz#cbfd0b20e3d1cacc23c93c328eed987e21ba0067" - integrity sha1-y/0LIOPRyswjyTwyju2YfiG6AGc= - dependencies: - babel-generator "6.11.4" - babel-traverse "6.12.0" - babylon "6.14.1" - cheerio "0.22.0" - color-logger "0.0.3" - escape-html "1.0.3" - fs-extra "1.0.0" - ice-cap "0.0.4" - marked "0.3.6" - minimist "1.2.0" - taffydb "2.7.2" - eslint-config-prettier@^6.11.0: version "6.11.0" resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.11.0.tgz#f6d2238c1290d01c859a8b5c1f7d352a0b0da8b1" @@ -8832,7 +8387,29 @@ eslint-plugin-node@^11.1.0: resolve "^1.10.1" semver "^6.1.0" -"eslint-plugin-sentry-sdk@file:./eslint-plugin-sentry-sdk": +eslint-plugin-react-hooks@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.0.8.tgz#a9b1e3d57475ccd18276882eff3d6cba00da7a56" + integrity sha512-6SSb5AiMCPd8FDJrzah+Z4F44P2CdOaK026cXFV+o/xSRzfOiV1FNFeLl2z6xm3yqWOQEZ5OfVgiec90qV2xrQ== + +eslint-plugin-react@^7.20.5: + version "7.20.5" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.20.5.tgz#29480f3071f64a04b2c3d99d9b460ce0f76fb857" + integrity sha512-ajbJfHuFnpVNJjhyrfq+pH1C0gLc2y94OiCbAXT5O0J0YCKaFEHDV8+3+mDOr+w8WguRX+vSs1bM2BDG0VLvCw== + dependencies: + array-includes "^3.1.1" + array.prototype.flatmap "^1.2.3" + doctrine "^2.1.0" + has "^1.0.3" + jsx-ast-utils "^2.4.1" + object.entries "^1.1.2" + object.fromentries "^2.0.2" + object.values "^1.1.1" + prop-types "^15.7.2" + resolve "^1.17.0" + string.prototype.matchall "^4.0.2" + +"eslint-plugin-sentry-sdks@file:./eslint-plugin-sentry-sdks": version "0.0.1" eslint-plugin-simple-import-sort@^5.0.3: @@ -8840,14 +8417,6 @@ eslint-plugin-simple-import-sort@^5.0.3: resolved "https://registry.yarnpkg.com/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-5.0.3.tgz#9ae258ddada6efffc55e47a134afbd279eb31fc6" integrity sha512-1rf3AWiHeWNCQdAq0iXNnlccnH1UDnelGgrPbjBBHE8d2hXVtOudcmy0vTF4hri3iJ0MKz8jBhmH6lJ0ZWZLHQ== -eslint-scope@^3.7.1: - version "3.7.3" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.3.tgz#bb507200d3d17f60247636160b4826284b108535" - integrity sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA== - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" - eslint-scope@^4.0.0, eslint-scope@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" @@ -8876,50 +8445,6 @@ eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3 resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== -eslint@^4.12.1: - version "4.19.1" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.19.1.tgz#32d1d653e1d90408854bfb296f076ec7e186a300" - integrity sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ== - dependencies: - ajv "^5.3.0" - babel-code-frame "^6.22.0" - chalk "^2.1.0" - concat-stream "^1.6.0" - cross-spawn "^5.1.0" - debug "^3.1.0" - doctrine "^2.1.0" - eslint-scope "^3.7.1" - eslint-visitor-keys "^1.0.0" - espree "^3.5.4" - esquery "^1.0.0" - esutils "^2.0.2" - file-entry-cache "^2.0.0" - functional-red-black-tree "^1.0.1" - glob "^7.1.2" - globals "^11.0.1" - ignore "^3.3.3" - imurmurhash "^0.1.4" - inquirer "^3.0.6" - is-resolvable "^1.0.0" - js-yaml "^3.9.1" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.3.0" - lodash "^4.17.4" - minimatch "^3.0.2" - mkdirp "^0.5.1" - natural-compare "^1.4.0" - optionator "^0.8.2" - path-is-inside "^1.0.2" - pluralize "^7.0.0" - progress "^2.0.0" - regexpp "^1.0.1" - require-uncached "^1.0.3" - semver "^5.3.0" - strip-ansi "^4.0.0" - strip-json-comments "~2.0.1" - table "4.0.2" - text-table "~0.2.0" - eslint@^7.5.0: version "7.5.0" resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.5.0.tgz#9ecbfad62216d223b82ac9ffea7ef3444671d135" @@ -8967,14 +8492,6 @@ esm@^3.2.4: resolved "https://registry.yarnpkg.com/esm/-/esm-3.2.25.tgz#342c18c29d56157688ba5ce31f8431fbb795cc10" integrity sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA== -espree@^3.5.4: - version "3.5.4" - resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.4.tgz#b0f447187c8a8bed944b815a660bddf5deb5d1a7" - integrity sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A== - dependencies: - acorn "^5.5.0" - acorn-jsx "^3.0.0" - espree@^7.2.0: version "7.2.0" resolved "https://registry.yarnpkg.com/espree/-/espree-7.2.0.tgz#1c263d5b513dbad0ac30c4991b93ac354e948d69" @@ -8999,7 +8516,7 @@ esprima@~3.0.0: resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.0.0.tgz#53cf247acda77313e551c3aa2e73342d3fb4f7d9" integrity sha1-U88kes2ncxPlUcOqLnM0LT+099k= -esquery@^1.0.0, esquery@^1.2.0: +esquery@^1.2.0: version "1.3.1" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57" integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ== @@ -9038,7 +8555,7 @@ esutils@^2.0.2: resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== -etag@~1.8.0, etag@~1.8.1: +etag@~1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= @@ -9089,18 +8606,6 @@ exec-sh@^0.3.2: resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.4.tgz#3a018ceb526cc6f6df2bb504b2bfe8e3a4934ec5" integrity sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A== -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" - npm-run-path "^1.0.0" - object-assign "^4.0.1" - path-key "^1.0.0" - strip-eof "^1.0.0" - execa@^0.6.0: version "0.6.3" resolved "https://registry.yarnpkg.com/execa/-/execa-0.6.3.tgz#57b69a594f081759c69e5370f0d17b9cb11658fe" @@ -9114,19 +8619,6 @@ execa@^0.6.0: signal-exit "^3.0.0" strip-eof "^1.0.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" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - execa@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" @@ -9274,15 +8766,6 @@ extend@^3.0.0, extend@^3.0.1, extend@^3.0.2, extend@~3.0.2: resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== -external-editor@^2.0.4: - version "2.2.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5" - integrity sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A== - dependencies: - chardet "^0.4.0" - iconv-lite "^0.4.17" - tmp "^0.0.33" - external-editor@^3.0.3: version "3.1.0" resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" @@ -9316,11 +8799,6 @@ extsprintf@^1.2.0: resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= -fast-deep-equal@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" - integrity sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ= - fast-deep-equal@^3.1.1: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" @@ -9453,14 +8931,6 @@ figures@^3.0.0: dependencies: escape-string-regexp "^1.0.5" -file-entry-cache@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" - integrity sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E= - dependencies: - flat-cache "^1.2.1" - object-assign "^4.0.1" - file-entry-cache@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" @@ -9481,11 +8951,6 @@ file-uri-to-path@1.0.0: resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== -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= - filesize@^3.6.1: version "3.6.1" resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.6.1.tgz#090bb3ee01b6f801a8a8be99d31710b3422bb317" @@ -9652,16 +9117,6 @@ fixturify@^2.1.0: matcher-collection "^2.0.1" walk-sync "^2.0.2" -flat-cache@^1.2.1: - version "1.3.4" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.4.tgz#2c2ef77525cc2929007dfffa1dd314aa9c9dee6f" - integrity sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg== - dependencies: - circular-json "^0.3.1" - graceful-fs "^4.1.2" - rimraf "~2.6.2" - write "^0.2.1" - flat-cache@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" @@ -9741,11 +9196,6 @@ fragment-cache@^0.2.1: 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" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" @@ -9776,24 +9226,6 @@ fs-exists-sync@^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@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-1.0.0.tgz#cd3ce5f7e7cb6145883fcae3191e9877f8587950" - integrity sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA= - dependencies: - graceful-fs "^4.1.2" - jsonfile "^2.1.0" - klaw "^1.0.0" - -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@7.0.1, fs-extra@^7.0.0, fs-extra@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" @@ -10012,7 +9444,7 @@ gensync@^1.0.0-beta.1: resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg== -get-caller-file@^1.0.1, get-caller-file@^1.0.2: +get-caller-file@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== @@ -10038,11 +9470,6 @@ get-pkg-repo@^1.0.0: parse-github-repo-url "^1.3.0" through2 "^2.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" @@ -10282,7 +9709,7 @@ global-prefix@^1.0.1: is-windows "^1.0.1" which "^1.2.14" -globals@^11.0.1, globals@^11.1.0: +globals@^11.1.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== @@ -10294,11 +9721,6 @@ globals@^12.1.0: dependencies: type-fest "^0.8.1" -globals@^8.3.0: - version "8.18.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-8.18.0.tgz#93d4a62bdcac38cfafafc47d6b034768cb0ffcb4" - integrity sha1-k9SmK9ysOM+vr8R9awNHaMsP/LQ= - globals@^9.18.0: version "9.18.0" resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" @@ -10406,7 +9828,7 @@ got@^8.0.1: url-parse-lax "^3.0.0" url-to-options "^1.0.1" -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0: +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.2.0: version "4.2.4" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== @@ -10462,17 +9884,6 @@ handlebars@*, handlebars@^4.0.1, handlebars@^4.0.11, handlebars@^4.0.4, handleba optionalDependencies: uglify-js "^3.1.4" -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" - source-map "^0.4.4" - optionalDependencies: - uglify-js "^2.6" - har-schema@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" @@ -10808,29 +10219,6 @@ html-escaper@^2.0.0: resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== -htmlparser2@^3.9.1: - version "3.10.1" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" - integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== - dependencies: - domelementtype "^1.3.1" - domhandler "^2.3.0" - domutils "^1.5.1" - entities "^1.1.1" - inherits "^2.0.1" - readable-stream "^3.1.1" - -htmlparser2@~3.8.1: - version "3.8.3" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.8.3.tgz#996c28b191516a8be86501a7d79757e5c70c1068" - integrity sha1-mWwosZFRaovoZQGn15dX5ccMEGg= - dependencies: - domelementtype "1" - domhandler "2.3" - domutils "1.5" - entities "1.0" - readable-stream "1.1" - http-cache-semantics@3.8.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" @@ -10847,7 +10235,7 @@ http-errors@1.7.2: statuses ">= 1.5.0 < 2" toidentifier "1.0.0" -http-errors@~1.6.1, http-errors@~1.6.2: +http-errors@~1.6.2: version "1.6.3" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= @@ -10959,20 +10347,7 @@ hyperlinker@^1.0.0: resolved "https://registry.yarnpkg.com/hyperlinker/-/hyperlinker-1.0.0.tgz#23dc9e38a206b208ee49bc2d6c8ef47027df0c0e" integrity sha512-Ty8UblRWFEcfSuIaajM34LdPXIhbs1ajEX/BBPv24J+enSVaEVY63xQ6lTO9VRYS5LAoghIG0IDJ+p+IPzKUQQ== -ice-cap@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/ice-cap/-/ice-cap-0.0.4.tgz#8a6d31ab4cac8d4b56de4fa946df3352561b6e18" - integrity sha1-im0xq0ysjUtW3k+pRt8zUlYbbhg= - dependencies: - cheerio "0.20.0" - color-logger "0.0.3" - -iconv-lite@0.4.15: - version "0.4.15" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb" - integrity sha1-/iZaIYrGpXz+hUkn6dBMGYJe3es= - -iconv-lite@0.4.24, iconv-lite@^0.4.17, iconv-lite@^0.4.24: +iconv-lite@0.4.24, iconv-lite@^0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -11010,7 +10385,7 @@ ignore-walk@3.0.3, ignore-walk@^3.0.1: dependencies: minimatch "^3.0.4" -ignore@^3.3.3, ignore@^3.3.5: +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== @@ -11041,11 +10416,6 @@ import-fresh@^3.0.0, import-fresh@^3.1.0: parent-module "^1.0.0" resolve-from "^4.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" @@ -11164,26 +10534,6 @@ inline-source-map@~0.6.0: dependencies: source-map "~0.5.3" -inquirer@^3.0.6: - version "3.3.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" - integrity sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ== - dependencies: - ansi-escapes "^3.0.0" - chalk "^2.0.0" - cli-cursor "^2.1.0" - cli-width "^2.0.0" - external-editor "^2.0.4" - figures "^2.0.0" - lodash "^4.3.0" - mute-stream "0.0.7" - run-async "^2.2.0" - rx-lite "^4.0.8" - rx-lite-aggregates "^4.0.8" - string-width "^2.1.0" - strip-ansi "^4.0.0" - through "^2.3.6" - inquirer@^6, inquirer@^6.2.0: version "6.5.2" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca" @@ -11222,6 +10572,15 @@ inquirer@^7.0.1: strip-ansi "^6.0.0" through "^2.3.6" +internal-slot@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.2.tgz#9c2e9fb3cd8e5e4256c6f45fe310067fcfa378a3" + integrity sha512-2cQNfwhAfJIkU4KZPkDI+Gj5yNNnbqi40W9Gge6dfnk4TocEVm00B3bdiL+JINrbGJil2TeHvM4rETGzk/f/0g== + dependencies: + es-abstract "^1.17.0-next.1" + has "^1.0.3" + side-channel "^1.0.2" + interpret@^1.0.0: version "1.4.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" @@ -11235,7 +10594,7 @@ into-stream@^3.1.0: from2 "^2.1.1" p-is-promise "^1.1.0" -invariant@^2.2.0, invariant@^2.2.1, invariant@^2.2.2, invariant@^2.2.4: +invariant@^2.2.1, invariant@^2.2.2, invariant@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== @@ -11301,11 +10660,6 @@ is-arrayish@^0.3.1: resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== -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" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" @@ -11493,11 +10847,6 @@ is-nan@^1.2.1: dependencies: define-properties "^1.1.3" -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@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" @@ -11728,7 +11077,7 @@ isomorphic-fetch@^2.1.1: node-fetch "^1.0.1" whatwg-fetch ">=0.10.0" -isstream@0.1.2, isstream@~0.1.2: +isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= @@ -12211,7 +11560,7 @@ js-yaml@3.13.1: argparse "^1.0.7" esprima "^4.0.0" -js-yaml@3.x, js-yaml@^3.13.0, js-yaml@^3.13.1, js-yaml@^3.2.5, js-yaml@^3.2.7, js-yaml@^3.9.1: +js-yaml@3.x, js-yaml@^3.13.1, js-yaml@^3.2.5, js-yaml@^3.2.7: version "3.14.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== @@ -12356,27 +11705,6 @@ jsdom@^16.2.2: ws "^7.2.3" xml-name-validator "^3.0.0" -jsdom@^7.0.2: - version "7.2.2" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-7.2.2.tgz#40b402770c2bda23469096bee91ab675e3b1fc6e" - integrity sha1-QLQCdwwr2iNGkJa+6Rq2deOx/G4= - dependencies: - abab "^1.0.0" - acorn "^2.4.0" - acorn-globals "^1.0.4" - cssom ">= 0.3.0 < 0.4.0" - cssstyle ">= 0.2.29 < 0.3.0" - escodegen "^1.6.1" - nwmatcher ">= 1.3.7 < 2.0.0" - parse5 "^1.5.1" - request "^2.55.0" - sax "^1.1.4" - symbol-tree ">= 3.1.0 < 4.0.0" - tough-cookie "^2.2.0" - webidl-conversions "^2.0.0" - whatwg-url-compat "~0.6.5" - xml-name-validator ">= 2.0.1 < 3.0.0" - jsesc@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" @@ -12423,11 +11751,6 @@ json-parse-better-errors@^1.0.0, json-parse-better-errors@^1.0.1, json-parse-bet 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.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" - integrity sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A= - 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" @@ -12481,13 +11804,6 @@ jsonfile@^2.1.0: optionalDependencies: graceful-fs "^4.1.6" -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" @@ -12545,6 +11861,14 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.10.0" +jsx-ast-utils@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.4.1.tgz#1114a4c1209481db06c690c2b4f488cc665f657e" + integrity sha512-z1xSldJ6imESSzOjd3NNkieVJKRlKYSOtMG8SFyCj2FIrvSaSuli/WjpBkEzCBoR9bYYYFgqJw61Xhu7Lcgk+w== + dependencies: + array-includes "^3.1.1" + object.assign "^4.1.0" + just-extend@^4.0.2: version "4.1.0" resolved "https://registry.yarnpkg.com/just-extend/-/just-extend-4.1.0.tgz#7278a4027d889601640ee0ce0e5a00b992467da4" @@ -12758,13 +12082,6 @@ kind-of@^6.0.0, kind-of@^6.0.2, kind-of@^6.0.3: resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== -klaw@^1.0.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" - integrity sha1-QIhDO0azsbolnXh4XY6W9zugJDk= - optionalDependencies: - graceful-fs "^4.1.9" - kleur@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" @@ -12778,23 +12095,6 @@ last-call-webpack-plugin@^3.0.0: lodash "^4.17.5" webpack-sources "^1.1.0" -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" - integrity sha1-yUUKNj7N2i5vDHATKtTzf48G8rQ= - lcid@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" @@ -12851,21 +12151,21 @@ levenary@^1.1.1: dependencies: leven "^3.1.0" -levn@^0.3.0, 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" - levn@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== dependencies: - prelude-ls "^1.2.1" - type-check "~0.4.0" + prelude-ls "^1.2.1" + type-check "~0.4.0" + +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" libnpmaccess@^3.0.1: version "3.0.2" @@ -13057,16 +12357,11 @@ lodash.assign@^3.2.0: lodash._createassigner "^3.0.0" lodash.keys "^3.0.0" -lodash.assignin@^4.0.9, lodash.assignin@^4.1.0: +lodash.assignin@^4.1.0: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.assignin/-/lodash.assignin-4.2.0.tgz#ba8df5fb841eb0a3e8044232b0e263a8dc6a28a2" integrity sha1-uo31+4QesKPoBEIysOJjqNxqKKI= -lodash.bind@^4.1.4: - version "4.2.1" - resolved "https://registry.yarnpkg.com/lodash.bind/-/lodash.bind-4.2.1.tgz#7ae3017e939622ac31b7d7d7dcb1b34db1690d35" - integrity sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU= - lodash.castarray@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.castarray/-/lodash.castarray-4.4.0.tgz#c02513515e309daddd4c24c60cfddcf5976d9115" @@ -13084,21 +12379,11 @@ lodash.debounce@^3.1.1: dependencies: lodash._getnative "^3.0.0" -lodash.defaults@^4.0.1: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" - integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw= - lodash.defaultsdeep@^4.6.0, lodash.defaultsdeep@^4.6.1: version "4.6.1" resolved "https://registry.yarnpkg.com/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz#512e9bd721d272d94e3d3a63653fa17516741ca6" integrity sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA== -lodash.filter@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.filter/-/lodash.filter-4.6.0.tgz#668b1d4981603ae1cc5a6fa760143e480b4c4ace" - integrity sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4= - lodash.find@^4.5.1, lodash.find@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.find/-/lodash.find-4.6.0.tgz#cb0704d47ab71789ffa0de8b97dd926fb88b13b1" @@ -13112,12 +12397,7 @@ lodash.flatten@^3.0.2: lodash._baseflatten "^3.0.0" lodash._isiterateecall "^3.0.0" -lodash.flatten@^4.2.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" - integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= - -lodash.foreach@^4.3.0, lodash.foreach@^4.5.0: +lodash.foreach@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53" integrity sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM= @@ -13196,11 +12476,6 @@ lodash.keys@^4.0.8: resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-4.2.0.tgz#a08602ac12e4fb83f91fc1fb7a360a4d9ba35205" integrity sha1-oIYCrBLk+4P5H8H7ejYKTZujUgU= -lodash.map@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3" - integrity sha1-dx7Hg540c9nEzeKLGTlMNWL09tM= - lodash.mapvalues@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz#1bafa5005de9dd6f4f26668c30ca37230cc9689c" @@ -13216,7 +12491,7 @@ lodash.memoize@~3.0.3: resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-3.0.4.tgz#2dcbd2c287cbc0a55cc42328bd0c736150d53e3f" integrity sha1-LcvSwofLwKVcxCMovQxzYVDVPj8= -lodash.merge@^4.4.0, lodash.merge@^4.6.0, lodash.merge@^4.6.2: +lodash.merge@^4.6.0, lodash.merge@^4.6.2: version "4.6.2" resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== @@ -13231,21 +12506,6 @@ lodash.once@^4.0.0: resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" integrity sha1-DdOXEhPHxW34gJd9UEyI+0cal6w= -lodash.pick@^4.2.1: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" - integrity sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM= - -lodash.reduce@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.reduce/-/lodash.reduce-4.6.0.tgz#f1ab6b839299ad48f784abbf476596f03b914d3b" - integrity sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs= - -lodash.reject@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.reject/-/lodash.reject-4.6.0.tgz#80d6492dc1470864bbf583533b651f42a9f52415" - integrity sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU= - lodash.restparam@^3.0.0: version "3.6.1" resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" @@ -13256,11 +12516,6 @@ lodash.set@^4.3.2: resolved "https://registry.yarnpkg.com/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23" integrity sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM= -lodash.some@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.some/-/lodash.some-4.6.0.tgz#1bb9f314ef6b8baded13b549169b2a945eb68e4d" - integrity sha1-G7nzFO9ri63tE7VJFpsqlF62jk0= - lodash.sortby@^4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" @@ -13296,7 +12551,7 @@ lodash@4.17.11: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg== -lodash@^4.1.0, lodash@^4.13.1, lodash@^4.17.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.6.1: +lodash@^4.17.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.1, lodash@^4.6.1: version "4.17.19" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b" integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ== @@ -13338,11 +12593,6 @@ lolex@^5.0.1: dependencies: "@sinonjs/commons" "^1.7.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, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" @@ -13375,7 +12625,7 @@ lowercase-keys@^1.0.0: resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== -lru-cache@4.1.x, lru-cache@^4.0.0, lru-cache@^4.0.1: +lru-cache@4.1.x, lru-cache@^4.0.1: version "4.1.5" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== @@ -13414,13 +12664,6 @@ magic-string@0.25.1: dependencies: 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.25.1, magic-string@^0.25.2: version "0.25.7" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" @@ -13568,11 +12811,6 @@ markdown-it@^8.3.1: mdurl "^1.0.1" uc.micro "^1.0.5" -marked@0.3.6: - version "0.3.6" - resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.6.tgz#b2c6c618fccece4ef86c4fc6cb8a7cbf5aeda8d7" - integrity sha1-ssbGGPzOzk74bE/Gy4p8v1rtqNc= - marked@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/marked/-/marked-0.4.0.tgz#9ad2c2a7a1791f10a852e0112f77b571dce10c66" @@ -13761,33 +12999,6 @@ methods@~1.1.2: resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= -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" - bluebird "3.5.0" - boxen "1.1.0" - chalk "1.1.3" - clipboardy "1.1.1" - get-port "3.1.0" - ip "1.1.5" - is-async-supported "1.2.0" - isstream "0.1.2" - media-typer "0.3.0" - node-version "1.0.0" - raw-body "2.2.0" - update-notifier "2.1.0" - 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" @@ -13828,18 +13039,6 @@ mime-db@1.44.0, "mime-db@>= 1.43.0 < 2": resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== -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-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.12, mime-types@^2.1.18, mime-types@^2.1.26, mime-types@~2.1.19, mime-types@~2.1.24: version "2.1.27" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" @@ -13847,11 +13046,6 @@ mime-types@^2.0.8, mime-types@^2.1.12, mime-types@^2.1.18, mime-types@^2.1.26, m dependencies: mime-db "1.44.0" -mime@1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" - integrity sha1-EV+eO2s9rylZmDyzjxSaLUDrXVM= - mime@1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" @@ -13931,7 +13125,7 @@ minimist@^0.2.1: resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.2.1.tgz#827ba4e7593464e7c221e8c5bed930904ee2c455" integrity sha512-GY8fANSrTMfBVfInqJAY41QkOM+upUTytK1jZ0c8+3HdHrJxBJ3rF5i9moClXTE8uUSnUo8cAsCoxDXvSY4DHg== -minimist@^1.1.0, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5: +minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== @@ -14040,14 +13234,6 @@ mocha@^6.1.4: yargs-parser "13.1.2" yargs-unparser "1.6.0" -mock-require@^3.0.2: - 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" - modify-values@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" @@ -14320,11 +13506,6 @@ node-releases@^1.1.58: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.60.tgz#6948bdfce8286f0b5d0e5a88e8384e954dfe7084" integrity sha512-gsO4vjEdQaTusZAEebUWp2a5d7dF5DYoIpDG7WySnk7BuZDW+GPpHXoXXuYawRBr/9t5q54tirPz79kFIWg4dA== -node-version@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/node-version/-/node-version-1.0.0.tgz#1b9b9584a9a7f7a6123f215cd14a652bf21ab19e" - integrity sha1-G5uVhKmn96YSPyFc0UplK/IasZ4= - node-watch@0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/node-watch/-/node-watch-0.6.1.tgz#b9874111ce9f5841b1c7596120206c7b825be0e9" @@ -14476,13 +13657,6 @@ npm-run-all@^4.1.2, npm-run-all@^4.1.5: shell-quote "^1.6.1" string.prototype.padend "^3.0.0" -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" @@ -14514,7 +13688,7 @@ npm-run-path@^4.0.0: gauge "~2.7.3" set-blocking "~2.0.0" -nth-check@^1.0.2, nth-check@~1.0.1: +nth-check@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== @@ -14531,11 +13705,6 @@ number-is-nan@^1.0.0: resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= -"nwmatcher@>= 1.3.7 < 2.0.0": - version "1.4.4" - resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.4.tgz#2285631f34a95f0d0395cd900c96ed39b58f346e" - integrity sha512-3iuY4N5dhgMpCUrOVnuAdGrgxVqV2cJpM+XNccjR2DKOB1RUP0aA+wGXEiNziG/UKboFyGBIoKOaNlJxx8bciQ== - nwsapi@^2.0.7, nwsapi@^2.0.9, nwsapi@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" @@ -14605,6 +13774,25 @@ object.assign@4.1.0, object.assign@^4.1.0: has-symbols "^1.0.0" object-keys "^1.0.11" +object.entries@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.2.tgz#bc73f00acb6b6bb16c203434b10f9a7e797d3add" + integrity sha512-BQdB9qKmb/HyNdMNWVr7O3+z5MUIx3aiegEIJqjMBbBf0YT9RRxTJSim4mzFqtyr7PDAHigq0N9dO0m0tRakQA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + has "^1.0.3" + +object.fromentries@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.2.tgz#4a09c9b9bb3843dd0f89acdb517a794d4f355ac9" + integrity sha512-r3ZiBH7MQppDJVLx6fhD618GKNG40CZYH9wgwdhKxBDDbQgjeWGGd4AtkZad84d291YxvWe7bJGuE65Anh0dxQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + function-bind "^1.1.1" + has "^1.0.3" + object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649" @@ -14673,13 +13861,6 @@ opener@^1.5.1: resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.1.tgz#6d2f0e77f1a0af0032aca716c2c1fbb8e7e8abed" integrity sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA== -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" @@ -14696,7 +13877,7 @@ optimize-css-assets-webpack-plugin@^5.0.3: cssnano "^4.1.10" last-call-webpack-plugin "^3.0.0" -optionator@^0.8.1, optionator@^0.8.2: +optionator@^0.8.1: version "0.8.3" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== @@ -14914,7 +14095,7 @@ p-waterfall@^1.0.0: dependencies: p-reduce "^1.0.0" -package-json@^4.0.0, package-json@^4.0.1: +package-json@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed" integrity sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0= @@ -15094,11 +14275,6 @@ parse5@5.1.1: resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== -parse5@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94" - integrity sha1-m387DeMr543CQBsXVzzK8Pb1nZQ= - parseqs@0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d" @@ -15160,16 +14336,6 @@ path-is-absolute@1.0.1, path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= -path-is-inside@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" - integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= - -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" @@ -15214,13 +14380,6 @@ path-to-regexp@^1.5.3, path-to-regexp@^1.7.0: dependencies: isarray "0.0.1" -path-type@2.0.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" @@ -15230,6 +14389,13 @@ path-type@^1.0.0: pify "^2.0.0" pinkie-promise "^2.0.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@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" @@ -15347,11 +14513,6 @@ pkg-up@^3.1.0: 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@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/plugin-error/-/plugin-error-1.0.1.tgz#77016bd8919d0ac377fdcdd0322328953ca5781c" @@ -15362,11 +14523,6 @@ plugin-error@^1.0.1: arr-union "^3.1.0" extend-shallow "^3.0.2" -pluralize@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" - integrity sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow== - pn@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" @@ -15846,7 +15002,7 @@ promzard@^0.3.0: dependencies: read "1" -prop-types@^15.5.4, prop-types@^15.5.6, prop-types@^15.6.2: +prop-types@^15.5.4, prop-types@^15.5.6, prop-types@^15.6.2, prop-types@^15.7.2: version "15.7.2" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== @@ -16059,20 +15215,11 @@ randomfill@^1.0.3: randombytes "^2.0.5" safe-buffer "^5.1.0" -range-parser@^1.2.0, range-parser@~1.2.0, range-parser@~1.2.1: +range-parser@^1.2.0, range-parser@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -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.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" @@ -16303,16 +15450,6 @@ read@1, read@~1.0.1: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@1.1: - version "1.1.13" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.13.tgz#f6eef764f514c89e2b9e23146a75ba106756d23e" - integrity sha1-9u73ZPUUyJ4rniMUanW6EGdW0j4= - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - "readable-stream@2 || 3", readable-stream@^3.0.2, readable-stream@^3.1.1, readable-stream@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" @@ -16487,10 +15624,13 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" -regexpp@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-1.1.0.tgz#0e3516dd0b7904f413d2d4193dce4618c3a689ab" - integrity sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw== +regexp.prototype.flags@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz#7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75" + integrity sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" regexpp@^3.0.0, regexpp@^3.1.0: version "3.1.0" @@ -16591,18 +15731,11 @@ repeat-element@^1.1.2: resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== -repeat-string@^1.5.2, repeat-string@^1.6.1: +repeat-string@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= -repeating@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/repeating/-/repeating-1.1.3.tgz#3d4114218877537494f97f77f9785fab810fa4ac" - integrity sha1-PUEUIYh3U3SU+X93+Xhfq4EPpKw= - dependencies: - is-finite "^1.0.0" - repeating@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" @@ -16635,7 +15768,7 @@ request-promise-native@^1.0.5, request-promise-native@^1.0.7, request-promise-na stealthy-require "^1.1.1" tough-cookie "^2.3.3" -request@^2.55.0, request@^2.87.0, request@^2.88.0, request@^2.88.2: +request@^2.87.0, request@^2.88.0, request@^2.88.2: version "2.88.2" resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== @@ -16681,14 +15814,6 @@ require-main-filename@^2.0.0: resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== -require-uncached@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" - integrity sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM= - dependencies: - caller-path "^0.1.0" - resolve-from "^1.0.0" - requires-port@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" @@ -16719,11 +15844,6 @@ resolve-dir@^1.0.0, resolve-dir@^1.0.1: expand-tilde "^2.0.0" global-modules "^1.0.0" -resolve-from@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" - integrity sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY= - resolve-from@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" @@ -16865,13 +15985,6 @@ rgba-regex@^1.0.0: resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= -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.2.8, rimraf@^2.3.4, rimraf@^2.4.3, rimraf@^2.4.4, rimraf@^2.5.3, rimraf@^2.5.4, rimraf@^2.6.0, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" @@ -17015,18 +16128,6 @@ run-queue@^1.0.0, run-queue@^1.0.3: dependencies: aproba "^1.1.1" -rx-lite-aggregates@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" - integrity sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74= - dependencies: - rx-lite "*" - -rx-lite@*, rx-lite@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" - integrity sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ= - rxjs@^6.4.0, rxjs@^6.6.0: version "6.6.0" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.0.tgz#af2901eedf02e3a83ffa7f886240ff9018bbec84" @@ -17076,7 +16177,7 @@ sane@^4.0.0, sane@^4.0.3, sane@^4.1.0: minimist "^1.1.1" walker "~1.0.5" -sax@^1.1.4, sax@^1.2.4, sax@~1.2.4: +sax@^1.2.4, sax@~1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== @@ -17129,14 +16230,7 @@ schema-utils@^2.6.5, schema-utils@^2.6.6, schema-utils@^2.7.0: ajv "^6.12.2" ajv-keywords "^3.4.1" -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.5.1, semver@^5.6.0, semver@^5.7.0: +"semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", 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, semver@^5.7.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== @@ -17161,25 +16255,6 @@ semver@~5.3.0: 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" - destroy "~1.0.4" - encodeurl "~1.0.1" - escape-html "~1.0.3" - etag "~1.8.0" - fresh "0.5.0" - http-errors "~1.6.1" - mime "1.3.4" - ms "2.0.0" - on-finished "~2.3.0" - range-parser "~1.2.0" - statuses "~1.3.1" - send@0.17.1: version "0.17.1" resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" @@ -17221,32 +16296,6 @@ serve-static@1.14.1: parseurl "~1.3.3" send "0.17.1" -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" - bluebird "3.5.0" - boxen "1.1.0" - chalk "1.1.3" - clipboardy "1.1.4" - dargs "5.1.0" - detect-port "1.2.1" - filesize "3.5.10" - fs-extra "3.0.1" - handlebars "4.0.10" - ip "1.1.5" - micro "7.3.3" - micro-compress "1.0.0" - mime-types "2.1.15" - node-version "1.0.0" - opn "5.1.0" - path-type "2.0.0" - send "0.15.3" - update-notifier "2.2.0" - set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" @@ -17328,6 +16377,14 @@ shellwords@^0.1.1: resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== +side-channel@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.2.tgz#df5d1abadb4e4bf4af1cd8852bf132d2f7876947" + integrity sha512-7rL9YlPHg7Ancea1S96Pa8/QWb4BtXL/TZvS6B8XFetGBeuhAsfmUspK6DokBeZ64+Kj9TCNRD/30pVz1BvQNA== + dependencies: + es-abstract "^1.17.0-next.1" + object-inspect "^1.7.0" + signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" @@ -17412,13 +16469,6 @@ slash@^3.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== -slice-ansi@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" - integrity sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg== - dependencies: - is-fullwidth-code-point "^2.0.0" - slice-ansi@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" @@ -17658,7 +16708,7 @@ source-map-url@^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.4.x, source-map@^0.4.2, source-map@^0.4.4: +source-map@0.4.x, source-map@^0.4.2: version "0.4.4" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" integrity sha1-66T12pwNyZneaAMti092FzZSA2s= @@ -17670,7 +16720,7 @@ source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -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: +source-map@^0.5.0, source-map@^0.5.1, source-map@^0.5.6, source-map@^0.5.7, 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= @@ -17842,11 +16892,6 @@ static-extend@^0.1.1: resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= -statuses@~1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" - integrity sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4= - stealthy-require@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" @@ -17932,13 +16977,6 @@ string-length@^2.0.0: astral-regex "^1.0.0" strip-ansi "^4.0.0" -string-similarity@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/string-similarity/-/string-similarity-1.1.0.tgz#3c66498858a465ec7c40c7d81739bbd995904914" - integrity sha1-PGZJiFikZex8QMfYFzm72ZWQSRQ= - dependencies: - lodash "^4.13.1" - string-template@~0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/string-template/-/string-template-0.2.1.tgz#42932e598a352d01fc22ec3367d9d84eec6c9add" @@ -17979,6 +17017,18 @@ string-width@^4.1.0, string-width@^4.2.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" +string.prototype.matchall@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.2.tgz#48bb510326fb9fdeb6a33ceaa81a6ea04ef7648e" + integrity sha512-N/jp6O5fMf9os0JU3E72Qhf590RSRZU/ungsL/qJUYVTNv7hTG0P/dbPjxINVN9jpscu3nzYwKESU3P3RY5tOg== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0" + has-symbols "^1.0.1" + internal-slot "^1.0.2" + regexp.prototype.flags "^1.3.0" + side-channel "^1.0.2" + string.prototype.padend@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.1.0.tgz#dc08f57a8010dc5c153550318f67e13adbb72ac3" @@ -18221,7 +17271,7 @@ symbol-observable@^1.2.0: resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== -"symbol-tree@>= 3.1.0 < 4.0.0", symbol-tree@^3.2.2, symbol-tree@^3.2.4: +symbol-tree@^3.2.2, symbol-tree@^3.2.4: version "3.2.4" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== @@ -18253,18 +17303,6 @@ sync-disk-cache@^2.0.0: rimraf "^3.0.0" username-sync "^1.0.2" -table@4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36" - integrity sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA== - dependencies: - ajv "^5.2.3" - ajv-keywords "^2.1.0" - chalk "^2.1.0" - lodash "^4.17.4" - slice-ansi "1.0.0" - string-width "^2.1.1" - table@^5.2.3: version "5.4.6" resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" @@ -18275,11 +17313,6 @@ table@^5.2.3: slice-ansi "^2.1.0" string-width "^3.0.0" -taffydb@2.7.2: - version "2.7.2" - resolved "https://registry.yarnpkg.com/taffydb/-/taffydb-2.7.2.tgz#7bf8106a5c1a48251b3e3bc0a0e1732489fd0dc8" - integrity sha1-e/gQalwaSCUbPjvAoOFzJIn9Dcg= - tap-parser@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/tap-parser/-/tap-parser-7.0.0.tgz#54db35302fda2c2ccc21954ad3be22b2cba42721" @@ -18358,20 +17391,6 @@ temp@0.9.1: dependencies: rimraf "~2.6.2" -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" - terser-webpack-plugin@^1.1.0, terser-webpack-plugin@^1.4.3: version "1.4.4" resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.4.tgz#2c63544347324baafa9a56baaddf1634c8abfc2f" @@ -18455,7 +17474,7 @@ text-extensions@^1.0.0: resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== -text-table@^0.2.0, text-table@~0.2.0: +text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= @@ -18638,7 +17657,7 @@ toidentifier@1.0.0: resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== -tough-cookie@^2.2.0, tough-cookie@^2.3.3, tough-cookie@^2.3.4, tough-cookie@^2.4.3, tough-cookie@~2.5.0: +tough-cookie@^2.3.3, tough-cookie@^2.3.4, tough-cookie@^2.4.3, tough-cookie@~2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== @@ -18669,11 +17688,6 @@ tr46@^2.0.2: dependencies: punycode "^2.1.1" -tr46@~0.0.1: - version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= - tree-sync@^1.2.2: version "1.4.0" resolved "https://registry.yarnpkg.com/tree-sync/-/tree-sync-1.4.0.tgz#314598d13abaf752547d9335b8f95d9a137100d6" @@ -18762,7 +17776,7 @@ tslib@1.9.3: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ== -tslib@^1.10.0, tslib@^1.7.1, tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: +tslib@^1.10.0, tslib@^1.7.1, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: version "1.13.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== @@ -18786,56 +17800,6 @@ tslint-consistent-codestyle@^1.15.1: tslib "^1.7.1" tsutils "^2.29.0" -tslint-react-hooks@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/tslint-react-hooks/-/tslint-react-hooks-2.2.2.tgz#4dc9b3986196802d45c11cc0bf6319a8116fe2ed" - integrity sha512-gtwA14+WevNUtlBhvAD5Ukpxt2qMegYI7IDD8zN/3JXLksdLdEuU/T/oqlI1CtZhMJffqyNn+aqq2oUqUFXiNA== - -tslint-react@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/tslint-react/-/tslint-react-5.0.0.tgz#d0ae644e8163bdd3e134012e9353094904e8dd44" - integrity sha512-/IbcSmoBPlFic8kQaRfQ4knTY4mivwo5LVzvozvX6Dyu2ynEnrh1dIcR2ujjyp/IodXqY/H5GbxFxSMo/Kf2Hg== - dependencies: - tsutils "^3.17.1" - -tslint@5.16.0: - version "5.16.0" - resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.16.0.tgz#ae61f9c5a98d295b9a4f4553b1b1e831c1984d67" - integrity sha512-UxG2yNxJ5pgGwmMzPMYh/CCnCnh0HfPgtlVRDs1ykZklufFBL1ZoTlWFRz2NQjcoEiDoRp+JyT0lhBbbH/obyA== - dependencies: - "@babel/code-frame" "^7.0.0" - builtin-modules "^1.1.1" - chalk "^2.3.0" - commander "^2.12.1" - diff "^3.2.0" - glob "^7.1.1" - js-yaml "^3.13.0" - minimatch "^3.0.4" - mkdirp "^0.5.1" - resolve "^1.3.2" - semver "^5.3.0" - tslib "^1.8.0" - tsutils "^2.29.0" - -tslint@^5.16.0: - version "5.20.1" - resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.20.1.tgz#e401e8aeda0152bc44dd07e614034f3f80c67b7d" - integrity sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg== - dependencies: - "@babel/code-frame" "^7.0.0" - builtin-modules "^1.1.1" - chalk "^2.3.0" - commander "^2.12.1" - diff "^4.0.1" - glob "^7.1.1" - js-yaml "^3.13.1" - minimatch "^3.0.4" - mkdirp "^0.5.1" - resolve "^1.3.2" - semver "^5.3.0" - tslib "^1.8.0" - tsutils "^2.29.0" - tsutils@^2.29.0: version "2.29.0" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" @@ -18966,15 +17930,6 @@ typescript-memoize@^1.0.0-alpha.3: dependencies: core-js "2.4.1" -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.2.x: version "3.2.4" resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.2.4.tgz#c585cb952912263d915b462726ce244ba510ef3d" @@ -19000,26 +17955,11 @@ uc.micro@^1.0.1, uc.micro@^1.0.5: resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac" integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA== -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: version "3.10.0" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.10.0.tgz#397a7e6e31ce820bfd1cb55b804ee140c587a9e7" integrity sha512-Esj5HG5WAyrLIdYU74Z3JdG2PxdIusvj6IWHMtlyESxc7kcDz7zYlYjpnSokn1UbpV0d/QX9fan7gkCNd/9BQA== -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" @@ -19176,34 +18116,6 @@ upath@^1.1.1: resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== -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" - configstore "^3.0.0" - is-npm "^1.0.0" - latest-version "^3.0.0" - lazy-req "^2.0.0" - semver-diff "^2.0.0" - xdg-basedir "^3.0.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" - configstore "^3.0.0" - import-lazy "^2.1.0" - is-npm "^1.0.0" - latest-version "^3.0.0" - semver-diff "^2.0.0" - xdg-basedir "^3.0.0" - uri-js@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" @@ -19383,11 +18295,6 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" -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@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.0.tgz#bd76d6a23323e2ca8ffa12028dc04559c75f9019" @@ -19403,37 +18310,6 @@ void-elements@^2.0.0: resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" integrity sha1-wGavtYK7HLQSjWDqkjkulNXp2+w= -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" - -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" - -vscode-uri@^1.0.6: - version "1.0.8" - resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-1.0.8.tgz#9769aaececae4026fb6e22359cb38946580ded59" - integrity sha512-obtSWTlbJ+a+TFRYGaUumtVwb+InIUVI0Lu0VBUAPmj2cU5JutEXg3xUE0c2J5Tcy7h2DEKVJBFi+Y9ZSFzzPQ== - w3c-hr-time@^1.0.1, w3c-hr-time@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" @@ -19552,11 +18428,6 @@ wcwidth@^1.0.0, wcwidth@^1.0.1: dependencies: defaults "^1.0.3" -webidl-conversions@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-2.0.1.tgz#3bf8258f7d318c7443c36f2e169402a1a6703506" - integrity sha1-O/glj30xjHRDw28uFpQCoaZwNQY= - webidl-conversions@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" @@ -19689,13 +18560,6 @@ whatwg-mimetype@^2.1.0, whatwg-mimetype@^2.2.0, whatwg-mimetype@^2.3.0: resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== -whatwg-url-compat@~0.6.5: - version "0.6.5" - resolved "https://registry.yarnpkg.com/whatwg-url-compat/-/whatwg-url-compat-0.6.5.tgz#00898111af689bb097541cd5a45ca6c8798445bf" - integrity sha1-AImBEa9om7CXVBzVpFymyHmERb8= - dependencies: - tr46 "~0.0.1" - whatwg-url@^6.4.1: version "6.5.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.5.0.tgz#f2df02bff176fd65070df74ad5ccbb5a199965a8" @@ -19740,7 +18604,7 @@ which-typed-array@^1.1.2: has-symbols "^1.0.1" is-typed-array "^1.1.3" -which@1, which@1.3.1, which@^1.1.1, which@^1.2.1, which@^1.2.14, which@^1.2.8, which@^1.2.9, which@^1.3.0, which@^1.3.1: +which@1, which@1.3.1, which@^1.1.1, which@^1.2.1, which@^1.2.14, which@^1.2.9, which@^1.3.0, which@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== @@ -19761,25 +18625,6 @@ wide-align@1.1.3, wide-align@^1.1.0: dependencies: string-width "^1.0.2 || 2" -widest-line@^1.0.0: - version "1.0.0" - 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.3.1" resolved "https://registry.yarnpkg.com/windows-release/-/windows-release-3.3.1.tgz#cb4e80385f8550f709727287bf71035e209c4ace" @@ -19792,11 +18637,6 @@ word-wrap@^1.2.3, word-wrap@~1.2.3: resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== -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@^0.0.3, wordwrap@~0.0.2: version "0.0.3" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" @@ -19926,13 +18766,6 @@ write@1.0.3: dependencies: mkdirp "^0.5.1" -write@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" - integrity sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c= - dependencies: - mkdirp "^0.5.1" - ws@^5.2.0: version "5.2.2" resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f" @@ -19978,11 +18811,6 @@ xdg-basedir@^4.0.0: resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== -"xml-name-validator@>= 2.0.1 < 3.0.0": - version "2.0.1" - resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-2.0.1.tgz#4d8b8f1eccd3419aa362061becef515e1e559635" - integrity sha1-TYuPHszTQZqjYgYb7O9RXh5VljU= - 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" @@ -20162,16 +18990,6 @@ yargs@^15.0.2, yargs@^15.4.1: y18n "^4.0.0" yargs-parser "^18.1.2" -yargs@~3.10.0: - version "3.10.0" - 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" - decamelize "^1.0.0" - window-size "0.1.0" - yeast@0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419"