Publish native integration to npm (#5382)

This commit is contained in:
Felix Becker 2019-09-08 20:22:53 -07:00 committed by GitHub
parent e3ac21cfb7
commit 1320ad8016
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
17 changed files with 242 additions and 53 deletions

View File

@ -13,6 +13,7 @@
"release": "yarn release:chrome",
"release:chrome": "webstore upload --auto-publish --source build/bundles/chrome-bundle.zip --extension-id dgjhfomjieaadpoljlnidmbgkdffpack --client-id $GOOGLE_CLIENT_ID --client-secret $GOOGLE_CLIENT_SECRET --refresh-token $GOOGLE_REFRESH_TOKEN",
"release:ff": "./scripts/release-ff.sh",
"release:npm": "TS_NODE_COMPILER_OPTIONS=\"{\\\"module\\\":\\\"commonjs\\\"}\" ts-node ./scripts/publish-npm.ts",
"lint": "yarn run tslint && yarn run eslint && yarn run stylelint",
"tslint": "tslint -t stylish -c tslint.json -p tsconfig.json './**/*.ts?(x)'",
"eslint": "eslint '**/*.[jt]s?(x)'",

View File

@ -0,0 +1,48 @@
import { writeFile } from 'mz/fs'
import latestVersion from 'latest-version'
import signale from 'signale'
import * as semver from 'semver'
import execa from 'execa'
// Publish the native integration to npm
async function main(): Promise<void> {
const name = '@sourcegraph/code-host-integration'
// Bump version
let version: string
try {
const currentVersion = await latestVersion(name)
signale.info(`Current version is ${currentVersion}`)
version = semver.inc(currentVersion, 'patch')!
} catch (err) {
if (err && err.name === 'PackageNotFoundError') {
signale.info('Package is not released yet')
version = '0.0.0'
} else {
throw err
}
}
const packageJson = {
name,
version,
license: 'Apache-2.0',
repository: {
type: 'git',
url: 'https://github.com/sourcegraph/sourcegraph',
directory: 'browser',
},
}
signale.info(`New version is ${packageJson.version}`)
// Write package.json
await writeFile(__dirname + '/../build/integration/package.json', JSON.stringify(packageJson, null, 2))
if (!process.env.CI) {
signale.warn('Not running in CI, aborting')
return
}
// Publish
await execa('npm', ['publish', '--access', 'public'], { stdio: 'inherit' })
}
main().catch(err => {
process.exitCode = 1
console.error(err)
})

View File

@ -16,7 +16,7 @@ import {
NATIVE_INTEGRATION_ACTIVATED,
signalBrowserExtensionInstalled,
} from '../../libs/sourcegraph/inject'
import { DEFAULT_SOURCEGRAPH_URL } from '../../shared/util/context'
import { DEFAULT_SOURCEGRAPH_URL, DEFAULT_ASSETS_URL } from '../../shared/util/context'
import { featureFlags } from '../../shared/util/featureFlags'
import { assertEnv } from '../envAssertion'
@ -70,9 +70,9 @@ async function main(): Promise<void> {
return
}
const sourcegraphServerUrl = items.sourcegraphURL || DEFAULT_SOURCEGRAPH_URL
const sourcegraphURL = items.sourcegraphURL || DEFAULT_SOURCEGRAPH_URL
const isSourcegraphServer = checkIsSourcegraph(sourcegraphServerUrl)
const isSourcegraphServer = checkIsSourcegraph(sourcegraphURL)
if (isSourcegraphServer) {
signalBrowserExtensionInstalled()
return
@ -100,7 +100,7 @@ async function main(): Promise<void> {
})
}
subscriptions.add(await injectCodeIntelligence(IS_EXTENSION))
subscriptions.add(injectCodeIntelligence({ sourcegraphURL, assetsURL: DEFAULT_ASSETS_URL }, IS_EXTENSION))
// Clean up susbscription if the native integration gets activated
// later in the lifetime of the content script.

View File

