diff --git a/client/browser/src/libs/code_intelligence/code_intelligence.tsx b/client/browser/src/libs/code_intelligence/code_intelligence.tsx
index 0410d702d65..667780e8c07 100644
--- a/client/browser/src/libs/code_intelligence/code_intelligence.tsx
+++ b/client/browser/src/libs/code_intelligence/code_intelligence.tsx
@@ -22,6 +22,7 @@ import { Model, ViewComponentData } from '../../../../../shared/src/api/client/m
import { ExtensionsControllerProps } from '../../../../../shared/src/extensions/controller'
import { getModeFromPath } from '../../../../../shared/src/languages'
import { PlatformContextProps } from '../../../../../shared/src/platform/context'
+import { TelemetryContext } from '../../../../../shared/src/telemetry/telemetryContext'
import {
FileSpec,
PositionSpec,
@@ -40,7 +41,7 @@ import {
toTextDocumentIdentifier,
} from '../../shared/backend/lsp'
import { ButtonProps, CodeViewToolbar } from '../../shared/components/CodeViewToolbar'
-import { sourcegraphUrl, useExtensions } from '../../shared/util/context'
+import { eventLogger, sourcegraphUrl, useExtensions } from '../../shared/util/context'
import { bitbucketServerCodeHost } from '../bitbucket/code_intelligence'
import { githubCodeHost } from '../github/code_intelligence'
import { gitlabCodeHost } from '../gitlab/code_intelligence'
@@ -380,7 +381,12 @@ function initCodeIntelligence(
}
}
- render(, overlayContainerMount)
+ render(
+
+
+ ,
+ overlayContainerMount
+ )
return { hoverifier, controllers: { platformContext, extensionsController } }
}
@@ -538,18 +544,20 @@ function handleCodeHost(codeHost: CodeHost): Subscription {
const mount = getToolbarMount(codeView)
render(
-
+ ,
+ location={H.createLocation(window.location)}
+ />
+ ,
mount
)
}
diff --git a/client/browser/src/libs/code_intelligence/extensions.tsx b/client/browser/src/libs/code_intelligence/extensions.tsx
index f6a49ea620e..a65718b2796 100644
--- a/client/browser/src/libs/code_intelligence/extensions.tsx
+++ b/client/browser/src/libs/code_intelligence/extensions.tsx
@@ -16,9 +16,11 @@ import {
ExtensionsControllerProps,
} from '../../../../../shared/src/extensions/controller'
import { PlatformContextProps } from '../../../../../shared/src/platform/context'
+import { TelemetryContext } from '../../../../../shared/src/telemetry/telemetryContext'
import { createPlatformContext } from '../../platform/context'
import { GlobalDebug } from '../../shared/components/GlobalDebug'
import { ShortcutProvider } from '../../shared/components/ShortcutProvider'
+import { eventLogger } from '../../shared/util/context'
import { getGlobalDebugMount } from '../github/extensions'
import { CodeHost } from './code_intelligence'
@@ -40,14 +42,16 @@ export function initializeExtensions({
if (getCommandPaletteMount) {
render(
-
-
+
+
+
+
,
getCommandPaletteMount()
)
diff --git a/client/browser/src/libs/github/inject.tsx b/client/browser/src/libs/github/inject.tsx
index 40aac81250e..b2e68f6c68a 100644
--- a/client/browser/src/libs/github/inject.tsx
+++ b/client/browser/src/libs/github/inject.tsx
@@ -1,6 +1,7 @@
import mermaid from 'mermaid'
import * as React from 'react'
import { render } from 'react-dom'
+import { TelemetryContext } from '../../../../../shared/src/telemetry/telemetryContext'
import storage from '../../browser/storage'
import { Alerts } from '../../shared/components/Alerts'
import { ConfigureSourcegraphButton } from '../../shared/components/ConfigureSourcegraphButton'
@@ -8,7 +9,7 @@ import { ContextualSourcegraphButton } from '../../shared/components/ContextualS
import { ServerAuthButton } from '../../shared/components/ServerAuthButton'
import { SymbolsDropdownContainer } from '../../shared/components/SymbolsDropdownContainer'
import { WithResolvedRev } from '../../shared/components/WithResolvedRev'
-import { inlineSymbolSearchEnabled, renderMermaidGraphsEnabled } from '../../shared/util/context'
+import { eventLogger, inlineSymbolSearchEnabled, renderMermaidGraphsEnabled } from '../../shared/util/context'
import { getFileContainers, parseURL } from './util'
async function refreshModules(): Promise {
@@ -67,7 +68,12 @@ function injectServerBanner(): void {
}
container.appendChild(mount)
}
- render(, mount)
+ render(
+
+
+ ,
+ mount
+ )
}
/**
diff --git a/client/browser/src/shared/tracking/EventLogger.tsx b/client/browser/src/shared/tracking/EventLogger.tsx
index e71a94fcab0..488f34c54d1 100644
--- a/client/browser/src/shared/tracking/EventLogger.tsx
+++ b/client/browser/src/shared/tracking/EventLogger.tsx
@@ -1,11 +1,12 @@
import uuid from 'uuid'
+import { TelemetryService } from '../../../../../shared/src/telemetry/telemetryService'
import storage from '../../browser/storage'
import { isInPage } from '../../context'
import { logUserEvent } from '../backend/userEvents'
const uidKey = 'sourcegraphAnonymousUid'
-export class EventLogger {
+export class EventLogger implements TelemetryService {
private uid: string
constructor() {
@@ -72,4 +73,15 @@ export class EventLogger {
}
)
}
+
+ /**
+ * Implements {@link TelemetryService}.
+ *
+ * @todo Use the eventName. It is currently ignored.
+ *
+ * @param _eventName This parameter is ignored; see the @todo.
+ */
+ public log(_eventName: string): void {
+ this.logCodeIntelligenceEvent()
+ }
}
diff --git a/package.json b/package.json
index 9ee6d1dfef1..c2bc2ac86a3 100644
--- a/package.json
+++ b/package.json
@@ -76,7 +76,7 @@
"@types/puppeteer": "1.10.0",
"@types/react": "16.7.13",
"@types/react-dom": "16.0.11",
- "@types/react-router": "4.4.1",
+ "@types/react-router": "4.4.3",
"@types/react-router-dom": "4.3.1",
"@types/react-stripe-elements": "1.1.9",
"@types/react-test-renderer": "16.0.3",
@@ -201,11 +201,11 @@
"react": "^16.6.1",
"react-dom": "^16.6.1",
"react-icon-base": "^2.0.0",
- "react-router": "^4.3.1",
- "react-router-dom": "^4.3.1",
+ "react-router": "^4.4.0-beta.6",
+ "react-router-dom": "^4.4.0-beta.6",
"react-stripe-elements": "^2.0.1",
"react-visibility-sensor": "^4.0.0",
- "reactstrap": "^6.5.0",
+ "reactstrap": "https://registry.npmjs.org/@sqs/reactstrap/-/reactstrap-6.5.0-tmp1.tgz",
"rxjs": "^6.3.3",
"sourcegraph": "link:packages/sourcegraph-extension-api",
"string-score": "^1.0.1",
diff --git a/shared/src/actions/ActionItem.tsx b/shared/src/actions/ActionItem.tsx
index 2518b9a1798..f3b4f8db2ba 100644
--- a/shared/src/actions/ActionItem.tsx
+++ b/shared/src/actions/ActionItem.tsx
@@ -9,6 +9,7 @@ import { urlForOpenPanel } from '../commands/commands'
import { LinkOrButton } from '../components/LinkOrButton'
import { ExtensionsControllerProps } from '../extensions/controller'
import { PlatformContextProps } from '../platform/context'
+import { TelemetryContext } from '../telemetry/telemetryContext'
import { asError, ErrorLike, isErrorLike } from '../util/errors'
export interface ActionItemProps {
@@ -76,6 +77,9 @@ interface State {
export class ActionItem extends React.PureComponent {
public state: State = { actionOrError: null }
+ public static contextType = TelemetryContext
+ public context!: React.ContextType
+
private commandExecutions = new Subject()
private subscriptions = new Subscription()
@@ -192,6 +196,10 @@ export class ActionItem extends React.PureComponent {
public runAction = (e: React.MouseEvent | React.KeyboardEvent) => {
const action = (isAltEvent(e) && this.props.altAction) || this.props.action
+
+ // Record action ID (but not args, which might leak sensitive data).
+ this.context.log(action.id)
+
if (urlForClientCommandOpen(action, this.props.location)) {
if (e.currentTarget.tagName === 'A' && e.currentTarget.hasAttribute('href')) {
// Do not execute the command. The 's default event handler will do what we want (which
diff --git a/shared/src/telemetry/telemetryContext.ts b/shared/src/telemetry/telemetryContext.ts
new file mode 100644
index 00000000000..2f18d21b387
--- /dev/null
+++ b/shared/src/telemetry/telemetryContext.ts
@@ -0,0 +1,7 @@
+import React from 'react'
+import { NOOP_TELEMETRY_SERVICE, TelemetryService } from './telemetryService'
+
+/**
+ * A React context that holds the telemetry service (for logging telemetry events).
+ */
+export const TelemetryContext = React.createContext(NOOP_TELEMETRY_SERVICE)
diff --git a/shared/src/telemetry/telemetryService.ts b/shared/src/telemetry/telemetryService.ts
new file mode 100644
index 00000000000..490d36c1c6b
--- /dev/null
+++ b/shared/src/telemetry/telemetryService.ts
@@ -0,0 +1,18 @@
+/**
+ * The telemetry service logs events.
+ */
+export interface TelemetryService {
+ /**
+ * Log an event (by sending it to the server).
+ */
+ log(eventName: string): void
+}
+
+/**
+ * A noop telemetry service.
+ */
+export const NOOP_TELEMETRY_SERVICE: TelemetryService = {
+ log: () => {
+ /* noop */
+ },
+}
diff --git a/web/src/SourcegraphWebApp.tsx b/web/src/SourcegraphWebApp.tsx
index 3c23292a10b..40803bbb5ff 100644
--- a/web/src/SourcegraphWebApp.tsx
+++ b/web/src/SourcegraphWebApp.tsx
@@ -15,6 +15,7 @@ import * as GQL from '../../shared/src/graphql/schema'
import { Notifications } from '../../shared/src/notifications/Notifications'
import { PlatformContextProps } from '../../shared/src/platform/context'
import { EMPTY_SETTINGS_CASCADE, SettingsCascadeProps } from '../../shared/src/settings/settings'
+import { TelemetryContext } from '../../shared/src/telemetry/telemetryContext'
import { isErrorLike } from '../../shared/src/util/errors'
import { authenticatedUser } from './auth'
import { FeedbackText } from './components/FeedbackText'
@@ -35,6 +36,7 @@ import { RepoRevContainerRoute } from './repo/RepoRevContainer'
import { LayoutRouteProps } from './routes'
import { SiteAdminAreaRoute } from './site-admin/SiteAdminArea'
import { SiteAdminSideBarGroups } from './site-admin/SiteAdminSidebar'
+import { eventLogger } from './tracking/eventLogger'
import { UserAccountAreaRoute } from './user/account/UserAccountArea'
import { UserAccountSidebarItems } from './user/account/UserAccountSidebar'
import { UserAreaRoute } from './user/area/UserArea'
@@ -208,34 +210,36 @@ export class SourcegraphWebApp extends React.Component
-
- (
-
- )}
- />
-
-
-
+
+
+ (
+
+ )}
+ />
+
+
+
+
)
}
diff --git a/web/src/tracking/eventLogger.tsx b/web/src/tracking/eventLogger.tsx
index 04a99ca9198..9575fe127b6 100644
--- a/web/src/tracking/eventLogger.tsx
+++ b/web/src/tracking/eventLogger.tsx
@@ -2,6 +2,7 @@ import { matchPath } from 'react-router'
import uuid from 'uuid'
import * as GQL from '../../../shared/src/graphql/schema'
import { getPathExtension } from '../../../shared/src/languages'
+import { TelemetryService } from '../../../shared/src/telemetry/telemetryService'
import { authenticatedUser } from '../auth'
import { repoRevRoute } from '../routes'
import { parseBrowserRepoURL } from '../util/url'
@@ -11,7 +12,7 @@ import { telligent } from './services/telligentWrapper'
const uidKey = 'sourcegraphAnonymousUid'
-class EventLogger {
+class EventLogger implements TelemetryService {
private hasStrippedQueryParameters = false
private user?: GQL.IUser | null
diff --git a/yarn.lock b/yarn.lock
index 79cbca89d07..03fd31b6045 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1824,7 +1824,7 @@
"@types/react" "*"
"@types/react-router" "*"
-"@types/react-router@*", "@types/react-router@4.4.1":
+"@types/react-router@*":
version "4.4.1"
resolved "https://registry.npmjs.org/@types/react-router/-/react-router-4.4.1.tgz#c875dfd0b6fe00efa463eb8e5de8b5f74644b3f5"
integrity sha512-CtQfdcXyMye3vflnQQ2sHU832iDJRoAr4P+7f964KlLYupXU1I5crP1+d/WnCMo6mmtjBjqQvxrtbAbodqerMA==
@@ -1832,6 +1832,14 @@
"@types/history" "*"
"@types/react" "*"
+"@types/react-router@4.4.3":
+ version "4.4.3"
+ resolved "https://registry.npmjs.org/@types/react-router/-/react-router-4.4.3.tgz#ea68b4021cb576866f83365b2201411537423d50"
+ integrity sha512-8GmjakEBFNCLJbpg9jtDp1EDvFP0VkIPPKBpVwmB3Q+9whFoHu8rluMUXUE5SoGkEQvVOtgJzWmUsJojNpFMQQ==
+ dependencies:
+ "@types/history" "*"
+ "@types/react" "*"
+
"@types/react-stripe-elements@1.1.9":
version "1.1.9"
resolved "https://registry.npmjs.org/@types/react-stripe-elements/-/react-stripe-elements-1.1.9.tgz#21f951b0c3885584381ad7f87c4b502ecc554765"
@@ -5104,6 +5112,14 @@ create-react-class@^15.6.2, create-react-class@^15.6.3:
loose-envify "^1.3.1"
object-assign "^4.1.1"
+create-react-context@^0.2.2:
+ version "0.2.3"
+ resolved "https://registry.npmjs.org/create-react-context/-/create-react-context-0.2.3.tgz#9ec140a6914a22ef04b8b09b7771de89567cb6f3"
+ integrity sha512-CQBmD0+QGgTaxDL3OX1IDXYqjkp2It4RIbcb99jS6AEg27Ga+a9G3JtK6SIu0HBwPLZlmwt9F7UwWA4Bn92Rag==
+ dependencies:
+ fbjs "^0.8.0"
+ gud "^1.0.0"
+
cross-env@^5.2.0:
version "5.2.0"
resolved "https://registry.npmjs.org/cross-env/-/cross-env-5.2.0.tgz#6ecd4c015d5773e614039ee529076669b9d126f2"
@@ -6781,7 +6797,7 @@ fb-watchman@^2.0.0:
dependencies:
bser "^2.0.0"
-fbjs@^0.8.9:
+fbjs@^0.8.0, fbjs@^0.8.9:
version "0.8.17"
resolved "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd"
integrity sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=
@@ -7663,6 +7679,11 @@ growly@^1.3.0:
resolved "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081"
integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=
+gud@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmjs.org/gud/-/gud-1.0.0.tgz#a489581b17e6a70beca9abe3ae57de7a499852c0"
+ integrity sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw==
+
gulp-cli@^2.0.0:
version "2.0.1"
resolved "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.0.1.tgz#7847e220cb3662f2be8a6d572bf14e17be5a994b"
@@ -7861,16 +7882,17 @@ highlight.js@^9.0.0, highlight.js@^9.12.0, highlight.js@^9.13.1:
resolved "https://registry.npmjs.org/highlight.js/-/highlight.js-9.13.1.tgz#054586d53a6863311168488a0f58d6c505ce641e"
integrity sha512-Sc28JNQNDzaH6PORtRLMvif9RSn1mYuOoX3omVjnb0+HbpPygU2ALBI0R/wsiqCb4/fcp07Gdo8g+fhtFrQl6A==
-history@^4.7.2:
- version "4.7.2"
- resolved "https://registry.npmjs.org/history/-/history-4.7.2.tgz#22b5c7f31633c5b8021c7f4a8a954ac139ee8d5b"
- integrity sha512-1zkBRWW6XweO0NBcjiphtVJVsIQ+SXF29z9DVkceeaSLVMFXHool+fdCZD4spDCfZJCILPILc3bm7Bc+HRi0nA==
+history@^4.8.0-beta.0:
+ version "4.8.0-beta.0"
+ resolved "https://registry.npmjs.org/history/-/history-4.8.0-beta.0.tgz#8b48c1354ac290341c0d73dd33c763bd140531f4"
+ integrity sha512-LDjPtGgAFDO3lZ+bumN67k0R3GWvUBLLgRJpFU2mnJ1w+D5rEbiZC1c37yPla7tx/dUzVfznt5Rmttnz0MvGdA==
dependencies:
- invariant "^2.2.1"
+ "@babel/runtime" "^7.1.2"
loose-envify "^1.2.0"
resolve-pathname "^2.2.0"
+ tiny-invariant "^1.0.2"
+ tiny-warning "^1.0.0"
value-equal "^0.4.0"
- warning "^3.0.0"
hmac-drbg@^1.0.0:
version "1.0.1"
@@ -8297,7 +8319,7 @@ into-stream@^4.0.0:
from2 "^2.1.1"
p-is-promise "^2.0.0"
-invariant@^2.2.1, invariant@^2.2.2, invariant@^2.2.4:
+invariant@^2.2.2, invariant@^2.2.4:
version "2.2.4"
resolved "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6"
integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==
@@ -12505,6 +12527,11 @@ react-inspector@^2.3.0:
babel-runtime "^6.26.0"
is-dom "^1.0.9"
+react-is@^16.5.2:
+ version "16.7.0"
+ resolved "https://registry.npmjs.org/react-is/-/react-is-16.7.0.tgz#c1bd21c64f1f1364c6f70695ec02d69392f41bfa"
+ integrity sha512-Z0VRQdF4NPDoI0tsXVMLkJLiwEBa+RP66g0xDHxgxysxSoCUccSten4RTF/UFvZF1dZvZ9Zu1sx+MDXwcOR34g==
+
react-is@^16.6.3:
version "16.6.3"
resolved "https://registry.npmjs.org/react-is/-/react-is-16.6.3.tgz#d2d7462fcfcbe6ec0da56ad69047e47e56e7eac0"
@@ -12533,30 +12560,34 @@ react-popper@^0.10.4:
popper.js "^1.14.1"
prop-types "^15.6.1"
-react-router-dom@^4.3.1:
- version "4.3.1"
- resolved "https://registry.npmjs.org/react-router-dom/-/react-router-dom-4.3.1.tgz#4c2619fc24c4fa87c9fd18f4fb4a43fe63fbd5c6"
- integrity sha512-c/MlywfxDdCp7EnB7YfPMOfMD3tOtIjrQlj/CKfNMBxdmpJP8xcz5P/UAFn3JbnQCNUxsHyVVqllF9LhgVyFCA==
+react-router-dom@^4.4.0-beta.6:
+ version "4.4.0-beta.6"
+ resolved "https://registry.npmjs.org/react-router-dom/-/react-router-dom-4.4.0-beta.6.tgz#0bec50c8a4276a555b5f1159bb94e7b6fbb73699"
+ integrity sha512-+8N3Z6Ys6NfE6Oge4HbBzyGBWPOtWEAVFKotP2KUdyFsDfhnGgKvSJA+MxRvkTarPG2sBFQiZnyJDawJJyC/qA==
dependencies:
- history "^4.7.2"
- invariant "^2.2.4"
+ "@babel/runtime" "^7.1.2"
+ history "^4.8.0-beta.0"
loose-envify "^1.3.1"
- prop-types "^15.6.1"
- react-router "^4.3.1"
- warning "^4.0.1"
+ prop-types "^15.6.2"
+ react-router "^4.4.0-beta.6"
+ tiny-invariant "^1.0.2"
+ tiny-warning "^1.0.0"
-react-router@^4.3.1:
- version "4.3.1"
- resolved "https://registry.npmjs.org/react-router/-/react-router-4.3.1.tgz#aada4aef14c809cb2e686b05cee4742234506c4e"
- integrity sha512-yrvL8AogDh2X42Dt9iknk4wF4V8bWREPirFfS9gLU1huk6qK41sg7Z/1S81jjTrGHxa3B8R3J6xIkDAA6CVarg==
+react-router@^4.4.0-beta.6:
+ version "4.4.0-beta.6"
+ resolved "https://registry.npmjs.org/react-router/-/react-router-4.4.0-beta.6.tgz#37e1d9ce2be93df397cc1feb1dcd6460ea0b236b"
+ integrity sha512-esR1UHsPpfvehX5Qn7wQrOTFsl4PxiaX3GaYvtFDSEioMsTl0zkASJBm1fXKgR9brUQX9kgiGq6XnCsiJU/82g==
dependencies:
- history "^4.7.2"
+ "@babel/runtime" "^7.1.2"
+ create-react-context "^0.2.2"
+ history "^4.8.0-beta.0"
hoist-non-react-statics "^2.5.0"
- invariant "^2.2.4"
loose-envify "^1.3.1"
path-to-regexp "^1.7.0"
- prop-types "^15.6.1"
- warning "^4.0.1"
+ prop-types "^15.6.2"
+ react-is "^16.5.2"
+ tiny-invariant "^1.0.2"
+ tiny-warning "^1.0.0"
react-split-pane@^0.1.82:
version "0.1.84"
@@ -12634,10 +12665,9 @@ react@^16.6.1:
prop-types "^15.6.2"
scheduler "^0.11.0"
-reactstrap@^6.5.0:
- version "6.5.0"
- resolved "https://registry.npmjs.org/reactstrap/-/reactstrap-6.5.0.tgz#ba655e32646e2621829f61faa033e607ec6624e5"
- integrity sha512-dWb3fB/wBAiQloteKlf+j9Nl2VLe6BMZgTEt6hpeTt0t9TwtkeU+2v2NBYONZaF4FZATfMiIKozhWpc2HmLW1g==
+"reactstrap@https://registry.npmjs.org/@sqs/reactstrap/-/reactstrap-6.5.0-tmp1.tgz":
+ version "6.5.0-tmp1"
+ resolved "https://registry.npmjs.org/@sqs/reactstrap/-/reactstrap-6.5.0-tmp1.tgz#d7bad315bddb1e43bbef00164da77583ec1bd08f"
dependencies:
classnames "^2.2.3"
lodash.isfunction "^3.0.9"
@@ -14774,11 +14804,21 @@ timers-ext@^0.1.5:
es5-ext "~0.10.46"
next-tick "1"
+tiny-invariant@^1.0.2:
+ version "1.0.3"
+ resolved "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.0.3.tgz#91efaaa0269ccb6271f0296aeedb05fc3e067b7a"
+ integrity sha512-ytQx8T4DL8PjlX53yYzcIC0WhIZbpR0p1qcYjw2pHu3w6UtgWwFJQ/02cnhOnBBhlFx/edUIfcagCaQSe3KMWg==
+
tiny-relative-date@^1.3.0:
version "1.3.0"
resolved "https://registry.npmjs.org/tiny-relative-date/-/tiny-relative-date-1.3.0.tgz#fa08aad501ed730f31cc043181d995c39a935e07"
integrity sha512-MOQHpzllWxDCHHaDno30hhLfbouoYlOI8YlMNtvKe1zXbjEVhbcEovQxvZrPvtiYW630GQDoMMarCnjfyfHA+A==
+tiny-warning@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.2.tgz#1dfae771ee1a04396bdfde27a3adcebc6b648b28"
+ integrity sha512-rru86D9CpQRLvsFG5XFdy0KdLAvjdQDyZCsRcuu60WtzFylDM3eAWSxEVz5kzL2Gp544XiUvPbVKtOA/txLi9Q==
+
tmp@^0.0.33:
version "0.0.33"
resolved "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
@@ -15685,13 +15725,6 @@ warning@^3.0.0:
dependencies:
loose-envify "^1.0.0"
-warning@^4.0.1:
- version "4.0.2"
- resolved "https://registry.npmjs.org/warning/-/warning-4.0.2.tgz#aa6876480872116fa3e11d434b0d0d8d91e44607"
- integrity sha512-wbTp09q/9C+jJn4KKJfJfoS6VleK/Dti0yqWSm6KMvJ4MRCXFQNapHuJXutJIrWV0Cf4AhTdeIe4qdKHR1+Hug==
- dependencies:
- loose-envify "^1.0.0"
-
watch@~0.18.0:
version "0.18.0"
resolved "https://registry.npmjs.org/watch/-/watch-0.18.0.tgz#28095476c6df7c90c963138990c0a5423eb4b986"