diff --git a/CHANGELOG.md b/CHANGELOG.md index 2a80c1bbb467..d1a9351ad870 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,11 @@ # Changelog ## Unreleased + +## 4.2.3 + +- [core]: Several internal fixes regarding integration, exports and domain. + ## 4.2.2 - [core]: "De-deprecate" name of `Integration` interface. diff --git a/packages/browser/.npmignore b/packages/browser/.npmignore index e07f347f55a5..1ae08eedce13 100644 --- a/packages/browser/.npmignore +++ b/packages/browser/.npmignore @@ -1,3 +1,4 @@ * !/dist/**/* +!/src/**/* !/build/**/* diff --git a/packages/browser/package.json b/packages/browser/package.json index ca8ae6db5dcb..d56e91d8478c 100644 --- a/packages/browser/package.json +++ b/packages/browser/package.json @@ -42,7 +42,6 @@ "rollup-plugin-license": "^0.6.0", "rollup-plugin-node-resolve": "^3.3.0", "rollup-plugin-npm": "^2.0.0", - "rollup-plugin-shim": "^1.0.0", "rollup-plugin-typescript2": "^0.13.0", "rollup-plugin-uglify": "^3.0.0", "sinon": "^5.0.3", diff --git a/packages/browser/rollup.config.js b/packages/browser/rollup.config.js index 6c51fecc40ea..3516947446f1 100644 --- a/packages/browser/rollup.config.js +++ b/packages/browser/rollup.config.js @@ -3,7 +3,6 @@ import uglify from 'rollup-plugin-uglify'; import resolve from 'rollup-plugin-node-resolve'; import typescript from 'rollup-plugin-typescript2'; import license from 'rollup-plugin-license'; -import shim from 'rollup-plugin-shim'; const commitHash = require('child_process') .execSync('git rev-parse --short HEAD', { encoding: 'utf-8' }) @@ -18,9 +17,6 @@ const bundleConfig = { }, context: 'window', plugins: [ - shim({ - domain: `export default {}`, - }), typescript({ tsconfig: 'tsconfig.build.json', tsconfigOverride: { compilerOptions: { declaration: false } }, diff --git a/packages/core/.npmignore b/packages/core/.npmignore index aa36c10c6872..aa46b11360bf 100644 --- a/packages/core/.npmignore +++ b/packages/core/.npmignore @@ -1,2 +1,3 @@ * !/dist/**/* +!/src/**/* diff --git a/packages/core/src/baseclient.ts b/packages/core/src/baseclient.ts index 525553222df7..00fd899bd7f3 100644 --- a/packages/core/src/baseclient.ts +++ b/packages/core/src/baseclient.ts @@ -16,7 +16,7 @@ import { consoleSandbox, uuid4 } from '@sentry/utils/misc'; import { truncate } from '@sentry/utils/string'; import { BackendClass } from './basebackend'; import { Dsn } from './dsn'; -import { IntegrationIndex, setupIntegrations } from './integrations'; +import { IntegrationIndex, setupIntegrations } from './integration'; import { Backend, Client, Options } from './interfaces'; /** diff --git a/packages/core/src/integration.ts b/packages/core/src/integration.ts new file mode 100644 index 000000000000..f981f74486c2 --- /dev/null +++ b/packages/core/src/integration.ts @@ -0,0 +1,98 @@ +import { Integration } from '@sentry/types'; +import { logger } from '@sentry/utils/logger'; +import { Options } from './interfaces'; + +export const installedIntegrations: string[] = []; + +/** Map of integrations assigned to a client */ +export interface IntegrationIndex { + [key: string]: Integration; +} + +/** Gets integration to install */ +export function getIntegrationsToSetup(options: Options): Integration[] { + const defaultIntegrations = (options.defaultIntegrations && [...options.defaultIntegrations]) || []; + const userIntegrations = options.integrations; + let integrations: Integration[] = []; + if (Array.isArray(userIntegrations)) { + const userIntegrationsNames = userIntegrations.map(i => i.name); + const pickedIntegrationsNames = []; + + // Leave only unique default integrations, that were not overridden with provided user integrations + for (const defaultIntegration of defaultIntegrations) { + if ( + userIntegrationsNames.indexOf(getIntegrationName(defaultIntegration)) === -1 && + pickedIntegrationsNames.indexOf(getIntegrationName(defaultIntegration)) === -1 + ) { + integrations.push(defaultIntegration); + pickedIntegrationsNames.push(getIntegrationName(defaultIntegration)); + } + } + + // Don't add same user integration twice + for (const userIntegration of userIntegrations) { + if (pickedIntegrationsNames.indexOf(getIntegrationName(userIntegration)) === -1) { + integrations.push(userIntegration); + pickedIntegrationsNames.push(getIntegrationName(userIntegration)); + } + } + } else if (typeof userIntegrations === 'function') { + integrations = userIntegrations(defaultIntegrations); + integrations = Array.isArray(integrations) ? integrations : [integrations]; + } else { + return [...defaultIntegrations]; + } + + return integrations; +} + +/** Setup given integration */ +export function setupIntegration(integration: Integration, options: Options): void { + if (installedIntegrations.indexOf(getIntegrationName(integration)) !== -1) { + return; + } + + try { + integration.setupOnce(); + } catch (_Oo) { + /** @deprecated */ + // TODO: Remove in v5 + logger.warn(`Integration ${getIntegrationName(integration)}: The install method is deprecated. Use "setupOnce".`); + + // tslint:disable:deprecation + if (integration.install) { + integration.install(options); + } + // tslint:enable:deprecation + } + + installedIntegrations.push(getIntegrationName(integration)); + logger.log(`Integration installed: ${getIntegrationName(integration)}`); +} + +/** + * Given a list of integration instances this installs them all. When `withDefaults` is set to `true` then all default + * integrations are added unless they were already provided before. + * @param integrations array of integration instances + * @param withDefault should enable default integrations + */ +export function setupIntegrations(options: O): IntegrationIndex { + const integrations: IntegrationIndex = {}; + getIntegrationsToSetup(options).forEach(integration => { + integrations[getIntegrationName(integration)] = integration; + setupIntegration(integration, options); + }); + return integrations; +} + +/** + * Returns the integration static id. + * @param integration Integration to retrieve id + */ +function getIntegrationName(integration: Integration): string { + /** + * @depracted + */ + // tslint:disable-next-line:no-unsafe-any + return (integration as any).constructor.id || integration.name; +} diff --git a/packages/core/src/integrations/index.ts b/packages/core/src/integrations/index.ts index b0bcbd8b4a37..52a16507d399 100644 --- a/packages/core/src/integrations/index.ts +++ b/packages/core/src/integrations/index.ts @@ -1,8 +1,3 @@ -// tslint:disable:deprecation -import { Integration } from '@sentry/types'; -import { logger } from '@sentry/utils/logger'; -import { Options } from '../interfaces'; - export { Dedupe } from './dedupe'; export { FunctionToString } from './functiontostring'; export { SDKInformation } from './sdkinformation'; @@ -10,96 +5,3 @@ export { InboundFilters } from './inboundfilters'; export { Debug } from './pluggable/debug'; export { RewriteFrames } from './pluggable/rewriteframes'; - -export const installedIntegrations: string[] = []; - -/** Map of integrations assigned to a client */ -export interface IntegrationIndex { - [key: string]: Integration; -} - -/** Gets integration to install */ -export function getIntegrationsToSetup(options: Options): Integration[] { - const defaultIntegrations = (options.defaultIntegrations && [...options.defaultIntegrations]) || []; - const userIntegrations = options.integrations; - let integrations: Integration[] = []; - if (Array.isArray(userIntegrations)) { - const userIntegrationsNames = userIntegrations.map(i => i.name); - const pickedIntegrationsNames = []; - - // Leave only unique default integrations, that were not overridden with provided user integrations - for (const defaultIntegration of defaultIntegrations) { - if ( - userIntegrationsNames.indexOf(getIntegrationName(defaultIntegration)) === -1 && - pickedIntegrationsNames.indexOf(getIntegrationName(defaultIntegration)) === -1 - ) { - integrations.push(defaultIntegration); - pickedIntegrationsNames.push(getIntegrationName(defaultIntegration)); - } - } - - // Don't add same user integration twice - for (const userIntegration of userIntegrations) { - if (pickedIntegrationsNames.indexOf(getIntegrationName(userIntegration)) === -1) { - integrations.push(userIntegration); - pickedIntegrationsNames.push(getIntegrationName(userIntegration)); - } - } - } else if (typeof userIntegrations === 'function') { - integrations = userIntegrations(defaultIntegrations); - integrations = Array.isArray(integrations) ? integrations : [integrations]; - } else { - return [...defaultIntegrations]; - } - - return integrations; -} - -/** Setup given integration */ -export function setupIntegration(integration: Integration, options: Options): void { - if (installedIntegrations.indexOf(getIntegrationName(integration)) !== -1) { - return; - } - - try { - integration.setupOnce(); - } catch (_Oo) { - /** @deprecated */ - // TODO: Remove in v5 - logger.warn(`Integration ${getIntegrationName(integration)}: The install method is deprecated. Use "setupOnce".`); - - if (integration.install) { - integration.install(options); - } - } - - installedIntegrations.push(getIntegrationName(integration)); - logger.log(`Integration installed: ${getIntegrationName(integration)}`); -} - -/** - * Given a list of integration instances this installs them all. When `withDefaults` is set to `true` then all default - * integrations are added unless they were already provided before. - * @param integrations array of integration instances - * @param withDefault should enable default integrations - */ -export function setupIntegrations(options: O): IntegrationIndex { - const integrations: IntegrationIndex = {}; - getIntegrationsToSetup(options).forEach(integration => { - integrations[getIntegrationName(integration)] = integration; - setupIntegration(integration, options); - }); - return integrations; -} - -/** - * Returns the integration static id. - * @param integration Integration to retrieve id - */ -function getIntegrationName(integration: Integration): string { - /** - * @depracted - */ - // tslint:disable-next-line:no-unsafe-any - return (integration as any).constructor.id || integration.name; -} diff --git a/packages/core/test/lib/integrations/index.test.ts b/packages/core/test/lib/integration.test.ts similarity index 98% rename from packages/core/test/lib/integrations/index.test.ts rename to packages/core/test/lib/integration.test.ts index 531e4cfe536f..619f64c0545e 100644 --- a/packages/core/test/lib/integrations/index.test.ts +++ b/packages/core/test/lib/integration.test.ts @@ -1,6 +1,6 @@ // tslint:disable:deprecation import { Integration } from '@sentry/types'; -import { getIntegrationsToSetup } from '../../../src/integrations'; +import { getIntegrationsToSetup } from '../../src/integration'; /** JSDoc */ class MockIntegration implements Integration { diff --git a/packages/core/test/lib/sdk.test.ts b/packages/core/test/lib/sdk.test.ts index 795dc19b51ae..fae07277d8d8 100644 --- a/packages/core/test/lib/sdk.test.ts +++ b/packages/core/test/lib/sdk.test.ts @@ -1,5 +1,5 @@ import { Integration } from '@sentry/types'; -import { installedIntegrations } from '../../src/integrations'; +import { installedIntegrations } from '../../src/integration'; import { initAndBind } from '../../src/sdk'; import { TestClient } from '../mocks/client'; diff --git a/packages/hub/.npmignore b/packages/hub/.npmignore index aa36c10c6872..aa46b11360bf 100644 --- a/packages/hub/.npmignore +++ b/packages/hub/.npmignore @@ -1,2 +1,3 @@ * !/dist/**/* +!/src/**/* diff --git a/packages/hub/src/hub.ts b/packages/hub/src/hub.ts index 3067222e207e..8e221772a537 100644 --- a/packages/hub/src/hub.ts +++ b/packages/hub/src/hub.ts @@ -8,7 +8,7 @@ import { Severity, } from '@sentry/types'; import { logger } from '@sentry/utils/logger'; -import { getGlobalObject, uuid4 } from '@sentry/utils/misc'; +import { bundlerSafeRequire, getGlobalObject, uuid4 } from '@sentry/utils/misc'; import { Carrier, Layer } from './interfaces'; import { Scope } from './scope'; @@ -334,7 +334,10 @@ export function getCurrentHub(): Hub { // Prefer domains over global if they are there try { - const domain = require('domain'); + // We need to use `bundlerSafeRequire` because `require` on it's own will be optimized by webpack. + // We do not want this to happen, we need to try `require` the domain node module and fail if we are in browser + // for example so we do not have to shim it and use `getCurrentHub` universally. + const domain = bundlerSafeRequire('domain'); const activeDomain = domain.active; // If there no active domain, just return global hub diff --git a/packages/minimal/.npmignore b/packages/minimal/.npmignore index aa36c10c6872..aa46b11360bf 100644 --- a/packages/minimal/.npmignore +++ b/packages/minimal/.npmignore @@ -1,2 +1,3 @@ * !/dist/**/* +!/src/**/* diff --git a/packages/node/.npmignore b/packages/node/.npmignore index aa36c10c6872..aa46b11360bf 100644 --- a/packages/node/.npmignore +++ b/packages/node/.npmignore @@ -1,2 +1,3 @@ * !/dist/**/* +!/src/**/* diff --git a/packages/types/.npmignore b/packages/types/.npmignore index aa36c10c6872..aa46b11360bf 100644 --- a/packages/types/.npmignore +++ b/packages/types/.npmignore @@ -1,2 +1,3 @@ * !/dist/**/* +!/src/**/* diff --git a/packages/utils/.npmignore b/packages/utils/.npmignore index c5d98186ca76..2fcd3d46100f 100644 --- a/packages/utils/.npmignore +++ b/packages/utils/.npmignore @@ -3,3 +3,4 @@ !*.d.ts !*.js jest.config.js +!/src/**/* diff --git a/packages/utils/src/misc.ts b/packages/utils/src/misc.ts index 35f2556b2835..2cb0e4515970 100644 --- a/packages/utils/src/misc.ts +++ b/packages/utils/src/misc.ts @@ -1,6 +1,18 @@ import { SentryEvent, SentryWrappedFunction } from '@sentry/types'; import { isString } from './is'; +/** + * Requires a module which is protected against bundler minification. + * + * @param request The module path to resolve + */ +export function bundlerSafeRequire(request: string): any { + // We need to do this check for global.module || module here because if we are calling this inside a + // active domain, global.module is undefined. + // tslint:disable-next-line + return ((getGlobalObject() as any).module || module).require(request); +} + /** * Checks whether we're in the Node.js or Browser environment * diff --git a/yarn.lock b/yarn.lock index 7642a9612a1d..37128b0f8e53 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1002,6 +1002,10 @@ array-find-index@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + array-ify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" @@ -1744,7 +1748,7 @@ bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: version "4.11.8" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" -body-parser@^1.16.1: +body-parser@1.18.3, body-parser@^1.16.1: version "1.18.3" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.3.tgz#5b292198ffdd553b3a0f20ded0592b956955c8b4" dependencies: @@ -2487,6 +2491,10 @@ constants-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" +content-disposition@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" + content-type@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" @@ -2575,6 +2583,10 @@ convert-source-map@~1.1.0: version "1.1.3" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.1.3.tgz#4829c877e9fe49b3161f3bf3673888e204699860" +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + cookie@0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" @@ -3129,7 +3141,7 @@ elliptic@^6.0.0: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.0" -encodeurl@~1.0.1: +encodeurl@~1.0.1, encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" @@ -3284,7 +3296,7 @@ esutils@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" -etag@~1.8.0: +etag@~1.8.0, etag@~1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" @@ -3440,6 +3452,41 @@ expect@^22.4.0: jest-message-util "^22.4.3" jest-regex-util "^22.4.3" +express@^4.16.4: + version "4.16.4" + resolved "https://registry.yarnpkg.com/express/-/express-4.16.4.tgz#fddef61926109e24c515ea97fd2f1bdbf62df12e" + dependencies: + accepts "~1.3.5" + array-flatten "1.1.1" + body-parser "1.18.3" + content-disposition "0.5.2" + content-type "~1.0.4" + cookie "0.3.1" + cookie-signature "1.0.6" + debug "2.6.9" + depd "~1.1.2" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "1.1.1" + fresh "0.5.2" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.2" + path-to-regexp "0.1.7" + proxy-addr "~2.0.4" + qs "6.5.2" + range-parser "~1.2.0" + safe-buffer "5.1.2" + send "0.16.2" + serve-static "1.13.2" + setprototypeof "1.1.0" + statuses "~1.4.0" + type-is "~1.6.16" + utils-merge "1.0.1" + vary "~1.1.2" + extend-shallow@^1.1.2: version "1.1.4" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-1.1.4.tgz#19d6bf94dfc09d76ba711f39b872d21ff4dd9071" @@ -3587,6 +3634,18 @@ finalhandler@1.1.0: statuses "~1.3.1" unpipe "~1.0.0" +finalhandler@1.1.1: + version "1.1.1" + resolved "http://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz#eebf4ed840079c83f4249038c9d703008301b105" + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.2" + statuses "~1.4.0" + unpipe "~1.0.0" + find-index@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/find-index/-/find-index-0.1.1.tgz#675d358b2ca3892d795a1ab47232f8b6e2e0dde4" @@ -3677,6 +3736,10 @@ form-data@~2.3.0, form-data@~2.3.1: combined-stream "1.0.6" mime-types "^2.1.12" +forwarded@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" + fragment-cache@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" @@ -3687,6 +3750,10 @@ fresh@0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.0.tgz#f474ca5e6a9246d6fd8e0953cfa9b9c805afa78e" +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + from2@^2.1.0: version "2.3.0" resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" @@ -4304,7 +4371,7 @@ 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" -http-errors@1.6.3, http-errors@~1.6.1, http-errors@~1.6.3: +http-errors@1.6.3, http-errors@~1.6.1, http-errors@~1.6.2, http-errors@~1.6.3: version "1.6.3" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" dependencies: @@ -4529,6 +4596,10 @@ ip@1.1.5, ip@^1.1.2, ip@^1.1.4, ip@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" +ipaddr.js@1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.8.0.tgz#eaa33d6ddd7ace8f7f6fe0c9ca0440e706738b1e" + is-accessor-descriptor@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" @@ -6006,6 +6077,10 @@ meow@^4.0.0: redent "^2.0.0" trim-newlines "^2.0.0" +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + merge-stream@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1" @@ -6024,6 +6099,10 @@ methmeth@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/methmeth/-/methmeth-1.1.0.tgz#e80a26618e52f5c4222861bb748510bd10e29089" +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + micro-compress@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/micro-compress/-/micro-compress-1.0.0.tgz#53f5a80b4ad0320ca165a559b6e3df145d4f704f" @@ -6124,6 +6203,10 @@ mime@1.3.4: version "1.3.4" resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" +mime@1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" + mime@^1.3.4: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" @@ -6999,6 +7082,10 @@ path-proxy@~1.0.0: dependencies: inflection "~1.3.0" +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + path-to-regexp@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.7.0.tgz#59fde0f435badacba103a84e9d3bc64e96b9937d" @@ -7185,6 +7272,13 @@ protoduck@^5.0.0: dependencies: genfun "^4.0.1" +proxy-addr@~2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.4.tgz#ecfc733bf22ff8c6f407fa275327b9ab67e48b93" + dependencies: + forwarded "~0.1.2" + ipaddr.js "1.8.0" + proxy-agent@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-3.0.0.tgz#f6768e202889b2285d39906d3a94768416f8f713" @@ -7859,10 +7953,6 @@ rollup-plugin-npm@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/rollup-plugin-npm/-/rollup-plugin-npm-2.0.0.tgz#8a28ffdb5160bc8e1e371de39ed71faf009d655c" -rollup-plugin-shim@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-shim/-/rollup-plugin-shim-1.0.0.tgz#b00f5cb44cdae81358c5342fe82fa71a1602b56b" - rollup-plugin-typescript2@^0.13.0: version "0.13.0" resolved "https://registry.yarnpkg.com/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.13.0.tgz#5fc838657d05af82e04554832cadf06cdb32f657" @@ -8003,6 +8093,33 @@ send@0.15.3: range-parser "~1.2.0" statuses "~1.3.1" +send@0.16.2: + version "0.16.2" + resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1" + dependencies: + debug "2.6.9" + depd "~1.1.2" + destroy "~1.0.4" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "~1.6.2" + mime "1.4.1" + ms "2.0.0" + on-finished "~2.3.0" + range-parser "~1.2.0" + statuses "~1.4.0" + +serve-static@1.13.2: + version "1.13.2" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1" + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.2" + send "0.16.2" + serve@^5.1.5: version "5.2.4" resolved "https://registry.yarnpkg.com/serve/-/serve-5.2.4.tgz#4742c05f65a2330f788cdde901cd7a09b23a99f6" @@ -8418,6 +8535,10 @@ statuses@~1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" +statuses@~1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" + stealthy-require@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b"