From bbc88fee5307a48128be0753f481c1b21a549b9b Mon Sep 17 00:00:00 2001 From: netcon Date: Mon, 29 Mar 2021 14:39:14 +0800 Subject: [PATCH 001/280] feat: add commit list view in source control (#254) --- extensions/github1s/package.json | 93 ++++++++++++- extensions/github1s/src/commands/commit.ts | 80 +++++++++++ extensions/github1s/src/commands/index.ts | 27 +++- extensions/github1s/src/commands/pull.ts | 2 +- .../src/interfaces/github-api-rest.ts | 12 ++ .../github1s/src/listeners/router/explorer.ts | 3 +- .../src/listeners/router/source-control.ts | 2 + .../sourceControlDecorationProvider.ts | 19 ++- extensions/github1s/src/repository.ts | 21 ++- .../github1s/src/views/commit-list-view.ts | 124 ++++++++++++++++++ extensions/github1s/src/views/index.ts | 12 +- .../github1s/src/views/pull-list-view.ts | 12 +- 12 files changed, 392 insertions(+), 15 deletions(-) create mode 100644 extensions/github1s/src/commands/commit.ts create mode 100644 extensions/github1s/src/views/commit-list-view.ts diff --git a/extensions/github1s/package.json b/extensions/github1s/package.json index 2e2bf889e..210c7e8f7 100644 --- a/extensions/github1s/package.json +++ b/extensions/github1s/package.json @@ -16,6 +16,7 @@ "onCommand:github1s.get-current-authority", "onCommand:github1s.checkout-ref", "onCommand:github1s.switch-to-pull", + "onCommand:github1s.switch-to-commit", "onCommand:github1s.diff-view-open-left-file", "onCommand:github1s.diff-view-open-right-file", "onView:github1s" @@ -46,6 +47,10 @@ { "id": "github1s.views.pull-request-list", "name": "Pull Requests" + }, + { + "id": "github1s.views.commit-list", + "name": "Commits" } ] }, @@ -70,6 +75,11 @@ "title": "Checkout to...", "category": "GitHub1s" }, + { + "command": "github1s.open-gitpod", + "title": "Edit files in Gitpod", + "category": "GitHub1s" + }, { "command": "github1s.switch-to-pull", "title": "Search a Pull Request", @@ -77,9 +87,10 @@ "icon": "$(search)" }, { - "command": "github1s.open-gitpod", - "title": "Edit files in Gitpod", - "category": "GitHub1s" + "command": "github1s.pull-view-refresh-pull-list", + "title": "Refresh", + "category": "GitHub1s", + "icon": "$(refresh)" }, { "command": "github1s.pull-view-item-switch-to-pull", @@ -93,6 +104,30 @@ "category": "GitHub1s", "icon": "$(globe)" }, + { + "command": "github1s.switch-to-commit", + "title": "Search a Commit", + "category": "GitHub1s", + "icon": "$(search)" + }, + { + "command": "github1s.commit-view-refresh-commit-list", + "title": "Refresh", + "category": "GitHub1s", + "icon": "$(refresh)" + }, + { + "command": "github1s.commit-view-item-switch-to-commit", + "title": "Switch to Commit", + "category": "GitHub1s", + "icon": "$(log-in)" + }, + { + "command": "github1s.commit-view-item-open-on-github", + "title": "Open on GitHub", + "category": "GitHub1s", + "icon": "$(globe)" + }, { "command": "github1s.diff-view-open-left-file", "title": "Open Left File", @@ -148,10 +183,23 @@ "dark": "#8db9e2", "highContrast": "#8db9e2" } + }, + { + "id": "github1s.colors.selectedViewItem", + "description": "selected view item color", + "defaults": { + "light": "#1890ff", + "dark": "#1890ff", + "highContrast": "#1890ff" + } } ], "menus": { "commandPalette": [ + { + "command": "github1s.pull-view-refresh-pull-list", + "when": "false" + }, { "command": "github1s.pull-view-item-switch-to-pull", "when": "false" @@ -160,6 +208,18 @@ "command": "github1s.pull-view-item-open-on-github", "when": "false" }, + { + "command": "github1s.commit-view-refresh-commit-list", + "when": "false" + }, + { + "command": "github1s.commit-view-item-switch-to-commit", + "when": "false" + }, + { + "command": "github1s.commit-view-item-open-on-github", + "when": "false" + }, { "command": "github1s.diff-view-open-left-file", "when": "false" @@ -170,10 +230,25 @@ } ], "view/title": [ + { + "command": "github1s.pull-view-refresh-pull-list", + "when": "view =~ /^github1s\\.views\\.pull-request-list$/", + "group": "navigation@1" + }, { "command": "github1s.switch-to-pull", "when": "view =~ /^github1s\\.views\\.pull-request-list$/", - "group": "navigation" + "group": "navigation@2" + }, + { + "command": "github1s.commit-view-refresh-commit-list", + "when": "view =~ /^github1s\\.views\\.commit-list$/", + "group": "navigation@1" + }, + { + "command": "github1s.switch-to-commit", + "when": "view =~ /^github1s\\.views\\.commit-list$/", + "group": "navigation@2" } ], "view/item/context": [ @@ -186,6 +261,16 @@ "command": "github1s.pull-view-item-open-on-github", "when": "viewItem =~ /^github1s:pull-request$/", "group": "inline@2" + }, + { + "command": "github1s.commit-view-item-switch-to-commit", + "when": "viewItem =~ /^github1s:commit$/", + "group": "inline@1" + }, + { + "command": "github1s.commit-view-item-open-on-github", + "when": "viewItem =~ /^github1s:commit$/", + "group": "inline@2" } ], "editor/title": [ diff --git a/extensions/github1s/src/commands/commit.ts b/extensions/github1s/src/commands/commit.ts new file mode 100644 index 000000000..ee96ebd58 --- /dev/null +++ b/extensions/github1s/src/commands/commit.ts @@ -0,0 +1,80 @@ +/** + * @file GitHub1s Commit Related Commands + * @author netcon + */ + +import * as vscode from 'vscode'; +import router from '@/router'; +import repository from '@/repository'; +import { CommitTreeItem } from '@/views/commit-list-view'; + +export const commandSwitchToCommit = async (commitSha?: string) => { + const { owner, repo } = await router.getState(); + + // if the a commitSha isn't provided, use quickInput + if (!commitSha) { + // manual input a commit sha + const inputCommitShaItem: vscode.QuickPickItem = { + label: '$(git-commit) Manual input the commit sha', + alwaysShow: true, + }; + // use the commit list as the candidates + const commitItems: vscode.QuickPickItem[] = ( + await repository.getCommits((await router.getState()).ref) + ).map((commit) => ({ + commitSha: commit.sha, + label: `(${commit.sha.slice(0, 7)}) ${commit.commit.message}`, + })); + + const quickPick = vscode.window.createQuickPick(); + quickPick.items = [inputCommitShaItem, ...commitItems]; + quickPick.show(); + + const choice = (await new Promise( + (resolve) => + quickPick.onDidAccept(() => resolve(quickPick.activeItems[0])) + )) as vscode.QuickPickItem & { commitSha?: string }; + quickPick.hide(); + + // select nothing + if (!choice) { + return; + } + + // select `manual input the commit sha` + if (choice === inputCommitShaItem) { + commitSha = await vscode.window.showInputBox({ + placeHolder: 'Please input the commit sha', + }); + } else { + // select a commit sha + commitSha = choice.commitSha; + } + } + + commitSha && router.replace(`/${owner}/${repo}/commit/${commitSha}`); +}; + +// this command is used in `source control commits view` +export const commandCommitViewItemSwitchToCommit = ( + viewItem: CommitTreeItem +) => { + return commandSwitchToCommit(viewItem?.commit?.sha); +}; + +// this command is used in `source control commit list view` +export const commandCommitViewItemOpenOnGitHub = async ( + viewItem: CommitTreeItem +) => { + const commitSha = viewItem?.commit?.sha; + + if (commitSha) { + const { owner, repo } = await router.getState(); + return vscode.commands.executeCommand( + 'vscode.open', + vscode.Uri.parse( + `https://github.com/${owner}/${repo}/commit/${commitSha}` + ) + ); + } +}; diff --git a/extensions/github1s/src/commands/index.ts b/extensions/github1s/src/commands/index.ts index 14f5d2b78..dfe2d4c17 100644 --- a/extensions/github1s/src/commands/index.ts +++ b/extensions/github1s/src/commands/index.ts @@ -5,6 +5,7 @@ import * as vscode from 'vscode'; import { getExtensionContext } from '@/helpers/context'; +import { pullRequestTreeDataProvider, commitTreeDataProvider } from '@/views'; import { commandValidateToken, commandUpdateToken, @@ -14,8 +15,13 @@ import { commandGetCurrentAuthority, commandCheckoutRef } from './ref'; import { commandSwitchToPull, commandPullViewItemSwitchToPull, - commandPullViewItemOpenPullOnGitHub, + commandPullViewItemOpenOnGitHub, } from './pull'; +import { + commandSwitchToCommit, + commandCommitViewItemSwitchToCommit, + commandCommitViewItemOpenOnGitHub, +} from './commit'; import { commandOpenGitpod } from './gitpod'; import { commandDiffViewOpenLeftFile, @@ -35,12 +41,23 @@ const commands: { id: string; callback: (...args: any[]) => any }[] = [ // checkout to other branch/tag/commit { id: 'github1s.checkout-ref', callback: commandCheckoutRef }, - // switch to a pull request + // switch to a pull request & input pull number manually { id: 'github1s.switch-to-pull', callback: commandSwitchToPull }, - // switch to a pull request + // update the pull request list in the pull requests view + { id: 'github1s.pull-view-refresh-pull-list', callback: () => pullRequestTreeDataProvider.updateTree() }, // prettier-ignore + // switch to a pull request in the pull requests view { id: 'github1s.pull-view-item-switch-to-pull', callback: commandPullViewItemSwitchToPull }, // prettier-ignore - // switch to a pull request - { id: 'github1s.pull-view-item-open-on-github', callback: commandPullViewItemOpenPullOnGitHub }, // prettier-ignore + // open pull on github in the pull requests view + { id: 'github1s.pull-view-item-open-on-github', callback: commandPullViewItemOpenOnGitHub }, // prettier-ignore + + // switch to a commit & input pull number manually + { id: 'github1s.switch-to-commit', callback: commandSwitchToCommit }, + // update the commit list in the commits view + { id: 'github1s.commit-view-refresh-commit-list', callback: () => commitTreeDataProvider.updateTree() }, // prettier-ignore + // switch to a commit in the commits view + { id: 'github1s.commit-view-item-switch-to-commit', callback: commandCommitViewItemSwitchToCommit }, // prettier-ignore + // open commit on github in the commits view + { id: 'github1s.commit-view-item-open-on-github', callback: commandCommitViewItemOpenOnGitHub }, // prettier-ignore // open current repository on gitpod { id: 'github1s.open-gitpod', callback: commandOpenGitpod }, diff --git a/extensions/github1s/src/commands/pull.ts b/extensions/github1s/src/commands/pull.ts index bc44473a1..ce8f17e2c 100644 --- a/extensions/github1s/src/commands/pull.ts +++ b/extensions/github1s/src/commands/pull.ts @@ -64,7 +64,7 @@ export const commandPullViewItemSwitchToPull = (viewItem: PullTreeItem) => { }; // this command is used in `source control pull request view` -export const commandPullViewItemOpenPullOnGitHub = async ( +export const commandPullViewItemOpenOnGitHub = async ( viewItem: PullTreeItem ) => { const pullNumber = viewItem?.pull?.number; diff --git a/extensions/github1s/src/interfaces/github-api-rest.ts b/extensions/github1s/src/interfaces/github-api-rest.ts index 8e64a4202..abf7fd9a0 100644 --- a/extensions/github1s/src/interfaces/github-api-rest.ts +++ b/extensions/github1s/src/interfaces/github-api-rest.ts @@ -176,6 +176,18 @@ export const getGitHubPullFiles = ( ).catch(handleRequestError); }; +export const getGitHubCommits = ( + owner: string, + repo: string, + sha: string, + options?: ResponseInit +) => { + return fetch( + `https://api.github.com/repos/${owner}/${repo}/commits?sha=${sha}&per_page=100`, + options + ).catch(handleRequestError); +}; + export const getGitHubCommitDetail = ( owner: string, repo: string, diff --git a/extensions/github1s/src/listeners/router/explorer.ts b/extensions/github1s/src/listeners/router/explorer.ts index 0a47bef2f..5a0d4da7c 100644 --- a/extensions/github1s/src/listeners/router/explorer.ts +++ b/extensions/github1s/src/listeners/router/explorer.ts @@ -19,7 +19,8 @@ export const explorerRouterListener = ( if ( currentState.owner !== previousState.owner || currentState.repo !== previousState.repo || - currentState.ref !== previousState.ref + currentState.ref !== previousState.ref || + currentState.pageType !== previousState.pageType ) { // should update the explorer vscode.commands.executeCommand( diff --git a/extensions/github1s/src/listeners/router/source-control.ts b/extensions/github1s/src/listeners/router/source-control.ts index dab2efc40..506547e57 100644 --- a/extensions/github1s/src/listeners/router/source-control.ts +++ b/extensions/github1s/src/listeners/router/source-control.ts @@ -6,6 +6,7 @@ import { RouterState } from '@/router/types'; import { updateSourceControlChanges } from '@/source-control/changes'; import { updateCheckoutRefOnStatusBar } from '@/source-control/status-bar'; +import { commitTreeDataProvider } from '@/views'; export const sourceControlRouterListener = ( currentState: RouterState, @@ -13,6 +14,7 @@ export const sourceControlRouterListener = ( ) => { if (currentState.ref !== previousState.ref) { updateCheckoutRefOnStatusBar(); + commitTreeDataProvider.updateTree(); } if (currentState.pullNumber !== previousState.pullNumber) { diff --git a/extensions/github1s/src/providers/sourceControlDecorationProvider.ts b/extensions/github1s/src/providers/sourceControlDecorationProvider.ts index 91be3a9f1..88f34d4eb 100644 --- a/extensions/github1s/src/providers/sourceControlDecorationProvider.ts +++ b/extensions/github1s/src/providers/sourceControlDecorationProvider.ts @@ -10,16 +10,24 @@ import { FileDecoration, FileDecorationProvider, ProviderResult, + ThemeColor, Uri, } from 'vscode'; import router from '@/router'; import * as queryString from 'query-string'; import { changedFileDecorationDataMap } from './changedFileDecorationProvider'; +const selectedViewItemDecoration: FileDecoration = { + color: new ThemeColor('github1s.colors.selectedViewItem'), + badge: '✔', + tooltip: 'Selected', +}; + export class GitHub1sSourceControlDecorationProvider implements FileDecorationProvider, Disposable { public static fileSchema: string = 'github1s-source-control-file'; public static pullSchema: string = 'github1s-source-control-pull'; + public static commitSchema: string = 'github1s-source-control-commit'; private readonly disposable: Disposable; private _onDidChangeFileDecorations = new EventEmitter(); @@ -46,7 +54,16 @@ export class GitHub1sSourceControlDecorationProvider return router.getState().then((routerState) => { const query = queryString.parse(uri.query); return +routerState.pullNumber === +query.number - ? { badge: '✔' } + ? selectedViewItemDecoration + : null; + }); + } + + if (uri.scheme === GitHub1sSourceControlDecorationProvider.commitSchema) { + return router.getState().then((routerState) => { + const query = queryString.parse(uri.query); + return routerState.commitSha === query.sha + ? selectedViewItemDecoration : null; }); } diff --git a/extensions/github1s/src/repository.ts b/extensions/github1s/src/repository.ts index 5c93aca65..711c0aba8 100644 --- a/extensions/github1s/src/repository.ts +++ b/extensions/github1s/src/repository.ts @@ -12,6 +12,7 @@ import { getGitHubPullFiles, getGitHubPulls, getGitHubCommitDetail, + getGitHubCommits, } from '@/interfaces/github-api-rest'; import { getFetchOptions } from './helpers/fetch'; @@ -52,8 +53,16 @@ export interface RepositoryCommit { login: string; avatar_url: string; }; + commit: { + author: { + date: string; + email: string; + name: string; + }; + message: string; + }; parents: { sha: string }[]; - files: RepositoryChangedFile[]; + files?: RepositoryChangedFile[]; } export enum FileChangeType { @@ -148,6 +157,16 @@ export class Repository { } ); + public getCommits = reuseable( + async ( + sha: string, + forceUpdate: boolean = false + ): Promise => { + const [owner, repo] = [this.getOwner(), this.getRepo()]; + return getGitHubCommits(owner, repo, sha, getFetchOptions(forceUpdate)); + } + ); + public getCommit = reuseable( async ( commitSha: string, diff --git a/extensions/github1s/src/views/commit-list-view.ts b/extensions/github1s/src/views/commit-list-view.ts new file mode 100644 index 000000000..05c056175 --- /dev/null +++ b/extensions/github1s/src/views/commit-list-view.ts @@ -0,0 +1,124 @@ +/** + * @file GitHub Commit List View + * @author netcon + */ + +import * as vscode from 'vscode'; +import * as queryString from 'query-string'; +import { relativeTimeTo } from '@/helpers/date'; +import repository, { RepositoryCommit } from '@/repository'; +import { GitHub1sSourceControlDecorationProvider } from '@/providers/sourceControlDecorationProvider'; +import { + getChangedFileCommand, + getCommitChangedFiles, +} from '@/source-control/changes'; +import router from '@/router'; + +const getCommitTreeItemDescription = (commit: RepositoryCommit): string => { + return [ + commit.sha.slice(0, 7), + commit.commit.author.name, + relativeTimeTo(commit.commit.author.date), + ].join(', '); +}; + +export interface CommitTreeItem extends vscode.TreeItem { + commit: RepositoryCommit; +} + +export class CommitTreeDataProvider + implements vscode.TreeDataProvider { + public static viewType = 'github1s.views.commit-list'; + + private forceUpdate = false; + private _onDidChangeTreeData = new vscode.EventEmitter(); + readonly onDidChangeTreeData = this._onDidChangeTreeData.event; + + public updateTree() { + this.forceUpdate = true; + this._onDidChangeTreeData.fire(undefined); + } + + async getCommitItems(): Promise { + const { ref } = await router.getState(); + // only recent 100 commits will be list here + // TODO: implement pagination + const repositoryCommits = await repository.getCommits( + ref, + this.forceUpdate + ); + this.forceUpdate = false; + return repositoryCommits.map((commit) => { + const label = `${commit.commit.message}`; + const description = getCommitTreeItemDescription(commit); + const tooltip = `${label} (${description})`; + const iconPath = commit.author + ? vscode.Uri.parse(commit.author?.avatar_url) + : ''; + const contextValue = 'github1s:commit'; + + return { + commit, + label, + iconPath, + description, + tooltip, + contextValue, + resourceUri: vscode.Uri.parse('').with({ + scheme: GitHub1sSourceControlDecorationProvider.commitSchema, + query: queryString.stringify({ sha: commit.sha }), + }), + collapsibleState: vscode.TreeItemCollapsibleState.Collapsed, + }; + }); + } + + async getCommitFileItems( + commit: RepositoryCommit + ): Promise { + const changedFiles = await getCommitChangedFiles(commit); + + return changedFiles.map((changedFile) => { + const filePath = changedFile.headFileUri.path; + const id = `${commit.sha} ${filePath}`; + const command = getChangedFileCommand(changedFile); + + return { + id, + command, + description: true, + resourceUri: changedFile.headFileUri.with({ + scheme: GitHub1sSourceControlDecorationProvider.fileSchema, + query: queryString.stringify({ status: changedFile.status }), + }), + collapsibleState: vscode.TreeItemCollapsibleState.None, + }; + }); + } + + getTreeItem( + element: vscode.TreeItem + ): vscode.TreeItem | Thenable { + return element; + } + + getChildren( + element?: vscode.TreeItem + ): vscode.ProviderResult { + if (!element) { + return this.getCommitItems(); + } + const commit = (element as CommitTreeItem)?.commit; + return commit ? this.getCommitFileItems(commit) : []; + } + + // the tooltip of the `CommitTreeItem` with `resourceUri` property won't show + // correctly if miss this resolveTreeItem, it seems a bug of current version + // vscode, and it has fixed in a newer version vscode + resolveTreeItem( + item: vscode.TreeItem, + _element: vscode.TreeItem + ): vscode.ProviderResult { + return item; + } +} diff --git a/extensions/github1s/src/views/index.ts b/extensions/github1s/src/views/index.ts index df8e9bc6b..70f974c33 100644 --- a/extensions/github1s/src/views/index.ts +++ b/extensions/github1s/src/views/index.ts @@ -6,6 +6,10 @@ import * as vscode from 'vscode'; import { getExtensionContext } from '@/helpers/context'; import { SettingsView } from './settings-view'; import { PullRequestTreeDataProvider } from './pull-list-view'; +import { CommitTreeDataProvider } from './commit-list-view'; + +export const commitTreeDataProvider = new CommitTreeDataProvider(); +export const pullRequestTreeDataProvider = new PullRequestTreeDataProvider(); export const registerCustomViews = () => { const context = getExtensionContext(); @@ -20,7 +24,13 @@ export const registerCustomViews = () => { // register pull request view which is in source control panel vscode.window.registerTreeDataProvider( PullRequestTreeDataProvider.viewType, - new PullRequestTreeDataProvider() + pullRequestTreeDataProvider + ), + + // register commit view which is in source control panel + vscode.window.registerTreeDataProvider( + CommitTreeDataProvider.viewType, + commitTreeDataProvider ) ); }; diff --git a/extensions/github1s/src/views/pull-list-view.ts b/extensions/github1s/src/views/pull-list-view.ts index b6b26f5e2..093713cf4 100644 --- a/extensions/github1s/src/views/pull-list-view.ts +++ b/extensions/github1s/src/views/pull-list-view.ts @@ -65,10 +65,20 @@ export class PullRequestTreeDataProvider implements vscode.TreeDataProvider { public static viewType = 'github1s.views.pull-request-list'; + private forceUpdate = false; + private _onDidChangeTreeData = new vscode.EventEmitter(); + readonly onDidChangeTreeData = this._onDidChangeTreeData.event; + + public updateTree() { + this.forceUpdate = true; + this._onDidChangeTreeData.fire(undefined); + } + async getPullItems(): Promise { // only recent 100 pull requests will be list here // TODO: implement pagination - const repositoryPulls = await repository.getPulls(); + const repositoryPulls = await repository.getPulls(this.forceUpdate); + this.forceUpdate = false; return repositoryPulls.map((pull) => { const statusIcon = statusIconMap[getPullStatus(pull)]; const label = `${statusIcon} #${pull.number} ${pull.title}`; From 37152681655dc5d9042a44a558fef6f78054e457 Mon Sep 17 00:00:00 2001 From: netcon Date: Mon, 29 Mar 2021 18:09:18 +0800 Subject: [PATCH 002/280] fix: editor will close when open it first time & add commits route support --- extensions/github1s/src/extension.ts | 4 +- .../github1s/src/listeners/router/explorer.ts | 41 +++++++++++++++---- .../github1s/src/router/parser/commits.ts | 19 +++++++++ .../github1s/src/router/parser/index.ts | 6 ++- 4 files changed, 60 insertions(+), 10 deletions(-) create mode 100644 extensions/github1s/src/router/parser/commits.ts diff --git a/extensions/github1s/src/extension.ts b/extensions/github1s/src/extension.ts index 47692564a..282e48983 100644 --- a/extensions/github1s/src/extension.ts +++ b/extensions/github1s/src/extension.ts @@ -54,7 +54,9 @@ export async function activate(context: vscode.ExtensionContext) { ); } else if (pageType === PageType.PULL_LIST) { vscode.commands.executeCommand('github1s.views.pull-request-list.focus'); - } else if (pageType === PageType.PULL) { + } else if (pageType === PageType.COMMIT_LIST) { + vscode.commands.executeCommand('github1s.views.commit-list.focus'); + } else if ([PageType.PULL, PageType.COMMIT].includes(pageType)) { vscode.commands.executeCommand('workbench.scm.focus'); } } diff --git a/extensions/github1s/src/listeners/router/explorer.ts b/extensions/github1s/src/listeners/router/explorer.ts index 5a0d4da7c..ce7bed873 100644 --- a/extensions/github1s/src/listeners/router/explorer.ts +++ b/extensions/github1s/src/listeners/router/explorer.ts @@ -10,19 +10,46 @@ import { sourceControlDecorationProvider, fileSearchProvider, } from '@/providers'; -import { RouterState } from '@/router/types'; +import { PageType, RouterState } from '@/router/types'; -export const explorerRouterListener = ( +const sortedEqual = (source: any[], target: any[]) => { + const sortedSource = source.sort(); + const sortedTarget = target.sort(); + return sortedSource.every((item, index) => item === sortedTarget[index]); +}; + +const shouldRefreshExplorerState = ( currentState: RouterState, previousState: RouterState ) => { if ( - currentState.owner !== previousState.owner || - currentState.repo !== previousState.repo || - currentState.ref !== previousState.ref || - currentState.pageType !== previousState.pageType + ['owner', 'repo', 'ref'].find( + (key) => currentState[key] !== previousState[key] + ) + ) { + return true; + } + + if ( + currentState.pageType !== previousState.pageType && + // when the pageType transform to each other between TREE and BLOB, + // don't refresh the explorer state + !sortedEqual( + [currentState.pageType, previousState.pageType], + [PageType.TREE, PageType.BLOB] + ) ) { - // should update the explorer + return true; + } + + return false; +}; + +export const explorerRouterListener = ( + currentState: RouterState, + previousState: RouterState +) => { + if (shouldRefreshExplorerState(currentState, previousState)) { vscode.commands.executeCommand( 'workbench.files.action.refreshFilesExplorer' ); diff --git a/extensions/github1s/src/router/parser/commits.ts b/extensions/github1s/src/router/parser/commits.ts new file mode 100644 index 000000000..dce97cc91 --- /dev/null +++ b/extensions/github1s/src/router/parser/commits.ts @@ -0,0 +1,19 @@ +/** + * @file GitHub Commit List Url Parser + * @author netcon + */ + +import { parsePath } from 'history'; +import { RouterState, PageType } from '../types'; + +export const parseCommitsUrl = async (path: string): Promise => { + const pathParts = parsePath(path).pathname.split('/').filter(Boolean); + const [owner, repo, _pageType, ...branchParts] = pathParts; + + return { + owner, + repo, + pageType: PageType.COMMIT_LIST, + ref: branchParts.length ? branchParts.join('/') : 'HEAD', + }; +}; diff --git a/extensions/github1s/src/router/parser/index.ts b/extensions/github1s/src/router/parser/index.ts index 27b7716ba..3658c5e7c 100644 --- a/extensions/github1s/src/router/parser/index.ts +++ b/extensions/github1s/src/router/parser/index.ts @@ -8,6 +8,7 @@ import { parseTreeUrl } from './tree'; import { parseBlobUrl } from './blob'; import { parsePullsUrl } from './pulls'; import { parsePullUrl } from './pull'; +import { parseCommitsUrl } from './commits'; import { parseCommitUrl } from './commit'; import { PageType, RouterState } from '../types'; @@ -19,8 +20,7 @@ const detectPageTypeFromPathParts = (pathParts: string[]): PageType => { pulls: PageType.PULL_LIST, pull: PageType.PULL, commit: PageType.COMMIT, - // TODO: implements below types - // commits: PageType.COMMIT_LIST, + commits: PageType.COMMIT_LIST, }; return PAGE_TYPE_MAP[pathParts[2]] || PageType.TREE; }; @@ -40,6 +40,8 @@ export const parseGitHubUrl = async (path: string): Promise => { return parsePullsUrl(path); case PageType.COMMIT: return parseCommitUrl(path); + case PageType.COMMIT_LIST: + return parseCommitsUrl(path); } // fallback to default From f8eb3c3db5adee6a18e5b00c05d3c1f6f8f10bec Mon Sep 17 00:00:00 2001 From: netcon Date: Mon, 29 Mar 2021 19:27:51 +0800 Subject: [PATCH 003/280] fix: the browser url changed in a wrong way --- extensions/github1s/src/listeners/vscode.ts | 34 +++++++++++++-------- 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/extensions/github1s/src/listeners/vscode.ts b/extensions/github1s/src/listeners/vscode.ts index b79602269..1f12bdaad 100644 --- a/extensions/github1s/src/listeners/vscode.ts +++ b/extensions/github1s/src/listeners/vscode.ts @@ -6,27 +6,37 @@ import * as vscode from 'vscode'; import router from '@/router'; import { PageType } from '@/router/types'; -import { GitHub1sFileSearchProvider } from '@/providers/fileSearchProvider'; +import { GitHub1sFileSystemProvider } from '@/providers/fileSystemProvider'; export const registerVSCodeEventListeners = () => { // replace current url when user change active editor vscode.window.onDidChangeActiveTextEditor(async (editor) => { - const { owner, repo, ref, pageType, pullNumber } = await router.getState(); + const { owner, repo, ref, pageType } = await router.getState(); const activeFileUri = editor?.document.uri; - if (activeFileUri?.scheme !== GitHub1sFileSearchProvider.scheme) { - return; - } - - // only `tree/blob` page will replace url with the active editor change - if ([PageType.TREE, PageType.BLOB].includes(pageType)) { - const filePath = activeFileUri?.path || ''; - // if no file opened and the branch is HEAD current, only retain owner and repo in url + // if no file opened and the branch is HEAD current, + // only retain `owner` and `repo` (and `ref` if need) in url + if (!activeFileUri) { const browserPath = - !filePath && ref.toUpperCase() === 'HEAD' + ref.toUpperCase() === 'HEAD' ? `/${owner}/${repo}` - : `/${owner}/${repo}/${filePath ? 'blob' : 'tree'}/${ref}${filePath}`; + : `/${owner}/${repo}/tree/${ref}`; router.history.replace(browserPath); + return; } + + if ( + // only `tree/blob` page will replace url with the active editor change + ![PageType.TREE, PageType.BLOB].includes(pageType) || + // only the file in explorer will change the router, + // the file in explorer will have a empty authority + activeFileUri?.authority || + activeFileUri?.scheme !== GitHub1sFileSystemProvider.scheme + ) { + return; + } + + const browserPath = `/${owner}/${repo}/blob/${ref}${activeFileUri.path}`; + router.history.replace(browserPath); }); }; From e5a4e3d0d3835108ab537c9ed50264e3acc7ee97 Mon Sep 17 00:00:00 2001 From: netcon Date: Tue, 30 Mar 2021 21:59:39 +0800 Subject: [PATCH 004/280] fix: can not update data because of the fetch cache (#262) --- extensions/github1s/src/helpers/fetch.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/extensions/github1s/src/helpers/fetch.ts b/extensions/github1s/src/helpers/fetch.ts index 46b6539d3..121b8ae42 100644 --- a/extensions/github1s/src/helpers/fetch.ts +++ b/extensions/github1s/src/helpers/fetch.ts @@ -84,7 +84,6 @@ export const fetch = reuseable(async (url: string, options?: RequestInit) => { try { response = await self.fetch(url, { mode: 'cors', - cache: 'force-cache', ...options, headers: { ...authHeaders, ...customHeaders }, }); From 07d1a741db3816816329f79deb3417b2e37b5d0a Mon Sep 17 00:00:00 2001 From: netcon Date: Thu, 1 Apr 2021 19:39:38 +0800 Subject: [PATCH 005/280] fix: the browser url changed in a wrong way (#266) --- extensions/github1s/src/listeners/vscode.ts | 22 ++++++++++----------- 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/extensions/github1s/src/listeners/vscode.ts b/extensions/github1s/src/listeners/vscode.ts index 1f12bdaad..5bfe3f255 100644 --- a/extensions/github1s/src/listeners/vscode.ts +++ b/extensions/github1s/src/listeners/vscode.ts @@ -14,25 +14,23 @@ export const registerVSCodeEventListeners = () => { const { owner, repo, ref, pageType } = await router.getState(); const activeFileUri = editor?.document.uri; - // if no file opened and the branch is HEAD current, - // only retain `owner` and `repo` (and `ref` if need) in url - if (!activeFileUri) { - const browserPath = - ref.toUpperCase() === 'HEAD' - ? `/${owner}/${repo}` - : `/${owner}/${repo}/tree/${ref}`; - router.history.replace(browserPath); + // only `tree/blob` page will replace url with the active editor change + if (![PageType.TREE, PageType.BLOB].includes(pageType)) { return; } + // if the file which not belong to current workspace is opened, or no file + // is opened, only retain `owner` and `repo` (and `ref` if need) in browser url if ( - // only `tree/blob` page will replace url with the active editor change - ![PageType.TREE, PageType.BLOB].includes(pageType) || - // only the file in explorer will change the router, - // the file in explorer will have a empty authority + !activeFileUri || activeFileUri?.authority || activeFileUri?.scheme !== GitHub1sFileSystemProvider.scheme ) { + const browserPath = + ref.toUpperCase() === 'HEAD' + ? `/${owner}/${repo}` + : `/${owner}/${repo}/tree/${ref}`; + router.history.replace(browserPath); return; } From 8cfe3b312cc1f38ffdbdbdbbee221e5007c6460a Mon Sep 17 00:00:00 2001 From: Siddhant Khare Date: Thu, 1 Apr 2021 21:27:56 +0530 Subject: [PATCH 006/280] Added Codacy Analysis GitHub Action (#267) Co-authored-by: netcon --- .github/workflows/codacy-analysis.yaml | 32 ++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 .github/workflows/codacy-analysis.yaml diff --git a/.github/workflows/codacy-analysis.yaml b/.github/workflows/codacy-analysis.yaml new file mode 100644 index 000000000..be8f3b3e4 --- /dev/null +++ b/.github/workflows/codacy-analysis.yaml @@ -0,0 +1,32 @@ +name: Codacy Security Scan + +on: + push: + branches: ["master", "main"] + pull_request: + branches: ["master", "main"] + +jobs: + codacy-security-scan: + name: Codacy Security Scan + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@master + + - name: Run Codacy Analysis CLI + uses: codacy/codacy-analysis-cli-action@master + with: + output: results.sarif + format: sarif + # Adjust severity of non-security issues + gh-code-scanning-compat: true + # Force 0 exit code to allow SARIF file generation + # This will handover control about PR rejection to the GitHub side + max-allowed-issues: 2147483647 + + # Upload the SARIF file generated in the previous step + - name: Upload SARIF results file + uses: github/codeql-action/upload-sarif@main + with: + sarif_file: results.sarif \ No newline at end of file From 84bd55c67e6c325840eb36a23323982cebdb4dad Mon Sep 17 00:00:00 2001 From: xcv58 Date: Thu, 1 Apr 2021 09:16:57 -0700 Subject: [PATCH 007/280] feat: Add prebuilt @github1s/vscode-web (#265) --- README.md | 37 +- docs/guide.md | 12 +- package.json | 7 +- scripts/build.sh | 4 +- scripts/package.sh | 1 - scripts/package/copy-extensions.js | 15 +- scripts/package/copy-extensions.sh | 13 +- scripts/package/copy-node_modules.sh | 4 +- scripts/package/generate-config.js | 7 +- scripts/postinstall.sh | 12 +- scripts/watch.sh | 2 +- scripts/watch/watch-dist.js | 16 - tsconfig.json | 4 +- vscode-web-github1s/README.md | 45 ++ vscode-web-github1s/package.json | 42 ++ .../resources}/builtin-extensions.json | 0 .../resources}/gulp-github1s.js | 0 .../scripts}/build-vscode.sh | 3 +- vscode-web-github1s/scripts/clone.sh | 21 + .../scripts/copy-extensions.js | 23 + .../scripts/copy-extensions.sh | 25 + .../scripts}/copy-vscode.sh | 7 +- .../scripts}/sync-code.sh | 3 +- .../scripts/watch/watch-dist.js | 46 ++ .../scripts}/watch/watch-src.js | 0 .../src}/vs/base/common/platform.ts | 0 .../vs/code/browser/workbench/workbench.ts | 0 .../browser/controller/textAreaHandler.ts | 0 .../src}/vs/github1s/notification.css | 0 .../src}/vs/github1s/notification.ts | 0 .../src}/vs/github1s/util.ts | 0 .../vs/platform/product/common/product.ts | 0 .../telemetry/common/telemetryService.ts | 0 .../parts/activitybar/activitybarActions.ts | 0 .../parts/activitybar/activitybarPart.ts | 0 .../activitybar/media/activitybarpart.css | 0 .../browser/parts/titlebar/titlebarPart.ts | 0 .../src}/vs/workbench/browser/web.main.ts | 0 .../browser/workbench.contribution.ts | 0 .../files/browser/views/explorerView.ts | 0 .../files/common/editors/fileEditorInput.ts | 0 .../contrib/url/browser/trustedDomains.ts | 0 .../contrib/webview/browser/pre/main.js | 0 .../page/browser/vs_code_welcome_page.ts | 0 .../page/browser/welcomePage.contribution.ts | 0 .../welcome/page/browser/welcomePage.css | 0 .../welcome/page/browser/welcomePage.ts | 0 .../themes/browser/workbenchThemeService.ts | 0 .../themes/common/themeConfiguration.ts | 0 vscode-web-github1s/yarn.lock | 528 ++++++++++++++++++ yarn.lock | 60 ++ 51 files changed, 857 insertions(+), 80 deletions(-) create mode 100644 vscode-web-github1s/README.md create mode 100644 vscode-web-github1s/package.json rename {resources => vscode-web-github1s/resources}/builtin-extensions.json (100%) rename {resources => vscode-web-github1s/resources}/gulp-github1s.js (100%) rename {scripts/build => vscode-web-github1s/scripts}/build-vscode.sh (90%) create mode 100755 vscode-web-github1s/scripts/clone.sh create mode 100755 vscode-web-github1s/scripts/copy-extensions.js create mode 100755 vscode-web-github1s/scripts/copy-extensions.sh rename {scripts/package => vscode-web-github1s/scripts}/copy-vscode.sh (51%) rename {scripts/build => vscode-web-github1s/scripts}/sync-code.sh (79%) create mode 100755 vscode-web-github1s/scripts/watch/watch-dist.js rename {scripts => vscode-web-github1s/scripts}/watch/watch-src.js (100%) rename {src => vscode-web-github1s/src}/vs/base/common/platform.ts (100%) rename {src => vscode-web-github1s/src}/vs/code/browser/workbench/workbench.ts (100%) rename {src => vscode-web-github1s/src}/vs/editor/browser/controller/textAreaHandler.ts (100%) rename {src => vscode-web-github1s/src}/vs/github1s/notification.css (100%) rename {src => vscode-web-github1s/src}/vs/github1s/notification.ts (100%) rename {src => vscode-web-github1s/src}/vs/github1s/util.ts (100%) rename {src => vscode-web-github1s/src}/vs/platform/product/common/product.ts (100%) rename {src => vscode-web-github1s/src}/vs/platform/telemetry/common/telemetryService.ts (100%) rename {src => vscode-web-github1s/src}/vs/workbench/browser/parts/activitybar/activitybarActions.ts (100%) rename {src => vscode-web-github1s/src}/vs/workbench/browser/parts/activitybar/activitybarPart.ts (100%) rename {src => vscode-web-github1s/src}/vs/workbench/browser/parts/activitybar/media/activitybarpart.css (100%) rename {src => vscode-web-github1s/src}/vs/workbench/browser/parts/titlebar/titlebarPart.ts (100%) rename {src => vscode-web-github1s/src}/vs/workbench/browser/web.main.ts (100%) rename {src => vscode-web-github1s/src}/vs/workbench/browser/workbench.contribution.ts (100%) rename {src => vscode-web-github1s/src}/vs/workbench/contrib/files/browser/views/explorerView.ts (100%) rename {src => vscode-web-github1s/src}/vs/workbench/contrib/files/common/editors/fileEditorInput.ts (100%) rename {src => vscode-web-github1s/src}/vs/workbench/contrib/url/browser/trustedDomains.ts (100%) rename {src => vscode-web-github1s/src}/vs/workbench/contrib/webview/browser/pre/main.js (100%) rename {src => vscode-web-github1s/src}/vs/workbench/contrib/welcome/page/browser/vs_code_welcome_page.ts (100%) rename {src => vscode-web-github1s/src}/vs/workbench/contrib/welcome/page/browser/welcomePage.contribution.ts (100%) rename {src => vscode-web-github1s/src}/vs/workbench/contrib/welcome/page/browser/welcomePage.css (100%) rename {src => vscode-web-github1s/src}/vs/workbench/contrib/welcome/page/browser/welcomePage.ts (100%) rename {src => vscode-web-github1s/src}/vs/workbench/services/themes/browser/workbenchThemeService.ts (100%) rename {src => vscode-web-github1s/src}/vs/workbench/services/themes/common/themeConfiguration.ts (100%) create mode 100644 vscode-web-github1s/yarn.lock diff --git a/README.md b/README.md index 42aca6c96..e74bc5e44 100644 --- a/README.md +++ b/README.md @@ -59,15 +59,38 @@ You can start an online development environment with [Gitpod](https://www.gitpod ### Local development -You need [these prerequisites (the same ones as for VS Code)](https://github.com/microsoft/vscode/wiki/How-to-Contribute#prerequisites) for development. +```bash +git clone git@github.com:conwnet/github1s.git +cd github1s +yarn +yarn watch +yarn serve # in another shell +# Then visit http://localhost:5000 or http://localhost:5000/conwnet/github1s once the build is completed. +``` + +#### Local development with full VS Code build + +You need [these prerequisites (the same ones as for VS Code)](https://github.com/microsoft/vscode/wiki/How-to-Contribute#prerequisites) for development with full VS Code build. +Please make sure you could build VS Code locally before the watch mode. + +To verify the build: ```bash -$ git clone git@github.com:conwnet/github1s.git -$ cd github1s -$ yarn -$ yarn watch -$ yarn serve # in another shell -$ # Then visit http://localhost:5000 or http://localhost:5000/conwnet/github1s once the build is completed. +cd github1s +cd vscode-web-github1s +yarn +yarn clone +yarn build +``` + +After the inital successful build, you could use the watch mode: + +```bash +cd github1s +yarn +yarn watch-with-vscode +yarn serve # in another shell +# Then visit http://localhost:5000 or http://localhost:5000/conwnet/github1s once the build is completed. ``` ### ... or ... VS Code + Docker Development diff --git a/docs/guide.md b/docs/guide.md index 505eac4fc..ee9db7027 100644 --- a/docs/guide.md +++ b/docs/guide.md @@ -41,15 +41,15 @@ Now you can visit http://localhost:5000 in the browser. If you get a 404 error f ## Watch Mode -What happens after you run `yarn watch`? +What happens after you run `yarn watch-with-vscode`? 1. Copy some necessary resources (`index.html`, extensions config, libraries, etc.) to the `dist` directory. -2. Go to `lib/vscode` and run `yarn gulp compile-web` to build the necessary extensions, then copy it to the `dist/extensions` directory. +2. Go to `vscode-web-github1s/lib/vscode` and run `yarn gulp compile-web` to build the necessary extensions, then copy it to the `dist/extensions` directory. -3. Go to `lib/vscode` and run `yarn watch` (the native watch of vscode), it will trigger a new build if something in it has been changed. +3. Go to `vscode-web-github1s/lib/vscode` and run `yarn watch` (the native watch of vscode), it will trigger a new build if something in it has been changed. -4. Watch the `src` directory, merge it in to `lib/vscode/src` if something in it has been changed. (When a new file is merged into `lib/vscode/src`, it will trigger the watcher that is described in Step 3) +4. Watch the `vscode-web-github1s/src` directory, merge it in to `vscode-web-github1s/lib/vscode/src` if something in it has been changed. (When a new file is merged into `lib/vscode/src`, it will trigger the watcher that is described in Step 3) 5. Go to `extensions/github1s` and run `yarn watch`, it will trigger a new build if something has been changed. @@ -59,6 +59,10 @@ Note that since we have modified the source code of VS Code, it may get into tro It is a little laborious to complete the watch process, but I didn't think of a better solution. +What happens after you run `yarn watch`? + +It's the same procedure as `yarn watch-with-vscode` without the step 2, 3, and 4. Instead of the local VS Code, it uses the prebuilt [@github1s/vscode-web](https://www.npmjs.com/package/@github1s/vscode-web) version. + ## Build mode Put simply, we build the necessary code and do a minify. The minify script is modified from [Code Server](https://github.com/cdr/code-server). diff --git a/package.json b/package.json index d96a95d46..091aa2f31 100644 --- a/package.json +++ b/package.json @@ -7,6 +7,7 @@ "lib": "lib" }, "devDependencies": { + "@github1s/vscode-web": "0.0.3", "@typescript-eslint/eslint-plugin": "^4.15.0", "@typescript-eslint/parser": "^4.15.0", "chokidar": "^3.5.1", @@ -34,11 +35,11 @@ "hash": "./scripts/hash.sh", "package": "./scripts/package.sh", "watch": "rm -rf dist && run-p watch:*", + "watch-with-vscode": "run-p watch watch-vscode", + "watch-vscode": "cd vscode-web-github1s && yarn watch", "watch:setup": "./scripts/watch.sh", - "watch:vscode": "cd lib/vscode && yarn watch", - "watch:github1s-extension": "cd extensions/github1s && yarn dev", - "watch:src": "cd scripts/watch && node watch-src.js", "watch:dist": "cd scripts/watch && node watch-dist.js", + "watch:github1s-extension": "cd extensions/github1s && yarn dev", "serve": "node ./scripts/serve-dist.js", "format": "prettier --write .", "eslint": "eslint --ext .ts --ext .js .", diff --git a/scripts/build.sh b/scripts/build.sh index 64815bd38..bb411b40a 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -9,12 +9,10 @@ export IS_BUILD="true" function main() { rm -rf "${APP_ROOT}/dist" cd "${APP_ROOT}/scripts" - ./build/sync-code.sh - ./build/build-vscode.sh ./build/build-github1s-extensions.sh ./package.sh echo "all build done!" } -main "$@" \ No newline at end of file +main "$@" diff --git a/scripts/package.sh b/scripts/package.sh index b8a3dc9c9..c441603ee 100755 --- a/scripts/package.sh +++ b/scripts/package.sh @@ -6,7 +6,6 @@ APP_ROOT=$(pwd) function main() { cd "${APP_ROOT}/scripts" - ./package/copy-vscode.sh ./package/copy-extensions.sh ./package/copy-node_modules.sh ./package/copy-resources.sh diff --git a/scripts/package/copy-extensions.js b/scripts/package/copy-extensions.js index e25618276..0bb5bc92c 100755 --- a/scripts/package/copy-extensions.js +++ b/scripts/package/copy-extensions.js @@ -4,26 +4,13 @@ const path = require('path'); const fs = require('fs-extra'); const APP_ROOT = path.join(__dirname, '../..'); -const TARGET_DIR = path.join(APP_ROOT, 'dist/static/extensions'); -const enableExtensions = - require(path.join(APP_ROOT, 'resources/builtin-extensions.json')) || []; const main = () => { - fs.ensureDirSync(TARGET_DIR); - - enableExtensions.forEach((extension) => { - fs.copySync( - path.join(APP_ROOT, 'lib/vscode', extension.path), - path.join(TARGET_DIR, path.basename(extension.path)), - { filter: (src) => !src.includes('node_modules') } - ); - }); - const extensions = fs.readdirSync(path.join(APP_ROOT, 'extensions')); extensions.forEach((extension) => { fs.copySync( path.join(APP_ROOT, 'extensions', extension), - path.join(TARGET_DIR, extension), + path.join(path.join(APP_ROOT, 'dist/static/extensions'), extension), { filter: (src) => !src.includes('node_modules') } ); }); diff --git a/scripts/package/copy-extensions.sh b/scripts/package/copy-extensions.sh index c7cfd5931..28decb127 100755 --- a/scripts/package/copy-extensions.sh +++ b/scripts/package/copy-extensions.sh @@ -4,19 +4,10 @@ set -euo pipefail cd "$(dirname "${0}")/../.." APP_ROOT=$(pwd) -function ensureBuiltinExtensitions() { - cd "${APP_ROOT}/lib/vscode" - if [ ! -e "extensions/emmet/dist/browser" ] - then - echo "compile vscode builtin extensions..." - yarn gulp compile-web - fi -} - function main() { - ensureBuiltinExtensitions cd ${APP_ROOT} - mkdir -p dist/static/extensions + TARGET="vscode-web-github1s/dist" + mkdir -p "${TARGET}/extensions" node scripts/package/copy-extensions.js echo "copy vscode builtin extensions done!" diff --git a/scripts/package/copy-node_modules.sh b/scripts/package/copy-node_modules.sh index cc0c02fed..026dd4105 100755 --- a/scripts/package/copy-node_modules.sh +++ b/scripts/package/copy-node_modules.sh @@ -11,9 +11,11 @@ function main() { for dependency in ${dependencies[@]}; do - rsync -a --del lib/vscode/node_modules/${dependency} dist/static/node_modules + rsync -a --del vscode-web-github1s/node_modules/${dependency} dist/static/node_modules done + rsync -a node_modules/@github1s/vscode-web/dist/extensions/ dist/static/extensions + rsync -a --del node_modules/@github1s/vscode-web/dist/vscode/ dist/static/vscode echo "copy necessary node_modules done!" } diff --git a/scripts/package/generate-config.js b/scripts/package/generate-config.js index 07ba927c9..d4ce73aef 100755 --- a/scripts/package/generate-config.js +++ b/scripts/package/generate-config.js @@ -4,10 +4,13 @@ const fs = require('fs-extra'); const path = require('path'); const APP_ROOT = path.join(__dirname, '../..'); -const VSCODE_PATH = path.join(APP_ROOT, 'lib/vscode'); +const VSCODE_PATH = path.join( + APP_ROOT, + 'node_modules/@github1s/vscode-web/dist' +); const enableExtensions = require(path.join( APP_ROOT, - 'resources/builtin-extensions.json' + 'vscode-web-github1s/resources/builtin-extensions.json' )); /** diff --git a/scripts/postinstall.sh b/scripts/postinstall.sh index dfe9b84bb..9b25b8194 100755 --- a/scripts/postinstall.sh +++ b/scripts/postinstall.sh @@ -15,16 +15,8 @@ function main() { fi done - # clone vscode and install dependencies - cd ${APP_ROOT} - if [ -d "lib/vscode" ]; then - echo "./lib/vscode already exists, skip clone." - exit 0 - fi - mkdir -p lib - cd lib - git clone --depth 1 -b 1.52.1 https://github.com/microsoft/vscode.git vscode - cd vscode + # install dependencies for the @github1s/vscode-web + cd "${APP_ROOT}/vscode-web-github1s" yarn --frozen-lockfile } diff --git a/scripts/watch.sh b/scripts/watch.sh index c22d79861..f292272ba 100755 --- a/scripts/watch.sh +++ b/scripts/watch.sh @@ -13,7 +13,7 @@ function main() { node ./package/generate-config.js echo 'please waiting...' - while [ ! -e "${APP_ROOT}/lib/vscode/out" ] + while [ ! -e "${APP_ROOT}/vscode-web-github1s/lib/vscode/out" ] do echo "waiting for vscode build..." sleep 3 diff --git a/scripts/watch/watch-dist.js b/scripts/watch/watch-dist.js index 14337ac05..0f2848ad3 100755 --- a/scripts/watch/watch-dist.js +++ b/scripts/watch/watch-dist.js @@ -22,21 +22,6 @@ const debounce = (func, delay) => { }; }; -const autoSyncVscodeOut = async () => { - const SOURCE = path.join(APP_ROOT, 'lib/vscode/out'); - const TARGET = path.join(APP_ROOT, 'dist/static/vscode'); - - await util.promisify(cp.exec)(`rsync -a ${SOURCE}/ ${TARGET}`); - - chokidar.watch(SOURCE).on( - 'all', - debounce((_, path) => { - cp.exec(`rsync -a ${SOURCE}/ ${TARGET}`); - console.log(`sync ${path}`); - }, 300) - ); -}; - const autoSyncGitHub1sExtension = async () => { const SOURCE = path.join(APP_ROOT, 'extensions'); const TARGET = path.join(APP_ROOT, 'dist/static/extensions'); @@ -55,7 +40,6 @@ const autoSyncGitHub1sExtension = async () => { const main = () => { fs.ensureDirSync(path.join(APP_ROOT, 'dist/static')); - autoSyncVscodeOut(); autoSyncGitHub1sExtension(); }; diff --git a/tsconfig.json b/tsconfig.json index e5043f6b7..184830ac5 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -12,8 +12,8 @@ "target": "es2017", "paths": { "vs/*": [ - "./src/vs/*", - "./lib/vscode/src/vs/*" + "./vscode-web-github1s/src/vs/*", + "./vscode-web-github1s/lib/vscode/src/vs/*" ], }, "lib": [ diff --git a/vscode-web-github1s/README.md b/vscode-web-github1s/README.md new file mode 100644 index 000000000..d5d2398c3 --- /dev/null +++ b/vscode-web-github1s/README.md @@ -0,0 +1,45 @@ +# @github1s/vscode-web + +This is the companion NPM package to support GitHub1s. The NPM package is [@github1s/vscode-web](https://www.npmjs.com/package/@github1s/vscode-web). + +## Commands + +`yarn clone` - clone the official VS Code repo. + +`yarn build` - build the VS Code with the custom code under `src`. + +`yarn watch` - watch the code change under `src` directory and rebuild VS Code. + +## Local development + +There are two ways to do local development with GitHub1s. For feature development, you could use the `yarn watch-with-vscode` under the root directory. + +To verify the NPM package content itself before publish. You need to install the [yalc](https://github.com/wclr/yalc) first (`yarn global add yalc`). + +Then run the following commands: + +```sh +cd github1s +cd vscode-web-github1s +yarn build +yalc publish + +cd .. +yalc add -D @github1s/vscode-web +yarn build +yarn serve +``` + +And visit the http://localhost:5000 to verify the change. Please revert any changes related to `yalc` before commit, i.e. the `package.json`, the `.yalc/` and `yalc.lock` files. + +## Publish + +To publish the NPM package, please make sure you have the right access via https://www.npmjs.com/ and run the following commands: + +```sh +cd github1s +cd vscode-web-github1s +yarn build +# bump the `version` field in vscode-web-github1s/package.json file. +npm publish --access public +``` diff --git a/vscode-web-github1s/package.json b/vscode-web-github1s/package.json new file mode 100644 index 000000000..d499ad7ae --- /dev/null +++ b/vscode-web-github1s/package.json @@ -0,0 +1,42 @@ +{ + "name": "@github1s/vscode-web", + "version": "0.0.3", + "description": "VS Code web for GitHub1s", + "author": "github1s", + "license": "MIT", + "repository": "https://github.com/conwnet/github1s/issues/257", + "scripts": { + "clone": "./scripts/clone.sh", + "build": "yarn sync && ./scripts/build-vscode.sh && run-p copy:*", + "copy:vscode": "./scripts/copy-vscode.sh", + "copy:extension": "./scripts/copy-extensions.sh", + "sync": "./scripts/sync-code.sh", + "watch": "yarn clone && run-p watch:*", + "watch:vscode": "cd lib/vscode && yarn watch", + "watch:src": "cd scripts/watch && node watch-src.js", + "watch:dist": "cd scripts/watch && node watch-dist.js" + }, + "private": false, + "files": [ + "/dist" + ], + "keywords": [ + "vscode", + "vscode-web", + "github1s" + ], + "dependencies": { + "iconv-lite-umd": "0.6.8", + "jschardet": "2.2.1", + "tas-client-umd": "0.1.2", + "vscode-oniguruma": "1.3.1", + "vscode-textmate": "5.2.0", + "xterm": "4.10.0-beta.4", + "xterm-addon-search": "0.8.0-beta.3", + "xterm-addon-unicode11": "0.3.0-beta.3", + "xterm-addon-webgl": "0.10.0-beta.1" + }, + "devDependencies": { + "npm-run-all": "^4.1.5" + } +} diff --git a/resources/builtin-extensions.json b/vscode-web-github1s/resources/builtin-extensions.json similarity index 100% rename from resources/builtin-extensions.json rename to vscode-web-github1s/resources/builtin-extensions.json diff --git a/resources/gulp-github1s.js b/vscode-web-github1s/resources/gulp-github1s.js similarity index 100% rename from resources/gulp-github1s.js rename to vscode-web-github1s/resources/gulp-github1s.js diff --git a/scripts/build/build-vscode.sh b/vscode-web-github1s/scripts/build-vscode.sh similarity index 90% rename from scripts/build/build-vscode.sh rename to vscode-web-github1s/scripts/build-vscode.sh index 113896ab1..94e5b9ff6 100755 --- a/scripts/build/build-vscode.sh +++ b/vscode-web-github1s/scripts/build-vscode.sh @@ -1,8 +1,9 @@ #!/usr/bin/env bash set -euo pipefail -cd "$(dirname "${0}")/../.." +cd "$(dirname "${0}")/.." APP_ROOT=$(pwd) +echo $APP_ROOT # build vscode source and vscode builtin extensions function main() { diff --git a/vscode-web-github1s/scripts/clone.sh b/vscode-web-github1s/scripts/clone.sh new file mode 100755 index 000000000..72ef4bbb2 --- /dev/null +++ b/vscode-web-github1s/scripts/clone.sh @@ -0,0 +1,21 @@ +#!/usr/bin/env bash +set -euo pipefail + +cd "$(dirname "${0}")/.." +APP_ROOT=$(pwd) + +function main() { + # clone vscode and install dependencies + cd ${APP_ROOT} + if [ -d "lib/vscode" ]; then + echo "./lib/vscode already exists, skip clone." + exit 0 + fi + mkdir -p lib + cd lib + git clone --depth 1 -b 1.52.1 https://github.com/microsoft/vscode.git vscode + cd vscode + yarn --frozen-lockfile +} + +main "$@" diff --git a/vscode-web-github1s/scripts/copy-extensions.js b/vscode-web-github1s/scripts/copy-extensions.js new file mode 100755 index 000000000..496b936d8 --- /dev/null +++ b/vscode-web-github1s/scripts/copy-extensions.js @@ -0,0 +1,23 @@ +#!/usr/bin/env node + +const path = require('path'); +const fs = require('fs-extra'); + +const APP_ROOT = path.join(__dirname, '..'); +const TARGET_DIR = path.join(APP_ROOT, 'dist/extensions'); +const enableExtensions = + require(path.join(APP_ROOT, 'resources/builtin-extensions.json')) || []; + +const main = () => { + fs.ensureDirSync(TARGET_DIR); + + enableExtensions.forEach((extension) => { + fs.copySync( + path.join(APP_ROOT, 'lib/vscode', extension.path), + path.join(TARGET_DIR, path.basename(extension.path)), + { filter: (src) => !src.includes('node_modules') } + ); + }); +}; + +main(); diff --git a/vscode-web-github1s/scripts/copy-extensions.sh b/vscode-web-github1s/scripts/copy-extensions.sh new file mode 100755 index 000000000..5d13a4a0f --- /dev/null +++ b/vscode-web-github1s/scripts/copy-extensions.sh @@ -0,0 +1,25 @@ +#!/usr/bin/env bash +set -euo pipefail + +cd "$(dirname "${0}")/.." +APP_ROOT=$(pwd) + +function ensureBuiltinExtensitions() { + cd "${APP_ROOT}/lib/vscode" + if [ ! -e "extensions/emmet/dist/browser" ] + then + echo "compile vscode builtin extensions..." + yarn gulp compile-web + fi +} + +function main() { + ensureBuiltinExtensitions + cd ${APP_ROOT} + mkdir -p "dist/extensions" + node scripts/copy-extensions.js + + echo "copy vscode builtin extensions done!" +} + +main "$@" diff --git a/scripts/package/copy-vscode.sh b/vscode-web-github1s/scripts/copy-vscode.sh similarity index 51% rename from scripts/package/copy-vscode.sh rename to vscode-web-github1s/scripts/copy-vscode.sh index 8086ad0c7..2d3b1c6e4 100755 --- a/scripts/package/copy-vscode.sh +++ b/vscode-web-github1s/scripts/copy-vscode.sh @@ -1,13 +1,14 @@ #!/usr/bin/env bash set -euo pipefail -cd "$(dirname "${0}")/../.." +cd "$(dirname "${0}")/.." APP_ROOT=$(pwd) function main() { cd ${APP_ROOT} - mkdir -p dist/static - rsync -a --del lib/vscode/out-vscode-min/ dist/static/vscode + TARGET="dist/vscode" + mkdir -p ${TARGET} + rsync -a --del lib/vscode/out-vscode-min/ "${TARGET}" echo "copy vscode done!" } diff --git a/scripts/build/sync-code.sh b/vscode-web-github1s/scripts/sync-code.sh similarity index 79% rename from scripts/build/sync-code.sh rename to vscode-web-github1s/scripts/sync-code.sh index 5a4e27b93..e1420f0d3 100755 --- a/scripts/build/sync-code.sh +++ b/vscode-web-github1s/scripts/sync-code.sh @@ -1,8 +1,9 @@ #!/usr/bin/env bash set -euo pipefail -cd "$(dirname "${0}")/../.." +cd "$(dirname "${0}")/.." APP_ROOT=$(pwd) +echo $APP_ROOT # sync src/* to vscode function main() { diff --git a/vscode-web-github1s/scripts/watch/watch-dist.js b/vscode-web-github1s/scripts/watch/watch-dist.js new file mode 100755 index 000000000..6f1698e25 --- /dev/null +++ b/vscode-web-github1s/scripts/watch/watch-dist.js @@ -0,0 +1,46 @@ +#!/usr/bin/env node + +const chokidar = require('chokidar'); +const path = require('path'); +const fs = require('fs-extra'); +const cp = require('child_process'); +const util = require('util'); + +const APP_ROOT = path.join(__dirname, '../../..'); + +const debounce = (func, delay) => { + let timer = null; + let lastResult = null; + return function () { + if (timer) { + clearTimeout(timer); + } + timer = setTimeout(() => { + lastResult = func.apply(this, Array.prototype.slice.call(arguments, 0)); + }, delay); + return lastResult; + }; +}; + +const autoSyncVscodeOut = async () => { + const SOURCE = path.join(APP_ROOT, 'vscode-web-github1s/lib/vscode/out'); + const TARGET = path.join(APP_ROOT, 'dist/static/vscode'); + + await util.promisify(cp.exec)(`rsync -a ${SOURCE}/ ${TARGET}`); + + chokidar.watch(SOURCE).on( + 'all', + debounce((_, path) => { + cp.exec(`rsync -a ${SOURCE}/ ${TARGET}`); + console.log(`sync ${path}`); + }, 300) + ); +}; + +const main = () => { + fs.ensureDirSync(path.join(APP_ROOT, 'dist/static')); + + autoSyncVscodeOut(); +}; + +main(); diff --git a/scripts/watch/watch-src.js b/vscode-web-github1s/scripts/watch/watch-src.js similarity index 100% rename from scripts/watch/watch-src.js rename to vscode-web-github1s/scripts/watch/watch-src.js diff --git a/src/vs/base/common/platform.ts b/vscode-web-github1s/src/vs/base/common/platform.ts similarity index 100% rename from src/vs/base/common/platform.ts rename to vscode-web-github1s/src/vs/base/common/platform.ts diff --git a/src/vs/code/browser/workbench/workbench.ts b/vscode-web-github1s/src/vs/code/browser/workbench/workbench.ts similarity index 100% rename from src/vs/code/browser/workbench/workbench.ts rename to vscode-web-github1s/src/vs/code/browser/workbench/workbench.ts diff --git a/src/vs/editor/browser/controller/textAreaHandler.ts b/vscode-web-github1s/src/vs/editor/browser/controller/textAreaHandler.ts similarity index 100% rename from src/vs/editor/browser/controller/textAreaHandler.ts rename to vscode-web-github1s/src/vs/editor/browser/controller/textAreaHandler.ts diff --git a/src/vs/github1s/notification.css b/vscode-web-github1s/src/vs/github1s/notification.css similarity index 100% rename from src/vs/github1s/notification.css rename to vscode-web-github1s/src/vs/github1s/notification.css diff --git a/src/vs/github1s/notification.ts b/vscode-web-github1s/src/vs/github1s/notification.ts similarity index 100% rename from src/vs/github1s/notification.ts rename to vscode-web-github1s/src/vs/github1s/notification.ts diff --git a/src/vs/github1s/util.ts b/vscode-web-github1s/src/vs/github1s/util.ts similarity index 100% rename from src/vs/github1s/util.ts rename to vscode-web-github1s/src/vs/github1s/util.ts diff --git a/src/vs/platform/product/common/product.ts b/vscode-web-github1s/src/vs/platform/product/common/product.ts similarity index 100% rename from src/vs/platform/product/common/product.ts rename to vscode-web-github1s/src/vs/platform/product/common/product.ts diff --git a/src/vs/platform/telemetry/common/telemetryService.ts b/vscode-web-github1s/src/vs/platform/telemetry/common/telemetryService.ts similarity index 100% rename from src/vs/platform/telemetry/common/telemetryService.ts rename to vscode-web-github1s/src/vs/platform/telemetry/common/telemetryService.ts diff --git a/src/vs/workbench/browser/parts/activitybar/activitybarActions.ts b/vscode-web-github1s/src/vs/workbench/browser/parts/activitybar/activitybarActions.ts similarity index 100% rename from src/vs/workbench/browser/parts/activitybar/activitybarActions.ts rename to vscode-web-github1s/src/vs/workbench/browser/parts/activitybar/activitybarActions.ts diff --git a/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts b/vscode-web-github1s/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts similarity index 100% rename from src/vs/workbench/browser/parts/activitybar/activitybarPart.ts rename to vscode-web-github1s/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts diff --git a/src/vs/workbench/browser/parts/activitybar/media/activitybarpart.css b/vscode-web-github1s/src/vs/workbench/browser/parts/activitybar/media/activitybarpart.css similarity index 100% rename from src/vs/workbench/browser/parts/activitybar/media/activitybarpart.css rename to vscode-web-github1s/src/vs/workbench/browser/parts/activitybar/media/activitybarpart.css diff --git a/src/vs/workbench/browser/parts/titlebar/titlebarPart.ts b/vscode-web-github1s/src/vs/workbench/browser/parts/titlebar/titlebarPart.ts similarity index 100% rename from src/vs/workbench/browser/parts/titlebar/titlebarPart.ts rename to vscode-web-github1s/src/vs/workbench/browser/parts/titlebar/titlebarPart.ts diff --git a/src/vs/workbench/browser/web.main.ts b/vscode-web-github1s/src/vs/workbench/browser/web.main.ts similarity index 100% rename from src/vs/workbench/browser/web.main.ts rename to vscode-web-github1s/src/vs/workbench/browser/web.main.ts diff --git a/src/vs/workbench/browser/workbench.contribution.ts b/vscode-web-github1s/src/vs/workbench/browser/workbench.contribution.ts similarity index 100% rename from src/vs/workbench/browser/workbench.contribution.ts rename to vscode-web-github1s/src/vs/workbench/browser/workbench.contribution.ts diff --git a/src/vs/workbench/contrib/files/browser/views/explorerView.ts b/vscode-web-github1s/src/vs/workbench/contrib/files/browser/views/explorerView.ts similarity index 100% rename from src/vs/workbench/contrib/files/browser/views/explorerView.ts rename to vscode-web-github1s/src/vs/workbench/contrib/files/browser/views/explorerView.ts diff --git a/src/vs/workbench/contrib/files/common/editors/fileEditorInput.ts b/vscode-web-github1s/src/vs/workbench/contrib/files/common/editors/fileEditorInput.ts similarity index 100% rename from src/vs/workbench/contrib/files/common/editors/fileEditorInput.ts rename to vscode-web-github1s/src/vs/workbench/contrib/files/common/editors/fileEditorInput.ts diff --git a/src/vs/workbench/contrib/url/browser/trustedDomains.ts b/vscode-web-github1s/src/vs/workbench/contrib/url/browser/trustedDomains.ts similarity index 100% rename from src/vs/workbench/contrib/url/browser/trustedDomains.ts rename to vscode-web-github1s/src/vs/workbench/contrib/url/browser/trustedDomains.ts diff --git a/src/vs/workbench/contrib/webview/browser/pre/main.js b/vscode-web-github1s/src/vs/workbench/contrib/webview/browser/pre/main.js similarity index 100% rename from src/vs/workbench/contrib/webview/browser/pre/main.js rename to vscode-web-github1s/src/vs/workbench/contrib/webview/browser/pre/main.js diff --git a/src/vs/workbench/contrib/welcome/page/browser/vs_code_welcome_page.ts b/vscode-web-github1s/src/vs/workbench/contrib/welcome/page/browser/vs_code_welcome_page.ts similarity index 100% rename from src/vs/workbench/contrib/welcome/page/browser/vs_code_welcome_page.ts rename to vscode-web-github1s/src/vs/workbench/contrib/welcome/page/browser/vs_code_welcome_page.ts diff --git a/src/vs/workbench/contrib/welcome/page/browser/welcomePage.contribution.ts b/vscode-web-github1s/src/vs/workbench/contrib/welcome/page/browser/welcomePage.contribution.ts similarity index 100% rename from src/vs/workbench/contrib/welcome/page/browser/welcomePage.contribution.ts rename to vscode-web-github1s/src/vs/workbench/contrib/welcome/page/browser/welcomePage.contribution.ts diff --git a/src/vs/workbench/contrib/welcome/page/browser/welcomePage.css b/vscode-web-github1s/src/vs/workbench/contrib/welcome/page/browser/welcomePage.css similarity index 100% rename from src/vs/workbench/contrib/welcome/page/browser/welcomePage.css rename to vscode-web-github1s/src/vs/workbench/contrib/welcome/page/browser/welcomePage.css diff --git a/src/vs/workbench/contrib/welcome/page/browser/welcomePage.ts b/vscode-web-github1s/src/vs/workbench/contrib/welcome/page/browser/welcomePage.ts similarity index 100% rename from src/vs/workbench/contrib/welcome/page/browser/welcomePage.ts rename to vscode-web-github1s/src/vs/workbench/contrib/welcome/page/browser/welcomePage.ts diff --git a/src/vs/workbench/services/themes/browser/workbenchThemeService.ts b/vscode-web-github1s/src/vs/workbench/services/themes/browser/workbenchThemeService.ts similarity index 100% rename from src/vs/workbench/services/themes/browser/workbenchThemeService.ts rename to vscode-web-github1s/src/vs/workbench/services/themes/browser/workbenchThemeService.ts diff --git a/src/vs/workbench/services/themes/common/themeConfiguration.ts b/vscode-web-github1s/src/vs/workbench/services/themes/common/themeConfiguration.ts similarity index 100% rename from src/vs/workbench/services/themes/common/themeConfiguration.ts rename to vscode-web-github1s/src/vs/workbench/services/themes/common/themeConfiguration.ts diff --git a/vscode-web-github1s/yarn.lock b/vscode-web-github1s/yarn.lock new file mode 100644 index 000000000..0a65a34fa --- /dev/null +++ b/vscode-web-github1s/yarn.lock @@ -0,0 +1,528 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +chalk@^2.4.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +cross-spawn@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.18.0-next.2: + version "1.18.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0.tgz#ab80b359eecb7ede4c298000390bc5ac3ec7b5a4" + integrity sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw== + dependencies: + call-bind "^1.0.2" + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + get-intrinsic "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.2" + is-callable "^1.2.3" + is-negative-zero "^2.0.1" + is-regex "^1.1.2" + is-string "^1.0.5" + object-inspect "^1.9.0" + object-keys "^1.1.1" + object.assign "^4.1.2" + string.prototype.trimend "^1.0.4" + string.prototype.trimstart "^1.0.4" + unbox-primitive "^1.0.0" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" + integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + +graceful-fs@^4.1.2: + version "4.2.6" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" + integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== + +has-bigints@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" + integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-symbols@^1.0.1, has-symbols@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" + integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hosted-git-info@^2.1.4: + version "2.8.8" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" + integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== + +iconv-lite-umd@0.6.8: + version "0.6.8" + resolved "https://registry.yarnpkg.com/iconv-lite-umd/-/iconv-lite-umd-0.6.8.tgz#5ad310ec126b260621471a2d586f7f37b9958ec0" + integrity sha512-zvXJ5gSwMC9JD3wDzH8CoZGc1pbiJn12Tqjk8BXYCnYz3hYL5GRjHW8LEykjXhV9WgNGI4rgpgHcbIiBfrRq6A== + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +is-bigint@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.1.tgz#6923051dfcbc764278540b9ce0e6b3213aa5ebc2" + integrity sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg== + +is-boolean-object@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.0.tgz#e2aaad3a3a8fca34c28f6eee135b156ed2587ff0" + integrity sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA== + dependencies: + call-bind "^1.0.0" + +is-callable@^1.1.4, is-callable@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e" + integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ== + +is-core-module@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" + integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ== + dependencies: + has "^1.0.3" + +is-date-object@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" + integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== + +is-negative-zero@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" + integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== + +is-number-object@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.4.tgz#36ac95e741cf18b283fc1ddf5e83da798e3ec197" + integrity sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw== + +is-regex@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.2.tgz#81c8ebde4db142f2cf1c53fc86d6a45788266251" + integrity sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg== + dependencies: + call-bind "^1.0.2" + has-symbols "^1.0.1" + +is-string@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" + integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" + integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== + dependencies: + has-symbols "^1.0.1" + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +jschardet@2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/jschardet/-/jschardet-2.2.1.tgz#03b0264669a90c7a5c436a68c5a7d4e4cb0c9823" + integrity sha512-Ks2JNuUJoc7PGaZ7bVFtSEvOcr0rBq6Q1J5/7+zKWLT+g+4zziL63O0jg7y2jxhzIa1LVsHUbPXrbaWmz9iwDw== + +json-parse-better-errors@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +load-json-file@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= + dependencies: + graceful-fs "^4.1.2" + parse-json "^4.0.0" + pify "^3.0.0" + strip-bom "^3.0.0" + +memorystream@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" + integrity sha1-htcJCzDORV1j+64S3aUaR93K+bI= + +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +normalize-package-data@^2.3.2: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +npm-run-all@^4.1.5: + version "4.1.5" + resolved "https://registry.yarnpkg.com/npm-run-all/-/npm-run-all-4.1.5.tgz#04476202a15ee0e2e214080861bff12a51d98fba" + integrity sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ== + dependencies: + ansi-styles "^3.2.1" + chalk "^2.4.1" + cross-spawn "^6.0.5" + memorystream "^0.3.1" + minimatch "^3.0.4" + pidtree "^0.3.0" + read-pkg "^3.0.0" + shell-quote "^1.6.1" + string.prototype.padend "^3.0.0" + +object-inspect@^1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a" + integrity sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw== + +object-keys@^1.0.12, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" + integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + has-symbols "^1.0.1" + object-keys "^1.1.1" + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + +path-type@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== + dependencies: + pify "^3.0.0" + +pidtree@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.3.1.tgz#ef09ac2cc0533df1f3250ccf2c4d366b0d12114a" + integrity sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA== + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= + +read-pkg@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" + integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= + dependencies: + load-json-file "^4.0.0" + normalize-package-data "^2.3.2" + path-type "^3.0.0" + +resolve@^1.10.0: + version "1.20.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" + integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== + dependencies: + is-core-module "^2.2.0" + path-parse "^1.0.6" + +"semver@2 || 3 || 4 || 5", semver@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + +shell-quote@^1.6.1: + version "1.7.2" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" + integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== + +spdx-correct@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.7" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz#e9c18a410e5ed7e12442a549fbd8afa767038d65" + integrity sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ== + +string.prototype.padend@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.1.2.tgz#6858ca4f35c5268ebd5e8615e1327d55f59ee311" + integrity sha512-/AQFLdYvePENU3W5rgurfWSMU6n+Ww8n/3cUt7E+vPBB/D7YDG8x+qjoFs4M/alR2bW7Qg6xMjVwWUOvuQ0XpQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.2" + +string.prototype.trimend@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" + integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +string.prototype.trimstart@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" + integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +tas-client-umd@0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/tas-client-umd/-/tas-client-umd-0.1.2.tgz#fe93ae085f65424292ac79feff4f1add3e50e624" + integrity sha512-rT9BdDCejckqOTQL2ShX67QtTiAUGbmPm5ZTC8giXobBvZC6JuvBVy5G32hoGZ3Q0dpTvMfgpf3iVFNN2F7wzg== + +unbox-primitive@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" + integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== + dependencies: + function-bind "^1.1.1" + has-bigints "^1.0.1" + has-symbols "^1.0.2" + which-boxed-primitive "^1.0.2" + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +vscode-oniguruma@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/vscode-oniguruma/-/vscode-oniguruma-1.3.1.tgz#e2383879c3485b19f533ec34efea9d7a2b14be8f" + integrity sha512-gz6ZBofA7UXafVA+m2Yt2zHKgXC2qedArprIsHAPKByTkwq9l5y/izAGckqxYml7mSbYxTRTfdRwsFq3cwF4LQ== + +vscode-textmate@5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/vscode-textmate/-/vscode-textmate-5.2.0.tgz#01f01760a391e8222fe4f33fbccbd1ad71aed74e" + integrity sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ== + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which@^1.2.9: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +xterm-addon-search@0.8.0-beta.3: + version "0.8.0-beta.3" + resolved "https://registry.yarnpkg.com/xterm-addon-search/-/xterm-addon-search-0.8.0-beta.3.tgz#c6c7e36a03706bd43d8bba383511acf9e435aed0" + integrity sha512-EZP97KJIJ4KGQaOPYiiOaRRJst6LOgeEFoQL46WcBl5EWH9pH8qfrv0BHAJ8+6nBV2B9u5M6rzxO1GvLLec19w== + +xterm-addon-unicode11@0.3.0-beta.3: + version "0.3.0-beta.3" + resolved "https://registry.yarnpkg.com/xterm-addon-unicode11/-/xterm-addon-unicode11-0.3.0-beta.3.tgz#70af2dfb67809258edb62c19e2861f7ce5ccf5cd" + integrity sha512-vaYopnOjn19wCLDCyIWPWLwKR7CvLPxB5YZ3CAxt9qL05o3symxIJJJC0DuCa4GaGKVjNc7EmjRCs5bsJ2O1tw== + +xterm-addon-webgl@0.10.0-beta.1: + version "0.10.0-beta.1" + resolved "https://registry.yarnpkg.com/xterm-addon-webgl/-/xterm-addon-webgl-0.10.0-beta.1.tgz#e0bf964945a9aa8fc18318ddbd32e56ec99c219e" + integrity sha512-XNZMrmiyFaz3XiPq+LqF0qn2QHpUEwuk+cG53JwpJHnWo3dd2jxoIgHFQUcrnvHIVPZMbTKySIwLCCC9uQVl7Q== + +xterm@4.10.0-beta.4: + version "4.10.0-beta.4" + resolved "https://registry.yarnpkg.com/xterm/-/xterm-4.10.0-beta.4.tgz#95efce7a40ec582101ec9777f4ccc6e68e95185e" + integrity sha512-q/yRy2nn4mp1jWZe218TJwlKjXCIr6h28Kw0JMB+lcTeU+MebZ3TrHqlrNVnB+UJfFDOpkw0qfKYfRoV8G/hXA== diff --git a/yarn.lock b/yarn.lock index e21087032..e103ddb5b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -39,6 +39,21 @@ minimatch "^3.0.4" strip-json-comments "^3.1.1" +"@github1s/vscode-web@0.0.3": + version "0.0.3" + resolved "https://registry.yarnpkg.com/@github1s/vscode-web/-/vscode-web-0.0.3.tgz#ce4c8d89633f0c6ef28dc67ff173d962c4ed64a9" + integrity sha512-RKAnVWmzhgxu0n68oK1hcLUAYLhzqAthnki2BBVG1bNb8W5wk9xDLTcvsdn6PSbrHq8nzQmWO8PeVgoX6Xmz8A== + dependencies: + iconv-lite-umd "0.6.8" + jschardet "2.2.1" + tas-client-umd "0.1.2" + vscode-oniguruma "1.3.1" + vscode-textmate "5.2.0" + xterm "4.10.0-beta.4" + xterm-addon-search "0.8.0-beta.3" + xterm-addon-unicode11 "0.3.0-beta.3" + xterm-addon-webgl "0.10.0-beta.1" + "@hapi/hoek@^9.0.0": version "9.1.1" resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.1.1.tgz#9daf5745156fd84b8e9889a2dc721f0c58e894aa" @@ -983,6 +998,11 @@ husky@^5.0.9: resolved "https://registry.yarnpkg.com/husky/-/husky-5.0.9.tgz#6d38706643d66ed395bcd4ee952d02e3f15eb3a3" integrity sha512-0SjcaY21a+IRdx7p7r/X33Vc09UR2m8SbP8yfkhUX2/jAmwcz+GR7i9jXkp2pP3GfX23JhMkVP6SWwXB18uXtg== +iconv-lite-umd@0.6.8: + version "0.6.8" + resolved "https://registry.yarnpkg.com/iconv-lite-umd/-/iconv-lite-umd-0.6.8.tgz#5ad310ec126b260621471a2d586f7f37b9958ec0" + integrity sha512-zvXJ5gSwMC9JD3wDzH8CoZGc1pbiJn12Tqjk8BXYCnYz3hYL5GRjHW8LEykjXhV9WgNGI4rgpgHcbIiBfrRq6A== + ignore@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" @@ -1139,6 +1159,11 @@ js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" +jschardet@2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/jschardet/-/jschardet-2.2.1.tgz#03b0264669a90c7a5c436a68c5a7d4e4cb0c9823" + integrity sha512-Ks2JNuUJoc7PGaZ7bVFtSEvOcr0rBq6Q1J5/7+zKWLT+g+4zziL63O0jg7y2jxhzIa1LVsHUbPXrbaWmz9iwDw== + jsdoctypeparser@^9.0.0: version "9.0.0" resolved "https://registry.yarnpkg.com/jsdoctypeparser/-/jsdoctypeparser-9.0.0.tgz#8c97e2fb69315eb274b0f01377eaa5c940bd7b26" @@ -1907,6 +1932,11 @@ table@^6.0.4: slice-ansi "^4.0.0" string-width "^4.2.0" +tas-client-umd@0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/tas-client-umd/-/tas-client-umd-0.1.2.tgz#fe93ae085f65424292ac79feff4f1add3e50e624" + integrity sha512-rT9BdDCejckqOTQL2ShX67QtTiAUGbmPm5ZTC8giXobBvZC6JuvBVy5G32hoGZ3Q0dpTvMfgpf3iVFNN2F7wzg== + text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" @@ -1983,6 +2013,16 @@ validate-npm-package-license@^3.0.1: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" +vscode-oniguruma@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/vscode-oniguruma/-/vscode-oniguruma-1.3.1.tgz#e2383879c3485b19f533ec34efea9d7a2b14be8f" + integrity sha512-gz6ZBofA7UXafVA+m2Yt2zHKgXC2qedArprIsHAPKByTkwq9l5y/izAGckqxYml7mSbYxTRTfdRwsFq3cwF4LQ== + +vscode-textmate@5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/vscode-textmate/-/vscode-textmate-5.2.0.tgz#01f01760a391e8222fe4f33fbccbd1ad71aed74e" + integrity sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ== + wait-on@5.2.1: version "5.2.1" resolved "https://registry.yarnpkg.com/wait-on/-/wait-on-5.2.1.tgz#05b66fcb4d7f5da01537f03e7cf96e8836422996" @@ -2036,6 +2076,26 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= +xterm-addon-search@0.8.0-beta.3: + version "0.8.0-beta.3" + resolved "https://registry.yarnpkg.com/xterm-addon-search/-/xterm-addon-search-0.8.0-beta.3.tgz#c6c7e36a03706bd43d8bba383511acf9e435aed0" + integrity sha512-EZP97KJIJ4KGQaOPYiiOaRRJst6LOgeEFoQL46WcBl5EWH9pH8qfrv0BHAJ8+6nBV2B9u5M6rzxO1GvLLec19w== + +xterm-addon-unicode11@0.3.0-beta.3: + version "0.3.0-beta.3" + resolved "https://registry.yarnpkg.com/xterm-addon-unicode11/-/xterm-addon-unicode11-0.3.0-beta.3.tgz#70af2dfb67809258edb62c19e2861f7ce5ccf5cd" + integrity sha512-vaYopnOjn19wCLDCyIWPWLwKR7CvLPxB5YZ3CAxt9qL05o3symxIJJJC0DuCa4GaGKVjNc7EmjRCs5bsJ2O1tw== + +xterm-addon-webgl@0.10.0-beta.1: + version "0.10.0-beta.1" + resolved "https://registry.yarnpkg.com/xterm-addon-webgl/-/xterm-addon-webgl-0.10.0-beta.1.tgz#e0bf964945a9aa8fc18318ddbd32e56ec99c219e" + integrity sha512-XNZMrmiyFaz3XiPq+LqF0qn2QHpUEwuk+cG53JwpJHnWo3dd2jxoIgHFQUcrnvHIVPZMbTKySIwLCCC9uQVl7Q== + +xterm@4.10.0-beta.4: + version "4.10.0-beta.4" + resolved "https://registry.yarnpkg.com/xterm/-/xterm-4.10.0-beta.4.tgz#95efce7a40ec582101ec9777f4ccc6e68e95185e" + integrity sha512-q/yRy2nn4mp1jWZe218TJwlKjXCIr6h28Kw0JMB+lcTeU+MebZ3TrHqlrNVnB+UJfFDOpkw0qfKYfRoV8G/hXA== + yallist@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" From 200163ec187ad66e0816971b55de2dd7364f1293 Mon Sep 17 00:00:00 2001 From: netcon Date: Fri, 2 Apr 2021 01:32:32 +0800 Subject: [PATCH 008/280] feat: support to view file history (#268) --- extensions/github1s/package.json | 42 ++- extensions/github1s/src/commands/editor.ts | 122 +++++++++ extensions/github1s/src/commands/index.ts | 6 + .../src/interfaces/github-api-rest.ts | 13 + .../changedFileDecorationProvider.ts | 6 +- extensions/github1s/src/providers/index.ts | 3 + extensions/github1s/src/repository.ts | 194 -------------- extensions/github1s/src/repository/index.ts | 247 ++++++++++++++++++ .../github1s/src/repository/linked-list.ts | 67 +++++ extensions/github1s/src/repository/types.ts | 66 +++++ .../github1s/src/source-control/changes.ts | 47 ++-- .../src/source-control/quickDiffProviders.ts | 7 +- .../github1s/src/views/commit-list-view.ts | 3 +- .../github1s/src/views/pull-list-view.ts | 3 +- 14 files changed, 595 insertions(+), 231 deletions(-) delete mode 100644 extensions/github1s/src/repository.ts create mode 100644 extensions/github1s/src/repository/index.ts create mode 100644 extensions/github1s/src/repository/linked-list.ts create mode 100644 extensions/github1s/src/repository/types.ts diff --git a/extensions/github1s/package.json b/extensions/github1s/package.json index 210c7e8f7..e41a6b692 100644 --- a/extensions/github1s/package.json +++ b/extensions/github1s/package.json @@ -135,7 +135,8 @@ "icon": { "dark": "assets/icons/dark/open-left-file.svg", "light": "assets/icons/light/open-left-file.svg" - } + }, + "enablement": "isInDiffEditor && resourceScheme =~ /^github1s/ && resource =~ /^(?![^?]*\\?[^#]*(%26|\\b)base(=|%3D|%3d)github1s-empty-file)/" }, { "command": "github1s.diff-view-open-right-file", @@ -144,7 +145,22 @@ "icon": { "dark": "assets/icons/dark/open-right-file.svg", "light": "assets/icons/light/open-right-file.svg" - } + }, + "enablement": "isInDiffEditor && resourceScheme =~ /^github1s/ && resource =~ /^(?![^?]*\\?[^#]*(%26|\\b)head(=|%3D|%3d)github1s-empty-file)/" + }, + { + "command": "github1s.editor-view-open-prev-revision", + "title": "Open Previous Revision", + "category": "GitHub1s", + "icon": "$(arrow-left)", + "enablement": "resourceScheme =~ /^github1s$/ && resource =~ /^(?![^?]*\\?[^#]*(%26|\\b)base(=|%3D|%3d)github1s-empty-file)/" + }, + { + "command": "github1s.editor-view-open-next-revision", + "title": "Open Next Revision", + "category": "GitHub1s", + "icon": "$(arrow-right)", + "enablement": "resource =~ /^[^?]*\\?[^#]*(%26|\\b)hasNextRevision(=|%3D|%3d)true/" } ], "colors": [ @@ -227,6 +243,14 @@ { "command": "github1s.diff-view-open-right-file", "when": "false" + }, + { + "command": "github1s.editor-view-open-prev-revision", + "when": "false" + }, + { + "command": "github1s.editor-view-open-next-revision", + "when": "false" } ], "view/title": [ @@ -276,13 +300,23 @@ "editor/title": [ { "command": "github1s.diff-view-open-left-file", - "when": "isInDiffEditor && resourceScheme =~ /^github1s/ && resource =~ /^[^?]*\\?[^#]*status(=|%3D|%3d)(?!added)/", + "when": "isInDiffEditor", "group": "navigation@1" }, { "command": "github1s.diff-view-open-right-file", - "when": "isInDiffEditor && resourceScheme =~ /^github1s/ && resource =~ /^[^?]*\\?[^#]*status(=|%3D|%3d)(?!removed)/", + "when": "isInDiffEditor", "group": "navigation@2" + }, + { + "command": "github1s.editor-view-open-prev-revision", + "when": "resourceScheme =~ /^github1s/", + "group": "navigation@98" + }, + { + "command": "github1s.editor-view-open-next-revision", + "when": "resourceScheme =~ /^github1s/", + "group": "navigation@99" } ] } diff --git a/extensions/github1s/src/commands/editor.ts b/extensions/github1s/src/commands/editor.ts index 32d70394d..d54a40b22 100644 --- a/extensions/github1s/src/commands/editor.ts +++ b/extensions/github1s/src/commands/editor.ts @@ -6,7 +6,11 @@ import * as vscode from 'vscode'; import * as queryString from 'query-string'; import router from '@/router'; +import repository from '@/repository'; +import { emptyFileUri } from '@/providers'; import { basename } from '@/helpers/util'; +import { getChangedFileDiffTitle } from '@/source-control/changes'; +import { FileChangeType } from '@/repository/types'; const openFileToEditor = async (fileUri) => { const isCurrentAuthority = @@ -51,3 +55,121 @@ export const commandDiffViewOpenRightFile = async (fileUri: vscode.Uri) => { } return openFileToEditor(vscode.Uri.parse(query.head as string)); }; + +// get the file uri with the latest commit, the `ref` in +// `fileUri.authority` maybe newer but not related this file +const getLatestFileUri = async (fileUri: vscode.Uri) => { + // the `fileUri.authority` maybe empty, fallback + // to router.getAuthority() in this case + const fileAuthority = fileUri.authority || (await router.getAuthority()); + const [owner, repo, ref] = fileAuthority.split('+').filter(Boolean); + const latestCommitSha = await repository.getFileCommitSha(fileUri.path, ref); + + return fileUri.with({ + authority: `${owner}+${repo}+${latestCommitSha}`, + }); +}; + +// show the file's diff between current commit and previous commit +export const commandEditorViewOpenPrevRevision = async ( + fileUri: vscode.Uri +) => { + const queryBaseUriStr = queryString.parse(fileUri.query).base; + const rightFileUri = await getLatestFileUri( + // if the `queryBaseUriStr` is empty, which means this command + // is called from a normal file editor (not a diff editor), + // just use `fileUri` in this case + queryBaseUriStr ? vscode.Uri.parse(queryBaseUriStr as string) : fileUri + ); + + const [owner, repo, rightCommitSha] = rightFileUri.authority + .split('+') + .filter(Boolean); + const leftCommitSha = await repository.getFilePrevCommitSha( + rightFileUri.path, + rightCommitSha + ); + + // if we can't find prevCommitSha, use the the `emptyFileUri` as the leftFileUri + const leftFileUri = leftCommitSha + ? rightFileUri.with({ authority: `${owner}+${repo}+${leftCommitSha}` }) + : emptyFileUri; + + const changedStatus = leftCommitSha + ? FileChangeType.MODIFIED + : FileChangeType.ADDED; + + const hasNextRevision = !!(await repository.getFileNextCommitSha( + rightFileUri.path, + rightCommitSha + )); + + const query = queryString.stringify({ + base: leftFileUri.with({ query: '' }).toString(), + head: rightFileUri.with({ query: '' }).toString(), + status: changedStatus, + // if we can't find a newer commit for this file, + // the `Show Next Commit` Button would be disabled. + hasNextRevision, + }); + const title = getChangedFileDiffTitle( + leftFileUri, + rightFileUri, + changedStatus + ); + + return vscode.commands.executeCommand( + 'vscode.diff', + leftFileUri.with({ query }), + rightFileUri.with({ query }), + title + ); +}; + +// show the file's diff between current commit and next commit +export const commandEditorViewOpenNextRevision = async ( + fileUri: vscode.Uri +) => { + const leftFileUri = await getLatestFileUri(fileUri); + + const [owner, repo, leftCommitSha] = leftFileUri.authority + .split('+') + .filter(Boolean); + const rightCommitSha = await repository.getFileNextCommitSha( + leftFileUri.path, + leftCommitSha + ); + + if (!rightCommitSha) { + return vscode.window.showInformationMessage( + 'There is no next commit found.' + ); + } + + const rightFileUri = leftFileUri.with({ + authority: `${owner}+${repo}+${rightCommitSha}`, + }); + + const hasNextRevision = !!(await repository.getFileNextCommitSha( + rightFileUri.path, + rightCommitSha + )); + const query = queryString.stringify({ + base: leftFileUri.with({ query: '' }).toString(), + head: rightFileUri.with({ query: '' }).toString(), + status: FileChangeType.MODIFIED, + hasNextRevision, + }); + const title = getChangedFileDiffTitle( + leftFileUri, + rightFileUri, + FileChangeType.MODIFIED + ); + + return vscode.commands.executeCommand( + 'vscode.diff', + leftFileUri.with({ query }), + rightFileUri.with({ query }), + title + ); +}; diff --git a/extensions/github1s/src/commands/index.ts b/extensions/github1s/src/commands/index.ts index dfe2d4c17..ed45d97ec 100644 --- a/extensions/github1s/src/commands/index.ts +++ b/extensions/github1s/src/commands/index.ts @@ -26,6 +26,8 @@ import { commandOpenGitpod } from './gitpod'; import { commandDiffViewOpenLeftFile, commandDiffViewOpenRightFile, + commandEditorViewOpenNextRevision, + commandEditorViewOpenPrevRevision, } from './editor'; const commands: { id: string; callback: (...args: any[]) => any }[] = [ @@ -66,6 +68,10 @@ const commands: { id: string; callback: (...args: any[]) => any }[] = [ { id: 'github1s.diff-view-open-left-file', callback: commandDiffViewOpenLeftFile }, // prettier-ignore // open the right file in diff editor { id: 'github1s.diff-view-open-right-file', callback: commandDiffViewOpenRightFile }, // prettier-ignore + // open the previous revision of a file + { id: 'github1s.editor-view-open-prev-revision', callback: commandEditorViewOpenPrevRevision }, // prettier-ignore + // open the next revision of a file + { id: 'github1s.editor-view-open-next-revision', callback: commandEditorViewOpenNextRevision }, // prettier-ignore ]; export const registerGitHub1sCommands = () => { diff --git a/extensions/github1s/src/interfaces/github-api-rest.ts b/extensions/github1s/src/interfaces/github-api-rest.ts index abf7fd9a0..1ec4572b7 100644 --- a/extensions/github1s/src/interfaces/github-api-rest.ts +++ b/extensions/github1s/src/interfaces/github-api-rest.ts @@ -188,6 +188,19 @@ export const getGitHubCommits = ( ).catch(handleRequestError); }; +export const getGitHubFileCommits = ( + owner: string, + repo: string, + filePath: string, + sha: string, + options?: ResponseInit +) => { + return fetch( + `https://api.github.com/repos/${owner}/${repo}/commits?path=${filePath.slice(1)}&sha=${sha}&per_page=100`, // prettier-ignore + options + ).catch(handleRequestError); +}; + export const getGitHubCommitDetail = ( owner: string, repo: string, diff --git a/extensions/github1s/src/providers/changedFileDecorationProvider.ts b/extensions/github1s/src/providers/changedFileDecorationProvider.ts index d5eda6ed0..c53549d82 100644 --- a/extensions/github1s/src/providers/changedFileDecorationProvider.ts +++ b/extensions/github1s/src/providers/changedFileDecorationProvider.ts @@ -15,10 +15,8 @@ import { ThemeColor, } from 'vscode'; import router from '@/router'; -import repository, { - FileChangeType, - RepositoryChangedFile, -} from '@/repository'; +import repository from '@/repository'; +import { FileChangeType, RepositoryChangedFile } from '@/repository/types'; import { PageType } from '@/router/types'; import { GitHub1sFileSystemProvider } from './fileSystemProvider'; diff --git a/extensions/github1s/src/providers/index.ts b/extensions/github1s/src/providers/index.ts index cc644adbf..38f265062 100644 --- a/extensions/github1s/src/providers/index.ts +++ b/extensions/github1s/src/providers/index.ts @@ -24,6 +24,9 @@ export const changedFileDecorationProvider = new GitHub1sChangedFileDecorationPr export const sourceControlDecorationProvider = new GitHub1sSourceControlDecorationProvider(); export const EMPTY_FILE_SCHEME = 'github1s-empty-file'; +export const emptyFileUri = vscode.Uri.parse('').with({ + scheme: EMPTY_FILE_SCHEME, +}); export const registerVSCodeProviders = () => { const context = getExtensionContext(); diff --git a/extensions/github1s/src/repository.ts b/extensions/github1s/src/repository.ts deleted file mode 100644 index 711c0aba8..000000000 --- a/extensions/github1s/src/repository.ts +++ /dev/null @@ -1,194 +0,0 @@ -/** - * @file Current GitHub Repository - * @author netcon - */ - -import { reuseable } from '@/helpers/func'; -import router from '@/router'; -import { - getGitHubBranchRefs, - getGitHubPullDetail, - getGitHubTagRefs, - getGitHubPullFiles, - getGitHubPulls, - getGitHubCommitDetail, - getGitHubCommits, -} from '@/interfaces/github-api-rest'; -import { getFetchOptions } from './helpers/fetch'; - -export interface RepositoryRef { - name: string; - ref: string; - node_id: string; - url: string; - object: { - sha: string; - type: string; - url: string; - }; -} - -export interface RepositoryPull { - number: number; - title: string; - state: string; - created_at: string; - closed_at: string; - merged_at: string; - user: { - login: string; - avatar_url: string; - }; - head: { - sha: string; - }; - base: { - sha: string; - }; -} - -export interface RepositoryCommit { - sha: string; - author: { - login: string; - avatar_url: string; - }; - commit: { - author: { - date: string; - email: string; - name: string; - }; - message: string; - }; - parents: { sha: string }[]; - files?: RepositoryChangedFile[]; -} - -export enum FileChangeType { - ADDED = 'added', - REMOVED = 'removed', - MODIFIED = 'modified', - RENAMED = 'renamed', -} - -export interface RepositoryChangedFile { - filename: string; - previous_filename?: string; - status: FileChangeType; -} - -export class Repository { - private static instance: Repository; - - public static getInstance() { - if (Repository.instance) { - return this.instance; - } - return (Repository.instance = new Repository()); - } - - // get current repo owner - public getOwner() { - const pathname = router.history.location.pathname; - return pathname.split('/').filter(Boolean)[0] || 'conwnet'; - } - - // get current repo name - public getRepo() { - const pathname = router.history.location.pathname; - return pathname.split('/').filter(Boolean)[1] || 'github1s'; - } - - // get all branches for current repository - public getBranches = reuseable( - async (forceUpdate: boolean = false): Promise => { - const [owner, repo] = [this.getOwner(), this.getRepo()]; - return await getGitHubBranchRefs( - owner, - repo, - getFetchOptions(forceUpdate) - ); - } - ); - - // get all tags for current repository - public getTags = reuseable( - async (forceUpdate: boolean = false): Promise => { - const [owner, repo] = [this.getOwner(), this.getRepo()]; - return getGitHubTagRefs(owner, repo, getFetchOptions(forceUpdate)); - } - ); - - public getPulls = reuseable( - async (forceUpdate: boolean = false): Promise => { - const [owner, repo] = [this.getOwner(), this.getRepo()]; - return getGitHubPulls(owner, repo, getFetchOptions(forceUpdate)); - } - ); - - public getPull = reuseable( - async ( - pullNumber: number, - forceUpdate: boolean = false - ): Promise => { - const [owner, repo] = [this.getOwner(), this.getRepo()]; - return getGitHubPullDetail( - owner, - repo, - pullNumber, - getFetchOptions(forceUpdate) - ); - } - ); - - public getPullFiles = reuseable( - async ( - pullNumber: number, - forceUpdate: boolean = false - ): Promise => { - const [owner, repo] = [this.getOwner(), this.getRepo()]; - return getGitHubPullFiles( - owner, - repo, - pullNumber, - getFetchOptions(forceUpdate) - ); - } - ); - - public getCommits = reuseable( - async ( - sha: string, - forceUpdate: boolean = false - ): Promise => { - const [owner, repo] = [this.getOwner(), this.getRepo()]; - return getGitHubCommits(owner, repo, sha, getFetchOptions(forceUpdate)); - } - ); - - public getCommit = reuseable( - async ( - commitSha: string, - forceUpdate: boolean = false - ): Promise => { - const [owner, repo] = [this.getOwner(), this.getRepo()]; - return getGitHubCommitDetail( - owner, - repo, - commitSha, - getFetchOptions(forceUpdate) - ); - } - ); - - public getCommitFiles = reuseable( - async ( - commitSha: string, - forceUpdate: boolean = false - ): Promise => - (await this.getCommit(commitSha, forceUpdate)).files - ); -} - -export default Repository.getInstance(); diff --git a/extensions/github1s/src/repository/index.ts b/extensions/github1s/src/repository/index.ts new file mode 100644 index 000000000..e632424cf --- /dev/null +++ b/extensions/github1s/src/repository/index.ts @@ -0,0 +1,247 @@ +/** + * @file Current GitHub Repository + * @author netcon + */ + +import { reuseable } from '@/helpers/func'; +import router from '@/router'; +import { + getGitHubBranchRefs, + getGitHubPullDetail, + getGitHubTagRefs, + getGitHubPullFiles, + getGitHubPulls, + getGitHubCommitDetail, + getGitHubCommits, + getGitHubFileCommits, +} from '@/interfaces/github-api-rest'; +import { getFetchOptions } from '@/helpers/fetch'; +import { LinkedList, LinkedListDirection } from './linked-list'; +import { + RepositoryChangedFile, + RepositoryCommit, + RepositoryPull, + RepositoryRef, +} from './types'; + +export class Repository { + private static instance: Repository; + private _fileCommitIdListMap: Map; + private _pullMap: Map; + private _commitMap: Map; + + public static getInstance() { + if (Repository.instance) { + return this.instance; + } + return (Repository.instance = new Repository()); + } + + constructor() { + this._fileCommitIdListMap = new Map(); + this._pullMap = new Map(); + this._commitMap = new Map(); + } + + // get current repo owner + public getOwner() { + const pathname = router.history.location.pathname; + return pathname.split('/').filter(Boolean)[0] || 'conwnet'; + } + + // get current repo name + public getRepo() { + const pathname = router.history.location.pathname; + return pathname.split('/').filter(Boolean)[1] || 'github1s'; + } + + // get all branches for current repository + public getBranches = reuseable( + async (forceUpdate: boolean = false): Promise => { + const [owner, repo] = [this.getOwner(), this.getRepo()]; + return await getGitHubBranchRefs( + owner, + repo, + getFetchOptions(forceUpdate) + ); + } + ); + + // get all tags for current repository + public getTags = reuseable( + async (forceUpdate: boolean = false): Promise => { + const [owner, repo] = [this.getOwner(), this.getRepo()]; + return getGitHubTagRefs(owner, repo, getFetchOptions(forceUpdate)); + } + ); + + public getPulls = reuseable( + async (forceUpdate: boolean = false): Promise => { + const [owner, repo] = [this.getOwner(), this.getRepo()]; + const fetchOptions = getFetchOptions(forceUpdate); + const pulls = await getGitHubPulls(owner, repo, fetchOptions); + // `this.getPull` can be benefited from the cache + pulls.forEach((pull) => this._pullMap.set(pull.number, pull)); + return pulls; + } + ); + + public getPull = reuseable( + async ( + pullNumber: number, + forceUpdate: boolean = false + ): Promise => { + const [owner, repo] = [this.getOwner(), this.getRepo()]; + if (forceUpdate || !this._pullMap.has(pullNumber)) { + const pull = await getGitHubPullDetail( + owner, + repo, + pullNumber, + getFetchOptions(forceUpdate) + ); + this._pullMap.set(pullNumber, pull); + } + return this._pullMap.get(pullNumber); + } + ); + + public getPullFiles = reuseable( + async ( + pullNumber: number, + forceUpdate: boolean = false + ): Promise => { + const [owner, repo] = [this.getOwner(), this.getRepo()]; + return getGitHubPullFiles( + owner, + repo, + pullNumber, + getFetchOptions(forceUpdate) + ); + } + ); + + public getCommits = reuseable( + async ( + sha: string, + forceUpdate: boolean = false + ): Promise => { + const [owner, repo] = [this.getOwner(), this.getRepo()]; + const fetchOptions = getFetchOptions(forceUpdate); + const commits = await getGitHubCommits(owner, repo, sha, fetchOptions); + // `this.getCommit` can be benefited from the cache + commits.forEach((commit) => this._commitMap.set(commit.sha, commit)); + return commits; + } + ); + + public getCommit = reuseable( + async ( + commitSha: string, + forceUpdate: boolean = false + ): Promise => { + const [owner, repo] = [this.getOwner(), this.getRepo()]; + if (forceUpdate || !this._commitMap.has(commitSha)) { + const commit = await getGitHubCommitDetail( + owner, + repo, + commitSha, + getFetchOptions(forceUpdate) + ); + this._commitMap.set(commitSha, commit); + } + return this._commitMap.get(commitSha); + } + ); + + public getCommitFiles = reuseable( + async ( + commitSha: string, + forceUpdate: boolean = false + ): Promise => { + return ( + // the commit maybe updated by fetch commit **list** which + // won't have the file list data, so we will fallback to + // fetch single commit data to get the file list data + (await this.getCommit(commitSha, forceUpdate)).files || + (await this.getCommit(commitSha, true)).files + ); + } + ); + + // get this commits for a specified file + public getFileCommits = reuseable( + async ( + filePath: string, + commitSha: string, + forceUpdate: boolean = false + ): Promise => { + const [owner, repo] = [this.getOwner(), this.getRepo()]; + const commits = await getGitHubFileCommits( + owner, + repo, + filePath, + commitSha, + getFetchOptions(forceUpdate) + ); + // `this.getCommit` can be benefited from the cache + commits.forEach((commit) => this._commitMap.set(commit.sha, commit)); + return commits; + } + ); + + // get the commit sha of a file with direction, default get + // the latest commit sha for the file, note this the latest + // commit sha maybe not equal the `commitSha` in arguments + public getFileCommitSha = reuseable( + async ( + filePath: string, + commitShaOrRef: string, + direction: LinkedListDirection = LinkedListDirection.CURRENT, + forceUpdate: boolean = false + ): Promise => { + if (!this._fileCommitIdListMap.has(filePath)) { + this._fileCommitIdListMap.set(filePath, new LinkedList()); + } + const commitIdList = this._fileCommitIdListMap.get(filePath); + if (!commitIdList.getNodeId(commitShaOrRef, direction)) { + const commits = await this.getFileCommits( + filePath, + commitShaOrRef, + forceUpdate + ); + commitIdList.update(commits.map((item) => item.sha).reverse()); + // Actually the latest commit for `filePath` maybe not equal the + // `commitSha` in arguments, we should use commits[0].sha in this case + return commitIdList.getNodeId(commits[0]?.sha, direction); + } + return commitIdList.getNodeId(commitShaOrRef, direction); + } + ); + + public getFilePrevCommitSha = reuseable( + async ( + filePath: string, + commitSha: string, + forceUpdate: boolean = false + ): Promise => { + return this.getFileCommitSha( + filePath, + commitSha, + LinkedListDirection.PREVIOUS, + forceUpdate + ); + } + ); + + public getFileNextCommitSha = reuseable( + async (filePath: string, commitSha: string): Promise => { + // because we can not find the next commit by GitHub API, + // we can only try to find the next commit from the cache + return this._fileCommitIdListMap + .get(filePath) + ?.getNodeId(commitSha, LinkedListDirection.NEXT); + } + ); +} + +export default Repository.getInstance(); diff --git a/extensions/github1s/src/repository/linked-list.ts b/extensions/github1s/src/repository/linked-list.ts new file mode 100644 index 000000000..81cc3f577 --- /dev/null +++ b/extensions/github1s/src/repository/linked-list.ts @@ -0,0 +1,67 @@ +/** + * @file a bidirectional linked list + */ + +class ListNode { + id: string; + prev: ListNode; + next: ListNode; + + constructor(id: string) { + this.id = id; + this.prev = null; + this.next = null; + } +} + +const linkNodes = (prevNode: ListNode, currentNode: ListNode) => { + if (prevNode && currentNode) { + prevNode.next = currentNode; + currentNode.prev = prevNode; + } +}; + +export enum LinkedListDirection { + PREVIOUS = -1, + CURRENT = 0, + NEXT = 1, +} + +export class LinkedList { + private _nodeMap: Map; + + constructor() { + this._nodeMap = new Map(); + } + + private createNode(id: string) { + const node = new ListNode(id); + this._nodeMap.set(node.id, node); + return node; + } + + private getNode(id: string) { + return this._nodeMap.get(id); + } + + public update(idList: string[]) { + for (let i = 0, len = idList.length; i < len; i++) { + const currentNode = this.getNode(idList[i]) || this.createNode(idList[i]); + i > 0 && linkNodes(this.getNode(idList[i - 1]), currentNode); + } + } + + public getNodeId(id: string, direction: LinkedListDirection) { + if (direction === LinkedListDirection.PREVIOUS) { + return this.getNode(id)?.prev?.id; + } + + if (direction === LinkedListDirection.CURRENT) { + return this.getNode(id)?.id; + } + + if (direction === LinkedListDirection.NEXT) { + return this.getNode(id)?.next?.id; + } + } +} diff --git a/extensions/github1s/src/repository/types.ts b/extensions/github1s/src/repository/types.ts new file mode 100644 index 000000000..165cd5fef --- /dev/null +++ b/extensions/github1s/src/repository/types.ts @@ -0,0 +1,66 @@ +/** + * @file Repository types + * @author netcon + */ + +export interface RepositoryRef { + name: string; + ref: string; + node_id: string; + url: string; + object: { + sha: string; + type: string; + url: string; + }; +} + +export interface RepositoryPull { + number: number; + title: string; + state: string; + created_at: string; + closed_at: string; + merged_at: string; + user: { + login: string; + avatar_url: string; + }; + head: { + sha: string; + }; + base: { + sha: string; + }; +} + +export interface RepositoryCommit { + sha: string; + author: { + login: string; + avatar_url: string; + }; + commit: { + author: { + date: string; + email: string; + name: string; + }; + message: string; + }; + parents: { sha: string }[]; + files?: RepositoryChangedFile[]; +} + +export enum FileChangeType { + ADDED = 'added', + REMOVED = 'removed', + MODIFIED = 'modified', + RENAMED = 'renamed', +} + +export interface RepositoryChangedFile { + filename: string; + previous_filename?: string; + status: FileChangeType; +} diff --git a/extensions/github1s/src/source-control/changes.ts b/extensions/github1s/src/source-control/changes.ts index df76c9ec2..f51c04184 100644 --- a/extensions/github1s/src/source-control/changes.ts +++ b/extensions/github1s/src/source-control/changes.ts @@ -5,14 +5,15 @@ import * as vscode from 'vscode'; import * as queryString from 'query-string'; -import repository, { +import repository from '@/repository'; +import { FileChangeType, RepositoryCommit, RepositoryPull, -} from '@/repository'; +} from '@/repository/types'; import router from '@/router'; import { basename } from '@/helpers/util'; -import { EMPTY_FILE_SCHEME } from '@/providers'; +import { emptyFileUri } from '@/providers'; import { GitHub1sFileSystemProvider } from '@/providers/fileSystemProvider'; import { PageType } from '@/router/types'; import { GitHub1sQuickDiffProvider } from './quickDiffProviders'; @@ -95,49 +96,49 @@ const getChangedFiles = async (): Promise => { }; // get the title of the diff editor -const getChangedFileDiffTitle = (changedFile: ChangedFile) => { - const baseFileUri = changedFile.baseFileUri; - const headFileUri = changedFile.headFileUri; +export const getChangedFileDiffTitle = ( + baseFileUri: vscode.Uri, + headFileUri: vscode.Uri, + status: FileChangeType +) => { const baseFileName = basename(baseFileUri.path); const headFileName = basename(headFileUri.path); const [_owner, _repo, baseCommitSha] = baseFileUri.authority.split('+'); const [__owner, __repo, headCommitSha] = headFileUri.authority.split('+'); - const baseFileLabel = `${baseFileName} (${baseCommitSha.slice(0, 7)})`; - const headFileLabel = `${headFileName} (${headCommitSha.slice(0, 7)})`; + const baseFileLabel = `${baseFileName} (${baseCommitSha?.slice(0, 7)})`; + const headFileLabel = `${headFileName} (${headCommitSha?.slice(0, 7)})`; - if (changedFile.status === FileChangeType.ADDED) { - return `${baseFileName} (added in ${headCommitSha.slice(0, 7)})`; + if (status === FileChangeType.ADDED) { + return `${headFileName} (added in ${headCommitSha.slice(0, 7)})`; } - if (changedFile.status === FileChangeType.REMOVED) { + if (status === FileChangeType.REMOVED) { return `${baseFileName} (deleted from ${baseCommitSha.slice(0, 7)})`; } return `${baseFileLabel} ⟷ ${headFileLabel}`; }; -const emptyFileUri = vscode.Uri.parse('').with({ - scheme: EMPTY_FILE_SCHEME, -}); - export const getChangedFileCommand = (changedFile: ChangedFile) => { - const title = getChangedFileDiffTitle(changedFile); let baseFileUri = changedFile.baseFileUri; let headFileUri = changedFile.headFileUri; - const query = queryString.stringify({ - base: baseFileUri.toString(), - head: headFileUri.toString(), - status: changedFile.status, - }); + const status = changedFile.status; - if (changedFile.status === FileChangeType.ADDED) { + if (status === FileChangeType.ADDED) { baseFileUri = emptyFileUri; } - if (changedFile.status === FileChangeType.REMOVED) { + if (status === FileChangeType.REMOVED) { headFileUri = emptyFileUri; } + const title = getChangedFileDiffTitle(baseFileUri, headFileUri, status); + const query = queryString.stringify({ + status, + base: baseFileUri.with({ query: '' }).toString(), + head: headFileUri.with({ query: '' }).toString(), + }); + return { title: 'Diff', command: 'vscode.diff', diff --git a/extensions/github1s/src/source-control/quickDiffProviders.ts b/extensions/github1s/src/source-control/quickDiffProviders.ts index b89e874fc..76d8cd4ca 100644 --- a/extensions/github1s/src/source-control/quickDiffProviders.ts +++ b/extensions/github1s/src/source-control/quickDiffProviders.ts @@ -5,13 +5,12 @@ import * as vscode from 'vscode'; import router from '@/router'; -import repository, { FileChangeType } from '@/repository'; +import repository from '@/repository'; +import { FileChangeType } from '@/repository/types'; import { PageType } from '@/router/types'; -import { EMPTY_FILE_SCHEME } from '@/providers'; +import { emptyFileUri } from '@/providers'; import { GitHub1sFileSystemProvider } from '@/providers/fileSystemProvider'; -const emptyFileUri = vscode.Uri.parse('').with({ scheme: EMPTY_FILE_SCHEME }); - // get the original source uri when the `routerState.pageType` is `PageType.PULL` const getOriginalResourceForPull = async ( uri: vscode.Uri, diff --git a/extensions/github1s/src/views/commit-list-view.ts b/extensions/github1s/src/views/commit-list-view.ts index 05c056175..697e7ce6c 100644 --- a/extensions/github1s/src/views/commit-list-view.ts +++ b/extensions/github1s/src/views/commit-list-view.ts @@ -6,7 +6,8 @@ import * as vscode from 'vscode'; import * as queryString from 'query-string'; import { relativeTimeTo } from '@/helpers/date'; -import repository, { RepositoryCommit } from '@/repository'; +import repository from '@/repository'; +import { RepositoryCommit } from '@/repository/types'; import { GitHub1sSourceControlDecorationProvider } from '@/providers/sourceControlDecorationProvider'; import { getChangedFileCommand, diff --git a/extensions/github1s/src/views/pull-list-view.ts b/extensions/github1s/src/views/pull-list-view.ts index 093713cf4..c6c883e21 100644 --- a/extensions/github1s/src/views/pull-list-view.ts +++ b/extensions/github1s/src/views/pull-list-view.ts @@ -5,7 +5,8 @@ import * as vscode from 'vscode'; import { relativeTimeTo } from '@/helpers/date'; -import repository, { RepositoryPull } from '@/repository'; +import repository from '@/repository'; +import { RepositoryPull } from '@/repository/types'; import { GitHub1sSourceControlDecorationProvider } from '@/providers/sourceControlDecorationProvider'; import * as queryString from 'query-string'; import { From cd2122d6a2ba0a51885fcc87745f211415a8f45c Mon Sep 17 00:00:00 2001 From: xcv58 Date: Thu, 1 Apr 2021 23:37:06 -0700 Subject: [PATCH 009/280] Test VS Code build & package on CI (#269) * Fix the tsconfig.json could not be parsed by strict JSON parser * Add test vscode on CI * Fix typo * Fix more typo * Put yalc in package.json * clean up * Fix json file * Organize the code * Update readme * Swap the yml file * Update README * Fix the command * Update the task name * Update README --- .github/workflows/test-wtih-vscode-build.yml | 42 +++++++ README.md | 17 ++- package.json | 3 + tsconfig.json | 2 +- vscode-web-github1s/README.md | 9 +- vscode-web-github1s/package.json | 7 +- yarn.lock | 124 ++++++++++++++++++- 7 files changed, 182 insertions(+), 22 deletions(-) create mode 100644 .github/workflows/test-wtih-vscode-build.yml diff --git a/.github/workflows/test-wtih-vscode-build.yml b/.github/workflows/test-wtih-vscode-build.yml new file mode 100644 index 000000000..8fa811d6b --- /dev/null +++ b/.github/workflows/test-wtih-vscode-build.yml @@ -0,0 +1,42 @@ +name: Build & Test with VS Code build + +on: + push: + branches: + - master + pull_request: + branches: + - master + +jobs: + build: + strategy: + matrix: + os: [ubuntu-20.04] + node-version: [14.x, 15.x] + + runs-on: ${{ matrix.os }} + + steps: + - uses: actions/checkout@v2 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v2 + with: + node-version: ${{ matrix.node-version }} + + - name: Get yarn cache directory path + id: yarn-cache-dir-path + run: echo "::set-output name=dir::$(yarn cache dir)" + + - uses: actions/cache@v2 + with: + path: ${{ steps.yarn-cache-dir-path.outputs.dir }} + key: ${{ runner.os }}-yarn-${{ matrix.node-version }}-${{ hashFiles('**/yarn.lock') }} + restore-keys: | + ${{ runner.os }}-yarn-${{ matrix.node-version }} + + - run: yarn --frozen-lockfile + - run: yarn build:vscode + - run: yarn yalc && yarn build + - uses: microsoft/playwright-github-action@v1 + - run: yarn test:ci diff --git a/README.md b/README.md index e74bc5e44..788e3cf93 100644 --- a/README.md +++ b/README.md @@ -77,10 +77,7 @@ To verify the build: ```bash cd github1s -cd vscode-web-github1s -yarn -yarn clone -yarn build +yarn build:vscode ``` After the inital successful build, you could use the watch mode: @@ -107,10 +104,10 @@ You can use the VS Code plugin [Remote-Containers](https://marketplace.visualstu 5. Open a new VS Code Terminal, then you can run the `yarn` commands listed above. ```bash -$ yarn -$ yarn watch -$ yarn serve # in another shell -$ # Then visit http://localhost:5000 or http://localhost:5000/conwnet/github1s once the build is completed. +yarn +yarn watch +yarn serve # in another shell +# Then visit http://localhost:5000 or http://localhost:5000/conwnet/github1s once the build is completed. ``` ### Format all codes @@ -124,8 +121,8 @@ It uses `prettier` to format all possible codes. ## Build ```bash -$ yarn -$ yarn build +yarn +yarn build ``` ## Feedback diff --git a/package.json b/package.json index 091aa2f31..7d72a6712 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,7 @@ "prettier": "^2.2.1", "serve-handler": "^6.1.3", "start-server-and-test": "^1.12.0", + "yalc": "^1.0.0-pre.50", "typescript": "^4.1.3" }, "scripts": { @@ -31,6 +32,8 @@ "clean-build": "./scripts/clean-build.sh", "clean": "./scripts/clean.sh", "build": "./scripts/build.sh", + "yalc": "yalc publish vscode-web-github1s && yalc add -D @github1s/vscode-web", + "build:vscode": "cd vscode-web-github1s && yarn build", "vercel-build": "yarn build && yarn hash && mv dist public", "hash": "./scripts/hash.sh", "package": "./scripts/package.sh", diff --git a/tsconfig.json b/tsconfig.json index 184830ac5..cbb5ab60d 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -14,7 +14,7 @@ "vs/*": [ "./vscode-web-github1s/src/vs/*", "./vscode-web-github1s/lib/vscode/src/vs/*" - ], + ] }, "lib": [ "ES2015", diff --git a/vscode-web-github1s/README.md b/vscode-web-github1s/README.md index d5d2398c3..d98042eb0 100644 --- a/vscode-web-github1s/README.md +++ b/vscode-web-github1s/README.md @@ -20,13 +20,10 @@ Then run the following commands: ```sh cd github1s -cd vscode-web-github1s -yarn build -yalc publish +yarn build:vscode # Build the VS Code +yarn yalc # Install local package via yalc -cd .. -yalc add -D @github1s/vscode-web -yarn build +yarn build # Build the GitHub1s & other extensions yarn serve ``` diff --git a/vscode-web-github1s/package.json b/vscode-web-github1s/package.json index d499ad7ae..692b8100f 100644 --- a/vscode-web-github1s/package.json +++ b/vscode-web-github1s/package.json @@ -7,11 +7,12 @@ "repository": "https://github.com/conwnet/github1s/issues/257", "scripts": { "clone": "./scripts/clone.sh", - "build": "yarn sync && ./scripts/build-vscode.sh && run-p copy:*", + "sync": "./scripts/sync-code.sh", + "build": "run-s clone sync build:vscode copy:*", + "build:vscode": "./scripts/build-vscode.sh", "copy:vscode": "./scripts/copy-vscode.sh", "copy:extension": "./scripts/copy-extensions.sh", - "sync": "./scripts/sync-code.sh", - "watch": "yarn clone && run-p watch:*", + "watch": "run-s clone sync && run-p watch:*", "watch:vscode": "cd lib/vscode && yarn watch", "watch:src": "cd scripts/watch && node watch-src.js", "watch:dist": "cd scripts/watch && node watch-dist.js" diff --git a/yarn.lock b/yarn.lock index e103ddb5b..a4f2fdcf5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -395,6 +395,15 @@ cli-truncate@^2.1.0: slice-ansi "^3.0.0" string-width "^4.2.0" +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" @@ -494,6 +503,11 @@ define-properties@^1.1.3: dependencies: object-keys "^1.0.12" +detect-indent@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.0.0.tgz#0abd0f549f69fc6659a254fe96786186b6f528fd" + integrity sha512-oSyFlqaTHCItVRGK5RmrmjB+CmaMOW7IaNA/kdxqhoa6d17j/5ce9O9eWXmV/KEdRwqpQA+Vqe8a8Bsybu4YnA== + dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" @@ -568,6 +582,11 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" @@ -853,6 +872,15 @@ from@~0: resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe" integrity sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4= +fs-extra@^8.0.1: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + fs-extra@^9.1.0: version "9.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" @@ -883,6 +911,11 @@ functional-red-black-tree@^1.0.1: resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + get-intrinsic@^1.0.2: version "1.1.1" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" @@ -911,7 +944,7 @@ glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@~5.1.0: dependencies: is-glob "^4.0.1" -glob@^7.1.3: +glob@^7.1.3, glob@^7.1.4: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== @@ -1003,12 +1036,19 @@ iconv-lite-umd@0.6.8: resolved "https://registry.yarnpkg.com/iconv-lite-umd/-/iconv-lite-umd-0.6.8.tgz#5ad310ec126b260621471a2d586f7f37b9958ec0" integrity sha512-zvXJ5gSwMC9JD3wDzH8CoZGc1pbiJn12Tqjk8BXYCnYz3hYL5GRjHW8LEykjXhV9WgNGI4rgpgHcbIiBfrRq6A== +ignore-walk@^3.0.1: + version "3.0.3" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" + integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw== + dependencies: + minimatch "^3.0.4" + ignore@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== -ignore@^5.1.4: +ignore@^5.0.4, ignore@^5.1.4: version "5.1.8" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== @@ -1044,6 +1084,11 @@ inherits@2: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== +ini@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" + integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== + is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" @@ -1194,6 +1239,13 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + optionalDependencies: + graceful-fs "^4.1.6" + jsonfile@^6.0.1: version "6.1.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" @@ -1383,6 +1435,27 @@ normalize-path@^3.0.0, normalize-path@~3.0.0: resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== +npm-bundled@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b" + integrity sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA== + dependencies: + npm-normalize-package-bin "^1.0.1" + +npm-normalize-package-bin@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" + integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== + +npm-packlist@^1.4.1: + version "1.4.8" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e" + integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A== + dependencies: + ignore-walk "^3.0.1" + npm-bundled "^1.0.1" + npm-normalize-package-bin "^1.0.1" + npm-run-all@^4.1.5: version "4.1.5" resolved "https://registry.yarnpkg.com/npm-run-all/-/npm-run-all-4.1.5.tgz#04476202a15ee0e2e214080861bff12a51d98fba" @@ -1637,6 +1710,11 @@ regextras@^0.7.1: resolved "https://registry.yarnpkg.com/regextras/-/regextras-0.7.1.tgz#be95719d5f43f9ef0b9fa07ad89b7c606995a3b2" integrity sha512-9YXf6xtW+qzQ+hcMQXx95MOvfqXFgsKDZodX3qZB0x2n5Z94ioetIITsBtvJbiOyxa/6s9AtyweBLCdPmPko/w== +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + require-from-string@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" @@ -1988,6 +2066,11 @@ typescript@^4.1.3: resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.1.3.tgz#519d582bd94cba0cf8934c7d8e8467e473f53bb7" integrity sha512-B3ZIOf1IKeH2ixgHhj6la6xdwR9QrLC5d1VKeCSY4tvkqhF2eqd9O7txNlS0PO3GrBAFIdr3L1ndNwteUbZLYg== +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + universalify@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" @@ -2096,6 +2179,25 @@ xterm@4.10.0-beta.4: resolved "https://registry.yarnpkg.com/xterm/-/xterm-4.10.0-beta.4.tgz#95efce7a40ec582101ec9777f4ccc6e68e95185e" integrity sha512-q/yRy2nn4mp1jWZe218TJwlKjXCIr6h28Kw0JMB+lcTeU+MebZ3TrHqlrNVnB+UJfFDOpkw0qfKYfRoV8G/hXA== +y18n@^5.0.5: + version "5.0.5" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.5.tgz#8769ec08d03b1ea2df2500acef561743bbb9ab18" + integrity sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg== + +yalc@^1.0.0-pre.50: + version "1.0.0-pre.50" + resolved "https://registry.yarnpkg.com/yalc/-/yalc-1.0.0-pre.50.tgz#e654e5af5f739cf255eedad1d66ba05a17de78f9" + integrity sha512-HGFjFFUhXSpQcxyOwJQl3jhERMn7XBgSCCoJ1k3dDPMbH6n56onv6Cp6cDGMiTho8tLIF4x02/Kb4g6pHavzgA== + dependencies: + chalk "^4.1.0" + detect-indent "^6.0.0" + fs-extra "^8.0.1" + glob "^7.1.4" + ignore "^5.0.4" + ini "^2.0.0" + npm-packlist "^1.4.1" + yargs "^16.1.1" + yallist@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" @@ -2105,3 +2207,21 @@ yaml@^1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e" integrity sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg== + +yargs-parser@^20.2.2: + version "20.2.7" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.7.tgz#61df85c113edfb5a7a4e36eb8aa60ef423cbc90a" + integrity sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw== + +yargs@^16.1.1: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" From 6609cfa9d09bb8dedb2cf01f5cf951646bd620cf Mon Sep 17 00:00:00 2001 From: netcon Date: Fri, 2 Apr 2021 15:55:05 +0800 Subject: [PATCH 010/280] feat: add open changes button to editor title (#270) --- extensions/github1s/package.json | 19 ++++- extensions/github1s/src/commands/editor.ts | 33 +++++++- extensions/github1s/src/commands/index.ts | 3 + extensions/github1s/src/listeners/vscode.ts | 75 ++++++++++++------- .../github1s/src/source-control/changes.ts | 2 +- 5 files changed, 102 insertions(+), 30 deletions(-) diff --git a/extensions/github1s/package.json b/extensions/github1s/package.json index e41a6b692..f4ee8fb86 100644 --- a/extensions/github1s/package.json +++ b/extensions/github1s/package.json @@ -128,6 +128,12 @@ "category": "GitHub1s", "icon": "$(globe)" }, + { + "command": "github1s.editor-view-open-changes", + "title": "Open Changes", + "category": "GitHub1s", + "icon": "$(compare-changes)" + }, { "command": "github1s.diff-view-open-left-file", "title": "Open Left File", @@ -236,6 +242,10 @@ "command": "github1s.commit-view-item-open-on-github", "when": "false" }, + { + "command": "github1s.editor-view-open-changes", + "when": "false" + }, { "command": "github1s.diff-view-open-left-file", "when": "false" @@ -298,15 +308,20 @@ } ], "editor/title": [ + { + "command": "github1s.editor-view-open-changes", + "when": "!isInDiffEditor && github1s.context.showOpenChangesInEditorTitle", + "group": "navigation@1" + }, { "command": "github1s.diff-view-open-left-file", "when": "isInDiffEditor", - "group": "navigation@1" + "group": "navigation@2" }, { "command": "github1s.diff-view-open-right-file", "when": "isInDiffEditor", - "group": "navigation@2" + "group": "navigation@3" }, { "command": "github1s.editor-view-open-prev-revision", diff --git a/extensions/github1s/src/commands/editor.ts b/extensions/github1s/src/commands/editor.ts index d54a40b22..d4ac2dc50 100644 --- a/extensions/github1s/src/commands/editor.ts +++ b/extensions/github1s/src/commands/editor.ts @@ -9,9 +9,40 @@ import router from '@/router'; import repository from '@/repository'; import { emptyFileUri } from '@/providers'; import { basename } from '@/helpers/util'; -import { getChangedFileDiffTitle } from '@/source-control/changes'; +import { + ChangedFile, + getChangedFiles, + getChangedFileCommand, + getChangedFileDiffTitle, +} from '@/source-control/changes'; import { FileChangeType } from '@/repository/types'; +export const getChangedFileFromSourceControl = async ( + fileUri: vscode.Uri +): Promise => { + // the file should belong to current workspace + if (fileUri.authority) { + return; + } + + return (await getChangedFiles()).find((changedFile) => { + return changedFile.headFileUri.path === fileUri.path; + }); +}; + +// open the diff editor of a file, such as click it in source-control-panel, +// only work when we can found the corresponding file in source-control-panel +export const commandEditorViewOpenChanges = async (fileUri: vscode.Uri) => { + const changedFile = await getChangedFileFromSourceControl(fileUri); + + if (!changedFile) { + return; + } + + const command = await getChangedFileCommand(changedFile); + vscode.commands.executeCommand(command.command, ...command.arguments); +}; + const openFileToEditor = async (fileUri) => { const isCurrentAuthority = fileUri.authority === (await router.getAuthority()); diff --git a/extensions/github1s/src/commands/index.ts b/extensions/github1s/src/commands/index.ts index ed45d97ec..a52c66e59 100644 --- a/extensions/github1s/src/commands/index.ts +++ b/extensions/github1s/src/commands/index.ts @@ -24,6 +24,7 @@ import { } from './commit'; import { commandOpenGitpod } from './gitpod'; import { + commandEditorViewOpenChanges, commandDiffViewOpenLeftFile, commandDiffViewOpenRightFile, commandEditorViewOpenNextRevision, @@ -64,6 +65,8 @@ const commands: { id: string; callback: (...args: any[]) => any }[] = [ // open current repository on gitpod { id: 'github1s.open-gitpod', callback: commandOpenGitpod }, + // open the changes of a file + { id: 'github1s.editor-view-open-changes', callback: commandEditorViewOpenChanges }, // prettier-ignore // open the left file in diff editor { id: 'github1s.diff-view-open-left-file', callback: commandDiffViewOpenLeftFile }, // prettier-ignore // open the right file in diff editor diff --git a/extensions/github1s/src/listeners/vscode.ts b/extensions/github1s/src/listeners/vscode.ts index 5bfe3f255..64acaafbe 100644 --- a/extensions/github1s/src/listeners/vscode.ts +++ b/extensions/github1s/src/listeners/vscode.ts @@ -6,35 +6,58 @@ import * as vscode from 'vscode'; import router from '@/router'; import { PageType } from '@/router/types'; +import { getChangedFileFromSourceControl } from '@/commands/editor'; import { GitHub1sFileSystemProvider } from '@/providers/fileSystemProvider'; -export const registerVSCodeEventListeners = () => { +const handleRouterOnActiveEditorChange = async ( + editor: vscode.TextEditor | undefined +) => { // replace current url when user change active editor - vscode.window.onDidChangeActiveTextEditor(async (editor) => { - const { owner, repo, ref, pageType } = await router.getState(); - const activeFileUri = editor?.document.uri; - - // only `tree/blob` page will replace url with the active editor change - if (![PageType.TREE, PageType.BLOB].includes(pageType)) { - return; - } - - // if the file which not belong to current workspace is opened, or no file - // is opened, only retain `owner` and `repo` (and `ref` if need) in browser url - if ( - !activeFileUri || - activeFileUri?.authority || - activeFileUri?.scheme !== GitHub1sFileSystemProvider.scheme - ) { - const browserPath = - ref.toUpperCase() === 'HEAD' - ? `/${owner}/${repo}` - : `/${owner}/${repo}/tree/${ref}`; - router.history.replace(browserPath); - return; - } - - const browserPath = `/${owner}/${repo}/blob/${ref}${activeFileUri.path}`; + const { owner, repo, ref, pageType } = await router.getState(); + const activeFileUri = editor?.document.uri; + + // only `tree/blob` page will replace url with the active editor change + if (![PageType.TREE, PageType.BLOB].includes(pageType)) { + return; + } + + // if the file which not belong to current workspace is opened, or no file + // is opened, only retain `owner` and `repo` (and `ref` if need) in browser url + if ( + !activeFileUri || + activeFileUri?.authority || + activeFileUri?.scheme !== GitHub1sFileSystemProvider.scheme + ) { + const browserPath = + ref.toUpperCase() === 'HEAD' + ? `/${owner}/${repo}` + : `/${owner}/${repo}/tree/${ref}`; router.history.replace(browserPath); + return; + } + + const browserPath = `/${owner}/${repo}/blob/${ref}${activeFileUri.path}`; + router.history.replace(browserPath); +}; + +// if the `Open Changes` Button should show in editor title +const handleOpenChangesContextOnActiveEditorChange = async ( + editor: vscode.TextEditor | undefined +) => { + const changedFile = editor?.document.uri + ? await getChangedFileFromSourceControl(editor.document.uri) + : undefined; + + return vscode.commands.executeCommand( + 'setContext', + 'github1s.context.showOpenChangesInEditorTitle', + !!changedFile + ); +}; + +export const registerVSCodeEventListeners = () => { + vscode.window.onDidChangeActiveTextEditor(async (editor) => { + handleRouterOnActiveEditorChange(editor); + handleOpenChangesContextOnActiveEditorChange(editor); }); }; diff --git a/extensions/github1s/src/source-control/changes.ts b/extensions/github1s/src/source-control/changes.ts index f51c04184..557118734 100644 --- a/extensions/github1s/src/source-control/changes.ts +++ b/extensions/github1s/src/source-control/changes.ts @@ -79,7 +79,7 @@ export const getCommitChangedFiles = async (commit: RepositoryCommit) => { }); }; -const getChangedFiles = async (): Promise => { +export const getChangedFiles = async (): Promise => { const routerState = await router.getState(); // github pull page From 97ec214b3340374ef50f8feefe55a51dc1c98a10 Mon Sep 17 00:00:00 2001 From: netcon Date: Sat, 3 Apr 2021 10:24:25 +0800 Subject: [PATCH 011/280] update build/dev scripts (#271) * chore: remove unused code in watch scripts * fix: watch mode without vscode use wrong index.html * fix: gitpod dev script throw error * feat: regenerate config when extensions/github1s/package.json changes * fix: update watch-with-vscode command --- .gitpod.yml | 3 --- package.json | 4 ++-- .../{index-dev.html => index-dev-vscode.html} | 0 scripts/build.sh | 1 - scripts/package/copy-extensions.sh | 2 -- scripts/package/copy-resources.sh | 6 +++--- scripts/{watch.sh => watch-setup.sh} | 7 ------- scripts/watch/watch-dist.js | 15 +++++++++++++++ 8 files changed, 20 insertions(+), 18 deletions(-) rename resources/{index-dev.html => index-dev-vscode.html} (100%) rename scripts/{watch.sh => watch-setup.sh} (66%) diff --git a/.gitpod.yml b/.gitpod.yml index 13fb20587..e784cce0b 100644 --- a/.gitpod.yml +++ b/.gitpod.yml @@ -4,9 +4,6 @@ tasks: - init: | yarn yarn build - mkdir -p lib/vscode/out - sed -i 's/The Web Worker Extension Host did not start in 10s/The Web Worker Extension Host did not start in 60s/g' ./lib/vscode/src/vs/workbench/services/extensions/browser/webWorkerExtensionHost.ts - sed -i 's/}, 10000);/}, 60000);/g' ./lib/vscode/src/vs/workbench/services/extensions/browser/webWorkerExtensionHost.ts command: | echo "=======================" echo "Please run 'yarn watch'" diff --git a/package.json b/package.json index 7d72a6712..f33b90f54 100644 --- a/package.json +++ b/package.json @@ -38,9 +38,9 @@ "hash": "./scripts/hash.sh", "package": "./scripts/package.sh", "watch": "rm -rf dist && run-p watch:*", - "watch-with-vscode": "run-p watch watch-vscode", + "watch-with-vscode": "DEV_VSCODE=true run-p watch watch-vscode", "watch-vscode": "cd vscode-web-github1s && yarn watch", - "watch:setup": "./scripts/watch.sh", + "watch:setup": "./scripts/watch-setup.sh", "watch:dist": "cd scripts/watch && node watch-dist.js", "watch:github1s-extension": "cd extensions/github1s && yarn dev", "serve": "node ./scripts/serve-dist.js", diff --git a/resources/index-dev.html b/resources/index-dev-vscode.html similarity index 100% rename from resources/index-dev.html rename to resources/index-dev-vscode.html diff --git a/scripts/build.sh b/scripts/build.sh index bb411b40a..913721c3e 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -3,7 +3,6 @@ set -euo pipefail cd "$(dirname "${0}")/.." APP_ROOT=$(pwd) -export IS_BUILD="true" # execute all necessary tasks function main() { diff --git a/scripts/package/copy-extensions.sh b/scripts/package/copy-extensions.sh index 28decb127..5642b156a 100755 --- a/scripts/package/copy-extensions.sh +++ b/scripts/package/copy-extensions.sh @@ -6,8 +6,6 @@ APP_ROOT=$(pwd) function main() { cd ${APP_ROOT} - TARGET="vscode-web-github1s/dist" - mkdir -p "${TARGET}/extensions" node scripts/package/copy-extensions.js echo "copy vscode builtin extensions done!" diff --git a/scripts/package/copy-resources.sh b/scripts/package/copy-resources.sh index 12d5f0002..15c5c2ecd 100755 --- a/scripts/package/copy-resources.sh +++ b/scripts/package/copy-resources.sh @@ -7,11 +7,11 @@ APP_ROOT=$(pwd) function main() { cd ${APP_ROOT} mkdir -p dist - if [ "${IS_BUILD-}" ]; + if [ "${DEV_VSCODE-}" ]; then - cp resources/index.html dist/index.html + cp resources/index-dev-vscode.html dist/index.html else - cp resources/index-dev.html dist/index.html + cp resources/index.html dist/index.html fi cp resources/*.ico dist cp resources/manifest.json dist diff --git a/scripts/watch.sh b/scripts/watch-setup.sh similarity index 66% rename from scripts/watch.sh rename to scripts/watch-setup.sh index f292272ba..1c844c136 100755 --- a/scripts/watch.sh +++ b/scripts/watch-setup.sh @@ -11,13 +11,6 @@ function main() { ./package/copy-node_modules.sh ./package/copy-extensions.sh node ./package/generate-config.js - - echo 'please waiting...' - while [ ! -e "${APP_ROOT}/vscode-web-github1s/lib/vscode/out" ] - do - echo "waiting for vscode build..." - sleep 3 - done } main "$@" diff --git a/scripts/watch/watch-dist.js b/scripts/watch/watch-dist.js index 0f2848ad3..1b202c1ac 100755 --- a/scripts/watch/watch-dist.js +++ b/scripts/watch/watch-dist.js @@ -37,10 +37,25 @@ const autoSyncGitHub1sExtension = async () => { ); }; +// regenerate the config when `extensions/github1s/packages.json` has changed +const autoRegenerateConfig = async () => { + const packagePath = path.join(APP_ROOT, 'extensions/github1s/package.json'); + const scriptPath = path.join(APP_ROOT, 'scripts/package/generate-config.js'); + + chokidar.watch(packagePath).on( + 'all', + debounce(() => { + cp.exec(`node ${scriptPath}`); + console.log(`the config has updated`); + }, 300) + ); +}; + const main = () => { fs.ensureDirSync(path.join(APP_ROOT, 'dist/static')); autoSyncGitHub1sExtension(); + autoRegenerateConfig(); }; main(); From 413ddb63ef8159a51224a45e71779cca52d55bd7 Mon Sep 17 00:00:00 2001 From: netcon Date: Tue, 6 Apr 2021 01:16:44 +0800 Subject: [PATCH 012/280] upgrade vscode to 1.55.0 (#273) * chore: upgrade vscode to 1.55.0 * feat: add home indicator to jump back to github * feat: add readonly attribute to editor dom on mobile by default * feat: upgrade @github1s/vscode-web version * fix: @github1s/vscode-web packages lack necessary files * feature: update vscode extensions * chore: update @github1s/vscode-web version * fix: unit test fails on GitHub repo Link * chore: preload css and fix terminalService exception --- README.md | 6 +- docs/guide.md | 2 +- extensions/julia-web/LICENSE | 24 - extensions/julia-web/README.md | 57 - extensions/julia-web/images/julia-logo.png | Bin 24211 -> 0 bytes .../julia.language-configuration.json | 86 - extensions/julia-web/package.json | 90 - extensions/julia-web/syntaxes/julia.json | 1109 ---- .../julia-web/syntaxes/juliacodeblock.json | 48 - .../julia-web/syntaxes/juliamarkdown.json | 13 - .../julia-web/syntaxes/update_syntax.jl | 26 - .../syntaxes/svelte.tmLanguage.json | 4 +- package.json | 6 +- resources/images/gitpod-notification.png | Bin 241002 -> 0 bytes resources/index-dev-vscode.html | 8 - resources/index-hash.html | 10 +- resources/index.html | 10 +- scripts/package/copy-node_modules.sh | 5 +- tests/__tests__/index.test.ts | 5 +- vscode-web-github1s/package.json | 4 +- .../resources/builtin-extensions.json | 12 + vscode-web-github1s/scripts/clone.sh | 2 +- .../scripts/copy-extensions.js | 9 +- .../scripts/copy-extensions.sh | 1 + .../src/vs/base/common/platform.ts | 78 +- .../vs/code/browser/workbench/workbench.ts | 323 +- .../browser/controller/textAreaHandler.ts | 106 +- .../vs/editor/common/config/editorOptions.ts | 4569 +++++++++++++++++ .../src/vs/github1s/notification.ts | 6 - .../src/vs/platform/product/common/product.ts | 37 +- .../telemetry/common/telemetryService.ts | 5 +- .../parts/activitybar/activitybarActions.ts | 613 +-- .../parts/activitybar/activitybarPart.ts | 1390 ++--- .../activitybar/media/activitybarpart.css | 106 - .../parts/titlebar/media/titlebarpart.css | 176 + .../browser/parts/titlebar/titlebarPart.ts | 479 +- .../src/vs/workbench/browser/web.main.ts | 134 +- .../browser/workbench.contribution.ts | 1040 ++-- .../files/browser/views/explorerView.ts | 960 ++-- .../files/common/editors/fileEditorInput.ts | 189 +- .../terminal/browser/terminalService.ts | 1027 ++++ .../contrib/url/browser/trustedDomains.ts | 226 +- .../contrib/webview/browser/pre/main.js | 204 +- .../page/browser/vs_code_welcome_page.ts | 50 +- .../page/browser/welcomePage.contribution.ts | 158 - .../welcome/page/browser/welcomePage.css | 138 +- .../welcome/page/browser/welcomePage.ts | 271 +- .../themes/browser/workbenchThemeService.ts | 36 +- .../themes/common/themeConfiguration.ts | 482 +- .../services/workspaces/browser/workspaces.ts | 44 + yarn.lock | 8 +- 51 files changed, 8203 insertions(+), 6189 deletions(-) delete mode 100644 extensions/julia-web/LICENSE delete mode 100644 extensions/julia-web/README.md delete mode 100644 extensions/julia-web/images/julia-logo.png delete mode 100644 extensions/julia-web/julia.language-configuration.json delete mode 100644 extensions/julia-web/package.json delete mode 100644 extensions/julia-web/syntaxes/julia.json delete mode 100644 extensions/julia-web/syntaxes/juliacodeblock.json delete mode 100644 extensions/julia-web/syntaxes/juliamarkdown.json delete mode 100755 extensions/julia-web/syntaxes/update_syntax.jl delete mode 100644 resources/images/gitpod-notification.png create mode 100644 vscode-web-github1s/src/vs/editor/common/config/editorOptions.ts delete mode 100644 vscode-web-github1s/src/vs/workbench/browser/parts/activitybar/media/activitybarpart.css create mode 100644 vscode-web-github1s/src/vs/workbench/browser/parts/titlebar/media/titlebarpart.css create mode 100644 vscode-web-github1s/src/vs/workbench/contrib/terminal/browser/terminalService.ts delete mode 100644 vscode-web-github1s/src/vs/workbench/contrib/welcome/page/browser/welcomePage.contribution.ts create mode 100644 vscode-web-github1s/src/vs/workbench/services/workspaces/browser/workspaces.ts diff --git a/README.md b/README.md index 788e3cf93..3490d22b0 100644 --- a/README.md +++ b/README.md @@ -24,11 +24,7 @@ javascript: window.location.href = window.location.href.replace(/github(1s)?.com ### Develop in the cloud -To edit files, run Docker containers, create pull requests and more, click the "[Gitpod](https://www.gitpod.io) ready-to-code" button at the bottom of your browser once you open your project with github1s. - -![Gitpod Notification](https://raw.githubusercontent.com/conwnet/github1s/master/resources/images/gitpod-notification.png) - -_Note_: If you already closed the notification, you can find a "Develop your project on Gitpod" button in the status bar. You can also open the Command Palette (default shortcut `Ctrl+Shift+P`) and choose `GitHub1s: Edit files in Gitpod`. +To edit files, run Docker containers, create pull requests and more, click the "Develop your project on [Gitpod](https://www.gitpod.io)" button in the status bar. You can also open the Command Palette (default shortcut `Ctrl+Shift+P`) and choose `GitHub1s: Edit files in Gitpod`. ![Gitpod Status Bar](https://raw.githubusercontent.com/conwnet/github1s/master/resources/images/gitpod-statusbar.png) diff --git a/docs/guide.md b/docs/guide.md index ee9db7027..3c559620c 100644 --- a/docs/guide.md +++ b/docs/guide.md @@ -1,6 +1,6 @@ # How it works -GitHub1s is based on [VS Code 1.52.1](https://github.com/microsoft/vscode/tree/1.52.1) now. VS Code can be built for a browser version officially. I also used the code and got inspired by [Code Server](https://github.com/cdr/code-server). +GitHub1s is based on [VS Code 1.55.0](https://github.com/microsoft/vscode/tree/1.52.1) now. VS Code can be built for a browser version officially. I also used the code and got inspired by [Code Server](https://github.com/cdr/code-server). Thanks to the very powerful and flexible extensibility of VS Code, we can easily implement a VS Code extension that provides the custom File IO ability using [FileSystemProvider API](https://code.visualstudio.com/api/references/vscode-api#FileSystemProvider). There is an official demo named [vscode-web-playground](https://github.com/microsoft/vscode-web-playground) which shows how it is used. diff --git a/extensions/julia-web/LICENSE b/extensions/julia-web/LICENSE deleted file mode 100644 index e8f99b8aa..000000000 --- a/extensions/julia-web/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2012-2019 David Anthoff, Zac Nugent and other contributors: - -https://github.com/JuliaLang/Julia.tmbundle/contributors -https://github.com/julia-vscode/julia-vscode/contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/extensions/julia-web/README.md b/extensions/julia-web/README.md deleted file mode 100644 index 02261f610..000000000 --- a/extensions/julia-web/README.md +++ /dev/null @@ -1,57 +0,0 @@ -# This extension is a fork from [julia-vscode](https://github.com/julia-vscode/julia-vscode) for github1s. - -# At present only languages features is reserved - -# I have deleted some files and only reserved the necessary code - -# Julia - -[![Build Status](https://dev.azure.com/julia-vscode/julia-vscode/_apis/build/status/julia-vscode.julia-vscode?branchName=master)](https://dev.azure.com/julia-vscode/julia-vscode/_build/latest?definitionId=1&branchName=master) - -This [VS Code](https://code.visualstudio.com) extension provides support for the [Julia programming language](http://julialang.org/). - -## Getting started - -### Installing Julia/VS Code/VS Code Julia extension - -1. Install Julia for your platform: https://julialang.org/downloads/ -2. Install VS Code for your platform: https://code.visualstudio.com/download - At the end of this step you should be able to start VS Code. -3. Install the Julia VS Code extension: - 1. Start VS Code. - 2. Inside VS Code, go to the extensions view either by - executing the `View: Show Extensions` command (click View->Command Palette...) - or by clicking on the extension icon on the left side of the VS Code - window. - 3. In the extensions view, simply search for the term `julia` in the marketplace - search box, then select the extension named `Julia` and click the install button. - You might have to restart VS Code after this step. - - -## Features - -The extension currently provides: - -- syntax highlighting -- [a linter](https://github.com/julia-vscode/julia-vscode/wiki/Information#linter) -- [code navigation](https://github.com/julia-vscode/julia-vscode/wiki/Navigation) -- a plot gallery -- a grid viewer for tabular data -- integrated support for Weave.jl - -## Documentation - -The [documentation](https://www.julia-vscode.org/docs/stable/) -has sections that describe the features of this extension (including -e.g. keyboard shortcuts). This repo also has legacy docs in the -[wiki](https://github.com/julia-vscode/julia-vscode/wiki). - -## Known issues and workarounds - -Please visit the [known issues and workarounds](https://github.com/julia-vscode/julia-vscode/wiki/Known-issues-and-workarounds) -for up-to-date information about known issues and solutions for those -problems. - -## Data/Telemetry - -The Julia extension for Visual Studio Code collects usage data and sends it to the development team to help improve the extension. Read our [privacy policy](https://github.com/julia-vscode/julia-vscode/wiki/Privacy-Policy) to learn more and how to disable any telemetry. diff --git a/extensions/julia-web/images/julia-logo.png b/extensions/julia-web/images/julia-logo.png deleted file mode 100644 index 54541beb957daa20212ee5711a6df38ba4b08591..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24211 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 diff --git a/extensions/julia-web/julia.language-configuration.json b/extensions/julia-web/julia.language-configuration.json deleted file mode 100644 index 6002cd799..000000000 --- a/extensions/julia-web/julia.language-configuration.json +++ /dev/null @@ -1,86 +0,0 @@ -{ - "comments": { - // symbol used for single line comment. Remove this entry if your language does not support line comments - "lineComment": "#", - // symbols used for start and end a block comment. Remove this entry if your language does not support block comments - "blockComment": [ - "#=", - "=#" - ] - }, - // symbols used as brackets - "brackets": [ - [ - "{", - "}" - ], - [ - "[", - "]" - ], - [ - "(", - ")" - ] - ], - // symbols that are auto closed when typing - "autoClosingPairs": [ - [ - "{", - "}" - ], - [ - "[", - "]" - ], - [ - "(", - ")" - ], - [ - "`", - "`" - ], - { - "open": "\"", - "close": "\"", - "notIn": [ - "string", - "comment" - ] - } - ], - // symbols that that can be used to surround a selection - "surroundingPairs": [ - [ - "{", - "}" - ], - [ - "[", - "]" - ], - [ - "(", - ")" - ], - [ - "\"", - "\"" - ], - [ - "`", - "`" - ], - [ - "'", - "'" - ] - ], - "folding": { - "markers": { - "start": "^\\s*#region", - "end": "^\\s*#endregion" - } - } -} \ No newline at end of file diff --git a/extensions/julia-web/package.json b/extensions/julia-web/package.json deleted file mode 100644 index 70c4eccda..000000000 --- a/extensions/julia-web/package.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "name": "language-julia", - "displayName": "Julia", - "description": "Julia Language Support", - "version": "1.1.26", - "preview": false, - "publisher": "julialang", - "engines": { - "vscode": "^1.52.0" - }, - "license": "SEE LICENSE IN LICENSE", - "bugs": { - "url": "https://github.com/julia-vscode/julia-vscode/issues" - }, - "homepage": "https://www.julia-vscode.org/", - "repository": { - "type": "git", - "url": "https://github.com/julia-vscode/julia-vscode.git" - }, - "icon": "images/julia-logo.png", - "categories": [ - "Programming Languages", - "Snippets", - "Linters", - "Debuggers" - ], - "activationEvents": [ - "onLanguage:julia", - "onLanguage:juliamarkdown" - ], - "contributes": { - "languages": [ - { - "id": "julia", - "aliases": [ - "Julia", - "julia" - ], - "extensions": [ - ".jl" - ], - "firstLine": "^#!\\s*/.*\\bjulia[0-9.-]*\\b", - "configuration": "./julia.language-configuration.json" - }, - { - "id": "juliamarkdown", - "aliases": [ - "Julia Markdown", - "juliamarkdown" - ], - "extensions": [ - ".jmd" - ] - } - ], - "grammars": [ - { - "language": "julia", - "scopeName": "source.julia", - "path": "./syntaxes/julia.json", - "embeddedLanguages": { - "meta.embedded.inline.cpp": "cpp", - "meta.embedded.inline.javascript": "javascript", - "meta.embedded.inline.markdown": "juliamarkdown", - "meta.embedded.inline.python": "python", - "meta.embedded.inline.r": "r" - } - }, - { - "language": "juliamarkdown", - "scopeName": "text.html.markdown.julia", - "path": "./syntaxes/juliamarkdown.json" - }, - { - "scopeName": "markdown.julia.codeblock", - "path": "./syntaxes/juliacodeblock.json", - "injectTo": [ - "text.html.markdown" - ], - "embeddedLanguages": { - "meta.embedded.block.julia": "julia" - } - } - ] - }, - "scripts": { - "compile": "echo done", - "watch": "echo done" - } -} diff --git a/extensions/julia-web/syntaxes/julia.json b/extensions/julia-web/syntaxes/julia.json deleted file mode 100644 index 158fa6479..000000000 --- a/extensions/julia-web/syntaxes/julia.json +++ /dev/null @@ -1,1109 +0,0 @@ -{ - "comment": "This grammar is used by Atom (Oniguruma), GitHub (PCRE), and VSCode (Oniguruma),\nso all regexps must be compatible with both engines.\n\nSpecs:\n- https://github.com/kkos/oniguruma/blob/master/doc/RE\n- https://www.pcre.org/current/doc/html/", - "fileTypes": ["jl"], - "firstLineMatch": "^#!.*\\bjulia\\s*$", - "name": "Julia", - "patterns": [ - { - "include": "#operator" - }, - { - "include": "#array" - }, - { - "include": "#string" - }, - { - "include": "#bracket" - }, - { - "include": "#function_decl" - }, - { - "include": "#function_call" - }, - { - "include": "#keyword" - }, - { - "include": "#number" - }, - { - "include": "#comment" - }, - { - "include": "#type_decl" - }, - { - "include": "#symbol" - } - ], - "repository": { - "array": { - "patterns": [ - { - "begin": "\\[", - "beginCaptures": { - "0": { - "name": "meta.bracket.julia" - } - }, - "end": "(?:\\])(?:(\\.)?'*)", - "endCaptures": { - "0": { - "name": "meta.bracket.julia" - }, - "1": { - "name": "keyword.operator.transpose.julia" - } - }, - "name": "meta.array.julia", - "patterns": [ - { - "match": "\\bbegin\\b", - "name": "constant.numeric.julia" - }, - { - "match": "\\bend\\b", - "name": "constant.numeric.julia" - }, - { - "match": "\\bfor\\b", - "name": "keyword.control.julia" - }, - { - "include": "$self" - } - ] - } - ] - }, - "bracket": { - "patterns": [ - { - "match": "(?:\\(|\\)|\\[|\\]|\\{|\\}|,|;)(?!('|(?:\\.'))*\\.?')", - "name": "meta.bracket.julia" - } - ] - }, - "comment": { - "patterns": [ - { - "include": "#comment_block" - }, - { - "begin": "#", - "beginCaptures": { - "0": { - "name": "punctuation.definition.comment.julia" - } - }, - "end": "\\n", - "name": "comment.line.number-sign.julia" - } - ] - }, - "comment_block": { - "patterns": [ - { - "begin": "#=", - "beginCaptures": { - "0": { - "name": "punctuation.definition.comment.begin.julia" - } - }, - "end": "=#", - "endCaptures": { - "0": { - "name": "punctuation.definition.comment.end.julia" - } - }, - "name": "comment.block.number-sign-equals.julia", - "patterns": [ - { - "include": "#comment_block" - } - ] - } - ] - }, - "function_call": { - "patterns": [ - { - "begin": "((?:[[:alpha:]_\\p{Lu}\\p{Ll}\\p{Lt}\\p{Lm}\\p{Lo}\\p{Nl}\\p{Sc}⅀-⅄∿⊾⊿⊤⊥∂∅-∇∎∏∐∑∞∟∫-∳⋀-⋃◸-◿♯⟘⟙⟀⟁⦰-⦴⨀-⨆⨉-⨖⨛⨜𝛁𝛛𝛻𝜕𝜵𝝏𝝯𝞉𝞩𝟃ⁱ-⁾₁-₎∠-∢⦛-⦯℘℮゛-゜𝟎-𝟡]|[^\\P{So}←-⇿])(?:[[:word:]_!\\p{Lu}\\p{Ll}\\p{Lt}\\p{Lm}\\p{Lo}\\p{Nl}\\p{Sc}⅀-⅄∿⊾⊿⊤⊥∂∅-∇∎∏∐∑∞∟∫-∳⋀-⋃◸-◿♯⟘⟙⟀⟁⦰-⦴⨀-⨆⨉-⨖⨛⨜𝛁𝛛𝛻𝜕𝜵𝝏𝝯𝞉𝞩𝟃ⁱ-⁾₁-₎∠-∢⦛-⦯℘℮゛-゜𝟎-𝟡]|[^\\P{Mn}\u0001-¡]|[^\\P{Mc}\u0001-¡]|[^\\P{Nd}\u0001-¡]|[^\\P{Pc}\u0001-¡]|[^\\P{Sk}\u0001-¡]|[^\\P{Me}\u0001-¡]|[^\\P{No}\u0001-¡]|[′-‷⁗]|[^\\P{So}←-⇿])*)({(?:[^{}]|{(?:[^{}]|{[^{}]*})*})*})?\\.?(?=\\()", - "beginCaptures": { - "1": { - "name": "support.function.julia" - }, - "2": { - "name": "support.type.julia" - } - }, - "end": "\\)(('|(\\.'))*\\.?')?", - "endCaptures": { - "0": { - "name": "meta.bracket.julia" - }, - "1": { - "name": "keyword.operator.transposed-func.julia" - } - }, - "patterns": [ - { - "match": "\\bfor\\b", - "name": "keyword.control.julia" - }, - { - "include": "$self" - } - ] - } - ] - }, - "function_decl": { - "patterns": [ - { - "captures": { - "1": { - "name": "entity.name.function.julia" - }, - "2": { - "name": "support.type.julia" - } - }, - "match": "((?:[[:alpha:]_\\p{Lu}\\p{Ll}\\p{Lt}\\p{Lm}\\p{Lo}\\p{Nl}\\p{Sc}⅀-⅄∿⊾⊿⊤⊥∂∅-∇∎∏∐∑∞∟∫-∳⋀-⋃◸-◿♯⟘⟙⟀⟁⦰-⦴⨀-⨆⨉-⨖⨛⨜𝛁𝛛𝛻𝜕𝜵𝝏𝝯𝞉𝞩𝟃ⁱ-⁾₁-₎∠-∢⦛-⦯℘℮゛-゜𝟎-𝟡]|[^\\P{So}←-⇿])(?:[[:word:]_!\\p{Lu}\\p{Ll}\\p{Lt}\\p{Lm}\\p{Lo}\\p{Nl}\\p{Sc}⅀-⅄∿⊾⊿⊤⊥∂∅-∇∎∏∐∑∞∟∫-∳⋀-⋃◸-◿♯⟘⟙⟀⟁⦰-⦴⨀-⨆⨉-⨖⨛⨜𝛁𝛛𝛻𝜕𝜵𝝏𝝯𝞉𝞩𝟃ⁱ-⁾₁-₎∠-∢⦛-⦯℘℮゛-゜𝟎-𝟡]|[^\\P{Mn}\u0001-¡]|[^\\P{Mc}\u0001-¡]|[^\\P{Nd}\u0001-¡]|[^\\P{Pc}\u0001-¡]|[^\\P{Sk}\u0001-¡]|[^\\P{Me}\u0001-¡]|[^\\P{No}\u0001-¡]|[′-‷⁗]|[^\\P{So}←-⇿])*)({(?:[^{}]|{(?:[^{}]|{[^{}]*})*})*})?(?=\\(.*\\)(::[^\\s]+)?(\\s*\\bwhere\\b\\s+.+?)?\\s*?=(?![=>]))", - "comment": "first group is function name\nSecond group is type parameters (e.g. {T<:Number, S})\nThen open parens\nThen a lookahead ensures that we are followed by:\n - anything (function argumnets)\n - 0 or more spaces\n - Finally an equal sign\nNegative lookahead ensures we don't have another equal sign (not `==`)" - }, - { - "captures": { - "1": { - "name": "keyword.other.julia" - }, - "2": { - "name": "keyword.operator.dots.julia" - }, - "3": { - "name": "entity.name.function.julia" - }, - "4": { - "name": "support.type.julia" - } - }, - "match": "\\b(function|macro)(?:\\s+(?:(?:[[:alpha:]_\\p{Lu}\\p{Ll}\\p{Lt}\\p{Lm}\\p{Lo}\\p{Nl}\\p{Sc}⅀-⅄∿⊾⊿⊤⊥∂∅-∇∎∏∐∑∞∟∫-∳⋀-⋃◸-◿♯⟘⟙⟀⟁⦰-⦴⨀-⨆⨉-⨖⨛⨜𝛁𝛛𝛻𝜕𝜵𝝏𝝯𝞉𝞩𝟃ⁱ-⁾₁-₎∠-∢⦛-⦯℘℮゛-゜𝟎-𝟡]|[^\\P{So}←-⇿])(?:[[:word:]_!\\p{Lu}\\p{Ll}\\p{Lt}\\p{Lm}\\p{Lo}\\p{Nl}\\p{Sc}⅀-⅄∿⊾⊿⊤⊥∂∅-∇∎∏∐∑∞∟∫-∳⋀-⋃◸-◿♯⟘⟙⟀⟁⦰-⦴⨀-⨆⨉-⨖⨛⨜𝛁𝛛𝛻𝜕𝜵𝝏𝝯𝞉𝞩𝟃ⁱ-⁾₁-₎∠-∢⦛-⦯℘℮゛-゜𝟎-𝟡]|[^\\P{Mn}\u0001-¡]|[^\\P{Mc}\u0001-¡]|[^\\P{Nd}\u0001-¡]|[^\\P{Pc}\u0001-¡]|[^\\P{Sk}\u0001-¡]|[^\\P{Me}\u0001-¡]|[^\\P{No}\u0001-¡]|[′-‷⁗]|[^\\P{So}←-⇿])*(\\.))?((?:[[:alpha:]_\\p{Lu}\\p{Ll}\\p{Lt}\\p{Lm}\\p{Lo}\\p{Nl}\\p{Sc}⅀-⅄∿⊾⊿⊤⊥∂∅-∇∎∏∐∑∞∟∫-∳⋀-⋃◸-◿♯⟘⟙⟀⟁⦰-⦴⨀-⨆⨉-⨖⨛⨜𝛁𝛛𝛻𝜕𝜵𝝏𝝯𝞉𝞩𝟃ⁱ-⁾₁-₎∠-∢⦛-⦯℘℮゛-゜𝟎-𝟡]|[^\\P{So}←-⇿])(?:[[:word:]_!\\p{Lu}\\p{Ll}\\p{Lt}\\p{Lm}\\p{Lo}\\p{Nl}\\p{Sc}⅀-⅄∿⊾⊿⊤⊥∂∅-∇∎∏∐∑∞∟∫-∳⋀-⋃◸-◿♯⟘⟙⟀⟁⦰-⦴⨀-⨆⨉-⨖⨛⨜𝛁𝛛𝛻𝜕𝜵𝝏𝝯𝞉𝞩𝟃ⁱ-⁾₁-₎∠-∢⦛-⦯℘℮゛-゜𝟎-𝟡]|[^\\P{Mn}\u0001-¡]|[^\\P{Mc}\u0001-¡]|[^\\P{Nd}\u0001-¡]|[^\\P{Pc}\u0001-¡]|[^\\P{Sk}\u0001-¡]|[^\\P{Me}\u0001-¡]|[^\\P{No}\u0001-¡]|[′-‷⁗]|[^\\P{So}←-⇿])*)({(?:[^{}]|{(?:[^{}]|{[^{}]*})*})*})?|\\s*)(?=\\()", - "comment": "similar regex to previous, but with keyword not 1-line syntax" - } - ] - }, - "keyword": { - "patterns": [ - { - "match": "\\b(?|<-|-->|=>)", - "name": "keyword.operator.arrow.julia" - }, - { - "match": "(?::=|\\+=|-=|\\*=|//=|/=|\\.//=|\\./=|\\.\\*=|\\\\=|\\.\\\\=|\\^=|\\.\\^=|%=|\\.%=|÷=|\\.÷=|\\|=|&=|\\.&=|⊻=|\\.⊻=|\\$=|<<=|>>=|>>>=|=(?!=))", - "name": "keyword.operator.update.julia" - }, - { - "match": "(?:<<|>>>|>>|\\.>>>|\\.>>|\\.<<)", - "name": "keyword.operator.shift.julia" - }, - { - "match": "(?:\\s*(::|>:|<:)\\s*((?:(?:Union)?\\([^)]*\\)|[[:alpha:]_$∇][[:word:]⁺-ₜ!′\\.]*(?:(?:{(?:[^{}]|{(?:[^{}]|{[^{}]*})*})*})|(?:\".+?(?=|\\.>|\\.<=|\\.<|\\.≤|\\.≥|==|\\.!=|\\.=|\\.!|<:|>:|:>|(?)>=|(?|<|≥|≤)", - "name": "keyword.operator.relation.julia" - }, - { - "match": "(?<=\\s)(?:\\?)(?=\\s)", - "name": "keyword.operator.ternary.julia" - }, - { - "match": "(?<=\\s)(?:\\:)(?=\\s)", - "name": "keyword.operator.ternary.julia" - }, - { - "match": "(?:\\|\\||&&|(?)", - "name": "keyword.operator.applies.julia" - }, - { - "match": "(?:\\||\\.\\||\\&|\\.\\&|~|\\.~|⊻|\\.⊻)", - "name": "keyword.operator.bitwise.julia" - }, - { - "match": "(?:\\+\\+|--|\\+|\\.\\+|-|\\.\\-|\\*|\\.\\*|//(?!=)|\\.//(?!=)|/|\\./|%|\\.%|\\\\|\\.\\\\|\\^|\\.\\^|÷|\\.÷|⋅|\\.⋅|∩|\\.∩|∪|\\.∪|×|√|∛)", - "name": "keyword.operator.arithmetic.julia" - }, - { - "match": "(?:∘)", - "name": "keyword.operator.compose.julia" - }, - { - "match": "(?:::|(?<=\\s)isa(?=\\s))", - "name": "keyword.operator.isa.julia" - }, - { - "match": "(?:(?<=\\s)in(?=\\s))", - "name": "keyword.operator.relation.in.julia" - }, - { - "match": "(?:\\.(?=(?:@|_|\\p{L}))|\\.\\.+)", - "name": "keyword.operator.dots.julia" - }, - { - "match": "(?:\\$(?=.+))", - "name": "keyword.operator.interpolation.julia" - }, - { - "captures": { - "2": { - "name": "keyword.operator.transposed-variable.julia" - } - }, - "match": "((?:[[:alpha:]_\\p{Lu}\\p{Ll}\\p{Lt}\\p{Lm}\\p{Lo}\\p{Nl}\\p{Sc}⅀-⅄∿⊾⊿⊤⊥∂∅-∇∎∏∐∑∞∟∫-∳⋀-⋃◸-◿♯⟘⟙⟀⟁⦰-⦴⨀-⨆⨉-⨖⨛⨜𝛁𝛛𝛻𝜕𝜵𝝏𝝯𝞉𝞩𝟃ⁱ-⁾₁-₎∠-∢⦛-⦯℘℮゛-゜𝟎-𝟡]|[^\\P{So}←-⇿])(?:[[:word:]_!\\p{Lu}\\p{Ll}\\p{Lt}\\p{Lm}\\p{Lo}\\p{Nl}\\p{Sc}⅀-⅄∿⊾⊿⊤⊥∂∅-∇∎∏∐∑∞∟∫-∳⋀-⋃◸-◿♯⟘⟙⟀⟁⦰-⦴⨀-⨆⨉-⨖⨛⨜𝛁𝛛𝛻𝜕𝜵𝝏𝝯𝞉𝞩𝟃ⁱ-⁾₁-₎∠-∢⦛-⦯℘℮゛-゜𝟎-𝟡]|[^\\P{Mn}\u0001-¡]|[^\\P{Mc}\u0001-¡]|[^\\P{Nd}\u0001-¡]|[^\\P{Pc}\u0001-¡]|[^\\P{Sk}\u0001-¡]|[^\\P{Me}\u0001-¡]|[^\\P{No}\u0001-¡]|[′-‷⁗]|[^\\P{So}←-⇿])*)(('|(\\.'))*\\.?')" - }, - { - "captures": { - "1": { - "name": "bracket.end.julia" - }, - "2": { - "name": "keyword.operator.transposed-matrix.julia" - } - }, - "match": "(\\])((?:'|(?:\\.'))*\\.?')" - }, - { - "captures": { - "1": { - "name": "bracket.end.julia" - }, - "2": { - "name": "keyword.operator.transposed-parens.julia" - } - }, - "match": "(\\))((?:'|(?:\\.'))*\\.?')" - } - ] - }, - "string": { - "patterns": [ - { - "begin": "(?:(@doc)\\s((?:doc)?\"\"\")|(doc\"\"\"))", - "beginCaptures": { - "1": { - "name": "support.function.macro.julia" - }, - "2": { - "name": "punctuation.definition.string.begin.julia" - } - }, - "end": "(\"\"\") ?(->)?", - "endCaptures": { - "1": { - "name": "punctuation.definition.string.end.julia" - }, - "2": { - "name": "keyword.operator.arrow.julia" - } - }, - "name": "string.docstring.julia", - "patterns": [ - { - "include": "#string_escaped_char" - }, - { - "include": "#string_dollar_sign_interpolate" - } - ] - }, - { - "begin": "(i?cxx)(\"\"\")", - "beginCaptures": { - "1": { - "name": "support.function.macro.julia" - }, - "2": { - "name": "punctuation.definition.string.begin.julia" - } - }, - "end": "\"\"\"", - "endCaptures": { - "0": { - "name": "punctuation.definition.string.end.julia" - } - }, - "name": "embed.cxx.julia", - "contentName": "meta.embedded.inline.cpp", - "patterns": [ - { - "include": "source.cpp#root_context" - }, - { - "include": "#string_dollar_sign_interpolate" - } - ] - }, - { - "begin": "((i?cxxt?)|([rpv]cpp))(\")", - "beginCaptures": { - "1": { - "name": "support.function.macro.julia" - }, - "4": { - "name": "punctuation.definition.string.begin.julia" - } - }, - "end": "\"", - "name": "embed.cxx.julia", - "endCaptures": { - "0": { - "name": "punctuation.definition.string.end.julia" - } - }, - "contentName": "meta.embedded.inline.cpp", - "patterns": [ - { - "include": "source.cpp#root_context" - }, - { - "include": "#string_dollar_sign_interpolate" - } - ] - }, - { - "begin": "(py)(\"\"\")", - "beginCaptures": { - "1": { - "name": "support.function.macro.julia" - }, - "2": { - "name": "punctuation.definition.string.begin.julia" - } - }, - "end": "([\\s\\w]*)(\"\"\")", - "endCaptures": { - "2": { - "name": "punctuation.definition.string.end.julia" - } - }, - "name": "embed.python.julia", - "contentName": "meta.embedded.inline.python", - "patterns": [ - { - "include": "source.python" - }, - { - "include": "#string_dollar_sign_interpolate" - } - ] - }, - { - "begin": "(py)(\")", - "beginCaptures": { - "1": { - "name": "support.function.macro.julia" - }, - "2": { - "name": "punctuation.definition.string.begin.julia" - } - }, - "end": "(\\w*)(\")", - "name": "embed.python.julia", - "endCaptures": { - "2": { - "name": "punctuation.definition.string.end.julia" - } - }, - "contentName": "meta.embedded.inline.python", - "patterns": [ - { - "include": "source.python" - }, - { - "include": "#string_dollar_sign_interpolate" - } - ] - }, - { - "begin": "(js)(\"\"\")", - "beginCaptures": { - "1": { - "name": "support.function.macro.julia" - }, - "2": { - "name": "punctuation.definition.string.begin.julia" - } - }, - "end": "\"\"\"", - "endCaptures": { - "0": { - "name": "punctuation.definition.string.end.julia" - } - }, - "name": "embed.js.julia", - "contentName": "meta.embedded.inline.javascript", - "patterns": [ - { - "include": "source.js" - }, - { - "include": "#string_dollar_sign_interpolate" - } - ] - }, - { - "begin": "(js)(\")", - "beginCaptures": { - "1": { - "name": "support.function.macro.julia" - }, - "2": { - "name": "punctuation.definition.string.begin.julia" - } - }, - "end": "\"", - "name": "embed.js.julia", - "endCaptures": { - "0": { - "name": "punctuation.definition.string.end.julia" - } - }, - "contentName": "meta.embedded.inline.javascript", - "patterns": [ - { - "include": "source.js" - }, - { - "include": "#string_dollar_sign_interpolate" - } - ] - }, - { - "begin": "(R)(\"\"\")", - "beginCaptures": { - "1": { - "name": "support.function.macro.julia" - }, - "2": { - "name": "punctuation.definition.string.begin.julia" - } - }, - "end": "\"\"\"", - "endCaptures": { - "0": { - "name": "punctuation.definition.string.end.julia" - } - }, - "name": "embed.R.julia", - "contentName": "meta.embedded.inline.r", - "patterns": [ - { - "include": "source.r" - }, - { - "include": "#string_dollar_sign_interpolate" - } - ] - }, - { - "begin": "(R)(\")", - "beginCaptures": { - "1": { - "name": "support.function.macro.julia" - }, - "2": { - "name": "punctuation.definition.string.begin.julia" - } - }, - "end": "\"", - "name": "embed.R.julia", - "endCaptures": { - "0": { - "name": "punctuation.definition.string.end.julia" - } - }, - "contentName": "meta.embedded.inline.r", - "patterns": [ - { - "include": "source.r" - }, - { - "include": "#string_dollar_sign_interpolate" - } - ] - }, - { - "begin": "(raw)(\"\"\")", - "beginCaptures": { - "1": { - "name": "support.function.macro.julia" - }, - "2": { - "name": "punctuation.definition.string.begin.julia" - } - }, - "end": "\"\"\"", - "name": "string.quoted.other.julia", - "endCaptures": { - "0": { - "name": "punctuation.definition.string.end.julia" - } - } - }, - { - "begin": "(raw)(\")", - "beginCaptures": { - "1": { - "name": "support.function.macro.julia" - }, - "2": { - "name": "punctuation.definition.string.begin.julia" - } - }, - "end": "\"", - "name": "string.quoted.other.julia", - "endCaptures": { - "0": { - "name": "punctuation.definition.string.end.julia" - } - } - }, - { - "begin": "(sql)(\"\"\")", - "beginCaptures": { - "1": { - "name": "support.function.macro.julia" - }, - "2": { - "name": "punctuation.definition.string.begin.julia" - } - }, - "end": "\"\"\"", - "endCaptures": { - "0": { - "name": "punctuation.definition.string.end.julia" - } - }, - "name": "embed.sql.julia", - "contentName": "meta.embedded.inline.sql", - "patterns": [ - { - "include": "source.sql" - }, - { - "include": "#string_dollar_sign_interpolate" - } - ] - }, - { - "begin": "(sql)(\")", - "beginCaptures": { - "1": { - "name": "support.function.macro.julia" - }, - "2": { - "name": "punctuation.definition.string.begin.julia" - } - }, - "end": "\"", - "endCaptures": { - "0": { - "name": "punctuation.definition.string.end.julia" - } - }, - "name": "embed.sql.julia", - "contentName": "meta.embedded.inline.sql", - "patterns": [ - { - "include": "source.sql" - }, - { - "include": "#string_dollar_sign_interpolate" - } - ] - }, - { - "begin": "var\"\"\"", - "end": "\"\"\"", - "name": "constant.other.symbol.julia" - }, - { - "begin": "var\"", - "end": "\"", - "name": "constant.other.symbol.julia" - }, - { - "begin": "(md)(\"\"\")", - "beginCaptures": { - "1": { - "name": "support.function.macro.julia" - }, - "2": { - "name": "punctuation.definition.string.begin.julia" - } - }, - "end": "\"\"\"", - "endCaptures": { - "0": { - "name": "punctuation.definition.string.end.julia" - } - }, - "name": "embed.markdown.julia", - "contentName": "meta.embedded.inline.markdown", - "patterns": [ - { - "include": "text.md" - }, - { - "include": "text.html.markdown.julia" - }, - { - "include": "#string_dollar_sign_interpolate" - } - ] - }, - { - "begin": "(md)(\")", - "beginCaptures": { - "1": { - "name": "support.function.macro.julia" - }, - "2": { - "name": "punctuation.definition.string.begin.julia" - } - }, - "end": "\"", - "name": "embed.markdown.julia", - "endCaptures": { - "0": { - "name": "punctuation.definition.string.end.julia" - } - }, - "contentName": "meta.embedded.inline.markdown", - "patterns": [ - { - "include": "text.md" - }, - { - "include": "text.html.markdown.julia" - }, - { - "include": "#string_dollar_sign_interpolate" - } - ] - }, - { - "begin": "^\\s?(doc)?(\"\"\")\\s?$", - "beginCaptures": { - "1": { - "name": "support.function.macro.julia" - }, - "2": { - "name": "punctuation.definition.string.begin.julia" - } - }, - "end": "(\"\"\")", - "endCaptures": { - "1": { - "name": "punctuation.definition.string.end.julia" - } - }, - "name": "string.docstring.julia", - "comment": "This only matches docstrings that start and end with triple quotes on\ntheir own line in the void", - "patterns": [ - { - "include": "#string_escaped_char" - }, - { - "include": "#string_dollar_sign_interpolate" - } - ] - }, - { - "begin": "'", - "beginCaptures": { - "0": { - "name": "punctuation.definition.string.begin.julia" - } - }, - "end": "'(?!')", - "endCaptures": { - "0": { - "name": "punctuation.definition.string.end.julia" - } - }, - "name": "string.quoted.single.julia", - "patterns": [ - { - "include": "#string_escaped_char" - } - ] - }, - { - "begin": "(?!:_)(?:struct|mutable\\s+struct|abstract\\s+type|primitive\\s+type)\\s+((?:[[:alpha:]_\\p{Lu}\\p{Ll}\\p{Lt}\\p{Lm}\\p{Lo}\\p{Nl}\\p{Sc}⅀-⅄∿⊾⊿⊤⊥∂∅-∇∎∏∐∑∞∟∫-∳⋀-⋃◸-◿♯⟘⟙⟀⟁⦰-⦴⨀-⨆⨉-⨖⨛⨜𝛁𝛛𝛻𝜕𝜵𝝏𝝯𝞉𝞩𝟃ⁱ-⁾₁-₎∠-∢⦛-⦯℘℮゛-゜𝟎-𝟡]|[^\\P{So}←-⇿])(?:[[:word:]_!\\p{Lu}\\p{Ll}\\p{Lt}\\p{Lm}\\p{Lo}\\p{Nl}\\p{Sc}⅀-⅄∿⊾⊿⊤⊥∂∅-∇∎∏∐∑∞∟∫-∳⋀-⋃◸-◿♯⟘⟙⟀⟁⦰-⦴⨀-⨆⨉-⨖⨛⨜𝛁𝛛𝛻𝜕𝜵𝝏𝝯𝞉𝞩𝟃ⁱ-⁾₁-₎∠-∢⦛-⦯℘℮゛-゜𝟎-𝟡]|[^\\P{Mn}\u0001-¡]|[^\\P{Mc}\u0001-¡]|[^\\P{Nd}\u0001-¡]|[^\\P{Pc}\u0001-¡]|[^\\P{Sk}\u0001-¡]|[^\\P{Me}\u0001-¡]|[^\\P{No}\u0001-¡]|[′-‷⁗]|[^\\P{So}←-⇿])*)(\\s*(<:)\\s*(?:[[:alpha:]_\\p{Lu}\\p{Ll}\\p{Lt}\\p{Lm}\\p{Lo}\\p{Nl}\\p{Sc}⅀-⅄∿⊾⊿⊤⊥∂∅-∇∎∏∐∑∞∟∫-∳⋀-⋃◸-◿♯⟘⟙⟀⟁⦰-⦴⨀-⨆⨉-⨖⨛⨜𝛁𝛛𝛻𝜕𝜵𝝏𝝯𝞉𝞩𝟃ⁱ-⁾₁-₎∠-∢⦛-⦯℘℮゛-゜𝟎-𝟡]|[^\\P{So}←-⇿])(?:[[:word:]_!\\p{Lu}\\p{Ll}\\p{Lt}\\p{Lm}\\p{Lo}\\p{Nl}\\p{Sc}⅀-⅄∿⊾⊿⊤⊥∂∅-∇∎∏∐∑∞∟∫-∳⋀-⋃◸-◿♯⟘⟙⟀⟁⦰-⦴⨀-⨆⨉-⨖⨛⨜𝛁𝛛𝛻𝜕𝜵𝝏𝝯𝞉𝞩𝟃ⁱ-⁾₁-₎∠-∢⦛-⦯℘℮゛-゜𝟎-𝟡]|[^\\P{Mn}\u0001-¡]|[^\\P{Mc}\u0001-¡]|[^\\P{Nd}\u0001-¡]|[^\\P{Pc}\u0001-¡]|[^\\P{Sk}\u0001-¡]|[^\\P{Me}\u0001-¡]|[^\\P{No}\u0001-¡]|[′-‷⁗]|[^\\P{So}←-⇿])*(?:{.*})?)?", - "name": "meta.type.julia" - } - ] - } - }, - "scopeName": "source.julia" -} diff --git a/extensions/julia-web/syntaxes/juliacodeblock.json b/extensions/julia-web/syntaxes/juliacodeblock.json deleted file mode 100644 index 075897044..000000000 --- a/extensions/julia-web/syntaxes/juliacodeblock.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "fileTypes": [], - "injectionSelector": "L:text.html.markdown", - "patterns": [ - { - "include": "#julia-code-block" - } - ], - "repository": { - "julia-code-block": { - "begin": "(^|\\G)(\\s*)(\\`{3,}|~{3,})\\s*(?i:(julia|jl(doctest)?))((;|\\s)([^`~]*))?$", - "name": "markup.fenced_code.block.markdown", - "end": "(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$", - "beginCaptures": { - "3": { - "name": "punctuation.definition.markdown" - }, - "4": { - "name": "fenced_code.block.language" - }, - "7": { - "name": "punctuation.definition.markdown" - }, - "8": { - "name": "fenced_code.block.language.attributes" - } - }, - "endCaptures": { - "3": { - "name": "punctuation.definition.markdown" - } - }, - "patterns": [ - { - "begin": "(^|\\G)(\\s*)(.*)", - "while": "(^|\\G)(?!\\s*([`~]{3,})\\s*$)", - "contentName": "meta.embedded.block.julia", - "patterns": [ - { - "include": "source.julia" - } - ] - } - ] - } - }, - "scopeName": "markdown.julia.codeblock" -} diff --git a/extensions/julia-web/syntaxes/juliamarkdown.json b/extensions/julia-web/syntaxes/juliamarkdown.json deleted file mode 100644 index 39ea93055..000000000 --- a/extensions/julia-web/syntaxes/juliamarkdown.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "julia Markdown", - "scopeName": "text.html.markdown.julia", - "fileTypes": ["jmd"], - "patterns": [ - { - "include": "markdown.julia.codeblock" - }, - { - "include": "text.html.markdown" - } - ] -} diff --git a/extensions/julia-web/syntaxes/update_syntax.jl b/extensions/julia-web/syntaxes/update_syntax.jl deleted file mode 100755 index f2839e700..000000000 --- a/extensions/julia-web/syntaxes/update_syntax.jl +++ /dev/null @@ -1,26 +0,0 @@ -grammar_file_path = joinpath(@__DIR__, "../syntaxes/julia.json") - -# convert cson to json -json = Ref(read(grammar_file_path, String)) - -# apply substitutions -sub!(pr) = json.x = replace(json.x, pr; count = typemax(Int)) - -sub!(r"(\"include\"\s*:\s*\")source\.gfm(\")" => s"\1text.html.markdown.julia\2") - -# Skip over-zealous top-level production in `source.cpp`. See offending pattern here: -# https://github.com/microsoft/vscode/blob/c3fe2d8acde04e579880413ae4622a1f551efdcc/extensions/cpp/syntaxes/cpp.tmLanguage.json#L745 -sub!(r"(\"include\"\s*:\s*\"source\.cpp)(\")" => s"\1#root_context\2") - -# Choose content names consistent with the vscode conventions for embedded code. Cf.: -# https://code.visualstudio.com/api/language-extensions/syntax-highlight-guide#embedded-languages -sub!(r"(\"contentName\"\s*:\s*\")source\.cpp(\")" => s"\1meta.embedded.inline.cpp\2") -sub!(r"(\"contentName\"\s*:\s*\")source\.gfm(\")" => s"\1meta.embedded.inline.markdown\2") -sub!(r"(\"contentName\"\s*:\s*\")source\.js(\")" => s"\1meta.embedded.inline.javascript\2") -sub!(r"(\"contentName\"\s*:\s*\")source\.r(\")" => s"\1meta.embedded.inline.r\2") -sub!(r"(\"contentName\"\s*:\s*\")source\.python(\")" => s"\1meta.embedded.inline.python\2") - -# print out the transformed syntax -open(grammar_file_path, "w") do f - println(f, json.x) -end diff --git a/extensions/svelte-web/syntaxes/svelte.tmLanguage.json b/extensions/svelte-web/syntaxes/svelte.tmLanguage.json index cad5cf059..a77e9c52c 100644 --- a/extensions/svelte-web/syntaxes/svelte.tmLanguage.json +++ b/extensions/svelte-web/syntaxes/svelte.tmLanguage.json @@ -1,7 +1,9 @@ { "name": "Svelte Component", "scopeName": "source.svelte", - "fileTypes": ["svelte"], + "fileTypes": [ + "svelte" + ], "uuid": "7582b62f-51d9-4a84-8c8d-fc189530faf6", "injections": { "L:meta.script.svelte meta.lang.javascript - (meta source)": { diff --git a/package.json b/package.json index f33b90f54..571200832 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "lib": "lib" }, "devDependencies": { - "@github1s/vscode-web": "0.0.3", + "@github1s/vscode-web": "0.1.2", "@typescript-eslint/eslint-plugin": "^4.15.0", "@typescript-eslint/parser": "^4.15.0", "chokidar": "^3.5.1", @@ -23,8 +23,8 @@ "prettier": "^2.2.1", "serve-handler": "^6.1.3", "start-server-and-test": "^1.12.0", - "yalc": "^1.0.0-pre.50", - "typescript": "^4.1.3" + "typescript": "^4.1.3", + "yalc": "^1.0.0-pre.50" }, "scripts": { "preinstall": "./scripts/pre-install.sh", diff --git a/resources/images/gitpod-notification.png b/resources/images/gitpod-notification.png deleted file mode 100644 index 0ae8123821e999c173a368b4d6cbff3a4c86237b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 241002 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%0D7ld&_7D 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 - You need to enable JavaScript to run this app. }; - + + GitHub1s @@ -165,9 +162,6 @@

You need to enable JavaScript to run this app.

- + + GitHub1s @@ -165,9 +162,6 @@

You need to enable JavaScript to run this app.

- GitHub1s @@ -77,4 +76,5 @@

You need to enable JavaScript to run this app.

require(['vs/code/browser/workbench/workbench'], function () {}); }); + diff --git a/resources/index-hash.html b/resources/index-hash.html index c1de96c39..a0bfa01d0 100644 --- a/resources/index-hash.html +++ b/resources/index-hash.html @@ -16,7 +16,6 @@ - GitHub1s - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + From 4693711baedc65fef9e8690cf3d16e65f8dac882 Mon Sep 17 00:00:00 2001 From: netcon Date: Tue, 8 Jun 2021 10:35:00 +0800 Subject: [PATCH 045/280] feat: support for symbol hover information (#322) --- extensions/github1s/src/helpers/urls.ts | 16 +++ .../src/interfaces/sourcegraph/definition.ts | 4 +- .../src/interfaces/sourcegraph/hover.ts | 77 ++++++++++++ extensions/github1s/src/messages.ts | 3 +- .../github1s/src/providers/hoverProvider.ts | 117 ++++++++++++++++++ extensions/github1s/src/providers/index.ts | 8 ++ 6 files changed, 222 insertions(+), 3 deletions(-) create mode 100644 extensions/github1s/src/helpers/urls.ts create mode 100644 extensions/github1s/src/interfaces/sourcegraph/hover.ts create mode 100644 extensions/github1s/src/providers/hoverProvider.ts diff --git a/extensions/github1s/src/helpers/urls.ts b/extensions/github1s/src/helpers/urls.ts new file mode 100644 index 000000000..4bfd19d28 --- /dev/null +++ b/extensions/github1s/src/helpers/urls.ts @@ -0,0 +1,16 @@ +/** + * @file extension url helpers + * @author netcon + */ + +export const getSourcegraphUrl = ( + owner: string, + repo: string, + ref: string, + path: string, + line: number, + character: number +): string => { + const repoUrl = `https://sourcegraph.com/github.com/${owner}/${repo}@${ref}`; + return `${repoUrl}/-/blob${path}#L${line + 1}:${character + 1}`; +}; diff --git a/extensions/github1s/src/interfaces/sourcegraph/definition.ts b/extensions/github1s/src/interfaces/sourcegraph/definition.ts index 8fb9a136b..c36f0c6a7 100644 --- a/extensions/github1s/src/interfaces/sourcegraph/definition.ts +++ b/extensions/github1s/src/interfaces/sourcegraph/definition.ts @@ -146,8 +146,8 @@ const searchDefinitionsQuery = gql` } `; -// get symbol definitions base search -const getSearchDefinitions = async ( +// get symbol definitions base on search +export const getSearchDefinitions = async ( owner: string, repo: string, ref: string, diff --git a/extensions/github1s/src/interfaces/sourcegraph/hover.ts b/extensions/github1s/src/interfaces/sourcegraph/hover.ts new file mode 100644 index 000000000..d106308a8 --- /dev/null +++ b/extensions/github1s/src/interfaces/sourcegraph/hover.ts @@ -0,0 +1,77 @@ +/** + * @file Sourcegraph hover api + * @author netcon + */ + +import { gql } from '@apollo/client/core'; +import { sourcegraphClient } from './common'; + +export interface SymbolHover { + precise: boolean; + markdown: string; +} + +const LSIFHoverQuery = gql` + query( + $repository: String! + $ref: String! + $path: String! + $line: Int! + $character: Int! + ) { + repository(name: $repository) { + commit(rev: $ref) { + blob(path: $path) { + lsif { + hover(line: $line, character: $character) { + markdown { + text + } + } + } + } + } + } + } +`; + +// find Hover with Sourcegraph LSIF +// https://docs.sourcegraph.com/code_intelligence/explanations/precise_code_intelligence +const getLSIFHover = async ( + owner: string, + repo: string, + ref: string, + path: string, + line: number, + character: number +): Promise => { + const response = await sourcegraphClient.query({ + query: LSIFHoverQuery, + variables: { + repository: `github.com/${owner}/${repo}`, + ref, + path: path.slice(1), + line, + character, + }, + }); + const markdown = + response?.data?.repository?.commit?.blob?.lsif?.hover?.markdown?.text; + + if (!markdown) { + return null; + } + + return { precise: true, markdown }; +}; + +export const getSymbolHover = ( + owner: string, + repo: string, + ref: string, + path: string, + line: number, + character: number +): Promise => { + return getLSIFHover(owner, repo, ref, path, line, character); +}; diff --git a/extensions/github1s/src/messages.ts b/extensions/github1s/src/messages.ts index 1c205a635..eddb558b6 100644 --- a/extensions/github1s/src/messages.ts +++ b/extensions/github1s/src/messages.ts @@ -4,6 +4,7 @@ import * as vscode from 'vscode'; import router from '@/router'; +import { getSourcegraphUrl } from '@/helpers/urls'; export const showSourcegraphSearchMessage = (() => { let alreadyShown = false; @@ -35,7 +36,7 @@ export const showSourcegraphSymbolMessage = (() => { return; } alreadyShown = true; - const url = `https://sourcegraph.com/github.com/${owner}/${repo}@${ref}/-/blob${path}#L${line}:${character}`; + const url = getSourcegraphUrl(owner, repo, ref, path, line, character); vscode.window.showInformationMessage( `The results is provided by [Sourcegraph](${url})` ); diff --git a/extensions/github1s/src/providers/hoverProvider.ts b/extensions/github1s/src/providers/hoverProvider.ts new file mode 100644 index 000000000..2f37bbd4f --- /dev/null +++ b/extensions/github1s/src/providers/hoverProvider.ts @@ -0,0 +1,117 @@ +/** + * @file HoverProvider + * @author netcon + */ + +import * as vscode from 'vscode'; +import router from '@/router'; +import { getSymbolHover, SymbolHover } from '@/interfaces/sourcegraph/hover'; +import { getSearchDefinitions } from '@/interfaces/sourcegraph/definition'; +import { getSourcegraphUrl } from '@/helpers/urls'; + +const getSemanticMarkdownSuffix = (sourcegraphUrl: String) => ` + +--- + +[SEMANTIC](https://docs.sourcegraph.com/code_intelligence/explanations/precise_code_intelligence) result provide by [Sourcegraph](${sourcegraphUrl}) +`; + +const getSearchBasedMarkdownSuffix = (sourcegraphUrl: String) => ` + +--- + +[SEARCH-BASED](https://docs.sourcegraph.com/code_intelligence/explanations/precise_code_intelligence) result provide by [Sourcegraph](${sourcegraphUrl}) +`; + +export class GitHub1sHoverProvider implements vscode.HoverProvider { + static scheme = 'github1s'; + + async getSearchBasedHover( + document: vscode.TextDocument, + symbol: string + ): Promise { + const authority = document.uri.authority || (await router.getAuthority()); + const [owner, repo, ref] = authority.split('+').filter(Boolean); + const definitions = await getSearchDefinitions(owner, repo, ref, symbol); + + if (!definitions.length) { + return null; + } + + // use the information of first definition as hover context + const target = definitions[0]; + const isSameRepo = target.owner === owner && target.repo === repo; + // if the definition target and the searched symbol is in the same + // repository, just replace the `document.uri.path` with targetPath + const targetFileUri = isSameRepo + ? document.uri.with({ path: target.path }) + : vscode.Uri.parse('').with({ + scheme: GitHub1sHoverProvider.scheme, + authority: `${target.owner}+${target.repo}+${target.ref}`, + path: target.path, + }); + // open corresponding file with target + const textDocument = await vscode.workspace.openTextDocument(targetFileUri); + // get the content in `[range.start.line - 2, range.end.line + 2]` lines + const startPosition = new vscode.Position( + Math.max(0, target.range.start.line - 2), + 0 + ); + const endPosition = textDocument.lineAt( + Math.min(textDocument.lineCount - 1, target.range.end.line + 2) + ).range.end; + const codeText = textDocument.getText( + new vscode.Range(startPosition, endPosition) + ); + + return { + precise: false, + markdown: `\`\`\`${textDocument.languageId}\n${codeText}\n\`\`\``, + }; + } + + async provideHover( + document: vscode.TextDocument, + position: vscode.Position, + _token: vscode.CancellationToken + ): Promise { + const symbolRange = document.getWordRangeAtPosition(position); + const symbol = symbolRange ? document.getText(symbolRange) : ''; + + if (!symbol) { + return; + } + + const authority = document.uri.authority || (await router.getAuthority()); + const [owner, repo, ref] = authority.split('+').filter(Boolean); + const path = document.uri.path; + const { line, character } = position; + + type ParamsType = [string, string, string, string, number, number]; + const requestParams: ParamsType = [owner, repo, ref, path, line, character]; + // get the sourcegraph url for current symbol + const sourcegraphUrl = getSourcegraphUrl(...requestParams); + // get the hover result based on sourcegraph lsif + const preciseHoverPromise = getSymbolHover(...requestParams); + // get the hover result based on search + const searchBasedHoverPromise = this.getSearchBasedHover(document, symbol); + + const symbolHover = await preciseHoverPromise.then((symbolHover) => { + if (symbolHover) { + return symbolHover; + } + // fallback to search based result if we can not get precise result + return searchBasedHoverPromise; + }); + + if (!symbolHover) { + return null; + } + + const suffixMarkdown = symbolHover.precise + ? getSemanticMarkdownSuffix(sourcegraphUrl) + : getSearchBasedMarkdownSuffix(sourcegraphUrl); + + return new vscode.Hover(symbolHover.markdown + suffixMarkdown); + } +} diff --git a/extensions/github1s/src/providers/index.ts b/extensions/github1s/src/providers/index.ts index 486626eca..5c04fa9f6 100644 --- a/extensions/github1s/src/providers/index.ts +++ b/extensions/github1s/src/providers/index.ts @@ -12,6 +12,7 @@ import { GitHub1sSubmoduleDecorationProvider } from './submoduleDecorationProvid import { GitHub1sChangedFileDecorationProvider } from './changedFileDecorationProvider'; import { GitHub1sSourceControlDecorationProvider } from './sourceControlDecorationProvider'; import { GitHub1sDefinitionProvider } from './definitionProvider'; +import { GitHub1sHoverProvider } from './hoverProvider'; export const fileSystemProvider = new GitHub1sFileSystemProvider(); export const fileSearchProvider = new GitHub1sFileSearchProvider( @@ -24,6 +25,7 @@ export const submoduleDecorationProvider = new GitHub1sSubmoduleDecorationProvid export const changedFileDecorationProvider = new GitHub1sChangedFileDecorationProvider(); export const sourceControlDecorationProvider = new GitHub1sSourceControlDecorationProvider(); export const definitionProvider = new GitHub1sDefinitionProvider(); +export const hoverProvider = new GitHub1sHoverProvider(); export const EMPTY_FILE_SCHEME = 'github1s-empty-file'; export const emptyFileUri = vscode.Uri.parse('').with({ @@ -62,6 +64,12 @@ export const registerVSCodeProviders = () => { }, definitionProvider ), + vscode.languages.registerHoverProvider( + { + scheme: GitHub1sHoverProvider.scheme, + }, + hoverProvider + ), // provider a readonly empty file for diff vscode.workspace.registerTextDocumentContentProvider(EMPTY_FILE_SCHEME, { From 5b5814ddc986b402622732b429df4cecbb3f392d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 10 Jun 2021 10:55:22 +0800 Subject: [PATCH 046/280] chore(deps): bump glob-parent from 5.1.1 to 5.1.2 (#323) Bumps [glob-parent](https://github.com/gulpjs/glob-parent) from 5.1.1 to 5.1.2. - [Release notes](https://github.com/gulpjs/glob-parent/releases) - [Changelog](https://github.com/gulpjs/glob-parent/blob/main/CHANGELOG.md) - [Commits](https://github.com/gulpjs/glob-parent/compare/v5.1.1...v5.1.2) --- updated-dependencies: - dependency-name: glob-parent dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 45d78f632..f11e33b8e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -938,9 +938,9 @@ get-stream@^5.0.0: pump "^3.0.0" glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@~5.1.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" - integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" From bfce221f1bedafc93499fd710a673a2375f2cd72 Mon Sep 17 00:00:00 2001 From: netcon Date: Thu, 10 Jun 2021 21:17:48 +0800 Subject: [PATCH 047/280] feat: support line anchors in url (#326) --- extensions/github1s/src/extension.ts | 42 +++++++++++----- extensions/github1s/src/helpers/func.ts | 11 +++++ extensions/github1s/src/listeners/vscode.ts | 48 +++++++++++++++++-- extensions/github1s/src/router/parser/blob.ts | 18 ++++++- extensions/github1s/src/router/types.ts | 5 ++ 5 files changed, 109 insertions(+), 15 deletions(-) diff --git a/extensions/github1s/src/extension.ts b/extensions/github1s/src/extension.ts index 282e48983..72de61822 100644 --- a/extensions/github1s/src/extension.ts +++ b/extensions/github1s/src/extension.ts @@ -17,7 +17,7 @@ import { registerEventListeners } from '@/listeners'; import { PageType } from './router/types'; export async function activate(context: vscode.ExtensionContext) { - const browserUrl = (await await vscode.commands.executeCommand( + const browserUrl = (await vscode.commands.executeCommand( 'github1s.vscode.get-browser-url' )) as string; @@ -40,17 +40,37 @@ export async function activate(context: vscode.ExtensionContext) { // sponsors in Status Bar showSponsors(); - await showGitpod(); + showGitpod(); - // open corresponding editor if there is a filePath specified in browser url - const { filePath, pageType } = await router.getState(); - if (filePath && [PageType.TREE, PageType.BLOB].includes(pageType)) { + // initialize the VSCode's state + initialVSCodeState(); +} + +// initialize the VSCode's state according to the router url +const initialVSCodeState = async () => { + const routerState = await router.getState(); + const { filePath, pageType } = routerState; + const scheme = GitHub1sFileSystemProvider.scheme; + + if (filePath && pageType === PageType.TREE) { vscode.commands.executeCommand( - pageType === PageType.TREE ? 'revealInExplorer' : 'vscode.open', - vscode.Uri.parse('').with({ - scheme: GitHub1sFileSystemProvider.scheme, - path: filePath, - }) + 'revealInExplorer', + vscode.Uri.parse('').with({ scheme, path: filePath }) + ); + } else if (filePath && pageType === PageType.BLOB) { + const { startLineNumber, endLineNumber } = routerState; + const start = new vscode.Position(startLineNumber - 1, 0); + const end = new vscode.Position(endLineNumber - 1, 999999); + const documentShowOptions: vscode.TextDocumentShowOptions = startLineNumber + ? { selection: new vscode.Range(start, end) } + : {}; + + // TODO: the selection of the opening file may be cleared + // when editor try to restore previous state in the same file + vscode.commands.executeCommand( + 'vscode.open', + vscode.Uri.parse('').with({ scheme, path: filePath }), + documentShowOptions ); } else if (pageType === PageType.PULL_LIST) { vscode.commands.executeCommand('github1s.views.pull-request-list.focus'); @@ -59,4 +79,4 @@ export async function activate(context: vscode.ExtensionContext) { } else if ([PageType.PULL, PageType.COMMIT].includes(pageType)) { vscode.commands.executeCommand('workbench.scm.focus'); } -} +}; diff --git a/extensions/github1s/src/helpers/func.ts b/extensions/github1s/src/helpers/func.ts index 566a4a9f7..d60eeda2e 100644 --- a/extensions/github1s/src/helpers/func.ts +++ b/extensions/github1s/src/helpers/func.ts @@ -42,6 +42,17 @@ export const throttle = any>( }; }; +export const debounce = any>( + func: T, + wait: number +) => { + let timer = null; + return function (...args: Parameters): void { + timer && clearTimeout(timer); + timer = setTimeout(() => func.call(this, ...args), timer); + }; +}; + // debounce an async func. once an async func canceled, it throws a exception export const debounceAsyncFunc = Promise>( func: T, diff --git a/extensions/github1s/src/listeners/vscode.ts b/extensions/github1s/src/listeners/vscode.ts index 1e52f48a3..a38841e57 100644 --- a/extensions/github1s/src/listeners/vscode.ts +++ b/extensions/github1s/src/listeners/vscode.ts @@ -9,6 +9,7 @@ import { PageType } from '@/router/types'; import { setVSCodeContext } from '@/helpers/vscode'; import { getChangedFileFromSourceControl } from '@/commands/editor'; import { GitHub1sFileSystemProvider } from '@/providers/fileSystemProvider'; +import { debounce } from '@/helpers/func'; const handleRouterOnActiveEditorChange = async ( editor: vscode.TextEditor | undefined @@ -33,12 +34,12 @@ const handleRouterOnActiveEditorChange = async ( ref.toUpperCase() === 'HEAD' ? `/${owner}/${repo}` : `/${owner}/${repo}/tree/${ref}`; - router.history.replace(browserPath); + router.history.replace({ pathname: browserPath, hash: '' }); return; } const browserPath = `/${owner}/${repo}/blob/${ref}${activeFileUri.path}`; - router.history.replace(browserPath); + router.history.replace({ pathname: browserPath, hash: '' }); }; // if the `Open Changes` Button should show in editor title @@ -60,10 +61,51 @@ const handleGutterBlameOpeningContextOnActiveEditorChange = async () => { return setVSCodeContext('github1s.context.gutterBlameOpening', false); }; +// get the line anchor hash (`#L27-L39`) from the editor.selection +const getAnchorHashFromSelection = (selection: vscode.Selection) => { + const { start, end } = selection; + + // the cursor move to somewhere but nothing is selected + if (start.line === end.line && start.character === end.character) { + return ''; + } + if (start.line === end.line) { + return `#L${start.line + 1}`; + } + return `#L${start.line + 1}-L${end.line + 1}`; +}; + +// add the line number anchor when user selection lines in a editor +const handleRouterOnTextEditorSelectionChange = async ( + editor: vscode.TextEditor +) => { + const { owner, repo, ref, pageType } = await router.getState(); + + // only add the line number anchor when pageType is PageType.BLOB + if (pageType !== PageType.BLOB || !editor.selection) { + return; + } + + const activeFileUri = editor?.document.uri; + const anchorText = getAnchorHashFromSelection(editor.selection); + const browserPath = `/${owner}/${repo}/blob/${ref}${activeFileUri.path}`; + + router.history.replace({ pathname: browserPath, hash: anchorText }); +}; + export const registerVSCodeEventListeners = () => { - vscode.window.onDidChangeActiveTextEditor(async (editor) => { + vscode.window.onDidChangeActiveTextEditor((editor) => { handleRouterOnActiveEditorChange(editor); handleOpenChangesContextOnActiveEditorChange(editor); handleGutterBlameOpeningContextOnActiveEditorChange(); }); + + // debounce to update the browser url + const debouncedSelectionChangeRouterHandler = debounce( + handleRouterOnTextEditorSelectionChange, + 100 + ); + vscode.window.onDidChangeTextEditorSelection((event) => { + debouncedSelectionChangeRouterHandler(event.textEditor); + }); }; diff --git a/extensions/github1s/src/router/parser/blob.ts b/extensions/github1s/src/router/parser/blob.ts index 7b589d300..28d150e05 100644 --- a/extensions/github1s/src/router/parser/blob.ts +++ b/extensions/github1s/src/router/parser/blob.ts @@ -3,11 +3,27 @@ * @author netcon */ +import { parsePath } from 'history'; import { PageType, RouterState } from '../types'; import { parseTreeUrl } from './tree'; export const parseBlobUrl = async (path: string): Promise => { const routerState = await parseTreeUrl(path); + const { hash: routerHash } = parsePath(path); - return { ...routerState, pageType: PageType.BLOB }; + if (!routerHash) { + return { ...routerState, pageType: PageType.BLOB }; + } + + // get selected line number range from path which looks like: + // `/conwnet/github1s/blob/HEAD/package.json#L10-L20` + const matches = routerHash.match(/^#L(\d+)(?:-L(\d+))?/); + const [_, startLineNumber = '0', endLineNumber] = matches ? matches : []; + + return { + ...routerState, + pageType: PageType.BLOB, + startLineNumber: parseInt(startLineNumber, 10), + endLineNumber: parseInt(endLineNumber || startLineNumber, 10), + }; }; diff --git a/extensions/github1s/src/router/types.ts b/extensions/github1s/src/router/types.ts index 3e1fb557b..1a93ad127 100644 --- a/extensions/github1s/src/router/types.ts +++ b/extensions/github1s/src/router/types.ts @@ -52,6 +52,11 @@ export interface RouterState { // current file path filePath?: string; + // the one-based line numbers specified which lines should focus + // after opening the file, only exists when pageType is `BLOB` + startLineNumber?: number; + endLineNumber?: number; + // only exists when the page type is PULL pullNumber?: number; From 0d3aba61ccc2636a88113f01282cf673074e9e2e Mon Sep 17 00:00:00 2001 From: netcon Date: Fri, 11 Jun 2021 00:20:34 +0800 Subject: [PATCH 048/280] Feature/compact opera (#325) * fix: mobile-detect can not work on opera webworker * chore: upgrade vscode-web version in npm --- package.json | 2 +- vscode-web-github1s/package.json | 2 +- vscode-web-github1s/src/vs/base/common/platform.ts | 4 +++- yarn.lock | 8 ++++---- 4 files changed, 9 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index 87c9ccebf..d2573bf66 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "lib": "lib" }, "devDependencies": { - "@github1s/vscode-web": "0.1.8", + "@github1s/vscode-web": "0.1.9", "@typescript-eslint/eslint-plugin": "^4.15.0", "@typescript-eslint/parser": "^4.15.0", "chokidar": "^3.5.1", diff --git a/vscode-web-github1s/package.json b/vscode-web-github1s/package.json index 4a3b604b9..8f34552aa 100644 --- a/vscode-web-github1s/package.json +++ b/vscode-web-github1s/package.json @@ -1,6 +1,6 @@ { "name": "@github1s/vscode-web", - "version": "0.1.8", + "version": "0.1.9", "description": "VS Code web for GitHub1s", "author": "github1s", "license": "MIT", diff --git a/vscode-web-github1s/src/vs/base/common/platform.ts b/vscode-web-github1s/src/vs/base/common/platform.ts index b2f83e9b0..9820e719b 100644 --- a/vscode-web-github1s/src/vs/base/common/platform.ts +++ b/vscode-web-github1s/src/vs/base/common/platform.ts @@ -104,9 +104,11 @@ if (typeof navigator === 'object' && !isElectronRenderer) { _isLinux = _userAgent.indexOf('Linux') >= 0; _isWeb = true; // below codes are changed by github1s + // `window` may can not be accessed in webworker (for example opera) + const _userAgentStr: string = (typeof navigator !== 'undefined' ? (navigator.userAgent || (navigator as any).vendor) : undefined) || (typeof window !== 'undefined' ? (window as any).opera : undefined); // this code is from http://detectmobilebrowsers.com/ // eslint-disable-next-line - _isMobile = (function (a) { return /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0, 4)) })(navigator.userAgent || (navigator as any).vendor || (window as any).opera); + _isMobile = (function (a) { return /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0, 4)) })(_userAgentStr || ''); // above codes are changed by github1s _locale = navigator.language; _language = _locale; diff --git a/yarn.lock b/yarn.lock index f11e33b8e..7be0737c5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -39,10 +39,10 @@ minimatch "^3.0.4" strip-json-comments "^3.1.1" -"@github1s/vscode-web@0.1.8": - version "0.1.8" - resolved "https://registry.yarnpkg.com/@github1s/vscode-web/-/vscode-web-0.1.8.tgz#85305b867a86c8308e9200d0ac2fa8403b66377e" - integrity sha512-dOzlbpUL+pLqqb6DtH7WwVmlRqzSpY0NXOxbJCg5jHu8XsrLsV1cIRDcnmLk16EsNmeU2egtgPGZsYPhwL2feg== +"@github1s/vscode-web@0.1.9": + version "0.1.9" + resolved "https://registry.yarnpkg.com/@github1s/vscode-web/-/vscode-web-0.1.9.tgz#b37b9a3d8af64c1e49aad1b11023debf650eba27" + integrity sha512-ZtHcEAaLHqw5IHuLSVfOGs884KehKwPdaTfNy/5F1xrgN2yVDXZ2fQKsXn+ukau6Y4iejTkvxzU1O4bPTQGsdg== dependencies: iconv-lite-umd "0.6.8" jschardet "2.2.1" From a1297b076e625fd0d751a1e678149d3d9d920ec4 Mon Sep 17 00:00:00 2001 From: netcon Date: Mon, 14 Jun 2021 02:18:35 +0800 Subject: [PATCH 049/280] fix: can not found typescript basic symbol definitions (#328) * fix: can not found typescript basic symbol definitions * chore: upgrade vscode-web version in npm --- .prettierignore | 3 +- package.json | 2 +- .../src/typescriptServiceClient.ts | 1050 +++++++++++++++++ vscode-web-github1s/package.json | 2 +- vscode-web-github1s/scripts/sync-code.sh | 1 + yarn.lock | 8 +- 6 files changed, 1059 insertions(+), 7 deletions(-) create mode 100644 vscode-web-github1s/extensions/typescript-language-features/src/typescriptServiceClient.ts diff --git a/.prettierignore b/.prettierignore index 4fbb5a0a7..e7d0610c2 100644 --- a/.prettierignore +++ b/.prettierignore @@ -2,4 +2,5 @@ lib dist out node_modules -**/src/vs/** +vscode-web-github1s/src/vs +vscode-web-github1s/extensions diff --git a/package.json b/package.json index d2573bf66..e7d538cc2 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "lib": "lib" }, "devDependencies": { - "@github1s/vscode-web": "0.1.9", + "@github1s/vscode-web": "0.1.10", "@typescript-eslint/eslint-plugin": "^4.15.0", "@typescript-eslint/parser": "^4.15.0", "chokidar": "^3.5.1", diff --git a/vscode-web-github1s/extensions/typescript-language-features/src/typescriptServiceClient.ts b/vscode-web-github1s/extensions/typescript-language-features/src/typescriptServiceClient.ts new file mode 100644 index 000000000..c28ec016f --- /dev/null +++ b/vscode-web-github1s/extensions/typescript-language-features/src/typescriptServiceClient.ts @@ -0,0 +1,1050 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import * as path from 'path'; +import * as vscode from 'vscode'; +import * as nls from 'vscode-nls'; +import { DiagnosticKind, DiagnosticsManager } from './languageFeatures/diagnostics'; +import * as Proto from './protocol'; +import { EventName } from './protocol.const'; +import BufferSyncSupport from './tsServer/bufferSyncSupport'; +import { OngoingRequestCancellerFactory } from './tsServer/cancellation'; +import { ILogDirectoryProvider } from './tsServer/logDirectoryProvider'; +import { ITypeScriptServer, TsServerProcessFactory } from './tsServer/server'; +import { TypeScriptServerError } from './tsServer/serverError'; +import { TypeScriptServerSpawner } from './tsServer/spawner'; +import { TypeScriptVersionManager } from './tsServer/versionManager'; +import { ITypeScriptVersionProvider, TypeScriptVersion } from './tsServer/versionProvider'; +import { ClientCapabilities, ClientCapability, ExecConfig, ITypeScriptServiceClient, ServerResponse, TypeScriptRequests } from './typescriptService'; +import API from './utils/api'; +import { TsServerLogLevel, TypeScriptServiceConfiguration } from './utils/configuration'; +import { Disposable } from './utils/dispose'; +import * as fileSchemes from './utils/fileSchemes'; +import { Logger } from './utils/logger'; +import { isWeb } from './utils/platform'; +import { TypeScriptPluginPathsProvider } from './utils/pluginPathsProvider'; +import { PluginManager } from './utils/plugins'; +import { TelemetryProperties, TelemetryReporter, VSCodeTelemetryReporter } from './utils/telemetry'; +import Tracer from './utils/tracer'; +import { inferredProjectCompilerOptions, ProjectType } from './utils/tsconfig'; + +const localize = nls.loadMessageBundle(); + +export interface TsDiagnostics { + readonly kind: DiagnosticKind; + readonly resource: vscode.Uri; + readonly diagnostics: Proto.Diagnostic[]; +} + +interface ToCancelOnResourceChanged { + readonly resource: vscode.Uri; + cancel(): void; +} + +namespace ServerState { + export const enum Type { + None, + Running, + Errored + } + + export const None = { type: Type.None } as const; + + export class Running { + readonly type = Type.Running; + + constructor( + public readonly server: ITypeScriptServer, + + /** + * API version obtained from the version picker after checking the corresponding path exists. + */ + public readonly apiVersion: API, + + /** + * Version reported by currently-running tsserver. + */ + public tsserverVersion: string | undefined, + public languageServiceEnabled: boolean, + ) { } + + public readonly toCancelOnResourceChange = new Set(); + + updateTsserverVersion(tsserverVersion: string) { + this.tsserverVersion = tsserverVersion; + } + + updateLanguageServiceEnabled(enabled: boolean) { + this.languageServiceEnabled = enabled; + } + } + + export class Errored { + readonly type = Type.Errored; + constructor( + public readonly error: Error, + public readonly tsServerLogFile: string | undefined, + ) { } + } + + export type State = typeof None | Running | Errored; +} + +export default class TypeScriptServiceClient extends Disposable implements ITypeScriptServiceClient { + + private readonly pathSeparator: string; + private readonly inMemoryResourcePrefix = '^'; + + private readonly workspaceState: vscode.Memento; + + private _onReady?: { promise: Promise; resolve: () => void; reject: () => void; }; + private _configuration: TypeScriptServiceConfiguration; + private pluginPathsProvider: TypeScriptPluginPathsProvider; + private readonly _versionManager: TypeScriptVersionManager; + + private readonly logger = new Logger(); + private readonly tracer = new Tracer(this.logger); + + private readonly typescriptServerSpawner: TypeScriptServerSpawner; + private serverState: ServerState.State = ServerState.None; + private lastStart: number; + private numberRestarts: number; + private _isPromptingAfterCrash = false; + private isRestarting: boolean = false; + private hasServerFatallyCrashedTooManyTimes = false; + private readonly loadingIndicator = new ServerInitializingIndicator(); + + public readonly telemetryReporter: TelemetryReporter; + public readonly bufferSyncSupport: BufferSyncSupport; + public readonly diagnosticsManager: DiagnosticsManager; + public readonly pluginManager: PluginManager; + + private readonly logDirectoryProvider: ILogDirectoryProvider; + private readonly cancellerFactory: OngoingRequestCancellerFactory; + private readonly versionProvider: ITypeScriptVersionProvider; + private readonly processFactory: TsServerProcessFactory; + + constructor( + private readonly context: vscode.ExtensionContext, + onCaseInsenitiveFileSystem: boolean, + services: { + pluginManager: PluginManager, + logDirectoryProvider: ILogDirectoryProvider, + cancellerFactory: OngoingRequestCancellerFactory, + versionProvider: ITypeScriptVersionProvider, + processFactory: TsServerProcessFactory, + }, + allModeIds: readonly string[] + ) { + super(); + + this.workspaceState = context.workspaceState; + + this.pluginManager = services.pluginManager; + this.logDirectoryProvider = services.logDirectoryProvider; + this.cancellerFactory = services.cancellerFactory; + this.versionProvider = services.versionProvider; + this.processFactory = services.processFactory; + + this.pathSeparator = path.sep; + this.lastStart = Date.now(); + + let resolve: () => void; + let reject: () => void; + const p = new Promise((res, rej) => { + resolve = res; + reject = rej; + }); + this._onReady = { promise: p, resolve: resolve!, reject: reject! }; + + this.numberRestarts = 0; + + this._configuration = TypeScriptServiceConfiguration.loadFromWorkspace(); + this.versionProvider.updateConfiguration(this._configuration); + + this.pluginPathsProvider = new TypeScriptPluginPathsProvider(this._configuration); + this._versionManager = this._register(new TypeScriptVersionManager(this._configuration, this.versionProvider, this.workspaceState)); + this._register(this._versionManager.onDidPickNewVersion(() => { + this.restartTsServer(); + })); + + this.bufferSyncSupport = new BufferSyncSupport(this, allModeIds, onCaseInsenitiveFileSystem); + this.onReady(() => { this.bufferSyncSupport.listen(); }); + + this.diagnosticsManager = new DiagnosticsManager('typescript', onCaseInsenitiveFileSystem); + this.bufferSyncSupport.onDelete(resource => { + this.cancelInflightRequestsForResource(resource); + this.diagnosticsManager.delete(resource); + }, null, this._disposables); + + this.bufferSyncSupport.onWillChange(resource => { + this.cancelInflightRequestsForResource(resource); + }); + + vscode.workspace.onDidChangeConfiguration(() => { + const oldConfiguration = this._configuration; + this._configuration = TypeScriptServiceConfiguration.loadFromWorkspace(); + + this.versionProvider.updateConfiguration(this._configuration); + this._versionManager.updateConfiguration(this._configuration); + this.pluginPathsProvider.updateConfiguration(this._configuration); + this.tracer.updateConfiguration(); + + if (this.serverState.type === ServerState.Type.Running) { + if (!this._configuration.implictProjectConfiguration.isEqualTo(oldConfiguration.implictProjectConfiguration)) { + this.setCompilerOptionsForInferredProjects(this._configuration); + } + + if (!this._configuration.isEqualTo(oldConfiguration)) { + this.restartTsServer(); + } + } + }, this, this._disposables); + + this.telemetryReporter = this._register(new VSCodeTelemetryReporter(() => { + if (this.serverState.type === ServerState.Type.Running) { + if (this.serverState.tsserverVersion) { + return this.serverState.tsserverVersion; + } + } + return this.apiVersion.fullVersionString; + })); + + this.typescriptServerSpawner = new TypeScriptServerSpawner(this.versionProvider, this._versionManager, this.logDirectoryProvider, this.pluginPathsProvider, this.logger, this.telemetryReporter, this.tracer, this.processFactory); + + this._register(this.pluginManager.onDidUpdateConfig(update => { + this.configurePlugin(update.pluginId, update.config); + })); + + this._register(this.pluginManager.onDidChangePlugins(() => { + this.restartTsServer(); + })); + } + + public get capabilities() { + if (isWeb()) { + return new ClientCapabilities( + ClientCapability.Syntax, + ClientCapability.EnhancedSyntax); + } + + if (this.apiVersion.gte(API.v400)) { + return new ClientCapabilities( + ClientCapability.Syntax, + ClientCapability.EnhancedSyntax, + ClientCapability.Semantic); + } + + return new ClientCapabilities( + ClientCapability.Syntax, + ClientCapability.Semantic); + } + + private readonly _onDidChangeCapabilities = this._register(new vscode.EventEmitter()); + readonly onDidChangeCapabilities = this._onDidChangeCapabilities.event; + + private cancelInflightRequestsForResource(resource: vscode.Uri): void { + if (this.serverState.type !== ServerState.Type.Running) { + return; + } + + for (const request of this.serverState.toCancelOnResourceChange) { + if (request.resource.toString() === resource.toString()) { + request.cancel(); + } + } + } + + public get configuration() { + return this._configuration; + } + + public dispose() { + super.dispose(); + + this.bufferSyncSupport.dispose(); + + if (this.serverState.type === ServerState.Type.Running) { + this.serverState.server.kill(); + } + + this.loadingIndicator.reset(); + } + + public restartTsServer(): void { + if (this.serverState.type === ServerState.Type.Running) { + this.info('Killing TS Server'); + this.isRestarting = true; + this.serverState.server.kill(); + } + + this.serverState = this.startService(true); + } + + private readonly _onTsServerStarted = this._register(new vscode.EventEmitter<{ version: TypeScriptVersion, usedApiVersion: API }>()); + public readonly onTsServerStarted = this._onTsServerStarted.event; + + private readonly _onDiagnosticsReceived = this._register(new vscode.EventEmitter()); + public readonly onDiagnosticsReceived = this._onDiagnosticsReceived.event; + + private readonly _onConfigDiagnosticsReceived = this._register(new vscode.EventEmitter()); + public readonly onConfigDiagnosticsReceived = this._onConfigDiagnosticsReceived.event; + + private readonly _onResendModelsRequested = this._register(new vscode.EventEmitter()); + public readonly onResendModelsRequested = this._onResendModelsRequested.event; + + private readonly _onProjectLanguageServiceStateChanged = this._register(new vscode.EventEmitter()); + public readonly onProjectLanguageServiceStateChanged = this._onProjectLanguageServiceStateChanged.event; + + private readonly _onDidBeginInstallTypings = this._register(new vscode.EventEmitter()); + public readonly onDidBeginInstallTypings = this._onDidBeginInstallTypings.event; + + private readonly _onDidEndInstallTypings = this._register(new vscode.EventEmitter()); + public readonly onDidEndInstallTypings = this._onDidEndInstallTypings.event; + + private readonly _onTypesInstallerInitializationFailed = this._register(new vscode.EventEmitter()); + public readonly onTypesInstallerInitializationFailed = this._onTypesInstallerInitializationFailed.event; + + private readonly _onSurveyReady = this._register(new vscode.EventEmitter()); + public readonly onSurveyReady = this._onSurveyReady.event; + + public get apiVersion(): API { + if (this.serverState.type === ServerState.Type.Running) { + return this.serverState.apiVersion; + } + return API.defaultVersion; + } + + public onReady(f: () => void): Promise { + return this._onReady!.promise.then(f); + } + + private info(message: string, data?: any): void { + this.logger.info(message, data); + } + + private error(message: string, data?: any): void { + this.logger.error(message, data); + } + + private logTelemetry(eventName: string, properties?: TelemetryProperties) { + this.telemetryReporter.logTelemetry(eventName, properties); + } + + private service(): ServerState.Running { + if (this.serverState.type === ServerState.Type.Running) { + return this.serverState; + } + if (this.serverState.type === ServerState.Type.Errored) { + throw this.serverState.error; + } + const newState = this.startService(); + if (newState.type === ServerState.Type.Running) { + return newState; + } + throw new Error(`Could not create TS service. Service state:${JSON.stringify(newState)}`); + } + + public ensureServiceStarted() { + if (this.serverState.type !== ServerState.Type.Running) { + this.startService(); + } + } + + private token: number = 0; + private startService(resendModels: boolean = false): ServerState.State { + this.info(`Starting TS Server `); + + if (this.isDisposed) { + this.info(`Not starting server. Disposed `); + return ServerState.None; + } + + if (this.hasServerFatallyCrashedTooManyTimes) { + this.info(`Not starting server. Too many crashes.`); + return ServerState.None; + } + + let version = this._versionManager.currentVersion; + if (!version.isValid) { + vscode.window.showWarningMessage(localize('noServerFound', 'The path {0} doesn\'t point to a valid tsserver install. Falling back to bundled TypeScript version.', version.path)); + + this._versionManager.reset(); + version = this._versionManager.currentVersion; + } + + this.info(`Using tsserver from: ${version.path}`); + + const apiVersion = version.apiVersion || API.defaultVersion; + const mytoken = ++this.token; + const handle = this.typescriptServerSpawner.spawn(version, this.capabilities, this.configuration, this.pluginManager, this.cancellerFactory, { + onFatalError: (command, err) => this.fatalError(command, err), + }); + this.serverState = new ServerState.Running(handle, apiVersion, undefined, true); + this.lastStart = Date.now(); + + /* __GDPR__ + "tsserver.spawned" : { + "${include}": [ + "${TypeScriptCommonProperties}" + ], + "localTypeScriptVersion": { "classification": "SystemMetaData", "purpose": "FeatureInsight" }, + "typeScriptVersionSource": { "classification": "SystemMetaData", "purpose": "FeatureInsight" } + } + */ + this.logTelemetry('tsserver.spawned', { + localTypeScriptVersion: this.versionProvider.localVersion ? this.versionProvider.localVersion.displayName : '', + typeScriptVersionSource: version.source, + }); + + handle.onError((err: Error) => { + if (this.token !== mytoken) { + // this is coming from an old process + return; + } + + if (err) { + vscode.window.showErrorMessage(localize('serverExitedWithError', 'TypeScript language server exited with error. Error message is: {0}', err.message || err.name)); + } + + this.serverState = new ServerState.Errored(err, handle.tsServerLogFile); + this.error('TSServer errored with error.', err); + if (handle.tsServerLogFile) { + this.error(`TSServer log file: ${handle.tsServerLogFile}`); + } + + /* __GDPR__ + "tsserver.error" : { + "${include}": [ + "${TypeScriptCommonProperties}" + ] + } + */ + this.logTelemetry('tsserver.error'); + this.serviceExited(false); + }); + + handle.onExit((code: any) => { + if (this.token !== mytoken) { + // this is coming from an old process + return; + } + + if (code === null || typeof code === 'undefined') { + this.info('TSServer exited'); + } else { + // In practice, the exit code is an integer with no ties to any identity, + // so it can be classified as SystemMetaData, rather than CallstackOrException. + this.error(`TSServer exited with code: ${code}`); + /* __GDPR__ + "tsserver.exitWithCode" : { + "code" : { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth" }, + "${include}": [ + "${TypeScriptCommonProperties}" + ] + } + */ + this.logTelemetry('tsserver.exitWithCode', { code: code }); + } + + if (handle.tsServerLogFile) { + this.info(`TSServer log file: ${handle.tsServerLogFile}`); + } + this.serviceExited(!this.isRestarting); + this.isRestarting = false; + }); + + handle.onEvent(event => this.dispatchEvent(event)); + + if (apiVersion.gte(API.v300) && this.capabilities.has(ClientCapability.Semantic)) { + this.loadingIndicator.startedLoadingProject(undefined /* projectName */); + } + + this.serviceStarted(resendModels); + + this._onReady!.resolve(); + this._onTsServerStarted.fire({ version: version, usedApiVersion: apiVersion }); + this._onDidChangeCapabilities.fire(); + return this.serverState; + } + + public async showVersionPicker(): Promise { + this._versionManager.promptUserForVersion(); + } + + public async openTsServerLogFile(): Promise { + if (this._configuration.tsServerLogLevel === TsServerLogLevel.Off) { + vscode.window.showErrorMessage( + localize( + 'typescript.openTsServerLog.loggingNotEnabled', + 'TS Server logging is off. Please set `typescript.tsserver.log` and restart the TS server to enable logging'), + { + title: localize( + 'typescript.openTsServerLog.enableAndReloadOption', + 'Enable logging and restart TS server'), + }) + .then(selection => { + if (selection) { + return vscode.workspace.getConfiguration().update('typescript.tsserver.log', 'verbose', true).then(() => { + this.restartTsServer(); + }); + } + return undefined; + }); + return false; + } + + if (this.serverState.type !== ServerState.Type.Running || !this.serverState.server.tsServerLogFile) { + vscode.window.showWarningMessage(localize( + 'typescript.openTsServerLog.noLogFile', + 'TS Server has not started logging.')); + return false; + } + + try { + const doc = await vscode.workspace.openTextDocument(vscode.Uri.file(this.serverState.server.tsServerLogFile)); + await vscode.window.showTextDocument(doc); + return true; + } catch { + // noop + } + + try { + await vscode.commands.executeCommand('revealFileInOS', vscode.Uri.file(this.serverState.server.tsServerLogFile)); + return true; + } catch { + vscode.window.showWarningMessage(localize( + 'openTsServerLog.openFileFailedFailed', + 'Could not open TS Server log file')); + return false; + } + } + + private serviceStarted(resendModels: boolean): void { + this.bufferSyncSupport.reset(); + + const watchOptions = this.apiVersion.gte(API.v380) + ? this.configuration.watchOptions + : undefined; + + const configureOptions: Proto.ConfigureRequestArguments = { + hostInfo: 'vscode', + preferences: { + providePrefixAndSuffixTextForRename: true, + allowRenameOfImportPath: true, + includePackageJsonAutoImports: this._configuration.includePackageJsonAutoImports, + }, + watchOptions + }; + this.executeWithoutWaitingForResponse('configure', configureOptions); + this.setCompilerOptionsForInferredProjects(this._configuration); + if (resendModels) { + this._onResendModelsRequested.fire(); + this.bufferSyncSupport.reinitialize(); + this.bufferSyncSupport.requestAllDiagnostics(); + } + + // Reconfigure any plugins + for (const [config, pluginName] of this.pluginManager.configurations()) { + this.configurePlugin(config, pluginName); + } + } + + private setCompilerOptionsForInferredProjects(configuration: TypeScriptServiceConfiguration): void { + const args: Proto.SetCompilerOptionsForInferredProjectsArgs = { + options: this.getCompilerOptionsForInferredProjects(configuration) + }; + this.executeWithoutWaitingForResponse('compilerOptionsForInferredProjects', args); + } + + private getCompilerOptionsForInferredProjects(configuration: TypeScriptServiceConfiguration): Proto.ExternalProjectCompilerOptions { + return { + ...inferredProjectCompilerOptions(ProjectType.TypeScript, configuration), + allowJs: true, + allowSyntheticDefaultImports: true, + allowNonTsExtensions: true, + resolveJsonModule: true, + }; + } + + private serviceExited(restart: boolean): void { + this.loadingIndicator.reset(); + + const previousState = this.serverState; + this.serverState = ServerState.None; + + if (restart) { + const diff = Date.now() - this.lastStart; + this.numberRestarts++; + let startService = true; + + const reportIssueItem: vscode.MessageItem = { + title: localize('serverDiedReportIssue', 'Report Issue'), + }; + let prompt: Thenable | undefined = undefined; + + if (this.numberRestarts > 5) { + this.numberRestarts = 0; + if (diff < 10 * 1000 /* 10 seconds */) { + this.lastStart = Date.now(); + startService = false; + this.hasServerFatallyCrashedTooManyTimes = true; + prompt = vscode.window.showErrorMessage( + localize('serverDiedAfterStart', 'The TypeScript language service died 5 times right after it got started. The service will not be restarted.'), + reportIssueItem); + + /* __GDPR__ + "serviceExited" : { + "${include}": [ + "${TypeScriptCommonProperties}" + ] + } + */ + this.logTelemetry('serviceExited'); + } else if (diff < 60 * 1000 * 5 /* 5 Minutes */) { + this.lastStart = Date.now(); + prompt = vscode.window.showWarningMessage( + localize('serverDied', 'The TypeScript language service died unexpectedly 5 times in the last 5 Minutes.'), + reportIssueItem); + } + } else if (['vscode-insiders', 'code-oss'].includes(vscode.env.uriScheme)) { + // Prompt after a single restart + if (!this._isPromptingAfterCrash && previousState.type === ServerState.Type.Errored && previousState.error instanceof TypeScriptServerError) { + this.numberRestarts = 0; + this._isPromptingAfterCrash = true; + prompt = vscode.window.showWarningMessage( + localize('serverDiedOnce', 'The TypeScript language service died unexpectedly.'), + reportIssueItem); + } + } + + prompt?.then(item => { + this._isPromptingAfterCrash = false; + + if (item === reportIssueItem) { + const args = previousState.type === ServerState.Type.Errored && previousState.error instanceof TypeScriptServerError + ? getReportIssueArgsForError(previousState.error, previousState.tsServerLogFile) + : undefined; + vscode.commands.executeCommand('workbench.action.openIssueReporter', args); + } + }); + + if (startService) { + this.startService(true); + } + } + } + + public normalizedPath(resource: vscode.Uri): string | undefined { + if (fileSchemes.disabledSchemes.has(resource.scheme)) { + return undefined; + } + + switch (resource.scheme) { + case fileSchemes.file: + { + let result = resource.fsPath; + if (!result) { + return undefined; + } + result = path.normalize(result); + + // Both \ and / must be escaped in regular expressions + return result.replace(new RegExp('\\' + this.pathSeparator, 'g'), '/'); + } + default: + { + return this.inMemoryResourcePrefix + resource.toString(true); + } + } + } + + public toPath(resource: vscode.Uri): string | undefined { + return this.normalizedPath(resource); + } + + public toOpenedFilePath(document: vscode.TextDocument, options: { suppressAlertOnFailure?: boolean } = {}): string | undefined { + if (!this.bufferSyncSupport.ensureHasBuffer(document.uri)) { + if (!options.suppressAlertOnFailure && !fileSchemes.disabledSchemes.has(document.uri.scheme)) { + console.error(`Unexpected resource ${document.uri}`); + } + return undefined; + } + return this.toPath(document.uri); + } + + public hasCapabilityForResource(resource: vscode.Uri, capability: ClientCapability): boolean { + switch (capability) { + case ClientCapability.Semantic: + { + return fileSchemes.semanticSupportedSchemes.includes(resource.scheme); + } + case ClientCapability.Syntax: + case ClientCapability.EnhancedSyntax: + { + return true; + } + } + } + + public toResource(filepath: string): vscode.Uri { + if (isWeb()) { + // On web, treat absolute paths as pointing to standard lib files + if (filepath.startsWith('/')) { + // below codes are changed by github1s + return vscode.Uri.joinPath(this.context.extensionUri, 'dist', 'browser', 'typescript', filepath.slice(1)); + // about codes are changed by github1s + } + } + + if (filepath.startsWith(this.inMemoryResourcePrefix)) { + const resource = vscode.Uri.parse(filepath.slice(1)); + return this.bufferSyncSupport.toVsCodeResource(resource); + } + return this.bufferSyncSupport.toResource(filepath); + } + + public getWorkspaceRootForResource(resource: vscode.Uri): string | undefined { + const roots = vscode.workspace.workspaceFolders ? Array.from(vscode.workspace.workspaceFolders) : undefined; + if (!roots || !roots.length) { + return undefined; + } + + if (resource.scheme === fileSchemes.file || resource.scheme === fileSchemes.untitled) { + for (const root of roots.sort((a, b) => a.uri.fsPath.length - b.uri.fsPath.length)) { + if (resource.fsPath.startsWith(root.uri.fsPath + path.sep)) { + return root.uri.fsPath; + } + } + return roots[0].uri.fsPath; + } + + return undefined; + } + + public execute(command: keyof TypeScriptRequests, args: any, token: vscode.CancellationToken, config?: ExecConfig): Promise> { + let execution: Promise>; + + if (config?.cancelOnResourceChange) { + const runningServerState = this.service(); + + const source = new vscode.CancellationTokenSource(); + token.onCancellationRequested(() => source.cancel()); + + const inFlight: ToCancelOnResourceChanged = { + resource: config.cancelOnResourceChange, + cancel: () => source.cancel(), + }; + runningServerState.toCancelOnResourceChange.add(inFlight); + + execution = this.executeImpl(command, args, { + isAsync: false, + token: source.token, + expectsResult: true, + ...config, + }).finally(() => { + runningServerState.toCancelOnResourceChange.delete(inFlight); + source.dispose(); + }); + } else { + execution = this.executeImpl(command, args, { + isAsync: false, + token, + expectsResult: true, + ...config, + }); + } + + if (config?.nonRecoverable) { + execution.catch(err => this.fatalError(command, err)); + } + + return execution; + } + + public executeWithoutWaitingForResponse(command: keyof TypeScriptRequests, args: any): void { + this.executeImpl(command, args, { + isAsync: false, + token: undefined, + expectsResult: false + }); + } + + public executeAsync(command: keyof TypeScriptRequests, args: Proto.GeterrRequestArgs, token: vscode.CancellationToken): Promise> { + return this.executeImpl(command, args, { + isAsync: true, + token, + expectsResult: true + }); + } + + private executeImpl(command: keyof TypeScriptRequests, args: any, executeInfo: { isAsync: boolean, token?: vscode.CancellationToken, expectsResult: false, lowPriority?: boolean, requireSemantic?: boolean }): undefined; + private executeImpl(command: keyof TypeScriptRequests, args: any, executeInfo: { isAsync: boolean, token?: vscode.CancellationToken, expectsResult: boolean, lowPriority?: boolean, requireSemantic?: boolean }): Promise>; + private executeImpl(command: keyof TypeScriptRequests, args: any, executeInfo: { isAsync: boolean, token?: vscode.CancellationToken, expectsResult: boolean, lowPriority?: boolean, requireSemantic?: boolean }): Promise> | undefined { + this.bufferSyncSupport.beforeCommand(command); + const runningServerState = this.service(); + return runningServerState.server.executeImpl(command, args, executeInfo); + } + + public interruptGetErr(f: () => R): R { + return this.bufferSyncSupport.interruptGetErr(f); + } + + private fatalError(command: string, error: unknown): void { + /* __GDPR__ + "fatalError" : { + "${include}": [ + "${TypeScriptCommonProperties}", + "${TypeScriptRequestErrorProperties}" + ], + "command" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" } + } + */ + this.logTelemetry('fatalError', { ...(error instanceof TypeScriptServerError ? error.telemetry : { command }) }); + console.error(`A non-recoverable error occured while executing tsserver command: ${command}`); + if (error instanceof TypeScriptServerError && error.serverErrorText) { + console.error(error.serverErrorText); + } + + if (this.serverState.type === ServerState.Type.Running) { + this.info('Killing TS Server'); + const logfile = this.serverState.server.tsServerLogFile; + this.serverState.server.kill(); + if (error instanceof TypeScriptServerError) { + this.serverState = new ServerState.Errored(error, logfile); + } + } + } + + private dispatchEvent(event: Proto.Event) { + switch (event.event) { + case EventName.syntaxDiag: + case EventName.semanticDiag: + case EventName.suggestionDiag: + // This event also roughly signals that projects have been loaded successfully (since the TS server is synchronous) + this.loadingIndicator.reset(); + + const diagnosticEvent = event as Proto.DiagnosticEvent; + if (diagnosticEvent.body && diagnosticEvent.body.diagnostics) { + this._onDiagnosticsReceived.fire({ + kind: getDignosticsKind(event), + resource: this.toResource(diagnosticEvent.body.file), + diagnostics: diagnosticEvent.body.diagnostics + }); + } + break; + + case EventName.configFileDiag: + this._onConfigDiagnosticsReceived.fire(event as Proto.ConfigFileDiagnosticEvent); + break; + + case EventName.telemetry: + { + const body = (event as Proto.TelemetryEvent).body; + this.dispatchTelemetryEvent(body); + break; + } + case EventName.projectLanguageServiceState: + { + const body = (event as Proto.ProjectLanguageServiceStateEvent).body!; + if (this.serverState.type === ServerState.Type.Running) { + this.serverState.updateLanguageServiceEnabled(body.languageServiceEnabled); + } + this._onProjectLanguageServiceStateChanged.fire(body); + break; + } + case EventName.projectsUpdatedInBackground: + this.loadingIndicator.reset(); + + const body = (event as Proto.ProjectsUpdatedInBackgroundEvent).body; + const resources = body.openFiles.map(file => this.toResource(file)); + this.bufferSyncSupport.getErr(resources); + break; + + case EventName.beginInstallTypes: + this._onDidBeginInstallTypings.fire((event as Proto.BeginInstallTypesEvent).body); + break; + + case EventName.endInstallTypes: + this._onDidEndInstallTypings.fire((event as Proto.EndInstallTypesEvent).body); + break; + + case EventName.typesInstallerInitializationFailed: + this._onTypesInstallerInitializationFailed.fire((event as Proto.TypesInstallerInitializationFailedEvent).body); + break; + + case EventName.surveyReady: + this._onSurveyReady.fire((event as Proto.SurveyReadyEvent).body); + break; + + case EventName.projectLoadingStart: + this.loadingIndicator.startedLoadingProject((event as Proto.ProjectLoadingStartEvent).body.projectName); + break; + + case EventName.projectLoadingFinish: + this.loadingIndicator.finishedLoadingProject((event as Proto.ProjectLoadingFinishEvent).body.projectName); + break; + } + } + + private dispatchTelemetryEvent(telemetryData: Proto.TelemetryEventBody): void { + const properties: { [key: string]: string } = Object.create(null); + switch (telemetryData.telemetryEventName) { + case 'typingsInstalled': + const typingsInstalledPayload: Proto.TypingsInstalledTelemetryEventPayload = (telemetryData.payload as Proto.TypingsInstalledTelemetryEventPayload); + properties['installedPackages'] = typingsInstalledPayload.installedPackages; + + if (typeof typingsInstalledPayload.installSuccess === 'boolean') { + properties['installSuccess'] = typingsInstalledPayload.installSuccess.toString(); + } + if (typeof typingsInstalledPayload.typingsInstallerVersion === 'string') { + properties['typingsInstallerVersion'] = typingsInstalledPayload.typingsInstallerVersion; + } + break; + + default: + const payload = telemetryData.payload; + if (payload) { + Object.keys(payload).forEach((key) => { + try { + if (payload.hasOwnProperty(key)) { + properties[key] = typeof payload[key] === 'string' ? payload[key] : JSON.stringify(payload[key]); + } + } catch (e) { + // noop + } + }); + } + break; + } + if (telemetryData.telemetryEventName === 'projectInfo') { + if (this.serverState.type === ServerState.Type.Running) { + this.serverState.updateTsserverVersion(properties['version']); + } + } + + /* __GDPR__ + "typingsInstalled" : { + "installedPackages" : { "classification": "PublicNonPersonalData", "purpose": "FeatureInsight" }, + "installSuccess": { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth" }, + "typingsInstallerVersion": { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth" }, + "${include}": [ + "${TypeScriptCommonProperties}" + ] + } + */ + // __GDPR__COMMENT__: Other events are defined by TypeScript. + this.logTelemetry(telemetryData.telemetryEventName, properties); + } + + private configurePlugin(pluginName: string, configuration: {}): any { + if (this.apiVersion.gte(API.v314)) { + this.executeWithoutWaitingForResponse('configurePlugin', { pluginName, configuration }); + } + } +} + +function getReportIssueArgsForError( + error: TypeScriptServerError, + logPath: string | undefined, +): { extensionId: string, issueTitle: string, issueBody: string } | undefined { + if (!error.serverStack || !error.serverMessage) { + return undefined; + } + + // Note these strings are intentionally not localized + // as we want users to file issues in english + + const sections = [ + `❗️❗️❗️ Please fill in the sections below to help us diagnose the issue ❗️❗️❗️`, + `**TypeScript Version:** ${error.version.apiVersion?.fullVersionString}`, + `**Steps to reproduce crash** + +1. +2. +3.`, + ]; + + if (logPath) { + sections.push(`**TS Server Log** + +❗️ Please review and upload this log file to help us diagnose this crash: + +\`${logPath}\` + +The log file may contain personal data, including full paths and source code from your workspace. You can scrub the log file to remove paths or other personal information. +`); + } else { + + sections.push(`**TS Server Log** + +❗️Server logging disabled. To help us fix crashes like this, please enable logging by setting: + +\`\`\`json +"typescript.tsserver.log": "verbose" +\`\`\` + +After enabling this setting, future crash reports will include the server log.`); + } + + sections.push(`**TS Server Error Stack** + +Server: \`${error.serverId}\` + +\`\`\` +${error.serverStack} +\`\`\``); + + return { + extensionId: 'vscode.typescript-language-features', + issueTitle: `TS Server fatal error: ${error.serverMessage}`, + + issueBody: sections.join('\n\n') + }; +} + +function getDignosticsKind(event: Proto.Event) { + switch (event.event) { + case 'syntaxDiag': return DiagnosticKind.Syntax; + case 'semanticDiag': return DiagnosticKind.Semantic; + case 'suggestionDiag': return DiagnosticKind.Suggestion; + } + throw new Error('Unknown dignostics kind'); +} + +class ServerInitializingIndicator extends Disposable { + private _task?: { project: string | undefined, resolve: () => void, reject: () => void }; + + public reset(): void { + if (this._task) { + this._task.reject(); + this._task = undefined; + } + } + + /** + * Signal that a project has started loading. + */ + public startedLoadingProject(projectName: string | undefined): void { + // TS projects are loaded sequentially. Cancel existing task because it should always be resolved before + // the incoming project loading task is. + this.reset(); + + vscode.window.withProgress({ + location: vscode.ProgressLocation.Window, + title: localize('serverLoading.progress', "Initializing JS/TS language features"), + }, () => new Promise((resolve, reject) => { + this._task = { project: projectName, resolve, reject }; + })); + } + + public finishedLoadingProject(projectName: string | undefined): void { + if (this._task && this._task.project === projectName) { + this._task.resolve(); + this._task = undefined; + } + } +} + diff --git a/vscode-web-github1s/package.json b/vscode-web-github1s/package.json index 8f34552aa..fd5009021 100644 --- a/vscode-web-github1s/package.json +++ b/vscode-web-github1s/package.json @@ -1,6 +1,6 @@ { "name": "@github1s/vscode-web", - "version": "0.1.9", + "version": "0.1.10", "description": "VS Code web for GitHub1s", "author": "github1s", "license": "MIT", diff --git a/vscode-web-github1s/scripts/sync-code.sh b/vscode-web-github1s/scripts/sync-code.sh index e1420f0d3..23a393f13 100755 --- a/vscode-web-github1s/scripts/sync-code.sh +++ b/vscode-web-github1s/scripts/sync-code.sh @@ -9,6 +9,7 @@ echo $APP_ROOT function main() { cd ${APP_ROOT} rsync -a src/ lib/vscode/src + rsync -a extensions/ lib/vscode/extensions } main "$@" diff --git a/yarn.lock b/yarn.lock index 7be0737c5..bae94c9ba 100644 --- a/yarn.lock +++ b/yarn.lock @@ -39,10 +39,10 @@ minimatch "^3.0.4" strip-json-comments "^3.1.1" -"@github1s/vscode-web@0.1.9": - version "0.1.9" - resolved "https://registry.yarnpkg.com/@github1s/vscode-web/-/vscode-web-0.1.9.tgz#b37b9a3d8af64c1e49aad1b11023debf650eba27" - integrity sha512-ZtHcEAaLHqw5IHuLSVfOGs884KehKwPdaTfNy/5F1xrgN2yVDXZ2fQKsXn+ukau6Y4iejTkvxzU1O4bPTQGsdg== +"@github1s/vscode-web@0.1.10": + version "0.1.10" + resolved "https://registry.yarnpkg.com/@github1s/vscode-web/-/vscode-web-0.1.10.tgz#65237bd929aa4426cbf10b28239444170b53cd03" + integrity sha512-q8xTuE1MlKyUsBtQG6+mpQKVF4cohKCbqvHoqiIDalCP+XFdeBTWvTMnHnn+x/36a+Ae+1dzMqQGxo1/kq9qOA== dependencies: iconv-lite-umd "0.6.8" jschardet "2.2.1" From 722a7b61a320d9d1c4cf79cc2e4426272cc35170 Mon Sep 17 00:00:00 2001 From: netcon Date: Tue, 22 Jun 2021 11:43:52 +0800 Subject: [PATCH 050/280] feat: add robots.txt (#331) --- resources/robots.txt | 2 ++ scripts/package/copy-resources.sh | 1 + 2 files changed, 3 insertions(+) create mode 100644 resources/robots.txt diff --git a/resources/robots.txt b/resources/robots.txt new file mode 100644 index 000000000..c2a49f4fb --- /dev/null +++ b/resources/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Allow: / diff --git a/scripts/package/copy-resources.sh b/scripts/package/copy-resources.sh index 7d78bcf4f..9eeaa0bb7 100755 --- a/scripts/package/copy-resources.sh +++ b/scripts/package/copy-resources.sh @@ -15,6 +15,7 @@ function main() { fi cp resources/favicon* dist cp resources/manifest.json dist + cp resources/robots.txt dist echo "copy resources done!" } From 028cbd132491fdb457d4dfe06bce7de342aa63d8 Mon Sep 17 00:00:00 2001 From: netcon Date: Wed, 23 Jun 2021 15:13:54 +0800 Subject: [PATCH 051/280] feat: support for finding symbol references with souregraph (#329) --- .../src/interfaces/sourcegraph/definition.ts | 95 +----------- .../src/interfaces/sourcegraph/position.ts | 109 ++++++++++++++ .../src/interfaces/sourcegraph/reference.ts | 137 ++++++++++++++++++ .../github1s/src/providers/hoverProvider.ts | 8 +- extensions/github1s/src/providers/index.ts | 19 ++- .../src/providers/referenceProvider.ts | 70 +++++++++ 6 files changed, 333 insertions(+), 105 deletions(-) create mode 100644 extensions/github1s/src/interfaces/sourcegraph/position.ts create mode 100644 extensions/github1s/src/interfaces/sourcegraph/reference.ts create mode 100644 extensions/github1s/src/providers/referenceProvider.ts diff --git a/extensions/github1s/src/interfaces/sourcegraph/definition.ts b/extensions/github1s/src/interfaces/sourcegraph/definition.ts index c36f0c6a7..2e70332de 100644 --- a/extensions/github1s/src/interfaces/sourcegraph/definition.ts +++ b/extensions/github1s/src/interfaces/sourcegraph/definition.ts @@ -4,11 +4,8 @@ */ import { gql } from '@apollo/client/core'; -import { - escapeRegexp, - sourcegraphClient, - getRepoRefQueryString, -} from './common'; +import { sourcegraphClient } from './common'; +import { getSymbolPositions } from './position'; export interface SymbolDefinition { precise: boolean; @@ -108,85 +105,6 @@ const getLSIFDefinitions = async ( }); }; -const searchDefinitionsQuery = gql` - query($query: String!) { - search(query: $query) { - results { - results { - ... on FileMatch { - symbols { - name - kind - location { - resource { - path - repository { - name - } - commit { - oid - } - } - range { - start { - line - character - } - end { - line - character - } - } - } - } - } - } - } - } - } -`; - -// get symbol definitions base on search -export const getSearchDefinitions = async ( - owner: string, - repo: string, - ref: string, - symbol: string -): Promise => { - const repoRefString = getRepoRefQueryString(owner, repo, ref); - const optionsString = [ - 'context:global', - 'type:symbol', - 'patternType:regexp', - 'case:yes', - ].join(' '); - const patternString = `^${escapeRegexp(symbol)}$`; - const query = [repoRefString, optionsString, patternString].join(' '); - const response = await sourcegraphClient.query({ - query: searchDefinitionsQuery, - variables: { query }, - }); - - const resultSymbols = response?.data?.search?.results?.results?.flatMap( - (item) => item.symbols - ); - return (resultSymbols || []).map((symbol) => { - const { resource, range } = symbol.location; - const [owner, repo] = resource.repository.name - .split('/') - .filter(Boolean) - .slice(-2); - return { - precise: false, - owner, - repo, - ref: resource.commit.oid, - path: `/${resource.path}`, - range, - }; - }); -}; - export const getSymbolDefinitions = ( owner: string, repo: string, @@ -208,17 +126,12 @@ export const getSymbolDefinitions = ( line, character ); - const searchDefinitionsPromise = getSearchDefinitions( - owner, - repo, - ref, - symbol - ); + const searchDefinitionsPromise = getSymbolPositions(owner, repo, ref, symbol); return LSIFDefinitionsPromise.then((LSIFDefinitions) => { if (LSIFDefinitions.length) { return LSIFDefinitions; } - return searchDefinitionsPromise; + return searchDefinitionsPromise as Promise; }); }; diff --git a/extensions/github1s/src/interfaces/sourcegraph/position.ts b/extensions/github1s/src/interfaces/sourcegraph/position.ts new file mode 100644 index 000000000..a568f5eba --- /dev/null +++ b/extensions/github1s/src/interfaces/sourcegraph/position.ts @@ -0,0 +1,109 @@ +/** + * @file Sourcegraph api for searching symbol positions + * @author netcon + */ + +import { gql } from '@apollo/client/core'; +import { + escapeRegexp, + sourcegraphClient, + getRepoRefQueryString, +} from './common'; + +export interface SymbolPosition { + precise: boolean; + owner: string; + repo: string; + ref: string; + path: string; + range: { + start: { + line: number; + character: number; + }; + end: { + line: number; + character: number; + }; + }; +} + +const searchPositionsQuery = gql` + query($query: String!) { + search(query: $query) { + results { + results { + ... on FileMatch { + symbols { + name + kind + location { + resource { + path + repository { + name + } + commit { + oid + } + } + range { + start { + line + character + } + end { + line + character + } + } + } + } + } + } + } + } + } +`; + +// get symbol position information base on search, +// used by definition, reference and hover +export const getSymbolPositions = async ( + owner: string, + repo: string, + ref: string, + symbol: string +): Promise => { + const repoRefString = getRepoRefQueryString(owner, repo, ref); + const optionsString = [ + 'context:global', + 'type:symbol', + 'patternType:regexp', + 'case:yes', + ].join(' '); + const patternString = `^${escapeRegexp(symbol)}$`; + const query = [repoRefString, optionsString, patternString].join(' '); + const response = await sourcegraphClient.query({ + query: searchPositionsQuery, + variables: { query }, + }); + + const resultSymbols = response?.data?.search?.results?.results?.flatMap( + (item) => item.symbols + ); + return (resultSymbols || []).map((symbol) => { + const { resource, range } = symbol.location; + const [owner, repo] = resource.repository.name + .split('/') + .filter(Boolean) + .slice(-2); + return { + precise: false, + owner, + repo, + ref: resource.commit.oid, + path: `/${resource.path}`, + range, + }; + }); +}; diff --git a/extensions/github1s/src/interfaces/sourcegraph/reference.ts b/extensions/github1s/src/interfaces/sourcegraph/reference.ts new file mode 100644 index 000000000..cf9054aa7 --- /dev/null +++ b/extensions/github1s/src/interfaces/sourcegraph/reference.ts @@ -0,0 +1,137 @@ +/** + * @file Sourcegraph reference api + * @author netcon + */ + +import { gql } from '@apollo/client/core'; +import { sourcegraphClient } from './common'; +import { getSymbolPositions } from './position'; + +export interface SymbolReference { + precise: boolean; + owner: string; + repo: string; + ref: string; + path: string; + range: { + start: { + line: number; + character: number; + }; + end: { + line: number; + character: number; + }; + }; +} + +const LSIFReferencesQuery = gql` + query( + $repository: String! + $ref: String! + $path: String! + $line: Int! + $character: Int! + ) { + repository(name: $repository) { + commit(rev: $ref) { + blob(path: $path) { + lsif { + references(line: $line, character: $character) { + nodes { + resource { + path + repository { + name + } + commit { + oid + } + } + range { + start { + line + character + } + end { + line + character + } + } + } + } + } + } + } + } + } +`; + +// find references with Sourcegraph LSIF +// https://docs.sourcegraph.com/code_intelligence/explanations/precise_code_intelligence +const getLSIFReferences = async ( + owner: string, + repo: string, + ref: string, + path: string, + line: number, + character: number +): Promise => { + const response = await sourcegraphClient.query({ + query: LSIFReferencesQuery, + variables: { + repository: `github.com/${owner}/${repo}`, + ref, + path: path.slice(1), + line, + character, + }, + }); + const referenceNodes = + response?.data?.repository?.commit?.blob?.lsif?.references?.nodes; + return (referenceNodes || []).map(({ resource, range }) => { + const [owner, repo] = resource.repository.name + .split('/') + .filter(Boolean) + .slice(-2); + return { + precise: true, + owner, + repo, + ref: resource.commit.oid, + path: `/${resource.path}`, + range, + }; + }); +}; + +export const getSymbolReferences = ( + owner: string, + repo: string, + ref: string, + path: string, + line: number, + character: number, + symbol: string +): Promise => { + // if failed to find references from LSIF, + // fallback to search-based references, using + // two promise instead of `await` to request in + // parallel for getting result as soon as possible + const LSIFReferencesPromise = getLSIFReferences( + owner, + repo, + ref, + path, + line, + character + ); + const searchReferencesPromise = getSymbolPositions(owner, repo, ref, symbol); + + return LSIFReferencesPromise.then((LSIFReferences) => { + if (LSIFReferences.length) { + return LSIFReferences; + } + return searchReferencesPromise as Promise; + }); +}; diff --git a/extensions/github1s/src/providers/hoverProvider.ts b/extensions/github1s/src/providers/hoverProvider.ts index 2f37bbd4f..63d25c4b5 100644 --- a/extensions/github1s/src/providers/hoverProvider.ts +++ b/extensions/github1s/src/providers/hoverProvider.ts @@ -6,21 +6,21 @@ import * as vscode from 'vscode'; import router from '@/router'; import { getSymbolHover, SymbolHover } from '@/interfaces/sourcegraph/hover'; -import { getSearchDefinitions } from '@/interfaces/sourcegraph/definition'; +import { getSymbolPositions } from '@/interfaces/sourcegraph/position'; import { getSourcegraphUrl } from '@/helpers/urls'; const getSemanticMarkdownSuffix = (sourcegraphUrl: String) => ` --- -[SEMANTIC](https://docs.sourcegraph.com/code_intelligence/explanations/precise_code_intelligence) result provide by [Sourcegraph](${sourcegraphUrl}) +[Semantic](https://docs.sourcegraph.com/code_intelligence/explanations/precise_code_intelligence) result provided by [Sourcegraph](${sourcegraphUrl}) `; const getSearchBasedMarkdownSuffix = (sourcegraphUrl: String) => ` --- -[SEARCH-BASED](https://docs.sourcegraph.com/code_intelligence/explanations/precise_code_intelligence) result provide by [Sourcegraph](${sourcegraphUrl}) +[Search-based](https://docs.sourcegraph.com/code_intelligence/explanations/precise_code_intelligence) result provided by [Sourcegraph](${sourcegraphUrl}) `; export class GitHub1sHoverProvider implements vscode.HoverProvider { @@ -32,7 +32,7 @@ export class GitHub1sHoverProvider implements vscode.HoverProvider { ): Promise { const authority = document.uri.authority || (await router.getAuthority()); const [owner, repo, ref] = authority.split('+').filter(Boolean); - const definitions = await getSearchDefinitions(owner, repo, ref, symbol); + const definitions = await getSymbolPositions(owner, repo, ref, symbol); if (!definitions.length) { return null; diff --git a/extensions/github1s/src/providers/index.ts b/extensions/github1s/src/providers/index.ts index 5c04fa9f6..99b954028 100644 --- a/extensions/github1s/src/providers/index.ts +++ b/extensions/github1s/src/providers/index.ts @@ -12,6 +12,7 @@ import { GitHub1sSubmoduleDecorationProvider } from './submoduleDecorationProvid import { GitHub1sChangedFileDecorationProvider } from './changedFileDecorationProvider'; import { GitHub1sSourceControlDecorationProvider } from './sourceControlDecorationProvider'; import { GitHub1sDefinitionProvider } from './definitionProvider'; +import { GitHub1sReferenceProvider } from './referenceProvider'; import { GitHub1sHoverProvider } from './hoverProvider'; export const fileSystemProvider = new GitHub1sFileSystemProvider(); @@ -25,6 +26,7 @@ export const submoduleDecorationProvider = new GitHub1sSubmoduleDecorationProvid export const changedFileDecorationProvider = new GitHub1sChangedFileDecorationProvider(); export const sourceControlDecorationProvider = new GitHub1sSourceControlDecorationProvider(); export const definitionProvider = new GitHub1sDefinitionProvider(); +export const referenceProvider = new GitHub1sReferenceProvider(); export const hoverProvider = new GitHub1sHoverProvider(); export const EMPTY_FILE_SCHEME = 'github1s-empty-file'; @@ -39,10 +41,7 @@ export const registerVSCodeProviders = () => { vscode.workspace.registerFileSystemProvider( GitHub1sFileSystemProvider.scheme, fileSystemProvider, - { - isCaseSensitive: true, - isReadonly: true, - } + { isCaseSensitive: true, isReadonly: true } ), vscode.workspace.registerFileSearchProvider( GitHub1sFileSearchProvider.scheme, @@ -59,15 +58,15 @@ export const registerVSCodeProviders = () => { ), vscode.languages.registerDefinitionProvider( - { - scheme: GitHub1sDefinitionProvider.scheme, - }, + { scheme: GitHub1sDefinitionProvider.scheme }, definitionProvider ), + vscode.languages.registerReferenceProvider( + { scheme: GitHub1sReferenceProvider.scheme }, + referenceProvider + ), vscode.languages.registerHoverProvider( - { - scheme: GitHub1sHoverProvider.scheme, - }, + { scheme: GitHub1sHoverProvider.scheme }, hoverProvider ), diff --git a/extensions/github1s/src/providers/referenceProvider.ts b/extensions/github1s/src/providers/referenceProvider.ts new file mode 100644 index 000000000..f98e4c4e8 --- /dev/null +++ b/extensions/github1s/src/providers/referenceProvider.ts @@ -0,0 +1,70 @@ +/** + * @file ReferenceProvider + * @author netcon + */ + +import * as vscode from 'vscode'; +import router from '@/router'; +import { getSymbolReferences } from '@/interfaces/sourcegraph/reference'; +import { showSourcegraphSymbolMessage } from '@/messages'; +import { GitHub1sFileSystemProvider } from './fileSystemProvider'; + +export class GitHub1sReferenceProvider implements vscode.ReferenceProvider { + static scheme = 'github1s'; + + async provideReferences( + document: vscode.TextDocument, + position: vscode.Position, + _context: vscode.ReferenceContext, + _token: vscode.CancellationToken + ): Promise { + const symbolRange = document.getWordRangeAtPosition(position); + const symbol = symbolRange ? document.getText(symbolRange) : ''; + + if (!symbol) { + return; + } + + const authority = document.uri.authority || (await router.getAuthority()); + const [owner, repo, ref] = authority.split('+').filter(Boolean); + const path = document.uri.path; + const { line, character } = position; + + const symbolReferences = await getSymbolReferences( + owner, + repo, + ref, + path, + line, + character, + symbol + ); + + if (symbolReferences.length) { + showSourcegraphSymbolMessage(owner, repo, ref, path, line, character); + } + + return symbolReferences.map((repoReference) => { + const isSameRepo = + repoReference.owner === owner && repoReference.repo === repo; + // if the reference target and the searched symbol is in the same + // repository, just replace the `document.uri.path` with targetPath + // (so that the target file will open with expanding the file explorer) + const uri = isSameRepo + ? document.uri.with({ path: repoReference.path }) + : vscode.Uri.parse('').with({ + scheme: GitHub1sFileSystemProvider.scheme, + authority: `${owner}+${repo}+${ref}`, + path: repoReference.path, + }); + const { start, end } = repoReference.range; + return { + uri, + range: new vscode.Range( + new vscode.Position(start.line, start.character), + new vscode.Position(end.line, end.character) + ), + }; + }); + } +} From 07a642f8514e823c306abaebda7897a0cbb12e01 Mon Sep 17 00:00:00 2001 From: Lalit Fauzdar <62703211+Fauzdar1@users.noreply.github.com> Date: Mon, 12 Jul 2021 08:40:05 +0530 Subject: [PATCH 052/280] Added my Chrome extension repo's link for Github1s (#336) Hey, I created a chrome extension for Github1s to open it using shortcut or the extension's popup. I didn't know there are already many extensions, so, I've added mine in this readme. It's open source as well. --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 308dc7e05..3c2b905ab 100644 --- a/README.md +++ b/README.md @@ -151,6 +151,7 @@ The continued development and maintenance of GitHub1s is made possible by these - Github1s Extension ([Darkempire78/GitHub1s-Extension](https://github.com/Darkempire78/GitHub1s-Extension)) - [Github Web IDE](https://chrome.google.com/webstore/detail/adjiklnjodbiaioggfpbpkhbfcnhgkfe) ([zvizvi/Github-Web-IDE](https://github.com/zvizvi/Github-Web-IDE)) - [shortcut to github1s](https://chrome.google.com/webstore/detail/shortcut-to-github1s/gfcdbodapcbfckbfpmgeldfkkgjknceo) ([katsuhisa91/github1s-shortcut](https://github.com/katsuhisa91/github1s-shortcut)) +- [Github1s Shortut - Open source](https://github.com/Fauzdar1/Github1s) ### Firefox Extensions From 67b004c4a713add1940c76f40fde57c073d80ced Mon Sep 17 00:00:00 2001 From: netcon Date: Mon, 26 Jul 2021 21:54:48 +0800 Subject: [PATCH 053/280] chore: watch script exits unexpected sometimes --- vscode-web-github1s/scripts/watch/watch-dist.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/vscode-web-github1s/scripts/watch/watch-dist.js b/vscode-web-github1s/scripts/watch/watch-dist.js index 6f1698e25..26a4684d4 100755 --- a/vscode-web-github1s/scripts/watch/watch-dist.js +++ b/vscode-web-github1s/scripts/watch/watch-dist.js @@ -26,7 +26,9 @@ const autoSyncVscodeOut = async () => { const SOURCE = path.join(APP_ROOT, 'vscode-web-github1s/lib/vscode/out'); const TARGET = path.join(APP_ROOT, 'dist/static/vscode'); - await util.promisify(cp.exec)(`rsync -a ${SOURCE}/ ${TARGET}`); + await util + .promisify(cp.exec)(`rsync -a ${SOURCE}/ ${TARGET}`) + .catch(() => {}); chokidar.watch(SOURCE).on( 'all', From 9028105425a4567153bd09e571643070e0f582d2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 10 Aug 2021 23:07:47 -0400 Subject: [PATCH 054/280] chore(deps): bump path-parse from 1.0.6 to 1.0.7 (#340) Bumps [path-parse](https://github.com/jbgutierrez/path-parse) from 1.0.6 to 1.0.7. - [Release notes](https://github.com/jbgutierrez/path-parse/releases) - [Commits](https://github.com/jbgutierrez/path-parse/commits/v1.0.7) --- updated-dependencies: - dependency-name: path-parse dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index bae94c9ba..e18036528 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1582,9 +1582,9 @@ path-key@^3.0.0, path-key@^3.1.0: integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-parse@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" - integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== path-to-regexp@2.2.1: version "2.2.1" From a95625e246fd7c1d49db9775492dcaa86a2d0d26 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 11 Aug 2021 10:29:53 +0530 Subject: [PATCH 055/280] chore(deps): bump path-parse from 1.0.6 to 1.0.7 in /vscode-web-github1s (#343) Bumps [path-parse](https://github.com/jbgutierrez/path-parse) from 1.0.6 to 1.0.7. - [Release notes](https://github.com/jbgutierrez/path-parse/releases) - [Commits](https://github.com/jbgutierrez/path-parse/commits/v1.0.7) --- updated-dependencies: - dependency-name: path-parse dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- vscode-web-github1s/yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/vscode-web-github1s/yarn.lock b/vscode-web-github1s/yarn.lock index 544f34013..baad22c57 100644 --- a/vscode-web-github1s/yarn.lock +++ b/vscode-web-github1s/yarn.lock @@ -338,9 +338,9 @@ path-key@^2.0.1: integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= path-parse@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" - integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== path-type@^3.0.0: version "3.0.0" From 07d20298925546447e9dfaa8f1031e0af40481b8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 11 Aug 2021 10:30:28 +0530 Subject: [PATCH 056/280] chore(deps): bump path-parse in /extensions/jupyter-web (#344) Bumps [path-parse](https://github.com/jbgutierrez/path-parse) from 1.0.6 to 1.0.7. - [Release notes](https://github.com/jbgutierrez/path-parse/releases) - [Commits](https://github.com/jbgutierrez/path-parse/commits/v1.0.7) --- updated-dependencies: - dependency-name: path-parse dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- extensions/jupyter-web/yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/extensions/jupyter-web/yarn.lock b/extensions/jupyter-web/yarn.lock index 85554b040..48e0154b0 100644 --- a/extensions/jupyter-web/yarn.lock +++ b/extensions/jupyter-web/yarn.lock @@ -1149,9 +1149,9 @@ path-key@^3.0.0, path-key@^3.1.0: integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-parse@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" - integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== pkg-dir@^4.2.0: version "4.2.0" From 180a1c2b66dc7a47be3da3400a2c83dab88f1042 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 11 Aug 2021 14:32:11 +0800 Subject: [PATCH 057/280] chore(deps): bump path-parse from 1.0.6 to 1.0.7 in /tests (#341) Bumps [path-parse](https://github.com/jbgutierrez/path-parse) from 1.0.6 to 1.0.7. - [Release notes](https://github.com/jbgutierrez/path-parse/releases) - [Commits](https://github.com/jbgutierrez/path-parse/commits/v1.0.7) --- updated-dependencies: - dependency-name: path-parse dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- tests/yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/yarn.lock b/tests/yarn.lock index 4f5e6a22c..f2f953cdb 100644 --- a/tests/yarn.lock +++ b/tests/yarn.lock @@ -3356,9 +3356,9 @@ path-key@^3.0.0, path-key@^3.1.0: integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-parse@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" - integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== pause-stream@0.0.11: version "0.0.11" From e93e6eaf322b63bb277c601e5b7677d7ed91b79d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 11 Aug 2021 15:04:11 +0800 Subject: [PATCH 058/280] chore(deps): bump path-parse from 1.0.6 to 1.0.7 in /extensions/github1s (#342) Bumps [path-parse](https://github.com/jbgutierrez/path-parse) from 1.0.6 to 1.0.7. - [Release notes](https://github.com/jbgutierrez/path-parse/releases) - [Commits](https://github.com/jbgutierrez/path-parse/commits/v1.0.7) --- updated-dependencies: - dependency-name: path-parse dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- extensions/github1s/yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/extensions/github1s/yarn.lock b/extensions/github1s/yarn.lock index 205353d9c..f34d01257 100644 --- a/extensions/github1s/yarn.lock +++ b/extensions/github1s/yarn.lock @@ -882,9 +882,9 @@ path-key@^3.0.0, path-key@^3.1.0: integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-parse@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" - integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== picomatch@^2.0.5: version "2.2.2" From a4df1238a74daca9c4d9a0055a0583d5f1b38d57 Mon Sep 17 00:00:00 2001 From: Shubh Chudasama <65857597+c-shubh@users.noreply.github.com> Date: Sun, 22 Aug 2021 20:03:39 +0530 Subject: [PATCH 059/280] Fix grammar ('results is' -> 'results are') (#352) --- extensions/github1s/src/messages.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions/github1s/src/messages.ts b/extensions/github1s/src/messages.ts index eddb558b6..5fcf67190 100644 --- a/extensions/github1s/src/messages.ts +++ b/extensions/github1s/src/messages.ts @@ -38,7 +38,7 @@ export const showSourcegraphSymbolMessage = (() => { alreadyShown = true; const url = getSourcegraphUrl(owner, repo, ref, path, line, character); vscode.window.showInformationMessage( - `The results is provided by [Sourcegraph](${url})` + `The results are provided by [Sourcegraph](${url})` ); }; })(); From ecd252fa54de41b1cb622ff5a1f8a1b715d3b621 Mon Sep 17 00:00:00 2001 From: netcon Date: Wed, 8 Sep 2021 12:56:06 +0800 Subject: [PATCH 060/280] Upgrade VS Code to 1.60.0 (#353) * chore: upgrade vscode to 1.60.0 * chore: upgrade vscode to 1.60.0 * chore: upgrade vscode to 1.60.0 * chore: upgrade vscode to 1.60.0 * chore: upgrade vscode to 1.60.0 * chore: upgrade vscode to 1.60.0 * feat: update extension config * feat: update vscode-web version * feat: update test * feat: update test snapshots * feat: update test snapshots * chore: update test config * chore: update test config --- .github/workflows/build.yml | 2 +- .github/workflows/test-wtih-vscode-build.yml | 2 +- api/vscode-unpkg/index.js | 25 + api/vscode-unpkg/package.json | 10 + api/vscode-unpkg/yarn.lock | 204 ++ docs/guide.md | 2 +- extensions/dart-web/LICENSE | 21 - extensions/dart-web/README.md | 31 - extensions/dart-web/media/dart.png | Bin 26796 -> 0 bytes extensions/dart-web/package.json | 96 - extensions/dart-web/snippets/dart.json | 81 - extensions/dart-web/snippets/flutter.json | 71 - .../syntaxes/dart-language-configuration.json | 53 - extensions/dart-web/syntaxes/dart.json | 436 ----- .../dart-web/syntaxes/dart.json.licence | 30 - .../github1s/src/views/settings-view.ts | 2 +- extensions/jupyter-web/LICENSE | 21 - extensions/jupyter-web/README.md | 24 - .../jupyter-web/extension.webpack.config.js | 41 - extensions/jupyter-web/images/jupyter.png | Bin 26597 -> 0 bytes extensions/jupyter-web/images/sample.PNG | Bin 3510874 -> 0 bytes extensions/jupyter-web/jsconfig.json | 12 - .../jupyter-web/language-configuration.json | 41 - extensions/jupyter-web/package.json | 107 -- extensions/jupyter-web/src/extension.js | 55 - extensions/jupyter-web/yarn.lock | 1661 ----------------- extensions/kotlin-web/LICENSE | 201 -- extensions/kotlin-web/README.md | 36 - extensions/kotlin-web/artwork/icon.png | Bin 4870 -> 0 bytes .../kotlin-web/kotlin.configuration.json | 35 - extensions/kotlin-web/package.json | 91 - extensions/kotlin-web/snippets/kotlin.json | 64 - .../kotlin-web/syntaxes/Kotlin.tmLanguage | 1067 ----------- extensions/kotlin-web/syntaxes/LICENSE | 202 -- extensions/kotlin-web/syntaxes/codeblock.json | 22 - extensions/scala-web/LICENSE | 9 - extensions/scala-web/README.md | 39 - extensions/scala-web/images/smooth-spiral.png | Bin 12997 -> 0 bytes .../scala-web/language-configuration.json | 33 - extensions/scala-web/package.json | 65 - .../scala-web/syntaxes/Scala.tmLanguage.json | 756 -------- extensions/svelte-web/LICENSE | 7 - extensions/svelte-web/README.md | 29 - extensions/svelte-web/icons/logo-nightly.png | Bin 45799 -> 0 bytes extensions/svelte-web/icons/logo.png | Bin 7153 -> 0 bytes .../svelte-web/icons/preview-right-dark.svg | 4 - .../svelte-web/icons/preview-right-light.svg | 4 - .../svelte-web/language-configuration.json | 78 - extensions/svelte-web/package.json | 126 -- extensions/svelte-web/scripts/.eslintrc.js | 6 - .../svelte-web/syntaxes/markdown-svelte.json | 45 - .../syntaxes/pug-svelte-dotblock.json | 55 - .../svelte-web/syntaxes/pug-svelte-tags.json | 201 -- .../svelte-web/syntaxes/pug-svelte.json | 293 --- .../syntaxes/svelte.tmLanguage.json | 1015 ---------- .../syntaxes/svelte.tmLanguage.src.yaml | 695 ------- extensions/vetur-web/LICENSE | 21 - extensions/vetur-web/README.md | 69 - extensions/vetur-web/ThirdPartyNotices.txt | 88 - extensions/vetur-web/asset/vue.png | Bin 11460 -> 0 bytes .../vue-html-language-configuration.json | 26 - .../languages/vue-language-configuration.json | 39 - .../vue-postcss-language-configuration.json | 28 - .../vue-pug-language-configuration.json | 27 - extensions/vetur-web/package.json | 130 -- .../vetur-web/syntaxes/markdown-vue.json | 45 - .../vetur-web/syntaxes/pug/directives.YAML | 5 - .../syntaxes/pug/directives.tmLanguage.json | 9 - .../syntaxes/pug/interpolations.YAML | 5 - .../pug/interpolations.tmLanguage.json | 9 - .../vetur-web/syntaxes/vue-generated.json | 1242 ------------ extensions/vetur-web/syntaxes/vue-html.YAML | 259 --- .../syntaxes/vue-html.tmLanguage.json | 558 ------ .../vetur-web/syntaxes/vue-postcss.json | 374 ---- .../vetur-web/syntaxes/vue.tmLanguage.json | 1113 ----------- extensions/vetur-web/syntaxes/vue.yaml | 528 ------ package.json | 2 +- resources/index-dev-vscode.html | 4 +- resources/index-hash.html | 4 +- resources/index.html | 4 +- scripts/serve-dist.js | 39 +- ...est-ts-should-load-successfully-1-snap.png | Bin 189325 -> 189480 bytes ...t-ts-should-open-file-correctly-1-snap.png | Bin 162914 -> 164108 bytes ...dex-test-ts-should-show-pr-list-1-snap.png | Bin 53690 -> 51708 bytes ...dex-test-ts-should-show-pr-list-2-snap.png | Bin 55931 -> 54504 bytes tests/__tests__/index.test.ts | 22 +- vercel.json | 4 + .../src/typescriptServiceClient.ts | 1050 ----------- vscode-web-github1s/package.json | 2 +- .../resources/builtin-extensions.json | 16 +- vscode-web-github1s/scripts/clone.sh | 2 +- vscode-web-github1s/scripts/sync-code.sh | 4 +- .../src/vs/base/common/platform.ts | 33 +- .../vs/code/browser/workbench/workbench.ts | 78 +- .../browser/controller/textAreaHandler.ts | 678 ------- .../vs/editor/common/config/editorOptions.ts | 384 +++- .../src/vs/github1s/authorizing-github.ts | 1 + .../src/vs/github1s/authorizing-overlay.ts | 1 + .../src/vs/github1s/notification.ts | 1 + vscode-web-github1s/src/vs/github1s/util.ts | 1 + .../page/browser => github1s}/welcomePage.css | 10 +- .../src/vs/github1s/welcomePage.ts | 193 ++ vscode-web-github1s/src/vs/loader.js | 19 +- .../src/vs/platform/product/common/product.ts | 92 +- .../telemetry/common/telemetryService.ts | 26 +- .../api/worker/extHostExtensionService.ts | 13 +- .../parts/activitybar/activitybarActions.ts | 54 +- .../parts/activitybar/activitybarPart.ts | 69 +- .../browser/parts/titlebar/titlebarPart.ts | 28 +- .../src/vs/workbench/browser/web.main.ts | 71 +- .../browser/workbench.contribution.ts | 33 +- .../common/editor/resourceEditorInput.ts | 199 ++ .../files/browser/views/explorerView.ts | 103 +- .../files/common/editors/fileEditorInput.ts | 406 ---- .../terminal/browser/terminalService.ts | 1027 ---------- .../contrib/url/browser/trustedDomains.ts | 251 --- .../contrib/webview/browser/pre/main.js | 743 -------- .../gettingStarted/browser/gettingStarted.ts | 1619 ++++++++++++++++ .../page/browser/vs_code_welcome_page.ts | 67 - .../page/browser/welcomePage.contribution.ts | 38 + .../welcome/page/browser/welcomePage.ts | 899 --------- .../worker/extensionHostWorkerMain.ts | 76 - .../themes/browser/workbenchThemeService.ts | 64 +- .../themes/common/themeConfiguration.ts | 36 +- yarn.lock | 8 +- 125 files changed, 3088 insertions(+), 18167 deletions(-) create mode 100644 api/vscode-unpkg/index.js create mode 100644 api/vscode-unpkg/package.json create mode 100644 api/vscode-unpkg/yarn.lock delete mode 100644 extensions/dart-web/LICENSE delete mode 100644 extensions/dart-web/README.md delete mode 100755 extensions/dart-web/media/dart.png delete mode 100644 extensions/dart-web/package.json delete mode 100644 extensions/dart-web/snippets/dart.json delete mode 100644 extensions/dart-web/snippets/flutter.json delete mode 100644 extensions/dart-web/syntaxes/dart-language-configuration.json delete mode 100644 extensions/dart-web/syntaxes/dart.json delete mode 100644 extensions/dart-web/syntaxes/dart.json.licence delete mode 100644 extensions/jupyter-web/LICENSE delete mode 100644 extensions/jupyter-web/README.md delete mode 100644 extensions/jupyter-web/extension.webpack.config.js delete mode 100644 extensions/jupyter-web/images/jupyter.png delete mode 100644 extensions/jupyter-web/images/sample.PNG delete mode 100644 extensions/jupyter-web/jsconfig.json delete mode 100644 extensions/jupyter-web/language-configuration.json delete mode 100644 extensions/jupyter-web/package.json delete mode 100644 extensions/jupyter-web/src/extension.js delete mode 100644 extensions/jupyter-web/yarn.lock delete mode 100644 extensions/kotlin-web/LICENSE delete mode 100644 extensions/kotlin-web/README.md delete mode 100644 extensions/kotlin-web/artwork/icon.png delete mode 100644 extensions/kotlin-web/kotlin.configuration.json delete mode 100644 extensions/kotlin-web/package.json delete mode 100644 extensions/kotlin-web/snippets/kotlin.json delete mode 100644 extensions/kotlin-web/syntaxes/Kotlin.tmLanguage delete mode 100644 extensions/kotlin-web/syntaxes/LICENSE delete mode 100644 extensions/kotlin-web/syntaxes/codeblock.json delete mode 100644 extensions/scala-web/LICENSE delete mode 100644 extensions/scala-web/README.md delete mode 100644 extensions/scala-web/images/smooth-spiral.png delete mode 100644 extensions/scala-web/language-configuration.json delete mode 100644 extensions/scala-web/package.json delete mode 100644 extensions/scala-web/syntaxes/Scala.tmLanguage.json delete mode 100644 extensions/svelte-web/LICENSE delete mode 100644 extensions/svelte-web/README.md delete mode 100644 extensions/svelte-web/icons/logo-nightly.png delete mode 100644 extensions/svelte-web/icons/logo.png delete mode 100644 extensions/svelte-web/icons/preview-right-dark.svg delete mode 100644 extensions/svelte-web/icons/preview-right-light.svg delete mode 100644 extensions/svelte-web/language-configuration.json delete mode 100644 extensions/svelte-web/package.json delete mode 100644 extensions/svelte-web/scripts/.eslintrc.js delete mode 100644 extensions/svelte-web/syntaxes/markdown-svelte.json delete mode 100644 extensions/svelte-web/syntaxes/pug-svelte-dotblock.json delete mode 100644 extensions/svelte-web/syntaxes/pug-svelte-tags.json delete mode 100644 extensions/svelte-web/syntaxes/pug-svelte.json delete mode 100644 extensions/svelte-web/syntaxes/svelte.tmLanguage.json delete mode 100644 extensions/svelte-web/syntaxes/svelte.tmLanguage.src.yaml delete mode 100644 extensions/vetur-web/LICENSE delete mode 100644 extensions/vetur-web/README.md delete mode 100644 extensions/vetur-web/ThirdPartyNotices.txt delete mode 100644 extensions/vetur-web/asset/vue.png delete mode 100644 extensions/vetur-web/languages/vue-html-language-configuration.json delete mode 100644 extensions/vetur-web/languages/vue-language-configuration.json delete mode 100644 extensions/vetur-web/languages/vue-postcss-language-configuration.json delete mode 100644 extensions/vetur-web/languages/vue-pug-language-configuration.json delete mode 100644 extensions/vetur-web/package.json delete mode 100644 extensions/vetur-web/syntaxes/markdown-vue.json delete mode 100644 extensions/vetur-web/syntaxes/pug/directives.YAML delete mode 100644 extensions/vetur-web/syntaxes/pug/directives.tmLanguage.json delete mode 100644 extensions/vetur-web/syntaxes/pug/interpolations.YAML delete mode 100644 extensions/vetur-web/syntaxes/pug/interpolations.tmLanguage.json delete mode 100644 extensions/vetur-web/syntaxes/vue-generated.json delete mode 100644 extensions/vetur-web/syntaxes/vue-html.YAML delete mode 100644 extensions/vetur-web/syntaxes/vue-html.tmLanguage.json delete mode 100644 extensions/vetur-web/syntaxes/vue-postcss.json delete mode 100644 extensions/vetur-web/syntaxes/vue.tmLanguage.json delete mode 100644 extensions/vetur-web/syntaxes/vue.yaml delete mode 100644 vscode-web-github1s/extensions/typescript-language-features/src/typescriptServiceClient.ts delete mode 100644 vscode-web-github1s/src/vs/editor/browser/controller/textAreaHandler.ts rename vscode-web-github1s/src/vs/{workbench/contrib/welcome/page/browser => github1s}/welcomePage.css (96%) create mode 100644 vscode-web-github1s/src/vs/github1s/welcomePage.ts create mode 100644 vscode-web-github1s/src/vs/workbench/common/editor/resourceEditorInput.ts delete mode 100644 vscode-web-github1s/src/vs/workbench/contrib/files/common/editors/fileEditorInput.ts delete mode 100644 vscode-web-github1s/src/vs/workbench/contrib/terminal/browser/terminalService.ts delete mode 100644 vscode-web-github1s/src/vs/workbench/contrib/url/browser/trustedDomains.ts delete mode 100644 vscode-web-github1s/src/vs/workbench/contrib/webview/browser/pre/main.js create mode 100644 vscode-web-github1s/src/vs/workbench/contrib/welcome/gettingStarted/browser/gettingStarted.ts delete mode 100644 vscode-web-github1s/src/vs/workbench/contrib/welcome/page/browser/vs_code_welcome_page.ts create mode 100644 vscode-web-github1s/src/vs/workbench/contrib/welcome/page/browser/welcomePage.contribution.ts delete mode 100644 vscode-web-github1s/src/vs/workbench/contrib/welcome/page/browser/welcomePage.ts delete mode 100644 vscode-web-github1s/src/vs/workbench/services/extensions/worker/extensionHostWorkerMain.ts diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 3ba06aca4..610e76de6 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -39,4 +39,4 @@ jobs: - run: yarn eslint - run: yarn build - uses: microsoft/playwright-github-action@v1 - - run: yarn test:ci + - run: GITHUB_TOKEN=${{ secrets.GITHUB_TOKEN }} yarn test:ci diff --git a/.github/workflows/test-wtih-vscode-build.yml b/.github/workflows/test-wtih-vscode-build.yml index 8fa811d6b..2dc9acd3b 100644 --- a/.github/workflows/test-wtih-vscode-build.yml +++ b/.github/workflows/test-wtih-vscode-build.yml @@ -39,4 +39,4 @@ jobs: - run: yarn build:vscode - run: yarn yalc && yarn build - uses: microsoft/playwright-github-action@v1 - - run: yarn test:ci + - run: GITHUB_TOKEN=${{ secrets.GITHUB_TOKEN }} yarn test:ci diff --git a/api/vscode-unpkg/index.js b/api/vscode-unpkg/index.js new file mode 100644 index 000000000..aea03720a --- /dev/null +++ b/api/vscode-unpkg/index.js @@ -0,0 +1,25 @@ +/** + * @file proxy vscode-unpkg.net + * @author netcon + */ + +const got = require('got'); +const url = require('url'); + +module.exports = async (req, res) => { + const pathname = new url.parse(req.url || '').pathname || ''; + const matches = pathname.match(/^\/api\/vscode-unpkg\/([^/]+)\/(.*)/); + + if (!matches) { + res.status(404); + return res.send('Not found'); + } + + const publisher = matches[1]; + const restPartsPath = matches[2]; + const requestUrl = `https://${publisher}.vscode-unpkg.net/${publisher}/${restPartsPath}`; + const response = await got.get(requestUrl); + + res.status(response.statusCode); + return res.send(response.body); +}; diff --git a/api/vscode-unpkg/package.json b/api/vscode-unpkg/package.json new file mode 100644 index 000000000..ca0c5a066 --- /dev/null +++ b/api/vscode-unpkg/package.json @@ -0,0 +1,10 @@ +{ + "name": "vscode-unpkg", + "version": "1.0.0", + "main": "index.js", + "license": "MIT", + "private": true, + "dependencies": { + "got": "^11.8.2" + } +} diff --git a/api/vscode-unpkg/yarn.lock b/api/vscode-unpkg/yarn.lock new file mode 100644 index 000000000..6e947efe3 --- /dev/null +++ b/api/vscode-unpkg/yarn.lock @@ -0,0 +1,204 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@sindresorhus/is@^4.0.0": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.0.1.tgz#d26729db850fa327b7cacc5522252194404226f5" + integrity sha512-Qm9hBEBu18wt1PO2flE7LPb30BHMQt1eQgbV76YntdNk73XZGpn3izvGTYxbGgzXKgbCjiia0uxTd3aTNQrY/g== + +"@szmarczak/http-timer@^4.0.5": + version "4.0.6" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" + integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== + dependencies: + defer-to-connect "^2.0.0" + +"@types/cacheable-request@^6.0.1": + version "6.0.2" + resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.2.tgz#c324da0197de0a98a2312156536ae262429ff6b9" + integrity sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA== + dependencies: + "@types/http-cache-semantics" "*" + "@types/keyv" "*" + "@types/node" "*" + "@types/responselike" "*" + +"@types/http-cache-semantics@*": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz#0ea7b61496902b95890dc4c3a116b60cb8dae812" + integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ== + +"@types/keyv@*": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.2.tgz#5d97bb65526c20b6e0845f6b0d2ade4f28604ee5" + integrity sha512-/FvAK2p4jQOaJ6CGDHJTqZcUtbZe820qIeTg7o0Shg7drB4JHeL+V/dhSaly7NXx6u8eSee+r7coT+yuJEvDLg== + dependencies: + "@types/node" "*" + +"@types/node@*": + version "16.7.10" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.7.10.tgz#7aa732cc47341c12a16b7d562f519c2383b6d4fc" + integrity sha512-S63Dlv4zIPb8x6MMTgDq5WWRJQe56iBEY0O3SOFA9JrRienkOVDXSXBjjJw6HTNQYSE2JI6GMCR6LVbIMHJVvA== + +"@types/responselike@*", "@types/responselike@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.0.tgz#251f4fe7d154d2bad125abe1b429b23afd262e29" + integrity sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA== + dependencies: + "@types/node" "*" + +cacheable-lookup@^5.0.3: + version "5.0.4" + resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005" + integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== + +cacheable-request@^7.0.1: + version "7.0.2" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.2.tgz#ea0d0b889364a25854757301ca12b2da77f91d27" + integrity sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^4.0.0" + lowercase-keys "^2.0.0" + normalize-url "^6.0.1" + responselike "^2.0.0" + +clone-response@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" + integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= + dependencies: + mimic-response "^1.0.0" + +decompress-response@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" + integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== + dependencies: + mimic-response "^3.1.0" + +defer-to-connect@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" + integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== + +end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +got@^11.8.2: + version "11.8.2" + resolved "https://registry.yarnpkg.com/got/-/got-11.8.2.tgz#7abb3959ea28c31f3576f1576c1effce23f33599" + integrity sha512-D0QywKgIe30ODs+fm8wMZiAcZjypcCodPNuMz5H9Mny7RJ+IjJ10BdmGW7OM7fHXP+O7r6ZwapQ/YQmMSvB0UQ== + dependencies: + "@sindresorhus/is" "^4.0.0" + "@szmarczak/http-timer" "^4.0.5" + "@types/cacheable-request" "^6.0.1" + "@types/responselike" "^1.0.0" + cacheable-lookup "^5.0.3" + cacheable-request "^7.0.1" + decompress-response "^6.0.0" + http2-wrapper "^1.0.0-beta.5.2" + lowercase-keys "^2.0.0" + p-cancelable "^2.0.0" + responselike "^2.0.0" + +http-cache-semantics@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" + integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== + +http2-wrapper@^1.0.0-beta.5.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d" + integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== + dependencies: + quick-lru "^5.1.1" + resolve-alpn "^1.0.0" + +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + +keyv@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.0.3.tgz#4f3aa98de254803cafcd2896734108daa35e4254" + integrity sha512-zdGa2TOpSZPq5mU6iowDARnMBZgtCqJ11dJROFi6tg6kTn4nuUdU09lFyLFSaHrWqpIJ+EBq4E8/Dc0Vx5vLdA== + dependencies: + json-buffer "3.0.1" + +lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" + integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + +mimic-response@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + +mimic-response@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" + integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== + +normalize-url@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" + integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== + +once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +p-cancelable@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" + integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +quick-lru@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" + integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== + +resolve-alpn@^1.0.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" + integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== + +responselike@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.0.tgz#26391bcc3174f750f9a79eacc40a12a5c42d7723" + integrity sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw== + dependencies: + lowercase-keys "^2.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= diff --git a/docs/guide.md b/docs/guide.md index 3c559620c..f88a867e5 100644 --- a/docs/guide.md +++ b/docs/guide.md @@ -1,6 +1,6 @@ # How it works -GitHub1s is based on [VS Code 1.55.0](https://github.com/microsoft/vscode/tree/1.52.1) now. VS Code can be built for a browser version officially. I also used the code and got inspired by [Code Server](https://github.com/cdr/code-server). +GitHub1s is based on [VS Code 1.60.0](https://github.com/microsoft/vscode/tree/1.60.0) now. VS Code can be built for a browser version officially. I also used the code and got inspired by [Code Server](https://github.com/cdr/code-server). Thanks to the very powerful and flexible extensibility of VS Code, we can easily implement a VS Code extension that provides the custom File IO ability using [FileSystemProvider API](https://code.visualstudio.com/api/references/vscode-api#FileSystemProvider). There is an official demo named [vscode-web-playground](https://github.com/microsoft/vscode-web-playground) which shows how it is used. diff --git a/extensions/dart-web/LICENSE b/extensions/dart-web/LICENSE deleted file mode 100644 index 1a4f6b68c..000000000 --- a/extensions/dart-web/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2016 Danny Tuppeny - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. \ No newline at end of file diff --git a/extensions/dart-web/README.md b/extensions/dart-web/README.md deleted file mode 100644 index ee961bf05..000000000 --- a/extensions/dart-web/README.md +++ /dev/null @@ -1,31 +0,0 @@ -[![Discord Chat](https://img.shields.io/badge/chat-discord-blue.svg)](https://discord.gg/xSTPEqm) -[![Gitter Chat](https://img.shields.io/badge/chat-gitter-blue.svg)](https://gitter.im/dart-code/Dart-Code) -[![Follow on Twitter](https://img.shields.io/badge/twitter-dartcode-blue.svg)](https://twitter.com/DartCode) -[![Contribute to Dart Code](https://img.shields.io/badge/help-contribute-551A8B.svg)](https://github.com/Dart-Code/Dart-Code/blob/master/CONTRIBUTING.md) - -# This extension is a fork from [Dart-Code](https://github.com/Dart-Code/Dart-Code) for github1s. - -# At present only languages features is reserved - -# I have deleted some files and only reserved the necessary code - -## Introduction - -Dart Code extends [VS Code](https://code.visualstudio.com/) with support for the -[Dart](https://www.dartlang.org/) programming language and for [Flutter](https://flutter.dev/) -mobile apps, and [AngularDart](https://angulardart.org) web apps. - -## Installation - -Dart Code can be [installed from the Visual Studio Code Marketplace](https://marketplace.visualstudio.com/items?itemName=Dart-Code.dart-code) or by [searching within VS Code](https://code.visualstudio.com/docs/editor/extension-gallery#_search-for-an-extension). - -## Features - -- Syntax highlighting -- Workspace symbol search -- Document symbol search -- Snippets - -## Release Notes - -For full release notes, see [the changelog](https://dartcode.org/releases/). diff --git a/extensions/dart-web/media/dart.png b/extensions/dart-web/media/dart.png deleted file mode 100755 index d091c28f04211f6ea515ecdd907ecf6e16ed0d85..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26796 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 Z@<4cGMpbux>MpeOE=xO$Y;(6u{|}bGKMw!^ diff --git a/extensions/dart-web/package.json b/extensions/dart-web/package.json deleted file mode 100644 index e0dc7cca3..000000000 --- a/extensions/dart-web/package.json +++ /dev/null @@ -1,96 +0,0 @@ -{ - "name": "dart-code", - "displayName": "Dart", - "description": "Dart language support and debugger for Visual Studio Code.", - "version": "3.20.0-dev", - "publisher": "Dart-Code", - "engines": { - "vscode": "^1.52.0" - }, - "license": "SEE LICENSE IN LICENSE", - "bugs": { - "url": "https://github.com/Dart-Code/Dart-Code/issues" - }, - "homepage": "https://dartcode.org/", - "repository": { - "type": "git", - "url": "https://github.com/Dart-Code/Dart-Code.git" - }, - "categories": [ - "Programming Languages", - "Snippets", - "Linters", - "Formatters", - "Debuggers" - ], - "keywords": [ - "dart", - "flutter", - "fuchsia", - "multi-root ready" - ], - "icon": "media/dart.png", - "activationEvents": [ - "onLanguage:dart" - ], - "contributes": { - "languages": [ - { - "id": "dart", - "extensions": [ - ".dart" - ], - "aliases": [ - "Dart" - ], - "configuration": "./syntaxes/dart-language-configuration.json" - } - ], - "grammars": [ - { - "language": "dart", - "scopeName": "source.dart", - "path": "./syntaxes/dart.json" - } - ], - "colors": [ - { - "id": "dart.closingLabels", - "description": "The color of the 'closing label' annotations shown against constructor, method invocations and lists that span multiple lines. If not supplied, the color for 'tab.inactiveForeground' will be used.", - "defaults": { - "dark": "tab.inactiveForeground", - "light": "tab.inactiveForeground", - "highContrast": "tab.inactiveForeground" - } - } - ], - "semanticTokenScopes": [ - { - "language": "dart", - "scopes": { - "keyword": [ - "keyword" - ], - "keyword.control": [ - "keyword.control" - ], - "property.declaration": [ - "entity.name.function.member" - ] - } - } - ], - "configurationDefaults": { - "[dart]": { - "editor.tabSize": 2, - "editor.insertSpaces": true, - "editor.detectIndentation": false, - "editor.suggest.insertMode": "replace" - } - } - }, - "scripts": { - "compile": "echo done", - "watch": "echo done" - } -} diff --git a/extensions/dart-web/snippets/dart.json b/extensions/dart-web/snippets/dart.json deleted file mode 100644 index 7e2541e3c..000000000 --- a/extensions/dart-web/snippets/dart.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - ".source.dart": { - "main": { - "prefix": "main", - "description": "Insert a main function, used as an entry point.", - "body": ["main(List args) {", " $0", "}"] - }, - "try": { - "prefix": "try", - "description": "Insert a try/catch block.", - "body": ["try {", " $0", "} catch (${1:e}) {", "}"] - }, - "if": { - "prefix": "if", - "description": "Insert an if statement.", - "body": ["if ($1) {", " $0", "}"] - }, - "if else": { - "prefix": "ife", - "description": "Insert an if statement with an else block.", - "body": ["if ($1) {", " $0", "} else {", "}"] - }, - "switch case": { - "prefix": "switch", - "description": "Insert a switch statement.", - "body": [ - "switch ($1) {", - " case $2:", - " $0", - " break;", - " default:", - "}" - ] - }, - "for": { - "prefix": "for", - "description": "Insert a for loop.", - "body": ["for (var i = 0; i < ${1:count}; i++) {", " $0", "}"] - }, - "for in": { - "prefix": "fori", - "description": "Insert a for-in loop.", - "body": ["for (var ${1:item} in ${2:items}) {", " $0", "}"] - }, - "while": { - "prefix": "while", - "description": "Insert a while loop.", - "body": ["while ($1) {", " $0", "}"] - }, - "do while": { - "prefix": "do", - "description": "Insert a do-while loop.", - "body": ["do {", " $0", "} while ($1);"] - }, - "fun": { - "prefix": "fun", - "description": "Insert a function definition.", - "body": ["${3:void} ${1:name}(${2:args}) {", " $0", "}"] - }, - "class": { - "prefix": "class", - "description": "Insert a class definition.", - "body": ["class ${1:Name} {", " $0", "}"] - }, - "typedef": { - "prefix": "typedef", - "description": "Insert a typedef.", - "body": "typedef ${1:Type} ${2:Name}(${3:params});" - }, - "test": { - "prefix": "test", - "description": "Insert a test block.", - "body": ["test('$1', () {", " $0", "});"] - }, - "group": { - "prefix": "group", - "description": "Insert a test group block.", - "body": ["group('$1', () {", " $0", "});"] - } - } -} diff --git a/extensions/dart-web/snippets/flutter.json b/extensions/dart-web/snippets/flutter.json deleted file mode 100644 index 3c09049c3..000000000 --- a/extensions/dart-web/snippets/flutter.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - ".source.dart": { - "Flutter stateless widget": { - "prefix": "stless", - "description": "Insert a StatelessWidget", - "body": [ - "class $1 extends StatelessWidget {", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " $2", - " );", - " }", - "}" - ] - }, - "Flutter stateful widget": { - "prefix": "stful", - "description": "Insert a StatefulWidget", - "body": [ - "class $1 extends StatefulWidget {", - " @override", - " _$1State createState() => _$1State();", - "}", - "", - "class _$1State extends State<$1> {", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " $2", - " );", - " }", - "}" - ] - }, - "Flutter widget with AnimationController": { - "prefix": "stanim", - "description": "Insert a StatefulWidget with an AnimationController", - "body": [ - "class $1 extends StatefulWidget {", - " @override", - " _$1State createState() => _$1State();", - "}", - "", - "class _$1State extends State<$1>", - " with SingleTickerProviderStateMixin {", - " AnimationController _controller;", - "", - " @override", - " void initState() {", - " super.initState();", - " _controller = AnimationController(vsync: this);", - " }", - "", - " @override", - " void dispose() {", - " super.dispose();", - " _controller.dispose();", - " }", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " $2", - " );", - " }", - "}" - ] - } - } -} diff --git a/extensions/dart-web/syntaxes/dart-language-configuration.json b/extensions/dart-web/syntaxes/dart-language-configuration.json deleted file mode 100644 index 171fa5beb..000000000 --- a/extensions/dart-web/syntaxes/dart-language-configuration.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "comments": { - "lineComment": "//", - "blockComment": ["/*", "*/"] - }, - "brackets": [ - ["{", "}"], - ["[", "]"], - ["(", ")"] - ], - "autoClosingPairs": [{ - "open": "{", - "close": "}" - }, - { - "open": "[", - "close": "]" - }, - { - "open": "(", - "close": ")" - }, - { - "open": "'", - "close": "'", - "notIn": ["string", "comment"] - }, - { - "open": "\"", - "close": "\"", - "notIn": ["string"] - }, - { - "open": "`", - "close": "`", - "notIn": ["string", "comment"] - }, - { - "open": "/**", - "close": " */", - "notIn": ["string"] - } - ], - "surroundingPairs": [ - ["{", "}"], - ["[", "]"], - ["(", ")"], - ["<", ">"], - ["'", "'"], - ["\"", "\""], - ["`", "`"] - ] -} \ No newline at end of file diff --git a/extensions/dart-web/syntaxes/dart.json b/extensions/dart-web/syntaxes/dart.json deleted file mode 100644 index d8b255cd1..000000000 --- a/extensions/dart-web/syntaxes/dart.json +++ /dev/null @@ -1,436 +0,0 @@ -{ - "fileTypes": ["dart"], - "foldingStartMarker": "\\{\\s*$", - "foldingStopMarker": "^\\s*\\}", - "name": "Dart", - "patterns": [ - { - "match": "^(#!.*)$", - "name": "meta.preprocessor.script.dart" - }, - { - "begin": "^\\w*\\b(library|import|part of|part|export)\\b", - "beginCaptures": { - "0": { - "name": "keyword.other.import.dart" - } - }, - "end": ";", - "endCaptures": { - "0": { - "name": "punctuation.terminator.dart" - } - }, - "name": "meta.declaration.dart", - "patterns": [ - { - "include": "#strings" - }, - { - "include": "#comments" - }, - { - "match": "\\b(as|show|hide)\\b", - "name": "keyword.other.import.dart" - } - ] - }, - { - "include": "#comments" - }, - { - "include": "#punctuation" - }, - { - "include": "#annotations" - }, - { - "include": "#keywords" - }, - { - "include": "#constants-and-special-vars" - }, - { - "include": "#strings" - } - ], - "repository": { - "dartdoc": { - "patterns": [ - { - "match": "(\\[.*?\\])", - "captures": { - "0": { - "name": "variable.name.source.dart" - } - } - }, - { - "match": "^ {4,}(?![ \\*]).*", - "captures": { - "0": { - "name": "variable.name.source.dart" - } - } - }, - { - "begin": "```.*?$", - "end": "```", - "contentName": "variable.other.source.dart" - }, - { - "match": "(`.*?`)", - "captures": { - "0": { - "name": "variable.other.source.dart" - } - } - }, - { - "match": "(`.*?`)", - "captures": { - "0": { - "name": "variable.other.source.dart" - } - } - }, - { - "match": "(\\* (( ).*))$", - "captures": { - "2": { - "name": "variable.other.source.dart" - } - } - }, - { - "match": "(\\* .*)$" - } - ] - }, - "comments": { - "patterns": [ - { - "captures": { - "0": { - "name": "punctuation.definition.comment.dart" - } - }, - "match": "/\\*\\*/", - "name": "comment.block.empty.dart" - }, - { - "include": "#comments-doc-oldschool" - }, - { - "include": "#comments-doc" - }, - { - "include": "#comments-inline" - } - ] - }, - "comments-doc-oldschool": { - "patterns": [ - { - "begin": "/\\*\\*", - "end": "\\*/", - "name": "comment.block.documentation.dart", - "patterns": [ - { - "include": "#comments-doc-oldschool" - }, - { - "include": "#comments-block" - }, - { - "include": "#dartdoc" - } - ] - } - ] - }, - "comments-doc": { - "patterns": [ - { - "begin": "///", - "while": "^\\s*///", - "patterns": [ - { - "include": "#dartdoc" - } - ], - "name": "comment.block.documentation.dart" - } - ] - }, - "comments-inline": { - "patterns": [ - { - "include": "#comments-block" - }, - { - "captures": { - "1": { - "name": "comment.line.double-slash.dart" - } - }, - "match": "((//).*)$" - } - ] - }, - "comments-block": { - "patterns": [ - { - "begin": "/\\*", - "end": "\\*/", - "name": "comment.block.dart", - "patterns": [ - { - "include": "#comments-block" - } - ] - } - ] - }, - "annotations": { - "patterns": [ - { - "match": "@[a-zA-Z]+", - "name": "storage.type.annotation.dart" - } - ] - }, - "constants-and-special-vars": { - "patterns": [ - { - "match": "(?)", - "captures": { - "1": { - "name": "entity.name.function.dart" - } - } - } - ] - }, - "keywords": { - "patterns": [ - { - "match": "(?>>?|~|\\^|\\||&)", - "name": "keyword.operator.bitwise.dart" - }, - { - "match": "((&|\\^|\\||<<|>>>?)=)", - "name": "keyword.operator.assignment.bitwise.dart" - }, - { - "match": "(=>)", - "name": "keyword.operator.closure.dart" - }, - { - "match": "(==|!=|<=?|>=?)", - "name": "keyword.operator.comparison.dart" - }, - { - "match": "(([+*/%-]|\\~)=)", - "name": "keyword.operator.assignment.arithmetic.dart" - }, - { - "match": "(=)", - "name": "keyword.operator.assignment.dart" - }, - { - "match": "(\\-\\-|\\+\\+)", - "name": "keyword.operator.increment-decrement.dart" - }, - { - "match": "(\\-|\\+|\\*|\\/|\\~\\/|%)", - "name": "keyword.operator.arithmetic.dart" - }, - { - "match": "(!|&&|\\|\\|)", - "name": "keyword.operator.logical.dart" - }, - { - "match": "(? -

- logo -

- -## Preview - -> ![nbpreviewer demo](https://thumbs.gfycat.com/FarawayTerrificChameleon-max-14mb.gif) - -## Quick Start - -- Install the extension -- Open a Jupyter Notebook -- Click Show Preview menu button from Editor/Title Menu - -> ![nbpreviewer quick start](https://thumbs.gfycat.com/ImaginativeCooperativeDogwoodtwigborer-max-14mb.gif) diff --git a/extensions/jupyter-web/extension.webpack.config.js b/extensions/jupyter-web/extension.webpack.config.js deleted file mode 100644 index 6b024d809..000000000 --- a/extensions/jupyter-web/extension.webpack.config.js +++ /dev/null @@ -1,41 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -//@ts-check -'use strict'; - -//@ts-check -/** @typedef {import('webpack').Configuration} WebpackConfig **/ - -const path = require('path'); - -module.exports = /** @type WebpackConfig */ { - context: __dirname, - mode: 'none', // this leaves the source code as close as possible to the original (when packaging we set this to 'production') - target: 'webworker', // extensions run in a webworker context - entry: { - extension: './src/extension.js', - }, - resolve: { - mainFields: ['module', 'main'], - extensions: ['.ts', '.js'], // support ts-files and js-files - alias: { - https: 'https-browserify', - http: 'http-browserify', - }, - }, - externals: { - vscode: 'commonjs vscode', // ignored because it doesn't exist - }, - performance: { - hints: false, - }, - output: { - filename: 'extension.js', - path: path.join(__dirname, 'dist'), - libraryTarget: 'commonjs', - }, - devtool: 'source-map', -}; diff --git a/extensions/jupyter-web/images/jupyter.png b/extensions/jupyter-web/images/jupyter.png deleted file mode 100644 index 169a637b65246fa293d4d97fb13ca48022218f9f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26597 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 diff --git a/extensions/jupyter-web/images/sample.PNG b/extensions/jupyter-web/images/sample.PNG deleted file mode 100644 index b6b9d8c0ec60d587ce655d12eefcb4b470b3eb53..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3510874 zcmeFadz4hib^klLYu&r<&2RmF|76`H_ue?x4)}={DRmPavX4MuoFRIGmb5A5+gf5?_1wG zy-)8xUFUT7Oiy>u%x0}aol}opRlD{%ea>fgRUMi;d+LAx{r~s(%gW0B`?TAd=9iWI z?>Ci|{coT8KmQLCQ~B<%KWc*iYs+m*x0jXukJC7Q?}=gm>e_R8HITTJey3bp_8qM^?e5sLd3*it@q?_~dUKBG zszEo|EIT%i9~4K0H!Ybp_ol|qZS6OWsvI?fo>vrteQeRbd*Ijp2-c?)K zxovG#&DgPHtExvWN5 zcZ?r22o?GN68-Af;#ahJdqQ_ci&eW@w^Y?sR#&+St#0$nY}vVOlWp4SwyO3`?H%o# zcWgK1YMkY^tn1v-xqV${NR@taXvJnsX3g^JcDA>p!&&wA9nHIp3KA-HmfXJJ?k(+A z^V_#~?%dYa-n`3nWw5LFJJzpB4o-?Bq=dG;efRp1Vo33dSyS*vsKNBLzHwW7>yFNC z3pzVDP4KL2F01gS#>Sh<7q8#Ey7R8>6%AFv+{vL%3Tkg^-O)b5m}1?C>Y5SNbqhw; z*4K=#udN+cJ*vL8S_tuS24u|YT)lqH-3}QeM;nWlGDOax40G$OZr#zEl@ys*$XVT1 zzov6rN9&FW>pNQ4wpVT0ytbh#87Xr5236nKxv6uTX;%A$+J-7uv?yhbtbW?&?K@gG zx3y1enqVR-*RNk)-!^*m>d_-dw~wg3_12Li+DG47H)7SAF=I!JS~a?DRoks=#;hLG zYLz%^mMoqox~a2mCvKF4=+!xj7RA#<&)K%#Jmgw8i9Be1u2ne1q*Zm>`t8Ov?-nL& z4A(x!Zg1b38p{cr*4xL?mey_C+i|mvAH;W?|NQbFPbgz=+WOWuJjf=r;a+H8-B6Vh zn{1X}GEr=OcL&guFN%lPao4)`%~3a$C(7mu7qY!`&5pZTx3$OD8k@*)n|lINO9Ul1 zRN4)f+P~O=`93uW6`Ci%Zt*$E~$--=c=xZDv}vgT~Zqv z&sAL+RU|X0x}-KTo~ybtsz_!~bxCbxJXdvPRFTY}>XO>Xc&_Tos3Ms`)g`r&@m$rF zQAIL?s!M7ksP<2UdWIR`OWmJ*Opz4y^$at>m%BUilLDeO-k?}lIUB924^Vh!F zO!T|U%;=l)@(Uj{vjJ~vyKVlgva&t5l$G6gu&nHTGU3n4%63+lm0i8FtgQZ%Wo3WV z`Pj;@O(`3-^u)BL_=4TPS4JjNS*&~z@eywvOM0jd`hpD%8vH@uZrOe{Oy0|VSr-`F zKmFjJ=%G4L8&Dfi8|Y&;fcJ;K{QIMA?;r0G{c#-i-ALaH_1#!)Ky5&6pg-7v0!W3f zeG)q3=If6ynA)d73LN?vaOe*|gxUvvp;H^kj}0h*RDh@NF}-60`i#oYGfMTSdQ=-w z8&Df4t_>)FQ~;>}Qg{LDi*xV1IOn2Q{ZT0HkAmu7^{+OdHqc!gPyku{-_TrsZ#8e< z8L#f%lUh!n=V}9L18M_m1EpjG3Lq6gDu7e~SyJAlrSyQ*w&)MG+JM@C+CcU;pa8P( z04;@&eQT`rIh6f#NOh&UQX5bkP#Y*+8&CkL08#;@0!RgrI_+7fzN-zW4X6$D*aj3p z_ARKT5VG%#mwrr_?#Hx_jgF1lfZBlCK=wAE08#;@0!Rgr3Lq6c^cXzo4{!EAys9hJ zRe!Ys1(1CQXeoT`TVvH!FtDEsG->PmH`HlQ}3Hc+}Ypa4<E=Qv0PZfNBHT+kgVdz5}!rKK8A#(&te2&mq;7>Pl@uZ9r|HbZtNZqyor+ z4Iqc!Ox5uws#~&(M$KJ9Lu;x^3dRk@4+Qn&Zm z`jbr@ZlWH)L=GK7@hu0bY1hLv=gAW^?^9oA3Si8uGa0u2{L8 z{`sH(i2%Ql{<+V+Nc``2zxy5i@|VA)!%sf$EGy-G`#XO}Z@&3eKVP8$B8Rq3oYSsw>r%+JM?Xf3*Px zkVW=jbb+Z{Kv^z%U3G=U z=Jw?@e9V~0I`RP^0V^MT=tE8b2`Gs)L8$j;Zxs~?qyNCANb62;#B>^7+9bHE* z5VF7iU}(SeWk_v6ZJ?Mo@WGq@lm-tTOhbkYp_^~MnLc>a2h5ROT(<4TZ+GxFw;0zh z0Lh+<(`QVfuYBdN=;uHGIc?pxIkLSd0~pACC?tS<@4ffvU;p)AXmxw5UwD<2h~t!w~Dv=`yXkt67_PdrM{!Sl~Q=l4IVo>EMM=i`rl^dr-+ zpZXAz;UnUZ=JJko^(EVTQ1j{UjM{+OfZ9O+wSh2iMh26vu@5Wb${Q7z?K`6@pOo7x z9*}$Y?WV7v`6it;e>vvk+2=l;6*yyf*Rgqx@xt0;Jpth%ICa_tTOMF;`_2v<4=+JX zJzlnaz6E&j82s>q_u1pX!My}oO;Z|Zv+q^7&jP&}vzn|dKsCs^+k}vXGHvZGemhsT zE-`Jm+or)Q5nhPg4wifHL-*SH?mw`H+E#nh%DE4if{pxl?cQqZ;CdxoL*LL>8OP^q z*WF2IBVVH*3?w-YA?m@DZ`8|mLnhkfc~b78+ZW8V@N)lsyJ_D1>Ap-%LEm9?z%n*< zv=jRDz=utLg(qnyUCH(o;v7codO^!3u6Futn)Ae~*5eV=uH^v$+0eS#g2?F)ekO8Z z$ZP;4=fOwLqmMp9AAju6jJ~(h@Db%^EVt7q9{;$105l>FQ>6hLANknBei}d|K0@Ra zY7o>j(s(ghz8 zhcuZt>Rdjc^t}K6fa=)l*s2W_)&>9_ckS9mU;gr!Y5)HH7Di?pm+e^L_dn|So=e)M z%^T?SH@;5a`n$9KaX8=+7$z?YK%z|Rsypc2cmJ7QdF5sL+0TBO0=WRpe*W_=<0bhE z-y08}c>rSoke4o9r0;(BI|NV4|NPJYOeqVmN_bZy4IYedoqm%5JW*$`?7#oVztiEv zpK$66dB0`eqyO@|Mg%0Mc@10J7zharM9ion-E|R zIzfK)7x@AAo_+Sywtj|$0JG>5(tq%S3sx5D#rp=l5#g1Hf3hsn7cHJo-}&yh>9@cA ztu1@?>Q(y(RBkg*@5Xz~zx>M;I(znvuNUOOAps=Eee;`Nw|YYwWS|_{0R3>Apl8|l zSIjIcj4eDsA!q7slj+Al{xN<2^T%vC2GK~vc%d)oFSi-GKpT1X2>>YS?(E!X<-PXW zEA;n&|2=!o?TiZH`6wYIJRcc8O0UQ$8A!|a9@Kn=eXgp$Ro`j@Y6FF|fiRd@2mqPw zJEJR~)KRYh$k}tJ(%KEHX#K|3{;_QN?LPF10#pEK_aC^&0K4th6L9JBc^0ItZok8p z#}w;(_U@qh3#MDR2amyh`|qOJbEnw!pr_vYjcs-+GuBCjXW^cEwp%Ylv;lb!erPYP zGT^Xj%6QY(HUskRrrQ_Jpe4(^de^OQwGea3(zzCPA`i-L+~nm&`v4=?tX*kgCGs%@ z1i%E~+k5XWzkRar0D)-x9V-{5=>{H;yYJpcYYc?sGLQ#v$yu{KfXeX<4;es0f2b2W z0`!C&fKGT>BA#{WUGKDD5;6cDx9`|wy)RqamRSJ2{Eh{_Uc+?7?I>gjBhK`)7M4EF z07iz6vp;d1rtE#p_kn8-V8{zo5SS^2^o}GTXRp#{lmE z!Do7RuSbs=NedRuqebQqYJ4;`Ps&PuCIAVz1jq!~1ehg(60QNd&~BFpBmme8FFa3; zO%p8~WVnarQ~1HiDWtBaoe|faO_yZ~AzW@IFbm78z z3mp*$?@K^OwCnZPU$qbpOSAy|9Xs|}3uw_tcq@MU+h;BGLpcD~lc)aLf=<*4*#LO^ z_wTjxQ3pd=*=HAk#1wew0cpSb)ph#8KVGn~6Xl>+z*NlI!16Hw!>AW+`nP}kx&7lS z^5H!RW4(R*7AuPZB=VtMJeGg`*I%Ze{N%^>kGE_aD35VM-GG(oE1)o7rfhqra|t24 z10Nwj+j~&+<>z^+dQ?5C4X6#2q74)iKxX^S=*lN`Sug-8VI<%rAf*df0iwa{5U`EY z;q?cQ$G{G-jMD()?%lV`LPW$#0D0T=xP_JNYghRB;Z?Zjo*j0*MdXF|AIp+}4jzO^ z=QM|E&6}PXDA&fZF3tw0| zreE6)XCD0m)y|wxlREG70px8TIzn>}zwV_!cHC~09VRDR00|Gox$|b)_F|nyyukCc z>h1zayv#my=mF#XyU5oA;3Zzf0U-J3UW@ByTSqQ+wq-k0#4#I@|BgrG7$ z)42jj{h^jWE_$x^pf*riHh{lK!}IYgU-^plgv52WaoLU~-UBlIR%Dy*0+0+M5duyk zk4s(@fCTXS=C{5+u#W=K_!yFaF5)NW||urg8(2ojmy!3#S07 zxJ}sf1W*fJcmQc(WjQ~G3?Ok0_y-`yFpt-Ogl8V&(Pl0ONCt2Sz#0UQ$Pdpzcq<}5 z(g8q^eEQEVBm_JKtYcY#Y{-vy0)!H}p^xYbyaC}E2oMU;$YtSS3jMNdc#{J1az8kq z3?+aB&M|hUv8hVBPrJiIT!p`NiYXHdLnvh}TWPG;wpyqQt zcgxD|qy6T?L6xIAP#aJi=npnfObVIpi=!)_)P1i|NY^}Uo{xfVGq*czjy22U`O~ruqU^&PW+=g4y%NFC-2)a1OP++tdR5GkB zVS44Zvaa~LkRgm%zMbWA&hxOR8R9r;^L@TcB)dj(n9q6G(p3`ktb0l!gY&d`J~zt_ zZhMXTf^lIw>n?@VdD!~HE`MC~T^aYVumy(buJ3Y6boe~Ig{j&+a%o< zB>@YT<@_8{GroM87w3?}bH_0+8uQtCo;cFrvdE;9`zHH=b9PAu zorGH?^8MJjhBCdBV}SGEKg{Vy9U!itkC?V{{`^1CXP$e;?&|Z@Q%_p@>T+ET_J^+} zfy8`lIVW4^VVBl3GTY~z=F@Rg8&Df4mJJjWK<4W`vR43PPe7ClpfT8k8z0~yAR5;Z zJ37}I=(8uq zrBljtxk1YGAaD#`bKW3;47!n`|8NzBuCU!U=4H39Sz%o|d7ibD!E%EDGE7&TzmOqr zdVaafHN;Ldm|s0=)&iQiVUOqX`0+1N)7_8w?vRZ;51Bm4Z3|s>00KVz@PjF?h{(t8 zh&Xq-N-`uwdUxF*XU&>s-5?h%oSUWx{F$ETN^!d}|ERYCr0ztcKgPxSG1hw3_S6PS z!v^pkz`r}i3|#;+2E>J z4R=y58+3yNJp9|g{To{c=3{d{8Ajun11OP=oxR4@Vjvs(7 z#ynUS*Kl)0dE|i};OYsGiEBA7uCg*N2p<6)<(zD|L+Va6rSa_2-w+)KwE?w(zF-5z z1d#dCPp<&TE!#KIm&^h!uf6eF%JI_i&(n(5=&hWi03=>)F((^yq2)r5yp=Sk@7R@` zTaASx0Tq!y2*?1~;HlWMVv$``5`c}pBLO+F6VBT8clrxKB8}%>dkawRCboC3d)x^UAp$Jg=M=f&>g)w_%lS3wE$UdjL?`15z#oiG?+>s|+Bfgomgb^#O)r z;Y;)z{RhP5da;-#7KFTO_ZABz5iezMz94`M(-r40WQZF;zT|cHe8M_2KRvM<4R)cK z_Q0oUeEasSWRIyEX%}h2i|VxL&31R0J6l`qqKgR8rc3}5bEdIl3@?f#y$^ZLcITE& zRu+IK=6pdWcCxv5-yXZ*(d5SQDeawq`)u0=%)Q1!kjq;ZTTt5D022KLgoGy~7JlR% zXmZ&G8#40sa8o(@BB3^*HlQ|8SR255KzDzSgXLD5-_g&%^f@~IrQ<2bUmB1$eMa;j z2y+FHSQHSz3G=aW&TYYbTK*2 zLC}Ty*jPvs?L_~u=pyETzxmeR+II*n1PQM{Kr+aImmcO>zwuWm>^0|q_0=!g_HkVZ z0U+U}_;+U4A9#Oaofmi@0-z!t3oN28{^RDcW1qEimH{lG8_ZM29B8=^B;j8+Hx<)9$R@3qqm|SUeJSq8uP656q$s1Of?u$Q!4;(6B@UKp}z_ajudWL4I(Z=2R+|5A=E zt}zW7FSPJL1Rz8^G66{J8iN;lY*~$R5Fg)vsV1Ag_=|DL(AAP5Kg|HlQ}3Hjvo{@D7l# z--}tZr_qDv4|ESdawz5a&;thuf1r!1CszOouRy>%9MVJZ@ZnF;uYdh(x_mkc~*xFzA2tE}t~@=9=qH2k3wUU)ps7;$(vz~Y6NvK-uc8|eUu z*q$1o4qk(JSK#(xDmpwe0o&LElDD%C%0k@$n~0a&Msu67{Wc&ZWFq~?rky)>Zna~? z01~=_9PC7c_OMqX%LwX{;}N<5BxIqzsFU^m=}$lH+XWWB#284=%-|TnD-?O~4|>9m zI$SUEN?pSf5>S@6#O8e2gf1^fS6q}Veg0&A{-};rM`{CV1O43w6hN96%|ZdE{#wr} z14E?;XIMY6)i=BrTUX`oK^l~aZN4E3fHs)cSFZ7JiF#4XHVxCUN7U8P=mmG!W7z0X zd6AoK{hBWwZua*d4(*@59H|Yc4fIzVz&k`={9Oagg2$WO*`zP_L))DGPSIa<(qEq$ z+AsY*R2xtmP#ehJ1^^(tbCi;fdu0lCUx8Sq&`zw$h_xm$r8}xU@V4B!D|JmuSN@>) zWiU_Elm_b&iVbdpX?^J$H&K6isnmX?elV2M15(?P{STt*N_C|+pf-T_h`#un_T15D ztydnVG55vxYnxNwBl@F0^!cjKSG57P0kr|OfgEh0tn5D8U$SePDTVB3uAEU65_7FF zHyiW2;a1s~sAI6LxC8s+Tc-9&7lO>;*QI2CShNrNmZUZ?Fm0f(QAo_!##~#>v&I}{ z{SEH_G_S9Yu|87=<}+2tUB_K*Ky9GE*?r~Y254X6#M4fJmtPynd_vQK(K;=!aZ z#-;OOoX@e)AD#aFqod=i_($6#HFKyf%E{@zUm8y+JM?Xf3g7ukfrlms_!-ZYb^THb3*%~zk6x} zY6EHm1J?!=Kq`P#0I2}7qyVh`APw9fBprJld$obSZ37A*`xo?5h*>)0sn5o~{cP0n z)A3UqP#aJi@N7T> zY*PKH{?rE42Gj;h!v+*UDu7e~sQ|Lq0AyL&eYC$jUqSi{Q5wGxIu1GxY6EHmx!QnI z$o@sXy7L>ZWqQX3a=jNdzdpa!2Gj=B2Gj;h(FT-4Duq-EsT8u;C}ej&L`v~Nscq69 zaJ2!o0kwh5HlP5qci>ZZeoM7X{~8N@{$zgssE$-eY6EHmY6GQj0}3D&Kq`P#0I2{{ z=V9wSbhQDs0kwf1+kgVd{sp}hVwTQ$>PL0ye^l!j=@_XEs12wMWVQhXkP0CCB!C<= z_=6<{&GaQbe=q46TYY$Eet4^nR7Yw9Y6GQa0}3GX_gkp%6{<^V1Nv^H&-+q)-fMf* zCe;Si2D)PdDF9Ob(CN9p_^1u24X6#M4X6#M4fIzV7!v!Rbn`7Aq?`WdpU|It;E(AK z|L6~>xqJl8FCR&_l~+-dIiFZQj8??P*gtqpnHr~Y4WnuP{F!vyv_^_gZm{v=%ZE~Z zd4-<`Y0%l6S#cZQI%+tL966L~Yll%y%}}bUE~n~hFF($aK5Enmn>KOcD4T}(V(NX` zv?kN8>YNV%Nd4Dy4gAAD`~!7$b(`CZ5rYWr3Y6%6DQVpt9}KL`FU6W?svbdz(D{91+faE)dtiC*arUd zKmU_({KtR%haRefer*Ha{`R-&fBmojRg~j*zxy5G$k#vluBiZ00c5v6GNcjdxdH>V z0kr|O0kwg?W&9&&Kf+>Ij~Y9UW`!dHuLi_BT{|LEbj4tn5D8-)J*IDeMXv zHxv@CjpN3Rv?0>q772GqxJXvlR9H92%BmRQV7E!QN3wDo8b(r6V;xPK>bYMwP99_P zfnvhF68R=hxRpkX7~?(WG^3aP|}iHnA63u*(Y zHoz28LyyL)9{R5yzVn^$SQ5xYuoz+Y-eS^A@w+TSrI1DmQXzV-`cNBC8&Dfi8&DhQ z|2E*FkWp@saBqD5#LEPC$Y-AYls&&^?=JfeAzdMn59zQWc7Hgwp{ z*3}Xr@}X|D3D=Or?wN>#yix&>U;EnE=&7fkN;zJ8?X~nb+aAW8KY!lVapcGmdiULT zeQBsGSU=jt|1dx5bD#U1%_HMEy}O|T$W-8<07mtpHlQ}3HlQ{z&};zj0{!Km{H{^} znH7MnrL#k}(fdOtQD;{9`~QcVG$K9k{qdf-Yz6Jy>K*H*dkcsK^Zlmv%0zu^-~S()K*IRoj=paaUccE~O2)0A!RK zBo=^#8{~?WOYK6CGiFYqrsj$E8t2XCeEs@1`&{9LA`!}bs6W+Z(o2U-*|uVzmkNO7 z7jFQFM`NGO`xm-g9kouuL&_1-aziRVp18M_m1F1Hk0I~=l z)We6zXv2op^zg$6sj+E75ns+r6hNAVr!EayK*x$OHpTup>XY?1H2csCKyl6VSk5+$ zasviHvRzvcsQ|K1+B}b;hB@EsI^MkxOI-jm$^#M$K*9qOKoMS!2p@awqc+6(#!YMJ z@y9=AJQgebg(8FbFs?ywNtDG=N@Ly^03>@Y0usV=5uS?AJ@;G+Fw7SGWeX64K$7K0 zm1i%>T-v4pGW8=&KT1^}Y6EHmY6EHm1I-2$KoD+R~t|pP#fsE4Jd#t z@JHRsl}l*m%&8VU785`oh_#!k*O-2dV_XUdKw6i9fER4qJUSLzK-bOr^;jJ(hrZ1A zn3%SGB(~hfzdvLHU5ZswJfX|D$#>Sod9phVOq@gqd_7mvX(Q`GY&aeF+pwHY#_-WL zE>S19i^Fz0ZPPP-*xgHSbzPyij=oIiuU$9$yPKoyEFE2yD0l3fxjrS@@;sftVe%hD zI?gZ9Tc0=BAEDRJcX>K7eSZ6BOJdB??{oC}kyCUr zp|fk3PSAnL5pDJRQ$sEORN~}RYCEO6y`F0Qe3@lA0c7M<UPTMrme4k|aq|LNIei2T6K$%F$El6WZkj_28*WM72NR4}r|Co8n0jip zd6v<-+pAK_N9jCLHn$-RK+1Oe`khNNYQ4SmA$D;bZ~Sm1cw zTzi1hOTTUaWtT~tU4AniwP0 z=OCRiI?T4+XkWwPmW0=14K3ShKv_-hZFB-i?yD2j0YDlEw|NfD7=`*OXl}cl#%GeVN_w{R8)?nmQBk{I|nCpT0?UekEXiBx{{TRQ)!D_j}ZWJ(-PXUp_$^yQ&UfC z(6#WY6C6+8RY>9k48+D#(IsdtN4#o{ZsD>Akz_H*z{}UQ~;?T zxqbN~H(zZpE4z>O=S!H%(VI$bKy5&6;Mb%SvPfUTrB5Lz86xHp!%H!<#iS&ImO{=H zZg`x}e6<*t$@k47jz^_lV{;6#T$Gqs%@lGRt>QdZo^b1vb#b1Qa4=PmpF~rpjHQvo z313NIdS@W1XYaXbIKcb$99v3-ybrQj$$lQbdfAOeDru~o-&^5s*-WYYjtqxSd#J{JVjTH z>*I@7j&uc0)D4$Tncw6KlN~F^-0K7-s~k;jlH_qaD~3_SlsGj{96>`lE)aH)LYg_> z@nm0XXV3Q+q>PQ3V75n{Ky{)Xo4z<~mln8m3d#ryDX$IXoM9+u3XvO8O_QfgqRC_3 zJLn|GDIlBM8!+^BZ3``H@buuhL5>vZMxLRsOfjM7 zoo&KJ)!BxmP9w*K`=O!GcT#uB@z*%jMPY5gMIocyAmP@?i#9&=(1Ct!&q^UvDP+_f z>`W9==V9xIw0=md4X6#M4Rpr_e*4?sQq<8MnfWXe)i$K%v#xyXqD;nr6HYSo^^13d<~s2uBn(04;NL;V-LDShC#v< z9YCMi07xIKdb)JVwva9`|2i>mI0e-8CV&)+PNr-F9o9B~o9LLCt2~Fc7}&>Kai;)B zl+QGmJQP4?kj*yjgnzftlodfY$OSY%;r3_&qCYn~*>=`EkfNNj(N9cJY5+H0>_ItbT8j>kFXVDpYN zxo(@C$&C@|IKuu#l~(|%;9($sIBTEP?$ri*ZUdzb_)5Kfecc8XKr##{aM-^9q&HvN z1C^c!>H#V9-%LA=M`@RtyM8XK#W52ekn9DD zwq^j3htHS=BV~T>pEDG5ud{)6P8owJ5{x-PT`E|^M{Npxt8X-Os8c;4<%e%&^DHyZ zdMY&~=3&Rm173i&7jv} zORUWXJs+{v^&Kmg_zOW|yX%jC{3HINk5OKfSQrvslvqR(<=%MXOTL_Ep8b?BqY(X% zs-si@WEk+vcYG8;%%-lMmJil}kB+|n;iT>FIebtZst(l#2DS~9I^Zky_VxAqM*(D! zKA!tNfHaFkTHW1j7KyymPP_I1V=7EbE(BSdvJj+&m7%)Fjx-%+cbkgjwBgXa@`E-5 zfIM>6EbwR+JnU?sc;}OL!NVK=;*Hq>$cx7p**4AI^*p_8c5VqSnD~%^ch@c(@5f6o z`!F%;W5`SMcHp^U`wPH0m9AJ%$J7NnSRHM&oU%9*}`C;PKP2TladVQ*?2Ev z`|D=o!3fXDnX{($%kdqE021Dm@SubzWw!s=yAfq`^}39zLjmN#h7NuGqgmUp_Nz9K z9~&rjz*p++>+5!?0J6Xzk*mxq?~gwEaLV!U!w=Z4u?zPh=6N9|x5DNvr#;}6^u80` ziqb35PP67Ron~6_0<*1k@*^r98*cz2Pbc0$SIjofoxYxhOg}DJmUXb#)X`-j9O}ts zE9~ner%9(yKW;H=I?C;!U#5#W0!X{PHg;|?rB5HKnAx6Z#Pr0v)`2_RR>1bX&#V?t-bAzG*{^S@m<-2UjfllJP?C=ab5#n zCZ`bxr~F!ZY3T{r=~$C7t$wqu^J3l#J0XXsD#x(hbi42}oF1pvJORi|vZMQTi(ONb zb>Z@YOrIvrIx#!bG?*#W8xs98JJ@V&G23~I?ZG1fWce-BaC>44?L^syD-=NTGfBhr z=d|jiG>^t(Tz=l^t_GrcGGZ?^3VwkLSqllBK?gexCfCC+JkI)42UnCMuS_&r;K z_niwsMtML^ZX9nt9@npLv+Fiu?M7bH5%xFUOx>0kH0Z18!4)3ZaW5Cs$A| z05Ti>Md?2q{Q)TVrhP@VPw$^!Q5kW_ytk&Z}v(dowS4Jc3(YxuQR--KJ=U$Soe;LLPohk-gVbjLqIMWI`T2Q zcq0~bb(yx)ZwC#AgrK}l1v8M zlj$q^W3Mz5j$pZgcHJF{0v%=2Unc!$(sO^OkeT|QuXMeCdiVKM$ouC%uK$u=KYSOR zef1gVme{ZvxDZO}2&#Af`LFuVxpz;0KZQDiMt7 zK_))A!ERrT#UQZ|B*uK}){TBVwz-t@txd2ExhgHr|mhNOYM;byt$GlgR#fMl>2J*-cG?^ZjhPl(t&CRwRgt@q6 zA}^OkJ70bE)f6{KZnNwkV5Dp#&NF>L|HYe|2!|~9-HWf#rX&B&&P&ET?KMx8rOeen z_0C}%hY;mZ9(e%ccy2Q0HS-+rFMMN9nhaTA@LbB{G>(H@zz)QtKGcgt#v_gMBjj`R z34KF4x0B1i{_Tg-+#rMUam{thc0oR02g6MI59SYEM*Ð+GTEeN8ejlh<+Zr$qJ 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ð78Wzw@(ek-E86|Kv;9Y7jbu?lOpg$6?DgID*t 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 diff --git a/extensions/jupyter-web/jsconfig.json b/extensions/jupyter-web/jsconfig.json deleted file mode 100644 index af85b6f70..000000000 --- a/extensions/jupyter-web/jsconfig.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "compilerOptions": { - "module": "commonjs", - "target": "es6", - "lib": [ - "es6" - ] - }, - "exclude": [ - "node_modules" - ] -} \ No newline at end of file diff --git a/extensions/jupyter-web/language-configuration.json b/extensions/jupyter-web/language-configuration.json deleted file mode 100644 index 1a520dd3d..000000000 --- a/extensions/jupyter-web/language-configuration.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "comments": { - "lineComment": "//", - "blockComment": ["/*", "*/"] - }, - "brackets": [ - ["{", "}"], - ["[", "]"] - ], - "autoClosingPairs": [{ - "open": "{", - "close": "}", - "notIn": ["string"] - }, - { - "open": "[", - "close": "]", - "notIn": ["string"] - }, - { - "open": "(", - "close": ")", - "notIn": ["string"] - }, - { - "open": "'", - "close": "'", - "notIn": ["string"] - }, - { - "open": "\"", - "close": "\"", - "notIn": ["string", "comment"] - }, - { - "open": "`", - "close": "`", - "notIn": ["string", "comment"] - } - ] -} \ No newline at end of file diff --git a/extensions/jupyter-web/package.json b/extensions/jupyter-web/package.json deleted file mode 100644 index de283a65a..000000000 --- a/extensions/jupyter-web/package.json +++ /dev/null @@ -1,107 +0,0 @@ -{ - "name": "nbpreviewer", - "displayName": "VS Code Jupyter Notebook Previewer", - "description": "An easy to use extension for previewing Jupyter Notebooks within VS Code", - "version": "1.2.2", - "publisher": "jithurjacob", - "author": { - "name": "jithurjacob" - }, - "keywords": [ - "python", - "jupyter", - "ipython", - "data science", - "kaggle", - "notebook", - "markdown" - ], - "icon": "images/jupyter.png", - "recommendations": [ - "donjayamanne.python" - ], - "galleryBanner": { - "color": "#e46d2e", - "theme": "dark" - }, - "qna": false, - "license": "MIT", - "bugs": { - "url": "https://github.com/jithurjacob/vscode-nbpreviewer/issues", - "email": "jithurjacob@gmail.com" - }, - "repository": { - "type": "git", - "url": "https://github.com/jithurjacob/vscode-nbpreviewer.git" - }, - "homepage": "https://github.com/jithurjacob/vscode-nbpreviewer/blob/master/README.md", - "engines": { - "vscode": "^1.52.0" - }, - "browser": "./dist/extension", - "categories": [ - "Programming Languages", - "Other" - ], - "main": "./src/extension", - "contributes": { - "languages": [ - { - "id": "jupyter", - "aliases": [ - "Jupyter", - "jupyter" - ], - "extensions": [ - ".ipynb" - ], - "configuration": "./language-configuration.json" - } - ], - "commands": [ - { - "command": "jupyter.showPreview", - "title": "Show preview", - "category": "Jupyter" - } - ], - "menus": { - "editor/title": [ - { - "command": "jupyter.showPreview", - "when": "editorLangId == jupyter", - "group": "navigation" - } - ] - } - }, - "activationEvents": [ - "onLanguage:jupyter", - "onCommand:jupyter.showPreview" - ], - "languages": [ - { - "id": "jupyter", - "extensions": [ - ".ipynb" - ], - "aliases": [ - "ipynb", - "Ipynb" - ] - } - ], - "scripts": { - "clean": "rm -rf dist out", - "build": "webpack --config extension.webpack.config.js --mode production", - "compile": "webpack --config extension.webpack.config.js --mode production", - "watch": "echo done", - "dev": "webpack --config extension.webpack.config.js --watch" - }, - "devDependencies": { - "@types/vscode": "^1.52.0", - "eslint": "^4.6.1", - "webpack": "^5.21.2", - "webpack-cli": "^4.5.0" - } -} diff --git a/extensions/jupyter-web/src/extension.js b/extensions/jupyter-web/src/extension.js deleted file mode 100644 index 2f50d0d98..000000000 --- a/extensions/jupyter-web/src/extension.js +++ /dev/null @@ -1,55 +0,0 @@ -import vscode from 'vscode'; - -vscode.commands.registerCommand('jupyter.showPreview', async function (uri) { - try { - const authority = await vscode.commands.executeCommand( - 'github1s.get-current-authority' - ); - // TODO: It may not work fine when there are special characters in `ref` or `path` - const [owner, repo, ref] = (authority || '').split('+').filter(Boolean); - const path = uri.path; - - // const success = await vscode.commands.executeCommand('vscode.previewHtml', previewUri, vscode.ViewColumn.Two, 'IPython Notebook Preview'); - // Create and show panel - const panel = vscode.window.createWebviewPanel( - 'nbpreviewer', - 'Jupyter Notebook Previewer', - vscode.ViewColumn.Two, - { enableScripts: true, retainContextWhenHidden: true } - ); - panel.webview.html = ` - - - `; - console.log('successfully showed notebook'); - } catch (reason) { - console.error(reason); - vscode.window.showErrorMessage( - 'An error occured while rendering the Notebook' - ); - } -}); - -vscode.workspace.onDidOpenTextDocument((e) => { - const currnetFileExtension = e.fileName; - if (currnetFileExtension.substr(-6) === '.ipynb') { - vscode.commands.executeCommand('jupyter.showPreview', e.uri); - } -}); diff --git a/extensions/jupyter-web/yarn.lock b/extensions/jupyter-web/yarn.lock deleted file mode 100644 index 48e0154b0..000000000 --- a/extensions/jupyter-web/yarn.lock +++ /dev/null @@ -1,1661 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@discoveryjs/json-ext@^0.5.0": - version "0.5.2" - resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.2.tgz#8f03a22a04de437254e8ce8cc84ba39689288752" - integrity sha512-HyYEUDeIj5rRQU2Hk5HTB2uHsbRQpF70nvMhVzi+VJR0X+xNEhjPui4/kBf3VeH/wqD28PT4sVOm8qqLjBrSZg== - -"@types/eslint-scope@^3.7.0": - version "3.7.0" - resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.0.tgz#4792816e31119ebd506902a482caec4951fabd86" - integrity sha512-O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw== - dependencies: - "@types/eslint" "*" - "@types/estree" "*" - -"@types/eslint@*": - version "7.2.6" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-7.2.6.tgz#5e9aff555a975596c03a98b59ecd103decc70c3c" - integrity sha512-I+1sYH+NPQ3/tVqCeUSBwTE/0heyvtXqpIopUUArlBm0Kpocb8FbMa3AZ/ASKIFpN3rnEx932TTXDbt9OXsNDw== - dependencies: - "@types/estree" "*" - "@types/json-schema" "*" - -"@types/estree@*", "@types/estree@^0.0.46": - version "0.0.46" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.46.tgz#0fb6bfbbeabd7a30880504993369c4bf1deab1fe" - integrity sha512-laIjwTQaD+5DukBZaygQ79K1Z0jb1bPEMRrkXSLjtCcZm+abyp5YbrqpSLzD42FwWW6gK/aS4NYpJ804nG2brg== - -"@types/json-schema@*", "@types/json-schema@^7.0.6": - version "7.0.7" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad" - integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA== - -"@types/node@*": - version "14.14.28" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.28.tgz#cade4b64f8438f588951a6b35843ce536853f25b" - integrity sha512-lg55ArB+ZiHHbBBttLpzD07akz0QPrZgUODNakeC09i62dnrywr9mFErHuaPlB6I7z+sEbK+IYmplahvplCj2g== - -"@types/vscode@^1.52.0": - version "1.53.0" - resolved "https://registry.yarnpkg.com/@types/vscode/-/vscode-1.53.0.tgz#47b53717af6562f2ad05171bc9c8500824a3905c" - integrity sha512-XjFWbSPOM0EKIT2XhhYm3D3cx3nn3lshMUcWNy1eqefk+oqRuBq8unVb6BYIZqXy9lQZyeUl7eaBCOZWv+LcXQ== - -"@webassemblyjs/ast@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.0.tgz#a5aa679efdc9e51707a4207139da57920555961f" - integrity sha512-kX2W49LWsbthrmIRMbQZuQDhGtjyqXfEmmHyEi4XWnSZtPmxY0+3anPIzsnRb45VH/J55zlOfWvZuY47aJZTJg== - dependencies: - "@webassemblyjs/helper-numbers" "1.11.0" - "@webassemblyjs/helper-wasm-bytecode" "1.11.0" - -"@webassemblyjs/floating-point-hex-parser@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.0.tgz#34d62052f453cd43101d72eab4966a022587947c" - integrity sha512-Q/aVYs/VnPDVYvsCBL/gSgwmfjeCb4LW8+TMrO3cSzJImgv8lxxEPM2JA5jMrivE7LSz3V+PFqtMbls3m1exDA== - -"@webassemblyjs/helper-api-error@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.0.tgz#aaea8fb3b923f4aaa9b512ff541b013ffb68d2d4" - integrity sha512-baT/va95eXiXb2QflSx95QGT5ClzWpGaa8L7JnJbgzoYeaA27FCvuBXU758l+KXWRndEmUXjP0Q5fibhavIn8w== - -"@webassemblyjs/helper-buffer@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.0.tgz#d026c25d175e388a7dbda9694e91e743cbe9b642" - integrity sha512-u9HPBEl4DS+vA8qLQdEQ6N/eJQ7gT7aNvMIo8AAWvAl/xMrcOSiI2M0MAnMCy3jIFke7bEee/JwdX1nUpCtdyA== - -"@webassemblyjs/helper-numbers@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.0.tgz#7ab04172d54e312cc6ea4286d7d9fa27c88cd4f9" - integrity sha512-DhRQKelIj01s5IgdsOJMKLppI+4zpmcMQ3XboFPLwCpSNH6Hqo1ritgHgD0nqHeSYqofA6aBN/NmXuGjM1jEfQ== - dependencies: - "@webassemblyjs/floating-point-hex-parser" "1.11.0" - "@webassemblyjs/helper-api-error" "1.11.0" - "@xtuc/long" "4.2.2" - -"@webassemblyjs/helper-wasm-bytecode@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.0.tgz#85fdcda4129902fe86f81abf7e7236953ec5a4e1" - integrity sha512-MbmhvxXExm542tWREgSFnOVo07fDpsBJg3sIl6fSp9xuu75eGz5lz31q7wTLffwL3Za7XNRCMZy210+tnsUSEA== - -"@webassemblyjs/helper-wasm-section@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.0.tgz#9ce2cc89300262509c801b4af113d1ca25c1a75b" - integrity sha512-3Eb88hcbfY/FCukrg6i3EH8H2UsD7x8Vy47iVJrP967A9JGqgBVL9aH71SETPx1JrGsOUVLo0c7vMCN22ytJew== - dependencies: - "@webassemblyjs/ast" "1.11.0" - "@webassemblyjs/helper-buffer" "1.11.0" - "@webassemblyjs/helper-wasm-bytecode" "1.11.0" - "@webassemblyjs/wasm-gen" "1.11.0" - -"@webassemblyjs/ieee754@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.0.tgz#46975d583f9828f5d094ac210e219441c4e6f5cf" - integrity sha512-KXzOqpcYQwAfeQ6WbF6HXo+0udBNmw0iXDmEK5sFlmQdmND+tr773Ti8/5T/M6Tl/413ArSJErATd8In3B+WBA== - dependencies: - "@xtuc/ieee754" "^1.2.0" - -"@webassemblyjs/leb128@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.0.tgz#f7353de1df38aa201cba9fb88b43f41f75ff403b" - integrity sha512-aqbsHa1mSQAbeeNcl38un6qVY++hh8OpCOzxhixSYgbRfNWcxJNJQwe2rezK9XEcssJbbWIkblaJRwGMS9zp+g== - dependencies: - "@xtuc/long" "4.2.2" - -"@webassemblyjs/utf8@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.0.tgz#86e48f959cf49e0e5091f069a709b862f5a2cadf" - integrity sha512-A/lclGxH6SpSLSyFowMzO/+aDEPU4hvEiooCMXQPcQFPPJaYcPQNKGOCLUySJsYJ4trbpr+Fs08n4jelkVTGVw== - -"@webassemblyjs/wasm-edit@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.0.tgz#ee4a5c9f677046a210542ae63897094c2027cb78" - integrity sha512-JHQ0damXy0G6J9ucyKVXO2j08JVJ2ntkdJlq1UTiUrIgfGMmA7Ik5VdC/L8hBK46kVJgujkBIoMtT8yVr+yVOQ== - dependencies: - "@webassemblyjs/ast" "1.11.0" - "@webassemblyjs/helper-buffer" "1.11.0" - "@webassemblyjs/helper-wasm-bytecode" "1.11.0" - "@webassemblyjs/helper-wasm-section" "1.11.0" - "@webassemblyjs/wasm-gen" "1.11.0" - "@webassemblyjs/wasm-opt" "1.11.0" - "@webassemblyjs/wasm-parser" "1.11.0" - "@webassemblyjs/wast-printer" "1.11.0" - -"@webassemblyjs/wasm-gen@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.0.tgz#3cdb35e70082d42a35166988dda64f24ceb97abe" - integrity sha512-BEUv1aj0WptCZ9kIS30th5ILASUnAPEvE3tVMTrItnZRT9tXCLW2LEXT8ezLw59rqPP9klh9LPmpU+WmRQmCPQ== - dependencies: - "@webassemblyjs/ast" "1.11.0" - "@webassemblyjs/helper-wasm-bytecode" "1.11.0" - "@webassemblyjs/ieee754" "1.11.0" - "@webassemblyjs/leb128" "1.11.0" - "@webassemblyjs/utf8" "1.11.0" - -"@webassemblyjs/wasm-opt@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.0.tgz#1638ae188137f4bb031f568a413cd24d32f92978" - integrity sha512-tHUSP5F4ywyh3hZ0+fDQuWxKx3mJiPeFufg+9gwTpYp324mPCQgnuVKwzLTZVqj0duRDovnPaZqDwoyhIO8kYg== - dependencies: - "@webassemblyjs/ast" "1.11.0" - "@webassemblyjs/helper-buffer" "1.11.0" - "@webassemblyjs/wasm-gen" "1.11.0" - "@webassemblyjs/wasm-parser" "1.11.0" - -"@webassemblyjs/wasm-parser@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.0.tgz#3e680b8830d5b13d1ec86cc42f38f3d4a7700754" - integrity sha512-6L285Sgu9gphrcpDXINvm0M9BskznnzJTE7gYkjDbxET28shDqp27wpruyx3C2S/dvEwiigBwLA1cz7lNUi0kw== - dependencies: - "@webassemblyjs/ast" "1.11.0" - "@webassemblyjs/helper-api-error" "1.11.0" - "@webassemblyjs/helper-wasm-bytecode" "1.11.0" - "@webassemblyjs/ieee754" "1.11.0" - "@webassemblyjs/leb128" "1.11.0" - "@webassemblyjs/utf8" "1.11.0" - -"@webassemblyjs/wast-printer@1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.0.tgz#680d1f6a5365d6d401974a8e949e05474e1fab7e" - integrity sha512-Fg5OX46pRdTgB7rKIUojkh9vXaVN6sGYCnEiJN1GYkb0RPwShZXp6KTDqmoMdQPKhcroOXh3fEzmkWmCYaKYhQ== - dependencies: - "@webassemblyjs/ast" "1.11.0" - "@xtuc/long" "4.2.2" - -"@webpack-cli/configtest@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-1.0.1.tgz#241aecfbdc715eee96bed447ed402e12ec171935" - integrity sha512-B+4uBUYhpzDXmwuo3V9yBH6cISwxEI4J+NO5ggDaGEEHb0osY/R7MzeKc0bHURXQuZjMM4qD+bSJCKIuI3eNBQ== - -"@webpack-cli/info@^1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.2.2.tgz#ef3c0cd947a1fa083e174a59cb74e0b6195c236c" - integrity sha512-5U9kUJHnwU+FhKH4PWGZuBC1hTEPYyxGSL5jjoBI96Gx8qcYJGOikpiIpFoTq8mmgX3im2zAo2wanv/alD74KQ== - dependencies: - envinfo "^7.7.3" - -"@webpack-cli/serve@^1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.3.0.tgz#2730c770f5f1f132767c63dcaaa4ec28f8c56a6c" - integrity sha512-k2p2VrONcYVX1wRRrf0f3X2VGltLWcv+JzXRBDmvCxGlCeESx4OXw91TsWeKOkp784uNoVQo313vxJFHXPPwfw== - -"@xtuc/ieee754@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" - integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== - -"@xtuc/long@4.2.2": - version "4.2.2" - resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" - integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== - -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@^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.5.0: - version "5.7.4" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e" - integrity sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg== - -acorn@^8.0.4: - version "8.0.5" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.0.5.tgz#a3bfb872a74a6a7f661bc81b9849d9cac12601b7" - integrity sha512-v+DieK/HJkJOpFBETDJioequtc3PfxsWMaxIdIwujtF7FEV/MAyDQLlm6/zPvr7Mix07mLh6ccVwIsloceodlg== - -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.5.2: - version "3.5.2" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" - integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== - -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.12.5: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ansi-colors@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" - integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== - -ansi-escapes@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" - integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= - -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= - -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= - -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -babel-code-frame@^6.22.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= - dependencies: - chalk "^1.1.3" - esutils "^2.0.2" - js-tokens "^3.0.2" - -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -browserslist@^4.14.5: - version "4.16.6" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.6.tgz#d7901277a5a88e554ed305b183ec9b0c08f66fa2" - integrity sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ== - dependencies: - caniuse-lite "^1.0.30001219" - colorette "^1.2.2" - electron-to-chromium "^1.3.723" - escalade "^3.1.1" - node-releases "^1.1.71" - -buffer-from@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" - integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== - -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" - -callsites@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" - integrity sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo= - -caniuse-lite@^1.0.30001219: - version "1.0.30001230" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001230.tgz#8135c57459854b2240b57a4a6786044bdc5a9f71" - integrity sha512-5yBd5nWCBS+jWKTcHOzXwo5xzcj4ePE/yjtkZyUV1BTUmrBaA9MRGC+e7mxnqXSA90CmCA8L3eKLaSUkt099IQ== - -chalk@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= - dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" - -chalk@^2.0.0, chalk@^2.1.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.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= - -chrome-trace-event@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" - integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ== - dependencies: - tslib "^1.9.0" - -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== - -cli-cursor@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" - integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= - dependencies: - restore-cursor "^2.0.0" - -cli-width@^2.0.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" - integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw== - -clone-deep@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" - integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== - dependencies: - is-plain-object "^2.0.4" - kind-of "^6.0.2" - shallow-clone "^3.0.0" - -co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= - -colorette@^1.2.1, colorette@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" - integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== - -commander@^2.20.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== - -commander@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-7.1.0.tgz#f2eaecf131f10e36e07d894698226e36ae0eb5ff" - integrity sha512-pRxBna3MJe6HKnBGsDyMv8ETbptw3axEdYHoqNh7gu5oDcew8fs0xnivZGm06Ogk8zGAJ9VX+OPEr2GXEQK4dg== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -concat-stream@^1.6.0: - version "1.6.2" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" - integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - -core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= - -cross-spawn@^5.1.0: - 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= - dependencies: - lru-cache "^4.0.1" - shebang-command "^1.2.0" - which "^1.2.9" - -cross-spawn@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -debug@^3.1.0: - version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -deep-is@~0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= - -doctrine@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" - integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== - dependencies: - esutils "^2.0.2" - -electron-to-chromium@^1.3.723: - version "1.3.739" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.739.tgz#f07756aa92cabd5a6eec6f491525a64fe62f98b9" - integrity sha512-+LPJVRsN7hGZ9EIUUiWCpO7l4E3qBYHNadazlucBfsXBbccDFNKUBAgzE68FnkWGJPwD/AfKhSzL+G+Iqb8A4A== - -enhanced-resolve@^5.7.0: - version "5.7.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.7.0.tgz#525c5d856680fbd5052de453ac83e32049958b5c" - integrity sha512-6njwt/NsZFUKhM6j9U8hzVyD4E4r0x7NQzhTCbcWOJ0IQjNSAoalWmb0AE51Wn+fwan5qVESWi7t2ToBxs9vrw== - dependencies: - graceful-fs "^4.2.4" - tapable "^2.2.0" - -enquirer@^2.3.6: - version "2.3.6" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" - integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== - dependencies: - ansi-colors "^4.1.1" - -envinfo@^7.7.3: - version "7.7.4" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.7.4.tgz#c6311cdd38a0e86808c1c9343f667e4267c4a320" - integrity sha512-TQXTYFVVwwluWSFis6K2XKxgrD22jEv0FTuLCQI+OjH7rn93+iY0fSSFM5lrSxFY+H1+B0/cvvlamr3UsBivdQ== - -es-module-lexer@^0.3.26: - version "0.3.26" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.3.26.tgz#7b507044e97d5b03b01d4392c74ffeb9c177a83b" - integrity sha512-Va0Q/xqtrss45hWzP8CZJwzGSZJjDM5/MJRE3IXXnUCcVLElR9BRaE9F62BopysASyc4nM3uwhSW7FFB9nlWAA== - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= - -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@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - -eslint-visitor-keys@^1.0.0: - version "1.3.0" - 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.6.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" - -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" - -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -esquery@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" - integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.1.0, esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.1.0, estraverse@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" - integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -events@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.2.0.tgz#93b87c18f8efcd4202a461aec4dfc0556b639379" - integrity sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg== - -execa@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-5.0.0.tgz#4029b0007998a841fbd1032e5f4de86a3c1e3376" - integrity sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.0" - human-signals "^2.1.0" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.1" - onetime "^5.1.2" - signal-exit "^3.0.3" - strip-final-newline "^2.0.0" - -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" - -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" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-levenshtein@~2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= - -fastest-levenshtein@^1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz#9990f7d3a88cc5a9ffd1f1745745251700d497e2" - integrity sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow== - -figures@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" - integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= - 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" - -find-up@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - -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" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= - -get-stream@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.0.tgz#3e0012cb6827319da2706e601a1583e8629a6718" - integrity sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg== - -glob-to-regexp@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" - integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== - -glob@^7.1.2, glob@^7.1.3: - version "7.1.6" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" - integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -globals@^11.0.1: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -graceful-fs@^4.1.2, graceful-fs@^4.2.4: - version "4.2.6" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" - integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== - -has-ansi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" - integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= - dependencies: - ansi-regex "^2.0.0" - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -human-signals@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" - integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== - -iconv-lite@^0.4.17: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -ignore@^3.3.3: - version "3.3.10" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" - integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug== - -import-local@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6" - integrity sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA== - dependencies: - pkg-dir "^4.2.0" - resolve-cwd "^3.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@^2.0.3, inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -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" - -interpret@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" - integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== - -is-core-module@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" - integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ== - dependencies: - has "^1.0.3" - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= - -is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - dependencies: - isobject "^3.0.1" - -is-resolvable@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" - integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== - -is-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" - integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== - -isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= - -isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= - -jest-worker@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" - integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^7.0.0" - -js-tokens@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" - integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= - -js-yaml@^3.9.1: - version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -json-parse-better-errors@^1.0.2: - version "1.0.2" - 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" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= - -kind-of@^6.0.2: - version "6.0.3" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== - -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" - -loader-runner@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.2.0.tgz#d7022380d66d14c5fb1d496b89864ebcfd478384" - integrity sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw== - -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" - -lodash@^4.17.4, lodash@^4.3.0: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -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== - dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -mime-db@1.45.0: - version "1.45.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.45.0.tgz#cceeda21ccd7c3a745eba2decd55d4b73e7879ea" - integrity sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w== - -mime-types@^2.1.27: - version "2.1.28" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.28.tgz#1160c4757eab2c5363888e005273ecf79d2a0ecd" - integrity sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ== - dependencies: - mime-db "1.45.0" - -mimic-fn@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/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.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -minimatch@^3.0.2, minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -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== - -mkdirp@^0.5.1: - version "0.5.5" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" - integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== - dependencies: - minimist "^1.2.5" - -ms@^2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -mute-stream@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" - integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= - -neo-async@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" - integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== - -node-releases@^1.1.71: - version "1.1.72" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.72.tgz#14802ab6b1039a79a0c7d662b610a5bbd76eacbe" - integrity sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw== - -npm-run-path@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" - -object-assign@^4.0.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= - -once@^1.3.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= - dependencies: - wrappy "1" - -onetime@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" - integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= - dependencies: - mimic-fn "^1.0.0" - -onetime@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -optionator@^0.8.2: - version "0.8.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" - integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.6" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - word-wrap "~1.2.3" - -os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= - -p-limit@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - dependencies: - p-try "^2.0.0" - -p-limit@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== - dependencies: - p-limit "^2.2.0" - -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-is-absolute@^1.0.0: - version "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@^3.0.0, path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-parse@^1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -pkg-dir@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" - integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== - dependencies: - find-up "^4.0.0" - -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== - -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= - -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -progress@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - -pseudomap@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= - -punycode@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - -randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -readable-stream@^2.2.2: - version "2.3.7" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -rechoir@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.7.0.tgz#32650fd52c21ab252aa5d65b19310441c7e03aca" - integrity sha512-ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q== - dependencies: - resolve "^1.9.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== - -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" - -resolve-cwd@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" - integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== - dependencies: - resolve-from "^5.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@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - -resolve@^1.9.0: - version "1.20.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" - integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== - dependencies: - is-core-module "^2.2.0" - path-parse "^1.0.6" - -restore-cursor@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" - integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= - dependencies: - onetime "^2.0.0" - signal-exit "^3.0.2" - -rimraf@~2.6.2: - version "2.6.3" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" - integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== - dependencies: - glob "^7.1.3" - -run-async@^2.2.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" - integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== - -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= - -safe-buffer@^5.1.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -"safer-buffer@>= 2.1.2 < 3": - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -schema-utils@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.0.0.tgz#67502f6aa2b66a2d4032b4279a2944978a0913ef" - integrity sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA== - dependencies: - "@types/json-schema" "^7.0.6" - ajv "^6.12.5" - ajv-keywords "^3.5.2" - -semver@^5.3.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - -serialize-javascript@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4" - integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA== - dependencies: - randombytes "^2.1.0" - -shallow-clone@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" - integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== - dependencies: - kind-of "^6.0.2" - -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= - dependencies: - shebang-regex "^1.0.0" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -signal-exit@^3.0.2, signal-exit@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" - integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== - -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" - -source-list-map@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" - integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== - -source-map-support@~0.5.19: - version "0.5.19" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" - integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map@^0.6.0, source-map@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -source-map@~0.7.2: - version "0.7.3" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" - integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= - -string-width@^2.1.0, string-width@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -strip-ansi@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= - dependencies: - ansi-regex "^2.0.0" - -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= - dependencies: - ansi-regex "^3.0.0" - -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= - -supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.0.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -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" - -tapable@^2.1.1, tapable@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.0.tgz#5c373d281d9c672848213d0e037d1c4165ab426b" - integrity sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw== - -terser-webpack-plugin@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.1.1.tgz#7effadee06f7ecfa093dbbd3e9ab23f5f3ed8673" - integrity sha512-5XNNXZiR8YO6X6KhSGXfY0QrGrCRlSwAEjIIrlRQR4W8nP69TaJUlh3bkuac6zzgspiGPfKEHcY295MMVExl5Q== - dependencies: - jest-worker "^26.6.2" - p-limit "^3.1.0" - schema-utils "^3.0.0" - serialize-javascript "^5.0.1" - source-map "^0.6.1" - terser "^5.5.1" - -terser@^5.5.1: - version "5.6.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.6.0.tgz#138cdf21c5e3100b1b3ddfddf720962f88badcd2" - integrity sha512-vyqLMoqadC1uR0vywqOZzriDYzgEkNJFK4q9GeyOBHIbiECHiWLKcWfbQWAUaPfxkjDhapSlZB9f7fkMrvkVjA== - dependencies: - commander "^2.20.0" - source-map "~0.7.2" - source-map-support "~0.5.19" - -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= - -through@^2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= - -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - -tslib@^1.9.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= - dependencies: - prelude-ls "~1.1.2" - -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= - -v8-compile-cache@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz#9471efa3ef9128d2f7c6a7ca39c4dd6b5055b132" - integrity sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q== - -watchpack@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.1.1.tgz#e99630550fca07df9f90a06056987baa40a689c7" - integrity sha512-Oo7LXCmc1eE1AjyuSBmtC3+Wy4HcV8PxWh2kP6fOl8yTlNS7r0K9l1ao2lrrUza7V39Y3D/BbJgY8VeSlc5JKw== - dependencies: - glob-to-regexp "^0.4.1" - graceful-fs "^4.1.2" - -webpack-cli@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.5.0.tgz#b5213b84adf6e1f5de6391334c9fa53a48850466" - integrity sha512-wXg/ef6Ibstl2f50mnkcHblRPN/P9J4Nlod5Hg9HGFgSeF8rsqDGHJeVe4aR26q9l62TUJi6vmvC2Qz96YJw1Q== - dependencies: - "@discoveryjs/json-ext" "^0.5.0" - "@webpack-cli/configtest" "^1.0.1" - "@webpack-cli/info" "^1.2.2" - "@webpack-cli/serve" "^1.3.0" - colorette "^1.2.1" - commander "^7.0.0" - enquirer "^2.3.6" - execa "^5.0.0" - fastest-levenshtein "^1.0.12" - import-local "^3.0.2" - interpret "^2.2.0" - rechoir "^0.7.0" - v8-compile-cache "^2.2.0" - webpack-merge "^5.7.3" - -webpack-merge@^5.7.3: - version "5.7.3" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.7.3.tgz#2a0754e1877a25a8bbab3d2475ca70a052708213" - integrity sha512-6/JUQv0ELQ1igjGDzHkXbVDRxkfA57Zw7PfiupdLFJYrgFqY5ZP8xxbpp2lU3EPwYx89ht5Z/aDkD40hFCm5AA== - dependencies: - clone-deep "^4.0.1" - wildcard "^2.0.0" - -webpack-sources@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-2.2.0.tgz#058926f39e3d443193b6c31547229806ffd02bac" - integrity sha512-bQsA24JLwcnWGArOKUxYKhX3Mz/nK1Xf6hxullKERyktjNMC4x8koOeaDNTA2fEJ09BdWLbM/iTW0ithREUP0w== - dependencies: - source-list-map "^2.0.1" - source-map "^0.6.1" - -webpack@^5.21.2: - version "5.22.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.22.0.tgz#8505158bc52dcbbdb01ac94796a8aed61badf11a" - integrity sha512-xqlb6r9RUXda/d9iA6P7YRTP1ChWeP50TEESKMMNIg0u8/Rb66zN9YJJO7oYgJTRyFyYi43NVC5feG45FSO1vQ== - dependencies: - "@types/eslint-scope" "^3.7.0" - "@types/estree" "^0.0.46" - "@webassemblyjs/ast" "1.11.0" - "@webassemblyjs/wasm-edit" "1.11.0" - "@webassemblyjs/wasm-parser" "1.11.0" - acorn "^8.0.4" - browserslist "^4.14.5" - chrome-trace-event "^1.0.2" - enhanced-resolve "^5.7.0" - es-module-lexer "^0.3.26" - eslint-scope "^5.1.1" - events "^3.2.0" - glob-to-regexp "^0.4.1" - graceful-fs "^4.2.4" - json-parse-better-errors "^1.0.2" - loader-runner "^4.2.0" - mime-types "^2.1.27" - neo-async "^2.6.2" - schema-utils "^3.0.0" - tapable "^2.1.1" - terser-webpack-plugin "^5.1.1" - watchpack "^2.0.0" - webpack-sources "^2.1.1" - -which@^1.2.9: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -which@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -wildcard@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec" - integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw== - -word-wrap@~1.2.3: - version "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== - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= - -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" - -yallist@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" - integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== diff --git a/extensions/kotlin-web/LICENSE b/extensions/kotlin-web/LICENSE deleted file mode 100644 index 8dada3eda..000000000 --- a/extensions/kotlin-web/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright {yyyy} {name of copyright owner} - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/extensions/kotlin-web/README.md b/extensions/kotlin-web/README.md deleted file mode 100644 index 8f39b824a..000000000 --- a/extensions/kotlin-web/README.md +++ /dev/null @@ -1,36 +0,0 @@ -# This extension is a fork from [vscode-kotlin](https://github.com/mathiasfrohlich/vscode-kotlin) for github1s - -# At present only languages features is reserved - -# I have deleted some files and only reserved the necessary code - -[![](https://vsmarketplacebadge.apphb.com/version-short/mathiasfrohlich.Kotlin.svg)](https://marketplace.visualstudio.com/items?itemName=mathiasfrohlich.Kotlin) -[![](https://vsmarketplacebadge.apphb.com/installs-short/mathiasfrohlich.Kotlin.svg)](https://marketplace.visualstudio.com/items?itemName=mathiasfrohlich.Kotlin) -[![](https://vsmarketplacebadge.apphb.com/rating-short/mathiasfrohlich.Kotlin.svg)](https://marketplace.visualstudio.com/items?itemName=mathiasfrohlich.Kotlin) - -# Kotlin Language - -Syntax support for the Kotlin programming language. -This extension adds basic features to help make reading Kotlin much more pleasant in VSCode - -## Features - -- Syntax highlighting -- Code snippets - -## Contributing - -We welcome any contributions to help make the extension better. There are several ways you can contribute. - -1. By reporting [issues](https://github.com/mathiasfrohlich/vscode-kotlin/issues) -2. Making feature [requests](https://github.com/mathiasfrohlich/vscode-kotlin/issues) -3. Or by contributing code - -> Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms. - -## Credits - -- [Visual Studio Code](https://code.visualstudio.com/) -- [vscode-docs on GitHub](https://github.com/Microsoft/vscode-docs) -- [Kotlin.org](https://kotlinlang.org/) -- [Sublime Text - Kotlin Package](https://github.com/vkostyukov/kotlin-sublime-package) diff --git a/extensions/kotlin-web/artwork/icon.png b/extensions/kotlin-web/artwork/icon.png deleted file mode 100644 index 9698eb4f3ec4978d84fe24e67c9dbdb4f827de94..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4870 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 diff --git a/extensions/kotlin-web/kotlin.configuration.json b/extensions/kotlin-web/kotlin.configuration.json deleted file mode 100644 index 7ca2cfc02..000000000 --- a/extensions/kotlin-web/kotlin.configuration.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "comments": { - "lineComment": "//", - "blockComment": ["/*", "*/"] - }, - "brackets": [ - ["{", "}"], - ["[", "]"], - ["(", ")"], - ["<", ">"] - ], - "autoClosingPairs": [ - { "open": "{", "close": "}" }, - { "open": "[", "close": "]" }, - { "open": "(", "close": ")" }, - { "open": "'", "close": "'", "notIn": ["string", "comment"] }, - { "open": "\"", "close": "\"", "notIn": ["string"] }, - { "open": "/*", "close": " */", "notIn": ["string"] } - ], - "surroundingPairs": [ - ["{", "}"], - ["[", "]"], - ["(", ")"], - ["<", ">"], - ["'", "'"], - ["\"", "\""] - ], - "folding": { - "offSide": true, - "markers": { - "start": "^\\s*//\\s*#region", - "end": "^\\s*//\\s*#endregion" - } - } -} diff --git a/extensions/kotlin-web/package.json b/extensions/kotlin-web/package.json deleted file mode 100644 index 78bf6c067..000000000 --- a/extensions/kotlin-web/package.json +++ /dev/null @@ -1,91 +0,0 @@ -{ - "name": "Kotlin", - "displayName": "Kotlin Language", - "description": "Kotlin language support for VS Code, this file is modified by github1s", - "version": "1.7.1", - "publisher": "mathiasfrohlich", - "license": "Apache-2.0", - "scripts": { - "compile": "echo done", - "watch": "echo done" - }, - "engines": { - "vscode": "^1.8.0" - }, - "icon": "artwork/icon.png", - "categories": [ - "Programming Languages" - ], - "bugs": { - "url": "https://github.com/mathiasfrohlich/vscode-kotlin/issues" - }, - "homepage": "https://github.com/mathiasfrohlich/vscode-kotlin", - "repository": { - "type": "git", - "url": "https://github.com/mathiasfrohlich/vscode-kotlin.git" - }, - "keywords": [ - "Kotlin", - "kotlin", - "kt", - "kts" - ], - "contributes": { - "languages": [ - { - "id": "kotlin", - "aliases": [ - "Kotlin", - "kotlin" - ], - "extensions": [ - ".kt" - ], - "configuration": "./kotlin.configuration.json" - }, - { - "id": "kotlinscript", - "aliases": [ - "Kotlinscript", - "kotlinscript" - ], - "extensions": [ - ".kts" - ], - "configuration": "./kotlin.configuration.json" - } - ], - "grammars": [ - { - "language": "kotlin", - "scopeName": "source.kotlin", - "path": "./syntaxes/Kotlin.tmLanguage" - }, - { - "language": "kotlinscript", - "scopeName": "source.kotlin", - "path": "./syntaxes/Kotlin.tmLanguage" - }, - { - "scopeName": "markdown.kotlin.codeblock", - "path": "./syntaxes/codeblock.json", - "injectTo": [ - "text.html.markdown" - ], - "embeddedLanguages": { - "meta.embedded.block.kotlin": "kotlin" - } - } - ], - "snippets": [ - { - "language": "kotlin", - "path": "./snippets/kotlin.json" - }, - { - "language": "kotlinscript", - "path": "./snippets/kotlin.json" - } - ] - } -} diff --git a/extensions/kotlin-web/snippets/kotlin.json b/extensions/kotlin-web/snippets/kotlin.json deleted file mode 100644 index 5418bf129..000000000 --- a/extensions/kotlin-web/snippets/kotlin.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "fun": { - "prefix": "fun", - "body": ["fun ${1:foo}() = ${0}"], - "description": "One line fucntion" - }, - "fun2": { - "prefix": "fun", - "body": [ - "fun ${1:foo}(${2:bar}: ${3:Any}, ${4:baz}: ${5:Any}): ${6:Unit} {", - "\t${0}", - "}" - ], - "description": "Function with 2 parameters" - }, - "fun1": { - "prefix": "fun", - "body": ["fun ${1:foo}(${2:bar}: ${3:Any}): ${4:Unit} {", "\t${0}", "}"], - "description": "Function with 1 parameter" - }, - "fun0": { - "prefix": "fun", - "body": ["fun ${1:foo}(): Unit {", "\t${0}", "}"], - "description": "Function with 0 parameters" - }, - "void": { - "prefix": "void", - "body": ["fun ${1:foo}() {", "\t${0}", "}"], - "description": "Function that returns nothing" - }, - "main": { - "prefix": "main", - "body": ["fun main(args: Array) {", "\t${0}", "}"], - "description": "main() function" - }, - "for": { - "prefix": "for", - "body": ["for (${1:i} in ${2:iterable}) {", "\t${0}", "}"] - }, - "try": { - "prefix": "try", - "body": ["try {", "\t${0}", "}", "catch(Exception e) {", "\t${0}", "}"] - }, - "class": { - "prefix": "class", - "body": ["class ${1:foo} {", "\t${0}", "}"], - "description": "Class without contructor" - }, - "class1": { - "prefix": "class", - "body": ["class ${1:foo}(${2:bar}) {", "\t${0}", "}"], - "description": "Class with constructor" - }, - "data": { - "prefix": "class", - "body": ["data class ${1:foo}(${0})"], - "description": "Empty data class" - }, - "singleton": { - "prefix": "singleton", - "body": ["object ${1:foo} {", "\t${0}", "}"], - "description": "Empty singleton" - } -} diff --git a/extensions/kotlin-web/syntaxes/Kotlin.tmLanguage b/extensions/kotlin-web/syntaxes/Kotlin.tmLanguage deleted file mode 100644 index 32959825b..000000000 --- a/extensions/kotlin-web/syntaxes/Kotlin.tmLanguage +++ /dev/null @@ -1,1067 +0,0 @@ - - - - - fileTypes - - kt - kts - - foldingStartMarker - (\{\s*(//.*)?$|^\s*// \{\{\{) - foldingStopMarker - ^\s*(\}|// \}\}\}$) - name - Kotlin - patterns - - - include - #comments - - - captures - - 1 - - name - keyword.other.kotlin - - 2 - - name - entity.name.package.kotlin - - - match - ^\s*(package)\b(?:\s*([^ ;$]+)\s*)? - - - captures - - 1 - - name - keyword.other.import.kotlin - - 2 - - name - storage.modifier.import.java - - 3 - - name - keyword.other.kotlin - - 4 - - name - entity.name.type - - - match - ^\s*(import)\s+([^ $.]+(?:\.(?:[`][^$`]+[`]|[^` $.]+))+)(?:\s+(as)\s+([`][^$`]+[`]|[^` $.]+))? - name - meta.import.kotlin - - - include - #code - - - repository - - annotations - - patterns - - - begin - (@[^ (]+)(\()? - beginCaptures - - 1 - - name - storage.type.annotation.kotlin - - 2 - - name - punctuation.definition.annotation-arguments.begin.kotlin - - - end - (\)|\s|$) - endCaptures - - 1 - - name - punctuation.definition.annotation-arguments.end.kotlin - - - name - meta.declaration.annotation.kotlin - patterns - - - captures - - 1 - - name - constant.other.key.kotlin - - 2 - - name - keyword.operator.assignment.kotlin - - - match - (\w*)\s*(=) - - - include - #code - - - match - , - name - punctuation.seperator.property.kotlin - - - - - match - @\w* - name - storage.type.annotation.kotlin - - - - builtin-functions - - patterns - - - match - \b(apply|also|let|takeIf|run|takeUnless|with|print|println)\b\s*(?={|\() - captures - - 1 - - name - support.function.kotlin - - - - - match - \b(mutableListOf|listOf|mutableMapOf|mapOf|mutableSetOf|setOf)\b\s*(?={|\() - captures - - 1 - - name - support.function.kotlin - - - - - - comments - - patterns - - - captures - - 0 - - name - punctuation.definition.comment.kotlin - - - match - /\*\*/ - name - comment.block.empty.kotlin - - - include - #comments-inline - - - - comments-inline - - patterns - - - begin - /\* - captures - - 0 - - name - punctuation.definition.comment.kotlin - - - end - \*/ - name - comment.block.kotlin - - - captures - - 1 - - name - comment.line.double-slash.kotlin - - 2 - - name - punctuation.definition.comment.kotlin - - - match - \s*((//).*$\n?) - - - - class-literal - - begin - (?=\b(?:class|interface|object)\s+\w+)\b - end - (?=\}|$) - name - meta.class.kotlin - patterns - - - include - #keyword-literal - - - begin - \b(class|object|interface)\b\s+(\w+) - beginCaptures - - 1 - - name - storage.modifier.kotlin - - 2 - - name - entity.name.class.kotlin - - - end - (?=\{|\(|:|$) - patterns - - - include - #keyword-literal - - - include - #annotations - - - include - #types - - - - - begin - (:)\s*(\w+) - beginCaptures - - 1 - - name - keyword.operator.declaration.kotlin - - 2 - - name - entity.other.inherited-class.kotlin - - - end - (?={|=|$) - patterns - - - include - #types - - - - - include - #braces - - - include - #parens - - - - literal-functions - - begin - (?=\b(?:fun)\b) - end - (?=$|=|\}) - patterns - - - begin - \b(fun)\b - beginCaptures - - 1 - - name - keyword.other.kotlin - - - end - (?=\() - patterns - - - captures - - 2 - - name - entity.name.function.kotlin - - - match - ([\.<\?>\w]+\.)?(\w+|(`[^`]*`)) - - - include - #types - - - - - begin - (:) - beginCaptures - - 1 - - name - keyword.operator.declaration.kotlin - - - end - (?={|=|$) - patterns - - - include - #types - - - - - include - #parens - - - include - #braces - - - - parameters - - patterns - - - begin - (:) - beginCaptures - - 1 - - name - keyword.operator.declaration.kotlin - - - end - (?=,|=|\)) - patterns - - - include - #types - - - - - match - \w+(?=:) - name - variable.parameter.function.kotlin - - - include - #keyword-literal - - - - keyword-literal - - patterns - - - match - (\!in|\!is|as\?) - name - keyword.operator.kotlin - - - match - \b(in|is|as|assert)\b - name - keyword.operator.kotlin - - - match - \b(const)\b - name - storage.modifier.kotlin - - - match - \b(val|var)\b - name - storage.type.kotlin - - - match - \b(\_)\b - name - punctuation.definition.variable.kotlin - - - match - \b(data|inline|tailrec|operator|infix|typealias|reified)\b - name - storage.type.kotlin - - - match - \b(external|public|private|protected|internal|abstract|final|sealed|enum|open|annotation|override|vararg|typealias|expect|actual|suspend|yield|out|in)\b - name - storage.modifier.kotlin - - - match - \b(try|catch|finally|throw)\b - name - keyword.control.catch-exception.kotlin - - - match - \b(if|else|when)\b - name - keyword.control.conditional.kotlin - - - match - \b(while|for|do|return|break|continue)\b - name - keyword.control.kotlin - - - match - \b(constructor|init)\b - name - entity.name.function.constructor - - - match - \b(companion|object)\b - name - storage.type.kotlin - - - - keyword-operator - - patterns - - - match - \b(and|or|not|inv)\b - name - keyword.operator.bitwise.kotlin - - - match - (==|!=|===|!==|<=|>=|<|>) - name - keyword.operator.comparison.kotlin - - - match - (=) - name - keyword.operator.assignment.kotlin - - - match - (:(?!:)) - name - keyword.operator.declaration.kotlin - - - match - (\?:) - name - keyword.operator.elvis.kotlin - - - match - (\-\-|\+\+) - name - keyword.operator.increment-decrement.kotlin - - - match - (\-|\+|\*|\/|%) - name - keyword.operator.arithmetic.kotlin - - - match - (\+\=|\-\=|\*\=|\/\=) - name - keyword.operator.arithmetic.assign.kotlin - - - match - (\!|\&\&|\|\|) - name - keyword.operator.logical.kotlin - - - match - (\.\.) - name - keyword.operator.range.kotlin - - - - keyword-punctuation - - patterns - - - match - (::) - name - punctuation.accessor.reference.kotlin - - - match - (\?\.) - name - punctuation.accessor.dot.safe.kotlin - - - match - (\.) - name - punctuation.accessor.dot.kotlin - - - match - (\,) - name - punctuation.seperator.kotlin - - - match - (\;) - name - punctuation.terminator.kotlin - - - - keyword-constant - - patterns - - - match - \b(true|false|null|class)\b - name - constant.language.kotlin - - - match - \b(this|super)\b - name - variable.language.kotlin - - - match - \b(0(x|X)[0-9A-Fa-f_]*)[L]?\b - name - constant.numeric.hex.kotlin - - - match - \b(0(b|B)[0-1_]*)[L]?\b - name - constant.numeric.binary.kotlin - - - match - \b([0-9][0-9_]*\.[0-9][0-9_]*[fFL]?)\b - name - constant.numeric.float.kotlin - - - match - \b([0-9][0-9_]*[fFL]?)\b - name - constant.numeric.integer.kotlin - - - - literal-string - - patterns - - - begin - " - beginCaptures - - 0 - - name - punctuation.definition.string.begin.kotlin - - - end - " - endCaptures - - 0 - - name - punctuation.definition.string.end.kotlin - - - name - string.quoted.double.kotlin - patterns - - - include - #string-content - - - - - - literal-raw-string - - patterns - - - begin - """ - beginCaptures - - 0 - - name - punctuation.definition.string.begin.kotlin - - - end - """ - endCaptures - - 0 - - name - punctuation.definition.string.end.kotlin - - - name - string.quoted.triple.kotlin - patterns - - - include - #string-content - - - - - - string-content - - patterns - - - name - constant.character.escape.newline.kotlin - match - \\\s*\n - - - name - constant.character.escape.kotlin - match - \\(x[\da-fA-F]{2}|u[\da-fA-F]{4}|.) - - - begin - (\$)(\{) - beginCaptures - - 1 - - name - punctuation.definition.keyword.kotlin - - 2 - - name - punctuation.section.block.begin.kotlin - - - end - \} - endCaptures - - 0 - - name - punctuation.section.block.end.kotlin - - - name - entity.string.template.element.kotlin - patterns - - - include - #code - - - - - - types - - patterns - - - match - \b(Nothing|Any|Unit|String|CharSequence|Int|Boolean|Char|Long|Double|Float|Short|Byte|Array|List|Map|Set|dynamic)\b(\?)? - name - support.class.kotlin - - - match - \b(IntArray|BooleanArray|CharArray|LongArray|DoubleArray|FloatArray|ShortArray|ByteArray)\b(\?)? - name - support.class.kotlin - - - match - ((?:[a-zA-Z]\w*\.)*[A-Z]+\w*[a-z]+\w*)(\?) - name - entity.name.type.class.kotlin - patterns - - - include - #keyword-punctuation - - - include - #types - - - - - match - \b(?:[a-z]\w*(\.))*[A-Z]+\w*\b - captures - - 1 - - name - keyword.operator.dereference.kotlin - - - name - entity.name.type.class.kotlin - - - begin - \( - beginCaptures - - 0 - - name - punctuation.section.group.begin.kotlin - - - end - \) - endCaptures - - 0 - - name - punctuation.section.group.end.kotlin - - - patterns - - - include - #types - - - - - include - #keyword-punctuation - - - include - #keyword-operator - - - - parens - - patterns - - - begin - \( - beginCaptures - - 0 - - name - punctuation.section.group.begin.kotlin - - - end - \) - endCaptures - - 0 - - name - punctuation.section.group.end.kotlin - - - name - meta.group.kotlin - patterns - - - include - #keyword-punctuation - - - include - #parameters - - - include - #code - - - - - - braces - - patterns - - - begin - \{ - beginCaptures - - 0 - - name - punctuation.section.group.begin.kotlin - - - end - \} - endCaptures - - 0 - - name - punctuation.section.group.end.kotlin - - - name - meta.block.kotlin - patterns - - - include - #code - - - - - - brackets - - patterns - - - begin - \[ - beginCaptures - - 0 - - name - punctuation.section.brackets.begin.kotlin - - - end - \] - endCaptures - - 0 - - name - punctuation.section.brackets.end.kotlin - - - name - meta.brackets.kotlin - patterns - - - include - #code - - - - - - code - - patterns - - - include - #comments - - - include - #comments-inline - - - include - #annotations - - - include - #class-literal - - - include - #parens - - - include - #braces - - - include - #brackets - - - include - #keyword-literal - - - include - #types - - - include - #keyword-operator - - - include - #keyword-constant - - - include - #keyword-punctuation - - - include - #builtin-functions - - - include - #literal-functions - - - include - #builtin-classes - - - include - #literal-raw-string - - - include - #literal-string - - - - - scopeName - source.kotlin - uuid - d9380650-5edc-447d-8dbd-98838c7d0adf - - \ No newline at end of file diff --git a/extensions/kotlin-web/syntaxes/LICENSE b/extensions/kotlin-web/syntaxes/LICENSE deleted file mode 100644 index 7ef4d6bd2..000000000 --- a/extensions/kotlin-web/syntaxes/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2012-2014 Vladimir Kostyukov - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/extensions/kotlin-web/syntaxes/codeblock.json b/extensions/kotlin-web/syntaxes/codeblock.json deleted file mode 100644 index bc04d9291..000000000 --- a/extensions/kotlin-web/syntaxes/codeblock.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "fileTypes": [], - "injectionSelector": "L:markup.fenced_code.block.markdown", - "patterns": [ - { - "include": "#kotlin-code-block" - } - ], - "repository": { - "kotlin-code-block": { - "begin": "kotlin", - "end": "(^|\\G)(?=\\s*[`~]{3,}\\s*$)", - "contentName": "meta.embedded.block.kotlin", - "patterns": [ - { - "include": "source.kotlin" - } - ] - } - }, - "scopeName": "markdown.kotlin.codeblock" -} diff --git a/extensions/scala-web/LICENSE b/extensions/scala-web/LICENSE deleted file mode 100644 index bca190ec0..000000000 --- a/extensions/scala-web/LICENSE +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) 2018 Nicolas Stucki - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/extensions/scala-web/README.md b/extensions/scala-web/README.md deleted file mode 100644 index 7011c8689..000000000 --- a/extensions/scala-web/README.md +++ /dev/null @@ -1,39 +0,0 @@ -# This extension is a fork from [vscode-scala-syntax](https://github.com/scala/vscode-scala-syntax) for github1s - -# At present only languages features is reserved - -# I have deleted some files and only reserved the necessary code - -# Scala Syntax (official) - -[![Install extension](https://img.shields.io/badge/scala-vscode-blue.png)](vscode:extension/scala-lang.scala) -[![Version](https://img.shields.io/github/package-json/v/scala/vscode-scala-syntax.svg)](https://marketplace.visualstudio.com/items?itemName=scala-lang.scala) -![GitHub Actions Build Status](https://github.com/scala/vscode-scala-syntax/workflows/continuous-integration/badge.svg) - -Visual Studio Code extension providing syntax highlighting for Scala 2 and Scala 3 source files. - -![Syntax Highlighting Demo](https://i.imgur.com/TDx0mC3.png) - -This repo also powers the Scala syntax highlighting on GitHub. (It is vendored in [github/linguist](https://github.com/github/linguist).) - -### Team - -The current maintainers (people who can merge pull requests) are: - -- Nicolas Stucki- [`@nicolasstucki`](https://github.com/nicolasstucki) -- Maxime Kjaer - [`@MaximeKjaer`](https://github.com/MaximeKjaer) -- Olafur Pall Geirsson - [`@olafurpg`](https://github.com/olafurpg) -- Vitalii Voloshyn - [`@PanAeon`](https://github.com/PanAeon) -- all other members of the Scala organization on GitHub - -## Based on - -- Plugin: https://github.com/daltonjorge/vscode-scala -- Template: https://github.com/sellmerfud/scala.tmbundle - (https://github.com/mads-hartmann/scala.tmbundle) -- Textmate JSON schema: - https://github.com/Septh/tmlanguage/blob/master/tmLanguage.schema.json - -## License - -[MIT](LICENSE.md) diff --git a/extensions/scala-web/images/smooth-spiral.png b/extensions/scala-web/images/smooth-spiral.png deleted file mode 100644 index 39f5c606f270e64386a1d95ce38d1fde8b7cc733..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12997 zcmbumWmsI#vM)TiI|K_7++7BT;O@bl!Ga9#f#B}JA-Dz!?hxF926uPJ;Lbb$v-dvd zet6IQa_4zwde!Qx>Z-2lUTghUO{AKNECwnGDgXe$ke8FvfVQR3?=3PS^tZl0tqa-^ zyGiT1X*yZCd78O^01}o?<{(OW2QzDs2FT3P+j#^e3;@7U*=p&!=_)G;S~xkdnf=4V z=H&o}N&^7GVqRb~i_ai8N^_94t)mFlMSC|DrLCn1l@6~mhcZ|aWMeDm;{ww3QPHyS z`D`IzNhKyqDeNT(Rp0<}Go$o!uy=G7^b(=^FTH}$<9|-GQ&IjGi`!=rs(%@!tE@&T z>Er^U|G$b|wY!rG;mhb{|p5dlym`^xjDILIXT(? zXBO3LoZOsTZJfZAlA64f%4Qa}j{ngA#jmU^DDUX%X69%Cl9v*pf@)y1wY3zK;FJEy z&+$=OLWY}@lT(@t$jJ?q(L9QpUx}f%3mx7PS4}ZIS$6_5EAc@_)BQ>VK7GhZ@8FPhkI#K>z0yG<*Iz z{O`1d691j}AV+AnyFk+#=}qe%0ALr8my*!(T0YIOjiDKF-`I#A|54Euf0Ub%>+9iR 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 KRev-M`u_mF8`B~H diff --git a/extensions/scala-web/language-configuration.json b/extensions/scala-web/language-configuration.json deleted file mode 100644 index 8e03ede0c..000000000 --- a/extensions/scala-web/language-configuration.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "comments": { - // symbol used for single line comment. Remove this entry if your language does not support line comments - "lineComment": "//", - // symbols used for start and end a block comment. Remove this entry if your language does not support block comments - "blockComment": ["/*", "*/"] - }, - // symbols used as brackets - "brackets": [ - ["{", "}"], - ["[", "]"], - ["(", ")"] - ], - // symbols that are auto closed when typing - "autoClosingPairs": [ - ["{", "}"], - ["[", "]"], - ["(", ")"], - ["\"", "\""], - ["s\"", "\""], - ["f\"", "\""], - ["raw\"", "\""], - ["'", "'"] - ], - // symbols that that can be used to surround a selection - "surroundingPairs": [ - ["{", "}"], - ["[", "]"], - ["(", ")"], - ["\"", "\""], - ["'", "'"] - ] -} \ No newline at end of file diff --git a/extensions/scala-web/package.json b/extensions/scala-web/package.json deleted file mode 100644 index c9d911d03..000000000 --- a/extensions/scala-web/package.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "name": "scala", - "displayName": "Scala Syntax (official)", - "description": "Official Scala Syntax", - "version": "0.5.0", - "publisher": "scala-lang", - "license": "SEE LICENSE IN LICENSE.md", - "engines": { - "vscode": "^1.5.0" - }, - "homepage": "https://github.com/scala/vscode-scala-syntax/blob/master/README.md", - "repository": { - "type": "git", - "url": "https://github.com/scala/vscode-scala-syntax.git" - }, - "icon": "images/smooth-spiral.png", - "categories": [ - "Programming Languages" - ], - "contributes": { - "languages": [ - { - "id": "scala", - "aliases": [ - "Scala", - "scala" - ], - "extensions": [ - ".scala", - ".sbt", - ".sc" - ], - "configuration": "./language-configuration.json" - } - ], - "grammars": [ - { - "language": "scala", - "scopeName": "source.scala", - "path": "./syntaxes/Scala.tmLanguage.json" - } - ] - }, - "devDependencies": { - "@types/node": "^14.6.4", - "ajv": "^6.12.4", - "github-changes": "^1.1.1", - "npm-run-all": "^4.1.5", - "rimraf": "^3.0.2", - "ts-node": "^9.0.0", - "typescript": "^4.0.2", - "vsce": "^1.79.5", - "vscode-tmgrammar-test": "0.0.10" - }, - "scripts": { - "clean": "rimraf scala-*.vsix", - "vscode:prepublish": "test -f ./syntaxes/Scala.tmLanguage.json", - "vscode:publish": "vsce publish --yarn", - "build": "npm-run-all build:syntax build:extension", - "build:syntax": "ts-node src/typescript/GenerateTmLanguageFile.ts > ./syntaxes/Scala.tmLanguage.json", - "build:extension": "vsce package --yarn", - "compile": "echo done", - "watch": "echo done" - } -} diff --git a/extensions/scala-web/syntaxes/Scala.tmLanguage.json b/extensions/scala-web/syntaxes/Scala.tmLanguage.json deleted file mode 100644 index f56692344..000000000 --- a/extensions/scala-web/syntaxes/Scala.tmLanguage.json +++ /dev/null @@ -1,756 +0,0 @@ -{ - "fileTypes": ["scala"], - "firstLineMatch": "^#!/.*\\b\\w*scala\\b", - "foldingStartMarker": "/\\*\\*|\\{\\s*$", - "foldingStopMarker": "\\*\\*/|^\\s*\\}", - "keyEquivalent": "^~S", - "repository": { - "empty-parentheses": { - "match": "(\\(\\))", - "captures": { "1": { "name": "meta.bracket.scala" } }, - "name": "meta.parentheses.scala" - }, - "imports": { - "end": "(?<=[\\n;])", - "begin": "\\b(import)\\s+", - "beginCaptures": { "1": { "name": "keyword.other.import.scala" } }, - "patterns": [ - { "include": "#comments" }, - { "match": "given", "name": "keyword.other.import.given.scala" }, - { - "match": "[A-Z\\p{Lt}\\p{Lu}][A-Z\\p{Lt}\\p{Lu}_a-z\\$\\p{Lo}\\p{Nl}\\p{Ll}0-9]*(?:(?<=_)[!#%&*+\\-\\/:<>=?@^|~\\p{Sm}\\p{So}]+)?", - "name": "entity.name.class.import.scala" - }, - { - "match": "(`[^`]+`|(?:[A-Z\\p{Lt}\\p{Lu}_a-z\\$\\p{Lo}\\p{Nl}\\p{Ll}][A-Z\\p{Lt}\\p{Lu}_a-z\\$\\p{Lo}\\p{Nl}\\p{Ll}0-9]*(?:(?<=_)[!#%&*+\\-\\/:<>=?@^|~\\p{Sm}\\p{So}]+)?|[!#%&*+\\-\\/:<>=?@^|~\\p{Sm}\\p{So}]+))", - "name": "entity.name.import.scala" - }, - { "match": "\\.", "name": "punctuation.definition.import" }, - { - "end": "}", - "begin": "{", - "beginCaptures": { "0": { "name": "meta.bracket.scala" } }, - "patterns": [ - { - "match": "(?x)(given\\s)?\\s*(?:([A-Z\\p{Lt}\\p{Lu}][A-Z\\p{Lt}\\p{Lu}_a-z\\$\\p{Lo}\\p{Nl}\\p{Ll}0-9]*(?:(?<=_)[!#%&*+\\-\\/:<>=?@^|~\\p{Sm}\\p{So}]+)?)|(`[^`]+`|(?:[A-Z\\p{Lt}\\p{Lu}_a-z\\$\\p{Lo}\\p{Nl}\\p{Ll}][A-Z\\p{Lt}\\p{Lu}_a-z\\$\\p{Lo}\\p{Nl}\\p{Ll}0-9]*(?:(?<=_)[!#%&*+\\-\\/:<>=?@^|~\\p{Sm}\\p{So}]+)?|[!#%&*+\\-\\/:<>=?@^|~\\p{Sm}\\p{So}]+)))\\s*(=>)\\s*(?:([A-Z\\p{Lt}\\p{Lu}][A-Z\\p{Lt}\\p{Lu}_a-z\\$\\p{Lo}\\p{Nl}\\p{Ll}0-9]*(?:(?<=_)[!#%&*+\\-\\/:<>=?@^|~\\p{Sm}\\p{So}]+)?)|(`[^`]+`|(?:[A-Z\\p{Lt}\\p{Lu}_a-z\\$\\p{Lo}\\p{Nl}\\p{Ll}][A-Z\\p{Lt}\\p{Lu}_a-z\\$\\p{Lo}\\p{Nl}\\p{Ll}0-9]*(?:(?<=_)[!#%&*+\\-\\/:<>=?@^|~\\p{Sm}\\p{So}]+)?|[!#%&*+\\-\\/:<>=?@^|~\\p{Sm}\\p{So}]+)))\\s*", - "captures": { - "1": { "name": "keyword.other.import.given.scala" }, - "2": { "name": "entity.name.class.import.renamed-from.scala" }, - "3": { "name": "entity.name.import.renamed-from.scala" }, - "4": { "name": "keyword.other.arrow.scala" }, - "5": { "name": "entity.name.class.import.renamed-to.scala" }, - "6": { "name": "entity.name.import.renamed-to.scala" } - } - }, - { "match": "given", "name": "keyword.other.import.given.scala" }, - { - "match": "(given\\s+)?(?:([A-Z\\p{Lt}\\p{Lu}][A-Z\\p{Lt}\\p{Lu}_a-z\\$\\p{Lo}\\p{Nl}\\p{Ll}0-9]*(?:(?<=_)[!#%&*+\\-\\/:<>=?@^|~\\p{Sm}\\p{So}]+)?)|(`[^`]+`|(?:[A-Z\\p{Lt}\\p{Lu}_a-z\\$\\p{Lo}\\p{Nl}\\p{Ll}][A-Z\\p{Lt}\\p{Lu}_a-z\\$\\p{Lo}\\p{Nl}\\p{Ll}0-9]*(?:(?<=_)[!#%&*+\\-\\/:<>=?@^|~\\p{Sm}\\p{So}]+)?|[!#%&*+\\-\\/:<>=?@^|~\\p{Sm}\\p{So}]+)))", - "captures": { - "1": { "name": "keyword.other.import.given.scala" }, - "2": { "name": "entity.name.class.import.scala" }, - "3": { "name": "entity.name.import.scala" } - } - } - ], - "endCaptures": { "0": { "name": "meta.bracket.scala" } }, - "name": "meta.import.selector.scala" - } - ], - "name": "meta.import.scala" - }, - "exports": { - "end": "(?<=[\\n;])", - "begin": "\\b(export)\\s+(given\\s+)?", - "beginCaptures": { - "1": { "name": "keyword.other.export.scala" }, - "2": { "name": "keyword.other.export.given.scala" } - }, - "patterns": [ - { "include": "#comments" }, - { - "match": "(`[^`]+`|(?:[A-Z\\p{Lt}\\p{Lu}_a-z\\$\\p{Lo}\\p{Nl}\\p{Ll}][A-Z\\p{Lt}\\p{Lu}_a-z\\$\\p{Lo}\\p{Nl}\\p{Ll}0-9]*(?:(?<=_)[!#%&*+\\-\\/:<>=?@^|~\\p{Sm}\\p{So}]+)?|[!#%&*+\\-\\/:<>=?@^|~\\p{Sm}\\p{So}]+))", - "name": "entity.name.export.scala" - }, - { "match": "\\.", "name": "punctuation.definition.export" }, - { - "end": "}", - "begin": "{", - "beginCaptures": { "0": { "name": "meta.bracket.scala" } }, - "patterns": [ - { - "match": "(?x)\\s*(`[^`]+`|(?:[A-Z\\p{Lt}\\p{Lu}_a-z\\$\\p{Lo}\\p{Nl}\\p{Ll}][A-Z\\p{Lt}\\p{Lu}_a-z\\$\\p{Lo}\\p{Nl}\\p{Ll}0-9]*(?:(?<=_)[!#%&*+\\-\\/:<>=?@^|~\\p{Sm}\\p{So}]+)?|[!#%&*+\\-\\/:<>=?@^|~\\p{Sm}\\p{So}]+))\\s*(=>)\\s*(`[^`]+`|(?:[A-Z\\p{Lt}\\p{Lu}_a-z\\$\\p{Lo}\\p{Nl}\\p{Ll}][A-Z\\p{Lt}\\p{Lu}_a-z\\$\\p{Lo}\\p{Nl}\\p{Ll}0-9]*(?:(?<=_)[!#%&*+\\-\\/:<>=?@^|~\\p{Sm}\\p{So}]+)?|[!#%&*+\\-\\/:<>=?@^|~\\p{Sm}\\p{So}]+))\\s*", - "captures": { - "1": { "name": "entity.name.export.renamed-from.scala" }, - "2": { "name": "keyword.other.arrow.scala" }, - "3": { "name": "entity.name.export.renamed-to.scala" } - } - }, - { "match": "([^\\s.,}]+)", "name": "entity.name.export.scala" } - ], - "endCaptures": { "0": { "name": "meta.bracket.scala" } }, - "name": "meta.export.selector.scala" - } - ], - "name": "meta.export.scala" - }, - "constants": { - "patterns": [ - { - "match": "\\b(false|null|true)\\b", - "name": "constant.language.scala" - }, - { - "match": "\\b(0[xX][0-9a-fA-F_]*)\\b", - "name": "constant.numeric.scala" - }, - { - "match": "\\b(([0-9][0-9_]*(\\.[0-9][0-9_]*)?)([eE](\\+|-)?[0-9][0-9_]*)?|[0-9][0-9_]*)[LlFfDd]?\\b", - "name": "constant.numeric.scala" - }, - { - "match": "(\\.[0-9][0-9_]*)([eE](\\+|-)?[0-9][0-9_]*)?[LlFfDd]?\\b", - "name": "constant.numeric.scala" - }, - { "match": "\\b(this|super)\\b", "name": "variable.language.scala" } - ] - }, - "script-header": { - "match": "^#!(.*)$", - "captures": { "1": { "name": "string.unquoted.shebang.scala" } }, - "name": "comment.block.shebang.scala" - }, - "code": { - "patterns": [ - { "include": "#script-header" }, - { "include": "#storage-modifiers" }, - { "include": "#declarations" }, - { "include": "#inheritance" }, - { "include": "#extension" }, - { "include": "#imports" }, - { "include": "#exports" }, - { "include": "#comments" }, - { "include": "#strings" }, - { "include": "#initialization" }, - { "include": "#xml-literal" }, - { "include": "#keywords" }, - { "include": "#using" }, - { "include": "#constants" }, - { "include": "#scala-symbol" }, - { "include": "#singleton-type" }, - { "include": "#inline" }, - { "include": "#scala-quoted" }, - { "include": "#char-literal" }, - { "include": "#empty-parentheses" }, - { "include": "#parameter-list" }, - { "include": "#qualifiedClassName" }, - { "include": "#backQuotedVariable" }, - { "include": "#curly-braces" }, - { "include": "#meta-brackets" }, - { "include": "#meta-bounds" }, - { "include": "#meta-colons" } - ] - }, - "strings": { - "patterns": [ - { - "end": "\"\"\"(?!\")", - "begin": "\"\"\"", - "beginCaptures": { - "0": { "name": "punctuation.definition.string.begin.scala" } - }, - "patterns": [ - { - "match": "\\\\\\\\|\\\\u[0-9A-Fa-f]{4}", - "name": "constant.character.escape.scala" - } - ], - "endCaptures": { - "0": { "name": "punctuation.definition.string.end.scala" } - }, - "name": "string.quoted.triple.scala" - }, - { - "begin": "\\b([A-Z\\p{Lt}\\p{Lu}_a-z\\$\\p{Lo}\\p{Nl}\\p{Ll}]+)(\"\"\")", - "end": "\"\"\"(?!\")", - "beginCaptures": { - "1": { "name": "keyword.interpolation.scala" }, - "2": { - "name": "string.quoted.triple.interpolated.scala punctuation.definition.string.begin.scala" - } - }, - "patterns": [ - { "include": "#string-interpolation" }, - { - "match": "\\\\\\\\|\\\\u[0-9A-Fa-f]{4}", - "name": "constant.character.escape.scala" - }, - { "match": ".", "name": "string.quoted.triple.interpolated.scala" } - ], - "endCaptures": { - "0": { - "name": "string.quoted.triple.interpolated.scala punctuation.definition.string.end.scala" - } - } - }, - { - "end": "\"", - "begin": "\"", - "beginCaptures": { - "0": { "name": "punctuation.definition.string.begin.scala" } - }, - "patterns": [ - { - "match": "\\\\(?:[btnfr\\\\\"']|[0-7]{1,3}|u[0-9A-Fa-f]{4})", - "name": "constant.character.escape.scala" - }, - { - "match": "\\\\.", - "name": "invalid.illegal.unrecognized-string-escape.scala" - } - ], - "endCaptures": { - "0": { "name": "punctuation.definition.string.end.scala" } - }, - "name": "string.quoted.double.scala" - }, - { - "begin": "\\b([A-Z\\p{Lt}\\p{Lu}_a-z\\$\\p{Lo}\\p{Nl}\\p{Ll}]+)(\")", - "end": "\"", - "beginCaptures": { - "1": { "name": "keyword.interpolation.scala" }, - "2": { - "name": "string.quoted.double.interpolated.scala punctuation.definition.string.begin.scala" - } - }, - "patterns": [ - { "include": "#string-interpolation" }, - { - "match": "\\\\(?:[btnfr\\\\\"']|[0-7]{1,3}|u[0-9A-Fa-f]{4})", - "name": "constant.character.escape.scala" - }, - { - "match": "\\\\.", - "name": "invalid.illegal.unrecognized-string-escape.scala" - }, - { "match": ".", "name": "string.quoted.double.interpolated.scala" } - ], - "endCaptures": { - "0": { - "name": "string.quoted.double.interpolated.scala punctuation.definition.string.end.scala" - } - } - } - ] - }, - "using": { - "patterns": [ - { - "match": "(?<=\\()\\s*(using)\\s+(?=[\\w\\d\\(\\.\\(\\{'\"])", - "captures": { "1": { "name": "keyword.declaration.scala" } } - } - ] - }, - "string-interpolation": { - "patterns": [ - { - "name": "constant.character.escape.interpolation.scala", - "match": "\\$\\$" - }, - { - "name": "meta.template.expression.scala", - "match": "(\\$)([A-Z\\p{Lt}\\p{Lu}_a-z\\$\\p{Lo}\\p{Nl}\\p{Ll}][[A-Z\\p{Lt}\\p{Lu}_a-z\\p{Lo}\\p{Nl}\\p{Ll}0-9]]*)", - "captures": { - "1": { - "name": "punctuation.definition.template-expression.begin.scala" - } - } - }, - { - "name": "meta.template.expression.scala", - "begin": "\\$\\{", - "beginCaptures": { - "0": { - "name": "punctuation.definition.template-expression.begin.scala" - } - }, - "end": "\\}", - "endCaptures": { - "0": { - "name": "punctuation.definition.template-expression.end.scala" - } - }, - "patterns": [{ "include": "#code" }], - "contentName": "meta.embedded.line.scala" - } - ] - }, - "xml-entity": { - "match": "(&)([:a-zA-Z_][:a-zA-Z0-9_.-]*|#[0-9]+|#x[0-9a-fA-F]+)(;)", - "captures": { - "1": { "name": "punctuation.definition.constant.xml" }, - "3": { "name": "punctuation.definition.constant.xml" } - }, - "name": "constant.character.entity.xml" - }, - "xml-singlequotedString": { - "end": "'", - "begin": "'", - "beginCaptures": { - "0": { "name": "punctuation.definition.string.begin.xml" } - }, - "patterns": [{ "include": "#xml-entity" }], - "endCaptures": { - "0": { "name": "punctuation.definition.string.end.xml" } - }, - "name": "string.quoted.single.xml" - }, - "meta-colons": { - "patterns": [{ "match": "(?=?@^|~\\p{Sm}\\p{So}]+)?))(?=\\s*(//.*|/\\*(?!.*\\*/\\s*\\S.*).*)?$)", - "captures": { - "1": { "name": "keyword.declaration.end.scala" }, - "2": { "name": "keyword.declaration.end.scala" }, - "3": { "name": "entity.name.type.declaration" } - } - }, - { - "match": "^\\s*(end)\\s+(`[^`]+`|(?:[A-Z\\p{Lt}\\p{Lu}_a-z\\$\\p{Lo}\\p{Nl}\\p{Ll}][A-Z\\p{Lt}\\p{Lu}_a-z\\$\\p{Lo}\\p{Nl}\\p{Ll}0-9]*(?:(?<=_)[!#%&*+\\-\\/:<>=?@^|~\\p{Sm}\\p{So}]+)?|[!#%&*+\\-\\/:<>=?@^|~\\p{Sm}\\p{So}]+))?(?=\\s*(//.*|/\\*(?!.*\\*/\\s*\\S.*).*)?$)", - "captures": { - "1": { "name": "keyword.declaration.end.scala" }, - "2": { "name": "entity.name.declaration" } - } - }, - { - "match": "\\b(catch|finally|try)\\b", - "name": "keyword.control.exception.scala" - }, - { - "match": "(==?|!=|<=|>=|<>|<|>)", - "name": "keyword.operator.comparison.scala" - }, - { - "match": "(\\-|\\+|\\*|/(?![/*])|%|~)", - "name": "keyword.operator.arithmetic.scala" - }, - { "match": "(!|&&|\\|\\|)", "name": "keyword.operator.logical.scala" }, - { - "match": "(<-|←|->|→|=>|⇒|\\?|\\:+|@|\\|)+", - "name": "keyword.operator.scala" - } - ] - }, - "singleton-type": { - "match": "\\.(type)(?![A-Z\\p{Lt}\\p{Lu}_a-z\\$\\p{Lo}\\p{Nl}\\p{Ll}][A-Z\\p{Lt}\\p{Lu}_a-z\\$\\p{Lo}\\p{Nl}\\p{Ll}0-9]*(?:(?<=_)[!#%&*+\\-\\/:<>=?@^|~\\p{Sm}\\p{So}]+)?|[0-9])", - "captures": { "1": { "name": "keyword.type.scala" } } - }, - "inline": { - "patterns": [ - { - "match": "\\b(inline)(?=\\s+((?:[A-Z\\p{Lt}\\p{Lu}_a-z\\$\\p{Lo}\\p{Nl}\\p{Ll}][A-Z\\p{Lt}\\p{Lu}_a-z\\$\\p{Lo}\\p{Nl}\\p{Ll}0-9]*(?:(?<=_)[!#%&*+\\-\\/:<>=?@^|~\\p{Sm}\\p{So}]+)?|[!#%&*+\\-\\/:<>=?@^|~\\p{Sm}\\p{So}]+)|`[^`]+`)\\s*:)", - "name": "storage.modifier.other" - }, - { - "match": "\\b(inline)\\b(?=(?:.(?!\\b(?:val|def|given)\\b))*\\b(if|match)\\b)", - "name": "keyword.control.flow.scala" - } - ] - }, - "scala-quoted": { - "patterns": [ - { - "match": "['$]\\{(?!')", - "name": "punctuation.section.block.begin.scala" - }, - { "match": "'\\[(?!')", "name": "meta.bracket.scala" } - ] - }, - "xml-doublequotedString": { - "end": "\"", - "begin": "\"", - "beginCaptures": { - "0": { "name": "punctuation.definition.string.begin.xml" } - }, - "patterns": [{ "include": "#xml-entity" }], - "endCaptures": { - "0": { "name": "punctuation.definition.string.end.xml" } - }, - "name": "string.quoted.double.xml" - }, - "declarations": { - "patterns": [ - { - "match": "\\b(def)\\b\\s*(?!//|/\\*)((?:(?:[A-Z\\p{Lt}\\p{Lu}_a-z\\$\\p{Lo}\\p{Nl}\\p{Ll}][A-Z\\p{Lt}\\p{Lu}_a-z\\$\\p{Lo}\\p{Nl}\\p{Ll}0-9]*(?:(?<=_)[!#%&*+\\-\\/:<>=?@^|~\\p{Sm}\\p{So}]+)?|[!#%&*+\\-\\/:<>=?@^|~\\p{Sm}\\p{So}]+)|`[^`]+`))?", - "captures": { - "1": { "name": "keyword.declaration.scala" }, - "2": { "name": "entity.name.function.declaration" } - } - }, - { - "match": "\\b(trait)\\b\\s*(?!//|/\\*)((?:(?:[A-Z\\p{Lt}\\p{Lu}_a-z\\$\\p{Lo}\\p{Nl}\\p{Ll}][A-Z\\p{Lt}\\p{Lu}_a-z\\$\\p{Lo}\\p{Nl}\\p{Ll}0-9]*(?:(?<=_)[!#%&*+\\-\\/:<>=?@^|~\\p{Sm}\\p{So}]+)?|[!#%&*+\\-\\/:<>=?@^|~\\p{Sm}\\p{So}]+)|`[^`]+`))?", - "captures": { - "1": { "name": "keyword.declaration.scala" }, - "2": { "name": "entity.name.class.declaration" } - } - }, - { - "match": "\\b(?:(case)\\s+)?(class|object|enum)\\b\\s*(?!//|/\\*)((?:(?:[A-Z\\p{Lt}\\p{Lu}_a-z\\$\\p{Lo}\\p{Nl}\\p{Ll}][A-Z\\p{Lt}\\p{Lu}_a-z\\$\\p{Lo}\\p{Nl}\\p{Ll}0-9]*(?:(?<=_)[!#%&*+\\-\\/:<>=?@^|~\\p{Sm}\\p{So}]+)?|[!#%&*+\\-\\/:<>=?@^|~\\p{Sm}\\p{So}]+)|`[^`]+`))?", - "captures": { - "1": { "name": "keyword.declaration.scala" }, - "2": { "name": "keyword.declaration.scala" }, - "3": { "name": "entity.name.class.declaration" } - } - }, - { - "match": "(?=?@^|~\\p{Sm}\\p{So}]+)?|[!#%&*+\\-\\/:<>=?@^|~\\p{Sm}\\p{So}]+)|`[^`]+`))?", - "captures": { - "1": { "name": "keyword.declaration.scala" }, - "2": { "name": "entity.name.type.declaration" } - } - }, - { - "match": "\\b(?:(val)|(var))\\b\\s*(?!//|/\\*)(?=(?:(?:[A-Z\\p{Lt}\\p{Lu}_a-z\\$\\p{Lo}\\p{Nl}\\p{Ll}][A-Z\\p{Lt}\\p{Lu}_a-z\\$\\p{Lo}\\p{Nl}\\p{Ll}0-9]*(?:(?<=_)[!#%&*+\\-\\/:<>=?@^|~\\p{Sm}\\p{So}]+)?|[!#%&*+\\-\\/:<>=?@^|~\\p{Sm}\\p{So}]+)|`[^`]+`)?\\()", - "captures": { - "1": { "name": "keyword.declaration.stable.scala" }, - "2": { "name": "keyword.declaration.volatile.scala" } - } - }, - { - "match": "\\b(?:(val)|(var))\\b\\s*(?!//|/\\*)(?:(?:[A-Z\\p{Lt}\\p{Lu}_a-z\\$\\p{Lo}\\p{Nl}\\p{Ll}][A-Z\\p{Lt}\\p{Lu}_a-z\\$\\p{Lo}\\p{Nl}\\p{Ll}0-9]*(?:(?<=_)[!#%&*+\\-\\/:<>=?@^|~\\p{Sm}\\p{So}]+)?|[!#%&*+\\-\\/:<>=?@^|~\\p{Sm}\\p{So}]+)|`[^`]+`)(?=\\s*,)", - "captures": { - "1": { "name": "keyword.declaration.stable.scala" }, - "2": { "name": "keyword.declaration.volatile.scala" } - } - }, - { - "match": "\\b(?:(val)|(var))\\b\\s*(?!//|/\\*)((?:(?:[A-Z\\p{Lt}\\p{Lu}_a-z\\$\\p{Lo}\\p{Nl}\\p{Ll}][A-Z\\p{Lt}\\p{Lu}_a-z\\$\\p{Lo}\\p{Nl}\\p{Ll}0-9]*(?:(?<=_)[!#%&*+\\-\\/:<>=?@^|~\\p{Sm}\\p{So}]+)?|[!#%&*+\\-\\/:<>=?@^|~\\p{Sm}\\p{So}]+)|`[^`]+`))?", - "captures": { - "1": { "name": "keyword.declaration.stable.scala" }, - "2": { "name": "keyword.declaration.volatile.scala" }, - "3": { "name": "variable.other.declaration.scala" } - } - }, - { - "match": "\\b(package)\\s+(object)\\b\\s*(?!//|/\\*)((?:(?:[A-Z\\p{Lt}\\p{Lu}_a-z\\$\\p{Lo}\\p{Nl}\\p{Ll}][A-Z\\p{Lt}\\p{Lu}_a-z\\$\\p{Lo}\\p{Nl}\\p{Ll}0-9]*(?:(?<=_)[!#%&*+\\-\\/:<>=?@^|~\\p{Sm}\\p{So}]+)?|[!#%&*+\\-\\/:<>=?@^|~\\p{Sm}\\p{So}]+)|`[^`]+`))?", - "captures": { - "1": { "name": "keyword.other.scoping.scala" }, - "2": { "name": "keyword.declaration.scala" }, - "3": { "name": "entity.name.class.declaration" } - } - }, - { - "end": "(?<=[\\n;])", - "begin": "\\b(package)\\s+", - "beginCaptures": { "1": { "name": "keyword.other.import.scala" } }, - "patterns": [ - { "include": "#comments" }, - { - "match": "(`[^`]+`|(?:[A-Z\\p{Lt}\\p{Lu}_a-z\\$\\p{Lo}\\p{Nl}\\p{Ll}][A-Z\\p{Lt}\\p{Lu}_a-z\\$\\p{Lo}\\p{Nl}\\p{Ll}0-9]*(?:(?<=_)[!#%&*+\\-\\/:<>=?@^|~\\p{Sm}\\p{So}]+)?|[!#%&*+\\-\\/:<>=?@^|~\\p{Sm}\\p{So}]+))", - "name": "entity.name.package.scala" - }, - { "match": "\\.", "name": "punctuation.definition.package" } - ], - "name": "meta.package.scala" - }, - { - "match": "\\b(given)\\b\\s*([_a-z\\$\\p{Lo}\\p{Nl}\\p{Ll}][A-Z\\p{Lt}\\p{Lu}_a-z\\$\\p{Lo}\\p{Nl}\\p{Ll}0-9]*(?:(?<=_)[!#%&*+\\-\\/:<>=?@^|~\\p{Sm}\\p{So}]+)?|`[^`]+`)?", - "captures": { - "1": { "name": "keyword.declaration.scala" }, - "2": { "name": "entity.name.given.declaration" } - } - } - ] - }, - "char-literal": { - "end": "'|$", - "begin": "'", - "beginCaptures": { - "0": { "name": "punctuation.definition.character.begin.scala" } - }, - "patterns": [ - { - "match": "\\\\(?:[btnfr\\\\\"']|[0-7]{1,3}|u[0-9A-Fa-f]{4})", - "name": "constant.character.escape.scala" - }, - { - "match": "\\\\.", - "name": "invalid.illegal.unrecognized-character-escape.scala" - }, - { - "match": "[^']{2,}", - "name": "invalid.illegal.character-literal-too-long" - }, - { - "match": "(?'(?:[A-Z\\p{Lt}\\p{Lu}_a-z\\$\\p{Lo}\\p{Nl}\\p{Ll}][A-Z\\p{Lt}\\p{Lu}_a-z\\$\\p{Lo}\\p{Nl}\\p{Ll}0-9]*(?:(?<=_)[!#%&*+\\-\\/:<>=?@^|~\\p{Sm}\\p{So}]+)?|[!#%&*+\\-\\/:<>=?@^|~\\p{Sm}\\p{So}]+))(?!')", - "name": "constant.other.symbol.scala" - }, - "curly-braces": { - "begin": "\\{", - "end": "\\}", - "beginCaptures": { - "0": { "name": "punctuation.section.block.begin.scala" } - }, - "endCaptures": { "0": { "name": "punctuation.section.block.end.scala" } }, - "patterns": [{ "include": "#code" }] - }, - "meta-brackets": { - "patterns": [ - { - "match": "\\{", - "comment": "The punctuation.section.*.begin is needed for return snippet in source bundle", - "name": "punctuation.section.block.begin.scala" - }, - { - "match": "\\}", - "comment": "The punctuation.section.*.end is needed for return snippet in source bundle", - "name": "punctuation.section.block.end.scala" - }, - { "match": "{|}|\\(|\\)|\\[|\\]", "name": "meta.bracket.scala" } - ], - "comment": "For themes: Brackets look nice when colored." - }, - "qualifiedClassName": { - "match": "(\\b([A-Z][\\w]*))", - "captures": { "1": { "name": "entity.name.class" } } - }, - "backQuotedVariable": { "match": "`[^`]+`" }, - "storage-modifiers": { - "patterns": [ - { - "match": "\\b(private\\[\\S+\\]|protected\\[\\S+\\]|private|protected)\\b", - "name": "storage.modifier.access" - }, - { - "match": "\\b(synchronized|@volatile|abstract|final|lazy|sealed|implicit|override|@transient|@native)\\b", - "name": "storage.modifier.other" - }, - { - "match": "(?<=^|\\s)\\b(transparent|opaque|infix|open|inline)\\b(?=[a-z\\s]*\\b(def|val|var|given|type|class|trait|object|enum)\\b)", - "name": "storage.modifier.other" - } - ] - }, - "meta-bounds": { - "match": "<%|=:=|<:<|<%<|>:|<:", - "comment": "For themes: Matching view bounds", - "name": "meta.bounds.scala" - }, - "comments": { - "patterns": [ - { "include": "#block-comments" }, - { - "end": "(?!\\G)", - "begin": "(^[ \\t]+)?(?=//)", - "beginCaptures": { - "1": { "name": "punctuation.whitespace.comment.leading.scala" } - }, - "patterns": [ - { - "end": "\\n", - "begin": "//", - "beginCaptures": { - "0": { "name": "punctuation.definition.comment.scala" } - }, - "name": "comment.line.double-slash.scala" - } - ] - } - ] - }, - "block-comments": { - "patterns": [ - { - "match": "/\\*\\*/", - "captures": { - "0": { "name": "punctuation.definition.comment.scala" } - }, - "name": "comment.block.empty.scala" - }, - { - "end": "\\*/", - "begin": "^\\s*(/\\*\\*)(?!/)", - "beginCaptures": { - "1": { "name": "punctuation.definition.comment.scala" } - }, - "patterns": [ - { - "match": "(@param)\\s+(\\S+)", - "captures": { - "1": { "name": "keyword.other.documentation.scaladoc.scala" }, - "2": { "name": "variable.parameter.scala" } - } - }, - { - "match": "(@(?:tparam|throws))\\s+(\\S+)", - "captures": { - "1": { "name": "keyword.other.documentation.scaladoc.scala" }, - "2": { "name": "entity.name.class" } - } - }, - { - "match": "@(return|see|note|example|constructor|usecase|author|version|since|todo|deprecated|migration|define|inheritdoc)\\b", - "name": "keyword.other.documentation.scaladoc.scala" - }, - { - "match": "(\\[\\[)([^\\]]+)(\\]\\])", - "captures": { - "1": { - "name": "punctuation.definition.documentation.link.scala" - }, - "2": { "name": "string.other.link.title.markdown" }, - "3": { - "name": "punctuation.definition.documentation.link.scala" - } - } - }, - { "include": "#block-comments" } - ], - "endCaptures": { - "0": { "name": "punctuation.definition.comment.scala" } - }, - "name": "comment.block.documentation.scala" - }, - { - "end": "\\*/", - "begin": "/\\*", - "captures": { - "0": { "name": "punctuation.definition.comment.scala" } - }, - "patterns": [{ "include": "#block-comments" }], - "name": "comment.block.scala" - } - ] - }, - "xml-embedded-content": { - "patterns": [ - { - "end": "}", - "begin": "{", - "patterns": [{ "include": "#code" }], - "captures": { "0": { "name": "meta.bracket.scala" } }, - "name": "meta.source.embedded.scala" - }, - { - "match": " (?:([-_a-zA-Z0-9]+)((:)))?([_a-zA-Z-]+)=", - "captures": { - "1": { "name": "entity.other.attribute-name.namespace.xml" }, - "2": { "name": "entity.other.attribute-name.xml" }, - "3": { "name": "punctuation.separator.namespace.xml" }, - "4": { "name": "entity.other.attribute-name.localname.xml" } - } - }, - { "include": "#xml-doublequotedString" }, - { "include": "#xml-singlequotedString" } - ] - }, - "inheritance": { - "patterns": [ - { - "match": "\\b(extends|with|derives)\\b\\s*([A-Z\\p{Lt}\\p{Lu}][A-Z\\p{Lt}\\p{Lu}_a-z\\$\\p{Lo}\\p{Nl}\\p{Ll}0-9]*(?:(?<=_)[!#%&*+\\-\\/:<>=?@^|~\\p{Sm}\\p{So}]+)?|`[^`]+`|(?=\\([^\\)]+=>)|(?=(?:[A-Z\\p{Lt}\\p{Lu}_a-z\\$\\p{Lo}\\p{Nl}\\p{Ll}][A-Z\\p{Lt}\\p{Lu}_a-z\\$\\p{Lo}\\p{Nl}\\p{Ll}0-9]*(?:(?<=_)[!#%&*+\\-\\/:<>=?@^|~\\p{Sm}\\p{So}]+)?|[!#%&*+\\-\\/:<>=?@^|~\\p{Sm}\\p{So}]+))|(?=\"))?", - "captures": { - "1": { "name": "keyword.declaration.scala" }, - "2": { "name": "entity.other.inherited-class.scala" } - } - } - ] - }, - "extension": { - "patterns": [ - { - "match": "^\\s*(extension)\\s+(?=[\\[\\(])", - "captures": { "1": { "name": "keyword.declaration.scala" } } - } - ] - }, - "parameter-list": { - "patterns": [ - { - "match": "(?<=[^\\._$a-zA-Z0-9])(`[^`]+`|[_a-z\\$\\p{Lo}\\p{Nl}\\p{Ll}][A-Z\\p{Lt}\\p{Lu}_a-z\\$\\p{Lo}\\p{Nl}\\p{Ll}0-9]*(?:(?<=_)[!#%&*+\\-\\/:<>=?@^|~\\p{Sm}\\p{So}]+)?)\\s*(:)\\s+", - "captures": { - "1": { "name": "variable.parameter.scala" }, - "2": { "name": "meta.colon.scala" } - } - } - ] - }, - "xml-literal": { - "patterns": [ - { - "end": "(>(<))/(?:([-_a-zA-Z0-9]+)((:)))?([-_a-zA-Z0-9:]*[_a-zA-Z0-9])(>)", - "begin": "(<)((?:([_a-zA-Z0-9][_a-zA-Z0-9]*)((:)))?([_a-zA-Z0-9][-_a-zA-Z0-9:]*))(?=(\\s[^>]*)?>)", - "beginCaptures": { - "1": { "name": "punctuation.definition.tag.xml" }, - "3": { "name": "entity.name.tag.namespace.xml" }, - "4": { "name": "entity.name.tag.xml" }, - "5": { "name": "punctuation.separator.namespace.xml" }, - "6": { "name": "entity.name.tag.localname.xml" } - }, - "patterns": [{ "include": "#xml-embedded-content" }], - "comment": "We do not allow a tag name to start with a - since this would likely conflict with the <- operator. This is not very common for tag names anyway. Also code such as -- if (val val3) will falsly be recognized as an xml tag. The solution is to put a space on either side of the comparison operator", - "endCaptures": { - "1": { "name": "punctuation.definition.tag.xml" }, - "2": { "name": "meta.scope.between-tag-pair.xml" }, - "3": { "name": "entity.name.tag.namespace.xml" }, - "4": { "name": "entity.name.tag.xml" }, - "5": { "name": "punctuation.separator.namespace.xml" }, - "6": { "name": "entity.name.tag.localname.xml" }, - "7": { "name": "punctuation.definition.tag.xml" } - }, - "name": "meta.tag.no-content.xml" - }, - { - "end": "(/?>)", - "begin": "(]*?>)", - "patterns": [{ "include": "#xml-embedded-content" }], - "captures": { - "1": { "name": "punctuation.definition.tag.xml" }, - "2": { "name": "entity.name.tag.namespace.xml" }, - "3": { "name": "entity.name.tag.xml" }, - "4": { "name": "punctuation.separator.namespace.xml" }, - "5": { "name": "entity.name.tag.localname.xml" } - }, - "name": "meta.tag.xml" - }, - { "include": "#xml-entity" } - ] - } - }, - "uuid": "158C0929-299A-40C8-8D89-316BE0C446E8", - "patterns": [{ "include": "#code" }], - "name": "Scala", - "scopeName": "source.scala" -} diff --git a/extensions/svelte-web/LICENSE b/extensions/svelte-web/LICENSE deleted file mode 100644 index 55dd59ab4..000000000 --- a/extensions/svelte-web/LICENSE +++ /dev/null @@ -1,7 +0,0 @@ -Copyright (c) 2020-Present [these people](https://github.com/sveltejs/language-tools/graphs/contributors) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/extensions/svelte-web/README.md b/extensions/svelte-web/README.md deleted file mode 100644 index 3319c1ced..000000000 --- a/extensions/svelte-web/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# This extension is a fork from [language-tools](https://github.com/sveltejs/language-tools) for github1s - -# At present only languages features is reserved - -# I have deleted some files and only reserved the necessary code - -# Svelte for VS Code - -Provides syntax highlighting in VS Code. - -## Features - -- Svelte - - - Diagnostic messages for warnings and errors - - Syntax Highlighting - -- HTML - - Hover info - - Symbols in Outline panel -- CSS / SCSS / LESS - - Diagnostic messages for syntax and lint errors - - Hover info - - Color highlighting and color picker - - Symbols in Outline panel -- TypeScript / JavaScript - - Diagnostics messages for syntax errors, semantic errors, and suggestions - - Hover info - - Symbols in Outline panel diff --git a/extensions/svelte-web/icons/logo-nightly.png b/extensions/svelte-web/icons/logo-nightly.png deleted file mode 100644 index fa6963edaeaa80b7ea4a286b4faea63bf941cb99..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45799 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 diff --git a/extensions/svelte-web/icons/preview-right-dark.svg b/extensions/svelte-web/icons/preview-right-dark.svg deleted file mode 100644 index 1d5987719..000000000 --- a/extensions/svelte-web/icons/preview-right-dark.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/extensions/svelte-web/icons/preview-right-light.svg b/extensions/svelte-web/icons/preview-right-light.svg deleted file mode 100644 index 3f1152fc3..000000000 --- a/extensions/svelte-web/icons/preview-right-light.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/extensions/svelte-web/language-configuration.json b/extensions/svelte-web/language-configuration.json deleted file mode 100644 index fb93c0d7f..000000000 --- a/extensions/svelte-web/language-configuration.json +++ /dev/null @@ -1,78 +0,0 @@ -{ - "comments": { - "blockComment": [""] - }, - "brackets": [ - [""], - ["<", ">"], - ["{", "}"], - ["(", ")"], - ["[", "]"] - ], - "autoClosingPairs": [{ - "open": "{", - "close": "}" - }, - { - "open": "[", - "close": "]" - }, - { - "open": "(", - "close": ")" - }, - { - "open": "'", - "close": "'" - }, - { - "open": "\"", - "close": "\"" - }, - { - "open": "", - "notIn": ["comment", "string"] - }, - { - "open": "/**", - "close": "*/", - "notIn": ["string"] - } - ], - "surroundingPairs": [{ - "open": "'", - "close": "'" - }, - { - "open": "\"", - "close": "\"" - }, - { - "open": "`", - "close": "`" - }, - { - "open": "{", - "close": "}" - }, - { - "open": "[", - "close": "]" - }, - { - "open": "(", - "close": ")" - }, - { - "open": "<", - "close": ">" - } - ], - "folding": { - "markers": { - "start": "^\\s*//\\s*#?region\\b|^<(template|style|script)[^>]*>", - "end": "^\\s*//\\s*#?endregion\\b|^" - } - } -} \ No newline at end of file diff --git a/extensions/svelte-web/package.json b/extensions/svelte-web/package.json deleted file mode 100644 index 15ad134e9..000000000 --- a/extensions/svelte-web/package.json +++ /dev/null @@ -1,126 +0,0 @@ -{ - "name": "svelte-vscode", - "version": "0.5.0", - "description": "Svelte language support for VS Code", - "scripts": { - "build:grammar": "js-yaml syntaxes/svelte.tmLanguage.src.yaml > syntaxes/svelte.tmLanguage.json", - "build": "npm run build:ts && npm run build:grammar", - "vscode:prepublish": "npm run build && npm prune --production", - "compile": "npm run build:grammar", - "watch": "echo done" - }, - "repository": { - "type": "git", - "url": "https://github.com/sveltejs/language-tools.git" - }, - "keywords": [ - "svelte", - "vscode" - ], - "author": "James Birtles & the Svelte Core Team", - "license": "MIT", - "bugs": { - "url": "https://github.com/sveltejs/language-tools/issues" - }, - "homepage": "https://github.com/sveltejs/language-tools#readme", - "displayName": "Svelte for VS Code", - "publisher": "svelte", - "icon": "icons/logo.png", - "galleryBanner": { - "color": "#FF3E00", - "theme": "dark" - }, - "categories": [ - "Programming Languages", - "Formatters" - ], - "engines": { - "vscode": "^1.52.0" - }, - "contributes": { - "languages": [ - { - "id": "svelte", - "aliases": [ - "Svelte", - "svelte" - ], - "extensions": [ - ".svelte" - ], - "configuration": "./language-configuration.json" - }, - { - "id": "json", - "filenames": [ - ".prettierrc" - ] - } - ], - "grammars": [ - { - "language": "svelte", - "scopeName": "source.svelte", - "path": "./syntaxes/svelte.tmLanguage.json", - "embeddedLanguages": { - "text.html.basic": "html", - "text.html.markdown": "markdown", - "text.pug": "jade", - "source.css": "css", - "source.css.less": "less", - "source.css.scss": "scss", - "source.css.postcss": "postcss", - "source.sass": "sass", - "source.stylus": "stylus", - "source.js": "javascript", - "source.ts": "typescript" - } - }, - { - "scopeName": "svelte.pug", - "path": "./syntaxes/pug-svelte.json", - "injectTo": [ - "source.svelte" - ], - "embeddedLanguages": { - "source.ts": "typescript", - "text.pug": "jade" - } - }, - { - "scopeName": "svelte.pug.tags", - "path": "./syntaxes/pug-svelte-tags.json", - "injectTo": [ - "source.svelte" - ], - "embeddedLanguages": { - "source.ts": "typescript", - "text.pug": "jade" - } - }, - { - "scopeName": "svelte.pug.dotblock", - "path": "./syntaxes/pug-svelte-dotblock.json", - "injectTo": [ - "source.svelte" - ], - "embeddedLanguages": { - "source.ts": "typescript" - } - }, - { - "scopeName": "markdown.svelte.codeblock", - "path": "./syntaxes/markdown-svelte.json", - "injectTo": [ - "text.html.markdown" - ], - "embeddedLanguages": { - "meta.embedded.block.svelte": "svelte" - } - } - ] - }, - "devDependencies": { - "js-yaml": "^4.0.0" - } -} diff --git a/extensions/svelte-web/scripts/.eslintrc.js b/extensions/svelte-web/scripts/.eslintrc.js deleted file mode 100644 index db58780fd..000000000 --- a/extensions/svelte-web/scripts/.eslintrc.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - root: false, - rules: { - '@typescript-eslint/no-var-requires': 'off', - }, -}; diff --git a/extensions/svelte-web/syntaxes/markdown-svelte.json b/extensions/svelte-web/syntaxes/markdown-svelte.json deleted file mode 100644 index 5fced660e..000000000 --- a/extensions/svelte-web/syntaxes/markdown-svelte.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "scopeName": "markdown.svelte.codeblock", - "fileTypes": [], - "injectionSelector": "L:text.html.markdown", - "patterns": [ - { - "include": "#svelte-code-block" - } - ], - "repository": { - "svelte-code-block": { - "begin": "(^|\\G)(\\s*)(\\`{3,}|~{3,})\\s*(?i:(svelte|sv)(\\s+[^`~]*)?$)", - "name": "markup.fenced_code.block.markdown", - "end": "(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$", - "beginCaptures": { - "3": { - "name": "punctuation.definition.markdown" - }, - "5": { - "name": "fenced_code.block.language" - }, - "6": { - "name": "fenced_code.block.language.attributes" - } - }, - "endCaptures": { - "3": { - "name": "punctuation.definition.markdown" - } - }, - "patterns": [ - { - "begin": "(^|\\G)(\\s*)(.*)", - "while": "(^|\\G)(?!\\s*([`~]{3,})\\s*$)", - "contentName": "meta.embedded.block.svelte", - "patterns": [ - { - "include": "source.svelte" - } - ] - } - ] - } - } -} diff --git a/extensions/svelte-web/syntaxes/pug-svelte-dotblock.json b/extensions/svelte-web/syntaxes/pug-svelte-dotblock.json deleted file mode 100644 index 450a1451b..000000000 --- a/extensions/svelte-web/syntaxes/pug-svelte-dotblock.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "scopeName": "svelte.pug.dotblock", - "fileTypes": [], - "injectionSelector": "L:text.block.pug -meta.embedded.ts", - "patterns": [ - { - "include": "#interp-object-literal" - }, - { - "include": "#interp" - } - ], - "repository": { - "interp-object-literal": { - "contentName": "meta.interpolation meta.embedded.ts", - "begin": "(?![!$#]){\\s*?(?={)", - "beginCaptures": { - "0": { - "name": "punctuation.section.interpolation.begin" - } - }, - "end": "(?<=})\\s*?}", - "endCaptures": { - "0": { - "name": "punctuation.section.interpolation.end" - } - }, - "patterns": [ - { - "include": "source.ts#object-literal" - } - ] - }, - "interp": { - "contentName": "meta.interpolation meta.embedded.ts", - "begin": "(?![!$#]){", - "beginCaptures": { - "0": { - "name": "punctuation.section.interpolation.begin" - } - }, - "end": "}", - "endCaptures": { - "0": { - "name": "punctuation.section.interpolation.end" - } - }, - "patterns": [ - { - "include": "source.ts" - } - ] - } - } -} diff --git a/extensions/svelte-web/syntaxes/pug-svelte-tags.json b/extensions/svelte-web/syntaxes/pug-svelte-tags.json deleted file mode 100644 index bfade35ef..000000000 --- a/extensions/svelte-web/syntaxes/pug-svelte-tags.json +++ /dev/null @@ -1,201 +0,0 @@ -{ - "scopeName": "svelte.pug.tags", - "fileTypes": [], - "injectionSelector": "L:text.pug meta.tag.other -meta.embedded.ts", - "patterns": [ - { - "include": "#interp-object-literal" - }, - { - "include": "#interp" - }, - { - "include": "#attr-function" - }, - { - "include": "#attr-interp" - }, - { - "include": "#attr-interp-invalid-quotes" - }, - { - "include": "#attr-interp-invalid-noquotes" - }, - { - "include": "#attr-event" - }, - { - "include": "#attr-variable" - } - ], - "repository": { - "interp-object-literal": { - "contentName": "meta.interpolation meta.embedded.ts", - "begin": "(?![!$#]){\\s*?(?={)", - "beginCaptures": { - "0": { - "name": "punctuation.section.interpolation.begin" - } - }, - "end": "(?<=})\\s*?}", - "endCaptures": { - "0": { - "name": "punctuation.section.interpolation.end" - } - }, - "patterns": [ - { - "include": "source.ts#object-literal" - } - ] - }, - "interp": { - "contentName": "meta.interpolation meta.embedded.ts", - "begin": "(?![!$#]){", - "beginCaptures": { - "0": { - "name": "punctuation.section.interpolation.begin" - } - }, - "end": "}", - "endCaptures": { - "0": { - "name": "punctuation.section.interpolation.end" - } - }, - "patterns": [ - { - "include": "source.ts" - } - ] - }, - "attr-interp": { - "match": "\\b(?<=[\\w$\\-_]*)\\s*?(!=|=)\\s*?([`'\"])((?![$!#]){.*})(\\k<2>)", - "captures": { - "1": { - "patterns": [ - { - "match": "=", - "name": "invalid.illegal" - }, - { - "match": "!=", - "name": "keyword.operator.assignment" - } - ] - }, - "2": { - "name": "punctuation.section.interpolation.begin" - }, - "3": { - "patterns": [ - { - "include": "#interp" - } - ] - }, - "4": { - "name": "punctuation.section.interpolation.begin" - } - } - }, - "attr-interp-invalid-quotes": { - "match": "\\b(?<=[\\w$\\-_]*)\\s*?(!=|=)\\s*?([`'\"])((?![$!#]){.*})(?!\\k<2>)", - "captures": { - "1": { - "patterns": [ - { - "match": "=", - "name": "invalid.illegal" - }, - { - "match": "!=", - "name": "keyword.operator.assignment" - } - ] - }, - "2": { - "name": "punctuation.section.interpolation.begin" - }, - "3": { - "name": "invalid.illegal" - }, - "4": { - "name": "invalid.illegal" - } - } - }, - "attr-interp-invalid-noquotes": { - "match": "\\b(?<=[\\w$\\-_]*)\\s*?(!=|=)\\s*?(?![`'\"])((?![$!#]){.*})(?![`'\"])", - "captures": { - "1": { - "patterns": [ - { - "match": "=", - "name": "invalid.illegal" - }, - { - "match": "!=", - "name": "keyword.operator.assignment" - } - ] - }, - "2": { - "name": "invalid.illegal" - }, - "3": { - "patterns": [ - { - "include": "#interp" - } - ] - }, - "4": { - "name": "invalid.illegal" - } - } - }, - "attr-function": { - "match": "\\b(use|transition|in|out|animate)(:)(\\w+)", - "captures": { - "1": { - "name": "entity.other.attribute-name" - }, - "2": { - "name": "keyword.operator.assignment" - }, - "3": { - "name": "variable.function" - } - } - }, - "attr-event": { - "match": "\\b(on)(:)(\\w+)", - "captures": { - "1": { - "name": "entity.other.attribute-name" - }, - "2": { - "name": "keyword.operator.assignment" - }, - "3": { - "name": "entity.name.type" - } - } - }, - "attr-variable": { - "match": "\\b(bind|class|let)(:)(\\w+)", - "captures": { - "1": { - "name": "entity.other.attribute-name" - }, - "2": { - "name": "keyword.operator.assignment" - }, - "3": { - "name": "variable.parameter" - } - } - } - } -} diff --git a/extensions/svelte-web/syntaxes/pug-svelte.json b/extensions/svelte-web/syntaxes/pug-svelte.json deleted file mode 100644 index c09105464..000000000 --- a/extensions/svelte-web/syntaxes/pug-svelte.json +++ /dev/null @@ -1,293 +0,0 @@ -{ - "scopeName": "svelte.pug", - "fileTypes": [], - "injectionSelector": "L:text.pug -meta.embedded.ts -meta.tag.other -text.block.pug, L:inline.pug -meta.embedded.ts -meta.tag.other", - "patterns": [ - { - "include": "#interp-object-literal" - }, - { - "include": "#interp" - }, - { - "include": "#tag-component" - }, - { - "include": "#tag-component-no-params" - }, - { - "include": "#mixin-svelte" - }, - { - "include": "#mixin-else" - } - ], - "repository": { - "interp-object-literal": { - "contentName": "meta.interpolation meta.embedded.ts", - "begin": "(?![!$#]){\\s*?(?={)", - "beginCaptures": { - "0": { - "name": "punctuation.section.interpolation.begin" - } - }, - "end": "(?<=})\\s*?}", - "endCaptures": { - "0": { - "name": "punctuation.section.interpolation.end" - } - }, - "patterns": [ - { - "include": "source.ts#object-literal" - } - ] - }, - "interp": { - "contentName": "meta.interpolation meta.embedded.ts", - "begin": "(?![!$#]){", - "beginCaptures": { - "0": { - "name": "punctuation.section.interpolation.begin" - } - }, - "end": "}", - "endCaptures": { - "0": { - "name": "punctuation.section.interpolation.end" - } - }, - "patterns": [ - { - "include": "source.ts" - } - ] - }, - "tag-component": { - "name": "meta.tag.svelte", - "begin": "(?<=^\\s*?|#\\[\\s*?|:\\s+?)([A-Z][a-zA-Z0-9_]*)\\s*?(?=\\()", - "beginCaptures": { - "0": { - "name": "support.class.component.svelte" - } - }, - "end": "(?<=\\))", - "endCaptures": { - "0": { - "name": "constant.name.attribute.tag" - } - }, - "patterns": [ - { - "include": "text.pug#tag_attributes" - } - ] - }, - "tag-component-no-params": { - "name": "meta.tag.svelte", - "match": "(?<=^\\s*?|#\\[\\s*?|:\\s+?)([A-Z][a-zA-Z0-9_]*)", - "captures": { - "0": { - "name": "support.class.component.svelte" - } - } - }, - "mixin-svelte": { - "match": "(?<=^\\s*?|#\\[\\s*?|:\\s+?)(\\+)(debug|if|elseif|then|catch|each|await|html|key)\\s*?(\\()\\s*?([`'\"])(.*?)(\\k<4>)\\s*?(\\))", - "captures": { - "1": { - "name": "punctuation.definition.keyword" - }, - "2": { - "patterns": [ - { - "match": "debug", - "name": "keyword.other.debugger" - }, - { - "match": "if|elseif", - "name": "keyword.control.conditional" - }, - { - "match": "then|catch|await", - "name": "keyword.control.flow" - }, - { - "match": "each", - "name": "keyword.control" - }, - { - "match": "html|key", - "name": "support.function" - } - ] - }, - "3": { - "name": "meta.brace.round" - }, - "4": { - "name": "punctuation.definition.generic.begin" - }, - "5": { - "patterns": [ - { - "match": "(?<=each\\s*?\\(\\s*?')(.*)\\s+?(as\\s+?(.*?)(\\s*?,\\s*?)(.*?|)(\\s+?\\(.*\\)|)$)", - "captures": { - "1": { - "name": "meta.embedded.ts", - "patterns": [ - { - "include": "source.ts" - } - ] - }, - "2": { - "name": "keyword.control.as" - }, - "3": { - "name": "meta.embedded.t", - "patterns": [ - { - "include": "source.ts" - } - ] - }, - "4": { - "name": "punctuation.separator" - }, - "5": { - "name": "meta.embedded.t", - "patterns": [ - { - "include": "source.ts" - } - ] - }, - "6": { - "patterns": [ - { - "match": "(\\()(.*)(\\))", - "captures": { - "1": { - "name": "meta.brace.round" - }, - "2": { - "name": "variable" - }, - "3": { - "name": "meta.brace.round" - } - } - } - ] - } - } - }, - { - "match": "(?<=each\\s*?\\(\\s*?')(.*)\\s+?(as\\s+?(.*?)(\\s+?\\(.*\\)|)$)", - "captures": { - "1": { - "name": "meta.embedded.ts", - "patterns": [ - { - "include": "source.ts" - } - ] - }, - "2": { - "name": "keyword.control.as" - }, - "3": { - "name": "meta.embedded.t", - "patterns": [ - { - "include": "source.ts" - } - ] - }, - "4": { - "patterns": [ - { - "match": "(\\()(.*)(\\))", - "captures": { - "1": { - "name": "meta.brace.round" - }, - "2": { - "name": "variable" - }, - "3": { - "name": "meta.brace.round" - } - } - } - ] - } - } - }, - { - "match": "(?<=await\\s*?\\(\\s*?')(.*)\\s+?(then(.*)$)", - "captures": { - "1": { - "name": "meta.embedded.ts", - "patterns": [ - { - "include": "source.ts" - } - ] - }, - "2": { - "name": "keyword.control.flow" - }, - "3": { - "name": "variable" - } - } - }, - { - "match": "(?<=debug\\s*?\\(\\s*?')(\\w+?)(,|$)", - "captures": { - "1": { - "name": "variable" - }, - "2": { - "name": "punctuation.separator" - } - } - }, - { - "match": "(.*)$", - "captures": { - "0": { - "name": "meta.embedded.ts", - "patterns": [ - { - "include": "source.ts" - } - ] - } - } - } - ] - }, - "6": { - "name": "punctuation.definition.generic.end" - }, - "7": { - "name": "meta.brace.round" - } - } - }, - "mixin-else": { - "match": "(?<=^\\s*?|#\\[\\s*?|:\\s+?)(\\+)(else)", - "captures": { - "1": { - "name": "punctuation.definition.keyword" - }, - "2": { - "name": "keyword.control.conditional" - } - } - } - } -} diff --git a/extensions/svelte-web/syntaxes/svelte.tmLanguage.json b/extensions/svelte-web/syntaxes/svelte.tmLanguage.json deleted file mode 100644 index a77e9c52c..000000000 --- a/extensions/svelte-web/syntaxes/svelte.tmLanguage.json +++ /dev/null @@ -1,1015 +0,0 @@ -{ - "name": "Svelte Component", - "scopeName": "source.svelte", - "fileTypes": [ - "svelte" - ], - "uuid": "7582b62f-51d9-4a84-8c8d-fc189530faf6", - "injections": { - "L:meta.script.svelte meta.lang.javascript - (meta source)": { - "patterns": [ - { - "begin": "(?<=>)(?!)(?!)(?!)(?!)(?!)(?!)(?!)(?!)(?!)(?!)(?!)(?!)\\s", - "end": "(?=|})", - "end": "(?=<|{)", - "name": "text.svelte" - } - ] - }, - "comments": { - "begin": "", - "captures": { - "0": { - "name": "punctuation.definition.comment.svelte" - } - }, - "name": "comment.block.svelte", - "patterns": [ - { - "begin": "(@)(component)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.keyword.svelte" - }, - "2": { - "name": "storage.type.class.component.svelte keyword.declaration.class.component.svelte" - } - }, - "end": "(?=-->)", - "contentName": "comment.block.documentation.svelte", - "patterns": [ - { - "match": ".*?(?=-->)", - "captures": { - "0": { - "patterns": [ - { - "include": "text.html.markdown" - } - ] - } - } - }, - { - "include": "text.html.markdown" - } - ] - }, - { - "match": "\\G-?>|)|--!>", - "name": "invalid.illegal.characters-not-allowed-here.svelte" - } - ] - }, - "destructuring": { - "patterns": [ - { - "begin": "(?={)", - "end": "(?<=})", - "name": "meta.embedded.expression.svelte source.ts", - "patterns": [ - { - "include": "source.ts#object-binding-pattern" - } - ] - }, - { - "begin": "(?=\\[)", - "end": "(?<=\\])", - "name": "meta.embedded.expression.svelte source.ts", - "patterns": [ - { - "include": "source.ts#array-binding-pattern" - } - ] - } - ] - }, - "interpolation": { - "patterns": [ - { - "begin": "\\{", - "end": "\\}", - "beginCaptures": { - "0": { - "name": "punctuation.section.embedded.begin.svelte" - } - }, - "endCaptures": { - "0": { - "name": "punctuation.section.embedded.end.svelte" - } - }, - "contentName": "meta.embedded.expression.svelte source.ts", - "patterns": [ - { - "begin": "\\G\\s*(?={)", - "end": "(?<=})", - "patterns": [ - { - "include": "source.ts#object-literal" - } - ] - }, - { - "include": "source.ts" - } - ] - } - ] - }, - "special-tags": { - "patterns": [ - { - "include": "#special-tags-void" - }, - { - "include": "#special-tags-block-begin" - }, - { - "include": "#special-tags-block-end" - } - ] - }, - "special-tags-keywords": { - "match": "([#@/:])(else\\s+if|[a-z]*)", - "captures": { - "1": { - "name": "punctuation.definition.keyword.svelte" - }, - "2": { - "patterns": [ - { - "match": "if|else\\s+if|else", - "name": "keyword.control.conditional.svelte" - }, - { - "match": "each|key", - "name": "keyword.control.svelte" - }, - { - "match": "await|then|catch", - "name": "keyword.control.flow.svelte" - }, - { - "match": "html", - "name": "keyword.other.svelte" - }, - { - "match": "debug", - "name": "keyword.other.debugger.svelte" - } - ] - } - } - }, - "special-tags-modes": { - "patterns": [ - { - "begin": "(?<=(if|key|then|catch|html).*?)\\G", - "end": "(?=})", - "name": "meta.embedded.expression.svelte source.ts", - "patterns": [ - { - "include": "source.ts" - } - ] - }, - { - "begin": "(?<=each.*?)\\G", - "end": "(?=})", - "patterns": [ - { - "begin": "\\G\\s*?(?=\\S)", - "end": "(?=(?:^\\s*|\\s+)(as))", - "contentName": "meta.embedded.expression.svelte source.ts", - "patterns": [ - { - "include": "source.ts" - } - ] - }, - { - "begin": "(as)", - "beginCaptures": { - "1": { - "name": "keyword.control.as.svelte" - } - }, - "end": "(?=})", - "patterns": [ - { - "include": "#destructuring" - }, - { - "begin": "\\(", - "end": "\\)|(?=})", - "captures": { - "0": { - "name": "meta.brace.round.svelte" - } - }, - "contentName": "meta.embedded.expression.svelte source.ts", - "patterns": [ - { - "include": "source.ts" - } - ] - }, - { - "match": "(\\s*([_$[:alpha:]][_$[:alnum:]]*)\\s*)", - "captures": { - "1": { - "name": "meta.embedded.expression.svelte source.ts", - "patterns": [ - { - "include": "source.ts" - } - ] - } - } - }, - { - "match": ",", - "name": "punctuation.separator.svelte" - } - ] - } - ] - }, - { - "begin": "(?<=await.*?)\\G", - "end": "(?=})", - "patterns": [ - { - "begin": "\\G\\s*?(?=\\S)", - "end": "\\s+(then)|(?=})", - "endCaptures": { - "1": { - "name": "keyword.control.flow.svelte" - } - }, - "contentName": "meta.embedded.expression.svelte source.ts", - "patterns": [ - { - "include": "source.ts" - } - ] - }, - { - "begin": "(?<=then\\b)", - "end": "(?=})", - "contentName": "meta.embedded.expression.svelte source.ts", - "patterns": [ - { - "include": "source.ts" - } - ] - } - ] - }, - { - "begin": "(?<=debug.*?)\\G", - "end": "(?=})", - "patterns": [ - { - "match": "[_$[:alpha:]][_$[:alnum:]]*", - "captures": { - "0": { - "name": "meta.embedded.expression.svelte source.ts", - "patterns": [ - { - "include": "source.ts" - } - ] - } - } - }, - { - "match": ",", - "name": "punctuation.separator.svelte" - } - ] - } - ] - }, - "special-tags-void": { - "begin": "({)\\s*((?:[@:])(else\\s+if|[a-z]*))", - "beginCaptures": { - "1": { - "name": "punctuation.definition.block.begin.svelte" - }, - "2": { - "patterns": [ - { - "include": "#special-tags-keywords" - } - ] - } - }, - "end": "\\}", - "endCaptures": { - "0": { - "name": "punctuation.definition.block.end.svelte" - } - }, - "name": "meta.special.$3.svelte", - "patterns": [ - { - "include": "#special-tags-modes" - } - ] - }, - "special-tags-block-begin": { - "begin": "({)\\s*(#([a-z]*))", - "end": "(})", - "name": "meta.special.$3.svelte meta.special.start.svelte", - "beginCaptures": { - "1": { - "name": "punctuation.definition.block.begin.svelte" - }, - "2": { - "patterns": [ - { - "include": "#special-tags-keywords" - } - ] - } - }, - "endCaptures": { - "0": { - "name": "punctuation.definition.block.end.svelte" - } - }, - "patterns": [ - { - "include": "#special-tags-modes" - } - ] - }, - "special-tags-block-end": { - "begin": "({)\\s*(/([a-z]*))", - "end": "(})", - "name": "meta.special.$3.svelte meta.special.end.svelte", - "beginCaptures": { - "1": { - "name": "punctuation.definition.block.begin.svelte" - }, - "2": { - "patterns": [ - { - "include": "#special-tags-keywords" - } - ] - } - }, - "endCaptures": { - "1": { - "name": "punctuation.definition.block.end.svelte" - } - } - }, - "attributes": { - "patterns": [ - { - "include": "#attributes-directives" - }, - { - "include": "#attributes-keyvalue" - }, - { - "include": "#attributes-interpolated" - } - ] - }, - "attributes-interpolated": { - "begin": "(?)", - "patterns": [ - { - "include": "#interpolation" - }, - { - "match": "([0-9._]+[\\w]{,4})(?=\\s|/?>)", - "name": "constant.numeric.decimal.svelte", - "patterns": [ - { - "include": "#interpolation" - } - ] - }, - { - "match": "([^\\s\"'=<>`/]|/(?!>))+", - "name": "string.unquoted.svelte", - "patterns": [ - { - "include": "#interpolation" - } - ] - }, - { - "begin": "(['\"])", - "end": "\\1", - "beginCaptures": { - "0": { - "name": "punctuation.definition.string.begin.svelte" - } - }, - "endCaptures": { - "0": { - "name": "punctuation.definition.string.end.svelte" - } - }, - "name": "string.quoted.svelte", - "patterns": [ - { - "include": "#interpolation" - } - ] - } - ] - }, - "attributes-directives-keywords": { - "patterns": [ - { - "match": "on|use|bind", - "name": "keyword.control.svelte" - }, - { - "match": "transition|in|out|animate", - "name": "keyword.other.animation.svelte" - }, - { - "match": "let", - "name": "storage.type.svelte" - }, - { - "match": "class", - "name": "entity.other.attribute-name.svelte" - } - ] - }, - "attributes-directives-types": { - "patterns": [ - { - "match": "(?<=(on):).*$", - "name": "entity.name.type.svelte" - }, - { - "match": "(?<=(bind):).*$", - "name": "variable.parameter.svelte" - }, - { - "match": "(?<=(use|transition|in|out|animate):).*$", - "name": "variable.function.svelte" - }, - { - "match": "(?<=(let|class):).*$", - "name": "variable.parameter.svelte" - } - ] - }, - "attributes-directives-types-assigned": { - "patterns": [ - { - "match": "(?<=(bind):)this$", - "name": "variable.language.svelte" - }, - { - "match": "(?<=(bind):).*$", - "name": "entity.name.type.svelte" - }, - { - "match": "(?<=(class):).*$", - "name": "entity.other.attribute-name.class.svelte" - }, - { - "include": "#attributes-directives-types" - } - ] - }, - "attributes-directives": { - "begin": "(?)", - "name": "meta.tag.start.svelte", - "patterns": [ - { - "include": "#attributes" - } - ] - }, - "tags-lang-start-attributes": { - "begin": "\\G", - "end": "(?=/>)|>", - "name": "meta.tag.start.svelte", - "patterns": [ - { - "include": "#attributes" - } - ] - }, - "tags-start-node": { - "match": "(<)([^/\\s>/]*)", - "captures": { - "1": { - "name": "punctuation.definition.tag.begin.svelte" - }, - "2": { - "patterns": [ - { - "include": "#tags-name" - } - ] - } - }, - "name": "meta.tag.start.svelte" - }, - "tags-end-node": { - "match": "()|(/>)", - "captures": { - "1": { - "name": "meta.tag.end.svelte punctuation.definition.tag.begin.svelte" - }, - "2": { - "name": "meta.tag.end.svelte", - "patterns": [ - { - "include": "#tags-name" - } - ] - }, - "3": { - "name": "meta.tag.end.svelte punctuation.definition.tag.end.svelte" - }, - "4": { - "name": "meta.tag.start.svelte punctuation.definition.tag.end.svelte" - } - } - }, - "tags-lang": { - "begin": "<(script|style|template)", - "end": "|/>", - "beginCaptures": { - "0": { - "patterns": [ - { - "include": "#tags-start-node" - } - ] - } - }, - "endCaptures": { - "0": { - "patterns": [ - { - "include": "#tags-end-node" - } - ] - } - }, - "name": "meta.$1.svelte", - "patterns": [ - { - "begin": "\\G(?=\\s*(type|lang)\\s*=\\s*(['\"]|)(?:text/)?(\\w+)\\2)", - "end": "(?=)", - "name": "meta.lang.$3.svelte", - "patterns": [ - { - "include": "#tags-lang-start-attributes" - } - ] - }, - { - "include": "#tags-lang-start-attributes" - } - ] - }, - "tags-void": { - "begin": "(<)(area|base|br|col|embed|hr|img|input|link|meta|param|source|track|wbr)(?=\\s|/?>)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.svelte" - }, - "2": { - "name": "entity.name.tag.svelte" - } - }, - "end": "/?>", - "endCaptures": { - "0": { - "name": "punctuation.definition.tag.begin.svelte" - } - }, - "name": "meta.tag.void.svelte", - "patterns": [ - { - "include": "#attributes" - } - ] - }, - "tags-general-start": { - "begin": "(<)([^/\\s>/]*)", - "end": "(/?>)", - "beginCaptures": { - "0": { - "patterns": [ - { - "include": "#tags-start-node" - } - ] - } - }, - "endCaptures": { - "1": { - "name": "meta.tag.start.svelte punctuation.definition.tag.end.svelte" - } - }, - "name": "meta.scope.tag.$2.svelte", - "patterns": [ - { - "include": "#tags-start-attributes" - } - ] - }, - "tags-general-end": { - "begin": "(]*)", - "end": "(>)", - "beginCaptures": { - "1": { - "name": "meta.tag.end.svelte punctuation.definition.tag.begin.svelte" - }, - "2": { - "name": "meta.tag.end.svelte", - "patterns": [ - { - "include": "#tags-name" - } - ] - } - }, - "endCaptures": { - "1": { - "name": "meta.tag.end.svelte punctuation.definition.tag.end.svelte" - } - }, - "name": "meta.scope.tag.$2.svelte" - } - } -} diff --git a/extensions/svelte-web/syntaxes/svelte.tmLanguage.src.yaml b/extensions/svelte-web/syntaxes/svelte.tmLanguage.src.yaml deleted file mode 100644 index ab486c91d..000000000 --- a/extensions/svelte-web/syntaxes/svelte.tmLanguage.src.yaml +++ /dev/null @@ -1,695 +0,0 @@ ---- -name: Svelte Component -scopeName: source.svelte -fileTypes: [svelte] -uuid: 7582b62f-51d9-4a84-8c8d-fc189530faf6 - -injections: - # ---- EMBEDDED LANGUAGES - # Yes, this is dark, abyssal magic - conjured up from the depths of tedious experimentation. - - # Format: - # 'L:meta..svelte (meta.lang. | meta.lang. | ...) - (meta source)' - # patterns: [{begin: '(?<=>)(?!, patterns: [{ include: source. }]}] - - # Script Languages - # JavaScript | 'javascript' | 'source.js' - 'L:meta.script.svelte meta.lang.javascript - (meta source)': - patterns: - [ - { - begin: '(?<=>)(?!)(?!)(?!)(?!)(?!)(?!)(?!)(?!)(?!)(?!)(?!)(?!)\s', - end: '(?=|}) - end: (?=<|{) - name: text.svelte - - # ---------- - # COMMENTS - - # Basic HTML comments. - comments: - begin: - captures: - 0: { name: punctuation.definition.comment.svelte } - name: comment.block.svelte - patterns: - # Component documentation. - - begin: (@)(component) - beginCaptures: - 1: { name: punctuation.definition.keyword.svelte } - 2: - { - name: storage.type.class.component.svelte keyword.declaration.class.component.svelte, - } - end: (?=-->) - contentName: comment.block.documentation.svelte - patterns: - # The reason we do it like this is so that the Markdown grammar cannot break out of the `-->` bit. - # Embedded languages, for whatever reason, can only break out of begin-end blocks. (...most of the time) - # If you shove them in a match pattern, it cannot break out of it's matched bounds. - # And since the match consumed the line leading to `-->`, - # the 'block' markdown won't break out of the comment block. - - match: .*?(?=-->) - captures: { 0: { patterns: [include: text.html.markdown] } } - - include: text.html.markdown - # Validations - - { - match: '\G-?>|)|--!>', - name: invalid.illegal.characters-not-allowed-here.svelte, - } - - # ------ - # MISC - - # Destructuring {} and [] JS syntax. Currently only used in some special tags. - destructuring: - patterns: - # {...} - - { - begin: '(?={)', - end: '(?<=})', - name: meta.embedded.expression.svelte source.ts, - patterns: [include: source.ts#object-binding-pattern], - } - # [...] - - { - begin: '(?=\[)', - end: '(?<=\])', - name: meta.embedded.expression.svelte source.ts, - patterns: [include: source.ts#array-binding-pattern], - } - - # Plain old interpolation between `{...}` blocks. - interpolation: - patterns: - - begin: \{ - end: \} - beginCaptures: - { 0: { name: punctuation.section.embedded.begin.svelte } } - endCaptures: { 0: { name: punctuation.section.embedded.end.svelte } } - contentName: meta.embedded.expression.svelte source.ts - patterns: - # Object literals - usually used within attributes. - - begin: \G\s*(?={) - end: (?<=}) - patterns: [include: source.ts#object-literal] - - include: source.ts - - # -------------- - # SPECIAL TAGS - - # All special tags together. Used whenever a new scope is introduced. - special-tags: - patterns: - - include: '#special-tags-void' - - include: '#special-tags-block-begin' - - include: '#special-tags-block-end' - - # Special tag keywords, like `#if` and `/await`. - special-tags-keywords: - match: ([#@/:])(else\s+if|[a-z]*) - captures: - 1: { name: punctuation.definition.keyword.svelte } - # The keyword itself. If others are patched in in the future, they can easily be added here. - 2: - { - patterns: - [ - { - match: if|else\s+if|else, - name: keyword.control.conditional.svelte, - }, - { match: each|key, name: keyword.control.svelte }, - { match: await|then|catch, name: keyword.control.flow.svelte }, - { match: html, name: keyword.other.svelte }, - { match: debug, name: keyword.other.debugger.svelte }, - ], - } - - # Scopes special tag _block start nodes_ depending on what type they are, such as `#if` or `#await` blocks. - special-tags-modes: - patterns: - # Expressions or simple values. - - begin: (?<=(if|key|then|catch|html).*?)\G - end: (?=}) - name: meta.embedded.expression.svelte source.ts - patterns: [include: source.ts] - - # Each. - - begin: (?<=each.*?)\G - end: (?=}) - patterns: - # Start expression. - - begin: \G\s*?(?=\S) - end: (?=(?:^\s*|\s+)(as)) - contentName: meta.embedded.expression.svelte source.ts - patterns: [include: source.ts] - # 'as' token and onwards. - - begin: (as) - beginCaptures: { 1: { name: keyword.control.as.svelte } } - end: (?=}) - patterns: - # [] and {} destructuring blocks. - - include: '#destructuring' - # Key expression. - - begin: \( - end: \)|(?=}) - captures: { 0: { name: meta.brace.round.svelte } } - contentName: meta.embedded.expression.svelte source.ts - patterns: [include: source.ts] - # Name or index expression. - - match: (\s*([_$[:alpha:]][_$[:alnum:]]*)\s*) - captures: - { - 1: - { - name: meta.embedded.expression.svelte source.ts, - patterns: [include: source.ts], - }, - } - # The comma. - - { match: ',', name: punctuation.separator.svelte } - - # Await. - - begin: (?<=await.*?)\G - end: (?=}) - patterns: - # Promise expression. - - begin: \G\s*?(?=\S) - end: \s+(then)|(?=}) - endCaptures: { 1: { name: keyword.control.flow.svelte } } - contentName: meta.embedded.expression.svelte source.ts - patterns: [include: source.ts] - # Then expression. - - begin: (?<=then\b) - end: (?=}) - contentName: meta.embedded.expression.svelte source.ts - patterns: [include: source.ts] - - # Debug. - - begin: (?<=debug.*?)\G - end: (?=}) - patterns: - # Variables. - - match: '[_$[:alpha:]][_$[:alnum:]]*' - captures: - { - 0: - { - name: meta.embedded.expression.svelte source.ts, - patterns: [include: source.ts], - }, - } - # The commas. - - { match: ',', name: punctuation.separator.svelte } - - # Special void tags like `{:else}` and `{@html}`. - special-tags-void: - begin: ({)\s*((?:[@:])(else\s+if|[a-z]*)) - beginCaptures: - 1: { name: punctuation.definition.block.begin.svelte } - 2: { patterns: [include: '#special-tags-keywords'] } - end: \} - endCaptures: { 0: { name: punctuation.definition.block.end.svelte } } - name: meta.special.$3.svelte - patterns: [include: '#special-tags-modes'] - - # Special tag blocks like `{#if}...{/if}`. - # Split up into start and end because we don't need to preserve the name - # inside and because it makes whitespace matching logic more robust - special-tags-block-begin: - # This pattern is technically not correct, - # as the (#|:|/)[logic] keywords do not care about whitespace between it and the { bracket. - # This means newlines are actually valid! - # However, deciphering what is logic and what is interpolation would be stupidly tedious. So we don't. - begin: ({)\s*(#([a-z]*)) - end: (}) - name: meta.special.$3.svelte meta.special.start.svelte - beginCaptures: - 1: { name: punctuation.definition.block.begin.svelte } - 2: { patterns: [include: '#special-tags-keywords'] } - endCaptures: { 0: { name: punctuation.definition.block.end.svelte } } - patterns: [include: '#special-tags-modes'] - - special-tags-block-end: - # This is again technically not correct, and due to the same whitespacing reasons. - # However... just don't introduce newlines in `{/if}` blocks. 'cuz that's weird. - begin: ({)\s*(/([a-z]*)) - end: (}) - name: meta.special.$3.svelte meta.special.end.svelte - beginCaptures: - 1: { name: punctuation.definition.block.begin.svelte } - 2: { patterns: [include: '#special-tags-keywords'] } - endCaptures: - 1: { name: punctuation.definition.block.end.svelte } - - # ------------ - # ATTRIBUTES - - attributes: - patterns: - - include: '#attributes-directives' - - include: '#attributes-keyvalue' - - include: '#attributes-interpolated' - - # Interpolated shorthand attributes, like `{variable}` sitting by itself. - attributes-interpolated: - begin: (?) - patterns: - # No quotes - just an interpolation expression. - - include: '#interpolation' - # Units, meaning digit characters and an optional unit string. e.g. `15px` - - match: ([0-9._]+[\w]{,4})(?=\s|/?>) - name: constant.numeric.decimal.svelte - patterns: [include: '#interpolation'] - # Unquoted strings. - - match: ([^\s"'=<>`/]|/(?!>))+ - name: string.unquoted.svelte - patterns: [include: '#interpolation'] - # Quoted strings. - - begin: (['"]) - end: \1 - beginCaptures: - { 0: { name: punctuation.definition.string.begin.svelte } } - endCaptures: { 0: { name: punctuation.definition.string.end.svelte } } - name: string.quoted.svelte - patterns: [include: '#interpolation'] - - # For Svelte element directives. Scopes the 'on' part in `on:click`. - attributes-directives-keywords: - patterns: - # If other keywords are patched in in the future, they can be added here but also need to be added - # where attributes-directives-keywords is included. - - { match: on|use|bind, name: keyword.control.svelte } - - { - match: transition|in|out|animate, - name: keyword.other.animation.svelte, - } - - { match: let, name: storage.type.svelte } - - { match: class, name: entity.other.attribute-name.svelte } - - # For Svelte element directives. Scopes the 'click' part in `on:click`. - # The scope of the variable should represent what data type it generally is. - attributes-directives-types: - patterns: - # If other keywords are patched in in the future, they can easily be added here. - - { match: '(?<=(on):).*$', name: entity.name.type.svelte } - - { match: '(?<=(bind):).*$', name: variable.parameter.svelte } - - { - match: '(?<=(use|transition|in|out|animate):).*$', - name: variable.function.svelte, - } - - { match: '(?<=(let|class):).*$', name: variable.parameter.svelte } - - # For directives that may be better suited using different scopes if assigned to something. - # e.g. `class:var={var}` is different to `class:var`. - # In the latter, `var` is a variable identifier and not a CSS class name. - attributes-directives-types-assigned: - patterns: - # Special Cases - # Makes 'bind:this' display like `this` would in JS. - - { match: '(?<=(bind):)this$', name: variable.language.svelte } - # If other keywords are patched in in the future, they can easily be added here. - - { match: '(?<=(bind):).*$', name: entity.name.type.svelte } - - { - match: '(?<=(class):).*$', - name: entity.other.attribute-name.class.svelte, - } - # Defaults to the non-assignment version for everything else. - - include: '#attributes-directives-types' - - # Matches Svelte element directives, e.g. `on:click|preventDefault={var}` - attributes-directives: - # If something is added to attributes-directives-keywords, it must be added to the begin-regex, too. - begin: (?`. - tags-name: - patterns: - # Svelte (`svelte:`) elements. - - match: '(svelte)(:)([a-z][\w0-9:-]*)' - captures: - 1: { name: keyword.control.svelte } - 2: { name: punctuation.definition.keyword.svelte } - 3: { name: entity.name.tag.svelte } - # Slot. - - { match: 'slot', name: keyword.control.svelte } - # Components. - - { match: '[A-Z][a-zA-Z0-9_]*', name: support.class.component.svelte } - # Custom elements. (has a dash, but otherwise is a valid HTML element) - - { - match: '[a-z][\w0-9:]*-[\w0-9:-]*', - name: meta.tag.custom.svelte entity.name.tag.svelte, - } - # HTML elements. - - { match: '[a-z][\w0-9:-]*', name: entity.name.tag.svelte } - - # Attributes for tag start nodes. Meant to start immediately after the `) - name: meta.tag.start.svelte - patterns: [include: '#attributes'] - - # Same as tags-start-attributes but slightly adjusted for special script/style/template tags. - tags-lang-start-attributes: - begin: \G - end: (?=/>)|> - name: meta.tag.start.svelte - patterns: [include: '#attributes'] - - # Matches the beginning (`/]*) - captures: - 1: { name: punctuation.definition.tag.begin.svelte } - 2: { patterns: [include: '#tags-name'] } - name: meta.tag.start.svelte - - # Matches tag end nodes. - tags-end-node: - match: ()|(/>) - captures: - 1: { name: meta.tag.end.svelte punctuation.definition.tag.begin.svelte } - 2: { name: meta.tag.end.svelte, patterns: [include: '#tags-name'] } - 3: { name: meta.tag.end.svelte punctuation.definition.tag.end.svelte } - 4: { name: meta.tag.start.svelte punctuation.definition.tag.end.svelte } - - # -- TAG TYPES - - # Language tags - they are handled differently for the purposes of language injection. - tags-lang: - begin: <(script|style|template) - end: |/> - beginCaptures: { 0: { patterns: [include: '#tags-start-node'] } } - endCaptures: { 0: { patterns: [include: '#tags-end-node'] } } - name: meta.$1.svelte - patterns: - # Tags with a language specified. - - begin: \G(?=\s*(type|lang)\s*=\s*(['"]|)(?:text/)?(\w+)\2) - end: (?=) - name: meta.lang.$3.svelte - patterns: [include: '#tags-lang-start-attributes'] - # Fallback to default language. - - include: '#tags-lang-start-attributes' - - # Void element tags. They must be treated separately due to their lack of end nodes. - # A void element cannot be differentiated from other tags, unless you look at their name. - # This is because there is a specific list of void elements in HTML5. We use that to scope void elements. - # If we didn't, a void element would appear as an unclosed element to the grammar. - tags-void: - begin: (<)(area|base|br|col|embed|hr|img|input|link|meta|param|source|track|wbr)(?=\s|/?>) - beginCaptures: - 1: { name: punctuation.definition.tag.begin.svelte } - 2: { name: entity.name.tag.svelte } - end: /?> - endCaptures: { 0: { name: punctuation.definition.tag.begin.svelte } } - name: meta.tag.void.svelte - patterns: [include: '#attributes'] - - # All other tags, including custom/special Svelte tags. - # Split up into start and end because we don't need to preserve the name - # inside and because it makes whitespace matching logic more robust - tags-general-start: - begin: (<)([^/\s>/]*) - end: (/?>) - beginCaptures: { 0: { patterns: [include: '#tags-start-node'] } } - endCaptures: - 1: { name: meta.tag.start.svelte punctuation.definition.tag.end.svelte } - name: meta.scope.tag.$2.svelte - patterns: - - include: '#tags-start-attributes' - - tags-general-end: - begin: (]*) - end: (>) - beginCaptures: - 1: { name: meta.tag.end.svelte punctuation.definition.tag.begin.svelte } - 2: { name: meta.tag.end.svelte, patterns: [include: '#tags-name'] } - endCaptures: - 1: { name: meta.tag.end.svelte punctuation.definition.tag.end.svelte } - name: meta.scope.tag.$2.svelte diff --git a/extensions/vetur-web/LICENSE b/extensions/vetur-web/LICENSE deleted file mode 100644 index 55b04badb..000000000 --- a/extensions/vetur-web/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2017 Pine Wu - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/extensions/vetur-web/README.md b/extensions/vetur-web/README.md deleted file mode 100644 index 1b4dc0e0d..000000000 --- a/extensions/vetur-web/README.md +++ /dev/null @@ -1,69 +0,0 @@ -# This extension is a fork from [Vetur](https://github.com/vuejs/vetur) for github1s. - -# At present only languages features is reserved - -# I have deleted some files and only reserved the necessary code - -

-

Vetur

-

- -
-Vue tooling for VS Code. - -- [vls](./server): Vue Language Server -- [vti](./vti): Vetur Terminal Interface -- [Docs](https://vuejs.github.io/vetur) - -🎉 VueConf 2017 [Slide](https://www.dropbox.com/sh/eb4w8k3orh0j391/AAB3HaJexbGLa2tCP14BI8oJa?dl=0) & [Video](https://www.youtube.com/watch?v=05tNXJ-Kric) 🎉 - -## Sponsors - -I quit my job to travel nomadically, to work on Open Source and to conduct independent study/research. - -Vetur is my main focus in Open Source. Your help will alleviate my financial burden and allow me to spend more time working on Vetur. Thank you 🙏 - -https://github.com/sponsors/octref - -Thanks to the following companies for supporting Vetur's development: - - - - - - -
- - - - - Request and perform code reviews from inside your IDE. Review any code, even if it's a work-in-progress that hasn't been committed yet, and use jump-to-definition, your favorite keybindings, and other IDE tools. - Try it free. -
- -## Features - -- [Syntax-highlighting](https://vuejs.github.io/vetur/guide/highlighting.html) -- [Snippet](https://vuejs.github.io/vetur/guide/snippet.html) - -## FAQ - -[FAQ](https://vuejs.github.io/vetur/guide/FAQ.html) - -## License - -MIT © [Pine Wu](https://github.com/octref) diff --git a/extensions/vetur-web/ThirdPartyNotices.txt b/extensions/vetur-web/ThirdPartyNotices.txt deleted file mode 100644 index 9cfba4bb0..000000000 --- a/extensions/vetur-web/ThirdPartyNotices.txt +++ /dev/null @@ -1,88 +0,0 @@ -This project incorporates components from the projects listed below. -The original copyright notices and the licenses are reproduced verbatim. - -1. https://github.com/vuejs/vue-syntax-highlight - -=== - -The MIT License (MIT) - -Copyright (c) 2013-2016 Evan You - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -=== - -2. https://github.com/microsoft/vscode - -=== - -MIT License - -Copyright (c) 2015 - present Microsoft Corporation - -All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -=== - -3. https://github.com/prettier/prettier-vscode - -=== - -MIT License - -Copyright (c) 2017 Esben Petersen - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -=== \ No newline at end of file diff --git a/extensions/vetur-web/asset/vue.png b/extensions/vetur-web/asset/vue.png deleted file mode 100644 index 8bbf984157a465f7280d556a754ebce1b5274c0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11460 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 Q0;qtfDQPQK$Xh-7e+`t7*Z=?k diff --git a/extensions/vetur-web/languages/vue-html-language-configuration.json b/extensions/vetur-web/languages/vue-html-language-configuration.json deleted file mode 100644 index 0debe3d20..000000000 --- a/extensions/vetur-web/languages/vue-html-language-configuration.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "comments": { - "blockComment": [ "" ] - }, - "brackets": [ - [""], - ["<", ">"], - ["{", "}"], - ["(", ")"] - ], - "autoClosingPairs": [ - { "open": "{", "close": "}"}, - { "open": "[", "close": "]"}, - { "open": "(", "close": ")" }, - { "open": "'", "close": "'" }, - { "open": "\"", "close": "\"" } - ], - "surroundingPairs": [ - { "open": "'", "close": "'" }, - { "open": "\"", "close": "\"" }, - { "open": "{", "close": "}"}, - { "open": "[", "close": "]"}, - { "open": "(", "close": ")" }, - { "open": "<", "close": ">" } - ] -} \ No newline at end of file diff --git a/extensions/vetur-web/languages/vue-language-configuration.json b/extensions/vetur-web/languages/vue-language-configuration.json deleted file mode 100644 index 9e28a8f3d..000000000 --- a/extensions/vetur-web/languages/vue-language-configuration.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "comments": { - // symbol used for single line comment. Remove this entry if your language does not support line comments - "lineComment": "//", - // symbols used for start and end a block comment. Remove this entry if your language does not support block comments - "blockComment": [ "/*", "*/" ] - }, - // symbols used as brackets - "brackets": [ - ["{", "}"], - ["[", "]"], - ["(", ")"] - ], - // symbols that are auto closed when typing - "autoClosingPairs": [ - { "open": "{", "close": "}" }, - { "open": "[", "close": "]" }, - { "open": "(", "close": ")" }, - { "open": "\"", "close": "\"", "notIn": ["string"] }, - { "open": "'", "close": "'", "notIn": ["string", "comment"] }, - { "open": "`", "close": "`", "notIn": ["string", "comment"] }, - { "open": "/**", "close": " */", "notIn": ["string"] } - ], - // symbols that that can be used to surround a selection - "surroundingPairs": [ - ["{", "}"], - ["[", "]"], - ["(", ")"], - ["\"", "\""], - ["'", "'"], - ["`", "`"] - ], - "folding": { - "markers": { - "start": "^<(template|style|script)[^>]*>", - "end": "^" - } - } -} diff --git a/extensions/vetur-web/languages/vue-postcss-language-configuration.json b/extensions/vetur-web/languages/vue-postcss-language-configuration.json deleted file mode 100644 index a573a064f..000000000 --- a/extensions/vetur-web/languages/vue-postcss-language-configuration.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "comments": { - // symbols used for start and end a block comment. Remove this entry if your language does not support block comments - "blockComment": [ "/*", "*/" ] - }, - // symbols used as brackets - "brackets": [ - ["{", "}"], - ["[", "]"], - ["(", ")"] - ], - // symbols that are auto closed when typing - "autoClosingPairs": [ - ["{", "}"], - ["[", "]"], - ["(", ")"], - ["\"", "\""], - ["'", "'"] - ], - // symbols that that can be used to surround a selection - "surroundingPairs": [ - ["{", "}"], - ["[", "]"], - ["(", ")"], - ["\"", "\""], - ["'", "'"] - ] -} \ No newline at end of file diff --git a/extensions/vetur-web/languages/vue-pug-language-configuration.json b/extensions/vetur-web/languages/vue-pug-language-configuration.json deleted file mode 100644 index ab5cd8306..000000000 --- a/extensions/vetur-web/languages/vue-pug-language-configuration.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "comments": { - "lineComment": "//-" - }, - "brackets": [ - ["{", "}"], - ["[", "]"], - ["(", ")"] - ], - "autoClosingPairs": [ - ["{", "}"], - ["[", "]"], - ["(", ")"], - ["'", "'"], - ["\"", "\""] - ], - "surroundingPairs": [ - ["{", "}"], - ["[", "]"], - ["(", ")"], - ["'", "'"], - ["\"", "\""] - ], - "folding": { - "offSide": true - } -} diff --git a/extensions/vetur-web/package.json b/extensions/vetur-web/package.json deleted file mode 100644 index 49ed8ad06..000000000 --- a/extensions/vetur-web/package.json +++ /dev/null @@ -1,130 +0,0 @@ -{ - "name": "vetur", - "displayName": "Vetur", - "description": "Vue tooling for VS Code", - "author": "Pine Wu ", - "icon": "asset/vue.png", - "version": "0.32.0", - "publisher": "octref", - "scripts": { - "compile": "echo done", - "watch": "echo done" - }, - "repository": { - "type": "git", - "url": "https://github.com/vuejs/vetur.git" - }, - "keywords": [ - "vetur", - "Vue", - "vue", - "vuejs" - ], - "categories": [ - "Programming Languages" - ], - "engines": { - "vscode": "^1.52.0" - }, - "activationEvents": [ - "onLanguage:vue" - ], - "contributes": { - "languages": [ - { - "id": "vue", - "aliases": [ - "Vue", - "vue" - ], - "extensions": [ - ".vue" - ], - "configuration": "./languages/vue-language-configuration.json" - }, - { - "id": "vue-html", - "aliases": [ - "Vue-html" - ], - "configuration": "./languages/vue-html-language-configuration.json" - }, - { - "id": "vue-postcss", - "aliases": [ - "Vue-PostCSS", - "Vue-POSTCSS", - "vue-postcss" - ], - "configuration": "./languages/vue-postcss-language-configuration.json" - } - ], - "grammars": [ - { - "language": "vue", - "scopeName": "source.vue", - "path": "./syntaxes/vue-generated.json", - "embeddedLanguages": { - "text.html.basic": "html", - "text.html.vue-html": "vue-html", - "text.jade.slm": "slm", - "text.pug": "jade", - "text.haml": "haml", - "text.slim": "slim", - "text.html.liquid": "liquid", - "source.css": "css", - "source.css.scss": "scss", - "source.css.less": "less", - "source.css.postcss": "vue-postcss", - "source.sass": "sass", - "source.stylus": "stylus", - "source.js": "javascript", - "source.ts": "typescript", - "source.coffee": "coffeescript", - "text.html.markdown": "md", - "source.yaml": "yaml", - "source.json": "json", - "source.php": "php", - "source.graphql": "graphql" - } - }, - { - "language": "vue-postcss", - "scopeName": "source.css.postcss", - "path": "./syntaxes/vue-postcss.json" - }, - { - "language": "vue-html", - "scopeName": "text.html.vue-html", - "path": "./syntaxes/vue-html.tmLanguage.json", - "embeddedLanguages": { - "source.js": "javascript" - } - }, - { - "path": "./syntaxes/pug/directives.tmLanguage.json", - "scopeName": "vue.pug.directives", - "injectTo": [ - "source.vue" - ] - }, - { - "path": "./syntaxes/pug/interpolations.tmLanguage.json", - "scopeName": "vue.pug.interpolations", - "injectTo": [ - "source.vue" - ] - }, - { - "scopeName": "markdown.vue.codeblock", - "path": "./syntaxes/markdown-vue.json", - "injectTo": [ - "text.html.markdown" - ], - "embeddedLanguages": { - "meta.embedded.block.vue": "vue" - } - } - ] - } -} diff --git a/extensions/vetur-web/syntaxes/markdown-vue.json b/extensions/vetur-web/syntaxes/markdown-vue.json deleted file mode 100644 index 73cfcee84..000000000 --- a/extensions/vetur-web/syntaxes/markdown-vue.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "scopeName": "markdown.vue.codeblock", - "fileTypes": [], - "injectionSelector": "L:text.html.markdown", - "patterns": [ - { - "include": "#vue-code-block" - } - ], - "repository": { - "vue-code-block": { - "begin": "(^|\\G)(\\s*)(\\`{3,}|~{3,})\\s*(?i:(vue)(\\s+[^`~]*)?$)", - "name": "markup.fenced_code.block.markdown", - "end": "(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$", - "beginCaptures": { - "3": { - "name": "punctuation.definition.markdown" - }, - "5": { - "name": "fenced_code.block.language" - }, - "6": { - "name": "fenced_code.block.language.attributes" - } - }, - "endCaptures": { - "3": { - "name": "punctuation.definition.markdown" - } - }, - "patterns": [ - { - "begin": "(^|\\G)(\\s*)(.*)", - "while": "(^|\\G)(?!\\s*([`~]{3,})\\s*$)", - "contentName": "meta.embedded.block.vue", - "patterns": [ - { - "include": "source.vue" - } - ] - } - ] - } - } -} diff --git a/extensions/vetur-web/syntaxes/pug/directives.YAML b/extensions/vetur-web/syntaxes/pug/directives.YAML deleted file mode 100644 index 88d9c239a..000000000 --- a/extensions/vetur-web/syntaxes/pug/directives.YAML +++ /dev/null @@ -1,5 +0,0 @@ -# [PackageDev] target_format: plist, ext: tmLanguage -scopeName: vue.pug.directives -injectionSelector: "L:meta.tag.other -text.html.vue-html" -patterns: - - include: 'source.vue#vue-directives' diff --git a/extensions/vetur-web/syntaxes/pug/directives.tmLanguage.json b/extensions/vetur-web/syntaxes/pug/directives.tmLanguage.json deleted file mode 100644 index 009914421..000000000 --- a/extensions/vetur-web/syntaxes/pug/directives.tmLanguage.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "scopeName": "vue.pug.directives", - "injectionSelector": "L:meta.tag.other -text.html.vue-html", - "patterns": [ - { - "include": "source.vue#vue-directives" - } - ] -} \ No newline at end of file diff --git a/extensions/vetur-web/syntaxes/pug/interpolations.YAML b/extensions/vetur-web/syntaxes/pug/interpolations.YAML deleted file mode 100644 index c66035886..000000000 --- a/extensions/vetur-web/syntaxes/pug/interpolations.YAML +++ /dev/null @@ -1,5 +0,0 @@ -# [PackageDev] target_format: plist, ext: tmLanguage -scopeName: vue.pug.interpolations -injectionSelector: "L:text.pug" -patterns: - - include: source.vue#vue-interpolations diff --git a/extensions/vetur-web/syntaxes/pug/interpolations.tmLanguage.json b/extensions/vetur-web/syntaxes/pug/interpolations.tmLanguage.json deleted file mode 100644 index 96d599681..000000000 --- a/extensions/vetur-web/syntaxes/pug/interpolations.tmLanguage.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "scopeName": "vue.pug.interpolations", - "injectionSelector": "L:text.pug", - "patterns": [ - { - "include": "source.vue#vue-interpolations" - } - ] -} \ No newline at end of file diff --git a/extensions/vetur-web/syntaxes/vue-generated.json b/extensions/vetur-web/syntaxes/vue-generated.json deleted file mode 100644 index d9f741374..000000000 --- a/extensions/vetur-web/syntaxes/vue-generated.json +++ /dev/null @@ -1,1242 +0,0 @@ -{ - "name": "Vue", - "scopeName": "source.vue", - "fileTypes": ["vue"], - "uuid": "5512c10d-4cc5-434c-b8fc-53b912f55ab3", - "patterns": [ - { - "begin": "(<)(slim)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.style.html" - } - }, - "end": "()", - "endCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.style.html" - }, - "3": { - "name": "punctuation.definition.tag.end.html" - } - }, - "patterns": [ - { - "include": "#tag-stuff" - }, - { - "begin": "(>)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.end.html" - } - }, - "end": "(?=)", - "contentName": "text.slim", - "patterns": [ - { - "include": "text.slim" - } - ] - } - ] - }, - { - "begin": "(<)(i18n)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.style.html" - } - }, - "end": "()", - "endCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.style.html" - }, - "3": { - "name": "punctuation.definition.tag.end.html" - } - }, - "patterns": [ - { - "include": "#tag-stuff" - }, - { - "begin": "(>)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.end.html" - } - }, - "end": "(?=)", - "contentName": "source.json", - "patterns": [ - { - "include": "source.json" - } - ] - } - ] - }, - { - "begin": "(<)(docs)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.style.html" - } - }, - "end": "()", - "endCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.style.html" - }, - "3": { - "name": "punctuation.definition.tag.end.html" - } - }, - "patterns": [ - { - "include": "#tag-stuff" - }, - { - "begin": "(>)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.end.html" - } - }, - "end": "(?=)", - "contentName": "text.html.markdown", - "patterns": [ - { - "include": "text.html.markdown" - } - ] - } - ] - }, - { - "name": "comment.block.html", - "begin": "", - "captures": { - "0": { - "name": "punctuation.definition.comment.html" - } - } - }, - { - "begin": "(<)(?=template.*[^/>]*/>\\s*$)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - } - }, - "end": "(/>)", - "endCaptures": { - "1": { - "name": "punctuation.definition.tag.end.html" - } - }, - "patterns": [ - { - "begin": "(template)", - "beginCaptures": { - "1": { - "name": "entity.name.tag.template.html" - } - }, - "end": "(?=/>)", - "patterns": [ - { - "include": "#tag-stuff" - } - ] - } - ] - }, - { - "begin": "(<)(template)(?=[^>]*>[^/>]*)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.template.html" - } - }, - "end": "()", - "endCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.template.html" - }, - "3": { - "name": "punctuation.definition.tag.end.html" - } - }, - "patterns": [ - { - "include": "#tag-stuff" - }, - { - "begin": "(>)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.end.html" - } - }, - "end": "(?=)" - } - ] - }, - { - "begin": "(<)(template)\\b(?=[^>]*lang=('jade'|\"jade\"|'pug'|\"pug\"))(?![^/>]*/>\\s*$)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.template.html" - } - }, - "end": "()", - "endCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.template.html" - }, - "3": { - "name": "punctuation.definition.tag.end.html" - } - }, - "patterns": [ - { - "include": "#tag-stuff" - }, - { - "contentName": "text.pug", - "begin": "(>)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.end.html" - } - }, - "end": "(?=)", - "patterns": [ - { - "include": "text.pug" - } - ] - } - ] - }, - { - "begin": "(<)(template)\\b(?=[^>]*lang=('haml'|\"haml\"))(?![^/>]*/>\\s*$)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.template.html" - } - }, - "end": "()", - "endCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.template.html" - }, - "3": { - "name": "punctuation.definition.tag.end.html" - } - }, - "patterns": [ - { - "include": "#tag-stuff" - }, - { - "contentName": "text.haml", - "begin": "(>)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.end.html" - } - }, - "end": "(?=)", - "patterns": [ - { - "include": "text.haml" - } - ] - } - ] - }, - { - "begin": "(<)(template)\\b(?=[^>]*lang=('slim'|\"slim\"))(?![^/>]*/>\\s*$)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.template.html" - } - }, - "end": "()", - "endCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.template.html" - }, - "3": { - "name": "punctuation.definition.tag.end.html" - } - }, - "patterns": [ - { - "include": "#tag-stuff" - }, - { - "contentName": "text.slim", - "begin": "(>)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.end.html" - } - }, - "end": "(?=)", - "patterns": [ - { - "include": "text.slim" - } - ] - } - ] - }, - { - "begin": "(<)(template)\\b(?=[^>]*lang=('slm'|\"slm\"))(?![^/>]*/>\\s*$)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.template.html" - } - }, - "end": "()", - "endCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.template.html" - }, - "3": { - "name": "punctuation.definition.tag.end.html" - } - }, - "patterns": [ - { - "include": "#tag-stuff" - }, - { - "contentName": "text.jade.slm", - "begin": "(>)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.end.html" - } - }, - "end": "(?=)", - "patterns": [ - { - "include": "text.jade.slm" - } - ] - } - ] - }, - { - "begin": "(<)(template)\\b(?=[^>]*lang=('liquid'|\"liquid\"))(?![^/>]*/>\\s*$)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.template.html" - } - }, - "end": "()", - "endCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.template.html" - }, - "3": { - "name": "punctuation.definition.tag.end.html" - } - }, - "patterns": [ - { - "include": "#tag-stuff" - }, - { - "contentName": "text.html.liquid", - "begin": "(>)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.end.html" - } - }, - "end": "(?=)", - "patterns": [ - { - "include": "text.html.liquid" - } - ] - } - ] - }, - { - "begin": "(<)(template)(?![^/>]*/>\\s*$)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.template.html" - } - }, - "end": "^()", - "endCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.template.html" - }, - "3": { - "name": "punctuation.definition.tag.end.html" - } - }, - "patterns": [ - { - "include": "#tag-stuff" - }, - { - "contentName": "text.html.vue-html", - "begin": "(>)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.end.html" - } - }, - "end": "(?=^)", - "patterns": [ - { - "include": "text.html.vue-html" - } - ] - } - ] - }, - { - "begin": "(<)(style)\\b(?=[^/>]*/>\\s*$)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.style.html" - } - }, - "end": "(/>)", - "endCaptures": { - "1": { - "name": "punctuation.definition.tag.end.html" - } - }, - "patterns": [ - { - "include": "#tag-stuff" - } - ] - }, - { - "begin": "(<)(style)(?=[^>]*>[^/>]*)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.style.html" - } - }, - "end": "()", - "endCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.style.html" - }, - "3": { - "name": "punctuation.definition.tag.end.html" - } - }, - "patterns": [ - { - "include": "#tag-stuff" - }, - { - "begin": "(>)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.end.html" - } - }, - "end": "(?=)" - } - ] - }, - { - "begin": "(<)(style)\\b(?=[^>]*lang=('sass'|\"sass\"))(?![^/>]*/>\\s*$)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.style.html" - } - }, - "end": "()", - "endCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.style.html" - }, - "3": { - "name": "punctuation.definition.tag.end.html" - } - }, - "patterns": [ - { - "include": "#tag-stuff" - }, - { - "contentName": "source.sass", - "begin": "(>)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.end.html" - } - }, - "end": "(?=)", - "patterns": [ - { - "include": "source.sass" - } - ] - } - ] - }, - { - "begin": "(<)(style)\\b(?=[^>]*lang=('scss'|\"scss\"))(?![^/>]*/>\\s*$)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.style.html" - } - }, - "end": "()", - "endCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.style.html" - }, - "3": { - "name": "punctuation.definition.tag.end.html" - } - }, - "patterns": [ - { - "include": "#tag-stuff" - }, - { - "contentName": "source.css.scss", - "begin": "(>)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.end.html" - } - }, - "end": "(?=)", - "patterns": [ - { - "include": "source.css.scss" - } - ] - } - ] - }, - { - "begin": "(<)(style)\\b(?=[^>]*lang=('less'|\"less\"))(?![^/>]*/>\\s*$)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.style.html" - } - }, - "end": "()", - "endCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.style.html" - }, - "3": { - "name": "punctuation.definition.tag.end.html" - } - }, - "patterns": [ - { - "include": "#tag-stuff" - }, - { - "contentName": "source.css.less", - "begin": "(>)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.end.html" - } - }, - "end": "(?=)", - "patterns": [ - { - "include": "source.css.less" - } - ] - } - ] - }, - { - "begin": "(<)(style)\\b(?=[^>]*lang=('stylus'|\"stylus\"))(?![^/>]*/>\\s*$)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.style.html" - } - }, - "end": "()", - "endCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.style.html" - }, - "3": { - "name": "punctuation.definition.tag.end.html" - } - }, - "patterns": [ - { - "include": "#tag-stuff" - }, - { - "contentName": "source.stylus", - "begin": "(>)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.end.html" - } - }, - "end": "(?=)", - "patterns": [ - { - "include": "source.stylus" - } - ] - } - ] - }, - { - "begin": "(<)(style)\\b(?=[^>]*lang=('postcss'|\"postcss\"))(?![^/>]*/>\\s*$)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.style.html" - } - }, - "end": "()", - "endCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.style.html" - }, - "3": { - "name": "punctuation.definition.tag.end.html" - } - }, - "patterns": [ - { - "include": "#tag-stuff" - }, - { - "contentName": "source.css.postcss", - "begin": "(>)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.end.html" - } - }, - "end": "(?=)", - "patterns": [ - { - "include": "source.css.postcss" - } - ] - } - ] - }, - { - "begin": "(<)(style)(?![^/>]*/>\\s*$)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.style.html" - } - }, - "end": "()", - "endCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.style.html" - }, - "3": { - "name": "punctuation.definition.tag.end.html" - } - }, - "patterns": [ - { - "include": "#tag-stuff" - }, - { - "contentName": "source.css", - "begin": "(>)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.end.html" - } - }, - "end": "(?=)", - "patterns": [ - { - "include": "source.css" - } - ] - } - ] - }, - { - "begin": "(<)(script)\\b(?=[^>]*/>$)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.script.html" - } - }, - "end": "(/>)", - "endCaptures": { - "1": { - "name": "punctuation.definition.tag.end.html" - } - }, - "patterns": [ - { - "include": "#tag-stuff" - } - ] - }, - { - "begin": "(<)(script)(?=[^>]*>[^/>]*)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.script.html" - } - }, - "end": "()", - "endCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.script.html" - }, - "3": { - "name": "punctuation.definition.tag.end.html" - } - }, - "patterns": [ - { - "include": "#tag-stuff" - }, - { - "begin": "(>)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.end.html" - } - }, - "end": "(?=)" - } - ] - }, - { - "begin": "(<)(script)\\b(?=[^>]*lang=('ts'|\"ts\"))(?![^/>]*/>\\s*$)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.script.html" - } - }, - "end": "()", - "endCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.script.html" - }, - "3": { - "name": "punctuation.definition.tag.end.html" - } - }, - "patterns": [ - { - "include": "#tag-stuff" - }, - { - "contentName": "source.ts", - "begin": "(>)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.end.html" - } - }, - "end": "(?=)", - "patterns": [ - { - "include": "source.ts" - } - ] - } - ] - }, - { - "begin": "(<)(script)\\b(?=[^>]*lang=('coffee'|\"coffee\"))(?![^/>]*/>\\s*$)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.script.html" - } - }, - "end": "()", - "endCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.script.html" - }, - "3": { - "name": "punctuation.definition.tag.end.html" - } - }, - "patterns": [ - { - "include": "#tag-stuff" - }, - { - "contentName": "source.coffee", - "begin": "(>)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.end.html" - } - }, - "end": "(?=)", - "patterns": [ - { - "include": "source.coffee" - } - ] - } - ] - }, - { - "begin": "(<)(script)(?![^/>]*/>\\s*$)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.script.html" - } - }, - "end": "()", - "endCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.script.html" - }, - "3": { - "name": "punctuation.definition.tag.end.html" - } - }, - "patterns": [ - { - "include": "#tag-stuff" - }, - { - "contentName": "source.js", - "begin": "(>)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.end.html" - } - }, - "end": "(?=)", - "patterns": [ - { - "include": "source.js" - } - ] - } - ] - } - ], - "repository": { - "entities": { - "patterns": [ - { - "name": "constant.character.entity.html", - "match": "(&)([a-zA-Z0-9]+|#[0-9]+|#x[0-9a-fA-F]+)(;)", - "captures": { - "1": { - "name": "punctuation.definition.entity.html" - }, - "3": { - "name": "punctuation.definition.entity.html" - } - } - }, - { - "name": "invalid.illegal.bad-ampersand.html", - "match": "&" - } - ] - }, - "string-double-quoted": { - "name": "string.quoted.double.html", - "begin": "\"", - "beginCaptures": { - "0": { - "name": "punctuation.definition.string.begin.html" - } - }, - "end": "\"", - "endCaptures": { - "0": { - "name": "punctuation.definition.string.end.html" - } - }, - "patterns": [ - { - "include": "#vue-interpolations" - }, - { - "include": "#entities" - } - ] - }, - "string-single-quoted": { - "name": "string.quoted.single.html", - "begin": "'", - "beginCaptures": { - "0": { - "name": "punctuation.definition.string.begin.html" - } - }, - "end": "'", - "endCaptures": { - "0": { - "name": "punctuation.definition.string.end.html" - } - }, - "patterns": [ - { - "include": "#vue-interpolations" - }, - { - "include": "#entities" - } - ] - }, - "tag-generic-attribute": { - "name": "entity.other.attribute-name.html", - "match": "\\b([a-zA-Z\\-:_]+)" - }, - "tag-id-attribute": { - "name": "meta.attribute-with-value.id.html", - "begin": "\\b(id)\\b\\s*(=)", - "end": "(?<='|\")", - "captures": { - "1": { - "name": "entity.other.attribute-name.id.html" - }, - "2": { - "name": "punctuation.separator.key-value.html" - } - }, - "patterns": [ - { - "name": "string.quoted.double.html", - "contentName": "meta.toc-list.id.html", - "begin": "\"", - "beginCaptures": { - "0": { - "name": "punctuation.definition.string.begin.html" - } - }, - "end": "\"", - "endCaptures": { - "0": { - "name": "punctuation.definition.string.end.html" - } - }, - "patterns": [ - { - "include": "#vue-interpolations" - }, - { - "include": "#entities" - } - ] - }, - { - "name": "string.quoted.single.html", - "contentName": "meta.toc-list.id.html", - "begin": "'", - "beginCaptures": { - "0": { - "name": "punctuation.definition.string.begin.html" - } - }, - "end": "'", - "endCaptures": { - "0": { - "name": "punctuation.definition.string.end.html" - } - }, - "patterns": [ - { - "include": "#vue-interpolations" - }, - { - "include": "#entities" - } - ] - } - ] - }, - "tag-stuff": { - "patterns": [ - { - "include": "#vue-directives" - }, - { - "include": "#tag-id-attribute" - }, - { - "include": "#tag-generic-attribute" - }, - { - "include": "#string-double-quoted" - }, - { - "include": "#string-single-quoted" - } - ] - }, - "vue-directives": { - "name": "meta.directive.vue", - "begin": "(?:\\b(v-)|(:|@|#))([a-zA-Z0-9\\-_]+)(?:\\:([a-zA-Z\\-_]+))?(?:\\.([a-zA-Z\\-_]+))*\\s*(=)", - "end": "(?<='|\")|(?=[\\s<>`])", - "captures": { - "1": { - "name": "entity.other.attribute-name.html" - }, - "2": { - "name": "punctuation.separator.key-value.html" - }, - "3": { - "name": "entity.other.attribute-name.html" - }, - "4": { - "name": "entity.other.attribute-name.html" - }, - "5": { - "name": "entity.other.attribute-name.html" - }, - "6": { - "name": "punctuation.separator.key-value.html" - } - }, - "patterns": [ - { - "name": "source.directive.vue", - "begin": "`", - "beginCaptures": { - "0": { - "name": "punctuation.definition.string.begin.html" - } - }, - "end": "`", - "endCaptures": { - "0": { - "name": "punctuation.definition.string.end.html" - } - }, - "patterns": [ - { - "include": "source.js#expression" - } - ] - }, - { - "name": "source.directive.vue", - "begin": "\"", - "beginCaptures": { - "0": { - "name": "punctuation.definition.string.begin.html" - } - }, - "end": "\"", - "endCaptures": { - "0": { - "name": "punctuation.definition.string.end.html" - } - }, - "patterns": [ - { - "include": "source.js#expression" - } - ] - }, - { - "name": "source.directive.vue", - "begin": "'", - "beginCaptures": { - "0": { - "name": "punctuation.definition.string.begin.html" - } - }, - "end": "'", - "endCaptures": { - "0": { - "name": "punctuation.definition.string.end.html" - } - }, - "patterns": [ - { - "include": "source.js#expression" - } - ] - } - ] - }, - "vue-interpolations": { - "patterns": [ - { - "name": "expression.embedded.vue", - "begin": "\\{\\{\\{?", - "beginCaptures": { - "0": { - "name": "punctuation.definition.generic.begin.html" - } - }, - "end": "\\}\\}\\}?", - "endCaptures": { - "0": { - "name": "punctuation.definition.generic.end.html" - } - }, - "patterns": [ - { - "include": "source.js#expression" - } - ] - } - ] - } - } -} diff --git a/extensions/vetur-web/syntaxes/vue-html.YAML b/extensions/vetur-web/syntaxes/vue-html.YAML deleted file mode 100644 index eb85a08a1..000000000 --- a/extensions/vetur-web/syntaxes/vue-html.YAML +++ /dev/null @@ -1,259 +0,0 @@ -# [PackageDev] target_format: plist, ext: tmLanguage -name: Vue HTML -scopeName: text.html.vue-html -fileTypes: [] -uuid: ca2e4260-5d62-45bf-8cf1-d8b5cc19c8f8 -patterns: - - include: source.vue#vue-interpolations - - name: meta.tag.any.html - begin: (<)([A-Z][a-zA-Z0-9:-]*)(?=[^>]*>) - beginCaptures: - '1': { name: punctuation.definition.tag.begin.html } - '2': { name: support.class.component.html } - end: (>)(<)(/)(\2)(>) - endCaptures: - '1': { name: punctuation.definition.tag.end.html } - '2': - { - name: punctuation.definition.tag.begin.html meta.scope.between-tag-pair.html, - } - '3': { name: punctuation.definition.tag.begin.html } - '4': { name: support.class.component.html } - '5': { name: punctuation.definition.tag.end.html } - patterns: - - include: '#tag-stuff' - - name: meta.tag.any.html - begin: (<)([a-z][a-zA-Z0-9:-]*)(?=[^>]*>) - beginCaptures: - '1': { name: punctuation.definition.tag.begin.html } - '2': { name: entity.name.tag.html } - end: (>)(<)(/)(\2)(>) - endCaptures: - '1': { name: punctuation.definition.tag.end.html } - '2': - { - name: punctuation.definition.tag.begin.html meta.scope.between-tag-pair.html, - } - '3': { name: punctuation.definition.tag.begin.html } - '4': { name: entity.name.tag.html } - '5': { name: punctuation.definition.tag.end.html } - patterns: - - include: '#tag-stuff' - - name: meta.tag.preprocessor.xml.html - begin: (<\?)(xml) - end: (\?>) - captures: - '1': { name: punctuation.definition.tag.html } - '2': { name: entity.name.tag.xml.html } - patterns: - - include: '#tag-generic-attribute' - - include: '#string-double-quoted' - - include: '#string-single-quoted' - - name: comment.block.html - begin: - captures: - '0': { name: punctuation.definition.comment.html } - - name: meta.tag.sgml.html - begin: ' - captures: - '0': { name: punctuation.definition.tag.html } - patterns: - - name: meta.tag.sgml.doctype.html - begin: (?i:DOCTYPE) - end: (?=>) - captures: - '1': { name: entity.name.tag.doctype.html } - patterns: - - name: string.quoted.double.doctype.identifiers-and-DTDs.html - match: '"[^">]*"' - - name: constant.other.inline-data.html - begin: \[CDATA\[ - end: ']](?=>)' - - name: invalid.illegal.bad-comments-or-CDATA.html - match: (\s*)(?!--|>)\S(\s*) - - name: meta.tag.block.any.html - begin: () - endCaptures: - '1': { name: punctuation.definition.tag.end.html } - patterns: - - include: '#tag-stuff' - - name: meta.tag.block.any.html - begin: () - endCaptures: - '1': { name: punctuation.definition.tag.end.html } - patterns: - - include: '#tag-stuff' - - name: meta.tag.structure.any.html - begin: () - endCaptures: - '1': { name: punctuation.definition.tag.end.html } - captures: - '1': { name: punctuation.definition.tag.begin.html } - '2': { name: entity.name.tag.structure.any.html } - patterns: - - include: '#tag-stuff' - - name: meta.tag.block.any.html - begin: () - endCaptures: - '1': { name: punctuation.definition.tag.end.html } - patterns: - - include: '#tag-stuff' - - name: meta.tag.inline.any.html - begin: () - endCaptures: - '1': { name: punctuation.definition.tag.end.html } - patterns: - - include: '#tag-stuff' - - name: meta.tag.other.html - begin: () - endCaptures: - '1': { name: punctuation.definition.tag.end.html } - patterns: - - include: '#tag-stuff' - - include: '#entities' - - name: invalid.illegal.incomplete.html - match: <> - - name: invalid.illegal.bad-angle-bracket.html - match: < -repository: - entities: - patterns: - - name: constant.character.entity.html - match: (&)([a-zA-Z0-9]+|#[0-9]+|#x[0-9a-fA-F]+)(;) - captures: - '1': { name: punctuation.definition.entity.html } - '3': { name: punctuation.definition.entity.html } - - name: invalid.illegal.bad-ampersand.html - match: '&' - string-double-quoted: - name: string.quoted.double.html - begin: '"' - beginCaptures: - '0': { name: punctuation.definition.string.begin.html } - end: '"' - endCaptures: - '0': { name: punctuation.definition.string.end.html } - patterns: - - include: source.vue#vue-interpolations - - include: '#entities' - string-single-quoted: - name: string.quoted.single.html - begin: "'" - beginCaptures: - '0': { name: punctuation.definition.string.begin.html } - end: "'" - endCaptures: - '0': { name: punctuation.definition.string.end.html } - patterns: - - include: source.vue#vue-interpolations - - include: '#entities' - tag-generic-attribute: - name: entity.other.attribute-name.html - match: (?<=[^=])\b([a-zA-Z0-9:\-_]+) - tag-id-attribute: - name: meta.attribute-with-value.id.html - begin: \b(id)\b\s*(=) - end: (?!\G)(?<='|"|[^\s<>/]) - captures: - '1': { name: entity.other.attribute-name.id.html } - '2': { name: punctuation.separator.key-value.html } - patterns: - - name: string.quoted.double.html - contentName: meta.toc-list.id.html - begin: '"' - beginCaptures: - '0': { name: punctuation.definition.string.begin.html } - end: '"' - endCaptures: - '0': { name: punctuation.definition.string.end.html } - patterns: - - include: source.vue#vue-interpolations - - include: '#entities' - - name: string.quoted.single.html - contentName: meta.toc-list.id.html - begin: "'" - beginCaptures: - '0': { name: punctuation.definition.string.begin.html } - end: "'" - endCaptures: - '0': { name: punctuation.definition.string.end.html } - patterns: - - include: source.vue#vue-interpolations - - include: '#entities' - - name: string.unquoted.html - match: (?<==)(?:[^\s<>/'"]|/(?!>))+ - captures: - '0': { name: meta.toc-list.id.html } - tag-stuff: - patterns: - - include: '#vue-directives' - - include: '#tag-id-attribute' - - include: '#tag-generic-attribute' - - include: '#string-double-quoted' - - include: '#string-single-quoted' - - include: '#unquoted-attribute' - unquoted-attribute: - name: string.unquoted.html - match: (?<==)(?:[^\s<>/'"]|/(?!>))+ - vue-directives: - name: meta.directive.vue - begin: (?:\b(v-)|(:|@|#))([a-zA-Z0-9\-_]+)(?:\:([a-zA-Z\-_]+))?(?:\.([a-zA-Z\-_]+))*\s*(=) - end: (?<='|")|(?=[\s<>`]) - captures: - '1': { name: entity.other.attribute-name.html } - '2': { name: punctuation.separator.key-value.html } - '3': { name: entity.other.attribute-name.html } - '4': { name: entity.other.attribute-name.html } - '5': { name: entity.other.attribute-name.html } - '6': { name: punctuation.separator.key-value.html } - patterns: - - name: source.directive.vue - begin: '`' - beginCaptures: - '0': { name: punctuation.definition.string.begin.html } - end: '`' - endCaptures: - '0': { name: punctuation.definition.string.end.html } - patterns: - - include: source.js#expression - - name: source.directive.vue - begin: '"' - beginCaptures: - '0': { name: punctuation.definition.string.begin.html } - end: '"' - endCaptures: - '0': { name: punctuation.definition.string.end.html } - patterns: - - include: source.js#expression - - name: source.directive.vue - begin: "'" - beginCaptures: - '0': { name: punctuation.definition.string.begin.html } - end: "'" - endCaptures: - '0': { name: punctuation.definition.string.end.html } - patterns: - - include: source.js#expression diff --git a/extensions/vetur-web/syntaxes/vue-html.tmLanguage.json b/extensions/vetur-web/syntaxes/vue-html.tmLanguage.json deleted file mode 100644 index 0e48bbfcf..000000000 --- a/extensions/vetur-web/syntaxes/vue-html.tmLanguage.json +++ /dev/null @@ -1,558 +0,0 @@ -{ - "name": "Vue HTML", - "scopeName": "text.html.vue-html", - "fileTypes": [], - "uuid": "ca2e4260-5d62-45bf-8cf1-d8b5cc19c8f8", - "patterns": [ - { - "include": "source.vue#vue-interpolations" - }, - { - "name": "meta.tag.any.html", - "begin": "(<)([A-Z][a-zA-Z0-9:-]*)(?=[^>]*>)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "support.class.component.html" - } - }, - "end": "(>)(<)(/)(\\2)(>)", - "endCaptures": { - "1": { - "name": "punctuation.definition.tag.end.html" - }, - "2": { - "name": "punctuation.definition.tag.begin.html meta.scope.between-tag-pair.html" - }, - "3": { - "name": "punctuation.definition.tag.begin.html" - }, - "4": { - "name": "support.class.component.html" - }, - "5": { - "name": "punctuation.definition.tag.end.html" - } - }, - "patterns": [ - { - "include": "#tag-stuff" - } - ] - }, - { - "name": "meta.tag.any.html", - "begin": "(<)([a-z][a-zA-Z0-9:-]*)(?=[^>]*>)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.html" - } - }, - "end": "(>)(<)(/)(\\2)(>)", - "endCaptures": { - "1": { - "name": "punctuation.definition.tag.end.html" - }, - "2": { - "name": "punctuation.definition.tag.begin.html meta.scope.between-tag-pair.html" - }, - "3": { - "name": "punctuation.definition.tag.begin.html" - }, - "4": { - "name": "entity.name.tag.html" - }, - "5": { - "name": "punctuation.definition.tag.end.html" - } - }, - "patterns": [ - { - "include": "#tag-stuff" - } - ] - }, - { - "name": "meta.tag.preprocessor.xml.html", - "begin": "(<\\?)(xml)", - "end": "(\\?>)", - "captures": { - "1": { - "name": "punctuation.definition.tag.html" - }, - "2": { - "name": "entity.name.tag.xml.html" - } - }, - "patterns": [ - { - "include": "#tag-generic-attribute" - }, - { - "include": "#string-double-quoted" - }, - { - "include": "#string-single-quoted" - } - ] - }, - { - "name": "comment.block.html", - "begin": "", - "captures": { - "0": { - "name": "punctuation.definition.comment.html" - } - } - }, - { - "name": "meta.tag.sgml.html", - "begin": "", - "captures": { - "0": { - "name": "punctuation.definition.tag.html" - } - }, - "patterns": [ - { - "name": "meta.tag.sgml.doctype.html", - "begin": "(?i:DOCTYPE)", - "end": "(?=>)", - "captures": { - "1": { - "name": "entity.name.tag.doctype.html" - } - }, - "patterns": [ - { - "name": "string.quoted.double.doctype.identifiers-and-DTDs.html", - "match": "\"[^\">]*\"" - } - ] - }, - { - "name": "constant.other.inline-data.html", - "begin": "\\[CDATA\\[", - "end": "]](?=>)" - }, - { - "name": "invalid.illegal.bad-comments-or-CDATA.html", - "match": "(\\s*)(?!--|>)\\S(\\s*)" - } - ] - }, - { - "name": "meta.tag.block.any.html", - "begin": "()", - "endCaptures": { - "1": { - "name": "punctuation.definition.tag.end.html" - } - }, - "patterns": [ - { - "include": "#tag-stuff" - } - ] - }, - { - "name": "meta.tag.block.any.html", - "begin": "()", - "endCaptures": { - "1": { - "name": "punctuation.definition.tag.end.html" - } - }, - "patterns": [ - { - "include": "#tag-stuff" - } - ] - }, - { - "name": "meta.tag.structure.any.html", - "begin": "()", - "endCaptures": { - "1": { - "name": "punctuation.definition.tag.end.html" - } - }, - "captures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.structure.any.html" - } - }, - "patterns": [ - { - "include": "#tag-stuff" - } - ] - }, - { - "name": "meta.tag.block.any.html", - "begin": "()", - "endCaptures": { - "1": { - "name": "punctuation.definition.tag.end.html" - } - }, - "patterns": [ - { - "include": "#tag-stuff" - } - ] - }, - { - "name": "meta.tag.inline.any.html", - "begin": "()", - "endCaptures": { - "1": { - "name": "punctuation.definition.tag.end.html" - } - }, - "patterns": [ - { - "include": "#tag-stuff" - } - ] - }, - { - "name": "meta.tag.other.html", - "begin": "()", - "endCaptures": { - "1": { - "name": "punctuation.definition.tag.end.html" - } - }, - "patterns": [ - { - "include": "#tag-stuff" - } - ] - }, - { - "include": "#entities" - }, - { - "name": "invalid.illegal.incomplete.html", - "match": "<>" - }, - { - "name": "invalid.illegal.bad-angle-bracket.html", - "match": "<" - } - ], - "repository": { - "entities": { - "patterns": [ - { - "name": "constant.character.entity.html", - "match": "(&)([a-zA-Z0-9]+|#[0-9]+|#x[0-9a-fA-F]+)(;)", - "captures": { - "1": { - "name": "punctuation.definition.entity.html" - }, - "3": { - "name": "punctuation.definition.entity.html" - } - } - }, - { - "name": "invalid.illegal.bad-ampersand.html", - "match": "&" - } - ] - }, - "string-double-quoted": { - "name": "string.quoted.double.html", - "begin": "\"", - "beginCaptures": { - "0": { - "name": "punctuation.definition.string.begin.html" - } - }, - "end": "\"", - "endCaptures": { - "0": { - "name": "punctuation.definition.string.end.html" - } - }, - "patterns": [ - { - "include": "source.vue#vue-interpolations" - }, - { - "include": "#entities" - } - ] - }, - "string-single-quoted": { - "name": "string.quoted.single.html", - "begin": "'", - "beginCaptures": { - "0": { - "name": "punctuation.definition.string.begin.html" - } - }, - "end": "'", - "endCaptures": { - "0": { - "name": "punctuation.definition.string.end.html" - } - }, - "patterns": [ - { - "include": "source.vue#vue-interpolations" - }, - { - "include": "#entities" - } - ] - }, - "tag-generic-attribute": { - "name": "entity.other.attribute-name.html", - "match": "(?<=[^=])\\b([a-zA-Z0-9:\\-_]+)" - }, - "tag-id-attribute": { - "name": "meta.attribute-with-value.id.html", - "begin": "\\b(id)\\b\\s*(=)", - "end": "(?!\\G)(?<='|\"|[^\\s<>/])", - "captures": { - "1": { - "name": "entity.other.attribute-name.id.html" - }, - "2": { - "name": "punctuation.separator.key-value.html" - } - }, - "patterns": [ - { - "name": "string.quoted.double.html", - "contentName": "meta.toc-list.id.html", - "begin": "\"", - "beginCaptures": { - "0": { - "name": "punctuation.definition.string.begin.html" - } - }, - "end": "\"", - "endCaptures": { - "0": { - "name": "punctuation.definition.string.end.html" - } - }, - "patterns": [ - { - "include": "source.vue#vue-interpolations" - }, - { - "include": "#entities" - } - ] - }, - { - "name": "string.quoted.single.html", - "contentName": "meta.toc-list.id.html", - "begin": "'", - "beginCaptures": { - "0": { - "name": "punctuation.definition.string.begin.html" - } - }, - "end": "'", - "endCaptures": { - "0": { - "name": "punctuation.definition.string.end.html" - } - }, - "patterns": [ - { - "include": "source.vue#vue-interpolations" - }, - { - "include": "#entities" - } - ] - }, - { - "name": "string.unquoted.html", - "match": "(?<==)(?:[^\\s<>/'\"]|/(?!>))+", - "captures": { - "0": { - "name": "meta.toc-list.id.html" - } - } - } - ] - }, - "tag-stuff": { - "patterns": [ - { - "include": "#vue-directives" - }, - { - "include": "#tag-id-attribute" - }, - { - "include": "#tag-generic-attribute" - }, - { - "include": "#string-double-quoted" - }, - { - "include": "#string-single-quoted" - }, - { - "include": "#unquoted-attribute" - } - ] - }, - "unquoted-attribute": { - "name": "string.unquoted.html", - "match": "(?<==)(?:[^\\s<>/'\"]|/(?!>))+" - }, - "vue-directives": { - "name": "meta.directive.vue", - "begin": "(?:\\b(v-)|(:|@|#))([a-zA-Z0-9\\-_]+)(?:\\:([a-zA-Z\\-_]+))?(?:\\.([a-zA-Z\\-_]+))*\\s*(=)", - "end": "(?<='|\")|(?=[\\s<>`])", - "captures": { - "1": { - "name": "entity.other.attribute-name.html" - }, - "2": { - "name": "punctuation.separator.key-value.html" - }, - "3": { - "name": "entity.other.attribute-name.html" - }, - "4": { - "name": "entity.other.attribute-name.html" - }, - "5": { - "name": "entity.other.attribute-name.html" - }, - "6": { - "name": "punctuation.separator.key-value.html" - } - }, - "patterns": [ - { - "name": "source.directive.vue", - "begin": "`", - "beginCaptures": { - "0": { - "name": "punctuation.definition.string.begin.html" - } - }, - "end": "`", - "endCaptures": { - "0": { - "name": "punctuation.definition.string.end.html" - } - }, - "patterns": [ - { - "include": "source.js#expression" - } - ] - }, - { - "name": "source.directive.vue", - "begin": "\"", - "beginCaptures": { - "0": { - "name": "punctuation.definition.string.begin.html" - } - }, - "end": "\"", - "endCaptures": { - "0": { - "name": "punctuation.definition.string.end.html" - } - }, - "patterns": [ - { - "include": "source.js#expression" - } - ] - }, - { - "name": "source.directive.vue", - "begin": "'", - "beginCaptures": { - "0": { - "name": "punctuation.definition.string.begin.html" - } - }, - "end": "'", - "endCaptures": { - "0": { - "name": "punctuation.definition.string.end.html" - } - }, - "patterns": [ - { - "include": "source.js#expression" - } - ] - } - ] - } - } -} diff --git a/extensions/vetur-web/syntaxes/vue-postcss.json b/extensions/vetur-web/syntaxes/vue-postcss.json deleted file mode 100644 index 4295f5047..000000000 --- a/extensions/vetur-web/syntaxes/vue-postcss.json +++ /dev/null @@ -1,374 +0,0 @@ -{ - "patterns": [ - { - "patterns": [ - { - "include": "#comment-tag" - } - ], - "begin": "/\\*", - "name": "comment.block.postcss", - "end": "\\*/" - }, - { - "include": "#double-slash" - }, - { - "include": "#double-quoted" - }, - { - "include": "#single-quoted" - }, - { - "include": "#interpolation" - }, - { - "include": "#placeholder-selector" - }, - { - "include": "#variable" - }, - { - "include": "#variable-root-css" - }, - { - "include": "#numeric" - }, - { - "include": "#unit" - }, - { - "include": "#flag" - }, - { - "include": "#dotdotdot" - }, - { - "captures": { - "0": { - "name": "keyword.control.at-rule.css.postcss" - } - }, - "begin": "@include", - "name": "support.function.name.postcss.library", - "end": "(?=\\n|\\(|{|;)" - }, - { - "captures": { - "0": { - "name": "keyword.control.at-rule.css.postcss" - } - }, - "patterns": [ - { - "name": "entity.name.function", - "match": "[\\w-]+" - } - ], - "begin": "@mixin|@function", - "name": "support.function.name.postcss.no-completions", - "end": "$\\n?|(?=\\(|{)" - }, - { - "name": "string.quoted.double.css.postcss", - "match": "(?<=@import)\\s[\\w/.*-]+" - }, - { - "begin": "@", - "name": "keyword.control.at-rule.css.postcss", - "end": "$\\n?|\\s(?!(all|braille|embossed|handheld|print|projection|screen|speech|tty|tv|if|only|not)(\\s|,))|(?=;)" - }, - { - "patterns": [ - { - "include": "#interpolation" - }, - { - "include": "#pseudo-class" - } - ], - "begin": "#", - "name": "entity.other.attribute-name.id.css.postcss", - "end": "$\\n?|(?=\\s|,|;|\\(|\\)|\\.|\\[|{|>)" - }, - { - "patterns": [ - { - "include": "#interpolation" - }, - { - "include": "#pseudo-class" - } - ], - "begin": "\\.|(?<=&)(-|_)", - "name": "entity.other.attribute-name.class.css.postcss", - "end": "$\\n?|(?=\\s|,|;|\\(|\\)|\\[|{|>)" - }, - { - "patterns": [ - { - "include": "#double-quoted" - }, - { - "include": "#single-quoted" - }, - { - "name": "keyword.other.regex.postcss", - "match": "\\^|\\$|\\*|~" - } - ], - "begin": "\\[", - "name": "entity.other.attribute-selector.postcss", - "end": "\\]" - }, - { - "name": "entity.other.attribute-name.pseudo-class.css.postcss", - "match": "(?<=\\]|\\)|not\\(|\\*|>|>\\s):[a-z:-]+|(::|:-)[a-z:-]+" - }, - { - "patterns": [ - { - "include": "#double-slash" - }, - { - "include": "#double-quoted" - }, - { - "include": "#single-quoted" - }, - { - "include": "#interpolation" - }, - { - "include": "#variable" - }, - { - "include": "#rgb-value" - }, - { - "include": "#numeric" - }, - { - "include": "#unit" - }, - { - "include": "#flag" - }, - { - "include": "#function" - }, - { - "include": "#function-content" - }, - { - "include": "#function-content-var" - }, - { - "include": "#operator" - }, - { - "include": "#parent-selector" - }, - { - "include": "#property-value" - } - ], - "begin": ":", - "name": "meta.property-list.css.postcss", - "end": "$\\n?|(?=;|\\s\\(|and\\(|{|}|\\),)" - }, - { - "include": "#rgb-value" - }, - { - "include": "#function" - }, - { - "include": "#function-content" - }, - { - "patterns": [ - { - "include": "#interpolation" - }, - { - "include": "#pseudo-class" - } - ], - "begin": "(?|-|_)" - }, - { - "include": "#operator" - }, - { - "name": "support.type.property-name.css.postcss", - "match": "[a-z-]+((?=:|#{))" - }, - { - "include": "#reserved-words" - }, - { - "include": "#property-value" - } - ], - "name": "PostCSS", - "repository": { - "reserved-words": { - "name": "support.type.property-name.css.postcss", - "match": "\\b(false|from|in|not|null|through|to|true)\\b" - }, - "double-quoted": { - "patterns": [ - { - "include": "#quoted-interpolation" - } - ], - "begin": "\"", - "name": "string.quoted.double.css.postcss", - "end": "\"" - }, - "operator": { - "name": "keyword.operator.postcss", - "match": "\\+|\\s-\\s|\\s-(?=\\$)|(?<=\\()-(?=\\$)|\\s-(?=\\()|\\*|/|%|=|!|<|>|~" - }, - "function-content": { - "name": "string.quoted.double.css.postcss", - "match": "(?<=url\\(|format\\(|attr\\().+?(?=\\))" - }, - "double-slash": { - "patterns": [ - { - "include": "#comment-tag" - } - ], - "begin": "//", - "name": "comment.line.postcss", - "end": "$" - }, - "numeric": { - "name": "constant.numeric.css.postcss", - "match": "(-|\\.)?[0-9]+(\\.[0-9]+)?" - }, - "variable-root-css": { - "name": "variable.parameter.postcss", - "match": "(?", - "captures": { - "0": { - "name": "punctuation.definition.comment.html" - } - } - }, - { - "begin": "(<)(?=template.*[^/>]*/>\\s*$)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - } - }, - "end": "(/>)", - "endCaptures": { - "1": { - "name": "punctuation.definition.tag.end.html" - } - }, - "patterns": [ - { - "begin": "(template)", - "beginCaptures": { - "1": { - "name": "entity.name.tag.template.html" - } - }, - "end": "(?=/>)", - "patterns": [ - { - "include": "#tag-stuff" - } - ] - } - ] - }, - { - "begin": "(<)(template)(?=[^>]*>[^/>]*)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.template.html" - } - }, - "end": "()", - "endCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.template.html" - }, - "3": { - "name": "punctuation.definition.tag.end.html" - } - }, - "patterns": [ - { - "include": "#tag-stuff" - }, - { - "begin": "(>)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.end.html" - } - }, - "end": "(?=)" - } - ] - }, - { - "begin": "(<)(template)\\b(?=[^>]*lang=('jade'|\"jade\"|'pug'|\"pug\"))(?![^/>]*/>\\s*$)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.template.html" - } - }, - "end": "()", - "endCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.template.html" - }, - "3": { - "name": "punctuation.definition.tag.end.html" - } - }, - "patterns": [ - { - "include": "#tag-stuff" - }, - { - "contentName": "text.pug", - "begin": "(>)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.end.html" - } - }, - "end": "(?=)", - "patterns": [ - { - "include": "text.pug" - } - ] - } - ] - }, - { - "begin": "(<)(template)\\b(?=[^>]*lang=('haml'|\"haml\"))(?![^/>]*/>\\s*$)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.template.html" - } - }, - "end": "()", - "endCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.template.html" - }, - "3": { - "name": "punctuation.definition.tag.end.html" - } - }, - "patterns": [ - { - "include": "#tag-stuff" - }, - { - "contentName": "text.haml", - "begin": "(>)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.end.html" - } - }, - "end": "(?=)", - "patterns": [ - { - "include": "text.haml" - } - ] - } - ] - }, - { - "begin": "(<)(template)\\b(?=[^>]*lang=('slim'|\"slim\"))(?![^/>]*/>\\s*$)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.template.html" - } - }, - "end": "()", - "endCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.template.html" - }, - "3": { - "name": "punctuation.definition.tag.end.html" - } - }, - "patterns": [ - { - "include": "#tag-stuff" - }, - { - "contentName": "text.slim", - "begin": "(>)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.end.html" - } - }, - "end": "(?=)", - "patterns": [ - { - "include": "text.slim" - } - ] - } - ] - }, - { - "begin": "(<)(template)\\b(?=[^>]*lang=('slm'|\"slm\"))(?![^/>]*/>\\s*$)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.template.html" - } - }, - "end": "()", - "endCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.template.html" - }, - "3": { - "name": "punctuation.definition.tag.end.html" - } - }, - "patterns": [ - { - "include": "#tag-stuff" - }, - { - "contentName": "text.jade.slm", - "begin": "(>)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.end.html" - } - }, - "end": "(?=)", - "patterns": [ - { - "include": "text.jade.slm" - } - ] - } - ] - }, - { - "begin": "(<)(template)\\b(?=[^>]*lang=('liquid'|\"liquid\"))(?![^/>]*/>\\s*$)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.template.html" - } - }, - "end": "()", - "endCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.template.html" - }, - "3": { - "name": "punctuation.definition.tag.end.html" - } - }, - "patterns": [ - { - "include": "#tag-stuff" - }, - { - "contentName": "text.html.liquid", - "begin": "(>)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.end.html" - } - }, - "end": "(?=)", - "patterns": [ - { - "include": "text.html.liquid" - } - ] - } - ] - }, - { - "begin": "(<)(template)(?![^/>]*/>\\s*$)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.template.html" - } - }, - "end": "^()", - "endCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.template.html" - }, - "3": { - "name": "punctuation.definition.tag.end.html" - } - }, - "patterns": [ - { - "include": "#tag-stuff" - }, - { - "contentName": "text.html.vue-html", - "begin": "(>)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.end.html" - } - }, - "end": "(?=^)", - "patterns": [ - { - "include": "text.html.vue-html" - } - ] - } - ] - }, - { - "begin": "(<)(style)\\b(?=[^/>]*/>\\s*$)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.style.html" - } - }, - "end": "(/>)", - "endCaptures": { - "1": { - "name": "punctuation.definition.tag.end.html" - } - }, - "patterns": [ - { - "include": "#tag-stuff" - } - ] - }, - { - "begin": "(<)(style)(?=[^>]*>[^/>]*)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.style.html" - } - }, - "end": "()", - "endCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.style.html" - }, - "3": { - "name": "punctuation.definition.tag.end.html" - } - }, - "patterns": [ - { - "include": "#tag-stuff" - }, - { - "begin": "(>)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.end.html" - } - }, - "end": "(?=)" - } - ] - }, - { - "begin": "(<)(style)\\b(?=[^>]*lang=('sass'|\"sass\"))(?![^/>]*/>\\s*$)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.style.html" - } - }, - "end": "()", - "endCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.style.html" - }, - "3": { - "name": "punctuation.definition.tag.end.html" - } - }, - "patterns": [ - { - "include": "#tag-stuff" - }, - { - "contentName": "source.sass", - "begin": "(>)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.end.html" - } - }, - "end": "(?=)", - "patterns": [ - { - "include": "source.sass" - } - ] - } - ] - }, - { - "begin": "(<)(style)\\b(?=[^>]*lang=('scss'|\"scss\"))(?![^/>]*/>\\s*$)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.style.html" - } - }, - "end": "()", - "endCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.style.html" - }, - "3": { - "name": "punctuation.definition.tag.end.html" - } - }, - "patterns": [ - { - "include": "#tag-stuff" - }, - { - "contentName": "source.css.scss", - "begin": "(>)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.end.html" - } - }, - "end": "(?=)", - "patterns": [ - { - "include": "source.css.scss" - } - ] - } - ] - }, - { - "begin": "(<)(style)\\b(?=[^>]*lang=('less'|\"less\"))(?![^/>]*/>\\s*$)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.style.html" - } - }, - "end": "()", - "endCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.style.html" - }, - "3": { - "name": "punctuation.definition.tag.end.html" - } - }, - "patterns": [ - { - "include": "#tag-stuff" - }, - { - "contentName": "source.css.less", - "begin": "(>)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.end.html" - } - }, - "end": "(?=)", - "patterns": [ - { - "include": "source.css.less" - } - ] - } - ] - }, - { - "begin": "(<)(style)\\b(?=[^>]*lang=('stylus'|\"stylus\"))(?![^/>]*/>\\s*$)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.style.html" - } - }, - "end": "()", - "endCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.style.html" - }, - "3": { - "name": "punctuation.definition.tag.end.html" - } - }, - "patterns": [ - { - "include": "#tag-stuff" - }, - { - "contentName": "source.stylus", - "begin": "(>)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.end.html" - } - }, - "end": "(?=)", - "patterns": [ - { - "include": "source.stylus" - } - ] - } - ] - }, - { - "begin": "(<)(style)\\b(?=[^>]*lang=('postcss'|\"postcss\"))(?![^/>]*/>\\s*$)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.style.html" - } - }, - "end": "()", - "endCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.style.html" - }, - "3": { - "name": "punctuation.definition.tag.end.html" - } - }, - "patterns": [ - { - "include": "#tag-stuff" - }, - { - "contentName": "source.css.postcss", - "begin": "(>)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.end.html" - } - }, - "end": "(?=)", - "patterns": [ - { - "include": "source.css.postcss" - } - ] - } - ] - }, - { - "begin": "(<)(style)(?![^/>]*/>\\s*$)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.style.html" - } - }, - "end": "()", - "endCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.style.html" - }, - "3": { - "name": "punctuation.definition.tag.end.html" - } - }, - "patterns": [ - { - "include": "#tag-stuff" - }, - { - "contentName": "source.css", - "begin": "(>)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.end.html" - } - }, - "end": "(?=)", - "patterns": [ - { - "include": "source.css" - } - ] - } - ] - }, - { - "begin": "(<)(script)\\b(?=[^>]*/>$)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.script.html" - } - }, - "end": "(/>)", - "endCaptures": { - "1": { - "name": "punctuation.definition.tag.end.html" - } - }, - "patterns": [ - { - "include": "#tag-stuff" - } - ] - }, - { - "begin": "(<)(script)(?=[^>]*>[^/>]*)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.script.html" - } - }, - "end": "()", - "endCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.script.html" - }, - "3": { - "name": "punctuation.definition.tag.end.html" - } - }, - "patterns": [ - { - "include": "#tag-stuff" - }, - { - "begin": "(>)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.end.html" - } - }, - "end": "(?=)" - } - ] - }, - { - "begin": "(<)(script)\\b(?=[^>]*lang=('ts'|\"ts\"))(?![^/>]*/>\\s*$)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.script.html" - } - }, - "end": "()", - "endCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.script.html" - }, - "3": { - "name": "punctuation.definition.tag.end.html" - } - }, - "patterns": [ - { - "include": "#tag-stuff" - }, - { - "contentName": "source.ts", - "begin": "(>)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.end.html" - } - }, - "end": "(?=)", - "patterns": [ - { - "include": "source.ts" - } - ] - } - ] - }, - { - "begin": "(<)(script)\\b(?=[^>]*lang=('coffee'|\"coffee\"))(?![^/>]*/>\\s*$)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.script.html" - } - }, - "end": "()", - "endCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.script.html" - }, - "3": { - "name": "punctuation.definition.tag.end.html" - } - }, - "patterns": [ - { - "include": "#tag-stuff" - }, - { - "contentName": "source.coffee", - "begin": "(>)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.end.html" - } - }, - "end": "(?=)", - "patterns": [ - { - "include": "source.coffee" - } - ] - } - ] - }, - { - "begin": "(<)(script)(?![^/>]*/>\\s*$)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.script.html" - } - }, - "end": "()", - "endCaptures": { - "1": { - "name": "punctuation.definition.tag.begin.html" - }, - "2": { - "name": "entity.name.tag.script.html" - }, - "3": { - "name": "punctuation.definition.tag.end.html" - } - }, - "patterns": [ - { - "include": "#tag-stuff" - }, - { - "contentName": "source.js", - "begin": "(>)", - "beginCaptures": { - "1": { - "name": "punctuation.definition.tag.end.html" - } - }, - "end": "(?=)", - "patterns": [ - { - "include": "source.js" - } - ] - } - ] - } - ], - "repository": { - "entities": { - "patterns": [ - { - "name": "constant.character.entity.html", - "match": "(&)([a-zA-Z0-9]+|#[0-9]+|#x[0-9a-fA-F]+)(;)", - "captures": { - "1": { - "name": "punctuation.definition.entity.html" - }, - "3": { - "name": "punctuation.definition.entity.html" - } - } - }, - { - "name": "invalid.illegal.bad-ampersand.html", - "match": "&" - } - ] - }, - "string-double-quoted": { - "name": "string.quoted.double.html", - "begin": "\"", - "beginCaptures": { - "0": { - "name": "punctuation.definition.string.begin.html" - } - }, - "end": "\"", - "endCaptures": { - "0": { - "name": "punctuation.definition.string.end.html" - } - }, - "patterns": [ - { - "include": "#vue-interpolations" - }, - { - "include": "#entities" - } - ] - }, - "string-single-quoted": { - "name": "string.quoted.single.html", - "begin": "'", - "beginCaptures": { - "0": { - "name": "punctuation.definition.string.begin.html" - } - }, - "end": "'", - "endCaptures": { - "0": { - "name": "punctuation.definition.string.end.html" - } - }, - "patterns": [ - { - "include": "#vue-interpolations" - }, - { - "include": "#entities" - } - ] - }, - "tag-generic-attribute": { - "name": "entity.other.attribute-name.html", - "match": "\\b([a-zA-Z\\-:_]+)" - }, - "tag-id-attribute": { - "name": "meta.attribute-with-value.id.html", - "begin": "\\b(id)\\b\\s*(=)", - "end": "(?<='|\")", - "captures": { - "1": { - "name": "entity.other.attribute-name.id.html" - }, - "2": { - "name": "punctuation.separator.key-value.html" - } - }, - "patterns": [ - { - "name": "string.quoted.double.html", - "contentName": "meta.toc-list.id.html", - "begin": "\"", - "beginCaptures": { - "0": { - "name": "punctuation.definition.string.begin.html" - } - }, - "end": "\"", - "endCaptures": { - "0": { - "name": "punctuation.definition.string.end.html" - } - }, - "patterns": [ - { - "include": "#vue-interpolations" - }, - { - "include": "#entities" - } - ] - }, - { - "name": "string.quoted.single.html", - "contentName": "meta.toc-list.id.html", - "begin": "'", - "beginCaptures": { - "0": { - "name": "punctuation.definition.string.begin.html" - } - }, - "end": "'", - "endCaptures": { - "0": { - "name": "punctuation.definition.string.end.html" - } - }, - "patterns": [ - { - "include": "#vue-interpolations" - }, - { - "include": "#entities" - } - ] - } - ] - }, - "tag-stuff": { - "patterns": [ - { - "include": "#vue-directives" - }, - { - "include": "#tag-id-attribute" - }, - { - "include": "#tag-generic-attribute" - }, - { - "include": "#string-double-quoted" - }, - { - "include": "#string-single-quoted" - } - ] - }, - "vue-directives": { - "name": "meta.directive.vue", - "begin": "(?:\\b(v-)|(:|@|#))([a-zA-Z0-9\\-_]+)(?:\\:([a-zA-Z\\-_]+))?(?:\\.([a-zA-Z\\-_]+))*\\s*(=)", - "end": "(?<='|\")|(?=[\\s<>`])", - "captures": { - "1": { - "name": "entity.other.attribute-name.html" - }, - "2": { - "name": "punctuation.separator.key-value.html" - }, - "3": { - "name": "entity.other.attribute-name.html" - }, - "4": { - "name": "entity.other.attribute-name.html" - }, - "5": { - "name": "entity.other.attribute-name.html" - }, - "6": { - "name": "punctuation.separator.key-value.html" - } - }, - "patterns": [ - { - "name": "source.directive.vue", - "begin": "`", - "beginCaptures": { - "0": { - "name": "punctuation.definition.string.begin.html" - } - }, - "end": "`", - "endCaptures": { - "0": { - "name": "punctuation.definition.string.end.html" - } - }, - "patterns": [ - { - "include": "source.js#expression" - } - ] - }, - { - "name": "source.directive.vue", - "begin": "\"", - "beginCaptures": { - "0": { - "name": "punctuation.definition.string.begin.html" - } - }, - "end": "\"", - "endCaptures": { - "0": { - "name": "punctuation.definition.string.end.html" - } - }, - "patterns": [ - { - "include": "source.js#expression" - } - ] - }, - { - "name": "source.directive.vue", - "begin": "'", - "beginCaptures": { - "0": { - "name": "punctuation.definition.string.begin.html" - } - }, - "end": "'", - "endCaptures": { - "0": { - "name": "punctuation.definition.string.end.html" - } - }, - "patterns": [ - { - "include": "source.js#expression" - } - ] - } - ] - }, - "vue-interpolations": { - "patterns": [ - { - "name": "expression.embedded.vue", - "begin": "\\{\\{\\{?", - "beginCaptures": { - "0": { - "name": "punctuation.definition.generic.begin.html" - } - }, - "end": "\\}\\}\\}?", - "endCaptures": { - "0": { - "name": "punctuation.definition.generic.end.html" - } - }, - "patterns": [ - { - "include": "source.js#expression" - } - ] - } - ] - } - } -} diff --git a/extensions/vetur-web/syntaxes/vue.yaml b/extensions/vetur-web/syntaxes/vue.yaml deleted file mode 100644 index 417d75e82..000000000 --- a/extensions/vetur-web/syntaxes/vue.yaml +++ /dev/null @@ -1,528 +0,0 @@ -# [PackageDev] target_format: plist, ext: tmLanguage -name: Vue -scopeName: source.vue -fileTypes: [vue] -uuid: 5512c10d-4cc5-434c-b8fc-53b912f55ab3 -patterns: - # comment - - name: comment.block.html - begin: - captures: - '0': { name: punctuation.definition.comment.html } - - # template - single line - # ) - beginCaptures: - '1': { name: punctuation.definition.tag.begin.html } - '2': { name: entity.name.tag.template.html } - end: () - endCaptures: - '1': { name: punctuation.definition.tag.begin.html } - '2': { name: entity.name.tag.template.html } - '3': { name: punctuation.definition.tag.end.html } - patterns: - - include: '#tag-stuff' - - begin: (>) - beginCaptures: - '1': { name: punctuation.definition.tag.end.html } - end: (?=) - - # jade / pug - - begin: (<)(template)\b(?=[^>]*lang=('jade'|"jade"|'pug'|"pug"))(?![^/>]*/>\s*$) - beginCaptures: - '1': { name: punctuation.definition.tag.begin.html } - '2': { name: entity.name.tag.template.html } - end: () - endCaptures: - '1': { name: punctuation.definition.tag.begin.html } - '2': { name: entity.name.tag.template.html } - '3': { name: punctuation.definition.tag.end.html } - patterns: - - include: '#tag-stuff' - - contentName: text.pug - begin: (>) - beginCaptures: - '1': { name: punctuation.definition.tag.end.html } - end: (?=) - patterns: - - include: text.pug - - # haml - - begin: (<)(template)\b(?=[^>]*lang=('haml'|"haml"))(?![^/>]*/>\s*$) - beginCaptures: - '1': { name: punctuation.definition.tag.begin.html } - '2': { name: entity.name.tag.template.html } - end: () - endCaptures: - '1': { name: punctuation.definition.tag.begin.html } - '2': { name: entity.name.tag.template.html } - '3': { name: punctuation.definition.tag.end.html } - patterns: - - include: '#tag-stuff' - - contentName: text.haml - begin: (>) - beginCaptures: - '1': { name: punctuation.definition.tag.end.html } - end: (?=) - patterns: - - include: text.haml - - # slim - - begin: (<)(template)\b(?=[^>]*lang=('slim'|"slim"))(?![^/>]*/>\s*$) - beginCaptures: - '1': { name: punctuation.definition.tag.begin.html } - '2': { name: entity.name.tag.template.html } - end: () - endCaptures: - '1': { name: punctuation.definition.tag.begin.html } - '2': { name: entity.name.tag.template.html } - '3': { name: punctuation.definition.tag.end.html } - patterns: - - include: '#tag-stuff' - - contentName: text.slim - begin: (>) - beginCaptures: - '1': { name: punctuation.definition.tag.end.html } - end: (?=) - patterns: - - include: text.slim - - # slm - - begin: (<)(template)\b(?=[^>]*lang=('slm'|"slm"))(?![^/>]*/>\s*$) - beginCaptures: - '1': { name: punctuation.definition.tag.begin.html } - '2': { name: entity.name.tag.template.html } - end: () - endCaptures: - '1': { name: punctuation.definition.tag.begin.html } - '2': { name: entity.name.tag.template.html } - '3': { name: punctuation.definition.tag.end.html } - patterns: - - include: '#tag-stuff' - - contentName: text.jade.slm - begin: (>) - beginCaptures: - '1': { name: punctuation.definition.tag.end.html } - end: (?=) - patterns: - - include: text.jade.slm - - # liquid - - begin: (<)(template)\b(?=[^>]*lang=('liquid'|"liquid"))(?![^/>]*/>\s*$) - beginCaptures: - '1': { name: punctuation.definition.tag.begin.html } - '2': { name: entity.name.tag.template.html } - end: () - endCaptures: - '1': { name: punctuation.definition.tag.begin.html } - '2': { name: entity.name.tag.template.html } - '3': { name: punctuation.definition.tag.end.html } - patterns: - - include: '#tag-stuff' - - contentName: text.html.liquid - begin: (>) - beginCaptures: - '1': { name: punctuation.definition.tag.end.html } - end: (?=) - patterns: - - include: text.html.liquid - - # html - - begin: (<)(template)(?![^/>]*/>\s*$) - beginCaptures: - '1': { name: punctuation.definition.tag.begin.html } - '2': { name: entity.name.tag.template.html } - end: ^() - endCaptures: - '1': { name: punctuation.definition.tag.begin.html } - '2': { name: entity.name.tag.template.html } - '3': { name: punctuation.definition.tag.end.html } - patterns: - - include: '#tag-stuff' - - contentName: text.html.vue-html - begin: (>) - beginCaptures: - '1': { name: punctuation.definition.tag.end.html } - end: (?=^) - patterns: - - include: text.html.vue-html - - # style - single line - # - - begin: (<)(style)(?=[^>]*>[^/>]*) - beginCaptures: - '1': { name: punctuation.definition.tag.begin.html } - '2': { name: entity.name.tag.style.html } - end: () - endCaptures: - '1': { name: punctuation.definition.tag.begin.html } - '2': { name: entity.name.tag.style.html } - '3': { name: punctuation.definition.tag.end.html } - patterns: - - include: '#tag-stuff' - - begin: (>) - beginCaptures: - '1': { name: punctuation.definition.tag.end.html } - end: (?=) - - # sass / scss - - begin: (<)(style)\b(?=[^>]*lang=('sass'|"sass"))(?![^/>]*/>\s*$) - beginCaptures: - '1': { name: punctuation.definition.tag.begin.html } - '2': { name: entity.name.tag.style.html } - end: () - endCaptures: - '1': { name: punctuation.definition.tag.begin.html } - '2': { name: entity.name.tag.style.html } - '3': { name: punctuation.definition.tag.end.html } - patterns: - - include: '#tag-stuff' - - contentName: source.sass - begin: (>) - beginCaptures: - '1': { name: punctuation.definition.tag.end.html } - end: (?=) - patterns: - - include: source.sass - - begin: (<)(style)\b(?=[^>]*lang=('scss'|"scss"))(?![^/>]*/>\s*$) - beginCaptures: - '1': { name: punctuation.definition.tag.begin.html } - '2': { name: entity.name.tag.style.html } - end: () - endCaptures: - '1': { name: punctuation.definition.tag.begin.html } - '2': { name: entity.name.tag.style.html } - '3': { name: punctuation.definition.tag.end.html } - patterns: - - include: '#tag-stuff' - - contentName: source.css.scss - begin: (>) - beginCaptures: - '1': { name: punctuation.definition.tag.end.html } - end: (?=) - patterns: - - include: source.css.scss - - # less - - begin: (<)(style)\b(?=[^>]*lang=('less'|"less"))(?![^/>]*/>\s*$) - beginCaptures: - '1': { name: punctuation.definition.tag.begin.html } - '2': { name: entity.name.tag.style.html } - end: () - endCaptures: - '1': { name: punctuation.definition.tag.begin.html } - '2': { name: entity.name.tag.style.html } - '3': { name: punctuation.definition.tag.end.html } - patterns: - - include: '#tag-stuff' - - contentName: source.css.less - begin: (>) - beginCaptures: - '1': { name: punctuation.definition.tag.end.html } - end: (?=) - patterns: - - include: source.css.less - - # stylus - - begin: (<)(style)\b(?=[^>]*lang=('stylus'|"stylus"))(?![^/>]*/>\s*$) - beginCaptures: - '1': { name: punctuation.definition.tag.begin.html } - '2': { name: entity.name.tag.style.html } - end: () - endCaptures: - '1': { name: punctuation.definition.tag.begin.html } - '2': { name: entity.name.tag.style.html } - '3': { name: punctuation.definition.tag.end.html } - patterns: - - include: '#tag-stuff' - - contentName: source.stylus - begin: (>) - beginCaptures: - '1': { name: punctuation.definition.tag.end.html } - end: (?=) - patterns: - - include: source.stylus - - # postcss - - begin: (<)(style)\b(?=[^>]*lang=('postcss'|"postcss"))(?![^/>]*/>\s*$) - beginCaptures: - '1': { name: punctuation.definition.tag.begin.html } - '2': { name: entity.name.tag.style.html } - end: () - endCaptures: - '1': { name: punctuation.definition.tag.begin.html } - '2': { name: entity.name.tag.style.html } - '3': { name: punctuation.definition.tag.end.html } - patterns: - - include: '#tag-stuff' - - contentName: source.css.postcss - begin: (>) - beginCaptures: - '1': { name: punctuation.definition.tag.end.html } - end: (?=) - patterns: - - include: source.css.postcss - - # css - - begin: (<)(style)(?![^/>]*/>\s*$) - beginCaptures: - '1': { name: punctuation.definition.tag.begin.html } - '2': { name: entity.name.tag.style.html } - end: () - endCaptures: - '1': { name: punctuation.definition.tag.begin.html } - '2': { name: entity.name.tag.style.html } - '3': { name: punctuation.definition.tag.end.html } - patterns: - - include: '#tag-stuff' - - contentName: source.css - begin: (>) - beginCaptures: - '1': { name: punctuation.definition.tag.end.html } - end: (?=) - patterns: - - include: source.css - - # script - single line - # - - begin: (<)(script)(?=[^>]*>[^/>]*) - beginCaptures: - '1': { name: punctuation.definition.tag.begin.html } - '2': { name: entity.name.tag.script.html } - end: () - endCaptures: - '1': { name: punctuation.definition.tag.begin.html } - '2': { name: entity.name.tag.script.html } - '3': { name: punctuation.definition.tag.end.html } - patterns: - - include: '#tag-stuff' - - begin: (>) - beginCaptures: - '1': { name: punctuation.definition.tag.end.html } - end: (?=) - - # ts - - begin: (<)(script)\b(?=[^>]*lang=('ts'|"ts"))(?![^/>]*/>\s*$) - beginCaptures: - '1': { name: punctuation.definition.tag.begin.html } - '2': { name: entity.name.tag.script.html } - end: () - endCaptures: - '1': { name: punctuation.definition.tag.begin.html } - '2': { name: entity.name.tag.script.html } - '3': { name: punctuation.definition.tag.end.html } - patterns: - - include: '#tag-stuff' - - contentName: source.ts - begin: (>) - beginCaptures: - '1': { name: punctuation.definition.tag.end.html } - end: (?=) - patterns: - - include: source.ts - - # coffee - - begin: (<)(script)\b(?=[^>]*lang=('coffee'|"coffee"))(?![^/>]*/>\s*$) - beginCaptures: - '1': { name: punctuation.definition.tag.begin.html } - '2': { name: entity.name.tag.script.html } - end: () - endCaptures: - '1': { name: punctuation.definition.tag.begin.html } - '2': { name: entity.name.tag.script.html } - '3': { name: punctuation.definition.tag.end.html } - patterns: - - include: '#tag-stuff' - - contentName: source.coffee - begin: (>) - beginCaptures: - '1': { name: punctuation.definition.tag.end.html } - end: (?=) - patterns: - - include: source.coffee - - # js - - begin: (<)(script)(?![^/>]*/>\s*$) - beginCaptures: - '1': { name: punctuation.definition.tag.begin.html } - '2': { name: entity.name.tag.script.html } - end: () - endCaptures: - '1': { name: punctuation.definition.tag.begin.html } - '2': { name: entity.name.tag.script.html } - '3': { name: punctuation.definition.tag.end.html } - patterns: - - include: '#tag-stuff' - - contentName: source.js - begin: (>) - beginCaptures: - '1': { name: punctuation.definition.tag.end.html } - end: (?=) - patterns: - - include: source.js - -# Repository -repository: - entities: - patterns: - - name: constant.character.entity.html - match: (&)([a-zA-Z0-9]+|#[0-9]+|#x[0-9a-fA-F]+)(;) - captures: - '1': { name: punctuation.definition.entity.html } - '3': { name: punctuation.definition.entity.html } - - name: invalid.illegal.bad-ampersand.html - match: '&' - string-double-quoted: - name: string.quoted.double.html - begin: '"' - beginCaptures: - '0': { name: punctuation.definition.string.begin.html } - end: '"' - endCaptures: - '0': { name: punctuation.definition.string.end.html } - patterns: - - include: '#vue-interpolations' - - include: '#entities' - string-single-quoted: - name: string.quoted.single.html - begin: "'" - beginCaptures: - '0': { name: punctuation.definition.string.begin.html } - end: "'" - endCaptures: - '0': { name: punctuation.definition.string.end.html } - patterns: - - include: '#vue-interpolations' - - include: '#entities' - tag-generic-attribute: - name: entity.other.attribute-name.html - match: \b([a-zA-Z\-:_]+) - tag-id-attribute: - name: meta.attribute-with-value.id.html - begin: \b(id)\b\s*(=) - end: (?<='|") - captures: - '1': { name: entity.other.attribute-name.id.html } - '2': { name: punctuation.separator.key-value.html } - patterns: - - name: string.quoted.double.html - contentName: meta.toc-list.id.html - begin: '"' - beginCaptures: - '0': { name: punctuation.definition.string.begin.html } - end: '"' - endCaptures: - '0': { name: punctuation.definition.string.end.html } - patterns: - - include: '#vue-interpolations' - - include: '#entities' - - name: string.quoted.single.html - contentName: meta.toc-list.id.html - begin: "'" - beginCaptures: - '0': { name: punctuation.definition.string.begin.html } - end: "'" - endCaptures: - '0': { name: punctuation.definition.string.end.html } - patterns: - - include: '#vue-interpolations' - - include: '#entities' - tag-stuff: - patterns: - - include: '#vue-directives' - - include: '#tag-id-attribute' - - include: '#tag-generic-attribute' - - include: '#string-double-quoted' - - include: '#string-single-quoted' - vue-directives: - name: meta.directive.vue - begin: (?:\b(v-)|(:|@|#))([a-zA-Z0-9\-_]+)(?:\:([a-zA-Z\-_]+))?(?:\.([a-zA-Z\-_]+))*\s*(=) - end: (?<='|")|(?=[\s<>`]) - captures: - '1': { name: entity.other.attribute-name.html } - '2': { name: punctuation.separator.key-value.html } - '3': { name: entity.other.attribute-name.html } - '4': { name: entity.other.attribute-name.html } - '5': { name: entity.other.attribute-name.html } - '6': { name: punctuation.separator.key-value.html } - patterns: - - name: source.directive.vue - begin: '`' - beginCaptures: - '0': { name: punctuation.definition.string.begin.html } - end: '`' - endCaptures: - '0': { name: punctuation.definition.string.end.html } - patterns: - - include: source.js#expression - - name: source.directive.vue - begin: '"' - beginCaptures: - '0': { name: punctuation.definition.string.begin.html } - end: '"' - endCaptures: - '0': { name: punctuation.definition.string.end.html } - patterns: - - include: source.js#expression - - name: source.directive.vue - begin: "'" - beginCaptures: - '0': { name: punctuation.definition.string.begin.html } - end: "'" - endCaptures: - '0': { name: punctuation.definition.string.end.html } - patterns: - - include: source.js#expression - vue-interpolations: - patterns: - - name: expression.embedded.vue - begin: \{\{\{? - beginCaptures: - '0': { name: punctuation.definition.generic.begin.html } - end: \}\}\}? - endCaptures: - '0': { name: punctuation.definition.generic.end.html } - patterns: - - include: source.js#expression diff --git a/package.json b/package.json index e7d538cc2..572575419 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "lib": "lib" }, "devDependencies": { - "@github1s/vscode-web": "0.1.10", + "@github1s/vscode-web": "0.2.1", "@typescript-eslint/eslint-plugin": "^4.15.0", "@typescript-eslint/parser": "^4.15.0", "chokidar": "^3.5.1", diff --git a/resources/index-dev-vscode.html b/resources/index-dev-vscode.html index 7ad7e99ba..fe90d7e7e 100644 --- a/resources/index-dev-vscode.html +++ b/resources/index-dev-vscode.html @@ -28,14 +28,14 @@

You need to enable JavaScript to run this app.

self.require = { baseUrl: `${window.location.origin}/static/vscode`, recordStats: true, - trustedTypesPolicy: window.trustedTypes?.createPolicy('amdLoader', { + trustedTypesPolicy: window.trustedTypes ? window.trustedTypes.createPolicy('amdLoader', { createScriptURL(value) { if (value.startsWith(window.location.origin)) { return value; } throw new Error(`Invalid script url: ${value}`); }, - }), + }) : undefined, paths: { 'vscode-textmate': `${window.location.origin}/static/node_modules/vscode-textmate/release/main`, 'vscode-oniguruma': `${window.location.origin}/static/node_modules/vscode-oniguruma/release/main`, diff --git a/resources/index-hash.html b/resources/index-hash.html index 8bbeb9ebb..ebbf3f167 100644 --- a/resources/index-hash.html +++ b/resources/index-hash.html @@ -138,14 +138,14 @@

You need to enable JavaScript to run this app.

self.require = { baseUrl: `${window.location.origin}/static/{STATIC_HASH_CODE}/vscode`, recordStats: true, - trustedTypesPolicy: window.trustedTypes?.createPolicy('amdLoader', { + trustedTypesPolicy: window.trustedTypes ? window.trustedTypes.createPolicy('amdLoader', { createScriptURL(value) { if (value.startsWith(window.location.origin)) { return value; } throw new Error(`Invalid script url: ${value}`); }, - }), + }) : undefined, paths: { 'vscode-textmate': `${window.location.origin}/static/{STATIC_HASH_CODE}/node_modules/vscode-textmate/release/main`, 'vscode-oniguruma': `${window.location.origin}/static/{STATIC_HASH_CODE}/node_modules/vscode-oniguruma/release/main`, diff --git a/resources/index.html b/resources/index.html index 253867c73..9db371623 100644 --- a/resources/index.html +++ b/resources/index.html @@ -138,14 +138,14 @@

You need to enable JavaScript to run this app.

self.require = { baseUrl: `${window.location.origin}/static/vscode`, recordStats: true, - trustedTypesPolicy: window.trustedTypes?.createPolicy('amdLoader', { + trustedTypesPolicy: window.trustedTypes ? window.trustedTypes.createPolicy('amdLoader', { createScriptURL(value) { if (value.startsWith(window.location.origin)) { return value; } throw new Error(`Invalid script url: ${value}`); }, - }), + }) : undefined, paths: { 'vscode-textmate': `${window.location.origin}/static/node_modules/vscode-textmate/release/main`, 'vscode-oniguruma': `${window.location.origin}/static/node_modules/vscode-oniguruma/release/main`, diff --git a/scripts/serve-dist.js b/scripts/serve-dist.js index d5d8a5c2e..1bb1982d0 100755 --- a/scripts/serve-dist.js +++ b/scripts/serve-dist.js @@ -12,7 +12,7 @@ const options = { public: path.join(APP_ROOT, 'dist'), cleanUrls: false }; // now sourcegraph graphql api is refused the CORS check // just proxy the request to sourcegraph directly for a taste -const proxy = httpProxy.createProxyServer({ +const sourcegraphProxy = httpProxy.createProxyServer({ target: 'https://sourcegraph.com/.api/graphql', ignorePath: true, changeOrigin: false, @@ -21,14 +21,32 @@ const proxy = httpProxy.createProxyServer({ }, }); +const handleProxyError = (error) => { + res.writeHead(500, { + 'Content-Type': 'application/json', + }); + res.end(JSON.stringify({ message: error.message })); +}; + const sourcegraphProxyHandler = (req, res) => { - proxy.web(req, res); - proxy.on('error', (e) => { - res.writeHead(500, { - 'Content-Type': 'application/json', - }); - res.end(JSON.stringify({ message: e.message })); + sourcegraphProxy.web(req, res); + sourcegraphProxy.on('error', handleProxyError); +}; + +// proxy the request to vscode-unpkg.net +const vscodeUnpkgProxyHandler = (req, res, vscodeUnpkgMatches) => { + const publisher = vscodeUnpkgMatches[1]; + const restPartsPath = vscodeUnpkgMatches[2]; + const host = `${publisher}.vscode-unpkg.net`; + const proxy = httpProxy.createServer({ + target: `https://${host}/${publisher}/${restPartsPath}`, + ignorePath: true, + changeOrigin: false, + headers: { host }, }); + + proxy.web(req, res); + proxy.on('error', handleProxyError); }; const server = http.createServer((request, response) => { @@ -36,6 +54,13 @@ const server = http.createServer((request, response) => { if (urlObj.pathname.startsWith('/api/sourcegraph')) { return sourcegraphProxyHandler(request, response); } + + // prettier-ignore + const vscodeUnpkgMatches = urlObj.pathname.match(/^\/api\/vscode-unpkg\/([^/]+)\/(.*)/); + if (vscodeUnpkgMatches) { + return vscodeUnpkgProxyHandler(request, response, vscodeUnpkgMatches); + } + return fs.access( path.join(APP_ROOT, 'dist', urlObj.pathname), fs.constants.F_OK, diff --git a/tests/__tests__/__image_snapshots__/index-test-ts-should-load-successfully-1-snap.png b/tests/__tests__/__image_snapshots__/index-test-ts-should-load-successfully-1-snap.png index 502a07ed3bc3438a8e8401340ef6062da77103dc..f95bbb5985aef3d31ed02e941bf6eb1be7c850de 100644 GIT binary patch literal 189480 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 z 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 literal 189325 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

FENLoFrf!SgKp3C zem*`vbSoGJ>&>Y%FgPLaY2JE?WJ9*Ix5wrm-IwNFoy9K1wc zF6`>-Qyw2&nHwp?OIiOsO+sfpJrH3n^+$+o8FS&;ApwC&{u-xmkG5m)1-XA|{r9T+ z;7xsEr$VI2l!APrM1MotWCrKzi8X1R6b8kCPt`?*J$re5W7CWGW5wpuFEdD{3W`_A z?Q?7K1fu93Q8y7SsA)2)nSbwc@A9=F>EU(qX8-B^hq4yFy(ytH%;bypxbS<_`MJ(k zw#++C5>vZCwUC@$FD~@oLfYu)7;4PXvcez}erE{!7-Zi; z$whcuVQ>iMk`t94JQ}N_#ItU!!FO|U{EM|&XMtp6a_RPc`)F?r$Vh;P1muhe!E9`7 z0B1fZ#?rt;~wq*yRb{B*khuBCw-)f!YVZZ1p2rc=L&X#Mja*VjC zXE4EM(_}?kP3YA@`eEL;FXFazC$uUsU0jI|q0+->5Ep$rb66eQIkFj!jfq3zIv2sO z!6;<8a@qo`c3=p;S~;EYUV21}2f4wqPOI3{XL|U?VoTy9j6v#NpT1wFBJpM;4DkC| zDDaAjk?QEhvBJ9hZ3aKYsK`$&KEs4e3b^GBN)EQ!y?+7v0NH&1%Y^NsJDIwSY@24W zE^(EmLnbb>zBKNtQ+)%)yD=J9g-EfV=eln!y{Yr8Un6g2?H4_#ElDan)q72Cib7_n zeRu0aiX^Gt)q2gQdbdS3v9XthUQxQuH4GR{=N*lTo1Psxpd?|hQ%v?DuWr-xf{Ve1 z-I6UYLbxa7^4InXXC6EtQ{qi4Cijvp^@y!)qw`z?rx$xumR=DR=0pYS%lj~hF1<(j zW??!HgI))OJOHI2LAwz(VV?6037b5CD)oCSo(e|fUYYROv19tw!GqT6_!b12>;ZM} zhHT6N^1HK)XI&%-metOqmtT954W244X`G3P_%-wyGMG*%)xt zC$DWX&uB5fG=W@29G{&>pPCdun1Z^OaOTj^*o%QM;Sd8xaV`2ekR{9f$yaaO2#?)t zoGx@ZC$)Hp7Uv}vc8Hh{KZMJf6n20jTM{&W@Hcq0vI9W=nuHJPYI~{M0SLYhNJ{2^ zQ>kSOLnZbJ+;yq-#a?M%f2z3_iMOuIGG5Bf-B(1L#hNyfmNUxuD$lYu^SmiuKYWg#FS9_-0w8nb5 z@<&%4nHIyU(tsV$&h*j5+oiVl_6m^rQyMkLoThHlA+CL|t=%4V^`eJI!DlOk z>pHRlB;jKA;j=Dv?hh<)S>o4*?y?b8x}SMw}pf(^z6;A8w1#VTE5U} zO>A++a3?{gt<~D+^)(KV3zd^J7zsrxJ}_*}Iz{8X(aFgPlg*^z?M(BBk*s?L28`#7 z7dU^+dIAGXM$U5Nf<=Zfbqw}r0nx2`N8E5#%MK<>%l;5xj zCj6AuUQnq(h9Jx%9`6iwR=2XW443wl!j8@JM}uvFT>*4Ef8oMIm1QIfWEniozkuTq z7xX}Kg2-RM=*O;>ENlO$C>Cs|Ap#yKkYTQLG}FmS@$@KSzI{7KRDZzgzJb7m*~vlp z?NIR){oH=|!XzRh2;qC6Cjm(TOXj-&{=Ed8D^}kGiw)16JGX83?nkJM#G?F=fIqn| z+#&&pyMawODhaBDBpmE}MNk~8qos9k>cO#l20P;A`!9n;iR|4ytWsI51S~sr;K#|` zbXxf?AsF$zX)xaaHrOE{q30lU=?T8T1;3Ui!Q~RU0a=cdr3MS|{Pv3;;#JJJSxN&7 z4`4;lhn*(7PJhtB1P9Y}RQ}&F;4!OxO9@Xy!o{yHM;uh=Ay)xVHloCx>fW5CLN37| z2*P(3HPbWV=Mjn@g_%!WK;6bnvZSc!E`-cjjc^)v z8IPkW3F6dTqiz`nLEw`T%NdXXlZI9QE73P1)PkC4+ba ziWjlR8dW1s4bXJjPPdt@B!HR(*NiyTSeXO1taaYhW+-pjJK{0JHwp1X=p^Q^*&b_R zFn-ran?_#p)h~J2Jv=N2_AEky5uke^(_b<#jg9_?OsZ@ivGG4}y`a;$){su`zZ6$> zRDk=0Z}Fs$5hn;4J<-LVPc!o=_7~v!sos1QeDq3Ciy$@^qiWXBC{N1Ew7>&p=GS?L z!w3Eys=;tEhmQ>>tnT6~UZN5JWt2ZZ3n7;{#9);A#>XGSCxW%y)TjvHegpj2&t94% zDN0_^CLes8+%^LN^LmaCSuNB3m9m#F6C_-t4ikCBMGqsPy@XX3Saaa=O+yD2rb#Yd z*qwTrTL_gb7JVPeSi@|CGvlH@pq&_K$n&sGN3~{+Q8b!{d#nI|uodIS8sSd262R0O z2=`OOdBRi03zLhwxGVcm5vb?fX4lNL#A@=Lv6-IggDhTP;1Q0;uU@?Z69Y`We>g-| z42)lnh1eJJ4lU|_aZD=ijDdX>_d*-bi0j9^iC1q8&8Z??dB0^kGFKg?0K!=k=b~xf z=y`DP?_kr(J@@j-9ExgAMKk^PIkYX_&d!!vOsm&B-f1Lr8AVG$zi%8LZ z_YbS})I0EHI=CLlvOOZ*P3Povx#+pWK9a*vnf_y2opIe9KMqYsfyY-p1C$MRqU=Z@|g}_R3*QU28HQgMQ9I^rtq+ zlx#TJ(*0}Qp+4m0%_`Z03*XE?tdbnpV^UEK$qf$w4XzHF8`;6hD_+Q)meje=ebx3u z*3Apw_6wNX4zEky&N#d@RTy00ybHwN+pSt05xY0K)pVC=pm*l;?!6sxzhH>%iAh9)MOlw_J8zfe37y%UOC^#Zp&V8r+Rt?enX zg<42%)Z0X8?-b(2eFmo2zlTJe#`797-xd`XKiN!1^RsZBV^>pas~wCqZ!ToKdv^qB zEY{mUGBVP}$tfO<6{s}ol1K+-X1a1JYnRiHtij%Ra5Dm!Zzcny0 z0DbQ)Y=Hi++}n?By{Yy?io|wu+`uO6l3`_KbzAKA0lgM}X!j!`_KlB^lZZk(M2;|~ z*t4ApR2|8B7fhdinffpvP4)XK+qdNk!zemvUk&yK@ zb)!zC0(?LyO!55X=)Q$GxXUy*s$R#ODHi|2jdTY%!WD)+8I3yJcJG%72XS;SP4G%Z zLD8t=dS&lDwT^$1Pt7Yy!a#|zcKP}8q+;tlQib&T;(dIZ?(y+zgj<|AY^SG%*9!RB z^YimfO-+*kXuBYnKwTo@zAS_=Z-fI`m&P+9rIPRBfFjla)i>78tENq#wC;#R*K$)} zH{k@2UExHLgW)nXB1y?>P!zqXpXZqbJEm> z4^%=J+jha@Ab6TfR(;{!r|~Ry7BbZmEAK=b&&0oJL@Qd|+bU|@kWKsae2RRk^+~3P zmt%pg8Uua77FyRt)L)eddeWB$yzr9hKlH+NQ16m|aGfnQJ}rO849S_hybX-@i)(ni z4*4*8tx4=|;x)}ykr?~wG`_Om^1sT+R|oDomyhM!FzEPHbtHTf{34ORYsI*vT>ML5 zqAt^$+4sI><=WwaZ)V+gWZl(09L!zOw7|678gDZ!u@BtL8$V(`pVuFG@LS0`(7jLT zv)a6Vr<=&D!%i{2zK2c>AKv8`Vmr1V``9^bVNJEePQkh6;Q0?+!eto~w;=_QcOUQg znsf1eY&^>WrKZ=Z4rk)71-lwkVI-BpTLC$%lbF~=qL_(pMI zptwAHb2^3Pfcpq{_;k9ht8uJQWE+<>LH1r|dZBpsLZA3w>*%i^W-NuS@ce#Z_L8nB zM}Eul1L^X%1*Y=8Y=-sCu~|leN;%&dBg~Uho!`=`Q!(pRJuRCXD$Sl%KQrI0P%b*R z6&%&BU$@LZSn(=H{@t(`j$(Tfd>z?*SiB!qc!jo1LIIZ#yL9eCT8m>?KqYq=t5a*F zb&ISEA1C+RJ8;9I>6aj8MO0{~e*;H_{T-HNz5(m0ZY^0MS_%cV%CK!Vbdjh{uOKA& z&K=kSel;3dkdx$Ff%I-b_)FPUA92zmw0`75k}3h262brVIne)bgW?rqTzdx=CU;{Uh6%9aNUZ)wcga~u5cp%&7Nr`p zZ4F4Ai-A~W0EKUP1!o7XK4Gag=K^H@8E|NvQet^D%vc{mVV7W0Xj)SoL{NoMBcKO6 zl8z5Cyl3ubtlXR((W7)(Ij3jRZ)X~fB6H2=b>6t|6yjp4?HQlgi~v6r$@ zN2djVC&=Y0n$j&8^t@hmVn%@p#JvNRVBcS_t z2efNf8txOQ4Kf^P{6o2JQ>Dzl?uAUVo7d1w#>!~w_eUw54{_+swjT7SgXxH%Y53JZos^d;ts}!4{c}RWi$dOAMy5N^9fRA4c{g8Q0-=}fe{&s6$R?lO{ z;%PknJ>bh}^eTdJ>D9--PW~8SLsMlqN_%kOosr9y_Gg`w`_t0DovQsmr1pi~j-g+# z4-_$!OHMW9Kj;_9jG*~3J$Q^Sz|JL#J(a?gf9$*K>UAP!t*yx?)KpkT{*qV{dLiu- zWM}Cet7Ur~1iHJ$IeX_l4hsy~$!bgQrgQF#Quo*Dz2`nM)%R*yRqmL<0-b%@mkQB2 z-b^L_w_hA06W2lq8N8$R&9BGE@tB-1=#+CEuc)l#UJ!l9@nxXKph|wQ`eBjYuRteb zNt&OVEzLLWT1k{zcbb(QyryF2NM3A<$#;BI)gC&d9&OJAPRDgM3-5K~(!pj0?N&Cs z>ilYPInB|v3jq+5DoUqJrfPLIm#OJr{_B^mF;!oUXwi}LmoR!0iGC4jX_^VywN#px1 zpFGq-WJDl+^RfPO@f@Svv5j8-k1Gth(k@nZ%BD2VG^i!8aX!Oo9y+an32*8>ov+Es z>?!L57-^hby_C`zws(~R>?A6bzy|nNE9bU10*>t2W>8C0v$9NZRFxA{w;~uA3cjc} z7{m3$rK1Ry4h3bR(~~R-RxoO0XfCkB4D7vvf&vERPW(mtFqzPbmXw^;7=8B-2Ym~^ z2}$F#DgUqiy8q<@6k*@QkIPxFpL+Wo>mL|^Lx*05n42uVYQv3t!IZ!~{B=^|QGq6E zX88ek!e1QRs)9;}5&p4+`V1fwr;JKa@!50!`$db1V0S&{Vg0^0lM;_nsBk+}f4s*k z>s@#Zevf>T4;Wa)cHJ-1YcODk$c>nuVT=5bL<{2VXGtzDIgO0P)Bbjd+{9+eq2E4U zUL*p+8g59C#RZfK4iD#;^D6{?0D5kHFKi%^{5nxNIfK=2){&P}U*J7hj4c5DxQt+; zNQc^e&KrqIv`Bc5s&@OfZC~$E(%LvUgxuqEbaadzAkWk+_-xWH^dKZL!{9ZJ=V;g3 z=^hP+I~Cn$4Xei`w`dpYuP7*#H8<~xsol~>zFYkLJFFaPQ2rA%u&sNAWMC%%JcqH0 zdra!2$Lbx-Iq_f)gL?MOadK+v^wHoc5W?jrI78&PR6Z)3w}zNN+lF1RBa6$+JJ{I# zG5&>y=+3*93$jq>K8Xzr31O#9x_i5|T2J5-$QO}ew{HEBRN@-OA+i7a>n^${yQ!Y@ z5dU(t^RGX3dX8=BZCWl7dAN@46aBVZ;bs=?o9QkaS`|k z&9#9uZ2j%QtbHC4FJ7p3Pt<;@{`q7;yLRH$y$+=o?uFLs0DJoM(`x2lo*$K7U!S?M zex=f%YFbb=j#qA9EQF#@yX|U+H*a}WY4nV8NJOyb%$C0sY*UGA3vuf~+}Fic0_;|O zSHySQ_jQUq{rF>zQtnyHt&`_uin_`r5`BAB6q%6PyD2-(Nb5= zoSD*RJpV!Y<4v=B?AzWbhpvfhpMIV8cbg?9p$(EqTOiTGg@~BwHf2~alaSgL*<2S` zSkE_{vRTZExRSCdNM_5nE!)KELJqNWu$=oyeP!DQGq&>qJ-$K|Z!akwf5doAX4kH1 zt^i4XhKsO%qQg8GMwC-ax-aMky!}>CLp_aad9nlEt=w|?iYE% z>Z~=(_xHky6DKg*KPLF;Z(GryWfgtU;oZP{v>$JS@Lpa^E3)Kwa=2gZa}~qKSK|-! z^Vf_@ypnQn;jvND0>k+Xf_c4?0#@k=?>gTN+Z&tgF`>OP=SLH_MhJ}=B=NGCeJO6d zn}42%rZMR?B`wn=Mx(cZZzHgrwYUE)R@kOnTb(I#JDRtA_D1)}Tbq?8vGsdENJja> z;~UH?e*7RLN2feRQvXCJT3L)0U?cWY$xc+sgx@tV;C_O{nyejx#}O0}VKGz2zSDKB z`kh{@_$QGk8Lo=56Ip%*{w>21eg&B&6OwZ4j(f-4Z)7wqnyheLXdOIbFvJ=Zra5bU zjP|TS#?k^Wd(E_kX{6SZO#&g(KmM4K^HMn3wGNa8E(lvhyNA#SGM@NlJ4v~2N{hwsK*DUQ_$J|F%R{+gNoZgtY%O7Wc6 zed;fIM*U}0-_bwRvf;WGdb4AqRQIAF;Y{+p35n^0W)>gL|A`gv0`OE33~vJf_o>8) ze?R&M#q=Zad6WZ6$*Ef)ff-~mR;r|%DC|04goG9qK|P)B2EIAL9s!b~TKEh7KyXBa zJd9|;d{xUzK_KJg3>`G5ETho$5__=>V7o!K9(qOe550hP)4zDaupU~h;Q;e;^3C1* z_ge~kE#knPfTRYdT*oukuDsYBrwcK6#}(vdvpZ^UMsWlI0+`IdP{iZ#57>ye_LPeXP_FOKsbMnA9oPJ9S_It6Yc<4(wu8-z#Zw=1 zy*H>?j3?4j!GlXaF#L8eNPPg$U!dJMfob_>`u*6n-o47*y7oc9b>SJxG5A^H;v1k< z&_YS@=+PEd=f3T8*-6JU3iCbG1Wu%iB(?`XnbFY~BX=#XyiY1nud6xy=kLzx^scs# zPDgs&w5^eV%`8>EB;B6c3~E4|JU)k@hkx*vFo! zST@)|lP*>^Sa>m4)%@z8$Eyo2Now21=MGnhO+h}VYqQnL``(4E_BqO?7j#sAxT~+e zIWl2=G;XA&WpJDP?9?%vgj&jHzQ^QlZKmncNssv1Si7rtm9*RLgf0E@jJwPTqw*1o zI?>mgMO@$SaY<%mJ6~}kz-fW&kCeKpmiw>2TC&oqPiHAAe^EBD>rJY*eRSXuJg4qC z!;!2%Ce!kQ|{%-6MMY2v9Ym(xDFn*e228Np?rwcpknTD1=U5--QDAk+1LB_}@U)WO2ss zj3i|}8TG`fWFV|wstG4)JY0`=#4abK0%FGaV+ciCAoVOS z!Low|BtT{ya0cS1z`YbjORkvVw^syknPIL1V}x@Nr>t&#GNcAdYaV*{Bn&T)96RgtTxRCiP;DqvaMU`4=$GLA81lQ$`eF(0rc5uLyrEB>rPSPf(giK}toWbjw8b&kel-4Q<ZM(V`3jG1cG>j!D9SjyafCXjt*v@ zso;PM?R_RT+pg2eceOJb&<(UeId+3$_Et>B8n$8>`r)Ywm{jjipuM>(j)R7n=-JxZ z!mpx{M^AspzJ0zRf)fxmw|D1Y&%irkJ(`NaxuN)x~1)s_s5kBTe3K zZEXz;h^m%Soz^Hg#p0UV+Y3RV(~F_=wG&jlgs(F4_vMIF&rrmt-s@nNKTf}wu-O47 zLf>veE7+cbd4N1(H`2zJX7j>%zrs{xA_IZlfSKd)DG=Ky@lIY)dNQ8x#*gQ@kxIfy z9-pCMhJ?jGfnuwYu^zag5TJlZxiMcy;o7wTvCEA?#bee9ogvSYT!Zpgth#3y{0jYB zMj}erByRc!g`D}bWIbuNwnJ)cu&2Rg@49;;19|hWPB9+~Q+cg3ns=+)2Qo>^?^a1! zP7!;umCf&7EIF9n$Rnnk>f}3>-RS=<=gbMYx#exog8fEkmXtiQ8%Gqn{vI~XuY6<3 z9&FdUr9h#oEXkNbi!0-`atgzghdtf*#9g1Ry88vI9f-~4Ey-~+ka$T~maZc$sF27% z{gVB9(1P&Ji&8$jLTwFCYA`FvF)Y&5lzs2%bmHYJ+M0OFI@_H!$@kc}!}9AXjK!h7$=(xleR4FER28mP5_|-k_%rDdTE*Y zluvwtCro`q#}(Zlu)5gy)lG+8UN@8GPnwP64>(*9TPVO>sQ;+q3ra@w{;Q&hh4@JX z%8y2~XJ1naRZzh8K1Jp7oF!0Tv zG?Bq2l#_(T6Fli2AZH7r?m?$vd_2|iG2C!1_My$iYz8*yM^K6%^F5N3do6())&=cevCDD5g8wN@%T_4D@~;ETi$ z#moJm{pA!Y9O2gQuQ0skcNS@5DGBh{J?@E8{GO_ z?41&TD&^(n0+okO5DXpQl<*3B0lyQ?#E6V_FI;X`rEVBCd%8#PE^SA2Xt%x&8?CME&O$9sKCN< z^V|CNbj3?+9#VWpBTBiQVtH)QX9hmh_|okx_|j|S)>8eh3Kln%^#}SBj`y(-n%ot0 zrtI!h-#o^aP!?yo|J?Y`nCHWpPwUqHboViqkJT*SKN!)Lu#z+LQyH=D`cd zm*u%MGdtb9lygsauyM-La%q{D$7#q(kJJmvH!rJpSaM|zw%a`rrT zHm2}kd0Ua=5+I%yOw(AbyoV&{seTdBn4`g+(&!>v@s|eQcjN9`&#v;ncKBZLWxqz} zHqxvxz3nkaK|aQp#EUH$(>Xdb8}^Q^%6ej!t>eHnr?eN7|W^V+WHIJ5wzu4U^H0GwT$RA7DRg91}}lxsB>6I<|U)Y3`gvHOu* ze4Ax)J~^HgBe(l%Cu8Rp5J1(!RK|C;rjygtiYKn_@9*xu>*M27%E-uq-9d0x5z>5G zd_6fi86FoQ@2%u+g6I_~>8cv##0|<3dYe{DBRz|`+4=d*mJ5IbG1du)vRZOE&O3>D z#I32No>zmIpYCL4Rx|8izX%N)m@+Tnz{!Bu26&8j$KtbR&y3LY<#CPon z+?{ZrnRQ4v80;H@kvxsMsdbA&+w=jpyfHLVunn2}(r!*WX#l>wMVyvE-; zCNgQaY&pQqT{%3rAEgYqVhw{<8R@)~HFr-!rp)o=rsLLK3sRc7_Gb9mgy9{kr$`Cs zAjk~V-8(v_m?6JYxO&y^r%S6riZr8YiTiaoPFttk7yt+os`&Qs?MT zrAev^bXnE+UJ({7%srfsX!g9<#UUQc3gpWblxc!9rZ9|FYH(t4mUMN-vUM_jg17 zXWkWqV@r&ehcl62u??36J>N;!SOHfnwaA%UTs0bN6Hcwov|P<2JK47~F-lPVxv{+c zZT5n?rh1nid68EB>Q%l!^WLI$AV1wA+dhb$&uW;E`=Lrsb1KZ3Km0t#l11LOBi?e# zRA5`!r@0D|LQ?M4+=5*{ zKh65-ijGd2+p|=pqy*;JT)v{1BAMHKK(|%#T`xYy^ z^US5EW(%xZyB4a$nJ$iJMBCDTypMwN=`xQXeacY-a*&Vq$tnJ$XT7cn?R6{J*Ttx@ zlbI~@G)L61RQur4BExP$#jyz(**dQN_94;!$G>^eHR#}1FN>iAT=x4OO0Dskg((Ev z{}s0%e|1MK`Fy`eZ?@h17Fnuwi>ydY4tfSc3uj$)UIil4*{-iT&nq2odxCQ&A&iC znxBxCLHaFm$YsOu?pwgY`+LM4+uV88{*U?fjfE5j(y)a4`+5r@&SMM#_FaXhk@kzq z)-uZzg+b11J7lFNj(ncj4XEzV>5&;u5(xPugcQhLurmb0qVcwz638$>+^yNFHPZ-g@Mduc(Mif4pK~02p$sd;&VHW@nFEkaF zfsaitKHYs9wwbX1He8u!p>G`W*s_J=Ec`mhEnfWVyGy+G;!IC>QmSQZe9p><{>hS> z1Vs_XT>61O-P+$g$&}wCd6F$}oDM0cZWGPv9JlGRE^My`mG%L#h%t=s+y$u;{LDv> z)hWG-^dKELt-8=SWKYm7!GQrnS+&vYXu9!Fc%;drOZp8|m#AaWGh=2Nr!ETqhtbRc z@2~-4CP?2gmz?K^iTwuud8q47YY7xySI2c0l@n@~R6LXK2icAtqL%)Cd!bQU?UT@e zq3uHB;l&5SN0$EH^7(OU?=v^le6yoVyHK9eH=;c9!{$$^6-&v$z#6b>FWtOZ8{%}p zlRXuc*Cs>*aCjBa3O2~Tdv@V4qR=~a(&SLQ>)YDrZj!M;Ti(7s1j_g!VC4j}2&4Mi zyd?v?yATX#(2vJ&7PqM1V$zmv`Z8i~cC|9KPaG44%_cf#8$RgWxG zThR?I$vazUOKvgk*lxnF>-O~G1j0zXc9!rNrn0F?SO&|kdQn5*d`>p(UVBZLXU!^xJHJO>9)BfyxuNLyrIj(BERT*iQt=93?)#>!Esfy3%BLG& zsU5P%m8gkd0zIWP5-C$SobVrfGyh8L|?XaCnbBd_9csSBrc)gGkz ztg&dYoi65JO;4uIo9@1MN1A!@dS2j%D`lAP1}aZ*i@$x7UPwRLsZ;Yxf#Mg6c=$X> z63_6<7bTeDB@~I2GbCc2iO1SpWOJ{$lgC9kd)k1+ge5ZA3TQLc6MJZd*@Rx^{B=0r zQNapgC*e*<8t?d7^RC`h2!Z+y#}kZRiJ|+Z|7DlWn(8^XP4Db7%cmX5Jvw~#!vT$>v1bo~g! z$fG%(ddrqY`ApAWtmkxHn-*L(%bGwnCUinx7DTw{TT!DTZBV?*dgR@2lD$rWseScx zvle=i8u@?(w>L!>xx6adu7#RI$=EPw++;x%YQpKq;+0Po^=6g~5(un;N?r7`2O~X3asRHvbvxbk1NB{+c zpT;wEB`yJ0h($z_m~S$WS0DapNZT=t^zc-8J5P_RfO`+gqG?8nfKbwN*b`I`;hJf4Kl{ZD|`w$C!oXgx&9X z#cf|L7_xer(_G5s`txN5$UUJDlD@hgqx02N8N-ju(YMxV=fT+VkB%lRgy6m%E|~?} z7NqQRh>tnWGe=1n+-#awTh4c1Ifc)c9bL9iYmI4@?%&>Eg+JGztMFJJ8a(6cX<9#) z*uZ(zm=UD0BPUNXzAo=M=>6iA+AePZ8`yo~3+0o5=eh*aIfjWCg0)*+TL5{nOTmWL)ykyv1 zVLd-U*bGlo|ImQyom#A zGT(;5jym|PX~T|FJ?yWX2WsBPP?9?XU634O%B2DWuhTaoKf zhHz#jVNy69O4LPf}{m4x^gtQ9Z_&-)PzC5hr1cu7oy zIS{fqz;*CmMz%(~<^pHVxCo!Rl|l@X;0 zFLX#Nm*5!0`$tkzGKyC-6Dw`R4oJ_Oz(gKz8f@h3J5z@cy^cV)0vbmxm~Y5&Y8Zk% zyc*w&>KZ18gor0yj7R+wF*pMx&;;7G>-?xbsB`CsQS&JSD|-YVCHTiDVyPt5hSfc3 z%zfaJ!RdpbctGuh5`nS4-M9dw)YMdQ!-*^7HDc&0xsb zHka(P&eOLA7jsY%Q62QgpFr{Cw5VL?vi|t+LaRL3utET8d!S|u3=I5dt1o6ss2x*u zG=Y)DfyV;7q96<&;hDIIC&@C-jB!$TY?#g=tZ_xHn5>mkjKcyDn0&lRl}&i=H~b17 zgI%F0IS(yBFwPacAJP6&fe0SD>;jHVH|nYL4@HGde|f1v=0=EFkpNC6fIis&t*mSY zmqN3B9X@)eYSzHK<_$GTu-2>t^XUT0{!5o0wW#tJEZz*XsDt4>A$n(ZKH~YH3eN-n zskzId$ALJQl11J5BwXY-$k@C3ZEbD6`Q4>xWC(A9(5VBKR!qBj9(pA6v}Z`sj|z(m zJ+=sVZT5byJ3lqj`g?J0#;H8p?n`c}jhK=-L)mtk$>i_eg_ z=ct%b%H~b~;3hT_pc@7aO$LgtdS?dkObL_0MeskC;D<#h)*94wDW?m)#Kgsa!{?Jo z_;_lD^BR!0EVlahgPK@M{oql~(;fA)a-u?1SJ}O7TFYi`I9$}qH z5)5^7f4B2ycU*9(f@Od(QVM>vb zH%&wAg20Fm^Psnv1ne*qAZS{+Uk)PUXtPXPK63`J@nEeN9kL`oKHG(HZ3NiY)z-UN zSgzo5faE}wGH-D2Ae7%;&UQ;H?(!Z2@5U-@T^#2#Se4N5CIv(7>nl9~wPc~KgJlTr ztOniiGi-K1)U*Rcj*#>em^Oy$#%teSqGV76wHRp$(*|)4r8qi>?)Cy~1Zm(png@qg zgo>{5@npUS4PfC3?Y$D%75(9vyPF$nHy#MMZN$Nd?;B z2?^Z9X9j@{){KSim-dK63_T8ssqf(S0|Ej8cqXZKgID3IEsq08%y?TIVap9~g8)Dk z#9l5;8i^rvZeh$^y1n(us0hU7X(X8-i~=xQ+%06fji6-`PH*^+usG?uWMk&|cAQQ$ znke>VEG>D|)zyt1INT&Rz?wusX5GyTUF^5}NA`G8a?&(EZY;l=H=k;82o=Ik>@p|S z^N9ZzAlnVDYlY;Y8>okK%i0S1dWbDc5+iX8rZIsIL~_9^A=S%{f(H2L$&(%(%zme_ zoGB3N=urBCFioK#Irm)MSmQK)zPSK4d%bd-mVFx&LkwLJ2GK8UB`zRpTk!4I%H&3t z#=t<0l0z^N~0ANAq25Y%R=3h^-|t{!(&?a`+ICK5Aje2YZ=LkCh~i4sZzSEi+Kkxh#xZ z9Tz8X4-s*3g2w6n{zIRDi;9s5d0Z} z_nz;%V2n8xFp=PZfY-*GFuutuKO~5}OfcU`*sfx2!}l!W{rOey0R*EiokEy;$p!qmgXDy0s9X^@cBA!;X#ClI4I3RE7= z`1ZU)O&|bkKg=*qN5`$0{)4bafd~aCW*-hAVH5($R7S>2{dM_EWMya=s{kS0z*$Go zaWuX2i5(Og^9y9$5x*k6YcLuWk8 zznz8BkaIfTx%v&27;4_C<#wV71zN%~+#5iSxeEt*Pn}~(L2w}|z#6x7#yF5$3?0fx z^FKL_(|&5qqWwKGN3esyAx}lOhj{f2{4y8o&qsK9e~y-U!^&biSe>|@Kql$&JTR*m z&P#>L#5UU_bUcZ2#0^wg5~jp-dXCb04kMv2wTH_ki)Rb21!Rm=eA5$nzbE&fsC;O{ zKWEMOr6<^I)aB&2W_ZD$q*1$GL4F)Ue*!Xk6YWkSmmqAsSmRza`uR@p>rdtAdo-Ro znF~g(yLjxsp=Wa*&lyAk!_LVmtKIZX$N56cb|AMP0Rgz8xaPCWl&o7sdVL{=Q!wMq z)vNR*e3qlwkOayML5RYU1OkENO)PxD1X=rt-TN*ZE6p){ELwdcms2cUSf>lynD}(# zE7|O!(Ip@f+^^w6Fd`F*LjOOMR3TJvN|js^yrubRR^+xnM;r6kCiWIjsRff>qhj81 z!l)vIUsuO{6g?f01A(T6TeX64XfGD^vnu|c?rRpK<=eYiS(Bwyaf1%EA`$-_oxqp9 z56)m_wMpct5yQWy#Jj6YXEZ2(@u{cM*7DoBOCF4oYj*d=qNUmvwWK zKu>rwf+9&L-vucPK1{^wFT{OJj)@8pc&n((EC=o-_C$Xjm{irg+$<2+ZR^!M*$GSp zgU+9-ZjIPhPDO=5E|m;Q!Y6MDczLc<(>lKtDG;m{V(DzJzcfLg!$9Laplu)`+}GW& zq*z}8)f{>yF_6**OPO`;MbdxP`&^mf+W4GTlL&QM zSWjNSMj<$&z@q%^+qdCh%;0~sqs>a~-&G4mu!xL^V+&7ld{1CEn9s6EAC(twQ2cs3 zO4Y8K5%E)}m{91Wj`q??5w2vi|CYZg!!l&>QYRmWpx_Q{hXFz5PPaERx?1DFE-iiZ z=*G>~khEhxE5MBZhq^b9$FgnrzE6ZEX&xw=(;%fZsAwLfLQ+&zLZwlcBt$6F z^grxD#&F15|KfO6;GJuw@Zr+znTmJthzw~zz^)oLF1`f!; z{k)pcxWgN|`)x7IbBS8EBRx`O8cN5I^!-Vf|SDM@+r zLDkgxL1R^2nEIu4qG1>C0xr*YifwSzuS64s7{QR5L+kkZ6WTH6(c*d2s8JL~O z{rdfXtkU}0?WP;Q{-BHUd>$$$z<$`!Uea-LbHf!2uP;HXl{Dm|JyTK;Z|{v=CI;w< z>>mPh4uP96OXbb-$Gi9J@HdHP5d@o7o$SLK+<|gbMExj_(pPBPvEHZwE&O~yMlSs6 zltE**eCx``csM2RWRY3T?EB}{1a@bY)EQ5Q7{o0sSZOhd+Oypf~VRXT3OvMy3f(9>AGzl1&b604~Xo3U%Rws_sv4mo!9N~Tni-zi$% z%2T+O1znH$H!jV2j(+CJMknHCD2DX8AcUeWtEA+H@#(0COVQjvxV!O_G$-duHly&L zkd=`cnUlq=Iofxjs`gfyFjHUOc%i~UZ*LAaB~D*nbl34)hhgI@+BrBb#Nw0FwLqu4 zAysx?RF+>0X=O3*(3u6RsG~G*a7uU`J9f-;dN9}Vrs&m_3C8vF_PF-Ba;0BVORi>l z^#KEZEnoOaV>lX5#K5zK54@SQv$M0vIVVZ=AGKA0popagZF;(pvyQTN)Sk1xLzkXl zW^6~>gSs;yrg>sBmMr-&;l=EQhd6bq{;gZ}>)07R5!mj&ofE3h(+4uYBXiAS+mT8* zG2l1D%%(GLfv*<6btq>S8oV&aZwHZU_8u`Jwa9Vc;@d;OpRLQgX(x`!nTMpR36kEcyaud9JTSWV_9*jY?cQY#QO&&LzkU|s<4 zY|oo@b?L~#&LQ=w3%-!oDQLrkd-pyO9`EcN`8c$YPjg*6Cw8C=u=$uFT7rKs>^)tzPo3>*z~8#s$NMA&0WqA(fMEQkzhu2l~M44 zz$0=^J$0wN$gZEy0H%kfvAWNae>?!Oc4?5dIT4-gN0gVmO1*o%evifLLe%!Z_^A3N zS$^*bn{%WE{t!z+z@2tN5WS5C?yl)Y1{^@xwo7gY zMAc;$KNjdToWr#Ivw(*p+|r~vt+;Yjmn}CkG$j07h}>mrMpDA2?R53lsZ(R(lwcER zR^ETeIYD$d9oH=r^G$WwKeyc2>3S$zo={d(l!T^m18>WbVFc|{fHw+l8sqvfGq`)bjseN4k5ACOA$ zN*b;qzm~IHVWbzikmcSAO)VWy4Vq(>WiOsQrd%8)=G!^dotrJnjVrDVZI=yjn72ev z_I=je;a`pfEc$1CyI#9CzR|UBF3MFt59sb4R~NZuwQUZg)F^#*yNmAr#xu>O!7q*k zoi3V0!fWM!<9?p!S$nm-HO&0qS^(Y13h829bspNzI`$wP1^p}eHwK8_+DvIZ3 z!uI(5TIh73nHZM18hc7~=8;I=kBs!VrV17iYt;|bw5Yal`6RNuMX9Q|H&C`4Uv>fD{6ioS45&Sj2b{geUB5x5v z&2Avg&`3>BR3YqcUaKN<@B9~|k9G8awm2yDXRLhbt(6Hzto+Hux8fd9=8FQri9m@f zQ`|Edpa+-9auzaaAmSU=FU%y_+iYc{8>*C{G@sDUlby%Q@CHO0e>t_!e?5+$p_QSk z(rb?#J@Txi&x15q(-s*CQJXz8<6S?#eD`=uwd=1E2WUl+R z@j>ZR;cNjbQ;1;*jEDzS9=-h~=+j$||4~RjI?em_uj6p{HrZsPx7u+lG*hI%o`a~k{0rIgGb)a+% zPljHlz49*$k>MxqJoe7_hKnu4Qvb7J9`u#@p{QrB;_*$teRX{MSAC^j>Xr_5t?IvB z>*SGRz6UK{JRMa{R>UCqE-GeTX?c=yS;4EpK;F9bKip5K2O*nPQ0PY}2M|e1H^$1O zLf!}~d@M?qeJHA8h=Z#6dO?w5U2E~}FB_WZiEi2?n@dh;Ir#v&p@%VpD^rXCk>pNr zxTU=&!VCkF2*1m`9VaaUo1yA@tPe^FY(Ro)!(CZq3G&HJOHfA=p9=_eD#fPw4NVQD zu4%cMKX|rt08)IP)hQ}>V%i?KcW-O6h36;V zv6*e0PcI}qM!-z2ty`U*2a7=GLA|WCNPc5pVky|RwFCjf-R%v@X&wr4GCUfZ!K>a` zk&g2lnxHV3EcvEkZN$AJAdq04Emhx4_rz?yaq+Jf;9wpFnUJfjd2>1TNWTqb?15C) zhh*~PL5EJ9*pEA^YSX5lbXn6Iex-+GTH9+Bp6~nL-{Jh$zLHhDJ@06Ay5G9@_R@t* z8Y|`;kehNNNt7exp?`j7v*#w<=OE+DF~mS|H`Biw+_URszZheHaNbGiA`m+ppGjRc zlB>;Mwn6VR4W-)t$;c7j#KVt#{m}>-XNeN-IT~g$494-2E(8aZ-KV@ftJ~}RH3MN9 zUrtE-UzCF%#>X0UPFRgqRbhcv*bC* z9WjodQ9Urn8x(}V>%OEoQ4qc2%>j76+$sCI$lwD&vJftzue*SDgCn#D1rW`AY2k77 z3KSmyeErcE?y|pTS+~gZTWtDkMId1A!T$sKwu(`-T#I6K43ibDVp+ zv)ZJAMwkBUJMO9}76oC2ZV!J@sRuy~v(s!3ZrCd0nLMzi+VnnV1JtLx3?2P&=?rrd zj~8XI2&m#IyRUf@J9(JM)T-nAfS|z=E(Ug*&;~H`iqZDI1A;o1Uk)yQS3dB_(fMyl zgqDbpi2GPSpsqb7)wFAAjqQdR3n1(D`3%BJAKnk!2jk7w?>~I_>lL+7O=wAS?$ovX zIgh`hLZ#>5v#LI=v9g=nzyVc9?N&6o44!A`(|d;w+?;8v)+ZA0pNZ8aY5m%(I~y$N zEQPF7Sa=5v*o>+0V{&Uj-vGh2CYbBZN7aeu=BLv>s`mU{g#3Bud!zli`9DS*LY=RE zb+(sTh(~#WhM;4)wVvNbxFy6Vyt!+WCiQv}RU2d_AsPhQ@x$Nyrm3r0NaujLdrW>M zn~jQzp!+s+y ze_!}d#s0t1*1vzEF}AN{k=wCjat3drv$C{S1@8X)r1?-y!&+=OtjZ(_T{nju^*s-M zotcwzVNaLRhl~B%^cb(YqGZ1fE-+-XmOt;|kqRg{quTgK!}jk7Q0d=7BJHhHG$}7} z=<^f4Q%%y(baSIweY(5Vz44Vkqh&|PG`*xqnF+%?M5lnfHWHb3=mT~*=tJw3gJCx~7IP+M(v>+RvX`hp)4B>UD^BdlY(@eJh0! zYaA(z?9$YSF3rH1sf{RBDCQuLX-%kvXsILuWCZCQt zd%53dAY6VY=F{dOERV#g4F`qP#^PJX|Jox&(Up8`_;u@N`GYA9E!}$V?Y*`y?3=teEGaoarH_mWUoSD)_J z_shUR3vODyI;*RG$-d@CJF|#wa&7=p7?0&ARu*NGZE5|Y?)@?sMejk0IW1b;@rjO# zyn6J=k)0;L95QlCG94tZg63_IJbJ9FHFL0*R@#cjvc-2dwrltm{er$jACd(y&@w&v z-J6i&J?N`I78j;RQ7B_o9?!CrpBR*S_>}YF+HnYo<>mKGUT5*&hu3(erW)jXQBGzA z0EOKdts?U(cG7N>YkdX;xoH&KqPTeUHqK9I<)8tJ&_Q!ICh^`(P$d21!PR*H0F zeTNS}EIgwCa2<#`i)n0-R}&!{@=XF(5H5DtrU$239w+r};LUl+6u`4#BE$gQ7K(~N zt5buw9%;mehDl-)V-3N70z{Nl zRpnv(?}Mw|TSsXgB3Z$htVSXaWO(Op)4yNB(2TSDF`dk!_wUq3@BwDf{Hup9Y6g@g z@|zX=t?TvVaWAQfA5#K{NaR{?d^*(Pwj-LlfpE~_zzaih|K$|E1Rvwi}d)76{2n;0H^p+pVozVPUNVR7e%p&kZ07y9t z=i%-&C*q3iGbpgzu3?^b%W>G23Y_4u$}kJQe143VF?yX~V>5W@`ja!Yynv=80J`vEH~ z-Fo(8Y=5 zMPVQ`5=T2CqJMTIAt&mJg%}Dl2y~?E@%*t{hGZ3mkJ@mMeC)0lk{5=Uy`V=G2|nHSZp;fbKwony}1}gN+OU3ANNFT z0kWC?^pYsy%;O7`G^`9 zmmeDdINrW{cf%^l#67QWQ=|UCZ%=x|YjhU^%hfiY4i9|!@csMu(mwAWZ`dxhsrcmr z1H5`a;BlZIz6d{z`tF=@`HB+95^%5!&*omCM^rwPpLM~@J=+si2ve!yOuYeVr<1YeemueqngG zkKIYsW(6^6(UTtzdX_0pHXQ8OO1jBPQd3eyrZD)+B%-9(z8xmo96<6#fJBGy)P^aL zl!1^Ic4pCg({`WF9g=+1MIZ2*zxAwso=!?volIyU{fQ)N0b{o$~FKE3(Wx# z0#oh#05l029_i=#v^7F(LH^xXz+nS3@3Gq2Vqh)ew*+cAAy7ul-iyviOeIT6p(qH6 z^D~>6JFtZKg)J0gC4pN7t;LZs0G=OANWe=hH2E(PW$A_g z00Ea{pzqdwVZ#ZKYDZu?3+UR zQlu;(8U&6DGZ0gc5#)8lTW_4+0+@$IOUO2>(>M2eL2mA2-VkC`Zt`~QDPepA(APfG z?;LWn1Kr0SY1wJep@4unP%?C)BUXicEiFxEmmEMrMGEqVD5qoabSo?^)y*HLpU&tu z!rFjxS)eA*(a0#2t^U4Ms{U6_Q$A|(0=7l3F=M(uQ@*{D!+*E73V#E#>9aBAYp!%h z>oy#M9;v`?X1%jogtqb&#_faxR4$jpH=^m+5-t^_KNR!mr8low;96LRHbu#hHj!?YS7DzroBp*wTST9OqZv|)Hw1t!NvseYCi zi}uWe9)uuYQH=mKQ7&ra9k2WKtGqDi43kQPKApBjJW^N!MkSlxS>NN|ASQkscpm6+ z2rT4HZAEb%z!eB^o{b==4};M=@_t>r=Uj9pZ4H@d0JzbHDk>ES|3HS98RSDV9w(oM z3-m*@>lskgj|BzsNIB03TYj$_{CvVTaF_nYBD6)s!%%|+E@{P2JxNH|2O~BxCnG0^ z^FbfED(iR!SdCofR^&KtkvH;GM}mJ~L>Z91tvEzl#!Wm1Xo#l-SD|<0p8lGdaW~^V zic?2&&lz$mH-X@a2i8A+&CU7xv8;DL=69) zdEr=oDfTw19WS0C_NCtA#yv2o?f7|9FH1?|6mg;Nbe+6cQ*<-LG zxEJXUxCvd2BNprZfM6qF@g!&$5aJ(A(UTSoFOOJ!2T4(S$ZYN|zHHw?gZ9IKi5xnJ z;x2jPQ0EaPAty!!0gKtuJkleyF1yL#Y|&V8Jqq`OU{dKR67A&W-6kxRaE8z)C!qDzd{6f z;7FKiN*t;?R1I#;mk5l1pEjl0{d)G4ggGlLb~2}ccnKUW(chvv+99%MXy$Rgp15Yk zD+9J-FLb#dcWlp|89NF(4LRoCZ?>O7(A*w88Hzk*7AN@E(%MFL+e~7OqMI7Wxf$s` zdD2xebcG&*8!=M%2SdztZ{=j@R`@HueaL;qiwhhV5NLN6kh)Eq{`?kbLP31FyTx+C ztbTX1AKyU48;@M~{*9Vfd|-DGO^jGq(1tvVryQy<;tLLX25!6CH*tqnZMgAh(`x|D zvZohHDCv2NLJLcX9E~dq}*fZ#OY+^_wXk3nefQSB#ZGUe_8d z7G0O*OTtq|Q;a3~X{SK17TAleJF1O)N9HNW-<- zQEdLuxtkjmeaE|Vky&)*+J=(u?|Q4_laz)uBmaz?YOcwB9LG#bfCcHqazX*;b$c}G zW%v=H3()qSJbwK}S)md$5@HO_I4S)$PhCphYq^_n_XRJ9Kowd^Hx7+5q`w$MH3sV@ zPMJJ;=Iq(?v%k%lHmzN!PJtJ1Fj$5{mBgsFz`b6piwX-tNw1b&D2@F-5HjQudIDip zfhg$cCQLgkyPQEc;r?;O_Bxjmx}zQOB*gT=(kbW0>~A&28n$XaL_fx2aT;=0iq2=Jh$WM9fJs5kg=lXK01<`7)jCSXyQ`O_uJumTW{Ts&2bIC?YR`C&uVV&o#{oHd3GYwI=rF&8^|Ch{L??=Eqq z*VNXU1|)wjLgFbA;%lTaeGX+@9XxE9fvJcc!@AXH^77FG3{-zQB+EiQZ@#Nnp^RI8qV5+j*JDSHoL|!C zkV6|SB?Z2K(axjvb%|Xax8+}te)QqO?DHz$(HAfqs2=HwNR)_dsLGTJnL^m*{`&S4 zU5Av*2LRx&waY@7E$ygYi8XRv_y>}sK=&wpUXYBn`0@=;^(>2!f#nofc;C8(uYD&} zbdTDE+Ynwq+7F&G#c`ptAY?VTKZPc`lP8>+Q>52UEKY}whA5V>K;_lkJ<@eLKJ zLZwNrFmayG+37xcVDQeky9iin^}u<4R6)~nR}gn49$#S!BWpY@On5q1y!SOGUn~;&2;oM&*Xny z9FnJa5tUsh?kA?>67yypY7U=c^J7>Gj|`7M+q-v%^a!n&n%Hnds3*-rZpXw-nMy;j7#uCt7i?GiM}1TT(;uEso3c zuUEB}_Jq%dh*%sMZI&3+XdY79X6;q2>*hgo0|a(OO*o=vNz={VO*#!Uka0??$)`T2 zKW4@0P3YLA3&7ckmaA4rn7Q9H=_*X1Sq?dQIZchDvB%~ipL%{qH|I;ukGi2vvXvu? zsYz)#@bfC!-;4Nj3d{Q>Xx_Sc)2GZI%4X!@L=(kQ^-}5dM}K)ss8>bi0uiIY z+8?QUu|dZ6JaltS+92{K_0U-O4h^l1kMi8Rmr2XsG(0{vA0Y zgqsv>Rfqw^k8tuytLb(O@pn#0`IzhXMRDj?RiluApP_fJTSU*L#Gr`?0*gVvA>3m~ zzc|qczcFZEDQwC86SjBzmbH*o)tJDt+IY(I(FeyD$;M+}6>O$#Li^Qq$l!18 z%O}C`+HCniZ1S%IbT-H5SmFea{P|QFIA2VsAS0bNK$9CBZ2qA^?eMfCeO=G0xqcki zRO=ppt@~x;tI~_d?Xa)>apBp3MXm}bEej)y2zh?CQs>hrKlgf+0CVy)UcNjCcF7Qh zb>aFsS6emec+`c*)Hxkt?Eu+<+9v=^it$B6pG~Lb@UdK9*tlk$PUVjIR55`OZ{6#v zOXpE;at#iDFIVp}!L6{1bH8(8m0?$UX1nK*Pcq%Aka`j5qsu^VRt(P4liVa7+P0m@ z>Y`PbK`)`TP3pYjk<()~Jz8m2cRfW`eRTZq>p6K|P-?eR^Oa9V&zQ`7+KZH>$Sm{E z`Aq7S*uI+#MAB6MG&WqgnL5sze)uAw_LZZubWu+8yMzxe(pf|{PuV@4X&jn>d@>BJbGcGc^7>*y4!(g zB1rPAaf<9^TYe91DuU{ef2v1KYjW3Z+Ug~Y8r+LknG!(O$=A{bDNZ6jh5k2+WjOm0iQ14!$mmicL>gZI)q?eUo-*6)e!58T~NM_q0|X_Ll%w zUYD+6lA6Z9T7Xx#ZmSHPJ2tHUne;(d?3NAMXm}*=?3h}PU0t9Ek)}K%aYkbiJS&^r?Bck7ff29;c@9#c0Xz-7?L@Fbp1K$zt^?d1Lzwe>_7UZMbI>4tx zrXhR11Im3mB(%_n(+XP}cK%IKPW88EtU8hWLOFtw4-D+2^Q!UAHN&`t5W6VZJHg3` zeggNYaA{qLecvlIX$B%>L`WBbRt0y@lUGX`{m0Zx9U~$bx${KiEHWP3%7^?#*eF8( zaj@I6+^!#*@hYD3qE8lM7I}Q4PYq!sx*#s)(4_5H>>x^pfMFi^o zu}vc}5DB*8C^a)Xp;>-Lt9Do9tbxXZd<|{g>e)5ykPEmkg+(`U%GvFmdDb&haYyu@ zdy4M#)}(6PhQ~3xT67>2@^MDSF$O58#3z|C zw8B@f(!eZW{rm8Jpidy;i8MQ6h`Kq)*CT} zJ_-j=OT8bDPHgMCe_@;8grEqOV|E6ooT>4;`s&32>=lA-Q{G=BMZlT)nR3OD51jWG60ZDS-~+zMMpa~#xQiT4?h#z9!_Bs^A31gl z*hYPI)70WROf+t3=3U8{MdRmz$>A?J>h|8>baH^;F+K*iO_7IC~utqPHVBH0SI$@(4mg(}4?}2;c z!?G1e>;K&ahWTl0v_yAHqxv9rV>iXCh8N_}-OEXF_0C9FllY3xYNSDSHe zb5KoJzuXAim4XRL;-1h~(s{_D7~rzt*5{ijw7c0y!8?nFvtPG~ z3>iu%VU(w92T7X339gX-dQF6^&d5a&n&zk~FE#5*dp-lZTC9x4%9R%0$ZL?jfm$E{yo;u1^coV(>rDrTZECrM}^6n^b|2R5M;rsK^LBw|H4K78Ii06}hj z|55(D2jS!xw#VH>n}4anXv) zv*OzZ3CuOu*gb}5?)dcvM~omZxw%{SA9c&a%S!?6-o$KA+4;b$BB~kedds<#p)EI8 zXMFalWyLUJam~oZmF~2R9*9+_i$`WISTx>IC2hvOxqlCwAHqC|}>dYwP> zD-|na!-gcON``!&3Y*kx>ZUJ>5+)m83%_Nl#lb7gYp-C0o1100oA5L5=(1)IE zc(HoKoFc%I%i*hBmJrP-FzJ!gm(5y5LNu~p?~>Bnz(PdsEfhq-!;M*l?{Qt|jo$h* z`R7GhNnoq67B4GL9NAVm=3r_bY6-=@xI{H143LVcUt4l{QE0aXNHUIWb#Dj96&(taEzaU1JvGkZbpJWhj4{n4Iz#pF;ienM72$%!XdOOY*o_;4AV6xgpj+Dr zrUX!qDG^J{9uvqlu-J$-FF$ax$+i9}boy`aZkm7C+w;FwO=?Ro734O`->?2P&E3@| zdv4!`bX5~qSCsx>n1fT_!%=rq^iHg&G7jI6a~jIT51P9SG)P!-=<}sst?CXm7xN;d zJx2grtn~G&?ie+8DBIBMLJT4~d zoIHT8LcGu6!xvwMfaURxn3)^b#oduf;A1v^bZgecit(XwJV@_#Y|AJWr+;M=adXA6 zZ@O zu4ah|h;_C`-keTNK%ETlc?@Sx7TSP@y4^PsN^^`nO4e27@Ky0GDpfzA+SHC_ARkn` zjrLq-qtdJWnXnZSw`mM3lahlNn}8Q5EycVK;O{m{UUJw7l}4{W09Ai!2G34ThpD2O$N)_Fy7_xnrJh%1fgie+3eI?t4-2 z6779HJbUPDVRgr|2pFJI5-cGGW$vOyi*{7caC%}U0CRZv@##B{i*mis zb=0AAXOC;wY!5%oVH!>UIVYZ=XJ*9fU?U|?xdC*b#9VbQ{IyL+uJtl1v)zr^l(n7} zQT2^zzI9D3#kBZ?VqO6Qae|$ML+B8-xsG(L{YH#9%A3=q29Ykc=w}}dFnv?+zC`BwJo)7d%`JcU&kva1 z_srW?+5u^W^`)+RFs+zK1a@!XIstLq1v@JTnvdDwy*nazOqJ>8rHpM=u7A0BOd9jjT;z>hQJ04WIT>h zqJIu^%Gx2szfh@Hv>nN)m2bGD*|)5#N-kACcT_uF%@}B`jhI11EsGh`z^j~Q@-c^c zP1&@0v*n{*&G7{%K?cq4o1<7qx5SGw4*eeDY(iuHo3LhyGE*#3QR`JEZyBo?QFKZTk*gM-V<4y(*XMWFh^lB0=f_u? z5Wa5FgHS6|G7Lm$9^Ccx+_(7--`)5i!jw zsQ>aawLgC_UL1$|MTd30l?4*zCZ%Ebf;JifxHb#=R79EamO zq8VIK6|2|0*M8C9qC_1O(iQiiM9`3!DuaM%#E}hDJa9uX%()PqBd0NXC|2z&$|aVf zPzA$le*tDs+(N}jfJsXX44xhWEoh|1EJ_ex^+74HqV^=FR;Dm%`0H$_WTrl znQ|1#GG*phe>Z~`LS+Z3bOo4~5|guClNOgc<7Vi85?G9!iI3;B%razwa%W~to%)JE zALL8}p-A>9s`dxDV55pi8j-98S5X5aLC-!d(C9ETq^TNwmz|IJwdVWQLUOdl%nl&# zy=2YPp<$pY1dDByb&amBB4}_;iVHZHwKw^{yUp9 zTK7VkQQW%gFbTXab%CIwkabYiy)4SLD%}3*KZ|*UyAE##`CGeT>)CrTe@2cGZ1o$` zt5s{gxpLa955G@`ZIKpzj!81hl#FHTFFPn~J*X|C6E`<^rro!BCV_WsGuE>XYLN2y zCi|&-l5sYiqN{iB{u{AJ_YAcSy`nrjcJ#@}WEp8Cq(|y`Gprh|Fz^gSzh?F3^5Lmd z^?6PsmQT+1j^RZLuA3EpobkrIhrH0}BNR6WCuxhHPV~9LjnQ6Zeb<#8C+|Ii2~3+0 zEJTYyup$apv0~ z9`J@96c(-Rbz=ImrBA{66o*O?KP*xkAh;m0e{gRPF8=+xhqu=tndhwjn+1y))`igP zsE?2F#nN$OzRdaFi4qJ~4|>>M{GG_Dpju05Q`>gw63?-)@t=QI@*5JX7ZOXsIRKxAM$R>=*)D7ToRPK^Ya4_7ZXOR;jeRzXlexIBKC^hS*e2Pmw&&b6BH2fHacv8#4qD&-LW#Qm4Y zp*iKk>#qM)k4Gm+3NF(a-d$F{9APyl(C8=arC__cF+~%{VV-Db`|=v?FvV#B3TP21 zF6Kd_ep&3&ohN>Lg3~Cz27!Y+5uj|O__10$Zg%BKE&HR{fWr3(m`wP7EIq}c&vj~+ z!>ODWLYXx^WLs8NmH@bDO@-J2MWN`~$v-%(flgRkf6@Zf)@y7Hk+u6KbNGQrD&=s=ivvk1LCAoZo%H z=2=QZ@BbjwY5&aDH01Rv2sLpkipU*qECd7!7yPOypCY)Xp`Q#r#%l)Nt!6rbT2kXr zbxCT|-A4_@U8rn)96~(;resgCo?GYgy}A6(TYs;{>gxd)YhcyymT( zJX!L@<4xYO<@U`X{jFQkHMLF|R%zPQDB}|igxa0C$n=0xUsDT8f9{2g?WX-tS2mp} zv_3qrIbKa0kQ&`2L9#D|5kge#ryC$#q<1#xUaMZrg}#EWNrEg#R$2LE?+H(2AXCfH zT1y+5yIu-EQIn!=hag*>&kUM^R)l@x-4A3 zDXf8msGJiP(%ykc0{7h8dXi$G4rQF^i@Bfizn}U67Zuq!z4xxA{**qA;VeJ2{4WmcEBBn|?THUpBpw zh=Yl>5!PS5{74mMKhgMkeKrd2xC| zrrN5F;N;+~(_qR-e9&BEy)H`HF~rlMn7li!H8QZFc1nurzT4`` z#&TDYtSV$bbf6Kht0-JK0@mr@4!(6e^2CD;rp2@=i5EL@2*f8RD^f~a+g1vOw|v8f zWLOek%b&~K-nXA!?TH$YvjW)(F1_y0Y(w5-7)B@WQ{Y2SX!omX9rA8dNCG-g?n)=y)3)aA26;xxZB&e zZ_lQ!@%{LiQdi;O{3A=9n5rlcFK0npkk@VqtLb@$m1ou4?YE|)c&=a5a*Jzeo!?HF zWf5v)Wi@aqGtF*^hU!p;bTJ1&5X`6C>aPQqgn2~74|eU62T#Wt5uEK2Q4tcc$C}3eW3qg>ZBJ{gZw| z{omzoaNn1DaR)26TByQ58Jeak7obTyuF0+K^T;Yy_&J zX)T-OX>?%o>^{-;A`$~c?EUTr1!ljbM4w-y9v} z`S^oNk{S7)3mYE-8*x9PYDv1fFPznb=t~;WfDJ{H$S{C39QXUGAfdB>z461$Om|3-|k(F8JJ=+_+ z(%n_`z;7{K`cjf3JrP=o++04Y&8xWUVQfUJ3V$6pO=51K8Cv^wviUah@$$*7{ZDp0 zD_)NLmIke+VbYT@%Xc#gyqGH6+RU(1f3^8twF9mjSgLpV$GrT`(B}yW1C9OfAZi~y z`c8~XxN&seLW8V|yA;e$D{~+EKiJ^EqUcnFw`cj_|6f1zP1$kxv>TO+?G zT77`F=~pv=D9NvNm62UW)DCF%Ot_Zba>?RqHK6CYbwCYKUlTnitOxc6z!;CrpHw zl&Yb$ZW%yYjv~+DS?qc0B0<#8TDCvYc-f?!Ed3CZ!Iq_kO-{plg3Yu%6{R^~K>S(d ztM`6hQ!yDfd!Fm{kEJ(HMr+y3B4E01ihtja6w-pwvHU0{=h|iZrlL+^jghz4r0LaW za^+vneup`bTHm^{zIJ*}6bVc?8{`VqqmKmV=uIX`3><%YR^e<=yQTwXAx~igo}Fy{ zbjh%+?wj+{jy#n=lJ{2&K)U{UqbokemvATaFD|Pu7}C^tK|1rjmcuR)F)(OEPSw}f zkCz4Tux>b2uP2sdMTLvl04@Pdb#E+Y>`t(mMW-}{b|Si|AvDH*zte97OW*AGgvVQ~ zDLiz6;6=oayHi(ox<4%ej7Nk<($aBGg#j^&t}ikwN}>ONSGos8(@YB?=5PeY`N1%2 z4vRJmnI32~aOoMS0MQJh;Or2fVsH#heR znL>nr2<^3y(e=+5aVIogMPs%|f*wEBY1_6FYa6VEsa(+U*eiq-7xvKVfTkPo9`xTG zF)2b|9)&p4-Q^d+d9YerPPp{m9cT9eGh4r1P`ZL{hf>^67LiChV=Y}m#Em)3<~O!h zO|d725%PLB64bQ)SIKDV!yS=slL-6SS{Qf?i-wkxQ;A{A)~zp+zk@_ubVqpg&o%2I z*kRyA!44l9y*Z3u!3{rOx-q?u>C$8DzBE^LsW9AE`WVUz8@Uv?cRwwy1%+1wEcnaA zA|e=-`zoV_Yh!JYo%wTLE!#y-=6e*B1wn)Lcm{lueR+Du;!Ea3hM0x#1=|pfJiYQ` zR*yct$yf$80A&t&T^G_<=weYpx+fUv;XG{3@nywNGH&Db%0o9ea)nH$axpOHOg+8c z{rbgyR2sF=T>aex2Mtbo%X&Pt$R=ZMl!}qQz<5YvgejLrI7nTJmHnGho;8bdf-WSF zP0)S9wvNKt0^v;Eg|2YFW}C0>d9Pw)rF`|QZd#oS{1pcZEaK&9a}g8HXNvV7*@F`3 zm3QRnlsjtAb53YQAGwd!bE;{--y+Ar>t{`0_X^F^qs+qrDGV*#gcsINs*S$Zv{-ec znENEMbHMO$ZK@sJilRTOrx)NqvukF6V?T%f<`y}}1K<`B3G+(9x;AsOTNnM|h26N3 zQW23L7ghY?)x)=GoZ|Of_gX=2jug3<)W#?P<)du}g@_zaVDiE4Ax)Gp{TGKG&lI&> zwEFzaWQ`{GrORc;ZR1w~L9}h(eka5X4@0iQY6aNz+DrsrtgNGce%5UzBJGS@T_{GU zCAynqjX>dPq8N6@qVf7V#Y6%a(dUSf*=#~F_P%GR^14PB+2af%hD|WuDFtR_!<{!V zd!;gWTLGROOg5W9)B=6e-D`)%y)R$m#i=u>puf8M9RKbTVN;;bHLFFQJnT@0Y*<(a zM-YKdYn+oFi5?kg$|u63dtnU);$o_yjQeKB)~tRtXtu=w_Sznz7Nzo&PLM{l^+3qj z(7L*b7S+7N5k&60GgoQpj;x*Y{u3Af&ICkp_3b|hhgnF~IeT@K_x*wM@S$I4^FzO6ZH zHkz5(T_Vm}?$)G?%ZBbe;>~cT2UR9qeXbJFG`^7+C3h=C_jt0r>3s`sdAO~Pyy|2( zDaQ^<)>c*o#ViktuDt_P_dMM{jtul>1|P@l`3vsDFW;Im;#J&~BS(54HHCvy^!LAH zw-kM#LN$1)e>7l49M$+)T%yy`^YXt=Ue{jGFy(hGWZ}EHc=FQ}SPm=_rL`AB% zY^rX#^(^`)kzPPjW7g$gp%D~}2=$)#QH~!H4VbFA^~W;0%jqjt^kxgk4ZRgON7ut< z>eOc7J>nt94a%Hm^}?}|&VrGWi!5hwNOXXcqVBVKqj&XU(Vh6+592c7UvTXf$A(n_M?hfBMaAHIXQXslUw+ zzkToHRZfR@c2l%zw)DRfEzk({{2!qmry{y9ccxJnJ>Pi4@d9J z5KMUsZa%OLnDW0A^70)cv;O{Pe%I&!`yb7}&!pG?7jJEzPtfUY`w3-(dMkT%Cl6OP z4AiDATZaA&r^+LS{SpXGztgw1$V|Mv_|A9i>(o7v=1wa!|D@S`KJ(;y_z3cOKL6Ar zIZkjDc{wl}*e?B`p?^ZGFdO{WvvSIc5z`NLPhi&rB5b>ysie8GIj55dFm2JHf5)*s z0Es99lL_wdO%~`246<?_1|YcwlD937prdZ|1KrN9PF@g0P|V{jZNQ_0P%) z2C`(OY=TLW-~*_}v|67M;0W#HLdz6kkZvu~sb<0R+8CD*1#I+k0z z?C4m2zZl0qF+7V<%h|kIlZ5gT#345?FHWEz*^UK0xD*HG|M(=3eBv7Zx$w-N)KBbHf`u3_b`?p(n5i1VvvQz}Sm~)Jxhi7N(h&rhC@!HWMx2~Ji9eGB)IX2f4$EXcNR~6=1SD`0H!Q?>@+SyootQy{ zbb1FI8$FU3rVd7Mv`|h~b~p|!F&~Jkx+~Qh&qDYgTPuy+3qb?cAIDWxlkD1Psp-X; zg(axvL>d_g5kb`?mcccNVPE)9^dTE5+bj_xBc}0;e{+g!gmG*0Q2p#DEnG+Ew1{v< z(PQV*utfl(Fwm5vD_CnJ%RK)$o|G=r+SX!(`aj=4_@iDQ9HPttE{N_c*wVUx zkKF3YudiirUSd`la%s69FM}3Oo2!hQ3I8(wx-PI`fpk|B%`>d{K^83|dKAh1{Y2Rz zT2Zc~`!RlwT(oGj46YdUlkgP8$R;jml1q=$ssf2P(nMS)r66G>siNih=hPWbM&b3%JI z-}(E$9cGM_wB$c}eTGq$Fr%Z58{7ROy%g`6G>!hW#yGeoc%gVxo^ylx3?15r$4*1i zZ=IMhMu#ty30st(it%L6^6bR27U#@qmnu_~T+Juq8Su)3B${>F>HAnQ?j4MXk7U1n z_%vD~D&3XnRE2PNqScg3!|6oxP#;SK122}c+>}co#Cs1MSV{8^D>@^w!|bx~QJ~K= zaI}*J%&OYQzokpyms4Wc4$)=diz*Os3f zIAP^d%K*A0DQy`Md6E_Th?fpD-+A4I`!EIPjILZ%*(ZUXhtleSywKev2;~cvVqjAf zp;1yOAEpExbm7QM$w7}lH7NBpyIp(Tlnu}^DLL#DA79^DQF%p2Rawkx9b4kcdC7fx zF`3n#(8qiHBM^jArDBn|E*z0F&vfe2W%Jipz0Q`sNbGyJ+Iqeyuh4PeWj3Kk(R8A-+SH#9Qpt)(`BaM2i51$V!-7qofd z#9OR!#%{xu*E6xNK5$IATS1z%FmBW5x+gOKnXcE;)`Xj_i*mXf7#P^C-qqB!8;rA? zRjpyeTLjFD`gm;{4r~U%1XadGMe?Y8o1&A3XfK zIxG7qNq8r_rVqyrAYqxvOhir2rx1#flv551^1ghL_(uH@G2$d2Lsa|t_+WJl)LwUC zP@vJiTemiQC0A}v%X;W?k|SQ?I`VR1ZC#yo*NT?)gRjin{?!RKxaN(cF7L9JuC7Jh z2l&6srydw2b0aOwy1Kb#k#cLV657T#5oYT)o%p>tSQlZZx=IgW2aUW-``>{%HhO`d zLBS=+kfmQyy|SqKG$<1QO#)9?g~?)<4bf;Rlvo3WbE53uO<#aJhfS*7dVXbPr5G#W z}Xx$-^x&a_jPVe4cM39Y@fL zUA=Mep;Xnr0jCe?98FjWwJEcakuR_~I}%3^Ee7xwky?dKSQyFD6z-{_qCqYy?b`Lq zmvsE|eRfUnyY2TO;4tl+K^VQ$S-WR^ra3nvB8b5lLEUi0<~`=VZaU6mge(-91Fv65 zo#!Ogb9yd1w$37(=Q#8k7ekPz8ZRl>53EP%g zSy{dMcvZ~Xr0a@9!NFjG0t8X0&p+YfrZ7<(G)Q{To&gU?!^b7Z(LR&b#J1w$_>CVW zY`I)Kl%M%?B9w;OLi>x~-$iHN@9)zXdMx#U!-gxLuHf6}i+8{ZU}twTe989hI($l+ zs}w9Kh~TCIYH|q`&`6JbYYp6H@XkpCDbL)@%h|>1#ICYA4b08wZrwTty0xdlyUP)H zq1~+%duXGV>VO@Vq#2)`JEhHC8|({r_fK1pvoP&Wb$T3UFpPLS1V0%Z!NI|6vP{yF zi;n~?aG{nUD8Z6jRj7xsROkgBVJJ?<*AH$SS>ntC4`pR0a^?Xy=E6ye(=^2nCC21H zBQdOl1-r@4?udt5acb0`fuUZAPefbG&4%v2Ok>=0vp?ry+wbx>sj)IjSLbP*4-5Nh zK7i9Bwzpp3)`T6WX|lPWso$<;ds$b$^ML1rAlJ%&>h$eK{Bf?3GcHx#$U+N`>Q1h$zm_!WTC~0C z-#_~F?;mwy36aP2V2xXczuUUzTKg$(oHvbqS2Pd%yBv0I)Yz-y_V3C0=l{7;wS&U{ zU;jUknu5{C5D(F2BFm9kaC!mh$CC1dGmG1ct9C`00x1CITR+KSzfu~XReddb@#%z> znxf|4R`ty>^l0z;45-Sj6|ZMVeI;865F{#o;C)vj@(*xueJEZz@lfFmMa;4P>%%!=^YZjlXxqmkSflCb?jH)s+ z7{(1&_Y#_R;LxEDGZOBVjwfJ-;Vl8!C92E^|YxTyBuCQf&k=+a1<|ad>w$9DmF?Z?Q@AF0& z1_eA$jO|en=D1bAe#a@*0q68|rZ>LqGVnuFXYB=f5l`-wI*)W5ZP-t>VSY*rU;CgU zSLLHOYO>!BZ=(ORp^GA&@QrQ5(}PPV=eGTQZcL8iaApvz!vDkCTZUD+uI<8@IF&F^ zO2GsqB^4>fB&Cr?kPej;P*D+46hS%#=}zfVk!~ae2>}7=Zh`N7=34Lj?PLGm^H@LD zoXTK~XWVgJXI)C0W29bzfj9N^B0tp;(|&RPA?1U3c(^Fh18a{9P@})VPKAvS<0~?t zFe1vJr;y;HQai)K0(rw;DC5l2r;u1)j~+G%F+qU2DxhM+)r5>Y0V2f+I?HH-Lfi2Q z)Yk8-?~*YH2SUAf&SCEEhld0In9#SOS(`;ydH|TYG}9njL;{zjqM{;cLaRtv4)Cm4 zI5~&0$sR%1d1QzXg#sh~2vGY1#QB)Ou7au*`Ws@zS@aMwPY`M(B0Y-`AEFL<=-|+d zzL}Mk^@7bGuhu{lX%x|fc$LUZz6OuAw1e~0MB2m^tO1|$i@lrsK5m6WU>60(s5s?w|FID_xbJYkB%BWc|A-DvG zD;`M&&WvruGjVlwMfE|z6;O3wK`(@Fw7jDOL+8rChdqSqFnW;R2wguh=!G=^6CycK zXzzR*AQYouk{K$7Bkt`np(8l0Q5RzG;s_JHgPo~xs|t{(FY>F=@?})m z&(Dt--U3H*RZR^s=cpwE`af?~oyUh^T7a?ydIDn2`UV7atUn6k1%85Vkf2%g%5n6A1;A&xG|9XgClMj zKS{_wE*Xf7c4jf7aUd{tFy`8i7nOZh&zZHeyJQ-3#j9)8K z1O>DwXFfQ;FRK6EWTKpRtNYTIwD|`PGa|`hkK|%Le4P3G)0k%kL**8D3}ddC|2B}zP~5zgNJe1Gi-9Rr9n-;B+evWW` zm{9KZN0ek_e01|1uYGU}>H(rai;Fl>VkQ^Te$w9e0^*t@qK?t!gKOw4uw^4ek5CVx zk@A&1qw{#t&v!WSZ8_%#*W<%DwY83O{2i)Bwb^A!szE z$~+139Nepc%_{MoKU%qu-&282ifUL7GsGV{I&O!eoe@6iIwBhg!(l;E?k@Ay)Y8ge zyncY^f3yI(xum+F!Li^JZ{My01d!*rnE0gxbYVIEg#`b`iVqf9RMf3Y-}V@5ofv@% zrZ5YK0}$J2H=`hF;yeZkNw{qguKpflAia<%r0%PV5}J&b=LITYEW5L8Y-MnVz^dmm zM74Jp(n?6c95*9S5ZeI`saTvkC$7A_&39GiR#F=-cn@i&C`dR-2v~(!FZld~O&H0A ztKh(+C!gR5C;mHXw+G0f!6zeB(Pj(h{vji~i>n%X`rb$LGFc9Pe*Jo?$!P@b0C6Os z`E0$Jh5{b|MHzxR0R|I;mjMQ0TeCfd%NKVGWa3=Wv9UZhf8<8DHIK8xjhzCWblZ61f`Kl; zUSc#AL>=f`Zs*_GqOs>xaT<;&$RPxMb{`jL|}cOG3Juuv-ulqY6)K?08NEf(l3pzDexs!j(m;7Z(rSUmce ziTz)c%L>__0LNmAY%yU0@H%dwEUXMDH*j8)5}ZzrZHQ-L$&r`w8HGV?>#@X?Jy57r1!(om9MLSM8^>X=nG45Fc; zkLjM`E0drc$R=urJPB_I1kK_1)9T=!WHmc;&*p$E?-;H~f z$A9OP%bS+*QtLmEafCkn9mxe7r-LIU^YT5Svi;9;-#fk3?OQr=Rs_vCF_8yYj%?_K zFIZ}C84fA6cUJo_Tf=Y;wIZQ~C8U%!H8tiAJV*LG9vhm3hGL{4Lazwc1~uIb#$D6O zWQl(~$MPKyL3p9*3NaxNt`}Vki+W(B9;s$yqU(ra8wNN^5E-uGUy#JVCD9ken)WsP z%EG_M4_!INxI=$T@Cqb|YkEgq=QsuEH?m=EYX;yx3rb^qIzm@4UbY^oL_aX_3H8&& z&)i#UhyS8#%a(mn3?zfd;74`vmcjyCp`WOF(ak{r*E})Pf%i*H$i}jbcFTh&0CzG1 zm@s2P&%mG@pZ^C=btqnAbV{FK4{C(!5a$4H_aj`C5ef+p5fKVR6}A!=B6b&lpD~TG_;xM=GSWlV zF%jg|Vn_HzK?RWz$%jOq1!|hz1_MwPk`S^&2VjN^R0Ewf52pJ-VL;`IFN>`7XGdh6;r&w3R zJdT%#BVjdepMki}5@CIC>(EK+#TZk0Q>V6WI%*U5_wGr zUe6O)+O>6_fYP;>oq*>6P~HO8h2L3LQ{zsUT9F)pem!~tCf9`ae-9`OHP1Z%HX&2U zxCw<3PxR|4=aqiaH?ibI=sChyh5?rmCIk04Y{ZzYLojDV|1 z2<|NM5y?FFwZ8e5+iDyvEax2SlNwr_^1D)#+Nz6xDmvbYTG&!)*klpk47`yVS>!eM zuJhj#WUQhHCsv@Qkj9aTyYkPb9gviULm8&}<02nm=f^#w>H+KZH z6gD0B7Tm>wUmMb&OFg92qT`eOwoQvRZzuU{w3YdDWfZ8235cY)6tHmbcO zM9v6aToRx^kr@ai202QEZth}zl0x{ZJ)CDTcOIhi5{J8_UPp1^&}#^>!2wf7%ni#- zqbxungNY7Y-W#;*DYz1JH}jE&k5-RuV=lGXINFWsDFIEAUjPyF5%22neE8P4`g$4D zM@ef^Pn2UDB*4S-1ii(XC9d9EQBe`GjSn*uf8D{k=mUe-QzGXQr+gLxhYzNCfb{mb zcw0&7w8*P5>}h{rYq)TTZVXh@OYx7Fn0(s0%-S`JQ)SxbsKJ6F%GB``|EI(unLd(b z4Tu?2$_pF`Wo=9<}wxPk_(HgbD0X!U$*6oBEjfg-3 zHV`%YrF)f?gCm9Cf&{|OGa@2d?(!r!_W1HC0zI$Db<+QV6D|f-@Bl-h@~F*4mmOZn0(DSUnud*V0aX?b7 zZFXc437eZ(N!G0K>)ME#O!lmdD;oZ)QQMk)=aQVesZFhYn*4`OERSAw_$pwoxr0S; zaforBnJ;>!6U)=v+pWws|FQ_?ORlNMv0isr-`W1I_sDcfNx9#2Smzk`Mv?Q;S%{3#%iyKR1N-7R6Qjmv$lp_Y_kBq-*EzKj)qg3${W4i zf@2tiK#1AlZ--tM9W&F$z`eKmj#?pO^YK_Hqkk`#$yRCemmc1`3qtYh>K`*F)HF0Y zs&469YbwixXJ=CJ!%LXoiD6zuJ%X!3FTF@x%Rl#bcbkgcqJxeI zXJBHI?U{gDvsRhMJ=s}VJ`CpLRwZ@ZN4VJUa8iu=`TGz2`BQ}*YBs55knmF2QYx>o zP-?y;_>BhM9}$GLFxK`4BS~PYB{Yw%7tBpIa!)@Q&s9}kM33KJ=7xrn3?&%~7J1VP z&F3$++NC4~Gl}Rsm`NOKV!YC3D_!hc-a_08@&^itD9V^&(qMw(YQ`%dJMB!+ND zJ1ccQ9bfuknjE%c%=da&jyhRt)5)xi9Z59{qkJ#>#`##&Rh~+36=!y>y)=mAO!Q~o z=(9b0Yxp)Db5d+sx5y=1 zbuhp|G6p4CS%m5p;96C+wLXqoi<3W9*Ul)5J;*&fT$1biq#+uIZ{`F2p{BzS0b#^Y zHDY*(7>}PnLr@2#gY1JV?=~1cOd_For%|y(lG-n6bBK&pDPsh*z^k_f*~G!OyPXcM=k8tNc(PhVG;c4?mml(3Oz* z2NfD_OSQGSuC8EUjp&)k9c}&u3EhBs?NU@TAr*oX8~|>MrnB-WV`@E0E)cR(lw)gi zabkTQYFtDZ6-Mf9>>rkeDv(DFqufnsOD~g*L z${vv3G-UkafR*JsUB3Nz}8Qa4KF?6}rObHb+@5BxYATT=VbxYaRUYDJ7RHp@vK z>)?(}UAFR0Nl%7Ao@<9Dp06odHGFH`-p>Esg!)H7%S25;WA#K& zhTQ_trvrRL#&38tEZRdd_tBFyZOf5yij)=E5zO<+z+rdasjTZ$eID+SYsH6iQPH;e z?nSw};}?qjBLU3%9hr&YZOpO)IR)Q1t%sCXtY7W^k1PT?07(3-0G4?P##dlGWoS|1 z<%_BfM+=6=fERPKi3Scl7;$Og`_~0=LUs5sl+4f6Q<%iW!f_M?b~{5|3V*RKVp-6Q z(vZa^BmwyF3J9pgm2*jwS+(+lGcj*gP|;>WSNP~KJ4)JQr?+(0rZyspTK z-G(3mZEXes9Z`{y&*2`E>Jyu*It6_R1b6j7Frg|m1csx)B?_evFmDrh8j+Vz7;6Ch z^xkDq*TV-S1pcs^XJW?#0|^v%$mDx*4>Ud@$H1HOhV_dGfg--rb4SaMqL&AA0mI;L zbPsW#K2agm2Br^InM*o4AcTqc4=DB(`pzcQWP~6bcpEbKA9xH|n41%0f^l9LVa^5- z2{tfrQslRWn%XQ%0|K##x?%*c%$efmdGrtj%|v8GzD)-Nu9z0f}YwZG*mN+ zVyus36D{*B)QE^qFwW7YC!n6a`}S2=Rp}xC0=~CVju#&CTnmJr4=IjB{=wE-M=22m zk6r@+A3<*re~7k@Ut@cocMqn)(KWOEC{c@%q2599;NGrqIQr>B5j29vpUT z#eN0p>0U&P+T(P7`;xjgPqex718=zIKw4(Pz*As1S%W^lZqrzwlR_D3h2^Lji9`*o z8GgrOiBD2^D!U(aw3Shc5qt|yWI`^4FgCDjG5K}uuQl-f4SpeIyvpQ5%g5dkv#CK> zDpT$@2AvYL2Shvz!Oe5mbZ0kcYNhT&F!T{F?K<3o(d!XidOBKj+v+N*q-snT&9rT8 zivxJ$PTTRj+vz``FLeJJNGabV{5D&|T5~tY&LDn+k@GZKx5C0+MK0bn4{?ive-IQD z1n+Vm;;h}6YL%$$H(w2pwA3LxN^}Fb!h8-LRb_0)q-Dk#sL}}Xf)Gcd^8zSckkl_s zXr5Mo`&=42mk4ri4mT8i-Hu!gqCyt^i6LuU0PjNG=}tc(o)TsoFE zuk?`O0Yq;IwmU=cIZX5EIrF!baWo;9v)@lu`@J?|Z{&_Iazf2S3DGZsC=qEN`0zO9 zW89Ra<}ATu60|J96COl0if$|@B4FyU2}2rSy#q&%7^ZVbHC6*ikJb(V5i1}kcwXIt ziya0*%*b(v_$e6o08RYSrTn|q2O}~`A=kQ@LRm^MUdZf2_8I0G%3iy+3oW6yBMXgG zVS@DnMlQ7=zZ8|+_Rm=Lz%hMt9>C-V-VdwN#ipUY%}gH`((6~R&>=x?w*urjCcvFf zsrZ~qFM2}<(acY9_+4Qt+^bJ(gd2df5q-7PhtHXL zi&$wyTrMOSGrL&GPy zHCeA_Q5a)XdZXF#G{d11=8?+En2)99aiy`9}Cxo{^`yc+a|cJgJgX%F#8LElqsT#}+Ge^VUJ< zZLY5NeQjF%clI|%C~b;3cY0Uf1<0-OSDXxm4(LrXCg0SWwzk75DrWMYqCwIxeS8#M z$lkPAqoO5bf3i`D>-$in5FY=_mVn418j+&xv&Bs1YieqpT8p~LlpEi+vdP2HLzICx zHx>=lXQkvAnwom2kige9vj_6oD~5)K#dOjsDJg)mcK=*jTs*_Yl~(acb`kyc4MW4& z^7(j359JgT^yDb;ojwFnLwnvbwAuzz8+gLU`R>-X3YxY=|AWq_J@aFDRI+JsU7Oic zXyj+H%!vZTvaiG=F3u>$#B#zB4Ao@^hy3Qbn6wduINpJdo4Bmeqtp9l<7`A^oxJ`# zZV|=RBt~tG#c~p5oJioiSw(&aX_T;nWjX39{>;bcyH=Z)HRvFDRzKS@a=nR1YU*MU znNNVKv^i*Bv3^jcuvn}T#2V-EG4+8|qxYJQU&e}70Gb~_X*9U_cn#~$t(^+ZHw()z zFqZ^8h(P>1NG4FIi?8LczAZ{r=-_8&t4?{+u$xU4m?kFE0hCwma1wk|m7Fna?vZnx zHmv3mZTmK!{2lR9?@1RvTh|=nDcKVhd0_{e(|J}&55_`@^i2CJsw%auhuU+h%qN=9 zj#E>U3m90)Ko4nZ(Zr+rA+d6~OEl?Ls5#l9hZgw*MwV93KigOc$tG)gW|+;1DTA@5ot^*dD9vE+XZwyK2_-AFFY%gb||Y;4uM>>-h$6#U3oV7d5g>|B$A zvQFrox*p+Z zYnt74H<-RqJ8;ZHPD3QErh7SdE_Y4ia#B+79}~;}oFp~1we%a$vP3<6DjEV}7I%#4 zl-8G@kZN02Uo=_{PM9vbXPdG$Jdm5eLgGiRjR3`1C=E2B>}|I;pHeq8>ES8&4!k41 z_~;?jfkc)H#1&~7$@$}n37Mu7!KzwX(?jf$-y^Ff&y{vNSCh0}ernMYZa+4^C+pt{;L%iKLuN+P4P(Wffrq1 z#O@Z$Rj+;I_{#nWYDhGF7&ZE9cN%RN*|Nrtl)z(*6 zi}7|IocEP%E0!hRY}X1m4K0TZh=q6!wvD`Rg~d@_p2<24(iAE|2#*zkMBbg;p%` z6vbZp24=%n2YP{ap6isR;0wE2ilfA2G$$l#*~L>5yp}$;E8QP5eAj7FJg0PFqj1;k zdeGgdzI8`IZtF+(AA(xnygG1fW%9Sj?pn{yp6#QZ31=rY9KW+Rg>^sYk*sYaxvinW zi!3hyanRtJdTppBmSiMyr%`((INfk&plf~kOeA>Fm}}&^BgA5ntLzMyZwpFPa2I z>puK=6IWqxB$uXZSFV|oQCHeW`$n4S)a><~FC*j!YF`vGlW*J9ITpNB8f*#i`MMTn z7ZO91#Wq)>%87Y%=ptxRHS@pa95eYJEkFy)D6}C)@T-uQOpbw-U%_kA+Dl zTIl?DkP!oK2xTAStu22{@~Ke?KF!YNhgf0x;#rR=u%}2u2!zasoCNhb!Q7zAhPB$< z>oHiMIbx0(^i#>ntfcnK@%EoSL{d4BQUx@BwjyD|QX#Yk>7jp~PsquXBO zET*ta(Q!O3;ER$;k5lqr=+>mVAV|lh7+dq@2Wi)V?mCY@SDaf5w~0Kb>B>F4{!S|^ z{(VDF+kqRT8a}mTQ^)ECqpm!#RUx_0A?Q{s(aF?dVtjeiQkteSqhbUPG_7+}`H`?%n?OklK(a|r!REw@+%uaGLQqS-F`uq&@j6&>t z9V*Q!vkEF)#ztuAn6zbpIYZLvGt#6aN<)mN0z?v%XMH{~U}WvvVj>-zK(|GK>Cf1N z`SFpVx~gp!uS)%^opcz)qY^&1RljS>DcN0X@(DHi*~==WvirE>?rl3~qQqh_l)W5n zZR2(5PsfWF<1aqSwbDm_+f_-`YkSFQF^OI*J{S1m1v>!SLR8Mad zYhADzW7_If%Cb*E;A_N9lN@T*H?fvf{w!vE=cxP=n+%W4cDEQGrLwwCvFFait@gTy z$@J4H7r&KmE^-l`JUnlVG!48~`F;PG`i(`pHOJ;3FPAJNX#MhG)OLXx7hM2Ke^q`t9*W1fMVOumAnWA)pSQ|c4p4jCzR_e`?k2( z@?$cjjWq?(+$#*~xW0eBpvwHOMWI^=MaOVPCBv1Ea_|>4zzDdC?hzq-0+7_hpOA@J zD}+9VNTz^fhlqVZBMJQ@4=?X3cq5o5j38yZYiQU4H4HKOnvn1zs{!#M)SKOfzo#>C(o0n6?xw0|VTQ#g5YJB*P44T$() zhzZU)7J(*>fxZh0I3xV}fQ7(%pO2{9M0DR|f*u8fR`_-srp zpOb)yg^Mwq3??69s3ifn<5h9w+obzkfvRXfh-0*B~zVQm46oF z3rN>?`UEM~m9~dpo$vejX;-=A=!smNj!U~2DXv@U%NWXXr`3_&AocZ6SbaFjNM17d zGN-KZXVAXav}6;VN1cQO^LH6MT1dHbFS9OGZ||F05C1bybG~T5rSJN1UbNF_#$kMz z;qEZip+ioJYwUvAPk*F`R4&xJyMIct&5Rk{I%dku=@!~ z3zRX@lOc(`2y-K5f)-T7#>UP8(~#)+QSdF9;nS2-r+-c}*WOr> z;m74a{ zdh*YHkU83{qU05(Q4=S2^!#l@Jl+>O9quoxP;7P58u9g+Mk$$8)t!w^*3=s3S+Wxl zUNt`dwWCE9Zgm73R&2?5z#1%__YH5Z^FE3_)WA^q#OZz>S8( z0uoyaY!0Z%u~}nLGTdN%Ood54I3K|3l>zTS(mycYv+V5OFl!M8K8!(>!ITMTI*B`# zklL&xhMogPGN_A*+7wDOIDDC4_=U0&mKg*aJ@WXpwz2}9l&6~;DU{K`Fb5|lh`WVI zJwgOTcI-5c2c)eZg@S>EI2>>ULjTPlB!+Vfvu=o?z_8MQpVI>yfjWbzX(7A3ijRTc zc0EC9U~-Z$q9Mb_(6hJzhb@twg1QFm@-_VF(2y&n3ShdKJdp-Z4oU%;dKa9Q*nz|# zR-hjNa-Wu^N}p^H)7Sy76NY7Ye}d27Yrxu$kB=t?3_+i2g{)1Vk((doi0DpSal}XE z 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 R+X6V?3j$V@Dwi+{`hNjCHf;a^ diff --git a/tests/__tests__/__image_snapshots__/index-test-ts-should-open-file-correctly-1-snap.png b/tests/__tests__/__image_snapshots__/index-test-ts-should-open-file-correctly-1-snap.png index 31f80155225865228d8d203a6db2ce9c2b3db361..4180dc80481d56170b5a899af76689a587ae3215 100644 GIT binary patch literal 164108 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

KfU{30C=&s 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 VvgdjaJOBgusVHd3SIb(2{SOgd;C282 literal 162914 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

+
+
+

${escape(localize('welcomePage.vscode', "Visual Studio Code"))}

+

+ One second to read GitHub code with VS Code +

+
+
+ +
+
+

Authentication

+
+
+
+
+
+
+
+

${escape(localize('welcomePage.learn', "Learn"))}

+
+
+
+
+
+
+
+
+
+`; + +export class GitHub1sWelcomePage { + private container?: HTMLElement; + + constructor( + @IConfigurationService private readonly configurationService: IConfigurationService, + @IProductService private readonly productService: IProductService, + @ICommandService private readonly commandService: ICommandService, + ) { } + + public render() { + if (this.container) { + return this.container; + } + const content = marked(buildTemplate()); + this.container = document.createElement('div'); + this.container.classList.add('github1sWelcomePage'); + this.container.innerHTML = content; + this.onReady(this.container); + + return this.container; + } + + onReady(container: HTMLElement) { + const enabled = this.configurationService.getValue(configurationKey) === 'welcomePage'; + const showOnStartup = container.querySelector('#showOnStartup'); + if (enabled) { + showOnStartup.setAttribute('checked', 'checked'); + } + showOnStartup.addEventListener('click', e => { + this.configurationService.updateValue(configurationKey, showOnStartup.checked ? 'welcomePage' : 'newUntitledFile'); + }); + + const prodName = container.querySelector('.welcomePage .title .caption') as HTMLElement; + if (prodName) { + prodName.textContent = this.productService.nameLong; + } + + const gitHubTokenStatus = this.getGitHubTokenStatus(); + gitHubTokenStatus.then(tokenStatus => this.doUpdateGitHubTokenStatus(container, tokenStatus)); + this.registerGitHub1sListeners(container); + } + + registerGitHub1sListeners(container: HTMLElement) { + container.querySelector('.refresh-button')?.addEventListener('click', () => this.refreshGitHubTokenStatus(container)); + container.querySelector('.create-new-token')?.addEventListener('click', () => window?.open('https://github.com/settings/tokens/new?scopes=repo&description=GitHub1s')); + container.querySelector('.update-oauth-token')?.addEventListener('click', () => this.commandService.executeCommand('github1s.authorizing-github-with-overlay').then(() => this.refreshGitHubTokenStatus(container))); + container.querySelector('.clear-oauth-token')?.addEventListener('click', () => this.commandService.executeCommand('github1s.clear-token').then(() => this.refreshGitHubTokenStatus(container))); + container.querySelector('.show-all-commands')?.addEventListener('click', () => this.commandService.executeCommand('workbench.action.showCommands')); + container.querySelector('.show-interface-overview')?.addEventListener('click', () => this.commandService.executeCommand('workbench.action.showInterfaceOverview')); + } + + updateElementText(element: HTMLElement, text: string | number, type?: 'SUCCESS' | 'WARNING' | 'ERROR') { + if (!element) { + return; + } + element.innerText = `${text}`; + element.classList.remove('text-warning', 'text-error', 'text-success'); + if (type === 'SUCCESS') { + element.classList.add('text-success'); + } else if (type === 'WARNING') { + element.classList.add('text-warning'); + } else if (type === 'ERROR') { + element.classList.add('text-error'); + } + } + + + getGitHubTokenStatus() { + return this.commandService.executeCommand('github1s.validate-token', '', true); + } + + refreshGitHubTokenStatus(container: HTMLElement) { + const statusElement = container.querySelector('.rate-limit-status'); + this.updateElementText(statusElement, ''); + this.getGitHubTokenStatus().then(tokenStatus => { + this.doUpdateGitHubTokenStatus(container, tokenStatus); + }); + } + + doUpdateGitHubTokenStatus(container: HTMLElement, tokenStatus?: any) { + const statusElement = container.querySelector('.rate-limit-status'); + const limitElement = container.querySelector('.x-rate-limit-limit'); + const remainingElement = container.querySelector('.x-rate-limit-remaining'); + const resetElement = container.querySelector('.x-rate-limit-reset'); + const timerElement = container.querySelector('.rate-limit-reset-seconds'); + + if (!tokenStatus) { + this.updateElementText(statusElement, 'Unknown', 'WARNING'); + this.updateElementText(limitElement, 'Unknown', 'WARNING'); + this.updateElementText(remainingElement, 'Unknown', 'WARNING'); + this.updateElementText(resetElement, 'Unknown'); + this.updateElementText(timerElement, 'Unknown', 'WARNING'); + return; + } + + const textType = (value: number) => { + if (value <= 0) { + return 'ERROR'; + } + if (value > 99) { + return 'SUCCESS'; + } + return 'WARNING'; + }; + this.updateElementText(limitElement, tokenStatus.limit, textType(+tokenStatus.limit)); + this.updateElementText(remainingElement, tokenStatus.remaining, textType(+tokenStatus.remaining)); + this.updateElementText(resetElement, tokenStatus.reset); + this.updateElementText(timerElement, Math.max(tokenStatus.reset - Math.ceil(Date.now() / 1000), 0)); + + if (!tokenStatus.token) { + this.updateElementText(statusElement, 'Unauthorized', 'WARNING'); + return; + } + if (tokenStatus.valid) { + this.updateElementText(statusElement, 'Authorized', 'SUCCESS'); + return; + } + this.updateElementText(statusElement, 'Invalid Token', 'ERROR'); + } +}; diff --git a/vscode-web-github1s/src/vs/loader.js b/vscode-web-github1s/src/vs/loader.js index 10ee09e8d..27a9344b7 100644 --- a/vscode-web-github1s/src/vs/loader.js +++ b/vscode-web-github1s/src/vs/loader.js @@ -627,7 +627,7 @@ var AMDLoader; } /** * Attach load / error listeners to a script element and remove them when either one has fired. - * Implemented for browssers supporting HTML5 standard 'load' and 'error' events. + * Implemented for browsers supporting HTML5 standard 'load' and 'error' events. */ BrowserScriptLoader.prototype.attachListeners = function (script, callback, errorback) { var unbind = function () { @@ -766,6 +766,9 @@ var AMDLoader; require.resolve = function resolve(request, options) { return Module._resolveFilename(request, mod, false, options); }; + require.resolve.paths = function paths(request) { + return Module._resolveLookupPaths(request, mod); + }; require.main = process.mainModule; require.extensions = Module._extensions; require.cache = Module._cache; @@ -1245,7 +1248,7 @@ var AMDLoader; this._knownModules2 = []; this._inverseDependencies2 = []; this._inversePluginDependencies2 = new Map(); - this._currentAnnonymousDefineCall = null; + this._currentAnonymousDefineCall = null; this._recorder = null; this._buildInfoPath = []; this._buildInfoDefineStack = []; @@ -1327,18 +1330,18 @@ var AMDLoader; }; /** * Defines an anonymous module (without an id). Its name will be resolved as we receive a callback from the scriptLoader. - * @param dependecies @see defineModule + * @param dependencies @see defineModule * @param callback @see defineModule */ ModuleManager.prototype.enqueueDefineAnonymousModule = function (dependencies, callback) { - if (this._currentAnnonymousDefineCall !== null) { + if (this._currentAnonymousDefineCall !== null) { throw new Error('Can only have one anonymous define call per script file'); } var stack = null; if (this._config.isBuild()) { stack = new Error('StackLocation').stack || null; } - this._currentAnnonymousDefineCall = { + this._currentAnonymousDefineCall = { stack: stack, dependencies: dependencies, callback: callback @@ -1445,9 +1448,9 @@ var AMDLoader; * This means its code is available and has been executed. */ ModuleManager.prototype._onLoad = function (moduleId) { - if (this._currentAnnonymousDefineCall !== null) { - var defineCall = this._currentAnnonymousDefineCall; - this._currentAnnonymousDefineCall = null; + if (this._currentAnonymousDefineCall !== null) { + var defineCall = this._currentAnonymousDefineCall; + this._currentAnonymousDefineCall = null; // Hit an anonymous define call this.defineModule(this._moduleIdProvider.getStrModuleId(moduleId), defineCall.dependencies, defineCall.callback, null, defineCall.stack); } diff --git a/vscode-web-github1s/src/vs/platform/product/common/product.ts b/vscode-web-github1s/src/vs/platform/product/common/product.ts index 0ee9d5b40..ddf315879 100644 --- a/vscode-web-github1s/src/vs/platform/product/common/product.ts +++ b/vscode-web-github1s/src/vs/platform/product/common/product.ts @@ -4,15 +4,52 @@ *--------------------------------------------------------------------------------------------*/ import { FileAccess } from 'vs/base/common/network'; -import { isWeb } from 'vs/base/common/platform'; +import { globals } from 'vs/base/common/platform'; import { env } from 'vs/base/common/process'; +import { IProductConfiguration } from 'vs/base/common/product'; import { dirname, joinPath } from 'vs/base/common/resources'; -import { IProductConfiguration } from 'vs/platform/product/common/productService'; +import { ISandboxConfiguration } from 'vs/base/parts/sandbox/common/sandboxTypes'; let product: IProductConfiguration; -// Web or Native (sandbox TODO@sandbox need to add all properties of product.json) -if (isWeb || typeof require === 'undefined' || typeof require.__$__nodeRequire !== 'function') { +// Native sandbox environment +if (typeof globals.vscode !== 'undefined' && typeof globals.vscode.context !== 'undefined') { + const configuration: ISandboxConfiguration | undefined = globals.vscode.context.configuration(); + if (configuration) { + product = configuration.product; + } else { + throw new Error('Sandbox: unable to resolve product configuration from preload script.'); + } +} + +// Native node.js environment +else if (typeof require?.__$__nodeRequire === 'function') { + + // Obtain values from product.json and package.json + const rootPath = dirname(FileAccess.asFileUri('', require)); + + product = require.__$__nodeRequire(joinPath(rootPath, 'product.json').fsPath); + const pkg = require.__$__nodeRequire(joinPath(rootPath, 'package.json').fsPath) as { version: string; }; + + // Running out of sources + if (env['VSCODE_DEV']) { + Object.assign(product, { + nameShort: `${product.nameShort} Dev`, + nameLong: `${product.nameLong} Dev`, + dataFolderName: `${product.dataFolderName}-dev` + }); + } + + Object.assign(product, { + version: pkg.version + }); +} + +// Web environment or unknown +else { + // below codes are changed by github1s + const currentOrigin = window.location.origin; + // above codes are changed by github1s // Built time configuration (do NOT modify) product = { /*BUILD->INSERT_PRODUCT_CONFIGURATION*/ } as IProductConfiguration; @@ -20,11 +57,11 @@ if (isWeb || typeof require === 'undefined' || typeof require.__$__nodeRequire ! // Running out of sources if (Object.keys(product).length === 0) { Object.assign(product, { - version: '1.55.0-dev', + version: '1.60.0-dev', // below codes are changed by github1s nameShort: 'GitHub1s', nameLong: 'GitHub1s', - // below codes are changed by github1s + // above codes are changed by github1s applicationName: 'code-oss', dataFolderName: '.vscode-oss', urlProtocol: 'code-oss', @@ -34,44 +71,31 @@ if (isWeb || typeof require === 'undefined' || typeof require.__$__nodeRequire ! extensionAllowedProposedApi: [ 'ms-vscode.vscode-js-profile-flame', 'ms-vscode.vscode-js-profile-table', - 'ms-vscode.github-browser', 'ms-vscode.remotehub', - 'ms-vscode.remotehub-insiders' + 'ms-vscode.remotehub-insiders', + 'GitHub.remotehub', + 'GitHub.remotehub-insiders' ], // below codes are changed by github1s extensionsGallery: { serviceUrl: 'https://marketplace.visualstudio.com/_apis/public/gallery', cacheUrl: 'https://vscode.blob.core.windows.net/gallery/index', itemUrl: 'https://marketplace.visualstudio.com/items', + resourceUrlTemplate: `${currentOrigin}/api/vscode-unpkg/{publisher}/{name}/{version}/{path}`, controlUrl: 'https://az764295.vo.msecnd.net/extensions/marketplace.json', - recommendationsUrl: 'https://az764295.vo.msecnd.net/extensions/workspaceRecommendations.json.gz', - } - // below codes are changed by github1s - }); - } -} - -// Native (non-sandboxed) -else { - - // Obtain values from product.json and package.json - const rootPath = dirname(FileAccess.asFileUri('', require)); - - product = require.__$__nodeRequire(joinPath(rootPath, 'product.json').fsPath); - const pkg = require.__$__nodeRequire(joinPath(rootPath, 'package.json').fsPath) as { version: string; }; - - // Running out of sources - if (env['VSCODE_DEV']) { - Object.assign(product, { - nameShort: `${product.nameShort} Dev`, - nameLong: `${product.nameLong} Dev`, - dataFolderName: `${product.dataFolderName}-dev` + recommendationsUrl: 'https://az764295.vo.msecnd.net/extensions/workspaceRecommendations.json.gz' + }, + linkProtectionTrustedDomains: [ + '*.github.com', + '*.microsoft.com', + '*.github1s.com', + '*.vercel.com', + '*.sourcegraph.com', + '*.gitpod.io', + ] + // above codes are changed by github1s }); } - - Object.assign(product, { - version: pkg.version - }); } export default product; diff --git a/vscode-web-github1s/src/vs/platform/telemetry/common/telemetryService.ts b/vscode-web-github1s/src/vs/platform/telemetry/common/telemetryService.ts index 52a8eaa87..b8e7c83cb 100644 --- a/vscode-web-github1s/src/vs/platform/telemetry/common/telemetryService.ts +++ b/vscode-web-github1s/src/vs/platform/telemetry/common/telemetryService.ts @@ -3,18 +3,18 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import product from 'vs/platform/product/common/product'; -import { localize } from 'vs/nls'; -import { escapeRegExpCharacters } from 'vs/base/common/strings'; -import { ITelemetryService, ITelemetryInfo, ITelemetryData } from 'vs/platform/telemetry/common/telemetry'; -import { ITelemetryAppender } from 'vs/platform/telemetry/common/telemetryUtils'; -import { optional } from 'vs/platform/instantiation/common/instantiation'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { IConfigurationRegistry, Extensions } from 'vs/platform/configuration/common/configurationRegistry'; import { DisposableStore } from 'vs/base/common/lifecycle'; import { cloneAndChange, mixin } from 'vs/base/common/objects'; +import { escapeRegExpCharacters } from 'vs/base/common/strings'; +import { localize } from 'vs/nls'; +import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; +import { ConfigurationScope, Extensions, IConfigurationRegistry } from 'vs/platform/configuration/common/configurationRegistry'; +import { optional } from 'vs/platform/instantiation/common/instantiation'; +import product from 'vs/platform/product/common/product'; import { Registry } from 'vs/platform/registry/common/platform'; -import { ClassifiedEvent, StrictPropertyCheck, GDPRClassification } from 'vs/platform/telemetry/common/gdprTypings'; +import { ClassifiedEvent, GDPRClassification, StrictPropertyCheck } from 'vs/platform/telemetry/common/gdprTypings'; +import { ITelemetryData, ITelemetryInfo, ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; +import { ITelemetryAppender } from 'vs/platform/telemetry/common/telemetryUtils'; export interface ITelemetryServiceConfig { appender: ITelemetryAppender; @@ -220,13 +220,15 @@ Registry.as(Extensions.Configuration).registerConfigurat 'type': 'boolean', 'markdownDescription': !product.privacyStatementUrl ? - localize('telemetry.enableTelemetry', "Enable usage data and errors to be sent to a Microsoft online service.") : - localize('telemetry.enableTelemetryMd', "Enable usage data and errors to be sent to a Microsoft online service. Read our privacy statement [here]({0}).", product.privacyStatementUrl), + localize('telemetry.enableTelemetry', "Enable diagnostic data to be collected. This helps us to better understand how {0} is performing and where improvements need to be made.", product.nameLong) : + localize('telemetry.enableTelemetryMd', "Enable diagnostic data to be collected. This helps us to better understand how {0} is performing and where improvements need to be made. [Read more]({1}) about what we collect and our privacy statement.", product.nameLong, product.privacyStatementUrl), // below codes are changed by github1s // disable telemetry by default https://github.com/conwnet/github1s/issues/196 'default': false, // above codes are changed by github1s - 'tags': ['usesOnlineServices'] + 'restricted': true, + 'scope': ConfigurationScope.APPLICATION, + 'tags': ['usesOnlineServices', 'telemetry'] } } }); diff --git a/vscode-web-github1s/src/vs/workbench/api/worker/extHostExtensionService.ts b/vscode-web-github1s/src/vs/workbench/api/worker/extHostExtensionService.ts index c0c706364..391f037e3 100644 --- a/vscode-web-github1s/src/vs/workbench/api/worker/extHostExtensionService.ts +++ b/vscode-web-github1s/src/vs/workbench/api/worker/extHostExtensionService.ts @@ -12,6 +12,7 @@ import { ExtensionIdentifier, IExtensionDescription } from 'vs/platform/extensio import { ExtensionRuntime } from 'vs/workbench/api/common/extHostTypes'; import { timeout } from 'vs/base/common/async'; import { MainContext, MainThreadConsoleShape } from 'vs/workbench/api/common/extHost.protocol'; +import { FileAccess } from 'vs/base/common/network'; namespace TrustedFunction { @@ -73,7 +74,7 @@ export class ExtHostExtensionService extends AbstractExtHostExtensionService { protected async _beforeAlmostReadyToRunExtensions(): Promise { const mainThreadConsole = this._extHostContext.getProxy(MainContext.MainThreadConsole); - wrapConsoleMethods(mainThreadConsole); + wrapConsoleMethods(mainThreadConsole, this._initData.environment.isExtensionDevelopmentDebug); // initialize API and register actors const apiFactory = this._instaService.invokeFunction(createApiFactoryAndRegisterActors); @@ -94,7 +95,7 @@ export class ExtHostExtensionService extends AbstractExtHostExtensionService { if (extensionId) { performance.mark(`code/extHost/willFetchExtensionCode/${extensionId.value}`); } - const response = await fetch(module.toString(true)); + const response = await fetch(FileAccess.asBrowserUri(module).toString(true)); if (extensionId) { performance.mark(`code/extHost/didFetchExtensionCode/${extensionId.value}`); } @@ -155,7 +156,7 @@ export class ExtHostExtensionService extends AbstractExtHostExtensionService { } async $setRemoteEnvironment(_env: { [key: string]: string | null }): Promise { - throw new Error('Not supported'); + return; } private async _waitForDebuggerAttachment(waitTimeout = 5000) { @@ -176,15 +177,19 @@ function ensureSuffix(path: string, suffix: string): string { } // copied from bootstrap-fork.js -function wrapConsoleMethods(service: MainThreadConsoleShape) { +function wrapConsoleMethods(service: MainThreadConsoleShape, callToNative: boolean) { wrap('info', 'log'); wrap('log', 'log'); wrap('warn', 'warn'); wrap('error', 'error'); function wrap(method: 'error' | 'warn' | 'info' | 'log', severity: 'error' | 'warn' | 'log') { + const original = console[method]; console[method] = function () { service.$logExtensionHostMessage({ type: '__$console', severity, arguments: safeToArray(arguments) }); + if (callToNative) { + original.apply(console, arguments as any); + } }; } diff --git a/vscode-web-github1s/src/vs/workbench/browser/parts/activitybar/activitybarActions.ts b/vscode-web-github1s/src/vs/workbench/browser/parts/activitybar/activitybarActions.ts index 50285f582..4487974fd 100644 --- a/vscode-web-github1s/src/vs/workbench/browser/parts/activitybar/activitybarActions.ts +++ b/vscode-web-github1s/src/vs/workbench/browser/parts/activitybar/activitybarActions.ts @@ -16,7 +16,7 @@ import { IContextMenuService } from 'vs/platform/contextview/browser/contextView import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; import { activeContrastBorder, focusBorder } from 'vs/platform/theme/common/colorRegistry'; import { IColorTheme, IThemeService, registerThemingParticipant } from 'vs/platform/theme/common/themeService'; -import { ActivityAction, ActivityActionViewItem, ICompositeBar, ICompositeBarColors, ToggleCompositePinnedAction } from 'vs/workbench/browser/parts/compositeBarActions'; +import { ActivityAction, ActivityActionViewItem, IActivityHoverOptions, ICompositeBar, ICompositeBarColors, ToggleCompositePinnedAction } from 'vs/workbench/browser/parts/compositeBarActions'; import { CATEGORIES } from 'vs/workbench/common/actions'; import { IActivity } from 'vs/workbench/common/activity'; import { ACTIVITY_BAR_FOREGROUND, ACTIVITY_BAR_ACTIVE_BORDER, ACTIVITY_BAR_ACTIVE_FOCUS_BORDER, ACTIVITY_BAR_ACTIVE_BACKGROUND } from 'vs/workbench/common/theme'; @@ -35,6 +35,8 @@ import { AnchorAlignment, AnchorAxisAlignment } from 'vs/base/browser/ui/context import { getTitleBarStyle } from 'vs/platform/windows/common/windows'; import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; import { IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage'; +import { IHoverService } from 'vs/workbench/services/hover/browser/hover'; +import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; export class ViewContainerActivityAction extends ActivityAction { @@ -56,7 +58,7 @@ export class ViewContainerActivityAction extends ActivityAction { this.activity = activity; } - async run(event: unknown): Promise { + override async run(event: any | { preserveFocus: boolean }): Promise { if (event instanceof MouseEvent && event.button === 2) { return; // do not run on right click } @@ -72,11 +74,12 @@ export class ViewContainerActivityAction extends ActivityAction { const activeViewlet = this.viewletService.getActiveViewlet(); const focusBehavior = this.configurationService.getValue('workbench.activityBar.iconClickBehavior'); + const focus = (event && 'preserveFocus' in event) ? !event.preserveFocus : true; if (sideBarVisible && activeViewlet?.getId() === this.activity.id) { switch (focusBehavior) { case 'focus': this.logAction('refocus'); - this.viewletService.openViewlet(this.activity.id, true); + this.viewletService.openViewlet(this.activity.id, focus); break; case 'toggle': default: @@ -90,7 +93,7 @@ export class ViewContainerActivityAction extends ActivityAction { } this.logAction('show'); - await this.viewletService.openViewlet(this.activity.id, true); + await this.viewletService.openViewlet(this.activity.id, focus); return this.activate(); } @@ -111,17 +114,20 @@ class MenuActivityActionViewItem extends ActivityActionViewItem { action: ActivityAction, private contextMenuActionsProvider: () => IAction[], colors: (theme: IColorTheme) => ICompositeBarColors, + hoverOptions: IActivityHoverOptions, @IThemeService themeService: IThemeService, + @IHoverService hoverService: IHoverService, @IMenuService protected readonly menuService: IMenuService, @IContextMenuService protected readonly contextMenuService: IContextMenuService, @IContextKeyService protected readonly contextKeyService: IContextKeyService, - @IConfigurationService protected readonly configurationService: IConfigurationService, - @IWorkbenchEnvironmentService protected readonly environmentService: IWorkbenchEnvironmentService + @IConfigurationService configurationService: IConfigurationService, + @IWorkbenchEnvironmentService protected readonly environmentService: IWorkbenchEnvironmentService, + @IKeybindingService keybindingService: IKeybindingService, ) { - super(action, { draggable: false, colors, icon: true, hasPopup: true }, themeService); + super(action, { draggable: false, colors, icon: true, hasPopup: true, hoverOptions }, themeService, hoverService, configurationService, keybindingService); } - render(container: HTMLElement): void { + override render(container: HTMLElement): void { super.render(container); // Context menus are triggered on mouse down so that an item can be picked @@ -184,25 +190,23 @@ class MenuActivityActionViewItem extends ActivityActionViewItem { // below codes are changed by github1s // Add a button to the top of menubar which is used to jump back to GitHub -export class HomeActivityActionViewItem extends MenuActivityActionViewItem { +export class HomeActivityActionViewItem extends ActivityActionViewItem { static readonly HOME_BAR_VISIBILITY_PREFERENCE = 'workbench.activity.showHomeIndicator'; constructor( action: ActivityAction, - contextMenuActionsProvider: () => IAction[], colors: (theme: IColorTheme) => ICompositeBarColors, + hoverOptions: IActivityHoverOptions, @IThemeService themeService: IThemeService, - @IMenuService menuService: IMenuService, - @IContextMenuService contextMenuService: IContextMenuService, - @IContextKeyService contextKeyService: IContextKeyService, + @IHoverService hoverService: IHoverService, @IConfigurationService configurationService: IConfigurationService, - @IWorkbenchEnvironmentService environmentService: IWorkbenchEnvironmentService, + @IKeybindingService keybindingService: IKeybindingService, ) { - super(MenuId.MenubarHomeMenu, action, contextMenuActionsProvider, colors, themeService, menuService, contextMenuService, contextKeyService, configurationService, environmentService); + super(action, { draggable: false, colors, icon: true, hasPopup: true, hoverOptions }, themeService, hoverService, configurationService, keybindingService); } - render(container: HTMLElement): void { + override render(container: HTMLElement): void { super.render(container); this._register(addDisposableListener(this.container, EventType.CLICK, (e: MouseEvent) => { @@ -240,7 +244,9 @@ export class AccountsActivityActionViewItem extends MenuActivityActionViewItem { action: ActivityAction, contextMenuActionsProvider: () => IAction[], colors: (theme: IColorTheme) => ICompositeBarColors, + activityHoverOptions: IActivityHoverOptions, @IThemeService themeService: IThemeService, + @IHoverService hoverService: IHoverService, @IContextMenuService contextMenuService: IContextMenuService, @IMenuService menuService: IMenuService, @IContextKeyService contextKeyService: IContextKeyService, @@ -248,12 +254,13 @@ export class AccountsActivityActionViewItem extends MenuActivityActionViewItem { @IWorkbenchEnvironmentService environmentService: IWorkbenchEnvironmentService, @IProductService private readonly productService: IProductService, @IConfigurationService configurationService: IConfigurationService, - @IStorageService private readonly storageService: IStorageService + @IStorageService private readonly storageService: IStorageService, + @IKeybindingService keybindingService: IKeybindingService, ) { - super(MenuId.AccountsContext, action, contextMenuActionsProvider, colors, themeService, menuService, contextMenuService, contextKeyService, configurationService, environmentService); + super(MenuId.AccountsContext, action, contextMenuActionsProvider, colors, activityHoverOptions, themeService, hoverService, menuService, contextMenuService, contextKeyService, configurationService, environmentService, keybindingService); } - protected async resolveMainMenuActions(accountsMenu: IMenu, disposables: DisposableStore): Promise { + protected override async resolveMainMenuActions(accountsMenu: IMenu, disposables: DisposableStore): Promise { await super.resolveMainMenuActions(accountsMenu, disposables); const otherCommands = accountsMenu.getActions(); @@ -329,7 +336,7 @@ export class AccountsActivityActionViewItem extends MenuActivityActionViewItem { return menus; } - protected async resolveContextMenuActions(disposables: DisposableStore): Promise { + protected override async resolveContextMenuActions(disposables: DisposableStore): Promise { const actions = await super.resolveContextMenuActions(disposables); actions.unshift(...[ @@ -347,14 +354,17 @@ export class GlobalActivityActionViewItem extends MenuActivityActionViewItem { action: ActivityAction, contextMenuActionsProvider: () => IAction[], colors: (theme: IColorTheme) => ICompositeBarColors, + activityHoverOptions: IActivityHoverOptions, @IThemeService themeService: IThemeService, + @IHoverService hoverService: IHoverService, @IMenuService menuService: IMenuService, @IContextMenuService contextMenuService: IContextMenuService, @IContextKeyService contextKeyService: IContextKeyService, @IConfigurationService configurationService: IConfigurationService, - @IWorkbenchEnvironmentService environmentService: IWorkbenchEnvironmentService + @IWorkbenchEnvironmentService environmentService: IWorkbenchEnvironmentService, + @IKeybindingService keybindingService: IKeybindingService, ) { - super(MenuId.GlobalActivity, action, contextMenuActionsProvider, colors, themeService, menuService, contextMenuService, contextKeyService, configurationService, environmentService); + super(MenuId.GlobalActivity, action, contextMenuActionsProvider, colors, activityHoverOptions, themeService, hoverService, menuService, contextMenuService, contextKeyService, configurationService, environmentService, keybindingService); } } diff --git a/vscode-web-github1s/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts b/vscode-web-github1s/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts index 5a92d971f..4f8e42ac8 100644 --- a/vscode-web-github1s/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts +++ b/vscode-web-github1s/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts @@ -12,7 +12,7 @@ import { Part } from 'vs/workbench/browser/part'; import { GlobalActivityActionViewItem, ViewContainerActivityAction, PlaceHolderToggleCompositePinnedAction, PlaceHolderViewContainerActivityAction, AccountsActivityActionViewItem, HomeActivityActionViewItem } from 'vs/workbench/browser/parts/activitybar/activitybarActions'; // above codes are changed by github1s import { IBadge, NumberBadge } from 'vs/workbench/services/activity/common/activity'; -import { IWorkbenchLayoutService, Parts } from 'vs/workbench/services/layout/browser/layoutService'; +import { IWorkbenchLayoutService, Parts, Position } from 'vs/workbench/services/layout/browser/layoutService'; import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; import { IDisposable, toDisposable, DisposableStore, Disposable } from 'vs/base/common/lifecycle'; import { ToggleActivityBarVisibilityAction, ToggleSidebarPositionAction } from 'vs/workbench/browser/actions/layoutActions'; @@ -24,7 +24,7 @@ import { Dimension, createCSSRule, asCSSUrl, addDisposableListener, EventType } import { IStorageService, StorageScope, IStorageValueChangeEvent, StorageTarget } from 'vs/platform/storage/common/storage'; import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions'; import { URI, UriComponents } from 'vs/base/common/uri'; -import { ToggleCompositePinnedAction, ICompositeBarColors, ActivityAction, ICompositeActivity } from 'vs/workbench/browser/parts/compositeBarActions'; +import { ToggleCompositePinnedAction, ICompositeBarColors, ActivityAction, ICompositeActivity, IActivityHoverOptions } from 'vs/workbench/browser/parts/compositeBarActions'; import { IViewDescriptorService, ViewContainer, IViewContainerModel, ViewContainerLocation, IViewsService, getEnabledViewContainerContextKey } from 'vs/workbench/common/views'; import { IContextKeyService, ContextKeyExpr, IContextKey } from 'vs/platform/contextkey/common/contextkey'; import { assertIsDefined, isString } from 'vs/base/common/types'; @@ -45,6 +45,7 @@ import { Action2, registerAction2 } from 'vs/platform/actions/common/actions'; import { CATEGORIES } from 'vs/workbench/common/actions'; import { registerIcon } from 'vs/platform/theme/common/iconRegistry'; import { StringSHA1 } from 'vs/base/common/hash'; +import { HoverPosition } from 'vs/base/browser/ui/hover/hoverWidget'; interface IPlaceholderViewContainer { readonly id: string; @@ -163,6 +164,7 @@ export class ActivitybarPart extends Part implements IActivityBarService { return this._register(this.instantiationService.createInstance(CompositeBar, cachedItems, { icon: true, orientation: ActionsOrientation.VERTICAL, + activityHoverOptions: this.getActivityHoverOptions(), preventLoopNavigation: true, openComposite: compositeId => this.viewsService.openViewContainer(compositeId, true), getActivityAction: compositeId => this.getCompositeActions(compositeId).activityAction, @@ -174,16 +176,7 @@ export class ActivitybarPart extends Part implements IActivityBarService { // Menu const menuBarVisibility = getMenuBarVisibility(this.configurationService); if (menuBarVisibility === 'compact' || menuBarVisibility === 'hidden' || menuBarVisibility === 'toggle') { - topActions.push({ - id: 'toggleMenuVisibility', - label: localize('menu', "Menu"), - class: undefined, - tooltip: localize('menu', "Menu"), - checked: menuBarVisibility === 'compact', - enabled: true, - run: async () => this.configurationService.updateValue('window.menuBarVisibility', menuBarVisibility === 'compact' ? 'toggle' : 'compact'), - dispose: () => { } - }); + topActions.push(toAction({ id: 'toggleMenuVisibility', label: localize('menu', "Menu"), checked: menuBarVisibility === 'compact', run: () => this.configurationService.updateValue('window.menuBarVisibility', menuBarVisibility === 'compact' ? 'toggle' : 'compact') })); } if (topActions.length) { @@ -192,26 +185,14 @@ export class ActivitybarPart extends Part implements IActivityBarService { // Accounts actions.push(new Separator()); - actions.push({ - id: 'toggleAccountsVisibility', - label: localize('accounts', "Accounts"), - class: undefined, - tooltip: localize('accounts', "Accounts"), - checked: this.accountsVisibilityPreference, - enabled: true, - run: async () => this.accountsVisibilityPreference = !this.accountsVisibilityPreference, - dispose: () => { } - }); - + actions.push(toAction({ id: 'toggleAccountsVisibility', label: localize('accounts', "Accounts"), checked: this.accountsVisibilityPreference, run: () => this.accountsVisibilityPreference = !this.accountsVisibilityPreference })); actions.push(new Separator()); // Toggle Sidebar - actions.push(this.instantiationService.createInstance(ToggleSidebarPositionAction, ToggleSidebarPositionAction.ID, ToggleSidebarPositionAction.getLabel(this.layoutService))); + actions.push(toAction({ id: ToggleSidebarPositionAction.ID, label: ToggleSidebarPositionAction.getLabel(this.layoutService), run: () => this.instantiationService.invokeFunction(accessor => new ToggleSidebarPositionAction().run(accessor)) })); // Toggle Activity Bar - // below codes are changed by github1s typo - actions.push(toAction({ id: ToggleActivityBarVisibilityAction.ID, label: localize('hideActivityBar', "Hide Activity Bar"), run: async () => this.instantiationService.invokeFunction(accessor => new ToggleActivityBarVisibilityAction().run(accessor)) })); - // above codes are changed by github1s + actions.push(toAction({ id: ToggleActivityBarVisibilityAction.ID, label: localize('hideActivitBar', "Hide Activity Bar"), run: () => this.instantiationService.invokeFunction(accessor => new ToggleActivityBarVisibilityAction().run(accessor)) })); }, getContextMenuActionsForComposite: compositeId => this.getContextMenuActionsForComposite(compositeId), getDefaultCompositeId: () => this.viewDescriptorService.getDefaultViewContainer(this.location)!.id, @@ -227,6 +208,12 @@ export class ActivitybarPart extends Part implements IActivityBarService { })); } + private getActivityHoverOptions(): IActivityHoverOptions { + return { + position: () => this.layoutService.getSideBarPosition() === Position.LEFT ? HoverPosition.RIGHT : HoverPosition.LEFT, + }; + } + private getContextMenuActionsForComposite(compositeId: string): IAction[] { const actions: IAction[] = []; @@ -278,7 +265,7 @@ export class ActivitybarPart extends Part implements IActivityBarService { })); } - private onDidChangeViewContainers(added: ReadonlyArray<{ container: ViewContainer, location: ViewContainerLocation; }>, removed: ReadonlyArray<{ container: ViewContainer, location: ViewContainerLocation; }>) { + private onDidChangeViewContainers(added: readonly { container: ViewContainer, location: ViewContainerLocation; }[], removed: readonly { container: ViewContainer, location: ViewContainerLocation; }[]) { removed.filter(({ location }) => location === ViewContainerLocation.Sidebar).forEach(({ container }) => this.onDidDeregisterViewContainer(container)); this.onDidRegisterViewContainers(added.filter(({ location }) => location === ViewContainerLocation.Sidebar).map(({ container }) => container)); } @@ -462,7 +449,7 @@ export class ActivitybarPart extends Part implements IActivityBarService { this.registerKeyboardNavigationListeners(); } - createContentArea(parent: HTMLElement): HTMLElement { + override createContentArea(parent: HTMLElement): HTMLElement { this.element = parent; this.content = document.createElement('div'); @@ -545,7 +532,7 @@ export class ActivitybarPart extends Part implements IActivityBarService { this.homeBarContainer.classList.add('home-bar'); this.homeBar = this._register(new ActionBar(this.homeBarContainer, { - actionViewItemProvider: action => this.instantiationService.createInstance(HomeActivityActionViewItem, action as ActivityAction, () => this.compositeBar.getContextMenuActions(), (theme: IColorTheme) => this.getActivitybarItemColors(theme)), + actionViewItemProvider: action => this.instantiationService.createInstance(HomeActivityActionViewItem, action as ActivityAction, (theme: IColorTheme) => this.getActivitybarItemColors(theme), this.getActivityHoverOptions()), orientation: ActionsOrientation.VERTICAL, ariaLabel: localize('home', "Open on GitHub"), animated: false, @@ -571,11 +558,11 @@ export class ActivitybarPart extends Part implements IActivityBarService { this.globalActivityActionBar = this._register(new ActionBar(container, { actionViewItemProvider: action => { if (action.id === 'workbench.actions.manage') { - return this.instantiationService.createInstance(GlobalActivityActionViewItem, action as ActivityAction, () => this.compositeBar.getContextMenuActions(), (theme: IColorTheme) => this.getActivitybarItemColors(theme)); + return this.instantiationService.createInstance(GlobalActivityActionViewItem, action as ActivityAction, () => this.compositeBar.getContextMenuActions(), (theme: IColorTheme) => this.getActivitybarItemColors(theme), this.getActivityHoverOptions()); } if (action.id === 'workbench.actions.accounts') { - return this.instantiationService.createInstance(AccountsActivityActionViewItem, action as ActivityAction, () => this.compositeBar.getContextMenuActions(), (theme: IColorTheme) => this.getActivitybarItemColors(theme)); + return this.instantiationService.createInstance(AccountsActivityActionViewItem, action as ActivityAction, () => this.compositeBar.getContextMenuActions(), (theme: IColorTheme) => this.getActivitybarItemColors(theme), this.getActivityHoverOptions()); } throw new Error(`No view item for action '${action.id}'`); @@ -647,7 +634,7 @@ export class ActivitybarPart extends Part implements IActivityBarService { return compositeActions; } - private onDidRegisterViewContainers(viewContainers: ReadonlyArray): void { + private onDidRegisterViewContainers(viewContainers: readonly ViewContainer[]): void { for (const viewContainer of viewContainers) { this.addComposite(viewContainer); @@ -814,7 +801,7 @@ export class ActivitybarPart extends Part implements IActivityBarService { this.compositeBar.focus(); } - updateStyles(): void { + override updateStyles(): void { super.updateStyles(); const container = assertIsDefined(this.getContainer()); @@ -839,7 +826,7 @@ export class ActivitybarPart extends Part implements IActivityBarService { }; } - layout(width: number, height: number): void { + override layout(width: number, height: number): void { if (!this.layoutService.isVisible(Parts.ACTIVITYBAR_PART)) { return; } @@ -863,7 +850,7 @@ export class ActivitybarPart extends Part implements IActivityBarService { return viewContainer && this.viewDescriptorService.getViewContainerLocation(viewContainer) === this.location ? viewContainer : undefined; } - private getViewContainers(): ReadonlyArray { + private getViewContainers(): readonly ViewContainer[] { return this.viewDescriptorService.getViewContainersByLocation(this.location); } @@ -1017,14 +1004,12 @@ export class ActivitybarPart extends Part implements IActivityBarService { return this._placeholderViewContainersValue; } - // below codes are changed by github1s typo - private set placeholderViewContainersValue(placeholderViewContainsValue: string) { - if (this.placeholderViewContainersValue !== placeholderViewContainsValue) { - this._placeholderViewContainersValue = placeholderViewContainsValue; - this.setStoredPlaceholderViewContainersValue(placeholderViewContainsValue); + private set placeholderViewContainersValue(placeholderViewContainesValue: string) { + if (this.placeholderViewContainersValue !== placeholderViewContainesValue) { + this._placeholderViewContainersValue = placeholderViewContainesValue; + this.setStoredPlaceholderViewContainersValue(placeholderViewContainesValue); } } - // above codes are changed by github1s private getStoredPlaceholderViewContainersValue(): string { return this.storageService.get(ActivitybarPart.PLACEHOLDER_VIEW_CONTAINERS, StorageScope.GLOBAL, '[]'); diff --git a/vscode-web-github1s/src/vs/workbench/browser/parts/titlebar/titlebarPart.ts b/vscode-web-github1s/src/vs/workbench/browser/parts/titlebar/titlebarPart.ts index bf60c532b..488135954 100644 --- a/vscode-web-github1s/src/vs/workbench/browser/parts/titlebar/titlebarPart.ts +++ b/vscode-web-github1s/src/vs/workbench/browser/parts/titlebar/titlebarPart.ts @@ -42,6 +42,7 @@ import { IProductService } from 'vs/platform/product/common/productService'; import { Schemas } from 'vs/base/common/network'; import { withNullAsUndefined } from 'vs/base/common/types'; import { Codicon, iconRegistry } from 'vs/base/common/codicons'; +import { getVirtualWorkspaceLocation } from 'vs/platform/remote/common/remoteHosts'; export class TitlebarPart extends Part implements ITitleService { @@ -165,6 +166,7 @@ export class TitlebarPart extends Part implements ITitleService { if (activeEditor) { this.activeEditorListeners.add(activeEditor.onDidChangeDirty(() => this.titleUpdater.schedule())); this.activeEditorListeners.add(activeEditor.onDidChangeLabel(() => this.titleUpdater.schedule())); + this.activeEditorListeners.add(activeEditor.onDidChangeCapabilities(() => this.titleUpdater.schedule())); } } @@ -278,6 +280,19 @@ export class TitlebarPart extends Part implements ITitleService { folder = withNullAsUndefined(this.contextService.getWorkspaceFolder(editorResource)); } + // Compute remote + // vscode-remtoe: use as is + // otherwise figure out if we have a virtual folder opened + let remoteName: string | undefined = undefined; + if (this.environmentService.remoteAuthority) { + remoteName = this.labelService.getHostLabel(Schemas.vscodeRemote, this.environmentService.remoteAuthority); + } else { + const virtualWorkspaceLocation = getVirtualWorkspaceLocation(workspace); + if (virtualWorkspaceLocation) { + remoteName = this.labelService.getHostLabel(virtualWorkspaceLocation.scheme, virtualWorkspaceLocation.authority); + } + } + // Variables const activeEditorShort = editor ? editor.getTitle(Verbosity.SHORT) : ''; const activeEditorMedium = editor ? editor.getTitle(Verbosity.MEDIUM) : activeEditorShort; @@ -291,10 +306,9 @@ export class TitlebarPart extends Part implements ITitleService { const folderPath = folder ? this.labelService.getUriLabel(folder.uri) : ''; const dirty = editor?.isDirty() && !editor.isSaving() ? TitlebarPart.TITLE_DIRTY : ''; const appName = this.productService.nameLong; - const remoteName = this.labelService.getHostLabel(Schemas.vscodeRemote, this.environmentService.remoteAuthority); const separator = this.configurationService.getValue('window.titleSeparator'); const titleTemplate = this.configurationService.getValue('window.title'); - // below codes are changed by github1s + // below codes are changed by github1s TEMP!! const [owner = 'conwnet', repo = 'github1s'] = URI.parse(window.location.href).path.split('/').filter(Boolean); // above codes are changed by github1s @@ -348,7 +362,7 @@ export class TitlebarPart extends Part implements ITitleService { this._register(this.customMenubar.onVisibilityChange(e => this.onMenubarVisibilityChanged(e))); } - createContentArea(parent: HTMLElement): HTMLElement { + override createContentArea(parent: HTMLElement): HTMLElement { this.element = parent; // App Icon (Native Windows/Linux and Web) @@ -420,7 +434,7 @@ export class TitlebarPart extends Part implements ITitleService { return this.element; } - updateStyles(): void { + override updateStyles(): void { super.updateStyles(); // Part container @@ -507,9 +521,9 @@ export class TitlebarPart extends Part implements ITitleService { if (getTitleBarStyle(this.configurationService) === 'custom') { // Only prevent zooming behavior on macOS or when the menubar is not visible if ((!isWeb && isMacintosh) || this.currentMenubarVisibility === 'hidden') { - this.title.style.zoom = `${1 / getZoomFactor()}`; + (this.title.style as any).zoom = `${1 / getZoomFactor()}`; } else { - this.title.style.zoom = ''; + (this.title.style as any).zoom = ''; } runAtThisOrScheduleAtNextAnimationFrame(() => this.adjustTitleMarginToCenter()); @@ -521,7 +535,7 @@ export class TitlebarPart extends Part implements ITitleService { } } - layout(width: number, height: number): void { + override layout(width: number, height: number): void { this.updateLayout(new Dimension(width, height)); super.layoutContents(width, height); diff --git a/vscode-web-github1s/src/vs/workbench/browser/web.main.ts b/vscode-web-github1s/src/vs/workbench/browser/web.main.ts index 624857b32..1bce19949 100644 --- a/vscode-web-github1s/src/vs/workbench/browser/web.main.ts +++ b/vscode-web-github1s/src/vs/workbench/browser/web.main.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { mark } from 'vs/base/common/performance'; -import { domContentLoaded, detectFullscreen, getCookieValue } from 'vs/base/browser/dom'; +import { domContentLoaded, detectFullscreen, getCookieValue, WebFileSystemAccess } from 'vs/base/browser/dom'; import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; import { ILogService, ConsoleLogger, MultiplexLogService, getLogLevel } from 'vs/platform/log/common/log'; import { ConsoleLogInAutomationLogger } from 'vs/platform/log/browser/log'; @@ -60,6 +60,11 @@ import { IUriIdentityService } from 'vs/workbench/services/uriIdentity/common/ur import { UriIdentityService } from 'vs/workbench/services/uriIdentity/common/uriIdentityService'; import { BrowserWindow } from 'vs/workbench/browser/window'; import { ITimerService } from 'vs/workbench/services/timer/browser/timerService'; +import { WorkspaceTrustEnablementService, WorkspaceTrustManagementService } from 'vs/workbench/services/workspaces/common/workspaceTrust'; +import { IWorkspaceTrustEnablementService, IWorkspaceTrustManagementService } from 'vs/platform/workspace/common/workspaceTrust'; +import { HTMLFileSystemProvider } from 'vs/platform/files/browser/htmlFileSystemProvider'; +import { IOpenerService } from 'vs/platform/opener/common/opener'; +import { safeStringify } from 'vs/base/common/objects'; class BrowserMain extends Disposable { @@ -79,10 +84,9 @@ class BrowserMain extends Disposable { } async open(): Promise { - const services = await this.initServices(); - await domContentLoaded(); - mark('code/willStartWorkbench'); + // Init services and wait for DOM to be ready in parallel + const [services] = await Promise.all([this.initServices(), domContentLoaded()]); // Create Workbench const workbench = new Workbench(this.domElement, services.serviceCollection, services.logService); @@ -97,23 +101,29 @@ class BrowserMain extends Disposable { this._register(instantiationService.createInstance(BrowserWindow)); // Logging - services.logService.trace('workbench configuration', JSON.stringify(this.configuration)); + services.logService.trace('workbench configuration', safeStringify(this.configuration)); // Return API Facade return instantiationService.invokeFunction(accessor => { const commandService = accessor.get(ICommandService); const lifecycleService = accessor.get(ILifecycleService); const timerService = accessor.get(ITimerService); + const openerService = accessor.get(IOpenerService); + const productService = accessor.get(IProductService); return { commands: { executeCommand: (command, ...args) => commandService.executeCommand(command, ...args) }, env: { + uriScheme: productService.urlProtocol, async retrievePerformanceMarks() { await timerService.whenReady(); return timerService.getPerformanceMarks(); + }, + async openUri(uri: URI): Promise { + return openerService.open(uri, {}); } }, shutdown: () => lifecycleService.shutdown() @@ -130,7 +140,7 @@ class BrowserMain extends Disposable { } })); this._register(workbench.onWillShutdown(() => storageService.close())); - this._register(workbench.onShutdown(() => this.dispose())); + this._register(workbench.onDidShutdown(() => this.dispose())); } private async initServices(): Promise<{ serviceCollection: ServiceCollection, configurationService: IWorkbenchConfigurationService, logService: ILogService, storageService: BrowserStorageService }> { @@ -174,7 +184,7 @@ class BrowserMain extends Disposable { serviceCollection.set(IFileService, fileService); await this.registerFileSystemProviders(environmentService, fileService, remoteAgentService, logService, logsPath); - // IURIIdentityService + // URI Identity const uriIdentityService = new UriIdentityService(fileService); serviceCollection.set(IUriIdentityService, uriIdentityService); @@ -191,7 +201,7 @@ class BrowserMain extends Disposable { return service; }), - this.createStorageService(payload, environmentService, fileService, logService).then(service => { + this.createStorageService(payload, logService).then(service => { // Storage serviceCollection.set(IStorageService, service); @@ -200,6 +210,17 @@ class BrowserMain extends Disposable { }) ]); + // Workspace Trust Service + const workspaceTrustEnablementService = new WorkspaceTrustEnablementService(configurationService, environmentService); + serviceCollection.set(IWorkspaceTrustEnablementService, workspaceTrustEnablementService); + + const workspaceTrustManagementService = new WorkspaceTrustManagementService(configurationService, remoteAuthorityResolverService, storageService, uriIdentityService, environmentService, configurationService, workspaceTrustEnablementService); + serviceCollection.set(IWorkspaceTrustManagementService, workspaceTrustManagementService); + + // Update workspace trust so that configuration is updated accordingly + configurationService.updateWorkspaceTrust(workspaceTrustManagementService.isWorkspaceTrusted()); + this._register(workspaceTrustManagementService.onDidChangeTrust(() => configurationService.updateWorkspaceTrust(workspaceTrustManagementService.isWorkspaceTrusted()))); + // Request Service const requestService = new BrowserRequestService(remoteAgentService, configurationService, logService); serviceCollection.set(IRequestService, requestService); @@ -219,9 +240,7 @@ class BrowserMain extends Disposable { await userDataInitializationService.initializeRequiredResources(); // Important: Reload only local user configuration after initializing - // below codes are changed by github1s typo - // Reloading complete configuration blocks workbench until remote configuration is loaded. - // above codes are changed by github1s + // Reloading complete configuraiton blocks workbench until remote configuration is loaded. await configurationService.reloadLocalUserConfiguration(); mark('code/didInitRequiredUserData'); @@ -237,7 +256,7 @@ class BrowserMain extends Disposable { (async () => { let indexedDBLogProvider: IFileSystemProvider | null = null; try { - indexedDBLogProvider = await indexedDB.createFileSystemProvider(logsPath.scheme, INDEXEDDB_LOGS_OBJECT_STORE); + indexedDBLogProvider = await indexedDB.createFileSystemProvider(logsPath.scheme, INDEXEDDB_LOGS_OBJECT_STORE, false); } catch (error) { onUnexpectedError(error); } @@ -250,7 +269,7 @@ class BrowserMain extends Disposable { logService.logger = new MultiplexLogService(coalesce([ new ConsoleLogger(logService.getLevel()), - new FileLogger('window', environmentService.logFile, logService.getLevel(), fileService), + new FileLogger('window', environmentService.logFile, logService.getLevel(), false, fileService), // Extension development test CLI: forward everything to test runner environmentService.isExtensionDevelopment && !!environmentService.extensionTestsLocationURI ? new ConsoleLogInAutomationLogger(logService.getLevel()) : undefined ])); @@ -267,11 +286,20 @@ class BrowserMain extends Disposable { // User data let indexedDBUserDataProvider: IIndexedDBFileSystemProvider | null = null; try { - indexedDBUserDataProvider = await indexedDB.createFileSystemProvider(Schemas.userData, INDEXEDDB_USERDATA_OBJECT_STORE); + indexedDBUserDataProvider = await indexedDB.createFileSystemProvider(Schemas.userData, INDEXEDDB_USERDATA_OBJECT_STORE, true); } catch (error) { onUnexpectedError(error); } - fileService.registerProvider(Schemas.userData, indexedDBUserDataProvider || new InMemoryFileSystemProvider()); + + let userDataProvider: IFileSystemProvider | undefined; + if (indexedDBUserDataProvider) { + userDataProvider = indexedDBUserDataProvider; + } else { + logService.info('using in-memory user data provider'); + userDataProvider = new InMemoryFileSystemProvider(); + } + + fileService.registerProvider(Schemas.userData, userDataProvider); if (indexedDBUserDataProvider) { registerAction2(class ResetUserDataAction extends Action2 { @@ -289,22 +317,31 @@ class BrowserMain extends Disposable { async run(accessor: ServicesAccessor): Promise { const dialogService = accessor.get(IDialogService); const hostService = accessor.get(IHostService); + const storageService = accessor.get(IStorageService); const result = await dialogService.confirm({ message: localize('reset user data message', "Would you like to reset your data (settings, keybindings, extensions, snippets and UI State) and reload?") }); if (result.confirmed) { await indexedDBUserDataProvider?.reset(); + if (storageService instanceof BrowserStorageService) { + await storageService.clear(); + } } hostService.reload(); } }); } + + if (WebFileSystemAccess.supported(window)) { + fileService.registerProvider(Schemas.file, new HTMLFileSystemProvider()); + } + fileService.registerProvider(Schemas.tmp, new InMemoryFileSystemProvider()); } - private async createStorageService(payload: IWorkspaceInitializationPayload, environmentService: IWorkbenchEnvironmentService, fileService: IFileService, logService: ILogService): Promise { - const storageService = new BrowserStorageService(payload, environmentService, fileService); + private async createStorageService(payload: IWorkspaceInitializationPayload, logService: ILogService): Promise { + const storageService = new BrowserStorageService(payload, logService); try { await storageService.initialize(); diff --git a/vscode-web-github1s/src/vs/workbench/browser/workbench.contribution.ts b/vscode-web-github1s/src/vs/workbench/browser/workbench.contribution.ts index 8d60f334c..25a8eb81e 100644 --- a/vscode-web-github1s/src/vs/workbench/browser/workbench.contribution.ts +++ b/vscode-web-github1s/src/vs/workbench/browser/workbench.contribution.ts @@ -10,9 +10,10 @@ import { isMacintosh, isWindows, isLinux, isWeb, isNative } from 'vs/base/common import { workbenchConfigurationNodeBase } from 'vs/workbench/common/configuration'; import { isStandalone } from 'vs/base/browser/browser'; +const registry = Registry.as(ConfigurationExtensions.Configuration); + // Configuration (function registerConfiguration(): void { - const registry = Registry.as(ConfigurationExtensions.Configuration); // Workbench registry.registerConfiguration({ @@ -88,10 +89,16 @@ import { isStandalone } from 'vs/base/browser/browser'; }, 'workbench.editor.untitled.hint': { 'type': 'string', - 'enum': ['text', 'button', 'hidden', 'default'], - 'default': 'default', + 'enum': ['text', 'hidden'], + 'default': 'text', 'markdownDescription': localize({ comment: ['This is the description for a setting. Values surrounded by single quotes are not to be translated.'], key: 'untitledHint' }, "Controls if the untitled hint should be inline text in the editor or a floating button or hidden.") }, + 'workbench.editor.languageDetection': { + type: 'boolean', + default: true, + description: localize('workbench.editor.languageDetection', "Controls whether the language in a text editor is automatically detected unless the language has been explicitly set by the language picker. This can also be scoped by language so you can specify which languages you do not want to be switched off of. This is useful for languages like Markdown that often contain other languages that might trick language detection into thinking it's the embedded language and not Markdown."), + scope: ConfigurationScope.LANGUAGE_OVERRIDABLE + }, 'workbench.editor.tabCloseButton': { 'type': 'string', 'enum': ['left', 'right', 'off'], @@ -181,6 +188,19 @@ import { isStandalone } from 'vs/base/browser/browser'; 'description': localize('closeEmptyGroups', "Controls the behavior of empty editor groups when the last tab in the group is closed. When enabled, empty groups will automatically close. When disabled, empty groups will remain part of the grid."), 'default': true }, + 'workbench.editor.experimentalAutoLockGroups': { + 'type': 'object', + 'description': localize('workbench.editor.experimentalAutoLockGroups', "Experimental: If an editor matching one of the listed types is opened as the first in an editor group and more than one group is open, the group is automatically locked. Locked groups will only be used for opening editors when explicitly chosen by user gesture (e.g. drag and drop), but not by default. Consequently the active editor in a locked group is less likely to be replaced accidentally with a different editor."), + 'default': { + 'terminalEditor': true, + 'mainThreadWebview-markdown.preview': false, + 'default': false + }, + 'additionalProperties': { + 'type': 'boolean', + 'enum': [true, false] + }, + }, 'workbench.editor.revealIfOpen': { 'type': 'boolean', 'description': localize('revealIfOpen', "Controls whether an editor is revealed in any of the visible groups if opened. If disabled, an editor will prefer to open in the currently active editor group. If enabled, an already opened editor will be revealed instead of opened again in the currently active editor group. Note that there are some cases where this setting is ignored, e.g. when forcing an editor to open in a specific group or to the side of the currently active group."), @@ -193,10 +213,15 @@ import { isStandalone } from 'vs/base/browser/browser'; }, 'workbench.editor.restoreViewState': { 'type': 'boolean', - 'description': localize('restoreViewState', "Restores the last view state (e.g. scroll position) when re-opening textual editors after they have been closed."), + 'markdownDescription': localize('restoreViewState', "Restores the last editor view state (e.g. scroll position) when re-opening editors after they have been closed. Editor view state is stored per editor group and discarded when a group closes. Use the `#workbench.editor.sharedViewState#` setting to use the last known view state across all editor groups in case no previous view state was found for a editor group."), 'default': true, 'scope': ConfigurationScope.LANGUAGE_OVERRIDABLE }, + 'workbench.editor.sharedViewState': { + 'type': 'boolean', + 'description': localize('sharedViewState', "Preserves the most recent editor view state (e.g. scroll position) across all editor groups and restores that if no specific editor view state is found for the editor group."), + 'default': false + }, 'workbench.editor.centeredLayoutAutoResize': { 'type': 'boolean', 'default': true, diff --git a/vscode-web-github1s/src/vs/workbench/common/editor/resourceEditorInput.ts b/vscode-web-github1s/src/vs/workbench/common/editor/resourceEditorInput.ts new file mode 100644 index 000000000..33870509a --- /dev/null +++ b/vscode-web-github1s/src/vs/workbench/common/editor/resourceEditorInput.ts @@ -0,0 +1,199 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { localize } from 'vs/nls'; +import { Verbosity, IEditorInputWithPreferredResource, EditorInputCapabilities } from 'vs/workbench/common/editor'; +import { EditorInput } from 'vs/workbench/common/editor/editorInput'; +import { URI } from 'vs/base/common/uri'; +import { IFileService, FileSystemProviderCapabilities } from 'vs/platform/files/common/files'; +import { ILabelService } from 'vs/platform/label/common/label'; +import { dirname, isEqual } from 'vs/base/common/resources'; + +/** + * The base class for all editor inputs that open resources. + */ +export abstract class AbstractResourceEditorInput extends EditorInput implements IEditorInputWithPreferredResource { + + override get capabilities(): EditorInputCapabilities { + let capabilities = EditorInputCapabilities.None; + + if (this.fileService.canHandleResource(this.resource)) { + if (this.fileService.hasCapability(this.resource, FileSystemProviderCapabilities.Readonly)) { + capabilities |= EditorInputCapabilities.Readonly; + } + } else { + capabilities |= EditorInputCapabilities.Untitled; + } + + return capabilities; + } + + private _preferredResource: URI; + get preferredResource(): URI { return this._preferredResource; } + + constructor( + readonly resource: URI, + preferredResource: URI | undefined, + @ILabelService protected readonly labelService: ILabelService, + @IFileService protected readonly fileService: IFileService + ) { + super(); + + this._preferredResource = preferredResource || resource; + + this.registerListeners(); + } + + private registerListeners(): void { + + // Clear our labels on certain label related events + this._register(this.labelService.onDidChangeFormatters(e => this.onLabelEvent(e.scheme))); + this._register(this.fileService.onDidChangeFileSystemProviderRegistrations(e => this.onLabelEvent(e.scheme))); + this._register(this.fileService.onDidChangeFileSystemProviderCapabilities(e => this.onLabelEvent(e.scheme))); + } + + private onLabelEvent(scheme: string): void { + if (scheme === this._preferredResource.scheme) { + this.updateLabel(); + } + } + + private updateLabel(): void { + + // Clear any cached labels from before + this._name = undefined; + this._shortDescription = undefined; + this._mediumDescription = undefined; + this._longDescription = undefined; + this._shortTitle = undefined; + this._mediumTitle = undefined; + this._longTitle = undefined; + + // Trigger recompute of label + this._onDidChangeLabel.fire(); + } + + setPreferredResource(preferredResource: URI): void { + if (!isEqual(preferredResource, this._preferredResource)) { + this._preferredResource = preferredResource; + + this.updateLabel(); + } + } + + private _name: string | undefined = undefined; + override getName(skipDecorate?: boolean): string { + if (typeof this._name !== 'string') { + this._name = this.labelService.getUriBasenameLabel(this._preferredResource); + } + + return skipDecorate ? this._name : this.decorateLabel(this._name); + } + + override getDescription(verbosity = Verbosity.MEDIUM): string | undefined { + switch (verbosity) { + case Verbosity.SHORT: + return this.shortDescription; + case Verbosity.LONG: + return this.longDescription; + case Verbosity.MEDIUM: + default: + return this.mediumDescription; + } + } + + private _shortDescription: string | undefined = undefined; + private get shortDescription(): string { + if (typeof this._shortDescription !== 'string') { + this._shortDescription = this.labelService.getUriBasenameLabel(dirname(this._preferredResource)); + } + + return this._shortDescription; + } + + private _mediumDescription: string | undefined = undefined; + private get mediumDescription(): string { + if (typeof this._mediumDescription !== 'string') { + this._mediumDescription = this.labelService.getUriLabel(dirname(this._preferredResource), { relative: true }); + } + + return this._mediumDescription; + } + + private _longDescription: string | undefined = undefined; + private get longDescription(): string { + if (typeof this._longDescription !== 'string') { + this._longDescription = this.labelService.getUriLabel(dirname(this._preferredResource)); + } + + return this._longDescription; + } + + private _shortTitle: string | undefined = undefined; + private get shortTitle(): string { + if (typeof this._shortTitle !== 'string') { + this._shortTitle = this.getName(true /* skip decorations */); + } + + return this._shortTitle; + } + + private _mediumTitle: string | undefined = undefined; + private get mediumTitle(): string { + if (typeof this._mediumTitle !== 'string') { + this._mediumTitle = this.labelService.getUriLabel(this._preferredResource, { relative: true }); + } + + return this._mediumTitle; + } + + private _longTitle: string | undefined = undefined; + private get longTitle(): string { + if (typeof this._longTitle !== 'string') { + this._longTitle = this.labelService.getUriLabel(this._preferredResource); + } + + return this._longTitle; + } + + override getTitle(verbosity?: Verbosity): string { + switch (verbosity) { + case Verbosity.SHORT: + return this.decorateLabel(this.shortTitle); + case Verbosity.LONG: + return this.decorateLabel(this.longTitle); + default: + case Verbosity.MEDIUM: + return this.decorateLabel(this.mediumTitle); + } + } + + private decorateLabel(label: string): string { + // below codes are changed by github1s + // remove read-only tips + return decorateFileEditorLabel(label, { orphaned: false, readonly: false }); + // above codes are changed by github1s + } + + isOrphaned(): boolean { + return false; + } +} + +export function decorateFileEditorLabel(label: string, state: { orphaned: boolean, readonly: boolean }): string { + if (state.orphaned && state.readonly) { + return localize('orphanedReadonlyFile', "{0} (deleted, read-only)", label); + } + + if (state.orphaned) { + return localize('orphanedFile', "{0} (deleted)", label); + } + + if (state.readonly) { + return localize('readonlyFile', "{0} (read-only)", label); + } + + return label; +} diff --git a/vscode-web-github1s/src/vs/workbench/contrib/files/browser/views/explorerView.ts b/vscode-web-github1s/src/vs/workbench/contrib/files/browser/views/explorerView.ts index 369ad5e5a..0e4cbe2e0 100644 --- a/vscode-web-github1s/src/vs/workbench/contrib/files/browser/views/explorerView.ts +++ b/vscode-web-github1s/src/vs/workbench/contrib/files/browser/views/explorerView.ts @@ -8,7 +8,7 @@ import { URI } from 'vs/base/common/uri'; import * as perf from 'vs/base/common/performance'; import { IAction, WorkbenchActionExecutedEvent, WorkbenchActionExecutedClassification } from 'vs/base/common/actions'; import { memoize } from 'vs/base/common/decorators'; -import { IFilesConfiguration, ExplorerFolderContext, FilesExplorerFocusedContext, ExplorerFocusedContext, ExplorerRootContext, ExplorerResourceReadonlyContext, ExplorerResourceCut, ExplorerResourceMoveableToTrash, ExplorerCompressedFocusContext, ExplorerCompressedFirstFocusContext, ExplorerCompressedLastFocusContext, ExplorerResourceAvailableEditorIdsContext, VIEW_ID, VIEWLET_ID } from 'vs/workbench/contrib/files/common/files'; +import { IFilesConfiguration, ExplorerFolderContext, FilesExplorerFocusedContext, ExplorerFocusedContext, ExplorerRootContext, ExplorerResourceReadonlyContext, ExplorerResourceCut, ExplorerResourceMoveableToTrash, ExplorerCompressedFocusContext, ExplorerCompressedFirstFocusContext, ExplorerCompressedLastFocusContext, ExplorerResourceAvailableEditorIdsContext, VIEW_ID, VIEWLET_ID, ExplorerResourceNotReadonlyContext } from 'vs/workbench/contrib/files/common/files'; import { FileCopiedContext, NEW_FILE_COMMAND_ID, NEW_FOLDER_COMMAND_ID } from 'vs/workbench/contrib/files/browser/fileActions'; import * as DOM from 'vs/base/browser/dom'; import { IWorkbenchLayoutService } from 'vs/workbench/services/layout/browser/layoutService'; @@ -19,7 +19,7 @@ import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; import { IProgressService, ProgressLocation } from 'vs/platform/progress/common/progress'; import { IContextMenuService } from 'vs/platform/contextview/browser/contextView'; -import { IContextKeyService, IContextKey, ContextKeyEqualsExpr } from 'vs/platform/contextkey/common/contextkey'; +import { IContextKeyService, IContextKey, ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey'; import { ResourceContextKey } from 'vs/workbench/common/resources'; import { IDecorationsService } from 'vs/workbench/services/decorations/browser/decorations'; import { WorkbenchCompressibleAsyncDataTree } from 'vs/platform/list/browser/listService'; @@ -55,6 +55,7 @@ import { IExplorerService } from 'vs/workbench/contrib/files/browser/files'; import { Codicon } from 'vs/base/common/codicons'; import { ICommandService } from 'vs/platform/commands/common/commands'; import { IViewletService } from 'vs/workbench/services/viewlet/browser/viewlet'; +import { IEditorResolverService } from 'vs/workbench/services/editor/common/editorResolverService'; interface IExplorerViewColors extends IColorMapping { listDropBackground?: ColorValue | undefined; @@ -130,6 +131,11 @@ export function getContext(focus: ExplorerItem[], selection: ExplorerItem[], res return [focusedStat]; } +export interface IExplorerViewContainerDelegate { + willOpenElement(event?: UIEvent): void; + didOpenElement(event?: UIEvent): void; +} + export class ExplorerView extends ViewPane { static readonly TREE_VIEW_STATE_STORAGE_KEY: string = 'workbench.explorer.treeViewState'; @@ -155,27 +161,27 @@ export class ExplorerView extends ViewPane { private horizontalScrolling: boolean | undefined; - // Refresh is needed on the initial explorer open - private shouldRefresh = true; private dragHandler!: DelayedDragHandler; private autoReveal: boolean | 'focusNoScroll' = false; private decorationsProvider: ExplorerDecorationsProvider | undefined; constructor( options: IViewPaneOptions, + private readonly delegate: IExplorerViewContainerDelegate, @IContextMenuService contextMenuService: IContextMenuService, @IViewDescriptorService viewDescriptorService: IViewDescriptorService, @IInstantiationService instantiationService: IInstantiationService, @IWorkspaceContextService private readonly contextService: IWorkspaceContextService, @IProgressService private readonly progressService: IProgressService, @IEditorService private readonly editorService: IEditorService, + @IEditorResolverService private readonly editorResolverService: IEditorResolverService, @IWorkbenchLayoutService private readonly layoutService: IWorkbenchLayoutService, @IKeybindingService keybindingService: IKeybindingService, @IContextKeyService contextKeyService: IContextKeyService, @IConfigurationService configurationService: IConfigurationService, @IDecorationsService private readonly decorationService: IDecorationsService, @ILabelService private readonly labelService: ILabelService, - @IThemeService protected themeService: IWorkbenchThemeService, + @IThemeService themeService: IWorkbenchThemeService, @IMenuService private readonly menuService: IMenuService, @ITelemetryService telemetryService: ITelemetryService, @IExplorerService private readonly explorerService: IExplorerService, @@ -207,11 +213,11 @@ export class ExplorerView extends ViewPane { return this.labelService.getWorkspaceLabel(this.contextService.getWorkspace()); } - get title(): string { + override get title(): string { return this.name; } - set title(_: string) { + override set title(_: string) { // noop } @@ -232,7 +238,7 @@ export class ExplorerView extends ViewPane { // Split view methods - protected renderHeader(container: HTMLElement): void { + protected override renderHeader(container: HTMLElement): void { super.renderHeader(container); // Expand on drag over @@ -259,12 +265,12 @@ export class ExplorerView extends ViewPane { setHeader(); } - protected layoutBody(height: number, width: number): void { + protected override layoutBody(height: number, width: number): void { super.layoutBody(height, width); this.tree.layout(height, width); } - renderBody(container: HTMLElement): void { + override renderBody(container: HTMLElement): void { super.renderBody(container); this.container = container; @@ -293,18 +299,15 @@ export class ExplorerView extends ViewPane { this._register(this.onDidChangeBodyVisibility(async visible => { if (visible) { - // If a refresh was requested and we are now visible, run it - if (this.shouldRefresh) { - this.shouldRefresh = false; - await this.setTreeInput(); - } + // Always refresh explorer when it becomes visible to compensate for missing file events #126817 + await this.setTreeInput(); // Find resource to focus from active editor input if set this.selectActiveFile(true); } })); } - focus(): void { + override focus(): void { this.tree.domFocus(); const focused = this.tree.getFocus(); @@ -444,7 +447,12 @@ export class ExplorerView extends ViewPane { return; } this.telemetryService.publicLog2('workbenchActionExecuted', { id: 'workbench.files.openFile', from: 'explorer' }); - await this.editorService.openEditor({ resource: element.resource, options: { preserveFocus: e.editorOptions.preserveFocus, pinned: e.editorOptions.pinned } }, e.sideBySide ? SIDE_GROUP : ACTIVE_GROUP); + try { + this.delegate.willOpenElement(e.browserEvent); + await this.editorService.openEditor({ resource: element.resource, options: { preserveFocus: e.editorOptions.preserveFocus, pinned: e.editorOptions.pinned } }, e.sideBySide ? SIDE_GROUP : ACTIVE_GROUP); + } finally { + this.delegate.didOpenElement(); + } } })); @@ -492,16 +500,17 @@ export class ExplorerView extends ViewPane { } private setContextKeys(stat: ExplorerItem | null | undefined): void { - const isSingleFolder = this.contextService.getWorkbenchState() === WorkbenchState.FOLDER; - const resource = stat ? stat.resource : isSingleFolder ? this.contextService.getWorkspace().folders[0].uri : null; + const folders = this.contextService.getWorkspace().folders; + const resource = stat ? stat.resource : folders[folders.length - 1].uri; + stat = stat || this.explorerService.findClosest(resource); this.resourceContext.set(resource); - this.folderContext.set((isSingleFolder && !stat) || !!stat && stat.isDirectory); + this.folderContext.set(!!stat && stat.isDirectory); this.readonlyContext.set(!!stat && stat.isReadonly); - this.rootContext.set(!stat || (stat && stat.isRoot)); + this.rootContext.set(!!stat && stat.isRoot); if (resource) { - const overrides = resource ? this.editorService.getEditorOverrides(resource, undefined, undefined) : []; - this.availableEditorIdsContext.set(overrides.map(([, entry]) => entry.id).join(',')); + const overrides = resource ? this.editorResolverService.getEditorIds(resource) : []; + this.availableEditorIdsContext.set(overrides.join(',')); } else { this.availableEditorIdsContext.reset(); } @@ -589,8 +598,7 @@ export class ExplorerView extends ViewPane { */ refresh(recursive: boolean, item?: ExplorerItem, cancelEditing: boolean = true): Promise { if (!this.tree || !this.isBodyVisible() || (item && !this.tree.hasNode(item))) { - // Tree node doesn't exist yet - this.shouldRefresh = true; + // Tree node doesn't exist yet, when it becomes visible we will refresh return Promise.resolve(undefined); } @@ -604,31 +612,7 @@ export class ExplorerView extends ViewPane { }); } - focusNeighbourIfItemFocused(item: ExplorerItem): void { - const focus = this.tree.getFocus(); - if (focus.length !== 1) { - return; - } - const compressedController = this.renderer.getCompressedNavigationController(focus[0]) || this.renderer.getCompressedNavigationController(item); - const indexOfItem = compressedController?.items.indexOf(item) || -1; - const itemsCompressedTogether = compressedController && (compressedController.items.indexOf(focus[0]) >= 0) && (indexOfItem >= 0); - - if (focus[0] === item || itemsCompressedTogether) { - if (itemsCompressedTogether && indexOfItem > 0 && item.parent) { - // In case of compact items just focus the parent if it is part of the compact item. So the focus stays - this.tree.setFocus([item.parent]); - } else { - this.tree.focusNext(); - const newFocus = this.tree.getFocus(); - if (newFocus.length === 1 && newFocus[0] === item) { - // There was no next item to focus, focus the previous one - this.tree.focusPrevious(); - } - } - } - } - - getOptimalWidth(): number { + override getOptimalWidth(): number { const parentNode = this.tree.getHTMLElement(); const childNodes = ([] as HTMLElement[]).slice.call(parentNode.querySelectorAll('.explorer-item .label-name')); // select all file labels @@ -637,7 +621,6 @@ export class ExplorerView extends ViewPane { async setTreeInput(): Promise { if (!this.isBodyVisible()) { - this.shouldRefresh = true; return Promise.resolve(undefined); } @@ -689,7 +672,7 @@ export class ExplorerView extends ViewPane { this.progressService.withProgress({ location: ProgressLocation.Explorer, - delay: this.layoutService.isRestored() ? 800 : 1200 // less ugly initial startup + delay: this.layoutService.isRestored() ? 800 : 1500 // reduce progress visibility when still restoring }, _progress => promise); await promise; @@ -700,9 +683,7 @@ export class ExplorerView extends ViewPane { } public async selectResource(resource: URI | undefined, reveal = this.autoReveal, retry = 0): Promise { - // below codes are changed by github1s typo - // do no retry more than once to prevent infinite loops in cases of inconsistent model - // above codes are changed by github1s + // do no retry more than once to prevent inifinite loops in cases of inconsistent model if (retry === 2) { return; } @@ -844,7 +825,7 @@ export class ExplorerView extends ViewPane { } } - dispose(): void { + override dispose(): void { if (this.dragHandler) { this.dragHandler.dispose(); } @@ -872,10 +853,11 @@ registerAction2(class extends Action2 { title: nls.localize('createNewFile', "New File"), f1: false, icon: Codicon.newFile, + precondition: ExplorerResourceNotReadonlyContext, menu: { id: MenuId.ViewTitle, group: 'navigation', - when: ContextKeyEqualsExpr.create('view', VIEW_ID), + when: ContextKeyExpr.equals('view', VIEW_ID), order: 10 } }); @@ -894,10 +876,11 @@ registerAction2(class extends Action2 { title: nls.localize('createNewFolder', "New Folder"), f1: false, icon: Codicon.newFolder, + precondition: ExplorerResourceNotReadonlyContext, menu: { id: MenuId.ViewTitle, group: 'navigation', - when: ContextKeyEqualsExpr.create('view', VIEW_ID), + when: ContextKeyExpr.equals('view', VIEW_ID), order: 20 } }); @@ -919,7 +902,7 @@ registerAction2(class extends Action2 { menu: { id: MenuId.ViewTitle, group: 'navigation', - when: ContextKeyEqualsExpr.create('view', VIEW_ID), + when: ContextKeyExpr.equals('view', VIEW_ID), order: 30 } }); @@ -943,7 +926,7 @@ registerAction2(class extends Action2 { menu: { id: MenuId.ViewTitle, group: 'navigation', - when: ContextKeyEqualsExpr.create('view', VIEW_ID), + when: ContextKeyExpr.equals('view', VIEW_ID), order: 40 } }); diff --git a/vscode-web-github1s/src/vs/workbench/contrib/files/common/editors/fileEditorInput.ts b/vscode-web-github1s/src/vs/workbench/contrib/files/common/editors/fileEditorInput.ts deleted file mode 100644 index cf912d9fb..000000000 --- a/vscode-web-github1s/src/vs/workbench/contrib/files/common/editors/fileEditorInput.ts +++ /dev/null @@ -1,406 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -import { localize } from 'vs/nls'; -import { URI } from 'vs/base/common/uri'; -import { EncodingMode, IFileEditorInput, Verbosity, GroupIdentifier, IMoveResult, isTextEditorPane } from 'vs/workbench/common/editor'; -import { AbstractTextResourceEditorInput } from 'vs/workbench/common/editor/textResourceEditorInput'; -import { BinaryEditorModel } from 'vs/workbench/common/editor/binaryEditorModel'; -import { FileOperationError, FileOperationResult, IFileService } from 'vs/platform/files/common/files'; -import { ITextFileService, TextFileEditorModelState, TextFileLoadReason, TextFileOperationError, TextFileOperationResult, ITextFileEditorModel } from 'vs/workbench/services/textfile/common/textfiles'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { IReference, dispose, DisposableStore } from 'vs/base/common/lifecycle'; -import { ITextModelService } from 'vs/editor/common/services/resolverService'; -import { FILE_EDITOR_INPUT_ID, TEXT_FILE_EDITOR_ID, BINARY_FILE_EDITOR_ID } from 'vs/workbench/contrib/files/common/files'; -import { ILabelService } from 'vs/platform/label/common/label'; -import { IFilesConfigurationService } from 'vs/workbench/services/filesConfiguration/common/filesConfigurationService'; -import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; -import { IEditorGroupsService } from 'vs/workbench/services/editor/common/editorGroupsService'; -import { isEqual } from 'vs/base/common/resources'; -import { Event } from 'vs/base/common/event'; -import { IEditorViewState } from 'vs/editor/common/editorCommon'; -import { Schemas } from 'vs/base/common/network'; - -const enum ForceOpenAs { - None, - Text, - Binary -} - -/** - * A file editor input is the input type for the file editor of file system resources. - */ -export class FileEditorInput extends AbstractTextResourceEditorInput implements IFileEditorInput { - - private preferredName: string | undefined; - private preferredDescription: string | undefined; - private preferredEncoding: string | undefined; - private preferredMode: string | undefined; - - private forceOpenAs: ForceOpenAs = ForceOpenAs.None; - - private model: ITextFileEditorModel | undefined = undefined; - private cachedTextFileModelReference: IReference | undefined = undefined; - - private readonly modelListeners = this._register(new DisposableStore()); - - constructor( - resource: URI, - preferredResource: URI | undefined, - preferredName: string | undefined, - preferredDescription: string | undefined, - preferredEncoding: string | undefined, - preferredMode: string | undefined, - @IInstantiationService private readonly instantiationService: IInstantiationService, - @ITextFileService textFileService: ITextFileService, - @ITextModelService private readonly textModelResolverService: ITextModelService, - @ILabelService labelService: ILabelService, - @IFileService fileService: IFileService, - @IFilesConfigurationService filesConfigurationService: IFilesConfigurationService, - @IEditorService editorService: IEditorService, - @IEditorGroupsService editorGroupService: IEditorGroupsService - ) { - super(resource, preferredResource, editorService, editorGroupService, textFileService, labelService, fileService, filesConfigurationService); - - this.model = this.textFileService.files.get(resource); - - if (preferredName) { - this.setPreferredName(preferredName); - } - - if (preferredDescription) { - this.setPreferredDescription(preferredDescription); - } - - if (preferredEncoding) { - this.setPreferredEncoding(preferredEncoding); - } - - if (preferredMode) { - this.setPreferredMode(preferredMode); - } - - // If a file model already exists, make sure to wire it in - if (this.model) { - this.registerModelListeners(this.model); - } - } - - protected registerListeners(): void { - super.registerListeners(); - - // Attach to model that matches our resource once created - this._register(this.textFileService.files.onDidCreate(model => this.onDidCreateTextFileModel(model))); - } - - private onDidCreateTextFileModel(model: ITextFileEditorModel): void { - - // Once the text file model is created, we keep it inside - // the input to be able to implement some methods properly - if (isEqual(model.resource, this.resource)) { - this.model = model; - - this.registerModelListeners(model); - } - } - - private registerModelListeners(model: ITextFileEditorModel): void { - - // Clear any old - this.modelListeners.clear(); - - // re-emit some events from the model - this.modelListeners.add(model.onDidChangeDirty(() => this._onDidChangeDirty.fire())); - this.modelListeners.add(model.onDidChangeOrphaned(() => this._onDidChangeLabel.fire())); - - // important: treat save errors as potential dirty change because - // a file that is in save conflict or error will report dirty even - // if auto save is turned on. - this.modelListeners.add(model.onDidSaveError(() => this._onDidChangeDirty.fire())); - - // remove model association once it gets disposed - this.modelListeners.add(Event.once(model.onDispose)(() => { - this.modelListeners.clear(); - this.model = undefined; - })); - } - - getTypeId(): string { - return FILE_EDITOR_INPUT_ID; - } - - getName(): string { - return this.preferredName || this.decorateLabel(super.getName()); - } - - setPreferredName(name: string): void { - if (!this.allowLabelOverride()) { - return; // block for specific schemes we own - } - - if (this.preferredName !== name) { - this.preferredName = name; - - this._onDidChangeLabel.fire(); - } - } - - private allowLabelOverride(): boolean { - return this.resource.scheme !== Schemas.file && this.resource.scheme !== Schemas.vscodeRemote && this.resource.scheme !== Schemas.userData; - } - - getPreferredName(): string | undefined { - return this.preferredName; - } - - getDescription(verbosity?: Verbosity): string | undefined { - return this.preferredDescription || super.getDescription(verbosity); - } - - setPreferredDescription(description: string): void { - if (!this.allowLabelOverride()) { - return; // block for specific schemes we own - } - - if (this.preferredDescription !== description) { - this.preferredDescription = description; - - this._onDidChangeLabel.fire(); - } - } - - getPreferredDescription(): string | undefined { - return this.preferredDescription; - } - - getTitle(verbosity: Verbosity): string { - switch (verbosity) { - case Verbosity.SHORT: - return this.decorateLabel(super.getName()); - case Verbosity.MEDIUM: - case Verbosity.LONG: - return this.decorateLabel(super.getTitle(verbosity)); - } - } - - private decorateLabel(label: string): string { - // below codes are changed by github1s - // remove read-only tips - return label; - // above codes are changed by github1s - } - - getEncoding(): string | undefined { - if (this.model) { - return this.model.getEncoding(); - } - - return this.preferredEncoding; - } - - getPreferredEncoding(): string | undefined { - return this.preferredEncoding; - } - - setEncoding(encoding: string, mode: EncodingMode): void { - this.setPreferredEncoding(encoding); - - this.model?.setEncoding(encoding, mode); - } - - setPreferredEncoding(encoding: string): void { - this.preferredEncoding = encoding; - - // encoding is a good hint to open the file as text - this.setForceOpenAsText(); - } - - getPreferredMode(): string | undefined { - return this.preferredMode; - } - - setMode(mode: string): void { - this.setPreferredMode(mode); - - this.model?.setMode(mode); - } - - setPreferredMode(mode: string): void { - this.preferredMode = mode; - - // mode is a good hint to open the file as text - this.setForceOpenAsText(); - } - - setForceOpenAsText(): void { - this.forceOpenAs = ForceOpenAs.Text; - } - - setForceOpenAsBinary(): void { - this.forceOpenAs = ForceOpenAs.Binary; - } - - isDirty(): boolean { - return !!(this.model?.isDirty()); - } - - isReadonly(): boolean { - if (this.model) { - return this.model.isReadonly(); - } - - return super.isReadonly(); - } - - isSaving(): boolean { - if (this.model?.hasState(TextFileEditorModelState.SAVED) || this.model?.hasState(TextFileEditorModelState.CONFLICT) || this.model?.hasState(TextFileEditorModelState.ERROR)) { - return false; // require the model to be dirty and not in conflict or error state - } - - // Note: currently not checking for ModelState.PENDING_SAVE for a reason - // because we currently miss an event for this state change on editors - // and it could result in bad UX where an editor can be closed even though - // it shows up as dirty and has not finished saving yet. - - return super.isSaving(); - } - - getPreferredEditorId(candidates: string[]): string { - return this.forceOpenAs === ForceOpenAs.Binary ? BINARY_FILE_EDITOR_ID : TEXT_FILE_EDITOR_ID; - } - - resolve(): Promise { - - // Resolve as binary - if (this.forceOpenAs === ForceOpenAs.Binary) { - return this.doResolveAsBinary(); - } - - // Resolve as text - return this.doResolveAsText(); - } - - private async doResolveAsText(): Promise { - try { - - // Resolve resource via text file service and only allow - // to open binary files if we are instructed so - await this.textFileService.files.resolve(this.resource, { - mode: this.preferredMode, - encoding: this.preferredEncoding, - reload: { async: true }, // trigger a reload of the model if it exists already but do not wait to show the model - allowBinary: this.forceOpenAs === ForceOpenAs.Text, - reason: TextFileLoadReason.EDITOR - }); - - // This is a bit ugly, because we first resolve the model and then resolve a model reference. the reason being that binary - // or very large files do not resolve to a text file model but should be opened as binary files without text. First calling into - // resolve() ensures we are not creating model references for these kind of resources. - // In addition we have a bit of payload to take into account (encoding, reload) that the text resolver does not handle yet. - if (!this.cachedTextFileModelReference) { - this.cachedTextFileModelReference = await this.textModelResolverService.createModelReference(this.resource) as IReference; - } - - const model = this.cachedTextFileModelReference.object; - - // It is possible that this input was disposed before the model - // finished resolving. As such, we need to make sure to dispose - // the model reference to not leak it. - if (this.isDisposed()) { - this.disposeModelReference(); - } - - return model; - } catch (error) { - - // In case of an error that indicates that the file is binary or too large, just return with the binary editor model - if ( - (error).textFileOperationResult === TextFileOperationResult.FILE_IS_BINARY || - (error).fileOperationResult === FileOperationResult.FILE_TOO_LARGE - ) { - return this.doResolveAsBinary(); - } - - // Bubble any other error up - throw error; - } - } - - private async doResolveAsBinary(): Promise { - return this.instantiationService.createInstance(BinaryEditorModel, this.preferredResource, this.getName()).load(); - } - - isResolved(): boolean { - return !!this.model; - } - - rename(group: GroupIdentifier, target: URI): IMoveResult { - return { - editor: { - resource: target, - encoding: this.getEncoding(), - options: { - viewState: this.getViewStateFor(group) - } - } - }; - } - - private getViewStateFor(group: GroupIdentifier): IEditorViewState | undefined { - for (const editorPane of this.editorService.visibleEditorPanes) { - if (editorPane.group.id === group && isEqual(editorPane.input.resource, this.resource)) { - if (isTextEditorPane(editorPane)) { - return editorPane.getViewState(); - } - } - } - - return undefined; - } - - matches(otherInput: unknown): boolean { - if (otherInput === this) { - return true; - } - - if (otherInput instanceof FileEditorInput) { - return isEqual(otherInput.resource, this.resource); - } - - return false; - } - - dispose(): void { - - // Model - this.model = undefined; - - // Model reference - this.disposeModelReference(); - - super.dispose(); - } - - private disposeModelReference(): void { - dispose(this.cachedTextFileModelReference); - this.cachedTextFileModelReference = undefined; - } -} - -export function decorateFileEditorLabel(label: string, state: { orphaned: boolean, readonly: boolean }): string { - if (state.orphaned && state.readonly) { - return localize('orphanedReadonlyFile', "{0} (deleted, read-only)", label); - } - - if (state.orphaned) { - return localize('orphanedFile', "{0} (deleted)", label); - } - - if (state.readonly) { - return localize('readonlyFile', "{0} (read-only)", label); - } - - return label; -} diff --git a/vscode-web-github1s/src/vs/workbench/contrib/terminal/browser/terminalService.ts b/vscode-web-github1s/src/vs/workbench/contrib/terminal/browser/terminalService.ts deleted file mode 100644 index 4e1c12cee..000000000 --- a/vscode-web-github1s/src/vs/workbench/contrib/terminal/browser/terminalService.ts +++ /dev/null @@ -1,1027 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -import { timeout } from 'vs/base/common/async'; -import { debounce, throttle } from 'vs/base/common/decorators'; -import { Emitter, Event } from 'vs/base/common/event'; -import { IDisposable } from 'vs/base/common/lifecycle'; -import { basename } from 'vs/base/common/path'; -import { isMacintosh, isWeb, isWindows, OperatingSystem } from 'vs/base/common/platform'; -import { FindReplaceState } from 'vs/editor/contrib/find/findState'; -import * as nls from 'vs/nls'; -import { ConfigurationTarget, IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { IContextKey, IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { IDialogService } from 'vs/platform/dialogs/common/dialogs'; -import { IInstantiationService, optional } from 'vs/platform/instantiation/common/instantiation'; -import { IPickOptions, IQuickInputButton, IQuickInputService, IQuickPickItem, IQuickPickSeparator } from 'vs/platform/quickinput/common/quickInput'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { ILocalTerminalService, IShellLaunchConfig, ITerminalLaunchError, ITerminalsLayoutInfo, ITerminalsLayoutInfoById, TerminalShellType, WindowsShellType } from 'vs/platform/terminal/common/terminal'; -import { ThemeIcon } from 'vs/platform/theme/common/themeService'; -import { IViewDescriptorService, IViewsService, ViewContainerLocation } from 'vs/workbench/common/views'; -import { IRemoteTerminalService, ITerminalExternalLinkProvider, ITerminalInstance, ITerminalService, ITerminalTab, TerminalConnectionState } from 'vs/workbench/contrib/terminal/browser/terminal'; -import { TerminalConfigHelper } from 'vs/workbench/contrib/terminal/browser/terminalConfigHelper'; -import { TerminalInstance } from 'vs/workbench/contrib/terminal/browser/terminalInstance'; -import { TerminalTab } from 'vs/workbench/contrib/terminal/browser/terminalTab'; -import { TerminalViewPane } from 'vs/workbench/contrib/terminal/browser/terminalView'; -import { IAvailableProfilesRequest, IRemoteTerminalAttachTarget, ITerminalProfile, IStartExtensionTerminalRequest, ITerminalConfigHelper, ITerminalNativeWindowsDelegate, ITerminalProcessExtHostProxy, KEYBINDING_CONTEXT_TERMINAL_ALT_BUFFER_ACTIVE, KEYBINDING_CONTEXT_TERMINAL_FIND_VISIBLE, KEYBINDING_CONTEXT_TERMINAL_FOCUS, KEYBINDING_CONTEXT_TERMINAL_IS_OPEN, KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED, KEYBINDING_CONTEXT_TERMINAL_SHELL_TYPE, LinuxDistro, TERMINAL_VIEW_ID, ITerminalProfileObject, ITerminalExecutable, ITerminalProfileSource } from 'vs/workbench/contrib/terminal/common/terminal'; -import { escapeNonWindowsPath } from 'vs/workbench/contrib/terminal/common/terminalEnvironment'; -import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService'; -import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions'; -import { IWorkbenchLayoutService } from 'vs/workbench/services/layout/browser/layoutService'; -import { ILifecycleService, ShutdownReason, WillShutdownEvent } from 'vs/workbench/services/lifecycle/common/lifecycle'; -import { IRemoteAgentService } from 'vs/workbench/services/remote/common/remoteAgentService'; -import { configureTerminalProfileIcon } from 'vs/workbench/contrib/terminal/browser/terminalIcons'; -import { equals } from 'vs/base/common/objects'; - -interface IExtHostReadyEntry { - promise: Promise; - resolve: () => void; -} - -export class TerminalService implements ITerminalService { - public _serviceBrand: undefined; - - private _isShuttingDown: boolean; - private _terminalFocusContextKey: IContextKey; - private _terminalShellTypeContextKey: IContextKey; - private _terminalAltBufferActiveContextKey: IContextKey; - private _findWidgetVisible: IContextKey; - private _terminalTabs: ITerminalTab[] = []; - private _backgroundedTerminalInstances: ITerminalInstance[] = []; - private get _terminalInstances(): ITerminalInstance[] { - return this._terminalTabs.reduce((p, c) => p.concat(c.terminalInstances), []); - } - private _findState: FindReplaceState; - private _extHostsReady: { [authority: string]: IExtHostReadyEntry | undefined } = {}; - private _activeTabIndex: number; - private _linkProviders: Set = new Set(); - private _linkProviderDisposables: Map = new Map(); - private _processSupportContextKey: IContextKey; - - public get activeTabIndex(): number { return this._activeTabIndex; } - public get terminalInstances(): ITerminalInstance[] { return this._terminalInstances; } - public get terminalTabs(): ITerminalTab[] { return this._terminalTabs; } - public get isProcessSupportRegistered(): boolean { return !!this._processSupportContextKey.get(); } - - private _configHelper: TerminalConfigHelper; - private _terminalContainer: HTMLElement | undefined; - private _nativeWindowsDelegate: ITerminalNativeWindowsDelegate | undefined; - private _remoteTerminalsInitPromise: Promise | undefined; - private _localTerminalsInitPromise: Promise | undefined; - private _connectionState: TerminalConnectionState; - - private _availableProfiles: ITerminalProfile[] | undefined; - - public get configHelper(): ITerminalConfigHelper { return this._configHelper; } - - private readonly _onActiveTabChanged = new Emitter(); - public get onActiveTabChanged(): Event { return this._onActiveTabChanged.event; } - private readonly _onInstanceCreated = new Emitter(); - public get onInstanceCreated(): Event { return this._onInstanceCreated.event; } - private readonly _onInstanceDisposed = new Emitter(); - public get onInstanceDisposed(): Event { return this._onInstanceDisposed.event; } - private readonly _onInstanceProcessIdReady = new Emitter(); - public get onInstanceProcessIdReady(): Event { return this._onInstanceProcessIdReady.event; } - private readonly _onInstanceLinksReady = new Emitter(); - public get onInstanceLinksReady(): Event { return this._onInstanceLinksReady.event; } - private readonly _onInstanceRequestStartExtensionTerminal = new Emitter(); - public get onInstanceRequestStartExtensionTerminal(): Event { return this._onInstanceRequestStartExtensionTerminal.event; } - private readonly _onInstanceDimensionsChanged = new Emitter(); - public get onInstanceDimensionsChanged(): Event { return this._onInstanceDimensionsChanged.event; } - private readonly _onInstanceMaximumDimensionsChanged = new Emitter(); - public get onInstanceMaximumDimensionsChanged(): Event { return this._onInstanceMaximumDimensionsChanged.event; } - private readonly _onInstancesChanged = new Emitter(); - public get onInstancesChanged(): Event { return this._onInstancesChanged.event; } - private readonly _onInstanceTitleChanged = new Emitter(); - public get onInstanceTitleChanged(): Event { return this._onInstanceTitleChanged.event; } - private readonly _onActiveInstanceChanged = new Emitter(); - public get onActiveInstanceChanged(): Event { return this._onActiveInstanceChanged.event; } - private readonly _onTabDisposed = new Emitter(); - public get onTabDisposed(): Event { return this._onTabDisposed.event; } - private readonly _onRequestAvailableProfiles = new Emitter(); - public get onRequestAvailableProfiles(): Event { return this._onRequestAvailableProfiles.event; } - private readonly _onDidRegisterProcessSupport = new Emitter(); - public get onDidRegisterProcessSupport(): Event { return this._onDidRegisterProcessSupport.event; } - private readonly _onDidChangeConnectionState = new Emitter(); - public get onDidChangeConnectionState(): Event { return this._onDidChangeConnectionState.event; } - public get connectionState(): TerminalConnectionState { return this._connectionState; } - private readonly _onProfilesConfigChanged = new Emitter(); - public get onProfilesConfigChanged(): Event { return this._onProfilesConfigChanged.event; } - private readonly _localTerminalService?: ILocalTerminalService; - - constructor( - @IContextKeyService private _contextKeyService: IContextKeyService, - @IWorkbenchLayoutService private _layoutService: IWorkbenchLayoutService, - @ILifecycleService lifecycleService: ILifecycleService, - @IDialogService private _dialogService: IDialogService, - @IInstantiationService private _instantiationService: IInstantiationService, - @IRemoteAgentService private _remoteAgentService: IRemoteAgentService, - @IQuickInputService private _quickInputService: IQuickInputService, - @IConfigurationService private _configurationService: IConfigurationService, - @IViewsService private _viewsService: IViewsService, - @IViewDescriptorService private readonly _viewDescriptorService: IViewDescriptorService, - @IWorkbenchEnvironmentService private readonly _environmentService: IWorkbenchEnvironmentService, - @IRemoteTerminalService private readonly _remoteTerminalService: IRemoteTerminalService, - @ITelemetryService private readonly _telemetryService: ITelemetryService, - @IExtensionService private readonly _extensionService: IExtensionService, - @optional(ILocalTerminalService) localTerminalService: ILocalTerminalService - ) { - this._localTerminalService = localTerminalService; - - this._activeTabIndex = 0; - this._isShuttingDown = false; - this._findState = new FindReplaceState(); - lifecycleService.onBeforeShutdown(async e => e.veto(this._onBeforeShutdown(e.reason), 'veto.terminal')); - lifecycleService.onWillShutdown(e => this._onWillShutdown(e)); - this._terminalFocusContextKey = KEYBINDING_CONTEXT_TERMINAL_FOCUS.bindTo(this._contextKeyService); - this._terminalShellTypeContextKey = KEYBINDING_CONTEXT_TERMINAL_SHELL_TYPE.bindTo(this._contextKeyService); - this._terminalAltBufferActiveContextKey = KEYBINDING_CONTEXT_TERMINAL_ALT_BUFFER_ACTIVE.bindTo(this._contextKeyService); - this._findWidgetVisible = KEYBINDING_CONTEXT_TERMINAL_FIND_VISIBLE.bindTo(this._contextKeyService); - this._configHelper = this._instantiationService.createInstance(TerminalConfigHelper); - this.onTabDisposed(tab => this._removeTab(tab)); - this.onActiveTabChanged(() => { - const instance = this.getActiveInstance(); - this._onActiveInstanceChanged.fire(instance ? instance : undefined); - }); - this.onInstanceLinksReady(instance => this._setInstanceLinkProviders(instance)); - this._handleInstanceContextKeys(); - this._processSupportContextKey = KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED.bindTo(this._contextKeyService); - this._processSupportContextKey.set(!isWeb || this._remoteAgentService.getConnection() !== null); - - this._configurationService.onDidChangeConfiguration(async e => { - if (e.affectsConfiguration('terminal.integrated.profiles.windows') || - e.affectsConfiguration('terminal.integrated.profiles.osx') || - e.affectsConfiguration('terminal.integrated.profiles.linux') || - e.affectsConfiguration('terminal.integrated.useWslProfiles')) { - this._updateAvailableProfilesNow(); - } - }); - - const enableTerminalReconnection = this.configHelper.config.enablePersistentSessions; - - const conn = this._remoteAgentService.getConnection(); - const remoteAuthority = conn ? conn.remoteAuthority : 'null'; - this._whenExtHostReady(remoteAuthority).then(() => { - this._updateAvailableProfiles(); - }); - - // Connect to the extension host if it's there, set the connection state to connected when - // it's done. This should happen even when there is no extension host. - this._connectionState = TerminalConnectionState.Connecting; - let initPromise: Promise; - if (!!this._environmentService.remoteAuthority && enableTerminalReconnection) { - initPromise = this._remoteTerminalsInitPromise = this._reconnectToRemoteTerminals(); - } else if (enableTerminalReconnection) { - initPromise = this._localTerminalsInitPromise = this._reconnectToLocalTerminals(); - } else { - initPromise = Promise.resolve(); - } - initPromise.then(() => this._setConnected()); - } - - private _setConnected() { - this._connectionState = TerminalConnectionState.Connected; - this._onDidChangeConnectionState.fire(); - } - - private async _reconnectToRemoteTerminals(): Promise { - // Reattach to all remote terminals - const layoutInfo = await this._remoteTerminalService.getTerminalLayoutInfo(); - const reconnectCounter = this._recreateTerminalTabs(layoutInfo); - /* __GDPR__ - "terminalReconnection" : { - "count" : { "classification": "SystemMetaData", "purpose": "FeatureInsight", "isMeasurement": true } - } - */ - const data = { - count: reconnectCounter - }; - this._telemetryService.publicLog('terminalReconnection', data); - // now that terminals have been restored, - // attach listeners to update remote when terminals are changed - this.attachProcessLayoutListeners(true); - } - - private async _reconnectToLocalTerminals(): Promise { - if (!this._localTerminalService) { - return; - } - // Reattach to all local terminals - const layoutInfo = await this._localTerminalService.getTerminalLayoutInfo(); - if (layoutInfo && layoutInfo.tabs.length > 0) { - this._recreateTerminalTabs(layoutInfo); - } - // now that terminals have been restored, - // attach listeners to update local state when terminals are changed - this.attachProcessLayoutListeners(false); - } - - private _recreateTerminalTabs(layoutInfo?: ITerminalsLayoutInfo): number { - let reconnectCounter = 0; - let activeTab: ITerminalTab | undefined; - if (layoutInfo) { - layoutInfo.tabs.forEach(tabLayout => { - const terminalLayouts = tabLayout.terminals.filter(t => t.terminal && t.terminal.isOrphan); - if (terminalLayouts.length) { - reconnectCounter += terminalLayouts.length; - let terminalInstance: ITerminalInstance | undefined; - let tab: ITerminalTab | undefined; - terminalLayouts.forEach((terminalLayout) => { - if (!terminalInstance) { - // create tab and terminal - terminalInstance = this.createTerminal({ attachPersistentProcess: terminalLayout.terminal! }); - tab = this._getTabForInstance(terminalInstance); - if (tabLayout.isActive) { - activeTab = tab; - } - } else { - // add split terminals to this tab - this.splitInstance(terminalInstance, { attachPersistentProcess: terminalLayout.terminal! }); - } - }); - const activeInstance = this.terminalInstances.find(t => { - return t.shellLaunchConfig.attachPersistentProcess?.id === tabLayout.activePersistentProcessId; - }); - if (activeInstance) { - this.setActiveInstance(activeInstance); - } - tab?.resizePanes(tabLayout.terminals.map(terminal => terminal.relativeSize)); - } - }); - if (layoutInfo.tabs.length) { - this.setActiveTabByIndex(activeTab ? this.terminalTabs.indexOf(activeTab) : 0); - } - } - return reconnectCounter; - } - - private attachProcessLayoutListeners(isRemote: boolean): void { - this.onActiveTabChanged(() => isRemote ? this._updateRemoteState() : this._updateLocalState()); - this.onActiveInstanceChanged(() => isRemote ? this._updateRemoteState() : this._updateLocalState()); - this.onInstancesChanged(() => isRemote ? this._updateRemoteState() : this._updateLocalState()); - // The state must be updated when the terminal is relaunched, otherwise the persistent - // terminal ID will be stale and the process will be leaked. - this.onInstanceProcessIdReady(() => isRemote ? this._updateRemoteState() : this._updateLocalState()); - } - - public setNativeWindowsDelegate(delegate: ITerminalNativeWindowsDelegate): void { - this._nativeWindowsDelegate = delegate; - } - - public setLinuxDistro(linuxDistro: LinuxDistro): void { - this._configHelper.setLinuxDistro(linuxDistro); - } - - private _handleInstanceContextKeys(): void { - const terminalIsOpenContext = KEYBINDING_CONTEXT_TERMINAL_IS_OPEN.bindTo(this._contextKeyService); - const updateTerminalContextKeys = () => { - terminalIsOpenContext.set(this.terminalInstances.length > 0); - }; - this.onInstancesChanged(() => updateTerminalContextKeys()); - } - - public getActiveOrCreateInstance(): ITerminalInstance { - const activeInstance = this.getActiveInstance(); - return activeInstance ? activeInstance : this.createTerminal(undefined); - } - - public requestStartExtensionTerminal(proxy: ITerminalProcessExtHostProxy, cols: number, rows: number): Promise { - // The initial request came from the extension host, no need to wait for it - return new Promise(callback => { - this._onInstanceRequestStartExtensionTerminal.fire({ proxy, cols, rows, callback }); - }); - } - - public async extHostReady(remoteAuthority: string): Promise { - this._createExtHostReadyEntry(remoteAuthority); - this._extHostsReady[remoteAuthority]!.resolve(); - } - - public getAvailableProfiles(): ITerminalProfile[] { - this._updateAvailableProfiles(); - return this._availableProfiles || []; - } - - private async _getWorkspaceProfilePermissions(profile: ITerminalProfile): Promise { - const platformKey = await this._getPlatformKey(); - const profiles = this._configurationService.inspect<{ [key: string]: ITerminalProfileObject }>(`terminal.integrated.profiles.${platformKey}`); - if (!profiles || !profiles.workspaceValue || !profiles.defaultValue) { - return false; - } - const workspaceProfile = Object.entries(profiles.workspaceValue).find(p => p[0] === profile.profileName); - const defaultProfile = Object.entries(profiles.defaultValue).find(p => p[0] === profile.profileName); - if (workspaceProfile && defaultProfile && workspaceProfile[0] === defaultProfile[0]) { - let result = !this._terminalProfileObjectEqual(workspaceProfile[1], defaultProfile[1]); - return result; - } else if (!workspaceProfile && !defaultProfile) { - // user profile - return false; - } else { - // this key is missing from either default or the workspace config - return true; - } - } - - private _terminalProfileObjectEqual(one?: ITerminalProfileObject, two?: ITerminalProfileObject): boolean { - if (one === null && two === null) { - return true; - } else if ((one as ITerminalExecutable).path && (two as ITerminalExecutable).path) { - const oneExec = (one as ITerminalExecutable); - const twoExec = (two as ITerminalExecutable); - return ((Array.isArray(oneExec.path) && Array.isArray(twoExec.path) && oneExec.path.length === twoExec.path.length && oneExec.path.every((p, index) => p === twoExec.path[index])) || - (oneExec.path === twoExec.path) - ) && ((Array.isArray(oneExec.args) && Array.isArray(twoExec.args) && oneExec.args?.every((a, index) => a === twoExec.args?.[index])) || - (oneExec.args === twoExec.args) - ); - } else if ((one as ITerminalProfileSource).source && (two as ITerminalProfileSource).source) { - const oneSource = (one as ITerminalProfileSource); - const twoSource = (two as ITerminalProfileSource); - return oneSource.source === twoSource.source - && ((Array.isArray(oneSource.args) && Array.isArray(twoSource.args) && oneSource.args?.every((a, index) => a === twoSource.args?.[index])) || - (oneSource.args === twoSource.args) - ); - } - return false; - } - - // when relevant config changes, update without debouncing - private async _updateAvailableProfilesNow(): Promise { - const result = await this._detectProfiles(true); - for (const p of result) { - p.isWorkspaceProfile = await this._getWorkspaceProfilePermissions(p); - } - if (!equals(result, this._availableProfiles)) { - this._availableProfiles = result; - this._onProfilesConfigChanged.fire(); - } - } - - // avoid checking this very often, every ten seconds shoulds suffice - @throttle(10000) - private _updateAvailableProfiles(): Promise { - return this._updateAvailableProfilesNow(); - } - - private async _detectProfiles(quickLaunchOnly: boolean): Promise { - await this._extensionService.whenInstalledExtensionsRegistered(); - // Wait for the remoteAuthority to be ready (and listening for events) before firing - // the event to spawn the ext host process - const conn = this._remoteAgentService.getConnection(); - const remoteAuthority = conn ? conn.remoteAuthority : 'null'; - await this._whenExtHostReady(remoteAuthority); - return new Promise(r => this._onRequestAvailableProfiles.fire({ callback: r, quickLaunchOnly: quickLaunchOnly })); - } - - private async _whenExtHostReady(remoteAuthority: string): Promise { - this._createExtHostReadyEntry(remoteAuthority); - return this._extHostsReady[remoteAuthority]!.promise; - } - - private _createExtHostReadyEntry(remoteAuthority: string): void { - if (this._extHostsReady[remoteAuthority]) { - return; - } - - let resolve!: () => void; - const promise = new Promise(r => resolve = r); - this._extHostsReady[remoteAuthority] = { promise, resolve }; - } - - private _onBeforeShutdown(reason: ShutdownReason): boolean | Promise { - if (this.terminalInstances.length === 0) { - // No terminal instances, don't veto - return false; - } - - const shouldPersistTerminals = this._configHelper.config.enablePersistentSessions && reason === ShutdownReason.RELOAD; - if (this.configHelper.config.confirmOnExit && !shouldPersistTerminals) { - return this._onBeforeShutdownAsync(); - } - - this._isShuttingDown = true; - - return false; - } - - private async _onBeforeShutdownAsync(): Promise { - // veto if configured to show confirmation and the user chose not to exit - const veto = await this._showTerminalCloseConfirmation(); - if (!veto) { - this._isShuttingDown = true; - } - return veto; - } - - private _onWillShutdown(e: WillShutdownEvent): void { - // Don't touch processes if the shutdown was a result of reload as they will be reattached - const shouldPersistTerminals = this._configHelper.config.enablePersistentSessions && e.reason === ShutdownReason.RELOAD; - if (shouldPersistTerminals) { - this.terminalInstances.forEach(instance => instance.detachFromProcess()); - return; - } - - // Force dispose of all terminal instances, don't force immediate disposal of the terminal - // processes on Windows as an additional mitigation for https://github.com/microsoft/vscode/issues/71966 - // which causes the pty host to become unresponsive, disconnecting all terminals across all - // windows - this.terminalInstances.forEach(instance => instance.dispose(!isWindows)); - - // below codes are changed by github1s - // the _localTerminalService may not exists in github1s - this._localTerminalService?.setTerminalLayoutInfo(undefined); - // above codes are changed by github1s - } - - public getTabLabels(): string[] { - return this._terminalTabs.filter(tab => tab.terminalInstances.length > 0).map((tab, index) => { - return `${index + 1}: ${tab.title ? tab.title : ''}`; - }); - } - - public getFindState(): FindReplaceState { - return this._findState; - } - - @debounce(500) - private _updateRemoteState(): void { - if (!!this._environmentService.remoteAuthority) { - const state: ITerminalsLayoutInfoById = { - tabs: this.terminalTabs.map(t => t.getLayoutInfo(t === this.getActiveTab())) - }; - this._remoteTerminalService.setTerminalLayoutInfo(state); - } - } - - @debounce(500) - private _updateLocalState(): void { - const state: ITerminalsLayoutInfoById = { - tabs: this.terminalTabs.map(t => t.getLayoutInfo(t === this.getActiveTab())) - }; - this._localTerminalService!.setTerminalLayoutInfo(state); - } - - private _removeTab(tab: ITerminalTab): void { - // Get the index of the tab and remove it from the list - const index = this._terminalTabs.indexOf(tab); - const activeTab = this.getActiveTab(); - const activeTabIndex = activeTab ? this._terminalTabs.indexOf(activeTab) : -1; - const wasActiveTab = tab === activeTab; - if (index !== -1) { - this._terminalTabs.splice(index, 1); - } - - // Adjust focus if the tab was active - if (wasActiveTab && this._terminalTabs.length > 0) { - // TODO: Only focus the new tab if the removed tab had focus? - // const hasFocusOnExit = tab.activeInstance.hadFocusOnExit; - const newIndex = index < this._terminalTabs.length ? index : this._terminalTabs.length - 1; - this.setActiveTabByIndex(newIndex); - const activeInstance = this.getActiveInstance(); - if (activeInstance) { - activeInstance.focus(true); - } - } else if (activeTabIndex >= this._terminalTabs.length) { - const newIndex = this._terminalTabs.length - 1; - this.setActiveTabByIndex(newIndex); - } - - // Hide the panel if there are no more instances, provided that VS Code is not shutting - // down. When shutting down the panel is locked in place so that it is restored upon next - // launch. - if (this._terminalTabs.length === 0 && !this._isShuttingDown) { - this.hidePanel(); - this._onActiveInstanceChanged.fire(undefined); - } - - // Fire events - this._onInstancesChanged.fire(); - if (wasActiveTab) { - this._onActiveTabChanged.fire(); - } - } - - public refreshActiveTab(): void { - // Fire active instances changed - this._onActiveTabChanged.fire(); - } - - public getActiveTab(): ITerminalTab | null { - if (this._activeTabIndex < 0 || this._activeTabIndex >= this._terminalTabs.length) { - return null; - } - return this._terminalTabs[this._activeTabIndex]; - } - - public getActiveInstance(): ITerminalInstance | null { - const tab = this.getActiveTab(); - if (!tab) { - return null; - } - return tab.activeInstance; - } - - public doWithActiveInstance(callback: (terminal: ITerminalInstance) => T): T | void { - const instance = this.getActiveInstance(); - if (instance) { - return callback(instance); - } - } - - public getInstanceFromId(terminalId: number): ITerminalInstance | undefined { - let bgIndex = -1; - this._backgroundedTerminalInstances.forEach((terminalInstance, i) => { - if (terminalInstance.instanceId === terminalId) { - bgIndex = i; - } - }); - if (bgIndex !== -1) { - return this._backgroundedTerminalInstances[bgIndex]; - } - try { - return this.terminalInstances[this._getIndexFromId(terminalId)]; - } catch { - return undefined; - } - } - - public getInstanceFromIndex(terminalIndex: number): ITerminalInstance { - return this.terminalInstances[terminalIndex]; - } - - public setActiveInstance(terminalInstance: ITerminalInstance): void { - // If this was a hideFromUser terminal created by the API this was triggered by show, - // in which case we need to create the terminal tab - if (terminalInstance.shellLaunchConfig.hideFromUser) { - this._showBackgroundTerminal(terminalInstance); - } - this.setActiveInstanceByIndex(this._getIndexFromId(terminalInstance.instanceId)); - } - - public setActiveTabByIndex(tabIndex: number): void { - if (tabIndex >= this._terminalTabs.length) { - return; - } - - const didTabChange = this._activeTabIndex !== tabIndex; - this._activeTabIndex = tabIndex; - - this._terminalTabs.forEach((t, i) => t.setVisible(i === this._activeTabIndex)); - if (didTabChange) { - this._onActiveTabChanged.fire(); - } - } - - public isAttachedToTerminal(remoteTerm: IRemoteTerminalAttachTarget): boolean { - return this.terminalInstances.some(term => term.processId === remoteTerm.pid); - } - - public async initializeTerminals(): Promise { - if (this._remoteTerminalsInitPromise) { - await this._remoteTerminalsInitPromise; - } else if (this._localTerminalsInitPromise) { - await this._localTerminalsInitPromise; - } - if (this.terminalTabs.length === 0 && this.isProcessSupportRegistered) { - this.createTerminal(); - } - } - - private _getInstanceFromGlobalInstanceIndex(index: number): { tab: ITerminalTab, tabIndex: number, instance: ITerminalInstance, localInstanceIndex: number } | null { - let currentTabIndex = 0; - while (index >= 0 && currentTabIndex < this._terminalTabs.length) { - const tab = this._terminalTabs[currentTabIndex]; - const count = tab.terminalInstances.length; - if (index < count) { - return { - tab, - tabIndex: currentTabIndex, - instance: tab.terminalInstances[index], - localInstanceIndex: index - }; - } - index -= count; - currentTabIndex++; - } - return null; - } - - public setActiveInstanceByIndex(terminalIndex: number): void { - const query = this._getInstanceFromGlobalInstanceIndex(terminalIndex); - if (!query) { - return; - } - - query.tab.setActiveInstanceByIndex(query.localInstanceIndex); - const didTabChange = this._activeTabIndex !== query.tabIndex; - this._activeTabIndex = query.tabIndex; - this._terminalTabs.forEach((t, i) => t.setVisible(i === query.tabIndex)); - - // Only fire the event if there was a change - if (didTabChange) { - this._onActiveTabChanged.fire(); - } - } - - public setActiveTabToNext(): void { - if (this._terminalTabs.length <= 1) { - return; - } - let newIndex = this._activeTabIndex + 1; - if (newIndex >= this._terminalTabs.length) { - newIndex = 0; - } - this.setActiveTabByIndex(newIndex); - } - - public setActiveTabToPrevious(): void { - if (this._terminalTabs.length <= 1) { - return; - } - let newIndex = this._activeTabIndex - 1; - if (newIndex < 0) { - newIndex = this._terminalTabs.length - 1; - } - this.setActiveTabByIndex(newIndex); - } - - public splitInstance(instanceToSplit: ITerminalInstance, shellLaunchConfig: IShellLaunchConfig = {}): ITerminalInstance | null { - const tab = this._getTabForInstance(instanceToSplit); - if (!tab) { - return null; - } - - const instance = tab.split(shellLaunchConfig); - - this._initInstanceListeners(instance); - this._onInstancesChanged.fire(); - - this._terminalTabs.forEach((t, i) => t.setVisible(i === this._activeTabIndex)); - return instance; - } - - protected _initInstanceListeners(instance: ITerminalInstance): void { - instance.addDisposable(instance.onDisposed(this._onInstanceDisposed.fire, this._onInstanceDisposed)); - instance.addDisposable(instance.onTitleChanged(this._onInstanceTitleChanged.fire, this._onInstanceTitleChanged)); - instance.addDisposable(instance.onProcessIdReady(this._onInstanceProcessIdReady.fire, this._onInstanceProcessIdReady)); - instance.addDisposable(instance.onLinksReady(this._onInstanceLinksReady.fire, this._onInstanceLinksReady)); - instance.addDisposable(instance.onDimensionsChanged(() => { - this._onInstanceDimensionsChanged.fire(instance); - if (this.configHelper.config.enablePersistentSessions && this.isProcessSupportRegistered) { - !!this._environmentService.remoteAuthority ? this._updateRemoteState() : this._updateLocalState(); - } - })); - instance.addDisposable(instance.onMaximumDimensionsChanged(() => this._onInstanceMaximumDimensionsChanged.fire(instance))); - instance.addDisposable(instance.onFocus(this._onActiveInstanceChanged.fire, this._onActiveInstanceChanged)); - } - - public registerProcessSupport(isSupported: boolean): void { - if (!isSupported) { - return; - } - this._processSupportContextKey.set(isSupported); - this._onDidRegisterProcessSupport.fire(); - } - - public registerLinkProvider(linkProvider: ITerminalExternalLinkProvider): IDisposable { - const disposables: IDisposable[] = []; - this._linkProviders.add(linkProvider); - for (const instance of this.terminalInstances) { - if (instance.areLinksReady) { - disposables.push(instance.registerLinkProvider(linkProvider)); - } - } - this._linkProviderDisposables.set(linkProvider, disposables); - return { - dispose: () => { - const disposables = this._linkProviderDisposables.get(linkProvider) || []; - for (const disposable of disposables) { - disposable.dispose(); - } - this._linkProviders.delete(linkProvider); - } - }; - } - - private _setInstanceLinkProviders(instance: ITerminalInstance): void { - for (const linkProvider of this._linkProviders) { - const disposables = this._linkProviderDisposables.get(linkProvider); - const provider = instance.registerLinkProvider(linkProvider); - disposables?.push(provider); - } - } - - private _getTabForInstance(instance: ITerminalInstance): ITerminalTab | undefined { - return this._terminalTabs.find(tab => tab.terminalInstances.indexOf(instance) !== -1); - } - - public async showPanel(focus?: boolean): Promise { - const pane = this._viewsService.getActiveViewWithId(TERMINAL_VIEW_ID) as TerminalViewPane; - if (!pane) { - await this._viewsService.openView(TERMINAL_VIEW_ID, focus); - } - if (focus) { - // Do the focus call asynchronously as going through the - // command palette will force editor focus - await timeout(0); - const instance = this.getActiveInstance(); - if (instance) { - await instance.focusWhenReady(true); - } - } - } - - private _getIndexFromId(terminalId: number): number { - let terminalIndex = -1; - this.terminalInstances.forEach((terminalInstance, i) => { - if (terminalInstance.instanceId === terminalId) { - terminalIndex = i; - } - }); - if (terminalIndex === -1) { - throw new Error(`Terminal with ID ${terminalId} does not exist (has it already been disposed?)`); - } - return terminalIndex; - } - - public async manageWorkspaceShellPermissions(): Promise { - const allowItem: IQuickPickItem = { label: nls.localize('workbench.action.terminal.allowWorkspaceShell', "Allow Workspace Shell Configuration") }; - const disallowItem: IQuickPickItem = { label: nls.localize('workbench.action.terminal.disallowWorkspaceShell', "Disallow Workspace Shell Configuration") }; - const value = await this._quickInputService.pick([allowItem, disallowItem], { canPickMany: false }); - if (!value) { - return; - } - this.configHelper.setWorkspaceShellAllowed(value === allowItem); - } - - protected async _showTerminalCloseConfirmation(): Promise { - let message: string; - if (this.terminalInstances.length === 1) { - message = nls.localize('terminalService.terminalCloseConfirmationSingular', "There is an active terminal session, do you want to kill it?"); - } else { - message = nls.localize('terminalService.terminalCloseConfirmationPlural', "There are {0} active terminal sessions, do you want to kill them?", this.terminalInstances.length); - } - const res = await this._dialogService.confirm({ - message, - type: 'warning', - }); - return !res.confirmed; - } - - public preparePathForTerminalAsync(originalPath: string, executable: string, title: string, shellType: TerminalShellType): Promise { - return new Promise(c => { - if (!executable) { - c(originalPath); - return; - } - - const hasSpace = originalPath.indexOf(' ') !== -1; - const hasParens = originalPath.indexOf('(') !== -1 || originalPath.indexOf(')') !== -1; - - const pathBasename = basename(executable, '.exe'); - const isPowerShell = pathBasename === 'pwsh' || - title === 'pwsh' || - pathBasename === 'powershell' || - title === 'powershell'; - - if (isPowerShell && (hasSpace || originalPath.indexOf('\'') !== -1)) { - c(`& '${originalPath.replace(/'/g, '\'\'')}'`); - return; - } - - if (hasParens && isPowerShell) { - c(`& '${originalPath}'`); - return; - } - - if (isWindows) { - // 17063 is the build number where wsl path was introduced. - // Update Windows uriPath to be executed in WSL. - if (shellType !== undefined) { - if (shellType === WindowsShellType.GitBash) { - c(originalPath.replace(/\\/g, '/')); - return; - } - else if (shellType === WindowsShellType.Wsl) { - if (this._nativeWindowsDelegate && this._nativeWindowsDelegate.getWindowsBuildNumber() >= 17063) { - c(this._nativeWindowsDelegate.getWslPath(originalPath)); - } else { - c(originalPath.replace(/\\/g, '/')); - } - return; - } - - if (hasSpace) { - c('"' + originalPath + '"'); - } else { - c(originalPath); - } - } else { - const lowerExecutable = executable.toLowerCase(); - if (this._nativeWindowsDelegate && this._nativeWindowsDelegate.getWindowsBuildNumber() >= 17063 && - (lowerExecutable.indexOf('wsl') !== -1 || (lowerExecutable.indexOf('bash.exe') !== -1 && lowerExecutable.toLowerCase().indexOf('git') === -1))) { - c(this._nativeWindowsDelegate.getWslPath(originalPath)); - return; - } else if (hasSpace) { - c('"' + originalPath + '"'); - } else { - c(originalPath); - } - } - - return; - } - - c(escapeNonWindowsPath(originalPath)); - }); - } - - private async _getPlatformKey(): Promise { - const env = await this._remoteAgentService.getEnvironment(); - if (env) { - return env.os === OperatingSystem.Windows ? 'windows' : (env.os === OperatingSystem.Macintosh ? 'osx' : 'linux'); - } - return isWindows ? 'windows' : (isMacintosh ? 'osx' : 'linux'); - } - - public async selectDefaultProfile(): Promise { - const profiles = await this._detectProfiles(false); - const platformKey = await this._getPlatformKey(); - - const options: IPickOptions = { - placeHolder: nls.localize('terminal.integrated.chooseWindowsShell', "Select your default terminal profile"), - onDidTriggerItemButton: async (context) => { - const configKey = `terminal.integrated.profiles.${platformKey}`; - const configProfiles = this._configurationService.inspect<{ [key: string]: ITerminalProfileObject }>(configKey); - const existingProfiles = configProfiles.userValue ? Object.keys(configProfiles.userValue) : []; - const name = await this._quickInputService.input({ - prompt: nls.localize('enterTerminalProfileName', "Enter terminal profile name"), - value: context.item.profile.profileName, - validateInput: async input => { - if (existingProfiles.includes(input)) { - return nls.localize('terminalProfileAlreadyExists', "A terminal profile already exists with that name"); - } - return undefined; - } - }); - if (!name) { - return; - } - const newConfigValue: { [key: string]: ITerminalProfileObject } = { ...configProfiles.userValue } ?? {}; - newConfigValue[name] = { - path: context.item.profile.path, - args: context.item.profile.args - }; - await this._configurationService.updateValue(configKey, newConfigValue, ConfigurationTarget.USER); - } - }; - - // Build quick pick items - const quickPickItems: (IProfileQuickPickItem | IQuickPickSeparator)[] = []; - const configProfiles = profiles.filter(e => !e.isAutoDetected); - const autoDetectedProfiles = profiles.filter(e => e.isAutoDetected); - if (configProfiles.length > 0) { - quickPickItems.push({ type: 'separator', label: nls.localize('terminalProfiles', "profiles") }); - quickPickItems.push(...configProfiles.map(e => this._createProfileQuickPickItem(e))); - } - if (configProfiles.length > 0) { - quickPickItems.push({ type: 'separator', label: nls.localize('terminalProfiles.detected', "detected") }); - quickPickItems.push(...autoDetectedProfiles.map(e => this._createProfileQuickPickItem(e))); - } - - const value = await this._quickInputService.pick(quickPickItems, options); - if (!value) { - return; - } - await this._configurationService.updateValue(`terminal.integrated.shell.${platformKey}`, value.profile.path, ConfigurationTarget.USER); - await this._configurationService.updateValue(`terminal.integrated.shellArgs.${platformKey}`, value.profile.args, ConfigurationTarget.USER); - } - - private _createProfileQuickPickItem(profile: ITerminalProfile): IProfileQuickPickItem { - const buttons: IQuickInputButton[] = [{ - iconClass: ThemeIcon.asClassName(configureTerminalProfileIcon), - tooltip: nls.localize('createQuickLaunchProfile', "Configure Terminal Profile") - }]; - if (profile.args) { - if (typeof profile.args === 'string') { - return { label: profile.profileName, description: `${profile.path} ${profile.args}`, profile, buttons }; - } - const argsString = profile.args.map(e => { - if (e.includes(' ')) { - return `"${e.replace('/"/g', '\\"')}"`; - } - return e; - }).join(' '); - return { label: profile.profileName, description: `${profile.path} ${argsString}`, profile, buttons }; - } - return { label: profile.profileName, description: profile.path, profile, buttons }; - } - - public createInstance(container: HTMLElement | undefined, shellLaunchConfig: IShellLaunchConfig): ITerminalInstance { - const instance = this._instantiationService.createInstance(TerminalInstance, - this._terminalFocusContextKey, - this._terminalShellTypeContextKey, - this._terminalAltBufferActiveContextKey, - this._configHelper, - container, - shellLaunchConfig - ); - this._onInstanceCreated.fire(instance); - return instance; - } - - public createTerminal(shell: IShellLaunchConfig = {}): ITerminalInstance { - if (!shell.isExtensionCustomPtyTerminal && !this.isProcessSupportRegistered) { - throw new Error('Could not create terminal when process support is not registered'); - } - if (shell.hideFromUser) { - const instance = this.createInstance(undefined, shell); - this._backgroundedTerminalInstances.push(instance); - this._initInstanceListeners(instance); - return instance; - } - - const terminalTab = this._instantiationService.createInstance(TerminalTab, this._terminalContainer, shell); - this._terminalTabs.push(terminalTab); - - const instance = terminalTab.terminalInstances[0]; - - terminalTab.addDisposable(terminalTab.onDisposed(this._onTabDisposed.fire, this._onTabDisposed)); - terminalTab.addDisposable(terminalTab.onInstancesChanged(this._onInstancesChanged.fire, this._onInstancesChanged)); - this._initInstanceListeners(instance); - if (this.terminalInstances.length === 1) { - // It's the first instance so it should be made active automatically - this.setActiveInstanceByIndex(0); - } - this._onInstancesChanged.fire(); - return instance; - } - - protected _showBackgroundTerminal(instance: ITerminalInstance): void { - this._backgroundedTerminalInstances.splice(this._backgroundedTerminalInstances.indexOf(instance), 1); - instance.shellLaunchConfig.hideFromUser = false; - const terminalTab = this._instantiationService.createInstance(TerminalTab, this._terminalContainer, instance); - this._terminalTabs.push(terminalTab); - terminalTab.addDisposable(terminalTab.onDisposed(this._onTabDisposed.fire, this._onTabDisposed)); - terminalTab.addDisposable(terminalTab.onInstancesChanged(this._onInstancesChanged.fire, this._onInstancesChanged)); - if (this.terminalInstances.length === 1) { - // It's the first instance so it should be made active automatically - this.setActiveInstanceByIndex(0); - } - this._onInstancesChanged.fire(); - } - - public async focusFindWidget(): Promise { - await this.showPanel(false); - const pane = this._viewsService.getActiveViewWithId(TERMINAL_VIEW_ID) as TerminalViewPane; - pane.focusFindWidget(); - this._findWidgetVisible.set(true); - } - - public hideFindWidget(): void { - const pane = this._viewsService.getActiveViewWithId(TERMINAL_VIEW_ID) as TerminalViewPane; - if (pane) { - pane.hideFindWidget(); - this._findWidgetVisible.reset(); - pane.focus(); - } - } - - public findNext(): void { - const pane = this._viewsService.getActiveViewWithId(TERMINAL_VIEW_ID) as TerminalViewPane; - if (pane) { - pane.showFindWidget(); - pane.getFindWidget().find(false); - } - } - - public findPrevious(): void { - const pane = this._viewsService.getActiveViewWithId(TERMINAL_VIEW_ID) as TerminalViewPane; - if (pane) { - pane.showFindWidget(); - pane.getFindWidget().find(true); - } - } - - public async setContainers(panelContainer: HTMLElement, terminalContainer: HTMLElement): Promise { - this._configHelper.panelContainer = panelContainer; - this._terminalContainer = terminalContainer; - this._terminalTabs.forEach(tab => tab.attachToElement(terminalContainer)); - } - - public hidePanel(): void { - // Hide the panel if the terminal is in the panel and it has no sibling views - const location = this._viewDescriptorService.getViewLocationById(TERMINAL_VIEW_ID); - if (location === ViewContainerLocation.Panel) { - const panel = this._viewDescriptorService.getViewContainerByViewId(TERMINAL_VIEW_ID); - if (panel && this._viewDescriptorService.getViewContainerModel(panel).activeViewDescriptors.length === 1) { - this._layoutService.setPanelHidden(true); - } - } - } -} - -interface IProfileQuickPickItem extends IQuickPickItem { - profile: ITerminalProfile; -} diff --git a/vscode-web-github1s/src/vs/workbench/contrib/url/browser/trustedDomains.ts b/vscode-web-github1s/src/vs/workbench/contrib/url/browser/trustedDomains.ts deleted file mode 100644 index 275fcf903..000000000 --- a/vscode-web-github1s/src/vs/workbench/contrib/url/browser/trustedDomains.ts +++ /dev/null @@ -1,251 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -import { URI } from 'vs/base/common/uri'; -import { localize } from 'vs/nls'; -import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { IQuickInputService, IQuickPickItem } from 'vs/platform/quickinput/common/quickInput'; -import { IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage'; -import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { IAuthenticationService } from 'vs/workbench/services/authentication/browser/authenticationService'; -import { IFileService } from 'vs/platform/files/common/files'; -import { ITextFileService } from 'vs/workbench/services/textfile/common/textfiles'; -import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace'; -import { INotificationService, Severity } from 'vs/platform/notification/common/notification'; -import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService'; - -const TRUSTED_DOMAINS_URI = URI.parse('trustedDomains:/Trusted Domains'); - -export const TRUSTED_DOMAINS_STORAGE_KEY = 'http.linkProtectionTrustedDomains'; -export const TRUSTED_DOMAINS_CONTENT_STORAGE_KEY = 'http.linkProtectionTrustedDomainsContent'; - -export const manageTrustedDomainSettingsCommand = { - id: 'workbench.action.manageTrustedDomain', - description: { - description: localize('trustedDomain.manageTrustedDomain', 'Manage Trusted Domains'), - args: [] - }, - handler: async (accessor: ServicesAccessor) => { - const editorService = accessor.get(IEditorService); - editorService.openEditor({ resource: TRUSTED_DOMAINS_URI, mode: 'jsonc', options: { pinned: true } }); - return; - } -}; - -type ConfigureTrustedDomainsQuickPickItem = IQuickPickItem & ({ id: 'manage'; } | { id: 'trust'; toTrust: string }); - -type ConfigureTrustedDomainsChoiceClassification = { - choice: { classification: 'SystemMetaData', purpose: 'FeatureInsight' }; -}; - -export async function configureOpenerTrustedDomainsHandler( - trustedDomains: string[], - domainToConfigure: string, - resource: URI, - quickInputService: IQuickInputService, - storageService: IStorageService, - editorService: IEditorService, - telemetryService: ITelemetryService, - notificationService: INotificationService, - clipboardService: IClipboardService, -) { - const parsedDomainToConfigure = URI.parse(domainToConfigure); - // below codes are changed by github1s typo - const toplevelDomainSegments = parsedDomainToConfigure.authority.split('.'); - const domainEnd = toplevelDomainSegments.slice(toplevelDomainSegments.length - 2).join('.'); - // above codes are changed by github1s - const topLevelDomain = '*.' + domainEnd; - const options: ConfigureTrustedDomainsQuickPickItem[] = []; - - options.push({ - type: 'item', - label: localize('trustedDomain.trustDomain', 'Trust {0}', domainToConfigure), - id: 'trust', - toTrust: domainToConfigure, - picked: true - }); - - const isIP = - // below codes are changed by github1s typo - toplevelDomainSegments.length === 4 && - toplevelDomainSegments.every(segment => - // above codes are changed by github1s - Number.isInteger(+segment) || Number.isInteger(+segment.split(':')[0])); - - if (isIP) { - if (parsedDomainToConfigure.authority.includes(':')) { - const base = parsedDomainToConfigure.authority.split(':')[0]; - options.push({ - type: 'item', - label: localize('trustedDomain.trustAllPorts', 'Trust {0} on all ports', base), - toTrust: base + ':*', - id: 'trust' - }); - } - } else { - options.push({ - type: 'item', - label: localize('trustedDomain.trustSubDomain', 'Trust {0} and all its subdomains', domainEnd), - toTrust: topLevelDomain, - id: 'trust' - }); - } - - options.push({ - type: 'item', - label: localize('trustedDomain.trustAllDomains', 'Trust all domains (disables link protection)'), - toTrust: '*', - id: 'trust' - }); - options.push({ - type: 'item', - label: localize('trustedDomain.manageTrustedDomains', 'Manage Trusted Domains'), - id: 'manage' - }); - - const pickedResult = await quickInputService.pick( - options, { activeItem: options[0] } - ); - - if (pickedResult && pickedResult.id) { - telemetryService.publicLog2<{ choice: string }, ConfigureTrustedDomainsChoiceClassification>( - 'trustedDomains.configureTrustedDomainsQuickPickChoice', - { choice: pickedResult.id } - ); - - switch (pickedResult.id) { - case 'manage': - await editorService.openEditor({ - resource: TRUSTED_DOMAINS_URI, - mode: 'jsonc', - options: { pinned: true } - }); - notificationService.prompt(Severity.Info, localize('configuringURL', "Configuring trust for: {0}", resource.toString()), - [{ label: 'Copy', run: () => clipboardService.writeText(resource.toString()) }]); - return trustedDomains; - case 'trust': - const itemToTrust = pickedResult.toTrust; - if (trustedDomains.indexOf(itemToTrust) === -1) { - storageService.remove(TRUSTED_DOMAINS_CONTENT_STORAGE_KEY, StorageScope.GLOBAL); - storageService.store( - TRUSTED_DOMAINS_STORAGE_KEY, - JSON.stringify([...trustedDomains, itemToTrust]), - StorageScope.GLOBAL, - StorageTarget.USER - ); - - return [...trustedDomains, itemToTrust]; - } - } - } - - return []; -} - -// Exported for testing. -export function extractGitHubRemotesFromGitConfig(gitConfig: string): string[] { - const domains = new Set(); - let match: RegExpExecArray | null; - - const RemoteMatcher = /^\s*url\s*=\s*(?:git@|https:\/\/)github\.com(?::|\/)(\S*)\s*$/mg; - while (match = RemoteMatcher.exec(gitConfig)) { - const repo = match[1].replace(/\.git$/, ''); - if (repo) { - domains.add(`https://github.com/${repo}/`); - } - } - return [...domains]; -} - -async function getRemotes(fileService: IFileService, textFileService: ITextFileService, contextService: IWorkspaceContextService): Promise { - const workspaceUris = contextService.getWorkspace().folders.map(folder => folder.uri); - const domains = await Promise.race([ - new Promise(resolve => setTimeout(() => resolve([]), 2000)), - Promise.all(workspaceUris.map(async workspaceUri => { - const path = workspaceUri.path; - const uri = workspaceUri.with({ path: `${path !== '/' ? path : ''}/.git/config` }); - const exists = await fileService.exists(uri); - if (!exists) { - return []; - } - const gitConfig = (await (textFileService.read(uri, { acceptTextOnly: true }).catch(() => ({ value: '' })))).value; - return extractGitHubRemotesFromGitConfig(gitConfig); - }))]); - - const set = domains.reduce((set, list) => list.reduce((set, item) => set.add(item), set), new Set()); - return [...set]; -} - -export interface IStaticTrustedDomains { - readonly defaultTrustedDomains: string[]; - readonly trustedDomains: string[]; -} - -export interface ITrustedDomains extends IStaticTrustedDomains { - readonly userDomains: string[]; - readonly workspaceDomains: string[]; -} - -export async function readTrustedDomains(accessor: ServicesAccessor): Promise { - const { defaultTrustedDomains, trustedDomains } = readStaticTrustedDomains(accessor); - const [workspaceDomains, userDomains] = await Promise.all([readWorkspaceTrustedDomains(accessor), readAuthenticationTrustedDomains(accessor)]); - return { - workspaceDomains, - userDomains, - defaultTrustedDomains, - trustedDomains, - }; -} - -export async function readWorkspaceTrustedDomains(accessor: ServicesAccessor): Promise { - const fileService = accessor.get(IFileService); - const textFileService = accessor.get(ITextFileService); - const workspaceContextService = accessor.get(IWorkspaceContextService); - return getRemotes(fileService, textFileService, workspaceContextService); -} - -export async function readAuthenticationTrustedDomains(accessor: ServicesAccessor): Promise { - const authenticationService = accessor.get(IAuthenticationService); - return authenticationService.isAuthenticationProviderRegistered('github') && ((await authenticationService.getSessions('github')) ?? []).length > 0 - ? [`https://github.com`] - : []; -} - -// below codes are changed by github1s -const github1sDefaultTrustedDomains = [ - '*.github.com', - '*.microsoft.com', - '*.github1s.com', - '*.vercel.com', - '*.sourcegraph.com', - '*.gitpod.io', -]; -// above codes are changed by github1s - -export function readStaticTrustedDomains(accessor: ServicesAccessor): IStaticTrustedDomains { - const storageService = accessor.get(IStorageService); - const productService = accessor.get(IProductService); - - // below codes are changed by github1s - const defaultTrustedDomains: string[] = productService.linkProtectionTrustedDomains - ? [...productService.linkProtectionTrustedDomains, ...github1sDefaultTrustedDomains] - : [...github1sDefaultTrustedDomains]; - // above codes are changed by github1s - - let trustedDomains: string[] = []; - try { - const trustedDomainsSrc = storageService.get(TRUSTED_DOMAINS_STORAGE_KEY, StorageScope.GLOBAL); - if (trustedDomainsSrc) { - trustedDomains = JSON.parse(trustedDomainsSrc); - } - } catch (err) { } - - return { - defaultTrustedDomains, - trustedDomains, - }; -} diff --git a/vscode-web-github1s/src/vs/workbench/contrib/webview/browser/pre/main.js b/vscode-web-github1s/src/vs/workbench/contrib/webview/browser/pre/main.js deleted file mode 100644 index 8da52f898..000000000 --- a/vscode-web-github1s/src/vs/workbench/contrib/webview/browser/pre/main.js +++ /dev/null @@ -1,743 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ -// @ts-check - -/** - * @typedef {{ - * postMessage: (channel: string, data?: any) => void, - * onMessage: (channel: string, handler: any) => void, - * focusIframeOnCreate?: boolean, - * ready?: Promise, - * onIframeLoaded?: (iframe: HTMLIFrameElement) => void, - * fakeLoad?: boolean, - * rewriteCSP: (existingCSP: string, endpoint?: string) => string, - * onElectron?: boolean, - * useParentPostMessage: boolean, - * }} WebviewHost - */ - -(function () { - 'use strict'; - - const isSafari = navigator.vendor && navigator.vendor.indexOf('Apple') > -1 && - navigator.userAgent && - navigator.userAgent.indexOf('CriOS') === -1 && - navigator.userAgent.indexOf('FxiOS') === -1; - - /** - * Use polling to track focus of main webview and iframes within the webview - * - * @param {Object} handlers - * @param {() => void} handlers.onFocus - * @param {() => void} handlers.onBlur - */ - const trackFocus = ({ onFocus, onBlur }) => { - const interval = 50; - let isFocused = document.hasFocus(); - setInterval(() => { - const isCurrentlyFocused = document.hasFocus(); - if (isCurrentlyFocused === isFocused) { - return; - } - isFocused = isCurrentlyFocused; - if (isCurrentlyFocused) { - onFocus(); - } else { - onBlur(); - } - }, interval); - }; - - const getActiveFrame = () => { - return /** @type {HTMLIFrameElement} */ (document.getElementById('active-frame')); - }; - - const getPendingFrame = () => { - return /** @type {HTMLIFrameElement} */ (document.getElementById('pending-frame')); - }; - - const vscodePostMessageFuncName = '__vscode_post_message__'; - - const defaultCssRules = ` - html { - scrollbar-color: var(--vscode-scrollbarSlider-background) var(--vscode-editor-background); - } - - body { - background-color: transparent; - color: var(--vscode-editor-foreground); - font-family: var(--vscode-font-family); - font-weight: var(--vscode-font-weight); - font-size: var(--vscode-font-size); - margin: 0; - padding: 0 20px; - } - - img { - max-width: 100%; - max-height: 100%; - } - - a { - color: var(--vscode-textLink-foreground); - } - - a:hover { - color: var(--vscode-textLink-activeForeground); - } - - a:focus, - input:focus, - select:focus, - textarea:focus { - outline: 1px solid -webkit-focus-ring-color; - outline-offset: -1px; - } - - code { - color: var(--vscode-textPreformat-foreground); - } - - blockquote { - background: var(--vscode-textBlockQuote-background); - border-color: var(--vscode-textBlockQuote-border); - } - - kbd { - color: var(--vscode-editor-foreground); - border-radius: 3px; - vertical-align: middle; - padding: 1px 3px; - - background-color: hsla(0,0%,50%,.17); - border: 1px solid rgba(71,71,71,.4); - border-bottom-color: rgba(88,88,88,.4); - box-shadow: inset 0 -1px 0 rgba(88,88,88,.4); - } - .vscode-light kbd { - background-color: hsla(0,0%,87%,.5); - border: 1px solid hsla(0,0%,80%,.7); - border-bottom-color: hsla(0,0%,73%,.7); - box-shadow: inset 0 -1px 0 hsla(0,0%,73%,.7); - } - - ::-webkit-scrollbar { - width: 10px; - height: 10px; - } - - ::-webkit-scrollbar-corner { - background-color: var(--vscode-editor-background); - } - - ::-webkit-scrollbar-thumb { - background-color: var(--vscode-scrollbarSlider-background); - } - ::-webkit-scrollbar-thumb:hover { - background-color: var(--vscode-scrollbarSlider-hoverBackground); - } - ::-webkit-scrollbar-thumb:active { - background-color: var(--vscode-scrollbarSlider-activeBackground); - }`; - - /** - * @param {boolean} allowMultipleAPIAcquire - * @param {boolean} useParentPostMessage - * @param {*} [state] - * @return {string} - */ - function getVsCodeApiScript(allowMultipleAPIAcquire, useParentPostMessage, state) { - const encodedState = state ? encodeURIComponent(state) : undefined; - return ` - globalThis.acquireVsCodeApi = (function() { - const originalPostMessage = window.parent['${useParentPostMessage ? 'postMessage' : vscodePostMessageFuncName}'].bind(window.parent); - const doPostMessage = (channel, data) => { - ${useParentPostMessage - ? `originalPostMessage({ command: channel, data: data }, '*');` - : `originalPostMessage(channel, data);` - } - }; - - let acquired = false; - - let state = ${state ? `JSON.parse(decodeURIComponent("${encodedState}"))` : undefined}; - - return () => { - if (acquired && !${allowMultipleAPIAcquire}) { - throw new Error('An instance of the VS Code API has already been acquired'); - } - acquired = true; - return Object.freeze({ - postMessage: function(msg) { - doPostMessage('onmessage', msg); - }, - setState: function(newState) { - state = newState; - doPostMessage('do-update-state', JSON.stringify(newState)); - return newState; - }, - getState: function() { - return state; - } - }); - }; - })(); - delete window.parent; - delete window.top; - delete window.frameElement; - `; - } - - /** - * @param {WebviewHost} host - */ - function createWebviewManager(host) { - // state - let firstLoad = true; - let loadTimeout; - let pendingMessages = []; - - const initData = { - initialScrollProgress: undefined, - }; - - /** - * @param {HTMLDocument?} document - * @param {HTMLElement?} body - */ - const applyStyles = (document, body) => { - if (!document) { - return; - } - - if (body) { - body.classList.remove('vscode-light', 'vscode-dark', 'vscode-high-contrast'); - body.classList.add(initData.activeTheme); - - body.dataset.vscodeThemeKind = initData.activeTheme; - body.dataset.vscodeThemeName = initData.themeName || ''; - } - - if (initData.styles) { - const documentStyle = document.documentElement.style; - - // Remove stale properties - for (let i = documentStyle.length - 1; i >= 0; i--) { - const property = documentStyle[i]; - - // Don't remove properties that the webview might have added separately - if (property && property.startsWith('--vscode-')) { - documentStyle.removeProperty(property); - } - } - - // Re-add new properties - for (const variable of Object.keys(initData.styles)) { - documentStyle.setProperty(`--${variable}`, initData.styles[variable]); - } - } - }; - - /** - * @param {MouseEvent} event - */ - const handleInnerClick = (event) => { - if (!event || !event.view || !event.view.document) { - return; - } - - let baseElement = event.view.document.getElementsByTagName('base')[0]; - /** @type {any} */ - let node = event.target; - while (node) { - if (node.tagName && node.tagName.toLowerCase() === 'a' && node.href) { - if (node.getAttribute('href') === '#') { - event.view.scrollTo(0, 0); - } else if (node.hash && (node.getAttribute('href') === node.hash || (baseElement && node.href.indexOf(baseElement.href) >= 0))) { - let scrollTarget = event.view.document.getElementById(node.hash.substr(1, node.hash.length - 1)); - if (scrollTarget) { - scrollTarget.scrollIntoView(); - } - } else { - host.postMessage('did-click-link', node.href.baseVal || node.href); - } - event.preventDefault(); - break; - } - node = node.parentNode; - } - }; - - /** - * @param {MouseEvent} event - */ - const handleAuxClick = - (event) => { - // Prevent middle clicks opening a broken link in the browser - if (!event.view || !event.view.document) { - return; - } - - if (event.button === 1) { - let node = /** @type {any} */ (event.target); - while (node) { - if (node.tagName && node.tagName.toLowerCase() === 'a' && node.href) { - event.preventDefault(); - break; - } - node = node.parentNode; - } - } - }; - - /** - * @param {KeyboardEvent} e - */ - const handleInnerKeydown = (e) => { - // below codes are changed by github1s - // If the keypress would trigger a browser event, such as copy or paste or fuzzy, - // make sure we block the browser from dispatching it. Instead VS Code - // handles these events and will dispatch a copy/paste/fuzzy back to the webview - // if needed - if (isUndoRedo(e) || isFuzzySearch(e)) { - // above codes are changed by github1s - e.preventDefault(); - } else if (isCopyPasteOrCut(e)) { - if (host.onElectron) { - e.preventDefault(); - } else { - return; // let the browser handle this - } - } - - host.postMessage('did-keydown', { - key: e.key, - keyCode: e.keyCode, - code: e.code, - shiftKey: e.shiftKey, - altKey: e.altKey, - ctrlKey: e.ctrlKey, - metaKey: e.metaKey, - repeat: e.repeat - }); - }; - /** - * @param {KeyboardEvent} e - */ - const handleInnerUp = (e) => { - host.postMessage('did-keyup', { - key: e.key, - keyCode: e.keyCode, - code: e.code, - shiftKey: e.shiftKey, - altKey: e.altKey, - ctrlKey: e.ctrlKey, - metaKey: e.metaKey, - repeat: e.repeat - }); - }; - - /** - * @param {KeyboardEvent} e - * @return {boolean} - */ - function isCopyPasteOrCut(e) { - const hasMeta = e.ctrlKey || e.metaKey; - const shiftInsert = e.shiftKey && e.key.toLowerCase() === 'insert'; - return (hasMeta && ['c', 'v', 'x'].includes(e.key.toLowerCase())) || shiftInsert; - } - - /** - * @param {KeyboardEvent} e - * @return {boolean} - */ - function isUndoRedo(e) { - const hasMeta = e.ctrlKey || e.metaKey; - return hasMeta && ['z', 'y'].includes(e.key.toLowerCase()); - } - - // below codes are changed by github1s - /** - * @param {KeyboardEvent} e - * @return {boolean} - * modify-by-github1s, preventDefault when press ctrl/cmd+p - */ - function isFuzzySearch(e) { - const hasMeta = e.ctrlKey || e.metaKey; - return hasMeta && ['p'].includes(e.key); - } - // above codes are changed by github1s - - let isHandlingScroll = false; - - const handleWheel = (event) => { - if (isHandlingScroll) { - return; - } - - host.postMessage('did-scroll-wheel', { - deltaMode: event.deltaMode, - deltaX: event.deltaX, - deltaY: event.deltaY, - deltaZ: event.deltaZ, - detail: event.detail, - type: event.type - }); - }; - - const handleInnerScroll = (event) => { - if (!event.target || !event.target.body) { - return; - } - if (isHandlingScroll) { - return; - } - - const progress = event.currentTarget.scrollY / event.target.body.clientHeight; - if (isNaN(progress)) { - return; - } - - isHandlingScroll = true; - window.requestAnimationFrame(() => { - try { - host.postMessage('did-scroll', progress); - } catch (e) { - // noop - } - isHandlingScroll = false; - }); - }; - - /** - * @return {string} - */ - function toContentHtml(data) { - const options = data.options; - const text = data.contents; - const newDocument = new DOMParser().parseFromString(text, 'text/html'); - - newDocument.querySelectorAll('a').forEach(a => { - if (!a.title) { - a.title = a.getAttribute('href'); - } - }); - - // apply default script - if (options.allowScripts) { - const defaultScript = newDocument.createElement('script'); - defaultScript.id = '_vscodeApiScript'; - defaultScript.textContent = getVsCodeApiScript(options.allowMultipleAPIAcquire, host.useParentPostMessage, data.state); - newDocument.head.prepend(defaultScript); - } - - // apply default styles - const defaultStyles = newDocument.createElement('style'); - defaultStyles.id = '_defaultStyles'; - defaultStyles.textContent = defaultCssRules; - newDocument.head.prepend(defaultStyles); - - applyStyles(newDocument, newDocument.body); - - // Check for CSP - const csp = newDocument.querySelector('meta[http-equiv="Content-Security-Policy"]'); - if (!csp) { - host.postMessage('no-csp-found'); - } else { - try { - csp.setAttribute('content', host.rewriteCSP(csp.getAttribute('content'), data.endpoint)); - } catch (e) { - console.error(`Could not rewrite csp: ${e}`); - } - } - - // set DOCTYPE for newDocument explicitly as DOMParser.parseFromString strips it off - // and DOCTYPE is needed in the iframe to ensure that the user agent stylesheet is correctly overridden - return '\n' + newDocument.documentElement.outerHTML; - } - - document.addEventListener('DOMContentLoaded', () => { - const idMatch = document.location.search.match(/\bid=([\w-]+)/); - const ID = idMatch ? idMatch[1] : undefined; - if (!document.body) { - return; - } - - host.onMessage('styles', (_event, data) => { - initData.styles = data.styles; - initData.activeTheme = data.activeTheme; - initData.themeName = data.themeName; - - const target = getActiveFrame(); - if (!target) { - return; - } - - if (target.contentDocument) { - applyStyles(target.contentDocument, target.contentDocument.body); - } - }); - - // propagate focus - host.onMessage('focus', () => { - const activeFrame = getActiveFrame(); - if (!activeFrame || !activeFrame.contentWindow) { - // Focus the top level webview instead - window.focus(); - return; - } - - if (document.activeElement === activeFrame) { - // We are already focused on the iframe (or one of its children) so no need - // to refocus. - return; - } - - activeFrame.contentWindow.focus(); - }); - - // update iframe-contents - let updateId = 0; - host.onMessage('content', async (_event, data) => { - const currentUpdateId = ++updateId; - await host.ready; - if (currentUpdateId !== updateId) { - return; - } - - const options = data.options; - const newDocument = toContentHtml(data); - - const frame = getActiveFrame(); - const wasFirstLoad = firstLoad; - // keep current scrollY around and use later - let setInitialScrollPosition; - if (firstLoad) { - firstLoad = false; - setInitialScrollPosition = (body, window) => { - if (!isNaN(initData.initialScrollProgress)) { - if (window.scrollY === 0) { - window.scroll(0, body.clientHeight * initData.initialScrollProgress); - } - } - }; - } else { - const scrollY = frame && frame.contentDocument && frame.contentDocument.body ? frame.contentWindow.scrollY : 0; - setInitialScrollPosition = (body, window) => { - if (window.scrollY === 0) { - window.scroll(0, scrollY); - } - }; - } - - // Clean up old pending frames and set current one as new one - const previousPendingFrame = getPendingFrame(); - if (previousPendingFrame) { - previousPendingFrame.setAttribute('id', ''); - document.body.removeChild(previousPendingFrame); - } - if (!wasFirstLoad) { - pendingMessages = []; - } - - const newFrame = document.createElement('iframe'); - newFrame.setAttribute('id', 'pending-frame'); - newFrame.setAttribute('frameborder', '0'); - newFrame.setAttribute('sandbox', options.allowScripts ? 'allow-scripts allow-forms allow-same-origin allow-pointer-lock allow-downloads' : 'allow-same-origin allow-pointer-lock'); - newFrame.setAttribute('allow', options.allowScripts ? 'clipboard-read; clipboard-write;' : ''); - if (host.fakeLoad) { - // We should just be able to use srcdoc, but I wasn't - // seeing the service worker applying properly. - // Fake load an empty on the correct origin and then write real html - // into it to get around this. - newFrame.src = `./fake.html?id=${ID}`; - } else { - newFrame.src = `about:blank?webviewFrame`; - } - newFrame.style.cssText = 'display: block; margin: 0; overflow: hidden; position: absolute; width: 100%; height: 100%; visibility: hidden'; - document.body.appendChild(newFrame); - - if (!host.fakeLoad) { - // write new content onto iframe - newFrame.contentDocument.open(); - } - - /** - * @param {Document} contentDocument - */ - function onFrameLoaded(contentDocument) { - // Workaround for https://bugs.chromium.org/p/chromium/issues/detail?id=978325 - setTimeout(() => { - if (host.fakeLoad) { - contentDocument.open(); - contentDocument.write(newDocument); - contentDocument.close(); - hookupOnLoadHandlers(newFrame); - } - if (contentDocument) { - applyStyles(contentDocument, contentDocument.body); - } - }, 0); - } - - if (host.fakeLoad && !options.allowScripts && isSafari) { - // On Safari for iframes with scripts disabled, the `DOMContentLoaded` never seems to be fired. - // Use polling instead. - const interval = setInterval(() => { - // If the frame is no longer mounted, loading has stopped - if (!newFrame.parentElement) { - clearInterval(interval); - return; - } - - if (newFrame.contentDocument.readyState !== 'loading') { - clearInterval(interval); - onFrameLoaded(newFrame.contentDocument); - } - }, 10); - } else { - newFrame.contentWindow.addEventListener('DOMContentLoaded', e => { - const contentDocument = e.target ? (/** @type {HTMLDocument} */ (e.target)) : undefined; - onFrameLoaded(contentDocument); - }); - } - - /** - * @param {Document} contentDocument - * @param {Window} contentWindow - */ - const onLoad = (contentDocument, contentWindow) => { - if (contentDocument && contentDocument.body) { - // Workaround for https://github.com/microsoft/vscode/issues/12865 - // check new scrollY and reset if necessary - setInitialScrollPosition(contentDocument.body, contentWindow); - } - - const newFrame = getPendingFrame(); - if (newFrame && newFrame.contentDocument && newFrame.contentDocument === contentDocument) { - const oldActiveFrame = getActiveFrame(); - if (oldActiveFrame) { - document.body.removeChild(oldActiveFrame); - } - // Styles may have changed since we created the element. Make sure we re-style - applyStyles(newFrame.contentDocument, newFrame.contentDocument.body); - newFrame.setAttribute('id', 'active-frame'); - newFrame.style.visibility = 'visible'; - if (host.focusIframeOnCreate) { - newFrame.contentWindow.focus(); - } - - contentWindow.addEventListener('scroll', handleInnerScroll); - contentWindow.addEventListener('wheel', handleWheel); - - if (document.hasFocus()) { - contentWindow.focus(); - } - - pendingMessages.forEach((data) => { - contentWindow.postMessage(data, '*'); - }); - pendingMessages = []; - } - - host.postMessage('did-load'); - }; - - /** - * @param {HTMLIFrameElement} newFrame - */ - function hookupOnLoadHandlers(newFrame) { - clearTimeout(loadTimeout); - loadTimeout = undefined; - loadTimeout = setTimeout(() => { - clearTimeout(loadTimeout); - loadTimeout = undefined; - onLoad(newFrame.contentDocument, newFrame.contentWindow); - }, 200); - - newFrame.contentWindow.addEventListener('load', function (e) { - const contentDocument = /** @type {Document} */ (e.target); - - if (loadTimeout) { - clearTimeout(loadTimeout); - loadTimeout = undefined; - onLoad(contentDocument, this); - } - }); - - // Bubble out various events - newFrame.contentWindow.addEventListener('click', handleInnerClick); - newFrame.contentWindow.addEventListener('auxclick', handleAuxClick); - newFrame.contentWindow.addEventListener('keydown', handleInnerKeydown); - newFrame.contentWindow.addEventListener('keyup', handleInnerUp); - newFrame.contentWindow.addEventListener('contextmenu', e => e.preventDefault()); - - if (host.onIframeLoaded) { - host.onIframeLoaded(newFrame); - } - } - - if (!host.fakeLoad) { - hookupOnLoadHandlers(newFrame); - } - - if (!host.fakeLoad) { - newFrame.contentDocument.write(newDocument); - newFrame.contentDocument.close(); - } - - host.postMessage('did-set-content', undefined); - }); - - // Forward message to the embedded iframe - host.onMessage('message', (_event, data) => { - const pending = getPendingFrame(); - if (!pending) { - const target = getActiveFrame(); - if (target) { - target.contentWindow.postMessage(data, '*'); - return; - } - } - pendingMessages.push(data); - }); - - host.onMessage('initial-scroll-position', (_event, progress) => { - initData.initialScrollProgress = progress; - }); - - host.onMessage('execCommand', (_event, data) => { - const target = getActiveFrame(); - if (!target) { - return; - } - target.contentDocument.execCommand(data); - }); - - trackFocus({ - onFocus: () => host.postMessage('did-focus'), - onBlur: () => host.postMessage('did-blur') - }); - - (/** @type {any} */ (window))[vscodePostMessageFuncName] = (command, data) => { - switch (command) { - case 'onmessage': - case 'do-update-state': - host.postMessage(command, data); - break; - } - }; - - // signal ready - host.postMessage('webview-ready', {}); - }); - } - - if (typeof module !== 'undefined') { - module.exports = createWebviewManager; - } else { - (/** @type {any} */ (window)).createWebviewManager = createWebviewManager; - } -}()); diff --git a/vscode-web-github1s/src/vs/workbench/contrib/welcome/gettingStarted/browser/gettingStarted.ts b/vscode-web-github1s/src/vs/workbench/contrib/welcome/gettingStarted/browser/gettingStarted.ts new file mode 100644 index 000000000..5a1532f98 --- /dev/null +++ b/vscode-web-github1s/src/vs/workbench/contrib/welcome/gettingStarted/browser/gettingStarted.ts @@ -0,0 +1,1619 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import 'vs/css!./gettingStarted'; +import { localize } from 'vs/nls'; +import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; +import { IEditorSerializer, IEditorOpenContext } from 'vs/workbench/common/editor'; +import { DisposableStore, toDisposable } from 'vs/base/common/lifecycle'; +import { assertIsDefined } from 'vs/base/common/types'; +import { $, addDisposableListener, append, clearNode, Dimension, reset } from 'vs/base/browser/dom'; +import { ICommandService } from 'vs/platform/commands/common/commands'; +import { IProductService } from 'vs/platform/product/common/productService'; +import { hiddenEntriesConfigurationKey, IResolvedWalkthrough, IResolvedWalkthroughStep, IWalkthroughsService } from 'vs/workbench/contrib/welcome/gettingStarted/browser/gettingStartedService'; +import { IThemeService, registerThemingParticipant, ThemeIcon } from 'vs/platform/theme/common/themeService'; +import { welcomePageBackground, welcomePageProgressBackground, welcomePageProgressForeground, welcomePageTileBackground, welcomePageTileHoverBackground, welcomePageTileShadow } from 'vs/workbench/contrib/welcome/gettingStarted/browser/gettingStartedColors'; +import { activeContrastBorder, buttonBackground, buttonForeground, buttonHoverBackground, contrastBorder, descriptionForeground, focusBorder, foreground, textLinkActiveForeground, textLinkForeground } from 'vs/platform/theme/common/colorRegistry'; +import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; +import { firstSessionDateStorageKey, ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; +import { DomScrollableElement } from 'vs/base/browser/ui/scrollbar/scrollableElement'; +import { gettingStartedCheckedCodicon, gettingStartedUncheckedCodicon } from 'vs/workbench/contrib/welcome/gettingStarted/browser/gettingStartedIcons'; +import { IOpenerService, matchesScheme } from 'vs/platform/opener/common/opener'; +import { URI } from 'vs/base/common/uri'; +import { EditorPane } from 'vs/workbench/browser/parts/editor/editorPane'; +import { IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage'; +import { CancellationToken } from 'vs/base/common/cancellation'; +import { ConfigurationTarget, IConfigurationService } from 'vs/platform/configuration/common/configuration'; +import { ContextKeyExpr, ContextKeyExpression, IContextKeyService, RawContextKey } from 'vs/platform/contextkey/common/contextkey'; +import { IRecentFolder, IRecentlyOpened, IRecentWorkspace, isRecentFolder, isRecentWorkspace, IWorkspacesService } from 'vs/platform/workspaces/common/workspaces'; +import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace'; +import { onUnexpectedError } from 'vs/base/common/errors'; +import { ILabelService } from 'vs/platform/label/common/label'; +import { IWindowOpenable } from 'vs/platform/windows/common/windows'; +import { splitName } from 'vs/base/common/labels'; +import { IHostService } from 'vs/workbench/services/host/browser/host'; +import { isMacintosh, locale } from 'vs/base/common/platform'; +import { Throttler } from 'vs/base/common/async'; +import { GettingStartedInput } from 'vs/workbench/contrib/welcome/gettingStarted/browser/gettingStartedInput'; +import { GroupDirection, GroupsOrder, IEditorGroupsService } from 'vs/workbench/services/editor/common/editorGroupsService'; +import { IQuickInputService } from 'vs/platform/quickinput/common/quickInput'; +import { ILink, LinkedText } from 'vs/base/common/linkedText'; +import { Button } from 'vs/base/browser/ui/button/button'; +import { attachButtonStyler } from 'vs/platform/theme/common/styler'; +import { Link } from 'vs/platform/opener/browser/link'; +import { renderFormattedText } from 'vs/base/browser/formattedTextRenderer'; +import { IWebviewService } from 'vs/workbench/contrib/webview/browser/webview'; +import { DEFAULT_MARKDOWN_STYLES, renderMarkdownDocument } from 'vs/workbench/contrib/markdown/common/markdownDocumentRenderer'; +import { IModeService } from 'vs/editor/common/services/modeService'; +import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions'; +import { generateUuid } from 'vs/base/common/uuid'; +import { TokenizationRegistry } from 'vs/editor/common/modes'; +import { generateTokensCSSForColorMap } from 'vs/editor/common/modes/supports/tokenization'; +import { ResourceMap } from 'vs/base/common/map'; +import { IFileService } from 'vs/platform/files/common/files'; +import { joinPath } from 'vs/base/common/resources'; +import { INotificationService } from 'vs/platform/notification/common/notification'; +import { asWebviewUri } from 'vs/workbench/api/common/shared/webview'; +import { Schemas } from 'vs/base/common/network'; +import { IEditorOptions } from 'vs/platform/editor/common/editor'; +import { coalesce, equals, flatten } from 'vs/base/common/arrays'; +import { ThemeSettings } from 'vs/workbench/services/themes/common/workbenchThemeService'; +import { ACTIVITY_BAR_BADGE_BACKGROUND, ACTIVITY_BAR_BADGE_FOREGROUND } from 'vs/workbench/common/theme'; +import { MarkdownRenderer } from 'vs/editor/browser/core/markdownRenderer'; +import { startEntries } from 'vs/workbench/contrib/welcome/gettingStarted/common/gettingStartedContent'; +// below codes are changed by github1s +import { GettingStartedIndexList } from 'vs/workbench/contrib/welcome/gettingStarted/browser/gettingStartedList'; +// above codes are changed by github1s +import product from 'vs/platform/product/common/product'; +import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent'; +import { KeyCode } from 'vs/base/common/keyCodes'; +// below codes are changed by github1s +// eslint-disable-next-line +import { GitHub1sWelcomePage } from 'vs/github1s/welcomePage'; +// above codes are changed by github1s + +const SLIDE_TRANSITION_TIME_MS = 250; +const configurationKey = 'workbench.startupEditor'; + +export const allWalkthroughsHiddenContext = new RawContextKey('allWalkthroughsHidden', false); +export const inWelcomeContext = new RawContextKey('inWelcome', false); + +export interface IWelcomePageStartEntry { + id: string + title: string + description: string + command: string + order: number + icon: { type: 'icon', icon: ThemeIcon } + when: ContextKeyExpression +} + +const parsedStartEntries: IWelcomePageStartEntry[] = startEntries.map((e, i) => ({ + command: e.content.command, + description: e.description, + icon: { type: 'icon', icon: e.icon }, + id: e.id, + order: i, + title: e.title, + when: ContextKeyExpr.deserialize(e.when) ?? ContextKeyExpr.true() +})); + +type GettingStartedActionClassification = { + command: { classification: 'PublicNonPersonalData', purpose: 'FeatureInsight' }; + argument: { classification: 'PublicNonPersonalData', purpose: 'FeatureInsight' }; +}; + +type GettingStartedActionEvent = { + command: string; + argument: string | undefined; +}; + +type RecentEntry = (IRecentFolder | IRecentWorkspace) & { id: string }; + +const REDUCED_MOTION_KEY = 'workbench.welcomePage.preferReducedMotion'; +export class GettingStartedPage extends EditorPane { + + public static readonly ID = 'gettingStartedPage'; + + private editorInput!: GettingStartedInput; + private inProgressScroll = Promise.resolve(); + + private dispatchListeners: DisposableStore = new DisposableStore(); + private stepDisposables: DisposableStore = new DisposableStore(); + private detailsPageDisposables: DisposableStore = new DisposableStore(); + + private gettingStartedCategories: IResolvedWalkthrough[]; + private currentWalkthrough: IResolvedWalkthrough | undefined; + + private categoriesPageScrollbar: DomScrollableElement | undefined; + private detailsPageScrollbar: DomScrollableElement | undefined; + + private detailsScrollbar: DomScrollableElement | undefined; + + private buildSlideThrottle: Throttler = new Throttler(); + + private container: HTMLElement; + + private contextService: IContextKeyService; + + private recentlyOpened: Promise; + private hasScrolledToFirstCategory = false; + private recentlyOpenedList?: GettingStartedIndexList; + private startList?: GettingStartedIndexList; + private gettingStartedList?: GettingStartedIndexList; + + private stepsSlide!: HTMLElement; + private categoriesSlide!: HTMLElement; + private stepsContent!: HTMLElement; + private stepMediaComponent!: HTMLElement; + // below codes are changed by github1s + private gitHub1sWelcomePage!: GitHub1sWelcomePage; + // above codes are changed by github1s + + private layoutMarkdown: (() => void) | undefined; + + private webviewID = generateUuid(); + + constructor( + @ICommandService private readonly commandService: ICommandService, + @IProductService private readonly productService: IProductService, + @IKeybindingService private readonly keybindingService: IKeybindingService, + @IWalkthroughsService private readonly gettingStartedService: IWalkthroughsService, + @IConfigurationService private readonly configurationService: IConfigurationService, + @ITelemetryService telemetryService: ITelemetryService, + @IModeService private readonly modeService: IModeService, + @IFileService private readonly fileService: IFileService, + @IOpenerService private readonly openerService: IOpenerService, + @IThemeService themeService: IThemeService, + @IStorageService private storageService: IStorageService, + @IExtensionService private readonly extensionService: IExtensionService, + @IInstantiationService private readonly instantiationService: IInstantiationService, + @INotificationService private readonly notificationService: INotificationService, + @IEditorGroupsService private readonly groupsService: IEditorGroupsService, + @IContextKeyService contextService: IContextKeyService, + @IQuickInputService private quickInputService: IQuickInputService, + @IWorkspacesService workspacesService: IWorkspacesService, + @ILabelService private readonly labelService: ILabelService, + @IHostService private readonly hostService: IHostService, + @IWebviewService private readonly webviewService: IWebviewService, + @IWorkspaceContextService private readonly workspaceContextService: IWorkspaceContextService, + ) { + + super(GettingStartedPage.ID, telemetryService, themeService, storageService); + + // below codes are changed by github1s + this.gitHub1sWelcomePage = instantiationService.createInstance(GitHub1sWelcomePage); + // above codes are changed by github1s + this.container = $('.gettingStartedContainer', + { + role: 'document', + tabindex: 0, + 'aria-label': localize('welcomeAriaLabel', "Overview of how to get up to speed with your editor.") + }); + this.stepMediaComponent = $('.getting-started-media'); + this.stepMediaComponent.id = generateUuid(); + + this.contextService = this._register(contextService.createScoped(this.container)); + inWelcomeContext.bindTo(this.contextService).set(true); + + this.gettingStartedCategories = this.gettingStartedService.getWalkthroughs(); + this._register(this.dispatchListeners); + this.buildSlideThrottle = new Throttler(); + + const rerender = () => { + this.gettingStartedCategories = this.gettingStartedService.getWalkthroughs(); + if (this.currentWalkthrough) { + const existingSteps = this.currentWalkthrough.steps.map(step => step.id); + const newCategory = this.gettingStartedCategories.find(category => this.currentWalkthrough?.id === category.id); + if (newCategory) { + const newSteps = newCategory.steps.map(step => step.id); + if (!equals(newSteps, existingSteps)) { + this.buildSlideThrottle.queue(() => this.buildCategoriesSlide()); + } + } + } else { + this.buildSlideThrottle.queue(() => this.buildCategoriesSlide()); + } + }; + + this._register(this.gettingStartedService.onDidAddWalkthrough(rerender)); + this._register(this.gettingStartedService.onDidRemoveWalkthrough(rerender)); + + this._register(this.gettingStartedService.onDidChangeWalkthrough(category => { + const ourCategory = this.gettingStartedCategories.find(c => c.id === category.id); + if (!ourCategory) { return; } + + ourCategory.title = category.title; + ourCategory.description = category.description; + + this.container.querySelectorAll(`[x-category-title-for="${category.id}"]`).forEach(step => (step as HTMLDivElement).innerText = ourCategory.title); + this.container.querySelectorAll(`[x-category-description-for="${category.id}"]`).forEach(step => (step as HTMLDivElement).innerText = ourCategory.description); + })); + + this._register(this.gettingStartedService.onDidProgressStep(step => { + const category = this.gettingStartedCategories.find(category => category.id === step.category); + if (!category) { throw Error('Could not find category with ID: ' + step.category); } + const ourStep = category.steps.find(_step => _step.id === step.id); + if (!ourStep) { + throw Error('Could not find step with ID: ' + step.id); + } + + const stats = this.getWalkthroughCompletionStats(category); + if (!ourStep.done && stats.stepsComplete === stats.stepsTotal - 1) { + this.hideCategory(category.id); + } + + this._register(this.configurationService.onDidChangeConfiguration(e => { + if (e.affectsConfiguration(REDUCED_MOTION_KEY)) { + this.container.classList.toggle('animatable', this.shouldAnimate()); + } + })); + + ourStep.done = step.done; + + if (category.id === this.currentWalkthrough?.id) { + const badgeelements = assertIsDefined(document.querySelectorAll(`[data-done-step-id="${step.id}"]`)); + badgeelements.forEach(badgeelement => { + if (step.done) { + badgeelement.parentElement?.setAttribute('aria-checked', 'true'); + badgeelement.classList.remove(...ThemeIcon.asClassNameArray(gettingStartedUncheckedCodicon)); + badgeelement.classList.add('complete', ...ThemeIcon.asClassNameArray(gettingStartedCheckedCodicon)); + } + else { + badgeelement.parentElement?.setAttribute('aria-checked', 'false'); + badgeelement.classList.remove('complete', ...ThemeIcon.asClassNameArray(gettingStartedCheckedCodicon)); + badgeelement.classList.add(...ThemeIcon.asClassNameArray(gettingStartedUncheckedCodicon)); + } + }); + } + this.updateCategoryProgress(); + })); + + this.recentlyOpened = workspacesService.getRecentlyOpened(); + } + + private shouldAnimate() { + return !this.configurationService.getValue(REDUCED_MOTION_KEY); + } + + private getWalkthroughCompletionStats(walkthrough: IResolvedWalkthrough): { stepsComplete: number, stepsTotal: number } { + const activeSteps = walkthrough.steps.filter(s => this.contextService.contextMatchesRules(s.when)); + return { + stepsComplete: activeSteps.filter(s => s.done).length, + stepsTotal: activeSteps.length, + }; + } + + override async setInput(newInput: GettingStartedInput, options: IEditorOptions | undefined, context: IEditorOpenContext, token: CancellationToken) { + this.container.classList.remove('animatable'); + this.editorInput = newInput; + await super.setInput(newInput, options, context, token); + await this.buildCategoriesSlide(); + if (this.shouldAnimate()) { + setTimeout(() => this.container.classList.add('animatable'), 0); + } + } + + async makeCategoryVisibleWhenAvailable(categoryID: string, stepId?: string) { + await this.gettingStartedService.installedExtensionsRegistered; + + this.gettingStartedCategories = this.gettingStartedService.getWalkthroughs(); + const ourCategory = this.gettingStartedCategories.find(c => c.id === categoryID); + if (!ourCategory) { + throw Error('Could not find category with ID: ' + categoryID); + } + + this.scrollToCategory(categoryID, stepId); + } + + private registerDispatchListeners() { + this.dispatchListeners.clear(); + + this.container.querySelectorAll('[x-dispatch]').forEach(element => { + const [command, argument] = (element.getAttribute('x-dispatch') ?? '').split(':'); + if (command) { + this.dispatchListeners.add(addDisposableListener(element, 'click', (e) => { + e.stopPropagation(); + this.runDispatchCommand(command, argument); + })); + } + }); + } + + private async runDispatchCommand(command: string, argument: string) { + this.commandService.executeCommand('workbench.action.keepEditor'); + this.telemetryService.publicLog2('gettingStarted.ActionExecuted', { command, argument }); + switch (command) { + case 'scrollPrev': { + this.scrollPrev(); + break; + } + case 'skip': { + this.runSkip(); + break; + } + case 'showMoreRecents': { + this.commandService.executeCommand('workbench.action.openRecent'); + break; + } + case 'seeAllWalkthroughs': { + await this.openWalkthroughSelector(); + break; + } + case 'openFolder': { + this.commandService.executeCommand(isMacintosh ? 'workbench.action.files.openFileFolder' : 'workbench.action.files.openFolder'); + break; + } + case 'selectCategory': { + const selectedCategory = this.gettingStartedCategories.find(category => category.id === argument); + if (!selectedCategory) { throw Error('Could not find category with ID ' + argument); } + + this.gettingStartedService.markWalkthroughOpened(argument); + this.gettingStartedList?.setEntries(this.gettingStartedService.getWalkthroughs()); + this.scrollToCategory(argument); + break; + } + case 'selectStartEntry': { + const selected = startEntries.find(e => e.id === argument); + if (selected) { + this.commandService.executeCommand(selected.content.command); + } else { + throw Error('could not find start entry with id: ' + argument); + } + break; + } + case 'hideCategory': { + this.hideCategory(argument); + break; + } + // Use selectTask over selectStep to keep telemetry consistant:https://github.com/microsoft/vscode/issues/122256 + case 'selectTask': { + this.selectStep(argument); + break; + } + case 'toggleStepCompletion': { + this.toggleStepCompletion(argument); + break; + } + case 'allDone': { + this.markAllStepsComplete(); + break; + } + case 'nextSection': { + const next = this.currentWalkthrough?.next; + if (next) { + this.scrollToCategory(next); + } else { + console.error('Error scrolling to next section of', this.currentWalkthrough); + } + break; + } + default: { + console.error('Dispatch to', command, argument, 'not defined'); + break; + } + } + } + + private hideCategory(categoryId: string) { + const selectedCategory = this.gettingStartedCategories.find(category => category.id === categoryId); + if (!selectedCategory) { throw Error('Could not find category with ID ' + categoryId); } + this.setHiddenCategories([...this.getHiddenCategories().add(categoryId)]); + this.gettingStartedList?.rerender(); + } + + private markAllStepsComplete() { + if (this.currentWalkthrough) { + this.currentWalkthrough?.steps.forEach(step => { + if (!step.done) { + this.gettingStartedService.progressStep(step.id); + } + }); + this.hideCategory(this.currentWalkthrough?.id); + this.scrollPrev(); + } else { + throw Error('No walkthrough opened'); + } + } + + private toggleStepCompletion(argument: string) { + const stepToggle = assertIsDefined(this.currentWalkthrough?.steps.find(step => step.id === argument)); + if (stepToggle.done) { + this.gettingStartedService.deprogressStep(argument); + } else { + this.gettingStartedService.progressStep(argument); + } + } + + private async openWalkthroughSelector() { + const selection = await this.quickInputService.pick(this.gettingStartedCategories.map(x => ({ + id: x.id, + label: x.title, + detail: x.description, + description: x.source, + })), { canPickMany: false, matchOnDescription: true, matchOnDetail: true, title: localize('pickWalkthroughs', "Open Walkthrough...") }); + if (selection) { + this.runDispatchCommand('selectCategory', selection.id); + } + } + + private svgCache = new ResourceMap>(); + private readAndCacheSVGFile(path: URI): Promise { + if (!this.svgCache.has(path)) { + this.svgCache.set(path, (async () => { + try { + const bytes = await this.fileService.readFile(path); + return bytes.value.toString(); + } catch (e) { + this.notificationService.error('Error reading svg document at `' + path + '`: ' + e); + return ''; + } + })()); + } + return assertIsDefined(this.svgCache.get(path)); + } + + private mdCache = new ResourceMap>(); + private async readAndCacheStepMarkdown(path: URI): Promise { + if (!this.mdCache.has(path)) { + this.mdCache.set(path, (async () => { + try { + const moduleId = JSON.parse(path.query).moduleId; + if (moduleId) { + return new Promise(resolve => { + require([moduleId], content => { + const markdown = content.default(); + resolve(renderMarkdownDocument(markdown, this.extensionService, this.modeService)); + }); + }); + } + } catch { } + try { + const localizedPath = path.with({ path: path.path.replace(/\.md$/, `.nls.${locale}.md`) }); + + const generalizedLocale = locale?.replace(/-.*$/, ''); + const generalizedLocalizedPath = path.with({ path: path.path.replace(/\.md$/, `.nls.${generalizedLocale}.md`) }); + + const fileExists = (file: URI) => this.fileService.resolve(file).then(() => true).catch(() => false); + + const [localizedFileExists, generalizedLocalizedFileExists] = await Promise.all([ + fileExists(localizedPath), + fileExists(generalizedLocalizedPath), + ]); + + const bytes = await this.fileService.readFile( + localizedFileExists + ? localizedPath + : generalizedLocalizedFileExists + ? generalizedLocalizedPath + : path); + + const markdown = bytes.value.toString(); + return renderMarkdownDocument(markdown, this.extensionService, this.modeService); + } catch (e) { + this.notificationService.error('Error reading markdown document at `' + path + '`: ' + e); + return ''; + } + })()); + } + return assertIsDefined(this.mdCache.get(path)); + } + + private getHiddenCategories(): Set { + return new Set(JSON.parse(this.storageService.get(hiddenEntriesConfigurationKey, StorageScope.GLOBAL, '[]'))); + } + + private setHiddenCategories(hidden: string[]) { + this.storageService.store( + hiddenEntriesConfigurationKey, + JSON.stringify(hidden), + StorageScope.GLOBAL, + StorageTarget.USER); + } + + private async buildMediaComponent(stepId: string) { + if (!this.currentWalkthrough) { + throw Error('no walkthrough selected'); + } + const stepToExpand = assertIsDefined(this.currentWalkthrough.steps.find(step => step.id === stepId)); + + this.stepDisposables.clear(); + clearNode(this.stepMediaComponent); + + if (stepToExpand.media.type === 'image') { + + this.stepsContent.classList.add('image'); + this.stepsContent.classList.remove('markdown'); + + const media = stepToExpand.media; + const mediaElement = $('img'); + this.stepMediaComponent.appendChild(mediaElement); + mediaElement.setAttribute('alt', media.altText); + this.updateMediaSourceForColorMode(mediaElement, media.path); + + this.stepDisposables.add(addDisposableListener(this.stepMediaComponent, 'click', () => { + const hrefs = flatten(stepToExpand.description.map(lt => lt.nodes.filter((node): node is ILink => typeof node !== 'string').map(node => node.href))); + if (hrefs.length === 1) { + const href = hrefs[0]; + if (href.startsWith('http')) { + this.telemetryService.publicLog2('gettingStarted.ActionExecuted', { command: 'runStepAction', argument: href }); + this.openerService.open(href); + } + } + })); + + this.stepDisposables.add(this.themeService.onDidColorThemeChange(() => this.updateMediaSourceForColorMode(mediaElement, media.path))); + + } + else if (stepToExpand.media.type === 'svg') { + this.stepsContent.classList.add('image'); + this.stepsContent.classList.remove('markdown'); + + const media = stepToExpand.media; + const webview = this.stepDisposables.add(this.webviewService.createWebviewElement(this.webviewID, {}, {}, undefined)); + webview.mountTo(this.stepMediaComponent); + + webview.html = await this.renderSVG(media.path); + + let isDisposed = false; + this.stepDisposables.add(toDisposable(() => { isDisposed = true; })); + + this.stepDisposables.add(this.themeService.onDidColorThemeChange(async () => { + // Render again since color vars change + const body = await this.renderSVG(media.path); + if (!isDisposed) { // Make sure we weren't disposed of in the meantime + webview.html = body; + } + })); + + this.stepDisposables.add(addDisposableListener(this.stepMediaComponent, 'click', () => { + const hrefs = flatten(stepToExpand.description.map(lt => lt.nodes.filter((node): node is ILink => typeof node !== 'string').map(node => node.href))); + if (hrefs.length === 1) { + const href = hrefs[0]; + if (href.startsWith('http')) { + this.telemetryService.publicLog2('gettingStarted.ActionExecuted', { command: 'runStepAction', argument: href }); + this.openerService.open(href); + } + } + })); + + this.stepDisposables.add(webview.onDidClickLink(link => { + if (matchesScheme(link, Schemas.https) || matchesScheme(link, Schemas.http) || (matchesScheme(link, Schemas.command))) { + this.openerService.open(link, { allowCommands: true }); + } + })); + + } + else if (stepToExpand.media.type === 'markdown') { + + this.stepsContent.classList.remove('image'); + this.stepsContent.classList.add('markdown'); + + const media = stepToExpand.media; + + const webview = this.stepDisposables.add(this.webviewService.createWebviewElement(this.webviewID, {}, { localResourceRoots: [media.root], allowScripts: true }, undefined)); + webview.mountTo(this.stepMediaComponent); + + const rawHTML = await this.renderMarkdown(media.path, media.base); + webview.html = rawHTML; + + const serializedContextKeyExprs = rawHTML.match(/checked-on=\"([^'][^"]*)\"/g)?.map(attr => attr.slice('checked-on="'.length, -1) + .replace(/'/g, '\'') + .replace(/&/g, '&')); + + const postTrueKeysMessage = () => { + const enabledContextKeys = serializedContextKeyExprs?.filter(expr => this.contextService.contextMatchesRules(ContextKeyExpr.deserialize(expr))); + if (enabledContextKeys) { + webview.postMessage({ + enabledContextKeys + }); + } + }; + + let isDisposed = false; + this.stepDisposables.add(toDisposable(() => { isDisposed = true; })); + + this.stepDisposables.add(webview.onDidClickLink(link => { + if (matchesScheme(link, Schemas.https) || matchesScheme(link, Schemas.http) || (matchesScheme(link, Schemas.command))) { + this.openerService.open(link, { allowCommands: true }); + } + })); + + this.stepDisposables.add(this.themeService.onDidColorThemeChange(async () => { + // Render again since syntax highlighting of code blocks may have changed + const body = await this.renderMarkdown(media.path, media.base); + if (!isDisposed) { // Make sure we weren't disposed of in the meantime + webview.html = body; + postTrueKeysMessage(); + } + })); + + if (serializedContextKeyExprs) { + const contextKeyExprs = coalesce(serializedContextKeyExprs.map(expr => ContextKeyExpr.deserialize(expr))); + const watchingKeys = new Set(flatten(contextKeyExprs.map(expr => expr.keys()))); + + this.stepDisposables.add(this.contextService.onDidChangeContext(e => { + if (e.affectsSome(watchingKeys)) { postTrueKeysMessage(); } + })); + + this.layoutMarkdown = () => { webview.postMessage({ layout: true }); }; + this.stepDisposables.add({ dispose: () => this.layoutMarkdown = undefined }); + this.layoutMarkdown(); + + postTrueKeysMessage(); + + webview.onMessage(e => { + const message: string = e.message as string; + if (message.startsWith('command:')) { + this.openerService.open(message, { allowCommands: true }); + } else if (message.startsWith('setTheme:')) { + this.configurationService.updateValue(ThemeSettings.COLOR_THEME, message.slice('setTheme:'.length), ConfigurationTarget.USER); + } else { + console.error('Unexpected message', message); + } + }); + } + + } + } + + async selectStepLoose(id: string) { + const toSelect = this.editorInput.selectedCategory + '#' + id; + this.selectStep(toSelect); + } + + private async selectStep(id: string | undefined, delayFocus = true, forceRebuild = false) { + if (id && this.editorInput.selectedStep === id && !forceRebuild) { return; } + + if (id) { + let stepElement = this.container.querySelector(`[data-step-id="${id}"]`); + if (!stepElement) { + // Selected an element that is not in-context, just fallback to whatever. + stepElement = assertIsDefined(this.container.querySelector(`[data-step-id]`)); + id = assertIsDefined(stepElement.getAttribute('data-step-id')); + } + stepElement.parentElement?.querySelectorAll('.expanded').forEach(node => { + if (node.getAttribute('data-step-id') !== id) { + node.classList.remove('expanded'); + node.setAttribute('aria-expanded', 'false'); + } + }); + setTimeout(() => (stepElement as HTMLElement).focus(), delayFocus ? SLIDE_TRANSITION_TIME_MS : 0); + + this.editorInput.selectedStep = id; + + stepElement.classList.add('expanded'); + stepElement.setAttribute('aria-expanded', 'true'); + this.buildMediaComponent(id); + this.gettingStartedService.progressByEvent('stepSelected:' + id); + } else { + this.editorInput.selectedStep = undefined; + } + + this.detailsPageScrollbar?.scanDomNode(); + this.detailsScrollbar?.scanDomNode(); + } + + private updateMediaSourceForColorMode(element: HTMLImageElement, sources: { hc: URI, dark: URI, light: URI }) { + const themeType = this.themeService.getColorTheme().type; + const src = sources[themeType].toString(true).replace(/ /g, '%20'); + element.srcset = src.toLowerCase().endsWith('.svg') ? src : (src + ' 1.5x'); + } + + private async renderSVG(path: URI): Promise { + const content = await this.readAndCacheSVGFile(path); + const nonce = generateUuid(); + const colorMap = TokenizationRegistry.getColorMap(); + + const css = colorMap ? generateTokensCSSForColorMap(colorMap) : ''; + return ` + + + + + + + + ${content} + + `; + } + + private async renderMarkdown(path: URI, base: URI): Promise { + const content = await this.readAndCacheStepMarkdown(path); + const nonce = generateUuid(); + const colorMap = TokenizationRegistry.getColorMap(); + + const uriTranformedContent = content.replace(/src="([^"]*)"/g, (_, src: string) => { + if (src.startsWith('https://')) { return `src="${src}"`; } + + const path = joinPath(base, src); + const transformed = asWebviewUri(path).toString(); + return `src="${transformed}"`; + }); + + const css = colorMap ? generateTokensCSSForColorMap(colorMap) : ''; + return ` + + + + + + + + ${uriTranformedContent} + + + `; + } + + createEditor(parent: HTMLElement) { + if (this.detailsPageScrollbar) { this.detailsPageScrollbar.dispose(); } + if (this.categoriesPageScrollbar) { this.categoriesPageScrollbar.dispose(); } + + this.categoriesSlide = $('.gettingStartedSlideCategories.gettingStartedSlide'); + + const prevButton = $('button.prev-button.button-link', { 'x-dispatch': 'scrollPrev' }, $('span.scroll-button.codicon.codicon-chevron-left'), $('span.moreText', {}, localize('welcome', "Welcome"))); + this.stepsSlide = $('.gettingStartedSlideDetails.gettingStartedSlide', {}, prevButton); + + this.stepsContent = $('.gettingStartedDetailsContent', {}); + + this.detailsPageScrollbar = this._register(new DomScrollableElement(this.stepsContent, { className: 'full-height-scrollable' })); + this.categoriesPageScrollbar = this._register(new DomScrollableElement(this.categoriesSlide, { className: 'full-height-scrollable categoriesScrollbar' })); + + this.stepsSlide.appendChild(this.detailsPageScrollbar.getDomNode()); + + const gettingStartedPage = $('.gettingStarted', {}, this.categoriesPageScrollbar.getDomNode(), this.stepsSlide); + this.container.appendChild(gettingStartedPage); + + this.categoriesPageScrollbar.scanDomNode(); + this.detailsPageScrollbar.scanDomNode(); + + + parent.appendChild(this.container); + } + + // below codes are changed by github1s + private async buildCategoriesSlide() { + reset(this.container, this.gitHub1sWelcomePage.render()); + } + + public async buildCategoriesSlide2() { + // above codes are changed by github1s + const showOnStartupCheckbox = $('input.checkbox', { id: 'showOnStartup', type: 'checkbox' }) as HTMLInputElement; + + showOnStartupCheckbox.checked = this.configurationService.getValue(configurationKey) === 'welcomePage'; + this._register(addDisposableListener(showOnStartupCheckbox, 'click', () => { + if (showOnStartupCheckbox.checked) { + this.telemetryService.publicLog2('gettingStarted.ActionExecuted', { command: 'showOnStartupChecked', argument: undefined }); + this.configurationService.updateValue(configurationKey, 'welcomePage'); + } else { + this.telemetryService.publicLog2('gettingStarted.ActionExecuted', { command: 'showOnStartupUnchecked', argument: undefined }); + this.configurationService.updateValue(configurationKey, 'none'); + } + })); + + const header = $('.header', {}, + $('h1.product-name.caption', {}, this.productService.nameLong), + $('p.subtitle.description', {}, localize({ key: 'gettingStarted.editingEvolved', comment: ['Shown as subtitle on the Welcome page.'] }, "Editing evolved")) + ); + + + const leftColumn = $('.categories-column.categories-column-left', {},); + const rightColumn = $('.categories-column.categories-column-right', {},); + + const startList = this.buildStartList(); + const recentList = this.buildRecentlyOpenedList(); + const gettingStartedList = this.buildGettingStartedWalkthroughsList(); + + const footer = $('.footer', $('p.showOnStartup', {}, showOnStartupCheckbox, $('label.caption', { for: 'showOnStartup' }, localize('welcomePage.showOnStartup', "Show welcome page on startup")))); + + const layoutLists = () => { + if (gettingStartedList.itemCount) { + this.container.classList.remove('noWalkthroughs'); + reset(leftColumn, startList.getDomElement(), recentList.getDomElement()); + reset(rightColumn, gettingStartedList.getDomElement()); + recentList.setLimit(5); + } + else { + this.container.classList.add('noWalkthroughs'); + reset(leftColumn, startList.getDomElement()); + reset(rightColumn, recentList.getDomElement()); + recentList.setLimit(10); + } + setTimeout(() => this.categoriesPageScrollbar?.scanDomNode(), 50); + }; + + gettingStartedList.onDidChange(layoutLists); + layoutLists(); + + reset(this.categoriesSlide, $('.gettingStartedCategoriesContainer', {}, header, leftColumn, rightColumn, footer,)); + this.categoriesPageScrollbar?.scanDomNode(); + + this.updateCategoryProgress(); + this.registerDispatchListeners(); + + if (this.editorInput.selectedCategory) { + this.currentWalkthrough = this.gettingStartedCategories.find(category => category.id === this.editorInput.selectedCategory); + + if (!this.currentWalkthrough) { + this.container.classList.add('loading'); + await this.gettingStartedService.installedExtensionsRegistered; + this.container.classList.remove('loading'); + this.gettingStartedCategories = this.gettingStartedService.getWalkthroughs(); + } + + this.currentWalkthrough = this.gettingStartedCategories.find(category => category.id === this.editorInput.selectedCategory); + if (!this.currentWalkthrough) { + console.error('Could not restore to category ' + this.editorInput.selectedCategory + ' as it was not found'); + this.editorInput.selectedCategory = undefined; + this.editorInput.selectedStep = undefined; + } else { + this.buildCategorySlide(this.editorInput.selectedCategory, this.editorInput.selectedStep); + this.setSlide('details'); + return; + } + } + + const someStepsComplete = this.gettingStartedCategories.some(category => category.steps.find(s => s.done)); + if (!someStepsComplete && !this.hasScrolledToFirstCategory) { + + const firstSessionDateString = this.storageService.get(firstSessionDateStorageKey, StorageScope.GLOBAL) || new Date().toUTCString(); + const daysSinceFirstSession = ((+new Date()) - (+new Date(firstSessionDateString))) / 1000 / 60 / 60 / 24; + const fistContentBehaviour = daysSinceFirstSession < 1 ? 'openToFirstCategory' : 'index'; + + if (fistContentBehaviour === 'openToFirstCategory') { + const first = this.gettingStartedCategories[0]; + this.hasScrolledToFirstCategory = true; + if (first) { + this.currentWalkthrough = first; + this.editorInput.selectedCategory = this.currentWalkthrough?.id; + this.buildCategorySlide(this.editorInput.selectedCategory, undefined); + this.setSlide('details'); + return; + } + } + } + + this.setSlide('categories'); + } + + private buildRecentlyOpenedList(): GettingStartedIndexList { + const renderRecent = (recent: RecentEntry) => { + let fullPath: string; + let windowOpenable: IWindowOpenable; + if (isRecentFolder(recent)) { + windowOpenable = { folderUri: recent.folderUri }; + fullPath = recent.label || this.labelService.getWorkspaceLabel(recent.folderUri, { verbose: true }); + } else { + fullPath = recent.label || this.labelService.getWorkspaceLabel(recent.workspace, { verbose: true }); + windowOpenable = { workspaceUri: recent.workspace.configPath }; + } + + const { name, parentPath } = splitName(fullPath); + + const li = $('li'); + const link = $('button.button-link'); + + link.innerText = name; + link.title = fullPath; + link.setAttribute('aria-label', localize('welcomePage.openFolderWithPath', "Open folder {0} with path {1}", name, parentPath)); + link.addEventListener('click', e => { + this.telemetryService.publicLog2('gettingStarted.ActionExecuted', { command: 'openRecent', argument: undefined }); + this.hostService.openWindow([windowOpenable], { forceNewWindow: e.ctrlKey || e.metaKey, remoteAuthority: recent.remoteAuthority }); + e.preventDefault(); + e.stopPropagation(); + }); + li.appendChild(link); + + const span = $('span'); + span.classList.add('path'); + span.classList.add('detail'); + span.innerText = parentPath; + span.title = fullPath; + li.appendChild(span); + + return li; + }; + + if (this.recentlyOpenedList) { this.recentlyOpenedList.dispose(); } + + const recentlyOpenedList = this.recentlyOpenedList = new GettingStartedIndexList( + { + title: localize('recent', "Recent"), + klass: 'recently-opened', + limit: 5, + empty: $('.empty-recent', {}, 'You have no recent folders,', $('button.button-link', { 'x-dispatch': 'openFolder' }, 'open a folder'), 'to start.'), + more: $('.more', {}, + $('button.button-link', + { + 'x-dispatch': 'showMoreRecents', + title: localize('show more recents', "Show All Recent Folders {0}", this.getKeybindingLabel('workbench.action.openRecent')) + }, 'More...')), + renderElement: renderRecent, + contextService: this.contextService + }); + + recentlyOpenedList.onDidChange(() => this.registerDispatchListeners()); + + this.recentlyOpened.then(({ workspaces }) => { + // Filter out the current workspace + const workspacesWithID = workspaces + .filter(recent => !this.workspaceContextService.isCurrentWorkspace(isRecentWorkspace(recent) ? recent.workspace : recent.folderUri)) + .map(recent => ({ ...recent, id: isRecentWorkspace(recent) ? recent.workspace.id : recent.folderUri.toString() })); + + const updateEntries = () => { recentlyOpenedList.setEntries(workspacesWithID); }; + + updateEntries(); + + recentlyOpenedList.register(this.labelService.onDidChangeFormatters(() => updateEntries())); + }).catch(onUnexpectedError); + + return recentlyOpenedList; + } + + private buildStartList(): GettingStartedIndexList { + const renderStartEntry = (entry: IWelcomePageStartEntry): HTMLElement => + $('li', + {}, $('button.button-link', + { + 'x-dispatch': 'selectStartEntry:' + entry.id, + title: entry.description + ' ' + this.getKeybindingLabel(entry.command), + }, + this.iconWidgetFor(entry), + $('span', {}, entry.title))); + + if (this.startList) { this.startList.dispose(); } + + const startList = this.startList = new GettingStartedIndexList( + { + title: localize('start', "Start"), + klass: 'start-container', + limit: 10, + renderElement: renderStartEntry, + rankElement: e => -e.order, + contextService: this.contextService + }); + + startList.setEntries(parsedStartEntries); + startList.onDidChange(() => this.registerDispatchListeners()); + return startList; + } + + private buildGettingStartedWalkthroughsList(): GettingStartedIndexList { + + const renderGetttingStaredWalkthrough = (category: IResolvedWalkthrough): HTMLElement => { + + const renderNewBadge = (category.newItems || category.newEntry) && !category.isFeatured; + const newBadge = $('.new-badge', {}); + if (category.newEntry) { + reset(newBadge, $('.new-category', {}, localize('new', "New"))); + } else if (category.newItems) { + reset(newBadge, $('.new-items', {}, localize('newItems', "New Items"))); + } + + const featuredBadge = $('.featured-badge', {}); + const descriptionContent = $('.description-content', {},); + + if (category.isFeatured) { + reset(featuredBadge, $('.featured', {}, $('span.featured-icon.codicon.codicon-star-empty'))); + reset(descriptionContent, category.description); + } + + return $('button.getting-started-category' + (category.isFeatured ? '.featured' : ''), + { + 'x-dispatch': 'selectCategory:' + category.id, + 'role': 'listitem', + 'title': category.description + }, + featuredBadge, + $('.main-content', {}, + this.iconWidgetFor(category), + $('h3.category-title.max-lines-3', { 'x-category-title-for': category.id }, category.title,), + renderNewBadge ? newBadge : $('.no-badge'), + $('a.codicon.codicon-close.hide-category-button', { + 'x-dispatch': 'hideCategory:' + category.id, + 'title': localize('close', "Hide"), + }), + ), + descriptionContent, + $('.category-progress', { 'x-data-category-id': category.id, }, + $('.progress-bar-outer', { 'role': 'progressbar' }, + $('.progress-bar-inner')))); + }; + + if (this.gettingStartedList) { this.gettingStartedList.dispose(); } + + const rankWalkthrough = (e: IResolvedWalkthrough) => { + let rank: number | null = e.order; + + if (e.isFeatured) { rank += 7; } + if (e.newEntry) { rank += 3; } + if (e.newItems) { rank += 2; } + if (e.recencyBonus) { rank += 4 * e.recencyBonus; } + + if (this.getHiddenCategories().has(e.id)) { rank = null; } + return rank; + }; + + const gettingStartedList = this.gettingStartedList = new GettingStartedIndexList( + { + title: localize('walkthroughs', "Walkthroughs"), + klass: 'getting-started', + limit: 5, + empty: undefined, more: undefined, + footer: $('span.button-link.see-all-walkthroughs', { 'x-dispatch': 'seeAllWalkthroughs' }, localize('showAll', "More...")), + renderElement: renderGetttingStaredWalkthrough, + rankElement: rankWalkthrough, + contextService: this.contextService, + }); + + gettingStartedList.onDidChange(() => { + const hidden = this.getHiddenCategories(); + const someWalkthroughsHidden = hidden.size || gettingStartedList.itemCount < this.gettingStartedCategories.filter(c => this.contextService.contextMatchesRules(c.when)).length; + this.container.classList.toggle('someWalkthroughsHidden', !!someWalkthroughsHidden); + this.registerDispatchListeners(); + allWalkthroughsHiddenContext.bindTo(this.contextService).set(gettingStartedList.itemCount === 0); + this.updateCategoryProgress(); + }); + + gettingStartedList.setEntries(this.gettingStartedCategories); + allWalkthroughsHiddenContext.bindTo(this.contextService).set(gettingStartedList.itemCount === 0); + + + return gettingStartedList; + } + + layout(size: Dimension) { + this.detailsScrollbar?.scanDomNode(); + + this.categoriesPageScrollbar?.scanDomNode(); + this.detailsPageScrollbar?.scanDomNode(); + + this.startList?.layout(size); + this.gettingStartedList?.layout(size); + this.recentlyOpenedList?.layout(size); + + this.layoutMarkdown?.(); + + this.container.classList[size.height <= 600 ? 'add' : 'remove']('height-constrained'); + this.container.classList[size.width <= 400 ? 'add' : 'remove']('width-constrained'); + this.container.classList[size.width <= 800 ? 'add' : 'remove']('width-semi-constrained'); + } + + private updateCategoryProgress() { + document.querySelectorAll('.category-progress').forEach(element => { + const categoryID = element.getAttribute('x-data-category-id'); + const category = this.gettingStartedCategories.find(category => category.id === categoryID); + if (!category) { throw Error('Could not find category with ID ' + categoryID); } + + const stats = this.getWalkthroughCompletionStats(category); + + const bar = assertIsDefined(element.querySelector('.progress-bar-inner')) as HTMLDivElement; + bar.setAttribute('aria-valuemin', '0'); + bar.setAttribute('aria-valuenow', '' + stats.stepsComplete); + bar.setAttribute('aria-valuemax', '' + stats.stepsTotal); + const progress = (stats.stepsComplete / stats.stepsTotal) * 100; + bar.style.width = `${progress}%`; + + + (element.parentElement as HTMLElement).classList[stats.stepsComplete === 0 ? 'add' : 'remove']('no-progress'); + + if (stats.stepsTotal === stats.stepsComplete) { + bar.title = localize('gettingStarted.allStepsComplete', "All {0} steps complete!", stats.stepsComplete); + } + else { + bar.title = localize('gettingStarted.someStepsComplete', "{0} of {1} steps complete", stats.stepsTotal, stats.stepsComplete); + } + }); + } + + private async scrollToCategory(categoryID: string, stepId?: string) { + this.inProgressScroll = this.inProgressScroll.then(async () => { + reset(this.stepsContent); + this.editorInput.selectedCategory = categoryID; + this.editorInput.selectedStep = stepId; + this.currentWalkthrough = this.gettingStartedCategories.find(category => category.id === categoryID); + this.buildCategorySlide(categoryID); + this.setSlide('details'); + }); + } + + private iconWidgetFor(category: IResolvedWalkthrough | { icon: { type: 'icon', icon: ThemeIcon } }) { + const widget = category.icon.type === 'icon' ? $(ThemeIcon.asCSSSelector(category.icon.icon)) : $('img.category-icon', { src: category.icon.path }); + widget.classList.add('icon-widget'); + return widget; + } + + private buildStepMarkdownDescription(container: HTMLElement, text: LinkedText[]) { + while (container.firstChild) { container.removeChild(container.firstChild); } + + for (const linkedText of text) { + if (linkedText.nodes.length === 1 && typeof linkedText.nodes[0] !== 'string') { + const node = linkedText.nodes[0]; + const buttonContainer = append(container, $('.button-container')); + const button = new Button(buttonContainer, { title: node.title, supportIcons: true }); + + const isCommand = node.href.startsWith('command:'); + const toSide = node.href.startsWith('command:toSide:'); + const command = node.href.replace(/command:(toSide:)?/, 'command:'); + + button.label = node.label; + button.onDidClick(async e => { + e.stopPropagation(); + e.preventDefault(); + + this.telemetryService.publicLog2('gettingStarted.ActionExecuted', { command: 'runStepAction', argument: node.href }); + + const fullSize = this.groupsService.contentDimension; + + if (toSide && fullSize.width > 700) { + if (this.groupsService.count === 1) { + this.groupsService.addGroup(this.groupsService.groups[0], GroupDirection.LEFT, { activate: true }); + + let gettingStartedSize: number; + if (fullSize.width > 1600) { + gettingStartedSize = 800; + } else if (fullSize.width > 800) { + gettingStartedSize = 400; + } else { + gettingStartedSize = 350; + } + + const gettingStartedGroup = this.groupsService.getGroups(GroupsOrder.MOST_RECENTLY_ACTIVE).find(group => (group.activeEditor instanceof GettingStartedInput)); + this.groupsService.setSize(assertIsDefined(gettingStartedGroup), { width: gettingStartedSize, height: fullSize.height }); + } + + const nonGettingStartedGroup = this.groupsService.getGroups(GroupsOrder.MOST_RECENTLY_ACTIVE).find(group => !(group.activeEditor instanceof GettingStartedInput)); + if (nonGettingStartedGroup) { + this.groupsService.activateGroup(nonGettingStartedGroup); + nonGettingStartedGroup.focus(); + } + } + this.openerService.open(command, { allowCommands: true }); + + if (!isCommand && (node.href.startsWith('https://') || node.href.startsWith('http://'))) { + this.gettingStartedService.progressByEvent('onLink:' + node.href); + } + + }, null, this.detailsPageDisposables); + + if (isCommand) { + const keybindingLabel = this.getKeybindingLabel(command); + if (keybindingLabel) { + container.appendChild($('span.shortcut-message', {}, 'Tip: Use keyboard shortcut ', $('span.keybinding', {}, keybindingLabel))); + } + } + + this.detailsPageDisposables.add(button); + this.detailsPageDisposables.add(attachButtonStyler(button, this.themeService)); + } else { + const p = append(container, $('p')); + for (const node of linkedText.nodes) { + if (typeof node === 'string') { + append(p, renderFormattedText(node, { inline: true, renderCodeSegments: true })); + } else { + const link = this.instantiationService.createInstance(Link, node, {}); + + append(p, link.el); + this.detailsPageDisposables.add(link); + } + } + } + } + return container; + } + + override clearInput() { + this.stepDisposables.clear(); + super.clearInput(); + } + + private buildCategorySlide(categoryID: string, selectedStep?: string) { + if (this.detailsScrollbar) { this.detailsScrollbar.dispose(); } + + this.extensionService.whenInstalledExtensionsRegistered().then(() => { + // Remove internal extension id specifier from exposed id's + this.extensionService.activateByEvent(`onWalkthrough:${categoryID.replace(/[^#]+#/, '')}`); + }); + + this.detailsPageDisposables.clear(); + + const category = this.gettingStartedCategories.find(category => category.id === categoryID); + if (!category) { throw Error('could not find category with ID ' + categoryID); } + + const categoryDescriptorComponent = + $('.getting-started-category', + {}, + this.iconWidgetFor(category), + $('.category-description-container', {}, + $('h2.category-title.max-lines-3', { 'x-category-title-for': category.id }, category.title), + $('.category-description.description.max-lines-3', { 'x-category-description-for': category.id }, category.description))); + + const stepListContainer = $('.step-list-container'); + + this.detailsPageDisposables.add(addDisposableListener(stepListContainer, 'keydown', (e) => { + const event = new StandardKeyboardEvent(e); + const currentStepIndex = () => + category.steps.findIndex(e => e.id === this.editorInput.selectedStep); + + if (event.keyCode === KeyCode.UpArrow) { + const toExpand = category.steps.filter((step, index) => index < currentStepIndex() && this.contextService.contextMatchesRules(step.when)); + if (toExpand.length) { + this.selectStep(toExpand[toExpand.length - 1].id, false, false); + } + } + if (event.keyCode === KeyCode.DownArrow) { + const toExpand = category.steps.find((step, index) => index > currentStepIndex() && this.contextService.contextMatchesRules(step.when)); + if (toExpand) { + this.selectStep(toExpand.id, false, false); + } + } + })); + + let renderedSteps: IResolvedWalkthroughStep[] | undefined = undefined; + + const contextKeysToWatch = new Set(category.steps.flatMap(step => step.when.keys())); + + const buildStepList = () => { + const toRender = category.steps + .filter(step => this.contextService.contextMatchesRules(step.when)); + + if (equals(renderedSteps, toRender, (a, b) => a.id === b.id)) { + return; + } + + renderedSteps = toRender; + + reset(stepListContainer, ...renderedSteps + .map(step => { + const codicon = $('.codicon' + (step.done ? '.complete' + ThemeIcon.asCSSSelector(gettingStartedCheckedCodicon) : ThemeIcon.asCSSSelector(gettingStartedUncheckedCodicon)), + { + 'data-done-step-id': step.id, + 'x-dispatch': 'toggleStepCompletion:' + step.id, + }); + + const container = $('.step-description-container', { 'x-step-description-for': step.id }); + this.buildStepMarkdownDescription(container, step.description); + + const stepDescription = $('.step-container', {}, + $('h3.step-title.max-lines-3', { 'x-step-title-for': step.id }, step.title), + container, + ); + + if (step.media.type === 'image') { + stepDescription.appendChild( + $('.image-description', { 'aria-label': localize('imageShowing', "Image showing {0}", step.media.altText) }), + ); + } + + return $('button.getting-started-step', + { + 'x-dispatch': 'selectTask:' + step.id, + 'data-step-id': step.id, + 'aria-expanded': 'false', + 'aria-checked': '' + step.done, + 'role': 'listitem', + }, + codicon, + stepDescription); + })); + }; + + buildStepList(); + + this.detailsPageDisposables.add(this.contextService.onDidChangeContext(e => { + if (e.affectsSome(contextKeysToWatch)) { + buildStepList(); + this.registerDispatchListeners(); + this.selectStep(this.editorInput.selectedStep, false, true); + } + })); + + const showNextCategory = this.gettingStartedCategories.find(_category => _category.id === category.next); + + const stepsContainer = $( + '.getting-started-detail-container', { 'role': 'list' }, + stepListContainer, + $('.done-next-container', {}, + $('button.button-link.all-done', { 'x-dispatch': 'allDone' }, $('span.codicon.codicon-check-all'), localize('allDone', "Mark Done")), + ...(showNextCategory + ? [$('button.button-link.next', { 'x-dispatch': 'nextSection' }, localize('nextOne', "Next Section"), $('span.codicon.codicon-arrow-small-right'))] + : []), + ) + ); + this.detailsScrollbar = this._register(new DomScrollableElement(stepsContainer, { className: 'steps-container' })); + const stepListComponent = this.detailsScrollbar.getDomNode(); + + const categoryFooter = $('.getting-started-footer'); + if (this.editorInput.showTelemetryNotice && this.configurationService.getValue('telemetry.enableTelemetry') && product.enableTelemetry) { + const mdRenderer = this._register(this.instantiationService.createInstance(MarkdownRenderer, {})); + + const privacyStatementCopy = localize('privacy statement', "privacy statement"); + const privacyStatementButton = `[${privacyStatementCopy}](command:workbench.action.openPrivacyStatementUrl)`; + + const optOutCopy = localize('optOut', "opt out"); + const optOutButton = `[${optOutCopy}](command:settings.filterByTelemetry)`; + + const text = localize({ key: 'footer', comment: ['fist substitution is "vs code", second is "privacy statement", third is "opt out".'] }, + "{0} collects usage data. Read our {1} and learn how to {2}.", product.nameShort, privacyStatementButton, optOutButton); + + categoryFooter.append(mdRenderer.render({ value: text, isTrusted: true }).element); + } + + reset(this.stepsContent, categoryDescriptorComponent, stepListComponent, this.stepMediaComponent, categoryFooter); + + const toExpand = category.steps.find(step => this.contextService.contextMatchesRules(step.when) && !step.done) ?? category.steps[0]; + this.selectStep(selectedStep ?? toExpand.id, !selectedStep, true); + + this.detailsScrollbar.scanDomNode(); + this.detailsPageScrollbar?.scanDomNode(); + + this.registerDispatchListeners(); + } + + private getKeybindingLabel(command: string) { + command = command.replace(/^command:/, ''); + const label = this.keybindingService.lookupKeybinding(command)?.getLabel(); + if (!label) { return ''; } + else { + return `(${label})`; + } + } + + private async scrollPrev() { + this.inProgressScroll = this.inProgressScroll.then(async () => { + this.currentWalkthrough = undefined; + this.editorInput.selectedCategory = undefined; + this.editorInput.selectedStep = undefined; + this.editorInput.showTelemetryNotice = false; + + this.selectStep(undefined); + this.setSlide('categories'); + this.container.focus(); + }); + } + + private runSkip() { + this.commandService.executeCommand('workbench.action.closeActiveEditor'); + } + + escape() { + if (this.editorInput.selectedCategory) { + this.scrollPrev(); + } else { + this.runSkip(); + } + } + + private setSlide(toEnable: 'details' | 'categories') { + const slideManager = assertIsDefined(this.container.querySelector('.gettingStarted')); + if (toEnable === 'categories') { + slideManager.classList.remove('showDetails'); + slideManager.classList.add('showCategories'); + this.container.querySelector('.gettingStartedSlideDetails')!.querySelectorAll('button').forEach(button => button.disabled = true); + this.container.querySelector('.gettingStartedSlideCategories')!.querySelectorAll('button').forEach(button => button.disabled = false); + this.container.querySelector('.gettingStartedSlideCategories')!.querySelectorAll('input').forEach(button => button.disabled = false); + } else { + slideManager.classList.add('showDetails'); + slideManager.classList.remove('showCategories'); + this.container.querySelector('.gettingStartedSlideDetails')!.querySelectorAll('button').forEach(button => button.disabled = false); + this.container.querySelector('.gettingStartedSlideCategories')!.querySelectorAll('button').forEach(button => button.disabled = true); + this.container.querySelector('.gettingStartedSlideCategories')!.querySelectorAll('input').forEach(button => button.disabled = true); + } + } + + override focus() { + this.container.focus(); + } +} + +export class GettingStartedInputSerializer implements IEditorSerializer { + public canSerialize(editorInput: GettingStartedInput): boolean { + return true; + } + + public serialize(editorInput: GettingStartedInput): string { + return JSON.stringify({ selectedCategory: editorInput.selectedCategory, selectedStep: editorInput.selectedStep }); + } + + public deserialize(instantiationService: IInstantiationService, serializedEditorInput: string): GettingStartedInput { + try { + const { selectedCategory, selectedStep } = JSON.parse(serializedEditorInput); + return new GettingStartedInput({ selectedCategory, selectedStep }); + } catch { } + return new GettingStartedInput({}); + } +} + +registerThemingParticipant((theme, collector) => { + + const backgroundColor = theme.getColor(welcomePageBackground); + if (backgroundColor) { + collector.addRule(`.monaco-workbench .part.editor > .content .gettingStartedContainer { background-color: ${backgroundColor}; }`); + } + + const foregroundColor = theme.getColor(foreground); + if (foregroundColor) { + collector.addRule(`.monaco-workbench .part.editor > .content .gettingStartedContainer { color: ${foregroundColor}; }`); + } + + const descriptionColor = theme.getColor(descriptionForeground); + if (descriptionColor) { + collector.addRule(`.monaco-workbench .part.editor > .content .gettingStartedContainer .description { color: ${descriptionColor}; }`); + collector.addRule(`.monaco-workbench .part.editor > .content .gettingStartedContainer .category-progress .message { color: ${descriptionColor}; }`); + collector.addRule(`.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .gettingStartedDetailsContent > .getting-started-footer { color: ${descriptionColor}; }`); + } + + const iconColor = theme.getColor(textLinkForeground); + if (iconColor) { + collector.addRule(`.monaco-workbench .part.editor > .content .gettingStartedContainer .getting-started-category .codicon:not(.codicon-close) { color: ${iconColor} }`); + collector.addRule(`.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step .codicon.complete { color: ${iconColor} } `); + collector.addRule(`.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step.expanded .codicon { color: ${iconColor} } `); + } + + const buttonColor = theme.getColor(welcomePageTileBackground); + if (buttonColor) { + collector.addRule(`.monaco-workbench .part.editor > .content .gettingStartedContainer button { background: ${buttonColor}; }`); + } + + const shadowColor = theme.getColor(welcomePageTileShadow); + if (shadowColor) { + collector.addRule(`.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideCategories .getting-started-category { filter: drop-shadow(2px 2px 2px ${buttonColor}); }`); + } + + const buttonHoverColor = theme.getColor(welcomePageTileHoverBackground); + if (buttonHoverColor) { + collector.addRule(`.monaco-workbench .part.editor > .content .gettingStartedContainer button:hover { background: ${buttonHoverColor}; }`); + } + if (buttonColor && buttonHoverColor) { + collector.addRule(`.monaco-workbench .part.editor > .content .gettingStartedContainer button.expanded:hover { background: ${buttonColor}; }`); + } + + const emphasisButtonForeground = theme.getColor(buttonForeground); + if (emphasisButtonForeground) { + collector.addRule(`.monaco-workbench .part.editor > .content .gettingStartedContainer button.emphasis { color: ${emphasisButtonForeground}; }`); + } + + const emphasisButtonBackground = theme.getColor(buttonBackground); + if (emphasisButtonBackground) { + collector.addRule(`.monaco-workbench .part.editor > .content .gettingStartedContainer button.emphasis { background: ${emphasisButtonBackground}; }`); + } + + const pendingStepColor = theme.getColor(descriptionForeground); + if (pendingStepColor) { + collector.addRule(`.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideDetails .getting-started-step .codicon { color: ${pendingStepColor} } `); + } + + const emphasisButtonHoverBackground = theme.getColor(buttonHoverBackground); + if (emphasisButtonHoverBackground) { + collector.addRule(`.monaco-workbench .part.editor > .content .gettingStartedContainer button.emphasis:hover { background: ${emphasisButtonHoverBackground}; }`); + } + + const link = theme.getColor(textLinkForeground); + if (link) { + collector.addRule(`.monaco-workbench .part.editor > .content .gettingStartedContainer a:not(.hide-category-button) { color: ${link}; }`); + collector.addRule(`.monaco-workbench .part.editor > .content .gettingStartedContainer .button-link { color: ${link}; }`); + collector.addRule(`.monaco-workbench .part.editor > .content .gettingStartedContainer .button-link .codicon { color: ${link}; }`); + } + const activeLink = theme.getColor(textLinkActiveForeground); + if (activeLink) { + collector.addRule(`.monaco-workbench .part.editor > .content .gettingStartedContainer a:not(.hide-category-button):hover { color: ${activeLink}; }`); + collector.addRule(`.monaco-workbench .part.editor > .content .gettingStartedContainer a:not(.hide-category-button):active { color: ${activeLink}; }`); + collector.addRule(`.monaco-workbench .part.editor > .content .gettingStartedContainer button.button-link:hover { color: ${activeLink}; }`); + collector.addRule(`.monaco-workbench .part.editor > .content .gettingStartedContainer button.button-link:hover .codicon { color: ${activeLink}; }`); + } + const focusColor = theme.getColor(focusBorder); + if (focusColor) { + collector.addRule(`.monaco-workbench .part.editor > .content .gettingStartedContainer a:not(.codicon-close):focus { outline-color: ${focusColor}; }`); + } + const border = theme.getColor(contrastBorder); + if (border) { + collector.addRule(`.monaco-workbench .part.editor > .content .gettingStartedContainer button { border: 1px solid ${border}; }`); + collector.addRule(`.monaco-workbench .part.editor > .content .gettingStartedContainer button.button-link { border: inherit; }`); + } + const activeBorder = theme.getColor(activeContrastBorder); + if (activeBorder) { + collector.addRule(`.monaco-workbench .part.editor > .content .gettingStartedContainer button:hover { outline-color: ${activeBorder}; }`); + } + + const progressBackground = theme.getColor(welcomePageProgressBackground); + if (progressBackground) { + collector.addRule(`.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideCategories .progress-bar-outer { background-color: ${progressBackground}; }`); + } + const progressForeground = theme.getColor(welcomePageProgressForeground); + if (progressForeground) { + collector.addRule(`.monaco-workbench .part.editor > .content .gettingStartedContainer .gettingStartedSlideCategories .progress-bar-inner { background-color: ${progressForeground}; }`); + } + + const newBadgeForeground = theme.getColor(ACTIVITY_BAR_BADGE_FOREGROUND); + if (newBadgeForeground) { + collector.addRule(`.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlide .getting-started-category .new-badge { color: ${newBadgeForeground}; }`); + collector.addRule(`.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlide .getting-started-category .featured .featured-icon { color: ${newBadgeForeground}; }`); + } + + const newBadgeBackground = theme.getColor(ACTIVITY_BAR_BADGE_BACKGROUND); + if (newBadgeBackground) { + collector.addRule(`.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlide .getting-started-category .new-badge { background-color: ${newBadgeBackground}; }`); + collector.addRule(`.monaco-workbench .part.editor>.content .gettingStartedContainer .gettingStartedSlide .getting-started-category .featured { border-top-color: ${newBadgeBackground}; }`); + } +}); diff --git a/vscode-web-github1s/src/vs/workbench/contrib/welcome/page/browser/vs_code_welcome_page.ts b/vscode-web-github1s/src/vs/workbench/contrib/welcome/page/browser/vs_code_welcome_page.ts deleted file mode 100644 index 4d2cb2ba7..000000000 --- a/vscode-web-github1s/src/vs/workbench/contrib/welcome/page/browser/vs_code_welcome_page.ts +++ /dev/null @@ -1,67 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -import { escape } from 'vs/base/common/strings'; -import { localize } from 'vs/nls'; - -// below codes are changed by github1s -export default () => ` -
-
-
-

${escape(localize('welcomePage.vscode', "Visual Studio Code"))}

-

- One second to read GitHub code with VS Code -

-
-
-
-
-

Rate limit Info:

-
    -
  • ------------------------------
  • -
  • X-RateLimit-Limit:
  • -
  • X-RateLimit-Remaining:
  • -
  • X-RateLimit-Reset:
  • -
  • ------------------------------
  • -
  • Current rate limit window will reset after s
  • -
  • GitHub Rate limiting Documentation
  • -
-
-
-

${escape(localize('welcomePage.help', "Help"))}

- -
-

-
-
-
-

Authentication

-
-
-
-
-
-
-
-

${escape(localize('welcomePage.learn', "Learn"))}

-
-
-
-
-
-
-
-
-
-`; -// above codes are changed by github1s diff --git a/vscode-web-github1s/src/vs/workbench/contrib/welcome/page/browser/welcomePage.contribution.ts b/vscode-web-github1s/src/vs/workbench/contrib/welcome/page/browser/welcomePage.contribution.ts new file mode 100644 index 000000000..f2beb2c3a --- /dev/null +++ b/vscode-web-github1s/src/vs/workbench/contrib/welcome/page/browser/welcomePage.contribution.ts @@ -0,0 +1,38 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { localize } from 'vs/nls'; +import { IWorkbenchContributionsRegistry, Extensions as WorkbenchExtensions } from 'vs/workbench/common/contributions'; +import { Registry } from 'vs/platform/registry/common/platform'; +import { WelcomePageContribution, } from 'vs/workbench/contrib/welcome/page/browser/welcomePage'; +import { IConfigurationRegistry, Extensions as ConfigurationExtensions, ConfigurationScope } from 'vs/platform/configuration/common/configurationRegistry'; +import { LifecyclePhase } from 'vs/workbench/services/lifecycle/common/lifecycle'; +import { workbenchConfigurationNodeBase } from 'vs/workbench/common/configuration'; + +Registry.as(ConfigurationExtensions.Configuration) + .registerConfiguration({ + ...workbenchConfigurationNodeBase, + 'properties': { + 'workbench.startupEditor': { + 'scope': ConfigurationScope.RESOURCE, + 'type': 'string', + 'enum': ['none', 'welcomePage', 'readme', 'newUntitledFile', 'welcomePageInEmptyWorkbench'], + 'enumDescriptions': [ + localize({ comment: ['This is the description for a setting. Values surrounded by single quotes are not to be translated.'], key: 'workbench.startupEditor.none' }, "Start without an editor."), + localize({ comment: ['This is the description for a setting. Values surrounded by single quotes are not to be translated.'], key: 'workbench.startupEditor.welcomePage' }, "Open the Welcome page, with content to aid in getting started with VS Code and extensions."), + localize({ comment: ['This is the description for a setting. Values surrounded by single quotes are not to be translated.'], key: 'workbench.startupEditor.readme' }, "Open the README when opening a folder that contains one, fallback to 'welcomePage' otherwise. Note: This is only observed as a global configuration, it will be ignored if set in a workspace or folder configuration."), + localize({ comment: ['This is the description for a setting. Values surrounded by single quotes are not to be translated.'], key: 'workbench.startupEditor.newUntitledFile' }, "Open a new untitled file (only applies when opening an empty window)."), + localize({ comment: ['This is the description for a setting. Values surrounded by single quotes are not to be translated.'], key: 'workbench.startupEditor.welcomePageInEmptyWorkbench' }, "Open the Welcome page when opening an empty workbench."), + ], + // below codes are changed by github1s + 'default': 'readme', + // above codes are changed by github1s + 'description': localize('workbench.startupEditor', "Controls which editor is shown at startup, if none are restored from the previous session.") + }, + } + }); + +Registry.as(WorkbenchExtensions.Workbench) + .registerWorkbenchContribution(WelcomePageContribution, LifecyclePhase.Restored); diff --git a/vscode-web-github1s/src/vs/workbench/contrib/welcome/page/browser/welcomePage.ts b/vscode-web-github1s/src/vs/workbench/contrib/welcome/page/browser/welcomePage.ts deleted file mode 100644 index 1d5d2624a..000000000 --- a/vscode-web-github1s/src/vs/workbench/contrib/welcome/page/browser/welcomePage.ts +++ /dev/null @@ -1,899 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -import 'vs/css!./welcomePage'; -import 'vs/workbench/contrib/welcome/page/browser/vs_code_welcome_page'; -import { URI } from 'vs/base/common/uri'; -import { CommandsRegistry, ICommandService } from 'vs/platform/commands/common/commands'; -import * as arrays from 'vs/base/common/arrays'; -import { WalkThroughInput } from 'vs/workbench/contrib/welcome/walkThrough/browser/walkThroughInput'; -import { IWorkbenchContribution } from 'vs/workbench/common/contributions'; -import { IInstantiationService, optional } from 'vs/platform/instantiation/common/instantiation'; -import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; -import { onUnexpectedError, isPromiseCanceledError } from 'vs/base/common/errors'; -import { IWindowOpenable } from 'vs/platform/windows/common/windows'; -import { IWorkspaceContextService, WorkbenchState } from 'vs/platform/workspace/common/workspace'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { localize } from 'vs/nls'; -import { Action, WorkbenchActionExecutedEvent, WorkbenchActionExecutedClassification } from 'vs/base/common/actions'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { FileAccess, Schemas } from 'vs/base/common/network'; -import { IBackupFileService } from 'vs/workbench/services/backup/common/backup'; -import { getInstalledExtensions, IExtensionStatus, onExtensionChanged, isKeymapExtension } from 'vs/workbench/contrib/extensions/common/extensionsUtils'; -import { IExtensionManagementService, IExtensionGalleryService, ILocalExtension } from 'vs/platform/extensionManagement/common/extensionManagement'; -import { IWorkbenchExtensionEnablementService, EnablementState } from 'vs/workbench/services/extensionManagement/common/extensionManagement'; -import { IExtensionRecommendationsService } from 'vs/workbench/services/extensionRecommendations/common/extensionRecommendations'; -import { ILifecycleService, StartupKind } from 'vs/workbench/services/lifecycle/common/lifecycle'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { splitName } from 'vs/base/common/labels'; -import { registerThemingParticipant } from 'vs/platform/theme/common/themeService'; -import { focusBorder, textLinkForeground, textLinkActiveForeground, foreground, descriptionForeground, contrastBorder, activeContrastBorder } from 'vs/platform/theme/common/colorRegistry'; -import { getExtraColor } from 'vs/workbench/contrib/welcome/walkThrough/common/walkThroughUtils'; -import { IExtensionsViewPaneContainer, IExtensionsWorkbenchService, VIEWLET_ID } from 'vs/workbench/contrib/extensions/common/extensions'; -import { IEditorInputFactory, EditorInput } from 'vs/workbench/common/editor'; -import { INotificationService, Severity } from 'vs/platform/notification/common/notification'; -import { TimeoutTimer } from 'vs/base/common/async'; -import { areSameExtensions } from 'vs/platform/extensionManagement/common/extensionManagementUtil'; -import { ILabelService } from 'vs/platform/label/common/label'; -import { IFileService } from 'vs/platform/files/common/files'; -import { joinPath } from 'vs/base/common/resources'; -import { IRecentlyOpened, isRecentWorkspace, IRecentWorkspace, IRecentFolder, isRecentFolder, IWorkspacesService } from 'vs/platform/workspaces/common/workspaces'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { IHostService } from 'vs/workbench/services/host/browser/host'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { IEditorOptions } from 'vs/platform/editor/common/editor'; -import { IWorkbenchLayoutService } from 'vs/workbench/services/layout/browser/layoutService'; -import { IViewletService } from 'vs/workbench/services/viewlet/browser/viewlet'; -import { GettingStartedInput, gettingStartedInputTypeId } from 'vs/workbench/contrib/welcome/gettingStarted/browser/gettingStartedInput'; -import { welcomeButtonBackground, welcomeButtonHoverBackground, welcomePageBackground } from 'vs/workbench/contrib/welcome/page/browser/welcomePageColors'; -import { ITASExperimentService } from 'vs/workbench/services/experiment/common/experimentService'; -import { Registry } from 'vs/platform/registry/common/platform'; -import { IConfigurationRegistry, Extensions as ConfigurationExtensions, IConfigurationNode, ConfigurationScope } from 'vs/platform/configuration/common/configurationRegistry'; -import { workbenchConfigurationNodeBase } from 'vs/workbench/common/configuration'; -import { ILogService } from 'vs/platform/log/common/log'; -import { IGettingStartedService } from 'vs/workbench/contrib/welcome/gettingStarted/browser/gettingStartedService'; - - -export const DEFAULT_STARTUP_EDITOR_CONFIG: IConfigurationNode = { - ...workbenchConfigurationNodeBase, - 'properties': { - 'workbench.startupEditor': { - 'scope': ConfigurationScope.RESOURCE, - 'type': 'string', - 'enum': ['none', 'welcomePage', 'readme', 'newUntitledFile', 'welcomePageInEmptyWorkbench', 'gettingStarted'], - 'enumDescriptions': [...[ - localize({ comment: ['This is the description for a setting. Values surrounded by single quotes are not to be translated.'], key: 'workbench.startupEditor.none' }, "Start without an editor."), - localize({ comment: ['This is the description for a setting. Values surrounded by single quotes are not to be translated.'], key: 'workbench.startupEditor.welcomePage' }, "Open the Welcome page."), - localize({ comment: ['This is the description for a setting. Values surrounded by single quotes are not to be translated.'], key: 'workbench.startupEditor.readme' }, "Open the README when opening a folder that contains one, fallback to 'welcomePage' otherwise."), - localize({ comment: ['This is the description for a setting. Values surrounded by single quotes are not to be translated.'], key: 'workbench.startupEditor.newUntitledFile' }, "Open a new untitled file (only applies when opening an empty window)."), - localize({ comment: ['This is the description for a setting. Values surrounded by single quotes are not to be translated.'], key: 'workbench.startupEditor.welcomePageInEmptyWorkbench' }, "Open the Welcome page when opening an empty workbench."), - localize({ comment: ['This is the description for a setting. Values surrounded by single quotes are not to be translated.'], key: 'workbench.startupEditor.gettingStarted' }, "Open the Getting Started page.")] - ], - 'default': 'welcomePage', - 'description': localize('workbench.startupEditor', "Controls which editor is shown at startup, if none are restored from the previous session.") - }, - } -}; - -export const EXPERIMENTAL_GETTING_STARTED_STARTUP_EDITOR_CONFIG: IConfigurationNode = { - ...workbenchConfigurationNodeBase, - 'properties': { - 'workbench.startupEditor': { - 'scope': ConfigurationScope.RESOURCE, - 'type': 'string', - 'enum': ['none', 'welcomePage', 'readme', 'newUntitledFile', 'welcomePageInEmptyWorkbench', 'gettingStarted'], - 'enumDescriptions': [...[ - localize({ comment: ['This is the description for a setting. Values surrounded by single quotes are not to be translated.'], key: 'workbench.startupEditor.none' }, "Start without an editor."), - localize({ comment: ['This is the description for a setting. Values surrounded by single quotes are not to be translated.'], key: 'workbench.startupEditor.welcomePage' }, "Open the Welcome page."), - localize({ comment: ['This is the description for a setting. Values surrounded by single quotes are not to be translated.'], key: 'workbench.startupEditor.readme' }, "Open the README when opening a folder that contains one, fallback to 'welcomePage' otherwise."), - localize({ comment: ['This is the description for a setting. Values surrounded by single quotes are not to be translated.'], key: 'workbench.startupEditor.newUntitledFile' }, "Open a new untitled file (only applies when opening an empty window)."), - localize({ comment: ['This is the description for a setting. Values surrounded by single quotes are not to be translated.'], key: 'workbench.startupEditor.welcomePageInEmptyWorkbench' }, "Open the Welcome page when opening an empty workbench."), - localize({ comment: ['This is the description for a setting. Values surrounded by single quotes are not to be translated.'], key: 'workbench.startupEditor.gettingStarted' }, "Open the Getting Started page.")] - ], - 'default': 'gettingStarted', - 'description': localize('workbench.startupEditor', "Controls which editor is shown at startup, if none are restored from the previous session.") - }, - } -}; - -const configurationKey = 'workbench.startupEditor'; -const oldConfigurationKey = 'workbench.welcome.enabled'; -const telemetryFrom = 'welcomePage'; - -export class WelcomePageContribution implements IWorkbenchContribution { - private experimentManagementComplete: Promise; - private tasExperimentService: ITASExperimentService | undefined; - - constructor( - @IInstantiationService private readonly instantiationService: IInstantiationService, - @IConfigurationService private readonly configurationService: IConfigurationService, - @IEditorService private readonly editorService: IEditorService, - @IBackupFileService private readonly backupFileService: IBackupFileService, - @IFileService private readonly fileService: IFileService, - @IWorkspaceContextService private readonly contextService: IWorkspaceContextService, - @ILifecycleService private readonly lifecycleService: ILifecycleService, - @IWorkbenchLayoutService private readonly layoutService: IWorkbenchLayoutService, - @ICommandService private readonly commandService: ICommandService, - @ITelemetryService private readonly telemetryService: ITelemetryService, - @ILogService private readonly logService: ILogService, - @IGettingStartedService _gettingStartedService: IGettingStartedService, // initializes event listeners - @optional(ITASExperimentService) tasExperimentService: ITASExperimentService, - ) { - this.tasExperimentService = tasExperimentService; - - // Run immediately to minimize time spent waiting for exp service. - this.experimentManagementComplete = this.manageDefaultValuesForGettingStartedExperiment().catch(onUnexpectedError); - this.run().then(undefined, onUnexpectedError); - } - - private async manageDefaultValuesForGettingStartedExperiment() { - const config = this.configurationService.inspect(configurationKey); - - if (this.lifecycleService.startupKind === StartupKind.ReloadedWindow || config.value !== config.defaultValue) { - return; - } - - if (this.configurationService.getValue('workbench.gettingStartedTreatmentOverride')) { - await new Promise(resolve => setTimeout(resolve, 1000)); - Registry.as(ConfigurationExtensions.Configuration).deregisterConfigurations([DEFAULT_STARTUP_EDITOR_CONFIG]); - Registry.as(ConfigurationExtensions.Configuration).registerConfiguration(EXPERIMENTAL_GETTING_STARTED_STARTUP_EDITOR_CONFIG); - } - - let someValueReturned = false; - type GettingStartedTreatmentData = { value: string; }; - type GettingStartedTreatmentClassification = { value: { classification: 'SystemMetaData', purpose: 'PerformanceAndHealth' }; }; - - const tasUseGettingStartedAsDefault = this.tasExperimentService?.getTreatment('StartupGettingStarted') - .then(result => { - this.logService.trace('StartupGettingStarted:', result); - this.telemetryService.publicLog2('gettingStartedTreatmentValue', { value: '' + !!result }); - someValueReturned = true; - return result; - }) - .catch(error => { - this.logService.error('Recieved error when consulting experiment service for getting started experiment', error); - this.telemetryService.publicLog2('gettingStartedTreatmentValue', { value: 'err' }); - someValueReturned = true; - return false; - }); - - const fallback = new Promise(c => setTimeout(() => c(false), 2000)).then( - () => { - if (!someValueReturned) { this.logService.trace('Unable to read getting started treatment data in time, falling back to welcome'); } - someValueReturned = true; - } - ); - - const useGettingStartedAsDefault = !!await Promise.race([tasUseGettingStartedAsDefault, fallback]); - if (useGettingStartedAsDefault) { - Registry.as(ConfigurationExtensions.Configuration).deregisterConfigurations([DEFAULT_STARTUP_EDITOR_CONFIG]); - Registry.as(ConfigurationExtensions.Configuration).registerConfiguration(EXPERIMENTAL_GETTING_STARTED_STARTUP_EDITOR_CONFIG); - } - } - - private async run() { - const enabled = isWelcomePageEnabled(this.configurationService, this.contextService); - if (enabled && this.lifecycleService.startupKind !== StartupKind.ReloadedWindow) { - const hasBackups = await this.backupFileService.hasBackups(); - if (hasBackups) { return; } - - // Open the welcome even if we opened a set of default editors - if (!this.editorService.activeEditor || this.layoutService.openedDefaultEditors) { - const startupEditorSetting = this.configurationService.inspect(configurationKey); - - // 'readme' should not be set in workspace settings to prevent tracking, - // but it can be set as a default (as in codespaces) or a user setting - // below codes are changed by github1s - // we should try to open readme first - const openWithReadme = true || startupEditorSetting.value === 'readme' && - (startupEditorSetting.userValue === 'readme' || startupEditorSetting.defaultValue === 'readme'); - // above codes are changed by github1s - - if (openWithReadme) { - await this.openReadme(); - } else { - await this.openWelcome(); - } - } - } - } - - private async openReadme() { - const readmes = arrays.coalesce( - await Promise.all(this.contextService.getWorkspace().folders.map( - async folder => { - const folderUri = folder.uri; - const folderStat = await this.fileService.resolve(folderUri).catch(onUnexpectedError); - const files = folderStat?.children ? folderStat.children.map(child => child.name).sort() : []; - const file = files.find(file => file.toLowerCase() === 'readme.md') || files.find(file => file.toLowerCase().startsWith('readme')); - if (file) { return joinPath(folderUri, file); } - else { return undefined; } - }))); - - if (!this.editorService.activeEditor) { - if (readmes.length) { - const isMarkDown = (readme: URI) => readme.path.toLowerCase().endsWith('.md'); - await Promise.all([ - this.commandService.executeCommand('markdown.showPreview', null, readmes.filter(isMarkDown), { locked: true }), - this.editorService.openEditors(readmes.filter(readme => !isMarkDown(readme)).map(readme => ({ resource: readme }))), - ]); - } else { - await this.openWelcome(); - } - } - } - - private async openWelcome() { - await this.experimentManagementComplete; - - const startupEditorSetting = this.configurationService.getValue(configurationKey); - const startupEditorTypeID = startupEditorSetting === 'gettingStarted' ? gettingStartedInputTypeId : welcomeInputTypeId; - const editor = this.editorService.activeEditor; - - // Ensure that the welcome editor won't get opened more than once - if (editor?.getTypeId() === startupEditorTypeID || this.editorService.editors.some(e => e.getTypeId() === startupEditorTypeID)) { - return; - } - const options: IEditorOptions = editor ? { pinned: false, index: 0 } : { pinned: false }; - if (startupEditorTypeID === gettingStartedInputTypeId) { - this.editorService.openEditor(this.instantiationService.createInstance(GettingStartedInput, {}), options); - } else { - this.instantiationService.createInstance(WelcomePage).openEditor(options); - } - } -} - -function isWelcomePageEnabled(configurationService: IConfigurationService, contextService: IWorkspaceContextService) { - const startupEditor = configurationService.inspect(configurationKey); - if (!startupEditor.userValue && !startupEditor.workspaceValue) { - const welcomeEnabled = configurationService.inspect(oldConfigurationKey); - if (welcomeEnabled.value !== undefined && welcomeEnabled.value !== null) { - return welcomeEnabled.value; - } - } - if (startupEditor.value === 'readme' && startupEditor.userValue !== 'readme') { - console.error('Warning: `workbench.startupEditor: readme` setting ignored due to being set somewhere other than user settings'); - } - return startupEditor.value === 'welcomePage' || startupEditor.value === 'gettingStarted' || startupEditor.userValue === 'readme' || startupEditor.value === 'welcomePageInEmptyWorkbench' && contextService.getWorkbenchState() === WorkbenchState.EMPTY; -} - -export class WelcomePageAction extends Action { - - public static readonly ID = 'workbench.action.showWelcomePage'; - public static readonly LABEL = localize('welcomePage', "Welcome"); - - constructor( - id: string, - label: string, - @IInstantiationService private readonly instantiationService: IInstantiationService - ) { - super(id, label); - } - - public run(): Promise { - return this.instantiationService.createInstance(WelcomePage) - .openEditor() - .then(() => undefined); - } -} - -interface ExtensionSuggestion { - name: string; - title?: string; - id: string; - isKeymap?: boolean; - isCommand?: boolean; -} - -const extensionPacks: ExtensionSuggestion[] = [ - { name: localize('welcomePage.javaScript', "JavaScript"), id: 'dbaeumer.vscode-eslint' }, - { name: localize('welcomePage.python', "Python"), id: 'ms-python.python' }, - { name: localize('welcomePage.java', "Java"), id: 'vscjava.vscode-java-pack' }, - { name: localize('welcomePage.php', "PHP"), id: 'felixfbecker.php-pack' }, - { name: localize('welcomePage.azure', "Azure"), title: localize('welcomePage.showAzureExtensions', "Show Azure extensions"), id: 'workbench.extensions.action.showAzureExtensions', isCommand: true }, - { name: localize('welcomePage.docker', "Docker"), id: 'ms-azuretools.vscode-docker' }, -]; - -const keymapExtensions: ExtensionSuggestion[] = [ - { name: localize('welcomePage.vim', "Vim"), id: 'vscodevim.vim', isKeymap: true }, - { name: localize('welcomePage.sublime', "Sublime"), id: 'ms-vscode.sublime-keybindings', isKeymap: true }, - { name: localize('welcomePage.atom', "Atom"), id: 'ms-vscode.atom-keybindings', isKeymap: true }, -]; - -interface Strings { - installEvent: string; - installedEvent: string; - detailsEvent: string; - - alreadyInstalled: string; - reloadAfterInstall: string; - installing: string; - extensionNotFound: string; -} - -/* __GDPR__ - "installExtension" : { - "${include}": [ - "${WelcomePageInstall-1}" - ] - } -*/ -/* __GDPR__ - "installedExtension" : { - "${include}": [ - "${WelcomePageInstalled-1}", - "${WelcomePageInstalled-2}", - "${WelcomePageInstalled-3}", - "${WelcomePageInstalled-4}", - "${WelcomePageInstalled-6}" - ] - } -*/ -/* __GDPR__ - "detailsExtension" : { - "${include}": [ - "${WelcomePageDetails-1}" - ] - } -*/ -const extensionPackStrings: Strings = { - installEvent: 'installExtension', - installedEvent: 'installedExtension', - detailsEvent: 'detailsExtension', - - alreadyInstalled: localize('welcomePage.extensionPackAlreadyInstalled', "Support for {0} is already installed."), - reloadAfterInstall: localize('welcomePage.willReloadAfterInstallingExtensionPack', "The window will reload after installing additional support for {0}."), - installing: localize('welcomePage.installingExtensionPack', "Installing additional support for {0}..."), - extensionNotFound: localize('welcomePage.extensionPackNotFound', "Support for {0} with id {1} could not be found."), -}; - -CommandsRegistry.registerCommand('workbench.extensions.action.showAzureExtensions', accessor => { - const viewletService = accessor.get(IViewletService); - return viewletService.openViewlet(VIEWLET_ID, true) - .then(viewlet => viewlet?.getViewPaneContainer() as IExtensionsViewPaneContainer) - .then(viewlet => { - viewlet.search('@sort:installs azure '); - viewlet.focus(); - }); -}); - -/* __GDPR__ - "installKeymap" : { - "${include}": [ - "${WelcomePageInstall-1}" - ] - } -*/ -/* __GDPR__ - "installedKeymap" : { - "${include}": [ - "${WelcomePageInstalled-1}", - "${WelcomePageInstalled-2}", - "${WelcomePageInstalled-3}", - "${WelcomePageInstalled-4}", - "${WelcomePageInstalled-6}" - ] - } -*/ -/* __GDPR__ - "detailsKeymap" : { - "${include}": [ - "${WelcomePageDetails-1}" - ] - } -*/ -const keymapStrings: Strings = { - installEvent: 'installKeymap', - installedEvent: 'installedKeymap', - detailsEvent: 'detailsKeymap', - - alreadyInstalled: localize('welcomePage.keymapAlreadyInstalled', "The {0} keyboard shortcuts are already installed."), - reloadAfterInstall: localize('welcomePage.willReloadAfterInstallingKeymap', "The window will reload after installing the {0} keyboard shortcuts."), - installing: localize('welcomePage.installingKeymap', "Installing the {0} keyboard shortcuts..."), - extensionNotFound: localize('welcomePage.keymapNotFound', "The {0} keyboard shortcuts with id {1} could not be found."), -}; - -const welcomeInputTypeId = 'workbench.editors.welcomePageInput'; - -class WelcomePage extends Disposable { - - readonly editorInput: WalkThroughInput; - - constructor( - @IEditorService private readonly editorService: IEditorService, - @IInstantiationService private readonly instantiationService: IInstantiationService, - @IWorkspacesService private readonly workspacesService: IWorkspacesService, - @IWorkspaceContextService private readonly contextService: IWorkspaceContextService, - @IConfigurationService private readonly configurationService: IConfigurationService, - @ILabelService private readonly labelService: ILabelService, - @INotificationService private readonly notificationService: INotificationService, - @IWorkbenchExtensionEnablementService private readonly extensionEnablementService: IWorkbenchExtensionEnablementService, - @IExtensionGalleryService private readonly extensionGalleryService: IExtensionGalleryService, - @IExtensionManagementService private readonly extensionManagementService: IExtensionManagementService, - @IExtensionRecommendationsService private readonly tipsService: IExtensionRecommendationsService, - @IExtensionsWorkbenchService private readonly extensionsWorkbenchService: IExtensionsWorkbenchService, - @ILifecycleService lifecycleService: ILifecycleService, - @ITelemetryService private readonly telemetryService: ITelemetryService, - @IHostService private readonly hostService: IHostService, - @IProductService private readonly productService: IProductService, - // below codes are changed by github1s - @ICommandService private readonly commandService: ICommandService, - // above codes are changed by github1s - ) { - super(); - this._register(lifecycleService.onShutdown(() => this.dispose())); - - // below codes are changed by github1s - const gitHubTokenStatus = this.getGitHubTokenStatus(); - // above codes are changed by github1s - const recentlyOpened = this.workspacesService.getRecentlyOpened(); - const installedExtensions = this.instantiationService.invokeFunction(getInstalledExtensions); - const resource = FileAccess.asBrowserUri('./vs_code_welcome_page', require) - .with({ - scheme: Schemas.walkThrough, - query: JSON.stringify({ moduleId: 'vs/workbench/contrib/welcome/page/browser/vs_code_welcome_page' }) - }); - this.editorInput = this.instantiationService.createInstance(WalkThroughInput, { - typeId: welcomeInputTypeId, - name: localize('welcome.title', "Welcome"), - resource, - telemetryFrom, - // below codes are changed by github1s - onReady: (container: HTMLElement) => this.onReady(container, recentlyOpened, installedExtensions, gitHubTokenStatus) - // above codes are changed by github1s - }); - } - - public openEditor(options: IEditorOptions = { pinned: false }) { - return this.editorService.openEditor(this.editorInput, options); - } - - // below codes are changed by github1s - private onReady(container: HTMLElement, recentlyOpened: Promise, installedExtensions: Promise, gitHubTokenStatus: Promise): void { - // above codes are changed by github1s - const enabled = this.configurationService.getValue(configurationKey) === 'welcomePage'; - const showOnStartup = container.querySelector('#showOnStartup'); - if (enabled) { - showOnStartup.setAttribute('checked', 'checked'); - } - showOnStartup.addEventListener('click', e => { - this.configurationService.updateValue(configurationKey, showOnStartup.checked ? 'welcomePage' : 'newUntitledFile'); - }); - - const prodName = container.querySelector('.welcomePage .title .caption') as HTMLElement; - if (prodName) { - prodName.textContent = this.productService.nameLong; - } - - // below codes are changed by github1s - gitHubTokenStatus.then(tokenStatus => this.doUpdateGitHubTokenStatus(container, tokenStatus)); - this.registerGitHub1sListeners(container); - // above codes are changed by github1s - recentlyOpened.then(({ workspaces }) => { - // Filter out the current workspace - workspaces = workspaces.filter(recent => !this.contextService.isCurrentWorkspace(isRecentWorkspace(recent) ? recent.workspace : recent.folderUri)); - if (!workspaces.length) { - const recent = container.querySelector('.welcomePage') as HTMLElement; - recent.classList.add('emptyRecent'); - return; - } - const ul = container.querySelector('.recent ul'); - if (!ul) { - return; - } - const moreRecent = ul.querySelector('.moreRecent')!; - const workspacesToShow = workspaces.slice(0, 5); - const updateEntries = () => { - const listEntries = this.createListEntries(workspacesToShow); - while (ul.firstChild) { - ul.removeChild(ul.firstChild); - } - ul.append(...listEntries, moreRecent); - }; - updateEntries(); - this._register(this.labelService.onDidChangeFormatters(updateEntries)); - }).then(undefined, onUnexpectedError); - - this.addExtensionList(container, '.extensionPackList', extensionPacks, extensionPackStrings); - this.addExtensionList(container, '.keymapList', keymapExtensions, keymapStrings); - - this.updateInstalledExtensions(container, installedExtensions); - this._register(this.instantiationService.invokeFunction(onExtensionChanged)(ids => { - for (const id of ids) { - if (container.querySelector(`.installExtension[data-extension="${id.id}"], .enabledExtension[data-extension="${id.id}"]`)) { - const installedExtensions = this.instantiationService.invokeFunction(getInstalledExtensions); - this.updateInstalledExtensions(container, installedExtensions); - break; - } - } - })); - } - - // below codes are changed by github1s - registerGitHub1sListeners(container: HTMLElement) { - container.querySelector('.refresh-button')?.addEventListener('click', () => this.refreshGitHubTokenStatus(container)); - container.querySelector('.create-new-token')?.addEventListener('click', () => window?.open('https://github.com/settings/tokens/new?scopes=repo&description=GitHub1s')); - container.querySelector('.update-oauth-token')?.addEventListener('click', () => this.commandService.executeCommand('github1s.authorizing-github-with-overlay').then(() => this.refreshGitHubTokenStatus(container))); - container.querySelector('.clear-oauth-token')?.addEventListener('click', () => this.commandService.executeCommand('github1s.clear-token').then(() => this.refreshGitHubTokenStatus(container))); - } - - updateElementText(element: HTMLElement, text: string | number, type?: 'SUCCESS' | 'WARNING' | 'ERROR') { - if (!element) { - return; - } - element.innerText = `${text}`; - element.classList.remove('text-warning', 'text-error', 'text-success'); - if (type === 'SUCCESS') { - element.classList.add('text-success'); - } else if (type === 'WARNING') { - element.classList.add('text-warning'); - } else if (type === 'ERROR') { - element.classList.add('text-error'); - } - } - - getGitHubTokenStatus() { - return this.commandService.executeCommand('github1s.validate-token', '', true); - } - - refreshGitHubTokenStatus(container: HTMLElement) { - const statusElement = container.querySelector('.rate-limit-status'); - this.updateElementText(statusElement, ''); - this.getGitHubTokenStatus().then(tokenStatus => { - this.doUpdateGitHubTokenStatus(container, tokenStatus); - }); - } - - doUpdateGitHubTokenStatus(container: HTMLElement, tokenStatus?: any) { - const statusElement = container.querySelector('.rate-limit-status'); - const limitElement = container.querySelector('.x-rate-limit-limit'); - const remainingElement = container.querySelector('.x-rate-limit-remaining'); - const resetElement = container.querySelector('.x-rate-limit-reset'); - const timerElement = container.querySelector('.rate-limit-reset-seconds'); - - if (!tokenStatus) { - this.updateElementText(statusElement, 'Unknown', 'WARNING'); - this.updateElementText(limitElement, 'Unknown', 'WARNING'); - this.updateElementText(remainingElement, 'Unknown', 'WARNING'); - this.updateElementText(resetElement, 'Unknown'); - this.updateElementText(timerElement, 'Unknown', 'WARNING'); - return; - } - - const textType = (value: number) => { - if (value <= 0) { - return 'ERROR'; - } - if (value > 99) { - return 'SUCCESS'; - } - return 'WARNING'; - }; - this.updateElementText(limitElement, tokenStatus.limit, textType(+tokenStatus.limit)); - this.updateElementText(remainingElement, tokenStatus.remaining, textType(+tokenStatus.remaining)); - this.updateElementText(resetElement, tokenStatus.reset); - this.updateElementText(timerElement, Math.max(tokenStatus.reset - Math.ceil(Date.now() / 1000), 0)); - - if (!tokenStatus.token) { - this.updateElementText(statusElement, 'Unauthorized', 'WARNING'); - return; - } - if (tokenStatus.valid) { - this.updateElementText(statusElement, 'Authorized', 'SUCCESS'); - return; - } - this.updateElementText(statusElement, 'Invalid Token', 'ERROR'); - } - // above codes are changed by github1s - - private createListEntries(recents: (IRecentWorkspace | IRecentFolder)[]) { - return recents.map(recent => { - let fullPath: string; - let windowOpenable: IWindowOpenable; - if (isRecentFolder(recent)) { - windowOpenable = { folderUri: recent.folderUri }; - fullPath = recent.label || this.labelService.getWorkspaceLabel(recent.folderUri, { verbose: true }); - } else { - fullPath = recent.label || this.labelService.getWorkspaceLabel(recent.workspace, { verbose: true }); - windowOpenable = { workspaceUri: recent.workspace.configPath }; - } - - const { name, parentPath } = splitName(fullPath); - - const li = document.createElement('li'); - const a = document.createElement('a'); - - a.innerText = name; - a.title = fullPath; - a.setAttribute('aria-label', localize('welcomePage.openFolderWithPath', "Open folder {0} with path {1}", name, parentPath)); - a.href = 'javascript:void(0)'; - a.addEventListener('click', e => { - this.telemetryService.publicLog2('workbenchActionExecuted', { - id: 'openRecentFolder', - from: telemetryFrom - }); - this.hostService.openWindow([windowOpenable], { forceNewWindow: e.ctrlKey || e.metaKey, remoteAuthority: recent.remoteAuthority }); - e.preventDefault(); - e.stopPropagation(); - }); - li.appendChild(a); - - const span = document.createElement('span'); - span.classList.add('path'); - span.classList.add('detail'); - span.innerText = parentPath; - span.title = fullPath; - li.appendChild(span); - - return li; - }); - } - - private addExtensionList(container: HTMLElement, listSelector: string, suggestions: ExtensionSuggestion[], strings: Strings) { - const list = container.querySelector(listSelector); - if (list) { - suggestions.forEach((extension, i) => { - if (i) { - list.appendChild(document.createTextNode(localize('welcomePage.extensionListSeparator', ", "))); - } - - const a = document.createElement('a'); - a.innerText = extension.name; - a.title = extension.title || (extension.isKeymap ? localize('welcomePage.installKeymap', "Install {0} keymap", extension.name) : localize('welcomePage.installExtensionPack', "Install additional support for {0}", extension.name)); - if (extension.isCommand) { - a.href = `command:${extension.id}`; - list.appendChild(a); - } else { - a.classList.add('installExtension'); - a.setAttribute('data-extension', extension.id); - a.href = 'javascript:void(0)'; - a.addEventListener('click', e => { - this.installExtension(extension, strings); - e.preventDefault(); - e.stopPropagation(); - }); - list.appendChild(a); - - const span = document.createElement('span'); - span.innerText = extension.name; - span.title = extension.isKeymap ? localize('welcomePage.installedKeymap', "{0} keymap is already installed", extension.name) : localize('welcomePage.installedExtensionPack', "{0} support is already installed", extension.name); - span.classList.add('enabledExtension'); - span.setAttribute('data-extension', extension.id); - list.appendChild(span); - } - }); - } - } - - private installExtension(extensionSuggestion: ExtensionSuggestion, strings: Strings): void { - /* __GDPR__FRAGMENT__ - "WelcomePageInstall-1" : { - "from" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" }, - "extensionId": { "classification": "SystemMetaData", "purpose": "FeatureInsight" } - } - */ - this.telemetryService.publicLog(strings.installEvent, { - from: telemetryFrom, - extensionId: extensionSuggestion.id, - }); - this.instantiationService.invokeFunction(getInstalledExtensions).then(extensions => { - const installedExtension = extensions.find(extension => areSameExtensions(extension.identifier, { id: extensionSuggestion.id })); - if (installedExtension && installedExtension.globallyEnabled) { - /* __GDPR__FRAGMENT__ - "WelcomePageInstalled-1" : { - "from" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" }, - "extensionId": { "classification": "SystemMetaData", "purpose": "FeatureInsight" }, - "outcome": { "classification": "SystemMetaData", "purpose": "FeatureInsight" } - } - */ - this.telemetryService.publicLog(strings.installedEvent, { - from: telemetryFrom, - extensionId: extensionSuggestion.id, - outcome: 'already_enabled', - }); - this.notificationService.info(strings.alreadyInstalled.replace('{0}', extensionSuggestion.name)); - return; - } - const foundAndInstalled = installedExtension ? Promise.resolve(installedExtension.local) : this.extensionGalleryService.query({ names: [extensionSuggestion.id], source: telemetryFrom }, CancellationToken.None) - .then((result): null | Promise => { - const [extension] = result.firstPage; - if (!extension) { - return null; - } - return this.extensionManagementService.installFromGallery(extension) - .then(() => this.extensionManagementService.getInstalled()) - .then(installed => { - const local = installed.filter(i => areSameExtensions(extension.identifier, i.identifier))[0]; - // TODO: Do this as part of the install to avoid multiple events. - return this.extensionEnablementService.setEnablement([local], EnablementState.DisabledGlobally).then(() => local); - }); - }); - - this.notificationService.prompt( - Severity.Info, - strings.reloadAfterInstall.replace('{0}', extensionSuggestion.name), - [{ - label: localize('ok', "OK"), - run: () => { - const messageDelay = new TimeoutTimer(); - messageDelay.cancelAndSet(() => { - this.notificationService.info(strings.installing.replace('{0}', extensionSuggestion.name)); - }, 300); - const extensionsToDisable = extensions.filter(extension => isKeymapExtension(this.tipsService, extension) && extension.globallyEnabled).map(extension => extension.local); - extensionsToDisable.length ? this.extensionEnablementService.setEnablement(extensionsToDisable, EnablementState.DisabledGlobally) : Promise.resolve() - .then(() => { - return foundAndInstalled.then(foundExtension => { - messageDelay.cancel(); - if (foundExtension) { - return this.extensionEnablementService.setEnablement([foundExtension], EnablementState.EnabledGlobally) - .then(() => { - /* __GDPR__FRAGMENT__ - "WelcomePageInstalled-2" : { - "from" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" }, - "extensionId": { "classification": "SystemMetaData", "purpose": "FeatureInsight" }, - "outcome": { "classification": "SystemMetaData", "purpose": "FeatureInsight" } - } - */ - this.telemetryService.publicLog(strings.installedEvent, { - from: telemetryFrom, - extensionId: extensionSuggestion.id, - outcome: installedExtension ? 'enabled' : 'installed', - }); - return this.hostService.reload(); - }); - } else { - /* __GDPR__FRAGMENT__ - "WelcomePageInstalled-3" : { - "from" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" }, - "extensionId": { "classification": "SystemMetaData", "purpose": "FeatureInsight" }, - "outcome": { "classification": "SystemMetaData", "purpose": "FeatureInsight" } - } - */ - this.telemetryService.publicLog(strings.installedEvent, { - from: telemetryFrom, - extensionId: extensionSuggestion.id, - outcome: 'not_found', - }); - this.notificationService.error(strings.extensionNotFound.replace('{0}', extensionSuggestion.name).replace('{1}', extensionSuggestion.id)); - return undefined; - } - }); - }).then(undefined, err => { - /* __GDPR__FRAGMENT__ - "WelcomePageInstalled-4" : { - "from" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" }, - "extensionId": { "classification": "SystemMetaData", "purpose": "FeatureInsight" }, - "outcome": { "classification": "SystemMetaData", "purpose": "FeatureInsight" } - } - */ - this.telemetryService.publicLog(strings.installedEvent, { - from: telemetryFrom, - extensionId: extensionSuggestion.id, - outcome: isPromiseCanceledError(err) ? 'canceled' : 'error', - }); - this.notificationService.error(err); - }); - } - }, { - label: localize('details', "Details"), - run: () => { - /* __GDPR__FRAGMENT__ - "WelcomePageDetails-1" : { - "from" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" }, - "extensionId": { "classification": "SystemMetaData", "purpose": "FeatureInsight" } - } - */ - this.telemetryService.publicLog(strings.detailsEvent, { - from: telemetryFrom, - extensionId: extensionSuggestion.id, - }); - this.extensionsWorkbenchService.queryGallery({ names: [extensionSuggestion.id] }, CancellationToken.None) - .then(result => this.extensionsWorkbenchService.open(result.firstPage[0])) - .then(undefined, onUnexpectedError); - } - }] - ); - }).then(undefined, err => { - /* __GDPR__FRAGMENT__ - "WelcomePageInstalled-6" : { - "from" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" }, - "extensionId": { "classification": "SystemMetaData", "purpose": "FeatureInsight" }, - "outcome": { "classification": "SystemMetaData", "purpose": "FeatureInsight" } - } - */ - this.telemetryService.publicLog(strings.installedEvent, { - from: telemetryFrom, - extensionId: extensionSuggestion.id, - outcome: isPromiseCanceledError(err) ? 'canceled' : 'error', - }); - this.notificationService.error(err); - }); - } - - private updateInstalledExtensions(container: HTMLElement, installedExtensions: Promise) { - installedExtensions.then(extensions => { - const elements = container.querySelectorAll('.installExtension, .enabledExtension'); - for (let i = 0; i < elements.length; i++) { - elements[i].classList.remove('installed'); - } - extensions.filter(ext => ext.globallyEnabled) - .map(ext => ext.identifier.id) - .forEach(id => { - const install = container.querySelectorAll(`.installExtension[data-extension="${id}"]`); - for (let i = 0; i < install.length; i++) { - install[i].classList.add('installed'); - } - const enabled = container.querySelectorAll(`.enabledExtension[data-extension="${id}"]`); - for (let i = 0; i < enabled.length; i++) { - enabled[i].classList.add('installed'); - } - }); - }).then(undefined, onUnexpectedError); - } -} - -export class WelcomeInputFactory implements IEditorInputFactory { - - static readonly ID = welcomeInputTypeId; - - public canSerialize(editorInput: EditorInput): boolean { - return true; - } - - public serialize(editorInput: EditorInput): string { - return '{}'; - } - - public deserialize(instantiationService: IInstantiationService, serializedEditorInput: string): WalkThroughInput { - return instantiationService.createInstance(WelcomePage) - .editorInput; - } -} - -// theming - -registerThemingParticipant((theme, collector) => { - const backgroundColor = theme.getColor(welcomePageBackground); - if (backgroundColor) { - collector.addRule(`.monaco-workbench .part.editor > .content .welcomePageContainer { background-color: ${backgroundColor}; }`); - } - const foregroundColor = theme.getColor(foreground); - if (foregroundColor) { - collector.addRule(`.monaco-workbench .part.editor > .content .welcomePage .caption { color: ${foregroundColor}; }`); - } - const descriptionColor = theme.getColor(descriptionForeground); - if (descriptionColor) { - collector.addRule(`.monaco-workbench .part.editor > .content .welcomePage .detail { color: ${descriptionColor}; }`); - } - const buttonColor = getExtraColor(theme, welcomeButtonBackground, { dark: 'rgba(0, 0, 0, .2)', extra_dark: 'rgba(200, 235, 255, .042)', light: 'rgba(0,0,0,.04)', hc: 'black' }); - if (buttonColor) { - collector.addRule(`.monaco-workbench .part.editor > .content .welcomePage .commands .item button { background: ${buttonColor}; }`); - } - const buttonHoverColor = getExtraColor(theme, welcomeButtonHoverBackground, { dark: 'rgba(200, 235, 255, .072)', extra_dark: 'rgba(200, 235, 255, .072)', light: 'rgba(0,0,0,.10)', hc: null }); - if (buttonHoverColor) { - collector.addRule(`.monaco-workbench .part.editor > .content .welcomePage .commands .item button:hover { background: ${buttonHoverColor}; }`); - } - const link = theme.getColor(textLinkForeground); - if (link) { - collector.addRule(`.monaco-workbench .part.editor > .content .welcomePage a { color: ${link}; }`); - } - const activeLink = theme.getColor(textLinkActiveForeground); - if (activeLink) { - collector.addRule(`.monaco-workbench .part.editor > .content .welcomePage a:hover, - .monaco-workbench .part.editor > .content .welcomePage a:active { color: ${activeLink}; }`); - } - const focusColor = theme.getColor(focusBorder); - if (focusColor) { - collector.addRule(`.monaco-workbench .part.editor > .content .welcomePage a:focus { outline-color: ${focusColor}; }`); - } - const border = theme.getColor(contrastBorder); - if (border) { - collector.addRule(`.monaco-workbench .part.editor > .content .welcomePage .commands .item button { border-color: ${border}; }`); - } - const activeBorder = theme.getColor(activeContrastBorder); - if (activeBorder) { - collector.addRule(`.monaco-workbench .part.editor > .content .welcomePage .commands .item button:hover { outline-color: ${activeBorder}; }`); - } -}); diff --git a/vscode-web-github1s/src/vs/workbench/services/extensions/worker/extensionHostWorkerMain.ts b/vscode-web-github1s/src/vs/workbench/services/extensions/worker/extensionHostWorkerMain.ts deleted file mode 100644 index 4e05f9355..000000000 --- a/vscode-web-github1s/src/vs/workbench/services/extensions/worker/extensionHostWorkerMain.ts +++ /dev/null @@ -1,76 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -(function () { - - const MonacoEnvironment = (self).MonacoEnvironment; - const monacoBaseUrl = MonacoEnvironment && MonacoEnvironment.baseUrl ? MonacoEnvironment.baseUrl : '../../../../../'; - - const trustedTypesPolicy = ( - typeof self.trustedTypes?.createPolicy === 'function' - ? self.trustedTypes?.createPolicy('amdLoader', { - createScriptURL: value => value, - createScript: (_, ...args: string[]) => { - // workaround a chrome issue not allowing to create new functions - // see https://github.com/w3c/webappsec-trusted-types/wiki/Trusted-Types-for-function-constructor - const fnArgs = args.slice(0, -1).join(','); - const fnBody = args.pop()!.toString(); - const body = `(function anonymous(${fnArgs}) {\n${fnBody}\n})`; - return body; - } - }) - : undefined - ); - - function loadAMDLoader() { - return new Promise((resolve, reject) => { - if (typeof (self).define === 'function' && (self).define.amd) { - return resolve(); - } - const loaderSrc: string | TrustedScriptURL = monacoBaseUrl + 'vs/loader.js'; - - const isCrossOrigin = (/^((http:)|(https:)|(file:))/.test(loaderSrc) && loaderSrc.substring(0, self.origin.length) !== self.origin); - if (!isCrossOrigin) { - // use `fetch` if possible because `importScripts` - // is synchronous and can lead to deadlocks on Safari - fetch(loaderSrc).then((response) => { - if (response.status !== 200) { - throw new Error(response.statusText); - } - return response.text(); - }).then((text) => { - text = `${text}\n//# sourceURL=${loaderSrc}`; - const func = ( - trustedTypesPolicy - // below codes are changed by github1s - // fix error in webworker for old browsers - ? self.eval(trustedTypesPolicy.createScript('', text).toString()) - // above codes are changed by github1s - : new Function(text) - ); - func.call(self); - resolve(); - }).then(undefined, reject); - return; - } - - if (trustedTypesPolicy) { - importScripts(trustedTypesPolicy.createScriptURL(loaderSrc) as unknown as string); - } else { - importScripts(loaderSrc as string); - } - resolve(); - }); - } - - loadAMDLoader().then(() => { - require.config({ - baseUrl: monacoBaseUrl, - catchError: true, - trustedTypesPolicy - }); - require(['vs/workbench/services/extensions/worker/extensionHostWorker'], () => { }, err => console.error(err)); - }).then(undefined, (err) => console.error(err)); -})(); diff --git a/vscode-web-github1s/src/vs/workbench/services/themes/browser/workbenchThemeService.ts b/vscode-web-github1s/src/vs/workbench/services/themes/browser/workbenchThemeService.ts index 531e55ebf..e3e301863 100644 --- a/vscode-web-github1s/src/vs/workbench/services/themes/browser/workbenchThemeService.ts +++ b/vscode-web-github1s/src/vs/workbench/services/themes/browser/workbenchThemeService.ts @@ -34,7 +34,6 @@ import { ProductIconThemeData, DEFAULT_PRODUCT_ICON_THEME_ID } from 'vs/workbenc import { registerProductIconThemeSchemas } from 'vs/workbench/services/themes/common/productIconThemeSchema'; import { ILogService } from 'vs/platform/log/common/log'; // below codes are changed by github1s -// change the default workbench theme to dark // import { isWeb } from 'vs/base/common/platform'; // above codes are changed by github1s import { ColorScheme } from 'vs/platform/theme/common/theme'; @@ -277,8 +276,8 @@ export class WorkbenchThemeService implements IWorkbenchThemeService { this.currentColorTheme.setCustomTokenColors(this.settings.tokenColorCustomizations); hasColorChanges = true; } - if (e.affectsConfiguration(ThemeSettings.SEMANTIC_TOKEN_COLOR_CUSTOMIZATIONS) || e.affectsConfiguration(ThemeSettings.TOKEN_COLOR_CUSTOMIZATIONS_EXPERIMENTAL)) { - this.currentColorTheme.setCustomSemanticTokenColors(this.settings.semanticTokenColorCustomizations, this.settings.experimentalSemanticTokenColorCustomizations); + if (e.affectsConfiguration(ThemeSettings.SEMANTIC_TOKEN_COLOR_CUSTOMIZATIONS)) { + this.currentColorTheme.setCustomSemanticTokenColors(this.settings.semanticTokenColorCustomizations); hasColorChanges = true; } if (hasColorChanges) { @@ -386,10 +385,10 @@ export class WorkbenchThemeService implements IWorkbenchThemeService { } private getPreferredColorScheme(): ColorScheme | undefined { - if (this.configurationService.getValue(ThemeSettings.DETECT_HC) && this.hostColorService.highContrast) { + if (this.configurationService.getValue(ThemeSettings.DETECT_HC) && this.hostColorService.highContrast) { return ColorScheme.HIGH_CONTRAST; } - if (this.configurationService.getValue(ThemeSettings.DETECT_COLOR_SCHEME)) { + if (this.configurationService.getValue(ThemeSettings.DETECT_COLOR_SCHEME)) { return this.hostColorService.dark ? ColorScheme.DARK : ColorScheme.LIGHT; } return undefined; @@ -397,8 +396,8 @@ export class WorkbenchThemeService implements IWorkbenchThemeService { private async applyPreferredColorTheme(type: ColorScheme): Promise { const settingId = type === ColorScheme.DARK ? ThemeSettings.PREFERRED_DARK_THEME : type === ColorScheme.LIGHT ? ThemeSettings.PREFERRED_LIGHT_THEME : ThemeSettings.PREFERRED_HC_THEME; - const themeSettingId = this.configurationService.getValue(settingId); - if (themeSettingId) { + const themeSettingId = this.configurationService.getValue(settingId); + if (themeSettingId && typeof themeSettingId === 'string') { const theme = this.colorThemeRegistry.findThemeBySettingsId(themeSettingId, undefined); if (theme) { const configurationTarget = this.settings.findAutoConfigurationTarget(settingId); @@ -426,6 +425,9 @@ export class WorkbenchThemeService implements IWorkbenchThemeService { return Promise.resolve(null); } if (themeId === this.currentColorTheme.id && this.currentColorTheme.isLoaded) { + if (settingsTarget !== 'preview') { + this.currentColorTheme.toStorage(this.storageService); + } return this.settings.setColorTheme(this.currentColorTheme, settingsTarget); } @@ -509,7 +511,7 @@ export class WorkbenchThemeService implements IWorkbenchThemeService { this.onColorThemeChange.fire(this.currentColorTheme); // remember theme data for a quick restore - if (newTheme.isLoaded) { + if (newTheme.isLoaded && settingsTarget !== 'preview') { newTheme.toStorage(this.storageService); } @@ -564,23 +566,23 @@ export class WorkbenchThemeService implements IWorkbenchThemeService { public async setFileIconTheme(iconTheme: string | undefined, settingsTarget: ThemeSettingTarget): Promise { return this.fileIconThemeSequencer.queue(async () => { iconTheme = iconTheme || ''; - if (iconTheme === this.currentFileIconTheme.id && this.currentFileIconTheme.isLoaded) { - await this.settings.setFileIconTheme(this.currentFileIconTheme, settingsTarget); - return this.currentFileIconTheme; - } + if (iconTheme !== this.currentFileIconTheme.id || !this.currentFileIconTheme.isLoaded) { - const newThemeData = this.fileIconThemeRegistry.findThemeById(iconTheme) || FileIconThemeData.noIconTheme; - await newThemeData.ensureLoaded(this.fileService); + const newThemeData = this.fileIconThemeRegistry.findThemeById(iconTheme) || FileIconThemeData.noIconTheme; + await newThemeData.ensureLoaded(this.fileService); + + this.applyAndSetFileIconTheme(newThemeData); // updates this.currentFileIconTheme + } - this.applyAndSetFileIconTheme(newThemeData); + const themeData = this.currentFileIconTheme; // remember theme data for a quick restore - if (newThemeData.isLoaded && (!newThemeData.location || !getRemoteAuthority(newThemeData.location))) { - newThemeData.toStorage(this.storageService); + if (themeData.isLoaded && settingsTarget !== 'preview' && (!themeData.location || !getRemoteAuthority(themeData.location))) { + themeData.toStorage(this.storageService); } await this.settings.setFileIconTheme(this.currentFileIconTheme, settingsTarget); - return newThemeData; + return themeData; }); } @@ -640,23 +642,21 @@ export class WorkbenchThemeService implements IWorkbenchThemeService { public async setProductIconTheme(iconTheme: string | undefined, settingsTarget: ThemeSettingTarget): Promise { return this.productIconThemeSequencer.queue(async () => { iconTheme = iconTheme || ''; - if (iconTheme === this.currentProductIconTheme.id && this.currentProductIconTheme.isLoaded) { - await this.settings.setProductIconTheme(this.currentProductIconTheme, settingsTarget); - return this.currentProductIconTheme; - } - - const newThemeData = this.productIconThemeRegistry.findThemeById(iconTheme) || ProductIconThemeData.defaultTheme; - await newThemeData.ensureLoaded(this.fileService, this.logService); + if (iconTheme !== this.currentProductIconTheme.id || !this.currentProductIconTheme.isLoaded) { + const newThemeData = this.productIconThemeRegistry.findThemeById(iconTheme) || ProductIconThemeData.defaultTheme; + await newThemeData.ensureLoaded(this.fileService, this.logService); - this.applyAndSetProductIconTheme(newThemeData); + this.applyAndSetProductIconTheme(newThemeData); // updates this.currentProductIconTheme + } + const themeData = this.currentProductIconTheme; // remember theme data for a quick restore - if (newThemeData.isLoaded && (!newThemeData.location || !getRemoteAuthority(newThemeData.location))) { - newThemeData.toStorage(this.storageService); + if (themeData.isLoaded && settingsTarget !== 'preview' && (!themeData.location || !getRemoteAuthority(themeData.location))) { + themeData.toStorage(this.storageService); } await this.settings.setProductIconTheme(this.currentProductIconTheme, settingsTarget); - return newThemeData; + return themeData; }); } @@ -698,19 +698,17 @@ export class WorkbenchThemeService implements IWorkbenchThemeService { class ThemeFileWatcher { - private inExtensionDevelopment: boolean; private watchedLocation: URI | undefined; private watcherDisposable: IDisposable | undefined; private fileChangeListener: IDisposable | undefined; - constructor(private fileService: IFileService, environmentService: IWorkbenchEnvironmentService, private onUpdate: () => void) { - this.inExtensionDevelopment = !!environmentService.extensionDevelopmentLocationURI; + constructor(private fileService: IFileService, private environmentService: IWorkbenchEnvironmentService, private onUpdate: () => void) { } update(theme: { location?: URI, watch?: boolean; }) { if (!resources.isEqual(theme.location, this.watchedLocation)) { this.dispose(); - if (theme.location && (theme.watch || this.inExtensionDevelopment)) { + if (theme.location && (theme.watch || this.environmentService.isExtensionDevelopment)) { this.watchedLocation = theme.location; this.watcherDisposable = this.fileService.watch(theme.location); this.fileService.onDidFilesChange(e => { diff --git a/vscode-web-github1s/src/vs/workbench/services/themes/common/themeConfiguration.ts b/vscode-web-github1s/src/vs/workbench/services/themes/common/themeConfiguration.ts index b309d5041..3eb332e78 100644 --- a/vscode-web-github1s/src/vs/workbench/services/themes/common/themeConfiguration.ts +++ b/vscode-web-github1s/src/vs/workbench/services/themes/common/themeConfiguration.ts @@ -12,10 +12,9 @@ import { IJSONSchema } from 'vs/base/common/jsonSchema'; import { textmateColorsSchemaId, textmateColorGroupSchemaId } from 'vs/workbench/services/themes/common/colorThemeSchema'; import { workbenchColorsSchemaId } from 'vs/platform/theme/common/colorRegistry'; import { tokenStylingSchemaId } from 'vs/platform/theme/common/tokenClassificationRegistry'; -import { ThemeSettings, IWorkbenchColorTheme, IWorkbenchFileIconTheme, IColorCustomizations, ITokenColorCustomizations, IWorkbenchProductIconTheme, ISemanticTokenColorCustomizations, IExperimentalSemanticTokenColorCustomizations, ThemeSettingTarget } from 'vs/workbench/services/themes/common/workbenchThemeService'; +import { ThemeSettings, IWorkbenchColorTheme, IWorkbenchFileIconTheme, IColorCustomizations, ITokenColorCustomizations, IWorkbenchProductIconTheme, ISemanticTokenColorCustomizations, ThemeSettingTarget } from 'vs/workbench/services/themes/common/workbenchThemeService'; import { IConfigurationService, ConfigurationTarget } from 'vs/platform/configuration/common/configuration'; // below codes are changed by github1s -// set dark theme by default import { isMacintosh, isWindows } from 'vs/base/common/platform'; // above codes are changed by github1s @@ -76,7 +75,7 @@ const preferredHCThemeSettingSchema: IConfigurationPropertySchema = { }; const detectColorSchemeSettingSchema: IConfigurationPropertySchema = { type: 'boolean', - description: nls.localize('detectColorScheme', 'If set, automatically switch to the preferred color theme based on the OS appearance.'), + markdownDescription: nls.localize('detectColorScheme', 'If set, automatically switch to the preferred color theme based on the OS appearance. If the OS appearance is dark, the theme specified at `#{0}#` is used, for light `#{1}#`.', ThemeSettings.PREFERRED_DARK_THEME, ThemeSettings.PREFERRED_LIGHT_THEME), default: false }; @@ -112,7 +111,7 @@ const productIconThemeSettingSchema: IConfigurationPropertySchema = { const detectHCSchemeSettingSchema: IConfigurationPropertySchema = { type: 'boolean', default: true, - description: nls.localize('autoDetectHighContrast', "If enabled, will automatically change to high contrast theme if the OS is using a high contrast theme."), + markdownDescription: nls.localize('autoDetectHighContrast', "If enabled, will automatically change to high contrast theme if the OS is using a high contrast theme. The high contrast theme to use is specified by `#{0}#`", ThemeSettings.PREFERRED_HC_THEME), scope: ConfigurationScope.APPLICATION }; @@ -150,7 +149,10 @@ function tokenGroupSettings(description: string): IJSONSchema { }; } +const themeSpecificSettingKey = '^\\[[^\\]]*(\\]\\s*\\[[^\\]]*)*\\]$'; + const tokenColorSchema: IJSONSchema = { + type: 'object', properties: { comments: tokenGroupSettings(nls.localize('editorColors.comments', "Sets the colors and styles for comments")), strings: tokenGroupSettings(nls.localize('editorColors.strings', "Sets the colors and styles for strings literals.")), @@ -169,13 +171,14 @@ const tokenColorSchema: IJSONSchema = { markdownDeprecationMessage: nls.localize('editorColors.semanticHighlighting.deprecationMessageMarkdown', 'Use `enabled` in `#editor.semanticTokenColorCustomizations#` setting instead.'), type: 'boolean' } - } + }, + additionalProperties: false }; const tokenColorCustomizationSchema: IConfigurationPropertySchema = { description: nls.localize('editorColors', "Overrides editor syntax colors and font style from the currently selected color theme."), default: {}, - allOf: [tokenColorSchema] + allOf: [{ ...tokenColorSchema, patternProperties: { '^\\[': {} } }] }; const semanticTokenColorSchema: IJSONSchema = { @@ -201,20 +204,13 @@ const semanticTokenColorCustomizationSchema: IConfigurationPropertySchema = { allOf: [{ ...semanticTokenColorSchema, patternProperties: { '^\\[': {} } }] }; -const experimentalTokenStylingCustomizationSchema: IConfigurationPropertySchema = { - deprecationMessage: nls.localize('editorColors.experimentalTokenStyling.deprecationMessage', 'Use `editor.semanticTokenColorCustomizations` instead.'), - markdownDeprecationMessage: nls.localize('editorColors.experimentalTokenStyling.deprecationMessageMarkdown', 'Use `#editor.semanticTokenColorCustomizations#` instead.'), - default: {}, - allOf: [{ $ref: tokenStylingSchemaId }], -}; const tokenColorCustomizationConfiguration: IConfigurationNode = { id: 'editor', order: 7.2, type: 'object', properties: { [ThemeSettings.TOKEN_COLOR_CUSTOMIZATIONS]: tokenColorCustomizationSchema, - [ThemeSettings.SEMANTIC_TOKEN_COLOR_CUSTOMIZATIONS]: semanticTokenColorCustomizationSchema, - [ThemeSettings.TOKEN_COLOR_CUSTOMIZATIONS_EXPERIMENTAL]: experimentalTokenStylingCustomizationSchema + [ThemeSettings.SEMANTIC_TOKEN_COLOR_CUSTOMIZATIONS]: semanticTokenColorCustomizationSchema } }; @@ -229,7 +225,6 @@ export function updateColorThemeConfigurationSchemas(themes: IWorkbenchColorThem const themeSpecificWorkbenchColors: IJSONSchema = { properties: {} }; const themeSpecificTokenColors: IJSONSchema = { properties: {} }; const themeSpecificSemanticTokenColors: IJSONSchema = { properties: {} }; - const experimentalThemeSpecificSemanticTokenColors: IJSONSchema = { properties: {} }; const workbenchColors = { $ref: workbenchColorsSchemaId, additionalProperties: false }; const tokenColors = { properties: tokenColorSchema.properties, additionalProperties: false }; @@ -239,13 +234,14 @@ export function updateColorThemeConfigurationSchemas(themes: IWorkbenchColorThem themeSpecificWorkbenchColors.properties![themeId] = workbenchColors; themeSpecificTokenColors.properties![themeId] = tokenColors; themeSpecificSemanticTokenColors.properties![themeId] = semanticTokenColorSchema; - experimentalThemeSpecificSemanticTokenColors.properties![themeId] = { $ref: tokenStylingSchemaId, additionalProperties: false }; } + themeSpecificWorkbenchColors.patternProperties = { [themeSpecificSettingKey]: workbenchColors }; + themeSpecificTokenColors.patternProperties = { [themeSpecificSettingKey]: tokenColors }; + themeSpecificSemanticTokenColors.patternProperties = { [themeSpecificSettingKey]: semanticTokenColorSchema }; colorCustomizationsSchema.allOf![1] = themeSpecificWorkbenchColors; tokenColorCustomizationSchema.allOf![1] = themeSpecificTokenColors; semanticTokenColorCustomizationSchema.allOf![1] = themeSpecificSemanticTokenColors; - experimentalTokenStylingCustomizationSchema.allOf![1] = experimentalThemeSpecificSemanticTokenColors; configurationRegistry.notifyConfigurationSchemaUpdated(themeSettingsConfiguration, tokenColorCustomizationConfiguration); } @@ -295,10 +291,6 @@ export class ThemeConfiguration { return this.configurationService.getValue(ThemeSettings.SEMANTIC_TOKEN_COLOR_CUSTOMIZATIONS); } - public get experimentalSemanticTokenColorCustomizations(): IExperimentalSemanticTokenColorCustomizations | undefined { - return this.configurationService.getValue(ThemeSettings.TOKEN_COLOR_CUSTOMIZATIONS_EXPERIMENTAL); - } - public async setColorTheme(theme: IWorkbenchColorTheme, settingsTarget: ThemeSettingTarget): Promise { await this.writeConfiguration(ThemeSettings.COLOR_THEME, theme.settingsId, settingsTarget); return theme; @@ -332,7 +324,7 @@ export class ThemeConfiguration { } private async writeConfiguration(key: string, value: any, settingsTarget: ThemeSettingTarget): Promise { - if (settingsTarget === undefined) { + if (settingsTarget === undefined || settingsTarget === 'preview') { return; } diff --git a/yarn.lock b/yarn.lock index e18036528..b050b909d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -39,10 +39,10 @@ minimatch "^3.0.4" strip-json-comments "^3.1.1" -"@github1s/vscode-web@0.1.10": - version "0.1.10" - resolved "https://registry.yarnpkg.com/@github1s/vscode-web/-/vscode-web-0.1.10.tgz#65237bd929aa4426cbf10b28239444170b53cd03" - integrity sha512-q8xTuE1MlKyUsBtQG6+mpQKVF4cohKCbqvHoqiIDalCP+XFdeBTWvTMnHnn+x/36a+Ae+1dzMqQGxo1/kq9qOA== +"@github1s/vscode-web@0.2.1": + version "0.2.1" + resolved "https://registry.yarnpkg.com/@github1s/vscode-web/-/vscode-web-0.2.1.tgz#513aa78f8f933e1c92e9d66203115cdacbb572ab" + integrity sha512-+TPlM0CNagT2mHCAaMXR/hVWB9pHxSZnEy+LsEMV4ZYWaVzfiCjqSc8SvDsabrLUWMSPfAeXRzo2Y1fodr5/kA== dependencies: iconv-lite-umd "0.6.8" jschardet "2.2.1" From 7925c2eed1ecf47c99b98e69007a77ae90eeaa87 Mon Sep 17 00:00:00 2001 From: netcon Date: Mon, 13 Sep 2021 14:18:43 +0800 Subject: [PATCH 061/280] fix: vscode-unpkg proxy miss necessary headers (#355) --- api/vscode-unpkg/index.js | 11 +++++++++-- api/vscode-unpkg/yarn.lock | 18 +++++++++--------- scripts/serve-dist.js | 38 +++++++++++++++----------------------- 3 files changed, 33 insertions(+), 34 deletions(-) diff --git a/api/vscode-unpkg/index.js b/api/vscode-unpkg/index.js index aea03720a..be274d790 100644 --- a/api/vscode-unpkg/index.js +++ b/api/vscode-unpkg/index.js @@ -18,8 +18,15 @@ module.exports = async (req, res) => { const publisher = matches[1]; const restPartsPath = matches[2]; const requestUrl = `https://${publisher}.vscode-unpkg.net/${publisher}/${restPartsPath}`; - const response = await got.get(requestUrl); + const responsePromise = got(requestUrl); + const bufferPromise = responsePromise.buffer(); + const [response, buffer] = await Promise.all([ + responsePromise, + bufferPromise, + ]); res.status(response.statusCode); - return res.send(response.body); + res.setHeader('cache-control', response.headers['cache-control']); + res.setHeader('content-type', response.headers['content-type']); + return res.send(buffer); }; diff --git a/api/vscode-unpkg/yarn.lock b/api/vscode-unpkg/yarn.lock index 6e947efe3..5b796e666 100644 --- a/api/vscode-unpkg/yarn.lock +++ b/api/vscode-unpkg/yarn.lock @@ -3,9 +3,9 @@ "@sindresorhus/is@^4.0.0": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.0.1.tgz#d26729db850fa327b7cacc5522252194404226f5" - integrity sha512-Qm9hBEBu18wt1PO2flE7LPb30BHMQt1eQgbV76YntdNk73XZGpn3izvGTYxbGgzXKgbCjiia0uxTd3aTNQrY/g== + version "4.1.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.1.0.tgz#3853c0c48b47f0ebcdd3cd9a66fdd0d277173e78" + integrity sha512-Cgva8HxclecUCmAImsWsbZGUh6p5DSzQ8l2Uzxuj9ANiD7LVhLM1UJ2hX/R2Y+ILpvqgW9QjmTCaBkXtj8+UOg== "@szmarczak/http-timer@^4.0.5": version "4.0.6" @@ -30,16 +30,16 @@ integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ== "@types/keyv@*": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.2.tgz#5d97bb65526c20b6e0845f6b0d2ade4f28604ee5" - integrity sha512-/FvAK2p4jQOaJ6CGDHJTqZcUtbZe820qIeTg7o0Shg7drB4JHeL+V/dhSaly7NXx6u8eSee+r7coT+yuJEvDLg== + version "3.1.3" + resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.3.tgz#1c9aae32872ec1f20dcdaee89a9f3ba88f465e41" + integrity sha512-FXCJgyyN3ivVgRoml4h94G/p3kY+u/B86La+QptcqJaWtBWtmc6TtkNfS40n9bIvyLteHh7zXOtgbobORKPbDg== dependencies: "@types/node" "*" "@types/node@*": - version "16.7.10" - resolved "https://registry.yarnpkg.com/@types/node/-/node-16.7.10.tgz#7aa732cc47341c12a16b7d562f519c2383b6d4fc" - integrity sha512-S63Dlv4zIPb8x6MMTgDq5WWRJQe56iBEY0O3SOFA9JrRienkOVDXSXBjjJw6HTNQYSE2JI6GMCR6LVbIMHJVvA== + version "16.9.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.9.1.tgz#0611b37db4246c937feef529ddcc018cf8e35708" + integrity sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g== "@types/responselike@*", "@types/responselike@^1.0.0": version "1.0.0" diff --git a/scripts/serve-dist.js b/scripts/serve-dist.js index 1bb1982d0..f8b4f9536 100755 --- a/scripts/serve-dist.js +++ b/scripts/serve-dist.js @@ -8,17 +8,10 @@ const handler = require('serve-handler'); const httpProxy = require('http-proxy'); const APP_ROOT = path.join(__dirname, '..'); -const options = { public: path.join(APP_ROOT, 'dist'), cleanUrls: false }; - -// now sourcegraph graphql api is refused the CORS check -// just proxy the request to sourcegraph directly for a taste -const sourcegraphProxy = httpProxy.createProxyServer({ - target: 'https://sourcegraph.com/.api/graphql', +const staticOptions = { public: path.join(APP_ROOT, 'dist'), cleanUrls: false }; +const proxyServer = httpProxy.createServer({ ignorePath: true, changeOrigin: false, - headers: { - host: 'sourcegraph.com', - }, }); const handleProxyError = (error) => { @@ -27,26 +20,25 @@ const handleProxyError = (error) => { }); res.end(JSON.stringify({ message: error.message })); }; +proxyServer.on('error', handleProxyError); +// now sourcegraph graphql api is refused the CORS check +// just proxy the request to sourcegraph directly for a taste const sourcegraphProxyHandler = (req, res) => { - sourcegraphProxy.web(req, res); - sourcegraphProxy.on('error', handleProxyError); + const host = 'sourcegraph.com'; + const target = `https://${host}/.api/graphql`; + const headers = { host }; + proxyServer.web(req, res, { target, headers }); }; // proxy the request to vscode-unpkg.net const vscodeUnpkgProxyHandler = (req, res, vscodeUnpkgMatches) => { const publisher = vscodeUnpkgMatches[1]; const restPartsPath = vscodeUnpkgMatches[2]; - const host = `${publisher}.vscode-unpkg.net`; - const proxy = httpProxy.createServer({ - target: `https://${host}/${publisher}/${restPartsPath}`, - ignorePath: true, - changeOrigin: false, - headers: { host }, - }); - - proxy.web(req, res); - proxy.on('error', handleProxyError); + const host = `${publisher}.vscode-unpkg.net`.toLowerCase(); + const target = `https://${host}/${publisher}/${restPartsPath}`; + const headers = { host }; + proxyServer.web(req, res, { target, headers }); }; const server = http.createServer((request, response) => { @@ -66,11 +58,11 @@ const server = http.createServer((request, response) => { fs.constants.F_OK, (error) => { if (!error && urlObj.pathname !== '/') { - return handler(request, response, options); + return handler(request, response, staticOptions); } return handler(request, response, { rewrites: [{ source: '*', destination: '/index.html' }], - ...options, + ...staticOptions, }); } ); From 8d152ca25c95ef941dbced09426e629cd3cffe08 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 14 Sep 2021 13:37:42 +0800 Subject: [PATCH 062/280] chore(deps): bump axios from 0.21.1 to 0.21.4 in /tests (#357) Bumps [axios](https://github.com/axios/axios) from 0.21.1 to 0.21.4. - [Release notes](https://github.com/axios/axios/releases) - [Changelog](https://github.com/axios/axios/blob/master/CHANGELOG.md) - [Commits](https://github.com/axios/axios/compare/v0.21.1...v0.21.4) --- updated-dependencies: - dependency-name: axios dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- tests/yarn.lock | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/tests/yarn.lock b/tests/yarn.lock index f2f953cdb..3fcedb673 100644 --- a/tests/yarn.lock +++ b/tests/yarn.lock @@ -833,11 +833,11 @@ aws4@^1.8.0: integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== axios@^0.21.1: - version "0.21.1" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.1.tgz#22563481962f4d6bde9a76d516ef0e5d3c09b2b8" - integrity sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA== + version "0.21.4" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" + integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== dependencies: - follow-redirects "^1.10.0" + follow-redirects "^1.14.0" babel-jest@^26.6.3: version "26.6.3" @@ -1722,10 +1722,10 @@ find-up@^4.0.0, find-up@^4.1.0: locate-path "^5.0.0" path-exists "^4.0.0" -follow-redirects@^1.10.0: - version "1.13.2" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.2.tgz#dd73c8effc12728ba5cf4259d760ea5fb83e3147" - integrity sha512-6mPTgLxYm3r6Bkkg0vNM0HTjfGrOEtsfbhagQvbxDEsEkpNhw582upBaoRZylzen6krEmxXJgt9Ju6HiI4O7BA== +follow-redirects@^1.14.0: + version "1.14.3" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.3.tgz#6ada78118d8d24caee595595accdc0ac6abd022e" + integrity sha512-3MkHxknWMUtb23apkgz/83fDoe+y+qr0TdgacGIA7bew+QLBo3vdgEN2xEsuXNivpFy4CyDhBBZnNZOtalmenw== for-in@^1.0.2: version "1.0.2" From 5bee6730612384ffaefb4b0258abb39ee8f8397d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 14 Sep 2021 13:38:01 +0800 Subject: [PATCH 063/280] chore(deps): bump axios from 0.21.1 to 0.21.4 (#356) Bumps [axios](https://github.com/axios/axios) from 0.21.1 to 0.21.4. - [Release notes](https://github.com/axios/axios/releases) - [Changelog](https://github.com/axios/axios/blob/master/CHANGELOG.md) - [Commits](https://github.com/axios/axios/compare/v0.21.1...v0.21.4) --- updated-dependencies: - dependency-name: axios dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/yarn.lock b/yarn.lock index b050b909d..869a99c5b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -284,11 +284,11 @@ at-least-node@^1.0.0: integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== axios@^0.21.1: - version "0.21.1" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.1.tgz#22563481962f4d6bde9a76d516ef0e5d3c09b2b8" - integrity sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA== + version "0.21.4" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" + integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== dependencies: - follow-redirects "^1.10.0" + follow-redirects "^1.14.0" balanced-match@^1.0.0: version "1.0.0" @@ -857,15 +857,10 @@ flatted@^3.1.0: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.1.tgz#c4b489e80096d9df1dfc97c79871aea7c617c469" integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA== -follow-redirects@^1.0.0: - version "1.13.3" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.3.tgz#e5598ad50174c1bc4e872301e82ac2cd97f90267" - integrity sha512-DUgl6+HDzB0iEptNQEXLx/KhTmDb8tZUHSeLqpnjpknR70H0nC2t9N73BK6fN4hOvJ84pKlIQVQ4k5FFlBedKA== - -follow-redirects@^1.10.0: - version "1.13.2" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.2.tgz#dd73c8effc12728ba5cf4259d760ea5fb83e3147" - integrity sha512-6mPTgLxYm3r6Bkkg0vNM0HTjfGrOEtsfbhagQvbxDEsEkpNhw582upBaoRZylzen6krEmxXJgt9Ju6HiI4O7BA== +follow-redirects@^1.0.0, follow-redirects@^1.14.0: + version "1.14.3" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.3.tgz#6ada78118d8d24caee595595accdc0ac6abd022e" + integrity sha512-3MkHxknWMUtb23apkgz/83fDoe+y+qr0TdgacGIA7bew+QLBo3vdgEN2xEsuXNivpFy4CyDhBBZnNZOtalmenw== from@~0: version "0.1.7" From 31fd262c2ff9674fccd136c14b7b2e11b77158ac Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 22 Sep 2021 16:34:45 +0530 Subject: [PATCH 064/280] chore(deps): bump tmpl from 1.0.4 to 1.0.5 in /tests (#359) Bumps [tmpl](https://github.com/daaku/nodejs-tmpl) from 1.0.4 to 1.0.5. - [Release notes](https://github.com/daaku/nodejs-tmpl/releases) - [Commits](https://github.com/daaku/nodejs-tmpl/commits/v1.0.5) --- updated-dependencies: - dependency-name: tmpl dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- tests/yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/yarn.lock b/tests/yarn.lock index 3fcedb673..c2bb0806b 100644 --- a/tests/yarn.lock +++ b/tests/yarn.lock @@ -4142,9 +4142,9 @@ through@2, through@~2.3, through@~2.3.1: integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= tmpl@1.0.x: - version "1.0.4" - resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" - integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE= + version "1.0.5" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" + integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== to-fast-properties@^2.0.0: version "2.0.0" From 33939954160d9f5d9226eda15bedf4b6af0c9ad9 Mon Sep 17 00:00:00 2001 From: netcon Date: Thu, 28 Oct 2021 10:10:24 +0800 Subject: [PATCH 065/280] feat: add vscode-anycode as a builtin extension (#364) --- resources/index-dev-vscode.html | 1 + resources/index-hash.html | 1 + resources/index.html | 1 + 3 files changed, 3 insertions(+) diff --git a/resources/index-dev-vscode.html b/resources/index-dev-vscode.html index fe90d7e7e..c3a22ba21 100644 --- a/resources/index-dev-vscode.html +++ b/resources/index-dev-vscode.html @@ -63,6 +63,7 @@

You need to enable JavaScript to run this app.

folderUri: { scheme: 'github1s', authority: '', path: '/' }, staticExtensions: [], enableSyncByDefault: false, + additionalBuiltinExtensions: ['ms-vscode.anycode'], webviewEndpoint: window.location.origin + '/static/vscode/vs/workbench/contrib/webview/browser/pre', diff --git a/resources/index-hash.html b/resources/index-hash.html index ebbf3f167..bcf3c2e79 100644 --- a/resources/index-hash.html +++ b/resources/index-hash.html @@ -174,6 +174,7 @@

You need to enable JavaScript to run this app.

folderUri: { scheme: 'github1s', authority: '', path: '/' }, staticExtensions: [], enableSyncByDefault: false, + additionalBuiltinExtensions: ['ms-vscode.anycode'], webviewEndpoint: window.location.origin + '/static/{STATIC_HASH_CODE}/vscode/vs/workbench/contrib/webview/browser/pre', diff --git a/resources/index.html b/resources/index.html index 9db371623..44842ed96 100644 --- a/resources/index.html +++ b/resources/index.html @@ -174,6 +174,7 @@

You need to enable JavaScript to run this app.

folderUri: { scheme: 'github1s', authority: '', path: '/' }, staticExtensions: [], enableSyncByDefault: false, + additionalBuiltinExtensions: ['ms-vscode.anycode'], webviewEndpoint: window.location.origin + '/static/vscode/vs/workbench/contrib/webview/browser/pre', From 05fceaa23ac81c200c470702e52e4bb29a7fb39e Mon Sep 17 00:00:00 2001 From: JASKEERAT SINGH Date: Tue, 2 Nov 2021 12:07:01 +0530 Subject: [PATCH 066/280] added a github action for 1st time contributors to the repo (#367) --- .../welcome-first-time-contributors.yml | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 .github/workflows/welcome-first-time-contributors.yml diff --git a/.github/workflows/welcome-first-time-contributors.yml b/.github/workflows/welcome-first-time-contributors.yml new file mode 100644 index 000000000..09741ee73 --- /dev/null +++ b/.github/workflows/welcome-first-time-contributors.yml @@ -0,0 +1,37 @@ +name: Welcome first time contributors + +on: + pull_request_target: + types: + - opened + issues: + types: + - opened + +jobs: + welcome: + runs-on: ubuntu-latest + steps: + - uses: actions/first-interaction@v1 + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} + issue-message: | + Hello there ${{ github.actor }} 👋 + + Welcome to github1s !!💖🥳 + + Thank you and congratulations 🎉 for opening your very first issue in this project. github1s fosters an open and welcoming environment for all our contributors.🌸 + + Incase you want to claim this issue, please comment down below! We will try to get back to you as soon as we can.👀 + + Feel free to visit [github1s.com](https://github1s.com/). 👩‍💻 If you have any interesting ideas, just open an issue. We would love to hear you and engage in discussions. + + pr-message: | + Hello there ${{ github.actor }} 👋 + + Thank you and congrats 🎉 for opening your first PR on this project.✨ + + We will review it soon! + + github1s fosters an open and welcoming environment for all our contributors.🌸 + From c13eca3a0f670a31b639c364416c2ba7171fa80a Mon Sep 17 00:00:00 2001 From: Piotr Monwid-Olechnowicz Date: Fri, 10 Dec 2021 18:41:39 +0100 Subject: [PATCH 067/280] Fix debounce time (#374) `wait: number` is unused, and instead the timeout ID is passed to `setTimeout`. I guess this wasn't intentional. --- extensions/github1s/src/helpers/func.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions/github1s/src/helpers/func.ts b/extensions/github1s/src/helpers/func.ts index d60eeda2e..ca0ffca5d 100644 --- a/extensions/github1s/src/helpers/func.ts +++ b/extensions/github1s/src/helpers/func.ts @@ -49,7 +49,7 @@ export const debounce = any>( let timer = null; return function (...args: Parameters): void { timer && clearTimeout(timer); - timer = setTimeout(() => func.call(this, ...args), timer); + timer = setTimeout(() => func.call(this, ...args), wait); }; }; From 0a2e21cd4ccb0597064942e063f97a52f159fa3c Mon Sep 17 00:00:00 2001 From: Bo Zhang Date: Sun, 19 Dec 2021 03:17:37 +0800 Subject: [PATCH 068/280] Trace error before writing to response (#375) * Trace error before writing to response * Update serve-dist.js * Update serve-dist.js --- scripts/serve-dist.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/serve-dist.js b/scripts/serve-dist.js index f8b4f9536..55f403e4c 100755 --- a/scripts/serve-dist.js +++ b/scripts/serve-dist.js @@ -14,7 +14,8 @@ const proxyServer = httpProxy.createServer({ changeOrigin: false, }); -const handleProxyError = (error) => { +const handleProxyError = (error, req, res) => { + console.trace(error); res.writeHead(500, { 'Content-Type': 'application/json', }); From ee9f352c6a84d504e857cd7fb04860a2cf0c45cf Mon Sep 17 00:00:00 2001 From: Bo Zhang Date: Thu, 23 Dec 2021 07:40:03 +0800 Subject: [PATCH 069/280] Fix up-to-date check issue in copy-extensions.sh (#376) Previously the script only check if `extensions/emmet/dist/browser` exists, and skip compiling if so. This PR adds an extra `git diff` check, and run compiling if there's any changes in `extensions`. --- vscode-web-github1s/scripts/copy-extensions.sh | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/vscode-web-github1s/scripts/copy-extensions.sh b/vscode-web-github1s/scripts/copy-extensions.sh index c4ede90f9..5e2dec55d 100755 --- a/vscode-web-github1s/scripts/copy-extensions.sh +++ b/vscode-web-github1s/scripts/copy-extensions.sh @@ -3,14 +3,16 @@ set -euo pipefail cd "$(dirname "${0}")/.." APP_ROOT=$(pwd) - function ensureBuiltinExtensitions() { cd "${APP_ROOT}/lib/vscode" - if [ ! -e "extensions/emmet/dist/browser" ] + git diff --exit-code --name-only extensions + if [ $? != 0 ] || [ ! -e "extensions/emmet/dist/browser" ] then echo "compile vscode builtin extensions..." yarn gulp compile-web yarn gulp compile-extension-media + else + echo "vscode builtin extensions is up-to-date, skip compiling." fi } @@ -24,3 +26,4 @@ function main() { } main "$@" + From ea60dac8b9f89dc802ec43d598b4078b2002fcc3 Mon Sep 17 00:00:00 2001 From: Bo Zhang Date: Thu, 23 Dec 2021 09:03:24 +0800 Subject: [PATCH 070/280] Fix copy extensions (#377) * Fix up-to-date check issue in copy-extensions.sh Previously the script only check if `extensions/emmet/dist/browser` exists, and skip compiling if so. This PR adds an extra `git diff` check, and run compiling if there's any changes in `extensions`. * Update copy-extensions.sh --- vscode-web-github1s/scripts/copy-extensions.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vscode-web-github1s/scripts/copy-extensions.sh b/vscode-web-github1s/scripts/copy-extensions.sh index 5e2dec55d..62af24961 100755 --- a/vscode-web-github1s/scripts/copy-extensions.sh +++ b/vscode-web-github1s/scripts/copy-extensions.sh @@ -5,8 +5,8 @@ cd "$(dirname "${0}")/.." APP_ROOT=$(pwd) function ensureBuiltinExtensitions() { cd "${APP_ROOT}/lib/vscode" - git diff --exit-code --name-only extensions - if [ $? != 0 ] || [ ! -e "extensions/emmet/dist/browser" ] + EXTENSIONS_DIRTY=0 && git diff --exit-code --name-only extensions || EXTENSIONS_DIRTY=$? + if [ $EXTENSIONS_DIRTY != 0 ] || [ ! -e "extensions/emmet/dist/browser" ] then echo "compile vscode builtin extensions..." yarn gulp compile-web From 5361a6e81175dfda22cb0f21ed1a2feefdc98175 Mon Sep 17 00:00:00 2001 From: netcon Date: Thu, 30 Dec 2021 00:33:23 +0800 Subject: [PATCH 071/280] fix: prebuilt vscode-anycode to fix the code folding bug (#378) --- extensions/vscode-anycode/README.md | 5 + extensions/vscode-anycode/package.json | 101 + .../prebuilt/anycode.extension.js | 27868 ++++++++++++++++ .../vscode-anycode/prebuilt/anycode.server.js | 15546 +++++++++ .../vscode-anycode/server/tree-sitter-c.wasm | Bin 0 -> 327556 bytes .../server/tree-sitter-c_sharp.wasm | Bin 0 -> 2987883 bytes .../server/tree-sitter-cpp.wasm | Bin 0 -> 1187722 bytes .../vscode-anycode/server/tree-sitter-go.wasm | Bin 0 -> 180028 bytes .../server/tree-sitter-java.wasm | Bin 0 -> 232273 bytes .../server/tree-sitter-php.wasm | Bin 0 -> 352603 bytes .../server/tree-sitter-python.wasm | Bin 0 -> 191411 bytes .../server/tree-sitter-rust.wasm | Bin 0 -> 638448 bytes .../server/tree-sitter-typescript.wasm | Bin 0 -> 1389235 bytes .../server/tree-sitter/tree-sitter.wasm | Bin 0 -> 171876 bytes resources/index-dev-vscode.html | 2 +- resources/index-hash.html | 2 +- resources/index.html | 2 +- 17 files changed, 43523 insertions(+), 3 deletions(-) create mode 100644 extensions/vscode-anycode/README.md create mode 100644 extensions/vscode-anycode/package.json create mode 100644 extensions/vscode-anycode/prebuilt/anycode.extension.js create mode 100644 extensions/vscode-anycode/prebuilt/anycode.server.js create mode 100755 extensions/vscode-anycode/server/tree-sitter-c.wasm create mode 100755 extensions/vscode-anycode/server/tree-sitter-c_sharp.wasm create mode 100755 extensions/vscode-anycode/server/tree-sitter-cpp.wasm create mode 100755 extensions/vscode-anycode/server/tree-sitter-go.wasm create mode 100755 extensions/vscode-anycode/server/tree-sitter-java.wasm create mode 100755 extensions/vscode-anycode/server/tree-sitter-php.wasm create mode 100755 extensions/vscode-anycode/server/tree-sitter-python.wasm create mode 100755 extensions/vscode-anycode/server/tree-sitter-rust.wasm create mode 100755 extensions/vscode-anycode/server/tree-sitter-typescript.wasm create mode 100755 extensions/vscode-anycode/server/tree-sitter/tree-sitter.wasm diff --git a/extensions/vscode-anycode/README.md b/extensions/vscode-anycode/README.md new file mode 100644 index 000000000..c1907d5e6 --- /dev/null +++ b/extensions/vscode-anycode/README.md @@ -0,0 +1,5 @@ +# This is the prebuilt version of [vscode-anycode](https://github.com/microsoft/vscode-anycode) + +## we prebuilt it because of [this bug](https://github.com/conwnet/github1s/issues/373) + +## we will remove this after the latest version of the official extension released diff --git a/extensions/vscode-anycode/package.json b/extensions/vscode-anycode/package.json new file mode 100644 index 000000000..0eb91e388 --- /dev/null +++ b/extensions/vscode-anycode/package.json @@ -0,0 +1,101 @@ +{ + "name": "anycode", + "displayName": "anycode", + "publisher": "ms-vscode", + "description": "", + "version": "0.0.55", + "enabledApiProposals": [ + "languageStatus" + ], + "preview": true, + "repository": { + "url": "https://github.com/microsoft/vscode-anycode" + }, + "engines": { + "vscode": "^1.60.0" + }, + "categories": [ + "Programming Languages" + ], + "activationEvents": [ + "onLanguage:c", + "onLanguage:cpp", + "onLanguage:csharp", + "onLanguage:go", + "onLanguage:java", + "onLanguage:php", + "onLanguage:python", + "onLanguage:rust", + "onLanguage:javascript", + "onLanguage:typescript", + "onCommand:workbench.action.showAllSymbols" + ], + "browser": "./prebuilt/anycode.extension.js", + "contributes": { + "configuration": { + "title": "Anycode", + "properties": { + "anycode.symbolIndexSize": { + "type": "number", + "default": 500, + "minimum": 0, + "markdownDescription": "Size of the index that is used for features like symbol search and go to definition." + }, + "anycode.language.features": { + "markdownDescription": "Control the language features that anycode offers. This can be configured for each supported language: [Learn How to Do That](https://code.visualstudio.com/docs/getstarted/settings#_languagespecific-editor-settings)", + "type": "object", + "scope": "language-overridable", + "additionalProperties": false, + "properties": { + "definitions": { + "type": "boolean", + "description": "Go to Definition based on identifiers and local variables" + }, + "references": { + "type": "boolean", + "description": "Find References based on identifiers and local variables" + }, + "workspaceSymbols": { + "type": "boolean", + "description": "Add symbols to workspace symbol search" + }, + "highlights": { + "type": "boolean", + "description": "Highlight Occurrences of identifiers and local variables" + }, + "outline": { + "type": "boolean", + "description": "Populate Outline, Quick-outline, and Breadcrumbs" + }, + "completions": { + "type": "boolean", + "description": "Completions based on identifiers and symbol names" + }, + "folding": { + "type": "boolean", + "description": "Fold sections of codes to a single line" + }, + "diagnostics": { + "type": "boolean", + "description": "(experimental) Parse errors show as problems" + } + }, + "default": { + "completions": true, + "definitions": true, + "references": true, + "highlights": true, + "outline": true, + "workspaceSymbols": true, + "folding": false, + "diagnostics": false + } + } + } + } + }, + "scripts": { + "compile": "echo done", + "watch": "echo done" + } +} diff --git a/extensions/vscode-anycode/prebuilt/anycode.extension.js b/extensions/vscode-anycode/prebuilt/anycode.extension.js new file mode 100644 index 000000000..ed8d62a61 --- /dev/null +++ b/extensions/vscode-anycode/prebuilt/anycode.extension.js @@ -0,0 +1,27868 @@ +let __create = Object.create; +let __defProp = Object.defineProperty; +let __getOwnPropDesc = Object.getOwnPropertyDescriptor; +let __getOwnPropNames = Object.getOwnPropertyNames; +let __getProtoOf = Object.getPrototypeOf; +let __hasOwnProp = Object.prototype.hasOwnProperty; +let __markAsModule = (target) => + __defProp(target, '__esModule', { value: true }); +let __commonJS = (cb, mod) => + function __require() { + return ( + mod || (0, cb[Object.keys(cb)[0]])((mod = { exports: {} }).exports, mod), + mod.exports + ); + }; +let __export = (target, all) => { + __markAsModule(target); + for (let name in all) { + __defProp(target, name, { get: all[name], enumerable: true }); + } +}; +let __reExport = (target, module2, desc) => { + if ( + (module2 && typeof module2 === 'object') || + typeof module2 === 'function' + ) { + for (let key of __getOwnPropNames(module2)) { + if (!__hasOwnProp.call(target, key) && key !== 'default') { + __defProp(target, key, { + get: () => module2[key], + enumerable: + !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable, + }); + } + } + } + return target; +}; +let __toModule = (module2) => { + return __reExport( + __markAsModule( + __defProp( + module2 != null ? __create(__getProtoOf(module2)) : {}, + 'default', + module2 && module2.__esModule && 'default' in module2 + ? { get: () => module2.default, enumerable: true } + : { value: module2, enumerable: true } + ) + ), + module2 + ); +}; + +// client/node_modules/vscode-jsonrpc/lib/common/ral.js +let require_ral = __commonJS({ + 'client/node_modules/vscode-jsonrpc/lib/common/ral.js'(exports) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + let _ral; + function RAL() { + if (_ral === void 0) { + throw new Error(`No runtime abstraction layer installed`); + } + return _ral; + } + (function (RAL2) { + function install(ral) { + if (ral === void 0) { + throw new Error(`No runtime abstraction layer provided`); + } + _ral = ral; + } + RAL2.install = install; + })(RAL || (RAL = {})); + exports.default = RAL; + }, +}); + +// client/node_modules/vscode-jsonrpc/lib/common/disposable.js +let require_disposable = __commonJS({ + 'client/node_modules/vscode-jsonrpc/lib/common/disposable.js'(exports) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.Disposable = void 0; + let Disposable3; + (function (Disposable4) { + function create(func) { + return { + dispose: func, + }; + } + Disposable4.create = create; + })((Disposable3 = exports.Disposable || (exports.Disposable = {}))); + }, +}); + +// client/node_modules/vscode-jsonrpc/lib/common/events.js +let require_events = __commonJS({ + 'client/node_modules/vscode-jsonrpc/lib/common/events.js'(exports) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.Emitter = exports.Event = void 0; + let ral_1 = require_ral(); + let Event2; + (function (Event3) { + const _disposable = { dispose() {} }; + Event3.None = function () { + return _disposable; + }; + })((Event2 = exports.Event || (exports.Event = {}))); + let CallbackList = class { + add(callback, context = null, bucket) { + if (!this._callbacks) { + this._callbacks = []; + this._contexts = []; + } + this._callbacks.push(callback); + this._contexts.push(context); + if (Array.isArray(bucket)) { + bucket.push({ dispose: () => this.remove(callback, context) }); + } + } + remove(callback, context = null) { + if (!this._callbacks) { + return; + } + let foundCallbackWithDifferentContext = false; + for (let i = 0, len = this._callbacks.length; i < len; i++) { + if (this._callbacks[i] === callback) { + if (this._contexts[i] === context) { + this._callbacks.splice(i, 1); + this._contexts.splice(i, 1); + return; + } else { + foundCallbackWithDifferentContext = true; + } + } + } + if (foundCallbackWithDifferentContext) { + throw new Error( + 'When adding a listener with a context, you should remove it with the same context' + ); + } + } + invoke(...args) { + if (!this._callbacks) { + return []; + } + const ret = [], + callbacks = this._callbacks.slice(0), + contexts = this._contexts.slice(0); + for (let i = 0, len = callbacks.length; i < len; i++) { + try { + ret.push(callbacks[i].apply(contexts[i], args)); + } catch (e) { + (0, ral_1.default)().console.error(e); + } + } + return ret; + } + isEmpty() { + return !this._callbacks || this._callbacks.length === 0; + } + dispose() { + this._callbacks = void 0; + this._contexts = void 0; + } + }; + var Emitter = class { + constructor(_options) { + this._options = _options; + } + get event() { + if (!this._event) { + this._event = (listener, thisArgs, disposables) => { + if (!this._callbacks) { + this._callbacks = new CallbackList(); + } + if ( + this._options && + this._options.onFirstListenerAdd && + this._callbacks.isEmpty() + ) { + this._options.onFirstListenerAdd(this); + } + this._callbacks.add(listener, thisArgs); + const result = { + dispose: () => { + if (!this._callbacks) { + return; + } + this._callbacks.remove(listener, thisArgs); + result.dispose = Emitter._noop; + if ( + this._options && + this._options.onLastListenerRemove && + this._callbacks.isEmpty() + ) { + this._options.onLastListenerRemove(this); + } + }, + }; + if (Array.isArray(disposables)) { + disposables.push(result); + } + return result; + }; + } + return this._event; + } + fire(event) { + if (this._callbacks) { + this._callbacks.invoke.call(this._callbacks, event); + } + } + dispose() { + if (this._callbacks) { + this._callbacks.dispose(); + this._callbacks = void 0; + } + } + }; + exports.Emitter = Emitter; + Emitter._noop = function () {}; + }, +}); + +// client/node_modules/vscode-jsonrpc/lib/common/messageBuffer.js +let require_messageBuffer = __commonJS({ + 'client/node_modules/vscode-jsonrpc/lib/common/messageBuffer.js'(exports) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.AbstractMessageBuffer = void 0; + let CR = 13; + let LF = 10; + let CRLF = '\r\n'; + let AbstractMessageBuffer = class { + constructor(encoding = 'utf-8') { + this._encoding = encoding; + this._chunks = []; + this._totalLength = 0; + } + get encoding() { + return this._encoding; + } + append(chunk) { + const toAppend = + typeof chunk === 'string' + ? this.fromString(chunk, this._encoding) + : chunk; + this._chunks.push(toAppend); + this._totalLength += toAppend.byteLength; + } + tryReadHeaders() { + if (this._chunks.length === 0) { + return void 0; + } + let state = 0; + let chunkIndex = 0; + let offset = 0; + let chunkBytesRead = 0; + row: while (chunkIndex < this._chunks.length) { + const chunk = this._chunks[chunkIndex]; + offset = 0; + while (offset < chunk.length) { + const value = chunk[offset]; + switch (value) { + case CR: + switch (state) { + case 0: + state = 1; + break; + case 2: + state = 3; + break; + default: + state = 0; + } + break; + case LF: + switch (state) { + case 1: + state = 2; + break; + case 3: + state = 4; + offset++; + break row; + default: + state = 0; + } + break; + default: + state = 0; + } + offset++; + } + chunkBytesRead += chunk.byteLength; + chunkIndex++; + } + if (state !== 4) { + return void 0; + } + const buffer = this._read(chunkBytesRead + offset); + const result = new Map(); + const headers = this.toString(buffer, 'ascii').split(CRLF); + if (headers.length < 2) { + return result; + } + for (let i = 0; i < headers.length - 2; i++) { + const header = headers[i]; + const index = header.indexOf(':'); + if (index === -1) { + throw new Error( + 'Message header must separate key and value using :' + ); + } + const key = header.substr(0, index); + const value = header.substr(index + 1).trim(); + result.set(key, value); + } + return result; + } + tryReadBody(length) { + if (this._totalLength < length) { + return void 0; + } + return this._read(length); + } + get numberOfBytes() { + return this._totalLength; + } + _read(byteCount) { + if (byteCount === 0) { + return this.emptyBuffer(); + } + if (byteCount > this._totalLength) { + throw new Error(`Cannot read so many bytes!`); + } + if (this._chunks[0].byteLength === byteCount) { + const chunk = this._chunks[0]; + this._chunks.shift(); + this._totalLength -= byteCount; + return this.asNative(chunk); + } + if (this._chunks[0].byteLength > byteCount) { + const chunk = this._chunks[0]; + const result2 = this.asNative(chunk, byteCount); + this._chunks[0] = chunk.slice(byteCount); + this._totalLength -= byteCount; + return result2; + } + const result = this.allocNative(byteCount); + let resultOffset = 0; + let chunkIndex = 0; + while (byteCount > 0) { + const chunk = this._chunks[chunkIndex]; + if (chunk.byteLength > byteCount) { + const chunkPart = chunk.slice(0, byteCount); + result.set(chunkPart, resultOffset); + resultOffset += byteCount; + this._chunks[chunkIndex] = chunk.slice(byteCount); + this._totalLength -= byteCount; + byteCount -= byteCount; + } else { + result.set(chunk, resultOffset); + resultOffset += chunk.byteLength; + this._chunks.shift(); + this._totalLength -= chunk.byteLength; + byteCount -= chunk.byteLength; + } + } + return result; + } + }; + exports.AbstractMessageBuffer = AbstractMessageBuffer; + }, +}); + +// client/node_modules/vscode-jsonrpc/lib/browser/ril.js +let require_ril = __commonJS({ + 'client/node_modules/vscode-jsonrpc/lib/browser/ril.js'(exports) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + let ral_1 = require_ral(); + let disposable_1 = require_disposable(); + let events_1 = require_events(); + let messageBuffer_1 = require_messageBuffer(); + var MessageBuffer = class extends messageBuffer_1.AbstractMessageBuffer { + constructor(encoding = 'utf-8') { + super(encoding); + this.asciiDecoder = new TextDecoder('ascii'); + } + emptyBuffer() { + return MessageBuffer.emptyBuffer; + } + fromString(value, _encoding) { + return new TextEncoder().encode(value); + } + toString(value, encoding) { + if (encoding === 'ascii') { + return this.asciiDecoder.decode(value); + } else { + return new TextDecoder(encoding).decode(value); + } + } + asNative(buffer, length) { + if (length === void 0) { + return buffer; + } else { + return buffer.slice(0, length); + } + } + allocNative(length) { + return new Uint8Array(length); + } + }; + MessageBuffer.emptyBuffer = new Uint8Array(0); + let ReadableStreamWrapper = class { + constructor(socket) { + this.socket = socket; + this._onData = new events_1.Emitter(); + this._messageListener = (event) => { + const blob = event.data; + blob.arrayBuffer().then( + (buffer) => { + this._onData.fire(new Uint8Array(buffer)); + }, + () => { + (0, ral_1.default)().console.error( + `Converting blob to array buffer failed.` + ); + } + ); + }; + this.socket.addEventListener('message', this._messageListener); + } + onClose(listener) { + this.socket.addEventListener('close', listener); + return disposable_1.Disposable.create(() => + this.socket.removeEventListener('close', listener) + ); + } + onError(listener) { + this.socket.addEventListener('error', listener); + return disposable_1.Disposable.create(() => + this.socket.removeEventListener('error', listener) + ); + } + onEnd(listener) { + this.socket.addEventListener('end', listener); + return disposable_1.Disposable.create(() => + this.socket.removeEventListener('end', listener) + ); + } + onData(listener) { + return this._onData.event(listener); + } + }; + let WritableStreamWrapper = class { + constructor(socket) { + this.socket = socket; + } + onClose(listener) { + this.socket.addEventListener('close', listener); + return disposable_1.Disposable.create(() => + this.socket.removeEventListener('close', listener) + ); + } + onError(listener) { + this.socket.addEventListener('error', listener); + return disposable_1.Disposable.create(() => + this.socket.removeEventListener('error', listener) + ); + } + onEnd(listener) { + this.socket.addEventListener('end', listener); + return disposable_1.Disposable.create(() => + this.socket.removeEventListener('end', listener) + ); + } + write(data, encoding) { + if (typeof data === 'string') { + if (encoding !== void 0 && encoding !== 'utf-8') { + throw new Error( + `In a Browser environments only utf-8 text encoding is supported. But got encoding: ${encoding}` + ); + } + this.socket.send(data); + } else { + this.socket.send(data); + } + return Promise.resolve(); + } + end() { + this.socket.close(); + } + }; + let _textEncoder = new TextEncoder(); + let _ril = Object.freeze({ + messageBuffer: Object.freeze({ + create: (encoding) => new MessageBuffer(encoding), + }), + applicationJson: Object.freeze({ + encoder: Object.freeze({ + name: 'application/json', + encode: (msg, options) => { + if (options.charset !== 'utf-8') { + throw new Error( + `In a Browser environments only utf-8 text encoding is supported. But got encoding: ${options.charset}` + ); + } + return Promise.resolve( + _textEncoder.encode(JSON.stringify(msg, void 0, 0)) + ); + }, + }), + decoder: Object.freeze({ + name: 'application/json', + decode: (buffer, options) => { + if (!(buffer instanceof Uint8Array)) { + throw new Error( + `In a Browser environments only Uint8Arrays are supported.` + ); + } + return Promise.resolve( + JSON.parse(new TextDecoder(options.charset).decode(buffer)) + ); + }, + }), + }), + stream: Object.freeze({ + asReadableStream: (socket) => new ReadableStreamWrapper(socket), + asWritableStream: (socket) => new WritableStreamWrapper(socket), + }), + console, + timer: Object.freeze({ + setTimeout(callback, ms2, ...args) { + const handle = setTimeout(callback, ms2, ...args); + return { dispose: () => clearTimeout(handle) }; + }, + setImmediate(callback, ...args) { + const handle = setTimeout(callback, 0, ...args); + return { dispose: () => clearTimeout(handle) }; + }, + setInterval(callback, ms2, ...args) { + const handle = setInterval(callback, ms2, ...args); + return { dispose: () => clearInterval(handle) }; + }, + }), + }); + function RIL() { + return _ril; + } + (function (RIL2) { + function install() { + ral_1.default.install(_ril); + } + RIL2.install = install; + })(RIL || (RIL = {})); + exports.default = RIL; + }, +}); + +// client/node_modules/vscode-jsonrpc/lib/common/is.js +let require_is = __commonJS({ + 'client/node_modules/vscode-jsonrpc/lib/common/is.js'(exports) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.stringArray = exports.array = exports.func = exports.error = exports.number = exports.string = exports.boolean = void 0; + function boolean(value) { + return value === true || value === false; + } + exports.boolean = boolean; + function string(value) { + return typeof value === 'string' || value instanceof String; + } + exports.string = string; + function number(value) { + return typeof value === 'number' || value instanceof Number; + } + exports.number = number; + function error(value) { + return value instanceof Error; + } + exports.error = error; + function func(value) { + return typeof value === 'function'; + } + exports.func = func; + function array(value) { + return Array.isArray(value); + } + exports.array = array; + function stringArray(value) { + return array(value) && value.every((elem) => string(elem)); + } + exports.stringArray = stringArray; + }, +}); + +// client/node_modules/vscode-jsonrpc/lib/common/messages.js +let require_messages = __commonJS({ + 'client/node_modules/vscode-jsonrpc/lib/common/messages.js'(exports) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.Message = exports.NotificationType9 = exports.NotificationType8 = exports.NotificationType7 = exports.NotificationType6 = exports.NotificationType5 = exports.NotificationType4 = exports.NotificationType3 = exports.NotificationType2 = exports.NotificationType1 = exports.NotificationType0 = exports.NotificationType = exports.RequestType9 = exports.RequestType8 = exports.RequestType7 = exports.RequestType6 = exports.RequestType5 = exports.RequestType4 = exports.RequestType3 = exports.RequestType2 = exports.RequestType1 = exports.RequestType = exports.RequestType0 = exports.AbstractMessageSignature = exports.ParameterStructures = exports.ResponseError = exports.ErrorCodes = void 0; + let is2 = require_is(); + let ErrorCodes; + (function (ErrorCodes2) { + ErrorCodes2.ParseError = -32700; + ErrorCodes2.InvalidRequest = -32600; + ErrorCodes2.MethodNotFound = -32601; + ErrorCodes2.InvalidParams = -32602; + ErrorCodes2.InternalError = -32603; + ErrorCodes2.jsonrpcReservedErrorRangeStart = -32099; + ErrorCodes2.serverErrorStart = ErrorCodes2.jsonrpcReservedErrorRangeStart; + ErrorCodes2.MessageWriteError = -32099; + ErrorCodes2.MessageReadError = -32098; + ErrorCodes2.ServerNotInitialized = -32002; + ErrorCodes2.UnknownErrorCode = -32001; + ErrorCodes2.jsonrpcReservedErrorRangeEnd = -32e3; + ErrorCodes2.serverErrorEnd = ErrorCodes2.jsonrpcReservedErrorRangeEnd; + })((ErrorCodes = exports.ErrorCodes || (exports.ErrorCodes = {}))); + var ResponseError = class extends Error { + constructor(code, message, data) { + super(message); + this.code = is2.number(code) ? code : ErrorCodes.UnknownErrorCode; + this.data = data; + Object.setPrototypeOf(this, ResponseError.prototype); + } + toJson() { + const result = { + code: this.code, + message: this.message, + }; + if (this.data !== void 0) { + result.data = this.data; + } + return result; + } + }; + exports.ResponseError = ResponseError; + var ParameterStructures = class { + constructor(kind) { + this.kind = kind; + } + static is(value) { + return ( + value === ParameterStructures.auto || + value === ParameterStructures.byName || + value === ParameterStructures.byPosition + ); + } + toString() { + return this.kind; + } + }; + exports.ParameterStructures = ParameterStructures; + ParameterStructures.auto = new ParameterStructures('auto'); + ParameterStructures.byPosition = new ParameterStructures('byPosition'); + ParameterStructures.byName = new ParameterStructures('byName'); + let AbstractMessageSignature = class { + constructor(method, numberOfParams) { + this.method = method; + this.numberOfParams = numberOfParams; + } + get parameterStructures() { + return ParameterStructures.auto; + } + }; + exports.AbstractMessageSignature = AbstractMessageSignature; + let RequestType0 = class extends AbstractMessageSignature { + constructor(method) { + super(method, 0); + } + }; + exports.RequestType0 = RequestType0; + let RequestType = class extends AbstractMessageSignature { + constructor(method, _parameterStructures = ParameterStructures.auto) { + super(method, 1); + this._parameterStructures = _parameterStructures; + } + get parameterStructures() { + return this._parameterStructures; + } + }; + exports.RequestType = RequestType; + let RequestType1 = class extends AbstractMessageSignature { + constructor(method, _parameterStructures = ParameterStructures.auto) { + super(method, 1); + this._parameterStructures = _parameterStructures; + } + get parameterStructures() { + return this._parameterStructures; + } + }; + exports.RequestType1 = RequestType1; + let RequestType2 = class extends AbstractMessageSignature { + constructor(method) { + super(method, 2); + } + }; + exports.RequestType2 = RequestType2; + let RequestType3 = class extends AbstractMessageSignature { + constructor(method) { + super(method, 3); + } + }; + exports.RequestType3 = RequestType3; + let RequestType4 = class extends AbstractMessageSignature { + constructor(method) { + super(method, 4); + } + }; + exports.RequestType4 = RequestType4; + let RequestType5 = class extends AbstractMessageSignature { + constructor(method) { + super(method, 5); + } + }; + exports.RequestType5 = RequestType5; + let RequestType6 = class extends AbstractMessageSignature { + constructor(method) { + super(method, 6); + } + }; + exports.RequestType6 = RequestType6; + let RequestType7 = class extends AbstractMessageSignature { + constructor(method) { + super(method, 7); + } + }; + exports.RequestType7 = RequestType7; + let RequestType8 = class extends AbstractMessageSignature { + constructor(method) { + super(method, 8); + } + }; + exports.RequestType8 = RequestType8; + let RequestType9 = class extends AbstractMessageSignature { + constructor(method) { + super(method, 9); + } + }; + exports.RequestType9 = RequestType9; + let NotificationType = class extends AbstractMessageSignature { + constructor(method, _parameterStructures = ParameterStructures.auto) { + super(method, 1); + this._parameterStructures = _parameterStructures; + } + get parameterStructures() { + return this._parameterStructures; + } + }; + exports.NotificationType = NotificationType; + let NotificationType0 = class extends AbstractMessageSignature { + constructor(method) { + super(method, 0); + } + }; + exports.NotificationType0 = NotificationType0; + let NotificationType1 = class extends AbstractMessageSignature { + constructor(method, _parameterStructures = ParameterStructures.auto) { + super(method, 1); + this._parameterStructures = _parameterStructures; + } + get parameterStructures() { + return this._parameterStructures; + } + }; + exports.NotificationType1 = NotificationType1; + let NotificationType2 = class extends AbstractMessageSignature { + constructor(method) { + super(method, 2); + } + }; + exports.NotificationType2 = NotificationType2; + let NotificationType3 = class extends AbstractMessageSignature { + constructor(method) { + super(method, 3); + } + }; + exports.NotificationType3 = NotificationType3; + let NotificationType4 = class extends AbstractMessageSignature { + constructor(method) { + super(method, 4); + } + }; + exports.NotificationType4 = NotificationType4; + let NotificationType5 = class extends AbstractMessageSignature { + constructor(method) { + super(method, 5); + } + }; + exports.NotificationType5 = NotificationType5; + let NotificationType6 = class extends AbstractMessageSignature { + constructor(method) { + super(method, 6); + } + }; + exports.NotificationType6 = NotificationType6; + let NotificationType7 = class extends AbstractMessageSignature { + constructor(method) { + super(method, 7); + } + }; + exports.NotificationType7 = NotificationType7; + let NotificationType8 = class extends AbstractMessageSignature { + constructor(method) { + super(method, 8); + } + }; + exports.NotificationType8 = NotificationType8; + let NotificationType9 = class extends AbstractMessageSignature { + constructor(method) { + super(method, 9); + } + }; + exports.NotificationType9 = NotificationType9; + let Message; + (function (Message2) { + function isRequest(message) { + const candidate = message; + return ( + candidate && + is2.string(candidate.method) && + (is2.string(candidate.id) || is2.number(candidate.id)) + ); + } + Message2.isRequest = isRequest; + function isNotification(message) { + const candidate = message; + return ( + candidate && is2.string(candidate.method) && message.id === void 0 + ); + } + Message2.isNotification = isNotification; + function isResponse(message) { + const candidate = message; + return ( + candidate && + (candidate.result !== void 0 || !!candidate.error) && + (is2.string(candidate.id) || + is2.number(candidate.id) || + candidate.id === null) + ); + } + Message2.isResponse = isResponse; + })((Message = exports.Message || (exports.Message = {}))); + }, +}); + +// client/node_modules/vscode-jsonrpc/lib/common/linkedMap.js +let require_linkedMap = __commonJS({ + 'client/node_modules/vscode-jsonrpc/lib/common/linkedMap.js'(exports) { + 'use strict'; + let _a2; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.LRUCache = exports.LinkedMap = exports.Touch = void 0; + let Touch; + (function (Touch2) { + Touch2.None = 0; + Touch2.First = 1; + Touch2.AsOld = Touch2.First; + Touch2.Last = 2; + Touch2.AsNew = Touch2.Last; + })((Touch = exports.Touch || (exports.Touch = {}))); + let LinkedMap = class { + constructor() { + this[_a2] = 'LinkedMap'; + this._map = new Map(); + this._head = void 0; + this._tail = void 0; + this._size = 0; + this._state = 0; + } + clear() { + this._map.clear(); + this._head = void 0; + this._tail = void 0; + this._size = 0; + this._state++; + } + isEmpty() { + return !this._head && !this._tail; + } + get size() { + return this._size; + } + get first() { + return this._head?.value; + } + get last() { + return this._tail?.value; + } + has(key) { + return this._map.has(key); + } + get(key, touch = Touch.None) { + const item = this._map.get(key); + if (!item) { + return void 0; + } + if (touch !== Touch.None) { + this.touch(item, touch); + } + return item.value; + } + set(key, value, touch = Touch.None) { + let item = this._map.get(key); + if (item) { + item.value = value; + if (touch !== Touch.None) { + this.touch(item, touch); + } + } else { + item = { key, value, next: void 0, previous: void 0 }; + switch (touch) { + case Touch.None: + this.addItemLast(item); + break; + case Touch.First: + this.addItemFirst(item); + break; + case Touch.Last: + this.addItemLast(item); + break; + default: + this.addItemLast(item); + break; + } + this._map.set(key, item); + this._size++; + } + return this; + } + delete(key) { + return !!this.remove(key); + } + remove(key) { + const item = this._map.get(key); + if (!item) { + return void 0; + } + this._map.delete(key); + this.removeItem(item); + this._size--; + return item.value; + } + shift() { + if (!this._head && !this._tail) { + return void 0; + } + if (!this._head || !this._tail) { + throw new Error('Invalid list'); + } + const item = this._head; + this._map.delete(item.key); + this.removeItem(item); + this._size--; + return item.value; + } + forEach(callbackfn, thisArg) { + const state = this._state; + let current = this._head; + while (current) { + if (thisArg) { + callbackfn.bind(thisArg)(current.value, current.key, this); + } else { + callbackfn(current.value, current.key, this); + } + if (this._state !== state) { + throw new Error(`LinkedMap got modified during iteration.`); + } + current = current.next; + } + } + keys() { + const state = this._state; + let current = this._head; + const iterator = { + [Symbol.iterator]: () => { + return iterator; + }, + next: () => { + if (this._state !== state) { + throw new Error(`LinkedMap got modified during iteration.`); + } + if (current) { + const result = { value: current.key, done: false }; + current = current.next; + return result; + } else { + return { value: void 0, done: true }; + } + }, + }; + return iterator; + } + values() { + const state = this._state; + let current = this._head; + const iterator = { + [Symbol.iterator]: () => { + return iterator; + }, + next: () => { + if (this._state !== state) { + throw new Error(`LinkedMap got modified during iteration.`); + } + if (current) { + const result = { value: current.value, done: false }; + current = current.next; + return result; + } else { + return { value: void 0, done: true }; + } + }, + }; + return iterator; + } + entries() { + const state = this._state; + let current = this._head; + const iterator = { + [Symbol.iterator]: () => { + return iterator; + }, + next: () => { + if (this._state !== state) { + throw new Error(`LinkedMap got modified during iteration.`); + } + if (current) { + const result = { + value: [current.key, current.value], + done: false, + }; + current = current.next; + return result; + } else { + return { value: void 0, done: true }; + } + }, + }; + return iterator; + } + [((_a2 = Symbol.toStringTag), Symbol.iterator)]() { + return this.entries(); + } + trimOld(newSize) { + if (newSize >= this.size) { + return; + } + if (newSize === 0) { + this.clear(); + return; + } + let current = this._head; + let currentSize = this.size; + while (current && currentSize > newSize) { + this._map.delete(current.key); + current = current.next; + currentSize--; + } + this._head = current; + this._size = currentSize; + if (current) { + current.previous = void 0; + } + this._state++; + } + addItemFirst(item) { + if (!this._head && !this._tail) { + this._tail = item; + } else if (!this._head) { + throw new Error('Invalid list'); + } else { + item.next = this._head; + this._head.previous = item; + } + this._head = item; + this._state++; + } + addItemLast(item) { + if (!this._head && !this._tail) { + this._head = item; + } else if (!this._tail) { + throw new Error('Invalid list'); + } else { + item.previous = this._tail; + this._tail.next = item; + } + this._tail = item; + this._state++; + } + removeItem(item) { + if (item === this._head && item === this._tail) { + this._head = void 0; + this._tail = void 0; + } else if (item === this._head) { + if (!item.next) { + throw new Error('Invalid list'); + } + item.next.previous = void 0; + this._head = item.next; + } else if (item === this._tail) { + if (!item.previous) { + throw new Error('Invalid list'); + } + item.previous.next = void 0; + this._tail = item.previous; + } else { + const next = item.next; + const previous = item.previous; + if (!next || !previous) { + throw new Error('Invalid list'); + } + next.previous = previous; + previous.next = next; + } + item.next = void 0; + item.previous = void 0; + this._state++; + } + touch(item, touch) { + if (!this._head || !this._tail) { + throw new Error('Invalid list'); + } + if (touch !== Touch.First && touch !== Touch.Last) { + return; + } + if (touch === Touch.First) { + if (item === this._head) { + return; + } + const next = item.next; + const previous = item.previous; + if (item === this._tail) { + previous.next = void 0; + this._tail = previous; + } else { + next.previous = previous; + previous.next = next; + } + item.previous = void 0; + item.next = this._head; + this._head.previous = item; + this._head = item; + this._state++; + } else if (touch === Touch.Last) { + if (item === this._tail) { + return; + } + const next = item.next; + const previous = item.previous; + if (item === this._head) { + next.previous = void 0; + this._head = next; + } else { + next.previous = previous; + previous.next = next; + } + item.next = void 0; + item.previous = this._tail; + this._tail.next = item; + this._tail = item; + this._state++; + } + } + toJSON() { + const data = []; + this.forEach((value, key) => { + data.push([key, value]); + }); + return data; + } + fromJSON(data) { + this.clear(); + for (const [key, value] of data) { + this.set(key, value); + } + } + }; + exports.LinkedMap = LinkedMap; + let LRUCache = class extends LinkedMap { + constructor(limit, ratio = 1) { + super(); + this._limit = limit; + this._ratio = Math.min(Math.max(0, ratio), 1); + } + get limit() { + return this._limit; + } + set limit(limit) { + this._limit = limit; + this.checkTrim(); + } + get ratio() { + return this._ratio; + } + set ratio(ratio) { + this._ratio = Math.min(Math.max(0, ratio), 1); + this.checkTrim(); + } + get(key, touch = Touch.AsNew) { + return super.get(key, touch); + } + peek(key) { + return super.get(key, Touch.None); + } + set(key, value) { + super.set(key, value, Touch.Last); + this.checkTrim(); + return this; + } + checkTrim() { + if (this.size > this._limit) { + this.trimOld(Math.round(this._limit * this._ratio)); + } + } + }; + exports.LRUCache = LRUCache; + }, +}); + +// client/node_modules/vscode-jsonrpc/lib/common/cancellation.js +let require_cancellation = __commonJS({ + 'client/node_modules/vscode-jsonrpc/lib/common/cancellation.js'(exports) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.CancellationTokenSource = exports.CancellationToken = void 0; + let ral_1 = require_ral(); + let Is2 = require_is(); + let events_1 = require_events(); + let CancellationToken; + (function (CancellationToken2) { + CancellationToken2.None = Object.freeze({ + isCancellationRequested: false, + onCancellationRequested: events_1.Event.None, + }); + CancellationToken2.Cancelled = Object.freeze({ + isCancellationRequested: true, + onCancellationRequested: events_1.Event.None, + }); + function is2(value) { + const candidate = value; + return ( + candidate && + (candidate === CancellationToken2.None || + candidate === CancellationToken2.Cancelled || + (Is2.boolean(candidate.isCancellationRequested) && + !!candidate.onCancellationRequested)) + ); + } + CancellationToken2.is = is2; + })( + (CancellationToken = + exports.CancellationToken || (exports.CancellationToken = {})) + ); + let shortcutEvent = Object.freeze(function (callback, context) { + const handle = (0, ral_1.default)().timer.setTimeout( + callback.bind(context), + 0 + ); + return { + dispose() { + handle.dispose(); + }, + }; + }); + let MutableToken = class { + constructor() { + this._isCancelled = false; + } + cancel() { + if (!this._isCancelled) { + this._isCancelled = true; + if (this._emitter) { + this._emitter.fire(void 0); + this.dispose(); + } + } + } + get isCancellationRequested() { + return this._isCancelled; + } + get onCancellationRequested() { + if (this._isCancelled) { + return shortcutEvent; + } + if (!this._emitter) { + this._emitter = new events_1.Emitter(); + } + return this._emitter.event; + } + dispose() { + if (this._emitter) { + this._emitter.dispose(); + this._emitter = void 0; + } + } + }; + let CancellationTokenSource = class { + get token() { + if (!this._token) { + this._token = new MutableToken(); + } + return this._token; + } + cancel() { + if (!this._token) { + this._token = CancellationToken.Cancelled; + } else { + this._token.cancel(); + } + } + dispose() { + if (!this._token) { + this._token = CancellationToken.None; + } else if (this._token instanceof MutableToken) { + this._token.dispose(); + } + } + }; + exports.CancellationTokenSource = CancellationTokenSource; + }, +}); + +// client/node_modules/vscode-jsonrpc/lib/common/messageReader.js +let require_messageReader = __commonJS({ + 'client/node_modules/vscode-jsonrpc/lib/common/messageReader.js'(exports) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.ReadableStreamMessageReader = exports.AbstractMessageReader = exports.MessageReader = void 0; + let ral_1 = require_ral(); + let Is2 = require_is(); + let events_1 = require_events(); + let MessageReader; + (function (MessageReader2) { + function is2(value) { + let candidate = value; + return ( + candidate && + Is2.func(candidate.listen) && + Is2.func(candidate.dispose) && + Is2.func(candidate.onError) && + Is2.func(candidate.onClose) && + Is2.func(candidate.onPartialMessage) + ); + } + MessageReader2.is = is2; + })((MessageReader = exports.MessageReader || (exports.MessageReader = {}))); + let AbstractMessageReader = class { + constructor() { + this.errorEmitter = new events_1.Emitter(); + this.closeEmitter = new events_1.Emitter(); + this.partialMessageEmitter = new events_1.Emitter(); + } + dispose() { + this.errorEmitter.dispose(); + this.closeEmitter.dispose(); + } + get onError() { + return this.errorEmitter.event; + } + fireError(error) { + this.errorEmitter.fire(this.asError(error)); + } + get onClose() { + return this.closeEmitter.event; + } + fireClose() { + this.closeEmitter.fire(void 0); + } + get onPartialMessage() { + return this.partialMessageEmitter.event; + } + firePartialMessage(info) { + this.partialMessageEmitter.fire(info); + } + asError(error) { + if (error instanceof Error) { + return error; + } else { + return new Error( + `Reader received error. Reason: ${ + Is2.string(error.message) ? error.message : 'unknown' + }` + ); + } + } + }; + exports.AbstractMessageReader = AbstractMessageReader; + let ResolvedMessageReaderOptions; + (function (ResolvedMessageReaderOptions2) { + function fromOptions(options) { + let charset; + let result; + let contentDecoder; + const contentDecoders = new Map(); + let contentTypeDecoder; + const contentTypeDecoders = new Map(); + if (options === void 0 || typeof options === 'string') { + charset = options ?? 'utf-8'; + } else { + charset = options.charset ?? 'utf-8'; + if (options.contentDecoder !== void 0) { + contentDecoder = options.contentDecoder; + contentDecoders.set(contentDecoder.name, contentDecoder); + } + if (options.contentDecoders !== void 0) { + for (const decoder of options.contentDecoders) { + contentDecoders.set(decoder.name, decoder); + } + } + if (options.contentTypeDecoder !== void 0) { + contentTypeDecoder = options.contentTypeDecoder; + contentTypeDecoders.set( + contentTypeDecoder.name, + contentTypeDecoder + ); + } + if (options.contentTypeDecoders !== void 0) { + for (const decoder of options.contentTypeDecoders) { + contentTypeDecoders.set(decoder.name, decoder); + } + } + } + if (contentTypeDecoder === void 0) { + contentTypeDecoder = (0, ral_1.default)().applicationJson.decoder; + contentTypeDecoders.set(contentTypeDecoder.name, contentTypeDecoder); + } + return { + charset, + contentDecoder, + contentDecoders, + contentTypeDecoder, + contentTypeDecoders, + }; + } + ResolvedMessageReaderOptions2.fromOptions = fromOptions; + })(ResolvedMessageReaderOptions || (ResolvedMessageReaderOptions = {})); + let ReadableStreamMessageReader = class extends AbstractMessageReader { + constructor(readable, options) { + super(); + this.readable = readable; + this.options = ResolvedMessageReaderOptions.fromOptions(options); + this.buffer = (0, ral_1.default)().messageBuffer.create( + this.options.charset + ); + this._partialMessageTimeout = 1e4; + this.nextMessageLength = -1; + this.messageToken = 0; + } + set partialMessageTimeout(timeout) { + this._partialMessageTimeout = timeout; + } + get partialMessageTimeout() { + return this._partialMessageTimeout; + } + listen(callback) { + this.nextMessageLength = -1; + this.messageToken = 0; + this.partialMessageTimer = void 0; + this.callback = callback; + const result = this.readable.onData((data) => { + this.onData(data); + }); + this.readable.onError((error) => this.fireError(error)); + this.readable.onClose(() => this.fireClose()); + return result; + } + onData(data) { + this.buffer.append(data); + while (true) { + if (this.nextMessageLength === -1) { + const headers = this.buffer.tryReadHeaders(); + if (!headers) { + return; + } + const contentLength = headers.get('Content-Length'); + if (!contentLength) { + throw new Error('Header must provide a Content-Length property.'); + } + const length = parseInt(contentLength); + if (isNaN(length)) { + throw new Error('Content-Length value must be a number.'); + } + this.nextMessageLength = length; + } + const body = this.buffer.tryReadBody(this.nextMessageLength); + if (body === void 0) { + this.setPartialMessageTimer(); + return; + } + this.clearPartialMessageTimer(); + this.nextMessageLength = -1; + let p; + if (this.options.contentDecoder !== void 0) { + p = this.options.contentDecoder.decode(body); + } else { + p = Promise.resolve(body); + } + p.then( + (value) => { + this.options.contentTypeDecoder.decode(value, this.options).then( + (msg) => { + this.callback(msg); + }, + (error) => { + this.fireError(error); + } + ); + }, + (error) => { + this.fireError(error); + } + ); + } + } + clearPartialMessageTimer() { + if (this.partialMessageTimer) { + this.partialMessageTimer.dispose(); + this.partialMessageTimer = void 0; + } + } + setPartialMessageTimer() { + this.clearPartialMessageTimer(); + if (this._partialMessageTimeout <= 0) { + return; + } + this.partialMessageTimer = (0, ral_1.default)().timer.setTimeout( + (token, timeout) => { + this.partialMessageTimer = void 0; + if (token === this.messageToken) { + this.firePartialMessage({ + messageToken: token, + waitingTime: timeout, + }); + this.setPartialMessageTimer(); + } + }, + this._partialMessageTimeout, + this.messageToken, + this._partialMessageTimeout + ); + } + }; + exports.ReadableStreamMessageReader = ReadableStreamMessageReader; + }, +}); + +// client/node_modules/vscode-jsonrpc/lib/common/semaphore.js +let require_semaphore = __commonJS({ + 'client/node_modules/vscode-jsonrpc/lib/common/semaphore.js'(exports) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.Semaphore = void 0; + let ral_1 = require_ral(); + let Semaphore = class { + constructor(capacity = 1) { + if (capacity <= 0) { + throw new Error('Capacity must be greater than 0'); + } + this._capacity = capacity; + this._active = 0; + this._waiting = []; + } + lock(thunk) { + return new Promise((resolve, reject) => { + this._waiting.push({ thunk, resolve, reject }); + this.runNext(); + }); + } + get active() { + return this._active; + } + runNext() { + if (this._waiting.length === 0 || this._active === this._capacity) { + return; + } + (0, ral_1.default)().timer.setImmediate(() => this.doRunNext()); + } + doRunNext() { + if (this._waiting.length === 0 || this._active === this._capacity) { + return; + } + const next = this._waiting.shift(); + this._active++; + if (this._active > this._capacity) { + throw new Error(`To many thunks active`); + } + try { + const result = next.thunk(); + if (result instanceof Promise) { + result.then( + (value) => { + this._active--; + next.resolve(value); + this.runNext(); + }, + (err) => { + this._active--; + next.reject(err); + this.runNext(); + } + ); + } else { + this._active--; + next.resolve(result); + this.runNext(); + } + } catch (err) { + this._active--; + next.reject(err); + this.runNext(); + } + } + }; + exports.Semaphore = Semaphore; + }, +}); + +// client/node_modules/vscode-jsonrpc/lib/common/messageWriter.js +let require_messageWriter = __commonJS({ + 'client/node_modules/vscode-jsonrpc/lib/common/messageWriter.js'(exports) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.WriteableStreamMessageWriter = exports.AbstractMessageWriter = exports.MessageWriter = void 0; + let ral_1 = require_ral(); + let Is2 = require_is(); + let semaphore_1 = require_semaphore(); + let events_1 = require_events(); + let ContentLength = 'Content-Length: '; + let CRLF = '\r\n'; + let MessageWriter; + (function (MessageWriter2) { + function is2(value) { + let candidate = value; + return ( + candidate && + Is2.func(candidate.dispose) && + Is2.func(candidate.onClose) && + Is2.func(candidate.onError) && + Is2.func(candidate.write) + ); + } + MessageWriter2.is = is2; + })((MessageWriter = exports.MessageWriter || (exports.MessageWriter = {}))); + let AbstractMessageWriter = class { + constructor() { + this.errorEmitter = new events_1.Emitter(); + this.closeEmitter = new events_1.Emitter(); + } + dispose() { + this.errorEmitter.dispose(); + this.closeEmitter.dispose(); + } + get onError() { + return this.errorEmitter.event; + } + fireError(error, message, count) { + this.errorEmitter.fire([this.asError(error), message, count]); + } + get onClose() { + return this.closeEmitter.event; + } + fireClose() { + this.closeEmitter.fire(void 0); + } + asError(error) { + if (error instanceof Error) { + return error; + } else { + return new Error( + `Writer received error. Reason: ${ + Is2.string(error.message) ? error.message : 'unknown' + }` + ); + } + } + }; + exports.AbstractMessageWriter = AbstractMessageWriter; + let ResolvedMessageWriterOptions; + (function (ResolvedMessageWriterOptions2) { + function fromOptions(options) { + if (options === void 0 || typeof options === 'string') { + return { + charset: options ?? 'utf-8', + contentTypeEncoder: (0, ral_1.default)().applicationJson.encoder, + }; + } else { + return { + charset: options.charset ?? 'utf-8', + contentEncoder: options.contentEncoder, + contentTypeEncoder: + options.contentTypeEncoder ?? + (0, ral_1.default)().applicationJson.encoder, + }; + } + } + ResolvedMessageWriterOptions2.fromOptions = fromOptions; + })(ResolvedMessageWriterOptions || (ResolvedMessageWriterOptions = {})); + let WriteableStreamMessageWriter = class extends AbstractMessageWriter { + constructor(writable, options) { + super(); + this.writable = writable; + this.options = ResolvedMessageWriterOptions.fromOptions(options); + this.errorCount = 0; + this.writeSemaphore = new semaphore_1.Semaphore(1); + this.writable.onError((error) => this.fireError(error)); + this.writable.onClose(() => this.fireClose()); + } + async write(msg) { + return this.writeSemaphore.lock(async () => { + const payload = this.options.contentTypeEncoder + .encode(msg, this.options) + .then((buffer) => { + if (this.options.contentEncoder !== void 0) { + return this.options.contentEncoder.encode(buffer); + } else { + return buffer; + } + }); + return payload.then( + (buffer) => { + const headers = []; + headers.push(ContentLength, buffer.byteLength.toString(), CRLF); + headers.push(CRLF); + return this.doWrite(msg, headers, buffer); + }, + (error) => { + this.fireError(error); + throw error; + } + ); + }); + } + async doWrite(msg, headers, data) { + try { + await this.writable.write(headers.join(''), 'ascii'); + return this.writable.write(data); + } catch (error) { + this.handleError(error, msg); + return Promise.reject(error); + } + } + handleError(error, msg) { + this.errorCount++; + this.fireError(error, msg, this.errorCount); + } + end() { + this.writable.end(); + } + }; + exports.WriteableStreamMessageWriter = WriteableStreamMessageWriter; + }, +}); + +// client/node_modules/vscode-jsonrpc/lib/common/connection.js +let require_connection = __commonJS({ + 'client/node_modules/vscode-jsonrpc/lib/common/connection.js'(exports) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.createMessageConnection = exports.ConnectionOptions = exports.CancellationStrategy = exports.CancellationSenderStrategy = exports.CancellationReceiverStrategy = exports.ConnectionStrategy = exports.ConnectionError = exports.ConnectionErrors = exports.LogTraceNotification = exports.SetTraceNotification = exports.TraceFormat = exports.Trace = exports.NullLogger = exports.ProgressType = exports.ProgressToken = void 0; + let ral_1 = require_ral(); + let Is2 = require_is(); + let messages_1 = require_messages(); + let linkedMap_1 = require_linkedMap(); + let events_1 = require_events(); + let cancellation_1 = require_cancellation(); + let CancelNotification; + (function (CancelNotification2) { + CancelNotification2.type = new messages_1.NotificationType( + '$/cancelRequest' + ); + })(CancelNotification || (CancelNotification = {})); + let ProgressToken; + (function (ProgressToken2) { + function is2(value) { + return typeof value === 'string' || typeof value === 'number'; + } + ProgressToken2.is = is2; + })((ProgressToken = exports.ProgressToken || (exports.ProgressToken = {}))); + let ProgressNotification; + (function (ProgressNotification2) { + ProgressNotification2.type = new messages_1.NotificationType( + '$/progress' + ); + })(ProgressNotification || (ProgressNotification = {})); + let ProgressType = class { + constructor() {} + }; + exports.ProgressType = ProgressType; + let StarRequestHandler; + (function (StarRequestHandler2) { + function is2(value) { + return Is2.func(value); + } + StarRequestHandler2.is = is2; + })(StarRequestHandler || (StarRequestHandler = {})); + exports.NullLogger = Object.freeze({ + error: () => {}, + warn: () => {}, + info: () => {}, + log: () => {}, + }); + let Trace; + (function (Trace2) { + Trace2[(Trace2['Off'] = 0)] = 'Off'; + Trace2[(Trace2['Messages'] = 1)] = 'Messages'; + Trace2[(Trace2['Compact'] = 2)] = 'Compact'; + Trace2[(Trace2['Verbose'] = 3)] = 'Verbose'; + })((Trace = exports.Trace || (exports.Trace = {}))); + (function (Trace2) { + function fromString(value) { + if (!Is2.string(value)) { + return Trace2.Off; + } + value = value.toLowerCase(); + switch (value) { + case 'off': + return Trace2.Off; + case 'messages': + return Trace2.Messages; + case 'compact': + return Trace2.Compact; + case 'verbose': + return Trace2.Verbose; + default: + return Trace2.Off; + } + } + Trace2.fromString = fromString; + function toString(value) { + switch (value) { + case Trace2.Off: + return 'off'; + case Trace2.Messages: + return 'messages'; + case Trace2.Compact: + return 'compact'; + case Trace2.Verbose: + return 'verbose'; + default: + return 'off'; + } + } + Trace2.toString = toString; + })((Trace = exports.Trace || (exports.Trace = {}))); + let TraceFormat; + (function (TraceFormat2) { + TraceFormat2['Text'] = 'text'; + TraceFormat2['JSON'] = 'json'; + })((TraceFormat = exports.TraceFormat || (exports.TraceFormat = {}))); + (function (TraceFormat2) { + function fromString(value) { + if (!Is2.string(value)) { + return TraceFormat2.Text; + } + value = value.toLowerCase(); + if (value === 'json') { + return TraceFormat2.JSON; + } else { + return TraceFormat2.Text; + } + } + TraceFormat2.fromString = fromString; + })((TraceFormat = exports.TraceFormat || (exports.TraceFormat = {}))); + let SetTraceNotification; + (function (SetTraceNotification2) { + SetTraceNotification2.type = new messages_1.NotificationType( + '$/setTrace' + ); + })( + (SetTraceNotification = + exports.SetTraceNotification || (exports.SetTraceNotification = {})) + ); + let LogTraceNotification; + (function (LogTraceNotification2) { + LogTraceNotification2.type = new messages_1.NotificationType( + '$/logTrace' + ); + })( + (LogTraceNotification = + exports.LogTraceNotification || (exports.LogTraceNotification = {})) + ); + let ConnectionErrors; + (function (ConnectionErrors2) { + ConnectionErrors2[(ConnectionErrors2['Closed'] = 1)] = 'Closed'; + ConnectionErrors2[(ConnectionErrors2['Disposed'] = 2)] = 'Disposed'; + ConnectionErrors2[(ConnectionErrors2['AlreadyListening'] = 3)] = + 'AlreadyListening'; + })( + (ConnectionErrors = + exports.ConnectionErrors || (exports.ConnectionErrors = {})) + ); + var ConnectionError = class extends Error { + constructor(code, message) { + super(message); + this.code = code; + Object.setPrototypeOf(this, ConnectionError.prototype); + } + }; + exports.ConnectionError = ConnectionError; + let ConnectionStrategy; + (function (ConnectionStrategy2) { + function is2(value) { + const candidate = value; + return candidate && Is2.func(candidate.cancelUndispatched); + } + ConnectionStrategy2.is = is2; + })( + (ConnectionStrategy = + exports.ConnectionStrategy || (exports.ConnectionStrategy = {})) + ); + let CancellationReceiverStrategy; + (function (CancellationReceiverStrategy2) { + CancellationReceiverStrategy2.Message = Object.freeze({ + createCancellationTokenSource(_2) { + return new cancellation_1.CancellationTokenSource(); + }, + }); + function is2(value) { + const candidate = value; + return candidate && Is2.func(candidate.createCancellationTokenSource); + } + CancellationReceiverStrategy2.is = is2; + })( + (CancellationReceiverStrategy = + exports.CancellationReceiverStrategy || + (exports.CancellationReceiverStrategy = {})) + ); + let CancellationSenderStrategy; + (function (CancellationSenderStrategy2) { + CancellationSenderStrategy2.Message = Object.freeze({ + sendCancellation(conn, id) { + return conn.sendNotification(CancelNotification.type, { id }); + }, + cleanup(_2) {}, + }); + function is2(value) { + const candidate = value; + return ( + candidate && + Is2.func(candidate.sendCancellation) && + Is2.func(candidate.cleanup) + ); + } + CancellationSenderStrategy2.is = is2; + })( + (CancellationSenderStrategy = + exports.CancellationSenderStrategy || + (exports.CancellationSenderStrategy = {})) + ); + let CancellationStrategy; + (function (CancellationStrategy2) { + CancellationStrategy2.Message = Object.freeze({ + receiver: CancellationReceiverStrategy.Message, + sender: CancellationSenderStrategy.Message, + }); + function is2(value) { + const candidate = value; + return ( + candidate && + CancellationReceiverStrategy.is(candidate.receiver) && + CancellationSenderStrategy.is(candidate.sender) + ); + } + CancellationStrategy2.is = is2; + })( + (CancellationStrategy = + exports.CancellationStrategy || (exports.CancellationStrategy = {})) + ); + let ConnectionOptions; + (function (ConnectionOptions2) { + function is2(value) { + const candidate = value; + return ( + candidate && + (CancellationStrategy.is(candidate.cancellationStrategy) || + ConnectionStrategy.is(candidate.connectionStrategy)) + ); + } + ConnectionOptions2.is = is2; + })( + (ConnectionOptions = + exports.ConnectionOptions || (exports.ConnectionOptions = {})) + ); + let ConnectionState; + (function (ConnectionState2) { + ConnectionState2[(ConnectionState2['New'] = 1)] = 'New'; + ConnectionState2[(ConnectionState2['Listening'] = 2)] = 'Listening'; + ConnectionState2[(ConnectionState2['Closed'] = 3)] = 'Closed'; + ConnectionState2[(ConnectionState2['Disposed'] = 4)] = 'Disposed'; + })(ConnectionState || (ConnectionState = {})); + function createMessageConnection( + messageReader, + messageWriter, + _logger, + options + ) { + const logger = _logger !== void 0 ? _logger : exports.NullLogger; + let sequenceNumber = 0; + let notificationSequenceNumber = 0; + let unknownResponseSequenceNumber = 0; + const version = '2.0'; + let starRequestHandler = void 0; + const requestHandlers = Object.create(null); + let starNotificationHandler = void 0; + const notificationHandlers = Object.create(null); + const progressHandlers = new Map(); + let timer; + let messageQueue = new linkedMap_1.LinkedMap(); + let responsePromises = Object.create(null); + let knownCanceledRequests = new Set(); + let requestTokens = Object.create(null); + let trace = Trace.Off; + let traceFormat = TraceFormat.Text; + let tracer; + let state = ConnectionState.New; + const errorEmitter = new events_1.Emitter(); + const closeEmitter = new events_1.Emitter(); + const unhandledNotificationEmitter = new events_1.Emitter(); + const unhandledProgressEmitter = new events_1.Emitter(); + const disposeEmitter = new events_1.Emitter(); + const cancellationStrategy = + options && options.cancellationStrategy + ? options.cancellationStrategy + : CancellationStrategy.Message; + function createRequestQueueKey(id) { + if (id === null) { + throw new Error( + `Can't send requests with id null since the response can't be correlated.` + ); + } + return 'req-' + id.toString(); + } + function createResponseQueueKey(id) { + if (id === null) { + return 'res-unknown-' + (++unknownResponseSequenceNumber).toString(); + } else { + return 'res-' + id.toString(); + } + } + function createNotificationQueueKey() { + return 'not-' + (++notificationSequenceNumber).toString(); + } + function addMessageToQueue(queue, message) { + if (messages_1.Message.isRequest(message)) { + queue.set(createRequestQueueKey(message.id), message); + } else if (messages_1.Message.isResponse(message)) { + queue.set(createResponseQueueKey(message.id), message); + } else { + queue.set(createNotificationQueueKey(), message); + } + } + function cancelUndispatched(_message) { + return void 0; + } + function isListening() { + return state === ConnectionState.Listening; + } + function isClosed() { + return state === ConnectionState.Closed; + } + function isDisposed() { + return state === ConnectionState.Disposed; + } + function closeHandler() { + if ( + state === ConnectionState.New || + state === ConnectionState.Listening + ) { + state = ConnectionState.Closed; + closeEmitter.fire(void 0); + } + } + function readErrorHandler(error) { + errorEmitter.fire([error, void 0, void 0]); + } + function writeErrorHandler(data) { + errorEmitter.fire(data); + } + messageReader.onClose(closeHandler); + messageReader.onError(readErrorHandler); + messageWriter.onClose(closeHandler); + messageWriter.onError(writeErrorHandler); + function triggerMessageQueue() { + if (timer || messageQueue.size === 0) { + return; + } + timer = (0, ral_1.default)().timer.setImmediate(() => { + timer = void 0; + processMessageQueue(); + }); + } + function processMessageQueue() { + if (messageQueue.size === 0) { + return; + } + const message = messageQueue.shift(); + try { + if (messages_1.Message.isRequest(message)) { + handleRequest(message); + } else if (messages_1.Message.isNotification(message)) { + handleNotification(message); + } else if (messages_1.Message.isResponse(message)) { + handleResponse(message); + } else { + handleInvalidMessage(message); + } + } finally { + triggerMessageQueue(); + } + } + const callback = (message) => { + try { + if ( + messages_1.Message.isNotification(message) && + message.method === CancelNotification.type.method + ) { + const cancelId = message.params.id; + const key = createRequestQueueKey(cancelId); + const toCancel = messageQueue.get(key); + if (messages_1.Message.isRequest(toCancel)) { + const strategy = options?.connectionStrategy; + const response = + strategy && strategy.cancelUndispatched + ? strategy.cancelUndispatched(toCancel, cancelUndispatched) + : cancelUndispatched(toCancel); + if ( + response && + (response.error !== void 0 || response.result !== void 0) + ) { + messageQueue.delete(key); + response.id = toCancel.id; + traceSendingResponse(response, message.method, Date.now()); + messageWriter + .write(response) + .catch(() => + logger.error( + `Sending response for canceled message failed.` + ) + ); + return; + } + } + const tokenKey = String(cancelId); + const cancellationToken = requestTokens[tokenKey]; + if (cancellationToken !== void 0) { + cancellationToken.cancel(); + traceReceivedNotification(message); + return; + } else { + knownCanceledRequests.add(cancelId); + } + } + addMessageToQueue(messageQueue, message); + } finally { + triggerMessageQueue(); + } + }; + function handleRequest(requestMessage) { + if (isDisposed()) { + return; + } + function reply(resultOrError, method, startTime2) { + const message = { + jsonrpc: version, + id: requestMessage.id, + }; + if (resultOrError instanceof messages_1.ResponseError) { + message.error = resultOrError.toJson(); + } else { + message.result = resultOrError === void 0 ? null : resultOrError; + } + traceSendingResponse(message, method, startTime2); + messageWriter + .write(message) + .catch(() => logger.error(`Sending response failed.`)); + } + function replyError(error, method, startTime2) { + const message = { + jsonrpc: version, + id: requestMessage.id, + error: error.toJson(), + }; + traceSendingResponse(message, method, startTime2); + messageWriter + .write(message) + .catch(() => logger.error(`Sending response failed.`)); + } + function replySuccess(result, method, startTime2) { + if (result === void 0) { + result = null; + } + const message = { + jsonrpc: version, + id: requestMessage.id, + result, + }; + traceSendingResponse(message, method, startTime2); + messageWriter + .write(message) + .catch(() => logger.error(`Sending response failed.`)); + } + traceReceivedRequest(requestMessage); + const element = requestHandlers[requestMessage.method]; + let type; + let requestHandler; + if (element) { + type = element.type; + requestHandler = element.handler; + } + const startTime = Date.now(); + if (requestHandler || starRequestHandler) { + const tokenKey = String(requestMessage.id); + const cancellationSource = cancellationStrategy.receiver.createCancellationTokenSource( + tokenKey + ); + if ( + requestMessage.id !== null && + knownCanceledRequests.has(requestMessage.id) + ) { + cancellationSource.cancel(); + } + requestTokens[tokenKey] = cancellationSource; + try { + let handlerResult; + if (requestHandler) { + if (requestMessage.params === void 0) { + if (type !== void 0 && type.numberOfParams !== 0) { + replyError( + new messages_1.ResponseError( + messages_1.ErrorCodes.InvalidParams, + `Request ${requestMessage.method} defines ${type.numberOfParams} params but received none.` + ), + requestMessage.method, + startTime + ); + return; + } + handlerResult = requestHandler(cancellationSource.token); + } else if (Array.isArray(requestMessage.params)) { + if ( + type !== void 0 && + type.parameterStructures === + messages_1.ParameterStructures.byName + ) { + replyError( + new messages_1.ResponseError( + messages_1.ErrorCodes.InvalidParams, + `Request ${requestMessage.method} defines parameters by name but received parameters by position` + ), + requestMessage.method, + startTime + ); + return; + } + handlerResult = requestHandler( + ...requestMessage.params, + cancellationSource.token + ); + } else { + if ( + type !== void 0 && + type.parameterStructures === + messages_1.ParameterStructures.byPosition + ) { + replyError( + new messages_1.ResponseError( + messages_1.ErrorCodes.InvalidParams, + `Request ${requestMessage.method} defines parameters by position but received parameters by name` + ), + requestMessage.method, + startTime + ); + return; + } + handlerResult = requestHandler( + requestMessage.params, + cancellationSource.token + ); + } + } else if (starRequestHandler) { + handlerResult = starRequestHandler( + requestMessage.method, + requestMessage.params, + cancellationSource.token + ); + } + const promise = handlerResult; + if (!handlerResult) { + delete requestTokens[tokenKey]; + replySuccess(handlerResult, requestMessage.method, startTime); + } else if (promise.then) { + promise.then( + (resultOrError) => { + delete requestTokens[tokenKey]; + reply(resultOrError, requestMessage.method, startTime); + }, + (error) => { + delete requestTokens[tokenKey]; + if (error instanceof messages_1.ResponseError) { + replyError(error, requestMessage.method, startTime); + } else if (error && Is2.string(error.message)) { + replyError( + new messages_1.ResponseError( + messages_1.ErrorCodes.InternalError, + `Request ${requestMessage.method} failed with message: ${error.message}` + ), + requestMessage.method, + startTime + ); + } else { + replyError( + new messages_1.ResponseError( + messages_1.ErrorCodes.InternalError, + `Request ${requestMessage.method} failed unexpectedly without providing any details.` + ), + requestMessage.method, + startTime + ); + } + } + ); + } else { + delete requestTokens[tokenKey]; + reply(handlerResult, requestMessage.method, startTime); + } + } catch (error) { + delete requestTokens[tokenKey]; + if (error instanceof messages_1.ResponseError) { + reply(error, requestMessage.method, startTime); + } else if (error && Is2.string(error.message)) { + replyError( + new messages_1.ResponseError( + messages_1.ErrorCodes.InternalError, + `Request ${requestMessage.method} failed with message: ${error.message}` + ), + requestMessage.method, + startTime + ); + } else { + replyError( + new messages_1.ResponseError( + messages_1.ErrorCodes.InternalError, + `Request ${requestMessage.method} failed unexpectedly without providing any details.` + ), + requestMessage.method, + startTime + ); + } + } + } else { + replyError( + new messages_1.ResponseError( + messages_1.ErrorCodes.MethodNotFound, + `Unhandled method ${requestMessage.method}` + ), + requestMessage.method, + startTime + ); + } + } + function handleResponse(responseMessage) { + if (isDisposed()) { + return; + } + if (responseMessage.id === null) { + if (responseMessage.error) { + logger.error(`Received response message without id: Error is: +${JSON.stringify(responseMessage.error, void 0, 4)}`); + } else { + logger.error( + `Received response message without id. No further error information provided.` + ); + } + } else { + const key = String(responseMessage.id); + const responsePromise = responsePromises[key]; + traceReceivedResponse(responseMessage, responsePromise); + if (responsePromise) { + delete responsePromises[key]; + try { + if (responseMessage.error) { + const error = responseMessage.error; + responsePromise.reject( + new messages_1.ResponseError( + error.code, + error.message, + error.data + ) + ); + } else if (responseMessage.result !== void 0) { + responsePromise.resolve(responseMessage.result); + } else { + throw new Error('Should never happen.'); + } + } catch (error) { + if (error.message) { + logger.error( + `Response handler '${responsePromise.method}' failed with message: ${error.message}` + ); + } else { + logger.error( + `Response handler '${responsePromise.method}' failed unexpectedly.` + ); + } + } + } + } + } + function handleNotification(message) { + if (isDisposed()) { + return; + } + let type = void 0; + let notificationHandler; + if (message.method === CancelNotification.type.method) { + const cancelId = message.params.id; + knownCanceledRequests.delete(cancelId); + traceReceivedNotification(message); + return; + } else { + const element = notificationHandlers[message.method]; + if (element) { + notificationHandler = element.handler; + type = element.type; + } + } + if (notificationHandler || starNotificationHandler) { + try { + traceReceivedNotification(message); + if (notificationHandler) { + if (message.params === void 0) { + if (type !== void 0) { + if ( + type.numberOfParams !== 0 && + type.parameterStructures !== + messages_1.ParameterStructures.byName + ) { + logger.error( + `Notification ${message.method} defines ${type.numberOfParams} params but received none.` + ); + } + } + notificationHandler(); + } else if (Array.isArray(message.params)) { + const params = message.params; + if ( + message.method === ProgressNotification.type.method && + params.length === 2 && + ProgressToken.is(params[0]) + ) { + notificationHandler({ token: params[0], value: params[1] }); + } else { + if (type !== void 0) { + if ( + type.parameterStructures === + messages_1.ParameterStructures.byName + ) { + logger.error( + `Notification ${message.method} defines parameters by name but received parameters by position` + ); + } + if (type.numberOfParams !== message.params.length) { + logger.error( + `Notification ${message.method} defines ${type.numberOfParams} params but received ${params.length} arguments` + ); + } + } + notificationHandler(...params); + } + } else { + if ( + type !== void 0 && + type.parameterStructures === + messages_1.ParameterStructures.byPosition + ) { + logger.error( + `Notification ${message.method} defines parameters by position but received parameters by name` + ); + } + notificationHandler(message.params); + } + } else if (starNotificationHandler) { + starNotificationHandler(message.method, message.params); + } + } catch (error) { + if (error.message) { + logger.error( + `Notification handler '${message.method}' failed with message: ${error.message}` + ); + } else { + logger.error( + `Notification handler '${message.method}' failed unexpectedly.` + ); + } + } + } else { + unhandledNotificationEmitter.fire(message); + } + } + function handleInvalidMessage(message) { + if (!message) { + logger.error('Received empty message.'); + return; + } + logger.error(`Received message which is neither a response nor a notification message: +${JSON.stringify(message, null, 4)}`); + const responseMessage = message; + if (Is2.string(responseMessage.id) || Is2.number(responseMessage.id)) { + const key = String(responseMessage.id); + const responseHandler = responsePromises[key]; + if (responseHandler) { + responseHandler.reject( + new Error( + 'The received response has neither a result nor an error property.' + ) + ); + } + } + } + function stringifyTrace(params) { + if (params === void 0 || params === null) { + return void 0; + } + switch (trace) { + case Trace.Verbose: + return JSON.stringify(params, null, 4); + case Trace.Compact: + return JSON.stringify(params); + default: + return void 0; + } + } + function traceSendingRequest(message) { + if (trace === Trace.Off || !tracer) { + return; + } + if (traceFormat === TraceFormat.Text) { + let data = void 0; + if ( + (trace === Trace.Verbose || trace === Trace.Compact) && + message.params + ) { + data = `Params: ${stringifyTrace(message.params)} + +`; + } + tracer.log( + `Sending request '${message.method} - (${message.id})'.`, + data + ); + } else { + logLSPMessage('send-request', message); + } + } + function traceSendingNotification(message) { + if (trace === Trace.Off || !tracer) { + return; + } + if (traceFormat === TraceFormat.Text) { + let data = void 0; + if (trace === Trace.Verbose || trace === Trace.Compact) { + if (message.params) { + data = `Params: ${stringifyTrace(message.params)} + +`; + } else { + data = 'No parameters provided.\n\n'; + } + } + tracer.log(`Sending notification '${message.method}'.`, data); + } else { + logLSPMessage('send-notification', message); + } + } + function traceSendingResponse(message, method, startTime) { + if (trace === Trace.Off || !tracer) { + return; + } + if (traceFormat === TraceFormat.Text) { + let data = void 0; + if (trace === Trace.Verbose || trace === Trace.Compact) { + if (message.error && message.error.data) { + data = `Error data: ${stringifyTrace(message.error.data)} + +`; + } else { + if (message.result) { + data = `Result: ${stringifyTrace(message.result)} + +`; + } else if (message.error === void 0) { + data = 'No result returned.\n\n'; + } + } + } + tracer.log( + `Sending response '${method} - (${ + message.id + })'. Processing request took ${Date.now() - startTime}ms`, + data + ); + } else { + logLSPMessage('send-response', message); + } + } + function traceReceivedRequest(message) { + if (trace === Trace.Off || !tracer) { + return; + } + if (traceFormat === TraceFormat.Text) { + let data = void 0; + if ( + (trace === Trace.Verbose || trace === Trace.Compact) && + message.params + ) { + data = `Params: ${stringifyTrace(message.params)} + +`; + } + tracer.log( + `Received request '${message.method} - (${message.id})'.`, + data + ); + } else { + logLSPMessage('receive-request', message); + } + } + function traceReceivedNotification(message) { + if ( + trace === Trace.Off || + !tracer || + message.method === LogTraceNotification.type.method + ) { + return; + } + if (traceFormat === TraceFormat.Text) { + let data = void 0; + if (trace === Trace.Verbose || trace === Trace.Compact) { + if (message.params) { + data = `Params: ${stringifyTrace(message.params)} + +`; + } else { + data = 'No parameters provided.\n\n'; + } + } + tracer.log(`Received notification '${message.method}'.`, data); + } else { + logLSPMessage('receive-notification', message); + } + } + function traceReceivedResponse(message, responsePromise) { + if (trace === Trace.Off || !tracer) { + return; + } + if (traceFormat === TraceFormat.Text) { + let data = void 0; + if (trace === Trace.Verbose || trace === Trace.Compact) { + if (message.error && message.error.data) { + data = `Error data: ${stringifyTrace(message.error.data)} + +`; + } else { + if (message.result) { + data = `Result: ${stringifyTrace(message.result)} + +`; + } else if (message.error === void 0) { + data = 'No result returned.\n\n'; + } + } + } + if (responsePromise) { + const error = message.error + ? ` Request failed: ${message.error.message} (${message.error.code}).` + : ''; + tracer.log( + `Received response '${responsePromise.method} - (${ + message.id + })' in ${Date.now() - responsePromise.timerStart}ms.${error}`, + data + ); + } else { + tracer.log( + `Received response ${message.id} without active response promise.`, + data + ); + } + } else { + logLSPMessage('receive-response', message); + } + } + function logLSPMessage(type, message) { + if (!tracer || trace === Trace.Off) { + return; + } + const lspMessage = { + isLSPMessage: true, + type, + message, + timestamp: Date.now(), + }; + tracer.log(lspMessage); + } + function throwIfClosedOrDisposed() { + if (isClosed()) { + throw new ConnectionError( + ConnectionErrors.Closed, + 'Connection is closed.' + ); + } + if (isDisposed()) { + throw new ConnectionError( + ConnectionErrors.Disposed, + 'Connection is disposed.' + ); + } + } + function throwIfListening() { + if (isListening()) { + throw new ConnectionError( + ConnectionErrors.AlreadyListening, + 'Connection is already listening' + ); + } + } + function throwIfNotListening() { + if (!isListening()) { + throw new Error('Call listen() first.'); + } + } + function undefinedToNull(param) { + if (param === void 0) { + return null; + } else { + return param; + } + } + function nullToUndefined(param) { + if (param === null) { + return void 0; + } else { + return param; + } + } + function isNamedParam(param) { + return ( + param !== void 0 && + param !== null && + !Array.isArray(param) && + typeof param === 'object' + ); + } + function computeSingleParam(parameterStructures, param) { + switch (parameterStructures) { + case messages_1.ParameterStructures.auto: + if (isNamedParam(param)) { + return nullToUndefined(param); + } else { + return [undefinedToNull(param)]; + } + case messages_1.ParameterStructures.byName: + if (!isNamedParam(param)) { + throw new Error( + `Received parameters by name but param is not an object literal.` + ); + } + return nullToUndefined(param); + case messages_1.ParameterStructures.byPosition: + return [undefinedToNull(param)]; + default: + throw new Error( + `Unknown parameter structure ${parameterStructures.toString()}` + ); + } + } + function computeMessageParams(type, params) { + let result; + const numberOfParams = type.numberOfParams; + switch (numberOfParams) { + case 0: + result = void 0; + break; + case 1: + result = computeSingleParam(type.parameterStructures, params[0]); + break; + default: + result = []; + for (let i = 0; i < params.length && i < numberOfParams; i++) { + result.push(undefinedToNull(params[i])); + } + if (params.length < numberOfParams) { + for (let i = params.length; i < numberOfParams; i++) { + result.push(null); + } + } + break; + } + return result; + } + const connection = { + sendNotification: (type, ...args) => { + throwIfClosedOrDisposed(); + let method; + let messageParams; + if (Is2.string(type)) { + method = type; + const first = args[0]; + let paramStart = 0; + let parameterStructures = messages_1.ParameterStructures.auto; + if (messages_1.ParameterStructures.is(first)) { + paramStart = 1; + parameterStructures = first; + } + let paramEnd = args.length; + const numberOfParams = paramEnd - paramStart; + switch (numberOfParams) { + case 0: + messageParams = void 0; + break; + case 1: + messageParams = computeSingleParam( + parameterStructures, + args[paramStart] + ); + break; + default: + if ( + parameterStructures === messages_1.ParameterStructures.byName + ) { + throw new Error( + `Received ${numberOfParams} parameters for 'by Name' notification parameter structure.` + ); + } + messageParams = args + .slice(paramStart, paramEnd) + .map((value) => undefinedToNull(value)); + break; + } + } else { + const params = args; + method = type.method; + messageParams = computeMessageParams(type, params); + } + const notificationMessage = { + jsonrpc: version, + method, + params: messageParams, + }; + traceSendingNotification(notificationMessage); + return messageWriter + .write(notificationMessage) + .catch(() => logger.error(`Sending notification failed.`)); + }, + onNotification: (type, handler) => { + throwIfClosedOrDisposed(); + let method; + if (Is2.func(type)) { + starNotificationHandler = type; + } else if (handler) { + if (Is2.string(type)) { + method = type; + notificationHandlers[type] = { type: void 0, handler }; + } else { + method = type.method; + notificationHandlers[type.method] = { type, handler }; + } + } + return { + dispose: () => { + if (method !== void 0) { + delete notificationHandlers[method]; + } else { + starNotificationHandler = void 0; + } + }, + }; + }, + onProgress: (_type, token, handler) => { + if (progressHandlers.has(token)) { + throw new Error( + `Progress handler for token ${token} already registered` + ); + } + progressHandlers.set(token, handler); + return { + dispose: () => { + progressHandlers.delete(token); + }, + }; + }, + sendProgress: (_type, token, value) => { + return connection.sendNotification(ProgressNotification.type, { + token, + value, + }); + }, + onUnhandledProgress: unhandledProgressEmitter.event, + sendRequest: (type, ...args) => { + throwIfClosedOrDisposed(); + throwIfNotListening(); + let method; + let messageParams; + let token = void 0; + if (Is2.string(type)) { + method = type; + const first = args[0]; + const last = args[args.length - 1]; + let paramStart = 0; + let parameterStructures = messages_1.ParameterStructures.auto; + if (messages_1.ParameterStructures.is(first)) { + paramStart = 1; + parameterStructures = first; + } + let paramEnd = args.length; + if (cancellation_1.CancellationToken.is(last)) { + paramEnd = paramEnd - 1; + token = last; + } + const numberOfParams = paramEnd - paramStart; + switch (numberOfParams) { + case 0: + messageParams = void 0; + break; + case 1: + messageParams = computeSingleParam( + parameterStructures, + args[paramStart] + ); + break; + default: + if ( + parameterStructures === messages_1.ParameterStructures.byName + ) { + throw new Error( + `Received ${numberOfParams} parameters for 'by Name' request parameter structure.` + ); + } + messageParams = args + .slice(paramStart, paramEnd) + .map((value) => undefinedToNull(value)); + break; + } + } else { + const params = args; + method = type.method; + messageParams = computeMessageParams(type, params); + const numberOfParams = type.numberOfParams; + token = cancellation_1.CancellationToken.is(params[numberOfParams]) + ? params[numberOfParams] + : void 0; + } + const id = sequenceNumber++; + let disposable; + if (token) { + disposable = token.onCancellationRequested(() => { + const p = cancellationStrategy.sender.sendCancellation( + connection, + id + ); + if (p === void 0) { + logger.log( + `Received no promise from cancellation strategy when cancelling id ${id}` + ); + return Promise.resolve(); + } else { + return p.catch(() => { + logger.log( + `Sending cancellation messages for id ${id} failed` + ); + }); + } + }); + } + const result = new Promise((resolve, reject) => { + const requestMessage = { + jsonrpc: version, + id, + method, + params: messageParams, + }; + const resolveWithCleanup = (r) => { + resolve(r); + cancellationStrategy.sender.cleanup(id); + disposable?.dispose(); + }; + const rejectWithCleanup = (r) => { + reject(r); + cancellationStrategy.sender.cleanup(id); + disposable?.dispose(); + }; + let responsePromise = { + method, + timerStart: Date.now(), + resolve: resolveWithCleanup, + reject: rejectWithCleanup, + }; + traceSendingRequest(requestMessage); + try { + messageWriter + .write(requestMessage) + .catch(() => logger.error(`Sending request failed.`)); + } catch (e) { + responsePromise.reject( + new messages_1.ResponseError( + messages_1.ErrorCodes.MessageWriteError, + e.message ? e.message : 'Unknown reason' + ) + ); + responsePromise = null; + } + if (responsePromise) { + responsePromises[String(id)] = responsePromise; + } + }); + return result; + }, + onRequest: (type, handler) => { + throwIfClosedOrDisposed(); + let method = null; + if (StarRequestHandler.is(type)) { + method = void 0; + starRequestHandler = type; + } else if (Is2.string(type)) { + method = null; + if (handler !== void 0) { + method = type; + requestHandlers[type] = { handler, type: void 0 }; + } + } else { + if (handler !== void 0) { + method = type.method; + requestHandlers[type.method] = { type, handler }; + } + } + return { + dispose: () => { + if (method === null) { + return; + } + if (method !== void 0) { + delete requestHandlers[method]; + } else { + starRequestHandler = void 0; + } + }, + }; + }, + trace: (_value, _tracer, sendNotificationOrTraceOptions) => { + let _sendNotification = false; + let _traceFormat = TraceFormat.Text; + if (sendNotificationOrTraceOptions !== void 0) { + if (Is2.boolean(sendNotificationOrTraceOptions)) { + _sendNotification = sendNotificationOrTraceOptions; + } else { + _sendNotification = + sendNotificationOrTraceOptions.sendNotification || false; + _traceFormat = + sendNotificationOrTraceOptions.traceFormat || TraceFormat.Text; + } + } + trace = _value; + traceFormat = _traceFormat; + if (trace === Trace.Off) { + tracer = void 0; + } else { + tracer = _tracer; + } + if (_sendNotification && !isClosed() && !isDisposed()) { + connection + .sendNotification(SetTraceNotification.type, { + value: Trace.toString(_value), + }) + .catch(() => { + logger.error(`Sending trace notification failed`); + }); + } + }, + onError: errorEmitter.event, + onClose: closeEmitter.event, + onUnhandledNotification: unhandledNotificationEmitter.event, + onDispose: disposeEmitter.event, + end: () => { + messageWriter.end(); + }, + dispose: () => { + if (isDisposed()) { + return; + } + state = ConnectionState.Disposed; + disposeEmitter.fire(void 0); + const error = new Error('Connection got disposed.'); + Object.keys(responsePromises).forEach((key) => { + responsePromises[key].reject(error); + }); + responsePromises = Object.create(null); + requestTokens = Object.create(null); + knownCanceledRequests = new Set(); + messageQueue = new linkedMap_1.LinkedMap(); + if (Is2.func(messageWriter.dispose)) { + messageWriter.dispose(); + } + if (Is2.func(messageReader.dispose)) { + messageReader.dispose(); + } + }, + listen: () => { + throwIfClosedOrDisposed(); + throwIfListening(); + state = ConnectionState.Listening; + messageReader.listen(callback); + }, + inspect: () => { + (0, ral_1.default)().console.log('inspect'); + }, + }; + connection.onNotification(LogTraceNotification.type, (params) => { + if (trace === Trace.Off || !tracer) { + return; + } + const verbose = trace === Trace.Verbose || trace === Trace.Compact; + tracer.log(params.message, verbose ? params.verbose : void 0); + }); + connection.onNotification(ProgressNotification.type, (params) => { + const handler = progressHandlers.get(params.token); + if (handler) { + handler(params.value); + } else { + unhandledProgressEmitter.fire(params); + } + }); + return connection; + } + exports.createMessageConnection = createMessageConnection; + }, +}); + +// client/node_modules/vscode-jsonrpc/lib/common/api.js +let require_api = __commonJS({ + 'client/node_modules/vscode-jsonrpc/lib/common/api.js'(exports) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.SetTraceNotification = exports.TraceFormat = exports.Trace = exports.ProgressType = exports.ProgressToken = exports.createMessageConnection = exports.NullLogger = exports.ConnectionOptions = exports.ConnectionStrategy = exports.WriteableStreamMessageWriter = exports.AbstractMessageWriter = exports.MessageWriter = exports.ReadableStreamMessageReader = exports.AbstractMessageReader = exports.MessageReader = exports.CancellationToken = exports.CancellationTokenSource = exports.Emitter = exports.Event = exports.Disposable = exports.LRUCache = exports.Touch = exports.LinkedMap = exports.ParameterStructures = exports.NotificationType9 = exports.NotificationType8 = exports.NotificationType7 = exports.NotificationType6 = exports.NotificationType5 = exports.NotificationType4 = exports.NotificationType3 = exports.NotificationType2 = exports.NotificationType1 = exports.NotificationType0 = exports.NotificationType = exports.ErrorCodes = exports.ResponseError = exports.RequestType9 = exports.RequestType8 = exports.RequestType7 = exports.RequestType6 = exports.RequestType5 = exports.RequestType4 = exports.RequestType3 = exports.RequestType2 = exports.RequestType1 = exports.RequestType0 = exports.RequestType = exports.Message = exports.RAL = void 0; + exports.CancellationStrategy = exports.CancellationSenderStrategy = exports.CancellationReceiverStrategy = exports.ConnectionError = exports.ConnectionErrors = exports.LogTraceNotification = void 0; + let messages_1 = require_messages(); + Object.defineProperty(exports, 'Message', { + enumerable: true, + get: function () { + return messages_1.Message; + }, + }); + Object.defineProperty(exports, 'RequestType', { + enumerable: true, + get: function () { + return messages_1.RequestType; + }, + }); + Object.defineProperty(exports, 'RequestType0', { + enumerable: true, + get: function () { + return messages_1.RequestType0; + }, + }); + Object.defineProperty(exports, 'RequestType1', { + enumerable: true, + get: function () { + return messages_1.RequestType1; + }, + }); + Object.defineProperty(exports, 'RequestType2', { + enumerable: true, + get: function () { + return messages_1.RequestType2; + }, + }); + Object.defineProperty(exports, 'RequestType3', { + enumerable: true, + get: function () { + return messages_1.RequestType3; + }, + }); + Object.defineProperty(exports, 'RequestType4', { + enumerable: true, + get: function () { + return messages_1.RequestType4; + }, + }); + Object.defineProperty(exports, 'RequestType5', { + enumerable: true, + get: function () { + return messages_1.RequestType5; + }, + }); + Object.defineProperty(exports, 'RequestType6', { + enumerable: true, + get: function () { + return messages_1.RequestType6; + }, + }); + Object.defineProperty(exports, 'RequestType7', { + enumerable: true, + get: function () { + return messages_1.RequestType7; + }, + }); + Object.defineProperty(exports, 'RequestType8', { + enumerable: true, + get: function () { + return messages_1.RequestType8; + }, + }); + Object.defineProperty(exports, 'RequestType9', { + enumerable: true, + get: function () { + return messages_1.RequestType9; + }, + }); + Object.defineProperty(exports, 'ResponseError', { + enumerable: true, + get: function () { + return messages_1.ResponseError; + }, + }); + Object.defineProperty(exports, 'ErrorCodes', { + enumerable: true, + get: function () { + return messages_1.ErrorCodes; + }, + }); + Object.defineProperty(exports, 'NotificationType', { + enumerable: true, + get: function () { + return messages_1.NotificationType; + }, + }); + Object.defineProperty(exports, 'NotificationType0', { + enumerable: true, + get: function () { + return messages_1.NotificationType0; + }, + }); + Object.defineProperty(exports, 'NotificationType1', { + enumerable: true, + get: function () { + return messages_1.NotificationType1; + }, + }); + Object.defineProperty(exports, 'NotificationType2', { + enumerable: true, + get: function () { + return messages_1.NotificationType2; + }, + }); + Object.defineProperty(exports, 'NotificationType3', { + enumerable: true, + get: function () { + return messages_1.NotificationType3; + }, + }); + Object.defineProperty(exports, 'NotificationType4', { + enumerable: true, + get: function () { + return messages_1.NotificationType4; + }, + }); + Object.defineProperty(exports, 'NotificationType5', { + enumerable: true, + get: function () { + return messages_1.NotificationType5; + }, + }); + Object.defineProperty(exports, 'NotificationType6', { + enumerable: true, + get: function () { + return messages_1.NotificationType6; + }, + }); + Object.defineProperty(exports, 'NotificationType7', { + enumerable: true, + get: function () { + return messages_1.NotificationType7; + }, + }); + Object.defineProperty(exports, 'NotificationType8', { + enumerable: true, + get: function () { + return messages_1.NotificationType8; + }, + }); + Object.defineProperty(exports, 'NotificationType9', { + enumerable: true, + get: function () { + return messages_1.NotificationType9; + }, + }); + Object.defineProperty(exports, 'ParameterStructures', { + enumerable: true, + get: function () { + return messages_1.ParameterStructures; + }, + }); + let linkedMap_1 = require_linkedMap(); + Object.defineProperty(exports, 'LinkedMap', { + enumerable: true, + get: function () { + return linkedMap_1.LinkedMap; + }, + }); + Object.defineProperty(exports, 'LRUCache', { + enumerable: true, + get: function () { + return linkedMap_1.LRUCache; + }, + }); + Object.defineProperty(exports, 'Touch', { + enumerable: true, + get: function () { + return linkedMap_1.Touch; + }, + }); + let disposable_1 = require_disposable(); + Object.defineProperty(exports, 'Disposable', { + enumerable: true, + get: function () { + return disposable_1.Disposable; + }, + }); + let events_1 = require_events(); + Object.defineProperty(exports, 'Event', { + enumerable: true, + get: function () { + return events_1.Event; + }, + }); + Object.defineProperty(exports, 'Emitter', { + enumerable: true, + get: function () { + return events_1.Emitter; + }, + }); + let cancellation_1 = require_cancellation(); + Object.defineProperty(exports, 'CancellationTokenSource', { + enumerable: true, + get: function () { + return cancellation_1.CancellationTokenSource; + }, + }); + Object.defineProperty(exports, 'CancellationToken', { + enumerable: true, + get: function () { + return cancellation_1.CancellationToken; + }, + }); + let messageReader_1 = require_messageReader(); + Object.defineProperty(exports, 'MessageReader', { + enumerable: true, + get: function () { + return messageReader_1.MessageReader; + }, + }); + Object.defineProperty(exports, 'AbstractMessageReader', { + enumerable: true, + get: function () { + return messageReader_1.AbstractMessageReader; + }, + }); + Object.defineProperty(exports, 'ReadableStreamMessageReader', { + enumerable: true, + get: function () { + return messageReader_1.ReadableStreamMessageReader; + }, + }); + let messageWriter_1 = require_messageWriter(); + Object.defineProperty(exports, 'MessageWriter', { + enumerable: true, + get: function () { + return messageWriter_1.MessageWriter; + }, + }); + Object.defineProperty(exports, 'AbstractMessageWriter', { + enumerable: true, + get: function () { + return messageWriter_1.AbstractMessageWriter; + }, + }); + Object.defineProperty(exports, 'WriteableStreamMessageWriter', { + enumerable: true, + get: function () { + return messageWriter_1.WriteableStreamMessageWriter; + }, + }); + let connection_1 = require_connection(); + Object.defineProperty(exports, 'ConnectionStrategy', { + enumerable: true, + get: function () { + return connection_1.ConnectionStrategy; + }, + }); + Object.defineProperty(exports, 'ConnectionOptions', { + enumerable: true, + get: function () { + return connection_1.ConnectionOptions; + }, + }); + Object.defineProperty(exports, 'NullLogger', { + enumerable: true, + get: function () { + return connection_1.NullLogger; + }, + }); + Object.defineProperty(exports, 'createMessageConnection', { + enumerable: true, + get: function () { + return connection_1.createMessageConnection; + }, + }); + Object.defineProperty(exports, 'ProgressToken', { + enumerable: true, + get: function () { + return connection_1.ProgressToken; + }, + }); + Object.defineProperty(exports, 'ProgressType', { + enumerable: true, + get: function () { + return connection_1.ProgressType; + }, + }); + Object.defineProperty(exports, 'Trace', { + enumerable: true, + get: function () { + return connection_1.Trace; + }, + }); + Object.defineProperty(exports, 'TraceFormat', { + enumerable: true, + get: function () { + return connection_1.TraceFormat; + }, + }); + Object.defineProperty(exports, 'SetTraceNotification', { + enumerable: true, + get: function () { + return connection_1.SetTraceNotification; + }, + }); + Object.defineProperty(exports, 'LogTraceNotification', { + enumerable: true, + get: function () { + return connection_1.LogTraceNotification; + }, + }); + Object.defineProperty(exports, 'ConnectionErrors', { + enumerable: true, + get: function () { + return connection_1.ConnectionErrors; + }, + }); + Object.defineProperty(exports, 'ConnectionError', { + enumerable: true, + get: function () { + return connection_1.ConnectionError; + }, + }); + Object.defineProperty(exports, 'CancellationReceiverStrategy', { + enumerable: true, + get: function () { + return connection_1.CancellationReceiverStrategy; + }, + }); + Object.defineProperty(exports, 'CancellationSenderStrategy', { + enumerable: true, + get: function () { + return connection_1.CancellationSenderStrategy; + }, + }); + Object.defineProperty(exports, 'CancellationStrategy', { + enumerable: true, + get: function () { + return connection_1.CancellationStrategy; + }, + }); + let ral_1 = require_ral(); + exports.RAL = ral_1.default; + }, +}); + +// client/node_modules/vscode-jsonrpc/lib/browser/main.js +let require_main = __commonJS({ + 'client/node_modules/vscode-jsonrpc/lib/browser/main.js'(exports) { + 'use strict'; + let __createBinding = + (exports && exports.__createBinding) || + (Object.create + ? function (o, m, k, k2) { + if (k2 === void 0) { + k2 = k; + } + Object.defineProperty(o, k2, { + enumerable: true, + get: function () { + return m[k]; + }, + }); + } + : function (o, m, k, k2) { + if (k2 === void 0) { + k2 = k; + } + o[k2] = m[k]; + }); + let __exportStar = + (exports && exports.__exportStar) || + function (m, exports2) { + for (let p in m) { + if ( + p !== 'default' && + !Object.prototype.hasOwnProperty.call(exports2, p) + ) { + __createBinding(exports2, m, p); + } + } + }; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.createMessageConnection = exports.BrowserMessageWriter = exports.BrowserMessageReader = void 0; + let ril_1 = require_ril(); + ril_1.default.install(); + let api_1 = require_api(); + __exportStar(require_api(), exports); + let BrowserMessageReader = class extends api_1.AbstractMessageReader { + constructor(context) { + super(); + this._onData = new api_1.Emitter(); + this._messageListener = (event) => { + this._onData.fire(event.data); + }; + context.addEventListener('error', (event) => this.fireError(event)); + context.onmessage = this._messageListener; + } + listen(callback) { + return this._onData.event(callback); + } + }; + exports.BrowserMessageReader = BrowserMessageReader; + let BrowserMessageWriter = class extends api_1.AbstractMessageWriter { + constructor(context) { + super(); + this.context = context; + this.errorCount = 0; + context.addEventListener('error', (event) => this.fireError(event)); + } + write(msg) { + try { + this.context.postMessage(msg); + return Promise.resolve(); + } catch (error) { + this.handleError(error, msg); + return Promise.reject(error); + } + } + handleError(error, msg) { + this.errorCount++; + this.fireError(error, msg, this.errorCount); + } + end() {} + }; + exports.BrowserMessageWriter = BrowserMessageWriter; + function createMessageConnection(reader, writer, logger, options) { + if (logger === void 0) { + logger = api_1.NullLogger; + } + if (api_1.ConnectionStrategy.is(options)) { + options = { connectionStrategy: options }; + } + return (0, api_1.createMessageConnection)( + reader, + writer, + logger, + options + ); + } + exports.createMessageConnection = createMessageConnection; + }, +}); + +// client/node_modules/vscode-jsonrpc/browser.js +let require_browser = __commonJS({ + 'client/node_modules/vscode-jsonrpc/browser.js'(exports, module2) { + 'use strict'; + module2.exports = require_main(); + }, +}); + +// client/node_modules/vscode-languageserver-types/lib/umd/main.js +let require_main2 = __commonJS({ + 'client/node_modules/vscode-languageserver-types/lib/umd/main.js'( + exports, + module2 + ) { + (function (factory) { + if (typeof module2 === 'object' && typeof module2.exports === 'object') { + let v = factory(require, exports); + if (v !== void 0) { + module2.exports = v; + } + } else if (typeof define === 'function' && define.amd) { + define(['require', 'exports'], factory); + } + })(function (require2, exports2) { + 'use strict'; + Object.defineProperty(exports2, '__esModule', { value: true }); + exports2.TextDocument = exports2.EOL = exports2.InlineValuesContext = exports2.InlineValueEvaluatableExpression = exports2.InlineValueVariableLookup = exports2.InlineValueText = exports2.SemanticTokens = exports2.SemanticTokenModifiers = exports2.SemanticTokenTypes = exports2.SelectionRange = exports2.DocumentLink = exports2.FormattingOptions = exports2.CodeLens = exports2.CodeAction = exports2.CodeActionContext = exports2.CodeActionTriggerKind = exports2.CodeActionKind = exports2.DocumentSymbol = exports2.WorkspaceSymbol = exports2.SymbolInformation = exports2.SymbolTag = exports2.SymbolKind = exports2.DocumentHighlight = exports2.DocumentHighlightKind = exports2.SignatureInformation = exports2.ParameterInformation = exports2.Hover = exports2.MarkedString = exports2.CompletionList = exports2.CompletionItem = exports2.CompletionItemLabelDetails = exports2.InsertTextMode = exports2.InsertReplaceEdit = exports2.CompletionItemTag = exports2.InsertTextFormat = exports2.CompletionItemKind = exports2.MarkupContent = exports2.MarkupKind = exports2.TextDocumentItem = exports2.OptionalVersionedTextDocumentIdentifier = exports2.VersionedTextDocumentIdentifier = exports2.TextDocumentIdentifier = exports2.WorkspaceChange = exports2.WorkspaceEdit = exports2.DeleteFile = exports2.RenameFile = exports2.CreateFile = exports2.TextDocumentEdit = exports2.AnnotatedTextEdit = exports2.ChangeAnnotationIdentifier = exports2.ChangeAnnotation = exports2.TextEdit = exports2.Command = exports2.Diagnostic = exports2.CodeDescription = exports2.DiagnosticTag = exports2.DiagnosticSeverity = exports2.DiagnosticRelatedInformation = exports2.FoldingRange = exports2.FoldingRangeKind = exports2.ColorPresentation = exports2.ColorInformation = exports2.Color = exports2.LocationLink = exports2.Location = exports2.Range = exports2.Position = exports2.uinteger = exports2.integer = void 0; + let integer; + (function (integer2) { + integer2.MIN_VALUE = -2147483648; + integer2.MAX_VALUE = 2147483647; + })((integer = exports2.integer || (exports2.integer = {}))); + let uinteger; + (function (uinteger2) { + uinteger2.MIN_VALUE = 0; + uinteger2.MAX_VALUE = 2147483647; + })((uinteger = exports2.uinteger || (exports2.uinteger = {}))); + let Position; + (function (Position2) { + function create(line, character) { + if (line === Number.MAX_VALUE) { + line = uinteger.MAX_VALUE; + } + if (character === Number.MAX_VALUE) { + character = uinteger.MAX_VALUE; + } + return { line, character }; + } + Position2.create = create; + function is2(value) { + let candidate = value; + return ( + Is2.objectLiteral(candidate) && + Is2.uinteger(candidate.line) && + Is2.uinteger(candidate.character) + ); + } + Position2.is = is2; + })((Position = exports2.Position || (exports2.Position = {}))); + let Range; + (function (Range2) { + function create(one, two, three, four) { + if ( + Is2.uinteger(one) && + Is2.uinteger(two) && + Is2.uinteger(three) && + Is2.uinteger(four) + ) { + return { + start: Position.create(one, two), + end: Position.create(three, four), + }; + } else if (Position.is(one) && Position.is(two)) { + return { start: one, end: two }; + } else { + throw new Error( + 'Range#create called with invalid arguments[' + .concat(one, ', ') + .concat(two, ', ') + .concat(three, ', ') + .concat(four, ']') + ); + } + } + Range2.create = create; + function is2(value) { + let candidate = value; + return ( + Is2.objectLiteral(candidate) && + Position.is(candidate.start) && + Position.is(candidate.end) + ); + } + Range2.is = is2; + })((Range = exports2.Range || (exports2.Range = {}))); + let Location; + (function (Location2) { + function create(uri, range) { + return { uri, range }; + } + Location2.create = create; + function is2(value) { + let candidate = value; + return ( + Is2.defined(candidate) && + Range.is(candidate.range) && + (Is2.string(candidate.uri) || Is2.undefined(candidate.uri)) + ); + } + Location2.is = is2; + })((Location = exports2.Location || (exports2.Location = {}))); + let LocationLink; + (function (LocationLink2) { + function create( + targetUri, + targetRange, + targetSelectionRange, + originSelectionRange + ) { + return { + targetUri, + targetRange, + targetSelectionRange, + originSelectionRange, + }; + } + LocationLink2.create = create; + function is2(value) { + let candidate = value; + return ( + Is2.defined(candidate) && + Range.is(candidate.targetRange) && + Is2.string(candidate.targetUri) && + Range.is(candidate.targetSelectionRange) && + (Range.is(candidate.originSelectionRange) || + Is2.undefined(candidate.originSelectionRange)) + ); + } + LocationLink2.is = is2; + })( + (LocationLink = exports2.LocationLink || (exports2.LocationLink = {})) + ); + let Color; + (function (Color2) { + function create(red, green, blue, alpha) { + return { + red, + green, + blue, + alpha, + }; + } + Color2.create = create; + function is2(value) { + let candidate = value; + return ( + Is2.objectLiteral(candidate) && + Is2.numberRange(candidate.red, 0, 1) && + Is2.numberRange(candidate.green, 0, 1) && + Is2.numberRange(candidate.blue, 0, 1) && + Is2.numberRange(candidate.alpha, 0, 1) + ); + } + Color2.is = is2; + })((Color = exports2.Color || (exports2.Color = {}))); + let ColorInformation; + (function (ColorInformation2) { + function create(range, color) { + return { + range, + color, + }; + } + ColorInformation2.create = create; + function is2(value) { + let candidate = value; + return ( + Is2.objectLiteral(candidate) && + Range.is(candidate.range) && + Color.is(candidate.color) + ); + } + ColorInformation2.is = is2; + })( + (ColorInformation = + exports2.ColorInformation || (exports2.ColorInformation = {})) + ); + let ColorPresentation; + (function (ColorPresentation2) { + function create(label, textEdit, additionalTextEdits) { + return { + label, + textEdit, + additionalTextEdits, + }; + } + ColorPresentation2.create = create; + function is2(value) { + let candidate = value; + return ( + Is2.objectLiteral(candidate) && + Is2.string(candidate.label) && + (Is2.undefined(candidate.textEdit) || TextEdit.is(candidate)) && + (Is2.undefined(candidate.additionalTextEdits) || + Is2.typedArray(candidate.additionalTextEdits, TextEdit.is)) + ); + } + ColorPresentation2.is = is2; + })( + (ColorPresentation = + exports2.ColorPresentation || (exports2.ColorPresentation = {})) + ); + let FoldingRangeKind; + (function (FoldingRangeKind2) { + FoldingRangeKind2['Comment'] = 'comment'; + FoldingRangeKind2['Imports'] = 'imports'; + FoldingRangeKind2['Region'] = 'region'; + })( + (FoldingRangeKind = + exports2.FoldingRangeKind || (exports2.FoldingRangeKind = {})) + ); + let FoldingRange; + (function (FoldingRange2) { + function create( + startLine, + endLine, + startCharacter, + endCharacter, + kind + ) { + let result = { + startLine, + endLine, + }; + if (Is2.defined(startCharacter)) { + result.startCharacter = startCharacter; + } + if (Is2.defined(endCharacter)) { + result.endCharacter = endCharacter; + } + if (Is2.defined(kind)) { + result.kind = kind; + } + return result; + } + FoldingRange2.create = create; + function is2(value) { + let candidate = value; + return ( + Is2.objectLiteral(candidate) && + Is2.uinteger(candidate.startLine) && + Is2.uinteger(candidate.startLine) && + (Is2.undefined(candidate.startCharacter) || + Is2.uinteger(candidate.startCharacter)) && + (Is2.undefined(candidate.endCharacter) || + Is2.uinteger(candidate.endCharacter)) && + (Is2.undefined(candidate.kind) || Is2.string(candidate.kind)) + ); + } + FoldingRange2.is = is2; + })( + (FoldingRange = exports2.FoldingRange || (exports2.FoldingRange = {})) + ); + let DiagnosticRelatedInformation; + (function (DiagnosticRelatedInformation2) { + function create(location2, message) { + return { + location: location2, + message, + }; + } + DiagnosticRelatedInformation2.create = create; + function is2(value) { + let candidate = value; + return ( + Is2.defined(candidate) && + Location.is(candidate.location) && + Is2.string(candidate.message) + ); + } + DiagnosticRelatedInformation2.is = is2; + })( + (DiagnosticRelatedInformation = + exports2.DiagnosticRelatedInformation || + (exports2.DiagnosticRelatedInformation = {})) + ); + let DiagnosticSeverity; + (function (DiagnosticSeverity2) { + DiagnosticSeverity2.Error = 1; + DiagnosticSeverity2.Warning = 2; + DiagnosticSeverity2.Information = 3; + DiagnosticSeverity2.Hint = 4; + })( + (DiagnosticSeverity = + exports2.DiagnosticSeverity || (exports2.DiagnosticSeverity = {})) + ); + let DiagnosticTag; + (function (DiagnosticTag2) { + DiagnosticTag2.Unnecessary = 1; + DiagnosticTag2.Deprecated = 2; + })( + (DiagnosticTag = + exports2.DiagnosticTag || (exports2.DiagnosticTag = {})) + ); + let CodeDescription; + (function (CodeDescription2) { + function is2(value) { + let candidate = value; + return Is2.objectLiteral(candidate) && Is2.string(candidate.href); + } + CodeDescription2.is = is2; + })( + (CodeDescription = + exports2.CodeDescription || (exports2.CodeDescription = {})) + ); + let Diagnostic; + (function (Diagnostic2) { + function create( + range, + message, + severity, + code, + source, + relatedInformation + ) { + let result = { range, message }; + if (Is2.defined(severity)) { + result.severity = severity; + } + if (Is2.defined(code)) { + result.code = code; + } + if (Is2.defined(source)) { + result.source = source; + } + if (Is2.defined(relatedInformation)) { + result.relatedInformation = relatedInformation; + } + return result; + } + Diagnostic2.create = create; + function is2(value) { + let _a2; + let candidate = value; + return ( + Is2.defined(candidate) && + Range.is(candidate.range) && + Is2.string(candidate.message) && + (Is2.number(candidate.severity) || + Is2.undefined(candidate.severity)) && + (Is2.integer(candidate.code) || + Is2.string(candidate.code) || + Is2.undefined(candidate.code)) && + (Is2.undefined(candidate.codeDescription) || + Is2.string( + (_a2 = candidate.codeDescription) === null || _a2 === void 0 + ? void 0 + : _a2.href + )) && + (Is2.string(candidate.source) || Is2.undefined(candidate.source)) && + (Is2.undefined(candidate.relatedInformation) || + Is2.typedArray( + candidate.relatedInformation, + DiagnosticRelatedInformation.is + )) + ); + } + Diagnostic2.is = is2; + })((Diagnostic = exports2.Diagnostic || (exports2.Diagnostic = {}))); + let Command; + (function (Command2) { + function create(title, command) { + let args = []; + for (let _i2 = 2; _i2 < arguments.length; _i2++) { + args[_i2 - 2] = arguments[_i2]; + } + let result = { title, command }; + if (Is2.defined(args) && args.length > 0) { + result.arguments = args; + } + return result; + } + Command2.create = create; + function is2(value) { + let candidate = value; + return ( + Is2.defined(candidate) && + Is2.string(candidate.title) && + Is2.string(candidate.command) + ); + } + Command2.is = is2; + })((Command = exports2.Command || (exports2.Command = {}))); + let TextEdit; + (function (TextEdit2) { + function replace(range, newText) { + return { range, newText }; + } + TextEdit2.replace = replace; + function insert(position, newText) { + return { range: { start: position, end: position }, newText }; + } + TextEdit2.insert = insert; + function del(range) { + return { range, newText: '' }; + } + TextEdit2.del = del; + function is2(value) { + let candidate = value; + return ( + Is2.objectLiteral(candidate) && + Is2.string(candidate.newText) && + Range.is(candidate.range) + ); + } + TextEdit2.is = is2; + })((TextEdit = exports2.TextEdit || (exports2.TextEdit = {}))); + let ChangeAnnotation; + (function (ChangeAnnotation2) { + function create(label, needsConfirmation, description) { + let result = { label }; + if (needsConfirmation !== void 0) { + result.needsConfirmation = needsConfirmation; + } + if (description !== void 0) { + result.description = description; + } + return result; + } + ChangeAnnotation2.create = create; + function is2(value) { + let candidate = value; + return ( + Is2.objectLiteral(candidate) && + Is2.string(candidate.label) && + (Is2.boolean(candidate.needsConfirmation) || + candidate.needsConfirmation === void 0) && + (Is2.string(candidate.description) || + candidate.description === void 0) + ); + } + ChangeAnnotation2.is = is2; + })( + (ChangeAnnotation = + exports2.ChangeAnnotation || (exports2.ChangeAnnotation = {})) + ); + let ChangeAnnotationIdentifier; + (function (ChangeAnnotationIdentifier2) { + function is2(value) { + let candidate = value; + return Is2.string(candidate); + } + ChangeAnnotationIdentifier2.is = is2; + })( + (ChangeAnnotationIdentifier = + exports2.ChangeAnnotationIdentifier || + (exports2.ChangeAnnotationIdentifier = {})) + ); + let AnnotatedTextEdit; + (function (AnnotatedTextEdit2) { + function replace(range, newText, annotation) { + return { range, newText, annotationId: annotation }; + } + AnnotatedTextEdit2.replace = replace; + function insert(position, newText, annotation) { + return { + range: { start: position, end: position }, + newText, + annotationId: annotation, + }; + } + AnnotatedTextEdit2.insert = insert; + function del(range, annotation) { + return { range, newText: '', annotationId: annotation }; + } + AnnotatedTextEdit2.del = del; + function is2(value) { + let candidate = value; + return ( + TextEdit.is(candidate) && + (ChangeAnnotation.is(candidate.annotationId) || + ChangeAnnotationIdentifier.is(candidate.annotationId)) + ); + } + AnnotatedTextEdit2.is = is2; + })( + (AnnotatedTextEdit = + exports2.AnnotatedTextEdit || (exports2.AnnotatedTextEdit = {})) + ); + let TextDocumentEdit; + (function (TextDocumentEdit2) { + function create(textDocument, edits) { + return { textDocument, edits }; + } + TextDocumentEdit2.create = create; + function is2(value) { + let candidate = value; + return ( + Is2.defined(candidate) && + OptionalVersionedTextDocumentIdentifier.is( + candidate.textDocument + ) && + Array.isArray(candidate.edits) + ); + } + TextDocumentEdit2.is = is2; + })( + (TextDocumentEdit = + exports2.TextDocumentEdit || (exports2.TextDocumentEdit = {})) + ); + let CreateFile; + (function (CreateFile2) { + function create(uri, options, annotation) { + let result = { + kind: 'create', + uri, + }; + if ( + options !== void 0 && + (options.overwrite !== void 0 || options.ignoreIfExists !== void 0) + ) { + result.options = options; + } + if (annotation !== void 0) { + result.annotationId = annotation; + } + return result; + } + CreateFile2.create = create; + function is2(value) { + let candidate = value; + return ( + candidate && + candidate.kind === 'create' && + Is2.string(candidate.uri) && + (candidate.options === void 0 || + ((candidate.options.overwrite === void 0 || + Is2.boolean(candidate.options.overwrite)) && + (candidate.options.ignoreIfExists === void 0 || + Is2.boolean(candidate.options.ignoreIfExists)))) && + (candidate.annotationId === void 0 || + ChangeAnnotationIdentifier.is(candidate.annotationId)) + ); + } + CreateFile2.is = is2; + })((CreateFile = exports2.CreateFile || (exports2.CreateFile = {}))); + let RenameFile; + (function (RenameFile2) { + function create(oldUri, newUri, options, annotation) { + let result = { + kind: 'rename', + oldUri, + newUri, + }; + if ( + options !== void 0 && + (options.overwrite !== void 0 || options.ignoreIfExists !== void 0) + ) { + result.options = options; + } + if (annotation !== void 0) { + result.annotationId = annotation; + } + return result; + } + RenameFile2.create = create; + function is2(value) { + let candidate = value; + return ( + candidate && + candidate.kind === 'rename' && + Is2.string(candidate.oldUri) && + Is2.string(candidate.newUri) && + (candidate.options === void 0 || + ((candidate.options.overwrite === void 0 || + Is2.boolean(candidate.options.overwrite)) && + (candidate.options.ignoreIfExists === void 0 || + Is2.boolean(candidate.options.ignoreIfExists)))) && + (candidate.annotationId === void 0 || + ChangeAnnotationIdentifier.is(candidate.annotationId)) + ); + } + RenameFile2.is = is2; + })((RenameFile = exports2.RenameFile || (exports2.RenameFile = {}))); + let DeleteFile; + (function (DeleteFile2) { + function create(uri, options, annotation) { + let result = { + kind: 'delete', + uri, + }; + if ( + options !== void 0 && + (options.recursive !== void 0 || + options.ignoreIfNotExists !== void 0) + ) { + result.options = options; + } + if (annotation !== void 0) { + result.annotationId = annotation; + } + return result; + } + DeleteFile2.create = create; + function is2(value) { + let candidate = value; + return ( + candidate && + candidate.kind === 'delete' && + Is2.string(candidate.uri) && + (candidate.options === void 0 || + ((candidate.options.recursive === void 0 || + Is2.boolean(candidate.options.recursive)) && + (candidate.options.ignoreIfNotExists === void 0 || + Is2.boolean(candidate.options.ignoreIfNotExists)))) && + (candidate.annotationId === void 0 || + ChangeAnnotationIdentifier.is(candidate.annotationId)) + ); + } + DeleteFile2.is = is2; + })((DeleteFile = exports2.DeleteFile || (exports2.DeleteFile = {}))); + let WorkspaceEdit; + (function (WorkspaceEdit2) { + function is2(value) { + let candidate = value; + return ( + candidate && + (candidate.changes !== void 0 || + candidate.documentChanges !== void 0) && + (candidate.documentChanges === void 0 || + candidate.documentChanges.every(function (change) { + if (Is2.string(change.kind)) { + return ( + CreateFile.is(change) || + RenameFile.is(change) || + DeleteFile.is(change) + ); + } else { + return TextDocumentEdit.is(change); + } + })) + ); + } + WorkspaceEdit2.is = is2; + })( + (WorkspaceEdit = + exports2.WorkspaceEdit || (exports2.WorkspaceEdit = {})) + ); + let TextEditChangeImpl = (function () { + function TextEditChangeImpl2(edits, changeAnnotations) { + this.edits = edits; + this.changeAnnotations = changeAnnotations; + } + TextEditChangeImpl2.prototype.insert = function ( + position, + newText, + annotation + ) { + let edit; + let id; + if (annotation === void 0) { + edit = TextEdit.insert(position, newText); + } else if (ChangeAnnotationIdentifier.is(annotation)) { + id = annotation; + edit = AnnotatedTextEdit.insert(position, newText, annotation); + } else { + this.assertChangeAnnotations(this.changeAnnotations); + id = this.changeAnnotations.manage(annotation); + edit = AnnotatedTextEdit.insert(position, newText, id); + } + this.edits.push(edit); + if (id !== void 0) { + return id; + } + }; + TextEditChangeImpl2.prototype.replace = function ( + range, + newText, + annotation + ) { + let edit; + let id; + if (annotation === void 0) { + edit = TextEdit.replace(range, newText); + } else if (ChangeAnnotationIdentifier.is(annotation)) { + id = annotation; + edit = AnnotatedTextEdit.replace(range, newText, annotation); + } else { + this.assertChangeAnnotations(this.changeAnnotations); + id = this.changeAnnotations.manage(annotation); + edit = AnnotatedTextEdit.replace(range, newText, id); + } + this.edits.push(edit); + if (id !== void 0) { + return id; + } + }; + TextEditChangeImpl2.prototype.delete = function (range, annotation) { + let edit; + let id; + if (annotation === void 0) { + edit = TextEdit.del(range); + } else if (ChangeAnnotationIdentifier.is(annotation)) { + id = annotation; + edit = AnnotatedTextEdit.del(range, annotation); + } else { + this.assertChangeAnnotations(this.changeAnnotations); + id = this.changeAnnotations.manage(annotation); + edit = AnnotatedTextEdit.del(range, id); + } + this.edits.push(edit); + if (id !== void 0) { + return id; + } + }; + TextEditChangeImpl2.prototype.add = function (edit) { + this.edits.push(edit); + }; + TextEditChangeImpl2.prototype.all = function () { + return this.edits; + }; + TextEditChangeImpl2.prototype.clear = function () { + this.edits.splice(0, this.edits.length); + }; + TextEditChangeImpl2.prototype.assertChangeAnnotations = function ( + value + ) { + if (value === void 0) { + throw new Error( + 'Text edit change is not configured to manage change annotations.' + ); + } + }; + return TextEditChangeImpl2; + })(); + let ChangeAnnotations = (function () { + function ChangeAnnotations2(annotations) { + this._annotations = + annotations === void 0 ? Object.create(null) : annotations; + this._counter = 0; + this._size = 0; + } + ChangeAnnotations2.prototype.all = function () { + return this._annotations; + }; + Object.defineProperty(ChangeAnnotations2.prototype, 'size', { + get: function () { + return this._size; + }, + enumerable: false, + configurable: true, + }); + ChangeAnnotations2.prototype.manage = function ( + idOrAnnotation, + annotation + ) { + let id; + if (ChangeAnnotationIdentifier.is(idOrAnnotation)) { + id = idOrAnnotation; + } else { + id = this.nextId(); + annotation = idOrAnnotation; + } + if (this._annotations[id] !== void 0) { + throw new Error('Id '.concat(id, ' is already in use.')); + } + if (annotation === void 0) { + throw new Error('No annotation provided for id '.concat(id)); + } + this._annotations[id] = annotation; + this._size++; + return id; + }; + ChangeAnnotations2.prototype.nextId = function () { + this._counter++; + return this._counter.toString(); + }; + return ChangeAnnotations2; + })(); + let WorkspaceChange = (function () { + function WorkspaceChange2(workspaceEdit) { + let _this = this; + this._textEditChanges = Object.create(null); + if (workspaceEdit !== void 0) { + this._workspaceEdit = workspaceEdit; + if (workspaceEdit.documentChanges) { + this._changeAnnotations = new ChangeAnnotations( + workspaceEdit.changeAnnotations + ); + workspaceEdit.changeAnnotations = this._changeAnnotations.all(); + workspaceEdit.documentChanges.forEach(function (change) { + if (TextDocumentEdit.is(change)) { + let textEditChange = new TextEditChangeImpl( + change.edits, + _this._changeAnnotations + ); + _this._textEditChanges[ + change.textDocument.uri + ] = textEditChange; + } + }); + } else if (workspaceEdit.changes) { + Object.keys(workspaceEdit.changes).forEach(function (key) { + let textEditChange = new TextEditChangeImpl( + workspaceEdit.changes[key] + ); + _this._textEditChanges[key] = textEditChange; + }); + } + } else { + this._workspaceEdit = {}; + } + } + Object.defineProperty(WorkspaceChange2.prototype, 'edit', { + get: function () { + this.initDocumentChanges(); + if (this._changeAnnotations !== void 0) { + if (this._changeAnnotations.size === 0) { + this._workspaceEdit.changeAnnotations = void 0; + } else { + this._workspaceEdit.changeAnnotations = this._changeAnnotations.all(); + } + } + return this._workspaceEdit; + }, + enumerable: false, + configurable: true, + }); + WorkspaceChange2.prototype.getTextEditChange = function (key) { + if (OptionalVersionedTextDocumentIdentifier.is(key)) { + this.initDocumentChanges(); + if (this._workspaceEdit.documentChanges === void 0) { + throw new Error( + 'Workspace edit is not configured for document changes.' + ); + } + let textDocument = { uri: key.uri, version: key.version }; + var result = this._textEditChanges[textDocument.uri]; + if (!result) { + var edits = []; + let textDocumentEdit = { + textDocument, + edits, + }; + this._workspaceEdit.documentChanges.push(textDocumentEdit); + result = new TextEditChangeImpl(edits, this._changeAnnotations); + this._textEditChanges[textDocument.uri] = result; + } + return result; + } else { + this.initChanges(); + if (this._workspaceEdit.changes === void 0) { + throw new Error( + 'Workspace edit is not configured for normal text edit changes.' + ); + } + var result = this._textEditChanges[key]; + if (!result) { + var edits = []; + this._workspaceEdit.changes[key] = edits; + result = new TextEditChangeImpl(edits); + this._textEditChanges[key] = result; + } + return result; + } + }; + WorkspaceChange2.prototype.initDocumentChanges = function () { + if ( + this._workspaceEdit.documentChanges === void 0 && + this._workspaceEdit.changes === void 0 + ) { + this._changeAnnotations = new ChangeAnnotations(); + this._workspaceEdit.documentChanges = []; + this._workspaceEdit.changeAnnotations = this._changeAnnotations.all(); + } + }; + WorkspaceChange2.prototype.initChanges = function () { + if ( + this._workspaceEdit.documentChanges === void 0 && + this._workspaceEdit.changes === void 0 + ) { + this._workspaceEdit.changes = Object.create(null); + } + }; + WorkspaceChange2.prototype.createFile = function ( + uri, + optionsOrAnnotation, + options + ) { + this.initDocumentChanges(); + if (this._workspaceEdit.documentChanges === void 0) { + throw new Error( + 'Workspace edit is not configured for document changes.' + ); + } + let annotation; + if ( + ChangeAnnotation.is(optionsOrAnnotation) || + ChangeAnnotationIdentifier.is(optionsOrAnnotation) + ) { + annotation = optionsOrAnnotation; + } else { + options = optionsOrAnnotation; + } + let operation; + let id; + if (annotation === void 0) { + operation = CreateFile.create(uri, options); + } else { + id = ChangeAnnotationIdentifier.is(annotation) + ? annotation + : this._changeAnnotations.manage(annotation); + operation = CreateFile.create(uri, options, id); + } + this._workspaceEdit.documentChanges.push(operation); + if (id !== void 0) { + return id; + } + }; + WorkspaceChange2.prototype.renameFile = function ( + oldUri, + newUri, + optionsOrAnnotation, + options + ) { + this.initDocumentChanges(); + if (this._workspaceEdit.documentChanges === void 0) { + throw new Error( + 'Workspace edit is not configured for document changes.' + ); + } + let annotation; + if ( + ChangeAnnotation.is(optionsOrAnnotation) || + ChangeAnnotationIdentifier.is(optionsOrAnnotation) + ) { + annotation = optionsOrAnnotation; + } else { + options = optionsOrAnnotation; + } + let operation; + let id; + if (annotation === void 0) { + operation = RenameFile.create(oldUri, newUri, options); + } else { + id = ChangeAnnotationIdentifier.is(annotation) + ? annotation + : this._changeAnnotations.manage(annotation); + operation = RenameFile.create(oldUri, newUri, options, id); + } + this._workspaceEdit.documentChanges.push(operation); + if (id !== void 0) { + return id; + } + }; + WorkspaceChange2.prototype.deleteFile = function ( + uri, + optionsOrAnnotation, + options + ) { + this.initDocumentChanges(); + if (this._workspaceEdit.documentChanges === void 0) { + throw new Error( + 'Workspace edit is not configured for document changes.' + ); + } + let annotation; + if ( + ChangeAnnotation.is(optionsOrAnnotation) || + ChangeAnnotationIdentifier.is(optionsOrAnnotation) + ) { + annotation = optionsOrAnnotation; + } else { + options = optionsOrAnnotation; + } + let operation; + let id; + if (annotation === void 0) { + operation = DeleteFile.create(uri, options); + } else { + id = ChangeAnnotationIdentifier.is(annotation) + ? annotation + : this._changeAnnotations.manage(annotation); + operation = DeleteFile.create(uri, options, id); + } + this._workspaceEdit.documentChanges.push(operation); + if (id !== void 0) { + return id; + } + }; + return WorkspaceChange2; + })(); + exports2.WorkspaceChange = WorkspaceChange; + let TextDocumentIdentifier; + (function (TextDocumentIdentifier2) { + function create(uri) { + return { uri }; + } + TextDocumentIdentifier2.create = create; + function is2(value) { + let candidate = value; + return Is2.defined(candidate) && Is2.string(candidate.uri); + } + TextDocumentIdentifier2.is = is2; + })( + (TextDocumentIdentifier = + exports2.TextDocumentIdentifier || + (exports2.TextDocumentIdentifier = {})) + ); + let VersionedTextDocumentIdentifier; + (function (VersionedTextDocumentIdentifier2) { + function create(uri, version) { + return { uri, version }; + } + VersionedTextDocumentIdentifier2.create = create; + function is2(value) { + let candidate = value; + return ( + Is2.defined(candidate) && + Is2.string(candidate.uri) && + Is2.integer(candidate.version) + ); + } + VersionedTextDocumentIdentifier2.is = is2; + })( + (VersionedTextDocumentIdentifier = + exports2.VersionedTextDocumentIdentifier || + (exports2.VersionedTextDocumentIdentifier = {})) + ); + let OptionalVersionedTextDocumentIdentifier; + (function (OptionalVersionedTextDocumentIdentifier2) { + function create(uri, version) { + return { uri, version }; + } + OptionalVersionedTextDocumentIdentifier2.create = create; + function is2(value) { + let candidate = value; + return ( + Is2.defined(candidate) && + Is2.string(candidate.uri) && + (candidate.version === null || Is2.integer(candidate.version)) + ); + } + OptionalVersionedTextDocumentIdentifier2.is = is2; + })( + (OptionalVersionedTextDocumentIdentifier = + exports2.OptionalVersionedTextDocumentIdentifier || + (exports2.OptionalVersionedTextDocumentIdentifier = {})) + ); + let TextDocumentItem; + (function (TextDocumentItem2) { + function create(uri, languageId, version, text) { + return { uri, languageId, version, text }; + } + TextDocumentItem2.create = create; + function is2(value) { + let candidate = value; + return ( + Is2.defined(candidate) && + Is2.string(candidate.uri) && + Is2.string(candidate.languageId) && + Is2.integer(candidate.version) && + Is2.string(candidate.text) + ); + } + TextDocumentItem2.is = is2; + })( + (TextDocumentItem = + exports2.TextDocumentItem || (exports2.TextDocumentItem = {})) + ); + let MarkupKind; + (function (MarkupKind2) { + MarkupKind2.PlainText = 'plaintext'; + MarkupKind2.Markdown = 'markdown'; + })((MarkupKind = exports2.MarkupKind || (exports2.MarkupKind = {}))); + (function (MarkupKind2) { + function is2(value) { + let candidate = value; + return ( + candidate === MarkupKind2.PlainText || + candidate === MarkupKind2.Markdown + ); + } + MarkupKind2.is = is2; + })((MarkupKind = exports2.MarkupKind || (exports2.MarkupKind = {}))); + let MarkupContent; + (function (MarkupContent2) { + function is2(value) { + let candidate = value; + return ( + Is2.objectLiteral(value) && + MarkupKind.is(candidate.kind) && + Is2.string(candidate.value) + ); + } + MarkupContent2.is = is2; + })( + (MarkupContent = + exports2.MarkupContent || (exports2.MarkupContent = {})) + ); + let CompletionItemKind; + (function (CompletionItemKind2) { + CompletionItemKind2.Text = 1; + CompletionItemKind2.Method = 2; + CompletionItemKind2.Function = 3; + CompletionItemKind2.Constructor = 4; + CompletionItemKind2.Field = 5; + CompletionItemKind2.Variable = 6; + CompletionItemKind2.Class = 7; + CompletionItemKind2.Interface = 8; + CompletionItemKind2.Module = 9; + CompletionItemKind2.Property = 10; + CompletionItemKind2.Unit = 11; + CompletionItemKind2.Value = 12; + CompletionItemKind2.Enum = 13; + CompletionItemKind2.Keyword = 14; + CompletionItemKind2.Snippet = 15; + CompletionItemKind2.Color = 16; + CompletionItemKind2.File = 17; + CompletionItemKind2.Reference = 18; + CompletionItemKind2.Folder = 19; + CompletionItemKind2.EnumMember = 20; + CompletionItemKind2.Constant = 21; + CompletionItemKind2.Struct = 22; + CompletionItemKind2.Event = 23; + CompletionItemKind2.Operator = 24; + CompletionItemKind2.TypeParameter = 25; + })( + (CompletionItemKind = + exports2.CompletionItemKind || (exports2.CompletionItemKind = {})) + ); + let InsertTextFormat; + (function (InsertTextFormat2) { + InsertTextFormat2.PlainText = 1; + InsertTextFormat2.Snippet = 2; + })( + (InsertTextFormat = + exports2.InsertTextFormat || (exports2.InsertTextFormat = {})) + ); + let CompletionItemTag; + (function (CompletionItemTag2) { + CompletionItemTag2.Deprecated = 1; + })( + (CompletionItemTag = + exports2.CompletionItemTag || (exports2.CompletionItemTag = {})) + ); + let InsertReplaceEdit; + (function (InsertReplaceEdit2) { + function create(newText, insert, replace) { + return { newText, insert, replace }; + } + InsertReplaceEdit2.create = create; + function is2(value) { + let candidate = value; + return ( + candidate && + Is2.string(candidate.newText) && + Range.is(candidate.insert) && + Range.is(candidate.replace) + ); + } + InsertReplaceEdit2.is = is2; + })( + (InsertReplaceEdit = + exports2.InsertReplaceEdit || (exports2.InsertReplaceEdit = {})) + ); + let InsertTextMode; + (function (InsertTextMode2) { + InsertTextMode2.asIs = 1; + InsertTextMode2.adjustIndentation = 2; + })( + (InsertTextMode = + exports2.InsertTextMode || (exports2.InsertTextMode = {})) + ); + let CompletionItemLabelDetails; + (function (CompletionItemLabelDetails2) { + function is2(value) { + let candidate = value; + return ( + candidate && + (Is2.string(candidate.detail) || candidate.detail === void 0) && + (Is2.string(candidate.description) || + candidate.description === void 0) + ); + } + CompletionItemLabelDetails2.is = is2; + })( + (CompletionItemLabelDetails = + exports2.CompletionItemLabelDetails || + (exports2.CompletionItemLabelDetails = {})) + ); + let CompletionItem; + (function (CompletionItem2) { + function create(label) { + return { label }; + } + CompletionItem2.create = create; + })( + (CompletionItem = + exports2.CompletionItem || (exports2.CompletionItem = {})) + ); + let CompletionList; + (function (CompletionList2) { + function create(items, isIncomplete) { + return { items: items ? items : [], isIncomplete: !!isIncomplete }; + } + CompletionList2.create = create; + })( + (CompletionList = + exports2.CompletionList || (exports2.CompletionList = {})) + ); + let MarkedString; + (function (MarkedString2) { + function fromPlainText(plainText) { + return plainText.replace(/[\\`*_{}[\]()#+\-.!]/g, '\\$&'); + } + MarkedString2.fromPlainText = fromPlainText; + function is2(value) { + let candidate = value; + return ( + Is2.string(candidate) || + (Is2.objectLiteral(candidate) && + Is2.string(candidate.language) && + Is2.string(candidate.value)) + ); + } + MarkedString2.is = is2; + })( + (MarkedString = exports2.MarkedString || (exports2.MarkedString = {})) + ); + let Hover; + (function (Hover2) { + function is2(value) { + let candidate = value; + return ( + !!candidate && + Is2.objectLiteral(candidate) && + (MarkupContent.is(candidate.contents) || + MarkedString.is(candidate.contents) || + Is2.typedArray(candidate.contents, MarkedString.is)) && + (value.range === void 0 || Range.is(value.range)) + ); + } + Hover2.is = is2; + })((Hover = exports2.Hover || (exports2.Hover = {}))); + let ParameterInformation; + (function (ParameterInformation2) { + function create(label, documentation) { + return documentation ? { label, documentation } : { label }; + } + ParameterInformation2.create = create; + })( + (ParameterInformation = + exports2.ParameterInformation || (exports2.ParameterInformation = {})) + ); + let SignatureInformation; + (function (SignatureInformation2) { + function create(label, documentation) { + let parameters = []; + for (let _i2 = 2; _i2 < arguments.length; _i2++) { + parameters[_i2 - 2] = arguments[_i2]; + } + let result = { label }; + if (Is2.defined(documentation)) { + result.documentation = documentation; + } + if (Is2.defined(parameters)) { + result.parameters = parameters; + } else { + result.parameters = []; + } + return result; + } + SignatureInformation2.create = create; + })( + (SignatureInformation = + exports2.SignatureInformation || (exports2.SignatureInformation = {})) + ); + let DocumentHighlightKind; + (function (DocumentHighlightKind2) { + DocumentHighlightKind2.Text = 1; + DocumentHighlightKind2.Read = 2; + DocumentHighlightKind2.Write = 3; + })( + (DocumentHighlightKind = + exports2.DocumentHighlightKind || + (exports2.DocumentHighlightKind = {})) + ); + let DocumentHighlight; + (function (DocumentHighlight2) { + function create(range, kind) { + let result = { range }; + if (Is2.number(kind)) { + result.kind = kind; + } + return result; + } + DocumentHighlight2.create = create; + })( + (DocumentHighlight = + exports2.DocumentHighlight || (exports2.DocumentHighlight = {})) + ); + let SymbolKind; + (function (SymbolKind2) { + SymbolKind2.File = 1; + SymbolKind2.Module = 2; + SymbolKind2.Namespace = 3; + SymbolKind2.Package = 4; + SymbolKind2.Class = 5; + SymbolKind2.Method = 6; + SymbolKind2.Property = 7; + SymbolKind2.Field = 8; + SymbolKind2.Constructor = 9; + SymbolKind2.Enum = 10; + SymbolKind2.Interface = 11; + SymbolKind2.Function = 12; + SymbolKind2.Variable = 13; + SymbolKind2.Constant = 14; + SymbolKind2.String = 15; + SymbolKind2.Number = 16; + SymbolKind2.Boolean = 17; + SymbolKind2.Array = 18; + SymbolKind2.Object = 19; + SymbolKind2.Key = 20; + SymbolKind2.Null = 21; + SymbolKind2.EnumMember = 22; + SymbolKind2.Struct = 23; + SymbolKind2.Event = 24; + SymbolKind2.Operator = 25; + SymbolKind2.TypeParameter = 26; + })((SymbolKind = exports2.SymbolKind || (exports2.SymbolKind = {}))); + let SymbolTag; + (function (SymbolTag2) { + SymbolTag2.Deprecated = 1; + })((SymbolTag = exports2.SymbolTag || (exports2.SymbolTag = {}))); + let SymbolInformation; + (function (SymbolInformation2) { + function create(name, kind, range, uri, containerName) { + let result = { + name, + kind, + location: { uri, range }, + }; + if (containerName) { + result.containerName = containerName; + } + return result; + } + SymbolInformation2.create = create; + })( + (SymbolInformation = + exports2.SymbolInformation || (exports2.SymbolInformation = {})) + ); + let WorkspaceSymbol; + (function (WorkspaceSymbol2) { + function create(name, kind, uri, range) { + return range !== void 0 + ? { name, kind, location: { uri, range } } + : { name, kind, location: { uri } }; + } + WorkspaceSymbol2.create = create; + })( + (WorkspaceSymbol = + exports2.WorkspaceSymbol || (exports2.WorkspaceSymbol = {})) + ); + let DocumentSymbol; + (function (DocumentSymbol2) { + function create(name, detail, kind, range, selectionRange, children) { + let result = { + name, + detail, + kind, + range, + selectionRange, + }; + if (children !== void 0) { + result.children = children; + } + return result; + } + DocumentSymbol2.create = create; + function is2(value) { + let candidate = value; + return ( + candidate && + Is2.string(candidate.name) && + Is2.number(candidate.kind) && + Range.is(candidate.range) && + Range.is(candidate.selectionRange) && + (candidate.detail === void 0 || Is2.string(candidate.detail)) && + (candidate.deprecated === void 0 || + Is2.boolean(candidate.deprecated)) && + (candidate.children === void 0 || + Array.isArray(candidate.children)) && + (candidate.tags === void 0 || Array.isArray(candidate.tags)) + ); + } + DocumentSymbol2.is = is2; + })( + (DocumentSymbol = + exports2.DocumentSymbol || (exports2.DocumentSymbol = {})) + ); + let CodeActionKind; + (function (CodeActionKind2) { + CodeActionKind2.Empty = ''; + CodeActionKind2.QuickFix = 'quickfix'; + CodeActionKind2.Refactor = 'refactor'; + CodeActionKind2.RefactorExtract = 'refactor.extract'; + CodeActionKind2.RefactorInline = 'refactor.inline'; + CodeActionKind2.RefactorRewrite = 'refactor.rewrite'; + CodeActionKind2.Source = 'source'; + CodeActionKind2.SourceOrganizeImports = 'source.organizeImports'; + CodeActionKind2.SourceFixAll = 'source.fixAll'; + })( + (CodeActionKind = + exports2.CodeActionKind || (exports2.CodeActionKind = {})) + ); + let CodeActionTriggerKind; + (function (CodeActionTriggerKind2) { + CodeActionTriggerKind2.Invoked = 1; + CodeActionTriggerKind2.Automatic = 2; + })( + (CodeActionTriggerKind = + exports2.CodeActionTriggerKind || + (exports2.CodeActionTriggerKind = {})) + ); + let CodeActionContext; + (function (CodeActionContext2) { + function create(diagnostics, only, triggerKind) { + let result = { diagnostics }; + if (only !== void 0 && only !== null) { + result.only = only; + } + if (triggerKind !== void 0 && triggerKind !== null) { + result.triggerKind = triggerKind; + } + return result; + } + CodeActionContext2.create = create; + function is2(value) { + let candidate = value; + return ( + Is2.defined(candidate) && + Is2.typedArray(candidate.diagnostics, Diagnostic.is) && + (candidate.only === void 0 || + Is2.typedArray(candidate.only, Is2.string)) && + (candidate.triggerKind === void 0 || + candidate.triggerKind === CodeActionTriggerKind.Invoked || + candidate.triggerKind === CodeActionTriggerKind.Automatic) + ); + } + CodeActionContext2.is = is2; + })( + (CodeActionContext = + exports2.CodeActionContext || (exports2.CodeActionContext = {})) + ); + let CodeAction; + (function (CodeAction2) { + function create(title, kindOrCommandOrEdit, kind) { + let result = { title }; + let checkKind = true; + if (typeof kindOrCommandOrEdit === 'string') { + checkKind = false; + result.kind = kindOrCommandOrEdit; + } else if (Command.is(kindOrCommandOrEdit)) { + result.command = kindOrCommandOrEdit; + } else { + result.edit = kindOrCommandOrEdit; + } + if (checkKind && kind !== void 0) { + result.kind = kind; + } + return result; + } + CodeAction2.create = create; + function is2(value) { + let candidate = value; + return ( + candidate && + Is2.string(candidate.title) && + (candidate.diagnostics === void 0 || + Is2.typedArray(candidate.diagnostics, Diagnostic.is)) && + (candidate.kind === void 0 || Is2.string(candidate.kind)) && + (candidate.edit !== void 0 || candidate.command !== void 0) && + (candidate.command === void 0 || Command.is(candidate.command)) && + (candidate.isPreferred === void 0 || + Is2.boolean(candidate.isPreferred)) && + (candidate.edit === void 0 || WorkspaceEdit.is(candidate.edit)) + ); + } + CodeAction2.is = is2; + })((CodeAction = exports2.CodeAction || (exports2.CodeAction = {}))); + let CodeLens; + (function (CodeLens2) { + function create(range, data) { + let result = { range }; + if (Is2.defined(data)) { + result.data = data; + } + return result; + } + CodeLens2.create = create; + function is2(value) { + let candidate = value; + return ( + Is2.defined(candidate) && + Range.is(candidate.range) && + (Is2.undefined(candidate.command) || Command.is(candidate.command)) + ); + } + CodeLens2.is = is2; + })((CodeLens = exports2.CodeLens || (exports2.CodeLens = {}))); + let FormattingOptions; + (function (FormattingOptions2) { + function create(tabSize, insertSpaces) { + return { tabSize, insertSpaces }; + } + FormattingOptions2.create = create; + function is2(value) { + let candidate = value; + return ( + Is2.defined(candidate) && + Is2.uinteger(candidate.tabSize) && + Is2.boolean(candidate.insertSpaces) + ); + } + FormattingOptions2.is = is2; + })( + (FormattingOptions = + exports2.FormattingOptions || (exports2.FormattingOptions = {})) + ); + let DocumentLink; + (function (DocumentLink2) { + function create(range, target, data) { + return { range, target, data }; + } + DocumentLink2.create = create; + function is2(value) { + let candidate = value; + return ( + Is2.defined(candidate) && + Range.is(candidate.range) && + (Is2.undefined(candidate.target) || Is2.string(candidate.target)) + ); + } + DocumentLink2.is = is2; + })( + (DocumentLink = exports2.DocumentLink || (exports2.DocumentLink = {})) + ); + let SelectionRange; + (function (SelectionRange2) { + function create(range, parent) { + return { range, parent }; + } + SelectionRange2.create = create; + function is2(value) { + let candidate = value; + return ( + Is2.objectLiteral(candidate) && + Range.is(candidate.range) && + (candidate.parent === void 0 || + SelectionRange2.is(candidate.parent)) + ); + } + SelectionRange2.is = is2; + })( + (SelectionRange = + exports2.SelectionRange || (exports2.SelectionRange = {})) + ); + let SemanticTokenTypes; + (function (SemanticTokenTypes2) { + SemanticTokenTypes2['namespace'] = 'namespace'; + SemanticTokenTypes2['type'] = 'type'; + SemanticTokenTypes2['class'] = 'class'; + SemanticTokenTypes2['enum'] = 'enum'; + SemanticTokenTypes2['interface'] = 'interface'; + SemanticTokenTypes2['struct'] = 'struct'; + SemanticTokenTypes2['typeParameter'] = 'typeParameter'; + SemanticTokenTypes2['parameter'] = 'parameter'; + SemanticTokenTypes2['variable'] = 'variable'; + SemanticTokenTypes2['property'] = 'property'; + SemanticTokenTypes2['enumMember'] = 'enumMember'; + SemanticTokenTypes2['event'] = 'event'; + SemanticTokenTypes2['function'] = 'function'; + SemanticTokenTypes2['method'] = 'method'; + SemanticTokenTypes2['macro'] = 'macro'; + SemanticTokenTypes2['keyword'] = 'keyword'; + SemanticTokenTypes2['modifier'] = 'modifier'; + SemanticTokenTypes2['comment'] = 'comment'; + SemanticTokenTypes2['string'] = 'string'; + SemanticTokenTypes2['number'] = 'number'; + SemanticTokenTypes2['regexp'] = 'regexp'; + SemanticTokenTypes2['operator'] = 'operator'; + SemanticTokenTypes2['decorator'] = 'decorator'; + })( + (SemanticTokenTypes = + exports2.SemanticTokenTypes || (exports2.SemanticTokenTypes = {})) + ); + let SemanticTokenModifiers; + (function (SemanticTokenModifiers2) { + SemanticTokenModifiers2['declaration'] = 'declaration'; + SemanticTokenModifiers2['definition'] = 'definition'; + SemanticTokenModifiers2['readonly'] = 'readonly'; + SemanticTokenModifiers2['static'] = 'static'; + SemanticTokenModifiers2['deprecated'] = 'deprecated'; + SemanticTokenModifiers2['abstract'] = 'abstract'; + SemanticTokenModifiers2['async'] = 'async'; + SemanticTokenModifiers2['modification'] = 'modification'; + SemanticTokenModifiers2['documentation'] = 'documentation'; + SemanticTokenModifiers2['defaultLibrary'] = 'defaultLibrary'; + })( + (SemanticTokenModifiers = + exports2.SemanticTokenModifiers || + (exports2.SemanticTokenModifiers = {})) + ); + let SemanticTokens; + (function (SemanticTokens2) { + function is2(value) { + let candidate = value; + return ( + Is2.objectLiteral(candidate) && + (candidate.resultId === void 0 || + typeof candidate.resultId === 'string') && + Array.isArray(candidate.data) && + (candidate.data.length === 0 || + typeof candidate.data[0] === 'number') + ); + } + SemanticTokens2.is = is2; + })( + (SemanticTokens = + exports2.SemanticTokens || (exports2.SemanticTokens = {})) + ); + let InlineValueText; + (function (InlineValueText2) { + function create(range, text) { + return { range, text }; + } + InlineValueText2.create = create; + function is2(value) { + let candidate = value; + return ( + candidate !== void 0 && + candidate !== null && + Range.is(candidate.range) && + Is2.string(candidate.text) + ); + } + InlineValueText2.is = is2; + })( + (InlineValueText = + exports2.InlineValueText || (exports2.InlineValueText = {})) + ); + let InlineValueVariableLookup; + (function (InlineValueVariableLookup2) { + function create(range, variableName, caseSensitiveLookup) { + return { range, variableName, caseSensitiveLookup }; + } + InlineValueVariableLookup2.create = create; + function is2(value) { + let candidate = value; + return ( + candidate !== void 0 && + candidate !== null && + Range.is(candidate.range) && + Is2.boolean(candidate.caseSensitiveLookup) && + (Is2.string(candidate.variableName) || + candidate.variableName === void 0) + ); + } + InlineValueVariableLookup2.is = is2; + })( + (InlineValueVariableLookup = + exports2.InlineValueVariableLookup || + (exports2.InlineValueVariableLookup = {})) + ); + let InlineValueEvaluatableExpression; + (function (InlineValueEvaluatableExpression2) { + function create(range, expression) { + return { range, expression }; + } + InlineValueEvaluatableExpression2.create = create; + function is2(value) { + let candidate = value; + return ( + candidate !== void 0 && + candidate !== null && + Range.is(candidate.range) && + (Is2.string(candidate.expression) || + candidate.expression === void 0) + ); + } + InlineValueEvaluatableExpression2.is = is2; + })( + (InlineValueEvaluatableExpression = + exports2.InlineValueEvaluatableExpression || + (exports2.InlineValueEvaluatableExpression = {})) + ); + let InlineValuesContext; + (function (InlineValuesContext2) { + function create(stoppedLocation) { + return { stoppedLocation }; + } + InlineValuesContext2.create = create; + function is2(value) { + let candidate = value; + return Is2.defined(candidate) && Range.is(value.stoppedLocation); + } + InlineValuesContext2.is = is2; + })( + (InlineValuesContext = + exports2.InlineValuesContext || (exports2.InlineValuesContext = {})) + ); + exports2.EOL = ['\n', '\r\n', '\r']; + let TextDocument; + (function (TextDocument2) { + function create(uri, languageId, version, content) { + return new FullTextDocument(uri, languageId, version, content); + } + TextDocument2.create = create; + function is2(value) { + let candidate = value; + return Is2.defined(candidate) && + Is2.string(candidate.uri) && + (Is2.undefined(candidate.languageId) || + Is2.string(candidate.languageId)) && + Is2.uinteger(candidate.lineCount) && + Is2.func(candidate.getText) && + Is2.func(candidate.positionAt) && + Is2.func(candidate.offsetAt) + ? true + : false; + } + TextDocument2.is = is2; + function applyEdits(document2, edits) { + let text = document2.getText(); + let sortedEdits = mergeSort(edits, function (a, b) { + let diff = a.range.start.line - b.range.start.line; + if (diff === 0) { + return a.range.start.character - b.range.start.character; + } + return diff; + }); + let lastModifiedOffset = text.length; + for (let i = sortedEdits.length - 1; i >= 0; i--) { + let e = sortedEdits[i]; + let startOffset = document2.offsetAt(e.range.start); + let endOffset = document2.offsetAt(e.range.end); + if (endOffset <= lastModifiedOffset) { + text = + text.substring(0, startOffset) + + e.newText + + text.substring(endOffset, text.length); + } else { + throw new Error('Overlapping edit'); + } + lastModifiedOffset = startOffset; + } + return text; + } + TextDocument2.applyEdits = applyEdits; + function mergeSort(data, compare) { + if (data.length <= 1) { + return data; + } + let p = (data.length / 2) | 0; + let left = data.slice(0, p); + let right = data.slice(p); + mergeSort(left, compare); + mergeSort(right, compare); + let leftIdx = 0; + let rightIdx = 0; + let i = 0; + while (leftIdx < left.length && rightIdx < right.length) { + let ret = compare(left[leftIdx], right[rightIdx]); + if (ret <= 0) { + data[i++] = left[leftIdx++]; + } else { + data[i++] = right[rightIdx++]; + } + } + while (leftIdx < left.length) { + data[i++] = left[leftIdx++]; + } + while (rightIdx < right.length) { + data[i++] = right[rightIdx++]; + } + return data; + } + })( + (TextDocument = exports2.TextDocument || (exports2.TextDocument = {})) + ); + var FullTextDocument = (function () { + function FullTextDocument2(uri, languageId, version, content) { + this._uri = uri; + this._languageId = languageId; + this._version = version; + this._content = content; + this._lineOffsets = void 0; + } + Object.defineProperty(FullTextDocument2.prototype, 'uri', { + get: function () { + return this._uri; + }, + enumerable: false, + configurable: true, + }); + Object.defineProperty(FullTextDocument2.prototype, 'languageId', { + get: function () { + return this._languageId; + }, + enumerable: false, + configurable: true, + }); + Object.defineProperty(FullTextDocument2.prototype, 'version', { + get: function () { + return this._version; + }, + enumerable: false, + configurable: true, + }); + FullTextDocument2.prototype.getText = function (range) { + if (range) { + let start = this.offsetAt(range.start); + let end = this.offsetAt(range.end); + return this._content.substring(start, end); + } + return this._content; + }; + FullTextDocument2.prototype.update = function (event, version) { + this._content = event.text; + this._version = version; + this._lineOffsets = void 0; + }; + FullTextDocument2.prototype.getLineOffsets = function () { + if (this._lineOffsets === void 0) { + let lineOffsets = []; + let text = this._content; + let isLineStart = true; + for (let i = 0; i < text.length; i++) { + if (isLineStart) { + lineOffsets.push(i); + isLineStart = false; + } + let ch = text.charAt(i); + isLineStart = ch === '\r' || ch === '\n'; + if ( + ch === '\r' && + i + 1 < text.length && + text.charAt(i + 1) === '\n' + ) { + i++; + } + } + if (isLineStart && text.length > 0) { + lineOffsets.push(text.length); + } + this._lineOffsets = lineOffsets; + } + return this._lineOffsets; + }; + FullTextDocument2.prototype.positionAt = function (offset) { + offset = Math.max(Math.min(offset, this._content.length), 0); + let lineOffsets = this.getLineOffsets(); + let low = 0, + high = lineOffsets.length; + if (high === 0) { + return Position.create(0, offset); + } + while (low < high) { + let mid = Math.floor((low + high) / 2); + if (lineOffsets[mid] > offset) { + high = mid; + } else { + low = mid + 1; + } + } + let line = low - 1; + return Position.create(line, offset - lineOffsets[line]); + }; + FullTextDocument2.prototype.offsetAt = function (position) { + let lineOffsets = this.getLineOffsets(); + if (position.line >= lineOffsets.length) { + return this._content.length; + } else if (position.line < 0) { + return 0; + } + let lineOffset = lineOffsets[position.line]; + let nextLineOffset = + position.line + 1 < lineOffsets.length + ? lineOffsets[position.line + 1] + : this._content.length; + return Math.max( + Math.min(lineOffset + position.character, nextLineOffset), + lineOffset + ); + }; + Object.defineProperty(FullTextDocument2.prototype, 'lineCount', { + get: function () { + return this.getLineOffsets().length; + }, + enumerable: false, + configurable: true, + }); + return FullTextDocument2; + })(); + let Is2; + (function (Is3) { + let toString = Object.prototype.toString; + function defined(value) { + return typeof value !== 'undefined'; + } + Is3.defined = defined; + function undefined2(value) { + return typeof value === 'undefined'; + } + Is3.undefined = undefined2; + function boolean(value) { + return value === true || value === false; + } + Is3.boolean = boolean; + function string(value) { + return toString.call(value) === '[object String]'; + } + Is3.string = string; + function number(value) { + return toString.call(value) === '[object Number]'; + } + Is3.number = number; + function numberRange(value, min, max) { + return ( + toString.call(value) === '[object Number]' && + min <= value && + value <= max + ); + } + Is3.numberRange = numberRange; + function integer2(value) { + return ( + toString.call(value) === '[object Number]' && + -2147483648 <= value && + value <= 2147483647 + ); + } + Is3.integer = integer2; + function uinteger2(value) { + return ( + toString.call(value) === '[object Number]' && + 0 <= value && + value <= 2147483647 + ); + } + Is3.uinteger = uinteger2; + function func(value) { + return toString.call(value) === '[object Function]'; + } + Is3.func = func; + function objectLiteral(value) { + return value !== null && typeof value === 'object'; + } + Is3.objectLiteral = objectLiteral; + function typedArray(value, check) { + return Array.isArray(value) && value.every(check); + } + Is3.typedArray = typedArray; + })(Is2 || (Is2 = {})); + }); + }, +}); + +// client/node_modules/vscode-languageserver-protocol/lib/common/messages.js +let require_messages2 = __commonJS({ + 'client/node_modules/vscode-languageserver-protocol/lib/common/messages.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.ProtocolNotificationType = exports.ProtocolNotificationType0 = exports.ProtocolRequestType = exports.ProtocolRequestType0 = exports.RegistrationType = void 0; + let vscode_jsonrpc_1 = require_main(); + let RegistrationType = class { + constructor(method) { + this.method = method; + } + }; + exports.RegistrationType = RegistrationType; + let ProtocolRequestType0 = class extends vscode_jsonrpc_1.RequestType0 { + constructor(method) { + super(method); + } + }; + exports.ProtocolRequestType0 = ProtocolRequestType0; + let ProtocolRequestType = class extends vscode_jsonrpc_1.RequestType { + constructor(method) { + super(method, vscode_jsonrpc_1.ParameterStructures.byName); + } + }; + exports.ProtocolRequestType = ProtocolRequestType; + let ProtocolNotificationType0 = class extends vscode_jsonrpc_1.NotificationType0 { + constructor(method) { + super(method); + } + }; + exports.ProtocolNotificationType0 = ProtocolNotificationType0; + let ProtocolNotificationType = class extends vscode_jsonrpc_1.NotificationType { + constructor(method) { + super(method, vscode_jsonrpc_1.ParameterStructures.byName); + } + }; + exports.ProtocolNotificationType = ProtocolNotificationType; + }, +}); + +// client/node_modules/vscode-languageserver-protocol/lib/common/utils/is.js +let require_is2 = __commonJS({ + 'client/node_modules/vscode-languageserver-protocol/lib/common/utils/is.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.objectLiteral = exports.typedArray = exports.stringArray = exports.array = exports.func = exports.error = exports.number = exports.string = exports.boolean = void 0; + function boolean(value) { + return value === true || value === false; + } + exports.boolean = boolean; + function string(value) { + return typeof value === 'string' || value instanceof String; + } + exports.string = string; + function number(value) { + return typeof value === 'number' || value instanceof Number; + } + exports.number = number; + function error(value) { + return value instanceof Error; + } + exports.error = error; + function func(value) { + return typeof value === 'function'; + } + exports.func = func; + function array(value) { + return Array.isArray(value); + } + exports.array = array; + function stringArray(value) { + return array(value) && value.every((elem) => string(elem)); + } + exports.stringArray = stringArray; + function typedArray(value, check) { + return Array.isArray(value) && value.every(check); + } + exports.typedArray = typedArray; + function objectLiteral(value) { + return value !== null && typeof value === 'object'; + } + exports.objectLiteral = objectLiteral; + }, +}); + +// client/node_modules/vscode-languageserver-protocol/lib/common/protocol.implementation.js +let require_protocol_implementation = __commonJS({ + 'client/node_modules/vscode-languageserver-protocol/lib/common/protocol.implementation.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.ImplementationRequest = void 0; + let messages_1 = require_messages2(); + let ImplementationRequest; + (function (ImplementationRequest2) { + ImplementationRequest2.method = 'textDocument/implementation'; + ImplementationRequest2.type = new messages_1.ProtocolRequestType( + ImplementationRequest2.method + ); + })( + (ImplementationRequest = + exports.ImplementationRequest || (exports.ImplementationRequest = {})) + ); + }, +}); + +// client/node_modules/vscode-languageserver-protocol/lib/common/protocol.typeDefinition.js +let require_protocol_typeDefinition = __commonJS({ + 'client/node_modules/vscode-languageserver-protocol/lib/common/protocol.typeDefinition.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.TypeDefinitionRequest = void 0; + let messages_1 = require_messages2(); + let TypeDefinitionRequest; + (function (TypeDefinitionRequest2) { + TypeDefinitionRequest2.method = 'textDocument/typeDefinition'; + TypeDefinitionRequest2.type = new messages_1.ProtocolRequestType( + TypeDefinitionRequest2.method + ); + })( + (TypeDefinitionRequest = + exports.TypeDefinitionRequest || (exports.TypeDefinitionRequest = {})) + ); + }, +}); + +// client/node_modules/vscode-languageserver-protocol/lib/common/protocol.workspaceFolders.js +let require_protocol_workspaceFolders = __commonJS({ + 'client/node_modules/vscode-languageserver-protocol/lib/common/protocol.workspaceFolders.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.DidChangeWorkspaceFoldersNotification = exports.WorkspaceFoldersRequest = void 0; + let messages_1 = require_messages2(); + let WorkspaceFoldersRequest; + (function (WorkspaceFoldersRequest2) { + WorkspaceFoldersRequest2.type = new messages_1.ProtocolRequestType0( + 'workspace/workspaceFolders' + ); + })( + (WorkspaceFoldersRequest = + exports.WorkspaceFoldersRequest || + (exports.WorkspaceFoldersRequest = {})) + ); + let DidChangeWorkspaceFoldersNotification; + (function (DidChangeWorkspaceFoldersNotification2) { + DidChangeWorkspaceFoldersNotification2.type = new messages_1.ProtocolNotificationType( + 'workspace/didChangeWorkspaceFolders' + ); + })( + (DidChangeWorkspaceFoldersNotification = + exports.DidChangeWorkspaceFoldersNotification || + (exports.DidChangeWorkspaceFoldersNotification = {})) + ); + }, +}); + +// client/node_modules/vscode-languageserver-protocol/lib/common/protocol.configuration.js +let require_protocol_configuration = __commonJS({ + 'client/node_modules/vscode-languageserver-protocol/lib/common/protocol.configuration.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.ConfigurationRequest = void 0; + let messages_1 = require_messages2(); + let ConfigurationRequest; + (function (ConfigurationRequest2) { + ConfigurationRequest2.type = new messages_1.ProtocolRequestType( + 'workspace/configuration' + ); + })( + (ConfigurationRequest = + exports.ConfigurationRequest || (exports.ConfigurationRequest = {})) + ); + }, +}); + +// client/node_modules/vscode-languageserver-protocol/lib/common/protocol.colorProvider.js +let require_protocol_colorProvider = __commonJS({ + 'client/node_modules/vscode-languageserver-protocol/lib/common/protocol.colorProvider.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.ColorPresentationRequest = exports.DocumentColorRequest = void 0; + let messages_1 = require_messages2(); + let DocumentColorRequest; + (function (DocumentColorRequest2) { + DocumentColorRequest2.method = 'textDocument/documentColor'; + DocumentColorRequest2.type = new messages_1.ProtocolRequestType( + DocumentColorRequest2.method + ); + })( + (DocumentColorRequest = + exports.DocumentColorRequest || (exports.DocumentColorRequest = {})) + ); + let ColorPresentationRequest; + (function (ColorPresentationRequest2) { + ColorPresentationRequest2.type = new messages_1.ProtocolRequestType( + 'textDocument/colorPresentation' + ); + })( + (ColorPresentationRequest = + exports.ColorPresentationRequest || + (exports.ColorPresentationRequest = {})) + ); + }, +}); + +// client/node_modules/vscode-languageserver-protocol/lib/common/protocol.foldingRange.js +let require_protocol_foldingRange = __commonJS({ + 'client/node_modules/vscode-languageserver-protocol/lib/common/protocol.foldingRange.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.FoldingRangeRequest = exports.FoldingRangeKind = void 0; + let messages_1 = require_messages2(); + let FoldingRangeKind; + (function (FoldingRangeKind2) { + FoldingRangeKind2['Comment'] = 'comment'; + FoldingRangeKind2['Imports'] = 'imports'; + FoldingRangeKind2['Region'] = 'region'; + })( + (FoldingRangeKind = + exports.FoldingRangeKind || (exports.FoldingRangeKind = {})) + ); + let FoldingRangeRequest; + (function (FoldingRangeRequest2) { + FoldingRangeRequest2.method = 'textDocument/foldingRange'; + FoldingRangeRequest2.type = new messages_1.ProtocolRequestType( + FoldingRangeRequest2.method + ); + })( + (FoldingRangeRequest = + exports.FoldingRangeRequest || (exports.FoldingRangeRequest = {})) + ); + }, +}); + +// client/node_modules/vscode-languageserver-protocol/lib/common/protocol.declaration.js +let require_protocol_declaration = __commonJS({ + 'client/node_modules/vscode-languageserver-protocol/lib/common/protocol.declaration.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.DeclarationRequest = void 0; + let messages_1 = require_messages2(); + let DeclarationRequest; + (function (DeclarationRequest2) { + DeclarationRequest2.method = 'textDocument/declaration'; + DeclarationRequest2.type = new messages_1.ProtocolRequestType( + DeclarationRequest2.method + ); + })( + (DeclarationRequest = + exports.DeclarationRequest || (exports.DeclarationRequest = {})) + ); + }, +}); + +// client/node_modules/vscode-languageserver-protocol/lib/common/protocol.selectionRange.js +let require_protocol_selectionRange = __commonJS({ + 'client/node_modules/vscode-languageserver-protocol/lib/common/protocol.selectionRange.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.SelectionRangeRequest = void 0; + let messages_1 = require_messages2(); + let SelectionRangeRequest; + (function (SelectionRangeRequest2) { + SelectionRangeRequest2.method = 'textDocument/selectionRange'; + SelectionRangeRequest2.type = new messages_1.ProtocolRequestType( + SelectionRangeRequest2.method + ); + })( + (SelectionRangeRequest = + exports.SelectionRangeRequest || (exports.SelectionRangeRequest = {})) + ); + }, +}); + +// client/node_modules/vscode-languageserver-protocol/lib/common/protocol.progress.js +let require_protocol_progress = __commonJS({ + 'client/node_modules/vscode-languageserver-protocol/lib/common/protocol.progress.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.WorkDoneProgressCancelNotification = exports.WorkDoneProgressCreateRequest = exports.WorkDoneProgress = void 0; + let vscode_jsonrpc_1 = require_main(); + let messages_1 = require_messages2(); + let WorkDoneProgress; + (function (WorkDoneProgress2) { + WorkDoneProgress2.type = new vscode_jsonrpc_1.ProgressType(); + function is2(value) { + return value === WorkDoneProgress2.type; + } + WorkDoneProgress2.is = is2; + })( + (WorkDoneProgress = + exports.WorkDoneProgress || (exports.WorkDoneProgress = {})) + ); + let WorkDoneProgressCreateRequest; + (function (WorkDoneProgressCreateRequest2) { + WorkDoneProgressCreateRequest2.type = new messages_1.ProtocolRequestType( + 'window/workDoneProgress/create' + ); + })( + (WorkDoneProgressCreateRequest = + exports.WorkDoneProgressCreateRequest || + (exports.WorkDoneProgressCreateRequest = {})) + ); + let WorkDoneProgressCancelNotification; + (function (WorkDoneProgressCancelNotification2) { + WorkDoneProgressCancelNotification2.type = new messages_1.ProtocolNotificationType( + 'window/workDoneProgress/cancel' + ); + })( + (WorkDoneProgressCancelNotification = + exports.WorkDoneProgressCancelNotification || + (exports.WorkDoneProgressCancelNotification = {})) + ); + }, +}); + +// client/node_modules/vscode-languageserver-protocol/lib/common/protocol.callHierarchy.js +let require_protocol_callHierarchy = __commonJS({ + 'client/node_modules/vscode-languageserver-protocol/lib/common/protocol.callHierarchy.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.CallHierarchyOutgoingCallsRequest = exports.CallHierarchyIncomingCallsRequest = exports.CallHierarchyPrepareRequest = void 0; + let messages_1 = require_messages2(); + let CallHierarchyPrepareRequest; + (function (CallHierarchyPrepareRequest2) { + CallHierarchyPrepareRequest2.method = 'textDocument/prepareCallHierarchy'; + CallHierarchyPrepareRequest2.type = new messages_1.ProtocolRequestType( + CallHierarchyPrepareRequest2.method + ); + })( + (CallHierarchyPrepareRequest = + exports.CallHierarchyPrepareRequest || + (exports.CallHierarchyPrepareRequest = {})) + ); + let CallHierarchyIncomingCallsRequest; + (function (CallHierarchyIncomingCallsRequest2) { + CallHierarchyIncomingCallsRequest2.method = 'callHierarchy/incomingCalls'; + CallHierarchyIncomingCallsRequest2.type = new messages_1.ProtocolRequestType( + CallHierarchyIncomingCallsRequest2.method + ); + })( + (CallHierarchyIncomingCallsRequest = + exports.CallHierarchyIncomingCallsRequest || + (exports.CallHierarchyIncomingCallsRequest = {})) + ); + let CallHierarchyOutgoingCallsRequest; + (function (CallHierarchyOutgoingCallsRequest2) { + CallHierarchyOutgoingCallsRequest2.method = 'callHierarchy/outgoingCalls'; + CallHierarchyOutgoingCallsRequest2.type = new messages_1.ProtocolRequestType( + CallHierarchyOutgoingCallsRequest2.method + ); + })( + (CallHierarchyOutgoingCallsRequest = + exports.CallHierarchyOutgoingCallsRequest || + (exports.CallHierarchyOutgoingCallsRequest = {})) + ); + }, +}); + +// client/node_modules/vscode-languageserver-protocol/lib/common/protocol.semanticTokens.js +let require_protocol_semanticTokens = __commonJS({ + 'client/node_modules/vscode-languageserver-protocol/lib/common/protocol.semanticTokens.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.SemanticTokensRefreshRequest = exports.SemanticTokensRangeRequest = exports.SemanticTokensDeltaRequest = exports.SemanticTokensRequest = exports.SemanticTokensRegistrationType = exports.TokenFormat = void 0; + let messages_1 = require_messages2(); + let TokenFormat; + (function (TokenFormat2) { + TokenFormat2.Relative = 'relative'; + })((TokenFormat = exports.TokenFormat || (exports.TokenFormat = {}))); + let SemanticTokensRegistrationType; + (function (SemanticTokensRegistrationType2) { + SemanticTokensRegistrationType2.method = 'textDocument/semanticTokens'; + SemanticTokensRegistrationType2.type = new messages_1.RegistrationType( + SemanticTokensRegistrationType2.method + ); + })( + (SemanticTokensRegistrationType = + exports.SemanticTokensRegistrationType || + (exports.SemanticTokensRegistrationType = {})) + ); + let SemanticTokensRequest; + (function (SemanticTokensRequest2) { + SemanticTokensRequest2.method = 'textDocument/semanticTokens/full'; + SemanticTokensRequest2.type = new messages_1.ProtocolRequestType( + SemanticTokensRequest2.method + ); + })( + (SemanticTokensRequest = + exports.SemanticTokensRequest || (exports.SemanticTokensRequest = {})) + ); + let SemanticTokensDeltaRequest; + (function (SemanticTokensDeltaRequest2) { + SemanticTokensDeltaRequest2.method = + 'textDocument/semanticTokens/full/delta'; + SemanticTokensDeltaRequest2.type = new messages_1.ProtocolRequestType( + SemanticTokensDeltaRequest2.method + ); + })( + (SemanticTokensDeltaRequest = + exports.SemanticTokensDeltaRequest || + (exports.SemanticTokensDeltaRequest = {})) + ); + let SemanticTokensRangeRequest; + (function (SemanticTokensRangeRequest2) { + SemanticTokensRangeRequest2.method = 'textDocument/semanticTokens/range'; + SemanticTokensRangeRequest2.type = new messages_1.ProtocolRequestType( + SemanticTokensRangeRequest2.method + ); + })( + (SemanticTokensRangeRequest = + exports.SemanticTokensRangeRequest || + (exports.SemanticTokensRangeRequest = {})) + ); + let SemanticTokensRefreshRequest; + (function (SemanticTokensRefreshRequest2) { + SemanticTokensRefreshRequest2.method = `workspace/semanticTokens/refresh`; + SemanticTokensRefreshRequest2.type = new messages_1.ProtocolRequestType0( + SemanticTokensRefreshRequest2.method + ); + })( + (SemanticTokensRefreshRequest = + exports.SemanticTokensRefreshRequest || + (exports.SemanticTokensRefreshRequest = {})) + ); + }, +}); + +// client/node_modules/vscode-languageserver-protocol/lib/common/protocol.showDocument.js +let require_protocol_showDocument = __commonJS({ + 'client/node_modules/vscode-languageserver-protocol/lib/common/protocol.showDocument.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.ShowDocumentRequest = void 0; + let messages_1 = require_messages2(); + let ShowDocumentRequest; + (function (ShowDocumentRequest2) { + ShowDocumentRequest2.method = 'window/showDocument'; + ShowDocumentRequest2.type = new messages_1.ProtocolRequestType( + ShowDocumentRequest2.method + ); + })( + (ShowDocumentRequest = + exports.ShowDocumentRequest || (exports.ShowDocumentRequest = {})) + ); + }, +}); + +// client/node_modules/vscode-languageserver-protocol/lib/common/protocol.linkedEditingRange.js +let require_protocol_linkedEditingRange = __commonJS({ + 'client/node_modules/vscode-languageserver-protocol/lib/common/protocol.linkedEditingRange.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.LinkedEditingRangeRequest = void 0; + let messages_1 = require_messages2(); + let LinkedEditingRangeRequest; + (function (LinkedEditingRangeRequest2) { + LinkedEditingRangeRequest2.method = 'textDocument/linkedEditingRange'; + LinkedEditingRangeRequest2.type = new messages_1.ProtocolRequestType( + LinkedEditingRangeRequest2.method + ); + })( + (LinkedEditingRangeRequest = + exports.LinkedEditingRangeRequest || + (exports.LinkedEditingRangeRequest = {})) + ); + }, +}); + +// client/node_modules/vscode-languageserver-protocol/lib/common/protocol.fileOperations.js +let require_protocol_fileOperations = __commonJS({ + 'client/node_modules/vscode-languageserver-protocol/lib/common/protocol.fileOperations.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.WillDeleteFilesRequest = exports.DidDeleteFilesNotification = exports.DidRenameFilesNotification = exports.WillRenameFilesRequest = exports.DidCreateFilesNotification = exports.WillCreateFilesRequest = exports.FileOperationPatternKind = void 0; + let messages_1 = require_messages2(); + let FileOperationPatternKind; + (function (FileOperationPatternKind2) { + FileOperationPatternKind2.file = 'file'; + FileOperationPatternKind2.folder = 'folder'; + })( + (FileOperationPatternKind = + exports.FileOperationPatternKind || + (exports.FileOperationPatternKind = {})) + ); + let WillCreateFilesRequest; + (function (WillCreateFilesRequest2) { + WillCreateFilesRequest2.method = 'workspace/willCreateFiles'; + WillCreateFilesRequest2.type = new messages_1.ProtocolRequestType( + WillCreateFilesRequest2.method + ); + })( + (WillCreateFilesRequest = + exports.WillCreateFilesRequest || (exports.WillCreateFilesRequest = {})) + ); + let DidCreateFilesNotification; + (function (DidCreateFilesNotification2) { + DidCreateFilesNotification2.method = 'workspace/didCreateFiles'; + DidCreateFilesNotification2.type = new messages_1.ProtocolNotificationType( + DidCreateFilesNotification2.method + ); + })( + (DidCreateFilesNotification = + exports.DidCreateFilesNotification || + (exports.DidCreateFilesNotification = {})) + ); + let WillRenameFilesRequest; + (function (WillRenameFilesRequest2) { + WillRenameFilesRequest2.method = 'workspace/willRenameFiles'; + WillRenameFilesRequest2.type = new messages_1.ProtocolRequestType( + WillRenameFilesRequest2.method + ); + })( + (WillRenameFilesRequest = + exports.WillRenameFilesRequest || (exports.WillRenameFilesRequest = {})) + ); + let DidRenameFilesNotification; + (function (DidRenameFilesNotification2) { + DidRenameFilesNotification2.method = 'workspace/didRenameFiles'; + DidRenameFilesNotification2.type = new messages_1.ProtocolNotificationType( + DidRenameFilesNotification2.method + ); + })( + (DidRenameFilesNotification = + exports.DidRenameFilesNotification || + (exports.DidRenameFilesNotification = {})) + ); + let DidDeleteFilesNotification; + (function (DidDeleteFilesNotification2) { + DidDeleteFilesNotification2.method = 'workspace/didDeleteFiles'; + DidDeleteFilesNotification2.type = new messages_1.ProtocolNotificationType( + DidDeleteFilesNotification2.method + ); + })( + (DidDeleteFilesNotification = + exports.DidDeleteFilesNotification || + (exports.DidDeleteFilesNotification = {})) + ); + let WillDeleteFilesRequest; + (function (WillDeleteFilesRequest2) { + WillDeleteFilesRequest2.method = 'workspace/willDeleteFiles'; + WillDeleteFilesRequest2.type = new messages_1.ProtocolRequestType( + WillDeleteFilesRequest2.method + ); + })( + (WillDeleteFilesRequest = + exports.WillDeleteFilesRequest || (exports.WillDeleteFilesRequest = {})) + ); + }, +}); + +// client/node_modules/vscode-languageserver-protocol/lib/common/protocol.moniker.js +let require_protocol_moniker = __commonJS({ + 'client/node_modules/vscode-languageserver-protocol/lib/common/protocol.moniker.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.MonikerRequest = exports.MonikerKind = exports.UniquenessLevel = void 0; + let messages_1 = require_messages2(); + let UniquenessLevel; + (function (UniquenessLevel2) { + UniquenessLevel2['document'] = 'document'; + UniquenessLevel2['project'] = 'project'; + UniquenessLevel2['group'] = 'group'; + UniquenessLevel2['scheme'] = 'scheme'; + UniquenessLevel2['global'] = 'global'; + })( + (UniquenessLevel = + exports.UniquenessLevel || (exports.UniquenessLevel = {})) + ); + let MonikerKind; + (function (MonikerKind2) { + MonikerKind2['import'] = 'import'; + MonikerKind2['export'] = 'export'; + MonikerKind2['local'] = 'local'; + })((MonikerKind = exports.MonikerKind || (exports.MonikerKind = {}))); + let MonikerRequest; + (function (MonikerRequest2) { + MonikerRequest2.method = 'textDocument/moniker'; + MonikerRequest2.type = new messages_1.ProtocolRequestType( + MonikerRequest2.method + ); + })( + (MonikerRequest = exports.MonikerRequest || (exports.MonikerRequest = {})) + ); + }, +}); + +// client/node_modules/vscode-languageserver-protocol/lib/common/protocol.js +let require_protocol = __commonJS({ + 'client/node_modules/vscode-languageserver-protocol/lib/common/protocol.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.CodeLensRefreshRequest = exports.CodeLensResolveRequest = exports.CodeLensRequest = exports.WorkspaceSymbolResolveRequest = exports.WorkspaceSymbolRequest = exports.CodeActionResolveRequest = exports.CodeActionRequest = exports.DocumentSymbolRequest = exports.DocumentHighlightRequest = exports.ReferencesRequest = exports.DefinitionRequest = exports.SignatureHelpRequest = exports.SignatureHelpTriggerKind = exports.HoverRequest = exports.CompletionResolveRequest = exports.CompletionRequest = exports.CompletionTriggerKind = exports.PublishDiagnosticsNotification = exports.WatchKind = exports.FileChangeType = exports.DidChangeWatchedFilesNotification = exports.WillSaveTextDocumentWaitUntilRequest = exports.WillSaveTextDocumentNotification = exports.TextDocumentSaveReason = exports.DidSaveTextDocumentNotification = exports.DidCloseTextDocumentNotification = exports.DidChangeTextDocumentNotification = exports.TextDocumentContentChangeEvent = exports.DidOpenTextDocumentNotification = exports.TextDocumentSyncKind = exports.TelemetryEventNotification = exports.LogMessageNotification = exports.ShowMessageRequest = exports.ShowMessageNotification = exports.MessageType = exports.DidChangeConfigurationNotification = exports.ExitNotification = exports.ShutdownRequest = exports.InitializedNotification = exports.InitializeError = exports.InitializeRequest = exports.WorkDoneProgressOptions = exports.TextDocumentRegistrationOptions = exports.StaticRegistrationOptions = exports.FailureHandlingKind = exports.ResourceOperationKind = exports.UnregistrationRequest = exports.RegistrationRequest = exports.DocumentSelector = exports.DocumentFilter = void 0; + exports.MonikerRequest = exports.MonikerKind = exports.UniquenessLevel = exports.WillDeleteFilesRequest = exports.DidDeleteFilesNotification = exports.WillRenameFilesRequest = exports.DidRenameFilesNotification = exports.WillCreateFilesRequest = exports.DidCreateFilesNotification = exports.FileOperationPatternKind = exports.LinkedEditingRangeRequest = exports.ShowDocumentRequest = exports.SemanticTokensRegistrationType = exports.SemanticTokensRefreshRequest = exports.SemanticTokensRangeRequest = exports.SemanticTokensDeltaRequest = exports.SemanticTokensRequest = exports.TokenFormat = exports.CallHierarchyPrepareRequest = exports.CallHierarchyOutgoingCallsRequest = exports.CallHierarchyIncomingCallsRequest = exports.WorkDoneProgressCancelNotification = exports.WorkDoneProgressCreateRequest = exports.WorkDoneProgress = exports.SelectionRangeRequest = exports.DeclarationRequest = exports.FoldingRangeRequest = exports.ColorPresentationRequest = exports.DocumentColorRequest = exports.ConfigurationRequest = exports.DidChangeWorkspaceFoldersNotification = exports.WorkspaceFoldersRequest = exports.TypeDefinitionRequest = exports.ImplementationRequest = exports.ApplyWorkspaceEditRequest = exports.ExecuteCommandRequest = exports.PrepareRenameRequest = exports.RenameRequest = exports.PrepareSupportDefaultBehavior = exports.DocumentOnTypeFormattingRequest = exports.DocumentRangeFormattingRequest = exports.DocumentFormattingRequest = exports.DocumentLinkResolveRequest = exports.DocumentLinkRequest = void 0; + let messages_1 = require_messages2(); + let Is2 = require_is2(); + let protocol_implementation_1 = require_protocol_implementation(); + Object.defineProperty(exports, 'ImplementationRequest', { + enumerable: true, + get: function () { + return protocol_implementation_1.ImplementationRequest; + }, + }); + let protocol_typeDefinition_1 = require_protocol_typeDefinition(); + Object.defineProperty(exports, 'TypeDefinitionRequest', { + enumerable: true, + get: function () { + return protocol_typeDefinition_1.TypeDefinitionRequest; + }, + }); + let protocol_workspaceFolders_1 = require_protocol_workspaceFolders(); + Object.defineProperty(exports, 'WorkspaceFoldersRequest', { + enumerable: true, + get: function () { + return protocol_workspaceFolders_1.WorkspaceFoldersRequest; + }, + }); + Object.defineProperty(exports, 'DidChangeWorkspaceFoldersNotification', { + enumerable: true, + get: function () { + return protocol_workspaceFolders_1.DidChangeWorkspaceFoldersNotification; + }, + }); + let protocol_configuration_1 = require_protocol_configuration(); + Object.defineProperty(exports, 'ConfigurationRequest', { + enumerable: true, + get: function () { + return protocol_configuration_1.ConfigurationRequest; + }, + }); + let protocol_colorProvider_1 = require_protocol_colorProvider(); + Object.defineProperty(exports, 'DocumentColorRequest', { + enumerable: true, + get: function () { + return protocol_colorProvider_1.DocumentColorRequest; + }, + }); + Object.defineProperty(exports, 'ColorPresentationRequest', { + enumerable: true, + get: function () { + return protocol_colorProvider_1.ColorPresentationRequest; + }, + }); + let protocol_foldingRange_1 = require_protocol_foldingRange(); + Object.defineProperty(exports, 'FoldingRangeRequest', { + enumerable: true, + get: function () { + return protocol_foldingRange_1.FoldingRangeRequest; + }, + }); + let protocol_declaration_1 = require_protocol_declaration(); + Object.defineProperty(exports, 'DeclarationRequest', { + enumerable: true, + get: function () { + return protocol_declaration_1.DeclarationRequest; + }, + }); + let protocol_selectionRange_1 = require_protocol_selectionRange(); + Object.defineProperty(exports, 'SelectionRangeRequest', { + enumerable: true, + get: function () { + return protocol_selectionRange_1.SelectionRangeRequest; + }, + }); + let protocol_progress_1 = require_protocol_progress(); + Object.defineProperty(exports, 'WorkDoneProgress', { + enumerable: true, + get: function () { + return protocol_progress_1.WorkDoneProgress; + }, + }); + Object.defineProperty(exports, 'WorkDoneProgressCreateRequest', { + enumerable: true, + get: function () { + return protocol_progress_1.WorkDoneProgressCreateRequest; + }, + }); + Object.defineProperty(exports, 'WorkDoneProgressCancelNotification', { + enumerable: true, + get: function () { + return protocol_progress_1.WorkDoneProgressCancelNotification; + }, + }); + let protocol_callHierarchy_1 = require_protocol_callHierarchy(); + Object.defineProperty(exports, 'CallHierarchyIncomingCallsRequest', { + enumerable: true, + get: function () { + return protocol_callHierarchy_1.CallHierarchyIncomingCallsRequest; + }, + }); + Object.defineProperty(exports, 'CallHierarchyOutgoingCallsRequest', { + enumerable: true, + get: function () { + return protocol_callHierarchy_1.CallHierarchyOutgoingCallsRequest; + }, + }); + Object.defineProperty(exports, 'CallHierarchyPrepareRequest', { + enumerable: true, + get: function () { + return protocol_callHierarchy_1.CallHierarchyPrepareRequest; + }, + }); + let protocol_semanticTokens_1 = require_protocol_semanticTokens(); + Object.defineProperty(exports, 'TokenFormat', { + enumerable: true, + get: function () { + return protocol_semanticTokens_1.TokenFormat; + }, + }); + Object.defineProperty(exports, 'SemanticTokensRequest', { + enumerable: true, + get: function () { + return protocol_semanticTokens_1.SemanticTokensRequest; + }, + }); + Object.defineProperty(exports, 'SemanticTokensDeltaRequest', { + enumerable: true, + get: function () { + return protocol_semanticTokens_1.SemanticTokensDeltaRequest; + }, + }); + Object.defineProperty(exports, 'SemanticTokensRangeRequest', { + enumerable: true, + get: function () { + return protocol_semanticTokens_1.SemanticTokensRangeRequest; + }, + }); + Object.defineProperty(exports, 'SemanticTokensRefreshRequest', { + enumerable: true, + get: function () { + return protocol_semanticTokens_1.SemanticTokensRefreshRequest; + }, + }); + Object.defineProperty(exports, 'SemanticTokensRegistrationType', { + enumerable: true, + get: function () { + return protocol_semanticTokens_1.SemanticTokensRegistrationType; + }, + }); + let protocol_showDocument_1 = require_protocol_showDocument(); + Object.defineProperty(exports, 'ShowDocumentRequest', { + enumerable: true, + get: function () { + return protocol_showDocument_1.ShowDocumentRequest; + }, + }); + let protocol_linkedEditingRange_1 = require_protocol_linkedEditingRange(); + Object.defineProperty(exports, 'LinkedEditingRangeRequest', { + enumerable: true, + get: function () { + return protocol_linkedEditingRange_1.LinkedEditingRangeRequest; + }, + }); + let protocol_fileOperations_1 = require_protocol_fileOperations(); + Object.defineProperty(exports, 'FileOperationPatternKind', { + enumerable: true, + get: function () { + return protocol_fileOperations_1.FileOperationPatternKind; + }, + }); + Object.defineProperty(exports, 'DidCreateFilesNotification', { + enumerable: true, + get: function () { + return protocol_fileOperations_1.DidCreateFilesNotification; + }, + }); + Object.defineProperty(exports, 'WillCreateFilesRequest', { + enumerable: true, + get: function () { + return protocol_fileOperations_1.WillCreateFilesRequest; + }, + }); + Object.defineProperty(exports, 'DidRenameFilesNotification', { + enumerable: true, + get: function () { + return protocol_fileOperations_1.DidRenameFilesNotification; + }, + }); + Object.defineProperty(exports, 'WillRenameFilesRequest', { + enumerable: true, + get: function () { + return protocol_fileOperations_1.WillRenameFilesRequest; + }, + }); + Object.defineProperty(exports, 'DidDeleteFilesNotification', { + enumerable: true, + get: function () { + return protocol_fileOperations_1.DidDeleteFilesNotification; + }, + }); + Object.defineProperty(exports, 'WillDeleteFilesRequest', { + enumerable: true, + get: function () { + return protocol_fileOperations_1.WillDeleteFilesRequest; + }, + }); + let protocol_moniker_1 = require_protocol_moniker(); + Object.defineProperty(exports, 'UniquenessLevel', { + enumerable: true, + get: function () { + return protocol_moniker_1.UniquenessLevel; + }, + }); + Object.defineProperty(exports, 'MonikerKind', { + enumerable: true, + get: function () { + return protocol_moniker_1.MonikerKind; + }, + }); + Object.defineProperty(exports, 'MonikerRequest', { + enumerable: true, + get: function () { + return protocol_moniker_1.MonikerRequest; + }, + }); + let DocumentFilter; + (function (DocumentFilter2) { + function is2(value) { + const candidate = value; + return ( + Is2.string(candidate.language) || + Is2.string(candidate.scheme) || + Is2.string(candidate.pattern) + ); + } + DocumentFilter2.is = is2; + })( + (DocumentFilter = exports.DocumentFilter || (exports.DocumentFilter = {})) + ); + let DocumentSelector; + (function (DocumentSelector2) { + function is2(value) { + if (!Array.isArray(value)) { + return false; + } + for (let elem of value) { + if (!Is2.string(elem) && !DocumentFilter.is(elem)) { + return false; + } + } + return true; + } + DocumentSelector2.is = is2; + })( + (DocumentSelector = + exports.DocumentSelector || (exports.DocumentSelector = {})) + ); + let RegistrationRequest; + (function (RegistrationRequest2) { + RegistrationRequest2.type = new messages_1.ProtocolRequestType( + 'client/registerCapability' + ); + })( + (RegistrationRequest = + exports.RegistrationRequest || (exports.RegistrationRequest = {})) + ); + let UnregistrationRequest; + (function (UnregistrationRequest2) { + UnregistrationRequest2.type = new messages_1.ProtocolRequestType( + 'client/unregisterCapability' + ); + })( + (UnregistrationRequest = + exports.UnregistrationRequest || (exports.UnregistrationRequest = {})) + ); + let ResourceOperationKind; + (function (ResourceOperationKind2) { + ResourceOperationKind2.Create = 'create'; + ResourceOperationKind2.Rename = 'rename'; + ResourceOperationKind2.Delete = 'delete'; + })( + (ResourceOperationKind = + exports.ResourceOperationKind || (exports.ResourceOperationKind = {})) + ); + let FailureHandlingKind; + (function (FailureHandlingKind2) { + FailureHandlingKind2.Abort = 'abort'; + FailureHandlingKind2.Transactional = 'transactional'; + FailureHandlingKind2.TextOnlyTransactional = 'textOnlyTransactional'; + FailureHandlingKind2.Undo = 'undo'; + })( + (FailureHandlingKind = + exports.FailureHandlingKind || (exports.FailureHandlingKind = {})) + ); + let StaticRegistrationOptions; + (function (StaticRegistrationOptions2) { + function hasId(value) { + const candidate = value; + return candidate && Is2.string(candidate.id) && candidate.id.length > 0; + } + StaticRegistrationOptions2.hasId = hasId; + })( + (StaticRegistrationOptions = + exports.StaticRegistrationOptions || + (exports.StaticRegistrationOptions = {})) + ); + let TextDocumentRegistrationOptions; + (function (TextDocumentRegistrationOptions2) { + function is2(value) { + const candidate = value; + return ( + candidate && + (candidate.documentSelector === null || + DocumentSelector.is(candidate.documentSelector)) + ); + } + TextDocumentRegistrationOptions2.is = is2; + })( + (TextDocumentRegistrationOptions = + exports.TextDocumentRegistrationOptions || + (exports.TextDocumentRegistrationOptions = {})) + ); + let WorkDoneProgressOptions; + (function (WorkDoneProgressOptions2) { + function is2(value) { + const candidate = value; + return ( + Is2.objectLiteral(candidate) && + (candidate.workDoneProgress === void 0 || + Is2.boolean(candidate.workDoneProgress)) + ); + } + WorkDoneProgressOptions2.is = is2; + function hasWorkDoneProgress(value) { + const candidate = value; + return candidate && Is2.boolean(candidate.workDoneProgress); + } + WorkDoneProgressOptions2.hasWorkDoneProgress = hasWorkDoneProgress; + })( + (WorkDoneProgressOptions = + exports.WorkDoneProgressOptions || + (exports.WorkDoneProgressOptions = {})) + ); + let InitializeRequest; + (function (InitializeRequest2) { + InitializeRequest2.type = new messages_1.ProtocolRequestType( + 'initialize' + ); + })( + (InitializeRequest = + exports.InitializeRequest || (exports.InitializeRequest = {})) + ); + let InitializeError; + (function (InitializeError2) { + InitializeError2.unknownProtocolVersion = 1; + })( + (InitializeError = + exports.InitializeError || (exports.InitializeError = {})) + ); + let InitializedNotification; + (function (InitializedNotification2) { + InitializedNotification2.type = new messages_1.ProtocolNotificationType( + 'initialized' + ); + })( + (InitializedNotification = + exports.InitializedNotification || + (exports.InitializedNotification = {})) + ); + let ShutdownRequest; + (function (ShutdownRequest2) { + ShutdownRequest2.type = new messages_1.ProtocolRequestType0('shutdown'); + })( + (ShutdownRequest = + exports.ShutdownRequest || (exports.ShutdownRequest = {})) + ); + let ExitNotification; + (function (ExitNotification2) { + ExitNotification2.type = new messages_1.ProtocolNotificationType0('exit'); + })( + (ExitNotification = + exports.ExitNotification || (exports.ExitNotification = {})) + ); + let DidChangeConfigurationNotification; + (function (DidChangeConfigurationNotification2) { + DidChangeConfigurationNotification2.type = new messages_1.ProtocolNotificationType( + 'workspace/didChangeConfiguration' + ); + })( + (DidChangeConfigurationNotification = + exports.DidChangeConfigurationNotification || + (exports.DidChangeConfigurationNotification = {})) + ); + let MessageType; + (function (MessageType2) { + MessageType2.Error = 1; + MessageType2.Warning = 2; + MessageType2.Info = 3; + MessageType2.Log = 4; + })((MessageType = exports.MessageType || (exports.MessageType = {}))); + let ShowMessageNotification; + (function (ShowMessageNotification2) { + ShowMessageNotification2.type = new messages_1.ProtocolNotificationType( + 'window/showMessage' + ); + })( + (ShowMessageNotification = + exports.ShowMessageNotification || + (exports.ShowMessageNotification = {})) + ); + let ShowMessageRequest; + (function (ShowMessageRequest2) { + ShowMessageRequest2.type = new messages_1.ProtocolRequestType( + 'window/showMessageRequest' + ); + })( + (ShowMessageRequest = + exports.ShowMessageRequest || (exports.ShowMessageRequest = {})) + ); + let LogMessageNotification; + (function (LogMessageNotification2) { + LogMessageNotification2.type = new messages_1.ProtocolNotificationType( + 'window/logMessage' + ); + })( + (LogMessageNotification = + exports.LogMessageNotification || (exports.LogMessageNotification = {})) + ); + let TelemetryEventNotification; + (function (TelemetryEventNotification2) { + TelemetryEventNotification2.type = new messages_1.ProtocolNotificationType( + 'telemetry/event' + ); + })( + (TelemetryEventNotification = + exports.TelemetryEventNotification || + (exports.TelemetryEventNotification = {})) + ); + let TextDocumentSyncKind; + (function (TextDocumentSyncKind2) { + TextDocumentSyncKind2.None = 0; + TextDocumentSyncKind2.Full = 1; + TextDocumentSyncKind2.Incremental = 2; + })( + (TextDocumentSyncKind = + exports.TextDocumentSyncKind || (exports.TextDocumentSyncKind = {})) + ); + let DidOpenTextDocumentNotification; + (function (DidOpenTextDocumentNotification2) { + DidOpenTextDocumentNotification2.method = 'textDocument/didOpen'; + DidOpenTextDocumentNotification2.type = new messages_1.ProtocolNotificationType( + DidOpenTextDocumentNotification2.method + ); + })( + (DidOpenTextDocumentNotification = + exports.DidOpenTextDocumentNotification || + (exports.DidOpenTextDocumentNotification = {})) + ); + let TextDocumentContentChangeEvent; + (function (TextDocumentContentChangeEvent2) { + function isIncremental(event) { + let candidate = event; + return ( + candidate !== void 0 && + candidate !== null && + typeof candidate.text === 'string' && + candidate.range !== void 0 && + (candidate.rangeLength === void 0 || + typeof candidate.rangeLength === 'number') + ); + } + TextDocumentContentChangeEvent2.isIncremental = isIncremental; + function isFull(event) { + let candidate = event; + return ( + candidate !== void 0 && + candidate !== null && + typeof candidate.text === 'string' && + candidate.range === void 0 && + candidate.rangeLength === void 0 + ); + } + TextDocumentContentChangeEvent2.isFull = isFull; + })( + (TextDocumentContentChangeEvent = + exports.TextDocumentContentChangeEvent || + (exports.TextDocumentContentChangeEvent = {})) + ); + let DidChangeTextDocumentNotification; + (function (DidChangeTextDocumentNotification2) { + DidChangeTextDocumentNotification2.method = 'textDocument/didChange'; + DidChangeTextDocumentNotification2.type = new messages_1.ProtocolNotificationType( + DidChangeTextDocumentNotification2.method + ); + })( + (DidChangeTextDocumentNotification = + exports.DidChangeTextDocumentNotification || + (exports.DidChangeTextDocumentNotification = {})) + ); + let DidCloseTextDocumentNotification; + (function (DidCloseTextDocumentNotification2) { + DidCloseTextDocumentNotification2.method = 'textDocument/didClose'; + DidCloseTextDocumentNotification2.type = new messages_1.ProtocolNotificationType( + DidCloseTextDocumentNotification2.method + ); + })( + (DidCloseTextDocumentNotification = + exports.DidCloseTextDocumentNotification || + (exports.DidCloseTextDocumentNotification = {})) + ); + let DidSaveTextDocumentNotification; + (function (DidSaveTextDocumentNotification2) { + DidSaveTextDocumentNotification2.method = 'textDocument/didSave'; + DidSaveTextDocumentNotification2.type = new messages_1.ProtocolNotificationType( + DidSaveTextDocumentNotification2.method + ); + })( + (DidSaveTextDocumentNotification = + exports.DidSaveTextDocumentNotification || + (exports.DidSaveTextDocumentNotification = {})) + ); + let TextDocumentSaveReason; + (function (TextDocumentSaveReason2) { + TextDocumentSaveReason2.Manual = 1; + TextDocumentSaveReason2.AfterDelay = 2; + TextDocumentSaveReason2.FocusOut = 3; + })( + (TextDocumentSaveReason = + exports.TextDocumentSaveReason || (exports.TextDocumentSaveReason = {})) + ); + let WillSaveTextDocumentNotification; + (function (WillSaveTextDocumentNotification2) { + WillSaveTextDocumentNotification2.method = 'textDocument/willSave'; + WillSaveTextDocumentNotification2.type = new messages_1.ProtocolNotificationType( + WillSaveTextDocumentNotification2.method + ); + })( + (WillSaveTextDocumentNotification = + exports.WillSaveTextDocumentNotification || + (exports.WillSaveTextDocumentNotification = {})) + ); + let WillSaveTextDocumentWaitUntilRequest; + (function (WillSaveTextDocumentWaitUntilRequest2) { + WillSaveTextDocumentWaitUntilRequest2.method = + 'textDocument/willSaveWaitUntil'; + WillSaveTextDocumentWaitUntilRequest2.type = new messages_1.ProtocolRequestType( + WillSaveTextDocumentWaitUntilRequest2.method + ); + })( + (WillSaveTextDocumentWaitUntilRequest = + exports.WillSaveTextDocumentWaitUntilRequest || + (exports.WillSaveTextDocumentWaitUntilRequest = {})) + ); + let DidChangeWatchedFilesNotification; + (function (DidChangeWatchedFilesNotification2) { + DidChangeWatchedFilesNotification2.type = new messages_1.ProtocolNotificationType( + 'workspace/didChangeWatchedFiles' + ); + })( + (DidChangeWatchedFilesNotification = + exports.DidChangeWatchedFilesNotification || + (exports.DidChangeWatchedFilesNotification = {})) + ); + let FileChangeType; + (function (FileChangeType2) { + FileChangeType2.Created = 1; + FileChangeType2.Changed = 2; + FileChangeType2.Deleted = 3; + })( + (FileChangeType = exports.FileChangeType || (exports.FileChangeType = {})) + ); + let WatchKind; + (function (WatchKind2) { + WatchKind2.Create = 1; + WatchKind2.Change = 2; + WatchKind2.Delete = 4; + })((WatchKind = exports.WatchKind || (exports.WatchKind = {}))); + let PublishDiagnosticsNotification; + (function (PublishDiagnosticsNotification2) { + PublishDiagnosticsNotification2.type = new messages_1.ProtocolNotificationType( + 'textDocument/publishDiagnostics' + ); + })( + (PublishDiagnosticsNotification = + exports.PublishDiagnosticsNotification || + (exports.PublishDiagnosticsNotification = {})) + ); + let CompletionTriggerKind; + (function (CompletionTriggerKind2) { + CompletionTriggerKind2.Invoked = 1; + CompletionTriggerKind2.TriggerCharacter = 2; + CompletionTriggerKind2.TriggerForIncompleteCompletions = 3; + })( + (CompletionTriggerKind = + exports.CompletionTriggerKind || (exports.CompletionTriggerKind = {})) + ); + let CompletionRequest; + (function (CompletionRequest2) { + CompletionRequest2.method = 'textDocument/completion'; + CompletionRequest2.type = new messages_1.ProtocolRequestType( + CompletionRequest2.method + ); + })( + (CompletionRequest = + exports.CompletionRequest || (exports.CompletionRequest = {})) + ); + let CompletionResolveRequest; + (function (CompletionResolveRequest2) { + CompletionResolveRequest2.method = 'completionItem/resolve'; + CompletionResolveRequest2.type = new messages_1.ProtocolRequestType( + CompletionResolveRequest2.method + ); + })( + (CompletionResolveRequest = + exports.CompletionResolveRequest || + (exports.CompletionResolveRequest = {})) + ); + let HoverRequest; + (function (HoverRequest2) { + HoverRequest2.method = 'textDocument/hover'; + HoverRequest2.type = new messages_1.ProtocolRequestType( + HoverRequest2.method + ); + })((HoverRequest = exports.HoverRequest || (exports.HoverRequest = {}))); + let SignatureHelpTriggerKind; + (function (SignatureHelpTriggerKind2) { + SignatureHelpTriggerKind2.Invoked = 1; + SignatureHelpTriggerKind2.TriggerCharacter = 2; + SignatureHelpTriggerKind2.ContentChange = 3; + })( + (SignatureHelpTriggerKind = + exports.SignatureHelpTriggerKind || + (exports.SignatureHelpTriggerKind = {})) + ); + let SignatureHelpRequest; + (function (SignatureHelpRequest2) { + SignatureHelpRequest2.method = 'textDocument/signatureHelp'; + SignatureHelpRequest2.type = new messages_1.ProtocolRequestType( + SignatureHelpRequest2.method + ); + })( + (SignatureHelpRequest = + exports.SignatureHelpRequest || (exports.SignatureHelpRequest = {})) + ); + let DefinitionRequest; + (function (DefinitionRequest2) { + DefinitionRequest2.method = 'textDocument/definition'; + DefinitionRequest2.type = new messages_1.ProtocolRequestType( + DefinitionRequest2.method + ); + })( + (DefinitionRequest = + exports.DefinitionRequest || (exports.DefinitionRequest = {})) + ); + let ReferencesRequest; + (function (ReferencesRequest2) { + ReferencesRequest2.method = 'textDocument/references'; + ReferencesRequest2.type = new messages_1.ProtocolRequestType( + ReferencesRequest2.method + ); + })( + (ReferencesRequest = + exports.ReferencesRequest || (exports.ReferencesRequest = {})) + ); + let DocumentHighlightRequest; + (function (DocumentHighlightRequest2) { + DocumentHighlightRequest2.method = 'textDocument/documentHighlight'; + DocumentHighlightRequest2.type = new messages_1.ProtocolRequestType( + DocumentHighlightRequest2.method + ); + })( + (DocumentHighlightRequest = + exports.DocumentHighlightRequest || + (exports.DocumentHighlightRequest = {})) + ); + let DocumentSymbolRequest; + (function (DocumentSymbolRequest2) { + DocumentSymbolRequest2.method = 'textDocument/documentSymbol'; + DocumentSymbolRequest2.type = new messages_1.ProtocolRequestType( + DocumentSymbolRequest2.method + ); + })( + (DocumentSymbolRequest = + exports.DocumentSymbolRequest || (exports.DocumentSymbolRequest = {})) + ); + let CodeActionRequest; + (function (CodeActionRequest2) { + CodeActionRequest2.method = 'textDocument/codeAction'; + CodeActionRequest2.type = new messages_1.ProtocolRequestType( + CodeActionRequest2.method + ); + })( + (CodeActionRequest = + exports.CodeActionRequest || (exports.CodeActionRequest = {})) + ); + let CodeActionResolveRequest; + (function (CodeActionResolveRequest2) { + CodeActionResolveRequest2.method = 'codeAction/resolve'; + CodeActionResolveRequest2.type = new messages_1.ProtocolRequestType( + CodeActionResolveRequest2.method + ); + })( + (CodeActionResolveRequest = + exports.CodeActionResolveRequest || + (exports.CodeActionResolveRequest = {})) + ); + let WorkspaceSymbolRequest; + (function (WorkspaceSymbolRequest2) { + WorkspaceSymbolRequest2.method = 'workspace/symbol'; + WorkspaceSymbolRequest2.type = new messages_1.ProtocolRequestType( + WorkspaceSymbolRequest2.method + ); + })( + (WorkspaceSymbolRequest = + exports.WorkspaceSymbolRequest || (exports.WorkspaceSymbolRequest = {})) + ); + let WorkspaceSymbolResolveRequest; + (function (WorkspaceSymbolResolveRequest2) { + WorkspaceSymbolResolveRequest2.method = 'workspaceSymbol/resolve'; + WorkspaceSymbolResolveRequest2.type = new messages_1.ProtocolRequestType( + WorkspaceSymbolResolveRequest2.method + ); + })( + (WorkspaceSymbolResolveRequest = + exports.WorkspaceSymbolResolveRequest || + (exports.WorkspaceSymbolResolveRequest = {})) + ); + let CodeLensRequest; + (function (CodeLensRequest2) { + CodeLensRequest2.method = 'textDocument/codeLens'; + CodeLensRequest2.type = new messages_1.ProtocolRequestType( + CodeLensRequest2.method + ); + })( + (CodeLensRequest = + exports.CodeLensRequest || (exports.CodeLensRequest = {})) + ); + let CodeLensResolveRequest; + (function (CodeLensResolveRequest2) { + CodeLensResolveRequest2.method = 'codeLens/resolve'; + CodeLensResolveRequest2.type = new messages_1.ProtocolRequestType( + CodeLensResolveRequest2.method + ); + })( + (CodeLensResolveRequest = + exports.CodeLensResolveRequest || (exports.CodeLensResolveRequest = {})) + ); + let CodeLensRefreshRequest; + (function (CodeLensRefreshRequest2) { + CodeLensRefreshRequest2.method = `workspace/codeLens/refresh`; + CodeLensRefreshRequest2.type = new messages_1.ProtocolRequestType0( + CodeLensRefreshRequest2.method + ); + })( + (CodeLensRefreshRequest = + exports.CodeLensRefreshRequest || (exports.CodeLensRefreshRequest = {})) + ); + let DocumentLinkRequest; + (function (DocumentLinkRequest2) { + DocumentLinkRequest2.method = 'textDocument/documentLink'; + DocumentLinkRequest2.type = new messages_1.ProtocolRequestType( + DocumentLinkRequest2.method + ); + })( + (DocumentLinkRequest = + exports.DocumentLinkRequest || (exports.DocumentLinkRequest = {})) + ); + let DocumentLinkResolveRequest; + (function (DocumentLinkResolveRequest2) { + DocumentLinkResolveRequest2.method = 'documentLink/resolve'; + DocumentLinkResolveRequest2.type = new messages_1.ProtocolRequestType( + DocumentLinkResolveRequest2.method + ); + })( + (DocumentLinkResolveRequest = + exports.DocumentLinkResolveRequest || + (exports.DocumentLinkResolveRequest = {})) + ); + let DocumentFormattingRequest; + (function (DocumentFormattingRequest2) { + DocumentFormattingRequest2.method = 'textDocument/formatting'; + DocumentFormattingRequest2.type = new messages_1.ProtocolRequestType( + DocumentFormattingRequest2.method + ); + })( + (DocumentFormattingRequest = + exports.DocumentFormattingRequest || + (exports.DocumentFormattingRequest = {})) + ); + let DocumentRangeFormattingRequest; + (function (DocumentRangeFormattingRequest2) { + DocumentRangeFormattingRequest2.method = 'textDocument/rangeFormatting'; + DocumentRangeFormattingRequest2.type = new messages_1.ProtocolRequestType( + DocumentRangeFormattingRequest2.method + ); + })( + (DocumentRangeFormattingRequest = + exports.DocumentRangeFormattingRequest || + (exports.DocumentRangeFormattingRequest = {})) + ); + let DocumentOnTypeFormattingRequest; + (function (DocumentOnTypeFormattingRequest2) { + DocumentOnTypeFormattingRequest2.method = 'textDocument/onTypeFormatting'; + DocumentOnTypeFormattingRequest2.type = new messages_1.ProtocolRequestType( + DocumentOnTypeFormattingRequest2.method + ); + })( + (DocumentOnTypeFormattingRequest = + exports.DocumentOnTypeFormattingRequest || + (exports.DocumentOnTypeFormattingRequest = {})) + ); + let PrepareSupportDefaultBehavior; + (function (PrepareSupportDefaultBehavior2) { + PrepareSupportDefaultBehavior2.Identifier = 1; + })( + (PrepareSupportDefaultBehavior = + exports.PrepareSupportDefaultBehavior || + (exports.PrepareSupportDefaultBehavior = {})) + ); + let RenameRequest; + (function (RenameRequest2) { + RenameRequest2.method = 'textDocument/rename'; + RenameRequest2.type = new messages_1.ProtocolRequestType( + RenameRequest2.method + ); + })((RenameRequest = exports.RenameRequest || (exports.RenameRequest = {}))); + let PrepareRenameRequest; + (function (PrepareRenameRequest2) { + PrepareRenameRequest2.method = 'textDocument/prepareRename'; + PrepareRenameRequest2.type = new messages_1.ProtocolRequestType( + PrepareRenameRequest2.method + ); + })( + (PrepareRenameRequest = + exports.PrepareRenameRequest || (exports.PrepareRenameRequest = {})) + ); + let ExecuteCommandRequest; + (function (ExecuteCommandRequest2) { + ExecuteCommandRequest2.type = new messages_1.ProtocolRequestType( + 'workspace/executeCommand' + ); + })( + (ExecuteCommandRequest = + exports.ExecuteCommandRequest || (exports.ExecuteCommandRequest = {})) + ); + let ApplyWorkspaceEditRequest; + (function (ApplyWorkspaceEditRequest2) { + ApplyWorkspaceEditRequest2.type = new messages_1.ProtocolRequestType( + 'workspace/applyEdit' + ); + })( + (ApplyWorkspaceEditRequest = + exports.ApplyWorkspaceEditRequest || + (exports.ApplyWorkspaceEditRequest = {})) + ); + }, +}); + +// client/node_modules/vscode-languageserver-protocol/lib/common/connection.js +let require_connection2 = __commonJS({ + 'client/node_modules/vscode-languageserver-protocol/lib/common/connection.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.createProtocolConnection = void 0; + let vscode_jsonrpc_1 = require_main(); + function createProtocolConnection(input, output, logger, options) { + if (vscode_jsonrpc_1.ConnectionStrategy.is(options)) { + options = { connectionStrategy: options }; + } + return (0, vscode_jsonrpc_1.createMessageConnection)( + input, + output, + logger, + options + ); + } + exports.createProtocolConnection = createProtocolConnection; + }, +}); + +// client/node_modules/vscode-languageserver-protocol/lib/common/proposed.diagnostic.js +let require_proposed_diagnostic = __commonJS({ + 'client/node_modules/vscode-languageserver-protocol/lib/common/proposed.diagnostic.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.DiagnosticRefreshRequest = exports.WorkspaceDiagnosticRequest = exports.DocumentDiagnosticRequest = exports.DocumentDiagnosticReportKind = exports.DiagnosticServerCancellationData = void 0; + let vscode_jsonrpc_1 = require_main(); + let Is2 = require_is2(); + let messages_1 = require_messages2(); + let DiagnosticServerCancellationData; + (function (DiagnosticServerCancellationData2) { + function is2(value) { + const candidate = value; + return candidate && Is2.boolean(candidate.retriggerRequest); + } + DiagnosticServerCancellationData2.is = is2; + })( + (DiagnosticServerCancellationData = + exports.DiagnosticServerCancellationData || + (exports.DiagnosticServerCancellationData = {})) + ); + let DocumentDiagnosticReportKind; + (function (DocumentDiagnosticReportKind2) { + DocumentDiagnosticReportKind2['full'] = 'full'; + DocumentDiagnosticReportKind2['unChanged'] = 'unChanged'; + })( + (DocumentDiagnosticReportKind = + exports.DocumentDiagnosticReportKind || + (exports.DocumentDiagnosticReportKind = {})) + ); + let DocumentDiagnosticRequest; + (function (DocumentDiagnosticRequest2) { + DocumentDiagnosticRequest2.method = 'textDocument/diagnostic'; + DocumentDiagnosticRequest2.type = new messages_1.ProtocolRequestType( + DocumentDiagnosticRequest2.method + ); + DocumentDiagnosticRequest2.partialResult = new vscode_jsonrpc_1.ProgressType(); + })( + (DocumentDiagnosticRequest = + exports.DocumentDiagnosticRequest || + (exports.DocumentDiagnosticRequest = {})) + ); + let WorkspaceDiagnosticRequest; + (function (WorkspaceDiagnosticRequest2) { + WorkspaceDiagnosticRequest2.method = 'workspace/diagnostic'; + WorkspaceDiagnosticRequest2.type = new messages_1.ProtocolRequestType( + WorkspaceDiagnosticRequest2.method + ); + WorkspaceDiagnosticRequest2.partialResult = new vscode_jsonrpc_1.ProgressType(); + })( + (WorkspaceDiagnosticRequest = + exports.WorkspaceDiagnosticRequest || + (exports.WorkspaceDiagnosticRequest = {})) + ); + let DiagnosticRefreshRequest; + (function (DiagnosticRefreshRequest2) { + DiagnosticRefreshRequest2.method = `workspace/diagnostic/refresh`; + DiagnosticRefreshRequest2.type = new messages_1.ProtocolRequestType0( + DiagnosticRefreshRequest2.method + ); + })( + (DiagnosticRefreshRequest = + exports.DiagnosticRefreshRequest || + (exports.DiagnosticRefreshRequest = {})) + ); + }, +}); + +// client/node_modules/vscode-languageserver-protocol/lib/common/proposed.typeHierarchy.js +let require_proposed_typeHierarchy = __commonJS({ + 'client/node_modules/vscode-languageserver-protocol/lib/common/proposed.typeHierarchy.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.TypeHierarchySubtypesRequest = exports.TypeHierarchySupertypesRequest = exports.TypeHierarchyPrepareRequest = void 0; + let messages_1 = require_messages2(); + let TypeHierarchyPrepareRequest; + (function (TypeHierarchyPrepareRequest2) { + TypeHierarchyPrepareRequest2.method = 'textDocument/prepareTypeHierarchy'; + TypeHierarchyPrepareRequest2.type = new messages_1.ProtocolRequestType( + TypeHierarchyPrepareRequest2.method + ); + })( + (TypeHierarchyPrepareRequest = + exports.TypeHierarchyPrepareRequest || + (exports.TypeHierarchyPrepareRequest = {})) + ); + let TypeHierarchySupertypesRequest; + (function (TypeHierarchySupertypesRequest2) { + TypeHierarchySupertypesRequest2.method = 'typeHierarchy/supertypes'; + TypeHierarchySupertypesRequest2.type = new messages_1.ProtocolRequestType( + TypeHierarchySupertypesRequest2.method + ); + })( + (TypeHierarchySupertypesRequest = + exports.TypeHierarchySupertypesRequest || + (exports.TypeHierarchySupertypesRequest = {})) + ); + let TypeHierarchySubtypesRequest; + (function (TypeHierarchySubtypesRequest2) { + TypeHierarchySubtypesRequest2.method = 'typeHierarchy/subtypes'; + TypeHierarchySubtypesRequest2.type = new messages_1.ProtocolRequestType( + TypeHierarchySubtypesRequest2.method + ); + })( + (TypeHierarchySubtypesRequest = + exports.TypeHierarchySubtypesRequest || + (exports.TypeHierarchySubtypesRequest = {})) + ); + }, +}); + +// client/node_modules/vscode-languageserver-protocol/lib/common/proposed.inlineValue.js +let require_proposed_inlineValue = __commonJS({ + 'client/node_modules/vscode-languageserver-protocol/lib/common/proposed.inlineValue.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.InlineValuesRefreshRequest = exports.InlineValuesRequest = void 0; + let messages_1 = require_messages2(); + let InlineValuesRequest; + (function (InlineValuesRequest2) { + InlineValuesRequest2.method = 'textDocument/inlineValues'; + InlineValuesRequest2.type = new messages_1.ProtocolRequestType( + InlineValuesRequest2.method + ); + })( + (InlineValuesRequest = + exports.InlineValuesRequest || (exports.InlineValuesRequest = {})) + ); + let InlineValuesRefreshRequest; + (function (InlineValuesRefreshRequest2) { + InlineValuesRefreshRequest2.method = `workspace/inlineValues/refresh`; + InlineValuesRefreshRequest2.type = new messages_1.ProtocolRequestType0( + InlineValuesRefreshRequest2.method + ); + })( + (InlineValuesRefreshRequest = + exports.InlineValuesRefreshRequest || + (exports.InlineValuesRefreshRequest = {})) + ); + }, +}); + +// client/node_modules/vscode-languageserver-protocol/lib/common/api.js +let require_api2 = __commonJS({ + 'client/node_modules/vscode-languageserver-protocol/lib/common/api.js'( + exports + ) { + 'use strict'; + let __createBinding = + (exports && exports.__createBinding) || + (Object.create + ? function (o, m, k, k2) { + if (k2 === void 0) { + k2 = k; + } + Object.defineProperty(o, k2, { + enumerable: true, + get: function () { + return m[k]; + }, + }); + } + : function (o, m, k, k2) { + if (k2 === void 0) { + k2 = k; + } + o[k2] = m[k]; + }); + let __exportStar = + (exports && exports.__exportStar) || + function (m, exports2) { + for (let p in m) { + if ( + p !== 'default' && + !Object.prototype.hasOwnProperty.call(exports2, p) + ) { + __createBinding(exports2, m, p); + } + } + }; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.Proposed = exports.LSPErrorCodes = exports.createProtocolConnection = void 0; + __exportStar(require_main(), exports); + __exportStar(require_main2(), exports); + __exportStar(require_messages2(), exports); + __exportStar(require_protocol(), exports); + let connection_1 = require_connection2(); + Object.defineProperty(exports, 'createProtocolConnection', { + enumerable: true, + get: function () { + return connection_1.createProtocolConnection; + }, + }); + let LSPErrorCodes; + (function (LSPErrorCodes2) { + LSPErrorCodes2.lspReservedErrorRangeStart = -32899; + LSPErrorCodes2.RequestFailed = -32803; + LSPErrorCodes2.ServerCancelled = -32802; + LSPErrorCodes2.ContentModified = -32801; + LSPErrorCodes2.RequestCancelled = -32800; + LSPErrorCodes2.lspReservedErrorRangeEnd = -32800; + })((LSPErrorCodes = exports.LSPErrorCodes || (exports.LSPErrorCodes = {}))); + let diag = require_proposed_diagnostic(); + let typeh = require_proposed_typeHierarchy(); + let iv = require_proposed_inlineValue(); + let Proposed; + (function (Proposed2) { + Proposed2.DiagnosticServerCancellationData = + diag.DiagnosticServerCancellationData; + Proposed2.DocumentDiagnosticReportKind = + diag.DocumentDiagnosticReportKind; + Proposed2.DocumentDiagnosticRequest = diag.DocumentDiagnosticRequest; + Proposed2.WorkspaceDiagnosticRequest = diag.WorkspaceDiagnosticRequest; + Proposed2.DiagnosticRefreshRequest = diag.DiagnosticRefreshRequest; + Proposed2.TypeHierarchyPrepareRequest = typeh.TypeHierarchyPrepareRequest; + Proposed2.TypeHierarchySupertypesRequest = + typeh.TypeHierarchySupertypesRequest; + Proposed2.TypeHierarchySubtypesRequest = + typeh.TypeHierarchySubtypesRequest; + Proposed2.InlineValuesRequest = iv.InlineValuesRequest; + Proposed2.InlineValuesRefreshRequest = iv.InlineValuesRefreshRequest; + })((Proposed = exports.Proposed || (exports.Proposed = {}))); + }, +}); + +// client/node_modules/vscode-languageserver-protocol/lib/browser/main.js +let require_main3 = __commonJS({ + 'client/node_modules/vscode-languageserver-protocol/lib/browser/main.js'( + exports + ) { + 'use strict'; + let __createBinding = + (exports && exports.__createBinding) || + (Object.create + ? function (o, m, k, k2) { + if (k2 === void 0) { + k2 = k; + } + Object.defineProperty(o, k2, { + enumerable: true, + get: function () { + return m[k]; + }, + }); + } + : function (o, m, k, k2) { + if (k2 === void 0) { + k2 = k; + } + o[k2] = m[k]; + }); + let __exportStar = + (exports && exports.__exportStar) || + function (m, exports2) { + for (let p in m) { + if ( + p !== 'default' && + !Object.prototype.hasOwnProperty.call(exports2, p) + ) { + __createBinding(exports2, m, p); + } + } + }; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.createProtocolConnection = void 0; + let browser_1 = require_browser(); + __exportStar(require_browser(), exports); + __exportStar(require_api2(), exports); + function createProtocolConnection(reader, writer, logger, options) { + return (0, browser_1.createMessageConnection)( + reader, + writer, + logger, + options + ); + } + exports.createProtocolConnection = createProtocolConnection; + }, +}); + +// client/node_modules/vscode-languageclient/lib/common/configuration.js +let require_configuration = __commonJS({ + 'client/node_modules/vscode-languageclient/lib/common/configuration.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.toJSONObject = exports.ConfigurationFeature = void 0; + let vscode_1 = require('vscode'); + let vscode_languageserver_protocol_1 = require_main3(); + let ConfigurationFeature = class { + constructor(_client) { + this._client = _client; + } + fillClientCapabilities(capabilities) { + capabilities.workspace = capabilities.workspace || {}; + capabilities.workspace.configuration = true; + } + initialize() { + let client = this._client; + client.onRequest( + vscode_languageserver_protocol_1.ConfigurationRequest.type, + (params, token) => { + let configuration = (params2) => { + let result = []; + for (let item of params2.items) { + let resource = + item.scopeUri !== void 0 && item.scopeUri !== null + ? this._client.protocol2CodeConverter.asUri(item.scopeUri) + : void 0; + result.push( + this.getConfiguration( + resource, + item.section !== null ? item.section : void 0 + ) + ); + } + return result; + }; + let middleware = client.clientOptions.middleware.workspace; + return middleware && middleware.configuration + ? middleware.configuration(params, token, configuration) + : configuration(params, token); + } + ); + } + getConfiguration(resource, section) { + let result = null; + if (section) { + let index = section.lastIndexOf('.'); + if (index === -1) { + result = toJSONObject( + vscode_1.workspace.getConfiguration(void 0, resource).get(section) + ); + } else { + let config = vscode_1.workspace.getConfiguration( + section.substr(0, index), + resource + ); + if (config) { + result = toJSONObject(config.get(section.substr(index + 1))); + } + } + } else { + let config = vscode_1.workspace.getConfiguration(void 0, resource); + result = {}; + for (let key of Object.keys(config)) { + if (config.has(key)) { + result[key] = toJSONObject(config.get(key)); + } + } + } + if (result === void 0) { + result = null; + } + return result; + } + dispose() {} + }; + exports.ConfigurationFeature = ConfigurationFeature; + function toJSONObject(obj) { + if (obj) { + if (Array.isArray(obj)) { + return obj.map(toJSONObject); + } else if (typeof obj === 'object') { + const res = Object.create(null); + for (const key in obj) { + if (Object.prototype.hasOwnProperty.call(obj, key)) { + res[key] = toJSONObject(obj[key]); + } + } + return res; + } + } + return obj; + } + exports.toJSONObject = toJSONObject; + }, +}); + +// client/node_modules/vscode-languageclient/lib/common/utils/is.js +let require_is3 = __commonJS({ + 'client/node_modules/vscode-languageclient/lib/common/utils/is.js'(exports) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.asPromise = exports.thenable = exports.typedArray = exports.stringArray = exports.array = exports.func = exports.error = exports.number = exports.string = exports.boolean = void 0; + function boolean(value) { + return value === true || value === false; + } + exports.boolean = boolean; + function string(value) { + return typeof value === 'string' || value instanceof String; + } + exports.string = string; + function number(value) { + return typeof value === 'number' || value instanceof Number; + } + exports.number = number; + function error(value) { + return value instanceof Error; + } + exports.error = error; + function func(value) { + return typeof value === 'function'; + } + exports.func = func; + function array(value) { + return Array.isArray(value); + } + exports.array = array; + function stringArray(value) { + return array(value) && value.every((elem) => string(elem)); + } + exports.stringArray = stringArray; + function typedArray(value, check) { + return Array.isArray(value) && value.every(check); + } + exports.typedArray = typedArray; + function thenable(value) { + return value && func(value.then); + } + exports.thenable = thenable; + function asPromise(value) { + if (value instanceof Promise) { + return value; + } else if (thenable(value)) { + return new Promise((resolve, reject) => { + value.then( + (resolved) => resolve(resolved), + (error2) => reject(error2) + ); + }); + } else { + return Promise.resolve(value); + } + } + exports.asPromise = asPromise; + }, +}); + +// client/node_modules/vscode-languageclient/lib/common/protocolCompletionItem.js +let require_protocolCompletionItem = __commonJS({ + 'client/node_modules/vscode-languageclient/lib/common/protocolCompletionItem.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + let code = require('vscode'); + let ProtocolCompletionItem = class extends code.CompletionItem { + constructor(label) { + super(label); + } + }; + exports.default = ProtocolCompletionItem; + }, +}); + +// client/node_modules/vscode-languageclient/lib/common/protocolCodeLens.js +let require_protocolCodeLens = __commonJS({ + 'client/node_modules/vscode-languageclient/lib/common/protocolCodeLens.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + let code = require('vscode'); + let ProtocolCodeLens = class extends code.CodeLens { + constructor(range) { + super(range); + } + }; + exports.default = ProtocolCodeLens; + }, +}); + +// client/node_modules/vscode-languageclient/lib/common/protocolDocumentLink.js +let require_protocolDocumentLink = __commonJS({ + 'client/node_modules/vscode-languageclient/lib/common/protocolDocumentLink.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + let code = require('vscode'); + let ProtocolDocumentLink = class extends code.DocumentLink { + constructor(range, target) { + super(range, target); + } + }; + exports.default = ProtocolDocumentLink; + }, +}); + +// client/node_modules/vscode-languageclient/lib/common/protocolCodeAction.js +let require_protocolCodeAction = __commonJS({ + 'client/node_modules/vscode-languageclient/lib/common/protocolCodeAction.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + let vscode3 = require('vscode'); + let ProtocolCodeAction = class extends vscode3.CodeAction { + constructor(title, data) { + super(title); + this.data = data; + } + }; + exports.default = ProtocolCodeAction; + }, +}); + +// client/node_modules/vscode-languageclient/lib/common/protocolDiagnostic.js +let require_protocolDiagnostic = __commonJS({ + 'client/node_modules/vscode-languageclient/lib/common/protocolDiagnostic.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.ProtocolDiagnostic = exports.DiagnosticCode = void 0; + let vscode3 = require('vscode'); + let Is2 = require_is3(); + let DiagnosticCode; + (function (DiagnosticCode2) { + function is2(value) { + const candidate = value; + return ( + candidate !== void 0 && + candidate !== null && + (Is2.number(candidate.value) || Is2.string(candidate.value)) && + Is2.string(candidate.target) + ); + } + DiagnosticCode2.is = is2; + })( + (DiagnosticCode = exports.DiagnosticCode || (exports.DiagnosticCode = {})) + ); + let ProtocolDiagnostic = class extends vscode3.Diagnostic { + constructor(range, message, severity, data) { + super(range, message, severity); + this.data = data; + this.hasDiagnosticCode = false; + } + }; + exports.ProtocolDiagnostic = ProtocolDiagnostic; + }, +}); + +// client/node_modules/vscode-languageclient/lib/common/protocolCallHierarchyItem.js +let require_protocolCallHierarchyItem = __commonJS({ + 'client/node_modules/vscode-languageclient/lib/common/protocolCallHierarchyItem.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + let code = require('vscode'); + let ProtocolCallHierarchyItem = class extends code.CallHierarchyItem { + constructor(kind, name, detail, uri, range, selectionRange, data) { + super(kind, name, detail, uri, range, selectionRange); + if (data !== void 0) { + this.data = data; + } + } + }; + exports.default = ProtocolCallHierarchyItem; + }, +}); + +// client/node_modules/vscode-languageclient/lib/common/protocolTypeHierarchyItem.js +let require_protocolTypeHierarchyItem = __commonJS({ + 'client/node_modules/vscode-languageclient/lib/common/protocolTypeHierarchyItem.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + let code = require('vscode'); + let ProtocolTypeHierarchyItem = class extends code.TypeHierarchyItem { + constructor(kind, name, detail, uri, range, selectionRange, data) { + super(kind, name, detail, uri, range, selectionRange); + if (data !== void 0) { + this.data = data; + } + } + }; + exports.default = ProtocolTypeHierarchyItem; + }, +}); + +// client/node_modules/vscode-languageclient/lib/common/protocolWorkspaceSymbol.js +let require_protocolWorkspaceSymbol = __commonJS({ + 'client/node_modules/vscode-languageclient/lib/common/protocolWorkspaceSymbol.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + let code = require('vscode'); + let WorkspaceSymbol = class extends code.SymbolInformation { + constructor(name, kind, containerName, locationOrUri, data) { + const hasRange = !(locationOrUri instanceof code.Uri); + super( + name, + kind, + containerName, + hasRange + ? locationOrUri + : new code.Location(locationOrUri, new code.Range(0, 0, 0, 0)) + ); + this.hasRange = hasRange; + if (data !== void 0) { + this.data = data; + } + } + }; + exports.default = WorkspaceSymbol; + }, +}); + +// client/node_modules/vscode-languageclient/lib/common/codeConverter.js +let require_codeConverter = __commonJS({ + 'client/node_modules/vscode-languageclient/lib/common/codeConverter.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.createConverter = void 0; + let code = require('vscode'); + let proto = require_main3(); + let Is2 = require_is3(); + let protocolCompletionItem_1 = require_protocolCompletionItem(); + let protocolCodeLens_1 = require_protocolCodeLens(); + let protocolDocumentLink_1 = require_protocolDocumentLink(); + let protocolCodeAction_1 = require_protocolCodeAction(); + let protocolDiagnostic_1 = require_protocolDiagnostic(); + let protocolCallHierarchyItem_1 = require_protocolCallHierarchyItem(); + let vscode_languageserver_protocol_1 = require_main3(); + let protocolTypeHierarchyItem_1 = require_protocolTypeHierarchyItem(); + let protocolWorkspaceSymbol_1 = require_protocolWorkspaceSymbol(); + let InsertReplaceRange; + (function (InsertReplaceRange2) { + function is2(value) { + const candidate = value; + return candidate && !!candidate.inserting && !!candidate.replacing; + } + InsertReplaceRange2.is = is2; + })(InsertReplaceRange || (InsertReplaceRange = {})); + function createConverter(uriConverter) { + const nullConverter = (value) => value.toString(); + const _uriConverter = uriConverter || nullConverter; + function asUri(value) { + return _uriConverter(value); + } + function asTextDocumentIdentifier(textDocument) { + return { + uri: _uriConverter(textDocument.uri), + }; + } + function asVersionedTextDocumentIdentifier(textDocument) { + return { + uri: _uriConverter(textDocument.uri), + version: textDocument.version, + }; + } + function asOpenTextDocumentParams(textDocument) { + return { + textDocument: { + uri: _uriConverter(textDocument.uri), + languageId: textDocument.languageId, + version: textDocument.version, + text: textDocument.getText(), + }, + }; + } + function isTextDocumentChangeEvent(value) { + let candidate = value; + return !!candidate.document && !!candidate.contentChanges; + } + function isTextDocument(value) { + let candidate = value; + return !!candidate.uri && !!candidate.version; + } + function asChangeTextDocumentParams(arg) { + if (isTextDocument(arg)) { + let result = { + textDocument: { + uri: _uriConverter(arg.uri), + version: arg.version, + }, + contentChanges: [{ text: arg.getText() }], + }; + return result; + } else if (isTextDocumentChangeEvent(arg)) { + let document2 = arg.document; + let result = { + textDocument: { + uri: _uriConverter(document2.uri), + version: document2.version, + }, + contentChanges: arg.contentChanges.map((change) => { + let range = change.range; + return { + range: { + start: { + line: range.start.line, + character: range.start.character, + }, + end: { line: range.end.line, character: range.end.character }, + }, + rangeLength: change.rangeLength, + text: change.text, + }; + }), + }; + return result; + } else { + throw Error('Unsupported text document change parameter'); + } + } + function asCloseTextDocumentParams(textDocument) { + return { + textDocument: asTextDocumentIdentifier(textDocument), + }; + } + function asSaveTextDocumentParams(textDocument, includeContent = false) { + let result = { + textDocument: asTextDocumentIdentifier(textDocument), + }; + if (includeContent) { + result.text = textDocument.getText(); + } + return result; + } + function asTextDocumentSaveReason(reason) { + switch (reason) { + case code.TextDocumentSaveReason.Manual: + return proto.TextDocumentSaveReason.Manual; + case code.TextDocumentSaveReason.AfterDelay: + return proto.TextDocumentSaveReason.AfterDelay; + case code.TextDocumentSaveReason.FocusOut: + return proto.TextDocumentSaveReason.FocusOut; + } + return proto.TextDocumentSaveReason.Manual; + } + function asWillSaveTextDocumentParams(event) { + return { + textDocument: asTextDocumentIdentifier(event.document), + reason: asTextDocumentSaveReason(event.reason), + }; + } + function asDidCreateFilesParams(event) { + return { + files: event.files.map((fileUri) => ({ + uri: _uriConverter(fileUri), + })), + }; + } + function asDidRenameFilesParams(event) { + return { + files: event.files.map((file) => ({ + oldUri: _uriConverter(file.oldUri), + newUri: _uriConverter(file.newUri), + })), + }; + } + function asDidDeleteFilesParams(event) { + return { + files: event.files.map((fileUri) => ({ + uri: _uriConverter(fileUri), + })), + }; + } + function asWillCreateFilesParams(event) { + return { + files: event.files.map((fileUri) => ({ + uri: _uriConverter(fileUri), + })), + }; + } + function asWillRenameFilesParams(event) { + return { + files: event.files.map((file) => ({ + oldUri: _uriConverter(file.oldUri), + newUri: _uriConverter(file.newUri), + })), + }; + } + function asWillDeleteFilesParams(event) { + return { + files: event.files.map((fileUri) => ({ + uri: _uriConverter(fileUri), + })), + }; + } + function asTextDocumentPositionParams(textDocument, position) { + return { + textDocument: asTextDocumentIdentifier(textDocument), + position: asWorkerPosition(position), + }; + } + function asCompletionTriggerKind(triggerKind) { + switch (triggerKind) { + case code.CompletionTriggerKind.TriggerCharacter: + return proto.CompletionTriggerKind.TriggerCharacter; + case code.CompletionTriggerKind.TriggerForIncompleteCompletions: + return proto.CompletionTriggerKind.TriggerForIncompleteCompletions; + default: + return proto.CompletionTriggerKind.Invoked; + } + } + function asCompletionParams(textDocument, position, context) { + return { + textDocument: asTextDocumentIdentifier(textDocument), + position: asWorkerPosition(position), + context: { + triggerKind: asCompletionTriggerKind(context.triggerKind), + triggerCharacter: context.triggerCharacter, + }, + }; + } + function asSignatureHelpTriggerKind(triggerKind) { + switch (triggerKind) { + case code.SignatureHelpTriggerKind.Invoke: + return proto.SignatureHelpTriggerKind.Invoked; + case code.SignatureHelpTriggerKind.TriggerCharacter: + return proto.SignatureHelpTriggerKind.TriggerCharacter; + case code.SignatureHelpTriggerKind.ContentChange: + return proto.SignatureHelpTriggerKind.ContentChange; + } + } + function asParameterInformation(value) { + return { + label: value.label, + }; + } + function asParameterInformations(values) { + return values.map(asParameterInformation); + } + function asSignatureInformation(value) { + return { + label: value.label, + parameters: asParameterInformations(value.parameters), + }; + } + function asSignatureInformations(values) { + return values.map(asSignatureInformation); + } + function asSignatureHelp(value) { + if (value === void 0) { + return value; + } + return { + signatures: asSignatureInformations(value.signatures), + activeSignature: value.activeSignature, + activeParameter: value.activeParameter, + }; + } + function asSignatureHelpParams(textDocument, position, context) { + return { + textDocument: asTextDocumentIdentifier(textDocument), + position: asWorkerPosition(position), + context: { + isRetrigger: context.isRetrigger, + triggerCharacter: context.triggerCharacter, + triggerKind: asSignatureHelpTriggerKind(context.triggerKind), + activeSignatureHelp: asSignatureHelp(context.activeSignatureHelp), + }, + }; + } + function asWorkerPosition(position) { + return { line: position.line, character: position.character }; + } + function asPosition(value) { + if (value === void 0 || value === null) { + return value; + } + return { + line: + value.line > vscode_languageserver_protocol_1.uinteger.MAX_VALUE + ? vscode_languageserver_protocol_1.uinteger.MAX_VALUE + : value.line, + character: + value.character > + vscode_languageserver_protocol_1.uinteger.MAX_VALUE + ? vscode_languageserver_protocol_1.uinteger.MAX_VALUE + : value.character, + }; + } + function asPositions(value) { + let result = []; + for (let elem of value) { + result.push(asPosition(elem)); + } + return result; + } + function asRange(value) { + if (value === void 0 || value === null) { + return value; + } + return { start: asPosition(value.start), end: asPosition(value.end) }; + } + function asLocation(value) { + if (value === void 0 || value === null) { + return value; + } + return proto.Location.create(asUri(value.uri), asRange(value.range)); + } + function asDiagnosticSeverity(value) { + switch (value) { + case code.DiagnosticSeverity.Error: + return proto.DiagnosticSeverity.Error; + case code.DiagnosticSeverity.Warning: + return proto.DiagnosticSeverity.Warning; + case code.DiagnosticSeverity.Information: + return proto.DiagnosticSeverity.Information; + case code.DiagnosticSeverity.Hint: + return proto.DiagnosticSeverity.Hint; + } + } + function asDiagnosticTags(tags) { + if (!tags) { + return void 0; + } + let result = []; + for (let tag of tags) { + let converted = asDiagnosticTag(tag); + if (converted !== void 0) { + result.push(converted); + } + } + return result.length > 0 ? result : void 0; + } + function asDiagnosticTag(tag) { + switch (tag) { + case code.DiagnosticTag.Unnecessary: + return proto.DiagnosticTag.Unnecessary; + case code.DiagnosticTag.Deprecated: + return proto.DiagnosticTag.Deprecated; + default: + return void 0; + } + } + function asRelatedInformation(item) { + return { + message: item.message, + location: asLocation(item.location), + }; + } + function asRelatedInformations(items) { + return items.map(asRelatedInformation); + } + function asDiagnosticCode(value) { + if (value === void 0 || value === null) { + return void 0; + } + if (Is2.number(value) || Is2.string(value)) { + return value; + } + return { value: value.value, target: asUri(value.target) }; + } + function asDiagnostic(item) { + const result = proto.Diagnostic.create( + asRange(item.range), + item.message + ); + const protocolDiagnostic = + item instanceof protocolDiagnostic_1.ProtocolDiagnostic + ? item + : void 0; + if ( + protocolDiagnostic !== void 0 && + protocolDiagnostic.data !== void 0 + ) { + result.data = protocolDiagnostic.data; + } + const code2 = asDiagnosticCode(item.code); + if (protocolDiagnostic_1.DiagnosticCode.is(code2)) { + if ( + protocolDiagnostic !== void 0 && + protocolDiagnostic.hasDiagnosticCode + ) { + result.code = code2; + } else { + result.code = code2.value; + result.codeDescription = { href: code2.target }; + } + } else { + result.code = code2; + } + if (Is2.number(item.severity)) { + result.severity = asDiagnosticSeverity(item.severity); + } + if (Array.isArray(item.tags)) { + result.tags = asDiagnosticTags(item.tags); + } + if (item.relatedInformation) { + result.relatedInformation = asRelatedInformations( + item.relatedInformation + ); + } + if (item.source) { + result.source = item.source; + } + return result; + } + function asDiagnostics(items) { + if (items === void 0 || items === null) { + return items; + } + return items.map(asDiagnostic); + } + function asDocumentation(format, documentation) { + switch (format) { + case '$string': + return documentation; + case proto.MarkupKind.PlainText: + return { kind: format, value: documentation }; + case proto.MarkupKind.Markdown: + return { kind: format, value: documentation.value }; + default: + return `Unsupported Markup content received. Kind is: ${format}`; + } + } + function asCompletionItemTag(tag) { + switch (tag) { + case code.CompletionItemTag.Deprecated: + return proto.CompletionItemTag.Deprecated; + } + return void 0; + } + function asCompletionItemTags(tags) { + if (tags === void 0) { + return tags; + } + const result = []; + for (let tag of tags) { + const converted = asCompletionItemTag(tag); + if (converted !== void 0) { + result.push(converted); + } + } + return result; + } + function asCompletionItemKind(value, original) { + if (original !== void 0) { + return original; + } + return value + 1; + } + function asCompletionItem(item, labelDetailsSupport = false) { + let label; + let labelDetails; + if (Is2.string(item.label)) { + label = item.label; + } else { + label = item.label.label; + if ( + labelDetailsSupport && + (item.label.detail !== void 0 || item.label.description !== void 0) + ) { + labelDetails = { + detail: item.label.detail, + description: item.label.description, + }; + } + } + let result = { label }; + if (labelDetails !== void 0) { + result.labelDetails = labelDetails; + } + let protocolItem = + item instanceof protocolCompletionItem_1.default ? item : void 0; + if (item.detail) { + result.detail = item.detail; + } + if (item.documentation) { + if (!protocolItem || protocolItem.documentationFormat === '$string') { + result.documentation = item.documentation; + } else { + result.documentation = asDocumentation( + protocolItem.documentationFormat, + item.documentation + ); + } + } + if (item.filterText) { + result.filterText = item.filterText; + } + fillPrimaryInsertText(result, item); + if (Is2.number(item.kind)) { + result.kind = asCompletionItemKind( + item.kind, + protocolItem && protocolItem.originalItemKind + ); + } + if (item.sortText) { + result.sortText = item.sortText; + } + if (item.additionalTextEdits) { + result.additionalTextEdits = asTextEdits(item.additionalTextEdits); + } + if (item.commitCharacters) { + result.commitCharacters = item.commitCharacters.slice(); + } + if (item.command) { + result.command = asCommand(item.command); + } + if (item.preselect === true || item.preselect === false) { + result.preselect = item.preselect; + } + const tags = asCompletionItemTags(item.tags); + if (protocolItem) { + if (protocolItem.data !== void 0) { + result.data = protocolItem.data; + } + if ( + protocolItem.deprecated === true || + protocolItem.deprecated === false + ) { + if ( + protocolItem.deprecated === true && + tags !== void 0 && + tags.length > 0 + ) { + const index = tags.indexOf(code.CompletionItemTag.Deprecated); + if (index !== -1) { + tags.splice(index, 1); + } + } + result.deprecated = protocolItem.deprecated; + } + if (protocolItem.insertTextMode !== void 0) { + result.insertTextMode = protocolItem.insertTextMode; + } + } + if (tags !== void 0 && tags.length > 0) { + result.tags = tags; + } + if (result.insertTextMode === void 0 && item.keepWhitespace === true) { + result.insertTextMode = + vscode_languageserver_protocol_1.InsertTextMode.adjustIndentation; + } + return result; + } + function fillPrimaryInsertText(target, source) { + let format = proto.InsertTextFormat.PlainText; + let text = void 0; + let range = void 0; + if (source.textEdit) { + text = source.textEdit.newText; + range = source.textEdit.range; + } else if (source.insertText instanceof code.SnippetString) { + format = proto.InsertTextFormat.Snippet; + text = source.insertText.value; + } else { + text = source.insertText; + } + if (source.range) { + range = source.range; + } + target.insertTextFormat = format; + if (source.fromEdit && text !== void 0 && range !== void 0) { + target.textEdit = asCompletionTextEdit(text, range); + } else { + target.insertText = text; + } + } + function asCompletionTextEdit(newText, range) { + if (InsertReplaceRange.is(range)) { + return proto.InsertReplaceEdit.create( + newText, + asRange(range.inserting), + asRange(range.replacing) + ); + } else { + return { newText, range: asRange(range) }; + } + } + function asTextEdit(edit) { + return { range: asRange(edit.range), newText: edit.newText }; + } + function asTextEdits(edits) { + if (edits === void 0 || edits === null) { + return edits; + } + return edits.map(asTextEdit); + } + function asSymbolKind(item) { + if (item <= code.SymbolKind.TypeParameter) { + return item + 1; + } + return proto.SymbolKind.Property; + } + function asSymbolTag(item) { + return item; + } + function asSymbolTags(items) { + return items.map(asSymbolTag); + } + function asReferenceParams(textDocument, position, options) { + return { + textDocument: asTextDocumentIdentifier(textDocument), + position: asWorkerPosition(position), + context: { includeDeclaration: options.includeDeclaration }, + }; + } + function asCodeAction(item) { + let result = proto.CodeAction.create(item.title); + if ( + item instanceof protocolCodeAction_1.default && + item.data !== void 0 + ) { + result.data = item.data; + } + if (item.kind !== void 0) { + result.kind = asCodeActionKind(item.kind); + } + if (item.diagnostics !== void 0) { + result.diagnostics = asDiagnostics(item.diagnostics); + } + if (item.edit !== void 0) { + throw new Error( + `VS Code code actions can only be converted to a protocol code action without an edit.` + ); + } + if (item.command !== void 0) { + result.command = asCommand(item.command); + } + if (item.isPreferred !== void 0) { + result.isPreferred = item.isPreferred; + } + if (item.disabled !== void 0) { + result.disabled = { reason: item.disabled.reason }; + } + return result; + } + function asCodeActionContext(context) { + if (context === void 0 || context === null) { + return context; + } + let only; + if (context.only && Is2.string(context.only.value)) { + only = [context.only.value]; + } + return proto.CodeActionContext.create( + asDiagnostics(context.diagnostics), + only, + asCodeActionTriggerKind(context.triggerKind) + ); + } + function asCodeActionTriggerKind(kind) { + switch (kind) { + case code.CodeActionTriggerKind.Invoke: + return proto.CodeActionTriggerKind.Invoked; + case code.CodeActionTriggerKind.Automatic: + return proto.CodeActionTriggerKind.Automatic; + default: + return void 0; + } + } + function asCodeActionKind(item) { + if (item === void 0 || item === null) { + return void 0; + } + return item.value; + } + function asInlineValuesContext(context) { + if (context === void 0 || context === null) { + return context; + } + return proto.InlineValuesContext.create(context.stoppedLocation); + } + function asCommand(item) { + let result = proto.Command.create(item.title, item.command); + if (item.arguments) { + result.arguments = item.arguments; + } + return result; + } + function asCodeLens(item) { + let result = proto.CodeLens.create(asRange(item.range)); + if (item.command) { + result.command = asCommand(item.command); + } + if (item instanceof protocolCodeLens_1.default) { + if (item.data) { + result.data = item.data; + } + } + return result; + } + function asFormattingOptions(options, fileOptions) { + const result = { + tabSize: options.tabSize, + insertSpaces: options.insertSpaces, + }; + if (fileOptions.trimTrailingWhitespace) { + result.trimTrailingWhitespace = true; + } + if (fileOptions.trimFinalNewlines) { + result.trimFinalNewlines = true; + } + if (fileOptions.insertFinalNewline) { + result.insertFinalNewline = true; + } + return result; + } + function asDocumentSymbolParams(textDocument) { + return { + textDocument: asTextDocumentIdentifier(textDocument), + }; + } + function asCodeLensParams(textDocument) { + return { + textDocument: asTextDocumentIdentifier(textDocument), + }; + } + function asDocumentLink(item) { + let result = proto.DocumentLink.create(asRange(item.range)); + if (item.target) { + result.target = asUri(item.target); + } + if (item.tooltip !== void 0) { + result.tooltip = item.tooltip; + } + let protocolItem = + item instanceof protocolDocumentLink_1.default ? item : void 0; + if (protocolItem && protocolItem.data) { + result.data = protocolItem.data; + } + return result; + } + function asDocumentLinkParams(textDocument) { + return { + textDocument: asTextDocumentIdentifier(textDocument), + }; + } + function asCallHierarchyItem(value) { + const result = { + name: value.name, + kind: asSymbolKind(value.kind), + uri: asUri(value.uri), + range: asRange(value.range), + selectionRange: asRange(value.selectionRange), + }; + if (value.detail !== void 0 && value.detail.length > 0) { + result.detail = value.detail; + } + if (value.tags !== void 0) { + result.tags = asSymbolTags(value.tags); + } + if ( + value instanceof protocolCallHierarchyItem_1.default && + value.data !== void 0 + ) { + result.data = value.data; + } + return result; + } + function asTypeHierarchyItem(value) { + const result = { + name: value.name, + kind: asSymbolKind(value.kind), + uri: asUri(value.uri), + range: asRange(value.range), + selectionRange: asRange(value.selectionRange), + }; + if (value.detail !== void 0 && value.detail.length > 0) { + result.detail = value.detail; + } + if (value.tags !== void 0) { + result.tags = asSymbolTags(value.tags); + } + if ( + value instanceof protocolTypeHierarchyItem_1.default && + value.data !== void 0 + ) { + result.data = value.data; + } + return result; + } + function asWorkspaceSymbol(item) { + const result = + item instanceof protocolWorkspaceSymbol_1.default + ? { + name: item.name, + kind: asSymbolKind(item.kind), + location: item.hasRange + ? asLocation(item.location) + : { uri: _uriConverter(item.location.uri) }, + data: item.data, + } + : { + name: item.name, + kind: asSymbolKind(item.kind), + location: asLocation(item.location), + }; + if (item.tags !== void 0) { + result.tags = asSymbolTags(item.tags); + } + if (item.containerName !== '') { + result.containerName = item.containerName; + } + return result; + } + return { + asUri, + asTextDocumentIdentifier, + asVersionedTextDocumentIdentifier, + asOpenTextDocumentParams, + asChangeTextDocumentParams, + asCloseTextDocumentParams, + asSaveTextDocumentParams, + asWillSaveTextDocumentParams, + asDidCreateFilesParams, + asDidRenameFilesParams, + asDidDeleteFilesParams, + asWillCreateFilesParams, + asWillRenameFilesParams, + asWillDeleteFilesParams, + asTextDocumentPositionParams, + asCompletionParams, + asSignatureHelpParams, + asWorkerPosition, + asRange, + asPosition, + asPositions, + asLocation, + asDiagnosticSeverity, + asDiagnosticTag, + asDiagnostic, + asDiagnostics, + asCompletionItem, + asTextEdit, + asSymbolKind, + asSymbolTag, + asSymbolTags, + asReferenceParams, + asCodeAction, + asCodeActionContext, + asInlineValuesContext, + asCommand, + asCodeLens, + asFormattingOptions, + asDocumentSymbolParams, + asCodeLensParams, + asDocumentLink, + asDocumentLinkParams, + asCallHierarchyItem, + asTypeHierarchyItem, + asWorkspaceSymbol, + }; + } + exports.createConverter = createConverter; + }, +}); + +// client/node_modules/vscode-languageclient/lib/common/protocolConverter.js +let require_protocolConverter = __commonJS({ + 'client/node_modules/vscode-languageclient/lib/common/protocolConverter.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.createConverter = void 0; + let code = require('vscode'); + let ls2 = require_main3(); + let Is2 = require_is3(); + let protocolCompletionItem_1 = require_protocolCompletionItem(); + let protocolCodeLens_1 = require_protocolCodeLens(); + let protocolDocumentLink_1 = require_protocolDocumentLink(); + let protocolCodeAction_1 = require_protocolCodeAction(); + let protocolDiagnostic_1 = require_protocolDiagnostic(); + let protocolCallHierarchyItem_1 = require_protocolCallHierarchyItem(); + let vscode_languageserver_protocol_1 = require_main3(); + let protocolTypeHierarchyItem_1 = require_protocolTypeHierarchyItem(); + let protocolWorkspaceSymbol_1 = require_protocolWorkspaceSymbol(); + let CodeBlock; + (function (CodeBlock2) { + function is2(value) { + let candidate = value; + return ( + candidate && + Is2.string(candidate.language) && + Is2.string(candidate.value) + ); + } + CodeBlock2.is = is2; + })(CodeBlock || (CodeBlock = {})); + function createConverter(uriConverter, trustMarkdown, supportHtml) { + const nullConverter = (value) => code.Uri.parse(value); + const _uriConverter = uriConverter || nullConverter; + function asUri(value) { + return _uriConverter(value); + } + function asDiagnostics(diagnostics) { + return diagnostics.map(asDiagnostic); + } + function asDiagnostic(diagnostic) { + let result = new protocolDiagnostic_1.ProtocolDiagnostic( + asRange(diagnostic.range), + diagnostic.message, + asDiagnosticSeverity(diagnostic.severity), + diagnostic.data + ); + if (diagnostic.code !== void 0) { + if (ls2.CodeDescription.is(diagnostic.codeDescription)) { + result.code = { + value: diagnostic.code, + target: asUri(diagnostic.codeDescription.href), + }; + } else if (protocolDiagnostic_1.DiagnosticCode.is(diagnostic.code)) { + result.hasDiagnosticCode = true; + result.code = { + value: diagnostic.code.value, + target: asUri(diagnostic.code.target), + }; + } else { + result.code = diagnostic.code; + } + } + if (diagnostic.source) { + result.source = diagnostic.source; + } + if (diagnostic.relatedInformation) { + result.relatedInformation = asRelatedInformation( + diagnostic.relatedInformation + ); + } + if (Array.isArray(diagnostic.tags)) { + result.tags = asDiagnosticTags(diagnostic.tags); + } + return result; + } + function asRelatedInformation(relatedInformation) { + return relatedInformation.map(asDiagnosticRelatedInformation); + } + function asDiagnosticRelatedInformation(information) { + return new code.DiagnosticRelatedInformation( + asLocation(information.location), + information.message + ); + } + function asDiagnosticTags(tags) { + if (!tags) { + return void 0; + } + let result = []; + for (let tag of tags) { + let converted = asDiagnosticTag(tag); + if (converted !== void 0) { + result.push(converted); + } + } + return result.length > 0 ? result : void 0; + } + function asDiagnosticTag(tag) { + switch (tag) { + case ls2.DiagnosticTag.Unnecessary: + return code.DiagnosticTag.Unnecessary; + case ls2.DiagnosticTag.Deprecated: + return code.DiagnosticTag.Deprecated; + default: + return void 0; + } + } + function asPosition(value) { + if (!value) { + return void 0; + } + return new code.Position(value.line, value.character); + } + function asRange(value) { + if (!value) { + return void 0; + } + return new code.Range(asPosition(value.start), asPosition(value.end)); + } + function asRanges(value) { + return value.map((value2) => asRange(value2)); + } + function asDiagnosticSeverity(value) { + if (value === void 0 || value === null) { + return code.DiagnosticSeverity.Error; + } + switch (value) { + case ls2.DiagnosticSeverity.Error: + return code.DiagnosticSeverity.Error; + case ls2.DiagnosticSeverity.Warning: + return code.DiagnosticSeverity.Warning; + case ls2.DiagnosticSeverity.Information: + return code.DiagnosticSeverity.Information; + case ls2.DiagnosticSeverity.Hint: + return code.DiagnosticSeverity.Hint; + } + return code.DiagnosticSeverity.Error; + } + function asHoverContent(value) { + if (Is2.string(value)) { + return asMarkdownString(value); + } else if (CodeBlock.is(value)) { + let result = asMarkdownString(); + return result.appendCodeblock(value.value, value.language); + } else if (Array.isArray(value)) { + let result = []; + for (let element of value) { + let item = asMarkdownString(); + if (CodeBlock.is(element)) { + item.appendCodeblock(element.value, element.language); + } else { + item.appendMarkdown(element); + } + result.push(item); + } + return result; + } else { + let result; + switch (value.kind) { + case ls2.MarkupKind.Markdown: + return asMarkdownString(value.value); + case ls2.MarkupKind.PlainText: + result = asMarkdownString(); + result.appendText(value.value); + return result; + default: + result = asMarkdownString(); + result.appendText( + `Unsupported Markup content received. Kind is: ${value.kind}` + ); + return result; + } + } + } + function asDocumentation(value) { + if (Is2.string(value)) { + return value; + } else { + switch (value.kind) { + case ls2.MarkupKind.Markdown: + return asMarkdownString(value.value); + case ls2.MarkupKind.PlainText: + return value.value; + default: + return `Unsupported Markup content received. Kind is: ${value.kind}`; + } + } + } + function asMarkdownString(value) { + const result = new code.MarkdownString(value); + result.isTrusted = trustMarkdown; + result.supportHtml = supportHtml; + return result; + } + function asHover(hover) { + if (!hover) { + return void 0; + } + return new code.Hover( + asHoverContent(hover.contents), + asRange(hover.range) + ); + } + function asCompletionResult(result, allCommitCharacters) { + if (!result) { + return void 0; + } + if (Array.isArray(result)) { + let items = result; + return items.map((item) => + asCompletionItem(item, allCommitCharacters) + ); + } + const list = result; + const rangeDefaults = list.itemDefaults?.editRange; + const [range, inserting, replacing] = ls2.Range.is(rangeDefaults) + ? [asRange(rangeDefaults), void 0, void 0] + : rangeDefaults !== void 0 + ? [ + void 0, + asRange(rangeDefaults.insert), + asRange(rangeDefaults.replace), + ] + : [void 0, void 0, void 0]; + const commitCharacterDefaults = + list.itemDefaults?.commitCharacters ?? allCommitCharacters; + return new code.CompletionList( + list.items.map((item) => { + const result2 = asCompletionItem( + item, + commitCharacterDefaults, + list.itemDefaults?.insertTextMode, + list.itemDefaults?.insertTextFormat + ); + if (result2.range === void 0) { + if (range !== void 0) { + result2.range = range; + } else if (inserting !== void 0 && replacing !== void 0) { + result2.range = { inserting, replacing }; + } + } + return result2; + }), + list.isIncomplete + ); + } + function asCompletionItemKind(value) { + if ( + ls2.CompletionItemKind.Text <= value && + value <= ls2.CompletionItemKind.TypeParameter + ) { + return [value - 1, void 0]; + } + return [code.CompletionItemKind.Text, value]; + } + function asCompletionItemTag(tag) { + switch (tag) { + case ls2.CompletionItemTag.Deprecated: + return code.CompletionItemTag.Deprecated; + } + return void 0; + } + function asCompletionItemTags(tags) { + if (tags === void 0 || tags === null) { + return []; + } + const result = []; + for (const tag of tags) { + const converted = asCompletionItemTag(tag); + if (converted !== void 0) { + result.push(converted); + } + } + return result; + } + function asCompletionItem( + item, + defaultCommitCharacters, + defaultInsertTextMode, + defaultInsertTextFormat + ) { + const tags = asCompletionItemTags(item.tags); + const label = asCompletionItemLabel(item); + const result = new protocolCompletionItem_1.default(label); + if (item.detail) { + result.detail = item.detail; + } + if (item.documentation) { + result.documentation = asDocumentation(item.documentation); + result.documentationFormat = Is2.string(item.documentation) + ? '$string' + : item.documentation.kind; + } + if (item.filterText) { + result.filterText = item.filterText; + } + const insertText = asCompletionInsertText( + item, + defaultInsertTextFormat + ); + if (insertText) { + result.insertText = insertText.text; + result.range = insertText.range; + result.fromEdit = insertText.fromEdit; + } + if (Is2.number(item.kind)) { + let [itemKind, original] = asCompletionItemKind(item.kind); + result.kind = itemKind; + if (original) { + result.originalItemKind = original; + } + } + if (item.sortText) { + result.sortText = item.sortText; + } + if (item.additionalTextEdits) { + result.additionalTextEdits = asTextEdits(item.additionalTextEdits); + } + const commitCharacters = + item.commitCharacters !== void 0 + ? Is2.stringArray(item.commitCharacters) + ? item.commitCharacters + : void 0 + : defaultCommitCharacters; + if (commitCharacters) { + result.commitCharacters = commitCharacters.slice(); + } + if (item.command) { + result.command = asCommand(item.command); + } + if (item.deprecated === true || item.deprecated === false) { + result.deprecated = item.deprecated; + if (item.deprecated === true) { + tags.push(code.CompletionItemTag.Deprecated); + } + } + if (item.preselect === true || item.preselect === false) { + result.preselect = item.preselect; + } + if (item.data !== void 0) { + result.data = item.data; + } + if (tags.length > 0) { + result.tags = tags; + } + const insertTextMode = item.insertTextMode ?? defaultInsertTextMode; + if (insertTextMode !== void 0) { + result.insertTextMode = insertTextMode; + if ( + insertTextMode === + vscode_languageserver_protocol_1.InsertTextMode.asIs + ) { + result.keepWhitespace = true; + } + } + return result; + } + function asCompletionItemLabel(item) { + if ( + vscode_languageserver_protocol_1.CompletionItemLabelDetails.is( + item.labelDetails + ) + ) { + return { + label: item.label, + detail: item.labelDetails.detail, + description: item.labelDetails.description, + }; + } else { + return item.label; + } + } + function asCompletionInsertText(item, defaultInsertTextFormat) { + const insertTextFormat = + item.insertTextFormat ?? defaultInsertTextFormat; + if (item.textEdit) { + if (insertTextFormat === ls2.InsertTextFormat.Snippet) { + return { + text: new code.SnippetString(item.textEdit.newText), + range: asCompletionRange(item.textEdit), + fromEdit: true, + }; + } else { + return { + text: item.textEdit.newText, + range: asCompletionRange(item.textEdit), + fromEdit: true, + }; + } + } else if (item.insertText) { + if (insertTextFormat === ls2.InsertTextFormat.Snippet) { + return { + text: new code.SnippetString(item.insertText), + fromEdit: false, + }; + } else { + return { text: item.insertText, fromEdit: false }; + } + } else { + return void 0; + } + } + function asCompletionRange(value) { + if (ls2.InsertReplaceEdit.is(value)) { + return { + inserting: asRange(value.insert), + replacing: asRange(value.replace), + }; + } else { + return asRange(value.range); + } + } + function asTextEdit(edit) { + if (!edit) { + return void 0; + } + return new code.TextEdit(asRange(edit.range), edit.newText); + } + function asTextEdits(items) { + if (!items) { + return void 0; + } + return items.map(asTextEdit); + } + function asSignatureHelp(item) { + if (!item) { + return void 0; + } + let result = new code.SignatureHelp(); + if (Is2.number(item.activeSignature)) { + result.activeSignature = item.activeSignature; + } else { + result.activeSignature = 0; + } + if (Is2.number(item.activeParameter)) { + result.activeParameter = item.activeParameter; + } else { + result.activeParameter = 0; + } + if (item.signatures) { + result.signatures = asSignatureInformations(item.signatures); + } + return result; + } + function asSignatureInformations(items) { + return items.map(asSignatureInformation); + } + function asSignatureInformation(item) { + let result = new code.SignatureInformation(item.label); + if (item.documentation !== void 0) { + result.documentation = asDocumentation(item.documentation); + } + if (item.parameters !== void 0) { + result.parameters = asParameterInformations(item.parameters); + } + if (item.activeParameter !== void 0) { + result.activeParameter = item.activeParameter; + } + { + return result; + } + } + function asParameterInformations(item) { + return item.map(asParameterInformation); + } + function asParameterInformation(item) { + let result = new code.ParameterInformation(item.label); + if (item.documentation) { + result.documentation = asDocumentation(item.documentation); + } + return result; + } + function asLocation(item) { + if (!item) { + return void 0; + } + return new code.Location(_uriConverter(item.uri), asRange(item.range)); + } + function asDeclarationResult(item) { + if (!item) { + return void 0; + } + return asLocationResult(item); + } + function asDefinitionResult(item) { + if (!item) { + return void 0; + } + return asLocationResult(item); + } + function asLocationLink(item) { + if (!item) { + return void 0; + } + let result = { + targetUri: _uriConverter(item.targetUri), + targetRange: asRange(item.targetRange), + originSelectionRange: asRange(item.originSelectionRange), + targetSelectionRange: asRange(item.targetSelectionRange), + }; + if (!result.targetSelectionRange) { + throw new Error(`targetSelectionRange must not be undefined or null`); + } + return result; + } + function asLocationResult(item) { + if (!item) { + return void 0; + } + if (Is2.array(item)) { + if (item.length === 0) { + return []; + } else if (ls2.LocationLink.is(item[0])) { + let links = item; + return links.map((link) => asLocationLink(link)); + } else { + let locations = item; + return locations.map((location2) => asLocation(location2)); + } + } else if (ls2.LocationLink.is(item)) { + return [asLocationLink(item)]; + } else { + return asLocation(item); + } + } + function asReferences(values) { + if (!values) { + return void 0; + } + return values.map((location2) => asLocation(location2)); + } + function asDocumentHighlights(values) { + if (!values) { + return void 0; + } + return values.map(asDocumentHighlight); + } + function asDocumentHighlight(item) { + let result = new code.DocumentHighlight(asRange(item.range)); + if (Is2.number(item.kind)) { + result.kind = asDocumentHighlightKind(item.kind); + } + return result; + } + function asDocumentHighlightKind(item) { + switch (item) { + case ls2.DocumentHighlightKind.Text: + return code.DocumentHighlightKind.Text; + case ls2.DocumentHighlightKind.Read: + return code.DocumentHighlightKind.Read; + case ls2.DocumentHighlightKind.Write: + return code.DocumentHighlightKind.Write; + } + return code.DocumentHighlightKind.Text; + } + function asSymbolInformations(values) { + if (!values) { + return void 0; + } + return values.map((information) => asSymbolInformation(information)); + } + function asSymbolKind(item) { + if (item <= ls2.SymbolKind.TypeParameter) { + return item - 1; + } + return code.SymbolKind.Property; + } + function asSymbolTag(value) { + switch (value) { + case ls2.SymbolTag.Deprecated: + return code.SymbolTag.Deprecated; + default: + return void 0; + } + } + function asSymbolTags(items) { + if (items === void 0 || items === null) { + return void 0; + } + const result = []; + for (const item of items) { + const converted = asSymbolTag(item); + if (converted !== void 0) { + result.push(converted); + } + } + return result.length === 0 ? void 0 : result; + } + function asSymbolInformation(item) { + const data = item.data; + const location2 = item.location; + const result = + location2.range === void 0 || data !== void 0 + ? new protocolWorkspaceSymbol_1.default( + item.name, + asSymbolKind(item.kind), + item.containerName ?? '', + location2.range === void 0 + ? _uriConverter(location2.uri) + : new code.Location( + _uriConverter(item.location.uri), + asRange(location2.range) + ), + data + ) + : new code.SymbolInformation( + item.name, + asSymbolKind(item.kind), + item.containerName ?? '', + new code.Location( + _uriConverter(item.location.uri), + asRange(location2.range) + ) + ); + fillTags(result, item); + return result; + } + function asDocumentSymbols(values) { + if (values === void 0 || values === null) { + return void 0; + } + return values.map(asDocumentSymbol); + } + function asDocumentSymbol(value) { + let result = new code.DocumentSymbol( + value.name, + value.detail || '', + asSymbolKind(value.kind), + asRange(value.range), + asRange(value.selectionRange) + ); + fillTags(result, value); + if (value.children !== void 0 && value.children.length > 0) { + let children = []; + for (let child of value.children) { + children.push(asDocumentSymbol(child)); + } + result.children = children; + } + return result; + } + function fillTags(result, value) { + result.tags = asSymbolTags(value.tags); + if (value.deprecated) { + if (!result.tags) { + result.tags = [code.SymbolTag.Deprecated]; + } else { + if (!result.tags.includes(code.SymbolTag.Deprecated)) { + result.tags = result.tags.concat(code.SymbolTag.Deprecated); + } + } + } + } + function asCommand(item) { + let result = { title: item.title, command: item.command }; + if (item.arguments) { + result.arguments = item.arguments; + } + return result; + } + function asCommands(items) { + if (!items) { + return void 0; + } + return items.map(asCommand); + } + const kindMapping = new Map(); + kindMapping.set(ls2.CodeActionKind.Empty, code.CodeActionKind.Empty); + kindMapping.set( + ls2.CodeActionKind.QuickFix, + code.CodeActionKind.QuickFix + ); + kindMapping.set( + ls2.CodeActionKind.Refactor, + code.CodeActionKind.Refactor + ); + kindMapping.set( + ls2.CodeActionKind.RefactorExtract, + code.CodeActionKind.RefactorExtract + ); + kindMapping.set( + ls2.CodeActionKind.RefactorInline, + code.CodeActionKind.RefactorInline + ); + kindMapping.set( + ls2.CodeActionKind.RefactorRewrite, + code.CodeActionKind.RefactorRewrite + ); + kindMapping.set(ls2.CodeActionKind.Source, code.CodeActionKind.Source); + kindMapping.set( + ls2.CodeActionKind.SourceOrganizeImports, + code.CodeActionKind.SourceOrganizeImports + ); + function asCodeActionKind(item) { + if (item === void 0 || item === null) { + return void 0; + } + let result = kindMapping.get(item); + if (result) { + return result; + } + let parts = item.split('.'); + result = code.CodeActionKind.Empty; + for (let part of parts) { + result = result.append(part); + } + return result; + } + function asCodeActionKinds(items) { + if (items === void 0 || items === null) { + return void 0; + } + return items.map((kind) => asCodeActionKind(kind)); + } + function asCodeAction(item) { + if (item === void 0 || item === null) { + return void 0; + } + let result = new protocolCodeAction_1.default(item.title, item.data); + if (item.kind !== void 0) { + result.kind = asCodeActionKind(item.kind); + } + if (item.diagnostics !== void 0) { + result.diagnostics = asDiagnostics(item.diagnostics); + } + if (item.edit !== void 0) { + result.edit = asWorkspaceEdit(item.edit); + } + if (item.command !== void 0) { + result.command = asCommand(item.command); + } + if (item.isPreferred !== void 0) { + result.isPreferred = item.isPreferred; + } + if (item.disabled !== void 0) { + result.disabled = { reason: item.disabled.reason }; + } + return result; + } + function asCodeLens(item) { + if (!item) { + return void 0; + } + let result = new protocolCodeLens_1.default(asRange(item.range)); + if (item.command) { + result.command = asCommand(item.command); + } + if (item.data !== void 0 && item.data !== null) { + result.data = item.data; + } + return result; + } + function asCodeLenses(items) { + if (!items) { + return void 0; + } + return items.map((codeLens) => asCodeLens(codeLens)); + } + function asWorkspaceEdit(item) { + if (!item) { + return void 0; + } + const sharedMetadata = new Map(); + if (item.changeAnnotations !== void 0) { + for (const key of Object.keys(item.changeAnnotations)) { + const metaData = asWorkspaceEditEntryMetadata( + item.changeAnnotations[key] + ); + sharedMetadata.set(key, metaData); + } + } + const asMetadata = (annotation) => { + if (annotation === void 0) { + return void 0; + } else { + return sharedMetadata.get(annotation); + } + }; + const result = new code.WorkspaceEdit(); + if (item.documentChanges) { + for (const change of item.documentChanges) { + if (ls2.CreateFile.is(change)) { + result.createFile( + _uriConverter(change.uri), + change.options, + asMetadata(change.annotationId) + ); + } else if (ls2.RenameFile.is(change)) { + result.renameFile( + _uriConverter(change.oldUri), + _uriConverter(change.newUri), + change.options, + asMetadata(change.annotationId) + ); + } else if (ls2.DeleteFile.is(change)) { + result.deleteFile( + _uriConverter(change.uri), + change.options, + asMetadata(change.annotationId) + ); + } else if (ls2.TextDocumentEdit.is(change)) { + const uri = _uriConverter(change.textDocument.uri); + for (const edit of change.edits) { + if ( + vscode_languageserver_protocol_1.AnnotatedTextEdit.is(edit) + ) { + result.replace( + uri, + asRange(edit.range), + edit.newText, + asMetadata(edit.annotationId) + ); + } else { + result.replace(uri, asRange(edit.range), edit.newText); + } + } + } else { + throw new Error(`Unknown workspace edit change received: +${JSON.stringify(change, void 0, 4)}`); + } + } + } else if (item.changes) { + Object.keys(item.changes).forEach((key) => { + result.set(_uriConverter(key), asTextEdits(item.changes[key])); + }); + } + return result; + } + function asWorkspaceEditEntryMetadata(annotation) { + if (annotation === void 0) { + return void 0; + } + return { + label: annotation.label, + needsConfirmation: !!annotation.needsConfirmation, + description: annotation.description, + }; + } + function asDocumentLink(item) { + let range = asRange(item.range); + let target = item.target ? asUri(item.target) : void 0; + let link = new protocolDocumentLink_1.default(range, target); + if (item.tooltip !== void 0) { + link.tooltip = item.tooltip; + } + if (item.data !== void 0 && item.data !== null) { + link.data = item.data; + } + return link; + } + function asDocumentLinks(items) { + if (!items) { + return void 0; + } + return items.map(asDocumentLink); + } + function asColor(color) { + return new code.Color(color.red, color.green, color.blue, color.alpha); + } + function asColorInformation(ci2) { + return new code.ColorInformation( + asRange(ci2.range), + asColor(ci2.color) + ); + } + function asColorInformations(colorInformation) { + if (Array.isArray(colorInformation)) { + return colorInformation.map(asColorInformation); + } + return void 0; + } + function asColorPresentation(cp) { + let presentation = new code.ColorPresentation(cp.label); + presentation.additionalTextEdits = asTextEdits(cp.additionalTextEdits); + if (cp.textEdit) { + presentation.textEdit = asTextEdit(cp.textEdit); + } + return presentation; + } + function asColorPresentations(colorPresentations) { + if (Array.isArray(colorPresentations)) { + return colorPresentations.map(asColorPresentation); + } + return void 0; + } + function asFoldingRangeKind(kind) { + if (kind) { + switch (kind) { + case ls2.FoldingRangeKind.Comment: + return code.FoldingRangeKind.Comment; + case ls2.FoldingRangeKind.Imports: + return code.FoldingRangeKind.Imports; + case ls2.FoldingRangeKind.Region: + return code.FoldingRangeKind.Region; + } + } + return void 0; + } + function asFoldingRange(r) { + return new code.FoldingRange( + r.startLine, + r.endLine, + asFoldingRangeKind(r.kind) + ); + } + function asFoldingRanges(foldingRanges) { + if (Array.isArray(foldingRanges)) { + return foldingRanges.map(asFoldingRange); + } + return void 0; + } + function asSelectionRange(selectionRange) { + return new code.SelectionRange( + asRange(selectionRange.range), + selectionRange.parent + ? asSelectionRange(selectionRange.parent) + : void 0 + ); + } + function asSelectionRanges(selectionRanges) { + if (!Array.isArray(selectionRanges)) { + return []; + } + let result = []; + for (let range of selectionRanges) { + result.push(asSelectionRange(range)); + } + return result; + } + function asInlineValue(inlineValue) { + if (ls2.InlineValueText.is(inlineValue)) { + return new code.InlineValueText( + asRange(inlineValue.range), + inlineValue.text + ); + } else if (ls2.InlineValueVariableLookup.is(inlineValue)) { + return new code.InlineValueVariableLookup( + asRange(inlineValue.range), + inlineValue.variableName, + inlineValue.caseSensitiveLookup + ); + } else { + return new code.InlineValueEvaluatableExpression( + asRange(inlineValue.range), + inlineValue.expression + ); + } + } + function asInlineValues(inlineValues) { + if (!Array.isArray(inlineValues)) { + return []; + } + const result = []; + for (const inlineValue of inlineValues) { + result.push(asInlineValue(inlineValue)); + } + return result; + } + function asCallHierarchyItem(item) { + if (item === null) { + return void 0; + } + const result = new protocolCallHierarchyItem_1.default( + asSymbolKind(item.kind), + item.name, + item.detail || '', + asUri(item.uri), + asRange(item.range), + asRange(item.selectionRange), + item.data + ); + if (item.tags !== void 0) { + result.tags = asSymbolTags(item.tags); + } + return result; + } + function asCallHierarchyItems(items) { + if (items === null) { + return void 0; + } + return items.map((item) => asCallHierarchyItem(item)); + } + function asCallHierarchyIncomingCall(item) { + return new code.CallHierarchyIncomingCall( + asCallHierarchyItem(item.from), + asRanges(item.fromRanges) + ); + } + function asCallHierarchyIncomingCalls(items) { + if (items === null) { + return void 0; + } + return items.map((item) => asCallHierarchyIncomingCall(item)); + } + function asCallHierarchyOutgoingCall(item) { + return new code.CallHierarchyOutgoingCall( + asCallHierarchyItem(item.to), + asRanges(item.fromRanges) + ); + } + function asCallHierarchyOutgoingCalls(items) { + if (items === null) { + return void 0; + } + return items.map((item) => asCallHierarchyOutgoingCall(item)); + } + function asSemanticTokens(value) { + if (value === void 0 || value === null) { + return void 0; + } + return new code.SemanticTokens( + new Uint32Array(value.data), + value.resultId + ); + } + function asSemanticTokensEdit(value) { + return new code.SemanticTokensEdit( + value.start, + value.deleteCount, + value.data !== void 0 ? new Uint32Array(value.data) : void 0 + ); + } + function asSemanticTokensEdits(value) { + if (value === void 0 || value === null) { + return void 0; + } + return new code.SemanticTokensEdits( + value.edits.map(asSemanticTokensEdit), + value.resultId + ); + } + function asSemanticTokensLegend(value) { + return value; + } + function asLinkedEditingRanges(value) { + if (value === null || value === void 0) { + return void 0; + } + return new code.LinkedEditingRanges( + asRanges(value.ranges), + asRegularExpression(value.wordPattern) + ); + } + function asRegularExpression(value) { + if (value === null || value === void 0) { + return void 0; + } + return new RegExp(value); + } + function asTypeHierarchyItem(item) { + if (item === null) { + return void 0; + } + let result = new protocolTypeHierarchyItem_1.default( + asSymbolKind(item.kind), + item.name, + item.detail || '', + asUri(item.uri), + asRange(item.range), + asRange(item.selectionRange), + item.data + ); + if (item.tags !== void 0) { + result.tags = asSymbolTags(item.tags); + } + return result; + } + function asTypeHierarchyItems(items) { + if (items === null) { + return void 0; + } + return items.map((item) => asTypeHierarchyItem(item)); + } + return { + asUri, + asDiagnostics, + asDiagnostic, + asRange, + asRanges, + asPosition, + asDiagnosticSeverity, + asDiagnosticTag, + asHover, + asCompletionResult, + asCompletionItem, + asTextEdit, + asTextEdits, + asSignatureHelp, + asSignatureInformations, + asSignatureInformation, + asParameterInformations, + asParameterInformation, + asDeclarationResult, + asDefinitionResult, + asLocation, + asReferences, + asDocumentHighlights, + asDocumentHighlight, + asDocumentHighlightKind, + asSymbolKind, + asSymbolTag, + asSymbolTags, + asSymbolInformations, + asSymbolInformation, + asDocumentSymbols, + asDocumentSymbol, + asCommand, + asCommands, + asCodeAction, + asCodeActionKind, + asCodeActionKinds, + asCodeLens, + asCodeLenses, + asWorkspaceEdit, + asDocumentLink, + asDocumentLinks, + asFoldingRangeKind, + asFoldingRange, + asFoldingRanges, + asColor, + asColorInformation, + asColorInformations, + asColorPresentation, + asColorPresentations, + asSelectionRange, + asSelectionRanges, + asInlineValue, + asInlineValues, + asSemanticTokensLegend, + asSemanticTokens, + asSemanticTokensEdit, + asSemanticTokensEdits, + asCallHierarchyItem, + asCallHierarchyItems, + asCallHierarchyIncomingCall, + asCallHierarchyIncomingCalls, + asCallHierarchyOutgoingCall, + asCallHierarchyOutgoingCalls, + asLinkedEditingRanges, + asTypeHierarchyItem, + asTypeHierarchyItems, + }; + } + exports.createConverter = createConverter; + }, +}); + +// client/node_modules/vscode-languageclient/lib/common/utils/async.js +let require_async = __commonJS({ + 'client/node_modules/vscode-languageclient/lib/common/utils/async.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.Delayer = void 0; + let vscode_languageserver_protocol_1 = require_main3(); + let Delayer = class { + constructor(defaultDelay) { + this.defaultDelay = defaultDelay; + this.timeout = void 0; + this.completionPromise = void 0; + this.onSuccess = void 0; + this.task = void 0; + } + trigger(task, delay = this.defaultDelay) { + this.task = task; + if (delay >= 0) { + this.cancelTimeout(); + } + if (!this.completionPromise) { + this.completionPromise = new Promise((resolve) => { + this.onSuccess = resolve; + }).then(() => { + this.completionPromise = void 0; + this.onSuccess = void 0; + let result = this.task(); + this.task = void 0; + return result; + }); + } + if (delay >= 0 || this.timeout === void 0) { + this.timeout = (0, + vscode_languageserver_protocol_1.RAL)().timer.setTimeout( + () => { + this.timeout = void 0; + this.onSuccess(void 0); + }, + delay >= 0 ? delay : this.defaultDelay + ); + } + return this.completionPromise; + } + forceDelivery() { + if (!this.completionPromise) { + return void 0; + } + this.cancelTimeout(); + let result = this.task(); + this.completionPromise = void 0; + this.onSuccess = void 0; + this.task = void 0; + return result; + } + isTriggered() { + return this.timeout !== void 0; + } + cancel() { + this.cancelTimeout(); + this.completionPromise = void 0; + } + cancelTimeout() { + if (this.timeout !== void 0) { + this.timeout.dispose(); + this.timeout = void 0; + } + } + }; + exports.Delayer = Delayer; + }, +}); + +// client/node_modules/vscode-languageclient/lib/common/utils/uuid.js +let require_uuid = __commonJS({ + 'client/node_modules/vscode-languageclient/lib/common/utils/uuid.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.generateUuid = exports.parse = exports.isUUID = exports.v4 = exports.empty = void 0; + let ValueUUID = class { + constructor(_value) { + this._value = _value; + } + asHex() { + return this._value; + } + equals(other) { + return this.asHex() === other.asHex(); + } + }; + var V4UUID = class extends ValueUUID { + constructor() { + super( + [ + V4UUID._randomHex(), + V4UUID._randomHex(), + V4UUID._randomHex(), + V4UUID._randomHex(), + V4UUID._randomHex(), + V4UUID._randomHex(), + V4UUID._randomHex(), + V4UUID._randomHex(), + '-', + V4UUID._randomHex(), + V4UUID._randomHex(), + V4UUID._randomHex(), + V4UUID._randomHex(), + '-', + '4', + V4UUID._randomHex(), + V4UUID._randomHex(), + V4UUID._randomHex(), + '-', + V4UUID._oneOf(V4UUID._timeHighBits), + V4UUID._randomHex(), + V4UUID._randomHex(), + V4UUID._randomHex(), + '-', + V4UUID._randomHex(), + V4UUID._randomHex(), + V4UUID._randomHex(), + V4UUID._randomHex(), + V4UUID._randomHex(), + V4UUID._randomHex(), + V4UUID._randomHex(), + V4UUID._randomHex(), + V4UUID._randomHex(), + V4UUID._randomHex(), + V4UUID._randomHex(), + V4UUID._randomHex(), + ].join('') + ); + } + static _oneOf(array) { + return array[Math.floor(array.length * Math.random())]; + } + static _randomHex() { + return V4UUID._oneOf(V4UUID._chars); + } + }; + V4UUID._chars = [ + '0', + '1', + '2', + '3', + '4', + '5', + '6', + '6', + '7', + '8', + '9', + 'a', + 'b', + 'c', + 'd', + 'e', + 'f', + ]; + V4UUID._timeHighBits = ['8', '9', 'a', 'b']; + exports.empty = new ValueUUID('00000000-0000-0000-0000-000000000000'); + function v4() { + return new V4UUID(); + } + exports.v4 = v4; + let _UUIDPattern = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i; + function isUUID(value) { + return _UUIDPattern.test(value); + } + exports.isUUID = isUUID; + function parse(value) { + if (!isUUID(value)) { + throw new Error('invalid uuid'); + } + return new ValueUUID(value); + } + exports.parse = parse; + function generateUuid() { + return v4().asHex(); + } + exports.generateUuid = generateUuid; + }, +}); + +// client/node_modules/vscode-languageclient/lib/common/progressPart.js +let require_progressPart = __commonJS({ + 'client/node_modules/vscode-languageclient/lib/common/progressPart.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.ProgressPart = void 0; + let vscode_1 = require('vscode'); + let vscode_languageserver_protocol_1 = require_main3(); + let Is2 = require_is3(); + let ProgressPart = class { + constructor(_client, _token, done) { + this._client = _client; + this._token = _token; + this._reported = 0; + this._infinite = false; + this._lspProgressDisposable = this._client.onProgress( + vscode_languageserver_protocol_1.WorkDoneProgress.type, + this._token, + (value) => { + switch (value.kind) { + case 'begin': + this.begin(value); + break; + case 'report': + this.report(value); + break; + case 'end': + this.done(); + done && done(this); + break; + } + } + ); + } + begin(params) { + this._infinite = params.percentage === void 0; + if (this._lspProgressDisposable === void 0) { + return; + } + void vscode_1.window.withProgress( + { + location: vscode_1.ProgressLocation.Window, + cancellable: params.cancellable, + title: params.title, + }, + async (progress, cancellationToken) => { + if (this._lspProgressDisposable === void 0) { + return; + } + this._progress = progress; + this._cancellationToken = cancellationToken; + this._tokenDisposable = this._cancellationToken.onCancellationRequested( + () => { + this._client.sendNotification( + vscode_languageserver_protocol_1 + .WorkDoneProgressCancelNotification.type, + { token: this._token } + ); + } + ); + this.report(params); + return new Promise((resolve, reject) => { + this._resolve = resolve; + this._reject = reject; + }); + } + ); + } + report(params) { + if (this._infinite && Is2.string(params.message)) { + this._progress !== void 0 && + this._progress.report({ message: params.message }); + } else if (Is2.number(params.percentage)) { + const percentage = Math.max(0, Math.min(params.percentage, 100)); + const delta = Math.max(0, percentage - this._reported); + this._reported += delta; + this._progress !== void 0 && + this._progress.report({ + message: params.message, + increment: delta, + }); + } + } + cancel() { + this.cleanup(); + if (this._reject !== void 0) { + this._reject(); + this._resolve = void 0; + this._reject = void 0; + } + } + done() { + this.cleanup(); + if (this._resolve !== void 0) { + this._resolve(); + this._resolve = void 0; + this._reject = void 0; + } + } + cleanup() { + if (this._lspProgressDisposable !== void 0) { + this._lspProgressDisposable.dispose(); + this._lspProgressDisposable = void 0; + } + if (this._tokenDisposable !== void 0) { + this._tokenDisposable.dispose(); + this._tokenDisposable = void 0; + } + this._progress = void 0; + this._cancellationToken = void 0; + } + }; + exports.ProgressPart = ProgressPart; + }, +}); + +// client/node_modules/vscode-languageclient/lib/common/client.js +let require_client = __commonJS({ + 'client/node_modules/vscode-languageclient/lib/common/client.js'(exports) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.BaseLanguageClient = exports.LSPCancellationError = exports.MessageTransports = exports.TextDocumentFeature = exports.State = exports.RevealOutputChannelOn = exports.DiagnosticPullMode = exports.CloseAction = exports.ErrorAction = void 0; + let vscode_1 = require('vscode'); + let vscode_languageserver_protocol_1 = require_main3(); + let configuration_1 = require_configuration(); + let c2p = require_codeConverter(); + let p2c = require_protocolConverter(); + let Is2 = require_is3(); + let async_1 = require_async(); + let UUID = require_uuid(); + let progressPart_1 = require_progressPart(); + let ConsoleLogger = class { + error(message) { + (0, vscode_languageserver_protocol_1.RAL)().console.error(message); + } + warn(message) { + (0, vscode_languageserver_protocol_1.RAL)().console.warn(message); + } + info(message) { + (0, vscode_languageserver_protocol_1.RAL)().console.info(message); + } + log(message) { + (0, vscode_languageserver_protocol_1.RAL)().console.log(message); + } + }; + function createConnection( + input, + output, + errorHandler, + closeHandler, + options + ) { + let logger = new ConsoleLogger(); + let connection = (0, + vscode_languageserver_protocol_1.createProtocolConnection)( + input, + output, + logger, + options + ); + connection.onError((data) => { + errorHandler(data[0], data[1], data[2]); + }); + connection.onClose(closeHandler); + let result = { + listen: () => connection.listen(), + sendRequest: (type, ...params) => + connection.sendRequest(type, ...params), + onRequest: (type, handler) => connection.onRequest(type, handler), + sendNotification: (type, params) => + connection.sendNotification(type, params), + onNotification: (type, handler) => + connection.onNotification(type, handler), + onProgress: connection.onProgress, + sendProgress: connection.sendProgress, + trace: (value, tracer, sendNotificationOrTraceOptions) => { + const defaultTraceOptions = { + sendNotification: false, + traceFormat: vscode_languageserver_protocol_1.TraceFormat.Text, + }; + if (sendNotificationOrTraceOptions === void 0) { + connection.trace(value, tracer, defaultTraceOptions); + } else if (Is2.boolean(sendNotificationOrTraceOptions)) { + connection.trace(value, tracer, sendNotificationOrTraceOptions); + } else { + connection.trace(value, tracer, sendNotificationOrTraceOptions); + } + }, + initialize: (params) => + connection.sendRequest( + vscode_languageserver_protocol_1.InitializeRequest.type, + params + ), + shutdown: () => + connection.sendRequest( + vscode_languageserver_protocol_1.ShutdownRequest.type, + void 0 + ), + exit: () => + connection.sendNotification( + vscode_languageserver_protocol_1.ExitNotification.type + ), + onLogMessage: (handler) => + connection.onNotification( + vscode_languageserver_protocol_1.LogMessageNotification.type, + handler + ), + onShowMessage: (handler) => + connection.onNotification( + vscode_languageserver_protocol_1.ShowMessageNotification.type, + handler + ), + onTelemetry: (handler) => + connection.onNotification( + vscode_languageserver_protocol_1.TelemetryEventNotification.type, + handler + ), + didChangeConfiguration: (params) => + connection.sendNotification( + vscode_languageserver_protocol_1.DidChangeConfigurationNotification + .type, + params + ), + didChangeWatchedFiles: (params) => + connection.sendNotification( + vscode_languageserver_protocol_1.DidChangeWatchedFilesNotification + .type, + params + ), + didOpenTextDocument: (params) => + connection.sendNotification( + vscode_languageserver_protocol_1.DidOpenTextDocumentNotification + .type, + params + ), + didChangeTextDocument: (params) => + connection.sendNotification( + vscode_languageserver_protocol_1.DidChangeTextDocumentNotification + .type, + params + ), + didCloseTextDocument: (params) => + connection.sendNotification( + vscode_languageserver_protocol_1.DidCloseTextDocumentNotification + .type, + params + ), + didSaveTextDocument: (params) => + connection.sendNotification( + vscode_languageserver_protocol_1.DidSaveTextDocumentNotification + .type, + params + ), + onDiagnostics: (handler) => + connection.onNotification( + vscode_languageserver_protocol_1.PublishDiagnosticsNotification + .type, + handler + ), + end: () => connection.end(), + dispose: () => connection.dispose(), + }; + return result; + } + let ErrorAction; + (function (ErrorAction2) { + ErrorAction2[(ErrorAction2['Continue'] = 1)] = 'Continue'; + ErrorAction2[(ErrorAction2['Shutdown'] = 2)] = 'Shutdown'; + })((ErrorAction = exports.ErrorAction || (exports.ErrorAction = {}))); + let CloseAction; + (function (CloseAction2) { + CloseAction2[(CloseAction2['DoNotRestart'] = 1)] = 'DoNotRestart'; + CloseAction2[(CloseAction2['Restart'] = 2)] = 'Restart'; + })((CloseAction = exports.CloseAction || (exports.CloseAction = {}))); + let DefaultErrorHandler = class { + constructor(client, maxRestartCount) { + this.client = client; + this.maxRestartCount = maxRestartCount; + this.restarts = []; + } + error(_error, _message, count) { + if (count && count <= 3) { + return { action: ErrorAction.Continue }; + } + return { action: ErrorAction.Shutdown }; + } + closed() { + this.restarts.push(Date.now()); + if (this.restarts.length <= this.maxRestartCount) { + return { action: CloseAction.Restart }; + } else { + let diff = this.restarts[this.restarts.length - 1] - this.restarts[0]; + if (diff <= 3 * 60 * 1e3) { + return { + action: CloseAction.DoNotRestart, + message: `The ${this.client.name} server crashed ${ + this.maxRestartCount + 1 + } times in the last 3 minutes. The server will not be restarted. The output for more information.`, + }; + } else { + this.restarts.shift(); + return { action: CloseAction.Restart }; + } + } + } + }; + let DiagnosticPullMode; + (function (DiagnosticPullMode2) { + DiagnosticPullMode2['onType'] = 'onType'; + DiagnosticPullMode2['onSave'] = 'onSave'; + })( + (DiagnosticPullMode = + exports.DiagnosticPullMode || (exports.DiagnosticPullMode = {})) + ); + let RevealOutputChannelOn2; + (function (RevealOutputChannelOn3) { + RevealOutputChannelOn3[(RevealOutputChannelOn3['Info'] = 1)] = 'Info'; + RevealOutputChannelOn3[(RevealOutputChannelOn3['Warn'] = 2)] = 'Warn'; + RevealOutputChannelOn3[(RevealOutputChannelOn3['Error'] = 3)] = 'Error'; + RevealOutputChannelOn3[(RevealOutputChannelOn3['Never'] = 4)] = 'Never'; + })( + (RevealOutputChannelOn2 = + exports.RevealOutputChannelOn || (exports.RevealOutputChannelOn = {})) + ); + let State; + (function (State2) { + State2[(State2['Stopped'] = 1)] = 'Stopped'; + State2[(State2['Starting'] = 3)] = 'Starting'; + State2[(State2['Running'] = 2)] = 'Running'; + })((State = exports.State || (exports.State = {}))); + let ClientState; + (function (ClientState2) { + ClientState2[(ClientState2['Initial'] = 0)] = 'Initial'; + ClientState2[(ClientState2['Starting'] = 1)] = 'Starting'; + ClientState2[(ClientState2['StartFailed'] = 2)] = 'StartFailed'; + ClientState2[(ClientState2['Running'] = 3)] = 'Running'; + ClientState2[(ClientState2['Stopping'] = 4)] = 'Stopping'; + ClientState2[(ClientState2['Stopped'] = 5)] = 'Stopped'; + })(ClientState || (ClientState = {})); + let SupportedSymbolKinds = [ + vscode_languageserver_protocol_1.SymbolKind.File, + vscode_languageserver_protocol_1.SymbolKind.Module, + vscode_languageserver_protocol_1.SymbolKind.Namespace, + vscode_languageserver_protocol_1.SymbolKind.Package, + vscode_languageserver_protocol_1.SymbolKind.Class, + vscode_languageserver_protocol_1.SymbolKind.Method, + vscode_languageserver_protocol_1.SymbolKind.Property, + vscode_languageserver_protocol_1.SymbolKind.Field, + vscode_languageserver_protocol_1.SymbolKind.Constructor, + vscode_languageserver_protocol_1.SymbolKind.Enum, + vscode_languageserver_protocol_1.SymbolKind.Interface, + vscode_languageserver_protocol_1.SymbolKind.Function, + vscode_languageserver_protocol_1.SymbolKind.Variable, + vscode_languageserver_protocol_1.SymbolKind.Constant, + vscode_languageserver_protocol_1.SymbolKind.String, + vscode_languageserver_protocol_1.SymbolKind.Number, + vscode_languageserver_protocol_1.SymbolKind.Boolean, + vscode_languageserver_protocol_1.SymbolKind.Array, + vscode_languageserver_protocol_1.SymbolKind.Object, + vscode_languageserver_protocol_1.SymbolKind.Key, + vscode_languageserver_protocol_1.SymbolKind.Null, + vscode_languageserver_protocol_1.SymbolKind.EnumMember, + vscode_languageserver_protocol_1.SymbolKind.Struct, + vscode_languageserver_protocol_1.SymbolKind.Event, + vscode_languageserver_protocol_1.SymbolKind.Operator, + vscode_languageserver_protocol_1.SymbolKind.TypeParameter, + ]; + let SupportedCompletionItemKinds = [ + vscode_languageserver_protocol_1.CompletionItemKind.Text, + vscode_languageserver_protocol_1.CompletionItemKind.Method, + vscode_languageserver_protocol_1.CompletionItemKind.Function, + vscode_languageserver_protocol_1.CompletionItemKind.Constructor, + vscode_languageserver_protocol_1.CompletionItemKind.Field, + vscode_languageserver_protocol_1.CompletionItemKind.Variable, + vscode_languageserver_protocol_1.CompletionItemKind.Class, + vscode_languageserver_protocol_1.CompletionItemKind.Interface, + vscode_languageserver_protocol_1.CompletionItemKind.Module, + vscode_languageserver_protocol_1.CompletionItemKind.Property, + vscode_languageserver_protocol_1.CompletionItemKind.Unit, + vscode_languageserver_protocol_1.CompletionItemKind.Value, + vscode_languageserver_protocol_1.CompletionItemKind.Enum, + vscode_languageserver_protocol_1.CompletionItemKind.Keyword, + vscode_languageserver_protocol_1.CompletionItemKind.Snippet, + vscode_languageserver_protocol_1.CompletionItemKind.Color, + vscode_languageserver_protocol_1.CompletionItemKind.File, + vscode_languageserver_protocol_1.CompletionItemKind.Reference, + vscode_languageserver_protocol_1.CompletionItemKind.Folder, + vscode_languageserver_protocol_1.CompletionItemKind.EnumMember, + vscode_languageserver_protocol_1.CompletionItemKind.Constant, + vscode_languageserver_protocol_1.CompletionItemKind.Struct, + vscode_languageserver_protocol_1.CompletionItemKind.Event, + vscode_languageserver_protocol_1.CompletionItemKind.Operator, + vscode_languageserver_protocol_1.CompletionItemKind.TypeParameter, + ]; + let SupportedSymbolTags = [ + vscode_languageserver_protocol_1.SymbolTag.Deprecated, + ]; + function ensure(target, key) { + if (target[key] === void 0) { + target[key] = {}; + } + return target[key]; + } + let FileFormattingOptions; + (function (FileFormattingOptions2) { + function fromConfiguration(document2) { + const filesConfig = vscode_1.workspace.getConfiguration( + 'files', + document2 + ); + return { + trimTrailingWhitespace: filesConfig.get('trimTrailingWhitespace'), + trimFinalNewlines: filesConfig.get('trimFinalNewlines'), + insertFinalNewline: filesConfig.get('insertFinalNewline'), + }; + } + FileFormattingOptions2.fromConfiguration = fromConfiguration; + })(FileFormattingOptions || (FileFormattingOptions = {})); + let DynamicFeature; + (function (DynamicFeature2) { + function is2(value) { + let candidate = value; + return ( + candidate && + Is2.func(candidate.register) && + Is2.func(candidate.unregister) && + Is2.func(candidate.dispose) && + candidate.registrationType !== void 0 + ); + } + DynamicFeature2.is = is2; + })(DynamicFeature || (DynamicFeature = {})); + let DocumentNotifications = class { + constructor( + _client, + _event, + _type, + _middleware, + _createParams, + _selectorFilter + ) { + this._client = _client; + this._event = _event; + this._type = _type; + this._middleware = _middleware; + this._createParams = _createParams; + this._selectorFilter = _selectorFilter; + this._selectors = new Map(); + this._onNotificationSent = new vscode_1.EventEmitter(); + } + static textDocumentFilter(selectors, textDocument) { + for (const selector of selectors) { + if (vscode_1.languages.match(selector, textDocument)) { + return true; + } + } + return false; + } + register(data) { + if (!data.registerOptions.documentSelector) { + return; + } + if (!this._listener) { + this._listener = this._event((data2) => { + this.callback(data2).catch((error) => { + this._client.error( + `Sending document notification ${this._type.method} failed.`, + error + ); + }); + }); + } + this._selectors.set(data.id, data.registerOptions.documentSelector); + } + async callback(data) { + const doSend = async (data2) => { + const params = this._createParams(data2); + await this._client.sendNotification(this._type, params).catch(); + this.notificationSent(data2, this._type, params); + }; + if ( + !this._selectorFilter || + this._selectorFilter(this._selectors.values(), data) + ) { + return this._middleware + ? this._middleware(data, (data2) => doSend(data2)) + : doSend(data); + } + } + get onNotificationSent() { + return this._onNotificationSent.event; + } + notificationSent(data, type, params) { + this._onNotificationSent.fire({ original: data, type, params }); + } + unregister(id) { + this._selectors.delete(id); + if (this._selectors.size === 0 && this._listener) { + this._listener.dispose(); + this._listener = void 0; + } + } + dispose() { + this._selectors.clear(); + this._onNotificationSent.dispose(); + if (this._listener) { + this._listener.dispose(); + this._listener = void 0; + } + } + getProvider(document2) { + for (const selector of this._selectors.values()) { + if (vscode_1.languages.match(selector, document2)) { + return { + send: (data) => { + return this.callback(data); + }, + }; + } + } + return void 0; + } + }; + let DidOpenTextDocumentFeature = class extends DocumentNotifications { + constructor(client, _syncedDocuments) { + super( + client, + vscode_1.workspace.onDidOpenTextDocument, + vscode_languageserver_protocol_1.DidOpenTextDocumentNotification.type, + client.clientOptions.middleware.didOpen, + (textDocument) => + client.code2ProtocolConverter.asOpenTextDocumentParams( + textDocument + ), + DocumentNotifications.textDocumentFilter + ); + this._syncedDocuments = _syncedDocuments; + } + get openDocuments() { + return this._syncedDocuments.values(); + } + fillClientCapabilities(capabilities) { + ensure( + ensure(capabilities, 'textDocument'), + 'synchronization' + ).dynamicRegistration = true; + } + initialize(capabilities, documentSelector) { + let textDocumentSyncOptions = capabilities.resolvedTextDocumentSync; + if ( + documentSelector && + textDocumentSyncOptions && + textDocumentSyncOptions.openClose + ) { + this.register({ + id: UUID.generateUuid(), + registerOptions: { documentSelector }, + }); + } + } + get registrationType() { + return vscode_languageserver_protocol_1.DidOpenTextDocumentNotification + .type; + } + register(data) { + super.register(data); + if (!data.registerOptions.documentSelector) { + return; + } + let documentSelector = data.registerOptions.documentSelector; + vscode_1.workspace.textDocuments.forEach((textDocument) => { + let uri = textDocument.uri.toString(); + if (this._syncedDocuments.has(uri)) { + return; + } + if (vscode_1.languages.match(documentSelector, textDocument)) { + let middleware = this._client.clientOptions.middleware; + let didOpen = (textDocument2) => { + return this._client.sendNotification( + this._type, + this._createParams(textDocument2) + ); + }; + (middleware.didOpen + ? middleware.didOpen(textDocument, didOpen) + : didOpen(textDocument) + ).catch((error) => { + this._client.error( + `Sending document notification ${this._type.method} failed`, + error + ); + }); + this._syncedDocuments.set(uri, textDocument); + } + }); + } + notificationSent(textDocument, type, params) { + super.notificationSent(textDocument, type, params); + this._syncedDocuments.set(textDocument.uri.toString(), textDocument); + } + }; + let DidCloseTextDocumentFeature = class extends DocumentNotifications { + constructor(client, _syncedDocuments) { + super( + client, + vscode_1.workspace.onDidCloseTextDocument, + vscode_languageserver_protocol_1.DidCloseTextDocumentNotification + .type, + client.clientOptions.middleware.didClose, + (textDocument) => + client.code2ProtocolConverter.asCloseTextDocumentParams( + textDocument + ), + DocumentNotifications.textDocumentFilter + ); + this._syncedDocuments = _syncedDocuments; + } + get registrationType() { + return vscode_languageserver_protocol_1.DidCloseTextDocumentNotification + .type; + } + fillClientCapabilities(capabilities) { + ensure( + ensure(capabilities, 'textDocument'), + 'synchronization' + ).dynamicRegistration = true; + } + initialize(capabilities, documentSelector) { + let textDocumentSyncOptions = capabilities.resolvedTextDocumentSync; + if ( + documentSelector && + textDocumentSyncOptions && + textDocumentSyncOptions.openClose + ) { + this.register({ + id: UUID.generateUuid(), + registerOptions: { documentSelector }, + }); + } + } + notificationSent(textDocument, type, params) { + super.notificationSent(textDocument, type, params); + this._syncedDocuments.delete(textDocument.uri.toString()); + } + unregister(id) { + let selector = this._selectors.get(id); + super.unregister(id); + let selectors = this._selectors.values(); + this._syncedDocuments.forEach((textDocument) => { + if ( + vscode_1.languages.match(selector, textDocument) && + !this._selectorFilter(selectors, textDocument) + ) { + let middleware = this._client.clientOptions.middleware; + let didClose = (textDocument2) => { + return this._client.sendNotification( + this._type, + this._createParams(textDocument2) + ); + }; + this._syncedDocuments.delete(textDocument.uri.toString()); + (middleware.didClose + ? middleware.didClose(textDocument, didClose) + : didClose(textDocument) + ).catch((error) => { + this._client.error( + `Sending document notification ${this._type.method} failed`, + error + ); + }); + } + }); + } + }; + let DidChangeTextDocumentFeature = class { + constructor(_client) { + this._client = _client; + this._changeData = new Map(); + this._forcingDelivery = false; + this._onNotificationSent = new vscode_1.EventEmitter(); + } + get registrationType() { + return vscode_languageserver_protocol_1 + .DidChangeTextDocumentNotification.type; + } + fillClientCapabilities(capabilities) { + ensure( + ensure(capabilities, 'textDocument'), + 'synchronization' + ).dynamicRegistration = true; + } + initialize(capabilities, documentSelector) { + let textDocumentSyncOptions = capabilities.resolvedTextDocumentSync; + if ( + documentSelector && + textDocumentSyncOptions && + textDocumentSyncOptions.change !== void 0 && + textDocumentSyncOptions.change !== + vscode_languageserver_protocol_1.TextDocumentSyncKind.None + ) { + this.register({ + id: UUID.generateUuid(), + registerOptions: Object.assign( + {}, + { documentSelector }, + { syncKind: textDocumentSyncOptions.change } + ), + }); + } + } + register(data) { + if (!data.registerOptions.documentSelector) { + return; + } + if (!this._listener) { + this._listener = vscode_1.workspace.onDidChangeTextDocument( + this.callback, + this + ); + } + this._changeData.set(data.id, { + documentSelector: data.registerOptions.documentSelector, + syncKind: data.registerOptions.syncKind, + }); + } + async callback(event) { + if (event.contentChanges.length === 0) { + return; + } + const promises = []; + for (const changeData of this._changeData.values()) { + if ( + vscode_1.languages.match( + changeData.documentSelector, + event.document + ) + ) { + const middleware = this._client.clientOptions.middleware; + if ( + changeData.syncKind === + vscode_languageserver_protocol_1.TextDocumentSyncKind.Incremental + ) { + const didChange = async (event2) => { + const params = this._client.code2ProtocolConverter.asChangeTextDocumentParams( + event2 + ); + await this._client.sendNotification( + vscode_languageserver_protocol_1 + .DidChangeTextDocumentNotification.type, + params + ); + this.notificationSent( + event2, + vscode_languageserver_protocol_1 + .DidChangeTextDocumentNotification.type, + params + ); + }; + promises.push( + middleware.didChange + ? middleware.didChange(event, (event2) => didChange(event2)) + : didChange(event) + ); + } else if ( + changeData.syncKind === + vscode_languageserver_protocol_1.TextDocumentSyncKind.Full + ) { + const didChange = async (event2) => { + const doSend = async (event3) => { + const params = this._client.code2ProtocolConverter.asChangeTextDocumentParams( + event3.document + ); + await this._client.sendNotification( + vscode_languageserver_protocol_1 + .DidChangeTextDocumentNotification.type, + params + ); + this.notificationSent( + event3, + vscode_languageserver_protocol_1 + .DidChangeTextDocumentNotification.type, + params + ); + }; + if (this._changeDelayer) { + if ( + this._changeDelayer.uri !== event2.document.uri.toString() + ) { + this.forceDelivery(); + this._changeDelayer.uri = event2.document.uri.toString(); + } + return this._changeDelayer.delayer.trigger(() => + doSend(event2) + ); + } else { + this._changeDelayer = { + uri: event2.document.uri.toString(), + delayer: new async_1.Delayer(200), + }; + return this._changeDelayer.delayer.trigger( + () => doSend(event2), + -1 + ); + } + }; + promises.push( + middleware.didChange + ? middleware.didChange(event, (event2) => didChange(event2)) + : didChange(event) + ); + } + } + } + return Promise.all(promises).then(void 0, (error) => { + this._client.error( + `Sending document notification ${vscode_languageserver_protocol_1.DidChangeTextDocumentNotification.type.method} failed`, + error + ); + throw error; + }); + } + get onNotificationSent() { + return this._onNotificationSent.event; + } + notificationSent(changeEvent, type, params) { + this._onNotificationSent.fire({ original: changeEvent, type, params }); + } + unregister(id) { + this._changeData.delete(id); + if (this._changeData.size === 0 && this._listener) { + this._listener.dispose(); + this._listener = void 0; + } + } + dispose() { + this._changeDelayer = void 0; + this._forcingDelivery = false; + this._changeData.clear(); + if (this._listener) { + this._listener.dispose(); + this._listener = void 0; + } + } + forceDelivery() { + if (this._forcingDelivery || !this._changeDelayer) { + return; + } + try { + this._forcingDelivery = true; + this._changeDelayer.delayer.forceDelivery(); + } finally { + this._forcingDelivery = false; + } + } + getProvider(document2) { + for (const changeData of this._changeData.values()) { + if ( + vscode_1.languages.match(changeData.documentSelector, document2) + ) { + return { + send: (event) => { + return this.callback(event); + }, + }; + } + } + return void 0; + } + }; + let WillSaveFeature = class extends DocumentNotifications { + constructor(client) { + super( + client, + vscode_1.workspace.onWillSaveTextDocument, + vscode_languageserver_protocol_1.WillSaveTextDocumentNotification + .type, + client.clientOptions.middleware.willSave, + (willSaveEvent) => + client.code2ProtocolConverter.asWillSaveTextDocumentParams( + willSaveEvent + ), + (selectors, willSaveEvent) => + DocumentNotifications.textDocumentFilter( + selectors, + willSaveEvent.document + ) + ); + } + get registrationType() { + return vscode_languageserver_protocol_1.WillSaveTextDocumentNotification + .type; + } + fillClientCapabilities(capabilities) { + let value = ensure( + ensure(capabilities, 'textDocument'), + 'synchronization' + ); + value.willSave = true; + } + initialize(capabilities, documentSelector) { + let textDocumentSyncOptions = capabilities.resolvedTextDocumentSync; + if ( + documentSelector && + textDocumentSyncOptions && + textDocumentSyncOptions.willSave + ) { + this.register({ + id: UUID.generateUuid(), + registerOptions: { documentSelector }, + }); + } + } + }; + let WillSaveWaitUntilFeature = class { + constructor(_client) { + this._client = _client; + this._selectors = new Map(); + } + get registrationType() { + return vscode_languageserver_protocol_1 + .WillSaveTextDocumentWaitUntilRequest.type; + } + fillClientCapabilities(capabilities) { + let value = ensure( + ensure(capabilities, 'textDocument'), + 'synchronization' + ); + value.willSaveWaitUntil = true; + } + initialize(capabilities, documentSelector) { + let textDocumentSyncOptions = capabilities.resolvedTextDocumentSync; + if ( + documentSelector && + textDocumentSyncOptions && + textDocumentSyncOptions.willSaveWaitUntil + ) { + this.register({ + id: UUID.generateUuid(), + registerOptions: { documentSelector }, + }); + } + } + register(data) { + if (!data.registerOptions.documentSelector) { + return; + } + if (!this._listener) { + this._listener = vscode_1.workspace.onWillSaveTextDocument( + this.callback, + this + ); + } + this._selectors.set(data.id, data.registerOptions.documentSelector); + } + callback(event) { + if ( + DocumentNotifications.textDocumentFilter( + this._selectors.values(), + event.document + ) + ) { + let middleware = this._client.clientOptions.middleware; + let willSaveWaitUntil = (event2) => { + return this._client + .sendRequest( + vscode_languageserver_protocol_1 + .WillSaveTextDocumentWaitUntilRequest.type, + this._client.code2ProtocolConverter.asWillSaveTextDocumentParams( + event2 + ) + ) + .then((edits) => { + let vEdits = this._client.protocol2CodeConverter.asTextEdits( + edits + ); + return vEdits === void 0 ? [] : vEdits; + }); + }; + event.waitUntil( + middleware.willSaveWaitUntil + ? middleware.willSaveWaitUntil(event, willSaveWaitUntil) + : willSaveWaitUntil(event) + ); + } + } + unregister(id) { + this._selectors.delete(id); + if (this._selectors.size === 0 && this._listener) { + this._listener.dispose(); + this._listener = void 0; + } + } + dispose() { + this._selectors.clear(); + if (this._listener) { + this._listener.dispose(); + this._listener = void 0; + } + } + }; + let DidSaveTextDocumentFeature = class extends DocumentNotifications { + constructor(client) { + super( + client, + vscode_1.workspace.onDidSaveTextDocument, + vscode_languageserver_protocol_1.DidSaveTextDocumentNotification.type, + client.clientOptions.middleware.didSave, + (textDocument) => + client.code2ProtocolConverter.asSaveTextDocumentParams( + textDocument, + this._includeText + ), + DocumentNotifications.textDocumentFilter + ); + this._includeText = false; + } + get registrationType() { + return vscode_languageserver_protocol_1.DidSaveTextDocumentNotification + .type; + } + fillClientCapabilities(capabilities) { + ensure( + ensure(capabilities, 'textDocument'), + 'synchronization' + ).didSave = true; + } + initialize(capabilities, documentSelector) { + const textDocumentSyncOptions = capabilities.resolvedTextDocumentSync; + if ( + documentSelector && + textDocumentSyncOptions && + textDocumentSyncOptions.save + ) { + const saveOptions = + typeof textDocumentSyncOptions.save === 'boolean' + ? { includeText: false } + : { includeText: !!textDocumentSyncOptions.save.includeText }; + this.register({ + id: UUID.generateUuid(), + registerOptions: Object.assign( + {}, + { documentSelector }, + saveOptions + ), + }); + } + } + register(data) { + this._includeText = !!data.registerOptions.includeText; + super.register(data); + } + }; + let FileSystemWatcherFeature = class { + constructor(_client, _notifyFileEvent) { + this._client = _client; + this._notifyFileEvent = _notifyFileEvent; + this._watchers = new Map(); + } + get registrationType() { + return vscode_languageserver_protocol_1 + .DidChangeWatchedFilesNotification.type; + } + fillClientCapabilities(capabilities) { + ensure( + ensure(capabilities, 'workspace'), + 'didChangeWatchedFiles' + ).dynamicRegistration = true; + } + initialize(_capabilities, _documentSelector) {} + register(data) { + if (!Array.isArray(data.registerOptions.watchers)) { + return; + } + let disposables = []; + for (let watcher of data.registerOptions.watchers) { + if (!Is2.string(watcher.globPattern)) { + continue; + } + let watchCreate = true, + watchChange = true, + watchDelete = true; + if (watcher.kind !== void 0 && watcher.kind !== null) { + watchCreate = + (watcher.kind & + vscode_languageserver_protocol_1.WatchKind.Create) !== + 0; + watchChange = + (watcher.kind & + vscode_languageserver_protocol_1.WatchKind.Change) !== + 0; + watchDelete = + (watcher.kind & + vscode_languageserver_protocol_1.WatchKind.Delete) !== + 0; + } + let fileSystemWatcher = vscode_1.workspace.createFileSystemWatcher( + watcher.globPattern, + !watchCreate, + !watchChange, + !watchDelete + ); + this.hookListeners( + fileSystemWatcher, + watchCreate, + watchChange, + watchDelete + ); + disposables.push(fileSystemWatcher); + } + this._watchers.set(data.id, disposables); + } + registerRaw(id, fileSystemWatchers) { + let disposables = []; + for (let fileSystemWatcher of fileSystemWatchers) { + this.hookListeners(fileSystemWatcher, true, true, true, disposables); + } + this._watchers.set(id, disposables); + } + hookListeners( + fileSystemWatcher, + watchCreate, + watchChange, + watchDelete, + listeners + ) { + if (watchCreate) { + fileSystemWatcher.onDidCreate( + (resource) => + this._notifyFileEvent({ + uri: this._client.code2ProtocolConverter.asUri(resource), + type: vscode_languageserver_protocol_1.FileChangeType.Created, + }), + null, + listeners + ); + } + if (watchChange) { + fileSystemWatcher.onDidChange( + (resource) => + this._notifyFileEvent({ + uri: this._client.code2ProtocolConverter.asUri(resource), + type: vscode_languageserver_protocol_1.FileChangeType.Changed, + }), + null, + listeners + ); + } + if (watchDelete) { + fileSystemWatcher.onDidDelete( + (resource) => + this._notifyFileEvent({ + uri: this._client.code2ProtocolConverter.asUri(resource), + type: vscode_languageserver_protocol_1.FileChangeType.Deleted, + }), + null, + listeners + ); + } + } + unregister(id) { + let disposables = this._watchers.get(id); + if (disposables) { + for (let disposable of disposables) { + disposable.dispose(); + } + } + } + dispose() { + this._watchers.forEach((disposables) => { + for (let disposable of disposables) { + disposable.dispose(); + } + }); + this._watchers.clear(); + } + }; + let TextDocumentFeature = class { + constructor(_client, _registrationType) { + this._client = _client; + this._registrationType = _registrationType; + this._registrations = new Map(); + } + get registrationType() { + return this._registrationType; + } + register(data) { + if (!data.registerOptions.documentSelector) { + return; + } + let registration = this.registerLanguageProvider( + data.registerOptions, + data.id + ); + this._registrations.set(data.id, { + disposable: registration[0], + data, + provider: registration[1], + }); + } + unregister(id) { + let registration = this._registrations.get(id); + if (registration !== void 0) { + registration.disposable.dispose(); + } + } + dispose() { + this._registrations.forEach((value) => { + value.disposable.dispose(); + }); + this._registrations.clear(); + } + getRegistration(documentSelector, capability) { + if (!capability) { + return [void 0, void 0]; + } else if ( + vscode_languageserver_protocol_1.TextDocumentRegistrationOptions.is( + capability + ) + ) { + const id = vscode_languageserver_protocol_1.StaticRegistrationOptions.hasId( + capability + ) + ? capability.id + : UUID.generateUuid(); + const selector = capability.documentSelector || documentSelector; + if (selector) { + return [ + id, + Object.assign({}, capability, { documentSelector: selector }), + ]; + } + } else if ( + (Is2.boolean(capability) && capability === true) || + vscode_languageserver_protocol_1.WorkDoneProgressOptions.is( + capability + ) + ) { + if (!documentSelector) { + return [void 0, void 0]; + } + let options = + Is2.boolean(capability) && capability === true + ? { documentSelector } + : Object.assign({}, capability, { documentSelector }); + return [UUID.generateUuid(), options]; + } + return [void 0, void 0]; + } + getRegistrationOptions(documentSelector, capability) { + if (!documentSelector || !capability) { + return void 0; + } + return Is2.boolean(capability) && capability === true + ? { documentSelector } + : Object.assign({}, capability, { documentSelector }); + } + getProvider(textDocument) { + for (const registration of this._registrations.values()) { + let selector = registration.data.registerOptions.documentSelector; + if ( + selector !== null && + vscode_1.languages.match(selector, textDocument) + ) { + return registration.provider; + } + } + return void 0; + } + getAllProviders() { + const result = []; + for (const item of this._registrations.values()) { + result.push(item.provider); + } + return result; + } + }; + exports.TextDocumentFeature = TextDocumentFeature; + let WorkspaceFeature = class { + constructor(_client, _registrationType) { + this._client = _client; + this._registrationType = _registrationType; + this._registrations = new Map(); + } + get registrationType() { + return this._registrationType; + } + register(data) { + const registration = this.registerLanguageProvider( + data.registerOptions + ); + this._registrations.set(data.id, { + disposable: registration[0], + provider: registration[1], + }); + } + unregister(id) { + let registration = this._registrations.get(id); + if (registration !== void 0) { + registration.disposable.dispose(); + } + } + dispose() { + this._registrations.forEach((registration) => { + registration.disposable.dispose(); + }); + this._registrations.clear(); + } + getProviders() { + const result = []; + for (const registration of this._registrations.values()) { + result.push(registration.provider); + } + return result; + } + }; + let CompletionItemFeature = class extends TextDocumentFeature { + constructor(client) { + super(client, vscode_languageserver_protocol_1.CompletionRequest.type); + this.labelDetailsSupport = new Map(); + } + fillClientCapabilities(capabilities) { + let completion = ensure( + ensure(capabilities, 'textDocument'), + 'completion' + ); + completion.dynamicRegistration = true; + completion.contextSupport = true; + completion.completionItem = { + snippetSupport: true, + commitCharactersSupport: true, + documentationFormat: [ + vscode_languageserver_protocol_1.MarkupKind.Markdown, + vscode_languageserver_protocol_1.MarkupKind.PlainText, + ], + deprecatedSupport: true, + preselectSupport: true, + tagSupport: { + valueSet: [ + vscode_languageserver_protocol_1.CompletionItemTag.Deprecated, + ], + }, + insertReplaceSupport: true, + resolveSupport: { + properties: ['documentation', 'detail', 'additionalTextEdits'], + }, + insertTextModeSupport: { + valueSet: [ + vscode_languageserver_protocol_1.InsertTextMode.asIs, + vscode_languageserver_protocol_1.InsertTextMode.adjustIndentation, + ], + }, + labelDetailsSupport: true, + }; + completion.insertTextMode = + vscode_languageserver_protocol_1.InsertTextMode.adjustIndentation; + completion.completionItemKind = { + valueSet: SupportedCompletionItemKinds, + }; + completion.completionList = { + itemDefaults: [ + 'commitCharacters', + 'editRange', + 'insertTextFormat', + 'insertTextMode', + ], + }; + } + initialize(capabilities, documentSelector) { + const options = this.getRegistrationOptions( + documentSelector, + capabilities.completionProvider + ); + if (!options) { + return; + } + this.register({ + id: UUID.generateUuid(), + registerOptions: options, + }); + } + registerLanguageProvider(options, id) { + this.labelDetailsSupport.set( + id, + !!options.completionItem?.labelDetailsSupport + ); + const triggerCharacters = options.triggerCharacters ?? []; + const defaultCommitCharacters = options.allCommitCharacters; + const provider = { + provideCompletionItems: (document2, position, token, context) => { + const client = this._client; + const middleware = this._client.clientOptions.middleware; + const provideCompletionItems = ( + document3, + position2, + context2, + token2 + ) => { + return client + .sendRequest( + vscode_languageserver_protocol_1.CompletionRequest.type, + client.code2ProtocolConverter.asCompletionParams( + document3, + position2, + context2 + ), + token2 + ) + .then( + (result) => + client.protocol2CodeConverter.asCompletionResult( + result, + defaultCommitCharacters + ), + (error) => { + return client.handleFailedRequest( + vscode_languageserver_protocol_1.CompletionRequest.type, + token2, + error, + null + ); + } + ); + }; + return middleware.provideCompletionItem + ? middleware.provideCompletionItem( + document2, + position, + context, + token, + provideCompletionItems + ) + : provideCompletionItems(document2, position, context, token); + }, + resolveCompletionItem: options.resolveProvider + ? (item, token) => { + const client = this._client; + const middleware = this._client.clientOptions.middleware; + const resolveCompletionItem = (item2, token2) => { + return client + .sendRequest( + vscode_languageserver_protocol_1.CompletionResolveRequest + .type, + client.code2ProtocolConverter.asCompletionItem( + item2, + !!this.labelDetailsSupport.get(id) + ), + token2 + ) + .then( + client.protocol2CodeConverter.asCompletionItem, + (error) => { + return client.handleFailedRequest( + vscode_languageserver_protocol_1 + .CompletionResolveRequest.type, + token2, + error, + item2 + ); + } + ); + }; + return middleware.resolveCompletionItem + ? middleware.resolveCompletionItem( + item, + token, + resolveCompletionItem + ) + : resolveCompletionItem(item, token); + } + : void 0, + }; + return [ + vscode_1.languages.registerCompletionItemProvider( + options.documentSelector, + provider, + ...triggerCharacters + ), + provider, + ]; + } + }; + let HoverFeature = class extends TextDocumentFeature { + constructor(client) { + super(client, vscode_languageserver_protocol_1.HoverRequest.type); + } + fillClientCapabilities(capabilities) { + const hoverCapability = ensure( + ensure(capabilities, 'textDocument'), + 'hover' + ); + hoverCapability.dynamicRegistration = true; + hoverCapability.contentFormat = [ + vscode_languageserver_protocol_1.MarkupKind.Markdown, + vscode_languageserver_protocol_1.MarkupKind.PlainText, + ]; + } + initialize(capabilities, documentSelector) { + const options = this.getRegistrationOptions( + documentSelector, + capabilities.hoverProvider + ); + if (!options) { + return; + } + this.register({ + id: UUID.generateUuid(), + registerOptions: options, + }); + } + registerLanguageProvider(options) { + const provider = { + provideHover: (document2, position, token) => { + const client = this._client; + const provideHover = (document3, position2, token2) => { + return client + .sendRequest( + vscode_languageserver_protocol_1.HoverRequest.type, + client.code2ProtocolConverter.asTextDocumentPositionParams( + document3, + position2 + ), + token2 + ) + .then(client.protocol2CodeConverter.asHover, (error) => { + return client.handleFailedRequest( + vscode_languageserver_protocol_1.HoverRequest.type, + token2, + error, + null + ); + }); + }; + const middleware = client.clientOptions.middleware; + return middleware.provideHover + ? middleware.provideHover( + document2, + position, + token, + provideHover + ) + : provideHover(document2, position, token); + }, + }; + return [ + vscode_1.languages.registerHoverProvider( + options.documentSelector, + provider + ), + provider, + ]; + } + }; + let SignatureHelpFeature = class extends TextDocumentFeature { + constructor(client) { + super( + client, + vscode_languageserver_protocol_1.SignatureHelpRequest.type + ); + } + fillClientCapabilities(capabilities) { + let config = ensure( + ensure(capabilities, 'textDocument'), + 'signatureHelp' + ); + config.dynamicRegistration = true; + config.signatureInformation = { + documentationFormat: [ + vscode_languageserver_protocol_1.MarkupKind.Markdown, + vscode_languageserver_protocol_1.MarkupKind.PlainText, + ], + }; + config.signatureInformation.parameterInformation = { + labelOffsetSupport: true, + }; + config.signatureInformation.activeParameterSupport = true; + config.contextSupport = true; + } + initialize(capabilities, documentSelector) { + const options = this.getRegistrationOptions( + documentSelector, + capabilities.signatureHelpProvider + ); + if (!options) { + return; + } + this.register({ + id: UUID.generateUuid(), + registerOptions: options, + }); + } + registerLanguageProvider(options) { + const provider = { + provideSignatureHelp: (document2, position, token, context) => { + const client = this._client; + const providerSignatureHelp = ( + document3, + position2, + context2, + token2 + ) => { + return client + .sendRequest( + vscode_languageserver_protocol_1.SignatureHelpRequest.type, + client.code2ProtocolConverter.asSignatureHelpParams( + document3, + position2, + context2 + ), + token2 + ) + .then( + client.protocol2CodeConverter.asSignatureHelp, + (error) => { + return client.handleFailedRequest( + vscode_languageserver_protocol_1.SignatureHelpRequest + .type, + token2, + error, + null + ); + } + ); + }; + const middleware = client.clientOptions.middleware; + return middleware.provideSignatureHelp + ? middleware.provideSignatureHelp( + document2, + position, + context, + token, + providerSignatureHelp + ) + : providerSignatureHelp(document2, position, context, token); + }, + }; + let disposable; + if (options.retriggerCharacters === void 0) { + const triggerCharacters = options.triggerCharacters || []; + disposable = vscode_1.languages.registerSignatureHelpProvider( + options.documentSelector, + provider, + ...triggerCharacters + ); + } else { + const metaData = { + triggerCharacters: options.triggerCharacters || [], + retriggerCharacters: options.retriggerCharacters || [], + }; + disposable = vscode_1.languages.registerSignatureHelpProvider( + options.documentSelector, + provider, + metaData + ); + } + return [disposable, provider]; + } + }; + let DefinitionFeature = class extends TextDocumentFeature { + constructor(client) { + super(client, vscode_languageserver_protocol_1.DefinitionRequest.type); + } + fillClientCapabilities(capabilities) { + let definitionSupport = ensure( + ensure(capabilities, 'textDocument'), + 'definition' + ); + definitionSupport.dynamicRegistration = true; + definitionSupport.linkSupport = true; + } + initialize(capabilities, documentSelector) { + const options = this.getRegistrationOptions( + documentSelector, + capabilities.definitionProvider + ); + if (!options) { + return; + } + this.register({ id: UUID.generateUuid(), registerOptions: options }); + } + registerLanguageProvider(options) { + const provider = { + provideDefinition: (document2, position, token) => { + const client = this._client; + const provideDefinition = (document3, position2, token2) => { + return client + .sendRequest( + vscode_languageserver_protocol_1.DefinitionRequest.type, + client.code2ProtocolConverter.asTextDocumentPositionParams( + document3, + position2 + ), + token2 + ) + .then( + client.protocol2CodeConverter.asDefinitionResult, + (error) => { + return client.handleFailedRequest( + vscode_languageserver_protocol_1.DefinitionRequest.type, + token2, + error, + null + ); + } + ); + }; + const middleware = client.clientOptions.middleware; + return middleware.provideDefinition + ? middleware.provideDefinition( + document2, + position, + token, + provideDefinition + ) + : provideDefinition(document2, position, token); + }, + }; + return [ + vscode_1.languages.registerDefinitionProvider( + options.documentSelector, + provider + ), + provider, + ]; + } + }; + let ReferencesFeature = class extends TextDocumentFeature { + constructor(client) { + super(client, vscode_languageserver_protocol_1.ReferencesRequest.type); + } + fillClientCapabilities(capabilities) { + ensure( + ensure(capabilities, 'textDocument'), + 'references' + ).dynamicRegistration = true; + } + initialize(capabilities, documentSelector) { + const options = this.getRegistrationOptions( + documentSelector, + capabilities.referencesProvider + ); + if (!options) { + return; + } + this.register({ id: UUID.generateUuid(), registerOptions: options }); + } + registerLanguageProvider(options) { + const provider = { + provideReferences: (document2, position, options2, token) => { + const client = this._client; + const _providerReferences = ( + document3, + position2, + options3, + token2 + ) => { + return client + .sendRequest( + vscode_languageserver_protocol_1.ReferencesRequest.type, + client.code2ProtocolConverter.asReferenceParams( + document3, + position2, + options3 + ), + token2 + ) + .then(client.protocol2CodeConverter.asReferences, (error) => { + return client.handleFailedRequest( + vscode_languageserver_protocol_1.ReferencesRequest.type, + token2, + error, + null + ); + }); + }; + const middleware = client.clientOptions.middleware; + return middleware.provideReferences + ? middleware.provideReferences( + document2, + position, + options2, + token, + _providerReferences + ) + : _providerReferences(document2, position, options2, token); + }, + }; + return [ + vscode_1.languages.registerReferenceProvider( + options.documentSelector, + provider + ), + provider, + ]; + } + }; + let DocumentHighlightFeature = class extends TextDocumentFeature { + constructor(client) { + super( + client, + vscode_languageserver_protocol_1.DocumentHighlightRequest.type + ); + } + fillClientCapabilities(capabilities) { + ensure( + ensure(capabilities, 'textDocument'), + 'documentHighlight' + ).dynamicRegistration = true; + } + initialize(capabilities, documentSelector) { + const options = this.getRegistrationOptions( + documentSelector, + capabilities.documentHighlightProvider + ); + if (!options) { + return; + } + this.register({ id: UUID.generateUuid(), registerOptions: options }); + } + registerLanguageProvider(options) { + const provider = { + provideDocumentHighlights: (document2, position, token) => { + const client = this._client; + const _provideDocumentHighlights = ( + document3, + position2, + token2 + ) => { + return client + .sendRequest( + vscode_languageserver_protocol_1.DocumentHighlightRequest + .type, + client.code2ProtocolConverter.asTextDocumentPositionParams( + document3, + position2 + ), + token2 + ) + .then( + client.protocol2CodeConverter.asDocumentHighlights, + (error) => { + return client.handleFailedRequest( + vscode_languageserver_protocol_1.DocumentHighlightRequest + .type, + token2, + error, + null + ); + } + ); + }; + const middleware = client.clientOptions.middleware; + return middleware.provideDocumentHighlights + ? middleware.provideDocumentHighlights( + document2, + position, + token, + _provideDocumentHighlights + ) + : _provideDocumentHighlights(document2, position, token); + }, + }; + return [ + vscode_1.languages.registerDocumentHighlightProvider( + options.documentSelector, + provider + ), + provider, + ]; + } + }; + let DocumentSymbolFeature = class extends TextDocumentFeature { + constructor(client) { + super( + client, + vscode_languageserver_protocol_1.DocumentSymbolRequest.type + ); + } + fillClientCapabilities(capabilities) { + let symbolCapabilities = ensure( + ensure(capabilities, 'textDocument'), + 'documentSymbol' + ); + symbolCapabilities.dynamicRegistration = true; + symbolCapabilities.symbolKind = { + valueSet: SupportedSymbolKinds, + }; + symbolCapabilities.hierarchicalDocumentSymbolSupport = true; + symbolCapabilities.tagSupport = { + valueSet: SupportedSymbolTags, + }; + symbolCapabilities.labelSupport = true; + } + initialize(capabilities, documentSelector) { + const options = this.getRegistrationOptions( + documentSelector, + capabilities.documentSymbolProvider + ); + if (!options) { + return; + } + this.register({ id: UUID.generateUuid(), registerOptions: options }); + } + registerLanguageProvider(options) { + const provider = { + provideDocumentSymbols: (document2, token) => { + const client = this._client; + const _provideDocumentSymbols = (document3, token2) => { + return client + .sendRequest( + vscode_languageserver_protocol_1.DocumentSymbolRequest.type, + client.code2ProtocolConverter.asDocumentSymbolParams( + document3 + ), + token2 + ) + .then( + (data) => { + if (data === null) { + return void 0; + } + if (data.length === 0) { + return []; + } else { + let element = data[0]; + if ( + vscode_languageserver_protocol_1.DocumentSymbol.is( + element + ) + ) { + return client.protocol2CodeConverter.asDocumentSymbols( + data + ); + } else { + return client.protocol2CodeConverter.asSymbolInformations( + data + ); + } + } + }, + (error) => { + return client.handleFailedRequest( + vscode_languageserver_protocol_1.DocumentSymbolRequest + .type, + token2, + error, + null + ); + } + ); + }; + const middleware = client.clientOptions.middleware; + return middleware.provideDocumentSymbols + ? middleware.provideDocumentSymbols( + document2, + token, + _provideDocumentSymbols + ) + : _provideDocumentSymbols(document2, token); + }, + }; + const metaData = + options.label !== void 0 ? { label: options.label } : void 0; + return [ + vscode_1.languages.registerDocumentSymbolProvider( + options.documentSelector, + provider, + metaData + ), + provider, + ]; + } + }; + let WorkspaceSymbolFeature = class extends WorkspaceFeature { + constructor(client) { + super( + client, + vscode_languageserver_protocol_1.WorkspaceSymbolRequest.type + ); + } + fillClientCapabilities(capabilities) { + let symbolCapabilities = ensure( + ensure(capabilities, 'workspace'), + 'symbol' + ); + symbolCapabilities.dynamicRegistration = true; + symbolCapabilities.symbolKind = { + valueSet: SupportedSymbolKinds, + }; + symbolCapabilities.tagSupport = { + valueSet: SupportedSymbolTags, + }; + symbolCapabilities.resolveSupport = { properties: ['location.range'] }; + } + initialize(capabilities) { + if (!capabilities.workspaceSymbolProvider) { + return; + } + this.register({ + id: UUID.generateUuid(), + registerOptions: + capabilities.workspaceSymbolProvider === true + ? { workDoneProgress: false } + : capabilities.workspaceSymbolProvider, + }); + } + registerLanguageProvider(options) { + const provider = { + provideWorkspaceSymbols: (query, token) => { + const client = this._client; + const provideWorkspaceSymbols = (query2, token2) => { + return client + .sendRequest( + vscode_languageserver_protocol_1.WorkspaceSymbolRequest.type, + { query: query2 }, + token2 + ) + .then( + client.protocol2CodeConverter.asSymbolInformations, + (error) => { + return client.handleFailedRequest( + vscode_languageserver_protocol_1.WorkspaceSymbolRequest + .type, + token2, + error, + null + ); + } + ); + }; + const middleware = client.clientOptions.middleware; + return middleware.provideWorkspaceSymbols + ? middleware.provideWorkspaceSymbols( + query, + token, + provideWorkspaceSymbols + ) + : provideWorkspaceSymbols(query, token); + }, + resolveWorkspaceSymbol: + options.resolveProvider === true + ? (item, token) => { + const client = this._client; + const resolveWorkspaceSymbol = (item2, token2) => { + return client + .sendRequest( + vscode_languageserver_protocol_1 + .WorkspaceSymbolResolveRequest.type, + client.code2ProtocolConverter.asWorkspaceSymbol(item2), + token2 + ) + .then( + client.protocol2CodeConverter.asSymbolInformation, + (error) => { + return client.handleFailedRequest( + vscode_languageserver_protocol_1 + .WorkspaceSymbolResolveRequest.type, + token2, + error, + null + ); + } + ); + }; + const middleware = client.clientOptions.middleware; + return middleware.resolveWorkspaceSymbol + ? middleware.resolveWorkspaceSymbol( + item, + token, + resolveWorkspaceSymbol + ) + : resolveWorkspaceSymbol(item, token); + } + : void 0, + }; + return [ + vscode_1.languages.registerWorkspaceSymbolProvider(provider), + provider, + ]; + } + }; + let CodeActionFeature = class extends TextDocumentFeature { + constructor(client) { + super(client, vscode_languageserver_protocol_1.CodeActionRequest.type); + } + fillClientCapabilities(capabilities) { + const cap = ensure(ensure(capabilities, 'textDocument'), 'codeAction'); + cap.dynamicRegistration = true; + cap.isPreferredSupport = true; + cap.disabledSupport = true; + cap.dataSupport = true; + cap.resolveSupport = { + properties: ['edit'], + }; + cap.codeActionLiteralSupport = { + codeActionKind: { + valueSet: [ + vscode_languageserver_protocol_1.CodeActionKind.Empty, + vscode_languageserver_protocol_1.CodeActionKind.QuickFix, + vscode_languageserver_protocol_1.CodeActionKind.Refactor, + vscode_languageserver_protocol_1.CodeActionKind.RefactorExtract, + vscode_languageserver_protocol_1.CodeActionKind.RefactorInline, + vscode_languageserver_protocol_1.CodeActionKind.RefactorRewrite, + vscode_languageserver_protocol_1.CodeActionKind.Source, + vscode_languageserver_protocol_1.CodeActionKind + .SourceOrganizeImports, + ], + }, + }; + cap.honorsChangeAnnotations = false; + } + initialize(capabilities, documentSelector) { + const options = this.getRegistrationOptions( + documentSelector, + capabilities.codeActionProvider + ); + if (!options) { + return; + } + this.register({ id: UUID.generateUuid(), registerOptions: options }); + } + registerLanguageProvider(options) { + const provider = { + provideCodeActions: (document2, range, context, token) => { + const client = this._client; + const _provideCodeActions = ( + document3, + range2, + context2, + token2 + ) => { + const params = { + textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier( + document3 + ), + range: client.code2ProtocolConverter.asRange(range2), + context: client.code2ProtocolConverter.asCodeActionContext( + context2 + ), + }; + return client + .sendRequest( + vscode_languageserver_protocol_1.CodeActionRequest.type, + params, + token2 + ) + .then( + (values) => { + if (values === null) { + return void 0; + } + const result = []; + for (let item of values) { + if (vscode_languageserver_protocol_1.Command.is(item)) { + result.push( + client.protocol2CodeConverter.asCommand(item) + ); + } else { + result.push( + client.protocol2CodeConverter.asCodeAction(item) + ); + } + } + return result; + }, + (error) => { + return client.handleFailedRequest( + vscode_languageserver_protocol_1.CodeActionRequest.type, + token2, + error, + null + ); + } + ); + }; + const middleware = client.clientOptions.middleware; + return middleware.provideCodeActions + ? middleware.provideCodeActions( + document2, + range, + context, + token, + _provideCodeActions + ) + : _provideCodeActions(document2, range, context, token); + }, + resolveCodeAction: options.resolveProvider + ? (item, token) => { + const client = this._client; + const middleware = this._client.clientOptions.middleware; + const resolveCodeAction = (item2, token2) => { + return client + .sendRequest( + vscode_languageserver_protocol_1.CodeActionResolveRequest + .type, + client.code2ProtocolConverter.asCodeAction(item2), + token2 + ) + .then( + client.protocol2CodeConverter.asCodeAction, + (error) => { + return client.handleFailedRequest( + vscode_languageserver_protocol_1 + .CodeActionResolveRequest.type, + token2, + error, + item2 + ); + } + ); + }; + return middleware.resolveCodeAction + ? middleware.resolveCodeAction(item, token, resolveCodeAction) + : resolveCodeAction(item, token); + } + : void 0, + }; + return [ + vscode_1.languages.registerCodeActionsProvider( + options.documentSelector, + provider, + options.codeActionKinds + ? { + providedCodeActionKinds: this._client.protocol2CodeConverter.asCodeActionKinds( + options.codeActionKinds + ), + } + : void 0 + ), + provider, + ]; + } + }; + let CodeLensFeature = class extends TextDocumentFeature { + constructor(client) { + super(client, vscode_languageserver_protocol_1.CodeLensRequest.type); + } + fillClientCapabilities(capabilities) { + ensure( + ensure(capabilities, 'textDocument'), + 'codeLens' + ).dynamicRegistration = true; + ensure( + ensure(capabilities, 'workspace'), + 'codeLens' + ).refreshSupport = true; + } + initialize(capabilities, documentSelector) { + const client = this._client; + client.onRequest( + vscode_languageserver_protocol_1.CodeLensRefreshRequest.type, + async () => { + for (const provider of this.getAllProviders()) { + provider.onDidChangeCodeLensEmitter.fire(); + } + } + ); + const options = this.getRegistrationOptions( + documentSelector, + capabilities.codeLensProvider + ); + if (!options) { + return; + } + this.register({ id: UUID.generateUuid(), registerOptions: options }); + } + registerLanguageProvider(options) { + const eventEmitter = new vscode_1.EventEmitter(); + const provider = { + onDidChangeCodeLenses: eventEmitter.event, + provideCodeLenses: (document2, token) => { + const client = this._client; + const provideCodeLenses = (document3, token2) => { + return client + .sendRequest( + vscode_languageserver_protocol_1.CodeLensRequest.type, + client.code2ProtocolConverter.asCodeLensParams(document3), + token2 + ) + .then(client.protocol2CodeConverter.asCodeLenses, (error) => { + return client.handleFailedRequest( + vscode_languageserver_protocol_1.CodeLensRequest.type, + token2, + error, + null + ); + }); + }; + const middleware = client.clientOptions.middleware; + return middleware.provideCodeLenses + ? middleware.provideCodeLenses( + document2, + token, + provideCodeLenses + ) + : provideCodeLenses(document2, token); + }, + resolveCodeLens: options.resolveProvider + ? (codeLens, token) => { + const client = this._client; + const resolveCodeLens = (codeLens2, token2) => { + return client + .sendRequest( + vscode_languageserver_protocol_1.CodeLensResolveRequest + .type, + client.code2ProtocolConverter.asCodeLens(codeLens2), + token2 + ) + .then(client.protocol2CodeConverter.asCodeLens, (error) => { + return client.handleFailedRequest( + vscode_languageserver_protocol_1.CodeLensResolveRequest + .type, + token2, + error, + codeLens2 + ); + }); + }; + const middleware = client.clientOptions.middleware; + return middleware.resolveCodeLens + ? middleware.resolveCodeLens(codeLens, token, resolveCodeLens) + : resolveCodeLens(codeLens, token); + } + : void 0, + }; + return [ + vscode_1.languages.registerCodeLensProvider( + options.documentSelector, + provider + ), + { provider, onDidChangeCodeLensEmitter: eventEmitter }, + ]; + } + }; + let DocumentFormattingFeature = class extends TextDocumentFeature { + constructor(client) { + super( + client, + vscode_languageserver_protocol_1.DocumentFormattingRequest.type + ); + } + fillClientCapabilities(capabilities) { + ensure( + ensure(capabilities, 'textDocument'), + 'formatting' + ).dynamicRegistration = true; + } + initialize(capabilities, documentSelector) { + const options = this.getRegistrationOptions( + documentSelector, + capabilities.documentFormattingProvider + ); + if (!options) { + return; + } + this.register({ id: UUID.generateUuid(), registerOptions: options }); + } + registerLanguageProvider(options) { + const provider = { + provideDocumentFormattingEdits: (document2, options2, token) => { + const client = this._client; + const provideDocumentFormattingEdits = ( + document3, + options3, + token2 + ) => { + const params = { + textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier( + document3 + ), + options: client.code2ProtocolConverter.asFormattingOptions( + options3, + FileFormattingOptions.fromConfiguration(document3) + ), + }; + return client + .sendRequest( + vscode_languageserver_protocol_1.DocumentFormattingRequest + .type, + params, + token2 + ) + .then(client.protocol2CodeConverter.asTextEdits, (error) => { + return client.handleFailedRequest( + vscode_languageserver_protocol_1.DocumentFormattingRequest + .type, + token2, + error, + null + ); + }); + }; + const middleware = client.clientOptions.middleware; + return middleware.provideDocumentFormattingEdits + ? middleware.provideDocumentFormattingEdits( + document2, + options2, + token, + provideDocumentFormattingEdits + ) + : provideDocumentFormattingEdits(document2, options2, token); + }, + }; + return [ + vscode_1.languages.registerDocumentFormattingEditProvider( + options.documentSelector, + provider + ), + provider, + ]; + } + }; + let DocumentRangeFormattingFeature = class extends TextDocumentFeature { + constructor(client) { + super( + client, + vscode_languageserver_protocol_1.DocumentRangeFormattingRequest.type + ); + } + fillClientCapabilities(capabilities) { + ensure( + ensure(capabilities, 'textDocument'), + 'rangeFormatting' + ).dynamicRegistration = true; + } + initialize(capabilities, documentSelector) { + const options = this.getRegistrationOptions( + documentSelector, + capabilities.documentRangeFormattingProvider + ); + if (!options) { + return; + } + this.register({ id: UUID.generateUuid(), registerOptions: options }); + } + registerLanguageProvider(options) { + const provider = { + provideDocumentRangeFormattingEdits: ( + document2, + range, + options2, + token + ) => { + const client = this._client; + const provideDocumentRangeFormattingEdits = ( + document3, + range2, + options3, + token2 + ) => { + const params = { + textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier( + document3 + ), + range: client.code2ProtocolConverter.asRange(range2), + options: client.code2ProtocolConverter.asFormattingOptions( + options3, + FileFormattingOptions.fromConfiguration(document3) + ), + }; + return client + .sendRequest( + vscode_languageserver_protocol_1 + .DocumentRangeFormattingRequest.type, + params, + token2 + ) + .then(client.protocol2CodeConverter.asTextEdits, (error) => { + return client.handleFailedRequest( + vscode_languageserver_protocol_1 + .DocumentRangeFormattingRequest.type, + token2, + error, + null + ); + }); + }; + const middleware = client.clientOptions.middleware; + return middleware.provideDocumentRangeFormattingEdits + ? middleware.provideDocumentRangeFormattingEdits( + document2, + range, + options2, + token, + provideDocumentRangeFormattingEdits + ) + : provideDocumentRangeFormattingEdits( + document2, + range, + options2, + token + ); + }, + }; + return [ + vscode_1.languages.registerDocumentRangeFormattingEditProvider( + options.documentSelector, + provider + ), + provider, + ]; + } + }; + let DocumentOnTypeFormattingFeature = class extends TextDocumentFeature { + constructor(client) { + super( + client, + vscode_languageserver_protocol_1.DocumentOnTypeFormattingRequest.type + ); + } + fillClientCapabilities(capabilities) { + ensure( + ensure(capabilities, 'textDocument'), + 'onTypeFormatting' + ).dynamicRegistration = true; + } + initialize(capabilities, documentSelector) { + const options = this.getRegistrationOptions( + documentSelector, + capabilities.documentOnTypeFormattingProvider + ); + if (!options) { + return; + } + this.register({ id: UUID.generateUuid(), registerOptions: options }); + } + registerLanguageProvider(options) { + const provider = { + provideOnTypeFormattingEdits: ( + document2, + position, + ch, + options2, + token + ) => { + const client = this._client; + const provideOnTypeFormattingEdits = ( + document3, + position2, + ch2, + options3, + token2 + ) => { + let params = { + textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier( + document3 + ), + position: client.code2ProtocolConverter.asPosition(position2), + ch: ch2, + options: client.code2ProtocolConverter.asFormattingOptions( + options3, + FileFormattingOptions.fromConfiguration(document3) + ), + }; + return client + .sendRequest( + vscode_languageserver_protocol_1 + .DocumentOnTypeFormattingRequest.type, + params, + token2 + ) + .then(client.protocol2CodeConverter.asTextEdits, (error) => { + return client.handleFailedRequest( + vscode_languageserver_protocol_1 + .DocumentOnTypeFormattingRequest.type, + token2, + error, + null + ); + }); + }; + const middleware = client.clientOptions.middleware; + return middleware.provideOnTypeFormattingEdits + ? middleware.provideOnTypeFormattingEdits( + document2, + position, + ch, + options2, + token, + provideOnTypeFormattingEdits + ) + : provideOnTypeFormattingEdits( + document2, + position, + ch, + options2, + token + ); + }, + }; + const moreTriggerCharacter = options.moreTriggerCharacter || []; + return [ + vscode_1.languages.registerOnTypeFormattingEditProvider( + options.documentSelector, + provider, + options.firstTriggerCharacter, + ...moreTriggerCharacter + ), + provider, + ]; + } + }; + let RenameFeature = class extends TextDocumentFeature { + constructor(client) { + super(client, vscode_languageserver_protocol_1.RenameRequest.type); + } + fillClientCapabilities(capabilities) { + let rename = ensure(ensure(capabilities, 'textDocument'), 'rename'); + rename.dynamicRegistration = true; + rename.prepareSupport = true; + rename.prepareSupportDefaultBehavior = + vscode_languageserver_protocol_1.PrepareSupportDefaultBehavior.Identifier; + rename.honorsChangeAnnotations = true; + } + initialize(capabilities, documentSelector) { + const options = this.getRegistrationOptions( + documentSelector, + capabilities.renameProvider + ); + if (!options) { + return; + } + if (Is2.boolean(capabilities.renameProvider)) { + options.prepareProvider = false; + } + this.register({ id: UUID.generateUuid(), registerOptions: options }); + } + registerLanguageProvider(options) { + const provider = { + provideRenameEdits: (document2, position, newName, token) => { + const client = this._client; + const provideRenameEdits = ( + document3, + position2, + newName2, + token2 + ) => { + let params = { + textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier( + document3 + ), + position: client.code2ProtocolConverter.asPosition(position2), + newName: newName2, + }; + return client + .sendRequest( + vscode_languageserver_protocol_1.RenameRequest.type, + params, + token2 + ) + .then( + client.protocol2CodeConverter.asWorkspaceEdit, + (error) => { + return client.handleFailedRequest( + vscode_languageserver_protocol_1.RenameRequest.type, + token2, + error, + null, + false + ); + } + ); + }; + const middleware = client.clientOptions.middleware; + return middleware.provideRenameEdits + ? middleware.provideRenameEdits( + document2, + position, + newName, + token, + provideRenameEdits + ) + : provideRenameEdits(document2, position, newName, token); + }, + prepareRename: options.prepareProvider + ? (document2, position, token) => { + const client = this._client; + const prepareRename = (document3, position2, token2) => { + let params = { + textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier( + document3 + ), + position: client.code2ProtocolConverter.asPosition( + position2 + ), + }; + return client + .sendRequest( + vscode_languageserver_protocol_1.PrepareRenameRequest + .type, + params, + token2 + ) + .then( + (result) => { + if (vscode_languageserver_protocol_1.Range.is(result)) { + return client.protocol2CodeConverter.asRange(result); + } else if (this.isDefaultBehavior(result)) { + return result.defaultBehavior === true + ? null + : Promise.reject( + new Error(`The element can't be renamed.`) + ); + } else if ( + result && + vscode_languageserver_protocol_1.Range.is( + result.range + ) + ) { + return { + range: client.protocol2CodeConverter.asRange( + result.range + ), + placeholder: result.placeholder, + }; + } + return Promise.reject( + new Error(`The element can't be renamed.`) + ); + }, + (error) => { + if (typeof error.message === 'string') { + throw new Error(error.message); + } else { + throw new Error(`The element can't be renamed.`); + } + } + ); + }; + const middleware = client.clientOptions.middleware; + return middleware.prepareRename + ? middleware.prepareRename( + document2, + position, + token, + prepareRename + ) + : prepareRename(document2, position, token); + } + : void 0, + }; + return [ + vscode_1.languages.registerRenameProvider( + options.documentSelector, + provider + ), + provider, + ]; + } + isDefaultBehavior(value) { + const candidate = value; + return candidate && Is2.boolean(candidate.defaultBehavior); + } + }; + let DocumentLinkFeature = class extends TextDocumentFeature { + constructor(client) { + super( + client, + vscode_languageserver_protocol_1.DocumentLinkRequest.type + ); + } + fillClientCapabilities(capabilities) { + const documentLinkCapabilities = ensure( + ensure(capabilities, 'textDocument'), + 'documentLink' + ); + documentLinkCapabilities.dynamicRegistration = true; + documentLinkCapabilities.tooltipSupport = true; + } + initialize(capabilities, documentSelector) { + const options = this.getRegistrationOptions( + documentSelector, + capabilities.documentLinkProvider + ); + if (!options) { + return; + } + this.register({ id: UUID.generateUuid(), registerOptions: options }); + } + registerLanguageProvider(options) { + const provider = { + provideDocumentLinks: (document2, token) => { + const client = this._client; + const provideDocumentLinks = (document3, token2) => { + return client + .sendRequest( + vscode_languageserver_protocol_1.DocumentLinkRequest.type, + client.code2ProtocolConverter.asDocumentLinkParams(document3), + token2 + ) + .then( + client.protocol2CodeConverter.asDocumentLinks, + (error) => { + return client.handleFailedRequest( + vscode_languageserver_protocol_1.DocumentLinkRequest.type, + token2, + error, + null + ); + } + ); + }; + const middleware = client.clientOptions.middleware; + return middleware.provideDocumentLinks + ? middleware.provideDocumentLinks( + document2, + token, + provideDocumentLinks + ) + : provideDocumentLinks(document2, token); + }, + resolveDocumentLink: options.resolveProvider + ? (link, token) => { + const client = this._client; + let resolveDocumentLink = (link2, token2) => { + return client + .sendRequest( + vscode_languageserver_protocol_1 + .DocumentLinkResolveRequest.type, + client.code2ProtocolConverter.asDocumentLink(link2), + token2 + ) + .then( + client.protocol2CodeConverter.asDocumentLink, + (error) => { + return client.handleFailedRequest( + vscode_languageserver_protocol_1 + .DocumentLinkResolveRequest.type, + token2, + error, + link2 + ); + } + ); + }; + const middleware = client.clientOptions.middleware; + return middleware.resolveDocumentLink + ? middleware.resolveDocumentLink( + link, + token, + resolveDocumentLink + ) + : resolveDocumentLink(link, token); + } + : void 0, + }; + return [ + vscode_1.languages.registerDocumentLinkProvider( + options.documentSelector, + provider + ), + provider, + ]; + } + }; + let ConfigurationFeature = class { + constructor(_client) { + this._client = _client; + this._listeners = new Map(); + } + get registrationType() { + return vscode_languageserver_protocol_1 + .DidChangeConfigurationNotification.type; + } + fillClientCapabilities(capabilities) { + ensure( + ensure(capabilities, 'workspace'), + 'didChangeConfiguration' + ).dynamicRegistration = true; + } + initialize() { + let section = this._client.clientOptions.synchronize + .configurationSection; + if (section !== void 0) { + this.register({ + id: UUID.generateUuid(), + registerOptions: { + section, + }, + }); + } + } + register(data) { + let disposable = vscode_1.workspace.onDidChangeConfiguration( + (event) => { + this.onDidChangeConfiguration(data.registerOptions.section, event); + } + ); + this._listeners.set(data.id, disposable); + if (data.registerOptions.section !== void 0) { + this.onDidChangeConfiguration(data.registerOptions.section, void 0); + } + } + unregister(id) { + let disposable = this._listeners.get(id); + if (disposable) { + this._listeners.delete(id); + disposable.dispose(); + } + } + dispose() { + for (const disposable of this._listeners.values()) { + disposable.dispose(); + } + this._listeners.clear(); + } + onDidChangeConfiguration(configurationSection, event) { + let sections; + if (Is2.string(configurationSection)) { + sections = [configurationSection]; + } else { + sections = configurationSection; + } + if (sections !== void 0 && event !== void 0) { + let affected = sections.some((section) => + event.affectsConfiguration(section) + ); + if (!affected) { + return; + } + } + const didChangeConfiguration = async (sections2) => { + if (sections2 === void 0) { + return this._client.sendNotification( + vscode_languageserver_protocol_1 + .DidChangeConfigurationNotification.type, + { settings: null } + ); + } else { + return this._client.sendNotification( + vscode_languageserver_protocol_1 + .DidChangeConfigurationNotification.type, + { settings: this.extractSettingsInformation(sections2) } + ); + } + }; + let middleware = this.getMiddleware(); + (middleware + ? middleware(sections, didChangeConfiguration) + : didChangeConfiguration(sections) + ).catch((error) => { + this._client.error( + `Sending notification ${vscode_languageserver_protocol_1.DidChangeConfigurationNotification.type.method} failed`, + error + ); + }); + } + extractSettingsInformation(keys) { + function ensurePath(config, path) { + let current = config; + for (let i = 0; i < path.length - 1; i++) { + let obj = current[path[i]]; + if (!obj) { + obj = Object.create(null); + current[path[i]] = obj; + } + current = obj; + } + return current; + } + let resource = this._client.clientOptions.workspaceFolder + ? this._client.clientOptions.workspaceFolder.uri + : void 0; + let result = Object.create(null); + for (let i = 0; i < keys.length; i++) { + let key = keys[i]; + let index = key.indexOf('.'); + let config = null; + if (index >= 0) { + config = vscode_1.workspace + .getConfiguration(key.substr(0, index), resource) + .get(key.substr(index + 1)); + } else { + config = vscode_1.workspace + .getConfiguration(void 0, resource) + .get(key); + } + if (config) { + let path = keys[i].split('.'); + ensurePath(result, path)[path[path.length - 1]] = (0, + configuration_1.toJSONObject)(config); + } + } + return result; + } + getMiddleware() { + let middleware = this._client.clientOptions.middleware; + if ( + middleware.workspace && + middleware.workspace.didChangeConfiguration + ) { + return middleware.workspace.didChangeConfiguration; + } else { + return void 0; + } + } + }; + let ExecuteCommandFeature = class { + constructor(_client) { + this._client = _client; + this._commands = new Map(); + } + get registrationType() { + return vscode_languageserver_protocol_1.ExecuteCommandRequest.type; + } + fillClientCapabilities(capabilities) { + ensure( + ensure(capabilities, 'workspace'), + 'executeCommand' + ).dynamicRegistration = true; + } + initialize(capabilities) { + if (!capabilities.executeCommandProvider) { + return; + } + this.register({ + id: UUID.generateUuid(), + registerOptions: Object.assign( + {}, + capabilities.executeCommandProvider + ), + }); + } + register(data) { + const client = this._client; + const middleware = client.clientOptions.middleware; + const executeCommand = (command, args) => { + let params = { + command, + arguments: args, + }; + return client + .sendRequest( + vscode_languageserver_protocol_1.ExecuteCommandRequest.type, + params + ) + .then(void 0, (error) => { + return client.handleFailedRequest( + vscode_languageserver_protocol_1.ExecuteCommandRequest.type, + void 0, + error, + void 0 + ); + }); + }; + if (data.registerOptions.commands) { + const disposables = []; + for (const command of data.registerOptions.commands) { + disposables.push( + vscode_1.commands.registerCommand(command, (...args) => { + return middleware.executeCommand + ? middleware.executeCommand(command, args, executeCommand) + : executeCommand(command, args); + }) + ); + } + this._commands.set(data.id, disposables); + } + } + unregister(id) { + let disposables = this._commands.get(id); + if (disposables) { + disposables.forEach((disposable) => disposable.dispose()); + } + } + dispose() { + this._commands.forEach((value) => { + value.forEach((disposable) => disposable.dispose()); + }); + this._commands.clear(); + } + }; + let MessageTransports; + (function (MessageTransports2) { + function is2(value) { + let candidate = value; + return ( + candidate && + vscode_languageserver_protocol_1.MessageReader.is(value.reader) && + vscode_languageserver_protocol_1.MessageWriter.is(value.writer) + ); + } + MessageTransports2.is = is2; + })( + (MessageTransports = + exports.MessageTransports || (exports.MessageTransports = {})) + ); + let OnReady = class { + constructor(_resolve, _reject) { + this._resolve = _resolve; + this._reject = _reject; + this._used = false; + } + get isUsed() { + return this._used; + } + resolve() { + this._used = true; + this._resolve(); + } + reject(error) { + this._used = true; + this._reject(error); + } + }; + let LSPCancellationError = class extends vscode_1.CancellationError { + constructor(data) { + super(); + this.data = data; + } + }; + exports.LSPCancellationError = LSPCancellationError; + var BaseLanguageClient = class { + constructor(id, name, clientOptions) { + this._traceFormat = vscode_languageserver_protocol_1.TraceFormat.Text; + this._features = []; + this._dynamicFeatures = new Map(); + this._id = id; + this._name = name; + clientOptions = clientOptions || {}; + const markdown = { isTrusted: false, supportHtml: false }; + if (clientOptions.markdown !== void 0) { + markdown.isTrusted = clientOptions.markdown.isTrusted === true; + markdown.supportHtml = clientOptions.markdown.supportHtml === true; + } + this._clientOptions = { + documentSelector: clientOptions.documentSelector ?? [], + synchronize: clientOptions.synchronize ?? {}, + diagnosticCollectionName: clientOptions.diagnosticCollectionName, + outputChannelName: clientOptions.outputChannelName ?? this._name, + revealOutputChannelOn: + clientOptions.revealOutputChannelOn ?? RevealOutputChannelOn2.Error, + stdioEncoding: clientOptions.stdioEncoding ?? 'utf8', + initializationOptions: clientOptions.initializationOptions, + initializationFailedHandler: + clientOptions.initializationFailedHandler, + progressOnInitialization: !!clientOptions.progressOnInitialization, + errorHandler: + clientOptions.errorHandler ?? + this.createDefaultErrorHandler( + clientOptions.connectionOptions?.maxRestartCount + ), + middleware: clientOptions.middleware ?? {}, + uriConverters: clientOptions.uriConverters, + workspaceFolder: clientOptions.workspaceFolder, + connectionOptions: clientOptions.connectionOptions, + markdown, + diagnosticPullOptions: clientOptions.diagnosticPullOptions ?? { + onChange: true, + onSave: false, + }, + }; + this._clientOptions.synchronize = this._clientOptions.synchronize || {}; + this._state = ClientState.Initial; + this._connectionPromise = void 0; + this._resolvedConnection = void 0; + this._initializeResult = void 0; + if (clientOptions.outputChannel) { + this._outputChannel = clientOptions.outputChannel; + this._disposeOutputChannel = false; + } else { + this._outputChannel = void 0; + this._disposeOutputChannel = true; + } + this._traceOutputChannel = clientOptions.traceOutputChannel; + this._listeners = void 0; + this._providers = void 0; + this._diagnostics = void 0; + this._fileEvents = []; + this._fileEventDelayer = new async_1.Delayer(250); + this._onReady = new Promise((resolve, reject) => { + this._onReadyCallbacks = new OnReady(resolve, reject); + }); + this._onStop = void 0; + this._telemetryEmitter = new vscode_languageserver_protocol_1.Emitter(); + this._stateChangeEmitter = new vscode_languageserver_protocol_1.Emitter(); + this._trace = vscode_languageserver_protocol_1.Trace.Off; + this._tracer = { + log: (messageOrDataObject, data) => { + if (Is2.string(messageOrDataObject)) { + this.logTrace(messageOrDataObject, data); + } else { + this.logObjectTrace(messageOrDataObject); + } + }, + }; + this._c2p = c2p.createConverter( + clientOptions.uriConverters + ? clientOptions.uriConverters.code2Protocol + : void 0 + ); + this._p2c = p2c.createConverter( + clientOptions.uriConverters + ? clientOptions.uriConverters.protocol2Code + : void 0, + this._clientOptions.markdown.isTrusted, + this._clientOptions.markdown.supportHtml + ); + this._syncedDocuments = new Map(); + this.registerBuiltinFeatures(); + } + get state() { + return this._state; + } + set state(value) { + let oldState = this.getPublicState(); + this._state = value; + let newState = this.getPublicState(); + if (newState !== oldState) { + this._stateChangeEmitter.fire({ oldState, newState }); + } + } + getPublicState() { + if (this.state === ClientState.Running) { + return State.Running; + } else if (this.state === ClientState.Starting) { + return State.Starting; + } else { + return State.Stopped; + } + } + get initializeResult() { + return this._initializeResult; + } + sendRequest(type, ...params) { + if (!this.isConnectionActive()) { + throw new Error( + `Language client is not ready yet when handling ${ + Is2.string(type) ? type : type.method + }` + ); + } + this.forceDocumentSync(); + try { + return this._resolvedConnection.sendRequest(type, ...params); + } catch (error) { + this.error( + `Sending request ${Is2.string(type) ? type : type.method} failed.`, + error + ); + throw error; + } + } + onRequest(type, handler) { + if (!this.isConnectionActive()) { + throw new Error( + `Language client is not ready yet when handling ${ + Is2.string(type) ? type : type.method + }` + ); + } + try { + return this._resolvedConnection.onRequest(type, handler); + } catch (error) { + this.error( + `Registering request handler ${ + Is2.string(type) ? type : type.method + } failed.`, + error + ); + throw error; + } + } + sendNotification(type, params) { + if (!this.isConnectionActive()) { + throw new Error( + `Language client is not ready yet when handling ${ + Is2.string(type) ? type : type.method + }` + ); + } + this.forceDocumentSync(); + try { + return this._resolvedConnection.sendNotification(type, params); + } catch (error) { + this.error( + `Sending notification ${ + Is2.string(type) ? type : type.method + } failed.`, + error + ); + throw error; + } + } + onNotification(type, handler) { + if (!this.isConnectionActive()) { + throw new Error( + `Language client is not ready yet when handling ${ + Is2.string(type) ? type : type.method + }` + ); + } + try { + return this._resolvedConnection.onNotification(type, handler); + } catch (error) { + this.error( + `Registering notification handler ${ + Is2.string(type) ? type : type.method + } failed.`, + error + ); + throw error; + } + } + onProgress(type, token, handler) { + if (!this.isConnectionActive()) { + throw new Error( + 'Language client is not ready yet when trying to send progress' + ); + } + try { + if (vscode_languageserver_protocol_1.WorkDoneProgress.is(type)) { + const handleWorkDoneProgress = this._clientOptions.middleware + .handleWorkDoneProgress; + if (handleWorkDoneProgress !== void 0) { + return this._resolvedConnection.onProgress( + type, + token, + (params) => { + handleWorkDoneProgress(token, params, () => handler(params)); + } + ); + } + } + return this._resolvedConnection.onProgress(type, token, handler); + } catch (error) { + this.error( + `Registering progress handler for token ${token} failed.`, + error + ); + throw error; + } + } + sendProgress(type, token, value) { + if (!this.isConnectionActive()) { + throw new Error( + 'Language client is not ready yet when trying to send progress' + ); + } + this.forceDocumentSync(); + return this._resolvedConnection + .sendProgress(type, token, value) + .then(void 0, (error) => { + this.error(`Sending progress for token ${token} failed.`, error); + throw error; + }); + } + get name() { + return this._name; + } + get clientOptions() { + return this._clientOptions; + } + get protocol2CodeConverter() { + return this._p2c; + } + get code2ProtocolConverter() { + return this._c2p; + } + get onTelemetry() { + return this._telemetryEmitter.event; + } + get onDidChangeState() { + return this._stateChangeEmitter.event; + } + get outputChannel() { + if (!this._outputChannel) { + this._outputChannel = vscode_1.window.createOutputChannel( + this._clientOptions.outputChannelName + ? this._clientOptions.outputChannelName + : this._name + ); + } + return this._outputChannel; + } + get traceOutputChannel() { + if (this._traceOutputChannel) { + return this._traceOutputChannel; + } + return this.outputChannel; + } + get diagnostics() { + return this._diagnostics; + } + createDefaultErrorHandler(maxRestartCount) { + if (maxRestartCount !== void 0 && maxRestartCount < 0) { + throw new Error(`Invalid maxRestartCount: ${maxRestartCount}`); + } + return new DefaultErrorHandler(this, maxRestartCount ?? 4); + } + set trace(value) { + this._trace = value; + this.onReady().then( + () => { + this.resolveConnection().then( + (connection) => { + connection.trace(this._trace, this._tracer, { + sendNotification: false, + traceFormat: this._traceFormat, + }); + }, + () => this.info(`Setting trace value failed`, void 0, false) + ); + }, + () => {} + ); + } + data2String(data) { + if (data instanceof vscode_languageserver_protocol_1.ResponseError) { + const responseError = data; + return ` Message: ${responseError.message} + Code: ${responseError.code} ${ + responseError.data ? '\n' + responseError.data.toString() : '' + }`; + } + if (data instanceof Error) { + if (Is2.string(data.stack)) { + return data.stack; + } + return data.message; + } + if (Is2.string(data)) { + return data; + } + return data.toString(); + } + info(message, data, showNotification = true) { + this.outputChannel.appendLine( + `[Info - ${new Date().toLocaleTimeString()}] ${message}` + ); + if (data !== null && data !== void 0) { + this.outputChannel.appendLine(this.data2String(data)); + } + if ( + showNotification && + this._clientOptions.revealOutputChannelOn <= + RevealOutputChannelOn2.Info + ) { + this.showNotificationMessage( + vscode_languageserver_protocol_1.MessageType.Info, + message + ); + } + } + warn(message, data, showNotification = true) { + this.outputChannel.appendLine( + `[Warn - ${new Date().toLocaleTimeString()}] ${message}` + ); + if (data !== null && data !== void 0) { + this.outputChannel.appendLine(this.data2String(data)); + } + if ( + showNotification && + this._clientOptions.revealOutputChannelOn <= + RevealOutputChannelOn2.Warn + ) { + this.showNotificationMessage( + vscode_languageserver_protocol_1.MessageType.Warning, + message + ); + } + } + error(message, data, showNotification = true) { + this.outputChannel.appendLine( + `[Error - ${new Date().toLocaleTimeString()}] ${message}` + ); + if (data !== null && data !== void 0) { + this.outputChannel.appendLine(this.data2String(data)); + } + if ( + showNotification === 'force' || + (showNotification && + this._clientOptions.revealOutputChannelOn <= + RevealOutputChannelOn2.Error) + ) { + this.showNotificationMessage( + vscode_languageserver_protocol_1.MessageType.Error, + message + ); + } + } + showNotificationMessage(type, message) { + message = + message ?? + 'A request has failed. See the output for more information.'; + const messageFunc = + type === vscode_languageserver_protocol_1.MessageType.Error + ? vscode_1.window.showErrorMessage + : type === vscode_languageserver_protocol_1.MessageType.Warning + ? vscode_1.window.showWarningMessage + : vscode_1.window.showInformationMessage; + void messageFunc(message, 'Go to output').then((selection) => { + if (selection !== void 0) { + this.outputChannel.show(true); + } + }); + } + logTrace(message, data) { + this.traceOutputChannel.appendLine( + `[Trace - ${new Date().toLocaleTimeString()}] ${message}` + ); + if (data) { + this.traceOutputChannel.appendLine(this.data2String(data)); + } + } + logObjectTrace(data) { + if (data.isLSPMessage && data.type) { + this.traceOutputChannel.append( + `[LSP - ${new Date().toLocaleTimeString()}] ` + ); + } else { + this.traceOutputChannel.append( + `[Trace - ${new Date().toLocaleTimeString()}] ` + ); + } + if (data) { + this.traceOutputChannel.appendLine(`${JSON.stringify(data)}`); + } + } + needsStart() { + return ( + this.state === ClientState.Initial || + this.state === ClientState.Stopping || + this.state === ClientState.Stopped + ); + } + needsStop() { + return ( + this.state === ClientState.Starting || + this.state === ClientState.Running + ); + } + onReady() { + return this._onReady; + } + isConnectionActive() { + return this.state === ClientState.Running && !!this._resolvedConnection; + } + start() { + if (this._onReadyCallbacks.isUsed) { + this._onReady = new Promise((resolve, reject) => { + this._onReadyCallbacks = new OnReady(resolve, reject); + }); + } + this._listeners = []; + this._providers = []; + if (!this._diagnostics) { + this._diagnostics = this._clientOptions.diagnosticCollectionName + ? vscode_1.languages.createDiagnosticCollection( + this._clientOptions.diagnosticCollectionName + ) + : vscode_1.languages.createDiagnosticCollection(); + } + this.state = ClientState.Starting; + this.resolveConnection() + .then((connection) => { + connection.onLogMessage((message) => { + switch (message.type) { + case vscode_languageserver_protocol_1.MessageType.Error: + this.error(message.message, void 0, false); + break; + case vscode_languageserver_protocol_1.MessageType.Warning: + this.warn(message.message, void 0, false); + break; + case vscode_languageserver_protocol_1.MessageType.Info: + this.info(message.message, void 0, false); + break; + default: + this.outputChannel.appendLine(message.message); + } + }); + connection.onShowMessage((message) => { + switch (message.type) { + case vscode_languageserver_protocol_1.MessageType.Error: + void vscode_1.window.showErrorMessage(message.message); + break; + case vscode_languageserver_protocol_1.MessageType.Warning: + void vscode_1.window.showWarningMessage(message.message); + break; + case vscode_languageserver_protocol_1.MessageType.Info: + void vscode_1.window.showInformationMessage(message.message); + break; + default: + void vscode_1.window.showInformationMessage(message.message); + } + }); + connection.onRequest( + vscode_languageserver_protocol_1.ShowMessageRequest.type, + (params) => { + let messageFunc; + switch (params.type) { + case vscode_languageserver_protocol_1.MessageType.Error: + messageFunc = vscode_1.window.showErrorMessage; + break; + case vscode_languageserver_protocol_1.MessageType.Warning: + messageFunc = vscode_1.window.showWarningMessage; + break; + case vscode_languageserver_protocol_1.MessageType.Info: + messageFunc = vscode_1.window.showInformationMessage; + break; + default: + messageFunc = vscode_1.window.showInformationMessage; + } + let actions = params.actions || []; + return messageFunc(params.message, ...actions); + } + ); + connection.onTelemetry((data) => { + this._telemetryEmitter.fire(data); + }); + connection.onRequest( + vscode_languageserver_protocol_1.ShowDocumentRequest.type, + async (params) => { + const showDocument = async (params2) => { + const uri = this.protocol2CodeConverter.asUri(params2.uri); + try { + if (params2.external === true) { + const success = await vscode_1.env.openExternal(uri); + return { success }; + } else { + const options = {}; + if (params2.selection !== void 0) { + options.selection = this.protocol2CodeConverter.asRange( + params2.selection + ); + } + if ( + params2.takeFocus === void 0 || + params2.takeFocus === false + ) { + options.preserveFocus = true; + } else if (params2.takeFocus === true) { + options.preserveFocus = false; + } + await vscode_1.window.showTextDocument(uri, options); + return { success: true }; + } + } catch (error) { + return { success: true }; + } + }; + const middleware = this._clientOptions.middleware.window + ?.showDocument; + if (middleware !== void 0) { + return middleware(params, showDocument); + } else { + return showDocument(params); + } + } + ); + connection.listen(); + return this.initialize(connection); + }) + .catch((error) => { + this.state = ClientState.StartFailed; + this._onReadyCallbacks.reject(error); + this.error( + `${this._name} client: couldn't create connection to server`, + error, + 'force' + ); + }); + return new vscode_1.Disposable(() => { + if (this.needsStop()) { + this.stop().catch((error) => { + this.error(`Stopping server failed.`, error, false); + }); + } + }); + } + resolveConnection() { + if (!this._connectionPromise) { + this._connectionPromise = this.createConnection(); + } + return this._connectionPromise; + } + initialize(connection) { + this.refreshTrace(connection, false); + const initOption = this._clientOptions.initializationOptions; + const [rootPath, workspaceFolders] = + this._clientOptions.workspaceFolder !== void 0 + ? [ + this._clientOptions.workspaceFolder.uri.fsPath, + [ + { + uri: this._c2p.asUri( + this._clientOptions.workspaceFolder.uri + ), + name: this._clientOptions.workspaceFolder.name, + }, + ], + ] + : [this._clientGetRootPath(), null]; + const initParams = { + processId: null, + clientInfo: { + name: vscode_1.env.appName, + version: vscode_1.version, + }, + locale: this.getLocale(), + rootPath: rootPath ? rootPath : null, + rootUri: rootPath + ? this._c2p.asUri(vscode_1.Uri.file(rootPath)) + : null, + capabilities: this.computeClientCapabilities(), + initializationOptions: Is2.func(initOption) + ? initOption() + : initOption, + trace: vscode_languageserver_protocol_1.Trace.toString(this._trace), + workspaceFolders, + }; + this.fillInitializeParams(initParams); + if (this._clientOptions.progressOnInitialization) { + const token = UUID.generateUuid(); + const part = new progressPart_1.ProgressPart(connection, token); + initParams.workDoneToken = token; + return this.doInitialize(connection, initParams).then( + (result) => { + part.done(); + return result; + }, + (error) => { + part.cancel(); + throw error; + } + ); + } else { + return this.doInitialize(connection, initParams); + } + } + doInitialize(connection, initParams) { + return connection + .initialize(initParams) + .then((result) => { + this._resolvedConnection = connection; + this._initializeResult = result; + this.state = ClientState.Running; + let textDocumentSyncOptions = void 0; + if (Is2.number(result.capabilities.textDocumentSync)) { + if ( + result.capabilities.textDocumentSync === + vscode_languageserver_protocol_1.TextDocumentSyncKind.None + ) { + textDocumentSyncOptions = { + openClose: false, + change: + vscode_languageserver_protocol_1.TextDocumentSyncKind.None, + save: void 0, + }; + } else { + textDocumentSyncOptions = { + openClose: true, + change: result.capabilities.textDocumentSync, + save: { + includeText: false, + }, + }; + } + } else if ( + result.capabilities.textDocumentSync !== void 0 && + result.capabilities.textDocumentSync !== null + ) { + textDocumentSyncOptions = result.capabilities.textDocumentSync; + } + this._capabilities = Object.assign({}, result.capabilities, { + resolvedTextDocumentSync: textDocumentSyncOptions, + }); + connection.onDiagnostics((params) => + this.handleDiagnostics(params) + ); + connection.onRequest( + vscode_languageserver_protocol_1.RegistrationRequest.type, + (params) => this.handleRegistrationRequest(params) + ); + connection.onRequest('client/registerFeature', (params) => + this.handleRegistrationRequest(params) + ); + connection.onRequest( + vscode_languageserver_protocol_1.UnregistrationRequest.type, + (params) => this.handleUnregistrationRequest(params) + ); + connection.onRequest('client/unregisterFeature', (params) => + this.handleUnregistrationRequest(params) + ); + connection.onRequest( + vscode_languageserver_protocol_1.ApplyWorkspaceEditRequest.type, + (params) => this.handleApplyWorkspaceEdit(params) + ); + return connection + .sendNotification( + vscode_languageserver_protocol_1.InitializedNotification.type, + {} + ) + .then(() => { + this.hookFileEvents(connection); + this.hookConfigurationChanged(connection); + this.initializeFeatures(connection); + this._onReadyCallbacks.resolve(); + return result; + }); + }) + .then(void 0, (error) => { + if (this._clientOptions.initializationFailedHandler) { + if (this._clientOptions.initializationFailedHandler(error)) { + void this.initialize(connection); + } else { + void this.stop(); + this._onReadyCallbacks.reject(error); + } + } else if ( + error instanceof vscode_languageserver_protocol_1.ResponseError && + error.data && + error.data.retry + ) { + void vscode_1.window + .showErrorMessage(error.message, { + title: 'Retry', + id: 'retry', + }) + .then((item) => { + if (item && item.id === 'retry') { + void this.initialize(connection); + } else { + void this.stop(); + this._onReadyCallbacks.reject(error); + } + }); + } else { + if (error && error.message) { + void vscode_1.window.showErrorMessage(error.message); + } + this.error('Server initialization failed.', error); + void this.stop(); + this._onReadyCallbacks.reject(error); + } + throw error; + }); + } + _clientGetRootPath() { + let folders = vscode_1.workspace.workspaceFolders; + if (!folders || folders.length === 0) { + return void 0; + } + let folder = folders[0]; + if (folder.uri.scheme === 'file') { + return folder.uri.fsPath; + } + return void 0; + } + async stop(timeout = 2e3) { + await this.onReady(); + this._initializeResult = void 0; + if (!this._connectionPromise) { + this.state = ClientState.Stopped; + return Promise.resolve(); + } + if (this.state === ClientState.Stopping && this._onStop) { + return this._onStop; + } + this.state = ClientState.Stopping; + this.cleanUp(false); + const tp = new Promise((c) => { + (0, vscode_languageserver_protocol_1.RAL)().timer.setTimeout( + c, + timeout + ); + }); + const shutdown = this.resolveConnection().then((connection) => { + return connection.shutdown().then(() => { + return connection.exit().then(() => { + return connection; + }); + }); + }); + return (this._onStop = Promise.race([tp, shutdown]) + .then( + (connection) => { + if (connection !== void 0) { + connection.end(); + connection.dispose(); + } else { + this.error(`Stopping server timed out`, void 0, false); + throw new Error(`Stopping the server timed out`); + } + }, + (error) => { + this.error(`Stopping server failed`, error, false); + throw error; + } + ) + .finally(() => { + this.state = ClientState.Stopped; + this.cleanUpChannel(); + this._onStop = void 0; + this._connectionPromise = void 0; + this._resolvedConnection = void 0; + })); + } + cleanUp(channel = true, diagnostics = true) { + if (this._listeners) { + this._listeners.forEach((listener) => listener.dispose()); + this._listeners = void 0; + } + if (this._providers) { + this._providers.forEach((provider) => provider.dispose()); + this._providers = void 0; + } + if (this._syncedDocuments) { + this._syncedDocuments.clear(); + } + for (const feature of this._features.values()) { + feature.dispose(); + } + if (channel) { + this.cleanUpChannel(); + } + if (diagnostics && this._diagnostics) { + this._diagnostics.dispose(); + this._diagnostics = void 0; + } + } + cleanUpChannel() { + if (this._outputChannel && this._disposeOutputChannel) { + this._outputChannel.dispose(); + this._outputChannel = void 0; + } + } + notifyFileEvent(event) { + const client = this; + async function didChangeWatchedFile(event2) { + client._fileEvents.push(event2); + return client._fileEventDelayer.trigger(async () => { + await client.onReady(); + const connection = await client.resolveConnection(); + let promise = Promise.resolve(); + if (client.isConnectionActive()) { + client.forceDocumentSync(); + promise = connection.didChangeWatchedFiles({ + changes: client._fileEvents, + }); + } + client._fileEvents = []; + return promise; + }); + } + const workSpaceMiddleware = this.clientOptions.middleware?.workspace; + (workSpaceMiddleware?.didChangeWatchedFile + ? workSpaceMiddleware.didChangeWatchedFile( + event, + didChangeWatchedFile + ) + : didChangeWatchedFile(event) + ).catch((error) => { + client.error(`Notify file events failed.`, error); + }); + } + forceDocumentSync() { + if (this._didChangeTextDocumentFeature === void 0) { + this._didChangeTextDocumentFeature = this._dynamicFeatures.get( + vscode_languageserver_protocol_1.DidChangeTextDocumentNotification + .type.method + ); + } + this._didChangeTextDocumentFeature.forceDelivery(); + } + handleDiagnostics(params) { + if (!this._diagnostics) { + return; + } + let uri = this._p2c.asUri(params.uri); + let diagnostics = this._p2c.asDiagnostics(params.diagnostics); + let middleware = this.clientOptions.middleware; + if (middleware.handleDiagnostics) { + middleware.handleDiagnostics(uri, diagnostics, (uri2, diagnostics2) => + this.setDiagnostics(uri2, diagnostics2) + ); + } else { + this.setDiagnostics(uri, diagnostics); + } + } + setDiagnostics(uri, diagnostics) { + if (!this._diagnostics) { + return; + } + this._diagnostics.set(uri, diagnostics); + } + createConnection() { + let errorHandler = (error, message, count) => { + this.handleConnectionError(error, message, count); + }; + let closeHandler = () => { + this.handleConnectionClosed(); + }; + return this.createMessageTransports( + this._clientOptions.stdioEncoding || 'utf8' + ).then((transports) => { + return createConnection( + transports.reader, + transports.writer, + errorHandler, + closeHandler, + this._clientOptions.connectionOptions + ); + }); + } + handleConnectionClosed() { + if (this.state === ClientState.Stopped) { + return; + } + try { + if (this._resolvedConnection) { + this._resolvedConnection.dispose(); + } + } catch (error) {} + let handlerResult = { action: CloseAction.DoNotRestart }; + if (this.state !== ClientState.Stopping) { + try { + handlerResult = this._clientOptions.errorHandler.closed(); + } catch (error) {} + } + this._connectionPromise = void 0; + this._resolvedConnection = void 0; + if (handlerResult.action === CloseAction.DoNotRestart) { + this.error( + handlerResult.message ?? + 'Connection to server got closed. Server will not be restarted.', + void 0, + 'force' + ); + if (this.state === ClientState.Starting) { + this._onReadyCallbacks.reject( + new Error( + `Connection to server got closed. Server will not be restarted.` + ) + ); + this.state = ClientState.StartFailed; + } else { + this.state = ClientState.Stopped; + } + this.cleanUp(false, true); + } else if (handlerResult.action === CloseAction.Restart) { + this.info( + handlerResult.message ?? + 'Connection to server got closed. Server will restart.' + ); + this.cleanUp(false, false); + this.state = ClientState.Initial; + this.start(); + } + } + handleConnectionError(error, message, count) { + const handlerResult = this._clientOptions.errorHandler.error( + error, + message, + count + ); + if (handlerResult.action === ErrorAction.Shutdown) { + this.error( + handlerResult.message ?? + `Client ${this._name}: connection to server is erroring. Shutting down server.`, + void 0, + 'force' + ); + this.stop().catch((error2) => { + this.error(`Stopping server failed`, error2, false); + }); + } + } + hookConfigurationChanged(connection) { + vscode_1.workspace.onDidChangeConfiguration(() => { + this.refreshTrace(connection, true); + }); + } + refreshTrace(connection, sendNotification = false) { + const config = vscode_1.workspace.getConfiguration(this._id); + let trace = vscode_languageserver_protocol_1.Trace.Off; + let traceFormat = vscode_languageserver_protocol_1.TraceFormat.Text; + if (config) { + const traceConfig = config.get('trace.server', 'off'); + if (typeof traceConfig === 'string') { + trace = vscode_languageserver_protocol_1.Trace.fromString( + traceConfig + ); + } else { + trace = vscode_languageserver_protocol_1.Trace.fromString( + config.get('trace.server.verbosity', 'off') + ); + traceFormat = vscode_languageserver_protocol_1.TraceFormat.fromString( + config.get('trace.server.format', 'text') + ); + } + } + this._trace = trace; + this._traceFormat = traceFormat; + connection.trace(this._trace, this._tracer, { + sendNotification, + traceFormat: this._traceFormat, + }); + } + hookFileEvents(_connection) { + let fileEvents = this._clientOptions.synchronize.fileEvents; + if (!fileEvents) { + return; + } + let watchers; + if (Is2.array(fileEvents)) { + watchers = fileEvents; + } else { + watchers = [fileEvents]; + } + if (!watchers) { + return; + } + this._dynamicFeatures + .get( + vscode_languageserver_protocol_1.DidChangeWatchedFilesNotification + .type.method + ) + .registerRaw(UUID.generateUuid(), watchers); + } + registerFeatures(features) { + for (let feature of features) { + this.registerFeature(feature); + } + } + registerFeature(feature) { + this._features.push(feature); + if (DynamicFeature.is(feature)) { + const registrationType = feature.registrationType; + this._dynamicFeatures.set(registrationType.method, feature); + } + } + getFeature(request) { + return this._dynamicFeatures.get(request); + } + registerBuiltinFeatures() { + this.registerFeature(new ConfigurationFeature(this)); + this.registerFeature( + new DidOpenTextDocumentFeature(this, this._syncedDocuments) + ); + this.registerFeature(new DidChangeTextDocumentFeature(this)); + this.registerFeature(new WillSaveFeature(this)); + this.registerFeature(new WillSaveWaitUntilFeature(this)); + this.registerFeature(new DidSaveTextDocumentFeature(this)); + this.registerFeature( + new DidCloseTextDocumentFeature(this, this._syncedDocuments) + ); + this.registerFeature( + new FileSystemWatcherFeature(this, (event) => + this.notifyFileEvent(event) + ) + ); + this.registerFeature(new CompletionItemFeature(this)); + this.registerFeature(new HoverFeature(this)); + this.registerFeature(new SignatureHelpFeature(this)); + this.registerFeature(new DefinitionFeature(this)); + this.registerFeature(new ReferencesFeature(this)); + this.registerFeature(new DocumentHighlightFeature(this)); + this.registerFeature(new DocumentSymbolFeature(this)); + this.registerFeature(new WorkspaceSymbolFeature(this)); + this.registerFeature(new CodeActionFeature(this)); + this.registerFeature(new CodeLensFeature(this)); + this.registerFeature(new DocumentFormattingFeature(this)); + this.registerFeature(new DocumentRangeFormattingFeature(this)); + this.registerFeature(new DocumentOnTypeFormattingFeature(this)); + this.registerFeature(new RenameFeature(this)); + this.registerFeature(new DocumentLinkFeature(this)); + this.registerFeature(new ExecuteCommandFeature(this)); + } + fillInitializeParams(params) { + for (let feature of this._features) { + if (Is2.func(feature.fillInitializeParams)) { + feature.fillInitializeParams(params); + } + } + } + computeClientCapabilities() { + const result = {}; + ensure(result, 'workspace').applyEdit = true; + const workspaceEdit = ensure( + ensure(result, 'workspace'), + 'workspaceEdit' + ); + workspaceEdit.documentChanges = true; + workspaceEdit.resourceOperations = [ + vscode_languageserver_protocol_1.ResourceOperationKind.Create, + vscode_languageserver_protocol_1.ResourceOperationKind.Rename, + vscode_languageserver_protocol_1.ResourceOperationKind.Delete, + ]; + workspaceEdit.failureHandling = + vscode_languageserver_protocol_1.FailureHandlingKind.TextOnlyTransactional; + workspaceEdit.normalizesLineEndings = true; + workspaceEdit.changeAnnotationSupport = { + groupsOnLabel: true, + }; + const diagnostics = ensure( + ensure(result, 'textDocument'), + 'publishDiagnostics' + ); + diagnostics.relatedInformation = true; + diagnostics.versionSupport = false; + diagnostics.tagSupport = { + valueSet: [ + vscode_languageserver_protocol_1.DiagnosticTag.Unnecessary, + vscode_languageserver_protocol_1.DiagnosticTag.Deprecated, + ], + }; + diagnostics.codeDescriptionSupport = true; + diagnostics.dataSupport = true; + const windowCapabilities = ensure(result, 'window'); + const showMessage = ensure(windowCapabilities, 'showMessage'); + showMessage.messageActionItem = { additionalPropertiesSupport: true }; + const showDocument = ensure(windowCapabilities, 'showDocument'); + showDocument.support = true; + const generalCapabilities = ensure(result, 'general'); + generalCapabilities.staleRequestSupport = { + cancel: true, + retryOnContentModified: Array.from( + BaseLanguageClient.RequestsToCancelOnContentModified + ), + }; + generalCapabilities.regularExpressions = { + engine: 'ECMAScript', + version: 'ES2020', + }; + generalCapabilities.markdown = { + parser: 'marked', + version: '1.1.0', + }; + if (this._clientOptions.markdown.supportHtml) { + generalCapabilities.markdown.allowedTags = [ + 'ul', + 'li', + 'p', + 'code', + 'blockquote', + 'ol', + 'h1', + 'h2', + 'h3', + 'h4', + 'h5', + 'h6', + 'hr', + 'em', + 'pre', + 'table', + 'thead', + 'tbody', + 'tr', + 'th', + 'td', + 'div', + 'del', + 'a', + 'strong', + 'br', + 'img', + 'span', + ]; + } + for (let feature of this._features) { + feature.fillClientCapabilities(result); + } + return result; + } + initializeFeatures(_connection) { + let documentSelector = this._clientOptions.documentSelector; + for (let feature of this._features) { + feature.initialize(this._capabilities, documentSelector); + } + } + handleRegistrationRequest(params) { + return new Promise((resolve, reject) => { + for (const registration of params.registrations) { + const feature = this._dynamicFeatures.get(registration.method); + if (feature === void 0) { + reject( + new Error( + `No feature implementation for ${registration.method} found. Registration failed.` + ) + ); + return; + } + const options = registration.registerOptions ?? {}; + options.documentSelector = + options.documentSelector ?? this._clientOptions.documentSelector; + const data = { + id: registration.id, + registerOptions: options, + }; + try { + feature.register(data); + } catch (err) { + reject(err); + return; + } + } + resolve(); + }); + } + handleUnregistrationRequest(params) { + return new Promise((resolve, reject) => { + for (let unregistration of params.unregisterations) { + const feature = this._dynamicFeatures.get(unregistration.method); + if (!feature) { + reject( + new Error( + `No feature implementation for ${unregistration.method} found. Unregistration failed.` + ) + ); + return; + } + feature.unregister(unregistration.id); + } + resolve(); + }); + } + handleApplyWorkspaceEdit(params) { + let workspaceEdit = params.edit; + let openTextDocuments = new Map(); + vscode_1.workspace.textDocuments.forEach((document2) => + openTextDocuments.set(document2.uri.toString(), document2) + ); + let versionMismatch = false; + if (workspaceEdit.documentChanges) { + for (const change of workspaceEdit.documentChanges) { + if ( + vscode_languageserver_protocol_1.TextDocumentEdit.is(change) && + change.textDocument.version && + change.textDocument.version >= 0 + ) { + let textDocument = openTextDocuments.get(change.textDocument.uri); + if ( + textDocument && + textDocument.version !== change.textDocument.version + ) { + versionMismatch = true; + break; + } + } + } + } + if (versionMismatch) { + return Promise.resolve({ applied: false }); + } + return Is2.asPromise( + vscode_1.workspace + .applyEdit(this._p2c.asWorkspaceEdit(params.edit)) + .then((value) => { + return { applied: value }; + }) + ); + } + handleFailedRequest( + type, + token, + error, + defaultValue, + showNotification = true + ) { + if (error instanceof vscode_languageserver_protocol_1.ResponseError) { + if ( + error.code === + vscode_languageserver_protocol_1.LSPErrorCodes.RequestCancelled || + error.code === + vscode_languageserver_protocol_1.LSPErrorCodes.ServerCancelled + ) { + if (token !== void 0 && token.isCancellationRequested) { + return defaultValue; + } else { + if (error.data !== void 0) { + throw new LSPCancellationError(error.data); + } else { + throw new vscode_1.CancellationError(); + } + } + } else if ( + error.code === + vscode_languageserver_protocol_1.LSPErrorCodes.ContentModified + ) { + if ( + BaseLanguageClient.RequestsToCancelOnContentModified.has( + type.method + ) + ) { + throw new vscode_1.CancellationError(); + } else { + return defaultValue; + } + } + } + this.error(`Request ${type.method} failed.`, error, showNotification); + throw error; + } + }; + exports.BaseLanguageClient = BaseLanguageClient; + BaseLanguageClient.RequestsToCancelOnContentModified = new Set([ + vscode_languageserver_protocol_1.SemanticTokensRequest.method, + vscode_languageserver_protocol_1.SemanticTokensRangeRequest.method, + vscode_languageserver_protocol_1.SemanticTokensDeltaRequest.method, + ]); + }, +}); + +// client/node_modules/vscode-languageclient/lib/common/colorProvider.js +let require_colorProvider = __commonJS({ + 'client/node_modules/vscode-languageclient/lib/common/colorProvider.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.ColorProviderFeature = void 0; + let vscode_1 = require('vscode'); + let vscode_languageserver_protocol_1 = require_main3(); + let client_1 = require_client(); + function ensure(target, key) { + if (target[key] === void 0) { + target[key] = {}; + } + return target[key]; + } + let ColorProviderFeature = class extends client_1.TextDocumentFeature { + constructor(client) { + super( + client, + vscode_languageserver_protocol_1.DocumentColorRequest.type + ); + } + fillClientCapabilities(capabilities) { + ensure( + ensure(capabilities, 'textDocument'), + 'colorProvider' + ).dynamicRegistration = true; + } + initialize(capabilities, documentSelector) { + let [id, options] = this.getRegistration( + documentSelector, + capabilities.colorProvider + ); + if (!id || !options) { + return; + } + this.register({ id, registerOptions: options }); + } + registerLanguageProvider(options) { + const provider = { + provideColorPresentations: (color, context, token) => { + const client = this._client; + const provideColorPresentations = (color2, context2, token2) => { + const requestParams = { + color: color2, + textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier( + context2.document + ), + range: client.code2ProtocolConverter.asRange(context2.range), + }; + return client + .sendRequest( + vscode_languageserver_protocol_1.ColorPresentationRequest + .type, + requestParams, + token2 + ) + .then(this.asColorPresentations.bind(this), (error) => { + return client.handleFailedRequest( + vscode_languageserver_protocol_1.ColorPresentationRequest + .type, + token2, + error, + null + ); + }); + }; + const middleware = client.clientOptions.middleware; + return middleware.provideColorPresentations + ? middleware.provideColorPresentations( + color, + context, + token, + provideColorPresentations + ) + : provideColorPresentations(color, context, token); + }, + provideDocumentColors: (document2, token) => { + const client = this._client; + const provideDocumentColors = (document3, token2) => { + const requestParams = { + textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier( + document3 + ), + }; + return client + .sendRequest( + vscode_languageserver_protocol_1.DocumentColorRequest.type, + requestParams, + token2 + ) + .then(this.asColorInformations.bind(this), (error) => { + return client.handleFailedRequest( + vscode_languageserver_protocol_1.ColorPresentationRequest + .type, + token2, + error, + null + ); + }); + }; + const middleware = client.clientOptions.middleware; + return middleware.provideDocumentColors + ? middleware.provideDocumentColors( + document2, + token, + provideDocumentColors + ) + : provideDocumentColors(document2, token); + }, + }; + return [ + vscode_1.languages.registerColorProvider( + options.documentSelector, + provider + ), + provider, + ]; + } + asColor(color) { + return new vscode_1.Color( + color.red, + color.green, + color.blue, + color.alpha + ); + } + asColorInformations(colorInformation) { + if (Array.isArray(colorInformation)) { + return colorInformation.map((ci2) => { + return new vscode_1.ColorInformation( + this._client.protocol2CodeConverter.asRange(ci2.range), + this.asColor(ci2.color) + ); + }); + } + return []; + } + asColorPresentations(colorPresentations) { + if (Array.isArray(colorPresentations)) { + return colorPresentations.map((cp) => { + let presentation = new vscode_1.ColorPresentation(cp.label); + presentation.additionalTextEdits = this._client.protocol2CodeConverter.asTextEdits( + cp.additionalTextEdits + ); + presentation.textEdit = this._client.protocol2CodeConverter.asTextEdit( + cp.textEdit + ); + return presentation; + }); + } + return []; + } + }; + exports.ColorProviderFeature = ColorProviderFeature; + }, +}); + +// client/node_modules/vscode-languageclient/lib/common/implementation.js +let require_implementation = __commonJS({ + 'client/node_modules/vscode-languageclient/lib/common/implementation.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.ImplementationFeature = void 0; + let vscode_1 = require('vscode'); + let vscode_languageserver_protocol_1 = require_main3(); + let client_1 = require_client(); + function ensure(target, key) { + if (target[key] === void 0) { + target[key] = {}; + } + return target[key]; + } + let ImplementationFeature = class extends client_1.TextDocumentFeature { + constructor(client) { + super( + client, + vscode_languageserver_protocol_1.ImplementationRequest.type + ); + } + fillClientCapabilities(capabilities) { + let implementationSupport = ensure( + ensure(capabilities, 'textDocument'), + 'implementation' + ); + implementationSupport.dynamicRegistration = true; + implementationSupport.linkSupport = true; + } + initialize(capabilities, documentSelector) { + let [id, options] = this.getRegistration( + documentSelector, + capabilities.implementationProvider + ); + if (!id || !options) { + return; + } + this.register({ id, registerOptions: options }); + } + registerLanguageProvider(options) { + const provider = { + provideImplementation: (document2, position, token) => { + const client = this._client; + const provideImplementation = (document3, position2, token2) => { + return client + .sendRequest( + vscode_languageserver_protocol_1.ImplementationRequest.type, + client.code2ProtocolConverter.asTextDocumentPositionParams( + document3, + position2 + ), + token2 + ) + .then( + client.protocol2CodeConverter.asDefinitionResult, + (error) => { + return client.handleFailedRequest( + vscode_languageserver_protocol_1.ImplementationRequest + .type, + token2, + error, + null + ); + } + ); + }; + const middleware = client.clientOptions.middleware; + return middleware.provideImplementation + ? middleware.provideImplementation( + document2, + position, + token, + provideImplementation + ) + : provideImplementation(document2, position, token); + }, + }; + return [ + vscode_1.languages.registerImplementationProvider( + options.documentSelector, + provider + ), + provider, + ]; + } + }; + exports.ImplementationFeature = ImplementationFeature; + }, +}); + +// client/node_modules/vscode-languageclient/lib/common/typeDefinition.js +let require_typeDefinition = __commonJS({ + 'client/node_modules/vscode-languageclient/lib/common/typeDefinition.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.TypeDefinitionFeature = void 0; + let vscode_1 = require('vscode'); + let vscode_languageserver_protocol_1 = require_main3(); + let client_1 = require_client(); + function ensure(target, key) { + if (target[key] === void 0) { + target[key] = {}; + } + return target[key]; + } + let TypeDefinitionFeature = class extends client_1.TextDocumentFeature { + constructor(client) { + super( + client, + vscode_languageserver_protocol_1.TypeDefinitionRequest.type + ); + } + fillClientCapabilities(capabilities) { + ensure( + ensure(capabilities, 'textDocument'), + 'typeDefinition' + ).dynamicRegistration = true; + let typeDefinitionSupport = ensure( + ensure(capabilities, 'textDocument'), + 'typeDefinition' + ); + typeDefinitionSupport.dynamicRegistration = true; + typeDefinitionSupport.linkSupport = true; + } + initialize(capabilities, documentSelector) { + let [id, options] = this.getRegistration( + documentSelector, + capabilities.typeDefinitionProvider + ); + if (!id || !options) { + return; + } + this.register({ id, registerOptions: options }); + } + registerLanguageProvider(options) { + const provider = { + provideTypeDefinition: (document2, position, token) => { + const client = this._client; + const provideTypeDefinition = (document3, position2, token2) => { + return client + .sendRequest( + vscode_languageserver_protocol_1.TypeDefinitionRequest.type, + client.code2ProtocolConverter.asTextDocumentPositionParams( + document3, + position2 + ), + token2 + ) + .then( + client.protocol2CodeConverter.asDefinitionResult, + (error) => { + return client.handleFailedRequest( + vscode_languageserver_protocol_1.TypeDefinitionRequest + .type, + token2, + error, + null + ); + } + ); + }; + const middleware = client.clientOptions.middleware; + return middleware.provideTypeDefinition + ? middleware.provideTypeDefinition( + document2, + position, + token, + provideTypeDefinition + ) + : provideTypeDefinition(document2, position, token); + }, + }; + return [ + vscode_1.languages.registerTypeDefinitionProvider( + options.documentSelector, + provider + ), + provider, + ]; + } + }; + exports.TypeDefinitionFeature = TypeDefinitionFeature; + }, +}); + +// client/node_modules/vscode-languageclient/lib/common/workspaceFolders.js +let require_workspaceFolders = __commonJS({ + 'client/node_modules/vscode-languageclient/lib/common/workspaceFolders.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.WorkspaceFoldersFeature = exports.arrayDiff = void 0; + let UUID = require_uuid(); + let vscode_1 = require('vscode'); + let vscode_languageserver_protocol_1 = require_main3(); + function access(target, key) { + if (target === void 0) { + return void 0; + } + return target[key]; + } + function arrayDiff(left, right) { + return left.filter((element) => right.indexOf(element) < 0); + } + exports.arrayDiff = arrayDiff; + let WorkspaceFoldersFeature = class { + constructor(_client) { + this._client = _client; + this._listeners = new Map(); + } + get registrationType() { + return vscode_languageserver_protocol_1 + .DidChangeWorkspaceFoldersNotification.type; + } + fillInitializeParams(params) { + const folders = vscode_1.workspace.workspaceFolders; + this.initializeWithFolders(folders); + if (folders === void 0) { + params.workspaceFolders = null; + } else { + params.workspaceFolders = folders.map((folder) => + this.asProtocol(folder) + ); + } + } + initializeWithFolders(currentWorkspaceFolders) { + this._initialFolders = currentWorkspaceFolders; + } + fillClientCapabilities(capabilities) { + capabilities.workspace = capabilities.workspace || {}; + capabilities.workspace.workspaceFolders = true; + } + initialize(capabilities) { + const client = this._client; + client.onRequest( + vscode_languageserver_protocol_1.WorkspaceFoldersRequest.type, + (token) => { + const workspaceFolders = () => { + const folders = vscode_1.workspace.workspaceFolders; + if (folders === void 0) { + return null; + } + const result = folders.map((folder) => { + return this.asProtocol(folder); + }); + return result; + }; + const middleware = client.clientOptions.middleware.workspace; + return middleware && middleware.workspaceFolders + ? middleware.workspaceFolders(token, workspaceFolders) + : workspaceFolders(token); + } + ); + const value = access( + access(access(capabilities, 'workspace'), 'workspaceFolders'), + 'changeNotifications' + ); + let id; + if (typeof value === 'string') { + id = value; + } else if (value === true) { + id = UUID.generateUuid(); + } + if (id) { + this.register({ id, registerOptions: void 0 }); + } + } + sendInitialEvent(currentWorkspaceFolders) { + let promise; + if (this._initialFolders && currentWorkspaceFolders) { + const removed = arrayDiff( + this._initialFolders, + currentWorkspaceFolders + ); + const added = arrayDiff( + currentWorkspaceFolders, + this._initialFolders + ); + if (added.length > 0 || removed.length > 0) { + promise = this.doSendEvent(added, removed); + } + } else if (this._initialFolders) { + promise = this.doSendEvent([], this._initialFolders); + } else if (currentWorkspaceFolders) { + promise = this.doSendEvent(currentWorkspaceFolders, []); + } + if (promise !== void 0) { + promise.catch((error) => { + this._client.error( + `Sending notification ${vscode_languageserver_protocol_1.DidChangeWorkspaceFoldersNotification.type.method} failed`, + error + ); + }); + } + } + doSendEvent(addedFolders, removedFolders) { + let params = { + event: { + added: addedFolders.map((folder) => this.asProtocol(folder)), + removed: removedFolders.map((folder) => this.asProtocol(folder)), + }, + }; + return this._client.sendNotification( + vscode_languageserver_protocol_1.DidChangeWorkspaceFoldersNotification + .type, + params + ); + } + register(data) { + let id = data.id; + let client = this._client; + let disposable = vscode_1.workspace.onDidChangeWorkspaceFolders( + (event) => { + let didChangeWorkspaceFolders = (event2) => { + return this.doSendEvent(event2.added, event2.removed); + }; + let middleware = client.clientOptions.middleware.workspace; + const promise = + middleware && middleware.didChangeWorkspaceFolders + ? middleware.didChangeWorkspaceFolders( + event, + didChangeWorkspaceFolders + ) + : didChangeWorkspaceFolders(event); + promise.catch((error) => { + this._client.error( + `Sending notification ${vscode_languageserver_protocol_1.DidChangeWorkspaceFoldersNotification.type.method} failed`, + error + ); + }); + } + ); + this._listeners.set(id, disposable); + this.sendInitialEvent(vscode_1.workspace.workspaceFolders); + } + unregister(id) { + let disposable = this._listeners.get(id); + if (disposable === void 0) { + return; + } + this._listeners.delete(id); + disposable.dispose(); + } + dispose() { + for (let disposable of this._listeners.values()) { + disposable.dispose(); + } + this._listeners.clear(); + } + asProtocol(workspaceFolder) { + if (workspaceFolder === void 0) { + return null; + } + return { + uri: this._client.code2ProtocolConverter.asUri(workspaceFolder.uri), + name: workspaceFolder.name, + }; + } + }; + exports.WorkspaceFoldersFeature = WorkspaceFoldersFeature; + }, +}); + +// client/node_modules/vscode-languageclient/lib/common/foldingRange.js +let require_foldingRange = __commonJS({ + 'client/node_modules/vscode-languageclient/lib/common/foldingRange.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.FoldingRangeFeature = void 0; + let vscode_1 = require('vscode'); + let vscode_languageserver_protocol_1 = require_main3(); + let client_1 = require_client(); + function ensure(target, key) { + if (target[key] === void 0) { + target[key] = {}; + } + return target[key]; + } + var FoldingRangeFeature = class extends client_1.TextDocumentFeature { + constructor(client) { + super( + client, + vscode_languageserver_protocol_1.FoldingRangeRequest.type + ); + } + fillClientCapabilities(capabilities) { + let capability = ensure( + ensure(capabilities, 'textDocument'), + 'foldingRange' + ); + capability.dynamicRegistration = true; + capability.rangeLimit = 5e3; + capability.lineFoldingOnly = true; + } + initialize(capabilities, documentSelector) { + let [id, options] = this.getRegistration( + documentSelector, + capabilities.foldingRangeProvider + ); + if (!id || !options) { + return; + } + this.register({ id, registerOptions: options }); + } + registerLanguageProvider(options) { + const provider = { + provideFoldingRanges: (document2, context, token) => { + const client = this._client; + const provideFoldingRanges = (document3, _2, token2) => { + const requestParams = { + textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier( + document3 + ), + }; + return client + .sendRequest( + vscode_languageserver_protocol_1.FoldingRangeRequest.type, + requestParams, + token2 + ) + .then(FoldingRangeFeature.asFoldingRanges, (error) => { + return client.handleFailedRequest( + vscode_languageserver_protocol_1.FoldingRangeRequest.type, + token2, + error, + null + ); + }); + }; + const middleware = client.clientOptions.middleware; + return middleware.provideFoldingRanges + ? middleware.provideFoldingRanges( + document2, + context, + token, + provideFoldingRanges + ) + : provideFoldingRanges(document2, context, token); + }, + }; + return [ + vscode_1.languages.registerFoldingRangeProvider( + options.documentSelector, + provider + ), + provider, + ]; + } + static asFoldingRangeKind(kind) { + if (kind) { + switch (kind) { + case vscode_languageserver_protocol_1.FoldingRangeKind.Comment: + return vscode_1.FoldingRangeKind.Comment; + case vscode_languageserver_protocol_1.FoldingRangeKind.Imports: + return vscode_1.FoldingRangeKind.Imports; + case vscode_languageserver_protocol_1.FoldingRangeKind.Region: + return vscode_1.FoldingRangeKind.Region; + } + } + return void 0; + } + static asFoldingRanges(foldingRanges) { + if (Array.isArray(foldingRanges)) { + return foldingRanges.map((r) => { + return new vscode_1.FoldingRange( + r.startLine, + r.endLine, + FoldingRangeFeature.asFoldingRangeKind(r.kind) + ); + }); + } + return []; + } + }; + exports.FoldingRangeFeature = FoldingRangeFeature; + }, +}); + +// client/node_modules/vscode-languageclient/lib/common/declaration.js +let require_declaration = __commonJS({ + 'client/node_modules/vscode-languageclient/lib/common/declaration.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.DeclarationFeature = void 0; + let vscode_1 = require('vscode'); + let vscode_languageserver_protocol_1 = require_main3(); + let client_1 = require_client(); + function ensure(target, key) { + if (target[key] === void 0) { + target[key] = {}; + } + return target[key]; + } + let DeclarationFeature = class extends client_1.TextDocumentFeature { + constructor(client) { + super(client, vscode_languageserver_protocol_1.DeclarationRequest.type); + } + fillClientCapabilities(capabilities) { + const declarationSupport = ensure( + ensure(capabilities, 'textDocument'), + 'declaration' + ); + declarationSupport.dynamicRegistration = true; + declarationSupport.linkSupport = true; + } + initialize(capabilities, documentSelector) { + const [id, options] = this.getRegistration( + documentSelector, + capabilities.declarationProvider + ); + if (!id || !options) { + return; + } + this.register({ id, registerOptions: options }); + } + registerLanguageProvider(options) { + const provider = { + provideDeclaration: (document2, position, token) => { + const client = this._client; + const provideDeclaration = (document3, position2, token2) => { + return client + .sendRequest( + vscode_languageserver_protocol_1.DeclarationRequest.type, + client.code2ProtocolConverter.asTextDocumentPositionParams( + document3, + position2 + ), + token2 + ) + .then( + client.protocol2CodeConverter.asDeclarationResult, + (error) => { + return client.handleFailedRequest( + vscode_languageserver_protocol_1.DeclarationRequest.type, + token2, + error, + null + ); + } + ); + }; + const middleware = client.clientOptions.middleware; + return middleware.provideDeclaration + ? middleware.provideDeclaration( + document2, + position, + token, + provideDeclaration + ) + : provideDeclaration(document2, position, token); + }, + }; + return [ + vscode_1.languages.registerDeclarationProvider( + options.documentSelector, + provider + ), + provider, + ]; + } + }; + exports.DeclarationFeature = DeclarationFeature; + }, +}); + +// client/node_modules/vscode-languageclient/lib/common/selectionRange.js +let require_selectionRange = __commonJS({ + 'client/node_modules/vscode-languageclient/lib/common/selectionRange.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.SelectionRangeFeature = void 0; + let vscode_1 = require('vscode'); + let vscode_languageserver_protocol_1 = require_main3(); + let client_1 = require_client(); + function ensure(target, key) { + if (target[key] === void 0) { + target[key] = Object.create(null); + } + return target[key]; + } + let SelectionRangeFeature = class extends client_1.TextDocumentFeature { + constructor(client) { + super( + client, + vscode_languageserver_protocol_1.SelectionRangeRequest.type + ); + } + fillClientCapabilities(capabilities) { + const capability = ensure( + ensure(capabilities, 'textDocument'), + 'selectionRange' + ); + capability.dynamicRegistration = true; + } + initialize(capabilities, documentSelector) { + const [id, options] = this.getRegistration( + documentSelector, + capabilities.selectionRangeProvider + ); + if (!id || !options) { + return; + } + this.register({ id, registerOptions: options }); + } + registerLanguageProvider(options) { + const provider = { + provideSelectionRanges: (document2, positions, token) => { + const client = this._client; + const provideSelectionRanges = (document3, positions2, token2) => { + const requestParams = { + textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier( + document3 + ), + positions: client.code2ProtocolConverter.asPositions( + positions2 + ), + }; + return client + .sendRequest( + vscode_languageserver_protocol_1.SelectionRangeRequest.type, + requestParams, + token2 + ) + .then( + (ranges) => + client.protocol2CodeConverter.asSelectionRanges(ranges), + (error) => { + return client.handleFailedRequest( + vscode_languageserver_protocol_1.SelectionRangeRequest + .type, + token2, + error, + null + ); + } + ); + }; + const middleware = client.clientOptions.middleware; + return middleware.provideSelectionRanges + ? middleware.provideSelectionRanges( + document2, + positions, + token, + provideSelectionRanges + ) + : provideSelectionRanges(document2, positions, token); + }, + }; + return [ + vscode_1.languages.registerSelectionRangeProvider( + options.documentSelector, + provider + ), + provider, + ]; + } + }; + exports.SelectionRangeFeature = SelectionRangeFeature; + }, +}); + +// client/node_modules/vscode-languageclient/lib/common/progress.js +let require_progress = __commonJS({ + 'client/node_modules/vscode-languageclient/lib/common/progress.js'(exports) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.ProgressFeature = void 0; + let vscode_languageserver_protocol_1 = require_main3(); + let progressPart_1 = require_progressPart(); + function ensure(target, key) { + if (target[key] === void 0) { + target[key] = Object.create(null); + } + return target[key]; + } + let ProgressFeature = class { + constructor(_client) { + this._client = _client; + this.activeParts = new Set(); + } + fillClientCapabilities(capabilities) { + ensure(capabilities, 'window').workDoneProgress = true; + } + initialize() { + const client = this._client; + const deleteHandler = (part) => { + this.activeParts.delete(part); + }; + const createHandler = (params) => { + this.activeParts.add( + new progressPart_1.ProgressPart( + this._client, + params.token, + deleteHandler + ) + ); + }; + client.onRequest( + vscode_languageserver_protocol_1.WorkDoneProgressCreateRequest.type, + createHandler + ); + } + dispose() { + for (const part of this.activeParts) { + part.done(); + } + this.activeParts.clear(); + } + }; + exports.ProgressFeature = ProgressFeature; + }, +}); + +// client/node_modules/vscode-languageclient/lib/common/callHierarchy.js +let require_callHierarchy = __commonJS({ + 'client/node_modules/vscode-languageclient/lib/common/callHierarchy.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.CallHierarchyFeature = void 0; + let vscode_1 = require('vscode'); + let vscode_languageserver_protocol_1 = require_main3(); + let client_1 = require_client(); + function ensure(target, key) { + if (target[key] === void 0) { + target[key] = {}; + } + return target[key]; + } + let CallHierarchyProvider = class { + constructor(client) { + this.client = client; + this.middleware = client.clientOptions.middleware; + } + prepareCallHierarchy(document2, position, token) { + const client = this.client; + const middleware = this.middleware; + const prepareCallHierarchy = (document3, position2, token2) => { + const params = client.code2ProtocolConverter.asTextDocumentPositionParams( + document3, + position2 + ); + return client + .sendRequest( + vscode_languageserver_protocol_1.CallHierarchyPrepareRequest.type, + params, + token2 + ) + .then( + (result) => { + return client.protocol2CodeConverter.asCallHierarchyItems( + result + ); + }, + (error) => { + return client.handleFailedRequest( + vscode_languageserver_protocol_1.CallHierarchyPrepareRequest + .type, + token2, + error, + null + ); + } + ); + }; + return middleware.prepareCallHierarchy + ? middleware.prepareCallHierarchy( + document2, + position, + token, + prepareCallHierarchy + ) + : prepareCallHierarchy(document2, position, token); + } + provideCallHierarchyIncomingCalls(item, token) { + const client = this.client; + const middleware = this.middleware; + const provideCallHierarchyIncomingCalls = (item2, token2) => { + const params = { + item: client.code2ProtocolConverter.asCallHierarchyItem(item2), + }; + return client + .sendRequest( + vscode_languageserver_protocol_1.CallHierarchyIncomingCallsRequest + .type, + params, + token2 + ) + .then( + (result) => { + return client.protocol2CodeConverter.asCallHierarchyIncomingCalls( + result + ); + }, + (error) => { + return client.handleFailedRequest( + vscode_languageserver_protocol_1 + .CallHierarchyIncomingCallsRequest.type, + token2, + error, + null + ); + } + ); + }; + return middleware.provideCallHierarchyIncomingCalls + ? middleware.provideCallHierarchyIncomingCalls( + item, + token, + provideCallHierarchyIncomingCalls + ) + : provideCallHierarchyIncomingCalls(item, token); + } + provideCallHierarchyOutgoingCalls(item, token) { + const client = this.client; + const middleware = this.middleware; + const provideCallHierarchyOutgoingCalls = (item2, token2) => { + const params = { + item: client.code2ProtocolConverter.asCallHierarchyItem(item2), + }; + return client + .sendRequest( + vscode_languageserver_protocol_1.CallHierarchyOutgoingCallsRequest + .type, + params, + token2 + ) + .then( + (result) => { + return client.protocol2CodeConverter.asCallHierarchyOutgoingCalls( + result + ); + }, + (error) => { + return client.handleFailedRequest( + vscode_languageserver_protocol_1 + .CallHierarchyOutgoingCallsRequest.type, + token2, + error, + null + ); + } + ); + }; + return middleware.provideCallHierarchyOutgoingCalls + ? middleware.provideCallHierarchyOutgoingCalls( + item, + token, + provideCallHierarchyOutgoingCalls + ) + : provideCallHierarchyOutgoingCalls(item, token); + } + }; + let CallHierarchyFeature = class extends client_1.TextDocumentFeature { + constructor(client) { + super( + client, + vscode_languageserver_protocol_1.CallHierarchyPrepareRequest.type + ); + } + fillClientCapabilities(cap) { + const capabilities = cap; + const capability = ensure( + ensure(capabilities, 'textDocument'), + 'callHierarchy' + ); + capability.dynamicRegistration = true; + } + initialize(capabilities, documentSelector) { + const [id, options] = this.getRegistration( + documentSelector, + capabilities.callHierarchyProvider + ); + if (!id || !options) { + return; + } + this.register({ id, registerOptions: options }); + } + registerLanguageProvider(options) { + const client = this._client; + const provider = new CallHierarchyProvider(client); + return [ + vscode_1.languages.registerCallHierarchyProvider( + options.documentSelector, + provider + ), + provider, + ]; + } + }; + exports.CallHierarchyFeature = CallHierarchyFeature; + }, +}); + +// client/node_modules/vscode-languageclient/lib/common/semanticTokens.js +let require_semanticTokens = __commonJS({ + 'client/node_modules/vscode-languageclient/lib/common/semanticTokens.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.SemanticTokensFeature = void 0; + let vscode3 = require('vscode'); + let client_1 = require_client(); + let vscode_languageserver_protocol_1 = require_main3(); + let Is2 = require_is3(); + function ensure(target, key) { + if (target[key] === void 0) { + target[key] = {}; + } + return target[key]; + } + let SemanticTokensFeature = class extends client_1.TextDocumentFeature { + constructor(client) { + super( + client, + vscode_languageserver_protocol_1.SemanticTokensRegistrationType.type + ); + } + fillClientCapabilities(capabilities) { + const capability = ensure( + ensure(capabilities, 'textDocument'), + 'semanticTokens' + ); + capability.dynamicRegistration = true; + capability.tokenTypes = [ + vscode_languageserver_protocol_1.SemanticTokenTypes.namespace, + vscode_languageserver_protocol_1.SemanticTokenTypes.type, + vscode_languageserver_protocol_1.SemanticTokenTypes.class, + vscode_languageserver_protocol_1.SemanticTokenTypes.enum, + vscode_languageserver_protocol_1.SemanticTokenTypes.interface, + vscode_languageserver_protocol_1.SemanticTokenTypes.struct, + vscode_languageserver_protocol_1.SemanticTokenTypes.typeParameter, + vscode_languageserver_protocol_1.SemanticTokenTypes.parameter, + vscode_languageserver_protocol_1.SemanticTokenTypes.variable, + vscode_languageserver_protocol_1.SemanticTokenTypes.property, + vscode_languageserver_protocol_1.SemanticTokenTypes.enumMember, + vscode_languageserver_protocol_1.SemanticTokenTypes.event, + vscode_languageserver_protocol_1.SemanticTokenTypes.function, + vscode_languageserver_protocol_1.SemanticTokenTypes.method, + vscode_languageserver_protocol_1.SemanticTokenTypes.macro, + vscode_languageserver_protocol_1.SemanticTokenTypes.keyword, + vscode_languageserver_protocol_1.SemanticTokenTypes.modifier, + vscode_languageserver_protocol_1.SemanticTokenTypes.comment, + vscode_languageserver_protocol_1.SemanticTokenTypes.string, + vscode_languageserver_protocol_1.SemanticTokenTypes.number, + vscode_languageserver_protocol_1.SemanticTokenTypes.regexp, + vscode_languageserver_protocol_1.SemanticTokenTypes.operator, + vscode_languageserver_protocol_1.SemanticTokenTypes.decorator, + ]; + capability.tokenModifiers = [ + vscode_languageserver_protocol_1.SemanticTokenModifiers.declaration, + vscode_languageserver_protocol_1.SemanticTokenModifiers.definition, + vscode_languageserver_protocol_1.SemanticTokenModifiers.readonly, + vscode_languageserver_protocol_1.SemanticTokenModifiers.static, + vscode_languageserver_protocol_1.SemanticTokenModifiers.deprecated, + vscode_languageserver_protocol_1.SemanticTokenModifiers.abstract, + vscode_languageserver_protocol_1.SemanticTokenModifiers.async, + vscode_languageserver_protocol_1.SemanticTokenModifiers.modification, + vscode_languageserver_protocol_1.SemanticTokenModifiers.documentation, + vscode_languageserver_protocol_1.SemanticTokenModifiers + .defaultLibrary, + ]; + capability.formats = [ + vscode_languageserver_protocol_1.TokenFormat.Relative, + ]; + capability.requests = { + range: true, + full: { + delta: true, + }, + }; + capability.multilineTokenSupport = false; + capability.overlappingTokenSupport = false; + capability.serverCancelSupport = true; + capability.augmentsSyntaxTokens = true; + ensure( + ensure(capabilities, 'workspace'), + 'semanticTokens' + ).refreshSupport = true; + } + initialize(capabilities, documentSelector) { + const client = this._client; + client.onRequest( + vscode_languageserver_protocol_1.SemanticTokensRefreshRequest.type, + async () => { + for (const provider of this.getAllProviders()) { + provider.onDidChangeSemanticTokensEmitter.fire(); + } + } + ); + const [id, options] = this.getRegistration( + documentSelector, + capabilities.semanticTokensProvider + ); + if (!id || !options) { + return; + } + this.register({ id, registerOptions: options }); + } + registerLanguageProvider(options) { + const fullProvider = Is2.boolean(options.full) + ? options.full + : options.full !== void 0; + const hasEditProvider = + options.full !== void 0 && + typeof options.full !== 'boolean' && + options.full.delta === true; + const eventEmitter = new vscode3.EventEmitter(); + const documentProvider = fullProvider + ? { + onDidChangeSemanticTokens: eventEmitter.event, + provideDocumentSemanticTokens: (document2, token) => { + const client2 = this._client; + const middleware = client2.clientOptions.middleware; + const provideDocumentSemanticTokens = (document3, token2) => { + const params = { + textDocument: client2.code2ProtocolConverter.asTextDocumentIdentifier( + document3 + ), + }; + return client2 + .sendRequest( + vscode_languageserver_protocol_1.SemanticTokensRequest + .type, + params, + token2 + ) + .then( + (result) => { + return client2.protocol2CodeConverter.asSemanticTokens( + result + ); + }, + (error) => { + return client2.handleFailedRequest( + vscode_languageserver_protocol_1.SemanticTokensRequest + .type, + token2, + error, + null + ); + } + ); + }; + return middleware.provideDocumentSemanticTokens + ? middleware.provideDocumentSemanticTokens( + document2, + token, + provideDocumentSemanticTokens + ) + : provideDocumentSemanticTokens(document2, token); + }, + provideDocumentSemanticTokensEdits: hasEditProvider + ? (document2, previousResultId, token) => { + const client2 = this._client; + const middleware = client2.clientOptions.middleware; + const provideDocumentSemanticTokensEdits = ( + document3, + previousResultId2, + token2 + ) => { + const params = { + textDocument: client2.code2ProtocolConverter.asTextDocumentIdentifier( + document3 + ), + previousResultId: previousResultId2, + }; + return client2 + .sendRequest( + vscode_languageserver_protocol_1 + .SemanticTokensDeltaRequest.type, + params, + token2 + ) + .then( + (result) => { + if ( + vscode_languageserver_protocol_1.SemanticTokens.is( + result + ) + ) { + return client2.protocol2CodeConverter.asSemanticTokens( + result + ); + } else { + return client2.protocol2CodeConverter.asSemanticTokensEdits( + result + ); + } + }, + (error) => { + return client2.handleFailedRequest( + vscode_languageserver_protocol_1 + .SemanticTokensDeltaRequest.type, + token2, + error, + null + ); + } + ); + }; + return middleware.provideDocumentSemanticTokensEdits + ? middleware.provideDocumentSemanticTokensEdits( + document2, + previousResultId, + token, + provideDocumentSemanticTokensEdits + ) + : provideDocumentSemanticTokensEdits( + document2, + previousResultId, + token + ); + } + : void 0, + } + : void 0; + const hasRangeProvider = options.range === true; + const rangeProvider = hasRangeProvider + ? { + provideDocumentRangeSemanticTokens: (document2, range, token) => { + const client2 = this._client; + const middleware = client2.clientOptions.middleware; + const provideDocumentRangeSemanticTokens = ( + document3, + range2, + token2 + ) => { + const params = { + textDocument: client2.code2ProtocolConverter.asTextDocumentIdentifier( + document3 + ), + range: client2.code2ProtocolConverter.asRange(range2), + }; + return client2 + .sendRequest( + vscode_languageserver_protocol_1 + .SemanticTokensRangeRequest.type, + params, + token2 + ) + .then( + (result) => { + return client2.protocol2CodeConverter.asSemanticTokens( + result + ); + }, + (error) => { + return client2.handleFailedRequest( + vscode_languageserver_protocol_1 + .SemanticTokensRangeRequest.type, + token2, + error, + null + ); + } + ); + }; + return middleware.provideDocumentRangeSemanticTokens + ? middleware.provideDocumentRangeSemanticTokens( + document2, + range, + token, + provideDocumentRangeSemanticTokens + ) + : provideDocumentRangeSemanticTokens(document2, range, token); + }, + } + : void 0; + const disposables = []; + const client = this._client; + const legend = client.protocol2CodeConverter.asSemanticTokensLegend( + options.legend + ); + if (documentProvider !== void 0) { + disposables.push( + vscode3.languages.registerDocumentSemanticTokensProvider( + options.documentSelector, + documentProvider, + legend + ) + ); + } + if (rangeProvider !== void 0) { + disposables.push( + vscode3.languages.registerDocumentRangeSemanticTokensProvider( + options.documentSelector, + rangeProvider, + legend + ) + ); + } + return [ + new vscode3.Disposable(() => + disposables.forEach((item) => item.dispose()) + ), + { + range: rangeProvider, + full: documentProvider, + onDidChangeSemanticTokensEmitter: eventEmitter, + }, + ]; + } + }; + exports.SemanticTokensFeature = SemanticTokensFeature; + }, +}); + +// client/node_modules/concat-map/index.js +let require_concat_map = __commonJS({ + 'client/node_modules/concat-map/index.js'(exports, module2) { + module2.exports = function (xs2, fn2) { + let res = []; + for (let i = 0; i < xs2.length; i++) { + let x2 = fn2(xs2[i], i); + if (isArray(x2)) { + res.push.apply(res, x2); + } else { + res.push(x2); + } + } + return res; + }; + var isArray = + Array.isArray || + function (xs2) { + return Object.prototype.toString.call(xs2) === '[object Array]'; + }; + }, +}); + +// client/node_modules/balanced-match/index.js +let require_balanced_match = __commonJS({ + 'client/node_modules/balanced-match/index.js'(exports, module2) { + 'use strict'; + module2.exports = balanced; + function balanced(a, b, str) { + if (a instanceof RegExp) { + a = maybeMatch(a, str); + } + if (b instanceof RegExp) { + b = maybeMatch(b, str); + } + let r = range(a, b, str); + return ( + r && { + start: r[0], + end: r[1], + pre: str.slice(0, r[0]), + body: str.slice(r[0] + a.length, r[1]), + post: str.slice(r[1] + b.length), + } + ); + } + function maybeMatch(reg, str) { + let m = str.match(reg); + return m ? m[0] : null; + } + balanced.range = range; + function range(a, b, str) { + let begs, beg, left, right, result; + let ai2 = str.indexOf(a); + let bi2 = str.indexOf(b, ai2 + 1); + let i = ai2; + if (ai2 >= 0 && bi2 > 0) { + if (a === b) { + return [ai2, bi2]; + } + begs = []; + left = str.length; + while (i >= 0 && !result) { + if (i == ai2) { + begs.push(i); + ai2 = str.indexOf(a, i + 1); + } else if (begs.length == 1) { + result = [begs.pop(), bi2]; + } else { + beg = begs.pop(); + if (beg < left) { + left = beg; + right = bi2; + } + bi2 = str.indexOf(b, i + 1); + } + i = ai2 < bi2 && ai2 >= 0 ? ai2 : bi2; + } + if (begs.length) { + result = [left, right]; + } + } + return result; + } + }, +}); + +// client/node_modules/brace-expansion/index.js +let require_brace_expansion = __commonJS({ + 'client/node_modules/brace-expansion/index.js'(exports, module2) { + let concatMap = require_concat_map(); + let balanced = require_balanced_match(); + module2.exports = expandTop; + let escSlash = '\0SLASH' + Math.random() + '\0'; + let escOpen = '\0OPEN' + Math.random() + '\0'; + let escClose = '\0CLOSE' + Math.random() + '\0'; + let escComma = '\0COMMA' + Math.random() + '\0'; + let escPeriod = '\0PERIOD' + Math.random() + '\0'; + function numeric(str) { + return parseInt(str, 10) == str ? parseInt(str, 10) : str.charCodeAt(0); + } + function escapeBraces(str) { + return str + .split('\\\\') + .join(escSlash) + .split('\\{') + .join(escOpen) + .split('\\}') + .join(escClose) + .split('\\,') + .join(escComma) + .split('\\.') + .join(escPeriod); + } + function unescapeBraces(str) { + return str + .split(escSlash) + .join('\\') + .split(escOpen) + .join('{') + .split(escClose) + .join('}') + .split(escComma) + .join(',') + .split(escPeriod) + .join('.'); + } + function parseCommaParts(str) { + if (!str) { + return ['']; + } + let parts = []; + let m = balanced('{', '}', str); + if (!m) { + return str.split(','); + } + let pre = m.pre; + let body = m.body; + let post = m.post; + let p = pre.split(','); + p[p.length - 1] += '{' + body + '}'; + let postParts = parseCommaParts(post); + if (post.length) { + p[p.length - 1] += postParts.shift(); + p.push.apply(p, postParts); + } + parts.push.apply(parts, p); + return parts; + } + function expandTop(str) { + if (!str) { + return []; + } + if (str.substr(0, 2) === '{}') { + str = '\\{\\}' + str.substr(2); + } + return expand(escapeBraces(str), true).map(unescapeBraces); + } + function embrace(str) { + return '{' + str + '}'; + } + function isPadded(el2) { + return /^-?0\d/.test(el2); + } + function lte(i, y) { + return i <= y; + } + function gte(i, y) { + return i >= y; + } + function expand(str, isTop) { + let expansions = []; + let m = balanced('{', '}', str); + if (!m || /\$$/.test(m.pre)) { + return [str]; + } + let isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body); + let isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body); + let isSequence = isNumericSequence || isAlphaSequence; + let isOptions = m.body.indexOf(',') >= 0; + if (!isSequence && !isOptions) { + if (m.post.match(/,.*\}/)) { + str = m.pre + '{' + m.body + escClose + m.post; + return expand(str); + } + return [str]; + } + let n; + if (isSequence) { + n = m.body.split(/\.\./); + } else { + n = parseCommaParts(m.body); + if (n.length === 1) { + n = expand(n[0], false).map(embrace); + if (n.length === 1) { + var post = m.post.length ? expand(m.post, false) : ['']; + return post.map(function (p) { + return m.pre + n[0] + p; + }); + } + } + } + let pre = m.pre; + var post = m.post.length ? expand(m.post, false) : ['']; + let N; + if (isSequence) { + let x2 = numeric(n[0]); + let y = numeric(n[1]); + let width = Math.max(n[0].length, n[1].length); + let incr = n.length == 3 ? Math.abs(numeric(n[2])) : 1; + let test = lte; + let reverse = y < x2; + if (reverse) { + incr *= -1; + test = gte; + } + let pad = n.some(isPadded); + N = []; + for (let i = x2; test(i, y); i += incr) { + var c; + if (isAlphaSequence) { + c = String.fromCharCode(i); + if (c === '\\') { + c = ''; + } + } else { + c = String(i); + if (pad) { + let need = width - c.length; + if (need > 0) { + let z = new Array(need + 1).join('0'); + if (i < 0) { + c = '-' + z + c.slice(1); + } else { + c = z + c; + } + } + } + } + N.push(c); + } + } else { + N = concatMap(n, function (el2) { + return expand(el2, false); + }); + } + for (let j2 = 0; j2 < N.length; j2++) { + for (let k = 0; k < post.length; k++) { + let expansion = pre + N[j2] + post[k]; + if (!isTop || isSequence || expansion) { + expansions.push(expansion); + } + } + } + return expansions; + } + }, +}); + +// client/node_modules/minimatch/minimatch.js +let require_minimatch = __commonJS({ + 'client/node_modules/minimatch/minimatch.js'(exports, module2) { + module2.exports = minimatch; + minimatch.Minimatch = Minimatch; + let path = { sep: '/' }; + try { + path = require('path'); + } catch (er2) {} + let GLOBSTAR = (minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {}); + let expand = require_brace_expansion(); + let plTypes = { + '!': { open: '(?:(?!(?:', close: '))[^/]*?)' }, + '?': { open: '(?:', close: ')?' }, + '+': { open: '(?:', close: ')+' }, + '*': { open: '(?:', close: ')*' }, + '@': { open: '(?:', close: ')' }, + }; + let qmark = '[^/]'; + let star = qmark + '*?'; + let twoStarDot = '(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?'; + let twoStarNoDot = '(?:(?!(?:\\/|^)\\.).)*?'; + let reSpecials = charSet('().*{}+?[]^$\\!'); + function charSet(s) { + return s.split('').reduce(function (set, c) { + set[c] = true; + return set; + }, {}); + } + let slashSplit = /\/+/; + minimatch.filter = filter; + function filter(pattern, options) { + options = options || {}; + return function (p, i, list) { + return minimatch(p, pattern, options); + }; + } + function ext(a, b) { + a = a || {}; + b = b || {}; + let t = {}; + Object.keys(b).forEach(function (k) { + t[k] = b[k]; + }); + Object.keys(a).forEach(function (k) { + t[k] = a[k]; + }); + return t; + } + minimatch.defaults = function (def) { + if (!def || !Object.keys(def).length) { + return minimatch; + } + let orig = minimatch; + let m = function minimatch2(p, pattern, options) { + return orig.minimatch(p, pattern, ext(def, options)); + }; + m.Minimatch = function Minimatch2(pattern, options) { + return new orig.Minimatch(pattern, ext(def, options)); + }; + return m; + }; + Minimatch.defaults = function (def) { + if (!def || !Object.keys(def).length) { + return Minimatch; + } + return minimatch.defaults(def).Minimatch; + }; + function minimatch(p, pattern, options) { + if (typeof pattern !== 'string') { + throw new TypeError('glob pattern string required'); + } + if (!options) { + options = {}; + } + if (!options.nocomment && pattern.charAt(0) === '#') { + return false; + } + if (pattern.trim() === '') { + return p === ''; + } + return new Minimatch(pattern, options).match(p); + } + function Minimatch(pattern, options) { + if (!(this instanceof Minimatch)) { + return new Minimatch(pattern, options); + } + if (typeof pattern !== 'string') { + throw new TypeError('glob pattern string required'); + } + if (!options) { + options = {}; + } + pattern = pattern.trim(); + if (path.sep !== '/') { + pattern = pattern.split(path.sep).join('/'); + } + this.options = options; + this.set = []; + this.pattern = pattern; + this.regexp = null; + this.negate = false; + this.comment = false; + this.empty = false; + this.make(); + } + Minimatch.prototype.debug = function () {}; + Minimatch.prototype.make = make; + function make() { + if (this._made) { + return; + } + let pattern = this.pattern; + let options = this.options; + if (!options.nocomment && pattern.charAt(0) === '#') { + this.comment = true; + return; + } + if (!pattern) { + this.empty = true; + return; + } + this.parseNegate(); + let set = (this.globSet = this.braceExpand()); + if (options.debug) { + this.debug = console.error; + } + this.debug(this.pattern, set); + set = this.globParts = set.map(function (s) { + return s.split(slashSplit); + }); + this.debug(this.pattern, set); + set = set.map(function (s, si2, set2) { + return s.map(this.parse, this); + }, this); + this.debug(this.pattern, set); + set = set.filter(function (s) { + return s.indexOf(false) === -1; + }); + this.debug(this.pattern, set); + this.set = set; + } + Minimatch.prototype.parseNegate = parseNegate; + function parseNegate() { + let pattern = this.pattern; + let negate = false; + let options = this.options; + let negateOffset = 0; + if (options.nonegate) { + return; + } + for ( + let i = 0, l = pattern.length; + i < l && pattern.charAt(i) === '!'; + i++ + ) { + negate = !negate; + negateOffset++; + } + if (negateOffset) { + this.pattern = pattern.substr(negateOffset); + } + this.negate = negate; + } + minimatch.braceExpand = function (pattern, options) { + return braceExpand(pattern, options); + }; + Minimatch.prototype.braceExpand = braceExpand; + function braceExpand(pattern, options) { + if (!options) { + if (this instanceof Minimatch) { + options = this.options; + } else { + options = {}; + } + } + pattern = typeof pattern === 'undefined' ? this.pattern : pattern; + if (typeof pattern === 'undefined') { + throw new TypeError('undefined pattern'); + } + if (options.nobrace || !pattern.match(/\{.*\}/)) { + return [pattern]; + } + return expand(pattern); + } + Minimatch.prototype.parse = parse; + let SUBPARSE = {}; + function parse(pattern, isSub) { + if (pattern.length > 1024 * 64) { + throw new TypeError('pattern is too long'); + } + let options = this.options; + if (!options.noglobstar && pattern === '**') { + return GLOBSTAR; + } + if (pattern === '') { + return ''; + } + let re2 = ''; + let hasMagic = !!options.nocase; + let escaping = false; + let patternListStack = []; + let negativeLists = []; + let stateChar; + let inClass = false; + let reClassStart = -1; + let classStart = -1; + let patternStart = + pattern.charAt(0) === '.' + ? '' + : options.dot + ? '(?!(?:^|\\/)\\.{1,2}(?:$|\\/))' + : '(?!\\.)'; + let self2 = this; + function clearStateChar() { + if (stateChar) { + switch (stateChar) { + case '*': + re2 += star; + hasMagic = true; + break; + case '?': + re2 += qmark; + hasMagic = true; + break; + default: + re2 += '\\' + stateChar; + break; + } + self2.debug('clearStateChar %j %j', stateChar, re2); + stateChar = false; + } + } + for ( + var i = 0, len = pattern.length, c; + i < len && (c = pattern.charAt(i)); + i++ + ) { + this.debug('%s %s %s %j', pattern, i, re2, c); + if (escaping && reSpecials[c]) { + re2 += '\\' + c; + escaping = false; + continue; + } + switch (c) { + case '/': + return false; + case '\\': + clearStateChar(); + escaping = true; + continue; + case '?': + case '*': + case '+': + case '@': + case '!': + this.debug('%s %s %s %j <-- stateChar', pattern, i, re2, c); + if (inClass) { + this.debug(' in class'); + if (c === '!' && i === classStart + 1) { + c = '^'; + } + re2 += c; + continue; + } + self2.debug('call clearStateChar %j', stateChar); + clearStateChar(); + stateChar = c; + if (options.noext) { + clearStateChar(); + } + continue; + case '(': + if (inClass) { + re2 += '('; + continue; + } + if (!stateChar) { + re2 += '\\('; + continue; + } + patternListStack.push({ + type: stateChar, + start: i - 1, + reStart: re2.length, + open: plTypes[stateChar].open, + close: plTypes[stateChar].close, + }); + re2 += stateChar === '!' ? '(?:(?!(?:' : '(?:'; + this.debug('plType %j %j', stateChar, re2); + stateChar = false; + continue; + case ')': + if (inClass || !patternListStack.length) { + re2 += '\\)'; + continue; + } + clearStateChar(); + hasMagic = true; + var pl2 = patternListStack.pop(); + re2 += pl2.close; + if (pl2.type === '!') { + negativeLists.push(pl2); + } + pl2.reEnd = re2.length; + continue; + case '|': + if (inClass || !patternListStack.length || escaping) { + re2 += '\\|'; + escaping = false; + continue; + } + clearStateChar(); + re2 += '|'; + continue; + case '[': + clearStateChar(); + if (inClass) { + re2 += '\\' + c; + continue; + } + inClass = true; + classStart = i; + reClassStart = re2.length; + re2 += c; + continue; + case ']': + if (i === classStart + 1 || !inClass) { + re2 += '\\' + c; + escaping = false; + continue; + } + if (inClass) { + var cs2 = pattern.substring(classStart + 1, i); + try { + RegExp('[' + cs2 + ']'); + } catch (er2) { + var sp = this.parse(cs2, SUBPARSE); + re2 = re2.substr(0, reClassStart) + '\\[' + sp[0] + '\\]'; + hasMagic = hasMagic || sp[1]; + inClass = false; + continue; + } + } + hasMagic = true; + inClass = false; + re2 += c; + continue; + default: + clearStateChar(); + if (escaping) { + escaping = false; + } else if (reSpecials[c] && !(c === '^' && inClass)) { + re2 += '\\'; + } + re2 += c; + } + } + if (inClass) { + cs2 = pattern.substr(classStart + 1); + sp = this.parse(cs2, SUBPARSE); + re2 = re2.substr(0, reClassStart) + '\\[' + sp[0]; + hasMagic = hasMagic || sp[1]; + } + for (pl2 = patternListStack.pop(); pl2; pl2 = patternListStack.pop()) { + let tail = re2.slice(pl2.reStart + pl2.open.length); + this.debug('setting tail', re2, pl2); + tail = tail.replace(/((?:\\{2}){0,64})(\\?)\|/g, function (_2, $1, $2) { + if (!$2) { + $2 = '\\'; + } + return $1 + $1 + $2 + '|'; + }); + this.debug('tail=%j\n %s', tail, tail, pl2, re2); + let t = + pl2.type === '*' ? star : pl2.type === '?' ? qmark : '\\' + pl2.type; + hasMagic = true; + re2 = re2.slice(0, pl2.reStart) + t + '\\(' + tail; + } + clearStateChar(); + if (escaping) { + re2 += '\\\\'; + } + let addPatternStart = false; + switch (re2.charAt(0)) { + case '.': + case '[': + case '(': + addPatternStart = true; + } + for (let n = negativeLists.length - 1; n > -1; n--) { + let nl2 = negativeLists[n]; + let nlBefore = re2.slice(0, nl2.reStart); + let nlFirst = re2.slice(nl2.reStart, nl2.reEnd - 8); + let nlLast = re2.slice(nl2.reEnd - 8, nl2.reEnd); + let nlAfter = re2.slice(nl2.reEnd); + nlLast += nlAfter; + let openParensBefore = nlBefore.split('(').length - 1; + let cleanAfter = nlAfter; + for (i = 0; i < openParensBefore; i++) { + cleanAfter = cleanAfter.replace(/\)[+*?]?/, ''); + } + nlAfter = cleanAfter; + let dollar = ''; + if (nlAfter === '' && isSub !== SUBPARSE) { + dollar = '$'; + } + let newRe = nlBefore + nlFirst + nlAfter + dollar + nlLast; + re2 = newRe; + } + if (re2 !== '' && hasMagic) { + re2 = '(?=.)' + re2; + } + if (addPatternStart) { + re2 = patternStart + re2; + } + if (isSub === SUBPARSE) { + return [re2, hasMagic]; + } + if (!hasMagic) { + return globUnescape(pattern); + } + let flags = options.nocase ? 'i' : ''; + try { + var regExp = new RegExp('^' + re2 + '$', flags); + } catch (er2) { + return new RegExp('$.'); + } + regExp._glob = pattern; + regExp._src = re2; + return regExp; + } + minimatch.makeRe = function (pattern, options) { + return new Minimatch(pattern, options || {}).makeRe(); + }; + Minimatch.prototype.makeRe = makeRe; + function makeRe() { + if (this.regexp || this.regexp === false) { + return this.regexp; + } + let set = this.set; + if (!set.length) { + this.regexp = false; + return this.regexp; + } + let options = this.options; + let twoStar = options.noglobstar + ? star + : options.dot + ? twoStarDot + : twoStarNoDot; + let flags = options.nocase ? 'i' : ''; + let re2 = set + .map(function (pattern) { + return pattern + .map(function (p) { + return p === GLOBSTAR + ? twoStar + : typeof p === 'string' + ? regExpEscape(p) + : p._src; + }) + .join('\\/'); + }) + .join('|'); + re2 = '^(?:' + re2 + ')$'; + if (this.negate) { + re2 = '^(?!' + re2 + ').*$'; + } + try { + this.regexp = new RegExp(re2, flags); + } catch (ex) { + this.regexp = false; + } + return this.regexp; + } + minimatch.match = function (list, pattern, options) { + options = options || {}; + let mm = new Minimatch(pattern, options); + list = list.filter(function (f) { + return mm.match(f); + }); + if (mm.options.nonull && !list.length) { + list.push(pattern); + } + return list; + }; + Minimatch.prototype.match = match; + function match(f, partial) { + this.debug('match', f, this.pattern); + if (this.comment) { + return false; + } + if (this.empty) { + return f === ''; + } + if (f === '/' && partial) { + return true; + } + let options = this.options; + if (path.sep !== '/') { + f = f.split(path.sep).join('/'); + } + f = f.split(slashSplit); + this.debug(this.pattern, 'split', f); + let set = this.set; + this.debug(this.pattern, 'set', set); + let filename; + let i; + for (i = f.length - 1; i >= 0; i--) { + filename = f[i]; + if (filename) { + break; + } + } + for (i = 0; i < set.length; i++) { + let pattern = set[i]; + let file = f; + if (options.matchBase && pattern.length === 1) { + file = [filename]; + } + let hit = this.matchOne(file, pattern, partial); + if (hit) { + if (options.flipNegate) { + return true; + } + return !this.negate; + } + } + if (options.flipNegate) { + return false; + } + return this.negate; + } + Minimatch.prototype.matchOne = function (file, pattern, partial) { + let options = this.options; + this.debug('matchOne', { this: this, file, pattern }); + this.debug('matchOne', file.length, pattern.length); + for ( + var fi2 = 0, pi2 = 0, fl2 = file.length, pl2 = pattern.length; + fi2 < fl2 && pi2 < pl2; + fi2++, pi2++ + ) { + this.debug('matchOne loop'); + let p = pattern[pi2]; + let f = file[fi2]; + this.debug(pattern, p, f); + if (p === false) { + return false; + } + if (p === GLOBSTAR) { + this.debug('GLOBSTAR', [pattern, p, f]); + let fr2 = fi2; + let pr2 = pi2 + 1; + if (pr2 === pl2) { + this.debug('** at the end'); + for (; fi2 < fl2; fi2++) { + if ( + file[fi2] === '.' || + file[fi2] === '..' || + (!options.dot && file[fi2].charAt(0) === '.') + ) { + return false; + } + } + return true; + } + while (fr2 < fl2) { + let swallowee = file[fr2]; + this.debug('\nglobstar while', file, fr2, pattern, pr2, swallowee); + if (this.matchOne(file.slice(fr2), pattern.slice(pr2), partial)) { + this.debug('globstar found match!', fr2, fl2, swallowee); + return true; + } else { + if ( + swallowee === '.' || + swallowee === '..' || + (!options.dot && swallowee.charAt(0) === '.') + ) { + this.debug('dot detected!', file, fr2, pattern, pr2); + break; + } + this.debug('globstar swallow a segment, and continue'); + fr2++; + } + } + if (partial) { + this.debug('\n>>> no match, partial?', file, fr2, pattern, pr2); + if (fr2 === fl2) { + return true; + } + } + return false; + } + var hit; + if (typeof p === 'string') { + if (options.nocase) { + hit = f.toLowerCase() === p.toLowerCase(); + } else { + hit = f === p; + } + this.debug('string match', p, f, hit); + } else { + hit = f.match(p); + this.debug('pattern match', p, f, hit); + } + if (!hit) { + return false; + } + } + if (fi2 === fl2 && pi2 === pl2) { + return true; + } else if (fi2 === fl2) { + return partial; + } else if (pi2 === pl2) { + let emptyFileEnd = fi2 === fl2 - 1 && file[fi2] === ''; + return emptyFileEnd; + } + throw new Error('wtf?'); + }; + function globUnescape(s) { + return s.replace(/\\(.)/g, '$1'); + } + function regExpEscape(s) { + return s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&'); + } + }, +}); + +// client/node_modules/vscode-languageclient/lib/common/fileOperations.js +let require_fileOperations = __commonJS({ + 'client/node_modules/vscode-languageclient/lib/common/fileOperations.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.WillDeleteFilesFeature = exports.WillRenameFilesFeature = exports.WillCreateFilesFeature = exports.DidDeleteFilesFeature = exports.DidRenameFilesFeature = exports.DidCreateFilesFeature = void 0; + let code = require('vscode'); + let minimatch = require_minimatch(); + let proto = require_main3(); + let UUID = require_uuid(); + function ensure(target, key) { + if (target[key] === void 0) { + target[key] = {}; + } + return target[key]; + } + function access(target, key) { + return target[key]; + } + function assign(target, key, value) { + target[key] = value; + } + var FileOperationFeature = class { + constructor( + client, + event, + registrationType, + clientCapability, + serverCapability + ) { + this._filters = new Map(); + this._client = client; + this._event = event; + this._registrationType = registrationType; + this._clientCapability = clientCapability; + this._serverCapability = serverCapability; + } + get registrationType() { + return this._registrationType; + } + fillClientCapabilities(capabilities) { + const value = ensure( + ensure(capabilities, 'workspace'), + 'fileOperations' + ); + assign(value, 'dynamicRegistration', true); + assign(value, this._clientCapability, true); + } + initialize(capabilities) { + const options = capabilities.workspace?.fileOperations; + const capability = + options !== void 0 ? access(options, this._serverCapability) : void 0; + if (capability?.filters !== void 0) { + try { + this.register({ + id: UUID.generateUuid(), + registerOptions: { filters: capability.filters }, + }); + } catch (e) { + this._client.warn( + `Ignoring invalid glob pattern for ${this._serverCapability} registration: ${e}` + ); + } + } + } + register(data) { + if (!this._listener) { + this._listener = this._event(this.send, this); + } + const minimatchFilter = data.registerOptions.filters.map((filter) => { + const matcher = new minimatch.Minimatch( + filter.pattern.glob, + FileOperationFeature.asMinimatchOptions(filter.pattern.options) + ); + if (!matcher.makeRe()) { + throw new Error(`Invalid pattern ${filter.pattern.glob}!`); + } + return { + scheme: filter.scheme, + matcher, + kind: filter.pattern.matches, + }; + }); + this._filters.set(data.id, minimatchFilter); + } + unregister(id) { + this._filters.delete(id); + if (this._filters.size === 0 && this._listener) { + this._listener.dispose(); + this._listener = void 0; + } + } + dispose() { + this._filters.clear(); + if (this._listener) { + this._listener.dispose(); + this._listener = void 0; + } + } + getFileType(uri) { + return FileOperationFeature.getFileType(uri); + } + async filter(event, prop) { + const fileMatches = await Promise.all( + event.files.map(async (item) => { + const uri = prop(item); + const path = uri.fsPath.replace(/\\/g, '/'); + for (const filters of this._filters.values()) { + for (const filter of filters) { + if (filter.scheme !== void 0 && filter.scheme !== uri.scheme) { + continue; + } + if (filter.matcher.match(path)) { + if (filter.kind === void 0) { + return true; + } + const fileType = await this.getFileType(uri); + if (fileType === void 0) { + this._client.error( + `Failed to determine file type for ${uri.toString()}.` + ); + return true; + } + if ( + (fileType === code.FileType.File && + filter.kind === proto.FileOperationPatternKind.file) || + (fileType === code.FileType.Directory && + filter.kind === proto.FileOperationPatternKind.folder) + ) { + return true; + } + } else if ( + filter.kind === proto.FileOperationPatternKind.folder + ) { + const fileType = await FileOperationFeature.getFileType(uri); + if ( + fileType === code.FileType.Directory && + filter.matcher.match(`${path}/`) + ) { + return true; + } + } + } + } + return false; + }) + ); + const files = event.files.filter((_2, index) => fileMatches[index]); + return { ...event, files }; + } + static async getFileType(uri) { + try { + return (await code.workspace.fs.stat(uri)).type; + } catch (e) { + return void 0; + } + } + static asMinimatchOptions(options) { + if (options === void 0) { + return void 0; + } + if (options.ignoreCase === true) { + return { nocase: true }; + } + return void 0; + } + }; + let NotificationFileOperationFeature = class extends FileOperationFeature { + constructor( + client, + event, + notificationType, + clientCapability, + serverCapability, + accessUri, + createParams + ) { + super( + client, + event, + notificationType, + clientCapability, + serverCapability + ); + this._notificationType = notificationType; + this._accessUri = accessUri; + this._createParams = createParams; + } + async send(originalEvent) { + const filteredEvent = await this.filter(originalEvent, this._accessUri); + if (filteredEvent.files.length) { + const next = async (event) => { + return this._client.sendNotification( + this._notificationType, + this._createParams(event) + ); + }; + return this.doSend(filteredEvent, next); + } + } + }; + let CachingNotificationFileOperationFeature = class extends NotificationFileOperationFeature { + constructor() { + super(...arguments); + this._fsPathFileTypes = new Map(); + } + async getFileType(uri) { + const fsPath = uri.fsPath; + if (this._fsPathFileTypes.has(fsPath)) { + return this._fsPathFileTypes.get(fsPath); + } + const type = await FileOperationFeature.getFileType(uri); + if (type) { + this._fsPathFileTypes.set(fsPath, type); + } + return type; + } + async cacheFileTypes(event, prop) { + await this.filter(event, prop); + } + clearFileTypeCache() { + this._fsPathFileTypes.clear(); + } + unregister(id) { + super.unregister(id); + if (this._filters.size === 0 && this._willListener) { + this._willListener.dispose(); + this._willListener = void 0; + } + } + dispose() { + super.dispose(); + if (this._willListener) { + this._willListener.dispose(); + this._willListener = void 0; + } + } + }; + let DidCreateFilesFeature = class extends NotificationFileOperationFeature { + constructor(client) { + super( + client, + code.workspace.onDidCreateFiles, + proto.DidCreateFilesNotification.type, + 'didCreate', + 'didCreate', + (i) => i, + client.code2ProtocolConverter.asDidCreateFilesParams + ); + } + doSend(event, next) { + const middleware = this._client.clientOptions.middleware?.workspace; + return middleware?.didCreateFiles + ? middleware.didCreateFiles(event, next) + : next(event); + } + }; + exports.DidCreateFilesFeature = DidCreateFilesFeature; + let DidRenameFilesFeature = class extends CachingNotificationFileOperationFeature { + constructor(client) { + super( + client, + code.workspace.onDidRenameFiles, + proto.DidRenameFilesNotification.type, + 'didRename', + 'didRename', + (i) => i.oldUri, + client.code2ProtocolConverter.asDidRenameFilesParams + ); + } + register(data) { + if (!this._willListener) { + this._willListener = code.workspace.onWillRenameFiles( + this.willRename, + this + ); + } + super.register(data); + } + willRename(e) { + e.waitUntil(this.cacheFileTypes(e, (i) => i.oldUri)); + } + doSend(event, next) { + this.clearFileTypeCache(); + const middleware = this._client.clientOptions.middleware?.workspace; + return middleware?.didRenameFiles + ? middleware.didRenameFiles(event, next) + : next(event); + } + }; + exports.DidRenameFilesFeature = DidRenameFilesFeature; + let DidDeleteFilesFeature = class extends CachingNotificationFileOperationFeature { + constructor(client) { + super( + client, + code.workspace.onDidDeleteFiles, + proto.DidDeleteFilesNotification.type, + 'didDelete', + 'didDelete', + (i) => i, + client.code2ProtocolConverter.asDidDeleteFilesParams + ); + } + register(data) { + if (!this._willListener) { + this._willListener = code.workspace.onWillDeleteFiles( + this.willDelete, + this + ); + } + super.register(data); + } + willDelete(e) { + e.waitUntil(this.cacheFileTypes(e, (i) => i)); + } + doSend(event, next) { + this.clearFileTypeCache(); + const middleware = this._client.clientOptions.middleware?.workspace; + return middleware?.didDeleteFiles + ? middleware.didDeleteFiles(event, next) + : next(event); + } + }; + exports.DidDeleteFilesFeature = DidDeleteFilesFeature; + let RequestFileOperationFeature = class extends FileOperationFeature { + constructor( + client, + event, + requestType, + clientCapability, + serverCapability, + accessUri, + createParams + ) { + super(client, event, requestType, clientCapability, serverCapability); + this._requestType = requestType; + this._accessUri = accessUri; + this._createParams = createParams; + } + async send(originalEvent) { + const waitUntil = this.waitUntil(originalEvent); + originalEvent.waitUntil(waitUntil); + } + async waitUntil(originalEvent) { + const filteredEvent = await this.filter(originalEvent, this._accessUri); + if (filteredEvent.files.length) { + const next = (event) => { + return this._client + .sendRequest(this._requestType, this._createParams(event)) + .then(this._client.protocol2CodeConverter.asWorkspaceEdit); + }; + return this.doSend(filteredEvent, next); + } else { + return void 0; + } + } + }; + let WillCreateFilesFeature = class extends RequestFileOperationFeature { + constructor(client) { + super( + client, + code.workspace.onWillCreateFiles, + proto.WillCreateFilesRequest.type, + 'willCreate', + 'willCreate', + (i) => i, + client.code2ProtocolConverter.asWillCreateFilesParams + ); + } + doSend(event, next) { + const middleware = this._client.clientOptions.middleware?.workspace; + return middleware?.willCreateFiles + ? middleware.willCreateFiles(event, next) + : next(event); + } + }; + exports.WillCreateFilesFeature = WillCreateFilesFeature; + let WillRenameFilesFeature = class extends RequestFileOperationFeature { + constructor(client) { + super( + client, + code.workspace.onWillRenameFiles, + proto.WillRenameFilesRequest.type, + 'willRename', + 'willRename', + (i) => i.oldUri, + client.code2ProtocolConverter.asWillRenameFilesParams + ); + } + doSend(event, next) { + const middleware = this._client.clientOptions.middleware?.workspace; + return middleware?.willRenameFiles + ? middleware.willRenameFiles(event, next) + : next(event); + } + }; + exports.WillRenameFilesFeature = WillRenameFilesFeature; + let WillDeleteFilesFeature = class extends RequestFileOperationFeature { + constructor(client) { + super( + client, + code.workspace.onWillDeleteFiles, + proto.WillDeleteFilesRequest.type, + 'willDelete', + 'willDelete', + (i) => i, + client.code2ProtocolConverter.asWillDeleteFilesParams + ); + } + doSend(event, next) { + const middleware = this._client.clientOptions.middleware?.workspace; + return middleware?.willDeleteFiles + ? middleware.willDeleteFiles(event, next) + : next(event); + } + }; + exports.WillDeleteFilesFeature = WillDeleteFilesFeature; + }, +}); + +// client/node_modules/vscode-languageclient/lib/common/linkedEditingRange.js +let require_linkedEditingRange = __commonJS({ + 'client/node_modules/vscode-languageclient/lib/common/linkedEditingRange.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.LinkedEditingFeature = void 0; + let code = require('vscode'); + let proto = require_main3(); + let client_1 = require_client(); + function ensure(target, key) { + if (target[key] === void 0) { + target[key] = {}; + } + return target[key]; + } + let LinkedEditingFeature = class extends client_1.TextDocumentFeature { + constructor(client) { + super(client, proto.LinkedEditingRangeRequest.type); + } + fillClientCapabilities(capabilities) { + const linkedEditingSupport = ensure( + ensure(capabilities, 'textDocument'), + 'linkedEditingRange' + ); + linkedEditingSupport.dynamicRegistration = true; + } + initialize(capabilities, documentSelector) { + let [id, options] = this.getRegistration( + documentSelector, + capabilities.linkedEditingRangeProvider + ); + if (!id || !options) { + return; + } + this.register({ id, registerOptions: options }); + } + registerLanguageProvider(options) { + const provider = { + provideLinkedEditingRanges: (document2, position, token) => { + const client = this._client; + const provideLinkedEditing = (document3, position2, token2) => { + return client + .sendRequest( + proto.LinkedEditingRangeRequest.type, + client.code2ProtocolConverter.asTextDocumentPositionParams( + document3, + position2 + ), + token2 + ) + .then( + client.protocol2CodeConverter.asLinkedEditingRanges, + (error) => { + return client.handleFailedRequest( + proto.LinkedEditingRangeRequest.type, + token2, + error, + null + ); + } + ); + }; + const middleware = client.clientOptions.middleware; + return middleware.provideLinkedEditingRange + ? middleware.provideLinkedEditingRange( + document2, + position, + token, + provideLinkedEditing + ) + : provideLinkedEditing(document2, position, token); + }, + }; + return [ + code.languages.registerLinkedEditingRangeProvider( + options.documentSelector, + provider + ), + provider, + ]; + } + }; + exports.LinkedEditingFeature = LinkedEditingFeature; + }, +}); + +// client/node_modules/vscode-languageclient/lib/common/proposed.diagnostic.js +let require_proposed_diagnostic2 = __commonJS({ + 'client/node_modules/vscode-languageclient/lib/common/proposed.diagnostic.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.DiagnosticFeature = exports.vsdiag = void 0; + let vscode_1 = require('vscode'); + let vscode_languageserver_protocol_1 = require_main3(); + let uuid_1 = require_uuid(); + let client_1 = require_client(); + function ensure(target, key) { + if (target[key] === void 0) { + target[key] = {}; + } + return target[key]; + } + let vsdiag; + (function (vsdiag2) { + let DocumentDiagnosticReportKind; + (function (DocumentDiagnosticReportKind2) { + DocumentDiagnosticReportKind2['full'] = 'full'; + DocumentDiagnosticReportKind2['unChanged'] = 'unChanged'; + })( + (DocumentDiagnosticReportKind = + vsdiag2.DocumentDiagnosticReportKind || + (vsdiag2.DocumentDiagnosticReportKind = {})) + ); + })((vsdiag = exports.vsdiag || (exports.vsdiag = {}))); + let RequestStateKind; + (function (RequestStateKind2) { + RequestStateKind2['active'] = 'open'; + RequestStateKind2['reschedule'] = 'reschedule'; + RequestStateKind2['outDated'] = 'drop'; + })(RequestStateKind || (RequestStateKind = {})); + let EditorTracker = class { + constructor() { + this.open = new Set(); + const openTabsHandler = () => { + this.open.clear(); + if (vscode_1.window.tabs !== void 0) { + for (const tab of vscode_1.window.tabs) { + if (tab.resource !== void 0) { + this.open.add(tab.resource.toString()); + } + } + } else if (vscode_1.window.openEditors !== void 0) { + for (const info of vscode_1.window.openEditors) { + if (info.resource !== void 0) { + this.open.add(info.resource.toString()); + } + } + } + }; + openTabsHandler(); + if (vscode_1.window.onDidChangeTabs !== void 0) { + this.disposable = vscode_1.window.onDidChangeTabs(openTabsHandler); + } else if (vscode_1.window.onDidChangeOpenEditors !== void 0) { + this.disposable = vscode_1.window.onDidChangeOpenEditors( + openTabsHandler + ); + } else { + this.disposable = { dispose: () => {} }; + } + } + dispose() { + this.disposable.dispose(); + } + isActive(textDocument) { + return vscode_1.window.activeTextEditor?.document === textDocument; + } + isVisible(textDocument) { + return this.open.has(textDocument.uri.toString()); + } + }; + let PullState; + (function (PullState2) { + PullState2[(PullState2['document'] = 1)] = 'document'; + PullState2[(PullState2['workspace'] = 2)] = 'workspace'; + })(PullState || (PullState = {})); + let DocumentPullStateTracker = class { + constructor() { + this.documentPullStates = new Map(); + this.workspacePullStates = new Map(); + } + track(kind, document2, arg1) { + const states = + kind === PullState.document + ? this.documentPullStates + : this.workspacePullStates; + const [key, uri, version] = + typeof document2 === 'string' + ? [document2, vscode_1.Uri.parse(document2), arg1] + : [document2.uri.toString(), document2.uri, document2.version]; + let state = states.get(key); + if (state === void 0) { + state = { document: uri, pulledVersion: version, resultId: void 0 }; + states.set(key, state); + } + return state; + } + update(kind, document2, arg1, arg2) { + const states = + kind === PullState.document + ? this.documentPullStates + : this.workspacePullStates; + const [key, uri, version, resultId] = + typeof document2 === 'string' + ? [document2, vscode_1.Uri.parse(document2), arg1, arg2] + : [ + document2.uri.toString(), + document2.uri, + document2.version, + arg1, + ]; + let state = states.get(key); + if (state === void 0) { + state = { document: uri, pulledVersion: version, resultId }; + states.set(key, state); + } else { + state.pulledVersion = version; + state.resultId = resultId; + } + } + unTrack(kind, textDocument) { + const states = + kind === PullState.document + ? this.documentPullStates + : this.workspacePullStates; + states.delete(textDocument.uri.toString()); + } + tracks(kind, document2) { + const key = + typeof document2 === 'string' ? document2 : document2.uri.toString(); + const states = + kind === PullState.document + ? this.documentPullStates + : this.workspacePullStates; + return states.has(key); + } + getResultId(kind, textDocument) { + const states = + kind === PullState.document + ? this.documentPullStates + : this.workspacePullStates; + return states.get(textDocument.uri.toString())?.resultId; + } + getAllResultIds() { + const result = []; + for (let [uri, value] of this.workspacePullStates) { + if (this.documentPullStates.has(uri)) { + value = this.documentPullStates.get(uri); + } + if (value.resultId !== void 0) { + result.push({ uri, value: value.resultId }); + } + } + return result; + } + }; + let DiagnosticRequestor = class { + constructor(client, editorTracker, options) { + this.client = client; + this.editorTracker = editorTracker; + this.options = options; + this.isDisposed = false; + this.onDidChangeDiagnosticsEmitter = new vscode_1.EventEmitter(); + this.provider = this.createProvider(); + this.diagnostics = vscode_1.languages.createDiagnosticCollection( + options.identifier + ); + this.openRequests = new Map(); + this.documentStates = new DocumentPullStateTracker(); + this.workspaceErrorCounter = 0; + } + knows(kind, textDocument) { + return this.documentStates.tracks(kind, textDocument); + } + pull(textDocument, cb) { + this.pullAsync(textDocument).then( + () => { + if (cb) { + cb(); + } + }, + (error) => { + this.client.error( + `Document pull failed for text document ${textDocument.uri.toString()}`, + error, + false + ); + } + ); + } + async pullAsync(textDocument) { + const key = textDocument.uri.toString(); + const version = textDocument.version; + const currentRequestState = this.openRequests.get(key); + const documentState = this.documentStates.track( + PullState.document, + textDocument + ); + if (currentRequestState === void 0) { + const tokenSource = new vscode_1.CancellationTokenSource(); + this.openRequests.set(key, { + state: RequestStateKind.active, + version, + textDocument, + tokenSource, + }); + let report; + let afterState; + try { + report = (await this.provider.provideDiagnostics( + textDocument, + documentState.resultId, + tokenSource.token + )) ?? { kind: vsdiag.DocumentDiagnosticReportKind.full, items: [] }; + } catch (error) { + if ( + error instanceof client_1.LSPCancellationError && + vscode_languageserver_protocol_1.Proposed.DiagnosticServerCancellationData.is( + error.data + ) && + error.data.retriggerRequest === false + ) { + afterState = { state: RequestStateKind.outDated, textDocument }; + } + if ( + afterState === void 0 && + error instanceof vscode_1.CancellationError + ) { + afterState = { state: RequestStateKind.reschedule, textDocument }; + } else { + throw error; + } + } + afterState = afterState ?? this.openRequests.get(key); + if (afterState === void 0) { + this.client.error( + `Lost request state in diagnostic pull model. Clearing diagnostics for ${key}` + ); + this.diagnostics.delete(textDocument.uri); + return; + } + this.openRequests.delete(key); + if (!this.editorTracker.isVisible(textDocument)) { + this.documentStates.unTrack(PullState.document, textDocument); + return; + } + if (afterState.state === RequestStateKind.outDated) { + return; + } + if (report !== void 0) { + if (report.kind === vsdiag.DocumentDiagnosticReportKind.full) { + this.diagnostics.set(textDocument.uri, report.items); + } + documentState.pulledVersion = version; + documentState.resultId = report.resultId; + } + if (afterState.state === RequestStateKind.reschedule) { + this.pull(textDocument); + } + } else { + if (currentRequestState.state === RequestStateKind.active) { + currentRequestState.tokenSource.cancel(); + this.openRequests.set(key, { + state: RequestStateKind.reschedule, + textDocument: currentRequestState.textDocument, + }); + } else if (currentRequestState.state === RequestStateKind.outDated) { + this.openRequests.set(key, { + state: RequestStateKind.reschedule, + textDocument: currentRequestState.textDocument, + }); + } + } + } + cleanupPull(textDocument) { + const key = textDocument.uri.toString(); + const request = this.openRequests.get(key); + if ( + this.options.workspaceDiagnostics || + this.options.interFileDependencies + ) { + if (request !== void 0) { + this.openRequests.set(key, { + state: RequestStateKind.reschedule, + textDocument, + }); + } else { + this.pull(textDocument); + } + } else { + if (request !== void 0) { + if (request.state === RequestStateKind.active) { + request.tokenSource.cancel(); + } + this.openRequests.set(key, { + state: RequestStateKind.outDated, + textDocument, + }); + } + this.diagnostics.delete(textDocument.uri); + } + } + pullWorkspace() { + this.pullWorkspaceAsync().then( + () => { + this.workspaceTimeout = (0, + vscode_languageserver_protocol_1.RAL)().timer.setTimeout(() => { + this.pullWorkspace(); + }, 2e3); + }, + (error) => { + if ( + !(error instanceof client_1.LSPCancellationError) && + !vscode_languageserver_protocol_1.Proposed.DiagnosticServerCancellationData.is( + error.data + ) + ) { + this.client.error( + `Workspace diagnostic pull failed.`, + error, + false + ); + this.workspaceErrorCounter++; + } + if (this.workspaceErrorCounter <= 5) { + this.workspaceTimeout = (0, + vscode_languageserver_protocol_1.RAL)().timer.setTimeout(() => { + this.pullWorkspace(); + }, 2e3); + } + } + ); + } + async pullWorkspaceAsync() { + if (!this.provider.provideWorkspaceDiagnostics) { + return; + } + if (this.workspaceCancellation !== void 0) { + this.workspaceCancellation.cancel(); + this.workspaceCancellation = void 0; + } + this.workspaceCancellation = new vscode_1.CancellationTokenSource(); + const previousResultIds = this.documentStates + .getAllResultIds() + .map((item) => { + return { + uri: this.client.protocol2CodeConverter.asUri(item.uri), + value: item.value, + }; + }); + await this.provider.provideWorkspaceDiagnostics( + previousResultIds, + this.workspaceCancellation.token, + (chunk) => { + if (!chunk || this.isDisposed) { + return; + } + for (const item of chunk.items) { + if (item.kind === vsdiag.DocumentDiagnosticReportKind.full) { + if ( + !this.documentStates.tracks( + PullState.document, + item.uri.toString() + ) + ) { + this.diagnostics.set(item.uri, item.items); + } + } + this.documentStates.update( + PullState.workspace, + item.uri.toString(), + item.version ?? void 0, + item.resultId + ); + } + } + ); + } + createProvider() { + const result = { + onDidChangeDiagnostics: this.onDidChangeDiagnosticsEmitter.event, + provideDiagnostics: (textDocument, previousResultId, token) => { + const provideDiagnostics = ( + textDocument2, + previousResultId2, + token2 + ) => { + const params = { + identifier: this.options.identifier, + textDocument: { + uri: this.client.code2ProtocolConverter.asUri( + textDocument2.uri + ), + }, + previousResultId: previousResultId2, + }; + return this.client + .sendRequest( + vscode_languageserver_protocol_1.Proposed + .DocumentDiagnosticRequest.type, + params, + token2 + ) + .then( + (result2) => { + if ( + result2 === void 0 || + result2 === null || + this.isDisposed + ) { + return { + kind: vsdiag.DocumentDiagnosticReportKind.full, + items: [], + }; + } + if ( + result2.kind === + vscode_languageserver_protocol_1.Proposed + .DocumentDiagnosticReportKind.full + ) { + return { + kind: vsdiag.DocumentDiagnosticReportKind.full, + resultId: result2.resultId, + items: this.client.protocol2CodeConverter.asDiagnostics( + result2.items + ), + }; + } else { + return { + kind: vsdiag.DocumentDiagnosticReportKind.unChanged, + resultId: result2.resultId, + }; + } + }, + (error) => { + return this.client.handleFailedRequest( + vscode_languageserver_protocol_1.Proposed + .DocumentDiagnosticRequest.type, + token2, + error, + { + kind: vsdiag.DocumentDiagnosticReportKind.full, + items: [], + } + ); + } + ); + }; + const middleware = this.client.clientOptions.middleware; + return middleware.provideDiagnostics + ? middleware.provideDiagnostics( + textDocument, + previousResultId, + token, + provideDiagnostics + ) + : provideDiagnostics(textDocument, previousResultId, token); + }, + }; + if (this.options.workspaceDiagnostics) { + result.provideWorkspaceDiagnostics = ( + resultIds, + token, + resultReporter + ) => { + const convertReport = (report) => { + if ( + report.kind === + vscode_languageserver_protocol_1.Proposed + .DocumentDiagnosticReportKind.full + ) { + return { + kind: vsdiag.DocumentDiagnosticReportKind.full, + uri: this.client.protocol2CodeConverter.asUri(report.uri), + resultId: report.resultId, + version: report.version, + items: this.client.protocol2CodeConverter.asDiagnostics( + report.items + ), + }; + } else { + return { + kind: vsdiag.DocumentDiagnosticReportKind.unChanged, + uri: this.client.protocol2CodeConverter.asUri(report.uri), + resultId: report.resultId, + version: report.version, + }; + } + }; + const convertPreviousResultIds = (resultIds2) => { + const converted = []; + for (const item of resultIds2) { + converted.push({ + uri: this.client.code2ProtocolConverter.asUri(item.uri), + value: item.value, + }); + } + return converted; + }; + const provideDiagnostics = (resultIds2, token2) => { + const partialResultToken = (0, uuid_1.generateUuid)(); + const disposable = this.client.onProgress( + vscode_languageserver_protocol_1.Proposed + .WorkspaceDiagnosticRequest.partialResult, + partialResultToken, + (partialResult) => { + if (partialResult === void 0 || partialResult === null) { + resultReporter(null); + return; + } + const converted = { + items: [], + }; + for (const item of partialResult.items) { + converted.items.push(convertReport(item)); + } + resultReporter(converted); + } + ); + const params = { + identifier: this.options.identifier, + previousResultIds: convertPreviousResultIds(resultIds2), + partialResultToken, + }; + return this.client + .sendRequest( + vscode_languageserver_protocol_1.Proposed + .WorkspaceDiagnosticRequest.type, + params, + token2 + ) + .then( + (result2) => { + const converted = { + items: [], + }; + for (const item of result2.items) { + converted.items.push(convertReport(item)); + } + disposable.dispose(); + resultReporter(converted); + return { items: [] }; + }, + (error) => { + disposable.dispose(); + return this.client.handleFailedRequest( + vscode_languageserver_protocol_1.Proposed + .DocumentDiagnosticRequest.type, + token2, + error, + { items: [] } + ); + } + ); + }; + const middleware = this.client.clientOptions.middleware; + return middleware.provideWorkspaceDiagnostics + ? middleware.provideWorkspaceDiagnostics( + resultIds, + token, + resultReporter, + provideDiagnostics + ) + : provideDiagnostics(resultIds, token, resultReporter); + }; + } + return result; + } + dispose() { + this.isDisposed = true; + this.workspaceCancellation?.cancel(); + this.workspaceTimeout?.dispose(); + for (const [key, request] of this.openRequests) { + if (request.state === RequestStateKind.active) { + request.tokenSource.cancel(); + } + this.openRequests.set(key, { + state: RequestStateKind.outDated, + textDocument: request.textDocument, + }); + } + } + }; + let BackgroundScheduler = class { + constructor(diagnosticRequestor) { + this.diagnosticRequestor = diagnosticRequestor; + this.documents = new vscode_languageserver_protocol_1.LinkedMap(); + } + add(textDocument) { + const key = textDocument.uri.toString(); + if (this.documents.has(key)) { + return; + } + this.documents.set( + textDocument.uri.toString(), + textDocument, + vscode_languageserver_protocol_1.Touch.Last + ); + this.trigger(); + } + remove(textDocument) { + const key = textDocument.uri.toString(); + if (this.documents.has(key)) { + this.documents.delete(key); + this.diagnosticRequestor.pull(textDocument); + } + if (this.documents.size === 0) { + this.stop(); + } else if (textDocument === this.endDocument) { + this.endDocument = this.documents.last; + } + } + trigger() { + if (this.intervalHandle !== void 0) { + this.endDocument = this.documents.last; + return; + } + this.endDocument = this.documents.last; + this.intervalHandle = (0, + vscode_languageserver_protocol_1.RAL)().timer.setInterval(() => { + const document2 = this.documents.first; + if (document2 !== void 0) { + this.diagnosticRequestor.pull(document2); + this.documents.set( + document2.uri.toString(), + document2, + vscode_languageserver_protocol_1.Touch.Last + ); + if (document2 === this.endDocument) { + this.stop(); + } + } + }, 200); + } + dispose() { + this.stop(); + this.documents.clear(); + } + stop() { + this.intervalHandle?.dispose(); + this.intervalHandle = void 0; + this.endDocument = void 0; + } + }; + let DiagnosticFeatureProviderImpl = class { + constructor(client, editorTracker, options) { + const diagnosticPullOptions = client.clientOptions + .diagnosticPullOptions ?? { onChange: true, onSave: false }; + const documentSelector = options.documentSelector; + const disposables = []; + const matches = (textDocument) => { + return ( + vscode_1.languages.match(documentSelector, textDocument) > 0 && + editorTracker.isVisible(textDocument) + ); + }; + this.diagnosticRequestor = new DiagnosticRequestor( + client, + editorTracker, + options + ); + this.backgroundScheduler = new BackgroundScheduler( + this.diagnosticRequestor + ); + const addToBackgroundIfNeeded = (textDocument) => { + if ( + !matches(textDocument) || + !options.interFileDependencies || + this.activeTextDocument === textDocument + ) { + return; + } + this.backgroundScheduler.add(textDocument); + }; + this.activeTextDocument = vscode_1.window.activeTextEditor?.document; + vscode_1.window.onDidChangeActiveTextEditor((editor) => { + const oldActive = this.activeTextDocument; + this.activeTextDocument = editor?.document; + if (oldActive !== void 0) { + addToBackgroundIfNeeded(oldActive); + } + if (this.activeTextDocument !== void 0) { + this.backgroundScheduler.remove(this.activeTextDocument); + } + }); + const openFeature = client.getFeature( + vscode_languageserver_protocol_1.DidOpenTextDocumentNotification + .method + ); + disposables.push( + openFeature.onNotificationSent((event) => { + const textDocument = event.original; + if (matches(textDocument)) { + this.diagnosticRequestor.pull(textDocument, () => { + addToBackgroundIfNeeded(textDocument); + }); + } + }) + ); + for (const textDocument of vscode_1.workspace.textDocuments) { + if (matches(textDocument)) { + this.diagnosticRequestor.pull(textDocument, () => { + addToBackgroundIfNeeded(textDocument); + }); + } + } + if (diagnosticPullOptions.onChange) { + const changeFeature = client.getFeature( + vscode_languageserver_protocol_1.DidChangeTextDocumentNotification + .method + ); + disposables.push( + changeFeature.onNotificationSent(async (event) => { + const textDocument = event.original.document; + if ( + (diagnosticPullOptions.filter === void 0 || + !diagnosticPullOptions.filter( + textDocument, + client_1.DiagnosticPullMode.onType + )) && + this.diagnosticRequestor.knows( + PullState.document, + textDocument + ) && + event.original.contentChanges.length > 0 + ) { + this.diagnosticRequestor.pull(textDocument, () => { + this.backgroundScheduler.trigger(); + }); + } + }) + ); + } + if (diagnosticPullOptions.onSave) { + const saveFeature = client.getFeature( + vscode_languageserver_protocol_1.DidSaveTextDocumentNotification + .method + ); + disposables.push( + saveFeature.onNotificationSent((event) => { + const textDocument = event.original; + if ( + (diagnosticPullOptions.filter === void 0 || + !diagnosticPullOptions.filter( + textDocument, + client_1.DiagnosticPullMode.onSave + )) && + this.diagnosticRequestor.knows(PullState.document, textDocument) + ) { + this.diagnosticRequestor.pull(event.original, () => { + this.backgroundScheduler.trigger(); + }); + } + }) + ); + } + const closeFeature = client.getFeature( + vscode_languageserver_protocol_1.DidCloseTextDocumentNotification + .method + ); + disposables.push( + closeFeature.onNotificationSent((event) => { + const textDocument = event.original; + this.diagnosticRequestor.cleanupPull(textDocument); + this.backgroundScheduler.remove(textDocument); + }) + ); + this.diagnosticRequestor.onDidChangeDiagnosticsEmitter.event(() => { + for (const textDocument of vscode_1.workspace.textDocuments) { + if (matches(textDocument)) { + this.diagnosticRequestor.pull(textDocument); + } + } + }); + if ( + options.workspaceDiagnostics === true && + options.identifier !== 'da348dc5-c30a-4515-9d98-31ff3be38d14' + ) { + this.diagnosticRequestor.pullWorkspace(); + } + this.disposable = vscode_1.Disposable.from( + ...disposables, + this.backgroundScheduler, + this.diagnosticRequestor + ); + } + get onDidChangeDiagnosticsEmitter() { + return this.diagnosticRequestor.onDidChangeDiagnosticsEmitter; + } + get diagnostics() { + return this.diagnosticRequestor.provider; + } + }; + let DiagnosticFeature = class extends client_1.TextDocumentFeature { + constructor(client) { + super( + client, + vscode_languageserver_protocol_1.Proposed.DocumentDiagnosticRequest + .type + ); + this.editorTracker = new EditorTracker(); + } + fillClientCapabilities(capabilities) { + let capability = ensure( + ensure(capabilities, 'textDocument'), + 'diagnostic' + ); + capability.dynamicRegistration = true; + capability.relatedDocumentSupport = false; + } + initialize(capabilities, documentSelector) { + const client = this._client; + client.onRequest( + vscode_languageserver_protocol_1.Proposed.DiagnosticRefreshRequest + .type, + async () => { + for (const provider of this.getAllProviders()) { + provider.onDidChangeDiagnosticsEmitter.fire(); + } + } + ); + let [id, options] = this.getRegistration( + documentSelector, + capabilities.diagnosticProvider + ); + if (!id || !options) { + return; + } + this.register({ id, registerOptions: options }); + } + dispose() { + this.editorTracker.dispose(); + super.dispose(); + } + registerLanguageProvider(options) { + const provider = new DiagnosticFeatureProviderImpl( + this._client, + this.editorTracker, + options + ); + return [provider.disposable, provider]; + } + }; + exports.DiagnosticFeature = DiagnosticFeature; + }, +}); + +// client/node_modules/vscode-languageclient/lib/common/proposed.typeHierarchy.js +let require_proposed_typeHierarchy2 = __commonJS({ + 'client/node_modules/vscode-languageclient/lib/common/proposed.typeHierarchy.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.TypeHierarchyFeature = void 0; + let vscode_1 = require('vscode'); + let vscode_languageserver_protocol_1 = require_main3(); + let client_1 = require_client(); + function ensure(target, key) { + if (target[key] === void 0) { + target[key] = {}; + } + return target[key]; + } + let TypeHierarchyProvider = class { + constructor(client) { + this.client = client; + this.middleware = client.clientOptions.middleware; + } + prepareTypeHierarchy(document2, position, token) { + const client = this.client; + const middleware = this.middleware; + const prepareTypeHierarchy = (document3, position2, token2) => { + const params = client.code2ProtocolConverter.asTextDocumentPositionParams( + document3, + position2 + ); + return client + .sendRequest( + vscode_languageserver_protocol_1.Proposed + .TypeHierarchyPrepareRequest.type, + params, + token2 + ) + .then( + (result) => { + return client.protocol2CodeConverter.asTypeHierarchyItems( + result + ); + }, + (error) => { + return client.handleFailedRequest( + vscode_languageserver_protocol_1.Proposed + .TypeHierarchyPrepareRequest.type, + token2, + error, + null + ); + } + ); + }; + return middleware.prepareTypeHierarchy + ? middleware.prepareTypeHierarchy( + document2, + position, + token, + prepareTypeHierarchy + ) + : prepareTypeHierarchy(document2, position, token); + } + provideTypeHierarchySupertypes(item, token) { + const client = this.client; + const middleware = this.middleware; + const provideTypeHierarchySupertypes = (item2, token2) => { + const params = { + item: client.code2ProtocolConverter.asTypeHierarchyItem(item2), + }; + return client + .sendRequest( + vscode_languageserver_protocol_1.Proposed + .TypeHierarchySupertypesRequest.type, + params, + token2 + ) + .then( + (result) => { + return client.protocol2CodeConverter.asTypeHierarchyItems( + result + ); + }, + (error) => { + return client.handleFailedRequest( + vscode_languageserver_protocol_1.Proposed + .TypeHierarchySupertypesRequest.type, + token2, + error, + null + ); + } + ); + }; + return middleware.provideTypeHierarchySupertypes + ? middleware.provideTypeHierarchySupertypes( + item, + token, + provideTypeHierarchySupertypes + ) + : provideTypeHierarchySupertypes(item, token); + } + provideTypeHierarchySubtypes(item, token) { + const client = this.client; + const middleware = this.middleware; + const provideTypeHierarchySubtypes = (item2, token2) => { + const params = { + item: client.code2ProtocolConverter.asTypeHierarchyItem(item2), + }; + return client + .sendRequest( + vscode_languageserver_protocol_1.Proposed + .TypeHierarchySubtypesRequest.type, + params, + token2 + ) + .then( + (result) => { + return client.protocol2CodeConverter.asTypeHierarchyItems( + result + ); + }, + (error) => { + return client.handleFailedRequest( + vscode_languageserver_protocol_1.Proposed + .TypeHierarchySubtypesRequest.type, + token2, + error, + null + ); + } + ); + }; + return middleware.provideTypeHierarchySubtypes + ? middleware.provideTypeHierarchySubtypes( + item, + token, + provideTypeHierarchySubtypes + ) + : provideTypeHierarchySubtypes(item, token); + } + }; + let TypeHierarchyFeature = class extends client_1.TextDocumentFeature { + constructor(client) { + super( + client, + vscode_languageserver_protocol_1.Proposed.TypeHierarchyPrepareRequest + .type + ); + } + fillClientCapabilities(cap) { + const capabilities = cap; + const capability = ensure( + ensure(capabilities, 'textDocument'), + 'typeHierarchy' + ); + capability.dynamicRegistration = true; + } + initialize(capabilities, documentSelector) { + const [id, options] = this.getRegistration( + documentSelector, + capabilities.typeHierarchyProvider + ); + if (!id || !options) { + return; + } + this.register({ id, registerOptions: options }); + } + registerLanguageProvider(options) { + const client = this._client; + const provider = new TypeHierarchyProvider(client); + return [ + vscode_1.languages.registerTypeHierarchyProvider( + options.documentSelector, + provider + ), + provider, + ]; + } + }; + exports.TypeHierarchyFeature = TypeHierarchyFeature; + }, +}); + +// client/node_modules/vscode-languageclient/lib/common/proposed.inlineValues.js +let require_proposed_inlineValues = __commonJS({ + 'client/node_modules/vscode-languageclient/lib/common/proposed.inlineValues.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.InlineValueFeature = void 0; + let vscode_1 = require('vscode'); + let vscode_languageserver_protocol_1 = require_main3(); + let client_1 = require_client(); + function ensure(target, key) { + if (target[key] === void 0) { + target[key] = Object.create(null); + } + return target[key]; + } + let InlineValueFeature = class extends client_1.TextDocumentFeature { + constructor(client) { + super( + client, + vscode_languageserver_protocol_1.Proposed.InlineValuesRequest.type + ); + } + fillClientCapabilities(capabilities) { + ensure( + ensure(capabilities, 'textDocument'), + 'inlineValues' + ).dynamicRegistration = true; + ensure( + ensure(capabilities, 'workspace'), + 'codeLens' + ).refreshSupport = true; + } + initialize(capabilities, documentSelector) { + this._client.onRequest( + vscode_languageserver_protocol_1.Proposed.InlineValuesRefreshRequest + .type, + async () => { + for (const provider of this.getAllProviders()) { + provider.onDidChangeInlineValues.fire(); + } + } + ); + const [id, options] = this.getRegistration( + documentSelector, + capabilities.inlineValuesProvider + ); + if (!id || !options) { + return; + } + this.register({ id, registerOptions: options }); + } + registerLanguageProvider(options) { + const eventEmitter = new vscode_1.EventEmitter(); + const provider = { + onDidChangeInlineValues: eventEmitter.event, + provideInlineValues: (document2, viewPort, context, token) => { + const client = this._client; + const provideInlineValues = ( + document3, + viewPort2, + context2, + token2 + ) => { + const requestParams = { + textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier( + document3 + ), + viewPort: client.code2ProtocolConverter.asRange(viewPort2), + context: client.code2ProtocolConverter.asInlineValuesContext( + context2 + ), + }; + return client + .sendRequest( + vscode_languageserver_protocol_1.Proposed.InlineValuesRequest + .type, + requestParams, + token2 + ) + .then( + (values) => + client.protocol2CodeConverter.asInlineValues(values), + (error) => { + return client.handleFailedRequest( + vscode_languageserver_protocol_1.Proposed + .InlineValuesRequest.type, + token2, + error, + null + ); + } + ); + }; + const middleware = client.clientOptions.middleware; + return middleware.provideInlineValues + ? middleware.provideInlineValues( + document2, + viewPort, + context, + token, + provideInlineValues + ) + : provideInlineValues(document2, viewPort, context, token); + }, + }; + return [ + vscode_1.languages.registerInlineValuesProvider( + options.documentSelector, + provider + ), + { provider, onDidChangeInlineValues: eventEmitter }, + ]; + } + }; + exports.InlineValueFeature = InlineValueFeature; + }, +}); + +// client/node_modules/vscode-languageclient/lib/common/commonClient.js +let require_commonClient = __commonJS({ + 'client/node_modules/vscode-languageclient/lib/common/commonClient.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.ProposedFeatures = exports.CommonLanguageClient = void 0; + let client_1 = require_client(); + let colorProvider_1 = require_colorProvider(); + let configuration_1 = require_configuration(); + let implementation_1 = require_implementation(); + let typeDefinition_1 = require_typeDefinition(); + let workspaceFolders_1 = require_workspaceFolders(); + let foldingRange_1 = require_foldingRange(); + let declaration_1 = require_declaration(); + let selectionRange_1 = require_selectionRange(); + let progress_1 = require_progress(); + let callHierarchy_1 = require_callHierarchy(); + let semanticTokens_1 = require_semanticTokens(); + let fileOperations_1 = require_fileOperations(); + let linkedEditingRange_1 = require_linkedEditingRange(); + let CommonLanguageClient = class extends client_1.BaseLanguageClient { + constructor(id, name, clientOptions) { + super(id, name, clientOptions); + } + registerProposedFeatures() { + this.registerFeatures(ProposedFeatures.createAll(this)); + } + registerBuiltinFeatures() { + super.registerBuiltinFeatures(); + this.registerFeature(new configuration_1.ConfigurationFeature(this)); + this.registerFeature(new typeDefinition_1.TypeDefinitionFeature(this)); + this.registerFeature(new implementation_1.ImplementationFeature(this)); + this.registerFeature(new colorProvider_1.ColorProviderFeature(this)); + if (this.clientOptions.workspaceFolder === void 0) { + this.registerFeature( + new workspaceFolders_1.WorkspaceFoldersFeature(this) + ); + } + this.registerFeature(new foldingRange_1.FoldingRangeFeature(this)); + this.registerFeature(new declaration_1.DeclarationFeature(this)); + this.registerFeature(new selectionRange_1.SelectionRangeFeature(this)); + this.registerFeature(new progress_1.ProgressFeature(this)); + this.registerFeature(new callHierarchy_1.CallHierarchyFeature(this)); + this.registerFeature(new semanticTokens_1.SemanticTokensFeature(this)); + this.registerFeature( + new linkedEditingRange_1.LinkedEditingFeature(this) + ); + this.registerFeature(new fileOperations_1.DidCreateFilesFeature(this)); + this.registerFeature(new fileOperations_1.DidRenameFilesFeature(this)); + this.registerFeature(new fileOperations_1.DidDeleteFilesFeature(this)); + this.registerFeature(new fileOperations_1.WillCreateFilesFeature(this)); + this.registerFeature(new fileOperations_1.WillRenameFilesFeature(this)); + this.registerFeature(new fileOperations_1.WillDeleteFilesFeature(this)); + } + }; + exports.CommonLanguageClient = CommonLanguageClient; + let pd = require_proposed_diagnostic2(); + let pt = require_proposed_typeHierarchy2(); + let iv = require_proposed_inlineValues(); + let ProposedFeatures; + (function (ProposedFeatures2) { + function createAll(_client) { + let result = [ + new pd.DiagnosticFeature(_client), + new pt.TypeHierarchyFeature(_client), + new iv.InlineValueFeature(_client), + ]; + return result; + } + ProposedFeatures2.createAll = createAll; + })( + (ProposedFeatures = + exports.ProposedFeatures || (exports.ProposedFeatures = {})) + ); + }, +}); + +// client/node_modules/vscode-languageclient/lib/common/api.js +let require_api3 = __commonJS({ + 'client/node_modules/vscode-languageclient/lib/common/api.js'(exports) { + 'use strict'; + let __createBinding = + (exports && exports.__createBinding) || + (Object.create + ? function (o, m, k, k2) { + if (k2 === void 0) { + k2 = k; + } + Object.defineProperty(o, k2, { + enumerable: true, + get: function () { + return m[k]; + }, + }); + } + : function (o, m, k, k2) { + if (k2 === void 0) { + k2 = k; + } + o[k2] = m[k]; + }); + let __exportStar = + (exports && exports.__exportStar) || + function (m, exports2) { + for (let p in m) { + if ( + p !== 'default' && + !Object.prototype.hasOwnProperty.call(exports2, p) + ) { + __createBinding(exports2, m, p); + } + } + }; + Object.defineProperty(exports, '__esModule', { value: true }); + __exportStar(require_main3(), exports); + __exportStar(require_client(), exports); + __exportStar(require_commonClient(), exports); + }, +}); + +// client/node_modules/vscode-languageserver-protocol/browser.js +let require_browser2 = __commonJS({ + 'client/node_modules/vscode-languageserver-protocol/browser.js'( + exports, + module2 + ) { + 'use strict'; + module2.exports = require_main3(); + }, +}); + +// client/node_modules/vscode-languageclient/lib/browser/main.js +let require_main4 = __commonJS({ + 'client/node_modules/vscode-languageclient/lib/browser/main.js'(exports) { + 'use strict'; + let __createBinding = + (exports && exports.__createBinding) || + (Object.create + ? function (o, m, k, k2) { + if (k2 === void 0) { + k2 = k; + } + Object.defineProperty(o, k2, { + enumerable: true, + get: function () { + return m[k]; + }, + }); + } + : function (o, m, k, k2) { + if (k2 === void 0) { + k2 = k; + } + o[k2] = m[k]; + }); + let __exportStar = + (exports && exports.__exportStar) || + function (m, exports2) { + for (let p in m) { + if ( + p !== 'default' && + !Object.prototype.hasOwnProperty.call(exports2, p) + ) { + __createBinding(exports2, m, p); + } + } + }; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.LanguageClient = void 0; + let api_1 = require_api3(); + let browser_1 = require_browser2(); + __exportStar(require_browser2(), exports); + __exportStar(require_api3(), exports); + let LanguageClient2 = class extends api_1.CommonLanguageClient { + constructor(id, name, clientOptions, worker) { + super(id, name, clientOptions); + this.worker = worker; + } + createMessageTransports(_encoding) { + const reader = new browser_1.BrowserMessageReader(this.worker); + const writer = new browser_1.BrowserMessageWriter(this.worker); + return Promise.resolve({ reader, writer }); + } + getLocale() { + return 'en'; + } + }; + exports.LanguageClient = LanguageClient2; + }, +}); + +// client/node_modules/vscode-languageclient/browser.js +let require_browser3 = __commonJS({ + 'client/node_modules/vscode-languageclient/browser.js'(exports, module2) { + 'use strict'; + module2.exports = require_main4(); + }, +}); + +// client/src/main.ts +__export(exports, { + activate: () => activate, +}); +let vscode2 = __toModule(require('vscode')); +let import_vscode_languageclient = __toModule(require_main4()); +let import_browser = __toModule(require_browser3()); + +// client/src/supportedLanguages.ts +let vscode = __toModule(require('vscode')); +let LanguageInfo = class { + constructor(languageId, wasmUri, suffixes) { + this.languageId = languageId; + this.wasmUri = wasmUri; + this.suffixes = suffixes; + } +}; +let SupportedLanguages = class { + constructor(context) { + this._overrideConfigurations = new Map([ + [ + 'python', + { + extension: 'ms-python.python', + config: { + completions: false, + definitions: true, + diagnostics: false, + folding: false, + highlights: false, + outline: false, + references: false, + workspaceSymbols: true, + }, + }, + ], + [ + 'typescript', + { + extension: 'vscode.typescript-language-features', + config: { + completions: false, + definitions: true, + diagnostics: false, + folding: false, + highlights: false, + outline: false, + references: false, + workspaceSymbols: true, + }, + }, + ], + ]); + this._onDidChange = new vscode.EventEmitter(); + this.onDidChange = this._onDidChange.event; + this._all = [ + new LanguageInfo( + 'c', + vscode.Uri.joinPath( + context.extensionUri, + './server/tree-sitter-c.wasm' + ).toString(), + ['c', 'i'] + ), + new LanguageInfo( + 'cpp', + vscode.Uri.joinPath( + context.extensionUri, + './server/tree-sitter-cpp.wasm' + ).toString(), + [ + 'cpp', + 'cc', + 'cxx', + 'c++', + 'hpp', + 'hh', + 'hxx', + 'h++', + 'h', + 'ii', + 'ino', + 'inl', + 'ipp', + 'ixx', + 'hpp.in', + 'h.in', + ] + ), + new LanguageInfo( + 'csharp', + vscode.Uri.joinPath( + context.extensionUri, + './server/tree-sitter-c_sharp.wasm' + ).toString(), + ['cs'] + ), + new LanguageInfo( + 'go', + vscode.Uri.joinPath( + context.extensionUri, + './server/tree-sitter-go.wasm' + ).toString(), + ['go'] + ), + new LanguageInfo( + 'java', + vscode.Uri.joinPath( + context.extensionUri, + './server/tree-sitter-java.wasm' + ).toString(), + ['java'] + ), + new LanguageInfo( + 'php', + vscode.Uri.joinPath( + context.extensionUri, + './server/tree-sitter-php.wasm' + ).toString(), + ['php', 'php4', 'php5', 'phtml', 'ctp'] + ), + new LanguageInfo( + 'python', + vscode.Uri.joinPath( + context.extensionUri, + './server/tree-sitter-python.wasm' + ).toString(), + ['py', 'rpy', 'pyw', 'cpy', 'gyp', 'gypi', 'pyi', 'ipy'] + ), + new LanguageInfo( + 'rust', + vscode.Uri.joinPath( + context.extensionUri, + './server/tree-sitter-rust.wasm' + ).toString(), + ['rs'] + ), + new LanguageInfo( + 'typescript', + vscode.Uri.joinPath( + context.extensionUri, + './server/tree-sitter-typescript.wasm' + ).toString(), + ['ts', 'tsx', 'js', 'jsx'] + ), + ]; + this._disposable = vscode.Disposable.from( + vscode.extensions.onDidChange(this._reset, this), + vscode.workspace.onDidChangeConfiguration((e) => { + if (e.affectsConfiguration('anycode.language')) { + this._reset(); + } + }) + ); + } + dispose() { + this._onDidChange.dispose(); + this._disposable.dispose(); + } + _reset() { + this._tuples = void 0; + this._onDidChange.fire(this); + } + getSupportedLanguages() { + if (!this._tuples) { + this._tuples = new Map(); + for (let info of this._all) { + const config = vscode.workspace.getConfiguration('anycode', { + languageId: info.languageId, + }); + let overrideConfig; + const overrideInfo = this._overrideConfigurations.get(info.languageId); + if ( + overrideInfo && + vscode.extensions.getExtension(overrideInfo.extension) + ) { + overrideConfig = overrideInfo.config; + } + const featureConfig = { + ...config.get(`language.features`), + ...overrideConfig, + }; + const empty = Object.keys(featureConfig).every( + (key) => !featureConfig[key] + ); + if (empty) { + continue; + } + this._tuples.set(info, featureConfig); + } + } + return this._tuples; + } + getSupportedLanguagesAsSelector() { + return Array.from(this.getSupportedLanguages().keys()).map( + (info) => info.languageId + ); + } +}; + +// client/node_modules/vscode-extension-telemetry/lib/telemetryReporter.web.min.js +let ue = __toModule(require('vscode')); +let import_vscode = __toModule(require('vscode')); +let po = Object.defineProperty; +let vu = (t) => po(t, '__esModule', { value: true }); +let C = (t, e) => () => (t && (e = t((t = 0))), e); +let hu = (t, e) => { + vu(t); + for (let r in e) { + po(t, r, { get: e[r], enumerable: true }); + } +}; +let go; +let vo = C(() => { + go = { + Unknown: 0, + NonRetryableStatus: 1, + InvalidEvent: 2, + SizeLimitExceeded: 3, + KillSwitch: 4, + QueueFull: 5, + }; +}); +let mt; +let Xe; +let Oe; +let Ie; +let zr; +let gt; +let Sr; +let Cr; +let Ln; +let Un; +let rr; +let _n = C(() => { + (mt = 'function'), + (Xe = 'object'), + (Oe = 'undefined'), + (Ie = 'prototype'), + (zr = 'hasOwnProperty'), + (gt = Object), + (Sr = gt[Ie]), + (Cr = gt.assign), + (Ln = gt.create), + (Un = gt.defineProperty), + (rr = Sr[zr]); +}); +function ot() { + return typeof globalThis !== Oe && globalThis + ? globalThis + : typeof self !== Oe && self + ? self + : typeof window !== Oe && window + ? window + : typeof global !== Oe && global + ? global + : null; +} +function Ir(t) { + throw new TypeError(t); +} +function Dt(t) { + let e = Ln; + if (e) { + return e(t); + } + if (t == null) { + return {}; + } + let r = typeof t; + r !== Xe && r !== mt && Ir('Object prototype may only be an Object:' + t); + function n() {} + return (n[Ie] = t), new n(); +} +let Di = C(() => { + _n(); +}); +function H(t, e) { + typeof e !== mt && + e !== null && + Ir('Class extends value ' + String(e) + ' is not a constructor or null'), + Ai(t, e); + function r() { + this.constructor = t; + } + t[Ie] = e === null ? Dt(e) : ((r[Ie] = e[Ie]), new r()); +} +let Rl; +let Ml; +let Su; +let yt; +let Ai; +let ho = C(() => { + _n(); + Di(); + (Rl = (ot() || {}).Symbol), + (Ml = (ot() || {}).Reflect), + (Su = function (t) { + for (var e, r = 1, n = arguments.length; r < n; r++) { + e = arguments[r]; + for (let i in e) { + Sr[zr].call(e, i) && (t[i] = e[i]); + } + } + return t; + }), + (yt = Cr || Su), + (Ai = function (t, e) { + return ( + (Ai = + gt.setPrototypeOf || + ({ __proto__: [] } instanceof Array && + function (r, n) { + r.__proto__ = n; + }) || + function (r, n) { + for (let i in n) { + n[zr](i) && (r[i] = n[i]); + } + }), + Ai(t, e) + ); + }); +}); +let xo = C(() => {}); +let ne = C(() => { + _n(); + Di(); + ho(); + xo(); +}); +function jt(t, e) { + return t && zn[At].hasOwnProperty.call(t, e); +} +function To(t) { + return t && (t === zn[At] || t === Array[At]); +} +function Ri(t) { + return To(t) || t === Function[At]; +} +function nr(t) { + if (t) { + if (Vr) { + return Vr(t); + } + let e = t[Iu] || t[At] || (t[On] ? t[On][At] : null); + if (e) { + return e; + } + } + return null; +} +function Bn(t, e) { + let r = [], + n = zn.getOwnPropertyNames; + if (n) { + r = n(t); + } else { + for (let i in t) { + typeof i === 'string' && jt(t, i) && r.push(i); + } + } + if (r && r.length > 0) { + for (let a = 0; a < r.length; a++) { + e(r[a]); + } + } +} +function Mi(t, e, r) { + return e !== On && typeof t[e] === Hn && (r || jt(t, e)); +} +function Vn(t) { + throw new TypeError('DynamicProto: ' + t); +} +function Tu(t) { + let e = {}; + return ( + Bn(t, function (r) { + !e[r] && Mi(t, r, false) && (e[r] = t[r]); + }), + e + ); +} +function Li(t, e) { + for (let r = t.length - 1; r >= 0; r--) { + if (t[r] === e) { + return true; + } + } + return false; +} +function Eu(t, e, r, n) { + function i(s, u, l) { + let f = u[l]; + if (f[Ni] && n) { + let m = s[jn] || {}; + m[Br] !== false && (f = (m[u[Tr]] || {})[l] || f); + } + return function () { + return f.apply(s, arguments); + }; + } + let a = {}; + Bn(r, function (s) { + a[s] = i(e, r, s); + }); + for (var o = nr(t), c = []; o && !Ri(o) && !Li(c, o); ) { + Bn(o, function (s) { + !a[s] && Mi(o, s, !Vr) && (a[s] = i(e, o, s)); + }), + c.push(o), + (o = nr(o)); + } + return a; +} +function wu(t, e, r, n) { + let i = null; + if (t && jt(r, Tr)) { + let a = t[jn] || {}; + if ( + ((i = (a[r[Tr]] || {})[e]), + i || Vn('Missing [' + e + '] ' + Hn), + !i[Fi] && a[Br] !== false) + ) { + for ( + var o = !jt(t, e), c = nr(t), s = []; + o && c && !Ri(c) && !Li(s, c); + + ) { + let u = c[e]; + if (u) { + o = u === n; + break; + } + s.push(c), (c = nr(c)); + } + try { + o && (t[e] = i), (i[Fi] = 1); + } catch (l) { + a[Br] = false; + } + } + } + return i; +} +function Pu(t, e, r) { + let n = e[t]; + return ( + n === r && (n = nr(e)[t]), + typeof n !== Hn && Vn('[' + t + '] is not a ' + Hn), + n + ); +} +function bu(t, e, r, n, i) { + function a(s, u) { + var l = function () { + let f = wu(this, u, s, l) || Pu(u, s, l); + return f.apply(this, arguments); + }; + return (l[Ni] = 1), l; + } + if (!To(t)) { + let o = (r[jn] = r[jn] || {}), + c = (o[e] = o[e] || {}); + o[Br] !== false && (o[Br] = !!i), + Bn(r, function (s) { + Mi(r, s, false) && + r[s] !== n[s] && + ((c[s] = r[s]), + delete r[s], + (!jt(t, s) || (t[s] && !t[s][Ni])) && (t[s] = a(t, s))); + }); + } +} +function Du(t, e) { + if (Vr) { + for (let r = [], n = nr(e); n && !Ri(n) && !Li(r, n); ) { + if (n === t) { + return true; + } + r.push(n), (n = nr(n)); + } + } + return false; +} +function Ui(t, e) { + return jt(t, At) ? t.name || e || So : ((t || {})[On] || {}).name || e || So; +} +function _i(t, e, r, n) { + jt(t, At) || Vn('theClass is an invalid class definition.'); + let i = t[At]; + Du(i, e) || + Vn('[' + Ui(t) + '] is not in class hierarchy of [' + Ui(e) + ']'); + let a = null; + jt(i, Tr) + ? (a = i[Tr]) + : ((a = Cu + Ui(t, '_') + '$' + Io), Io++, (i[Tr] = a)); + let o = _i[yo], + c = !!o[ki]; + c && n && n[ki] !== void 0 && (c = !!n[ki]); + let s = Tu(e), + u = Eu(i, e, s, c); + r(e, u); + let l = !!Vr && !!o[Co]; + l && n && (l = !!n[Co]), bu(i, a, e, s, l !== false); +} +let On; +let At; +let Hn; +let jn; +let Ni; +let Tr; +let Cu; +let Fi; +let Br; +let yo; +let So; +let Iu; +let ki; +let Co; +let zn; +let Vr; +let Io; +let Au; +let W; +let Te = C(() => { + (On = 'constructor'), + (At = 'prototype'), + (Hn = 'function'), + (jn = '_dynInstFuncs'), + (Ni = '_isDynProxy'), + (Tr = '_dynClass'), + (Cu = '_dynCls$'), + (Fi = '_dynInstChk'), + (Br = Fi), + (yo = '_dfOpts'), + (So = '_unknown_'), + (Iu = '__proto__'), + (ki = 'useBaseInst'), + (Co = 'setInstFuncs'), + (zn = Object), + (Vr = zn.getPrototypeOf), + (Io = 0); + Au = { setInstFuncs: true, useBaseInst: true }; + _i[yo] = Au; + W = _i; +}); +let S; +let h; +let qr = C(() => { + (function (t) { + (t[(t.CRITICAL = 1)] = 'CRITICAL'), (t[(t.WARNING = 2)] = 'WARNING'); + })(S || (S = {})); + h = { + BrowserDoesNotSupportLocalStorage: 0, + BrowserCannotReadLocalStorage: 1, + BrowserCannotReadSessionStorage: 2, + BrowserCannotWriteLocalStorage: 3, + BrowserCannotWriteSessionStorage: 4, + BrowserFailedRemovalFromLocalStorage: 5, + BrowserFailedRemovalFromSessionStorage: 6, + CannotSendEmptyTelemetry: 7, + ClientPerformanceMathError: 8, + ErrorParsingAISessionCookie: 9, + ErrorPVCalc: 10, + ExceptionWhileLoggingError: 11, + FailedAddingTelemetryToBuffer: 12, + FailedMonitorAjaxAbort: 13, + FailedMonitorAjaxDur: 14, + FailedMonitorAjaxOpen: 15, + FailedMonitorAjaxRSC: 16, + FailedMonitorAjaxSend: 17, + FailedMonitorAjaxGetCorrelationHeader: 18, + FailedToAddHandlerForOnBeforeUnload: 19, + FailedToSendQueuedTelemetry: 20, + FailedToReportDataLoss: 21, + FlushFailed: 22, + MessageLimitPerPVExceeded: 23, + MissingRequiredFieldSpecification: 24, + NavigationTimingNotSupported: 25, + OnError: 26, + SessionRenewalDateIsZero: 27, + SenderNotInitialized: 28, + StartTrackEventFailed: 29, + StopTrackEventFailed: 30, + StartTrackFailed: 31, + StopTrackFailed: 32, + TelemetrySampledAndNotSent: 33, + TrackEventFailed: 34, + TrackExceptionFailed: 35, + TrackMetricFailed: 36, + TrackPVFailed: 37, + TrackPVFailedCalc: 38, + TrackTraceFailed: 39, + TransmissionFailed: 40, + FailedToSetStorageBuffer: 41, + FailedToRestoreStorageBuffer: 42, + InvalidBackendResponse: 43, + FailedToFixDepricatedValues: 44, + InvalidDurationValue: 45, + TelemetryEnvelopeInvalid: 46, + CreateEnvelopeError: 47, + CannotSerializeObject: 48, + CannotSerializeObjectNonSerializable: 49, + CircularReferenceDetected: 50, + ClearAuthContextFailed: 51, + ExceptionTruncated: 52, + IllegalCharsInName: 53, + ItemNotInArray: 54, + MaxAjaxPerPVExceeded: 55, + MessageTruncated: 56, + NameTooLong: 57, + SampleRateOutOfRange: 58, + SetAuthContextFailed: 59, + SetAuthContextFailedAccountName: 60, + StringValueTooLong: 61, + StartCalledMoreThanOnce: 62, + StopCalledWithoutStart: 63, + TelemetryInitializerFailed: 64, + TrackArgumentsNotSpecified: 65, + UrlTooLong: 66, + SessionStorageBufferFull: 67, + CannotAccessCookie: 68, + IdTooLong: 69, + InvalidEvent: 70, + FailedMonitorAjaxSetRequestHeader: 71, + SendBrowserInfoOnUserInit: 72, + PluginException: 73, + NotificationException: 74, + SnippetScriptLoadFailure: 99, + InvalidInstrumentationKey: 100, + CannotParseAiBlobValue: 101, + InvalidContentBlob: 102, + TrackPageActionEventFailed: 103, + }; +}); +function Oi(t) { + return Sr.toString.call(t); +} +function Hi(t, e) { + return typeof t === e; +} +function pe(t) { + return t === void 0 || typeof t === Oe; +} +function x(t) { + return t === null || pe(t); +} +function ji(t) { + return !x(t); +} +function Er(t, e) { + return t && rr.call(t, e); +} +function st(t) { + return typeof t === Xe; +} +function j(t) { + return typeof t === mt; +} +function zt(t, e, r, n) { + n === void 0 && (n = false); + let i = false; + if (!x(t)) { + try { + x(t[Po]) + ? x(t[wo]) || (t[wo](Eo + e, r), (i = true)) + : (t[Po](e, r, n), (i = true)); + } catch (a) {} + } + return i; +} +function qn(t, e, r, n) { + if ((n === void 0 && (n = false), !x(t))) { + try { + x(t[Do]) ? x(t[bo]) || t[bo](Eo + e, r) : t[Do](e, r, n); + } catch (i) {} + } +} +function zi(t) { + let e = t, + r = /([^\w\d_$])/g; + return r.test(t) && (e = t.replace(r, '_')), e; +} +function Q(t, e) { + if (t) { + for (let r in t) { + rr.call(t, r) && e.call(t, r, t[r]); + } + } +} +function Bi(t, e) { + if (t && e) { + let r = e.length, + n = t.length; + if (t === e) { + return true; + } + if (n >= r) { + for (let i = n - 1, a = r - 1; a >= 0; a--) { + if (t[i] != e[a]) { + return false; + } + i--; + } + return true; + } + } + return false; +} +function Ee(t, e) { + return t && e ? t.indexOf(e) !== -1 : false; +} +function wr(t) { + return Oi(t) === '[object Date]'; +} +function Re(t) { + return Oi(t) === '[object Array]'; +} +function Bt(t) { + return Oi(t) === '[object Error]'; +} +function _(t) { + return typeof t === 'string'; +} +function ir(t) { + return typeof t === 'number'; +} +function Gr(t) { + return typeof t === 'boolean'; +} +function Me(t) { + if (wr(t)) { + let e = function (r) { + let n = String(r); + return n.length === 1 && (n = '0' + n), n; + }; + return ( + t.getUTCFullYear() + + '-' + + e(t.getUTCMonth() + 1) + + '-' + + e(t.getUTCDate()) + + 'T' + + e(t.getUTCHours()) + + ':' + + e(t.getUTCMinutes()) + + ':' + + e(t.getUTCSeconds()) + + '.' + + String((t.getUTCMilliseconds() / 1e3).toFixed(3)).slice(2, 5) + + 'Z' + ); + } +} +function R(t, e, r) { + for ( + let n = t.length, i = 0; + i < n && !(i in t && e.call(r || t, t[i], i, t) === -1); + i++ + ) {} +} +function Nt(t, e, r) { + for ( + let n = t.length, i = r || 0, a = Math.max(i >= 0 ? i : n - Math.abs(i), 0); + a < n; + a++ + ) { + if (a in t && t[a] === e) { + return a; + } + } + return -1; +} +function Vt(t, e, r) { + for (var n = t.length, i = r || t, a = new Array(n), o = 0; o < n; o++) { + o in t && (a[o] = e.call(i, t[o], t)); + } + return a; +} +function Kr(t, e, r) { + let n = t.length, + i = 0, + a; + if (arguments.length >= 3) { + a = arguments[2]; + } else { + for (; i < n && !(i in t); ) { + i++; + } + a = t[i++]; + } + for (; i < n; ) { + i in t && (a = e(a, t[i], i, t)), i++; + } + return a; +} +function oe(t) { + return typeof t !== 'string' ? t : t.replace(/^\s+|\s+$/g, ''); +} +function Qe(t) { + let e = typeof t; + e !== mt && (e !== Xe || t === null) && Ir('objKeys called on non-object'); + let r = []; + for (let n in t) { + t && rr.call(t, n) && r.push(n); + } + if (Nu) { + for (let i = Vi.length, a = 0; a < i; a++) { + t && rr.call(t, Vi[a]) && r.push(Vi[a]); + } + } + return r; +} +function St(t, e, r, n) { + if (Ao) { + try { + let i = { enumerable: true, configurable: true }; + return r && (i.get = r), n && (i.set = n), Ao(t, e, i), true; + } catch (a) {} + } + return false; +} +function de() { + let t = Date; + return t.now ? t.now() : new t().getTime(); +} +function G(t) { + return Bt(t) ? t.name : ''; +} +function K(t, e, r, n, i) { + let a = r; + return ( + t && + ((a = t[e]), + a !== r && (!i || i(a)) && (!n || n(r)) && ((a = r), (t[e] = a))), + a + ); +} +function ge(t, e, r) { + let n; + return ( + t + ? ((n = t[e]), !n && x(n) && ((n = pe(r) ? {} : r), (t[e] = n))) + : (n = pe(r) ? {} : r), + n + ); +} +function Gn(t) { + return !t; +} +function Pr(t) { + return !!t; +} +function Ae(t) { + throw new Error(t); +} +function Wr(t, e, r) { + if (t && e && t !== e && st(t) && st(e)) { + let n = function (a) { + if (_(a)) { + let o = e[a]; + j(o) + ? (!r || r(a, true, e, t)) && + (t[a] = (function (c) { + return function () { + let s = arguments; + return e[c].apply(e, s); + }; + })(a)) + : (!r || r(a, false, e, t)) && + (Er(t, a) && delete t[a], + St( + t, + a, + function () { + return e[a]; + }, + function (c) { + e[a] = c; + } + ) || (t[a] = o)); + } + }; + for (let i in e) { + n(i); + } + } + return t; +} +function qi(t) { + return (function () { + function e() { + let r = this; + t && + Q(t, function (n, i) { + r[n] = i; + }); + } + return e; + })(); +} +function Kn(t) { + return t && (t = gt(Cr ? Cr({}, t) : t)), t; +} +let Eo; +let wo; +let Po; +let bo; +let Do; +let Ao; +let of; +let sf; +let Nu; +let Vi; +let Le = C(() => { + ne(); + (Eo = 'on'), + (wo = 'attachEvent'), + (Po = 'addEventListener'), + (bo = 'detachEvent'), + (Do = 'removeEventListener'), + (Ao = Un), + (of = gt.freeze), + (sf = gt.seal); + (Nu = !{ toString: null }.propertyIsEnumerable('toString')), + (Vi = [ + 'toString', + 'toLocaleString', + 'valueOf', + 'hasOwnProperty', + 'isPrototypeOf', + 'propertyIsEnumerable', + 'constructor', + ]); +}); +function we(t) { + let e = ot(); + return e && e[t] ? e[t] : t === No && ar() ? window : null; +} +function ar() { + return Boolean(typeof window === Xe && window); +} +function Ct() { + return ar() ? window : we(No); +} +function Wn() { + return Boolean(typeof document === Xe && document); +} +function Ne() { + return Wn() ? document : we(Fu); +} +function ko() { + return Boolean(typeof navigator === Xe && navigator); +} +function Ue() { + return ko() ? navigator : we(ku); +} +function Ro() { + return Boolean(typeof history === Xe && history); +} +function Xi() { + return Ro() ? history : we(Ru); +} +function et(t) { + if (t && ju) { + let e = we('__mockLocation'); + if (e) { + return e; + } + } + return typeof location === Xe && location ? location : we(Mu); +} +function Yi() { + return typeof console !== Oe ? console : we(Lu); +} +function Ye() { + return we(Uu); +} +function vt() { + return Boolean((typeof JSON === Xe && JSON) || we(Fo) !== null); +} +function Pe() { + return vt() ? JSON || we(Fo) : null; +} +function $i() { + return we(_u); +} +function Zi() { + return we(Ou); +} +function Qi() { + let t = Ue(); + return t && t.product ? t.product === Hu : false; +} +function qt() { + let t = Ue(); + if (t && (t.userAgent !== Ji || Wi === null)) { + Ji = t.userAgent; + let e = (Ji || '').toLowerCase(); + Wi = Ee(e, Gi) || Ee(e, Ki); + } + return Wi; +} +function or(t) { + if ((t === void 0 && (t = null), !t)) { + let e = Ue() || {}; + t = e ? (e.userAgent || '').toLowerCase() : ''; + } + let r = (t || '').toLowerCase(); + if (Ee(r, Gi)) { + return parseInt(r.split(Gi)[1]); + } + if (Ee(r, Ki)) { + let n = parseInt(r.split(Ki)[1]); + if (n) { + return n + 4; + } + } + return null; +} +function O(t) { + let e = Object[Ie].toString.call(t), + r = ''; + return ( + e === '[object Error]' + ? (r = + "{ stack: '" + + t.stack + + "', message: '" + + t.message + + "', name: '" + + t.name + + "'") + : vt() && (r = Pe().stringify(t)), + e + r + ); +} +let No; +let Fu; +let ku; +let Ru; +let Mu; +let Lu; +let Uu; +let Fo; +let _u; +let Ou; +let Hu; +let Gi; +let Ki; +let Wi; +let Ji; +let ju; +let br = C(() => { + ne(); + Le(); + ('use strict'); + (No = 'window'), + (Fu = 'document'), + (ku = 'navigator'), + (Ru = 'history'), + (Mu = 'location'), + (Lu = 'console'), + (Uu = 'performance'), + (Fo = 'JSON'), + (_u = 'crypto'), + (Ou = 'msCrypto'), + (Hu = 'ReactNative'), + (Gi = 'msie'), + (Ki = 'trident/'), + (Wi = null), + (Ji = null), + (ju = false); +}); +function Mo(t) { + return t ? '"' + t.replace(/\"/g, '') + '"' : ''; +} +function kt(t, e) { + return (t || {}).logger || new Jn(e); +} +let zu; +let Bu; +let Vu; +let Ft; +let Jn; +let Xn = C(() => { + qr(); + br(); + Te(); + Le(); + ('use strict'); + (zu = 'AI (Internal): '), (Bu = 'AI: '), (Vu = 'AITR_'); + Ft = (function () { + function t(e, r, n, i) { + n === void 0 && (n = false); + let a = this; + (a.messageId = e), (a.message = (n ? Bu : zu) + e); + let o = ''; + vt() && (o = Pe().stringify(i)); + let c = (r ? ' message:' + Mo(r) : '') + (i ? ' props:' + Mo(o) : ''); + a.message += c; + } + return (t.dataType = 'MessageData'), t; + })(); + Jn = (function () { + function t(e) { + (this.identifier = 'DiagnosticLogger'), (this.queue = []); + let r = 0, + n = {}; + W(t, this, function (i) { + x(e) && (e = {}), + (i.consoleLoggingLevel = function () { + return a('loggingLevelConsole', 0); + }), + (i.telemetryLoggingLevel = function () { + return a('loggingLevelTelemetry', 1); + }), + (i.maxInternalMessageLimit = function () { + return a('maxMessageLimit', 25); + }), + (i.enableDebugExceptions = function () { + return a('enableDebugExceptions', false); + }), + (i.throwInternal = function (c, s, u, l, f) { + f === void 0 && (f = false); + let m = new Ft(s, u, f, l); + if (i.enableDebugExceptions()) { + throw m; + } + if (!pe(m.message)) { + let I = i.consoleLoggingLevel(); + if (f) { + let E = +m.messageId; + !n[E] && + I >= S.WARNING && + (i.warnToConsole(m.message), (n[E] = true)); + } else { + I >= S.WARNING && i.warnToConsole(m.message); + } + i.logInternalMessage(c, m); + } + }), + (i.warnToConsole = function (c) { + let s = Yi(); + if (s) { + let u = 'log'; + s.warn && (u = 'warn'), j(s[u]) && s[u](c); + } + }), + (i.resetInternalMessageCount = function () { + (r = 0), (n = {}); + }), + (i.logInternalMessage = function (c, s) { + if (!o()) { + let u = true, + l = Vu + s.messageId; + if ( + (n[l] ? (u = false) : (n[l] = true), + u && + (c <= i.telemetryLoggingLevel() && (i.queue.push(s), r++), + r === i.maxInternalMessageLimit())) + ) { + let f = + 'Internal events throttle limit per PageView reached for this app.', + m = new Ft(h.MessageLimitPerPVExceeded, f, false); + i.queue.push(m), i.warnToConsole(f); + } + } + }); + function a(c, s) { + let u = e[c]; + return x(u) ? s : u; + } + function o() { + return r >= i.maxInternalMessageLimit(); + } + }); + } + return t; + })(); +}); +function ct(t, e, r, n, i) { + if (t) { + let a = t; + if ((j(a.getPerfMgr) && (a = a.getPerfMgr()), a)) { + let o = void 0, + c = a.getCtx(ea); + try { + if (((o = a.create(e(), n, i)), o)) { + if ( + c && + o.setCtx && + (o.setCtx(sr.ParentContextKey, c), c.getCtx && c.setCtx) + ) { + let s = c.getCtx(sr.ChildrenContextKey); + s || ((s = []), c.setCtx(sr.ChildrenContextKey, s)), s.push(o); + } + return a.setCtx(ea, o), r(o); + } + } catch (u) { + o && o.setCtx && o.setCtx('exception', u); + } finally { + o && a.fire(o), a.setCtx(ea, c); + } + } + } + return r(); +} +let Dr; +let sr; +let Jr; +let ea; +let Xr = C(() => { + Te(); + Le(); + (Dr = 'ctx'), + (sr = (function () { + function t(e, r, n) { + let i = this, + a = false; + if ( + ((i.start = de()), + (i.name = e), + (i.isAsync = n), + (i.isChildEvt = function () { + return false; + }), + j(r)) + ) { + let o; + a = St(i, 'payload', function () { + return !o && j(r) && ((o = r()), (r = null)), o; + }); + } + (i.getCtx = function (c) { + return c + ? c === t.ParentContextKey || c === t.ChildrenContextKey + ? i[c] + : (i[Dr] || {})[c] + : null; + }), + (i.setCtx = function (c, s) { + if (c) { + if (c === t.ParentContextKey) { + i[c] || + (i.isChildEvt = function () { + return true; + }), + (i[c] = s); + } else if (c === t.ChildrenContextKey) { + i[c] = s; + } else { + let u = (i[Dr] = i[Dr] || {}); + u[c] = s; + } + } + }), + (i.complete = function () { + let c = 0, + s = i.getCtx(t.ChildrenContextKey); + if (Re(s)) { + for (let u = 0; u < s.length; u++) { + let l = s[u]; + l && (c += l.time); + } + } + (i.time = de() - i.start), + (i.exTime = i.time - c), + (i.complete = function () {}), + !a && j(r) && (i.payload = r()); + }); + } + return ( + (t.ParentContextKey = 'parent'), (t.ChildrenContextKey = 'childEvts'), t + ); + })()), + (Jr = (function () { + function t(e) { + (this.ctx = {}), + W(t, this, function (r) { + (r.create = function (n, i, a) { + return new sr(n, i, a); + }), + (r.fire = function (n) { + n && (n.complete(), e && e.perfEvent(n)); + }), + (r.setCtx = function (n, i) { + if (n) { + let a = (r[Dr] = r[Dr] || {}); + a[n] = i; + } + }), + (r.getCtx = function (n) { + return (r[Dr] || {})[n]; + }); + }); + } + return t; + })()), + (ea = 'CoreUtils.doPerf'); +}); +let Lo; +let Uo = C(() => { + Xr(); + qr(); + Le(); + ('use strict'); + Lo = (function () { + function t(e, r) { + let n = this, + i = null, + a = j(e.processTelemetry), + o = j(e.setNextPlugin); + (n._hasRun = false), + (n.getPlugin = function () { + return e; + }), + (n.getNext = function () { + return i; + }), + (n.setNext = function (c) { + i = c; + }), + (n.processTelemetry = function (c, s) { + s || (s = r); + let u = e ? e.identifier : 'TelemetryPluginChain'; + ct( + s ? s.core() : null, + function () { + return u + ':processTelemetry'; + }, + function () { + if (e && a) { + n._hasRun = true; + try { + s.setNext(i), + o && e.setNextPlugin(i), + i && (i._hasRun = false), + e.processTelemetry(c, s); + } catch (f) { + let l = i && i._hasRun; + (!i || !l) && + s + .diagLog() + .throwInternal( + S.CRITICAL, + h.PluginException, + 'Plugin [' + + e.identifier + + '] failed during processTelemetry - ' + + f + ), + i && !l && i.processTelemetry(c, s); + } + } else { + i && ((n._hasRun = true), i.processTelemetry(c, s)); + } + }, + function () { + return { item: c }; + }, + !c.sync + ); + }); + } + return t; + })(); +}); +function ta(t, e) { + let r = []; + if (t && t.length > 0) { + for (let n = null, i = 0; i < t.length; i++) { + let a = t[i]; + if (a && j(a.processTelemetry)) { + let o = new Lo(a, e); + r.push(o), n && n.setNext(o), (n = o); + } + } + } + return r.length > 0 ? r[0] : null; +} +function qu(t, e, r) { + let n = [], + i = !r; + if (t) { + for (; t; ) { + let a = t.getPlugin(); + (i || a === r) && ((i = true), n.push(a)), (t = t.getNext()); + } + } + return i || n.push(r), ta(n, e); +} +function Gu(t, e, r) { + let n = t, + i = false; + return ( + r && + t && + ((n = []), + R(t, function (a) { + (i || a === r) && ((i = true), n.push(a)); + })), + r && !i && (n || (n = []), n.push(r)), + ta(n, e) + ); +} +let Rt; +let Yn = C(() => { + Xn(); + Uo(); + Le(); + ('use strict'); + Rt = (function () { + function t(e, r, n, i) { + let a = this, + o = null; + i !== null && + (e && j(e.getPlugin) + ? (o = qu(e, a, i || e.getPlugin())) + : i + ? (o = Gu(e, a, i)) + : pe(i) && (o = ta(e, a))), + (a.core = function () { + return n; + }), + (a.diagLog = function () { + return kt(n, r); + }), + (a.getCfg = function () { + return r; + }), + (a.getExtCfg = function (c, s) { + s === void 0 && (s = {}); + let u; + if (r) { + let l = r.extensionConfig; + l && c && (u = l[c]); + } + return u || s; + }), + (a.getConfig = function (c, s, u) { + u === void 0 && (u = false); + let l, + f = a.getExtCfg(c, null); + return ( + f && !x(f[s]) ? (l = f[s]) : r && !x(r[s]) && (l = r[s]), + x(l) ? u : l + ); + }), + (a.hasNext = function () { + return o != null; + }), + (a.getNext = function () { + return o; + }), + (a.setNext = function (c) { + o = c; + }), + (a.processNext = function (c) { + let s = o; + s && ((o = s.getNext()), s.processTelemetry(c, a)); + }), + (a.createNew = function (c, s) { + return c === void 0 && (c = null), new t(c || o, r, n, s); + }); + } + return t; + })(); +}); +let _o; +let $n; +let ra = C(() => { + (_o = 'iKey'), ($n = 'extensionConfig'); +}); +let Zn; +let tt; +let na = C(() => { + Yn(); + Le(); + ra(); + ('use strict'); + (Zn = 'getPlugin'), + (tt = (function () { + function t() { + let e = this, + r = false, + n = null, + i = null; + (e.core = null), + (e.diagLog = function (a) { + return e._getTelCtx(a).diagLog(); + }), + (e.isInitialized = function () { + return r; + }), + (e.setInitialized = function (a) { + r = a; + }), + (e.setNextPlugin = function (a) { + i = a; + }), + (e.processNext = function (a, o) { + o + ? o.processNext(a) + : i && j(i.processTelemetry) && i.processTelemetry(a, null); + }), + (e._getTelCtx = function (a) { + a === void 0 && (a = null); + let o = a; + if (!o) { + let c = n || new Rt(null, {}, e.core); + i && i[Zn] + ? (o = c.createNew(null, i[Zn])) + : (o = c.createNew(null, i)); + } + return o; + }), + (e._baseTelInit = function (a, o, c, s) { + a && K(a, $n, [], null, x), + !s && o && (s = o.getProcessTelContext().getNext()); + let u = i; + i && i[Zn] && (u = i[Zn]()), + (e.core = o), + (n = new Rt(s, a, o, u)), + (r = true); + }); + } + return ( + (t.prototype.initialize = function (e, r, n, i) { + this._baseTelInit(e, r, n, i); + }), + t + ); + })()); +}); +function Yr(t, e) { + for (var r = [], n = null, i = t.getNext(); i; ) { + let a = i.getPlugin(); + a && + (n && j(n[Ho]) && j(a[ia]) && n[Ho](a), + (!j(a[jo]) || !a[jo]()) && r.push(a), + (n = a), + (i = i.getNext())); + } + R(r, function (o) { + o.initialize(t.getCfg(), t.core(), e, t.getNext()); + }); +} +function aa(t) { + return t.sort(function (e, r) { + let n = 0, + i = j(r[ia]); + return j(e[ia]) ? (n = i ? e[Oo] - r[Oo] : 1) : i && (n = -1), n; + }); +} +let ia; +let Oo; +let Ho; +let jo; +let oa = C(() => { + Le(); + ('use strict'); + (ia = 'processTelemetry'), + (Oo = 'priority'), + (Ho = 'setNextPlugin'), + (jo = 'isInitialized'); +}); +let sa; +let Ku; +let zo; +let Bo = C(() => { + ne(); + Te(); + na(); + Yn(); + oa(); + Le(); + ('use strict'); + (sa = 500), + (Ku = 'Channel has invalid priority'), + (zo = (function (t) { + H(e, t); + function e() { + let r = t.call(this) || this; + (r.identifier = 'ChannelControllerPlugin'), (r.priority = sa); + let n; + W(e, r, function (c, s) { + (c.setNextPlugin = function (u) {}), + (c.processTelemetry = function (u, l) { + n && + R(n, function (f) { + if (f.length > 0) { + let m = r._getTelCtx(l).createNew(f); + m.processNext(u); + } + }); + }), + (c.getChannelControls = function () { + return n; + }), + (c.initialize = function (u, l, f) { + c.isInitialized() || + (s.initialize(u, l, f), + o((u || {}).channels, f), + R(n, function (m) { + return Yr(new Rt(m, u, l), f); + })); + }); + }); + function i(c) { + R(c, function (s) { + s.priority < sa && Ae(Ku + s.identifier); + }); + } + function a(c) { + c && + c.length > 0 && + ((c = c.sort(function (s, u) { + return s.priority - u.priority; + })), + i(c), + n.push(c)); + } + function o(c, s) { + if ( + ((n = []), + c && + R(c, function (l) { + return a(l); + }), + s) + ) { + let u = []; + R(s, function (l) { + l.priority > sa && u.push(l); + }), + a(u); + } + } + return r; + } + return ( + (e._staticInit = (function () { + let r = e.prototype; + St(r, 'ChannelControls', r.getChannelControls), + St(r, 'channelQueue', r.getChannelControls); + })()), + e + ); + })(tt)); +}); +function pa(t, e) { + let r = ur[Gt] || ei[Gt]; + return r || ((r = ur[Gt] = ur(t, e)), (ei[Gt] = r)), r; +} +function ti(t) { + return t ? t.isEnabled() : true; +} +function Wu(t) { + let e = (t.cookieCfg = t.cookieCfg || {}); + if ( + (K(e, 'domain', t.cookieDomain, ji, x), + K(e, 'path', t.cookiePath || '/', null, x), + x(e[la])) + ) { + let r = void 0; + pe(t[Go]) || (r = !t[Go]), pe(t[Ko]) || (r = !t[Ko]), (e[la] = r); + } + return e; +} +function cr(t, e) { + let r; + if (t) { + r = t.getCookieMgr(); + } else if (e) { + let n = e.cookieCfg; + n[Gt] ? (r = n[Gt]) : (r = ur(e)); + } + return r || (r = pa(e, (t || {}).logger)), r; +} +function ur(t, e) { + var r = Wu(t || ei), + n = r.path || '/', + i = r.domain, + a = r[la] !== false, + o = { + isEnabled: function () { + let c = a && da(e), + s = ei[Gt]; + return c && s && o !== s && (c = ti(s)), c; + }, + setEnabled: function (c) { + a = c !== false; + }, + set: function (c, s, u, l, f) { + if (ti(o)) { + let m = {}, + I = oe(s || ht), + E = I.indexOf(';'); + if ( + (E !== -1 && + ((I = oe(s.substring(0, E))), (m = Xo(s.substring(E + 1)))), + K(m, 'domain', l || i, Pr, pe), + !x(u)) + ) { + let b = qt(); + if (pe(m[ua])) { + let p = de(), + v = p + u * 1e3; + if (v > 0) { + let y = new Date(); + y.setTime(v), + K(m, ua, Yo(y, b ? Vo : qo) || Yo(y, b ? Vo : qo) || ht, Pr); + } + } + b || K(m, 'max-age', ht + u, null, pe); + } + let w = et(); + w && + w.protocol === 'https:' && + (K(m, 'secure', null, null, pe), + fa === null && (fa = !ri((Ue() || {}).userAgent)), + fa && K(m, 'SameSite', 'None', null, pe)), + K(m, 'path', f || n, null, pe); + let L = r.setCookie || Zo; + L(c, $o(I, m)); + } + }, + get: function (c) { + let s = ht; + return ti(o) && (s = (r.getCookie || Ju)(c)), s; + }, + del: function (c, s) { + ti(o) && o.purge(c, s); + }, + purge: function (c, s) { + if (da(e)) { + let u = + ((f = {}), + (f.path = s || '/'), + (f[ua] = 'Thu, 01 Jan 1970 00:00:01 GMT'), + f); + qt() || (u['max-age'] = '0'); + let l = r.delCookie || Zo; + l(c, $o(ht, u)); + } + let f; + }, + }; + return (o[Gt] = o), o; +} +function da(t) { + if (Qn === null) { + Qn = false; + try { + let e = $r || {}; + Qn = e[ca] !== void 0; + } catch (r) { + t && + t.throwInternal( + S.WARNING, + h.CannotAccessCookie, + 'Cannot access document.cookie - ' + G(r), + { exception: O(r) } + ); + } + } + return Qn; +} +function Xo(t) { + let e = {}; + if (t && t.length) { + let r = oe(t).split(';'); + R(r, function (n) { + if (((n = oe(n || ht)), n)) { + let i = n.indexOf('='); + i === -1 + ? (e[n] = null) + : (e[oe(n.substring(0, i))] = oe(n.substring(i + 1))); + } + }); + } + return e; +} +function Yo(t, e) { + return j(t[e]) ? t[e]() : null; +} +function $o(t, e) { + let r = t || ht; + return ( + Q(e, function (n, i) { + r += '; ' + n + (x(i) ? ht : '=' + i); + }), + r + ); +} +function Ju(t) { + let e = ht; + if ($r) { + let r = $r[ca] || ht; + Wo !== r && ((Jo = Xo(r)), (Wo = r)), (e = oe(Jo[t] || ht)); + } + return e; +} +function Zo(t, e) { + $r && ($r[ca] = t + '=' + e); +} +function ri(t) { + return _(t) + ? !!( + Ee(t, 'CPU iPhone OS 12') || + Ee(t, 'iPad; CPU OS 12') || + (Ee(t, 'Macintosh; Intel Mac OS X 10_14') && + Ee(t, 'Version/') && + Ee(t, 'Safari')) || + (Ee(t, 'Macintosh; Intel Mac OS X 10_14') && + Bi(t, 'AppleWebKit/605.1.15 (KHTML, like Gecko)')) || + Ee(t, 'Chrome/5') || + Ee(t, 'Chrome/6') || + (Ee(t, 'UnrealEngine') && !Ee(t, 'Chrome')) || + Ee(t, 'UCBrowser/12') || + Ee(t, 'UCBrowser/11') + ) + : false; +} +let Vo; +let qo; +let ca; +let ua; +let la; +let Go; +let Ko; +let Gt; +let ht; +let Qn; +let fa; +let Wo; +let $r; +let Jo; +let ei; +let ni = C(() => { + qr(); + br(); + Le(); + (Vo = 'toGMTString'), + (qo = 'toUTCString'), + (ca = 'cookie'), + (ua = 'expires'), + (la = 'enabled'), + (Go = 'isCookieUseDisabled'), + (Ko = 'disableCookiesUsage'), + (Gt = '_ckMgr'), + (ht = ''), + (Qn = null), + (fa = null), + (Wo = null), + ($r = Ne()), + (Jo = {}), + (ei = {}); +}); +let Xu; +let Qo; +let Zr; +let ma = C(() => { + ne(); + Te(); + Bo(); + Yn(); + oa(); + Xr(); + ni(); + Le(); + ra(); + ('use strict'); + (Xu = 'Extensions must provide callback to initialize'), + (Qo = '_notificationManager'), + (Zr = (function () { + function t() { + let e = false, + r, + n, + i, + a, + o; + W(t, this, function (c) { + (c._extensions = new Array()), + (n = new zo()), + (c.logger = Dt({ + throwInternal: function (s, u, l, f, m) { + m === void 0 && (m = false); + }, + warnToConsole: function (s) {}, + resetInternalMessageCount: function () {}, + })), + (r = []), + (c.isInitialized = function () { + return e; + }), + (c.initialize = function (s, u, l, f) { + c.isInitialized() && + Ae('Core should not be initialized more than once'), + (!s || x(s.instrumentationKey)) && + Ae('Please provide instrumentation key'), + (i = f), + (c[Qo] = f), + (c.config = s || {}), + (s.extensions = x(s.extensions) ? [] : s.extensions); + let m = ge(s, $n); + (m.NotificationManager = f), l && (c.logger = l); + let I = []; + I.push.apply(I, u.concat(s.extensions)), (I = aa(I)); + let E = [], + b = [], + p = {}; + R(I, function (v) { + (x(v) || x(v.initialize)) && Ae(Xu); + let y = v.priority, + w = v.identifier; + v && + y && + (x(p[y]) + ? (p[y] = w) + : l.warnToConsole( + 'Two extensions have same priority #' + + y + + ' - ' + + p[y] + + ', ' + + w + )), + !y || y < n.priority ? E.push(v) : b.push(v); + }), + I.push(n), + E.push(n), + (I = aa(I)), + (c._extensions = I), + Yr(new Rt([n], s, c), I), + Yr(new Rt(E, s, c), I), + (c._extensions = E), + c.getTransmissionControls().length === 0 && + Ae('No channels available'), + (e = true), + c.releaseQueue(); + }), + (c.getTransmissionControls = function () { + return n.getChannelControls(); + }), + (c.track = function (s) { + K(s, _o, c.config.instrumentationKey, null, Gn), + K(s, 'time', Me(new Date()), null, Gn), + K(s, 'ver', '4.0', null, x), + c.isInitialized() + ? c.getProcessTelContext().processNext(s) + : r.push(s); + }), + (c.getProcessTelContext = function () { + let s = c._extensions, + u = s; + return ( + (!s || s.length === 0) && (u = [n]), new Rt(u, c.config, c) + ); + }), + (c.getNotifyMgr = function () { + return ( + i || + ((i = Dt({ + addNotificationListener: function (s) {}, + removeNotificationListener: function (s) {}, + eventsSent: function (s) {}, + eventsDiscarded: function (s, u) {}, + eventsSendRequest: function (s, u) {}, + })), + (c[Qo] = i)), + i + ); + }), + (c.getCookieMgr = function () { + return o || (o = ur(c.config, c.logger)), o; + }), + (c.setCookieMgr = function (s) { + o = s; + }), + (c.getPerfMgr = function () { + return ( + a || + (c.config && + c.config.enablePerfMgr && + (a = new Jr(c.getNotifyMgr()))), + a + ); + }), + (c.setPerfMgr = function (s) { + a = s; + }), + (c.eventCnt = function () { + return r.length; + }), + (c.releaseQueue = function () { + r.length > 0 && + (R(r, function (s) { + c.getProcessTelContext().processNext(s); + }), + (r = [])); + }); + }); + } + return t; + })()); +}); +let Qr; +let ga = C(() => { + Te(); + Le(); + Qr = (function () { + function t(e) { + this.listeners = []; + let r = !!(e || {}).perfEvtsSendAll; + W(t, this, function (n) { + (n.addNotificationListener = function (i) { + n.listeners.push(i); + }), + (n.removeNotificationListener = function (i) { + for (let a = Nt(n.listeners, i); a > -1; ) { + n.listeners.splice(a, 1), (a = Nt(n.listeners, i)); + } + }), + (n.eventsSent = function (i) { + R(n.listeners, function (a) { + a && + a.eventsSent && + setTimeout(function () { + return a.eventsSent(i); + }, 0); + }); + }), + (n.eventsDiscarded = function (i, a) { + R(n.listeners, function (o) { + o && + o.eventsDiscarded && + setTimeout(function () { + return o.eventsDiscarded(i, a); + }, 0); + }); + }), + (n.eventsSendRequest = function (i, a) { + R(n.listeners, function (o) { + if (o && o.eventsSendRequest) { + if (a) { + setTimeout(function () { + return o.eventsSendRequest(i, a); + }, 0); + } else { + try { + o.eventsSendRequest(i, a); + } catch (c) {} + } + } + }); + }), + (n.perfEvent = function (i) { + i && + (r || !i.isChildEvt()) && + R(n.listeners, function (a) { + if (a && a.perfEvent) { + if (i.isAsync) { + setTimeout(function () { + return a.perfEvent(i); + }, 0); + } else { + try { + a.perfEvent(i); + } catch (o) {} + } + } + }); + }); + }); + } + return t; + })(); +}); +let en; +let es = C(() => { + ne(); + ma(); + vo(); + ga(); + Xr(); + Xn(); + Te(); + Le(); + en = (function (t) { + H(e, t); + function e() { + let r = t.call(this) || this; + return ( + W(e, r, function (n, i) { + (n.initialize = function (c, s, u, l) { + i.initialize(c, s, u || new Jn(c), l || new Qr(c)); + }), + (n.track = function (c) { + ct( + n.getPerfMgr(), + function () { + return 'AppInsightsCore:track'; + }, + function () { + c === null && (o(c), Ae('Invalid telemetry item')), + a(c), + i.track(c); + }, + function () { + return { item: c }; + }, + !c.sync + ); + }), + (n.addNotificationListener = function (c) { + let s = n.getNotifyMgr(); + s && s.addNotificationListener(c); + }), + (n.removeNotificationListener = function (c) { + let s = n.getNotifyMgr(); + s && s.removeNotificationListener(c); + }), + (n.pollInternalLogs = function (c) { + let s = n.config.diagnosticLogInterval; + return ( + (!s || !(s > 0)) && (s = 1e4), + setInterval(function () { + let u = n.logger ? n.logger.queue : []; + R(u, function (l) { + let f = { + name: c || 'InternalMessageId: ' + l.messageId, + iKey: n.config.instrumentationKey, + time: Me(new Date()), + baseType: Ft.dataType, + baseData: { message: l.message }, + }; + n.track(f); + }), + (u.length = 0); + }, s) + ); + }); + function a(c) { + if (x(c.name)) { + throw (o(c), Error('telemetry name required')); + } + } + function o(c) { + let s = n.getNotifyMgr(); + s && s.eventsDiscarded([c], go.InvalidEvent); + } + }), + r + ); + } + return e; + })(Zr); +}); +function ns(t) { + t < 0 && (t >>>= 0), + (tn = (123456789 + t) & Kt), + (rn = (987654321 - t) & Kt), + (rs = true); +} +function is() { + try { + let t = de() & 2147483647; + ns(((Math.random() * ts) ^ t) + t); + } catch (e) {} +} +function ii(t) { + return t > 0 ? Math.floor((It() / Kt) * (t + 1)) >>> 0 : 0; +} +function It(t) { + let e, + r = $i() || Zi(); + return ( + r && r.getRandomValues + ? (e = r.getRandomValues(new Uint32Array(1))[0] & Kt) + : qt() + ? (rs || is(), (e = ai() & Kt)) + : (e = Math.floor((ts * Math.random()) | 0)), + t || (e >>>= 0), + e + ); +} +function va(t) { + t ? ns(t) : is(); +} +function ai(t) { + (rn = (36969 * (rn & 65535) + (rn >> 16)) & Kt), + (tn = (18e3 * (tn & 65535) + (tn >> 16)) & Kt); + let e = ((((rn << 16) + (tn & 65535)) >>> 0) & Kt) | 0; + return t || (e >>>= 0), e; +} +let ts; +let Kt; +let rs; +let tn; +let rn; +let ha = C(() => { + br(); + Le(); + (ts = 4294967296), + (Kt = 4294967295), + (rs = false), + (tn = 123456789), + (rn = 987654321); +}); +function Mt(t, e) { + let r = false, + n = Ct(); + n && ((r = zt(n, t, e)), (r = zt(n.body, t, e) || r)); + let i = Ne(); + return i && (r = Jt.Attach(i, t, e) || r), r; +} +function as() { + function t() { + return ii(15); + } + return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(Yu, function (e) { + let r = t() | 0, + n = e === 'x' ? r : (r & 3) | 8; + return n.toString(16); + }); +} +function os() { + let t = Ye(); + return t && t.now ? t.now() : de(); +} +function Wt(t) { + t === void 0 && (t = 22); + for ( + var e = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/', + r = It() >>> 0, + n = 0, + i = ''; + i.length < t; + + ) { + n++, + (i += e.charAt(r & 63)), + (r >>>= 6), + n === 5 && ((r = (((It() << 2) & 4294967295) | (r & 3)) >>> 0), (n = 0)); + } + return i; +} +function He() { + for ( + var t = [ + '0', + '1', + '2', + '3', + '4', + '5', + '6', + '7', + '8', + '9', + 'a', + 'b', + 'c', + 'd', + 'e', + 'f', + ], + e = '', + r, + n = 0; + n < 4; + n++ + ) { + (r = It()), + (e += + t[r & 15] + + t[(r >> 4) & 15] + + t[(r >> 8) & 15] + + t[(r >> 12) & 15] + + t[(r >> 16) & 15] + + t[(r >> 20) & 15] + + t[(r >> 24) & 15] + + t[(r >> 28) & 15]); + } + let i = t[(8 + (It() & 3)) | 0]; + return ( + e.substr(0, 8) + + e.substr(9, 4) + + '4' + + e.substr(13, 3) + + i + + e.substr(16, 3) + + e.substr(19, 12) + ); +} +function Xt(t, e) { + let r = pa(t, e), + n = on._canUseCookies; + return ( + nn === null && + ((nn = []), + (an = n), + St( + on, + '_canUseCookies', + function () { + return an; + }, + function (i) { + (an = i), + R(nn, function (a) { + a.setEnabled(i); + }); + } + )), + Nt(nn, r) === -1 && nn.push(r), + Gr(n) && r.setEnabled(n), + Gr(an) && r.setEnabled(an), + r + ); +} +function oi() { + Xt().setEnabled(false); +} +function xa(t) { + return Xt(null, t).isEnabled(); +} +function ya(t, e) { + return Xt(null, t).get(e); +} +function Sa(t, e, r, n) { + Xt(null, t).set(e, r, null, n); +} +function Ca(t, e) { + return Xt(null, t).del(e); +} +let nn; +let an; +let on; +let Yu; +let Jt; +let ss = C(() => { + ne(); + ni(); + br(); + Le(); + ha(); + ('use strict'); + nn = null; + (on = { + _canUseCookies: void 0, + isTypeof: Hi, + isUndefined: pe, + isNullOrUndefined: x, + hasOwnProperty: Er, + isFunction: j, + isObject: st, + isDate: wr, + isArray: Re, + isError: Bt, + isString: _, + isNumber: ir, + isBoolean: Gr, + toISOString: Me, + arrForEach: R, + arrIndexOf: Nt, + arrMap: Vt, + arrReduce: Kr, + strTrim: oe, + objCreate: Dt, + objKeys: Qe, + objDefineAccessors: St, + addEventHandler: Mt, + dateNow: de, + isIE: qt, + disableCookies: oi, + newGuid: as, + perfNow: os, + newId: Wt, + randomValue: ii, + random32: It, + mwcRandomSeed: va, + mwcRandom32: ai, + generateW3CId: He, + }), + (Yu = /[xy]/g), + (Jt = { Attach: zt, AttachEvent: zt, Detach: qn, DetachEvent: qn }); +}); +function Ia(t, e) { + if (t) { + for (let r = 0; r < t.length && !e(t[r], r); r++) {} + } +} +function Ta(t, e, r, n, i) { + i >= 0 && + i <= 2 && + Ia(t, function (a, o) { + let c = a.cbks, + s = c[us[i]]; + if (s) { + e.ctx = function () { + let f = (n[o] = n[o] || {}); + return f; + }; + try { + s.apply(e.inst, r); + } catch (f) { + let u = e.err; + try { + let l = c[us[2]]; + l && ((e.err = f), l.apply(e.inst, r)); + } catch (m) { + } finally { + e.err = u; + } + } + } + }); +} +function Qu(t) { + return function () { + let e = this, + r = arguments, + n = t.h, + i = { name: t.n, inst: e, ctx: null, set: s }, + a = [], + o = c([i], r); + function c(l, f) { + return ( + Ia(f, function (m) { + l.push(m); + }), + l + ); + } + function s(l, f) { + (r = c([], r)), (r[l] = f), (o = c([i], r)); + } + Ta(n, i, o, a, 0); + let u = t.f; + try { + i.rslt = u.apply(e, r); + } catch (l) { + throw ((i.err = l), Ta(n, i, o, a, 3), l); + } + return Ta(n, i, o, a, 1), i.rslt; + }; +} +function el(t) { + if (t) { + if (ls) { + return ls(t); + } + let e = t[$u] || t[Ie] || t[Zu]; + if (e) { + return e; + } + } + return null; +} +function fs(t, e, r) { + let n = null; + return t && (Er(t, e) ? (n = t) : r && (n = fs(el(t), e, false))), n; +} +function Ea(t, e, r) { + return t ? sn(t[Ie], e, r, false) : null; +} +function sn(t, e, r, n) { + if ((n === void 0 && (n = true), t && e && r)) { + let i = fs(t, e, n); + if (i) { + let a = i[e]; + if (typeof a === mt) { + let o = a[cs]; + if (!o) { + o = { i: 0, n: e, f: a, h: [] }; + let c = Qu(o); + (c[cs] = o), (i[e] = c); + } + let s = { + id: o.i, + cbks: r, + rm: function () { + let u = this.id; + Ia(o.h, function (l, f) { + if (l.id === u) { + return o.h.splice(f, 1), 1; + } + }); + }, + }; + return o.i++, o.h.push(s), s; + } + } + } + return null; +} +let cs; +let us; +let $u; +let Zu; +let ls; +let ps = C(() => { + ne(); + Le(); + (cs = '_aiHooks'), + (us = ['req', 'rsp', 'hkErr', 'fnErr']), + ($u = '__proto__'), + (Zu = 'constructor'); + ls = Object.getPrototypeOf; +}); +let J = C(() => { + es(); + ma(); + na(); + ha(); + ss(); + Le(); + br(); + ne(); + ga(); + Xr(); + Xn(); + qr(); + ps(); + ni(); +}); +let te; +let wa = C(() => { + te = { + requestContextHeader: 'Request-Context', + requestContextTargetKey: 'appId', + requestContextAppIdFormat: 'appId=cid-v1:', + requestIdHeader: 'Request-Id', + traceParentHeader: 'traceparent', + traceStateHeader: 'tracestate', + sdkContextHeader: 'Sdk-Context', + sdkContextHeaderAppIdRequest: 'appId', + requestContextHeaderLowerCase: 'request-context', + }; +}); +function si(t, e, r) { + let n = e.length, + i = Pa(t, e); + if (i.length !== n) { + for (var a = 0, o = i; r[o] !== void 0; ) { + a++, (o = i.substring(0, 150 - 3) + ba(a)); + } + i = o; + } + return i; +} +function Pa(t, e) { + let r; + return ( + e && + ((e = oe(e.toString())), + e.length > 150 && + ((r = e.substring(0, 150)), + t.throwInternal( + S.WARNING, + h.NameTooLong, + 'name is too long. It has been truncated to ' + 150 + ' characters.', + { name: e }, + true + ))), + r || e + ); +} +function ae(t, e, r) { + r === void 0 && (r = 1024); + let n; + return ( + e && + ((r = r || 1024), + (e = oe(e)), + e.toString().length > r && + ((n = e.toString().substring(0, r)), + t.throwInternal( + S.WARNING, + h.StringValueTooLong, + 'string value is too long. It has been truncated to ' + + r + + ' characters.', + { value: e }, + true + ))), + n || e + ); +} +function Tt(t, e) { + return li(t, e, 2048, h.UrlTooLong); +} +function Ar(t, e) { + let r; + return ( + e && + e.length > 32768 && + ((r = e.substring(0, 32768)), + t.throwInternal( + S.WARNING, + h.MessageTruncated, + 'message is too long, it has been truncated to ' + + 32768 + + ' characters.', + { message: e }, + true + )), + r || e + ); +} +function ci(t, e) { + let r; + if (e) { + let n = '' + e; + n.length > 32768 && + ((r = n.substring(0, 32768)), + t.throwInternal( + S.WARNING, + h.ExceptionTruncated, + 'exception is too long, it has been truncated to ' + + 32768 + + ' characters.', + { exception: e }, + true + )); + } + return r || e; +} +function je(t, e) { + if (e) { + let r = {}; + Q(e, function (n, i) { + if (st(i) && vt()) { + try { + i = Pe().stringify(i); + } catch (a) { + t.throwInternal( + S.WARNING, + h.CannotSerializeObjectNonSerializable, + 'custom property is not valid', + { exception: a }, + true + ); + } + } + (i = ae(t, i, 8192)), (n = si(t, n, r)), (r[n] = i); + }), + (e = r); + } + return e; +} +function ze(t, e) { + if (e) { + let r = {}; + Q(e, function (n, i) { + (n = si(t, n, r)), (r[n] = i); + }), + (e = r); + } + return e; +} +function ui(t, e) { + return e && li(t, e, 128, h.IdTooLong).toString(); +} +function li(t, e, r, n) { + let i; + return ( + e && + ((e = oe(e)), + e.length > r && + ((i = e.substring(0, r)), + t.throwInternal( + S.WARNING, + n, + 'input is too long, it has been truncated to ' + r + ' characters.', + { data: e }, + true + ))), + i || e + ); +} +function ba(t) { + let e = '00' + t; + return e.substr(e.length - 3); +} +let Da; +let ut = C(() => { + J(); + Da = { + MAX_NAME_LENGTH: 150, + MAX_ID_LENGTH: 128, + MAX_PROPERTY_LENGTH: 8192, + MAX_STRING_LENGTH: 1024, + MAX_URL_LENGTH: 2048, + MAX_MESSAGE_LENGTH: 32768, + MAX_EXCEPTION_LENGTH: 32768, + sanitizeKeyAndAddUniqueness: si, + sanitizeKey: Pa, + sanitizeString: ae, + sanitizeUrl: Tt, + sanitizeMessage: Ar, + sanitizeException: ci, + sanitizeProperties: je, + sanitizeMeasurements: ze, + sanitizeId: ui, + sanitizeInput: li, + padNumber: ba, + trim: oe, + }; +}); +function Lt(t) { + let e = null; + if (j(Event)) { + e = new Event(t); + } else { + let r = Ne(); + r && + r.createEvent && + ((e = r.createEvent('Event')), e.initEvent(t, true, true)); + } + return e; +} +let Aa = C(() => { + J(); +}); +function ee(t, e) { + return ( + e === void 0 && (e = false), + t == null ? e : t.toString().toLowerCase() === 'true' + ); +} +function Ge(t) { + (isNaN(t) || t < 0) && (t = 0), (t = Math.round(t)); + let e = '' + (t % 1e3), + r = '' + (Math.floor(t / 1e3) % 60), + n = '' + (Math.floor(t / (1e3 * 60)) % 60), + i = '' + (Math.floor(t / (1e3 * 60 * 60)) % 24), + a = Math.floor(t / (1e3 * 60 * 60 * 24)); + return ( + (e = e.length === 1 ? '00' + e : e.length === 2 ? '0' + e : e), + (r = r.length < 2 ? '0' + r : r), + (n = n.length < 2 ? '0' + n : n), + (i = i.length < 2 ? '0' + i : i), + (a > 0 ? a + '.' : '') + i + ':' + n + ':' + r + '.' + e + ); +} +function Nr() { + let t = Ue(); + return 'sendBeacon' in t && t.sendBeacon; +} +function cn(t, e) { + let r = null; + return ( + R(t, function (n) { + if (n.identifier === e) { + return (r = n), -1; + } + }), + r + ); +} +function un(t, e, r, n, i) { + return !i && _(t) && (t === 'Script error.' || t === 'Script error'); +} +let ln = C(() => { + J(); +}); +let Et; +let lr; +let Ut; +let Fr; +let fn; +let le; +let lt = C(() => { + (Et = 'Microsoft_ApplicationInsights_BypassAjaxInstrumentation'), + (lr = 'sampleRate'), + (Ut = 'ProcessLegacy'), + (Fr = 'http.method'), + (fn = 'https://dc.services.visualstudio.com'), + (le = 'not_specified'); +}); +let Yt; +let Ke; +let Na = C(() => { + (function (t) { + (t[(t.LocalStorage = 0)] = 'LocalStorage'), + (t[(t.SessionStorage = 1)] = 'SessionStorage'); + })(Yt || (Yt = {})); + (function (t) { + (t[(t.AI = 0)] = 'AI'), + (t[(t.AI_AND_W3C = 1)] = 'AI_AND_W3C'), + (t[(t.W3C = 2)] = 'W3C'); + })(Ke || (Ke = {})); +}); +function Fa() { + return kr() ? fi(Yt.LocalStorage) : null; +} +function fi(t) { + try { + if (x(ot())) { + return null; + } + let e = new Date(), + r = we(t === Yt.LocalStorage ? 'localStorage' : 'sessionStorage'); + r.setItem(e.toString(), e.toString()); + let n = r.getItem(e.toString()) !== e.toString(); + if ((r.removeItem(e.toString()), !n)) { + return r; + } + } catch (i) {} + return null; +} +function ka() { + return wt() ? fi(Yt.SessionStorage) : null; +} +function pn() { + (fr = false), (pr = false); +} +function kr() { + return fr === void 0 && (fr = !!fi(Yt.LocalStorage)), fr; +} +function dn(t, e) { + let r = Fa(); + if (r !== null) { + try { + return r.getItem(e); + } catch (n) { + (fr = false), + t.throwInternal( + S.WARNING, + h.BrowserCannotReadLocalStorage, + 'Browser failed read of local storage. ' + G(n), + { exception: O(n) } + ); + } + } + return null; +} +function mn(t, e, r) { + let n = Fa(); + if (n !== null) { + try { + return n.setItem(e, r), true; + } catch (i) { + (fr = false), + t.throwInternal( + S.WARNING, + h.BrowserCannotWriteLocalStorage, + 'Browser failed write to local storage. ' + G(i), + { exception: O(i) } + ); + } + } + return false; +} +function gn(t, e) { + let r = Fa(); + if (r !== null) { + try { + return r.removeItem(e), true; + } catch (n) { + (fr = false), + t.throwInternal( + S.WARNING, + h.BrowserFailedRemovalFromLocalStorage, + 'Browser failed removal of local storage item. ' + G(n), + { exception: O(n) } + ); + } + } + return false; +} +function wt() { + return pr === void 0 && (pr = !!fi(Yt.SessionStorage)), pr; +} +function Ra() { + let t = []; + return ( + wt() && + Q(we('sessionStorage'), function (e) { + t.push(e); + }), + t + ); +} +function $t(t, e) { + let r = ka(); + if (r !== null) { + try { + return r.getItem(e); + } catch (n) { + (pr = false), + t.throwInternal( + S.WARNING, + h.BrowserCannotReadSessionStorage, + 'Browser failed read of session storage. ' + G(n), + { exception: O(n) } + ); + } + } + return null; +} +function Zt(t, e, r) { + let n = ka(); + if (n !== null) { + try { + return n.setItem(e, r), true; + } catch (i) { + (pr = false), + t.throwInternal( + S.WARNING, + h.BrowserCannotWriteSessionStorage, + 'Browser failed write to session storage. ' + G(i), + { exception: O(i) } + ); + } + } + return false; +} +function vn(t, e) { + let r = ka(); + if (r !== null) { + try { + return r.removeItem(e), true; + } catch (n) { + (pr = false), + t.throwInternal( + S.WARNING, + h.BrowserFailedRemovalFromSessionStorage, + 'Browser failed removal of session storage item. ' + G(n), + { exception: O(n) } + ); + } + } + return false; +} +let fr; +let pr; +let Ma = C(() => { + J(); + Na(); + (fr = void 0), (pr = void 0); +}); +function dr(t) { + let e = ms, + r = tl, + n = r[e]; + return ( + ds.createElement + ? r[e] || (n = r[e] = ds.createElement('a')) + : (n = { host: pi(t, true) }), + (n.href = t), + e++, + e >= r.length && (e = 0), + (ms = e), + n + ); +} +function hn(t) { + let e, + r = dr(t); + return r && (e = r.href), e; +} +function La(t) { + let e, + r = dr(t); + return r && (e = r.pathname), e; +} +function xn(t, e) { + return t ? t.toUpperCase() + ' ' + e : e; +} +function pi(t, e) { + let r = yn(t, e) || ''; + if (r) { + let n = r.match(/(www[0-9]?\.)?(.[^/:]+)(\:[\d]+)?/i); + if (n != null && n.length > 3 && _(n[2]) && n[2].length > 0) { + return n[2] + (n[3] || ''); + } + } + return r; +} +function yn(t, e) { + let r = null; + if (t) { + let n = t.match(/(\w*):\/\/(.[^/:]+)(\:[\d]+)?/i); + if ( + n != null && + n.length > 2 && + _(n[2]) && + n[2].length > 0 && + ((r = n[2] || ''), e && n.length > 2) + ) { + let i = (n[1] || '').toLowerCase(), + a = n[3] || ''; + ((i === 'http' && a === ':80') || (i === 'https' && a === ':443')) && + (a = ''), + (r += a); + } + } + return r; +} +let ds; +let ms; +let tl; +let Ua = C(() => { + J(); + (ds = Ne() || {}), (ms = 0), (tl = [null, null, null, null, null]); +}); +function Rr(t) { + return rl.indexOf(t.toLowerCase()) !== -1; +} +function gs(t, e, r, n) { + let i, + a = n, + o = n; + if (e && e.length > 0) { + let c = dr(e); + if (((i = c.host), !a)) { + if (c.pathname != null) { + let s = c.pathname.length === 0 ? '/' : c.pathname; + s.charAt(0) !== '/' && (s = '/' + s), + (o = c.pathname), + (a = ae(t, r ? r + ' ' + s : s)); + } else { + a = ae(t, e); + } + } + } else { + (i = n), (a = n); + } + return { target: i, name: a, data: o }; +} +function mr() { + let t = Ye(); + if (t && t.now && t.timing) { + let e = t.now() + t.timing.navigationStart; + if (e > 0) { + return e; + } + } + return de(); +} +function ve(t, e) { + let r = null; + return t !== 0 && e !== 0 && !x(t) && !x(e) && (r = e - t), r; +} +let rl; +let Sn; +let _a; +let Pt; +let Oa; +let Ha = C(() => { + J(); + wa(); + ut(); + Aa(); + ln(); + lt(); + Ma(); + Ua(); + rl = [ + 'https://dc.services.visualstudio.com/v2/track', + 'https://breeze.aimon.applicationinsights.io/v2/track', + 'https://dc-int.services.visualstudio.com/v2/track', + ]; + (Sn = { + NotSpecified: le, + createDomEvent: Lt, + disableStorage: pn, + isInternalApplicationInsightsEndpoint: Rr, + canUseLocalStorage: kr, + getStorage: dn, + setStorage: mn, + removeStorage: gn, + canUseSessionStorage: wt, + getSessionStorageKeys: Ra, + getSessionStorage: $t, + setSessionStorage: Zt, + removeSessionStorage: vn, + disableCookies: oi, + canUseCookies: xa, + disallowsSameSiteNone: ri, + setCookie: Sa, + stringToBoolOrDefault: ee, + getCookie: ya, + deleteCookie: Ca, + trim: oe, + newId: Wt, + random32: function () { + return It(true); + }, + generateW3CId: He, + isArray: Re, + isError: Bt, + isDate: wr, + toISOStringForIE8: Me, + getIEVersion: or, + msToTimeSpan: Ge, + isCrossOriginError: un, + dump: O, + getExceptionName: G, + addEventHandler: zt, + IsBeaconApiSupported: Nr, + getExtension: cn, + }), + (_a = { + parseUrl: dr, + getAbsoluteUrl: hn, + getPathName: La, + getCompleteUrl: xn, + parseHost: pi, + parseFullHost: yn, + }), + (Pt = { + correlationIdPrefix: 'cid-v1:', + canIncludeCorrelationHeader: function (t, e, r) { + if (!e || (t && t.disableCorrelationHeaders)) { + return false; + } + if (t && t.correlationHeaderExcludePatterns) { + for (var n = 0; n < t.correlationHeaderExcludePatterns.length; n++) { + if (t.correlationHeaderExcludePatterns[n].test(e)) { + return false; + } + } + } + let i = dr(e).host.toLowerCase(); + if ( + (i && + (i.indexOf(':443') !== -1 || i.indexOf(':80') !== -1) && + (i = (yn(e, true) || '').toLowerCase()), + (!t || !t.enableCorsCorrelation) && i && i !== r) + ) { + return false; + } + let a = t && t.correlationHeaderDomains; + if (a) { + let o; + if ( + (R(a, function (u) { + let l = new RegExp( + u + .toLowerCase() + .replace(/\\/g, '\\\\') + .replace(/\./g, '\\.') + .replace(/\*/g, '.*') + ); + o = o || l.test(i); + }), + !o) + ) { + return false; + } + } + let c = t && t.correlationHeaderExcludedDomains; + if (!c || c.length === 0) { + return true; + } + for (var n = 0; n < c.length; n++) { + let s = new RegExp( + c[n] + .toLowerCase() + .replace(/\\/g, '\\\\') + .replace(/\./g, '\\.') + .replace(/\*/g, '.*') + ); + if (s.test(i)) { + return false; + } + } + return i && i.length > 0; + }, + getCorrelationContext: function (t) { + if (t) { + let e = Pt.getCorrelationContextValue(t, te.requestContextTargetKey); + if (e && e !== Pt.correlationIdPrefix) { + return e; + } + } + }, + getCorrelationContextValue: function (t, e) { + if (t) { + for (let r = t.split(','), n = 0; n < r.length; ++n) { + let i = r[n].split('='); + if (i.length === 2 && i[0] === e) { + return i[1]; + } + } + } + }, + }); + Oa = { Now: mr, GetDuration: ve }; +}); +function di(t) { + if (!t) { + return {}; + } + let e = t.split(nl), + r = Kr( + e, + function (i, a) { + let o = a.split(il); + if (o.length === 2) { + let c = o[0].toLowerCase(), + s = o[1]; + i[c] = s; + } + return i; + }, + {} + ); + if (Qe(r).length > 0) { + if (r.endpointsuffix) { + let n = r.location ? r.location + '.' : ''; + r.ingestionendpoint = + r.ingestionendpoint || 'https://' + n + 'dc.' + r.endpointsuffix; + } + r.ingestionendpoint = r.ingestionendpoint || fn; + } + return r; +} +let nl; +let il; +let ja; +let vs = C(() => { + lt(); + J(); + (nl = ';'), (il = '='); + ja = { parse: di }; +}); +let Cn; +let za = C(() => { + Cn = (function () { + function t() {} + return t; + })(); +}); +let In; +let Ba = C(() => { + ne(); + za(); + In = (function (t) { + H(e, t); + function e() { + return t.call(this) || this; + } + return e; + })(Cn); +}); +let hs; +let xs = C(() => { + hs = (function () { + function t() { + (this.ver = 1), (this.sampleRate = 100), (this.tags = {}); + } + return t; + })(); +}); +let Tn; +let ys = C(() => { + ne(); + xs(); + ut(); + J(); + lt(); + Tn = (function (t) { + H(e, t); + function e(r, n, i) { + let a = t.call(this) || this; + return ( + (a.name = ae(r, i) || le), + (a.data = n), + (a.time = Me(new Date())), + (a.aiDataContract = { + time: 1, + iKey: 1, + name: 1, + sampleRate: function () { + return a.sampleRate === 100 ? 4 : 1; + }, + tags: 1, + data: 1, + }), + a + ); + } + return e; + })(hs); +}); +let mi; +let Va = C(() => { + mi = (function () { + function t() { + (this.ver = 2), (this.properties = {}), (this.measurements = {}); + } + return t; + })(); +}); +let Be; +let Ss = C(() => { + ne(); + Va(); + ut(); + lt(); + Be = (function (t) { + H(e, t); + function e(r, n, i, a) { + let o = t.call(this) || this; + return ( + (o.aiDataContract = { + ver: 1, + name: 1, + properties: 0, + measurements: 0, + }), + (o.name = ae(r, n) || le), + (o.properties = je(r, i)), + (o.measurements = ze(r, a)), + o + ); + } + return ( + (e.envelopeType = 'Microsoft.ApplicationInsights.{0}.Event'), + (e.dataType = 'EventData'), + e + ); + })(mi); +}); +let Cs; +let Is = C(() => { + Cs = (function () { + function t() {} + return t; + })(); +}); +let Ts; +let Es = C(() => { + Ts = (function () { + function t() { + (this.ver = 2), + (this.exceptions = []), + (this.properties = {}), + (this.measurements = {}); + } + return t; + })(); +}); +let ws; +let Ps = C(() => { + ws = (function () { + function t() { + (this.hasFullStack = true), (this.parsedStack = []); + } + return t; + })(); +}); +function Ka(t, e) { + let r = t; + return ( + r && + !_(r) && + (JSON && JSON.stringify + ? ((r = JSON.stringify(t)), + e && + (!r || r === '{}') && + (j(t.toString) ? (r = t.toString()) : (r = '' + t))) + : (r = '' + t + ' - (Missing JSON.stringify)')), + r || '' + ); +} +function As(t, e) { + let r = t; + return ( + t && + ((r = t[Ga] || t[Ds] || ''), + r && !_(r) && (r = Ka(r, true)), + t.filename && + (r = + r + + ' @' + + (t.filename || '') + + ':' + + (t.lineno || '?') + + ':' + + (t.colno || '?'))), + e && + e !== 'String' && + e !== 'Object' && + e !== 'Error' && + (r || '').indexOf(e) === -1 && + (r = e + ': ' + r), + r || '' + ); +} +function ol(t) { + return st(t) ? 'hasFullStack' in t && 'typeName' in t : false; +} +function sl(t) { + return st(t) ? 'ver' in t && 'exceptions' in t && 'properties' in t : false; +} +function Ns(t) { + return t && t.src && _(t.src) && t.obj && Re(t.obj); +} +function Lr(t) { + let e = t || ''; + _(e) || (_(e[ft]) ? (e = e[ft]) : (e = '' + e)); + let r = e.split(` +`); + return { src: e, obj: r }; +} +function cl(t) { + for ( + var e = [], + r = t.split(` +`), + n = 0; + n < r.length; + n++ + ) { + let i = r[n]; + r[n + 1] && ((i += '@' + r[n + 1]), n++), e.push(i); + } + return { src: t, obj: e }; +} +function Fs(t) { + let e = null; + if (t) { + try { + if (t[ft]) { + e = Lr(t[ft]); + } else if (t[Mr] && t[Mr][ft]) { + e = Lr(t[Mr][ft]); + } else if (t.exception && t.exception[ft]) { + e = Lr(t.exception[ft]); + } else if (Ns(t)) { + e = t; + } else if (Ns(t[qa])) { + e = t[qa]; + } else if (window.opera && t[Ga]) { + e = cl(t.message); + } else if (_(t)) { + e = Lr(t); + } else { + let r = t[Ga] || t[Ds] || ''; + _(t[bs]) && + (r && + (r += ` +`), + (r += ' from ' + t[bs])), + r && (e = Lr(r)); + } + } catch (n) { + e = Lr(n); + } + } + return e || { src: '', obj: null }; +} +function ul(t) { + let e = ''; + return ( + t && + (t.obj + ? R(t.obj, function (r) { + e += + r + + ` +`; + }) + : (e = t.src || '')), + e + ); +} +function ll(t) { + let e, + r = t.obj; + if (r && r.length > 0) { + e = []; + let n = 0, + i = 0; + R(r, function (E) { + let b = E.toString(); + if (Ja.regex.test(b)) { + let p = new Ja(b, n++); + (i += p.sizeInBytes), e.push(p); + } + }); + let a = 32 * 1024; + if (i > a) { + for (let o = 0, c = e.length - 1, s = 0, u = o, l = c; o < c; ) { + let f = e[o].sizeInBytes, + m = e[c].sizeInBytes; + if (((s += f + m), s > a)) { + let I = l - u + 1; + e.splice(u, I); + break; + } + (u = o), (l = c), o++, c--; + } + } + } + return e; +} +function gi(t) { + let e = ''; + if (t && ((e = t.typeName || t.name || ''), !e)) { + try { + let r = /function (.{1,200})\(/, + n = r.exec(t.constructor.toString()); + e = n && n.length > 1 ? n[1] : ''; + } catch (i) {} + } + return e; +} +function Wa(t) { + if (t) { + try { + if (!_(t)) { + let e = gi(t), + r = Ka(t, false); + return ( + (!r || r === '{}') && + (t[Mr] && ((t = t[Mr]), (e = gi(t))), (r = Ka(t, true))), + r.indexOf(e) !== 0 && e !== 'String' ? e + ':' + r : r + ); + } + } catch (n) {} + } + return '' + (t || ''); +} +let al; +let Mr; +let ft; +let qa; +let bs; +let Ga; +let Ds; +let he; +let ks; +let Ja; +let Rs = C(() => { + ne(); + Is(); + Es(); + Ps(); + ut(); + J(); + lt(); + (al = ''), + (Mr = 'error'), + (ft = 'stack'), + (qa = 'stackDetails'), + (bs = 'errorSrc'), + (Ga = 'message'), + (Ds = 'description'); + (he = (function (t) { + H(e, t); + function e(r, n, i, a, o, c) { + let s = t.call(this) || this; + return ( + (s.aiDataContract = { + ver: 1, + exceptions: 1, + severityLevel: 0, + properties: 0, + measurements: 0, + }), + sl(n) + ? ((s.exceptions = n.exceptions), + (s.properties = n.properties), + (s.measurements = n.measurements), + n.severityLevel && (s.severityLevel = n.severityLevel), + n.id && (s.id = n.id), + n.problemGroup && (s.problemGroup = n.problemGroup), + (s.ver = 2), + x(n.isManual) || (s.isManual = n.isManual)) + : (i || (i = {}), + (s.exceptions = [new ks(r, n, i)]), + (s.properties = je(r, i)), + (s.measurements = ze(r, a)), + o && (s.severityLevel = o), + c && (s.id = c)), + s + ); + } + return ( + (e.CreateAutoException = function (r, n, i, a, o, c, s, u) { + let l = gi(o || c || r); + return { + message: As(r, l), + url: n, + lineNumber: i, + columnNumber: a, + error: Wa(o || c || r), + evt: Wa(c || r), + typeName: l, + stackDetails: Fs(s || o || c), + errorSrc: u, + }; + }), + (e.CreateFromInterface = function (r, n, i, a) { + let o = + n.exceptions && + Vt(n.exceptions, function (s) { + return ks.CreateFromInterface(r, s); + }), + c = new e(r, yt({}, n, { exceptions: o }), i, a); + return c; + }), + (e.prototype.toInterface = function () { + let r = this, + n = r.exceptions, + i = r.properties, + a = r.measurements, + o = r.severityLevel, + c = r.ver, + s = r.problemGroup, + u = r.id, + l = r.isManual, + f = + (n instanceof Array && + Vt(n, function (m) { + return m.toInterface(); + })) || + void 0; + return { + ver: '4.0', + exceptions: f, + severityLevel: o, + properties: i, + measurements: a, + problemGroup: s, + id: u, + isManual: l, + }; + }), + (e.CreateSimpleException = function (r, n, i, a, o, c) { + return { + exceptions: [ + { hasFullStack: true, message: r, stack: o, typeName: n }, + ], + }; + }), + (e.envelopeType = 'Microsoft.ApplicationInsights.{0}.Exception'), + (e.dataType = 'ExceptionData'), + (e.formatError = Wa), + e + ); + })(Ts)), + (ks = (function (t) { + H(e, t); + function e(r, n, i) { + let a = t.call(this) || this; + if ( + ((a.aiDataContract = { + id: 0, + outerId: 0, + typeName: 1, + message: 1, + hasFullStack: 0, + stack: 0, + parsedStack: 2, + }), + ol(n)) + ) { + (a.typeName = n.typeName), + (a.message = n.message), + (a[ft] = n[ft]), + (a.parsedStack = n.parsedStack), + (a.hasFullStack = n.hasFullStack); + } else { + let o = n, + c = o && o.evt; + Bt(o) || (o = o[Mr] || c || o), + (a.typeName = ae(r, gi(o)) || le), + (a.message = Ar(r, As(n || o, a.typeName)) || le); + let s = n[qa] || Fs(n); + (a.parsedStack = ll(s)), + (a[ft] = ci(r, ul(s))), + (a.hasFullStack = Re(a.parsedStack) && a.parsedStack.length > 0), + i && (i.typeName = i.typeName || a.typeName); + } + return a; + } + return ( + (e.prototype.toInterface = function () { + let r = + this.parsedStack instanceof Array && + Vt(this.parsedStack, function (i) { + return i.toInterface(); + }), + n = { + id: this.id, + outerId: this.outerId, + typeName: this.typeName, + message: this.message, + hasFullStack: this.hasFullStack, + stack: this[ft], + parsedStack: r || void 0, + }; + return n; + }), + (e.CreateFromInterface = function (r, n) { + let i = + (n.parsedStack instanceof Array && + Vt(n.parsedStack, function (o) { + return Ja.CreateFromInterface(o); + })) || + n.parsedStack, + a = new e(r, yt({}, n, { parsedStack: i })); + return a; + }), + e + ); + })(ws)), + (Ja = (function (t) { + H(e, t); + function e(r, n) { + let i = t.call(this) || this; + if ( + ((i.sizeInBytes = 0), + (i.aiDataContract = { + level: 1, + method: 1, + assembly: 0, + fileName: 0, + line: 0, + }), + typeof r === 'string') + ) { + let a = r; + (i.level = n), + (i.method = al), + (i.assembly = oe(a)), + (i.fileName = ''), + (i.line = 0); + let o = a.match(e.regex); + o && + o.length >= 5 && + ((i.method = oe(o[2]) || i.method), + (i.fileName = oe(o[4])), + (i.line = parseInt(o[5]) || 0)); + } else { + (i.level = r.level), + (i.method = r.method), + (i.assembly = r.assembly), + (i.fileName = r.fileName), + (i.line = r.line), + (i.sizeInBytes = 0); + } + return ( + (i.sizeInBytes += i.method.length), + (i.sizeInBytes += i.fileName.length), + (i.sizeInBytes += i.assembly.length), + (i.sizeInBytes += e.baseSize), + (i.sizeInBytes += i.level.toString().length), + (i.sizeInBytes += i.line.toString().length), + i + ); + } + return ( + (e.CreateFromInterface = function (r) { + return new e(r, null); + }), + (e.prototype.toInterface = function () { + return { + level: this.level, + method: this.method, + assembly: this.assembly, + fileName: this.fileName, + line: this.line, + }; + }), + (e.regex = /^([\s]+at)?[\s]{0,50}([^\@\()]+?)[\s]{0,50}(\@|\()([^\(\n]+):([0-9]+):([0-9]+)(\)?)$/), + (e.baseSize = 58), + e + ); + })(Cs)); +}); +let Ms; +let Ls = C(() => { + Ms = (function () { + function t() { + (this.ver = 2), + (this.metrics = []), + (this.properties = {}), + (this.measurements = {}); + } + return t; + })(); +}); +let vi; +let Us = C(() => { + (function (t) { + (t[(t.Measurement = 0)] = 'Measurement'), + (t[(t.Aggregation = 1)] = 'Aggregation'); + })(vi || (vi = {})); +}); +let _s; +let Os = C(() => { + Us(); + _s = (function () { + function t() { + this.kind = vi.Measurement; + } + return t; + })(); +}); +let Hs; +let js = C(() => { + ne(); + Os(); + Hs = (function (t) { + H(e, t); + function e() { + let r = (t !== null && t.apply(this, arguments)) || this; + return ( + (r.aiDataContract = { + name: 1, + kind: 0, + value: 1, + count: 0, + min: 0, + max: 0, + stdDev: 0, + }), + r + ); + } + return e; + })(_s); +}); +let Ve; +let zs = C(() => { + ne(); + Ls(); + ut(); + js(); + lt(); + Ve = (function (t) { + H(e, t); + function e(r, n, i, a, o, c, s, u) { + let l = t.call(this) || this; + l.aiDataContract = { ver: 1, metrics: 1, properties: 0 }; + let f = new Hs(); + return ( + (f.count = a > 0 ? a : void 0), + (f.max = isNaN(c) || c === null ? void 0 : c), + (f.min = isNaN(o) || o === null ? void 0 : o), + (f.name = ae(r, n) || le), + (f.value = i), + (l.metrics = [f]), + (l.properties = je(r, s)), + (l.measurements = ze(r, u)), + l + ); + } + return ( + (e.envelopeType = 'Microsoft.ApplicationInsights.{0}.Metric'), + (e.dataType = 'MetricData'), + e + ); + })(Ms); +}); +let gr; +let hi = C(() => { + ne(); + Va(); + gr = (function (t) { + H(e, t); + function e() { + let r = t.call(this) || this; + return (r.ver = 2), (r.properties = {}), (r.measurements = {}), r; + } + return e; + })(mi); +}); +let Fe; +let Bs = C(() => { + ne(); + hi(); + ut(); + ln(); + lt(); + Fe = (function (t) { + H(e, t); + function e(r, n, i, a, o, c, s) { + let u = t.call(this) || this; + return ( + (u.aiDataContract = { + ver: 1, + name: 0, + url: 0, + duration: 0, + properties: 0, + measurements: 0, + id: 0, + }), + (u.id = ui(r, s)), + (u.url = Tt(r, i)), + (u.name = ae(r, n) || le), + isNaN(a) || (u.duration = Ge(a)), + (u.properties = je(r, o)), + (u.measurements = ze(r, c)), + u + ); + } + return ( + (e.envelopeType = 'Microsoft.ApplicationInsights.{0}.Pageview'), + (e.dataType = 'PageviewData'), + e + ); + })(gr); +}); +let Vs; +let qs = C(() => { + Vs = (function () { + function t() { + (this.ver = 2), + (this.success = true), + (this.properties = {}), + (this.measurements = {}); + } + return t; + })(); +}); +let qe; +let Gs = C(() => { + ne(); + ut(); + Ha(); + qs(); + ln(); + qe = (function (t) { + H(e, t); + function e(r, n, i, a, o, c, s, u, l, f, m, I) { + l === void 0 && (l = 'Ajax'); + let E = t.call(this) || this; + (E.aiDataContract = { + id: 1, + ver: 1, + name: 0, + resultCode: 0, + duration: 0, + success: 0, + data: 0, + target: 0, + type: 0, + properties: 0, + measurements: 0, + kind: 0, + value: 0, + count: 0, + min: 0, + max: 0, + stdDev: 0, + dependencyKind: 0, + dependencySource: 0, + commandName: 0, + dependencyTypeName: 0, + }), + (E.id = n), + (E.duration = Ge(o)), + (E.success = c), + (E.resultCode = s + ''), + (E.type = ae(r, l)); + let b = gs(r, i, u, a); + return ( + (E.data = Tt(r, a) || b.data), + (E.target = ae(r, b.target)), + f && (E.target = E.target + ' | ' + f), + (E.name = ae(r, b.name)), + (E.properties = je(r, m)), + (E.measurements = ze(r, I)), + E + ); + } + return ( + (e.envelopeType = 'Microsoft.ApplicationInsights.{0}.RemoteDependency'), + (e.dataType = 'RemoteDependencyData'), + e + ); + })(Vs); +}); +let Ks; +let Ws = C(() => { + Ks = (function () { + function t() { + (this.ver = 2), (this.properties = {}), (this.measurements = {}); + } + return t; + })(); +}); +let $e; +let Js = C(() => { + ne(); + Ws(); + ut(); + lt(); + $e = (function (t) { + H(e, t); + function e(r, n, i, a, o) { + let c = t.call(this) || this; + return ( + (c.aiDataContract = { + ver: 1, + message: 1, + severityLevel: 0, + properties: 0, + }), + (n = n || le), + (c.message = Ar(r, n)), + (c.properties = je(r, a)), + (c.measurements = ze(r, o)), + i && (c.severityLevel = i), + c + ); + } + return ( + (e.envelopeType = 'Microsoft.ApplicationInsights.{0}.Message'), + (e.dataType = 'MessageData'), + e + ); + })(Ks); +}); +let Xs; +let Ys = C(() => { + ne(); + hi(); + Xs = (function (t) { + H(e, t); + function e() { + let r = t.call(this) || this; + return (r.ver = 2), (r.properties = {}), (r.measurements = {}), r; + } + return e; + })(gr); +}); +let Ze; +let $s = C(() => { + ne(); + Ys(); + ut(); + lt(); + Ze = (function (t) { + H(e, t); + function e(r, n, i, a, o, c, s) { + let u = t.call(this) || this; + return ( + (u.aiDataContract = { + ver: 1, + name: 0, + url: 0, + duration: 0, + perfTotal: 0, + networkConnect: 0, + sentRequest: 0, + receivedResponse: 0, + domProcessing: 0, + properties: 0, + measurements: 0, + }), + (u.url = Tt(r, i)), + (u.name = ae(r, n) || le), + (u.properties = je(r, o)), + (u.measurements = ze(r, c)), + s && + ((u.domProcessing = s.domProcessing), + (u.duration = s.duration), + (u.networkConnect = s.networkConnect), + (u.perfTotal = s.perfTotal), + (u.receivedResponse = s.receivedResponse), + (u.sentRequest = s.sentRequest)), + u + ); + } + return ( + (e.envelopeType = + 'Microsoft.ApplicationInsights.{0}.PageviewPerformance'), + (e.dataType = 'PageviewPerformanceData'), + e + ); + })(Xs); +}); +let xt; +let Zs = C(() => { + ne(); + Ba(); + xt = (function (t) { + H(e, t); + function e(r, n) { + let i = t.call(this) || this; + return ( + (i.aiDataContract = { baseType: 1, baseData: 1 }), + (i.baseType = r), + (i.baseData = n), + i + ); + } + return e; + })(In); +}); +let _t; +let Qs = C(() => { + (function (t) { + (t[(t.Verbose = 0)] = 'Verbose'), + (t[(t.Information = 1)] = 'Information'), + (t[(t.Warning = 2)] = 'Warning'), + (t[(t.Error = 3)] = 'Error'), + (t[(t.Critical = 4)] = 'Critical'); + })(_t || (_t = {})); +}); +let Xa; +let ec = C(() => { + J(); + Xa = (function () { + function t() {} + return ( + (t.getConfig = function (e, r, n, i) { + i === void 0 && (i = false); + let a; + return ( + n && + e.extensionConfig && + e.extensionConfig[n] && + !x(e.extensionConfig[n][r]) + ? (a = e.extensionConfig[n][r]) + : (a = e[r]), + x(a) ? i : a + ); + }), + t + ); + })(); +}); +function Qt(t) { + let e = 'ai.' + t + '.'; + return function (r) { + return e + r; + }; +} +let En; +let be; +let xi; +let Ur; +let Ya; +let er; +let vr; +let wn; +let hr; +let $a = C(() => { + ne(); + J(); + (En = Qt('application')), + (be = Qt('device')), + (xi = Qt('location')), + (Ur = Qt('operation')), + (Ya = Qt('session')), + (er = Qt('user')), + (vr = Qt('cloud')), + (wn = Qt('internal')), + (hr = (function (t) { + H(e, t); + function e() { + return t.call(this) || this; + } + return e; + })( + qi({ + applicationVersion: En('ver'), + applicationBuild: En('build'), + applicationTypeId: En('typeId'), + applicationId: En('applicationId'), + applicationLayer: En('layer'), + deviceId: be('id'), + deviceIp: be('ip'), + deviceLanguage: be('language'), + deviceLocale: be('locale'), + deviceModel: be('model'), + deviceFriendlyName: be('friendlyName'), + deviceNetwork: be('network'), + deviceNetworkName: be('networkName'), + deviceOEMName: be('oemName'), + deviceOS: be('os'), + deviceOSVersion: be('osVersion'), + deviceRoleInstance: be('roleInstance'), + deviceRoleName: be('roleName'), + deviceScreenResolution: be('screenResolution'), + deviceType: be('type'), + deviceMachineName: be('machineName'), + deviceVMName: be('vmName'), + deviceBrowser: be('browser'), + deviceBrowserVersion: be('browserVersion'), + locationIp: xi('ip'), + locationCountry: xi('country'), + locationProvince: xi('province'), + locationCity: xi('city'), + operationId: Ur('id'), + operationName: Ur('name'), + operationParentId: Ur('parentId'), + operationRootId: Ur('rootId'), + operationSyntheticSource: Ur('syntheticSource'), + operationCorrelationVector: Ur('correlationVector'), + sessionId: Ya('id'), + sessionIsFirst: Ya('isFirst'), + sessionIsNew: Ya('isNew'), + userAccountAcquisitionDate: er('accountAcquisitionDate'), + userAccountId: er('accountId'), + userAgent: er('userAgent'), + userId: er('id'), + userStoreRegion: er('storeRegion'), + userAuthUserId: er('authUserId'), + userAnonymousUserAcquisitionDate: er('anonUserAcquisitionDate'), + userAuthenticatedUserAcquisitionDate: er('authUserAcquisitionDate'), + cloudName: vr('name'), + cloudRole: vr('role'), + cloudRoleVer: vr('roleVer'), + cloudRoleInstance: vr('roleInstance'), + cloudEnvironment: vr('environment'), + cloudLocation: vr('location'), + cloudDeploymentUnit: vr('deploymentUnit'), + internalNodeName: wn('nodeName'), + internalSdkVersion: wn('sdkVersion'), + internalAgentVersion: wn('agentVersion'), + internalSnippet: wn('snippet'), + internalSdkSrc: wn('sdkSrc'), + }) + )); +}); +let rt; +let tc = C(() => { + ut(); + J(); + lt(); + rt = (function () { + function t() {} + return ( + (t.create = function (e, r, n, i, a, o) { + if (((n = ae(i, n) || le), x(e) || x(r) || x(n))) { + throw Error("Input doesn't contain all required fields"); + } + let c = { + name: n, + time: Me(new Date()), + iKey: '', + ext: o || {}, + tags: [], + data: {}, + baseType: r, + baseData: e, + }; + return ( + x(a) || + Q(a, function (s, u) { + c.data[s] = u; + }), + c + ); + }), + t + ); + })(); +}); +let _e; +let re; +let rc = C(() => { + $a(); + (_e = { + UserExt: 'user', + DeviceExt: 'device', + TraceExt: 'trace', + WebExt: 'web', + AppExt: 'app', + OSExt: 'os', + SessionExt: 'ses', + SDKExt: 'sdk', + }), + (re = new hr()); +}); +let Ot; +let _r; +let yi; +let xe = C(() => { + Ha(); + vs(); + wa(); + lt(); + Ba(); + za(); + ys(); + Ss(); + Rs(); + zs(); + Bs(); + hi(); + Gs(); + Js(); + $s(); + Zs(); + Qs(); + ec(); + $a(); + ut(); + tc(); + rc(); + Na(); + ln(); + Aa(); + Ma(); + Ua(); + (Ot = 'AppInsightsPropertiesPlugin'), + (_r = 'AppInsightsChannelPlugin'), + (yi = 'ApplicationInsightsAnalytics'); +}); +let nc; +let ic = C(() => { + xe(); + J(); + Te(); + nc = (function () { + function t(e, r, n, i) { + W(t, this, function (a) { + let o = null, + c = [], + s = false, + u; + n && (u = n.logger); + function l() { + n && + R(n.getTransmissionControls(), function (m) { + R(m, function (I) { + return I.flush(true); + }); + }); + } + function f(m) { + c.push(m), + o || + (o = setInterval(function () { + let I = c.slice(0), + E = false; + (c = []), + R(I, function (b) { + b() ? (E = true) : c.push(b); + }), + c.length === 0 && (clearInterval(o), (o = null)), + E && l(); + }, 100)); + } + a.trackPageView = function (m, I) { + let E = m.name; + if (x(E) || typeof E !== 'string') { + let b = Ne(); + E = m.name = (b && b.title) || ''; + } + let p = m.uri; + if (x(p) || typeof p !== 'string') { + let v = et(); + p = m.uri = (v && v.href) || ''; + } + if (!i.isPerformanceTimingSupported()) { + e.sendPageViewInternal(m, I), + l(), + u.throwInternal( + S.WARNING, + h.NavigationTimingNotSupported, + 'trackPageView: navigation timing API used for calculation of page duration is not supported in this browser. This page view will be collected without duration and timing info.' + ); + return; + } + let y = false, + w, + L = i.getPerformanceTiming().navigationStart; + L > 0 && + ((w = ve(L, +new Date())), + i.shouldCollectDuration(w) || (w = void 0)); + let F; + !x(I) && !x(I.duration) && (F = I.duration), + (r || !isNaN(F)) && + (isNaN(F) && (I || (I = {}), (I.duration = w)), + e.sendPageViewInternal(m, I), + l(), + (y = true)); + let Y = 6e4; + I || (I = {}), + f(function () { + let Se = false; + try { + if (i.isPerformanceTimingDataReady()) { + Se = true; + let X = { name: E, uri: p }; + i.populatePageViewPerformanceEvent(X), + !X.isValid && !y + ? ((I.duration = w), e.sendPageViewInternal(m, I)) + : (y || + ((I.duration = X.durationMs), + e.sendPageViewInternal(m, I)), + s || + (e.sendPageViewPerformanceInternal(X, I), + (s = true))); + } else { + L > 0 && + ve(L, +new Date()) > Y && + ((Se = true), + y || ((I.duration = Y), e.sendPageViewInternal(m, I))); + } + } catch (me) { + u.throwInternal( + S.CRITICAL, + h.TrackPVFailedCalc, + 'trackPageView failed on page load calculation: ' + G(me), + { exception: O(me) } + ); + } + return Se; + }); + }; + }); + } + return t; + })(); +}); +let ac; +let fl; +let oc = C(() => { + xe(); + J(); + (ac = (function () { + function t(e, r) { + (this.prevPageVisitDataKeyName = 'prevPageVisitData'), + (this.pageVisitTimeTrackingHandler = r), + (this._logger = e); + } + return ( + (t.prototype.trackPreviousPageVisit = function (e, r) { + try { + let n = this.restartPageVisitTimer(e, r); + n && + this.pageVisitTimeTrackingHandler( + n.pageName, + n.pageUrl, + n.pageVisitTime + ); + } catch (i) { + this._logger.warnToConsole( + 'Auto track page visit time failed, metric will not be collected: ' + + O(i) + ); + } + }), + (t.prototype.restartPageVisitTimer = function (e, r) { + try { + let n = this.stopPageVisitTimer(); + return this.startPageVisitTimer(e, r), n; + } catch (i) { + return ( + this._logger.warnToConsole('Call to restart failed: ' + O(i)), null + ); + } + }), + (t.prototype.startPageVisitTimer = function (e, r) { + try { + if (wt()) { + $t(this._logger, this.prevPageVisitDataKeyName) != null && + Ae( + 'Cannot call startPageVisit consecutively without first calling stopPageVisit' + ); + let n = new fl(e, r), + i = Pe().stringify(n); + Zt(this._logger, this.prevPageVisitDataKeyName, i); + } + } catch (a) { + this._logger.warnToConsole('Call to start failed: ' + O(a)); + } + }), + (t.prototype.stopPageVisitTimer = function () { + try { + if (wt()) { + let e = de(), + r = $t(this._logger, this.prevPageVisitDataKeyName); + if (r && vt()) { + let n = Pe().parse(r); + return ( + (n.pageVisitTime = e - n.pageVisitStartTime), + vn(this._logger, this.prevPageVisitDataKeyName), + n + ); + } else { + return null; + } + } + return null; + } catch (i) { + return ( + this._logger.warnToConsole('Stop page visit timer failed: ' + O(i)), + null + ); + } + }), + t + ); + })()), + (fl = (function () { + function t(e, r) { + (this.pageVisitStartTime = de()), + (this.pageName = e), + (this.pageUrl = r); + } + return t; + })()); +}); +let sc; +let cc = C(() => { + xe(); + J(); + sc = (function () { + function t(e) { + (this.MAX_DURATION_ALLOWED = 36e5), e && (this._logger = e.logger); + } + return ( + (t.prototype.populatePageViewPerformanceEvent = function (e) { + e.isValid = false; + let r = this.getPerformanceNavigationTiming(), + n = this.getPerformanceTiming(), + i = 0, + a = 0, + o = 0, + c = 0, + s = 0; + (r || n) && + (r + ? ((i = r.duration), + (a = + r.startTime === 0 + ? r.connectEnd + : ve(r.startTime, r.connectEnd)), + (o = ve(r.requestStart, r.responseStart)), + (c = ve(r.responseStart, r.responseEnd)), + (s = ve(r.responseEnd, r.loadEventEnd))) + : ((i = ve(n.navigationStart, n.loadEventEnd)), + (a = ve(n.navigationStart, n.connectEnd)), + (o = ve(n.requestStart, n.responseStart)), + (c = ve(n.responseStart, n.responseEnd)), + (s = ve(n.responseEnd, n.loadEventEnd))), + i === 0 + ? this._logger.throwInternal( + S.WARNING, + h.ErrorPVCalc, + 'error calculating page view performance.', + { total: i, network: a, request: o, response: c, dom: s } + ) + : this.shouldCollectDuration(i, a, o, c, s) + ? i < Math.floor(a) + Math.floor(o) + Math.floor(c) + Math.floor(s) + ? this._logger.throwInternal( + S.WARNING, + h.ClientPerformanceMathError, + 'client performance math error.', + { total: i, network: a, request: o, response: c, dom: s } + ) + : ((e.durationMs = i), + (e.perfTotal = e.duration = Ge(i)), + (e.networkConnect = Ge(a)), + (e.sentRequest = Ge(o)), + (e.receivedResponse = Ge(c)), + (e.domProcessing = Ge(s)), + (e.isValid = true)) + : this._logger.throwInternal( + S.WARNING, + h.InvalidDurationValue, + "Invalid page load duration value. Browser perf data won't be sent.", + { total: i, network: a, request: o, response: c, dom: s } + )); + }), + (t.prototype.getPerformanceTiming = function () { + return this.isPerformanceTimingSupported() ? Ye().timing : null; + }), + (t.prototype.getPerformanceNavigationTiming = function () { + return this.isPerformanceNavigationTimingSupported() + ? Ye().getEntriesByType('navigation')[0] + : null; + }), + (t.prototype.isPerformanceNavigationTimingSupported = function () { + let e = Ye(); + return ( + e && e.getEntriesByType && e.getEntriesByType('navigation').length > 0 + ); + }), + (t.prototype.isPerformanceTimingSupported = function () { + let e = Ye(); + return e && e.timing; + }), + (t.prototype.isPerformanceTimingDataReady = function () { + let e = Ye(), + r = e ? e.timing : 0; + return ( + r && + r.domainLookupStart > 0 && + r.navigationStart > 0 && + r.responseStart > 0 && + r.requestStart > 0 && + r.loadEventEnd > 0 && + r.responseEnd > 0 && + r.connectEnd > 0 && + r.domLoading > 0 + ); + }), + (t.prototype.shouldCollectDuration = function () { + for (var e = [], r = 0; r < arguments.length; r++) { + e[r] = arguments[r]; + } + let n = Ue() || {}, + i = [ + 'googlebot', + 'adsbot-google', + 'apis-google', + 'mediapartners-google', + ], + a = n.userAgent, + o = false; + if (a) { + for (var c = 0; c < i.length; c++) { + o = o || a.toLowerCase().indexOf(i[c]) !== -1; + } + } + if (o) { + return false; + } + for (var c = 0; c < e.length; c++) { + if (e[c] < 0 || e[c] >= this.MAX_DURATION_ALLOWED) { + return false; + } + } + return true; + }), + t + ); + })(); +}); +function Pn(t, e) { + t && t.dispatchEvent && e && t.dispatchEvent(e); +} +let uc; +let Za; +let bn; +let lc; +let fc = C(() => { + ne(); + xe(); + J(); + ic(); + oc(); + cc(); + Te(); + (uc = 'duration'), (Za = 'event'); + (bn = (function (t) { + H(e, t); + function e() { + let r = t.call(this) || this; + (r.identifier = yi), (r.priority = 180), (r.autoRoutePVDelay = 500); + let n, + i, + a, + o = 0, + c, + s; + return ( + W(e, r, function (u, l) { + let f = et(true); + (c = (f && f.href) || ''), + (u.getCookieMgr = function () { + return cr(u.core); + }), + (u.processTelemetry = function (p, v) { + ct( + u.core, + function () { + return u.identifier + ':processTelemetry'; + }, + function () { + let y = false, + w = u._telemetryInitializers.length; + v = u._getTelCtx(v); + for (let L = 0; L < w; ++L) { + let F = u._telemetryInitializers[L]; + if (F) { + try { + if (F.apply(null, [p]) === false) { + y = true; + break; + } + } catch (Y) { + v.diagLog().throwInternal( + S.CRITICAL, + h.TelemetryInitializerFailed, + 'One of telemetry initializers failed, telemetry item will not be sent: ' + + G(Y), + { exception: O(Y) }, + true + ); + } + } + } + y || u.processNext(p, v); + }, + function () { + return { item: p }; + }, + !p.sync + ); + }), + (u.trackEvent = function (p, v) { + try { + let y = rt.create( + p, + Be.dataType, + Be.envelopeType, + u.diagLog(), + v + ); + u.core.track(y); + } catch (w) { + u.diagLog().throwInternal( + S.WARNING, + h.TrackTraceFailed, + 'trackTrace failed, trace will not be collected: ' + G(w), + { exception: O(w) } + ); + } + }), + (u.startTrackEvent = function (p) { + try { + n.start(p); + } catch (v) { + u.diagLog().throwInternal( + S.CRITICAL, + h.StartTrackEventFailed, + 'startTrackEvent failed, event will not be collected: ' + + G(v), + { exception: O(v) } + ); + } + }), + (u.stopTrackEvent = function (p, v, y) { + try { + n.stop(p, void 0, v); + } catch (w) { + u.diagLog().throwInternal( + S.CRITICAL, + h.StopTrackEventFailed, + 'stopTrackEvent failed, event will not be collected: ' + G(w), + { exception: O(w) } + ); + } + }), + (u.trackTrace = function (p, v) { + try { + let y = rt.create( + p, + $e.dataType, + $e.envelopeType, + u.diagLog(), + v + ); + u.core.track(y); + } catch (w) { + u.diagLog().throwInternal( + S.WARNING, + h.TrackTraceFailed, + 'trackTrace failed, trace will not be collected: ' + G(w), + { exception: O(w) } + ); + } + }), + (u.trackMetric = function (p, v) { + try { + let y = rt.create( + p, + Ve.dataType, + Ve.envelopeType, + u.diagLog(), + v + ); + u.core.track(y); + } catch (w) { + u.diagLog().throwInternal( + S.CRITICAL, + h.TrackMetricFailed, + 'trackMetric failed, metric will not be collected: ' + G(w), + { exception: O(w) } + ); + } + }), + (u.trackPageView = function (p, v) { + try { + let y = p || {}; + u._pageViewManager.trackPageView( + y, + yt({}, y.properties, y.measurements, v) + ), + u.config.autoTrackPageVisitTime && + u._pageVisitTimeManager.trackPreviousPageVisit( + y.name, + y.uri + ); + } catch (w) { + u.diagLog().throwInternal( + S.CRITICAL, + h.TrackPVFailed, + 'trackPageView failed, page view will not be collected: ' + + G(w), + { exception: O(w) } + ); + } + }), + (u.sendPageViewInternal = function (p, v, y) { + let w = Ne(); + w && (p.refUri = p.refUri === void 0 ? w.referrer : p.refUri); + let L = rt.create( + p, + Fe.dataType, + Fe.envelopeType, + u.diagLog(), + v, + y + ); + u.core.track(L), (o = 0); + }), + (u.sendPageViewPerformanceInternal = function (p, v, y) { + let w = rt.create( + p, + Ze.dataType, + Ze.envelopeType, + u.diagLog(), + v, + y + ); + u.core.track(w); + }), + (u.trackPageViewPerformance = function (p, v) { + try { + u._pageViewPerformanceManager.populatePageViewPerformanceEvent( + p + ), + u.sendPageViewPerformanceInternal(p, v); + } catch (y) { + u.diagLog().throwInternal( + S.CRITICAL, + h.TrackPVFailed, + 'trackPageViewPerformance failed, page view will not be collected: ' + + G(y), + { exception: O(y) } + ); + } + }), + (u.startTrackPage = function (p) { + try { + if (typeof p !== 'string') { + let v = Ne(); + p = (v && v.title) || ''; + } + i.start(p); + } catch (y) { + u.diagLog().throwInternal( + S.CRITICAL, + h.StartTrackFailed, + 'startTrackPage failed, page view may not be collected: ' + + G(y), + { exception: O(y) } + ); + } + }), + (u.stopTrackPage = function (p, v, y, w) { + try { + if (typeof p !== 'string') { + let L = Ne(); + p = (L && L.title) || ''; + } + if (typeof v !== 'string') { + let F = et(); + v = (F && F.href) || ''; + } + i.stop(p, v, y, w), + u.config.autoTrackPageVisitTime && + u._pageVisitTimeManager.trackPreviousPageVisit(p, v); + } catch (Y) { + u.diagLog().throwInternal( + S.CRITICAL, + h.StopTrackFailed, + 'stopTrackPage failed, page view will not be collected: ' + + G(Y), + { exception: O(Y) } + ); + } + }), + (u.sendExceptionInternal = function (p, v, y) { + let w = p.exception || p.error || new Error(le), + L = new he( + u.diagLog(), + w, + p.properties || v, + p.measurements, + p.severityLevel, + p.id + ).toInterface(), + F = rt.create( + L, + he.dataType, + he.envelopeType, + u.diagLog(), + v, + y + ); + u.core.track(F); + }), + (u.trackException = function (p, v) { + try { + u.sendExceptionInternal(p, v); + } catch (y) { + u.diagLog().throwInternal( + S.CRITICAL, + h.TrackExceptionFailed, + 'trackException failed, exception will not be collected: ' + + G(y), + { exception: O(y) } + ); + } + }), + (u._onerror = function (p) { + let v = p && p.error, + y = p && p.evt; + try { + if (!y) { + let w = Ct(); + w && (y = w[Za]); + } + let L = (p && p.url) || (Ne() || {}).URL, + F = + p.errorSrc || + 'window.onerror@' + + L + + ':' + + (p.lineNumber || 0) + + ':' + + (p.columnNumber || 0), + Y = { + errorSrc: F, + url: L, + lineNumber: p.lineNumber || 0, + columnNumber: p.columnNumber || 0, + message: p.message, + }; + un(p.message, p.url, p.lineNumber, p.columnNumber, p.error) + ? b( + he.CreateAutoException( + "Script error: The browser's same-origin policy prevents us from getting the details of this exception. Consider using the 'crossorigin' attribute.", + L, + p.lineNumber || 0, + p.columnNumber || 0, + v, + y, + null, + F + ), + Y + ) + : (p.errorSrc || (p.errorSrc = F), + u.trackException( + { exception: p, severityLevel: _t.Error }, + Y + )); + } catch (X) { + let Se = v ? v.name + ', ' + v.message : 'null'; + u.diagLog().throwInternal( + S.CRITICAL, + h.ExceptionWhileLoggingError, + '_onError threw exception while logging error, error will not be collected: ' + + G(X), + { exception: O(X), errorString: Se } + ); + } + }), + (u.addTelemetryInitializer = function (p) { + u._telemetryInitializers.push(p); + }), + (u.initialize = function (p, v, y, w) { + if (!u.isInitialized()) { + if (x(v)) { + throw Error('Error initializing'); + } + l.initialize(p, v, y, w), u.setInitialized(false); + let L = u._getTelCtx(), + F = u.identifier; + u.config = L.getExtCfg(F); + let Y = e.getDefaultConfig(p); + Y !== void 0 && + Q(Y, function (D, z) { + (u.config[D] = L.getConfig(F, D, z)), + u.config[D] === void 0 && (u.config[D] = z); + }), + u.config.isStorageUseDisabled && pn(); + let Se = { + instrumentationKey: function () { + return p.instrumentationKey; + }, + accountId: function () { + return u.config.accountId || p.accountId; + }, + sessionRenewalMs: function () { + return u.config.sessionRenewalMs || p.sessionRenewalMs; + }, + sessionExpirationMs: function () { + return ( + u.config.sessionExpirationMs || p.sessionExpirationMs + ); + }, + sampleRate: function () { + return u.config.samplingPercentage || p.samplingPercentage; + }, + sdkExtension: function () { + return u.config.sdkExtension || p.sdkExtension; + }, + isBrowserLinkTrackingEnabled: function () { + return ( + u.config.isBrowserLinkTrackingEnabled || + p.isBrowserLinkTrackingEnabled + ); + }, + appId: function () { + return u.config.appId || p.appId; + }, + }; + (u._pageViewPerformanceManager = new sc(u.core)), + (u._pageViewManager = new nc( + r, + u.config.overridePageViewDuration, + u.core, + u._pageViewPerformanceManager + )), + (u._pageVisitTimeManager = new ac( + u.diagLog(), + function (D, z, U) { + return m(D, z, U); + } + )), + (u._telemetryInitializers = u._telemetryInitializers || []), + I(Se), + (n = new lc(u.diagLog(), 'trackEvent')), + (n.action = function (D, z, U, q) { + q || (q = {}), + (q[uc] = U.toString()), + u.trackEvent({ name: D, properties: q }); + }), + (i = new lc(u.diagLog(), 'trackPageView')), + (i.action = function (D, z, U, q, $) { + x(q) && (q = {}), (q[uc] = U.toString()); + let ie = { + name: D, + uri: z, + properties: q, + measurements: $, + }; + u.sendPageViewInternal(ie, q); + }); + let X = Ct(), + me = Xi(), + De = et(true), + pt = r; + if ( + u.config.disableExceptionTracking === false && + !u.config.autoExceptionInstrumented && + X + ) { + let at = 'onerror', + dt = X[at]; + (X.onerror = function (D, z, U, q, $) { + let ie = X[Za], + Ht = dt && dt(D, z, U, q, $); + return ( + Ht !== true && + pt._onerror(he.CreateAutoException(D, z, U, q, $, ie)), + Ht + ); + }), + (u.config.autoExceptionInstrumented = true); + } + if ( + u.config.disableExceptionTracking === false && + u.config.enableUnhandledPromiseRejectionTracking === true && + !u.config.autoUnhandledPromiseInstrumented && + X + ) { + let d = 'onunhandledrejection', + T = X[d]; + (X[d] = function (D) { + let z = X[Za], + U = T && T.call(X, D); + return ( + U !== true && + pt._onerror( + he.CreateAutoException( + D.reason.toString(), + De ? De.href : '', + 0, + 0, + D, + z + ) + ), + U + ); + }), + (u.config.autoUnhandledPromiseInstrumented = true); + } + if ( + u.config.enableAutoRouteTracking === true && + me && + j(me.pushState) && + j(me.replaceState) && + X && + typeof Event !== 'undefined' + ) { + let A = r; + R(y, function (D) { + D.identifier === Ot && (a = D); + }), + (me.pushState = (function (D) { + return function () { + let U = D.apply(this, arguments); + return ( + Pn(X, Lt(A.config.namePrefix + 'pushState')), + Pn(X, Lt(A.config.namePrefix + 'locationchange')), + U + ); + }; + })(me.pushState)), + (me.replaceState = (function (D) { + return function () { + let U = D.apply(this, arguments); + return ( + Pn(X, Lt(A.config.namePrefix + 'replaceState')), + Pn(X, Lt(A.config.namePrefix + 'locationchange')), + U + ); + }; + })(me.replaceState)), + X.addEventListener && + (X.addEventListener( + A.config.namePrefix + 'popstate', + function () { + Pn(X, Lt(A.config.namePrefix + 'locationchange')); + } + ), + X.addEventListener( + A.config.namePrefix + 'locationchange', + function () { + if (a && a.context && a.context.telemetryTrace) { + a.context.telemetryTrace.traceID = He(); + let D = '_unknown_'; + De && + De.pathname && + (D = De.pathname + (De.hash || '')), + (a.context.telemetryTrace.name = D); + } + s && (c = s), + (s = (De && De.href) || ''), + setTimeout( + function (z) { + A.trackPageView({ + refUri: z, + properties: { duration: 0 }, + }); + }.bind(r, c), + A.autoRoutePVDelay + ); + } + )); + } + u.setInitialized(true); + } + }); + function m(p, v, y) { + let w = { PageName: p, PageUrl: v }; + u.trackMetric( + { + name: 'PageVisitTime', + average: y, + max: y, + min: y, + sampleCount: 1, + }, + w + ); + } + function I(p) { + if (!p.isBrowserLinkTrackingEnabled()) { + let v = ['/browserLinkSignalR/', '/__browserLink/'], + y = function (w) { + if (w.baseType === qe.dataType) { + let L = w.baseData; + if (L) { + for (let F = 0; F < v.length; F++) { + if (L.target && L.target.indexOf(v[F]) >= 0) { + return false; + } + } + } + } + return true; + }; + E(y); + } + } + function E(p) { + u._telemetryInitializers.push(p); + } + function b(p, v) { + let y = rt.create(p, he.dataType, he.envelopeType, u.diagLog(), v); + u.core.track(y); + } + }), + r + ); + } + return ( + (e.getDefaultConfig = function (r) { + return ( + r || (r = {}), + (r.sessionRenewalMs = 30 * 60 * 1e3), + (r.sessionExpirationMs = 24 * 60 * 60 * 1e3), + (r.disableExceptionTracking = ee(r.disableExceptionTracking)), + (r.autoTrackPageVisitTime = ee(r.autoTrackPageVisitTime)), + (r.overridePageViewDuration = ee(r.overridePageViewDuration)), + (r.enableUnhandledPromiseRejectionTracking = ee( + r.enableUnhandledPromiseRejectionTracking + )), + (isNaN(r.samplingPercentage) || + r.samplingPercentage <= 0 || + r.samplingPercentage >= 100) && + (r.samplingPercentage = 100), + (r.isStorageUseDisabled = ee(r.isStorageUseDisabled)), + (r.isBrowserLinkTrackingEnabled = ee(r.isBrowserLinkTrackingEnabled)), + (r.enableAutoRouteTracking = ee(r.enableAutoRouteTracking)), + (r.namePrefix = r.namePrefix || ''), + (r.enableDebug = ee(r.enableDebug)), + (r.disableFlushOnBeforeUnload = ee(r.disableFlushOnBeforeUnload)), + (r.disableFlushOnUnload = ee( + r.disableFlushOnUnload, + r.disableFlushOnBeforeUnload + )), + r + ); + }), + (e.Version = '2.6.4'), + e + ); + })(tt)), + (lc = (function () { + function t(e, r) { + let n = this, + i = {}; + (n.start = function (a) { + typeof i[a] !== 'undefined' && + e.throwInternal( + S.WARNING, + h.StartCalledMoreThanOnce, + 'start was called more than once for this event without calling stop.', + { name: a, key: a }, + true + ), + (i[a] = +new Date()); + }), + (n.stop = function (a, o, c, s) { + let u = i[a]; + if (isNaN(u)) { + e.throwInternal( + S.WARNING, + h.StopCalledWithoutStart, + 'stop was called without a corresponding start.', + { name: a, key: a }, + true + ); + } else { + let l = +new Date(), + f = ve(u, l); + n.action(a, o, f, c, s); + } + delete i[a], (i[a] = void 0); + }); + } + return t; + })()); +}); +let Qa = C(() => { + fc(); +}); +let pc; +let dc; +let mc = C(() => { + xe(); + J(); + Te(); + (pc = (function () { + function t(e) { + let r = []; + W(t, this, function (n) { + (n.enqueue = function (i) { + r.push(i); + }), + (n.count = function () { + return r.length; + }), + (n.clear = function () { + r.length = 0; + }), + (n.getItems = function () { + return r.slice(0); + }), + (n.batchPayloads = function (i) { + if (i && i.length > 0) { + let a = e.emitLineDelimitedJson() + ? i.join(` +`) + : '[' + i.join(',') + ']'; + return a; + } + return null; + }), + (n.markAsSent = function (i) { + n.clear(); + }), + (n.clearSent = function (i) {}); + }); + } + return t; + })()), + (dc = (function () { + function t(e, r) { + let n = false, + i; + W(t, this, function (a) { + let o = u(t.BUFFER_KEY), + c = u(t.SENT_BUFFER_KEY); + (i = o.concat(c)), + i.length > t.MAX_BUFFER_SIZE && (i.length = t.MAX_BUFFER_SIZE), + l(t.SENT_BUFFER_KEY, []), + l(t.BUFFER_KEY, i), + (a.enqueue = function (f) { + if (i.length >= t.MAX_BUFFER_SIZE) { + n || + (e.throwInternal( + S.WARNING, + h.SessionStorageBufferFull, + 'Maximum buffer size reached: ' + i.length, + true + ), + (n = true)); + return; + } + i.push(f), l(t.BUFFER_KEY, i); + }), + (a.count = function () { + return i.length; + }), + (a.clear = function () { + (i = []), + l(t.BUFFER_KEY, []), + l(t.SENT_BUFFER_KEY, []), + (n = false); + }), + (a.getItems = function () { + return i.slice(0); + }), + (a.batchPayloads = function (f) { + if (f && f.length > 0) { + let m = r.emitLineDelimitedJson() + ? f.join(` +`) + : '[' + f.join(',') + ']'; + return m; + } + return null; + }), + (a.markAsSent = function (f) { + (i = s(f, i)), l(t.BUFFER_KEY, i); + let m = u(t.SENT_BUFFER_KEY); + m instanceof Array && + f instanceof Array && + ((m = m.concat(f)), + m.length > t.MAX_BUFFER_SIZE && + (e.throwInternal( + S.CRITICAL, + h.SessionStorageBufferFull, + 'Sent buffer reached its maximum size: ' + m.length, + true + ), + (m.length = t.MAX_BUFFER_SIZE)), + l(t.SENT_BUFFER_KEY, m)); + }), + (a.clearSent = function (f) { + let m = u(t.SENT_BUFFER_KEY); + (m = s(f, m)), l(t.SENT_BUFFER_KEY, m); + }); + function s(f, m) { + let I = []; + return ( + R(m, function (E) { + !j(E) && Nt(f, E) === -1 && I.push(E); + }), + I + ); + } + function u(f) { + let m = f; + try { + m = r.namePrefix && r.namePrefix() ? r.namePrefix() + '_' + m : m; + let I = $t(e, m); + if (I) { + let E = Pe().parse(I); + if ((_(E) && (E = Pe().parse(E)), E && Re(E))) { + return E; + } + } + } catch (b) { + e.throwInternal( + S.CRITICAL, + h.FailedToRestoreStorageBuffer, + ' storage key: ' + m + ', ' + G(b), + { exception: O(b) } + ); + } + return []; + } + function l(f, m) { + let I = f; + try { + I = r.namePrefix && r.namePrefix() ? r.namePrefix() + '_' + I : I; + let E = JSON.stringify(m); + Zt(e, I, E); + } catch (b) { + Zt(e, I, JSON.stringify([])), + e.throwInternal( + S.WARNING, + h.FailedToSetStorageBuffer, + ' storage key: ' + I + ', ' + G(b) + '. Buffer cleared', + { exception: O(b) } + ); + } + } + }); + } + return ( + (t.BUFFER_KEY = 'AI_buffer'), + (t.SENT_BUFFER_KEY = 'AI_sentBuffer'), + (t.MAX_BUFFER_SIZE = 2e3), + t + ); + })()); +}); +function ye(t, e, r) { + return K(t, e, r, Pr); +} +let eo; +let se; +let ke; +let gc; +let fe; +let vc; +let to; +let hc; +let xc; +let yc; +let Sc; +let Cc; +let Ic = C(() => { + ne(); + xe(); + J(); + (eo = 'baseType'), (se = 'baseData'), (ke = 'properties'), (gc = 'true'); + (fe = (function () { + function t() {} + return ( + (t.extractPropsAndMeasurements = function (e, r, n) { + x(e) || + Q(e, function (i, a) { + ir(a) + ? (n[i] = a) + : _(a) + ? (r[i] = a) + : vt() && (r[i] = Pe().stringify(a)); + }); + }), + (t.createEnvelope = function (e, r, n, i) { + let a = new Tn(e, i, r); + ye(a, 'sampleRate', n[lr]), + (n[se] || {}).startTime && (a.time = Me(n[se].startTime)), + (a.iKey = n.iKey); + let o = n.iKey.replace(/-/g, ''); + return ( + (a.name = a.name.replace('{0}', o)), + t.extractPartAExtensions(n, a), + (n.tags = n.tags || []), + Kn(a) + ); + }), + (t.extractPartAExtensions = function (e, r) { + let n = (r.tags = r.tags || {}), + i = (e.ext = e.ext || {}), + a = (e.tags = e.tags || []), + o = i.user; + o && + (ye(n, re.userAuthUserId, o.authId), + ye(n, re.userId, o.id || o.localId)); + let c = i.app; + c && ye(n, re.sessionId, c.sesId); + let s = i.device; + s && + (ye(n, re.deviceId, s.id || s.localId), + ye(n, re.deviceType, s.deviceClass), + ye(n, re.deviceIp, s.ip), + ye(n, re.deviceModel, s.model), + ye(n, re.deviceType, s.deviceType)); + let u = e.ext.web; + if (u) { + ye(n, re.deviceLanguage, u.browserLang), + ye(n, re.deviceBrowserVersion, u.browserVer), + ye(n, re.deviceBrowser, u.browser); + let l = (r.data = r.data || {}), + f = (l[se] = l[se] || {}), + m = (f[ke] = f[ke] || {}); + ye(m, 'domain', u.domain), + ye(m, 'isManual', u.isManual ? gc : null), + ye(m, 'screenRes', u.screenRes), + ye(m, 'userConsent', u.userConsent ? gc : null); + } + let I = i.os; + I && ye(n, re.deviceOS, I.name); + let E = i.trace; + E && + (ye(n, re.operationParentId, E.parentID), + ye(n, re.operationName, E.name), + ye(n, re.operationId, E.traceID)); + for (var b = {}, p = a.length - 1; p >= 0; p--) { + let v = a[p]; + Q(v, function (w, L) { + b[w] = L; + }), + a.splice(p, 1); + } + Q(a, function (w, L) { + b[w] = L; + }); + let y = yt({}, n, b); + y[re.internalSdkVersion] || + (y[re.internalSdkVersion] = 'javascript:' + t.Version), + (r.tags = Kn(y)); + }), + (t.prototype.Init = function (e, r) { + (this._logger = e), + x(r[se]) && + this._logger.throwInternal( + S.CRITICAL, + h.TelemetryEnvelopeInvalid, + 'telemetryItem.baseData cannot be null.' + ); + }), + (t.Version = '2.6.4'), + t + ); + })()), + (vc = (function (t) { + H(e, t); + function e() { + return (t !== null && t.apply(this, arguments)) || this; + } + return ( + (e.prototype.Create = function (r, n) { + t.prototype.Init.call(this, r, n); + let i = n[se].measurements || {}, + a = n[se][ke] || {}; + fe.extractPropsAndMeasurements(n.data, a, i); + let o = n[se]; + if (x(o)) { + return r.warnToConsole('Invalid input for dependency data'), null; + } + let c = o[ke] && o[ke][Fr] ? o[ke][Fr] : 'GET', + s = new qe( + r, + o.id, + o.target, + o.name, + o.duration, + o.success, + o.responseCode, + c, + o.type, + o.correlationContext, + a, + i + ), + u = new xt(qe.dataType, s); + return fe.createEnvelope(r, qe.envelopeType, n, u); + }), + (e.DependencyEnvelopeCreator = new e()), + e + ); + })(fe)), + (to = (function (t) { + H(e, t); + function e() { + return (t !== null && t.apply(this, arguments)) || this; + } + return ( + (e.prototype.Create = function (r, n) { + t.prototype.Init.call(this, r, n); + let i = {}, + a = {}; + n[eo] !== Be.dataType && (i.baseTypeSource = n[eo]), + n[eo] === Be.dataType + ? ((i = n[se][ke] || {}), (a = n[se].measurements || {})) + : n[se] && fe.extractPropsAndMeasurements(n[se], i, a), + fe.extractPropsAndMeasurements(n.data, i, a); + let o = n[se].name, + c = new Be(r, o, i, a), + s = new xt(Be.dataType, c); + return fe.createEnvelope(r, Be.envelopeType, n, s); + }), + (e.EventEnvelopeCreator = new e()), + e + ); + })(fe)), + (hc = (function (t) { + H(e, t); + function e() { + return (t !== null && t.apply(this, arguments)) || this; + } + return ( + (e.prototype.Create = function (r, n) { + t.prototype.Init.call(this, r, n); + let i = n[se].measurements || {}, + a = n[se][ke] || {}; + fe.extractPropsAndMeasurements(n.data, a, i); + let o = n[se], + c = he.CreateFromInterface(r, o, a, i), + s = new xt(he.dataType, c); + return fe.createEnvelope(r, he.envelopeType, n, s); + }), + (e.ExceptionEnvelopeCreator = new e()), + e + ); + })(fe)), + (xc = (function (t) { + H(e, t); + function e() { + return (t !== null && t.apply(this, arguments)) || this; + } + return ( + (e.prototype.Create = function (r, n) { + t.prototype.Init.call(this, r, n); + let i = n[se], + a = i[ke] || {}, + o = i.measurements || {}; + fe.extractPropsAndMeasurements(n.data, a, o); + let c = new Ve( + r, + i.name, + i.average, + i.sampleCount, + i.min, + i.max, + a, + o + ), + s = new xt(Ve.dataType, c); + return fe.createEnvelope(r, Ve.envelopeType, n, s); + }), + (e.MetricEnvelopeCreator = new e()), + e + ); + })(fe)), + (yc = (function (t) { + H(e, t); + function e() { + return (t !== null && t.apply(this, arguments)) || this; + } + return ( + (e.prototype.Create = function (r, n) { + t.prototype.Init.call(this, r, n); + let i = 'duration', + a, + o = n[se]; + !x(o) && !x(o[ke]) && !x(o[ke][i]) + ? ((a = o[ke][i]), delete o[ke][i]) + : !x(n.data) && + !x(n.data[i]) && + ((a = n.data[i]), delete n.data[i]); + let c = n[se], + s; + ((n.ext || {}).trace || {}).traceID && (s = n.ext.trace.traceID); + let u = c.id || s, + l = c.name, + f = c.uri, + m = c[ke] || {}, + I = c.measurements || {}; + if ( + (x(c.refUri) || (m.refUri = c.refUri), + x(c.pageType) || (m.pageType = c.pageType), + x(c.isLoggedIn) || (m.isLoggedIn = c.isLoggedIn.toString()), + !x(c[ke])) + ) { + let E = c[ke]; + Q(E, function (v, y) { + m[v] = y; + }); + } + fe.extractPropsAndMeasurements(n.data, m, I); + let b = new Fe(r, l, f, a, m, I, u), + p = new xt(Fe.dataType, b); + return fe.createEnvelope(r, Fe.envelopeType, n, p); + }), + (e.PageViewEnvelopeCreator = new e()), + e + ); + })(fe)), + (Sc = (function (t) { + H(e, t); + function e() { + return (t !== null && t.apply(this, arguments)) || this; + } + return ( + (e.prototype.Create = function (r, n) { + t.prototype.Init.call(this, r, n); + let i = n[se], + a = i.name, + o = i.uri || i.url, + c = i[ke] || {}, + s = i.measurements || {}; + fe.extractPropsAndMeasurements(n.data, c, s); + let u = new Ze(r, a, o, void 0, c, s, i), + l = new xt(Ze.dataType, u); + return fe.createEnvelope(r, Ze.envelopeType, n, l); + }), + (e.PageViewPerformanceEnvelopeCreator = new e()), + e + ); + })(fe)), + (Cc = (function (t) { + H(e, t); + function e() { + return (t !== null && t.apply(this, arguments)) || this; + } + return ( + (e.prototype.Create = function (r, n) { + t.prototype.Init.call(this, r, n); + let i = n[se].message, + a = n[se].severityLevel, + o = n[se][ke] || {}, + c = n[se].measurements || {}; + fe.extractPropsAndMeasurements(n.data, o, c); + let s = new $e(r, i, a, o, c), + u = new xt($e.dataType, s); + return fe.createEnvelope(r, $e.envelopeType, n, u); + }), + (e.TraceEnvelopeCreator = new e()), + e + ); + })(fe)); +}); +let Tc; +let Ec = C(() => { + J(); + Te(); + Tc = (function () { + function t(e) { + W(t, this, function (r) { + r.serialize = function (o) { + let c = n(o, 'root'); + try { + return Pe().stringify(c); + } catch (s) { + e.throwInternal( + S.CRITICAL, + h.CannotSerializeObject, + s && j(s.toString) ? s.toString() : 'Error serializing object', + null, + true + ); + } + }; + function n(o, c) { + let s = '__aiCircularRefCheck', + u = {}; + if (!o) { + return ( + e.throwInternal( + S.CRITICAL, + h.CannotSerializeObject, + 'cannot serialize object because it is null or undefined', + { name: c }, + true + ), + u + ); + } + if (o[s]) { + return ( + e.throwInternal( + S.WARNING, + h.CircularReferenceDetected, + 'Circular reference detected while serializing object', + { name: c }, + true + ), + u + ); + } + if (!o.aiDataContract) { + if (c === 'measurements') { + u = a(o, 'number', c); + } else if (c === 'properties') { + u = a(o, 'string', c); + } else if (c === 'tags') { + u = a(o, 'string', c); + } else if (Re(o)) { + u = i(o, c); + } else { + e.throwInternal( + S.WARNING, + h.CannotSerializeObjectNonSerializable, + 'Attempting to serialize an object which does not implement ISerializable', + { name: c }, + true + ); + try { + Pe().stringify(o), (u = o); + } catch (l) { + e.throwInternal( + S.CRITICAL, + h.CannotSerializeObject, + l && j(l.toString) + ? l.toString() + : 'Error serializing object', + null, + true + ); + } + } + return u; + } + return ( + (o[s] = true), + Q(o.aiDataContract, function (l, f) { + let m = j(f) ? f() & 1 : f & 1, + I = j(f) ? f() & 4 : f & 4, + E = f & 2, + b = o[l] !== void 0, + p = st(o[l]) && o[l] !== null; + if (m && !b && !E) { + e.throwInternal( + S.CRITICAL, + h.MissingRequiredFieldSpecification, + 'Missing required field specification. The field is required but not present on source', + { field: l, name: c } + ); + } else if (!I) { + let v = void 0; + p ? (E ? (v = i(o[l], l)) : (v = n(o[l], l))) : (v = o[l]), + v !== void 0 && (u[l] = v); + } + }), + delete o[s], + u + ); + } + function i(o, c) { + let s; + if (o) { + if (!Re(o)) { + e.throwInternal( + S.CRITICAL, + h.ItemNotInArray, + `This field was specified as an array in the contract but the item is not an array.\r +`, + { name: c }, + true + ); + } else { + s = []; + for (let u = 0; u < o.length; u++) { + let l = o[u], + f = n(l, c + '[' + u + ']'); + s.push(f); + } + } + } + return s; + } + function a(o, c, s) { + let u; + return ( + o && + ((u = {}), + Q(o, function (l, f) { + if (c === 'string') { + f === void 0 + ? (u[l] = 'undefined') + : f === null + ? (u[l] = 'null') + : f.toString + ? (u[l] = f.toString()) + : (u[l] = 'invalid field: toString() is not defined.'); + } else if (c === 'number') { + if (f === void 0) { + u[l] = 'undefined'; + } else if (f === null) { + u[l] = 'null'; + } else { + let m = parseFloat(f); + isNaN(m) ? (u[l] = 'NaN') : (u[l] = m); + } + } else { + (u[l] = 'invalid field: ' + s + ' is of unknown type.'), + e.throwInternal(S.CRITICAL, u[l], null, true); + } + })), + u + ); + } + }); + } + return t; + })(); +}); +let pl; +let ro; +let wc = C(() => { + J(); + Te(); + (pl = (function () { + function t() { + let e = Ct(), + r = Ne(), + n = false, + i = true; + W(t, this, function (a) { + try { + if ( + (e && + Jt.Attach(e, 'online', s) && + (Jt.Attach(e, 'offline', u), (n = true)), + r) + ) { + let o = r.body || r; + pe(o.ononline) || ((o.ononline = s), (o.onoffline = u), (n = true)); + } + if (n) { + let c = Ue(); + c && !x(c.onLine) && (i = c.onLine); + } + } catch (l) { + n = false; + } + (a.isListening = n), + (a.isOnline = function () { + let l = true, + f = Ue(); + return n ? (l = i) : f && !x(f.onLine) && (l = f.onLine), l; + }), + (a.isOffline = function () { + return !a.isOnline(); + }); + function s() { + i = true; + } + function u() { + i = false; + } + }); + } + return (t.Offline = new t()), t; + })()), + (ro = pl.Offline); +}); +let Pc; +let bc = C(() => { + Pc = (function () { + function t() {} + return ( + (t.prototype.getHashCodeScore = function (e) { + let r = this.getHashCode(e) / t.INT_MAX_VALUE; + return r * 100; + }), + (t.prototype.getHashCode = function (e) { + if (e === '') { + return 0; + } + for (; e.length < t.MIN_INPUT_LENGTH; ) { + e = e.concat(e); + } + for (var r = 5381, n = 0; n < e.length; ++n) { + (r = (r << 5) + r + e.charCodeAt(n)), (r = r & r); + } + return Math.abs(r); + }), + (t.INT_MAX_VALUE = 2147483647), + (t.MIN_INPUT_LENGTH = 8), + t + ); + })(); +}); +let Dc; +let Ac = C(() => { + bc(); + xe(); + Dc = (function () { + function t() { + (this.hashCodeGeneragor = new Pc()), (this.keys = new hr()); + } + return ( + (t.prototype.getSamplingScore = function (e) { + let r = 0; + return ( + e.tags && e.tags[this.keys.userId] + ? (r = this.hashCodeGeneragor.getHashCodeScore( + e.tags[this.keys.userId] + )) + : e.ext && e.ext.user && e.ext.user.id + ? (r = this.hashCodeGeneragor.getHashCodeScore(e.ext.user.id)) + : e.tags && e.tags[this.keys.operationId] + ? (r = this.hashCodeGeneragor.getHashCodeScore( + e.tags[this.keys.operationId] + )) + : e.ext && e.ext.telemetryTrace && e.ext.telemetryTrace.traceID + ? (r = this.hashCodeGeneragor.getHashCodeScore( + e.ext.telemetryTrace.traceID + )) + : (r = Math.random() * 100), + r + ); + }), + t + ); + })(); +}); +let Nc; +let Fc = C(() => { + Ac(); + xe(); + J(); + Nc = (function () { + function t(e, r) { + (this.INT_MAX_VALUE = 2147483647), + (this._logger = r || kt(null)), + (e > 100 || e < 0) && + (this._logger.throwInternal( + S.WARNING, + h.SampleRateOutOfRange, + 'Sampling rate is out of range (0..100). Sampling will be disabled, you may be sending too much data which may affect your AI service level.', + { samplingRate: e }, + true + ), + (e = 100)), + (this.sampleRate = e), + (this.samplingScoreGenerator = new Dc()); + } + return ( + (t.prototype.isSampledIn = function (e) { + let r = this.sampleRate, + n = false; + return r == null || r >= 100 || e.baseType === Ve.dataType + ? true + : ((n = this.samplingScoreGenerator.getSamplingScore(e) < r), n); + }), + t + ); + })(); +}); +function Si(t) { + try { + return t.responseText; + } catch (e) {} + return null; +} +let Dn; +let kc = C(() => { + ne(); + mc(); + Ic(); + Ec(); + xe(); + J(); + wc(); + Fc(); + Te(); + Dn = (function (t) { + H(e, t); + function e() { + let r = t.call(this) || this; + (r.priority = 1001), + (r.identifier = _r), + (r._XMLHttpRequestSupported = false); + let n, + i, + a, + o, + c, + s, + u = {}; + return ( + W(e, r, function (l, f) { + function m() { + Ae('Method not implemented.'); + } + (l.pause = m), + (l.resume = m), + (l.flush = function () { + try { + l.triggerSend(true, null, 1); + } catch (d) { + l.diagLog().throwInternal( + S.CRITICAL, + h.FlushFailed, + 'flush failed, telemetry will not be collected: ' + G(d), + { exception: O(d) } + ); + } + }), + (l.onunloadFlush = function () { + if ( + (l._senderConfig.onunloadDisableBeacon() === false || + l._senderConfig.isBeaconApiDisabled() === false) && + Nr() + ) { + try { + l.triggerSend(true, p, 2); + } catch (d) { + l.diagLog().throwInternal( + S.CRITICAL, + h.FailedToSendQueuedTelemetry, + 'failed to flush with beacon sender on page unload, telemetry will not be collected: ' + + G(d), + { exception: O(d) } + ); + } + } else { + l.flush(); + } + }), + (l.teardown = m), + (l.addHeader = function (d, T) { + u[d] = T; + }), + (l.initialize = function (d, T, A, D) { + f.initialize(d, T, A, D); + let z = l._getTelCtx(), + U = l.identifier; + (c = new Tc(T.logger)), + (n = 0), + (i = null), + (a = 0), + (l._sender = null), + (s = 0); + let q = e._getDefaultAppInsightsChannelConfig(); + if ( + ((l._senderConfig = e._getEmptyAppInsightsChannelConfig()), + Q(q, function (g, P) { + l._senderConfig[g] = function () { + return z.getConfig(U, g, P()); + }; + }), + (l._buffer = + l._senderConfig.enableSessionStorageBuffer() && wt() + ? new dc(l.diagLog(), l._senderConfig) + : new pc(l._senderConfig)), + (l._sample = new Nc( + l._senderConfig.samplingPercentage(), + l.diagLog() + )), + dt(d) || + l + .diagLog() + .throwInternal( + S.CRITICAL, + h.InvalidInstrumentationKey, + 'Invalid Instrumentation key ' + d.instrumentationKey + ), + !Rr(l._senderConfig.endpointUrl()) && + l._senderConfig.customHeaders() && + l._senderConfig.customHeaders().length > 0 && + R(l._senderConfig.customHeaders(), function (g) { + r.addHeader(g.header, g.value); + }), + !l._senderConfig.isBeaconApiDisabled() && Nr()) + ) { + l._sender = p; + } else { + let $ = we('XMLHttpRequest'); + if ($) { + let ie = new $(); + 'withCredentials' in ie + ? ((l._sender = v), (l._XMLHttpRequestSupported = true)) + : typeof XDomainRequest !== Oe && (l._sender = me); + } else { + let Ht = we('fetch'); + Ht && (l._sender = y); + } + } + }), + (l.processTelemetry = function (d, T) { + T = l._getTelCtx(T); + try { + if (l._senderConfig.disableTelemetry()) { + return; + } + if (!d) { + T.diagLog().throwInternal( + S.CRITICAL, + h.CannotSendEmptyTelemetry, + 'Cannot send empty telemetry' + ); + return; + } + if (d.baseData && !d.baseType) { + T.diagLog().throwInternal( + S.CRITICAL, + h.InvalidEvent, + 'Cannot send telemetry without baseData and baseType' + ); + return; + } + if ((d.baseType || (d.baseType = 'EventData'), !l._sender)) { + T.diagLog().throwInternal( + S.CRITICAL, + h.SenderNotInitialized, + 'Sender was not initialized' + ); + return; + } + if (I(d)) { + d[lr] = l._sample.sampleRate; + } else { + T.diagLog().throwInternal( + S.WARNING, + h.TelemetrySampledAndNotSent, + 'Telemetry item was sampled out and not sent', + { SampleRate: l._sample.sampleRate } + ); + return; + } + let A = e.constructEnvelope( + d, + l._senderConfig.instrumentationKey(), + T.diagLog() + ); + if (!A) { + T.diagLog().throwInternal( + S.CRITICAL, + h.CreateEnvelopeError, + 'Unable to create an AppInsights envelope' + ); + return; + } + let D = false; + if ( + (d.tags && + d.tags[Ut] && + (R(d.tags[Ut], function ($) { + try { + $ && + $(A) === false && + ((D = true), + T.diagLog().warnToConsole( + 'Telemetry processor check returns false' + )); + } catch (ie) { + T.diagLog().throwInternal( + S.CRITICAL, + h.TelemetryInitializerFailed, + 'One of telemetry initializers failed, telemetry item will not be sent: ' + + G(ie), + { exception: O(ie) }, + true + ); + } + }), + delete d.tags[Ut]), + D) + ) { + return; + } + let z = c.serialize(A), + U = l._buffer.getItems(), + q = l._buffer.batchPayloads(U); + q && + q.length + z.length > l._senderConfig.maxBatchSizeInBytes() && + l.triggerSend(true, null, 10), + l._buffer.enqueue(z), + Y(); + } catch ($) { + T.diagLog().throwInternal( + S.WARNING, + h.FailedAddingTelemetryToBuffer, + "Failed adding telemetry to the sender's buffer, some telemetry will be lost: " + + G($), + { exception: O($) } + ); + } + l.processNext(d, T); + }), + (l._xhrReadyStateChange = function (d, T, A) { + d.readyState === 4 && + E(d.status, T, d.responseURL, A, X(d), Si(d) || d.response); + }), + (l.triggerSend = function (d, T, A) { + d === void 0 && (d = true); + try { + if (l._senderConfig.disableTelemetry()) { + l._buffer.clear(); + } else { + if (l._buffer.count() > 0) { + let D = l._buffer.getItems(); + at(A || 0, d), T ? T.call(r, D, d) : l._sender(D, d); + } + a = +new Date(); + } + clearTimeout(o), (o = null), (i = null); + } catch (U) { + let z = or(); + (!z || z > 9) && + l + .diagLog() + .throwInternal( + S.CRITICAL, + h.TransmissionFailed, + 'Telemetry transmission failed, some telemetry will be lost: ' + + G(U), + { exception: O(U) } + ); + } + }), + (l._onError = function (d, T, A) { + l + .diagLog() + .throwInternal( + S.WARNING, + h.OnError, + 'Failed to send telemetry.', + { message: T } + ), + l._buffer.clearSent(d); + }), + (l._onPartialSuccess = function (d, T) { + for ( + var A = [], D = [], z = T.errors.reverse(), U = 0, q = z; + U < q.length; + U++ + ) { + let $ = q[U], + ie = d.splice($.index, 1)[0]; + Se($.statusCode) ? D.push(ie) : A.push(ie); + } + d.length > 0 && l._onSuccess(d, T.itemsAccepted), + A.length > 0 && + l._onError( + A, + X( + null, + [ + 'partial success', + T.itemsAccepted, + 'of', + T.itemsReceived, + ].join(' ') + ) + ), + D.length > 0 && + (L(D), + l + .diagLog() + .throwInternal( + S.WARNING, + h.TransmissionFailed, + 'Partial success. Delivered: ' + + d.length + + ', Failed: ' + + A.length + + '. Will retry to send ' + + D.length + + ' our of ' + + T.itemsReceived + + ' items' + )); + }), + (l._onSuccess = function (d, T) { + l._buffer.clearSent(d); + }), + (l._xdrOnLoad = function (d, T) { + let A = Si(d); + if (d && (A + '' == '200' || A === '')) { + (n = 0), l._onSuccess(T, 0); + } else { + let D = w(A); + D && + D.itemsReceived && + D.itemsReceived > D.itemsAccepted && + !l._senderConfig.isRetryDisabled() + ? l._onPartialSuccess(T, D) + : l._onError(T, De(d)); + } + }); + function I(d) { + return l._sample.isSampledIn(d); + } + function E(d, T, A, D, z, U) { + let q = null; + if ( + (l._appId || ((q = w(U)), q && q.appId && (l._appId = q.appId)), + (d < 200 || d >= 300) && d !== 0) + ) { + if ((d === 301 || d === 307 || d === 308) && !b(A)) { + l._onError(T, z); + return; + } + !l._senderConfig.isRetryDisabled() && Se(d) + ? (L(T), + l + .diagLog() + .throwInternal( + S.WARNING, + h.TransmissionFailed, + '. Response code ' + + d + + '. Will retry to send ' + + T.length + + ' items.' + )) + : l._onError(T, z); + } else if (ro.isOffline()) { + if (!l._senderConfig.isRetryDisabled()) { + let $ = 10; + L(T, $), + l + .diagLog() + .throwInternal( + S.WARNING, + h.TransmissionFailed, + '. Offline - Response Code: ' + + d + + '. Offline status: ' + + ro.isOffline() + + '. Will retry to send ' + + T.length + + ' items.' + ); + } + } else { + b(A), + d === 206 + ? (q || (q = w(U)), + q && !l._senderConfig.isRetryDisabled() + ? l._onPartialSuccess(T, q) + : l._onError(T, z)) + : ((n = 0), l._onSuccess(T, D)); + } + } + function b(d) { + return s >= 10 + ? false + : !x(d) && d !== '' && d !== l._senderConfig.endpointUrl() + ? ((l._senderConfig.endpointUrl = function () { + return d; + }), + ++s, + true) + : false; + } + function p(d, T) { + let A = l._senderConfig.endpointUrl(), + D = l._buffer.batchPayloads(d), + z = new Blob([D], { type: 'text/plain;charset=UTF-8' }), + U = Ue().sendBeacon(A, z); + U + ? (l._buffer.markAsSent(d), l._onSuccess(d, d.length)) + : (v(d, true), + l + .diagLog() + .throwInternal( + S.WARNING, + h.TransmissionFailed, + '. Failed to send telemetry with Beacon API, retried with xhrSender.' + )); + } + function v(d, T) { + let A = new XMLHttpRequest(), + D = l._senderConfig.endpointUrl(); + try { + A[Et] = true; + } catch (U) {} + A.open('POST', D, T), + A.setRequestHeader('Content-type', 'application/json'), + Rr(D) && + A.setRequestHeader( + te.sdkContextHeader, + te.sdkContextHeaderAppIdRequest + ), + R(Qe(u), function (U) { + A.setRequestHeader(U, u[U]); + }), + (A.onreadystatechange = function () { + return l._xhrReadyStateChange(A, d, d.length); + }), + (A.onerror = function (U) { + return l._onError(d, X(A), U); + }); + let z = l._buffer.batchPayloads(d); + A.send(z), l._buffer.markAsSent(d); + } + function y(d, T) { + let A = l._senderConfig.endpointUrl(), + D = l._buffer.batchPayloads(d), + z = new Blob([D], { type: 'text/plain;charset=UTF-8' }), + U = new Headers(); + Rr(A) && + U.append(te.sdkContextHeader, te.sdkContextHeaderAppIdRequest), + R(Qe(u), function (ie) { + U.append(ie, u[ie]); + }); + let q = { method: 'POST', headers: U, body: z }, + $ = new Request(A, q); + fetch($) + .then(function (ie) { + if (ie.ok) { + ie.text().then(function (Ht) { + E(ie.status, d, ie.url, d.length, ie.statusText, Ht); + }), + l._buffer.markAsSent(d); + } else { + throw Error(ie.statusText); + } + }) + .catch(function (ie) { + l._onError(d, ie.message); + }); + } + function w(d) { + try { + if (d && d !== '') { + let T = Pe().parse(d); + if ( + T && + T.itemsReceived && + T.itemsReceived >= T.itemsAccepted && + T.itemsReceived - T.itemsAccepted === T.errors.length + ) { + return T; + } + } + } catch (A) { + l.diagLog().throwInternal( + S.CRITICAL, + h.InvalidBackendResponse, + 'Cannot parse the response. ' + G(A), + { response: d } + ); + } + return null; + } + function L(d, T) { + if ((T === void 0 && (T = 1), !(!d || d.length === 0))) { + l._buffer.clearSent(d), n++; + for (let A = 0, D = d; A < D.length; A++) { + let z = D[A]; + l._buffer.enqueue(z); + } + F(T), Y(); + } + } + function F(d) { + let T = 10, + A; + if (n <= 1) { + A = T; + } else { + let D = (Math.pow(2, n) - 1) / 2, + z = Math.floor(Math.random() * D * T) + 1; + (z = d * z), (A = Math.max(Math.min(z, 3600), T)); + } + let U = de() + A * 1e3; + i = U; + } + function Y() { + if (!o) { + let d = i ? Math.max(0, i - de()) : 0, + T = Math.max(l._senderConfig.maxBatchInterval(), d); + o = setTimeout(function () { + l.triggerSend(true, null, 1); + }, T); + } + } + function Se(d) { + return d === 408 || d === 429 || d === 500 || d === 503; + } + function X(d, T) { + return d + ? 'XMLHttpRequest,Status:' + d.status + ',Response:' + Si(d) || + d.response || + '' + : T; + } + function me(d, T) { + let A = Ct(), + D = new XDomainRequest(); + (D.onload = function () { + return l._xdrOnLoad(D, d); + }), + (D.onerror = function ($) { + return l._onError(d, De(D), $); + }); + let z = (A && A.location && A.location.protocol) || ''; + if (l._senderConfig.endpointUrl().lastIndexOf(z, 0) !== 0) { + l + .diagLog() + .throwInternal( + S.WARNING, + h.TransmissionFailed, + ". Cannot send XDomain request. The endpoint URL protocol doesn't match the hosting page protocol." + ), + l._buffer.clear(); + return; + } + let U = l._senderConfig.endpointUrl().replace(/^(https?:)/, ''); + D.open('POST', U); + let q = l._buffer.batchPayloads(d); + D.send(q), l._buffer.markAsSent(d); + } + function De(d, T) { + return d ? 'XDomainRequest,Response:' + Si(d) || '' : T; + } + function pt() { + let d = 'getNotifyMgr'; + return l.core[d] ? l.core[d]() : l.core._notificationManager; + } + function at(d, T) { + let A = pt(); + if (A && A.eventsSendRequest) { + try { + A.eventsSendRequest(d, T); + } catch (D) { + l.diagLog().throwInternal( + S.CRITICAL, + h.NotificationException, + 'send request notification failed: ' + G(D), + { exception: O(D) } + ); + } + } + } + function dt(d) { + let T = x(d.disableInstrumentationKeyValidation) + ? false + : d.disableInstrumentationKeyValidation; + if (T) { + return true; + } + let A = + '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$', + D = new RegExp(A); + return D.test(d.instrumentationKey); + } + }), + r + ); + } + return ( + (e.constructEnvelope = function (r, n, i) { + let a; + switch ( + (n !== r.iKey && !x(n) ? (a = yt({}, r, { iKey: n })) : (a = r), + a.baseType) + ) { + case Be.dataType: + return to.EventEnvelopeCreator.Create(i, a); + case $e.dataType: + return Cc.TraceEnvelopeCreator.Create(i, a); + case Fe.dataType: + return yc.PageViewEnvelopeCreator.Create(i, a); + case Ze.dataType: + return Sc.PageViewPerformanceEnvelopeCreator.Create(i, a); + case he.dataType: + return hc.ExceptionEnvelopeCreator.Create(i, a); + case Ve.dataType: + return xc.MetricEnvelopeCreator.Create(i, a); + case qe.dataType: + return vc.DependencyEnvelopeCreator.Create(i, a); + default: + return to.EventEnvelopeCreator.Create(i, a); + } + }), + (e._getDefaultAppInsightsChannelConfig = function () { + return { + endpointUrl: function () { + return 'https://dc.services.visualstudio.com/v2/track'; + }, + emitLineDelimitedJson: function () { + return false; + }, + maxBatchInterval: function () { + return 15e3; + }, + maxBatchSizeInBytes: function () { + return 102400; + }, + disableTelemetry: function () { + return false; + }, + enableSessionStorageBuffer: function () { + return true; + }, + isRetryDisabled: function () { + return false; + }, + isBeaconApiDisabled: function () { + return true; + }, + onunloadDisableBeacon: function () { + return false; + }, + instrumentationKey: function () {}, + namePrefix: function () {}, + samplingPercentage: function () { + return 100; + }, + customHeaders: function () {}, + }; + }), + (e._getEmptyAppInsightsChannelConfig = function () { + return { + endpointUrl: void 0, + emitLineDelimitedJson: void 0, + maxBatchInterval: void 0, + maxBatchSizeInBytes: void 0, + disableTelemetry: void 0, + enableSessionStorageBuffer: void 0, + isRetryDisabled: void 0, + isBeaconApiDisabled: void 0, + onunloadDisableBeacon: void 0, + instrumentationKey: void 0, + namePrefix: void 0, + samplingPercentage: void 0, + customHeaders: void 0, + }; + }), + e + ); + })(tt); +}); +let no = C(() => { + kc(); +}); +let dl; +let io; +let Rc; +let Mc = C(() => { + Te(); + xe(); + J(); + (dl = 'ai_session'), + (io = (function () { + function t() {} + return t; + })()), + (Rc = (function () { + function t(e, r) { + let n = this, + i, + a, + o = kt(r), + c = cr(r); + W(t, n, function (s) { + e || (e = {}), + j(e.sessionExpirationMs) || + (e.sessionExpirationMs = function () { + return t.acquisitionSpan; + }), + j(e.sessionRenewalMs) || + (e.sessionRenewalMs = function () { + return t.renewalSpan; + }), + (s.config = e); + let u = + s.config.sessionCookiePostfix && s.config.sessionCookiePostfix() + ? s.config.sessionCookiePostfix() + : s.config.namePrefix && s.config.namePrefix() + ? s.config.namePrefix() + : ''; + (i = function () { + return dl + u; + }), + (s.automaticSession = new io()), + (s.update = function () { + let b = de(), + p = false, + v = s.automaticSession; + v.id || (p = !l(v, b)); + let y = s.config.sessionExpirationMs(); + if (!p && y > 0) { + let w = s.config.sessionRenewalMs(), + L = b - v.acquisitionDate, + F = b - v.renewalDate; + (p = L < 0 || F < 0), (p = p || L > y), (p = p || F > w); + } + p ? m(b) : (!a || b - a > t.cookieUpdateInterval) && I(v, b); + }), + (s.backup = function () { + let b = s.automaticSession; + E(b.id, b.acquisitionDate, b.renewalDate); + }); + function l(b, p) { + let v = false, + y = c.get(i()); + if (y && j(y.split)) { + v = f(b, y); + } else { + let w = dn(o, i()); + w && (v = f(b, w)); + } + return v || !!b.id; + } + function f(b, p) { + let v = false, + y = ', session will be reset', + w = p.split('|'); + if (w.length >= 2) { + try { + let L = +w[1] || 0, + F = +w[2] || 0; + isNaN(L) || L <= 0 + ? o.throwInternal( + S.WARNING, + h.SessionRenewalDateIsZero, + 'AI session acquisition date is 0' + y + ) + : isNaN(F) || F <= 0 + ? o.throwInternal( + S.WARNING, + h.SessionRenewalDateIsZero, + 'AI session renewal date is 0' + y + ) + : w[0] && + ((b.id = w[0]), + (b.acquisitionDate = L), + (b.renewalDate = F), + (v = true)); + } catch (Y) { + o.throwInternal( + S.CRITICAL, + h.ErrorParsingAISessionCookie, + 'Error parsing ai_session value [' + + (p || '') + + ']' + + y + + ' - ' + + G(Y), + { exception: O(Y) } + ); + } + } + return v; + } + function m(b) { + let p = s.config || {}, + v = (p.getNewId ? p.getNewId() : null) || Wt; + (s.automaticSession.id = v(p.idLength ? p.idLength() : 22)), + (s.automaticSession.acquisitionDate = b), + I(s.automaticSession, b), + kr() || + o.throwInternal( + S.WARNING, + h.BrowserDoesNotSupportLocalStorage, + 'Browser does not support local storage. Session durations will be inaccurate.' + ); + } + function I(b, p) { + let v = b.acquisitionDate; + b.renewalDate = p; + let y = s.config, + w = y.sessionRenewalMs(), + L = v + y.sessionExpirationMs() - p, + F = [b.id, v, p], + Y = 0; + L < w ? (Y = L / 1e3) : (Y = w / 1e3); + let Se = y.cookieDomain ? y.cookieDomain() : null; + c.set(i(), F.join('|'), y.sessionExpirationMs() > 0 ? Y : null, Se), + (a = p); + } + function E(b, p, v) { + mn(o, i(), [b, p, v].join('|')); + } + }); + } + return ( + (t.acquisitionSpan = 864e5), + (t.renewalSpan = 18e5), + (t.cookieUpdateInterval = 6e4), + t + ); + })()); +}); +let Lc; +let Uc = C(() => { + Lc = (function () { + function t() {} + return t; + })(); +}); +let _c; +let Oc = C(() => { + _c = (function () { + function t() { + (this.id = 'browser'), (this.deviceClass = 'Browser'); + } + return t; + })(); +}); +let ml; +let Hc; +let jc = C(() => { + (ml = '2.6.4'), + (Hc = (function () { + function t(e) { + this.sdkVersion = + (e.sdkExtension && e.sdkExtension() ? e.sdkExtension() + '_' : '') + + 'javascript:' + + ml; + } + return t; + })()); +}); +function zc(t) { + return !(typeof t !== 'string' || !t || t.match(/,|;|=| |\|/)); +} +let Bc; +let Vc = C(() => { + Te(); + xe(); + J(); + Bc = (function () { + function t(e, r) { + this.isNewUser = false; + let n = kt(r), + i = cr(r), + a; + W(t, this, function (o) { + o.config = e; + let c = + o.config.userCookiePostfix && o.config.userCookiePostfix() + ? o.config.userCookiePostfix() + : ''; + a = function () { + return t.userCookieName + c; + }; + let s = i.get(a()); + if (s) { + o.isNewUser = false; + let u = s.split(t.cookieSeparator); + u.length > 0 && (o.id = u[0]); + } + if (!o.id) { + let l = e || {}, + f = (l.getNewId ? l.getNewId() : null) || Wt; + o.id = f(l.idLength ? e.idLength() : 22); + let m = 31536e3, + I = Me(new Date()); + (o.accountAcquisitionDate = I), (o.isNewUser = true); + let E = [o.id, I]; + i.set(a(), E.join(t.cookieSeparator), m); + let b = + e.namePrefix && e.namePrefix() + ? e.namePrefix() + 'ai_session' + : 'ai_session'; + gn(n, b); + } + o.accountId = e.accountId ? e.accountId() : void 0; + let p = i.get(t.authUserCookieName); + if (p) { + p = decodeURI(p); + let v = p.split(t.cookieSeparator); + v[0] && (o.authenticatedId = v[0]), + v.length > 1 && v[1] && (o.accountId = v[1]); + } + (o.setAuthenticatedUserContext = function (y, w, L) { + L === void 0 && (L = false); + let F = !zc(y) || (w && !zc(w)); + if (F) { + n.throwInternal( + S.WARNING, + h.SetAuthContextFailedAccountName, + 'Setting auth user context failed. User auth/account id should be of type string, and not contain commas, semi-colons, equal signs, spaces, or vertical-bars.', + true + ); + return; + } + o.authenticatedId = y; + let Y = o.authenticatedId; + w && + ((o.accountId = w), + (Y = [o.authenticatedId, o.accountId].join(t.cookieSeparator))), + L && i.set(t.authUserCookieName, encodeURI(Y)); + }), + (o.clearAuthenticatedUserContext = function () { + (o.authenticatedId = null), + (o.accountId = null), + i.del(t.authUserCookieName); + }); + }); + } + return ( + (t.cookieSeparator = '|'), + (t.userCookieName = 'ai_user'), + (t.authUserCookieName = 'ai_authUser'), + t + ); + })(); +}); +let qc; +let Gc = C(() => { + qc = (function () { + function t() {} + return t; + })(); +}); +let Kc; +let Wc = C(() => { + xe(); + J(); + Kc = (function () { + function t(e, r, n, i) { + let a = this; + (a.traceID = e || He()), (a.parentID = r), (a.name = n); + let o = et(); + !n && o && o.pathname && (a.name = o.pathname), (a.name = ae(i, a.name)); + } + return t; + })(); +}); +function Or(t, e) { + t && t[e] && Qe(t[e]).length === 0 && delete t[e]; +} +let Ci; +let Ii; +let Jc; +let Xc = C(() => { + Te(); + J(); + Mc(); + xe(); + Uc(); + Oc(); + jc(); + Vc(); + Gc(); + Wc(); + (Ci = 'ext'), (Ii = 'tags'); + Jc = (function () { + function t(e, r) { + let n = this, + i = e.logger; + (this.appId = function () { + return null; + }), + W(t, this, function (a) { + (a.application = new Lc()), + (a.internal = new Hc(r)), + ar() && + ((a.sessionManager = new Rc(r, e)), + (a.device = new _c()), + (a.location = new qc()), + (a.user = new Bc(r, e)), + (a.telemetryTrace = new Kc(void 0, void 0, void 0, i)), + (a.session = new io())), + (a.applySessionContext = function (o, c) { + let s = a.session, + u = a.sessionManager; + s && _(s.id) + ? K(ge(o.ext, _e.AppExt), 'sesId', s.id) + : u && + u.automaticSession && + K(ge(o.ext, _e.AppExt), 'sesId', u.automaticSession.id, _); + }), + (a.applyOperatingSystemContxt = function (o, c) { + K(o.ext, _e.OSExt, a.os); + }), + (a.applyApplicationContext = function (o, c) { + let s = a.application; + if (s) { + let u = ge(o, Ii); + K(u, re.applicationVersion, s.ver, _), + K(u, re.applicationBuild, s.build, _); + } + }), + (a.applyDeviceContext = function (o, c) { + let s = a.device; + if (s) { + let u = ge(ge(o, Ci), _e.DeviceExt); + K(u, 'localId', s.id, _), + K(u, 'ip', s.ip, _), + K(u, 'model', s.model, _), + K(u, 'deviceClass', s.deviceClass, _); + } + }), + (a.applyInternalContext = function (o, c) { + let s = a.internal; + if (s) { + let u = ge(o, Ii); + K(u, re.internalAgentVersion, s.agentVersion, _), + K(u, re.internalSdkVersion, s.sdkVersion, _), + (o.baseType === Ft.dataType || o.baseType === Fe.dataType) && + (K(u, re.internalSnippet, s.snippetVer, _), + K(u, re.internalSdkSrc, s.sdkSrc, _)); + } + }), + (a.applyLocationContext = function (o, c) { + let s = n.location; + s && K(ge(o, Ii, []), re.locationIp, s.ip, _); + }), + (a.applyOperationContext = function (o, c) { + let s = a.telemetryTrace; + if (s) { + let u = ge(ge(o, Ci), _e.TraceExt, { + traceID: void 0, + parentID: void 0, + }); + K(u, 'traceID', s.traceID, _), + K(u, 'name', s.name, _), + K(u, 'parentID', s.parentID, _); + } + }), + (a.applyWebContext = function (o, c) { + let s = n.web; + s && K(ge(o, Ci), _e.WebExt, s); + }), + (a.applyUserContext = function (o, c) { + let s = a.user; + if (s) { + let u = ge(o, Ii, []); + K(u, re.userAccountId, s.accountId, _); + let l = ge(ge(o, Ci), _e.UserExt); + K(l, 'id', s.id, _), K(l, 'authId', s.authenticatedId, _); + } + }), + (a.cleanUp = function (o, c) { + let s = o.ext; + s && + (Or(s, _e.DeviceExt), + Or(s, _e.UserExt), + Or(s, _e.WebExt), + Or(s, _e.OSExt), + Or(s, _e.AppExt), + Or(s, _e.TraceExt)); + }); + }); + } + return t; + })(); +}); +let gl; +let An; +let Yc = C(() => { + ne(); + Te(); + J(); + Xc(); + xe(); + (gl = (function (t) { + H(e, t); + function e() { + let r = t.call(this) || this; + (r.priority = 110), (r.identifier = Ot); + let n, i; + return ( + W(e, r, function (a, o) { + (a.initialize = function (s, u, l, f) { + o.initialize(s, u, l, f); + let m = a._getTelCtx(), + I = a.identifier, + E = e.getDefaultConfig(); + (i = i || {}), + Q(E, function (b, p) { + i[b] = function () { + return m.getConfig(I, b, p()); + }; + }), + (a.context = new Jc(u, i)), + (n = cn(l, _r)), + (a.context.appId = function () { + return n ? n._appId : null; + }), + (a._extConfig = i); + }), + (a.processTelemetry = function (s, u) { + if (!x(s)) { + (u = a._getTelCtx(u)), + s.name === Fe.envelopeType && + u.diagLog().resetInternalMessageCount(); + let l = a.context || {}; + if ( + (l.session && + typeof a.context.session.id !== 'string' && + l.sessionManager && + l.sessionManager.update(), + c(s, u), + l.user && l.user.isNewUser) + ) { + l.user.isNewUser = false; + let f = new Ft( + h.SendBrowserInfoOnUserInit, + (Ue() || {}).userAgent || '' + ); + u.diagLog().logInternalMessage(S.CRITICAL, f); + } + a.processNext(s, u); + } + }); + function c(s, u) { + ge(s, 'tags', []), ge(s, 'ext', {}); + let l = a.context; + l.applySessionContext(s, u), + l.applyApplicationContext(s, u), + l.applyDeviceContext(s, u), + l.applyOperationContext(s, u), + l.applyUserContext(s, u), + l.applyOperatingSystemContxt(s, u), + l.applyWebContext(s, u), + l.applyLocationContext(s, u), + l.applyInternalContext(s, u), + l.cleanUp(s, u); + } + }), + r + ); + } + return ( + (e.getDefaultConfig = function () { + let r = { + instrumentationKey: function () {}, + accountId: function () { + return null; + }, + sessionRenewalMs: function () { + return 30 * 60 * 1e3; + }, + samplingPercentage: function () { + return 100; + }, + sessionExpirationMs: function () { + return 24 * 60 * 60 * 1e3; + }, + cookieDomain: function () { + return null; + }, + sdkExtension: function () { + return null; + }, + isBrowserLinkTrackingEnabled: function () { + return false; + }, + appId: function () { + return null; + }, + namePrefix: function () {}, + sessionCookiePostfix: function () {}, + userCookiePostfix: function () {}, + idLength: function () { + return 22; + }, + getNewId: function () { + return null; + }, + }; + return r; + }), + e + ); + })(tt)), + (An = gl); +}); +let ao = C(() => { + Yc(); +}); +function $c(t, e, r) { + let n = 0, + i = t[e], + a = t[r]; + return i && a && (n = ve(i, a)), n; +} +function xr(t, e, r, n, i) { + let a = 0, + o = $c(r, n, i); + return o && (a = tr(t, e, Ge(o))), a; +} +function tr(t, e, r) { + let n = 'ajaxPerf', + i = 0; + if (t && e && r) { + let a = (t[n] = t[n] || {}); + (a[e] = r), (i = 1); + } + return i; +} +function vl(t, e) { + let r = t.perfTiming, + n = e[nt] || {}, + i = 0, + a = 'name', + o = 'Start', + c = 'End', + s = 'domainLookup', + u = 'connect', + l = 'redirect', + f = 'request', + m = 'response', + I = 'duration', + E = 'startTime', + b = s + o, + p = s + c, + v = u + o, + y = u + c, + w = f + o, + L = f + c, + F = m + o, + Y = m + c, + Se = l + o, + X = (l = c), + me = 'transferSize', + De = 'encodedBodySize', + pt = 'decodedBodySize', + at = 'serverTiming'; + if (r) { + (i |= xr(n, l, r, Se, X)), + (i |= xr(n, s, r, b, p)), + (i |= xr(n, u, r, v, y)), + (i |= xr(n, f, r, w, L)), + (i |= xr(n, m, r, F, Y)), + (i |= xr(n, 'networkConnect', r, E, y)), + (i |= xr(n, 'sentRequest', r, w, Y)); + let dt = r[I]; + dt || (dt = $c(r, E, Y) || 0), + (i |= tr(n, I, dt)), + (i |= tr(n, 'perfTotal', dt)); + let d = r[at]; + if (d) { + let T = {}; + R(d, function (A, D) { + let z = zi(A[a] || '' + D), + U = T[z] || {}; + Q(A, function (q, $) { + ((q !== a && _($)) || ir($)) && + (U[q] && ($ = U[q] + ';' + $), ($ || !_($)) && (U[q] = $)); + }), + (T[z] = U); + }), + (i |= tr(n, at, T)); + } + (i |= tr(n, me, r[me])), (i |= tr(n, De, r[De])), (i |= tr(n, pt, r[pt])); + } else { + t.perfMark && (i |= tr(n, 'missing', t.perfAttempts)); + } + i && (e[nt] = n); +} +let nt; +let hl; +let oo; +let Zc = C(() => { + xe(); + J(); + Te(); + nt = 'properties'; + (hl = (function () { + function t() { + let e = this; + (e.openDone = false), + (e.setRequestHeaderDone = false), + (e.sendDone = false), + (e.abortDone = false), + (e.stateChangeAttached = false); + } + return t; + })()), + (oo = (function () { + function t(e, r, n) { + let i = this, + a = n, + o = 'responseText'; + (i.perfMark = null), + (i.completed = false), + (i.requestHeadersSize = null), + (i.requestHeaders = null), + (i.responseReceivingDuration = null), + (i.callbackDuration = null), + (i.ajaxTotalDuration = null), + (i.aborted = 0), + (i.pageUrl = null), + (i.requestUrl = null), + (i.requestSize = 0), + (i.method = null), + (i.status = null), + (i.requestSentTime = null), + (i.responseStartedTime = null), + (i.responseFinishedTime = null), + (i.callbackFinishedTime = null), + (i.endTime = null), + (i.xhrMonitoringState = new hl()), + (i.clientFailure = 0), + (i.traceID = e), + (i.spanID = r), + W(t, i, function (c) { + (c.getAbsoluteUrl = function () { + return c.requestUrl ? hn(c.requestUrl) : null; + }), + (c.getPathName = function () { + return c.requestUrl ? Tt(a, xn(c.method, c.requestUrl)) : null; + }), + (c.CreateTrackItem = function (s, u, l) { + if ( + ((c.ajaxTotalDuration = + Math.round( + ve(c.requestSentTime, c.responseFinishedTime) * 1e3 + ) / 1e3), + c.ajaxTotalDuration < 0) + ) { + return null; + } + let f = + ((b = { + id: '|' + c.traceID + '.' + c.spanID, + target: c.getAbsoluteUrl(), + name: c.getPathName(), + type: s, + startTime: null, + duration: c.ajaxTotalDuration, + success: +c.status >= 200 && +c.status < 400, + responseCode: +c.status, + method: c.method, + }), + (b[nt] = { HttpMethod: c.method }), + b); + if ( + (c.requestSentTime && + ((f.startTime = new Date()), + f.startTime.setTime(c.requestSentTime)), + vl(c, f), + u && + Qe(c.requestHeaders).length > 0 && + ((f[nt] = f[nt] || {}), + (f[nt].requestHeaders = c.requestHeaders)), + l) + ) { + let m = l(); + if (m) { + let I = m.correlationContext; + if ( + (I && (f.correlationContext = I), + m.headerMap && + Qe(m.headerMap).length > 0 && + ((f[nt] = f[nt] || {}), + (f[nt].responseHeaders = m.headerMap)), + c.status >= 400) + ) { + let E = m.type; + (f[nt] = f[nt] || {}), + (E === '' || E === 'text') && + (f[nt][o] = m[o] + ? m.statusText + ' - ' + m[o] + : m.statusText), + E === 'json' && + (f[nt][o] = m.response + ? m.statusText + ' - ' + JSON.stringify(m.response) + : m.statusText); + } + } + } + return f; + let b; + }); + }); + } + return t; + })()); +}); +let mh; +let Qc = C(() => { + J(); + J(); + mh = (function () { + function t() {} + return ( + (t.GetLength = function (e) { + let r = 0; + if (!x(e)) { + let n = ''; + try { + n = e.toString(); + } catch (i) {} + (r = n.length), (r = isNaN(r) ? 0 : r); + } + return r; + }), + t + ); + })(); +}); +let so; +let eu = C(() => { + J(); + so = (function () { + function t(e, r) { + let n = this; + (n.traceFlag = t.DEFAULT_TRACE_FLAG), + (n.version = t.DEFAULT_VERSION), + e && t.isValidTraceId(e) ? (n.traceId = e) : (n.traceId = He()), + r && t.isValidSpanId(r) + ? (n.spanId = r) + : (n.spanId = He().substr(0, 16)); + } + return ( + (t.isValidTraceId = function (e) { + return ( + e.match(/^[0-9a-f]{32}$/) && e !== '00000000000000000000000000000000' + ); + }), + (t.isValidSpanId = function (e) { + return e.match(/^[0-9a-f]{16}$/) && e !== '0000000000000000'; + }), + (t.prototype.toString = function () { + let e = this; + return e.version + '-' + e.traceId + '-' + e.spanId + '-' + e.traceFlag; + }), + (t.DEFAULT_TRACE_FLAG = '01'), + (t.DEFAULT_VERSION = '00'), + t + ); + })(); +}); +function xl() { + let t = ot(); + return !t || x(t.Request) || x(t.Request[Ie]) || x(t[Fn]) ? null : t[Fn]; +} +function yl(t) { + let e = false; + if (typeof XMLHttpRequest !== Oe && !x(XMLHttpRequest)) { + let r = XMLHttpRequest[Ie]; + e = !x(r) && !x(r.open) && !x(r.send) && !x(r.abort); + } + let n = or(); + if ((n && n < 9 && (e = false), e)) { + try { + let i = new XMLHttpRequest(); + i[it] = {}; + let a = XMLHttpRequest[Ie].open; + XMLHttpRequest[Ie].open = a; + } catch (o) { + (e = false), + kn( + t, + h.FailedMonitorAjaxOpen, + 'Failed to enable XMLHttpRequest monitoring, extension is not supported', + { exception: O(o) } + ); + } + } + return e; +} +function Ti(t) { + let e = ''; + try { + !x(t) && + !x(t[it]) && + !x(t[it].requestUrl) && + (e += "(url: '" + t[it].requestUrl + "')"); + } catch (r) {} + return e; +} +function kn(t, e, r, n, i) { + t[Nn]()[ru](S.CRITICAL, e, r, n, i); +} +function Ei(t, e, r, n, i) { + t[Nn]()[ru](S.WARNING, e, r, n, i); +} +function Rn(t, e, r) { + return function (n) { + kn(t, e, r, { ajaxDiagnosticsMessage: Ti(n.inst), exception: O(n.err) }); + }; +} +function Hr(t, e) { + return t && e ? t.indexOf(e) : -1; +} +let tu; +let Nn; +let it; +let ru; +let Fn; +let nu; +let Mn; +let iu = C(() => { + ne(); + xe(); + J(); + Zc(); + Qc(); + eu(); + Te(); + (tu = 'ai.ajxmn.'), + (Nn = 'diagLog'), + (it = 'ajaxData'), + (ru = 'throwInternal'), + (Fn = 'fetch'), + (nu = 0); + Mn = (function (t) { + H(e, t); + function e() { + let r = t.call(this) || this; + (r.identifier = e.identifier), (r.priority = 120); + let n = 'trackDependencyDataInternal', + i = et(), + a = false, + o = false, + c = i && i.host && i.host.toLowerCase(), + s = e.getEmptyConfig(), + u = false, + l = 0, + f, + m, + I, + E, + b = false, + p = 0, + v = false, + y = [], + w = {}, + L; + return ( + W(e, r, function (F, Y) { + (F.initialize = function (g, P, N, k) { + if (!F.isInitialized()) { + Y.initialize(g, P, N, k); + let M = F._getTelCtx(), + V = e.getDefaultConfig(); + Q(V, function (We, yr) { + s[We] = M.getConfig(e.identifier, We, yr); + }); + let B = s.distributedTracingMode; + if ( + ((u = s.enableRequestHeaderTracking), + (b = s.enableAjaxPerfTracking), + (p = s.maxAjaxCallsPerView), + (v = s.enableResponseHeaderTracking), + (L = s.excludeRequestFromAutoTrackingPatterns), + (I = B === Ke.AI || B === Ke.AI_AND_W3C), + (m = B === Ke.AI_AND_W3C || B === Ke.W3C), + b) + ) { + let Z = g.instrumentationKey || 'unkwn'; + Z.length > 5 + ? (E = tu + Z.substring(Z.length - 5) + '.') + : (E = tu + Z + '.'); + } + if ( + (s.disableAjaxTracking === false && De(), + X(), + N.length > 0 && N) + ) { + for (var ce = void 0, Ce = 0; !ce && Ce < N.length; ) { + N[Ce] && N[Ce].identifier === Ot && (ce = N[Ce]), Ce++; + } + ce && (f = ce.context); + } + } + }), + (F.teardown = function () { + R(y, function (g) { + g.rm(); + }), + (y = []), + (a = false), + (o = false), + F.setInitialized(false); + }), + (F.trackDependencyData = function (g, P) { + F[n](g, P); + }), + (F.includeCorrelationHeaders = function (g, P, N, k) { + let M = F._currentWindowHost || c; + if (P) { + if (Pt.canIncludeCorrelationHeader(s, g.getAbsoluteUrl(), M)) { + if ( + (N || (N = {}), + (N.headers = new Headers( + N.headers || (P instanceof Request ? P.headers || {} : {}) + )), + I) + ) { + var V = '|' + g.traceID + '.' + g.spanID; + N.headers.set(te.requestIdHeader, V), + u && (g.requestHeaders[te.requestIdHeader] = V); + } + var B = s.appId || (f && f.appId()); + if ( + (B && + (N.headers.set( + te.requestContextHeader, + te.requestContextAppIdFormat + B + ), + u && + (g.requestHeaders[te.requestContextHeader] = + te.requestContextAppIdFormat + B)), + m) + ) { + var Z = new so(g.traceID, g.spanID); + N.headers.set(te.traceParentHeader, Z.toString()), + u && + (g.requestHeaders[te.traceParentHeader] = Z.toString()); + } + } + return N; + } else if (k) { + if (Pt.canIncludeCorrelationHeader(s, g.getAbsoluteUrl(), M)) { + if (I) { + var V = '|' + g.traceID + '.' + g.spanID; + k.setRequestHeader(te.requestIdHeader, V), + u && (g.requestHeaders[te.requestIdHeader] = V); + } + var B = s.appId || (f && f.appId()); + if ( + (B && + (k.setRequestHeader( + te.requestContextHeader, + te.requestContextAppIdFormat + B + ), + u && + (g.requestHeaders[te.requestContextHeader] = + te.requestContextAppIdFormat + B)), + m) + ) { + var Z = new so(g.traceID, g.spanID); + k.setRequestHeader(te.traceParentHeader, Z.toString()), + u && + (g.requestHeaders[te.traceParentHeader] = Z.toString()); + } + } + return k; + } + }), + (F[n] = function (g, P, N) { + if (p === -1 || l < p) { + (s.distributedTracingMode === Ke.W3C || + s.distributedTracingMode === Ke.AI_AND_W3C) && + typeof g.id === 'string' && + g.id[g.id.length - 1] !== '.' && + (g.id += '.'), + x(g.startTime) && (g.startTime = new Date()); + let k = rt.create( + g, + qe.dataType, + qe.envelopeType, + F[Nn](), + P, + N + ); + F.core.track(k); + } else { + l === p && + kn( + F, + h.MaxAjaxPerPVExceeded, + 'Maximum ajax per page view limit reached, ajax monitoring is paused until the next trackPageView(). In order to increase the limit set the maxAjaxCallsPerView configuration parameter.', + true + ); + } + ++l; + }); + function Se(g) { + let P = true; + return ( + (g || s.ignoreHeaders) && + R(s.ignoreHeaders, function (N) { + if (N.toLowerCase() === g.toLowerCase()) { + return (P = false), -1; + } + }), + P + ); + } + function X() { + let g = xl(); + if (!!g) { + let P = ot(), + N = g.polyfill; + s.disableFetchTracking === false + ? (y.push( + sn(P, Fn, { + req: function (k, M, V) { + let B; + if (a && !pt(null, M, V) && !(N && o)) { + let Z = k.ctx(); + B = q(M, V); + let ce = F.includeCorrelationHeaders(B, M, V); + ce !== V && k.set(1, ce), (Z.data = B); + } + }, + rsp: function (k, M) { + let V = k.ctx().data; + V && + (k.rslt = k.rslt + .then(function (B) { + return ( + ie(k, (B || {}).status, B, V, function () { + let Z = { + statusText: B.statusText, + headerMap: null, + correlationContext: Ht(B), + }; + if (v) { + let ce = {}; + B.headers.forEach(function (Ce, We) { + Se(We) && (ce[We] = Ce); + }), + (Z.headerMap = ce); + } + return Z; + }), + B + ); + }) + .catch(function (B) { + throw ( + (ie(k, 0, M, V, null, { error: B.message }), B) + ); + })); + }, + hkErr: Rn( + F, + h.FailedMonitorAjaxOpen, + 'Failed to monitor Window.fetch, monitoring data for this fetch call may be incorrect.' + ), + }) + ), + (a = true)) + : N && + y.push( + sn(P, Fn, { + req: function (k, M, V) { + pt(null, M, V); + }, + }) + ), + N && (P[Fn].polyfill = N); + } + } + function me(g, P, N) { + y.push(Ea(g, P, N)); + } + function De() { + yl(F) && + !o && + (me(XMLHttpRequest, 'open', { + req: function (g, P, N, k) { + let M = g.inst, + V = M[it]; + !pt(M, N) && + at(M, true) && + (!V || !V.xhrMonitoringState.openDone) && + dt(M, P, N, k); + }, + hkErr: Rn( + F, + h.FailedMonitorAjaxOpen, + 'Failed to monitor XMLHttpRequest.open, monitoring data for this ajax call may be incorrect.' + ), + }), + me(XMLHttpRequest, 'send', { + req: function (g, P) { + let N = g.inst, + k = N[it]; + at(N) && + !k.xhrMonitoringState.sendDone && + (z('xhr', k), + (k.requestSentTime = mr()), + F.includeCorrelationHeaders(k, void 0, void 0, N), + (k.xhrMonitoringState.sendDone = true)); + }, + hkErr: Rn( + F, + h.FailedMonitorAjaxSend, + 'Failed to monitor XMLHttpRequest, monitoring data for this ajax call may be incorrect.' + ), + }), + me(XMLHttpRequest, 'abort', { + req: function (g) { + let P = g.inst, + N = P[it]; + at(P) && + !N.xhrMonitoringState.abortDone && + ((N.aborted = 1), (N.xhrMonitoringState.abortDone = true)); + }, + hkErr: Rn( + F, + h.FailedMonitorAjaxAbort, + 'Failed to monitor XMLHttpRequest.abort, monitoring data for this ajax call may be incorrect.' + ), + }), + u && + me(XMLHttpRequest, 'setRequestHeader', { + req: function (g, P, N) { + let k = g.inst; + at(k) && Se(P) && (k[it].requestHeaders[P] = N); + }, + hkErr: Rn( + F, + h.FailedMonitorAjaxSetRequestHeader, + 'Failed to monitor XMLHttpRequest.setRequestHeader, monitoring data for this ajax call may be incorrect.' + ), + }), + (o = true)); + } + function pt(g, P, N) { + let k = false, + M = ((_(P) ? P : (P || {}).url || '') || '').toLowerCase(); + if ( + (R(L, function (Z) { + let ce = Z; + _(Z) && (ce = new RegExp(Z)), k || (k = ce.test(M)); + }), + k) + ) { + return k; + } + let V = Hr(M, '?'), + B = Hr(M, '#'); + return ( + (V === -1 || (B !== -1 && B < V)) && (V = B), + V !== -1 && (M = M.substring(0, V)), + x(g) + ? x(P) || + (k = + (typeof P === 'object' ? P[Et] === true : false) || + (N ? N[Et] === true : false)) + : (k = g[Et] === true || M[Et] === true), + k ? w[M] || (w[M] = 1) : w[M] && (k = true), + k + ); + } + function at(g, P) { + let N = true, + k = o; + return x(g) || (N = P === true || !x(g[it])), k && N; + } + function dt(g, P, N, k) { + let M = (f && f.telemetryTrace && f.telemetryTrace.traceID) || He(), + V = He().substr(0, 16), + B = new oo(M, V, F[Nn]()); + (B.method = P), + (B.requestUrl = N), + (B.xhrMonitoringState.openDone = true), + (B.requestHeaders = {}), + (B.async = k), + (g[it] = B), + d(g); + } + function d(g) { + g[it].xhrMonitoringState.stateChangeAttached = Jt.Attach( + g, + 'readystatechange', + function () { + try { + g && g.readyState === 4 && at(g) && A(g); + } catch (N) { + let P = O(N); + (!P || Hr(P.toLowerCase(), 'c00c023f') === -1) && + kn( + F, + h.FailedMonitorAjaxRSC, + "Failed to monitor XMLHttpRequest 'readystatechange' event handler, monitoring data for this ajax call may be incorrect.", + { ajaxDiagnosticsMessage: Ti(g), exception: P } + ); + } + } + ); + } + function T(g) { + try { + let P = g.responseType; + if (P === '' || P === 'text') { + return g.responseText; + } + } catch (N) {} + return null; + } + function A(g) { + let P = g[it]; + (P.responseFinishedTime = mr()), (P.status = g.status); + function N(k, M) { + let V = M || {}; + (V.ajaxDiagnosticsMessage = Ti(g)), + k && (V.exception = O(k)), + Ei( + F, + h.FailedMonitorAjaxDur, + "Failed to calculate the duration of the ajax call, monitoring data for this ajax call won't be sent.", + V + ); + } + U( + 'xmlhttprequest', + P, + function () { + try { + let k = P.CreateTrackItem('Ajax', u, function () { + let M = { + statusText: g.statusText, + headerMap: null, + correlationContext: D(g), + type: g.responseType, + responseText: T(g), + response: g.response, + }; + if (v) { + let V = g.getAllResponseHeaders(); + if (V) { + let B = oe(V).split(/[\r\n]+/), + Z = {}; + R(B, function (ce) { + let Ce = ce.split(': '), + We = Ce.shift(), + yr = Ce.join(': '); + Se(We) && (Z[We] = yr); + }), + (M.headerMap = Z); + } + } + return M; + }); + k + ? F[n](k) + : N(null, { + requestSentTime: P.requestSentTime, + responseFinishedTime: P.responseFinishedTime, + }); + } finally { + try { + g[it] = null; + } catch (M) {} + } + }, + function (k) { + N(k, null); + } + ); + } + function D(g) { + try { + let P = g.getAllResponseHeaders(); + if (P !== null) { + let N = Hr(P.toLowerCase(), te.requestContextHeaderLowerCase); + if (N !== -1) { + let k = g.getResponseHeader(te.requestContextHeader); + return Pt.getCorrelationContext(k); + } + } + } catch (M) { + Ei( + F, + h.FailedMonitorAjaxGetCorrelationHeader, + 'Failed to get Request-Context correlation header as it may be not included in the response or not accessible.', + { ajaxDiagnosticsMessage: Ti(g), exception: O(M) } + ); + } + } + function z(g, P) { + if (P.requestUrl && E && b) { + let N = Ye(); + if (N && j(N.mark)) { + nu++; + let k = E + g + '#' + nu; + N.mark(k); + let M = N.getEntriesByName(k); + M && M.length === 1 && (P.perfMark = M[0]); + } + } + } + function U(g, P, N, k) { + let M = P.perfMark, + V = Ye(), + B = s.maxAjaxPerfLookupAttempts, + Z = s.ajaxPerfLookupDelay, + ce = P.requestUrl, + Ce = 0; + (function We() { + try { + if (V && M) { + Ce++; + for ( + let yr = null, fo = V.getEntries(), Pi = fo.length - 1; + Pi >= 0; + Pi-- + ) { + let bt = fo[Pi]; + if (bt) { + if (bt.entryType === 'resource') { + bt.initiatorType === g && + (Hr(bt.name, ce) !== -1 || Hr(ce, bt.name) !== -1) && + (yr = bt); + } else if ( + bt.entryType === 'mark' && + bt.name === M.name + ) { + P.perfTiming = yr; + break; + } + if (bt.startTime < M.startTime - 1e3) { + break; + } + } + } + } + !M || P.perfTiming || Ce >= B || P.async === false + ? (M && j(V.clearMarks) && V.clearMarks(M.name), + (P.perfAttempts = Ce), + N()) + : setTimeout(We, Z); + } catch (gu) { + k(gu); + } + })(); + } + function q(g, P) { + let N = (f && f.telemetryTrace && f.telemetryTrace.traceID) || He(), + k = He().substr(0, 16), + M = new oo(N, k, F[Nn]()); + (M.requestSentTime = mr()), + g instanceof Request + ? (M.requestUrl = g ? g.url : '') + : (M.requestUrl = g); + let V = 'GET'; + P && P.method + ? (V = P.method) + : g && g instanceof Request && (V = g.method), + (M.method = V); + let B = {}; + if (u) { + let Z = new Headers( + (P ? P.headers : 0) || + (g instanceof Request ? g.headers || {} : {}) + ); + Z.forEach(function (ce, Ce) { + Se(Ce) && (B[Ce] = ce); + }); + } + return (M.requestHeaders = B), z('fetch', M), M; + } + function $(g) { + let P = ''; + try { + x(g) || + (typeof g === 'string' + ? (P += "(url: '" + g + "')") + : (P += "(url: '" + g.url + "')")); + } catch (N) { + kn( + F, + h.FailedMonitorAjaxOpen, + 'Failed to grab failed fetch diagnostics message', + { exception: O(N) } + ); + } + return P; + } + function ie(g, P, N, k, M, V) { + if (!k) { + return; + } + function B(Z, ce, Ce) { + let We = Ce || {}; + (We.fetchDiagnosticsMessage = $(N)), + ce && (We.exception = O(ce)), + Ei( + F, + Z, + "Failed to calculate the duration of the fetch call, monitoring data for this fetch call won't be sent.", + We + ); + } + (k.responseFinishedTime = mr()), + (k.status = P), + U( + 'fetch', + k, + function () { + let Z = k.CreateTrackItem('Fetch', u, M); + Z + ? F[n](Z) + : B(h.FailedMonitorAjaxDur, null, { + requestSentTime: k.requestSentTime, + responseFinishedTime: k.responseFinishedTime, + }); + }, + function (Z) { + B(h.FailedMonitorAjaxGetCorrelationHeader, Z, null); + } + ); + } + function Ht(g) { + if (g && g.headers) { + try { + let P = g.headers.get(te.requestContextHeader); + return Pt.getCorrelationContext(P); + } catch (N) { + Ei( + F, + h.FailedMonitorAjaxGetCorrelationHeader, + 'Failed to get Request-Context correlation header as it may be not included in the response or not accessible.', + { fetchDiagnosticsMessage: $(g), exception: O(N) } + ); + } + } + } + }), + r + ); + } + return ( + (e.getDefaultConfig = function () { + let r = { + maxAjaxCallsPerView: 500, + disableAjaxTracking: false, + disableFetchTracking: true, + excludeRequestFromAutoTrackingPatterns: void 0, + disableCorrelationHeaders: false, + distributedTracingMode: Ke.AI_AND_W3C, + correlationHeaderExcludedDomains: [ + '*.blob.core.windows.net', + '*.blob.core.chinacloudapi.cn', + '*.blob.core.cloudapi.de', + '*.blob.core.usgovcloudapi.net', + ], + correlationHeaderDomains: void 0, + correlationHeaderExcludePatterns: void 0, + appId: void 0, + enableCorsCorrelation: false, + enableRequestHeaderTracking: false, + enableResponseHeaderTracking: false, + enableAjaxErrorStatusText: false, + enableAjaxPerfTracking: false, + maxAjaxPerfLookupAttempts: 3, + ajaxPerfLookupDelay: 25, + ignoreHeaders: ['Authorization', 'X-API-Key', 'WWW-Authenticate'], + }; + return r; + }), + (e.getEmptyConfig = function () { + let r = this.getDefaultConfig(); + return ( + Q(r, function (n) { + r[n] = void 0; + }), + r + ); + }), + (e.prototype.processTelemetry = function (r, n) { + this.processNext(r, n); + }), + (e.identifier = 'AjaxDependencyPlugin'), + e + ); + })(tt); +}); +let co = C(() => { + iu(); +}); +let uo; +let au; +let Sl; +let ou; +let wi; +let lo = C(() => { + J(); + Qa(); + no(); + ao(); + co(); + xe(); + (au = [ + 'snippet', + 'dependencies', + 'properties', + '_snippetVersion', + 'appInsightsNew', + 'getSKUDefaults', + ]), + (Sl = { Default: 0, Required: 1, Array: 2, Hidden: 4 }), + (ou = { + __proto__: null, + PropertiesPluginIdentifier: Ot, + BreezeChannelIdentifier: _r, + AnalyticsPluginIdentifier: yi, + Util: Sn, + CorrelationIdHelper: Pt, + UrlHelper: _a, + DateTimeUtils: Oa, + ConnectionStringParser: ja, + FieldType: Sl, + RequestHeaders: te, + DisabledPropertyName: Et, + ProcessLegacy: Ut, + SampleRate: lr, + HttpMethod: Fr, + DEFAULT_BREEZE_ENDPOINT: fn, + AIData: In, + AIBase: Cn, + Envelope: Tn, + Event: Be, + Exception: he, + Metric: Ve, + PageView: Fe, + PageViewData: gr, + RemoteDependencyData: qe, + Trace: $e, + PageViewPerformance: Ze, + Data: xt, + SeverityLevel: _t, + ConfigurationManager: Xa, + ContextTagKeys: hr, + DataSanitizer: Da, + TelemetryItemCreator: rt, + CtxTagKeys: re, + Extensions: _e, + DistributedTracingModes: Ke, + }), + (wi = (function () { + function t(e) { + let r = this; + (r._snippetVersion = '' + (e.sv || e.version || '')), + (e.queue = e.queue || []), + (e.version = e.version || 2); + let n = e.config || {}; + if (n.connectionString) { + let i = di(n.connectionString), + a = i.ingestionendpoint; + (n.endpointUrl = a ? a + '/v2/track' : n.endpointUrl), + (n.instrumentationKey = + i.instrumentationkey || n.instrumentationKey); + } + (r.appInsights = new bn()), + (r.properties = new An()), + (r.dependencies = new Mn()), + (r.core = new en()), + (r._sender = new Dn()), + (r.snippet = e), + (r.config = n), + r.getSKUDefaults(); + } + return ( + (t.prototype.getCookieMgr = function () { + return this.appInsights.getCookieMgr(); + }), + (t.prototype.trackEvent = function (e, r) { + this.appInsights.trackEvent(e, r); + }), + (t.prototype.trackPageView = function (e) { + let r = e || {}; + this.appInsights.trackPageView(r); + }), + (t.prototype.trackPageViewPerformance = function (e) { + let r = e || {}; + this.appInsights.trackPageViewPerformance(r); + }), + (t.prototype.trackException = function (e) { + e && !e.exception && e.error && (e.exception = e.error), + this.appInsights.trackException(e); + }), + (t.prototype._onerror = function (e) { + this.appInsights._onerror(e); + }), + (t.prototype.trackTrace = function (e, r) { + this.appInsights.trackTrace(e, r); + }), + (t.prototype.trackMetric = function (e, r) { + this.appInsights.trackMetric(e, r); + }), + (t.prototype.startTrackPage = function (e) { + this.appInsights.startTrackPage(e); + }), + (t.prototype.stopTrackPage = function (e, r, n, i) { + this.appInsights.stopTrackPage(e, r, n, i); + }), + (t.prototype.startTrackEvent = function (e) { + this.appInsights.startTrackEvent(e); + }), + (t.prototype.stopTrackEvent = function (e, r, n) { + this.appInsights.stopTrackEvent(e, r, n); + }), + (t.prototype.addTelemetryInitializer = function (e) { + return this.appInsights.addTelemetryInitializer(e); + }), + (t.prototype.setAuthenticatedUserContext = function (e, r, n) { + n === void 0 && (n = false), + this.properties.context.user.setAuthenticatedUserContext(e, r, n); + }), + (t.prototype.clearAuthenticatedUserContext = function () { + this.properties.context.user.clearAuthenticatedUserContext(); + }), + (t.prototype.trackDependencyData = function (e) { + this.dependencies.trackDependencyData(e); + }), + (t.prototype.flush = function (e) { + let r = this; + e === void 0 && (e = true), + ct( + this.core, + function () { + return 'AISKU.flush'; + }, + function () { + R(r.core.getTransmissionControls(), function (n) { + R(n, function (i) { + i.flush(e); + }); + }); + }, + null, + e + ); + }), + (t.prototype.onunloadFlush = function (e) { + e === void 0 && (e = true), + R(this.core.getTransmissionControls(), function (r) { + R(r, function (n) { + n.onunloadFlush ? n.onunloadFlush() : n.flush(e); + }); + }); + }), + (t.prototype.loadAppInsights = function (e, r, n) { + let i = this; + e === void 0 && (e = false); + let a = this; + function o(c) { + if (c) { + let s = ''; + x(a._snippetVersion) || (s += a._snippetVersion), + e && (s += '.lg'), + a.context && + a.context.internal && + (a.context.internal.snippetVer = s || '-'), + Q(a, function (u, l) { + _(u) && + !j(l) && + u && + u[0] !== '_' && + au.indexOf(u) === -1 && + (c[u] = l); + }); + } + } + return ( + e && + a.config.extensions && + a.config.extensions.length > 0 && + Ae('Extensions not allowed in legacy mode'), + ct( + a.core, + function () { + return 'AISKU.loadAppInsights'; + }, + function () { + let c = []; + c.push(a._sender), + c.push(a.properties), + c.push(a.dependencies), + c.push(a.appInsights), + a.core.initialize(a.config, c, r, n), + (a.context = a.properties.context), + uo && a.context && (a.context.internal.sdkSrc = uo), + o(a.snippet), + a.emptyQueue(), + a.pollInternalLogs(), + a.addHousekeepingBeforeUnload(i); + } + ), + a + ); + }), + (t.prototype.updateSnippetDefinitions = function (e) { + Wr(e, this, function (r) { + return r && au.indexOf(r) === -1; + }); + }), + (t.prototype.emptyQueue = function () { + let e = this; + try { + if (Re(e.snippet.queue)) { + for (let r = e.snippet.queue.length, n = 0; n < r; n++) { + let i = e.snippet.queue[n]; + i(); + } + (e.snippet.queue = void 0), delete e.snippet.queue; + } + } catch (o) { + let a = {}; + o && j(o.toString) && (a.exception = o.toString()); + } + }), + (t.prototype.pollInternalLogs = function () { + this.core.pollInternalLogs(); + }), + (t.prototype.addHousekeepingBeforeUnload = function (e) { + if (ar() || Wn()) { + let r = function () { + e.onunloadFlush(false), + R(e.appInsights.core._extensions, function (i) { + if (i.identifier === Ot) { + return ( + i && + i.context && + i.context._sessionManager && + i.context._sessionManager.backup(), + -1 + ); + } + }); + }; + if (!e.appInsights.config.disableFlushOnBeforeUnload) { + let n = Mt('beforeunload', r); + (n = Mt('unload', r) || n), + (n = Mt('pagehide', r) || n), + (n = Mt('visibilitychange', r) || n), + !n && + !Qi() && + e.appInsights.core.logger.throwInternal( + S.CRITICAL, + h.FailedToAddHandlerForOnBeforeUnload, + 'Could not add handler for beforeunload and pagehide' + ); + } + e.appInsights.config.disableFlushOnUnload || + (Mt('pagehide', r), Mt('visibilitychange', r)); + } + }), + (t.prototype.getSender = function () { + return this._sender; + }), + (t.prototype.getSKUDefaults = function () { + let e = this; + e.config.diagnosticLogInterval = + e.config.diagnosticLogInterval && e.config.diagnosticLogInterval > 0 + ? e.config.diagnosticLogInterval + : 1e4; + }), + t + ); + })()); + (function () { + let t = null, + e = false, + r = ['://js.monitor.azure.com/', '://az416426.vo.msecnd.net/']; + try { + let n = (document || {}).currentScript; + n && (t = n.src); + } catch (c) {} + if (t) { + try { + let i = t.toLowerCase(); + if (i) { + for (let a = '', o = 0; o < r.length; o++) { + if (i.indexOf(r[o]) !== -1) { + (a = 'cdn' + (o + 1)), + i.indexOf('/scripts/') === -1 && + (i.indexOf('/next/') !== -1 + ? (a += '-next') + : i.indexOf('/beta/') !== -1 && (a += '-beta')), + (uo = a + (e ? '.mod' : '')); + break; + } + } + } + } catch (c) {} + } + })(); +}); +let Cl; +let su; +let cu = C(() => { + xe(); + J(); + (Cl = [ + 'snippet', + 'getDefaultConfig', + '_hasLegacyInitializers', + '_queue', + '_processLegacyInitializers', + ]), + (su = (function () { + function t(e, r) { + (this._hasLegacyInitializers = false), + (this._queue = []), + (this.config = t.getDefaultConfig(e.config)), + (this.appInsightsNew = r), + (this.context = { + addTelemetryInitializer: this.addTelemetryInitializers.bind(this), + }); + } + return ( + (t.getDefaultConfig = function (e) { + return ( + e || (e = {}), + (e.endpointUrl = + e.endpointUrl || 'https://dc.services.visualstudio.com/v2/track'), + (e.sessionRenewalMs = 30 * 60 * 1e3), + (e.sessionExpirationMs = 24 * 60 * 60 * 1e3), + (e.maxBatchSizeInBytes = + e.maxBatchSizeInBytes > 0 ? e.maxBatchSizeInBytes : 102400), + (e.maxBatchInterval = isNaN(e.maxBatchInterval) + ? 15e3 + : e.maxBatchInterval), + (e.enableDebug = ee(e.enableDebug)), + (e.disableExceptionTracking = ee(e.disableExceptionTracking)), + (e.disableTelemetry = ee(e.disableTelemetry)), + (e.verboseLogging = ee(e.verboseLogging)), + (e.emitLineDelimitedJson = ee(e.emitLineDelimitedJson)), + (e.diagnosticLogInterval = e.diagnosticLogInterval || 1e4), + (e.autoTrackPageVisitTime = ee(e.autoTrackPageVisitTime)), + (isNaN(e.samplingPercentage) || + e.samplingPercentage <= 0 || + e.samplingPercentage >= 100) && + (e.samplingPercentage = 100), + (e.disableAjaxTracking = ee(e.disableAjaxTracking)), + (e.maxAjaxCallsPerView = isNaN(e.maxAjaxCallsPerView) + ? 500 + : e.maxAjaxCallsPerView), + (e.isBeaconApiDisabled = ee(e.isBeaconApiDisabled, true)), + (e.disableCorrelationHeaders = ee(e.disableCorrelationHeaders)), + (e.correlationHeaderExcludedDomains = e.correlationHeaderExcludedDomains || [ + '*.blob.core.windows.net', + '*.blob.core.chinacloudapi.cn', + '*.blob.core.cloudapi.de', + '*.blob.core.usgovcloudapi.net', + ]), + (e.disableFlushOnBeforeUnload = ee(e.disableFlushOnBeforeUnload)), + (e.disableFlushOnUnload = ee( + e.disableFlushOnUnload, + e.disableFlushOnBeforeUnload + )), + (e.enableSessionStorageBuffer = ee( + e.enableSessionStorageBuffer, + true + )), + (e.isRetryDisabled = ee(e.isRetryDisabled)), + (e.isCookieUseDisabled = ee(e.isCookieUseDisabled)), + (e.isStorageUseDisabled = ee(e.isStorageUseDisabled)), + (e.isBrowserLinkTrackingEnabled = ee( + e.isBrowserLinkTrackingEnabled + )), + (e.enableCorsCorrelation = ee(e.enableCorsCorrelation)), + e + ); + }), + (t.prototype.addTelemetryInitializers = function (e) { + let r = this; + this._hasLegacyInitializers || + (this.appInsightsNew.addTelemetryInitializer(function (n) { + r._processLegacyInitializers(n); + }), + (this._hasLegacyInitializers = true)), + this._queue.push(e); + }), + (t.prototype.getCookieMgr = function () { + return this.appInsightsNew.getCookieMgr(); + }), + (t.prototype.startTrackPage = function (e) { + this.appInsightsNew.startTrackPage(e); + }), + (t.prototype.stopTrackPage = function (e, r, n, i) { + this.appInsightsNew.stopTrackPage(e, r, n); + }), + (t.prototype.trackPageView = function (e, r, n, i, a) { + let o = { name: e, uri: r, properties: n, measurements: i }; + this.appInsightsNew.trackPageView(o); + }), + (t.prototype.trackEvent = function (e, r, n) { + this.appInsightsNew.trackEvent({ name: e }); + }), + (t.prototype.trackDependency = function (e, r, n, i, a, o, c) { + this.appInsightsNew.trackDependencyData({ + id: e, + target: n, + type: i, + duration: a, + properties: { HttpMethod: r }, + success: o, + responseCode: c, + }); + }), + (t.prototype.trackException = function (e, r, n, i, a) { + this.appInsightsNew.trackException({ exception: e }); + }), + (t.prototype.trackMetric = function (e, r, n, i, a, o) { + this.appInsightsNew.trackMetric({ + name: e, + average: r, + sampleCount: n, + min: i, + max: a, + }); + }), + (t.prototype.trackTrace = function (e, r, n) { + this.appInsightsNew.trackTrace({ message: e, severityLevel: n }); + }), + (t.prototype.flush = function (e) { + this.appInsightsNew.flush(e); + }), + (t.prototype.setAuthenticatedUserContext = function (e, r, n) { + this.appInsightsNew.context.user.setAuthenticatedUserContext(e, r, n); + }), + (t.prototype.clearAuthenticatedUserContext = function () { + this.appInsightsNew.context.user.clearAuthenticatedUserContext(); + }), + (t.prototype._onerror = function (e, r, n, i, a) { + this.appInsightsNew._onerror({ + message: e, + url: r, + lineNumber: n, + columnNumber: i, + error: a, + }); + }), + (t.prototype.startTrackEvent = function (e) { + this.appInsightsNew.startTrackEvent(e); + }), + (t.prototype.stopTrackEvent = function (e, r, n) { + this.appInsightsNew.stopTrackEvent(e, r, n); + }), + (t.prototype.downloadAndSetup = function (e) { + Ae('downloadAndSetup not implemented in web SKU'); + }), + (t.prototype.updateSnippetDefinitions = function (e) { + Wr(e, this, function (r) { + return r && Cl.indexOf(r) === -1; + }); + }), + (t.prototype.loadAppInsights = function () { + let e = this; + if (this.config.iKey) { + let r = this.trackPageView; + this.trackPageView = function (a, o, c) { + r.apply(e, [null, a, o, c]); + }; + } + let n = 'logPageView'; + typeof this.snippet[n] === 'function' && + (this[n] = function (a, o, c) { + e.trackPageView(null, a, o, c); + }); + let i = 'logEvent'; + return ( + typeof this.snippet[i] === 'function' && + (this[i] = function (a, o, c) { + e.trackEvent(a, o, c); + }), + this + ); + }), + (t.prototype._processLegacyInitializers = function (e) { + return (e.tags[Ut] = this._queue), e; + }), + t + ); + })()); +}); +let uu; +let lu = C(() => { + cu(); + lo(); + J(); + uu = (function () { + function t() {} + return ( + (t.getAppInsights = function (e, r) { + let n = new wi(e), + i = r !== 2; + if ((Xt(), r === 2)) { + return n.updateSnippetDefinitions(e), n.loadAppInsights(i), n; + } + let a = new su(e, n); + return a.updateSnippetDefinitions(e), n.loadAppInsights(i), a; + }), + t + ); + })(); +}); +let fu = {}; +hu(fu, { + AppInsightsCore: () => en, + ApplicationAnalytics: () => bn, + ApplicationInsights: () => wi, + ApplicationInsightsContainer: () => uu, + BaseCore: () => Zr, + BaseTelemetryPlugin: () => tt, + CoreUtils: () => on, + DependenciesPlugin: () => Mn, + DistributedTracingModes: () => Ke, + Event: () => Be, + Exception: () => he, + LoggingSeverity: () => S, + Metric: () => Ve, + NotificationManager: () => Qr, + PageView: () => Fe, + PageViewPerformance: () => Ze, + PerfEvent: () => sr, + PerfManager: () => Jr, + PropertiesPlugin: () => An, + RemoteDependencyData: () => qe, + Sender: () => Dn, + SeverityLevel: () => _t, + Telemetry: () => ou, + Trace: () => $e, + Util: () => Sn, + _InternalMessageId: () => h, + doPerf: () => ct, +}); +let pu = C(() => { + lo(); + lu(); + J(); + xe(); + no(); + Qa(); + ao(); + co(); +}); +let Je; +(function (n) { + (n.ON = 'on'), (n.ERROR = 'error'), (n.OFF = 'off'); +})(Je || (Je = {})); +function jr() { + let t = 'telemetry', + e = 'enableTelemetry'; + return import_vscode.env.isTelemetryEnabled !== void 0 + ? import_vscode.env.isTelemetryEnabled + ? Je.ON + : Je.OFF + : import_vscode.workspace.getConfiguration(t).get(e) + ? Je.ON + : Je.OFF; +} +let bi = class { + constructor(e, r, n, i, a) { + this.extensionId = e; + this.extensionVersion = r; + this.telemetryAppender = n; + this.osShim = i; + this.firstParty = false; + this.userOptIn = false; + this.errorOptIn = false; + this.disposables = []; + (this.firstParty = !!a), + this.updateUserOptStatus(), + ue.env.onDidChangeTelemetryEnabled !== void 0 + ? (this.disposables.push( + ue.env.onDidChangeTelemetryEnabled(() => this.updateUserOptStatus()) + ), + this.disposables.push( + ue.workspace.onDidChangeConfiguration(() => + this.updateUserOptStatus() + ) + )) + : this.disposables.push( + ue.workspace.onDidChangeConfiguration(() => + this.updateUserOptStatus() + ) + ); + } + updateUserOptStatus() { + let e = jr(); + (this.userOptIn = e === Je.ON), + (this.errorOptIn = e === Je.ERROR || e === Je.ON), + (this.userOptIn || this.errorOptIn) && + this.telemetryAppender.instantiateAppender(); + } + cleanRemoteName(e) { + if (!e) { + return 'none'; + } + let r = 'other'; + return ( + ['ssh-remote', 'dev-container', 'attached-container', 'wsl'].forEach( + (n) => { + e.indexOf(`${n}+`) === 0 && (r = n); + } + ), + r + ); + } + get extension() { + return ( + this._extension === void 0 && + (this._extension = ue.extensions.getExtension(this.extensionId)), + this._extension + ); + } + cloneAndChange(e, r) { + if (e === null || typeof e !== 'object' || typeof r !== 'function') { + return e; + } + let n = {}; + for (let i in e) { + n[i] = r(i, e[i]); + } + return n; + } + shouldSendErrorTelemetry() { + return this.errorOptIn === false + ? false + : this.firstParty + ? this.cleanRemoteName(ue.env.remoteName) !== 'other' + ? true + : !( + this.extension === void 0 || + this.extension.extensionKind === ue.ExtensionKind.Workspace || + ue.env.uiKind === ue.UIKind.Web + ) + : true; + } + getCommonProperties() { + let e = Object.create(null); + if ( + ((e['common.os'] = this.osShim.platform), + (e['common.platformversion'] = (this.osShim.release || '').replace( + /^(\d+)(\.\d+)?(\.\d+)?(.*)/, + '$1$2$3' + )), + (e['common.extname'] = this.extensionId), + (e['common.extversion'] = this.extensionVersion), + ue && ue.env) + ) { + switch ( + ((e['common.vscodemachineid'] = ue.env.machineId), + (e['common.vscodesessionid'] = ue.env.sessionId), + (e['common.vscodeversion'] = ue.version), + (e['common.isnewappinstall'] = ue.env.isNewAppInstall + ? ue.env.isNewAppInstall.toString() + : 'false'), + (e['common.product'] = ue.env.appHost), + ue.env.uiKind) + ) { + case ue.UIKind.Web: + e['common.uikind'] = 'web'; + break; + case ue.UIKind.Desktop: + e['common.uikind'] = 'desktop'; + break; + default: + e['common.uikind'] = 'unknown'; + } + e['common.remotename'] = this.cleanRemoteName(ue.env.remoteName); + } + return e; + } + anonymizeFilePaths(e, r) { + let n; + if (e == null) { + return ''; + } + let i = []; + ue.env.appRoot !== '' && + i.push( + new RegExp(ue.env.appRoot.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), 'gi') + ), + this.extension && + i.push( + new RegExp( + this.extension.extensionPath.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), + 'gi' + ) + ); + let a = e; + if (r) { + let o = []; + for (let l of i) { + for (; (n = l.exec(e)) && n; ) { + o.push([n.index, l.lastIndex]); + } + } + let c = /^[\\/]?(node_modules|node_modules\.asar)[\\/]/, + s = /(file:\/\/)?([a-zA-Z]:(\\\\|\\|\/)|(\\\\|\\|\/))?([\w-._]+(\\\\|\\|\/))+[\w-._]*/g, + u = 0; + for (a = ''; (n = s.exec(e)) && n; ) { + n[0] && + !c.test(n[0]) && + o.every(([l, f]) => n.index < l || n.index >= f) && + ((a += e.substring(u, n.index) + ''), + (u = s.lastIndex)); + } + u < e.length && (a += e.substr(u)); + } + for (let o of i) { + a = a.replace(o, ''); + } + return a; + } + removePropertiesWithPossibleUserInfo(e) { + if (typeof e !== 'object') { + return; + } + let r = Object.create(null); + for (let n of Object.keys(e)) { + let i = e[n]; + if (!i) { + continue; + } + let a = /@[a-zA-Z0-9-.]+/; + /\S*(key|token|sig|password|passwd|pwd)[="':\s]+\S*/.test(i.toLowerCase()) + ? (r[n] = '') + : a.test(i) + ? (r[n] = '') + : (r[n] = i); + } + return r; + } + sendTelemetryEvent(e, r, n) { + if (this.userOptIn && e !== '') { + r = { ...r, ...this.getCommonProperties() }; + let i = this.cloneAndChange(r, (a, o) => + this.anonymizeFilePaths(o, this.firstParty) + ); + this.telemetryAppender.logEvent(`${this.extensionId}/${e}`, { + properties: this.removePropertiesWithPossibleUserInfo(i), + measurements: n, + }); + } + } + sendTelemetryErrorEvent(e, r, n, i) { + if (this.errorOptIn && e !== '') { + r = { ...r, ...this.getCommonProperties() }; + let a = this.cloneAndChange(r, (o, c) => + this.shouldSendErrorTelemetry() + ? this.anonymizeFilePaths(c, this.firstParty) + : i === void 0 || i.indexOf(o) !== -1 + ? 'REDACTED' + : this.anonymizeFilePaths(c, this.firstParty) + ); + this.telemetryAppender.logEvent(`${this.extensionId}/${e}`, { + properties: this.removePropertiesWithPossibleUserInfo(a), + measurements: n, + }); + } + } + sendTelemetryException(e, r, n) { + if (this.shouldSendErrorTelemetry() && this.errorOptIn && e) { + r = { ...r, ...this.getCommonProperties() }; + let i = this.cloneAndChange(r, (a, o) => + this.anonymizeFilePaths(o, this.firstParty) + ); + e.stack && (e.stack = this.anonymizeFilePaths(e.stack, this.firstParty)), + this.telemetryAppender.logException(e, { + properties: this.removePropertiesWithPossibleUserInfo(i), + measurements: n, + }); + } + } + dispose() { + return ( + this.telemetryAppender.flush(), + Promise.all(this.disposables.map((e) => e.dispose())) + ); + } +}; +let du = class { + constructor(e) { + this._key = e; + this._isInstantiated = false; + jr() !== Je.OFF && this.instantiateAppender(); + } + logEvent(e, r) { + !this._aiClient || + this._aiClient.trackEvent( + { name: e }, + { ...r.properties, ...r.measurements } + ); + } + logException(e, r) { + !this._aiClient || + this._aiClient.trackException({ + exception: e, + properties: { ...r.properties, ...r.measurements }, + }); + } + flush() { + return ( + this._aiClient && (this._aiClient.flush(), (this._aiClient = void 0)), + Promise.resolve(void 0) + ); + } + instantiateAppender() { + this._isInstantiated || + Promise.resolve() + .then(() => (pu(), fu)) + .then((e) => { + let r; + this._key && + this._key.indexOf('AIF-') === 0 && + (r = 'https://vortex.data.microsoft.com/collect/v1'), + (this._aiClient = new e.ApplicationInsights({ + config: { + instrumentationKey: this._key, + endpointUrl: r, + disableAjaxTracking: true, + disableExceptionTracking: true, + disableFetchTracking: true, + disableCorrelationHeaders: true, + disableCookiesUsage: true, + autoTrackPageVisitTime: false, + emitLineDelimitedJson: true, + disableInstrumentationKeyValidation: true, + }, + })), + this._aiClient.loadAppInsights(); + let n = jr(); + r && + (n === Je.ON || n === Je.ERROR) && + fetch(r).catch(() => (this._aiClient = void 0)), + (this._isInstantiated = true); + }); + } +}; +let mu = class extends bi { + constructor(e, r, n, i) { + let a = new du(n); + n && n.indexOf('AIF-') === 0 && (i = true); + super(e, r, a, { release: navigator.appVersion, platform: 'web' }, i); + } +}; + +// client/src/main.ts +function activate(context) { + const telemetry = new mu( + context.extension.id, + context.extension.packageJSON['version'], + context.extension.packageJSON['aiKey'] + ); + const supportedLanguages = new SupportedLanguages(context); + let serverHandles = []; + startServer(); + function startServer() { + serverHandles.push(_startServer(context, supportedLanguages, telemetry)); + } + async function stopServers() { + const oldHandles = serverHandles.slice(0); + serverHandles = []; + const result = await Promise.allSettled(oldHandles); + for (const item of result) { + if (item.status === 'fulfilled') { + item.value.dispose(); + } + } + } + context.subscriptions.push(supportedLanguages); + context.subscriptions.push( + supportedLanguages.onDidChange(() => { + stopServers(); + startServer(); + }) + ); + context.subscriptions.push(new vscode2.Disposable(stopServers)); +} +async function _showStatusAndInfo( + context, + supportedLanguages, + showCommandHint +) { + const disposables = []; + const _mementoKey = 'didShowMessage'; + const didShowExplainer = context.globalState.get(_mementoKey, false); + disposables.push( + vscode2.commands.registerCommand('anycode.resetDidShowMessage', () => + context.globalState.update(_mementoKey, false) + ) + ); + const statusItem = vscode2.languages.createLanguageStatusItem( + 'info', + supportedLanguages.getSupportedLanguagesAsSelector() + ); + disposables.push(statusItem); + statusItem.severity = vscode2.LanguageStatusSeverity.Warning; + statusItem.text = `Partial Mode`; + if (showCommandHint) { + statusItem.detail = + 'Language support for this file is inaccurate. $(lightbulb-autofix) Did not index all files because search [indexing is disabled](command:remoteHub.enableIndexing).'; + } else { + statusItem.detail = 'Language support for this file is inaccurate.'; + } + statusItem.command = { + title: 'Learn More', + command: 'vscode.open', + arguments: [vscode2.Uri.parse('https://aka.ms/vscode-anycode')], + }; + if (!didShowExplainer) { + async function showMessage() { + await vscode2.window.showInformationMessage( + 'Language support is inaccurate in this context, results may be imprecise and incomplete.' + ); + } + const provideFyi = async () => { + registrations.dispose(); + context.globalState.update(_mementoKey, true); + context.globalState.setKeysForSync([_mementoKey]); + showMessage(); + return void 0; + }; + const selector = supportedLanguages.getSupportedLanguagesAsSelector(); + const registrations = vscode2.Disposable.from( + vscode2.languages.registerDefinitionProvider(selector, { + provideDefinition: provideFyi, + }), + vscode2.languages.registerReferenceProvider(selector, { + provideReferences: provideFyi, + }) + ); + disposables.push(registrations); + } + return vscode2.Disposable.from(...disposables); +} +async function _startServer(context, supportedLanguages, telemetry) { + const disposables = []; + function _sendFeatureTelementry(name, language) { + telemetry.sendTelemetryEvent('feature', { name, language }); + } + const databaseName = context.workspaceState.get( + 'dbName', + `anycode_${Math.random().toString(32).slice(2)}` + ); + context.workspaceState.update('dbName', databaseName); + const clientOptions = { + outputChannelName: 'anycode', + revealOutputChannelOn: + import_vscode_languageclient.RevealOutputChannelOn.Never, + documentSelector: supportedLanguages.getSupportedLanguagesAsSelector(), + synchronize: {}, + initializationOptions: { + treeSitterWasmUri: vscode2.Uri.joinPath( + context.extensionUri, + './server/tree-sitter/tree-sitter.wasm' + ).toString(), + supportedLanguages: supportedLanguages.getSupportedLanguages(), + databaseName, + }, + middleware: { + provideWorkspaceSymbols(query, token, next) { + _sendFeatureTelementry('workspaceSymbols', ''); + return next(query, token); + }, + provideDefinition(document2, position, token, next) { + _sendFeatureTelementry('definition', document2.languageId); + return next(document2, position, token); + }, + provideReferences(document2, position, options, token, next) { + _sendFeatureTelementry('references', document2.languageId); + return next(document2, position, options, token); + }, + provideDocumentHighlights(document2, position, token, next) { + _sendFeatureTelementry('documentHighlights', document2.languageId); + return next(document2, position, token); + }, + provideCompletionItem(document2, position, context2, token, next) { + _sendFeatureTelementry('completions', document2.languageId); + return next(document2, position, context2, token); + }, + }, + }; + const serverMain = vscode2.Uri.joinPath( + context.extensionUri, + 'prebuilt/anycode.server.js' + ); + const worker = new Worker(serverMain.toString()); + const client = new import_browser.LanguageClient( + 'anycode', + 'anycode', + clientOptions, + worker + ); + disposables.push(client.start()); + disposables.push(new vscode2.Disposable(() => worker.terminate())); + await client.onReady(); + const findAndSearchSuffixes = []; + for (const [info, config] of supportedLanguages.getSupportedLanguages()) { + if (config.workspaceSymbols || config.references || config.definitions) { + findAndSearchSuffixes.push(info.suffixes); + } + } + const langPattern = `**/*.{${findAndSearchSuffixes.join(',')}}`; + const watcher = vscode2.workspace.createFileSystemWatcher(langPattern); + disposables.push(watcher); + const exclude = `{${[ + ...Object.keys( + vscode2.workspace.getConfiguration('search', null).get('exclude') ?? {} + ), + ...Object.keys( + vscode2.workspace.getConfiguration('files', null).get('exclude') ?? {} + ), + ].join(',')}}`; + let size = Math.max( + 0, + vscode2.workspace.getConfiguration('anycode').get('symbolIndexSize', 500) + ); + const init = Promise.resolve( + vscode2.workspace.findFiles(langPattern, exclude).then(async (all) => { + let hasWorkspaceContents = 0; + if (all.length > 50) { + if (await _canInitWithoutLimits()) { + size = Number.MAX_SAFE_INTEGER; + hasWorkspaceContents = 1; + } + } + const uris = all.slice(0, size); + console.info( + `USING ${uris.length} of ${all.length} files for ${langPattern}` + ); + const t1 = performance.now(); + await client.sendRequest('queue/init', uris.map(String)); + telemetry.sendTelemetryEvent('init', void 0, { + numOfFiles: all.length, + indexSize: uris.length, + hasWorkspaceContents, + duration: performance.now() - t1, + }); + disposables.push( + await _showStatusAndInfo( + context, + supportedLanguages, + !hasWorkspaceContents && _isRemoteHubWorkspace() + ) + ); + }) + ); + const initCancel = new Promise((resolve) => + disposables.push(new vscode2.Disposable(resolve)) + ); + vscode2.window.withProgress( + { location: vscode2.ProgressLocation.Window, title: 'Building Index...' }, + () => Promise.race([init, initCancel]) + ); + disposables.push( + watcher.onDidCreate((uri) => { + client.sendNotification('queue/add', uri.toString()); + }) + ); + disposables.push( + watcher.onDidDelete((uri) => { + client.sendNotification('queue/remove', uri.toString()); + client.sendNotification('file-cache/remove', uri.toString()); + }) + ); + disposables.push( + watcher.onDidChange((uri) => { + client.sendNotification('queue/add', uri.toString()); + client.sendNotification('file-cache/remove', uri.toString()); + }) + ); + client.onRequest('file/read', async (raw) => { + const uri = vscode2.Uri.parse(raw); + if (uri.scheme === 'vscode-notebook-cell') { + try { + const doc = await vscode2.workspace.openTextDocument(uri); + return new TextEncoder().encode(doc.getText()); + } catch (err) { + console.warn(err); + return new Uint8Array(); + } + } + if (vscode2.workspace.fs.isWritableFileSystem(uri.scheme) === void 0) { + return new Uint8Array(); + } + let data; + try { + const stat = await vscode2.workspace.fs.stat(uri); + if (stat.size > 1024 ** 2) { + console.warn( + `IGNORING "${uri.toString()}" because it is too large (${ + stat.size + }bytes)` + ); + data = new Uint8Array(); + } else { + data = await vscode2.workspace.fs.readFile(uri); + } + return data; + } catch (err) { + console.warn(err); + return new Uint8Array(); + } + }); + const persistUri = + context.storageUri && + vscode2.Uri.joinPath(context.storageUri, 'anycode.db'); + client.onRequest('persisted/read', async () => { + if (!persistUri) { + return new Uint8Array(); + } + try { + return await vscode2.workspace.fs.readFile(persistUri); + } catch { + return new Uint8Array(); + } + }); + client.onRequest('persisted/write', async (data) => { + if (persistUri) { + await vscode2.workspace.fs.writeFile(persistUri, data); + } + }); + return vscode2.Disposable.from(...disposables); +} +function _isRemoteHubWorkspace() { + if ( + !vscode2.extensions.getExtension('GitHub.remoteHub') && + !vscode2.extensions.getExtension('GitHub.remoteHub-insiders') + ) { + return false; + } + return ( + vscode2.workspace.workspaceFolders?.every( + (folder) => folder.uri.scheme === 'vscode-vfs' + ) ?? false + ); +} +async function _canInitWithoutLimits() { + if (!vscode2.workspace.workspaceFolders) { + return false; + } + const remoteFolders = vscode2.workspace.workspaceFolders.filter( + (folder) => folder.uri.scheme === 'vscode-vfs' + ); + if (remoteFolders.length === 0) { + return true; + } + const remoteHub = + vscode2.extensions.getExtension('GitHub.remoteHub') ?? + vscode2.extensions.getExtension('GitHub.remoteHub-insiders'); + const remoteHubApi = await remoteHub?.activate(); + if (typeof remoteHubApi?.loadWorkspaceContents !== 'function') { + return false; + } + for (const folder of remoteFolders) { + if (!(await remoteHubApi.loadWorkspaceContents(folder.uri))) { + return false; + } + } + return true; +} +/*! + * Microsoft Dynamic Proto Utility, 1.1.4 + * Copyright (c) Microsoft and contributors. All rights reserved. + */ diff --git a/extensions/vscode-anycode/prebuilt/anycode.server.js b/extensions/vscode-anycode/prebuilt/anycode.server.js new file mode 100644 index 000000000..f7a02bf9c --- /dev/null +++ b/extensions/vscode-anycode/prebuilt/anycode.server.js @@ -0,0 +1,15546 @@ +(() => { + let __create = Object.create; + let __defProp = Object.defineProperty; + let __getOwnPropDesc = Object.getOwnPropertyDescriptor; + let __getOwnPropNames = Object.getOwnPropertyNames; + let __getProtoOf = Object.getPrototypeOf; + let __hasOwnProp = Object.prototype.hasOwnProperty; + let __markAsModule = (target) => + __defProp(target, '__esModule', { value: true }); + let __require = /* @__PURE__ */ ((x) => + typeof require !== 'undefined' + ? require + : typeof Proxy !== 'undefined' + ? new Proxy(x, { + get: (a, b) => (typeof require !== 'undefined' ? require : a)[b], + }) + : x)(function (x) { + if (typeof require !== 'undefined') { + return require.apply(this, arguments); + } + throw new Error('Dynamic require of "' + x + '" is not supported'); + }); + let __commonJS = (cb, mod10) => + function __require2() { + return ( + mod10 || + (0, cb[Object.keys(cb)[0]])((mod10 = { exports: {} }).exports, mod10), + mod10.exports + ); + }; + let __reExport = (target, module, desc) => { + if ( + (module && typeof module === 'object') || + typeof module === 'function' + ) { + for (let key of __getOwnPropNames(module)) { + if (!__hasOwnProp.call(target, key) && key !== 'default') { + __defProp(target, key, { + get: () => module[key], + enumerable: + !(desc = __getOwnPropDesc(module, key)) || desc.enumerable, + }); + } + } + } + return target; + }; + let __toModule = (module) => { + return __reExport( + __markAsModule( + __defProp( + module != null ? __create(__getProtoOf(module)) : {}, + 'default', + module && module.__esModule && 'default' in module + ? { get: () => module.default, enumerable: true } + : { value: module, enumerable: true } + ) + ), + module + ); + }; + + // server/node_modules/vscode-jsonrpc/lib/common/ral.js + let require_ral = __commonJS({ + 'server/node_modules/vscode-jsonrpc/lib/common/ral.js'(exports) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + let _ral; + function RAL() { + if (_ral === void 0) { + throw new Error(`No runtime abstraction layer installed`); + } + return _ral; + } + (function (RAL2) { + function install(ral) { + if (ral === void 0) { + throw new Error(`No runtime abstraction layer provided`); + } + _ral = ral; + } + RAL2.install = install; + })(RAL || (RAL = {})); + exports.default = RAL; + }, + }); + + // server/node_modules/vscode-jsonrpc/lib/common/disposable.js + let require_disposable = __commonJS({ + 'server/node_modules/vscode-jsonrpc/lib/common/disposable.js'(exports) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.Disposable = void 0; + let Disposable; + (function (Disposable2) { + function create(func) { + return { + dispose: func, + }; + } + Disposable2.create = create; + })((Disposable = exports.Disposable || (exports.Disposable = {}))); + }, + }); + + // server/node_modules/vscode-jsonrpc/lib/common/events.js + let require_events = __commonJS({ + 'server/node_modules/vscode-jsonrpc/lib/common/events.js'(exports) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.Emitter = exports.Event = void 0; + let ral_1 = require_ral(); + let Event; + (function (Event2) { + const _disposable = { dispose() {} }; + Event2.None = function () { + return _disposable; + }; + })((Event = exports.Event || (exports.Event = {}))); + let CallbackList = class { + add(callback, context = null, bucket) { + if (!this._callbacks) { + this._callbacks = []; + this._contexts = []; + } + this._callbacks.push(callback); + this._contexts.push(context); + if (Array.isArray(bucket)) { + bucket.push({ dispose: () => this.remove(callback, context) }); + } + } + remove(callback, context = null) { + if (!this._callbacks) { + return; + } + let foundCallbackWithDifferentContext = false; + for (let i = 0, len = this._callbacks.length; i < len; i++) { + if (this._callbacks[i] === callback) { + if (this._contexts[i] === context) { + this._callbacks.splice(i, 1); + this._contexts.splice(i, 1); + return; + } else { + foundCallbackWithDifferentContext = true; + } + } + } + if (foundCallbackWithDifferentContext) { + throw new Error( + 'When adding a listener with a context, you should remove it with the same context' + ); + } + } + invoke(...args) { + if (!this._callbacks) { + return []; + } + const ret = [], + callbacks = this._callbacks.slice(0), + contexts = this._contexts.slice(0); + for (let i = 0, len = callbacks.length; i < len; i++) { + try { + ret.push(callbacks[i].apply(contexts[i], args)); + } catch (e) { + (0, ral_1.default)().console.error(e); + } + } + return ret; + } + isEmpty() { + return !this._callbacks || this._callbacks.length === 0; + } + dispose() { + this._callbacks = void 0; + this._contexts = void 0; + } + }; + var Emitter2 = class { + constructor(_options) { + this._options = _options; + } + get event() { + if (!this._event) { + this._event = (listener, thisArgs, disposables) => { + if (!this._callbacks) { + this._callbacks = new CallbackList(); + } + if ( + this._options && + this._options.onFirstListenerAdd && + this._callbacks.isEmpty() + ) { + this._options.onFirstListenerAdd(this); + } + this._callbacks.add(listener, thisArgs); + const result = { + dispose: () => { + if (!this._callbacks) { + return; + } + this._callbacks.remove(listener, thisArgs); + result.dispose = Emitter2._noop; + if ( + this._options && + this._options.onLastListenerRemove && + this._callbacks.isEmpty() + ) { + this._options.onLastListenerRemove(this); + } + }, + }; + if (Array.isArray(disposables)) { + disposables.push(result); + } + return result; + }; + } + return this._event; + } + fire(event) { + if (this._callbacks) { + this._callbacks.invoke.call(this._callbacks, event); + } + } + dispose() { + if (this._callbacks) { + this._callbacks.dispose(); + this._callbacks = void 0; + } + } + }; + exports.Emitter = Emitter2; + Emitter2._noop = function () {}; + }, + }); + + // server/node_modules/vscode-jsonrpc/lib/common/messageBuffer.js + let require_messageBuffer = __commonJS({ + 'server/node_modules/vscode-jsonrpc/lib/common/messageBuffer.js'(exports) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.AbstractMessageBuffer = void 0; + let CR = 13; + let LF = 10; + let CRLF = '\r\n'; + let AbstractMessageBuffer = class { + constructor(encoding = 'utf-8') { + this._encoding = encoding; + this._chunks = []; + this._totalLength = 0; + } + get encoding() { + return this._encoding; + } + append(chunk) { + const toAppend = + typeof chunk === 'string' + ? this.fromString(chunk, this._encoding) + : chunk; + this._chunks.push(toAppend); + this._totalLength += toAppend.byteLength; + } + tryReadHeaders() { + if (this._chunks.length === 0) { + return void 0; + } + let state = 0; + let chunkIndex = 0; + let offset = 0; + let chunkBytesRead = 0; + row: while (chunkIndex < this._chunks.length) { + const chunk = this._chunks[chunkIndex]; + offset = 0; + while (offset < chunk.length) { + const value = chunk[offset]; + switch (value) { + case CR: + switch (state) { + case 0: + state = 1; + break; + case 2: + state = 3; + break; + default: + state = 0; + } + break; + case LF: + switch (state) { + case 1: + state = 2; + break; + case 3: + state = 4; + offset++; + break row; + default: + state = 0; + } + break; + default: + state = 0; + } + offset++; + } + chunkBytesRead += chunk.byteLength; + chunkIndex++; + } + if (state !== 4) { + return void 0; + } + const buffer = this._read(chunkBytesRead + offset); + const result = new Map(); + const headers = this.toString(buffer, 'ascii').split(CRLF); + if (headers.length < 2) { + return result; + } + for (let i = 0; i < headers.length - 2; i++) { + const header = headers[i]; + const index = header.indexOf(':'); + if (index === -1) { + throw new Error( + 'Message header must separate key and value using :' + ); + } + const key = header.substr(0, index); + const value = header.substr(index + 1).trim(); + result.set(key, value); + } + return result; + } + tryReadBody(length) { + if (this._totalLength < length) { + return void 0; + } + return this._read(length); + } + get numberOfBytes() { + return this._totalLength; + } + _read(byteCount) { + if (byteCount === 0) { + return this.emptyBuffer(); + } + if (byteCount > this._totalLength) { + throw new Error(`Cannot read so many bytes!`); + } + if (this._chunks[0].byteLength === byteCount) { + const chunk = this._chunks[0]; + this._chunks.shift(); + this._totalLength -= byteCount; + return this.asNative(chunk); + } + if (this._chunks[0].byteLength > byteCount) { + const chunk = this._chunks[0]; + const result2 = this.asNative(chunk, byteCount); + this._chunks[0] = chunk.slice(byteCount); + this._totalLength -= byteCount; + return result2; + } + const result = this.allocNative(byteCount); + let resultOffset = 0; + let chunkIndex = 0; + while (byteCount > 0) { + const chunk = this._chunks[chunkIndex]; + if (chunk.byteLength > byteCount) { + const chunkPart = chunk.slice(0, byteCount); + result.set(chunkPart, resultOffset); + resultOffset += byteCount; + this._chunks[chunkIndex] = chunk.slice(byteCount); + this._totalLength -= byteCount; + byteCount -= byteCount; + } else { + result.set(chunk, resultOffset); + resultOffset += chunk.byteLength; + this._chunks.shift(); + this._totalLength -= chunk.byteLength; + byteCount -= chunk.byteLength; + } + } + return result; + } + }; + exports.AbstractMessageBuffer = AbstractMessageBuffer; + }, + }); + + // server/node_modules/vscode-jsonrpc/lib/browser/ril.js + let require_ril = __commonJS({ + 'server/node_modules/vscode-jsonrpc/lib/browser/ril.js'(exports) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + let ral_1 = require_ral(); + let disposable_1 = require_disposable(); + let events_1 = require_events(); + let messageBuffer_1 = require_messageBuffer(); + var MessageBuffer = class extends messageBuffer_1.AbstractMessageBuffer { + constructor(encoding = 'utf-8') { + super(encoding); + this.asciiDecoder = new TextDecoder('ascii'); + } + emptyBuffer() { + return MessageBuffer.emptyBuffer; + } + fromString(value, _encoding) { + return new TextEncoder().encode(value); + } + toString(value, encoding) { + if (encoding === 'ascii') { + return this.asciiDecoder.decode(value); + } else { + return new TextDecoder(encoding).decode(value); + } + } + asNative(buffer, length) { + if (length === void 0) { + return buffer; + } else { + return buffer.slice(0, length); + } + } + allocNative(length) { + return new Uint8Array(length); + } + }; + MessageBuffer.emptyBuffer = new Uint8Array(0); + let ReadableStreamWrapper = class { + constructor(socket) { + this.socket = socket; + this._onData = new events_1.Emitter(); + this._messageListener = (event) => { + const blob = event.data; + blob.arrayBuffer().then( + (buffer) => { + this._onData.fire(new Uint8Array(buffer)); + }, + () => { + (0, ral_1.default)().console.error( + `Converting blob to array buffer failed.` + ); + } + ); + }; + this.socket.addEventListener('message', this._messageListener); + } + onClose(listener) { + this.socket.addEventListener('close', listener); + return disposable_1.Disposable.create(() => + this.socket.removeEventListener('close', listener) + ); + } + onError(listener) { + this.socket.addEventListener('error', listener); + return disposable_1.Disposable.create(() => + this.socket.removeEventListener('error', listener) + ); + } + onEnd(listener) { + this.socket.addEventListener('end', listener); + return disposable_1.Disposable.create(() => + this.socket.removeEventListener('end', listener) + ); + } + onData(listener) { + return this._onData.event(listener); + } + }; + let WritableStreamWrapper = class { + constructor(socket) { + this.socket = socket; + } + onClose(listener) { + this.socket.addEventListener('close', listener); + return disposable_1.Disposable.create(() => + this.socket.removeEventListener('close', listener) + ); + } + onError(listener) { + this.socket.addEventListener('error', listener); + return disposable_1.Disposable.create(() => + this.socket.removeEventListener('error', listener) + ); + } + onEnd(listener) { + this.socket.addEventListener('end', listener); + return disposable_1.Disposable.create(() => + this.socket.removeEventListener('end', listener) + ); + } + write(data, encoding) { + if (typeof data === 'string') { + if (encoding !== void 0 && encoding !== 'utf-8') { + throw new Error( + `In a Browser environments only utf-8 text encoding is supported. But got encoding: ${encoding}` + ); + } + this.socket.send(data); + } else { + this.socket.send(data); + } + return Promise.resolve(); + } + end() { + this.socket.close(); + } + }; + let _textEncoder = new TextEncoder(); + let _ril = Object.freeze({ + messageBuffer: Object.freeze({ + create: (encoding) => new MessageBuffer(encoding), + }), + applicationJson: Object.freeze({ + encoder: Object.freeze({ + name: 'application/json', + encode: (msg, options) => { + if (options.charset !== 'utf-8') { + throw new Error( + `In a Browser environments only utf-8 text encoding is supported. But got encoding: ${options.charset}` + ); + } + return Promise.resolve( + _textEncoder.encode(JSON.stringify(msg, void 0, 0)) + ); + }, + }), + decoder: Object.freeze({ + name: 'application/json', + decode: (buffer, options) => { + if (!(buffer instanceof Uint8Array)) { + throw new Error( + `In a Browser environments only Uint8Arrays are supported.` + ); + } + return Promise.resolve( + JSON.parse(new TextDecoder(options.charset).decode(buffer)) + ); + }, + }), + }), + stream: Object.freeze({ + asReadableStream: (socket) => new ReadableStreamWrapper(socket), + asWritableStream: (socket) => new WritableStreamWrapper(socket), + }), + console, + timer: Object.freeze({ + setTimeout(callback, ms, ...args) { + const handle = setTimeout(callback, ms, ...args); + return { dispose: () => clearTimeout(handle) }; + }, + setImmediate(callback, ...args) { + const handle = setTimeout(callback, 0, ...args); + return { dispose: () => clearTimeout(handle) }; + }, + setInterval(callback, ms, ...args) { + const handle = setInterval(callback, ms, ...args); + return { dispose: () => clearInterval(handle) }; + }, + }), + }); + function RIL() { + return _ril; + } + (function (RIL2) { + function install() { + ral_1.default.install(_ril); + } + RIL2.install = install; + })(RIL || (RIL = {})); + exports.default = RIL; + }, + }); + + // server/node_modules/vscode-jsonrpc/lib/common/is.js + let require_is = __commonJS({ + 'server/node_modules/vscode-jsonrpc/lib/common/is.js'(exports) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.stringArray = exports.array = exports.func = exports.error = exports.number = exports.string = exports.boolean = void 0; + function boolean(value) { + return value === true || value === false; + } + exports.boolean = boolean; + function string(value) { + return typeof value === 'string' || value instanceof String; + } + exports.string = string; + function number(value) { + return typeof value === 'number' || value instanceof Number; + } + exports.number = number; + function error(value) { + return value instanceof Error; + } + exports.error = error; + function func(value) { + return typeof value === 'function'; + } + exports.func = func; + function array(value) { + return Array.isArray(value); + } + exports.array = array; + function stringArray(value) { + return array(value) && value.every((elem) => string(elem)); + } + exports.stringArray = stringArray; + }, + }); + + // server/node_modules/vscode-jsonrpc/lib/common/messages.js + let require_messages = __commonJS({ + 'server/node_modules/vscode-jsonrpc/lib/common/messages.js'(exports) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.Message = exports.NotificationType9 = exports.NotificationType8 = exports.NotificationType7 = exports.NotificationType6 = exports.NotificationType5 = exports.NotificationType4 = exports.NotificationType3 = exports.NotificationType2 = exports.NotificationType1 = exports.NotificationType0 = exports.NotificationType = exports.RequestType9 = exports.RequestType8 = exports.RequestType7 = exports.RequestType6 = exports.RequestType5 = exports.RequestType4 = exports.RequestType3 = exports.RequestType2 = exports.RequestType1 = exports.RequestType = exports.RequestType0 = exports.AbstractMessageSignature = exports.ParameterStructures = exports.ResponseError = exports.ErrorCodes = void 0; + let is = require_is(); + let ErrorCodes; + (function (ErrorCodes2) { + ErrorCodes2.ParseError = -32700; + ErrorCodes2.InvalidRequest = -32600; + ErrorCodes2.MethodNotFound = -32601; + ErrorCodes2.InvalidParams = -32602; + ErrorCodes2.InternalError = -32603; + ErrorCodes2.jsonrpcReservedErrorRangeStart = -32099; + ErrorCodes2.serverErrorStart = + ErrorCodes2.jsonrpcReservedErrorRangeStart; + ErrorCodes2.MessageWriteError = -32099; + ErrorCodes2.MessageReadError = -32098; + ErrorCodes2.ServerNotInitialized = -32002; + ErrorCodes2.UnknownErrorCode = -32001; + ErrorCodes2.jsonrpcReservedErrorRangeEnd = -32e3; + ErrorCodes2.serverErrorEnd = ErrorCodes2.jsonrpcReservedErrorRangeEnd; + })((ErrorCodes = exports.ErrorCodes || (exports.ErrorCodes = {}))); + var ResponseError = class extends Error { + constructor(code, message, data) { + super(message); + this.code = is.number(code) ? code : ErrorCodes.UnknownErrorCode; + this.data = data; + Object.setPrototypeOf(this, ResponseError.prototype); + } + toJson() { + const result = { + code: this.code, + message: this.message, + }; + if (this.data !== void 0) { + result.data = this.data; + } + return result; + } + }; + exports.ResponseError = ResponseError; + var ParameterStructures = class { + constructor(kind) { + this.kind = kind; + } + static is(value) { + return ( + value === ParameterStructures.auto || + value === ParameterStructures.byName || + value === ParameterStructures.byPosition + ); + } + toString() { + return this.kind; + } + }; + exports.ParameterStructures = ParameterStructures; + ParameterStructures.auto = new ParameterStructures('auto'); + ParameterStructures.byPosition = new ParameterStructures('byPosition'); + ParameterStructures.byName = new ParameterStructures('byName'); + let AbstractMessageSignature = class { + constructor(method, numberOfParams) { + this.method = method; + this.numberOfParams = numberOfParams; + } + get parameterStructures() { + return ParameterStructures.auto; + } + }; + exports.AbstractMessageSignature = AbstractMessageSignature; + let RequestType0 = class extends AbstractMessageSignature { + constructor(method) { + super(method, 0); + } + }; + exports.RequestType0 = RequestType0; + let RequestType = class extends AbstractMessageSignature { + constructor(method, _parameterStructures = ParameterStructures.auto) { + super(method, 1); + this._parameterStructures = _parameterStructures; + } + get parameterStructures() { + return this._parameterStructures; + } + }; + exports.RequestType = RequestType; + let RequestType1 = class extends AbstractMessageSignature { + constructor(method, _parameterStructures = ParameterStructures.auto) { + super(method, 1); + this._parameterStructures = _parameterStructures; + } + get parameterStructures() { + return this._parameterStructures; + } + }; + exports.RequestType1 = RequestType1; + let RequestType2 = class extends AbstractMessageSignature { + constructor(method) { + super(method, 2); + } + }; + exports.RequestType2 = RequestType2; + let RequestType3 = class extends AbstractMessageSignature { + constructor(method) { + super(method, 3); + } + }; + exports.RequestType3 = RequestType3; + let RequestType4 = class extends AbstractMessageSignature { + constructor(method) { + super(method, 4); + } + }; + exports.RequestType4 = RequestType4; + let RequestType5 = class extends AbstractMessageSignature { + constructor(method) { + super(method, 5); + } + }; + exports.RequestType5 = RequestType5; + let RequestType6 = class extends AbstractMessageSignature { + constructor(method) { + super(method, 6); + } + }; + exports.RequestType6 = RequestType6; + let RequestType7 = class extends AbstractMessageSignature { + constructor(method) { + super(method, 7); + } + }; + exports.RequestType7 = RequestType7; + let RequestType8 = class extends AbstractMessageSignature { + constructor(method) { + super(method, 8); + } + }; + exports.RequestType8 = RequestType8; + let RequestType9 = class extends AbstractMessageSignature { + constructor(method) { + super(method, 9); + } + }; + exports.RequestType9 = RequestType9; + let NotificationType = class extends AbstractMessageSignature { + constructor(method, _parameterStructures = ParameterStructures.auto) { + super(method, 1); + this._parameterStructures = _parameterStructures; + } + get parameterStructures() { + return this._parameterStructures; + } + }; + exports.NotificationType = NotificationType; + let NotificationType0 = class extends AbstractMessageSignature { + constructor(method) { + super(method, 0); + } + }; + exports.NotificationType0 = NotificationType0; + let NotificationType1 = class extends AbstractMessageSignature { + constructor(method, _parameterStructures = ParameterStructures.auto) { + super(method, 1); + this._parameterStructures = _parameterStructures; + } + get parameterStructures() { + return this._parameterStructures; + } + }; + exports.NotificationType1 = NotificationType1; + let NotificationType2 = class extends AbstractMessageSignature { + constructor(method) { + super(method, 2); + } + }; + exports.NotificationType2 = NotificationType2; + let NotificationType3 = class extends AbstractMessageSignature { + constructor(method) { + super(method, 3); + } + }; + exports.NotificationType3 = NotificationType3; + let NotificationType4 = class extends AbstractMessageSignature { + constructor(method) { + super(method, 4); + } + }; + exports.NotificationType4 = NotificationType4; + let NotificationType5 = class extends AbstractMessageSignature { + constructor(method) { + super(method, 5); + } + }; + exports.NotificationType5 = NotificationType5; + let NotificationType6 = class extends AbstractMessageSignature { + constructor(method) { + super(method, 6); + } + }; + exports.NotificationType6 = NotificationType6; + let NotificationType7 = class extends AbstractMessageSignature { + constructor(method) { + super(method, 7); + } + }; + exports.NotificationType7 = NotificationType7; + let NotificationType8 = class extends AbstractMessageSignature { + constructor(method) { + super(method, 8); + } + }; + exports.NotificationType8 = NotificationType8; + let NotificationType9 = class extends AbstractMessageSignature { + constructor(method) { + super(method, 9); + } + }; + exports.NotificationType9 = NotificationType9; + let Message; + (function (Message2) { + function isRequest(message) { + const candidate = message; + return ( + candidate && + is.string(candidate.method) && + (is.string(candidate.id) || is.number(candidate.id)) + ); + } + Message2.isRequest = isRequest; + function isNotification(message) { + const candidate = message; + return ( + candidate && is.string(candidate.method) && message.id === void 0 + ); + } + Message2.isNotification = isNotification; + function isResponse(message) { + const candidate = message; + return ( + candidate && + (candidate.result !== void 0 || !!candidate.error) && + (is.string(candidate.id) || + is.number(candidate.id) || + candidate.id === null) + ); + } + Message2.isResponse = isResponse; + })((Message = exports.Message || (exports.Message = {}))); + }, + }); + + // server/node_modules/vscode-jsonrpc/lib/common/linkedMap.js + let require_linkedMap = __commonJS({ + 'server/node_modules/vscode-jsonrpc/lib/common/linkedMap.js'(exports) { + 'use strict'; + let _a; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.LRUCache = exports.LinkedMap = exports.Touch = void 0; + let Touch; + (function (Touch2) { + Touch2.None = 0; + Touch2.First = 1; + Touch2.AsOld = Touch2.First; + Touch2.Last = 2; + Touch2.AsNew = Touch2.Last; + })((Touch = exports.Touch || (exports.Touch = {}))); + let LinkedMap = class { + constructor() { + this[_a] = 'LinkedMap'; + this._map = new Map(); + this._head = void 0; + this._tail = void 0; + this._size = 0; + this._state = 0; + } + clear() { + this._map.clear(); + this._head = void 0; + this._tail = void 0; + this._size = 0; + this._state++; + } + isEmpty() { + return !this._head && !this._tail; + } + get size() { + return this._size; + } + get first() { + return this._head?.value; + } + get last() { + return this._tail?.value; + } + has(key) { + return this._map.has(key); + } + get(key, touch = Touch.None) { + const item = this._map.get(key); + if (!item) { + return void 0; + } + if (touch !== Touch.None) { + this.touch(item, touch); + } + return item.value; + } + set(key, value, touch = Touch.None) { + let item = this._map.get(key); + if (item) { + item.value = value; + if (touch !== Touch.None) { + this.touch(item, touch); + } + } else { + item = { key, value, next: void 0, previous: void 0 }; + switch (touch) { + case Touch.None: + this.addItemLast(item); + break; + case Touch.First: + this.addItemFirst(item); + break; + case Touch.Last: + this.addItemLast(item); + break; + default: + this.addItemLast(item); + break; + } + this._map.set(key, item); + this._size++; + } + return this; + } + delete(key) { + return !!this.remove(key); + } + remove(key) { + const item = this._map.get(key); + if (!item) { + return void 0; + } + this._map.delete(key); + this.removeItem(item); + this._size--; + return item.value; + } + shift() { + if (!this._head && !this._tail) { + return void 0; + } + if (!this._head || !this._tail) { + throw new Error('Invalid list'); + } + const item = this._head; + this._map.delete(item.key); + this.removeItem(item); + this._size--; + return item.value; + } + forEach(callbackfn, thisArg) { + const state = this._state; + let current = this._head; + while (current) { + if (thisArg) { + callbackfn.bind(thisArg)(current.value, current.key, this); + } else { + callbackfn(current.value, current.key, this); + } + if (this._state !== state) { + throw new Error(`LinkedMap got modified during iteration.`); + } + current = current.next; + } + } + keys() { + const state = this._state; + let current = this._head; + const iterator = { + [Symbol.iterator]: () => { + return iterator; + }, + next: () => { + if (this._state !== state) { + throw new Error(`LinkedMap got modified during iteration.`); + } + if (current) { + const result = { value: current.key, done: false }; + current = current.next; + return result; + } else { + return { value: void 0, done: true }; + } + }, + }; + return iterator; + } + values() { + const state = this._state; + let current = this._head; + const iterator = { + [Symbol.iterator]: () => { + return iterator; + }, + next: () => { + if (this._state !== state) { + throw new Error(`LinkedMap got modified during iteration.`); + } + if (current) { + const result = { value: current.value, done: false }; + current = current.next; + return result; + } else { + return { value: void 0, done: true }; + } + }, + }; + return iterator; + } + entries() { + const state = this._state; + let current = this._head; + const iterator = { + [Symbol.iterator]: () => { + return iterator; + }, + next: () => { + if (this._state !== state) { + throw new Error(`LinkedMap got modified during iteration.`); + } + if (current) { + const result = { + value: [current.key, current.value], + done: false, + }; + current = current.next; + return result; + } else { + return { value: void 0, done: true }; + } + }, + }; + return iterator; + } + [((_a = Symbol.toStringTag), Symbol.iterator)]() { + return this.entries(); + } + trimOld(newSize) { + if (newSize >= this.size) { + return; + } + if (newSize === 0) { + this.clear(); + return; + } + let current = this._head; + let currentSize = this.size; + while (current && currentSize > newSize) { + this._map.delete(current.key); + current = current.next; + currentSize--; + } + this._head = current; + this._size = currentSize; + if (current) { + current.previous = void 0; + } + this._state++; + } + addItemFirst(item) { + if (!this._head && !this._tail) { + this._tail = item; + } else if (!this._head) { + throw new Error('Invalid list'); + } else { + item.next = this._head; + this._head.previous = item; + } + this._head = item; + this._state++; + } + addItemLast(item) { + if (!this._head && !this._tail) { + this._head = item; + } else if (!this._tail) { + throw new Error('Invalid list'); + } else { + item.previous = this._tail; + this._tail.next = item; + } + this._tail = item; + this._state++; + } + removeItem(item) { + if (item === this._head && item === this._tail) { + this._head = void 0; + this._tail = void 0; + } else if (item === this._head) { + if (!item.next) { + throw new Error('Invalid list'); + } + item.next.previous = void 0; + this._head = item.next; + } else if (item === this._tail) { + if (!item.previous) { + throw new Error('Invalid list'); + } + item.previous.next = void 0; + this._tail = item.previous; + } else { + const next = item.next; + const previous = item.previous; + if (!next || !previous) { + throw new Error('Invalid list'); + } + next.previous = previous; + previous.next = next; + } + item.next = void 0; + item.previous = void 0; + this._state++; + } + touch(item, touch) { + if (!this._head || !this._tail) { + throw new Error('Invalid list'); + } + if (touch !== Touch.First && touch !== Touch.Last) { + return; + } + if (touch === Touch.First) { + if (item === this._head) { + return; + } + const next = item.next; + const previous = item.previous; + if (item === this._tail) { + previous.next = void 0; + this._tail = previous; + } else { + next.previous = previous; + previous.next = next; + } + item.previous = void 0; + item.next = this._head; + this._head.previous = item; + this._head = item; + this._state++; + } else if (touch === Touch.Last) { + if (item === this._tail) { + return; + } + const next = item.next; + const previous = item.previous; + if (item === this._head) { + next.previous = void 0; + this._head = next; + } else { + next.previous = previous; + previous.next = next; + } + item.next = void 0; + item.previous = this._tail; + this._tail.next = item; + this._tail = item; + this._state++; + } + } + toJSON() { + const data = []; + this.forEach((value, key) => { + data.push([key, value]); + }); + return data; + } + fromJSON(data) { + this.clear(); + for (const [key, value] of data) { + this.set(key, value); + } + } + }; + exports.LinkedMap = LinkedMap; + let LRUCache = class extends LinkedMap { + constructor(limit, ratio = 1) { + super(); + this._limit = limit; + this._ratio = Math.min(Math.max(0, ratio), 1); + } + get limit() { + return this._limit; + } + set limit(limit) { + this._limit = limit; + this.checkTrim(); + } + get ratio() { + return this._ratio; + } + set ratio(ratio) { + this._ratio = Math.min(Math.max(0, ratio), 1); + this.checkTrim(); + } + get(key, touch = Touch.AsNew) { + return super.get(key, touch); + } + peek(key) { + return super.get(key, Touch.None); + } + set(key, value) { + super.set(key, value, Touch.Last); + this.checkTrim(); + return this; + } + checkTrim() { + if (this.size > this._limit) { + this.trimOld(Math.round(this._limit * this._ratio)); + } + } + }; + exports.LRUCache = LRUCache; + }, + }); + + // server/node_modules/vscode-jsonrpc/lib/common/cancellation.js + let require_cancellation = __commonJS({ + 'server/node_modules/vscode-jsonrpc/lib/common/cancellation.js'(exports) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.CancellationTokenSource = exports.CancellationToken = void 0; + let ral_1 = require_ral(); + let Is = require_is(); + let events_1 = require_events(); + let CancellationToken; + (function (CancellationToken2) { + CancellationToken2.None = Object.freeze({ + isCancellationRequested: false, + onCancellationRequested: events_1.Event.None, + }); + CancellationToken2.Cancelled = Object.freeze({ + isCancellationRequested: true, + onCancellationRequested: events_1.Event.None, + }); + function is(value) { + const candidate = value; + return ( + candidate && + (candidate === CancellationToken2.None || + candidate === CancellationToken2.Cancelled || + (Is.boolean(candidate.isCancellationRequested) && + !!candidate.onCancellationRequested)) + ); + } + CancellationToken2.is = is; + })( + (CancellationToken = + exports.CancellationToken || (exports.CancellationToken = {})) + ); + let shortcutEvent = Object.freeze(function (callback, context) { + const handle = (0, ral_1.default)().timer.setTimeout( + callback.bind(context), + 0 + ); + return { + dispose() { + handle.dispose(); + }, + }; + }); + let MutableToken = class { + constructor() { + this._isCancelled = false; + } + cancel() { + if (!this._isCancelled) { + this._isCancelled = true; + if (this._emitter) { + this._emitter.fire(void 0); + this.dispose(); + } + } + } + get isCancellationRequested() { + return this._isCancelled; + } + get onCancellationRequested() { + if (this._isCancelled) { + return shortcutEvent; + } + if (!this._emitter) { + this._emitter = new events_1.Emitter(); + } + return this._emitter.event; + } + dispose() { + if (this._emitter) { + this._emitter.dispose(); + this._emitter = void 0; + } + } + }; + let CancellationTokenSource3 = class { + get token() { + if (!this._token) { + this._token = new MutableToken(); + } + return this._token; + } + cancel() { + if (!this._token) { + this._token = CancellationToken.Cancelled; + } else { + this._token.cancel(); + } + } + dispose() { + if (!this._token) { + this._token = CancellationToken.None; + } else if (this._token instanceof MutableToken) { + this._token.dispose(); + } + } + }; + exports.CancellationTokenSource = CancellationTokenSource3; + }, + }); + + // server/node_modules/vscode-jsonrpc/lib/common/messageReader.js + let require_messageReader = __commonJS({ + 'server/node_modules/vscode-jsonrpc/lib/common/messageReader.js'(exports) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.ReadableStreamMessageReader = exports.AbstractMessageReader = exports.MessageReader = void 0; + let ral_1 = require_ral(); + let Is = require_is(); + let events_1 = require_events(); + let MessageReader; + (function (MessageReader2) { + function is(value) { + let candidate = value; + return ( + candidate && + Is.func(candidate.listen) && + Is.func(candidate.dispose) && + Is.func(candidate.onError) && + Is.func(candidate.onClose) && + Is.func(candidate.onPartialMessage) + ); + } + MessageReader2.is = is; + })( + (MessageReader = exports.MessageReader || (exports.MessageReader = {})) + ); + let AbstractMessageReader = class { + constructor() { + this.errorEmitter = new events_1.Emitter(); + this.closeEmitter = new events_1.Emitter(); + this.partialMessageEmitter = new events_1.Emitter(); + } + dispose() { + this.errorEmitter.dispose(); + this.closeEmitter.dispose(); + } + get onError() { + return this.errorEmitter.event; + } + fireError(error) { + this.errorEmitter.fire(this.asError(error)); + } + get onClose() { + return this.closeEmitter.event; + } + fireClose() { + this.closeEmitter.fire(void 0); + } + get onPartialMessage() { + return this.partialMessageEmitter.event; + } + firePartialMessage(info) { + this.partialMessageEmitter.fire(info); + } + asError(error) { + if (error instanceof Error) { + return error; + } else { + return new Error( + `Reader received error. Reason: ${ + Is.string(error.message) ? error.message : 'unknown' + }` + ); + } + } + }; + exports.AbstractMessageReader = AbstractMessageReader; + let ResolvedMessageReaderOptions; + (function (ResolvedMessageReaderOptions2) { + function fromOptions(options) { + let charset; + let result; + let contentDecoder; + const contentDecoders = new Map(); + let contentTypeDecoder; + const contentTypeDecoders = new Map(); + if (options === void 0 || typeof options === 'string') { + charset = options ?? 'utf-8'; + } else { + charset = options.charset ?? 'utf-8'; + if (options.contentDecoder !== void 0) { + contentDecoder = options.contentDecoder; + contentDecoders.set(contentDecoder.name, contentDecoder); + } + if (options.contentDecoders !== void 0) { + for (const decoder of options.contentDecoders) { + contentDecoders.set(decoder.name, decoder); + } + } + if (options.contentTypeDecoder !== void 0) { + contentTypeDecoder = options.contentTypeDecoder; + contentTypeDecoders.set( + contentTypeDecoder.name, + contentTypeDecoder + ); + } + if (options.contentTypeDecoders !== void 0) { + for (const decoder of options.contentTypeDecoders) { + contentTypeDecoders.set(decoder.name, decoder); + } + } + } + if (contentTypeDecoder === void 0) { + contentTypeDecoder = (0, ral_1.default)().applicationJson.decoder; + contentTypeDecoders.set( + contentTypeDecoder.name, + contentTypeDecoder + ); + } + return { + charset, + contentDecoder, + contentDecoders, + contentTypeDecoder, + contentTypeDecoders, + }; + } + ResolvedMessageReaderOptions2.fromOptions = fromOptions; + })(ResolvedMessageReaderOptions || (ResolvedMessageReaderOptions = {})); + let ReadableStreamMessageReader = class extends AbstractMessageReader { + constructor(readable, options) { + super(); + this.readable = readable; + this.options = ResolvedMessageReaderOptions.fromOptions(options); + this.buffer = (0, ral_1.default)().messageBuffer.create( + this.options.charset + ); + this._partialMessageTimeout = 1e4; + this.nextMessageLength = -1; + this.messageToken = 0; + } + set partialMessageTimeout(timeout) { + this._partialMessageTimeout = timeout; + } + get partialMessageTimeout() { + return this._partialMessageTimeout; + } + listen(callback) { + this.nextMessageLength = -1; + this.messageToken = 0; + this.partialMessageTimer = void 0; + this.callback = callback; + const result = this.readable.onData((data) => { + this.onData(data); + }); + this.readable.onError((error) => this.fireError(error)); + this.readable.onClose(() => this.fireClose()); + return result; + } + onData(data) { + this.buffer.append(data); + while (true) { + if (this.nextMessageLength === -1) { + const headers = this.buffer.tryReadHeaders(); + if (!headers) { + return; + } + const contentLength = headers.get('Content-Length'); + if (!contentLength) { + throw new Error( + 'Header must provide a Content-Length property.' + ); + } + const length = parseInt(contentLength); + if (isNaN(length)) { + throw new Error('Content-Length value must be a number.'); + } + this.nextMessageLength = length; + } + const body = this.buffer.tryReadBody(this.nextMessageLength); + if (body === void 0) { + this.setPartialMessageTimer(); + return; + } + this.clearPartialMessageTimer(); + this.nextMessageLength = -1; + let p; + if (this.options.contentDecoder !== void 0) { + p = this.options.contentDecoder.decode(body); + } else { + p = Promise.resolve(body); + } + p.then( + (value) => { + this.options.contentTypeDecoder + .decode(value, this.options) + .then( + (msg) => { + this.callback(msg); + }, + (error) => { + this.fireError(error); + } + ); + }, + (error) => { + this.fireError(error); + } + ); + } + } + clearPartialMessageTimer() { + if (this.partialMessageTimer) { + this.partialMessageTimer.dispose(); + this.partialMessageTimer = void 0; + } + } + setPartialMessageTimer() { + this.clearPartialMessageTimer(); + if (this._partialMessageTimeout <= 0) { + return; + } + this.partialMessageTimer = (0, ral_1.default)().timer.setTimeout( + (token, timeout) => { + this.partialMessageTimer = void 0; + if (token === this.messageToken) { + this.firePartialMessage({ + messageToken: token, + waitingTime: timeout, + }); + this.setPartialMessageTimer(); + } + }, + this._partialMessageTimeout, + this.messageToken, + this._partialMessageTimeout + ); + } + }; + exports.ReadableStreamMessageReader = ReadableStreamMessageReader; + }, + }); + + // server/node_modules/vscode-jsonrpc/lib/common/semaphore.js + let require_semaphore = __commonJS({ + 'server/node_modules/vscode-jsonrpc/lib/common/semaphore.js'(exports) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.Semaphore = void 0; + let ral_1 = require_ral(); + let Semaphore = class { + constructor(capacity = 1) { + if (capacity <= 0) { + throw new Error('Capacity must be greater than 0'); + } + this._capacity = capacity; + this._active = 0; + this._waiting = []; + } + lock(thunk) { + return new Promise((resolve, reject) => { + this._waiting.push({ thunk, resolve, reject }); + this.runNext(); + }); + } + get active() { + return this._active; + } + runNext() { + if (this._waiting.length === 0 || this._active === this._capacity) { + return; + } + (0, ral_1.default)().timer.setImmediate(() => this.doRunNext()); + } + doRunNext() { + if (this._waiting.length === 0 || this._active === this._capacity) { + return; + } + const next = this._waiting.shift(); + this._active++; + if (this._active > this._capacity) { + throw new Error(`To many thunks active`); + } + try { + const result = next.thunk(); + if (result instanceof Promise) { + result.then( + (value) => { + this._active--; + next.resolve(value); + this.runNext(); + }, + (err) => { + this._active--; + next.reject(err); + this.runNext(); + } + ); + } else { + this._active--; + next.resolve(result); + this.runNext(); + } + } catch (err) { + this._active--; + next.reject(err); + this.runNext(); + } + } + }; + exports.Semaphore = Semaphore; + }, + }); + + // server/node_modules/vscode-jsonrpc/lib/common/messageWriter.js + let require_messageWriter = __commonJS({ + 'server/node_modules/vscode-jsonrpc/lib/common/messageWriter.js'(exports) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.WriteableStreamMessageWriter = exports.AbstractMessageWriter = exports.MessageWriter = void 0; + let ral_1 = require_ral(); + let Is = require_is(); + let semaphore_1 = require_semaphore(); + let events_1 = require_events(); + let ContentLength = 'Content-Length: '; + let CRLF = '\r\n'; + let MessageWriter; + (function (MessageWriter2) { + function is(value) { + let candidate = value; + return ( + candidate && + Is.func(candidate.dispose) && + Is.func(candidate.onClose) && + Is.func(candidate.onError) && + Is.func(candidate.write) + ); + } + MessageWriter2.is = is; + })( + (MessageWriter = exports.MessageWriter || (exports.MessageWriter = {})) + ); + let AbstractMessageWriter = class { + constructor() { + this.errorEmitter = new events_1.Emitter(); + this.closeEmitter = new events_1.Emitter(); + } + dispose() { + this.errorEmitter.dispose(); + this.closeEmitter.dispose(); + } + get onError() { + return this.errorEmitter.event; + } + fireError(error, message, count) { + this.errorEmitter.fire([this.asError(error), message, count]); + } + get onClose() { + return this.closeEmitter.event; + } + fireClose() { + this.closeEmitter.fire(void 0); + } + asError(error) { + if (error instanceof Error) { + return error; + } else { + return new Error( + `Writer received error. Reason: ${ + Is.string(error.message) ? error.message : 'unknown' + }` + ); + } + } + }; + exports.AbstractMessageWriter = AbstractMessageWriter; + let ResolvedMessageWriterOptions; + (function (ResolvedMessageWriterOptions2) { + function fromOptions(options) { + if (options === void 0 || typeof options === 'string') { + return { + charset: options ?? 'utf-8', + contentTypeEncoder: (0, ral_1.default)().applicationJson.encoder, + }; + } else { + return { + charset: options.charset ?? 'utf-8', + contentEncoder: options.contentEncoder, + contentTypeEncoder: + options.contentTypeEncoder ?? + (0, ral_1.default)().applicationJson.encoder, + }; + } + } + ResolvedMessageWriterOptions2.fromOptions = fromOptions; + })(ResolvedMessageWriterOptions || (ResolvedMessageWriterOptions = {})); + let WriteableStreamMessageWriter = class extends AbstractMessageWriter { + constructor(writable, options) { + super(); + this.writable = writable; + this.options = ResolvedMessageWriterOptions.fromOptions(options); + this.errorCount = 0; + this.writeSemaphore = new semaphore_1.Semaphore(1); + this.writable.onError((error) => this.fireError(error)); + this.writable.onClose(() => this.fireClose()); + } + async write(msg) { + return this.writeSemaphore.lock(async () => { + const payload = this.options.contentTypeEncoder + .encode(msg, this.options) + .then((buffer) => { + if (this.options.contentEncoder !== void 0) { + return this.options.contentEncoder.encode(buffer); + } else { + return buffer; + } + }); + return payload.then( + (buffer) => { + const headers = []; + headers.push(ContentLength, buffer.byteLength.toString(), CRLF); + headers.push(CRLF); + return this.doWrite(msg, headers, buffer); + }, + (error) => { + this.fireError(error); + throw error; + } + ); + }); + } + async doWrite(msg, headers, data) { + try { + await this.writable.write(headers.join(''), 'ascii'); + return this.writable.write(data); + } catch (error) { + this.handleError(error, msg); + return Promise.reject(error); + } + } + handleError(error, msg) { + this.errorCount++; + this.fireError(error, msg, this.errorCount); + } + end() { + this.writable.end(); + } + }; + exports.WriteableStreamMessageWriter = WriteableStreamMessageWriter; + }, + }); + + // server/node_modules/vscode-jsonrpc/lib/common/connection.js + let require_connection = __commonJS({ + 'server/node_modules/vscode-jsonrpc/lib/common/connection.js'(exports) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.createMessageConnection = exports.ConnectionOptions = exports.CancellationStrategy = exports.CancellationSenderStrategy = exports.CancellationReceiverStrategy = exports.ConnectionStrategy = exports.ConnectionError = exports.ConnectionErrors = exports.LogTraceNotification = exports.SetTraceNotification = exports.TraceFormat = exports.Trace = exports.NullLogger = exports.ProgressType = exports.ProgressToken = void 0; + let ral_1 = require_ral(); + let Is = require_is(); + let messages_1 = require_messages(); + let linkedMap_1 = require_linkedMap(); + let events_1 = require_events(); + let cancellation_1 = require_cancellation(); + let CancelNotification; + (function (CancelNotification2) { + CancelNotification2.type = new messages_1.NotificationType( + '$/cancelRequest' + ); + })(CancelNotification || (CancelNotification = {})); + let ProgressToken; + (function (ProgressToken2) { + function is(value) { + return typeof value === 'string' || typeof value === 'number'; + } + ProgressToken2.is = is; + })( + (ProgressToken = exports.ProgressToken || (exports.ProgressToken = {})) + ); + let ProgressNotification; + (function (ProgressNotification2) { + ProgressNotification2.type = new messages_1.NotificationType( + '$/progress' + ); + })(ProgressNotification || (ProgressNotification = {})); + let ProgressType = class { + constructor() {} + }; + exports.ProgressType = ProgressType; + let StarRequestHandler; + (function (StarRequestHandler2) { + function is(value) { + return Is.func(value); + } + StarRequestHandler2.is = is; + })(StarRequestHandler || (StarRequestHandler = {})); + exports.NullLogger = Object.freeze({ + error: () => {}, + warn: () => {}, + info: () => {}, + log: () => {}, + }); + let Trace; + (function (Trace2) { + Trace2[(Trace2['Off'] = 0)] = 'Off'; + Trace2[(Trace2['Messages'] = 1)] = 'Messages'; + Trace2[(Trace2['Compact'] = 2)] = 'Compact'; + Trace2[(Trace2['Verbose'] = 3)] = 'Verbose'; + })((Trace = exports.Trace || (exports.Trace = {}))); + (function (Trace2) { + function fromString(value) { + if (!Is.string(value)) { + return Trace2.Off; + } + value = value.toLowerCase(); + switch (value) { + case 'off': + return Trace2.Off; + case 'messages': + return Trace2.Messages; + case 'compact': + return Trace2.Compact; + case 'verbose': + return Trace2.Verbose; + default: + return Trace2.Off; + } + } + Trace2.fromString = fromString; + function toString(value) { + switch (value) { + case Trace2.Off: + return 'off'; + case Trace2.Messages: + return 'messages'; + case Trace2.Compact: + return 'compact'; + case Trace2.Verbose: + return 'verbose'; + default: + return 'off'; + } + } + Trace2.toString = toString; + })((Trace = exports.Trace || (exports.Trace = {}))); + let TraceFormat; + (function (TraceFormat2) { + TraceFormat2['Text'] = 'text'; + TraceFormat2['JSON'] = 'json'; + })((TraceFormat = exports.TraceFormat || (exports.TraceFormat = {}))); + (function (TraceFormat2) { + function fromString(value) { + if (!Is.string(value)) { + return TraceFormat2.Text; + } + value = value.toLowerCase(); + if (value === 'json') { + return TraceFormat2.JSON; + } else { + return TraceFormat2.Text; + } + } + TraceFormat2.fromString = fromString; + })((TraceFormat = exports.TraceFormat || (exports.TraceFormat = {}))); + let SetTraceNotification; + (function (SetTraceNotification2) { + SetTraceNotification2.type = new messages_1.NotificationType( + '$/setTrace' + ); + })( + (SetTraceNotification = + exports.SetTraceNotification || (exports.SetTraceNotification = {})) + ); + let LogTraceNotification; + (function (LogTraceNotification2) { + LogTraceNotification2.type = new messages_1.NotificationType( + '$/logTrace' + ); + })( + (LogTraceNotification = + exports.LogTraceNotification || (exports.LogTraceNotification = {})) + ); + let ConnectionErrors; + (function (ConnectionErrors2) { + ConnectionErrors2[(ConnectionErrors2['Closed'] = 1)] = 'Closed'; + ConnectionErrors2[(ConnectionErrors2['Disposed'] = 2)] = 'Disposed'; + ConnectionErrors2[(ConnectionErrors2['AlreadyListening'] = 3)] = + 'AlreadyListening'; + })( + (ConnectionErrors = + exports.ConnectionErrors || (exports.ConnectionErrors = {})) + ); + var ConnectionError = class extends Error { + constructor(code, message) { + super(message); + this.code = code; + Object.setPrototypeOf(this, ConnectionError.prototype); + } + }; + exports.ConnectionError = ConnectionError; + let ConnectionStrategy; + (function (ConnectionStrategy2) { + function is(value) { + const candidate = value; + return candidate && Is.func(candidate.cancelUndispatched); + } + ConnectionStrategy2.is = is; + })( + (ConnectionStrategy = + exports.ConnectionStrategy || (exports.ConnectionStrategy = {})) + ); + let CancellationReceiverStrategy; + (function (CancellationReceiverStrategy2) { + CancellationReceiverStrategy2.Message = Object.freeze({ + createCancellationTokenSource(_) { + return new cancellation_1.CancellationTokenSource(); + }, + }); + function is(value) { + const candidate = value; + return candidate && Is.func(candidate.createCancellationTokenSource); + } + CancellationReceiverStrategy2.is = is; + })( + (CancellationReceiverStrategy = + exports.CancellationReceiverStrategy || + (exports.CancellationReceiverStrategy = {})) + ); + let CancellationSenderStrategy; + (function (CancellationSenderStrategy2) { + CancellationSenderStrategy2.Message = Object.freeze({ + sendCancellation(conn, id) { + return conn.sendNotification(CancelNotification.type, { id }); + }, + cleanup(_) {}, + }); + function is(value) { + const candidate = value; + return ( + candidate && + Is.func(candidate.sendCancellation) && + Is.func(candidate.cleanup) + ); + } + CancellationSenderStrategy2.is = is; + })( + (CancellationSenderStrategy = + exports.CancellationSenderStrategy || + (exports.CancellationSenderStrategy = {})) + ); + let CancellationStrategy; + (function (CancellationStrategy2) { + CancellationStrategy2.Message = Object.freeze({ + receiver: CancellationReceiverStrategy.Message, + sender: CancellationSenderStrategy.Message, + }); + function is(value) { + const candidate = value; + return ( + candidate && + CancellationReceiverStrategy.is(candidate.receiver) && + CancellationSenderStrategy.is(candidate.sender) + ); + } + CancellationStrategy2.is = is; + })( + (CancellationStrategy = + exports.CancellationStrategy || (exports.CancellationStrategy = {})) + ); + let ConnectionOptions; + (function (ConnectionOptions2) { + function is(value) { + const candidate = value; + return ( + candidate && + (CancellationStrategy.is(candidate.cancellationStrategy) || + ConnectionStrategy.is(candidate.connectionStrategy)) + ); + } + ConnectionOptions2.is = is; + })( + (ConnectionOptions = + exports.ConnectionOptions || (exports.ConnectionOptions = {})) + ); + let ConnectionState; + (function (ConnectionState2) { + ConnectionState2[(ConnectionState2['New'] = 1)] = 'New'; + ConnectionState2[(ConnectionState2['Listening'] = 2)] = 'Listening'; + ConnectionState2[(ConnectionState2['Closed'] = 3)] = 'Closed'; + ConnectionState2[(ConnectionState2['Disposed'] = 4)] = 'Disposed'; + })(ConnectionState || (ConnectionState = {})); + function createMessageConnection( + messageReader2, + messageWriter2, + _logger, + options + ) { + const logger = _logger !== void 0 ? _logger : exports.NullLogger; + let sequenceNumber = 0; + let notificationSequenceNumber = 0; + let unknownResponseSequenceNumber = 0; + const version = '2.0'; + let starRequestHandler = void 0; + const requestHandlers = Object.create(null); + let starNotificationHandler = void 0; + const notificationHandlers = Object.create(null); + const progressHandlers = new Map(); + let timer; + let messageQueue = new linkedMap_1.LinkedMap(); + let responsePromises = Object.create(null); + let knownCanceledRequests = new Set(); + let requestTokens = Object.create(null); + let trace = Trace.Off; + let traceFormat = TraceFormat.Text; + let tracer; + let state = ConnectionState.New; + const errorEmitter = new events_1.Emitter(); + const closeEmitter = new events_1.Emitter(); + const unhandledNotificationEmitter = new events_1.Emitter(); + const unhandledProgressEmitter = new events_1.Emitter(); + const disposeEmitter = new events_1.Emitter(); + const cancellationStrategy = + options && options.cancellationStrategy + ? options.cancellationStrategy + : CancellationStrategy.Message; + function createRequestQueueKey(id) { + if (id === null) { + throw new Error( + `Can't send requests with id null since the response can't be correlated.` + ); + } + return 'req-' + id.toString(); + } + function createResponseQueueKey(id) { + if (id === null) { + return ( + 'res-unknown-' + (++unknownResponseSequenceNumber).toString() + ); + } else { + return 'res-' + id.toString(); + } + } + function createNotificationQueueKey() { + return 'not-' + (++notificationSequenceNumber).toString(); + } + function addMessageToQueue(queue, message) { + if (messages_1.Message.isRequest(message)) { + queue.set(createRequestQueueKey(message.id), message); + } else if (messages_1.Message.isResponse(message)) { + queue.set(createResponseQueueKey(message.id), message); + } else { + queue.set(createNotificationQueueKey(), message); + } + } + function cancelUndispatched(_message) { + return void 0; + } + function isListening() { + return state === ConnectionState.Listening; + } + function isClosed() { + return state === ConnectionState.Closed; + } + function isDisposed() { + return state === ConnectionState.Disposed; + } + function closeHandler() { + if ( + state === ConnectionState.New || + state === ConnectionState.Listening + ) { + state = ConnectionState.Closed; + closeEmitter.fire(void 0); + } + } + function readErrorHandler(error) { + errorEmitter.fire([error, void 0, void 0]); + } + function writeErrorHandler(data) { + errorEmitter.fire(data); + } + messageReader2.onClose(closeHandler); + messageReader2.onError(readErrorHandler); + messageWriter2.onClose(closeHandler); + messageWriter2.onError(writeErrorHandler); + function triggerMessageQueue() { + if (timer || messageQueue.size === 0) { + return; + } + timer = (0, ral_1.default)().timer.setImmediate(() => { + timer = void 0; + processMessageQueue(); + }); + } + function processMessageQueue() { + if (messageQueue.size === 0) { + return; + } + const message = messageQueue.shift(); + try { + if (messages_1.Message.isRequest(message)) { + handleRequest(message); + } else if (messages_1.Message.isNotification(message)) { + handleNotification(message); + } else if (messages_1.Message.isResponse(message)) { + handleResponse(message); + } else { + handleInvalidMessage(message); + } + } finally { + triggerMessageQueue(); + } + } + const callback = (message) => { + try { + if ( + messages_1.Message.isNotification(message) && + message.method === CancelNotification.type.method + ) { + const cancelId = message.params.id; + const key = createRequestQueueKey(cancelId); + const toCancel = messageQueue.get(key); + if (messages_1.Message.isRequest(toCancel)) { + const strategy = options?.connectionStrategy; + const response = + strategy && strategy.cancelUndispatched + ? strategy.cancelUndispatched(toCancel, cancelUndispatched) + : cancelUndispatched(toCancel); + if ( + response && + (response.error !== void 0 || response.result !== void 0) + ) { + messageQueue.delete(key); + response.id = toCancel.id; + traceSendingResponse(response, message.method, Date.now()); + messageWriter2 + .write(response) + .catch(() => + logger.error( + `Sending response for canceled message failed.` + ) + ); + return; + } + } + const tokenKey = String(cancelId); + const cancellationToken = requestTokens[tokenKey]; + if (cancellationToken !== void 0) { + cancellationToken.cancel(); + traceReceivedNotification(message); + return; + } else { + knownCanceledRequests.add(cancelId); + } + } + addMessageToQueue(messageQueue, message); + } finally { + triggerMessageQueue(); + } + }; + function handleRequest(requestMessage) { + if (isDisposed()) { + return; + } + function reply(resultOrError, method, startTime2) { + const message = { + jsonrpc: version, + id: requestMessage.id, + }; + if (resultOrError instanceof messages_1.ResponseError) { + message.error = resultOrError.toJson(); + } else { + message.result = resultOrError === void 0 ? null : resultOrError; + } + traceSendingResponse(message, method, startTime2); + messageWriter2 + .write(message) + .catch(() => logger.error(`Sending response failed.`)); + } + function replyError(error, method, startTime2) { + const message = { + jsonrpc: version, + id: requestMessage.id, + error: error.toJson(), + }; + traceSendingResponse(message, method, startTime2); + messageWriter2 + .write(message) + .catch(() => logger.error(`Sending response failed.`)); + } + function replySuccess(result, method, startTime2) { + if (result === void 0) { + result = null; + } + const message = { + jsonrpc: version, + id: requestMessage.id, + result, + }; + traceSendingResponse(message, method, startTime2); + messageWriter2 + .write(message) + .catch(() => logger.error(`Sending response failed.`)); + } + traceReceivedRequest(requestMessage); + const element = requestHandlers[requestMessage.method]; + let type; + let requestHandler; + if (element) { + type = element.type; + requestHandler = element.handler; + } + const startTime = Date.now(); + if (requestHandler || starRequestHandler) { + const tokenKey = String(requestMessage.id); + const cancellationSource = cancellationStrategy.receiver.createCancellationTokenSource( + tokenKey + ); + if ( + requestMessage.id !== null && + knownCanceledRequests.has(requestMessage.id) + ) { + cancellationSource.cancel(); + } + requestTokens[tokenKey] = cancellationSource; + try { + let handlerResult; + if (requestHandler) { + if (requestMessage.params === void 0) { + if (type !== void 0 && type.numberOfParams !== 0) { + replyError( + new messages_1.ResponseError( + messages_1.ErrorCodes.InvalidParams, + `Request ${requestMessage.method} defines ${type.numberOfParams} params but received none.` + ), + requestMessage.method, + startTime + ); + return; + } + handlerResult = requestHandler(cancellationSource.token); + } else if (Array.isArray(requestMessage.params)) { + if ( + type !== void 0 && + type.parameterStructures === + messages_1.ParameterStructures.byName + ) { + replyError( + new messages_1.ResponseError( + messages_1.ErrorCodes.InvalidParams, + `Request ${requestMessage.method} defines parameters by name but received parameters by position` + ), + requestMessage.method, + startTime + ); + return; + } + handlerResult = requestHandler( + ...requestMessage.params, + cancellationSource.token + ); + } else { + if ( + type !== void 0 && + type.parameterStructures === + messages_1.ParameterStructures.byPosition + ) { + replyError( + new messages_1.ResponseError( + messages_1.ErrorCodes.InvalidParams, + `Request ${requestMessage.method} defines parameters by position but received parameters by name` + ), + requestMessage.method, + startTime + ); + return; + } + handlerResult = requestHandler( + requestMessage.params, + cancellationSource.token + ); + } + } else if (starRequestHandler) { + handlerResult = starRequestHandler( + requestMessage.method, + requestMessage.params, + cancellationSource.token + ); + } + const promise = handlerResult; + if (!handlerResult) { + delete requestTokens[tokenKey]; + replySuccess(handlerResult, requestMessage.method, startTime); + } else if (promise.then) { + promise.then( + (resultOrError) => { + delete requestTokens[tokenKey]; + reply(resultOrError, requestMessage.method, startTime); + }, + (error) => { + delete requestTokens[tokenKey]; + if (error instanceof messages_1.ResponseError) { + replyError(error, requestMessage.method, startTime); + } else if (error && Is.string(error.message)) { + replyError( + new messages_1.ResponseError( + messages_1.ErrorCodes.InternalError, + `Request ${requestMessage.method} failed with message: ${error.message}` + ), + requestMessage.method, + startTime + ); + } else { + replyError( + new messages_1.ResponseError( + messages_1.ErrorCodes.InternalError, + `Request ${requestMessage.method} failed unexpectedly without providing any details.` + ), + requestMessage.method, + startTime + ); + } + } + ); + } else { + delete requestTokens[tokenKey]; + reply(handlerResult, requestMessage.method, startTime); + } + } catch (error) { + delete requestTokens[tokenKey]; + if (error instanceof messages_1.ResponseError) { + reply(error, requestMessage.method, startTime); + } else if (error && Is.string(error.message)) { + replyError( + new messages_1.ResponseError( + messages_1.ErrorCodes.InternalError, + `Request ${requestMessage.method} failed with message: ${error.message}` + ), + requestMessage.method, + startTime + ); + } else { + replyError( + new messages_1.ResponseError( + messages_1.ErrorCodes.InternalError, + `Request ${requestMessage.method} failed unexpectedly without providing any details.` + ), + requestMessage.method, + startTime + ); + } + } + } else { + replyError( + new messages_1.ResponseError( + messages_1.ErrorCodes.MethodNotFound, + `Unhandled method ${requestMessage.method}` + ), + requestMessage.method, + startTime + ); + } + } + function handleResponse(responseMessage) { + if (isDisposed()) { + return; + } + if (responseMessage.id === null) { + if (responseMessage.error) { + logger.error(`Received response message without id: Error is: +${JSON.stringify(responseMessage.error, void 0, 4)}`); + } else { + logger.error( + `Received response message without id. No further error information provided.` + ); + } + } else { + const key = String(responseMessage.id); + const responsePromise = responsePromises[key]; + traceReceivedResponse(responseMessage, responsePromise); + if (responsePromise) { + delete responsePromises[key]; + try { + if (responseMessage.error) { + const error = responseMessage.error; + responsePromise.reject( + new messages_1.ResponseError( + error.code, + error.message, + error.data + ) + ); + } else if (responseMessage.result !== void 0) { + responsePromise.resolve(responseMessage.result); + } else { + throw new Error('Should never happen.'); + } + } catch (error) { + if (error.message) { + logger.error( + `Response handler '${responsePromise.method}' failed with message: ${error.message}` + ); + } else { + logger.error( + `Response handler '${responsePromise.method}' failed unexpectedly.` + ); + } + } + } + } + } + function handleNotification(message) { + if (isDisposed()) { + return; + } + let type = void 0; + let notificationHandler; + if (message.method === CancelNotification.type.method) { + const cancelId = message.params.id; + knownCanceledRequests.delete(cancelId); + traceReceivedNotification(message); + return; + } else { + const element = notificationHandlers[message.method]; + if (element) { + notificationHandler = element.handler; + type = element.type; + } + } + if (notificationHandler || starNotificationHandler) { + try { + traceReceivedNotification(message); + if (notificationHandler) { + if (message.params === void 0) { + if (type !== void 0) { + if ( + type.numberOfParams !== 0 && + type.parameterStructures !== + messages_1.ParameterStructures.byName + ) { + logger.error( + `Notification ${message.method} defines ${type.numberOfParams} params but received none.` + ); + } + } + notificationHandler(); + } else if (Array.isArray(message.params)) { + const params = message.params; + if ( + message.method === ProgressNotification.type.method && + params.length === 2 && + ProgressToken.is(params[0]) + ) { + notificationHandler({ token: params[0], value: params[1] }); + } else { + if (type !== void 0) { + if ( + type.parameterStructures === + messages_1.ParameterStructures.byName + ) { + logger.error( + `Notification ${message.method} defines parameters by name but received parameters by position` + ); + } + if (type.numberOfParams !== message.params.length) { + logger.error( + `Notification ${message.method} defines ${type.numberOfParams} params but received ${params.length} arguments` + ); + } + } + notificationHandler(...params); + } + } else { + if ( + type !== void 0 && + type.parameterStructures === + messages_1.ParameterStructures.byPosition + ) { + logger.error( + `Notification ${message.method} defines parameters by position but received parameters by name` + ); + } + notificationHandler(message.params); + } + } else if (starNotificationHandler) { + starNotificationHandler(message.method, message.params); + } + } catch (error) { + if (error.message) { + logger.error( + `Notification handler '${message.method}' failed with message: ${error.message}` + ); + } else { + logger.error( + `Notification handler '${message.method}' failed unexpectedly.` + ); + } + } + } else { + unhandledNotificationEmitter.fire(message); + } + } + function handleInvalidMessage(message) { + if (!message) { + logger.error('Received empty message.'); + return; + } + logger.error(`Received message which is neither a response nor a notification message: +${JSON.stringify(message, null, 4)}`); + const responseMessage = message; + if (Is.string(responseMessage.id) || Is.number(responseMessage.id)) { + const key = String(responseMessage.id); + const responseHandler = responsePromises[key]; + if (responseHandler) { + responseHandler.reject( + new Error( + 'The received response has neither a result nor an error property.' + ) + ); + } + } + } + function stringifyTrace(params) { + if (params === void 0 || params === null) { + return void 0; + } + switch (trace) { + case Trace.Verbose: + return JSON.stringify(params, null, 4); + case Trace.Compact: + return JSON.stringify(params); + default: + return void 0; + } + } + function traceSendingRequest(message) { + if (trace === Trace.Off || !tracer) { + return; + } + if (traceFormat === TraceFormat.Text) { + let data = void 0; + if ( + (trace === Trace.Verbose || trace === Trace.Compact) && + message.params + ) { + data = `Params: ${stringifyTrace(message.params)} + +`; + } + tracer.log( + `Sending request '${message.method} - (${message.id})'.`, + data + ); + } else { + logLSPMessage('send-request', message); + } + } + function traceSendingNotification(message) { + if (trace === Trace.Off || !tracer) { + return; + } + if (traceFormat === TraceFormat.Text) { + let data = void 0; + if (trace === Trace.Verbose || trace === Trace.Compact) { + if (message.params) { + data = `Params: ${stringifyTrace(message.params)} + +`; + } else { + data = 'No parameters provided.\n\n'; + } + } + tracer.log(`Sending notification '${message.method}'.`, data); + } else { + logLSPMessage('send-notification', message); + } + } + function traceSendingResponse(message, method, startTime) { + if (trace === Trace.Off || !tracer) { + return; + } + if (traceFormat === TraceFormat.Text) { + let data = void 0; + if (trace === Trace.Verbose || trace === Trace.Compact) { + if (message.error && message.error.data) { + data = `Error data: ${stringifyTrace(message.error.data)} + +`; + } else { + if (message.result) { + data = `Result: ${stringifyTrace(message.result)} + +`; + } else if (message.error === void 0) { + data = 'No result returned.\n\n'; + } + } + } + tracer.log( + `Sending response '${method} - (${ + message.id + })'. Processing request took ${Date.now() - startTime}ms`, + data + ); + } else { + logLSPMessage('send-response', message); + } + } + function traceReceivedRequest(message) { + if (trace === Trace.Off || !tracer) { + return; + } + if (traceFormat === TraceFormat.Text) { + let data = void 0; + if ( + (trace === Trace.Verbose || trace === Trace.Compact) && + message.params + ) { + data = `Params: ${stringifyTrace(message.params)} + +`; + } + tracer.log( + `Received request '${message.method} - (${message.id})'.`, + data + ); + } else { + logLSPMessage('receive-request', message); + } + } + function traceReceivedNotification(message) { + if ( + trace === Trace.Off || + !tracer || + message.method === LogTraceNotification.type.method + ) { + return; + } + if (traceFormat === TraceFormat.Text) { + let data = void 0; + if (trace === Trace.Verbose || trace === Trace.Compact) { + if (message.params) { + data = `Params: ${stringifyTrace(message.params)} + +`; + } else { + data = 'No parameters provided.\n\n'; + } + } + tracer.log(`Received notification '${message.method}'.`, data); + } else { + logLSPMessage('receive-notification', message); + } + } + function traceReceivedResponse(message, responsePromise) { + if (trace === Trace.Off || !tracer) { + return; + } + if (traceFormat === TraceFormat.Text) { + let data = void 0; + if (trace === Trace.Verbose || trace === Trace.Compact) { + if (message.error && message.error.data) { + data = `Error data: ${stringifyTrace(message.error.data)} + +`; + } else { + if (message.result) { + data = `Result: ${stringifyTrace(message.result)} + +`; + } else if (message.error === void 0) { + data = 'No result returned.\n\n'; + } + } + } + if (responsePromise) { + const error = message.error + ? ` Request failed: ${message.error.message} (${message.error.code}).` + : ''; + tracer.log( + `Received response '${responsePromise.method} - (${ + message.id + })' in ${Date.now() - responsePromise.timerStart}ms.${error}`, + data + ); + } else { + tracer.log( + `Received response ${message.id} without active response promise.`, + data + ); + } + } else { + logLSPMessage('receive-response', message); + } + } + function logLSPMessage(type, message) { + if (!tracer || trace === Trace.Off) { + return; + } + const lspMessage = { + isLSPMessage: true, + type, + message, + timestamp: Date.now(), + }; + tracer.log(lspMessage); + } + function throwIfClosedOrDisposed() { + if (isClosed()) { + throw new ConnectionError( + ConnectionErrors.Closed, + 'Connection is closed.' + ); + } + if (isDisposed()) { + throw new ConnectionError( + ConnectionErrors.Disposed, + 'Connection is disposed.' + ); + } + } + function throwIfListening() { + if (isListening()) { + throw new ConnectionError( + ConnectionErrors.AlreadyListening, + 'Connection is already listening' + ); + } + } + function throwIfNotListening() { + if (!isListening()) { + throw new Error('Call listen() first.'); + } + } + function undefinedToNull(param) { + if (param === void 0) { + return null; + } else { + return param; + } + } + function nullToUndefined(param) { + if (param === null) { + return void 0; + } else { + return param; + } + } + function isNamedParam(param) { + return ( + param !== void 0 && + param !== null && + !Array.isArray(param) && + typeof param === 'object' + ); + } + function computeSingleParam(parameterStructures, param) { + switch (parameterStructures) { + case messages_1.ParameterStructures.auto: + if (isNamedParam(param)) { + return nullToUndefined(param); + } else { + return [undefinedToNull(param)]; + } + case messages_1.ParameterStructures.byName: + if (!isNamedParam(param)) { + throw new Error( + `Received parameters by name but param is not an object literal.` + ); + } + return nullToUndefined(param); + case messages_1.ParameterStructures.byPosition: + return [undefinedToNull(param)]; + default: + throw new Error( + `Unknown parameter structure ${parameterStructures.toString()}` + ); + } + } + function computeMessageParams(type, params) { + let result; + const numberOfParams = type.numberOfParams; + switch (numberOfParams) { + case 0: + result = void 0; + break; + case 1: + result = computeSingleParam(type.parameterStructures, params[0]); + break; + default: + result = []; + for (let i = 0; i < params.length && i < numberOfParams; i++) { + result.push(undefinedToNull(params[i])); + } + if (params.length < numberOfParams) { + for (let i = params.length; i < numberOfParams; i++) { + result.push(null); + } + } + break; + } + return result; + } + const connection2 = { + sendNotification: (type, ...args) => { + throwIfClosedOrDisposed(); + let method; + let messageParams; + if (Is.string(type)) { + method = type; + const first = args[0]; + let paramStart = 0; + let parameterStructures = messages_1.ParameterStructures.auto; + if (messages_1.ParameterStructures.is(first)) { + paramStart = 1; + parameterStructures = first; + } + let paramEnd = args.length; + const numberOfParams = paramEnd - paramStart; + switch (numberOfParams) { + case 0: + messageParams = void 0; + break; + case 1: + messageParams = computeSingleParam( + parameterStructures, + args[paramStart] + ); + break; + default: + if ( + parameterStructures === + messages_1.ParameterStructures.byName + ) { + throw new Error( + `Received ${numberOfParams} parameters for 'by Name' notification parameter structure.` + ); + } + messageParams = args + .slice(paramStart, paramEnd) + .map((value) => undefinedToNull(value)); + break; + } + } else { + const params = args; + method = type.method; + messageParams = computeMessageParams(type, params); + } + const notificationMessage = { + jsonrpc: version, + method, + params: messageParams, + }; + traceSendingNotification(notificationMessage); + return messageWriter2 + .write(notificationMessage) + .catch(() => logger.error(`Sending notification failed.`)); + }, + onNotification: (type, handler) => { + throwIfClosedOrDisposed(); + let method; + if (Is.func(type)) { + starNotificationHandler = type; + } else if (handler) { + if (Is.string(type)) { + method = type; + notificationHandlers[type] = { type: void 0, handler }; + } else { + method = type.method; + notificationHandlers[type.method] = { type, handler }; + } + } + return { + dispose: () => { + if (method !== void 0) { + delete notificationHandlers[method]; + } else { + starNotificationHandler = void 0; + } + }, + }; + }, + onProgress: (_type, token, handler) => { + if (progressHandlers.has(token)) { + throw new Error( + `Progress handler for token ${token} already registered` + ); + } + progressHandlers.set(token, handler); + return { + dispose: () => { + progressHandlers.delete(token); + }, + }; + }, + sendProgress: (_type, token, value) => { + return connection2.sendNotification(ProgressNotification.type, { + token, + value, + }); + }, + onUnhandledProgress: unhandledProgressEmitter.event, + sendRequest: (type, ...args) => { + throwIfClosedOrDisposed(); + throwIfNotListening(); + let method; + let messageParams; + let token = void 0; + if (Is.string(type)) { + method = type; + const first = args[0]; + const last = args[args.length - 1]; + let paramStart = 0; + let parameterStructures = messages_1.ParameterStructures.auto; + if (messages_1.ParameterStructures.is(first)) { + paramStart = 1; + parameterStructures = first; + } + let paramEnd = args.length; + if (cancellation_1.CancellationToken.is(last)) { + paramEnd = paramEnd - 1; + token = last; + } + const numberOfParams = paramEnd - paramStart; + switch (numberOfParams) { + case 0: + messageParams = void 0; + break; + case 1: + messageParams = computeSingleParam( + parameterStructures, + args[paramStart] + ); + break; + default: + if ( + parameterStructures === + messages_1.ParameterStructures.byName + ) { + throw new Error( + `Received ${numberOfParams} parameters for 'by Name' request parameter structure.` + ); + } + messageParams = args + .slice(paramStart, paramEnd) + .map((value) => undefinedToNull(value)); + break; + } + } else { + const params = args; + method = type.method; + messageParams = computeMessageParams(type, params); + const numberOfParams = type.numberOfParams; + token = cancellation_1.CancellationToken.is( + params[numberOfParams] + ) + ? params[numberOfParams] + : void 0; + } + const id = sequenceNumber++; + let disposable; + if (token) { + disposable = token.onCancellationRequested(() => { + const p = cancellationStrategy.sender.sendCancellation( + connection2, + id + ); + if (p === void 0) { + logger.log( + `Received no promise from cancellation strategy when cancelling id ${id}` + ); + return Promise.resolve(); + } else { + return p.catch(() => { + logger.log( + `Sending cancellation messages for id ${id} failed` + ); + }); + } + }); + } + const result = new Promise((resolve, reject) => { + const requestMessage = { + jsonrpc: version, + id, + method, + params: messageParams, + }; + const resolveWithCleanup = (r) => { + resolve(r); + cancellationStrategy.sender.cleanup(id); + disposable?.dispose(); + }; + const rejectWithCleanup = (r) => { + reject(r); + cancellationStrategy.sender.cleanup(id); + disposable?.dispose(); + }; + let responsePromise = { + method, + timerStart: Date.now(), + resolve: resolveWithCleanup, + reject: rejectWithCleanup, + }; + traceSendingRequest(requestMessage); + try { + messageWriter2 + .write(requestMessage) + .catch(() => logger.error(`Sending request failed.`)); + } catch (e) { + responsePromise.reject( + new messages_1.ResponseError( + messages_1.ErrorCodes.MessageWriteError, + e.message ? e.message : 'Unknown reason' + ) + ); + responsePromise = null; + } + if (responsePromise) { + responsePromises[String(id)] = responsePromise; + } + }); + return result; + }, + onRequest: (type, handler) => { + throwIfClosedOrDisposed(); + let method = null; + if (StarRequestHandler.is(type)) { + method = void 0; + starRequestHandler = type; + } else if (Is.string(type)) { + method = null; + if (handler !== void 0) { + method = type; + requestHandlers[type] = { handler, type: void 0 }; + } + } else { + if (handler !== void 0) { + method = type.method; + requestHandlers[type.method] = { type, handler }; + } + } + return { + dispose: () => { + if (method === null) { + return; + } + if (method !== void 0) { + delete requestHandlers[method]; + } else { + starRequestHandler = void 0; + } + }, + }; + }, + trace: (_value, _tracer, sendNotificationOrTraceOptions) => { + let _sendNotification = false; + let _traceFormat = TraceFormat.Text; + if (sendNotificationOrTraceOptions !== void 0) { + if (Is.boolean(sendNotificationOrTraceOptions)) { + _sendNotification = sendNotificationOrTraceOptions; + } else { + _sendNotification = + sendNotificationOrTraceOptions.sendNotification || false; + _traceFormat = + sendNotificationOrTraceOptions.traceFormat || + TraceFormat.Text; + } + } + trace = _value; + traceFormat = _traceFormat; + if (trace === Trace.Off) { + tracer = void 0; + } else { + tracer = _tracer; + } + if (_sendNotification && !isClosed() && !isDisposed()) { + connection2 + .sendNotification(SetTraceNotification.type, { + value: Trace.toString(_value), + }) + .catch(() => { + logger.error(`Sending trace notification failed`); + }); + } + }, + onError: errorEmitter.event, + onClose: closeEmitter.event, + onUnhandledNotification: unhandledNotificationEmitter.event, + onDispose: disposeEmitter.event, + end: () => { + messageWriter2.end(); + }, + dispose: () => { + if (isDisposed()) { + return; + } + state = ConnectionState.Disposed; + disposeEmitter.fire(void 0); + const error = new Error('Connection got disposed.'); + Object.keys(responsePromises).forEach((key) => { + responsePromises[key].reject(error); + }); + responsePromises = Object.create(null); + requestTokens = Object.create(null); + knownCanceledRequests = new Set(); + messageQueue = new linkedMap_1.LinkedMap(); + if (Is.func(messageWriter2.dispose)) { + messageWriter2.dispose(); + } + if (Is.func(messageReader2.dispose)) { + messageReader2.dispose(); + } + }, + listen: () => { + throwIfClosedOrDisposed(); + throwIfListening(); + state = ConnectionState.Listening; + messageReader2.listen(callback); + }, + inspect: () => { + (0, ral_1.default)().console.log('inspect'); + }, + }; + connection2.onNotification(LogTraceNotification.type, (params) => { + if (trace === Trace.Off || !tracer) { + return; + } + const verbose = trace === Trace.Verbose || trace === Trace.Compact; + tracer.log(params.message, verbose ? params.verbose : void 0); + }); + connection2.onNotification(ProgressNotification.type, (params) => { + const handler = progressHandlers.get(params.token); + if (handler) { + handler(params.value); + } else { + unhandledProgressEmitter.fire(params); + } + }); + return connection2; + } + exports.createMessageConnection = createMessageConnection; + }, + }); + + // server/node_modules/vscode-jsonrpc/lib/common/api.js + let require_api = __commonJS({ + 'server/node_modules/vscode-jsonrpc/lib/common/api.js'(exports) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.SetTraceNotification = exports.TraceFormat = exports.Trace = exports.ProgressType = exports.ProgressToken = exports.createMessageConnection = exports.NullLogger = exports.ConnectionOptions = exports.ConnectionStrategy = exports.WriteableStreamMessageWriter = exports.AbstractMessageWriter = exports.MessageWriter = exports.ReadableStreamMessageReader = exports.AbstractMessageReader = exports.MessageReader = exports.CancellationToken = exports.CancellationTokenSource = exports.Emitter = exports.Event = exports.Disposable = exports.LRUCache = exports.Touch = exports.LinkedMap = exports.ParameterStructures = exports.NotificationType9 = exports.NotificationType8 = exports.NotificationType7 = exports.NotificationType6 = exports.NotificationType5 = exports.NotificationType4 = exports.NotificationType3 = exports.NotificationType2 = exports.NotificationType1 = exports.NotificationType0 = exports.NotificationType = exports.ErrorCodes = exports.ResponseError = exports.RequestType9 = exports.RequestType8 = exports.RequestType7 = exports.RequestType6 = exports.RequestType5 = exports.RequestType4 = exports.RequestType3 = exports.RequestType2 = exports.RequestType1 = exports.RequestType0 = exports.RequestType = exports.Message = exports.RAL = void 0; + exports.CancellationStrategy = exports.CancellationSenderStrategy = exports.CancellationReceiverStrategy = exports.ConnectionError = exports.ConnectionErrors = exports.LogTraceNotification = void 0; + let messages_1 = require_messages(); + Object.defineProperty(exports, 'Message', { + enumerable: true, + get: function () { + return messages_1.Message; + }, + }); + Object.defineProperty(exports, 'RequestType', { + enumerable: true, + get: function () { + return messages_1.RequestType; + }, + }); + Object.defineProperty(exports, 'RequestType0', { + enumerable: true, + get: function () { + return messages_1.RequestType0; + }, + }); + Object.defineProperty(exports, 'RequestType1', { + enumerable: true, + get: function () { + return messages_1.RequestType1; + }, + }); + Object.defineProperty(exports, 'RequestType2', { + enumerable: true, + get: function () { + return messages_1.RequestType2; + }, + }); + Object.defineProperty(exports, 'RequestType3', { + enumerable: true, + get: function () { + return messages_1.RequestType3; + }, + }); + Object.defineProperty(exports, 'RequestType4', { + enumerable: true, + get: function () { + return messages_1.RequestType4; + }, + }); + Object.defineProperty(exports, 'RequestType5', { + enumerable: true, + get: function () { + return messages_1.RequestType5; + }, + }); + Object.defineProperty(exports, 'RequestType6', { + enumerable: true, + get: function () { + return messages_1.RequestType6; + }, + }); + Object.defineProperty(exports, 'RequestType7', { + enumerable: true, + get: function () { + return messages_1.RequestType7; + }, + }); + Object.defineProperty(exports, 'RequestType8', { + enumerable: true, + get: function () { + return messages_1.RequestType8; + }, + }); + Object.defineProperty(exports, 'RequestType9', { + enumerable: true, + get: function () { + return messages_1.RequestType9; + }, + }); + Object.defineProperty(exports, 'ResponseError', { + enumerable: true, + get: function () { + return messages_1.ResponseError; + }, + }); + Object.defineProperty(exports, 'ErrorCodes', { + enumerable: true, + get: function () { + return messages_1.ErrorCodes; + }, + }); + Object.defineProperty(exports, 'NotificationType', { + enumerable: true, + get: function () { + return messages_1.NotificationType; + }, + }); + Object.defineProperty(exports, 'NotificationType0', { + enumerable: true, + get: function () { + return messages_1.NotificationType0; + }, + }); + Object.defineProperty(exports, 'NotificationType1', { + enumerable: true, + get: function () { + return messages_1.NotificationType1; + }, + }); + Object.defineProperty(exports, 'NotificationType2', { + enumerable: true, + get: function () { + return messages_1.NotificationType2; + }, + }); + Object.defineProperty(exports, 'NotificationType3', { + enumerable: true, + get: function () { + return messages_1.NotificationType3; + }, + }); + Object.defineProperty(exports, 'NotificationType4', { + enumerable: true, + get: function () { + return messages_1.NotificationType4; + }, + }); + Object.defineProperty(exports, 'NotificationType5', { + enumerable: true, + get: function () { + return messages_1.NotificationType5; + }, + }); + Object.defineProperty(exports, 'NotificationType6', { + enumerable: true, + get: function () { + return messages_1.NotificationType6; + }, + }); + Object.defineProperty(exports, 'NotificationType7', { + enumerable: true, + get: function () { + return messages_1.NotificationType7; + }, + }); + Object.defineProperty(exports, 'NotificationType8', { + enumerable: true, + get: function () { + return messages_1.NotificationType8; + }, + }); + Object.defineProperty(exports, 'NotificationType9', { + enumerable: true, + get: function () { + return messages_1.NotificationType9; + }, + }); + Object.defineProperty(exports, 'ParameterStructures', { + enumerable: true, + get: function () { + return messages_1.ParameterStructures; + }, + }); + let linkedMap_1 = require_linkedMap(); + Object.defineProperty(exports, 'LinkedMap', { + enumerable: true, + get: function () { + return linkedMap_1.LinkedMap; + }, + }); + Object.defineProperty(exports, 'LRUCache', { + enumerable: true, + get: function () { + return linkedMap_1.LRUCache; + }, + }); + Object.defineProperty(exports, 'Touch', { + enumerable: true, + get: function () { + return linkedMap_1.Touch; + }, + }); + let disposable_1 = require_disposable(); + Object.defineProperty(exports, 'Disposable', { + enumerable: true, + get: function () { + return disposable_1.Disposable; + }, + }); + let events_1 = require_events(); + Object.defineProperty(exports, 'Event', { + enumerable: true, + get: function () { + return events_1.Event; + }, + }); + Object.defineProperty(exports, 'Emitter', { + enumerable: true, + get: function () { + return events_1.Emitter; + }, + }); + let cancellation_1 = require_cancellation(); + Object.defineProperty(exports, 'CancellationTokenSource', { + enumerable: true, + get: function () { + return cancellation_1.CancellationTokenSource; + }, + }); + Object.defineProperty(exports, 'CancellationToken', { + enumerable: true, + get: function () { + return cancellation_1.CancellationToken; + }, + }); + let messageReader_1 = require_messageReader(); + Object.defineProperty(exports, 'MessageReader', { + enumerable: true, + get: function () { + return messageReader_1.MessageReader; + }, + }); + Object.defineProperty(exports, 'AbstractMessageReader', { + enumerable: true, + get: function () { + return messageReader_1.AbstractMessageReader; + }, + }); + Object.defineProperty(exports, 'ReadableStreamMessageReader', { + enumerable: true, + get: function () { + return messageReader_1.ReadableStreamMessageReader; + }, + }); + let messageWriter_1 = require_messageWriter(); + Object.defineProperty(exports, 'MessageWriter', { + enumerable: true, + get: function () { + return messageWriter_1.MessageWriter; + }, + }); + Object.defineProperty(exports, 'AbstractMessageWriter', { + enumerable: true, + get: function () { + return messageWriter_1.AbstractMessageWriter; + }, + }); + Object.defineProperty(exports, 'WriteableStreamMessageWriter', { + enumerable: true, + get: function () { + return messageWriter_1.WriteableStreamMessageWriter; + }, + }); + let connection_1 = require_connection(); + Object.defineProperty(exports, 'ConnectionStrategy', { + enumerable: true, + get: function () { + return connection_1.ConnectionStrategy; + }, + }); + Object.defineProperty(exports, 'ConnectionOptions', { + enumerable: true, + get: function () { + return connection_1.ConnectionOptions; + }, + }); + Object.defineProperty(exports, 'NullLogger', { + enumerable: true, + get: function () { + return connection_1.NullLogger; + }, + }); + Object.defineProperty(exports, 'createMessageConnection', { + enumerable: true, + get: function () { + return connection_1.createMessageConnection; + }, + }); + Object.defineProperty(exports, 'ProgressToken', { + enumerable: true, + get: function () { + return connection_1.ProgressToken; + }, + }); + Object.defineProperty(exports, 'ProgressType', { + enumerable: true, + get: function () { + return connection_1.ProgressType; + }, + }); + Object.defineProperty(exports, 'Trace', { + enumerable: true, + get: function () { + return connection_1.Trace; + }, + }); + Object.defineProperty(exports, 'TraceFormat', { + enumerable: true, + get: function () { + return connection_1.TraceFormat; + }, + }); + Object.defineProperty(exports, 'SetTraceNotification', { + enumerable: true, + get: function () { + return connection_1.SetTraceNotification; + }, + }); + Object.defineProperty(exports, 'LogTraceNotification', { + enumerable: true, + get: function () { + return connection_1.LogTraceNotification; + }, + }); + Object.defineProperty(exports, 'ConnectionErrors', { + enumerable: true, + get: function () { + return connection_1.ConnectionErrors; + }, + }); + Object.defineProperty(exports, 'ConnectionError', { + enumerable: true, + get: function () { + return connection_1.ConnectionError; + }, + }); + Object.defineProperty(exports, 'CancellationReceiverStrategy', { + enumerable: true, + get: function () { + return connection_1.CancellationReceiverStrategy; + }, + }); + Object.defineProperty(exports, 'CancellationSenderStrategy', { + enumerable: true, + get: function () { + return connection_1.CancellationSenderStrategy; + }, + }); + Object.defineProperty(exports, 'CancellationStrategy', { + enumerable: true, + get: function () { + return connection_1.CancellationStrategy; + }, + }); + let ral_1 = require_ral(); + exports.RAL = ral_1.default; + }, + }); + + // server/node_modules/vscode-jsonrpc/lib/browser/main.js + let require_main = __commonJS({ + 'server/node_modules/vscode-jsonrpc/lib/browser/main.js'(exports) { + 'use strict'; + let __createBinding = + (exports && exports.__createBinding) || + (Object.create + ? function (o, m, k, k2) { + if (k2 === void 0) { + k2 = k; + } + Object.defineProperty(o, k2, { + enumerable: true, + get: function () { + return m[k]; + }, + }); + } + : function (o, m, k, k2) { + if (k2 === void 0) { + k2 = k; + } + o[k2] = m[k]; + }); + let __exportStar = + (exports && exports.__exportStar) || + function (m, exports2) { + for (let p in m) { + if ( + p !== 'default' && + !Object.prototype.hasOwnProperty.call(exports2, p) + ) { + __createBinding(exports2, m, p); + } + } + }; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.createMessageConnection = exports.BrowserMessageWriter = exports.BrowserMessageReader = void 0; + let ril_1 = require_ril(); + ril_1.default.install(); + let api_1 = require_api(); + __exportStar(require_api(), exports); + let BrowserMessageReader2 = class extends api_1.AbstractMessageReader { + constructor(context) { + super(); + this._onData = new api_1.Emitter(); + this._messageListener = (event) => { + this._onData.fire(event.data); + }; + context.addEventListener('error', (event) => this.fireError(event)); + context.onmessage = this._messageListener; + } + listen(callback) { + return this._onData.event(callback); + } + }; + exports.BrowserMessageReader = BrowserMessageReader2; + let BrowserMessageWriter2 = class extends api_1.AbstractMessageWriter { + constructor(context) { + super(); + this.context = context; + this.errorCount = 0; + context.addEventListener('error', (event) => this.fireError(event)); + } + write(msg) { + try { + this.context.postMessage(msg); + return Promise.resolve(); + } catch (error) { + this.handleError(error, msg); + return Promise.reject(error); + } + } + handleError(error, msg) { + this.errorCount++; + this.fireError(error, msg, this.errorCount); + } + end() {} + }; + exports.BrowserMessageWriter = BrowserMessageWriter2; + function createMessageConnection(reader, writer, logger, options) { + if (logger === void 0) { + logger = api_1.NullLogger; + } + if (api_1.ConnectionStrategy.is(options)) { + options = { connectionStrategy: options }; + } + return (0, api_1.createMessageConnection)( + reader, + writer, + logger, + options + ); + } + exports.createMessageConnection = createMessageConnection; + }, + }); + + // server/node_modules/vscode-jsonrpc/browser.js + let require_browser = __commonJS({ + 'server/node_modules/vscode-jsonrpc/browser.js'(exports, module) { + 'use strict'; + module.exports = require_main(); + }, + }); + + // server/node_modules/vscode-languageserver-types/lib/umd/main.js + let require_main2 = __commonJS({ + 'server/node_modules/vscode-languageserver-types/lib/umd/main.js'( + exports, + module + ) { + (function (factory) { + if (typeof module === 'object' && typeof module.exports === 'object') { + let v = factory(__require, exports); + if (v !== void 0) { + module.exports = v; + } + } else if (typeof define === 'function' && define.amd) { + define(['require', 'exports'], factory); + } + })(function (require2, exports2) { + 'use strict'; + Object.defineProperty(exports2, '__esModule', { value: true }); + exports2.TextDocument = exports2.EOL = exports2.InlineValuesContext = exports2.InlineValueEvaluatableExpression = exports2.InlineValueVariableLookup = exports2.InlineValueText = exports2.SemanticTokens = exports2.SemanticTokenModifiers = exports2.SemanticTokenTypes = exports2.SelectionRange = exports2.DocumentLink = exports2.FormattingOptions = exports2.CodeLens = exports2.CodeAction = exports2.CodeActionContext = exports2.CodeActionTriggerKind = exports2.CodeActionKind = exports2.DocumentSymbol = exports2.WorkspaceSymbol = exports2.SymbolInformation = exports2.SymbolTag = exports2.SymbolKind = exports2.DocumentHighlight = exports2.DocumentHighlightKind = exports2.SignatureInformation = exports2.ParameterInformation = exports2.Hover = exports2.MarkedString = exports2.CompletionList = exports2.CompletionItem = exports2.CompletionItemLabelDetails = exports2.InsertTextMode = exports2.InsertReplaceEdit = exports2.CompletionItemTag = exports2.InsertTextFormat = exports2.CompletionItemKind = exports2.MarkupContent = exports2.MarkupKind = exports2.TextDocumentItem = exports2.OptionalVersionedTextDocumentIdentifier = exports2.VersionedTextDocumentIdentifier = exports2.TextDocumentIdentifier = exports2.WorkspaceChange = exports2.WorkspaceEdit = exports2.DeleteFile = exports2.RenameFile = exports2.CreateFile = exports2.TextDocumentEdit = exports2.AnnotatedTextEdit = exports2.ChangeAnnotationIdentifier = exports2.ChangeAnnotation = exports2.TextEdit = exports2.Command = exports2.Diagnostic = exports2.CodeDescription = exports2.DiagnosticTag = exports2.DiagnosticSeverity = exports2.DiagnosticRelatedInformation = exports2.FoldingRange = exports2.FoldingRangeKind = exports2.ColorPresentation = exports2.ColorInformation = exports2.Color = exports2.LocationLink = exports2.Location = exports2.Range = exports2.Position = exports2.uinteger = exports2.integer = void 0; + let integer; + (function (integer2) { + integer2.MIN_VALUE = -2147483648; + integer2.MAX_VALUE = 2147483647; + })((integer = exports2.integer || (exports2.integer = {}))); + let uinteger; + (function (uinteger2) { + uinteger2.MIN_VALUE = 0; + uinteger2.MAX_VALUE = 2147483647; + })((uinteger = exports2.uinteger || (exports2.uinteger = {}))); + let Position; + (function (Position2) { + function create(line, character) { + if (line === Number.MAX_VALUE) { + line = uinteger.MAX_VALUE; + } + if (character === Number.MAX_VALUE) { + character = uinteger.MAX_VALUE; + } + return { line, character }; + } + Position2.create = create; + function is(value) { + let candidate = value; + return ( + Is.objectLiteral(candidate) && + Is.uinteger(candidate.line) && + Is.uinteger(candidate.character) + ); + } + Position2.is = is; + })((Position = exports2.Position || (exports2.Position = {}))); + let Range4; + (function (Range5) { + function create(one, two, three, four) { + if ( + Is.uinteger(one) && + Is.uinteger(two) && + Is.uinteger(three) && + Is.uinteger(four) + ) { + return { + start: Position.create(one, two), + end: Position.create(three, four), + }; + } else if (Position.is(one) && Position.is(two)) { + return { start: one, end: two }; + } else { + throw new Error( + 'Range#create called with invalid arguments[' + .concat(one, ', ') + .concat(two, ', ') + .concat(three, ', ') + .concat(four, ']') + ); + } + } + Range5.create = create; + function is(value) { + let candidate = value; + return ( + Is.objectLiteral(candidate) && + Position.is(candidate.start) && + Position.is(candidate.end) + ); + } + Range5.is = is; + })((Range4 = exports2.Range || (exports2.Range = {}))); + let Location4; + (function (Location5) { + function create(uri, range) { + return { uri, range }; + } + Location5.create = create; + function is(value) { + let candidate = value; + return ( + Is.defined(candidate) && + Range4.is(candidate.range) && + (Is.string(candidate.uri) || Is.undefined(candidate.uri)) + ); + } + Location5.is = is; + })((Location4 = exports2.Location || (exports2.Location = {}))); + let LocationLink; + (function (LocationLink2) { + function create( + targetUri, + targetRange, + targetSelectionRange, + originSelectionRange + ) { + return { + targetUri, + targetRange, + targetSelectionRange, + originSelectionRange, + }; + } + LocationLink2.create = create; + function is(value) { + let candidate = value; + return ( + Is.defined(candidate) && + Range4.is(candidate.targetRange) && + Is.string(candidate.targetUri) && + Range4.is(candidate.targetSelectionRange) && + (Range4.is(candidate.originSelectionRange) || + Is.undefined(candidate.originSelectionRange)) + ); + } + LocationLink2.is = is; + })( + (LocationLink = exports2.LocationLink || (exports2.LocationLink = {})) + ); + let Color; + (function (Color2) { + function create(red, green, blue, alpha) { + return { + red, + green, + blue, + alpha, + }; + } + Color2.create = create; + function is(value) { + let candidate = value; + return ( + Is.objectLiteral(candidate) && + Is.numberRange(candidate.red, 0, 1) && + Is.numberRange(candidate.green, 0, 1) && + Is.numberRange(candidate.blue, 0, 1) && + Is.numberRange(candidate.alpha, 0, 1) + ); + } + Color2.is = is; + })((Color = exports2.Color || (exports2.Color = {}))); + let ColorInformation; + (function (ColorInformation2) { + function create(range, color) { + return { + range, + color, + }; + } + ColorInformation2.create = create; + function is(value) { + let candidate = value; + return ( + Is.objectLiteral(candidate) && + Range4.is(candidate.range) && + Color.is(candidate.color) + ); + } + ColorInformation2.is = is; + })( + (ColorInformation = + exports2.ColorInformation || (exports2.ColorInformation = {})) + ); + let ColorPresentation; + (function (ColorPresentation2) { + function create(label, textEdit, additionalTextEdits) { + return { + label, + textEdit, + additionalTextEdits, + }; + } + ColorPresentation2.create = create; + function is(value) { + let candidate = value; + return ( + Is.objectLiteral(candidate) && + Is.string(candidate.label) && + (Is.undefined(candidate.textEdit) || TextEdit.is(candidate)) && + (Is.undefined(candidate.additionalTextEdits) || + Is.typedArray(candidate.additionalTextEdits, TextEdit.is)) + ); + } + ColorPresentation2.is = is; + })( + (ColorPresentation = + exports2.ColorPresentation || (exports2.ColorPresentation = {})) + ); + let FoldingRangeKind; + (function (FoldingRangeKind2) { + FoldingRangeKind2['Comment'] = 'comment'; + FoldingRangeKind2['Imports'] = 'imports'; + FoldingRangeKind2['Region'] = 'region'; + })( + (FoldingRangeKind = + exports2.FoldingRangeKind || (exports2.FoldingRangeKind = {})) + ); + let FoldingRange2; + (function (FoldingRange3) { + function create( + startLine, + endLine, + startCharacter, + endCharacter, + kind + ) { + let result = { + startLine, + endLine, + }; + if (Is.defined(startCharacter)) { + result.startCharacter = startCharacter; + } + if (Is.defined(endCharacter)) { + result.endCharacter = endCharacter; + } + if (Is.defined(kind)) { + result.kind = kind; + } + return result; + } + FoldingRange3.create = create; + function is(value) { + let candidate = value; + return ( + Is.objectLiteral(candidate) && + Is.uinteger(candidate.startLine) && + Is.uinteger(candidate.startLine) && + (Is.undefined(candidate.startCharacter) || + Is.uinteger(candidate.startCharacter)) && + (Is.undefined(candidate.endCharacter) || + Is.uinteger(candidate.endCharacter)) && + (Is.undefined(candidate.kind) || Is.string(candidate.kind)) + ); + } + FoldingRange3.is = is; + })( + (FoldingRange2 = + exports2.FoldingRange || (exports2.FoldingRange = {})) + ); + let DiagnosticRelatedInformation; + (function (DiagnosticRelatedInformation2) { + function create(location, message) { + return { + location, + message, + }; + } + DiagnosticRelatedInformation2.create = create; + function is(value) { + let candidate = value; + return ( + Is.defined(candidate) && + Location4.is(candidate.location) && + Is.string(candidate.message) + ); + } + DiagnosticRelatedInformation2.is = is; + })( + (DiagnosticRelatedInformation = + exports2.DiagnosticRelatedInformation || + (exports2.DiagnosticRelatedInformation = {})) + ); + let DiagnosticSeverity2; + (function (DiagnosticSeverity3) { + DiagnosticSeverity3.Error = 1; + DiagnosticSeverity3.Warning = 2; + DiagnosticSeverity3.Information = 3; + DiagnosticSeverity3.Hint = 4; + })( + (DiagnosticSeverity2 = + exports2.DiagnosticSeverity || (exports2.DiagnosticSeverity = {})) + ); + let DiagnosticTag; + (function (DiagnosticTag2) { + DiagnosticTag2.Unnecessary = 1; + DiagnosticTag2.Deprecated = 2; + })( + (DiagnosticTag = + exports2.DiagnosticTag || (exports2.DiagnosticTag = {})) + ); + let CodeDescription; + (function (CodeDescription2) { + function is(value) { + let candidate = value; + return Is.objectLiteral(candidate) && Is.string(candidate.href); + } + CodeDescription2.is = is; + })( + (CodeDescription = + exports2.CodeDescription || (exports2.CodeDescription = {})) + ); + let Diagnostic2; + (function (Diagnostic3) { + function create( + range, + message, + severity, + code, + source, + relatedInformation + ) { + let result = { range, message }; + if (Is.defined(severity)) { + result.severity = severity; + } + if (Is.defined(code)) { + result.code = code; + } + if (Is.defined(source)) { + result.source = source; + } + if (Is.defined(relatedInformation)) { + result.relatedInformation = relatedInformation; + } + return result; + } + Diagnostic3.create = create; + function is(value) { + let _a; + let candidate = value; + return ( + Is.defined(candidate) && + Range4.is(candidate.range) && + Is.string(candidate.message) && + (Is.number(candidate.severity) || + Is.undefined(candidate.severity)) && + (Is.integer(candidate.code) || + Is.string(candidate.code) || + Is.undefined(candidate.code)) && + (Is.undefined(candidate.codeDescription) || + Is.string( + (_a = candidate.codeDescription) === null || _a === void 0 + ? void 0 + : _a.href + )) && + (Is.string(candidate.source) || Is.undefined(candidate.source)) && + (Is.undefined(candidate.relatedInformation) || + Is.typedArray( + candidate.relatedInformation, + DiagnosticRelatedInformation.is + )) + ); + } + Diagnostic3.is = is; + })((Diagnostic2 = exports2.Diagnostic || (exports2.Diagnostic = {}))); + let Command; + (function (Command2) { + function create(title, command) { + let args = []; + for (let _i = 2; _i < arguments.length; _i++) { + args[_i - 2] = arguments[_i]; + } + let result = { title, command }; + if (Is.defined(args) && args.length > 0) { + result.arguments = args; + } + return result; + } + Command2.create = create; + function is(value) { + let candidate = value; + return ( + Is.defined(candidate) && + Is.string(candidate.title) && + Is.string(candidate.command) + ); + } + Command2.is = is; + })((Command = exports2.Command || (exports2.Command = {}))); + let TextEdit; + (function (TextEdit2) { + function replace(range, newText) { + return { range, newText }; + } + TextEdit2.replace = replace; + function insert(position, newText) { + return { range: { start: position, end: position }, newText }; + } + TextEdit2.insert = insert; + function del(range) { + return { range, newText: '' }; + } + TextEdit2.del = del; + function is(value) { + let candidate = value; + return ( + Is.objectLiteral(candidate) && + Is.string(candidate.newText) && + Range4.is(candidate.range) + ); + } + TextEdit2.is = is; + })((TextEdit = exports2.TextEdit || (exports2.TextEdit = {}))); + let ChangeAnnotation; + (function (ChangeAnnotation2) { + function create(label, needsConfirmation, description) { + let result = { label }; + if (needsConfirmation !== void 0) { + result.needsConfirmation = needsConfirmation; + } + if (description !== void 0) { + result.description = description; + } + return result; + } + ChangeAnnotation2.create = create; + function is(value) { + let candidate = value; + return ( + Is.objectLiteral(candidate) && + Is.string(candidate.label) && + (Is.boolean(candidate.needsConfirmation) || + candidate.needsConfirmation === void 0) && + (Is.string(candidate.description) || + candidate.description === void 0) + ); + } + ChangeAnnotation2.is = is; + })( + (ChangeAnnotation = + exports2.ChangeAnnotation || (exports2.ChangeAnnotation = {})) + ); + let ChangeAnnotationIdentifier; + (function (ChangeAnnotationIdentifier2) { + function is(value) { + let candidate = value; + return Is.string(candidate); + } + ChangeAnnotationIdentifier2.is = is; + })( + (ChangeAnnotationIdentifier = + exports2.ChangeAnnotationIdentifier || + (exports2.ChangeAnnotationIdentifier = {})) + ); + let AnnotatedTextEdit; + (function (AnnotatedTextEdit2) { + function replace(range, newText, annotation) { + return { range, newText, annotationId: annotation }; + } + AnnotatedTextEdit2.replace = replace; + function insert(position, newText, annotation) { + return { + range: { start: position, end: position }, + newText, + annotationId: annotation, + }; + } + AnnotatedTextEdit2.insert = insert; + function del(range, annotation) { + return { range, newText: '', annotationId: annotation }; + } + AnnotatedTextEdit2.del = del; + function is(value) { + let candidate = value; + return ( + TextEdit.is(candidate) && + (ChangeAnnotation.is(candidate.annotationId) || + ChangeAnnotationIdentifier.is(candidate.annotationId)) + ); + } + AnnotatedTextEdit2.is = is; + })( + (AnnotatedTextEdit = + exports2.AnnotatedTextEdit || (exports2.AnnotatedTextEdit = {})) + ); + let TextDocumentEdit; + (function (TextDocumentEdit2) { + function create(textDocument, edits) { + return { textDocument, edits }; + } + TextDocumentEdit2.create = create; + function is(value) { + let candidate = value; + return ( + Is.defined(candidate) && + OptionalVersionedTextDocumentIdentifier.is( + candidate.textDocument + ) && + Array.isArray(candidate.edits) + ); + } + TextDocumentEdit2.is = is; + })( + (TextDocumentEdit = + exports2.TextDocumentEdit || (exports2.TextDocumentEdit = {})) + ); + let CreateFile; + (function (CreateFile2) { + function create(uri, options, annotation) { + let result = { + kind: 'create', + uri, + }; + if ( + options !== void 0 && + (options.overwrite !== void 0 || + options.ignoreIfExists !== void 0) + ) { + result.options = options; + } + if (annotation !== void 0) { + result.annotationId = annotation; + } + return result; + } + CreateFile2.create = create; + function is(value) { + let candidate = value; + return ( + candidate && + candidate.kind === 'create' && + Is.string(candidate.uri) && + (candidate.options === void 0 || + ((candidate.options.overwrite === void 0 || + Is.boolean(candidate.options.overwrite)) && + (candidate.options.ignoreIfExists === void 0 || + Is.boolean(candidate.options.ignoreIfExists)))) && + (candidate.annotationId === void 0 || + ChangeAnnotationIdentifier.is(candidate.annotationId)) + ); + } + CreateFile2.is = is; + })((CreateFile = exports2.CreateFile || (exports2.CreateFile = {}))); + let RenameFile; + (function (RenameFile2) { + function create(oldUri, newUri, options, annotation) { + let result = { + kind: 'rename', + oldUri, + newUri, + }; + if ( + options !== void 0 && + (options.overwrite !== void 0 || + options.ignoreIfExists !== void 0) + ) { + result.options = options; + } + if (annotation !== void 0) { + result.annotationId = annotation; + } + return result; + } + RenameFile2.create = create; + function is(value) { + let candidate = value; + return ( + candidate && + candidate.kind === 'rename' && + Is.string(candidate.oldUri) && + Is.string(candidate.newUri) && + (candidate.options === void 0 || + ((candidate.options.overwrite === void 0 || + Is.boolean(candidate.options.overwrite)) && + (candidate.options.ignoreIfExists === void 0 || + Is.boolean(candidate.options.ignoreIfExists)))) && + (candidate.annotationId === void 0 || + ChangeAnnotationIdentifier.is(candidate.annotationId)) + ); + } + RenameFile2.is = is; + })((RenameFile = exports2.RenameFile || (exports2.RenameFile = {}))); + let DeleteFile; + (function (DeleteFile2) { + function create(uri, options, annotation) { + let result = { + kind: 'delete', + uri, + }; + if ( + options !== void 0 && + (options.recursive !== void 0 || + options.ignoreIfNotExists !== void 0) + ) { + result.options = options; + } + if (annotation !== void 0) { + result.annotationId = annotation; + } + return result; + } + DeleteFile2.create = create; + function is(value) { + let candidate = value; + return ( + candidate && + candidate.kind === 'delete' && + Is.string(candidate.uri) && + (candidate.options === void 0 || + ((candidate.options.recursive === void 0 || + Is.boolean(candidate.options.recursive)) && + (candidate.options.ignoreIfNotExists === void 0 || + Is.boolean(candidate.options.ignoreIfNotExists)))) && + (candidate.annotationId === void 0 || + ChangeAnnotationIdentifier.is(candidate.annotationId)) + ); + } + DeleteFile2.is = is; + })((DeleteFile = exports2.DeleteFile || (exports2.DeleteFile = {}))); + let WorkspaceEdit; + (function (WorkspaceEdit2) { + function is(value) { + let candidate = value; + return ( + candidate && + (candidate.changes !== void 0 || + candidate.documentChanges !== void 0) && + (candidate.documentChanges === void 0 || + candidate.documentChanges.every(function (change) { + if (Is.string(change.kind)) { + return ( + CreateFile.is(change) || + RenameFile.is(change) || + DeleteFile.is(change) + ); + } else { + return TextDocumentEdit.is(change); + } + })) + ); + } + WorkspaceEdit2.is = is; + })( + (WorkspaceEdit = + exports2.WorkspaceEdit || (exports2.WorkspaceEdit = {})) + ); + let TextEditChangeImpl = (function () { + function TextEditChangeImpl2(edits, changeAnnotations) { + this.edits = edits; + this.changeAnnotations = changeAnnotations; + } + TextEditChangeImpl2.prototype.insert = function ( + position, + newText, + annotation + ) { + let edit; + let id; + if (annotation === void 0) { + edit = TextEdit.insert(position, newText); + } else if (ChangeAnnotationIdentifier.is(annotation)) { + id = annotation; + edit = AnnotatedTextEdit.insert(position, newText, annotation); + } else { + this.assertChangeAnnotations(this.changeAnnotations); + id = this.changeAnnotations.manage(annotation); + edit = AnnotatedTextEdit.insert(position, newText, id); + } + this.edits.push(edit); + if (id !== void 0) { + return id; + } + }; + TextEditChangeImpl2.prototype.replace = function ( + range, + newText, + annotation + ) { + let edit; + let id; + if (annotation === void 0) { + edit = TextEdit.replace(range, newText); + } else if (ChangeAnnotationIdentifier.is(annotation)) { + id = annotation; + edit = AnnotatedTextEdit.replace(range, newText, annotation); + } else { + this.assertChangeAnnotations(this.changeAnnotations); + id = this.changeAnnotations.manage(annotation); + edit = AnnotatedTextEdit.replace(range, newText, id); + } + this.edits.push(edit); + if (id !== void 0) { + return id; + } + }; + TextEditChangeImpl2.prototype.delete = function (range, annotation) { + let edit; + let id; + if (annotation === void 0) { + edit = TextEdit.del(range); + } else if (ChangeAnnotationIdentifier.is(annotation)) { + id = annotation; + edit = AnnotatedTextEdit.del(range, annotation); + } else { + this.assertChangeAnnotations(this.changeAnnotations); + id = this.changeAnnotations.manage(annotation); + edit = AnnotatedTextEdit.del(range, id); + } + this.edits.push(edit); + if (id !== void 0) { + return id; + } + }; + TextEditChangeImpl2.prototype.add = function (edit) { + this.edits.push(edit); + }; + TextEditChangeImpl2.prototype.all = function () { + return this.edits; + }; + TextEditChangeImpl2.prototype.clear = function () { + this.edits.splice(0, this.edits.length); + }; + TextEditChangeImpl2.prototype.assertChangeAnnotations = function ( + value + ) { + if (value === void 0) { + throw new Error( + 'Text edit change is not configured to manage change annotations.' + ); + } + }; + return TextEditChangeImpl2; + })(); + let ChangeAnnotations = (function () { + function ChangeAnnotations2(annotations) { + this._annotations = + annotations === void 0 ? Object.create(null) : annotations; + this._counter = 0; + this._size = 0; + } + ChangeAnnotations2.prototype.all = function () { + return this._annotations; + }; + Object.defineProperty(ChangeAnnotations2.prototype, 'size', { + get: function () { + return this._size; + }, + enumerable: false, + configurable: true, + }); + ChangeAnnotations2.prototype.manage = function ( + idOrAnnotation, + annotation + ) { + let id; + if (ChangeAnnotationIdentifier.is(idOrAnnotation)) { + id = idOrAnnotation; + } else { + id = this.nextId(); + annotation = idOrAnnotation; + } + if (this._annotations[id] !== void 0) { + throw new Error('Id '.concat(id, ' is already in use.')); + } + if (annotation === void 0) { + throw new Error('No annotation provided for id '.concat(id)); + } + this._annotations[id] = annotation; + this._size++; + return id; + }; + ChangeAnnotations2.prototype.nextId = function () { + this._counter++; + return this._counter.toString(); + }; + return ChangeAnnotations2; + })(); + let WorkspaceChange = (function () { + function WorkspaceChange2(workspaceEdit) { + let _this = this; + this._textEditChanges = Object.create(null); + if (workspaceEdit !== void 0) { + this._workspaceEdit = workspaceEdit; + if (workspaceEdit.documentChanges) { + this._changeAnnotations = new ChangeAnnotations( + workspaceEdit.changeAnnotations + ); + workspaceEdit.changeAnnotations = this._changeAnnotations.all(); + workspaceEdit.documentChanges.forEach(function (change) { + if (TextDocumentEdit.is(change)) { + let textEditChange = new TextEditChangeImpl( + change.edits, + _this._changeAnnotations + ); + _this._textEditChanges[ + change.textDocument.uri + ] = textEditChange; + } + }); + } else if (workspaceEdit.changes) { + Object.keys(workspaceEdit.changes).forEach(function (key) { + let textEditChange = new TextEditChangeImpl( + workspaceEdit.changes[key] + ); + _this._textEditChanges[key] = textEditChange; + }); + } + } else { + this._workspaceEdit = {}; + } + } + Object.defineProperty(WorkspaceChange2.prototype, 'edit', { + get: function () { + this.initDocumentChanges(); + if (this._changeAnnotations !== void 0) { + if (this._changeAnnotations.size === 0) { + this._workspaceEdit.changeAnnotations = void 0; + } else { + this._workspaceEdit.changeAnnotations = this._changeAnnotations.all(); + } + } + return this._workspaceEdit; + }, + enumerable: false, + configurable: true, + }); + WorkspaceChange2.prototype.getTextEditChange = function (key) { + if (OptionalVersionedTextDocumentIdentifier.is(key)) { + this.initDocumentChanges(); + if (this._workspaceEdit.documentChanges === void 0) { + throw new Error( + 'Workspace edit is not configured for document changes.' + ); + } + let textDocument = { uri: key.uri, version: key.version }; + var result = this._textEditChanges[textDocument.uri]; + if (!result) { + var edits = []; + let textDocumentEdit = { + textDocument, + edits, + }; + this._workspaceEdit.documentChanges.push(textDocumentEdit); + result = new TextEditChangeImpl(edits, this._changeAnnotations); + this._textEditChanges[textDocument.uri] = result; + } + return result; + } else { + this.initChanges(); + if (this._workspaceEdit.changes === void 0) { + throw new Error( + 'Workspace edit is not configured for normal text edit changes.' + ); + } + var result = this._textEditChanges[key]; + if (!result) { + var edits = []; + this._workspaceEdit.changes[key] = edits; + result = new TextEditChangeImpl(edits); + this._textEditChanges[key] = result; + } + return result; + } + }; + WorkspaceChange2.prototype.initDocumentChanges = function () { + if ( + this._workspaceEdit.documentChanges === void 0 && + this._workspaceEdit.changes === void 0 + ) { + this._changeAnnotations = new ChangeAnnotations(); + this._workspaceEdit.documentChanges = []; + this._workspaceEdit.changeAnnotations = this._changeAnnotations.all(); + } + }; + WorkspaceChange2.prototype.initChanges = function () { + if ( + this._workspaceEdit.documentChanges === void 0 && + this._workspaceEdit.changes === void 0 + ) { + this._workspaceEdit.changes = Object.create(null); + } + }; + WorkspaceChange2.prototype.createFile = function ( + uri, + optionsOrAnnotation, + options + ) { + this.initDocumentChanges(); + if (this._workspaceEdit.documentChanges === void 0) { + throw new Error( + 'Workspace edit is not configured for document changes.' + ); + } + let annotation; + if ( + ChangeAnnotation.is(optionsOrAnnotation) || + ChangeAnnotationIdentifier.is(optionsOrAnnotation) + ) { + annotation = optionsOrAnnotation; + } else { + options = optionsOrAnnotation; + } + let operation; + let id; + if (annotation === void 0) { + operation = CreateFile.create(uri, options); + } else { + id = ChangeAnnotationIdentifier.is(annotation) + ? annotation + : this._changeAnnotations.manage(annotation); + operation = CreateFile.create(uri, options, id); + } + this._workspaceEdit.documentChanges.push(operation); + if (id !== void 0) { + return id; + } + }; + WorkspaceChange2.prototype.renameFile = function ( + oldUri, + newUri, + optionsOrAnnotation, + options + ) { + this.initDocumentChanges(); + if (this._workspaceEdit.documentChanges === void 0) { + throw new Error( + 'Workspace edit is not configured for document changes.' + ); + } + let annotation; + if ( + ChangeAnnotation.is(optionsOrAnnotation) || + ChangeAnnotationIdentifier.is(optionsOrAnnotation) + ) { + annotation = optionsOrAnnotation; + } else { + options = optionsOrAnnotation; + } + let operation; + let id; + if (annotation === void 0) { + operation = RenameFile.create(oldUri, newUri, options); + } else { + id = ChangeAnnotationIdentifier.is(annotation) + ? annotation + : this._changeAnnotations.manage(annotation); + operation = RenameFile.create(oldUri, newUri, options, id); + } + this._workspaceEdit.documentChanges.push(operation); + if (id !== void 0) { + return id; + } + }; + WorkspaceChange2.prototype.deleteFile = function ( + uri, + optionsOrAnnotation, + options + ) { + this.initDocumentChanges(); + if (this._workspaceEdit.documentChanges === void 0) { + throw new Error( + 'Workspace edit is not configured for document changes.' + ); + } + let annotation; + if ( + ChangeAnnotation.is(optionsOrAnnotation) || + ChangeAnnotationIdentifier.is(optionsOrAnnotation) + ) { + annotation = optionsOrAnnotation; + } else { + options = optionsOrAnnotation; + } + let operation; + let id; + if (annotation === void 0) { + operation = DeleteFile.create(uri, options); + } else { + id = ChangeAnnotationIdentifier.is(annotation) + ? annotation + : this._changeAnnotations.manage(annotation); + operation = DeleteFile.create(uri, options, id); + } + this._workspaceEdit.documentChanges.push(operation); + if (id !== void 0) { + return id; + } + }; + return WorkspaceChange2; + })(); + exports2.WorkspaceChange = WorkspaceChange; + let TextDocumentIdentifier; + (function (TextDocumentIdentifier2) { + function create(uri) { + return { uri }; + } + TextDocumentIdentifier2.create = create; + function is(value) { + let candidate = value; + return Is.defined(candidate) && Is.string(candidate.uri); + } + TextDocumentIdentifier2.is = is; + })( + (TextDocumentIdentifier = + exports2.TextDocumentIdentifier || + (exports2.TextDocumentIdentifier = {})) + ); + let VersionedTextDocumentIdentifier; + (function (VersionedTextDocumentIdentifier2) { + function create(uri, version) { + return { uri, version }; + } + VersionedTextDocumentIdentifier2.create = create; + function is(value) { + let candidate = value; + return ( + Is.defined(candidate) && + Is.string(candidate.uri) && + Is.integer(candidate.version) + ); + } + VersionedTextDocumentIdentifier2.is = is; + })( + (VersionedTextDocumentIdentifier = + exports2.VersionedTextDocumentIdentifier || + (exports2.VersionedTextDocumentIdentifier = {})) + ); + let OptionalVersionedTextDocumentIdentifier; + (function (OptionalVersionedTextDocumentIdentifier2) { + function create(uri, version) { + return { uri, version }; + } + OptionalVersionedTextDocumentIdentifier2.create = create; + function is(value) { + let candidate = value; + return ( + Is.defined(candidate) && + Is.string(candidate.uri) && + (candidate.version === null || Is.integer(candidate.version)) + ); + } + OptionalVersionedTextDocumentIdentifier2.is = is; + })( + (OptionalVersionedTextDocumentIdentifier = + exports2.OptionalVersionedTextDocumentIdentifier || + (exports2.OptionalVersionedTextDocumentIdentifier = {})) + ); + let TextDocumentItem; + (function (TextDocumentItem2) { + function create(uri, languageId, version, text) { + return { uri, languageId, version, text }; + } + TextDocumentItem2.create = create; + function is(value) { + let candidate = value; + return ( + Is.defined(candidate) && + Is.string(candidate.uri) && + Is.string(candidate.languageId) && + Is.integer(candidate.version) && + Is.string(candidate.text) + ); + } + TextDocumentItem2.is = is; + })( + (TextDocumentItem = + exports2.TextDocumentItem || (exports2.TextDocumentItem = {})) + ); + let MarkupKind; + (function (MarkupKind2) { + MarkupKind2.PlainText = 'plaintext'; + MarkupKind2.Markdown = 'markdown'; + })((MarkupKind = exports2.MarkupKind || (exports2.MarkupKind = {}))); + (function (MarkupKind2) { + function is(value) { + let candidate = value; + return ( + candidate === MarkupKind2.PlainText || + candidate === MarkupKind2.Markdown + ); + } + MarkupKind2.is = is; + })((MarkupKind = exports2.MarkupKind || (exports2.MarkupKind = {}))); + let MarkupContent; + (function (MarkupContent2) { + function is(value) { + let candidate = value; + return ( + Is.objectLiteral(value) && + MarkupKind.is(candidate.kind) && + Is.string(candidate.value) + ); + } + MarkupContent2.is = is; + })( + (MarkupContent = + exports2.MarkupContent || (exports2.MarkupContent = {})) + ); + let CompletionItemKind2; + (function (CompletionItemKind3) { + CompletionItemKind3.Text = 1; + CompletionItemKind3.Method = 2; + CompletionItemKind3.Function = 3; + CompletionItemKind3.Constructor = 4; + CompletionItemKind3.Field = 5; + CompletionItemKind3.Variable = 6; + CompletionItemKind3.Class = 7; + CompletionItemKind3.Interface = 8; + CompletionItemKind3.Module = 9; + CompletionItemKind3.Property = 10; + CompletionItemKind3.Unit = 11; + CompletionItemKind3.Value = 12; + CompletionItemKind3.Enum = 13; + CompletionItemKind3.Keyword = 14; + CompletionItemKind3.Snippet = 15; + CompletionItemKind3.Color = 16; + CompletionItemKind3.File = 17; + CompletionItemKind3.Reference = 18; + CompletionItemKind3.Folder = 19; + CompletionItemKind3.EnumMember = 20; + CompletionItemKind3.Constant = 21; + CompletionItemKind3.Struct = 22; + CompletionItemKind3.Event = 23; + CompletionItemKind3.Operator = 24; + CompletionItemKind3.TypeParameter = 25; + })( + (CompletionItemKind2 = + exports2.CompletionItemKind || (exports2.CompletionItemKind = {})) + ); + let InsertTextFormat; + (function (InsertTextFormat2) { + InsertTextFormat2.PlainText = 1; + InsertTextFormat2.Snippet = 2; + })( + (InsertTextFormat = + exports2.InsertTextFormat || (exports2.InsertTextFormat = {})) + ); + let CompletionItemTag; + (function (CompletionItemTag2) { + CompletionItemTag2.Deprecated = 1; + })( + (CompletionItemTag = + exports2.CompletionItemTag || (exports2.CompletionItemTag = {})) + ); + let InsertReplaceEdit; + (function (InsertReplaceEdit2) { + function create(newText, insert, replace) { + return { newText, insert, replace }; + } + InsertReplaceEdit2.create = create; + function is(value) { + let candidate = value; + return ( + candidate && + Is.string(candidate.newText) && + Range4.is(candidate.insert) && + Range4.is(candidate.replace) + ); + } + InsertReplaceEdit2.is = is; + })( + (InsertReplaceEdit = + exports2.InsertReplaceEdit || (exports2.InsertReplaceEdit = {})) + ); + let InsertTextMode; + (function (InsertTextMode2) { + InsertTextMode2.asIs = 1; + InsertTextMode2.adjustIndentation = 2; + })( + (InsertTextMode = + exports2.InsertTextMode || (exports2.InsertTextMode = {})) + ); + let CompletionItemLabelDetails; + (function (CompletionItemLabelDetails2) { + function is(value) { + let candidate = value; + return ( + candidate && + (Is.string(candidate.detail) || candidate.detail === void 0) && + (Is.string(candidate.description) || + candidate.description === void 0) + ); + } + CompletionItemLabelDetails2.is = is; + })( + (CompletionItemLabelDetails = + exports2.CompletionItemLabelDetails || + (exports2.CompletionItemLabelDetails = {})) + ); + let CompletionItem; + (function (CompletionItem2) { + function create(label) { + return { label }; + } + CompletionItem2.create = create; + })( + (CompletionItem = + exports2.CompletionItem || (exports2.CompletionItem = {})) + ); + let CompletionList; + (function (CompletionList2) { + function create(items, isIncomplete) { + return { items: items ? items : [], isIncomplete: !!isIncomplete }; + } + CompletionList2.create = create; + })( + (CompletionList = + exports2.CompletionList || (exports2.CompletionList = {})) + ); + let MarkedString; + (function (MarkedString2) { + function fromPlainText(plainText) { + return plainText.replace(/[\\`*_{}[\]()#+\-.!]/g, '\\$&'); + } + MarkedString2.fromPlainText = fromPlainText; + function is(value) { + let candidate = value; + return ( + Is.string(candidate) || + (Is.objectLiteral(candidate) && + Is.string(candidate.language) && + Is.string(candidate.value)) + ); + } + MarkedString2.is = is; + })( + (MarkedString = exports2.MarkedString || (exports2.MarkedString = {})) + ); + let Hover; + (function (Hover2) { + function is(value) { + let candidate = value; + return ( + !!candidate && + Is.objectLiteral(candidate) && + (MarkupContent.is(candidate.contents) || + MarkedString.is(candidate.contents) || + Is.typedArray(candidate.contents, MarkedString.is)) && + (value.range === void 0 || Range4.is(value.range)) + ); + } + Hover2.is = is; + })((Hover = exports2.Hover || (exports2.Hover = {}))); + let ParameterInformation; + (function (ParameterInformation2) { + function create(label, documentation) { + return documentation ? { label, documentation } : { label }; + } + ParameterInformation2.create = create; + })( + (ParameterInformation = + exports2.ParameterInformation || + (exports2.ParameterInformation = {})) + ); + let SignatureInformation; + (function (SignatureInformation2) { + function create(label, documentation) { + let parameters = []; + for (let _i = 2; _i < arguments.length; _i++) { + parameters[_i - 2] = arguments[_i]; + } + let result = { label }; + if (Is.defined(documentation)) { + result.documentation = documentation; + } + if (Is.defined(parameters)) { + result.parameters = parameters; + } else { + result.parameters = []; + } + return result; + } + SignatureInformation2.create = create; + })( + (SignatureInformation = + exports2.SignatureInformation || + (exports2.SignatureInformation = {})) + ); + let DocumentHighlightKind2; + (function (DocumentHighlightKind3) { + DocumentHighlightKind3.Text = 1; + DocumentHighlightKind3.Read = 2; + DocumentHighlightKind3.Write = 3; + })( + (DocumentHighlightKind2 = + exports2.DocumentHighlightKind || + (exports2.DocumentHighlightKind = {})) + ); + let DocumentHighlight2; + (function (DocumentHighlight3) { + function create(range, kind) { + let result = { range }; + if (Is.number(kind)) { + result.kind = kind; + } + return result; + } + DocumentHighlight3.create = create; + })( + (DocumentHighlight2 = + exports2.DocumentHighlight || (exports2.DocumentHighlight = {})) + ); + let SymbolKind4; + (function (SymbolKind5) { + SymbolKind5.File = 1; + SymbolKind5.Module = 2; + SymbolKind5.Namespace = 3; + SymbolKind5.Package = 4; + SymbolKind5.Class = 5; + SymbolKind5.Method = 6; + SymbolKind5.Property = 7; + SymbolKind5.Field = 8; + SymbolKind5.Constructor = 9; + SymbolKind5.Enum = 10; + SymbolKind5.Interface = 11; + SymbolKind5.Function = 12; + SymbolKind5.Variable = 13; + SymbolKind5.Constant = 14; + SymbolKind5.String = 15; + SymbolKind5.Number = 16; + SymbolKind5.Boolean = 17; + SymbolKind5.Array = 18; + SymbolKind5.Object = 19; + SymbolKind5.Key = 20; + SymbolKind5.Null = 21; + SymbolKind5.EnumMember = 22; + SymbolKind5.Struct = 23; + SymbolKind5.Event = 24; + SymbolKind5.Operator = 25; + SymbolKind5.TypeParameter = 26; + })((SymbolKind4 = exports2.SymbolKind || (exports2.SymbolKind = {}))); + let SymbolTag; + (function (SymbolTag2) { + SymbolTag2.Deprecated = 1; + })((SymbolTag = exports2.SymbolTag || (exports2.SymbolTag = {}))); + let SymbolInformation3; + (function (SymbolInformation4) { + function create(name, kind, range, uri, containerName) { + let result = { + name, + kind, + location: { uri, range }, + }; + if (containerName) { + result.containerName = containerName; + } + return result; + } + SymbolInformation4.create = create; + })( + (SymbolInformation3 = + exports2.SymbolInformation || (exports2.SymbolInformation = {})) + ); + let WorkspaceSymbol3; + (function (WorkspaceSymbol4) { + function create(name, kind, uri, range) { + return range !== void 0 + ? { name, kind, location: { uri, range } } + : { name, kind, location: { uri } }; + } + WorkspaceSymbol4.create = create; + })( + (WorkspaceSymbol3 = + exports2.WorkspaceSymbol || (exports2.WorkspaceSymbol = {})) + ); + let DocumentSymbol2; + (function (DocumentSymbol3) { + function create(name, detail, kind, range, selectionRange, children) { + let result = { + name, + detail, + kind, + range, + selectionRange, + }; + if (children !== void 0) { + result.children = children; + } + return result; + } + DocumentSymbol3.create = create; + function is(value) { + let candidate = value; + return ( + candidate && + Is.string(candidate.name) && + Is.number(candidate.kind) && + Range4.is(candidate.range) && + Range4.is(candidate.selectionRange) && + (candidate.detail === void 0 || Is.string(candidate.detail)) && + (candidate.deprecated === void 0 || + Is.boolean(candidate.deprecated)) && + (candidate.children === void 0 || + Array.isArray(candidate.children)) && + (candidate.tags === void 0 || Array.isArray(candidate.tags)) + ); + } + DocumentSymbol3.is = is; + })( + (DocumentSymbol2 = + exports2.DocumentSymbol || (exports2.DocumentSymbol = {})) + ); + let CodeActionKind; + (function (CodeActionKind2) { + CodeActionKind2.Empty = ''; + CodeActionKind2.QuickFix = 'quickfix'; + CodeActionKind2.Refactor = 'refactor'; + CodeActionKind2.RefactorExtract = 'refactor.extract'; + CodeActionKind2.RefactorInline = 'refactor.inline'; + CodeActionKind2.RefactorRewrite = 'refactor.rewrite'; + CodeActionKind2.Source = 'source'; + CodeActionKind2.SourceOrganizeImports = 'source.organizeImports'; + CodeActionKind2.SourceFixAll = 'source.fixAll'; + })( + (CodeActionKind = + exports2.CodeActionKind || (exports2.CodeActionKind = {})) + ); + let CodeActionTriggerKind; + (function (CodeActionTriggerKind2) { + CodeActionTriggerKind2.Invoked = 1; + CodeActionTriggerKind2.Automatic = 2; + })( + (CodeActionTriggerKind = + exports2.CodeActionTriggerKind || + (exports2.CodeActionTriggerKind = {})) + ); + let CodeActionContext; + (function (CodeActionContext2) { + function create(diagnostics, only, triggerKind) { + let result = { diagnostics }; + if (only !== void 0 && only !== null) { + result.only = only; + } + if (triggerKind !== void 0 && triggerKind !== null) { + result.triggerKind = triggerKind; + } + return result; + } + CodeActionContext2.create = create; + function is(value) { + let candidate = value; + return ( + Is.defined(candidate) && + Is.typedArray(candidate.diagnostics, Diagnostic2.is) && + (candidate.only === void 0 || + Is.typedArray(candidate.only, Is.string)) && + (candidate.triggerKind === void 0 || + candidate.triggerKind === CodeActionTriggerKind.Invoked || + candidate.triggerKind === CodeActionTriggerKind.Automatic) + ); + } + CodeActionContext2.is = is; + })( + (CodeActionContext = + exports2.CodeActionContext || (exports2.CodeActionContext = {})) + ); + let CodeAction; + (function (CodeAction2) { + function create(title, kindOrCommandOrEdit, kind) { + let result = { title }; + let checkKind = true; + if (typeof kindOrCommandOrEdit === 'string') { + checkKind = false; + result.kind = kindOrCommandOrEdit; + } else if (Command.is(kindOrCommandOrEdit)) { + result.command = kindOrCommandOrEdit; + } else { + result.edit = kindOrCommandOrEdit; + } + if (checkKind && kind !== void 0) { + result.kind = kind; + } + return result; + } + CodeAction2.create = create; + function is(value) { + let candidate = value; + return ( + candidate && + Is.string(candidate.title) && + (candidate.diagnostics === void 0 || + Is.typedArray(candidate.diagnostics, Diagnostic2.is)) && + (candidate.kind === void 0 || Is.string(candidate.kind)) && + (candidate.edit !== void 0 || candidate.command !== void 0) && + (candidate.command === void 0 || Command.is(candidate.command)) && + (candidate.isPreferred === void 0 || + Is.boolean(candidate.isPreferred)) && + (candidate.edit === void 0 || WorkspaceEdit.is(candidate.edit)) + ); + } + CodeAction2.is = is; + })((CodeAction = exports2.CodeAction || (exports2.CodeAction = {}))); + let CodeLens; + (function (CodeLens2) { + function create(range, data) { + let result = { range }; + if (Is.defined(data)) { + result.data = data; + } + return result; + } + CodeLens2.create = create; + function is(value) { + let candidate = value; + return ( + Is.defined(candidate) && + Range4.is(candidate.range) && + (Is.undefined(candidate.command) || Command.is(candidate.command)) + ); + } + CodeLens2.is = is; + })((CodeLens = exports2.CodeLens || (exports2.CodeLens = {}))); + let FormattingOptions; + (function (FormattingOptions2) { + function create(tabSize, insertSpaces) { + return { tabSize, insertSpaces }; + } + FormattingOptions2.create = create; + function is(value) { + let candidate = value; + return ( + Is.defined(candidate) && + Is.uinteger(candidate.tabSize) && + Is.boolean(candidate.insertSpaces) + ); + } + FormattingOptions2.is = is; + })( + (FormattingOptions = + exports2.FormattingOptions || (exports2.FormattingOptions = {})) + ); + let DocumentLink; + (function (DocumentLink2) { + function create(range, target, data) { + return { range, target, data }; + } + DocumentLink2.create = create; + function is(value) { + let candidate = value; + return ( + Is.defined(candidate) && + Range4.is(candidate.range) && + (Is.undefined(candidate.target) || Is.string(candidate.target)) + ); + } + DocumentLink2.is = is; + })( + (DocumentLink = exports2.DocumentLink || (exports2.DocumentLink = {})) + ); + let SelectionRange2; + (function (SelectionRange3) { + function create(range, parent) { + return { range, parent }; + } + SelectionRange3.create = create; + function is(value) { + let candidate = value; + return ( + Is.objectLiteral(candidate) && + Range4.is(candidate.range) && + (candidate.parent === void 0 || + SelectionRange3.is(candidate.parent)) + ); + } + SelectionRange3.is = is; + })( + (SelectionRange2 = + exports2.SelectionRange || (exports2.SelectionRange = {})) + ); + let SemanticTokenTypes; + (function (SemanticTokenTypes2) { + SemanticTokenTypes2['namespace'] = 'namespace'; + SemanticTokenTypes2['type'] = 'type'; + SemanticTokenTypes2['class'] = 'class'; + SemanticTokenTypes2['enum'] = 'enum'; + SemanticTokenTypes2['interface'] = 'interface'; + SemanticTokenTypes2['struct'] = 'struct'; + SemanticTokenTypes2['typeParameter'] = 'typeParameter'; + SemanticTokenTypes2['parameter'] = 'parameter'; + SemanticTokenTypes2['variable'] = 'variable'; + SemanticTokenTypes2['property'] = 'property'; + SemanticTokenTypes2['enumMember'] = 'enumMember'; + SemanticTokenTypes2['event'] = 'event'; + SemanticTokenTypes2['function'] = 'function'; + SemanticTokenTypes2['method'] = 'method'; + SemanticTokenTypes2['macro'] = 'macro'; + SemanticTokenTypes2['keyword'] = 'keyword'; + SemanticTokenTypes2['modifier'] = 'modifier'; + SemanticTokenTypes2['comment'] = 'comment'; + SemanticTokenTypes2['string'] = 'string'; + SemanticTokenTypes2['number'] = 'number'; + SemanticTokenTypes2['regexp'] = 'regexp'; + SemanticTokenTypes2['operator'] = 'operator'; + SemanticTokenTypes2['decorator'] = 'decorator'; + })( + (SemanticTokenTypes = + exports2.SemanticTokenTypes || (exports2.SemanticTokenTypes = {})) + ); + let SemanticTokenModifiers; + (function (SemanticTokenModifiers2) { + SemanticTokenModifiers2['declaration'] = 'declaration'; + SemanticTokenModifiers2['definition'] = 'definition'; + SemanticTokenModifiers2['readonly'] = 'readonly'; + SemanticTokenModifiers2['static'] = 'static'; + SemanticTokenModifiers2['deprecated'] = 'deprecated'; + SemanticTokenModifiers2['abstract'] = 'abstract'; + SemanticTokenModifiers2['async'] = 'async'; + SemanticTokenModifiers2['modification'] = 'modification'; + SemanticTokenModifiers2['documentation'] = 'documentation'; + SemanticTokenModifiers2['defaultLibrary'] = 'defaultLibrary'; + })( + (SemanticTokenModifiers = + exports2.SemanticTokenModifiers || + (exports2.SemanticTokenModifiers = {})) + ); + let SemanticTokens; + (function (SemanticTokens2) { + function is(value) { + let candidate = value; + return ( + Is.objectLiteral(candidate) && + (candidate.resultId === void 0 || + typeof candidate.resultId === 'string') && + Array.isArray(candidate.data) && + (candidate.data.length === 0 || + typeof candidate.data[0] === 'number') + ); + } + SemanticTokens2.is = is; + })( + (SemanticTokens = + exports2.SemanticTokens || (exports2.SemanticTokens = {})) + ); + let InlineValueText; + (function (InlineValueText2) { + function create(range, text) { + return { range, text }; + } + InlineValueText2.create = create; + function is(value) { + let candidate = value; + return ( + candidate !== void 0 && + candidate !== null && + Range4.is(candidate.range) && + Is.string(candidate.text) + ); + } + InlineValueText2.is = is; + })( + (InlineValueText = + exports2.InlineValueText || (exports2.InlineValueText = {})) + ); + let InlineValueVariableLookup; + (function (InlineValueVariableLookup2) { + function create(range, variableName, caseSensitiveLookup) { + return { range, variableName, caseSensitiveLookup }; + } + InlineValueVariableLookup2.create = create; + function is(value) { + let candidate = value; + return ( + candidate !== void 0 && + candidate !== null && + Range4.is(candidate.range) && + Is.boolean(candidate.caseSensitiveLookup) && + (Is.string(candidate.variableName) || + candidate.variableName === void 0) + ); + } + InlineValueVariableLookup2.is = is; + })( + (InlineValueVariableLookup = + exports2.InlineValueVariableLookup || + (exports2.InlineValueVariableLookup = {})) + ); + let InlineValueEvaluatableExpression; + (function (InlineValueEvaluatableExpression2) { + function create(range, expression) { + return { range, expression }; + } + InlineValueEvaluatableExpression2.create = create; + function is(value) { + let candidate = value; + return ( + candidate !== void 0 && + candidate !== null && + Range4.is(candidate.range) && + (Is.string(candidate.expression) || + candidate.expression === void 0) + ); + } + InlineValueEvaluatableExpression2.is = is; + })( + (InlineValueEvaluatableExpression = + exports2.InlineValueEvaluatableExpression || + (exports2.InlineValueEvaluatableExpression = {})) + ); + let InlineValuesContext; + (function (InlineValuesContext2) { + function create(stoppedLocation) { + return { stoppedLocation }; + } + InlineValuesContext2.create = create; + function is(value) { + let candidate = value; + return Is.defined(candidate) && Range4.is(value.stoppedLocation); + } + InlineValuesContext2.is = is; + })( + (InlineValuesContext = + exports2.InlineValuesContext || (exports2.InlineValuesContext = {})) + ); + exports2.EOL = ['\n', '\r\n', '\r']; + let TextDocument2; + (function (TextDocument3) { + function create(uri, languageId, version, content) { + return new FullTextDocument2(uri, languageId, version, content); + } + TextDocument3.create = create; + function is(value) { + let candidate = value; + return Is.defined(candidate) && + Is.string(candidate.uri) && + (Is.undefined(candidate.languageId) || + Is.string(candidate.languageId)) && + Is.uinteger(candidate.lineCount) && + Is.func(candidate.getText) && + Is.func(candidate.positionAt) && + Is.func(candidate.offsetAt) + ? true + : false; + } + TextDocument3.is = is; + function applyEdits(document2, edits) { + let text = document2.getText(); + let sortedEdits = mergeSort2(edits, function (a, b) { + let diff = a.range.start.line - b.range.start.line; + if (diff === 0) { + return a.range.start.character - b.range.start.character; + } + return diff; + }); + let lastModifiedOffset = text.length; + for (let i = sortedEdits.length - 1; i >= 0; i--) { + let e = sortedEdits[i]; + let startOffset = document2.offsetAt(e.range.start); + let endOffset = document2.offsetAt(e.range.end); + if (endOffset <= lastModifiedOffset) { + text = + text.substring(0, startOffset) + + e.newText + + text.substring(endOffset, text.length); + } else { + throw new Error('Overlapping edit'); + } + lastModifiedOffset = startOffset; + } + return text; + } + TextDocument3.applyEdits = applyEdits; + function mergeSort2(data, compare) { + if (data.length <= 1) { + return data; + } + let p = (data.length / 2) | 0; + let left = data.slice(0, p); + let right = data.slice(p); + mergeSort2(left, compare); + mergeSort2(right, compare); + let leftIdx = 0; + let rightIdx = 0; + let i = 0; + while (leftIdx < left.length && rightIdx < right.length) { + let ret = compare(left[leftIdx], right[rightIdx]); + if (ret <= 0) { + data[i++] = left[leftIdx++]; + } else { + data[i++] = right[rightIdx++]; + } + } + while (leftIdx < left.length) { + data[i++] = left[leftIdx++]; + } + while (rightIdx < right.length) { + data[i++] = right[rightIdx++]; + } + return data; + } + })( + (TextDocument2 = + exports2.TextDocument || (exports2.TextDocument = {})) + ); + var FullTextDocument2 = (function () { + function FullTextDocument3(uri, languageId, version, content) { + this._uri = uri; + this._languageId = languageId; + this._version = version; + this._content = content; + this._lineOffsets = void 0; + } + Object.defineProperty(FullTextDocument3.prototype, 'uri', { + get: function () { + return this._uri; + }, + enumerable: false, + configurable: true, + }); + Object.defineProperty(FullTextDocument3.prototype, 'languageId', { + get: function () { + return this._languageId; + }, + enumerable: false, + configurable: true, + }); + Object.defineProperty(FullTextDocument3.prototype, 'version', { + get: function () { + return this._version; + }, + enumerable: false, + configurable: true, + }); + FullTextDocument3.prototype.getText = function (range) { + if (range) { + let start = this.offsetAt(range.start); + let end = this.offsetAt(range.end); + return this._content.substring(start, end); + } + return this._content; + }; + FullTextDocument3.prototype.update = function (event, version) { + this._content = event.text; + this._version = version; + this._lineOffsets = void 0; + }; + FullTextDocument3.prototype.getLineOffsets = function () { + if (this._lineOffsets === void 0) { + let lineOffsets = []; + let text = this._content; + let isLineStart = true; + for (let i = 0; i < text.length; i++) { + if (isLineStart) { + lineOffsets.push(i); + isLineStart = false; + } + let ch = text.charAt(i); + isLineStart = ch === '\r' || ch === '\n'; + if ( + ch === '\r' && + i + 1 < text.length && + text.charAt(i + 1) === '\n' + ) { + i++; + } + } + if (isLineStart && text.length > 0) { + lineOffsets.push(text.length); + } + this._lineOffsets = lineOffsets; + } + return this._lineOffsets; + }; + FullTextDocument3.prototype.positionAt = function (offset) { + offset = Math.max(Math.min(offset, this._content.length), 0); + let lineOffsets = this.getLineOffsets(); + let low = 0, + high = lineOffsets.length; + if (high === 0) { + return Position.create(0, offset); + } + while (low < high) { + let mid = Math.floor((low + high) / 2); + if (lineOffsets[mid] > offset) { + high = mid; + } else { + low = mid + 1; + } + } + let line = low - 1; + return Position.create(line, offset - lineOffsets[line]); + }; + FullTextDocument3.prototype.offsetAt = function (position) { + let lineOffsets = this.getLineOffsets(); + if (position.line >= lineOffsets.length) { + return this._content.length; + } else if (position.line < 0) { + return 0; + } + let lineOffset = lineOffsets[position.line]; + let nextLineOffset = + position.line + 1 < lineOffsets.length + ? lineOffsets[position.line + 1] + : this._content.length; + return Math.max( + Math.min(lineOffset + position.character, nextLineOffset), + lineOffset + ); + }; + Object.defineProperty(FullTextDocument3.prototype, 'lineCount', { + get: function () { + return this.getLineOffsets().length; + }, + enumerable: false, + configurable: true, + }); + return FullTextDocument3; + })(); + let Is; + (function (Is2) { + let toString = Object.prototype.toString; + function defined(value) { + return typeof value !== 'undefined'; + } + Is2.defined = defined; + function undefined2(value) { + return typeof value === 'undefined'; + } + Is2.undefined = undefined2; + function boolean(value) { + return value === true || value === false; + } + Is2.boolean = boolean; + function string(value) { + return toString.call(value) === '[object String]'; + } + Is2.string = string; + function number(value) { + return toString.call(value) === '[object Number]'; + } + Is2.number = number; + function numberRange(value, min, max) { + return ( + toString.call(value) === '[object Number]' && + min <= value && + value <= max + ); + } + Is2.numberRange = numberRange; + function integer2(value) { + return ( + toString.call(value) === '[object Number]' && + -2147483648 <= value && + value <= 2147483647 + ); + } + Is2.integer = integer2; + function uinteger2(value) { + return ( + toString.call(value) === '[object Number]' && + 0 <= value && + value <= 2147483647 + ); + } + Is2.uinteger = uinteger2; + function func(value) { + return toString.call(value) === '[object Function]'; + } + Is2.func = func; + function objectLiteral(value) { + return value !== null && typeof value === 'object'; + } + Is2.objectLiteral = objectLiteral; + function typedArray(value, check) { + return Array.isArray(value) && value.every(check); + } + Is2.typedArray = typedArray; + })(Is || (Is = {})); + }); + }, + }); + + // server/node_modules/vscode-languageserver-protocol/lib/common/messages.js + let require_messages2 = __commonJS({ + 'server/node_modules/vscode-languageserver-protocol/lib/common/messages.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.ProtocolNotificationType = exports.ProtocolNotificationType0 = exports.ProtocolRequestType = exports.ProtocolRequestType0 = exports.RegistrationType = void 0; + let vscode_jsonrpc_1 = require_main(); + let RegistrationType = class { + constructor(method) { + this.method = method; + } + }; + exports.RegistrationType = RegistrationType; + let ProtocolRequestType0 = class extends vscode_jsonrpc_1.RequestType0 { + constructor(method) { + super(method); + } + }; + exports.ProtocolRequestType0 = ProtocolRequestType0; + let ProtocolRequestType = class extends vscode_jsonrpc_1.RequestType { + constructor(method) { + super(method, vscode_jsonrpc_1.ParameterStructures.byName); + } + }; + exports.ProtocolRequestType = ProtocolRequestType; + let ProtocolNotificationType0 = class extends vscode_jsonrpc_1.NotificationType0 { + constructor(method) { + super(method); + } + }; + exports.ProtocolNotificationType0 = ProtocolNotificationType0; + let ProtocolNotificationType = class extends vscode_jsonrpc_1.NotificationType { + constructor(method) { + super(method, vscode_jsonrpc_1.ParameterStructures.byName); + } + }; + exports.ProtocolNotificationType = ProtocolNotificationType; + }, + }); + + // server/node_modules/vscode-languageserver-protocol/lib/common/utils/is.js + let require_is2 = __commonJS({ + 'server/node_modules/vscode-languageserver-protocol/lib/common/utils/is.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.objectLiteral = exports.typedArray = exports.stringArray = exports.array = exports.func = exports.error = exports.number = exports.string = exports.boolean = void 0; + function boolean(value) { + return value === true || value === false; + } + exports.boolean = boolean; + function string(value) { + return typeof value === 'string' || value instanceof String; + } + exports.string = string; + function number(value) { + return typeof value === 'number' || value instanceof Number; + } + exports.number = number; + function error(value) { + return value instanceof Error; + } + exports.error = error; + function func(value) { + return typeof value === 'function'; + } + exports.func = func; + function array(value) { + return Array.isArray(value); + } + exports.array = array; + function stringArray(value) { + return array(value) && value.every((elem) => string(elem)); + } + exports.stringArray = stringArray; + function typedArray(value, check) { + return Array.isArray(value) && value.every(check); + } + exports.typedArray = typedArray; + function objectLiteral(value) { + return value !== null && typeof value === 'object'; + } + exports.objectLiteral = objectLiteral; + }, + }); + + // server/node_modules/vscode-languageserver-protocol/lib/common/protocol.implementation.js + let require_protocol_implementation = __commonJS({ + 'server/node_modules/vscode-languageserver-protocol/lib/common/protocol.implementation.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.ImplementationRequest = void 0; + let messages_1 = require_messages2(); + let ImplementationRequest; + (function (ImplementationRequest2) { + ImplementationRequest2.method = 'textDocument/implementation'; + ImplementationRequest2.type = new messages_1.ProtocolRequestType( + ImplementationRequest2.method + ); + })( + (ImplementationRequest = + exports.ImplementationRequest || (exports.ImplementationRequest = {})) + ); + }, + }); + + // server/node_modules/vscode-languageserver-protocol/lib/common/protocol.typeDefinition.js + let require_protocol_typeDefinition = __commonJS({ + 'server/node_modules/vscode-languageserver-protocol/lib/common/protocol.typeDefinition.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.TypeDefinitionRequest = void 0; + let messages_1 = require_messages2(); + let TypeDefinitionRequest; + (function (TypeDefinitionRequest2) { + TypeDefinitionRequest2.method = 'textDocument/typeDefinition'; + TypeDefinitionRequest2.type = new messages_1.ProtocolRequestType( + TypeDefinitionRequest2.method + ); + })( + (TypeDefinitionRequest = + exports.TypeDefinitionRequest || (exports.TypeDefinitionRequest = {})) + ); + }, + }); + + // server/node_modules/vscode-languageserver-protocol/lib/common/protocol.workspaceFolders.js + let require_protocol_workspaceFolders = __commonJS({ + 'server/node_modules/vscode-languageserver-protocol/lib/common/protocol.workspaceFolders.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.DidChangeWorkspaceFoldersNotification = exports.WorkspaceFoldersRequest = void 0; + let messages_1 = require_messages2(); + let WorkspaceFoldersRequest; + (function (WorkspaceFoldersRequest2) { + WorkspaceFoldersRequest2.type = new messages_1.ProtocolRequestType0( + 'workspace/workspaceFolders' + ); + })( + (WorkspaceFoldersRequest = + exports.WorkspaceFoldersRequest || + (exports.WorkspaceFoldersRequest = {})) + ); + let DidChangeWorkspaceFoldersNotification; + (function (DidChangeWorkspaceFoldersNotification2) { + DidChangeWorkspaceFoldersNotification2.type = new messages_1.ProtocolNotificationType( + 'workspace/didChangeWorkspaceFolders' + ); + })( + (DidChangeWorkspaceFoldersNotification = + exports.DidChangeWorkspaceFoldersNotification || + (exports.DidChangeWorkspaceFoldersNotification = {})) + ); + }, + }); + + // server/node_modules/vscode-languageserver-protocol/lib/common/protocol.configuration.js + let require_protocol_configuration = __commonJS({ + 'server/node_modules/vscode-languageserver-protocol/lib/common/protocol.configuration.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.ConfigurationRequest = void 0; + let messages_1 = require_messages2(); + let ConfigurationRequest; + (function (ConfigurationRequest2) { + ConfigurationRequest2.type = new messages_1.ProtocolRequestType( + 'workspace/configuration' + ); + })( + (ConfigurationRequest = + exports.ConfigurationRequest || (exports.ConfigurationRequest = {})) + ); + }, + }); + + // server/node_modules/vscode-languageserver-protocol/lib/common/protocol.colorProvider.js + let require_protocol_colorProvider = __commonJS({ + 'server/node_modules/vscode-languageserver-protocol/lib/common/protocol.colorProvider.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.ColorPresentationRequest = exports.DocumentColorRequest = void 0; + let messages_1 = require_messages2(); + let DocumentColorRequest; + (function (DocumentColorRequest2) { + DocumentColorRequest2.method = 'textDocument/documentColor'; + DocumentColorRequest2.type = new messages_1.ProtocolRequestType( + DocumentColorRequest2.method + ); + })( + (DocumentColorRequest = + exports.DocumentColorRequest || (exports.DocumentColorRequest = {})) + ); + let ColorPresentationRequest; + (function (ColorPresentationRequest2) { + ColorPresentationRequest2.type = new messages_1.ProtocolRequestType( + 'textDocument/colorPresentation' + ); + })( + (ColorPresentationRequest = + exports.ColorPresentationRequest || + (exports.ColorPresentationRequest = {})) + ); + }, + }); + + // server/node_modules/vscode-languageserver-protocol/lib/common/protocol.foldingRange.js + let require_protocol_foldingRange = __commonJS({ + 'server/node_modules/vscode-languageserver-protocol/lib/common/protocol.foldingRange.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.FoldingRangeRequest = exports.FoldingRangeKind = void 0; + let messages_1 = require_messages2(); + let FoldingRangeKind; + (function (FoldingRangeKind2) { + FoldingRangeKind2['Comment'] = 'comment'; + FoldingRangeKind2['Imports'] = 'imports'; + FoldingRangeKind2['Region'] = 'region'; + })( + (FoldingRangeKind = + exports.FoldingRangeKind || (exports.FoldingRangeKind = {})) + ); + let FoldingRangeRequest2; + (function (FoldingRangeRequest3) { + FoldingRangeRequest3.method = 'textDocument/foldingRange'; + FoldingRangeRequest3.type = new messages_1.ProtocolRequestType( + FoldingRangeRequest3.method + ); + })( + (FoldingRangeRequest2 = + exports.FoldingRangeRequest || (exports.FoldingRangeRequest = {})) + ); + }, + }); + + // server/node_modules/vscode-languageserver-protocol/lib/common/protocol.declaration.js + let require_protocol_declaration = __commonJS({ + 'server/node_modules/vscode-languageserver-protocol/lib/common/protocol.declaration.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.DeclarationRequest = void 0; + let messages_1 = require_messages2(); + let DeclarationRequest; + (function (DeclarationRequest2) { + DeclarationRequest2.method = 'textDocument/declaration'; + DeclarationRequest2.type = new messages_1.ProtocolRequestType( + DeclarationRequest2.method + ); + })( + (DeclarationRequest = + exports.DeclarationRequest || (exports.DeclarationRequest = {})) + ); + }, + }); + + // server/node_modules/vscode-languageserver-protocol/lib/common/protocol.selectionRange.js + let require_protocol_selectionRange = __commonJS({ + 'server/node_modules/vscode-languageserver-protocol/lib/common/protocol.selectionRange.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.SelectionRangeRequest = void 0; + let messages_1 = require_messages2(); + let SelectionRangeRequest2; + (function (SelectionRangeRequest3) { + SelectionRangeRequest3.method = 'textDocument/selectionRange'; + SelectionRangeRequest3.type = new messages_1.ProtocolRequestType( + SelectionRangeRequest3.method + ); + })( + (SelectionRangeRequest2 = + exports.SelectionRangeRequest || (exports.SelectionRangeRequest = {})) + ); + }, + }); + + // server/node_modules/vscode-languageserver-protocol/lib/common/protocol.progress.js + let require_protocol_progress = __commonJS({ + 'server/node_modules/vscode-languageserver-protocol/lib/common/protocol.progress.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.WorkDoneProgressCancelNotification = exports.WorkDoneProgressCreateRequest = exports.WorkDoneProgress = void 0; + let vscode_jsonrpc_1 = require_main(); + let messages_1 = require_messages2(); + let WorkDoneProgress; + (function (WorkDoneProgress2) { + WorkDoneProgress2.type = new vscode_jsonrpc_1.ProgressType(); + function is(value) { + return value === WorkDoneProgress2.type; + } + WorkDoneProgress2.is = is; + })( + (WorkDoneProgress = + exports.WorkDoneProgress || (exports.WorkDoneProgress = {})) + ); + let WorkDoneProgressCreateRequest; + (function (WorkDoneProgressCreateRequest2) { + WorkDoneProgressCreateRequest2.type = new messages_1.ProtocolRequestType( + 'window/workDoneProgress/create' + ); + })( + (WorkDoneProgressCreateRequest = + exports.WorkDoneProgressCreateRequest || + (exports.WorkDoneProgressCreateRequest = {})) + ); + let WorkDoneProgressCancelNotification; + (function (WorkDoneProgressCancelNotification2) { + WorkDoneProgressCancelNotification2.type = new messages_1.ProtocolNotificationType( + 'window/workDoneProgress/cancel' + ); + })( + (WorkDoneProgressCancelNotification = + exports.WorkDoneProgressCancelNotification || + (exports.WorkDoneProgressCancelNotification = {})) + ); + }, + }); + + // server/node_modules/vscode-languageserver-protocol/lib/common/protocol.callHierarchy.js + let require_protocol_callHierarchy = __commonJS({ + 'server/node_modules/vscode-languageserver-protocol/lib/common/protocol.callHierarchy.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.CallHierarchyOutgoingCallsRequest = exports.CallHierarchyIncomingCallsRequest = exports.CallHierarchyPrepareRequest = void 0; + let messages_1 = require_messages2(); + let CallHierarchyPrepareRequest; + (function (CallHierarchyPrepareRequest2) { + CallHierarchyPrepareRequest2.method = + 'textDocument/prepareCallHierarchy'; + CallHierarchyPrepareRequest2.type = new messages_1.ProtocolRequestType( + CallHierarchyPrepareRequest2.method + ); + })( + (CallHierarchyPrepareRequest = + exports.CallHierarchyPrepareRequest || + (exports.CallHierarchyPrepareRequest = {})) + ); + let CallHierarchyIncomingCallsRequest; + (function (CallHierarchyIncomingCallsRequest2) { + CallHierarchyIncomingCallsRequest2.method = + 'callHierarchy/incomingCalls'; + CallHierarchyIncomingCallsRequest2.type = new messages_1.ProtocolRequestType( + CallHierarchyIncomingCallsRequest2.method + ); + })( + (CallHierarchyIncomingCallsRequest = + exports.CallHierarchyIncomingCallsRequest || + (exports.CallHierarchyIncomingCallsRequest = {})) + ); + let CallHierarchyOutgoingCallsRequest; + (function (CallHierarchyOutgoingCallsRequest2) { + CallHierarchyOutgoingCallsRequest2.method = + 'callHierarchy/outgoingCalls'; + CallHierarchyOutgoingCallsRequest2.type = new messages_1.ProtocolRequestType( + CallHierarchyOutgoingCallsRequest2.method + ); + })( + (CallHierarchyOutgoingCallsRequest = + exports.CallHierarchyOutgoingCallsRequest || + (exports.CallHierarchyOutgoingCallsRequest = {})) + ); + }, + }); + + // server/node_modules/vscode-languageserver-protocol/lib/common/protocol.semanticTokens.js + let require_protocol_semanticTokens = __commonJS({ + 'server/node_modules/vscode-languageserver-protocol/lib/common/protocol.semanticTokens.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.SemanticTokensRefreshRequest = exports.SemanticTokensRangeRequest = exports.SemanticTokensDeltaRequest = exports.SemanticTokensRequest = exports.SemanticTokensRegistrationType = exports.TokenFormat = void 0; + let messages_1 = require_messages2(); + let TokenFormat; + (function (TokenFormat2) { + TokenFormat2.Relative = 'relative'; + })((TokenFormat = exports.TokenFormat || (exports.TokenFormat = {}))); + let SemanticTokensRegistrationType; + (function (SemanticTokensRegistrationType2) { + SemanticTokensRegistrationType2.method = 'textDocument/semanticTokens'; + SemanticTokensRegistrationType2.type = new messages_1.RegistrationType( + SemanticTokensRegistrationType2.method + ); + })( + (SemanticTokensRegistrationType = + exports.SemanticTokensRegistrationType || + (exports.SemanticTokensRegistrationType = {})) + ); + let SemanticTokensRequest; + (function (SemanticTokensRequest2) { + SemanticTokensRequest2.method = 'textDocument/semanticTokens/full'; + SemanticTokensRequest2.type = new messages_1.ProtocolRequestType( + SemanticTokensRequest2.method + ); + })( + (SemanticTokensRequest = + exports.SemanticTokensRequest || (exports.SemanticTokensRequest = {})) + ); + let SemanticTokensDeltaRequest; + (function (SemanticTokensDeltaRequest2) { + SemanticTokensDeltaRequest2.method = + 'textDocument/semanticTokens/full/delta'; + SemanticTokensDeltaRequest2.type = new messages_1.ProtocolRequestType( + SemanticTokensDeltaRequest2.method + ); + })( + (SemanticTokensDeltaRequest = + exports.SemanticTokensDeltaRequest || + (exports.SemanticTokensDeltaRequest = {})) + ); + let SemanticTokensRangeRequest; + (function (SemanticTokensRangeRequest2) { + SemanticTokensRangeRequest2.method = + 'textDocument/semanticTokens/range'; + SemanticTokensRangeRequest2.type = new messages_1.ProtocolRequestType( + SemanticTokensRangeRequest2.method + ); + })( + (SemanticTokensRangeRequest = + exports.SemanticTokensRangeRequest || + (exports.SemanticTokensRangeRequest = {})) + ); + let SemanticTokensRefreshRequest; + (function (SemanticTokensRefreshRequest2) { + SemanticTokensRefreshRequest2.method = `workspace/semanticTokens/refresh`; + SemanticTokensRefreshRequest2.type = new messages_1.ProtocolRequestType0( + SemanticTokensRefreshRequest2.method + ); + })( + (SemanticTokensRefreshRequest = + exports.SemanticTokensRefreshRequest || + (exports.SemanticTokensRefreshRequest = {})) + ); + }, + }); + + // server/node_modules/vscode-languageserver-protocol/lib/common/protocol.showDocument.js + let require_protocol_showDocument = __commonJS({ + 'server/node_modules/vscode-languageserver-protocol/lib/common/protocol.showDocument.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.ShowDocumentRequest = void 0; + let messages_1 = require_messages2(); + let ShowDocumentRequest; + (function (ShowDocumentRequest2) { + ShowDocumentRequest2.method = 'window/showDocument'; + ShowDocumentRequest2.type = new messages_1.ProtocolRequestType( + ShowDocumentRequest2.method + ); + })( + (ShowDocumentRequest = + exports.ShowDocumentRequest || (exports.ShowDocumentRequest = {})) + ); + }, + }); + + // server/node_modules/vscode-languageserver-protocol/lib/common/protocol.linkedEditingRange.js + let require_protocol_linkedEditingRange = __commonJS({ + 'server/node_modules/vscode-languageserver-protocol/lib/common/protocol.linkedEditingRange.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.LinkedEditingRangeRequest = void 0; + let messages_1 = require_messages2(); + let LinkedEditingRangeRequest; + (function (LinkedEditingRangeRequest2) { + LinkedEditingRangeRequest2.method = 'textDocument/linkedEditingRange'; + LinkedEditingRangeRequest2.type = new messages_1.ProtocolRequestType( + LinkedEditingRangeRequest2.method + ); + })( + (LinkedEditingRangeRequest = + exports.LinkedEditingRangeRequest || + (exports.LinkedEditingRangeRequest = {})) + ); + }, + }); + + // server/node_modules/vscode-languageserver-protocol/lib/common/protocol.fileOperations.js + let require_protocol_fileOperations = __commonJS({ + 'server/node_modules/vscode-languageserver-protocol/lib/common/protocol.fileOperations.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.WillDeleteFilesRequest = exports.DidDeleteFilesNotification = exports.DidRenameFilesNotification = exports.WillRenameFilesRequest = exports.DidCreateFilesNotification = exports.WillCreateFilesRequest = exports.FileOperationPatternKind = void 0; + let messages_1 = require_messages2(); + let FileOperationPatternKind; + (function (FileOperationPatternKind2) { + FileOperationPatternKind2.file = 'file'; + FileOperationPatternKind2.folder = 'folder'; + })( + (FileOperationPatternKind = + exports.FileOperationPatternKind || + (exports.FileOperationPatternKind = {})) + ); + let WillCreateFilesRequest; + (function (WillCreateFilesRequest2) { + WillCreateFilesRequest2.method = 'workspace/willCreateFiles'; + WillCreateFilesRequest2.type = new messages_1.ProtocolRequestType( + WillCreateFilesRequest2.method + ); + })( + (WillCreateFilesRequest = + exports.WillCreateFilesRequest || + (exports.WillCreateFilesRequest = {})) + ); + let DidCreateFilesNotification; + (function (DidCreateFilesNotification2) { + DidCreateFilesNotification2.method = 'workspace/didCreateFiles'; + DidCreateFilesNotification2.type = new messages_1.ProtocolNotificationType( + DidCreateFilesNotification2.method + ); + })( + (DidCreateFilesNotification = + exports.DidCreateFilesNotification || + (exports.DidCreateFilesNotification = {})) + ); + let WillRenameFilesRequest; + (function (WillRenameFilesRequest2) { + WillRenameFilesRequest2.method = 'workspace/willRenameFiles'; + WillRenameFilesRequest2.type = new messages_1.ProtocolRequestType( + WillRenameFilesRequest2.method + ); + })( + (WillRenameFilesRequest = + exports.WillRenameFilesRequest || + (exports.WillRenameFilesRequest = {})) + ); + let DidRenameFilesNotification; + (function (DidRenameFilesNotification2) { + DidRenameFilesNotification2.method = 'workspace/didRenameFiles'; + DidRenameFilesNotification2.type = new messages_1.ProtocolNotificationType( + DidRenameFilesNotification2.method + ); + })( + (DidRenameFilesNotification = + exports.DidRenameFilesNotification || + (exports.DidRenameFilesNotification = {})) + ); + let DidDeleteFilesNotification; + (function (DidDeleteFilesNotification2) { + DidDeleteFilesNotification2.method = 'workspace/didDeleteFiles'; + DidDeleteFilesNotification2.type = new messages_1.ProtocolNotificationType( + DidDeleteFilesNotification2.method + ); + })( + (DidDeleteFilesNotification = + exports.DidDeleteFilesNotification || + (exports.DidDeleteFilesNotification = {})) + ); + let WillDeleteFilesRequest; + (function (WillDeleteFilesRequest2) { + WillDeleteFilesRequest2.method = 'workspace/willDeleteFiles'; + WillDeleteFilesRequest2.type = new messages_1.ProtocolRequestType( + WillDeleteFilesRequest2.method + ); + })( + (WillDeleteFilesRequest = + exports.WillDeleteFilesRequest || + (exports.WillDeleteFilesRequest = {})) + ); + }, + }); + + // server/node_modules/vscode-languageserver-protocol/lib/common/protocol.moniker.js + let require_protocol_moniker = __commonJS({ + 'server/node_modules/vscode-languageserver-protocol/lib/common/protocol.moniker.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.MonikerRequest = exports.MonikerKind = exports.UniquenessLevel = void 0; + let messages_1 = require_messages2(); + let UniquenessLevel; + (function (UniquenessLevel2) { + UniquenessLevel2['document'] = 'document'; + UniquenessLevel2['project'] = 'project'; + UniquenessLevel2['group'] = 'group'; + UniquenessLevel2['scheme'] = 'scheme'; + UniquenessLevel2['global'] = 'global'; + })( + (UniquenessLevel = + exports.UniquenessLevel || (exports.UniquenessLevel = {})) + ); + let MonikerKind; + (function (MonikerKind2) { + MonikerKind2['import'] = 'import'; + MonikerKind2['export'] = 'export'; + MonikerKind2['local'] = 'local'; + })((MonikerKind = exports.MonikerKind || (exports.MonikerKind = {}))); + let MonikerRequest; + (function (MonikerRequest2) { + MonikerRequest2.method = 'textDocument/moniker'; + MonikerRequest2.type = new messages_1.ProtocolRequestType( + MonikerRequest2.method + ); + })( + (MonikerRequest = + exports.MonikerRequest || (exports.MonikerRequest = {})) + ); + }, + }); + + // server/node_modules/vscode-languageserver-protocol/lib/common/protocol.js + let require_protocol = __commonJS({ + 'server/node_modules/vscode-languageserver-protocol/lib/common/protocol.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.CodeLensRefreshRequest = exports.CodeLensResolveRequest = exports.CodeLensRequest = exports.WorkspaceSymbolResolveRequest = exports.WorkspaceSymbolRequest = exports.CodeActionResolveRequest = exports.CodeActionRequest = exports.DocumentSymbolRequest = exports.DocumentHighlightRequest = exports.ReferencesRequest = exports.DefinitionRequest = exports.SignatureHelpRequest = exports.SignatureHelpTriggerKind = exports.HoverRequest = exports.CompletionResolveRequest = exports.CompletionRequest = exports.CompletionTriggerKind = exports.PublishDiagnosticsNotification = exports.WatchKind = exports.FileChangeType = exports.DidChangeWatchedFilesNotification = exports.WillSaveTextDocumentWaitUntilRequest = exports.WillSaveTextDocumentNotification = exports.TextDocumentSaveReason = exports.DidSaveTextDocumentNotification = exports.DidCloseTextDocumentNotification = exports.DidChangeTextDocumentNotification = exports.TextDocumentContentChangeEvent = exports.DidOpenTextDocumentNotification = exports.TextDocumentSyncKind = exports.TelemetryEventNotification = exports.LogMessageNotification = exports.ShowMessageRequest = exports.ShowMessageNotification = exports.MessageType = exports.DidChangeConfigurationNotification = exports.ExitNotification = exports.ShutdownRequest = exports.InitializedNotification = exports.InitializeError = exports.InitializeRequest = exports.WorkDoneProgressOptions = exports.TextDocumentRegistrationOptions = exports.StaticRegistrationOptions = exports.FailureHandlingKind = exports.ResourceOperationKind = exports.UnregistrationRequest = exports.RegistrationRequest = exports.DocumentSelector = exports.DocumentFilter = void 0; + exports.MonikerRequest = exports.MonikerKind = exports.UniquenessLevel = exports.WillDeleteFilesRequest = exports.DidDeleteFilesNotification = exports.WillRenameFilesRequest = exports.DidRenameFilesNotification = exports.WillCreateFilesRequest = exports.DidCreateFilesNotification = exports.FileOperationPatternKind = exports.LinkedEditingRangeRequest = exports.ShowDocumentRequest = exports.SemanticTokensRegistrationType = exports.SemanticTokensRefreshRequest = exports.SemanticTokensRangeRequest = exports.SemanticTokensDeltaRequest = exports.SemanticTokensRequest = exports.TokenFormat = exports.CallHierarchyPrepareRequest = exports.CallHierarchyOutgoingCallsRequest = exports.CallHierarchyIncomingCallsRequest = exports.WorkDoneProgressCancelNotification = exports.WorkDoneProgressCreateRequest = exports.WorkDoneProgress = exports.SelectionRangeRequest = exports.DeclarationRequest = exports.FoldingRangeRequest = exports.ColorPresentationRequest = exports.DocumentColorRequest = exports.ConfigurationRequest = exports.DidChangeWorkspaceFoldersNotification = exports.WorkspaceFoldersRequest = exports.TypeDefinitionRequest = exports.ImplementationRequest = exports.ApplyWorkspaceEditRequest = exports.ExecuteCommandRequest = exports.PrepareRenameRequest = exports.RenameRequest = exports.PrepareSupportDefaultBehavior = exports.DocumentOnTypeFormattingRequest = exports.DocumentRangeFormattingRequest = exports.DocumentFormattingRequest = exports.DocumentLinkResolveRequest = exports.DocumentLinkRequest = void 0; + let messages_1 = require_messages2(); + let Is = require_is2(); + let protocol_implementation_1 = require_protocol_implementation(); + Object.defineProperty(exports, 'ImplementationRequest', { + enumerable: true, + get: function () { + return protocol_implementation_1.ImplementationRequest; + }, + }); + let protocol_typeDefinition_1 = require_protocol_typeDefinition(); + Object.defineProperty(exports, 'TypeDefinitionRequest', { + enumerable: true, + get: function () { + return protocol_typeDefinition_1.TypeDefinitionRequest; + }, + }); + let protocol_workspaceFolders_1 = require_protocol_workspaceFolders(); + Object.defineProperty(exports, 'WorkspaceFoldersRequest', { + enumerable: true, + get: function () { + return protocol_workspaceFolders_1.WorkspaceFoldersRequest; + }, + }); + Object.defineProperty(exports, 'DidChangeWorkspaceFoldersNotification', { + enumerable: true, + get: function () { + return protocol_workspaceFolders_1.DidChangeWorkspaceFoldersNotification; + }, + }); + let protocol_configuration_1 = require_protocol_configuration(); + Object.defineProperty(exports, 'ConfigurationRequest', { + enumerable: true, + get: function () { + return protocol_configuration_1.ConfigurationRequest; + }, + }); + let protocol_colorProvider_1 = require_protocol_colorProvider(); + Object.defineProperty(exports, 'DocumentColorRequest', { + enumerable: true, + get: function () { + return protocol_colorProvider_1.DocumentColorRequest; + }, + }); + Object.defineProperty(exports, 'ColorPresentationRequest', { + enumerable: true, + get: function () { + return protocol_colorProvider_1.ColorPresentationRequest; + }, + }); + let protocol_foldingRange_1 = require_protocol_foldingRange(); + Object.defineProperty(exports, 'FoldingRangeRequest', { + enumerable: true, + get: function () { + return protocol_foldingRange_1.FoldingRangeRequest; + }, + }); + let protocol_declaration_1 = require_protocol_declaration(); + Object.defineProperty(exports, 'DeclarationRequest', { + enumerable: true, + get: function () { + return protocol_declaration_1.DeclarationRequest; + }, + }); + let protocol_selectionRange_1 = require_protocol_selectionRange(); + Object.defineProperty(exports, 'SelectionRangeRequest', { + enumerable: true, + get: function () { + return protocol_selectionRange_1.SelectionRangeRequest; + }, + }); + let protocol_progress_1 = require_protocol_progress(); + Object.defineProperty(exports, 'WorkDoneProgress', { + enumerable: true, + get: function () { + return protocol_progress_1.WorkDoneProgress; + }, + }); + Object.defineProperty(exports, 'WorkDoneProgressCreateRequest', { + enumerable: true, + get: function () { + return protocol_progress_1.WorkDoneProgressCreateRequest; + }, + }); + Object.defineProperty(exports, 'WorkDoneProgressCancelNotification', { + enumerable: true, + get: function () { + return protocol_progress_1.WorkDoneProgressCancelNotification; + }, + }); + let protocol_callHierarchy_1 = require_protocol_callHierarchy(); + Object.defineProperty(exports, 'CallHierarchyIncomingCallsRequest', { + enumerable: true, + get: function () { + return protocol_callHierarchy_1.CallHierarchyIncomingCallsRequest; + }, + }); + Object.defineProperty(exports, 'CallHierarchyOutgoingCallsRequest', { + enumerable: true, + get: function () { + return protocol_callHierarchy_1.CallHierarchyOutgoingCallsRequest; + }, + }); + Object.defineProperty(exports, 'CallHierarchyPrepareRequest', { + enumerable: true, + get: function () { + return protocol_callHierarchy_1.CallHierarchyPrepareRequest; + }, + }); + let protocol_semanticTokens_1 = require_protocol_semanticTokens(); + Object.defineProperty(exports, 'TokenFormat', { + enumerable: true, + get: function () { + return protocol_semanticTokens_1.TokenFormat; + }, + }); + Object.defineProperty(exports, 'SemanticTokensRequest', { + enumerable: true, + get: function () { + return protocol_semanticTokens_1.SemanticTokensRequest; + }, + }); + Object.defineProperty(exports, 'SemanticTokensDeltaRequest', { + enumerable: true, + get: function () { + return protocol_semanticTokens_1.SemanticTokensDeltaRequest; + }, + }); + Object.defineProperty(exports, 'SemanticTokensRangeRequest', { + enumerable: true, + get: function () { + return protocol_semanticTokens_1.SemanticTokensRangeRequest; + }, + }); + Object.defineProperty(exports, 'SemanticTokensRefreshRequest', { + enumerable: true, + get: function () { + return protocol_semanticTokens_1.SemanticTokensRefreshRequest; + }, + }); + Object.defineProperty(exports, 'SemanticTokensRegistrationType', { + enumerable: true, + get: function () { + return protocol_semanticTokens_1.SemanticTokensRegistrationType; + }, + }); + let protocol_showDocument_1 = require_protocol_showDocument(); + Object.defineProperty(exports, 'ShowDocumentRequest', { + enumerable: true, + get: function () { + return protocol_showDocument_1.ShowDocumentRequest; + }, + }); + let protocol_linkedEditingRange_1 = require_protocol_linkedEditingRange(); + Object.defineProperty(exports, 'LinkedEditingRangeRequest', { + enumerable: true, + get: function () { + return protocol_linkedEditingRange_1.LinkedEditingRangeRequest; + }, + }); + let protocol_fileOperations_1 = require_protocol_fileOperations(); + Object.defineProperty(exports, 'FileOperationPatternKind', { + enumerable: true, + get: function () { + return protocol_fileOperations_1.FileOperationPatternKind; + }, + }); + Object.defineProperty(exports, 'DidCreateFilesNotification', { + enumerable: true, + get: function () { + return protocol_fileOperations_1.DidCreateFilesNotification; + }, + }); + Object.defineProperty(exports, 'WillCreateFilesRequest', { + enumerable: true, + get: function () { + return protocol_fileOperations_1.WillCreateFilesRequest; + }, + }); + Object.defineProperty(exports, 'DidRenameFilesNotification', { + enumerable: true, + get: function () { + return protocol_fileOperations_1.DidRenameFilesNotification; + }, + }); + Object.defineProperty(exports, 'WillRenameFilesRequest', { + enumerable: true, + get: function () { + return protocol_fileOperations_1.WillRenameFilesRequest; + }, + }); + Object.defineProperty(exports, 'DidDeleteFilesNotification', { + enumerable: true, + get: function () { + return protocol_fileOperations_1.DidDeleteFilesNotification; + }, + }); + Object.defineProperty(exports, 'WillDeleteFilesRequest', { + enumerable: true, + get: function () { + return protocol_fileOperations_1.WillDeleteFilesRequest; + }, + }); + let protocol_moniker_1 = require_protocol_moniker(); + Object.defineProperty(exports, 'UniquenessLevel', { + enumerable: true, + get: function () { + return protocol_moniker_1.UniquenessLevel; + }, + }); + Object.defineProperty(exports, 'MonikerKind', { + enumerable: true, + get: function () { + return protocol_moniker_1.MonikerKind; + }, + }); + Object.defineProperty(exports, 'MonikerRequest', { + enumerable: true, + get: function () { + return protocol_moniker_1.MonikerRequest; + }, + }); + let DocumentFilter; + (function (DocumentFilter2) { + function is(value) { + const candidate = value; + return ( + Is.string(candidate.language) || + Is.string(candidate.scheme) || + Is.string(candidate.pattern) + ); + } + DocumentFilter2.is = is; + })( + (DocumentFilter = + exports.DocumentFilter || (exports.DocumentFilter = {})) + ); + let DocumentSelector; + (function (DocumentSelector2) { + function is(value) { + if (!Array.isArray(value)) { + return false; + } + for (let elem of value) { + if (!Is.string(elem) && !DocumentFilter.is(elem)) { + return false; + } + } + return true; + } + DocumentSelector2.is = is; + })( + (DocumentSelector = + exports.DocumentSelector || (exports.DocumentSelector = {})) + ); + let RegistrationRequest; + (function (RegistrationRequest2) { + RegistrationRequest2.type = new messages_1.ProtocolRequestType( + 'client/registerCapability' + ); + })( + (RegistrationRequest = + exports.RegistrationRequest || (exports.RegistrationRequest = {})) + ); + let UnregistrationRequest; + (function (UnregistrationRequest2) { + UnregistrationRequest2.type = new messages_1.ProtocolRequestType( + 'client/unregisterCapability' + ); + })( + (UnregistrationRequest = + exports.UnregistrationRequest || (exports.UnregistrationRequest = {})) + ); + let ResourceOperationKind; + (function (ResourceOperationKind2) { + ResourceOperationKind2.Create = 'create'; + ResourceOperationKind2.Rename = 'rename'; + ResourceOperationKind2.Delete = 'delete'; + })( + (ResourceOperationKind = + exports.ResourceOperationKind || (exports.ResourceOperationKind = {})) + ); + let FailureHandlingKind; + (function (FailureHandlingKind2) { + FailureHandlingKind2.Abort = 'abort'; + FailureHandlingKind2.Transactional = 'transactional'; + FailureHandlingKind2.TextOnlyTransactional = 'textOnlyTransactional'; + FailureHandlingKind2.Undo = 'undo'; + })( + (FailureHandlingKind = + exports.FailureHandlingKind || (exports.FailureHandlingKind = {})) + ); + let StaticRegistrationOptions; + (function (StaticRegistrationOptions2) { + function hasId(value) { + const candidate = value; + return ( + candidate && Is.string(candidate.id) && candidate.id.length > 0 + ); + } + StaticRegistrationOptions2.hasId = hasId; + })( + (StaticRegistrationOptions = + exports.StaticRegistrationOptions || + (exports.StaticRegistrationOptions = {})) + ); + let TextDocumentRegistrationOptions; + (function (TextDocumentRegistrationOptions2) { + function is(value) { + const candidate = value; + return ( + candidate && + (candidate.documentSelector === null || + DocumentSelector.is(candidate.documentSelector)) + ); + } + TextDocumentRegistrationOptions2.is = is; + })( + (TextDocumentRegistrationOptions = + exports.TextDocumentRegistrationOptions || + (exports.TextDocumentRegistrationOptions = {})) + ); + let WorkDoneProgressOptions; + (function (WorkDoneProgressOptions2) { + function is(value) { + const candidate = value; + return ( + Is.objectLiteral(candidate) && + (candidate.workDoneProgress === void 0 || + Is.boolean(candidate.workDoneProgress)) + ); + } + WorkDoneProgressOptions2.is = is; + function hasWorkDoneProgress(value) { + const candidate = value; + return candidate && Is.boolean(candidate.workDoneProgress); + } + WorkDoneProgressOptions2.hasWorkDoneProgress = hasWorkDoneProgress; + })( + (WorkDoneProgressOptions = + exports.WorkDoneProgressOptions || + (exports.WorkDoneProgressOptions = {})) + ); + let InitializeRequest; + (function (InitializeRequest2) { + InitializeRequest2.type = new messages_1.ProtocolRequestType( + 'initialize' + ); + })( + (InitializeRequest = + exports.InitializeRequest || (exports.InitializeRequest = {})) + ); + let InitializeError; + (function (InitializeError2) { + InitializeError2.unknownProtocolVersion = 1; + })( + (InitializeError = + exports.InitializeError || (exports.InitializeError = {})) + ); + let InitializedNotification; + (function (InitializedNotification2) { + InitializedNotification2.type = new messages_1.ProtocolNotificationType( + 'initialized' + ); + })( + (InitializedNotification = + exports.InitializedNotification || + (exports.InitializedNotification = {})) + ); + let ShutdownRequest; + (function (ShutdownRequest2) { + ShutdownRequest2.type = new messages_1.ProtocolRequestType0('shutdown'); + })( + (ShutdownRequest = + exports.ShutdownRequest || (exports.ShutdownRequest = {})) + ); + let ExitNotification; + (function (ExitNotification2) { + ExitNotification2.type = new messages_1.ProtocolNotificationType0( + 'exit' + ); + })( + (ExitNotification = + exports.ExitNotification || (exports.ExitNotification = {})) + ); + let DidChangeConfigurationNotification; + (function (DidChangeConfigurationNotification2) { + DidChangeConfigurationNotification2.type = new messages_1.ProtocolNotificationType( + 'workspace/didChangeConfiguration' + ); + })( + (DidChangeConfigurationNotification = + exports.DidChangeConfigurationNotification || + (exports.DidChangeConfigurationNotification = {})) + ); + let MessageType; + (function (MessageType2) { + MessageType2.Error = 1; + MessageType2.Warning = 2; + MessageType2.Info = 3; + MessageType2.Log = 4; + })((MessageType = exports.MessageType || (exports.MessageType = {}))); + let ShowMessageNotification; + (function (ShowMessageNotification2) { + ShowMessageNotification2.type = new messages_1.ProtocolNotificationType( + 'window/showMessage' + ); + })( + (ShowMessageNotification = + exports.ShowMessageNotification || + (exports.ShowMessageNotification = {})) + ); + let ShowMessageRequest; + (function (ShowMessageRequest2) { + ShowMessageRequest2.type = new messages_1.ProtocolRequestType( + 'window/showMessageRequest' + ); + })( + (ShowMessageRequest = + exports.ShowMessageRequest || (exports.ShowMessageRequest = {})) + ); + let LogMessageNotification; + (function (LogMessageNotification2) { + LogMessageNotification2.type = new messages_1.ProtocolNotificationType( + 'window/logMessage' + ); + })( + (LogMessageNotification = + exports.LogMessageNotification || + (exports.LogMessageNotification = {})) + ); + let TelemetryEventNotification; + (function (TelemetryEventNotification2) { + TelemetryEventNotification2.type = new messages_1.ProtocolNotificationType( + 'telemetry/event' + ); + })( + (TelemetryEventNotification = + exports.TelemetryEventNotification || + (exports.TelemetryEventNotification = {})) + ); + let TextDocumentSyncKind2; + (function (TextDocumentSyncKind3) { + TextDocumentSyncKind3.None = 0; + TextDocumentSyncKind3.Full = 1; + TextDocumentSyncKind3.Incremental = 2; + })( + (TextDocumentSyncKind2 = + exports.TextDocumentSyncKind || (exports.TextDocumentSyncKind = {})) + ); + let DidOpenTextDocumentNotification; + (function (DidOpenTextDocumentNotification2) { + DidOpenTextDocumentNotification2.method = 'textDocument/didOpen'; + DidOpenTextDocumentNotification2.type = new messages_1.ProtocolNotificationType( + DidOpenTextDocumentNotification2.method + ); + })( + (DidOpenTextDocumentNotification = + exports.DidOpenTextDocumentNotification || + (exports.DidOpenTextDocumentNotification = {})) + ); + let TextDocumentContentChangeEvent2; + (function (TextDocumentContentChangeEvent3) { + function isIncremental(event) { + let candidate = event; + return ( + candidate !== void 0 && + candidate !== null && + typeof candidate.text === 'string' && + candidate.range !== void 0 && + (candidate.rangeLength === void 0 || + typeof candidate.rangeLength === 'number') + ); + } + TextDocumentContentChangeEvent3.isIncremental = isIncremental; + function isFull(event) { + let candidate = event; + return ( + candidate !== void 0 && + candidate !== null && + typeof candidate.text === 'string' && + candidate.range === void 0 && + candidate.rangeLength === void 0 + ); + } + TextDocumentContentChangeEvent3.isFull = isFull; + })( + (TextDocumentContentChangeEvent2 = + exports.TextDocumentContentChangeEvent || + (exports.TextDocumentContentChangeEvent = {})) + ); + let DidChangeTextDocumentNotification; + (function (DidChangeTextDocumentNotification2) { + DidChangeTextDocumentNotification2.method = 'textDocument/didChange'; + DidChangeTextDocumentNotification2.type = new messages_1.ProtocolNotificationType( + DidChangeTextDocumentNotification2.method + ); + })( + (DidChangeTextDocumentNotification = + exports.DidChangeTextDocumentNotification || + (exports.DidChangeTextDocumentNotification = {})) + ); + let DidCloseTextDocumentNotification; + (function (DidCloseTextDocumentNotification2) { + DidCloseTextDocumentNotification2.method = 'textDocument/didClose'; + DidCloseTextDocumentNotification2.type = new messages_1.ProtocolNotificationType( + DidCloseTextDocumentNotification2.method + ); + })( + (DidCloseTextDocumentNotification = + exports.DidCloseTextDocumentNotification || + (exports.DidCloseTextDocumentNotification = {})) + ); + let DidSaveTextDocumentNotification; + (function (DidSaveTextDocumentNotification2) { + DidSaveTextDocumentNotification2.method = 'textDocument/didSave'; + DidSaveTextDocumentNotification2.type = new messages_1.ProtocolNotificationType( + DidSaveTextDocumentNotification2.method + ); + })( + (DidSaveTextDocumentNotification = + exports.DidSaveTextDocumentNotification || + (exports.DidSaveTextDocumentNotification = {})) + ); + let TextDocumentSaveReason; + (function (TextDocumentSaveReason2) { + TextDocumentSaveReason2.Manual = 1; + TextDocumentSaveReason2.AfterDelay = 2; + TextDocumentSaveReason2.FocusOut = 3; + })( + (TextDocumentSaveReason = + exports.TextDocumentSaveReason || + (exports.TextDocumentSaveReason = {})) + ); + let WillSaveTextDocumentNotification; + (function (WillSaveTextDocumentNotification2) { + WillSaveTextDocumentNotification2.method = 'textDocument/willSave'; + WillSaveTextDocumentNotification2.type = new messages_1.ProtocolNotificationType( + WillSaveTextDocumentNotification2.method + ); + })( + (WillSaveTextDocumentNotification = + exports.WillSaveTextDocumentNotification || + (exports.WillSaveTextDocumentNotification = {})) + ); + let WillSaveTextDocumentWaitUntilRequest; + (function (WillSaveTextDocumentWaitUntilRequest2) { + WillSaveTextDocumentWaitUntilRequest2.method = + 'textDocument/willSaveWaitUntil'; + WillSaveTextDocumentWaitUntilRequest2.type = new messages_1.ProtocolRequestType( + WillSaveTextDocumentWaitUntilRequest2.method + ); + })( + (WillSaveTextDocumentWaitUntilRequest = + exports.WillSaveTextDocumentWaitUntilRequest || + (exports.WillSaveTextDocumentWaitUntilRequest = {})) + ); + let DidChangeWatchedFilesNotification; + (function (DidChangeWatchedFilesNotification2) { + DidChangeWatchedFilesNotification2.type = new messages_1.ProtocolNotificationType( + 'workspace/didChangeWatchedFiles' + ); + })( + (DidChangeWatchedFilesNotification = + exports.DidChangeWatchedFilesNotification || + (exports.DidChangeWatchedFilesNotification = {})) + ); + let FileChangeType; + (function (FileChangeType2) { + FileChangeType2.Created = 1; + FileChangeType2.Changed = 2; + FileChangeType2.Deleted = 3; + })( + (FileChangeType = + exports.FileChangeType || (exports.FileChangeType = {})) + ); + let WatchKind; + (function (WatchKind2) { + WatchKind2.Create = 1; + WatchKind2.Change = 2; + WatchKind2.Delete = 4; + })((WatchKind = exports.WatchKind || (exports.WatchKind = {}))); + let PublishDiagnosticsNotification; + (function (PublishDiagnosticsNotification2) { + PublishDiagnosticsNotification2.type = new messages_1.ProtocolNotificationType( + 'textDocument/publishDiagnostics' + ); + })( + (PublishDiagnosticsNotification = + exports.PublishDiagnosticsNotification || + (exports.PublishDiagnosticsNotification = {})) + ); + let CompletionTriggerKind; + (function (CompletionTriggerKind2) { + CompletionTriggerKind2.Invoked = 1; + CompletionTriggerKind2.TriggerCharacter = 2; + CompletionTriggerKind2.TriggerForIncompleteCompletions = 3; + })( + (CompletionTriggerKind = + exports.CompletionTriggerKind || (exports.CompletionTriggerKind = {})) + ); + let CompletionRequest2; + (function (CompletionRequest3) { + CompletionRequest3.method = 'textDocument/completion'; + CompletionRequest3.type = new messages_1.ProtocolRequestType( + CompletionRequest3.method + ); + })( + (CompletionRequest2 = + exports.CompletionRequest || (exports.CompletionRequest = {})) + ); + let CompletionResolveRequest; + (function (CompletionResolveRequest2) { + CompletionResolveRequest2.method = 'completionItem/resolve'; + CompletionResolveRequest2.type = new messages_1.ProtocolRequestType( + CompletionResolveRequest2.method + ); + })( + (CompletionResolveRequest = + exports.CompletionResolveRequest || + (exports.CompletionResolveRequest = {})) + ); + let HoverRequest; + (function (HoverRequest2) { + HoverRequest2.method = 'textDocument/hover'; + HoverRequest2.type = new messages_1.ProtocolRequestType( + HoverRequest2.method + ); + })((HoverRequest = exports.HoverRequest || (exports.HoverRequest = {}))); + let SignatureHelpTriggerKind; + (function (SignatureHelpTriggerKind2) { + SignatureHelpTriggerKind2.Invoked = 1; + SignatureHelpTriggerKind2.TriggerCharacter = 2; + SignatureHelpTriggerKind2.ContentChange = 3; + })( + (SignatureHelpTriggerKind = + exports.SignatureHelpTriggerKind || + (exports.SignatureHelpTriggerKind = {})) + ); + let SignatureHelpRequest; + (function (SignatureHelpRequest2) { + SignatureHelpRequest2.method = 'textDocument/signatureHelp'; + SignatureHelpRequest2.type = new messages_1.ProtocolRequestType( + SignatureHelpRequest2.method + ); + })( + (SignatureHelpRequest = + exports.SignatureHelpRequest || (exports.SignatureHelpRequest = {})) + ); + let DefinitionRequest2; + (function (DefinitionRequest3) { + DefinitionRequest3.method = 'textDocument/definition'; + DefinitionRequest3.type = new messages_1.ProtocolRequestType( + DefinitionRequest3.method + ); + })( + (DefinitionRequest2 = + exports.DefinitionRequest || (exports.DefinitionRequest = {})) + ); + let ReferencesRequest2; + (function (ReferencesRequest3) { + ReferencesRequest3.method = 'textDocument/references'; + ReferencesRequest3.type = new messages_1.ProtocolRequestType( + ReferencesRequest3.method + ); + })( + (ReferencesRequest2 = + exports.ReferencesRequest || (exports.ReferencesRequest = {})) + ); + let DocumentHighlightRequest2; + (function (DocumentHighlightRequest3) { + DocumentHighlightRequest3.method = 'textDocument/documentHighlight'; + DocumentHighlightRequest3.type = new messages_1.ProtocolRequestType( + DocumentHighlightRequest3.method + ); + })( + (DocumentHighlightRequest2 = + exports.DocumentHighlightRequest || + (exports.DocumentHighlightRequest = {})) + ); + let DocumentSymbolRequest2; + (function (DocumentSymbolRequest3) { + DocumentSymbolRequest3.method = 'textDocument/documentSymbol'; + DocumentSymbolRequest3.type = new messages_1.ProtocolRequestType( + DocumentSymbolRequest3.method + ); + })( + (DocumentSymbolRequest2 = + exports.DocumentSymbolRequest || (exports.DocumentSymbolRequest = {})) + ); + let CodeActionRequest; + (function (CodeActionRequest2) { + CodeActionRequest2.method = 'textDocument/codeAction'; + CodeActionRequest2.type = new messages_1.ProtocolRequestType( + CodeActionRequest2.method + ); + })( + (CodeActionRequest = + exports.CodeActionRequest || (exports.CodeActionRequest = {})) + ); + let CodeActionResolveRequest; + (function (CodeActionResolveRequest2) { + CodeActionResolveRequest2.method = 'codeAction/resolve'; + CodeActionResolveRequest2.type = new messages_1.ProtocolRequestType( + CodeActionResolveRequest2.method + ); + })( + (CodeActionResolveRequest = + exports.CodeActionResolveRequest || + (exports.CodeActionResolveRequest = {})) + ); + let WorkspaceSymbolRequest2; + (function (WorkspaceSymbolRequest3) { + WorkspaceSymbolRequest3.method = 'workspace/symbol'; + WorkspaceSymbolRequest3.type = new messages_1.ProtocolRequestType( + WorkspaceSymbolRequest3.method + ); + })( + (WorkspaceSymbolRequest2 = + exports.WorkspaceSymbolRequest || + (exports.WorkspaceSymbolRequest = {})) + ); + let WorkspaceSymbolResolveRequest2; + (function (WorkspaceSymbolResolveRequest3) { + WorkspaceSymbolResolveRequest3.method = 'workspaceSymbol/resolve'; + WorkspaceSymbolResolveRequest3.type = new messages_1.ProtocolRequestType( + WorkspaceSymbolResolveRequest3.method + ); + })( + (WorkspaceSymbolResolveRequest2 = + exports.WorkspaceSymbolResolveRequest || + (exports.WorkspaceSymbolResolveRequest = {})) + ); + let CodeLensRequest; + (function (CodeLensRequest2) { + CodeLensRequest2.method = 'textDocument/codeLens'; + CodeLensRequest2.type = new messages_1.ProtocolRequestType( + CodeLensRequest2.method + ); + })( + (CodeLensRequest = + exports.CodeLensRequest || (exports.CodeLensRequest = {})) + ); + let CodeLensResolveRequest; + (function (CodeLensResolveRequest2) { + CodeLensResolveRequest2.method = 'codeLens/resolve'; + CodeLensResolveRequest2.type = new messages_1.ProtocolRequestType( + CodeLensResolveRequest2.method + ); + })( + (CodeLensResolveRequest = + exports.CodeLensResolveRequest || + (exports.CodeLensResolveRequest = {})) + ); + let CodeLensRefreshRequest; + (function (CodeLensRefreshRequest2) { + CodeLensRefreshRequest2.method = `workspace/codeLens/refresh`; + CodeLensRefreshRequest2.type = new messages_1.ProtocolRequestType0( + CodeLensRefreshRequest2.method + ); + })( + (CodeLensRefreshRequest = + exports.CodeLensRefreshRequest || + (exports.CodeLensRefreshRequest = {})) + ); + let DocumentLinkRequest; + (function (DocumentLinkRequest2) { + DocumentLinkRequest2.method = 'textDocument/documentLink'; + DocumentLinkRequest2.type = new messages_1.ProtocolRequestType( + DocumentLinkRequest2.method + ); + })( + (DocumentLinkRequest = + exports.DocumentLinkRequest || (exports.DocumentLinkRequest = {})) + ); + let DocumentLinkResolveRequest; + (function (DocumentLinkResolveRequest2) { + DocumentLinkResolveRequest2.method = 'documentLink/resolve'; + DocumentLinkResolveRequest2.type = new messages_1.ProtocolRequestType( + DocumentLinkResolveRequest2.method + ); + })( + (DocumentLinkResolveRequest = + exports.DocumentLinkResolveRequest || + (exports.DocumentLinkResolveRequest = {})) + ); + let DocumentFormattingRequest; + (function (DocumentFormattingRequest2) { + DocumentFormattingRequest2.method = 'textDocument/formatting'; + DocumentFormattingRequest2.type = new messages_1.ProtocolRequestType( + DocumentFormattingRequest2.method + ); + })( + (DocumentFormattingRequest = + exports.DocumentFormattingRequest || + (exports.DocumentFormattingRequest = {})) + ); + let DocumentRangeFormattingRequest; + (function (DocumentRangeFormattingRequest2) { + DocumentRangeFormattingRequest2.method = 'textDocument/rangeFormatting'; + DocumentRangeFormattingRequest2.type = new messages_1.ProtocolRequestType( + DocumentRangeFormattingRequest2.method + ); + })( + (DocumentRangeFormattingRequest = + exports.DocumentRangeFormattingRequest || + (exports.DocumentRangeFormattingRequest = {})) + ); + let DocumentOnTypeFormattingRequest; + (function (DocumentOnTypeFormattingRequest2) { + DocumentOnTypeFormattingRequest2.method = + 'textDocument/onTypeFormatting'; + DocumentOnTypeFormattingRequest2.type = new messages_1.ProtocolRequestType( + DocumentOnTypeFormattingRequest2.method + ); + })( + (DocumentOnTypeFormattingRequest = + exports.DocumentOnTypeFormattingRequest || + (exports.DocumentOnTypeFormattingRequest = {})) + ); + let PrepareSupportDefaultBehavior; + (function (PrepareSupportDefaultBehavior2) { + PrepareSupportDefaultBehavior2.Identifier = 1; + })( + (PrepareSupportDefaultBehavior = + exports.PrepareSupportDefaultBehavior || + (exports.PrepareSupportDefaultBehavior = {})) + ); + let RenameRequest; + (function (RenameRequest2) { + RenameRequest2.method = 'textDocument/rename'; + RenameRequest2.type = new messages_1.ProtocolRequestType( + RenameRequest2.method + ); + })( + (RenameRequest = exports.RenameRequest || (exports.RenameRequest = {})) + ); + let PrepareRenameRequest; + (function (PrepareRenameRequest2) { + PrepareRenameRequest2.method = 'textDocument/prepareRename'; + PrepareRenameRequest2.type = new messages_1.ProtocolRequestType( + PrepareRenameRequest2.method + ); + })( + (PrepareRenameRequest = + exports.PrepareRenameRequest || (exports.PrepareRenameRequest = {})) + ); + let ExecuteCommandRequest; + (function (ExecuteCommandRequest2) { + ExecuteCommandRequest2.type = new messages_1.ProtocolRequestType( + 'workspace/executeCommand' + ); + })( + (ExecuteCommandRequest = + exports.ExecuteCommandRequest || (exports.ExecuteCommandRequest = {})) + ); + let ApplyWorkspaceEditRequest; + (function (ApplyWorkspaceEditRequest2) { + ApplyWorkspaceEditRequest2.type = new messages_1.ProtocolRequestType( + 'workspace/applyEdit' + ); + })( + (ApplyWorkspaceEditRequest = + exports.ApplyWorkspaceEditRequest || + (exports.ApplyWorkspaceEditRequest = {})) + ); + }, + }); + + // server/node_modules/vscode-languageserver-protocol/lib/common/connection.js + let require_connection2 = __commonJS({ + 'server/node_modules/vscode-languageserver-protocol/lib/common/connection.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.createProtocolConnection = void 0; + let vscode_jsonrpc_1 = require_main(); + function createProtocolConnection(input, output, logger, options) { + if (vscode_jsonrpc_1.ConnectionStrategy.is(options)) { + options = { connectionStrategy: options }; + } + return (0, vscode_jsonrpc_1.createMessageConnection)( + input, + output, + logger, + options + ); + } + exports.createProtocolConnection = createProtocolConnection; + }, + }); + + // server/node_modules/vscode-languageserver-protocol/lib/common/proposed.diagnostic.js + let require_proposed_diagnostic = __commonJS({ + 'server/node_modules/vscode-languageserver-protocol/lib/common/proposed.diagnostic.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.DiagnosticRefreshRequest = exports.WorkspaceDiagnosticRequest = exports.DocumentDiagnosticRequest = exports.DocumentDiagnosticReportKind = exports.DiagnosticServerCancellationData = void 0; + let vscode_jsonrpc_1 = require_main(); + let Is = require_is2(); + let messages_1 = require_messages2(); + let DiagnosticServerCancellationData; + (function (DiagnosticServerCancellationData2) { + function is(value) { + const candidate = value; + return candidate && Is.boolean(candidate.retriggerRequest); + } + DiagnosticServerCancellationData2.is = is; + })( + (DiagnosticServerCancellationData = + exports.DiagnosticServerCancellationData || + (exports.DiagnosticServerCancellationData = {})) + ); + let DocumentDiagnosticReportKind; + (function (DocumentDiagnosticReportKind2) { + DocumentDiagnosticReportKind2['full'] = 'full'; + DocumentDiagnosticReportKind2['unChanged'] = 'unChanged'; + })( + (DocumentDiagnosticReportKind = + exports.DocumentDiagnosticReportKind || + (exports.DocumentDiagnosticReportKind = {})) + ); + let DocumentDiagnosticRequest; + (function (DocumentDiagnosticRequest2) { + DocumentDiagnosticRequest2.method = 'textDocument/diagnostic'; + DocumentDiagnosticRequest2.type = new messages_1.ProtocolRequestType( + DocumentDiagnosticRequest2.method + ); + DocumentDiagnosticRequest2.partialResult = new vscode_jsonrpc_1.ProgressType(); + })( + (DocumentDiagnosticRequest = + exports.DocumentDiagnosticRequest || + (exports.DocumentDiagnosticRequest = {})) + ); + let WorkspaceDiagnosticRequest; + (function (WorkspaceDiagnosticRequest2) { + WorkspaceDiagnosticRequest2.method = 'workspace/diagnostic'; + WorkspaceDiagnosticRequest2.type = new messages_1.ProtocolRequestType( + WorkspaceDiagnosticRequest2.method + ); + WorkspaceDiagnosticRequest2.partialResult = new vscode_jsonrpc_1.ProgressType(); + })( + (WorkspaceDiagnosticRequest = + exports.WorkspaceDiagnosticRequest || + (exports.WorkspaceDiagnosticRequest = {})) + ); + let DiagnosticRefreshRequest; + (function (DiagnosticRefreshRequest2) { + DiagnosticRefreshRequest2.method = `workspace/diagnostic/refresh`; + DiagnosticRefreshRequest2.type = new messages_1.ProtocolRequestType0( + DiagnosticRefreshRequest2.method + ); + })( + (DiagnosticRefreshRequest = + exports.DiagnosticRefreshRequest || + (exports.DiagnosticRefreshRequest = {})) + ); + }, + }); + + // server/node_modules/vscode-languageserver-protocol/lib/common/proposed.typeHierarchy.js + let require_proposed_typeHierarchy = __commonJS({ + 'server/node_modules/vscode-languageserver-protocol/lib/common/proposed.typeHierarchy.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.TypeHierarchySubtypesRequest = exports.TypeHierarchySupertypesRequest = exports.TypeHierarchyPrepareRequest = void 0; + let messages_1 = require_messages2(); + let TypeHierarchyPrepareRequest; + (function (TypeHierarchyPrepareRequest2) { + TypeHierarchyPrepareRequest2.method = + 'textDocument/prepareTypeHierarchy'; + TypeHierarchyPrepareRequest2.type = new messages_1.ProtocolRequestType( + TypeHierarchyPrepareRequest2.method + ); + })( + (TypeHierarchyPrepareRequest = + exports.TypeHierarchyPrepareRequest || + (exports.TypeHierarchyPrepareRequest = {})) + ); + let TypeHierarchySupertypesRequest; + (function (TypeHierarchySupertypesRequest2) { + TypeHierarchySupertypesRequest2.method = 'typeHierarchy/supertypes'; + TypeHierarchySupertypesRequest2.type = new messages_1.ProtocolRequestType( + TypeHierarchySupertypesRequest2.method + ); + })( + (TypeHierarchySupertypesRequest = + exports.TypeHierarchySupertypesRequest || + (exports.TypeHierarchySupertypesRequest = {})) + ); + let TypeHierarchySubtypesRequest; + (function (TypeHierarchySubtypesRequest2) { + TypeHierarchySubtypesRequest2.method = 'typeHierarchy/subtypes'; + TypeHierarchySubtypesRequest2.type = new messages_1.ProtocolRequestType( + TypeHierarchySubtypesRequest2.method + ); + })( + (TypeHierarchySubtypesRequest = + exports.TypeHierarchySubtypesRequest || + (exports.TypeHierarchySubtypesRequest = {})) + ); + }, + }); + + // server/node_modules/vscode-languageserver-protocol/lib/common/proposed.inlineValue.js + let require_proposed_inlineValue = __commonJS({ + 'server/node_modules/vscode-languageserver-protocol/lib/common/proposed.inlineValue.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.InlineValuesRefreshRequest = exports.InlineValuesRequest = void 0; + let messages_1 = require_messages2(); + let InlineValuesRequest; + (function (InlineValuesRequest2) { + InlineValuesRequest2.method = 'textDocument/inlineValues'; + InlineValuesRequest2.type = new messages_1.ProtocolRequestType( + InlineValuesRequest2.method + ); + })( + (InlineValuesRequest = + exports.InlineValuesRequest || (exports.InlineValuesRequest = {})) + ); + let InlineValuesRefreshRequest; + (function (InlineValuesRefreshRequest2) { + InlineValuesRefreshRequest2.method = `workspace/inlineValues/refresh`; + InlineValuesRefreshRequest2.type = new messages_1.ProtocolRequestType0( + InlineValuesRefreshRequest2.method + ); + })( + (InlineValuesRefreshRequest = + exports.InlineValuesRefreshRequest || + (exports.InlineValuesRefreshRequest = {})) + ); + }, + }); + + // server/node_modules/vscode-languageserver-protocol/lib/common/api.js + let require_api2 = __commonJS({ + 'server/node_modules/vscode-languageserver-protocol/lib/common/api.js'( + exports + ) { + 'use strict'; + let __createBinding = + (exports && exports.__createBinding) || + (Object.create + ? function (o, m, k, k2) { + if (k2 === void 0) { + k2 = k; + } + Object.defineProperty(o, k2, { + enumerable: true, + get: function () { + return m[k]; + }, + }); + } + : function (o, m, k, k2) { + if (k2 === void 0) { + k2 = k; + } + o[k2] = m[k]; + }); + let __exportStar = + (exports && exports.__exportStar) || + function (m, exports2) { + for (let p in m) { + if ( + p !== 'default' && + !Object.prototype.hasOwnProperty.call(exports2, p) + ) { + __createBinding(exports2, m, p); + } + } + }; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.Proposed = exports.LSPErrorCodes = exports.createProtocolConnection = void 0; + __exportStar(require_main(), exports); + __exportStar(require_main2(), exports); + __exportStar(require_messages2(), exports); + __exportStar(require_protocol(), exports); + let connection_1 = require_connection2(); + Object.defineProperty(exports, 'createProtocolConnection', { + enumerable: true, + get: function () { + return connection_1.createProtocolConnection; + }, + }); + let LSPErrorCodes; + (function (LSPErrorCodes2) { + LSPErrorCodes2.lspReservedErrorRangeStart = -32899; + LSPErrorCodes2.RequestFailed = -32803; + LSPErrorCodes2.ServerCancelled = -32802; + LSPErrorCodes2.ContentModified = -32801; + LSPErrorCodes2.RequestCancelled = -32800; + LSPErrorCodes2.lspReservedErrorRangeEnd = -32800; + })( + (LSPErrorCodes = exports.LSPErrorCodes || (exports.LSPErrorCodes = {})) + ); + let diag = require_proposed_diagnostic(); + let typeh = require_proposed_typeHierarchy(); + let iv = require_proposed_inlineValue(); + let Proposed; + (function (Proposed2) { + Proposed2.DiagnosticServerCancellationData = + diag.DiagnosticServerCancellationData; + Proposed2.DocumentDiagnosticReportKind = + diag.DocumentDiagnosticReportKind; + Proposed2.DocumentDiagnosticRequest = diag.DocumentDiagnosticRequest; + Proposed2.WorkspaceDiagnosticRequest = diag.WorkspaceDiagnosticRequest; + Proposed2.DiagnosticRefreshRequest = diag.DiagnosticRefreshRequest; + Proposed2.TypeHierarchyPrepareRequest = + typeh.TypeHierarchyPrepareRequest; + Proposed2.TypeHierarchySupertypesRequest = + typeh.TypeHierarchySupertypesRequest; + Proposed2.TypeHierarchySubtypesRequest = + typeh.TypeHierarchySubtypesRequest; + Proposed2.InlineValuesRequest = iv.InlineValuesRequest; + Proposed2.InlineValuesRefreshRequest = iv.InlineValuesRefreshRequest; + })((Proposed = exports.Proposed || (exports.Proposed = {}))); + }, + }); + + // server/node_modules/vscode-languageserver-protocol/lib/browser/main.js + let require_main3 = __commonJS({ + 'server/node_modules/vscode-languageserver-protocol/lib/browser/main.js'( + exports + ) { + 'use strict'; + let __createBinding = + (exports && exports.__createBinding) || + (Object.create + ? function (o, m, k, k2) { + if (k2 === void 0) { + k2 = k; + } + Object.defineProperty(o, k2, { + enumerable: true, + get: function () { + return m[k]; + }, + }); + } + : function (o, m, k, k2) { + if (k2 === void 0) { + k2 = k; + } + o[k2] = m[k]; + }); + let __exportStar = + (exports && exports.__exportStar) || + function (m, exports2) { + for (let p in m) { + if ( + p !== 'default' && + !Object.prototype.hasOwnProperty.call(exports2, p) + ) { + __createBinding(exports2, m, p); + } + } + }; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.createProtocolConnection = void 0; + let browser_1 = require_browser(); + __exportStar(require_browser(), exports); + __exportStar(require_api2(), exports); + function createProtocolConnection(reader, writer, logger, options) { + return (0, browser_1.createMessageConnection)( + reader, + writer, + logger, + options + ); + } + exports.createProtocolConnection = createProtocolConnection; + }, + }); + + // server/node_modules/vscode-languageserver/lib/common/utils/is.js + let require_is3 = __commonJS({ + 'server/node_modules/vscode-languageserver/lib/common/utils/is.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.thenable = exports.typedArray = exports.stringArray = exports.array = exports.func = exports.error = exports.number = exports.string = exports.boolean = void 0; + function boolean(value) { + return value === true || value === false; + } + exports.boolean = boolean; + function string(value) { + return typeof value === 'string' || value instanceof String; + } + exports.string = string; + function number(value) { + return typeof value === 'number' || value instanceof Number; + } + exports.number = number; + function error(value) { + return value instanceof Error; + } + exports.error = error; + function func(value) { + return typeof value === 'function'; + } + exports.func = func; + function array(value) { + return Array.isArray(value); + } + exports.array = array; + function stringArray(value) { + return array(value) && value.every((elem) => string(elem)); + } + exports.stringArray = stringArray; + function typedArray(value, check) { + return Array.isArray(value) && value.every(check); + } + exports.typedArray = typedArray; + function thenable(value) { + return value && func(value.then); + } + exports.thenable = thenable; + }, + }); + + // server/node_modules/vscode-languageserver/lib/common/utils/uuid.js + let require_uuid = __commonJS({ + 'server/node_modules/vscode-languageserver/lib/common/utils/uuid.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.generateUuid = exports.parse = exports.isUUID = exports.v4 = exports.empty = void 0; + let ValueUUID = class { + constructor(_value) { + this._value = _value; + } + asHex() { + return this._value; + } + equals(other) { + return this.asHex() === other.asHex(); + } + }; + var V4UUID = class extends ValueUUID { + constructor() { + super( + [ + V4UUID._randomHex(), + V4UUID._randomHex(), + V4UUID._randomHex(), + V4UUID._randomHex(), + V4UUID._randomHex(), + V4UUID._randomHex(), + V4UUID._randomHex(), + V4UUID._randomHex(), + '-', + V4UUID._randomHex(), + V4UUID._randomHex(), + V4UUID._randomHex(), + V4UUID._randomHex(), + '-', + '4', + V4UUID._randomHex(), + V4UUID._randomHex(), + V4UUID._randomHex(), + '-', + V4UUID._oneOf(V4UUID._timeHighBits), + V4UUID._randomHex(), + V4UUID._randomHex(), + V4UUID._randomHex(), + '-', + V4UUID._randomHex(), + V4UUID._randomHex(), + V4UUID._randomHex(), + V4UUID._randomHex(), + V4UUID._randomHex(), + V4UUID._randomHex(), + V4UUID._randomHex(), + V4UUID._randomHex(), + V4UUID._randomHex(), + V4UUID._randomHex(), + V4UUID._randomHex(), + V4UUID._randomHex(), + ].join('') + ); + } + static _oneOf(array) { + return array[Math.floor(array.length * Math.random())]; + } + static _randomHex() { + return V4UUID._oneOf(V4UUID._chars); + } + }; + V4UUID._chars = [ + '0', + '1', + '2', + '3', + '4', + '5', + '6', + '6', + '7', + '8', + '9', + 'a', + 'b', + 'c', + 'd', + 'e', + 'f', + ]; + V4UUID._timeHighBits = ['8', '9', 'a', 'b']; + exports.empty = new ValueUUID('00000000-0000-0000-0000-000000000000'); + function v4() { + return new V4UUID(); + } + exports.v4 = v4; + let _UUIDPattern = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i; + function isUUID(value) { + return _UUIDPattern.test(value); + } + exports.isUUID = isUUID; + function parse(value) { + if (!isUUID(value)) { + throw new Error('invalid uuid'); + } + return new ValueUUID(value); + } + exports.parse = parse; + function generateUuid() { + return v4().asHex(); + } + exports.generateUuid = generateUuid; + }, + }); + + // server/node_modules/vscode-languageserver/lib/common/progress.js + let require_progress = __commonJS({ + 'server/node_modules/vscode-languageserver/lib/common/progress.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.attachPartialResult = exports.ProgressFeature = exports.attachWorkDone = void 0; + let vscode_languageserver_protocol_1 = require_main3(); + let uuid_1 = require_uuid(); + var WorkDoneProgressReporterImpl = class { + constructor(_connection, _token) { + this._connection = _connection; + this._token = _token; + WorkDoneProgressReporterImpl.Instances.set(this._token, this); + } + begin(title, percentage, message, cancellable) { + let param = { + kind: 'begin', + title, + percentage, + message, + cancellable, + }; + this._connection.sendProgress( + vscode_languageserver_protocol_1.WorkDoneProgress.type, + this._token, + param + ); + } + report(arg0, arg1) { + let param = { + kind: 'report', + }; + if (typeof arg0 === 'number') { + param.percentage = arg0; + if (arg1 !== void 0) { + param.message = arg1; + } + } else { + param.message = arg0; + } + this._connection.sendProgress( + vscode_languageserver_protocol_1.WorkDoneProgress.type, + this._token, + param + ); + } + done() { + WorkDoneProgressReporterImpl.Instances.delete(this._token); + this._connection.sendProgress( + vscode_languageserver_protocol_1.WorkDoneProgress.type, + this._token, + { kind: 'end' } + ); + } + }; + WorkDoneProgressReporterImpl.Instances = new Map(); + let WorkDoneProgressServerReporterImpl = class extends WorkDoneProgressReporterImpl { + constructor(connection2, token) { + super(connection2, token); + this._source = new vscode_languageserver_protocol_1.CancellationTokenSource(); + } + get token() { + return this._source.token; + } + done() { + this._source.dispose(); + super.done(); + } + cancel() { + this._source.cancel(); + } + }; + let NullProgressReporter = class { + constructor() {} + begin() {} + report() {} + done() {} + }; + let NullProgressServerReporter = class extends NullProgressReporter { + constructor() { + super(); + this._source = new vscode_languageserver_protocol_1.CancellationTokenSource(); + } + get token() { + return this._source.token; + } + done() { + this._source.dispose(); + } + cancel() { + this._source.cancel(); + } + }; + function attachWorkDone(connection2, params) { + if (params === void 0 || params.workDoneToken === void 0) { + return new NullProgressReporter(); + } + const token = params.workDoneToken; + delete params.workDoneToken; + return new WorkDoneProgressReporterImpl(connection2, token); + } + exports.attachWorkDone = attachWorkDone; + let ProgressFeature = (Base) => { + return class extends Base { + constructor() { + super(); + this._progressSupported = false; + } + initialize(capabilities) { + super.initialize(capabilities); + if (capabilities?.window?.workDoneProgress === true) { + this._progressSupported = true; + this.connection.onNotification( + vscode_languageserver_protocol_1 + .WorkDoneProgressCancelNotification.type, + (params) => { + let progress = WorkDoneProgressReporterImpl.Instances.get( + params.token + ); + if ( + progress instanceof WorkDoneProgressServerReporterImpl || + progress instanceof NullProgressServerReporter + ) { + progress.cancel(); + } + } + ); + } + } + attachWorkDoneProgress(token) { + if (token === void 0) { + return new NullProgressReporter(); + } else { + return new WorkDoneProgressReporterImpl(this.connection, token); + } + } + createWorkDoneProgress() { + if (this._progressSupported) { + const token = (0, uuid_1.generateUuid)(); + return this.connection + .sendRequest( + vscode_languageserver_protocol_1.WorkDoneProgressCreateRequest + .type, + { token } + ) + .then(() => { + const result = new WorkDoneProgressServerReporterImpl( + this.connection, + token + ); + return result; + }); + } else { + return Promise.resolve(new NullProgressServerReporter()); + } + } + }; + }; + exports.ProgressFeature = ProgressFeature; + let ResultProgress; + (function (ResultProgress2) { + ResultProgress2.type = new vscode_languageserver_protocol_1.ProgressType(); + })(ResultProgress || (ResultProgress = {})); + let ResultProgressReporterImpl = class { + constructor(_connection, _token) { + this._connection = _connection; + this._token = _token; + } + report(data) { + this._connection.sendProgress(ResultProgress.type, this._token, data); + } + }; + function attachPartialResult(connection2, params) { + if (params === void 0 || params.partialResultToken === void 0) { + return void 0; + } + const token = params.partialResultToken; + delete params.partialResultToken; + return new ResultProgressReporterImpl(connection2, token); + } + exports.attachPartialResult = attachPartialResult; + }, + }); + + // server/node_modules/vscode-languageserver/lib/common/configuration.js + let require_configuration = __commonJS({ + 'server/node_modules/vscode-languageserver/lib/common/configuration.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.ConfigurationFeature = void 0; + let vscode_languageserver_protocol_1 = require_main3(); + let Is = require_is3(); + let ConfigurationFeature = (Base) => { + return class extends Base { + getConfiguration(arg) { + if (!arg) { + return this._getConfiguration({}); + } else if (Is.string(arg)) { + return this._getConfiguration({ section: arg }); + } else { + return this._getConfiguration(arg); + } + } + _getConfiguration(arg) { + let params = { + items: Array.isArray(arg) ? arg : [arg], + }; + return this.connection + .sendRequest( + vscode_languageserver_protocol_1.ConfigurationRequest.type, + params + ) + .then((result) => { + if (Array.isArray(result)) { + return Array.isArray(arg) ? result : result[0]; + } else { + return Array.isArray(arg) ? [] : null; + } + }); + } + }; + }; + exports.ConfigurationFeature = ConfigurationFeature; + }, + }); + + // server/node_modules/vscode-languageserver/lib/common/workspaceFolders.js + let require_workspaceFolders = __commonJS({ + 'server/node_modules/vscode-languageserver/lib/common/workspaceFolders.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.WorkspaceFoldersFeature = void 0; + let vscode_languageserver_protocol_1 = require_main3(); + let WorkspaceFoldersFeature = (Base) => { + return class extends Base { + constructor() { + super(); + this._notificationIsAutoRegistered = false; + } + initialize(capabilities) { + super.initialize(capabilities); + let workspaceCapabilities = capabilities.workspace; + if ( + workspaceCapabilities && + workspaceCapabilities.workspaceFolders + ) { + this._onDidChangeWorkspaceFolders = new vscode_languageserver_protocol_1.Emitter(); + this.connection.onNotification( + vscode_languageserver_protocol_1 + .DidChangeWorkspaceFoldersNotification.type, + (params) => { + this._onDidChangeWorkspaceFolders.fire(params.event); + } + ); + } + } + fillServerCapabilities(capabilities) { + super.fillServerCapabilities(capabilities); + const changeNotifications = + capabilities.workspace?.workspaceFolders?.changeNotifications; + this._notificationIsAutoRegistered = + changeNotifications === true || + typeof changeNotifications === 'string'; + } + getWorkspaceFolders() { + return this.connection.sendRequest( + vscode_languageserver_protocol_1.WorkspaceFoldersRequest.type + ); + } + get onDidChangeWorkspaceFolders() { + if (!this._onDidChangeWorkspaceFolders) { + throw new Error( + "Client doesn't support sending workspace folder change events." + ); + } + if (!this._notificationIsAutoRegistered && !this._unregistration) { + this._unregistration = this.connection.client.register( + vscode_languageserver_protocol_1 + .DidChangeWorkspaceFoldersNotification.type + ); + } + return this._onDidChangeWorkspaceFolders.event; + } + }; + }; + exports.WorkspaceFoldersFeature = WorkspaceFoldersFeature; + }, + }); + + // server/node_modules/vscode-languageserver/lib/common/callHierarchy.js + let require_callHierarchy = __commonJS({ + 'server/node_modules/vscode-languageserver/lib/common/callHierarchy.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.CallHierarchyFeature = void 0; + let vscode_languageserver_protocol_1 = require_main3(); + let CallHierarchyFeature = (Base) => { + return class extends Base { + get callHierarchy() { + return { + onPrepare: (handler) => { + this.connection.onRequest( + vscode_languageserver_protocol_1.CallHierarchyPrepareRequest + .type, + (params, cancel) => { + return handler( + params, + cancel, + this.attachWorkDoneProgress(params), + void 0 + ); + } + ); + }, + onIncomingCalls: (handler) => { + const type = + vscode_languageserver_protocol_1 + .CallHierarchyIncomingCallsRequest.type; + this.connection.onRequest(type, (params, cancel) => { + return handler( + params, + cancel, + this.attachWorkDoneProgress(params), + this.attachPartialResultProgress(type, params) + ); + }); + }, + onOutgoingCalls: (handler) => { + const type = + vscode_languageserver_protocol_1 + .CallHierarchyOutgoingCallsRequest.type; + this.connection.onRequest(type, (params, cancel) => { + return handler( + params, + cancel, + this.attachWorkDoneProgress(params), + this.attachPartialResultProgress(type, params) + ); + }); + }, + }; + } + }; + }; + exports.CallHierarchyFeature = CallHierarchyFeature; + }, + }); + + // server/node_modules/vscode-languageserver/lib/common/semanticTokens.js + let require_semanticTokens = __commonJS({ + 'server/node_modules/vscode-languageserver/lib/common/semanticTokens.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.SemanticTokensBuilder = exports.SemanticTokensDiff = exports.SemanticTokensFeature = void 0; + let vscode_languageserver_protocol_1 = require_main3(); + let SemanticTokensFeature = (Base) => { + return class extends Base { + get semanticTokens() { + return { + refresh: () => { + return this.connection.sendRequest( + vscode_languageserver_protocol_1.SemanticTokensRefreshRequest + .type + ); + }, + on: (handler) => { + const type = + vscode_languageserver_protocol_1.SemanticTokensRequest.type; + this.connection.onRequest(type, (params, cancel) => { + return handler( + params, + cancel, + this.attachWorkDoneProgress(params), + this.attachPartialResultProgress(type, params) + ); + }); + }, + onDelta: (handler) => { + const type = + vscode_languageserver_protocol_1.SemanticTokensDeltaRequest + .type; + this.connection.onRequest(type, (params, cancel) => { + return handler( + params, + cancel, + this.attachWorkDoneProgress(params), + this.attachPartialResultProgress(type, params) + ); + }); + }, + onRange: (handler) => { + const type = + vscode_languageserver_protocol_1.SemanticTokensRangeRequest + .type; + this.connection.onRequest(type, (params, cancel) => { + return handler( + params, + cancel, + this.attachWorkDoneProgress(params), + this.attachPartialResultProgress(type, params) + ); + }); + }, + }; + } + }; + }; + exports.SemanticTokensFeature = SemanticTokensFeature; + let SemanticTokensDiff = class { + constructor(originalSequence, modifiedSequence) { + this.originalSequence = originalSequence; + this.modifiedSequence = modifiedSequence; + } + computeDiff() { + const originalLength = this.originalSequence.length; + const modifiedLength = this.modifiedSequence.length; + let startIndex = 0; + while ( + startIndex < modifiedLength && + startIndex < originalLength && + this.originalSequence[startIndex] === + this.modifiedSequence[startIndex] + ) { + startIndex++; + } + if (startIndex < modifiedLength && startIndex < originalLength) { + let originalEndIndex = originalLength - 1; + let modifiedEndIndex = modifiedLength - 1; + while ( + originalEndIndex >= startIndex && + modifiedEndIndex >= startIndex && + this.originalSequence[originalEndIndex] === + this.modifiedSequence[modifiedEndIndex] + ) { + originalEndIndex--; + modifiedEndIndex--; + } + if ( + originalEndIndex < startIndex || + modifiedEndIndex < startIndex + ) { + originalEndIndex++; + modifiedEndIndex++; + } + const deleteCount = originalEndIndex - startIndex + 1; + const newData = this.modifiedSequence.slice( + startIndex, + modifiedEndIndex + 1 + ); + if ( + newData.length === 1 && + newData[0] === this.originalSequence[originalEndIndex] + ) { + return [{ start: startIndex, deleteCount: deleteCount - 1 }]; + } else { + return [{ start: startIndex, deleteCount, data: newData }]; + } + } else if (startIndex < modifiedLength) { + return [ + { + start: startIndex, + deleteCount: 0, + data: this.modifiedSequence.slice(startIndex), + }, + ]; + } else if (startIndex < originalLength) { + return [ + { start: startIndex, deleteCount: originalLength - startIndex }, + ]; + } else { + return []; + } + } + }; + exports.SemanticTokensDiff = SemanticTokensDiff; + let SemanticTokensBuilder = class { + constructor() { + this._prevData = void 0; + this.initialize(); + } + initialize() { + this._id = Date.now(); + this._prevLine = 0; + this._prevChar = 0; + this._data = []; + this._dataLen = 0; + } + push(line, char, length, tokenType, tokenModifiers) { + let pushLine = line; + let pushChar = char; + if (this._dataLen > 0) { + pushLine -= this._prevLine; + if (pushLine === 0) { + pushChar -= this._prevChar; + } + } + this._data[this._dataLen++] = pushLine; + this._data[this._dataLen++] = pushChar; + this._data[this._dataLen++] = length; + this._data[this._dataLen++] = tokenType; + this._data[this._dataLen++] = tokenModifiers; + this._prevLine = line; + this._prevChar = char; + } + get id() { + return this._id.toString(); + } + previousResult(id) { + if (this.id === id) { + this._prevData = this._data; + } + this.initialize(); + } + build() { + this._prevData = void 0; + return { + resultId: this.id, + data: this._data, + }; + } + canBuildEdits() { + return this._prevData !== void 0; + } + buildEdits() { + if (this._prevData !== void 0) { + return { + resultId: this.id, + edits: new SemanticTokensDiff( + this._prevData, + this._data + ).computeDiff(), + }; + } else { + return this.build(); + } + } + }; + exports.SemanticTokensBuilder = SemanticTokensBuilder; + }, + }); + + // server/node_modules/vscode-languageserver/lib/common/showDocument.js + let require_showDocument = __commonJS({ + 'server/node_modules/vscode-languageserver/lib/common/showDocument.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.ShowDocumentFeature = void 0; + let vscode_languageserver_protocol_1 = require_main3(); + let ShowDocumentFeature = (Base) => { + return class extends Base { + showDocument(params) { + return this.connection.sendRequest( + vscode_languageserver_protocol_1.ShowDocumentRequest.type, + params + ); + } + }; + }; + exports.ShowDocumentFeature = ShowDocumentFeature; + }, + }); + + // server/node_modules/vscode-languageserver/lib/common/fileOperations.js + let require_fileOperations = __commonJS({ + 'server/node_modules/vscode-languageserver/lib/common/fileOperations.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.FileOperationsFeature = void 0; + let vscode_languageserver_protocol_1 = require_main3(); + let FileOperationsFeature = (Base) => { + return class extends Base { + onDidCreateFiles(handler) { + this.connection.onNotification( + vscode_languageserver_protocol_1.DidCreateFilesNotification.type, + (params) => { + handler(params); + } + ); + } + onDidRenameFiles(handler) { + this.connection.onNotification( + vscode_languageserver_protocol_1.DidRenameFilesNotification.type, + (params) => { + handler(params); + } + ); + } + onDidDeleteFiles(handler) { + this.connection.onNotification( + vscode_languageserver_protocol_1.DidDeleteFilesNotification.type, + (params) => { + handler(params); + } + ); + } + onWillCreateFiles(handler) { + return this.connection.onRequest( + vscode_languageserver_protocol_1.WillCreateFilesRequest.type, + (params, cancel) => { + return handler(params, cancel); + } + ); + } + onWillRenameFiles(handler) { + return this.connection.onRequest( + vscode_languageserver_protocol_1.WillRenameFilesRequest.type, + (params, cancel) => { + return handler(params, cancel); + } + ); + } + onWillDeleteFiles(handler) { + return this.connection.onRequest( + vscode_languageserver_protocol_1.WillDeleteFilesRequest.type, + (params, cancel) => { + return handler(params, cancel); + } + ); + } + }; + }; + exports.FileOperationsFeature = FileOperationsFeature; + }, + }); + + // server/node_modules/vscode-languageserver/lib/common/linkedEditingRange.js + let require_linkedEditingRange = __commonJS({ + 'server/node_modules/vscode-languageserver/lib/common/linkedEditingRange.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.LinkedEditingRangeFeature = void 0; + let vscode_languageserver_protocol_1 = require_main3(); + let LinkedEditingRangeFeature = (Base) => { + return class extends Base { + onLinkedEditingRange(handler) { + this.connection.onRequest( + vscode_languageserver_protocol_1.LinkedEditingRangeRequest.type, + (params, cancel) => { + return handler( + params, + cancel, + this.attachWorkDoneProgress(params), + void 0 + ); + } + ); + } + }; + }; + exports.LinkedEditingRangeFeature = LinkedEditingRangeFeature; + }, + }); + + // server/node_modules/vscode-languageserver/lib/common/moniker.js + let require_moniker = __commonJS({ + 'server/node_modules/vscode-languageserver/lib/common/moniker.js'(exports) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.MonikerFeature = void 0; + let vscode_languageserver_protocol_1 = require_main3(); + let MonikerFeature = (Base) => { + return class extends Base { + get moniker() { + return { + on: (handler) => { + const type = + vscode_languageserver_protocol_1.MonikerRequest.type; + this.connection.onRequest(type, (params, cancel) => { + return handler( + params, + cancel, + this.attachWorkDoneProgress(params), + this.attachPartialResultProgress(type, params) + ); + }); + }, + }; + } + }; + }; + exports.MonikerFeature = MonikerFeature; + }, + }); + + // server/node_modules/vscode-languageserver/lib/common/server.js + let require_server = __commonJS({ + 'server/node_modules/vscode-languageserver/lib/common/server.js'(exports) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.createConnection = exports.combineFeatures = exports.combineLanguagesFeatures = exports.combineWorkspaceFeatures = exports.combineWindowFeatures = exports.combineClientFeatures = exports.combineTracerFeatures = exports.combineTelemetryFeatures = exports.combineConsoleFeatures = exports._LanguagesImpl = exports.BulkUnregistration = exports.BulkRegistration = exports.ErrorMessageTracker = exports.TextDocuments = void 0; + let vscode_languageserver_protocol_1 = require_main3(); + let Is = require_is3(); + let UUID = require_uuid(); + let progress_1 = require_progress(); + let configuration_1 = require_configuration(); + let workspaceFolders_1 = require_workspaceFolders(); + let callHierarchy_1 = require_callHierarchy(); + let semanticTokens_1 = require_semanticTokens(); + let showDocument_1 = require_showDocument(); + let fileOperations_1 = require_fileOperations(); + let linkedEditingRange_1 = require_linkedEditingRange(); + let moniker_1 = require_moniker(); + function null2Undefined(value) { + if (value === null) { + return void 0; + } + return value; + } + let TextDocuments2 = class { + constructor(configuration) { + this._documents = Object.create(null); + this._configuration = configuration; + this._onDidChangeContent = new vscode_languageserver_protocol_1.Emitter(); + this._onDidOpen = new vscode_languageserver_protocol_1.Emitter(); + this._onDidClose = new vscode_languageserver_protocol_1.Emitter(); + this._onDidSave = new vscode_languageserver_protocol_1.Emitter(); + this._onWillSave = new vscode_languageserver_protocol_1.Emitter(); + } + get onDidChangeContent() { + return this._onDidChangeContent.event; + } + get onDidOpen() { + return this._onDidOpen.event; + } + get onWillSave() { + return this._onWillSave.event; + } + onWillSaveWaitUntil(handler) { + this._willSaveWaitUntil = handler; + } + get onDidSave() { + return this._onDidSave.event; + } + get onDidClose() { + return this._onDidClose.event; + } + get(uri) { + return this._documents[uri]; + } + all() { + return Object.keys(this._documents).map( + (key) => this._documents[key] + ); + } + keys() { + return Object.keys(this._documents); + } + listen(connection2) { + connection2.__textDocumentSync = + vscode_languageserver_protocol_1.TextDocumentSyncKind.Full; + connection2.onDidOpenTextDocument((event) => { + let td = event.textDocument; + let document2 = this._configuration.create( + td.uri, + td.languageId, + td.version, + td.text + ); + this._documents[td.uri] = document2; + let toFire = Object.freeze({ document: document2 }); + this._onDidOpen.fire(toFire); + this._onDidChangeContent.fire(toFire); + }); + connection2.onDidChangeTextDocument((event) => { + let td = event.textDocument; + let changes = event.contentChanges; + if (changes.length === 0) { + return; + } + let document2 = this._documents[td.uri]; + const { version } = td; + if (version === null || version === void 0) { + throw new Error( + `Received document change event for ${td.uri} without valid version identifier` + ); + } + document2 = this._configuration.update(document2, changes, version); + this._documents[td.uri] = document2; + this._onDidChangeContent.fire( + Object.freeze({ document: document2 }) + ); + }); + connection2.onDidCloseTextDocument((event) => { + let document2 = this._documents[event.textDocument.uri]; + if (document2) { + delete this._documents[event.textDocument.uri]; + this._onDidClose.fire(Object.freeze({ document: document2 })); + } + }); + connection2.onWillSaveTextDocument((event) => { + let document2 = this._documents[event.textDocument.uri]; + if (document2) { + this._onWillSave.fire( + Object.freeze({ document: document2, reason: event.reason }) + ); + } + }); + connection2.onWillSaveTextDocumentWaitUntil((event, token) => { + let document2 = this._documents[event.textDocument.uri]; + if (document2 && this._willSaveWaitUntil) { + return this._willSaveWaitUntil( + Object.freeze({ document: document2, reason: event.reason }), + token + ); + } else { + return []; + } + }); + connection2.onDidSaveTextDocument((event) => { + let document2 = this._documents[event.textDocument.uri]; + if (document2) { + this._onDidSave.fire(Object.freeze({ document: document2 })); + } + }); + } + }; + exports.TextDocuments = TextDocuments2; + let ErrorMessageTracker = class { + constructor() { + this._messages = Object.create(null); + } + add(message) { + let count = this._messages[message]; + if (!count) { + count = 0; + } + count++; + this._messages[message] = count; + } + sendErrors(connection2) { + Object.keys(this._messages).forEach((message) => { + connection2.window.showErrorMessage(message); + }); + } + }; + exports.ErrorMessageTracker = ErrorMessageTracker; + let RemoteConsoleImpl = class { + constructor() {} + rawAttach(connection2) { + this._rawConnection = connection2; + } + attach(connection2) { + this._connection = connection2; + } + get connection() { + if (!this._connection) { + throw new Error('Remote is not attached to a connection yet.'); + } + return this._connection; + } + fillServerCapabilities(_capabilities) {} + initialize(_capabilities) {} + error(message) { + this.send( + vscode_languageserver_protocol_1.MessageType.Error, + message + ); + } + warn(message) { + this.send( + vscode_languageserver_protocol_1.MessageType.Warning, + message + ); + } + info(message) { + this.send(vscode_languageserver_protocol_1.MessageType.Info, message); + } + log(message) { + this.send(vscode_languageserver_protocol_1.MessageType.Log, message); + } + send(type, message) { + if (this._rawConnection) { + this._rawConnection + .sendNotification( + vscode_languageserver_protocol_1.LogMessageNotification.type, + { type, message } + ) + .catch(() => { + (0, vscode_languageserver_protocol_1.RAL)().console.error( + `Sending log message failed` + ); + }); + } + } + }; + let _RemoteWindowImpl = class { + constructor() {} + attach(connection2) { + this._connection = connection2; + } + get connection() { + if (!this._connection) { + throw new Error('Remote is not attached to a connection yet.'); + } + return this._connection; + } + initialize(_capabilities) {} + fillServerCapabilities(_capabilities) {} + showErrorMessage(message, ...actions) { + let params = { + type: vscode_languageserver_protocol_1.MessageType.Error, + message, + actions, + }; + return this.connection + .sendRequest( + vscode_languageserver_protocol_1.ShowMessageRequest.type, + params + ) + .then(null2Undefined); + } + showWarningMessage(message, ...actions) { + let params = { + type: vscode_languageserver_protocol_1.MessageType.Warning, + message, + actions, + }; + return this.connection + .sendRequest( + vscode_languageserver_protocol_1.ShowMessageRequest.type, + params + ) + .then(null2Undefined); + } + showInformationMessage(message, ...actions) { + let params = { + type: vscode_languageserver_protocol_1.MessageType.Info, + message, + actions, + }; + return this.connection + .sendRequest( + vscode_languageserver_protocol_1.ShowMessageRequest.type, + params + ) + .then(null2Undefined); + } + }; + let RemoteWindowImpl = (0, showDocument_1.ShowDocumentFeature)( + (0, progress_1.ProgressFeature)(_RemoteWindowImpl) + ); + let BulkRegistration; + (function (BulkRegistration2) { + function create() { + return new BulkRegistrationImpl(); + } + BulkRegistration2.create = create; + })( + (BulkRegistration = + exports.BulkRegistration || (exports.BulkRegistration = {})) + ); + var BulkRegistrationImpl = class { + constructor() { + this._registrations = []; + this._registered = new Set(); + } + add(type, registerOptions) { + const method = Is.string(type) ? type : type.method; + if (this._registered.has(method)) { + throw new Error(`${method} is already added to this registration`); + } + const id = UUID.generateUuid(); + this._registrations.push({ + id, + method, + registerOptions: registerOptions || {}, + }); + this._registered.add(method); + } + asRegistrationParams() { + return { + registrations: this._registrations, + }; + } + }; + let BulkUnregistration; + (function (BulkUnregistration2) { + function create() { + return new BulkUnregistrationImpl(void 0, []); + } + BulkUnregistration2.create = create; + })( + (BulkUnregistration = + exports.BulkUnregistration || (exports.BulkUnregistration = {})) + ); + var BulkUnregistrationImpl = class { + constructor(_connection, unregistrations) { + this._connection = _connection; + this._unregistrations = new Map(); + unregistrations.forEach((unregistration) => { + this._unregistrations.set(unregistration.method, unregistration); + }); + } + get isAttached() { + return !!this._connection; + } + attach(connection2) { + this._connection = connection2; + } + add(unregistration) { + this._unregistrations.set(unregistration.method, unregistration); + } + dispose() { + let unregistrations = []; + for (let unregistration of this._unregistrations.values()) { + unregistrations.push(unregistration); + } + let params = { + unregisterations: unregistrations, + }; + this._connection + .sendRequest( + vscode_languageserver_protocol_1.UnregistrationRequest.type, + params + ) + .catch(() => { + this._connection.console.info(`Bulk unregistration failed.`); + }); + } + disposeSingle(arg) { + const method = Is.string(arg) ? arg : arg.method; + const unregistration = this._unregistrations.get(method); + if (!unregistration) { + return false; + } + let params = { + unregisterations: [unregistration], + }; + this._connection + .sendRequest( + vscode_languageserver_protocol_1.UnregistrationRequest.type, + params + ) + .then( + () => { + this._unregistrations.delete(method); + }, + (_error) => { + this._connection.console.info( + `Un-registering request handler for ${unregistration.id} failed.` + ); + } + ); + return true; + } + }; + let RemoteClientImpl = class { + attach(connection2) { + this._connection = connection2; + } + get connection() { + if (!this._connection) { + throw new Error('Remote is not attached to a connection yet.'); + } + return this._connection; + } + initialize(_capabilities) {} + fillServerCapabilities(_capabilities) {} + register(typeOrRegistrations, registerOptionsOrType, registerOptions) { + if (typeOrRegistrations instanceof BulkRegistrationImpl) { + return this.registerMany(typeOrRegistrations); + } else if (typeOrRegistrations instanceof BulkUnregistrationImpl) { + return this.registerSingle1( + typeOrRegistrations, + registerOptionsOrType, + registerOptions + ); + } else { + return this.registerSingle2( + typeOrRegistrations, + registerOptionsOrType + ); + } + } + registerSingle1(unregistration, type, registerOptions) { + const method = Is.string(type) ? type : type.method; + const id = UUID.generateUuid(); + let params = { + registrations: [ + { id, method, registerOptions: registerOptions || {} }, + ], + }; + if (!unregistration.isAttached) { + unregistration.attach(this.connection); + } + return this.connection + .sendRequest( + vscode_languageserver_protocol_1.RegistrationRequest.type, + params + ) + .then( + (_result) => { + unregistration.add({ id, method }); + return unregistration; + }, + (_error) => { + this.connection.console.info( + `Registering request handler for ${method} failed.` + ); + return Promise.reject(_error); + } + ); + } + registerSingle2(type, registerOptions) { + const method = Is.string(type) ? type : type.method; + const id = UUID.generateUuid(); + let params = { + registrations: [ + { id, method, registerOptions: registerOptions || {} }, + ], + }; + return this.connection + .sendRequest( + vscode_languageserver_protocol_1.RegistrationRequest.type, + params + ) + .then( + (_result) => { + return vscode_languageserver_protocol_1.Disposable.create( + () => { + this.unregisterSingle(id, method).catch(() => { + this.connection.console.info( + `Un-registering capability with id ${id} failed.` + ); + }); + } + ); + }, + (_error) => { + this.connection.console.info( + `Registering request handler for ${method} failed.` + ); + return Promise.reject(_error); + } + ); + } + unregisterSingle(id, method) { + let params = { + unregisterations: [{ id, method }], + }; + return this.connection + .sendRequest( + vscode_languageserver_protocol_1.UnregistrationRequest.type, + params + ) + .catch(() => { + this.connection.console.info( + `Un-registering request handler for ${id} failed.` + ); + }); + } + registerMany(registrations) { + let params = registrations.asRegistrationParams(); + return this.connection + .sendRequest( + vscode_languageserver_protocol_1.RegistrationRequest.type, + params + ) + .then( + () => { + return new BulkUnregistrationImpl( + this._connection, + params.registrations.map((registration) => { + return { id: registration.id, method: registration.method }; + }) + ); + }, + (_error) => { + this.connection.console.info(`Bulk registration failed.`); + return Promise.reject(_error); + } + ); + } + }; + let _RemoteWorkspaceImpl = class { + constructor() {} + attach(connection2) { + this._connection = connection2; + } + get connection() { + if (!this._connection) { + throw new Error('Remote is not attached to a connection yet.'); + } + return this._connection; + } + initialize(_capabilities) {} + fillServerCapabilities(_capabilities) {} + applyEdit(paramOrEdit) { + function isApplyWorkspaceEditParams(value) { + return value && !!value.edit; + } + let params = isApplyWorkspaceEditParams(paramOrEdit) + ? paramOrEdit + : { edit: paramOrEdit }; + return this.connection.sendRequest( + vscode_languageserver_protocol_1.ApplyWorkspaceEditRequest.type, + params + ); + } + }; + let RemoteWorkspaceImpl = (0, fileOperations_1.FileOperationsFeature)( + (0, workspaceFolders_1.WorkspaceFoldersFeature)( + (0, configuration_1.ConfigurationFeature)(_RemoteWorkspaceImpl) + ) + ); + let TracerImpl = class { + constructor() { + this._trace = vscode_languageserver_protocol_1.Trace.Off; + } + attach(connection2) { + this._connection = connection2; + } + get connection() { + if (!this._connection) { + throw new Error('Remote is not attached to a connection yet.'); + } + return this._connection; + } + initialize(_capabilities) {} + fillServerCapabilities(_capabilities) {} + set trace(value) { + this._trace = value; + } + log(message, verbose) { + if (this._trace === vscode_languageserver_protocol_1.Trace.Off) { + return; + } + this.connection.sendNotification( + vscode_languageserver_protocol_1.LogTraceNotification.type, + { + message, + verbose: + this._trace === vscode_languageserver_protocol_1.Trace.Verbose + ? verbose + : void 0, + } + ); + } + }; + let TelemetryImpl = class { + constructor() {} + attach(connection2) { + this._connection = connection2; + } + get connection() { + if (!this._connection) { + throw new Error('Remote is not attached to a connection yet.'); + } + return this._connection; + } + initialize(_capabilities) {} + fillServerCapabilities(_capabilities) {} + logEvent(data) { + this.connection.sendNotification( + vscode_languageserver_protocol_1.TelemetryEventNotification.type, + data + ); + } + }; + let _LanguagesImpl = class { + constructor() {} + attach(connection2) { + this._connection = connection2; + } + get connection() { + if (!this._connection) { + throw new Error('Remote is not attached to a connection yet.'); + } + return this._connection; + } + initialize(_capabilities) {} + fillServerCapabilities(_capabilities) {} + attachWorkDoneProgress(params) { + return (0, progress_1.attachWorkDone)(this.connection, params); + } + attachPartialResultProgress(_type, params) { + return (0, progress_1.attachPartialResult)(this.connection, params); + } + }; + exports._LanguagesImpl = _LanguagesImpl; + let LanguagesImpl = (0, moniker_1.MonikerFeature)( + (0, linkedEditingRange_1.LinkedEditingRangeFeature)( + (0, semanticTokens_1.SemanticTokensFeature)( + (0, callHierarchy_1.CallHierarchyFeature)(_LanguagesImpl) + ) + ) + ); + function combineConsoleFeatures(one, two) { + return function (Base) { + return two(one(Base)); + }; + } + exports.combineConsoleFeatures = combineConsoleFeatures; + function combineTelemetryFeatures(one, two) { + return function (Base) { + return two(one(Base)); + }; + } + exports.combineTelemetryFeatures = combineTelemetryFeatures; + function combineTracerFeatures(one, two) { + return function (Base) { + return two(one(Base)); + }; + } + exports.combineTracerFeatures = combineTracerFeatures; + function combineClientFeatures(one, two) { + return function (Base) { + return two(one(Base)); + }; + } + exports.combineClientFeatures = combineClientFeatures; + function combineWindowFeatures(one, two) { + return function (Base) { + return two(one(Base)); + }; + } + exports.combineWindowFeatures = combineWindowFeatures; + function combineWorkspaceFeatures(one, two) { + return function (Base) { + return two(one(Base)); + }; + } + exports.combineWorkspaceFeatures = combineWorkspaceFeatures; + function combineLanguagesFeatures(one, two) { + return function (Base) { + return two(one(Base)); + }; + } + exports.combineLanguagesFeatures = combineLanguagesFeatures; + function combineFeatures(one, two) { + function combine(one2, two2, func) { + if (one2 && two2) { + return func(one2, two2); + } else if (one2) { + return one2; + } else { + return two2; + } + } + let result = { + __brand: 'features', + console: combine(one.console, two.console, combineConsoleFeatures), + tracer: combine(one.tracer, two.tracer, combineTracerFeatures), + telemetry: combine( + one.telemetry, + two.telemetry, + combineTelemetryFeatures + ), + client: combine(one.client, two.client, combineClientFeatures), + window: combine(one.window, two.window, combineWindowFeatures), + workspace: combine( + one.workspace, + two.workspace, + combineWorkspaceFeatures + ), + }; + return result; + } + exports.combineFeatures = combineFeatures; + function createConnection2(connectionFactory, watchDog, factories) { + const logger = + factories && factories.console + ? new (factories.console(RemoteConsoleImpl))() + : new RemoteConsoleImpl(); + const connection2 = connectionFactory(logger); + logger.rawAttach(connection2); + const tracer = + factories && factories.tracer + ? new (factories.tracer(TracerImpl))() + : new TracerImpl(); + const telemetry = + factories && factories.telemetry + ? new (factories.telemetry(TelemetryImpl))() + : new TelemetryImpl(); + const client = + factories && factories.client + ? new (factories.client(RemoteClientImpl))() + : new RemoteClientImpl(); + const remoteWindow = + factories && factories.window + ? new (factories.window(RemoteWindowImpl))() + : new RemoteWindowImpl(); + const workspace = + factories && factories.workspace + ? new (factories.workspace(RemoteWorkspaceImpl))() + : new RemoteWorkspaceImpl(); + const languages = + factories && factories.languages + ? new (factories.languages(LanguagesImpl))() + : new LanguagesImpl(); + const allRemotes = [ + logger, + tracer, + telemetry, + client, + remoteWindow, + workspace, + languages, + ]; + function asPromise(value) { + if (value instanceof Promise) { + return value; + } else if (Is.thenable(value)) { + return new Promise((resolve, reject) => { + value.then( + (resolved) => resolve(resolved), + (error) => reject(error) + ); + }); + } else { + return Promise.resolve(value); + } + } + let shutdownHandler = void 0; + let initializeHandler = void 0; + let exitHandler = void 0; + let protocolConnection = { + listen: () => connection2.listen(), + sendRequest: (type, ...params) => + connection2.sendRequest( + Is.string(type) ? type : type.method, + ...params + ), + onRequest: (type, handler) => connection2.onRequest(type, handler), + sendNotification: (type, param) => { + const method = Is.string(type) ? type : type.method; + if (arguments.length === 1) { + return connection2.sendNotification(method); + } else { + return connection2.sendNotification(method, param); + } + }, + onNotification: (type, handler) => + connection2.onNotification(type, handler), + onProgress: connection2.onProgress, + sendProgress: connection2.sendProgress, + onInitialize: (handler) => (initializeHandler = handler), + onInitialized: (handler) => + connection2.onNotification( + vscode_languageserver_protocol_1.InitializedNotification.type, + handler + ), + onShutdown: (handler) => (shutdownHandler = handler), + onExit: (handler) => (exitHandler = handler), + get console() { + return logger; + }, + get telemetry() { + return telemetry; + }, + get tracer() { + return tracer; + }, + get client() { + return client; + }, + get window() { + return remoteWindow; + }, + get workspace() { + return workspace; + }, + get languages() { + return languages; + }, + onDidChangeConfiguration: (handler) => + connection2.onNotification( + vscode_languageserver_protocol_1 + .DidChangeConfigurationNotification.type, + handler + ), + onDidChangeWatchedFiles: (handler) => + connection2.onNotification( + vscode_languageserver_protocol_1.DidChangeWatchedFilesNotification + .type, + handler + ), + __textDocumentSync: void 0, + onDidOpenTextDocument: (handler) => + connection2.onNotification( + vscode_languageserver_protocol_1.DidOpenTextDocumentNotification + .type, + handler + ), + onDidChangeTextDocument: (handler) => + connection2.onNotification( + vscode_languageserver_protocol_1.DidChangeTextDocumentNotification + .type, + handler + ), + onDidCloseTextDocument: (handler) => + connection2.onNotification( + vscode_languageserver_protocol_1.DidCloseTextDocumentNotification + .type, + handler + ), + onWillSaveTextDocument: (handler) => + connection2.onNotification( + vscode_languageserver_protocol_1.WillSaveTextDocumentNotification + .type, + handler + ), + onWillSaveTextDocumentWaitUntil: (handler) => + connection2.onRequest( + vscode_languageserver_protocol_1 + .WillSaveTextDocumentWaitUntilRequest.type, + handler + ), + onDidSaveTextDocument: (handler) => + connection2.onNotification( + vscode_languageserver_protocol_1.DidSaveTextDocumentNotification + .type, + handler + ), + sendDiagnostics: (params) => + connection2.sendNotification( + vscode_languageserver_protocol_1.PublishDiagnosticsNotification + .type, + params + ), + onHover: (handler) => + connection2.onRequest( + vscode_languageserver_protocol_1.HoverRequest.type, + (params, cancel) => { + return handler( + params, + cancel, + (0, progress_1.attachWorkDone)(connection2, params), + void 0 + ); + } + ), + onCompletion: (handler) => + connection2.onRequest( + vscode_languageserver_protocol_1.CompletionRequest.type, + (params, cancel) => { + return handler( + params, + cancel, + (0, progress_1.attachWorkDone)(connection2, params), + (0, progress_1.attachPartialResult)(connection2, params) + ); + } + ), + onCompletionResolve: (handler) => + connection2.onRequest( + vscode_languageserver_protocol_1.CompletionResolveRequest.type, + handler + ), + onSignatureHelp: (handler) => + connection2.onRequest( + vscode_languageserver_protocol_1.SignatureHelpRequest.type, + (params, cancel) => { + return handler( + params, + cancel, + (0, progress_1.attachWorkDone)(connection2, params), + void 0 + ); + } + ), + onDeclaration: (handler) => + connection2.onRequest( + vscode_languageserver_protocol_1.DeclarationRequest.type, + (params, cancel) => { + return handler( + params, + cancel, + (0, progress_1.attachWorkDone)(connection2, params), + (0, progress_1.attachPartialResult)(connection2, params) + ); + } + ), + onDefinition: (handler) => + connection2.onRequest( + vscode_languageserver_protocol_1.DefinitionRequest.type, + (params, cancel) => { + return handler( + params, + cancel, + (0, progress_1.attachWorkDone)(connection2, params), + (0, progress_1.attachPartialResult)(connection2, params) + ); + } + ), + onTypeDefinition: (handler) => + connection2.onRequest( + vscode_languageserver_protocol_1.TypeDefinitionRequest.type, + (params, cancel) => { + return handler( + params, + cancel, + (0, progress_1.attachWorkDone)(connection2, params), + (0, progress_1.attachPartialResult)(connection2, params) + ); + } + ), + onImplementation: (handler) => + connection2.onRequest( + vscode_languageserver_protocol_1.ImplementationRequest.type, + (params, cancel) => { + return handler( + params, + cancel, + (0, progress_1.attachWorkDone)(connection2, params), + (0, progress_1.attachPartialResult)(connection2, params) + ); + } + ), + onReferences: (handler) => + connection2.onRequest( + vscode_languageserver_protocol_1.ReferencesRequest.type, + (params, cancel) => { + return handler( + params, + cancel, + (0, progress_1.attachWorkDone)(connection2, params), + (0, progress_1.attachPartialResult)(connection2, params) + ); + } + ), + onDocumentHighlight: (handler) => + connection2.onRequest( + vscode_languageserver_protocol_1.DocumentHighlightRequest.type, + (params, cancel) => { + return handler( + params, + cancel, + (0, progress_1.attachWorkDone)(connection2, params), + (0, progress_1.attachPartialResult)(connection2, params) + ); + } + ), + onDocumentSymbol: (handler) => + connection2.onRequest( + vscode_languageserver_protocol_1.DocumentSymbolRequest.type, + (params, cancel) => { + return handler( + params, + cancel, + (0, progress_1.attachWorkDone)(connection2, params), + (0, progress_1.attachPartialResult)(connection2, params) + ); + } + ), + onWorkspaceSymbol: (handler) => + connection2.onRequest( + vscode_languageserver_protocol_1.WorkspaceSymbolRequest.type, + (params, cancel) => { + return handler( + params, + cancel, + (0, progress_1.attachWorkDone)(connection2, params), + (0, progress_1.attachPartialResult)(connection2, params) + ); + } + ), + onWorkspaceSymbolResolve: (handler) => + connection2.onRequest( + vscode_languageserver_protocol_1.WorkspaceSymbolResolveRequest + .type, + handler + ), + onCodeAction: (handler) => + connection2.onRequest( + vscode_languageserver_protocol_1.CodeActionRequest.type, + (params, cancel) => { + return handler( + params, + cancel, + (0, progress_1.attachWorkDone)(connection2, params), + (0, progress_1.attachPartialResult)(connection2, params) + ); + } + ), + onCodeActionResolve: (handler) => + connection2.onRequest( + vscode_languageserver_protocol_1.CodeActionResolveRequest.type, + (params, cancel) => { + return handler(params, cancel); + } + ), + onCodeLens: (handler) => + connection2.onRequest( + vscode_languageserver_protocol_1.CodeLensRequest.type, + (params, cancel) => { + return handler( + params, + cancel, + (0, progress_1.attachWorkDone)(connection2, params), + (0, progress_1.attachPartialResult)(connection2, params) + ); + } + ), + onCodeLensResolve: (handler) => + connection2.onRequest( + vscode_languageserver_protocol_1.CodeLensResolveRequest.type, + (params, cancel) => { + return handler(params, cancel); + } + ), + onDocumentFormatting: (handler) => + connection2.onRequest( + vscode_languageserver_protocol_1.DocumentFormattingRequest.type, + (params, cancel) => { + return handler( + params, + cancel, + (0, progress_1.attachWorkDone)(connection2, params), + void 0 + ); + } + ), + onDocumentRangeFormatting: (handler) => + connection2.onRequest( + vscode_languageserver_protocol_1.DocumentRangeFormattingRequest + .type, + (params, cancel) => { + return handler( + params, + cancel, + (0, progress_1.attachWorkDone)(connection2, params), + void 0 + ); + } + ), + onDocumentOnTypeFormatting: (handler) => + connection2.onRequest( + vscode_languageserver_protocol_1.DocumentOnTypeFormattingRequest + .type, + (params, cancel) => { + return handler(params, cancel); + } + ), + onRenameRequest: (handler) => + connection2.onRequest( + vscode_languageserver_protocol_1.RenameRequest.type, + (params, cancel) => { + return handler( + params, + cancel, + (0, progress_1.attachWorkDone)(connection2, params), + void 0 + ); + } + ), + onPrepareRename: (handler) => + connection2.onRequest( + vscode_languageserver_protocol_1.PrepareRenameRequest.type, + (params, cancel) => { + return handler(params, cancel); + } + ), + onDocumentLinks: (handler) => + connection2.onRequest( + vscode_languageserver_protocol_1.DocumentLinkRequest.type, + (params, cancel) => { + return handler( + params, + cancel, + (0, progress_1.attachWorkDone)(connection2, params), + (0, progress_1.attachPartialResult)(connection2, params) + ); + } + ), + onDocumentLinkResolve: (handler) => + connection2.onRequest( + vscode_languageserver_protocol_1.DocumentLinkResolveRequest.type, + (params, cancel) => { + return handler(params, cancel); + } + ), + onDocumentColor: (handler) => + connection2.onRequest( + vscode_languageserver_protocol_1.DocumentColorRequest.type, + (params, cancel) => { + return handler( + params, + cancel, + (0, progress_1.attachWorkDone)(connection2, params), + (0, progress_1.attachPartialResult)(connection2, params) + ); + } + ), + onColorPresentation: (handler) => + connection2.onRequest( + vscode_languageserver_protocol_1.ColorPresentationRequest.type, + (params, cancel) => { + return handler( + params, + cancel, + (0, progress_1.attachWorkDone)(connection2, params), + (0, progress_1.attachPartialResult)(connection2, params) + ); + } + ), + onFoldingRanges: (handler) => + connection2.onRequest( + vscode_languageserver_protocol_1.FoldingRangeRequest.type, + (params, cancel) => { + return handler( + params, + cancel, + (0, progress_1.attachWorkDone)(connection2, params), + (0, progress_1.attachPartialResult)(connection2, params) + ); + } + ), + onSelectionRanges: (handler) => + connection2.onRequest( + vscode_languageserver_protocol_1.SelectionRangeRequest.type, + (params, cancel) => { + return handler( + params, + cancel, + (0, progress_1.attachWorkDone)(connection2, params), + (0, progress_1.attachPartialResult)(connection2, params) + ); + } + ), + onExecuteCommand: (handler) => + connection2.onRequest( + vscode_languageserver_protocol_1.ExecuteCommandRequest.type, + (params, cancel) => { + return handler( + params, + cancel, + (0, progress_1.attachWorkDone)(connection2, params), + void 0 + ); + } + ), + dispose: () => connection2.dispose(), + }; + for (let remote of allRemotes) { + remote.attach(protocolConnection); + } + connection2.onRequest( + vscode_languageserver_protocol_1.InitializeRequest.type, + (params) => { + watchDog.initialize(params); + if (Is.string(params.trace)) { + tracer.trace = vscode_languageserver_protocol_1.Trace.fromString( + params.trace + ); + } + for (let remote of allRemotes) { + remote.initialize(params.capabilities); + } + if (initializeHandler) { + let result = initializeHandler( + params, + new vscode_languageserver_protocol_1.CancellationTokenSource() + .token, + (0, progress_1.attachWorkDone)(connection2, params), + void 0 + ); + return asPromise(result).then((value) => { + if ( + value instanceof + vscode_languageserver_protocol_1.ResponseError + ) { + return value; + } + let result2 = value; + if (!result2) { + result2 = { capabilities: {} }; + } + let capabilities = result2.capabilities; + if (!capabilities) { + capabilities = {}; + result2.capabilities = capabilities; + } + if ( + capabilities.textDocumentSync === void 0 || + capabilities.textDocumentSync === null + ) { + capabilities.textDocumentSync = Is.number( + protocolConnection.__textDocumentSync + ) + ? protocolConnection.__textDocumentSync + : vscode_languageserver_protocol_1.TextDocumentSyncKind + .None; + } else if ( + !Is.number(capabilities.textDocumentSync) && + !Is.number(capabilities.textDocumentSync.change) + ) { + capabilities.textDocumentSync.change = Is.number( + protocolConnection.__textDocumentSync + ) + ? protocolConnection.__textDocumentSync + : vscode_languageserver_protocol_1.TextDocumentSyncKind + .None; + } + for (let remote of allRemotes) { + remote.fillServerCapabilities(capabilities); + } + return result2; + }); + } else { + let result = { + capabilities: { + textDocumentSync: + vscode_languageserver_protocol_1.TextDocumentSyncKind.None, + }, + }; + for (let remote of allRemotes) { + remote.fillServerCapabilities(result.capabilities); + } + return result; + } + } + ); + connection2.onRequest( + vscode_languageserver_protocol_1.ShutdownRequest.type, + () => { + watchDog.shutdownReceived = true; + if (shutdownHandler) { + return shutdownHandler( + new vscode_languageserver_protocol_1.CancellationTokenSource() + .token + ); + } else { + return void 0; + } + } + ); + connection2.onNotification( + vscode_languageserver_protocol_1.ExitNotification.type, + () => { + try { + if (exitHandler) { + exitHandler(); + } + } finally { + if (watchDog.shutdownReceived) { + watchDog.exit(0); + } else { + watchDog.exit(1); + } + } + } + ); + connection2.onNotification( + vscode_languageserver_protocol_1.SetTraceNotification.type, + (params) => { + tracer.trace = vscode_languageserver_protocol_1.Trace.fromString( + params.value + ); + } + ); + return protocolConnection; + } + exports.createConnection = createConnection2; + }, + }); + + // server/node_modules/vscode-languageserver/lib/common/proposed.diagnostic.js + let require_proposed_diagnostic2 = __commonJS({ + 'server/node_modules/vscode-languageserver/lib/common/proposed.diagnostic.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.DiagnosticFeature = void 0; + let vscode_languageserver_protocol_1 = require_main3(); + let DiagnosticFeature = (Base) => { + return class extends Base { + get diagnostics() { + return { + refresh: () => { + return this.connection.sendRequest( + vscode_languageserver_protocol_1.Proposed + .DiagnosticRefreshRequest.type + ); + }, + on: (handler) => { + this.connection.onRequest( + vscode_languageserver_protocol_1.Proposed + .DocumentDiagnosticRequest.type, + (params, cancel) => { + return handler( + params, + cancel, + this.attachWorkDoneProgress(params), + this.attachPartialResultProgress( + vscode_languageserver_protocol_1.Proposed + .DocumentDiagnosticRequest.partialResult, + params + ) + ); + } + ); + }, + onWorkspace: (handler) => { + this.connection.onRequest( + vscode_languageserver_protocol_1.Proposed + .WorkspaceDiagnosticRequest.type, + (params, cancel) => { + return handler( + params, + cancel, + this.attachWorkDoneProgress(params), + this.attachPartialResultProgress( + vscode_languageserver_protocol_1.Proposed + .WorkspaceDiagnosticRequest.partialResult, + params + ) + ); + } + ); + }, + }; + } + }; + }; + exports.DiagnosticFeature = DiagnosticFeature; + }, + }); + + // server/node_modules/vscode-languageserver/lib/common/proposed.typeHierarchy.js + let require_proposed_typeHierarchy2 = __commonJS({ + 'server/node_modules/vscode-languageserver/lib/common/proposed.typeHierarchy.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.TypeHierarchyFeature = void 0; + let vscode_languageserver_protocol_1 = require_main3(); + let TypeHierarchyFeature = (Base) => { + return class extends Base { + get typeHierarchy() { + return { + onPrepare: (handler) => { + this.connection.onRequest( + vscode_languageserver_protocol_1.Proposed + .TypeHierarchyPrepareRequest.type, + (params, cancel) => { + return handler( + params, + cancel, + this.attachWorkDoneProgress(params), + void 0 + ); + } + ); + }, + onSupertypes: (handler) => { + const type = + vscode_languageserver_protocol_1.Proposed + .TypeHierarchySupertypesRequest.type; + this.connection.onRequest(type, (params, cancel) => { + return handler( + params, + cancel, + this.attachWorkDoneProgress(params), + this.attachPartialResultProgress(type, params) + ); + }); + }, + onSubtypes: (handler) => { + const type = + vscode_languageserver_protocol_1.Proposed + .TypeHierarchySubtypesRequest.type; + this.connection.onRequest(type, (params, cancel) => { + return handler( + params, + cancel, + this.attachWorkDoneProgress(params), + this.attachPartialResultProgress(type, params) + ); + }); + }, + }; + } + }; + }; + exports.TypeHierarchyFeature = TypeHierarchyFeature; + }, + }); + + // server/node_modules/vscode-languageserver/lib/common/proposed.inlineValues.js + let require_proposed_inlineValues = __commonJS({ + 'server/node_modules/vscode-languageserver/lib/common/proposed.inlineValues.js'( + exports + ) { + 'use strict'; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.InlineValuesFeature = void 0; + let vscode_languageserver_protocol_1 = require_main3(); + let InlineValuesFeature = (Base) => { + return class extends Base { + get inlineValues() { + return { + on: (handler) => { + this.connection.onRequest( + vscode_languageserver_protocol_1.Proposed.InlineValuesRequest + .type, + (params, cancel) => { + return handler( + params, + cancel, + this.attachWorkDoneProgress(params) + ); + } + ); + }, + }; + } + }; + }; + exports.InlineValuesFeature = InlineValuesFeature; + }, + }); + + // server/node_modules/vscode-languageserver/lib/common/api.js + let require_api3 = __commonJS({ + 'server/node_modules/vscode-languageserver/lib/common/api.js'(exports) { + 'use strict'; + let __createBinding = + (exports && exports.__createBinding) || + (Object.create + ? function (o, m, k, k2) { + if (k2 === void 0) { + k2 = k; + } + Object.defineProperty(o, k2, { + enumerable: true, + get: function () { + return m[k]; + }, + }); + } + : function (o, m, k, k2) { + if (k2 === void 0) { + k2 = k; + } + o[k2] = m[k]; + }); + let __exportStar = + (exports && exports.__exportStar) || + function (m, exports2) { + for (let p in m) { + if ( + p !== 'default' && + !Object.prototype.hasOwnProperty.call(exports2, p) + ) { + __createBinding(exports2, m, p); + } + } + }; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.ProposedFeatures = exports.SemanticTokensBuilder = void 0; + let server_1 = require_server(); + let semanticTokens_1 = require_semanticTokens(); + Object.defineProperty(exports, 'SemanticTokensBuilder', { + enumerable: true, + get: function () { + return semanticTokens_1.SemanticTokensBuilder; + }, + }); + __exportStar(require_main3(), exports); + __exportStar(require_server(), exports); + let proposed_diagnostic_1 = require_proposed_diagnostic2(); + let proposed_typeHierarchy_1 = require_proposed_typeHierarchy2(); + let proposed_inlineValues_1 = require_proposed_inlineValues(); + let ProposedFeatures; + (function (ProposedFeatures2) { + ProposedFeatures2.all = { + __brand: 'features', + languages: (0, server_1.combineLanguagesFeatures)( + proposed_inlineValues_1.InlineValuesFeature, + (0, server_1.combineLanguagesFeatures)( + proposed_typeHierarchy_1.TypeHierarchyFeature, + proposed_diagnostic_1.DiagnosticFeature + ) + ), + }; + })( + (ProposedFeatures = + exports.ProposedFeatures || (exports.ProposedFeatures = {})) + ); + }, + }); + + // server/node_modules/vscode-languageserver-protocol/browser.js + let require_browser2 = __commonJS({ + 'server/node_modules/vscode-languageserver-protocol/browser.js'( + exports, + module + ) { + 'use strict'; + module.exports = require_main3(); + }, + }); + + // server/node_modules/vscode-languageserver/lib/browser/main.js + let require_main4 = __commonJS({ + 'server/node_modules/vscode-languageserver/lib/browser/main.js'(exports) { + 'use strict'; + let __createBinding = + (exports && exports.__createBinding) || + (Object.create + ? function (o, m, k, k2) { + if (k2 === void 0) { + k2 = k; + } + Object.defineProperty(o, k2, { + enumerable: true, + get: function () { + return m[k]; + }, + }); + } + : function (o, m, k, k2) { + if (k2 === void 0) { + k2 = k; + } + o[k2] = m[k]; + }); + let __exportStar = + (exports && exports.__exportStar) || + function (m, exports2) { + for (let p in m) { + if ( + p !== 'default' && + !Object.prototype.hasOwnProperty.call(exports2, p) + ) { + __createBinding(exports2, m, p); + } + } + }; + Object.defineProperty(exports, '__esModule', { value: true }); + exports.createConnection = void 0; + let api_1 = require_api3(); + __exportStar(require_browser2(), exports); + __exportStar(require_api3(), exports); + let _shutdownReceived = false; + let watchDog = { + initialize: (_params) => {}, + get shutdownReceived() { + return _shutdownReceived; + }, + set shutdownReceived(value) { + _shutdownReceived = value; + }, + exit: (_code) => {}, + }; + function createConnection2(arg1, arg2, arg3, arg4) { + let factories; + let reader; + let writer; + let options; + if (arg1 !== void 0 && arg1.__brand === 'features') { + factories = arg1; + arg1 = arg2; + arg2 = arg3; + arg3 = arg4; + } + if ( + api_1.ConnectionStrategy.is(arg1) || + api_1.ConnectionOptions.is(arg1) + ) { + options = arg1; + } else { + reader = arg1; + writer = arg2; + options = arg3; + } + const connectionFactory = (logger) => { + return (0, api_1.createProtocolConnection)( + reader, + writer, + logger, + options + ); + }; + return (0, api_1.createConnection)( + connectionFactory, + watchDog, + factories + ); + } + exports.createConnection = createConnection2; + }, + }); + + // server/node_modules/vscode-languageserver/browser.js + let require_browser3 = __commonJS({ + 'server/node_modules/vscode-languageserver/browser.js'(exports, module) { + 'use strict'; + module.exports = require_main4(); + }, + }); + + // server/tree-sitter/tree-sitter.js + let require_tree_sitter = __commonJS({ + 'server/tree-sitter/tree-sitter.js'(exports, module) { + var Module = Module !== void 0 ? Module : {}; + let TreeSitter = (function () { + let e; + class Parser4 { + constructor() { + this.initialize(); + } + initialize() { + throw new Error( + 'cannot construct a Parser before calling `init()`' + ); + } + static init(t) { + return ( + e || + ((Module = Object.assign({}, Module, t)), + (e = new Promise((e2) => { + let t2, + r = {}; + for (t2 in Module) { + Module.hasOwnProperty(t2) && (r[t2] = Module[t2]); + } + let n, + s, + o = [], + _ = './this.program', + a = function (e3, t3) { + throw t3; + }, + u = false, + i = false; + (u = typeof window === 'object'), + (i = typeof importScripts === 'function'), + (n = + typeof process === 'object' && + typeof process.versions === 'object' && + typeof process.versions.node === 'string'), + (s = !u && !n && !i); + let l, + d, + c, + m, + f, + p = ''; + n + ? ((p = i + ? __require('path').dirname(p) + '/' + : __dirname + '/'), + (l = function (e3, t3) { + return ( + m || (m = __require('fs')), + f || (f = __require('path')), + (e3 = f.normalize(e3)), + m.readFileSync(e3, t3 ? null : 'utf8') + ); + }), + (c = function (e3) { + let t3 = l(e3, true); + return ( + t3.buffer || (t3 = new Uint8Array(t3)), P(t3.buffer), t3 + ); + }), + process.argv.length > 1 && + (_ = process.argv[1].replace(/\\/g, '/')), + (o = process.argv.slice(2)), + typeof module !== 'undefined' && (module.exports = Module), + (a = function (e3) { + process.exit(e3); + }), + (Module.inspect = function () { + return '[Emscripten Module object]'; + })) + : s + ? (typeof read !== 'undefined' && + (l = function (e3) { + return read(e3); + }), + (c = function (e3) { + let t3; + return typeof readbuffer === 'function' + ? new Uint8Array(readbuffer(e3)) + : (P(typeof (t3 = read(e3, 'binary')) === 'object'), + t3); + }), + typeof scriptArgs !== 'undefined' + ? (o = scriptArgs) + : arguments !== void 0 && (o = arguments), + typeof quit === 'function' && + (a = function (e3) { + quit(e3); + }), + typeof print !== 'undefined' && + (typeof console === 'undefined' && (console = {}), + (console.log = print), + (console.warn = console.error = + typeof printErr !== 'undefined' ? printErr : print))) + : (u || i) && + (i + ? (p = self.location.href) + : typeof document !== 'undefined' && + document.currentScript && + (p = document.currentScript.src), + (p = + p.indexOf('blob:') !== 0 + ? p.substr(0, p.lastIndexOf('/') + 1) + : ''), + (l = function (e3) { + let t3 = new XMLHttpRequest(); + return ( + t3.open('GET', e3, false), + t3.send(null), + t3.responseText + ); + }), + i && + (c = function (e3) { + let t3 = new XMLHttpRequest(); + return ( + t3.open('GET', e3, false), + (t3.responseType = 'arraybuffer'), + t3.send(null), + new Uint8Array(t3.response) + ); + }), + (d = function (e3, t3, r2) { + let n2 = new XMLHttpRequest(); + n2.open('GET', e3, true), + (n2.responseType = 'arraybuffer'), + (n2.onload = function () { + n2.status == 200 || (n2.status == 0 && n2.response) + ? t3(n2.response) + : r2(); + }), + (n2.onerror = r2), + n2.send(null); + })); + Module.print || console.log.bind(console); + let h = Module.printErr || console.warn.bind(console); + for (t2 in r) { + r.hasOwnProperty(t2) && (Module[t2] = r[t2]); + } + (r = null), + Module.arguments && (o = Module.arguments), + Module.thisProgram && (_ = Module.thisProgram), + Module.quit && (a = Module.quit); + let g = 16; + let w, + y = []; + function M(e3, t3) { + if (!w) { + w = new WeakMap(); + for (let r2 = 0; r2 < B.length; r2++) { + let n2 = B.get(r2); + n2 && w.set(n2, r2); + } + } + if (w.has(e3)) { + return w.get(e3); + } + let s2 = (function () { + if (y.length) { + return y.pop(); + } + try { + B.grow(1); + } catch (e4) { + if (!(e4 instanceof RangeError)) { + throw e4; + } + throw 'Unable to grow wasm table. Set ALLOW_TABLE_GROWTH.'; + } + return B.length - 1; + })(); + try { + B.set(s2, e3); + } catch (r3) { + if (!(r3 instanceof TypeError)) { + throw r3; + } + let o2 = (function (e4, t4) { + if (typeof WebAssembly.Function === 'function') { + for ( + var r4 = { i: 'i32', j: 'i64', f: 'f32', d: 'f64' }, + n3 = { + parameters: [], + results: t4[0] == 'v' ? [] : [r4[t4[0]]], + }, + s3 = 1; + s3 < t4.length; + ++s3 + ) { + n3.parameters.push(r4[t4[s3]]); + } + return new WebAssembly.Function(n3, e4); + } + let o3 = [1, 0, 1, 96], + _2 = t4.slice(0, 1), + a2 = t4.slice(1), + u2 = { i: 127, j: 126, f: 125, d: 124 }; + for (o3.push(a2.length), s3 = 0; s3 < a2.length; ++s3) { + o3.push(u2[a2[s3]]); + } + _2 == 'v' ? o3.push(0) : (o3 = o3.concat([1, u2[_2]])), + (o3[1] = o3.length - 2); + let i2 = new Uint8Array( + [0, 97, 115, 109, 1, 0, 0, 0].concat(o3, [ + 2, + 7, + 1, + 1, + 101, + 1, + 102, + 0, + 0, + 7, + 5, + 1, + 1, + 102, + 0, + 0, + ]) + ), + l2 = new WebAssembly.Module(i2); + return new WebAssembly.Instance(l2, { e: { f: e4 } }) + .exports.f; + })(e3, t3); + B.set(s2, o2); + } + return w.set(e3, s2), s2; + } + let b, + v = function (e3) { + e3; + }, + E = Module.dynamicLibraries || []; + Module.wasmBinary && (b = Module.wasmBinary); + let I, + A = Module.noExitRuntime || true; + function S(e3, t3, r2, n2) { + switch ( + ((r2 = r2 || 'i8').charAt(r2.length - 1) === '*' && + (r2 = 'i32'), + r2) + ) { + case 'i1': + case 'i8': + q[e3 >> 0] = t3; + break; + case 'i16': + T[e3 >> 1] = t3; + break; + case 'i32': + L[e3 >> 2] = t3; + break; + case 'i64': + (ae = [ + t3 >>> 0, + ((_e = t3), + +Math.abs(_e) >= 1 + ? _e > 0 + ? (0 | + Math.min( + +Math.floor(_e / 4294967296), + 4294967295 + )) >>> + 0 + : ~~+Math.ceil( + (_e - +(~~_e >>> 0)) / 4294967296 + ) >>> 0 + : 0), + ]), + (L[e3 >> 2] = ae[0]), + (L[(e3 + 4) >> 2] = ae[1]); + break; + case 'float': + W[e3 >> 2] = t3; + break; + case 'double': + O[e3 >> 3] = t3; + break; + default: + se('invalid type for setValue: ' + r2); + } + } + function x(e3, t3, r2) { + switch ( + ((t3 = t3 || 'i8').charAt(t3.length - 1) === '*' && + (t3 = 'i32'), + t3) + ) { + case 'i1': + case 'i8': + return q[e3 >> 0]; + case 'i16': + return T[e3 >> 1]; + case 'i32': + case 'i64': + return L[e3 >> 2]; + case 'float': + return W[e3 >> 2]; + case 'double': + return O[e3 >> 3]; + default: + se('invalid type for getValue: ' + t3); + } + return null; + } + typeof WebAssembly !== 'object' && + se('no native wasm support detected'); + let N = false; + function P(e3, t3) { + e3 || se('Assertion failed: ' + t3); + } + let k = 1; + let C, + q, + R, + T, + L, + W, + O, + Z = + typeof TextDecoder !== 'undefined' + ? new TextDecoder('utf8') + : void 0; + function F(e3, t3, r2) { + for (var n2 = t3 + r2, s2 = t3; e3[s2] && !(s2 >= n2); ) { + ++s2; + } + if (s2 - t3 > 16 && e3.subarray && Z) { + return Z.decode(e3.subarray(t3, s2)); + } + for (var o2 = ''; t3 < s2; ) { + let _2 = e3[t3++]; + if (128 & _2) { + let a2 = 63 & e3[t3++]; + if ((224 & _2) != 192) { + let u2 = 63 & e3[t3++]; + if ( + (_2 = + (240 & _2) == 224 + ? ((15 & _2) << 12) | (a2 << 6) | u2 + : ((7 & _2) << 18) | + (a2 << 12) | + (u2 << 6) | + (63 & e3[t3++])) < 65536 + ) { + o2 += String.fromCharCode(_2); + } else { + let i2 = _2 - 65536; + o2 += String.fromCharCode( + 55296 | (i2 >> 10), + 56320 | (1023 & i2) + ); + } + } else { + o2 += String.fromCharCode(((31 & _2) << 6) | a2); + } + } else { + o2 += String.fromCharCode(_2); + } + } + return o2; + } + function $(e3, t3) { + return e3 ? F(R, e3, t3) : ''; + } + function j(e3, t3, r2, n2) { + if (!(n2 > 0)) { + return 0; + } + for ( + var s2 = r2, o2 = r2 + n2 - 1, _2 = 0; + _2 < e3.length; + ++_2 + ) { + let a2 = e3.charCodeAt(_2); + if (a2 >= 55296 && a2 <= 57343) { + a2 = + (65536 + ((1023 & a2) << 10)) | + (1023 & e3.charCodeAt(++_2)); + } + if (a2 <= 127) { + if (r2 >= o2) { + break; + } + t3[r2++] = a2; + } else if (a2 <= 2047) { + if (r2 + 1 >= o2) { + break; + } + (t3[r2++] = 192 | (a2 >> 6)), + (t3[r2++] = 128 | (63 & a2)); + } else if (a2 <= 65535) { + if (r2 + 2 >= o2) { + break; + } + (t3[r2++] = 224 | (a2 >> 12)), + (t3[r2++] = 128 | ((a2 >> 6) & 63)), + (t3[r2++] = 128 | (63 & a2)); + } else { + if (r2 + 3 >= o2) { + break; + } + (t3[r2++] = 240 | (a2 >> 18)), + (t3[r2++] = 128 | ((a2 >> 12) & 63)), + (t3[r2++] = 128 | ((a2 >> 6) & 63)), + (t3[r2++] = 128 | (63 & a2)); + } + } + return (t3[r2] = 0), r2 - s2; + } + function U(e3, t3, r2) { + return j(e3, R, t3, r2); + } + function D(e3) { + for (var t3 = 0, r2 = 0; r2 < e3.length; ++r2) { + let n2 = e3.charCodeAt(r2); + n2 >= 55296 && + n2 <= 57343 && + (n2 = + (65536 + ((1023 & n2) << 10)) | + (1023 & e3.charCodeAt(++r2))), + n2 <= 127 + ? ++t3 + : (t3 += n2 <= 2047 ? 2 : n2 <= 65535 ? 3 : 4); + } + return t3; + } + function z(e3) { + let t3 = D(e3) + 1, + r2 = De(t3); + return j(e3, q, r2, t3), r2; + } + function G(e3) { + (C = e3), + (Module.HEAP8 = q = new Int8Array(e3)), + (Module.HEAP16 = T = new Int16Array(e3)), + (Module.HEAP32 = L = new Int32Array(e3)), + (Module.HEAPU8 = R = new Uint8Array(e3)), + (Module.HEAPU16 = new Uint16Array(e3)), + (Module.HEAPU32 = new Uint32Array(e3)), + (Module.HEAPF32 = W = new Float32Array(e3)), + (Module.HEAPF64 = O = new Float64Array(e3)); + } + let H = Module.INITIAL_MEMORY || 33554432; + (I = Module.wasmMemory + ? Module.wasmMemory + : new WebAssembly.Memory({ + initial: H / 65536, + maximum: 32768, + })) && (C = I.buffer), + (H = C.byteLength), + G(C); + var B = new WebAssembly.Table({ + initial: 13, + element: 'anyfunc', + }), + K = [], + V = [], + X = [], + Q = [], + J = false; + let Y = 0, + ee = null, + te = null; + function re(e3) { + Y++, + Module.monitorRunDependencies && + Module.monitorRunDependencies(Y); + } + function ne(e3) { + if ( + (Y--, + Module.monitorRunDependencies && + Module.monitorRunDependencies(Y), + Y == 0 && + (ee !== null && (clearInterval(ee), (ee = null)), te)) + ) { + let t3 = te; + (te = null), t3(); + } + } + function se(e3) { + throw ( + (Module.onAbort && Module.onAbort(e3), + h((e3 += '')), + (N = true), + 1, + (e3 = + 'abort(' + + e3 + + '). Build with -s ASSERTIONS=1 for more info.'), + new WebAssembly.RuntimeError(e3)) + ); + } + (Module.preloadedImages = {}), + (Module.preloadedAudios = {}), + (Module.preloadedWasm = {}); + let oe, + _e, + ae, + ue = 'data:application/octet-stream;base64,'; + function ie(e3) { + return e3.startsWith(ue); + } + function le(e3) { + return e3.startsWith('file://'); + } + function de(e3) { + try { + if (e3 == oe && b) { + return new Uint8Array(b); + } + if (c) { + return c(e3); + } + throw 'both async and sync fetching of the wasm failed'; + } catch (e4) { + se(e4); + } + } + ie((oe = 'tree-sitter.wasm')) || + (oe = (function (e3) { + return Module.locateFile + ? Module.locateFile(e3, p) + : p + e3; + })(oe)); + let ce = {}, + me = { + get: function (e3, t3) { + return ( + ce[t3] || + (ce[t3] = new WebAssembly.Global({ + value: 'i32', + mutable: true, + })), + ce[t3] + ); + }, + }; + function fe(e3) { + for (; e3.length > 0; ) { + let t3 = e3.shift(); + if (typeof t3 !== 'function') { + let r2 = t3.func; + typeof r2 === 'number' + ? t3.arg === void 0 + ? B.get(r2)() + : B.get(r2)(t3.arg) + : r2(t3.arg === void 0 ? null : t3.arg); + } else { + t3(Module); + } + } + } + function pe(e3) { + let t3 = 0; + function r2() { + for (var r3 = 0, n3 = 1; ; ) { + let s3 = e3[t3++]; + if (((r3 += (127 & s3) * n3), (n3 *= 128), !(128 & s3))) { + break; + } + } + return r3; + } + if (e3 instanceof WebAssembly.Module) { + let n2 = WebAssembly.Module.customSections(e3, 'dylink'); + P(n2.length != 0, 'need dylink section'), + (e3 = new Int8Array(n2[0])); + } else { + P( + new Uint32Array( + new Uint8Array(e3.subarray(0, 24)).buffer + )[0] == 1836278016, + 'need to see wasm magic number' + ), + P(e3[8] === 0, 'need the dylink section to be first'), + (t3 = 9), + r2(), + P(e3[t3] === 6), + P(e3[++t3] === 'd'.charCodeAt(0)), + P(e3[++t3] === 'y'.charCodeAt(0)), + P(e3[++t3] === 'l'.charCodeAt(0)), + P(e3[++t3] === 'i'.charCodeAt(0)), + P(e3[++t3] === 'n'.charCodeAt(0)), + P(e3[++t3] === 'k'.charCodeAt(0)), + t3++; + } + let s2 = {}; + (s2.memorySize = r2()), + (s2.memoryAlign = r2()), + (s2.tableSize = r2()), + (s2.tableAlign = r2()); + let o2 = r2(); + s2.neededDynlibs = []; + for (let _2 = 0; _2 < o2; ++_2) { + let a2 = r2(), + u2 = e3.subarray(t3, t3 + a2); + t3 += a2; + let i2 = F(u2, 0); + s2.neededDynlibs.push(i2); + } + return s2; + } + let he = 0; + function ge() { + return A || he > 0; + } + function we(e3) { + return e3.indexOf('dynCall_') == 0 || + ['stackAlloc', 'stackSave', 'stackRestore'].includes(e3) + ? e3 + : '_' + e3; + } + function ye(e3, t3) { + for (let r2 in e3) { + if (e3.hasOwnProperty(r2)) { + Ze.hasOwnProperty(r2) || (Ze[r2] = e3[r2]); + let n2 = we(r2); + Module.hasOwnProperty(n2) || (Module[n2] = e3[r2]); + } + } + } + let Me = { nextHandle: 1, loadedLibs: {}, loadedLibNames: {} }; + function be(e3, t3, r2) { + return e3.includes('j') + ? (function (e4, t4, r3) { + let n2 = Module['dynCall_' + e4]; + return r3 && r3.length + ? n2.apply(null, [t4].concat(r3)) + : n2.call(null, t4); + })(e3, t3, r2) + : B.get(t3).apply(null, r2); + } + let ve = 5250816; + function Ee(e3) { + return [ + '__cpp_exception', + '__wasm_apply_data_relocs', + '__dso_handle', + '__set_stack_limits', + ].includes(e3); + } + function Ie(e3, t3) { + let r2 = {}; + for (let n2 in e3) { + let s2 = e3[n2]; + typeof s2 === 'object' && (s2 = s2.value), + typeof s2 === 'number' && (s2 += t3), + (r2[n2] = s2); + } + return ( + (function (e4) { + for (let t4 in e4) { + if (!Ee(t4)) { + let r3 = false, + n3 = e4[t4]; + t4.startsWith('orig$') && + ((t4 = t4.split('$')[1]), (r3 = true)), + ce[t4] || + (ce[t4] = new WebAssembly.Global({ + value: 'i32', + mutable: true, + })), + (r3 || ce[t4].value == 0) && + (typeof n3 === 'function' + ? (ce[t4].value = M(n3)) + : typeof n3 === 'number' + ? (ce[t4].value = n3) + : h( + 'unhandled export type for `' + + t4 + + '`: ' + + typeof n3 + )); + } + } + })(r2), + r2 + ); + } + function Ae(e3, t3) { + let r2, n2; + return ( + t3 && (r2 = Ze['orig$' + e3]), + r2 || (r2 = Ze[e3]), + r2 || (r2 = Module[we(e3)]), + !r2 && + e3.startsWith('invoke_') && + ((n2 = e3.split('_')[1]), + (r2 = function () { + let e4 = je(); + try { + return be( + n2, + arguments[0], + Array.prototype.slice.call(arguments, 1) + ); + } catch (t4) { + if ((Ue(e4), t4 !== t4 + 0 && t4 !== 'longjmp')) { + throw t4; + } + ze(1, 0); + } + })), + r2 + ); + } + function Se(e3, t3) { + let r2 = pe(e3); + function n2() { + let n3 = Math.pow(2, r2.memoryAlign); + n3 = Math.max(n3, g); + let s2, + o2, + _2, + a2 = + ((s2 = (function (e4) { + if (J) { + return Fe(e4); + } + let t4 = ve, + r3 = (t4 + e4 + 15) & -16; + return (ve = r3), (ce.__heap_base.value = r3), t4; + })(r2.memorySize + n3)), + (o2 = n3) || (o2 = g), + Math.ceil(s2 / o2) * o2), + u2 = B.length; + B.grow(r2.tableSize); + for (var i2 = a2; i2 < a2 + r2.memorySize; i2++) { + q[i2] = 0; + } + for (i2 = u2; i2 < u2 + r2.tableSize; i2++) { + B.set(i2, null); + } + let l2 = new Proxy( + {}, + { + get: function (e4, t4) { + switch (t4) { + case '__memory_base': + return a2; + case '__table_base': + return u2; + } + if (t4 in Ze) { + return Ze[t4]; + } + let r3; + t4 in e4 || + (e4[t4] = function () { + return ( + r3 || + (r3 = (function (e5) { + let t5 = Ae(e5, false); + return t5 || (t5 = _2[e5]), t5; + })(t4)), + r3.apply(null, arguments) + ); + }); + return e4[t4]; + }, + } + ), + d2 = { + 'GOT.mem': new Proxy({}, me), + 'GOT.func': new Proxy({}, me), + env: l2, + wasi_snapshot_preview1: l2, + }; + function c2(e4) { + for (let n4 = 0; n4 < r2.tableSize; n4++) { + let s3 = B.get(u2 + n4); + s3 && w.set(s3, u2 + n4); + } + (_2 = Ie(e4.exports, a2)), t3.allowUndefined || Ne(); + let o3 = _2.__wasm_call_ctors; + return ( + o3 || (o3 = _2.__post_instantiate), + o3 && (J ? o3() : V.push(o3)), + _2 + ); + } + if (t3.loadAsync) { + if (e3 instanceof WebAssembly.Module) { + var m2 = new WebAssembly.Instance(e3, d2); + return Promise.resolve(c2(m2)); + } + return WebAssembly.instantiate(e3, d2).then(function ( + e4 + ) { + return c2(e4.instance); + }); + } + let f2 = + e3 instanceof WebAssembly.Module + ? e3 + : new WebAssembly.Module(e3); + return c2((m2 = new WebAssembly.Instance(f2, d2))); + } + return t3.loadAsync + ? r2.neededDynlibs + .reduce(function (e4, r3) { + return e4.then(function () { + return xe(r3, t3); + }); + }, Promise.resolve()) + .then(function () { + return n2(); + }) + : (r2.neededDynlibs.forEach(function (e4) { + xe(e4, t3); + }), + n2()); + } + function xe(e3, t3) { + e3 != '__main__' || + Me.loadedLibNames[e3] || + ((Me.loadedLibs[-1] = { + refcount: 1 / 0, + name: '__main__', + module: Module.asm, + global: true, + }), + (Me.loadedLibNames.__main__ = -1)), + (t3 = t3 || { global: true, nodelete: true }); + let r2, + n2 = Me.loadedLibNames[e3]; + if (n2) { + return ( + (r2 = Me.loadedLibs[n2]), + t3.global && + !r2.global && + ((r2.global = true), + r2.module !== 'loading' && ye(r2.module)), + t3.nodelete && + r2.refcount !== 1 / 0 && + (r2.refcount = 1 / 0), + r2.refcount++, + t3.loadAsync ? Promise.resolve(n2) : n2 + ); + } + function s2(e4) { + if (t3.fs) { + let r3 = t3.fs.readFile(e4, { encoding: 'binary' }); + return ( + r3 instanceof Uint8Array || (r3 = new Uint8Array(r3)), + t3.loadAsync ? Promise.resolve(r3) : r3 + ); + } + return t3.loadAsync + ? ((n3 = e4), + fetch(n3, { credentials: 'same-origin' }) + .then(function (e5) { + if (!e5.ok) { + throw ( + "failed to load binary file at '" + n3 + "'" + ); + } + return e5.arrayBuffer(); + }) + .then(function (e5) { + return new Uint8Array(e5); + })) + : c(e4); + let n3; + } + function o2() { + if ( + Module.preloadedWasm !== void 0 && + Module.preloadedWasm[e3] !== void 0 + ) { + let r3 = Module.preloadedWasm[e3]; + return t3.loadAsync ? Promise.resolve(r3) : r3; + } + return t3.loadAsync + ? s2(e3).then(function (e4) { + return Se(e4, t3); + }) + : Se(s2(e3), t3); + } + function _2(e4) { + r2.global && ye(e4), (r2.module = e4); + } + return ( + (n2 = Me.nextHandle++), + (r2 = { + refcount: t3.nodelete ? 1 / 0 : 1, + name: e3, + module: 'loading', + global: t3.global, + }), + (Me.loadedLibNames[e3] = n2), + (Me.loadedLibs[n2] = r2), + t3.loadAsync + ? o2().then(function (e4) { + return _2(e4), n2; + }) + : (_2(o2()), n2) + ); + } + function Ne() { + for (let e3 in ce) { + if (ce[e3].value == 0) { + let t3 = Ae(e3, true); + typeof t3 === 'function' + ? (ce[e3].value = M(t3, t3.sig)) + : typeof t3 === 'number' + ? (ce[e3].value = t3) + : P( + false, + 'bad export type for `' + e3 + '`: ' + typeof t3 + ); + } + } + } + Module.___heap_base = ve; + let Pe, + ke = new WebAssembly.Global( + { value: 'i32', mutable: true }, + 5250816 + ); + function Ce() { + se(); + } + (Module._abort = Ce), + (Ce.sig = 'v'), + (Pe = n + ? function () { + let e3 = process.hrtime(); + return 1e3 * e3[0] + e3[1] / 1e6; + } + : typeof dateNow !== 'undefined' + ? dateNow + : function () { + return performance.now(); + }); + let qe = true; + function Re(e3, t3) { + let r2, n2; + if (e3 === 0) { + r2 = Date.now(); + } else { + if ((e3 !== 1 && e3 !== 4) || !qe) { + return (n2 = 28), (L[$e() >> 2] = n2), -1; + } + r2 = Pe(); + } + return ( + (L[t3 >> 2] = (r2 / 1e3) | 0), + (L[(t3 + 4) >> 2] = ((r2 % 1e3) * 1e3 * 1e3) | 0), + 0 + ); + } + function Te(e3) { + try { + return ( + I.grow((e3 - C.byteLength + 65535) >>> 16), G(I.buffer), 1 + ); + } catch (e4) {} + } + function Le(e3) { + Ke(e3); + } + function We(e3) { + v(e3); + } + (Re.sig = 'iii'), (Le.sig = 'vi'), (We.sig = 'vi'); + var Oe, + Ze = { + __heap_base: ve, + __indirect_function_table: B, + __memory_base: 1024, + __stack_pointer: ke, + __table_base: 1, + abort: Ce, + clock_gettime: Re, + emscripten_memcpy_big: function (e3, t3, r2) { + R.copyWithin(e3, t3, t3 + r2); + }, + emscripten_resize_heap: function (e3) { + let t3, + r2, + n2 = R.length; + if ((e3 >>>= 0) > 2147483648) { + return false; + } + for (let s2 = 1; s2 <= 4; s2 *= 2) { + let o2 = n2 * (1 + 0.2 / s2); + if ( + ((o2 = Math.min(o2, e3 + 100663296)), + Te( + Math.min( + 2147483648, + ((t3 = Math.max(e3, o2)) % (r2 = 65536) > 0 && + (t3 += r2 - (t3 % r2)), + t3) + ) + )) + ) { + return true; + } + } + return false; + }, + exit: Le, + memory: I, + setTempRet0: We, + tree_sitter_log_callback: function (e3, t3) { + if (dt) { + const r2 = $(t3); + dt(r2, e3 !== 0); + } + }, + tree_sitter_parse_callback: function (e3, t3, r2, n2, s2) { + let o2 = lt(t3, { row: r2, column: n2 }); + typeof o2 === 'string' + ? (S(s2, o2.length, 'i32'), + (function (e4, t4, r3) { + if ((r3 === void 0 && (r3 = 2147483647), r3 < 2)) { + return 0; + } + for ( + let n3 = + (r3 -= 2) < 2 * e4.length + ? r3 / 2 + : e4.length, + s3 = 0; + s3 < n3; + ++s3 + ) { + let o3 = e4.charCodeAt(s3); + (T[t4 >> 1] = o3), (t4 += 2); + } + T[t4 >> 1] = 0; + })(o2, e3, 10240)) + : S(s2, 0, 'i32'); + }, + }, + Fe = + ((function () { + let e3 = { + env: Ze, + wasi_snapshot_preview1: Ze, + 'GOT.mem': new Proxy(Ze, me), + 'GOT.func': new Proxy(Ze, me), + }; + function t3(e4, t4) { + let r3 = e4.exports; + (r3 = Ie(r3, 1024)), (Module.asm = r3); + let n3, + s2 = pe(t4); + s2.neededDynlibs && (E = s2.neededDynlibs.concat(E)), + ye(r3), + (n3 = Module.asm.__wasm_call_ctors), + V.unshift(n3), + ne(); + } + function r2(e4) { + t3(e4.instance, e4.module); + } + function n2(t4) { + return (function () { + if (!b && (u || i)) { + if (typeof fetch === 'function' && !le(oe)) { + return fetch(oe, { credentials: 'same-origin' }) + .then(function (e4) { + if (!e4.ok) { + throw ( + "failed to load wasm binary file at '" + + oe + + "'" + ); + } + return e4.arrayBuffer(); + }) + .catch(function () { + return de(oe); + }); + } + if (d) { + return new Promise(function (e4, t5) { + d( + oe, + function (t6) { + e4(new Uint8Array(t6)); + }, + t5 + ); + }); + } + } + return Promise.resolve().then(function () { + return de(oe); + }); + })() + .then(function (t5) { + return WebAssembly.instantiate(t5, e3); + }) + .then(t4, function (e4) { + h('failed to asynchronously prepare wasm: ' + e4), + se(e4); + }); + } + if ((re(), Module.instantiateWasm)) { + try { + return Module.instantiateWasm(e3, t3); + } catch (e4) { + return ( + h( + 'Module.instantiateWasm callback failed with error: ' + + e4 + ), + false + ); + } + } + b || + typeof WebAssembly.instantiateStreaming !== 'function' || + ie(oe) || + le(oe) || + typeof fetch !== 'function' + ? n2(r2) + : fetch(oe, { credentials: 'same-origin' }).then( + function (t4) { + return WebAssembly.instantiateStreaming( + t4, + e3 + ).then(r2, function (e4) { + return ( + h('wasm streaming compile failed: ' + e4), + h( + 'falling back to ArrayBuffer instantiation' + ), + n2(r2) + ); + }); + } + ); + })(), + (Module.___wasm_call_ctors = function () { + return (Module.___wasm_call_ctors = + Module.asm.__wasm_call_ctors).apply(null, arguments); + }), + (Module._malloc = function () { + return (Fe = Module._malloc = Module.asm.malloc).apply( + null, + arguments + ); + })), + $e = + ((Module._ts_language_symbol_count = function () { + return (Module._ts_language_symbol_count = + Module.asm.ts_language_symbol_count).apply( + null, + arguments + ); + }), + (Module._ts_language_version = function () { + return (Module._ts_language_version = + Module.asm.ts_language_version).apply(null, arguments); + }), + (Module._ts_language_field_count = function () { + return (Module._ts_language_field_count = + Module.asm.ts_language_field_count).apply( + null, + arguments + ); + }), + (Module._ts_language_symbol_name = function () { + return (Module._ts_language_symbol_name = + Module.asm.ts_language_symbol_name).apply( + null, + arguments + ); + }), + (Module._ts_language_symbol_for_name = function () { + return (Module._ts_language_symbol_for_name = + Module.asm.ts_language_symbol_for_name).apply( + null, + arguments + ); + }), + (Module._ts_language_symbol_type = function () { + return (Module._ts_language_symbol_type = + Module.asm.ts_language_symbol_type).apply( + null, + arguments + ); + }), + (Module._ts_language_field_name_for_id = function () { + return (Module._ts_language_field_name_for_id = + Module.asm.ts_language_field_name_for_id).apply( + null, + arguments + ); + }), + (Module._memcpy = function () { + return (Module._memcpy = Module.asm.memcpy).apply( + null, + arguments + ); + }), + (Module._free = function () { + return (Module._free = Module.asm.free).apply( + null, + arguments + ); + }), + (Module._calloc = function () { + return (Module._calloc = Module.asm.calloc).apply( + null, + arguments + ); + }), + (Module._ts_parser_delete = function () { + return (Module._ts_parser_delete = + Module.asm.ts_parser_delete).apply(null, arguments); + }), + (Module._ts_parser_reset = function () { + return (Module._ts_parser_reset = + Module.asm.ts_parser_reset).apply(null, arguments); + }), + (Module._ts_parser_set_language = function () { + return (Module._ts_parser_set_language = + Module.asm.ts_parser_set_language).apply( + null, + arguments + ); + }), + (Module._ts_parser_timeout_micros = function () { + return (Module._ts_parser_timeout_micros = + Module.asm.ts_parser_timeout_micros).apply( + null, + arguments + ); + }), + (Module._ts_parser_set_timeout_micros = function () { + return (Module._ts_parser_set_timeout_micros = + Module.asm.ts_parser_set_timeout_micros).apply( + null, + arguments + ); + }), + (Module._memcmp = function () { + return (Module._memcmp = Module.asm.memcmp).apply( + null, + arguments + ); + }), + (Module._ts_query_new = function () { + return (Module._ts_query_new = + Module.asm.ts_query_new).apply(null, arguments); + }), + (Module._ts_query_delete = function () { + return (Module._ts_query_delete = + Module.asm.ts_query_delete).apply(null, arguments); + }), + (Module._iswspace = function () { + return (Module._iswspace = Module.asm.iswspace).apply( + null, + arguments + ); + }), + (Module._iswalnum = function () { + return (Module._iswalnum = Module.asm.iswalnum).apply( + null, + arguments + ); + }), + (Module._ts_query_pattern_count = function () { + return (Module._ts_query_pattern_count = + Module.asm.ts_query_pattern_count).apply( + null, + arguments + ); + }), + (Module._ts_query_capture_count = function () { + return (Module._ts_query_capture_count = + Module.asm.ts_query_capture_count).apply( + null, + arguments + ); + }), + (Module._ts_query_string_count = function () { + return (Module._ts_query_string_count = + Module.asm.ts_query_string_count).apply( + null, + arguments + ); + }), + (Module._ts_query_capture_name_for_id = function () { + return (Module._ts_query_capture_name_for_id = + Module.asm.ts_query_capture_name_for_id).apply( + null, + arguments + ); + }), + (Module._ts_query_string_value_for_id = function () { + return (Module._ts_query_string_value_for_id = + Module.asm.ts_query_string_value_for_id).apply( + null, + arguments + ); + }), + (Module._ts_query_predicates_for_pattern = function () { + return (Module._ts_query_predicates_for_pattern = + Module.asm.ts_query_predicates_for_pattern).apply( + null, + arguments + ); + }), + (Module._ts_tree_copy = function () { + return (Module._ts_tree_copy = + Module.asm.ts_tree_copy).apply(null, arguments); + }), + (Module._ts_tree_delete = function () { + return (Module._ts_tree_delete = + Module.asm.ts_tree_delete).apply(null, arguments); + }), + (Module._ts_init = function () { + return (Module._ts_init = Module.asm.ts_init).apply( + null, + arguments + ); + }), + (Module._ts_parser_new_wasm = function () { + return (Module._ts_parser_new_wasm = + Module.asm.ts_parser_new_wasm).apply(null, arguments); + }), + (Module._ts_parser_enable_logger_wasm = function () { + return (Module._ts_parser_enable_logger_wasm = + Module.asm.ts_parser_enable_logger_wasm).apply( + null, + arguments + ); + }), + (Module._ts_parser_parse_wasm = function () { + return (Module._ts_parser_parse_wasm = + Module.asm.ts_parser_parse_wasm).apply(null, arguments); + }), + (Module._ts_language_type_is_named_wasm = function () { + return (Module._ts_language_type_is_named_wasm = + Module.asm.ts_language_type_is_named_wasm).apply( + null, + arguments + ); + }), + (Module._ts_language_type_is_visible_wasm = function () { + return (Module._ts_language_type_is_visible_wasm = + Module.asm.ts_language_type_is_visible_wasm).apply( + null, + arguments + ); + }), + (Module._ts_tree_root_node_wasm = function () { + return (Module._ts_tree_root_node_wasm = + Module.asm.ts_tree_root_node_wasm).apply( + null, + arguments + ); + }), + (Module._ts_tree_edit_wasm = function () { + return (Module._ts_tree_edit_wasm = + Module.asm.ts_tree_edit_wasm).apply(null, arguments); + }), + (Module._ts_tree_get_changed_ranges_wasm = function () { + return (Module._ts_tree_get_changed_ranges_wasm = + Module.asm.ts_tree_get_changed_ranges_wasm).apply( + null, + arguments + ); + }), + (Module._ts_tree_cursor_new_wasm = function () { + return (Module._ts_tree_cursor_new_wasm = + Module.asm.ts_tree_cursor_new_wasm).apply( + null, + arguments + ); + }), + (Module._ts_tree_cursor_delete_wasm = function () { + return (Module._ts_tree_cursor_delete_wasm = + Module.asm.ts_tree_cursor_delete_wasm).apply( + null, + arguments + ); + }), + (Module._ts_tree_cursor_reset_wasm = function () { + return (Module._ts_tree_cursor_reset_wasm = + Module.asm.ts_tree_cursor_reset_wasm).apply( + null, + arguments + ); + }), + (Module._ts_tree_cursor_goto_first_child_wasm = function () { + return (Module._ts_tree_cursor_goto_first_child_wasm = + Module.asm.ts_tree_cursor_goto_first_child_wasm).apply( + null, + arguments + ); + }), + (Module._ts_tree_cursor_goto_next_sibling_wasm = function () { + return (Module._ts_tree_cursor_goto_next_sibling_wasm = + Module.asm.ts_tree_cursor_goto_next_sibling_wasm).apply( + null, + arguments + ); + }), + (Module._ts_tree_cursor_goto_parent_wasm = function () { + return (Module._ts_tree_cursor_goto_parent_wasm = + Module.asm.ts_tree_cursor_goto_parent_wasm).apply( + null, + arguments + ); + }), + (Module._ts_tree_cursor_current_node_type_id_wasm = function () { + return (Module._ts_tree_cursor_current_node_type_id_wasm = + Module.asm.ts_tree_cursor_current_node_type_id_wasm).apply( + null, + arguments + ); + }), + (Module._ts_tree_cursor_current_node_is_named_wasm = function () { + return (Module._ts_tree_cursor_current_node_is_named_wasm = + Module.asm.ts_tree_cursor_current_node_is_named_wasm).apply( + null, + arguments + ); + }), + (Module._ts_tree_cursor_current_node_is_missing_wasm = function () { + return (Module._ts_tree_cursor_current_node_is_missing_wasm = + Module.asm.ts_tree_cursor_current_node_is_missing_wasm).apply( + null, + arguments + ); + }), + (Module._ts_tree_cursor_current_node_id_wasm = function () { + return (Module._ts_tree_cursor_current_node_id_wasm = + Module.asm.ts_tree_cursor_current_node_id_wasm).apply( + null, + arguments + ); + }), + (Module._ts_tree_cursor_start_position_wasm = function () { + return (Module._ts_tree_cursor_start_position_wasm = + Module.asm.ts_tree_cursor_start_position_wasm).apply( + null, + arguments + ); + }), + (Module._ts_tree_cursor_end_position_wasm = function () { + return (Module._ts_tree_cursor_end_position_wasm = + Module.asm.ts_tree_cursor_end_position_wasm).apply( + null, + arguments + ); + }), + (Module._ts_tree_cursor_start_index_wasm = function () { + return (Module._ts_tree_cursor_start_index_wasm = + Module.asm.ts_tree_cursor_start_index_wasm).apply( + null, + arguments + ); + }), + (Module._ts_tree_cursor_end_index_wasm = function () { + return (Module._ts_tree_cursor_end_index_wasm = + Module.asm.ts_tree_cursor_end_index_wasm).apply( + null, + arguments + ); + }), + (Module._ts_tree_cursor_current_field_id_wasm = function () { + return (Module._ts_tree_cursor_current_field_id_wasm = + Module.asm.ts_tree_cursor_current_field_id_wasm).apply( + null, + arguments + ); + }), + (Module._ts_tree_cursor_current_node_wasm = function () { + return (Module._ts_tree_cursor_current_node_wasm = + Module.asm.ts_tree_cursor_current_node_wasm).apply( + null, + arguments + ); + }), + (Module._ts_node_symbol_wasm = function () { + return (Module._ts_node_symbol_wasm = + Module.asm.ts_node_symbol_wasm).apply(null, arguments); + }), + (Module._ts_node_child_count_wasm = function () { + return (Module._ts_node_child_count_wasm = + Module.asm.ts_node_child_count_wasm).apply( + null, + arguments + ); + }), + (Module._ts_node_named_child_count_wasm = function () { + return (Module._ts_node_named_child_count_wasm = + Module.asm.ts_node_named_child_count_wasm).apply( + null, + arguments + ); + }), + (Module._ts_node_child_wasm = function () { + return (Module._ts_node_child_wasm = + Module.asm.ts_node_child_wasm).apply(null, arguments); + }), + (Module._ts_node_named_child_wasm = function () { + return (Module._ts_node_named_child_wasm = + Module.asm.ts_node_named_child_wasm).apply( + null, + arguments + ); + }), + (Module._ts_node_child_by_field_id_wasm = function () { + return (Module._ts_node_child_by_field_id_wasm = + Module.asm.ts_node_child_by_field_id_wasm).apply( + null, + arguments + ); + }), + (Module._ts_node_next_sibling_wasm = function () { + return (Module._ts_node_next_sibling_wasm = + Module.asm.ts_node_next_sibling_wasm).apply( + null, + arguments + ); + }), + (Module._ts_node_prev_sibling_wasm = function () { + return (Module._ts_node_prev_sibling_wasm = + Module.asm.ts_node_prev_sibling_wasm).apply( + null, + arguments + ); + }), + (Module._ts_node_next_named_sibling_wasm = function () { + return (Module._ts_node_next_named_sibling_wasm = + Module.asm.ts_node_next_named_sibling_wasm).apply( + null, + arguments + ); + }), + (Module._ts_node_prev_named_sibling_wasm = function () { + return (Module._ts_node_prev_named_sibling_wasm = + Module.asm.ts_node_prev_named_sibling_wasm).apply( + null, + arguments + ); + }), + (Module._ts_node_parent_wasm = function () { + return (Module._ts_node_parent_wasm = + Module.asm.ts_node_parent_wasm).apply(null, arguments); + }), + (Module._ts_node_descendant_for_index_wasm = function () { + return (Module._ts_node_descendant_for_index_wasm = + Module.asm.ts_node_descendant_for_index_wasm).apply( + null, + arguments + ); + }), + (Module._ts_node_named_descendant_for_index_wasm = function () { + return (Module._ts_node_named_descendant_for_index_wasm = + Module.asm.ts_node_named_descendant_for_index_wasm).apply( + null, + arguments + ); + }), + (Module._ts_node_descendant_for_position_wasm = function () { + return (Module._ts_node_descendant_for_position_wasm = + Module.asm.ts_node_descendant_for_position_wasm).apply( + null, + arguments + ); + }), + (Module._ts_node_named_descendant_for_position_wasm = function () { + return (Module._ts_node_named_descendant_for_position_wasm = + Module.asm.ts_node_named_descendant_for_position_wasm).apply( + null, + arguments + ); + }), + (Module._ts_node_start_point_wasm = function () { + return (Module._ts_node_start_point_wasm = + Module.asm.ts_node_start_point_wasm).apply( + null, + arguments + ); + }), + (Module._ts_node_end_point_wasm = function () { + return (Module._ts_node_end_point_wasm = + Module.asm.ts_node_end_point_wasm).apply( + null, + arguments + ); + }), + (Module._ts_node_start_index_wasm = function () { + return (Module._ts_node_start_index_wasm = + Module.asm.ts_node_start_index_wasm).apply( + null, + arguments + ); + }), + (Module._ts_node_end_index_wasm = function () { + return (Module._ts_node_end_index_wasm = + Module.asm.ts_node_end_index_wasm).apply( + null, + arguments + ); + }), + (Module._ts_node_to_string_wasm = function () { + return (Module._ts_node_to_string_wasm = + Module.asm.ts_node_to_string_wasm).apply( + null, + arguments + ); + }), + (Module._ts_node_children_wasm = function () { + return (Module._ts_node_children_wasm = + Module.asm.ts_node_children_wasm).apply( + null, + arguments + ); + }), + (Module._ts_node_named_children_wasm = function () { + return (Module._ts_node_named_children_wasm = + Module.asm.ts_node_named_children_wasm).apply( + null, + arguments + ); + }), + (Module._ts_node_descendants_of_type_wasm = function () { + return (Module._ts_node_descendants_of_type_wasm = + Module.asm.ts_node_descendants_of_type_wasm).apply( + null, + arguments + ); + }), + (Module._ts_node_is_named_wasm = function () { + return (Module._ts_node_is_named_wasm = + Module.asm.ts_node_is_named_wasm).apply( + null, + arguments + ); + }), + (Module._ts_node_has_changes_wasm = function () { + return (Module._ts_node_has_changes_wasm = + Module.asm.ts_node_has_changes_wasm).apply( + null, + arguments + ); + }), + (Module._ts_node_has_error_wasm = function () { + return (Module._ts_node_has_error_wasm = + Module.asm.ts_node_has_error_wasm).apply( + null, + arguments + ); + }), + (Module._ts_node_is_missing_wasm = function () { + return (Module._ts_node_is_missing_wasm = + Module.asm.ts_node_is_missing_wasm).apply( + null, + arguments + ); + }), + (Module._ts_query_matches_wasm = function () { + return (Module._ts_query_matches_wasm = + Module.asm.ts_query_matches_wasm).apply( + null, + arguments + ); + }), + (Module._ts_query_captures_wasm = function () { + return (Module._ts_query_captures_wasm = + Module.asm.ts_query_captures_wasm).apply( + null, + arguments + ); + }), + (Module._towupper = function () { + return (Module._towupper = Module.asm.towupper).apply( + null, + arguments + ); + }), + (Module._iswalpha = function () { + return (Module._iswalpha = Module.asm.iswalpha).apply( + null, + arguments + ); + }), + (Module._iswlower = function () { + return (Module._iswlower = Module.asm.iswlower).apply( + null, + arguments + ); + }), + (Module._iswdigit = function () { + return (Module._iswdigit = Module.asm.iswdigit).apply( + null, + arguments + ); + }), + (Module._memchr = function () { + return (Module._memchr = Module.asm.memchr).apply( + null, + arguments + ); + }), + (Module.___errno_location = function () { + return ($e = Module.___errno_location = + Module.asm.__errno_location).apply(null, arguments); + })), + je = + ((Module._strlen = function () { + return (Module._strlen = Module.asm.strlen).apply( + null, + arguments + ); + }), + (Module.stackSave = function () { + return (je = Module.stackSave = + Module.asm.stackSave).apply(null, arguments); + })), + Ue = (Module.stackRestore = function () { + return (Ue = Module.stackRestore = + Module.asm.stackRestore).apply(null, arguments); + }), + De = (Module.stackAlloc = function () { + return (De = Module.stackAlloc = + Module.asm.stackAlloc).apply(null, arguments); + }), + ze = (Module._setThrew = function () { + return (ze = Module._setThrew = Module.asm.setThrew).apply( + null, + arguments + ); + }); + (Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev = function () { + return (Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev = + Module.asm._ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev).apply( + null, + arguments + ); + }), + (Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__grow_byEmmmmmm = function () { + return (Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__grow_byEmmmmmm = + Module.asm._ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__grow_byEmmmmmm).apply( + null, + arguments + ); + }), + (Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcm = function () { + return (Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcm = + Module.asm._ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEPKcm).apply( + null, + arguments + ); + }), + (Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEm = function () { + return (Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEm = + Module.asm._ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7reserveEm).apply( + null, + arguments + ); + }), + (Module.__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4copyEPcmm = function () { + return (Module.__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4copyEPcmm = + Module.asm._ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4copyEPcmm).apply( + null, + arguments + ); + }), + (Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9push_backEc = function () { + return (Module.__ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9push_backEc = + Module.asm._ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9push_backEc).apply( + null, + arguments + ); + }), + (Module.__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev = function () { + return (Module.__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev = + Module.asm._ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEED2Ev).apply( + null, + arguments + ); + }), + (Module.__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9push_backEw = function () { + return (Module.__ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9push_backEw = + Module.asm._ZNSt3__212basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE9push_backEw).apply( + null, + arguments + ); + }), + (Module.__Znwm = function () { + return (Module.__Znwm = Module.asm._Znwm).apply( + null, + arguments + ); + }), + (Module.__ZdlPv = function () { + return (Module.__ZdlPv = Module.asm._ZdlPv).apply( + null, + arguments + ); + }), + (Module.__ZNKSt3__220__vector_base_commonILb1EE20__throw_length_errorEv = function () { + return (Module.__ZNKSt3__220__vector_base_commonILb1EE20__throw_length_errorEv = + Module.asm._ZNKSt3__220__vector_base_commonILb1EE20__throw_length_errorEv).apply( + null, + arguments + ); + }), + (Module._orig$ts_parser_timeout_micros = function () { + return (Module._orig$ts_parser_timeout_micros = + Module.asm.orig$ts_parser_timeout_micros).apply( + null, + arguments + ); + }), + (Module._orig$ts_parser_set_timeout_micros = function () { + return (Module._orig$ts_parser_set_timeout_micros = + Module.asm.orig$ts_parser_set_timeout_micros).apply( + null, + arguments + ); + }); + function Ge(e3) { + (this.name = 'ExitStatus'), + (this.message = 'Program terminated with exit(' + e3 + ')'), + (this.status = e3); + } + Module.allocate = function (e3, t3) { + let r2; + return ( + (r2 = t3 == k ? De(e3.length) : Fe(e3.length)), + e3.subarray || e3.slice + ? R.set(e3, r2) + : R.set(new Uint8Array(e3), r2), + r2 + ); + }; + te = function e3() { + Oe || Be(), Oe || (te = e3); + }; + let He = false; + function Be(e3) { + function t3() { + Oe || + ((Oe = true), + (Module.calledRun = true), + N || + ((J = true), + fe(V), + fe(X), + Module.onRuntimeInitialized && + Module.onRuntimeInitialized(), + Ve && + (function (e4) { + let t4 = Module._main; + if (t4) { + let r2 = (e4 = e4 || []).length + 1, + n2 = De(4 * (r2 + 1)); + L[n2 >> 2] = z(_); + for (let s2 = 1; s2 < r2; s2++) { + L[(n2 >> 2) + s2] = z(e4[s2 - 1]); + } + L[(n2 >> 2) + r2] = 0; + try { + Ke(t4(r2, n2), true); + } catch (e5) { + if (e5 instanceof Ge) { + return; + } + if (e5 == 'unwind') { + return; + } + let o2 = e5; + e5 && + typeof e5 === 'object' && + e5.stack && + (o2 = [e5, e5.stack]), + h('exception thrown: ' + o2), + a(1, e5); + } finally { + true; + } + } + })(e3), + (function () { + if (Module.postRun) { + for ( + typeof Module.postRun === 'function' && + (Module.postRun = [Module.postRun]); + Module.postRun.length; + + ) { + (e4 = Module.postRun.shift()), Q.unshift(e4); + } + } + let e4; + fe(Q); + })())); + } + (e3 = e3 || o), + Y > 0 || + (!He && + ((function () { + if (E.length) { + if (!c) { + return ( + re(), + void E.reduce(function (e4, t4) { + return e4.then(function () { + return xe(t4, { + loadAsync: true, + global: true, + nodelete: true, + allowUndefined: true, + }); + }); + }, Promise.resolve()).then(function () { + ne(), Ne(); + }) + ); + } + E.forEach(function (e4) { + xe(e4, { + global: true, + nodelete: true, + allowUndefined: true, + }); + }), + Ne(); + } else { + Ne(); + } + })(), + (He = true), + Y > 0)) || + (!(function () { + if (Module.preRun) { + for ( + typeof Module.preRun === 'function' && + (Module.preRun = [Module.preRun]); + Module.preRun.length; + + ) { + (e4 = Module.preRun.shift()), K.unshift(e4); + } + } + let e4; + fe(K); + })(), + Y > 0 || + (Module.setStatus + ? (Module.setStatus('Running...'), + setTimeout(function () { + setTimeout(function () { + Module.setStatus(''); + }, 1), + t3(); + }, 1)) + : t3())); + } + function Ke(e3, t3) { + e3, + (t3 && ge() && e3 === 0) || + (ge() || + (true, Module.onExit && Module.onExit(e3), (N = true)), + a(e3, new Ge(e3))); + } + if (((Module.run = Be), Module.preInit)) { + for ( + typeof Module.preInit === 'function' && + (Module.preInit = [Module.preInit]); + Module.preInit.length > 0; + + ) { + Module.preInit.pop()(); + } + } + var Ve = true; + Module.noInitialRun && (Ve = false), Be(); + const Xe = Module, + Qe = {}, + Je = 4, + Ye = 5 * Je, + et = 2 * Je, + tt = 2 * Je + 2 * et, + rt = { row: 0, column: 0 }, + nt = /[\w-.]*/g, + st = 1, + ot = 2, + _t = /^_?tree_sitter_\w+/; + let at, ut, it, lt, dt; + class ParserImpl { + static init() { + (it = Xe._ts_init()), + (at = x(it, 'i32')), + (ut = x(it + Je, 'i32')); + } + initialize() { + Xe._ts_parser_new_wasm(), + (this[0] = x(it, 'i32')), + (this[1] = x(it + Je, 'i32')); + } + delete() { + Xe._ts_parser_delete(this[0]), + Xe._free(this[1]), + (this[0] = 0), + (this[1] = 0); + } + setLanguage(e3) { + let t3; + if (e3) { + if (e3.constructor !== Language) { + throw new Error('Argument must be a Language'); + } + { + t3 = e3[0]; + const r2 = Xe._ts_language_version(t3); + if (r2 < ut || at < r2) { + throw new Error( + `Incompatible language version ${r2}. Compatibility range ${ut} through ${at}.` + ); + } + } + } else { + (t3 = 0), (e3 = null); + } + return ( + (this.language = e3), + Xe._ts_parser_set_language(this[0], t3), + this + ); + } + getLanguage() { + return this.language; + } + parse(e3, t3, r2) { + if (typeof e3 === 'string') { + lt = (t4, r3, n3) => e3.slice(t4, n3); + } else { + if (typeof e3 !== 'function') { + throw new Error( + 'Argument must be a string or a function' + ); + } + lt = e3; + } + this.logCallback + ? ((dt = this.logCallback), + Xe._ts_parser_enable_logger_wasm(this[0], 1)) + : ((dt = null), + Xe._ts_parser_enable_logger_wasm(this[0], 0)); + let n2 = 0, + s2 = 0; + if (r2 && r2.includedRanges) { + n2 = r2.includedRanges.length; + let e4 = (s2 = Xe._calloc(n2, tt)); + for (let t4 = 0; t4 < n2; t4++) { + vt(e4, r2.includedRanges[t4]), (e4 += tt); + } + } + const o2 = Xe._ts_parser_parse_wasm( + this[0], + this[1], + t3 ? t3[0] : 0, + s2, + n2 + ); + if (!o2) { + throw ( + ((lt = null), (dt = null), new Error('Parsing failed')) + ); + } + const _2 = new Tree(Qe, o2, this.language, lt); + return (lt = null), (dt = null), _2; + } + reset() { + Xe._ts_parser_reset(this[0]); + } + setTimeoutMicros(e3) { + Xe._ts_parser_set_timeout_micros(this[0], e3); + } + getTimeoutMicros() { + return Xe._ts_parser_timeout_micros(this[0]); + } + setLogger(e3) { + if (e3) { + if (typeof e3 !== 'function') { + throw new Error('Logger callback must be a function'); + } + } else { + e3 = null; + } + return (this.logCallback = e3), this; + } + getLogger() { + return this.logCallback; + } + } + class Tree { + constructor(e3, t3, r2, n2) { + ft(e3), + (this[0] = t3), + (this.language = r2), + (this.textCallback = n2); + } + copy() { + const e3 = Xe._ts_tree_copy(this[0]); + return new Tree(Qe, e3, this.language, this.textCallback); + } + delete() { + Xe._ts_tree_delete(this[0]), (this[0] = 0); + } + edit(e3) { + !(function (e4) { + let t3 = it; + Mt(t3, e4.startPosition), + Mt((t3 += et), e4.oldEndPosition), + Mt((t3 += et), e4.newEndPosition), + S((t3 += et), e4.startIndex, 'i32'), + S((t3 += Je), e4.oldEndIndex, 'i32'), + S((t3 += Je), e4.newEndIndex, 'i32'), + (t3 += Je); + })(e3), + Xe._ts_tree_edit_wasm(this[0]); + } + get rootNode() { + return Xe._ts_tree_root_node_wasm(this[0]), gt(this); + } + getLanguage() { + return this.language; + } + walk() { + return this.rootNode.walk(); + } + getChangedRanges(e3) { + if (e3.constructor !== Tree) { + throw new TypeError('Argument must be a Tree'); + } + Xe._ts_tree_get_changed_ranges_wasm(this[0], e3[0]); + const t3 = x(it, 'i32'), + r2 = x(it + Je, 'i32'), + n2 = new Array(t3); + if (t3 > 0) { + let e4 = r2; + for (let r3 = 0; r3 < t3; r3++) { + (n2[r3] = Et(e4)), (e4 += tt); + } + Xe._free(r2); + } + return n2; + } + } + class Node2 { + constructor(e3, t3) { + ft(e3), (this.tree = t3); + } + get typeId() { + return ht(this), Xe._ts_node_symbol_wasm(this.tree[0]); + } + get type() { + return this.tree.language.types[this.typeId] || 'ERROR'; + } + get endPosition() { + return ( + ht(this), Xe._ts_node_end_point_wasm(this.tree[0]), bt(it) + ); + } + get endIndex() { + return ht(this), Xe._ts_node_end_index_wasm(this.tree[0]); + } + get text() { + return ct(this.tree, this.startIndex, this.endIndex); + } + isNamed() { + return ( + ht(this), Xe._ts_node_is_named_wasm(this.tree[0]) === 1 + ); + } + hasError() { + return ( + ht(this), Xe._ts_node_has_error_wasm(this.tree[0]) === 1 + ); + } + hasChanges() { + return ( + ht(this), Xe._ts_node_has_changes_wasm(this.tree[0]) === 1 + ); + } + isMissing() { + return ( + ht(this), Xe._ts_node_is_missing_wasm(this.tree[0]) === 1 + ); + } + equals(e3) { + return this.id === e3.id; + } + child(e3) { + return ( + ht(this), + Xe._ts_node_child_wasm(this.tree[0], e3), + gt(this.tree) + ); + } + namedChild(e3) { + return ( + ht(this), + Xe._ts_node_named_child_wasm(this.tree[0], e3), + gt(this.tree) + ); + } + childForFieldId(e3) { + return ( + ht(this), + Xe._ts_node_child_by_field_id_wasm(this.tree[0], e3), + gt(this.tree) + ); + } + childForFieldName(e3) { + const t3 = this.tree.language.fields.indexOf(e3); + if (t3 !== -1) { + return this.childForFieldId(t3); + } + } + get childCount() { + return ht(this), Xe._ts_node_child_count_wasm(this.tree[0]); + } + get namedChildCount() { + return ( + ht(this), Xe._ts_node_named_child_count_wasm(this.tree[0]) + ); + } + get firstChild() { + return this.child(0); + } + get firstNamedChild() { + return this.namedChild(0); + } + get lastChild() { + return this.child(this.childCount - 1); + } + get lastNamedChild() { + return this.namedChild(this.namedChildCount - 1); + } + get children() { + if (!this._children) { + ht(this), Xe._ts_node_children_wasm(this.tree[0]); + const e3 = x(it, 'i32'), + t3 = x(it + Je, 'i32'); + if (((this._children = new Array(e3)), e3 > 0)) { + let r2 = t3; + for (let t4 = 0; t4 < e3; t4++) { + (this._children[t4] = gt(this.tree, r2)), (r2 += Ye); + } + Xe._free(t3); + } + } + return this._children; + } + get namedChildren() { + if (!this._namedChildren) { + ht(this), Xe._ts_node_named_children_wasm(this.tree[0]); + const e3 = x(it, 'i32'), + t3 = x(it + Je, 'i32'); + if (((this._namedChildren = new Array(e3)), e3 > 0)) { + let r2 = t3; + for (let t4 = 0; t4 < e3; t4++) { + (this._namedChildren[t4] = gt(this.tree, r2)), + (r2 += Ye); + } + Xe._free(t3); + } + } + return this._namedChildren; + } + descendantsOfType(e3, t3, r2) { + Array.isArray(e3) || (e3 = [e3]), + t3 || (t3 = rt), + r2 || (r2 = rt); + const n2 = [], + s2 = this.tree.language.types; + for (let t4 = 0, r3 = s2.length; t4 < r3; t4++) { + e3.includes(s2[t4]) && n2.push(t4); + } + const o2 = Xe._malloc(Je * n2.length); + for (let e4 = 0, t4 = n2.length; e4 < t4; e4++) { + S(o2 + e4 * Je, n2[e4], 'i32'); + } + ht(this), + Xe._ts_node_descendants_of_type_wasm( + this.tree[0], + o2, + n2.length, + t3.row, + t3.column, + r2.row, + r2.column + ); + const _2 = x(it, 'i32'), + a2 = x(it + Je, 'i32'), + u2 = new Array(_2); + if (_2 > 0) { + let e4 = a2; + for (let t4 = 0; t4 < _2; t4++) { + (u2[t4] = gt(this.tree, e4)), (e4 += Ye); + } + } + return Xe._free(a2), Xe._free(o2), u2; + } + get nextSibling() { + return ( + ht(this), + Xe._ts_node_next_sibling_wasm(this.tree[0]), + gt(this.tree) + ); + } + get previousSibling() { + return ( + ht(this), + Xe._ts_node_prev_sibling_wasm(this.tree[0]), + gt(this.tree) + ); + } + get nextNamedSibling() { + return ( + ht(this), + Xe._ts_node_next_named_sibling_wasm(this.tree[0]), + gt(this.tree) + ); + } + get previousNamedSibling() { + return ( + ht(this), + Xe._ts_node_prev_named_sibling_wasm(this.tree[0]), + gt(this.tree) + ); + } + get parent() { + return ( + ht(this), + Xe._ts_node_parent_wasm(this.tree[0]), + gt(this.tree) + ); + } + descendantForIndex(e3, t3 = e3) { + if (typeof e3 !== 'number' || typeof t3 !== 'number') { + throw new Error('Arguments must be numbers'); + } + ht(this); + let r2 = it + Ye; + return ( + S(r2, e3, 'i32'), + S(r2 + Je, t3, 'i32'), + Xe._ts_node_descendant_for_index_wasm(this.tree[0]), + gt(this.tree) + ); + } + namedDescendantForIndex(e3, t3 = e3) { + if (typeof e3 !== 'number' || typeof t3 !== 'number') { + throw new Error('Arguments must be numbers'); + } + ht(this); + let r2 = it + Ye; + return ( + S(r2, e3, 'i32'), + S(r2 + Je, t3, 'i32'), + Xe._ts_node_named_descendant_for_index_wasm(this.tree[0]), + gt(this.tree) + ); + } + descendantForPosition(e3, t3 = e3) { + if (!pt(e3) || !pt(t3)) { + throw new Error( + 'Arguments must be {row, column} objects' + ); + } + ht(this); + let r2 = it + Ye; + return ( + Mt(r2, e3), + Mt(r2 + et, t3), + Xe._ts_node_descendant_for_position_wasm(this.tree[0]), + gt(this.tree) + ); + } + namedDescendantForPosition(e3, t3 = e3) { + if (!pt(e3) || !pt(t3)) { + throw new Error( + 'Arguments must be {row, column} objects' + ); + } + ht(this); + let r2 = it + Ye; + return ( + Mt(r2, e3), + Mt(r2 + et, t3), + Xe._ts_node_named_descendant_for_position_wasm( + this.tree[0] + ), + gt(this.tree) + ); + } + walk() { + return ( + ht(this), + Xe._ts_tree_cursor_new_wasm(this.tree[0]), + new TreeCursor(Qe, this.tree) + ); + } + toString() { + ht(this); + const e3 = Xe._ts_node_to_string_wasm(this.tree[0]), + t3 = (function (e4) { + for (let t4 = ''; ; ) { + let r2 = R[e4++ >> 0]; + if (!r2) { + return t4; + } + t4 += String.fromCharCode(r2); + } + })(e3); + return Xe._free(e3), t3; + } + } + class TreeCursor { + constructor(e3, t3) { + ft(e3), (this.tree = t3), yt(this); + } + delete() { + wt(this), + Xe._ts_tree_cursor_delete_wasm(this.tree[0]), + (this[0] = this[1] = this[2] = 0); + } + reset(e3) { + ht(e3), + wt(this, it + Ye), + Xe._ts_tree_cursor_reset_wasm(this.tree[0]), + yt(this); + } + get nodeType() { + return this.tree.language.types[this.nodeTypeId] || 'ERROR'; + } + get nodeTypeId() { + return ( + wt(this), + Xe._ts_tree_cursor_current_node_type_id_wasm(this.tree[0]) + ); + } + get nodeId() { + return ( + wt(this), + Xe._ts_tree_cursor_current_node_id_wasm(this.tree[0]) + ); + } + get nodeIsNamed() { + return ( + wt(this), + Xe._ts_tree_cursor_current_node_is_named_wasm( + this.tree[0] + ) === 1 + ); + } + get nodeIsMissing() { + return ( + wt(this), + Xe._ts_tree_cursor_current_node_is_missing_wasm( + this.tree[0] + ) === 1 + ); + } + get nodeText() { + wt(this); + const e3 = Xe._ts_tree_cursor_start_index_wasm( + this.tree[0] + ), + t3 = Xe._ts_tree_cursor_end_index_wasm(this.tree[0]); + return ct(this.tree, e3, t3); + } + get startPosition() { + return ( + wt(this), + Xe._ts_tree_cursor_start_position_wasm(this.tree[0]), + bt(it) + ); + } + get endPosition() { + return ( + wt(this), + Xe._ts_tree_cursor_end_position_wasm(this.tree[0]), + bt(it) + ); + } + get startIndex() { + return ( + wt(this), + Xe._ts_tree_cursor_start_index_wasm(this.tree[0]) + ); + } + get endIndex() { + return ( + wt(this), Xe._ts_tree_cursor_end_index_wasm(this.tree[0]) + ); + } + currentNode() { + return ( + wt(this), + Xe._ts_tree_cursor_current_node_wasm(this.tree[0]), + gt(this.tree) + ); + } + currentFieldId() { + return ( + wt(this), + Xe._ts_tree_cursor_current_field_id_wasm(this.tree[0]) + ); + } + currentFieldName() { + return this.tree.language.fields[this.currentFieldId()]; + } + gotoFirstChild() { + wt(this); + const e3 = Xe._ts_tree_cursor_goto_first_child_wasm( + this.tree[0] + ); + return yt(this), e3 === 1; + } + gotoNextSibling() { + wt(this); + const e3 = Xe._ts_tree_cursor_goto_next_sibling_wasm( + this.tree[0] + ); + return yt(this), e3 === 1; + } + gotoParent() { + wt(this); + const e3 = Xe._ts_tree_cursor_goto_parent_wasm( + this.tree[0] + ); + return yt(this), e3 === 1; + } + } + class Language { + constructor(e3, t3) { + ft(e3), + (this[0] = t3), + (this.types = new Array( + Xe._ts_language_symbol_count(this[0]) + )); + for (let e4 = 0, t4 = this.types.length; e4 < t4; e4++) { + Xe._ts_language_symbol_type(this[0], e4) < 2 && + (this.types[e4] = $( + Xe._ts_language_symbol_name(this[0], e4) + )); + } + this.fields = new Array( + Xe._ts_language_field_count(this[0]) + 1 + ); + for (let e4 = 0, t4 = this.fields.length; e4 < t4; e4++) { + const t5 = Xe._ts_language_field_name_for_id(this[0], e4); + this.fields[e4] = t5 !== 0 ? $(t5) : null; + } + } + get version() { + return Xe._ts_language_version(this[0]); + } + get fieldCount() { + return this.fields.length - 1; + } + fieldIdForName(e3) { + const t3 = this.fields.indexOf(e3); + return t3 !== -1 ? t3 : null; + } + fieldNameForId(e3) { + return this.fields[e3] || null; + } + idForNodeType(e3, t3) { + const r2 = D(e3), + n2 = Xe._malloc(r2 + 1); + U(e3, n2, r2 + 1); + const s2 = Xe._ts_language_symbol_for_name( + this[0], + n2, + r2, + t3 + ); + return Xe._free(n2), s2 || null; + } + get nodeTypeCount() { + return Xe._ts_language_symbol_count(this[0]); + } + nodeTypeForId(e3) { + const t3 = Xe._ts_language_symbol_name(this[0], e3); + return t3 ? $(t3) : null; + } + nodeTypeIsNamed(e3) { + return !!Xe._ts_language_type_is_named_wasm(this[0], e3); + } + nodeTypeIsVisible(e3) { + return !!Xe._ts_language_type_is_visible_wasm(this[0], e3); + } + query(e3) { + const t3 = D(e3), + r2 = Xe._malloc(t3 + 1); + U(e3, r2, t3 + 1); + const n2 = Xe._ts_query_new(this[0], r2, t3, it, it + Je); + if (!n2) { + const t4 = x(it + Je, 'i32'), + n3 = $(r2, x(it, 'i32')).length, + s3 = e3.substr(n3, 100).split('\n')[0]; + let o3, + _3 = s3.match(nt)[0]; + switch (t4) { + case 2: + o3 = new RangeError(`Bad node name '${_3}'`); + break; + case 3: + o3 = new RangeError(`Bad field name '${_3}'`); + break; + case 4: + o3 = new RangeError(`Bad capture name @${_3}`); + break; + case 5: + (o3 = new TypeError( + `Bad pattern structure at offset ${n3}: '${s3}'...` + )), + (_3 = ''); + break; + default: + (o3 = new SyntaxError( + `Bad syntax at offset ${n3}: '${s3}'...` + )), + (_3 = ''); + } + throw ( + ((o3.index = n3), + (o3.length = _3.length), + Xe._free(r2), + o3) + ); + } + const s2 = Xe._ts_query_string_count(n2), + o2 = Xe._ts_query_capture_count(n2), + _2 = Xe._ts_query_pattern_count(n2), + a2 = new Array(o2), + u2 = new Array(s2); + for (let e4 = 0; e4 < o2; e4++) { + const t4 = Xe._ts_query_capture_name_for_id(n2, e4, it), + r3 = x(it, 'i32'); + a2[e4] = $(t4, r3); + } + for (let e4 = 0; e4 < s2; e4++) { + const t4 = Xe._ts_query_string_value_for_id(n2, e4, it), + r3 = x(it, 'i32'); + u2[e4] = $(t4, r3); + } + const i2 = new Array(_2), + l2 = new Array(_2), + d2 = new Array(_2), + c2 = new Array(_2), + m2 = new Array(_2); + for (let e4 = 0; e4 < _2; e4++) { + const t4 = Xe._ts_query_predicates_for_pattern( + n2, + e4, + it + ), + r3 = x(it, 'i32'); + (c2[e4] = []), (m2[e4] = []); + const s3 = []; + let o3 = t4; + for (let t5 = 0; t5 < r3; t5++) { + const t6 = x(o3, 'i32'), + r4 = x((o3 += Je), 'i32'); + if (((o3 += Je), t6 === st)) { + s3.push({ type: 'capture', name: a2[r4] }); + } else if (t6 === ot) { + s3.push({ type: 'string', value: u2[r4] }); + } else if (s3.length > 0) { + if (s3[0].type !== 'string') { + throw new Error( + 'Predicates must begin with a literal value' + ); + } + const t7 = s3[0].value; + let r5 = true; + switch (t7) { + case 'not-eq?': + r5 = false; + case 'eq?': + if (s3.length !== 3) { + throw new Error( + `Wrong number of arguments to \`#eq?\` predicate. Expected 2, got ${ + s3.length - 1 + }` + ); + } + if (s3[1].type !== 'capture') { + throw new Error( + `First argument of \`#eq?\` predicate must be a capture. Got "${s3[1].value}"` + ); + } + if (s3[2].type === 'capture') { + const t8 = s3[1].name, + n4 = s3[2].name; + m2[e4].push(function (e5) { + let s4, o5; + for (const r6 of e5) { + r6.name === t8 && (s4 = r6.node), + r6.name === n4 && (o5 = r6.node); + } + return (s4.text === o5.text) === r5; + }); + } else { + const t8 = s3[1].name, + n4 = s3[2].value; + m2[e4].push(function (e5) { + for (const s4 of e5) { + if (s4.name === t8) { + return (s4.node.text === n4) === r5; + } + } + return false; + }); + } + break; + case 'not-match?': + r5 = false; + case 'match?': + if (s3.length !== 3) { + throw new Error( + `Wrong number of arguments to \`#match?\` predicate. Expected 2, got ${ + s3.length - 1 + }.` + ); + } + if (s3[1].type !== 'capture') { + throw new Error( + `First argument of \`#match?\` predicate must be a capture. Got "${s3[1].value}".` + ); + } + if (s3[2].type !== 'string') { + throw new Error( + `Second argument of \`#match?\` predicate must be a string. Got @${s3[2].value}.` + ); + } + const n3 = s3[1].name, + o4 = new RegExp(s3[2].value); + m2[e4].push(function (e5) { + for (const t8 of e5) { + if (t8.name === n3) { + return o4.test(t8.node.text) === r5; + } + } + return false; + }); + break; + case 'set!': + if (s3.length < 2 || s3.length > 3) { + throw new Error( + `Wrong number of arguments to \`#set!\` predicate. Expected 1 or 2. Got ${ + s3.length - 1 + }.` + ); + } + if (s3.some((e5) => e5.type !== 'string')) { + throw new Error( + 'Arguments to `#set!` predicate must be a strings.".' + ); + } + i2[e4] || (i2[e4] = {}), + (i2[e4][s3[1].value] = s3[2] + ? s3[2].value + : null); + break; + case 'is?': + case 'is-not?': + if (s3.length < 2 || s3.length > 3) { + throw new Error( + `Wrong number of arguments to \`#${t7}\` predicate. Expected 1 or 2. Got ${ + s3.length - 1 + }.` + ); + } + if (s3.some((e5) => e5.type !== 'string')) { + throw new Error( + `Arguments to \`#${t7}\` predicate must be a strings.".` + ); + } + const _3 = t7 === 'is?' ? l2 : d2; + _3[e4] || (_3[e4] = {}), + (_3[e4][s3[1].value] = s3[2] + ? s3[2].value + : null); + break; + default: + c2[e4].push({ + operator: t7, + operands: s3.slice(1), + }); + } + s3.length = 0; + } + } + Object.freeze(i2[e4]), + Object.freeze(l2[e4]), + Object.freeze(d2[e4]); + } + return ( + Xe._free(r2), + new Query( + Qe, + n2, + a2, + m2, + c2, + Object.freeze(i2), + Object.freeze(l2), + Object.freeze(d2) + ) + ); + } + static load(e3) { + let t3; + if (e3 instanceof Uint8Array) { + t3 = Promise.resolve(e3); + } else { + const r3 = e3; + if ( + typeof process !== 'undefined' && + process.versions && + process.versions.node + ) { + const e4 = __require('fs'); + t3 = Promise.resolve(e4.readFileSync(r3)); + } else { + t3 = fetch(r3).then((e4) => + e4.arrayBuffer().then((t4) => { + if (e4.ok) { + return new Uint8Array(t4); + } + { + const r4 = new TextDecoder('utf-8').decode(t4); + throw new Error(`Language.load failed with status ${e4.status}. + +${r4}`); + } + }) + ); + } + } + const r2 = + typeof loadSideModule === 'function' + ? loadSideModule + : Se; + return t3 + .then((e4) => r2(e4, { loadAsync: true })) + .then((e4) => { + const t4 = Object.keys(e4), + r3 = t4.find( + (e5) => + _t.test(e5) && !e5.includes('external_scanner_') + ); + r3 || + console.log(`Couldn't find language function in WASM file. Symbols: +${JSON.stringify(t4, null, 2)}`); + const n2 = e4[r3](); + return new Language(Qe, n2); + }); + } + } + class Query { + constructor(e3, t3, r2, n2, s2, o2, _2, a2) { + ft(e3), + (this[0] = t3), + (this.captureNames = r2), + (this.textPredicates = n2), + (this.predicates = s2), + (this.setProperties = o2), + (this.assertedProperties = _2), + (this.refutedProperties = a2), + (this.exceededMatchLimit = false); + } + delete() { + Xe._ts_query_delete(this[0]), (this[0] = 0); + } + matches(e3, t3, r2, n2) { + t3 || (t3 = rt), r2 || (r2 = rt), n2 || (n2 = {}); + let s2 = n2.matchLimit; + if (s2 === void 0) { + s2 = 0; + } else if (typeof s2 !== 'number') { + throw new Error('Arguments must be numbers'); + } + ht(e3), + Xe._ts_query_matches_wasm( + this[0], + e3.tree[0], + t3.row, + t3.column, + r2.row, + r2.column, + s2 + ); + const o2 = x(it, 'i32'), + _2 = x(it + Je, 'i32'), + a2 = x(it + 2 * Je, 'i32'), + u2 = new Array(o2); + this.exceededMatchLimit = !!a2; + let i2 = 0, + l2 = _2; + for (let t4 = 0; t4 < o2; t4++) { + const r3 = x(l2, 'i32'), + n3 = x((l2 += Je), 'i32'); + l2 += Je; + const s3 = new Array(n3); + if ( + ((l2 = mt(this, e3.tree, l2, s3)), + this.textPredicates[r3].every((e4) => e4(s3))) + ) { + u2[i2++] = { pattern: r3, captures: s3 }; + const e4 = this.setProperties[r3]; + e4 && (u2[t4].setProperties = e4); + const n4 = this.assertedProperties[r3]; + n4 && (u2[t4].assertedProperties = n4); + const o3 = this.refutedProperties[r3]; + o3 && (u2[t4].refutedProperties = o3); + } + } + return (u2.length = i2), Xe._free(_2), u2; + } + captures(e3, t3, r2, n2) { + t3 || (t3 = rt), r2 || (r2 = rt), n2 || (n2 = {}); + let s2 = n2.matchLimit; + if (s2 === void 0) { + s2 = 0; + } else if (typeof s2 !== 'number') { + throw new Error('Arguments must be numbers'); + } + ht(e3), + Xe._ts_query_captures_wasm( + this[0], + e3.tree[0], + t3.row, + t3.column, + r2.row, + r2.column, + s2 + ); + const o2 = x(it, 'i32'), + _2 = x(it + Je, 'i32'), + a2 = x(it + 2 * Je, 'i32'), + u2 = []; + this.exceededMatchLimit = !!a2; + const i2 = []; + let l2 = _2; + for (let t4 = 0; t4 < o2; t4++) { + const t5 = x(l2, 'i32'), + r3 = x((l2 += Je), 'i32'), + n3 = x((l2 += Je), 'i32'); + if ( + ((l2 += Je), + (i2.length = r3), + (l2 = mt(this, e3.tree, l2, i2)), + this.textPredicates[t5].every((e4) => e4(i2))) + ) { + const e4 = i2[n3], + r4 = this.setProperties[t5]; + r4 && (e4.setProperties = r4); + const s3 = this.assertedProperties[t5]; + s3 && (e4.assertedProperties = s3); + const o3 = this.refutedProperties[t5]; + o3 && (e4.refutedProperties = o3), u2.push(e4); + } + } + return Xe._free(_2), u2; + } + predicatesForPattern(e3) { + return this.predicates[e3]; + } + didExceedMatchLimit() { + return this.exceededMatchLimit; + } + } + function ct(e3, t3, r2) { + const n2 = r2 - t3; + let s2 = e3.textCallback(t3, null, r2); + for (t3 += s2.length; t3 < r2; ) { + const n3 = e3.textCallback(t3, null, r2); + if (!(n3 && n3.length > 0)) { + break; + } + (t3 += n3.length), (s2 += n3); + } + return t3 > r2 && (s2 = s2.slice(0, n2)), s2; + } + function mt(e3, t3, r2, n2) { + for (let s2 = 0, o2 = n2.length; s2 < o2; s2++) { + const o3 = x(r2, 'i32'), + _2 = gt(t3, (r2 += Je)); + (r2 += Ye), + (n2[s2] = { name: e3.captureNames[o3], node: _2 }); + } + return r2; + } + function ft(e3) { + if (e3 !== Qe) { + throw new Error('Illegal constructor'); + } + } + function pt(e3) { + return ( + e3 && + typeof e3.row === 'number' && + typeof e3.column === 'number' + ); + } + function ht(e3) { + let t3 = it; + S(t3, e3.id, 'i32'), + S((t3 += Je), e3.startIndex, 'i32'), + S((t3 += Je), e3.startPosition.row, 'i32'), + S((t3 += Je), e3.startPosition.column, 'i32'), + S((t3 += Je), e3[0], 'i32'); + } + function gt(e3, t3 = it) { + const r2 = x(t3, 'i32'); + if (r2 === 0) { + return null; + } + const n2 = x((t3 += Je), 'i32'), + s2 = x((t3 += Je), 'i32'), + o2 = x((t3 += Je), 'i32'), + _2 = x((t3 += Je), 'i32'), + a2 = new Node2(Qe, e3); + return ( + (a2.id = r2), + (a2.startIndex = n2), + (a2.startPosition = { row: s2, column: o2 }), + (a2[0] = _2), + a2 + ); + } + function wt(e3, t3 = it) { + S(t3 + 0 * Je, e3[0], 'i32'), + S(t3 + 1 * Je, e3[1], 'i32'), + S(t3 + 2 * Je, e3[2], 'i32'); + } + function yt(e3) { + (e3[0] = x(it + 0 * Je, 'i32')), + (e3[1] = x(it + 1 * Je, 'i32')), + (e3[2] = x(it + 2 * Je, 'i32')); + } + function Mt(e3, t3) { + S(e3, t3.row, 'i32'), S(e3 + Je, t3.column, 'i32'); + } + function bt(e3) { + return { row: x(e3, 'i32'), column: x(e3 + Je, 'i32') }; + } + function vt(e3, t3) { + Mt(e3, t3.startPosition), + Mt((e3 += et), t3.endPosition), + S((e3 += et), t3.startIndex, 'i32'), + S((e3 += Je), t3.endIndex, 'i32'), + (e3 += Je); + } + function Et(e3) { + const t3 = {}; + return ( + (t3.startPosition = bt(e3)), + (e3 += et), + (t3.endPosition = bt(e3)), + (e3 += et), + (t3.startIndex = x(e3, 'i32')), + (e3 += Je), + (t3.endIndex = x(e3, 'i32')), + t3 + ); + } + for (const e3 of Object.getOwnPropertyNames( + ParserImpl.prototype + )) { + Object.defineProperty(Parser4.prototype, e3, { + value: ParserImpl.prototype[e3], + enumerable: false, + writable: false, + }); + } + (Parser4.Language = Language), + (Module.onRuntimeInitialized = () => { + ParserImpl.init(), e2(); + }); + }))) + ); + } + } + return Parser4; + })(); + typeof exports === 'object' && (module.exports = TreeSitter); + }, + }); + + // server/src/main.ts + let import_vscode_languageserver3 = __toModule(require_main4()); + let import_browser = __toModule(require_browser3()); + let import_tree_sitter3 = __toModule(require_tree_sitter()); + + // server/src/documentStore.ts + let lsp = __toModule(require_main4()); + let import_vscode_languageserver = __toModule(require_main4()); + + // server/node_modules/vscode-languageserver-textdocument/lib/esm/main.js + ('use strict'); + let FullTextDocument = (function () { + function FullTextDocument2(uri, languageId, version, content) { + this._uri = uri; + this._languageId = languageId; + this._version = version; + this._content = content; + this._lineOffsets = void 0; + } + Object.defineProperty(FullTextDocument2.prototype, 'uri', { + get: function () { + return this._uri; + }, + enumerable: true, + configurable: true, + }); + Object.defineProperty(FullTextDocument2.prototype, 'languageId', { + get: function () { + return this._languageId; + }, + enumerable: true, + configurable: true, + }); + Object.defineProperty(FullTextDocument2.prototype, 'version', { + get: function () { + return this._version; + }, + enumerable: true, + configurable: true, + }); + FullTextDocument2.prototype.getText = function (range) { + if (range) { + let start = this.offsetAt(range.start); + let end = this.offsetAt(range.end); + return this._content.substring(start, end); + } + return this._content; + }; + FullTextDocument2.prototype.update = function (changes, version) { + for (let _i = 0, changes_1 = changes; _i < changes_1.length; _i++) { + let change = changes_1[_i]; + if (FullTextDocument2.isIncremental(change)) { + let range = getWellformedRange(change.range); + let startOffset = this.offsetAt(range.start); + let endOffset = this.offsetAt(range.end); + this._content = + this._content.substring(0, startOffset) + + change.text + + this._content.substring(endOffset, this._content.length); + let startLine = Math.max(range.start.line, 0); + let endLine = Math.max(range.end.line, 0); + let lineOffsets = this._lineOffsets; + let addedLineOffsets = computeLineOffsets( + change.text, + false, + startOffset + ); + if (endLine - startLine === addedLineOffsets.length) { + for (var i = 0, len = addedLineOffsets.length; i < len; i++) { + lineOffsets[i + startLine + 1] = addedLineOffsets[i]; + } + } else { + if (addedLineOffsets.length < 1e4) { + lineOffsets.splice.apply( + lineOffsets, + [startLine + 1, endLine - startLine].concat(addedLineOffsets) + ); + } else { + this._lineOffsets = lineOffsets = lineOffsets + .slice(0, startLine + 1) + .concat(addedLineOffsets, lineOffsets.slice(endLine + 1)); + } + } + let diff = change.text.length - (endOffset - startOffset); + if (diff !== 0) { + for ( + var i = startLine + 1 + addedLineOffsets.length, + len = lineOffsets.length; + i < len; + i++ + ) { + lineOffsets[i] = lineOffsets[i] + diff; + } + } + } else if (FullTextDocument2.isFull(change)) { + this._content = change.text; + this._lineOffsets = void 0; + } else { + throw new Error('Unknown change event received'); + } + } + this._version = version; + }; + FullTextDocument2.prototype.getLineOffsets = function () { + if (this._lineOffsets === void 0) { + this._lineOffsets = computeLineOffsets(this._content, true); + } + return this._lineOffsets; + }; + FullTextDocument2.prototype.positionAt = function (offset) { + offset = Math.max(Math.min(offset, this._content.length), 0); + let lineOffsets = this.getLineOffsets(); + let low = 0, + high = lineOffsets.length; + if (high === 0) { + return { line: 0, character: offset }; + } + while (low < high) { + let mid = Math.floor((low + high) / 2); + if (lineOffsets[mid] > offset) { + high = mid; + } else { + low = mid + 1; + } + } + let line = low - 1; + return { line, character: offset - lineOffsets[line] }; + }; + FullTextDocument2.prototype.offsetAt = function (position) { + let lineOffsets = this.getLineOffsets(); + if (position.line >= lineOffsets.length) { + return this._content.length; + } else if (position.line < 0) { + return 0; + } + let lineOffset = lineOffsets[position.line]; + let nextLineOffset = + position.line + 1 < lineOffsets.length + ? lineOffsets[position.line + 1] + : this._content.length; + return Math.max( + Math.min(lineOffset + position.character, nextLineOffset), + lineOffset + ); + }; + Object.defineProperty(FullTextDocument2.prototype, 'lineCount', { + get: function () { + return this.getLineOffsets().length; + }, + enumerable: true, + configurable: true, + }); + FullTextDocument2.isIncremental = function (event) { + let candidate = event; + return ( + candidate !== void 0 && + candidate !== null && + typeof candidate.text === 'string' && + candidate.range !== void 0 && + (candidate.rangeLength === void 0 || + typeof candidate.rangeLength === 'number') + ); + }; + FullTextDocument2.isFull = function (event) { + let candidate = event; + return ( + candidate !== void 0 && + candidate !== null && + typeof candidate.text === 'string' && + candidate.range === void 0 && + candidate.rangeLength === void 0 + ); + }; + return FullTextDocument2; + })(); + let TextDocument; + (function (TextDocument2) { + function create(uri, languageId, version, content) { + return new FullTextDocument(uri, languageId, version, content); + } + TextDocument2.create = create; + function update(document2, changes, version) { + if (document2 instanceof FullTextDocument) { + document2.update(changes, version); + return document2; + } else { + throw new Error( + 'TextDocument.update: document must be created by TextDocument.create' + ); + } + } + TextDocument2.update = update; + function applyEdits(document2, edits) { + let text = document2.getText(); + let sortedEdits = mergeSort( + edits.map(getWellformedEdit), + function (a, b) { + let diff = a.range.start.line - b.range.start.line; + if (diff === 0) { + return a.range.start.character - b.range.start.character; + } + return diff; + } + ); + let lastModifiedOffset = 0; + let spans = []; + for ( + let _i = 0, sortedEdits_1 = sortedEdits; + _i < sortedEdits_1.length; + _i++ + ) { + let e = sortedEdits_1[_i]; + let startOffset = document2.offsetAt(e.range.start); + if (startOffset < lastModifiedOffset) { + throw new Error('Overlapping edit'); + } else if (startOffset > lastModifiedOffset) { + spans.push(text.substring(lastModifiedOffset, startOffset)); + } + if (e.newText.length) { + spans.push(e.newText); + } + lastModifiedOffset = document2.offsetAt(e.range.end); + } + spans.push(text.substr(lastModifiedOffset)); + return spans.join(''); + } + TextDocument2.applyEdits = applyEdits; + })(TextDocument || (TextDocument = {})); + function mergeSort(data, compare) { + if (data.length <= 1) { + return data; + } + let p = (data.length / 2) | 0; + let left = data.slice(0, p); + let right = data.slice(p); + mergeSort(left, compare); + mergeSort(right, compare); + let leftIdx = 0; + let rightIdx = 0; + let i = 0; + while (leftIdx < left.length && rightIdx < right.length) { + let ret = compare(left[leftIdx], right[rightIdx]); + if (ret <= 0) { + data[i++] = left[leftIdx++]; + } else { + data[i++] = right[rightIdx++]; + } + } + while (leftIdx < left.length) { + data[i++] = left[leftIdx++]; + } + while (rightIdx < right.length) { + data[i++] = right[rightIdx++]; + } + return data; + } + function computeLineOffsets(text, isAtLineStart, textOffset) { + if (textOffset === void 0) { + textOffset = 0; + } + let result = isAtLineStart ? [textOffset] : []; + for (let i = 0; i < text.length; i++) { + let ch = text.charCodeAt(i); + if (ch === 13 || ch === 10) { + if (ch === 13 && i + 1 < text.length && text.charCodeAt(i + 1) === 10) { + i++; + } + result.push(textOffset + i + 1); + } + } + return result; + } + function getWellformedRange(range) { + let start = range.start; + let end = range.end; + if ( + start.line > end.line || + (start.line === end.line && start.character > end.character) + ) { + return { start: end, end: start }; + } + return range; + } + function getWellformedEdit(textEdit) { + let range = getWellformedRange(textEdit.range); + if (range !== textEdit.range) { + return { newText: textEdit.newText, range }; + } + return textEdit; + } + + // server/src/languages.ts + let import_tree_sitter = __toModule(require_tree_sitter()); + + // server/src/queries/c_sharp/outline.scm + let outline_default = + '\n(class_declaration\n name: (identifier) @class.name\n) @class\n\n(interface_declaration \n name: (identifier) @interface.name\n) @interface\n\n(record_declaration \n name: (identifier) @record.name\n) @record\n\n(record_declaration\n (parameter_list\n (parameter\n name: (identifier) @property.name\n ) @property\n )\n)\n\n(constructor_declaration\n name: (identifier) @constructor.name\n) @constructor\n\n(destructor_declaration\n (identifier) @method.name\n) @method\n\n(indexer_declaration\n (bracketed_parameter_list) @method.name\n) @method\n\n(method_declaration\n name: (identifier) @method.name\n) @method\n\n(property_declaration\n name: (identifier) @property.name\n) @property\n\n(delegate_declaration\n name: (identifier) @function.name\n) @function\n\n(field_declaration\n (variable_declaration\n (variable_declarator\n (identifier) @field.name\n )\n )\n) @field\n\n(event_field_declaration\n (variable_declaration\n (variable_declarator\n (identifier) @event.name\n )\n )\n) @event\n\n(global_attribute_list\n (attribute\n (identifier) @constant.name\n ) @constant\n)\n\n(global_statement\n (local_declaration_statement\n (variable_declaration\n (variable_declarator\n (identifier) @variable.name\n )\n )\n )\n)\n\n(enum_declaration name:\n (identifier) @enum.name\n) @enum\n\n(struct_declaration\n (identifier) @struct.name\n) @struct\n\n(namespace_declaration\n [\n name: (identifier) @module.name\n name: (qualified_name) @module.name\n ]\n) @module\n\n(enum_member_declaration\n (identifier) @enumMember.name\n) @enumMember\n'; + + // server/src/queries/c_sharp/locals.scm + let locals_default = + '(namespace_declaration body: (_) @scope.exports)\n(class_declaration) @scope\n(interface_declaration) @scope\n(constructor_declaration) @scope\n(method_declaration) @scope\n(if_statement [consequence: (_) @scope alternative: (_) @scope]) \n(for_each_statement) @scope\n(for_statement) @scope\n(do_statement) @scope\n(while_statement) @scope\n(using_statement) @scope\n(block) @scope\n\n(class_declaration name: (identifier) @local.escape)\n(interface_declaration name: (identifier) @local.escape)\n(constructor_declaration name: (identifier) @local.escape)\n(method_declaration name: (identifier) @local.escape)\n(parameter name: (identifier) @local)\n(parameter_array (identifier) @local)\n(variable_declarator (identifier) @local)\n(type_parameter (identifier) @local)\n(for_each_statement left: (identifier) @local)\n(query_expression [\n (from_clause . (identifier) @local) \n])\n\n(member_access_expression name: (identifier) @usage.void)\n(identifier) @usage\n'; + + // server/src/queries/c_sharp/comments.scm + let comments_default = '(comment) @comment\n'; + + // server/src/queries/c_sharp/identifiers.scm + let identifiers_default = '(identifier) @identifier\n'; + + // server/src/queries/c_sharp/references.scm + let references_default = + '(object_creation_expression\n type: (identifier) @ref.type)\n(type_parameter_constraints_clause\n target: (identifier) @ref.type)\n(type_constraint\n type: (identifier) @ref.type)\n(variable_declaration\n type: (identifier) @ref.type)\n(member_access_expression \n name: (identifier) @ref)\n(invocation_expression\n function: (identifier) @ref)\n(base_list (_) @ref.type)\n'; + + // server/src/queries/c_sharp/index.ts + let mod = { + outline: outline_default, + locals: locals_default, + comments: comments_default, + identifiers: identifiers_default, + references: references_default, + }; + let c_sharp_default = mod; + + // server/src/queries/c/outline.scm + let outline_default2 = + '(struct_specifier\n name: (type_identifier) @struct.name) @struct\n\n(union_specifier\n name: (type_identifier) @struct.name) @struct\n\n(enum_specifier\n name: (type_identifier) @enum.name) @enum\n\n(enumerator\n name: (identifier) @enumMember.name) @enumMember\n\n(function_definition\n declarator: (function_declarator\n [\n (identifier) @function.name\n (field_identifier) @function.name\n ])) @function\n\n(pointer_declarator\n declarator: (function_declarator\n declarator: (identifier) @function.name) @function)\n\n(declaration\n declarator: (function_declarator\n [\n (identifier) @function.name\n (field_identifier) @function.name\n ]) @function)\n\n(declaration\n type: (primitive_type) \n declarator: (identifier) @variable.name) @variable\n\n(type_definition\n type: (_)\n declarator: (type_identifier) @struct.name) @struct\n\n(linkage_specification\n value: (string_literal) @struct.name) @struct\n\n(field_declaration\n (function_declarator\n [\n (identifier) @function.name\n (field_identifier) @function.name\n ]\n )) @function\n\n\n(field_declaration\n (field_identifier) @field.name) @field\n\n(field_declaration_list\n (field_declaration\n [\n declarator: (field_identifier) @field.name\n (array_declarator\n declarator: (field_identifier) @field.name\n )\n ]\n ) @field)\n'; + + // server/src/queries/c/comments.scm + let comments_default2 = '(comment) @comment\n'; + + // server/src/queries/c/identifiers.scm + let identifiers_default2 = + '\n(identifier) @identifier\n(field_identifier) @identifier\n(type_identifier) @identifier\n'; + + // server/src/queries/c/index.ts + let mod2 = { + outline: outline_default2, + comments: comments_default2, + identifiers: identifiers_default2, + }; + let c_default = mod2; + + // server/src/queries/cpp/outline.scm + let outline_default3 = + '(namespace_definition\n name: (identifier) @module.name) @module\n\n(friend_declaration\n (type_identifier) @variable.name) @variable\n\n(field_declaration\n (function_declarator\n (scoped_identifier) @function.name)) @function\n\n(declaration\n (function_declarator\n [\n (scoped_identifier) @function.name\n (destructor_name) @function.name\n ]) @function)\n\n(class_specifier\n (type_identifier) @class.name) @class\n'; + + // server/src/queries/cpp/comments.scm + let comments_default3 = '(comment) @comment\n'; + + // server/src/queries/cpp/identifiers.scm + let identifiers_default3 = + '(identifier) @identifier\n(field_identifier) @identifier\n(type_identifier) @identifier\n(namespace_identifier) @identifier\n'; + + // server/src/queries/cpp/index.ts + let mod3 = { + outline: `${outline_default2} +${outline_default3}`, + comments: comments_default3, + identifiers: identifiers_default3, + }; + let cpp_default = mod3; + + // server/src/queries/go/outline.scm + let outline_default4 = + '\n(field_declaration (field_identifier) @field @field.name)\n\n(method_spec\n name: (field_identifier) @method.name\n) @method\n\n(type_alias\n name: (type_identifier) @string.name\n) @string\n\n(function_declaration\n name: (identifier) @function.name\n) @function\n\n(method_declaration\n name: (field_identifier) @method.name\n) @method\n\n;; variables defined in the package\n(source_file\n (var_declaration\n (var_spec\n (identifier) @variable.name\n ) @variable\n )\n)\n\n;; lots of type_spec, must be mutually exclusive\n(type_spec \n name: (type_identifier) @interface.name\n type: (interface_type)\n) @interface\n\n(type_spec \n name: (type_identifier) @function.name\n type: (function_type)\n) @function\n\n(type_spec\n name: (type_identifier) @struct.name\n type: (struct_type)\n) @struct\n\n(type_spec\n name: (type_identifier) @struct.name\n type: (map_type)\n) @struct\n\n(type_spec\n name: (type_identifier) @struct.name\n type: (pointer_type)\n) @struct\n\n(type_spec\n name: (type_identifier) @event.name\n type: (channel_type)\n) @event\n\n(type_spec \n name: (type_identifier) @class.name\n type: (type_identifier)\n) @class\n'; + + // server/src/queries/go/locals.scm + let locals_default2 = + '(method_declaration) @scope\n(function_declaration) @scope\n(expression_switch_statement) @scope\n(for_statement) @scope\n(block) @scope\n(type_switch_statement) @scope\n(composite_literal body: (literal_value) @scope)\n\n(const_spec name: (identifier) @local)\n(var_declaration (var_spec (identifier) @local))\n(parameter_declaration (identifier) @local)\n(short_var_declaration left: (expression_list (identifier) @local))\n(range_clause left: (expression_list (identifier) @local))\n(type_switch_statement (expression_list (identifier) @local))\n(function_declaration name: (identifier) @local.escape)\n(method_declaration name: (field_identifier) @local.escape)\n\n(identifier) @usage\n'; + + // server/src/queries/go/comments.scm + let comments_default4 = '(comment) @comment\n'; + + // server/src/queries/go/identifiers.scm + let identifiers_default4 = + '(type_identifier) @identifier.type\n(field_identifier) @identifier.field\n(package_identifier) @identifier\n(identifier) @identifier\n'; + + // server/src/queries/go/folding.scm + let folding_default = '(block) @scope\n'; + + // server/src/queries/go/references.scm + let references_default2 = + '(field_identifier) @ref.field\n(type_identifier) @ref.type\n(call_expression \n (identifier) @ref.call)\n'; + + // server/src/queries/go/index.ts + let mod4 = { + outline: outline_default4, + comments: comments_default4, + locals: locals_default2, + folding: folding_default, + identifiers: identifiers_default4, + references: references_default2, + }; + let go_default = mod4; + + // server/src/queries/java/outline.scm + let outline_default5 = + '\n(class_declaration\n name: (identifier) @class.name\n) @class\n\n(variable_declarator\n name: (identifier) @class.name\n value: (object_creation_expression\n .\n (_)*\n (class_body)\n )\n) @class\n\n(interface_declaration\n name: (identifier) @interface.name\n) @interface\n\n(enum_declaration\n name: (identifier) @enum.name\n) @enum\n\n(enum_constant\n name: (identifier) @enumMember.name\n) @enumMember\n\n(constructor_declaration\n name: (identifier) @constructor.name\n) @constructor\n\n(method_declaration\n name: (identifier) @method.name\n) @method\n\n(field_declaration\n declarator: ((variable_declarator\n name: (identifier) @field.name)\n ) @field\n)\n\n(module_declaration\n [\n (scoped_identifier) @module.name\n (identifier) @module.name\n ]\n) @module\n'; + + // server/src/queries/java/locals.scm + let locals_default3 = + '\n(method_declaration) @scope\n(constructor_declaration) @scope\n[(class_body) (interface_body) (enum_body)] @scope\n(for_statement) @scope\n(if_statement consequence: (_) @scope)\n(if_statement alternative: (_) @scope)\n(while_statement body: (_) @scope)\n(try_statement (block) @scope)\n(catch_clause) @scope\n(block) @scope\n\n(formal_parameter name: (identifier) @local)\n(local_variable_declaration declarator: (variable_declarator name: (identifier) @local))\n(catch_formal_parameter name: (identifier) @local)\n(method_declaration name: (identifier) @local.escape)\n(constructor_declaration name: (identifier) @local.escape)\n\n(field_access field: (identifier) @usage.void)\n(identifier) @usage\n'; + + // server/src/queries/java/comments.scm + let comments_default5 = '(comment) @comment\n'; + + // server/src/queries/java/identifiers.scm + let identifiers_default5 = + '(type_identifier) @identifier\n(identifier) @identifier\n'; + + // server/src/queries/java/folding.scm + let folding_default2 = + '(comment) @comment\n[(class_body) (interface_body) (enum_body)] @scope\n(for_statement) @scope\n(if_statement consequence: (_) @scope)\n(if_statement alternative: (_) @scope)\n(while_statement body: (_) @scope)\n(try_statement (block) @scope)\n(catch_clause) @scope\n(block) @scope\n'; + + // server/src/queries/java/references.scm + let references_default3 = + '(method_invocation\n name: (identifier) @ref.method)\n(interface_type_list\n (type_identifier) @ref.interface)\n(superclass \n (type_identifier) @ref.class)\n(object_creation_expression\n type: (type_identifier) @ref.class)\n (type_identifier) @ref.class.interface.enum\n(field_access\n field: (identifier) @ref.field)\n'; + + // server/src/queries/java/index.ts + let mod5 = { + outline: outline_default5, + locals: locals_default3, + identifiers: identifiers_default5, + comments: comments_default5, + folding: folding_default2, + references: references_default3, + }; + let java_default = mod5; + + // server/src/queries/php/outline.scm + let outline_default6 = + '(class_declaration\n name: (name) @class.name\n) @class\n\n(method_declaration\n name: (name) @method.name\n) @method\n\n(property_element\n (variable_name) @property.name\n) @property\n\n(function_definition\n name: (name) @function.name\n) @function\n\n(trait_declaration\n name: (name) @property.name\n) @property\n'; + + // server/src/queries/php/comments.scm + let comments_default6 = '(comment) @comment\n'; + + // server/src/queries/php/identifiers.scm + let identifiers_default6 = '(name) @identifier\n'; + + // server/src/queries/php/locals.scm + let locals_default4 = + '(method_declaration) @scope\n(function_definition) @scope\n(compound_statement) @scope\n(declaration_list) @scope\n\n(function_definition\n name: (name) @local.escape)\n(method_declaration\n name: (name) @local.escape)\n(assignment_expression\n left: (variable_name) @local)\n(augmented_assignment_expression\n left: (variable_name) @local)\n(static_variable_declaration\n name: (variable_name) @local)\n(simple_parameter\n name: (variable_name) @local)\n\n(variable_name) @usage\n'; + + // server/src/queries/php/references.scm + let references_default4 = + '(object_creation_expression [\n (qualified_name (name) @ref)\n (variable_name (name) @ref)])\n\n(function_call_expression function: [\n (qualified_name (name) @ref)\n (variable_name (name)) @ref])\n\n(member_access_expression name: (name) @ref) \n\n(scoped_call_expression\n name: (name) @ref)\n\n(member_call_expression\n name: (name) @ref)\n'; + + // server/src/queries/php/index.ts + let mod6 = { + outline: outline_default6, + identifiers: identifiers_default6, + comments: comments_default6, + locals: locals_default4, + references: references_default4, + }; + let php_default = mod6; + + // server/src/queries/python/outline.scm + let outline_default7 = + '(class_definition\n name: (identifier) @class.name) @class\n\n(function_definition\n name: (identifier) @function.name) @function\n\n(module\n (expression_statement \n (assignment left: (identifier) @var)))\n'; + + // server/src/queries/python/locals.scm + let locals_default5 = + '(class_definition) @scope\n(function_definition) @scope\n(for_statement) @scope\n\n(parameters (identifier) @local)\n(assignment left: (identifier) @local)\n(function_definition name: (identifier) @local.escape)\n(class_definition name: (identifier) @local.escape)\n(for_statement left: (identifier) @local)\n\n(identifier) @usage\n'; + + // server/src/queries/python/comments.scm + let comments_default7 = '(comment) @comment\n'; + + // server/src/queries/python/identifiers.scm + let identifiers_default7 = '(identifier) @identifier\n'; + + // server/src/queries/python/references.scm + let references_default5 = + '(call function: [\n (identifier) @ref\n (attribute\n attribute: (identifier) @ref)])\n'; + + // server/src/queries/python/index.ts + let mod7 = { + outline: outline_default7, + locals: locals_default5, + identifiers: identifiers_default7, + comments: comments_default7, + references: references_default5, + }; + let python_default = mod7; + + // server/src/queries/rust/outline.scm + let outline_default8 = + '(mod_item\n name: (identifier) @module.name) @module\n\n(function_item\n name: (identifier) @function.name) @function\n\n(union_item\n name: (type_identifier) @struct.name) @struct\n\n(field_declaration\n name: (field_identifier) @field.name) @field\n\n(struct_item\n name: (type_identifier) @struct.name) @struct\n\n(enum_item\n name: (type_identifier) @enum.name) @enum\n\n(enum_variant\n name: (identifier) @enumMember.name) @enumMember\n\n(trait_item\n name: (type_identifier) @interface.name) @interface\n\n(function_signature_item\n name: (identifier) @function.name) @function\n\n(const_item\n name: (identifier) @constant.name) @constant\n\n(static_item\n name: (identifier) @constant.name) @constant\n\n(type_item\n name: (type_identifier) @interface.name) @interface\n\n(impl_item \n . [(generic_type) (type_identifier)] @class.name) @class\n\n(foreign_mod_item\n (extern_modifier (string_literal) @namespace.name)) @namespace\n'; + + // server/src/queries/rust/locals.scm + let locals_default6 = + '(mod_item body: (declaration_list) @scope.exports)\n(for_expression) @scope\n(function_item) @scope\n(block) @scope\n\n(function_item name: (identifier) @local.escape)\n(const_item name: (identifier) @local)\n(static_item name: (identifier) @local)\n(let_declaration pattern: (identifier) @local)\n(parameter pattern: (identifier) @local)\n(for_expression pattern: (identifier) @local)\n(reference_pattern (identifier) @local)\n(tuple_pattern (identifier) @local)\n(self_parameter (self) @local)\n\n(scoped_identifier name: (identifier) @usage.void)\n(identifier) @usage\n(self) @usage\n'; + + // server/src/queries/rust/comments.scm + let comments_default8 = '(line_comment) @comment\n(block_comment) @comment\n'; + + // server/src/queries/rust/identifiers.scm + let identifiers_default8 = + '(scoped_identifier) @identifier\n(type_identifier) @identifier\n(field_identifier) @identifier\n(identifier) @identifier\n'; + + // server/src/queries/rust/folding.scm + let folding_default3 = + '(block_comment) @comment\n(block) @scope\n(_) body: (_) @fold\n'; + + // server/src/queries/rust/references.scm + let references_default6 = + '(field_identifier) @ref.field.method\n(type_identifier) @ref.interface.struct.class\n(call_expression (identifier) @ref.function) \n(scoped_identifier name: (identifier) @ref)\n(macro_invocation macro: (identifier) @ref)\n((macro_invocation (token_tree (identifier) @ref)))\n'; + + // server/src/queries/rust/index.ts + let mod8 = { + outline: outline_default8, + locals: locals_default6, + identifiers: identifiers_default8, + comments: comments_default8, + folding: folding_default3, + references: references_default6, + }; + let rust_default = mod8; + + // server/src/queries/typescript/outline.scm + let outline_default9 = + '(interface_declaration\n name: (type_identifier) @interface.name) @interface\n\n(property_signature\n name: (property_identifier) @field.name) @field\n\n(method_signature\n name: (property_identifier) @method.name) @method\n\n(class_declaration\n name: (type_identifier) @class.name) @class\n\n(new_expression\n constructor: (class\n name: (type_identifier)? @class.name\n body: (class_body)) @class)\n\n(method_definition\n name: [\n (property_identifier) @method.name\n (computed_property_name (string) @method.name)\n ]) @method\n\n(public_field_definition\n name: [\n (property_identifier) @field.name\n (computed_property_name (string) @field.name)\n ]) @field\n\n(enum_declaration\n name: (identifier) @enum.name) @enum\n\n(enum_body [\n (property_identifier) @enumMember\n (enum_assignment (property_identifier) @enumMember)])\n\n(function_declaration\n name: (identifier) @function.name) @function\n\n(function_signature\n name: (identifier) @function.name) @function\n\n(variable_declarator\n name: (identifier) @variable.name) @variable\n\n(module\n name: [(identifier)@module.name (string) @module.name]) @module\n\n(internal_module\n name: (identifier) @module.name) @module\n\n(type_alias_declaration\n name: (type_identifier) @interface.name) @interface\n'; + + // server/src/queries/typescript/comments.scm + let comments_default9 = '(comment) @comment\n'; + + // server/src/queries/typescript/identifiers.scm + let identifiers_default9 = + '(identifier) @identifier\n(property_identifier) @identifier\n(type_identifier) @identifier\n'; + + // server/src/queries/typescript/locals.scm + let locals_default7 = + '(method_definition) @scope\n(function_declaration) @scope\n(function) @scope\n(arrow_function) @scope\n[(class_body) (enum_body)] @scope\n(interface_declaration body: (object_type) @scope)\n(for_statement) @scope\n(if_statement consequence: (_) @scope)\n(if_statement alternative: (_) @scope)\n(while_statement body: (_) @scope)\n(try_statement (statement_block) @scope)\n(catch_clause) @scope\n(statement_block) @scope\n\n(function_declaration name: (identifier) @local.escape)\n(function name: (identifier) @local.escape)\n(required_parameter (identifier) @local)\n(optional_parameter (identifier) @local)\n(catch_clause parameter: (identifier) @local)\n(variable_declarator (identifier) @local)\n(type_parameter (type_identifier) @local)\n\n(enum_declaration name: (identifier) @usage.void)\n(identifier) @usage\n(type_identifier) @usage\n'; + + // server/src/queries/typescript/references.scm + let references_default7 = + '(type_identifier) @ref.class.interface.enum\n(new_expression\n constructor: (identifier) @ref.class)\n(call_expression [\n (identifier) @ref.function\n (member_expression property: (property_identifier) @ref.function)])\n(property_identifier) @ref.field.method\n'; + + // server/src/queries/typescript/index.ts + let mod9 = { + outline: outline_default9, + comments: comments_default9, + identifiers: identifiers_default9, + locals: locals_default7, + references: references_default7, + }; + let typescript_default = mod9; + + // server/src/languages.ts + let _queryModules = new Map([ + ['csharp', c_sharp_default], + ['c', c_default], + ['cpp', cpp_default], + ['go', go_default], + ['java', java_default], + ['php', php_default], + ['python', python_default], + ['rust', rust_default], + ['typescript', typescript_default], + ]); + let Languages = class { + static async init(langConfiguration) { + this._langConfiguration = langConfiguration; + for (const [entry, config] of langConfiguration) { + const lang = await import_tree_sitter.default.Language.load( + entry.wasmUri + ); + this._languageInstances.set(entry.languageId, lang); + this._configurations.set(entry.languageId, config); + } + } + static getLanguage(languageId) { + let result = this._languageInstances.get(languageId); + if (!result) { + console.warn(`UNKNOWN languages: '${languageId}'`); + return void 0; + } + return result; + } + static allAsSelector() { + return [...this._languageInstances.keys()]; + } + static getQuery(languageId, type, strict = false) { + const module = _queryModules.get(languageId); + if (!module) { + return this.getLanguage(languageId).query(''); + } + const source = module[type] ?? ''; + const key = `${languageId}/${type}`; + let query = this._queryInstances.get(key); + if (!query) { + try { + query = this.getLanguage(languageId).query(source); + } catch (e) { + query = this.getLanguage(languageId).query(''); + console.error(languageId, e); + if (strict) { + throw e; + } + } + this._queryInstances.set(key, query); + } + return query; + } + static getSupportedLanguages(feature, types) { + const result = []; + for (let languageId of this._languageInstances.keys()) { + const module = _queryModules.get(languageId); + if (!module) { + console.warn(`${languageId} NOT supported by queries`); + continue; + } + for (let type of types) { + if (module[type] && this._configurations.get(languageId)?.[feature]) { + result.push(languageId); + break; + } + } + } + return result; + } + static getLanguageIdByUri(uri) { + let end = uri.lastIndexOf('?'); + if (end < 0) { + end = uri.lastIndexOf('#'); + } + if (end > 0) { + uri = uri.substring(0, end); + } + const start = uri.lastIndexOf('.'); + const suffix = uri.substring(start + 1); + for (let [info] of this._langConfiguration) { + for (let candidate of info.suffixes) { + if (candidate === suffix) { + return info.languageId; + } + } + } + return `unknown/${uri}`; + } + }; + Languages._languageInstances = new Map(); + Languages._queryInstances = new Map(); + Languages._configurations = new Map(); + + // server/src/util/lruMap.ts + let LRUMap = class extends Map { + constructor(_options) { + super(); + this._options = _options; + } + set(key, value) { + super.set(key, value); + this._checkSize(); + return this; + } + get(key) { + if (!this.has(key)) { + return void 0; + } + const result = super.get(key); + this.delete(key); + this.set(key, result); + return result; + } + _checkSize() { + setTimeout(() => { + const slack = Math.ceil(this._options.size * 0.3); + if (this.size < this._options.size + slack) { + return; + } + const result = Array.from(this.entries()).slice(0, slack); + for (let [key] of result) { + this.delete(key); + } + this._options.dispose(result); + }, 0); + } + }; + + // server/src/documentStore.ts + let DocumentStore = class extends import_vscode_languageserver.TextDocuments { + constructor(_connection) { + super({ + create: TextDocument.create, + update: (doc, changes, version) => { + let result; + let incremental = true; + let event = { document: doc, changes: [] }; + for (const change of changes) { + if (!lsp.TextDocumentContentChangeEvent.isIncremental(change)) { + incremental = false; + break; + } + const rangeOffset = doc.offsetAt(change.range.start); + event.changes.push({ + text: change.text, + range: change.range, + rangeOffset, + rangeLength: + change.rangeLength ?? + doc.offsetAt(change.range.end) - rangeOffset, + }); + } + result = TextDocument.update(doc, changes, version); + if (incremental) { + this._onDidChangeContent2.fire(event); + } + return result; + }, + }); + this._connection = _connection; + this._onDidChangeContent2 = new lsp.Emitter(); + this.onDidChangeContent2 = this._onDidChangeContent2.event; + this._decoder = new TextDecoder(); + this._fileDocuments = new LRUMap({ + size: 200, + dispose: (_entries) => {}, + }); + super.listen(_connection); + _connection.onNotification('file-cache/remove', (uri) => + this._fileDocuments.delete(uri) + ); + } + async retrieve(uri) { + let result = this.get(uri); + if (result) { + return result; + } + let promise = this._fileDocuments.get(uri); + if (!promise) { + promise = this._requestDocument(uri); + this._fileDocuments.set(uri, promise); + } + return promise; + } + async _requestDocument(uri) { + const reply = await this._connection.sendRequest('file/read', uri); + return TextDocument.create( + uri, + Languages.getLanguageIdByUri(uri), + 1, + this._decoder.decode(reply) + ); + } + }; + + // server/src/features/completions.ts + let lsp2 = __toModule(require_main4()); + var _CompletionItemProvider = class { + constructor(_documents, _trees, _symbols) { + this._documents = _documents; + this._trees = _trees; + this._symbols = _symbols; + } + register(connection2) { + connection2.client.register(lsp2.CompletionRequest.type, { + documentSelector: Languages.getSupportedLanguages('completions', [ + 'identifiers', + 'outline', + ]), + }); + connection2.onRequest( + lsp2.CompletionRequest.type, + this.provideCompletionItems.bind(this) + ); + } + async provideCompletionItems(params) { + const document2 = await this._documents.retrieve(params.textDocument.uri); + const tree = this._trees.getParseTree(document2); + if (!tree) { + return []; + } + const result = new Map(); + const query = Languages.getQuery(document2.languageId, 'identifiers'); + const captures = query.captures(tree.rootNode); + for (let capture of captures) { + const text = capture.node.text; + result.set(text, { label: text }); + } + for (let [name, map] of this._symbols.index) { + for (let [, info] of map) { + if (info.definitions.size > 0) { + const [firstDefinitionKind] = info.definitions; + result.set(name, { + label: name, + kind: _CompletionItemProvider._kindMapping.get( + firstDefinitionKind + ), + }); + break; + } + } + } + return Array.from(result.values()); + } + }; + let CompletionItemProvider = _CompletionItemProvider; + CompletionItemProvider._kindMapping = new Map([ + [lsp2.SymbolKind.Class, lsp2.CompletionItemKind.Class], + [lsp2.SymbolKind.Interface, lsp2.CompletionItemKind.Interface], + [lsp2.SymbolKind.Field, lsp2.CompletionItemKind.Field], + [lsp2.SymbolKind.Property, lsp2.CompletionItemKind.Property], + [lsp2.SymbolKind.Event, lsp2.CompletionItemKind.Event], + [lsp2.SymbolKind.Constructor, lsp2.CompletionItemKind.Constructor], + [lsp2.SymbolKind.Method, lsp2.CompletionItemKind.Method], + [lsp2.SymbolKind.Enum, lsp2.CompletionItemKind.Enum], + [lsp2.SymbolKind.EnumMember, lsp2.CompletionItemKind.EnumMember], + [lsp2.SymbolKind.Function, lsp2.CompletionItemKind.Function], + [lsp2.SymbolKind.Variable, lsp2.CompletionItemKind.Variable], + ]); + + // server/src/features/definitions.ts + let lsp5 = __toModule(require_main4()); + + // server/src/common.ts + let lsp3 = __toModule(require_main4()); + let symbolMapping = new (class { + constructor() { + this._symbolKindMapping = new Map([ + ['file', lsp3.SymbolKind.File], + ['module', lsp3.SymbolKind.Module], + ['namespace', lsp3.SymbolKind.Namespace], + ['package', lsp3.SymbolKind.Package], + ['class', lsp3.SymbolKind.Class], + ['method', lsp3.SymbolKind.Method], + ['property', lsp3.SymbolKind.Property], + ['field', lsp3.SymbolKind.Field], + ['constructor', lsp3.SymbolKind.Constructor], + ['enum', lsp3.SymbolKind.Enum], + ['interface', lsp3.SymbolKind.Interface], + ['function', lsp3.SymbolKind.Function], + ['variable', lsp3.SymbolKind.Variable], + ['constant', lsp3.SymbolKind.Constant], + ['string', lsp3.SymbolKind.String], + ['number', lsp3.SymbolKind.Number], + ['boolean', lsp3.SymbolKind.Boolean], + ['array', lsp3.SymbolKind.Array], + ['object', lsp3.SymbolKind.Object], + ['key', lsp3.SymbolKind.Key], + ['null', lsp3.SymbolKind.Null], + ['enumMember', lsp3.SymbolKind.EnumMember], + ['struct', lsp3.SymbolKind.Struct], + ['event', lsp3.SymbolKind.Event], + ['operator', lsp3.SymbolKind.Operator], + ['typeParameter', lsp3.SymbolKind.TypeParameter], + ]); + } + getSymbolKind(symbolKind, strict) { + const res = this._symbolKindMapping.get(symbolKind); + if (!res && strict) { + return void 0; + } + return res ?? lsp3.SymbolKind.Variable; + } + })(); + function asLspRange(node) { + return lsp3.Range.create( + node.startPosition.row, + node.startPosition.column, + node.endPosition.row, + node.endPosition.column + ); + } + function identifierAtPosition(identQuery, node, position) { + let candidate = nodeAtPosition(node, position, false); + let capture = identQuery.captures(candidate); + if (capture.length === 1) { + return candidate; + } + candidate = nodeAtPosition(node, position, true); + capture = identQuery.captures(candidate); + if (capture.length === 1) { + return candidate; + } + return void 0; + } + function nodeAtPosition(node, position, leftBias = false) { + for (const child of node.children) { + const range = asLspRange(child); + if (isBeforeOrEqual(range.start, position)) { + if (isBefore(position, range.end)) { + return nodeAtPosition(child, position, leftBias); + } + if (leftBias && isBeforeOrEqual(position, range.end)) { + return nodeAtPosition(child, position, leftBias); + } + } + } + return node; + } + function isBeforeOrEqual(a, b) { + if (a.line < b.line) { + return true; + } + if (b.line < a.line) { + return false; + } + return a.character <= b.character; + } + function isBefore(a, b) { + if (a.line < b.line) { + return true; + } + if (b.line < a.line) { + return false; + } + return a.character < b.character; + } + function compareRangeByStart(a, b) { + if (isBefore(a.start, b.start)) { + return -1; + } else if (isBefore(b.start, a.start)) { + return 1; + } + if (isBefore(a.end, b.end)) { + return -1; + } else if (isBefore(b.end, a.end)) { + return 1; + } + return 0; + } + function containsPosition(range, position) { + return ( + isBeforeOrEqual(range.start, position) && + isBeforeOrEqual(position, range.end) + ); + } + function containsRange(range, other) { + return ( + containsPosition(range, other.start) && containsPosition(range, other.end) + ); + } + let StopWatch = class { + constructor() { + this.t1 = performance.now(); + } + reset() { + this.t1 = performance.now(); + } + elapsed() { + return (performance.now() - this.t1).toFixed(2); + } + }; + function isInteresting(uri) { + return !/^(git|github|vsls):/i.test(uri); + } + async function parallel(tasks, degree, token) { + let result = []; + let pos = 0; + while (true) { + if (token.isCancellationRequested) { + throw new Error('cancelled'); + } + const partTasks = tasks.slice(pos, pos + degree); + if (partTasks.length === 0) { + break; + } + const partResult = await Promise.all( + partTasks.map((task) => task(token)) + ); + pos += degree; + result.push(...partResult); + } + return result; + } + + // server/src/features/locals.ts + let lsp4 = __toModule(require_main4()); + var Locals = class { + constructor(document2, root) { + this.document = document2; + this.root = root; + } + static create(document2, trees) { + const root = new Scope( + lsp4.Range.create(0, 0, document2.lineCount, 0), + true + ); + const tree = trees.getParseTree(document2); + if (!tree) { + return new Locals(document2, root); + } + const all = []; + const query = Languages.getQuery(document2.languageId, 'locals'); + const captures = query + .captures(tree.rootNode) + .sort(this._compareCaptures); + const scopeCaptures = captures.filter((capture) => + capture.name.startsWith('scope') + ); + for (let i = 0; i < scopeCaptures.length; i++) { + const capture = scopeCaptures[i]; + const range = asLspRange(capture.node); + all.push(new Scope(range, capture.name.endsWith('.exports'))); + } + this._fillInDefinitionsAndUsages(all, captures); + this._constructTree(root, all); + const info = new Locals(document2, root); + return info; + } + static _fillInDefinitionsAndUsages(bucket, captures) { + for (const capture of captures) { + if (capture.name.startsWith('local')) { + bucket.push( + new Definition( + capture.node.text, + asLspRange(capture.node), + capture.name.endsWith('.escape') + ) + ); + } else if (capture.name.startsWith('usage')) { + bucket.push( + new Usage( + capture.node.text, + asLspRange(capture.node), + capture.name.endsWith('.void') + ) + ); + } + } + } + static _constructTree(root, nodes) { + const stack = []; + for (const thing of nodes.sort(this._compareByRange)) { + while (true) { + let parent = stack.pop() ?? root; + if (containsRange(parent.range, thing.range)) { + if (thing instanceof Definition && thing.escapeToParent) { + (stack[stack.length - 1] ?? root).appendChild(thing); + } else { + parent.appendChild(thing); + } + stack.push(parent); + stack.push(thing); + break; + } + if (parent === root) { + break; + } + } + } + stack.length = 0; + stack.push(root); + while (stack.length > 0) { + let n = stack.pop(); + if (n instanceof Usage && n.isHelper) { + n.remove(); + } else { + stack.push(...n.children()); + } + } + } + static _compareCaptures(a, b) { + return a.node.startIndex - b.node.startIndex; + } + static _compareByRange(a, b) { + return compareRangeByStart(a.range, b.range); + } + debugPrint() { + console.log(this.root.toString()); + } + }; + let NodeType; + (function (NodeType2) { + NodeType2[(NodeType2['Scope'] = 0)] = 'Scope'; + NodeType2[(NodeType2['Definition'] = 1)] = 'Definition'; + NodeType2[(NodeType2['Usage'] = 2)] = 'Usage'; + })(NodeType || (NodeType = {})); + let Node = class { + constructor(range, type) { + this.range = range; + this.type = type; + this._children = []; + } + children() { + return this._children; + } + remove() { + if (!this._parent) { + return false; + } + const idx = this._parent._children.indexOf(this); + if (idx < 0) { + return false; + } + this._parent._children.splice(idx, 1); + return true; + } + appendChild(node) { + this._children.push(node); + node._parent = this; + } + toString() { + return `${this.type}@${this.range.start.line},${this.range.start.character}-${this.range.end.line},${this.range.end.character}`; + } + }; + var Usage = class extends Node { + constructor(name, range, isHelper) { + super(range, 2); + this.name = name; + this.range = range; + this.isHelper = isHelper; + } + appendChild(_node) {} + toString() { + return `use:${this.name}`; + } + get scope() { + return this._parent; + } + }; + var Definition = class extends Node { + constructor(name, range, escapeToParent) { + super(range, 1); + this.name = name; + this.range = range; + this.escapeToParent = escapeToParent; + } + appendChild(_node) {} + toString() { + return `def:${this.name}`; + } + get scope() { + return this._parent; + } + }; + var Scope = class extends Node { + constructor(range, likelyExports) { + super(range, 0); + this.likelyExports = likelyExports; + } + *definitions() { + for (let item of this._children) { + if (item instanceof Definition) { + yield item; + } + } + } + *usages() { + for (let item of this._children) { + if (item instanceof Usage) { + yield item; + } + } + } + *scopes() { + for (let item of this._children) { + if (item instanceof Scope) { + yield item; + } + } + } + _findScope(position) { + for (let scope of this.scopes()) { + if (containsPosition(scope.range, position)) { + return scope._findScope(position); + } + } + return this; + } + findDefinitionOrUsage(position) { + let scope = this._findScope(position); + while (true) { + for (let child of scope._children) { + if ( + (child instanceof Definition || child instanceof Usage) && + containsPosition(child.range, position) + ) { + return child; + } + } + if (scope._parent instanceof Scope) { + scope = scope._parent; + } else { + break; + } + } + } + findDefinitions(text) { + const result = []; + for (let child of this.definitions()) { + if (child.name === text) { + result.push(child); + } + } + if (result.length > 0) { + return result; + } + if (!(this._parent instanceof Scope)) { + return []; + } + return this._parent.findDefinitions(text); + } + findUsages(text) { + const bucket = []; + let scope = this; + while (!scope._defines(text)) { + if (scope._parent instanceof Scope) { + scope = scope._parent; + } else { + break; + } + } + scope._findUsagesDown(text, bucket); + return bucket.flat(); + } + _findUsagesDown(text, bucket) { + const result = []; + for (let child of this.usages()) { + if (child.name === text) { + result.push(child); + } + } + bucket.push(result); + for (let child of this.scopes()) { + if (!child._defines(text)) { + child._findUsagesDown(text, bucket); + } + } + } + _defines(text) { + for (let child of this.definitions()) { + if (child.name === text) { + return true; + } + } + return false; + } + toString(depth = 0) { + let scopes = []; + let parts = []; + this._children.slice(0).forEach((child) => { + if (child instanceof Scope) { + scopes.push(child.toString(depth + 2)); + } else { + parts.push(child.toString()); + } + }); + let indent = ' '.repeat(depth); + let res = `${indent}Scope@${this.range.start.line},${this.range.start.character}-${this.range.end.line},${this.range.end.character}`; + res += ` +${indent + indent}${parts.join(`, `)}`; + res += ` +${indent}${scopes.join(` +${indent}`)}`; + return res; + } + }; + + // server/src/features/definitions.ts + let DefinitionProvider = class { + constructor(_documents, _trees, _symbols) { + this._documents = _documents; + this._trees = _trees; + this._symbols = _symbols; + } + register(connection2) { + connection2.client.register(lsp5.DefinitionRequest.type, { + documentSelector: Languages.getSupportedLanguages('definitions', [ + 'locals', + 'outline', + ]), + }); + connection2.onRequest( + lsp5.DefinitionRequest.type, + this.provideDefinitions.bind(this) + ); + } + async provideDefinitions(params) { + const document2 = await this._documents.retrieve(params.textDocument.uri); + const info = Locals.create(document2, this._trees); + const anchor = info.root.findDefinitionOrUsage(params.position); + if (anchor) { + const definitions = anchor.scope.findDefinitions(anchor.name); + if (definitions.length > 0) { + return definitions.map((def) => + lsp5.Location.create(document2.uri, def.range) + ); + } + } + const tree = this._trees.getParseTree(document2); + if (!tree) { + return []; + } + const query = Languages.getQuery(document2.languageId, 'identifiers'); + const ident = identifierAtPosition(query, tree.rootNode, params.position) + ?.text; + if (!ident) { + return []; + } + const symbols = await this._symbols.getDefinitions(ident, document2); + return symbols.map((s) => s.location); + } + }; + + // server/src/features/documentHighlights.ts + let lsp6 = __toModule(require_main4()); + let DocumentHighlightsProvider = class { + constructor(_documents, _trees) { + this._documents = _documents; + this._trees = _trees; + } + register(connection2) { + connection2.client.register(lsp6.DocumentHighlightRequest.type, { + documentSelector: Languages.getSupportedLanguages('highlights', [ + 'locals', + 'identifiers', + ]), + }); + connection2.onRequest( + lsp6.DocumentHighlightRequest.type, + this.provideDocumentHighlights.bind(this) + ); + } + async provideDocumentHighlights(params) { + const document2 = await this._documents.retrieve(params.textDocument.uri); + const info = Locals.create(document2, this._trees); + const anchor = info.root.findDefinitionOrUsage(params.position); + if (!anchor) { + return this._identifierBasedHighlights(document2, params.position); + } + const result = []; + for (let def of anchor.scope.findDefinitions(anchor.name)) { + result.push( + lsp6.DocumentHighlight.create( + def.range, + lsp6.DocumentHighlightKind.Write + ) + ); + } + if (result.length === 0) { + return this._identifierBasedHighlights(document2, params.position); + } + for (let usage of anchor.scope.findUsages(anchor.name)) { + result.push( + lsp6.DocumentHighlight.create( + usage.range, + lsp6.DocumentHighlightKind.Read + ) + ); + } + return result; + } + _identifierBasedHighlights(document2, position) { + const result = []; + const tree = this._trees.getParseTree(document2); + if (!tree) { + return result; + } + const query = Languages.getQuery(document2.languageId, 'identifiers'); + const candidate = identifierAtPosition(query, tree.rootNode, position); + if (!candidate) { + return result; + } + for (let capture of query.captures(tree.rootNode)) { + if (capture.node.text === candidate.text) { + result.push( + lsp6.DocumentHighlight.create( + asLspRange(capture.node), + lsp6.DocumentHighlightKind.Text + ) + ); + } + } + return result; + } + }; + + // server/src/features/documentSymbols.ts + let lsp7 = __toModule(require_main4()); + let DocumentSymbols = class { + constructor(_documents, _trees) { + this._documents = _documents; + this._trees = _trees; + } + register(connection2) { + connection2.client.register(lsp7.DocumentSymbolRequest.type, { + documentSelector: Languages.getSupportedLanguages('outline', [ + 'outline', + ]), + }); + connection2.onRequest( + lsp7.DocumentSymbolRequest.type, + this.provideDocumentSymbols.bind(this) + ); + } + async provideDocumentSymbols(params) { + const document2 = await this._documents.retrieve(params.textDocument.uri); + return getDocumentSymbols(document2, this._trees, false); + } + }; + function getDocumentSymbols(document2, trees, flat) { + class Node2 { + constructor(capture) { + this.capture = capture; + this.children = []; + this.range = asLspRange(capture.node); + } + } + const tree = trees.getParseTree(document2); + if (!tree) { + return []; + } + const query = Languages.getQuery(document2.languageId, 'outline'); + const captures = query.captures(tree.rootNode); + const roots = []; + const stack = []; + for (const capture of captures) { + const node = new Node2(capture); + let parent = stack.pop(); + while (true) { + if (!parent) { + roots.push(node); + stack.push(node); + break; + } + if (containsRange(parent.range, node.range)) { + parent.children.push(node); + stack.push(parent); + stack.push(node); + break; + } + parent = stack.pop(); + } + } + function build(node, bucket) { + let children = []; + let nameNode; + for (let child of node.children) { + if ( + !nameNode && + child.capture.name.endsWith('.name') && + child.capture.name.startsWith(node.capture.name) + ) { + nameNode = child; + } else { + build(child, children); + } + } + if (!nameNode) { + nameNode = node; + } + const symbol = lsp7.DocumentSymbol.create( + nameNode.capture.node.text, + '', + symbolMapping.getSymbolKind(node.capture.name), + node.range, + nameNode.range + ); + symbol.children = children; + bucket.push(symbol); + } + const result = []; + for (let node of roots) { + build(node, result); + } + if (!flat) { + return result; + } + const flatResult = []; + (function flatten(all) { + for (let item of all) { + flatResult.push(item); + if (item.children) { + flatten(item.children); + } + } + })(result); + return flatResult; + } + + // server/src/features/foldingRanges.ts + let lsp8 = __toModule(require_main4()); + let FoldingRangeProvider = class { + constructor(_documents, _trees) { + this._documents = _documents; + this._trees = _trees; + } + register(connection2) { + connection2.client.register(lsp8.FoldingRangeRequest.type, { + documentSelector: Languages.getSupportedLanguages('folding', [ + 'comments', + 'folding', + ]), + }); + connection2.onRequest( + lsp8.FoldingRangeRequest.type, + this.provideFoldingRanges.bind(this) + ); + } + async provideFoldingRanges(params) { + const document2 = await this._documents.retrieve(params.textDocument.uri); + const tree = this._trees.getParseTree(document2); + if (!tree) { + return []; + } + const result = []; + const commentQuery = Languages.getQuery(document2.languageId, 'comments'); + const commentCaptures = commentQuery.captures(tree.rootNode); + const foldingQuery = Languages.getQuery(document2.languageId, 'folding'); + const foldingCaptures = foldingQuery.captures(tree.rootNode); + for (const capture of [commentCaptures, foldingCaptures].flat()) { + result.push( + lsp8.FoldingRange.create( + capture.node.startPosition.row, + capture.node.endPosition.row, + capture.node.startPosition.column, + capture.node.endPosition.column, + capture.name + ) + ); + } + return result; + } + }; + + // server/src/features/references.ts + let lsp9 = __toModule(require_main4()); + let ReferencesProvider = class { + constructor(_documents, _trees, _symbols) { + this._documents = _documents; + this._trees = _trees; + this._symbols = _symbols; + } + register(connection2) { + connection2.client.register(lsp9.ReferencesRequest.type, { + documentSelector: Languages.getSupportedLanguages('references', [ + 'locals', + 'identifiers', + 'references', + ]), + }); + connection2.onRequest( + lsp9.ReferencesRequest.type, + this.provideReferences.bind(this) + ); + } + async provideReferences(params) { + const document2 = await this._documents.retrieve(params.textDocument.uri); + const info = Locals.create(document2, this._trees); + const anchor = info.root.findDefinitionOrUsage(params.position); + if (anchor && !anchor.scope.likelyExports) { + const definitions = anchor.scope.findDefinitions(anchor.name); + if (definitions.length > 0) { + const result = []; + for (let def of definitions) { + if (params.context.includeDeclaration) { + result.push(lsp9.Location.create(document2.uri, def.range)); + } + } + const usages = anchor.scope.findUsages(anchor.name); + for (let usage of usages) { + result.push(lsp9.Location.create(document2.uri, usage.range)); + } + return result; + } + } + return await this._findGlobalReferences( + document2, + params.position, + params.context.includeDeclaration + ); + } + async _findGlobalReferences(document2, position, includeDeclaration) { + const tree = this._trees.getParseTree(document2); + if (!tree) { + return []; + } + const query = Languages.getQuery(document2.languageId, 'identifiers'); + const ident = identifierAtPosition(query, tree.rootNode, position)?.text; + if (!ident) { + return []; + } + const result = []; + let seenAsUsage = false; + let seenAsDef = false; + const usages = await this._symbols.getUsages(ident, document2); + for (let usage of usages) { + seenAsUsage = seenAsUsage || containsPosition(usage.range, position); + result.push(usage); + } + const definitions = await this._symbols.getDefinitions(ident, document2); + for (const { location } of definitions) { + seenAsDef = seenAsDef || containsPosition(location.range, position); + if (includeDeclaration) { + result.push(location); + } + } + if (!seenAsUsage && !seenAsDef) { + return []; + } + return result; + } + }; + function getDocumentUsages(document2, trees) { + const tree = trees.getParseTree(document2); + if (!tree) { + return []; + } + const query = Languages.getQuery(document2.languageId, 'references'); + const captures = query.captures(tree.rootNode); + const result = []; + for (let capture of captures) { + const name = capture.node.text; + const range = asLspRange(capture.node); + result.push({ + name, + range, + kind: lsp9.SymbolKind.File, + }); + } + return result; + } + + // server/src/features/selectionRanges.ts + let lsp10 = __toModule(require_main4()); + let SelectionRangesProvider = class { + constructor(_documents, _trees) { + this._documents = _documents; + this._trees = _trees; + } + register(connection2) { + connection2.client.register(lsp10.SelectionRangeRequest.type, { + documentSelector: Languages.allAsSelector(), + }); + connection2.onRequest( + lsp10.SelectionRangeRequest.type, + this.provideSelectionRanges.bind(this) + ); + } + async provideSelectionRanges(params) { + const document2 = await this._documents.retrieve(params.textDocument.uri); + const tree = this._trees.getParseTree(document2); + if (!tree) { + return []; + } + const result = []; + for (const position of params.positions) { + const stack = []; + const offset = document2.offsetAt(position); + let node = tree.rootNode; + stack.push(node); + while (true) { + let child = node.namedChildren.find((candidate) => { + return ( + candidate.startIndex <= offset && candidate.endIndex > offset + ); + }); + if (child) { + stack.push(child); + node = child; + continue; + } + break; + } + let parent; + for (let node2 of stack) { + let range = lsp10.SelectionRange.create(asLspRange(node2), parent); + parent = range; + } + if (parent) { + result.push(parent); + } + } + return result; + } + }; + + // server/src/features/symbolIndex.ts + let lsp11 = __toModule(require_main4()); + + // server/src/util/trie.ts + let Entry = class { + constructor(key, value) { + this.key = key; + this.value = value; + } + }; + var Trie = class { + constructor(ch, element) { + this.ch = ch; + this.element = element; + this._size = 0; + this._depth = 0; + this._children = new Map(); + } + static create() { + return new Trie('', void 0); + } + get size() { + return this._size; + } + get depth() { + return this._depth; + } + set(str, element) { + let chars = Array.from(str); + let node = this; + for (let pos = 0; pos < chars.length; pos++) { + node._depth = Math.max(chars.length - pos, node._depth); + const ch = chars[pos]; + let child = node._children.get(ch); + if (!child) { + child = new Trie(ch, void 0); + node._children.set(ch, child); + } + node = child; + } + if (!node.element) { + this._size += 1; + node.element = new Entry(str, element); + } else { + node.element.value = element; + } + } + get(str) { + let chars = Array.from(str); + let node = this; + for (let pos = 0; pos < chars.length; pos++) { + const ch = chars[pos]; + let child = node._children.get(ch); + if (!child) { + return void 0; + } + node = child; + } + return node.element?.value; + } + delete(str) { + let chars = Array.from(str); + let node = this; + let path = []; + for (let pos = 0; pos < chars.length; pos++) { + const ch = chars[pos]; + let child = node._children.get(ch); + if (!child) { + return false; + } + path.push([ch, node]); + node = child; + } + if (!node.element) { + return false; + } + node.element = void 0; + this._size -= 1; + while (path.length > 0) { + const [nodeCh, parent] = path.pop(); + if (node._children.size === 0 && !node.element) { + parent._children.delete(nodeCh); + } + node = parent; + if (node._children.size === 0) { + node._depth = 0; + } else { + let newDepth = 0; + for (let child of node._children.values()) { + newDepth = Math.max(newDepth, child.depth); + } + node._depth = 1 + newDepth; + } + } + return true; + } + *query(str) { + const bucket = new Set(); + const cache = new Map(); + const _query = (node, str2, pos, skipped, lastCh) => { + if (bucket.has(node)) { + return; + } + if (skipped > 12) { + return; + } + const map = cache.get(node); + if (map?.get(pos)) { + return; + } + if (map) { + map.set(pos, true); + } else { + cache.set(node, new Map([[pos, true]])); + } + if (pos >= str2.length) { + bucket.add(node); + return; + } + if (str2.length - pos > node._depth) { + return; + } + for (let [ch, child] of node._children) { + if (ch.toLowerCase() === str2[pos].toLowerCase()) { + _query(child, str2, pos + 1, skipped, ch); + } + _query(child, str2, pos, skipped + 1, ch); + } + }; + _query(this, str, 0, 0, this.ch); + for (let item of bucket) { + yield* item; + } + } + *[Symbol.iterator]() { + const stack = [this]; + while (stack.length > 0) { + const node = stack.shift(); + if (node.element) { + yield [node.element.key, node.element.value]; + } + for (let child of node._children.values()) { + stack.push(child); + } + } + } + }; + + // server/src/features/symbolIndex.ts + let Queue = class { + constructor() { + this._queue = new Set(); + } + enqueue(uri) { + if (isInteresting(uri) && !this._queue.has(uri)) { + this._queue.add(uri); + } + } + dequeue(uri) { + this._queue.delete(uri); + } + consume(n) { + if (n === void 0) { + const result2 = Array.from(this._queue.values()); + this._queue.clear(); + return result2; + } + const result = []; + const iter = this._queue.values(); + for (; n > 0; n--) { + const r = iter.next(); + if (r.done) { + break; + } + const uri = r.value; + result.push(uri); + this._queue.delete(uri); + } + return result; + } + }; + let DBPersistedIndex = class { + constructor(_name) { + this._name = _name; + this._version = 1; + this._store = 'fileSymbols'; + this._insertQueue = new Map(); + } + async open() { + if (this._db) { + return; + } + await new Promise((resolve, reject) => { + const request = indexedDB.open(this._name, this._version); + request.onerror = () => reject(request.error); + request.onsuccess = () => { + const db = request.result; + if (!db.objectStoreNames.contains(this._store)) { + console.error( + `Error while opening IndexedDB. Could not find '${this._store}' object store` + ); + return resolve(this._delete(db).then(() => this.open())); + } else { + resolve(void 0); + this._db = db; + } + }; + request.onupgradeneeded = () => { + const db = request.result; + if (db.objectStoreNames.contains(this._store)) { + db.deleteObjectStore(this._store); + } + db.createObjectStore(this._store); + }; + }); + } + async close() { + if (this._db) { + await this._bulkInsert(); + this._db.close(); + } + } + _delete(db) { + return new Promise((resolve, reject) => { + db.close(); + const deleteRequest = indexedDB.deleteDatabase(this._name); + deleteRequest.onerror = () => reject(deleteRequest.error); + deleteRequest.onsuccess = () => resolve(); + }); + } + insert(uri, info) { + const flatInfo = []; + for (let [word, i] of info) { + flatInfo.push(word); + flatInfo.push(i.definitions.size); + flatInfo.push(...i.definitions); + flatInfo.push(...i.usages); + } + this._insertQueue.set(uri, flatInfo); + clearTimeout(this._insertHandle); + this._insertHandle = setTimeout(() => { + this._bulkInsert().catch((err) => { + console.error(err); + }); + }, 50); + } + async _bulkInsert() { + if (this._insertQueue.size === 0) { + return; + } + return new Promise((resolve, reject) => { + if (!this._db) { + return reject(new Error('invalid state')); + } + const t = this._db.transaction(this._store, 'readwrite'); + const toInsert = new Map(this._insertQueue); + this._insertQueue.clear(); + for (let [uri, data] of toInsert) { + t.objectStore(this._store).put(data, uri); + } + t.oncomplete = () => resolve(void 0); + t.onerror = (err) => reject(err); + }); + } + getAll() { + return new Promise((resolve, reject) => { + if (!this._db) { + return reject(new Error('invalid state')); + } + const entries = new Map(); + const t = this._db.transaction(this._store, 'readonly'); + const store = t.objectStore(this._store); + const cursor = store.openCursor(); + cursor.onsuccess = () => { + if (!cursor.result) { + resolve(entries); + return; + } + const info = new Map(); + const flatInfo = cursor.result.value; + for (let i = 0; i < flatInfo.length; ) { + let word = flatInfo[i]; + let defLen = flatInfo[++i]; + let kindStart = ++i; + for ( + ; + i < flatInfo.length && typeof flatInfo[i] === 'number'; + i++ + ) {} + info.set(word, { + definitions: new Set( + flatInfo.slice(kindStart, kindStart + defLen) + ), + usages: new Set(flatInfo.slice(kindStart + defLen, i)), + }); + } + entries.set(String(cursor.result.key), info); + cursor.result.continue(); + }; + cursor.onerror = () => reject(cursor.error); + t.onerror = () => reject(t.error); + }); + } + delete(uris) { + return new Promise((resolve, reject) => { + if (!this._db) { + return reject(new Error('invalid state')); + } + const t = this._db.transaction(this._store, 'readwrite'); + const store = t.objectStore(this._store); + for (const uri of uris) { + const request = store.delete(uri); + request.onerror = (e) => console.error(e); + } + t.oncomplete = () => resolve(void 0); + t.onerror = (err) => reject(err); + }); + } + }; + let Index = class { + constructor() { + this._index = Trie.create(); + this._cleanup = new Map(); + } + get(text) { + return this._index.get(text); + } + query(query) { + return this._index.query(Array.from(query)); + } + [Symbol.iterator]() { + return this._index[Symbol.iterator](); + } + update(uri, value) { + this._cleanup.get(uri)?.(); + for (const [name, kinds] of value) { + const all = this._index.get(name); + if (all) { + all.set(uri, kinds); + } else { + this._index.set(name, new Map([[uri, kinds]])); + } + } + this._cleanup.set(uri, () => { + for (const name of value.keys()) { + const all = this._index.get(name); + if (all) { + if (all.delete(uri) && all.size === 0) { + this._index.delete(name); + } + } + } + }); + } + delete(uri) { + const cleanupFn = this._cleanup.get(uri); + if (cleanupFn) { + cleanupFn(); + this._cleanup.delete(uri); + return true; + } + return false; + } + }; + let SymbolIndex = class { + constructor(_trees, _documents, _persistedIndex) { + this._trees = _trees; + this._documents = _documents; + this._persistedIndex = _persistedIndex; + this.index = new Index(); + this._syncQueue = new Queue(); + this._asyncQueue = new Queue(); + } + addFile(uri) { + this._syncQueue.enqueue(uri); + this._asyncQueue.dequeue(uri); + } + removeFile(uri) { + this._syncQueue.dequeue(uri); + this._asyncQueue.dequeue(uri); + this.index.delete(uri); + } + async update() { + await this._currentUpdate; + this._currentUpdate = this._doUpdate(this._syncQueue.consume()); + return this._currentUpdate; + } + async _doUpdate(uris, silent) { + if (uris.length !== 0) { + const sw = new StopWatch(); + const tasks = uris.map(this._createIndexTask, this); + const stats = await parallel( + tasks, + 50, + new lsp11.CancellationTokenSource().token + ); + let totalRetrieve = 0; + let totalIndex = 0; + for (let stat of stats) { + totalRetrieve += stat.durationRetrieve; + totalIndex += stat.durationIndex; + } + if (!silent) { + console.log(`[index] added ${uris.length} files ${sw.elapsed()}ms + retrieval: ${Math.round(totalRetrieve)}ms + indexing: ${Math.round(totalIndex)}ms`); + } + } + } + _createIndexTask(uri) { + return async () => { + const _t1Retrieve = performance.now(); + const document2 = await this._documents.retrieve(uri); + const durationRetrieve = performance.now() - _t1Retrieve; + this.index.delete(uri); + const _t1Index = performance.now(); + try { + this._doIndex(document2); + } catch (e) { + console.log(`FAILED to index ${uri}`, e); + } + const durationIndex = performance.now() - _t1Index; + return { durationRetrieve, durationIndex }; + }; + } + _doIndex(document2, symbols, usages) { + const symbolInfo = new Map(); + if (!symbols) { + symbols = getDocumentSymbols(document2, this._trees, true); + } + for (const symbol of symbols) { + const all = symbolInfo.get(symbol.name); + if (all) { + all.definitions.add(symbol.kind); + } else { + symbolInfo.set(symbol.name, { + definitions: new Set([symbol.kind]), + usages: new Set(), + }); + } + } + if (!usages) { + usages = getDocumentUsages(document2, this._trees); + } + for (const usage of usages) { + const all = symbolInfo.get(usage.name); + if (all) { + all.usages.add(usage.kind); + } else { + symbolInfo.set(usage.name, { + definitions: new Set(), + usages: new Set([usage.kind]), + }); + } + } + this.index.update(document2.uri, symbolInfo); + this._persistedIndex.insert(document2.uri, symbolInfo); + } + async initFiles(_uris) { + const uris = new Set(_uris); + const sw = new StopWatch(); + console.log(`[index] building index for ${uris.size} files.`); + const persisted = await this._persistedIndex.getAll(); + const obsolete = new Set(); + for (const [uri, data] of persisted) { + if (!uris.delete(uri)) { + obsolete.add(uri); + } else { + this.index.update(uri, data); + this._asyncQueue.enqueue(uri); + } + } + console.log(`[index] added FROM CACHE ${ + persisted.size + } files ${sw.elapsed()}ms + ${uris.size} files still need to be fetched + ${obsolete.size} files are obsolete in cache`); + uris.forEach(this.addFile, this); + await this.update(); + await this._persistedIndex.delete(obsolete); + const asyncUpdate = async () => { + const uris2 = this._asyncQueue.consume(70); + if (uris2.length === 0) { + console.log('[index] ASYNC update is done'); + return; + } + const t1 = performance.now(); + await this._doUpdate(uris2, true); + setTimeout(() => asyncUpdate(), (performance.now() - t1) * 4); + }; + asyncUpdate(); + } + async getDefinitions(ident, source) { + await this.update(); + const result = []; + let sameLanguageOffset = 0; + const all = this.index.get(ident) ?? []; + const work = []; + for (const [uri, value] of all) { + if (value.definitions.size === 0) { + continue; + } + work.push( + this._documents + .retrieve(uri) + .then((document2) => { + const isSameLanguage = source.languageId === document2.languageId; + const symbols = getDocumentSymbols(document2, this._trees, true); + for (const item of symbols) { + if (item.name === ident) { + const info = lsp11.SymbolInformation.create( + item.name, + item.kind, + item.selectionRange, + uri + ); + if (isSameLanguage) { + result.unshift(info); + sameLanguageOffset++; + } else { + result.push(info); + } + } + } + setTimeout(() => { + this._asyncQueue.dequeue(document2.uri); + this._doIndex(document2, symbols); + }); + }) + .catch((err) => { + console.log(err); + }) + ); + } + await Promise.allSettled(work); + return result.slice(0, sameLanguageOffset || void 0); + } + async getUsages(ident, source) { + await this.update(); + const result = []; + const all = this.index.get(ident) ?? []; + const work = []; + let sameLanguageOffset = 0; + for (const [uri, value] of all) { + if (value.usages.size === 0) { + continue; + } + work.push( + this._documents + .retrieve(uri) + .then((document2) => { + const isSameLanguage = source.languageId === document2.languageId; + const usages = getDocumentUsages(document2, this._trees); + for (const item of usages) { + if (item.name === ident) { + const location = lsp11.Location.create(uri, item.range); + if (isSameLanguage) { + result.unshift(location); + sameLanguageOffset++; + } else { + result.push(location); + } + } + } + setTimeout(() => { + this._asyncQueue.dequeue(document2.uri); + this._doIndex(document2, void 0, usages); + }); + }) + .catch((err) => { + console.log(err); + }) + ); + } + await Promise.allSettled(work); + return result.slice(0, sameLanguageOffset || void 0); + } + }; + + // server/src/features/validation.ts + let import_vscode_languageserver2 = __toModule(require_main4()); + let Validation = class { + constructor(_connection, documents, _trees) { + this._connection = _connection; + this._trees = _trees; + this._currentValidation = new Map(); + documents.all().forEach(this._triggerValidation, this); + documents.onDidChangeContent((e) => this._triggerValidation(e.document)); + documents.onDidOpen((e) => this._triggerValidation(e.document)); + documents.onDidClose((e) => { + _connection.sendDiagnostics({ uri: e.document.uri, diagnostics: [] }); + }); + } + async _triggerValidation(document2) { + if (!isInteresting(document2.uri)) { + return; + } + const config = await this._connection.workspace.getConfiguration({ + section: 'anycode', + scopeUri: document2.uri, + }); + if (!config.diagnostics) { + return; + } + let cts = this._currentValidation.get(document2); + cts?.cancel(); + cts?.dispose(); + cts = new import_vscode_languageserver2.CancellationTokenSource(); + this._currentValidation.set(document2, cts); + const handle = setTimeout(() => this._createDiagnostics(document2), 500); + cts.token.onCancellationRequested(() => clearTimeout(handle)); + } + async _createDiagnostics(document2) { + const tree = this._trees.getParseTree(document2); + const diagnostics = []; + if (tree) { + const cursor = tree.walk(); + const seen = new Set(); + try { + let visitedChildren = false; + while (true) { + if (cursor.nodeIsMissing && !seen.has(cursor.nodeId)) { + diagnostics.push({ + range: asLspRange(cursor.currentNode()), + message: `Expected '${cursor.nodeType}'`, + severity: + import_vscode_languageserver2.DiagnosticSeverity.Error, + source: 'anycode', + code: 'missing', + }); + seen.add(cursor.nodeId); + } + if (!visitedChildren) { + if (!cursor.gotoFirstChild()) { + visitedChildren = true; + } + } + if (visitedChildren) { + if (cursor.gotoNextSibling()) { + visitedChildren = false; + } else if (cursor.gotoParent()) { + visitedChildren = true; + } else { + break; + } + } + } + } finally { + cursor.delete(); + } + } + this._connection.sendDiagnostics({ uri: document2.uri, diagnostics }); + } + }; + + // server/src/features/workspaceSymbols.ts + let lsp12 = __toModule(require_main4()); + let WorkspaceSymbol2 = class { + constructor(_documents, _trees, _symbols) { + this._documents = _documents; + this._trees = _trees; + this._symbols = _symbols; + } + register(connection2) { + connection2.client.register(lsp12.WorkspaceSymbolRequest.type, { + resolveProvider: true, + }); + connection2.onRequest( + lsp12.WorkspaceSymbolRequest.type, + this.provideWorkspaceSymbols.bind(this) + ); + connection2.onRequest( + lsp12.WorkspaceSymbolResolveRequest.type, + this.resolveWorkspaceSymbol.bind(this) + ); + } + async provideWorkspaceSymbols(params) { + const result = []; + await this._symbols.update(); + const all = this._symbols.index.query(params.query); + out: for (const [name, map] of all) { + for (const [uri, info] of map) { + for (const kind of info.definitions) { + const newLen = result.push( + lsp12.WorkspaceSymbol.create( + name, + kind, + uri, + lsp12.Range.create(0, 0, 0, 0) + ) + ); + if (newLen > 2e4) { + break out; + } + } + } + } + return result; + } + async resolveWorkspaceSymbol(item) { + const document2 = await this._documents.retrieve(item.location.uri); + const symbols = getDocumentSymbols(document2, this._trees, true); + for (let candidate of symbols) { + if (candidate.name === item.name && candidate.kind === item.kind) { + return lsp12.SymbolInformation.create( + item.name, + item.kind, + candidate.selectionRange, + item.location.uri + ); + } + } + return item; + } + }; + + // server/src/trees.ts + let import_tree_sitter2 = __toModule(require_tree_sitter()); + let Entry2 = class { + constructor(version, tree, edits) { + this.version = version; + this.tree = tree; + this.edits = edits; + } + }; + var Trees = class { + constructor(_documents) { + this._documents = _documents; + this._cache = new LRUMap({ + size: 100, + dispose(entries) { + for (let [, value] of entries) { + value.tree.delete(); + } + }, + }); + this._listener = []; + this._parser = new import_tree_sitter2.default(); + this._listener.push( + _documents.onDidChangeContent2((e) => { + const info = this._cache.get(e.document.uri); + if (info) { + info.edits.push(Trees._asEdits(e)); + } + }) + ); + } + dispose() { + this._parser.delete(); + for (let item of this._cache.values()) { + item.tree.delete(); + } + for (let item of this._listener) { + item.dispose(); + } + } + getParseTree(documentOrUri) { + if (typeof documentOrUri === 'string') { + return this._documents + .retrieve(documentOrUri) + .then((doc) => this._parse(doc)); + } else { + return this._parse(documentOrUri); + } + } + _parse(documentOrUri) { + let info = this._cache.get(documentOrUri.uri); + if (info?.version === documentOrUri.version) { + return info.tree; + } + const language = Languages.getLanguage(documentOrUri.languageId); + if (!language) { + return void 0; + } + this._parser.setLanguage(language); + this._parser.setTimeoutMicros(1e3 * 1e3); + try { + const version = documentOrUri.version; + const text = documentOrUri.getText(); + if (!info) { + const tree = this._parser.parse(text); + info = new Entry2(version, tree, []); + this._cache.set(documentOrUri.uri, info); + } else { + const oldTree = info.tree; + const deltas = info.edits.flat(); + deltas.forEach((delta) => oldTree.edit(delta)); + info.edits.length = 0; + info.tree = this._parser.parse(text, oldTree); + info.version = version; + oldTree.delete(); + } + return info.tree; + } catch (e) { + this._cache.delete(documentOrUri.uri); + return void 0; + } + } + static _asEdits(event) { + return event.changes.map((change) => ({ + startPosition: this._asTsPoint(change.range.start), + oldEndPosition: this._asTsPoint(change.range.end), + newEndPosition: this._asTsPoint( + event.document.positionAt(change.rangeOffset + change.text.length) + ), + startIndex: change.rangeOffset, + oldEndIndex: change.rangeOffset + change.rangeLength, + newEndIndex: change.rangeOffset + change.text.length, + })); + } + static _asTsPoint(position) { + const { line: row, character: column } = position; + return { row, column }; + } + }; + + // server/src/main.ts + let messageReader = new import_browser.BrowserMessageReader(self); + let messageWriter = new import_browser.BrowserMessageWriter(self); + let connection = (0, import_browser.createConnection)( + messageReader, + messageWriter + ); + console.log = connection.console.log.bind(connection.console); + console.warn = connection.console.warn.bind(connection.console); + console.error = connection.console.error.bind(connection.console); + let features = []; + connection.onInitialize(async (params) => { + const initData = params.initializationOptions; + const options = { + locateFile() { + return initData.treeSitterWasmUri; + }, + }; + await import_tree_sitter3.default.init(options); + await Languages.init(initData.supportedLanguages); + const documents = new DocumentStore(connection); + const trees = new Trees(documents); + const persistedCache = new DBPersistedIndex(initData.databaseName); + await persistedCache.open(); + connection.onExit(() => persistedCache.close()); + const symbolIndex = new SymbolIndex(trees, documents, persistedCache); + features.push(new WorkspaceSymbol2(documents, trees, symbolIndex)); + features.push(new DefinitionProvider(documents, trees, symbolIndex)); + features.push(new ReferencesProvider(documents, trees, symbolIndex)); + features.push(new CompletionItemProvider(documents, trees, symbolIndex)); + features.push(new DocumentHighlightsProvider(documents, trees)); + features.push(new DocumentSymbols(documents, trees)); + features.push(new SelectionRangesProvider(documents, trees)); + features.push(new FoldingRangeProvider(documents, trees)); + new Validation(connection, documents, trees); + documents.all().forEach((doc) => symbolIndex.addFile(doc.uri)); + documents.onDidOpen((event) => symbolIndex.addFile(event.document.uri)); + documents.onDidChangeContent((event) => + symbolIndex.addFile(event.document.uri) + ); + connection.onNotification('queue/remove', (uri) => + symbolIndex.removeFile(uri) + ); + connection.onNotification('queue/add', (uri) => symbolIndex.addFile(uri)); + connection.onRequest('queue/init', (uris) => { + return symbolIndex.initFiles(uris); + }); + console.log('Tree-sitter, languages, and features are READY'); + return { + capabilities: { + textDocumentSync: + import_vscode_languageserver3.TextDocumentSyncKind.Incremental, + }, + }; + }); + connection.onInitialized(() => { + for (let feature of features) { + feature.register(connection); + } + }); + connection.listen(); +})(); diff --git a/extensions/vscode-anycode/server/tree-sitter-c.wasm b/extensions/vscode-anycode/server/tree-sitter-c.wasm new file mode 100755 index 0000000000000000000000000000000000000000..aa1c6c490ef1507f160657d1721b64022f820879 GIT binary patch literal 327556 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

mS^-gBK{6V-e#QPV2xri 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 literal 0 HcmV?d00001 diff --git a/extensions/vscode-anycode/server/tree-sitter-cpp.wasm b/extensions/vscode-anycode/server/tree-sitter-cpp.wasm new file mode 100755 index 0000000000000000000000000000000000000000..25c55a143865db6966bb45aee122f0ef8450c447 GIT binary patch literal 1187722 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�YIJByW$k?5 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 ZUz=b0OZ{u=@LTf!mOQ_vPJe9Q{|D+9%mM%a literal 0 HcmV?d00001 diff --git a/extensions/vscode-anycode/server/tree-sitter-java.wasm b/extensions/vscode-anycode/server/tree-sitter-java.wasm new file mode 100755 index 0000000000000000000000000000000000000000..5de1ba3347828be013a94ee4cf2223065d804b3d GIT binary patch literal 232273 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 literal 0 HcmV?d00001 diff --git a/extensions/vscode-anycode/server/tree-sitter-php.wasm b/extensions/vscode-anycode/server/tree-sitter-php.wasm new file mode 100755 index 0000000000000000000000000000000000000000..7e01dc7c75ae5ee8a033721bf824cb73b2daaa12 GIT binary patch literal 352603 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

E0h&N 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 J@PFAM{udyozeWH6 literal 0 HcmV?d00001 diff --git a/extensions/vscode-anycode/server/tree-sitter-python.wasm b/extensions/vscode-anycode/server/tree-sitter-python.wasm new file mode 100755 index 0000000000000000000000000000000000000000..c90b5047ad8796d3c660e75039d797973bedcffe GIT binary patch literal 191411 zcmeFa31C#!^*?^z%w)361O|k#3P})I!Y;djj2aMJK(yACF(d&3A;BczQY)yasHkXN z(5eMQi%S(Pwb><=qN1XrVr#8+MXT1T)&J+*`_5Zt%fP$={QiG|``$ZuIp^H7 z-Q_JqRm}?w!e5(U&Dr&J4fDTPUKH>V852XN8%qeuSaP~=39fL!rGJTaqSFcgkrzN7 zDyS2{JO-DL@Ag1De{I9!yx7SNXD%RvuM6s$&um^;Rb8vW;DXu()eFz20G9=0C)d>Y}YrFc1+gUXkbQ- zYMbh+>g&#Nu{k)CmSEG-R_Rg;&_{lTy2N624K;O5P*{vb)=~!*OtCm75( z@&bmzhG_Wk-;ZlQ{^bESjDX)~`0!^0@{nEVGx!uhF%|gORP&5{RQ3n_$nhIRsF~*@ zpD*A;UEufo8EwAb9}L2xqZG>j&yX|P#bRf|^kdak_4P3}q-M(B1yxdEUs$6y#*x|* zr?eb%Tx<-`HC9&v-;|ch%F4rr!S0GO))|Ed+BTjB?TFe13tP?x>f(w_xEMYQMvmJ1 z4b7zXn1zd)=fcdL!b+XD9kO)c2uOW8V5QH7^ zH>K$x(9dd;E@Ue=>HR~i?$A*&4(SVZ7v38TW*ObE>SXrZEv6|Z1Rg3Cd z5NYaK5M1WK`=%Wqn|Az=7#%p)!aQnrW7C;cO*Lqz%4cxvkxdBqi)&*|wXRW}sOVQ7S$Q_-j1T`gu^K}_q$7Q)chRX-*cgL5IYvc2~kW#Jvp zQl2scJ~l16*x_bc>eG%pC`P@Huv(^xg<1>^7$_HEcxh~?ja9WU`6*L5053j#A*_J< zAC?g+gcB?H#hU9eg;-eCGM6LyV#ZQo+ff>Z*m%{z&HQLyDyO&5fH4*enVR>A*>z3L zEs$aFOxZuI(GH-rncG{&lGYS=ef zGSiQb9XAZhvb$&5IxG74SSq7-xY#i^{*l%I8f$5)s%vSUl3>o2W2&W_Q(B;9c-!I` z-~pVlw&CzY4zUoXQPi-Zv1Ia6v2G~GTyvC3gJO6y=1Y*!u;Ce1=Me$3AWT+y@L50y zIW#gHlhK9sh+VT5%|;lS(!z3cd7|>)1q;|UhM$&E2S)zb+;)mLG{ ztngPVwImXS94jkn#4rp0(8M~4j47Fo9APy|8JirDazrdPr&d|FJuPwdH%`savaR7! zwku}pO(UBjc{S$uKD>2C6Z&WcQJZfb4_mj9(F>~1!umkj$>v;8eR(0({wPKmGs0vZFrM5OnOlna<=y=4SAu&u8XYgck;yE?}c0)D0WV@BwuGYUPU9lla&v!0PL4jocc>$1n`EemLpLvk5Rb{xLY&yFh@k+&kl6u1HmXu*sl zaY2*IEd>l6-mqu^*4EXr`nm-?7}i&E5P*P>aE67thPbdWg&o?|eg=JT%5W+#LG{8` z#~WBIbY0KG{Q?9ZGyIH*9XBGzW9^a7`pifx^^fA-nXI|Oy(JCwZt}r)rQ~rfAwE|+ z;=8?O9fpZceci0;g$rZxl2kKdktVO QpnR@WoessZ=tO1nbJ!7YKOBx43olQLI~ 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 ZSy?otZz{jMea*3H-s~)UZC*Om{r{)!JTw3R literal 0 HcmV?d00001 diff --git a/extensions/vscode-anycode/server/tree-sitter-rust.wasm b/extensions/vscode-anycode/server/tree-sitter-rust.wasm new file mode 100755 index 0000000000000000000000000000000000000000..c858e804745469e23ffafc09166859c02bf975ae GIT binary patch literal 638448 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

T2N(@Vogqx5r9`wZk>5Bo$jl5dI}*`x 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 z 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μ2gJH;rGY=2Is$hfl1r8>nFomAImvzsouY4`&SMF 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 z z!Anv831!7`i8{EwTzj?laxP}nY{PW19lUP6irBQ6y^3r?dSu+o2ys!YI2Cadzcfo{ zOHC&6adOrSUW)R+Tvi;HsH59!`Cnna+8eb6a%+*iT{Lgg6TepLoTO(q6YGIS756v) z5}b}=X&mtx5j&NTITN9A{=j_AE3Q+tD5g*Wrsnh)&)sJg-Y_TZbf&dESW zA=U$pD(-KtI2}cC#VuQr6la?HyvsIJoc0F03jd5Mj!Anv8x60>nT%wL{@8o}l`D*VD`gzvhb-0u zjVkVMKF8@OiqCOZRwTulrateL4d*!R4Q>_Qt9?*=FBdavwjo1o2d`TnAT}*#A0V5M z9vSyCLR=IpPDR|rFU``~QjdpqTZ8> z88zE5U2F%hTO$yg7PAq^CZtEky^IhS#fnoAH}OlebhgxF5+5gL&ETade@|I)T%rzc z)759FPnU}sHQO*H@HZ5jzBAbvN8TT?mTofx#Mcl+M z&C=OYlSzD>oHc`&qWrU$&*Qj69o*)w&s(267c*+MVY=83Ubp5&Y+B6bMK&QlGVW!B zxF}Yfinxhinx(U)CX@I$Ico+lMfvA0D~?Ol!EOHfg7x`xF{5T1ri<<1b!$Pyrp0VQ zWE0XO<6cIHi(=0 zZhZo=X)*f*vI*&taW5mpMX};k#7+FtES)VinZ(D*Su=Pk%D-?~aa^JfZj03yuP>I1 z88zE5U2F%hTZFC)Z7vEo$3P5jaz)#K*~5Gk7V= zzeHJaT%rzc%hX5Jm&wJ9nr)aawu9HLQHV{8*(hWa(j((uMu>}I#i@v!_@!AoTWT_i zkCU@z@KTh2nX=-zL>=6gt1n+)E*CRuwqd&14qmsGM{HWmmPa-rJu>cPgt#bHoQk-K zUz(+}r6!a3I5}$uFGcy6D=Usm)X{Bp{#Vc^YdFy&wH4uM=M~`5_0Gvahb-0ujVkVM ze$PQiQT#5~Efq;|rm4?+OT#_D+8gXDtQ=JwYpwlvxmK=sP6j#(u^wntaes5g=_raT z?j4g9XPWxF@8pN<@2hHWaI3Itef9dPxtLM24H;rPc->kZv1u_|9odBR$hemg;-Xk_ zD&i)7X_n5GnoQ#3nqpJ1>w+d_4*Q&3Xiy1ZBkRi5%*R8b>n-;URkWEOBjC&a& zE{YYWB5vZBX6bCH$s|5b&YHnXQT{c{a~zkbgWEdw_3G>7Vn)q2Oc&e1>(+XRO^exj z$R?ym#=VRX7sZNG5jXKmvvju9WD*}IXU*WHDE~TT#c_!`xNT7XQhkG5%&6Ih>0� z-TD$@(_;1|WE0XO<6cIHi(S zGitVBy4Vh0w>Cj+TFf>O)h5CY{PW19lUOBhuE~3ZHH_^dSu+o2ys!YI2Cad zzcfo{OHC&6adOrSUW)Q>Q&t?8sDs-M^_}WFv?&T+FE1hUsEE zc-`6!v1u{e4cUbB$hemg;-Xk_D&i)7X_n5GnoQ#3(+jVO^exn$R?ym#=VRX7sZNG5jXKmvvju9 zWD*}IXU*WHDF41?#c_!`xP7O7VEsF}m{GG0)5Ui1x^*C8(_(fYvI*&taW5mpMX};k z#7+FtES)VinZ(D*Su=Pk%Kx3R;a66=aX#J2}%&6Ih>0�-8vMp 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 literal 0 HcmV?d00001 diff --git a/extensions/vscode-anycode/server/tree-sitter-typescript.wasm b/extensions/vscode-anycode/server/tree-sitter-typescript.wasm new file mode 100755 index 0000000000000000000000000000000000000000..0ca4303523be5f822e249e23e14ceb5eba434c13 GIT binary patch literal 1389235 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%0D8Gc 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 literal 0 HcmV?d00001 diff --git a/extensions/vscode-anycode/server/tree-sitter/tree-sitter.wasm b/extensions/vscode-anycode/server/tree-sitter/tree-sitter.wasm new file mode 100755 index 0000000000000000000000000000000000000000..7e3058ed3f52eda99c3db77aafd0d0fd61bcefb3 GIT binary patch literal 171876 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%0Dv2w&tA!2NP*! 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 need to enable JavaScript to run this app.

folderUri: { scheme: 'github1s', authority: '', path: '/' }, staticExtensions: [], enableSyncByDefault: false, - additionalBuiltinExtensions: ['ms-vscode.anycode'], + additionalBuiltinExtensions: [], webviewEndpoint: window.location.origin + '/static/vscode/vs/workbench/contrib/webview/browser/pre', diff --git a/resources/index-hash.html b/resources/index-hash.html index bcf3c2e79..ae412149f 100644 --- a/resources/index-hash.html +++ b/resources/index-hash.html @@ -174,7 +174,7 @@

You need to enable JavaScript to run this app.

folderUri: { scheme: 'github1s', authority: '', path: '/' }, staticExtensions: [], enableSyncByDefault: false, - additionalBuiltinExtensions: ['ms-vscode.anycode'], + additionalBuiltinExtensions: [], webviewEndpoint: window.location.origin + '/static/{STATIC_HASH_CODE}/vscode/vs/workbench/contrib/webview/browser/pre', diff --git a/resources/index.html b/resources/index.html index 44842ed96..b3c9f7896 100644 --- a/resources/index.html +++ b/resources/index.html @@ -174,7 +174,7 @@

You need to enable JavaScript to run this app.

folderUri: { scheme: 'github1s', authority: '', path: '/' }, staticExtensions: [], enableSyncByDefault: false, - additionalBuiltinExtensions: ['ms-vscode.anycode'], + additionalBuiltinExtensions: [], webviewEndpoint: window.location.origin + '/static/vscode/vs/workbench/contrib/webview/browser/pre', From 17f2ff0d83607e8278343b9cdd115df8e063836f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 30 Dec 2021 12:40:41 +0800 Subject: [PATCH 072/280] chore(deps): bump ansi-regex from 5.0.0 to 5.0.1 (#380) Bumps [ansi-regex](https://github.com/chalk/ansi-regex) from 5.0.0 to 5.0.1. - [Release notes](https://github.com/chalk/ansi-regex/releases) - [Commits](https://github.com/chalk/ansi-regex/compare/v5.0.0...v5.0.1) --- updated-dependencies: - dependency-name: ansi-regex dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 869a99c5b..b52d2b244 100644 --- a/yarn.lock +++ b/yarn.lock @@ -235,9 +235,9 @@ ansi-escapes@^4.3.0: type-fest "^0.11.0" ansi-regex@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" - integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== ansi-styles@^3.2.1: version "3.2.1" From 7eae943418545ed9ffe8c67ab0d4247801fb6196 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 30 Dec 2021 12:41:12 +0800 Subject: [PATCH 073/280] chore(deps): bump normalize-url in /api/github-auth-callback (#379) Bumps [normalize-url](https://github.com/sindresorhus/normalize-url) from 4.5.0 to 4.5.1. - [Release notes](https://github.com/sindresorhus/normalize-url/releases) - [Commits](https://github.com/sindresorhus/normalize-url/commits) --- updated-dependencies: - dependency-name: normalize-url dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- api/github-auth-callback/yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/api/github-auth-callback/yarn.lock b/api/github-auth-callback/yarn.lock index b0648e453..a7829e995 100644 --- a/api/github-auth-callback/yarn.lock +++ b/api/github-auth-callback/yarn.lock @@ -157,9 +157,9 @@ mimic-response@^3.1.0: integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== normalize-url@^4.1.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129" - integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ== + version "4.5.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" + integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== once@^1.3.1, once@^1.4.0: version "1.4.0" From 4ba1725cf23820851bd184d46a469ead41a0d289 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 13 Jan 2022 23:04:16 +0800 Subject: [PATCH 074/280] chore(deps): bump follow-redirects from 1.14.3 to 1.14.7 (#382) Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.14.3 to 1.14.7. - [Release notes](https://github.com/follow-redirects/follow-redirects/releases) - [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.14.3...v1.14.7) --- updated-dependencies: - dependency-name: follow-redirects dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index b52d2b244..35fcb8ff0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -858,9 +858,9 @@ flatted@^3.1.0: integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA== follow-redirects@^1.0.0, follow-redirects@^1.14.0: - version "1.14.3" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.3.tgz#6ada78118d8d24caee595595accdc0ac6abd022e" - integrity sha512-3MkHxknWMUtb23apkgz/83fDoe+y+qr0TdgacGIA7bew+QLBo3vdgEN2xEsuXNivpFy4CyDhBBZnNZOtalmenw== + version "1.14.7" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.7.tgz#2004c02eb9436eee9a21446a6477debf17e81685" + integrity sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ== from@~0: version "0.1.7" From bf20e117c9dd5f2153433dd51ecd10bd9d94d5d7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 13 Jan 2022 22:33:10 +0530 Subject: [PATCH 075/280] chore(deps): bump follow-redirects from 1.14.3 to 1.14.7 in /tests (#383) Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.14.3 to 1.14.7. - [Release notes](https://github.com/follow-redirects/follow-redirects/releases) - [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.14.3...v1.14.7) --- updated-dependencies: - dependency-name: follow-redirects dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- tests/yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/yarn.lock b/tests/yarn.lock index c2bb0806b..22dfb9bc8 100644 --- a/tests/yarn.lock +++ b/tests/yarn.lock @@ -1723,9 +1723,9 @@ find-up@^4.0.0, find-up@^4.1.0: path-exists "^4.0.0" follow-redirects@^1.14.0: - version "1.14.3" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.3.tgz#6ada78118d8d24caee595595accdc0ac6abd022e" - integrity sha512-3MkHxknWMUtb23apkgz/83fDoe+y+qr0TdgacGIA7bew+QLBo3vdgEN2xEsuXNivpFy4CyDhBBZnNZOtalmenw== + version "1.14.7" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.7.tgz#2004c02eb9436eee9a21446a6477debf17e81685" + integrity sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ== for-in@^1.0.2: version "1.0.2" From ad105e2350e0a18f5d12ed56fb8ea724333ec0e4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 13 Feb 2022 00:23:35 +0800 Subject: [PATCH 076/280] chore(deps): bump follow-redirects from 1.14.7 to 1.14.8 (#385) Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.14.7 to 1.14.8. - [Release notes](https://github.com/follow-redirects/follow-redirects/releases) - [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.14.7...v1.14.8) --- updated-dependencies: - dependency-name: follow-redirects dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 35fcb8ff0..4c2f1ef43 100644 --- a/yarn.lock +++ b/yarn.lock @@ -858,9 +858,9 @@ flatted@^3.1.0: integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA== follow-redirects@^1.0.0, follow-redirects@^1.14.0: - version "1.14.7" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.7.tgz#2004c02eb9436eee9a21446a6477debf17e81685" - integrity sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ== + version "1.14.8" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.8.tgz#016996fb9a11a100566398b1c6839337d7bfa8fc" + integrity sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA== from@~0: version "0.1.7" From 602c64a5a15c22950724950171cdc02d021580ed Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 14 Feb 2022 13:57:08 +0800 Subject: [PATCH 077/280] chore(deps): bump follow-redirects from 1.14.7 to 1.14.8 in /tests (#386) Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.14.7 to 1.14.8. - [Release notes](https://github.com/follow-redirects/follow-redirects/releases) - [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.14.7...v1.14.8) --- updated-dependencies: - dependency-name: follow-redirects dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- tests/yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/yarn.lock b/tests/yarn.lock index 22dfb9bc8..1cb396aa9 100644 --- a/tests/yarn.lock +++ b/tests/yarn.lock @@ -1723,9 +1723,9 @@ find-up@^4.0.0, find-up@^4.1.0: path-exists "^4.0.0" follow-redirects@^1.14.0: - version "1.14.7" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.7.tgz#2004c02eb9436eee9a21446a6477debf17e81685" - integrity sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ== + version "1.14.8" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.8.tgz#016996fb9a11a100566398b1c6839337d7bfa8fc" + integrity sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA== for-in@^1.0.2: version "1.0.2" From 76dc9e50c12072b14c4811c95c3370249467b17c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 29 Mar 2022 21:56:52 +0800 Subject: [PATCH 078/280] chore(deps): bump minimist from 1.2.5 to 1.2.6 in /tests (#394) Bumps [minimist](https://github.com/substack/minimist) from 1.2.5 to 1.2.6. - [Release notes](https://github.com/substack/minimist/releases) - [Commits](https://github.com/substack/minimist/compare/1.2.5...1.2.6) --- updated-dependencies: - dependency-name: minimist dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- tests/yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/yarn.lock b/tests/yarn.lock index 1cb396aa9..e81da3ab9 100644 --- a/tests/yarn.lock +++ b/tests/yarn.lock @@ -3031,9 +3031,9 @@ minimatch@^3.0.4: brace-expansion "^1.1.7" minimist@^1.1.1, 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== + version "1.2.6" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" + integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== mixin-deep@^1.2.0: version "1.3.2" From 32b7ce832e264f6ea1b583e2cb51303354efb3f8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 9 May 2022 17:58:25 +0800 Subject: [PATCH 079/280] chore(deps): bump minimist from 1.2.5 to 1.2.6 (#395) Bumps [minimist](https://github.com/substack/minimist) from 1.2.5 to 1.2.6. - [Release notes](https://github.com/substack/minimist/releases) - [Commits](https://github.com/substack/minimist/compare/1.2.5...1.2.6) --- updated-dependencies: - dependency-name: minimist dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 4c2f1ef43..59f04e63b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1396,9 +1396,9 @@ minimatch@3.0.4, minimatch@^3.0.4: brace-expansion "^1.1.7" 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== + version "1.2.6" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" + integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== ms@2.1.2: version "2.1.2" From 4838578600c902975340a877300692e9f015b136 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 9 May 2022 17:58:51 +0800 Subject: [PATCH 080/280] chore(deps): bump minimist from 1.2.5 to 1.2.6 in /extensions/github1s (#392) Bumps [minimist](https://github.com/substack/minimist) from 1.2.5 to 1.2.6. - [Release notes](https://github.com/substack/minimist/releases) - [Commits](https://github.com/substack/minimist/compare/1.2.5...1.2.6) --- updated-dependencies: - dependency-name: minimist dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- extensions/github1s/yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/extensions/github1s/yarn.lock b/extensions/github1s/yarn.lock index f34d01257..c8310a024 100644 --- a/extensions/github1s/yarn.lock +++ b/extensions/github1s/yarn.lock @@ -799,9 +799,9 @@ mimic-fn@^2.1.0: integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== 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== + version "1.2.6" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" + integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== neo-async@^2.6.2: version "2.6.2" From 712c726264c59c09e9af161be28309b15f1d58c4 Mon Sep 17 00:00:00 2001 From: netcon Date: Fri, 13 May 2022 22:43:03 +0800 Subject: [PATCH 081/280] refactor github1s for supporting other scm * chore: add type definations * chore: add type definations * chore: add type definations * chore: add type definations * chore: add type definations * chore: add github1s adapter * chore: implements adapter * chore: add github1s adapter * refactor: refact file system provider * refactor: refact fileSystemProvider * refactor: fill github datasource * refactor: fill github datasource * refactor: fill github datasource * refactor: fill github datasource * refactor: text search provider * refactor: definitions and references * refactor: move settings code to adapters * feat: add github1s adapter * refactor: refactor pull list view * refactor: refactor commit list view * refactor: changed file provider * refactor: definination provider and reference provider * refactor: hover provider * refactor: text search provider and file search provider * refactor: update provider files * refactor: extension listeners * refactor: editor and ref commands * refactor: rename constants * refactor: use singleton repository * refactor: blame commands * refactor: global commands * refactor: optimize file system provider * reafactor: clean entry files * reafactor: fix ts errors * reafactor: fix read submodule file * rafactor: optimize director structure & fix chnaged files decoration * feat: upgrade vscode to 1.66.2 * feat: update initialize rule * feat: update vscode deps and add workspace identifier * feat: update proload css * feat: add auth command * feat: github oauth token * feat: remove unused files * feat: update adapter context * feat: preload file structures * fix: css preload typo * fix: connect to github and set token * refactor: remove vscode loader.js modification * fix: invalid token status & localize webview libraries * feat: update dependencies & fix commit diff * fix: token changed create wrong octokit * fix: data source types * feat: add notifications & platform logos * feat: use sourcegraph api * feat: update github1s fetcher retry rule * feat: remove prebuilt vscode-anycode * feat: remove prebuilt vscode-anycode * feat: add sourcegraph api * feat: change settings page * feat: auto switch github api * chore: update datasource & fix user avatar url * feat: fix vercel build script * fix: commit list refresh lost data * feat: commit list paginations * fix: commit manager load data * feat: increase text search count * feat: add list file recursively limit * feat: add gitlab support * feat: add bitbucket support * fix: parse router path * default: use default branch for router parser in gitlab1s * feat: update default page title * feat: update logo link path * test: update test cases * chore: update logo icon * ci: fix ci error * feat: update use sourcegraph api strategy --- .eslintignore | 3 + .eslintrc.json | 10 + .github/workflows/build.yml | 2 +- .github/workflows/test-wtih-vscode-build.yml | 2 +- .gitignore | 2 + .prettierignore | 7 +- .prettierrc.js | 1 + api/github-auth-callback/index.js | 11 +- api/vscode-unpkg/index.js | 5 +- docs/guide.md | 6 +- .../github1s/assets/pages/components.css | 164 + .../github1s/assets/pages/components.js | 58 + .../assets/pages/github1s-authentication.css | 227 + .../assets/pages/github1s-authentication.js | 230 + .../assets/pages/github1s-settings.css | 75 + .../assets/pages/github1s-settings.js | 219 + .../github1s/assets/pages/htm.module.js | 2 + .../assets/pages/preact-hooks.module.js | 2 + .../github1s/assets/pages/preact.module.js | 2 + .../github1s/extension.webpack.config.js | 4 +- extensions/github1s/package.json | 388 +- .../src/adapters/bitbucket1s/index.ts | 31 + .../src/adapters/bitbucket1s/parse-path.ts | 69 + .../src/adapters/bitbucket1s/router-parser.ts | 51 + .../src/adapters/github1s/authentication.ts | 108 + .../src/adapters/github1s/data-source.ts | 400 + .../github1s/src/adapters/github1s/fetcher.ts | 157 + .../github1s/src/adapters/github1s/graphql.ts | 32 + .../github1s/src/adapters/github1s/index.ts | 47 + .../src/adapters/github1s/parse-path.ts | 123 + .../src/adapters/github1s/router-parser.ts | 51 + .../src/adapters/github1s/settings.ts | 89 + .../github1s/src/adapters/github1s/token.ts | 60 + .../github1s/src/adapters/gitlab1s/index.ts | 31 + .../src/adapters/gitlab1s/parse-path.ts | 103 + .../src/adapters/gitlab1s/router-parser.ts | 51 + extensions/github1s/src/adapters/index.ts | 19 + extensions/github1s/src/adapters/manager.ts | 63 + .../src/adapters/sourcegraph/blame.ts | 71 + .../src/adapters/sourcegraph/commit.ts | 99 + .../src/adapters/sourcegraph/common.ts | 51 + .../src/adapters/sourcegraph/comparison.ts | 56 + .../src/adapters/sourcegraph/data-source.ts | 251 + .../sourcegraph/definition.ts | 81 +- .../github1s/src/adapters/sourcegraph/file.ts | 78 + .../sourcegraph/hover.ts | 29 +- .../sourcegraph/position.ts | 70 +- .../github1s/src/adapters/sourcegraph/ref.ts | 52 + .../sourcegraph/reference.ts | 75 +- .../src/adapters/sourcegraph/repository.ts | 29 + .../src/adapters/sourcegraph/search.ts | 119 + extensions/github1s/src/adapters/types.ts | 400 + extensions/github1s/src/changes/files.ts | 149 + extensions/github1s/src/changes/index.ts | 30 + extensions/github1s/src/changes/quick-diff.ts | 84 + extensions/github1s/src/commands/blame.ts | 150 +- .../github1s/src/commands/code-review.ts | 147 + extensions/github1s/src/commands/commit.ts | 114 +- extensions/github1s/src/commands/editor.ts | 171 +- extensions/github1s/src/commands/gitpod.ts | 19 - extensions/github1s/src/commands/global.ts | 35 +- extensions/github1s/src/commands/index.ts | 125 +- extensions/github1s/src/commands/pull.ts | 110 - extensions/github1s/src/commands/ref.ts | 48 +- extensions/github1s/src/commands/token.ts | 154 - extensions/github1s/src/extension.ts | 93 +- extensions/github1s/src/helpers/async.ts | 3 +- extensions/github1s/src/helpers/constants.ts | 6 - extensions/github1s/src/helpers/context.ts | 12 +- extensions/github1s/src/helpers/date.ts | 3 +- extensions/github1s/src/helpers/fetch.ts | 126 - extensions/github1s/src/helpers/func.ts | 29 +- extensions/github1s/src/helpers/page.ts | 54 + extensions/github1s/src/helpers/submodule.ts | 25 +- extensions/github1s/src/helpers/urls.ts | 11 +- extensions/github1s/src/helpers/util.ts | 24 +- extensions/github1s/src/helpers/vscode.ts | 3 +- extensions/github1s/src/interfaces/client.ts | 32 - .../github1s/src/interfaces/github-api-gql.ts | 126 - .../src/interfaces/github-api-rest.ts | 214 - .../src/interfaces/sourcegraph/common.ts | 65 - .../src/interfaces/sourcegraph/search.ts | 105 - .../github1s/src/listeners/router/changes.ts | 26 + .../github1s/src/listeners/router/explorer.ts | 47 +- .../github1s/src/listeners/router/index.ts | 2 +- .../src/listeners/router/source-control.ts | 27 - extensions/github1s/src/listeners/vscode.ts | 96 +- extensions/github1s/src/messages.ts | 29 +- .../changedFileDecorationProvider.ts | 125 - .../src/providers/decorations/changed-file.ts | 118 + .../source-control.ts} | 37 +- .../src/providers/decorations/submodule.ts | 61 + .../github1s/src/providers/definition.ts | 74 + .../src/providers/definitionProvider.ts | 69 - .../{fileSearchProvider.ts => file-search.ts} | 54 +- .../index.ts | 231 +- .../types.ts | 10 +- .../src/providers/fileSystemProvider/util.ts | 102 - extensions/github1s/src/providers/hover.ts | 122 + .../github1s/src/providers/hoverProvider.ts | 117 - extensions/github1s/src/providers/index.ts | 84 +- .../{referenceProvider.ts => reference.ts} | 55 +- .../providers/submoduleDecorationProvider.ts | 56 - .../github1s/src/providers/text-search.ts | 62 + .../src/providers/textSearchProvider.ts | 85 - .../src/repository/branch-tag-manager.ts | 116 + .../src/repository/code-review-manager.ts | 154 + .../github1s/src/repository/commit-manager.ts | 259 + .../src/repository/github-commit-manager.ts | 182 - .../src/repository/github-pull-manager.ts | 97 - extensions/github1s/src/repository/index.ts | 189 +- .../github1s/src/repository/linked-list.ts | 67 - extensions/github1s/src/repository/types.ts | 102 - extensions/github1s/src/router/index.ts | 92 +- extensions/github1s/src/router/parser/blob.ts | 29 - .../github1s/src/router/parser/commit.ts | 14 - .../github1s/src/router/parser/commits.ts | 19 - .../github1s/src/router/parser/index.ts | 54 - extensions/github1s/src/router/parser/pull.ts | 22 - .../github1s/src/router/parser/pulls.ts | 20 - extensions/github1s/src/router/parser/tree.ts | 52 - extensions/github1s/src/router/types.ts | 65 - .../github1s/src/source-control/changes.ts | 178 - .../github1s/src/source-control/index.ts | 12 - .../src/source-control/quickDiffProviders.ts | 106 - .../status-bar.ts => statusbar/checkout.ts} | 11 +- .../github1s/src/{ => statusbar}/gitpod.ts | 17 +- extensions/github1s/src/statusbar/index.ts | 14 + .../github1s/src/{ => statusbar}/sponsors.ts | 14 +- .../github1s/src/views/code-review-list.ts | 195 + .../github1s/src/views/commit-list-view.ts | 137 - extensions/github1s/src/views/commit-list.ts | 149 + extensions/github1s/src/views/index.ts | 41 +- .../github1s/src/views/pull-list-view.ts | 170 - .../github1s/src/views/settings-view.ts | 463 - extensions/github1s/src/vscode.proposed.d.ts | 192 +- extensions/github1s/tsconfig.json | 4 +- extensions/github1s/yarn.lock | 2074 +- extensions/vscode-anycode/README.md | 5 - extensions/vscode-anycode/package.json | 101 - .../prebuilt/anycode.extension.js | 27868 ---------------- .../vscode-anycode/prebuilt/anycode.server.js | 15546 --------- .../vscode-anycode/server/tree-sitter-c.wasm | Bin 327556 -> 0 bytes .../server/tree-sitter-c_sharp.wasm | Bin 2987883 -> 0 bytes .../server/tree-sitter-cpp.wasm | Bin 1187722 -> 0 bytes .../vscode-anycode/server/tree-sitter-go.wasm | Bin 180028 -> 0 bytes .../server/tree-sitter-java.wasm | Bin 232273 -> 0 bytes .../server/tree-sitter-php.wasm | Bin 352603 -> 0 bytes .../server/tree-sitter-python.wasm | Bin 191411 -> 0 bytes .../server/tree-sitter-rust.wasm | Bin 638448 -> 0 bytes .../server/tree-sitter-typescript.wasm | Bin 1389235 -> 0 bytes .../server/tree-sitter/tree-sitter.wasm | Bin 171876 -> 0 bytes package.json | 10 +- resources/bitbucket.svg | 5 + resources/github.svg | 2 + resources/gitlab.svg | 5 + resources/index-dev-vscode.html | 67 +- resources/index-hash.html | 178 +- resources/index.html | 177 +- resources/initialize.js | 232 + scripts/package/copy-node_modules.sh | 6 +- scripts/package/generate-config.js | 90 +- scripts/postinstall.sh | 2 +- scripts/serve-dist.js | 20 +- scripts/watch/watch-dist.js | 3 +- ...est-ts-should-load-successfully-1-snap.png | Bin 189480 -> 183878 bytes ...t-ts-should-open-file-correctly-1-snap.png | Bin 164108 -> 163707 bytes ...est-ts-should-show-commit-files-1-snap.png | Bin 0 -> 90561 bytes ...dex-test-ts-should-show-pr-list-1-snap.png | Bin 51708 -> 0 bytes ...dex-test-ts-should-show-pr-list-2-snap.png | Bin 54504 -> 0 bytes tests/__tests__/index.test.ts | 46 +- tests/package.json | 5 +- tests/yarn.lock | 158 +- tsconfig.json | 4 +- .../resources/gulp-github1s.js | 65 - .../scripts/copy-extensions.js | 30 - .../scripts/watch/watch-src.js | 19 - .../src/vs/base/worker/workerMain.ts | 101 - .../vs/code/browser/workbench/workbench.ts | 576 - .../src/vs/github1s/authorizing-github.ts | 60 - .../src/vs/github1s/authorizing-overlay.css | 269 - .../src/vs/github1s/authorizing-overlay.ts | 247 - .../src/vs/github1s/notification.css | 85 - .../src/vs/github1s/notification.ts | 68 - vscode-web-github1s/src/vs/github1s/util.ts | 31 - .../src/vs/github1s/welcomePage.css | 295 - .../src/vs/github1s/welcomePage.ts | 193 - vscode-web-github1s/src/vs/loader.js | 1907 -- .../telemetry/common/telemetryService.ts | 234 - .../api/worker/extHostExtensionService.ts | 252 - .../parts/titlebar/media/titlebarpart.css | 176 - .../browser/parts/titlebar/titlebarPart.ts | 569 - .../browser/workbench.contribution.ts | 537 - .../common/editor/resourceEditorInput.ts | 199 - .../files/browser/views/explorerView.ts | 940 - .../gettingStarted/browser/gettingStarted.ts | 1619 - .../page/browser/welcomePage.contribution.ts | 38 - .../services/workspaces/browser/workspaces.ts | 44 - vscode-web/.VERSION | 1 + {vscode-web-github1s => vscode-web}/README.md | 4 +- .../package.json | 23 +- .../resources/builtin-extensions.json | 0 .../scripts/build-vscode.sh | 8 +- .../scripts/clone-vscode.sh | 2 +- .../scripts/copy-extensions.sh | 7 +- .../scripts/copy-vscode.sh | 2 +- .../scripts/sync-code.sh | 3 + .../scripts/watch/watch-dist.js | 2 +- vscode-web/scripts/watch/watch-src.js | 27 + .../src/vs/base/common/platform.ts | 52 +- .../vs/code/browser/workbench/workbench.ts | 54 + .../vs/editor/common/config/editorOptions.ts | 907 +- .../src/vs/platform/product/common/product.ts | 58 +- .../telemetry/common/telemetryService.ts | 327 + .../parts/activitybar/activitybarActions.ts | 82 +- .../parts/activitybar/activitybarPart.ts | 135 +- .../parts/titlebar/media/titlebarpart.css | 234 + .../src/vs/workbench/browser/web.main.ts | 307 +- .../contrib/webview/browser/pre/main.js | 1117 + .../browser/gettingStarted.contribution.ts | 318 + .../builtinExtensionsScannerService.ts | 79 + .../services/label/common/labelService.ts | 355 + .../textfile/browser/textFileService.ts | 802 + .../themes/browser/workbenchThemeService.ts | 349 +- .../themes/common/themeConfiguration.ts | 26 +- .../tsconfig.json | 0 {vscode-web-github1s => vscode-web}/yarn.lock | 85 +- yarn.lock | 114 +- 228 files changed, 13328 insertions(+), 58868 deletions(-) create mode 100644 extensions/github1s/assets/pages/components.css create mode 100644 extensions/github1s/assets/pages/components.js create mode 100644 extensions/github1s/assets/pages/github1s-authentication.css create mode 100644 extensions/github1s/assets/pages/github1s-authentication.js create mode 100644 extensions/github1s/assets/pages/github1s-settings.css create mode 100644 extensions/github1s/assets/pages/github1s-settings.js create mode 100644 extensions/github1s/assets/pages/htm.module.js create mode 100644 extensions/github1s/assets/pages/preact-hooks.module.js create mode 100644 extensions/github1s/assets/pages/preact.module.js create mode 100644 extensions/github1s/src/adapters/bitbucket1s/index.ts create mode 100644 extensions/github1s/src/adapters/bitbucket1s/parse-path.ts create mode 100644 extensions/github1s/src/adapters/bitbucket1s/router-parser.ts create mode 100644 extensions/github1s/src/adapters/github1s/authentication.ts create mode 100644 extensions/github1s/src/adapters/github1s/data-source.ts create mode 100644 extensions/github1s/src/adapters/github1s/fetcher.ts create mode 100644 extensions/github1s/src/adapters/github1s/graphql.ts create mode 100644 extensions/github1s/src/adapters/github1s/index.ts create mode 100644 extensions/github1s/src/adapters/github1s/parse-path.ts create mode 100644 extensions/github1s/src/adapters/github1s/router-parser.ts create mode 100644 extensions/github1s/src/adapters/github1s/settings.ts create mode 100644 extensions/github1s/src/adapters/github1s/token.ts create mode 100644 extensions/github1s/src/adapters/gitlab1s/index.ts create mode 100644 extensions/github1s/src/adapters/gitlab1s/parse-path.ts create mode 100644 extensions/github1s/src/adapters/gitlab1s/router-parser.ts create mode 100644 extensions/github1s/src/adapters/index.ts create mode 100644 extensions/github1s/src/adapters/manager.ts create mode 100644 extensions/github1s/src/adapters/sourcegraph/blame.ts create mode 100644 extensions/github1s/src/adapters/sourcegraph/commit.ts create mode 100644 extensions/github1s/src/adapters/sourcegraph/common.ts create mode 100644 extensions/github1s/src/adapters/sourcegraph/comparison.ts create mode 100644 extensions/github1s/src/adapters/sourcegraph/data-source.ts rename extensions/github1s/src/{interfaces => adapters}/sourcegraph/definition.ts (52%) create mode 100644 extensions/github1s/src/adapters/sourcegraph/file.ts rename extensions/github1s/src/{interfaces => adapters}/sourcegraph/hover.ts (67%) rename extensions/github1s/src/{interfaces => adapters}/sourcegraph/position.ts (51%) create mode 100644 extensions/github1s/src/adapters/sourcegraph/ref.ts rename extensions/github1s/src/{interfaces => adapters}/sourcegraph/reference.ts (57%) create mode 100644 extensions/github1s/src/adapters/sourcegraph/repository.ts create mode 100644 extensions/github1s/src/adapters/sourcegraph/search.ts create mode 100644 extensions/github1s/src/adapters/types.ts create mode 100644 extensions/github1s/src/changes/files.ts create mode 100644 extensions/github1s/src/changes/index.ts create mode 100644 extensions/github1s/src/changes/quick-diff.ts create mode 100644 extensions/github1s/src/commands/code-review.ts delete mode 100644 extensions/github1s/src/commands/gitpod.ts delete mode 100644 extensions/github1s/src/commands/pull.ts delete mode 100644 extensions/github1s/src/commands/token.ts delete mode 100644 extensions/github1s/src/helpers/constants.ts delete mode 100644 extensions/github1s/src/helpers/fetch.ts create mode 100644 extensions/github1s/src/helpers/page.ts delete mode 100644 extensions/github1s/src/interfaces/client.ts delete mode 100644 extensions/github1s/src/interfaces/github-api-gql.ts delete mode 100644 extensions/github1s/src/interfaces/github-api-rest.ts delete mode 100644 extensions/github1s/src/interfaces/sourcegraph/common.ts delete mode 100644 extensions/github1s/src/interfaces/sourcegraph/search.ts create mode 100644 extensions/github1s/src/listeners/router/changes.ts delete mode 100644 extensions/github1s/src/listeners/router/source-control.ts delete mode 100644 extensions/github1s/src/providers/changedFileDecorationProvider.ts create mode 100644 extensions/github1s/src/providers/decorations/changed-file.ts rename extensions/github1s/src/providers/{sourceControlDecorationProvider.ts => decorations/source-control.ts} (51%) create mode 100644 extensions/github1s/src/providers/decorations/submodule.ts create mode 100644 extensions/github1s/src/providers/definition.ts delete mode 100644 extensions/github1s/src/providers/definitionProvider.ts rename extensions/github1s/src/providers/{fileSearchProvider.ts => file-search.ts} (57%) rename extensions/github1s/src/providers/{fileSystemProvider => file-system}/index.ts (53%) rename extensions/github1s/src/providers/{fileSystemProvider => file-system}/types.ts (84%) delete mode 100644 extensions/github1s/src/providers/fileSystemProvider/util.ts create mode 100644 extensions/github1s/src/providers/hover.ts delete mode 100644 extensions/github1s/src/providers/hoverProvider.ts rename extensions/github1s/src/providers/{referenceProvider.ts => reference.ts} (50%) delete mode 100644 extensions/github1s/src/providers/submoduleDecorationProvider.ts create mode 100644 extensions/github1s/src/providers/text-search.ts delete mode 100644 extensions/github1s/src/providers/textSearchProvider.ts create mode 100644 extensions/github1s/src/repository/branch-tag-manager.ts create mode 100644 extensions/github1s/src/repository/code-review-manager.ts create mode 100644 extensions/github1s/src/repository/commit-manager.ts delete mode 100644 extensions/github1s/src/repository/github-commit-manager.ts delete mode 100644 extensions/github1s/src/repository/github-pull-manager.ts delete mode 100644 extensions/github1s/src/repository/linked-list.ts delete mode 100644 extensions/github1s/src/repository/types.ts delete mode 100644 extensions/github1s/src/router/parser/blob.ts delete mode 100644 extensions/github1s/src/router/parser/commit.ts delete mode 100644 extensions/github1s/src/router/parser/commits.ts delete mode 100644 extensions/github1s/src/router/parser/index.ts delete mode 100644 extensions/github1s/src/router/parser/pull.ts delete mode 100644 extensions/github1s/src/router/parser/pulls.ts delete mode 100644 extensions/github1s/src/router/parser/tree.ts delete mode 100644 extensions/github1s/src/router/types.ts delete mode 100644 extensions/github1s/src/source-control/changes.ts delete mode 100644 extensions/github1s/src/source-control/index.ts delete mode 100644 extensions/github1s/src/source-control/quickDiffProviders.ts rename extensions/github1s/src/{source-control/status-bar.ts => statusbar/checkout.ts} (52%) rename extensions/github1s/src/{ => statusbar}/gitpod.ts (56%) create mode 100644 extensions/github1s/src/statusbar/index.ts rename extensions/github1s/src/{ => statusbar}/sponsors.ts (71%) create mode 100644 extensions/github1s/src/views/code-review-list.ts delete mode 100644 extensions/github1s/src/views/commit-list-view.ts create mode 100644 extensions/github1s/src/views/commit-list.ts delete mode 100644 extensions/github1s/src/views/pull-list-view.ts delete mode 100644 extensions/github1s/src/views/settings-view.ts delete mode 100644 extensions/vscode-anycode/README.md delete mode 100644 extensions/vscode-anycode/package.json delete mode 100644 extensions/vscode-anycode/prebuilt/anycode.extension.js delete mode 100644 extensions/vscode-anycode/prebuilt/anycode.server.js delete mode 100755 extensions/vscode-anycode/server/tree-sitter-c.wasm delete mode 100755 extensions/vscode-anycode/server/tree-sitter-c_sharp.wasm delete mode 100755 extensions/vscode-anycode/server/tree-sitter-cpp.wasm delete mode 100755 extensions/vscode-anycode/server/tree-sitter-go.wasm delete mode 100755 extensions/vscode-anycode/server/tree-sitter-java.wasm delete mode 100755 extensions/vscode-anycode/server/tree-sitter-php.wasm delete mode 100755 extensions/vscode-anycode/server/tree-sitter-python.wasm delete mode 100755 extensions/vscode-anycode/server/tree-sitter-rust.wasm delete mode 100755 extensions/vscode-anycode/server/tree-sitter-typescript.wasm delete mode 100755 extensions/vscode-anycode/server/tree-sitter/tree-sitter.wasm create mode 100644 resources/bitbucket.svg create mode 100644 resources/github.svg create mode 100644 resources/gitlab.svg create mode 100644 resources/initialize.js create mode 100644 tests/__tests__/__image_snapshots__/index-test-ts-should-show-commit-files-1-snap.png delete mode 100644 tests/__tests__/__image_snapshots__/index-test-ts-should-show-pr-list-1-snap.png delete mode 100644 tests/__tests__/__image_snapshots__/index-test-ts-should-show-pr-list-2-snap.png delete mode 100644 vscode-web-github1s/resources/gulp-github1s.js delete mode 100755 vscode-web-github1s/scripts/copy-extensions.js delete mode 100755 vscode-web-github1s/scripts/watch/watch-src.js delete mode 100644 vscode-web-github1s/src/vs/base/worker/workerMain.ts delete mode 100644 vscode-web-github1s/src/vs/code/browser/workbench/workbench.ts delete mode 100644 vscode-web-github1s/src/vs/github1s/authorizing-github.ts delete mode 100644 vscode-web-github1s/src/vs/github1s/authorizing-overlay.css delete mode 100644 vscode-web-github1s/src/vs/github1s/authorizing-overlay.ts delete mode 100644 vscode-web-github1s/src/vs/github1s/notification.css delete mode 100644 vscode-web-github1s/src/vs/github1s/notification.ts delete mode 100644 vscode-web-github1s/src/vs/github1s/util.ts delete mode 100644 vscode-web-github1s/src/vs/github1s/welcomePage.css delete mode 100644 vscode-web-github1s/src/vs/github1s/welcomePage.ts delete mode 100644 vscode-web-github1s/src/vs/loader.js delete mode 100644 vscode-web-github1s/src/vs/platform/telemetry/common/telemetryService.ts delete mode 100644 vscode-web-github1s/src/vs/workbench/api/worker/extHostExtensionService.ts delete mode 100644 vscode-web-github1s/src/vs/workbench/browser/parts/titlebar/media/titlebarpart.css delete mode 100644 vscode-web-github1s/src/vs/workbench/browser/parts/titlebar/titlebarPart.ts delete mode 100644 vscode-web-github1s/src/vs/workbench/browser/workbench.contribution.ts delete mode 100644 vscode-web-github1s/src/vs/workbench/common/editor/resourceEditorInput.ts delete mode 100644 vscode-web-github1s/src/vs/workbench/contrib/files/browser/views/explorerView.ts delete mode 100644 vscode-web-github1s/src/vs/workbench/contrib/welcome/gettingStarted/browser/gettingStarted.ts delete mode 100644 vscode-web-github1s/src/vs/workbench/contrib/welcome/page/browser/welcomePage.contribution.ts delete mode 100644 vscode-web-github1s/src/vs/workbench/services/workspaces/browser/workspaces.ts create mode 100644 vscode-web/.VERSION rename {vscode-web-github1s => vscode-web}/README.md (93%) rename {vscode-web-github1s => vscode-web}/package.json (67%) rename {vscode-web-github1s => vscode-web}/resources/builtin-extensions.json (100%) rename {vscode-web-github1s => vscode-web}/scripts/build-vscode.sh (50%) rename vscode-web-github1s/scripts/clone.sh => vscode-web/scripts/clone-vscode.sh (76%) rename {vscode-web-github1s => vscode-web}/scripts/copy-extensions.sh (73%) rename {vscode-web-github1s => vscode-web}/scripts/copy-vscode.sh (77%) rename {vscode-web-github1s => vscode-web}/scripts/sync-code.sh (81%) rename {vscode-web-github1s => vscode-web}/scripts/watch/watch-dist.js (92%) create mode 100755 vscode-web/scripts/watch/watch-src.js rename {vscode-web-github1s => vscode-web}/src/vs/base/common/platform.ts (69%) create mode 100644 vscode-web/src/vs/code/browser/workbench/workbench.ts rename {vscode-web-github1s => vscode-web}/src/vs/editor/common/config/editorOptions.ts (86%) rename {vscode-web-github1s => vscode-web}/src/vs/platform/product/common/product.ts (61%) create mode 100644 vscode-web/src/vs/platform/telemetry/common/telemetryService.ts rename {vscode-web-github1s => vscode-web}/src/vs/workbench/browser/parts/activitybar/activitybarActions.ts (87%) rename {vscode-web-github1s => vscode-web}/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts (90%) create mode 100644 vscode-web/src/vs/workbench/browser/parts/titlebar/media/titlebarpart.css rename {vscode-web-github1s => vscode-web}/src/vs/workbench/browser/web.main.ts (56%) create mode 100644 vscode-web/src/vs/workbench/contrib/webview/browser/pre/main.js create mode 100644 vscode-web/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStarted.contribution.ts create mode 100644 vscode-web/src/vs/workbench/services/extensionManagement/browser/builtinExtensionsScannerService.ts create mode 100644 vscode-web/src/vs/workbench/services/label/common/labelService.ts create mode 100644 vscode-web/src/vs/workbench/services/textfile/browser/textFileService.ts rename {vscode-web-github1s => vscode-web}/src/vs/workbench/services/themes/browser/workbenchThemeService.ts (68%) rename {vscode-web-github1s => vscode-web}/src/vs/workbench/services/themes/common/themeConfiguration.ts (91%) rename {vscode-web-github1s => vscode-web}/tsconfig.json (100%) rename {vscode-web-github1s => vscode-web}/yarn.lock (89%) diff --git a/.eslintignore b/.eslintignore index 431d8b13d..2468ce197 100644 --- a/.eslintignore +++ b/.eslintignore @@ -2,3 +2,6 @@ **/lib/vscode/** **/dist/** **/src/vs/** +htm.module.js +preact.module.js +preact-hooks.module.js diff --git a/.eslintrc.json b/.eslintrc.json index e347ebdd3..dba469150 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -8,6 +8,16 @@ "extends": ["plugin:prettier/recommended"], "plugins": ["@typescript-eslint", "jsdoc"], "rules": { + "max-len": [ + "error", + { + "code": 120, + "ignoreStrings": true, + "ignoreUrls": true, + "ignoreTemplateLiterals": true, + "ignoreComments": true + } + ], "constructor-super": "warn", "curly": "warn", "eqeqeq": "warn", diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 610e76de6..994951d61 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -13,7 +13,7 @@ jobs: strategy: matrix: os: [ubuntu-20.04] - node-version: [14.x, 15.x] + node-version: [14.x, 16.x] runs-on: ${{ matrix.os }} diff --git a/.github/workflows/test-wtih-vscode-build.yml b/.github/workflows/test-wtih-vscode-build.yml index 2dc9acd3b..e30e22087 100644 --- a/.github/workflows/test-wtih-vscode-build.yml +++ b/.github/workflows/test-wtih-vscode-build.yml @@ -13,7 +13,7 @@ jobs: strategy: matrix: os: [ubuntu-20.04] - node-version: [14.x, 15.x] + node-version: [14.x, 16.x] runs-on: ${{ matrix.os }} diff --git a/.gitignore b/.gitignore index 9a28bffee..f91e599aa 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,5 @@ lib dist out node_modules +.yalc +yalc.lock diff --git a/.prettierignore b/.prettierignore index e7d0610c2..ba16b14aa 100644 --- a/.prettierignore +++ b/.prettierignore @@ -2,5 +2,8 @@ lib dist out node_modules -vscode-web-github1s/src/vs -vscode-web-github1s/extensions +vscode-web/src/vs +vscode-web/extensions +htm.module.js +preact.module.js +preact-hooks.module.js diff --git a/.prettierrc.js b/.prettierrc.js index 7779ecf43..de719df67 100644 --- a/.prettierrc.js +++ b/.prettierrc.js @@ -3,6 +3,7 @@ module.exports = { useTabs: true, semi: true, singleQuote: true, + printWidth: 120, overrides: [ { files: ['*.yml', '*.yaml', '*.json'], diff --git a/api/github-auth-callback/index.js b/api/github-auth-callback/index.js index a1db0ebcf..dadd68d1c 100644 --- a/api/github-auth-callback/index.js +++ b/api/github-auth-callback/index.js @@ -44,13 +44,10 @@ module.exports = async (req, res) => { try { // https://docs.github.com/en/developers/apps/authorizing-oauth-apps#2-users-are-redirected-back-to-your-site-by-github - const response = await got.post( - 'https://github.com/login/oauth/access_token', - { - json: { client_id: CLIENT_ID, client_secret: CLIENT_SECRET, code }, - responseType: 'json', - } - ); + const response = await got.post('https://github.com/login/oauth/access_token', { + json: { client_id: CLIENT_ID, client_secret: CLIENT_SECRET, code }, + responseType: 'json', + }); return sendResponseHtml(response.statusCode, response.body); } catch (e) { // the error is responded by GitHub diff --git a/api/vscode-unpkg/index.js b/api/vscode-unpkg/index.js index be274d790..f0e8c24a8 100644 --- a/api/vscode-unpkg/index.js +++ b/api/vscode-unpkg/index.js @@ -20,10 +20,7 @@ module.exports = async (req, res) => { const requestUrl = `https://${publisher}.vscode-unpkg.net/${publisher}/${restPartsPath}`; const responsePromise = got(requestUrl); const bufferPromise = responsePromise.buffer(); - const [response, buffer] = await Promise.all([ - responsePromise, - bufferPromise, - ]); + const [response, buffer] = await Promise.all([responsePromise, bufferPromise]); res.status(response.statusCode); res.setHeader('cache-control', response.headers['cache-control']); diff --git a/docs/guide.md b/docs/guide.md index f88a867e5..b30400a8e 100644 --- a/docs/guide.md +++ b/docs/guide.md @@ -45,11 +45,11 @@ What happens after you run `yarn watch-with-vscode`? 1. Copy some necessary resources (`index.html`, extensions config, libraries, etc.) to the `dist` directory. -2. Go to `vscode-web-github1s/lib/vscode` and run `yarn gulp compile-web` to build the necessary extensions, then copy it to the `dist/extensions` directory. +2. Go to `vscode-web/lib/vscode` and run `yarn gulp compile-web` to build the necessary extensions, then copy it to the `dist/extensions` directory. -3. Go to `vscode-web-github1s/lib/vscode` and run `yarn watch` (the native watch of vscode), it will trigger a new build if something in it has been changed. +3. Go to `vscode-web/lib/vscode` and run `yarn watch` (the native watch of vscode), it will trigger a new build if something in it has been changed. -4. Watch the `vscode-web-github1s/src` directory, merge it in to `vscode-web-github1s/lib/vscode/src` if something in it has been changed. (When a new file is merged into `lib/vscode/src`, it will trigger the watcher that is described in Step 3) +4. Watch the `vscode-web/src` directory, merge it in to `vscode-web/lib/vscode/src` if something in it has been changed. (When a new file is merged into `lib/vscode/src`, it will trigger the watcher that is described in Step 3) 5. Go to `extensions/github1s` and run `yarn watch`, it will trigger a new build if something has been changed. diff --git a/extensions/github1s/assets/pages/components.css b/extensions/github1s/assets/pages/components.css new file mode 100644 index 000000000..8c0b5219a --- /dev/null +++ b/extensions/github1s/assets/pages/components.css @@ -0,0 +1,164 @@ +.vscode-button { + border: none; + display: inline-block; + padding: 0 10px; + height: 26px; + line-height: 26px; + font-size: 14px; + outline: 1px solid transparent; + outline-offset: 2px !important; + color: var(--vscode-button-foreground); + background: var(--vscode-button-background); + cursor: pointer; +} + +.vscode-button.loading { + opacity: .5; +} + +.vscode-button.size-mini { + padding: 0 8px; + height: 22px; + line-height: 22px; + font-size: 12px; +} + +.vscode-button.size-middle { + padding: 0 12px; + height: 30px; + line-height: 30px; + font-size: 14px; +} + +.vscode-button.size-large { + padding: 0 14px; + height: 34px; + line-height: 34px; + font-size: 18px; +} + +.vscode-button:not([disabled]):hover { + background: var(--vscode-button-hoverBackground); +} + +.vscode-button:not([disabled]):focus { + outline-color: var(--vscode-focusBorder); +} + +.vscode-input { + border: none; + display: inline-block; + padding: 0 4px; + height: 26px; + line-height: 26px; + font-size: 13px; + outline: 1px solid transparent; + font-family: var(--vscode-font-family); + color: var(--vscode-input-foreground); + border: 1px solid var(--vscode-input-background); + background-color: var(--vscode-input-background); +} + +.vscode-input.size-mini { + padding: 0 2px; + height: 22px; + line-height: 22px; + font-size: 12px; +} + +.vscode-input.size-middle { + padding: 0 4px; + height: 30px; + line-height: 30px; + font-size: 13px; +} + +.vscode-input.size-large { + padding: 0 6px; + height: 34px; + line-height: 34px; + font-size: 18px; +} + +.vscode-input:not([disabled]):focus { + outline-color: var(--vscode-focusBorder); + outline: 1px solid -webkit-focus-ring-color; + outline-offset: -1px; +} + +.vscode-textarea { + border: none; + display: inline-block; + outline: 1px solid transparent; + font-family: var(--vscode-font-family); + color: var(--vscode-input-foreground); + border: 1px solid var(--vscode-input-background); + background-color: var(--vscode-input-background); +} + +.vscode-textarea:not([disabled]):focus { + outline-color: var(--vscode-focusBorder); + outline: 1px solid -webkit-focus-ring-color; + outline-offset: -1px; +} + +.vscode-loading { + width: 100%; + text-align: center; + height: 26px; +} + +.vscode-loading > span { + height: 100%; + width: 5px; + display: inline-block; + margin-right: 4px; + background: var(--vscode-button-background); + animation: vscodeLoading 1.2s infinite ease-in-out; +} + +.vscode-loading > span:nth-child(2) { + animation-delay: -1s; +} + +.vscode-loading > span:nth-child(3) { + animation-delay: -0.9s; +} + +.vscode-loading > span:nth-child(4) { + animation-delay: -0.8s; +} + +.vscode-loading > span:nth-child(5) { + margin-right: 0 !important; + animation-delay: -0.7s; +} + +@keyframes vscodeLoading { + 0% { + transform: scaleY(0.4); + } + 25% { + transform: scaleY(1); + } + 50% { + transform: scaleY(0.4); + } + 75% { + transform: scaleY(0.4); + } + 100% { + transform: scaleY(0.4); + } +} + +.vscode-link { + cursor: pointer; + color: var(--vscode-textLink-foreground); + text-decoration: underline; +} + +.vscode-link:hover { + color: var(--vscode-textLink-activeForeground); +} + diff --git a/extensions/github1s/assets/pages/components.js b/extensions/github1s/assets/pages/components.js new file mode 100644 index 000000000..405685e5b --- /dev/null +++ b/extensions/github1s/assets/pages/components.js @@ -0,0 +1,58 @@ +import { h } from './preact.module.js'; +import htm from './htm.module.js'; + +export const html = htm.bind(h); + +export const VscodeButton = ({ size, loading, ...props }) => { + const sizeClass = `size-${size || 'small'}`; + const loadingClass = loading ? 'loading' : ''; + const classes = `vscode-button ${sizeClass} ${loadingClass}`; + + return html`

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 F{{X|bsV)Ej literal 55931 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 aKk*a)u|hL$*^__)KjOkNLX`r#{{IK6hziF5 diff --git a/tests/__tests__/index.test.ts b/tests/__tests__/index.test.ts index 373dbb0ac..393524713 100644 --- a/tests/__tests__/index.test.ts +++ b/tests/__tests__/index.test.ts @@ -4,6 +4,7 @@ import { MatchImageSnapshotOptions, } from 'jest-image-snapshot'; +jest.setTimeout(60000); expect.extend({ toMatchImageSnapshot }); const matchImageSnapshotOptions: MatchImageSnapshotOptions = { @@ -27,6 +28,19 @@ afterAll(async () => { beforeEach(async () => { page = await browser.newPage(); + // setup github oauth token + await page.goto(BASE_URL); + await page.click('.action-item .action-label[aria-label="GitHub1s"]'); + await page.waitForTimeout(3000); + const extensionIFrameHandle = await page.$( + '#webview-webviewview-github1s-views-settings iframe' + ); + const extensionIFrame = await extensionIFrameHandle?.contentFrame(); + const settingsIframeHandle = await extensionIFrame?.$('iframe#active-frame'); + const settingsIframe = await settingsIframeHandle?.contentFrame(); + await settingsIframe?.fill('#token-input', process.env.GITHUB_TOKEN || ''); + await settingsIframe?.dispatchEvent('#save-button', 'click'); + await page.waitForTimeout(3000); }); afterEach(async () => { @@ -50,7 +64,7 @@ it('should load successfully', async () => { (el) => el.innerHTML ); const tab = await page.$eval( - 'div[role="tab"]', + 'div[role="tab"] .label-name', (el: HTMLElement) => el.innerText ); expect(tab).toBe('[Preview] README.md'); @@ -91,15 +105,13 @@ it('should show PR list', async () => { await page.press('body', ' '); await page.press('body', 'Shift+Tab'); await page.press('body', ' '); - await page.waitForSelector('#list_id_3_1'); - await page.waitForSelector('#list_id_4_1'); + await page.waitForTimeout(3000); const container = await page.$('[id="workbench.parts.sidebar"]'); let image = await container?.screenshot(); expect(image).toMatchImageSnapshot(matchImageSnapshotOptions); - await page.click('#list_id_3_1'); - await page.click('#list_id_4_1'); + await page.click('.monaco-list-row[aria-posinset="3"]'); await page.waitForTimeout(3000); image = await container?.screenshot(); expect(image).toMatchImageSnapshot(matchImageSnapshotOptions); diff --git a/vercel.json b/vercel.json index 6a1e04a10..c7b547792 100644 --- a/vercel.json +++ b/vercel.json @@ -8,6 +8,10 @@ "source": "/api/github-auth-callback", "destination": "/api/github-auth-callback" }, + { + "source": "/api/vscode-unpkg/(.*)", + "destination": "/api/vscode-unpkg" + }, { "source": "/static/(.*)", "destination": "/api/static-fallback" diff --git a/vscode-web-github1s/extensions/typescript-language-features/src/typescriptServiceClient.ts b/vscode-web-github1s/extensions/typescript-language-features/src/typescriptServiceClient.ts deleted file mode 100644 index c28ec016f..000000000 --- a/vscode-web-github1s/extensions/typescript-language-features/src/typescriptServiceClient.ts +++ /dev/null @@ -1,1050 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -import * as path from 'path'; -import * as vscode from 'vscode'; -import * as nls from 'vscode-nls'; -import { DiagnosticKind, DiagnosticsManager } from './languageFeatures/diagnostics'; -import * as Proto from './protocol'; -import { EventName } from './protocol.const'; -import BufferSyncSupport from './tsServer/bufferSyncSupport'; -import { OngoingRequestCancellerFactory } from './tsServer/cancellation'; -import { ILogDirectoryProvider } from './tsServer/logDirectoryProvider'; -import { ITypeScriptServer, TsServerProcessFactory } from './tsServer/server'; -import { TypeScriptServerError } from './tsServer/serverError'; -import { TypeScriptServerSpawner } from './tsServer/spawner'; -import { TypeScriptVersionManager } from './tsServer/versionManager'; -import { ITypeScriptVersionProvider, TypeScriptVersion } from './tsServer/versionProvider'; -import { ClientCapabilities, ClientCapability, ExecConfig, ITypeScriptServiceClient, ServerResponse, TypeScriptRequests } from './typescriptService'; -import API from './utils/api'; -import { TsServerLogLevel, TypeScriptServiceConfiguration } from './utils/configuration'; -import { Disposable } from './utils/dispose'; -import * as fileSchemes from './utils/fileSchemes'; -import { Logger } from './utils/logger'; -import { isWeb } from './utils/platform'; -import { TypeScriptPluginPathsProvider } from './utils/pluginPathsProvider'; -import { PluginManager } from './utils/plugins'; -import { TelemetryProperties, TelemetryReporter, VSCodeTelemetryReporter } from './utils/telemetry'; -import Tracer from './utils/tracer'; -import { inferredProjectCompilerOptions, ProjectType } from './utils/tsconfig'; - -const localize = nls.loadMessageBundle(); - -export interface TsDiagnostics { - readonly kind: DiagnosticKind; - readonly resource: vscode.Uri; - readonly diagnostics: Proto.Diagnostic[]; -} - -interface ToCancelOnResourceChanged { - readonly resource: vscode.Uri; - cancel(): void; -} - -namespace ServerState { - export const enum Type { - None, - Running, - Errored - } - - export const None = { type: Type.None } as const; - - export class Running { - readonly type = Type.Running; - - constructor( - public readonly server: ITypeScriptServer, - - /** - * API version obtained from the version picker after checking the corresponding path exists. - */ - public readonly apiVersion: API, - - /** - * Version reported by currently-running tsserver. - */ - public tsserverVersion: string | undefined, - public languageServiceEnabled: boolean, - ) { } - - public readonly toCancelOnResourceChange = new Set(); - - updateTsserverVersion(tsserverVersion: string) { - this.tsserverVersion = tsserverVersion; - } - - updateLanguageServiceEnabled(enabled: boolean) { - this.languageServiceEnabled = enabled; - } - } - - export class Errored { - readonly type = Type.Errored; - constructor( - public readonly error: Error, - public readonly tsServerLogFile: string | undefined, - ) { } - } - - export type State = typeof None | Running | Errored; -} - -export default class TypeScriptServiceClient extends Disposable implements ITypeScriptServiceClient { - - private readonly pathSeparator: string; - private readonly inMemoryResourcePrefix = '^'; - - private readonly workspaceState: vscode.Memento; - - private _onReady?: { promise: Promise; resolve: () => void; reject: () => void; }; - private _configuration: TypeScriptServiceConfiguration; - private pluginPathsProvider: TypeScriptPluginPathsProvider; - private readonly _versionManager: TypeScriptVersionManager; - - private readonly logger = new Logger(); - private readonly tracer = new Tracer(this.logger); - - private readonly typescriptServerSpawner: TypeScriptServerSpawner; - private serverState: ServerState.State = ServerState.None; - private lastStart: number; - private numberRestarts: number; - private _isPromptingAfterCrash = false; - private isRestarting: boolean = false; - private hasServerFatallyCrashedTooManyTimes = false; - private readonly loadingIndicator = new ServerInitializingIndicator(); - - public readonly telemetryReporter: TelemetryReporter; - public readonly bufferSyncSupport: BufferSyncSupport; - public readonly diagnosticsManager: DiagnosticsManager; - public readonly pluginManager: PluginManager; - - private readonly logDirectoryProvider: ILogDirectoryProvider; - private readonly cancellerFactory: OngoingRequestCancellerFactory; - private readonly versionProvider: ITypeScriptVersionProvider; - private readonly processFactory: TsServerProcessFactory; - - constructor( - private readonly context: vscode.ExtensionContext, - onCaseInsenitiveFileSystem: boolean, - services: { - pluginManager: PluginManager, - logDirectoryProvider: ILogDirectoryProvider, - cancellerFactory: OngoingRequestCancellerFactory, - versionProvider: ITypeScriptVersionProvider, - processFactory: TsServerProcessFactory, - }, - allModeIds: readonly string[] - ) { - super(); - - this.workspaceState = context.workspaceState; - - this.pluginManager = services.pluginManager; - this.logDirectoryProvider = services.logDirectoryProvider; - this.cancellerFactory = services.cancellerFactory; - this.versionProvider = services.versionProvider; - this.processFactory = services.processFactory; - - this.pathSeparator = path.sep; - this.lastStart = Date.now(); - - let resolve: () => void; - let reject: () => void; - const p = new Promise((res, rej) => { - resolve = res; - reject = rej; - }); - this._onReady = { promise: p, resolve: resolve!, reject: reject! }; - - this.numberRestarts = 0; - - this._configuration = TypeScriptServiceConfiguration.loadFromWorkspace(); - this.versionProvider.updateConfiguration(this._configuration); - - this.pluginPathsProvider = new TypeScriptPluginPathsProvider(this._configuration); - this._versionManager = this._register(new TypeScriptVersionManager(this._configuration, this.versionProvider, this.workspaceState)); - this._register(this._versionManager.onDidPickNewVersion(() => { - this.restartTsServer(); - })); - - this.bufferSyncSupport = new BufferSyncSupport(this, allModeIds, onCaseInsenitiveFileSystem); - this.onReady(() => { this.bufferSyncSupport.listen(); }); - - this.diagnosticsManager = new DiagnosticsManager('typescript', onCaseInsenitiveFileSystem); - this.bufferSyncSupport.onDelete(resource => { - this.cancelInflightRequestsForResource(resource); - this.diagnosticsManager.delete(resource); - }, null, this._disposables); - - this.bufferSyncSupport.onWillChange(resource => { - this.cancelInflightRequestsForResource(resource); - }); - - vscode.workspace.onDidChangeConfiguration(() => { - const oldConfiguration = this._configuration; - this._configuration = TypeScriptServiceConfiguration.loadFromWorkspace(); - - this.versionProvider.updateConfiguration(this._configuration); - this._versionManager.updateConfiguration(this._configuration); - this.pluginPathsProvider.updateConfiguration(this._configuration); - this.tracer.updateConfiguration(); - - if (this.serverState.type === ServerState.Type.Running) { - if (!this._configuration.implictProjectConfiguration.isEqualTo(oldConfiguration.implictProjectConfiguration)) { - this.setCompilerOptionsForInferredProjects(this._configuration); - } - - if (!this._configuration.isEqualTo(oldConfiguration)) { - this.restartTsServer(); - } - } - }, this, this._disposables); - - this.telemetryReporter = this._register(new VSCodeTelemetryReporter(() => { - if (this.serverState.type === ServerState.Type.Running) { - if (this.serverState.tsserverVersion) { - return this.serverState.tsserverVersion; - } - } - return this.apiVersion.fullVersionString; - })); - - this.typescriptServerSpawner = new TypeScriptServerSpawner(this.versionProvider, this._versionManager, this.logDirectoryProvider, this.pluginPathsProvider, this.logger, this.telemetryReporter, this.tracer, this.processFactory); - - this._register(this.pluginManager.onDidUpdateConfig(update => { - this.configurePlugin(update.pluginId, update.config); - })); - - this._register(this.pluginManager.onDidChangePlugins(() => { - this.restartTsServer(); - })); - } - - public get capabilities() { - if (isWeb()) { - return new ClientCapabilities( - ClientCapability.Syntax, - ClientCapability.EnhancedSyntax); - } - - if (this.apiVersion.gte(API.v400)) { - return new ClientCapabilities( - ClientCapability.Syntax, - ClientCapability.EnhancedSyntax, - ClientCapability.Semantic); - } - - return new ClientCapabilities( - ClientCapability.Syntax, - ClientCapability.Semantic); - } - - private readonly _onDidChangeCapabilities = this._register(new vscode.EventEmitter()); - readonly onDidChangeCapabilities = this._onDidChangeCapabilities.event; - - private cancelInflightRequestsForResource(resource: vscode.Uri): void { - if (this.serverState.type !== ServerState.Type.Running) { - return; - } - - for (const request of this.serverState.toCancelOnResourceChange) { - if (request.resource.toString() === resource.toString()) { - request.cancel(); - } - } - } - - public get configuration() { - return this._configuration; - } - - public dispose() { - super.dispose(); - - this.bufferSyncSupport.dispose(); - - if (this.serverState.type === ServerState.Type.Running) { - this.serverState.server.kill(); - } - - this.loadingIndicator.reset(); - } - - public restartTsServer(): void { - if (this.serverState.type === ServerState.Type.Running) { - this.info('Killing TS Server'); - this.isRestarting = true; - this.serverState.server.kill(); - } - - this.serverState = this.startService(true); - } - - private readonly _onTsServerStarted = this._register(new vscode.EventEmitter<{ version: TypeScriptVersion, usedApiVersion: API }>()); - public readonly onTsServerStarted = this._onTsServerStarted.event; - - private readonly _onDiagnosticsReceived = this._register(new vscode.EventEmitter()); - public readonly onDiagnosticsReceived = this._onDiagnosticsReceived.event; - - private readonly _onConfigDiagnosticsReceived = this._register(new vscode.EventEmitter()); - public readonly onConfigDiagnosticsReceived = this._onConfigDiagnosticsReceived.event; - - private readonly _onResendModelsRequested = this._register(new vscode.EventEmitter()); - public readonly onResendModelsRequested = this._onResendModelsRequested.event; - - private readonly _onProjectLanguageServiceStateChanged = this._register(new vscode.EventEmitter()); - public readonly onProjectLanguageServiceStateChanged = this._onProjectLanguageServiceStateChanged.event; - - private readonly _onDidBeginInstallTypings = this._register(new vscode.EventEmitter()); - public readonly onDidBeginInstallTypings = this._onDidBeginInstallTypings.event; - - private readonly _onDidEndInstallTypings = this._register(new vscode.EventEmitter()); - public readonly onDidEndInstallTypings = this._onDidEndInstallTypings.event; - - private readonly _onTypesInstallerInitializationFailed = this._register(new vscode.EventEmitter()); - public readonly onTypesInstallerInitializationFailed = this._onTypesInstallerInitializationFailed.event; - - private readonly _onSurveyReady = this._register(new vscode.EventEmitter()); - public readonly onSurveyReady = this._onSurveyReady.event; - - public get apiVersion(): API { - if (this.serverState.type === ServerState.Type.Running) { - return this.serverState.apiVersion; - } - return API.defaultVersion; - } - - public onReady(f: () => void): Promise { - return this._onReady!.promise.then(f); - } - - private info(message: string, data?: any): void { - this.logger.info(message, data); - } - - private error(message: string, data?: any): void { - this.logger.error(message, data); - } - - private logTelemetry(eventName: string, properties?: TelemetryProperties) { - this.telemetryReporter.logTelemetry(eventName, properties); - } - - private service(): ServerState.Running { - if (this.serverState.type === ServerState.Type.Running) { - return this.serverState; - } - if (this.serverState.type === ServerState.Type.Errored) { - throw this.serverState.error; - } - const newState = this.startService(); - if (newState.type === ServerState.Type.Running) { - return newState; - } - throw new Error(`Could not create TS service. Service state:${JSON.stringify(newState)}`); - } - - public ensureServiceStarted() { - if (this.serverState.type !== ServerState.Type.Running) { - this.startService(); - } - } - - private token: number = 0; - private startService(resendModels: boolean = false): ServerState.State { - this.info(`Starting TS Server `); - - if (this.isDisposed) { - this.info(`Not starting server. Disposed `); - return ServerState.None; - } - - if (this.hasServerFatallyCrashedTooManyTimes) { - this.info(`Not starting server. Too many crashes.`); - return ServerState.None; - } - - let version = this._versionManager.currentVersion; - if (!version.isValid) { - vscode.window.showWarningMessage(localize('noServerFound', 'The path {0} doesn\'t point to a valid tsserver install. Falling back to bundled TypeScript version.', version.path)); - - this._versionManager.reset(); - version = this._versionManager.currentVersion; - } - - this.info(`Using tsserver from: ${version.path}`); - - const apiVersion = version.apiVersion || API.defaultVersion; - const mytoken = ++this.token; - const handle = this.typescriptServerSpawner.spawn(version, this.capabilities, this.configuration, this.pluginManager, this.cancellerFactory, { - onFatalError: (command, err) => this.fatalError(command, err), - }); - this.serverState = new ServerState.Running(handle, apiVersion, undefined, true); - this.lastStart = Date.now(); - - /* __GDPR__ - "tsserver.spawned" : { - "${include}": [ - "${TypeScriptCommonProperties}" - ], - "localTypeScriptVersion": { "classification": "SystemMetaData", "purpose": "FeatureInsight" }, - "typeScriptVersionSource": { "classification": "SystemMetaData", "purpose": "FeatureInsight" } - } - */ - this.logTelemetry('tsserver.spawned', { - localTypeScriptVersion: this.versionProvider.localVersion ? this.versionProvider.localVersion.displayName : '', - typeScriptVersionSource: version.source, - }); - - handle.onError((err: Error) => { - if (this.token !== mytoken) { - // this is coming from an old process - return; - } - - if (err) { - vscode.window.showErrorMessage(localize('serverExitedWithError', 'TypeScript language server exited with error. Error message is: {0}', err.message || err.name)); - } - - this.serverState = new ServerState.Errored(err, handle.tsServerLogFile); - this.error('TSServer errored with error.', err); - if (handle.tsServerLogFile) { - this.error(`TSServer log file: ${handle.tsServerLogFile}`); - } - - /* __GDPR__ - "tsserver.error" : { - "${include}": [ - "${TypeScriptCommonProperties}" - ] - } - */ - this.logTelemetry('tsserver.error'); - this.serviceExited(false); - }); - - handle.onExit((code: any) => { - if (this.token !== mytoken) { - // this is coming from an old process - return; - } - - if (code === null || typeof code === 'undefined') { - this.info('TSServer exited'); - } else { - // In practice, the exit code is an integer with no ties to any identity, - // so it can be classified as SystemMetaData, rather than CallstackOrException. - this.error(`TSServer exited with code: ${code}`); - /* __GDPR__ - "tsserver.exitWithCode" : { - "code" : { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth" }, - "${include}": [ - "${TypeScriptCommonProperties}" - ] - } - */ - this.logTelemetry('tsserver.exitWithCode', { code: code }); - } - - if (handle.tsServerLogFile) { - this.info(`TSServer log file: ${handle.tsServerLogFile}`); - } - this.serviceExited(!this.isRestarting); - this.isRestarting = false; - }); - - handle.onEvent(event => this.dispatchEvent(event)); - - if (apiVersion.gte(API.v300) && this.capabilities.has(ClientCapability.Semantic)) { - this.loadingIndicator.startedLoadingProject(undefined /* projectName */); - } - - this.serviceStarted(resendModels); - - this._onReady!.resolve(); - this._onTsServerStarted.fire({ version: version, usedApiVersion: apiVersion }); - this._onDidChangeCapabilities.fire(); - return this.serverState; - } - - public async showVersionPicker(): Promise { - this._versionManager.promptUserForVersion(); - } - - public async openTsServerLogFile(): Promise { - if (this._configuration.tsServerLogLevel === TsServerLogLevel.Off) { - vscode.window.showErrorMessage( - localize( - 'typescript.openTsServerLog.loggingNotEnabled', - 'TS Server logging is off. Please set `typescript.tsserver.log` and restart the TS server to enable logging'), - { - title: localize( - 'typescript.openTsServerLog.enableAndReloadOption', - 'Enable logging and restart TS server'), - }) - .then(selection => { - if (selection) { - return vscode.workspace.getConfiguration().update('typescript.tsserver.log', 'verbose', true).then(() => { - this.restartTsServer(); - }); - } - return undefined; - }); - return false; - } - - if (this.serverState.type !== ServerState.Type.Running || !this.serverState.server.tsServerLogFile) { - vscode.window.showWarningMessage(localize( - 'typescript.openTsServerLog.noLogFile', - 'TS Server has not started logging.')); - return false; - } - - try { - const doc = await vscode.workspace.openTextDocument(vscode.Uri.file(this.serverState.server.tsServerLogFile)); - await vscode.window.showTextDocument(doc); - return true; - } catch { - // noop - } - - try { - await vscode.commands.executeCommand('revealFileInOS', vscode.Uri.file(this.serverState.server.tsServerLogFile)); - return true; - } catch { - vscode.window.showWarningMessage(localize( - 'openTsServerLog.openFileFailedFailed', - 'Could not open TS Server log file')); - return false; - } - } - - private serviceStarted(resendModels: boolean): void { - this.bufferSyncSupport.reset(); - - const watchOptions = this.apiVersion.gte(API.v380) - ? this.configuration.watchOptions - : undefined; - - const configureOptions: Proto.ConfigureRequestArguments = { - hostInfo: 'vscode', - preferences: { - providePrefixAndSuffixTextForRename: true, - allowRenameOfImportPath: true, - includePackageJsonAutoImports: this._configuration.includePackageJsonAutoImports, - }, - watchOptions - }; - this.executeWithoutWaitingForResponse('configure', configureOptions); - this.setCompilerOptionsForInferredProjects(this._configuration); - if (resendModels) { - this._onResendModelsRequested.fire(); - this.bufferSyncSupport.reinitialize(); - this.bufferSyncSupport.requestAllDiagnostics(); - } - - // Reconfigure any plugins - for (const [config, pluginName] of this.pluginManager.configurations()) { - this.configurePlugin(config, pluginName); - } - } - - private setCompilerOptionsForInferredProjects(configuration: TypeScriptServiceConfiguration): void { - const args: Proto.SetCompilerOptionsForInferredProjectsArgs = { - options: this.getCompilerOptionsForInferredProjects(configuration) - }; - this.executeWithoutWaitingForResponse('compilerOptionsForInferredProjects', args); - } - - private getCompilerOptionsForInferredProjects(configuration: TypeScriptServiceConfiguration): Proto.ExternalProjectCompilerOptions { - return { - ...inferredProjectCompilerOptions(ProjectType.TypeScript, configuration), - allowJs: true, - allowSyntheticDefaultImports: true, - allowNonTsExtensions: true, - resolveJsonModule: true, - }; - } - - private serviceExited(restart: boolean): void { - this.loadingIndicator.reset(); - - const previousState = this.serverState; - this.serverState = ServerState.None; - - if (restart) { - const diff = Date.now() - this.lastStart; - this.numberRestarts++; - let startService = true; - - const reportIssueItem: vscode.MessageItem = { - title: localize('serverDiedReportIssue', 'Report Issue'), - }; - let prompt: Thenable | undefined = undefined; - - if (this.numberRestarts > 5) { - this.numberRestarts = 0; - if (diff < 10 * 1000 /* 10 seconds */) { - this.lastStart = Date.now(); - startService = false; - this.hasServerFatallyCrashedTooManyTimes = true; - prompt = vscode.window.showErrorMessage( - localize('serverDiedAfterStart', 'The TypeScript language service died 5 times right after it got started. The service will not be restarted.'), - reportIssueItem); - - /* __GDPR__ - "serviceExited" : { - "${include}": [ - "${TypeScriptCommonProperties}" - ] - } - */ - this.logTelemetry('serviceExited'); - } else if (diff < 60 * 1000 * 5 /* 5 Minutes */) { - this.lastStart = Date.now(); - prompt = vscode.window.showWarningMessage( - localize('serverDied', 'The TypeScript language service died unexpectedly 5 times in the last 5 Minutes.'), - reportIssueItem); - } - } else if (['vscode-insiders', 'code-oss'].includes(vscode.env.uriScheme)) { - // Prompt after a single restart - if (!this._isPromptingAfterCrash && previousState.type === ServerState.Type.Errored && previousState.error instanceof TypeScriptServerError) { - this.numberRestarts = 0; - this._isPromptingAfterCrash = true; - prompt = vscode.window.showWarningMessage( - localize('serverDiedOnce', 'The TypeScript language service died unexpectedly.'), - reportIssueItem); - } - } - - prompt?.then(item => { - this._isPromptingAfterCrash = false; - - if (item === reportIssueItem) { - const args = previousState.type === ServerState.Type.Errored && previousState.error instanceof TypeScriptServerError - ? getReportIssueArgsForError(previousState.error, previousState.tsServerLogFile) - : undefined; - vscode.commands.executeCommand('workbench.action.openIssueReporter', args); - } - }); - - if (startService) { - this.startService(true); - } - } - } - - public normalizedPath(resource: vscode.Uri): string | undefined { - if (fileSchemes.disabledSchemes.has(resource.scheme)) { - return undefined; - } - - switch (resource.scheme) { - case fileSchemes.file: - { - let result = resource.fsPath; - if (!result) { - return undefined; - } - result = path.normalize(result); - - // Both \ and / must be escaped in regular expressions - return result.replace(new RegExp('\\' + this.pathSeparator, 'g'), '/'); - } - default: - { - return this.inMemoryResourcePrefix + resource.toString(true); - } - } - } - - public toPath(resource: vscode.Uri): string | undefined { - return this.normalizedPath(resource); - } - - public toOpenedFilePath(document: vscode.TextDocument, options: { suppressAlertOnFailure?: boolean } = {}): string | undefined { - if (!this.bufferSyncSupport.ensureHasBuffer(document.uri)) { - if (!options.suppressAlertOnFailure && !fileSchemes.disabledSchemes.has(document.uri.scheme)) { - console.error(`Unexpected resource ${document.uri}`); - } - return undefined; - } - return this.toPath(document.uri); - } - - public hasCapabilityForResource(resource: vscode.Uri, capability: ClientCapability): boolean { - switch (capability) { - case ClientCapability.Semantic: - { - return fileSchemes.semanticSupportedSchemes.includes(resource.scheme); - } - case ClientCapability.Syntax: - case ClientCapability.EnhancedSyntax: - { - return true; - } - } - } - - public toResource(filepath: string): vscode.Uri { - if (isWeb()) { - // On web, treat absolute paths as pointing to standard lib files - if (filepath.startsWith('/')) { - // below codes are changed by github1s - return vscode.Uri.joinPath(this.context.extensionUri, 'dist', 'browser', 'typescript', filepath.slice(1)); - // about codes are changed by github1s - } - } - - if (filepath.startsWith(this.inMemoryResourcePrefix)) { - const resource = vscode.Uri.parse(filepath.slice(1)); - return this.bufferSyncSupport.toVsCodeResource(resource); - } - return this.bufferSyncSupport.toResource(filepath); - } - - public getWorkspaceRootForResource(resource: vscode.Uri): string | undefined { - const roots = vscode.workspace.workspaceFolders ? Array.from(vscode.workspace.workspaceFolders) : undefined; - if (!roots || !roots.length) { - return undefined; - } - - if (resource.scheme === fileSchemes.file || resource.scheme === fileSchemes.untitled) { - for (const root of roots.sort((a, b) => a.uri.fsPath.length - b.uri.fsPath.length)) { - if (resource.fsPath.startsWith(root.uri.fsPath + path.sep)) { - return root.uri.fsPath; - } - } - return roots[0].uri.fsPath; - } - - return undefined; - } - - public execute(command: keyof TypeScriptRequests, args: any, token: vscode.CancellationToken, config?: ExecConfig): Promise> { - let execution: Promise>; - - if (config?.cancelOnResourceChange) { - const runningServerState = this.service(); - - const source = new vscode.CancellationTokenSource(); - token.onCancellationRequested(() => source.cancel()); - - const inFlight: ToCancelOnResourceChanged = { - resource: config.cancelOnResourceChange, - cancel: () => source.cancel(), - }; - runningServerState.toCancelOnResourceChange.add(inFlight); - - execution = this.executeImpl(command, args, { - isAsync: false, - token: source.token, - expectsResult: true, - ...config, - }).finally(() => { - runningServerState.toCancelOnResourceChange.delete(inFlight); - source.dispose(); - }); - } else { - execution = this.executeImpl(command, args, { - isAsync: false, - token, - expectsResult: true, - ...config, - }); - } - - if (config?.nonRecoverable) { - execution.catch(err => this.fatalError(command, err)); - } - - return execution; - } - - public executeWithoutWaitingForResponse(command: keyof TypeScriptRequests, args: any): void { - this.executeImpl(command, args, { - isAsync: false, - token: undefined, - expectsResult: false - }); - } - - public executeAsync(command: keyof TypeScriptRequests, args: Proto.GeterrRequestArgs, token: vscode.CancellationToken): Promise> { - return this.executeImpl(command, args, { - isAsync: true, - token, - expectsResult: true - }); - } - - private executeImpl(command: keyof TypeScriptRequests, args: any, executeInfo: { isAsync: boolean, token?: vscode.CancellationToken, expectsResult: false, lowPriority?: boolean, requireSemantic?: boolean }): undefined; - private executeImpl(command: keyof TypeScriptRequests, args: any, executeInfo: { isAsync: boolean, token?: vscode.CancellationToken, expectsResult: boolean, lowPriority?: boolean, requireSemantic?: boolean }): Promise>; - private executeImpl(command: keyof TypeScriptRequests, args: any, executeInfo: { isAsync: boolean, token?: vscode.CancellationToken, expectsResult: boolean, lowPriority?: boolean, requireSemantic?: boolean }): Promise> | undefined { - this.bufferSyncSupport.beforeCommand(command); - const runningServerState = this.service(); - return runningServerState.server.executeImpl(command, args, executeInfo); - } - - public interruptGetErr(f: () => R): R { - return this.bufferSyncSupport.interruptGetErr(f); - } - - private fatalError(command: string, error: unknown): void { - /* __GDPR__ - "fatalError" : { - "${include}": [ - "${TypeScriptCommonProperties}", - "${TypeScriptRequestErrorProperties}" - ], - "command" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" } - } - */ - this.logTelemetry('fatalError', { ...(error instanceof TypeScriptServerError ? error.telemetry : { command }) }); - console.error(`A non-recoverable error occured while executing tsserver command: ${command}`); - if (error instanceof TypeScriptServerError && error.serverErrorText) { - console.error(error.serverErrorText); - } - - if (this.serverState.type === ServerState.Type.Running) { - this.info('Killing TS Server'); - const logfile = this.serverState.server.tsServerLogFile; - this.serverState.server.kill(); - if (error instanceof TypeScriptServerError) { - this.serverState = new ServerState.Errored(error, logfile); - } - } - } - - private dispatchEvent(event: Proto.Event) { - switch (event.event) { - case EventName.syntaxDiag: - case EventName.semanticDiag: - case EventName.suggestionDiag: - // This event also roughly signals that projects have been loaded successfully (since the TS server is synchronous) - this.loadingIndicator.reset(); - - const diagnosticEvent = event as Proto.DiagnosticEvent; - if (diagnosticEvent.body && diagnosticEvent.body.diagnostics) { - this._onDiagnosticsReceived.fire({ - kind: getDignosticsKind(event), - resource: this.toResource(diagnosticEvent.body.file), - diagnostics: diagnosticEvent.body.diagnostics - }); - } - break; - - case EventName.configFileDiag: - this._onConfigDiagnosticsReceived.fire(event as Proto.ConfigFileDiagnosticEvent); - break; - - case EventName.telemetry: - { - const body = (event as Proto.TelemetryEvent).body; - this.dispatchTelemetryEvent(body); - break; - } - case EventName.projectLanguageServiceState: - { - const body = (event as Proto.ProjectLanguageServiceStateEvent).body!; - if (this.serverState.type === ServerState.Type.Running) { - this.serverState.updateLanguageServiceEnabled(body.languageServiceEnabled); - } - this._onProjectLanguageServiceStateChanged.fire(body); - break; - } - case EventName.projectsUpdatedInBackground: - this.loadingIndicator.reset(); - - const body = (event as Proto.ProjectsUpdatedInBackgroundEvent).body; - const resources = body.openFiles.map(file => this.toResource(file)); - this.bufferSyncSupport.getErr(resources); - break; - - case EventName.beginInstallTypes: - this._onDidBeginInstallTypings.fire((event as Proto.BeginInstallTypesEvent).body); - break; - - case EventName.endInstallTypes: - this._onDidEndInstallTypings.fire((event as Proto.EndInstallTypesEvent).body); - break; - - case EventName.typesInstallerInitializationFailed: - this._onTypesInstallerInitializationFailed.fire((event as Proto.TypesInstallerInitializationFailedEvent).body); - break; - - case EventName.surveyReady: - this._onSurveyReady.fire((event as Proto.SurveyReadyEvent).body); - break; - - case EventName.projectLoadingStart: - this.loadingIndicator.startedLoadingProject((event as Proto.ProjectLoadingStartEvent).body.projectName); - break; - - case EventName.projectLoadingFinish: - this.loadingIndicator.finishedLoadingProject((event as Proto.ProjectLoadingFinishEvent).body.projectName); - break; - } - } - - private dispatchTelemetryEvent(telemetryData: Proto.TelemetryEventBody): void { - const properties: { [key: string]: string } = Object.create(null); - switch (telemetryData.telemetryEventName) { - case 'typingsInstalled': - const typingsInstalledPayload: Proto.TypingsInstalledTelemetryEventPayload = (telemetryData.payload as Proto.TypingsInstalledTelemetryEventPayload); - properties['installedPackages'] = typingsInstalledPayload.installedPackages; - - if (typeof typingsInstalledPayload.installSuccess === 'boolean') { - properties['installSuccess'] = typingsInstalledPayload.installSuccess.toString(); - } - if (typeof typingsInstalledPayload.typingsInstallerVersion === 'string') { - properties['typingsInstallerVersion'] = typingsInstalledPayload.typingsInstallerVersion; - } - break; - - default: - const payload = telemetryData.payload; - if (payload) { - Object.keys(payload).forEach((key) => { - try { - if (payload.hasOwnProperty(key)) { - properties[key] = typeof payload[key] === 'string' ? payload[key] : JSON.stringify(payload[key]); - } - } catch (e) { - // noop - } - }); - } - break; - } - if (telemetryData.telemetryEventName === 'projectInfo') { - if (this.serverState.type === ServerState.Type.Running) { - this.serverState.updateTsserverVersion(properties['version']); - } - } - - /* __GDPR__ - "typingsInstalled" : { - "installedPackages" : { "classification": "PublicNonPersonalData", "purpose": "FeatureInsight" }, - "installSuccess": { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth" }, - "typingsInstallerVersion": { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth" }, - "${include}": [ - "${TypeScriptCommonProperties}" - ] - } - */ - // __GDPR__COMMENT__: Other events are defined by TypeScript. - this.logTelemetry(telemetryData.telemetryEventName, properties); - } - - private configurePlugin(pluginName: string, configuration: {}): any { - if (this.apiVersion.gte(API.v314)) { - this.executeWithoutWaitingForResponse('configurePlugin', { pluginName, configuration }); - } - } -} - -function getReportIssueArgsForError( - error: TypeScriptServerError, - logPath: string | undefined, -): { extensionId: string, issueTitle: string, issueBody: string } | undefined { - if (!error.serverStack || !error.serverMessage) { - return undefined; - } - - // Note these strings are intentionally not localized - // as we want users to file issues in english - - const sections = [ - `❗️❗️❗️ Please fill in the sections below to help us diagnose the issue ❗️❗️❗️`, - `**TypeScript Version:** ${error.version.apiVersion?.fullVersionString}`, - `**Steps to reproduce crash** - -1. -2. -3.`, - ]; - - if (logPath) { - sections.push(`**TS Server Log** - -❗️ Please review and upload this log file to help us diagnose this crash: - -\`${logPath}\` - -The log file may contain personal data, including full paths and source code from your workspace. You can scrub the log file to remove paths or other personal information. -`); - } else { - - sections.push(`**TS Server Log** - -❗️Server logging disabled. To help us fix crashes like this, please enable logging by setting: - -\`\`\`json -"typescript.tsserver.log": "verbose" -\`\`\` - -After enabling this setting, future crash reports will include the server log.`); - } - - sections.push(`**TS Server Error Stack** - -Server: \`${error.serverId}\` - -\`\`\` -${error.serverStack} -\`\`\``); - - return { - extensionId: 'vscode.typescript-language-features', - issueTitle: `TS Server fatal error: ${error.serverMessage}`, - - issueBody: sections.join('\n\n') - }; -} - -function getDignosticsKind(event: Proto.Event) { - switch (event.event) { - case 'syntaxDiag': return DiagnosticKind.Syntax; - case 'semanticDiag': return DiagnosticKind.Semantic; - case 'suggestionDiag': return DiagnosticKind.Suggestion; - } - throw new Error('Unknown dignostics kind'); -} - -class ServerInitializingIndicator extends Disposable { - private _task?: { project: string | undefined, resolve: () => void, reject: () => void }; - - public reset(): void { - if (this._task) { - this._task.reject(); - this._task = undefined; - } - } - - /** - * Signal that a project has started loading. - */ - public startedLoadingProject(projectName: string | undefined): void { - // TS projects are loaded sequentially. Cancel existing task because it should always be resolved before - // the incoming project loading task is. - this.reset(); - - vscode.window.withProgress({ - location: vscode.ProgressLocation.Window, - title: localize('serverLoading.progress', "Initializing JS/TS language features"), - }, () => new Promise((resolve, reject) => { - this._task = { project: projectName, resolve, reject }; - })); - } - - public finishedLoadingProject(projectName: string | undefined): void { - if (this._task && this._task.project === projectName) { - this._task.resolve(); - this._task = undefined; - } - } -} - diff --git a/vscode-web-github1s/package.json b/vscode-web-github1s/package.json index fd5009021..9ed48ae40 100644 --- a/vscode-web-github1s/package.json +++ b/vscode-web-github1s/package.json @@ -1,6 +1,6 @@ { "name": "@github1s/vscode-web", - "version": "0.1.10", + "version": "0.2.1", "description": "VS Code web for GitHub1s", "author": "github1s", "license": "MIT", diff --git a/vscode-web-github1s/resources/builtin-extensions.json b/vscode-web-github1s/resources/builtin-extensions.json index 2c53d66b2..87959873c 100644 --- a/vscode-web-github1s/resources/builtin-extensions.json +++ b/vscode-web-github1s/resources/builtin-extensions.json @@ -31,6 +31,10 @@ "name": "css-language-features", "path": "extensions/css-language-features" }, + { + "name": "dart", + "path": "extensions/dart" + }, { "name": "docker", "path": "extensions/docker" @@ -83,6 +87,10 @@ "name": "ini", "path": "extensions/ini" }, + { + "name": "ipynb", + "path": "extensions/ipynb" + }, { "name": "java", "path": "extensions/java" @@ -127,6 +135,10 @@ "name": "markdown-language-features", "path": "extensions/markdown-language-features" }, + { + "name": "markdown-math", + "path": "extensions/markdown-math" + }, { "name": "merge-conflict", "path": "extensions/merge-conflict" @@ -135,10 +147,6 @@ "name": "microsoft-authentication", "path": "extensions/microsoft-authentication" }, - { - "name": "notebook-markdown-extensions", - "path": "extensions/notebook-markdown-extensions" - }, { "name": "npm", "path": "extensions/npm" diff --git a/vscode-web-github1s/scripts/clone.sh b/vscode-web-github1s/scripts/clone.sh index 0ed3cc009..8052472d9 100755 --- a/vscode-web-github1s/scripts/clone.sh +++ b/vscode-web-github1s/scripts/clone.sh @@ -13,7 +13,7 @@ function main() { fi mkdir -p lib cd lib - git clone --depth 1 -b 1.55.0 https://github.com/microsoft/vscode.git vscode + git clone --depth 1 -b 1.60.0 https://github.com/microsoft/vscode.git vscode cd vscode yarn --frozen-lockfile } diff --git a/vscode-web-github1s/scripts/sync-code.sh b/vscode-web-github1s/scripts/sync-code.sh index 23a393f13..990bc1898 100755 --- a/vscode-web-github1s/scripts/sync-code.sh +++ b/vscode-web-github1s/scripts/sync-code.sh @@ -9,7 +9,9 @@ echo $APP_ROOT function main() { cd ${APP_ROOT} rsync -a src/ lib/vscode/src - rsync -a extensions/ lib/vscode/extensions + if [ -e extensions ]; then + rsync -a extensions/ lib/vscode/extensions + fi } main "$@" diff --git a/vscode-web-github1s/src/vs/base/common/platform.ts b/vscode-web-github1s/src/vs/base/common/platform.ts index 9820e719b..055fffa17 100644 --- a/vscode-web-github1s/src/vs/base/common/platform.ts +++ b/vscode-web-github1s/src/vs/base/common/platform.ts @@ -28,7 +28,7 @@ interface NLSConfig { } export interface IProcessEnvironment { - [key: string]: string; + [key: string]: string | undefined; } /** @@ -40,6 +40,7 @@ export interface IProcessEnvironment { */ export interface INodeProcess { platform: string; + arch: string; env: IProcessEnvironment; nextTick?: (callback: (...args: any[]) => void) => void; versions?: { @@ -57,36 +58,16 @@ declare const self: unknown; export const globals: any = (typeof self === 'object' ? self : typeof global === 'object' ? global : {}); let nodeProcess: INodeProcess | undefined = undefined; -if (typeof process !== 'undefined') { - // Native environment (non-sandboxed) - nodeProcess = process; -} else if (typeof globals.vscode !== 'undefined') { +if (typeof globals.vscode !== 'undefined' && typeof globals.vscode.process !== 'undefined') { // Native environment (sandboxed) nodeProcess = globals.vscode.process; +} else if (typeof process !== 'undefined') { + // Native environment (non-sandboxed) + nodeProcess = process; } const isElectronRenderer = typeof nodeProcess?.versions?.electron === 'string' && nodeProcess.type === 'renderer'; export const isElectronSandboxed = isElectronRenderer && nodeProcess?.sandboxed; -export const browserCodeLoadingCacheStrategy: 'none' | 'code' | 'bypassHeatCheck' | 'bypassHeatCheckAndEagerCompile' | undefined = (() => { - - // Always enabled when sandbox is enabled - if (isElectronSandboxed) { - return 'bypassHeatCheck'; - } - - // Otherwise, only enabled conditionally - const env = nodeProcess?.env['ENABLE_VSCODE_BROWSER_CODE_LOADING']; - if (typeof env === 'string') { - if (env === 'none' || env === 'code' || env === 'bypassHeatCheck' || env === 'bypassHeatCheckAndEagerCompile') { - return env; - } - - return 'bypassHeatCheck'; - } - - return undefined; -})(); -export const isPreferringBrowserCodeLoad = typeof browserCodeLoadingCacheStrategy === 'string'; interface INavigator { userAgent: string; @@ -215,7 +196,7 @@ export namespace Language { export const locale = _locale; /** - * The translatios that are available through language packs. + * The translations that are available through language packs. */ export const translationsConfigFile = _translationsConfigFile; diff --git a/vscode-web-github1s/src/vs/code/browser/workbench/workbench.ts b/vscode-web-github1s/src/vs/code/browser/workbench/workbench.ts index 7cd7ff01f..08f7380e0 100644 --- a/vscode-web-github1s/src/vs/code/browser/workbench/workbench.ts +++ b/vscode-web-github1s/src/vs/code/browser/workbench/workbench.ts @@ -3,22 +3,22 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IWorkbenchConstructionOptions, create, ICredentialsProvider, IURLCallbackProvider, IWorkspaceProvider, IWorkspace, IWindowIndicator, IProductQualityChangeHandler, ISettingsSyncOptions } from 'vs/workbench/workbench.web.api'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import { Event, Emitter } from 'vs/base/common/event'; -import { generateUuid } from 'vs/base/common/uuid'; -import { CancellationToken } from 'vs/base/common/cancellation'; +import { isStandalone } from 'vs/base/browser/browser'; import { streamToBuffer } from 'vs/base/common/buffer'; +import { CancellationToken } from 'vs/base/common/cancellation'; +import { Emitter, Event } from 'vs/base/common/event'; import { Disposable } from 'vs/base/common/lifecycle'; -import { request } from 'vs/base/parts/request/browser/request'; -import { isFolderToOpen, isWorkspaceToOpen } from 'vs/platform/windows/common/windows'; +import { Schemas } from 'vs/base/common/network'; import { isEqual } from 'vs/base/common/resources'; -import { isStandalone } from 'vs/base/browser/browser'; +import { URI, UriComponents } from 'vs/base/common/uri'; +import { generateUuid } from 'vs/base/common/uuid'; +import { request } from 'vs/base/parts/request/browser/request'; import { localize } from 'vs/nls'; -import { Schemas } from 'vs/base/common/network'; -import product from 'vs/platform/product/common/product'; import { parseLogLevel } from 'vs/platform/log/common/log'; +import product from 'vs/platform/product/common/product'; +import { isFolderToOpen, isWorkspaceToOpen } from 'vs/platform/windows/common/windows'; // below codes are changed by github1s +import { create, ICredentialsProvider, IProductQualityChangeHandler, ISettingsSyncOptions, IURLCallbackProvider, IWindowIndicator, IWorkbenchConstructionOptions, IWorkspace, IWorkspaceProvider } from 'vs/workbench/workbench.web.api'; // eslint-disable-next-line import { getBrowserUrl, replaceBrowserUrl } from 'vs/github1s/util'; // eslint-disable-next-line @@ -300,27 +300,32 @@ class WorkspaceProvider implements IWorkspaceProvider { readonly trusted = true; constructor( - public readonly workspace: IWorkspace, - public readonly payload: object + readonly workspace: IWorkspace, + readonly payload: object ) { } - async open(workspace: IWorkspace, options?: { reuse?: boolean, payload?: object }): Promise { + async open(workspace: IWorkspace, options?: { reuse?: boolean, payload?: object }): Promise { if (options?.reuse && !options.payload && this.isSame(this.workspace, workspace)) { - return; // return early if workspace and environment is not changing and we are reusing window + return true; // return early if workspace and environment is not changing and we are reusing window } const targetHref = this.createTargetUrl(workspace, options); if (targetHref) { if (options?.reuse) { window.location.href = targetHref; + return true; } else { + let result; if (isStandalone) { - window.open(targetHref, '_blank', 'toolbar=no'); // ensures to open another 'standalone' window! + result = window.open(targetHref, '_blank', 'toolbar=no'); // ensures to open another 'standalone' window! } else { - window.open(targetHref); + result = window.open(targetHref); } + + return !!result; } } + return false; } private createTargetUrl(workspace: IWorkspace, options?: { reuse?: boolean, payload?: object }): string | undefined { @@ -400,6 +405,10 @@ class WindowIndicator implements IWindowIndicator { uri = workspace.workspaceUri; } + if (uri?.scheme === 'github' || uri?.scheme === 'codespace') { + [repositoryOwner, repositoryName] = uri.authority.split('+'); + } + // below codes are changed by github1s if (uri?.scheme === 'github1s') { [repositoryOwner = 'conwnet', repositoryName = 'github1s'] = URI.parse(getBrowserUrl()).path.split('/').filter(Boolean); @@ -436,13 +445,6 @@ class WindowIndicator implements IWindowIndicator { const config: IWorkbenchConstructionOptions & { folderUri?: UriComponents, workspaceUri?: UriComponents } = JSON.parse(configElementAttribute); - // Revive static extension locations - if (Array.isArray(config.staticExtensions)) { - config.staticExtensions.forEach(extension => { - extension.extensionLocation = URI.revive(extension.extensionLocation); - }); - } - // Find workspace to open and payload let foundWorkspace = false; let workspace: IWorkspace; @@ -509,6 +511,15 @@ class WindowIndicator implements IWindowIndicator { // icon: 'code', // title: localize('home', "Home") // }; + + // Welcome Banner + // const welcomeBanner: IWelcomeBanner = { + // message: localize('welcomeBannerMessage', "{0} Web. Browser based playground for testing.", product.nameShort), + // actions: [{ + // href: 'https://github.com/microsoft/vscode', + // label: localize('learnMore', "Learn More") + // }] + // }; // above codes are changed by github1s // Window indicator (unless connected to a remote) @@ -535,19 +546,6 @@ class WindowIndicator implements IWindowIndicator { // settings sync options const settingsSyncOptions: ISettingsSyncOptions | undefined = config.settingsSyncOptions ? { enabled: config.settingsSyncOptions.enabled, - enablementHandler: (enablement) => { - let queryString = `settingsSync=${enablement ? 'true' : 'false'}`; - - // Save all other query params we might have - const query = new URL(document.location.href).searchParams; - query.forEach((value, key) => { - if (key !== 'settingsSync') { - queryString += `&${key}=${value}`; - } - }); - - window.location.href = `${window.location.origin}?${queryString}`; - } } : undefined; // Finally create workbench @@ -556,12 +554,16 @@ class WindowIndicator implements IWindowIndicator { // below codes are changed by github1s commands: getGitHub1sCustomCommands(), // above codes are changed by github1s - logLevel: logLevel ? parseLogLevel(logLevel) : undefined, + developmentOptions: { + logLevel: logLevel ? parseLogLevel(logLevel) : undefined, + ...config.developmentOptions + }, settingsSyncOptions, // below codes are changed by github1s // homeIndicator, - // above codes are changed by github1s windowIndicator, + // welcomeBanner, + // above codes are changed by github1s productQualityChangeHandler, workspaceProvider, urlCallbackProvider: new PollingURLCallbackProvider(), diff --git a/vscode-web-github1s/src/vs/editor/browser/controller/textAreaHandler.ts b/vscode-web-github1s/src/vs/editor/browser/controller/textAreaHandler.ts deleted file mode 100644 index 78e2b3dba..000000000 --- a/vscode-web-github1s/src/vs/editor/browser/controller/textAreaHandler.ts +++ /dev/null @@ -1,678 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -import 'vs/css!./textAreaHandler'; -import * as nls from 'vs/nls'; -import * as browser from 'vs/base/browser/browser'; -import { FastDomNode, createFastDomNode } from 'vs/base/browser/fastDomNode'; -import { IKeyboardEvent } from 'vs/base/browser/keyboardEvent'; -import * as platform from 'vs/base/common/platform'; -import * as strings from 'vs/base/common/strings'; -import { Configuration } from 'vs/editor/browser/config/configuration'; -import { CopyOptions, ICompositionData, IPasteData, ITextAreaInputHost, TextAreaInput, ClipboardDataToCopy } from 'vs/editor/browser/controller/textAreaInput'; -import { ISimpleModel, ITypeData, PagedScreenReaderStrategy, TextAreaState, _debugComposition } from 'vs/editor/browser/controller/textAreaState'; -import { ViewController } from 'vs/editor/browser/view/viewController'; -import { PartFingerprint, PartFingerprints, ViewPart } from 'vs/editor/browser/view/viewPart'; -import { LineNumbersOverlay } from 'vs/editor/browser/viewParts/lineNumbers/lineNumbers'; -import { Margin } from 'vs/editor/browser/viewParts/margin/margin'; -import { RenderLineNumbersType, EditorOption, IComputedEditorOptions, EditorOptions } from 'vs/editor/common/config/editorOptions'; -import { BareFontInfo } from 'vs/editor/common/config/fontInfo'; -import { WordCharacterClass, getMapForWordSeparators } from 'vs/editor/common/controller/wordCharacterClassifier'; -import { Position } from 'vs/editor/common/core/position'; -import { Range } from 'vs/editor/common/core/range'; -import { Selection } from 'vs/editor/common/core/selection'; -import { ScrollType } from 'vs/editor/common/editorCommon'; -import { EndOfLinePreference } from 'vs/editor/common/model'; -import { RenderingContext, RestrictedRenderingContext, HorizontalPosition } from 'vs/editor/common/view/renderingContext'; -import { ViewContext } from 'vs/editor/common/view/viewContext'; -import * as viewEvents from 'vs/editor/common/view/viewEvents'; -import { AccessibilitySupport } from 'vs/platform/accessibility/common/accessibility'; -import { IEditorAriaOptions } from 'vs/editor/browser/editorBrowser'; -import { MOUSE_CURSOR_TEXT_CSS_CLASS_NAME } from 'vs/base/browser/ui/mouseCursor/mouseCursor'; - -export interface ITextAreaHandlerHelper { - visibleRangeForPositionRelativeToEditor(lineNumber: number, column: number): HorizontalPosition | null; -} - -class VisibleTextAreaData { - _visibleTextAreaBrand: void; - - public readonly top: number; - public readonly left: number; - public readonly width: number; - - constructor(top: number, left: number, width: number) { - this.top = top; - this.left = left; - this.width = width; - } - - public setWidth(width: number): VisibleTextAreaData { - return new VisibleTextAreaData(this.top, this.left, width); - } -} - -const canUseZeroSizeTextarea = (browser.isFirefox); - -export class TextAreaHandler extends ViewPart { - - private readonly _viewController: ViewController; - private readonly _viewHelper: ITextAreaHandlerHelper; - private _scrollLeft: number; - private _scrollTop: number; - - private _accessibilitySupport!: AccessibilitySupport; - private _accessibilityPageSize!: number; - private _contentLeft: number; - private _contentWidth: number; - private _contentHeight: number; - private _fontInfo: BareFontInfo; - private _lineHeight: number; - private _emptySelectionClipboard: boolean; - private _copyWithSyntaxHighlighting: boolean; - - /** - * Defined only when the text area is visible (composition case). - */ - private _visibleTextArea: VisibleTextAreaData | null; - private _selections: Selection[]; - private _modelSelections: Selection[]; - - /** - * The position at which the textarea was rendered. - * This is useful for hit-testing and determining the mouse position. - */ - private _lastRenderPosition: Position | null; - - public readonly textArea: FastDomNode; - public readonly textAreaCover: FastDomNode; - private readonly _textAreaInput: TextAreaInput; - - constructor(context: ViewContext, viewController: ViewController, viewHelper: ITextAreaHandlerHelper) { - super(context); - - this._viewController = viewController; - this._viewHelper = viewHelper; - this._scrollLeft = 0; - this._scrollTop = 0; - - const options = this._context.configuration.options; - const layoutInfo = options.get(EditorOption.layoutInfo); - - this._setAccessibilityOptions(options); - this._contentLeft = layoutInfo.contentLeft; - this._contentWidth = layoutInfo.contentWidth; - this._contentHeight = layoutInfo.height; - this._fontInfo = options.get(EditorOption.fontInfo); - this._lineHeight = options.get(EditorOption.lineHeight); - this._emptySelectionClipboard = options.get(EditorOption.emptySelectionClipboard); - this._copyWithSyntaxHighlighting = options.get(EditorOption.copyWithSyntaxHighlighting); - - this._visibleTextArea = null; - this._selections = [new Selection(1, 1, 1, 1)]; - this._modelSelections = [new Selection(1, 1, 1, 1)]; - this._lastRenderPosition = null; - - // Text Area (The focus will always be in the textarea when the cursor is blinking) - this.textArea = createFastDomNode(document.createElement('textarea')); - PartFingerprints.write(this.textArea, PartFingerprint.TextArea); - this.textArea.setClassName(`inputarea ${MOUSE_CURSOR_TEXT_CSS_CLASS_NAME}`); - this.textArea.setAttribute('wrap', 'off'); - this.textArea.setAttribute('autocorrect', 'off'); - this.textArea.setAttribute('autocapitalize', 'off'); - this.textArea.setAttribute('autocomplete', 'off'); - this.textArea.setAttribute('spellcheck', 'false'); - this.textArea.setAttribute('aria-label', this._getAriaLabel(options)); - this.textArea.setAttribute('tabindex', String(options.get(EditorOption.tabIndex))); - this.textArea.setAttribute('role', 'textbox'); - this.textArea.setAttribute('aria-roledescription', nls.localize('editor', "editor")); - this.textArea.setAttribute('aria-multiline', 'true'); - this.textArea.setAttribute('aria-haspopup', 'false'); - this.textArea.setAttribute('aria-autocomplete', 'both'); - - // below codes are changed by github1s - if (options.get(EditorOption.domReadOnly) && options.get(EditorOption.readOnly)) { - // above codes are changed by github1s - this.textArea.setAttribute('readonly', 'true'); - } - - this.textAreaCover = createFastDomNode(document.createElement('div')); - this.textAreaCover.setPosition('absolute'); - - const simpleModel: ISimpleModel = { - getLineCount: (): number => { - return this._context.model.getLineCount(); - }, - getLineMaxColumn: (lineNumber: number): number => { - return this._context.model.getLineMaxColumn(lineNumber); - }, - getValueInRange: (range: Range, eol: EndOfLinePreference): string => { - return this._context.model.getValueInRange(range, eol); - } - }; - - const textAreaInputHost: ITextAreaInputHost = { - getDataToCopy: (generateHTML: boolean): ClipboardDataToCopy => { - const rawTextToCopy = this._context.model.getPlainTextToCopy(this._modelSelections, this._emptySelectionClipboard, platform.isWindows); - const newLineCharacter = this._context.model.getEOL(); - - const isFromEmptySelection = (this._emptySelectionClipboard && this._modelSelections.length === 1 && this._modelSelections[0].isEmpty()); - const multicursorText = (Array.isArray(rawTextToCopy) ? rawTextToCopy : null); - const text = (Array.isArray(rawTextToCopy) ? rawTextToCopy.join(newLineCharacter) : rawTextToCopy); - - let html: string | null | undefined = undefined; - let mode: string | null = null; - if (generateHTML) { - if (CopyOptions.forceCopyWithSyntaxHighlighting || (this._copyWithSyntaxHighlighting && text.length < 65536)) { - const richText = this._context.model.getRichTextToCopy(this._modelSelections, this._emptySelectionClipboard); - if (richText) { - html = richText.html; - mode = richText.mode; - } - } - } - return { - isFromEmptySelection, - multicursorText, - text, - html, - mode - }; - }, - getScreenReaderContent: (currentState: TextAreaState): TextAreaState => { - if (this._accessibilitySupport === AccessibilitySupport.Disabled) { - // We know for a fact that a screen reader is not attached - // On OSX, we write the character before the cursor to allow for "long-press" composition - // Also on OSX, we write the word before the cursor to allow for the Accessibility Keyboard to give good hints - if (platform.isMacintosh) { - const selection = this._selections[0]; - if (selection.isEmpty()) { - const position = selection.getStartPosition(); - - let textBefore = this._getWordBeforePosition(position); - if (textBefore.length === 0) { - textBefore = this._getCharacterBeforePosition(position); - } - - if (textBefore.length > 0) { - return new TextAreaState(textBefore, textBefore.length, textBefore.length, position, position); - } - } - } - return TextAreaState.EMPTY; - } - - if (browser.isAndroid) { - // when tapping in the editor on a word, Android enters composition mode. - // in the `compositionstart` event we cannot clear the textarea, because - // it then forgets to ever send a `compositionend`. - // we therefore only write the current word in the textarea - const selection = this._selections[0]; - if (selection.isEmpty()) { - const position = selection.getStartPosition(); - const [wordAtPosition, positionOffsetInWord] = this._getAndroidWordAtPosition(position); - if (wordAtPosition.length > 0) { - return new TextAreaState(wordAtPosition, positionOffsetInWord, positionOffsetInWord, position, position); - } - } - return TextAreaState.EMPTY; - } - - return PagedScreenReaderStrategy.fromEditorSelection(currentState, simpleModel, this._selections[0], this._accessibilityPageSize, this._accessibilitySupport === AccessibilitySupport.Unknown); - }, - - deduceModelPosition: (viewAnchorPosition: Position, deltaOffset: number, lineFeedCnt: number): Position => { - return this._context.model.deduceModelPositionRelativeToViewPosition(viewAnchorPosition, deltaOffset, lineFeedCnt); - } - }; - - this._textAreaInput = this._register(new TextAreaInput(textAreaInputHost, this.textArea)); - - this._register(this._textAreaInput.onKeyDown((e: IKeyboardEvent) => { - this._viewController.emitKeyDown(e); - })); - - this._register(this._textAreaInput.onKeyUp((e: IKeyboardEvent) => { - this._viewController.emitKeyUp(e); - })); - - this._register(this._textAreaInput.onPaste((e: IPasteData) => { - let pasteOnNewLine = false; - let multicursorText: string[] | null = null; - let mode: string | null = null; - if (e.metadata) { - pasteOnNewLine = (this._emptySelectionClipboard && !!e.metadata.isFromEmptySelection); - multicursorText = (typeof e.metadata.multicursorText !== 'undefined' ? e.metadata.multicursorText : null); - mode = e.metadata.mode; - } - this._viewController.paste(e.text, pasteOnNewLine, multicursorText, mode); - })); - - this._register(this._textAreaInput.onCut(() => { - this._viewController.cut(); - })); - - this._register(this._textAreaInput.onType((e: ITypeData) => { - if (e.replacePrevCharCnt || e.replaceNextCharCnt || e.positionDelta) { - // must be handled through the new command - if (_debugComposition) { - console.log(` => compositionType: <<${e.text}>>, ${e.replacePrevCharCnt}, ${e.replaceNextCharCnt}, ${e.positionDelta}`); - } - this._viewController.compositionType(e.text, e.replacePrevCharCnt, e.replaceNextCharCnt, e.positionDelta); - } else { - if (_debugComposition) { - console.log(` => type: <<${e.text}>>`); - } - this._viewController.type(e.text); - } - })); - - this._register(this._textAreaInput.onSelectionChangeRequest((modelSelection: Selection) => { - this._viewController.setSelection(modelSelection); - })); - - this._register(this._textAreaInput.onCompositionStart((e) => { - const lineNumber = this._selections[0].startLineNumber; - const column = this._selections[0].startColumn + e.revealDeltaColumns; - - this._context.model.revealRange( - 'keyboard', - true, - new Range(lineNumber, column, lineNumber, column), - viewEvents.VerticalRevealType.Simple, - ScrollType.Immediate - ); - - // Find range pixel position - const visibleRange = this._viewHelper.visibleRangeForPositionRelativeToEditor(lineNumber, column); - - if (visibleRange) { - this._visibleTextArea = new VisibleTextAreaData( - this._context.viewLayout.getVerticalOffsetForLineNumber(lineNumber), - visibleRange.left, - canUseZeroSizeTextarea ? 0 : 1 - ); - this._render(); - } - - // Show the textarea - this.textArea.setClassName(`inputarea ${MOUSE_CURSOR_TEXT_CSS_CLASS_NAME} ime-input`); - - this._viewController.compositionStart(); - this._context.model.onCompositionStart(); - })); - - this._register(this._textAreaInput.onCompositionUpdate((e: ICompositionData) => { - if (!this._visibleTextArea) { - return; - } - // adjust width by its size - this._visibleTextArea = this._visibleTextArea.setWidth(measureText(e.data, this._fontInfo)); - this._render(); - })); - - this._register(this._textAreaInput.onCompositionEnd(() => { - - this._visibleTextArea = null; - this._render(); - - this.textArea.setClassName(`inputarea ${MOUSE_CURSOR_TEXT_CSS_CLASS_NAME}`); - this._viewController.compositionEnd(); - this._context.model.onCompositionEnd(); - })); - - this._register(this._textAreaInput.onFocus(() => { - this._context.model.setHasFocus(true); - })); - - this._register(this._textAreaInput.onBlur(() => { - this._context.model.setHasFocus(false); - })); - } - - public dispose(): void { - super.dispose(); - } - - private _getAndroidWordAtPosition(position: Position): [string, number] { - const ANDROID_WORD_SEPARATORS = '`~!@#$%^&*()-=+[{]}\\|;:",.<>/?'; - const lineContent = this._context.model.getLineContent(position.lineNumber); - const wordSeparators = getMapForWordSeparators(ANDROID_WORD_SEPARATORS); - - let goingLeft = true; - let startColumn = position.column; - let goingRight = true; - let endColumn = position.column; - let distance = 0; - while (distance < 50 && (goingLeft || goingRight)) { - if (goingLeft && startColumn <= 1) { - goingLeft = false; - } - if (goingLeft) { - const charCode = lineContent.charCodeAt(startColumn - 2); - const charClass = wordSeparators.get(charCode); - if (charClass !== WordCharacterClass.Regular) { - goingLeft = false; - } else { - startColumn--; - } - } - if (goingRight && endColumn > lineContent.length) { - goingRight = false; - } - if (goingRight) { - const charCode = lineContent.charCodeAt(endColumn - 1); - const charClass = wordSeparators.get(charCode); - if (charClass !== WordCharacterClass.Regular) { - goingRight = false; - } else { - endColumn++; - } - } - distance++; - } - - return [lineContent.substring(startColumn - 1, endColumn - 1), position.column - startColumn]; - } - - private _getWordBeforePosition(position: Position): string { - const lineContent = this._context.model.getLineContent(position.lineNumber); - const wordSeparators = getMapForWordSeparators(this._context.configuration.options.get(EditorOption.wordSeparators)); - - let column = position.column; - let distance = 0; - while (column > 1) { - const charCode = lineContent.charCodeAt(column - 2); - const charClass = wordSeparators.get(charCode); - if (charClass !== WordCharacterClass.Regular || distance > 50) { - return lineContent.substring(column - 1, position.column - 1); - } - distance++; - column--; - } - return lineContent.substring(0, position.column - 1); - } - - private _getCharacterBeforePosition(position: Position): string { - if (position.column > 1) { - const lineContent = this._context.model.getLineContent(position.lineNumber); - const charBefore = lineContent.charAt(position.column - 2); - if (!strings.isHighSurrogate(charBefore.charCodeAt(0))) { - return charBefore; - } - } - return ''; - } - - private _getAriaLabel(options: IComputedEditorOptions): string { - const accessibilitySupport = options.get(EditorOption.accessibilitySupport); - if (accessibilitySupport === AccessibilitySupport.Disabled) { - return nls.localize('accessibilityOffAriaLabel', "The editor is not accessible at this time. Press {0} for options.", platform.isLinux ? 'Shift+Alt+F1' : 'Alt+F1'); - } - return options.get(EditorOption.ariaLabel); - } - - private _setAccessibilityOptions(options: IComputedEditorOptions): void { - this._accessibilitySupport = options.get(EditorOption.accessibilitySupport); - const accessibilityPageSize = options.get(EditorOption.accessibilityPageSize); - if (this._accessibilitySupport === AccessibilitySupport.Enabled && accessibilityPageSize === EditorOptions.accessibilityPageSize.defaultValue) { - // If a screen reader is attached and the default value is not set we shuold automatically increase the page size to 1000 for a better experience - this._accessibilityPageSize = 1000; - } else { - this._accessibilityPageSize = accessibilityPageSize; - } - } - - // --- begin event handlers - - public onConfigurationChanged(e: viewEvents.ViewConfigurationChangedEvent): boolean { - const options = this._context.configuration.options; - const layoutInfo = options.get(EditorOption.layoutInfo); - - this._setAccessibilityOptions(options); - this._contentLeft = layoutInfo.contentLeft; - this._contentWidth = layoutInfo.contentWidth; - this._contentHeight = layoutInfo.height; - this._fontInfo = options.get(EditorOption.fontInfo); - this._lineHeight = options.get(EditorOption.lineHeight); - this._emptySelectionClipboard = options.get(EditorOption.emptySelectionClipboard); - this._copyWithSyntaxHighlighting = options.get(EditorOption.copyWithSyntaxHighlighting); - this.textArea.setAttribute('aria-label', this._getAriaLabel(options)); - this.textArea.setAttribute('tabindex', String(options.get(EditorOption.tabIndex))); - - // below codes are changed by github1s - if (e.hasChanged(EditorOption.domReadOnly) || e.hasChanged(EditorOption.readOnly)) { - if (options.get(EditorOption.domReadOnly) && options.get(EditorOption.readOnly)) { - // above codes are changed by github1s - this.textArea.setAttribute('readonly', 'true'); - } else { - this.textArea.removeAttribute('readonly'); - } - } - - if (e.hasChanged(EditorOption.accessibilitySupport)) { - this._textAreaInput.writeScreenReaderContent('strategy changed'); - } - - return true; - } - public onCursorStateChanged(e: viewEvents.ViewCursorStateChangedEvent): boolean { - this._selections = e.selections.slice(0); - this._modelSelections = e.modelSelections.slice(0); - this._textAreaInput.writeScreenReaderContent('selection changed'); - return true; - } - public onDecorationsChanged(e: viewEvents.ViewDecorationsChangedEvent): boolean { - // true for inline decorations that can end up relayouting text - return true; - } - public onFlushed(e: viewEvents.ViewFlushedEvent): boolean { - return true; - } - public onLinesChanged(e: viewEvents.ViewLinesChangedEvent): boolean { - return true; - } - public onLinesDeleted(e: viewEvents.ViewLinesDeletedEvent): boolean { - return true; - } - public onLinesInserted(e: viewEvents.ViewLinesInsertedEvent): boolean { - return true; - } - public onScrollChanged(e: viewEvents.ViewScrollChangedEvent): boolean { - this._scrollLeft = e.scrollLeft; - this._scrollTop = e.scrollTop; - return true; - } - public onZonesChanged(e: viewEvents.ViewZonesChangedEvent): boolean { - return true; - } - - // --- end event handlers - - // --- begin view API - - public isFocused(): boolean { - return this._textAreaInput.isFocused(); - } - - public focusTextArea(): void { - this._textAreaInput.focusTextArea(); - } - - public refreshFocusState() { - this._textAreaInput.refreshFocusState(); - } - - public getLastRenderData(): Position | null { - return this._lastRenderPosition; - } - - public setAriaOptions(options: IEditorAriaOptions): void { - if (options.activeDescendant) { - this.textArea.setAttribute('aria-haspopup', 'true'); - this.textArea.setAttribute('aria-autocomplete', 'list'); - this.textArea.setAttribute('aria-activedescendant', options.activeDescendant); - } else { - this.textArea.setAttribute('aria-haspopup', 'false'); - this.textArea.setAttribute('aria-autocomplete', 'both'); - this.textArea.removeAttribute('aria-activedescendant'); - } - if (options.role) { - this.textArea.setAttribute('role', options.role); - } - } - - // --- end view API - - private _primaryCursorPosition: Position = new Position(1, 1); - private _primaryCursorVisibleRange: HorizontalPosition | null = null; - - public prepareRender(ctx: RenderingContext): void { - this._primaryCursorPosition = new Position(this._selections[0].positionLineNumber, this._selections[0].positionColumn); - this._primaryCursorVisibleRange = ctx.visibleRangeForPosition(this._primaryCursorPosition); - } - - public render(ctx: RestrictedRenderingContext): void { - this._textAreaInput.writeScreenReaderContent('render'); - this._render(); - } - - private _render(): void { - if (this._visibleTextArea) { - // The text area is visible for composition reasons - this._renderInsideEditor( - null, - this._visibleTextArea.top - this._scrollTop, - this._contentLeft + this._visibleTextArea.left - this._scrollLeft, - this._visibleTextArea.width, - this._lineHeight - ); - return; - } - - if (!this._primaryCursorVisibleRange) { - // The primary cursor is outside the viewport => place textarea to the top left - this._renderAtTopLeft(); - return; - } - - const left = this._contentLeft + this._primaryCursorVisibleRange.left - this._scrollLeft; - if (left < this._contentLeft || left > this._contentLeft + this._contentWidth) { - // cursor is outside the viewport - this._renderAtTopLeft(); - return; - } - - const top = this._context.viewLayout.getVerticalOffsetForLineNumber(this._selections[0].positionLineNumber) - this._scrollTop; - if (top < 0 || top > this._contentHeight) { - // cursor is outside the viewport - this._renderAtTopLeft(); - return; - } - - // The primary cursor is in the viewport (at least vertically) => place textarea on the cursor - - if (platform.isMacintosh) { - // For the popup emoji input, we will make the text area as high as the line height - // We will also make the fontSize and lineHeight the correct dimensions to help with the placement of these pickers - this._renderInsideEditor( - this._primaryCursorPosition, - top, left, - canUseZeroSizeTextarea ? 0 : 1, this._lineHeight - ); - return; - } - - this._renderInsideEditor( - this._primaryCursorPosition, - top, left, - canUseZeroSizeTextarea ? 0 : 1, canUseZeroSizeTextarea ? 0 : 1 - ); - } - - private _renderInsideEditor(renderedPosition: Position | null, top: number, left: number, width: number, height: number): void { - this._lastRenderPosition = renderedPosition; - const ta = this.textArea; - const tac = this.textAreaCover; - - Configuration.applyFontInfo(ta, this._fontInfo); - - ta.setTop(top); - ta.setLeft(left); - ta.setWidth(width); - ta.setHeight(height); - - tac.setTop(0); - tac.setLeft(0); - tac.setWidth(0); - tac.setHeight(0); - } - - private _renderAtTopLeft(): void { - this._lastRenderPosition = null; - const ta = this.textArea; - const tac = this.textAreaCover; - - Configuration.applyFontInfo(ta, this._fontInfo); - ta.setTop(0); - ta.setLeft(0); - tac.setTop(0); - tac.setLeft(0); - - if (canUseZeroSizeTextarea) { - ta.setWidth(0); - ta.setHeight(0); - tac.setWidth(0); - tac.setHeight(0); - return; - } - - // (in WebKit the textarea is 1px by 1px because it cannot handle input to a 0x0 textarea) - // specifically, when doing Korean IME, setting the textarea to 0x0 breaks IME badly. - - ta.setWidth(1); - ta.setHeight(1); - tac.setWidth(1); - tac.setHeight(1); - - const options = this._context.configuration.options; - - if (options.get(EditorOption.glyphMargin)) { - tac.setClassName('monaco-editor-background textAreaCover ' + Margin.OUTER_CLASS_NAME); - } else { - if (options.get(EditorOption.lineNumbers).renderType !== RenderLineNumbersType.Off) { - tac.setClassName('monaco-editor-background textAreaCover ' + LineNumbersOverlay.CLASS_NAME); - } else { - tac.setClassName('monaco-editor-background textAreaCover'); - } - } - } -} - -function measureText(text: string, fontInfo: BareFontInfo): number { - // adjust width by its size - const canvasElem = document.createElement('canvas'); - const context = canvasElem.getContext('2d')!; - context.font = createFontString(fontInfo); - const metrics = context.measureText(text); - - if (browser.isFirefox) { - return metrics.width + 2; // +2 for Japanese... - } else { - return metrics.width; - } -} - -function createFontString(bareFontInfo: BareFontInfo): string { - return doCreateFontString('normal', bareFontInfo.fontWeight, bareFontInfo.fontSize, bareFontInfo.lineHeight, bareFontInfo.fontFamily); -} - -function doCreateFontString(fontStyle: string, fontWeight: string, fontSize: number, lineHeight: number, fontFamily: string): string { - // The full font syntax is: - // style | variant | weight | stretch | size/line-height | fontFamily - // (https://developer.mozilla.org/en-US/docs/Web/CSS/font) - // But it appears Edge and IE11 cannot properly parse `stretch`. - return `${fontStyle} normal ${fontWeight} ${fontSize}px / ${lineHeight}px ${fontFamily}`; -} diff --git a/vscode-web-github1s/src/vs/editor/common/config/editorOptions.ts b/vscode-web-github1s/src/vs/editor/common/config/editorOptions.ts index 22d856573..857ff39fd 100644 --- a/vscode-web-github1s/src/vs/editor/common/config/editorOptions.ts +++ b/vscode-web-github1s/src/vs/editor/common/config/editorOptions.ts @@ -75,7 +75,7 @@ export interface IEditorOptions { /** * Control the rendering of line numbers. * If it is a function, it will be invoked when rendering a line number and the return value will be rendered. - * Otherwise, if it is a truey, line numbers will be rendered normally (equivalent of using an identity function). + * Otherwise, if it is a truthy, line numbers will be rendered normally (equivalent of using an identity function). * Otherwise, line numbers will not be rendered. * Defaults to `on`. */ @@ -382,8 +382,9 @@ export interface IEditorOptions { * Suggest options. */ suggest?: ISuggestOptions; + inlineSuggest?: IInlineSuggestOptions; /** - * Smart select opptions; + * Smart select options. */ smartSelect?: ISmartSelectOptions; /** @@ -547,6 +548,11 @@ export interface IEditorOptions { * Defaults to true. */ foldingHighlight?: boolean; + /** + * Auto fold imports folding regions. + * Defaults to true. + */ + foldingImportsByDefault?: boolean; /** * Controls whether the fold actions in the gutter stay always visible or hide unless the mouse is over the gutter. * Defaults to 'mouseover'. @@ -564,7 +570,7 @@ export interface IEditorOptions { matchBrackets?: 'never' | 'near' | 'always'; /** * Enable rendering of whitespace. - * Defaults to none. + * Defaults to 'selection'. */ renderWhitespace?: 'none' | 'boundary' | 'selection' | 'trailing' | 'all'; /** @@ -637,7 +643,11 @@ export interface IEditorOptions { /** * Control the behavior and rendering of the inline hints. */ - inlineHints?: IEditorInlineHintsOptions; + inlayHints?: IEditorInlayHintsOptions; + /** + * Control if the editor should use shadow DOM. + */ + useShadowDOM?: boolean; } /** @@ -704,7 +714,7 @@ export interface IDiffEditorOptions extends IEditorOptions { */ originalAriaLabel?: string; /** - * Aria label for modifed editor. + * Aria label for modified editor. */ modifiedAriaLabel?: string; } @@ -906,7 +916,7 @@ class EditorBooleanOption extends SimpleEditorOption extends SimpleEditorOption extends SimpleEditorOption extends SimpleEditorOption extends this._allowedValues = allowedValues; } - public validate(input: any): V { + public override validate(input: any): V { return stringSet(input, this.defaultValue, this._allowedValues); } } @@ -1112,7 +1122,7 @@ class EditorAccessibilitySupport extends BaseEditorOption constructor() { const defaults: EditorFindOptions = { cursorMoveOnType: true, - seedSearchStringFromSelection: true, + seedSearchStringFromSelection: 'always', autoFindInSelection: 'never', globalFindClipboard: false, addExtraSpaceOnTop: true, @@ -1393,8 +1403,14 @@ class EditorFind extends BaseEditorOption description: nls.localize('find.cursorMoveOnType', "Controls whether the cursor should jump to find matches while typing.") }, 'editor.find.seedSearchStringFromSelection': { - type: 'boolean', + type: 'string', + enum: ['never', 'always', 'selection'], default: defaults.seedSearchStringFromSelection, + enumDescriptions: [ + nls.localize('editor.find.seedSearchStringFromSelection.never', 'Never seed search string from the editor selection.'), + nls.localize('editor.find.seedSearchStringFromSelection.always', 'Always seed search string from the editor selection, including word at cursor position.'), + nls.localize('editor.find.seedSearchStringFromSelection.selection', 'Only seed search string from the editor selection.') + ], description: nls.localize('find.seedSearchStringFromSelection', "Controls whether the search string in the Find Widget is seeded from the editor selection.") }, 'editor.find.autoFindInSelection': { @@ -1402,11 +1418,11 @@ class EditorFind extends BaseEditorOption enum: ['never', 'always', 'multiline'], default: defaults.autoFindInSelection, enumDescriptions: [ - nls.localize('editor.find.autoFindInSelection.never', 'Never turn on Find in selection automatically (default).'), - nls.localize('editor.find.autoFindInSelection.always', 'Always turn on Find in selection automatically.'), - nls.localize('editor.find.autoFindInSelection.multiline', 'Turn on Find in selection automatically when multiple lines of content are selected.') + nls.localize('editor.find.autoFindInSelection.never', 'Never turn on Find in Selection automatically (default).'), + nls.localize('editor.find.autoFindInSelection.always', 'Always turn on Find in Selection automatically.'), + nls.localize('editor.find.autoFindInSelection.multiline', 'Turn on Find in Selection automatically when multiple lines of content are selected.') ], - description: nls.localize('find.autoFindInSelection', "Controls the condition for turning on find in selection automatically.") + description: nls.localize('find.autoFindInSelection', "Controls the condition for turning on Find in Selection automatically.") }, 'editor.find.globalFindClipboard': { type: 'boolean', @@ -1436,7 +1452,9 @@ class EditorFind extends BaseEditorOption const input = _input as IEditorFindOptions; return { cursorMoveOnType: boolean(input.cursorMoveOnType, this.defaultValue.cursorMoveOnType), - seedSearchStringFromSelection: boolean(input.seedSearchStringFromSelection, this.defaultValue.seedSearchStringFromSelection), + seedSearchStringFromSelection: typeof _input.seedSearchStringFromSelection === 'boolean' + ? (_input.seedSearchStringFromSelection ? 'always' : 'never') + : stringSet<'never' | 'always' | 'selection'>(input.seedSearchStringFromSelection, this.defaultValue.seedSearchStringFromSelection, ['never', 'always', 'selection']), autoFindInSelection: typeof _input.autoFindInSelection === 'boolean' ? (_input.autoFindInSelection ? 'always' : 'never') : stringSet<'never' | 'always' | 'multiline'>(input.autoFindInSelection, this.defaultValue.autoFindInSelection, ['never', 'always', 'multiline']), @@ -1533,14 +1551,14 @@ class EditorFontSize extends SimpleEditorOption { ); } - public validate(input: any): number { + public override validate(input: any): number { let r = EditorFloatOption.float(input, this.defaultValue); if (r === 0) { return EDITOR_FONT_DEFAULTS.fontSize; } return EditorFloatOption.clamp(r, 6, 100); } - public compute(env: IEnvironmentalOptions, options: IComputedEditorOptions, value: number): number { + public override compute(env: IEnvironmentalOptions, options: IComputedEditorOptions, value: number): number { // The final fontSize respects the editor zoom level. // So take the result from env.fontInfo return env.fontInfo.fontSize; @@ -1643,6 +1661,7 @@ class EditorGoToLocation extends BaseEditorOption minimapCanvasInnerHeight); - if (isViewportWrapping && fitBecomesFill) { - // remember for next time - memory.stableMinimapLayoutInput = input; - memory.stableFitRemainingWidth = remainingWidth; - } else { - memory.stableMinimapLayoutInput = null; - memory.stableFitRemainingWidth = 0; - } } } @@ -2138,14 +2154,28 @@ export class EditorLayoutInfoComputer extends ComputedEditorOption configuredMinimapScale) { minimapWidthMultiplier = Math.min(2, minimapScale / configuredMinimapScale); } minimapCharWidth = minimapScale / pixelRatio / minimapWidthMultiplier; minimapCanvasInnerHeight = Math.ceil((Math.max(typicalViewportLineCount, viewLineCount + extraLinesBeyondLastLine)) * minimapLineHeight); - if (isViewportWrapping && fitBecomesFill) { + if (isViewportWrapping) { + // remember for next time + memory.stableMinimapLayoutInput = input; + memory.stableFitRemainingWidth = remainingWidth; memory.stableFitMaxMinimapScale = minimapScale; + } else { + memory.stableMinimapLayoutInput = null; + memory.stableFitRemainingWidth = 0; } } } @@ -2390,12 +2420,12 @@ class EditorLightbulb extends BaseEditorOption>; +export type EditorInlayHintsOptions = Readonly>; -class EditorInlineHints extends BaseEditorOption { +class EditorInlayHints extends BaseEditorOption { constructor() { - const defaults: EditorInlineHintsOptions = { enabled: true, fontSize: 0, fontFamily: EDITOR_FONT_DEFAULTS.fontFamily }; + const defaults: EditorInlayHintsOptions = { enabled: true, fontSize: 0, fontFamily: '' }; super( - EditorOption.inlineHints, 'inlineHints', defaults, + EditorOption.inlayHints, 'inlayHints', defaults, { - 'editor.inlineHints.enabled': { + 'editor.inlayHints.enabled': { type: 'boolean', default: defaults.enabled, - description: nls.localize('inlineHints.enable', "Enables the inline hints in the editor.") + description: nls.localize('inlayHints.enable', "Enables the inlay hints in the editor.") }, - 'editor.inlineHints.fontSize': { + 'editor.inlayHints.fontSize': { type: 'number', default: defaults.fontSize, - description: nls.localize('inlineHints.fontSize', "Controls font size of inline hints in the editor. When set to `0`, the 90% of `#editor.fontSize#` is used.") + markdownDescription: nls.localize('inlayHints.fontSize', "Controls font size of inlay hints in the editor. When set to `0`, the 90% of `#editor.fontSize#` is used.") }, - 'editor.inlineHints.fontFamily': { + 'editor.inlayHints.fontFamily': { type: 'string', default: defaults.fontFamily, - description: nls.localize('inlineHints.fontFamily', "Controls font family of inline hints in the editor.") + description: nls.localize('inlayHints.fontFamily', "Controls font family of inlay hints in the editor. When set to empty, the `#editor.fontFamily#` is used.") }, } ); } - public validate(_input: any): EditorInlineHintsOptions { + public validate(_input: any): EditorInlayHintsOptions { if (!_input || typeof _input !== 'object') { return this.defaultValue; } - const input = _input as IEditorInlineHintsOptions; + const input = _input as IEditorInlayHintsOptions; return { enabled: boolean(input.enabled, this.defaultValue.enabled), fontSize: EditorIntOption.clampedInt(input.fontSize, this.defaultValue.fontSize, 0, 100), @@ -2460,17 +2490,18 @@ class EditorInlineHints extends BaseEditorOption { +class EditorLineHeight extends EditorFloatOption { constructor() { super( EditorOption.lineHeight, 'lineHeight', - EDITOR_FONT_DEFAULTS.lineHeight, 0, 150, - { description: nls.localize('lineHeight', "Controls the line height. Use 0 to compute the line height from the font size.") } + EDITOR_FONT_DEFAULTS.lineHeight, + x => EditorFloatOption.clamp(x, 0, 150), + { markdownDescription: nls.localize('lineHeight', "Controls the line height. \n - Use 0 to automatically compute the line height from the font size.\n - Values between 0 and 8 will be used as a multiplier with the font size.\n - Values greater than or equal to 8 will be used as effective values.") } ); } - public compute(env: IEnvironmentalOptions, options: IComputedEditorOptions, value: number): number { + public override compute(env: IEnvironmentalOptions, options: IComputedEditorOptions, value: number): number { // The lineHeight is computed from the fontSize if it is 0. // Moreover, the final lineHeight respects the editor zoom level. // So take the result from env.fontInfo @@ -2766,7 +2797,7 @@ export type ValidQuickSuggestionsOptions = boolean | Readonly { - public readonly defaultValue: Readonly>; + public override readonly defaultValue: Readonly>; constructor() { const defaults: ValidQuickSuggestionsOptions = { @@ -2989,6 +3020,7 @@ export interface IEditorScrollbarOptions { /** * The size of arrows (if displayed). * Defaults to 11. + * **NOTE**: This option cannot be updated using `updateOptions()` */ arrowSize?: number; /** @@ -3004,16 +3036,19 @@ export interface IEditorScrollbarOptions { /** * Cast horizontal and vertical shadows when the content is scrolled. * Defaults to true. + * **NOTE**: This option cannot be updated using `updateOptions()` */ useShadows?: boolean; /** * Render arrows at the top and bottom of the vertical scrollbar. * Defaults to false. + * **NOTE**: This option cannot be updated using `updateOptions()` */ verticalHasArrows?: boolean; /** * Render arrows at the left and right of the horizontal scrollbar. * Defaults to false. + * **NOTE**: This option cannot be updated using `updateOptions()` */ horizontalHasArrows?: boolean; /** @@ -3024,6 +3059,7 @@ export interface IEditorScrollbarOptions { /** * Always consume mouse wheel events (always call preventDefault() and stopPropagation() on the browser events). * Defaults to true. + * **NOTE**: This option cannot be updated using `updateOptions()` */ alwaysConsumeMouseWheel?: boolean; /** @@ -3039,11 +3075,13 @@ export interface IEditorScrollbarOptions { /** * Width in pixels for the vertical slider. * Defaults to `verticalScrollbarSize`. + * **NOTE**: This option cannot be updated using `updateOptions()` */ verticalSliderSize?: number; /** * Height in pixels for the horizontal slider. * Defaults to `horizontalScrollbarSize`. + * **NOTE**: This option cannot be updated using `updateOptions()` */ horizontalSliderSize?: number; /** @@ -3083,22 +3121,61 @@ function _scrollbarVisibilityFromString(visibility: string | undefined, defaultV class EditorScrollbar extends BaseEditorOption { constructor() { + const defaults: InternalEditorScrollbarOptions = { + vertical: ScrollbarVisibility.Auto, + horizontal: ScrollbarVisibility.Auto, + arrowSize: 11, + useShadows: true, + verticalHasArrows: false, + horizontalHasArrows: false, + horizontalScrollbarSize: 12, + horizontalSliderSize: 12, + verticalScrollbarSize: 14, + verticalSliderSize: 14, + handleMouseWheel: true, + alwaysConsumeMouseWheel: true, + scrollByPage: false + }; super( - EditorOption.scrollbar, 'scrollbar', + EditorOption.scrollbar, 'scrollbar', defaults, { - vertical: ScrollbarVisibility.Auto, - horizontal: ScrollbarVisibility.Auto, - arrowSize: 11, - useShadows: true, - verticalHasArrows: false, - horizontalHasArrows: false, - horizontalScrollbarSize: 12, - horizontalSliderSize: 12, - verticalScrollbarSize: 14, - verticalSliderSize: 14, - handleMouseWheel: true, - alwaysConsumeMouseWheel: true, - scrollByPage: false + 'editor.scrollbar.vertical': { + type: 'string', + enum: ['auto', 'visible', 'hidden'], + enumDescriptions: [ + nls.localize('scrollbar.vertical.auto', "The vertical scrollbar will be visible only when necessary."), + nls.localize('scrollbar.vertical.visible', "The vertical scrollbar will always be visible."), + nls.localize('scrollbar.vertical.fit', "The vertical scrollbar will always be hidden."), + ], + default: 'auto', + description: nls.localize('scrollbar.vertical', "Controls the visibility of the vertical scrollbar.") + }, + 'editor.scrollbar.horizontal': { + type: 'string', + enum: ['auto', 'visible', 'hidden'], + enumDescriptions: [ + nls.localize('scrollbar.horizontal.auto', "The horizontal scrollbar will be visible only when necessary."), + nls.localize('scrollbar.horizontal.visible', "The horizontal scrollbar will always be visible."), + nls.localize('scrollbar.horizontal.fit', "The horizontal scrollbar will always be hidden."), + ], + default: 'auto', + description: nls.localize('scrollbar.horizontal', "Controls the visibility of the horizontal scrollbar.") + }, + 'editor.scrollbar.verticalScrollbarSize': { + type: 'number', + default: defaults.verticalScrollbarSize, + description: nls.localize('scrollbar.verticalScrollbarSize', "The width of the vertical scrollbar.") + }, + 'editor.scrollbar.horizontalScrollbarSize': { + type: 'number', + default: defaults.horizontalScrollbarSize, + description: nls.localize('scrollbar.horizontalScrollbarSize', "The height of the horizontal scrollbar.") + }, + 'editor.scrollbar.scrollByPage': { + type: 'boolean', + default: defaults.scrollByPage, + description: nls.localize('scrollbar.scrollByPage', "Controls whether clicks scroll by page or jump to click position.") + } } ); } @@ -3130,6 +3207,118 @@ class EditorScrollbar extends BaseEditorOption>; + +/** + * Configuration options for inline suggestions + */ +class InlineEditorSuggest extends BaseEditorOption { + constructor() { + const defaults: InternalInlineSuggestOptions = { + enabled: true, + mode: 'subwordSmart' + }; + + super( + EditorOption.inlineSuggest, 'inlineSuggest', defaults, + { + 'editor.inlineSuggest.enabled': { + type: 'boolean', + default: defaults.enabled, + description: nls.localize('inlineSuggest.enabled', "Controls whether to automatically show inline suggestions in the editor.") + }, + 'editor.inlineSuggest.mode': { + type: 'string', + enum: ['prefix', 'subword', 'subwordSmart'], + enumDescriptions: [ + nls.localize('inlineSuggest.mode.prefix', "Only render an inline suggestion if the replace text is a prefix of the insert text."), + nls.localize('inlineSuggest.mode.subword', "Only render an inline suggestion if the replace text is a subword of the insert text."), + nls.localize('inlineSuggest.mode.subwordSmart', "Only render an inline suggestion if the replace text is a subword of the insert text, but the subword must start after the cursor."), + ], + default: defaults.mode, + description: nls.localize('inlineSuggest.mode', "Controls which mode to use for rendering inline suggestions.") + }, + } + ); + } + + public validate(_input: any): InternalInlineSuggestOptions { + if (!_input || typeof _input !== 'object') { + return this.defaultValue; + } + const input = _input as IInlineSuggestOptions; + return { + enabled: boolean(input.enabled, this.defaultValue.enabled), + mode: stringSet(input.mode, this.defaultValue.mode, ['prefix', 'subword', 'subwordSmart']), + }; + } +} + +//#endregion + +//#region bracketPairColorization + +export interface IBracketPairColorizationOptions { + /** + * Enable or disable bracket pair colorization. + */ + enabled?: boolean; +} + +export type InternalBracketPairColorizationOptions = Readonly>; + +/** + * Configuration options for inline suggestions + */ +class BracketPairColorization extends BaseEditorOption { + constructor() { + const defaults: InternalBracketPairColorizationOptions = { + enabled: EDITOR_MODEL_DEFAULTS.bracketPairColorizationOptions.enabled + }; + + super( + EditorOption.bracketPairColorization, 'bracketPairColorization', defaults, + { + 'editor.bracketPairColorization.enabled': { + type: 'boolean', + default: defaults.enabled, + description: nls.localize('bracketPairColorization.enabled', "Controls whether bracket pair colorization is enabled or not. Use 'workbench.colorCustomizations' to override the bracket highlight colors.") + } + } + ); + } + + public validate(_input: any): InternalBracketPairColorizationOptions { + if (!_input || typeof _input !== 'object') { + return this.defaultValue; + } + const input = _input as IBracketPairColorizationOptions; + return { + enabled: boolean(input.enabled, this.defaultValue.enabled) + }; + } +} + +//#endregion + //#region suggest /** @@ -3164,6 +3353,14 @@ export interface ISuggestOptions { * Enable or disable the suggest status bar. */ showStatusBar?: boolean; + /** + * Enable or disable the rendering of the suggestion preview. + */ + preview?: boolean; + /** + * Configures the mode of the preview. + */ + previewMode?: 'prefix' | 'subword' | 'subwordSmart'; /** * Show details inline with the label. Defaults to true. */ @@ -3180,6 +3377,10 @@ export interface ISuggestOptions { * Show constructor-suggestions. */ showConstructors?: boolean; + /** + * Show deprecated-suggestions. + */ + showDeprecated?: boolean; /** * Show field-suggestions. */ @@ -3291,10 +3492,13 @@ class EditorSuggest extends BaseEditorOption .content .github1sWelcomePage { + height: 100%; + min-height: 100%; +} + + .monaco-workbench .part.editor > .content .welcomePageContainer { align-items: center; display: flex; @@ -259,7 +265,9 @@ .file-icons-enabled .show-file-icons .vs_code_welcome_page-name-file-icon.file-icon::before { content: ' '; - background-image: url('../../../../browser/media/code-icon.svg'); + /* below codes are changed by github1s */ + background-image: url('../workbench/browser/media/code-icon.svg'); + /* above codes are changed by github1s */ } .monaco-workbench .part.editor > .content .welcomePage .mac-only, diff --git a/vscode-web-github1s/src/vs/github1s/welcomePage.ts b/vscode-web-github1s/src/vs/github1s/welcomePage.ts new file mode 100644 index 000000000..138435fe3 --- /dev/null +++ b/vscode-web-github1s/src/vs/github1s/welcomePage.ts @@ -0,0 +1,193 @@ +/* eslint-disable header/header */ +/** + * @file custom welcome page + * @author netcon + */ + +import 'vs/css!./welcomePage'; +import { ICommandService } from 'vs/platform/commands/common/commands'; +import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; +import { IProductService } from 'vs/platform/product/common/productService'; +import { escape } from 'vs/base/common/strings'; +import { localize } from 'vs/nls'; +import * as marked from 'vs/base/common/marked/marked'; +const configurationKey = 'workbench.startupEditor'; + +const buildTemplate = () => ` +

- - - - - - - - - - - - -
-