@ -1,13 +1,14 @@
interface Window {
SOURCEGRAPH_URL: string | undefined
SOURCEGRAPH_URL?: string
SOURCEGRAPH_ASSETS_URL?: string
PHABRICATOR_CALLSIGN_MAPPINGS:
| {
callsign: string
path: string
}[]
| undefined
SOURCEGRAPH_PHABRICATOR_EXTENSION: boolean | undefined
SOURCEGRAPH_INTEGRATION: undefined | 'phabricator-integration' | 'bitbucket-integration'
SOURCEGRAPH_PHABRICATOR_EXTENSION?: boolean
SOURCEGRAPH_INTEGRATION?: 'phabricator-integration' | 'bitbucket-integration'
SG_ENV: 'EXTENSION' | 'PAGE'
EXTENSION_ENV: 'CONTENT' | 'BACKGROUND' | 'OPTIONS' | null
SOURCEGRAPH_BUNDLE_URL: string | undefined // Bundle Sourcegraph URL is set from the Phabricator extension.

View File

@ -14,12 +14,19 @@ setLinkComponent(({ to, children, ...props }) => (
</a>
))
async function init(): Promise<void> {
function init(): void {
console.log('Sourcegraph native integration is running')
const sourcegraphURL = window.SOURCEGRAPH_URL
if (!sourcegraphURL) {
throw new Error('window.SOURCEGRAPH_URL is undefined')
}
// Allow the assetsURL to be configurable for code hosts that self-host the integration bundle
let assetsURL = window.SOURCEGRAPH_ASSETS_URL || new URL('/.assets/extension/', sourcegraphURL).href
if (!assetsURL.endsWith('/')) {
assetsURL += '/'
}
if (document.getElementById(EXTENSION_MARKER_ID) !== null) {
// If the extension marker already exists, it means the browser extension is currently executing.
// Dispatch a custom event to signal that browser extension resources should be cleaned up.
@ -30,15 +37,13 @@ async function init(): Promise<void> {
const link = document.createElement('link')
link.setAttribute('rel', 'stylesheet')
link.setAttribute('type', 'text/css')
link.setAttribute('href', sourcegraphURL + '/.assets/extension/css/style.bundle.css')
link.setAttribute('href', new URL('css/style.bundle.css', assetsURL).href)
link.id = 'sourcegraph-styles'
document.getElementsByTagName('head')[0].appendChild(link)
window.localStorage.setItem('SOURCEGRAPH_URL', sourcegraphURL)
window.SOURCEGRAPH_URL = sourcegraphURL
// TODO handle subscription
await injectCodeIntelligence(IS_EXTENSION)
injectCodeIntelligence({ sourcegraphURL, assetsURL }, IS_EXTENSION)
}
init().catch(err => {
console.error('Error initializing integration', err)
})
init()

View File

@ -1,4 +1,4 @@
import { DEFAULT_SOURCEGRAPH_URL } from '../../shared/util/context'
import { DEFAULT_SOURCEGRAPH_URL, DEFAULT_ASSETS_URL } from '../../shared/util/context'
import { initializeExtensions } from './extensions'
describe('Extensions controller', () => {
@ -9,7 +9,10 @@ describe('Extensions controller', () => {
urlToFile: () => '',
getContext: () => ({ rawRepoName: 'foo', privateRepository: true }),
},
DEFAULT_SOURCEGRAPH_URL,
{
sourcegraphURL: DEFAULT_SOURCEGRAPH_URL,
assetsURL: DEFAULT_ASSETS_URL,
},
false
)
return expect(

View File

@ -31,7 +31,6 @@ import {
mergeMap,
observeOn,
switchMap,
take,
withLatestFrom,
tap,
} from 'rxjs/operators'
@ -75,7 +74,6 @@ import { createLSPFromExtensions, toTextDocumentIdentifier } from '../../shared/
import { CodeViewToolbar, CodeViewToolbarClassProps } from '../../shared/components/CodeViewToolbar'
import { resolveRev, retryWhenCloneInProgressError } from '../../shared/repo/backend'
import { EventLogger } from '../../shared/tracking/eventLogger'
import { observeSourcegraphURL } from '../../shared/util/context'
import { MutationRecordLike } from '../../shared/util/dom'
import { featureFlags } from '../../shared/util/featureFlags'
import { bitbucketServerCodeHost } from '../bitbucket/code_intelligence'
@ -96,6 +94,7 @@ import {
import { handleTextFields, TextField } from './text_fields'
import { resolveRepoNames } from './util/file_info'
import { ViewResolver } from './views'
import { SourcegraphIntegrationURLs } from '../../platform/context'
registerHighlightContributions()
@ -849,17 +848,19 @@ const SHOW_DEBUG = (): boolean => localStorage.getItem('debug') !== null
const CODE_HOSTS: CodeHost[] = [bitbucketServerCodeHost, githubCodeHost, gitlabCodeHost, phabricatorCodeHost]
export const determineCodeHost = (): CodeHost | undefined => CODE_HOSTS.find(codeHost => codeHost.check())
export async function injectCodeIntelligenceToCodeHost(
export function injectCodeIntelligenceToCodeHost(
mutations: Observable<MutationRecordLike[]>,
codeHost: CodeHost,
{ sourcegraphURL, assetsURL }: SourcegraphIntegrationURLs,
isExtension: boolean,
showGlobalDebug = SHOW_DEBUG()
): Promise<Subscription> {
): Subscription {
const subscriptions = new Subscription()
const sourcegraphURL = await observeSourcegraphURL(isExtension)
.pipe(take(1))
.toPromise()
const { platformContext, extensionsController } = initializeExtensions(codeHost, sourcegraphURL, isExtension)
const { platformContext, extensionsController } = initializeExtensions(
codeHost,
{ sourcegraphURL, assetsURL },
isExtension
)
const telemetryService = new EventLogger(isExtension, platformContext.requestGraphQL)
subscriptions.add(extensionsController)
subscriptions.add(

View File

@ -23,7 +23,7 @@ import {
} from '../../../../shared/src/extensions/controller'
import { PlatformContextProps } from '../../../../shared/src/platform/context'
import { TelemetryProps } from '../../../../shared/src/telemetry/telemetryService'
import { createPlatformContext } from '../../platform/context'
import { createPlatformContext, SourcegraphIntegrationURLs } from '../../platform/context'
import { GlobalDebug } from '../../shared/components/GlobalDebug'
import { ShortcutProvider } from '../../shared/components/ShortcutProvider'
import { CodeHost } from './code_intelligence'
@ -35,10 +35,10 @@ import { DOMFunctions } from './code_views'
*/
export function initializeExtensions(
{ urlToFile, getContext }: Pick<CodeHost, 'urlToFile' | 'getContext'>,
sourcegraphURL: string,
urls: SourcegraphIntegrationURLs,
isExtension: boolean
): PlatformContextProps & ExtensionsControllerProps {
const platformContext = createPlatformContext({ urlToFile, getContext }, sourcegraphURL, isExtension)
const platformContext = createPlatformContext({ urlToFile, getContext }, urls, isExtension)
const extensionsController = createExtensionsController(platformContext)
return { platformContext, extensionsController }
}

View File

@ -2,6 +2,7 @@ import { Observable, Subscription } from 'rxjs'
import { startWith } from 'rxjs/operators'
import { MutationRecordLike, observeMutations } from '../../shared/util/dom'
import { determineCodeHost, injectCodeIntelligenceToCodeHost } from './code_intelligence'
import { SourcegraphIntegrationURLs } from '../../platform/context'
/**
* Checks if the current page is a known code host. If it is,
@ -9,7 +10,7 @@ import { determineCodeHost, injectCodeIntelligenceToCodeHost } from './code_inte
*
* @param isExtension `true` when executing in the browser extension.
*/
export async function injectCodeIntelligence(isExtension: boolean): Promise<Subscription> {
export function injectCodeIntelligence(urls: SourcegraphIntegrationURLs, isExtension: boolean): Subscription {
const subscriptions = new Subscription()
const codeHost = determineCodeHost()
if (codeHost) {
@ -18,7 +19,7 @@ export async function injectCodeIntelligence(isExtension: boolean): Promise<Subs
childList: true,
subtree: true,
}).pipe(startWith([{ addedNodes: [document.body], removedNodes: [] }]))
subscriptions.add(await injectCodeIntelligenceToCodeHost(mutations, codeHost, isExtension))
subscriptions.add(injectCodeIntelligenceToCodeHost(mutations, codeHost, urls, isExtension))
}
return subscriptions
}

View File

@ -7,6 +7,7 @@ import { injectCodeIntelligence } from '../code_intelligence/inject'
import { injectExtensionMarker } from '../sourcegraph/inject'
import { getPhabricatorCSS, getSourcegraphURLFromConduit } from './backend'
import { metaClickOverride } from './util'
import { DEFAULT_ASSETS_URL } from '../../shared/util/context'
// Just for informational purposes (see getPlatformContext())
window.SOURCEGRAPH_PHABRICATOR_EXTENSION = true
@ -31,20 +32,23 @@ async function init(): Promise<void> {
)
return
}
// Backwards compat: Support Legacy Phabricator extension. Check that the Phabricator integration
// passed the bundle url. Legacy Phabricator extensions inject CSS via the loader.js script
// so we do not need to do this here.
if (!window.SOURCEGRAPH_BUNDLE_URL && !window.localStorage.getItem('SOURCEGRAPH_BUNDLE_URL')) {
injectExtensionMarker()
await injectCodeIntelligence(IS_EXTENSION)
metaClickOverride()
return
}
const sourcegraphURL =
window.localStorage.getItem('SOURCEGRAPH_URL') ||
window.SOURCEGRAPH_URL ||
(await getSourcegraphURLFromConduit())
const assetsURL = DEFAULT_ASSETS_URL
// Backwards compat: Support Legacy Phabricator extension. Check that the Phabricator integration
// passed the bundle url. Legacy Phabricator extensions inject CSS via the loader.js script
// so we do not need to do this here.
if (!window.SOURCEGRAPH_BUNDLE_URL && !window.localStorage.getItem('SOURCEGRAPH_BUNDLE_URL')) {
injectExtensionMarker()
injectCodeIntelligence({ sourcegraphURL, assetsURL }, IS_EXTENSION)
metaClickOverride()
return
}
// eslint-disable-next-line require-atomic-updates
window.SOURCEGRAPH_URL = sourcegraphURL
const css = await getPhabricatorCSS(sourcegraphURL)
@ -56,7 +60,7 @@ async function init(): Promise<void> {
window.localStorage.setItem('SOURCEGRAPH_URL', sourcegraphURL)
metaClickOverride()
injectExtensionMarker()
await injectCodeIntelligence(IS_EXTENSION)
injectCodeIntelligence({ sourcegraphURL, assetsURL }, IS_EXTENSION)
}
init().catch(err => console.error('Error initializing Phabricator integration', err))

View File

@ -1,5 +1,5 @@
import { gql } from '../../../shared/src/graphql/graphql'
import { DEFAULT_SOURCEGRAPH_URL } from '../shared/util/context'
import { DEFAULT_SOURCEGRAPH_URL, DEFAULT_ASSETS_URL } from '../shared/util/context'
import { createPlatformContext } from './context'
describe('Platform Context', () => {
@ -11,7 +11,10 @@ describe('Platform Context', () => {
urlToFile: () => '',
getContext: () => ({ rawRepoName: 'foo', privateRepository: true }),
},
DEFAULT_SOURCEGRAPH_URL,
{
sourcegraphURL: DEFAULT_SOURCEGRAPH_URL,
assetsURL: DEFAULT_ASSETS_URL,
},
false
)
return expect(

View File

@ -17,12 +17,28 @@ import { DEFAULT_SOURCEGRAPH_URL, observeSourcegraphURL } from '../shared/util/c
import { createExtensionHost } from './extensionHost'
import { editClientSettings, fetchViewerSettings, mergeCascades, storageSettingsCascade } from './settings'
export interface SourcegraphIntegrationURLs {
/**
* The URL of the configured Sourcegraph instance. Used for extensions, find-references, ...
*/
sourcegraphURL: string
/**
* The base URL where assets will be fetched from (CSS, extension host
* worker bundle, ...)
*
* This is the sourcegraph URL in most cases, but may be different for
* native code hosts that self-host the integration bundle.
*/
assetsURL: string
}
/**
* Creates the {@link PlatformContext} for the browser extension.
*/
export function createPlatformContext(
{ urlToFile, getContext }: Pick<CodeHost, 'urlToFile' | 'getContext'>,
sourcegraphURL: string,
{ sourcegraphURL, assetsURL }: SourcegraphIntegrationURLs,
isExtension: boolean
): PlatformContext {
const updatedViewerSettings = new ReplaySubject<Pick<GQL.ISettingsCascade, 'subjects' | 'final'>>(1)
@ -120,7 +136,7 @@ export function createPlatformContext(
forceUpdateTooltip: () => {
// TODO(sqs): implement tooltips on the browser extension
},
createExtensionHost: () => createExtensionHost(sourcegraphURL),
createExtensionHost: () => createExtensionHost({ sourcegraphURL, assetsURL }),
getScriptURLForExtension: async bundleURL => {
if (isInPage) {
return bundleURL

View File

@ -3,14 +3,18 @@ import { Observable } from 'rxjs'
import uuid from 'uuid'
import { EndpointPair } from '../../../shared/src/platform/context'
import { isInPage } from '../context'
import { SourcegraphIntegrationURLs } from './context'
function createInPageExtensionHost(sourcegraphURL: string): Observable<EndpointPair> {
function createInPageExtensionHost({
sourcegraphURL,
assetsURL,
}: SourcegraphIntegrationURLs): Observable<EndpointPair> {
return new Observable(subscriber => {
// Create an iframe pointing to extensionHostFrame.html,
// which will load the extension host worker, and forward it
// the client endpoints.
const frame: HTMLIFrameElement = document.createElement('iframe')
frame.setAttribute('src', `${sourcegraphURL}/.assets/extension/extensionHostFrame.html`)
frame.setAttribute('src', new URL('extensionHostFrame.html', assetsURL).href)
frame.setAttribute('style', 'display: none;')
document.body.append(frame)
const clientAPIChannel = new MessageChannel()
@ -65,9 +69,9 @@ function createInPageExtensionHost(sourcegraphURL: string): Observable<EndpointP
* worker per pair of ports, and forward messages between the port objects and
* the extension host worker's endpoints.
*/
export function createExtensionHost(sourcegraphURL: string): Observable<EndpointPair> {
export function createExtensionHost(urls: SourcegraphIntegrationURLs): Observable<EndpointPair> {
if (isInPage) {
return createInPageExtensionHost(sourcegraphURL)
return createInPageExtensionHost(urls)
}
const id = uuid.v4()
return new Observable(subscriber => {

View File

@ -3,6 +3,7 @@ import { map } from 'rxjs/operators'
import { observeStorageKey } from '../../browser/storage'
export const DEFAULT_SOURCEGRAPH_URL = 'https://sourcegraph.com'
export const DEFAULT_ASSETS_URL: string = new URL('/.assets/extension/', DEFAULT_SOURCEGRAPH_URL).href
export function observeSourcegraphURL(isExtension: boolean): Observable<string> {
if (isExtension) {

View File

@ -159,7 +159,6 @@ func addBrowserExtensionReleaseSteps(pipeline *bk.Pipeline) {
// Release to the Chrome Webstore
pipeline.AddStep(":rocket::chrome:",
bk.Env("FORCE_COLOR", "1"),
bk.Cmd("yarn --frozen-lockfile --network-timeout 60000"),
bk.Cmd("pushd browser"),
bk.Cmd("yarn -s run build"),
@ -168,11 +167,18 @@ func addBrowserExtensionReleaseSteps(pipeline *bk.Pipeline) {
// Build and self sign the FF extension and upload it to ...
pipeline.AddStep(":rocket::firefox:",
bk.Env("FORCE_COLOR", "1"),
bk.Cmd("yarn --frozen-lockfile --network-timeout 60000"),
bk.Cmd("pushd browser"),
bk.Cmd("yarn release:ff"),
bk.Cmd("popd"))
// Release to npm
pipeline.AddStep(":rocket::npm:",
bk.Cmd("yarn --frozen-lockfile --network-timeout 60000"),
bk.Cmd("pushd browser"),
bk.Cmd("yarn -s run build"),
bk.Cmd("yarn release:npm"),
bk.Cmd("popd"))
}
// Adds a Buildkite pipeline "Wait".

View File

@ -145,6 +145,7 @@
"cross-env": "^5.2.0",
"css-loader": "^3.2.0",
"eslint": "^6.3.0",
"execa": "^2.0.4",
"fancy-log": "^1.3.3",
"get-port": "^5.0.0",
"gql2ts": "^1.10.1",
@ -156,6 +157,7 @@
"jsdom": "^15.1.1",
"json-schema-ref-parser": "^7.1.0",
"json-schema-to-typescript": "^6.1.0",
"latest-version": "^5.1.0",
"message-port-polyfill": "^0.2.0",
"mini-css-extract-plugin": "^0.8.0",
"mkdirp-promise": "^5.0.1",

103
yarn.lock
View File

@ -1619,7 +1619,8 @@
integrity sha512-Te7F1RQJLBH4C8wQ2xz0nPC2vpe13F80V+Yv+c3GySOoh4DcLNN4P5u51Kh4aZPqeS5DJ7CKvHyX2SM/1EBXNg==
"@sourcegraph/extension-api-types@link:packages/@sourcegraph/extension-api-types":
version "2.0.0"
version "0.0.0"
uid ""
"@sourcegraph/prettierrc@^3.0.1":
version "3.0.1"
@ -7440,6 +7441,21 @@ execa@^1.0.0:
signal-exit "^3.0.0"
strip-eof "^1.0.0"
execa@^2.0.4:
version "2.0.4"
resolved "https://registry.npmjs.org/execa/-/execa-2.0.4.tgz#2f5cc589c81db316628627004ea4e37b93391d8e"
integrity sha512-VcQfhuGD51vQUQtKIq2fjGDLDbL6N1DTQVpYzxZ7LPIXw3HqTuIz6uxRmpV1qf8i31LHf2kjiaGI+GdHwRgbnQ==
dependencies:
cross-spawn "^6.0.5"
get-stream "^5.0.0"
is-stream "^2.0.0"
merge-stream "^2.0.0"
npm-run-path "^3.0.0"
onetime "^5.1.0"
p-finally "^2.0.0"
signal-exit "^3.0.2"
strip-final-newline "^2.0.0"
execall@^2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/execall/-/execall-2.0.0.tgz#16a06b5fe5099df7d00be5d9c06eecded1663b45"
@ -8310,7 +8326,7 @@ get-stream@^4.0.0, get-stream@^4.1.0:
dependencies:
pump "^3.0.0"
get-stream@^5.1.0:
get-stream@^5.0.0, get-stream@^5.1.0:
version "5.1.0"
resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz#01203cdc92597f9b909067c3e656cc1f4d3c4dc9"
integrity sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==
@ -9892,6 +9908,11 @@ is-stream@^1.0.0, is-stream@^1.0.1, is-stream@^1.1.0:
resolved "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
is-stream@^2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3"
integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==
is-svg@^3.0.0:
version "3.0.0"
resolved "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz#9321dbd29c212e5ca99c4fa9794c714bcafa2f75"
@ -10834,6 +10855,13 @@ latest-version@^3.0.0:
dependencies:
package-json "^4.0.0"
latest-version@^5.1.0:
version "5.1.0"
resolved "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face"
integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==
dependencies:
package-json "^6.3.0"
lazy-cache@^0.2.3:
version "0.2.7"
resolved "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz#7feddf2dcb6edb77d11ef1d117ab5ffdf0ab1b65"
@ -11530,6 +11558,11 @@ merge-stream@^1.0.1:
dependencies:
readable-stream "^2.0.1"
merge-stream@^2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
merge2@^1.2.3:
version "1.2.3"
resolved "https://registry.npmjs.org/merge2/-/merge2-1.2.3.tgz#7ee99dbd69bb6481689253f018488a1b902b0ed5"
@ -11612,6 +11645,11 @@ mimic-fn@^1.0.0:
resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"
integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==
mimic-fn@^2.1.0:
version "2.1.0"
resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
mimic-response@^1.0.0, mimic-response@^1.0.1:
version "1.0.1"
resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b"
@ -12222,6 +12260,13 @@ npm-run-path@^2.0.0:
dependencies:
path-key "^2.0.0"
npm-run-path@^3.0.0:
version "3.1.0"
resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-3.1.0.tgz#7f91be317f6a466efed3c9f2980ad8a4ee8b0fa5"
integrity sha512-Dbl4A/VfiVGLgQv29URL9xshU8XDY1GeLy+fsaZ1AA8JDSfjvr5P5+pzRbWqRSBxk6/DW7MIh8lTM/PaGnP2kg==
dependencies:
path-key "^3.0.0"
"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.1, npmlog@^4.0.2, npmlog@^4.1.2:
version "4.1.2"
resolved "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
@ -12427,6 +12472,13 @@ onetime@^2.0.0:
dependencies:
mimic-fn "^1.0.0"
onetime@^5.1.0:
version "5.1.0"
resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5"
integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==
dependencies:
mimic-fn "^2.1.0"
ono@^4.0.10:
version "4.0.10"
resolved "https://registry.npmjs.org/ono/-/ono-4.0.10.tgz#f7f9c6d1b76270a499d8664c95a740d44175134c"
@ -12583,6 +12635,11 @@ p-finally@^1.0.0:
resolved "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=
p-finally@^2.0.0:
version "2.0.1"
resolved "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz#bd6fcaa9c559a096b680806f4d657b3f0f240561"
integrity sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==
p-is-promise@^1.1.0:
version "1.1.0"
resolved "http://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz#9c9456989e9f6588017b0434d56097675c3da05e"
@ -12668,6 +12725,16 @@ package-json@^4.0.0:
registry-url "^3.0.3"
semver "^5.1.0"
package-json@^6.3.0:
version "6.5.0"
resolved "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0"
integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==
dependencies:
got "^9.6.0"
registry-auth-token "^4.0.0"
registry-url "^5.0.0"
semver "^6.2.0"
pako@~1.0.2, pako@~1.0.5:
version "1.0.10"
resolved "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz#4328badb5086a426aa90f541977d4955da5c9732"
@ -12839,6 +12906,11 @@ path-key@^2.0.0, path-key@^2.0.1:
resolved "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=
path-key@^3.0.0:
version "3.1.0"
resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.0.tgz#99a10d870a803bdd5ee6f0470e58dfcd2f9a54d3"
integrity sha512-8cChqz0RP6SHJkMt48FW0A7+qUOn+OsnOsVtzI59tZ8m+5bCSk7hzwET0pulwOM2YMn9J1efb07KB9l9f30SGg==
path-parse@^1.0.6:
version "1.0.6"
resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
@ -13941,7 +14013,7 @@ raw-loader@^2.0.0:
loader-utils "^1.1.0"
schema-utils "^1.0.0"
rc@^1.0.1, rc@^1.1.6, rc@^1.2.7:
rc@^1.0.1, rc@^1.1.6, rc@^1.2.7, rc@^1.2.8:
version "1.2.8"
resolved "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
@ -14623,6 +14695,14 @@ registry-auth-token@^3.0.1:
rc "^1.1.6"
safe-buffer "^5.0.1"
registry-auth-token@^4.0.0:
version "4.0.0"
resolved "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.0.0.tgz#30e55961eec77379da551ea5c4cf43cbf03522be"
integrity sha512-lpQkHxd9UL6tb3k/aHAVfnVtn+Bcs9ob5InuFLLEDqSqeq+AljB8GZW9xY0x7F+xYwEcjKe07nyoxzEYz6yvkw==
dependencies:
rc "^1.2.8"
safe-buffer "^5.0.1"
registry-url@^3.0.3:
version "3.1.0"
resolved "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942"
@ -14630,6 +14710,13 @@ registry-url@^3.0.3:
dependencies:
rc "^1.0.1"
registry-url@^5.0.0:
version "5.1.0"
resolved "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009"
integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==
dependencies:
rc "^1.2.8"
regjsgen@^0.5.0:
version "0.5.0"
resolved "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.0.tgz#a7634dc08f89209c2049adda3525711fb97265dd"
@ -15284,7 +15371,7 @@ semver@5.5.0:
resolved "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab"
integrity sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==
semver@^6.0.0, semver@^6.1.0, semver@^6.1.1, semver@^6.1.2:
semver@^6.0.0, semver@^6.1.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0:
version "6.3.0"
resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
@ -15781,7 +15868,8 @@ source-map@^0.7.2, source-map@^0.7.3:
integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==
"sourcegraph@link:packages/sourcegraph-extension-api":
version "23.0.1"
version "0.0.0"
uid ""
space-separated-tokens@^1.0.0:
version "1.1.2"
@ -16192,6 +16280,11 @@ strip-eof@^1.0.0:
resolved "http://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=
strip-final-newline@^2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"
integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==
strip-indent@^1.0.1:
version "1.0.1"
resolved "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2"