Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
this.setState({ site })
},
() => {
this.setState({ site: undefined })
}
)
)
this.subscriptions.add(
// Ensure the site is valid.
fetchingSite
.pipe(
// Get the access token for this server if we have it.
switchMap(() => getAccessToken(sourcegraphUrl)),
switchMap(token => fetchCurrentUser(false).pipe(map(user => ({ user, token })))),
filter(propertyIsDefined('user')),
// Get the IDs for all access tokens for the user.
switchMap(({ token, user }) =>
fetchAccessTokenIDs(user.id).pipe(map(usersTokenIDs => ({ usersTokenIDs, user, token })))
),
// Make sure the token still exists on the server. If it
// does exits, use it, otherwise create a new one.
switchMap(({ user, token, usersTokenIDs }) => {
const tokenExists = token && usersTokenIDs.map(({ id }) => id).includes(token.id)
return token && tokenExists
? of(token)
: createAccessToken(user.id).pipe(
tap(createdToken => {
setAccessToken(sourcegraphUrl, createdToken)
})
)
props.setSourcegraphURL(url)
})
)
this.subscriptions.add(
// Ensure the site is valid.
fetchingSite
.pipe(
filter(urlOrError => !isErrorLike(urlOrError)),
map(urlOrError => urlOrError as string),
// Get the access token for this server if we have it.
switchMap(url => this.props.getAccessToken(url).pipe(map(token => ({ token, url })))),
switchMap(({ url, token }) =>
this.props.fetchCurrentUser(false).pipe(map(user => ({ user, token, url })))
),
filter(propertyIsDefined('user')),
// Get the IDs for all access tokens for the user.
switchMap(({ token, user, url }) =>
this.props
.fetchAccessTokenIDs(user.id)
.pipe(map(usersTokenIDs => ({ usersTokenIDs, user, token, url })))
),
// Make sure the token still exists on the server. If it
// does exits, use it, otherwise create a new one.
switchMap(({ user, token, usersTokenIDs, url }) => {
const tokenExists = token && usersTokenIDs.map(({ id }) => id).includes(token.id)
return token && tokenExists
? of(token)
: this.props.createAccessToken(user.id).pipe(this.props.setAccessToken(url))
})
)
const fetchJumpURL = createJumpURLFetcher(
simpleProviderFns.fetchDefinition,
codeHost.buildJumpURLLocation || toPrettyBlobURL
)
const containerComponentUpdates = new Subject()
const hoverifier = createHoverifier({
closeButtonClicks,
goToDefinitionClicks,
hoverOverlayElements,
hoverOverlayRerenders: containerComponentUpdates.pipe(
withLatestFrom(hoverOverlayElements),
map(([, hoverOverlayElement]) => ({ hoverOverlayElement, relativeElement })),
filter(propertyIsDefined('hoverOverlayElement'))
),
pushHistory: path => {
location.href = path
},
fetchHover: ({ line, character, part, ...rest }) =>
simpleProviderFns
.fetchHover({ ...rest, position: { line, character } })
.pipe(map(hover => (hover ? (hover as HoverMerged) : hover))),
fetchJumpURL,
getReferencesURL: position => toPrettyBlobURL({ ...position, position, viewState: 'references' }),
logTelemetryEvent: () => eventLogger.logCodeIntelligenceEvent(),
})
const Link: LinkComponent = ({ to, children, ...rest }) => (
<a href="{new">
{children}</a>
const fetchJumpURL = createJumpURLFetcher(
simpleProviderFns.fetchDefinition,
codeHost.buildJumpURLLocation || toPrettyBlobURL
)
const containerComponentUpdates = new Subject()
const hoverifier = createHoverifier({
closeButtonClicks,
goToDefinitionClicks,
hoverOverlayElements,
hoverOverlayRerenders: containerComponentUpdates.pipe(
withLatestFrom(hoverOverlayElements),
map(([, hoverOverlayElement]) => ({ hoverOverlayElement, relativeElement })),
filter(propertyIsDefined('hoverOverlayElement'))
),
pushHistory: path => {
location.href = path
},
fetchHover: ({ line, character, part, ...rest }) =>
simpleProviderFns
.fetchHover({ ...rest, position: { line, character } })
.pipe(map(hover => (hover ? (hover as HoverMerged) : hover))),
fetchJumpURL,
logTelemetryEvent: () => eventLogger.logCodeIntelligenceEvent(),
})
const Link: LinkComponent = ({ to, children, ...rest }) => (
<a href="{new">
{children}
</a>
let githubState: GitHubBlobUrl | undefined
for (const anchor of anchors) {
const anchorState = getGitHubState(anchor.href) as GitHubBlobUrl
if (anchorState) {
githubState = anchorState
break
}
}
return githubState
}),
filter(isDefined),
filter(propertyIsDefined('owner')),
filter(propertyIsDefined('repoName')),
filter(propertyIsDefined('rev')),
filter(propertyIsDefined('filePath')),
map(({ owner, repoName, ...rest }) => ({ repoPath: `${window.location.host}/${owner}/${repoName}`, ...rest })),
switchMap(({ repoPath, rev, ...rest }) =>
resolveRev({ repoPath, rev }).pipe(
retryWhenCloneInProgressError(),
map(commitID => ({ ...rest, repoPath, commitID, rev: rev || commitID }))
)
)
)
map(codeView => {
const anchors = codeView.getElementsByTagName('a')
let githubState: GitHubBlobUrl | undefined
for (const anchor of anchors) {
const anchorState = getGitHubState(anchor.href) as GitHubBlobUrl
if (anchorState) {
githubState = anchorState
break
}
}
return githubState
}),
filter(isDefined),
filter(propertyIsDefined('owner')),
filter(propertyIsDefined('repoName')),
filter(propertyIsDefined('rev')),
filter(propertyIsDefined('filePath')),
map(({ owner, repoName, ...rest }) => ({ repoPath: `${window.location.host}/${owner}/${repoName}`, ...rest })),
switchMap(({ repoPath, rev, ...rest }) =>
resolveRev({ repoPath, rev }).pipe(
retryWhenCloneInProgressError(),
map(commitID => ({ ...rest, repoPath, commitID, rev: rev || commitID }))
)
)
)
export const resolveFileInfo = (codeView: HTMLElement): Observable =>
of(undefined).pipe(
map(() => {
const { repoPath, filePath, rev } = getFilePageInfo()
return { repoPath, filePath, rev }
}),
filter(propertyIsDefined('filePath')),
switchMap(({ repoPath, rev, ...rest }) =>
resolveRev({ repoPath, rev }).pipe(
retryWhenCloneInProgressError(),
map(commitID => ({ ...rest, repoPath, commitID, rev: rev || commitID }))
)
)
)